
Pengarang: Gowtham SR
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Foto dari Unsplash oleh Tim Ikon8 Daftar Isi · Jenis Data
Data Berkelanjutan
Data Diskrit
Data Nominal
Data Ordinal · Bagaimana Mengkodekan Data Kategori?
Pengkodean Ordinal
Pengkodean Nominal
OneHotEncoding menggunakan Pandas
Perangkap Variabel Dummy
OneHotEncoding menggunakan Sklearn
Jenis Data
Dalam statistik dan pembelajaran mesin, kami mengklasifikasikan data menjadi salah satu dari dua jenis yaitu — Numerik dan Kategoris
Data numerik dikategorikan menjadi data diskrit dan kontinu. Data kategoris dibedakan menjadi dua jenis, yaitu data nominal dan data ordinal.
Gambar oleh penulis menjelaskan Jenis Data
Data Berkelanjutan
Data kontinu adalah data yang mengambil angka apa pun (dapat menyertakan nilai desimal). Ini memiliki jumlah nilai kemungkinan yang tak terbatas yang dapat dipilih dalam rentang tertentu yang diberikan.
Contoh: Berat dan tinggi badan seseorang, suhu, umur, jarak.
Gambar oleh penulis
Data Diskrit
Data diskrit hanya dapat mengambil nilai diskrit (tidak dapat memiliki nilai desimal). Informasi diskrit hanya berisi sejumlah nilai yang mungkin terbatas. Nilai-nilai itu tidak dapat dibagi lagi secara bermakna. Di sini, hal-hal dapat dihitung dalam bilangan bulat.
Contoh: Jumlah orang dalam keluarga, jumlah rekening bank yang dapat dimiliki seseorang, jumlah siswa di kelas, jumlah gol yang dicetak dalam pertandingan sepak bola.
Gambar oleh penulis
Bagaimana Seharusnya Kita Mendeteksi dan Mengobati Pencilan?
Data nominal
Data nominal didefinisikan sebagai data yang digunakan untuk penamaan atau pelabelan variabel tanpa nilai kuantitatif. Kadang-kadang disebut data “bernama”.
Biasanya tidak ada urutan intrinsik ke data nominal. Misalnya, Gender adalah variabel nominal yang memiliki 2 kategori, tetapi tidak ada cara khusus untuk mengurutkan dari tertinggi ke terendah dan sebaliknya.
Contoh: huruf, simbol, kata, jenis kelamin, warna, dll.
Gambar oleh penulis
Data Ordinal
Data ordinal adalah jenis data yang mengikuti urutan alami. Ini adalah jenis data kategorikal dengan urutan. Variabel dalam data ordinal didaftar secara berurutan.
Contoh: Peringkat pelanggan (Baik, Rata-Rata, Buruk), kategori Medali di Olimpiade (Emas, Perak, Perunggu)
Gambar oleh penulis
Cara sederhana untuk menulis Pola Kompleks dengan Python hanya dalam 4 menit.
Bagaimana cara mengkodekan data kategoris?
Encoding data kategorikal adalah proses mengubah data kategorikal ke dalam format integer sehingga data dapat diberikan ke model yang berbeda.
Data kategoris akan berupa string atau tipe data objek. Namun, pembelajaran mesin atau algoritma pembelajaran mendalam hanya dapat bekerja pada angka. Jadi, sebagai insinyur pembelajaran mesin, adalah tugas kita untuk mengubah data kategorikal menjadi bentuk numerik.
Pengkodean Ordinal
Kita perlu mempertahankan urutan intrinsik saat mengonversi data ordinal menjadi data numerik. Jadi, setiap kategori akan diberikan angka dari 0 hingga sejumlah kategori. Jika kita memiliki 3 kategori dalam data, seperti ‘buruk’, ‘rata-rata’, dan ‘baik’, maka buruk akan dikodekan sebagai 0, rata-rata 1, dan baik sebagai 2. Sehingga urutannya tetap terjaga.
Ketika kita melatih model pembelajaran mesin, itu akan mempelajari pola dengan urutan intrinsik yang memberikan hasil yang lebih baik.
Kami menggunakan kelas OrdinalEncoder dari sklearn untuk mengkodekan data ordinal.
Standardisasi vs Normalisasi
Mari kita lihat bagaimana kita dapat menyandikan data ordinal secara praktis.
impor panda sebagai pd
impor numpy sebagai np df = pd.read_csv(‘customer.csv’) df.head()
df[‘age’].unik()
Himpunan([30, 68, 70, 72, 16, 31, 18, 60, 65, 74, 98, 51, 57, 15, 75, 59, 22,19, 97, 32, 96, 53, 69, 48, 83, 73, 92, 89, 86, 34, 94, 45, 76, 39,23, 27, 77, 61, 64, 38, 25]dtype=int64) df[‘gender’].unik()
Himpunan([‘Female’, ‘Male’]dtype=objek) df[‘review’].unik()
Himpunan([‘Average’, ‘Poor’, ‘Good’]dtype=objek) df[‘education’].unik()
Himpunan([‘School’, ‘UG’, ‘PG’]dtype=objek) df[‘purchased’].unik()
Himpunan([‘No’, ‘Yes’]dtype=objek)
‘usia’ — data numerik
‘gender’ — data kategoris nominal
‘review’ — data kategorikal ordinal
‘pendidikan’ — data kategorikal ordinal
‘dibeli’ — variabel target
Mari kita pisahkan data ordinal dan pelajari cara menyandikannya.
df = df.iloc[:,2:]
df.head()
X = df.iloc[:,0:2]
y = df.iloc[:,-1]
dari sklearn.model_selection impor train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size =0.2, random_state=1) dari sklearn.preprocessing import OrdinalEncoder ordinal_encoder = OrdinalEncoder(categories=[[‘Poor’,’Average’,’Good’],[‘School’,’UG’,’PG’]]) ordinal_encoder.fit(X_train) X_train = ordinal_encoder.transform(X_train)
X_test = ordinal_encoder.transform(X_test)
Dalam kode di atas, kita dapat melihat bahwa kita meneruskan kategori dalam urutan ke kelas ordinalEncoder, dengan miskin menjadi urutan terendah dan Baik menjadi urutan tertinggi dalam kasus tinjauan fitur.
Demikian pula dalam hal kolom pendidikan, sekolah berada pada urutan paling bawah, dan PG berada pada urutan tertinggi.
Setelah transformasi, kita dapat mengamati hasil di atas, yang menunjukkan 5 baris pertama.
Baris pertama memiliki ulasan = Rata-rata dan pendidikan = UG, sehingga ditransformasikan sebagai [1,1]
Baris kedua memiliki ulasan = Miskin dan pendidikan = PG, sehingga diubah menjadi [0,2]
Pengkodean Nominal
Data nominal tidak akan memiliki urutan intrinsik, kami menggunakan kelas OneHotEncoder dari sklearn untuk mengkodekan data nominal.
Jika kita mulai mengkodekan kategori dari 0,1,2 ke semua kategori, maka algoritma pembelajaran mesin akan memberikan nilai penting pada 2 (lebih dari 0 dan 1), yang tidak akan benar karena datanya nominal dan tidak akan memiliki urutan intrinsik . Jadi, metode ini tidak akan bekerja dalam kasus data nominal.
Disini setiap kategori akan diubah menjadi kolom baru dan akan diberikan nilai 0 atau 1 tergantung dari kemunculan kategori masing-masing. Jadi, jumlah fitur akan bertambah setelah transformasi.
Mari kita lihat bagaimana kita dapat menyandikan data nominal secara praktis. Mari kita ambil dataset titanic dengan fitur ‘Sex’ dan ‘Embarked’ (keduanya adalah fitur nominal).
impor panda sebagai pd
impor numpy sebagai np df = pd.read_csv(‘titanic.csv’) df.head()
df[‘Sex’].unik()
Himpunan([‘male’, ‘female’]dtype=objek) df[‘Embarked’].unik()
Himpunan([‘S’, ‘C’, ‘Q’]dtype=objek) df[‘Survived’].unik()
Himpunan([0, 1]dtype=int64)
OneHotEncoding menggunakan Pandas
pd.get_dummies(df,columns=[‘Sex’,’Embarked’])
Output di bawah ini menunjukkan bagaimana masing-masing kategori diubah menjadi kolom. Kolom ‘Sex’ telah diubah menjadi ‘Sex_female’ dan ‘Sex_male’ dan kolom ‘Embarked’ telah diubah menjadi ‘Embarked_C’, ‘Embarked_Q’, dan ‘Embarked_S’.
Atribut/kolom baru yang dibuat ini disebut Variabel Dummy.
Perangkap Variabel Dummy:
Perangkap variabel dummy adalah skenario dimana terdapat atribut yang sangat berkorelasi (multikolinear), dan satu variabel memprediksi nilai yang lain. Ketika kita menggunakan one-hot encoding untuk menangani data kategorikal, maka satu variabel dummy (atribut) dapat diprediksi dengan bantuan variabel dummy lainnya. Oleh karena itu, satu variabel dummy sangat berkorelasi dengan variabel dummy lainnya.
Menggunakan semua variabel dummy untuk model mengarah ke jebakan variabel dummy (Beberapa algoritma pembelajaran mesin, seperti Regresi Linier, Regresi Logistik menderita multikolinearitas)
Mengapa Multikolinearitas Menjadi Masalah?
Misalnya –
Mari kita pertimbangkan kasus gender yang memiliki dua nilai laki-laki (0 atau 1) dan perempuan (1 atau 0). Memasukkan kedua variabel dummy dapat menyebabkan redundansi karena jika seseorang bukan laki-laki dalam kasus tersebut, orang tersebut akan menjadi perempuan, oleh karena itu, kita tidak perlu menggunakan kedua variabel tersebut dalam model regresi. Ini akan melindungi kita dari jebakan variabel dummy.
Bagaimana cara Memverifikasi Asumsi Regresi Linier?
Jadi, model harus dirancang untuk mengecualikan satu variabel dummy. Biasanya, kami menjatuhkan variabel pertama seperti yang ditunjukkan di bawah ini.
pd.get_dummies(df,columns=[‘Sex’,’Embarked’],drop_first=Benar)
Hasilnya menunjukkan bahwa variabel pertama telah dijatuhkan. Sex_female dan Embarked_C adalah dua kolom yang dikeluarkan dari hasil.
OneHotEncoding menggunakan Sklearn
Kita dapat menggunakan kelas OneHotEncoder dari sklearn untuk melakukan langkah-langkah di atas.
X = df.iloc[:,0:2]
y = df.iloc[:,-1]
dari sklearn.model_selection impor train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1)
dari sklearn.preprocessing impor OneHotEncoder
ohe = OneHotEncoder(drop=’first’,sparse=False,dtype=np.int32) X_train_new = ohe.fit_transform(X_train)
X_test_new = ohe.transform(X_test)
Perhatikan bahwa fitur baru akan dibuat sesuai dengan urutan abjad. Dalam contoh yang diberikan, kolom ‘Sex’ diubah menjadi Sex_female dan Sex_male menurut abjad, dan betina dijatuhkan karena itu adalah kolom pertama.
Dan pada fitur ‘Embarked’, Embarked_C, Embarked_Q, dan Embarked_S adalah kolom baru menurut urutan abjad, dan kategori ‘C’ telah dihapus, jadi array [0,0] akan mewakili C [1,0] mewakili ‘Q’ dan [0,1] mewakili ‘S’.
5 Metrik Regresi Dijelaskan Hanya dalam 5 menit
Encoding Categorical Data- The Right Way awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI