Makine Öğrenimi - Lineer Geri Bildirim
- Önceki Sayfa Dağılım Grafiği
- Sonraki Sayfa Polinomik 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
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 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)
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 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ç:

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)
Sonuç: 0.013, ilişkinin çok kötü olduğunu ve bu veri kümesinin lineer回归 için uygun olmadığını gösterir.
- Önceki Sayfa Dağılım Grafiği
- Sonraki Sayfa Polinomik Geri Bildirim