Python -zelfstudie

Python HOME Python-intro Python Aan de slag Python-syntaxis Python-opmerkingen Python-variabelen Python-gegevenstypen Python-nummers Python-casting Python-snaren Python Booleans Python-operators Python-lijsten Python-tupels Python-sets Python-woordenboeken Python Als...Anders Python While-lussen Python voor lussen Python-functies Python Lambda Python-arrays Python-klassen/objecten Python-overerving Python-iterators Python-bereik Python-modules Python-datums Python-wiskunde Python JSON Python RegEx Python PIP Python proberen...Behalve Python-gebruikersinvoer Opmaak van Python-tekenreeksen

Bestandsbehandeling

Python-bestandsafhandeling Python-bestanden lezen Python bestanden schrijven/maken Python bestanden verwijderen

Python-modules

NumPy-zelfstudie Panda walkthrough Scipy-zelfstudie

Python Matplotlib

Matplotlib Intro Matplotlib Aan de slag Matplotlib Pyplot Matplotlib plotten Matplotlib-markeringen Matplotlib-lijn Matplotlib-labels Matplotlib-raster Matplotlib-subplots Matplotlib Scatter Matplotlib-repen Matplotlib-histogrammen Matplotlib-cirkeldiagrammen

Machinaal leren

Beginnen Gemiddelde mediane modus Standaardafwijking percentiel Gegevensdistributie Normale gegevensverdeling Scatterplot Lineaire regressie Polynomiale regressie Meervoudige regressie Schaal Trein/Test Beslissingsboom

Python MySQL

MySQL Aan de slag MySQL Database maken MySQL-tabel maken MySQL-invoeging MySQL Select MySQL Waar MySQL Bestel op MySQL verwijderen MySQL-droptabel MySQL-update MySQL-limiet MySQL Join

Python MongoDB

MongoDB Aan de slag MongoDB Database maken MongoDB Verzameling maken MongoDB invoegen MongoDB Zoeken MongoDB-query MongoDB Sorteren MongoDB verwijderen MongoDB Drop-collectie MongoDB-update MongoDB-limiet

Python-referentie

Python-overzicht Ingebouwde functies van Python Python-stringmethoden Methoden voor Python-lijst Python-woordenboekmethoden Python Tuple-methoden Methoden voor Python-sets Python-bestandsmethoden Python-trefwoorden Python-uitzonderingen Python-woordenlijst

Modulereferentie

Willekeurige module Verzoekmodule Statistiekmodule Wiskundige module cMath-module

Python-instructies

Lijstduplicaten verwijderen Een string omkeren Voeg twee nummers toe

Python-voorbeelden

Python-voorbeelden Python-compiler Python-oefeningen Python-quiz Python-certificaat

Machine learning - lineaire regressie


regressie

De term regressie wordt gebruikt wanneer u de relatie tussen variabelen probeert te vinden.

In Machine Learning en in statistische modellering wordt die relatie gebruikt om de uitkomst van toekomstige gebeurtenissen te voorspellen.


Lineaire regressie

Lineaire regressie gebruikt de relatie tussen de datapunten om er een rechte lijn door te trekken.

Deze lijn kan worden gebruikt om toekomstige waarden te voorspellen.

Bij Machine Learning is het voorspellen van de toekomst erg belangrijk.


Hoe werkt het?

Python heeft methoden om een ​​relatie tussen datapunten te vinden en om een ​​lijn van lineaire regressie te tekenen. We laten u zien hoe u deze methoden kunt gebruiken in plaats van de wiskundige formule te doorlopen.

In het onderstaande voorbeeld staat de x-as voor de leeftijd en de y-as voor de snelheid. We hebben de leeftijd en snelheid van 13 auto's geregistreerd toen ze een tolhuisje passeerden. Laten we eens kijken of de gegevens die we hebben verzameld, kunnen worden gebruikt in een lineaire regressie:

Voorbeeld

Begin met het tekenen van een spreidingsplot:

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

Resultaat:

Voorbeeld

Importeer scipyen teken de lijn van lineaire regressie:

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

Resultaat:

Voorbeeld uitgelegd

Importeer de modules die je nodig hebt.

U kunt meer te weten komen over de Matplotlib-module in onze Matplotlib-zelfstudie .

U kunt meer te weten komen over de SciPy-module in onze SciPy-zelfstudie .

import matplotlib.pyplot as plt
from scipy import stats

Maak de arrays die de waarden van de x- en y-as vertegenwoordigen:

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]

Voer een methode uit die enkele belangrijke sleutelwaarden van lineaire regressie retourneert:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Maak een functie die de waarden slopeen gebruikt interceptom een ​​nieuwe waarde te retourneren. Deze nieuwe waarde geeft aan waar op de y-as de corresponderende x-waarde wordt geplaatst:

def myfunc(x):
  return slope * x + intercept

Voer elke waarde van de x-array door de functie. Dit resulteert in een nieuwe array met nieuwe waarden voor de y-as:

mymodel = list(map(myfunc, x))

Teken de originele scatterplot:

plt.scatter(x, y)

Teken de lijn van lineaire regressie:

plt.plot(x, mymodel)

Geef het diagram weer:

plt.show()



R voor Relatie

Het is belangrijk om te weten hoe de relatie tussen de waarden van de x-as en de waarden van de y-as is, als er geen relatie is kan de lineaire regressie niet gebruikt worden om iets te voorspellen.

Deze relatie - de correlatiecoëfficiënt - wordt genoemd r.

De rwaarde varieert van -1 tot 1, waarbij 0 betekent dat er geen verband is en 1 (en -1) 100% gerelateerd betekent.

Python en de Scipy-module zullen deze waarde voor je berekenen, het enige wat je hoeft te doen is hem te voeden met de x- en y-waarden.

Voorbeeld

Hoe goed passen mijn gegevens in een lineaire regressie?

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)

Opmerking: het resultaat -0,76 laat zien dat er een relatie is, niet perfect, maar het geeft aan dat we lineaire regressie kunnen gebruiken in toekomstige voorspellingen.


Toekomstige waarden voorspellen

Nu kunnen we de informatie die we hebben verzameld gebruiken om toekomstige waarden te voorspellen.

Voorbeeld: Laten we proberen de snelheid van een auto van 10 jaar oud te voorspellen.

Om dit te doen, hebben we dezelfde myfunc()functie uit het bovenstaande voorbeeld nodig:

def myfunc(x):
  return slope * x + intercept

Voorbeeld

Voorspel de snelheid van een auto van 10 jaar oud:

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)

Het voorbeeld voorspelde een snelheid van 85,6, wat we ook uit het diagram konden aflezen:


Slechte pasvorm?

Laten we een voorbeeld maken waarin lineaire regressie niet de beste methode zou zijn om toekomstige waarden te voorspellen.

Voorbeeld

Deze waarden voor de x- en y-as zouden moeten resulteren in een zeer slechte pasvorm voor lineaire regressie:

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

Resultaat:

En de rvoor relatie?

Voorbeeld

Je zou een zeer lage rwaarde moeten krijgen.

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)

Het resultaat: 0,013 geeft een zeer slechte relatie aan en vertelt ons dat deze dataset niet geschikt is voor lineaire regressie.