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개 이상인 것을 알 수 있다.

 

이 글에서는 단순 선형 회귀 실습만을 해보겠다.

다중 선형 회귀 실습은 다음 글에서 하겠다.

 

단순 선형 회귀 실습

출처:머신러닝의 모든것(유데미)

위와 같은 연차별 연봉 데이터가 30행 있고, 우리는 이 데이터를 학습하여 새로운 데이터에 대한 예측 연봉을 찾을 것이다.

 

<목차>

1. 라이브러리 임포트

2. 데이터세트 임포트

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

4. 단순 선형 회귀 모델을 훈련세트로 학습시키기

5. 테스트세트 결과를 예측하기

6. 훈련세트의 결과를 시각화하기

7. 테스트세트의 결과를 시각화하기

 

 

 

1. 라이브러리 임포트

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

 

2. 데이터세트 임포트

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

 

 

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

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)

 

4. 단순 선형 회귀 모델을 훈련세트로 학습시키기

from sklearnl.model_selection import LinearRegression
regressor = LinearRegression()
regressor.fit(x_train, y_train)

line1 : 사이킷런의 model_selection 모듈에 접근해 LinearRegression 클래스를 임포트한다.

line2 : LinearRegression의 인스턴스를 regressor라는 이름으로 만든다.

line3 : fit 메소드를 사용하여 단순 선형 회귀 모델 regressor를 x_train, y_train 의 데이터를 이용해 학습한다.

 

5. 테스트세트 결과를 예측하기

y_pred = regressor.predict(x_test)

line1 : 훈련된 단순 선형 회귀 모델 regressor를 이용해 학습에 사용되지 않은 데이터가 있는 x_test(새로운 데이터)의

          결과값을 예측한다.

 

6. 훈련세트의 결과를 시각화하기

 이 과정은 훈련된 단순 선형 회귀 모델의 결과를 테스트세트 결과와 비교하기 위해 진행된다.

plt.scatter(x_train, y_train, color = 'red')
plt.plot(x_train, regressor.predict(x_train), color = 'blue')
plt.title('Salary vs Experience (Training set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

line1 : matplotlib.pyplot(이하 plt)에 접근해 scatter 함수를 사용하여 2D 구성에 점을 빨간색으로 찍는다.

line2 : plt의 plot 함수를 사용하여 회귀선을 파란색으로 긋는다. y좌표는 모델에 값을 넣었을 때 나오는 결과 값

          (plot(x좌표, y좌표))

line3~5 : 차트를 예쁘게 꾸미기 위해 사용한 것

line6 : 출력을 위해 사용한다.

단순 선형 회귀 훈련 세트 결과

파란색 선이 우리가 만든 단순 선형 회귀 모델이 구한 회귀 선이다. 이 선을 기반으로 새로운 데이터를 예측할 것이다.

 

7. 테스트세트의 결과를 시각화하기

 x_test의 경우 단순 선형 회귀 모델 입장에서는 새로운 데이터에 해당한다.

 y_test는 실제 데이터의 결과이므로 모델 입장에서는 정답에 해당한다.

 즉, x_test의 입력을 받은 모델이 출력한 결과가 y_test와 얼마나 다른지를 비교하는 것이다.
      여기서 중요한 것은 회귀선은 (6)에서 구한 회귀선과 동일하다는 것이다.

 

plt.scatter(x_test, y_test, color = 'red')
plt.plot(x_train, regressor.predict(x_train), color = 'blue')
plt.title('Salary vs Experience (Test set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

line1 : matplotlib.pyplot(이하 plt)에 접근해 scatter 함수를 사용하여 2D 구성에 점을 빨간색으로 찍는다.

line2 : 훈련세트에서 나타내는 회귀선과 동일하므로 코드를 수정할 필요가 없다.

line3~5 : 차트를 예쁘게 꾸미기 위해 사용한 것

line6 : 출력을 위해 사용한다

 

 

 

단순 선형 회귀 테스트 세트 결과

 

새로운 데이터를 넣어도 회귀선의 정확도가 높은 것을 알 수 있다.

단순 선형 회귀 모델은 독립변수와 결과가 선형의 관계를 가질 때, 유용하게 사용할 수 있으며,

만약 데이터가 비선형관계인 경우 단순 선형 회귀 모델을 사용하면 큰 오차를 가질 수 있다.