这篇来谈谈机器学习模型的评估。
Q1:为什么要进行模型的评估?
A1:由于模型的建立和参数的确定都是针对训练数据,因此模型的评估就是避免模型只对训练数据有效。
由于前面介绍了机器学习的回归和分类,并针对每个问题探讨了模型建立的方法和参数的更新表达式,因此模型的评估也将按照回归和分类进行说明。
交叉验证是模型评估的方法,具体做法为将总的数据分为训练数据和测试数据,测试数据用于调整参数,通常训练和测试数据的比例为7:3或8:2。K折交叉验证简单来说是将数据分为K份,K-1份作为训练数据,1份作为测试数据,并循环K次,取K次的精度的平均值作为整个模型的精度。
在《学习回归》一节中,我们举的例子是用广告费和广告牌面的大小来预测点击量,假设有10个数据,如下图,为方便理解,我们将右侧的3个数据设定为测试数据,(本不应该如此极端,但为方便理解,暂且先这样)左侧7个数据为训练数据,在图中表示如下:
在求参数先忽略测试数据,先设定模型为简单的一次函数,那么在图中应表示如下:
从图中可看出找出的一次函数模型对测试数据的拟合没有训练数据好。假设现在使用更高次数的模型,这里以二次函数为例,则如下:
从图中可以看出,模型对于测试数据完全避开了,这就是“模型只对训练数据有意义”的含义。因此模型评估就是检查训练好的模型对测试数据的拟合情况。
在对回归问题做评估时,我们依然可以使用真实值与计算值的误差来评估,我们希望 f θ x f_\theta x fθx对未知数据x输出的预测值尽可能准确。假设有n个测试数据,我们希望n个数据的平均误差 1 n ∑ i = 0 n ( y ( i ) − f θ ( x ( i ) ) ) 2 \frac{1}{n}\sum_{i=0}^{n}(y^{(i)}-f_\theta(x^{(i)}))^2 n1∑i=0n(y(i)−fθ(x(i)))2 尽可能小,该值也称为均方误差或MSE(Mean Square Error)。
分类问题与回归问题有所不同,回归评估是考虑误差,分类的评估要考虑的是分类的结果是否正确,因此我们需要定量地表示机器学习模型的精度。一组数据中分类正确的数量占总数量的比重称为精度。一般来说,精度(precision)越高训练的模型越好。在分类一章中,我们是按照图像的高和宽将数据分为纵向和横向,对数据是否分类正确定义标签如下。
模型 | 正确结果标签 | |
---|---|---|
横向 | 非横向 | |
横向 | 分类正确 | 分类错误 |
非横向 | 分类错误 | 分类正确 |
模型 | 正确结果标签 | |
---|---|---|
P | N | |
P | TP | FP |
N | FN | TN |
模型的准确率公式为 A c c u r a c y = T P + T N T P + F P + F N + T N Accuracy=\frac{TP+TN} {TP+FP+FN+TN} Accuracy=TP+FP+FN+TNTP+TN
上一小节中提到精度越高训练的模型越好,但有时候还要考虑其他的指标。
Q2:为什么还要考虑其他指标?
A2:考虑如下极端情况,100个数据中只有5个positive,95个negative,假设将全部数据分类为N,最后的精度也能达到0.95。虽然模型的精度很高,但将所有数据分类为N的模型肯定不是一个好模型。
精确率(Accuracy)是只考虑P数据,其公式为 P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP,召回率(Recall)是只考虑被分类为P的数据,其公式为 R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP。
一般来说,精确率和召回率都很高的模型是好模型,但大部分情况下精确率和召回率会一个高一个低,很难取舍。
F值是综合考虑精确率和召回率的,称为精确率和召回率从调和平均值,其公式为 F e a s u r e = 2 1 P r e c i s i o n + 1 R e c a l l = 2 P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l Feasure=\frac{2}{\frac{1}{Precision}+\frac{1}{Recall}}=\frac{2Precision·Recall}{Precision+Recall} Feasure=Precision1+Recall12=Precision+Recall2Precision⋅Recall 一般称F值为F1更准确一些,还有较常用的是带权重的F值,公式为,因此F1值也称为权重为1的F值。
过拟化是训练的模型只能拟合训练数据的状况。一般过拟化的解决方案为:
首先对于回归问题,回归问题中的目标函数为 E ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) 2 E(\theta)=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-f_\theta(x^{(i)}))^2 E(θ)=21i=1∑n(y(i)−fθ(x(i)))2 先在式中增加一项(正则化项) R ( θ ) = λ 2 ∑ j = 1 m θ j 2 R(\theta)=\frac{\lambda }{2}\sum_{j=1}^{m}\theta_j^2 R(θ)=2λj=1∑mθj2 其中,m代表参数个数,由于是偏置项(也即常数项),一般不对它进行正则化,因此j从1开始, λ \lambda λ是常数,称为影响因子。那么新的目标函数为 E ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) 2 + λ 2 ∑ j = 1 m θ j 2 E(\theta)=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-f_\theta(x^{(i)}))^2+\frac{\lambda }{2}\sum_{j=1}^{m}\theta_j^2 E(θ)=21i=1∑n(y(i)−fθ(x(i)))2+2λj=1∑mθj2 我们的目标是使 E ( θ ) E(\theta) E(θ)的值最小。
将新的目标函数分为两部分, E ( θ ) = C ( θ ) + R ( θ ) E(\theta)=C(\theta)+R(\theta) E(θ)=C(θ)+R(θ) 其中 C ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) 2 C(\theta)=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-f_\theta(x^{(i)}))^2 C(θ)=21i=1∑n(y(i)−fθ(x(i)))2 R ( θ ) = λ 2 ∑ j = 1 m θ j 2 R(\theta)=\frac{\lambda }{2}\sum_{j=1}^{m}\theta_j^2 R(θ)=2λj=1∑mθj2 这里以 θ 1 \theta_1 θ1为例,对于 C ( θ ) C(\theta) C(θ)和 R ( θ ) R(\theta) R(θ),其大致图形表示如下,其中 C ( θ 1 ) C(\theta_1) C(θ1)的函数是一个开口向上的函数,假设如下, R ( θ 1 ) R(\theta_1) R(θ1)是一个经过原点开口向上的函数。
其中可看出 C ( θ 1 ) C(\theta_1) C(θ1)的的最小值在4.5附近,则 E ( θ 1 ) E(\theta_1) E(θ1)可在图中表示如下
可以看出 θ 1 \theta_1 θ1的最小值在1.5附近,也就是更接近于1。这就是正则化的效果,将参数的最小值趋近于0,也就相当于给参数一些惩罚,降低参数的影响。
回顾一下,分类问题的逻辑回归的目标函数即对数似然函数为 L o g L ( θ ) = ∑ i = 1 n ( y ( i ) l o g f θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − f θ ( x ( i ) ) ) LogL(\theta)=\sum_{i=1}^{n}(y^{(i)}logf_\theta(x^{(i)})+(1-y^{(i)})log(1-f_\theta(x^{(i)})) LogL(θ)=i=1∑n(y(i)logfθ(x(i))+(1−y(i))log(1−fθ(x(i))) 与回归的正则化同样的做法,也是在后面加上正则化项。并且,我们的对数似然函数是让概率最大也即求最大值,为了与回归问题的处理方式一致,我们在加上正则化项时在对数似然函数前面加上负号,将最大化问题也转化为最小化问题。新的目标函数如下: L o g L ( θ ) = − ∑ i = 1 n ( y ( i ) l o g f θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − f θ ( x ( i ) ) ) + λ 2 ∑ j = 1 m θ j 2 LogL(\theta)=-\sum_{i=1}^{n}(y^{(i)}logf_\theta(x^{(i)})+(1-y^{(i)})log(1-f_\theta(x^{(i)}))+\frac{\lambda }{2}\sum_{j=1}^{m}\theta_j^2 LogL(θ)=−i=1∑n(y(i)logfθ(x(i))+(1−y(i))log(1−fθ(x(i)))+2λj=1∑mθj2
由此,目标函数变更后,参数的更新表达式也发生变化。由于在分类一节中我们对对数似然函数的微分已经进行了介绍,这里只展示对正则化项的微分。
回归中的表达式的微分: E ( θ ) = C ( θ ) + R ( θ ) E(\theta)=C(\theta)+R(\theta) E(θ)=C(θ)+R(θ) E ( θ ) E(\theta) E(θ)对 θ \theta θ的微分相当于 C ( θ ) C(\theta) C(θ)和 R ( θ ) R(\theta) R(θ)分别对 θ \theta θ的微分,再将结果相加。
∂ C ( θ ) ∂ θ j = ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) \frac{\partial\ C(\theta)}{\partial\ \theta_j}=\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)} ∂ θj∂ C(θ)=i=1∑n(fθ(x(i)−y(i))xj(i) ∂ R ( θ ) ∂ θ j = λ θ j \frac{\partial\ R(\theta)}{\partial\ \theta_j}=\lambda\theta_j ∂ θj∂ R(θ)=λθj
因此 ∂ E ( θ ) ∂ θ j = ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) + λ θ j \frac{\partial\ E(\theta)}{\partial\ \theta_j}=\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)}+\lambda\theta_j ∂ θj∂ E(θ)=i=1∑n(fθ(x(i)−y(i))xj(i)+λθj 由于 θ 0 \theta_0 θ0不参与正则化,故需单独讨论,参数 θ \theta θ的关系表达式如下
θ 0 : = θ 0 − η ( ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) ) \theta_0:=\theta_0-\eta(\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)}) θ0:=θ0−η(i=1∑n(fθ(x(i)−y(i))xj(i)) θ j : = θ j − η ( ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) + λ θ j ) j > 0 \theta_j:=\theta_j-\eta(\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)}+\lambda\theta_j)\qquad j>0 θj:=θj−η(i=1∑n(fθ(x(i)−y(i))xj(i)+λθj)j>0
分类中的表达式的微分:
与回归的方式相同,原来的目标函数是 C ( θ ) C(\theta) C(θ),正则化化项是 R ( θ ) R(\theta) R(θ)。
C ( θ ) = − ∑ i = 1 n ( y ( i ) l o g f θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − f θ ( x ( i ) ) ) C(\theta)=-\sum_{i=1}^{n}(y^{(i)}logf_\theta(x^{(i)})+(1-y^{(i)})log(1-f_\theta(x^{(i)})) C(θ)=−i=1∑n(y(i)logfθ(x(i))+(1−y(i))log(1−fθ(x(i))) R ( θ ) = λ 2 ∑ j = 1 m θ j 2 R(\theta)=\frac{\lambda }{2}\sum_{j=1}^{m}\theta_j^2 R(θ)=2λj=1∑mθj2 E ( θ ) = C ( θ ) + R ( θ ) E(\theta)=C(\theta)+R(\theta) E(θ)=C(θ)+R(θ)
∂ C ( θ ) ∂ θ j = ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) \frac{\partial\ C(\theta)}{\partial\ \theta_j}=\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)} ∂ θj∂ C(θ)=i=1∑n(fθ(x(i)−y(i))xj(i)
∂ R ( θ ) ∂ θ j = λ θ j \frac{\partial\ R(\theta)}{\partial\ \theta_j}=\lambda\theta_j ∂ θj∂ R(θ)=λθj
最终的参数更新表达式为
θ 0 : = θ 0 − η ( ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) ) \theta_0:=\theta_0-\eta(\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)}) θ0:=θ0−η(i=1∑n(fθ(x(i)−y(i))xj(i)) θ j : = θ j − η ( ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) x j ( i ) + λ θ j ) j > 0 \theta_j:=\theta_j-\eta(\sum_{i=1}^{n}(f_\theta(x^{(i)}-y^{(i)})x_j^{(i)}+\lambda\theta_j)\qquad j>0 θj:=θj−η(i=1∑n(fθ(x(i)−y(i))xj(i)+λθj)j>0
上述增加正则化项的方法也称为L2正则化方法,此外,还有L1正则化方法,L1的正则化项为 R ( θ ) = λ ∑ i = 1 m ∣ θ i ∣ R(\theta)=\lambda\sum_{i=1}^{m}|\theta_i| R(θ)=λ∑i=1m∣θi∣。两者的区别在于L1正则化的特征是被判定为不需要的参数会变为0,从而减少变量个数,而L2正则化不会把参数变为0。一言以蔽之,L2正则化会抑制参数,使其影响不会过大,而L1会直接去掉不要的变量。
欠拟合与过拟合基本上是相反的关系,指训练模型没有拟合训练数据的状态,出现欠拟合的主要原因也是模型对于要解决的问题太简单了。
区分过拟合与欠拟合的方法可以根据学习曲线进行区分,区分出是过拟合还是欠拟合之后,就可以采取相应的措施以改进模型了。所谓的学习曲线是展示数据数量和精度的图。
以数据数量为横轴,精度为纵轴。对于欠拟合情况,随着训练数据的数量的增加,模型得出的结果与真实的结果误差会逐渐增大也即精度会逐渐降低;而随着测试数据的数量的增加,精度会逐渐变大,原因在于训练数据较少时训练好的模型难以预测未知的数据,而训练数据较多时训练好的模型预测精度就会一点点变高。但同时,对于欠拟合的情况,无论数据的数量增加到多少,最终趋向的精度都不高。上述的表述用图形展示如下。
欠拟合的学习曲线是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度都很差。
而过拟合的学习曲线如下
过拟合的学习曲线体现出高方差。随着数据数量的增加,使用训练数据时的精度一直都很高,而使用测试数据时的精度一直没有上升到它的水准。
本章主要讲述了模型评估的重要性,模型评估的方法,并分回归和分类问题探讨了模型评估的评估指标,分别时回归问题的均方误差、分类问题的准确率、精确率、召回率和F值。接着详细探讨了过拟化的现象、出现的原因以及相应的解决方案,其中主要详细介绍了正则化方法,并分回归和分类进行探讨了正则化的方法;最后讲述了欠拟合以及其与过拟合的区别,主要通过查看学习曲线来区别过拟合和欠拟合。