私はしばらくの間ada
Rパッケージを使用してきましたが、最近ではcaret
を使用しています。ドキュメントによると、caret
のtrain()
関数にはadaを使用するオプションが必要です。しかし、ada()
呼び出し内にあるのと同じ構文を使用すると、キャレットが私を怒らせます。
これは、wine
サンプルデータセットを使用したデモンストレーションです。
library(doSNOW)
registerDoSNOW(makeCluster(2, type = "SOCK"))
library(caret)
library(ada)
wine = read.csv("http://www.nd.edu/~mclark19/learn/data/goodwine.csv")
set.seed(1234) #so that the indices will be the same when re-run
trainIndices = createDataPartition(wine$good, p = 0.8, list = F)
wanted = !colnames(wine) %in% c("free.sulfur.dioxide", "density", "quality",
"color", "white")
wine_train = wine[trainIndices, wanted]
wine_test = wine[-trainIndices, wanted]
cv_opts = trainControl(method="cv", number=10)
###now, the example that works using ada()
results_ada <- ada(good ~ ., data=wine_train, control=rpart.control
(maxdepth=30, cp=0.010000, minsplit=20, xval=10), iter=500)
##this works, and gives me a confusion matrix.
results_ada
ada(good ~ ., data = wine_train, control = rpart.control(maxdepth = 30,
cp = 0.01, minsplit = 20, xval = 10), iter = 500)
Loss: exponential Method: discrete Iteration: 500
Final Confusion Matrix for Data:
Final Prediction
etc. etc. etc. etc.
##Now, the calls that don't work.
results_ada = train(good~., data=wine_train, method="ada",
control=rpart.control(maxdepth=30, cp=0.010000, minsplit=20,
xval=10), iter=500)
Error in train.default(x, y, weights = w, ...) :
final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, :
There were missing values in resampled performance measures.
2: In train.default(x, y, weights = w, ...) :
missing values found in aggregated results
###this doesn't work, either
results_ada = train(good~., data=wine_train, method="ada", trControl=cv_opts,
maxdepth=10, nu=0.1, iter=50)
Error in train.default(x, y, weights = w, ...) :
final tuning parameters could not be determined
In addition: Warning messages:
1: In nominalTrainWorkflow(dat = trainData, info = trainInfo, method = method, :
There were missing values in resampled performance measures.
2: In train.default(x, y, weights = w, ...) :
missing values found in aggregated results
Train()が追加の入力を必要としているのではないかと思いますが、スローされた警告では、何が欠落しているかについてのヒントは得られません。さらに、依存関係が欠落している可能性がありますが、そこに何があるべきかについてのヒントはありません。
_?train
_を検索し、ada
を検索すると次のように表示されます。
Method Value: ada from package ada with tuning parameters: iter, maxdepth, nu (classification only)
したがって、nu
パラメーターとmaxdepth
パラメーターが欠落している必要があります。
したがって、これは機能しているようです。
wineTrainInd <- wine_train[!colnames(wine_train) %in% "good"]
wineTrainDep <- as.factor(wine_train$good)
results_ada = train(x = wineTrainInd, y = wineTrainDep, method="ada")
results_ada
Boosted Classification Trees
5199 samples
9 predictors
2 classes: 'Bad', 'Good'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 5199, 5199, 5199, 5199, 5199, 5199, ...
Resampling results across tuning parameters:
iter maxdepth Accuracy Kappa Accuracy SD Kappa SD
50 1 0.732 0.397 0.00893 0.0294
50 2 0.74 0.422 0.00853 0.0187
50 3 0.747 0.437 0.00759 0.0171
100 1 0.736 0.411 0.0065 0.0172
100 2 0.742 0.428 0.0075 0.0173
100 3 0.748 0.442 0.00756 0.0158
150 1 0.737 0.417 0.00771 0.0184
150 2 0.745 0.435 0.00851 0.0198
150 3 0.752 0.449 0.00736 0.016
Tuning parameter 'nu' was held constant at a value of 0.1
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were iter = 150, maxdepth = 3 and nu
= 0.1.
そしてその理由は別の質問にあります:
caret :: train:model-generation-parametersを指定
train
が最適なチューニングパラメータ自体を見つけようとしているときに、チューニングパラメータを引数として渡したと思います。独自に定義したい場合は、グリッド検索用のパラメーターのグリッドを定義できます。
wine$good
のデータの種類は何ですか? factor
の場合は、そのように明示的に言及してみてください。
wine$good <- as.factor(wine$factor)
stopifnot(is.factor(wine$good))
理由:多くの場合、Rパッケージは分類シナリオと回帰シナリオを区別するのに役立つ必要があり、キャレット内にいくつかの一般的なコードがあり、演習を回帰問題として誤って識別している可能性があります(adaが分類のみを行うという事実を無視します)。
TuneGrid内にパラメータを含めてください
Grid <- expand.grid(maxdepth=25,nu=2,iter=100)
results_ada = train(good~., data=wine_train, method="ada",
trControl=cv_opts,tuneGrid=Grid)
これは機能します。