결정 트 리 알고리즘 원리 와 실례

결정 트 리 는 뿌리 노드 부터 한 걸음 한 걸음 잎 노드 (최종 결정) 까지 모든 데이터 가 최종 적 으로 잎 노드 에 떨 어 지고 분류 도 할 수 있 고 회귀 도 할 수 있다.
노드 는 1. 뿌리 노드 2. 비 잎 노드 와 가지 3. 잎 노드 로 나 눌 수 있다.
결정 트 리 알고리즘 의 시각 화 효과 가 매우 좋 은 것 도 이 알고리즘 의 장점 이다.
엔트로피 결정 트 리 는 데 이 터 를 분리 하 는 표준 엔트로피 로 엔트로피 를 선택 합 니 다. 엔트로피 의 정 의 는 무 작위 변수 불확실 성의 도량형 엔트로피 의 공식 은 H (X) = − ← p i log * 8289 ° p i H (X) = - \ sum pi \ \ log pi H (X) = − ← pilogpi 가 pi = 0 또는 pi = 1 일 때 H (x) = 0 입 니 다.
서로 다른 의사 결정 트 리 알고리즘 ID3: 정보 이득 을 데이터 분류의 기준 으로 사용 합 니 다. 즉, 현재 모든 기준 에서 데이터 정보 이득 이 가장 큰 지 표를 현재 분류 기준 으로 선택 합 니 다. C 4.5: 정보 이득 률 을 데이터 분류의 기준 으로 사용 합 니 다. 즉, 정보 이득 뿐만 아니 라 기준 자체 의 엔트로피 도 고려 합 니 다. CART: GINI 계 수 를 데이터 분류의 기준 으로 사용 합 니 다. Gini ⁡ ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 \operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k} ^ {2} Gini (p) = ∑ k = 1K pk (1 − pk) = 1 − ∑ k = 1K pk2, GINI 계수 와 엔 트로피 는 무 작위 변수의 불확실 성 을 평가 하 는 지표 중 CART 알고리즘 이 가장 널리 사용 하 는 결정 트 리 알고리즘 이다
결정 트 리 가지치기 결정 트 리 가지치기 의 원인: 결정 트 리 모델 이 발생 하 는 모델 결과 가 너무 적합 할 위험 이 크 고 이론 적 으로 데 이 터 는 완전히 분 리 될 수 있다.
정책: 미리 종 이 를 자 르 고 나중에 가 지 를 자 릅 니 다.
예비 가지치기: 결정 트 리 를 만 들 면서 가 지 를 자 르 는 작업 (더욱 실 용적 인 방법) 을 한다. 구체 적 인 방법 은 나무의 최대 깊이 를 제한 하고 최대 잎 노드 수 를 제한 하 며 잎 노드 의 최소 견본 수 (앞의 세 가지 가 가장 자주 사용 하 는 방법) 를 제한 하고 최소 정보 증 가 를 제한 하 는 등 방법 이 있다.
후 가지치기: 결정 트 리 를 만 든 후에 가지치기 작업 을 하 는데 구체 적 으로 는 일정한 평가 기준 을 통 해 C.α ( T ) = C ( T ) + α ⋅ ∣ T l e a f ∣ C_{\alpha}(T)=C(T)+\alpha \cdot\left|T_{l e a f}\right| Cα​(T)=C(T)+α* 8901 ° Tleaf * 8739 °, 그 중에서 C (T) 는 현재 손실 을 대표 하고 계산 방법 은 잎 노드 견본 수 * Gini * 8739 ° T l e a f * 8739 ° \ left | T{l e a f} \ \ right | 8739 ° Tleaf 8739 ° 잎 노드 수 를 대표 합 니 다.
의사 결정 트 리 인 스 턴 스
#  sklearn    ------------------------------------------------------------------------------------------------------------------
from sklearn.datasets.california_housing import fetch_california_housing

housing = fetch_california_housing()
print(housing.DESCR)
print(housing.data.shape)



#     --------------------------------------------------------------------------------------------------------------------------
from sklearn import tree


dtr = tree.DecisionTreeRegressor(max_depth=2)#         
dtr.fit(housing.data[:, 6:8], housing.target)#fit    




#     ,    graphviz  ---------------------------------------------------------------------------------------------------------
dot_dat = tree.export_graphviz(
    dtr,
    out_file=None,
    feature_names=housing.feature_names[6: 8],
    filled=True,
    impurity=False,
    rounded=True
)

graph = pydotplus.graph_from_dot_data(dot_dat)
graph.get_nodes()[7].set_fillcolor("#FFF2DD")
graph.write_png("dsa.png")



#             -----------------------------------------------------------------------------------------------------
from sklearn.model_selection import train_test_split

data_train, data_test, target_train, target_test = train_test_split(housing.data, housing.target, test_size=0.1,
                                                                    random_state=42)
dtr.fit(data_train, target_train)
print(dtr.score(data_test, target_test))#      score      ,         




#      --------------------------------------------------------------------------------------------------------------------
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestRegressor

tree_param_grid = {"min_samples_split": list((3, 6, 9)), "n_estimators": list((10, 50, 100))}
grid = GridSearchCV(RandomForestRegressor(), tree_param_grid, cv=2)#        ,             ,             
grid.fit(data_test,target_test)
print(grid.best_estimator_,grid.best_params_,grid.best_score_)

좋은 웹페이지 즐겨찾기