Saya mencoba membangun multi-label classifier untuk menetapkan topik ke dokumen yang ada menggunakan scikit
Saya sedang memproses dokumen saya melewati mereka melalui TfidfVectorizer
label melalui MultiLabelBinarizer
dan membuat OneVsRestClassifier
dengan SGDClassifier
sebagai penaksir.
Namun ketika menguji classifier saya, saya hanya mendapatkan skor hingga 0,29 yang dari apa yang saya baca cukup rendah untuk masalah yang sama. Saya mencoba beberapa opsi pada TfidfVectorizer seperti stopwords, unigrams, stemming dan sepertinya tidak ada yang mengubah hasil sebanyak itu.
Saya juga terbiasa GridSearchCV
mendapatkan parameter terbaik untuk estimator saya dan saat ini saya kehabisan ide tentang apa yang harus dicoba selanjutnya.
Pada saat yang sama, dari apa yang saya pahami saya tidak dapat gunakan scikit.metrics
dengan OneVsRestClassifier
jadi bagaimana saya bisa mendapatkan beberapa metrik (F1, Precision, Recall dll) sehingga untuk mencari tahu apa yang salah?
Mungkinkah ada masalah dengan korpus data saya?
Update: Saya juga mencoba menggunakan CountVectorizer
dan HashingVectorizer
dan pipelining mereka untuk TfidfTransformer
tetapi hasilnya sama. Jadi saya menduga bahwa pendekatan kata-kata melakukan yang terbaik dalam domain tokenisasi dan sisanya terserah pada pengklasifikasi ...
sumber
score
pada classifier,Returns the mean accuracy on the given test data and labels. In multi-label classification, this is the subset accuracy which is a harsh metric since you require for each sample that each label set be correctly predicted.
Jawaban:
Akurasi himpunan bagian memang metrik yang keras. Untuk memahami seberapa baik atau buruknya 0,29, beberapa ide:
Anda juga mungkin ingin menghitung skor hamming, untuk melihat apakah classifier Anda tidak mengerti, atau malah bagus tetapi memiliki masalah dalam memprediksi semua label dengan benar. Lihat di bawah untuk menghitung skor hamming.
Lihat Bagaimana cara menghitung presisi / recall untuk klasifikasi multiclass-multilabel? . Saya lupa apakah sklearn mendukungnya, saya ingat itu memiliki beberapa keterbatasan, mis. Sklearn tidak mendukung multi-label untuk matriks kebingungan . Itu akan menjadi ide yang bagus untuk melihat angka-angka ini.
Skor Hamming :
Dalam pengaturan klasifikasi multilabel ,
sklearn.metrics.accuracy_score
hanya menghitung akurasi subset (3): yaitu himpunan label yang diprediksi untuk sampel harus sama persis dengan himpunan label yang sesuai di y_true.Cara penghitungan akurasi ini kadang-kadang dinamai, mungkin kurang ambigu, rasio kecocokan yang tepat (1):
Cara khas lain untuk menghitung akurasi didefinisikan dalam (1) dan (2), dan kurang ambigu disebut sebagai skor Hamming (4) (karena terkait erat dengan hilangnya Hamming), atau akurasi berbasis label . Itu dihitung sebagai berikut:
Berikut adalah metode python untuk menghitung skor Hamming:
Output:
(1) Sorower, Mohammad S. " Sebuah survei literatur tentang algoritma untuk pembelajaran multi-label. " Oregon State University, Corvallis (2010).
(2) Tsoumakas, Grigorios, dan Ioannis Katakis. " Klasifikasi multi-label: Tinjauan. " Departemen Informatika, Aristoteles University of Thessaloniki, Yunani (2006).
(3) Ghamrawi, Nadia, dan Andrew McCallum. " Klasifikasi multi-label kolektif. " Prosiding konferensi internasional ACM ke-14 tentang Informasi dan manajemen pengetahuan. ACM, 2005.
(4) Godbole, Shantanu, dan Sunita Sarawagi. " Metode diskriminatif untuk klasifikasi multi-label. " Kemajuan dalam Penemuan Pengetahuan dan Penambangan Data. Springer Berlin Heidelberg, 2004. 22-30.
sumber
hamming_score
kesalahan fungsi pada Keras: <-ipython input-34-16066d66dfdd> di hamming_score (y_true, y_pred, menormalkan, sample_weight) 60 ''' 61 acc_list = [] ---> 62 untuk i dalam rentang (y_true.shape [ 0]): 63 set_true = set (np.where (y_true [i]) [0]) 64 set_pred = set (np.where (y_pred [i]) [0]) TypeError: indeks dikembalikan non-int (tipe NoneType )Apakah skor 0,29 tidak cukup? Seperti apa matriks kebingungan Anda? Apakah ada beberapa topik yang tidak dapat dipisahkan mungkin hanya dengan melihat isi kata?
Jika tidak, cobalah untuk mengubah masalah Anda: Hipotesis bahwa skor yang rendah sebenarnya adalah yang terbaik yang dapat dilakukan oleh penggolong Anda pada data Anda. Itu berarti bahwa dokumen Anda tidak dapat diklasifikasikan menggunakan pendekatan ini.
Untuk menguji hipotesis ini, Anda memerlukan seperangkat dokumen uji dengan karakteristik kata-kata yang diketahui (yang Anda buat sendiri). Anda harus mendapatkan skor 100%.
Jika tidak, maka Anda memiliki bug. Jika tidak, Anda memerlukan pendekatan berbeda untuk mengklasifikasikan dokumen Anda. Tanyakan kepada diri Anda: bagaimana perbedaan dokumen dari kelas yang berbeda satu sama lain? Apakah saya perlu melihat fitur lain dari dokumen saya, dll.
sumber