Part 2-1. 에서 독립변수의 개수가 1개인 단순 선형 회귀 모델을 구현했다.

2023.08.29 - [ML & DL/머신러닝의 모든 것] - Part 2-1. 단순 선형 회귀(Simple Linear Regression)의 이해와 구현

 

Part 2-1. 단순 선형 회귀(Simple Linear Regression)의 이해와 구현

Part 1에서 머신러닝 훈련을 위한 데이터 전처리 과정을 배웠다. 2023.08.25 - [ML & DL/머신러닝의 모든 것] - Part 1. 데이터 전처리 Part 1. 데이터 전처리 머신러닝 모델을 훈련시키기 전에 데이터를 전

jijibae.tistory.com


이번에는 다중 선형 회귀 모델을 만들어보자.

 

선형 회귀(Linear Regression)란?

 선형 회귀는 널리 사용되는 회귀 알고리즘이다.

 선형회귀는 종속 변수 y와 하나 이상의 독립 변수 x와의 선형 상관관계를 모델링하는 기법이다.

 독립 변수 x가 1개라면 단순 선형 회귀, 2개 이상이면 다중 선형 회귀라고 한다.

 

1) 단순 선형 회귀(Simple Linear Regression)

 위와 같은 식이 단순 선형 회귀의 식이며, 우리가 알고 있는 직선의 방정식이다. 

모델을 학습 시킨다는 뜻은 새로운 데이터를 입력했을 때 정확도가 높은 예측을 할 수 있게끔 상수 b0의 값과 기울기 b1의 값을 알아내는 것이다. 

 

2) 다중 선형 회귀(Multiple Linear Regression)

 단순 선형 회귀의 식과 다르게 다중 선형 회귀의 식은 독립변수 x의 개수가 1개 이상인 것을 알 수 있다.

같은 의미로 모델을 학습 시킨다는 뜻은 새로운 데이터를 입력했을 때 정확도 높은 예측을 할 수 있게 상수 b0와 계수 b1,b2,...,bn을 찾는 것이다.

 

이번에는 다중 선형 회귀 모델을 만들어 보겠다.

 

다중 선형 회귀 실습

출처 : 모두의 인공지능(유데미)

위 데이터세트는 50개의 스타트업 기업들의 각 분야에 사용하는 지출과 이익의 정도를 나타낸 것의 일부이다.

A, B, C, D 열의 값들이 이익에 영향을 주므로, 독립 변수 x의 개수가 4개라고 할 수 있다.

따라서 위의 데이터에 적합한 모델은 다중 선형 회귀 모델이다.

 

 

<목차>

1. 라이브러리 임포트

2. 데이터세트 임포트

3. 범주형 데이터 인코딩

4. 데이터세트를 훈련세트와 테스트세트로 나누기

5. 다중 선형 회귀 모델을 훈련세트로 학습시키기

6. 테스트 세트의 예측 결과 출력하기

 

 

 

1. 라이브러리 임포트

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

 

2. 데이터세트 임포트

dataset = pd.open_csv('파일명')
x = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

 

3. 범주형 데이터 인코딩

 위의 데이터 세트에서 'State' 열의 값이 범주형이므로 전에 배운 One-Hot 인코딩 방식을 이용해서 세 개의 열로 바꿔준다.

데이터세트의 맨 앞으로 옴

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformer = [('encoder', OneHotEncoder(), [3]), remainder = 'passthrough')
x = np.array(ct.fit_transform(x))

line1 : 사이킷런의 compose 모듈에 접근해 ColumnTransformer 클래스 임포트

line2 : 사이킷런의 preprocessing 모듈에 접근해 OneHotEncoder 클래스 임포트

line3 : ColumnTransformer의 인스턴스 ct생성 인자로는 (변환하고싶은열, 유지하고싶은열)

line4 : 변환한 열을 numpy array 형식으로 반환

 

4. 데이터세트를 훈련세트와 테스트세트로 나누기

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)

 

5. 다중 선형 회귀 모델을 훈련세트로 학습시키기

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(x_train, y_train)

놀랍게도 단순 선형 회귀 모델을 만들 때 사용한 클래스와 동일하다. 클래스가 가변수의 함정도 알아서 처리할 거고, 통계적 유의성이 가장 높은 최적을 특성을 선택하는 것도 알아서 처리할 것이다.

 

6. 테스트 세트의 예측결과 출력하기

 단순 선형 회귀의 결과는 2차원의 직선으로 나오는데, 다중 선형 회귀의 결과의 경우 변수의 개수에 따라 3차원, 4차원, 5차원으로 커지므로 시각화 하는 것은 불가능하다. 따라서 벡터 두개로 결과를 표시하겠다.

y_pred = regressor.predict(x_test)
np.set_printoptions(precision=2)
print(np.concatenate((y_pred.reshape(len(y_pred),1), y_test.reshape(len(y_test),1)),1))

line1 : 다중 선형 회귀 모델에 x_test 값을 입력값으로 준다.

line2 : numpy형식으로 소수점 2번째 자리 까지 표시하는 방법

line3 : concatenate 함수는 배열이나 벡터를 튜플 형식으로 입력값을 주면 합쳐준다.

           reshape 함수는 배열을 행방향이나 열방향으로 전환해준다.

           함수 형태는 concatenate(합치고싶은 배열, 합치는 방향)  합치는 방향 = 0  (수직방향), 합치는 방향 = 1 (수평방향)

                               reshape(원소의 개수, 표시방향) 표시방향 = 0 (수평방향), 합치는 방향 = 1 (수직방향)

 

결과

왼쪽 : 예측, 오른쪽 : 정답

다중 선형 회귀 모델도 단순 선형 회귀 모델에서 사용하는 클래스와 동일하다는 것에서 놀랐다.

입력으로 주어지는 데이터가 어떤가에 따라 알아서 단순 선형 회귀 모델로 만들어지거나 다중 선형 회귀 모델로 만들어지는 것을 배웠다.