【发布时间】:2019-12-24 11:05:03
【问题描述】:
我在 Macbook 上的 MATLAB 2019a 中使用 glmnet 进行逻辑回归。
算法:
log(pi/(1-pi))=b0+X*b
pi=P(Y=2|X_i)=1-P(Y=1|X_i)
代码:
Y = [2;1;2;1;2;1;2;1;1;2];
X = [0.1451 0.1176 0.0872 0.0544 0.0197 -0.0164 -0.0533 -0.0907;
0.5096 0.7240 0.9038 1.0515 1.1694 1.2599 1.3253 1.3681;
-0.0593 -0.1683 -0.2738 -0.3754 -0.4730 -0.5660 -0.6543 -0.7376;
-1.0128 -0.9539 -0.9004 -0.8522 -0.8089 -0.7701 -0.7355 -0.7047;
0.7533 0.5640 0.4054 0.2752 0.1709 0.0900 0.0302 -0.0109;
0.2014 0.2595 0.3070 0.3444 0.3724 0.3918 0.4032 0.4074;
0.9174 0.8706 0.8260 0.7834 0.7423 0.7025 0.6636 0.6253;
0.7643 0.6115 0.4789 0.3653 0.2693 0.1897 0.1252 0.0744;
-0.3299 -0.5078 -0.6507 -0.7615 -0.8430 -0.8981 -0.9294 -0.9399;
-0.2141 -0.1472 -0.0818 -0.0179 0.0443 0.1045 0.1626 0.2183];
lambda=0.5;
family='binomial';
options.weights = [];
options.alpha = 1;
options.nlambda = 100;
options.lambda_min = 0;
options.lambda = lambda;
options.standardize = false;%true
options.thresh = 1E-4;
options.dfmax = 0;
options.pmax = 0;
options.exclude = [];
options.penalty_factor = [];
options.maxit = 100;
options.HessianExact = false;
options.type = 'naive';
fit = glmnet(X,Y,family,options);
结果:
a0 0
label [1;2]
beta [0;0;0;0;0;0;0;0]
dev 0
nulldev 13.8629
df 0
lambda 0.5000
npasses 1
jerr 0
dim [8,1]
class 'lognet'
无论我如何更改输入和输出,该函数总是返回全为 0 的系数。我仔细选择了这些选项,所以我真的很困惑它是如何得出这个结果的。
是因为我选取的数据特殊还是参数不对?
【问题讨论】:
-
使用默认选项时会发生什么?
-
@Irreducible 如果我简单地运行
fit = glmnet(X,Y,family);,我会得到一个 8*76 的暗色 beta,而不是 8*1。但是,就我而言,结果应该是一个 8*1 的向量,适用于所有 Xi。 -
正如文档所说,beta 具有以下暗淡:
nvars x length(lambda),因此在默认情况下它似乎是 76。更改 lambda 时,您会看到对于非常小的值,beta 的结果会发生变化. -
@Irreducible 对不起,我听不懂。即使在默认情况下,我认为它应该是 8 x 100,而不是 8 x 76?顺便说一句,如果我只是将我的原始代码从
lambda=0.5更改为lambda=[0.4,0.5,0.6],beta 将更改为 8 x 3 暗淡但也全为零...谢谢 -
是的,这就是重点。 lambda
标签: matlab logistic-regression glmnet