Pengkodean fitur kategorikal ke angka untuk pembelajaran mesin

14

Banyak algoritma pembelajaran mesin, misalnya jaringan saraf, mengharapkan untuk berurusan dengan angka. Jadi, ketika Anda memiliki data kategorikal, Anda perlu mengubahnya. Maksud saya kategorikal, misalnya:

Merek mobil: Audi, BMW, Chevrolet ... ID Pengguna: 1, 25, 26, 28 ...

Meskipun id pengguna adalah angka, itu hanya label, dan tidak berarti apa pun dalam hal kesinambungan, seperti usia atau jumlah uang.

Jadi, pendekatan dasar tampaknya menggunakan vektor biner untuk menyandikan kategori:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Tidak apa-apa ketika ada beberapa kategori, tetapi di luar itu terlihat sedikit tidak efisien. Misalnya, saat Anda memiliki 10.000 id pengguna untuk disandikan, berarti 10.000 fitur.

Pertanyaannya adalah, adakah cara yang lebih baik? Mungkin satu yang melibatkan probabilitas?

Nucular
sumber
3
Mengapa Anda ingin memasukkan ID pengguna dalam model prediksi? Adapun variabel kategori lainnya dengan kardinalitas lebih besar dari yang Anda inginkan ketika Anda menggunakan pengkodean variabel dummy seperti yang Anda jelaskan, pertama-tama saya menjalankannya melalui pohon keputusan sebagai satu-satunya prediktor - untuk meruntuhkan level. Dapat juga
mengolah
Ini terdengar menarik - seperti efek acak dalam model statistik di mana Anda tertarik pada efek tertentu untuk individu tertentu. Saya dapat membayangkan situasi di mana itu akan berguna, misalnya jika Anda melihat individu yang sama berulang kali dan ingin memprediksi apa yang akan dilakukan individu tersebut. Silakan bagikan lebih banyak tentang rencana Anda jika Anda bisa. Juga, Anda mungkin melihat pemodelan bertingkat, meskipun itu lebih tradisional digunakan dalam pengaturan inferensial daripada pembelajaran mesin.
Anne Z.
Saya ingat pernah membaca tentang kontes ML, di mana beberapa peneliti pintar mendeteksi bahwa id pengguna dalam data telah diberikan pada saat pembuatan akun pengguna. Karenanya cap waktu, yang telah dikaburkan, terungkap (secara positif memengaruhi prediksi tanggapan). Di samping kasus-kasus seperti itu dan yang disebutkan oleh Anne (sistem rekomendasi) saya tidak akan memasukkan userID.
steffen
Anne - Bukankah model efek acak sebenarnya TIDAK tertarik pada individu - sehingga mereka dianggap sampel dari suatu populasi?
B_Miner
Saya tidak mengerti, jika masalah pembelajarannya adalah memprediksi kategori biner kaya / tidak kaya, mengapa tidak masuk akal untuk memiliki fitur untuk merek mobil pengguna tertentu. ID pengguna dapat digunakan jika jaringan sosial individu diketahui: misalnya untuk menunjukkan bahwa teman pengguna X lebih rentan menjadi kaya. Apakah ada yang salah dengan alur pemikiran ini?
Vladtn

Jawaban:

6

Anda selalu dapat memperlakukan id pengguna Anda sebagai sekumpulan kata: sebagian besar pengklasifikasi teks dapat menangani ratusan ribu dimensi saat data jarang (banyak nol yang tidak perlu Anda simpan secara eksplisit di memori, misalnya jika Anda menggunakan Baris Terkompresi yang Sparse representasi untuk matriks data Anda).

Namun pertanyaannya adalah: apakah masuk akal jika Anda memiliki masalah khusus untuk memperlakukan id pengguna sebagai fitur? Bukankah lebih masuk akal untuk mendenormalisasi data relasi Anda dan menggunakan fitur pengguna (usia, lokasi, karakter dari nama panggilan online, riwayat transaksi ...) daripada id mereka?

Anda juga bisa melakukan pengelompokan vektor pengguna mentah Anda dan menggunakan id pusat terdekat N teratas sebagai fitur yang diaktifkan untuk bukan id pengguna.

ogrisel
sumber
OK, sementara ini lebih merupakan pertanyaan umum, saya melihat sebagian besar dari Anda berkonsentrasi pada masalah id pengguna, jadi inilah mengapa saya ingin menggunakannya. Mari kita lihat salah satu kompetisi Kaggle, tentang Grockit: kaggle.com/c/WhatDoYouKnow . Tujuannya adalah untuk memprediksi apakah pengguna akan menjawab pertanyaan dengan benar. Menurut saya, ini masalah yang serupa dengan sistem yang merekomendasikan, Anda hanya mendapatkan pertanyaan alih-alih film dan memperbaiki / tidak benar menilai, ditambah beberapa data lainnya.
Stempel waktu
1
Dalam hal ini Anda dapat membuat asumsi bahwa pengguna independen dan Anda dapat membangun satu classifier per pengguna yang hanya dilatih berdasarkan sejarah mereka sendiri.
ogrisel
1

Pengkodean sama sisi mungkin adalah apa yang Anda cari ketika mencoba untuk menyandikan kelas ke dalam jaringan saraf. Ini cenderung bekerja lebih baik daripada pengkodean "1 of n" yang dirujuk dalam posting lain. Untuk referensi boleh saya sarankan: http://www.heatonresearch.com/wiki/Equilateral

S Pike
sumber
Ini tampaknya terkait dengan pengkodean nilai output, bukan pengkodean kategoris untuk nilai input yang diminta OP.
Alex