Table of Contents
绪言
有监督学习
广义线性模型
线性与二次判别分析
核岭回归
支持向量机
随机梯度下降
1.1
1.2
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1
绪言
This book is translated from official user guide of scikit-learn.
2
有监督学习
3
广义线性模型
1.1. 广义线性模型
英文原文
以下介绍的方法均是用于求解回归问题,其目标值预计是输入变量的一个线性组合。写成数
学语言为:假设 是预测值,则有
在本节中,称向量
`intercept`
为 coef_ ,{% math %}w0{% endmath %}为
若要将通用的线性模型用于分类问题,可参见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 普通最小二乘法的复杂度
此方法使用 的奇异值分解来求解最小二乘。如果 是
矩阵,则算法的复杂度为
,假设
。
5
广义线性模型
1.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 Signals
Compressive 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