glmnet
でいくつかのアプローチです:あなたは任意の(種中2つのレベルのアイリスデータ)を投稿していなかったので、最初の
いくつかのデータ:
data(iris)
x <- iris[,1:4]
y <- iris[,5]
y[y == "setosa"] <- "virginica"
y <- factor(y)
まず何を参照するために相互検証モデルを実行します最高のラムダです:
library(glmnet)
model_cv <- cv.glmnet(x = as.matrix(x),
y = y,
family = "binomial",
alpha = 1,
nfolds = 5,
intercept = FALSE)
ここで私は最良のラムダを決定するために5倍のクロスバリデーションを選択しました。
あまりにも最高のラムダでの係数を参照してください。
coef(model_cv, s = "lambda.min")
#output
#5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) .
Sepal.Length -0.7966676
Sepal.Width 1.9291364
Petal.Length -0.9502821
Petal.Width 2.7113327
ここであなたは何の変数がドロップされなかった見ることができます(。または、彼らが持っているでしょう代わり係数の)。すべての機能が同じスケール(遺伝子発現データなど)にある場合、デフォルトではTRUE
に設定されているため、standardize = FALSE
をglmnet呼び出しの引数として追加することを検討することができます。少なくとも私は表現をモデリングします。今、あなたはすべてのデータとモデルを作ることができます
model_cv$lambda[which.min(model_cv$cvm)]
:最高のラムダを表示するには
glmnet_l0 <- glmnet(x = as.matrix(x),
y = y,
family = "binomial",
alpha = 1,
intercept = FALSE)
あなたはラムダスケールでそれをプロットし、最高の描いた縦線を追加することができますラムダ:
plot(glmnet_l0, xvar = "lambda")
abline(v = log(model_cv$lambda[which.min(model_cv$cvm)]))
ここで、係数はほとんどラムダではほとんど収縮していないことがわかります。
より高い次元のデータでは、多くの係数が0に向かって行くことがわかります。 coef行列の中で。
predict.glmnet
セットs = model_cv$lambda[which.min(model_cv$cvm)]
を使用すると、すべてのテストされたラムダの予測が生成されます。
また、postにチェックを入れると、その他の関連情報が含まれています。
'str(glmnet_l0)'を試しましたか? – Heikki