lasso

R实现LASSO

微笑、不失礼 提交于 2019-11-28 11:46:35
library(lars) data <- as.matrix(data) out2 <- lars(x=data[,1:13],y=data[,14],type ="lar") summary(out2) Cp的含义:衡量多重共线性,其取值越小越好,这里取到第6步使得Cp值最小,也就是选择X7,X3,X5,X11,X6,X10 这6个变量。 #确定Cp值最小的步数 coef <- coef.lars(out2, mode="step", s=7) coef[coef!=0] --------------------- 作者:liuzhilu 来源:CSDN 原文:https://blog.csdn.net/liuzhilu/article/details/80293102 版权声明:本文为博主原创文章,转载请附上博文链接! 来源: https://www.cnblogs.com/precious-hui/p/10849090.html

Lasso回归算法: 坐标轴下降法与最小角回归法小结

a 夏天 提交于 2019-11-28 11:46:03
Ridge回归 由于直接套用线性回归可能产生过拟合,我们需要加入正则化项,如果加入的是L2正则化项,就是Ridge回归,有时也翻译为岭回归。它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和一个调节线性回归项和正则化项权重的系数α。损失函数表达式如下: J(θ)=1/2(Xθ−Y) T (Xθ−Y)+1/2α||θ|| 2 2 其中α为常数系数,需要进行调优。||θ|| 2 为L2范数。Ridge回归的解法和一般线性回归大同小异。如果采用梯度下降法,则每一轮θ迭代的表达式是: θ=θ−(βX T (Xθ−Y)+αθ) 其中β为步长。 如果用最小二乘法,则θ的结果是: θ=(X T X+αE)−1X T Y 其中E为单位矩阵。 Ridge回归在不抛弃任何一个变量的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但这会使得模型的变量特别多,模型解释性差。有没有折中一点的办法呢?即又可以防止过拟合,同时克服Ridge回归模型变量多的缺点呢?有,这就是下面说的Lasso回归。 Lasso回归概述 Lasso回归有时也叫做线性回归的L1正则化,和Ridge回归的主要区别就是在正则化项,Ridge回归用的是L2正则化,而Lasso回归用的是L1正则化。Lasso回归的损失函数表达式如下: J(θ)=1/2n(Xθ−Y) T (Xθ−Y)+α||θ|| 1 其中n为样本个数

岭回归、lasso

夙愿已清 提交于 2019-11-28 11:45:50
参考:https://blog.csdn.net/Byron309/article/details/77716127 ---- https://blog.csdn.net/xbinworld/article/details/44276389 参考:https://blog.csdn.net/bitcarmanlee/article/details/51589143 1、首先介绍线性回归模型(多元)原理,模型可以表示为: 损失函数可以表示为: 这里的 1/2m 主要还是出于方便计算的考虑,在求解最小二乘的时并不考虑在内; 最小二乘法可得到最优解: 监督学习 有2大基本策略,经验风险最小化和结构风险最小化; 经验风险最小化策略为求解最优化问题, 线性回归中的求解损失函数最小化 问题即经验风险最小化,经验风险最小化定义: 求解最优化问题可以转化为: 结构化风险最小化是为了防止过拟合现象提出的策略;结构风险最小化等价于正则化,在经验风险上加上表示模型复杂度的正则化项,定义如下: 这里讨论的岭回归和Lasso,也就是结构风险最小化的思想,在线性回归的基础上,加上模型复杂度的约束。 其中几种范数(norm)的定义如下: 岭回归的损失函数表示: 观察这条式子很容易的可以联想到正则化项为L2范数,也即L2范数+损失函数其实也可以称为岭回归; 最小二乘求解参数: Lasso的损失函数表示:

线性回归模型的sklearn实现

本秂侑毒 提交于 2019-11-28 04:04:54
关于线性回归模型的知识总结,请参见 这里 。此处主要介绍线性模型的相关算法在sklearn中的实现: 一、线性回归(最小二乘法) from sklearn.linear_model import LinearRegression X, y = mglearn.datasets.make_wave(n_samples=60)#导入数据 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) lr = LinearRegression().fit(X_train, y_train)#拟合模型 print("lr.coef_: {}".format(lr.coef_))#输出系数(斜率) print("lr.intercept_: {}".format(lr.intercept_))#输出截距(偏移量) #准确率(模型效果) print("Training set score: {:.2f}".format(lr.score(X_train, y_train))) print("Test set score: {:.2f}".format(lr.score(X_test, y_test))) #用训练好的模型求新数据的值 lr.predict(X_test) 二、岭回归

LASSO回归和Ridge回归

淺唱寂寞╮ 提交于 2019-11-28 03:46:57
在 线性回归 中讲述了原理,为了防止过拟合经常会加入正则化项。常用的正则化有L1正则化和L2正则化。 1.LASSO回归 加入L1正则化项的线性回归就叫LASSO回归。L1正则化项即是参数的L1范数,通俗点说,就是参数向量各个分量取绝对值的加和,即,对于 \(\theta=(\theta_0, \theta_1, \cdots, \theta_n)^T\) 参数向量,L1正则化项为: \[ \left \| \theta \right \|_1 = \sum_{j=0}^n | \theta_j | \] 通常会加入一个系数 \(\lambda\) 来调节正则化项的权重,因此LASSO回归的目标函数(损失函数)为: \[ J(\theta) = \frac{1}{2}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=0}^n | \theta_j | = \frac{1}{2}\left(X\theta-Y\right)^T\left(X\theta-Y\right) + \lambda\left \| \theta \right \|_1 \] LASSOS回归可以使得一些特征的系数为零(即某些 \(\theta_j\) 为零),即得到稀疏解。 由于 \(|\theta_j|\) 求不了导,所以在实际应用中,可以寻求近似解

scikit-learn学习笔记

瘦欲@ 提交于 2019-11-27 21:12:13
在scikit-learn中,LinearRegression,Lasso,Ridge,ElasticNet都是回归模型。 而LogisticRegression是分类模型。 Lasso是LinearRegression带有L1正则项, Ridge是LinearRegression有L2正则项, ElasticNet是LinearRegression同时有L1和L2正则项。 而LogisticRegression可以通过参数设置使用L1或者L2正则项。 来源: CSDN 作者: 新技能get 链接: https://blog.csdn.net/m0_37778634/article/details/85064747

机器学习的模型泛化

纵然是瞬间 提交于 2019-11-27 04:57:29
机器学习的模型泛化 1、机器学习的 模型误差主要含有三个方面的误差:模型偏差、模型方差以及不可避免的误差。 2、对于机器学习训练模型的 偏差主要因为对于问题本身的假设不对 ,比如非线性误差假设为线性误差进行训练和预测,算法层面上 欠拟合是产生较大偏差的主要原因 。另外主要来自于特征参量与最终结果的相关性,如果相关性很低或者高度不相关的话也会导致较大的偏差。 3、对于机器学习模型的 方差主要是来自于数据的扰动以及模型的过于复杂,在算法层面上过拟合是引起模型方差较大的主要原因 ,因为过拟合会导致整体模型的复杂度太高,从而引起方差很大。 4、对于不同的算法其存在误差种类是不同的,有些算法是天生的高方差算法,比如KNN算法, 非参数算法一般都是高方差算法 ,因为它不对问题的前提进行假设。有些算法天生是高偏差的算法,比如线性回归算法, 参数学习算法一般都属于高偏差算法 , 因为它对数据具有极强的假设。 5、大多数算法都可以通过调节其中的超参数调整模型的方差和偏差,并且 一般情况下模型的方差和偏差是矛盾的 ,降低偏差,会增大方差,降低方差,也会增大偏差。 6、机器学习的主要挑战主要来自于方差,当然这样的结论主要局限于算法层面, 解决机器学习算法模型的方差 的主要方式有以下几个方面: (1)降低模型的复杂度; (2)减小数据的维度:PCA算法进行降维和降噪; (3)增加数据的样本数; (4

5.多项式回归与模型泛化

 ̄綄美尐妖づ 提交于 2019-11-27 03:59:11
(一)什么是多项式回归 还记得线性回归法吗?线性回归法有一个很大的局限性,那就是需要数据是有一定的线性关系的,但是现实中的很多数据是没有线性关系的。多项式就是用来解决这个问题的,可以处理非线性数据 在线性回归中,我们是假设数据具有线性关系的,因此我们在简单线性回归中,将直线的方向设置为y=ax+b的形式,那么我们求出a和b即可。 而对于有些数据,我们虽然也可以使用线性回归,但是显然具有更加强的非线性的关系,换句话说,如果我们用一个二次曲线来拟合这些点,效果会更好。因此函数就变成了了y=ax^2+bx+c,我们求出a、b、c即可。但是本质上,和线性回归一样,目前都是只有一个特征,只不过我们为样本多添加了一些特征,这些特征是原来的多项式项。求出了对原来的特征而言,一个非线性的曲线。 生成数据集 import numpy as np import matplotlib.pyplot as plt # 生成一百个样本,每个样本只有一个特征 X = np.random.uniform(-3, 3, size=(100, 1)) y = 0.5 * X ** 2 + X + 2 + np.random.normal(0, 1, size=(100,1)) plt.scatter(X, y) plt.show() 可以看到数据大概满足一条二次曲线,但是我们使用线性回归法来拟合一下 from

线性回归算法解析

穿精又带淫゛_ 提交于 2019-11-26 15:33:58
线性回归算法解析 概念 模型函数 损失函数 求取损失函数最小化的算法 线性回归的推广:多项式回归 线性回归的推广:广义线性回归 线性回归的正则化 Sklearn中工具包使用场景 概念 模型函数 损失函数 求取损失函数最小化的算法 线性回归的推广:多项式回归 线性回归的推广:广义线性回归 线性回归的正则化 Sklearn中工具包使用场景 LinearRegression 一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。 Ridge 一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用Ridge类。但是这个类最大的缺点是每次我们要自己指定一个超参数α,然后自己评估α的好坏,比较麻烦,一般我都用下一节讲到的RidgeCV类来跑Ridge回归,不推荐直接用这个Ridge类,除非你只是为了学习Ridge回归。 RidgeCV 一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用RidgeCV类。不是为了学习的话就不用Ridge类。为什么这里只是考虑用RidgeCV类呢?因为线性回归正则化有很多的变种,Ridge只是其中的一种

高维数据Lasso思路

前提是你 提交于 2019-11-26 10:29:26
海量数据的特征工程中, 如果数据特征维度达到几千乃至上万 常规的lasso很容易失效 这里介绍几种泛义lasso,是在实际数据处理中常用的 迭代与分块思路/分组的使用(有兴趣的同学可自行实践一下) 1. 迭代lasso 2. 分组/聚类lasso 3. 分组与降维结合lasso 另外在<<高维数据统计方法、理论与应用>> 一书中介绍了很多lasso方法,其中有广义group lasso的方法也很值得借鉴 来源: https://www.cnblogs.com/kdyi/p/11933483.html