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

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

简介

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

 

代码实例


导入依赖库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlineimport numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

载入数据

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

image.png

清理数据

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

image.png

定义'特征'和'样本'

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

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

labels_df = labels_df.replace({'ALL':0, 'AML':1})
train_labels = labels_df[labels_df.index <= 38]
test_labels = labels_df[labels_df.index > 38]
print(train_labels.shape, test_labels.shape)
# labels_df.index
test_df = test_df.T
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())

联合训练集和测试集

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

image.png

标准化和处理高维度

标准化


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


高维度


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


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

image.png

PCA(聚类分析)

# PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=50, random_state=42)
X_pca = pca.fit_transform(X_std)
print(X_pca.shape)
cum_sum = pca.explained_variance_ratio_.cumsum()
cum_sum = cum_sum*100
fig = plt.figure(figsize=(10,10))
plt.bar(range(50), cum_sum)
plt.xlabel('PCA', size=30)
plt.ylabel('Cumulative Explained Varaince', size=30)
plt.title("Around 90% of variance is explained by the First 50 columns ", size=30)

image.png

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

image.png

RF分类

X = X_pca
y = labels
print(X.shape, y.shape)

划分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
print(X_train.shape, y_train.shape)
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
rfc = RandomForestClassifier(random_state=42)
rfc.fit(X_train, y_train)
y_pred = rfc.predict(X_test)
print(accuracy_score(y_test, y_pred))
0.7083333333333334

重要特征

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

image.png

Confusion Matrix(混淆矩阵)

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

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

image.png

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


目录
相关文章
|
30天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:智能天气预测与气候分析
使用Python实现深度学习模型:智能天气预测与气候分析
323 3
|
3月前
|
机器学习/深度学习 数据挖掘 Python
【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现
第十届“泰迪杯”数据挖掘挑战赛B题中对电力系统负荷预测分析进行时间突变分析的Python实现方法,包括定义绘图函数、应用阈值查找异常值、手动设置阈值、使用分位数和3Sigma原则(IQR)设定阈值,以及根据分位数找到时间突变的步骤,并提供了完整代码的下载链接。
69 0
|
6月前
|
机器学习/深度学习 算法
利用机器学习进行股市预测的可行性分析
【5月更文挑战第31天】本文探讨了机器学习技术在股市预测中的应用。通过对历史数据的分析和模型训练,我们可以构建出能够预测未来股市走势的模型。然而,由于股市受到多种因素的影响,包括经济、政治和社会因素等,因此预测的准确性仍然存在挑战。本文将介绍一些常见的机器学习算法和它们在股市预测中的应用,并提供一些建议来提高预测的准确性。
|
6月前
|
机器学习/深度学习 数据采集 数据挖掘
LabVIEW进行癌症预测模型研究
LabVIEW进行癌症预测模型研究
31 5
|
6月前
R语言马尔可夫转换模型研究交通伤亡人数事故预测
R语言马尔可夫转换模型研究交通伤亡人数事故预测
硕士毕业设计:基于医疗异构信息网络表征学习的病人相似性(聚类分析)
硕士毕业设计:基于医疗异构信息网络表征学习的病人相似性(聚类分析)
57 0
|
机器学习/深度学习 算法 数据挖掘
高血压疾病预测模型构建研究与应用
高血压疾病预测模型构建研究与应用。
199 0
|
机器学习/深度学习 数据采集 算法
基于影像组学的膀胱癌治疗反应评估:深度学习的应用
本文旨在探讨基于影像组学的膀胱癌治疗反应评估方法,介绍影像组学技术的基本概念和特征提取方法,并探讨深度学习算法在癌症治疗反应评估中的应用。将参考和解析文献Bladder Cancer Treatment Response Assessment in CT using Radiomics with Deep-Learning的分析过程。
138 0
|
机器学习/深度学习 人工智能 数据可视化
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
人工智能创新挑战赛:助力精准气象和海洋预测Baseline[2]:数据探索性分析(温度风场可视化)、CNN+LSTM模型建模
|
机器学习/深度学习 算法 Python
实战案例|肿瘤预测模型~
大家好,我是志斌~ 今天来跟大家分享一下朴素贝叶斯模型的原理以及通过肿瘤预测模型来看如何用Python实现它。
1124 0
实战案例|肿瘤预测模型~