Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Polynomisen Regressiomallin Rakentaminen | Polynomiregressio
Lineaarinen Regressio Pythonilla

bookPolynomisen Regressiomallin Rakentaminen

Tiedoston lataaminen

Tässä luvussa käytetään tiedostoa nimeltä poly.csv, jonka lataamme ensin ja tarkastelemme sen sisältöä:

123456
import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head(5))
copy

Tässä on yksi ominaisuus ja kohde. Seuraavaksi rakennetaan hajontakuvio, jotta voidaan ymmärtää ominaisuuden ja kohteen välistä suhdetta:

123456789
import pandas as pd import matplotlib.pyplot as plt file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

On vaikea kuvitella, että suora viiva sopisi tähän dataan hyvin, joten polynomiregressio on huomattavasti parempi valinta.

X̃-matriisin rakentaminen

Käytämme jälleen OLS-luokkaa. Meidän täytyy kuitenkin luoda -matriisi. Tämä tehdään manuaalisesti lisäämällä DataFrameen korotettu 'Feature'-sarake seuraavasti:

df['Feature_squared'] = df['Feature'] ** 2

Jos haluamme rakentaa korkeamman asteen polynomiregression, tämä vaatii useiden tällaisten sarakkeiden lisäämistä. Onneksi Scikit-Learn tarjoaa helpomman tavan tehdä tämä käyttämällä PolynomialFeatures-luokkaa.

fit_transform(X)-metodi odottaa, että X on joko kaksiulotteinen taulukko tai pandas DataFrame. Jos X on yksidimensioinen numpy-taulukko, reshape(-1,1)-metodi muuntaa sen kaksiulotteiseksi taulukoksi, jossa on samat arvot:

X = X.reshape(-1,1)

Jos X on DataFramen sarake, voit käyttää X = df[['col1']] saadaksesi DataFramen pandas Seriesin sijaan, joka ei sovellu fit_transform()-metodille:

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Rakentaaksesi polynomiregressiolle asteella n, käytetään seuraavaa:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Huom

PolynomialFeatures-luokka lisää myös sarakkeen, jossa on pelkkiä ykkösiä, joten sinun ei tarvitse käyttää sm.add_constant()-funktiota.

Polynomiaalisen regressiomallin rakentaminen ja ennusteiden tekeminen

Kun tiedämme, miten saadaan , olemme valmiita rakentamaan polynomiaalisen regressiomallin samalla tavalla kuin aiemmat mallit:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Uusien arvojen ennustamista varten myös X_new tulee muuntaa käyttäen PolynomialFeatures-luokkaa.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Seuraava suoritettava esimerkki näyttää koko prosessin polynomiaalisen regressiomallin rakentamisesta. X_new on tässä 1-ulotteinen taulukko pisteistä välillä -0.1 ja 1.5. Näitä tarvitaan visualisointia varten. Koska kyseessä on 1-ulotteinen taulukko, tulee käyttää reshape(-1,1)-metodia ennen sen käyttöä PolynomialFeatures-luokassa.

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Voit vapaasti kokeilla eri n-arvoja kahdeksannella rivillä. Näet, miten kuvaaja muuttuu polynomiregression asteen mukaan. Jos kiinnität huomiota, saatat huomata, kuinka erilaisia ennusteet ovat, kun piirteen arvo on alle 0 tai yli 1.4. Tämä on seuraavan luvun aihe.

question mark

Tarkastele seuraavaa koodia. Missä tapauksessa koodi suoritetaan ilman virheitä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

bookPolynomisen Regressiomallin Rakentaminen

Tiedoston lataaminen

Tässä luvussa käytetään tiedostoa nimeltä poly.csv, jonka lataamme ensin ja tarkastelemme sen sisältöä:

123456
import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head(5))
copy

Tässä on yksi ominaisuus ja kohde. Seuraavaksi rakennetaan hajontakuvio, jotta voidaan ymmärtää ominaisuuden ja kohteen välistä suhdetta:

123456789
import pandas as pd import matplotlib.pyplot as plt file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

On vaikea kuvitella, että suora viiva sopisi tähän dataan hyvin, joten polynomiregressio on huomattavasti parempi valinta.

X̃-matriisin rakentaminen

Käytämme jälleen OLS-luokkaa. Meidän täytyy kuitenkin luoda -matriisi. Tämä tehdään manuaalisesti lisäämällä DataFrameen korotettu 'Feature'-sarake seuraavasti:

df['Feature_squared'] = df['Feature'] ** 2

Jos haluamme rakentaa korkeamman asteen polynomiregression, tämä vaatii useiden tällaisten sarakkeiden lisäämistä. Onneksi Scikit-Learn tarjoaa helpomman tavan tehdä tämä käyttämällä PolynomialFeatures-luokkaa.

fit_transform(X)-metodi odottaa, että X on joko kaksiulotteinen taulukko tai pandas DataFrame. Jos X on yksidimensioinen numpy-taulukko, reshape(-1,1)-metodi muuntaa sen kaksiulotteiseksi taulukoksi, jossa on samat arvot:

X = X.reshape(-1,1)

Jos X on DataFramen sarake, voit käyttää X = df[['col1']] saadaksesi DataFramen pandas Seriesin sijaan, joka ei sovellu fit_transform()-metodille:

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Rakentaaksesi polynomiregressiolle asteella n, käytetään seuraavaa:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Huom

PolynomialFeatures-luokka lisää myös sarakkeen, jossa on pelkkiä ykkösiä, joten sinun ei tarvitse käyttää sm.add_constant()-funktiota.

Polynomiaalisen regressiomallin rakentaminen ja ennusteiden tekeminen

Kun tiedämme, miten saadaan , olemme valmiita rakentamaan polynomiaalisen regressiomallin samalla tavalla kuin aiemmat mallit:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Uusien arvojen ennustamista varten myös X_new tulee muuntaa käyttäen PolynomialFeatures-luokkaa.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Seuraava suoritettava esimerkki näyttää koko prosessin polynomiaalisen regressiomallin rakentamisesta. X_new on tässä 1-ulotteinen taulukko pisteistä välillä -0.1 ja 1.5. Näitä tarvitaan visualisointia varten. Koska kyseessä on 1-ulotteinen taulukko, tulee käyttää reshape(-1,1)-metodia ennen sen käyttöä PolynomialFeatures-luokassa.

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Voit vapaasti kokeilla eri n-arvoja kahdeksannella rivillä. Näet, miten kuvaaja muuttuu polynomiregression asteen mukaan. Jos kiinnität huomiota, saatat huomata, kuinka erilaisia ennusteet ovat, kun piirteen arvo on alle 0 tai yli 1.4. Tämä on seuraavan luvun aihe.

question mark

Tarkastele seuraavaa koodia. Missä tapauksessa koodi suoritetaan ilman virheitä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 3
some-alt