机器学习之模型选择:模型选择指南、模型评估、模型评价

本文详细介绍了机器学习模型的选用指南,包括分类、回归、聚类和降维等问题的模型选择,以及模型评估和评价的各种方法,如留出法、交叉验证、自助法、错误率、准确率、召回率、P-R曲线、ROC曲线和AUC等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建于:@2020.04.08
修改于:

1、背景

学习了好多模型,至今没梳理过如何对模型进行选择。今天被问及该问题,为了更清晰的认识,本博客进行详细的梳理。

2、机器学习模型选用指南
2.1 分类问题

解决“预测给定输入类别”的分类问题。切记分类的类别数目,由于有些分类器不支持多类预测,它们仅能支持2类预测。

2.1.1 速度慢,但准确
  • 非线性支持向量机(SVM) 有关使用SVM的更多信息,请查看分类问题结尾部分的注意事项;
  • 随机森林(Random Forest);
  • 神经网络(需要大量数据点);
  • 梯度提升决策树(Gradient Boosting Tree,类似于随机森林,但容易过度拟合)。
2.1.2 速度快
  • 可解释的模型:决策树和逻辑回归;
  • 不可解释的模型:线性支持向量机(SVM)和朴素贝叶斯(Naive Bayes)。
2.1.3 对支持向量机(SVM)内核的选择(来自吴恩达的课程)
  • 当特征数量大于观测数量时,使用线性内核;
  • 当特征数量小于观测数量时,使用高斯核心;
  • 如果观测数量大于50k,使用高斯内核时速度可能会成为问题;因此这时可以考虑使用线性内核。
2.2 回归问题

如果你的问题是“给定房子的大小、房间的数量等特征,让你预测房子的价格”,那么这是一个预测连续取值的回归问题。

2.2.1 速度慢,但准确
  • 随机森林(Random Forest);
  • 神经网络(需要大量数据点);
  • 梯度提升决策树(类似于随机森林,但容易过度拟合)。
2.2.2 速度快
  • 决策树;
  • 线性回归。
2.3 聚类

如果你的问题是“根据数据的特征将它们分成k组,使得同一组里的对象具有某种程度的相似性”,那么这是一种聚类分析问题。

2.3.1 层次聚类分析

层次聚类分析(Hierarchy Clustering Analysis,HCA)是一种旨在构建聚类层次结构的聚类分析方法。层次聚类分析通常分为两种策略:

  • 凝聚:这是一种“自下而上”的方法。每个观测点从自己的集群开始凝聚,当一个集群向上移动时,成对的集群将进行合并;
  • 分裂:这是一种“自上而下”的方法。所有观测点都在一个群集中开始分裂,当一个集群向下移动时,递归地执行分割。
2.3.2 非层次聚类分析
  • DBSCAN(不需要指定k的值,即集群的数量);
  • k-means;
  • 混合高斯模型。

如果你对分类数据进行聚类分析,请使用k-modes。

2.4 降维
2.4.1 主成分分析(PCA)

PCA可以理解为将n维椭球拟合到数据中,其中椭球的每个轴代表一个主要成分。如果椭圆体的某个轴很小,那么沿该轴的方差也很小。从数据集的表示中省略该轴及其相应的主成分,我们只会丢失相当少量的信息。

2.4.2 主题建模

如果你想进行主题建模(后面将解释),你可以使用奇异值分解(SVD)或隐含狄利克雷分析(Latent Dirichlet Analysis,LDA)方法,并在进行概率主题建模时使用LDA。

主题建模是一种统计模型,用于发现文档集合中出现的抽象“主题”。主题建模是一种常用的文本挖掘工具,用于发现文本体隐藏的语义结构。

2.5 scikit-learn算法选择路径图

在这里插入图片描述在这里插入图片描述

参考资料:

3、模型评估

选好模型并不意味着能够顺利地得出我们想要的结果,因为特征数量、样本数量、正则化参数等等都会对模型最终得到的结果产生影响。

在实际训练过程中,我们往往不会只使用一个样本训练一次,我们会使用多个样本,训练出多个不同的模型。不同的训练集训练出不同的模型。这就要求:

第一,在不同训练集下训练出的模型,我们希望这些模型的均值越接近实际模型越好,即bias越小越好;

第二,这组模型,本身的方差不要太大。也就是不同训练集训练的模型之间,不要差别太大,即variance越小越好。

3.1 评估方法
  • 对数据集进行划分,分为训练集和测试集两部分;数据集D、训练集S、测试集T;
  • 在测试集上,训练模型,得到“测试误差”,作为“泛化误差”的近似;
  • 调参,最终确定模型。
3.2 数据集的划分方法

通常有以下三种:留出法、交叉验证法、自助法

3.2.1 留出法

留出法是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,我们需要注意的是在划分的时候要尽可能保证数据分布的一致性,即避免因数据划分过程引入额外的偏差而对最终结果产生影响。

为了保证数据分布的一致性,通常我们采用分层采样的方式来对数据进行采样。

但是样本的不同划分方式会导致模型评估的相应结果也会有差别,通常我们都会进行多次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

留出法的缺点:对于留出法,如果我们的对数据集D划分后,训练集S中的样本很多,接近于D,其训练出来的模型与D本身训练出来的模型可能很接近,但是由于T比较小,这时候可能会导致评估结果不够准确稳定;如果S样本很少,又会使得训练出来的样本与D所训练出来的样本相差很大。通常,会将D中大约2/3−4/5的样本作为训练集,其余的作为测试集。

3.2.2 交叉验证

k折交叉验证通常把数据集D分为k份,其中的k-1份作为训练集,剩余的那一份作为测试集,这样就可以获得k组训练/测试集,可以进行k次训练与测试,最终返回的是k个测试结果的均值。(如下图)
在这里插入图片描述
数据集的划分依据分层采样的方式来进行。对于交叉验证法,其k值的选取往往决定了评估结果的稳定性和保真性。常见的K的取值有:5、10、20。与留出法类似,通常我们会进行多次划分得到多个k折交叉验证,最终的评估结果是这多次交叉验证的平均值。比如“10次10折交叉验证法”。(10次10折交叉验证和100次留出法,都是进行了100次实验)

留一法
假设数据集D里面包含m个样本,当k=m的时候,我们称之为留一法。我们可以发现留一法并不需要多次划分,因为其划分方式只有一种。

  • 优点 :留一法中的S与D很接近,因此S所训练出来的模型应该与D所训练出来的模型很接近,因此通常留一法得到的结果是比较准确的。
  • 缺点:但是当数据集很大的时候,训练m个模型的计算开销可能是无法忍受的。
3.2.3 自助法

自助法使用有放回重复采样的方式进行数据采样,即我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为m次,这样我们就可以得到大小为m的训练集D’,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本D-D’作为测试集。

  • 优点 :这种方法对于那些数据集小、难以有效划分训练/测试集时很有用。
  • 缺点:但是由于该方法改变了数据的初始分布导致会引入估计偏差。
3.2.4 总结
  • 对于数据量充足的时候,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;
  • 对于数据集小且难以有效划分训练/测试集时使用自助法;
  • 对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确。
3.3 训练模型

模型的训练过程本文不做论述。

3.4 调参和最终确定模型

常用的做法是对每个参数设置一个变化范围和步长,比如在[0,2]之间,以0.05为步长,实际要评估的值是5个,最终也会从这5个候选值中产生选定值。

把训练集另外划分成训练集和验证集(validation set),基于验证集上的性能来进行模型选择和调优,用测试集上的判别效果来估计模型在实际使用时的泛化能力。

参考连接:机器学习模型的评估与选择

4、模型评价

对于模型的性能度量,我们通常用以下几种方法来进行度量:

1. 错误率/精度(accuracy)
2. 准确率(查准率,precision)/召回率(查全率,recall)
3. P-R曲线,F1度量
4. ROC曲线/AUC(最常用)
5. 代价曲线
4.1错误率/精度(accuracy)

假设我们拥有m个样本个体,分类错误的样本数占样本总数的比例是“错误率”,如果m个样本中有α个分类错误,则错误率E = α/m,相应的精度为1-E = 1-α

4.2 准确率(查准率)/召回率(查全率)

我们将准确率记为P,召回率记为R,通过下面的混淆矩阵我们有
混淆矩阵
其中,TP(true positive),FP(false positive),FN(false negative),TN(true negative)

准 确 率 = 预 测 为 真 且 实 际 也 为 真 的 个 体 个 数 预 测 为 真 的 个 体 个 数 (1) 准确率 = \frac{预测为真且实际也为真的个体个}{数预测为真的个体个数} \tag{1} =(1)
P = T P T P + F P (2) P=\frac{TP}{TP+FP} \tag{2} P=TP+FPTP(2)
召 回 率 = 预 测 为 真 且 实 际 也 为 真 的 个 体 个 数 实 际 为 真 的 个 体 个 数 (3) 召回率=\frac{预测为真且实际也为真的个体个数}{实际为真的个体个数} \tag{3} =(3)
R = T P T P + F N (4) R=\frac{TP}{TP+FN}\tag{4} R=TP+FNTP(4)

这两个度量往往是相互对立的,即准确率高则召回率通常比较低,召回率高则准确率往往会很低。因此我们分别用准确率或召回率对模型的预测结果进行评价会有片面性。

4.3 P-R曲线/F1度量

P-R曲线是以召回率R为横轴,准确率P为纵轴,然后根据模型的预测结果对样本进行排序,把最有可能是正样本的个体排在前面,而后面的则是模型认为最不可能为正例的样本,再按此顺序逐个把样本作为正例进行预测并计算出当前的准确率和召回率得到的曲线。

在这里插入图片描述
(1)基于曲线是否覆盖来进行判断。 即如果模型B的PR曲线此时完全包住了模型C的PR曲线,此时我们认为模型B对于该问题更优于模型C,这也可以理解,因为在相同召回率的情况下,模型B的准确率要比模型C的更高,因此B必然更优一些。但是这种方法在曲线有交叉的时候不好判断;

(2)基于平衡点来进行判断。 平衡点即为召回率与准确率相等的点,如果该点的值越大,则认为模型越优,但这样的判断过于简单;

(3)利用F1度量来进行判断。
F 1 = 2 ∗ 1 1 P + 1 R (5-1) {F_1} = 2*\frac{1}{\frac{1}{P} + \frac{1}{R}} \tag{5-1} F1=2P1+R11(5-1)
即: F 1 = 2 ∗ P ∗ R P + R (5-2) F_1 = \frac{2*P*R}{P+R} \tag{5-2} F1=P+R2PR(5-2)
F1的值越大越好,可以发现,F1是一个准确率和召回率的调和平均数,其更care较小值,因此如果P与R中一个值太小会对F1产生更大的影响,但是这样的判断都是以准确率和召回率同等重要为基础的。

对于很多问题,其会更care其中的一个指标,例如癌症的判断,其更关注的是召回率而不是准确率,因为如果我们更关注准确率,就会使得很多的癌症患者被误诊为不是癌症,从而造成患者的死亡率会更高;

(4)利用 F β F_β Fβ来判断。
F β = ( 1 + β 2 ) ∗ P ∗ R β 2 ∗ P + R (6) F_β = \frac{(1+β^2)*P*R}{β^2∗P+R} \tag{6} Fβ=β2P+R(1+β2)PR(6)

(5)一些说明

  • 对于PR曲线,其对于样本类别是否平衡非常的敏感。
  • F 1 − s c o r e F_1-score F1score越大自然说明模型质量更高。但是还要考虑模型的泛化能力。 F 1 − s c o r e F_1-score F1score过高但不能造成过拟合,影响模型的泛化能力。
4.4 ROC曲线/AUC

ROC曲线则是以假正例率FPR为横轴,真正例率TPR为纵轴。其中
假正例率:FPR=FP / (FP+TN)
真正例率:TPR=TP / (TP+FN)
真正例率与召回率是一样的,那么ROC曲线图如下图所示:
在这里插入图片描述该曲线与绘制PR曲线类似,也是首先将样本按照正例的可能性进行排序,然后按顺序逐个把样本预测为正例(其实相当于取不同的阈值),然后计算FPR值和TPR值,即可获得该曲线。

  • (0,0)点:我们把所有的个体都预测为假,那我们可以知道TP与FP都为0,因为TP表示预测为真实际也为真,而FP表示预测为真实际为假的个体;
  • (0,1)点:我们所有预测为真的个体都正确,这是我们最理想的情况,此时TP=TP+FN,而FP=0;
  • (1,0)点:这是预测最糟糕的情况,即所有的预测都是错误的,那么此时TP=0,而FP=FP+TN;
  • (1,1)点:因为其是在y=x的这条直线上,因此其相当于随机预测,即我预测一个个体为真还是假都是随机的。
4.5 代价曲线【需要再研究】

上面所描述的衡量模型性能的方法都是基于误分类同等代价来开展的,即我们把True预测为False与把False预测为True所导致的代价是同等的。

在很多情况下其实并不是这样的,我们依然以癌症诊断为例,如果我们把一个患有癌症的患者预测为不患有与把不患有癌症的患者预测为患有明显其造成的损失是不同的,因此在这种情况下发我们是不可能以同等代价来进行预测。故这里引入了二分类代价矩阵(如下图)。
在这里插入图片描述
由于在非均等代价下,ROC曲线并不能反映出模型的期望总体代价,因此引入了代价曲线,其中横轴为正例概率代价,纵轴为归一化代价。正例概率代价计算方式为:
P(+)cost=p∗cost01p∗cost01+(1−p)∗cost10

参考连接:机器学习模型的评估与选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值