인공지능/머신러닝

앙상블(Ensemble), 랜덤 포레스트(Random Forest)

해피밀세트 2020. 5. 27. 20:27

 

 

 

앙상블 (Ensemble)

  • 어려운 문제의 결론을 내기 위해 여러명의 전문가로 위원회를 구성해 다양한 의견을 수렴하고 결정하듯이
    앙상블 학습의 목표는 다양한 분류기의 예측 결과를 결합함으로써 단일분류기보다 신뢰성이 높은 예측값을 얻는다.
  • 문제를 해결하기위해 전문가들을 모으는것
  • voting : 서로 다른 알고리즘으로 결과를 낸뒤 다수결로 정하는것
  • bagging : 의사결정트리를 가지고 하되 트레인데이터의 표본을 뽑아낼때 중복으로 뽑아냄
                 하나의 알고리즘으로하되 데이터가 랜덤하게 뽑아냄(중복될 있음)

 

랜덤 포레스트(RandomForest)

  • decesion tree bagging 결합한 알고리즘
  • 매실행시마다 랜덤하게 관측치와 변수를 선택하므로 실행결과가 조금씩 달라지게된다.
    (변수를 바꿔가면서 실행한다.)
  • 그중에 가장 예측결과가 좋은걸로 리턴해준다.
  • 해석력이 좋지 않으므로 굳이 해석할 필요가 없는 쪽에 많이 (보안, 의료 ...)

 


 

1. 독일 은행 데이터 (R)

 

# 라이브러리 설치 및 불러오기

install.packages("randomForest")
library(randomForest)

 

# 데이터 불러오기 및 구조 확인

credit <- read.csv("C:/data/credit.csv")
str(credit)

# 랜덤포레스트 사용

rf <- randomForest(default~.,data=credit)

# 중요도 확인

importance(rf)

# 그래프 그리기

plot(rf)

# 그래프 그리기

varImpPlot(rf)

# 예측하기

predict_rf <- predict(rf,credit[,-17])
table(credit$default, predict_rf)

# 맥시멈정보 확인

summary(rf)

 

 

 

2. 아이리스 데이터 (파이썬)

 

# 라이브러리 및 데이터 불러오기

import pandas as pd

iris = pd.read_csv("c:/data/iris.csv")

 

# 훈련/테스트 데이터 나누지 않고 분석
# 종속변수, 독립변수 나누기


x = iris.iloc[:,0:4]
y = iris['Name']

#  의사결정 트리 만들기

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion="entropy",max_depth=3)
model.fit(x,y)

# 모델 예측

y_pred = model.predict(x)
y_pred

# 정확도 확인

from sklearn.metrics import accuracy_score
accuracy_score(y,y_pred)

# 라이브러리 불러오기

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report

 

# 모델 학습

model = RandomForestClassifier(criterion='entropy',
                               n_estimators=3,oob_score=True)
model.fit(x,y)

# 모델 예측

y_pred = model.predict(x)
print(classification_report(y,y_pred))
print("정답률=",accuracy_score(y,y_pred))

# 모델안에 몇번째거를 그릴 건지를 넣어야한다.

estimator = model.estimators_[0]

dot_data = export_graphviz(estimator, out_file=None,

                           feature_names=x.columns,

                           class_names=model.classes_,

                           filled=True, rounded=True,

                           special_characters=True)

 

# 의사결정트리 그래프 그리기

graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())

반응형