One Hot Encoding vs LabelEncoder vs DictVectorizor ne zaman kullanılır?


95

Bir süredir kategorik verileri olan modeller yapıyorum ve bu durumda temel olarak bir model oluşturmadan önce bu verileri dönüştürmek için scikit-learn'ın LabelEncoder işlevini kullanıyorum.

Ben arasındaki farkı anlamak OHE, LabelEncoderve DictVectorizoronlar verilere ne yaptığını açısından, ancak başka bir yere bir tekniği istihdam seçebilirsiniz zaman bana belli değil şeydir.

Birinin diğerlerine göre avantajları / dezavantajları olduğu belli algoritmalar veya durumlar var mı?


2
AN6U5'in cevabına ve bu ifadeye referansla :> Yine de karar ağaçları ve kategorik değişkenlerle çalışabilen karar ormanları gibi algoritmalar var ve sadece daha az disk alanı kullanarak değerleri saklamak için LabelEncoder kullanılabilir. LabelEncoder'ı kullanmak, kategorik olanı sayısal bir özelliğe dönüştürmez, böylece bir karar ağacının, eşleme keyfi olduğundan gerçekten mantıklı olmayan bir değerde bölmeler gerçekleştirmesine neden olmaz mı?
Nico

1
Nico, AN6U5'in söylediklerinin özel olarak işe yaradığı karar ağaçları için olduğunu düşünüyorum, çünkü ağaç köpek, kedi, fare veya 1,2,3 üzerinde bölünür ve "kedi" ile "2" nin anlamı önemsizdir. Bir ağaç (ayrılma şeklini düşün). Lojistik regresyon gibi bir şey olması durumunda, değerler * ile çarpmanızın nedeni bir denklemin parçasıdır çünkü köpek ve köpek: 1 ve kedi: 2'nin sayısal 1 * 2 ilişkisi yoktur (gerçi) hala yeterli eğitim örnekleri ve çağlarla çalışabilir).
Doug F

Yanıtlar:


124

LabelEncoder veya DictVectorizor'ın faydalı olduğu bazı durumlar vardır, ancak bunlar sıradanlık nedeniyle bence oldukça sınırlıdır.

LabelEncoder [köpek, kedi, köpek, fare, kedi] 'yi [1,2,1,3,2]' ye dönüştürebilir, ancak sonra uygulanan sıralılık köpek ve fare ortalamasının kedi olduğu anlamına gelir. Yine de karar ağaçları ve kategorik değişkenlerle çalışabilen rastgele ormanlar gibi algoritmalar var ve LabelEncoder daha az disk alanı kullanarak değerleri depolamak için kullanılabilir.

One-Hot-Kodlama, sonucun sıradan ziyade ikili olması ve her şeyin ortogonal bir vektör uzayda bulunması avantajına sahiptir. Dezavantajı, yüksek kardinalite için, özellik alanının gerçekten hızlı bir şekilde patlayabilmesi ve boyutsallık laneti ile savaşmaya başlamanızdır. Bu durumlarda, tipik olarak bir sıcak kodlama kullanıp ardından boyutsallığı azaltmak için PCA kullanırım. Bir sıcak artı PCA'nın makul bir kombinasyonunun nadiren diğer kodlama şemaları ile dövülmeyeceğini buldum. PCA, lineer üst üste binmeyi bulur, bu nedenle doğal olarak benzer özellikleri aynı özellikte gruplama eğilimindedir.


1
Çok teşekkür ederim - bu çok yararlı ve çok mantıklı. Belirli / son durumlar için kullandığınız başka kodlama şemaları var mı? Farklı özellikler için farklı kodlama şemaları kullanacağınız bir durumda olduğunuzu hiç gördünüz mü?
Aralık'ta

20

AN6U5 çok iyi bir cevap verirken ileride başvurmak için birkaç nokta eklemek istedim. Bir Sıcak Kodlama (OHE) ve Etiket Kodlama dikkate alındığında , hangi modeli oluşturmaya çalıştığınızı anlamaya çalışmalıyız. Yani dikkate alacağımız iki model kategorisi şunlardır:

  1. Ağaç Tabanlı Modeller : Degrade Artırılmış Karar Ağaçları ve Rastgele Ormanlar.
  2. Ağaç Tabanlı Modeller : Doğrusal, kNN veya Sinir Ağı tabanlı.

Ağaç tabanlı modeller oluştururken ne zaman OHE uygulanacağını ve Etiket Kodlamanın ne zaman uygulanacağını düşünelim.

OHE'yi şu durumlarda uygularız:

  1. Olan değerler zaman birbirine yakın (- doğrusal veri olmayan) bir etiket kodlama yakın değerler hedef karşılık gelmektedir.
  2. Kategorik özellik sıralı olmadığında (köpek, kedi, fare).

Etiket kodlamasını şu durumlarda uygularız:

  1. Kategorik özellik sıralıdır (Jr. kg, Sr. kg, İlkokul, lise, vb.).
  2. Benzer kategorilere yakın etiketler atayan bir etiket kodlayıcısı bulabildiğimizde: Bu, baskı ipinde daha az sıçramaya neden olur ve bu nedenle uygulama süresini azaltır.
  3. Veri kümesindeki kategorik özelliklerin sayısı çok büyükse: Çok sayıda değere sahip kategorik bir özelliği kodlayan bir sıcak (1) yüksek bellek tüketimine ve (2) kategorik olmayan özelliklerin nadiren model tarafından kullanıldığı durumlara yol açabilir. Seyrek matrisler kullanıyorsanız, 1. vakayla ilgilenebilirsiniz. 2. durum, yalnızca bir alt özellik kümesi kullanarak bir ağaç oluşturursanız ortaya çıkabilir. Örneğin, 9 sayısal özelliğe ve 100 benzersiz değere sahip 1 kategorik özelliğe sahipseniz ve o kategorik özelliğe bir sıcak kodlanmışsa, 109 özellik elde edersiniz. Bir ağaç sadece bir özellik alt kümesine sahipse, ilk 9 sayısal özellik nadiren kullanılır. Bu durumda, bu alt kümenin parametre kontrol boyutunu artırabilirsiniz. Xgboost'da, sklearn's Random Forest max_features içinde, colsample_bytree olarak adlandırılır.

OHE ile devam etmek isterseniz, @ AN6U5'in önerdiği gibi, PCA'yı OHE ile birleştirmek isteyebilirsiniz.

Ağaç tabanlı olmayan modeller oluştururken OHE ve Etiket Kodlamanın ne zaman uygulanacağını düşünelim.

Etiket kodlamasını uygulamak için, Etiket Kodlamanın etkin şekilde kullanılabilmesi için özellik ve hedef arasındaki bağımlılığın doğrusal olması gerekir.

Benzer şekilde, bağımlılığın doğrusal olmaması durumunda, bunun için OHE kullanmak isteyebilirsiniz.

Not: Bu açıklamaların bir kısmına Coursera'dan Veri Bilimi Yarışması Nasıl Kazanılır konusuna atıfta bulunulmuştur .


Çok sezgisel bir açıklama. “Bölünme” değil, sürülme olmaz mı?
dzieciou

0

LabelEncoder, sıralı veriler içindir, OHE ise nominal veriler içindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.