未知の機能に対して機能エンジニアリングを実行する方法は?


19

私はkaggleコンテストに参加しています。データセットには約100個のフィーチャがあり、すべてが(実際にそれらが表すものに関して)不明です。基本的にそれらは単なる数字です。

これらの機能に対して多くの機能エンジニアリングが行われています。未知の機能に対してどのように機能エンジニアリングを実行できるのでしょうか?誰かがこれを理解するのを助けてもらえますか?また、未知の機能に対して機能エンジニアリングを実行する方法に関するヒントがありますか?

回答:


19

機能エンジニアリング(データをフレーミングするより表現力のある方法を見つける)を行うために、ドメインの知識(データの意味に関する知識)は必要ありません。


通り火N.について説明、あなたはかなり簡単に役に立つことができな機能の「迅速かつ汚い」の組み合わせを見つけることができます。出力と個々の特徴xが与えられると、次の変換x { e xlog x x 2x 3tanh x }を取得できます。変換の有用性の簡単なチェックは、{ y x }の相関が、yxx{ex,log(x),x2,x3,tanh(x)}{y,x}{y,x}

相関に関する警告:相関はすべてを表示するわけではなく、使用しているモデル(NNやRFなどの非常に非線形)および他の変数との相互作用に応じて、相関の変化は何の意味もありません。

ただし、ロジスティック回帰のような単純な線形モデルを使用している場合、パフォーマンスのOKインジケーターです。ただし、Fokhruz Zamanが指摘しているように、このような変換を評価する最良の方法は、変換されたフィーチャの有無にかかわらずモデルを構築し、検証エラー(クロス検証フォールド)がどのように変化するかを確認することです。

この方法で、単一機能の変換を見つけるのはかなり簡単です。これらは多くのデータに適用され、入力と出力の間のより表現力のある関係が異なるスケールになる可能性があります。たとえば、収入と「幸福」の関係は対数のように見えますが、参加者の収入のログを直接記録することはありません。


DD2

NNの内部表現を解釈したり、ランダムフォレストの機能の重要性を解釈したりすることは困難です。この目的のためのより簡単で、おそらくより適した方法のモデルは、決定木によるブースティングです。Boostingを実装するライブラリは多数あります。投稿が暗示しているように、Kaggleの競合に参加している場合は、XGBoostが多くの参加者によって使用されているようです。

最初に、切り株、1レベルの決定木のみを使用してブースティングアルゴリズムを実行します。切り株は非常に弱いですが、ブースティングは合理的なモデルになります。これがベースラインとして機能します。使用しているライブラリに応じて、最も使用されている機能を非常に簡単に表示できる必要があります。また、それらを応答に対してプロット(または応答がカテゴリの場合はヒストグラムを作成)して、パターンを特定する必要があります。これにより、優れた単一機能変換とは何かを直感的に理解できます。

次に、2レベルの決定木でブースティングアルゴリズムを実行します。このモデルは、前のモデルよりもはるかに複雑です。2つの変数を一緒に取得すると、個別に取得するよりも強力な場合、このモデルは以前のものよりも優れているはずです(これもトレーニングエラーではなく、検証エラーです!)。これに基づいて、頻繁に一緒に使用される変数を抽出できるはずです。これにより、潜在的な多機能変換が可能になります。


関連資料については、簡単にフォローできる次のビデオをお勧めします


4

機能の合計:feat_1 + feat_2 + feat_3...、またはそれらの積など、機能のさまざまな組み合わせを使用できます。または、対数、指数、シグモイドによってフィーチャを変換したり、数値フィーチャをカテゴリ化して離散化することもできます。探検するには無限の空間です。

クロス検証またはテストセットのパフォーマンスを向上させる組み合わせまたは変換があれば、それを使用する必要があります。


2
「クロスバリデーションまたはテストセットのパフォーマンスを向上させる組み合わせまたは変換があれば、それを使用する必要があります」と少し問題になります。パフォーマンスメトリックが改善されるまで何かを盲目的に試みると、意味をなさず、過剰適合を引き起こす関係が発見される可能性があります。これは、今後の新しい観測のパフォーマンスを本当に損なう可能性があります。
ハーシージー

1

次の声明について具体的な例を挙げて詳しく説明してください。

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

データセットと指定された属性を十分に理解せずに、フィーチャエンジニアリングをどのように実行できるかわかりません。

表形式データは、変数または属性(列)で構成される観測またはインスタンス(行)の観点から説明されます。属性は機能である可能性があります。

「属性とは別の機能の概念は、問題のコンテキストでより理にかなっています。機能は、問題にとって有用または意味のある属性です。それは、構造の学習のための観察の重要な部分です。モデル化されている問題... ... ...

コンピュータービジョンでは、画像は観察ですが、特徴は画像内の線になる場合があります。

自然言語処理では、ドキュメントまたはツイートが観察結果になり、フレーズまたは単語数が特徴になる場合があります。

音声認識では、発話は観察である場合がありますが、特徴は単一の単語または音素である場合があります。」

詳細については、次のURLをご覧ください。

機能エンジニアリング、機能のエンジニアリング方法、そしてそれをうまく活用する方法を発見する


OPの場合の属性は、ドメイン知識を使用できない点まで匿名化されています。これはKaggleコンペティションでは非常に一般的ですが、機能エンジニアリングの限られた形態は依然として可能です。通常、主題の知識を使用して生成をガイドするのではなく、新しい機能を一括して作成してからテストします。例:kaggle.com/c/bnp-paribas-cardif-claims-management/data
ニール・スレーター

ニールが言ったように、機能は匿名化されています。それが私の声明からの意味です。
user2409011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.