ウェブサイト検索

Caret パッケージを使用して R でモデルの精度を推定する方法


予測モデルを構築するときは、目に見えないデータに対するモデルの機能を評価する方法が必要です。

これは通常、テスト セットなどのモデルのトレーニングに使用されなかったデータを使用して精度を推定するか、相互検証を使用して行われます。 R のキャレット パッケージは、機械学習アルゴリズムの精度を推定するための多数の方法を提供します。

この投稿では、目に見えないデータでモデルのパフォーマンスを推定するための 5 つのアプローチを発見します。また、各メソッドのキャレット パッケージを使用して R のレシピにアクセスできるようになり、コピーして自分のプロジェクトに貼り付けることができます。

私の新しい本『Machine Learning Mastery With R』 でプロジェクトをキックスタートしましょう。これにはステップバイステップのチュートリアルR ソース コード ファイルが含まれています。すべての例。

始めましょう。

モデルの精度の推定

以前、テスト ハーネスのテスト オプションを構成する際にモデルの精度を考慮しました。詳細については、「機械学習アルゴリズムを評価する際に適切なテスト オプションを選択する方法」の投稿をご覧ください。

この投稿では、モデルの精度を推定するために使用できる 5 つの異なる方法を紹介します。

それらは次のとおりであり、それぞれについて順番に説明します。

  • データ分割
  • ブートストラップ
  • k 分割相互検証
  • k 分割相互検証の繰り返し
  • 1 つ抜き相互検証

一般に、私は反復 k 分割相互検証をお勧めしますが、特にデータ量や空間と時間の複雑さを考慮した場合、各方法にはそれぞれの特徴と利点があります。どのアプローチが問題に最も適しているかを検討してください。

データ分割

データ分割には、モデルの準備に使用される明示的なトレーニング データセットと、未確認データに対するモデルのパフォーマンスの評価に使用される未確認のテスト データセットにデータを分割することが含まれます。

これは、非常に大規模なデータセットがある場合に、テスト データセットから有意義なパフォーマンスの推定値を提供できる場合や、低速なメソッドを使用していてパフォーマンスの迅速な概算が必要な場合に便利です。

以下の例では、80% が Naive Bayes モデルのトレーニングに使用され、20% がモデルのパフォーマンスの評価に使用されるように、iris データセットを分割します。

R でのデータ分割:

# load the libraries
library(caret)
library(klaR)
# load the iris dataset
data(iris)
# define an 80%/20% train/test split of the dataset
split=0.80
trainIndex <- createDataPartition(iris$Species, p=split, list=FALSE)
data_train <- iris[ trainIndex,]
data_test <- iris[-trainIndex,]
# train a naive bayes model
model <- NaiveBayes(Species~., data=data_train)
# make predictions
x_test <- data_test[,1:4]
y_test <- data_test[,5]
predictions <- predict(model, x_test)
# summarize results
confusionMatrix(predictions$class, y_test)

ブートストラップ

ブートストラップ リサンプリングには、モデルを評価するためのデータセットからランダムなサンプルを (再選択して) 取得することが含まれます。全体として、結果はモデルのパフォーマンスの分散を示します。通常、多数のリサンプリング反復 (数千回または数十回) が実行されます。

次の例では、10 回のリサンプルを含むブートストラップを使用して、Naive Bayes モデルを準備します。

R でのデータ ブートストラップ:

# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="boot", number=100)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)

k 分割相互検証

k 分割相互検証方法には、データセットを k サブセットに分割することが含まれます。モデルが他のすべてのサブセットでトレーニングされている間、各サブセットが保持されます。このプロセスは、データセット内の各インスタンスの精度が決定され、全体的な精度の推定値が提供されるまで完了します。

これは、精度と k のサイズを推定し、推定のバイアス量を調整するための堅牢な方法であり、一般的な値は 3、5、7、10 に設定されます。

次の例では、10 分割交差検証を使用して、iris データセットの単純ベイズを推定します。

R での k 分割相互検証:

# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="cv", number=10)
# fix the parameters of the algorithm
grid <- expand.grid(.fL=c(0), .usekernel=c(FALSE))
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb", tuneGrid=grid)
# summarize results
print(model)

k 分割相互検証の繰り返し

データを k 分割に分割するプロセスは何度も繰り返すことができ、これは反復 k 分割相互検証と呼ばれます。最終的なモデルの精度は、繰り返し回数の平均として取得されます。

次の例では、3 回の繰り返しによる 10 分割相互検証を使用して、iris データセットの単純ベイズを推定します。

R で k 分割交差検証を繰り返す:

# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)

1 つ抜き相互検証

Leave One Out Cross Validation (LOOCV) では、データ インスタンスが除外され、トレーニング セット内の他のすべてのデータ インスタンスに基づいてモデルが構築されます。これがすべてのデータ インスタンスに対して繰り返されます。

次の例は、虹彩データセットで単純ベイズを推定する LOOCV を示しています。

R での 1 つ抜き相互検証を残す:

# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="LOOCV")
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)

まとめ

この投稿では、目に見えないデータに対するモデルの精度を推定するために使用できる 5 つの異なる方法を発見しました。

これらの方法は、データ分割、ブートストラップ、k 分割相互検証、反復 k 分割相互検証、および Leave One Out 相互検証です。

R のキャレット パッケージの詳細については、キャレット パッケージのホームページとキャレット パッケージの CRAN ページで確認できます。 Caret パッケージをマスターしたい場合は、パッケージの作者が書いた『Applied Predictive Modeling』というタイトルの本、特に過学習モデルに関する第 4 章をお勧めします。

関連記事