Makine Öğrenimi - Polinom Geri Bildirim
- Önceki Sayfa Doğrusal Geri Kısmalı
- Sonraki Sayfa Çoklu Geri Kısmalı
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ç:

Ö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ç:

Ö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)))
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)
Ö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ç:

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)))
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.
- Önceki Sayfa Doğrusal Geri Kısmalı
- Sonraki Sayfa Çoklu Geri Kısmalı