Pertanyaan ValueError: Solver ini membutuhkan sampel minimal 2 kelas dalam data, tetapi datanya hanya berisi satu kelas: 1.0


Saya memiliki dataset pelatihan dari 8670 percobaan dan setiap percobaan memiliki panjang sampel 125 kali sementara set tes saya terdiri dari 578 percobaan. Ketika saya menerapkan algoritma SVM dari scikit-learn, saya mendapatkan hasil yang cukup bagus.

Namun, ketika saya menerapkan regresi logistik, kesalahan ini terjadi:

"ValueError: Pemecah kebutuhan ini sampel setidaknya 2 kelas dalam data, tetapi data hanya berisi satu kelas: 1.0".

Pertanyaan saya adalah mengapa SVM mampu memberikan prediksi tetapi regresi logistik memberikan kesalahan ini?

Mungkinkah ada sesuatu yang salah dalam dataset atau hanya regresi logistik yang tidak dapat digolongkan karena sampel pelatihan terlihat mirip dengan itu?


6
2017-07-01 06:00


asal


Jawaban:


Saya membaca ini dalam edisi berikut pada modul linear serupa:https://github.com/lensacom/sparkit-learn/issues/49

"Sayangnya ini adalah bug memang. Sparkit melatih model linear sklearn secara paralel, kemudian rata-rata mereka dalam langkah mengurangi. Setidaknya ada satu blok, yang hanya berisi satu dari label. Untuk memeriksa coba yang berikut:

train_Z[:, 'y']._rdd.map(lambda x: np.unique(x).size).filter(lambda x: x < 2).count()

Untuk menyelesaikan Anda dapat mengacak data kereta untuk menghindari pemblokiran dengan satu label, tetapi ini masih menunggu solusi cerdas. "

EDIT: Saya menemukan solusi, analisis atas kesalahan itu benar. Ini akan menjadi solusi.

Untuk mengocok array dalam urutan yang sama saya menggunakan modul scikitlearn utils:

from sklearn.utils import shuffle
X_shuf, Y_shuf = shuffle(X_transformed, Y)

Kemudian gunakan array yang dikocok untuk melatih model Anda lagi dan itu akan bekerja!


8
2017-07-29 13:35