下面是一系列的用于回归的方法,这些方法的目标值(target value)是由输入变量的线性组合而成。在数学概念上,如果
y^
是预测值:
在整个模块中,我们指定向量
为系数,并且 ω0 作为截距。
1. 普通最小二乘法
LinearRegression是一个线性模型,它的系数 最小化数据集中的观测结果和线性预测结果之间的残差和。它解决的问题在数学上可以形式化为:
minw||Xw−y||2
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])
然而由普通最小二乘法估计的系数依赖于模型项之间的独立性。当所有的项是相关的,并且设计矩阵X 的列有一个近似的线性相关性。设计矩阵接近奇异,并且作为一个结果,最小二乘估计将对观察值的随机误差高度敏感,产生一个较大的差异。这种情况下,多重共线性的可能性将会增加。例如,数据没有按照实验设计来收集。
1.1 普通最小二乘法的复杂性
这种方法使用矩阵 X 的奇异值分解来计算最小二乘解。如果矩阵 X的尺寸是 (n,p) , 那么该方法的的复杂度将会是 O(np2) ,假设 n≥p 。
2. 岭回归
Ridge 回归通过引入系数的惩罚项来处理普通最小二乘法的一些问题:
在这里,
α≥0
是一个复杂的参数,它控制着收缩量:
α
值越大,收缩量越大,并且系数的共线性将变得更鲁棒。
和其它的线性模型一样,Ridge 的 fit 方法接收数组 X,y 作为其参数,并且会将线性模型的的系数 ω 存储在它的成员 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...
2.2 Ridge的复杂性
Ridge 的算法复杂性与普通最小二乘的复杂度一致。
2.3 设置正则化参数:广义交叉验证
RidgeCV实现了一个内置 α 参数的交叉验证的岭回归。它使用的是留一法验证:
>>> 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
3. Lasso
Lasso 线性模型估计稀疏系数。他在某些情况下是非常有用的,在这些情况下更倾向于更少的参数的解决方案。它有效地减少在给定解决方案上独立变量的个数。
持续更新中。。。