Part 2-2 에서 독립변수의 개수가 1개 이상인 다중 선형 회귀 모델을 만들었다.

2023.08.29 - [ML & DL/머신러닝의 모든 것] - Part 2-2. 다중 선형 회귀 모델 만들기

 

Part 2-2. 다중 선형 회귀 모델 만들기

Part 2-1. 에서 독립변수의 개수가 1개인 단순 선형 회귀 모델을 만들었다. 2023.08.29 - [ML & DL/머신러닝의 모든 것] - Part 2-1. 단순 선형 회귀 모델 만들기 Part 2-1. 단순 선형 회귀 모델 만들기 Part 1에서

jijibae.tistory.com


이번에는 다항 회귀에 대해 알아보자

 

다항 회귀(Polynomial  Regression)란?

단순 선형 회귀, 다중 선형 회귀는 선형 데이터 세트 문제에 적합한 모델이다. 

이렇게 데이터 세트의 독립변수(x)와 결과(y)가 선형의 관계가 아닐 때 사용할 수 있는 모델이 다항식 회귀 모델이다.

 

다항 회귀 공식

단순 선형 회귀의 독립변수 개수는   1

다항 선형 회귀의 독립변수 개수는  >=1

다항 회귀의 독립변수의 개수는 1   

 

단순 선형 회귀와 다항 회귀의 독립변수의 개수는 1개로 같고, 그것의 차이는 독립변수와 종속변수와의 관계가 선형인가 비선형인가의 차이이다.

다항 회귀는 위의 공식을 참고해도 알 수 있듯이 독립 변수 1개의 n제곱 형태를 가진다.

위의 차이를 명확하게 이해하면 쉽게 구현할 수 있다.

 

다항 회귀 구현

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

위 데이터세트는 A회사의 연차별 연봉을 조사한 것이다.

A회사에서 6.5년 근무하던 a가 B회사로 이직을 하여 과거 자신이 받았던 임금이 160,000$ 임을 감안해 똑같이 160,000$를 요구한다면  B회사 입장에서는 이것을 믿어야할까? 다항 회귀 방법을 통해 검증해보자.

 

 

<목차>

1. 라이브러리 임포트

2. 데이터세트 임포트

3. 전체 데이터세트를 사용하여 단순 선형 회귀 모델을 학습

4. 전체 데이터세트를 사용하여 다항 회귀 모델을 학습

5. 단순 선형 회귀 모델의 결과예측을 시각화하기

6. 다항 회귀 모델의 결과예측을 시각화하기

7. (6)의 결과를 더 매끄럽게 시각화하기

8. a가 거짓인지 아닌지 확인해보기

 

 

1. 라이브러리 임포트

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

 

2. 데이터세트 임포트

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

 

3. 전체 데이터세트를 사용하여 단순 선형 회귀 모델을 학습

from sklearn.linear_model import LinerRegression
lin_reg = LinearRegression()
lin_reg.fit(x, y)

 

4. 전체 데이터세트를 사용하여 다항 회귀 모델을 학습

다항 선형 회귀를 만드는 방법은 다음과 같다.

 1. n제곱된 특성들의 행렬을 만든다. (n = degree)

 2. 단순 선형 회귀를 만들어서 둘의 특성을 통합하면 된다.

from sklearn.preprocessing import PolynomialFeatures
poly_reg = PolynomialFeatures(degree = 4)
x_poly = poly_reg.fit_transform(x)
lin_reg_2 = LinearRegression()
lin_reg_2.fit(x_poly, y)

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

           전처리에 있는 이유는 x1이라는 특성을 x1^2, x1^3, ... , x1^n으로 전처리 할 것이기 때문이다.

line2 : x1^4까지 제곱된 행렬을 만들어주는 객체 생성

line3 : 기존의 특성행렬 x 를 적용시켜 제곱된 행렬의 형태로 만들어준다.

line4 : 단순 선형 회귀 모델을 하나 더 만든다.

line5 : line4 에서 만든 단순 선형 회귀 모델에 특성 값으로 제곱된 행렬을 넣어준다.

 

5. 단순 선형 회귀 모델의 결과예측을 시각화하기

plt.scatter(x, y, color = 'red')
plt.plot(x, lin_reg.predict(x), color = 'blue')
plt.title('Truth or Bluff(Linear Reggresion)')
plt.xlabel('Position Level')
plt.ylabel('Salary')
plt.show()

line1 : scatter을 사용하여 데이터를 빨간 점으로 표현할 것이다.

line2 : 학습시킨 선형회귀 모델에 x를 입력으로 주었을 때, 나오는 예측 결과를 plot 이용해 파란색 선으로 표현할 것이다.

line3,4,5 : 제목, x축, y축 이름 설정

line6 : 출력

비선형의 데이터를 단순 선형 모델로 예측한 결과 회귀선이 실제 데이터와 오차가 많다.

6. 다항 회귀 모델의 결과예측을 시각화하기

plt.scatter(x, y, color = 'red')
plt.plot(x, lin_reg_2.predict(x_poly), color = 'blue')
plt.title('Truth or Bluff(polynomial Regression)')
plt.xlabel('Position Level')
plt.ylabel('Salary')
plt.show()

line2 : line_reg_2를 이용할 때는 다양한 제곱으로 변환이 완료된 특정 x의 행렬에 적용해야한다.

           x 자체는 단일 특성이므로 변환 없이 사용할 수가 없다.

 

이 데이터에서는 선형 회귀보다 다항 회귀가 더 높은 정확도를 보여준다.

 

7. (6)의 결과를 더 매끄럽게 시각화하기

X_grid = np.arange(min(x), max(x), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(x, y, color = 'red')
plt.plot(X_grid, lin_reg_2.predict(poly_reg.fit_transform(X_grid)), color = 'blue')
plt.title('Truth or Bluff (Polynomial Regression)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

x축의 범위를 더 촘촘하게(0.1간격)으로 나눠서 회귀선을 표시하면 더 매끄러워진다.

numpy의 arange 함수를 이용한다.

회귀선이 보기좋게 매끄러워 졌다.

 

8. a가 거짓인지 아닌지 확인해보기

 우리가 이러한 작업을 한 이유는 새로운 고용자 a가 전 직장에서 받는 임금이 맞는지를 알기 위해 했으므로, 

그의 말이 맞는지 확인해보자.

print(lin_reg_2([[6.5]]))

=>[158862.45265155] 로 160,000$를 받았다는 a의 말이 맞을 수 있다는 결론이 나온다.

 

 

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 (수직방향)

 

결과

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

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

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

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 : 출력을 위해 사용한다

 

 

 

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

 

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

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

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

머신러닝 모델을 훈련시키기 전에 데이터를 전처리해야한다.

 

데이터 전처리는 아래와 같은 과정으로 이루어지며, 이미 잘 만들어진 라이브러리들이 많아 그것을 이용하면 된다.

 

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

위 데이터를 머신러닝 훈련에 적합하게 데이터 전처리 하는 법을 알아보자.

 

<목차>

1. 라이브러리 임포트

2. 데이터세트 임포트

3. 누락된 데이터 처리

4. 범주형 데이터 인코딩

   4-1. 독립 변수 인코딩 

   4-2. 종속 변수 인코딩

5. 데이터세트를 훈련세트와 테스트세트로 분할

6. 특징 스케일링

 

데이터 전처리

   i.  라이브러리 임포트 

  데이터 전처리를 위한 라이브러리는 numpy, matplotlib, pandas 가 있다.

import numpy as np
import matplotlib as mlt
import pandas as pd

 뒤의 as~ 부분의 예로 numpy 를 np라는 별명으로 사용할 것이라는 뜻이다.

 

 

   ii.  데이터셋 불러오기

  판다스에 데이터셋을 불러올 수 있는 메소드가 있다. 이를 이용하여 데이터셋을 불러올 수 있다.

dataset = pd.read_csv('Data.csv')
x = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

 x 는 특징행렬로 마지막의 예측열을 제외한 모든 데이터값을 가진다.

 y 는 종속변수 벡터인데 우리가 할 예측결과를 저장하는 변수이다.

 x 와 y 두개의 Entity를 선언하는 이유는 모델들을 만들 때 사용하는 클래스들이 데이터 세트 전체를 원하지 않고, 두 개의

  분리된 Entitiy를 원하기 때문이다.

 

 

 iii. 누락된 데이터 처리하기

 누락된 데이터는 모델을 훈련시킬 때, 오류가 생길 수 있으므로 반드시 처리해야한다.

처리하는 방법으로는 누락된 데이터 집합의 평균또는 중간값을 구해 누락된 데이터를 처리해주면 된다.

어떠한 경우에는 그냥 누락된 데이터를 무시해버린다. 

누락된 데이터를 처리할 때 사이킷런이라는 과학 라이브러리를 사용할 것이다.

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values = np.nan, starategy = 'mean')
imputer.fit(x[:, 1:3])
x[:, 1:3] = imputer.transform(x[:,1:3])

line 1 : 사이킷런의 impute 모듈에 접근해, SimpleImputer라는 클래스를 임포트한다.

line 2 : SimpleImputer의 인스턴스 imputer를 생성하고, 누락된 값에 대해 평균을 적용하는 객체를 생성한다.

line 3 : SimpleImputer 클래스의 fit 메소드가 객체 imputer와 특징행렬(x)를 연결해준다.

            fit 함수가 결측치를 보고 평균값을 계산한다.

line 4 : transform 메소드는 누락된 값을 해당 열의 평균값으로 대체해준다.

 

 

 iv. 범주형 데이터를 인코딩하기

  해당 열의 데이터 값이 France, Germany, Spain 과 같이 범주형 데이터라면 이 데이터를 숫자로 바꿔야한다.

 만일, 프랑스 독일 스페인을 각각 0,1,2로 바꿔버리면 머신러닝 모델이 숫자 사이의 관계가 있다고 여기기때문에

 one-hot 인코딩 방식을 이용해야한다.

 독일 (1 0 0), 스페인 (0 1 0) 프랑스 (0 0 1)로 이진 벡터화해서 인코딩하면 세 개의 열이 새로 생성되는 의미이고, 숫자의     순서도 사라진다. 만일 우리가 가진 데이터가 독립 변수에도 범주형 데이터가 존재하고, 예측해야하는 종속 변수도 범주형 데이터가 존재한다면 독립 변수 인코딩 후에 종속 변수 인코딩을 한다.

 

  

 iv-1. 독립 변수를 인코딩하기

from sklearn.compose import ColumTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumTransformer(transformers= [('encoder', OneHotEncoder(), ['열'])], remainder='passthrough')
x = np.array(ct.fit_transform(x))

line 1 : 사이킷런의 compose 모듈에 접근해, ColumTransformer라는 클래스를 임포트한다.

line 2 : 사이컷런의 preprocessing 모듈에 접근해, OneHotEncoder라는 클래스를 임포트한다.

line 3 : ColumTransformer는 두 개의 인자를 요구하는데, (변환하고싶은열, 유지하고싶은열) 의 형식이다.

line4 :  np.array 형식으로 반환 받을 것이고, 객체 ct(인코딩)와 특징행렬(독립변수) x를 연결한다.

 

 

iv-2. 종속 변수를 인코딩하기

 이 데이터셋의 종속 변수는 물건을 사는가(Yes), 물건을 사지 않는가(No)의 범주형 데이터이고, Yes/No는 하나뿐인 싱글 벡터 이다.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)

line1 : 사이킷런의 preprocessing 모듈에 접근해, OneHotEncoder라는 클래스를 임포트한다.

line2 : Yes/No는 하나뿐인 싱글 벡터이다. 어떤 것을 인코딩해야하는지 명확하므로 괄호를 비워도 된다. Yes =>1, No =>0

line3 : 종속 변수 벡터라서 np.array 형식이 필요없다.

 

 

-------- 이 과정까지하면 학습에 필요한 데이터 자료의 형태는 준비한 것이다.--------

 

 

v. 데이터셋을 훈련 세트와 테스트 세트로 나누기

 훈련 세트에 특징 행렬과 종속 변수 벡터 한 쌍, 테스트 세트에 똑같은 한 쌍을 만들 것이다.

분할 크기의 권장 값은 훈련 세트 80% 관측값, 테스트 세트 20% 관측값이다.

훈련 세트로는 머신 러닝 모델을 훈련시킨다.  ==>  훈련된 머신 러닝 모델을 A라고 하면

잘 훈련된 A에 테스트 세트의 특징 행렬 데이터를 넣었을 때, 나오는 결과를 B라고 하면

우리는 B와 실제 데이터인 테스트 세트의 종속 변수 벡터와의 비교를 통해 정확도를 비교하게 된다.

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 = 1)

line1 : 사이킷런의 model_selection 모듈에 접근해, train_test_split 이라는 함수를 임포트한다.

line2 : train_test_split 함수는 4개의 인자를 요구한다. 2개는 데이터 세트 전체를 요구하지 않고 특징 행렬 x와 종속 변수 벡터 y를 요구한다. 인자 4개로는 (특징행렬, 종속변수벡터, 분할크기, 무작위 요소) 이다.

 

 

vi. 특징을 스케일링하기

 일부 기계 모델에서 일부 특성이 다른 특성에 의해 지배되어 기계 모델에 인식되지 않은 상황을 방지하기 위해 모든 특성을 동일한 크기로 조정해주는 도구이다.

표준화 방식으로 스케일링 하면 모든 데이터 값이 원래 값에 기반하여 -3 ~ 3 의 값으로 변경된다.

정규화 방식으로 스케일링 하면 모든 데이터 값이 원래 값에 기반하여 0 ~ 1 의 값으로 변경된다.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train['범위'] = sc.fit_transform(x_train['범위'])
x_test['범위'] = sc.fit_transform(x_test['범위'])

line1 : 사이킷런의 preprocessing 모듈에 접근해, StandardScaler라는 클래스를 임포트한다.

line2 : StandardScaler의 인스턴스 sc를 생성

line3 : fit은 각 평균과 표준편차를 구하는 것이고, transform은 이 공식을 적용해서 표준화나 정규화를 하는 것이다.

 

i ~ vi 과정을 마치면 우리는 머신러닝 훈련을 위한 준비는 모두 마친것이다.

 

***

Q. 데이터셋을 훈련 세트와 테스트 세트로 나누고, 특징을 추출해야하는가? 아니면 그 반대인가?

 

A. 데이터셋을 두 세트로 나누고, 특징을 추출해야한다.

    훈련이 끝날 때까지 가져오면 안되는 테스트 정보가 유출되는 것을 막기 위해서이다.

 

 

데이터를 전처리를 할 때 변함없이 진행되는 부분이 있다.

i. 라이브러리 임포트

ii. 데이터셋 불러오기 + 특징 행렬과 종속 변수 벡터 만들기

iii. 훈련 세트와 테스트 세트를 만드는 것

위 3 과정은 이미 템플릿이 있을 정도로 변함없이 자주 사용하는 부분이다. 이미 있는 것을 사용하면 빠르고 쉽게 데이터 전처리가 가능하다.