• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Pandas ile one-hot encoding nasıl yapılır?

  • Konuyu Başlatan Konuyu Başlatan Garfield
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 0
  • Etiketler Etiketler
    veri bilimi

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
One-hot encoding, kategorik sütunlardaki metin değerlerini 0 ve 1’lerden oluşan ayrı sütunlara dönüştürür. pandas kullanırken en pratik yöntem pd.get_dummies() fonksiyonudur. Örneğin renk sütunundaki kırmızı, mavi ve yeşil değerleri ayrı sütunlara çevrilir; her satırda yalnız ilgili kategori 1, diğerleri 0 olur.

pd.get_dummies() ile temel kullanım​


Ön koşul olarak Python ortamında pandas kurulu olmalı ve veri kümesini bir DataFrame olarak yüklemelisiniz. Aşağıdaki örnekte varsayımsal bir veri kümesi kullanılıyor:

Python:
import pandas as pd

df = pd.DataFrame({
    "renk": ["kırmızı", "mavi", "yeşil", "mavi"],
    "boyut": ["küçük", "büyük", "orta", "küçük"],
    "fiyat": [10, 20, 15, 12]
})

encoded_df = pd.get_dummies(df, columns=["renk", "boyut"], dtype=int)

print(encoded_df)

Kod, yalnızca renk ve boyut sütunlarını dönüştürür; fiyat sütununu olduğu gibi bırakır. Beklenen çıktı şu yapıya benzer:

Kod:
   fiyat  renk_kırmızı  renk_mavi  renk_yeşil  boyut_büyük  boyut_küçük  boyut_orta
0     10             1          0           0            0            1           0
1     20             0          1           0            1            0           0
2     15             0          0           1            0            0           1
3     12             0          1           0            0            1           0

dtype=int seçeneği, doğru ve yanlış değerlerin True/False yerine 1/0 olarak oluşturulmasını sağlar. Makine öğrenmesi kütüphanelerinin çoğu True/False değerleriyle de çalışabilir; ancak sayı biçimi çıktıyı incelemeyi kolaylaştırır.

Mevcut DataFrame’e dönüştürülmüş sütunları ekleme​


Tüm DataFrame’i doğrudan dönüştürmek istemiyorsanız önce seçilecek kategorik sütunları ayırabilirsiniz:
  1. Kategorik sütunları belirleyin. Örneğin renk ve boyut sütunlarını seçin; sayısal fiyat sütununu dönüştürmeyin.
  2. Seçilen sütunlara pd.get_dummies() uygulayın. columns=["renk", "boyut"] parametresi yalnızca bu sütunları one-hot sütunlarına çevirir.
  3. Dönüştürülmüş DataFrame’i kontrol edin. encoded_df.dtypes ve encoded_df.head() komutlarıyla yeni sütunların oluştuğunu ve sayısal değerler içerdiğini doğrulayın.
Kodda yalnızca sütun adlarını yazmak yerine kategorik sütunları otomatik seçmek de mümkündür:

Python:
categorical_columns = df.select_dtypes(include=["object", "string", "category"]).columns

encoded_df = pd.get_dummies(
    df,
    columns=categorical_columns,
    dtype=int
)

print(encoded_df.head())

Bu yöntem, object, pandas metin türleri (string/str) veya category türündeki sütunları seçer. Ancak sayısal olarak kodlanmış kategoriler, örneğin 1, 2 ve 3 değerlerinden oluşan bir şehir_kodu sütunu, otomatik olarak kategorik kabul edilmez. Böyle bir sütunu açıkça columns listesine eklemeniz gerekir.

İkili kategori ve referans sütunu seçimi​


Bir sütunda iki kategori varsa iki ayrı sütun oluşturmak yerine bir kategoriyi referans kabul edip tek sütun oluşturabilirsiniz. Bunun için drop_first=True kullanılır:

Python:
df = pd.DataFrame({
    "abonelik": ["var", "yok", "var", "yok"]
})

encoded_df = pd.get_dummies(
    df,
    columns=["abonelik"],
    drop_first=True,
    dtype=int
)

print(encoded_df)

Bu örnekte var ilk kategori olarak düşürülür ve abonelik_yok adlı tek sütun oluşur. Değerin 1 olması yok, 0 olması ise referans kategori olan var anlamına gelir. Referansın hangisi olduğunu tahmin etmek yerine çıktı sütunlarını kontrol edin.

Önemli: drop_first=True her durumda zorunlu değildir. Ağaç tabanlı modellerde veya yalnızca dönüştürülmüş veriyi saklamak istediğinizde tüm kategorileri korumak daha anlaşılır olabilir. Doğrusal modellerde gereksiz doğrusal bağımlılığı önlemek için bir kategoriyi düşürmek tercih edilebilir.

Eğitim ve test verilerinde kategori uyumsuzluğu​


Eğitim ve test DataFrame’lerine ayrı ayrı pd.get_dummies() uygulandığında kategoriler farklıysa sütun adları da farklı olabilir. Örneğin eğitim verisinde mavi kategorisi bulunurken test verisinde yalnız kırmızı bulunabilir. Bu durumda model girdilerinin sütunları eşleşmez.

Basit bir pandas çözümünde test sütunlarını eğitim sütunlarına hizalayabilirsiniz:

Python:
train_encoded = pd.get_dummies(train_df, columns=["renk"], dtype=int)
test_encoded = pd.get_dummies(test_df, columns=["renk"], dtype=int)

test_encoded = test_encoded.reindex(
    columns=train_encoded.columns,
    fill_value=0
)

reindex() işlemi test verisinde eksik olan eğitim sütunlarını 0 ile ekler ve fazladan sütunları çıkarır. Böylece iki DataFrame’in sütunları aynı sıraya gelir. Eğitimde görülmeyen bir test kategorisinin sütunu bu işlemle çıkarılır; o kategori grubu tamamen sıfır kalır. Bu durum bilinmeyen kategorinin öğrenildiği anlamına gelmez. Eğitim ve test verilerini kategori öğrenmek için birleştirmeyin; gerçek bir makine öğrenmesi akışında yalnız eğitim verisine uydurulan ve bilinmeyen kategorileri nasıl işleyeceği belirlenmiş bir dönüştürücü veya işlem hattı kullanın.

Sonucu nasıl kontrol edilir?​


Dönüştürme sonrasında şu kontrolleri yapabilirsiniz:

Python:
print(encoded_df.columns.tolist())
print(encoded_df.dtypes)
print(encoded_df.isna().sum())

Yeni sütunların adları genellikle sütun_adı_kategori biçimindedir. Tüm kategoriler korunmuşsa ve eksik ya da bilinmeyen kategori yoksa her kategori grubunda bir sütun 1, diğerleri 0 olur. Varsayılan dummy_na=False davranışında eksik değerler o grupta tamamen sıfır kodlanır; dummy_na=True ile ayrı bir eksiklik göstergesi oluşturabilirsiniz. drop_first=True kullanıldığında referans kategori de tamamen sıfırdır; bu nedenle sıfırları eksik veya bilinmeyen kategoriyle karıştırmayın.

One-hot encoding, kategorik değerleri sayısal sütunlara çevirir; kategoriler arasında doğal bir büyüklük veya sıralama olduğunu kanıtlamaz. Örneğin küçük, orta ve büyük değerlerini one-hot encoding ile dönüştürmek, bunların sıralı olduğu bilgisini modele vermez. Sıralamanın anlamlı olduğu durumlarda farklı bir kodlama yaklaşımı gerekebilir.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst