SVMまたはニューラルネットワークを使用しているときにカテゴリ変数を数値変数に再コーディングする方法


19

SVMまたはニューラルネットワークを使用するには、カテゴリ変数を数値変数に変換(エンコード)する必要があります。この場合の通常の方法は、0-1番目のバイナリ値を使用し、k番目のカテゴリ値を(0,0、.. 。、1,0、... 0)(1はk番目の位置にあります)。これを行う他の方法はありますか?特に、0-1表現がニューラルネットワークに多数の追加の次元(入力単位)を導入するようなカテゴリ値(eg10000など)が多数ある場合、これはまったく望ましくない、または予期されないようです?

私は一般的な戦略について尋ねています。


一般的な戦略や特定の問題について質問していますか?
デニスタラソフ

回答:


11

NLPでは、通常、単語は1-of-kとしてエンコードされますが、最近では単語の埋め込みの使用が登場しています。参照のあるウィキペディアのページは良い出発点です。

一般的な考え方は、ベクトル表現を学習することである各ワードに対するI意味的に類似した単語がその空間に近接しています。その結果、入力は語彙のサイズではなくサイズnになります。xiRnin

たぶん、あなたはそのアイデアをあなたの設定に移すことができます。


10

「標準」メソッドは次のとおりです。ワンホットエンコーディング(質問で言及しました)。可能性のあるカテゴリが多すぎるが、0-1エンコードが必要な場合は、ハッシュトリックを使用できます。

他の頻繁に使用される方法は、カテゴリ全体の回答を平均化することです。kaggleのコメントから画像を参照してください。


1

dummyVarsRでcaretパッケージから使用できます。レベル数に基づいて異なる列が自動的に作成されます。その後、使用cbindして元のデータに添付できます。その他のオプションにはmodel.matrixおよびが含まれsparse.model.matrixます。


0

バイナリエンコーディングを試すことができます。これは、よりコンパクトで、場合によってはワンホットよりも優れています。たとえば、Kerasにカテゴリカル埋め込みを実装できます。


0

k1

「カテゴリ変数のエンティティ埋め込み」 Cheng Guo、Felix Berkhahn

関数近似問題のカテゴリ変数をユークリッド空間にマッピングします。ユークリッド空間は、カテゴリ変数のエンティティ埋め込みです。マッピングは、標準的な教師ありトレーニングプロセス中にニューラルネットワークによって学習されます。エンティティの埋め込みは、ワンホットエンコーディングと比較してメモリ使用量を削減し、ニューラルネットワークを高速化するだけでなく、より重要なこととして、埋め込みスペースで類似した値を互いに近くにマッピングすることにより、カテゴリ変数の固有のプロパティを明らかにします。最近のKaggleコンペティションでこれをうまく適用し、比較的シンプルな機能で3番目の位置に到達することができました。この論文では、データがまばらで統計が不明な場合に、エンティティの埋め込みがニューラルネットワークの一般化を促進することをさらに実証します。したがって、他の方法が過剰になりがちな、多くの高カーディナリティ機能を持つデータセットに特に役立ちます。また、トレーニングされたニューラルネットワークから得られた埋め込みが、代わりに入力機能として使用された場合、テストされたすべての機械学習方法のパフォーマンスを大幅に向上させることも示しています。エンティティの埋め込みは、カテゴリ変数の距離測定を定義するため、カテゴリデータの視覚化とデータクラスタリングに使用できます。

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