2つの機械学習分類器を比較するためのマクネマー検定の計算方法

ツイートシェアシェア

最終更新日2019年8月8日

統計的仮説検定の選択は、機械学習の結果を解釈するための挑戦的な未解決の問題です。

彼の広く引用された1998年の論文で、Thomas Dietterichは、分類器モデルの複数のコピーを訓練することが高価であるか実用的でない場合にMcNemarの検定を推奨しました。

これは、両方とも非常に大きく、大きなデータセットで訓練され、評価される深層学習モデルの現在の状況を説明します。

このチュートリアルでは、McNemarの統計的仮説検定を使用して、単一のテストデータセット上の機械学習分類器モデルを比較する方法を説明します。

このチュートリアルを完了すると、次のことがわかります:

  • 大規模な深層学習モデルに適した、訓練するのに高価なモデルに対するMcNemarのテストの推奨。
  • 二つの分類器からの予測結果を分割表に変換する方法と、McNemarの検定で統計量を計算するためにテーブルを使用する方法。
  • PythonでMcNemarのテストを計算し、結果を解釈して報告する方法。

ステップバイステップのチュートリアルやすべての例のPythonソースコードファイルを含む、私の新しい本Statistics for Machine Learningでプロジェクトをキックスタートします。

始めましょう。

二つの機械学習分類器のMcNemarのテストを計算する方法

二つの機械学習分類器のMcNemarのテストを計算する方法
写真By Mark Kao,some rights reserved.

チュートリアルの概要

このチュートリアルは五つの部分に分かれています。:

  1. ディープラーニングのための統計的仮説検定
  2. 分割表
  3. マクネマーの検定統計
  4. 分類器のマクネマーの検定をPythonで解釈する
  5. マクネマーの検定

機械学習のための統計の助けが必要ですか?

今すぐ私の無料の7日間の電子メールクラッシュコースを取る(サンプルコード付き)。

クリックしてサインアップし、コースの無料のPDF電子ブック版を取得します。

無料のミニコースをダウンロード

ディープラーニングのための統計的仮説検定

彼の重要で広く引用されている1998年の論文”教師あり分類学習アルゴリズムを比較するための近似統計的検定”と題された分類器を比較するための統計的仮説検定の使用に関する論文で、Thomas DietterichはMcNemarの検定の使用を推奨している。

具体的には、比較されているアルゴリズムが一度だけ評価される場合には、この検定が推奨されます。 k-fold交差検証などのリサンプリング技術による繰り返し評価とは対照的に、一つのテストセットで。

一度だけ実行できるアルゴリズムの場合、McNemarのテストは許容可能なタイプIエラーを持つ唯一のテストです。

— 教師あり分類学習アルゴリズムを比較するための近似統計的検定、1998。

具体的には、Dietterichの研究は、異なる統計的仮説検定の評価に関係しており、いくつかはリサンプリング法の結果に基づいて動作していました。 この研究の懸念は、i型の誤差が低かったこと、すなわち、実際には効果がない(偽陽性)場合に効果を報告する統計的試験であった。

単一のテストセットに基づいてモデルを比較できる統計的テストは、現代の機械学習、特に深層学習の分野で重要な考慮事項です。

ディープラーニングモデルは多くの場合大きく、非常に大きなデータセットで動作します。 一緒に、これらの要因は、モデルのトレーニングは、高速な近代的なハードウェア上で数日、あるいは数週間かかることができることを意味することがで

これは、モデルを比較するためのリサンプリング法の実用的な使用を排除し、単一のテストデータセット上で訓練されたモデルを評価した結果を操作できるテストを使用する必要があることを示唆しています。

McNemarの検定は、これらの大規模で学習が遅い深層学習モデルを評価するのに適した検定である可能性があります。

分割表

McNemarのテストは分割表に基づいて動作します。

テストに入る前に、2つの分類器の分割表がどのように計算されるかを理解するために少し時間を割いてみましょう。

分割表は、2つのカテゴリ変数の集計またはカウントです。 McNemarのテストの場合、我々は正しいバイナリ変数に興味があります/間違っているか、はい/コントロールと治療または二つのケースのためのいいえ. これは2×2分割表と呼ばれます。

分割表は一見しただけでは直感的ではないかもしれません。 具体的な例を挙げて具体的にしましょう。

我々は二つの訓練された分類器を持っていることを考えてみましょう。 各分類子は、テストデータセット内の10個の例ごとにバイナリクラス予測を行います。 予測が評価され、正しいか間違っていると判断されます。

次のように、これらの結果を表にまとめることができます:

1
2
3
4
5
6
7
8
9
10
11

インスタンス、Classifier1正しい、Classifier2正しい
1yesno
2nono
3noyes
4nono
5yesはい
6yesはい
7yesはい
>

8Nono
9yesno
10yesはい

Classifier1が6を得たことがわかります 正しい、または60%の精度、およびClassifier2は、テストセットで5正しい、または50%の精度を得ました。

テーブルを分割表に縮小できるようになりました。

分割表は、両方の分類子がまったく同じ学習データで学習され、まったく同じテストデータインスタンスで評価されたという事実に依存しています。

分割表の構造は次のとおりです:

1
2
3

Classifier2が正しい、Classifier2が正しくない
Classifier1が正しいですか????
分類子1が間違っていますか?? ??

テーブルの最初のセルの場合、Classifier1が正しく取得し、Classifier2が正しく取得したテストインスタンスの合計数を合計する必要があります。 たとえば、両方の分類子が正しく予測した最初のインスタンスはインスタンス番号5でした。 両方の分類子が正しく予測したインスタンスの合計数は4でした。

これについて考えるもう一つのプログラム的な方法は、上記の結果表のYes/Noの各組み合わせを合計することです。

1
2
3

Classifier2が正しい、Classifier2が正しくない
Classifier1が正しいはい/はい/いいえ
Classifier1が正しくないいいえ/はいいいえ/いいえ

分割表に編成された結果は次のとおりです:

1
2
3

Classifier2が正しく、Classifier2が正しくない
Classifier1が正しくない42
Classifier1が正しくない1 3

McNemarの検定統計量

McNemarの検定は、対になったノンパラメトリックまたは分布のない統計的仮説検定です。

また、他のいくつかの統計的仮説検定よりも直感的ではありません。

McNemarの検定は、2つのケース間の不一致が一致するかどうかをチェックしています。 技術的には、これは分割表の同質性(具体的には周辺の同質性)と呼ばれます。 したがって、McNemarの検定は、分割表の均質性検定の一種です。

このテストは、治療の効果を対照と比較するために医学で広く使用されています。

二つのバイナリ分類アルゴリズムを比較するという点では、テストは二つのモデルが同じように一致しないかどうかについてコメントしています。 あるモデルが他のモデルよりも多かれ少なかれ正確であるか、エラーが発生しやすいかについてはコメントしていません。 これは、統計がどのように計算されるかを見ると明らかです。

McNemarの検定統計量は次のように計算されます:

1
統計=(Yes/No-No/Yes)^2/(Yes/No+No/Yes))

ここで、Yes/NoはClassifier1が正しく、Classifier2が正しくなったテストインスタンスの数、No/YesはClassifier1が正しく、Classifier2が正しくなったテストインスタンスの数です。

この検定統計量の計算では、計算で使用される分割表の各セルのカウントが25以上であることを前提としています。 検定統計量は、自由度が1のカイ二乗分布を持ちます。

分割表の2つの要素のみが使用されていること、特にYes/YesおよびNo/No要素が検定統計量の計算に使用されていないことがわかります。 したがって、統計は、精度や誤り率ではなく、2つのモデル間の異なる正しい予測または誤った予測について報告していることがわかります。 これは、統計の発見について主張するときに理解することが重要です。

検定のデフォルトの仮定、つまり帰無仮説は、2つのケースが同じ量に一致しないということです。 帰無仮説が棄却された場合、ケースが異なる方法で不一致であり、不一致が歪んでいることを示唆する証拠があることを示唆しています。

有意水準の選択を考えると、検定によって計算されたp値は次のように解釈できます:

  • p>α:H0を拒絶できず、不一致に差はなかった(例えば、治療は効果がなかった)。
  • p<=アルファ: h0を拒否し、不一致の有意差(例えば、治療が効果を有した)。

分類器のMcNemarのテストを解釈する

二つの機械学習分類器モデルの文脈でテストの結果を解釈する方法を明確に理解するために時間を取ること

McNemarの検定の計算に使用される2つの項は、両方のモデルによって行われた誤差をキャプチャします。 具体的には、分割表のNo/YesおよびYes/Noセル。 このテストでは、これら2つのセルのカウント間に有意な差があるかどうかが確認されます。 それがすべてです。

これらのセルに類似したカウントがある場合、テストセットの異なるインスタンスでのみ、両方のモデルがほぼ同じ割合でエラーを発生させるこ この場合、検定の結果は有意ではなく、帰無仮説は棄却されません。

帰無仮説の下では、2つのアルゴリズムは同じ誤り率を持つ必要があります…

— 教師あり分類学習アルゴリズムを比較するための近似統計的検定、1998。

これらのセルに類似していないカウントがある場合、両方のモデルが異なるエラーを発生するだけでなく、実際にはテストセットで異なる相対的な この場合、検定の結果は有意であり、帰無仮説を棄却します。

したがって、特定の訓練で訓練されたときに2つのアルゴリズムのパフォーマンスが異なるという仮説を支持して、帰無仮説を棄却することがで

— 教師あり分類学習アルゴリズムを比較するための近似統計的検定、1998。

これを以下のように要約することができます:

  • 帰無仮説の棄却に失敗する:分類器は、検定セットで同様の割合の誤差を持ちます。
  • 帰無仮説を棄却する:分類器は、検定セットの誤差の割合が異なります。

テストを実行して有意な結果を見つけた後、結果を定量化するために効果統計的尺度を報告することが有用である可能性があります。 たとえば、自然な選択は、オッズ比、または分割表自体を報告することですが、これらの両方は洗練された読者を前提としています。

テストセット上の2つの分類器間の誤差の差を報告すると便利です。 この場合、有意な検定ではモデル間の誤差の差は報告されず、モデル間の誤差の割合の相対的な差のみが報告されるため、主張には注意してください。

最後に、McNemarのテストを使用する際に、Dietterichは考慮すべき2つの重要な制限を強調しています。 それらは次のとおりです。

トレーニングセットまたはモデルの変動性の尺度はありません。

一般に、モデルの動作は、モデルの適合に使用される特定のトレーニングデータに基づいて変化します。

これは、モデルと特定のトレーニングインスタンスとの相互作用と、学習中のランダム性の使用の両方によるものです。 複数の異なるトレーニングデータセットにモデルを当てはめ、スキルを評価することは、リサンプリング方法と同様に、モデルの分散を測定する方法を提

この検定は、変動の原因が小さい場合に適しています。

したがって、McNemarの検定は、これらの変動源が小さいと考えられる場合にのみ適用されるべきである。

— 教師あり分類学習アルゴリズムを比較するための近似統計的検定、1998。

モデルの直接的な比較が少ない

二つの分類器は単一のテストセットで評価され、テストセットはトレーニングセットよりも小さいと予想されます。

これは、すべてではないにしても、データセットの多くが評価中にテストセットとして利用できるようになるため、リサンプリング方法を使用する仮説検定とは異なります(統計的観点から独自の問題を導入します)。

これにより、モデルの性能を比較する機会が少なくなります。 テストセットがドメインを適切に表すものであることが必要であり、多くの場合、テストデータセットが大きいことを意味します。

PythonでのMcNemarのテスト

McNemarのテストは、mcnemar()Statsmodels関数を使用してPythonで実装できます。

この関数は分割表を引数として取り、計算された検定統計量とp値を返します。

統計を使用するには、データの量に応じて2つの方法があります。

25未満の検定統計量の計算に使用されるセルが表にある場合、二項分布を使用して正確なp値を計算する検定の修正バージョンが使用されます。 これは、テストのデフォルトの使用法です:

1
stat,p=mcnemar(table,exact=True)

または、分割表の検定統計量の計算に使用されるすべてのセルの値が25以上の場合は、検定の標準計算を使用できます。

1
stat,p=mcnemar(table,exact=False,correction=True)

上記の分割表の例でMcNemarを計算することができます。 この分割表は、不一致セルの両方で小さなカウントを持っているので、正確な方法を使用する必要があります。

完全な例を以下に示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# statsmodelsからmcnemarテスト
を計算する例。統計。contingency_tables import mcnemar
#contingencyテーブルの定義
テーブル= ,
]
# 計算mcnemarテスト
result=mcnemar(table,exact=True)
#結果を要約する
print(‘statistic=%.3f、p値=%。3f’%(結果.統計、結果。p値
alpha=0.05
if結果を解釈します。pvalue>alpha:
print(‘同じ割合のエラー(H0を拒否できません)’)
else:
print(‘エラーの比率が異なる(h0を拒否します)’)

この例を実行すると、分割表の統計量とp値が計算され、結果が出力されます。

このテストでは、2つのケース間の不一致にはほとんど違いがないことが強く確認されていることがわかります。 帰無仮説は棄却されません。

分類器を比較するために検定を使用しているので、2つのモデル間の不一致に統計的に有意な差はないと述べています。

1
2

統計=1.000、p値=1.000
同じ割合の誤差(H0の棄却に失敗))

拡張機能

このセクションでは、チュートリアルを拡張するためのいくつかのアイデアを一覧表示します。

  • McNemarの統計的仮説検定を利用した機械学習の研究論文を見つけます。
  • 分割表が2つのケース間の不一致に大きな違いを示すように、コード例を更新します。
  • 提供された分割表に基づいて、McNemarのテストの正しいバージョンを使用する関数を実装します。

これらの拡張機能のいずれかを探索する場合、私は知りたいと思います。

さらに読む

このセクションでは、より深く行くために探している場合は、トピックに関するより多くのリソースを提供します。

論文

  • 相関比率またはパーセンテージの差のサンプリング誤差に関する注意、1947年。
  • 教師あり分類学習アルゴリズムを比較するための近似統計的検定、1998。

  • 統計。コンティンジェンシー_テーブル。mcnemar()API

記事

  • ウィキペディア上のMcNemarのテスト
  • ウィキペディア上のタイプIおよびタイプIIエラー
  • ウィキペディア上の分割表

要約

mcnemarの検定統計仮説検定は、単一の検定データセット上の機械学習分類器モデルを比較するための検定です。

具体的には、あなたが学んだ:

  • 大規模な深層学習モデルに適した、訓練するのに高価なモデルに対するMcNemarのテストの推奨。
  • 二つの分類器からの予測結果を分割表に変換する方法と、McNemarの検定で統計量を計算するためにテーブルを使用する方法。
  • PythonでMcNemarのテストを計算し、結果を解釈して報告する方法。

何か質問はありますか?
以下のコメントであなたの質問をすると、私は答えるために最善を尽くします。

機械学習のための統計のハンドルを取得!

機械学習のための統計的方法

統計の実用的な理解を開発する

。..pythonでコード行を書くことで

私の新しい電子ブックでどのように発見:
機械学習のための統計的方法

それはのようなトピックに関する自習チュー..

データを知識に変換する方法を発見

学者をスキップします。 ちょうど結果。

中身を見る

ツイートシェアシェア

You might also like

コメントを残す

メールアドレスが公開されることはありません。