Saya saat ini menghadapi beberapa masalah menganalisis dataset tweet dengan mesin vektor dukungan. Masalahnya adalah bahwa saya memiliki satu set pelatihan kelas biner yang tidak seimbang (5: 2); yang diharapkan sebanding dengan distribusi kelas nyata. Saat memprediksi saya mendapatkan presisi rendah (0,47) untuk kelas minoritas di set validasi; recall adalah 0,88. Saya mencoba menggunakan beberapa metode oversampling dan under-sampling (dilakukan pada set pelatihan) yang tidak meningkatkan presisi karena set validasi tidak seimbang juga untuk mencerminkan distribusi kelas nyata. Saya juga menerapkan biaya yang berbeda di mesin vektor dukungan, yang membantu. Sekarang sepertinya saya tidak dapat meningkatkan kinerja lagi.
Apakah ada di antara Anda yang memiliki saran apa yang bisa saya lakukan untuk meningkatkan ketepatan saya tanpa mengganggu daya ingat saya? Lebih jauh, apakah ada yang tahu mengapa saya mendapatkan lebih banyak positif palsu daripada negatif palsu (positif adalah kelas minoritas)?
sumber
Jawaban:
Karena positif adalah kelas minoritas. Ada banyak contoh negatif yang bisa menjadi positif palsu. Sebaliknya, ada lebih sedikit contoh positif yang bisa menjadi negatif palsu.
Ingat kembali bahwa Recall = Sensitivity=TP( TP+ FN)
Sensitivitas (True Positive Rate) terkait dengan False Positive Rate (1-spesifisitas) sebagaimana divisualisasikan oleh kurva ROC. Pada satu ekstrim, Anda menyebut setiap contoh positif dan memiliki sensitivitas 100% dengan 100% FPR. Di lain, Anda memanggil tidak ada contoh positif dan memiliki sensitivitas 0% dengan 0% FPR. Ketika kelas positif adalah minoritas, bahkan FPR yang relatif kecil (yang mungkin Anda miliki karena Anda memiliki recall tinggi = sensitivitas = TPR) akan berakhir menyebabkan jumlah FP yang tinggi (karena ada begitu banyak contoh negatif).
Sejak
Precision=TP( TP+ FP)
Bahkan pada FPR yang relatif rendah, FP akan membanjiri TP jika jumlah contoh negatif jauh lebih besar.
Kalau tidak,
Klasifikasi positif:C+
Contoh positif:HAI+
Presisi =P(HAI+|C+) =P(C+|HAI+) P(HAI+)P(C+)
P (O +) rendah ketika kelas positif kecil.
Seperti yang disebutkan oleh @rinspy, GBC bekerja dengan baik dalam pengalaman saya. Namun itu akan lebih lambat dari SVC dengan kernel linear, tetapi Anda dapat membuat pohon yang sangat dangkal untuk mempercepatnya. Selain itu, lebih banyak fitur atau lebih banyak pengamatan mungkin membantu (misalnya, mungkin ada beberapa fitur yang saat ini tidak dianalisis yang selalu disetel ke beberapa nilai di semua FP Anda saat ini).
Mungkin juga layak untuk merencanakan kurva ROC dan kurva kalibrasi. Ini mungkin terjadi bahwa meskipun classifier memiliki presisi rendah, itu bisa mengarah pada estimasi probabilitas yang sangat berguna. Misalnya, hanya dengan mengetahui bahwa hard drive mungkin memiliki kemungkinan gagal 500 kali lipat meningkat, meskipun kemungkinan absolutnya cukup kecil, mungkin informasi penting.
Juga, presisi rendah pada dasarnya berarti bahwa classifier mengembalikan banyak kesalahan positif. Namun ini mungkin tidak terlalu buruk jika positif palsu itu murah.
sumber
Metode untuk dicoba:
UnderSampling:
Saya sarankan menggunakan teknik pengambilan sampel dan kemudian latih classifier Anda.
Imbalanced Learning menyediakan api gaya scikit belajar untuk dataset yang tidak seimbang dan harus menjadi titik awal yang baik untuk pengambilan sampel dan algoritma untuk dicoba.
Perpustakaan : https://imbalanced-learn.readthedocs.io/en/stable/
SVM Berbasis Peringkat:
Ini telah terbukti memberikan peningkatan dalam ingatan untuk sistem presisi tinggi dan digunakan oleh google untuk mendeteksi iklan yang buruk. Saya sarankan untuk mencobanya.
Kertas Referensi untuk SVM:
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37195.pdf
sumber
Pendekatan standar adalah untuk menimbang kesalahan Anda berdasarkan frekuensi kelas. Misalnya, jika Anda melakukannya dengan Python dengan sklearn:
sumber