[数据科学] 通过基因表达监测进行肿瘤预测

举报
DrugAI 发表于 2021/07/15 04:00:49 2021/07/15
【摘要】 简介 通过基因表达监测(DNA微阵列)对新的癌症病例进行分类,从而为鉴定新的癌症类别和将肿瘤分配到已知类别提供了一般方法。这些数据用于对患有急性髓性白血病(AML)和急性淋巴细胞白血病(ALL)的患者进行分类。   代码实例 导入依赖库 import numpy as npimport pandas as pdimport matplotlib.pypl...

简介

通过基因表达监测(DNA微阵列)对新的癌症病例进行分类,从而为鉴定新的癌症类别和将肿瘤分配到已知类别提供了一般方法。这些数据用于对患有急性髓性白血病(AML)和急性淋巴细胞白血病(ALL)的患者进行分类。

 

代码实例


导入依赖库


  
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. %matplotlib inline

载入数据


  
  1. labels_df = pd.read_csv('actual.csv', index_col = 'patient')
  2. test_df = pd.read_csv('data_set_ALL_AML_independent.csv')
  3. data_df = pd.read_csv('data_set_ALL_AML_train.csv')
  4. print('train_data: ', data_df.shape, '\n test_data: ', test_df.shape, '\n labels: ', labels_df.shape)
  5. # labels_df.shape
  6. data_df.head() #查看前5行(默认前5行)

 

清理数据


  
  1. test_cols_to_drop = [c for c in test_df.columns if 'call' in c]
  2. test_df = test_df.drop(test_cols_to_drop, axis=1)
  3. test_df = test_df.drop(['Gene Description', 'Gene Accession Number'], axis=1 )
  4. data_cols_to_drop = [c for c in data_df.columns if 'call' in c]
  5. data_df = data_df.drop(data_cols_to_drop, axis=1)
  6. data_df = data_df.drop(['Gene Description', 'Gene Accession Number'], axis=1 )
  7. print('train_data ', data_df.shape, '\n test_data: ', test_df.shape, '\n labels: ', labels_df.shape)
  8. data_df.head()

定义'特征'和'样本'

使用基因表达值来预测癌症类型。 因此,特征是患者的基因和样本。 使用X作为输入数据,其中行是样本(患者),列是特征(基因)。

将'ALLL'替换为0,将'AML'替换为1。


  
  1. labels_df = labels_df.replace({'ALL':0, 'AML':1})
  2. train_labels = labels_df[labels_df.index <= 38]
  3. test_labels = labels_df[labels_df.index > 38]
  4. print(train_labels.shape, test_labels.shape)
  5. # labels_df.index
  6. test_df = test_df.T
  7. train_df = data_df.T

检查空值

print('Columns containing null values in train and test data are ', data_df.isnull().values.sum(),  test_df.isnull().values.sum())
 

联合训练集和测试集


  
  1. full_df = train_df.append(test_df, ignore_index=True)
  2. print(full_df.shape)
  3. full_df.head()

 

标准化和处理高维度

标准化

所有变量具有非常相似的范围的方式重新调整我们的变量(预测变量)。

高维度

只有72个样本和7000多个变量。 意味着如果采取正确的方法,模型很可能会受到HD的影响。 一个非常常见的技巧是将数据投影到较低维度空间,然后将其用作新变量。 最常见的尺寸减小方法是PCA。


  
  1. # Standardization
  2. from sklearn import preprocessing
  3. X_std = preprocessing.StandardScaler().fit_transform(full_df)
  4. # Check how the standardized data look like
  5. gene_index = 1
  6. print('mean is : ', np.mean(X_std[:, gene_index] ) )
  7. print('std is :', np.std(X_std[:, gene_index]))
  8. fig= plt.figure(figsize=(10,10))
  9. plt.hist(X_std[:, gene_index], bins=10)
  10. plt.xlim((-4, 4))
  11. plt.xlabel('rescaled expression', size=30)
  12. plt.ylabel('frequency', size=30)

 

PCA(聚类分析)


  
  1. # PCA
  2. from sklearn.decomposition import PCA
  3. pca = PCA(n_components=50, random_state=42)
  4. X_pca = pca.fit_transform(X_std)
  5. print(X_pca.shape)

  
  1. cum_sum = pca.explained_variance_ratio_.cumsum()
  2. cum_sum = cum_sum*100
  3. fig = plt.figure(figsize=(10,10))
  4. plt.bar(range(50), cum_sum)
  5. plt.xlabel('PCA', size=30)
  6. plt.ylabel('Cumulative Explained Varaince', size=30)
  7. plt.title("Around 90% of variance is explained by the First 50 columns ", size=30)


  
  1. labels = labels_df['cancer'].values
  2. colors = np.where(labels==0, 'red', 'blue')
  3. from mpl_toolkits.mplot3d import Axes3D
  4. plt.clf()
  5. fig = plt.figure(1, figsize=(15,15 ))
  6. ax = Axes3D(fig, elev=-150, azim=110,)
  7. ax.scatter(X_pca[:, 0], X_pca[:, 1], X_pca[:, 2], c=colors, cmap=plt.cm.Paired,linewidths=10)
  8. ax.set_title("First three PCA directions")
  9. ax.set_xlabel("PCA1")
  10. ax.w_xaxis.set_ticklabels([])
  11. ax.set_ylabel("PCA2")
  12. ax.w_yaxis.set_ticklabels([])
  13. ax.set_zlabel("PCA3")
  14. ax.w_zaxis.set_ticklabels([])
  15. plt.show()

RF分类


  
  1. X = X_pca
  2. y = labels
  3. print(X.shape, y.shape)

划分训练集和测试集


  
  1. from sklearn.model_selection import train_test_split
  2. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  3. print(X_train.shape, y_train.shape)

  
  1. import seaborn as sns
  2. from sklearn.ensemble import RandomForestClassifier
  3. from sklearn.metrics import accuracy_score
  4. rfc = RandomForestClassifier(random_state=42)
  5. rfc.fit(X_train, y_train)
  6. y_pred = rfc.predict(X_test)
  7. print(accuracy_score(y_test, y_pred))
0.7083333333333334
 

重要特征


  
  1. labs = ['PCA'+str(i+1) for i in range(X_train.shape[1])]
  2. importance_df = pd.DataFrame({
  3. 'feature':labs,
  4. 'importance': rfc.feature_importances_
  5. })
  6. importance_df_sorted = importance_df.sort_values('importance', ascending=False)
  7. importance_df_sorted.head()
  8. fig = plt.figure(figsize=(25,10))
  9. sns.barplot(data=importance_df_sorted, x='feature', y='importance')
  10. plt.xlabel('PCAs', size=30)
  11. plt.ylabel('Feature Importance', size=30)
  12. plt.title('RF Feature Importance', size=30)
  13. plt.savefig('RF Feature Importance.png', dpi=300)
  14. plt.show

Confusion Matrix(混淆矩阵)

Gradient Boost Classifier(梯度增强分类器)


  
  1. from sklearn.metrics import confusion_matrix
  2. cm = confusion_matrix(y_test, y_pred)
  3. ### Normalize cm, np.newaxis makes to devide each row by the sum
  4. cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
  5. print(np.newaxis)
  6. cmap=plt.cm.Blues
  7. plt.imshow(cm, interpolation='nearest', cmap=cmap)
  8. print(cm)


  
  1. from sklearn.ensemble import GradientBoostingClassifier
  2. gbc = GradientBoostingClassifier(random_state=42)
  3. gbc.fit(X_train, y_train)
  4. y_gbc_pred = gbc.predict(X_test)
  5. print(accuracy_score(y_test, y_gbc_pred))
0.7083333333333334
 

参考:

https://www.kaggle.com

Molecular Classification of Cancer: Class Discovery and Class Prediction by Gene Expression

Science 286:531-537. (1999). Published: 1999.10.14

T.R. Golub, D.K. Slonim, P. Tamayo, C. Huard, M. Gaasenbeek, J.P. Mesirov, H. Coller, M. Loh, J.R. Downing, M.A. Caligiuri, C.D. Bloomfield, and E.S. Lander

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/99676017

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。