Informatica

Primjer strojnog učenja s Pythonom: Jednostavna linearna regresija

U ovom primjeru strojnog učenja vidjet ćemo linearnu regresiju sa samo jednom ulaznom karakteristikom. Jednostavna linearna regresija.

Prije nego što nastavite, preporučujem vam da pročitate dva kratka članka, gdje ćete ih pronaći nekoliko definacije:

  1. Šta je mašinsko učenje, o čemu se radi i čiji su ciljevi
  2. Vrste mašinskog učenja

Pošto ćemo koristiti Python, ako ga još nemate na svom računaru, čitajte dalje Kako instalirati Python na Microsoft Windows

Za primjer, razmotrimo dvije Python liste: prva predstavlja ulazne vrijednosti (svojstvo), drugi izlazne vrijednosti (cilj).

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y = [28, 26, 35, 21, 33, 35, 41, 44, 42, 51]

Ove dvije liste mogu biti predstavljene na tačkicama

Dvije liste na grafikonu

Iz grafikona možemo vidjeti da tačke, iako nisu na istoj liniji, ipak imaju skoro linearnu distribuciju, od donje lijeve do gornje desne tačke. Raspodjela bodova na grafikonu može se identificirati kao trend lista koje su osnova modela na kojem će se temeljiti naša automatska mašina za učenje.

Model

Tako da možemo reći da ako je X raste, čak i Y raste, kao da su tačke oko zamišljene linije. Cilj regresije je upravo da identifikuje ovu liniju, ovu pravu liniju. Identifikacija ove linije bi nam pomogla da identifikujemo tačke Y za vrednosti X koje nisu prisutne na listi.

U stvari, mogli bismo se zapitati kako predvidjeti vrijednost Y za X koji nije uključen u slučajeve, koji nije uključen u dvije liste? U osnovi, kolika bi bila vrijednost Y da X vrijedi 11, 12 ili 13?

Linearna regresija izračunava liniju koja najbolje aproksimira tačke, odnosno liniju koja prolazi između tačaka, minimizirajući udaljenost od svake od njih. A pošto će nam jednostavna regresija dati ravnu liniju, očigledno je da predviđanje neće biti toliko tačno, ali ćemo i dalje moći da procenimo prihvatljiv nivo, veoma blizu Y.

Uradimo to sa scikit-learn:

# uvozimo model linearne regresije iz scikit-learn-a

uvoz numpy kao np

iz sklearn.linear_model import LinearRegression

# instanciramo model

model = Linearna regresija ()

# inicijaliziramo vrijednosti koje će nam trebati da uputimo mašinu

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y = [28, 26, 35, 21, 33, 35, 41, 44, 42, 51]

# strukturiramo podatke u dvodimenzionalnom obliku

X = np.array (x) .reshape (-1,1)

# obučavamo model

model.fit (X, y)

Rezultat dobiven iz Python koda je a obrazovani model. Objekt modela je instanciran klasom linearne regresije, a nakon pozivanja modela uklapanja, model je proučio podatke i spreman je za predviđanje.

Predviđanje

Da bismo imali predviđanje, moramo pozvati metod predviđanja, koji je odgovoran za predviđanje budućih scenarija. Dodajmo red

print (model.predict ([[11], [12], [13], [14]])))

kada ponovo pokrenemo program, dobićemo četiri predviđene vrednosti koje odgovaraju karakteristikama 11, 12, 13 i 14:

Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

[49.8 52.38181818 54.96363636 57.54545455]

Dakle, četiri vrijednosti dobijene u korespondenciji su:

  • 11 -> 49.8
  • 12 -> 52.38181818
  • 13 -> 54.96363636
  • 14 -> 57.54545455

Kao što vidimo, povećanje vrijednosti X odgovara rastućim vrijednostima Y, i to ima smisla. Hajde da pokušamo da vidimo šta se dešava na grafikonu

Crvena linija predstavlja rezultat regresije. Čini se da je linija geometrijska, a posebno linearna, interpretacija raspodjele tačaka. U osnovi, to je kao da kažemo da je model odabran za poboljšanje prognoze jednostavan i linearan model.

Možemo reći da predviđanje nije baš tačno, ali je interpretacija.

Kako procijeniti rezultate

Jednom kada se dobiju rezultati predviđanja, bit će važno uvijek znati kako procijeniti efikasnost modela. Da bismo to učinili moramo vidjeti metriku koja scikit-learn čini dostupnim u paketu sklearn.metrics.

Metrika se zasniva na konceptu ostatka, tj. koliko daleko linija odstupa od prave vrijednosti y za dati x. Praktično za svaku tačku udaljenost od prave linije same tačke.

Možemo izračunati ostatke tako što ćemo izračunati razliku između stvarne i predviđene vrijednosti, možemo to učiniti za karakteristike od 1 do 10:

# izračunaj predviđanja za x vrijednosti od 1 do 10

y_pred = model.predict (X)

print (y_pred)

# izračunati ostatke

ostaci = y - y_pred

print (ostaci)

kao rezultat dobijam predviđanja

[23.98181818 26.56363636 29.14545455 31.72727273 34.30909091 36.89090909 39.47272727 42.05454545 44.63636364 47.21818182 XNUMX

i ostaci
[4.01818182 -0.56363636 5.85454545 -10.72727273 -1.30909091 -1.89090909 1.52727273 1.94545455 -2.63636364]

Svaka od ovih vrijednosti mjeri koliko je linija prošla od tačke na grafikonu. Pozivaju se tačke sa većim reziduom outliers, odnosno vrijednosti najmanje usklađene s općim trendom (na primjer kvartal -10.72). Druga vrijednost je -0.56 i stoga je vrlo u skladu sa općim trendom.

The Metrics

Za linearnu regresiju postoje vrlo važne metrike koje scikit-learn čini dostupnim, pogledajmo neke od njih:

  • Srednja apsolutna greška: sastoji se od prosjeka apsolutnih vrijednosti reziduala. Konceptualno mjeri udaljenost svake tačke od prave. Jednostavan i konkretan, mjeri se apsolutnim vrijednostima jer mjeri udaljenost, a ne poziciju iznad ili ispod linije. Nadalje, apsolutna vrijednost nas uvjerava da se suprotne vrijednosti ne poništavaju jedna drugu. MAE vrijednost može biti veća ili jednaka nuli, a što je bliže nuli, to je bolja prognoza;
  • Srednja kvadratna greška: sastoji se od prosjeka kvadrata apsolutnih vrijednosti reziduala, kao što je MAE ali kvadrata. Vrijednost MSE je veća ili jednaka nuli, a što je bliže nuli, to je predviđanje bolje;
  • R kvadrat: malo komplikovaniji od prethodnih, ali možemo reći da povezuje greške napravljene tokom faze predviđanja sa varijansom samih podataka. Vrijednost R kvadrata je uvijek manja ili jednaka 1, uz mogućnost negativnih vrijednosti. Ako je R kvadrat jednak 1, to znači da model dobro tumači trend, na nuli performanse su neutralne. Ako R kvadrat ima negativnu vrijednost, to znači da model nije dobro funkcionirao.

Funkcije scikit-learn koje poboljšavaju tri indikatora su:

  • mean_apsolute_error po MFA
  • mean_squared_error po MSE
  • r2_score po R kvadrat

primjenjujući ih na naš primjer dobijamo sljedeće vrijednosti:

MAE = 3.4254545454545466
MSE = 19.847272727272724
R2 = 0.7348039453865216

iz sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

print (srednja_apsolutna_greška (y, y_pred))

ispis (srednja_kvadratna_greška (y, y_pred))

print (r2_score (y, y_pred))

Ercole Palmeri: Ovisnik o inovacijama


Inovacijski bilten
Ne propustite najvažnije vijesti o inovacijama. Prijavite se da ih primate putem e-pošte.

Nedavni članak

Online plaćanja: Evo kako vas usluge striminga čine da plaćate zauvijek

Milioni ljudi plaćaju usluge striminga, plaćajući mjesečne pretplate. Uvriježeno je mišljenje da vi…

29 april 2024

Veeam nudi najsveobuhvatniju podršku za ransomware, od zaštite do odgovora i oporavka

Coveware od strane Veeam-a će nastaviti da pruža usluge odgovora na incidente u slučaju sajber iznude. Coveware će ponuditi mogućnosti forenzike i sanacije…

23 april 2024

Zelena i digitalna revolucija: Kako prediktivno održavanje transformira industriju nafte i plina

Prediktivno održavanje revolucionira sektor nafte i plina, s inovativnim i proaktivnim pristupom upravljanju postrojenjima.…

22 april 2024

Britanski antimonopolski regulator podigao je BigTech uzbunu zbog GenAI

UK CMA izdao je upozorenje o ponašanju Big Tech-a na tržištu umjetne inteligencije. Tamo…

18 april 2024