赞
踩
模型评估是验证模型效果的重要手段。不同的评价指标有不同的侧重点,我们评估模型时需要选择恰当的评估指标以期体现我们真实想反馈的模型结果。
常用的评价指标有:准确率、精确率、召回率、RMSE等
准确率是预测正确样本的占比。当样本不平衡时,准确率将不能客观反映真实情况。例如垃圾邮件分类问题中垃圾邮件占比很小,假设占比为95.这时即使我预测所有邮件都不是垃圾邮件,准确率也高达95%。显然不是我们想要的结果。所有准确率不适用于未作处理前的样本极度不平衡情形。
精确率:分类正确的正样本个数占预测为正样本个数的比例。精确率就像古代比较仁慈的官老远。对嫌犯宁放过不杀错!相对保守!
召回率:分类正确的正样本个数占正样本个数的比例。召回率恰恰相反,是一个酷吏,宁杀错不放过,毕竟激进!
这两种评估指标是既统一又矛盾的,那么我们该采用哪个指标呢?还是以垃圾邮件系统为例。如果只有精确率作为评价方式,则效果为向用户预警的邮件大多数都是垃圾邮件,但是会漏掉很多垃圾邮件,把他们当作好的邮件!这个时候用户就开始骂人了!这是啥子玩意,这么多垃圾邮件都没有拦截到!!!如果只以召回率来作为评价方式,则绝大多数的垃圾邮件都被拦截了,用户基本不吐槽我们不能拦截不到垃圾邮件了。但是用户用了一段时间后又开始骂人了!!!因为他发现一些重要的工作邮件收不到,被发现在我们的拦截邮件列表里!用户瞬间感觉失去了几个亿!!!
通常用R-P曲线、roc、F1-score来判定模型的性能。
R-P曲线图如下:
做这个图时通常是把样本为正样本的概率(或者其他的距离等)算出来,然后从小到大逐渐增加阈值,分别算出精确率和召回率,以横坐标为召回率、纵坐标为精确率作图。如果有两个模型,则面积大的模型教优!如果两个模型的面积不是太好判断,可以以精确率等于召回率时,曲线值较大的模型教优!此时的点称为平衡点。
F1-score:为精确率和召回率的调和平均值,通常也是一种平均指标
ROC曲线:roc曲线涉及到两个新的指标,真阳性、假阳性
真阳性率:预测正确的正样本个数占正样本个数的比例。此时就是召回率。(作为纵坐标)
假阳性率:错误预测为正样本的负样本个数占负样本个数的比例。(作为横坐标)
制作roc曲线:模型输出样本为正样本的概率,从大到小排序。指定一个阈值,大于阈值的样本为正,分别计算真阳性和假阳性率作为坐标点,然后调低阈值。迭代,连接所有的坐标点点即可得到roc曲线。
R-P曲线和ROC曲线的区别如下图:
ac对比可知,负样本增加10倍后,roc曲线基本没有变化:①真阳性计算时在数学上与负样本无关;②假阳性中分子虽然分子增大了,但是如果当前的负样本分布变化不大的情况下,负样本的概率大于阈值的比例不应变化过大,此时假阳性分子分母几乎同比例增大,故而影响不大。(如果增加10倍负样本后,负样本的分布已经改变,则说明增加前或者增加后的数据集中总有一个不能代表负样本数据的真实分布,那继续在当前数据集上做模型已经没有太多意义了。)
bd对比可知,负样本增加后曲线发生了极大的变化:精确率计算时,分母含有错误预测为正的负样本个数,使精确率大幅下降!
故:①在不同的数据集上比较模型性能时,roc更稳定;②现实中经常遇到样本不平衡问题,roc更通用;③如果想看同一数据集上的不同模型性能,R-P曲线更加适合
使用roc曲线时,常常计算曲线下的面积auc,auc越大,说明模型的真阳性越大,假阳性越小!(如果全预测正确,auc曲线的面积就是1,把边长为1的正方形区域都填满了。不过遗憾的是这种情况基本不可能)
余弦相似度:两个单位化的向量相乘记为余弦相似度,范围是[-1:1]
余弦距离:1-余弦相似度,范围是[-1:1]
①余弦距离更看重方向上的相对差异;欧氏距离更看重数值上的绝对差异
②欧式距离收到维度的影响,维度越多,值越大,但余弦距离不受到影响
距离定义:集合中,任意一对元素可唯一确定一个实数,满足:正定性、对称性、三角不等式。
余弦不等式不满足三角不等式,不是严格意义上的距离。例如:a(1,0),b(1,1),c(0,1)
d
(
a
,
b
)
=
1
−
2
2
d(a,b)=1-\frac{\sqrt2}{2}
d(a,b)=1−22
d
(
b
,
c
)
=
1
−
2
2
d(b,c)=1-\frac{\sqrt2}{2}
d(b,c)=1−22
d
(
a
,
c
)
=
1
d(a,c)=1
d(a,c)=1
d
(
a
,
b
)
+
d
(
b
,
c
)
=
2
−
2
<
1
=
d
(
a
,
c
)
d(a,b)+d(b,c)=2-\sqrt2<1=d(a,c)
d(a,b)+d(b,c)=2−2
<1=d(a,c)
A/B测试是检测模型最终效果的主要手段
通常在离线评估后仍然需要做A/B测试:
A/B通常对用户进行分桶操作,划分一组为实验组、一组为对照组。划分时需要遵循原则:独立性(每个用户只能属于一组)、无偏性(对样本进行随机抽样)
Holdout:把数据随机划分为训练集和验证集。训练集用来训练模型,验证集用来验证模型。通常比例为7:3,也可以再增加一个测试集,比例变为6:2:2。不过在神经网络中,数据量很大时为了充分利用数据,验证集和测试集的比例会进一步减小。有可能训练集占比达到99%。
缺陷:①验证集计算出来的评估指标与原始分组有很大关系。由于是随机分组,两个分组的分布很可能差异太大,导致模型失败。②有相当大一部分数据并没有利用上
交叉验证:把数据量分为k份大小相等的子集,遍历k个子集,每次把自己当做验证集,其余k-1个子集当做训练集。最后把k次的评估指标平均值作为最终指标。通常k取为5,如果数据量多也可以选10。(k可以通过观察k次的评估指标方差来确定,如果方差较大,则各个子集的分布差距较大,可以减小k,尽量使分布有一定的相似性。不过最好不要小于5)
交叉验证在一定程度上消除了只划分为训练集和验证集时随机性带来的影响!
自助法:当样本集较小时,不管是交叉验证还是holdout都可能得不到理想的模型。我们可以使用自助法来维持样本的规模。自助法的根本原理就是采样:进行n次有放回的抽样作为训练集,未被抽到的样本作为验证集(理论上,n足够大时,验证集比例为
1
e
≈
36.8
%
\frac 1e\approx 36.8\%
e1≈36.8%)。bagging就使用了booststrao。
超参数很可能影响一个模型的最终效果。通常做法:①通过经验来确定,②去GitHub上找相似项目,使用他们的参数作为最初参数,③范围搜索:
过拟合现象:模型在训练集上表现得很好,在验证集或者测试集上表现很差
欠拟合现象:模型在训练集和验证集、测试集上都表现不好
处理过拟合:
处理欠拟合:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。