import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import os
os.chdir("데이터가 담겨있는 폴더경로")
os.getcwd() # 현재 위치
wine = pd.read_csv("winequality-white.csv", sep=";", encoding='utf-8')
가지고있는 데이터를 불러보았다.
간단히 데이터는 이렇게 생겼다.
데이터의 모양은 (4898, 12)로 4898개의 행과 12개의 컬럼으로 이루어진 데이터이다.
y = wine["quality"]
x = wine.drop("quality", axis=1)
라벨과 데이터를 구분하여 변수에 담았다.
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.2)
8:2로 학습데이터와 테스트데이터를 구분하였다.
model = RandomForestClassifier()
model.fit(x_train, y_train)
score = model.score(x_test, y_test)
데이터를 학습시키고 바로 평가까지 해보려고한다.
y_pred = model.predict(x_test)
print(classification_report(y_test, y_pred))
print("정답률=", accuracy_score(y_test, y_pred))
print(score)
정확도가 생각보다 저조한것 같다. 원인을 파악해보면
len(set(y))
# 출력값이 7로 찍힌다. 즉라벨이 7개
다른데이터의 갯수들에 비해 8,4,3,9 퀄리티로 분류된 데이터가 매우 적다는 것을 알 수 있다.
즉 학습데이터가 부족해서 벌어진 일이다.
newlist = []
for v in list(y):
if v <= 4:
newlist += [0]
elif v <= 7:
newlist += [1]
else:
newlist += [2]
그래서 우리는 라벨을 3개로 줄이기로했다. 각 구간을 합치어 7개였던라벨을 다시 3개로 나누는 작업을 했다.
그리고 다시학습을 시키어 나온정확도는 전보다 훨씬 높아졌다.
'머신러닝 > 입문' 카테고리의 다른 글
케라스를 이용해보기 (0) | 2019.09.30 |
---|---|
SVC 서포트 벡터 머신에 대한 간단한 예제 (0) | 2019.09.30 |