ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [앙상블 모델] Random forest
    공부/A.I 2021. 6. 19. 20:08

    https://books.google.co.kr/books?id=tPaTDwAAQBAJ&lpg=PP1&dq=python%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%ED%99%9C&hl=ko&pg=PP1#v=onepage&q&f=false 

     

    파이썬 라이브러리를 활용한 머신러닝(번역개정판)

    사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현   현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(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' 카테고리의 다른 글

    [앙상블 모델] Random forest2  (0) 2021.06.27
    graphviz ExecutableNotFound, PATH오류  (0) 2021.05.30
    결정 트리  (0) 2021.05.30
Designed by Tistory.