이전 주제에서는 단일 독립/예측 변수(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 모델을 배포하는 주요 단계입니다.
1단계: 데이터 전처리 단계:
가장 첫 번째 단계는
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
#importing datasets data_set= pd.read_csv('50_CompList.csv')
산출: 우리는 데이터 세트를 다음과 같이 얻습니다.
위의 출력에서 우리는 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, 'New York'], [162597.7, 151377.59, 443898.53, 'California'], [153441.51, 101145.55, 407934.54, 'Florida'], [144372.41, 118671.85, 383199.62, 'New York'], [142107.34, 91391.77, 366168.42, 'Florida'], [131876.9, 99814.71, 362861.36, 'New York'], [134615.46, 147198.87, 127716.82, 'California'], [130298.13, 145530.06, 323876.68, 'Florida'], [120542.52, 148718.95, 311613.29, 'New York'], [123334.88, 108679.17, 304981.62, 'California'], [101913.08, 110594.11, 229160.95, 'Florida'], [100671.96, 91790.61, 249744.55, 'California'], [93863.75, 127320.38, 249839.44, 'Florida'], [91992.39, 135495.07, 252664.93, 'California'], [119943.24, 156547.42, 256512.92, 'Florida'], [114523.61, 122616.84, 261776.23, 'New York'], [78013.11, 121597.55, 264346.06, 'California'], [94657.16, 145077.58, 282574.31, 'New York'], [91749.16, 114175.79, 294919.57, 'Florida'], [86419.7, 153514.11, 0.0, 'New York'], [76253.86, 113867.3, 298664.47, 'California'], [78389.47, 153773.43, 299737.29, 'New York'], [73994.56, 122782.75, 303319.26, 'Florida'], [67532.53, 105751.03, 304768.73, 'Florida'], [77044.01, 99281.34, 140574.81, 'New York'], [64664.71, 139553.16, 137962.62, 'California'], [75328.87, 144135.98, 134050.07, 'Florida'], [72107.6, 127864.55, 353183.81, 'New York'], [66051.52, 182645.56, 118148.2, 'Florida'], [65605.48, 153032.06, 107138.38, 'New York'], [61994.48, 115641.28, 91131.24, 'Florida'], [61136.38, 152701.92, 88218.23, 'New York'], [63408.86, 129219.61, 46085.25, 'California'], [55493.95, 103057.49, 214634.81, 'Florida'], [46426.07, 157693.92, 210797.67, 'California'], [46014.02, 85047.44, 205517.64, 'New York'], [28663.76, 127056.21, 201126.82, 'Florida'], [44069.95, 51283.14, 197029.42, 'California'], [20229.59, 65947.93, 185265.1, 'New York'], [38558.51, 82982.09, 174999.3, 'California'], [28754.33, 118546.05, 172795.67, 'California'], [27892.92, 84710.77, 164470.71, 'Florida'], [23640.93, 96189.63, 148001.11, 'California'], [15505.73, 127382.3, 35534.17, 'New York'], [22177.74, 154806.14, 28334.72, 'California'], [1000.23, 124153.04, 1903.93, 'New York'], [1315.46, 115816.21, 297114.46, 'Florida'], [0.0, 135426.92, 0.0, 'California'], [542.05, 51743.15, 0.0, 'New York'], [0.0, 116983.8, 45173.06, 'California']], 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('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
산출: 점수는 다음과 같습니다
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
위의 점수는 우리 모델이 훈련 데이터 세트의 경우 95% 정확하고 테스트 데이터 세트의 경우 93% 정확하다는 것을 나타냅니다.
메모:다음 주제에서는 다음을 사용하여 모델의 성능을 향상시킬 수 있는 방법을 살펴보겠습니다.역방향 제거프로세스.
다중 선형 회귀의 응용:
다중 선형 회귀 분석에는 주로 두 가지 응용 프로그램이 있습니다.
- 예측에 대한 독립변수의 효과:
- 변경의 영향 예측: