这一篇文章主要探讨机器学习中的一些基本概念。主要包括以下部分:
1. 机器学习的三要素
2. 机器学习中常用的损失函数,重点分析对数损失函数的意义
3. 常用的模型的正则化项及其实际意义
4. 交叉验证与模型的性能度量
注:以下内容为自己学习西瓜书和《统计学习方法》过程中的总结,部分为自己的认识,错误之处烦请指出。
一、机器学习三要素
李航博士的书中提到任何统计学习方法(我理解为传统的机器学习方法)由三部分组成:模型、策略、算法。以下自己用一个简单的回归问题来理解这三个要素。
任务为从一堆已知的 (X,Y) ( X , Y ) ( X∈Rn X ∈ R n 即每一个实例的输入有n个特征)的数据集中学到某一个函数 Y=f(X) Y = f ( X ) ,对于新给定的一个 X X 我们能正确的得到其输出 Y Y 的值。
那么三要素中的模型即是指的我们上述学到的函数表达式的形式。比如我们的模型为简单的线性模型,则模型即为
Y=ω1X(1)+ω2X(2)+...+ωnX(n)+b Y = ω 1 X ( 1 ) + ω 2 X ( 2 ) + . . . + ω n X ( n ) + b
当然如果采用其他模型,则函数表达式的形式会不一样。也有可能为没有具体函数的启发式的模型比如KNN这种,学习一个规则(K临近),对于每一个新输入的实例根据其规则给定一个输出。
当我们确定了一个模型时,下一步就是要确定模型中的每一个参数来获得最优的模型。那么策略即为我们学习最优模型的准则,也即选择参数(即每一个
ωi ω i )的准则。这里就要引入损失函数来定量的衡量我们模型的好坏,关于常用的损失函数下一节会提到。当我们确定了损失函数
L(Y,f(X)) L ( Y , f ( X ) ) 后就可以衡量该模型的好坏了。理论上假设我们观测的数据都是来自某一特定的联合分布
P(X,Y) P ( X , Y ) 那么对于模型
Y=f(X) Y = f ( X ) 关于该联合分布的期望损失(或者称为风险函数)定义为:
Rexp(f)=∫χ×YL(Y,X)P(X,Y)dxdy R e x p ( f ) = ∫ χ × Y L ( Y , X ) P ( X , Y ) d x d y
由于实际上联合分布是未知的,于是我们用经验联合分布来代替理想中实际的联合分布就能得到经验损失或者叫经验风险
Remp R e m p :
Remp(f)=1N∑1NL(Yi,f(Xi)) R e m p ( f ) = 1 N ∑ 1 N L ( Y i , f ( X i ) )
当样本集很大时,根据 大数定理 经验联合分布与联合分布等价,以上近似代替不会出现问题。但是若样本集较小时,就会出现对样本集过拟合的现象。这时采用加入了正则化项的结构风险最小化准则得到的模型往往具有更好的泛化能力(也即预测未知样本的能力)。关于常用的正则化项第三节会详细讨论。
以上及时模型
f(X) f ( X ) 在损失函数为
L(Y,f(X)) L ( Y , f ( X ) ) 时关于规模为N的样本集的经验损失函数。我们的学习过程即为使
Rexp R e x p 最小化的过程。在最小化经验损失的过程中使用的最优化算法即为三要素中的算法。常见的最优化算法有梯度下降法,牛顿法等等,后续会写文章专门讨论机器学习中常用的最优化方法。
二、机器学习中常用的损失函数
0-1损失函数
L(Y,f(X))=1, Y≠f(X) ;L(Y,f(X))=0, Y=f(X) L ( Y , f ( X ) ) = 1 , Y ≠ f ( X ) ; L ( Y , f ( X ) ) = 0 , Y = f ( X )
该损失函数常用于分类任务中。
平方损失函数
L(Y,f(X))=(Y−f(X))2 L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2
该损失函数常用于回归任务中,且经常添加系数0.5便于梯度计算。
绝对值损失函数
L(Y,f(X))=∣Y−f(X)∣ L ( Y , f ( X ) ) =∣ Y − f ( X ) ∣
- 对数损失函数
L(Y,f(X))=−logP(Y∣X) L ( Y , f ( X ) ) = − l o g P ( Y ∣ X )
该损失函数应用在极大似然估计中。理解:在极大似然估计准则中,该函数用来衡量一组参数在数据集上的损失值。一组参数在一堆数据集上的似然值(likelihood,可理解为可能性)等于这个数据集在取该组参数时的条件概率之积。而损失函数一般是每一条数据的损失之和,为了将求积变为求和取了个对数。在对数条件概率前取个负号最为损失函数,最小该损失函数即可与最大化参数的似然值等价。
- cross-entropy交叉熵
L(Y,f(X))=−∑if(X)log(Y) L ( Y , f ( X ) ) = − ∑ i f ( X ) l o g ( Y )
交叉熵经常用于多分类任务中,与softmax激活函数一起使用。 Y Y 可以理解为数据的真实分布, f(X) f ( X ) 为我们所求得的数据分布,而交叉熵可以用来衡量两个分布之间的差异,故在多分类中可以将交叉熵作为损失函数使用。
理解:利用softmax作为输出层的激活函数,对于分类任务,则输出层每个神经元的输出为计算得到该类的概率,于是输出层的输出可以看作是Y的概率分布。
交叉熵定义如下: H(p,q)=−∑ni=1p(xi)log(q(xi)) H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) 。首先理一下熵的定义,对与服从分布为 P P 的变量 X X 其熵为 H(p)=−∑ni=1p(xi)log(p(xi)) H ( p ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) 。按照香浓那一套,这个其实就是香浓信息量 log1p l o g 1 p 的期望值。而交叉熵就是 log1q l o g 1 q 的期望值,由于变量的真实分布还是 p p 故计算期望值时前面乘的是 p p 而不是 q q 。
其实真正衡量两个分布差异的是一个叫相对熵的概念: D(p,q)=H(p,q)−H(p)=∑ni=1p(xi)logp(xi)q(xi) D ( p , q ) = H ( p , q ) − H ( p ) = ∑ i = 1 n p ( x i ) l o g p ( x i ) q ( x i ) 由于 H(p) H ( p ) 是不变的,于是交叉熵越大则相对熵越大,两个分布差异度越大,也即损失越大。
三、机器学习中常用的正则化项
从第一节中我们已经讨论了由于仅仅依靠最小化经验损失函数容易产生过拟合的问题,为了克服这一问题我们引入了衡量模型复杂度的正则化项。有必要提到一点,最小化正则下的损失函数潜在认为模型越简单越好,而正则化项前面的系数就是来权衡模型复杂度和经验损失的量。若正则化系数越大,训练得到的模型越是偏向于结构简单的模型;正则化系数越小,越是偏向于经验风险最小的模型。接下来谈论常用的几种正则化项。
1. L0范数
L0范数是指向量中非0元素的个数。当采用L0范数作为正则化项时,表明希望模型参数中非0个数越少越好,也即希望W矩阵是稀疏的。权值矩阵的稀疏能带来一下两个好处
1):稀疏的权值矩阵能自动进行特征选择。经过训练,那些对于结果影响不大的特征对应的系数会被置为0,即在判断输出时不考虑该特征。
2):可解释性。在实际工程中,总是希望模型能够指导我们的行为,通过对权值矩阵的分析我们能够知道有哪些因素(特征)对结果影响较大,从而为决策提供有效建议。
2. L1范数
L1范数为向量中所有元素的绝对之和,采用了L1范数进行正则化线性回归模型称为Lasso回归。L1正则也能实现参数的稀疏化,且较L0范数更容易求解,故L1比L0更为常用。
3. L2范数
L2范数为向量所有元素平方和然后开根号,采用L2范数进行正则化的线性回归模型称为Ridge回归。L2范数能够有效的防止过拟合的问题。
四、模型性能评估与度量
对于我们训练出来的模型,如何评估该模型的泛化能力很重要,这决定了我们最终选择哪一个模型。以下是常用的几种评估方法:
1. 留出法
对于已有的数据集D,留出法的做法是将D划分为互斥的训练集S和测试集T,其中S用来训练模型,T用来评估模型的性能,选择最终模型。在使用时需要注意:
1):在划分数据集时,S和T应该保持数据分布的一致性。比如在分类任务中,S和T中各个样本的比例应该尽可能一样,在抽样中这种抽样方式称为分层抽样。这样能够避免数据的分布差异而对结果造成的偏差
2):由于数据集划分不同,结果也会有差异,因此在使用时通常应该多次使用留出法对数据集进行随机划分,将多次评估结果的平均值作为最后结果
2. 交叉验证
在一些数据类比赛中,往往会被告诫一定要做线下CV验证,不要迷信榜单。一般来说CV的结果能够很好的衡量模型的泛化能力。其具体做法如下:首先将数据集互斥的划分为 k k 个子集 D1…Dk D 1 … D k ,每一次取一个数据集出来作为验证集,剩余 k−1 k − 1 个子集作为训练集,共有 k k 个这样分组,会得到 k k 个验证结果,最后将这 k k 个得分的平均值作为模型的最后得分。这种做法即为大名鼎鼎的 k k 折交叉验证了。与留出法类似,数据集的划分会对结果造成影响,于是一般做法是做多次 k k 折交叉验证作为模型的最后得分。当 k=m k = m ( m m 为数据集规模)时, k k 折交叉验证即为留一法。
3. 自助法
自助法做法如下:对于含有 m m 个数据的数据集D,进行有放回的抽样,抽出 m m 个样本作为训练集S,由于是有放回的抽样,因此必然有一部分样本被多次抽出,有一部分样本未被抽出,将未被抽到的样本集作为验证集T。在随机有放回的抽样过程中,某一样本始终不被抽中的概率为 (1−1m)m ( 1 − 1 m ) m ,对 m m 取极限即可得其概率为 1e=0.368 1 e = 0.368 即有36.8%左右的样本不会被抽中,可作为验证集。集成学习的bagging方法就是基于这样的思路进行模型合成的。
在数据集较小,难以通过一般方法划分出训练/测试数据集时会很有用。由于自助法改变了原始数据的分布情况,这往往会带来偏差,在数据规模足够时,交叉验证和留出法更加常用。