결정목의 차이에 관하여 (E 자격 대책)

15508 단어 결정 트리E자격
결정목, Random Forest, 경사도 상승, 돌기
나무 구조의 알고리즘이 많아서 어떻게 된 일인지 모르니 총괄해 봅시다.
카탈로그
결정 트리
은괴
Random Forest
계단식 부스
총결산
결정 트리
나무가 YES냐, NO냐의 질문에 대답하는 것으로 구성된 나무 구조의 수법을 결정한다.
장점은
• 결과를 이해하기 쉬운 모형
• 데이터의 비율이 일정하지 않으므로 정규화 또는 표준화 필요 없음
들 수 있어.
import mglearn
mglearn.plots.plot_animal_tree()

위의 그림에서 보듯이 각 지점에 특징량에 대한 문제를 준비하여 분류와 회귀를 진행한다.
코드로 쓰면 이런 느낌이야.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer=load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, test_size=0.25)

tree=DecisionTreeClassifier(random_state=0)
tree.fit(X_train,y_train)
print("Accuracy on training set:{:3f}".format(tree.score(X_train,y_train)))
print("Accuracy on test set:{:3f}".format(tree.score(X_test,y_test)))
결실
Accuracy on training set:1.000000
Accuracy on test set:0.909091
구조를 시각화할 수 있다.
from sklearn.tree import export_graphviz
export_graphviz(tree, out_file='tree.dot', class_names=["malignant", "benign"],
                feature_names=cancer.feature_names, impurity=False, filled=True)

import graphviz

with open("tree.dot") as f:
  dot_graph=f.read()

graphviz.Source(dot_graph)

학습을 억제하기 위해max-depth,max_leaf_노데스 등을 준비했습니다.
은괴
여러 개의 약한 모형을 준비하고 다수결 수법을 취하다.장점은 배우기 어렵다는 것이다.
Random Forest
결정목의 단점으로 과도하게 적응하기 쉬운 곳을 열거할 수 있다.
따라서 조금씩 다른 결정나무를 준비해 다수결을 하는 방법을 랜덤숲이라고 한다.이것도 역시 백은의 한 수법이다.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_moons

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, stratify=y)

forest=RandomForestClassifier(n_estimators=5,random_state=2)
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{}".format(i))
  mglearn.plots.plot_tree_partition(X_train,y_train,tree,ax=ax)

mglearn.plots.plot_2d_separator(forest, X_train, fill=True, ax=axes[-1,-1],alpha=.4)
axes[-1,-1].set_title("Random Forest")
mglearn.discrete_scatter(X_train[:,0],X_train[:,1],y_train)

결실

예에서 경계선을 구하기 위해 다섯 그루의 나무를 준비했다.
방금 결정된 나무에 랜덤 숲을 적용해 계산한 데이터를 사용해 보자.

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer=load_breast_cancer()

X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, test_size=0.25)

forest=RandomForestClassifier(n_estimators=100,random_state=2)
forest.fit(X_train,y_train)
print("Accuracy on training set:{:3f}".format(forest.score(X_train,y_train)))
print("Accuracy on test set:{:3f}".format(forest.score(X_test,y_test)))
나무의 수는 100개다.
결과
Accuracy on training set:1.000000
Accuracy on test set:0.993007
일반적인 결정목의 정밀도보다 훨씬 낫다.
계단식 부스
무작위 삼림은 나무가 나란히 배열되어 있고, 사도 전시장은 나무가 나란히 배열된 이미지이다.

from sklearn.ensemble import GradientBoostingClassifier

grbt = GradientBoostingClassifier(random_state=0)
grbt.fit(X_train, y_train)

print("Accuracy on training set:{:3f}".format(grbt.score(X_train,y_train)))
print("Accuracy on test set:{:3f}".format(grbt.score(X_test,y_test)))
기본 트리 수는 100개입니다.
결과
Accuracy on training set:1.000000
Accuracy on test set:0.993007
총결산
결정목: YES 또는 NO의 질문에 대답하는 나무로 구성된 구조
데이터의 일부분을 이용하여 학습기를 제작하고, 여러 개를 조합하여 최종적으로 다수결 수법을 채택하다
랜덤 숲: 여러 개의 결정목을 한데 모아 최종 다수결을 하는 수법
계단식 전시: 학습기 A가 풀리지 않는 문제를 풀기 위해, 학습기 B가 풀리지 않는 문제를 풀기 위해, 학습기 C를 풀기 위해...중복되는 방법
참고 문헌
파이톤으로 시작된 기계학습--scikit-learn에서 학습하는 특징량 공학과 기계학습의 기초

좋은 웹페이지 즐겨찾기