4

単純な GBM 分類モデルを実行して、ランダム フォレストと SVM に対するパフォーマンスのベンチマークを実行しようとしていますが、モデルのスコアを正しく取得するのに問題があります。エラーをスローしていませんが、予測はすべて NaN です。の乳がんデータを使用していますmlbench。コードは次のとおりです。

library(gbm)
library(mlbench)
library(caret)
library(plyr)
library(ada)
library(randomForest)

data(BreastCancer)
bc <- BreastCancer
rm(BreastCancer)

bc$Id <- NULL
bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))

index <- createDataPartition(bc$Class, p = 0.7, list = FALSE)
bc.train <- bc[index, ]
bc.test <- bc[-index, ]

model.gbm <- gbm(Class ~ ., data = bc.train, n.trees = 500)

pred.gbm <- predict(model.gbm, bc.test.ind, n.trees = 500, type = "response")

私が間違っていることを手伝ってくれる人はいますか?また、予測関数の出力を変換する必要がありますか? それが GBM 予測の問題であると思われることを読みました。ありがとう。

4

2 に答える 2

6

以前に因子変数を与える際に問題が発生しましたgbmClass変数を因子ではなく文字型にすることができます。

bc$Class <- as.factor(mapvalues(bc$Class, c("benign", "malignant"), c("0","1")))
bc$Class <- as.character(bc$Class)

コードはそこから正常に実行されるはずです。 bc.test(not bc.test.ind)を呼び出すようにしてくださいpredict

これらの変更を行った後に得られた予測値の概要を次に示します

> summary(pred.gbm)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.222   0.222   0.231   0.346   0.573   0.579 

set.seed()最後に、 を呼び出す前にシードを設定する (例: を使用) ことをお勧めしますcreateDataPartition()。そうしないと、コードを実行するたびに異なるトレーニング セットとテスト セットが取得されます。

于 2014-11-12T15:49:41.143 に答える