Satu alternatif penyandian panas untuk nilai kategori besar?

13

Hai punya dataframe dengan nilai kategori besar lebih dari 1600 kategori apakah ada cara saya bisa menemukan alternatif sehingga saya tidak memiliki lebih dari 1.600 kolom.

Saya menemukan ini di bawah ini tautan menarik http://amunategui.github.io/feature-hashing/#sourcecode

Tetapi mereka mengkonversi ke kelas / objek yang tidak saya inginkan. Saya ingin hasil akhir saya sebagai kerangka data sehingga saya bisa menguji dengan model pembelajaran mesin yang berbeda? atau apakah ada cara saya dapat menggunakan matriks genetrated untuk melatih model pembelajaran mesin lain selain regresi logistik atau XGBoost?

Apakah ada yang bisa saya terapkan?

vinaykva
sumber
Ini benar-benar masalah? Dengan asumsi Anda menggunakan representasi matriks jarang, pengkodean onehot tidak akan menjadi masalah nyata.
Louis T
@LouisT Saya memiliki jutaan catatan, lebih dari 500 juta catatan
vinaykva
Masih jika ini panas, itu tidak masalah jika menggunakan matriks jarang
Louis T
Kompleksitas @LouisT akan meningkat dan waktu untuk melatih juga akan meningkat dan data saya akan menjadi terlalu jarang
vinaykva
1
posting Anda sekitar 1 tahun yang lalu, dan mungkin tidak tertarik lagi, tetapi jika Anda masih tertarik mendengar Entity Embedding menggunakan Neural Nets? medium.com/@satnalikamayank12/…
TwinPenguins

Jawaban:

10

Satu opsi adalah memetakan nilai langka ke 'lainnya'. Ini biasanya dilakukan dalam pemrosesan bahasa alami misalnya - intuisi bahwa label yang sangat jarang tidak memiliki banyak kekuatan statistik.

Saya juga telah melihat orang memetakan nilai kategoris 1-hot ke vektor dimensi rendah, di mana setiap vektor 1-hot direpresentasikan kembali sebagai gambar dari Gaussian multivarian. Lihat misalnya makalah Deep Knowledge Tracing, yang mengatakan pendekatan ini dimotivasi oleh gagasan penginderaan terkompresi:

BARANIUK, R. Sensing kompresif. Majalah pemrosesan sinyal IEEE 24, 4 (2007).

Secara khusus, mereka memetakan setiap vektor dengan panjang N ke vektor pendek dengan panjang log2 (N). Saya belum melakukan ini sendiri tetapi saya pikir ini akan pantas untuk dicoba.

tom
sumber
Saya bertanya-tanya bagaimana cara menghitung jarak dengan pengkodean seperti itu?
eric2323223
2

Anda dapat membaca data dan pertama-tama mendapatkan daftar semua nilai unik dari variabel kategori Anda. Kemudian Anda bisa memasukkan satu objek encoder panas (seperti sklearn.preprocessing.CategoricalEncoder) pada daftar nilai unik Anda.

Metode ini juga dapat membantu dalam kerangka uji kereta api atau saat Anda membaca data dalam bentuk potongan. Saya telah membuat modul python yang melakukan semua ini sendiri. Anda dapat menemukannya di repositori GitHub - dummyPy ini

Sebuah tutorial singkat tentang hal ini - Bagaimana Melakukan One Hot Encode Variabel Kategorikal dengan Python?

Yashu Seth
sumber
0

Anda dapat melakukan penimbunan nilai yang serupa, sehingga nilai (atau kolom) yang memegang nilai paling dekat (atau memiliki banyak kesamaan) pola dapat diganti dengan satu nilai (atau kolom) dan dengan demikian nilai 1600 Anda bisa turun untuk mengatakan 400 (atau bahkan kurang).

Ex. untuk nilai seperti (awan seperti - Awan Nimbus, gerimis, hujan ringan, hujan, hujan lebat dapat dikonversi menjadi (hujan ringan, hujan, hujan lebat).

akash manakshe
sumber