Dalam proses pembuatan model pembelajaran mesin, pra-pemrosesan data adalah salah satu langkah paling penting. Menangani nilai-nilai kategoris memainkan peran utama di sana.

Variabel kategori adalah variabel yang mewakili berbagai kategori, seperti jenis kelamin, warna kulit, atau jenis produk. Dalam pembelajaran mesin, sebagian besar algoritme memerlukan masukan numerik, yang berarti variabel kategori harus diubah menjadi bentuk numerik sebelum dapat digunakan sebagai masukan ke algoritme. Proses ini dikenal sebagai pengkodean.

Dengan menggunakan SK-learn, kita dapat mengkodekan variabel kategori dengan berbagai cara. Mari kita bahas satu per satu dengan contoh coding langsung.

  1. Pengkode Label

Pengkodean label adalah teknik yang digunakan dalam pembelajaran mesin untuk mengubah data kategorikal menjadi bentuk numerik. Hal ini diperlukan karena model pembelajaran mesin bekerja dengan data numerik, dan variabel kategori tidak dapat dimasukkan secara langsung ke dalam model ini.

Misalnya, mari kita pertimbangkan kumpulan data yang berisi informasi tentang buah-buahan. Kumpulan data berisi kolom bernama “Warna” dengan tiga kategori: “Merah”, “Hijau”, dan “Kuning”. Untuk menggunakan data ini dalam model pembelajaran mesin, kita perlu mengubah data kategorikal di kolom “Warna” menjadi bentuk numerik.

Jadi, kita akan memetakan nilai numerik ke warna tersebut menggunakan kelas LabelEncoder().

#Import Libraries 
import pandas as pd
from sklearn.preprocessing import LabelEncoder

#Create Dataset
data_raw = pd.DataFrame({'Fruit': ['Apple', 'Banana', 'Orange','Apple', 'Kiwi', 'Grape'],
                       'Color': ['Red', 'Yellow', 'Orange','Red', 'Green', 'Purple']})

#Encode Color Column 
data = data_raw.copy()
le = LabelEncoder()
data['Color_Encoded'] = le.fit_transform(data['Color'])
print(data)

Di sini masalahnya adalah pengkodean label mengasumsikan hubungan ordinal antar kategori, artinya bilangan bulat yang ditetapkan memiliki urutan yang bermakna. Namun, hal ini mungkin tidak selalu terjadi, sehingga pengkodean one-hot mungkin lebih tepat.

2. Encoder Satu-Panas

One hot coding adalah teknik lain yang digunakan dalam pembelajaran mesin untuk mengubah data kategorikal menjadi bentuk numerik. Ini sering digunakan ketika jumlah kategori dalam suatu variabel besar, atau ketika tidak ada urutan yang melekat pada kategori tersebut.

Di sini ia membuat kolom berbeda untuk setiap kategori dan menggunakan 0,1 untuk menunjukkan apakah, untuk baris tertentu, kategori tersebut Benar atau Salah. Jadi, untuk setiap titik data, salah satu kolom tersebut akan memiliki '1' dan kolom lainnya akan memiliki nilai '0'.

#Import Libraries
from sklearn.preprocessing import OneHotEncoder

#Fitting OHE
data = data_raw.copy()
ohe = OneHotEncoder(handle_unknown='ignore')
encoding_col = ['Fruit','Color']
data_encoded = ohe.fit_transform(data[encoding_col]).toarray()
data_encoded_df = pd.DataFrame(data_encoded, columns=ohe.get_feature_names(encoding_col))
data_encoded = pd.concat([data, data_encoded_df], axis=1)

print(data_encoded)

Dalam Label Encoder dimensi kumpulan data tidak berubah tetapi dalam kasus OneHot Encoder dimensi kumpulan data meningkat tergantung pada jumlah kolom kategori dan jumlah kategori yang dimilikinya.

3. Pembuat Enkode Biasa

Encoder ordinal adalah jenis teknik pengkodean fitur yang digunakan dalam pembelajaran mesin untuk mengubah variabel kategori menjadi variabel numerik. Dalam metode ini, setiap nilai unik dalam variabel kategori diberi nilai bilangan bulat unik, berdasarkan urutan atau peringkatnya.

Misalnya, jika kita memiliki variabel kategori “tingkat pendidikan” dengan nilai “Sekolah Menengah Atas”, “Gelar Sarjana”, “Gelar Magister”, dan “PhD”, kita dapat menetapkan nilai masing-masing 1, 2, 3, dan 4. Pengkodean ordinal mengasumsikan bahwa ada urutan atau peringkat yang bermakna di antara kategori-kategori tersebut, dan menggunakan informasi ini untuk menetapkan nilai numerik.

#Import Libraries 
from sklearn.preprocessing import OrdinalEncoder

#Create Dataset 
data = pd.DataFrame({'education_level':['High School','Bachelor\'s Degree',
                                        'Master\'s Degree','PhD','High School','Master\'s Degree']})

#Define Ranks/Order 
category_ranks = {'High School': 1, 
                  'Bachelor\'s Degree': 2, 
                  'Master\'s Degree': 3, 
                  'PhD': 4}

#Ordinal Encoding 
ordinal_encoder = OrdinalEncoder(categories=[list(category_ranks.keys())], dtype=int)
data['education_level_encoded'] = ordinal_encoder.fit_transform(data[['education_level']])

print(data)

Metode pengkodean ini sangat berguna ketika kategori memiliki urutan atau peringkat yang bermakna, karena metode ini dapat menangkap informasi ini dan menggunakannya dalam beberapa model pembelajaran mesin.

Namun, berhati-hatilah saat menggunakan pengkodean ordinal, karena dapat menimbulkan bias atau asumsi yang tidak diinginkan tentang data. Misalnya, memberikan nilai numerik yang lebih tinggi pada kategori yang dianggap “lebih baik” atau “lebih penting” dapat menimbulkan bias pada model. Oleh karena itu, penting untuk mempertimbangkan peringkat kategori dan implikasinya dengan cermat sebelum menerapkan pengkodean ordinal pada data Anda.

Anda dapat menemukan Buku Catatan untuk artikel ini di sini: Klik Di Sini

Terima kasih sudah membaca :)