मुझे नीचे दिए गए कोड के साथ मेरे डेटासेट समान तर्क से एक त्रुटि मिल रही है। मैंने प्रशिक्षण डेटा की संख्या बढ़ाने की कोशिश की है, लेकिन हल नहीं किया। मैंने पहले ही सभी NA मान निकाल दिए हैं।

मॉडल में त्रुटि

set.seed(234)
d <- data.frame(w=abs(rnorm(50)*1000),
            x=rnorm(50), 
            y=sample(LETTERS[1:26], 50, replace=TRUE))



train_idx <- sample(1:nrow(d), floor(0.8*nrow(d)))
train <- d[train_idx,]
test  <- d[-train_idx,]



fit  <- lm(w ~x + y, data=train)
predict(fit, test)
1
joerna 4 पद 2017, 05:00

3 जवाब

सबसे बढ़िया उत्तर

जैसा कि @jdobres पहले ही बता चुका है कि यह त्रुटि क्यों सामने आई, मैं सीधे समाधान दृष्टिकोण पर जाऊँगा:

आइए predict स्टेटमेंट से ठीक पहले कोड की लाइन नीचे देखें

#add all levels of 'y' in 'test' dataset to fit$xlevels[["y"]] in the fit object
fit$xlevels[["y"]] <- union(fit$xlevels[["y"]], levels(test[["y"]]))

आशा है कि इससे आपकी समस्या का समाधान हो गया होगा!

3
Prem 4 पद 2017, 10:18

कारक और चरित्र डेटा को श्रेणीबद्ध चर के रूप में माना जाता है। इसलिए, मॉडल उन श्रेणी लेबलों के लिए पूर्वानुमान नहीं बना सकते जिन्हें उन्होंने पहले कभी नहीं देखा है। यदि आपने "पूडल" और "पिट बुल" के बारे में चीजों की भविष्यवाणी करने के लिए एक मॉडल बनाया है, तो मॉडल विफल हो जाएगा यदि आप इसे "गोल्डन रिट्रीवर" देते हैं।

आपके उदाहरण के लिए अधिक विशिष्ट, त्रुटि आपको बता रही है कि "L" और "X" लेबल, जो आपके परीक्षण सेट में हैं, आपके प्रशिक्षण सेट में प्रकट नहीं होते हैं। चूंकि वे प्रशिक्षण सेट में नहीं थे, इसलिए मॉडल को यह नहीं पता कि परीक्षण में इनका सामना करने पर क्या करना चाहिए।

2
jdobres 4 पद 2017, 05:27

धन्यवाद प्रेम, और यदि आपके पास कई चर हैं तो आप इस तरह कोड की लाइन को लूप कर सकते हैं:

for(k in vars){
  if(is.factor(shop_data[,k])){
    ols_fit$xlevels[[k]] <- union(ols_fit$xlevels[[k]],levels(shop_data[[k]]))
   }
}

Vars मॉडल में उपयोग किए जाने वाले चर हैं, shop_data मुख्य डेटासेट है जिसे ट्रेन और परीक्षण में विभाजित किया गया है

0
Zeus 25 फरवरी 2019, 08:16