部分依存による高度な描画

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 ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49238{{"部分依存による高度な描画"}} end

糖尿病データセットでモデルを学習させる

このステップでは、糖尿病データセットで決定木と多層パーセプトロンを学習させます。

diabetes = load_diabetes()
X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
y = diabetes.target

tree = DecisionTreeRegressor()
mlp = make_pipeline(
    StandardScaler(),
    MLPRegressor(hidden_layer_sizes=(100, 100), tol=1e-2, max_iter=500, random_state=0),
)
tree.fit(X, y)
mlp.fit(X, y)

2つの特徴量に対する部分依存の描画

このステップでは、決定木に対する「年齢」と「BMI」(身体質量指数)の特徴量に対する部分依存曲線を描画します。2つの特徴量の場合、PartialDependenceDisplay.from_estimatorは2つの曲線を描画することを期待しています。ここでは、描画関数がaxによって定義された空間を使って2つのプロットのグリッドを配置します。

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Decision Tree")
tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax)

多層パーセプトロンに対しても部分依存曲線を描画することができます。この場合、曲線の色を変更するためにline_kwPartialDependenceDisplay.from_estimatorに渡されます。

fig, ax = plt.subplots(figsize=(12, 6))
ax.set_title("Multi-layer Perceptron")
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age", "bmi"], ax=ax, line_kw={"color": "red"}
)

2つのモデルの部分依存をまとめて描画する

このステップでは、同じプロット上に2つのモデルの部分依存曲線を描画します。

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
tree_disp.plot(ax=ax1)
ax1.set_title("Decision Tree")
mlp_disp.plot(ax=ax2, line_kw={"color": "red"})
ax2.set_title("Multi-layer Perceptron")

曲線を比較する別の方法は、互いの上に描画することです。ここでは、1行2列の図を作成します。軸はPartialDependenceDisplay.plot関数にリストとして渡され、各モデルの部分依存曲線を同じ軸上に描画します。軸のリストの長さは、描画するプロットの数と等しくなければなりません。

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 6))
tree_disp.plot(ax=[ax1, ax2], line_kw={"label": "Decision Tree"})
mlp_disp.plot(
    ax=[ax1, ax2], line_kw={"label": "Multi-layer Perceptron", "color": "red"}
)
ax1.legend()
ax2.legend()

tree_disp.axes_は、部分依存プロットを描画するために使用される軸を格納するnumpy配列です。これをmlp_dispに渡すことで、互いの上にプロットを描画する同じ効果を得ることができます。さらに、mlp_disp.figure_は図を格納しており、plotを呼び出した後に図のサイズを変更することができます。この場合、tree_disp.axes_は2次元であるため、plotは最も左のプロットにのみyラベルとy目盛りを表示します。

tree_disp.plot(line_kw={"label": "Decision Tree"})
mlp_disp.plot(
    line_kw={"label": "Multi-layer Perceptron", "color": "red"}, ax=tree_disp.axes_
)
tree_disp.figure_.set_size_inches(10, 6)
tree_disp.axes_[0, 0].legend()
tree_disp.axes_[0, 1].legend()
plt.show()

1つの特徴量に対する部分依存の描画

このステップでは、同じ軸上に単一の特徴量「年齢」に対する部分依存曲線を描画します。この場合、tree_disp.axes_が2番目の描画関数に渡されます。

tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age"])
mlp_disp = PartialDependenceDisplay.from_estimator(
    mlp, X, ["age"], ax=tree_disp.axes_, line_kw={"color": "red"}
)

まとめ

このチュートリアルでは、PartialDependenceDisplayオブジェクトを使用して複数の特徴量に対する部分依存曲線を描画する方法を示しました。まず、糖尿病データセットで決定木と多層パーセプトロンを学習させました。次に、2つの特徴量に対する決定木と多層パーセプトロンの部分依存曲線を描画しました。次に、同じプロット上に2つのモデルの部分依存曲線を描画しました。最後に、同じ軸上に単一の特徴量に対する部分依存曲線を描画しました。