元の意味を変えないために、再度表現する必要があるのは次のとおりです。まず、なぜ相互検証が必要なのかを理解する必要があります。
相互検証は、特にデータが限られている場合、または新しい未知のデータに対するモデルの一般化を評価する場合に、予測モデルのパフォーマンスと汎化能力を評価するために、機械学習と統計で一般的に使用される手法です。機能に関しては非常に価値があります。
相互検証はどのような状況で使用されますか?
相互検証の一般的な考え方は、図 5 の折り重ねクロスに示されています。各反復で、新しいモデルは 4 つのサブデータセットでトレーニングされ、最後に保持されたサブデータセットで実行されます。 . すべてのデータが利用されていることを確認するためにテストします。平均スコアや標準偏差などの指標を通じて、モデルのパフォーマンスの真の尺度が提供されます。
すべては K 倍クロスオーバーから開始する必要があります。
K 分割クロス検証が Sklearn に統合されました。これは 7 分割の例です:
from sklearn.datasets import make_regressionfrom sklearn.model_selection import KFoldx, y = make_regression(n_samples=100)# Init the splittercross_validation = KFold(n_splits=7)
There一般的な操作は、分割を実行する前にシャッフルを実行することです。これにより、サンプルの元の順序が破壊され、過剰適合のリスクがさらに最小限に抑えられます。
cross_validation = KFold(n_splits=7, shuffle=True)
この方法では、 、簡単な k 分割相互検証を行うことができます。必ずソース コードを確認してください。ぜひソースコードをチェックしてみてください!ぜひソースコードをチェックしてみてください!
StratifiedKFold は、分類問題用に特別に設計されています。
一部の分類問題では、データが複数のセットに分割された場合でも、ターゲットの分布は変わらないはずです。たとえば、ほとんどの場合、クラス比が 30 から 70 のバイナリ ターゲットは、トレーニング セットとテスト セットで同じ比率を維持する必要があります。通常の KFold では、分割前にデータがシャッフルされるため、このルールは破られます。カテゴリの比率は維持されません。
この問題を解決するために、Sklearn では分類に特化した別のスプリッター クラスが使用されています - StratifiedKFold:
from sklearn.datasets import make_classificationfrom sklearn.model_selection import StratifiedKFoldx, y = make_classification(n_samples=100, n_classes=2)cross_validation = StratifiedKFold(n_splits=7, shuffle=True, random_state=1121218)
KFold とは異なりますが、見た目は似ていますが、現在、クラスの割合はすべての分割と反復にわたって一貫しています。相互検証は非常に似ています。
Scikit-learn ライブラリも対応するインターフェイスを提供します:
from sklearn.model_selection import ShuffleSplitcross_validation = ShuffleSplit(n_splits=7, train_size=0.75, test_size=0.25)
#TimeSeriesSplit
データ セットが時系列の場合、従来の相互検証は使用できません。順序が完全に混乱します。この問題を解決するには、Sklearn が提供する別のスプリッター TimeSeriesSplit、
from sklearn.model_selection import TimeSeriesSplitcross_validation = TimeSeriesSplit(n_splits=7)
検証セットを参照してください。は常にトレーニング セットの最後に配置されます。ケースにインデックスを付けると、グラフが表示されます。これは、インデックスが日付であるためです。つまり、誤って将来の日付で時系列モデルをトレーニングし、前の日付の予測を行うことはできません
上記のメソッドは、独立して同一に分散されたデータ セットに対して処理されます。つまり、データ生成プロセスには影響しません。他のサンプルによる
ただし、場合によっては、データが独立同一分布 (IID) の条件を満たしていない、つまり、いくつかのサンプル間に依存関係がある場合があります。この状況は、Google Brain Ventilator Pressure コンテストなどの Kaggle コンテストでも発生します。このデータは、数千回の呼吸 (吸気と呼気) 中の人工肺の気圧値を記録し、各呼吸のあらゆる瞬間に記録されます。各呼吸プロセスには約 80 行のデータがあり、これらの行は相互に関連しています。この場合、データの分割が「呼吸プロセスの途中」で発生する可能性があるため、従来の相互検証方法は使用できません。
これは、これらのデータを「グループ化」する必要があると理解できます。グループ内のデータは関連しているためです。たとえば、複数の患者から医療データを収集する場合、各患者には複数のサンプルがあります。ただし、これらのデータは個々の患者の違いの影響を受ける可能性が高いため、グループ化する必要もあります。
多くの場合、特定のグループでトレーニングされたモデルが他の目に見えないグループにもうまく一般化されることを期待します。相互検証では、これらのグループのデータに「タグ」を付け、それらを相互に区別する方法を伝えます。
Sklearn では、これらの状況に対処するためにいくつかのインターフェイスが提供されています。
相互検証の概念とその実装方法を理解することを強くお勧めします。Sklearn のソース コードを確認するのは良い方法です。さらに、独自のデータセットを明確に定義する必要があり、データの前処理が非常に重要です。
以上が相互検証の重要性は無視できません。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。