0

我正在尝试使用 penalizedLDA 包来运行惩罚线性判别分析,以选择“最有意义”的变量。我在此处和其他网站上搜索了有关访问惩罚模型输出的帮助,但无济于事。

我的数据包括 400 个变量和 44 个组。到目前为止我使用的代码和结果:

yy.m<-as.matrix(yy)   #Factors/groups
xx.m<-as.matrix(xx)   #Variables

cv.out<-PenalizedLDA.cv(xx.m,yy.m,type="standard") 
  ## aplly the penalty
out <- PenalizedLDA(xx.m,yy.m,lambda=cv.out$bestlambda,K=cv.out$bestK)

也从分析中获得输出的结构:

> str(out)
List of 10
$ discrim: num [1:401, 1:4] -0.0234 -0.0219 -0.0189 -0.0143 -0.0102 ...
$ xproj  : num [1:100, 1:4] -8.31 -14.68 -11.07 -13.46 -26.2 ...
$ K      : int 4
$ crits  :List of 4
  ..$ : num [1:4] 2827 2827 2827 2827
  ..$ : num [1:4] 914 914 914 914
  ..$ : num [1:4] 162 162 162 162
  ..$ : num [1:4] 48.6 48.6 48.6 48.6
$ type   : chr "standard"
$ lambda : num 0
$ lambda2: NULL
$ wcsd.x : Named num [1:401] 0.0379 0.0335 0.0292 0.0261 0.0217 ...
..- attr(*, "names")= chr [1:401] "R400" "R405" "R410" "R415" ...
$ x      : num [1:100, 1:401] 0.147 0.144 0.145 0.141 0.129 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : chr [1:401] "R400" "R405" "R410" "R415" ...
$ y      : num [1:100, 1] 2 2 2 2 2 1 1 1 1 1 ...
- attr(*, "class")= chr "penlda"

我有兴趣获得用于特征选择的前 20 个变量的列表或矩阵,这很可能基于线性判别系数。我意识到我必须按降序对系数进行排序,并获得与之匹配的变量名称。所以我期望的输出类似于这个虚构的例子

 V1       V2
R400      0.34
R1535     0.22...

任何人都可以提供任何指针(不一定是 R 代码)。提前致谢。

4

1 回答 1

1

out$K是 4,这意味着你有 4 个判别向量。如果你想要根据第二个向量的前 20 个变量,试试这个:

# get the data frame of variable names and coefficients
var.coef = data.frame(colnames(xx.m), out$discrim[,2]) 
# sort the 2nd column (the coefficients) in decreasing order, and only keep the top 20
var.coef.top = var.coef[order(var.coef[,2], decreasing = TRUE)[1:20], ]

var.coef.top是你想要的。

于 2013-10-06T02:10:06.400 回答