Menu
CoddyTech

木が質問する

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

この章は、農業融資を説明する木で締めくくります。決定木は、二十の質問のように、特徴量について一度に1つずつ「はい」か「いいえ」で答える質問をし、最終的な答えにたどり着きます。

木の図。最上部のボックスには「花びらの幅は0.8 cm以下ですか?」とあります。「はい」はsetosaに進み、「いいえ」は2番目のボックスに進みます。そこには「花びらの長さは4.95 cm以下ですか?」とあります。「はい」はversicolorに進み、「いいえ」はvirginicaに進みます。

学習では、各質問への回答によってクラスができるだけきれいに分かれるように質問を選びます。

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)  # 花弁の長さと幅、cm
print(tree.predict([[4.5, 1.4]]))

これは [1]、versicolor を出力します。max_depth=2 では、各経路で2つの質問が可能です。スケーリングは不要です。各質問は1つの特徴量を読み取ります。

challenge icon

チャレンジ

中級

カメラレンタル店では、機材が遅れて返却される可能性がある場合にリマインダーを送ります。スターターコードは過去のレンタルデータを分割し、新しいレンタルを1行のテーブル new_rental に読み込みます。

  1. 各経路の質問数が最大2個となる決定木を学習させます(random_state=0)。
  2. テスト精度(小数点以下3桁)と、新しいレンタルの判定を出力します。1の場合は likely late、0の場合は likely on time です。

別の店舗の場合:

Test accuracy: 0.792
This rental: likely on time

自分で試してみよう

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

# 過去のレンタル履歴:late が 1 なら、機材の返却が遅れたことを意味します
rentals = pd.read_csv("rentals.csv")
features = ["rental_weeks", "gear_value_usd", "customer_age", "late_before"]
X_train, X_test, y_train, y_test = train_test_split(rentals[features], rentals["late"], test_size=0.25, random_state=0)

# 新しいレンタル:予約週数、機材の価値、顧客の年齢、これまでの返却遅延回数
weeks = int(input())
value = int(input())
age = int(input())
late_before = int(input())
new_rental = pd.DataFrame([[weeks, value, age, late_before]], columns=features)

# 以下にコードを書いてください
quiz icon腕試し

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

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

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