机器学习 模型评估指标 - ROC曲线和AUC值

机器学习算法-随机森林初探(1)

机器学习算法-随机森林之理论概述

随机森林与其他机器学习方法不同的是存在OOB,相当于自带多套训练集和测试集,自己内部就可以通过OOB值作为评估模型准确度的一个方式。其他多数机器学习方法都没有这一优势。

通常在有了一套数据时,需要拆分为训练集、测试集。数据集一般按比例8:2,7:36:4等分为训练集和测试集。如果数据集很大,测试集不需要完全按比例分配,够用就好。

测试集完全不用于训练模型。训练集在训练模型时可能会出现过拟合问题(过拟合指模型可以很好的匹配训练数据但预测其它数据时效果不好),所以一般需要在训练集中再分出一部分作为验证集,用于评估模型的训练效果和调整模型的超参数 (hyperparameter)。

如下图,展示了一套数据集的一般分配方式:

  • 训练集用于构建模型。

  • 验证集用于评估模型的一般错误率,并且基于此调整超参数(hyperparameter,如随机森林中的mtry),获得当前最优模型。

  • 验证集不是必须的。

    如果不需要调整超参数,则可以不用验证集。

  • 验证集获得的评估结果不是模型的最终效果,而是基于当前数据的调优结果。

  • 使用所有训练集(含从中分出的验证集)数据和选择的最优超参数完成最终模型构建。

  • 测试集测试评估最终模型指标,如准确率、敏感性等。

通俗地讲,训练集等同于学习知识,验证集等同于课后测验检测学习效果并且查漏补缺。测试集是期末考试评估这个模型到底怎样。

可参考的分配规则:

  • 对于小规模样本集(几万量级),常用的分配比例是 60% 训练集、20%验证集、20% 测试集。

  • 对于大规模样本集(百万级以上),只要验证集和测试集的数量足够即可,例如有 100 w 条数据,那么留 1 w 验证集,1 w 测试集即可。

    1000 w 的数据,同样留 1 w 验证集和 1 w 测试集。

  • 超参数越少,或者超参数很容易调整,那么可以减少验证集的比例,更多的分配给训练集。

训练集中的数据我们希望能更多地应用于训练,但也需要验证集初步评估模型和校正模型。

简单交叉验证

简单交叉验证是从训练集中选择一部分(如70%)作为新训练集,剩余一部分(如30%)作为验证集。基于此选出最合适模型或最优模型参数。然后再用全部的训练集训练该选择的模型。其在一定程度上可以避免过拟合事件的发生。但基于70%训练集评估的最优模型是否等同于基于所有训练集的最优模型存疑。不同大小的验证集获得的评估结果差异较大,单纯按比例划分会导致无法选到最好的模型。另外如果训练集较小再如此分割后,训练集数目就更少了,不利于获得较好的训练模型。

K-fold交叉验证

所以就提出了交叉验证的操作,最常用的是K-fold交叉验证 (k-fold cross validation) 。

其目的是重复使用原始训练集中的数据,每一个样品都会被作为训练集参与训练模型,也会作为测试集参与评估模型。最大程度地利用了全部数据,当然也消耗了更多计算时间。

其操作过程如下:

  1. 将训练集分成K份(如果训练集有m个样本,则每一份子集有m/K的样本;

    若不能整除其中一个集合会样本较少。

  2. 对于每一个模型(如随机森林中不同的mtry值,mtry=2,mtry=10时分别会构建出不同的模型;

    或不同的算法如随机森林、支持向量机、logistic 回归等) for j in 1, 2, 3, … K: 将训练集中除去第j份数据作为新训练集,用于训练模型 用第j份数据测试模型,获得该模型错误率

  3. 经过第2步就得到了1个模型和K个错误率,这K个错误率的均值和方差就是该模型的一般错误率。

  4. 对每个模型重复23步骤,选择一般错误率最小的模型为当前最优模型。

  5. 用所有的数据训练当前的最优模型,获得最终训练结果。

  6. 用独立的测试集测试模型错误率。

这一操作的优点是:

  1. 所有训练集的样品都参与了每个模型的训练,最大程度利用了数据。

  2. 多个验证集多次评估,能更好的反应模型的预测性能。

下一步的关键就是如何选取K,通常为510(10是最常用的经验值,但根据自己的数据集520也都可能获得比较好的结果)。

K越大,新训练集与总训练集大小差别越小,评估偏差也最小。

极端情况下K=m,每个子数据集都只有 1个样品,这也被称为LOOCV - leave one out-cross validation

举个例子 - 2折交叉验证

假设有一个数据集,包含6个样品。

# 假设有一个数据集,包含 6 个样品
m = 6
train_set <- paste0('a', 1:m)
train_set## [1] "a1" "a2" "a3" "a4" "a5" "a6"

利用其构建2-折交叉验证数据集。

K = 2
set.seed(1)
# 下面这行代码随机从1:K 中有放回的选取与样品数目一致的索引值
# 从属于相同索引值的样本同属于一个fold
kfold <- sample(1:K, size=m, replace=T)
kfold## [1] 1 2 1 1 2 1

从下面数据可以看出,每个子集的大小不同。这通常不是我们期望的结果。

table(kfold)## kfold
## 1 2
## 4 2

修改如下,再次获取kfold:

kfold <- sample(rep(1:K, length.out=m), size=m, replace=F)
kfold## [1] 1 2 2 2 1 1

这次每个fold的样品数目一致了。

# 如果 m/K 不能整除时,最后一个 fold 样本数目会少
table(kfold)## kfold
## 1 2
## 3 3

然后构建每个fold的训练集和测试集

current_fold = 1
train_current_fold = train_set[kfold!=current_fold]
validate_current_fold = train_set[kfold==current_fold]print(paste("Current sub train set:", paste(train_current_fold, collapse=",")))## [1] "Current sub train set: a2,a3,a4"print(paste("Current sub validate set:", paste(validate_current_fold, collapse=",")))## [1] "Current sub validate set: a1,a5,a6"

写个函数循环构建。通过输出,体会下训练集和测试集的样品选择方式。

K_fold_dataset <- function(current_fold, train_set, kfold){train_current_fold = train_set[kfold!=current_fold]validate_current_fold = train_set[kfold==current_fold]c(fold=current_fold, sub_train_set=paste(train_current_fold, collapse=","), sub_validate_set=paste(validate_current_fold, collapse=","))
}do.call(rbind, lapply(1:K, K_fold_dataset, train_set=train_set, kfold=kfold))##      fold sub_train_set sub_validate_set
## [1,] "1"  "a2,a3,a4"    "a1,a5,a6"
## [2,] "2"  "a1,a5,a6"    "a2,a3,a4"

  1. 机器学习算法 - 随机森林之决策树初探(1)

  2. 机器学习算法-随机森林之决策树R 代码从头暴力实现(2)

  3. 机器学习算法-随机森林之决策树R 代码从头暴力实现(3)

  4. 机器学习算法-随机森林之理论概述

  5. 随机森林拖了这么久,终于到实战了。先分享很多套用于机器学习的多种癌症表达数据集 https://file.biolab.si/biolab/supp/bi-cancer/projections/。

  6. 机器学习算法-随机森林初探(1)

  7. 机器学习 模型评估指标 - ROC曲线和AUC值

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

(请备注姓名-学校/企业-职务等)

机器学习 - 训练集、验证集、测试集相关推荐

  1. 【小白学PyTorch】 2.浅谈训练集验证集和测试集

    文章目录: 经验误差与过拟合 评估方法 经验误差与过拟合 关键词:错误率(error rate),精度(accuracy). 错误率好理解,就是m个样本中,a个样本分类错误,则错误率E = a/m . ...

  2. 训练集 验证集_训练与验证、测试集数据分布不同的情况

    在不同分布的数据集上进行训练与验证.测试 深度学习需要大量的数据,但是有时我们可获得的满足我们真实需求分布的数据并不是那么多,不足以对我们的模型进行训练.这时我们就会收集大量相关的数据加入到训练集中, ...

  3. 机器学习典型步骤以及训练集、验证集和测试集概念

    1. 机器学习典型步骤 数据采集和标记 数据清洗 特征选择 如房子的面积.地理位置.朝向.价格等. 模型选择 有监督还是无监督,问题领域.数据量大小.训练时长.模型准确度等多方面有关. 模型训练和测试 ...

  4. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?

    [注] ·本文为转载文章,原文作者是王树义老师,原文链接为 https://zhuanlan.zhihu.com/p/71961236 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎 ...

  5. 机器学习中训练集、验证集和测试集的区别

    通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集.验证集合测试集,划分比例一般为0.6:0.2:0.2.对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的.泛化能力 ...

  6. [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个即: 训练集(train set) 验证集(validation set) 测试集(test set) 一般需要将样本分成独立的三部分 ...

  7. 机器学习中训练集、验证集和测试集的作用

    通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集.验证集合测试集,划分比例一般为0.6:0.2:0.2.对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的.泛化能力 ...

  8. 如何正确使用机器学习中的训练集、验证集和测试集?

    王树义 读完需要 19 分钟 速读仅需7分钟 训练集.验证集和测试集,林林总总的数据集合类型,到底该怎么选.怎么用?看过这篇教程后,你就能游刃有余地处理它们了. 1 问题 审稿的时候,不止一次,我遇到 ...

  9. 训练集(train set) 验证集(validation set) 测试集(test set)

    在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set) 验证集(validation set) 测试集(test set). http://blog.si ...

  10. 机器学习:样本集、验证集(开发集)、测试集

    样本集.验证集(开发集).测试集. Ripley, B.D(1996)在他的经典专著Pattern Recognition and Neural Networks中给出了这三个词的定义. Traini ...

最新文章

  1. 关于网络上的各种mysql性能测试结论
  2. 技术人员如何转型为产品经理
  3. html社交模板,Olympus – 社交网HTML静态模板
  4. sql server和mysql的区别是什么
  5. 11. 王道考研-二叉树的实现
  6. HttpContext.Current
  7. ffmpeg的安装和使用教程
  8. Ardunio开发实例-WS2812B独立寻址LED调色调光
  9. 解决dos打开界面变小和打开软件字体乱码的问题
  10. java json转二进制数据_Json二进制数据
  11. win10系统下计算器界面变成英文的解决方法
  12. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
  13. 画一个椭圆c语言程序,画椭圆 - c代码库 - 云代码
  14. Salary Inequity
  15. 虚拟机下的ROS无法打开笔记本摄像头
  16. 队列 如何 判断 已满
  17. 期货不变的本质是什么意思(期货不变的本质是什么意思呀)
  18. 织梦网站在空间怎么转服务器,织梦网站换空间
  19. i5 11320h怎么样 相当于什么水平
  20. ExecutorService里的shutdown 和 isTerminated

热门文章

  1. 2021年下半年软件设计师上午真题答案及解析(三)
  2. 如何改变证件照大小?三步搞定
  3. R语言完成中国裁判文书网最新爬虫
  4. Python —— 压缩文件夹
  5. 计算机打开不显示桌面,电脑启动后不显示桌面怎么办
  6. tif怎么转化为jpg_tif怎么批量转换成jpg
  7. 旭凤锦覓虐心 恋只愿共赴鸿蒙,【香蜜同人】所爱隔山海(旭凤X锦觅X润玉)
  8. java读取Excel文件并各方案对比
  9. 计算机数学基础:斜率与截距、导数、权重的关系
  10. OpenCV 之 角点检测