机器学习中如何评价模型的好坏
Week 2 主要学习机器学习中的基础知识
Targets for this week:
- 数据拆分:训练数据集&测试数据集
- 评价分类结果:精准度、混淆矩阵、精准率、召回率、F1 Score、ROC曲线等
- 评价回归结果:MSE、RMSE、MAE、R Squared
Let’ s go !
数据拆分
在机器学习中,通常将所有的数据划分为三份:训练数据集、验证数据集和测试数据集。它们的功能分别为:
- 训练数据集(train dataset):用来构建机器学习模型
- 验证数据集(validation dataset):辅助构建模型,用于在构建过程中评估模型,为模型提供无偏估计,进而调整模型超参数
- 测试数据集(test dataset):用来评估训练好的最终模型的性能
为了划分这几种数据集,可以选择采用留出法、K-折交叉验证法或者自助法等多种方法。这些方法都对数据集有一些基本的假设,包括
- 数据集是随机抽取且独立同分布的
- 分布是平稳的,不会随时间发生变化
- 始终从同一个分布中抽取样本
黄金法则:请勿对测试数据集进行训练。
留出法
留出法(hold-out)直接将数据集划分为互斥的集合,如通常选择 70% 数据作为训练集,30% 作为测试集。
Sklear实现
K-折交叉验证法
所以在实际应用中,可以选择 K-折交叉验证(k-fold cross-validation)的方式来评估模型,其偏差低、性能评估变化小。
K-折交叉验证法将数据集划分为 k 个大小相似的互斥子集,并且尽量保证每个子集数据分布的一致性。这样,就可以获取 k 组训练 - 测试集,从而进行 k 次训练和测试。
SKlearn中的实现,12即数据集大小总数据量,3为K-fold数量,当设置shuffle为True时,则每次选择的数据都为随机数据,建议每次都设置为随机数据来消除偏差暗示。
评价分类结果
混淆矩阵 Confusion Matrix
预测值0 | 预测值1 | |
---|---|---|
真实值0 | TN | FP |
真实值1 | FN | TP |
对于二分类问题来说,所有的问题被分为0和1两类,混淆矩阵是2*2的矩阵:
- TN:真实值是0,预测值也是0,即我们预测是negative,预测正确了。
- FP:真实值是0,预测值是1,即我们预测是positive,但是预测错误了。
- FN:真实值是1,预测值是0,即我们预测是negative,但预测错误了。
- TP:真实值是1,预测值是1,即我们预测是positive,预测正确了。
精准率precision,召回率recall,精准度accuracy
- 精准率Precision:precision = TP/(TP+FP)
为什么管它叫精准率呢?在有偏的数据中,我们通常更关注值为1的特征,比如“患病”,比如“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为我们关注的那个事件,预测的有多准。通常在FP的影响>FN的影响的情况下 - 召回率Recall:recall=TP/(TP+FN)
所谓召回率是:所有真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法可以成功的预测出8个 。也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。通常在FN的影响>FP的影响的情况下使用 - 精准度Accuracy: (TP+TN)/All
精准度不一定能反映出该模型的好坏,因为可能预测的全部为positive活着negative - F1 Score
F 1 = 2 ∗ p r e c i s i o n ∗ p r e s i c i s o n ∗ r e c a l l p r e c i s i o n + r e c a l l F1 = 2* precision*\frac{presicison*recall}{precision+recall}