파이썬2020. 11. 14. 20:30
728x90

* 출처 : https://github.com/lsi8546/Wine



numpy, pandas, seaborn,

mat plot lib을 import합니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing
%matplotlib inline

# csv 파일을 wines에 읽어옴
wines = pd.read_csv('wine_dataset.csv')
wines

 

 

 

파일을 읽어온 wines의 style 칼럼의

value를 count 합니다.

normalize=True를 통해 그 값을 0~1 사이의 수치로 표현합니다.

 

data = wines["style"].value_counts(normalize=True)
data

 

 

white wine이 75%,

red wine이 25%로 구성되어 있다는 것을 알 수 있습니다.

 

 

scaling을 했더니 정확한 값이 나오지 않아서  (혹시 이유 아시는 분 댓글 부탁드립니다!)

그냥 wines_scale에 wines를 copy했습니다.

#Scaling the continuos variables
wines_scale = wines.copy()
# scaler = preprocessing.StandardScaler()
# columns = wines.columns[0:12]
# wines_scale[columns] = scaler.fit_transform(wines_scale[columns])
# wines_scale.head()

 

파일의 'style' 칼럼만 읽어옵니다

# label_encoder = preprocessing.LabelEncoder()
le = wines_scale['style']
print(le)

 

 

 

33%를 테스트 코드로 이용합니다.

(자료가 많아서 67%로 학습)

 

X : style 칼럼을 제외한 항목들

y : style 칼럼의 항목들

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(wines_scale.iloc[:,0:12], le, test_size=0.33, random_state=8)
#[0:12]는 0~11

 

X와 y를 출력해보겠습니다

print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)

 

 

X_train : X_test = 4352 : 2145 가 거의 67:33

y_train : y_test 도 거의 67:33 인 것을 알 수 있습니다.

 

 

세 가지 모델을 이용했습니다.

* DecisionTreeClassifier

* RandomForestClassifier

* LogisticRegression

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 결정트리, Random Forest, 로지스틱 회귀를 위한 사이킷런 Classifier 클래스 생성
dt_clf = DecisionTreeClassifier(random_state=11)
rf_clf = RandomForestClassifier(random_state=11)
lr_clf = LogisticRegression()

# DecisionTreeClassifier 학습/예측/평가
dt_clf.fit(X_train , y_train)
dt_pred = dt_clf.predict(X_test)
print('DecisionTreeClassifier 정확도: {0:.4f}'.format(accuracy_score(y_test, dt_pred)))

# RandomForestClassifier 학습/예측/평가
rf_clf.fit(X_train , y_train)
rf_pred = rf_clf.predict(X_test)
print('RandomForestClassifier 정확도:{0:.4f}'.format(accuracy_score(y_test, rf_pred)))

# LogisticRegression 학습/예측/평가
lr_clf.fit(X_train , y_train)
lr_pred = lr_clf.predict(X_test)
print('LogisticRegression 정확도: {0:.4f}'.format(accuracy_score(y_test, lr_pred)))

 

 

모델별로 정확도가 아주 높게 나오는 것을 알 수 있습니다.

 

 

[임의의 값으로 테스트]

 

기존 데이터 베이스에 없는 임의의 red wine 값을 넣었습니다.

my_wine = [[7.9,0.6,0.06,1.6,0.069,15,59,0.9964,3.3,0.46,9.4,5]]

 

예측한 값을 my_pred에 넣습니다. (rf_clf 모델이용)

my_pred = rf_clf.predict(my_wine)
my_pred

 

 

결과가 red로 잘 나오는 것을 확인할 수 있습니다 :)

 

 

* 이용 데이터

 

wine_dataset.csv
0.37MB

 

 

* 추가 테스트 해보고 싶을때

 

winequality-red.csv
0.08MB
winequality-white.csv
0.25MB

 

반응형
Posted by mminky