アイリスのデータセットにおける決定木

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、アイリスのデータセットと決定木を使って、アイリスの花の種類を分類します。まず、アイリスのデータセットの特徴量のペアで学習された決定木の決定境界を可視化します。次に、アイリスのデータセットのすべての特徴量で学習された単一の決定木の構造を表示します。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebookを使って練習しましょう。

時々、Jupyter Notebookが読み込み終わるまで数秒待つ必要があります。Jupyter Notebookの制限により、操作の検証は自動化できません。

学習中に問題に遭遇した場合は、Labbyにお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/inspection("Inspection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49167{{"アイリスのデータセットにおける決定木"}} sklearn/inspection -.-> lab-49167{{"アイリスのデータセットにおける決定木"}} sklearn/datasets -.-> lab-49167{{"アイリスのデータセットにおける決定木"}} ml/sklearn -.-> lab-49167{{"アイリスのデータセットにおける決定木"}} end

アイリスのデータセットを読み込む

最初のステップは、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()

まとめ

この実験では、決定木を使ってアイリスの花の種類を分類しました。まず、アイリスのデータセットの特徴量のペアで学習された決定木の決定境界を可視化しました。次に、アイリスのデータセットのすべての特徴量で学習された単一の決定木の構造を表示しました。