ウェブサイト検索

Caret R パッケージを使用してモデルを比較し、最適なものを選択する


Caret R パッケージを使用すると、さまざまなモデル タイプを簡単に構築し、そのパラメータを調整できます。

多くのモデル タイプを作成して調整した後、運用環境での予測に使用できるように、最適なモデルを知り、選択する必要がある場合があります。

この投稿では、caret R パッケージを使用して複数のモデルの結果を比較する方法を説明します。

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

始めましょう。

機械学習モデルを比較する

問題に取り組んでいると、1 つまたは少数の優れたパフォーマンスのモデルに落ち着きます。それぞれのパラメータを調整した後、モデルを比較して、どのモデルのパフォーマンスが最も優れているか、最もパフォーマンスが低いかを確認する必要があります。

モデルの広がりを把握することは役に立ちます。おそらく 1 つは改善できるかもしれませんし、他のモデルよりも明らかにパフォーマンスが悪いモデルの作業を中止することもできます。

以下の例では、ピマ インディアンの糖尿病データセット内の 3 つの高度な機械学習モデルを比較します。このデータセットは医療報告のコレクションから要約されたもので、5 年以内の患者の糖尿病の発症を示しています。

データセットの詳細については、こちらをご覧ください。

  • データセット ファイル。
  • データセットの詳細

構築および調整された 3 つのモデルは、学習ベクトル量子化 (LVQ)、確率的勾配ブースティング (勾配ブースト マシンまたは GBM とも呼ばれます)、およびサポート ベクター マシン (SVM) です。各モデルは自動的に調整され、10 分割相互検証を 3 回繰り返して評価されます。

乱数シードは、各アルゴリズムが同じデータ パーティションを取得して繰り返すことを保証するために、各アルゴリズムがトレーニングされる前に設定されます。これにより、最終結果で同一のものを比較できるようになります。あるいは、この懸念を無視して、ランダム性を使用してデータ分割の変動を制御し、繰り返しの数を 30 または 100 に増やすこともできます。

モデルがトレーニングされ、それぞれに最適なパラメーター構成が見つかると、最良の各モデルからの精度結果が収集されます。各「勝利」モデルには 30 件の結果があります (10 分割相互検証を 3 回繰り返した)。結果を比較する目的は、モデル間の精度分布 (30 個の値) を比較することです。

これは 3 つの方法で行われます。分布はパーセンタイルの観点から要約されます。分布は箱ひげ図としてまとめられ、最後に分布はドット プロットとしてまとめられます。

Caret R パッケージを使用してモデルの結果を比較する例:

# load the library
library(mlbench)
library(caret)
# load the dataset
data(PimaIndiansDiabetes)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the LVQ model
set.seed(7)
modelLvq <- train(diabetes~., data=PimaIndiansDiabetes, method="lvq", trControl=control)
# train the GBM model
set.seed(7)
modelGbm <- train(diabetes~., data=PimaIndiansDiabetes, method="gbm", trControl=control, verbose=FALSE)
# train the SVM model
set.seed(7)
modelSvm <- train(diabetes~., data=PimaIndiansDiabetes, method="svmRadial", trControl=control)
# collect resamples
results <- resamples(list(LVQ=modelLvq, GBM=modelGbm, SVM=modelSvm))
# summarize the distributions
summary(results)
# boxplots of results
bwplot(results)
# dot plots of results
dotplot(results)

以下はモデルごとの分布をまとめた結果の表です。

Models: LVQ, GBM, SVM 
Number of resamples: 30 

Accuracy 
      Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
LVQ 0.5921  0.6623 0.6928 0.6935  0.7273 0.7922    0
GBM 0.7013  0.7403 0.7662 0.7665  0.7890 0.8442    0
SVM 0.6711  0.7403 0.7582 0.7651  0.7890 0.8961    0

Kappa 
       Min. 1st Qu. Median   Mean 3rd Qu.   Max. NA's
LVQ 0.03125  0.1607 0.2819 0.2650  0.3845 0.5103    0
GBM 0.32690  0.3981 0.4638 0.4663  0.5213 0.6426    0
SVM 0.21870  0.3889 0.4167 0.4520  0.5003 0.7638    0

どちらのアルゴリズムが優れているかについて強く主張する必要がある場合は、統計的仮説検定を使用して、結果の違いが有意であることを統計的に示すこともできます。

結果が正規分布している場合は Student t 検定、分布が不明な場合は順位和検定のようなものです。

まとめ

この投稿では、パラメータが最適化された後でも、caret R パッケージを使用して複数の異なるモデルの結果を比較する方法を発見しました。表、箱ひげ図、ドット プロットという 3 つの方法で結果を比較できることを確認しました。

この投稿の例はスタンドアロンなので、簡単にコピーして独自のプロジェクトに貼り付け、問題に合わせて調整できます。

関連記事