トレインテストと相互検証セットを組み込んだ不均衡なデータセットを正しく分割する方法

Aug 16 2020

上の写真は私が複製しようとしているものです。正しい方向に進んでいるかどうかはわかりません。私はFakeNewsChallengeデータセットとその非常に不均衡なデータセットを使用しており、論文で使用されている方法を複製して改善しようとしています。


同意する-7.36%

同意しない-1.68%

話し合う-17.82%

無関係-73.13%

私はこのようにデータを分割しています:

(データセットを67/33分割に分割)

  • トレーニング67%、テスト33%

(検証のためにさらに80/20の分割トレーニング)

  • トレーニング80%、検証20%

(次に、3分割交差検証セットを使用してトレーニングと検証を分割します)

余談ですが、1.68%の賛成と反対を得るのは非常に困難でした。


それは私には全く意味がないので、これは私が問題を抱えているところです。80/20分割で作成された検証セットは、5倍でも階層化されていますか?

これが私が現在いるところです:


データを67%のトレーニングセットと33%のテストセットに分割します

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33)

x_train2, x_val, y_train2, y_val = train_test_split(x_train1, y_train1, test_size=0.20)

skf = StratifiedKFold(n_splits=3, shuffle = True)
skf.getn_splits(x_train2, y_train2)

for train_index, test_index in skf.split(x_train2, y_train2):
  x_train_cros, x_test_cros = x_train2[train_index], x_train2[test_index]
  y_train_cros, y_test_cros = y_train2[train_index], y_train[test_index]

検証セットに対してもskfを再度実行しますか?作成されたskfのテストテストセットは、シーケンシャルモデルで使用されていますか?


私が使用している方法の引用:

トータ、アスウィニ; ティラック、プリヤンカ; Ahluwalia、Simrat; and Lohia、Nibrat(2018)「フェイクニュースの検出:ディープラーニングアプローチ」、SMUデータサイエンスレビュー:Vol。1:第3条、第10条。https://scholar.smu.edu/datasciencereview/vol1/iss3/10

回答

2 SuryaLohia. Aug 16 2020 at 06:14

関数 'train_test_split()'にもう1つのパラメーターを追加する必要があります。

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33, stratify = y)

これにより、すべてのターゲットカテゴリが均等に分散されます。