logo

다중 선형 회귀

이전 주제에서는 단일 독립/예측 변수(X)를 사용하여 반응 변수(Y)를 모델링하는 단순 선형 회귀에 대해 배웠습니다. 그러나 반응 변수가 둘 이상의 예측 변수에 의해 영향을 받는 다양한 경우가 있을 수 있습니다. 이러한 경우에는 다중 선형 회귀 알고리즘이 사용됩니다.

또한 다중 선형 회귀는 응답 변수를 예측하는 데 둘 이상의 예측 변수가 필요하므로 단순 선형 회귀의 확장입니다. 우리는 그것을 다음과 같이 정의할 수 있습니다:

다중 선형 회귀는 단일 종속 연속 변수와 두 개 이상의 독립 변수 간의 선형 관계를 모델링하는 중요한 회귀 알고리즘 중 하나입니다.

예:

CO 예측2자동차의 엔진 크기와 실린더 수에 따른 배기가스 배출입니다.

MLR에 대한 몇 가지 핵심 사항:

  • MLR의 경우 종속변수 또는 목표변수(Y)는 연속형/실수형이어야 하지만 예측변수 또는 독립변수는 연속형 또는 범주형일 수 있습니다.
  • 각 특성 변수는 종속 변수와의 선형 관계를 모델링해야 합니다.
  • MLR은 데이터 포인트의 다차원 공간을 통해 회귀선을 맞추려고 합니다.

MLR 방정식:

다중 선형 회귀 분석에서 목표 변수(Y)는 여러 예측 변수 x의 선형 조합입니다.1, x2, x, ...,xN. 단순 선형 회귀의 향상된 기능이므로 다중 선형 회귀 방정식에도 동일하게 적용되므로 방정식은 다음과 같습니다.

 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) 

어디,

Y= 출력/응답 변수

기술의 장점과 단점

0, 비1, 비2, 비, 비N....= 모델의 계수.

엑스1, x2, x, x4,...= 다양한 독립변수/특성변수

다중 선형 회귀에 대한 가정:

  • 선형 관계 목표 변수와 예측 변수 사이에 존재해야 합니다.
  • 회귀 잔차는 다음과 같아야 합니다. 정규 분포 .
  • MLR은 거의 가정하지 않습니다. 다중공선성 없음 (독립변수 간의 상관관계)

Python을 사용한 다중 선형 회귀 모델 구현:

Python을 사용하여 MLR을 구현하려면 다음과 같은 문제가 있습니다.

문제 설명:

우리는 50개 스타트업 기업 . 이 데이터 세트에는 5가지 주요 정보가 포함되어 있습니다. 회계연도 동안의 R&D 지출, 관리 지출, 마케팅 지출, 상태 및 이익 . 우리의 목표는 어떤 회사가 최대 이익을 내고 있는지, 어떤 요소가 회사 이익에 가장 큰 영향을 미치는지 쉽게 판단할 수 있는 모델을 만드는 것입니다.

이익을 찾아야 하므로 이것이 종속변수이고 나머지 4개의 변수는 독립변수입니다. 다음은 MLR 모델을 배포하는 주요 단계입니다.

    데이터 전처리 단계 훈련 세트에 MLR 모델 피팅 테스트 세트 결과 예측

1단계: 데이터 전처리 단계:

가장 첫 번째 단계는라이브러리 가져오기:먼저 모델 구축에 도움이 되는 라이브러리를 가져옵니다. 아래는 그에 대한 코드입니다:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    데이터세트 가져오기:이제 모든 변수가 포함된 데이터세트(50_CompList)를 가져옵니다. 아래는 그에 대한 코드입니다:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

산출: 우리는 데이터 세트를 다음과 같이 얻습니다.

다중 선형 회귀

위의 출력에서 ​​우리는 5개의 변수가 있음을 분명히 알 수 있는데, 그 중 4개의 변수는 연속형 변수이고 하나는 범주형 변수입니다.

    종속변수와 독립변수 추출:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

산출:

출력[5]:

 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) 

위 출력에서 ​​볼 수 있듯이 마지막 열에는 모델 피팅에 직접 적용하기에 적합하지 않은 범주형 변수가 포함되어 있습니다. 따라서 우리는 이 변수를 인코딩해야 합니다.

더미 변수 인코딩:

모델에 직접 적용할 수 없는 범주형 변수(State)가 하나 있으므로 이를 인코딩하겠습니다. 범주형 변수를 숫자로 인코딩하기 위해 다음을 사용합니다. 라벨인코더 수업. 그러나 여전히 일부 관계형 순서가 있기 때문에 충분하지 않으며 이로 인해 잘못된 모델이 생성될 수 있습니다. 따라서 이 문제를 제거하기 위해 다음을 사용하겠습니다. 원핫인코더 , 더미 변수가 생성됩니다. 아래는 이에 대한 코드입니다:

 #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() 

여기서는 다른 변수가 연속적이므로 상태인 하나의 독립 변수만 인코딩합니다.

산출:

다중 선형 회귀

위 출력에서 ​​볼 수 있듯이 상태 열은 더미 변수(0과 1)로 변환되었습니다. 여기서 각 더미 변수 열은 하나의 State에 해당합니다. . 원본 데이터 세트와 비교하여 확인할 수 있습니다. 첫 번째 열은 다음에 해당합니다. 캘리포니아 주 , 두 번째 열은 플로리다 주 , 세 번째 열은 뉴욕주 .

메모:모든 더미 변수를 동시에 사용해서는 안 되므로 총 더미 변수 수보다 1이 작아야 합니다. 그렇지 않으면 더미 변수 트랩이 생성됩니다.

  • 이제 우리는 더미 변수 함정을 피하기 위해 한 줄의 코드를 작성하고 있습니다.
 #avoiding the dummy variable trap: x = x[:, 1:] 

첫 번째 더미 변수를 제거하지 않으면 모델에 다중 공선성이 발생할 수 있습니다.

다중 선형 회귀

위 출력 이미지에서 볼 수 있듯이 첫 번째 열이 제거되었습니다.

컴퓨터 작업
  • 이제 데이터 세트를 훈련 세트와 테스트 세트로 분할하겠습니다. 이에 대한 코드는 다음과 같습니다.
 # 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) 

위의 코드는 데이터 세트를 훈련 세트와 테스트 세트로 분할합니다.

산출: 위 코드는 데이터 세트를 훈련 세트와 테스트 세트로 분할합니다. Spyder IDE에 제공된 변수 탐색기 옵션을 클릭하면 출력을 확인할 수 있습니다. 테스트 세트와 트레이닝 세트는 아래 이미지와 같습니다.

테스트 세트:

자바 부울을 문자열로
다중 선형 회귀

트레이닝 세트:

다중 선형 회귀

메모:MLR에서는 라이브러리에서 처리하는 기능 확장을 수행하지 않으므로 수동으로 수행할 필요가 없습니다.

단계: 2- MLR 모델을 훈련 세트에 맞추기:

이제 훈련을 제공하기 위해 데이터 세트를 잘 준비했습니다. 이는 회귀 모델을 훈련 세트에 맞추는 것을 의미합니다. 우리가 했던 것과 비슷할 거예요 단순 선형 회귀 모델. 이에 대한 코드는 다음과 같습니다.

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

산출:

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

이제 훈련 데이터 세트를 사용하여 모델을 성공적으로 훈련했습니다. 다음 단계에서는 테스트 데이터 세트를 사용하여 모델의 성능을 테스트합니다.

단계: 3- 테스트 세트 결과 예측:

모델의 마지막 단계는 모델의 성능을 확인하는 것입니다. 테스트 세트 결과를 예측하여 이를 수행하겠습니다. 예측을 위해 우리는 y_pred 벡터. 아래는 그에 대한 코드입니다:

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

위의 코드 줄을 실행하면 변수 탐색기 옵션 아래에 새 벡터가 생성됩니다. 예측된 값과 테스트 세트 값을 비교하여 모델을 테스트할 수 있습니다.

산출:

다중 선형 회귀

위 출력에는 예측된 결과 세트와 테스트 세트가 있습니다. 이 두 값 인덱스를 인덱스별로 비교하여 모델 성능을 확인할 수 있습니다. 예를 들어 첫 번째 인덱스의 예측 값은 다음과 같습니다. 103015$ 수익 및 테스트/실질 가치 103282$ 이익. 차이점은 오직 7 이는 좋은 예측이므로 마침내 모델이 완성되었습니다.

  • 훈련 데이터 세트와 테스트 데이터 세트의 점수도 확인할 수 있습니다. 아래는 그에 대한 코드입니다:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

산출: 점수는 다음과 같습니다

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

위의 점수는 우리 모델이 훈련 데이터 세트의 경우 95% 정확하고 테스트 데이터 세트의 경우 93% 정확하다는 것을 나타냅니다.

메모:다음 주제에서는 다음을 사용하여 모델의 성능을 향상시킬 수 있는 방법을 살펴보겠습니다.역방향 제거프로세스.

다중 선형 회귀의 응용:

다중 선형 회귀 분석에는 주로 두 가지 응용 프로그램이 있습니다.

  • 예측에 대한 독립변수의 효과:
  • 변경의 영향 예측: