机器学习之模型预估与选择

损失函数与风险函数


在监督学习中,对于训练样本(X,Y),其中X表示记录,Y表示对应的实际结果。假设我们学习到的模型为:f(x). 损失函数定义为L(f(x),Y).表示的是模型结果也实际结果之间的误差计算方式。
常见的损失函数有:
1. 0-1损失函数

L(f(x),Y)={1,0,Y f(x)Y=f(x)

这种常用来计算模型模型是否命中的情况。还有就是我们需要将得到的结果进行离散处理,比如逻辑回归中,最后我们根据得到的结果判断是否大于0.5,如果大于0.5则为1,否则为0.

2.平方损失函数

L(f(x),Y)=(Yf(x))2

这是一种很常见的损失函数,几何学上表示预测点和标记点之间的距离。线性回归模型采用就是平方损失函数
3.绝对损失函数
L(f(x),Y)=|(Yf(x))|

4.对数损失函数

L(f(x),Y)=logP(Y|X)

对数损失函数的基本思想是,最大似然化。我们需要找到一组参数使得已经发生的事件概率最大。这里就取了负的log的概率。逻辑回归就是采用对数损失函数。

这里损失函数越小,我们就认为预测值和实际值越接近,模型越好。

训练误差与测试误差


在模型学习中,不仅要使得训练误差最小,同时要泛化能力强,测试误差也要小。
假设基于一定的损失函数得到的模型是Y=f(x),那么训练误差是模型在训练数据集中的平均损失:

Rtrain=1Ni=1nL(yi,f(xi))

表示训练集中每一个样本的损失的期望。
当使用训练集训练好模型,在测试集上的误差就表示测试误差。
Rtest=1Ni=1nL(yi,f(xi))

过拟合

假设在模型空间中存在一个真的模型来表示我们的数据,在进行训练的时候需要将我们的训练模型尽可能的逼近真模型,但是有时候太过于逼近,就会导致模型复杂度增加,导致其泛化能力降低。这就是过拟合现象。
同时,如果我们的训练模型复杂度不够,则会导致欠拟合。
在训练误差和测试误差中的表现是,随着训练误差的降低,开始时测试误差也降低;随后训练误差继续降低(模型复杂度增加),但是测试误差却增加(泛化能力变差).所以我们需要找到这个临界点。
如下图所示:
机器学习之模型预估与选择

正则化和交叉验证

为了防止模型过于复杂,会在风险函数中添加模型复杂度函数,称为正则化项,这个函数随着模型的复杂度增加,该值也增加,这就是正则化。这是一种常见的模型选择方法。就是结构风险最小化。形式如下:

min1Ni=1nL(yi,f(xi))+λJ(f)

其中1Nni=1L(yi,f(xi)) 是经验风险,λJ(f)是正则化项,模型复杂度越高,该值越大,从而降低过拟合风险,λ>0
正则化是选择经验风险和模型复杂度同时比较小的模型。
正则化,一般有L1和L2.这里就不展开了,后面会专门写一篇文章介绍。

模型选择的另一个方法就是交叉验证,这里先介绍训练集,验证集,测试集合的定义。
训练集:用于学习参数的数据子集称为训练集
验证集:用于挑选超参数的数据子集称为验证集
测试集:用于进行泛化误差的估计称为测试集
在实际的工作过程中,只用了训练集和测试集

简单的交叉验证就是随机的抽取样本,比如80%作为训练集,20%作为测试集。
那么我们可以不断的重复简单交叉验证,就是S交叉验证了。比如将数据均分5等分,随机的抽取一份作为测试集,另外四份作为训练集。这样重复5次,选择测试误差最小的模型。
机器学习之模型预估与选择

性能度量

当我们训练模型过程中,我们以二分类为例:

原始值/预测值
TP FN
FP TN

TP:将真的预测为真
FN:将真的预测为假
FP:将假的预测为真
TN:将假的预测为假

准确率=TP+TNTP+TN+FN+FP
精确度= TPTP+FP , 精确度针对的是预测为真的情况
召回率FPR=TPTP+FN ,召回率针对的是原始值为真的情况
负正类率FPR= FPTN+FP,代表分类器预测的正类中实际负实例占所有负实例的比例

一般情况我们还会看ROC曲线
ROC曲线,以FPR为横轴,以召回率为竖轴进行绘制,如下:
横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。
纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

机器学习之模型预估与选择
理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

一般来说我们直接看AUC值大小就好了,越趋向于1就好了。