This video goes over the topics we are going to cover in this lecture: cross-validation and model selection. Also, it gives a big-picture overview discussing...
相互検証について詳しく説明する前に、ハイパーパラメータについて少し説明しましょう。この概念についてはすでによく知っているかもしれませんが、そうでない場合でも、これは有益な要約として役立ちます。ハイパーパラメータは、モデルまたはアルゴリズムの調整パラメータまたは設定と考えることができます。これらは、モデルのパフォーマンスを最適化するために手動で調整するオプションです。これを説明するために、ノンパラメトリック モデルである K 最近傍分類器を考えてみましょう。
This video recaps the concept of hyperparameters using k-nearest neighbors and logistic regression as examples.-------This video is part of my Introduction o...
このビデオでは、モデル評価のための相互検証のトピックを詳しく掘り下げます。相互検証は通常、ハイパーパラメーターの調整やモデルの選択と組み合わせて使用されます。ただし、理解を深めるために、モデル選択におけるその適用について説明する前に、まずモデル評価のみのコンテキストで k 分割相互検証がどのように機能するかを調べてみましょう。
この説明では、ハイパーパラメーター調整を考慮せずに、モデル評価のための k 分割相互検証に焦点を当てていることに注意することが重要です。このシナリオでは、相互検証を通じて取得されたパフォーマンス推定値は、モデルの汎化パフォーマンスの推定値と考えることができます。固定ハイパーパラメータを使用してデータセット全体で新しいモデルをトレーニングすることで、実用的な最終モデルを取得できます。独立したテスト セットを使用してモデルのパフォーマンスをさらに評価することもできますが、ハイパーパラメーターの調整が含まれていない場合は、相互検証のパフォーマンスによって汎化パフォーマンスの信頼できる推定値がすでに提供されているため、多くの場合は不要です。
ただし、計算の複雑さのため、LOOCV は大規模なデータセットには適用できない場合があります。トレーニング プロセスを n 回繰り返す必要があるため、計算上の負担が大きくなります。このような場合、多くの場合、適度な値の k を使用した k 分割交差検証が好まれます。
モデル評価のための k 分割交差検証について説明したので、モデル選択におけるその応用について簡単に説明しましょう。モデル選択のコンテキストでは、目標は、通常は異なるハイパーパラメーター設定を持つ候補モデルのセットから最適なモデルを特定することです。相互検証を使用すると、各モデルのパフォーマンスを推定し、選択プロセスを容易にすることができます。
一般的なアプローチは、モデルごとに k 分割相互検証を実行し、すべての反復にわたる平均パフォーマンスを計算し、結果を比較することです。平均パフォーマンスが最も高いモデルが最良の選択とみなされます。このアプローチは、データの変動の影響を軽減するのに役立ち、モデルのより堅牢な評価を提供します。
This video introduces the concept of k-fold cross-validation and explains how it can be used for evaluating models. Also, it discusses why 10-fold cross-vali...
この問題に対処するには、k 分割相互検証を実行する前にデータセットをシャッフルすることをお勧めします。これは、初期化中に k 分割オブジェクト内でデータセットを直接シャッフルすることで実現できます。ランダムな状態を設定してシャッフルすることにより、トレーニング フォールドと検証フォールドでより適切なラベルの組み合わせが得られます。
さらに、一般に、クラス ラベルの割合が各フォールド全体で一貫していることを確認して、分割を階層化することをお勧めします。これは、通常の k 分割クラスの代わりに層別 k 分割クラスを使用することで実現できます。層別 k 分割を使用すると、各分割内のラベルの割合は元のデータセットのラベルの割合と一致します。
k 分割オブジェクトと層化 k 分割オブジェクトの一般的な動作について説明しました。次に、それらを実際に適用する方法を見てみましょう。例として、決定木分類器と虹彩データセットを使用します。まず、train_test_split メソッドを使用して、虹彩データセットを 85% のトレーニング データと 15% のテスト データに分割します。これにより層別分割が確実に行われます。
次に、交差検証の実践ガイドに関する Ron Kohavi の論文で推奨されているように、層別 k 分割オブジェクトを k=10 で初期化します。次に、手動アプローチを採用し、分割法を使用してトレーニング インデックスと検証インデックスを反復することにより、k 分割相互検証を実行します。各反復内で、トレーニングフォールドを使用して新しい決定木分類子を適合させ、検証フォールドのラベルを予測します。各反復の精度を計算し、結果をプレースホルダー変数に保存します。
This video explains how we can evaluate models via k-fold cross-validation in Python using scikit-learn. A later video will show how we can use k-fold cross-...
前の 2 つのビデオでは、モデル評価のための k 分割相互検証について説明し、いくつかのコード例を検討しました。ここでは、モデル選択のための k 分割交差検証に焦点を当てます。モデル選択は、ハイパーパラメーターを調整し、最もパフォーマンスの高いハイパーパラメーター設定を選択できるため、k 分割相互検証の一般的な使用例としてよく使用されます。
選択の偏りを避けるためには、独立したテスト セットを用意することが重要です。場合によっては、ハイパーパラメーター設定が k 分割交差検証で偶然に良好なパフォーマンスを示し、過度に楽観的な推定値が得られることがあります。独立したテスト セットを使用することで、モデルのパフォーマンスのより信頼性の高い評価を得ることができます。
この手順は、モデル選択のための k 分割相互検証を要約しています。ここで、モデル選択またはハイパーパラメータ調整ステップ中にハイパーパラメータを選択するためのいくつかのテクニックを見てみましょう。
一般的な方法の 1 つはグリッド検索であり、今でも広く使用されています。グリッド検索は、考慮すべきハイパーパラメータ値のリストを定義する徹底的な検索方法です。たとえば、k 最近傍の場合、3、5、6、7、8、9 などの値のリストを指定して k の値を調整できます。グリッド検索では、それぞれのモデルのパフォーマンスを評価します。 k 分割交差検証を使用したハイパーパラメータの組み合わせ。
After talking about k-fold cross-validation for model *evaluation* in the last two videos, we are now going to talk about k-fold cross-validation for model *...
In this video, we look at code examples for using k-fold cross-validation for model selection. In particular, we are looking at GridSearchCV and RandomizedSe...
This video suggests the 1-standard error method as a tie breaker for selecting one model from a set of similarly well performing models.-------This video is ...
This video goes over a code example for applying the 1-standard error method, which can be used as a tie breaker for selecting one model from a set of simila...
ただし、感謝祭週間のため、本日の講義は通常より短くなりますのでご了承ください。興味のある方は、講義ノートでさらに詳しい説明をご覧ください。また、5 x 2 F 検定やさまざまな t 検定手順などの追加の統計検定もカバーしています。これらのトピックは調べることができませんが、知的好奇心を満たすのに役立ちます。
This first video goes over the model and algorithm comparison-related topics that are coved in Lecture 11.More details in my article "Model Evaluation, Model...
マクネマー検定は、典型的な仮説検定手順に従います。帰無仮説と対立仮説を定義します。帰無仮説は 2 つのモデルのパフォーマンスが等しいと仮定しますが、対立仮説はそれらのパフォーマンスが異なることを示唆します。カイ二乗分布を近似するカイ二乗検定統計量を計算します。検定統計量は (b - c)^2 / (b + c) として計算されます。この検定統計量に基づいて、帰無仮説が真であると仮定して p 値を計算します。 p 値は、帰無仮説の下で、指定された検定統計量またはより極端な値が観察される確率を表します。
帰無仮説を棄却するかどうかを決定するには、p 値を選択した有意水準 (たとえば、0.05) と比較します。 p 値が有意水準より小さい場合、帰無仮説は棄却され、2 つのモデルのパフォーマンスは等しくないと結論付けられます。逆に、p 値が有意水準より大きい場合は、帰無仮説を棄却できず、2 つのモデルのパフォーマンスが等しいと想定されます。
連続性補正は、2x2 分割表のデータが離散的である一方で、カイ二乗分布は連続分布であるという問題に対処するために導入されました。分子の差の絶対値から 1 を引くことにより、連続性補正により p 値のより適切な近似が得られます。ただし、連続性補正の使用は必ずしも必要なわけではなく、特定のコンテキストとデータに依存することに注意することが重要です。
This video introduces McNemar's test, which is a nonparametric statistical test for comparing the performance of two models with each other on a given test s...
10.1 相互検証講義概要 (L10: モデル評価 3)
10.1 相互検証講義概要 (L10: モデル評価 3)
こんにちは、みんな!先週、私たちはモデルの評価という重要なトピックを掘り下げ、モデルのパフォーマンスの評価や信頼区間の構築などのさまざまな側面について議論しました。ただし、カバーする必要のある他の重要な概念があるため、モデル評価の探求はまだ完了していません。実際には、特定のモデルを評価するだけではありません。また、最初に評価できる適切なモデルを見つける必要もあります。
この講義では、ハイパーパラメータを調整する方法や、異なるハイパーパラメータ設定から得られるモデルを比較する方法など、相互検証手法に焦点を当てます。このプロセスはモデル選択として知られています。今日の主な焦点は相互検証です。
今週は取り上げるトピックがたくさんありますが、各トピックは比較的短いのでご安心ください。この講義と次回の講義で説明する内容の概要を説明します。
モデル評価のための相互検証手法: モデルのパフォーマンスを評価するための K 分割相互検証とその他の関連手法を検討します。 Python と scikit-learn を使用したコード例を示します。
モデル選択のための相互検証: ハイパーパラメーター調整を含む、最適なモデルを選択するために相互検証を使用する方法について説明します。 scikit-learnでグリッド検索とランダム化検索を使ってモデル選択を行う方法を紹介します。
倹約の法則: K 分割相互検証の考え方とモデルをシンプルに保つ原則を組み合わせた、1 標準誤差法の概念を探ります。また、1 つの標準誤差法と、前の講義で説明した反復ホールドアウト法に似た反復 K 分割相互検証のコード例も示します。
相互検証について詳しく説明する前に、ハイパーパラメーターについて簡単に再紹介し、モデル パラメーターとの違いを明確にしましょう。次に、モデル評価のための K 分割交差検証およびその他の関連技術について説明します。 Python と scikit-learn を使用して、これらの手法の実際の実装を検討します。最後に、モデル評価とモデル選択の違いを強調しながら、モデル選択の相互検証に議論を拡張します。
また、広範な調査と読書に基づいて概要を作成し、特定のタスクと問題に基づいてさまざまなテクニックを分類しました。この分類は、さまざまなテクニックをナビゲートし、それぞれをいつ使用するかを理解するのに役立ちます。概要で提供される推奨事項は今後の講義でさらに議論される可能性があることに注意することが重要です。
以上が講義の概要です。ここで、ハイパーパラメータの再紹介に進み、その後、相互検証について詳しく見てみましょう。
10.2 ハイパーパラメータ (L10: モデル評価 3)
10.2 ハイパーパラメータ (L10: モデル評価 3)
相互検証について詳しく説明する前に、ハイパーパラメータについて少し説明しましょう。この概念についてはすでによく知っているかもしれませんが、そうでない場合でも、これは有益な要約として役立ちます。ハイパーパラメータは、モデルまたはアルゴリズムの調整パラメータまたは設定と考えることができます。これらは、モデルのパフォーマンスを最適化するために手動で調整するオプションです。これを説明するために、ノンパラメトリック モデルである K 最近傍分類器を考えてみましょう。
ノンパラメトリック モデルには、パラメトリック モデルとは異なり、事前定義された構造がありません。代わりに、トレーニング セットに依存してモデルの構造を定義します。たとえば、K 最近傍法では、モデルのパラメーターは本質的にトレーニング サンプルそのものです。したがって、例を追加または削除するなどしてトレーニング セットを変更すると、モデルの構造に大きな影響を与える可能性があります。ノンパラメトリック モデルの別の例はデシジョン ツリーです。この場合、ツリー内の分割数は、事前定義された構造ではなく、トレーニング サンプルに依存します。
ここで、K 最近傍アルゴリズムのハイパーパラメータに特に焦点を当ててみましょう。これらのハイパーパラメータには、近傍数 (K) や使用される距離メトリック (マンハッタン距離やユークリッド距離など) などのオプションが含まれます。これらのオプションはモデルを実行する前に設定する必要があり、データから学習されません。このコースでは、ハイパーパラメーターの調整を支援するグリッド検索やランダム化検索などのテクニックを学びます。ただし、ハイパーパラメータのさまざまな値を試すことは、それらをデータに適合させるプロセスではなく、最適な設定を見つけるための反復的な実験であることに注意することが重要です。
より多くの例を提供するために、scikit-learn のハイパーパラメーターの定義を参照してください。決定木分類器を初期化する場合、ハイパーパラメータには、不純物尺度 (Gini やエントロピーなど)、事前枝刈りのための木の深さ、リーフあたりの最小サンプル数などを含めることができます。これらはすべてハイパーパラメータとみなされます。
特に、すべてのオプションがハイパーパラメータであるわけではありませんが、すべてのハイパーパラメータがオプションです。たとえば、モデル内のランダム性を決定するランダム状態またはランダム シードはハイパーパラメーターではありません。パフォーマンスを向上させるためにランダム シードを変更することは不公平であるとみなされるため、モデルを改善するためにこれを操作すべきではありません。
ここで、ハイパーパラメータとモデル パラメータを対比してみましょう。たとえば、ロジスティック回帰について簡単に見てみましょう。これは線形モデルとして見なされ、古典的な機械学習と深層学習の両方への入門として役立ちます。ロジスティック回帰では、入力はバイアスを考慮した切片項を含む特徴です。特徴の数に基づいて決定されるモデルの重みは、モデルの構造を形成します。最初に、これらの重みはゼロまたは小さなランダム値に設定でき、その後、損失関数 (線形回帰の平均二乗誤差など) を最小化するために繰り返し更新されます。
ロジスティック回帰では、非線形関数 (通常はロジスティック関数またはシグモイド関数) が正味入力 (入力の加重和) に適用されて、正味入力を 0 から 1 までの範囲に押しつぶします。この出力は、二値分類におけるクラス メンバーシップ確率として解釈できます。重みは、損失を最小限に抑えるように調整されます。損失は、予測されたクラス メンバーシップ確率を真のクラス ラベル (0 または 1) と比較することによって計算されます。ロジスティック回帰では、過学習を防ぐために重みのサイズに基づいてペナルティ項を追加する L1 または L2 正則化などの正則化手法も採用されています。正則化強度 (ラムダ) は、ユーザーが設定する必要があるハイパーパラメーターです。
要約すると、ロジスティック回帰の重み (W) などのモデル パラメーターはトレーニング データから学習されますが、正則化強度 (ラムダ) などのハイパーパラメーターはユーザーによって決定され、データから学習されません。モデル パラメーターは、トレーニング プロセス中にパフォーマンスを最適化するために更新されるモデルの内部変数です。一方、ハイパーパラメーターは、モデルの動作を制御する外部設定であり、トレーニング前に設定する必要があります。
ハイパーパラメータの最適な値を見つけるプロセスは、ハイパーパラメータ調整として知られています。これはモデルのパフォーマンスに大きな影響を与える可能性があるため、機械学習における重要なステップです。ただし、最適なハイパーパラメータ値を見つけるのは簡単な作業ではなく、多くの場合、さまざまな組み合わせの実験と評価が必要になります。
ハイパーパラメータ調整の一般的なアプローチの 1 つはグリッド検索です。グリッド検索では、ハイパーパラメータごとに事前定義された値のセットが指定され、可能なすべての組み合わせが相互検証を使用して評価されます。相互検証は、データを複数のサブセット (フォールド) に分割し、一部のフォールドでモデルをトレーニングし、残りのフォールドで評価することによってモデルのパフォーマンスを評価するために使用される手法です。これは、目に見えないデータに対するモデルのパフォーマンスを推定するのに役立ち、過剰適合のリスクを軽減します。
もう 1 つのアプローチはランダム化検索であり、ハイパーパラメータ値のランダムな組み合わせが指定された分布からサンプリングされます。これは、考えられるすべての組み合わせを徹底的に評価することなく、より広範囲の値を探索できるため、ハイパーパラメーターの検索空間が大きい場合に役立ちます。
グリッド検索とランダム化検索に加えて、ハイパーパラメータ調整には、確率モデルを使用して検索プロセスをガイドするベイズ最適化や、自然選択のプロセスを模倣して最良のセットを進化させる遺伝的アルゴリズムなど、より高度なハイパーパラメータ調整手法があります。ハイパーパラメータ。
ハイパーパラメータ調整は、特に複雑なモデルや大規模なデータセットの場合、計算コストが高くなる可能性があることに注意してください。したがって、利用可能なデータを最も効率的に使用するために、相互検証などの手法と組み合わせて実行されることがよくあります。
ハイパーパラメータはトレーニング前に設定する必要があるモデルの設定またはオプションであり、モデル パラメータはトレーニング中にデータから学習される内部変数です。ハイパーパラメータ調整は、これらの設定に最適な値を見つけるプロセスであり、モデルのパフォーマンスを最適化するために重要です。ハイパーパラメータ調整には、グリッド検索、ランダム化検索、ベイズ最適化、遺伝的アルゴリズムなどの手法が一般的に使用されます。
モデル評価用 10.3 K 倍 CV (L10: モデル評価 3)
モデル評価用 10.3 K 倍 CV (L10: モデル評価 3)
このビデオでは、モデル評価のための相互検証のトピックを詳しく掘り下げます。相互検証は通常、ハイパーパラメーターの調整やモデルの選択と組み合わせて使用されます。ただし、理解を深めるために、モデル選択におけるその適用について説明する前に、まずモデル評価のみのコンテキストで k 分割相互検証がどのように機能するかを調べてみましょう。
まず、モデル評価のための k 分割相互検証には、データセットを検証分割とトレーニング用の残りのデータ セグメントに分割することが含まれます。典型的な例として、5 分割相互検証を考えてみましょう。データセットは、検証フォールド (青で表示) と 4 つのトレーニングフォールド (異なる色で表示) に分割されます。モデルはトレーニング フォールドでトレーニングされ、検証フォールドで評価され、パフォーマンス メトリクスが得られます。 1 つの検証セットのみが使用されるホールドアウト法とは異なり、k 分割交差検証では、検証分割がデータのさまざまなセグメントにわたって回転されます。これにより、すべてのデータ ポイントが評価に確実に利用されます。 5 分割相互検証の場合、5 つの異なる検証分割があり、5 回の反復が実行されます。各反復でパフォーマンス測定値が生成されます。全体的なパフォーマンスをレポートする場合、一般的なアプローチは、すべての反復にわたるパフォーマンス値を平均することです。
この説明では、ハイパーパラメーター調整を考慮せずに、モデル評価のための k 分割相互検証に焦点を当てていることに注意することが重要です。このシナリオでは、相互検証を通じて取得されたパフォーマンス推定値は、モデルの汎化パフォーマンスの推定値と考えることができます。固定ハイパーパラメータを使用してデータセット全体で新しいモデルをトレーニングすることで、実用的な最終モデルを取得できます。独立したテスト セットを使用してモデルのパフォーマンスをさらに評価することもできますが、ハイパーパラメーターの調整が含まれていない場合は、相互検証のパフォーマンスによって汎化パフォーマンスの信頼できる推定値がすでに提供されているため、多くの場合は不要です。
ここで、k 分割相互検証のいくつかの重要な特性を調べてみましょう。検証フォールドは重複していません。これは、異なる反復にわたって検証フォールド内のデータ ポイント間に重複がないことを意味します。すべてのデータ ポイントがテストに利用され、総合的な評価が保証されます。この用語は同じ意味で使用できるため、一部の研究者は検証フォールドをテスト フォールドと呼ぶ場合があります。
一方、トレーニング フォールドは重なっています。これは、トレーニング フォールドが互いに独立していないことを意味します。特定の反復では、トレーニング データに他の反復からのトレーニング データと重複するサンプルが含まれる場合があります。この特性により、さまざまなトレーニング セットに基づいて分散を推定することが困難になりますが、これはモデルのパフォーマンスの変動を理解するために重要です。
もう 1 つの注目すべき点は、k の値 (フォールド数) を減らすと、パフォーマンスの見積もりがより悲観的になることです。これは、各フォールドでトレーニングに利用できるデータ ポイントが少ないため、モデルのフィッティング能力が制限されるためです。パフォーマンスの悲観論に関する以前の説明で説明したように、パフォーマンスの見積もりは、データが保留されているため、より悲観的になります。
k 分割相互検証の 2 つの特殊なケースを見てみましょう。 k が 2 に等しい場合、2 分割相互検証が行われますが、これはホールドアウト法とは異なります。 2 分割相互検証では、データセットがちょうど半分に分割され、それぞれの半分が異なる反復でのトレーニングに使用されます。対照的に、ホールドアウト法では任意の分割比率が可能であり、反復間の回転は必要ありません。ただし、k 分割相互検証の各ラウンドは、データセットが正確に 2 つの半分に分割されるホールドアウト法の特殊なケースと考えることができます。
もう 1 つの特殊なケースは、k が n に等しい場合であり、leave-one-out 相互検証 (LOOCV) が行われます。 LOOCV では、各反復で 1 つのデータ ポイントが検証セットとして除外され、残りの n-1 データ ポイントがトレーニングに使用されます。このアプローチは LOOCV とも呼ばれ、検証セットは 1 つのデータ ポイントのみで構成されます。
Hawkinsらによって行われた研究。 (2003) は、リーブワンアウト相互検証 (LOOCV) を含むさまざまなモデル評価手法のパフォーマンスを調査し、LOOCV が他の相互検証手法と比較して分散が大きくなる傾向があることを発見しました。この高い分散は、LOOCV の各検証フォールドが 1 つのデータ ポイントのみで構成され、評価用のサンプル サイズが制限されるという事実に起因すると考えられます。その結果、LOOCV から得られるパフォーマンス推定値は、各反復で検証用に選択された特定のデータ ポイントに非常に影響される可能性があります。
分散が大きいにもかかわらず、LOOCV にはいくつかの利点があります。各反復には n-1 データ ポイント (n はデータ ポイントの総数) でのトレーニングが含まれるため、LOOCV はモデルのパフォーマンスの不偏な推定値を提供する傾向があります。さらに、LOOCV は利用可能なすべてのデータをトレーニングに利用するため、データセットが小さい場合や、より正確なパフォーマンス推定が必要な場合に有益です。
ただし、計算の複雑さのため、LOOCV は大規模なデータセットには適用できない場合があります。トレーニング プロセスを n 回繰り返す必要があるため、計算上の負担が大きくなります。このような場合、多くの場合、適度な値の k を使用した k 分割交差検証が好まれます。
モデル評価のための k 分割交差検証について説明したので、モデル選択におけるその応用について簡単に説明しましょう。モデル選択のコンテキストでは、目標は、通常は異なるハイパーパラメーター設定を持つ候補モデルのセットから最適なモデルを特定することです。相互検証を使用すると、各モデルのパフォーマンスを推定し、選択プロセスを容易にすることができます。
一般的なアプローチは、モデルごとに k 分割相互検証を実行し、すべての反復にわたる平均パフォーマンスを計算し、結果を比較することです。平均パフォーマンスが最も高いモデルが最良の選択とみなされます。このアプローチは、データの変動の影響を軽減するのに役立ち、モデルのより堅牢な評価を提供します。
要約すると、相互検証はモデルの評価と選択のための貴重な手法です。データのさまざまなセグメントにわたって検証フォールドを体系的にローテーションすることにより、包括的な評価が可能になり、モデルのパフォーマンスの推定値が得られます。相互検証は、モデルの評価のみに使用する場合でも、モデルの選択と組み合わせて使用する場合でも、研究者や実践者がモデルの一般化機能について情報に基づいた意思決定を行うのに役立ちます。
モデル評価用の 10.4 K 倍 CV -- コード例 (L10: モデル評価 3)
モデル評価用の 10.4 K 倍 CV -- コード例 (L10: モデル評価 3)
前回のビデオでは、機械学習モデルを評価する方法として k 分割相互検証について説明しました。このビデオでは、scikit-learn ライブラリを使用して Python で k 分割相互検証を実装する方法を説明します。コード ノートブックを GitHub にアップロードしました。リンクはここにあります。
まずは必要なライブラリをロードし、バージョンを確認しましょう。よく使用されるライブラリである NumPy と matplotlib をインポートします。次に、scikit-learn のモデル選択サブモジュールの k-fold クラスを使用した k-fold 相互検証の使用方法を示します。
再現性を確保するために、乱数生成オブジェクトを使用してランダム シードを設定します。次に、クラス 0 から 5 つのラベルとクラス 1 から 5 つのラベルを含む単純なデータセットを作成します。さらに、10 個の入力と 4 つの特徴を含むランダム データセットを生成します。これは説明を目的としたランダムなデータセットにすぎず、iris データセットなど、任意のデータセットを使用できることに注意してください。
次に、k-fold オブジェクトを初期化します。これに cv (cross-validation の略) という名前を付けます。分割数 n_splits を 5 に設定し、5 分割相互検証を実行することを示します。分割メソッドを使用して、この k 分割オブジェクトの動作を調べてみましょう。このメソッドを実行すると、それぞれ 2 つの配列を含むタプルで構成される 5 つの結果が得られます。最初の配列はトレーニングフォールドを表し、2 番目の配列は検証フォールドを表します。
これらの配列内の数値は、データセット内のサンプルのインデックスに対応します。たとえば、最初のフォールドのトレーニング セットに対応する実際のラベルを取得したい場合、これらのインデックスをインデックス配列として使用してラベルを選択できます。同様に、対応する特徴を選択できます。このケースで観察されたように、トレーニング フォールドと検証フォールド内のラベルの不均衡が生じる可能性があることに注意することが重要です。
この問題に対処するには、k 分割相互検証を実行する前にデータセットをシャッフルすることをお勧めします。これは、初期化中に k 分割オブジェクト内でデータセットを直接シャッフルすることで実現できます。ランダムな状態を設定してシャッフルすることにより、トレーニング フォールドと検証フォールドでより適切なラベルの組み合わせが得られます。
さらに、一般に、クラス ラベルの割合が各フォールド全体で一貫していることを確認して、分割を階層化することをお勧めします。これは、通常の k 分割クラスの代わりに層別 k 分割クラスを使用することで実現できます。層別 k 分割を使用すると、各分割内のラベルの割合は元のデータセットのラベルの割合と一致します。
k 分割オブジェクトと層化 k 分割オブジェクトの一般的な動作について説明しました。次に、それらを実際に適用する方法を見てみましょう。例として、決定木分類器と虹彩データセットを使用します。まず、train_test_split メソッドを使用して、虹彩データセットを 85% のトレーニング データと 15% のテスト データに分割します。これにより層別分割が確実に行われます。
次に、交差検証の実践ガイドに関する Ron Kohavi の論文で推奨されているように、層別 k 分割オブジェクトを k=10 で初期化します。次に、手動アプローチを採用し、分割法を使用してトレーニング インデックスと検証インデックスを反復することにより、k 分割相互検証を実行します。各反復内で、トレーニングフォールドを使用して新しい決定木分類子を適合させ、検証フォールドのラベルを予測します。各反復の精度を計算し、結果をプレースホルダー変数に保存します。
すべての分割を反復した後、精度の合計を反復回数で割ることにより、k 分割相互検証の平均精度を計算します。最後に、目に見えないデータでモデルを評価するために、すべてのトレーニング データを使用して新しい決定木分類器を適合させ、テスト セットの精度を計算します。
この場合、k 分割相互検証の精度は 95.3%、テスト セットの精度は 95% となりました。これらの結果は、私たちのモデルが交差検証フォールドと目に見えないテスト データの両方で良好に機能することを示唆しています。
ただし、手動で折り目を繰り返してモデルをフィッティングするのは少し面倒な場合があります。幸いなことに、scikit-learn は、cross_val_score 関数を使用して k 分割相互検証を実行するより便利な方法を提供します。この関数は、モデル、データセット、および分割数を入力として受け取り、k 分割相互検証を自動的に実行して、各分割のスコアを返します。
これが実際にどのように行われるかを見てみましょう。まず、必要なライブラリをインポートし、iris データセットをロードします。次に、決定木分類器のインスタンスを作成し、層別 k 分割オブジェクトを k=10 で初期化します。
次に、cross_val_score 関数を使用して、分類器、データセット、および k 分割オブジェクトを渡します。この関数は、k 分割相互検証を自動的に実行し、モデルを適合させ、各分割のスコアを計算します。デフォルトでは、cross_val_score 関数は精度メトリックを使用しますが、必要に応じて他のメトリックを指定できます。
最後に、各フォールドの相互検証スコアを出力し、平均スコアを計算します。この場合、平均相互検証精度は 95.3% であり、手動で取得した精度と一致します。
Cross_val_score を使用すると、プロセス全体が自動的に処理されるため、k 分割相互検証を実行するためのより簡潔かつ効率的な方法になります。また、コードを大幅に変更することなく、フォールド数を簡単に変更したり、別のモデルに切り替えたりすることもできます。
モデル選択用の 10.5 K 倍 CV (L10: モデル評価 3)
モデル選択用の 10.5 K 倍 CV (L10: モデル評価 3)
前の 2 つのビデオでは、モデル評価のための k 分割相互検証について説明し、いくつかのコード例を検討しました。ここでは、モデル選択のための k 分割交差検証に焦点を当てます。モデル選択は、ハイパーパラメーターを調整し、最もパフォーマンスの高いハイパーパラメーター設定を選択できるため、k 分割相互検証の一般的な使用例としてよく使用されます。
全体的なプロセスは 5 つのステップに要約できます。ただし、スライドのスペースが限られているため、次のスライドの各ステップを拡大して詳細を説明します。この 5 つのステップは、以前に説明したモデル選択のための 3 分割ホールドアウト法に似ています。
ステップ 1: データをトレーニング セットとテスト セットに分割します。このステップは前と同じで、データセットをトレーニング用とテスト用の 2 つの部分に分割します。ここではトレーニングセットに焦点を当てます。
ステップ 2: k 分割相互検証を使用して、さまざまなハイパーパラメーター設定で学習アルゴリズムを適用します。デシジョン ツリー アルゴリズムの最大深さなどの各ハイパーパラメーター設定は、k 分割相互検証を使用して評価されます。たとえば、Ron Kohavi が推奨しているように、k=10 で k 分割交差検証を使用できます。このステップにより、ハイパーパラメータ設定ごとに異なるパフォーマンスの推定値が得られます。
ステップ 3: 最高のパフォーマンスのモデルを選択します。 k 分割相互検証から得られたパフォーマンス推定に基づいて、最高のパフォーマンスを発揮するハイパーパラメーター設定を特定できます。たとえば、最大深度 5 が、テストされた値の中で最も優れたパフォーマンスを発揮することが判明する場合があります。このハイパーパラメータ設定を最適なものとして選択します。
ステップ 4: 最適なハイパーパラメータ値を持つモデルをトレーニング データに適合させます。最適なハイパーパラメータ設定を特定した後、トレーニング データセット全体と選択したハイパーパラメータを使用してモデルを再トレーニングします。これにより、最適なハイパーパラメータ値を持つ単一のモデルが確保されます。
ステップ 5: 独立したテスト セットでモデルを評価します。モデルの汎化パフォーマンスを推定するために、トレーニングまたはハイパーパラメーター選択プロセス中に使用されなかった別のテスト セットでモデルを評価します。これにより、モデルのパフォーマンスについて公平な評価が得られます。
オプションで、データセット全体で最適なハイパーパラメーター値を使用してモデルを適合させる追加のステップを実行できます。このステップは、より多くのデータでトレーニングするとモデルのパフォーマンスがさらに向上する可能性があるという前提に基づいています。
選択の偏りを避けるためには、独立したテスト セットを用意することが重要です。場合によっては、ハイパーパラメーター設定が k 分割交差検証で偶然に良好なパフォーマンスを示し、過度に楽観的な推定値が得られることがあります。独立したテスト セットを使用することで、モデルのパフォーマンスのより信頼性の高い評価を得ることができます。
この手順は、モデル選択のための k 分割相互検証を要約しています。ここで、モデル選択またはハイパーパラメータ調整ステップ中にハイパーパラメータを選択するためのいくつかのテクニックを見てみましょう。
一般的な方法の 1 つはグリッド検索であり、今でも広く使用されています。グリッド検索は、考慮すべきハイパーパラメータ値のリストを定義する徹底的な検索方法です。たとえば、k 最近傍の場合、3、5、6、7、8、9 などの値のリストを指定して k の値を調整できます。グリッド検索では、それぞれのモデルのパフォーマンスを評価します。 k 分割交差検証を使用したハイパーパラメータの組み合わせ。
グリッド検索は並行して実行できるため、複数のハイパーパラメータの組み合わせを同時に評価できます。ただし、関連するハイパーパラメータ値のすべてが事前定義されたグリッドに含まれていない場合、カバレッジが不十分になる可能性があります。これは、連続的なハイパーパラメータの場合、または特定の値がスキップされる場合に特に問題になります。
カバレッジの問題に対処するための代替アプローチとして、分布からハイパーパラメーター値をサンプリングするランダム化検索があります。固定グリッドを指定する代わりに、均一分布、正規分布、指数関数分布、ベータ分布、二項分布などの分布を定義して、ハイパーパラメータ値をサンプリングできます。ランダム化検索により、ハイパーパラメータ空間の探索がより柔軟になり、より広範囲の値をカバーできる可能性があります。分布からサンプリングすることにより、ランダム化検索によりハイパーパラメータ空間のより効率的な探索が可能になります。
ランダム化検索は、考えられるすべての組み合わせを評価するわけではないため、グリッド検索と比較して、多くの場合、計算効率が高くなります。代わりに、ハイパーパラメータ値のサブセットをランダムにサンプリングし、k 分割相互検証を使用してそれらを評価します。反復回数またはサンプル数は事前に指定できます。
ランダム化検索の利点は、特に一部のハイパーパラメータが他のハイパーパラメータよりも重要でない場合に、大規模なハイパーパラメータ空間を効率的に検索できることです。また、特定のグリッドを定義することなく、連続および離散のハイパーパラメーターを処理することもできます。
グリッド検索とランダム化検索には、どちらにも長所と短所があります。グリッド検索は、定義されたグリッド内のすべての組み合わせをカバーすることを保証しますが、計算コストが高くなる可能性があり、大規模なハイパーパラメータ空間には適さない可能性があります。一方、ランダム化検索は効率的ですが、網羅性を保証するものではありません。
実際には、グリッド検索とランダム化検索のどちらを選択するかは、ハイパーパラメータ空間のサイズ、利用可能な計算リソース、および当面の特定の問題によって異なります。
ハイパーパラメータ調整のもう 1 つの手法は、ベイズ最適化です。ベイジアン最適化では、確率モデルを使用して、ハイパーパラメーターと目的関数 (モデルのパフォーマンスなど) の間の関係をモデル化します。ガウス過程などの代理モデルを使用して目的関数を近似し、取得関数を使用して次に評価するハイパーパラメータ値を決定します。
ベイジアン最適化では、サロゲート モデルに基づいてハイパーパラメータ値を繰り返しサンプリングし、評価されたパフォーマンスに基づいてモデルを更新します。これにより、ハイパーパラメータ空間の有望な領域に検索が集中し、より効率的な探索が可能になります。
ベイジアン最適化の利点は、連続および離散の両方のハイパーパラメータ、および非凸および非線形の目的関数を処理できることです。観察されたパフォーマンスに適応し、評価する次のハイパーパラメータ値をインテリジェントに選択し、グリッド検索やランダム化検索と比較してより少ない評価で最適なソリューションに収束する可能性があります。
ただし、ベイジアン最適化は、特に大規模なデータセットや複雑なモデルの場合、計算コストが高くなる可能性があります。サロゲート モデルを更新し、次に評価するハイパーパラメータ値を決定するには、目的関数を複数回評価する必要があります。
全体として、ベイジアン最適化は、特にハイパーパラメータ空間が複雑で目的関数の評価にコストがかかる場合に、ハイパーパラメータ調整のための強力な手法です。
要約すると、k 分割交差検証はモデルの評価とモデルの選択の両方にとって貴重なツールです。これにより、さまざまなモデルのパフォーマンスを推定し、最適なハイパーパラメーター設定を選択できます。グリッド検索、ランダム化検索、ベイジアン最適化などの手法を使用して、ハイパーパラメーターを調整し、モデルのパフォーマンスを向上させることができます。どの方法を選択するかは、ハイパーパラメータ空間のサイズ、計算リソース、当面の特定の問題などの要因によって異なります。
モデル評価用の 10.6 K 倍 CV -- コード例 (L10: モデル評価 3)
モデル評価用の 10.6 K 倍 CV -- コード例 (L10: モデル評価 3)
そうですね、前回、モデル評価のための k 分割相互検証について話したときと同様です。ここで、k 分割交差検証のコード例をいくつか詳しく見てみましょう。今回はモデル選択です。 GitHub にあるコード例をいくつか紹介します。コード ノートブックをダウンロードして後で実験できるように、Piazza と Canvas のリンクも記載します。
さて、コードノートブックを見てみましょう。いつものように、使用しているパッケージのバージョン番号を確認するためのウォーターマークから始めます。このノートブックでは、ハイパーパラメーターの調整とモデルの選択に非常に役立つグリッド検索に焦点を当てます。このデモンストレーションでは、iris データセットに対してデシジョン ツリー分類子を使用します。アヤメのデータセットはそれほど魅力的なものではないかもしれませんが、これを使用することで物事をシンプルに保つことができます。さらに、より複雑なデータセットを扱うクラス プロジェクトを開始する前の良い練習としても役立ちます。
まず、データセットをトレーニング セットとテスト セットに分割します。通常の慣行に従って、データの 85% をトレーニングに使用し、15% をテストに使用します。グリッド検索に移り、最大深度と基準という 2 つのハイパーパラメータ オプションを定義します。 Max Depth はデシジョン ツリーの最大の深さを表し、1、2、3、4、5、または None (最大深さの制限なし) のいずれかに設定します。基準はスプリットの品質を測定する関数を表し、「ジニ」と「エントロピー」の両方を評価します。実際には、ジニとエントロピーのどちらを選択してもほとんど違いはありませんが、デモンストレーションの目的でこれを含めています。
次に、ハイパーパラメータとそのそれぞれの値を指定してパラメータ グリッドを作成します。リストを使用する代わりに、辞書を使用してさまざまなシナリオを指定することもできます。たとえば、あるハイパーパラメータの特定の値をハードコーディングしながら、別のハイパーパラメータのすべての値を調べることができます。このアプローチは、矛盾するパラメーターの選択に対処する場合に役立ちます。ただし、この場合は競合がないため、リストで十分です。
交差検証フォールド (CV) の数を 10 に設定し、10 フォールドの相互検証を実行することを示します。階層化された k 分割相互検証が分類器に使用され、ラベルの割合が各分割で一定に保たれることが保証されます。最適なハイパーパラメータ設定を選択するために使用されるスコアリング メトリックは、分類子の精度とリグレッサーの R 二乗スコアです。また、実行する並列ジョブの数を -1 に設定し、複数の操作を並行して実行できるようにします。
必要な詳細をすべて指定した後、グリッド検索オブジェクトをデータに適合させます。パラメーター グリッドに対して徹底的な検索を実行し、相互検証を使用して各ハイパーパラメーターの組み合わせのパフォーマンスを評価します。グリッド検索が完了すると、best_score_ 属性と best_params_ 属性をそれぞれ使用して、最高のスコアと対応するパラメーターにアクセスできます。この場合、最良のモデルは最大深度 3 と基準「gini」を持ち、検証フォールド全体で平均 96% の精度を達成します。
興味がある場合は、すべての情報が含まれる辞書に保存されている結果を手動で検査できます。ここでは、各ハイパーパラメーター設定の検証フォールドにわたる平均パフォーマンスを表す平均テスト スコアに焦点を当てます。読みやすくするために、パラメーター設定とともにスコアを印刷します。
オプションで、ML エクステント ライブラリの関数を使用して、結果をヒートマップに要約することができます。ヒートマップは、さまざまなハイパーパラメータ設定のパフォーマンスを視覚的に表現します。この場合、同様のスコアが示すように、「ジニ」と「エントロピー」のどちらを選択してもパフォーマンスにはほとんど影響しません。最高のパフォーマンスは、最大深度 3 および基準「gini」で達成されます。
最適なハイパーパラメータ設定を取得したら、それを使用してトレーニング データセット全体で最終モデルをトレーニングできます。これにより、利用可能なすべてのデータがモデルのトレーニングに確実に利用されます。新しいデシジョン ツリー分類子オブジェクトを作成し、ハイパーパラメーターをグリッド検索中に見つかった最適な値に設定し、モデルをトレーニング データに適合させます。
モデルがトレーニングされると、テスト データセットで予測を行い、そのパフォーマンスを評価できます。この例では、正しく分類されたインスタンスの割合を測定する精度スコアを計算します。精度スコアを出力します。この場合、テスト セットで 93% の精度を達成しています。
全体として、グリッド検索を使用すると、さまざまなハイパーパラメーターの組み合わせを系統的に探索し、モデルに最適な構成を選択できます。ハイパーパラメータ調整のプロセスを自動化し、パフォーマンスを向上させるための最適な設定を見つけるのに役立ちます。
これが、モデルの選択とハイパーパラメーターの調整にグリッド検索を使用する基本的な考え方です。もちろん、これは 1 つのアプローチにすぎず、ランダム化検索、ベイズ最適化など、他の手法も利用できます。どの方法を選択するかは、特定の問題と利用可能なリソースによって異なります。
10.7 K 倍 CV 1-標準誤差法 (L10: モデル評価 3)
10.7 K 倍 CV 1-標準誤差法 (L10: モデル評価 3)
前回の説明では、k 分割交差検証とグリッド検索を使用したモデル選択の概念について説明しました。ただし、考慮すべきもう 1 つの重要なトピックがあります。それは、1 つの標準エラー手法です。この方法は、複数のハイパーパラメータ設定が同様に適切に機能し、最も適切な設定を選択する必要がある状況に遭遇した場合に役立ちます。
類似または同一のパフォーマンスを持つ複数のハイパーパラメータ設定がある場合、どれを選択するかを決定することが重要になります。デフォルトでは、同点の場合、scikit-learn はリストから最初の設定を選択します。ただし、1 つの標準誤差法は、倹約の原則またはオッカムの剃刀に基づく代替アプローチを提供します。オッカムの剃刀によれば、競合する仮説が同等にうまく機能する場合、仮定が最も少ない仮説が優先されるべきです。
1 標準誤差法を適用するには、数値的に最適な推定値とその標準誤差を考慮します。 k 分割相互検証によるモデル選択を実行した後、さまざまなハイパーパラメーター設定のパフォーマンス推定値を取得します。これらの設定の中から、前のステップで取得した最高のパフォーマンスのモデルの 1 標準誤差以内にパフォーマンスがあるモデルを選択します。
この方法を説明するために、scikit-learn で生成された、正方形と三角形で構成されるバイナリ分類データセットを考えてみましょう。わかりやすくするために、RBF カーネル サポート ベクター マシン (SVM) に焦点を当てます。 SVM には、各トレーニング サンプルの影響を制御するガンマと呼ばれるハイパーパラメーターがあります。さまざまなガンマ値により 60% から 90% の範囲の精度が得られ、いくつかの設定では同様のパフォーマンスが示されることがわかりました。
SVM の場合、決定境界の複雑さはガンマ値に依存します。ガンマが高いほど決定境界はより複雑になり、ガンマが低いほど決定境界はより単純になります。これは、さまざまなガンマ値の決定境界をプロットすることで観察できます。より単純なモデルには線形に近い決定境界があり、より複雑なモデルにはより複雑な形状が示されます。
ただし、複数のハイパーパラメータ設定で同様の精度が得られる場合は、最もパフォーマンスの高いモデルの 1 つの標準誤差以内で最も単純なモデルを選択する必要があります。たとえば、最もパフォーマンスの高いモデルのガンマ値が 0.1 の場合、標準誤差 0.1 以内のガンマ値を持つモデルを検討し、最も複雑度の低いモデルを選択します。
1 つの標準誤差手法に対応する論文や出版物があるとは限らないことに注意してください。これはシンプルさの原則に基づいた実用的なアプローチであり、実務者によって広く採用されています。この方法に関する研究や論文が発表されている場合は、その有効性と意義をさらに探求するための貴重な追加情報となるでしょう。
次のビデオでは、1 つの標準エラー メソッドを実際に実装する方法を示すコード例を詳しく説明します。
10.8 K 倍 CV 1-標準誤差法 -- コード例 (L10: モデル評価 3)
10.8 K 倍 CV 1-標準誤差法 -- コード例 (L10: モデル評価 3)
このビデオでは、前のビデオで説明した 1 つの標準誤差メソッドをどのように実装したかについて詳しく説明します。コード例をたどるには、このリンクからコード例を見つけることができます。簡単にアクセスできるように Canvas にも投稿します。
一緒にノートを読み進めてみましょう。まず、一般的に使用されている従来の輸入品です。次に、scikit-learn ライブラリの make_circles 関数を使用して独自のおもちゃのデータセットを生成します。この関数を使用すると、データセット内のサンプルの数とノイズの量を指定できます。生成されたデータセットは、トレーニング セットとテスト セットに分割されます。このアプローチは、任意の大規模なデータセットでシミュレーション研究を実施し、ノイズやトレーニング例の数などのパラメーターの変化によってさまざまな学習曲線やモデルの動作がどのように変化するかを観察するのに最適です。実験のための便利なテストベッドとして機能します。
次に、サポート ベクター マシン (SVM) を例として使用します。このデモでは SVM がどのように機能するかを完全に理解する必要はありません。わかりやすい例として選んだだけです。次の手順には手動のアプローチが含まれており、ハイパーパラメーター設定のリストを定義し、これらの値を反復処理します。ただし、より複雑な設定がある場合は、前のビデオで説明した ParamSampler を使用できます。
このデモでは、単一のハイパーパラメータを使用しているため、リストと for ループを使用した手動のアプローチで十分です。パラメーターのリストを初期化し、各値を反復処理します。各反復で、選択したハイパーパラメータ設定を使用して SVM モデルを初期化します。次に、k 分割交差検証を実行してモデルの精度を評価します。精度の値が収集され、平均、標準偏差、標準誤差が計算されます。標準偏差をサンプルサイズの平方根で割って標準誤差を計算するために使用する素朴なアプローチは、k 分割相互検証のラウンドが完全に独立していないため、最良の方法ではない可能性があることに注意してください。ただし、類似性の尺度やエラーバーを取得して、さまざまな方法を比較する目的では、このアプローチで十分です。
サンプリングは指数関数的に行われるため、精度値を収集した後、それらを対数スケールでプロットします。結果として得られるプロットには、さまざまなハイパーパラメーター設定に対する SVM モデルのパフォーマンスが表示されます。これは、講義スライドで見た内容と一致しています。
この方法が他の分類器に適用できることを示すために、アヤメ データセットのデシジョン ツリー分類用のコードも提供します。この場合、決定木の最大深さパラメーターを 1 から 10 まで変更します。同様の手順に従います: ハイパーパラメーター設定によるモデルの初期化、モデルのフィッティング、予測の作成、k 分割相互検証スコアの収集、標準誤差など。さまざまな最大深度の決定境界を分析することで、モデルの複雑さとパフォーマンスの間のトレードオフを観察できます。この特定の例では、1 標準誤差法を使用して、最大深さ 3 の決定木が選択されます。
最後に、アルゴリズム選択の相互検証、統計テスト、評価指標など、次回の講義で取り上げるトピックについて簡単に説明します。これらのトピックは、前の講義で説明した概念と密接に関連しています。
この説明がお役に立てば幸いです。良い週末を!
11.1 講義概要 (L11 モデル評価パート 4)
11.1 講義概要 (L11 モデル評価パート 4)
みなさんこんにちは、ようこそ!前回のセッションでは、ハイパーパラメーターの調整とモデルの選択について詳しく説明しました。私たちは、k 分割相互検証に焦点を当てました。これは、最適なモデルを選択するために、さまざまなハイパーパラメーター設定で異なるモデルをランク付けするために使用される手法です。モデル比較のプロセスを容易にするグリッド検索やランダム化検索などの実用的な方法を検討しました。
今日は、モデル比較の側面をさらに掘り下げていきます。テスト セット上の 1 つのモデルの予測を共有する研究論文を見つけたとします。これらの予測を独自のモデルの予測と比較し、そのパフォーマンスに統計的に有意な差があるかどうかを判断することができます。この方法はあまり一般的ではありませんが、役に立つ場合があります。このような場合に使用できる統計検定の 1 つがマクネマー検定です。さらに、アルゴリズムの比較についても説明します。これにより、さまざまなモデルやアルゴリズムをより公平に比較できるようになります。
ただし、感謝祭週間のため、本日の講義は通常より短くなりますのでご了承ください。興味のある方は、講義ノートでさらに詳しい説明をご覧ください。また、5 x 2 F 検定やさまざまな t 検定手順などの追加の統計検定もカバーしています。これらのトピックは調べることができませんが、知的好奇心を満たすのに役立ちます。
来週はパフォーマンス指標に関する講義が待っているため、時間を最適化するために、これらの方法については深く掘り下げません。時間が許せば、特徴選択と特徴抽出についても触れるかもしれません。便宜上、これらの主題に関する補足資料を Canvas 経由で共有しました。
それでは、モデル評価に関する本講義を始めましょう。モデル比較のための統計検定から始めます。次に、複数のペアごとの比較に関連する課題に対処し、それらに対処する方法を検討します。続いて、アルゴリズムの選択を詳しく調べ、ネストされた相互検証の手法に関連する具体的なコード例を検討します。この講義の概要は、今日の議論の舞台を設定します。
先に進む前に、これまでの講義で取り上げたモデル評価に関するトピックを復習しましょう。まず、バイアスと分散のトレードオフ、過小適合と過適合、単純なホールドアウト法などの基本的なことから始めました。次に、信頼区間をさらに掘り下げ、経験に基づいて信頼区間を構築するためのブートストラップ法を導入しました。実際にはあまり使用されていませんが、モデルの安定性に関する洞察を提供する反復ホールドアウト法を検討しました。これはリサンプリング手法の良い入門書として役立ちました。
先週、私たちは相互検証の領域に踏み込み、探索にさらに深みを加えました。グリッド検索とランダム化検索を使用したハイパーパラメータ調整について説明し、モデル選択にこれらの手法を採用しました。私たちが主に焦点を当てたのは、データセットをトレーニング、検証、テスト セットに分割する 3 方向ホールドアウト法です。検証セットを使用してさまざまなモデルをランク付けし、テスト セットを使用して最終パフォーマンスを推定しました。小規模なデータセットの場合は、k 分割相互検証とリーブ ワンアウト相互検証に切り替えました。
今日の講義ではモデルとアルゴリズムの比較を紹介します。これらの概念はモデルの選択に関連していますが、ここでの目的は、さまざまなアルゴリズムを比較し、さまざまな関連タスクにわたってどちらがより優れたパフォーマンスを発揮するかを判断することです。理想的には、アルゴリズムごとに素のトレーニング セットとテスト セットのコレクションが存在するはずです。たとえば、画像分類方法を比較する場合、さまざまな画像データセットを使用して、さまざまなアルゴリズムを使用してさまざまなモデルをトレーニングします。次に、複数のデータセットでパフォーマンスを比較します。ただし、現実的な制約により、この理想的なアプローチに従う能力が制限されることがよくあります。データセット内の独立性の侵害やその他の迷惑行為の問題に遭遇します。この問題は、CIFAR-10 文書で議論されている課題を思い出させます。
さらに、トレーニングしたモデルのパフォーマンスを、研究論文で発表されたモデルやインターネットで見つけたモデルのパフォーマンスとどのように比較できるのでしょうか?これに対処するには、統計テストを使用して 2 つのモデル間の実際のパフォーマンスの違いを調べることができます。このようなテストの 1 つはマクネマー テストで、バイナリ結果に関する 2 つのモデルの予測パフォーマンスを比較するために一般的に使用されます。
マクネマー検定は、データがペアになっている場合、つまりデータセット内の各インスタンスが両方のモデルによって分類され、結果が分割表として記録される場合に適しています。分割表には、考えられる 4 つの結果を表す 4 つのセルがあります。
これらの数値を使用して、マクネマー テストを実行して、モデルのパフォーマンスに大きな違いがあるかどうかを判断できます。帰無仮説 (H0) は 2 つのモデルのパフォーマンスが同じであるということですが、対立仮説 (H1) は違いがあるということです。
マクネマー検定統計量は、自由度 1 のカイ二乗分布に従います。次の式を使用して検定統計量を計算します。
検定統計量 chi2 が、選択した有意水準 (たとえば、0.05) でカイ二乗分布 (自由度 1) の臨界値を超える場合、帰無仮説が棄却され、帰無仮説が棄却されて、 2つのモデル。
McNemar テストでは、ペアになったインスタンスが独立しており、同一に分散されていると仮定していることに注意することが重要です。この仮定は、ペアになったインスタンスが真に独立していない場合、またはそれらの間に何らかの形式の依存関係がある場合には当てはまらない可能性があります。さらに、マクネマー テストは主に 2 値の結果に適用されます。結果がマルチクラスである場合は、コクランの Q テストやスチュアート・マクスウェル テストなどの代替テストの方が適切な場合があります。
ここで、複数のペアごとの比較の課題について説明しましょう。複数のモデルまたはアルゴリズムを比較する場合、偶然だけで大きな違いが見つかる可能性が高くなります。この現象は、多重比較問題または多重テストの問題として知られています。
複数のペアごとの比較を実行する場合、比較の数が増えるにつれて、少なくとも 1 つの有意な結果が得られる確率が高くなります。このタイプ I の過誤率の上昇により、帰無仮説が誤って棄却される偽陽性の結果が生じる可能性があります。
多重比較の問題に対処するには、統計検定の有意水準を調整する必要があります。一般的なアプローチの 1 つはボンフェローニ補正です。これには、目的の有意水準 (たとえば、0.05) を行われる比較の数で割ることが含まれます。たとえば、3 つのモデルを比較する場合、個々の検定ごとに有意水準を 0.05/3 = 0.0167 に調整します。
ボンフェローニ補正は、ファミリーごとの誤り率を制御する保守的な方法であり、すべての比較にわたる全体的なタイプ I 誤り率が指定されたしきい値を下回るようにします。ただし、厳密すぎると、真の違いを検出する能力が失われる可能性があります。
有意水準を調整するその他の方法には、ホルム・ボンフェローニ法、ベンジャミニ・ホッホベルグ法、偽発見率 (FDR) コントロールなどがあります。これらの方法は、ボンフェローニ補正に対する保守的ではない代替手段を提供し、特定の状況ではより適切な場合があります。
要約すると、マクネマー テストは、バイナリ結果に関する 2 つのモデルのパフォーマンスを比較するために使用できる統計テストです。ただし、複数のペア比較を行う場合は、有意水準を調整して多重比較の問題を考慮することが重要です。
11.2 ペアワイズ分類器比較のためのマクネマー検定 (L11 モデル評価パート 4)
11.2 ペアワイズ分類器比較のためのマクネマー検定 (L11 モデル評価パート 4)
次に、2 つのモデルを相互に比較するために使用できるテストであるマクネマー テストについて説明します。このテストは、先週説明したモデル選択の相互検証方法とは異なります。相互検証とは異なり、マクネマー テストにはトレーニング セットを使用したモデルの調整は含まれません。代わりに、出版された文献で言及されている機械学習分類器などの既存のモデルがすでに存在し、Web アプリまたは GitHub を通じてアクセスできることを前提としています。目標は、テスト セットでのパフォーマンスに基づいて、独自のモデルとこの既存の分類器を比較することです。
マクネマー テストを使用すると、テスト セットでのパフォーマンスに基づいて 2 つの分類器を比較できます。これは 1947 年にクイン マクネマーによって導入され、一対比較のためのノンパラメトリック統計検定です。この場合、予測の正しさ (正しいか正しくないかなど) を表す 2 つのカテゴリを持つカテゴリカル従属変数と、比較される 2 つのモデルを表す 2 つの関連グループを持つカテゴリカル独立変数があります。ペアリングは、両方のモデルに同じテスト セットを使用することで実現されます。テストを実行するには、2 行 2 列の混同行列を使用します。これは、マクネマー テスト用に特別に設計された混同行列の特別なバージョンです。
マクネマー検定の 2 行 2 列の混同行列には、両方のモデルによって行われた予測の数が含まれています。たとえば、真のクラス ラベルが 0 と 1 である場合を考えてみましょう。モデル 1 は 1 と 2 を予測し、モデル 2 は 1 と 1 を予測します。この場合、カウント "a" は、モデル 1 とモデル 1 の両方が予測した予測を表します。モデル 2 は正しくなりました (たとえば、真のラベルが 1 の場合に 1 を予測します)。カウント「b」はモデル 1 が正しく、モデル 2 が誤っている予測を表し、カウント「c」はモデル 1 が誤り、モデル 2 が正しい予測を表します。特定のテスト データセットについてこれらのカウントを表にすることにより、2 行 2 列の混同行列を構築できます。
2 行 2 列の混同行列を使用すると、さまざまな指標を計算できます。たとえば、カウント「a」と「b」をテスト セット内のサンプルの総数で割ることにより、各モデルの予測精度を計算できます。さらに、混同行列のカウント "b" と "c" で表される、モデル 1 とモデル 2 が異なるケースにも興味があります。これらのケースは、1 つのモデルが正しい予測を行った一方で、もう 1 つのモデルが誤った予測を行ったことを示しています。 2 つのモデルのパフォーマンスを比較するには、McNemar テストを実行します。
マクネマー検定は、典型的な仮説検定手順に従います。帰無仮説と対立仮説を定義します。帰無仮説は 2 つのモデルのパフォーマンスが等しいと仮定しますが、対立仮説はそれらのパフォーマンスが異なることを示唆します。カイ二乗分布を近似するカイ二乗検定統計量を計算します。検定統計量は (b - c)^2 / (b + c) として計算されます。この検定統計量に基づいて、帰無仮説が真であると仮定して p 値を計算します。 p 値は、帰無仮説の下で、指定された検定統計量またはより極端な値が観察される確率を表します。
帰無仮説を棄却するかどうかを決定するには、p 値を選択した有意水準 (たとえば、0.05) と比較します。 p 値が有意水準より小さい場合、帰無仮説は棄却され、2 つのモデルのパフォーマンスは等しくないと結論付けられます。逆に、p 値が有意水準より大きい場合は、帰無仮説を棄却できず、2 つのモデルのパフォーマンスが等しいと想定されます。
連続性補正は、2x2 分割表のデータが離散的である一方で、カイ二乗分布は連続分布であるという問題に対処するために導入されました。分子の差の絶対値から 1 を引くことにより、連続性補正により p 値のより適切な近似が得られます。ただし、連続性補正の使用は必ずしも必要なわけではなく、特定のコンテキストとデータに依存することに注意することが重要です。
マクネマーの検定におけるもう 1 つの考慮事項は、正確な二項検定の使用です。正確な二項検定は、サンプル サイズが小さい場合、またはカイ二乗検定の仮定が満たされない場合に、マクネマー検定の統計的有意性を判断するための代替アプローチを提供します。正確な二項検定は、カイ二乗近似に依存せずに、帰無仮説の下で観測データを取得する確率を直接計算します。
さらに、マクネマーのテストは、3 つ以上のモデルまたは治療法を処理できるように拡張できます。このような場合、テストは一般化されたマクネマー テスト、またはコクラン・マンテル・ヘンツェル テストとして知られる拡張機能を使用して実行できます。これらの拡張機能により、異なるグループ間の依存関係を考慮して、複数のモデルまたは治療を同時に比較することができます。
要約すると、マクネマー検定は、一対のカテゴリデータに基づいて 2 つのモデルまたは治療のパフォーマンスを比較するために使用されるノンパラメトリック統計検定です。これは、モデル間のパフォーマンスの違いが統計的に有意かどうかを評価する方法を提供します。検定には、2x2 分割表の構築と検定統計量の計算が含まれます。検定統計量は、カイ二乗分布と比較したり、正確な二項検定を使用して評価したりできます。マクネマーのテストを実施することで、研究者は、機械学習、医学、社会科学などのさまざまな分野におけるさまざまなモデルや治療法の相対的なパフォーマンスについて洞察を得ることができます。