"Enter"a basıp içeriğe geçin

One-hot Encoding

Öğrenme metotları istisnalar dışında girdileri (input features) numerik olarak beklerler. Bu da numerik olmayan özellikleri (features, attributes, columns) numerik hale getirmemizi gerektirir. One-hot encoding bu amaçla kullanılan veri ön işleme adımlarından biridir.

Bu aşamada hangi verinin kategorik olduğunun farkında olmak önem taşır. Örneğin bir şirketin çalışanlarına verdiği kod (id) numerik olarak görünebilir. Fakat bu sayısal bir değer taşıdığı anlamına gelmez. Eğer tamamen rastlantısal numaralar verildi ise bu bilgi herhangi bir makine öğrenmesi algoritması ya da veri analizi için anlamsız olabileceği gibi bir şekilde bu bilgiden giriş yılı, departmanı gibi bir takım anlamlı bilgiler taşıyor ise öncelikle kodları gerekli algoritmalarla ayrıştırarak (parse ederek) aslında basit bir feature extraction yapılır ve veri öğrenme metotları açısından anlamlı hale getirilir. İleride sık kullanılan yöntemleri detaylıca işleyeceğiz fakat anlaşılacağı üzere feature extraction veriyi dönüştürerek anlamlı/kullanılabilir veri üretmek anlamına gelmektedir.

Elimizde aşağıdaki gibi bir şirket çalışanları bilgisi olsun:

import pandas as pd
import numpy as np

Calisanlar = {
    'id':pd.Series(['199701001', '200101002', '201102003', '200903001', '201302002', '202003002', '200902005']),
    'isim':pd.Series(['Murat Taşkıran', 'Elmas Dağdelen', 'Burak Dergeçer', 'Yasemin Vurdu', 'Ayşegül Kırdı', 'Nurten Dargın', 'Süreya Sergeçti']),
    'Maaş':pd.Series([20000, 18000, 19000, 21000, 22000, 15000, 25000])
}

Calisanlar = pd.DataFrame(Calisanlar)
Calisanlar
Çalışan Bilgileri

id bilgisinin ilk dört karakterin işe başlangıç tarihi, sonraki iki karakterin departman bilgisi, son üç karakterin ise departmanda işe başlayan kaçıncı kişi olduğu bilgisinin elimizde olduğunu varsayarak feature extraction adımı olarak id kolonunu aşağıdaki şekilde ayrıştırmamız gerekir:

Calisanlar['Giriş Yılı'] = Calisanlar['id'].str[:4]
Calisanlar['Departman'] = Calisanlar['id'].str[4:6]
Calisanlar['Sıra'] = Calisanlar['id'].str[6:]
Calisanlar
Dönüştürülmüş Çalışan Bilgileri

id bilgisi parse edilerek anlamlı hale getirildi ve üç yeni kolon türetildi. Maaş ya da kıdem gibi konular için analiz yapılmak istenirse giriş yılı bilgisi bugünün tarihinden çıkarılarak çalışan tecrübesine dönüştürülür. Ancak biz Departman kolonu ile ilgilenelim.

Görüldüğü üzere Departman kolonunda sayısal bir bilgi olsa da aslında kategorik bir veri bulunuyor. Örneğimizde bu kolon metin (string) olarak kayıtlı fakat çoğu kez doğrudan numerik olarak kaydedilmiş olabilir. Bu açıdan öğrenme metodunu yanıltmaya çok müsait.

Hangi verinin kategorik olduğu konusunda bilgi sahibi olduktan sonra bu kolonlara one-hot encoding uygulamak gerekir. Onehot encoding her bir alt kategori için yeni bir kolon oluşturarak bu kolonda kendi kategorisine karşılık gelen her satır için 1 diğerleri için 0 değeri döndürür:

One-hot encoding

Örneğimize dönersek, Departman kolonuna one-hot uygulamak için pandas kütüphanesinin get_dummies metodunu basitçe kullanabiliriz:

Calisanlar = pd.get_dummies(Calisanlar, columns = ['Departman'])
Calisanlar
One-hot encoding uygulanmış Çalışanlar Tablosu

Görüldüğü üzere one-hot encoding uygulaması basit bir kodlama yöntemi.

İlgili repo’ya link üzerinden ulaşabilirsiniz.

Keyifli öğrenmeler 🙂

İlk Yorumu Siz Yapın

Bir Cevap Yazın

Translate »
%d blogcu bunu beğendi: