Kelas tidak seimbang: class_weight untuk algoritma ML di Spark MLLib

8

Di python sklearn, ada beberapa algoritma (misalnya regresi, hutan acak ... dll.) Yang memiliki parameter class_weight untuk menangani data yang tidak seimbang.

Namun, saya tidak menemukan parameter seperti itu untuk algoritma MLLib. Apakah ada rencana penerapan class_weight untuk beberapa algoritma MLLib? Atau apakah ada pendekatan dalam MLLib untuk data yang tidak seimbang? Atau kita benar-benar harus menangani semua naik-turunnya diri kita sendiri di MLLib?

Terima kasih!

sejenis kacang-kacangan dari Jepang
sumber
Ya, algoritma dalam MLLib Spark disiapkan untuk menangani masalah yang kompleks. Selain itu, dari pemahaman saya juga tidak ada cara untuk melakukan pemisahan bertingkat. Dengan demikian, setiap metrik kinerja yang Anda peroleh tidak akan direpresentasikan dengan tepat.
Samuel Sherman
Berikut ini adalah contoh regresi logistik tertimbang dalam MLlib dari dokumentasi 2.2.
Emre

Jawaban:

1

Algoritma dalam MLLib selalu digunakan sebagai dasar dalam skenario produksi, dan mereka memang tidak dapat menangani beberapa masalah industri, seperti ketidakseimbangan label. Jadi jika Anda ingin menggunakannya, Anda harus menyeimbangkan contoh Anda.

Selain itu, mekanisme BSP di Spark, Anda bisa melihatnya sebagai data paralel , mungkin menjadi alasan utama mengapa Spark tidak mencakup masalah itu. Mungkin sulit bagi Spark untuk mengirimkan instance ke semua node dalam cluster, sedangkan instance parsial dari setiap node berbagi distribusi label yang sama dengan keseluruhan.

Akhirnya, Anda hanya perlu mempertimbangkan nilai kerugian untuk setiap instance berlabel minor selama proses iterasi Anda jika Anda ingin mengimplementasikannya.

Semoga ini bisa membantu Anda, semoga sukses -)

joe
sumber
1

Salah satu cara saya menangani kelas yang tidak seimbang di masa lalu adalah membangun classifier berdasarkan sampel dataset untuk memiliki 50/50 sampel split. Ini berarti menggunakan semua titik data yang terkait dengan kelas minoritas Anda, dan secara acak mengambil sampel titik data yang sama dari kelas mayoritas Anda.

Apakah ini akan berhasil tergantung pada seberapa banyak data yang Anda miliki di kelas minoritas Anda - jika Anda memiliki ketidakseimbangan kelas ekstrim (<5% instance kelas minoritas), maka Anda mungkin ingin mempertimbangkan oversampling sintetis.

Anda mungkin bisa melihatnya pydf.rdd.takeSample()dalam percikan, atau df.sampledalam panda.

ngopal
sumber
0

Cara saya menangani ketidakseimbangan kelas adalah dengan metode berikut: 1. Menggabungkan kelas yang paling jarang muncul ke kelas lain. Jelas Anda harus menggunakan beberapa jenis pengetahuan domain daripada menggabungkannya secara acak. 2. Gunakan teknik resampling seperti oversampling, undersampling, SMOTE, ADASYN. Saya tidak merekomendasikan menggunakan teknik ini karena mereka tidak benar-benar mewakili data aktual. Tetapi bagaimanapun Anda bisa melihatnya

Siddhi Kiran Bajracharya
sumber