カーディナリティが大きく異なる場合の高カーディナリティ(多カテゴリ)カテゴリカルフィーチャのエンコード


8

カテゴリ機能のエンコードに関する質問を調べてきましたが、私の問題を説明するものは見つかりませんでした。見逃した場合はお詫びします。


ほぼ同じ重要度のバイナリ変数とノミナル変数のデータセットがあるとします。

ほとんどの分類子はカテゴリ型を直接処理できないため、これらを変換する必要があります。たとえば、この回答で説明されているように、ワンホットエンコーディング(ダミー変数)を使用します

  • 1つのカテゴリ変数のカーディナリティが高い場合、この方法で他の(たとえばバイナリ)変数を "圧倒"してエンコードしませんか?「カーディナリティー」とは、名目変数内のカテゴリーの数を意味します。

  • 分類子モデルが変数間の関係を認識している場合、同じ変数の導入されたバイナリダミー「コンポーネント」間の関係を不必要に見つけようとしないのではないでしょうか。

もしそうなら、これはどのように対処できますか?

私が考えることができる最良の解決策は、高カーディナリティのプロパティを論理的に「バケット」にグループ化することですが、問題となるのに十分な一意の値がある場合、手動でそれらをグループ化すると、労力もかかります。


編集:これは取るに足らないことであり、部分的にのみ問題に対処しますが、私がやったことの1つは、比較的まれなすべてのカテゴリ値を新しい「その他」のカテゴリに置き換えることです。値を「まれ」と見なす場合、しきい値を最適化するのに時間がかかる可能性がありますが、少なくともこのアプローチは自動化できます。


1
他の解決策は、「グループ化されたなげなわ」のいくつかのバージョンでなげなわを使用して、統計的に類似しているため、アルゴリズムがマージできるカテゴリを提案するようにすることです。これについては、以前にここで説明しました。stats.stackexchange.com
questions /

回答:


8

1つのカテゴリ変数のカーディナリティが高い場合、この方法で他の(たとえばバイナリ)変数を "圧倒"してエンコードしませんか?

アルゴリズムによって異なります。

サンプリングに基づくアルゴリズム(ランダムフォレスト、極端にランダム化されたツリー、勾配ブースティング、またはバギング分類器...)は、データのサブサンプルで多くのモデルをトレーニングします。列の90%が「ダミー化された」変数を表す場合、多数のモデルが実際に同じ変数で機能している可能性が高いため、本来よりも相関が高くなり、パフォーマンスが向上します。

線形回帰法は影響を受けず、エンコードされた変数によって生成されるすべてのバイナリ変数に重みを与えるだけです。

最近傍との類似性に基づく方法(例えばカーネルのSVMなど)の影響は十分ように制限されるべきです。列の数に関係なく、最終的に重要なのは内積またはデータの2行間の距離だけです。ただし、名義変数から派生する列の数、距離(または内積)は0または1のみです(名義変数が等しいかどうかは異なります)。

分類子モデルが変数間の関係を認識している場合、同じ変数の導入されたバイナリ「コンポーネント」間の関係を不必要に見つけようとしないのではないでしょうか。

分類子は変数間の関係をどのように「認識」していますか?この質問に対処できるかどうかはわかりません。

もしそうなら、これはどのように対処できますか?

列のサンプルに依存するメソッドの場合、以前の重みを列に与えることができます(同じ確率で選択されないようにするため)。ただし、これを実行する実装は考えていません。他の列を繰り返すと、人為的に選択される可能性が高まります。

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