キャレットパッケージを使用して、「rpart」パッケージでモデルをトレーニングしています。
_tr = train(y ~ ., data = trainingDATA, method = "rpart")
_
データには欠損値やNAはありませんが、コマンドを実行すると警告メッセージが表示されます。
_ Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, :
There were missing values in resampled performance measures.
_
誰もがこの警告の意味を知っていますか(または答えを見つける場所を教えてくれますか)?リサンプリングされたパフォーマンス測定値に欠損値があったことを教えていることは知っていますが、それは正確に何を意味し、そのような状況はどのように発生しますか?ところで、predict()
関数は近似モデルでうまく機能するので、それは私の好奇心です。
より多くのデータがなければ決定的に確実ではありません。
これが回帰の場合、最も可能性の高いケースは、ツリーが適切な分割を見つけられず、結果の平均を予測子として使用したことです。それは問題ありませんが、予測の分散がゼロであるため、R ^ 2を計算できません。
分類する場合、それは言うのが難しいです。結果クラスの1つにゼロサンプルがあるリサンプルがあり、感度または特異性は未定義であり、したがってNA
です。
問題は、rpartがツリーベースのアルゴリズムを使用していることです。このアルゴリズムは、特定の機能の限られた数の要素しか処理できません。したがって、53を超えるカテゴリを持つファクターに設定された変数がある場合があります。
_> rf.1 <- randomForest(x = rf.train.2,
+ y = rf.label,
+ ntree = 1000)
Error in randomForest.default(x = rf.train.2, y = rf.label, ntree = 1000) :
Can not handle categorical predictors with more than 53 categories.
_
問題の根底では、キャレットがその関数を実行しているため、53以上のレベルでカテゴリ変数を修正してください。
ここに私の問題がありました(郵便番号がfactorとして入ってくることに注意してください):
_# ------------------------------- #
# RANDOM FOREST WITH CV 10 FOLDS #
# ------------------------------- #
rf.train.2 <- df_train[, c("v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
"v8",
"zipcode",
"price",
"made_purchase")]
rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1),
v2=as.factor(rf.train.2$v2),
v3=as.factor(rf.train.2$v3),
v4=as.factor(rf.train.2$v4),
v5=as.factor(rf.train.2$v5),
v6=as.factor(rf.train.2$v6),
v7=as.factor(rf.train.2$v7),
v8=as.factor(rf.train.2$v8),
zipcode=as.factor(rf.train.2$zipcode),
price=rf.train.2$price,
made_purchase=as.factor(rf.train.2$made_purchase))
rf.label <- rf.train.2[,"made_purchase"]
_
カテゴリ変数zipcodeを調整する修正済みコードを次に示します。次のような数値ラッパーでラップすることもできます。as.numeric(rf.train.2$zipcode)
。
_# ------------------------------- #
# RANDOM FOREST WITH CV 10 FOLDS #
# ------------------------------- #
rf.train.2 <- df_train[, c("v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
"v8",
"zipcode",
"price",
"made_purchase")]
rf.train.2 <- data.frame(v1=as.factor(rf.train.2$v1),
v2=as.factor(rf.train.2$v2),
v3=as.factor(rf.train.2$v3),
v4=as.factor(rf.train.2$v4),
v5=as.factor(rf.train.2$v5),
v6=as.factor(rf.train.2$v6),
v7=as.factor(rf.train.2$v7),
v8=as.factor(rf.train.2$v8),
zipcode=rf.train.2$zipcode,
price=rf.train.2$price,
made_purchase=as.factor(rf.train.2$made_purchase))
rf.label <- rf.train.2[,"made_purchase"]
_
このエラーは、モデルがクロス検証フォールドで収束しなかった場合に発生し、予測の分散はゼロになります。その結果、RMSEやRsquaredなどのメトリックは計算できないため、NAになります。より良い収束のために調整できるパラメーターがある場合があります。ニューラルネットライブラリは、ほとんど常に収束につながるしきい値を上げることを提供します。それでも、rpartライブラリについてはわかりません。
これが発生するもう1つの理由は、トレーニングデータに既にNAが含まれていることです。その後、明らかな解決策は、train(data = na.omit(training.data))で渡す前にそれらを削除することです。
それが少し啓発することを願っています。