勾配ブースティング回帰

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、勾配ブースティングを使って糖尿病回帰タスクの予測モデルを構築します。糖尿病データセットでモデルを学習させ、最小二乗損失と深さ4の500本の回帰木を持つsklearn.ensemble.GradientBoostingRegressorから結果を取得します。

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-49153{{"勾配ブースティング回帰"}} end

データの読み込み

まず、糖尿病データセットを読み込みます。

diabetes = datasets.load_diabetes()
X, y = diabetes.data, diabetes.target

データ前処理

次に、データセットを分割して、学習に90%を使用し、残りをテストに残します。また、回帰モデルのパラメータを設定します。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=13)

params = {
    "n_estimators": 500,
    "max_depth": 4,
    "min_samples_split": 5,
    "learning_rate": 0.01,
    "loss": "squared_error",
}

回帰モデルの適合

ここで、勾配ブースティング回帰器を初期化して、学習データで適合させます。また、テストデータの平均二乗誤差も見てみましょう。

reg = ensemble.GradientBoostingRegressor(**params)
reg.fit(X_train, y_train)

mse = mean_squared_error(y_test, reg.predict(X_test))
print("The mean squared error (MSE) on test set: {:.4f}".format(mse))

学習偏差のプロット

最後に、結果を視覚化します。そのために、まずテストセットの偏差を計算し、その後、勾配ブースティングの反復回数に対してプロットします。

test_score = np.zeros((params["n_estimators"],), dtype=np.float64)
for i, y_pred in enumerate(reg.staged_predict(X_test)):
    test_score[i] = mean_squared_error(y_test, y_pred)

fig = plt.figure(figsize=(6, 6))
plt.subplot(1, 1, 1)
plt.title("Deviance")
plt.plot(
    np.arange(params["n_estimators"]) + 1,
    reg.train_score_,
    "b-",
    label="Training Set Deviance",
)
plt.plot(
    np.arange(params["n_estimators"]) + 1, test_score, "r-", label="Test Set Deviance"
)
plt.legend(loc="upper right")
plt.xlabel("Boosting Iterations")
plt.ylabel("Deviance")
fig.tight_layout()
plt.show()

特徴量の重要度をプロットする

この例では、予測力の最も高い特徴量を特定するために、不純物ベースの特徴量の重要度を使用します。

feature_importance = reg.feature_importances_
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + 0.5
fig = plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.barh(pos, feature_importance[sorted_idx], align="center")
plt.yticks(pos, np.array(diabetes.feature_names)[sorted_idx])
plt.title("Feature Importance (MDI)")

順列重要度をプロットする

予測力の最も高い特徴量を特定するために、順列法を使用します。

result = permutation_importance(
    reg, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2
)
sorted_idx = result.importances_mean.argsort()
plt.subplot(1, 2, 2)
plt.boxplot(
    result.importances[sorted_idx].T,
    vert=False,
    labels=np.array(diabetes.feature_names)[sorted_idx],
)
plt.title("Permutation Importance (test set)")
fig.tight_layout()
plt.show()

まとめ

この実験では、勾配ブースティングを使用して、糖尿病の回帰タスクに対する予測モデルを構築しました。データを読み込み、前処理し、回帰モデルを適合させ、学習偏差、特徴量の重要度、および順列重要度をプロットすることで結果を視覚化しました。