화이트 와인과 레드 와인을 맛과 퀄리티에 따라 비교해보려고 한다.
우선 화이트,레드 와인의 정보는 pinkwink님의 사이트에서 추출했다.
import pandas as pd
를 기본으로 기입해주고 시작했다.
red_url= 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-red.csv'
white_url = 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-white.csv'
red_wine =pd.read_csv(red_url, sep=';')
white_wine =pd.read_csv(white_url, sep=';')
head()를 확인해보면
concat 코드를 사용해서 화이트와인과 레드와인의 데이터를 묶어주었다.
이후 퀄리티에 따라서 histogram을 확인해보았다.
import plotly.express as px
fig = px.histogram(wine,x='quality')
fig.show()
데이터를 보면 5-6등급의 퀄리티 와인들이 가장 많은 것을 확인할 수 있다.
그렇다면 화이트, 레드 각각의 등급별 갯수는 어떻게 될까?
fig = px.histogram(wine,x='quality', color='color')
fig.show()
비록 색깔이 빨강은 화이트, 파랑은 레드를 표시하지만 차이를 볼 수 있다.
x = wine.drop(['color'], axis= 1)
y = wine['color']
1.color를 drop해주고 진행하였다.
from sklearn.model_selection import train_test_split
import numpy as np
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.2, random_state=13)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Histogram(x=x_train['quality'],name='Train'))
fig.add_trace(go.Histogram(x=x_test['quality'],name='Test'))
fig.update_layout(barmode='overlay')
fig.update_traces(opacity=0.7)
fig.show()
train, test 데이터가 무사히 입력된 것을 볼 수 있다.
from sklearn.tree import DecisionTreeClassifier
wine_tree= DecisionTreeClassifier(max_depth=2, random_state=13)
wine_tree.fit(x_train,y_train)
DecisionTreeClassifier(max_depth=2, random_state=13)
from sklearn.metrics import accuracy_score
y_pred_tr = wine_tree.predict(x_train)
y_pred_test = wine_tree.predict(x_test)
accuracy_score(y_train, y_pred_tr)
accuracy_score(y_test, y_pred_test)
각 accuracy_score가 train: 0.9553588608812776, test: 0.9569230769230769
로 성능이 95% 이상이 나왔다.
fig = go.Figure()
fig.add_trace(go.Box(y=x['fixed acidity'], name ='fixed acidity'))
fig.add_trace(go.Box(y=x['chlorides'], name ='chlorides'))
fig.add_trace(go.Box(y=x['quality'], name ='quality'))
fig.show()
wine['taste']= [1. if grade>5 else 0. for grade in wine['quality']]
wine.head()
x= wine.drop(['taste'],axis=1)
y= wine['taste']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=13)
wine_tree= DecisionTreeClassifier(max_depth=2, random_state=13)
wine_tree.fit(x_train,y_train)
DecisionTreeClassifier(max_depth=2, random_state=13)
값을 얻었고 train, test의 acc를 구해보자.
y_pred_tr = wine_tree.predict(x_train)
y_pred_test = wine_tree.predict(x_test)
print('Train Acc: ', accuracy_score(y_train, y_pred_tr))
print('Test Acc: ', accuracy_score(y_test, y_pred_test))
이상하게도 둘 다 100%가 나온다,,,
만일 머신러닝 중 test와 train의 성능이 1.0이 나온다.
의심부터 해보자,,
import matplotlib.pyplot as plt
import sklearn.tree as tree
plt.figure(figsize=(12,8))
tree.plot_tree(wine_tree, feature_names=x.columns)
왜 100%가 나왔는지 알 수 있다,,
고치는 방법.
x= wine.drop(['taste','quality'],axis=1)
y= wine['taste']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=13)
wine_tree= DecisionTreeClassifier(max_depth=2, random_state=13)
wine_tree.fit(x_train,y_train)
y_pred_tr = wine_tree.predict(x_train)
y_pred_test = wine_tree.predict(x_test)
print('Train Acc: ', accuracy_score(y_train, y_pred_tr))
print('Test Acc: ', accuracy_score(y_test, y_pred_test))
Train Acc: 0.7294593034442948
Test Acc: 0.7161538461538461
1.0이 아닌 다행히도 70% 이상의 성능을 보여주고 있다.
plt.figure(figsize=(12,8))
tree.plot_tree(wine_tree, feature_names=x.columns,
rounded=True,
filled=True)
plt.show()
오늘은 화이트 와인과 레드와인을 퀄리티에 따라 머신러닝을 이용해서 구분해봤다.!