特徴量の重要度
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 30/58。
木はどの特徴に頼っているのでしょうか? feature_importances_は、各特徴が質問の分類に占める割合を示し、その割合の合計は1になります:
Seriesに並べ替えると、順位付きのグラフになります。ax.barhは棒を横向きに描くので、長い名前も収まります:
imp = pd.Series(tree.feature_importances_, index=iris.feature_names).sort_values()
ax.barh(imp.index, imp.values)0は、その特徴量について決定木が一度も尋ねなかったことを意味します。がく片も依然として重要かもしれません。花弁がすでに、がく片がどうなるかを決定木に伝えていたのです。
チャレンジ
中級サーフィンスクールでは、初心者が最初の1週間でボードの上に立てるようになる要因を知りたいと考えています。プログラムは深さを読み込み、スターターコードはその深さの決定木を学習させ、グラフを設定します。
- 特徴量ごとの重要度をSeriesに入れ、小さい順に並べます。
- 以下のように、最も重要な特徴量(小数点以下3桁)と、まったく使われなかった特徴量を出力します。
- 横棒グラフで描画して表示します。
スイミングスクールの場合:
Top feature: pool_hours (0.612)
Never asked: ['goggles']次に、Coddyがグラフについて説明します。彼らのグラフは次のようになります:
自分で試してみよう
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
depth = int(input())
# 初心者1人につき1行: standing が 1 なら、最初の1週間以内にボードの上に立てたことを意味します
surf = pd.read_csv("surfschool.csv")
features = ["age", "fitness", "days_surfed", "skated_before", "lesson_hours", "wetsuit_fit"]
X_train, X_test, y_train, y_test = train_test_split(surf[features], surf["standing"], test_size=0.25, random_state=0)
tree = DecisionTreeClassifier(max_depth=depth, random_state=0)
tree.fit(X_train, y_train)
fig, ax = plt.subplots(layout="constrained") # 長い名前を表示するための余白を確保します
ax.set_title("What Gets Beginners Standing?")
ax.set_xlabel("Importance")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ