Makine Öğrenmesi - Doğrusal Regresyon
Makine Öğrenmesi algoritmaları arasında belki de anlaşılması en kolay olan Doğrusal Regresyon’un (Linear Regression) arkasındaki mantığı, bu konuda yeni olan herkes için kendi cümlelerimle anlatmak istedim. İnternette oldukça doküman olsa da belki de zamanında yeterince bilgim olmadığından Doğrusal Regresyon konusunu tek seferde anlayabileceğim bir yazı bulamamıştım. Benim de bu yazıdaki hedefim olabildiğince net bir şekilde Doğrusal Regresyonun nasıl uygulandığı anlatmak olacak.
Doğrusal Regresyon konusunu anlatırken lise düzeyinde matematik hakimiyetinizin olduğunu varsayacağım.
Hatırlarsanız matematik derslerinde doğru grafikleri çiziyorduk. Bize koordinatlar, eğimler gibi bazı bilgiler veriliyordu ve bizden verilen bilgileri kullanarak fonksiyonu tespit etmemiz ve grafiğini çizmemiz bekleniyordu. Örneğin (3, 4) ve (-5, 1) noktalarından geçen doğrunun denklemini bulunuz gibi.
Biz nasıl o zaman verilen bilgilerden yola çıkarak doğru denklemini bulmaya çalışıyorsak Doğrusal Regresyon algoritması da bizimle aynı amaç uğruna bir yöntem izliyor. Amaç, verilen verileri temsil eden bir doğru çizmek. Tabii ki birkaç önemli fark ile birlikte.
Netleştirmemiz gereken konu:
Yazının devamında az önce bahsettiğimiz koordinatlar için kullandığım “Bilgi” kelimesinin yerine “Gerçek Dünya Verileri”ni kullanacağım.
Örneğin matematikte bize (2, 3) noktası verildiğinde bizim için bu bir bilgi ise bundan sonra (Tesla Model S araba, 72.990) gibi gerçek dünyadan bilgiler bizim için birer veri olacak.
•Farkında Olmamız Gerekenler
■ Doğrusal Regresyon adından da anlaşılacağı gibi sadece doğrusal ilişkisi olan veriler için tutarlı bir algoritmadır. Örneğin verilerimiz ev fiyatları ile ilgiliyse ve ev fiyatları, evlerin metre karesiyle doğru orantılı bir şekilde artıyorsa burada doğrusal ilişkiden söz edilebilir. Bu da Doğrusal Regresyon için uygun bir veri seti anlamına gelir.
■ Elimizdeki veriler genellikle 2, 3 taneden ibaret olmaz. Bazen yüzlerce, binlerce bazen de milyonlarca olabilir.
■ Çoğu zaman verilen verilerle, koordinatları verilmiş basit bir doğru çizimi gibi tüm verileri tam anlamıyla karşılayan bir doğru çizmek mümkün olmuyor.
Çünkü fikir yürütürsek binlerce gerçek dünya verisini tam anlamıyla karşılayacak bir denklem var olsaydı. Yarın geleceği bilmeye başlayabilirdik. (Ne demeye çalıştığımı yazının sonlarına doğru anlayacaksınız.)
Şimdi konuyu biraz daha açabiliriz.
Aşağıda gün içinde kaç bardak su içtiğiniz ile o günün akşamında saat kaçta yatmış olduğunuz arasındaki ilişkiyi veren bir grafik ve hemen üstünde de grafikte kullanılmış olan veri setini görüyorsunuz.
(Veri setini tamamen kafamdan uydurduğum için ciddiye almanıza gerek yok. Yalnızca konuyu anlatırken referans alabileceğim bir veri seti oluşturdum.)
Grafiğimize ilk bakışta dikkatinizi çektiyse verilerimiz doğrusal bir şekilde dağılmış. Grafiğe göre eğer o gün 7 bardak su içmişseniz genelde saat akşam 11-12 arası yatıyormuşsunuz. Bu tarz grafikler her zaman önünüze gelecektir. Burada yanlış yorumlamamak adına aklımızda bulunması gereken bir detay var.
Grafikte, ne kadar su içtiğimiz ile yatma saatimiz arasında bir nedensellik varmış gibi gelebilir. Bu durumda yanılgıya düşmeyin. Doğrudan birbirlerini etkileyip etkilemediğini kanıtlamadığımız sürece bir nedensellik olduğunu iddia edemeyiz. Peki bu duruma ne diyoruz? Korelasyon. Kısaca Korelasyon, iki durumun aynı anda gerçekleşmesinde söylenebilecek bir terim. Bu farkı daha iyi kavrayabilmek için Korelasyon terimini araştırabilirsiniz. Konuyu daha çok dallandırmadan devam ediyorum.
O halde grafikteki verilere bakarak o gün kaçta uyuyacağınızı kestirebilirsiniz. Ama fark ediyoruz ki saat akşam 12 civarı yattığınız günlerde içtiğiniz bardak su sayısı oldukça değişken. Bir gün 5 bardak, bir gün 4, bir gün de 6 bardak su içmişsiniz. Bu durumda hangi değeri dikkate almanız gerekecek? Evet hemen bakıp ortalama bir değer alabilirsiniz. Fakat şu anda bizim amacımız bu verileri bir kurala oturtmak. İyi öyleyse, verilerimizi temsil edecek bir doğru çizelim. Her birinin üzerinden tam olarak geçecek bir doğru çizmemiz mümkün değil ama hiç değilse hepsini temsil edecek mantıklı, ortalama bir doğru çizmeyi deneyebiliriz. Mesela aşağıda görmüş olduğunuz mavi renkli doğru gibi veya pembe veya sarı olan. Hepsi verilerimizle tutarlı görünüyor.
Diyelim mavi olan daha mantıklı geldi ve mavi olan doğruyu seçtik.(Belki de en mantıksız olan seçtiğimiz mavi doğru. Kime göre neye göre?) Böylelikle sezgisel bir doğru çizmiş olduk. Ama dediğim gibi “Sezgisel”. Biz bu verileri bir kurala oturtmuş olmadık. Ortada hala analitik bir çözüm yok.
Sezgisel olarak da olsa doğrumuzu çizerken neyi baz aldık?
Eminim çoğumuz, doğrunun verilerin yoğun olduğu yerlerden geçmesini veya hepsine eşit yakınlıkta olmasını göz önünde bulundurdu. Aklın yolu bir, Doğrusal Regresyon algoritması da sezgisel olması dışında benzer şekilde çalışıyor.
•Bazı kavramlar
►Artık:
Artık terimini, çizeceğimiz doğrunun her bir veri için ne kadar doğru bir değer tahmin ettiğinin bir kıstası olarak düşünebiliriz. Örneğin üstteki grafiğe geri dönersek çizdiğimiz doğru, günde 11 bardak su içtiğimiz gün, 21:00'de yattığımızı gösteriyor. Ama gerçekte 11 bardak su içtiğimiz gün 21:40'da yatmışız. Bu veri için yani bu nokta için, Artık değerimiz 21:40 – 21:00 = 40 dakika olur. Gerçek veri değerimizin doğruya olan düşey uzaklığı bize aynı cevabı verecektir.
Farklı olmasına rağmen aynı kapıya çıkan böyle bir tanım da yapılabilir:
Artık değeri = Verimizin Gerçek Değeri – Doğrunun Gösterdiği Değer.
21:00 – 21:40 = –40 çıkacaktır. Fakat bu tanıma göre, doğrumuzun üzerinde kalacak veriler pozitif Artık değerine sahipken doğrunun altında kalan veriler negatif Artık değerine sahip olacaktır. Bu durum bize ileride sorun yaratabilir. İyi de kendi kendimize sorun yarattık. 1. tanım dururken neden 2. tanımı kullanayım diyebilirsiniz. Bunu tartışacağız.
Elimizde her bir verinin artık değeri var. Tüm verilere ait artık değerleri toplarsak elimizde hangi doğrunun verilerimizi daha iyi temsil edeceği konusunda karar vermemize yardımcı olabilecek bir Artıklar Toplamı elde ederiz. Böylece hangi doğrunun Toplam Artık değeri daha az ise o doğrunun verilerimizi daha iyi temsil ettiğini söyleyebiliriz. Tam burada bir duralım. Artık teriminin 2. tanımını hatırlarsanız. Doğrunun altındaki veriler negatif Artık değerine sahip olurken doğrunun üstünde kalanlar pozitif Artık değerine sahip oluyordu. O zaman biz verilerimizin Artık değerlerini toplarken negatif Artık değerler pozitif Artık değerleri bir miktar sönümleyecektir. Ve sonunda bize gerçekçi olmayan bir Artıklar Toplamı kalacaktır. Çünkü negatif Artık değerlerinin Pozitif Artık değerlerini tamamen sıfırlama şansı dahi var. Ve bu da bizim doğrumuzun kusursuz gibi görünmesi veya yeterince iyi bir doğru olmasına karar vermemiz gibi bir yanılgıya düşürebilir.
Peki şöyle bir şey yapsak. Artık değerleri doğrudan alıp toplamak yerine her birinin karesini alıp toplasak? Bunu neden yapmış olabileceğimizi biraz düşünmenizi istiyorum.
İlk neden, 2. tanımımızdaki negatif sonuçlar olabilir. Evet belki yeterince iyi bir neden olabilir. Fakat bunun yerine mutlak değerlerini de alabilirdik. Neden almadık? Bana bu tanım her zaman kare almak için uydurulmuş bir gerekçe gibi gelmişti. Kare almamızın daha önemli nedenleri var.
■ İstatistiksel işlemler yaparken bize daha tarafsız sonuçlar verecektir.
■ Karesi olan bir ifadenin türevini almak mutlak değer içindeki bir ifadenin türevini almaktan daha kolay.(Yazının devamında türev alacağız.)
■ Eğer her bir verinin Artık değerlerinin karesini alırsak doğrumuza uzak olan verilerin, Toplam Artık üzerindeki etkisi daha fazla olurken daha yakın verilerin, Toplam Artık üzerindeki etkisi daha az olacaktır. Şimdi bunu bir düşünelim, doğrumuzu çizdikten sonra, doğruyu az farkla kaçıran artık değerleri toplamı 20 olan 4 verinin olmasını mı tercih ederdiniz yoksa doğrudan daha uzakta olan artık değeri yine 20 olan 1 verinin olmasını mı? Az farkla 4 verinin olmasını tercih etmek modelimizi yani doğrumuzu daha dengeli, tutarlı yapacaktır. Bunun için de karelerini almak tercih edeceğimiz yöntem olacak.(Karelerini almak bu durumu almamaya göre daha minimize edecektir.. Test edip görebilirsiniz.) Fakat bu her zaman en iyi çözüm olmayabilir. Başka senaryolarda mutlak değerini almak veya küpünü almak daha iyi sonuçlar almamızı da sağlayabilir.
Artık değerlerimizi matematiksel olarak bu şekilde ifade edebiliriz:
Doğrumuzun denklemi y = ax + b şeklinde olacaktır. Bu denklemi referans alarak artık değerlerimizin karelerinin toplamını bu şekilde ifade edebiliriz:
Şimdiki hedefimiz bu Artıkların Kareler Toplamını minimum yapacak olan a ve c değerlerini bulmak. Böylece verilerimizi en iyi temsil eden doğrunun katsayısını(a) ve sabitini(c) bulmuş olacağız. Bunun için TÜREV konusuna kısa bir geçiş yapmamız gerekiyor.
Yine hatırlarsanız bir fonksiyonun olabileceği en küçük veya en büyük değeri bulurken türev konusundan yararlanıyorduk. Küçük bir örnekle hatırlatma yapacağım.
Örneğin elimizde kısa kenarı x, uzun kenarı 40-x olan bir dikdörtgen var. Bu dikdörtgenin hangi x değeri için alanının en büyük olacağını arıyoruz.
İlk yapmamız gereken dikdörtgenin alanını x türünden yazmak olur.
x(40-x)
Sonrasında bu ifadeyi bir fonksiyon gibi düşünelim ve bu şekilde yazalım.
f(x) = -x² + 40x
Fonksiyonumuzu maksimum yapan x değerini bulmak için f(x)’in 1. türevini sıfıra eşitleyelim.
f’(x) = -2x + 40
-2x + 40 = 0
x = 20 olur.
Şimdi türevin işaret tablosunu inceleyelim.
x = 20 için f(x) maksimum oluyormuş. Yani x(40-x) ifadesinde x yerine 20 verirsek bizim dikdörtgenimizin alanı olabileceği en yüksek değer oluyormuş.
x(40-x) = 20.20 = 400m² bulduk.
Aynı işlemi Artıkların Kareleri Toplamı ifademize uygularsak hangi a ve c değerleri için ifademizin minimum olduğunu buluruz ve doğru denklemimizi de belirlemiş oluruz. Bu yönteme En Küçük Kareler Yöntemi denmektedir.
Yalnız burada şöyle bir fark var. Bizim dikdörtgen örneğimizde tek bir katsayı(x) vardı. Ama bu sefer hem a katsayımızı hem de c sabitimizi arıyoruz. Yani iki değişkenimiz var.
Bu durumda kısmi türev almamız gerekecek.
Aynı türevde olduğu gibi fonksiyonumuz sürekli ve türevli olduğu müddetçe yerel bir maksimum veya minimum noktada tüm kısmi türevler 0 olacaktır.
Peki biz a için kısmi türev alıp sıfıra eşitlediğimizde bize maksimum mu minimum değerini mi vereceğini nereden bileceğiz? c içinde aynı soruyu soruyoruz.
İşaret tablomuzu her iki değişken için de çizip inceleyebiliriz. Veya ikinci türevini aldıktan sonra çıkan sonuç sıfırdan büyükse minimum, sıfırdan küçükse maksimum değerini elde ettiğimizi kanıtlayabiliriz.
f’’(x) < 0 yerel maksimum
f’’(x) > 0 yerel minimum
Son bir seçenek daha var. Eğer Artık Kareler Toplamı ifademizin grafiğinin aşağıdaki grafik olduğunu önceden biliyorsak fonksiyonumuz dış bükey bir fonksiyon olduğunun farkında olup kısmi türev sonucu maksimum mu minimum değeri mi elde edeceğimiz hakkında şüpheye düşmemize gerek kalmaz. Grafiği incelediğimizde yalnızca minimum noktası olduğunu göreceğiz. Böylelikle, kısmi türev sonucunda bulacağımız değerlerin fonksiyonumuzu minimum yapan değerler olacağına emin oluruz.
Artık Kareler Toplamı ifadesinin a ve c ‘ye göre kısmi türevleri alıp sıfıra eşitledikten sonra elimizde aşağıdaki değerler olacaktır.
Şimdi bu değerlerimizi kullanarak doğru denklemimizi yazalım. Tek yapmamız gereken a değerini değişken katsayısı olarak, c değerini ise denklem sabitimiz olarak yazmak.
Hala karışık görünüyor değil mi? Ama dikkat ederseniz ifademizdeki tek bilmediğimiz değer bizim tahmin etmesi için denkleme göndereceğimiz x.
Verilerimizi temsil eden en iyi doğruyu bulduk. Hangi verileri? Bildiğiniz gibi bu doğru, veri setinden veri setine değişeceği için a ve c ifadelerimiz şimdilik anlamsız gözüküyor olabilir. a ve c, doğrusal regresyon için kullanacağımız veri setine göre değişiklik gösterecektir. Son bir örnek veri setiyle a ve c’nin sayısal değerlerini bulup bir tahminle bitirmek isterdim. Fakat yazı oldukça uzun oldu.
Doğrusal Regresyon’un basit bir mantığı olsa da oldukça kuvvetli ve yaygın bir yöntemdir.
En uygun doğrusal modeli bulmanın tek yöntemi bu değil. Gradient Descent algoritması ve istatistiksel yöntemlerle de bulunabiliyor. Ve bu yazıda ele almadığımız bir diğer konu da bulduğumuz değerlerin güven aralıkları ve istatistik ile modelimizin verilerimize ne kadar uyum sağladığı hakkında bazı analizler. Umarım yazı biraz olsun yardımcı olmuştur.
Gradient Descent’i öğrendikten sonra okumanızı tavsiye ettiğim bir tartışma:
https://stats.stackexchange.com/questions/212619/why-is-gradient-descent-required
Kaynaklar:
Ve Doğrusal Regresyon Algoritmasının sonuna geldik. Hoşça kalın :)