現在、チャーン問題の予測モデルに取り組んでいます。
次のモデルを実行しようとすると、常に次のエラーが発生します。クラスレベルの少なくとも1つが有効なR変数名ではありません。これにより、変数名がX0、X1に変換されるため、クラス確率が生成されるときにエラーが発生します。有効なR変数名として使用できる因子水準を使用してください。
fivestats <- function(...) c( twoClassSummary(...), defaultSummary(...))
fitControl.default <- trainControl(
method = "repeatedcv"
, number = 10
, repeats = 1
, verboseIter = TRUE
, summaryFunction = fivestats
, classProbs = TRUE
, allowParallel = TRUE)
set.seed(1984)
rpartGrid <- expand.grid(cp = seq(from = 0, to = 0.1, by = 0.001))
rparttree.fit.roc <- train(
churn ~ .
, data = training.dt
, method = "rpart"
, trControl = fitControl.default
, tuneGrid = rpartGrid
, metric = 'ROC'
, maximize = TRUE
)
添付の画像では、私のデータが表示されていますが、すでに一部のデータをchrから因子変数に変換しています。
私の問題が何であるかわかりません。データ全体を因子に変換する場合、たとえば変数total_airtime_outにはおそらく約9000の因子があります。
助けてくれてありがとう!
私があなたのエラーを再現することは正確には可能ではありませんが、私の知識に基づいた推測では、エラーメッセージはあなたが知る必要があるすべてを伝えます:
クラスレベルの少なくとも1つが有効なR変数名ではありません。これにより、変数名が次のように変換されるため、クラス確率が生成されるときにエラーが発生しますX0、X1。 有効なR変数名として使用できる因子レベルを使用してください。
鉱山を強調します。応答変数を見ると、そのレベルは_"0"
_および_"1"
_であり、これらはRでは有効な変数名ではありません(_0 <- "my value"
_は実行できません)。おそらく、応答変数のレベルの名前を次のように変更すると、この問題は解消されます
levels(training.dt$churn) <- c("first_class", "second_class")
this Q のとおり。
@einarの正解に加えて、因子レベルを変換するdplyr構文は次のとおりです。
training.dt %>%
mutate(churn = factor(churn,
levels = make.names(levels(churn))))
レベルは次のように基礎となるデータを変更するため、因子レベルのlabelsのみを変更することをわずかに好みます。
training.dt %>%
mutate(churn = factor(churn,
labels = make.names(levels(churn))))
同じ問題があり、trainControl()
にclassProbs = FALSE
を設定することで修正しました。これで問題が解決し、レベル0
と1
が維持されました