Polynomial regression w uczeniu maszynowym
- Poprzednia strona Regresja liniowa
- Następna strona Wielokrotne regresje
多项式回归(Polynomial Regression)
Jeśli Twoje punkty danych显然不适合线性回归(穿过数据点之间的直线),那么多项式回归可能是理想的选择。
Jak liniowa regresja, wielokrotna regresja używa związku między zmiennymi x i y, aby znaleźć najlepszy sposób rysowania linii danych punktów.

Działanie
Python ma kilka metod znalezienia związku między punktami danych i rysowania linii wielokrotnej regresji. Pokażemy Ci, jak używać tych metod zamiast wzorów matematycznych.
W poniższym przykładzie zarejestrowaliśmy 18 aut przejeżdżających przez określoną stację poboru opłat.
Zarejestrowaliśmy prędkość aut i czas przejazdu (godziny).
Oś x reprezentuje godzinę dnia, a oś y prędkość:
Przykład
Najpierw narysuj wykres punktów:
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()
Wynik:

Przykład
załaduj numpy
i matplotlib
i następnie narysuj linię wielokrotnej regresji:
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()
Wynik:

Przykład wyjaśnienie
Załaduj wymagane moduły:
import numpy import matplotlib.pyplot as plt
Stwórz tablicę reprezentującą wartości osi x i y:
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 ma metodę, która pozwala nam tworzyć modele wielokrotne:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Następnie określ sposób wyświetlania wierszy, zaczynamy od pozycji 1 do pozycji 22:
myline = numpy.linspace(1, 22, 100)
Narysuj oryginalny wykres punktów:
plt.scatter(x, y)
Narysuj linię wielokrotnej regresji:
plt.plot(myline, mymodel(myline))
Pokazuj wykres:
plt.show()
R-Squared
Ważne jest, aby wiedzieć, jak dobrze są ze sobą związane wartości osi x i y, ponieważ bez związku wielokrotna regresja nie może być użyta do przewidywania żadnych wartości.
Związek ten jest mierzony wartością nazywaną r kwadrat (r-squared).
Zakres wartości r kwadratowych wynosi od 0 do 1, gdzie 0 oznacza brak korelacji, a 1 oznacza 100% korelacji.
Python i moduł Sklearn obliczą dla Ciebie tę wartość, wszystko, co musisz zrobić, to wprowadzić tablice x i y:
Przykład
Jakie jest dopasowanie moich danych w wielokrotnej regresji?
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)))
Komentarz:Wynik 0.94 wskazuje na dobrą relację, którą możemy użyć w przyszłych przewidywaniach wielokrotnej regresji.
Przewidywanie przyszłych wartości
Teraz możemy użyć zebranych informacji do przewidywania przyszłych wartości.
Na przykład: spróbujmy przewidzieć prędkość aut przejeżdżających przez stację poboru opłat około 17:00 wieczorem:
Dla tego potrzebujemy takiego samego przykładu jak wyżej: mymodel Tablica:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Przykład
Przewiduj prędkość aut przejeżdżających o 17:00 popołudnia:
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)
Prędkość przewidywania wynosi 88.87, co również widać na rysunku:

Zła dopasowanie?
Pozwólmy stworzyć przykład, w którym wielokrotne regresja nie jest najlepszym sposobem przewidywania przyszłych wartości.
Przykład
Te wartości osi x i y będą powodować bardzo słabą dopasowanie regresji wielokrotnej:
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()
Wynik:

Czym jest wartość r-squared?
Przykład
Powinieneś uzyskać bardzo niską wartość r-squared.
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)))
Wynik: 0.00995 oznacza bardzo słabe związki i informuje nas, że ten zestaw danych nie jest odpowiedni dla regresji wielokrotnej.
- Poprzednia strona Regresja liniowa
- Następna strona Wielokrotne regresje