sklearn文档-第一次笔记

1.1.1 Ordinary Least Squares(普通最小二乘法)

LinearRegression(线性回归)是一个线性模型,其具有系数 s = ( w 1 w p ) ,这个线性回归函数最小化了数据集中真实数据的最小残差平方和,也就是通过线性估计进行了预测。在数学上解决了

min w | | X w y | |
.
LinearRegression 采用了fit这个方法,使用了arrayX,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非常接近奇异矩阵(非满秩),最小二乘法的估计就会对 数据集中的随机误差非常敏感,导致大的方差。例如,在没有实验设计的情况下收集数据时,就会出现多重共线性的情况。

1.1.1.1. Ordinary Least Squares Complexity(复杂性)

假定是n*p的矩阵(n>p),利用对X的奇异值分解的方法(标记一下没看懂,后面补理解)解出来,复杂度

O ( n p 2 )

1.1.2. Ridge Regression

为了避免过拟合加的对w的惩罚,成了最小化

min w | | X w y | | + α | | w | | 2 2

α 越大,很显然对w的惩罚越大,防止过拟合的程度越高。
RIdge也采用了fit(x,y)这种模式,并且coef_保存了w的值。alpha_保存了alpha值,可以通过模型获取相关系数。
示例代码:

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_

1.1.2.1. Ridge Complexity

和普通的最小二乘法的复杂度一样。 O ( n p 2 )

1.1.2.2 Setting the regularization parameter: generalized Cross-Validation

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_

1.1.3. Lasso

上面说了岭回归是在普通最小二乘法的基础上加了对系数的2阶范数的惩罚,Lasso就是在普通最小二乘法的基础上加了对系数的1阶范数的惩罚。Lasso这种方式使得系数矩阵比较稀疏,导致某些系数为0,从而达到能够忽略一些特征的目的,达到一定程度的特征选择(西瓜书有)。数学上表达为:

min w 1 2 N s a m p l e s | | X w y | | + α | | w | | 1

lasso问题使用了 坐标下降法来求解系数,Least Angle Regression 最小角回归 是另一种方式。很多方式。
坐标下降法的Lasso问题实例代码:

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

1.1.3.1. Setting regularization parameter

α 惩罚系数控制了稀疏性。下面介绍了几种选择alpha的方法。

1.3.1.1.1 Using cross_validation

交叉验证的方式。提供了2种,LassoCV,LassoLarsCV2种,前者基于Lasso的交叉验证,LassoLarsCV基于最小角回归的方法。
对于高维度的许多共线的数据,Lasso合适。对于探索相关的aplha数值上的。

1.3.1.1.2 Information-criteria based model selection(基于信息增益的模型选择)

常用信息准则**BIC,AIC**mark一下。它是一种计算成本较低的替代方法,在使用k-fold交叉验证时,只计算一次正则化路径的最优值,而不是k+1次。但是,这样的标准需要对解的自由度进行适当的估计,对于大样本(渐近结果),假设模型是正确的,即数据实际上是由这个模型生成的。当问题出现时,他们也往往会崩溃。

1.1.3.1.3. Comparison with the regularization parameter of SVM

C = 1 α 或者 C = 1 α n 这2个是等价的,只是表示方法不一样。

1.1.4. Multi-task Lasso

MutiTaskLasso,对于多元线性回归提供了方法。y代表的(n_samples,labels)。下面图像表明优化过程中MutiTaskLasso 系数不易产生0.
这里写图片描述

数学表达为:

min W 1 2 N s a m p l e s | | X W Y | | F r o + α | | W | | 21

Fro代表
| | A | | F r o = i j a i j 2

| | A | | 21 = i j a i j 2

实现方式 :坐标下降法

1.1.5. Elastic Net

很有意思,把岭回归和Lasso结合了一下。数学上最优:

min w 1 2 N s a m p l e s | | X w y | | + α p | | w | | 1 + α ( 1 p ) 2 | | w | | 2 2

提供了ElasticNet接口。
提供了 ElasticNetCV用来交叉验证。

1.1.6. Multi-task Elastic Net¶

如果多个标签的话,

min w 1 2 N s a m p l e s | | X w y | | F r o + α p | | w | | 21 + α ( 1 p ) 2 | | w | | F r o

使用了坐标下降法。提供MultiTaskElasticNet接口。
也提供了 MultiTaskElasticNetCV用来交叉验证

1.1.7. Least Angle Regression

Lars主要设计为了高维度的数据,p>n,和前向逐点回归优化类似。在每一步,找寻与真实值差值最小的预测模型。多label的时候,在各个方向取得一个平衡。
LARS的优势:

  1. p>n很有效
  2. 和前向选择速度一样并与传统的最小二乘法复杂度一样
  3. 提供了优化的路径,在交叉验证调节模型很有用
  4. 如果2个维度对于结果response具有相同的影响,那么他们的系数增加的速率应该相同,这个算法达到了这种目的。
  5. 很容易改进来提供别的问题的解,比如lasso问题的解可以用这种方法求。

缺点:

  1. 基于对剩余残差的反复修改,导致对噪声很敏感。

sklearn实现了Lars和Lars_path。后者对于低维度比较快,能看到优化路径。

1.1.8. LARS Lasso

用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.        ])

1.1.8.1. Mathematical formulation

1.1.9. Orthogonal Matching Pursuit (OMP)

1.1.10 Bayesian Regression

1.1.11. Logistic regression

2范数的代价
2范数的代价
1范数的代价
这里写图片描述
开始只用于2分类,也可以通过one-vs-rest来实现多分类。
“lbfgs”, “sag” and “newton-cg” solvers只支持L2的惩罚。非常大的数据集上,“sag” or “saga”!

Differences from liblinear:

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.

1.1.12. Stochastic Gradient Descent - SGD

1.1.13. Perceptron

1.1.14. Passive Aggressive Algorithms¶

1.1.15. Robustness regression: outliers and modeling errors 处理异常点效果更好

1.1.16. Polynomial regression: extending linear models with basis functions

猜你喜欢

转载自blog.csdn.net/qq_34059989/article/details/80062734