Lineer Regresyon -Makine Öğrenmesi (2020)

ibrahimcanerdogan
3 min readDec 15, 2020

--

Makine Öğrenmesinde ilk ve en basit algoritması Lineer Regresyon ile karşınızdayım. Bu algoritma verisetinizde bir değişkenin tahmin etmek istediğiniz diğer değişken ile birebir ilişki kuran, bir değişken ile çıktıyı tahmin etmeye çalışan regresyon algoritmasıdır.

Yazının Konu Anlatım Videosu

Yazının Github Reposu

Yazının Konu Anlatım Oynatma Listesi

1- Veri Setini Getirme/İnceleme

Bu yazımızda aşağıdaki veri setini hazırladık. Ancak dikkat edilmesi gereken nokta training = new_data.iloc[:, 0:1] değişkeninde girdi aralığını 1 değişken olarak verdiğimizi, Lineer algoritma olduğu için sadece bir değişkenin girdiğini unutmayalım :)


import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

data = sns.load_dataset("tips")
df = pd.DataFrame(data)

# Eksik Verileri Ortalama ile Doldurma
imputer = SimpleImputer(missing_values=np.nan, strategy="mean")
imputer = imputer.fit(df[["total_bill"]])
df[["total_bill"]] = imputer.transform(df[["total_bill"]])

# Kategorik Olmayan Değişkenler
total_bill = df[["total_bill"]]
tip = df[["tip"]]
size = df[["size"]]

# Kategorik Değişkenler İçin 0-1 Dönüşümü
smoker = pd.get_dummies(df[["smoker"]])
time = pd.get_dummies(df[["day"]])

# Kukla Değişkeni Silme
smoker = smoker.drop("smoker_Yes", axis=1)

# Verileri Birleştirme
new_data = pd.concat([total_bill, size, smoker, time, tip], axis=1)

# Train ve Test Belirleme
training = new_data.iloc[:, 0:1]
testing = new_data.iloc[:, 7:8]

# Train Test Ayırma
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(training, testing, test_size=0.30, random_state=42)

2- Model Eğitme

sklearn.linear_model içinden LinearRegression algoritmasına ulaşıyoruz. LinearRegression’u bir değişkene atayıp bunu düzenlediğimiz veri setimizide oluşturduğumuz x_train ve y_train ile eğitiyoruz.

from sklearn.linear_model import LinearRegressionlinear_reg = LinearRegression()
linear_reg.fit(x_train, y_train)

3- Tahmin

Eğittiğimiz modeli test için ayırdığımız verileri (x_test) algoritmamızın “predict” ile verilebilecek bahşiş miktarlarını “y_pred” değişkenimize atıyoruz.

y_pred = linear_reg.predict(x_test)

4- Doğruluk/Hata Oranları

sklearn.metrics içinden r2_score ile doğruluk oranımızı, mean_squared_error ile ortalama test/train hatamızın skorlarına bakabiliriz.

mean_squared_error skorumuz azaltılması daha az hata yapıldığı yani gerçeğe daha yakın sonuçlar elde edildiğini gösterir. r2_score yüksek olması doğru tahminler için çok önemlidir ancak aşırı yüksek olan r2_score overfitting olduğu anlamına da gelebilir.

from sklearn.metrics import r2_score, mean_squared_error

print("Train R2 Score: ", r2_score(y_train, linear_reg.predict(x_train)))
print("Test R2 Score: ", r2_score(y_test, linear_reg.predict(x_test)))

print("Ortalama Test Hatası: ", np.sqrt(mean_squared_error(y_test, y_pred)))
print("Ortalama Train Hatası: ", np.sqrt(mean_squared_error(y_train, linear_reg.predict(x_train))))

5- Ağırlıklar & Sabit Katsayı Değerlerinin Hesaplanması

Bir tahminin nasıl oluştuğunu bu iki fonksiyon sayesinde olur. Burada linear_reg.intercept_ ile tahminde kullanılan ve her tahminde mutlaka tahmin değerine eklenen skordur. linear_reg.coef_ ise modelin girdi değişken sayısı kadardır ve girdi olarak eklenen her değişkenin modelin tahmininde farklı bir etkisi vardır. Burada ağırlığı fazla olan değişken modelin tahmininde en fazla etkisi olan değişkendir

Coef skoru çok düşük olan değişkenleri tahminde kullanılan girdi değişkenlerinden çıkarmak, modelin yukarıda yapılan skorlarda olumlu bir etki olarak geri dönüş sağlayabilir.

print("Sabit Katsayı: ", linear_reg.intercept_[0])
print("Ağırlıklar: ", linear_reg.coef_)

6- İstediğiniz Ücrete göre Bahşişin Tahmini

Kullanıcıdan alınan toplam ücret (burada toplam ücret olmasının nedeni yukarıda girdi değişkeni olarak seçilen 1 değişkenin total_bill olması), ağırlık katsayısı ile çarpıldıktan sonra sabit katsayı ile toplanarak kaç birim bahşiş vereceği kişiye göre bulunmuş olur.

intercept_ dizi halinde olduğu için 0. indeksi, coef_ dataframe halinde olduğu için [:, 0] şeklinde tüm satırların 0. sütunu olarak alınmıştır !!!

deger = int(input(“Toplam Ücreti Giriniz: “)) 
print(“Tahmin: “, linear_reg.intercept_[0] + linear_reg.coef_[:, 0] * deger)

7- Tahmin & Gerçek Tip Sütunun Karşılaştırılması

Tahmin değişkenlerini bir dataframe haline getiriyoruz, sonrasında indeksleri random şeklinde oluğu için birleştirmede sorun yaşamamak için y_pred indeksini, y_test indeksine eşitliyoruz yani 1'den başlayarak sıralıyoruz. x_test sütunumza karşılık gelen y_test ile x_testi kullanarak tahmin ettiğimiz y_pred değerlerini birleştiriyoruz. Bu şekilde gerçek değerler, tahminlerimiz arasındaki benzerliği gözle görmüş oluyoruz.

y_pred = pd.DataFrame(data=y_pred, index=range(len(y_pred)), columns=["Tahmin"])

y_test.index = y_pred.index
comparison = pd.concat([y_pred, y_test], axis=1)

print(comparison)

8- Görselleştirme

x_train ve x_train ile oluşan tahminleri birbiri arasında oluşan tahmin aşağıdaki şekilde oluşturulabilir.

Kırmızı olarak belirtilen noktalar gerçek tahminleri ve mavi çizgiyle de x eksenindeki total_bill karşısında tahmin edilen tip (bahşiş) değeri görülebilir.

plt.plot(x_train, linear_reg.predict(x_train), color = 'blue')

plt.title('Linear Regression')
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.show()

Umarım faydalı olmuştur. Diğer algoritmalarda görüşmek üzere :)

Önceki Yazı (Veri Setini Düzenleme)/ Sonraki Yazı (Çoklu Lineer Regresyon)

MY GITHUB PROFILE

MY YOUTUBE CHANNEL

MY LINKEDIN PROFILE

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet