본문 바로가기

머신러닝/입문

랜덤포레스트에 대해 간단히 실습해보자

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

가지고있는 데이터를 불러보았다.

 

wine 데이터 형태

간단히 데이터는 이렇게 생겼다.

 

데이터의 모양은 (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