Šta ako su vaši podaci zapravo složeniji od jednostavne prave linije? Iznenađujuće, zapravo možete koristiti linearni model da biste se uklopili u nelinearne podatke. Jednostavan način da to uradite je da dodate ovlašćenja svake funkcije kao nove funkcije, a zatim trenirate linearni model na ovom proširenom skupu funkcija. Ova tehnika se zove polinomijalna regresija.

Polinomijalna regresija je regresijski algoritam koji modelira odnos između zavisne (i) i nezavisne varijable (k) kao n-tog stepena polinoma. Jednačina polinomske regresije je data u nastavku:

$$y= \beta_0+β_1x_1^1+ β_2x_1^2+ β_3x_1^3+...... β_nx_1^n$$

Takođe se naziva posebnim slučajem višestruke linearne regresije u ML. Zato što dodajemo neke polinomske termine u višestruku linearnu regresijsku jednačinu da bismo je pretvorili u polinomnu regresiju.

To je linearni model sa nekim modifikacijama kako bi se povećala tačnost.

Skup podataka koji se koristi u polinomskoj regresiji za obuku je nelinearne prirode.

Koristi linearni regresijski model kako bi se uklopio u komplikovane i nelinearne funkcije i skupove podataka.

Dakle, "U polinomijalnoj regresiji, originalne karakteristike se pretvaraju u polinomne karakteristike potrebnog stepena (2,3,..,n), a zatim se modeliraju pomoću linearnog modela."

Potreba polinomske regresije u ML može se razumeti u sledećim tačkama:

  • Ako primenimo linearni model na linearni skup podataka, onda nam daje dobar rezultat kao što smo videli u jednostavnoj linearnoj regresiji, ali ako primenjujemo isti model bez ikakvih modifikacija na nelinearnom skupu podataka, onda će proizvesti drastičan izlaz. Zbog čega će se funkcija gubitka povećati, stopa grešaka će biti visoka, a tačnost će se smanjiti.
  • Dakle, za takve slučajeve, gde su tačke podataka raspoređene na nelinearan način, potreban nam je model polinomske regresije. Možemo ga razumeti na bolji način koristeći dijagram poređenja ispod linearnog skupa podataka i nelinearnog skupa podataka.

  • Na gornjoj slici uzeli smo skup podataka koji je raspoređen nelinearno. Dakle, ako pokušamo da ga pokrijemo linearnim modelom, onda možemo jasno videti da jedva pokriva bilo koju tačku podataka. S druge strane, kriva je pogodna da pokrije većinu tačaka podataka, što je polinomijalni model.
  • Stoga, ako su skupovi podataka raspoređeni na nelinearan način, onda bi trebalo da koristimo model polinomske regresije umesto jednostavne linearne regresije.

Napomena: Algoritam polinomne regresije se takođe naziva polinomna linearna regresija jer ne zavisi od varijabli, već zavisi od koeficijenata, koji su raspoređeni linearno.


Jednostavna linearna regresijska jednačina

\(y= β_0+β_1x_1\) 

Višestruka linearna regresijska jednačina

\(y= β_0+β_1x_1 + β_2x_2 + +...... β_nx_n\) 

Polinomijalna regresijska jednačina \(y= β_0+β_1x_1^1 + β_2x_1^2 +...... β_nx_1^n\) 

Implementacija polinomske regresije pomoću Pithona:

Ovde ćemo implementirati polinomsku regresiju koristeći Pithon. Mi ćemo to razumeti upoređivanjem modela polinomske regresije sa modelom jednostavne linearne regresije. Dakle, prvo, hajde da shvatimo problem za koji ćemo izgraditi model.

Opis problema: Postoji kompanija za ljudske resurse, koja će zaposliti novog kandidata. Kandidat je rekao svoju prethodnu platu 160K godišnje, a HR mora da proveri da li govori istinu ili blefira. Dakle, da bi to identifikovali, oni imaju samo skup podataka njegove prethodne kompanije u kojoj se pominju plate prvih 10 pozicija sa njihovim nivoima. Proverom dostupnog skupa podataka, otkrili smo da postoji nelinearna veza između nivoa pozicije i plata. Naš cilj je da izgradimo  model regresije detektora blefiranja, tako da HR može zaposliti poštenog kandidata. U nastavku su navedeni koraci za izgradnju takvog modela.

Koraci za polinomijalnu regresiju:

Glavni koraci uključeni u polinomijalnu regresiju su dati u nastavku:

  • Predobrada podataka
  • Izgradite model linearne regresije i uklopite ga u skup podataka
  • Izgradite model polinomske regresije i prilagodite ga skupu podataka
  • Vizuelizujte rezultat za model linearne regresije i polinomne regresije.
  • Predviđanje izlaza.

Korak pre-obrade podataka:

Korak predobrade podataka će ostati isti kao u prethodnim regresijskim modelima, osim nekih promena. U modelu polinomske regresije nećemo koristiti skaliranje funkcija, a takođe nećemo podeliti naš skup podataka u skup za obuku i testiranje. Ima dva razloga:

  • Skup podataka sadrži vrlo manje informacija koje nisu pogodne za podelu u skup testova i obuke, inače naš model neće moći da pronađe korelacije između plata i nivoa.
  • U ovom modelu želimo vrlo precizna predviđanja za platu, tako da model treba da ima dovoljno informacija.

Kod po korak pre obrade je dat u nastavku:

# importing libraries  
import numpy as nm  
import matplotlib.pyplot as mtp  
import pandas as pd  
  
#importing datasets  
data_set= pd.read_csv('Position_Salaries.csv')  
  
#Extracting Independent and dependent Variable  
x= data_set.iloc[:, 1:2].values  
y= data_set.iloc[:, 2].values  

Kreiranje linearnog regresijskog modela:

Sada ćemo izgraditi i uklopiti model linearne regresije u skup podataka. U izgradnji polinomske regresije, uzećemo model linearne regresije kao referencu i uporediti oba rezultata. Kod je dat ispod:

#Fitting the Linear Regression to the dataset  
from sklearn.linear_model import LinearRegression  
lin_regs= LinearRegression()  
lin_regs.fit(x,y)  

U gornjem kodu, kreirali smo Simple Linear model koristeći lin_regs objekat klase LinearRegression i uklopili ga u promenljive skupa podataka (x i y).

Output: 
Out[5]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
 

Kreiranje modela polinomske regresije:

Sada ćemo izgraditi model polinomske regresije, ali će biti malo drugačiji od jednostavnog linearnog modela. Jer ovde ćemo koristiti PolinomialFeatures klasu preprocesiranje biblioteke. Koristimo ovu klasu da dodamo neke dodatne funkcije našem skupu podataka.

#Fitting the Polynomial regression to the dataset  
from sklearn.preprocessing import PolynomialFeatures  
poly_regs= PolynomialFeatures(degree= 2)  
x_poly= poly_regs.fit_transform(x)  
lin_reg_2 =LinearRegression()  
lin_reg_2.fit(x_poly, y)  

U gornjim linijama koda, koristili smo poly_regs.fit_transform(x), jer prvo pretvaramo našu matricu karakteristika u matricu polinomnih karakteristika, a zatim je uklapamo u model polinomske regresije. Vrednost parametra (stepen = 2) zavisi od našeg izbora. Možemo ga izabrati u skladu sa našim polinomskim karakteristikama.

Nakon izvršenja koda, dobićemo još jedan matrični x_poly, koji se može videti pod varijabilnom opcijom istraživača:

Zatim smo koristili još jedan LinearRegression objekat, naime lin_reg_2, kako bismo uklopili naš x_poly vektor u linearni model.

Izlaz:

Out[11]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)

Vizualizacija rezultata za linearnu regresiju:

Sada ćemo vizualizovati rezultat za model linearne regresije kao što smo uradili u jednostavnoj linearnoj regresiji. Ispod je kod za to:

#Visulaizing the result for Linear Regression model  
mtp.scatter(x,y,color="blue")  
mtp.plot(x,lin_regs.predict(x), color="red")  
mtp.title("Bluff detection model(Linear Regression)")  
mtp.xlabel("Position Levels")  
mtp.ylabel("Salary")  
mtp.show()  

Na gornjoj izlaznoj slici možemo jasno videti da je regresijska linija toliko daleko od skupova podataka. Predviđanja su u crvenoj pravoj liniji, a plave tačke su stvarne vrednosti. Ako uzmemo u obzir ovaj izlaz da predvidi vrednost generalnog direktora, to će dati platu od cca. 600000 $, što je daleko od stvarne vrednosti.

Dakle, potreban nam je zakrivljeni model koji bi se uklopio u skup podataka osim prave linije.

Vizualizacija rezultata za polinomijalnu regresiju

Ovde ćemo vizualizovati rezultat polinomijalnog regresijskog modela, kod za koji se malo razlikuje od gore navedenog modela.

#Visulaizing the result for Polynomial Regression  
mtp.scatter(x,y,color="blue")  
mtp.plot(x, lin_reg_2.predict(poly_regs.fit_transform(x)), color="red")  
mtp.title("Bluff detection model(Polynomial Regression)")  
mtp.xlabel("Position Levels")  
mtp.ylabel("Salary")  
mtp.show()  

U gornjem kodu, uzeli smo lin_reg_2.predict(poly_regs.fit_transform(x), umesto x_poly, jer želimo objekat linearnog regresora da predvidi matricu polinomskih karakteristika.

Kao što možemo videti na gornjoj izlaznoj slici, predviđanja su blizu stvarnim vrednostima. Gornji zaplet će se razlikovati jer ćemo promeniti stepen.

Za stepen = 3:

Ako promenimo stepen = 3, onda ćemo dati tačniji zaplet, kao što je prikazano na slici ispod.

Dakle, kao što možemo videti ovde na gornjoj izlaznoj slici, predviđena plata za nivo 6.5 je blizu 170K$-190k$, što izgleda da budući zaposleni govori istinu o svojoj plati.

Stepen = 4: Hajde da ponovo promenimo stepen u 4, i sada ćemo dobiti najtačniji zaplet. Stoga možemo dobiti preciznije rezultate povećanjem stepena polinoma.

Predviđanje konačnog rezultata sa modelom linearne regresije:

Sada ćemo predvideti konačni izlaz koristeći model linearne regresije da vidimo da li zaposleni govori istinu ili blef. Dakle, za ovo, mi ćemo koristiti metod predict() i da će proći vrednost 6.5. Ispod je kod za to:

lin_pred = lin_regs.predict([[6.5]])  
print(lin_pred)

Izlaz:

[330378.78787879]

Predviđanje konačnog rezultata sa modelom polinomske regresije:

Sada ćemo predvideti konačni izlaz koristeći model polinomske regresije za poređenje sa linearnim modelom. Ispod je kod za to:

poly_pred = lin_reg_2.predict(poly_regs.fit_transform([[6.5]]))  
print(poly_pred)  

Izlaz:

[158862.45265153]

Kao što vidimo, predviđeni izlaz za polinomnu regresiju je [158862.45265153], što je mnogo bliže realnoj vrednosti - dakle, možemo reći da budući zaposleni kaže istina.

Last modified: Sunday, 22 June 2025, 10:28 AM