如何解决基于 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
只有在应用套索之前缩放自变量时,您的假设才成立。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。