常用分类器之R语言篇
本文介绍了四种分类器在R语言中的应用,包括数据预处理、分类器建立以及准确性评估。
1.数据预处理
本文选择的数据样本包括正常组织或癌症组织,每个样本都有若干个基因数据。数据预处理大致分为3个步骤:(1)缺失值处理;(2)特征选择;(3)将数据集分为测试集和训练集。下面将依次进行介绍。
(1)缺失值处理
缺失值处理通常有两种方法:删除和插补。删除缺失值所在行的代码如下:
mydata<-mydata[complete.cases(mydata),]
缺失值填补需要用到随机森林中的na.roughfix()函数,代码如下:
install.packages("randomForest")
library(randomForest)
mydata<-na.roughfix(mydata)
(2)特征选择
本文依据随机森林模型中的特征重要性进行特征选择,代码如下:
library(randomForest)
mydata$classfi<- ifelse(mydata$Genes=="Normal tissue",c("0"),c("1"))
mydata<-mydata[,-1]
mydata$classfi<-factor(mydata$classfi,levels=c(0,1),labels=c("Normol tissue","Tumor tissue"))
set.seed(1234)
fit<-randomForest(classfi~.,data=mydata,importance=TRUE)
importance(fit,type = 2)
plot(importance(fit,type=2)
mydata<-mydata[,which(importance(fit,type=2)>0.1] # 这里的0.1是指筛选出特征重要性大于0.1的,可根据实际情况进行调整。
(3)将数据分为训练集和测试集
使用特征选择后的数据集来建立分类模型。设置70%数据为训练集,30%数据为测试集,训练集用于建立逻辑回归、决策树、随机森林以及支持向量机分类模型,测试集用于评估各个模型的有效性。代码如下:
df<-mydata
train<-sample(nrow(df),0.7*nrow(df))
df.train<-df[train,]
df.test<-df[-train,]
table(df.train$classfi)
table(df.test$classfi)
2.建立分类模型
(1)逻辑回归
逻辑回归模型可用于处理二分类问题,对应于R软件中的glm()函数。代码如下:
fit.logit<-glm(classfi~.,data=df.train,family = binomial())
summary(fit.logit)
prob<-predict(fit.logit,df.test,type = "response")
logit.pred<-factor(prob>.5,levels=c(TRUE,FALSE),labels = c("Normol tissue","Tumor tissue"))
logit.perf<-table(df.test$classfi,logit.pred,dnn = c("Actual","Predicted"))
logit.perf
(2)决策树
install.packages("rpart","rpart.plot")
library(rpart)
library(rpart.plot)
set.seed(1234)
dtree<-rpart(classfi~.,data=df.train,method = "class",parms=list(split="information"))
dtree$cptable
plotcp(dtree)
dtree.pruned<-prune(dtree,cp=.0125)
dtree.pred<-predict(dtree.pruned,df.test,type="class")
dtree.perf<-table(df.test$classfi,dtree.pred,dnn = c("Actual","Predicted"))
dtree.perf
(3)随机森林
library(randomForest)
set.seed(1234)
fit.forest<-randomForest(classfi~.,data=df.train,importance=TRUE)
fit.forest
forest.pred<-predict(fit.forest,df.test)
forest.perf<-table(df.test$classfi,forest.pred,dnn=c("Actual","Predicted"))
forest.perf
(4)支持向量机
install.packages("e1071")
library(e1071)
set.seed(1234)
fit.svm<-svm(classfi~.,data=df.train)
fit.svm
svm.pred<-predict(fit.svm,na.omit(df.test))
svm.perf<-table(na.omit(df.test)$classfi,svm.pred,dnn=c("Actual","Predicted"))
svm.perf
3.评估准确性
这里给出3个用于评估分类器准确性的统计量。最常用的是准确率(Accuracy),即分类器是否能正确划分样本;正例覆盖率(Sensitivity)是指正类的样本被预测正确的比例;精确度(Positive Predictive Value)是指被预测为正类的样本中预测正确的比例。代码如下:
performance<-function(table,n=2){if(!all(dim(table)==c(2,2)))stop("Must be a 2 X 2 table")tn=table[1,1]fp=table[1,2]fn=table[2,1]tp=table[2,2]sensitivity=tp/(tp+fn)ppv=tp/(tp+fp)accuracy=(tp+tn)/(tp+tn+fp+fn)result<-paste("Sensitivity = ",round(sensitivity,n),"\nPositive Predictive Value = ",round(ppv,n),"\nAccuracy = ",round(accuracy,n),"\n",seq=" ")cat(result)
}
performance(logit.perf)
performance(dtree.perf)
performance(forest.perf)
performance(svm.perf)
常用分类器之R语言篇相关推荐
- 9月20日云栖精选夜读 | 如何轻松搞定数据科学面试:Python&R语言篇
对于数据科学家来说,工作的一大部分都需要在交互式编程环境中对数据进行处理.分析和可视化. 在过去几年,R语言和Python成了进行数据科学中最炙手可热的两种语言.这两种语言各有优缺点,掌握这两种语言大 ...
- 统计学习导论之R语言应用(四):分类算法R语言代码实战
统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...
- 电影评论分类:二分类问题 —— R语言实现
前言 在R和Python之间如何进行选择一直是一个热议的话题.机器学习世界也被不同语言偏好所划分.但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度 ...
- pythonr语言三种基本结构_如何轻松搞定数据科学面试:Python&R语言篇
作者: Carson Forter 编译: Mika本文为 CDA 数据分析师原创作品,转载需授权 对于数据科学家来说,工作的一大部分都需要在交互式编程环境中对数据进行处理.分析和可视化. 在过去几年 ...
- 潜在类别分析之R语言篇
潜在类别分析(LCA)是通过对类别型的外显变量和潜在变量之间的关系建立统计模型,来估计外显变量之间的关系. 潜在类别分析要求潜在类别变量均为二分类变量.详细代码如下: # 安装包 install.pa ...
- 数据分析-R语言资料整理
独家分享--48页PPT解密数据可视化! Excel图表快捷操作小技巧 基于随机森林的分类与回归 R语言制作网页 ggplot2:可视化设计师的神器,了解一下 [译]R包介绍:Online Rando ...
- 《数据科学中的R语言》之字符串处理入门
原文地址:http://r4ds.had.co.nz/strings.html 作者:Hadley Wickham 介绍 1 前提条件 字符串基本操作 1 字符串长度 2 合并字符串 3 分割字符串 ...
- 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较
SPSS方差分析的应用已经做得非常好了,绝大多数的方差分析问题均可通过SPSS"点菜单"的方式得以解决,R语言在统计和可视化方面有自己的特色,我们不妨来对比着学习.选用R语言自带案 ...
- 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
详情链接 :基于R语言.MaxEnt模型融合技术的物种分布模拟.参数优化方法.结果分析制图与论文写作 内容介绍: 第一章 .理论篇 以问题导入的方式,深入掌握原理基础 : 什么是MaxEnt模型? ...
最新文章
- 软件测试培训怎么学?有没有发展前景?
- date oracle 表中_从 MySQL 迁移数据到 Oracle 中的全过程
- linux脚本结束语,读《Linux Shell脚本攻略》第9章笔记—结束语
- 获取表单内部元素的N种方法
- 如何在ASP.NET服务器控件库中嵌入JavaScript脚本文件 [适用于.NET 2.0]
- MongoDB 主从集群配置
- 天池 在线编程 回文子串(区间动态规划)
- JavaWeb中集成UEditor
- APP设计|搜索页面设计灵感
- 路边的小花 2010/05/15@多摩川
- Spring系列技术实战(项目搭建、知识点总结)
- 解决IE8 iframe透明的问题
- fiddler连接代理手机无法上网问题解决办法
- 易到暂停办理线下提现 称贾跃亭隐瞒巨额债务成影响提现关键因素
- pygame战棋游戏制作之战棋光标设置上(三)
- 软件工程详细设计师竞聘演讲稿
- 搜索网页显示找不到服务器,显示:DNS 查找失败,因此找不到 x 的服务器。DNS 是将网站名称解析为互联网地址的网络服务...
- 优化嵌入式Linux的启动时间的秘密
- 网络命令(ARP、PING)的使用分析
- 好文分享 努力从何时开始都不晚 跟自己比 不断进步
热门文章
- Linux技术资料锦集及命令大全,让你从新手变高手
- 大型软件公司.Net面试常见题(含答案)
- c语言鼠标事件的详解,JS鼠标事件(非常详细)
- 【Java】FastJson如何返回不带转义字符的json字符串
- 编码踩坑——dubbo异常“Service not found“
- 信息战争,从过去到未来
- 推荐8个超厉害的网站,很多人在偷偷用,你知道几个?
- 【原创】2018.07.07 考试 //生气的奶牛 无线电通信 奶牛修 堡垒
- 水煮牛肉(砂锅牛肉)
- c语言 整数除以分数,3.12数学与应用数学专业人才培养模式改革创新的具体措施与.PDF...