-
[앙상블 모델] Random forest공부/A.I 2021. 6. 19. 20:08
파이썬 라이브러리를 활용한 머신러닝(번역개정판)
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현 현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭
books.google.co.jp
- Random Forest
랜덤 포레스트는 기본적으로 조금씩 다른 여러 결정 트리의 묶음이다.
각 결정 트리는 데이터의 일부에 과대적합하지만, 이 트리들을 많이 만들어 결과를 평균내게되면, 과대적합은 줄어들고
예측 성능은 유지된다.
- 랜덤 포레스트 만들기
랜덤 포레스트에서는 여러 다른 결정트리를 만들어야하는데, 이 때 트리를 랜덤하게 만드는 방법은 두가지이다.
1. 트리를 만들 때 사용하는 데이터 포인트를 무작위로 선택
2. 분할 테스트에서 특성을 무작위로 선택
- 데이터 포인트를 무작위로 선택
n_estimators 매개변수는 랜덤 포레스트 모델에서의 생성할 트리의 개수를 의미한다.
각 트리는 독립적으로 만들어지는데, 트리를 만들기 위해 데이터의 부트스트랩 샘플을 생성한다.
n_samples개의 데이터 포인트 중에서 n_samples 횟수만큼 반복추출한다. (중복가능)
▶ 중복이 가능하기 때문에, 어떤 데이터는 여러번 중복될수도, 어떤 데이터는 누락될수도있다.
- 특성을 무작위로 선택해 트리를 랜덤하게 만드는 방법
원래의 결정 트리 알고리즘과 다르게, 각 노드에서 전체 특성을 대상으로 최선의 테스트를 찾는 것이 아닌, 각 노드에서 후보 특성을 무작위로 선택한 후 이 후보들 중에서 최선의 테스트를 찾는다.
이 때, 몇개의 특성을 고를지는 max_features 매개변수로 조정한다.
max_features를 n_features로 설정하면, 각 노드에서 모든 특성을 고려하므로, 특성 선택에 무작위성이 포함되지 않는다.
만약, max_features=1 이면, 특성을 고를필요 없이 각 노드에서 무작위로 선택한 특성을 사용한다.
max_features가 커지면, 각각의 트리들은 비슷해지고, 가장 두드러진 특성을 이용해 데이터에 맞춰진다.
- 최종 예측값
랜덤 포레스트로 예측시 먼저 랜덤 포레스트 모델에 있는 모든 트리의 예측을 만든다.
회귀의 경우, 이 예측들을 평균하여 최종예측을 출력한다.
분류의 경우, 트리들이 예측한 확률을 평균내어 가장 높은 확률을 가진 클래스가 예측값이 된다.
- two_moon 데이터를 사용해 랜덤 포레스트 분석
import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split import mglearn X, y = make_moons(n_samples=100, noise=0.25, random_state=0) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) forest = RandomForestClassifier(n_estimators=5, random_state=0) forest.fit(X_train, y_train) fig, axes = plt.subplots(2, 3, figsize=(20, 10)) for i, (ax, tree) in enumerate(zip(axes.ravel(), forest.estimators_)): ax.set_title("Tree %d" %(i)) mglearn.plots.plot_tree_partition(X, y, tree, ax=ax) print("정확도 : %.2f" %(tree.score(X, y))) mglearn.plots.plot_2d_separator(forest, X, fill=True, ax=axes[-1, -1], alpha=.4) axes[-1, -1].set_title("random forest") mglearn.discrete_scatter(X[:,0], X[:,1], y)
'공부 > A.I' 카테고리의 다른 글
[앙상블 모델] GradientBoostingRegressor (0) 2021.07.17 [앙상블 모델] Random forest2 (0) 2021.06.27 graphviz ExecutableNotFound, PATH오류 (0) 2021.05.30 결정 트리 (0) 2021.05.30 Naive Bayes Classifier (0) 2021.05.30