機械学習のための特徴選択の5つの方法!

機械学習のための特徴選択の5つの方法!

使用される特徴の数が増えるにつれて、モデルのパフォーマンスが向上することが分かっています。ただし、ピークを超えると、モデルのパフォーマンスが低下します。そのため、予測に効果的な特徴のみを選択する必要があります。

[[390994]]

特徴選択は、特徴の数を減らすことを目的とする点で次元削減技術に似ていますが、根本的に異なります。違いは、特徴選択ではデータセットから保持または削除する特徴を選択するのに対し、次元削減ではデータの投影が作成され、完全に新しい入力特徴が生成される点です。

特徴選択にはさまざまな方法があります。この記事では、最もシンプルでありながら非常に便利な Scikit-Learn の 5 つの方法を紹介します。それでは始めましょう。

1. 分散閾値特徴選択

分散が大きい特徴は、その特徴内の値が大きく変化することを意味し、分散が小さい特徴は、その特徴内の値が類似していることを意味し、分散がゼロの場合は、同じ値の特徴があることを意味します。

分散選択法では、まず各特徴の分散を計算し、次にしきい値に基づいて分散がしきい値より大きい特徴を選択します。使用方法を示す例を次に示します。

  1. pandasをpdとしてインポートする
  2. Seaborn をSNSとしてインポートする
  3. mpg = sns.load_dataset( 'mpg' ).select_dtypes( '数値' )
  4. mpg.head()

この例では、簡潔にするために数値機能のみを使用しています。分散しきい値特徴選択を使用する前に、分散は数値スケールの影響を受けるため、これらすべての数値特徴を変換する必要があります。

  1. sklearn.preprocessingからStandardScaler をインポートします
  2. スケーラー = StandardScaler()
  3. mpg = pd.DataFrame(scaler.fit_transform(mpg), 列 = mpg.columns)
  4. mpg.head()

すべての特徴は同じスケールなので、分散しきい値法を使用して必要な特徴のみを選択してみます。分散が 1 に制限されていると仮定します。

  1. sklearn.feature_selectionからVarianceThresholdをインポート
  2. セレクター = VarianceThreshold(1)
  3. セレクタ.fit(mpg)
  4. mpg.columns[セレクター.get_support()]

分散しきい値設定は、教師なし学習のための特徴選択方法です。教師あり学習の目的で特徴を選択したい場合はどうすればよいでしょうか? 次にこれについて説明します。

2.SelectKBestの機能

単変量特徴選択は、カイ2乗検定やピアソン検定などの単変量統計検定に基づく手法です。

SelectKBest の前提は、検証されていない統計テストと、X と y の間の統計結果に基づいて K 個の数値を選択する機能を組み合わせることです。

  1. mpg = sns.load_dataset( 'mpg' )
  2. mpg = mpg.select_dtypes( 'number' ).dropna()
  3. #特徴を独立変数従属変数分割する
  4. X = mpg.drop ( 'mpg' 、軸=1)
  5. y = mpg[ 'mpg' ]

単変量特徴選択法は教師あり学習用に設計されているため、特徴を独立変数と従属変数に分離します。次に、最も重要な 2 つの機能のみが必要であると仮定して、SelectKBest を使用します。

  1. sklearn.feature_selectionからSelectKBest、mutual_info_regression をインポートします
  2. #選択 相互情報回帰基づく上位2 つの特徴
  3. セレクター = SelectKBest(相互情報回帰、k = 2)
  4. セレクター.fit(X, y)
  5. X.列[セレクター.get_support()]

3. 再帰的特徴除去(RFE)

再帰的特徴除去 (RFE) は、機械学習モデルを利用して、再帰トレーニング後に最も重要でない特徴を除去することで特徴を選択する特徴選択方法です。

Scikit-Learn によれば、RFE は、より小さな特徴セットを再帰的に考慮することで特徴を選択する方法です。

  • まず、推定器が初期特徴セットでトレーニングされ、次に各特徴の重要度が coef_attribute または feature_importances_attribute を通じて取得されます。
  • 次に、現在の機能から最も重要度の低い機能を削除します。このプロセスは、選択される特徴の数が最終的に必要な数に達するまで、プルーニングされたデータセット上で再帰的に繰り返されます。

この例では、誰が生き残るかを予測する分類問題にタイタニック号のデータセットを使用します。

  1. #データセットをロードし  として数値特徴のみを選択する
  2. タイタニック = sns.load_dataset( 'タイタニック' )[[ 'survived' , 'pclass' , 'age' , 'parch' , 'sibsp' , 'fare' ]].dropna()
  3. X = titanic.drop ( '生き残った' 、軸 = 1)
  4. y = タイタニック[ '生き残った' ]

私は、タイタニック号の生存者を予測するのに最も役立つ特徴を知りたかったのです。最良の特徴を得るために、LogisticRegression モデルを使用しましょう。

  1. sklearn.feature_selectionからRFEをインポート
  2. sklearn.linear_modelからLogisticRegression をインポートします
  3. #ロジスティック回帰による最も重要な特徴の選択
  4. rfe_selector = RFE(推定値=LogisticRegression(),選択するn特徴=2,ステップ=1)
  5. rfe_selector.fit(X, y)
  6. X.列[rfe_selector.get_support()]

デフォルトでは、RFE に選択される特徴の数はすべての特徴の中央値であり、ステップ サイズは 1 です。もちろん、経験に基づいて変更することもできます。

4. SelectFromModel 特徴選択

Scikit-Learn の SelectFromModel は、重要度属性しきい値に基づいて機械学習モデルの推定のための機能を選択するために使用されます。デフォルトでは、しきい値は平均値です。

この概念をよりよく理解するために、サンプルデータセットを使用しましょう。前回のデータを使用します。

  1. sklearn.feature_selectionからSelectFromModel をインポートします
  2. sfm_selector = SelectFromModel(推定器=LogisticRegression())
  3. sfm_selector.fit(X, y)
  4. X.列[sfm_selector.get_support()]

RFE と同様に、特徴の重要性を推定するために使用できる限り、任意の機械学習モデルを特徴選択に使用できます。 Random Forest または XGBoost で試すことができます。

5. シーケンシャル特徴選択(SFS)

順次特徴選択は、クロス検証スコアと推定値に基づいて前方または後方に最良の特徴を見つける貪欲アルゴリズムであり、Scikit-Learn バージョン 0.24 の新機能です。方法は次のとおりです。

  • SFS-Forward は、ゼロの特徴から開始して特徴選択を実行し、単一の特徴で機械学習モデルをトレーニングするときにクロス検証スコアを最大化する特徴を見つけます。
  • 最初のフィーチャが選択されると、選択されたフィーチャに新しいフィーチャを追加することによってプロセスが繰り返されます。必要な機能の数に達したことが確認されると、プロセスは停止します。

説明のために例を挙げてみましょう。

  1. sklearn.feature_selectionからSequentialFeatureSelector をインポートします
  2.  
  3. sfs_selector = SequentialFeatureSelector(estimator=LogisticRegression(), n_features_to_select = 3, cv =10, direction = 'backward' )は、
  4. sfs_selector.fit(X, y)
  5. X.列[sfs_selector.get_support()]

結論は

特徴選択は機械学習モデルの重要な側面です。モデルにとって役に立たない特徴は、モデルのトレーニング速度だけでなく、モデルの効果にも影響します。

<<:  オンラインクレジットは消費者保護において「難しい問題」でしょうか? AIアプリケーションは消費者の権利を保護する

>>:  AIトレーニングの最大の障害は計算能力ではなく「メモリの壁」である

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

...

スマートロボットについて知っておくべきことすべて

スマートロボットは、タスクをより効率的かつ正確に実行し、生産性を向上させ、人的エラーを削減するように...

これほどリアルな効果を生み出すために、原作者を何人食べなければならなかったのですか?文生図はビジュアル「盗作」の疑い

少し前、ニューヨーク・タイムズ紙は、OpenAI が自社のコンテンツを人工知能開発のために違法に使用...

GPT や Llama などの大規模モデルには「反転の呪い」があります。このバグを軽減するにはどうすればよいでしょうか?

中国人民大学の研究者らは、Llamaなどの因果言語モデルが遭遇する「反転の呪い」は、次のトークン予測...

...

サービスロボット市場の最前線に立つセキュリティは注目に値する

現在、サービスロボットは中国のロボットが他のロボットを追い抜く重要なチャンスとみなされており、あらゆ...

...

...

ディープラーニングにも格闘技カンファレンスがある! 8つのテクノロジーの巨人:私の学派はAGIを実現できる

[[426161]]ディープラーニングの研究は格闘技の競技のようなものですか?意外なことに、何でもや...

...

...

調査によると、ChatGPTはプログラミングの質問に答える際に50%以上のエラー率があることが判明

米パデュー大学の調査によると、OpenAIが開発した人工知能チャットボット「ChatGPT」は、ソフ...