Başaracaksın: Google Machine Learning Crash Course Dersleri 5 – Feature Engineering

Herkese tekrar merhabalar,

Bugün karşınızda Representation konusu ile beraberim. Bu konu Yapay Zeka’nın temellerinden olan veriden gerekli featureları anlamak, seçmek ve kullanmakla alakalı olduğu için bu kısımda pek bir kod örneği görmeyeceğiz. Hazırsak kemerleri bağlayalım, çok güzel bir yolculuk başlıyor 🙂

Representation:

Representation elimizdeki verileri modelimiz tarafından kullanılabilmesi için kullanışlı feature değerlerine mapleme işlemidir.

Feature Engineering:

Çok kabaca Feature Engineering (Öznitelik Mühendisi) bir verisetini analiz edip hangi feature değerlerinin yararlı olabileceğini belirleme ve raw datadan feature oluşturma işlemidir diyebiliriz.

Representation, Feature Engineering ve Raw Datadan Feature çıkarmak konuları için bu yazıma bakabilirsiniz: Makine Öğrenmesi’nde Ham Veri’den Öznitelik Çıkarmak

Raw Datayı Featurelara Maplemek

Aşağıdaki resmi ele alalım.

Kaynak: https://developers.google.com/machine-learning/crash-course/representation/feature-engineering

Raw Data kısmı bir input kaynağından (yerel bir csv dosyası, bir sunucu vs.) okunan raw dataları gösterir.

Feature Vector kısmı ise veri setinizde yar alacak floating-point(kayan nokta) değerleri kümesi olan bir Feature Vekötür temsil eder.


FLoatıng poınt Mi? O DA NE?

Floating-point çok basitçe gerçel sayıların bilgisayar ortamındaki gösterimi diyebiliriz. Pekala daha da derine inelim;
Floating point kavramı aslında reel sayıların bilgisayar alanındaki adıdır. Bu kavrama reel değil de floating-point denmesinin sebebi ise sayı içerisindeki ondalık noktasının kayabilme özelliğinden dolayıdır. Gerçek dünyada sayılar sonsuza kadar giderken, bilgisayar ortamında bilgisayar donanımının getirdiği sınırlamalardan dolayı bütün sayıların gösterilmesi mümkün değildir. Bununla birlikte gerçekte sonsuza kadar giden birtakım değerler bilgisayar ortamında ortamın kapasitesine bağlı olarak yaklaşık değerlerle temsil edilirler. Bu sınırlamaların etkisini en aza indiren, sayıların maksimum miktarda ve gerçeğe en yakın şekilde temsilini sağlayan sisteme “Kayan-Noktalı Sayılar” sistemi denir. Kaynak ve daha fazlası için: Kayan-Nokta adresini inceleyebilirsiniz.


Bildiğiniz üzere çoğu makine öğrenmesi modeli feature değerlerinin model ağırlıklarıyla çarpılması gerektiğinden featureları gerçek numaralı vektörler olarak temsil etmelidir.

Aşağıdaki lineer regresyon formülünü ele alalım:

y=ax+b

Burada y değerimiz label,

x değerimiz feature,

a değerimiz x feature’ının weight değerini yani model ağırlığını temsil ediyor.

Burada sizin a değeriniz x’in katsayısı olduğu ve değeri numerik bir değer olduğu için feature değerinizin (x) de numarik bir değer olması gerekir.

Kısaca örneklemek gerekirse elinizdeki raw datada “Fethi” değeri var. Siz bu değeri direk feature’a aktarırsanız lineer regresyon formülünüz aşağıdaki gibi olacaktır:

y=2*Fethi+b

Bu da bize numerik bir değer vermeyecek ve modelimizin hatalı olmasına neden olacaktır çünkü modelimiz numerik veriler üzerinden işlemler yapıyordu.


Eğer elinizde text şeklinde bir veri varsa(resimdeki örneğe göre sokak ismi olan “Shorebird Way”) bunu modelimizin anlaması için numerik bir feature’a çevirmemiz gerekiyor.

Yani Feature engineering sayesinde raw datamızı modelimizin anlayacağı featurelara mapliyoruz.

Numerik Datayı Featurelara Maplemek

Numerik verileri için herhangi özel bir encoding işlemi yapmamıza gerek yok çünkü numerik bir weight değeriyle zaten hali hazırda çarpılabiliyor. Aşağıdaki şekilde 6 değerinin hiçbir değişikliğe uğramadan direk featurelaştırıldığını görebilirsiniz:

Kaynak: https://developers.google.com/machine-learning/crash-course/representation/feature-engineering

Kategorik Datayı Featurelara Maplemek

Kategorik Veri sınırlı sayıda değer alabilen veridir diyebiliriz. Örneğin bir uçakta “Uçuş Sınıfı” veriniz varsa bu verinin değerleri yalnızca “Ekonomi” veya “Birinci Sınıf” değerleri olabilir.

Ancak bu değerler string bir değerdir ve modeller string değerlerle öğrenilmiş numerik weight değerlerini çarpamaz bu yüzden bu değerleri numerik değerlere çevirmemiz gerekiyor.

Burada her mümkün değere vocabulary (örneğin Uçuş Sınıfı için Ekonomi ve Birinci Sınıf) diyebiliriz.

Vocabulary dışındaki her değeri de (örneğin Uçuş Sınıfı için İkinci Sınıf) Out OF Vocabulary(OOV) olarak bilinen bir gruba gruplayabiliriz.

Buna göre maplememizi yaparsak:

Ekonomi – 0

Birinci Sınıf – 1

Geri Kalan Tüm Değerler(OOV) – 2

Bu kullanım, Label Encoder’a örnektir.

Ancak bu kullanım da bir dizi sorunlara yol açabilir.

  1. Her uçuş sınıfı için tek ağırlık öğreneceğiz (yani modelimiz ucus_sinifi feature’ı için tek weight değeri oluşturacak.) Modelimizin weight değerini 7 bulduğunu düşünelim.
    -Ekonomi Sınıfı için: y=7*0+b
    -Birinci Sınıf için: y=7*1+b
    -Geri Kalan Her Sınıf İçin: y=7*2+b
    Buna göre uçuş sınıfı ile doğru orantılı bir tahmin gerçekleştirilecektir. Ancak burada göz ardı etmememiz gereken şey, 2. sınıfın 1.sınıftan daha iyi olmadığıdır. Yani buradaki tahminler hatalı olacaktır. Modelimiz her bir sınıf için farklı weight değeri öğrenme esnekliğine ihtiyaç duyar. Bunun aynısını yukarıdaki şekildeki sokak örneği için de verebiliriz. Burada sokak sıralarıyla doğru orantılı bir tahmin gerçekleşir ancak bu bizim istediğimiz bir durum değildir. Biz her sokak için farklı weight değerlerinin öğrenilmesini istiyoruz.
  2. Aynı anda iki değere sahip verileri hesaba katmıyoruz. Örneğin bir ev iki sokağın köşesinde kalıyorsa sokak_ismi kolonu iki değer içerebiliyor ancak bu durumda bu veriiy encode etmenin bir yolu olmuyor.

Bu iki hatadan kurtulmanın yolu ise her kategorik veri için binary bir vektör oluşturmak. Eğer ilgili örneği içeren bir vektör ise değeri 1, diğer elemanların ise değeri 0 olur. Bunu daha detaylı anlatmak için size One Hot ve Multi Hot Encoding’i tanıtayım.

ONE-HOT ve MULTI-HOT ENCODING

Elinizde sokak kategorik verisi olduğunu ve bu kategorik verinin 5 tane değerle sınırlı olduğunu düşünün. Bu değerler

  • A Sokak
  • B Sokak
  • C Sokak
  • D Sokak
  • E Sokak

One Hot Encoding’te her sokak feature’ının yalnızca bir tane değeri olduğunu varsayıyoruz. Yani veri setimizdeki her örnek sadece bir sokak değeri içerebilir. (Örneğin yalnızca A Sokak veya B Sokak. Hem A hem de B sokak aynı örnekte olamaz.)

One Hot Encoding her bir sokak değeri için yeni bir feature oluşturur. Örneğin ev verisetimiz olduğunu ve bu verisetinde de aşağıdaki kolonların olduğunu düşünün:

  1. Oda Sayısı
  2. Sokak
  3. Ev Fiyatı

One Hot Encoding yaparsak verisetimizdeki kolonlar bu şekilde olur:

  1. Oda Sayısı
  2. A Sokak
  3. B Sokak
  4. C Sokak
  5. D Sokak
  6. E Sokak
  7. Sokak (orjinal verisetindeki sokak. Bu kısım görmezden gelinebilir.)
  8. Ev Fiyatı

Burada her bir sokak değeri için bir feature oluşturuldu. Peki bu feature değerleri ne olur?

Eğer ilgili veriniz A Sokağındaysa o veri için kolon değerleri aşağıdaki gibi olur.

Diğer sokaklar için de aşağıdaki gibi olacağını söyleyebiliriz:

O verinin sokak değerinin olduğu alan 1, diğer alanlar ise 0’dır.

Bu durumu bir vektör ile göstermek istersek;

  • A Sokak için: [1,0,0,0,0]
  • B Sokak için: [0,1,0,0,0]
  • C Sokak için: [0,0,1,0,0]
  • D Sokak için: [0,0,0,1,0]
  • E Sokak için: [0,0,0,0,1]

Multi-Hot Encoding ise bu binary değerlerden birden fazlasının 1 olma durumudur. Örneğin [0,0,1,1,0] bir Multi-Hot Encoding örneğidir. Bu örnekte ilgili verimiz hem C hem de D Sokağındadır.

Sparse Representation

Verisetinizde 1.000.000 farklı sokak isimleri olduğunu düşünün. Eğer bunları One-Hot veya Multi-Hot Encoding yaparsanız elinizde en fazla iki sokak ismi 1 değerine sahip bir vektör olacak.

Bunu örneklemek gerekirse veriniz eğer A Sokağındaysa geri kalan 999.999 değer 0(sıfır) olacaktır.

Yani elimizde [1,0,0……..0] vektörü olacaktı. Bu durumda kullanılan en yaygın yaklaşım Sparse Representation kullanmaktır. Bu yaklaşımda sadece 0 olmayan değerler tutulup gösterilmektedir. Eğer Sparse Representation kullanılmasaydı bu vektörler hem performans hem de storage olarak sistemde sorunlara yol açabilme potansiyeline sahip olacaktı. Sparse Representation’da her feature değeri için farklı model ağırlıkları öğrenilmeye devam eder.

KAPANIŞ

Bugün sizlerle Feature Engineering’e giriş yapıp veri kaynağından okuduğumuz verileri nasıl modelimizin anlayacağı formata getireceğimizi öğrendik. Umarım faydalı ve eğlenceli bir yazı olmuştur 🙂 Hepinize mutlu sağlıklı ve verimli günelr dilerim sonraki yazım için takipte kalın 🙂

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.