机器学习中的数据分为训练数据集、验证数据集和测试数据集。
通常,在训练有监督的机器学习模型的时候,会将数据划分为训练集、验证集合测试集,划分比例一般为0.6:0.2:0.2。对原始数据进行三个集合的划分,是为了能够选出效果(可以理解为准确率)最好的、泛化能力最佳的模型。
训练集(Training set)
作用是用来拟合模型,通过设置分类器的超参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。训练集是一些我们已经知道输入和输出的数据集训练机器去学习,通过拟合去寻找模型的初始参数。例如在神经网络(Neural Networks)中, 我们用训练数据集和反向传播算法(Backpropagation)去每个神经元找到最优的比重(Weights)。
验证集(Cross Validation set)
作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。如svm中的参数c和核函数等。
验证集也是一些我们已经知道输入和输出的数据集,通过让机器学习去优化调整模型的参数,在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点;在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。
测试集(Test set)
通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即把测试集当做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。测试集是用户测试模型表现的数据集,根据误差(一般为预测输出与实际输出的不同)来判断一个模型的好坏。
对原始数据进行三个数据集的划分,也是为了防止模型过拟合。当使用了所有的原始数据去训练模型,得到的结果很可能是该模型最大程度地拟合了原始数据,亦即该模型是为了拟合所有原始数据而存在。当新的样本出现,再使用该模型进行预测,效果可能还不如只使用一部分数据训练的模型。
为什么验证集合测试集都需要:
“验证数据集” 主要用于描述调整参数和数据预处理时的模型评估,而 “测试数据集” 则主要用于描述最终模型之间的模型能力评估。
只有训练集和测试集的弊端:
有可能会针对测试数据过拟合,因为每次都是找到参数训练模型,然后看看在测试数据集上的表现如何,这就让我们的模型又被测试数据集左右了,既可以理解为训练出的模型对特定的训练数据集和特定的测试数据集表现都不错,但是再来一种类似的样本数据,表现可能又不尽如人意了。
那么要彻底解决这个问题,就要引入验证数据集的概念,既将样本数据分为三份,训练数据集、验证数据集、测试数据集。
训练数据集和之前的用途一样,是用来训练模型的。
验证数据集的作用和之前的测试数据集一样,是用来验证由训练数据集训练出的模型的好坏程度的,或者说是调整超参数使用的数据集。
此时的测试数据集和之前的作用就不一样了,这里的测试数据集是当训练出的模型在训练数据集和验证数据集上都表现不错的前提下,最终衡量该模型性能的数据集。测试数据集在整个训练模型的过程中是不参与的。
交叉验证:
交叉验证其实解决的是随机选取验证数据集的问题,因为如果验证数据集是固定的,那么万一验证数据集过拟合了,那就没有可用的验证数据集了,所以交叉验证提供了随机的、可持续的、客观的模型验证方式。
交叉验证的思路是将训练数据分成若干份,假设分为A、B、C三份,分别将这三份各作为一次验证数据集,其他两份作为训练数据集训练模型,然后将训练出的三个模型评分取均值,将这个均值作为衡量算法训练模型的结果来调整参数,如果平均值不够好,那么再调整参数,再训练出三个模型,以此类推。
精准度:预测结果正确的占总数的比例。这种评价结果对于极度偏斜的数据不适用。如果癌症产生的概率是0.1%,那其实根本不需要任何机器学习算法,只要系统预测所有人都是健康的,即可达到99.9%的准确率。
混淆矩阵:对于二分类问题来说,所有的问题被分为0和1两类,混淆矩阵是2*2的矩阵:
|
预测值0 |
预测值1 |
真实值0 |
TN |
FP |
真实值1 |
FN |
TP |
TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了。
FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了。
FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了。
TP:真实值是1,预测值是1,即我们预测是positive,预测正确了。
精准率:精准率: ,所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。为什么管它叫精准率呢?在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。
召回率:召回率:。所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有10个癌症患者,算法可以成功的预测出8个 。也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。
F1 score:具体使用算法时,怎么通过精准率和召回率判断算法优劣?
根据具体使用场景而定:
例1:股票预测,未来该股票是升还是降?业务要求更精准的找到能够上升的股票;此情况下,模型精准率越高越优。
例2:病人诊断,就诊人员是否患病?业务要求更全面的找出所有患病的病人,而且尽量不漏掉一个患者;甚至说即使将正常人员判断为病人也没关系,只要不将病人判断成健康人员就好。此情况,模型召回率越高越优。