【sklearn第八讲】广义线性模型

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

在下面的公式里,目标值是输入变量的线性组合,数学上, y ^ \hat{y} y^ 是预测值。
y ^ ( w , x ) = w 0 + w 1 x 1 + ⋯ + w p x p \hat{y}(w, x)=w_0+w_1x_1+\dots+w_px_p y^(w,x)=w0+w1x1++wpxp
其中, w = ( w 1 , … , w p ) w=(w_1, \dots, w_p) w=(w1,,wp)是系数向量, w 0 w_0 w0 是常数项。

普通最小二乘

函数LinearRegression拟合一个具有系数向量 w = ( w 1 , … , w p ) w=(w_1, \dots, w_p) w=(w1,,wp) 的线性模型,最小化在响应变量的观测值和预测值之间的残差平方和,即
\begin{equation}
\mathop{\min}_{w} \ \ | Xw-y|_2^2
\end{equation}

LinearRegression在fit方法里取数组X, y作为输入,保存估计的系数向量w在coef_成员里。

from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_

这里写图片描述

这里写图片描述

使用最小二乘估计时要注意,估计的准确性依赖输入变量的独立性假设。当输入变量相关时,设计矩阵X的列近似线性相关,这时X接近奇异的(不可逆的)。此时最小二乘估计量对观测的响应变量是高度敏感的,且方差增大了。这种情况在统计中称多重共线性(multicollinearity), 当不经过实验设计而收集数据时,容易产生共线性的现象。

岭回归

岭回归(Ridge regression)是在最小二乘的基础上加了一个L2惩罚项,即,岭回归系数来自惩罚的残差平方和最小化。
\begin{equation}
\mathop{\min}_{w} \ \ | Xw-y|_2^2 + \alpha|w|_2^2
\end{equation}

这里, α \alpha α 是一个复杂系数,用来控制收缩量。 α \alpha α 的值越大,收缩量越大,越容易有共线性。在scikit里,由函数Ridge执行岭回归,同其它线性模型一样,Ridge在fit方法里接受数组X, y, 在coef_成员里保存系数 w w w.

from sklearn import linear_model
reg = linear_model.Ridge (alpha = .5)
reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
reg.coef_
reg.intercept_

这里写图片描述

这里写图片描述

这里写图片描述

设置正则参数:广义交叉验证

函数RidgeCV执行的岭回归,具有关于参数 α \alpha α 的交叉验证。

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])
reg.alpha_

这里写图片描述

这里写图片描述

Lasso

Lasso是一个估计稀疏系数(主要是0)的线性模型。数学上,它由带有L1先验惩罚子的线性模型组成,目标函数最小化:

\begin{equation}
\mathop{\min}{w} \ \ \dfrac{1}{2n{samples}} | Xw-y|_2^2 + \alpha|w|_1
\end{equation}

这里, α \alpha α 是常数, ∥ w ∥ 1 \|w\|_1 w1 是参数向量的L1范数。

Lasso类里,使用坐标下降法(coordinate descent)拟合系数。

from sklearn import linear_model
reg = linear_model.Lasso(alpha = 0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
reg.predict([[1, 1]])

【sklearn第八讲】广义线性模型_第1张图片

这里写图片描述

设置正则参数

参数 α \alpha α 控制被估计参数的稀疏程度。

交叉验证法

scikit-learn使用交叉验证(cross-validation)法设置lasso参数 α \alpha α: LassoCV, LassoLarsCV. 其中,LassoLarsCV是基于最小角回归算法。对于高维、存在很多共线性预测项的数据集,LassoCV是首选。然而,LassoLarsCV在探索强相关性的 α \alpha α 方面有优势。如果样本数远小于特征数,LassoLarsCV要比LassoCV执行更快。

基于信息准则的模型选择

LassoLarsIC提出使用赤池信息量(Akaike information criterion, AIC)、贝叶斯信息量(Bayesian information criterion, BIC). LassoLarsIC能够快速简单地找到最优的 α \alpha α 值,这是因为正则路径只被计算一次,而不是使用k倍交叉验证的k+1次。然而,这个准则需要一个更适合的解的自由度的估计,并且假设数据实际上来自线性模型。当条件不满足时,比如说特征多于样本,可能找到的不是最优的 α \alpha α.

弹性网格

ElasticNet是一个同时具有L1, L2惩罚项的线性模型。这个组合学习一个具有很少的非零权、类似lasso的稀疏模型,而仍然维持岭回归的正则属性。我们通过参数l1_ratio控制L1, L2的凸组合。当多个特征彼此相关时,弹性网格是有用的。对于两个相关的特征,lasso随机地选择一个,而弹性网格可能选择两个。

在lasso和ridge之间的折中优势是,弹性网格继承了岭回归的稳定性,它的目标函数是最小化

\begin{equation}
\mathop{\min}{w} \ \ \dfrac{1}{2n{samples}} | Xw-y|_2^2 + \alpha\rho|w|_1 +\dfrac{\alpha(1-\rho)}{2}|w|_2^2
\end{equation}

ElasticNetCV可以通过交叉验证设置参数 α \alpha α 和 l1_ratio( ρ \rho ρ) 的值。

Logistic 回归

Logistic回归,虽然名字叫回归,但实际上它是一个用于分类而不是回归的线性模型。在学术文献里,logistic回归又称为logit回归、最大熵分类或对数线性分类器。在该模型中,通过使用一个logistic函数,建模出现一个试验的可能结果的概率。

在scikit-learn里,使用类LogisticRegression执行logistic回归。该类能够拟合二值或多项具有L1, L2正则条件的logistic回归。作为一个优化问题,两类别、L2惩罚的logistic回归最小化下面的代价函数:

\begin{equation}
\mathop{\min}{w, c} \ \ \frac{1}{2}w^\mathrm{T} w +C\sum\limits{i=1}^n\log (\exp(-y_i(X_i^\mathrm{T} w+c))+1)
\end{equation}

类似的,L1正则的logistic回归解决下面的优化问题:

\begin{equation}
\mathop{\min}_{w, c} \ \ |w|1 +C\sum\limits{i=1}^n\log (\exp(-y_i(X_i^\mathrm{T} w+c))+1)
\end{equation}

在类LogisticRegression执行的解决器是“liblinear”, “newton-cg”, “lbfgs”, “sag” and “saga”.

解决器“liblinear”使用了一个坐标下降(CD)算法,依赖scikit内置的C++ LIBLINEAR库。然而,CD算法不能执行多类别的分类模型。 解决器“lbfgs”, “sag” and “newton-cg”仅仅解决L2惩罚,而且对于高维数据,收敛到最优解的速度更快。解决器"sag"使用一个随机平均梯度下降算法,对于大数据集,特别是样本数和特征数都大的情况,比其它解决器更快。解决器"saga"是"sag"的变种,也支持非平滑的L1惩罚。因此,该解决器是稀疏的多类别logistic回归的首选。

总结一下,"saga"解决器通常是最好的选择,而默认使用的是“liblinear”解决器。对于大数据,你也可以考虑使用带有对数损失的SGDClassifier类。

阅读更多精彩内容,请关注微信公众号:统计学习与大数据

你可能感兴趣的:(【sklearn第八讲】广义线性模型)