はじめに
この実験では、アイリスのデータセットと決定木を使って、アイリスの花の種類を分類します。まず、アイリスのデータセットの特徴量のペアで学習された決定木の決定境界を可視化します。次に、アイリスのデータセットのすべての特徴量で学習された単一の決定木の構造を表示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
アイリスのデータセットを読み込む
最初のステップは、scikit-learn を使ってアイリスのデータセットを読み込むことです。
from sklearn.datasets import load_iris
iris = load_iris()
決定境界を可視化する
ここでは、アイリスのデータセットの特徴量のペアで学習された決定木の決定境界を可視化します。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.inspection import DecisionBoundaryDisplay
## パラメータ
n_classes = 3
plot_colors = "ryb"
plot_step = 0.02
for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]):
## 対応する 2 つの特徴量のみを取り出す
X = iris.data[:, pair]
y = iris.target
## 学習
clf = DecisionTreeClassifier().fit(X, y)
## 決定境界を描画する
ax = plt.subplot(2, 3, pairidx + 1)
plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)
DecisionBoundaryDisplay.from_estimator(
clf,
X,
cmap=plt.cm.RdYlBu,
response_method="predict",
ax=ax,
xlabel=iris.feature_names[pair[0]],
ylabel=iris.feature_names[pair[1]],
)
## 学習ポイントを描画する
for i, color in zip(range(n_classes), plot_colors):
idx = np.where(y == i)
plt.scatter(
X[idx, 0],
X[idx, 1],
c=color,
label=iris.target_names[i],
cmap=plt.cm.RdYlBu,
edgecolor="black",
s=15,
)
plt.suptitle("Decision surface of decision trees trained on pairs of features")
plt.legend(loc="lower right", borderpad=0, handletextpad=0)
_ = plt.axis("tight")
決定木の構造を表示する
次に、アイリスのデータセットのすべての特徴量で学習された単一の決定木の構造を表示します。
from sklearn.tree import plot_tree
plt.figure()
clf = DecisionTreeClassifier().fit(iris.data, iris.target)
plot_tree(clf, filled=True)
plt.title("Decision tree trained on all the iris features")
plt.show()
まとめ
この実験では、決定木を使ってアイリスの花の種類を分類しました。まず、アイリスのデータセットの特徴量のペアで学習された決定木の決定境界を可視化しました。次に、アイリスのデータセットのすべての特徴量で学習された単一の決定木の構造を表示しました。