Cursusinhoud
Lineaire Regressie Met Python
Lineaire Regressie Met Python
Lineaire Regressie Bouwen Met Statsmodels
In het vorige hoofdstuk gebruikten we een functie van NumPy om de parameters te berekenen.
Nu gebruiken we het klasse-object in plaats van de functie om de lineaire regressie te representeren. Deze aanpak vereist meer regels code om de parameters te vinden, maar slaat veel nuttige informatie op in het object en maakt het voorspellen eenvoudiger.
Een lineair regressiemodel bouwen
In statsmodels kan de OLS
-klasse worden gebruikt om een lineair regressiemodel te maken.
We moeten eerst een OLS
-klasse-object initialiseren met
sm.OLS(y, X_tilde)
.
Vervolgens trainen we het model met de fit()
-methode.
model = sm.OLS(y, X_tilde)
model = model.fit()
Wat gelijkwaardig is aan:
model = sm.OLS(y, X_tilde).fit()
De constructor van de OLS
-klasse verwacht een specifieke array X_tilde
als invoer, zoals we zagen in de Normale Vergelijking. Daarom moet je je X
-array omzetten naar X_tilde
. Dit is mogelijk met de functie sm.add_constant()
.
Parameters vinden
Wanneer het model is getraind, kun je eenvoudig de parameters benaderen via het attribuut params
.
import statsmodels.api as sm # import statsmodels import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Open the file X, y = df['Father'], df['Height'] # Assign the variables # Get the correct form of input for OLS X_tilde = sm.add_constant(X) # Initialize an OLS object regression_model = sm.OLS(y, X_tilde) # Train the object regression_model = regression_model.fit() # Get the paramters beta_0, beta_1 = regression_model.params print('beta_0 is: ', beta_0) print('beta_1 is: ', beta_1)
Voorspellingen maken
Nieuwe instanties kunnen eenvoudig worden voorspeld met de methode predict()
, maar je moet de invoer hiervoor ook preprocessen:
import statsmodels.api as sm import pandas as pd import numpy as np file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Open the file X, y = df['Father'], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Preprocess regression_model = sm.OLS(y, X_tilde) # Initialize an OLS object regression_model = regression_model.fit() # Train the object # Predict new values X_new = np.array([65,70,75]) # Feature values of new instances X_new_tilde = sm.add_constant(X_new) # Preprocess X_new y_pred = regression_model.predict(X_new_tilde) # Predict the target print(y_pred)
De samenvatting verkrijgen
Zoals je waarschijnlijk hebt gemerkt, is het gebruik van de OLS
-klasse niet zo eenvoudig als de functie polyfit()
. Maar het gebruik van OLS
heeft zijn voordelen. Tijdens het trainen berekent het veel statistische informatie. Je kunt deze informatie raadplegen met de methode summary()
.
import statsmodels.api as sm import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Read the file X, y = df['Father'], df['Height'] X_tilde = sm.add_constant(X) # Preprocess X regression_model = sm.OLS(y, X_tilde) # Initialize an OLS object regression_model = regression_model.fit() # Train the object # Print the summary print(regression_model.summary())
Dat zijn veel statistieken. We zullen de belangrijkste onderdelen van de tabel in latere secties bespreken.
Bedankt voor je feedback!