モデルのクロス検証
この記事では、Azure Machine Learning デザイナーのモデルのクロス検証コンポーネントを使用する方法について説明します。 "クロス検証" は、データセットの変動性と、そのデータによりトレーニングされたモデルの信頼性の両方を評価するために機械学習でよく使用される重要な手法です。
モデルのクロス検証コンポーネントは、トレーニングしていない分類モデルまたは回帰モデルと共に、ラベルが付けられたデータセットを入力として受け取ります。 これは、データセットをいくつかのサブセット ("フォールド") に分割し、各フォールドでモデルを構築してから、各フォールドの正確性の統計セットを返します。 すべてのフォールドについて正確性の統計を比較することで、データ セットの品質を判断できます。 さらに、モデルがデータの変動の影響を受けやすいかどうかも把握できます。
モデルのクロス検証では、データセットの予測結果と確率も返されるため、予測の信頼性を評価できます。
クロス検証のしくみ
クロス検証では、トレーニング データをフォールドにランダムに分割します。
データセットをまだパーティション分割していない場合、アルゴリズムの既定値は 10 フォールドになります。 データセットを異なる数のフォールドに分割するには、パーティションとサンプルコンポーネントを使用して、使用するフォールドの数を指定します。
フォールド 1 のデータは、検証に使用するためにコンポーネントにより確保されます (これは、ホールドアウト フォールド とも呼ばれます)。残りのフォールドがモデルのトレーニングに使用されます。
たとえば、フォールドを 5 個作成した場合、コンポーネントによってクロス検証時に 5 つのモデルが生成されます。 コンポーネントによって、5 分の 4 のデータを使用して各モデルのトレーニングが行われます。 各モデルは、残りの 5 分の 1 のデータに対してテストされます。
各フォールドのモデルのテスト中に、コンポーネントによって複数の正確性の統計が評価されます。 コンポーネントによってどの統計が使用されるかは、評価するモデルの種類によって異なります。 分類モデルと回帰モデルの評価には、異なる統計が使用されます。
すべてのフォールドの構築と評価のプロセスが完了すると、モデルのクロス検証によって、すべてのデータについて一連のパフォーマンス メトリックとスコア付け結果が生成されます。 これらのメトリックを確認することで、各フォールドの正確性の高低がわかります。
クロス検証の利点
モデルを評価するための別の一般的な方法として、データの分割を使用してデータをトレーニング セットとテスト セットに分割し、トレーニング データに対してモデルを検証する方法もあります。 しかし、クロス検証にはいくつかの利点があります。
クロス検証では、より多くのテスト データが使用されます。
クロス検証では、より大きなデータ領域内で指定のパラメーターを使用してモデルのパフォーマンスを測定します。 つまり、クロス検証では、トレーニングと評価の両方で、トレーニング データセットの一部ではなく全体が使用されます。 これに対し、ランダム分割から生成されたデータを使用してモデルを検証する場合、通常は、使用可能なデータの 30% 以下のみに対してモデルを評価します。
ただしクロス検証では、大規模なデータセットでモデルを複数回トレーニングし、検証するので、計算量が非常に多くなります。 また、ランダム分割での検証に比べてかかる時間が大幅に増加します。
クロス検証では、データセットとモデルの両方が評価されます。
クロス検証では、モデルの正確性が測定されるだけではありません。 データセットがどの程度代表的であるかと、モデルがデータの変動にどの程度影響を受けやすいかについての理解も得られます。
モデルのクロス検証を使用する方法
データセットが大きい場合、クロス検証の実行に時間がかかることがあります。 そのため、モデルのクロス検証は、自分のモデルをビルドおよびテストするときの初期段階で使用することをお勧めします。 この段階では、(計算時間が許容可能な範囲であれば) モデル パラメーターの適合度を評価できます。 その後、モデルのトレーニング コンポーネントとモデルの評価モジュールにより、設定したパラメーターを使用してモデルのトレーニングと評価を行えます。
このシナリオでは、モデルのクロス検証を使用して、モデルのトレーニングとテストの両方を行います。
モデルのクロス検証コンポーネントをパイプラインに追加します。 これは、Azure Machine Learning デザイナーの [Model Scoring & Evaluation]\(モデルのスコアリングと評価\) カテゴリにあります。
分類モデルまたは回帰モデルの出力を接続します。
たとえば、分類に 2 クラス ブースト デシジョン ツリーを使用する場合は、モデルに必要なパラメーターを構成します。 次に、分類器の [Untrained model]\(未トレーニングのモデル\) ポートのコネクタを、モデルのクロス検証の対応するポートにドラッグします。
ヒント
モデルのクロス検証では評価の一環としてモデルが自動的にトレーニングされるため、モデルのトレーニングを行う必要はありません。
モデルのクロス検証の [Dataset]\(データセット\) ポートに、ラベル付けされたトレーニング データセットを接続します。
[モデルのクロス検証] の右パネルで、 [列の編集] をクリックします。 クラス ラベルまたは予測可能な値が含まれる単一の列を選択します。
同じデータに対する連続した実行の間でクロス検証の結果を繰り返すことができるようにするには、 [Random seed]\(ランダム シード\) パラメーターの値を設定します。
パイプラインを送信します。
レポートの説明については、「結果」セクションを参照してください。
結果
すべての反復が完了すると、モデルのクロス検証によってデータセット全体のスコアが作成されます。 また、モデルの品質評価に使用できるパフォーマンス メトリックも作成されます。
スコア付け結果
コンポーネントの最初の出力では、いくつかの予測値および関連する確率と共に、各行のソース データが提供されます。
結果を表示するには、パイプラインで、モデルのクロス検証コンポーネントを右クリックします。 [Visualize Scored results]\(スコア付けされた結果を視覚化\) を選択します。
新しい列名 | 説明 |
---|---|
スコア付けラベル | この列は、データセットの末尾に追加されます。 ここには、各行の予測値が含まれます。 |
スコア付け確率 | この列は、データセットの末尾に追加されます。 [スコア付けラベル] の値の推定確率を示します。 |
フォールド番号 | クロス検証中にデータの各行が割り当てられたフォールドの 0 から始まるインデックスを示します。 |
評価結果
2 番目のレポートはフォールドによってグループ化されます。 実行中、モデルのクロス検証によって、トレーニング データが n 個のフォールド (既定では 10) にランダムに分割されることに留意してください。 データセットでの各反復で、モデルのクロス検証によって、1 つのフォールドが検証データセットとして使用されます。 残りの n-1 個のフォールドが、モデルのトレーニングに使用されます。 各 n モデルは、他のすべてのフォールド内のデータに対してテストされます。
このレポートでは、フォールドはインデックス値によって昇順に一覧表示されます。 他の列を並べ替えるには、結果をデータセットとして保存します。
結果を表示するには、パイプラインで、モデルのクロス検証コンポーネントを右クリックします。 [Visualize Evaluation results by fold]\(フォールドでの評価結果を視覚化\) を選択します。
列名 | 説明 |
---|---|
フォールド番号 | 各フォールドの識別子。 5 つのフォールドを作成した場合、データのサブセットが 5 つあり、0 から 4 の番号が付けられています。 |
フォールドの例の数 | 各フォールドに割り当てられた行の数。 これらはほぼ同じになるはずです。 |
また、評価するモデルの種類に応じて、フォールドごとに次のメトリックが含まれます。
分類モデル:精度、再現率、F スコア、AUC、正確性
回帰モデル:平均絶対誤差、二乗平均平方根誤差、相対絶対誤差、相対二乗誤差、および決定係数
テクニカル ノート
データセットは、クロス検証に使用する前に正規化することをお勧めします。
モデルのクロス検証は、ランダムに分割されたデータセットを使用してモデルを検証する場合よりも計算量がはるかに多く、完了までに時間がかかります。 この理由は、モデルのクロス検証ではモデルを複数回トレーニングし、検証するためです。
クロス検証を使用してモデルの正確性を測定する場合、データセットをトレーニング セットとテスト セットに分割する必要はありません。
次のステップ
Azure Machine Learning で使用できる一連のコンポーネントを参照してください。