Jadi, saya seorang pemula di bidang ML dan saya mencoba untuk melakukan klasifikasi. Tujuan saya adalah untuk memprediksi hasil acara olahraga. Saya telah mengumpulkan beberapa data historis dan sekarang mencoba untuk melatih classifier. Saya mendapatkan sekitar 1.200 sampel, 0,2 di antaranya saya pisahkan untuk keperluan pengujian, yang lain saya masukkan ke pencarian kotak (termasuk validasi silang) dengan berbagai pengklasifikasi. Saya sudah mencoba SVM dengan kernel linear, rbf dan polinominal dan Random Forests saat ini. Sayangnya, saya tidak bisa mendapatkan akurasi secara signifikan lebih besar dari 0,5 (sama dengan pilihan kelas acak). Apakah itu berarti saya tidak dapat memprediksi hasil dari peristiwa yang begitu rumit? Atau saya bisa mendapatkan setidaknya akurasi 0,7-0,8? Jika layak, lalu apa yang harus saya perhatikan selanjutnya?
- Dapatkan lebih banyak data? (Saya dapat memperbesar dataset hingga 5 kali)
- Coba pengklasifikasi yang berbeda? (Regresi logistik, kNN, dll)
- Mengevaluasi ulang set fitur saya? Apakah ada alat ML untuk dianalisis, fitur mana yang masuk akal dan mana yang tidak? Mungkin, saya harus mengurangi set fitur saya (saat ini saya punya 12 fitur)?
Jawaban:
Pertama-tama, jika classifier Anda tidak lebih baik daripada pilihan acak, ada risiko bahwa tidak ada koneksi antara fitur dan kelas. Pertanyaan yang bagus untuk ditanyakan kepada diri sendiri dalam posisi seperti itu, apakah cuaca Anda atau pakar domain dapat menyimpulkan kelas (dengan akurasi lebih besar daripada pengelompokan acak) berdasarkan fitur yang diberikan. Jika tidak, maka mendapatkan lebih banyak baris data atau mengubah classifier tidak akan membantu. Yang perlu Anda lakukan adalah mendapatkan lebih banyak data menggunakan berbagai fitur.
JIKA di sisi lain Anda berpikir informasi yang diperlukan untuk menyimpulkan kelas sudah ada di label, Anda harus memeriksa apakah classifier Anda menderita bias yang tinggi atau masalah varians yang tinggi.
Untuk melakukan ini, buat grafik kesalahan validasi dan set kesalahan pelatihan, sebagai fungsi dari contoh pelatihan.
Jika garis tampaknya konvergen ke nilai yang sama dan dekat di akhir, maka penggolong Anda memiliki bias tinggi dan menambahkan lebih banyak data tidak akan membantu. Ide yang baik dalam hal ini adalah mengubah penggolong untuk yang memiliki varians lebih tinggi, atau cukup menurunkan parameter regularisasi dari yang sekarang.
Jika di sisi lain garis-garisnya cukup berjauhan, dan Anda memiliki kesalahan set pelatihan rendah tetapi kesalahan validasi tinggi, maka classifier Anda memiliki varians terlalu tinggi. Dalam hal ini, mendapatkan lebih banyak data sangat mungkin membantu. Jika setelah mendapatkan lebih banyak data varians masih akan terlalu tinggi, Anda dapat meningkatkan parameter regularisasi.
Ini adalah aturan umum yang akan saya gunakan ketika menghadapi masalah seperti masalah Anda.
Bersulang.
sumber
Saya menyarankan untuk mengambil langkah mundur dan melakukan beberapa analisis data eksplorasi sebelum mencoba klasifikasi. Anda perlu memeriksa fitur Anda secara individual untuk melihat apakah ada hubungan dengan hasil yang diinginkan - mungkin fitur yang Anda miliki tidak memiliki hubungan dengan label kelas. Bagaimana Anda tahu jika fitur yang Anda miliki akan ada gunanya?
Anda bisa mulai dengan melakukan pengujian hipotesis atau analisis korelasi untuk menguji hubungan. Menghasilkan histogram khusus kelas untuk fitur (yaitu memplot histogram data untuk setiap kelas, untuk fitur yang diberikan pada sumbu yang sama) juga bisa menjadi cara yang baik untuk menunjukkan jika fitur membedakan dengan baik antara kedua kelas.
Penting untuk diingat meskipun tidak membiarkan hasil analisis eksplorasi Anda memengaruhi pilihan Anda untuk klasifikasi. Memilih fitur untuk klasifikasi berdasarkan pada analisis eksplorasi sebelumnya pada data yang sama, dapat menyebabkan perkiraan kinerja yang berlebihan dan bias (lihat diskusi di sini ) tetapi analisis eksplorasi setidaknya akan memberi Anda gambaran apakah tugas yang Anda coba lakukan adalah lebih adil. bisa jadi.
sumber
Ada baiknya Anda memisahkan data Anda menjadi data pelatihan dan data uji.
Apakah kesalahan pelatihan Anda turun ketika Anda dilatih? Jika tidak, maka Anda mungkin memiliki bug dalam algoritma pelatihan Anda. Anda mengharapkan kesalahan pada set tes Anda lebih besar dari kesalahan pada set pelatihan Anda, jadi jika Anda memiliki kesalahan yang sangat tinggi pada set pelatihan Anda, ada sedikit harapan untuk berhasil.
Menyingkirkan fitur dapat menghindari beberapa jenis overfitting. Namun, itu seharusnya tidak meningkatkan kesalahan pada set pelatihan Anda. Kesalahan rendah pada set latihan Anda dan kesalahan tinggi pada set tes Anda mungkin merupakan indikasi bahwa Anda mengenakan pakaian menggunakan set fitur yang terlalu fleksibel. Namun, lebih aman untuk memeriksa ini melalui validasi silang daripada pada set tes Anda. Setelah Anda memilih set fitur Anda berdasarkan set tes Anda, itu tidak lagi valid sebagai set tes.
sumber
Mengapa tidak mengikuti prinsip "lihat dulu petak data". Satu hal yang dapat Anda lakukan adalah sebar 2 D dari kepadatan bersyarat dua kelas untuk dua kovariat. Jika Anda melihat ini dan melihat hampir tidak ada pemisahan yang dapat menunjukkan kurangnya prediktabilitas dan Anda dapat melakukan ini dengan semua kovariat. Itu memberi Anda beberapa ide tentang kemampuan untuk menggunakan kovariat ini untuk memprediksi. Jika Anda melihat beberapa harapan bahwa variabel-variabel ini dapat memisahkan sedikit maka mulailah berpikir tentang diskriminasi linier, diskriminasi kuadrat, diskriminasi kernel, regularisasi, klasifikasi pohon, SVM dll.
sumber