Menu
CoddyTech

木の読み方

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 28/58。

決定木の質問は読みやすいので、学習した内容を確認できます。長さ5.1 cm、幅1.6 cmの花をアヤメの決定木に沿ってたどってみましょう:

アヤメの決定木を箱で表し、オレンジ色で1つの経路を強調:花びらの幅は0.80以下? いいえ、1.6。花びらの長さは4.95以下? いいえ、5.1。経路はクラス2で終わる

export_textは同じ質問をテキストとして出力します。インデントは各階層につき1つです。

from sklearn.tree import export_text

print(export_text(tree, feature_names=["petal_length", "petal_width"]))

これは次のように出力されます:

|--- petal_width <= 0.80
|   |--- class: 0
|--- petal_width >  0.80
|   |--- petal_length <= 4.95
|   |   |--- class: 1
|   |--- petal_length >  4.95
|   |   |--- class: 2

各行は、それぞれの経路上にある質問だけに答えます。クラス2は virginica で、長く幅広い花びらに対する妥当な答えです。

challenge icon

チャレンジ

中級

チーズ店の決定木は、水分含有量と熟成週数から、チーズを fresh、soft、hard のいずれかに分類します。スターターコードで決定木を学習させ、新しいチーズを分類します。

  1. 特徴量名を使って、決定木の質問を表示します。
  2. 実行して質問を読み、if/else を使って同じ質問を行い、同じ答えを返すように by_hand を完成させます。

表示された内容を見て、決定木が soft と分類するチーズについて、次のようにします。

By hand: soft
The tree: soft

自分で試してみよう

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_text

# チーズ1種類につき1行:水分含有量(%)、熟成週数、チーズの種類
cheeses = pd.read_csv("cheeses.csv")
features = ["moisture_pct", "aged_weeks"]
X_train, X_test, y_train, y_test = train_test_split(cheeses[features], cheeses["cheese"], test_size=0.25, random_state=0)
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)

# 種類を判定する新しいチーズ
moisture = int(input())
aged = int(input())
new_cheese = pd.DataFrame([[moisture, aged]], columns=features)

# 以下にコードを書いてください:決定木を表示し、次にby_handで決定木と同じように答えてください


def by_hand(moisture, aged):
    return "fresh"


# 以下の行は変更しないでください
print("By hand:", by_hand(moisture, aged))
print("The tree:", tree.predict(new_cheese)[0])
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ