0Pricing
Learn AI with Python · レッスン

特徴量選択の手法

フィルタ法(分散、相関)、ラッパー法(RFE)、組み込み法(L1 正則化)を扱います。

「特徴量選択の手法」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

特徴量を選択する理由

特徴量選択では、最も有用な列だけを残します。特徴量が少ないほど、学習が速くなり、過学習が抑えられ、解釈もしやすくなります。ノイズを取り除くことで、精度が向上する場合もあります。

3種類の手法

選択手法は次の3つのグループに分けられます:

  • フィルタ法:統計量で特徴量を順位付けします(高速で、モデルに依存しません)
  • ラッパー法:モデルを学習して部分集合を探索します(低速ですが高精度です)
  • 組み込み法:モデルのフィッティング中に選択します

VarianceThreshold

最も単純なフィルタ法です。VarianceThresholdは、分散がしきい値を下回る特徴量を削除します。ほぼ定数の列には情報がありません。

from sklearn.feature_selection import VarianceThreshold

sel = VarianceThreshold(threshold=0.01)
X_reduced = sel.fit_transform(X)
print("Kept:", X_reduced.shape[1], "of", X.shape[1])

f_classifを使ったSelectKBest

SelectKBestは、スコアが最も高いK個の特徴量を残します。f_classifを使うと、各特徴量とクラスラベルの関連の強さを測定するANOVAのF検定を使用します。

from sklearn.feature_selection import SelectKBest, f_classif

sel = SelectKBest(score_func=f_classif, k=10)
X_best = sel.fit_transform(X, y)
print(sel.get_support(indices=True))

相互情報量

mutual_info_classifは、特徴量とターゲットの間にあるあらゆる依存関係(非線形なものを含む)を測定します。F検定とは異なり、ANOVAでは捉えられない非線形の関係も捉えられます。

from sklearn.feature_selection import SelectKBest, mutual_info_classif

sel = SelectKBest(score_func=mutual_info_classif, k=10)
X_mi = sel.fit_transform(X, y)

f_classifとmutual_infoの比較

f_classifは高速で線形関係を検出します。一方、mutual_info_classifは低速ですが、非線形の関係も捉えます。複雑な関係が疑われる場合は、相互情報量を優先します。

import numpy as np
from sklearn.feature_selection import f_classif, mutual_info_classif

f_scores, _ = f_classif(X, y)
mi_scores = mutual_info_classif(X, y)
print("F-test top:", np.argsort(f_scores)[::-1][:5])
print("MI top:", np.argsort(mi_scores)[::-1][:5])

再帰的特徴量削減

RFEはラッパー法の一つです。モデルを学習し、最も弱い特徴量を削除する処理を繰り返します。特徴量の順位付けには、モデル自身が持つ重要度の情報を使います。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

rfe = RFE(estimator=LogisticRegression(max_iter=1000), n_features_to_select=10)
rfe.fit(X, y)
print(rfe.support_)

RFECV:個数を自動的に選択

RFECVはRFEに交差検証を追加し、固定値を指定するのではなく、検証スコアに基づいて最適な特徴量の個数を見つけます。

from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier

rfecv = RFECV(
    estimator=RandomForestClassifier(),
    cv=5,
    scoring="accuracy",
)
rfecv.fit(X, y)
print("Optimal features:", rfecv.n_features_)

Lassoを使ったSelectFromModel

組み込み法では、Lasso(L1)が重要でない係数を正確にゼロまで縮小します。その後、SelectFromModelがゼロでない係数に対応する特徴量だけを残します。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso

sel = SelectFromModel(Lasso(alpha=0.01))
sel.fit(X, y)
X_lasso = sel.transform(X)
print("Kept:", X_lasso.shape[1])

木の重要度を使ったSelectFromModel

SelectFromModelは、ランダムフォレストなど、feature_importances_を公開する任意の推定器でも使えます。"mean"や"median"などのthresholdを設定します。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

sel = SelectFromModel(
    RandomForestClassifier(n_estimators=200),
    threshold="median",
)
sel.fit(X, y)

手法の選び方

まずは低コストなフィルタ法(VarianceThreshold、SelectKBest)で明らかに不要な特徴量を削除します。バランスの良い方法として、組み込み法のSelectFromModelを使います。精度を最優先し、計算量にも余裕がある場合はRFECVを使います。

確認問題

特徴量選択についての知識を確認しましょう。

まとめ

まとめ: 特徴量選択には、フィルタ法(VarianceThreshold、SelectKBestとf_classifまたはmutual_info_classif)、ラッパー法(RFECV)、組み込み法(Lassoや木の重要度を使うSelectFromModel)があります。フィルタ法が最も高速で、RFECVが最も高精度です。非線形の関係には相互情報量を使います。

よくある質問

「特徴量選択の手法」レッスンは無料ですか?

はい。「特徴量選択の手法」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「特徴量選択の手法」で何を学びますか?

フィルタ法(分散、相関)、ラッパー法(RFE)、組み込み法(L1 正則化)を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「特徴量選択の手法」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 特徴量選択の手法
  2. 交互作用特徴量と多項式特徴量の作成
  3. ターゲットエンコーディングと高度なカテゴリ処理
  4. Featuretoolsによる自動特徴量エンジニアリング
← Learn AI with Pythonに戻る