Makine Öğrenimi Eğlencelidir!

Makine Öğrenimine girişteki en anlaşılır yazı


İnsanlar makine öğreniminden bahsettiklerinde tam olarak ne olduğunu anlayamıyor musunuz? İş arkadaşlarınızla konuşurken konusu açıldığında hiçbir şey anlamadan kafa sallamaktan bıktınız mı? Hadi bunu değiştirelim!

Bu rehber, makine öğrenimi konusunda meraklı olup nereden başlayacaklarını bilemeyen herkes içindir. Öyle sanıyorum ki bir çok kişi wikipediadaki makaleyi okuduktan sonra hayal kırıklığına uğrayıp, keşke üst seviye, daha anlaşılır bir açıklama olsaydı diyerek vazgeçiyor.

Burada hedef herkese ulaşabilir olmak — bu da demek oluyor ki bir çok genelleme olacak. Ama kimin umrunda? Eğer bu yazı birinin makine öğrenimi hakkındaki ilgisini artırırsa görev tamamlanmıştır.


Makine Öğrenimi nedir?

Makine öğrenimi, herhangi bir kod yazmanıza gerek kalmadan, size belirli bir veri kümesi hakkında ilginç şeyler söyleyebilen soysal(generic) algoritmalar oluşturma fikridir. Kod yazmak yerine bu genel algoritmayı veri ile beslersiniz ve bu şekilde algoritma, bu veriye dayanarak kendi mantığını oluşturur.

Örneğin, algoritma çeşitlerinden birisi sınıflandırma algoritmasıdır. Bu algoritma verileri farklı gruplara ayırır. Aynı sınıflandırma algoritması elle yazılmış sayıları tanımlamada kullanılabileceği gibi, bir satır kod değiştirmeden, epostaları spam veya spam-değil olarak iki gruba ayırmada da kullanılabilir. Algoritma aynı algoritmadır ama farklı veri ile eğitildiği için farklı bir sınıflandırma mantığı oluşturur.

Bu makine öğrenimi algoritması farklı sınıflandırma problemleri için kullanılabilen bir kara kutudur.

“Makine öğrenimi” bu tip farklı soysal algoritmaları altında toplayan bir çatıdır.

İki Tip Makine Öğrenimi Algoritması Vardır

Makine öğrenimi algoritmaları iki gruba ayrılır: gözetimli öğrenme ve gözetimsiz öğrenme. Aralarındaki fark basit ama çok önemlidir.

Gözetimli Öğrenme

Diyelim ki siz bir emlakçısınız. İşleriniz büyüyor ve size yardım etmesi için bir çok stajyer işe aldınız. Ama bir problem var — siz bir eve baktığınızda evin değeri hakkında iyi bir tahminde bulunabiliyorsunuz ama stajyerlerinizin tecrübesi yok bu yüzden nasıl değer biçmeleri gerektiğini bilmiyorlar.

Stajyerlere yardım etmek için (ve kendinizi tatil için boşa çıkarmak için), sizin bölgenizdeki ev fiyatlarını genişlik, muhit, ve benzer evlerin kaça satıldığı vb. gibi özelliklere göre hesaplayan basit bir uygulama yazmaya karar verdiniz.

Bu yüzden son üç ayda şehirde satılan tüm evlerin fiyatlarını kaydettiniz. Satılan her evin oda sayısı, genişliği, muhiti gibi detaylı özelliklerini not aldınız. Ama en önemlisi nihai satış fiyatını da kaydettiniz:

Bu bizim “eğitim verimiz”

Bu eğitim verisini kullanarak, bizim bölgemizdeki diğer tüm evlerin satış fiyatlarını tahmin eden bir program yazmak istiyoruz:

Bu eğitim verisini kullanarak diğer evlerin fiyatlarını tahmin etmek istiyoruz.

İşte bu yöntem gözetimli öğrenmedir. Her bir evin kaça satıldığını biliyorsunuz, yani problemin cevabını biliyorsunuz ve oradan yola çıkarak geriye doğru bir mantık oluşturmaya çalışıyorsunuz.

Uygulamanızı geliştirmek için, her ev hakkındaki eğitim verisiyle makine öğrenimi algoritmanızı besliyorsunuz. Algoritma bu sayılar arasındaki ilişkiyi oluşturmak için nasıl bir matematik gerektiğini çözmeye çalışıyor.

Bu çeşit problemler aslında şuna benziyor: Matematik testinde elinizde cevaplar var ama aradaki aritmetik semboller silinmiş.

Hayır! Sinsi öğrenci öğretmenin cevap anahtarından aritmetik sembolleri silmiş!

Buradan yola çıkarak testte ne çeşit matematiksel problemler olduğunu çözebilir misiniz? Sağdaki her bir cevaba ulaşmak için soldaki sayıları kullanarak “bir şeyler yapmanız” gerektiğini biliyorsunuz.

Gözetimli öğrenmede, bu aradaki ilişkiyi kendiniz çözmek yerine, bu işi bilgisayara bırakıyorsunuz. Ve belirli bir problem grubunu çözmek için gereken matematiği bildiğiniz anda, artık o tipteki tüm problemlere cevap verebiliyorsunuz.

Gözetimsiz Öğrenme

Yine baştaki emlakçı örneğine geri dönelim. Her evin satış fiyatını bilmeseydiniz ne olurdu? Tüm bildiğiniz evin genişliği, yeri vb. gibi bilgiler olsa bile, görünen o ki hala işe yarar hesaplamalar yapabilirsiniz. Buna da gözetimsiz öğrenme deniyor.

Bilinmeyen bir sayısı (fiyat gibi) tahmin etmeye çalışmasanız bile, makine öğrenimiyle ilginç şeyler yapabilirsiniz.

Bu yöntem şuna benziyor: Birisi size bir kağıtta sayı listesi veriyor ve şunu diyor “bu sayıların ne ifade ettiğini bilmiyorum ama belki sen burada bir düzen veya grup gibi birşey bulabilirsin — iyi şanslar!”.

Öyleyse bu veriyle ne yapılabilir? Yeni başlayanlar, veriniz içindeki farklı piyasa segmentlerini tanımlayan bir algoritma kullanabilirsiniz. Okulun yakınındaki evleri alanların küçük ama çok sayıda odası olan evleri tercih ettiğini ama kenar mahallelerde ev alanların 3 odalı ve büyük evleri tercih ettigini keşfedebilirsiniz. Bunun gibi farklı tip müşteriler hakkında bilgi sahibi olmanız pazarlama çalışmalarınızı yönlendirmeniz icin size yardımcı olabilir.

Yapabileceğiniz diğer güzel bir şey ise normalin dışında kalan, diğerlerinden çok farklı evleri otomatik olarak tespit edebilmektir. Bu evler sıra dışı devasa malikaneler olabilir ve siz en iyi satıcılarınızı bu bölgelere yönlendirebilirsiniz, çünkü bu evlerin komisyonları daha yüksek olacaktır.

Bu yazının devamında gözetimli öğrenemeye odaklanacağız, ama bu gözetimsiz öğrenme daha az yararlıdır veya daha az ilgi çekicidir anlamına gelmiyor. Aslında gözetimsiz öğrenme, algoritmalar geliştikçe giderek daha önemli hale geliyor çünkü veriyi doğru cevap ile etiketlemeye gerek kalmadan kullanılabiliyor.

Detaycılar için not: Başka bir çok çeşit makine öğrenimi algoritması var ama burası başlangıç için iyi bir yer.

Bu etkileyici ama ev fiyatını tahmin etmek gerçekten “öğrenme” sayılabilir mi?

Bir insan olarak, beyniniz neredeyse her duruma nasıl yaklaşması gerektiğini ve o durumla nasıl başa çıkması gerektiğini dışarıdan bir talimat almadan öğrenebilir. Eğer uzun süre ev satarsanız, artık o evin gideri nedir, o ev en iyi nasıl pazarlanır, o evle hangi müşteri ilgilenir gibi tahminlemeleri içgüdüsel olarak “hissedebilirsiniz”. Güçlü yapay zeka araştırmasının hedefi bu yeteneği bilgisayarlarla taklit etmektir.

Ama güncel makine öğrenimi algoritmaları henüz o kadar iyi değiller – sadece çok özelleştirilmiş, sınırlı problem üzerinde yoğunlaştığında çalışabiliyorlar. Bu durumdaki “öğrenme” için “örnek veriye dayalı olarak özel bir problemi çözmek için formül bulmak” desek daha doğru olur.

Maalesef “örnek veriye dayalı olarak özel bir problemi çözmek için formül bulan makine” çok iyi bir isim değil. Bu yüzden bunun yerine “Makine Öğrenimi” kavramını kullanıyoruz.

Tabiki eğer bunu 50 yıl sonra okuyorsanız ve Güçlü yapay zeka için algoritma bulduysak, o zaman bu yazı antika gibi görünebilir. O zaman bu yazıyı okumayı bırakıp, robot hizmetçine sana bir tost hazırlamasını söyleyebilirsin, gelecekteki insan.

Hadi o programı yazalım!

Yukarıdaki örnekteki gibi ev fiyatlarını tahmin eden bir programı nasıl yazardınız? Devamını okumadan bu konu hakkında bir kaç saniye düşünün.

Makine öğrenimi hakkında bir şey bilmeseydin, muhtemelen ev fiyatını tahmin etmek için aşağıdaki basit kurallar yazmaya çalışırdın:

def ev_satis_fiyati_tahminle(oda_sayisi, genislik, muhit):
fiyat = 0
#Benim bölgemde, ortalama fiyat $200/metrekare
metrekare_fiyati = 200
if muhit == "hipsterton":
# ama bazı bölgeler daha pahalı
metrekare_fiyati = 400
elif muhit == "skid row":
# ve bazı bölgeler daha ucuz
metrekare_fiyati = 100
# ev genişliğine göre baz bir fiyatla başla
fiyat = metrekare_fiyati * genislik
# now adjust our estimate based on the number of bedrooms
if oda_sayisi == 0:
# Studyo daireler daha ucuz
fiyat = fiyat — 20000
else:
# oda sayısı artıkça genelde fiyat da artar

fiyat = fiyat + (oda_sayisi * 1000)
return fiyat

Bununla saatlerce uğraşırsan, aşağı yukarı çalışan bir şey elde edebilirsin. Ama programın hiçbir zaman mükemmel olmaz ve fiyatlar değiştikçe çalışmasını sağlamak zorlaşacaktır.

Bir bilgisayarın sizin yerinize bu fonksiyonu nasıl çalıştırılacağını bulması daha iyi olmaz mıydı? Doğru sayıyı verdiği sürece fonksiyonun nasıl çalıştığı kimin umrunda olur ki?

def ev_satis_fiyati_tahminle(oda_sayisi, genislik, muhit):
fiyat = <bilgisayar, lütfen benim için hesapla>
return fiyat

Bu problem şöyle de düşünülebilir: Fiyat lezzetli bir yahnidir ve malzemeler ise oda sayısı, genişlik ve muhitdir. Eğer malzemelerin herbirinin fiyatı ne kadar etkilediğini bulabilirsek, nihai fiyatı bulmak için karıştılması gereken malzemelerin sabit oranlarını da bulabiliriz.

Bu sizin baştaki fonksiyonunuzu(tüm o if else koşulları ile) aşağıdaki gibi çok basit hale getirecektir:

def ev_satis_fiyati_tahminle(oda_sayisi, genislik, muhit):
fiyat = 0
# bir tutam bundan
fiyat += oda_sayisi * .841231951398213
# bundan biraz fazla koyalım
fiyat += genislik * 1231.1231231
# bir avuç da bundan
fiyat += muhit * 2.3242341421
# ve son olarak, iyi bir ölçü için biraz da tuz ekleyelim
fiyat += 201.23432095
return fiyat

Buradaki kalın yazılan sihirli sayılara dikkat edin – .841231951398213, 1231.1231231,2.3242341421, ve 201.23432095. Bunlar ağırlıklardır. Eğer her ev için doğru çalışan mükemmel ağırlıkları bulabilirsek, artık fonksiyonumuz ev fiyatlarını tahmin edebilir!

En iyi ağırlıkları bulmak için şöyle aptalca bir yol izlenebilir:

1. Adım:

Her ağırlığa başlangıçta 1.0 değeri atayın:

def ev_satis_fiyati_tahminle(oda_sayisi, genislik, muhit):
fiyat = 0
# bir tutam bundan
fiyat += oda_sayisi * * 1.0
# bundan biraz fazla koyalım
fiyat += genislik * 1.0
# bir avuç da bundan
fiyat += muhit * 1.0
# ve son olarak, iyi bir ölçü için biraz da tuz ekleyelim
fiyat += 1.0
return fiyat

2. Adım:

Bildiğiniz evler için fonksiyonu çalıştırın ve her ev için tahminde doğru ev fiyatına ne kadar yaklaştığını görün:

Fonksiyonu kullanarak her ev için bir tahmin üretin.

Örnek olarak, ilk eviniz 250k dolara satıldı, ama sizin fonksiyonunuz 178k olarak satış fiyatını tahmin etti. Bu durumda o ev için gerçek fiyattan 72k sapmanız var demektir.

Şimdi her bir evin sapma miktarının karesini alarak toplayın. Diyelim ki veri kümenizde 500 ev satışı var ve her ev için oluşan sapma miktarlarının kareleri toplamı 86,123,373$ etti. Bu miktar fonksiyonunuz ne kadar “yanlış” olduğunu gösterir.

Şimdi de, ev satış tahminlerinin ortalama ne kadar saptığını bulmak için bu toplamı 500 ile bölün. Buna ortalama hata miktarı denir ve fonksiyonunuzun maliyetini gösterir.

Eğer ağırlıklarla oynayarak bu maliyeti sıfıra getirebilirseniz, fonksiyonunuz mükemmel olacaktır. Bu da demek olur ki, fonksiyonunuz, her durumda, girdi olarak verilen veriye dayanarak, ev fiyatlarını mükemmel olarak tahmin edebiliyor. Bu yüzden hedefimiz farklı ağırlıklar deneyerek bu maliyeti olabildiğince aşağıya çekmek.

3. Adım

2. adımı mümkün olan her bir ağırlık kombinasyonu için tekrar tekrar deneyin. Maliyeti sıfıra en çok yaklaştıran ağırlık kombinasyonu hangisiyse kullanacağımız kombinasyon odur. Düzgün sonuçları veren ağırlıkları bulduğunuz anda problemi çözdünüz demektir!

Akıl Alma Zamanı

Bu çok basitti değil mi? Az önce yaptığınız şey hakkında düşünün. Bazı verileri aldınız ve üç soysal(generic) basit adım ile verileri kullandınız ve sonunda bölgenizdeki her evin fiyatını tahmin edebilen bir fonksiyon oluşturdunuz.

Aklınızı başınızdan alacak bir kaç gerçeğe göz atalım:

  1. Son 40 yıldaki bir çok alandaki (dilbilim/çeviri gibi) araştırmalar gösterdi ki “sayıları karıştırıp yahni yapan” (yazarın kendi oluşturduğu bir deyim) bu soysal öğrenme algoritmaları, insanların kendi kendilerine belirli kurallar oluşturmaya çalıştığı yaklaşımlara göre çok daha iyi sonuçlar veriyor. Makine öğreniminin “aptalca” yaklaşımı eninde sonunda insan uzmanları yeniyor.
  2. Sonuçta elde ettiğiniz fonksiyon tam bir aptal. Bu fonksiyon “metrekare” veya “oda sayısı” gibi özelliklerin ne olduğu bilmiyor. Tek bildiği doğru cevabı bulmak için bu sayıları belirli miktarda karıştırması gerektiği.
  3. Büyük ihtimalle o belirli ağırlıkların neden çalıştığı hakkında bir fikriniz olmayacak. Yani, az önce tam olarak ne olduğunu gerçekten anlamadığınız ama çalıştığını ispat edebildiğiniz bir fonksiyon yazdınız.
  4. Tahmin fonksiyonunuzun, “genişlik” ve “oda_sayisi” gibi parametreler almak yerine, bir sayı dizisi aldığını düşünün. Bu dizideki her bir sayı, arabanızın üstüne takılmış bir kameradan alınan görüntüdeki bir pikselin parlaklığını gösteriyor olsun. Fonksiyonun tahmin çıktısı olarak da “fiyat” yerine “direksiyon_döndürme_derecesi” olarak bir sonuç döndüğünü varsayalım. Az önce arabanızı kendi kendine yönlendiren bir fonksiyon yaptınız!

Baya çılgınca değil mi?

3. Adımdaki “her sayıyı deneme” işini nasıl halledebiliriz?

Tabiki, en iyi çalışan kombinasyonu bulmak için mümkün olan tüm ağırlıkları denemeniz mümkün değil. Denenecek sayılar hiç bitmeyeceği için bu deneme sonsuza kadar sürerdi.

Bu ağırlıkların hepsini denemeden hızlı bir şekilde iyi değerler bulmak için matematikçiler bir çok güzel yöntem keşfetmişler. Bunlardan birisi şu:

İlk olarak, 2. adımı temsil eden basit bir denklem yazın:

Bu sizin maliyet(cost) fonksiyonunuz.

Şimdi aynı denklemi tekrar yazalım ama bu sefer makine öğrenimi matematik jargonu kullanalım(şimdilik görmezden gelebilirsiniz):

θ güncel ağırlıkları temsil eder. J(θ) ise güncel ağırlıklar için maliyettir’.

Bu denklem, atadığımız ağırlıklar için fiyat tahminleme fonksiyonumuzun ne kadar yanlış olduğunu bulmamızı sağlar

Bu maliyet denklemini oda sayısı ve genişlik ağırlıklarının olası tüm değerleri için grafiğe çevirirsek, şu şekilde bir grafik elde ederiz:

Maliyet fonksiyonumuzun grafiği çanak gibi görünüyor. Burada dikey eksen maliyeti gösteriyor.

Bu grafikteki, mavi renkteki en düşük nokta maliyetin en az olduğu nokta — yani burası fonksiyonumuzun en az yanlış olduğu nokta. En yüksek noktalar en yanlış sonuçlar üretilen yerler. Burada eğer en düşük noktayı veren ağırlıkları bulabilirsek, cevabı bulduk demektir!

Ağırlıkları ayarlayarak bu grafik üzerinde en düşük noktaya doğru “tepeden aşağı yürümemiz” gerekiyor. En düşük noktaya yönlenicek şekilde ağırlıklarda küçük oynamalar yapmaya devam edersek, çok fazla ağırlık denemeye gerek kalmadan eninde sonunda oraya ulaşırız.

Calculus dersinizden bir şeyler hatırlıyorsanız, fonksiyonun türevini alırsanız, bu türev size herhangi bir noktadaki fonksiyon teğetinin eğimini verir. Başka bir deyişle, bize herhangi bir noktada hangi yolun tepeden aşağı gittiğini gösterir. Bu bilgi sayesinde tepeden aşağı yürüyebiliriz.

Maliyetin her bir ağırlığa göre kısmi türevini hesaplayıp, daha sonra bu değeri her bir ağırlıktan çıkartırız. Bu bizi tepenin altına doğru bir adım daha yaklaştırır. Bunu yapmaya devam ettiğinizde eninde sonunda tepenin en alt noktasına yani en iyi ağırlık değerlerine ulaşırsınız. (eğer aklınıza yatmadıysa, endişelenmeyin, okumaya devam edin)

Burada anlatılan yöntem, fonksiyonunuz için en iyi ağırlıkları bulmanın yollarından biri olan batch gradient descent(toplu eğim azaltma) yöntemidir. Eğer detaylarını öğrenmek isterseniz, daha derine inmekten korkmayın

Gerçek bir problemi çözmek için bir makine öğrenimi kütüphanesi kullandığınızda, bütün bunları sizin için kütüphane yapacaktır. Ama yine de arka planda neler olduğu hakkında bir fikrinizin olması yararlı olacaktır.

Başka neler var?

Yukarıda anlattığım 3 aşamalı algoritmaya multivariate linear regression (çok değişkenli doğrusal regresyon) adı veriliyor. Grafikteki bütün evle ilgili noktaların üzerinden veya yakınından geçen bir çizgi için denklemi oluşturuyorsunuz. Daha sonra bu denklemi kullanarak, sizin çizginiz üzerinde o evin nerede denk geleceğini bularak daha önce hiç görmediğiniz evlerin fiyatlarını tahmin edebiliyorsunuz. Bu gerçekten güçlü bi fikir ve bununla “gerçek” problemleri çözebilirsiniz.

Yukarıda size gösterdiğim yaklaşımla basit durumlar üzerinde çalışabilirsiniz ama bu yöntem tüm durumlar için çalışmayacaktır. Bunun çeşitli sebepleri vardır. Bu sebeplerden birisi, ev fiyatlarının bir çizgi üzerinde süreklilik göstericek kadar basit olmamasıdır.

Bu konuda şanslıyız çünkü bunu çözmek için çeşitli yollar mevcut. Doğrusal olmayan veri üzerinde çalışabililen başka bir çok makine öğrenimi algoritması vardır (yapay sinir ağları or destek vektör makinesi ve çekirdek fonksiyonlar). Ayrıca doğrusal regresyonu daha akıllıca kullanarak daha karmaşık çizgilere uyum sağlatmak için de çeşitli yöntemler var. Tüm durumlarda, altta yatan basit fikir en iyi ağırlıkları bulmak.

Ayrıca, fazla uyum sağlamada(overfitting) konusuna da henüz değinmedim. Bazen elinizdeki veriyle mükemmel çalışan ama veri kümenizde olmayan yeni evler için hiçbir zaman çalışmayan ağırlıklar da bulabilirsiniz. Bunun da üstesinden gelmek için çeşitli yöntemler var (düzenlileştirme veya çapraz geçerleme). Bu durumla nasıl başa çıkılacağını öğrenmek, makine öğreniminin başarıyla uygulamayı öğrenmek için kilit noktadır.

Başka bir deyişle, temel konsept oldukça basit olmasına rağmen, makine öğrenimini uygulamak ve yararlı sonuçlar almak yetenek ve tecrübe gerektirir. Ama bu yetenek herhangi bir geliştiricinin öğrenebileceği bir yetenektir!

Makine öğrenimi sihirli mi?

Makine öğrenimi tekniklerinin zor görünen problemlere ne kadar kolaylıkla uygulandığını gördükçe, makine öğrenimiyle her problemi çözebileceğiniz v e yeterince veri olduğu sürece cevapları bulabileceğiniz hissetmeye başlarsınız. Siz sadece veriyi sağlayın, arkanıza yaslanıp bilgisayarın sihirli bir şekilde veriye uygun denklemi çıkarmasını izleyin!

Ama şunu unutmayın: Eğer probleminiz elinizdeki veriyle çözülebilir bir problem ise makine öğrenimi çalışacaktır.

Mesela, ev fiyatlarını evdeki saksılardaki bitki çeşitlerine göre tahminleyen bir model geliştirdiyseniz, bu hiç hiçbir zaman çalışmayacaktır. Evin satış fiyatıyla evdeki saksılar arasında bir ilişki yoktur. Bu yüzden bilgisayar ne kadar uğraşırsa uğraşsın bu ikili arasında bir ilişki oluşturamaz.

Sadece gerçekte olan ilişkileri bulabilirsiniz.

Unutmayın, eğer uzman bir kişi problemi manuel olarak çözmek için o veriyi kullanamıyorsa, muhtemelen bilgisayar da bu konuda başarılı olamayacaktır. Bunun yerine, insanların çözebildiği ama bir bilgisayar aracılığıyla çok daha hızlı bir şekilde çözülebilecek problemlere odaklanın.

Makine Öğrenimi hakkında daha fazlası nasıl öğrenilebilir?

Bana göre makine öğrenimiyle ilgili en büyük problem, sadece akademi dünyasında ve ticari araştırma gruplarında kullanılıyor olmasıdır. Uzman olmadan, bu konuda genel bir anlayış sağlamak isteyen insanlar için anlaşılması kolay materyal pek bulunmuyor. Ama her geçen gün daha iyiye gidiyor.

Andrew Ng’nin Coursera’daki ücretsiz Makine Öğrenimi kursu oldukça harika. Buradan başlamanızı şiddetle tavsiye ederim. Bu kursu Bilgisayar Bilimleriyle ilgili lisans tamamlamış ve biraz da matematik hatırlayan herhangi bir kişi anlayabilir.

Ayrıca, SciKit-Learn araçlarını indirip kurarak, yüzlerce makine öğrenimi algoritmasıyla oynayabilirsiniz. Bu araç tüm standart algoritmaları “kapalı kutu”(sadece girdi ve çıktıyı görebildiğiniz) olarak içinde barındıran bir Python kütüphanesidir.


Eğer bu yazıyı beğendiyseniz, yazarın Machine Learning is Fun! eposta grubuna kayıt olun. Yazar dadece enterasan ve yeni şeyler bulduğunda mail atıyor. Bunun gibi yazılar yazdığında haberdar olmanızın en iyi yolu bu.

Ayrıca yazara Twitter ile @ageitgey, mail ile veya Linkedin üzerinden ulaşabilirsiniz.

Şimdi diğer bölümlere göz atın. Makine Öğrenimi Eğlencelidir-2. Kısım, Part 3, Part 4 and Part 5!

Yazarın izniyle çevrilmiştir. Yazının kendisine buradan ulaşabilirsiniz. Bana da buradan mail ile ulaşabilirsiniz.