機械学習の特徴選択のためのPythonツール

機械学習の特徴選択のためのPythonツール

[[392070]]

特徴選択は、データセット内で最も有用な特徴を見つけて選択するプロセスであり、機械学習パイプラインの重要なステップです。不要な機能はトレーニングを遅くし、モデルの解釈可能性を低下させ、そして最も重要なことに、テスト セットでの一般化パフォーマンスを低下させます。

私は、機械学習の問題にアドホックな特徴選択方法を何度も適用していることに気づき、イライラしていたので、GitHub で入手できる Python で特徴選択クラスを構築しました。 FeatureSelector には、最も一般的な機能選択方法がいくつか含まれています。

  1. 欠損値の割合が高い特徴
  2. 共線性(高相関)の特徴
  3. ツリーベースモデルで重要度がゼロの特徴
  4. 重要度の低い機能
  5. 単一の一意の値を持つ機能

この記事では、サンプルの機械学習データセットで FeatureSelector を使用します。これらのメソッドを迅速に実装して、より効率的なワークフローを実現する方法について説明します。

完全なコードは GitHub で公開されており、貢献を歓迎します。機能セレクターは現在開発中であり、コミュニティのニーズに基づいて改善され続けます。

サンプルデータセット

この例では、Kaggle の Home Credit Default Risk 機械学習コンペティション データを使用します。 (コンテストを始めるには、この記事をご覧ください)。データセット全体はダウンロード可能ですが、ここでは例を使用して説明します。

サンプルデータ、TARGETは分類ラベルです

このコンテストは教師あり分類問題であり、多くの欠損値、多くの高度に相関した(共線的な)特徴、および機械学習モデルに役立たないいくつかの無関係な特徴を持つため、優れたデータセットとなります。

インスタンスを作成する

FeatureSelector クラスのインスタンスを作成するには、行と列に特徴を含む構造化データセットを渡す必要があります。いくつかの特徴のみの方法を使用することもできますが、重要度ベースの方法ではトレーニング ラベルも必要です。教師あり分類タスクなので、特徴のセットとラベルのセットを使用します。

(このスクリプトは必ず feature_selector.py と同じディレクトリで実行してください)

方法

機能セレクターには、削除する機能を見つけるための 5 つの方法があります。識別された機能のいずれかにアクセスして、手動でデータから削除したり、機能セレクターの「削除」機能を使用したりできます。

ここでは、各認識方法を詳しく紹介し、5 つの方法を同時に実行する方法を示します。データを視覚的に検査することは機械学習の重要な要素であるため、FeatureSelector にはいくつかのプロット機能もあります。

欠損値

削除する特徴を見つける最初の方法は簡単です。欠損値の割合が特定のしきい値より大きい特徴を調べます。次の呼び出しは、欠損値が 60% を超える特徴を識別します。

  1. fs.identify_missing(欠損しきい値 = 0.6 )
  2. 欠損値が0.60を超える特徴が17 個あります

データフレームの各列の欠損値の割合を確認できます。

  1. fs.missing_stats.head()

削除する機能を確認するには、FeatureSelector の ops 属性にアクセスします。これは、値が機能のリストである Python 辞書です。

  1. missing_features = fs.ops[ '不足' ]
  2. 不足している機能[: 5 ]
  3. [ '所有車年齢' ,
  4. 'YEARS_BUILD_AVG'
  5. 'COMMONAREA_AVG'
  6. 'FLOORSMIN_AVG'
  7. 'リビングアパート平均' ]

最後に、すべての特徴量の欠損値の分布をプロットします。

  1. fs.plot_missing()

共線性の特徴

共線的特徴は、互いに高い相関関係にある特徴です。機械学習では、大きな分散とモデルの解釈可能性の低さにより、テスト セットの一般化パフォーマンスが低下します。

メソッド identify_collinear は、指定された相関係数値に基づいて共線的な特徴を検出します。相関する特徴のペアごとに、削除する特徴の 1 つを識別します (削除する必要があるのは 1 つだけであるため)。

  1. fs.identify_collinear(相関しきい値 = 0.98 )
  2. 相関度が0.98を超える特徴は21 個あります

相関関係を利用して、ヒートマップという明確な視覚化を作成できます。これは、しきい値を超える相関特徴が少なくとも 1 つあるすべての特徴を表示します。

  1. fs.plot_collinear()

前述したように、削除する相関特徴のリスト全体にアクセスしたり、データフレーム内の相関性の高い特徴ペアを確認したりすることができます。

  1. # 削除する同一線上のフィーチャのリスト
  2. collinear_features = fs.ops[ 'collinear' ]
  3. # 共線的特徴のデータフレーム
  4. fs.record_collinear.head()

データセットを探索したい場合は、呼び出しに plot_all=True を渡すことで、データ内のすべての関連のグラフをプロットすることもできます。

重要度ゼロの機能

最初の 2 つの方法は、任意の構造化データセットに適用でき、決定論的です。つまり、特定のしきい値に対して、結果は毎回同じになります。次のアプローチは、モデルをトレーニングするためのラベルがあり、非決定論的な教師あり機械学習の問題にのみ適用できます。 identify_zero_importance 関数は、Gradient Boosting Machine (GBM) 学習モデルに基づいて重要でない特徴を検出します。

ブースティングアンサンブルなどのツリーベースの機械学習モデルを使用すると、特徴の重要性を見つけることができます。重要度の絶対値は、タスクに最も関連性の高い機能を決定するために使用できる相対値ほど重要ではありません。重要度がゼロの特徴を削除することで、特徴選択を実行することもできます。ツリーベースのモデルでは、重要度がゼロの機能はノードの分割に使用されないため、モデルのパフォーマンスに影響を与えずに削除できます。

FeatureSelector は、LightGBM ライブラリの勾配ブースティング マシンを使用して特徴の重要性を検出します。分散を減らすために、10 回の GBM トレーニング実行の特徴の重要度を平均しました。さらに、モデルは、トレーニング データへの過剰適合を防ぐために、検証セットを使用した早期停止を使用してトレーニングされます (必要に応じて検証セットをオフにすることもできます)。

次のコードは、このメソッドを呼び出して重要度がゼロの特徴を抽出します。

渡したパラメータは次のとおりです。

タスク: 問題に応じた分類または回帰

eval_metric: 早期停止に使用されるメトリック (早期停止が無効になっている場合は不要)

n_iteration: トレーニング回数。特徴の重要度を平均化するために使用されます。

early ly_stop: モデルのトレーニングに早期停止を使用するかどうか

今回は plot_feature_importances を使用して 2 つのプロットを取得します。

  1. # 特徴の重要度をプロットする
  2. fs.plot_feature_importances(しきい値 = 0.99 、plot_n = 12 )
  3. 124の機能必要 累積重要度0.99

左側には、最も重要な特徴(合計が 1 になる正規化された重要度でプロット)が plot_n されており、右側には、特徴の数に対する累積重要度が示されています。垂直線は累積重要度の「しきい値」(この場合は 99%)に描画されます。

重要度ベースのアプローチには、留意すべき注意点が 2 つあります。

  • 勾配ブースティング マシンのトレーニングは確率的であり、モデルが実行されるたびに特徴入力が変化することを意味します。

これによって大きな影響が出ることはありません (最も重要な機能が突然最も重要でなくなることはありません) が、一部の機能の順序は変わります。また、識別される重要度ゼロの特徴の数にも影響を与える可能性があります。機能の重要性が毎回変化しても驚かないでください。

  • 機械学習モデルをトレーニングするには、まず特徴をワンホットエンコードします。つまり、重要度 0 の一部の特徴は、モデリング プロセス中に追加されたワンホット エンコードされた特徴である可能性があります。

機能削除段階に達すると、追加されたワンホットエンコードされた機能を削除するオプションがあります。ただし、特徴選択後に機械学習を実行する場合は、依然として特徴をワンホットエンコードする必要があります。

重要度の低い機能

次の方法は、ゼロ重要度関数に基づいて構築され、モデルの機能入力を使用してさらに選択します。関数 identify_low_importance は、全体の重要度にあまり寄与しない、重要度が最も低い特徴を検出します。

たとえば、次の呼び出しは、全体の重要度の 99% には必要のない、最も重要度の低い機能を見つけます。

  1. fs.identify_low_importance(累積重要度 = 0.99 )
  2. 1 回のホット エンコーディング後に累積重要度0.99 を達成するために必要な特徴は123 個です
  3. 116 個の特徴は、累積重要度0.99に寄与しませ

累積重要度マップとこの情報に基づいて、勾配ブースティング マシンは多くの特徴が学習に無関係であると見なします。繰り返しになりますが、このアプローチの結果はトレーニングの実行ごとに変化します。

データフレーム内のすべての重要な機能を表示するには:

  1. fs.feature_importances.head( 10 )

low_importance メソッドは、主成分分析 (PCA) を使用するアプローチを借用したもので、通常は分散の特定のパーセンテージ (95% など) を保持するために必要な PC のみを保持します。全体の重要度のパーセンテージも同じ考えに基づいています。

特徴の重要度に基づく方法は、予測にツリーベースのモデルを使用している場合にのみ実際に適用できます。ランダム性に加えて、重要度ベースの方法は、モデルが特徴を無関係と見なした理由がわからないため、ブラックボックスアプローチです。これらの方法を使用する場合は、複数回実行して結果がどのように変化するかを確認し、異なるパラメータを持つ複数のデータセットを作成してテストしてください。

単一の一意の値を持つ機能

最後の方法は非常に基本的なもので、一意の値が 1 つだけある列を検索します。一意の値が 1 つしかない特徴は、その分散がゼロであるため、機械学習には役立ちません。たとえば、ツリーベースのモデルは、値が 1 つしかない特徴量で分割することはできません (観測値を分割するグループがないため)。

他の方法とは異なり、ここではパラメータの選択はありません。

  1. fs.identify_single_unique()
  2. 1 つの一意の値を持つ4 つの機能。

各カテゴリ内の一意の値の数のヒストグラムをプロットできます。

  1. fs.plot_unique()

覚えておくべきことの 1 つは、デフォルトでは、pandas で一意の値を計算する前に NaN が削除されることです。

機能の削除

破棄する機能を特定したら、それらを削除するには 2 つのオプションがあります。削除するすべての機能は FeatureSelector の ops 辞書に保存されており、リストを使用して手動で機能を削除できます。もう 1 つのオプションは、「remove」組み込み関数を使用することです。

このメソッドには、機能を削除するために使用するメソッドを渡します。実装されているすべてのメソッドを使用する場合は、methods='all' を渡すだけです。

  1. # すべてのメソッドから機能を削除します (df を返します)
  2. train_removed = fs.remove(メソッド = 'all' )
  3. [ 'missing' 'single_unique' 'collinear' 'zero_importance' 'low_importance' ] メソッドが実行されました
  4.  
  5. 140 個の機能が削除されました。

このメソッドは、機能が削除されたデータフレームを返します。機械学習プロセス中に作成されたワンホットエンコードされた特徴を削除することもできます。

  1. train_removed_all = fs.remove(メソッド = 'all' 、keep_one_hot = False)
  2. ワンホット機能を含む187 個の機能が削除されました。

続行する前に、削除される機能を確認することをお勧めします。元のデータセットは、FeatureSelector のデータ属性にバックアップとして保存されます。

すべてのメソッドを一度に実行する

これらのメソッドを個別に使用する代わりに、identify_all を使用できます。これには、各メソッドのパラメータの辞書が必要です。

モデルを再実行したため、合計特徴数は変わることに注意してください。これらの機能を削除するには、「remove」関数を呼び出します。

要約する

Feature Selector クラスは、機械学習モデルをトレーニングする前に特徴を削除するためのいくつかの一般的な操作を実装します。識別と視覚化のための機能を提供します。効率的なワークフローを実現するために、メソッドを個別に実行することも、一度にすべて実行することもできます。

欠損、共線性、および single_unique の方法は決定論的ですが、特徴の重要度に基づく方法は実行ごとに変化します。機械学習の分野と同様に、特徴選択は主に経験的であり、最適な答えを見つけるために多くの組み合わせをテストする必要があります。パイプラインで複数の構成を試すことがベストプラクティスであり、機能セレクターは機能選択パラメータをすばやく評価する方法を提供します。

<<:  MITの科学者が数時間でロボットヒトデを作る新システムを設計

>>:  なぜ医療においてAIを信頼できないのか?データセットが小さく信頼性が低いため、AI医療にはまだまだ課題がある

ブログ    

推薦する

AIは信頼の危機にどう対処するか

今後 10 年間で AI が改善する必要がある領域が 1 つあります。それは透明性です。しかし、人工...

...

...

...

人工知能が教室に導入されると、教育プロセスにどのような変化が起こるでしょうか?

人工知能技術の応用により、コースの内容、教授法、教師と生徒の関係が変化しています。人工知能の利用によ...

ソラの影に隠れ、不安を抱える中国AI

「ついていけない人は排除されるかもしれない」ソラのデモ動画を見て、10年以上の経験を持つアニメプロ...

スマート端末AxPOS A8Sは単なるハードウェアのフラッシュではありません

AxPOS A8Sは、LianDi Commercialが2020年に構築に注力した新世代のスマート...

今年のダブルイレブンでは、ドローン、無人運転車、ロボットがすべて配備されます!

近年、科学技術革命と産業変革の新たな局面の始まりに伴い、わが国の物流業界は情報化、デジタル化、インテ...

DeepMindがAIツールGNoMEをリリース、220万個の新しい結晶材料を発見したと主張

12月1日、GoogleのDeepMindは最近、Nature誌で自社のAIツールGNoMEを披露し...

ボストン ダイナミクスが CES で楽しいひとときを過ごし、ロボット犬の Spot がメタバースに登場します。

CES 2022 で、ボストン ダイナミクスは Spot ロボット犬をメタバースに導入しました。こ...

...

セキュリティ業界の大手企業はどのようにドローンを配備するのでしょうか?

ドローンは警報装置、検出器、カメラなどを搭載し、多くの機能を実現でき、セキュリティ監視、スマートビル...

黄氏の最新インタビュー:チップ不足はなかなか解消されず、次のトランスフォーマーはすでに登場している

Nvidia の GPU が世界を席巻しています。テクノロジー企業は、Nvidia のスーパーコンピ...