现代分类要领在医学诊断中的应用——基于R的实现
当前位置:以往代写 > 其他教程 >现代分类要领在医学诊断中的应用——基于R的实现
2019-06-14

现代分类要领在医学诊断中的应用——基于R的实现

现代分类要领在医学诊断中的应用——基于R的实现

1.引言

跟着统计科学的日益成长,其对其他学科的渗透浸染日益加强,数据阐明要领在医学、生物学、社会学等各个学科中获得了遍及的应用,本文试图对收集到的某个临床医学数据运用决定树、神经网络、支持向量机、随机丛林等各类现代分类要领举办阐明,以佐证数据挖掘对其他学科的重要意义;另一方面,就各类现代分类要领的实际结果举办比拟。


笔者从网上收集到关于某个脊椎病变的临床医学数据,该数据集为真实果真的非人造数据,发布地点为:http://archive.ics.uci.edu/ml/datasets/Vertebral+Column。该数据集记录了病人的骨盆和形状位置特征,别离为盆腔炎的发病率,骨盆倾斜,腰椎前凸角度,骶骨倾斜,骨盆半径和品位滑脱(pelvic incidence, pelvic tilt, lumbar lordosis angle,sacral slope, pelvic radius and grade of spondylolisthesis),均为持续型变量。因变量为分类变量,用于甄别病人正常与不正常(Normal &Abnormal)。全数据集共包括310个样本,信息完整,无缺失值。


>weka2C<-read.csv(“F:\\column_2C_weka.csv”,header=TRUE)


>summary(weka2C)

2.现代分类要领阐明

通过对数据集的调查,前210位病人均被检测为不正常(Abnormal),后100位病人被检测为正常(Normal)。为利便对模子结果举办评价并对差异的模子举办比拟,本文将从两个群体中各随机抽取一半的样本作为练习集,另一半作为测试集。


>set.seed(2)


>samp<-c(sample(1:210,105),sample(211:310,50))

2.1 决定树算法

决定树是一种迫近离散函数值的典范分类算法,对付非离散变量,将持续型数据离散化同样可以举办决定树阐明。决定树的本质是操作归纳算法生成可读的法则和决定树,然后利用决定对新数据举办阐明。以下就运用决定树算法对原始临床数据举办阐明。


>library(rpart)


>weka2C.rp<-rpart(class2~.,weka2C[samp,])


>plot(weka2C.rp,branch=1,margin=0.2,main=”ClassificationTree”)


>text(weka2C.rp,col=”blue”)


通过Plot函数可绘出练习的决定树模子。


                              


Tree.png

<span style=”mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;” p=””

>tabe(weka2C$class2[-samp],predict(weka2C.rp,weka2C[-samp,],type=”class”))


tree1.png



>table(weka2C$class2[samp],predict(weka2C.rp,weka2C[samp,],type=”class”))


通过的获得的决定树模子对测试集和练习集举办分类获得以下功效,测试集判错率为0.18709,练习集的判错率为0.10322。



2.2 bagging

Bagging操作了自助法(bootstrap)放回抽样。它对练习样本做很多次(好比k次)放回抽样,每次抽取和样本量同样的视察值,于是发生k个差异的样本。然后,对每个样本生成一个决定树。这样,每个树都对一个新的视察值发生一个预测,由这些树的分类功效的大都(“投票”)发生bagging的分类。


>library(adabag)


>ibrary(rpart)


>weka.bag=bagging(class2~.,data=weka2C[samp,],mfinal=25,control=rpart.control(maxdepth=5))


>weka.pred=predict.bagging(weka.bag,newdata=weka2C[-samp,])


>weka.pred[-1]


>weka.predt=predict.bagging(weka.bag,newdata=weka2C[samp,])


>weka.predt[-1]


最终获得bagging分类功效,其测试集判错率为0.15484,练习集判错率为0.09032。



Bagging.png


同时我们可以获得分类进程中变量的重要性,可看出,品位滑脱(grade of spondylolisthesis)是最重要的影响变量。


>barplot(weka.bag$importance)


Bagging2.png


2.3 Adaboost

Adaboost是一种迭代分类算法,不绝地通过加权再抽样改造分类器,每一次迭代时都针对前一个分类器对某些视察值的误分缺陷加以批改,凡是是在(放回)抽取样本时对那些误分的视察值增加权重(相当于对正确分类的淘汰权重),这样就形成一个新的分类器进入下一轮迭代。在每轮迭代时都对这一轮发生的分类器给堕落误率,最终功效由各个阶段的分类器的凭据错误率加权投票发生。


以下通过Adaboost对临床数据集举办阐明:


>library(mlbench)


>library(adabag)


>library(rpart)


>weka.adab=boosting(class2~.,data=weka2C[samp,],mfinal=15,control=rpart.control(maxdepth=5)


>weka.pred<-predict.boosting(weka.adab,newdata=weka2C[-samp,])


>weka.pred[-1]


>weka.predt<-predict.boosting(weka.adab,newdata=weka2C[samp,])


>weka.predt[-1]


获得模子对数据集的分类环境,测试集的判错率为0.14193,练习集无判错。



Adaboost.png


与Bagging雷同,可以输出模子练习进程中获得的变量重要性,大抵功效与Bagging雷同,品位滑脱(grade of spondylolisthesis)是最重要的影响变量。


>barplot(weka.adab$importance)


adaboost2.png

2.4 神经网络算法

人工神经网络(ArtificialNeural Networks)是对自然的神经网络的仿照;它可以有效地办理很巨大的有大量相互相关变量的回归和分类问题,我们同样可以用之成立脊椎病变临床数据集的分类模子。


>library(nnet)


>weka.nn1=nnet(class2~.,data=weka2C,subset=samp,size=10,rang=0.1,decay=5e-4,maxit=1000)


>table(weka2C$class2[-samp],predict(weka.nn1,weka2C[-samp,],type=”class”))


>table(weka2C$class2[samp],predict(weka.nn1,weka2C[samp,],type=”class”))


雷同的,操作练习获得的神经网络模子对数据集从头举办分类,测试集判错率为0.13548。


nn.png

2.5 k最近邻要领

K最近邻要领是经典的分类算法,其根基算法思想为以待测样本的k个最近间隔的样本点的所属种别举办投票抉择待分类样本点的种别。


>library(kknn)


>weka.knn<-kknn(class2~.,k=20,weka2C[samp,],weka2C[-samp,],distance=1,kernel=”triangular”)


>summary(weka.knn)


>fit<-fitted(weka.knn)


>table(weka2C[-samp,]$class2,fit)


用k最相近要领获得的预测种别功效显示判错率为0.18065。


knn.png

2.6 随机丛林要领

在呆板进修中,随机丛林是一个包括多个决定树的分类器, 而且其输出的种别是由个体树输出的类此外众数而定。随机丛林的重要利益是可以办理多变量样本不敷的问题,尽量此次临床数据样本足够,可依然可以实验用随机丛林举办分类。


>library(randomForest)


>weka.rf=randomForest(class2~.,data=weka2C[samp,],importance=TRUE,proximity=TRUE)


>rf.pre<-


>table(weka2C[-samp,]$class2,predict(weka.rf,weka2C[-samp,]))


>table(weka2C[samp,]$class2,predict(weka.rf,weka2C[samp,])


通过获得的随机丛林模子对测试集和练习集举办分类,测试集判错率为0.14193。


rf.png

2.7 支持向量机

支持向量机是另一种现代分类要领,用支持向量机脊椎病变临床数据集举办阐明基于R的实现代码如下:


>library(class)


>library(e1071)


>model<-svm(class2~.,data=weka2C[samp,],kernal=”sigmoid”)


>table(pred.train<-fitted(model),weka2C[samp,]$class2)


>table(predict(model,weka2C[-samp,-7]),weka2C[-samp,]$class2)


用获得模子对数据集举办分类,测试集判错率为0.18065,练习集判错率为0.13548。



svm.png


3.现代分类要领结果比拟

为对以上的现代分类要领分类结果举办评价,从头对各个模子的预测环境举办整合。从每个模子的分类结果可以看出,Adaboost、神经网络和随机丛林分类结果相对较好,测试集的精确率到达了85%以上。决定树、K最相近要领、支持向量机的分类结果最差,但精确率也到达了80%以上,具有应用的代价。


com.png

4.结语

通过差异的分类要领成立差异的脊椎病变诊断模子,其精确均到达了80%以上,对临床医学上的诊断具有必然的参考代价,在必然水平上可以通过盆腔炎的发病率,骨盆倾斜,腰椎前凸角度,骶骨倾斜,骨盆半径和品位滑脱水平等信息对病人举办诊断,证实了数据挖掘对其他学科的重要意义,数据科学时代即将到来。


另一方面,选择分类模子的进程中需要按照数据集环境实验运用差异的分类要领,并用交错验证的要领对模子举办检测,最后选择兼具精确性和不变性的分类模子,以实现数据的较高操作代价。

    关键字:

在线提交作业