Linear Regression (Doğrusal Regrasyon) Nedir?

Umut Çaylı
5 min readSep 23, 2020

Machine Learning konumuzun en temeli olan Linear Regression ile Makine Öğrenmesine giriş yapıyoruz! Makine öğrenmesi nedir? bunu uzuuun uzuun anlatamayacağımız için temelden Linear Regression ile başlıyoruz :)

Regresyon: Kelime anlamı olarak iki veya daha fazla değişken arasındaki ilişkiyi ölçmeye yarayan analiz tekniğidir.

Linear Regression’un temel avantajlarından biri olan predict (tahmin) etmemizi sağlamasıdır.

Sklearn veya Scikit-learn Kütüphanesi

Numpy, scipy gibi bazı kütüphaneler ile de uyumlu olan Sklearn örneğin numpy ile de kolaylıkla çalışabilir. Asıl kullanım avantajı nesneleri gruplandırma ve gelecekteki ilişkileri öngörme özelliğidir.

Bu plot’umuzu kırmızı line olmadan inceleyelim. Baktığımız zaman doğrusal bir şekilde yükseldiğini ve ilerideki x, y axis’lerinin kesişmelerini tahmin edebilmekteyiz. Bu durumda linear regression kullanılacaktır. Şimdi ise biraz hesaplamalara göz atalım;

E(y|x) = β0 + β1*x

Şimdi buradaki B0 ve B1 değerlerimiz nedir bunlara bakalım.

B0 : Elimizdeki sabit değişken, aldığımız ilk değerin y eksenindeki değeri.
B1: A/B, Neden a/b ? a ne b ne ?

a/b yapmamızın amacı basit matematik bilgimiz olan eğimdi. Eğimi buradan çıkartarak b1 değerimizi aradığımız predict edeceğimiz x ile çarptığımız zaman bize y değerini döndürecektir.

Şimdi bunun arka planında olanlara bir göz atalım.

Burada MSE (Mean Squared Error). Yukarıdaki formül biraz karmaşık gelecektir, biraz daha Python için basitleştireceğiz. Hemeen google’layıp güzel bir grafik bulalım hemeen.

Yandaki grafiği inceleyelim, her bir değerimizin line’a olan uzaklığını kırmızıyla çizilmiş durumda görmekteyiz. y’deki sayımız gerçekten değerimiz y’ sayısı ise line üzerindeki değer. arasındaki farkı yani error’u buluyoruz. Peki neden karesini aldık? Çok basit asıl amacımız burada negatif değerlerde oluşacak çok büyük sapmalardan kurtulup her şeyi pozitif görüp sapmayı hesaplamamız. Pekala 1/n nedir? n bizim değerlerimizin sayısı yani 27. En yukarıdaki formül bize şunu söylüyor; 1'den başla kardeşim 27'ye kadar her bir y’den y’ değerini çıkart ve bunları topla en sonunda ise 27'ye böl bunların ortalamasını bul. Çok güzel, (y-y’) değerimize çoğu kaynakta “Residual Calculating” yani artıkları hesaplama olarak görmekteyiz. Hadi biraz kod yazalım

  • Basit bir plot yaptırıp elimizdeki dataset’ini görsellleştirelim, elde edeceğimiz sonuç lineer olucaktır. Setimiz gereği.
  • Bu şekilde bir görüntü elde ettik. B0 değerimiz sizce nereden başlayacaktır? 2500'den biraz az yaklaşık 1900–2000 gibi bir değerden ve line’ımızı çizebiliriz.
  • Burada sklearn library’imizi import ettik ve ardından linear regression modelimizi oluşturduk. Ardından x ve y axislerinin değerlerini gönderdik. Peki burada reshape ne işe yarıyor?
  • Sklearn 0'ı varsaydığı için (14, ) şeklinde return sağlıyor bize
  • Böyle olduğunda ise bize row & column kısmını göstermekte. Python 101.
  • Fit fonksiyonu ile fit ettik.

Şimdi prediction etme zamanı!

Burada ne yaptık?

predict fonksiyonu ile b0 değerimizi predict edip print ettik. intercept fonksiyonu ile de sağlamasını gerçekleştirdik, intercept ise bizim y ekseniyle kesişme noktamız yani b0'ı bulmamızı en yukarda bahsettiğimiz şekilde bulan fonksiyon. Ardından “coef” fonksiyonu ile slope yani eğimimizi bulduk.

B0 = 1663, B1 = 1138…. küsüratlar hariç. E? Şimdi predict etme zamanı yeni bir değer maas_yeni kısmını önce görmeyelim.
print(linear_reg.predict([[11]])) * tanımlamamız kesinlikle [[ ]] içinde olmalı * burada 11. değeri tahmin ettik ve bize [[14185.72536421]] değerini döndürdü :) Bingo :)

Doğru! :)

Multiple Linear Regression Nedir?

Simpe Linear Regression’daki formülümüz ne idi?
y = b0 + b1*x :)
maas = b0 + b1*deneyim yaaani.
Şimdi ne oldu?
𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂ oldu.
maas = b0 + b1*deneyim + b2*yas

Burada üç boyutlu bir düzlemde oluşabilecek regrasyon hesaplamalarını kullanacağız. Önemli noktalarımızdan biri dependent ve independent (bağımlı ve bağımsız) değişkenler olacaktır.

y değerimiz, 𝑓(𝑥₁, 𝑥₂) değerimiz yahut maas değişkenimiz bizim dependent değerimiz olmakta. Maaş değişkeni deneyime, yaşa ya da her ikisine de bağımlı olarak değişkenlik gösterebilir. Independent değişkenlerimiz ise denklemin diğer tarafında bulunup kendi aralarında da independent durumdadırlar. Bir göz atalım.(google’layıp..:))

MLR kodumuzu yazdık ve altında predict ettik. Okumaya başlayalım, datamızı import ettik bla bla! LR’den tek farkımız coeffication yani eğimimzi iki değer için bulup multiple fonksiyonu ile gerçekleştirmemiz. Predict’imizin sonucunu da aşağı bırakıyorum. Çok üstünde durmamış olabilirim ama, farkımız tek fonksiyon!

Aşağı yukarı bu şekilde bir görüntü elde edeceğiz.

Polynomial Linear Regression Nedir

Adı üstünde polinom, polinomsal korelasyonu incelediğimiz kısımdayız.

MLR ve LR konularından farklı olarak b1, x1 değerlerini incelemek yerine artık 𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂ + 𝑏₃𝑥₁² + 𝑏₄𝑥₁𝑥₂ + 𝑏₅𝑥₂² bu tarz kare küp değerleri almamız gerekecek. Burası 2. dereceden bir polinomdur. Bu modeldeki amacım yine diğerlerinde olduğu gibi b0, b1 … bn değerlerini bulmak. Ee kral bunun farkı ne? Yaptığımız linefit durumları her zaman datama tam oturmayacaktır, linear şekilde artışlar azalmalar olucaktır fakat polinomsal çözümler gerektirecektir, örneğin.

Line fit yerine bu şekilde polinom ve parabol hesaplamalarıyla çizdirmemiz gerekecektir :) Gördükten sonra Bingo! dediğini duydum :) Kodunu yazıp çizelim.

Dosyamızı import ettik dolaştık ettik şimdi bu kısma geldik.
from sklearn.preprocessing import PolynomialFeatures ile polinom features’ımızı import ettik ve altında atamamızı yaptık. Buradaki “degree” attribute’umuz hangi dereceye kadar hesaplama yapmamız gerektiğini söylüyor bize. 2. dereceden polinom hesabımızı yaptık. Ardından fit etme çizgimizi çizme işlemini gerçekleştirip plot’umuzu klasik artık ezberlediğimiz kısmı yaptık.

  • Karşımızda bu şekilde polynomial bir görüntü bizi bekliyor olucak :)

Eveeeetttt, finito! Makine Öğrenmesi konumuzun temelini böylelikle bitirmiş (acaba(!)) oldum. Bundan sonra Doğrusal olmayan regrasyon modellerini inceleyerek yoluma devam edeceğim. Yararlandığım, derlendiğim kaynakları aşağı bırakıyorum :) Go go!

--

--

Umut Çaylı

Student of Computer Engineering, candicate of “Software Developer”