经管之家App
让优质教育人人可得
立即打开
全部版块
我的主页
›
论坛
›
数据科学与人工智能
›
数据分析与数据科学
›
R语言论坛
用glmnet包实施套索算法(LASSO)(转)
楼主
admonzhang
13393
15
收藏
2013-04-26
当我们使用数据训练分类器的时候,很重要的一点就是要在过度拟合与拟合不足之间达成一个平衡。防止过度拟合的一种方法就是对模型的复杂度进行约束。模型中用到解释变量的个数是模型复杂度的一种体现。控制解释变量个数有很多方法,例如
变量选择(feature selection)
,即用filter或wrapper方法提取解释变量的最佳子集。或是进行
变量提取(feature structure)
,即将原始变量进行某种映射或转换,如主成分方法和因子分析。变量选择的方法是比较“硬”的方法,变量要么进入模型,要么不进入模型,只有0-1两种选择。但也有“软”的方法,也就是
Regularization
类方法,例如
岭回归(Ridge Regression)
和
套索方法(LASSO:least absolute shrinkage and selection operator)
。
这两种方法的共同点在于,将解释变量的系数加入到Cost Function中,并对其进行最小化,本质上是对过多的参数实施了惩罚。而两种方法的区别在于惩罚函数不同。但这种微小的区别却使LASSO有很多优良的特质(可以同时选择和缩减参数)。下面的公式就是在线性模型中两种方法所对应的目标函数:
[size=1.05em]
[size=1.05em]
公式中的lambda是重要的设置参数,它控制了惩罚的严厉程度,如果设置得过大,那么最后的模型参数均将趋于0,形成拟合不足。如果设置得过小,又会形成拟合过度。所以lambda的取值一般需要通过交叉检验来确定。
在R语言中可以使用
glmnet包
来实施套索算法。我们采用的数据集是Machine Learning公开课中第七课的
一个算例
。先来看看这个样本数据的散点图。下图显示有两个类别等待我们来区分。显然其决策边界是非线性的,所以如果要用
Logistic Regression
来作分类器的话,解释变量需要是多项式形式。但这里存在一个问题,我们应该用几阶的多项式呢?如果阶数过高,模型变量过多,会存在过度拟合,而反之阶数过少,又会存在拟合不足。所以这里我们用LASSO方法来建立Logistic回归分类器。
[size=1.05em]
分析步骤如下:
根据算例要求,先生成有六阶多项式的自变量,这样一共有28个自变量;
用glmnet包中的cv.glmnet函数建模,该函数自带交叉检验功能;
根据上面的结果绘制CV图如下,从中选择最佳lambda值。
[size=1.05em]
cv.glmnet
函数利用交叉检验,分别用不同的lambda值来观察模型误差。上图横轴是lambda值的对数,纵轴是模型误差。从上面的图可以看到,最佳的lambda取值就是在红色曲线的最低点处,对应着变量个数是11个。它右侧的另一条虚线是在其一倍SE内的更简洁的模型(变量个数为9)。由于这两个lambda对应的模型误差变化不大,而我们更偏好于简洁的模型,选择对应的lambda值为0.025。
在使用cv.glmnet函数选择lambda值之后,我们没有必要去运行glmnet函数,直接从结果中就可以提取最终模型(9个变量)并获得参数系数。为了利于比较我们还提取了原始模型(28个变量)的参数系数。
最后我们要在原来的散点图上画出两条决策边界,一条是根据LASSO方法得到的9变量模型,下图中紫色曲线即是它决策边界,决策边界比较平滑,具备很好的泛化能力。另一条是28个变量的原始模型。 蓝色曲线即是它的决策边界,它为了拟合个别样本,显得凸凹不平。
[size=1.05em]
如果你的数据变异较大,那么在做LASSO之前最好进行数据标准化处理。LASSO的进一步扩展是和岭回归相结合,形成Elastic Net方法。glmnet包也可以实施这种算法。
参考资料:
《The Elements of Statistical Learning》
《Machine Learning for Hackers》
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
全部回复
沙发
van11
2013-5-2 14:49:22
顶!
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
藤椅
jgchen1966
2013-5-25 18:47:49
谢谢分享
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
板凳
sunopeesunopee
2013-5-26 06:07:33
顶, 十分感谢
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
报纸
xkz8866
2014-9-11 18:43:16
图片不能看到吗?各位大神,我是小白
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
地板
xkz8866
2014-9-11 18:44:03
现在正在学这方面。急需这样好的资料,谢谢分享
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
点击查看更多内容…
7楼
xkz8866
2014-11-1 10:28:40
想问一下楼主glmnet包中用交叉验证跑数据时返回的cvm值是均方误差吗
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
8楼
lhlsunday
2014-11-11 14:02:15
希望多多共享这方面应用及其算法实现的实例
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
9楼
良晨美景2012
2015-2-6 12:06:44
谢谢分享!
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
10楼
hsvian
2015-3-2 19:38:45
图片怎么看不到呢
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
11楼
viviyeahyeah
2016-9-3 08:39:15
谢谢楼主分享。
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
12楼
jcx350
2018-3-26 18:04:58
lambda值为0.025这个怎确定的?
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
13楼
dufehtt
2018-9-9 09:58:24
请问用R语言如何直接生成6阶多项式?
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
14楼
appliedstatist
2020-1-20 13:01:11
请问可否分享下代码
谢谢
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
15楼
护花化
2020-11-19 16:19:42
谢谢分享
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
16楼
护花化
2020-11-19 16:20:54
楼主,有一个问题,我看做交叉验证的好多都把数据分为训练集和验证集,这个是必须分的吗?
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
相关推荐
求助,关于glmnet提示错误!
glmnet 解Lasso的问题
glmnet计算决定系数
cv.glmnet 逻辑下标太长,求大神解答,在线等,急
关于glmnet包里设置观察值权重的问题
GLMNET结果如何保存起来供下次分析用
glmnet包程序问题,lasso算法
用glmnet包做lasso回归,做预测时关于type=“link”的疑问
glmnet lasso 如何增加滞后项
R软件glmnet包lasso-cox
栏目导航
R语言论坛
经管在职研
Stata专版
行业分析报告
比特币、区块链与元宇宙
休闲灌水
热门文章
2026“课题申报”抢跑号角的已吹响!国社科 ...
CDA 认证考试大纲 2025 重磅更新:一二级考 ...
中国移动:智能体互联网技术白皮书2025
国家级都市圈谁在领跑:2025华高莱斯产城瞭 ...
您提出了一个足以获得诺贝尔奖的核心概念— ...
2012-2024年上市公司工业机器人渗透率数据集 ...
现制饮品新品策略研究报告2025
JOBS海归:2025海外归国留学生秋季就业发展 ...
达富发投资关于国统股份行情数据操作分析与 ...
达富发投资关于鑫铂股份行情数据操作分析与 ...
推荐文章
10月重磅来袭|《打造Coze/Dify专属学术智能 ...
高校老师和学生都在偷偷上的智能体课,到底 ...
最快1年拿证,学费不足5W!热门美国人工智能 ...
关于如何利用文献的若干建议
关于学术研究和论文发表的一些建议
关于科研中如何学习基础知识的一些建议 (一 ...
一个自编的经济学建模小案例 --写给授课本科 ...
AI智能体赋能教学改革: 全国AI教育教学应用 ...
2025中国AIoT产业全景图谱报告-406页
关于文献求助的一些建议
说点什么
分享
微信
QQ空间
QQ
微博
扫码加好友,拉您进群
各岗位、行业、专业交流群