logo

Wielokrotna regresja liniowa

W poprzednim temacie dowiedzieliśmy się o prostej regresji liniowej, w której pojedyncza zmienna niezależna/predyktor(X) jest używana do modelowania zmiennej odpowiedzi (Y). Mogą jednak istnieć różne przypadki, w których na zmienną odpowiedzi wpływa więcej niż jedna zmienna predykcyjna; w takich przypadkach stosuje się algorytm wielokrotnej regresji liniowej.

Co więcej, wielokrotna regresja liniowa jest rozszerzeniem prostej regresji liniowej, ponieważ do przewidzenia zmiennej odpowiedzi potrzeba więcej niż jednej zmiennej predykcyjnej. Możemy to zdefiniować jako:

Wielokrotna regresja liniowa jest jednym z ważnych algorytmów regresji, który modeluje liniową zależność pomiędzy pojedynczą zależną zmienną ciągłą i więcej niż jedną zmienną niezależną.

Przykład:

Przewidywanie CO2emisji na podstawie wielkości silnika i liczby cylindrów w samochodzie.

Kilka kluczowych punktów na temat MLR:

  • W przypadku MLR zmienna zależna lub docelowa (Y) musi być ciągła/rzeczywista, ale predyktor lub zmienna niezależna może mieć postać ciągłą lub kategoryczną.
  • Każda zmienna cechy musi modelować liniową zależność ze zmienną zależną.
  • MLR próbuje dopasować linię regresji przez wielowymiarową przestrzeń punktów danych.

Równanie MLR:

W wielokrotnej regresji liniowej zmienna docelowa (Y) jest liniową kombinacją wielu zmiennych predykcyjnych x1, X2, X3, ...,XN. Ponieważ jest to rozwinięcie prostej regresji liniowej, więc to samo stosuje się do równania wielokrotnej regresji liniowej, równanie ma postać:

 Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a) 

Gdzie,

Y= zmienna wyjściowa/odpowiedzi

rozmiar tekstu lateksowego

B0, B1, B2, B3, BN....= Współczynniki modelu.

X1, X2, X3, X4,...= Różne zmienne niezależne/cechowe

Założenia dotyczące wielokrotnej regresji liniowej:

  • A zależność liniowa powinna istnieć pomiędzy zmiennymi docelowymi i predykcyjnymi.
  • Reszty regresji muszą być normalnie dystrybuowane .
  • MLR zakłada niewiele lub brak wielowspółliniowości (korelacja między zmienną niezależną) w danych.

Implementacja modelu wielokrotnej regresji liniowej przy użyciu języka Python:

Aby zaimplementować MLR przy użyciu Pythona, mamy następujący problem:

Opis problemu:

Mamy zbiór danych 50 start-upów . Ten zbiór danych zawiera pięć głównych informacji: Wydatki na badania i rozwój, wydatki na administrację, wydatki na marketing, stan i zysk za rok finansowy . Naszym celem jest stworzenie modelu, który w łatwy sposób będzie w stanie określić, która firma osiąga maksymalny zysk i który czynnik ma największy wpływ na zysk firmy.

Ponieważ musimy znaleźć Zysk, jest to zmienna zależna, a pozostałe cztery zmienne są zmiennymi niezależnymi. Poniżej znajdują się główne etapy wdrażania modelu MLR:

    Etapy wstępnego przetwarzania danych Dopasowanie modelu MLR do zbioru uczącego Przewidywanie wyniku zbioru testowego

Krok 1: Wstępne przetwarzanie danych Krok:

Pierwszym krokiem jestImportowanie bibliotek:W pierwszej kolejności zaimportujemy bibliotekę, która pomoże w budowie modelu. Poniżej znajduje się jego kod:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Importowanie zbioru danych:Teraz zaimportujemy zbiór danych (50_CompList), który zawiera wszystkie zmienne. Poniżej znajduje się jego kod:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Wyjście: Otrzymamy zbiór danych jako:

Wielokrotna regresja liniowa

Na powyższym wyjściu wyraźnie widać, że istnieje pięć zmiennych, z czego cztery zmienne są ciągłe, a jedna jest zmienną kategoryczną.

    Wyodrębnianie zmiennych zależnych i niezależnych:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Wyjście:

Wyjście [5]:

klucz podstawowy i klucz złożony w sql
 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

Jak widać z powyższego wyniku, ostatnia kolumna zawiera zmienne kategoryczne, które nie nadają się do bezpośredniego zastosowania w celu dopasowania modelu. Musimy więc zakodować tę zmienną.

Kodowanie zmiennych fikcyjnych:

Ponieważ mamy jedną zmienną kategoryczną (Stan), której nie można bezpośrednio zastosować do modelu, więc ją zakodujemy. Aby zakodować zmienną kategoryczną na liczby, użyjemy metody LabelEnkoder klasa. Ale to nie wystarczy, bo nadal ma pewien porządek relacyjny, co może stworzyć błędny model. Aby więc usunąć ten problem, użyjemy OneHotEnkoder , co utworzy zmienne fikcyjne. Poniżej znajduje się jego kod:

 #Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray() 

Tutaj kodujemy tylko jedną zmienną niezależną, którą jest stan, ponieważ inne zmienne są ciągłe.

Wyjście:

Wielokrotna regresja liniowa

Jak widać na powyższym wyjściu, kolumna stanu została przekonwertowana na zmienne fikcyjne (0 i 1). Tutaj każda kolumna zmiennej fikcyjnej odpowiada jednemu stanowi . Możemy to sprawdzić, porównując go z oryginalnym zbiorem danych. Pierwsza kolumna odpowiada Stan Kalifornia , druga kolumna odpowiada Stan Floryda , a trzecia kolumna odpowiada Stan Nowy Jork .

Notatka:Nie powinniśmy używać wszystkich zmiennych fikcyjnych w tym samym czasie, więc musi być o 1 mniejsza niż całkowita liczba zmiennych fikcyjnych, w przeciwnym razie utworzy się pułapka na zmienne fikcyjne.

  • Teraz piszemy pojedynczą linię kodu, aby uniknąć pułapki na fikcyjną zmienną:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Jeśli nie usuniemy pierwszej zmiennej fikcyjnej, może to wprowadzić do modelu wieloliniowość.

Wielokrotna regresja liniowa

Jak widać na powyższym obrazie wyjściowym, pierwsza kolumna została usunięta.

  • Teraz podzielimy zbiór danych na zbiór uczący i testowy. Kod do tego podano poniżej:
 # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0) 

Powyższy kod podzieli nasz zbiór danych na zbiór uczący i testowy.

Wyjście: Powyższy kod podzieli zbiór danych na zbiór uczący i zbiór testowy. Możesz sprawdzić dane wyjściowe, klikając opcję eksploratora zmiennych podaną w Spyder IDE. Zestaw testowy i zestaw treningowy będą wyglądać jak na poniższym obrazku:

Zestaw testowy:

Wielokrotna regresja liniowa

Zestaw treningowy:

Wielokrotna regresja liniowa

Notatka:W MLR nie będziemy robić skalowania funkcji, ponieważ zajmuje się tym biblioteka, więc nie musimy robić tego ręcznie.

Krok: 2 – Dopasowanie naszego modelu MLR do zbioru treningowego:

Teraz już dobrze przygotowaliśmy nasz zbiór danych do szkolenia, co oznacza, że ​​dopasujemy nasz model regresji do zbioru uczącego. Będzie podobnie jak to zrobiliśmy w Prosty model regresji liniowej. Kod do tego będzie następujący:

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

Wyjście:

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

Teraz pomyślnie przeszkoliliśmy nasz model przy użyciu zbioru danych szkoleniowych. W kolejnym kroku przetestujemy wydajność modelu korzystając z testowego zbioru danych.

Krok: 3- Przewidywanie wyników zestawu testowego:

Ostatnim krokiem naszego modelu jest sprawdzenie wydajności modelu. Zrobimy to poprzez przewidzenie wyniku zestawu testowego. W celu przewidywania utworzymy plik y_pred wektor. Poniżej znajduje się jego kod:

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

Wykonując powyższe linie kodu, w opcji eksploratora zmiennych zostanie wygenerowany nowy wektor. Możemy przetestować nasz model, porównując wartości przewidywane i wartości zestawu testowego.

liczba do ciągu Java

Wyjście:

Wielokrotna regresja liniowa

W powyższym wyniku przewidzieliśmy zestaw wyników i zestaw testów. Możemy sprawdzić wydajność modelu, porównując te dwie wartości indeks po indeksie. Na przykład pierwszy indeks ma przewidywaną wartość 103015 $ zysk i test/rzeczywista wartość 103282 $ zysk. Różnica polega tylko na 267 dolarów , co jest dobrą prognozą, więc w końcu nasz model jest tutaj ukończony.

  • Możemy również sprawdzić wynik zbioru danych szkoleniowych i zbioru danych testowych. Poniżej znajduje się jego kod:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Wyjście: Wynik to:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

Powyższy wynik mówi, że nasz model jest dokładny w 95% w przypadku zestawu danych szkoleniowych i w 93% w przypadku zestawu danych testowych.

Notatka:W następnym temacie zobaczymy, jak możemy poprawić wydajność modelu za pomocąEliminacja wstecznaproces.

Zastosowania wielokrotnej regresji liniowej:

Istnieją głównie dwa zastosowania wielokrotnej regresji liniowej:

  • Skuteczność zmiennej niezależnej w przewidywaniu:
  • Przewidywanie wpływu zmian: