앞선 포스팅에서 accuracy가 100% 나온 것을 기억할 것이다.
예측을 사용할 시 새로운 데이터를 넣어야 하는데, 동일한 데이터로 훈련과 예측을 하니 정확도가 100%가 나오는 것이다.
이럴 때는 train dataset, test dataset을 분류해줘서 학습시키면 문제가 해결된다.
문제 해결이라기 보단 분리는 필수적으로 해줘야한다.
scikit-learn에서는 이 필수 기능을 당연히 API로 제공하고 있으며, model_selection
의 train_test_split()
함수이다.
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=42)
train_test_split는
위 4개를 묶어서 반환 해주며, unpacking해서 쓴다.
이제 train data, test data를 나눈 것을 적용해서 학습을 시키고 예측을 해보고 accuracy체크를 해보자.
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 데이터셋 로드하기
data = load_wine()
# 훈련용 데이터셋 나누기
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=5)
# 훈련하기
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 예측하기
y_predict = model.predict(X_test)
# 정답률 출력하기
print("accuracy=", accuracy_score(y_test, y_predict))
------------------------------------------------------
accuracy= 0.9722222222222222