Bygga Linjär Regression
Du känner redan till vad enkel linjär regression är och hur man hittar den linje som bäst passar datan. Nu kommer du att gå igenom alla steg för att bygga en linjär regression för en verklig datamängd.
Laddar data
Vi har en fil, simple_height_data.csv, med data från våra exempel. Vi laddar filen och tittar på den:
123456import 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 print(df.head()) # Print the first 5 instances from a dataset
Datasettet har alltså två kolumner: den första är 'Father', vilket är inmatningsfunktionen, och den andra är 'Height', vilket är vår målvariabel.
Vi tilldelar våra målvariabler till variabeln y och funktionsvärden till X och skapar ett spridningsdiagram.
123456import matplotlib.pyplot as plt X = df['Father'] # Assign the feature y = df['Height'] # Assign the target plt.scatter(X,y) # Build scatterplot plt.show()
Hitta parametrar
För att implementera linjär regression i Scikit-learn används klassen LinearRegression.
LinearRegression(fit_intercept=True, copy_X=True, n_jobs=None, positive=False)
Parametrar
Klassen LinearRegression har flera parametrar som styr hur modellen anpassas.
fit_intercept(standard=True): Avgör om interceptet (bias) ska beräknas för denna modell. Om satt tillFalseanvänds inget intercept i beräkningarna (datan förväntas vara centrerad).copy_X(standard=True): OmTruekopieras X; annars kan det skrivas över.n_jobs(standard=None): Antal jobb som används för beräkningen. Detta ger endast en prestandaförbättring för n_targets > 1 och tillräckligt stora problem.Nonebetyder 1 om inte i ettjoblib.parallel_backend-sammanhang.-1innebär att alla processorer används.positive(standard=False): Om satt tillTruetvingas koefficienterna vara positiva. Detta alternativ stöds endast för täta arrayer.
Vanliga metoder
fit(X, y): Anpassa den linjära modellen.predict(X): Prediktera med den linjära modellen.score(X, y): Returnera determinationskoefficienten för prediktionen.
Attribut
coef_: Uppskattade koefficienter för det linjära regressionsproblemet.intercept_: Oberoende term i den linjära modellen.
I Scikit-learn använder vi klassen LinearRegression från modulen linear_model. Till skillnad från NumPy anger vi inte graden här; denna klass är specifikt utformad för linjära modeller. Vi använder metoden .fit() för att beräkna parametrarna.
Här är ett exempel:
1234567891011121314from sklearn.linear_model import LinearRegression import numpy as np # Convert the pandas Series to a NumPy array, then reshape X_reshaped = X.values.reshape(-1, 1) model = LinearRegression() model.fit(X_reshaped, y) # Train the model beta_0 = model.intercept_ # Get the intercept (beta_0) beta_1 = model.coef_[0] # Get the coefficient (beta_1) print('beta_0 is', beta_0) print('beta_1 is', beta_1)
Om du inte är bekant med syntaxen model.intercept_ och model.coef_, är detta en konvention i Scikit-learn. Attribut som beräknas (lärs in) under träningsprocessen slutar alltid med ett understreck _ (t.ex. intercept_, coef_).
intercept_ är ett enskilt värde, medan coef_ är en array som innehåller koefficienterna för varje variabel (vid enkel linjär regression finns endast ett värde).
Göra förutsägelser
Nu kan vi rita linjen och förutsäga nya variabler med hjälp av den tränade modellen.
123plt.scatter(X, y) # Build a scatter plot plt.plot(X, model.predict(X_reshaped), color='red') # Plot the line using predictions plt.show()
Nu när vi har den tränade modellen kan vi använda metoden .predict() för att förutsäga nya värden.
123X_new = np.array([[65], [70], [75]]) # Feature values (must be 2D) y_pred = model.predict(X_new) # Predict the target print('Predicted y: ', y_pred)
Det är alltså ganska enkelt att erhålla parametrarna för linjär regression. Men vissa bibliotek kan även ge ytterligare information.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 3.33
Bygga Linjär Regression
Svep för att visa menyn
Du känner redan till vad enkel linjär regression är och hur man hittar den linje som bäst passar datan. Nu kommer du att gå igenom alla steg för att bygga en linjär regression för en verklig datamängd.
Laddar data
Vi har en fil, simple_height_data.csv, med data från våra exempel. Vi laddar filen och tittar på den:
123456import 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 print(df.head()) # Print the first 5 instances from a dataset
Datasettet har alltså två kolumner: den första är 'Father', vilket är inmatningsfunktionen, och den andra är 'Height', vilket är vår målvariabel.
Vi tilldelar våra målvariabler till variabeln y och funktionsvärden till X och skapar ett spridningsdiagram.
123456import matplotlib.pyplot as plt X = df['Father'] # Assign the feature y = df['Height'] # Assign the target plt.scatter(X,y) # Build scatterplot plt.show()
Hitta parametrar
För att implementera linjär regression i Scikit-learn används klassen LinearRegression.
LinearRegression(fit_intercept=True, copy_X=True, n_jobs=None, positive=False)
Parametrar
Klassen LinearRegression har flera parametrar som styr hur modellen anpassas.
fit_intercept(standard=True): Avgör om interceptet (bias) ska beräknas för denna modell. Om satt tillFalseanvänds inget intercept i beräkningarna (datan förväntas vara centrerad).copy_X(standard=True): OmTruekopieras X; annars kan det skrivas över.n_jobs(standard=None): Antal jobb som används för beräkningen. Detta ger endast en prestandaförbättring för n_targets > 1 och tillräckligt stora problem.Nonebetyder 1 om inte i ettjoblib.parallel_backend-sammanhang.-1innebär att alla processorer används.positive(standard=False): Om satt tillTruetvingas koefficienterna vara positiva. Detta alternativ stöds endast för täta arrayer.
Vanliga metoder
fit(X, y): Anpassa den linjära modellen.predict(X): Prediktera med den linjära modellen.score(X, y): Returnera determinationskoefficienten för prediktionen.
Attribut
coef_: Uppskattade koefficienter för det linjära regressionsproblemet.intercept_: Oberoende term i den linjära modellen.
I Scikit-learn använder vi klassen LinearRegression från modulen linear_model. Till skillnad från NumPy anger vi inte graden här; denna klass är specifikt utformad för linjära modeller. Vi använder metoden .fit() för att beräkna parametrarna.
Här är ett exempel:
1234567891011121314from sklearn.linear_model import LinearRegression import numpy as np # Convert the pandas Series to a NumPy array, then reshape X_reshaped = X.values.reshape(-1, 1) model = LinearRegression() model.fit(X_reshaped, y) # Train the model beta_0 = model.intercept_ # Get the intercept (beta_0) beta_1 = model.coef_[0] # Get the coefficient (beta_1) print('beta_0 is', beta_0) print('beta_1 is', beta_1)
Om du inte är bekant med syntaxen model.intercept_ och model.coef_, är detta en konvention i Scikit-learn. Attribut som beräknas (lärs in) under träningsprocessen slutar alltid med ett understreck _ (t.ex. intercept_, coef_).
intercept_ är ett enskilt värde, medan coef_ är en array som innehåller koefficienterna för varje variabel (vid enkel linjär regression finns endast ett värde).
Göra förutsägelser
Nu kan vi rita linjen och förutsäga nya variabler med hjälp av den tränade modellen.
123plt.scatter(X, y) # Build a scatter plot plt.plot(X, model.predict(X_reshaped), color='red') # Plot the line using predictions plt.show()
Nu när vi har den tränade modellen kan vi använda metoden .predict() för att förutsäga nya värden.
123X_new = np.array([[65], [70], [75]]) # Feature values (must be 2D) y_pred = model.predict(X_new) # Predict the target print('Predicted y: ', y_pred)
Det är alltså ganska enkelt att erhålla parametrarna för linjär regression. Men vissa bibliotek kan även ge ytterligare information.
Tack för dina kommentarer!