回顾一下第3章的内容,L2正则化是通过对大的权重增加罚项以降低模型复杂度的一种方法,其中,权重向量w的L2范数如下:
另外一种降低模型复杂度的方法则与L1正则化相关:
在此,我们只是简单地将权重的平方和用权重绝对值的和来替代。与L2正则化不同,L1正则化可生成稀疏的特征向量,且大多数的权值为0。当高维数据集中包含许多不相关的特征,尤其是不相关的特征数量大于样本数量时,权重的稀疏化处理能够发挥很大的作用。从这个角度来看,L1正则化可以被视作一种特征选择技术。
为了更好地理解L1正则化如何对数据进行稀疏化,我们先退一步,来看一下正则化的几何解释。我们先绘制权重系数w1和w2的凸代价函数的等高线。在此,我们将使用第2章中Adaline算法所采用的代价函数-误差平方和(sum of the squared errors,SSE)作为代价函数,因为它的图像是对称的,且比逻辑斯谛回归的代价函数更易于绘制。在后续内容中,我们还将再次使用此代价函数。请记住,我们的目标是找到一个权重系数的组合,能够使得训练数据的代价函数最小,如下图所示(椭圆中心的圆点):
至此,我们可以将正则化看作是在代价函数中增加一个罚项,以对小的权重做出激励,换句话说,我们对大的权重做出了惩罚。
这样,通过正则化参数λ来增加正则化项的强度,使得权重向0收缩,就降低了模型对训练数据的依赖程度。我们使用下图来阐述L2罚项的概念。
我们使用阴影表示的球代表二次的L2正则化项。在此,我们的权重系数不能超出正则化的区域——权重的组合不能落在阴影以外的区域。另一方面,我们仍然希望能够使得代价函数最小化。在罚项的约束下,最好的选择就是L2球与不含有罚项的代价函数等高线的切点。正则化参数λ的值越大,含有罚项的代价函数增长得就越快,L2的球就会越小。例如,如果增大正则化参数的值,使之趋向于无穷大,权重系数将趋近与0,即图像上所示的L2球的圆心。总结一下这个例子的主要内容:我们的目标是使得代价函数和罚项之和最小,这可以理解为通过增加偏差使得模型趋向于简单,以降低在训练数据不足的情况下拟合得到的模型的方差。
现在来讨论L1正则化与稀疏问题。L1正则化的主要理念与我们之前所讨论的相类似。不过,由于L1的罚项是权重系数绝对值的和(请记住L2罚项是二次的),我们可以将其表示为菱形区域,如下图所示:
在上图中,代价函数等高线与L1菱形在w1=0处相交。由于L1的边界不是圆滑的,这个交点更有可能是最优的——也就是说,椭圆形的代价函数边界与L1菱形边界的交点位于坐标轴上,这也就使得模型更加稀疏。L1正则化如何导致数据稀疏的数学论证已超出了本书的范围。如果你感兴趣,请参阅Trevor Hastie、Robert Tibshirani和Jerome Friedman的著作The Elements of Statistical Learning中的3.4节,里面有关于L2与L1正则化的精彩论述。
对于scikit-learn中支持L1的正则化模型,我们可以通过将penalty参数设定为‘l1’来进行简单的数据稀疏处理:
将其应用于经过标准化处理的葡萄酒数据,经过L1正则化的逻辑斯谛回归模型可以产生如下稀疏化结果:
训练和测试的精确度(均为98%)显示此模型未出现过拟合。通过lr.intercept_属性得到截距项后,可以看到代码返回了包含三个数值的数组:
由于我们在多类别分类数据集上使用了LogisticRegression对象,它默认使用一对多(One-vs-Rest,OvR)的方法。其中,第一个截距项为类别1相对于类别2、3的匹配结果,第二个截距项为类别2相对于类别1、3的匹配结果,第三个截距项则为类别3相对于类别1、2的匹配结果。
通过lr.coef_属性得到的权重数组包含三个权重系数向量,每一个权重向量对应一个分类。每一个向量包含13个权重值,通过与13维的葡萄酒数据集中的特征数据相乘来计算模型的净输入:
我们注意到,权重向量是稀疏的,这意味着只有少数几个非零项。在L1正则化特征选择的作用下,我们训练了一个模型,该模型对数据集上可能存在的不相关特征是鲁棒的。
最后,我们来绘制一下正则化效果的图,它展示了将权重系数(正则化参数)应用于多个特征上时所产生的不同的正则化效果:
通过下图,我们能对L1正则化有个更深入的认识。可以看到,在强的正则化参数(C<0.1)作用下,罚项使得所有的特征权重都趋近于0,这里,C是正则化参数的倒数。