首页 > 解决方案 > 基于 glmnet 包最能区分组的变量

问题描述

我最终想找到一组使用弹性网回归方法最能区分三组(低、中、高)的蛋白质。

有可重现的示例代码:

tempcv <- cv.glmnet(x=as.matrix(iris[,-5]), y=iris[,5], family="multinomial", 
                    nfolds=20, alpha=0.5)
coefsMin <- coef(tempcv, s="lambda.min")

然后我得到的是以下内容:

$setosa
5 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept)  15.119192
Sepal.Length -1.897589
Sepal.Width   5.455627
Petal.Length -2.807969
Petal.Width  -5.942061

$versicolor
5 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept)   4.795799
Sepal.Length  1.726752
Sepal.Width   .       
Petal.Length -1.160588
Petal.Width  -1.978123

$virginica
5 x 1 sparse Matrix of class "dgCMatrix"
                      1
(Intercept)  -19.914991
Sepal.Length   .       
Sepal.Width   -3.925362
Petal.Length   4.536932
Petal.Width    9.236506

在这种情况下,使用每个系数的绝对值,我可以将这个结果解释如下吗?
最能区分“setosa”与其他两组(“versicolor”和“virginica”)的两个变量是 Sepal.Width (5.46) 和 Petal.Width (-5.94)。

如果这是错误的,那么我该如何选择一些最能区分群体的变量/特征?

非常感谢!!!

标签: rglmnetlasso-regression

解决方案


对于 glmnet,您获得的系数与您的输入具有相同的比例,来自小插图

请注意,对于 family = "gaussian",glmnet 在计算其 lambda 序列之前标准化为具有单位方差(然后对结果系数进行非标准化)。

在您的示例中,自变量未按比例缩放。因此,系数的大小将取决于自变量的规模。例如, Sepal.Width每个单位的均值系数Sepal.Width会使对数几率增加 5.46。但是你可以看到它们的取值范围非常不同:

apply(iris[,1:4],2,range)
     Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]          4.3         2.0          1.0         0.1
[2,]          7.9         4.4          6.9         2.5

只有在应用套索之前缩放自变量时,您的假设才成立。

一种选择是使用vip来推断变量的重要性,您可以查看更多示例。


推荐阅读