本章主要讲述一些用于回归的方法,其中目标值 y 是输入变量 x 的线性组合。 数学概念表示为:如果
是预测值,那么有:
在整个模块中,我们定义向量
作为 coef_ ,定义 作为 intercept_ 。
如果需要使用广义线性模型进行分类,请参阅 logistic 回归 。
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])Copy
然而,对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且设计矩阵
的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这种特性导致最小二乘估计对于随机误差非常敏感,可能产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现。
示例:
线性回归示例
该方法使用 X 的奇异值分解来计算最小二乘解。如果 X 是一个形状为 (n_samples, n_features)的矩阵,设 n_{samples} geq n_{features}nsamples≥nfeatures , 则该方法的复杂度为 O(n_{samples} n_{fearures}^2)O(nsamplesnfearures2)
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...Copy
示例:
岭系数对回归系数的影响
分类特征稀疏的文本
这种方法与 普通最小二乘法 的复杂度是相同的.
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.1Copy
指定cv属性的值将触发(通过GridSearchCV的)交叉验证。例如,cv=10将触发10折的交叉验证,而不是广义交叉验证(GCV)。
参考资料
“Notes on Regularized Least Squares”, Rifkin & Lippert (technical report, course slides).
Lasso 是拟合稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。 因此,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])Copy
对于较简单的任务,同样有用的是函数 lasso_path 。它能够通过搜索所有可能的路径上的值来计算系数。
示例:
Lasso和Elastic Net(弹性网络)在稀疏信号上的表现压缩感知_断层重建
注意: 使用 Lasso 进行特征选择
由于 Lasso 回归产生稀疏模型,因此可以用于执行特征选择,详见 基于 L1 的特征选取 。
下面两篇参考解释了scikit-learn坐标下降算法中使用的迭代,以及用于收敛控制的对偶间隙计算的理论基础。
参考资料
“Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).“An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)
alpha 参数控制估计系数的稀疏度。
scikit-learn 通过交叉验证来公开设置 Lasso alpha 参数的对象: LassoCV 和 LassoLarsCV。 LassoLarsCV 是基于下面将要提到的 最小角回归 算法。
对于具有许多线性回归的高维数据集, LassoCV 最常见。 然而,LassoLarsCV 在寻找 alpha参数值上更具有优势,而且如果样本数量比特征数量少得多时,通常 LassoLarsCV 比 LassoCV 要快。
有多种选择时,估计器 LassoLarsIC 建议使用 Akaike information criterion (Akaike 信息判据)(AIC)或 Bayes Information criterion (贝叶斯信息判据)(BIC)。 当使用 k-fold 交叉验证时,正则化路径只计算一次而不是 k + 1 次,所以找到 α 的最优值是一种计算上更经济的替代方法。 然而,这样的判据需要对解决方案的自由度进行适当的估计,它会假设模型是正确的,对大样本(渐近结果)进行导出,即数据实际上是由该模型生成的。 当问题严重受限(比样本更多的特征)时,它们也容易崩溃。
示例:
Lasso模型选择-交叉验证/AIC/BIC
alpha 和 SVM 的正则化参数C 之间的等式关系是 alpha = 1 / C 或者 alpha = 1 / (n_samples * C),并依赖于估计器和模型优化的确切的目标函数。
MultiTaskLasso 是一个估计多元回归稀疏系数的线性模型: y 是一个形状为(n_samples, n_tasks) 的二维数组,其约束条件和其他回归问题(也称为任务)是一样的,都是所选的特征值。
下图比较了通过使用简单的 Lasso 或 MultiTaskLasso 得到的 W 中非零的位置。 Lasso 估计产生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。
拟合 time-series model (时间序列模型),强制任何活动的功能始终处于活动状态。
示例:
多任务Lasso实现联合特征选择
在数学上,它由一个线性模型组成,以混合的
作为正则化器进行训练。目标函数最小化是:
其中
表示 Frobenius 标准:
并且
读取为:
MultiTaskLasso 类的实现使用了坐标下降作为拟合系数的算法。
弹性网络 是一种使用 L1, L2 范数作为先验正则项训练的线性回归模型。 这种组合允许拟合到一个只有少量参数是非零稀疏的模型,就像 Lasso 一样,但是它仍然保持了一些类似于 Ridge 的正则性质。我们可利用 l1_ratio 参数控制 L1 和 L2 的凸组合。
弹性网络在很多特征互相联系的情况下是非常有用的。Lasso 很可能只随机考虑这些特征中的一个,而弹性网络更倾向于选择两个。
在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性。
在这里,最小化的目标函数是
ElasticNetCV 类可以通过交叉验证来设置参数 alpha (
) 和 l1_ratio (
) 。
示例:
Lasso和Elastic Net(弹性网络)在稀疏信号上的表现Lasso和Elastic Net
下面两篇参考解释了scikit-learn坐标下降算法中使用的迭代,以及用于收敛控制的对偶间隙计算的理论基础。
参考资料
“Regularization Path For Generalized linear Models by Coordinate Descent”, Friedman, Hastie & Tibshirani, J Stat Softw, 2010 (Paper).“An Interior-Point Method for Large-Scale L1-Regularized Least Squares,” S. J. Kim, K. Koh, M. Lustig, S. Boyd and D. Gorinevsky, in IEEE Journal of Selected Topics in Signal Processing, 2007 (Paper)
MultiTaskElasticNet 是一个对多回归问题估算稀疏参数的弹性网络: Y 是一个二维数组,形状是 (n_samples,n_tasks)。 其限制条件是和其他回归问题一样,是选择的特征,也称为 tasks 。
从数学上来说, 它包含一个混合的
先验和
先验为正则项训练的线性模型 目标函数就是最小化:
在 MultiTaskElasticNet 类中的实现采用了坐标下降法求解参数。
在 MultiTaskElasticNetCV 中可以通过交叉验证来设置参数 alpha (
) 和 l1_ratio (
最小角回归 (LARS) 是对高维数据的回归算法, 由 Bradley Efron, Trevor Hastie, Iain Johnstone 和 Robert Tibshirani 开发完成。 LARS 和逐步回归很像。在每一步,它都寻找与响应最有关联的预测。当有很多预测有相同的关联时,它并不会继续利用相同的预测,而是在这些预测中找出应该等角的方向。
LARS的优点:
LARS 的缺点:
LARS 模型可以在 Lars ,或者它的底层实现 lars_path或 lars_path_gram中被使用。
LassoLars 是一个使用 LARS 算法的 lasso 模型,不同于基于坐标下降法的实现,它可以得到一个精确解,也就是一个关于自身参数标准化后的一个分段线性解。
>>> from sklearn import linear_model
>>> reg = linear_model.LassoLars(alpha=.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
LassoLars(alpha=0.1, copy_X=True, eps=..., fit_intercept=True,
fit_path=True, max_iter=500, normalize=True, positive=False,
precompute='auto', verbose=False)
>>> reg.coef_
array([0.717157..., 0. ])Copy
示例:
使用LARS计算Lasso路径
Lars 算法提供了一个几乎无代价的沿着正则化参数的系数的完整路径,因此常利用函数 lars_path或 lars_path_gram来取回路径。
该算法和逐步回归非常相似,但是它没有在每一步包含变量,它估计的参数是根据与 其他剩余变量的联系来增加的。
在 LARS 的解中,没有给出一个向量的结果,而是给出一条曲线,显示参数向量的 L1 范式的每个值的解。 完全的参数路径存在 coef_path_ 下。它的 size 是 (n_features, max_features+1)。 其中第一列通常是全 0 列。
参考资料:
Original Algorithm is detailed in the paper Least Angle Regression by Hastie et al.
OrthogonalMatchingPursuit (正交匹配追踪法)和 orthogonal_mp使用了 OMP 算法近似拟合了一个带限制的线性模型,该限制影响于模型的非 0 系数(例:L0 范数)。
就像最小角回归一样,作为一个前向特征选择方法,正交匹配追踪法可以近似一个固定非 0 元素的最优向量解:
正交匹配追踪法也可以针对一个特殊的误差而不是一个特殊的非零系数的个数。可以表示为:
OMP 是基于每一步的贪心算法,其每一步元素都是与当前残差高度相关的。它跟较为简单的匹配追踪(MP)很相似,但是相比 MP 更好,在每一次迭代中,可以利用正交投影到之前选择的字典元素重新计算残差。
示例:
正交匹配追踪
参考资料:
http://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdfMatching pursuits with time-frequency dictionaries, S. G. Mallat, Z. Zhang,
贝叶斯回归可以用于在预估阶段的参数正则化: 正则化参数的选择不是通过人为的选择,而是通过手动调节数据值来实现。
上述过程可以通过引入 无信息先验 到模型中的超参数来完成。 在 岭回归中使用的
正则项相当于在
为高斯先验条件,且此先验的精确度为
时,求最大后验估计。在这里,我们没有手工调参数 lambda ,而是让他作为一个变量,通过数据中估计得到。
为了得到一个全概率模型,输出
也被认为是关于
的高斯分布。
Alpha 在这里也是作为一个变量,通过数据中估计得到。
贝叶斯回归有如下几个优点:
贝叶斯回归有如下缺点:
参考资料
一个对于贝叶斯方法的很好的介绍 C. Bishop: Pattern Recognition and Machine learning详细介绍原创算法的一本书 Bayesian learning for neural networks by Radford M. Neal
一直在努力!
最后,小编想说:我是一名python开发工程师,
整理了一套最新的python系统学习教程,
想要这些资料的可以关注私信小编“1或者6”即可(免费分享哦)希望能对你有所帮助.
页面更新:2024-03-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号