LinearRegression(线性回归)是一个线性模型,其具有系数 s=(w1…wp) s = ( w 1 … w p ) ,这个线性回归函数最小化了数据集中真实数据的最小残差平方和,也就是通过线性估计进行了预测。在数学上解决了
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_
有点问题,最小二乘法的参数估计依赖模型的各项的独立性。当各项是相关的并且 X的各个列近似线性依赖的关系时候,就会导致X非常接近奇异矩阵(非满秩),最小二乘法的估计就会对 数据集中的随机误差非常敏感,导致大的方差。例如,在没有实验设计的情况下收集数据时,就会出现多重共线性的情况。
假定是n*p的矩阵(n>p),利用对X的奇异值分解的方法(标记一下没看懂,后面补理解)解出来,复杂度
为了避免过拟合加的对w的惩罚,成了最小化
from sklearn import linear_model
reg = linear_model.Ridge(alpha =.5)#重要系数alpha
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_
和普通的最小二乘法的复杂度一样。 O(np2) O ( n p 2 )
RidgeCV实现了在 岭回归的基础上的交叉验证,与GridSerach不同的是内部采用了 通用交叉验证方式,这种方式采用了留一法(假定有N个数据,每次选择n-1个训练一个测试,执行n次。具有确定性)。
示例代码:
#岭回归的复杂性一样。 可以设置 正则化中 alpha参数,选择最优
reg = linear_model.RidgeCV(alphas =[0.1,0.2,0.3])
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
reg.coef_
reg.alpha_
上面说了岭回归是在普通最小二乘法的基础上加了对系数的2阶范数的惩罚,Lasso就是在普通最小二乘法的基础上加了对系数的1阶范数的惩罚。Lasso这种方式使得系数矩阵比较稀疏,导致某些系数为0,从而达到能够忽略一些特征的目的,达到一定程度的特征选择(西瓜书有)。数学上表达为:
from sklearn import linear_model
reg =linear_model.Lasso(alpha=0.01)
reg.fit([[0, 0], [1, 1]], [0, 1])
reg.predict([[1, 1]])
α α 惩罚系数控制了稀疏性。下面介绍了几种选择alpha的方法。
交叉验证的方式。提供了2种,LassoCV,LassoLarsCV2种,前者基于Lasso的交叉验证,LassoLarsCV基于最小角回归的方法。
对于高维度的许多共线的数据,Lasso合适。对于探索相关的aplha数值上的。
常用信息准则**BIC,AIC**mark一下。它是一种计算成本较低的替代方法,在使用k-fold交叉验证时,只计算一次正则化路径的最优值,而不是k+1次。但是,这样的标准需要对解的自由度进行适当的估计,对于大样本(渐近结果),假设模型是正确的,即数据实际上是由这个模型生成的。当问题出现时,他们也往往会崩溃。
C=1α C = 1 α 或者 C=1α∗n C = 1 α ∗ n 这2个是等价的,只是表示方法不一样。
MutiTaskLasso,对于多元线性回归提供了方法。y代表的(n_samples,labels)。下面图像表明优化过程中MutiTaskLasso 系数不易产生0.
数学表达为:
很有意思,把岭回归和Lasso结合了一下。数学上最优:
如果多个标签的话,
Lars主要设计为了高维度的数据,p>n,和前向逐点回归优化类似。在每一步,找寻与真实值差值最小的预测模型。多label的时候,在各个方向取得一个平衡。
LARS的优势:
缺点:
sklearn实现了Lars和Lars_path。后者对于低维度比较快,能看到优化路径。
用lars实现的Lasso问题求解。封装在了LassoLars函数内部。与基于坐标下降不同,他产生了精确的解,作为系数规范的函数并且是分段线性的,,(不懂。。。)
示例代码
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. ])
2范数的代价
1范数的代价
开始只用于2分类,也可以通过one-vs-rest来实现多分类。
“lbfgs”, “sag” and “newton-cg” solvers只支持L2的惩罚。非常大的数据集上,“sag” or “saga”!
when fit_intercept=False and the fit coef_ (or) the data to be predicted are zeroes.,当division决策为0,逻辑回归和线性svc预测负类,而liblinear预测的是正类。fit_intercept=False 并且具有很有样本with decision_function zero, 会训练处坏的模型 并被建议设置fit_intercept=true.