본문 바로가기

머신러닝

학습 데이터와 훈련 데이터(Training Data and Testing Data)

반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Conducter'입니다.

오늘 알아볼 내용은 학습 데이터와 훈련 데이터(Training Data and Testing Data)입니다.

 

 머신러닝을 공부해보신 분들이라면 아마 Training DataTesting Data에 대해 들어 보셨을 겁니다. 

Training Data는 어떠한 모델을 학습시키는데 쓰이는 데이터를, Testing Data는 이렇게 학습된 모델이 잘 작동하는지 테스트하는 데 사용하는 데이터를 의미합니다. 그럼 이렇게 둘을 분리하는 이유는 무엇일까요?

만약 둘을 분리하지 않고 학습을 시키게 되면 성능을 테스트할 때 학습했던 데이터들이 그대로 반영되기 때문에 정확한 성능을 예측하기가 힘듭니다. 이는 학창 시절 시험문제가 교과서 예제와 동일하게 출제되지 않는 것과 같은 맥락입니다. 머신러닝도 마찬가지로 Training Data와 실제 상황에서 쓰는 데이터가 다르기 때문에 이 부분을 인지해야 합니다. 

 

그러면  Training Data Testing Data는 어떻게 분리할까요? 분리하는 방법에는 다음 두 가지가 있습니다.

 

1. 직접 개발자가 손으로 지정해 주어 분리한다.

2. sklearn 내장 함수를 사용한다.

 

이 중 우리는 두 번째 방법에 대해 알아봅시다. 

 

먼저 sklearn의 train_test_split함수를 import 해줍니다. 

 

from sklearn.model_selection import train_test_split
#train 샘플과 test 샘플을 나눠줌

 

 

그 다음 아래와 같이 함수를 지정해 주는데 여기서 X는 Xdata를 y는 ydata를 의미합니다. test_size는 테스트 데이터의 비율을 의미합니다. 즉 아래 코드의 경우 Training Data = 80%, Testing Data = 20% 임을 의미합니다. random_state의 경우 지정을 하지 않으면 실행할 때마다 Training Data와 Testing Data가 바뀝니다. 반대로 random_state=42로 지정을 해주면 바뀌지 않습니다.

 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
#변한다
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
#안변한다

 

 

그러면 이제 간단한 예제를 통해 알아보도록 하겠습니다.

 

먼저 필요한 라이브러리를 import 해줍니다.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
#train 샘플과 test 샘플을 나눠줌

 

 

각자 원하는 데이터를 가져옵니다. 이 예제에서는 주행거리와 연식에 따른 중고 자동차 값을 가져왔습니다.

 

df = pd.read_csv("carprices.csv")

 

carprices.csv
carprices.csv
0.00MB

 

X_data와 y_data를 분리해줍니다. 우리가 원하는 것은 가격이므로 y_data를 가격으로 설정해주고, 나머지는 x_data로 설정해 줍니다.

 

X = df[['Mileage', 'Age(yrs)']]
y = df[['Sell Price($)']]

 

 

test_size를 20%로 지정해주고 train_test_split함수를 사용하여 Training Data와 Testing Data를 분리해 줍니다.

 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
#변한다
#X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
#안변한다

 

 

 

모델을 학습시켜줍니다. 

 

model = LinearRegression()
model.fit(X_train, y_train)

 

 

Testing Data의 예측값을 확인해주면 20%인 4개가 나오는 것을 확인할 수 있습니다.

 

model.predict(X_test)
array([[30059.77723146],
       [25367.33446905],
       [36856.89718382],
       [38635.98601488]])

 

마지막으로 이 모델의 정확도를 '. score'함수를 사용해 알아보면 92% 정도가 나오는 것을 확인할 수 있습니다. 

 

clf.score(X_test, y_test)
#모델의 정확도

 

오늘은 '학습 데이터와 훈련 데이터(Training Data and Testing Data)'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 저는 '코딩 오페라' 'Conductor'였습니다. 감사합니다.

 

 

<출처 및 참고 : 위키백과, code basics>

 

반응형