나무(분류)를 결정하는 초파라미터와 조화2
10687 단어 결정 트리슈퍼 매개 변수 조정초학자Python
개시하다
위스콘신주의 유방암 데이터 집합은 유방암의 종양이 양성인지 악성인지를 판정하는 데 사용되며, 대결책목과 초파라미터의 조정을 통해 분류기를 제작한다.데이터는 sklearn에 포함되어 있으며 데이터 수는 569인데 그 중에서 양성 212, 악성 357, 특징량은 30가지이다.
이전 글에서 가장 좋은 슈퍼 파라미터를 확정했다.이 기사에서 maxdepth와 Acuracy의 관계를 설명하고 트리의 시각화를 결정합니다.
시리즈
max_depth와 Acuracy의 관계
max_depth 이외의 매개 변수를 지난번에 최적화된 값으로 설정하고maxdepth를 1~10으로 돌릴 때의 Acuracy는 아래 그림과 같다.max_depth는 나무 깊이의 최대치를 나타낸다.max_depth가 3~5일 때,Acuracy가 가장 큰,maxdepth는 6 이후 Acuracy가 감소합니다.이것은 max입니다.나는 이것이 depth가 너무 커서 과도한 학습을 초래했다고 생각한다.또한 Acuracy에서 가장 큰 maxdepth는 3으로 판정되었다.
트리의 시각화 결정
결정 트리를dot 파일로 변환하고 Graphiviz를 통해 시각화된 그림을 표시하는 방법입니다.하이퍼매개변수가 최적화 값으로 설정됩니다.max_depth는 3이기 때문에 3단계로 나눌 수 있습니다.평가된 샘플 수는 426개로 천천히 선별했다.첫 번째 매개변수는 Worrst radius이기 때문에 가장 중요한 매개변수로 간주됩니다.다음은 Trueor False를 통해 조건을 선별해 대상의 종양이 benign(양성)인지 malignant(악성)인지 판정한다.
절차.
유방암 데이터 읽기
트레이닝 데이터와 테스트 데이터 분리
조건 설정
트리의 실행 결정
결정 트리를dot 파일로 변환
그래프 드로잉%%time
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
#乳癌データの読み込み
cancer_data = load_breast_cancer()
#トレーニングデータ、テストデータの分離
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)
#条件設定
max_score = 0
accuracy = []
depth_list = [i for i in range(1, 11)]
#決定木の実行
for depth in tqdm(depth_list):
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
accuracy.append(clf.score(test_X, test_y))
if max_score < clf.score(test_X, test_y):
max_score = clf.score(test_X, test_y)
depth_ = depth
#決定木をdotファイルに変換
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth_, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
tree.export_graphviz(clf, out_file="tree.dot", feature_names=cancer_data.feature_names, class_names=cancer_data.target_names, filled=True)
#グラフのプロット
plt.plot(depth_list, accuracy)
plt.title("Accuracy change")
plt.xlabel("max_depth")
plt.ylabel("Accuracy")
plt.show()
print("max_depth:{}".format(depth_))
print("ベストスコア:{}".format(max_score))
출력max_depth:3
ベストスコア:0.972027972027972
Wall time: 112 ms
끝말
max_depth가 Acuracy에 미치는 영향이 매우 크다는 것을 발견했다.또 결정목을 시각화함으로써 도무지 이해하기 어려운 AI의 사고에 대해 설명할 수 있을 것 같았다.
Reference
이 문제에 관하여(나무(분류)를 결정하는 초파라미터와 조화2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/FujiedaTaro/items/0cc107bd69e9a0d2ce38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
결정 트리를dot 파일로 변환하고 Graphiviz를 통해 시각화된 그림을 표시하는 방법입니다.하이퍼매개변수가 최적화 값으로 설정됩니다.max_depth는 3이기 때문에 3단계로 나눌 수 있습니다.평가된 샘플 수는 426개로 천천히 선별했다.첫 번째 매개변수는 Worrst radius이기 때문에 가장 중요한 매개변수로 간주됩니다.다음은 Trueor False를 통해 조건을 선별해 대상의 종양이 benign(양성)인지 malignant(악성)인지 판정한다.
절차.
유방암 데이터 읽기
트레이닝 데이터와 테스트 데이터 분리
조건 설정
트리의 실행 결정
결정 트리를dot 파일로 변환
그래프 드로잉%%time
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
#乳癌データの読み込み
cancer_data = load_breast_cancer()
#トレーニングデータ、テストデータの分離
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)
#条件設定
max_score = 0
accuracy = []
depth_list = [i for i in range(1, 11)]
#決定木の実行
for depth in tqdm(depth_list):
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
accuracy.append(clf.score(test_X, test_y))
if max_score < clf.score(test_X, test_y):
max_score = clf.score(test_X, test_y)
depth_ = depth
#決定木をdotファイルに変換
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth_, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
tree.export_graphviz(clf, out_file="tree.dot", feature_names=cancer_data.feature_names, class_names=cancer_data.target_names, filled=True)
#グラフのプロット
plt.plot(depth_list, accuracy)
plt.title("Accuracy change")
plt.xlabel("max_depth")
plt.ylabel("Accuracy")
plt.show()
print("max_depth:{}".format(depth_))
print("ベストスコア:{}".format(max_score))
출력max_depth:3
ベストスコア:0.972027972027972
Wall time: 112 ms
끝말
max_depth가 Acuracy에 미치는 영향이 매우 크다는 것을 발견했다.또 결정목을 시각화함으로써 도무지 이해하기 어려운 AI의 사고에 대해 설명할 수 있을 것 같았다.
Reference
이 문제에 관하여(나무(분류)를 결정하는 초파라미터와 조화2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/FujiedaTaro/items/0cc107bd69e9a0d2ce38
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
%%time
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
#乳癌データの読み込み
cancer_data = load_breast_cancer()
#トレーニングデータ、テストデータの分離
train_X, test_X, train_y, test_y = train_test_split(cancer_data.data, cancer_data.target, random_state=0)
#条件設定
max_score = 0
accuracy = []
depth_list = [i for i in range(1, 11)]
#決定木の実行
for depth in tqdm(depth_list):
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
accuracy.append(clf.score(test_X, test_y))
if max_score < clf.score(test_X, test_y):
max_score = clf.score(test_X, test_y)
depth_ = depth
#決定木をdotファイルに変換
clf = DecisionTreeClassifier(criterion="entropy", splitter="random", max_depth=depth_, min_samples_split=4, min_samples_leaf=1, random_state=41)
clf.fit(train_X, train_y)
tree.export_graphviz(clf, out_file="tree.dot", feature_names=cancer_data.feature_names, class_names=cancer_data.target_names, filled=True)
#グラフのプロット
plt.plot(depth_list, accuracy)
plt.title("Accuracy change")
plt.xlabel("max_depth")
plt.ylabel("Accuracy")
plt.show()
print("max_depth:{}".format(depth_))
print("ベストスコア:{}".format(max_score))
max_depth:3
ベストスコア:0.972027972027972
Wall time: 112 ms
max_depth가 Acuracy에 미치는 영향이 매우 크다는 것을 발견했다.또 결정목을 시각화함으로써 도무지 이해하기 어려운 AI의 사고에 대해 설명할 수 있을 것 같았다.
Reference
이 문제에 관하여(나무(분류)를 결정하는 초파라미터와 조화2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/FujiedaTaro/items/0cc107bd69e9a0d2ce38텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)