Cara Melakukan Enkode Satu-Hot Untuk Variabel Multi Kategorikal

Node Sumber: 841101

Pada artikel ini, kita akan belajar tentang bagaimana kita dapat menangani variabel multi kategori menggunakan teknik Rekayasa Fitur One Hot Encoding.

Namun sebelum melanjutkan, mari kita bahas secara singkat tentang Feature engineering dan One Hot Encoding.

Rekayasa Fitur

Jadi, Rekayasa Fitur adalah proses mengekstraksi fitur dari data mentah menggunakan pengetahuan domain dari masalah tersebut. Fitur-fitur tersebut dapat digunakan untuk meningkatkan kinerja algoritma pembelajaran mesin dan jika kinerjanya meningkat maka akan memberikan akurasi terbaik. Kami juga dapat mengatakan bahwa rekayasa fitur sama dengan pembelajaran mesin terapan. Rekayasa fitur adalah seni terpenting dalam pembelajaran mesin yang menciptakan perbedaan besar antara model yang baik dan model yang buruk. Ini adalah langkah ketiga dalam siklus hidup proyek sains data.

Konsep transparansi untuk model pembelajaran mesin adalah hal yang rumit karena model yang berbeda seringkali memerlukan pendekatan yang berbeda untuk jenis data yang berbeda. Seperti:-

  • Data terus menerus
  • Fitur kategoris
  • Nilai yang hilang
  • Normalisasi
  • Tanggal dan waktu

Namun disini kita hanya akan membahas Categorical Features, The Categorical Features adalah fitur-fitur yang tipe datanya merupakan tipe Object. Nilai titik data dalam setiap fitur kategori tidak dalam bentuk numerik, melainkan dalam bentuk objek.

Ada banyak teknik untuk menangani variabel kategorikal, beberapa di antaranya adalah:

  • Pengkodean Label atau Pengodean Ordinal
  • Satu Pengkodean panas
  • Pengkodean Dummy
  • Pengkodean Efek
  • Pengkodean Biner
  • Pengkodean Basel
  • Pengkodean Hash
  • Pengkodean Target

Nah disini kita akan membahas fitur-fitur kategorikal dengan One Hot Encoding, maka pertama-tama kita akan membahas One Hot Encoding.

Satu Pengkodean Panas

Kita tahu bahwa variabel kategori berisi nilai label daripada nilai numerik. Jumlah nilai yang mungkin sering terbatas pada himpunan tetap. Variabel kategori sering disebut nominal. Banyak algoritme pembelajaran mesin tidak dapat beroperasi pada data label secara langsung. Mereka membutuhkan semua variabel input dan variabel output menjadi numerik.

Ini berarti bahwa data kategorik harus diubah menjadi bentuk numerik. Jika variabel kategori adalah variabel keluaran, Anda mungkin juga ingin mengonversi prediksi oleh model kembali ke bentuk kategori untuk menyajikannya atau menggunakannya dalam beberapa aplikasi.

misalnya data jenis kelamin berupa 'pria' dan 'perempuan'.

Tetapi jika kita menggunakan pengkodean satu-panas maka pengkodean dan membiarkan model mengasumsikan urutan alami antar kategori dapat mengakibatkan kinerja yang buruk atau hasil yang tidak terduga.

Pengkodean satu-panas dapat diterapkan pada representasi bilangan bulat. Di sinilah variabel yang disandikan bilangan bulat dihapus dan variabel biner baru ditambahkan untuk setiap nilai bilangan bulat unik.

Misalnya, kami menyandikan variabel warna,

Warna merah  Warna biru
0 1
1 0
0 1

Sekarang kita akan memulai perjalanan kita. Pada langkah pertama, kami mengambil dataset prediksi harga rumah.

Dataset

Disini kita akan menggunakan dataset house_price yang digunakan untuk memprediksi harga rumah menurut luas wilayah.

Jika Anda ingin mengunduh dataset prediksi harga rumah, klik di sini.

Mengimpor Modul

Sekarang, kita harus mengimpor modul-modul penting dari python yang akan digunakan untuk enkode one-hot

# mengimpor panda mengimpor panda sebagai pd # mengimpor numpy mengimpor numpy sebagai np # mengimpor OneHotEncoder dari sklearn.preprocessing mengimpor OneHotEncoder()

Di sini, kami menggunakan panda yang digunakan untuk analisis data, NumPyused untuk array n-dimensi, dan dari sklearn, kami akan menggunakan satu kelas penting One Hot Encoder untuk pengkodean kategorikal.

Sekarang kita harus membaca data ini menggunakan Python.

Membaca Kumpulan Data

Umumnya dataset berbentuk CSV, dan dataset yang kita gunakan juga berbentuk CSV. Untuk membaca file CSV kita akan menggunakan fungsi pandas read_csv(). Lihat di bawah:

# membaca dataset df = pd.read_csv('house_price.csv') df.head()

keluaran:-

Tetapi kita hanya perlu menggunakan variabel kategori untuk satu hot encoder dan kami hanya akan mencoba menjelaskan dengan variabel kategori untuk memudahkan pemahaman.

untuk mempartisi variabel kategorikal dari data, kita harus memeriksa berapa banyak fitur yang memiliki nilai kategorikal.

Memeriksa Nilai Kategorikal

Untuk memeriksa nilai, kami menggunakan fungsi pandas select_dtypes yang digunakan untuk memilih tipe data variabel.

# memeriksa fitur cat = df.select_dtypes(include='O').keys() # menampilkan variabel cat

keluaran:-

 

Sekarang kita harus menghapus kolom numerik tersebut dari kumpulan data dan kita akan menggunakan variabel kategorikal ini untuk kita gunakan. Kami hanya menggunakan 3-4 kolom kategorikal dari kumpulan data untuk menerapkan enkode one-hot.

Membuat Bingkai Data Baru

Sekarang, untuk menggunakan variabel kategori, kami akan membuat kerangka data baru dari kolom kategori yang dipilih.

# membuat df baru # kolom pengaturan kita gunakan new_df = pd.read_csv('house_price.csv',usecols=['Lingkungan','Eksterior1st','Eksterior2nd']) new_df.head()

keluaran:-

Sekarang kita harus mencari tahu berapa banyak kategori unik yang ada di setiap kolom kategori.

Menemukan Nilai Unik

Untuk menemukan nilai unik kita akan menggunakan fungsi panda unique().

# nilai unik di setiap kolom untuk x di kolom_df baru.kolom: #mencetak nilai unik print(x ,':', len(new_df[x].unique()))

keluaran:-

Lingkungan : 25
Eksterior 1 : 15
Eksterior2nd : 16

Sekarang, kita akan menggunakan teknik kita untuk menerapkan one-hot encoding pada variabel multi kategori.

Teknik Untuk Variabel Multi Kategori

Tekniknya adalah kita akan membatasi pengkodean satu-panas ke 10 label variabel yang paling sering. Ini berarti bahwa kita akan membuat satu variabel biner untuk masing-masing dari 10 label yang paling sering saja, ini setara dengan mengelompokkan semua label lain di bawah kategori baru, yang dalam hal ini akan dihapus. Dengan demikian, 10 variabel dummy baru menunjukkan jika salah satu dari 10 label paling sering ada 1 atau tidak saat itu 0 untuk pengamatan tertentu.

Variabel yang paling sering

Di sini kita akan memilih 20 variabel yang paling sering.

Misalkan kita mengambil satu variabel kategori lingkungan.

# menemukan 20 kategori teratas new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

keluaran:

Ketika Anda melihat pada gambar keluaran ini, Anda akan melihat bahwa NAMA label berulang 225 kali di kolom Lingkungan dan kami turun angka ini menurun.

Jadi kami mengambil 10 hasil teratas dari atas dan kami mengonversi 10 hasil teratas ini menjadi enkode one-hot dan label kiri berubah menjadi nol.

keluaran:-

 

Daftar Variabel Kategoris Paling Sering

# buat daftar dengan 10 variabel teratas top_10 = [x untuk x di new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

keluaran:-

['NAMA',
'CollgCr',
'Kota Tua',
'Edward',
'Beberapa',
'Gilbert',
'NridgHt',
'Penggergaji',
'NWAme',
'SawyerW']

Ada 10 label kategori teratas di kolom Lingkungan.

Buat Biner

Sekarang, kita harus membuat 10 variabel biner dari label top_10:

# membuat biner dari label

untuk label di top_10:

baru_df = np.where(new_df['Lingkungan']==label,1,0)

new_df[['Lingkungan']+top_10]


keluaran:-

NAMA KolgCr Kota Tua Edwards Suatu hari nanti Gilbert NridgeHt Penggergaji NWAmes SawyerW
0 KolgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 KolgCr 0 1 0 0 0 0 0 0 0 0
3 perayapan 0 0 0 0 0 0 0 0 0 0
4 Tanpa Punggungan 0 0 0 0 0 0 0 0 0 0
5 mitchel 0 0 0 0 0 0 0 0 0 0
6 Suatu hari nanti 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Kota Tua 0 0 1 0 0 0 0 0 0 0
9 Sisi Brk 0 0 0 0 0 0 0 0 0 0
10 Penggergaji 0 0 0 0 0 0 0 1 0 0
11 NridgeHt 0 0 0 0 0 0 1 0 0 0

Anda dapat melihat bagaimana label top_10 sekarang diubah menjadi format biner.

Mari kita ambil contoh, lihat di tabel mana 1 indeks Veenker yang tidak termasuk dalam label kategori_10 teratas kami sehingga akan menghasilkan 0 semua kolom.

Sekarang kita akan melakukannya untuk semua variabel Categorical yang telah kita pilih di atas.

Semua variabel Terpilih di OneHotEncoding

# untuk semua variabel kategori kami memilih def top_x(df2,variable,top_x_labels): untuk label di top_x_labels: df2[variabel+'_'+label] = np.where(data[variabel]==label,1,0) # baca data lagi data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Nighborhood ke dalam 10 kategori paling sering top_x(data, 'Neighborhood',top_10) # tampilkan data data.head()

Keluaran:-

Sekarang, di sini kami menerapkan pengkodean satu-panas pada semua variabel multi-kategori.

Sekarang kita akan melihat kelebihan dan kekurangan One Hot Encoding untuk multi variabel.

Kelebihan

  • Langsung untuk diterapkan
  • Tidak membutuhkan banyak waktu untuk eksplorasi variabel
  • Tidak memperluas ruang fitur secara besar-besaran.

Kekurangan

  • Tidak menambahkan informasi apapun yang dapat membuat variabel lebih prediktif
  • Jangan simpan informasi dari variabel yang diabaikan.

Catatan Akhir

Jadi, Rangkumannya adalah kita belajar tentang bagaimana menangani variabel multi kategori, Jika Anda menemukan masalah ini maka ini adalah tugas yang sangat sulit. Jadi terima kasih telah membaca artikel ini.

Terhubung dengan saya di Linkedin: Profil

Baca artikel saya yang lain: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Terima kasih๐Ÿ˜Ž

Media yang ditampilkan dalam artikel ini tidak dimiliki oleh Analytics Vidhya dan digunakan atas kebijaksanaan Penulis.

Anda juga dapat membaca artikel ini di APLIKASI Seluler kami Dapatkan di Google Play

Artikel terkait

Sumber: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Stempel Waktu:

Lebih dari Analisis Vidhya