Мультиклассовая классификация в H2O randomForest - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь использовать H20 randomForest для мультиклассовой классификации в R, но когда я запускаю код, randomForest всегда выступает в качестве регрессионной модели - несмотря на то, что целевая переменная является фактором. Я пытаюсь предсказать «Градиент», фактор с 5 уровнями, еще одним фактором «Период» с 4 уровнями и 21 числовым предиктором.

Любая помощь будет оценена. Код ниже ....

>str(df)

Class 'H2OFrame' <environment: 0x000001f6b361abe0>

 - attr(*, "op")= chr ":="
 - attr(*, "eval")= logi TRUE
 - attr(*, "id")= chr "RTMP_sid_aecc_35"
 - attr(*, "nrow")= int 63878
 - attr(*, "ncol")= int 22
 - attr(*, "types")=List of 22
 - attr(*, "data")='data.frame':    10 obs. of  22 variables:

  ..$ Gradient: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1

  ..$ Period  : Factor w/ 4 levels "Dawn","Day","Dusk",..: 2 2 2 2 2 2 2 2 2 2

  ..$ AC1     : num  1792 1793 1790 1790 1797 ...
  ..$ AC2     : num  316 316 318 317 324 ...
  ..$ AC3     : num  972 972 974 975 979 ...

et c для оставшихся числовых предикторов.

>splits <- h2o.splitFrame(df,  c(0.6,0.2),  seed=1234)
>train <- h2o.assign(splits[[1]], "train.hex")  
>valid <- h2o.assign(splits[[2]], "valid.hex")   
>test <- h2o.assign(splits[[3]], "test.hex")   

>str(train)
        Class 'H2OFrame' <environment: 0x000002266fac7d40> 
     - attr(*, "op")= chr "assign"
     - attr(*, "id")= chr "train.hex"
     - attr(*, "nrow")= int 38259
     - attr(*, "ncol")= int 22
     - attr(*, "types")=List of 22
    - attr(*, "data")='data.frame': 10 obs. of  22 variables:
      ..$ Gradient: Factor w/ 5 levels "LB","LU","PB",..: 1 1 1 1 1 1 1 1 1 1
      ..$ Period  : Factor w/ 4 levels "Dawn","Day","Dusk",..: 2 2 2 2 2 2 2 2 2 2
      ..$ AC1     : num  1793 1797 1796 1805 1803 ...
      ..$ AC2     : num  316 324 322 322 323 ...
      ..$ AC3     : num  972 979 979 988 986 ...
      ..$ AC4     : num  663 662 664 673 670 ...
      ..$ AC5     : num  828 825 824 824 825 ...
      ..$ AD1     : num  1.22 1.42 1.73 2.25 1.99 ...
      ..$ AD2     : num  1.1 1.27 1.35 1.38 1.38 ...
      ..$ AD3     : num  1.22 1.42 1.72 2.24 1.99 ...
      ..$ AD4     : num  1.87 1.53 2.07 2.03 1.78 ...
      ..$ AD5     : num  2.33 2.33 2.33 2.33 2.33 ...
      ..$ AE1     : num  0.877 0.849 0.794 0.636 0.72 ...
      ..$ AE2     : num  0.3687 0.2332 0.1369 0.0433 0.0546 ...
      ..$ AE3     : num  0.774 0.723 0.624 0.335 0.487 ...
      ..$ AE4     : num  0.574 0.697 0.44 0.477 0.605 ...
      ..$ AE5     : num  0.542 0.542 0.554 0.543 0.542 ...
      ..$ BI1     : num  53 71.9 64 75.4 74.6 ...
      ..$ BI2     : num  6.51 5.88 4.54 2.3 2.34 ...
      ..$ BI3     : num  22.2 26 21.5 27.9 28 ...
      ..$ BI4     : num  7.86 9.58 8.59 12.17 12.5 ...
      ..$ BI5     : num  11.3 17.9 16.4 18.1 17.5 ...



 > train[1:5,]   ## rows 1-5, all columns
  Gradient Period     AC1      AC2      AC3      AC4      AC5      AD1      AD2      AD3      AD4      AD5      AE1      AE2      AE3      AE4      AE5
1       LB    Day 1792.97 316.4038 972.4288 663.2612 827.6400 1.217491 1.104860 1.217491 1.866627 2.332115 0.876794 0.368712 0.774123 0.574168 0.541993
2       LB    Day 1796.78 324.3562 979.2218 662.2341 824.6436 1.421910 1.274373 1.421910 1.526506 2.331810 0.848660 0.233177 0.722544 0.696906 0.542409
3       LB    Day 1796.09 321.9081 978.7464 664.1776 824.4437 1.726798 1.345030 1.721740 2.066543 2.326278 0.794230 0.136892 0.624107 0.440458 0.553766
4       LB    Day 1805.14 322.0390 987.9472 673.2841 824.3146 2.248474 1.381644 2.239061 2.028538 2.331881 0.636007 0.043267 0.334964 0.477149 0.542572
5       LB    Day 1803.15 323.1540 985.6376 669.7603 824.6003 1.992025 1.380468 1.992004 1.782532 2.331971 0.720153 0.054578 0.486951 0.604876 0.542420
       BI1      BI2      BI3       BI4      BI5
1 53.03567 6.506536 22.23446  7.862767 11.32708
2 71.94775 5.879407 26.04130  9.579798 17.94337
3 63.98763 4.535041 21.50727  8.590985 16.38780
4 75.38319 2.301110 27.89600 12.165991 18.06316
5 74.60517 2.342853 28.02568 12.499122 17.52902


rf1 <- h2o.randomForest(         
  training_frame = train,        
  validation_frame = valid,      
  x=2:22,                        
  y=1,                          
  ntrees = 200,                 
  stopping_rounds = 2,          
  score_each_iteration = T,     
  seed = 1000000) `
>perf <- h2o.performance(rf1, valid)
>h2o.mcc(perf)
Error in h2o.metric(object, thresholds, "absolute_mcc") : 
      No absolute_mcc for H2OMultinomialMetrics
    h2o.accuracy(perf)
Error in h2o.metric(object, thresholds, "accuracy") : 
  No accuracy for H2OMultinomialMetrics

и сводка из сводки модели:

    H2OMultinomialMetrics: drf
** Reported on training data. **
** Metrics reported on Out-Of-Bag training samples **

Training Set Metrics: 
=====================

Extract training frame with `h2o.getFrame("train.hex")`
MSE: (Extract with `h2o.mse`) 0.2499334
RMSE: (Extract with `h2o.rmse`) 0.4999334
Logloss: (Extract with `h2o.logloss`) 0.9987891
Mean Per-Class Error: 0.2941914
R^2: (Extract with `h2o.r2`) 0.8683096

1 Ответ

0 голосов
/ 02 марта 2020

mcc специально для двоичных классификаторов; ваш фактор имеет более 2 уровней.

Вы можете сказать, что успешно выполнили полиномиальную классификацию, а не регрессию, потому что в сообщении об ошибке говорится: «Нет absolute_m cc для H2O Multinomial Метрики ".

h2o.accuracy() и h2o.logloss() доступны для полиномиальных моделей.

ОБНОВЛЕНИЕ: ... хорошо, документы говорят h2o.accuracy() доступно, но быстрая проверка набора данных радужной оболочки дает мне ту же ошибку, которую вы видите; должно быть связано с этим предупреждением в документах (чего я не понял).

В любом случае, более полезным, вероятно, будет h2o.confusionMatrix(rf1); общая ошибка, показанная в правом нижнем углу, составляет 1 - accuracy. Также h2o.confusionMatrix(rf1,valid=T) и h2o.confusionMatrix(rf1, test)

...