Python社区  »  机器学习算法

NLP机器学习关键技术总结:面向任务建模的数据划分、评估指标与拟合问题总结概述

AINLP • 1 周前 • 29 次点击  

当大家使用机器学习模型完成一项分类或者实体抽取等任务后,如何对模型完成任务效果进行评估?当模型完成效果达不到预期时,如何对模型进行优化?

本文将聚焦以上痛点,介绍【机器学习模型评估方法和优化相关知识】。对模型评估和优化进行阐述,过程中将尽量结合示例说明,使大家容易理解。    

一、机器学习模型数据划分方法

本章将对实际项目使用过程中最普遍的分类模型和回归模型评估及优化方法进行阐述。

当模型开发完成后,必须对建立的模型进行评估,评估其是否满足使用的需求,模型的评估有着标准的评价指标。

1.1、数据集划分概述

为准确评估模型性能,一般把整个数据集分为两个部分,一部分用于训练模型,得到估计参数,另一部分评估模型的误差,得到准确率。

更进一步,在一些项目中,例如分类问题中,使用多种分类器时,不知道那种算法表现好且不同算法中包含大量需要人为设定的超参数,这种情况需要再划分一个验证集,用于选择具体的超参数。

通常的做法是,将已知的数据切分成“测试集”(testing set)和“训练集”(training set)。在训练集上训练学习器,得到的误差为经验误差;在测试集上测试学习器对新样本的判别能力,产生的误差为“测试误差”,作为泛化误差的近似。

那么如何切分才能达到尽量好的效果呢?以下介绍3种常用的方法。(假设D为已知的样本,S是训练集,T是测试集)

1.2、留出法

留出法直接将数据集D拆分成互斥的两个集合,其中一个作为训练集S,另一个作为测试集T。在S上训练模型,在T上测试,得到测试误差近似泛化误差。

以下3个问题是使用留出法绕不开的话题:

1、如何划分保证数据分布的一致性?–>“分层采样”

假设有1000个样本,500个是正例,500个是反例。如果随机地将1000个样本分成两部分,很可能在训练集或测试集中正反的比例不在是1比1,这就会引入额外的偏差。所以采用“分层采样”的方法来保证数据分布的一致性。

比如像在1000个样本中,70%作为训练,30%作为测试,使用分层采样,就是先对所有正例样本取出70%放到训练集中,30%放到测试集中;再对所有反例的样本取出70%放到训练集中,30%放到测试集中。这样的分层采样,保证了切割之后的两个数据集与原始数据集拥有一样的正负例比例。

2、如何保证随机划分的稳定性?–>“多次随机划分”

就算采用了分层采样,在每层中的采样也是随机的,每次采样的时候被选进训练集中的样本也是变化的,故单次使用留出法得到的估计结果往往不够稳定,在使用留出法时一般采用若干次随机划分。例如进行100次随机划分,那么就会有100组训练/测试集,进行模型的训练测试之后会有100个结果,将这100个结果进行平均作为一次留出法的最终结果。

3、训练与测试集划分的比例?

关于划分的比例没有完美的解决方案,常见的是大约2/3~4/5的数据用于训练,剩余的用于测试。

1.3、交叉验证法

对模型进行评估,防止低估/高估性能,十次交叉验证是最标准的做法。由于我们需要拿出一部分数据作为测试,因此总有部分的数据不能用于构建模型,而一种更好的选择是交叉验证,一般也简称CV。

交叉验证法是一个将整体数据集平均划分为k份,先取第一份子集数据作为测试集,剩下的k-1份子集数据作为训练集进行一次试验;之后再取第二份子集数据,剩下的k-1份子集数据在进行一次试验,不断往复,最后重复k次的过程,一般我们称之为k折交叉检验,交叉检验是我们进行参数调整过程中非常重要的一个方法。

1、k的取值?
我们将这个过程称为“k-折交叉验证”。k的取值会影响结果的稳定性与保真性,k的取值一般为10。

2、如何保证随机划分的稳定性?
同样,因为将数据集D划分成k个子集的过程也是随机的,为了保障稳定性,k-折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是p次k折交叉验证的均值,例如常见的有10次10折交叉验证。(如此就要做100次训练与测试)。

3、留一法

如果数据集D中有m个样本,当k=m时,则得到了交叉验证的一个特例:留一法(Leave-One-Out, LOO)。

留一法不受随机样本划分的干扰,使用的训练集比原始数据集D只少了1个样本,如此使用留一法训练的模型与使用原始数据D训练得到的模型很相似,评估结果会相对准确。但留一法的缺点是,在数据集比较大的时候,训练m个模型的开销十分大;并且留一法也未必永远比其他方法更准确。

1.4、自助法

我们希望得到数据集D训练出的模型,但在留出法与交叉验证法中,为了保留一部分数据用于测试,实际训练模型的数据集比D小,这必然会引起一些偏差,如果数据集D比较小,偏差会更大。

1、训练集何来?
自助法以自助采样为基础。给定数据集D,有m个样本,采样后产生的数据集为D’。每次随机从D中挑选一个样本放到D’中,然后将该样本放回到初始数据集D中(也就是有放回抽样)。这样进行m次后,D’中就有了m个样本,这就是自助采样的结果,D’可作为训练集。

2、测试集何来?
显然,D中有一部分数据会在D’中重复出现,而另一部分样本不出现。样本在m次采样中始终不被采到的概率为(1-1/m)^m,取极限m->无穷,可得到概率为约等于0.368。

也就是说,通过自助采样,约有36.8%的样本未出现在数据集D’中。于是,我们可将D’作为训练集,D\D’作为测试集。

使用自助法,我们保证了训练集仍然有与原数据集D相等的样本量m,也保证了仍然有1/3的样本是没有出现在训练集中,可用于测试的。这样的测试结果称为“包外估计”(out of bag estimate)

优点:自助法在训练集较少,难以有效划分数据集时很有用。

缺点:自助法产生的数据集改变了数据集的原始分布,会引起偏差。因此要是数据集足够,优先选用留出法与交叉验证法。

2、机器学习模型的评估指标

以上章节介绍了如何对数据集进行划分从而尽量准确地估计模型的泛化能力。这一部分要讲的是有哪些性能度量的指标可以去评估模型的好坏。

不同的性能指标会导致不同的评估结果,也就是说模型的好坏是相对的,什么样的模型优秀,不仅取决于算法与数据,还取决于任务需求。

2.1、分类模型评估指标

混淆矩阵知识,该方法针对二分类模型进行评价,混淆矩阵(Confusion Matrix)可以解释大部分的概念,具体见下表3-1所示。

其中:
TP(true positive):真实为1,预测也为1;
FN(false negative):真实为1,预测为0;
FP(false positive):真实为0,预测为1;
TN(true negative):真实为0,预测也为0

(1)准确率(Accuracy)

基于混淆矩阵的模型评价指标有准确率(Accuracy),它的计算公式如下:

Accuracy=(TP+TN)/(TP+FN+FP+TN)

准确率衡量的是分类正确的样本占总样本数量的比例。
在某些情况,例如样本比例相差过大(样本中为1的样本占总样本数的99%),将所有的样本判定为1的分类器将取得99%的正确率。

(2)精确率(precision)

准确率precision的公式为:  Precision = TP/(TP+FP)

由上式可知,精确率是预测为1的样本中,真实标签为1的样本占比。

(3)召回率(recall)

召回率recall的公式为:Recall = TP/(TP+FN)

由上式可知,召回率是实际为1的样本中,预测为1的概率。

以挑选西瓜为例,以召回率为衡量标准,则是希望尽可能将好瓜选取来,错判相对会较多。

(4)F1值

为平衡precision和recall,可以采用F score作为评价标准:  F1 = (2xprecisionxrecall)/(precision+recall)

由上式可知,F1的值同时受precision和recall的影响,取值范围为0到1,F1值越大代表模型效果越好。

(5)ROC-AUC曲线

对于二分类模型,输出结果标签(0或1)取决于输出的概率和预定的概率阈值,常见的阈值是0.5,输出概率大于0.5的判定为正样本,小于0.5的判定为负样本。

若增加阈值,对应预测为正的样本数将减少,这一过程中精确率会升高,召回率将降低,反之,预测为正的样本数将增加,这一过程中精确率会降低,召回率将增加。

阈值的选取影响分类器的分类能力,我们希望一个好的分类器,在任何阈值情况都能有一个比较好的效果,为衡量这个不区分阈值的分类器优劣,ROC曲线表现出很好的区分能力。

纵坐标TPR(True Positive Rate)=Recall=TP/(TP+FN),

横坐标FPR (False Positive Rate) =FP/(FP+TN)。

TPR(Recall)只和正样本相关,FPR是只和负样本相关,所以roc-auc适合对正负分类结果都关心的应用。

因为TPR和FPR是实际label内部的操作,看混淆矩阵和tpr、fpr计算公式,无论实际label比例怎么变化,tpr、fpr计算公式都是在实际为正样本或者负样本的内部计算的。

所以即使正负样本差别多悬殊,ROC-AUC曲线不会有太大的变化,这个特性既是AUC-ROC曲线的优点也是缺点。如果遇到不平衡数据集,且关心的是预测到为正样本的能力,并不建议用这个指标对分类器进行评估。

因此,我们可以看到,它适用于评估分类器的整体性能,以及需要剔除类别不平衡影响的情况。

2.2、回归模型评估指标

回归模型的评估常用方法包括SSE、MSE、RMSE、MAE。

(1)SSE(误差的平方和) 同样的数据集情况下,SSE越小,误差越小,模型效果越好。

(2)MSE(均方误差) 在SSE基础之上求平均。

(3)RMSE(均方根误差) 在MSE基础上开平方根。

(4)MAE(平方绝对误差) 在SSE的基础上把开方换成绝对值。

3.3、其他评估指标

我们使用机器学习模型进行项目实践时,经常遇到不平衡数据情况,此时不能使用准确度指标,因为该指标一般应用于分类模型,不平衡数据集应采用kappa系数或马修斯(MCC)指标。

3、机器学习模型的常见拟合问题

3.1、概念

过拟合,从字面意思可以理解为模型对训练数据拟合效果过好,导致模型对测试数据拟合效果不理想。

欠拟合,模型在训练集和测试集中拟合效果均较差。

3.2、引起的原因

产生过拟合的原因较复杂,包括选择的学习算法学习能力过强、数据量较少以及选择的特征过多。

可通过增加数据量、数据增强、剪枝、正则化、集成学习和模型蒸馏等方法进行处理该类问题。

产生欠拟合的原因包括训练模型时选择的特征不足或选择的学习算法学习能力不够强大。

可通过增加模型训练的迭代次数、增加模型参数量、减小正则化系数和选择模型表征能力强的特征等方法解决。

总结

对于机器学习模型进行合理的评估有助于我们项目取得成功。本文介绍了很多指标,针对不同问题选用合适的模型评估标准,相信大家已经得到了关于如何对模型完成任务效果进行评估、当模型完成效果达不到预期时,如何对模型进行优化的答案。


进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。




阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/149740
 
29 次点击  
分享到微博