一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情 Hello,非常感谢你的关注~ 我是机器学习与风控,一名末流985的本硕,无顶会、无大厂核心部门实习,拥有多个比赛的竞赛经历,秋招刷了leetcode500题,在秋招提前批中收获字节跳动,腾讯,阿里,美团等大厂offer,最终选择入职字节风控,从事与黑产对抗的工作。我会定期分享我的春招、秋招亲身求职体验;算法岗日常工作;数据挖掘比赛,经典图模型等日常学习等有料也有趣的内容~秋招到了,欢迎各位私信找我内推!!!部门缺少开发,算法等岗位验证缺人。
1.1.1 Ordinary Least Squares(普通最小二乘法)
LinearRegression(线性回归)是一个线性模型,其具有系数 ,这个线性回归函数最小化了数据集中真实数据的最小残差平方和,也就是通过线性估计进行了预测。在数学上解决了 . 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的奇异值分解的方法**(标记一下没看懂,后面补理解)**解出来,复杂度
1.1.2. Ridge Regression
为了避免过拟合加的对w的惩罚,成了最小化 越大,很显然对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
和普通的最小二乘法的复杂度一样。
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,从而达到能够忽略一些特征的目的,达到一定程度的特征选择(西瓜书有)。数学上表达为: 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,AICmark一下。它是一种计算成本较低的替代方法,在使用k-fold交叉验证时,只计算一次正则化路径的最优值,而不是k+1次。但是,这样的标准需要对解的自由度进行适当的估计,对于大样本(渐近结果),假设模型是正确的,即数据实际上是由这个模型生成的。当问题出现时,他们也往往会崩溃。
1.1.3.1.3. Comparison with the regularization parameter of SVM
或者 这2个是等价的,只是表示方法不一样。
1.1.4. Multi-task Lasso
MutiTaskLasso,对于多元线性回归提供了方法。y代表的(n_samples,labels)。下面图像表明优化过程中MutiTaskLasso 系数不易产生0.
数学表达为: Fro代表 实现方式 :坐标下降法
1.1.5. Elastic Net
很有意思,把岭回归和Lasso结合了一下。数学上最优: 提供了ElasticNet接口。 提供了 ElasticNetCV用来交叉验证。
1.1.6. Multi-task Elastic Net¶
如果多个标签的话, 使用了坐标下降法。提供MultiTaskElasticNet接口。 也提供了 MultiTaskElasticNetCV用来交叉验证
1.1.7. Least Angle Regression
Lars主要设计为了高维度的数据,p>n,和前向逐点回归优化类似。在每一步,找寻与真实值差值最小的预测模型。多label的时候,在各个方向取得一个平衡。 LARS的优势:
- p>n很有效
- 和前向选择速度一样并与传统的最小二乘法复杂度一样
- 提供了优化的路径,在交叉验证调节模型很有用
- 如果2个维度对于结果response具有相同的影响,那么他们的系数增加的速率应该相同,这个算法达到了这种目的。
- 很容易改进来提供别的问题的解,比如lasso问题的解可以用这种方法求。
缺点:
- 基于对剩余残差的反复修改,导致对噪声很敏感。
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. ])