2016-09-05 4 views
1

GLMNET을 사용한 예측에 대해 두 가지 질문이 있습니다. 특히 인터셉트에 관한 것입니다.인터셉트를 사용하는 GLMNET 예측

# Train data creation 
Train <- data.frame('x1'=runif(10), 'x2'=runif(10)) 
Train$y <- Train$x1-Train$x2+runif(10) 
# From Train data frame to x and y matrix 
y <- Train$y 
x <- as.matrix(Train[,c('x1','x2')]) 
# Glmnet model 
Model_El <- glmnet(x,y) 
Cv_El <- cv.glmnet(x,y) 
# Prediction 
Test_Matrix <- model.matrix(~.-y,data=Train)[,-1] 
Test_Matrix_Df <- data.frame(Test_Matrix) 
Pred_El <- predict(Model_El,newx=Test_Matrix,s=Cv_El$lambda.min,type='response') 

내가 추정 식의 절편을 할 :

난 (I 나중에 데이터를 테스트하기 위해 변화한다) 기차 데이터에 열차 데이터 작성, GLMNET 추정 및 예측 작은 예를 만든 . 이 코드는 내가 매트릭스의 열을 (절편)을 제거하지 않는 한 Test_Matrix 행렬의 크기와 관련된 오류 제공 -로
Test_Matrix <- model.matrix(~.-y,data=Train)[,-1] 

내 질문에

에서 것은 있습니다 : 그것은 올바른 방법으로

  • 인가 예측을하기 위해 이것을하십시오 - 예측 포뮬러에 절편을 포함 시키길 원하십니까?

  • 올바른 방법 인 경우 : 왜 매트릭스에서 절편을 제거해야합니까?

미리 감사드립니다.

답변

2

요격을 사용하여 모델을 예측하려면 요격 모델이 있어야합니다. 귀하의 코드는 도형이없는 모델 행렬 x <- as.matrix(Train[,c('x1','x2')])을 사용하므로 predict을 사용할 때 절편을 제공하면 오류가 발생합니다.

당신은 다음을 수행 할 수 있습니다

x <- model.matrix(y ~ ., Train) ## model matrix with intercept 
Model_El <- glmnet(x,y) 
Cv_El <- cv.glmnet(x,y) 
Test_Matrix <- model.matrix(y ~ ., Train) ## prediction matrix with intercept 
Pred_El <- predict(Model_El, newx = Test_Matrix, s = Cv_El$lambda.min, type='response') 

주, 당신은

model.matrix(~ . -y) 

model.matrix 수식의 LHS를 무시 할 필요가 없습니다, 그래서

를 사용하는 합법적
model.matrix(y ~ .) 
+0

답장을 보내 주셔서 감사합니다. 나는 y ~를 놓쳤다. 통사론. –

2

매트릭스 xglmnet 함수에 절편 열이 없습니다. 따라서 테스트 매트릭스를 구성 할 때이 형식을 존중해야합니다. 즉 model.matrix(y ~ . - 1, data = Train) 만 수행하면됩니다.

기본적으로 절편은 glmnet에 맞습니다 (glmnet 함수의 intercept 매개 변수 참조). 따라서 glmnet(x, y)을 호출하면 기술적으로 glmnet(x, y, intercept = T)을 수행하고 있습니다. 따라서, 귀하의 x 행렬에 절편이 없더라도 하나가 적합했습니다.