Cara membagi set data tidak seimbang dengan benar yang menggabungkan uji train dan set validasi silang

Aug 16 2020

Gambar di atas adalah yang saya coba tiru. Saya hanya tidak tahu apakah saya akan melakukannya dengan cara yang benar. Saya bekerja dengan kumpulan data FakeNewsChallenge dan sangat tidak seimbang, dan saya mencoba untuk mereplikasi dan meningkatkan metode yang digunakan dalam makalah.


Setuju - 7,36%

Tidak setuju - 1,68%

Diskusikan - 17.82%

Tidak terkait - 73,13%

Saya membagi data dengan cara ini:

(bagi kumpulan data menjadi pemisahan 67/33)

  • melatih 67%, uji 33%

(bagi pelatihan lebih lanjut 80/20 untuk validasi)

  • pelatihan 80%, validasi 20%

(Kemudian pisahkan pelatihan dan validasi menggunakan set validasi silang 3 kali lipat)

Selain itu, mendapatkan 1,68% dari tidak setuju dan setuju itu sangat sulit.


Di sinilah saya mengalami masalah karena itu tidak masuk akal bagi saya. Apakah set validasi yang dibuat dalam pemisahan 80/20 juga dikelompokkan dalam 5 kali lipat?

Di sinilah saya saat ini:


Pisahkan data menjadi 67% Set Pelatihan dan 33% Set Pengujian

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]

Apakah saya akan menjalankan skf lagi untuk set validasi juga? Di mana set pengujian dari skf dibuat digunakan dalam model sekuensial?


Kutipan untuk metode yang saya gunakan:

Thota, Aswini; Tilak, Priyanka; Ahluwalia, Simrat; dan Lohia, Nibrat (2018) "Deteksi Berita Palsu: Pendekatan Pembelajaran Mendalam," Ulasan Sains Data SMU: Vol. 1: No. 3, Pasal 10. Tersedia di:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

Jawaban

2 SuryaLohia. Aug 16 2020 at 06:14

Anda perlu menambahkan satu parameter lagi dalam fungsi 'train_test_split ()':

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

Ini akan memberi Anda distribusi yang sama untuk semua kategori target.