주제

화이트 와인과 레드 와인을 맛과 퀄리티에 따라 비교해보려고 한다.
우선 화이트,레드 와인의 정보는 pinkwink님의 사이트에서 추출했다.

import pandas as pd
를 기본으로 기입해주고 시작했다.

데이터 분석

  1. 우선 vs code에서 읽을 수 있도록 각 데이터를 pd.read_csv로 저장해준다.
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해주고 진행하였다.

  1. 머신러닝을 해야하니 train, test 코드를 작성한다.
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)
  1. 그래프를 통해 데이터가 잘 입력됐는지 확인해보자.
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 데이터가 무사히 입력된 것을 볼 수 있다.

  1. sklearn.tree를 사용해서 decisiontreecladdifier를 알아보자.
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)

  1. 머신러닝의 성능 알아보는 방법
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% 이상이 나왔다.

  1. 그래프로 보면서 살펴보도록 하자.
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%가 나왔는지 알 수 있다,,

  • quality 컬럼을 가지고 학습을 했기 때문에 100%라고 나온 것.
  • quality 컬럼으로 taste 컬럼을 만들었으니 quality 컬럼은 제거했어야 했다.

고치는 방법.

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()


오늘은 화이트 와인과 레드와인을 퀄리티에 따라 머신러닝을 이용해서 구분해봤다.!

profile
문과생 데이터사이언티스트되기 프로젝트

0개의 댓글