使用penalizedLDA包进行功能选择

时间:2013-10-06 01:12:56

标签: r

我正在尝试使用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)

从anaylsis获取输出的结构:

> 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代码)。提前谢谢。

1 个答案:

答案 0 :(得分: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就是你想要的。