これを説明するために使用される最も単純な例は、XOR問題です(下の画像を参照)。調整されたとyを含むデータと、予測するバイナリクラスが与えられたとします。機械学習アルゴリズムはそれ自体で正しい決定境界を見つけることを期待できますが、追加の特徴z = x yを生成した場合、z > 0により分類のためのほぼ完全な決定基準が得られ、単純な算術!xyz=xyz>0
そのため、多くの場合、アルゴリズムから解決策を見つけることを期待できますが、代わりに、機能エンジニアリングによって問題を単純化することもできます。単純な問題は簡単かつ迅速に解決でき、それほど複雑ではないアルゴリズムが必要です。多くの場合、単純なアルゴリズムはより堅牢であり、結果はより多くの場合解釈可能であり、よりスケーラブル(計算リソースが少なく、トレーニングにかかる時間など)で移植性があります。ロンドンで開催されたPyDataカンファレンスで行われたVincent D. Warmerdamによる素晴らしい講演で、さらに多くの例と説明を見つけることができます。
さらに、機械学習のマーケティング担当者があなたに言うすべてを信じてはいけません。ほとんどの場合、アルゴリズムは「自分で学習する」ことはありません。通常、時間、リソース、計算能力に制限があり、データのサイズには制限があり、ノイズが多いため、どちらも役に立ちません。
これを極端にすると、データを実験結果の手書きメモの写真として提供し、それらを複雑なニューラルネットワークに渡すことができます。最初に写真上のデータを認識することを学び、次にそれを理解し、予測することを学びます。そのためには、強力なコンピューターと、モデルのトレーニングと調整に多くの時間を必要とし、複雑なニューラルネットワークを使用するために大量のデータが必要になります。すべての文字認識を必要としないため、コンピューターで読み取り可能な形式(数値の表)でデータを提供すると、問題が大幅に簡素化されます。機能エンジニアリングを次のステップとして考えることができます。そこでは、意味のあるデータを作成するような方法でデータを変換します。あなたのアルゴリズムがそれ自身で理解することはさらに少ないように機能します。類推すると、外国語で本を読みたかったのと同じように、最初に言語を学ぶ必要があり、理解した言語で翻訳された本を読む必要がありました。
Titanicデータの例では、「家族のサイズ」機能を取得するために、アルゴリズムで家族を合計するのが理にかなっていることを理解する必要があります(はい、ここでカスタマイズします)。これは人間にとって明らかな機能ですが、データを数字の一部の列として見ただけでは明らかではありません。他の列と一緒に検討したときに意味のある列がわからない場合、アルゴリズムは、そのような列の可能な組み合わせをそれぞれ試すことでそれを把握できます。もちろん、これを行う賢明な方法はありますが、それでも、情報をアルゴリズムにすぐに提供すればずっと簡単です。