5.1 惩罚线性回归的 Python 包
第 4 章的例子使用如下的训练算法:LARS 以及使用 ElasticNet 惩罚的共轭梯度下降方法。第 4 章使用 Python 代码的目的是展示算法的工作原理,从而深入理解。幸运的是,不需要在每次使用时都重复编写算法。
Scikit-learn 算法包已经实现了套索、LARS 以及 ElasticNet 回归。使用算法包有两个优势:一是减少要编写以及调试的代码行数,另一个优势是包的运行速度要远快于第 4章的代码。
scikit-learn 算法包会利用一些已经证明的实用方法,如去掉对无关属性关联的计算来减少计算量。你会看到这些算法包的执行速度非常快。
本章使用的算法包含在 sklearn.linear_model 算法包下,对应链接为 http://scikit-learn.org/stable/modules/classes.html#modulesklearn。linear_model 展示了可供使用的模型清单。注意到几种模型的风格略微不同。例如,linear_model.ElasticNet 包和 linear_model。
ElasticNetCV 包对应本章介绍的 2 个任务。Python 包 linear_model.ElasticNet 用于在整个数据集上计算系数曲线,linear_model.ElasticNetCV 通过交叉验证生成对 ElasticNet 模型性能的样本外估计。这些包都是现成的,可以直接使用。
两个版本的包都使用相同的输入格式(两个 numpy 数组:一个表示属性,另一个表示标签)。在一些情况下,为了更精细地控制交叉验证每一折验证使用的训练集和测试集,可能不能直接使用交叉验证的函数版本。
✦ 如果问题包含一个类别属性,并且该类别属性的某个属性值出现较少,就需要通过抽样来确保每份数据中包含特定属性值的样本个数是等比例的。
✦ 此外,也可能需要访问每折数据来计算错误统计量,比如不想使用 CV 包中的均方误差(MSE),想换用其他错误统计量,如平均绝对误差(MAE),因为它能更好地代表实际问题中的错误。
✦ 另一种需要对每折数据计算错误的情况是使用线性回归来解决分类问题。正如第 3 章所述,分类问题使用的标准错误指标一般是误分类率或者 ROC 曲线下面积(AUC)。可以在本章的岩石 - 水雷分类以及玻璃分类的例子中看到。
学习使用这些包尤其要注意以下几点:一是一些包(不是所有包)在模型拟合前会自动对属性进行归一化;
二是 scikit-learn 包中变量的命名规则与第 4 章中以及 Friedman论文中的变量命名规则都不同。第 4 章使用变量 λ 来代表系数惩罚项的乘子,使用变量 α来代表套索惩罚项以及 ElasticNet 中岭回归惩罚项的比例。scikit-learn 包使用 α 来取代 λ,使用 l1_ratio 来取代 α。下面介绍 scikit-learn 包使用的记号。
SCIKIT-LEARN 的改动
scikit-learn 的目标是通过正则化等技术将所有的惩罚线性回归算法归结为统一的形式。在写作本书时,该工作仍在进行当中。



本书评论