Category: Türkçe

Date:

Son dönemde adını sıkça duyduğumuz Makine Öğrenmesi'ni mümkün olduğunca basit halde sizlere anlatmaya çalışacağım. Makine Öğrenmesi (Machine Learning), matematiksel ve istatistiksel yöntemler kullanarak mevcut verilerden çıkarımlar yapan, bu çıkarımlarla bilinmeyene dair tahminlerde bulunan yöntem paradigmasıdır. Makine öğrenmesine güncel hayatımızdan bazı örnekler: yüz tanıma, belge sınıflandırma, spam tespiti.

Bir benzetme yapacak olursak öğrenci konu çalışıp ders kitabındaki örnek çözümlü soruları çözer ve öğrenir. Ardından kitapta bulunmayan ama aynı bilgiye dayanan farklı bir test önüne konulur. Öğrenci cevapları bilmeden testi çözer. Sonra değerlendirmeye alınır, ne kadar başarılı olduğu görülür. Eğer ezberci bir öğrenciyse benzeri kitapta olmayan soruları muhtemelen yanlış yanıtlayacaktır. Eğer işin temelini anlayan bir öğrenciyse farklı tarzda soru gelse bile doğru çözebilecektir. Öğrenci test sonucunu ve nerelerde hata yaptığını inceler. "Hmm şu soruda şöyle bir genelleme yapmışım ama aslında iş bu kadar basit değilmiş", "Hmm şu etkeni hesaba katmayı düşünemedim" gibi dersler çıkarır kendisine. Ardından derslerini almış bir gözle kitabını tekrar çalışır ve tekrar testi çözer. Yeterince iyi sonuç alana kadar hatalarını keşfedip konunun püf noktalarını öğrenmeye çalışır.

Makine öğrenmesi de bunun çok benzeridir. Süreç aynıdır. Öncelikle terminolojiden bahsedelim. Ardından en temel 2 öğrenme türünü tanıyalım ve örnek bir makine öğrenme sürecini anlayalım.

Terminoloji

  • Gözlemler (Observations): öğrenmek ya da değerlendirmek için kullanılan her bir veri parçası. Örn: her bir e-posta bir gözlemdir.

  • Özellikler (Features): Bir gözlemi temsil eden (genelde sayısal) verilerdir. Örn: e-posta'nın uzunluğu, tarihi, bazı kelimelerin varlığı.

  • Etiketler (Labels): Gözlemlere atfedilen kategoriler. Örn: spam, spam-değil.

  • Eğitim Verisi (Training Data): Algoritmanın öğrenmesi için sunulan gözlemler dizisi. Algoritma bu veriye bakarak çıkarımlarda bulunur, kafasında model kurar. Örn: çok sayıda spam/spam-değil diye etiketlenmiş e-posta gözlemi

  • Test Verisi (Test Data): Algoritmanın kafasında şekillendirdiği modelin ne kadar gerçeğe yakın olduğunu test etmek için kullanılan veri seti. Eğitim esnasında saklanır, eğitim bittikten sonra etiketsiz olarak algoritmaya verilerek algoritmanın (vermediğimiz etiketler hakkında) tahminlerde bulunması beklenir. Örn: spam olup olmadığı bilinen (ama gizlenen), eğitim verisindekilerden farklı çok sayıda e-posta gözlemi

İki Temel Öğrenme Türü

Gözetimli Öğrenme

Etiketlenmiş gözlemlerden öğrenme sürecidir. Etiketler, algoritmaya gözlemleri nasıl etiketlemesi gerektiğini öğretir. Örneğin içinde "para kazan" ifadesi geçiyorsa spam demelisin gibi yol göstermelerde bulunur.

Sınıflandırma (Classification): Her bir gözleme bir kategori/sınıf atması yapar: Örn: spam/spam değil. Sınıflar ayrıktır (sayı değildir) ve birbirlerine yakın/uzak olmaları gibi bir durum söz konusu değildir.

Regresyon (Regression): Her gözlem için öğrendiklerine bakarak reel bir değer tahmini yapar. Örn: "2011 model 40.000 km'de Mia Torento arabanın fiyatı 45.670 TL olmalıdır".

Gözetimsiz Öğrenme

Etiketsiz gözlemlerden öğrenme sürecidir. Algoritmanın kendi kendine keşifler yapması, gözükmeyen örüntüleri keşfetmesi beklenir.

Kümeleme (Clustering): Gözlemleri homojen bölgelere ayırır. Örn: bir okuldaki öğrenci gruplarını tespit etmek.

Boyut Azaltımı (Dimensionality Reduction): Gözlemlerin mevcut özellik sayısını az ve öz hale indirir, bize en iyi öğrenme imkanı sunar.

Öğrenme Süreci

Peki nasıl öğreniyor bu algoritmalar?

Öncelikle ham veri (raw data) buluyoruz. Örn: Metin, görüntü, genetik verisi, sayısal ölçümler, sosyal ağlar, kullanıcı puanlamaları...

Regresyon tipi gözetimli öğrenme üzerinden örnek verelim. Elimizde hastaların sağlık verileri olsun. Her hasta için: yaş, cinsiyet, sigara içiyor mu, günde kaç sigara içiyor, şeker hastalığı var mı, daha önce kalp krizi geçirdi mi, kolestrolü kaç, nabzı kaç, şeker seviyesi kaç?

AdAnneAdıDahaOnceKrizSigaraSayisiKolestrol...KrizGeçirdiMi
MehmetLeyla112100..1
MuratAyşe06170..1
FahriTuba0330..0

Bu verilere bakarak hastaların 10 yıl içinde kalp krizi geçirme olasılığını tahmin edelim.

Özellik Çıkarımı (Feature Extraction)

Gözlemlerimizi en iyi temsil edecek özellikleri kullanmak etmek için ham veriden Özellik Çıkarımı (Feature Extraction) ve çıkarılan özellikler üzerinde Özellik Seçimi (Feature Selection) yapıyoruz. Bu süreçte alan bilgisi (domain knowledge) uygulamak gerekiyor. Yani bu işi tecrübesiz bir insana anlatacak olsaydık hangi özelliklere bak derdik? Bu özellikleri tanımlayıp hesaplamak gerekli. Örneğin kalp hastalığı tespitinde "AnneAdı" özelliğinin pek de işe yaramayacağını öngörebiliriz. En çok şüphelendiğimiz sigara sayısı, daha önce kalp krizi geçirdi mi? gibi özellikleri hesaba katmakta fayda var. Gereksiz kısımları temizlemeliyiz.

Model Oluşturma

Özellikler çıktıktan sonra bir öğrenme algoritması bu matris üzerinde çalışıyor. Sonucunda bir takım kurallar çıkarıyor. Örneğin basit bir algoritma az sayıda veriye bakarak bazı şöyle bir model ortaya koyabilirdi:

Kriz olasılığı = günlük sigara sayısı x 0.05 + kolestrol seviyesi x 0.004

Ancak gözlem sayısı arttıkça daha karmaşık yorumlar yapabiliyor.

Değerlendirme

Elimizde artık bir modelimiz var. Şimdi test verisiyle test etmeliyiz:

AdAnneAdıDahaOnceKrizSigaraSayisiKolestrol...KrizGecirdiMi
MertBeyza11080..1
DavutFatma11540..1
VeyselKadriye0515..0

Elimizde etiketi (10 yıl içinde kalp krizi geçirdi / geçirmedi) gizlenmiş hasta gözlemlerini (test verisini) modele uygulayarak her birisi için bir olasılık çıkarıyoruz. Ardından olasılık 0.5'den büyükse kriz geçireceğini iddia ediyorum diyoruz. Modelin ürettiği bu tahminleri elimizdeki gerçek kriz bilgileriyle karşılaştırıp ne kadar başarılı bir tahmin yaptığını değerlendiriyoruz.

AdAnneAdıDahaOnceKrizSigaraSayisiKolestrol...KrizGecirdiMiHesaplananOlasılık
MertBeyza11080..10.82
DavutFatma11540..10.91
VeyselKadriye0515..00.85

Eşik olarak 0.5 kullandığımızda bu test verisindeki herkesin kalp krizi geçirmesini bekliyoruz ama Veysel 10 yıl içinde geçirmemiş. Eğer eşiği 0.9 deseydik Veysel'in kriz geçirmeyeceğini bilecektik ama gerçekte kriz geçiren Mert'in kriz geçireceğini iddia edemeyecektik.

Değerlendirmede kullandığımız kıstaslar:

  • Accuracy (Doğruluk): doğru bildiğimiz / toplam gözlem. Bunu hem model tahminimiz için yapıyoruz, hem de baseline (dayanak) denilen basit tahmin için. Dayanak, eğitim verisindeki gözlemlerin yüzde kaçı kriz geçirmiş sorusuna verdiğimiz cevap oluyor. Yani hiçbir fikrimiz olmadığında öne sürebileceğimiz en iyi cevap. Model doğruluğu, dayanak doğruluğundan ne kadar iyiyse o kadar iyi.
  • Sensitivity (hassaslık), gerçekten kriz geçiren kimselerden yüzde kaçını "kriz geçirecek" diyerek bildik?
  • Specificity (belirginlik), kriz geçirmeyen kimselerden yüzde kaçını "kriz geçirmeyecek" diyerek bildik?

Model oluşturma yöntemine göre bu değerleri kullanarak daha karmaşık metrikler hesaplanıp yorumlanabiliyor. 0.5 olarak kullandığımız karar katsayısını 0.95 yaparak "iddiamdan ancak çok eminsem kriz geçirecek derim" diyebiliriz, bu da hassaslığı düşürür. Çünkü kimse kriz geçirmeyecek demiş oluruz. belirginliği artırır çünkü kriz geçirmeyecek insanları daha çok insanı bilmiş oluruz. Katsayıyı 0.3 yaparsak ise birçok kişiye potansiyel hasta muamelesi yapmış oluruz, durum tersine döner. Kalp krizi hayati bir olay olduğu için bütçe elverdiği ölçüde bu katsayıyı düşük tutmakta fayda var.

Bununla birlikte modelin karmaşıklığına göre tahmin sonuçları değişecektir. Eğer model çok basitse (az sayıda özelliğe bakarak karar veriyorsa) çok daha hızlı çalışacaktır. Eğer iyi genelleme yapabiliyorsa farklı veri kümelerinde iyi tahminler yapabilir. Ama az miktarda veriye bakarak genelleme yaptıysa bu genelleme farklı veri kümelerinde yanlış tahminlere yöneltecektir.

Bunu engellemek için modelin karmaşıklığını artırırsak bu sefer eğitim kümesini ezberleme durumu ortaya çıkar. Yani eğer hasta 53 yaşındaysa ve günde 9 sigara içip 45.9 kolestrole sahipse ve ... .. kalp krizi geçirir gibi ezber kokan yanıtlar vermeye başlar. Bu modeli eğitim kümesinde test edecek olursak %100'e yaklaşan başarı gösterir. Ama 53 yaşında 9 sigara içen ve 50 kolestrole sahip birisi hakkında doğru yorum yapamaz. Çünkü ezberlediği bilgiler arasında bu gözlem yoktur.

Modelin karmaşıklığı iyi ayarlanmalıdır. Ne eğitim verisini ezberlemeli, ne de çok basit genellemeler yapmalıdır. Mümkün olduğunca (fazla değil) basit olmalıdır.

İyileştirme

Eğer modelin yeterince başarılı olmadığını düşünüyorsak nerelerde hata yaptığını inceleyip modelimize hangi özellikleri vermemz gerektiğini düşünmeliyiz. Bazı özellikleri çıkarmalı, bazı özellikleri eklemeli, yeniden bir model oluşturup tekrar değerlendirmeliyiz. Bu süreç tatmin olana kadar devam edebilir ama sonu yoktur.

Veri -> Temizleme -> Özellik çıkarımı -> Öğrenme Algoritması -> Model -> Değerlendirme -> İyileştirme -> Temizleme -> ...

Örneğin ilk modelimizin yeterli olmadığını gördüğümüzde "bir de daha önce kalp krizi geçirmiş mi" özelliğine bakalım deyip ayrı bir model oluşturup onu test edip daha başarılı olduğunu görebiliriz. Modelin performansı, sağlamlığı konusunda çeşitli metrikler mevcuttur.

Tahmin

Eğer modelimizin test kümesinde başarılı şekilde tahmin yürüttüğünü düşünüyorsak başka veriler üzerinde modeli çalıştırıp tahminler yapmaya, modelden faydalanmaya başlayabiliriz.

Sonuç olarak

Makine Öğrenmesi kimi zaman çok faydalı olabilmektedir ancak sihirli bir değnek de değildir, farklı algoritmalar, farklı özellikler, farklı veriler ile çok sayıda deneme yanılma girişimiyle model oluşturma sabrı gerektirir. Makine Öğrenmesi konusuda daha çok bilgi öğrenmek istiyorsanız Coursera, edX, Udacity gibi platformlardan faydalanabilirsiniz. Aldığım The Analytics Edge dersinden ben son derece memnun kaldım. Ayrıca 9. Veri Bilimi İstanbul buluşmasında gerçekleştirdiğim sunumu Youtube üzerinden izleyebilirsiniz:


Share: FacebookGoogle+Email


Receive notification on my new posts

* required
Languages*   
* Different contents, not direct translation. You may choose both if you wish.
comments powered by Disqus