Makine Öğrenimi - Polinom Geri Bildirim

Polinom Regresyonu (Polynomial Regression)

Eğer veri noktalarınız lineer regresyon için açıkça uygun değilse (veri noktaları arasından geçen doğru çizgi), polinom regresyon ideal bir seçenek olabilir.

Doğrusal回归 gibi, polinom回归 değişken x ve y arasındaki ilişkiyi kullanarak veri noktalarını çizen en iyi yolu bulur.


Çalışma prensibi

Python, veri noktaları arasındaki ilişkiyi bulmak ve polinom回归 çizgisi çizmek için bazı yöntemler sunar. Bu yöntemleri matematiksel formüller yerine kullanmanızı göstereceğiz.

Aşağıdaki örnekte, belirli bir geçiş istasyonundan geçen 18 otomobil kaydettik.

Otomobillerin hızlarını ve geçiş zamanlarını (saat) kaydettik.

X ekseni gün içindeki saatleri, y ekseni hızları temsil eder:

Örnek

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

import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
plt.scatter(x, y)
plt.show()

Sonuç:


Çalıştırma Örneği

Örnek

içe aktarın numpy ve matplotlib,polinom回归 çizgisini çiz:

import numpy
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 22, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Sonuç:


Çalıştırma Örneği

Örnek açıklaması

Gerekli modülleri içe aktarın:

import numpy
import matplotlib.pyplot as plt

X ve y ekseni değerlerini temsil eden dizileri oluşturun:

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

NumPy, polinom modeli oluşturmamıza olanak tanır:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Sonra satırın gösterimini belirleyin, 1'den başlayarak 22'ye kadar:

myline = numpy.linspace(1, 22, 100)

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

plt.scatter(x, y)

Polinom回归 çizgisini çiz:

plt.plot(myline, mymodel(myline))

Grafikleri göster:

plt.show()

R-Squared

Önemli olan, x ve y ekseni değerleri arasındaki ilişkinin ne kadar iyi olduğunu bilmektir, ilgisizse polinom回归不能用于预测任何东西。

Bu ilişki, r kare (r-squared) değeri ile ölçülür.

R kare değeri aralığı 0 ile 1 arasındadır, 0 ilgisiz demektir, 1 ise %100 ilgilidir.

Python ve Sklearn modülü bu değeri size hesaplayacak, yapmanız gereken sadece x ve y dizilerini girmektir:

Örnek

Verilerim polinom回归中的拟合 nasıl?

import numpy
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))

Çalıştırma Örneği

Açıklama:0.94 sonuçları, polinom回归在未来的预测中存在很好的关系,我们可以使用。

Gelecekteki değerleri tahmin etme

Şimdi, toplanan bilgileri kullanarak gelecekteki değerleri tahmin edebiliriz.

Örneğin: Gece 17 saatinde geçen otomobil hızını tahmin etmeye çalışalım:

Bu nedenle, yukarıdaki örnekle aynı mymodel Dizi:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Örnek

Öğleden sonra 17 saatinde aracın hızını tahmin et

import numpy
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
speed = mymodel(17)
print(speed)

Çalıştırma Örneği

Örnek tahmin hızı 88.87'dir ve bunu grafiğimizde de görebiliriz:


Kötü uyum?

Gelecekteki değerleri tahmin etmek için polinom回归最佳 yöntem olmayabilir.

Örnek

Bu x ve y eksenindeki değerler, polinomik geri kısımlamanın uyumluluğunu çok kötü hale getirir:

import numpy
import matplotlib.pyplot as plt
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]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(2, 95, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Sonuç:


Çalıştırma Örneği

r-squared değeri nedir?

Örnek

Çok düşük bir r-squared değeri almanız gerekiyor.

import numpy
from sklearn.metrics import r2_score
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]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))

Çalıştırma Örneği

Sonuç: 0.00995, ilişkinin çok kötü olduğunu ve bu veri kümesinin polinomik geri kısımlama için uygun olmadığını gösterir.