Výukový program Python

Python HOME Úvod do Pythonu Začínáme s Pythonem Syntaxe Pythonu Komentáře Pythonu Proměnné Pythonu Datové typy Pythonu Python čísla Python Casting Python řetězce Python Booleans Operátoři Pythonu Seznamy Pythonu Python n-tice Sady Pythonu Slovníky Pythonu Python If...Else Python While Loops Python pro smyčky Funkce Pythonu Python Lambda Pole Python Třídy/objekty Pythonu Dědičnost Pythonu Iterátory Pythonu Rozsah Pythonu Moduly Pythonu Data v Pythonu Matematika Pythonu Python JSON Python RegEx Python PIP Zkuste Python... Kromě Vstup uživatele Pythonu Formátování řetězců v Pythonu

Manipulace se soubory

Práce se soubory Python Soubory pro čtení Pythonu Python Zápis/Vytváření souborů Python mazat soubory

Moduly Pythonu

Výukový program NumPy Návod Panda Výukový program Scipy

Python Matplotlib

Úvod do Matplotlib Matplotlib Začínáme Matplotlib Pyplot Vykreslování Matplotlib Markery Matplotlib Linka Matplotlib Štítky Matplotlib Matplotlib Grid Matplotlib Subplots Matplotlib Scatter Bary Matplotlib Histogramy Matplotlib Koláčové grafy Matplotlib

Strojové učení

Začínáme Střední střední režim Standardní odchylka Percentil Distribuce dat Normální distribuce dat Bodový diagram Lineární regrese Polynomiální regrese Vícenásobná regrese Měřítko Vlak/test Rozhodovací strom

Python MySQL

MySQL Začínáme Vytvořit databázi MySQL Vytvořit tabulku MySQL Vložit MySQL Vyberte MySQL Kde MySQL Pořadí MySQL podle Smazat MySQL MySQL Drop Table Aktualizace MySQL Limit MySQL Připojte se k MySQL

Python MongoDB

MongoDB Začněte Vytvořit databázi MongoDB Vytvořit sbírku MongoDB Vložení MongoDB Najít MongoDB Dotaz MongoDB Řazení MongoDB Smazat MongoDB MongoDB Drop Collection Aktualizace MongoDB Limit MongoDB

Reference Pythonu

Přehled Pythonu Vestavěné funkce Pythonu Metody pythonských řetězců Metody seznamu v Pythonu Metody slovníku Python Metody Python Tuple Metody sady Python Metody souborů Python Klíčová slova Pythonu Výjimky v Pythonu Slovník Pythonu

Reference modulu

Náhodný modul Modul požadavků Modul statistiky Matematický modul cMath modul

Jak na to Python

Odebrat duplikáty seznamu Obrátit řetězec Přidejte dvě čísla

Příklady Pythonu

Příklady Pythonu Kompilátor Pythonu Cvičení Python Pythonský kvíz Python certifikát

Strojové učení – polynomiální regrese


Polynomiální regrese

Pokud vaše datové body zjevně nevyhovují lineární regresi (přímá čára přes všechny datové body), může být ideální pro polynomiální regresi.

Polynomiální regrese, stejně jako lineární regrese, používá vztah mezi proměnnými x a y k nalezení nejlepšího způsobu, jak nakreslit čáru přes datové body.


Jak to funguje?

Python má metody pro nalezení vztahu mezi datovými body a pro nakreslení čáry polynomiální regrese. Ukážeme vám, jak tyto metody používat místo procházení matematického vzorce.

V níže uvedeném příkladu jsme zaregistrovali 18 aut, která projížděla kolem určité mýtnice.

Zaznamenali jsme rychlost auta a denní dobu (hodinu), kdy došlo k předjetí.

Osa x představuje hodiny dne a osa y rychlost:

Příklad

Začněte kreslením bodového grafu:

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()

Výsledek:

Příklad

Importujte numpya matplotlibpoté nakreslete čáru polynomiální regrese:

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()

Výsledek:

Příklad vysvětlen

Importujte moduly, které potřebujete.

O modulu NumPy se můžete dozvědět v našem výukovém programu NumPy .

O modulu SciPy se můžete dozvědět v našem SciPy Tutoriálu .

import numpy
import matplotlib.pyplot as plt

Vytvořte pole, která představují hodnoty osy x a 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 má metodu, která nám umožňuje vytvořit polynomiální model:

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

Poté zadejte, jak se řádek zobrazí, začneme na pozici 1 a skončíme na pozici 22:

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

Nakreslete původní bodový graf:

plt.scatter(x, y)

Nakreslete čáru polynomiální regrese:

plt.plot(myline, mymodel(myline))

Zobrazit diagram:

plt.show()



R-squared

Je důležité vědět, jak dobrý je vztah mezi hodnotami osy x a y, pokud žádný vztah neexistuje, nelze polynomiální regresi použít k předpovědi čehokoli.

Vztah se měří hodnotou nazývanou r-squared.

Hodnota r na druhou se pohybuje od 0 do 1, kde 0 znamená žádný vztah a 1 znamená 100% související.

Python a modul Sklearn vám tuto hodnotu spočítají, vše, co musíte udělat, je zadat ji pomocí polí x a y:

Příklad

Jak dobře zapadají moje data do polynomiální regrese?

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)))

Poznámka: Výsledek 0,94 ukazuje, že existuje velmi dobrý vztah a v budoucích předpovědích můžeme použít polynomiální regresi.


Předvídat budoucí hodnoty

Nyní můžeme nashromážděné informace použít k předpovědi budoucích hodnot.

Příklad: Zkusme předpovědět rychlost auta, které kolem 17:00 projede kolem mýtnice:

K tomu potřebujeme stejné mymodelpole z výše uvedeného příkladu:

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

Příklad

Předpovězte rychlost projíždějícího auta v 17:00:

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)

Příklad předpověděl rychlost na 88,87, což jsme také mohli vyčíst z diagramu:


Špatná kondice?

Vytvořme příklad, kde by polynomiální regrese nebyla nejlepší metodou k předpovědi budoucích hodnot.

Příklad

Tyto hodnoty pro osu x a y by měly vést k velmi špatnému přizpůsobení pro polynomiální regresi:

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()

Výsledek:

A hodnota r na druhou?

Příklad

Měli byste získat velmi nízkou hodnotu r na druhou.

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)))

Výsledek: 0,00995 označuje velmi špatný vztah a říká nám, že tento soubor dat není vhodný pro polynomiální regresi.