基于机器学习的临床决策支持
【摘要】
声明:本文示例来自于GitHub用户vkasojhaa的项目,一切权利归其所有,此处仅是自己学习分享。
实现了基于机器学习的乳腺癌的恶性和良性预测,比较了不同机器学习算法之间的性能。主要目的是评估在每种算法的准确性和效率方面对数据进行分类的正确性。
基于机器学习的乳腺癌预测
代码示例
#导入依赖库#!/usr/bin/python3import...
声明:本文示例来自于GitHub用户vkasojhaa的项目,一切权利归其所有,此处仅是自己学习分享。
实现了基于机器学习的乳腺癌的恶性和良性预测,比较了不同机器学习算法之间的性能。主要目的是评估在每种算法的准确性和效率方面对数据进行分类的正确性。
基于机器学习的乳腺癌预测

代码示例
#导入依赖库
#!/usr/bin/python3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import seaborn as sns
import time
%matplotlib inline
#Import models from scikit learn module:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.cross_validation import KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn import metrics
#载入数据
data = pd.read_csv("data.csv")
data.head()
#数据预处理
data.drop('id',axis=1,inplace=True) #移除id
data.drop('Unnamed: 32',axis=1,inplace=True)
print("Row, Col", data.shape)# (row,col)
#数据标记,M:恶性,B:良性
data['diagnosis'] = data['diagnosis'].map({'M':1,'B':0})
data.head()
#挖掘数据
data.describe()
探索数据
data.plot(kind='density', subplots=True, layout=(5,7), sharex=False, legend=False, fontsize=1)
plt.show()
print(data.groupby('diagnosis').size())
sns.countplot(data['diagnosis'],label="Count")
plt.show()
#划分训练集和测试集
traindf, testdf = train_test_split(data, test_size = 0.3)
labels = 'Train', 'Test'
plt.pie([70, 30], labels=labels, autopct='%1.1f%%', shadow=True)
plt.show()
print("Train set", traindf.shape)
print("Test set", testdf.shape)
features_mean= list(data.columns[1:11])
corr = data[features_mean].corr()
plt.figure(figsize=(14,14))
sns.heatmap(corr, cbar = True, square = True, annot=True, fmt= '.2f',annot_kws={'size': 15},
xticklabels= features_mean, yticklabels= features_mean,
cmap= 'coolwarm')
plt.show()
模型分类
#用于模型分类和访问性能的通用函数。
Y = data['diagnosis'].values
X = data.drop('diagnosis', axis=1).values
X_train, X_test, Y_train, Y_test = train_test_split (X, Y, test_size = 0.30, random_state=21)
def classification_model(model, data, predictors, outcome):
#拟合模型
model.fit(data[predictors],data[outcome])
#对训练集进行预测
predictions = model.predict(data[predictors])
#输出准确性
accuracy = metrics.accuracy_score(predictions,data[outcome])
print("Accuracy : %s" % "{0:.3%}".format(accuracy))
#Perform k-fold cross-validation with 5 folds
kfold = KFold(data.shape[0], n_folds=5)
error = []
for train, test in kfold:
#过滤数据
train_predictors = (data[predictors].iloc[train,:])
# 目的在于训练算法
train_target = data[outcome].iloc[train]
# 使用预测变量和目标训练算法。
model.fit(train_predictors, train_target)
#记录每次交叉验证运行的错误
error.append(model.score(data[predictors].iloc[test,:], data[outcome].iloc[test]))
cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
print("Cross-Validation Score : %s" % "{0:.3%}".format(np.mean(error)))
#Fit the model again so that it can be refered outside the function:
model.fit(data[predictors],data[outcome])
逻辑回归模型
predictor_var = ['texture_mean','perimeter_mean','smoothness_mean','compactness_mean','symmetry_mean']
outcome_var='diagnosis'
model=LogisticRegression()
classification_model(model,traindf,predictor_var,outcome_var)
Accuracy : 91.206%
Cross-Validation Score : 90.206%
决策树模型
predictor_var = ['texture_mean','perimeter_mean','smoothness_mean','compactness_mean','symmetry_mean']
model = DecisionTreeClassifier()
classification_model(model,traindf,predictor_var,outcome_var)
Accuracy : 100.000%
Cross-Validation Score : 87.446%
predictor_var = ['texture_mean']
model = DecisionTreeClassifier()
classification_model(model,traindf,predictor_var,outcome_var)
Accuracy : 96.231%
Cross-Validation Score : 66.329%
k一近邻模型
predictor_var = ['texture_mean','perimeter_mean','smoothness_mean','compactness_mean','symmetry_mean']
model= KNeighborsClassifier()
classification_model(model,traindf,predictor_var,outcome_var)
Accuracy : 92.462%
Cross-Validation Score : 89.456%
支持向量机模型
predictor_var = ['texture_mean','perimeter_mean','smoothness_mean','compactness_mean','symmetry_mean']
model= SVC()
classification_model(model,traindf,predictor_var,outcome_var)
Accuracy : 94.472%
Cross-Validation Score : 87.937%
#几种机器学习模型的性能比较
Y = data['diagnosis'].values
X = data.drop('diagnosis', axis=1).values
X_train, X_test, Y_train, Y_test = train_test_split (X, Y, test_size = 0.30, random_state=21)
models_list = []
models_list.append(('LR', LogisticRegression()))
models_list.append(('DT', DecisionTreeClassifier()))
models_list.append(('SVM', SVC()))
models_list.append(('KNN', KNeighborsClassifier()))
num_folds = 10
results = []
names = []
for name, model in models_list:
start = time.time()
cv_results = cross_val_score(model, X_train, Y_train, cv=num_folds, scoring='accuracy')
end = time.time()
results.append(cv_results)
names.append(name)
print( "%s:(run time: %f)"% (name, end-start))
LR:(run time: 0.069959)
DT:(run time: 0.047665)
SVM:(run time: 0.156240)
KNN:(run time: 0.029838)
Connecting artificial intelligence (AI) with pharmaceutical sciences.
参考资料:
https://github.com/vkasojhaa/Clinical-Decision-Support-using-Machine-Learning
文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。
原文链接:drugai.blog.csdn.net/article/details/105683689
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)