ニューラルネット:ワンホット変数圧倒的連続?


13

約20列(20フィーチャ)の未加工データがあります。それらのうちの10個は連続データであり、10個はカテゴリカルです。一部のカテゴリデータには、50個の異なる値(米国の州)が含まれる場合があります。データを前処理した後、10個の連続した列が10個の準備された列になり、10個のカテゴリ値が200個のワンホットエンコード変数のようになります。これらの200 + 10 = 210の機能すべてをニューラルネットに入れると、200の1ホットフィーチャ(10のカテゴリ列)が10の連続フィーチャを完全に支配するのではないかと心配しています。

おそらく、1つの方法は、列などを「グループ化」することです。これは有効な懸念事項ですか?この問題に対処する標準的な方法はありますか?

(私はKerasを使用していますが、それほど重要ではないと思います。)


2つ(またはそれ以上)のシーケンシャルモデルを使用し、それらをマージすることを検討しましたか?(ソーセージのようにマッシュアップするのとは対照的に)各モデルには、データとよりよく一致する入力があります。ターゲットは同じですが、2セットのトレーニングデータを作成します。マージの直後に最終出力層が来るので、最終層は特定のサンプルに最適なモデルを決定します。keras.ioから:keras.io/getting-started/sequential-model-guide
photox

まさに私が探していたもの。貢献してくれてありがとう。
user1367204

これを試しましたが、アンサンブル(model_1、model_2)のval_lossはmodel_1のval_lossよりも高く、model_2のval_lossよりも高くなりました。
user1367204

実際にこれを試してみて、この問題が実際に発生していると判断しましたか?この点を確認するためにどのようなテストをしましたか?結果はどうでしたか?
ヒューパーキンス

回答:


5

ワンホットとは異なる方法でカテゴリ変数をエンコードできます。この場合、バイナリまたはハッシュエンコーダが適切な場合があります。特にハッシュは、すべてのカテゴリを特徴ベクトルごとに単一の表現にエンコードするので便利です。したがって、1つのカテゴリが他のカテゴリを支配することはありません。最終表現のサイズも指定できるため、すべてのカテゴリ変数を10個のフィーチャにハッシュし、20個の数値フィーチャ(半連続、半カテゴリ)になります。

両方ともhttps://github.com/scikit-learn-contrib/categorical-encodingで実装されているか、自分で実装するのはかなり簡単です。


4

埋め込みを使用して、多数のカテゴリ変数を単一のベクトルに変換できます。この圧縮ベクトルは、カテゴリフィーチャの分散表現になります。カテゴリー入力は、すべての入力を記述するN個の潜在的特徴を何らかの形で表すN個の実数を持つ長さNの比較的小さなベクトルに変換されます。

英語の辞書にある多数の単語を考えてみましょう。この数がNの場合、各単語を長さNのワンホットコーディングされたベクトルとして表すことができます。ただし、word-to-vecは事実上すべての情報を200〜300の長さのベクトルでキャプチャできます。

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