आर

2012-06-21 6 views
6

में ग्लैनेट में गुणांक नामों का व्याख्यान मैं निम्नलिखित कोड का उपयोग करके 5 सुविधाओं के सेट के आधार पर संभावनाओं की भविष्यवाणी करने के लिए ग्लैमनेट का उपयोग कर रहा हूं। मुझे वास्तविक सूत्र की आवश्यकता है क्योंकि मुझे इसे एक अलग (गैर आर) प्रोग्राम में उपयोग करने की आवश्यकता है।आर

deg = 3 

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

जिसके परिणामस्वरूप गुणांकों के नाम पांच स्थिति है (मुझे लगता है यह प्रत्येक सुविधा में से एक है) और उनमें से हर एक 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 
... 

की सुविधाओं एक फोन, बी, सी, डी, ई करते हैं। क्या सूत्र का व्याख्या किया जाना चाहिए?

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

यदि यह सही नहीं है तो मुझे इसकी व्याख्या कैसे करनी चाहिए?

मैंने निम्नलिखित question and answer देखा लेकिन यह इन प्रकार के गुणांक नामों को संबोधित नहीं किया।

आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

6

आमतौर पर, हम पूर्वानुमान कार्य का उपयोग करते हैं। आपके मामले में, आपको किसी अन्य प्रोग्राम में उपयोग करने के लिए गुणांक की आवश्यकता है। हम पूर्वानुमान का उपयोग करने और गुणांक द्वारा डेटा गुणा करने के परिणाम के बीच समझौते की जांच कर सकते हैं।

# 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) 

तो प्रत्येक गुणांक आपके प्रशिक्षण डेटा में एक कॉलम से मेल खाता है। पहला एक अवरोध से मेल खाता है। संक्षेप में, आप गुणांक निकालें और परिणामों में प्राप्त होने वाले परिणामों को प्राप्त करने के लिए परीक्षण डेटा से गुणा कर सकते हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्यवश, मुझे अभी भी यकीन नहीं है कि उन गुणांक नामों और मानों को सूत्र में कैसे परिवर्तित किया जाए। "तो प्रत्येक गुणांक आपके प्रशिक्षण डेटा में एक कॉलम से मेल खाता है"। यह सच नहीं हो सकता है। मेरे पास ~ 80 गैर-शून्य गुणांक हैं। लेकिन मेरे पास केवल 5 कॉलम प्रशिक्षण डेटा हैं। मुझे लगता है कि उन अवधि-अलग संख्याओं में से प्रत्येक शायद मेरे कॉलम में से एक के अनुरूप है। कोई दूसरी राय? – dougp

+0

के कॉलम देखें: पॉलीडाटा <- पॉली (ट्रेन.मैट्रिक्स, डिग्री = डिग्री)। पॉली ऑर्थोगोनल बहुपदों के साथ आपके प्रशिक्षण डेटा (5 कोल्स से ~ 80 तक) का विस्तार कर रहा है। क्या आप यही चाहते हैं? आप देखेंगे कि नए कॉलम/नाम हैं और ये गुणांक से मेल खाते हैं। – julieth

+0

मैं देखता हूं। इससे बहुत मदद मिलती है। धन्यवाद। मैंने इसे "पॉली" के बिना एक बार कोशिश की और एक बार डिग्री = 1 के साथ और चीजें अधिक स्पष्ट थीं। जैसा कि मैंने इसे और अधिक देखा है, ऐसा लगता है कि फार्मूला का मेरा सामान्य पुनर्निर्माण एक चीज़ को छोड़कर सही है। मुझे लगता है कि विशेषताएं ए, बी, सी, डी, ई वास्तव में ऑर्थोगोनल बहुपद (कच्चे डेटा नहीं) हैं। – dougp