Pertanyaan Output prediksi multi-kelas keras terbatas untuk satu kelas


Saya membangun model keras sekuensial dengan 35.000 sampel input dan 20 prediktor, distribusi data keluaran data uji adalah:

  • Kelas_0 = 5,6%
  • Class_1 = 7,7%
  • Class_2 = 35,6%
  • Kelas_3 = 45,7%
  • Kelas_4 = 5,4%

Setelah mengubah output ke dalam matriks biner menggunakan (np_utils.to_categorical) akurasi pelatihan adalah sekitar 54%, ketika saya melakukan model yang pas dengan data uji (15.000 sampel), semua prediksi (100%) kebetulan untuk kelas yang sama yang class_3 "kejadian tertinggi dalam output pelatihan", apa penyebab bias ini dan tidak memiliki prediksi tunggal untuk kelas lain? bagaimana membuat model sensitif untuk memprediksi kelas yang lebih sedikit dan meningkatkan akurasi terutama jika konklusi dalam data pelatihan rendah seperti 1 - 3%.

model = Sequential()
model.add(Dense(40, input_dim=20,  activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10,  activation='relu'))
model.add(Dense(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

model.fit(X, Y, epochs=500,  verbose=1)

6
2018-04-02 21:30


asal


Jawaban:


Cara termudah untuk menyeimbangkan kehilangan Anda adalah:

  1. Tentukan a class_weights dict:

    class_weights_dict = {0: 1.0 / 0_class_freq, 1: 1.0 / 1_class_freq, ... }
    

    Dimana i_class_freq adalah frekuensi i-th kelas.

  2. Ubah-Mu fit berfungsi untuk:

    model.fit(X, Y, epochs=500,  verbose=1, class_weight=class_weights_dict)
    

Model yang ditentukan di atas harus setara dengan model Anda dengan kelas Bayessian yang ditulis ulang.


3
2018-04-03 21:03



Salah satu cara untuk memecahkan adalah dengan lebih dari sampling di bawah contoh kelas yang diwakili. yaitu, jika Anda memiliki dua kelas A (66,6%) dan B (33,3%), maka Anda mengambil sampel B dua kali dibandingkan dengan A. Untuk membuatnya lebih sederhana, Anda dapat mengubah dataset Anda dengan menduplikasi B sekali dan membuat dataset seperti A + 2 * B.

Atau, Anda dapat memodifikasi fungsi kerugian Anda sedemikian rupa sehingga memberikan lebih banyak bobot saat salah klasifikasi kelas di bawah.


0
2018-04-03 06:38