声明:本文示例来自于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 foldskfold = 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

基于机器学习的临床决策支持相关推荐

  1. 基于机器学习的临床决策支持-ANN

    声明:本文示例来自于GitHub用户vkasojhaa的项目,一切权利归其所有,此处仅是自己学习分享. 实现了基于机器学习的乳腺癌的恶性和良性预测,比较了不同机器学习算法之间的性能.主要目的是评估在每 ...

  2. 【强化学习-医疗】用于临床决策支持的深度强化学习:简要综述

    Article 作者:Siqi Liu, Kee Yuan Ngiam, Mengling Feng 文献题目:用于临床决策支持的深度强化学习:简要综述 文献时间:2019 文献链接:https:// ...

  3. NLP电子病历后结构化软件系统对临床决策支持系统(CDSS)的支持(结构化数据的必要性)

    我们是专注于电子病历后结构化研究的人工智能研发团队,微信wxid123765fg 评级对电子病历的智能化要求越来越高,提升电子病历智能化层级,使之成为临床决策支持工具,是医院临床信息化发展的重要方向, ...

  4. python爬取电子病历_自然语言处理技术应用于电子病历后结构化系统对临床决策支持系统(CDSS)的支持...

    评级对电子病历的智能化要求越来越高,提升电子病历智能化层级,使之成为临床决策支持工具,是医院临床信息化发展的重要方向,那么电子病历后结构化对临床辅助决策有什么帮助呢? 电子病历的数据包含了临床决策所需 ...

  5. 计算机化信息系统 医疗,浅述监护信息系统在临床决策信息化建设中的价值

    从20世纪70年代起,信息技术被逐步系统化地应用于医疗卫生行业.信息化架构下的高效与广泛,可更好的实现患者临床医疗信息的收集和处理,帮助医生积累和挖掘临床知识,提供有效的临床咨询.辅助诊疗及临床决策等 ...

  6. 《机器学习》西瓜书课后习题4.3——python实现基于信息熵划分的决策树算法(简单、全面)

    <机器学习>西瓜书课后习题4.3--python实现基于信息熵划分的决策树算法 <机器学习>西瓜书P93 4.3 试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数 ...

  7. R语言基于dcurves包绘制COX回归临床决策曲线

    因为R的rmda包做不了COX回归临床决策曲线,很多朋友都是通过ggdca包来绘制COX回归临床决策曲线,最近很多粉丝使用ggdca包来绘制COX回归临床决策曲线出现问题过来问我,我绘制的时候没发现什 ...

  8. 基于GIS的地震现场应急信息管理与决策支持平台

    建设背景 针对现场救援行动过程(准备.机动.行动.撤离.总结)的指挥和管理,通过建设具备现场灾情收集.指挥辅助决策以及行动过程管理等功能的地震现场应急信息管理与决策支持平台,为数据快速采集,救援目标快 ...

  9. 深度 | Nature论文:无监督表征学习,用电子健康病历增强临床决策

    参考地址选自 Nature 作者:Riccardo Miotto, Li Li, Brian A. Kidd & Joel T. Dudley 机器之心编译 参与:吴攀.亚洲.孙睿.微胖 引言 ...

最新文章

  1. html导航下拉菜单js点击显示不出来,使用JS做下拉菜单,子菜单不显示
  2. 【Python入门】Python之shutil模块11个常用函数详解
  3. 9.整型安全操作.rs
  4. LeetCode 258 Add Digits
  5. Spring(1)-IOC
  6. xp怎么删除计算机用户,谁了解xp系统如何删除工作组计算机
  7. 报表默认执行查询及汉字无法查询原因处理
  8. android 应用的资源
  9. oracle 除法问题,javascript中除法问题
  10. python输出被五整除的数_python中给定一系列正整数能被5整除的数字中所有偶数的和?...
  11. 2.http dns
  12. 解决vscode下载太慢的问题
  13. MTK Pump Express 快速充电原理分析
  14. 定制性MES系统软件
  15. 为什么ios比android流畅
  16. FFMPEG安装与视频格式flv转换mp4
  17. 大厂纷纷押宝“元宇宙”“鸡肋”智能眼镜难成密钥
  18. 图书管理系统的数据库设计
  19. 三线压力传感器原理_三线机油压力传感器作用是什么?工作原理是什么?
  20. 已解决,软件V2报错 failed to read response header > websocket: close 1005 (no status)问题

热门文章

  1. 关于MySQL的酸与MVCC和面试官小战三十回合
  2. 程序员搞事!动手实战优化自己公司线上系统JVM,结果。。。
  3. 最新最全大数据图谱,请拿走不谢!
  4. 有关 HashMap 面试会问的一切
  5. 面试必备的 23 个JVM 面试真题!
  6. 为什么很多程序员工作时都戴耳机?
  7. 分享8个非常实用但是名气不大的软件
  8. 系统复制-快速重装系统
  9. OpenCV车牌/数字识别
  10. 最小树形图复杂度分析