微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于 glmnet 包最好区分组的变量

如何解决基于 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)。 em>

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

非常感谢!!!

解决方法

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

注意,对于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 来推断变量重要性,更多示例可以参见 this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。