长春企业网站模板建站,泉州建设网站开发,网络销售主要做些什么,网页设计代码中form的用法我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候#xff0c;交叉验证也不失为一种方法。交叉验验证#xff08;交叉验证#xff0c;#xff23;#xff36;#xff09;则是一种评估模型泛化能力的方法#xff0c;广泛应用…我们在建立数据模型后通常希望在外部数据验证模型的检验能力。然而当没有外部数据可以验证的时候交叉验证也不失为一种方法。交叉验验证交叉验证则是一种评估模型泛化能力的方法广泛应用中于数证据采挖掘和机器学习领域在交叉验证通常将数据集分为两部分一部分为训练集用于建立预测模型另一部分为测试集用于测试该模型的泛化能力。
在如何划分2个集合的问题上统计学界提出了多种方法简单交叉验证、留一交叉验证、k折交叉验证、多重三折交叉验证、分层法、自助法等。
简单交叉验证是我们临床论文中最常使用到的从数据中随机选择中随机选择70%点的数据作为训练集建立模型30%的数据当做外部数据来验证模型的预测能力。但其最终所得结果与集合划分比率密切相关不同划分比率结果变异可能较大。该方法在总数据据集并不是非常大的情形下很难达到准确实评模型的目的。
留一交叉验证是指假设在总集合中共有有n个体每次选取1个体作为测试试集其余个体作为训练集。总共进行n 次训练取平均值是最终评价指标。留一交叉验证较为可靠靠在每次模型训练中纳入几度乎所有个体当总集合中个体 数目轨迹的情势下计算时间较长。
k折交叉验证可以看成是留一交叉验证的简化版是将原始数据据随机平均分为k个子集通常5-10个每个子集做测试集的同时其余k-1个子集合并作为训练 进行 次训练取各评价指标灵敏度、特异度、等的平均值。测试通过平均的评价指来降低训练集和测试集划分方式对预测结果的影响有研究值表明k 折评估准准确性高当k为或时在评估准准后性和计算复杂性下综合性能最优。
折交叉验证是指将原始数据集随机划分为样本数近乎相等的个子集轮流将其中的个合并作为训练集其余1个作为测试试集。算正确率等评价指标最终终通过K次试验验后取评价指标的平均值来评估该模型的泛化能力。
折交叉证验证的基本步骤下 原始数据集划分为个样本量尽可均衡的子集 使用第个子集作为测试集第个子集合并作为训练集 使用训练集对模型进行训练计算多种评价指标在测试集下的结果 4重复 步流亜轮将第 个子集作为测试集 计算各评价指标的平均值作为最终结果。 今天我们通过视频来演示k折交叉验证K取10需要使用到caret包和pROC包需要使用到我们既往的不孕症数据公众号回复不孕症可以获得该数据 基于R语言进行K折交叉验证 代码
library(caret)
library(pROC)
###公众号回复不孕症可以获得这个数据
bc-read.csv(E:/r/test/buyunzheng.csv,sep,,headerTRUE)
###
bc$education-ifelse(bc$education0-5yrs,0,ifelse(bc$education6-11yrs,1,2))
bc$spontaneous-as.factor(bc$spontaneous)
bc$case-as.factor(bc$case)
bc$induced-as.factor(bc$induced)
bc$education-as.factor(bc$education)
####拆分数据
set.seed(666)
folds - createFolds(ybc$case,k10)###分成10份
#####我们先来做第一个数据的要提取列表的数据需要做成[[1]]这种形式
fold_test - bc[folds[[1]],]#取fold 1数据建立测试集和验证集
fold_train - bc[-folds[[1]],]#
######
fold_pre - glm(case ~ age parity spontaneous,family binomial(link logit), data fold_train )###建立模型
fold_predict - predict(fold_pre,typeresponse,newdatafold_test)##生成预测值roc1-roc((fold_test[,5]),fold_predict)
round(auc(roc1),3)##AUC
round(ci(roc1),3)##95%CI##得出结果后我们可以进一步画图
plot(roc1, print.aucT, auc.polygonT, gridc(0.1, 0.2),grid.colc(green, red), max.auc.polygonT,auc.polygon.colskyblue, print.thresT)plot(1-roc1$specificities,roc1$sensitivities,colred,lty1,lwd2,type l,xlab specificities,ylab sensitivities)
abline(0,1)
legend(0.7,0.3,c(auc0.34,ci:0.457-0.99.),ltyc(1),lwdc(2),colred,bty n)# 嫌一个一个做比较麻烦的话我们也可以做成循环一次跑完结果
# 先建立一个auc的空值不然跑不了auc_value-as.numeric()for(i in 1:10){fold_test - bc[folds[[i]],] #取folds[[i]]作为测试集fold_train - bc[-folds[[i]],] # 剩下的数据作为训练集fold_pre - glm(case ~ age parity spontaneous,family binomial(link logit), data fold_train )fold_predict - predict(fold_pre,typeresponse,newdatafold_test)auc_value- append(auc_value,as.numeric(auc(as.numeric(fold_test[,5]),fold_predict)))
}
####
mean(auc_value)