One Hot Encoding Nedir — Nasıl Yapılır?

Zeynep Küçük
4 min readFeb 17, 2021

--

Makine öğrenme algoritmaları doğrudan kategorik veriler üzerinde çalışmamaktadır bu yüzden verilerimizin sayısal verilere dönüştürülmesi gerekmektedir.

Bu yazımda sizlere Python’da derin öğrenmeyle sınıflandırma problemlerinde kullanmak üzere verilerimizin one hot encode şeklinde dönüştürülmesinden bahsedeceğim. Scikit-learn ve Keras kütüphanelerini kullanarak örnek üzerinden açıklamaya çalışacağım.

One Hot Encoding Nedir?

One Hot Encoding, kategorik değişkenlerin ikili (binary) olarak temsil edilmesi anlamına gelmektedir. Bu işlem ilk önce kategorik değerlerin tamsayı değerleriyle eşlenmesini gerektirir. Daha sonra, her bir tamsayı değeri, 1 ile işaretlenmiş tamsayı indeksi dışında ki tüm değerleri sıfır olan bir ikili vektör olarak temsil edilir. Örneğin aşağıda 3 kategoride veri vardır apple, chicken ve broccoli bu alanlar binary olarak ayrıştırıldığında Apple için ilk satır 1 iken diğerleri 0 oluyor Diğer veri içinde aynı şekilde sayısal veriye çevirme işlemi devem ediyor.

One Hot Encoding Nasıl Çalışıyor?

Bir örnek yaparak açıklamaya çalışalım.

‘Kırmızı’ ve ‘yeşil’ değerlerini içeren bir dizi etiketimiz olduğunu varsayalım.

Kırmızı için bir tamsayı 0 ve yeşil için 1 tamsayı değerini atayabiliriz. Bu sayıları her zaman bu etiketlere atadığımız sürece bu işleme tamsayı kodlaması denmektedir. Tutarlılık önemlidir, böylece kodlamayı daha sonra tersine çevirebilir ve bir tahmin yapılması durumunda etiketler tamsayı değerlerini geri alabiliriz.

Daha sonra, her bir tamsayı değerini temsil eden bir ikili vektör oluşturabiliriz. Vektör, 2 olası tamsayı değeri için 2 uzunluğuna sahip olacaktır.

0 olarak kodlanan ‘kırmızı’ etiket, sıfırıncı indeksin 1 değeriyle işaretlendiği birinci indeksinin ise 09 olarak işlendiği bir ikili vektör [1, 0] ile temsil edilir. Buna karşılık, 1 olarak kodlanan ‘yeşil’ etiket ise, İlk indeksinin 0 değeri ile işaretlendiği ikili vektör [0, 1] ile temsil edilebilir.

  • Aşağıdaki gibi bir veri setimiz olsun.

‘red’, ‘red’, ‘green’

  • Veri setimizin tam sayılar ile temsil edilmiş şekli aşağıdaki gibi olsun.

0,0,1

  • One Hot Encoding yapılmış halide aşağıda yer almaktadır.

Neden One Hot Encoding Kullanıyoruz?

Bir One Hot Encoding, kategorik verilerin temsilinin daha etkileyici ve kolay olmasını sağlar.

Birçok makine öğrenimi algoritması doğrudan kategorik verilerle çalışamaz bu yüzden, kategoriler sayılara dönüştürülmelidir. Bu işlem kategorik olan giriş ve çıkış değişkenleri için gereklidir.

Bu, kategoriler arasında doğal sıralı bir ilişki olduğunda örneğin sıcaklık gibi, “soğuk”, “sıcak” ve “ılık” etiketleri gibi tamsayı değerlerinde sorunlara yol açabilir.

Bir örnek olarak hayvan kategorisin de “köpek” ve “kedi” etiketleri verelim ve sayısallaştıralım. Bu işlem, ağın model için problemi daha kolay hale getirmesine yardımcı olabilir. Çıkış değişkeni için one hot encoding kullanıldığında, tek bir etikete göre daha nüanslı bir tahmin kümesi sunulabilmektedir.

Sklearn Üzerinde Bir Örnek Yapalım

Sklearn üzerinde de bir örnek göstererek konunun kafamızda daha iyi bir yer etmesini sağlayalım. Örneğin elimde ‘Zeynep’ şeklinde String bir veri var bunu one hot encoding ile binary şekilde etiketlendirmek istiyorum .

a,b,c…z ‘ye kadar alfabemiz 1’den 25’ e kadar numerik olarak belirlidir.

Bizde her bir harfin numerik olarak karşılığını bulalım. Bütün bu tablolar ve işlemler sciket-learn üzerinde yer almaktadır. Sırasıyla ‘zeynep’ verimizin 0. indeksinden başlanarak sayısal karşılığı aşağıdaki tabloda yer almaktadır.

Son olarakta aşağıda ‘zeynep’ kelimesinin one hot encoding ilemi sonucu çevirilmiş hali verilmiştir. 26 boyutlu bir vektör üzerinde her harfin sayısal karşılığına denk gelen değeri 1 diğer alanlar 0 olacak şekilde düzenlenmiştir.

‘z’ => 25 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]

zeynep
[25, 4, 24, 13, 4, 15][[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

Bu yazıda neler öğrendik; Kategorik verilerin makine öğrenmesi işlemlerinde analiz edilmesi zor olduğu için bu verilerin binary olarak ifade edilmesi sonucu daha etkili ve hızlı sonuç alabileceğimiz veri setleri elde etmemiz gerektiğini ve bu işlemin temelde nasıl yapıldığını öğrenmeye çalıştık umarım faydalı olmuştur. Teşekkürler.

Bana instagram hesabımdan ulaşabilirsiniz. instagram.com/woman.engineer

Kaynak : https://machinelearningmastery.com/how-to-one-hot-encode-sequence-data-in-python/

--

--