木の読み方
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 28/58。
決定木の質問は読みやすいので、学習した内容を確認できます。長さ5.1 cm、幅1.6 cmの花をアヤメの決定木に沿ってたどってみましょう:
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 で、長く幅広い花びらに対する妥当な答えです。
チャレンジ
中級チーズ店の決定木は、水分含有量と熟成週数から、チーズを fresh、soft、hard のいずれかに分類します。スターターコードで決定木を学習させ、新しいチーズを分類します。
- 特徴量名を使って、決定木の質問を表示します。
- 実行して質問を読み、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])
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ