Çoklu Kategorik Değişkenler İçin One-Hot Kodlama Nasıl Gerçekleştirilir

Kaynak Düğüm: 841101

Bu yazıda, Özellik Mühendisliği tekniği One Hot Encoding kullanarak çok kategorili değişkenleri nasıl ele alabileceğimizi öğreneceğiz.

Ancak devam etmeden önce, Özellik mühendisliği ve One Hot Encoding hakkında kısa bir tartışma yapalım.

Özellik Mühendisliği

Özellik Mühendisliği, problemin alan bilgisini kullanarak ham verilerden özniteliklerin çıkarılması işlemidir. Bu özellikler, makine öğrenimi algoritmalarının performansını artırmak için kullanılabilir ve performans artarsa ​​en iyi doğruluğu verir. Özellik mühendisliğinin uygulamalı makine öğrenimi ile aynı şey olduğunu da söyleyebiliriz. Özellik mühendisliği, iyi bir model ile kötü bir model arasında büyük bir fark yaratan makine öğrenimindeki en önemli sanattır. Bu, herhangi bir veri bilimi proje yaşam döngüsünün üçüncü adımıdır.

Farklı modeller genellikle farklı veri türleri için farklı yaklaşımlar gerektirdiğinden, makine öğrenimi modelleri için şeffaflık kavramı karmaşık bir kavramdır. Örneğin:-

  • Sürekli veri
  • Kategorik özellikler
  • Kayıp değerler
  • normalleştirme
  • Tarihler ve saat

Ancak burada sadece Kategorik Özellikleri tartışacağız, Kategorik Özellikler, veri tipinin bir Nesne tipi olduğu özelliklerdir. Herhangi bir kategorik özellikteki veri noktasının değeri, sayısal biçimde değil, nesne biçimindedir.

Kategorik değişkenleri ele almak için birçok teknik vardır, bazıları şunlardır:

  • Etiket Kodlama veya Sıralı Kodlama
  • Bir sıcak Kodlama
  • Kukla Kodlama
  • Efekt Kodlama
  • İkili Kodlama
  • Temel Kodlama
  • Karma Kodlama
  • Hedef Kodlama

Yani, burada One Hot Encoding'in kategorik özelliklerini ele alıyoruz, dolayısıyla her şeyden önce One Hot Encoding'i tartışacağız.

Bir Sıcak Kodlama

Kategorik değişkenlerin sayısal değerler yerine etiket değerleri içerdiğini biliyoruz. Olası değerlerin sayısı genellikle sabit bir kümeyle sınırlıdır. Kategorik değişkenler genellikle nominal olarak adlandırılır. Birçok makine öğrenimi algoritması doğrudan etiket verileri üzerinde çalışamaz. Tüm girdi değişkenlerinin ve çıktı değişkenlerinin sayısal olmasını gerektirirler.

Bu, kategorik verilerin sayısal bir forma dönüştürülmesi gerektiği anlamına gelir. Kategorik değişken bir çıktı değişkeniyse, model tarafından tahminleri sunmak veya bazı uygulamalarda kullanmak için kategorik bir forma dönüştürmek de isteyebilirsiniz.

örneğin cinsiyete ilişkin veriler şu şekildedir: 'erkek' ve 'dişi'.

Ancak tek geçişli kodlama kullanırsak, kodlama ve modelin kategoriler arasında doğal bir sıralama varsaymasına izin vermek, düşük performansa veya beklenmeyen sonuçlara neden olabilir.

Tamsayı gösterimine tek sıcak kodlama uygulanabilir. Tamsayı kodlu değişkenin kaldırıldığı ve her benzersiz tamsayı değeri için yeni bir ikili değişkenin eklendiği yer burasıdır.

Örneğin, renkler değişkenini kodluyoruz,

Kırmızı renk  Mavi renk
0 1
1 0
0 1

Şimdi yolculuğumuza başlayacağız. İlk adımda, bir ev fiyatı tahmini veri seti alıyoruz.

Veri kümesi

Burada alanın büyüklüğüne göre ev fiyatını tahmin etmede kullanılan house_price veri setini kullanacağız.

Ev fiyatı tahmini veri setini indirmek istiyorsanız tıklayın okuyun.

Modülleri İçe Aktarma

Şimdi, one-hot kodlama için kullanılacak önemli modülleri python'dan içe aktarmamız gerekiyor.

# pandaları içe aktarma pandaları pd olarak içe aktarma # numpy'yi içe aktarma numpy'yi np olarak içe aktarma # sklearn.preprocessing'den OneHotEncoder'ı içe aktarma OneHotEncoder()'ı içe aktarma

Burada veri analizi için kullanılan pandaları, n-boyutlu diziler için NumPyused'i ve kategorik kodlama için sklearn'den önemli bir sınıf One Hot Encoder kullanacağız.

Şimdi Python kullanarak bu verileri okumalıyız.

Veri Kümesini Okumak

Genel olarak veri seti CSV formatındadır ve kullandığımız veri seti de CSV formatındadır. CSV dosyasını okumak için pandas read_csv() işlevini kullanacağız. aşağıya bakınız:

# okuma veri kümesi df = pd.read_csv('house_price.csv') df.head()

çıktı:-

Ancak sadece bir sıcak kodlayıcı için kategorik değişkenler kullanacağız ve kolay anlaşılması için sadece kategorik değişkenlerle açıklamaya çalışacağız.

kategorik değişkenleri verilerden bölümlemek için, kaç özelliğin kategorik değerlere sahip olduğunu kontrol etmeliyiz.

Kategorik Değerleri Kontrol Etme

Değerleri kontrol etmek için, değişkenin veri türlerini seçmek için kullanılan pandas select_dtypes işlevini kullanırız.

# özellikleri kontrol etme cat = df.select_dtypes(include='O').keys() # değişkenleri göster cat

çıktı:-

 

Şimdi bu sayısal sütunları veri kümesinden çıkarmalıyız ve bu kategorik değişkeni kendi kullanımımız için kullanacağız. One-hot kodlamayı uygulamak için veri kümesinden yalnızca 3-4 kategorik sütun kullanıyoruz.

Yeni DataFrame Oluşturma

Şimdi, kategorik değişkenleri kullanmak için, seçilen kategorik sütunlardan yeni bir veri çerçevesi oluşturacağız.

# yeni df oluşturma # ayar sütunları kullandığımız new_df = pd.read_csv('house_price.csv',usecols=['Komşu','Dış 1.',' Dış 2.']) new_df.head()

çıktı:-

Şimdi her kategorik sütunda kaç tane benzersiz kategori olduğunu bulmalıyız.

Eşsiz Değerler Bulmak

Benzersiz değerler bulmak için pandas unique() işlevini kullanacağız.

# new_df.columns'ta x için her sütunda benzersiz değerler: #benzersiz değerleri yazdırma print(x ,':', len(new_df[x].unique()))

çıktı:-

Mahalle : 25
Dış 1. : 15
Dış 2. : 16

Şimdi, çok kategorili değişkenlere one-hot kodlama uygulama tekniğimize geçeceğiz.

Çok Kategorik Değişkenler İçin Teknik

Teknik, tek sıcak kodlamayı değişkenin en sık kullanılan 10 etiketiyle sınırlandırmamızdır. Bu, yalnızca en sık kullanılan 10 etiketin her biri için bir ikili değişken yapacağımız anlamına gelir; bu, diğer tüm etiketleri yeni bir kategori altında gruplandırmaya eşdeğerdir ve bu durumda kategori çıkarılacaktır. Böylece, 10 yeni yapay değişken, en sık kullanılan 10 etiketten birinin mevcut olup olmadığını gösterir. 1 ya da o zaman değil 0 belirli bir gözlem için

En Sık Değişkenler

Burada en sık kullanılan 20 değişkeni seçeceğiz.

Bir kategorik değişken aldığımızı varsayalım Mahalle.

# ilk 20 kategoriyi bulma new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

çıktı:

Bu çıktı görüntüsünde gördüğünüzde, İSİMLER etiketi Mahalle sütunlarında 225 defa tekrar ediyor ve aşağıya indiğimizde bu sayı azalıyor.

Bu yüzden en baştan ilk 10 sonucu aldık ve bu ilk 10 sonucu one-hot kodlamaya dönüştürüyoruz ve soldaki etiketler sıfıra dönüşüyor.

çıktı:-

 

En Sık Kullanılan Kategorik Değişkenlerin Listesi

# ilk 10 değişkenle liste yap top_10 = [new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index içinde x için x] top_10

çıktı:-

['isimler',
'KollgCr',
'Eski kasaba',
"Edwards",
'Somerst',
'Gilbert',
'NridgHT',
'Sawyer',
'NWA'lar',
'SawyerW']

Mahalle sütununda ilk 10 kategorik etiket vardır.

İkili Yap

Şimdi, top_10 etiketinin 10 ikili değişkenini yapmalıyız:

# etiketleri ikili yap

top_10'daki etiket için:

yeni_df = np.where(new_df['Mahalle']==label,1,0)

new_df[['Mahalle']+top_10]


çıktı:-

İSİMLER CollgCr Eski kasaba Edwards Somerst Gilbert birimi NridgHT Doğramacı NWAmes SawyerW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 sırt yok 0 0 0 0 0 0 0 0 0 0
5 Mitchel 0 0 0 0 0 0 0 0 0 0
6 Somerst 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Eski kasaba 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 Doğramacı 0 0 0 0 0 0 0 1 0 0
11 NridgHT 0 0 0 0 0 0 1 0 0 0

Top_10 etiketlerinin artık ikili biçime nasıl dönüştürüldüğünü görebilirsiniz.

Bir örnek verelim, tabloda nerede olduğunu görün 1 indeks Veenker top_10 kategori etiketimize ait değildi, bu nedenle 0 tüm sütunlar.

Şimdi yukarıda seçtiğimiz tüm Kategorik değişkenler için yapacağız.

OneHotEncoding üzerinde Seçilen tüm değişkenler

# tüm kategorik değişkenler için seçtik def top_x(df2,variable,top_x_labels): for label in top_x_labels: df2[değişken+'_'+etiket] = np.where(data[değişken]==etiket,1,0) # oku verileri yeniden data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Mahalle','Dış1st','Dış2nd']) #Geçenleri en sık kullanılan 10 kategoriye kodlayın top_x(data, 'Mahalle',top_10) # verileri görüntüle data.head()

Çıktı:-

Şimdi, burada tek sıcak kodlamayı tüm çoklu kategorik değişkenlere uyguluyoruz.

Şimdi One Hot Encoding'in çoklu değişkenler için avantaj ve dezavantajlarını göreceğiz.

Avantajlar

  • Uygulaması kolay
  • Değişken keşif için fazla zaman gerektirmez
  • Özellik alanını büyük ölçüde genişletmez.

Dezavantajlar

  • Değişkeni daha tahmin edilebilir hale getirebilecek herhangi bir bilgi eklemez
  • Yoksayılan değişkenlerin bilgilerini saklamayın.

Son Notlar

Özetle, çok kategorili değişkenleri nasıl ele alacağımızı öğreniyoruz. Bu sorunla karşılaşırsanız, o zaman bu çok zor bir iştir. Bu makaleyi okuduğunuz için teşekkür ederiz.

Linkedin'de benimle bağlantı kurun: Profil

Diğer makalelerimi okuyun: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Teşekkürler😎

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

Bu makaleyi Mobil Uygulamamızda da okuyabilirsiniz Google Play'den indirin

İlgili Makaleler

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

Zaman Damgası:

Den fazla Analitik Vidhya