アンドリュー・ンのチームはかつて研究論文で大きなミスを犯しました。 そして、それはデータのランダムな分割が原因でした。 具体的に何が起こったのか(解決策とともに):
ランダムスプリッティングを用いてトレインセットや検証セットを生成することが一般的です。 しかし、多くの場合、モデル作成において致命的となることもあります。 画像のキャプションを生成するモデルを作ることを考えてみてください。 言語の本質的な性質上、すべての画像には多様なキャプションが付けられることがあります。 - 画像1 → キャプション1、キャプション2、キャプション3など - 画像2 → キャプション1、キャプション2、キャプション3など これ👇を見て
ランダム分割を使用すると、同じデータポイント(画像)がトレインセットと検証セットで使用できます。 その結果、トレーニングされたインスタンスでモデルを評価することになります。 これは、データ漏えい(グループ漏えいとも呼ばれる)の一例で、過学習になります!
同じことがアンドリュー・ンの論文でも起こり、肺炎を検出するための医療データセットを作成しました。 - 総画像 = 112k - 総患者数 = 30,000人 ランダムスプリットのため、同じ患者の画像がトレーニングセットと検証セットの両方で利用可能でした。 これによりデータの漏洩が発生し、検証スコアは本来よりも良く見えました。 これが彼らの最初の論文👇です
グループシャッフル分割で解決しました。 ステップは2つあります。 1) 1つの画像に対応するすべての訓練インスタンスをグループ化する。 2) グループ化後、ENTIRE GROUP(1つの画像の例すべて)を列車または検証セットにランダムに割り当てなければなりません。 これによりグループ漏れを防ぐことができます。
Sklearnを使う場合、GroupShuffleSplitはこのアイデアを実装しています。 例として、以下のデータセットがあります。 - x1とx2が特徴です。 - yはターゲット変数です。 - グループはグルーピング基準を示します。 これ👇を見て
まず、sklearnからGroupShuffleSplitをインポートし、オブジェクトをインスタンス化します。 次に、このオブジェクトのsplit()メソッドを用いてグループ分割を行います。生成元を返し、解凍すると次の出力が得られます: - グループ「A」と「C」のデータポイントは訓練セット内で一緒に存在します。 - グループ「B」のデータポイントは検証/テストセットにまとめられています。 これ👇を見て
数日後、アンドリュー・ンのチームは同じグループシャッフル分割戦略を用いて、同じ患者がトレーニングセットと検証セットの両方に入らないようにした上で論文を更新しました。 👉 次はあなたにお任せします:この問題に以前に直面したことはありますか?
11.85K