多くの因子型変数 (単語、説明、時間、基本的には数値以外のもの) を含む機械学習をしようとしています。私は通常依存してrandomForest
いますが、32 レベルを超える因子では機能しません。
誰かがいくつかの良い代替案を提案できますか?
多くの因子型変数 (単語、説明、時間、基本的には数値以外のもの) を含む機械学習をしようとしています。私は通常依存してrandomForest
いますが、32 レベルを超える因子では機能しません。
誰かがいくつかの良い代替案を提案できますか?
可能な分割の数はレベルの数とともに指数関数的に増加するため、ツリーメソッドは機能しません。ただし、単語の場合、これは通常、(説明などの)単語ごとにインジケーター変数を作成することで対処されます。この方法では、分割では、考えられるすべての組み合わせを選択する代わりに、一度に1つの単語(はい/いいえ)を使用できます。一般に、レベルはいつでもインジケーターに拡張できます(glmなどの一部のモデルは暗黙的に拡張します)。SVMなどの他のメソッドでテキストを処理するMLでも同じことが言えます。したがって、答えは、メソッドではなく、入力データ構造について考える必要があるということかもしれません。または、レベルに何らかの順序がある場合は、それを線形化できます(したがって、c-1分割のみがあります)。
一般に、多くの因子レベルがある状況で私が見つけた最良のパッケージは、gbm
パッケージを使用することです。
最大 1024 因子レベルを処理できます。
1024 を超えるレベルがある場合は、通常、最も頻繁に発生する 1023 の因子レベルを維持してデータを変更し、残りのレベルを 1 つのレベルとしてコード化します。
32 を超えるクラスを持つクラス変数で randomForest のメソッドを使用することは、理論的には何の問題もありません。計算コストは高くなりますが、randomForest の方法論を使用して任意の数のクラスを処理することは不可能ではありません。通常の R パッケージ randomForest は、特定のクラス変数のクラスの最大数として 32 を設定するため、クラス変数のクラスが 32 を超えるものに対してユーザーが randomForest を実行することを禁止します。
変数を線形化することは非常に良い提案です。クラスをランク付けしてから、32 のメタクラスに均等に分割する方法を使用しました。したがって、実際に 64 の異なるクラスがある場合、メタクラス 1 はクラス 1 と 2 などのすべてのもので構成されます。ここでの唯一の問題は、ランキングを行う賢明な方法を考え出すことです。各単語が他のすべての単語に対してどのようにランク付けされるべきかを知ることは非常に困難です。
これを回避する方法は、n 個の異なる予測セットを作成することです。各セットには、32 を超えるクラスを持つ各クラス変数の 31 のクラスの特定のサブセットを持つすべてのインスタンスが含まれます。すべてのセットを使用して予測を行うことができます。次に、パッケージに付属する変数の重要度測定を使用して、使用されたクラスが最も予測的だった実装を見つけます。31 の最も予測性の高いクラスを明らかにしたら、これらの最も予測性の高いクラスを 1 から 31 として指定するすべてのデータを使用して、新しいバージョンの RF を実装し、それ以外のすべてを「その他」のクラスに実装します。カテゴリ変数ですが、うまくいけば予測力の多くを保持します。
幸運を!