モデルベースと逐次的特徴選択

Machine LearningMachine LearningBeginner
オンラインで実践に進む

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

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

はじめに

この実験では、特徴選択の 2 つのアプローチ:モデルベースと逐次的特徴選択を示します。目的は、与えられたデータセットから最も重要な特徴を選択することです。私たちは、442 人の糖尿病患者から収集された 10 個の特徴から構成される糖尿病データセットを使用します。

VM のヒント

VM の起動が完了した後、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。私たちは迅速に問題を解決いたします。

データの読み込み

私たちは scikit - learn から糖尿病データセットを読み込み、その説明を表示します。

from sklearn.datasets import load_diabetes

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(diabetes.DESCR)

係数からの特徴の重要度

特徴の重要度を把握するために、RidgeCV 推定器を使用します。絶対値が最も高いcoef_値を持つ特徴が最も重要であると考えられます。

from sklearn.linear_model import RidgeCV

ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
importance = np.abs(ridge.coef_)
feature_names = np.array(diabetes.feature_names)
plt.bar(height=importance, x=feature_names)
plt.title("Feature importances via coefficients")
plt.show()

重要度に基づいた特徴の選択

係数に基づいて最も重要な 2 つの特徴をSelectFromModelを使って選択します。SelectFromModelthresholdパラメータを受け付け、重要度(係数によって定義される)がこの閾値を超える特徴を選択します。

from sklearn.feature_selection import SelectFromModel

threshold = np.sort(importance)[-3] + 0.01

sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
print(f"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}")

逐次的特徴選択による特徴の選択

逐次的特徴選択器(SFS)を使って特徴を選択します。SFS は貪欲法で、各反復で、交差検証スコアに基づいて選択された特徴に追加するための最適な新しい特徴を選びます。また、逆方向(後向き SFS)にも行うことができます。つまり、すべての特徴から始めて、貪欲に 1 つずつ削除する特徴を選びます。

from sklearn.feature_selection import SequentialFeatureSelector

sfs_forward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="forward").fit(X, y)
sfs_backward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="backward").fit(X, y)

print(f"Features selected by forward sequential selection: {feature_names[sfs_forward.get_support()]}")
print(f"Features selected by backward sequential selection: {feature_names[sfs_backward.get_support()]}")

まとめ

この実験では、特徴選択の 2 つのアプローチ:モデルベースと逐次的特徴選択を示しました。特徴の重要度を取得するために RidgeCV 推定器を使用し、重要度に基づいて特徴を選択するために SelectFromModel を使用しました。逐次的特徴選択器は貪欲法で、各反復で、交差検証スコアに基づいて選択された特徴に追加するための最適な新しい特徴を選びます。