Makine Öğrenimi - Lineer Geri Bildirim

Geri kazanma

Değişkenler arasındaki ilişkileri bulmaya çalıştığınızda, 'geri kazanma' (regression) terimi kullanılır.

Makine öğrenimi ve istatistik modelleme alanlarında, bu ilişki gelecekteki olayların sonuçlarını tahmin etmek için kullanılır.

Linear regresyon

Linear regresyon, veri noktaları arasındaki ilişkiyi kullanarak tüm veri noktaları arasında bir çizgi çizer.

Bu çizgi, gelecekteki değerleri tahmin etmek için kullanılabilir.


Makine öğreniminde, gelecekteki tahminler çok önemlidir.

Çalışma prensibi

Python, veri noktaları arasındaki ilişkileri bulmak ve linear regresyon çizgisi çizmek için bazı yöntemler sunar. Bu yöntemleri matematiksel formüller yerine göstermek istiyoruz.

Aşağıdaki örnekte, x ekseninde araç yaş, y ekseninde hızdır. 13 arabanın geçişteki yaş ve hızlarını kaydettik. Topladığımız verilerin linear regresyon için kullanılabilir olup olmadığını görün:

Örnek

Öncelikle dağılım grafiğini çizin:

import matplotlib.pyplot as plt
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
plt.scatter(x, y)
plt.show()

Sonuç:


Örnek Çalıştırma

Örnek

içe aktarın scipy ve linear regresyon çizgisini çiz:

import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Sonuç:


Örnek Çalıştırma

Örnek açıklaması

Gerekli modülleri içe aktarın:

import matplotlib.pyplot as plt
from scipy import stats

X ve y eksen değerlerini gösteren dizileri oluşturun:

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

Bir yöntem çalıştırın, bu yöntem linear regresyonun bazı önemli anahtar değerlerini döndürür:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Kullanmayı öğrenmek için: katsayım ve kesit Değer fonksiyonu, yeni değerleri döndürür. Bu yeni değer, ilgili x değerinin y eksenindeki konumunu gösterir:

def myfunc(x):
  return slope * x + intercept

Fonksiyonu, x dizisinin her bir değeri üzerinden çalıştırın. Bu, y ekseninin yeni değerleri olan yeni bir dizi oluşturacaktır:

mymodel = list(map(myfunc, x))

Orjinal dağılım grafiğini çiz:

plt.scatter(x, y)

Linear regresyon çizgisini çiz:

plt.plot(x, mymodel)

Görselleştirme:

plt.show()

R-Squared

X ekseninin değerleri ile y ekseninin değerleri arasındaki ilişkinin ne kadar iyi olduğunu bilmek önemlidir, ilgisizse, linear regresyonun hiçbir şeyi tahmin etmek için kullanılamaz.

Bu ilişki, r karesi (r-squared) adı verilen bir değerle ölçülür.

R karesi değeri 0 ile 1 arasında değişir, 0, ilgisiz iken, 1, %100 ilgilidir.

Python ve Scipy modülleri bu değeri sizin için hesaplayacak, yapmanız gereken yalnızca x ve y değerlerini ona sağlamak:

Örnek

Verilerim linear regresyon içinde nasıl uyum sağlıyor?

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

Örnek Çalıştırma

Açıklama:Sonuç -0.76, bir tür ilişki olduğunu, ancak mükemmel bir ilişki olmadığını gösterir, ancak gelecekteki tahminlerde linear regresyonun kullanılacağını gösterir.

Gelecekteki değerleri tahmin etmek

Şimdi, topladığımız bilgileri gelecekteki değerleri tahmin etmek için kullanabiliriz.

Örneğin: 10 yıl yaşındaki bir arabanın hızını tahmin etmeyi deneyelim.

Bu nedenle, yukarıdaki örnekteki ile aynı myfunc() Fonksiyon:

def myfunc(x):
  return slope * x + intercept

Örnek

10 yıl yaşındaki bir arabanın hızını tahmin etmek için:

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
speed = myfunc(10)
print(speed)

Örnek Çalıştırma

Örnek predict hızı 85.6, ayrıca grafiğden de okuyabiliriz:


Kötü uyum?

Gelecekteki değerleri tahmin etmek için en iyi yöntem olmayan bir örnek oluşturalım.

Örnek

Bu x ve y ekseni değerleri, lineer回归ın uyumu çok kötü olacağını gösterir:

import matplotlib.pyplot as plt
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Sonuç:


Örnek Çalıştırma

ve r-squared değeri nedir?

Örnek

Çok düşük bir r-squared değeri elde etmelisiniz.

import numpy
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

Örnek Çalıştırma

Sonuç: 0.013, ilişkinin çok kötü olduğunu ve bu veri kümesinin lineer回归 için uygun olmadığını gösterir.