Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R 交叉验证①

R 交叉验证①

作者头像
用户1359560
发布于 2018-08-27 03:34:11
发布于 2018-08-27 03:34:11
83000
代码可运行
举报
文章被收录于专栏:生信小驿站生信小驿站
运行总次数:0
代码可运行
  • 什么是交叉验证?在机器学习中,交叉验证是一种重新采样的方法,用于模型评估,以避免在同一数据集上测试模型。交叉验证的概念实际上很简单:我们可以将数据随机分为训练和测试数据集,而不是使用整个数据集来训练和测试相同的数据。交叉验证方法有几种类型LOOCV - leave -one- out交叉验证,holdout方法,k - fold交叉验证。
  • K折交叉验证(k-fold cross-validation)首先将所有数据分割成K个子样本,不重复的选取其中一个子样本作为测试集,其他K-1个样本用来训练。共重复K次,平均K次的结果或者使用其它指标,最终得到一个单一估测。这个方法的优势在于,保证每个子样本都参与训练且都被测试,降低泛化误差。其中,10折交叉验证是最常用的。

英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也[相差无几

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#####################################################

#--------------------------------------------------

#####################################################
#数据导入并分组
target.url <- 'https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data'
data <- read.csv(target.url,header = F) 
set.seed(17)  
require(caret)  
folds <- createFolds(y=data[,61],k=10)

#####################################################

#--------------------------------------------------

#####################################################
#2、选取最优训练集与测试集的AUC为最优的训练集与测试集划分。
library(pROC)
max=0  
num=0 
auc_value<-as.numeric()
for(i in 1:10){  
  fold_test <- data[folds[[i]],]   #取folds[[i]]作为测试集  
  fold_train <- data[-folds[[i]],]   # 剩下的数据作为训练集    
  fold_pre <- lm(as.numeric(V61)~.,data=fold_train)  
  fold_predict <- predict(fold_pre,
                          type='response',
                          newdata=fold_test)  
  
  auc_value<- append(auc_value,
                     as.numeric(auc(as.numeric(fold_test[,61]),
                                    fold_predict)))
} 

num <- which.max(auc_value)
print(auc_value)


#####################################################

#--------------------------------------------------

#####################################################
#根据前一步的结果,使用最优划分构建线性分类器并预测。绘制出测试集的ROC曲线。
fold_test <- data[folds[[num]],]   
fold_train <- data[-folds[[num]],]
fold_pre <- lm(as.numeric(V61)~.,data=fold_train)  
fold_predict <- predict(fold_pre,type='response',newdata=fold_test)
roc_curve <- roc(as.numeric(fold_test[,61]),fold_predict)
plot(roc_curve, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
     grid.col=c("green", "red"), max.auc.polygon=TRUE,
     auc.polygon.col="skyblue", print.thres=TRUE,main="ROC curve for the set with the largest AUC value")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set.seed(450)
cv.error <- NULL
k <- 10
library(plyr) 
pbar <- create_progress_bar('text')
pbar$init(k)
for(i in 1:k){
  index <- sample(1:nrow(data),round(0.9*nrow(data)))
  train.cv <- scaled[index,]
  test.cv <- scaled[-index,]
  nn <- neuralnet(f,data=train.cv,hidden=c(5,2),linear.output=T)
  pr.nn <- compute(nn,test.cv[,1:13])
  pr.nn <- pr.nn$net.result*(max(data$medv)-min(data$medv))+min(data$medv)
  test.cv.r <- (test.cv$medv)*(max(data$medv)-min(data$medv))+min(data$medv)
  cv.error[i] <- sum((test.cv.r - pr.nn)^2)/nrow(test.cv)
  pbar$step()
}


mean(cv.error)
cv.error
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(randomForest)
data("iris")
data <- iris
library("caret")  
folds<-createFolds(y=data$Species,k=10) #根据training的laber-Species把数据集切分成10等份  
re<-{}  
for(i in 1:10){  
  traindata <- data[-folds[[i]],]  
  testdata <- data[folds[[i]],]  
  rf <- randomForest(Species ~ ., data=traindata, ntree=100, proximity=TRUE) #Species是因变量  
  re=c(re,length(traindata$Species[which(predict(rf)== traindata$Species)])/length(traindata$Species))  
}  
mean(re)#取k折交叉验证结果的均值作为评判模型准确率的结果  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
k折交叉验证(R语言)
“ 机器学习中需要把数据分为训练集和测试集,因此如何划分训练集和测试集就成为影响模型效果的重要因素。本文介绍一种常用的划分最优训练集和测试集的方法——k折交叉验证。” k折交叉验证 K折交叉验证(k-fold cross-validation)首先将所有数据分割成K个子样本,不重复的选取其中一个子样本作为测试集,其他K-1个样本用来训练。共重复K次,平均K次的结果或者使用其它指标,最终得到一个单一估测。 这个方法的优势在于,保证每个子样本都参与训练且都被测试,降低泛化误差。其中,10折交叉验证是最常用的。
三猫
2018/04/10
6.9K0
k折交叉验证(R语言)
机器学习(十二)交叉验证实例
假设有个未知模型具有一个或多个待定的参数,且有一个数据集能够反映该模型的特征属性(训练集)。
致Great
2018/11/07
2.6K0
独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)
在机器学习的世界里,我发现K邻近算法(KNN)分类器是最直观、最容易上手的,甚至不需要引入任何数学符号。
数据派THU
2020/02/20
1.3K0
独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)
几种交叉验证(cross validation)方式的比较
模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何?从而知道是否可以应用在解决问题上,如果不行,那又是哪里出了问题? train_test_split 在分类问题中,我们通常通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,test用来评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评估,打分;从分数上我们可以知道 模型当前的训练水平如何。 from sklearn.da
用户1631856
2018/04/12
5.8K0
几种交叉验证(cross validation)方式的比较
深度学习–十折交叉验证
用scikit-learn来评价模型质量,为了更好地挑拣出结果的差异,采用了十折交叉验证(10-fold cross validation)方法。
全栈程序员站长
2022/11/17
1.4K0
深度学习–十折交叉验证
【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积
实际上非常简单,精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
LhWorld哥陪你聊算法
2018/09/13
2.1K0
【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积
通俗易懂--模型集成(多模型)讲解(算法+案例)
我们都知道信用卡,能够透支一大笔钱来供自己消费,正因为这一点,不法分子就利用信用卡进一特性来实施欺诈行为。银行为了能够检测出这一欺诈行为,通过机器学习模型进行智能识别,提前冻结该账户,避免造成银行的损失。那么我们应该通过什么方式来提高这种识别精度呢!这就是今天要说的主题,多模型融合预测。使用到的模型算法有:KNN、SVM、Logistic Regression(LR)、Random Forest。
mantch
2019/07/30
3.8K0
通俗易懂--模型集成(多模型)讲解(算法+案例)
为什么要用交叉验证
本文结构: 什么是交叉验证法? 为什么用交叉验证法? 主要有哪些方法?优缺点? 各方法应用举例? ---- 什么是交叉验证法? 它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。 ---- 为什么用交叉验证法? 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。 还可以从有限的数据中获取尽可能多的有效信息。 ---- 主要有哪些方法? 1. 留出法 (holdout cross validation)
杨熹
2018/04/03
2.3K0
为什么要用交叉验证
使用Python实现交叉验证与模型评估
交叉验证是一种评估机器学习模型性能的常用方法,它可以更准确地估计模型在未知数据上的性能。在本文中,我们将介绍交叉验证的原理和常见的几种交叉验证方法,并使用Python来实现这些方法,并展示如何使用交叉验证来评估模型的性能。
Echo_Wish
2024/04/19
5170
机器学习中的交叉验证
总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现。 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有的数据集分成两部分:train_data和test_data,先在train_data上进行训练,然后再在test_data上进行测试评估模型效果的好坏]。 因为我们训练模型时,不是直接把数丢进去就好了,而是需要对模型的不断进行调整(比如参数),使模型在测试集上的表现足够好,但是即使模型在测试集上效果好,不
张俊红
2018/04/11
2K0
机器学习中的交叉验证
KNN算法实现及其交叉验证
简单的理解,我有一组数据,比如每个数据都是n维向量,那么我们可以在n维空间表示这个数据,这些数据都有对应的标签值,也就是我们感兴趣的预测变量。那么当我们接到一个新的数据的时候,我们可以计算这个新数据和我们已知的训练数据之间的距离,找出其中最近的k个数据,对这k个数据对应的标签值取平均值就是我们得出的预测值。简单粗暴,谁离我近,就认为谁能代表我,我就用你们的属性作为我的属性。具体的简单代码实现如下。
用户2183996
2018/06/21
2.1K0
R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交叉验证
航班延误是航空公司、旅客和机场管理方面都面临的一个重要问题。航班延误不仅会给旅客带来不便,还会对航空公司和机场的运营产生负面影响。因此,对航班延误的影响因素进行预测分析,对于航空公司、旅客和机场管理方面都具有重要意义。
拓端
2023/06/12
4350
R语言决策树、随机森林、逻辑回归临床决策分析NIPPV疗效和交叉验证
临床决策(clinical decision making)是医务人员在临床实践过程中,根据国内外医学科研的最新进展,不断提出新方案,与传统方案进行比较后,取其最优者付诸实施,从而提高疾病诊治水平的过程。
拓端
2023/05/05
3110
用交叉验证改善模型的预测表现(适用于Python和R)
原文作者: Sunil Ray 翻译:王鹏宇 我一直对数据界的编程马拉松(Hackathons)保持关注。通过对比排名榜初期和最终的结果, 我发现了一个有趣的现象:在初期排名较高的参赛者,在最终的验证环节往往地位不保,有些甚至跌出前 20 名。 猜猜是什么对引起了排名的剧烈变化?换句话说,为什么这些参赛者的模型在最终验证环节无法保证稳定性?让我们来探讨一下可能的原因。 预测模型为何无法保持稳定? 让我们通过以下几幅图来理解这个问题: 此处我们试图找到尺寸(size)和价格(price)的关系。三个模型各自做
机器学习AI算法工程
2018/03/13
1.9K0
在Python和R中使用交叉验证方法提高模型性能
模型表现差异很大的可能原因是什么?换句话说,为什么在别人评估我们的模型时会失去稳定性?
拓端
2021/01/28
1.7K0
在Python和R中使用交叉验证方法提高模型性能
MATLAB中 crossvalind K重交叉验证
官方文档:https://ww2.mathworks.cn/help/bioinfo/ref/crossvalind.html
种花家的奋斗兔
2020/11/13
3K0
MATLAB中  crossvalind K重交叉验证
机器学习实战:模型评估和优化
原文:http://www.developer.com/mgmt/real-world-machine-learning-model-evaluation-and-optimization.html
用户1737318
2018/06/06
9770
《Scikit-Learn与TensorFlow机器学习实用指南》 第3章 分类
第3章 分类 来源:ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》翻译项目 译者:@时间魔术师 校对:@Lisanaaa @飞龙 在第一章我们提到过最常用的监督学习任务是回归(用于预测某个值)和分类(预测某个类别)。在第二章我们探索了一个回归任务:预测房价。我们使用了多种算法,诸如线性回归,决策树,和随机森林(这个将会在后面的章节更详细地讨论)。现在我们将我们的注意力转到分类任务上。 MNIST 在本章当中,我们将会使用 MNIST 这个数据集,它有着 70000
ApacheCN_飞龙
2018/05/16
1.8K0
用交叉验证改善模型的预测表现-着重k重交叉验证
机器学习技术在应用之前使用“训练+检验”的模式(通常被称作”交叉验证“)。 预测模型为何无法保持稳定? 让我们通过以下几幅图来理解这个问题: 此处我们试图找到尺寸(size)和价格(price)的关系
机器学习AI算法工程
2018/03/14
1.6K0
用交叉验证改善模型的预测表现-着重k重交叉验证
理解什么叫交叉验证
在前面的学习中,已经熟悉了训练集和测试集的拆分,在测试集上计算模型性能指标,但这个过程有一个潜在的陷阱。
用户11414625
2024/12/20
2250
理解什么叫交叉验证
推荐阅读
相关推荐
k折交叉验证(R语言)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验