2013-03-23 10 views
13

के लिए जीबीएम विधि के साथ कैरेट का उपयोग मैं एक मल्टीकास वर्गीकरण समस्या को हल कर रहा हूं और सामान्यीकृत बूस्टेड मॉडल (आर में जीबीएम पैकेज) का उपयोग करने की कोशिश कर रहा हूं। जिस मुद्दे का सामना करना पड़ा: method="gbm" के साथ देखभाल train फ़ंक्शन मल्टीक्लास डेटा के साथ ठीक से काम नहीं करता है। एक सरल उदाहरण नीचे प्रस्तुत किया गया है।मल्टीक्लास वर्गीकरण

library(gbm) 
library(caret) 
data(iris) 
fitControl <- trainControl(method="repeatedcv", 
          number=5, 
          repeats=1, 
          verboseIter=TRUE) 
set.seed(825) 
gbmFit <- train(Species ~ ., data=iris, 
       method="gbm", 
       trControl=fitControl, 
       verbose=FALSE) 
gbmFit 

उत्पादन

+ Fold1.Rep1: interaction.depth=1, shrinkage=0.1, n.trees=150 
predictions failed for Fold1.Rep1: interaction.depth=1, shrinkage=0.1, n.trees=150 
- Fold1.Rep1: interaction.depth=1, shrinkage=0.1, n.trees=150 
+ Fold1.Rep1: interaction.depth=2, shrinkage=0.1, n.trees=150 
... 
+ Fold5.Rep1: interaction.depth=3, shrinkage=0.1, n.trees=150 
predictions failed for Fold5.Rep1: interaction.depth=3, shrinkage=0.1, n.trees=150 
- Fold5.Rep1: interaction.depth=3, shrinkage=0.1, n.trees=150 
Aggregating results 
Selecting tuning parameters 
Fitting interaction.depth = numeric(0), n.trees = numeric(0), shrinkage = numeric(0) on full training set 
Error in if (interaction.depth < 1) { : argument is of length zero 

है फिर भी अगर मैं कैरट आवरण के बिना जीबीएम इस्तेमाल करने की कोशिश, मैं अच्छा परिणाम प्राप्त।

set.seed(1365) 
train <- createDataPartition(iris$Species, p=0.7, list=F) 
train.iris <- iris[train,] 
valid.iris <- iris[-train,] 
gbm.fit.iris <- gbm(Species ~ ., data=train.iris, n.trees=200, verbose=FALSE) 
gbm.pred <- predict(gbm.fit.iris, valid.iris, n.trees=200, type="response") 
gbm.pred <- as.factor(colnames(gbm.pred)[max.col(gbm.pred)]) ##! 
confusionMatrix(gbm.pred, valid.iris$Species)$overall 

FYI करें, ##! द्वारा चिह्नित लाइन पर कोड वर्ग सबसे संभावित वर्गों का एक पहलू को predict.gbm द्वारा दिया संभावनाओं के एक मैट्रिक्स बदल देता है। आउटपुट

 Accuracy   Kappa AccuracyLower AccuracyUpper AccuracyNull AccuracyPValue McnemarPValue 
    9.111111e-01 8.666667e-01 7.877883e-01 9.752470e-01 3.333333e-01 8.467252e-16   NaN 

कोई सुझाव है कि मल्टीक्लास डेटा पर जीबीएम के साथ सावधानी से काम कैसे करें?

युपीडी:

sessionInfo() 
R version 2.15.3 (2013-03-01) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] splines stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] e1071_1.6-1  class_7.3-5  gbm_2.0-8  survival_2.36-14 caret_5.15-61 reshape2_1.2.2 plyr_1.8   
[8] lattice_0.20-13 foreach_1.4.0 cluster_1.14.3 compare_0.2-3 

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_2.15.3 grid_2.15.3  iterators_1.0.6 stringr_0.6.2 tools_2.15.3 
+0

बस एक सवाल है, तुम क्यों 2 अलग बीज का उपयोग कर रहे पैदा करता है? 825 और 1365? – agstudy

+1

क्या इससे कोई फर्क पड़ता है? 825 - एक उदाहरण कोड से एक बीज है जिसे मैंने बनाया [caret.r-forge.r-project.org] (http://caret.r-forge.r-project.org/training.html), 1365 - बीज मैंने अपनी परियोजना में इस्तेमाल किया। – maruan

उत्तर

6

यह एक मुद्दा है कि मैं पर काम कर रहा हूँ अभी है।

यदि आप sessionInfo() के परिणाम पोस्ट करते हैं तो यह आपकी सहायता करेगा।

इसके अलावा, https://code.google.com/p/gradientboostedmodels/ का नवीनतम जीबीएम प्राप्त करने से समस्या हल हो सकती है।

मैक्स

+0

समस्या https://code.google.com/p/gradientboostedmodels/issues/detail?id=12 से संबंधित है। मेरे पास एक काम है, लेकिन मैं इसे टालना चाहता हूं क्योंकि यह बहुआयामी डेटा के साथ केवल एक मुद्दा है। यह देखने के लिए कि क्या कोई ईटा है, मैं फिर से रखरखाव से संपर्क करूंगा। – topepo

+0

devtools https://github.com/hadley/devtools/issues/419 के साथ gbm को अद्यतन करने के बाद दस्तावेज़ों को पुनः लोड करने के बारे में एक प्रसिद्ध समस्या प्रतीत होती है जो इस पर भी प्रभाव डालती है। –

3

अद्यतन: कैरट बहुल वर्ग वर्गीकरण कर सकते हैं।

आपको यह सुनिश्चित करना चाहिए कि कक्षा लेबल अल्फा-न्यूमेरिक प्रारूप (एक अक्षर से शुरू हो) में है।

उदाहरण के लिए: यदि आपके पास डेटा "1", "2", "3" लेबल हैं तो इन्हें "सेग 1", "सेग 2" और "सेग 3" में बदलें, और असफल होने की देखभाल करें।

2

अद्यतन: मूल कोड चलाने के लिए और निम्नलिखित उत्पादन

+ Fold1.Rep1: shrinkage=0.1, interaction.depth=1, n.trees=150 
- Fold1.Rep1: shrinkage=0.1, interaction.depth=1, n.trees=150 
... 
... 
... 
+ Fold5.Rep1: shrinkage=0.1, interaction.depth=3, n.trees=150 
- Fold5.Rep1: shrinkage=0.1, interaction.depth=3, n.trees=150 
Aggregating results 
Selecting tuning parameters 
Fitting n.trees = 50, interaction.depth = 2, shrinkage = 0.1 on full training set 
> gbmFit 
Stochastic Gradient Boosting 

150 samples 
    4 predictor 
    3 classes: 'setosa', 'versicolor', 'virginica' 

No pre-processing 
Resampling: Cross-Validated (5 fold, repeated 1 times) 

Summary of sample sizes: 120, 120, 120, 120, 120 

Resampling results across tuning parameters: 

    interaction.depth n.trees Accuracy Kappa Accuracy SD 
    1     50  0.9400000 0.91 0.04346135 
    1     100  0.9400000 0.91 0.03651484 
    1     150  0.9333333 0.90 0.03333333 
    2     50  0.9533333 0.93 0.04472136 
    2     100  0.9533333 0.93 0.05055250 
    2     150  0.9466667 0.92 0.04472136 
    3     50  0.9333333 0.90 0.03333333 
    3     100  0.9466667 0.92 0.04472136 
    3     150  0.9400000 0.91 0.03651484 
    Kappa SD 
    0.06519202 
    0.05477226 
    0.05000000 
    0.06708204 
    0.07582875 
    0.06708204 
    0.05000000 
    0.06708204 
    0.05477226 

Tuning parameter 'shrinkage' was held constant at a value of 0.1 
Accuracy was used to select the optimal model using the 
largest value. 
The final values used for the model were n.trees = 
50, interaction.depth = 2 and shrinkage = 0.1. 
> summary(gbmFit) 
         var rel.inf 
Petal.Length Petal.Length 74.1266408 
Petal.Width Petal.Width 22.0668983 
Sepal.Width Sepal.Width 3.2209288 
Sepal.Length Sepal.Length 0.5855321 
संबंधित मुद्दे