web-dev-qa-db-ja.com

カテゴリカルデータによるKNN分類

私はk最近傍回帰を含むプロジェクトに取り組んでいます。数値フィールドとカテゴリフィールドが混在しています。カテゴリ値は序数です(銀行名、口座タイプなど)。数値タイプは、たとえば、給与と年齢。いくつかのバイナリタイプ(男性、女性など)もあります。

カテゴリ値をKNN分析に組み込むにはどうすればよいですか?

私の知る限り、各カテゴリフィールドを数字キー(バンク1 = 1、バンク2 = 2など)に単純にマッピングすることはできないため、カテゴリフィールドを使用するためのより良いアプローチが必要です。 2進数を使用できると聞きましたが、これは実行可能な方法ですか?アドバイスをいただければ幸いです。

15
Graham

データに対して機能する距離関数を見つける必要があります。バイナリインジケータ変数を使用すると、この問題が暗黙的に解決されます。これには、おそらくマトリックスベースの実装をこの種のデータで続行できるという利点がありますが、はるかに簡単な方法(ほとんどの距離ベースの方法に適しています)は、変更された距離関数を使用することです。

そのような組み合わせは無数にあります。自分に最適な方法を試す必要があります。基本的に、数値にいくつかの古典的なメトリックを使用し(通常は正規化を適用しますが、この正規化を距離関数に移動することも理にかなっている場合があります)、さらに適切にスケーリングされた他の属性の距離を使用することもできます。

距離ベースのアルゴリズムのほとんどの実際のアプリケーションドメインでは、これが最も難しい部分であり、ドメイン固有の距離関数を最適化します。これは前処理の一部として見ることができます:類似性の定義。

ユークリッド距離だけでなく多くのがあります。あなたの場合にははるかに適切かもしれない様々な集合論的尺度があります。たとえば、谷本係数、ジャッカード類似度、ダイス係数などです。コサインもオプションかもしれません。

類似性検索のトピックに特化した会議全体があります-これがユークリッドベクトル空間以外では些細なことだと誰も主張しませんでした(そして実際にはそこにもありません): http://www.sisap.org/2012

13
Anony-Mousse

カテゴリカルデータを数値に変換する最も簡単な方法は、インジケーターベクトルを使用することです。以前のコメントで投稿したリファレンスを参照してください。

1
Shai

Locality Sensitive Hashing(LSH)+ edit distanceを使用して、すべてのビンが異なるカテゴリを表すと想定できますか?カテゴリデータには順序がなく、LSHのビンはハッシュ関数に従って配置されていることを理解しています。意味のある数のビンを与えるハッシュ関数を見つけることは、距離空間を学ぶように私には聞こえます。

0
omarflorez