机器学习:模型评估与性能度量总结

1、常见术语说明

过拟合:模型由于学习的“太好”,在训练集上表现很好(训练误差小),而在新样本上表现很差(泛化误差大)。
欠拟合:与过拟合相对的概念,模型对训练集还没有完全学习好,在训练集上就表现不好(训练误差大)。
误差:模型预测值与真实值之间的差异。
训练误差(经验误差):模型在训练集上的误差。
泛化误差:模型在新样本上的误差。

2、模型评估方法

利用训练样本(“训练集”)之外的测试样本(“测试集”),对模型性能进行评估,将模型在测试集上的表现(“测试误差”)近似为模型的泛化能力(“泛化误差”)

2.1、留出法(也称Holdout检验)

直接将样本集D划分为两个互斥的集合D = S U T,S作为训练集,T作为测试集估计分类器的泛化误差。
训练集和测试集的划分要保持数据分布的一致性,避免数据划分引入偏差影响结果。比如在分类任务中要保持两个集合中样本的类别别比例相似。
在使用留出法时不同的划分会得到不同的模型,单次留出法得到的结果往往不够稳定可靠,一般采用若干次留出法随机划分,重复试验评估后取平均值作为留出法的评估结果。并且常将样本集的2/3 ~ 4/5的样本用于训练,剩余的用于测试。
因为留出法在验证集上计算出来的评估指标与原始分组有很大关系,为了消除随机性,研究者们引入了’交叉验证’的思想

2.2、k-flod交叉验证(K-折交叉验证)

首先将全部样本划分成K个大小相等的样本子集,依次遍历这k个子集,每次把当前子集作为验证集,其余的子集作为训练集。最后把K次评估指标的平均值作为最终的评估指标,在实际实验中,K经常取10
留一验证(交叉验证的特例,即k=n):每次留下一个样本作为验证集,其余所有样本作为测试集,样本总数为n,依次对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标,在样本总数较多的情况下,留一验证法的时间开销极大
步骤:
1、将数据等分为k个子集
2、按顺序,每个子集作为测试集,其余作为训练集
3、分别训练模型和评估模型,求平均的误差率
10折是获得最好误差估计的恰当选择:建议使用10次10折交叉验证

2.3、自助法

不管是留出法还是交叉验证,都是基于划分训练集和测试集的方法进行模型评估的,然而,当样本规模较小时,将样本集进行划分会让训练集进一步减少,这可能会影响模型训练效果,自助法是可以维持训练集样本规模的验证方法
包含m个样本的数据集D,对D进行随机抽样构建D’(抽取m次),然后将抽到的数据对象放回D,D’用作训练集,剩余数据作为测试集。某样本不被抽到的概率:
机器学习:模型评估与性能度量总结
因此初始样本集D约有0.732的样本做训练集,0.368的样本做测试集
优点:适合较小的、难以有效划分训练/测试集的数据集;
缺点:产生的数据集改变了原始数据集的分布,这样会引入估计偏差。

2.4、总结

在初始数据集比较充足时,留出法和交叉验证法更常用一些
在数据集比较小,难以有效划分训练/测试集是使用自助法
对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确

3、模型性能度量

对于不同的业务场景以及模型类型,需要用不同的评估方法来评判模型的优劣

3.1、分类模型的评估方法:

3.1.1、混淆均值
机器学习:模型评估与性能度量总结
True Positive(真正,TP): 将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP): 将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)

真正率(True Positive Rate,TPR):TPR=TP/(TP+FN), 即被预测为正的正样本数 /正样本实际数。
假正率(False Positive Rate,FPR) :FPR=FP/(FP+TN),即被预测为正的负样本数 /负样本实际数。
假负率(False Negative Rate,FNR) :FNR=FN/(TP+FN),即被预测为负的正样本数 /正样本实际数。
真负率(True Negative Rate,TNR):TNR=TN/(TN+FP), 即被预测为负的负样本数 /负样本实际数

注,不同的误判,对结果的影响可能是不同的,即为此付出的代价不同。

3.1.2、准确率(Accuracy)准确率是最常用的分类性能指标。
Accuracy = (TP+TN)/(TP+FN+FP+TN)即正确预测的正反例数 /总数
机器学习:模型评估与性能度量总结
3.1.3、精确率(Precision)即正确预测的正例数 /预测正例总数
精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。
Precision = TP/(TP+FP)
机器学习:模型评估与性能度量总结
3.1.4、召回率(Recall)即正确预测的正例数 /实际正例总数
召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。
Recall = TP/(TP+FN),
机器学习:模型评估与性能度量总结
3.1.5、F1 score
F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。
2/F1 = 1/Precision + 1/Recall
机器学习:模型评估与性能度量总结

3.1.6、ROC曲线
逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。
ROC绘制方法,分别以每个样本被预测为正的概率作为阈值,计算出相应的FPR假正率(=(FP/(FP+TN)),即被预测为正的负样本数 /负样本实际数)与TPR真正率(=(TP/(TP+FN)),即被预测为正的正样本数 /正样本实际数),将其标注在以FPR假正率为横坐标,以TPR真正率为纵坐标的直角坐标系上,连接成线,则得到ROC曲线。一般情况下,这个曲线都应该处于(0,0)和(1,1)连线的上方,如图:
机器学习:模型评估与性能度量总结
ROC曲线中的四个点和一条线:
点(0,1):即FPR=0, TPR=1,意味着FN=0且FP=0,将所有的样本都正确分类。
点(1,0):即FPR=1,TPR=0,最差分类器,避开了所有正确答案。
点(0,0):即FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类。
点(1,1):分类器把每个实例都预测为正类。
总之:ROC曲线越接近左上角(即右下角面积越大,分类性能越大),该分类器的性能越好。而且一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting

3.1.7、AUC
一种用于二分类模型性能评估的指标,全称为area under the curve,即曲线下的面积,曲线是指受试者操作曲线(ROC),通常大于0.5小于1。最开始用于军事目标检测(雷达兵)
其本质为,按照预测为正的概率从高到低排序后,将类别为正的放在类别为负的前面的概率即AUC值,AUC(面积)越大表示模型区分正例和负例的能力越强,即性能更好。
AUC计算:
1、假设总共有(m+n)个样本,其中正样本m个,负样本n个,总共有mn个样本对,计数,正样本预测为正样本的概率值大于负样本预测为正样本的概率值记为1(模型的概率输出结果即是样本为正的概率),累加计数,然后除以(mn)就是AUC的值
2、绘制ROC曲线,ROC曲线下面的面积就是AUC的值(积分)
机器学习:模型评估与性能度量总结

3.1.8、PR曲线
PR曲线的横坐标是精确率P(又称,查全率),纵坐标是召回率R(又称查准率)。
评价标准和ROC一样,先看平滑不平滑(蓝线明显好些)。一般来说,在同一测试集,上面的比下面的好(C最差)。当P和R的值接近时,F1值最大,此时画连接(0,0)和(1,1)的线,线和PRC重合的地方对应的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好像AUC对于ROC一样。一个数字比一条线更方便调型。
机器学习:模型评估与性能度量总结
有时候模型没有单纯的谁比谁好(比如A与B),所以选择模型还是要结合具体的使用场景。有的场景会更注重查全率,有的场景则更加关注查准率

3.2、回归模型的评估方法

机器学习:模型评估与性能度量总结

3.3、聚类模型的评估方法

3.3.1 . 兰德指数
兰德指数(Rand index)需要给定实际类别信息,ARI取值范围为[−1,1],值越大意味着聚类结果与真实情况越吻合。从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。

3.3.2. 互信息
互信息(Mutual Information)也是用来衡量两个数据分布的吻合程度。AMI取值范围为[−1,1],它们都是值越大意味着聚类结果与真实情况越吻合。

3.3.3. 轮廓系数
轮廓系数(Silhouette coefficient)适用于实际类别信息未知的情况。对于单个样本,设a是与它同类别中其他样本的平均距离,b是与它距离最近不同类别中样本的平均距离,轮廓系数为: 
机器学习:模型评估与性能度量总结
对于一个样本集合,它的轮廓系数是所有样本轮廓系数的平均值。
轮廓系数取值范围是[−1,1]

3.4、sklearn.metrics中的评估方法

3.4.1、准确率分数是指所有分类正确的百分比:Accuracy = (TP+TN)/(TP+TN+FP+FN)
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
3.4.2、召回率 = 提取出的正确信息条数 / 样本中的信息条数
klearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1,average=‘binary’, sample_weight=None)
average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]
3.4.3、ROC
fpr, tpr, thresholds = sklearn.metrics.roc_curve(y_true,y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
3.4.4、AUC = sklearn.metrics.auc(x, y, reorder=False) 【x,y为坐标】
3.4.5、直接根据真实值(必须是二值)、预测值(可以是0/1,也可以是proba值)计算出auc值,中间过程的roc计算省略
auc = sklearn.metrics.roc_auc_score(y_true, y_score, average=‘macro’, sample_weight=None) #计算AUC的最常用的方法,注意此处 y_score为预测为正的概率
average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]
clf.predict_proba(X_test)[:,1] 【模型中的参数probability=True】
3.4.6、精确率:precision_score(y_true, y_pred, labels=None, pos_label=1,average=‘binary’, sample_weight=None)
3.4.7、F1值:f1_score(y_true, y_pred, labels=None, pos_label=1,average=‘binary’, sample_weight=None)

4、参数调优

为了进行超参数调优,一般会采用网格搜索、随机搜索、贝叶斯优化等算法。超参数搜索算法一般包括以下几个要素:
(1)目标函数,即算法需要最大化/最小化的目标
(2)搜索范围,一般通过上限和下限来确定
(3)算法的其他参数,如搜索步长

4.1 网格搜索

网格搜索可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优解,然而这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较的时候,因此,在实际应用过程中,网格搜索法一般会先使用较大的搜索范围和较大的步长,来寻找全局最优解可能的位置,然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值,这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所有很可能会错过全局最优解,sklearn提供了GridSearchCV类实现网格搜索

4.2 随机搜索

随机搜索的思想与网格搜索的思想比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点足够大,那么通过随机采样也能大概率地找到全局最优解或近似解,随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的,sklearn提供了RandomizedSearchCV类实现随机搜索

4.3 贝叶斯优化算法

贝叶斯优化算法在寻找最优超参数时,采用了与网格搜索,随机搜索完全不同的方法,网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息,而贝叶斯优化算法则充分利用了之前的信息,贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜索函数,然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布,最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。
对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值,为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,'探索’就是在还未取样的区域获取采样点,而’利用’则是根据后验分布在最可能出现全局最优值的区域进行采样

5. 优化过拟合与欠拟合

5.1 降低过拟合风险的方法

5.1.1、从数据入手,获得更多的训练数据。使用更多的训练数据是解决过拟合问题最有效的手段,因为更多的样本能够让模型学习到更多更有效的特征,减少噪音的影响,当然,直接增加实验数据一般是很困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、缩放等方式扩充数据;更进一步地,可以使用生成式对抗网络来合成大量的新训练数据
5.1.2、降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免拟合过多的采样噪音。例如,在神经网络中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等
5.1.3、正则化方法(在神经网络模型训练过程中,也可以用于模型优化)
5.1.4、集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险
5.1.5、减少输入的特征数量

5.2 降低欠拟合风险方法

5.2.1、添加新特征。当特征不足或现有特征与样本标签的相关性不强时,模型容易出现不拟合,通过挖掘’上下文特征’‘ID类特征’'组合特征’等新的特征,往往能够取得更好的效果,在深度学习的潮流中,有很多类型可以帮组完成特征工程,如因子分解机
5.2.2、增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力,例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等
5.2.3、减少正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要针对性地减少正则化系数

6、正则化

正则化:解决特征过多时的过拟合问题(通过改变评价体系来优化模型)
原理:1、保留所有的特征,减少特征的权重值,确保所有特征对预测值都有少量贡献
2、当每个特征值对预测值y都有贡献时,这样的模型可以良好的工作,这就是正则化的目的,以用来解决特征过多时的过拟合问题
通过调节参数λ,控制正则项的权重,从而避免线性回归算法过拟合

7、方差与偏差

方差(Variance):反映的是预测与真实结果之间的偏离程度,即反映了模型本身的拟合能力。
偏差(Bias):反映的是由于训练集的改变(样本量不变)所引起模型性能的变化。
噪声:反映的是问题本身的难度。
模型泛化误差 = 方差 + 偏差 + 噪声
机器学习:模型评估与性能度量总结

偏差一方差窘境:一般情况下,如果将模型学习的太好,则可能会出现过拟合,测试偏差将非常小,但是方差将很大;如果偏差大,则可能是欠拟合,此时由于模型还没有学习好,所以方差会比较小。下图是偏差与方差,以及泛化误差的示意图:
机器学习:模型评估与性能度量总结
bagging是减少variance【方差】,而boosting是减少bias【偏差】