Polynomisen Regressiomallin Rakentaminen
Tiedoston lataaminen
Tässä luvussa käytetään tiedostoa nimeltä poly.csv
, jonka lataamme ensin ja tarkastelemme sen sisältöä:
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))
Tässä on yksi ominaisuus ja kohde. Seuraavaksi rakennetaan hajontakuvio, jotta voidaan ymmärtää ominaisuuden ja kohteen välistä suhdetta:
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()
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 X̃-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 X̃ 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)
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 X̃, 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.
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()
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.
Kiitos palautteestasi!