Čo ak sú vaše údaje v skutočnosti zložitejšie ako jednoduchá priamka? Prekvapivo môžete použiť lineárny model na prispôsobenie nelineárnych údajov. Jednoduchý spôsob, ako to urobiť, je pridať výkony každej funkcie ako nové funkcie a potom trénovať lineárny model na tejto rozšírenej množine funkcií. Táto technika sa nazýva polynomiálna regresia.

Polynomiálna regresia je regresný algoritmus, ktorý modeluje vzťah medzi závislou (y) a nezávislou premennou (x) ako polynóm n-tého stupňa. Rovnica polynómovej regresie je uvedená nižšie:

\(y= β_0+β_1x_1^1+ β_2x_1^2+ β_3x_1^3+...... β_nx_1^n\)

Nazýva sa to aj špeciálny prípad viacnásobnej lineárnej regresie v ML. Pretože do rovnice viacnásobnej lineárnej regresie pridáme niekoľko polynomiálnych členov, aby sme ju previedli na polynomiálnu regresiu.

Ide o lineárny model s určitými úpravami za účelom zvýšenia presnosti.

Súbor údajov použitý v polynómovej regresii na trénovanie má nelineárny charakter.

Využíva lineárny regresný model na prispôsobenie komplikovaných a nelineárnych funkcií a súborov údajov.

Preto "Pri polynomiálnej regresii sa pôvodné prvky prevedú na polynomiálne prvky požadovaného stupňa (2,3,..,n) a potom sa modelujú pomocou lineárneho modelu."

Potrebu polynomiálnej regresie v ML možno pochopiť v nasledujúcich bodoch:

  • Ak použijeme lineárny model na lineárny súbor údajov, potom nám to poskytne dobrý výsledok, ako sme videli v jednoduchej lineárnej regresii, ale ak použijeme rovnaký model bez akejkoľvek úpravy na nelineárny súbor údajov, potom to vytvorí drastický výstup. Vďaka tomu sa stratová funkcia zvýši, chybovosť bude vysoká a presnosť sa zníži.
  • Takže pre takéto prípady, kde sú dátové body usporiadané nelineárnym spôsobom, potrebujeme model polynómovej regresie. Môžeme to lepšie pochopiť pomocou nižšie uvedeného porovnávacieho diagramu lineárneho súboru údajov a nelineárneho súboru údajov.

  • Na obrázku vyššie sme vzali súbor údajov, ktorý je usporiadaný nelineárne. Ak sa to teda pokúsime pokryť lineárnym modelom, potom môžeme jasne vidieť, že nepokrýva takmer žiadny dátový bod. Na druhej strane je krivka vhodná na pokrytie väčšiny dátových bodov, čo je z polynomiálneho modelu.
  • Ak sú teda súbory údajov usporiadané nelineárnym spôsobom, mali by sme namiesto jednoduchej lineárnej regresie použiť model polynómovej regresie.

Poznámka: Algoritmus polynomiálnej regresie sa nazýva aj polynomiálna lineárna regresia, pretože nezávisí od premenných, ale závisí od koeficientov, ktoré sú usporiadané lineárne.

Simple Linear Regression equation

\(y= β_0+β_1x_1\) 

Multiple Linear Regression equation

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

Polynomial Regression equation \(y= β_0+β_1x_1^1 + β_2x_1^2 +...... β_nx_1^n\) 

Implementácia polynómovej regresie pomocou Pythonu:

Tu implementujeme polynomiálnu regresiu pomocou Pythonu. Pochopíme to porovnaním modelu polynomiálnej regresie s modelom jednoduchej lineárnej regresie. Najprv teda pochopme problém, pre ktorý budeme model stavať.

Popis problému: Existuje spoločnosť zaoberajúca sa ľudskými zdrojmi, ktorá sa chystá prijať nového kandidáta. Kandidát uviedol svoj predchádzajúci plat 160 tisíc ročne a HR musí skontrolovať, či hovorí pravdu alebo blafuje. Aby to identifikovali, majú iba súbor údajov o jeho predchádzajúcej spoločnosti, v ktorom sú uvedené platy 10 najlepších pozícií s ich úrovňami. Kontrolou dostupného súboru údajov sme zistili, že existuje nelineárny vzťah medzi úrovňami pozícií a platmi. Naším cieľom je vybudovať regresný model Bluffing detektora , aby HR mohlo zamestnať poctivého kandidáta. Nižšie sú uvedené kroky na vytvorenie takéhoto modelu.

Kroky pre polynomiálnu regresiu:

Hlavné kroky zahrnuté v polynomiálnej regresii sú uvedené nižšie:

  • Predbežné spracovanie údajov
  • Vytvorenie modelu lineárnej regresie a jeho prispôsobenie množine údajov
  • Vytvorenie modelu polynomiálnej regresie a jeho prispôsobenie množine údajov
  • Vizualizujte výsledok pre model lineárnej regresie a polynómovej regresie.
  • Predpovedanie výstupu.

Krok predbežného spracovania údajov:

Krok predbežného spracovania údajov zostane rovnaký ako v predchádzajúcich regresných modeloch, s výnimkou niektorých zmien. V modeli polynomiálnej regresie nebudeme používať škálovanie funkcií a tiež nebudeme rozdeľovať našu množinu údajov na trénovaciu a testovaciu množinu. Má dva dôvody:

  • Dataset obsahuje veľmi menej informácií, ktoré nie sú vhodné na rozdelenie do testovacieho a tréningového súboru, inak náš model nebude schopný nájsť korelácie medzi platmi a úrovňami.
  • V tomto modeli chceme veľmi presné predpovede platu, takže model by mal mať dostatok informácií.

Kód pre krok predbežného spracovania je uvedený nižšie:

# Import knižníc    
import numpy as nm  
import matplotlib.pyplot as mtp  
import pandas as pd  
  
# importing množiny údajov  
data_set= pd.read_csv('Position_Salaries.csv')  
  
# Extracting Nezávislá a závislá premenná
x= data_set.iloc[:, 1:2].values  
y= data_set.iloc[:, 2].values  

Vytvorenie lineárneho regresného modelu:

Teraz vytvoríme a prispôsobíme lineárny regresný model množine údajov. Pri vytváraní polynómovej regresie vezmeme ako referenciu lineárny regresný model a porovnáme oba výsledky. Kód je uvedený nižšie:

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

Vo vyššie uvedenom kóde sme vytvorili model Simple Linear pomocou lin_regs objektu triedy LinearRegression a prispôsobili ho premenným množiny údajov (x a y).

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

Vytvorenie polynomiálneho regresného modelu:

Teraz vytvoríme model polynomiálnej regresie, ale bude sa trochu líšiť od jednoduchého lineárneho modelu. Pretože tu použijeme  triedu PolynomialFeatures knižnice predspracovania. Túto triedu používame na pridanie niektorých ďalších funkcií do našej množiny údajov.

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

Vo vyššie uvedených riadkoch kódu sme použili poly_regs.fit_transform(x), pretože najprv konvertujeme našu charakteristickú maticu na polynomiálnu vlastnostnú maticu a potom ju prispôsobujeme polynomiálnemu regresnému modelu. Hodnota parametra (degree= 2) závisí od nášho výberu. Môžeme si ho vybrať podľa našich polynomiálnych vlastností.

Po vykonaní kódu dostaneme ďalší maticový x_poly, ktorý je možné vidieť pod možnosťou prieskumníka premenných:

Ďalej sme použili ďalší objekt lineárnej regresie, a to lin_reg_2, aby sme prispôsobili náš x_poly vektor lineárnemu modelu.

Output:

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

Vizualizácia výsledku pre lineárnu regresiu:

Teraz vizualizujeme výsledok pre lineárny regresný model, ako sme to urobili v jednoduchej lineárnej regresii. Nižšie je uvedený kód:

# Visulaizing výsledku pre model lineárnej regresie
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 vyššie uvedenom výstupnom obrázku môžeme jasne vidieť, že regresná čiara je tak ďaleko od súborov údajov. Predpovede sú v červenej priamke a modré body sú skutočné hodnoty. Ak tento výstup vezmeme do úvahy pri predpovedaní hodnoty CEO, poskytne plat cca. 600000$, čo je ďaleko od skutočnej hodnoty.

Potrebujeme teda zakrivený model, aby sa zmestil do súboru údajov aj iný ako priamka.

Vizualizácia výsledku pre polynomiálnu regresiu

Tu si predstavíme výsledok polynomiálneho regresného modelu, ktorého kód sa od vyššie uvedeného modelu líši len málo.

Kód je uvedený nižšie:

# Visulaizing výsledok pre polynómovú regresiu 
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()  

Vo vyššie uvedenom kóde sme namiesto x_poly vzali lin_reg_2.predict(poly_regs.fit_transform(x), pretože chceme, aby lineárny regresorový objekt predpovedal maticu polynómových vlastností.

Ako môžeme vidieť na vyššie uvedenom výstupnom obrázku, predpovede sú blízke skutočným hodnotám. Vyššie uvedený graf sa bude líšiť, pretože budeme meniť stupeň.

Pre stupeň= 3:

Ak zmeníme stupeň = 3, poskytneme presnejší graf, ako je znázornené na obrázku nižšie.

Takže, ako môžeme vidieť na vyššie uvedenom výstupnom obrázku, predpokladaný plat pre úroveň 6,5 sa blíži k 170 tisíc až 190 tisíc dolárov, čo sa zdá, že budúci zamestnanec hovorí pravdu o svojom plate.

Degree= 4: Zmeňme opäť stupeň na 4 a teraz dostaneme najpresnejší graf. Preto môžeme získať presnejšie výsledky zvýšením stupňa polynómu.

Predpovedanie konečného výsledku pomocou modelu lineárnej regresie:

Teraz predpovedáme konečný výstup pomocou lineárneho regresného modelu, aby sme zistili, či zamestnanec hovorí pravdu alebo blafuje. Na tento účel teda použijeme metódu predict() a odovzdáme hodnotu 6,5. Nižšie je uvedený kód:

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

Output:

[330378.78787879]

Predpovedanie konečného výsledku pomocou modelu polynómovej regresie:

Teraz predpovedáme konečný výstup pomocou modelu polynomiálnej regresie na porovnanie s lineárnym modelom. Nižšie je uvedený kód:

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

Output:

[158862.45265153]

Ako vidíme, predpokladaný výstup pre polynomiálnu regresiu je [158862.45265153], čo je oveľa bližšie k reálnej hodnote, preto môžeme povedať, že budúci zamestnanec hovorí pravdu.

Last modified: Sunday, 23 March 2025, 7:18 AM