交差検証付き再帰的特徴削減

Beginner

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

はじめに

この実験では、scikit-learn を使って交差検証付き再帰的特徴削減(RFECV)を実装する手順を一通り見ていきます。RFECV は特徴選択に使用され、モデル構築に使用する関連特徴のサブセットを選択するプロセスです。15 個の特徴を持つ分類タスクを使用します。そのうち 3 個は情報的で、2 個は冗長で、10 個は非情報的です。

VM のヒント

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

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

学習中に問題がある場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

データ生成

scikit-learn のmake_classification関数を使って分類タスクを生成します。15 個の特徴を持つ 500 個のサンプルを生成します。そのうち 3 個は情報的で、2 個は冗長で、10 個は非情報的です。

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=500,
    n_features=15,
    n_informative=3,
    n_redundant=2,
    n_repeated=0,
    n_classes=8,
    n_clusters_per_class=1,
    class_sep=0.8,
    random_state=0,
)

モデルの学習と選択

RFECV オブジェクトを作成し、交差検証スコアを計算します。スコアリング戦略「accuracy」は、正しく分類されたサンプルの割合を最適化します。推定器としてロジスティック回帰を使用し、5 分割の層化 k 分割交差検証を行います。

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## 考慮する最小の特徴数
clf = LogisticRegression()
cv = StratifiedKFold(5)

rfecv = RFECV(
    estimator=clf,
    step=1,
    cv=cv,
    scoring="accuracy",
    min_features_to_select=min_features_to_select,
    n_jobs=2,
)
rfecv.fit(X, y)

print(f"Optimal number of features: {rfecv.n_features_}")

特徴数と交差検証スコアのプロット

選択された特徴数と交差検証スコアをプロットします。このプロットを作成するために matplotlib を使用します。

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Number of features selected")
plt.ylabel("Mean test accuracy")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("Recursive Feature Elimination \nwith correlated features")
plt.show()

まとめ

この実験では、scikit-learn を使って交差検証付き再帰的特徴削減(RFECV)を実装するプロセスを一通り見ました。15 個の特徴を持つ分類タスクを生成しました。そのうち 3 個は情報的で、2 個は冗長で、10 個は非情報的でした。推定器としてロジスティック回帰を使用し、5 分割の層化 k 分割交差検証を行いました。選択された特徴数と交差検証スコアをプロットしました。最適な特徴数は 3 であり、これは真の生成モデルに対応していることがわかりました。また、相関特徴の導入により、選択された 3 から 5 個の特徴について同等のスコアの定常状態が見られました。