python을 이용한 Wine Quality 데이터 Decision Tree


데이터셋 다운로드

https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/


UCI Wine Quality Data set

Attribute information

  • 1 - fixed acidity
  • 2 - volatile acidity
  • 3 - citric acid
  • 4 - residual sugar
  • 5 - chlorides
  • 6 - free sulfur dioxide
  • 7 - total sulfur dioxide
  • 8 - density
  • 9 - pH
  • 10 - sulphates
  • 11 - alcohol
  • 12 - quality (score between 0 and 10)



Python 에서 Decision Tree를 이미지화 해줄 Graphviz 설치.

https://graphviz.gitlab.io/_pages/Download/Download_windows.html


Zip 파일을 받아 원하는 경로에 설치를 해줍니다.

C:\Program Files (x86)\graphviz-2.38


코드 구현 


CSV 데이터 확인.


import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

wine_data = pd.read_csv('winequality-white.csv',delimiter=';',dtype=float)

wine_data.head(10)



데이터 자르기 및 qulity 변수 값 변경.


x_data = wine_data.iloc[:,0:-1]

y_data = wine_data.iloc[:,-1]



# Score 값이 7보다 작으면 0,  7보다 크거나 같으면 1로 값 변경.

y_data = np.array([1 if i>=7 else 0 for i in y_data])

x_data.head(5)


# 트레인, 테스트 데이터 나누기.

train_x, test_x, train_y, test_y = sklearn.model_selection.train_test_split(x_data, y_data, test_size = 0.3,random_state=42)



Decision Tree 


모델 구축


# criterion = default = gini, splitter =default = best (best :최적의 해 -> 푸르닝 효과!?

,random은 랜덤하게 나눠줌.)

#                                                         entropy,  트리 계층 depth                       

wine_tree = tree.DecisionTreeClassifier(criterion='gini', max_depth=5,splitter='random')

wine_tree.fit(train_x, train_y)


성능


y_pred_train = wine_tree.predict(train_x)

y_pred_test = wine_tree.predict(test_x)


print("Train Data:", accuracy_score(train_y, y_pred_train))

print("Test Data" , accuracy_score(test_y, y_pred_test))



from sklearn.metrics import classification_report

y_true, y_pred = test_y, wine_tree.predict(test_x)

print(classification_report(y_true, y_pred))




시각화


import os

import pydotplus

from sklearn.tree import export_graphviz

from IPython.display import Image


# path 설정 -  자신의 설치한 경로.

os.environ["PATH"] += os.pathsep + r'C:/Program Files (x86)/graphviz-2.38/release/bin'


dot_data = export_graphviz(wine_tree, out_file=None,feature_names=x_data.columns,

                                class_names='Qual', filled=True, rounded=True, special_characters=True)

graph = pydotplus.graph_from_dot_data(dot_data)


# 이미지의 depth 는 모델 학습의 depth의 영향을 받음.

# 현재 이미지는 depth = 5 

Image(graph.create_png())




+ Recent posts