Saya mencoba memahami bagaimana saya dapat menyandikan variabel kategori menggunakan estimasi kemungkinan, tetapi sejauh ini hanya sedikit keberhasilan.
Setiap saran akan sangat dihargai.
Saya mencoba memahami bagaimana saya dapat menyandikan variabel kategori menggunakan estimasi kemungkinan, tetapi sejauh ini hanya sedikit keberhasilan.
Setiap saran akan sangat dihargai.
Jawaban:
Saya juga mempelajari topik ini, dan inilah yang saya temukan:
Jenis pengkodean ini disebut pengkodean kemungkinan , pengkodean dampak atau pengkodean target
Idenya adalah mengkodekan variabel kategori Anda dengan menggunakan variabel target (kontinu atau kategori tergantung pada tugas). Misalnya, jika Anda memiliki tugas regresi, Anda dapat menyandikan variabel kategori Anda dengan rata-rata target. Untuk setiap kategori, Anda menghitung rata-rata target yang sesuai (di antara kategori ini) dan mengganti nilai kategori dengan mean ini.
Jika Anda memiliki tugas klasifikasi, Anda menghitung frekuensi relatif target Anda sehubungan dengan setiap nilai kategori.
Dari sudut pandang matematika, pengodean ini berarti probabilitas target Anda, tergantung pada setiap nilai kategori.
Jika Anda melakukannya dengan cara yang sederhana, seperti yang saya jelaskan di atas, Anda mungkin akan mendapatkan estimasi yang bias. Itu sebabnya di komunitas Kaggle mereka biasanya menggunakan 2 level cross-validation. Baca komentar ini oleh raddar di sini . Notebook yang sesuai ada di sini .
Kutipan:
Itu mengambil nilai rata-rata y. Tapi tidak berarti sederhana, tetapi dalam validasi silang dalam cara validasi silang;
Katakanlah kita memiliki validasi silang 20 kali lipat. kita perlu entah bagaimana menghitung nilai rata-rata fitur untuk # 1 kali lipat menggunakan informasi dari # 2- # 20 lipatan saja.
Jadi, Anda mengambil # 2- # 20 lipatan, membuat validasi silang lain yang ditetapkan di dalamnya (saya lakukan 10 kali lipat). hitung rata-rata untuk setiap kali absen satu kali (pada akhirnya Anda mendapatkan 10 berarti). Anda rata-rata 10 berarti ini dan menerapkan vektor itu untuk set validasi # 1 utama Anda. Ulangi itu untuk sisa 19 lipatan.
Sulit untuk dijelaskan, sulit untuk dimengerti dan dikuasai :) Tetapi jika dilakukan dengan benar dapat membawa banyak manfaat :)
Implementasi lain dari pengkodean ini ada di sini .
Di R library vtreat mereka memiliki implementasi pengkodean dampak. Lihat posting ini .
Di perpustakaan CatBoost mereka memiliki banyak opsi untuk pengkodean variabel kategorikal termasuk pengkodean target.
Belum ada pengkodean di sklearn.
Pengkodean target sekarang tersedia di sklearn melalui paket category_encoders.
Encoder Target
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = Tidak ada, drop_invariant = Salah, return_df = Benar, impute_missing = Benar, handle_unknown = 'impute', min_samples_leaf = 1, smoothing = 1)
Target Encode untuk fitur-fitur kategorikal. Berdasarkan pendekatan cuti satu.
Seperti yang dicatat oleh josh dalam komentar di atas.
Kemungkinan encoding masih belum tersedia di scikit belajar. Anda dapat melakukannya dengan membuat kamus, dan kemudian melakukan fungsi ganti.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]