Pengkodean fitur kardinalitas tinggi (banyak kategori) saat fitur sangat berbeda pada kardinalitas

8

Saya telah mencari pertanyaan tentang pengkodean fitur kategorikal, tetapi tidak dapat menemukan yang membahas masalah saya. Maaf jika saya melewatkannya.


Katakanlah kita memiliki dataset dengan variabel biner dan nominal yang kira-kira sama pentingnya.

Sebagian besar pengklasifikasi tidak dapat menangani tipe kategorikal secara langsung, jadi ini harus ditransformasikan - misalnya menggunakan pengkodean satu-panas (variabel dummy) seperti yang dijelaskan dalam jawaban ini .

  • Jika satu variabel kategori memiliki kardinalitas tinggi, tidakkah menyandikannya dengan cara "mengalahkan" variabel lain (misalnya biner)? Yang saya maksud dengan "kardinalitas" adalah jumlah kategori dalam variabel nominal.

  • Jika model classifier kami mengetahui hubungan antar variabel, bukankah tidak perlu mencari hubungan antara "komponen" boneka biner yang diperkenalkan dari variabel yang sama ?

Dan jika demikian, bagaimana ini dapat diatasi?

Solusi terbaik yang dapat saya pikirkan adalah secara logis mengelompokkan properti kardinalitas tinggi ke dalam "ember", namun jika ada nilai unik yang cukup untuk menjadi masalah, maka pengelompokan secara manual akan memakan tenaga juga.


Sunting: Ini sepele dan hanya mengatasi sebagian masalah, tetapi salah satu hal yang akhirnya saya lakukan adalah mengganti semua nilai kategorikal yang relatif jarang dengan kategori "lain" yang baru. Mungkin memakan waktu untuk mengoptimalkan ambang batas ketika mempertimbangkan nilai "jarang", tetapi setidaknya pendekatan ini bisa otomatis.

pengguna5226582
sumber
1
Solusi lain bisa menggunakan laso dengan beberapa versi "laso yang dikelompokkan" untuk mendapatkan algoritma untuk mengusulkan kategori yang dapat digabungkan, karena secara statistik serupa. Ini telah dibahas di sini sebelumnya, lihat stats.stackexchange.com/questions/146907/…
kjetil b halvorsen

Jawaban:

8

Jika satu variabel kategori memiliki kardinalitas tinggi, tidakkah menyandikannya dengan cara "mengalahkan" variabel lain (misalnya biner)?

Itu tergantung pada algoritma.

Algoritma yang didasarkan pada pengambilan sampel kolom (hutan acak, pohon yang sangat acak, peningkatan gradien atau pengklasifikasi kantong ...) melatih banyak model pada subsampel data. Jika 90% kolom Anda mewakili variabel "dummified", ada kemungkinan bahwa sejumlah besar model benar-benar bekerja pada variabel yang sama, oleh karena itu, menjadikannya lebih berkorelasi daripada yang seharusnya, sehingga meningkatkan kinerja.

Metode regresi linier tidak akan terpengaruh, mereka hanya akan memberikan bobot pada setiap variabel biner yang dihasilkan oleh variabel yang disandikan.

Dengan tetangga terdekat dan metode berbasis kesamaan (seperti kernel SVM) dampaknya juga harus dibatasi. Terlepas dari jumlah kolom, satu-satunya hal yang penting pada akhirnya adalah produk dalam atau jarak antara dua baris data Anda. Namun, jumlah kolom yang berasal dari variabel nominal, jarak (atau produk dalam) hanya bisa 0 atau 1 (variabel nominal sama atau tidak).

Jika model classifier kami mengetahui hubungan antar variabel, bukankah tidak perlu mencari hubungan antara "komponen" biner yang diperkenalkan dari variabel yang sama?

Bagaimana pengklasifikasi Anda "sadar" akan hubungan antar variabel? Saya tidak yakin bisa menjawab pertanyaan ini.

Dan jika demikian, bagaimana ini dapat diatasi?

Dalam hal metode apa pun mengandalkan sampel kolom, bobot sebelumnya dapat diberikan ke kolom (sehingga mereka tidak dipilih dengan probabilitas yang sama). Namun, saya tidak memiliki implementasi dalam pikiran yang melakukan ini. Perbaikan cepat bisa dengan mengulangi kolom lainnya, sehingga kemungkinan dipilih secara artifisial meningkat.

RUser4512
sumber