交叉验证集
平时我们常用的是把数据集分成训练集和测试集,但是每训练一次就用测试集测试一次,如果测试结果不好还要再训练,这样就比较麻烦,因此就要用到交叉验证集了,那么什么是交叉验证集呢? 如下图,把原来的训练集分出一小部分作为验证集,在验证时使用训练集和验证集中的所有数据,那么这两部分数据集组合在一起就叫交叉验证集。 我的理解是,训练集的精度高,代表训练的偏差小,验证集的精度高,说明方差小,也就是鲁棒性好。一般来说我们肯定希望偏差还方差都小,但是方差和偏差的变化是一个反向关系,偏差小了,方差就大了,就好像训练函数是专门为当前训练集定制的,换一份不同的训练集效果就会变差,甚至很差,也就是常说的过拟合问题。反之,如果方差小了,偏差就会增大,当方差很小,偏差很大时,就是欠拟合的想象。为此需要在这两者之间找到一个平衡,这也是交叉验证集的意义所在,他的结果既反应了偏差,又反映了方差,这是测试集所不能做到的。 转自:https://www.bilibili.com/video/BV1rq4y1p7nJ?p=21 那么划分训练集和验证集如何划分呢?如下图,可以把交叉验证集划分成n份,选择其中的一份作为验证集。 因为交叉验证集的作用主要是用来调参的,所以测试一次、调整一次、训练一次很繁琐,此时可以中sklearn库中的sklearn.model_selection.cross_val_score()函数,该函数有很多参数,可以设置训练验证的迭代次数,选择什么样的指标等等。 该函数可以自动切分交叉验证集,如果重复次数cv=3,那么该函数就把它切分成3份,每次选择其中1份作为验证集,然后取三个Score的平均作为最后的验证结果。(注意:数据集的顺序要打乱,避免数据集的相邻数据有相关性;如果想要手写代码实现cross_val_score函数的功能,在切分数据集时一定要设置随机种子,保证每次切分的结果都是一样的,否则结果就没有意义了)
混淆矩阵(confusion matrix)
如下图,把真实结果和预测结果放到一张表里,TP和TN分别代表预测正确的正样本和负样本,FP和FN分别代表预测错误的正样本和负样本。
评价指标
1.精度:precision precision = TP/(TP + FP) 2.召回率:recall recall = TP/(TP+FN) 3.F1 Score F1 Score是精度和召回率的调和平均 F1 = 2 / (1/precision + 1/recall)
阈值对结果的影响
每个样本经过训练/预测后都会有一个分数,或者叫概率,阈值就是将样本划分为正样本和负样本的分界线,例如,当阈值为0时,所有样本都被认为是正样本,当阈值为0.5时,大于0.5的样本认为是正样本,小于0.5的被认为是负样本。阈值越大,precision越高,recal越低;阈值越小,precision越小,recall越高。 下图是ROC曲线,即不同阈值下的TP和FP,横轴为FP,纵轴为TP,理想情况是FP很小,TP很大,对应着ROC曲线的左上角,即左上角越接近于1时,模型效果越好。(ROC曲线下的面积叫做AUC,AUC越接近于1时效果越好) 转自:https://www.bilibili.com/video/BV1rq4y1p7nJ?p=27
|