大きなカテゴリ値のホットエンコーディングの代替手段の1つ?


13

こんにちは1600カテゴリを超える大きなカテゴリ値を持つデータフレームがあります。1600列を超えないように代替手段を見つける方法はありますか。

私はこれを興味深いリンクの下に見つけましたhttp://amunategui.github.io/feature-hashing/#sourcecode

しかし、彼らは私が望まないクラス/オブジェクトに変換しています。さまざまな機械学習モデルでテストできるように、最終出力をデータフレームとして必要ですか?または、生成された行列を使用して、ロジスティック回帰またはXGBoost以外の他の機械学習モデルをトレーニングする方法はありますか?

とにかく実装できますか?


これは本当に問題ですか?スパースマトリックス表現を使用している場合、onehotエンコーディングは実際の問題にはなりません。
Louis T

@LouisT 5億件を超える数百万件のレコードがあります
vinaykva

それでも1つ暑い場合でも、スパースマトリックスを使用しても問題にはなりません
Louis T

@LouisT複雑さが増し、トレーニング時間が増加し、私のデータが非常にまばらになります
vinaykva

1
あなたの投稿は約1年前で、おそらくもう興味はありませんが、まだ興味がある場合は、ニューラルネットを使用したエンティティの埋め込みについて聞いたことがありますか?medium.com/@satnalikamayank12/...
TwinPenguins

回答:


10

1つのオプションは、まれな値を「その他」にマッピングすることです。これは通常、たとえば自然言語処理で行われます。直感では、非常にまれなラベルは統計的検出力をあまり持ちません。

また、1ホットのカテゴリ値をより低次元のベクトルにマッピングする人々を見たことがあります。1ホットの各ベクトルは、多変量ガウスからの描画として再表現されます。たとえば、このアプローチは圧縮センシングのアイデアによって動機付けられていると述べている論文「Deep Knowledge Tracing」を参照してください。

BARANIUK、R。圧縮センシング。IEEE信号処理マガジン24、4(2007)。

具体的には、長さNの各ベクトルを、長さlog2(N)の短いベクトルにマッピングします。私自身はこれを行っていませんが、試してみる価値はあると思います。


そのようなエンコーディングで距離を計算する方法を知りたいですか?
eric2323223

2

データを読み取り、最初にカテゴリ変数のすべての一意の値のリストを取得できます。次に、一意の値のリストに1つのホットエンコーダーオブジェクト(sklearn.preprocessing.CategoricalEncoderなど)を適合させることができます。

この方法は、トレーニングテストフレームワークや、データを分割して読み取る場合にも役立ちます。私はこれらすべてを独自に行うpythonモジュールを作成しました。このGitHubリポジトリで見つけることができます-dummyPy

これに関する短いチュートリアル-Pythonでカテゴリ変数をホットエンコードする方法


1

このリンクを参照してください(これは、かなりの数の一意の値を持つカテゴリ機能にも関連しています):

https://datascience.stackexchange.com/a/64021/67149

埋め込みについては、以下のリンクを参照してください(私が作成したものではありませんが、一度読む価値はあります):https : //medium.com/@satnalikamayank12/on-learning-embeddings-for-categorical-data-using-keras-165ff2773fc9


0

類似した値のバケット化を行うことができるため、最も近い値を保持する(または類似性が高い)パターンを1つの値(または列)で置き換えることができるため、1600の値は400(またはもっと少なく)。

例 (雲のような-ニンバス雲、霧雨、小雨、雨、大雨)のような値の場合、(小雨、雨、大雨)に変換できます。

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