1.11.21.2.11.2.21.2.31.2.41.2.5Table of Contents绪言有监督学习广义线性模型线性与二次判别分析核岭回归支持向量机随机梯度下降1This book is translated from official user guide of scikit-learn.绪言2有监督学习31.1. 广义线性模型英文原文以下介绍的方法均是用于求解回归问题,其目标值预计是输入变量的一个线性组合。写成数学语言为:假设是预测值,则有在本节中,称向量为 coef_ ,{% math %}w0{% endmath %}为`intercept`若要将通用的线性模型用于分类问题,可参见Logistic回归1.1.1 普通最小二乘法 LinearRegression 使用系数拟合一个线性模型。拟合的目标是要将线性逼近预测值()和数据集中观察到的值()两者之差的平方和尽量降到最小。写成数学公式,即是要解决以下形式的问题广义线性模型4 LinearRegression 的 fit 方法接受数组X和y作为输入,将线性模型的系数存在成员变量 coef_ 中: from sklearn import linear_model clf = linear_model.LinearRegression() clf.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) clf.coef_array([ 0.5, 0.5])需要注意的是,普通最小二乘法的系数预测取决于模型中各个项的独立性。假设各个项相关,矩阵的列总体呈现出线性相关,那么就会很接近奇异矩阵,其结果就是经过最小二乘得到的预测值会对原始数据中的随机误差高度敏感,从而每次预测都会产生比较大的方差。这种状况称为重共线性。例如,在数据未经实验设计就进行收集时就会发生重共线性。线性回归的例子1.1.1.1 普通最小二乘法的复杂度此方法使用的奇异值分解来求解最小二乘。如果是矩阵,则算法的复杂度为,假设。广义线性模型51.1.2 岭回归岭回归(Ridge regression)引入了一种对系数大小进行惩罚的措施,来解决普通最小二乘可能遇到的某些问题。岭回归最小化带有惩罚项的残差平方和:这里,是一个复杂的参数,用以控制系数的缩减量。值越大,系数缩减得越多,因而会对共线性更加鲁棒。 和其它线性模型类似, Ridge 将数组X和y作为 fit 方法的参数,将线性模型的系数存在成员变量 coef_ 中: from sklearn import linear_model clf = linear_model.Ridge (alpha = .5) clf.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None, normalize=False, random_state=None, solver='auto', tol=0.001) clf.coef_array([ 0.34545455, 0.34545455]) clf.intercept_ 0.13636...例子:广义线性模型6岭回归系数图像:一种正则化方法使用稀疏特征进行文本文档分类岭回归的时间复杂度岭回归的复杂度与普通最小二乘法一样使用广义交叉验证设置正则化参数 RidgeCV 使用内置的交叉验证方法选择参数,进而实现了岭回归。该对象和GridSearchCV的原理类似,只不过RidgeCV默认使用广义交叉验证方法(留一交叉验证的一种高效形式): from sklearn import linear_model clf = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0]) clf.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None, normalize=False) clf.alpha_ 0.1参考文献“Notes on Regularized Least Squares”, Rifkin & Lippert (技术报告,课程胶片)1.1.3. Lasso Lasso 是一种预测稀疏系数的线性模型。在某些情况下,Lasso非常有用,因为其倾向于选择拥有更少参数数量的模型,从而有效减少了最终解决方案所依赖的变量个数。这样的特性使得Lasso和它的变种成为了压缩感知(compressed sensing)这一领域的基石。在特定情况下,它可以恢复非零权重的确切集合(it can recover the exact set of non-zero weights)(参见Compressive sensing: tomography reconstruction with L1 prior (Lasso))用数学语言讲,Lasso是一个增加了正则项的线性模型。需要优化的目标函数为因此,Lasso是要将带有这一项的最小二乘误差降到最小。这里是一个常数,是参数向量的范数 Lasso 类的实现使用了坐标下降算法来拟合系数。Least Angle Regression使用了另一种实现方法。广义线性模型7 from sklearn import linear_model clf = linear_model.Lasso(alpha = 0.1) clf.fit([[0, 0], [1, 1]], [0, 1])Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000, normalize=False, positive=False, precompute=False, random_state=None, selection='cyclic', tol=0.0001, warm_start=False) clf.predict([[1, 1]])array([ 0.8])对于一些底层的任务来说,函数 lasso_path 也很有效。该函数沿所有可能值的全部路径计算系数例子:Lasso and Elastic Net for Sparse SignalsCompressive sensing: tomography reconstruction with L1 prior (Lasso)注释使用Lasso进行特征选择:由于Lasso回归可以给出稀疏模型,因此该方法可以用于特征选择。参见“基于L1的特征选择”了解更多细节随机化稀疏:对于特征选择或稀疏性恢复,可以考虑使用随机化稀疏模型1.1.3.1. 设定正则化参数参数 alpha 用来控制所得到模型系数的系数程度1.1.3.1.1. 使用交叉验证使用scikit-learn提供的一些类,可以通过交叉验证的方式设置Lasso的 alpha 变量。这些类包括 LassoCV 和 LassoLarsCV 。其中 LassoLarsCV 基于下面介绍的最小角回归算法。对于有很多共线性回归项的高维数据集来说,LassoCV更为适用。但是,LassoLarsCV的优势在于,它可以找出更多alpha的相关值,而且如果样本数量显著小于变量数量,它比LassoCV更快。广义线性模型8广义线性模型91.1.3.1.2 基于信息准则的模型选择作为另一种可选方案, LassoLarsIC 使用赤池信息量准则(AIC)和贝叶斯信息量准则(BIC)进行预测。在使用k折交叉验证方法时,该预测器只计算一遍正则化路径来寻找alpha的最优值,而不像其它预测其那样计算k+1遍。因此这种方法所需的计算资源更少。然而,这种准则需要对最终结果的自由度有一个正确预测。它是由大量样本(渐进结果)得来,而且假设模型是正确的(也就是说,数据就是由这个模型产生的)。如果所解问题badlyconditioned(特征数多于样本数),那么这种方法也容易失败。例子Lasso模型选择:交叉验证/AIC/BIC1.1.4. 弹性网弹性网( ElasticNet )同时使用L1和L2正则化项来训练线性回归模型。使用这样的组合可以得到一个稀疏模型,也就是像Lasso那样只有少量权重是非零的,同时这样的模型还能够保持Ridge的正则化特性。我们使用参数 l1_ratio 来控制L1和L2的凸组合。当多个特征互相相关时,弹性网就可以派上用场。面对这样的情况,Lasso可能会随机选择一个特征,而弹性网会两个都选。在Lasso和岭回归中选择一个平衡点的应用优势在于,它允许弹性网在轮转情况(rotation)下继承岭回归的某些稳定性。其实质是最小化如下目标函数:广义线性模型10 ElasticNetCV 类可以用来设置参数 alpha ({% math %}\alpha{% endmath %})和 l1_ratio ({% math %}\rho{% endmath %}),使用的方法仍然是交叉验证方法。例子用于稀疏信号的Lasso和弹性网Lasso和弹性网1.1.5 多任务Lasso多任务Lasso( MultiTaskLasso )对多元联合回归问题给出一个系数稀疏的线性模型。这里 y 是一个n_samples * n_tasks的二维数组。其限制是选出的特征对所有回归问题(也叫作任务)都一样。广义线性模型11下图比较了使用简单Lasso和多任务Lasso得到的权重中非零系数的位置。Lasso得到的是离散的非零点,而多任务Lasso得到的是一整列。 下图给出了两种模型对时间序列模型的拟合比较(?Fitting a time-series model, imposingthat any active feature be active at all times.) 广义线性模型12例子:使用多任务Lasso进行联合特征选择数学上讲,该模型使用了混合的{% math %}\ell1{% endmath %}和{% math %}\ell_2{%endmath %}正则项来训练线性模型,即求解下述最优函数的最小值: {% math %} \min_w\frac{1}{2n{\mathrm{samples}}}||XW-Y||^22 + \alpha ||W||{21} {% endmath %} 其中 {% math%} ||W||{21} = \sum_i \sqrt{\sum_j w{ij}^2} {% endmath %} MultiTaskLasso 类的实现使用了坐标下降算法来拟合系数。1.1.6. 最小角回归(LARS)最小角回归(Least-angle regression (LARS))是一种用于高维数据的回归算法,由BradleyEfron, Trevor Hastie, Iain Johnstone和Robert Tibshirani共同提出。LARS的优点在于当pn时(即数据集维度远大于数据数量时),计算效率很高。计算速度与前向选择算法(forward selection)一样快,和普通最小二乘算法有同阶的复杂度。产生的是完整的,逐步的线性求解路径,在交叉验证或其他类似模型调优时尤其有用。如果两个自变量与因变量(响应变量)的相关性近乎等同,那么它们的系数应该以大致相同的速率增加。算法过程正与此直觉相符,而