機略戦記

Maneuver warfare

RでrandomForest()を実行した時、 Are you sure you want to do regression?と警告される。

前提

logical型の目的変数をrandomForest() (randomForestパッケージの)で予測したい。 regressionでは無くclassificationがしたい訳だが、以下の警告がでる。

> nikkei225.rf <- randomForest(is_up~., data=train.rf, mtry = 184)
 警告メッセージ: 
 randomForest.default(m, y, ...): 
  The response has five or fewer unique values.  Are you sure you want to do regression?

「予測結果の値が5種類以下しか無いが、本当にregressionがしたいのか? ( classification がしたいのでは? )」という意味だと思う。

つまり regression モードで実行されている。(おそらく)

結論

目的変数がlogical型になっていると、regression モード になるっぽい。 目的変数をfactor型に変換してあげればclassification モードになる。

例:

> train.rf$is_up <- as.factor(train.rf$is_up)
> nikkei225.rf <- randomForest(is_up~., data=train.rf, mtry = 184)

説明

全然勘だけど、Rにおけるlogical型が数値のような振る舞いをする事に関係しているのではないか。

logical型が数値のような振る舞いをする例:

> TRUE + TRUE
[1] 2

> sum(c(TRUE, TRUE, TRUE))
[1] 3

感想

logical型というのは、「物事が真であるか偽であるか」を表す型であるべきなのではないだろうか。 真が3つ連続したvector整数の3が等価であるというのは概念的に全然自然では無いと思うけど、まぁ、TRUE/FALSEが1/0のエイリアスである言語すらあるので、そういう世界観なんだろう。