lassoglm
广义线性模型的套索或弹性网正则化
语法
描述
例子
使用套索正则化去除冗余预测器
构造具有冗余预测因子的数据集,并使用lassoglm
.
创建一个随机矩阵X
有100个观测值和10个预测因子。创建正态分布响应y
只使用四个预测器和少量噪声。
rng默认的X = randn(100,10);Weights = [0.6;0.5;0.7;0.4];y = X(:,[2 4 5 7])*weights + randn(100,1)*0.1;%小的附加噪音
执行套索正则化。
B = lassoglm(X,y);
求出第75项的系数向量λ
价值B
.
B (:, 75)
ans =10×10 0.5431 0 0.3944 0.6173 0 0.3473 0 0 0
lassoglm
标识并删除冗余的预测器。
广义线性模型的交叉验证套索正则化
利用泊松模型构造数据,并利用lassoglm
.
创建具有20个预测器的数据。仅使用三个预测因子和一个常数创建一个泊松响应变量。
rng默认的%用于重现性X = randn(100,20);Weights = [.4;.2;.3];mu = exp(X(:,[5 10 15])*weights + 1);Y = poissrnd(mu);
构建数据泊松回归模型的交叉验证套索正则化。
[B,FitInfo] = lassoglm(X,y,)“泊松”,“简历”10);
检查交叉验证图,看看效果λ
正则化参数。
lassoPlot (B FitInfo“plottype”,“简历”);传奇(“显示”)%显示图例
绿色的圆圈和虚线定位λ
最小的交叉验证错误。蓝色圆圈和虚线定位的是交叉验证误差最小加一个标准差的点。
求两个确定点对应的非零模型系数。
idxLambdaMinDeviance = FitInfo.IndexMinDeviance;mincoefs = find(B(:,idxLambdaMinDeviance))
mincoefs =7×13 5 6 10 11 15 16
idxLambda1SE = FitInfo.Index1SE;min1coefs = find(B(:,idxLambda1SE))
min1coefs =3×15 10 15
来自最小加1标准误差点的系数正是用来创建数据的系数。
利用套索正则化预测值
预测学生在上次考试中是否得到B或以上lassoglm
.
加载examgrades
数据集。将上次考试成绩转换为一个逻辑向量,其中1
代表成绩达80分或以上及0
表示等级低于80。
负载examgradesX =等级(:,1:4);Y = grades(:,5);yBinom = (y>=80);
将数据划分为训练集和测试集。
rng默认的为可重复性设置种子c = cvpartition(yBinom,“坚持”, 0.3);idxTrain = training(c,1);idxTest = ~idxTrain;XTrain = X(idxTrain,:);yTrain = yBinom(idxTrain);XTest = X(idxTest,:);yTest = yBinom(idxTest);
对训练数据进行3倍交叉验证的广义线性模型回归进行套索正则化。假设中的值y
是二项分布的。选择对应的模型系数λ
期望偏差最小。
[B,FitInfo] = lassoglm(XTrain,yTrain,)“二”,“简历”3);idxLambdaMinDeviance = FitInfo.IndexMinDeviance;B0 = FitInfo.Intercept(idxLambdaMinDeviance);cof = [B0;B (:, idxLambdaMinDeviance)]
系数=5×1-21.1911 0.0235 0.0670 0.0693 0.0949
使用上一步中找到的模型系数预测测试数据的考试成绩。为二项式响应指定链接函数分对数的
.将预测值转换为逻辑向量。
yhat = glmval(coef,XTest,分对数的);yhatBinom = (yhat>=0.5);
使用混淆矩阵确定预测的准确性。
c = confusichart (yTest,yhatBinom);
该函数正确预测了31个考试成绩。然而,该函数错误地预测了一个学生得到B或以上4
学生的成绩在B以下。
使用相关矩阵进行拟合lassoglm
创建一个矩阵X
的N
p
-维法变量,其中N
很大,而且p
= 1000。创建响应向量y
从模型中y = X* +噪声
,在那里β
是具有50%非零值的系数向量。
rng默认的%用于重现性N = 1e4;%样本数量P = 1e3;%特性数量X = randn(N,p);β = 1 + 3*rand(p,1);乘系数Activep = randperm(p,p/2);% 50%非零系数y = X(:,activep)*beta(activep) + randn(N,1)*0.1;%增加噪音
构造套索拟合而不使用协方差矩阵。为创建计时。
B = lassoglm(X,y,“正常”, UseCovariance = false);为可靠的计时数据预热套索。tic B = lassoglm(X,y,“正常”, UseCovariance = false);Timefalse = toc
Timefalse = 3.6794
利用协方差矩阵构造套索拟合。为创建计时。
B2 = lassoglm(X,y,“正常”, UseCovariance = true);为可靠的计时数据预热套索。tic B2 = lassoglm(X,y,“正常”, UseCovariance = true);Timetrue = toc
Timetrue = 0.8574
有协方差矩阵的拟合时间比没有协方差矩阵的拟合时间短。查看使用协方差矩阵得到的加速因子。
Speedup = timefalse/timetrue
加速= 4.2911
检查返回的系数B
而且B2
是相似的。
规范(B-B2) /规范(B)
Ans = 4.8056e-16
结果几乎是一样的。
输入参数
X
- - - - - -预测数据
数字矩阵
预测数据,指定为数值矩阵。每一行代表一个观察结果,每列代表一个预测变量。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:lassoglm (X, y,“泊松”,“阿尔法”,0.5)
假定响应值为泊松分布,进行弹性网正则化。的“阿尔法”,0.5
名称-值对参数设置用于弹性网优化的参数。
α
- - - - - -套索和脊优化的权重
1
(默认)|积极的标量
套索重量(l1)与脊(l2)优化,指定为逗号分隔的对,由“α”
在区间内是一个正的标量(0,1)
.的值= 1
表示套索回归,α
接近0
逼近脊回归,其他值表示弹性网优化。看到弹性网.
例子:“阿尔法”,0.75
数据类型:单
|双
CacheSize
- - - - - -协方差矩阵的大小,以兆字节为单位
1000
(默认)|积极的标量|“最大”
协方差矩阵的大小(以兆字节为单位),指定为正标量或“最大”
.的lassoglm
函数可以使用协方差矩阵进行拟合UseCovariance
参数是真正的
或“汽车”
.
如果UseCovariance
是真正的
或“汽车”
而且CacheSize
是“最大”
,lassoglm
可以尝试分配一个超过可用内存的协方差矩阵。在本例中,是MATLAB®发出错误。
例子:“CacheSize”、“最大”
数据类型:双
|字符
|字符串
简历
- - - - - -偏差估计交叉验证规范
“resubstitution”
(默认)|正整数标量|cvpartition
对象
用于估计偏差的交叉验证规范,指定为逗号分隔的对,由“简历”
和以下其中之一:
正标量整数
K
- - - - - -lassoglm
使用K
倍交叉验证。cvpartition
对象本量利
- - - - - -lassoglm
使用交叉验证方法表示为本量利
.您不能使用“leaveout”
分区与lassoglm
.
例子:“简历”,10
DFmax
- - - - - -非零系数的最大数目
正
(默认)|正整数标量
LambdaRatio
- - - - - -最小与最大之比λ
值
1的军医
(默认)|积极的标量
最小值与最大值之比λ
值,当您不提供λ
,指定为逗号分隔的对,由“LambdaRatio”
一个正的标量。
如果你设置LambdaRatio
= 0,则lassoglm
生成一个默认序列λ
值并将最小的值替换为0
.
例子:依照“LambdaRatio”,1
数据类型:单
|双
链接
- - - - - -响应平均值与线性预测器之间的映射
“comploglog”
|“身份”
|“日志”
|分对数的
|“重对数”
|……
均值之间的映射µ响应和线性预测器Xb,指定为逗号分隔的对,由“链接”
和这个表中的一个值。
价值 | 描述 |
---|---|
“comploglog” |
日志(日志((1 -µ))) =Xb |
|
µ=Xb |
|
日志(µ) =Xb |
|
日志(µ/ (1 -µ)) =Xb |
|
日志(日志(µ)) =Xb |
“probit” |
Φ1(µ) =Xb,其中Φ为正态(高斯)累积分布函数 |
“互惠” ,默认为分发版“伽马” |
µ1=Xb |
|
µp=Xb |
窗体的单元格数组 |
用户指定的链接函数(参见自定义链路功能) |
例子:“链接”、“概率单位”
数据类型:字符
|字符串
|单
|双
|细胞
MCReps
- - - - - -交叉验证的蒙特卡罗重复次数
1
(默认)|正整数标量
用于交叉验证的蒙特卡罗重复次数,指定为逗号分隔的对,由“MCReps”
和一个正整数标量。
如果
简历
是“resubstitution”
或者一个cvpartition
类型的“resubstitution”
,然后MCReps
必须1
.如果
简历
是一个cvpartition
类型的“坚持”
,然后MCReps
必须大于1
.
例子:“MCReps”,2
数据类型:单
|双
抵消
- - - - - -附加预测变量
数值向量
附加的预测变量,指定为逗号分隔的对,由“抵消”
和一个具有相同行数的数字向量X
.的lassoglm
函数保持系数的值抵消
固定在1.0
.
数据类型:单
|双
选项
- - - - - -选项可以并行交叉验证并指定随机流
结构
选项并行交叉验证并指定随机流,指定为逗号分隔的对,由“选项”
还有一个结构。此选项需要并行计算工具箱™。
创建选项
结构statset
.选项字段是:
UseParallel
—设置为真正的
并行计算并行计算默认为假
.UseSubstreams
—设置为真正的
并行计算以可重复的方式并行计算为了再现性,设置流
转换为允许子流的类型:“mlfg6331_64”
或“mrg32k3a”
.默认为假
.流
——一个RandStream
对象或包含一个此类对象的单元格数组。如果不指定流
,然后lassoglm
使用默认流。
例子:“选项”,statset (UseParallel,真的)
数据类型:结构体
PredictorNames
- - - - - -预测变量名称
{}
(默认)|字符串数组|字符向量的单元格数组
预测变量的名称,按它们出现的顺序排列X
,指定为逗号分隔的对,由“PredictorNames”
以及字符向量的字符串数组或单元格数组。
例子:PredictorNames,{‘高’,‘重’,‘年龄’}
数据类型:字符串
|细胞
RelTol
- - - - - -坐标下降算法的收敛阈值
1的军医
(默认)|积极的标量
坐标下降算法的收敛阈值[3],指定为逗号分隔的对,由“RelTol”
一个正的标量。当系数向量的连续估计值不同时,算法终止l2Norm的相对量小于RelTol
.
例子:“RelTol”,2 e - 3
数据类型:单
|双
标准化
- - - - - -标志,用于在拟合模型之前标准化预测器数据
真正的
(默认)|假
标志,用于标准化预测器数据X
在拟合模型之前,指定为逗号分隔的对,由“标准化”
,要么真正的
或假
.如果标准化
是真正的
,然后X
数据被缩放到均值为0,方差为1。标准化
影响正则化是应用于标准化标度还是原始标度上的系数。结果总是在原始数据尺度上呈现。
例子:“标准化”,假的
数据类型:逻辑
UseCovariance
- - - - - -提示使用协方差矩阵进行拟合
“汽车”
(默认)|逻辑标量
表示使用协方差矩阵进行拟合,具体为“汽车”
或者一个逻辑标量。
使用协方差矩阵进行拟合可能比不使用协方差矩阵更快,特别是对于正态分布响应,但可能需要更多的内存。看到使用相关矩阵进行套索拟合.速度的增加会对数值稳定性产生负面影响。详情请参见坐标下降算法.
例子:“UseCovariance”,真的
数据类型:逻辑
|字符
|字符串
权重
- - - - - -观察权重
1 / n *的(n, 1)
(默认)|负的向量
观察权值,用逗号分隔的对表示“重量”
一个非负的向量。权重
长度n,在那里n行数是多少X
.至少有两个值必须为正。
数据类型:单
|双
输出参数
FitInfo
-模型拟合信息
结构
拟合广义线性模型的信息,返回为具有本表所述字段的结构。
场FitInfo |
描述 |
---|---|
拦截 |
截距项β0对于每个线性模型,a1 ——- - - - - -l向量 |
λ |
Lambda参数按升序排列,a1 ——- - - - - -l向量 |
α |
的价值α 参数,标量 |
DF |
非零系数的个数B 的每一个值λ ,一个1 ——- - - - - -l向量 |
异常 |
的各值对拟合模型的偏差 如果模型是交叉验证的,则 |
PredictorNames |
的价值PredictorNames 参数,存储为字符向量的单元格数组 |
UseCovariance |
表示是否使用协方差矩阵进行拟合的逻辑值。如果计算并使用协方差,则该字段为真正的 .否则,该字段为假 . |
如果你设置简历
进行交叉验证的名称值对参数FitInfo
结构包含这些附加字段。
场FitInfo |
描述 |
---|---|
SE |
的标准误差异常 为每一个λ ,交叉验证时计算,a1 ——- - - - - -l向量 |
LambdaMinDeviance |
λ 通过交叉验证计算,期望偏差最小的值为标量 |
Lambda1SE |
最大λ 重视这样的东西异常 是否在最小值的一个标准误差范围内,一个标量 |
IndexMinDeviance |
指数λ 值为LambdaMinDeviance ,一个标量 |
Index1SE |
指数λ 值为Lambda1SE ,一个标量 |
更多关于
链接功能
链接函数f(μ)用均值映射一个分布μ到一个有数据的线性模型X系数矢量b使用公式
f(μ) =Xb.
你可以找到连杆函数的公式链接
名称-值对参数描述。该表列出了通常用于每个发行版的链接函数。
分配家庭 | 缺省链路功能 | 其他典型Link功能 |
---|---|---|
“正常” |
“身份” |
|
“二” |
分对数的 |
“comploglog” ,“重对数” ,“probit” |
“泊松” |
“日志” |
|
“伽马” |
“互惠” |
|
逆高斯分布的 |
2 |
套索
的非负值λ,lassoglm
解决问题
该方程中的函数Deviance是利用截距拟合模型对响应的偏差β0预测系数β.越轨的公式取决于
分配
提供给的参数lassoglm
.最小化λ-惩罚偏差相当于最大化λ处罚loglikelihood。N是观察数。
λ的值是否对应一个非负正则化参数
λ
.的参数β0而且β是标量和长度向量吗p,分别。
作为λ的非零分量的个数增加β减少。
套索问题涉及到l1规范的β,与弹性网算法进行了对比。
弹性网
算法
坐标下降算法
lassoglm
符合许多价值观λ同时通过一个叫做坐标下降,以弗里德曼、蒂布希拉尼和哈斯蒂为基础[3].根据拟合是否使用协方差矩阵,该过程有两个主要代码路径。方法可以影响此选择UseCovariance
名称-值参数。
当lassoglm
使用协方差矩阵进行拟合N
数据点和D
预测器,拟合有一个粗略的计算复杂度D * D
.在没有协方差矩阵的情况下,计算复杂度大致为N * D
.一般来说,使用协方差矩阵会更快N > d
,默认为“汽车”
设置UseCovariance
Argument做出了这个选择。使用协方差矩阵的原因lassoglm
减去比其他方式更大的数字,这可能在数字上不太稳定。有关算法差异的详细信息,请参见[3].关于时间和精度差异的比较,请参见使用相关矩阵进行套索拟合.
参考文献
[1] Tibshirani, R. <回归收缩和通过套索选择>。皇家统计学会杂志。B辑,1996年第1期,第58卷,第267-288页。
[2]邹,H.和T.哈斯蒂。"通过弹性网的正则化和变量选择"皇家统计学会杂志。B辑,2005年第2期,第67卷,第301-320页。
[3]弗里德曼,J., R.蒂布希拉尼,T.哈斯蒂。广义线性模型通过坐标下降的正则化路径。统计软件杂志。2010年第1期第33卷。https://www.jstatsoft.org/v33/i01
[4]哈斯蒂,T., R.蒂布希拉尼,J.弗里德曼。统计学习的要素。第二版。纽约:施普林格,2008。
[5]多布森。广义线性模型导论。第二版。纽约:查普曼和霍尔/CRC出版社,2002年。
[6] McCullagh, P.和J. A. Nelder。广义线性模型。第二版。纽约:查普曼和霍尔/CRC出版社,1989年。
[7]科莱特D。对二进制数据建模。第二版。纽约:查普曼和霍尔/CRC出版社,2003年。
扩展功能
自动平行支撑万博1manbetx
通过使用并行计算工具箱™自动并行运行计算来加速代码。
若要并行运行,请指定“选项”
参数中的名称-值参数,并设置“UseParallel”
选项结构的字段真正的
使用statset
.
例如:“选项”,statset (UseParallel,真的)
有关并行计算的更多信息,请参见运行MATLAB函数与自动并行支持万博1manbetx(并行计算工具箱).
版本历史
在R2012a中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。