One Hot Encoding vs LabelEncoder vs DictVectorizo​​rを使用する場合


96

しばらくの間、カテゴリデータを使用してモデルを構築してきましたが、この状況では、基本的にscikit-learnのLabelEncoder関数を使用して、モデルを構築する前にこのデータを変換します。

私は違いを理解しOHELabelEncoderそしてDictVectorizor、彼らはデータに何をしているかという点では、しかし、あなたは他の上にある技術を採用することを選択する可能性がある場合、私には明確ではないものです。

あるものが他のものに対して利点/欠点を持っている特定のアルゴリズムまたは状況はありますか?


2
AN6U5の答え、およびこのステートメントを参照してください。>カテゴリ変数でうまく機能する決定木やランダムフォレストなどのアルゴリズムがまだあり、LabelEncoderを使用してより少ないディスクスペースで値を保存できます。LabelEncoderを使用して、カテゴリカルを数値フィーチャに変換し、それによって決定ツリーが、マッピングが任意であるために実際には意味をなさないいくつかの値で分割を実行しませんか?
ニコ

1
ニコ、AN6U5が言っていることは、それが正常に動作する決定木専用であると思います。なぜなら、木は犬、猫、マウスまたは1,2,3で分割され、「猫」対「2」の意味は重要ではないからですツリー(分割方法について考えてください)。ロジスティック回帰のようなものの場合、weight:1の値を乗算すると、dog:1とcat:2に数値1 * 2の関係がない場合にトレーニングの問題と体重の問題が発生する可能性があるため、値は方程式の一部です(ただし、十分なトレーニング例とエポックで引き続き機能します)。
ダグF

回答:


125

LabelEncoderまたはDictVectorizo​​rが便利な場合がありますが、これらは通常の理由で私の意見ではかなり制限されています。

LabelEncoderは[dog、cat、dog、mouse、cat]を[1,2,1,3,2]に変えることができますが、課された順序は、犬とマウスの平均が猫であることを意味します。決定木やランダムフォレストなどのアルゴリズムがあり、カテゴリ変数でうまく機能し、LabelEncoderを使用して、より少ないディスク容量で値を保存できます。

One-Hot-Encodingには、結果が順序ではなくバイナリであり、すべてが直交ベクトル空間にあるという利点があります。欠点は、カーディナリティが高い場合、フィーチャスペースがすぐに爆発し、ディメンションの呪いと戦うことになることです。これらの場合、私は通常、次元削減のためにワンホットエンコーディングとそれに続くPCAを使用します。ワンホットとPCAの賢明な組み合わせが、他のエンコーディングスキームに勝るものはめったにありません。PCAは線形オーバーラップを検出するため、当然、同様の機能を同じ機能にグループ化する傾向があります。


1
どうもありがとう-これは非常に有用であり、多くの意味をなします。特定/エッジの場合に使用する他のエンコーディングスキームはありますか?機能ごとに異なるエンコードスキームを使用する状況にあることを発見したことはありますか?
anthr

21

一方でAN6U5は非常に良い答えを与えている、私は今後の参考のためにいくつかのポイントを追加したいです。One Hot Encoding(OHE)とLabel Encodingを検討する場合、どのモデルを構築しようとしているかを理解する必要があります。つまり、検討するモデルの2つのカテゴリは次のとおりです。

  1. ツリーベースのモデル:勾配ブースト決定木とランダムフォレスト。
  2. 非ツリーベースのモデル:線形、kNNまたはニューラルネットワークベース。

ツリーベースのモデルを構築する際に、OHEをいつ適用し、ラベルエンコーディングをいつ適用するかを考えてみましょう。

OHEは次の場合に適用されます。

  1. ラベルエンコーディングで互いに近い値が、閉じていないターゲット値に対応する場合(非線形データ)。
  2. カテゴリー機能が順序(dog、cat、mouse)ではない場合。

次の場合にラベルエンコーディングを適用します。

  1. カテゴリの特徴は序数です(Jr. kg、Sr。kg、小学校、高校など)。
  2. 類似したカテゴリに近いラベルを割り当てるラベルエンコーダーを思い付くことができる場合:これにより、房の尖りが少なくなり、実行時間が短縮されます。
  3. データセット内のカテゴリフィーチャの数が膨大な場合:膨大な数の値を使用してカテゴリフィーチャをワンホットエンコードすると、(1)メモリ消費が大きくなり、(2)モデルで非カテゴリフィーチャがほとんど使用されない場合があります。スパース行列を使用する場合、最初のケースに対処できます。2番目のケースは、機能のサブセットのみを使用してツリーを構築する場合に発生する可能性があります。たとえば、9つの数値フィーチャと100の一意の値を持つ1つのカテゴリがあり、そのカテゴリフィーチャをワンホットエンコードした場合、109のフィーチャが取得されます。ツリーが機能のサブセットのみで構築されている場合、最初の9つの数値機能はほとんど使用されません。この場合、このサブセットのサイズを制御するパラメーターを増やすことができます。xgboostでは、sklearnのRandom Forest max_featuresではcolsample_bytreeと呼ばれます。

@ AN6U5が示唆するように、OHEを続行したい場合は、PCAをOHEと組み合わせることができます。

非ツリーベースのモデルを構築する際に、OHEとラベルエンコーディングをいつ適用するかを検討します。

ラベルエンコーディングを適用するには、ラベルエンコーディングを効果的に使用するために、機能とターゲット間の依存関係が線形でなければなりません。

同様に、依存関係が非線形である場合、同じためにOHEを使用することができます。

注:説明の一部は、コースラのデータサイエンスコンペティションに勝つ方法から参照されています。


非常に直感的な説明。それは「スプリット」ではなく「スプリット」ではないでしょうか?
dzieciou

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