機能エンジニアリングのユーティリティ:既存の機能に基づいて新しい機能を作成する理由


30

機械学習の問題に関する既存の機能に基づいて、人々が新しい機能を作成することがよくあります。たとえば、ここに:https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/人はベース、新機能として、人の家族の大きさを考慮しました既存の機能であった兄弟、姉妹、および親の数。

しかし、これのポイントは何ですか?相関関係のある新しい機能を作成することが有用な理由がわかりません。それを自分で行うのはアルゴリズムの仕事ではないでしょうか?


回答:


30

これを説明するために使用される最も単純な例は、XOR問題です(下の画像を参照)。調整されたyを含むデータと、予測するバイナリクラスが与えられたとします。機械学習アルゴリズムはそれ自体で正しい決定境界を見つけることを期待できますが、追加の特徴z = x yを生成した場合、z > 0により分類のためのほぼ完全な決定基準が得られ、単純な算術!xyz=xyz>0

XOR問題

そのため、多くの場合、アルゴリズムから解決策を見つけることを期待できますが、代わりに、機能エンジニアリングによって問題を単純化することもできます。単純な問題は簡単かつ迅速に解決でき、それほど複雑ではないアルゴリズムが必要です。多くの場合、単純なアルゴリズムはより堅牢であり、結果はより多くの場合解釈可能であり、よりスケーラブル(計算リソースが少なく、トレーニングにかかる​​時間など)で移植性があります。ロンドンで開催されたPyDataカンファレンスで行われたVincent D. Warmerdamによる素晴らしい講演で、さらに多くの例と説明を見つけることができます。

さらに、機械学習のマーケティング担当者があなたに言うすべてを信じてはいけません。ほとんどの場合、アルゴリズムは「自分で学習する」ことはありません。通常、時間、リソース、計算能力に制限があり、データのサイズには制限があり、ノイズが多いため、どちらも役に立ちません。

これを極端にすると、データを実験結果の手書きメモの写真として提供し、それらを複雑なニューラルネットワークに渡すことができます。最初に写真上のデータを認識することを学び、次にそれを理解し、予測することを学びます。そのためには、強力なコンピューターと、モデルのトレーニングと調整に多くの時間を必要とし、複雑なニューラルネットワークを使用するために大量のデータが必要になります。すべての文字認識を必要としないため、コンピューターで読み取り可能な形式(数値の表)でデータを提供すると、問題が大幅に簡素化されます。機能エンジニアリングを次のステップとして考えることができます。そこでは、意味のあるデータを作成するような方法でデータを変換します。あなたのアルゴリズムがそれ自身で理解することはさらに少ないように機能します。類推すると、外国語で本を読みたかったのと同じように、最初に言語を学ぶ必要があり、理解した言語で翻訳された本を読む必要がありました。

Titanicデータの例では、「家族のサイズ」機能を取得するために、アルゴリズムで家族を合計するのが理にかなっていることを理解する必要があります(はい、ここでカスタマイズします)。これは人間にとって明らかな機能ですが、データを数字の一部の列として見ただけでは明らかではありません。他の列と一緒に検討したときに意味のある列がわからない場合、アルゴリズムは、そのような列の可能な組み合わせをそれぞれ試すことでそれを把握できます。もちろん、これを行う賢明な方法はありますが、それでも、情報をアルゴリズムにすぐに提供すればずっと簡単です。


ありがとう、それは非常によく説明されていて非常に興味深い!
マチューヴェロン

あなたの答えは非常に良いと思いますが、少し修飾する方が良いと思います。具体的には、RFは相互作用項をある程度までそれ自体で捕捉するため、相互作用項の機能エンジニアリングはRFなどのアルゴリズムの場合はそれほど単純化しないと思います(それでもなお役立ちます)。重要なものが不足している場合はお知らせください。しかし、一般的には、機能エンジニアリングは単純化され、非常に多くのことを助けます。
Poete Maudit

@PoeteMauditデシジョンツリー(およびRF)が1つの大きな相互作用をモデル化することは事実ですが、すべての可能な相互作用ではなく、特定の種類の相互作用です。さらに、機能エンジニアリングは相互作用だけではありません。
ティム

確かに私はあなたの主張に同意します。まず、RFは特定の種類の相互作用をモデル化します(主にx * yを意味しますか?)。第二に、その機能エンジニアリングは確かに相互作用だけではありません。
Poete Maudit

14

まあ、単純な線形分類器を使用する予定の場合、既存の機能の非線形関数である新しい機能を生成することは完全に理にかなっています。特に、ドメインの知識が結果の機能が意味のある有益な情報であることを示している場合です。線形分類器は、明示的に指定しない限り、これらの複雑な機能を考慮できないことに注意してください。

理想的には、十分に強力な非線形分類アルゴリズムを使用する場合、入力フィーチャが分類に役立つ場合、入力フィーチャの任意の非線形変換を考慮する決定境界を作成できるはずです。ただし、実際には、ほとんどの非線形分類器は、あるタイプの変換を見るだけです。たとえば、多項式カーネルSVMは機能間の多項式相互作用を考慮しますが、他のタイプの変換を適用することにより、より有益な機能を作成できる場合があります...

要するに、ドメインの知識が、手作りの機能の非線形の組み合わせが有益であることを示している場合、それを既存の機能のセットに追加することは理にかなっています。


わかりました!しかし、作成した機能が有意義で有益なものであるかどうかを知るにはどうすればよいですか?つまり、問題には直観に反した説明があります。私が理解していることから、フィーチャの作成はアルゴリズムを一方向に誘導し、予測の時間を節約する方法です。そのため、いくつかの方法で、アルゴリズムに影響を与えています。私たちが正しく影響していることを確認する方法は?
マチューヴェロン

2
それは、ドメインの知識が入ってくることです。たとえば、医療診断システムを設計している場合、医師に相談して、患者の診断に使用する情報を尋ねることができます。例えば、ある医師が「患者に発熱と頭痛の両方がある場合、インフルエンザにかかる可能性が高い」と言った場合。その文は、発熱と頭痛の両方の存在を示す新しいフラグ機能を含めることをお勧めします(特に、線形相互作用機能を単独で「見る」ことができない線形分類器を使用する場合)。
ダニエルロペス

1
それにもかかわらず、これは科学というより芸術です。終わりに、あなたは...公平な実験プロトコルでテスト・セットにモデルをテストすることによって、あなたの手に細工された機能の有効性を検証する必要がある
ダニエル・ロペス

3

機械学習モデルの中には、変数間の非線形性と相互作用を処理する機能があるものもありますが、状況によって異なります。3つの理由が必要になると思います。

  1. Y=1

Circle Boundary

x1バツ2y=バツ0+c1バツ1+c2バツ2ターゲット変数を分類する方法を見つけられません。そのため、代わりに、非線形性をキャプチャするために新しい4次機能が必要です。y=バツ0+c1バツ12+c2バツ22

  1. (ビジネスの知識や経験から)いくつかの機能を事前に知っている場合、それらを作成してモデルの実行時間を短縮し、モデルを簡単にすることができます。たとえば、タイタニックデータの例で、ディシジョンツリー分類モデルを使用している場合。古い女性(年齢と性別)が生き残る可能性が高いことがわかっている場合、情報をキャプチャする単一の機能を作成することで、ツリーは2つの変数を2つに分割する代わりに、新しい変数を1つに分割できます。機能が重要であることを事前に知っている場合、計算時間を短縮できます。

  2. 現実の世界では、Kaggleが提供するような単一のデータセットを取得することはありません。代わりに、あちこちから情報を取得します。たとえば、Amazonのようなオンライン小売企業の顧客の減少を予測する場合、顧客の人口統計情報、購入取引情報があります。さまざまなソースから多くの機能を生成する必要があります。この場合、トランザクションレベルから多くの有用な機能を取得/集約できることがわかります。Andrew Ngが言うように:機能エンジニアリングを行う能力は、機械学習プロジェクトの成功または失敗を定義することがよくあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.