機械学習-ワインデータ分析
ワインデータ分析
1.ワインデータの概要
人類史上最古の酒とされています.
# 데이터 읽기
import pandas as pd
red_wine = pd.read_csv('winequality-red.csv', sep=';')
white_wine = pd.read_csv('winequality-white.csv', sep=';')
# 레드 와인/화이트 와인 데이터 연결
# color 컬럼 추가하여 구분
red_wine['color'] = 1.
white_wine['color'] = 0.
wine = pd.concat([red_wine, white_wine])
wine.reset_index(drop=True, inplace=True)
wine.info()
# 내용 확인
wine['quality'].unique()
wine['quality'].value_counts()
# quality 히스토그램
import plotly.express as px
fig = px.histogram(wine, x='quality')
fig.show()
# 레드/화이트 와인별 등급 Histogram
fig = px.histogram(wine, x='quality', color='color')
fig.show()
2.赤ワイン、白ワインの分類
# 라벨 분리
x = wine.drop(['color'], axis=1)
y = wine['color']
# 훈련용, 테스트용 나누기
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)
# y값 확인
np.unique(y_train, return_counts=True)
# 훈련용과 테스트용이 레드/화이트에 따라 어느정도 구분되었는지 확인
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.75)
fig.show()
# 결정 나무 훈련
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
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)
重要判断
# decision tree 그래프
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
plt.figure(figsize=(12, 8))
plot_tree(wine_tree)
plt.show()
3.データ前処理
# 와인 데이터의 몇 개 항목의 Boxplot 그리기
# 컬럼값의 차이가 심하면 훈련이 제대로 이루어지지 않을 수 있다.
# Scaler를 통해 정리할 수 있다.
# => 결정 나무에서는 이런 전처리는 의미를 가지지 않는다.
# => 주로 Cost Function을 최적화할 때 유효하다
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()
# MinMaxScaler, StandardScaler
from sklearn.preprocessing import MinMaxScaler, StandardScaler
MMS = MinMaxScaler()
SS = StandardScaler()
MMS.fit(x)
SS.fit(x)
x_ss = SS.transform(x)
x_mms = MMS.transform(x)
x_ss_pd = pd.DataFrame(x_ss, columns=x.columns)
x_mms_pd = pd.DataFrame(x_mms, columns=x.columns)
# x_mms_pd
fig = go.Figure()
fig.add_trace(go.Box(y=x_mms_pd['fixed acidity'], name='fixed acidity'))
fig.add_trace(go.Box(y=x_mms_pd['chlorides'], name='chlorides'))
fig.add_trace(go.Box(y=x_mms_pd['quality'], name='quality'))
fig.show()
# x_ss_pd
fig = go.Figure()
fig.add_trace(go.Box(y=x_ss_pd['fixed acidity'], name='fixed acidity'))
fig.add_trace(go.Box(y=x_ss_pd['chlorides'], name='chlorides'))
fig.add_trace(go.Box(y=x_ss_pd['quality'], name='quality'))
fig.show()
# MinMaxScaler
x_train, x_test, y_train, y_test = train_test_split(x_mms_pd, 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 : {}'.format(accuracy_score(y_train, y_pred_tr)))
print('Train Acc : {}'.format(accuracy_score(y_test, y_pred_test)))
# StandardScaler
x_train, x_test, y_train, y_test = train_test_split(x_ss_pd, 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 : {}'.format(accuracy_score(y_train, y_pred_tr)))
print('Train Acc : {}'.format(accuracy_score(y_test, y_pred_test)))
# 레드 와인과 화이트 와인을 구분하는 중요 특성
dict(zip(x_train.columns, wine_tree.feature_importances_))
4.味のバイナリ分類
# taste 컬럼 추가
wine['taste'] = [1. if grade > 5 else 0. for grade in wine['quality']]
wine.info()
# 레드/화이트 와인 분류와 동일하게 진행
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)
# 훈련 데이터 fit
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 : {}'.format(accuracy_score(y_train, y_pred_tr)))
print('Test Acc : {}'.format(accuracy_score(y_test, y_pred_Test)))
# Decision Tree 확인
plt.figure(figsize=(12, 8))
plot_tree(wine_tree, feature_names=X.columns)
plt.show()
# 레드/화이트 와인 분류와 동일하게 진행
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)
# 훈련 데이터 fit
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 : {}'.format(accuracy_score(y_train, y_pred_tr)))
print('Test Acc : {}'.format(accuracy_score(y_test, y_pred_Test)))
# Decision Tree
plt.figure(figsize=(12, 8))
plot_tree(wine_tree, feature_names=X.columns)
plt.show()
Reference
この問題について(機械学習-ワインデータ分析), 我々は、より多くの情報をここで見つけました https://velog.io/@skarb4788/머신-러닝-와인-데이터-분석テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol