1.1. 广义线性模型
校验者:
@专业吹牛逼的小明
@Gladiator
翻译者:
@瓜牛
@年纪大了反应慢了
@Hazekiah
@BWM-蜜蜂
下面是一组用于回归的方法,其中目标期望值 y是输入变量 x 的线性组合。 在数学概念中,如果
是预测值 value.
在整个模块中,我们定义向量
作为 coef_ 定义
作为 intercept_.
如果需要使用广义线性模型进行分类,请参阅 logistic 回归 . logistic 回归.
1.1.1. 普通最小二乘法
LinearRegression 适合一个带有系数
据(估计值)之间的残差平方和最小。其数学表达式为:
的线性模型,使得数据集实际观测数据和预测数
LinearRegression 会调用 fit 方法来拟合数组 X, y,并且将线性模型的系数
``coef_``中:
存储在其成员变量
>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
>>> reg.coef_
array([ 0.5, 0.5])
然而,对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且
设计矩阵
的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于
随机误差非常敏感,产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共
线性(multicollinearity) 的情况可能真的会出现。
举例:
Linear Regression Example
1.1.1.1. 普通最小二乘法复杂度
该方法使用 X 的奇异值分解来计算最小二乘解。如果 X 是一个 size 为 (n, p) 的矩阵,设
则该方法花费的成本为
,
1.1.2. 岭回归
Ridge 回归通过对系数的大小施加惩罚来解决 普通最小二乘法 (普通最小二乘)的一些问题。 岭系数
最小化一个带罚项的残差平方和,
其中,
鲁棒。
是控制收缩量复杂性的参数:
, 的值越大,收缩量越大,因此系数对共线性变得更加
与其他线性模型一样, Ridge 采用 fit 将采用其
存储在其 coef_ 成员中:
>>> from sklearn import linear_model
>>> reg = linear_model.Ridge (alpha = .5)
>>> reg.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)
>>> reg.coef_
array([ 0.34545455, 0.34545455])
>>> reg.intercept_
0.13636...
举例:
:ref:`sphx_glr_auto_examples_linear_model_plot_ridge_path.py`( 作为正则化的函数,绘制岭
系数 )
:ref:`sphx_glr_auto_examples_text_document_classification_20newsgroups.py`( 使用稀疏特征
的文本文档分类 )
1.1.2.1. 岭回归的复杂度
这种方法与 普通最小二乘法 (普通最小二乘方法)的复杂度是相同的.
1.1.2.2. 设置正则化参数:广义交叉验证
RidgeCV 通过内置的 Alpha 参数的交叉验证来实现岭回归。 该对象与 GridSearchCV 的使用方法相
同,只是它默认为 Generalized Cross-Validation(广义交叉验证 GCV),这是一种有效的留一验证方
法(LOO-CV):
>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
>>> reg.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)
>>> reg.alpha_
0.1
参考
“Notes on Regularized Least Squares”, Rifkin & Lippert (technical report, course slides).
1.1.3. Lasso
The Lasso 是估计稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参
数值的情况,有效地减少给定解决方案所依赖变量的数量。 因此,Lasso及其变体是压缩感知领域
的基础。 在一定条件下,它可以恢复一组非零权重的精确集 (见 Compressive sensing: tomography
reconstruction with L1 prior (Lasso)).
在数学上,它由一个线性模型组成,以
为准。 其目标函数的最小化是:
lasso estimate 解决了加上罚项
数向量的
-norm 范数。
的最小二乘法的最小化,其中,
是一个常数,
是参
Lasso 类的实现使用了 coordinate descent (坐标下降算法)来拟合系数。 查看 最小角回归 用于另
一个实现:
>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha = 0.1)
>>> reg.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)
>>> reg.predict([[1, 1]])
array([ 0.8])
对于较低级别的任务,同样有用的是:func:lasso_path。它能够通过搜索所有可能的路径上的值来计
算系数。
举例:
Lasso and Elastic Net for Sparse Signals (稀疏信号的套索和弹性网)
Compressive sensing: tomography reconstruction with L1 prior (Lasso) (压缩感知:L1先验
(Lasso)的断层扫描重建)
Note
Feature selection with Lasso(使用 Lasso 进行 Feature 的选择)
由于 Lasso 回归产生稀疏模型,因此可以用于执行特征选择,详见 基于 L1 的特征选取 (基于L1的
特征选择).
1.1.3.1. 设置正则化参数
alpha 参数控制估计系数的稀疏度。
1.1.3.1.1. 使用交叉验证
scikit-learn 通过交叉验证来公开设置 Lasso alpha 参数的对象: LassoCV and LassoLarsCV。
LassoLarsCV 是基于下面解释的 :ref:`least_angle_regression`(最小角度回归)算法。
对于具有许多线性回归的高维数据集, LassoCV 最常见。 然而,LassoLarsCV 在寻找 alpha
parameter 参数值上更具有优势,而且如果样本数量与特征数量相比非常小时,通常 LassoLarsCV 比
LassoCV 要快。
1.1.3.1.2. 基于信息标准的模型选择
有多种选择时,估计器 LassoLarsIC 建议使用 Akaike information criterion (Akaike 信息准则)
(AIC)和 Bayes Information criterion (贝叶斯信息准则)(BIC)。 当使用 k-fold 交叉验证时,
正则化路径只计算一次而不是k + 1次,所以找到α的最优值是一种计算上更便宜的替代方法。 然
而,这样的标准需要对解决方案的自由度进行适当的估计,对于大样本(渐近结果)导出,并假设
模型是正确的,即数据实际上是由该模型生成的。 当问题严重受限(比样本更多的特征)时,他们
也倾向于打破。
举例:
:ref:`sphx_glr_auto_examples_linear_model_plot_lasso_model_selection.py`(Lasso 型号选
择:交叉验证/AIC/BIC)
1.1.3.1.3. 与 SVM 的正则化参数的比较
根据估计器和模型优化的精确目标函数,在 alpha 和 SVM 的正则化参数之间是等值的,其中 C 是通
过 alpha = 1 / C 或者 alpha = 1 / (n_samples * C) 得到的。
1.1.4. 多任务 Lasso
MultiTaskLasso 是一个估计多元回归稀疏系数的线性模型: y 是一个 (n_samples, n_tasks) 的二
维数组,其约束条件和其他回归问题(也称为任务)是一样的,都是所选的特征值。
下图比较了通过使用简单的 Lasso 或 MultiTaskLasso 得到的 W 中非零的位置。 Lasso 估计分散的
产生着非零值,而 MultiTaskLasso 的所有列都是非零的。
拟合 time-series model ( 时间序列模型 ),强制任何活动的功能始终处于活动状态。
举例:
Joint feature selection with multi-task Lasso (联合功能选择与多任务Lasso)
在数学上,它由一个线性模型组成,以混合的
作为正则化器进行训练。目标函数最小化是:
其中
表示 Frobenius 标准:
并且
读取为:
MultiTaskLasso 类中的实现使用了坐标下降作为拟合系数的算法。
1.1.5. 弹性网络
弹性网络 是一种使用L1,L2范数作为先验正则项训练的线性回归模型。 这种组合允许学习到一个只有
少量参数是非零稀疏的模型,就像 Lasso 一样, 但是它仍然保持 一些像 Ridge 的正则性质。我们可利
用 l1_ratio 参数控制L1和L2的凸组合。
弹性网络在很多特征互相联系的情况下是非常有用的。Lasso很可能只随机考虑这些特征中的一
个,而弹性网络更倾向于选择两个。
在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge
的稳定性。
在这里,最小化的目标函数是
ElasticNetCV 类可以通过交叉验证来设置参数
alpha ( ) 和 l1_ratio ( ) 。
Examples:
Lasso and Elastic Net for Sparse Signals
Lasso and Elastic Net
1.1.6. 多任务弹性网络
MultiTaskElasticNet 是一个对多回归问题估算稀疏参数的弹性网络: Y 是一个二维数组,形状是
(n_samples,n_tasks)。 其限制条件是和其他回归问题一样,是选择的特征,也称为 tasks.。
从数学上来说, 它包含一个用
先验 and
先验为正则项训练的线性模型 目标函数就是最小化:
在 MultiTaskElasticNet 类中的实现采用了坐标下降法求解参数。
在 MultiTaskElasticNetCV 中可以通过交叉验证来设置参数 alpha ( ) 和 l1_ratio ( ) 。
1.1.7. 最小角回归
最小角回归 (LARS) 是对高维数据的回归算法, 由Bradley Efron, Trevor Hastie, Iain Johnstone 和
Robert Tibshirani开发完成。 LARS和逐步回归很像。 在每一步,它寻找与响应最有关联的 预测。
当有很多预测由相同的关联时,它没有继续利用相同的预测,而是在这些预测中找出应该等角的方
向。