6

次のコードを使用して、glmnet を使用して、5 つの機能のセットに基づいて確率を予測しています。別の(Rではない)プログラムで使用する必要があるため、実際の式が必要です。

deg = 3

glmnet.fit <- cv.glmnet(poly(train.matrix,degree=deg),train.result,alpha=0.05,family='binomial')

結果の係数の名前には 5 つの位置があり (これは各機能の 1 つだと思います)、それぞれの位置は 0 から 3 の間の数値です (これは多項式の次数だと思います)。しかし、式を正確に再構築する方法についてはまだ混乱しています。

たとえば、次のとおりです。

> coef(glmnet.fit,s= best.lambda)  
(Intercept) -2.25e-01  
...
0.1.0.0.1    3.72e+02
1.1.0.0.1    9.22e+04
0.2.0.0.1    6.17e+02
...

機能を A、B、C、D、E と呼びましょう。これは式をどのように解釈するべきですか?

Y =
-2.25e-01 +
...
(3.72e+02 * (B * E) +
(9.22e+04 * (A * B * E) +
(6.17e+02 * (B^2 + E)
...

それが正しくない場合、どのように解釈すればよいですか?

次の質問と回答を見ましたが、これらのタイプの係数名には対応していませんでした。

よろしくお願いします。

4

1 に答える 1

8

通常、predict 関数を使用します。あなたの場合、別のプログラムで使用する係数が必要です。predict の使用と、データに係数を掛けた結果との一致を確認できます。

# example data

library(ElemStatLearn) 
library(glmnet) 
data(prostate) 

# training data 

data.train <- prostate[prostate$train,] 
y <- data.train$lpsa 

# isolate predictors

data.train <- as.matrix(data.train[,-c(9,10)]) 

# test data

data.test <- prostate[!prostate$train,] 
data.test <-  as.matrix(data.test[,-c(9,10)]) 

# fit training model 

myglmnet =cv.glmnet(data.train,y) 

# predictions by using predict function 

yhat_enet <- predict(myglmnet,newx=data.test, s="lambda.min") 

#  get predictions by using coefficients 

beta  <- as.vector( t(coef(myglmnet,s="lambda.min"))) 

# Coefficients are returned on the scale of the original data. 
# note we need to add column  of 1s for intercept

testX <- cbind(1,data.test) 
yhat2  <- testX %*% beta 

# check by plotting predictions  

plot(yhat2,yhat_enet)

したがって、各係数はトレーニング データの列に対応します。最初のものは切片に対応します。つまり、係数を抽出し、テスト データを掛けて、目的の結果を得ることができます。

于 2012-06-21T17:23:44.603 に答える