導入
決定木(decision tree)は、「花びらの長さは2.5cm以上か?」といったYes/Noの質問を枝分かれでつないで分類する手法です。人間の判断に近く、仕組みが読み取りやすいのが魅力です。
説明
DecisionTreeClassifier で学習します。学習後、どの特徴量を重視したか(feature_importances_)も見られます。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X, y = iris.data, iris.target
model = DecisionTreeClassifier(max_depth=3, random_state=0)
model.fit(X, y)
print("予測:", model.predict([X[0], X[75], X[120]]))
print("正解:", [y[0], y[75], y[120]])
# どの特徴量が判断に効いたか
for name, imp in zip(iris.feature_names, model.feature_importances_):
print(f"{name}: {imp.round(3)}")
決定木は「質問を重ねて答えにたどりつく」ので、なぜその予測になったのかを追いやすいモデルです。feature_importances_ を見ると、分類の決め手になった特徴量(多くの場合、花びらの寸法)が分かります。
max_depth=3 は木の深さ(質問の段数)の上限です。深くしすぎると次章で学ぶ「過学習」になりやすいので、ほどほどにします。
やってみよう
max_depth を 1 にすると予測がどう変わるか、10 にするとどうかを試しましょう。浅すぎると大ざっぱに、深すぎると訓練データに過剰に合わせにいきます。
演習
DecisionTreeClassifier の max_depth を 2 にしてモデルを学習し、X[120] の予測ラベルを表示してください。
ヒント1を見る
DecisionTreeClassifier(max_depth=2, random_state=0) で学習後、model.predict([X[120]])。