본문 바로가기

카테고리 없음

머신러닝 예측-파이썬 sklearn load_wine 으로 와인의 등급 분류 예측하기

파이썬 사이킷런 내장 데이터 중에 load_wine 이라는 데이터가 있다. 이 데이터는 와인의 등급을 나눈 데이터이다. 데이터를 통해 와인의 등급을 Classification 해보도록 한다.

 

Classification(분류)

분류는 대표적인 지도학습 방법이다. 지도학습은 답이 주어진 데이터를 받아서 학습한 이후에 답이 주어지지 않은 데이터를 받았을 때 학습을 기반으로 답을 예측하는 것이다.

 

그러면 우선 파이썬으로 load_wine을 이용해서 와인 분류를 예측해보도록 하겠다.

from sklearn.datasets import load_wine
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np

# 와인 데이터를 로드한다.
wine = load_wine()
# 와인 데이터에서 feature 로 되어있는 데이터를 갖고 온다.
wine_data = wine.data
# 와인 데이터에서 target 데이터를 갖고온다.
wine_target = wine.target
# wine 데이터의 feature, target로 Dataframe을 만든다.
df_wine = pd.DataFrame(data = wine_data, columns=[wine.feature_names])
# feature 만 있는 데이터 프레임에 타겟 데이터를 추가한다.
df_wine['target'] = wine.target
df_wine

 

이렇게 하면 df_wine 의 값이 만들어져 나온다.

feature은 'alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline'

target은 'class_0', 'class_1', 'class_2'로 구성되어 있고 0, 1, 2로 구분한다.

 

그 다음 학습용 데이터와 테스트 데이터를 만들어야 한다. 학습용 데이터와 테스트 데이터를 꼭 써야하는 이유는 학습용 데이터는 말 그대로 학습을 위한 데이터이다. 만약 학습용 데이터와 테스트 데이터가 같다면 정확도가 1이 나올 것이다. 이것은 예측 문제가 시험에 똑같이 나오는 것을 의미한다. 그러면 시험의 의미가 없다.

그래서 학습용 데이터로 학습을 시키고, 테스트 데이터로 얼마나 정보가 정확한지 테스트를 해줘야 한다.

사이킷런은 train_test_split()로 학습용 데이터, 테스트 데이터의 분류를 도와준다.

 

 

x_training, x_test, y_training, y_test = train_test_split(wine_data, wine_target, test_size=0.3)

train_test_split의 첫번째 데이터인 wine_data는 feature의 데이터이고

두번째 데이터인 wine_target은 target 데이터세트이다.

test_size는 전체 데이터 중에서 테스트 데이터의 비율이다. 현재는 0.3으로 해놨으니 0.7은 학습 데이터이고 0.3은 테스트 데이터이다.

 

 

dtc = DecisionTreeClassifier()
dtc.fit(x_training, y_training)

DecisionTreeClassifier 객체를 행성한다. 생성된 DecisionTreeClassifier 객체의 fit() 을 이용해서 학습용 데이터의 feature 데이터, target 데이터를 이용하여서 학습을 수행한다.

학습을 수행하면 DecisionTreeClassifier 객체가 학습을 시켜서 예측을 수행 할 수 있다. 예측은 우리가 정해놨던 테스트 데이터로 하면 된다. 여기서 다시 한번 강조할 것은 학습용 데이터로 예측을 하면 안된다 ! 

 

 

predict = dtc.predict(x_test)

위에서처럼 x_test 데이터로 예측을 시행하였다. predict를 보면

[1 2 0 0 0 0 2 1 1 0 0 1 2 0 1 1 1 0 0 2 1 0 1 1 0 1 2 0 1 1 0 0 2 1 0 2 2 0 2 1 2 1 0 1 0 1 1 1 2 0 0 0 2 2]

이런식의 target 데이터를 볼 수 있다.

 

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, predict))

예측 결과를 기반으로 예측 성능을 평가 할 수 있다. 일반적으로 정확도를 측정해보는데 사이킷런에서 제공하는 정확도 측정 함수 accuracy_score() 함수가 있다. accuracy_score()의 파라미터는 실제 target 데이터 세트, 예측 target 데이터 세트를 입력한다.

해당 결과의 예측 정확도는 0.7777 이 나왔다.