ソレダッド・ガリ 翻訳者:趙青棠 企画丨孫淑娇、梁策 インターネットで「特徴選択」を検索してみると、特徴選択を「フィルター方式」「ラッパー方式」「埋め込み方式」の 3 種類にまとめた記事が多数見つかります。 「フィルター方法」では、特徴分布に基づいて特徴選択を実行する統計テスト方法を使用します。この方法は計算的には非常に高速ですが、実際にはモデルに最適な特徴を選択しません。さらに、データセットが大きい場合、統計テストの p 値は非常に小さくなる傾向があり、分布における重要ではない小さな有意差が拡大されてしまいます。 「ラッパー メソッド」カテゴリには、前方検索、後方検索、または網羅的検索に基づいて、すべての可能な機能の組み合わせを試す貪欲アルゴリズムが含まれます。各機能の組み合わせに対して、通常、クロス検証を使用して機械学習モデルをトレーニングし、モデルのパフォーマンスを正確に測定します。したがって、ラッピング方法は計算コストが高く、実装が困難な場合が多くあります。 一方、組み込みメソッドは、単一の機械学習モデルをトレーニングし、モデルによって返される特徴の重要度に基づいて特徴選択を実行します。これらは実際には非常にうまく機能し、計算もはるかに高速です。ただし、この方法には主に 3 つの欠点があります。
フィルター メソッドはわかりにくく、実際にはあまり使用されません。ラッパー メソッドは計算コストが高く、実装が不可能な場合が多く、埋め込みメソッドはすべてのシナリオやすべての機械学習モデルに適用できるわけではありません。では、他にどのようにして予測機能を選択できるでしょうか? 幸いなことに、教師あり学習用の特徴を選択する方法は他にもあります。この記事では、モデルのパフォーマンスに基づいて特徴を選択するためのアルゴリズムを 3 つ詳しく紹介します。これらはラッピング法と埋め込み法の両方の特徴を備えているため、「ハイブリッド法」と呼ばれることもあります。これらの中には、複数のトレーニング済み機械学習モデルに依存するため、ラッピング法に少し似ているものもあります。一部の選択手順は、埋め込み方法のように、特徴の重要性に依存します。 機能選択の代替案 ✦これらの方法は、業界やデータ サイエンスのコンテストで効果的に適用されており、特定のマシン モデルをトレーニングして特徴予測を実行するための方法を提供しています。 この記事では、これらの特徴選択方法のいくつかのロジックとフローを紹介し、オープンソース ライブラリ Feature-engine を使用して Python でそれらを実装する方法を示します。 ここでは、次の 3 つの特徴選択方法について説明します。
機能の再配置 ✦特徴シャッフルは、順列特徴重要度とも呼ばれ、モデルのパフォーマンス スコアの降順で単一の特徴を並べ替えることを指します。特徴値の順序(データセットの行内)を変更すると、特徴とターゲット間の元の関係が変わり、モデルのパフォーマンス スコアの降順は、モデルがその特徴にどの程度依存しているかを示します。 具体的なプロセスは以下のとおりです。
機能を変換して選択することにはいくつかの利点があります。まず、機械学習モデルをトレーニングし、機械学習モデルを使用して特徴値を再配置するだけで済みます。次に、教師あり機械学習モデルの機能を選択できます。 3 つ目は、この選択プロセスを実装するためにオープンソースを使用することができ、具体的な方法については次の段落で紹介します。 アドバンテージ:
欠点は、2 つの特徴が相関している場合、特徴の 1 つが乱れても、機械学習モデルは相関変数を通じて対応する情報を取得できるため、相関する両方の特徴が実際には重要であるにもかかわらず、その重要度の値が低くなる可能性があることです。さらに、特徴を選択するには、その値を下回る特徴が削除される有意性しきい値を定義する必要があります。しきい値が高くなるほど、選択される機能は少なくなります。最後に、特徴シャッフルによってランダム要素が導入されるため、重要度の値がしきい値に近い特徴の場合、アルゴリズムの異なる実行によって異なる特徴のサブセットが返される可能性があります。 注記:
これを念頭に置くと、特徴の順列はモデルのパフォーマンスに直接影響を与える変数を強調表示し、特徴の選択に最適な方法です。Scikit-learn を使用して順列の重要度を手動で導き出し、重要度が特定のしきい値を超える変数を選択できます。あるいは、Feature-engine を使用してプロセス全体を自動化することもできます。 Python実装✦Feature エンジンを使用して、特徴の再配置による選択を実行する方法を見てみましょう。 Scikit-learn に付属する糖尿病データセットを選択します。まず、データをロードします。 pandasをpd としてインポートする 次に、目的の機械学習モデルを構築します。 # 線形回帰推定器を初期化する スコアリング = ''r2'' ドロップに基づく特徴選択には、3 フォールド交差検証を使用します。 # 機能セレクタを初期化する トランスフォーマーは fit() メソッドを使用して重要な変数 (つまり、再シャッフル時に r2 が減少する変数) を見つけます。デフォルトでは、パフォーマンスの低下がすべての機能によって生じる平均の低下よりも大きい場合に機能が選択されます。 # フィットトランス transform() メソッドを使用して、データセットから選択されていない機能を削除します。 Xt = tr .transform ( X ) トランスフォーマーの属性を通じて各機能の重要性を照会できます。 tr . パフォーマンスドリフト_ 削除される機能の名前には、別の属性を通じてアクセスできます。 tr .削除する機能 これで、Xt のデータ フレームが縮小されました。 特徴 ✦特徴の重要性を判断する最も簡単な方法は、その特徴のみを使用して機械学習モデルをトレーニングすることです。この場合、機能の「重要度」はモデルのパフォーマンス スコアによって決まります。言い換えれば、単一の特徴に基づいてトレーニングされたモデルがターゲットを予測する際にどれだけ効果的であるかということです。パフォーマンス スコアが低い場合、機能が弱いか予測不可能であることを示します。 プロセスは次のとおりです。
この選択プロセス中に、各機能に対して機械学習モデルをトレーニングします。モデルは単一の特徴を使用してターゲット変数を予測します。次に、クロス検証を使用してモデルのパフォーマンスを計算し、最終的にパフォーマンスが設定されたしきい値を超える機能が選択されます。 一方、この方法では、トレーニングする必要のあるモデルの数が多く、同じデータセット内の特徴の数が多いため、計算コストが高くなります。一方、単一の特徴でトレーニングされたモデルは非常に高速になる傾向があります。 このアプローチを使用すると、パフォーマンス メトリックによって重要度が決定されるため、関心のある機能のモデルを学習できます。欠点は、特徴選択のためのしきい値を提供する必要があることです。しきい値が高くなるほど、選択される機能グループの数は少なくなります。いくつかのしきい値は非常に直感的です。たとえば、パフォーマンス メトリックが roc-auc の場合、パフォーマンスが 0.5 を超える機能を選択できます。精度などの他の指標については、合理的なしきい値が何であるかは明確ではありません。 アドバンテージ:
注記:
Feature-engine を使用して、単一の機能のパフォーマンスを選択できます。 Python実装✦Scikit-learn から糖尿病データセットを読み込みます。 pandasをpd としてインポートする 線形回帰と3倍交差検証を使用して、r2 > 0.01の特徴が選択されました。 # 機能セレクタを初期化する トランスフォーマーは fit() メソッドを使用して各機能にモデルを適合させ、そのパフォーマンスを計算し、重要な機能を選択します。 # フィットトランス 破棄される機能を見てみましょう。 削除するフィーチャを選択 各機能のパフォーマンスを確認することもできます。 sel .feature_performance_ transform() メソッドを使用して、データセットから特徴を削除します。 # 変数をドロップする このようにして、データセットが縮小されます。 目標平均パフォーマンス✦これから説明する選択方法は、KDD 2009 データ サイエンス コンペティションでミラー氏とその同僚によって導入されました。著者はこの手法に名前を付けていませんが、各データ グループの平均ターゲット値を予測子として使用するため、私はこの手法を「ターゲット平均パフォーマンス選択」と呼ぶことにします。 この選択方法では、各機能に「重要度」の値も割り当てられます。この重要度の値は、パフォーマンス指標に基づいて決定されます。興味深いことに、このモデルは機械学習モデルをトレーニングしません。代わりに、非常に単純な指標値を使用して予測を行います。 つまり、この選択方法では、各カテゴリまたは各間隔 (変数が連続している場合) の平均ターゲット値を予測子として使用します。この予測から、r2、精度、または事実に対して予測を評価するその他のメトリックなどのパフォーマンス メトリックを取得できます。 では、この選択方法はどのように機能するのでしょうか? カテゴリ変数の場合:
各カテゴリ項目について、トレーニング セットに基づいて各カテゴリのターゲットの平均が決定されます。次に、テスト セット内の各カテゴリ項目が、学習したばかりのターゲット平均に置き換えられ、これらの値を使用してパフォーマンス メトリックが決定されます。 連続変数の場合、プロセスはカテゴリ変数の場合と同様です。
連続変数の場合、著者はまずすべての項目を異なるグループに分割します。このプロセスは離散化とも呼ばれます。彼らは 1% の分位値を使用し、トレーニング セット内の各グループの目標平均を計算し、テスト セット内の対応する間隔の値を対応する間隔の目標平均に置き換えて、パフォーマンスを評価しました。 この機能選択方法は非常にシンプルで、各ビン(クラスまたは間隔)の平均を計算し、これらの値を使用してパフォーマンス メトリックを取得します。シンプルですが、多くの利点があります。 まず、機械学習モデルのトレーニングを必要としないため、計算が非常に高速です。 2 番目に、ターゲットとの非線形関係をキャプチャできます。 3 番目に、既存のほとんどの選択アルゴリズムとは異なり、カテゴリ変数に対して機能します。これは外れ値の処理にも適用され、これらの極端な値は極端なグループに割り当てられます。著者によれば、この方法はカテゴリ変数または数値変数に対して比較的客観的なパフォーマンスを提供できるという。また、モデルとは一切関係ありません。理論的には、このように選択された特徴は、あらゆる機械学習モデルに適用できるはずです。 アドバンテージ:
この選択方法にもいくつかの制限があります。まず、連続変数の場合、ユーザーは値を並べ替えるために任意の数の間隔を定義する必要があります。これは、歪んだ変数データの大部分が同じグループにのみ属する可能性がある歪んだ変数に対して問題を引き起こします。第二に、ラベル付け頻度の低いカテゴリ変数は、これらのカテゴリのデータが少なく、そのようなカテゴリの平均目標値が信頼できないため、信頼できない結果につながる可能性があります。極端な場合、トレーニング セットにクラスが存在しない場合は、パフォーマンスを計算するための平均ターゲット値を取得できません。 注記:
これらの要素を考慮すると、Feature-engine を使用して、目標平均パフォーマンスに基づいて変数を選択できます。 Python実装✦このアプローチを使用して、数値変数とカテゴリ変数が混在するタイタニック データセットから変数を選択します。データをロードするときに、デモンストレーションの目的で前処理を行ってから、トレーニング セットとテスト セットに分割します。 pandasをpd としてインポートする roc-auc に基づく特徴選択には 2 段階交差検証を使用します。最初に注目すべき点は、Feature-engine を使用すると相互検証を使用できることです。これは、著者が説明した元のアプローチよりも改善されています。 Feature-engine を使用すると、数値変数の間隔を決定する方法も決定できます。等頻度または等幅の間隔を選択できます。著者らは 1% の分位値を使用しましたが、これは値が適切に分布している連続変数には適していますが、歪んだ変数には一般的に不適切です。この例では、数値変数を等しい頻度間隔に分割します。最後に、roc-auc が 0.6 より大きい特徴を選択します。 # 機能-エンジンが選択を自動化 fit() メソッドを使用すると、トランスフォーマーは次のことが可能になります。
各特徴の ROC-AUC を計算できます。 sel .feature_performance_ データから削除する特徴を見つけることができます: 削除するフィーチャを選択 transform() メソッドを使用すると、データセットから特徴を削除できます。 # 機能を削除 これまでのところ、トレーニング セットとテスト セットの合理化されたバージョンができました。 結論 ✦Python でのフィルタリング、ラッピング、埋め込み、ハイブリッド特徴選択メソッドの実装については、Scikit-learn、MLXtend、Feature-engine の選択モジュールを参照してください。これらのライブラリには、基礎となる方法論を理解するのに役立つ詳細なドキュメントが付属しています。 翻訳者紹介✦51CTO コミュニティ エディターの Zhao Qingtiao 氏は、長年にわたりドライバー開発に携わってきました。彼の研究対象は、セキュア OS とネットワーク セキュリティです。彼は、陝西数学モデリング賞を受賞し、ネットワーク関連の特許を公開しています。 |
<<: 機械学習の錬金術の理論的根拠はどれほど強固なのでしょうか?
>>: Python での機械学習アルゴリズムの実装: ニューラル ネットワーク
ドム・クッドウェル著ノアが編集制作:51CTO テクノロジースタック(WeChat ID:blog)...
今日、ますます多くの国や地域が、業務効率の向上、国民へのより良いサービスの提供、そして任務遂行能力の...
翻訳者 |ブガッティレビュー | Chonglou事前トレーニング済みのAIモデルがすぐに利用できる...
[[199334]]自動運転車は20年以内に世界経済を劇的に変え、保険、メディア、セキュリティ、物流...
北京市宜荘市内の約60平方キロメートルの制限区域内で、数十台のロボタクシー(無人タクシー)が現在、公...
ネイチャー誌の最近の分析記事では、中国の人工知能研究は質の面で急速な進歩を遂げているが、影響力の大き...
モデルとデータは AI システムの基盤であり、これら 2 つのコンポーネントはモデルの開発において重...
9月17日、上海の西外灘で2018年世界人工知能大会が正式に開幕した。ジャック・マー、ポニー・マー...
最小限の労力で最も効率的な PyTorch トレーニングを完了するにはどうすればよいでしょうか? P...