2016-07-27 16 views
6

की किसी ऑब्जेक्ट पर लागू 'पूर्वानुमान' के लिए कोई लागू विधि नहीं है मेरे पास पिछले महीने तक ऐतिहासिक जानकारी के आधार पर एक मॉडल (fit) है। अब मैं वर्तमान मॉडल के लिए अपने मॉडल का उपयोग करने की भविष्यवाणी करना चाहता हूं।UseMethod ("predict"): कक्षा "ट्रेन"

predicted <- predict(fit, testData[-$Readmit]) 

मैं निम्नलिखित त्रुटि मिलती है:

Error in UseMethod("predict") : no applicable method for 'predict' 
    applied to an object of class "train" 

नोट्स: caret से train समारोह:

  1. फिट मॉडल के माध्यम से बनाया गया था जब मैं निम्नलिखित कोड को लागू करने की कोशिश पैकेज, यादृच्छिक वन एल्गोरिदम
  2. का उपयोग कर predict एक सामान्य कार्य है जो पहले इनपुट तर्क के आधार पर विशिष्ट पूर्वानुमान फ़ंक्शन का आह्वान करेगा। मेरे मामले में यह हो जाएगा: predict.randomForest:

    >fit$modelInfo$label

    [1] "Random Forest"

इसलिए विधि लागू हो जाएगा अनुमान है। अधिक जानकारी के लिए [देखभाल दस्तावेज] [3] देखें।

यहाँ मॉडल पैदा करने और इसे लागू करने के लिए सारांश स्रोत कोड:

# Script-1: create a model: 
fit <- train(testData[-$Readmit], testData$Readmit) 
saveRDS(fit, modelFileName) # save the fit object into a file 

# Script-2: predict 
fit <- readRDS(modelFileName) # Load the model (generated previously) 
predicted <- predict(fit, testData[-$Readmit]) 

नोट: मॉडल पैदा करने के लिए निष्पादन समय लगभग 3 घंटे है, यही वजह है कि मैं के बाद पुन: उपयोग के लिए वस्तु को बचाने के उस।

डेटा निम्नलिखित संरचना के रूप में प्रशिक्षण मॉडल से सेट करें:

> str(fit$trainingData) 
'data.frame': 29955 obs. of 27 variables: 
$ Acuity    : Factor w/ 3 levels "Elective ","Emergency ",..: 2 2 2 1 1 2 2 2 1 1 ... 
$ AgeGroup    : Factor w/ 10 levels "100-105","65-70",..: 8 6 9 9 5 4 9 2 3 2 ... 
$ IsPriority   : int 0 0 0 0 0 0 0 0 0 0 ... 
$ QNXTReferToId   : int 115 1703712 115 3690 1948 115 109 512 481 1785596 ... 
$ QNXTReferFromId  : int 1740397 1724801 1711465 1704170 1714272 1731911 1535 1712758 1740614 1760252 ... 
$ iscasemanagement  : Factor w/ 2 levels "N","Y": 2 1 1 2 2 1 2 1 2 2 ... 
$ iseligible   : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 2 2 2 2 ... 
$ referralservicecode : Factor w/ 11 levels "12345","278",..: 1 1 1 9 9 1 1 6 9 9 ... 
$ IsHighlight   : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1 ... 
$ admittingdiagnosiscode: num 439 786 785 786 428 ... 
$ dischargediagnosiscode: num 439 0 296 786 428 ... 
$ RealLengthOfStay  : int 3 1 6 1 2 3 3 7 3 2 ... 
$ QNXTPCPId    : int 1740397 1724801 1711465 1704170 1714272 1731911 1535 1712758 1740614 1760252 ... 
$ QNXTProgramId   : Factor w/ 3 levels "QMXHPQ0839  ",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ physicalzipcode  : int 33054 33712 33010 33809 33010 33013 33142 33030 33161 33055 ... 
$ gender    : Factor w/ 2 levels "F","M": 1 1 1 1 2 1 1 2 2 1 ... 
$ ethnicitycode   : Factor w/ 4 levels "ETHN0001  ",..: 4 4 4 4 4 4 4 4 4 4 ... 
$ dx1     : num 439 786 296 786 428 ... 
$ dx2     : num 439 292 785 786 428 ... 
$ dx3     : num 402 0 250 0 0 ... 
$ svc1     : int 0 120 120 762 762 120 120 120 762 762 ... 
$ svc2     : int 120 0 0 0 0 0 0 0 0 0 ... 
$ svc3     : int 0 0 0 0 0 0 0 0 0 0 ... 
$ Disposition   : Factor w/ 28 levels "0","APPEAL & GRIEVANCE REVIEW         ",..: 11 11 16 11 11 11 11 11 11 11 ... 
$ AvgIncome    : Factor w/ 10 levels "-1",">100k","0-25k",..: 3 6 3 8 3 4 3 5 4 4 ... 
$ CaseManagerNameID  : int 124 1 1 19 20 1 16 1 43 20 ... 
$ .outcome    : Factor w/ 2 levels "NO","YES": 1 2 2 1 1 1 2 2 1 1 ... 

अब testData निम्नलिखित संरचना होगा:

> str(testData[-$Readmit]) 
'data.frame': 610 obs. of 26 variables: 
$ Acuity    : Factor w/ 4 levels "0","Elective ",..: 3 2 4 2 2 2 4 3 3 3 ... 
$ AgeGroup    : Factor w/ 9 levels "100-105","65-70",..: 4 3 5 4 2 9 4 2 4 6 ... 
$ IsPriority   : int 0 0 0 0 0 0 1 1 1 1 ... 
$ QNXTReferToId   : int 2140 482 1703785 1941 114 1714905 1703785 98 109 109 ... 
$ QNXTReferFromId  : int 1791383 1729375 1718532 1746336 1718267 1718267 1718532 98 109 109 ... 
$ iscasemanagement  : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 1 2 2 1 ... 
$ iseligible   : Factor w/ 2 levels "N","Y": 2 2 2 2 2 2 2 2 2 2 ... 
$ referralservicecode : Factor w/ 7 levels "12345","IPMAT   ",..: 5 1 1 1 1 1 1 5 1 5 ... 
$ IsHighlight   : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1 ... 
$ admittingdiagnosiscode: num 11440 11317 11420 11317 1361 ... 
$ dischargediagnosiscode: num 11440 11317 11420 11317 1361 ... 
$ RealLengthOfStay  : int 1 2 4 3 1 1 16 1 1 3 ... 
$ QNXTPCPId    : int 3212 1713678 1738430 1713671 1720569 1791640 1725962 1148 1703290 1705009 ... 
$ QNXTProgramId   : Factor w/ 2 levels "QMXHPQ0839  ",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ physicalzipcode  : int 34744 33175 33844 33178 33010 33010 33897 33126 33127 33125 ... 
$ gender    : Factor w/ 2 levels "F","M": 2 1 2 1 2 2 2 1 1 2 ... 
$ ethnicitycode   : Factor w/ 1 level "No Ethnicity ": 1 1 1 1 1 1 1 1 1 1 ... 
$ dx1     : num 11440 11317 11420 11317 1361 ... 
$ dx2     : num 11440 11317 11420 11317 1361 ... 
$ dx3     : num 0 1465 0 11326 0 ... 
$ svc1     : int 52648 27447 50040 27447 55866 55866 51595 0 99221 300616 ... 
$ svc2     : int 76872 120 50391 120 120 38571 120 762 120 0 ... 
$ svc3     : int 762 0 120 0 0 51999 0 0 0 762 ... 
$ Disposition   : Factor w/ 14 levels "0","DENIED- Not Medically Necessary        ",..: 3 5 3 4 3 3 5 3 3 5 ... 
$ AvgIncome    : Factor w/ 10 levels "-1",">100k","0-25k",..: 6 7 5 9 3 3 6 4 3 4 ... 
$ CaseManagerNameID  : int 1 2 3 4 5 6 7 8 9 7 ... 

चर संरचना ही है, सिर्फ इतना है कि कुछ कारक चर के विभिन्न स्तर होते हैं क्योंकि कुछ चर के नए मान होते हैं। उदाहरण के लिए: मॉडल में Acuity में 3-स्तर और परीक्षण डेटा 4-स्तर हैं।

मेरे पास सभी चर के लिए सभी संभावित स्तर जानने के लिए एक तरफ से आगे नहीं है।

पहले से

कोई सलाह, कृपया ...

धन्यवाद,

डेविड

+1

'ट्रेन' आर समारोह नहीं है। आप इसके दस्तावेज़ीकरण को पढ़ सकते हैं जैसे '? Library_you_got_it_from :: train'। वे शायद वहां उल्लेख करते हैं कि क्या इसकी 'भविष्यवाणी' विधि है या नहीं। – Frank

+1

क्या यह 'देखभाल' पैकेज से है? – liori

+0

क्या 'सारांश (फिट)' आपको कुछ तार्किक देता है? – abhiieor

उत्तर

6

मुझे लगता है कि मैंने पाया कि ऐसा क्यों हुआ ... predict से एक सामान्य समारोह है: stats पैकेज। मैं caret पैकेज से कार्यों लागू है और caret पैकेज से बराबर predict समारोह (है कि एक उपयोगकर्ता संकुल बनाने के लिए सिफारिश है) के लिए नाम स्थान :: -notation का उपयोग करें: predict.train, कि एक आंतरिक समारोह, कि एक द्वारा लाया नहीं किया जा सकता है बाहरी आवेदनइस फ़ंक्शन को आमंत्रित करने का एकमात्र तरीका, stats पैकेज से जेनेरिक predict फ़ंक्शन का उपयोग कर रहा है, फिर पहले इनपुट तर्क की श्रेणी के आधार पर: predicted <- predict(fit, testData[-$Readmit]) यह विशेष predict फ़ंक्शन लागू किया जाएगा।

इस विशेष मामले के लिए इस फ़ंक्शन का वर्ग train है, इसलिए यह वास्तव में फ़ंक्शन: train.predictcaret पैकेज से कॉल करेगा। यह फ़ंक्शन प्रयुक्त एल्गोरिदम (विधि) के आधार पर भविष्यवाणी के लिए अनुरोध किए गए विशेष फ़ंक्शन को भी संभालता है, उदाहरण के लिए: predict.gbm या predict.glm, आदि। यह विस्तार से विस्तार से बताया गया है, documentation अनुभाग में: "5.7 भविष्यवाणियां और कक्षा की संभावनाएं निकालना"।

इसलिए ::-नोटेशन पैकेज में अन्य कार्यों के लिए अच्छा काम करता है, जैसे: caret.train उदाहरण के लिए, लेकिन इस विशेष के लिए नहीं: predict। ऐसे मामलों में पुस्तकालय को स्पष्ट रूप से लोड करना आवश्यक है, इसलिए यह आंतरिक रूप से predict.train फ़ंक्शन का आह्वान कर सकता है।

संक्षेप में, समाधान सिर्फ predict समारोह लागू करने से पहले निम्न पंक्ति जोड़कर जाता है:

library(caret) 

तो त्रुटि गायब हो।

+0

वही बात मेरे साथ हुई, 'biglm' पैकेज के साथ, संलग्न कैरेट होने के बाद, लेकिन' biglm' नहीं, इसलिए + 1। – YCR

संबंधित मुद्दे