記事

モデルの精度の向上

評価指標(metric)を使って、機械学習モデルのパフォーマンスを調整します。

概要

モデルを評価して向上させるには、まず、異なるデータセットでそのパフォーマンスを確認します。各データセットでの測定指標から、モデルの精度に最も影響を及ぼすのはどの変更であるかがわかります。

一つの評価指標で、モデルのパフォーマンスについてすべてがわかることはありません。モデルを向上させるには、トレーニング用、バリデーション用、テスト用のデータセット間で測定指標(モデルのタイプによって、MLClassifierMetrics(英語)またはMLRegressorMetrics(英語))を比較します。例えば、画像分類モデルの作成の記事で説明した精度は、各データセットのclassificationError(英語)測定指標から得られます。

モデルを作成してテスト用データを読み込んだ後、プログラムでこれらの値にアクセスすることもできます。

print("Training Metrics\n", model.trainingMetrics)
print("Validation Metrics\n", model.validationMetrics)

let evaluationMetrics = model.evaluation(on: testData)
print("Evaluation Metrics\n", evaluationMetrics)

この場合、classificationError(英語)precisionRecall(英語)、および分類器の場合はconfusion(英語)、リグレッサーの場合はmaximumError(英語)rootMeanSquaredError(英語)など、いくつかの測定指標の出力を確認します。各データセットから得られたこれらの値を使って、モデルのどこを改善する必要があるか判断します。

モデルのトレーニング精度の向上

モデルのトレーニング精度が低い場合は、現在のモデル構成がデータの複雑さを捉えられないことを示しています。

トレーニングパラメータを調整してみます。画像データを扱っている場合、MLImageClassifierBuilder(英語) Playground UIでMax iterations(最大繰り返し回数)を2倍にします(デフォルト値は10)。

MLImageClassifierBuilder Playground UIでイテレーションの最大数が20に設定されていることを示すスクリーンショット。

自然言語データの場合は、別の基本アルゴリズムを試します(MLTextClassifier.ModelAlgorithmType(英語)を参照)。より一般的なタスクでは、MLClassifier(英語)サポートしている分類器のタイプ(英語)を参照)またはMLRegressor(英語)サポートしているリグレッサーのタイプ(英語)を参照)によって決定されたタイプ以外の基本モデルを使います。

モデルのバリデーション精度の向上

バリデーションセットでモデルの精度が低い場合、またはモデルをトレーニングするたびに精度が上下に変動する場合は、より多くのデータが必要です。すでに収集したサンプルからより多くのデータを生成することができます。この技術はデータの水増し(data augmentation)と呼ばれます。画像データの場合、トリミング、回転、ぼかし、露出補正などの操作を組み合わせて、一つの画像から複数のサンプルを作成できます。

1枚のゾウの画像が、トリミング、回転、ぼかし、露出補正などの拡張を適用することによって多くの画像になることを示す図。

また、多くのデータがあっても、バリデーションの精度がトレーニングの精度と比較して大幅に低下する場合があります。この場合はモデルが過学習(overfitting)になっています。これは、トレーニングセットについて、ほかのサンプルには一般的に適用できない細部まで学習しすぎてしまう現象です。この場合は、トレーニングイテレーションの数を減らし、モデルがトレーニングデータについて学習しすぎないようにする必要があります。

モデルの評価精度の向上

テストデータでのモデルの精度がトレーニングデータやバリデーションデータより低い場合は、通常、モデルのトレーニングに使ったデータの種類と、評価のために提供しているテスト用データとの間に有意な差があることを示します。

例えば、屋内で撮影した多数の猫の画像を使ってMLImageClassifier(英語)をトレーニングしたけれども、テストでは屋外の猫の画像ばかりだった、という場合です。明るさ、露出、背景が異なるため、テストデータでよい結果は得られないでしょう。人間の目には明らかな画像の違いでも、モデルにとっては、十分なトレーニングデータがないと判断が難しい場合があります。

これを修正するには、トレーニングセットで、より多様なデータを提供します。一般に、サンプルが多いほどパフォーマンスが向上しますが、テストデータと同じくらい多様なサンプルをモデルに見せることも重要です。

関連項目

モデルの精度

struct MLClassifierMetrics(英語)

分類器のパフォーマンスを評価するための評価指標。

struct MLRegressorMetrics(英語)

リグレッサーのパフォーマンスを評価するための評価指標。