知足常乐|写给医生的人工智能体验课(三):利用SPSS、R、python建立简单的神经网络( 二 )
这张图是神经网络的结构图 , 因子型变量中的每个分类都是一个输入单元 , 偏差(偏置)被单独列出来 , 因为是二分类的模型 , 所以输出层有两个 。 神经元之间的连线是权重 , 线条的粗细代表联系的紧密程度
【知足常乐|写给医生的人工智能体验课(三):利用SPSS、R、python建立简单的神经网络】下表是模型的预测准确率 , 训练集有173例非肺癌患者 , 模型成功预测了165例 , 准确率为95.4%;但是 , 模型仅仅能辨认出62例肺癌患者中的6例 , 准确率为9.7%;训练集总准确率为(165+6)/235=72.8% 。 同理 , 检验集的总准确率为80.7% , 肺癌患者的准确率为13% 。
由此可见 , 模型虽然表面上看总体准确率还可以 , 但是对于肺癌患者的预测能力很低 , 这种模型对临床应用没太大帮助 , 效果也不一定比传统的logistic回归好 。 大家有兴趣可以参考医咖会之前的SPSS教程:多项测量指标的ROC曲线分析 , 对比两种模型效果 。
产生这个现象的原因可能有:1.样本不均衡 , 344例患者中肺癌患者数只有85例 , 远低于非肺癌患者;2.预测变量太少 , 或预测变量不能反映因变量 。 譬如如果造成患者是否患肺癌的最主要原因是某个基因的改变 , 但是数据集没有这个变量 , 那模型预测效果肯定不好;3.模型参数没有设置好 。
正如大多数临床研究一样 , 原因1和2都是很难补救的 , 那下一步我们尝试用R和python建立更复杂的神经网络模型 , 看看预测效果有没有变好 。 值得注意的是 , SPSS中神经网络初始权重的设置是随机的 , 所以每次输出的预测结果会有不同 。
二.R建模主要分三部分:1.数据预处理 , 包括标准化和哑变量处理;2.拆分数据集和构建网络;3.评估模型 。 这里对代码不做详细讲解 , 请大家用电脑跑一遍 , 会有更深刻的印象 。 为何要做数据标准化和哑变量处理 , 请查看医咖会既往教程 。
1. 数据预处理
#加载包
library(caret)
library(MASS)
library(neuralnet)
#设置工作路径
setwd("F:/学习笔记")#代码和数据都在同一文件夹 , 输入自己的文件夹路径
#载入数据
datann<-read.csv("practive.csv")
str(datann)
#对年龄进行Z-score标准化
datann$age<-scale(datann$age)
#对因子变量进行哑变量处理
dummies<-dummyVars(cancer~sex+BMI+COPD+smoke, data = http://kandian.youth.cn/index/datann, fullRank = FALSE)
datadmy<-as.data.frame(predict(dummies,newdata = http://kandian.youth.cn/index/datann))
datadmy$age<-datann$age
#建立因变量
datadmy$cancer<-ifelse(datann$cancer=="肺癌",1,0)
table(datadmy$cancer)
2. 拆分数据集和构建网络
set.seed(123)
trainIndex<-createDataPartition(datadmy$cancer,p=0.7,list = FALSE)
datatrain<-datadmy[trainIndex,]
datatest<-datadmy[-trainIndex,]
#构建神经网络
n<-names(datatrain)
form
推荐阅读
- 想好好做医生的胖子|五十岁女性经常有周身无力和疼痛的困扰!该如何应对?医生告诉您
- 时尚穿搭|日系穿搭不容错过,可爱风女生的必备穿搭,小个子女生看过来
- 扒褂|“芒果发卡”风很大?理科生VS体育生,看到美术生的:不怕下雨吗?
- 中国历史上发生的疫情|中国历史上发生的疫情 中国历史上发生的疫情那次“香港流感
- 中国历史上发生的疫情|中国历史上发生的疫情!古代中国疫灾是如何报告与处置的呢
- 【财富】当一个人想明白了这3个问题,会越来越“富有”,别不信
- 印度|印度造舰时发生的奇葩意外:航母即将完工,才突然发现未装发动机
- 中国历史上发生的疫情|中国历史上发生的疫情?中国历史上发生的疫情:中国历代发生大的疫灾
- 环球网|写给想要进入艺术行业的后浪们
- 中国曾经发生的疫情|中国曾经发生的疫情:中国曾经发生的疫情 污蔑中国为何成了西方精英的“刚
