4つの機能はすべて私によく似ています。状況によっては、同じ結果が得られる場合とそうでない場合があります。どんな助けでもありがたいです!
現在、私は知っており、内部ではfactorize
とLabelEncoder
は同じように機能し、結果に関して大きな違いはないと想定しています。大量のデータで同様の時間がかかるかどうかはわかりません。
get_dummies
とOneHotEncoder
は同じ結果になりますが、OneHotEncoder
は数値しか処理できませんがget_dummies
はあらゆる種類の入力を受け取ります。 get_dummies
は、列の入力ごとに新しい列名を自動的に生成しますが、OneHotEncoder
は生成しません(むしろ、新しい列名1、2、3 ...を割り当てます)。そう get_dummies
は、すべての関係者の方が優れています。
私が間違っていたら訂正してください!ありがとうございました!
これらの4つのエンコーダは、次の2つのカテゴリに分類できます。
factorize
およびscikit-learn LabelEncoder
。結果は1次元になります。get_dummies
およびscikit-learn OneHotEncoder
。結果はn個の次元を持ち、1つはエンコードされたカテゴリ変数の個別の値によるものです。pandasとscikit-learnエンコーダーの主な違いは、scikit-learnエンコーダーがscikit-learnパイプラインfit
およびtransform
メソッドを使用します。
パンダfactorize
とscikit-learn LabelEncoder
は最初のカテゴリに属します。たとえば、文字を数値に変換するなど、カテゴリ変数を作成するために使用できます。
from sklearn import preprocessing
# Test data
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
df['Fact'] = pd.factorize(df['Col'])[0]
le = preprocessing.LabelEncoder()
df['Lab'] = le.fit_transform(df['Col'])
print(df)
# Col Fact Lab
# 0 A 0 0
# 1 B 1 1
# 2 B 1 1
# 3 C 2 2
パンダget_dummies
およびscikit-learn OneHotEncoder
は2番目のカテゴリに属します。バイナリ変数の作成に使用できます。 OneHotEncoder
はカテゴリカル整数でのみ使用でき、get_dummies
は、他のタイプの変数とともに使用できます。
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
df = pd.get_dummies(df)
print(df)
# Col_A Col_B Col_C
# 0 1.0 0.0 0.0
# 1 0.0 1.0 0.0
# 2 0.0 1.0 0.0
# 3 0.0 0.0 1.0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
# We need to transform first character into integer in order to use the OneHotEncoder
le = preprocessing.LabelEncoder()
df['Col'] = le.fit_transform(df['Col'])
enc = OneHotEncoder()
df = DataFrame(enc.fit_transform(df).toarray())
print(df)
# 0 1 2
# 0 1.0 0.0 0.0
# 1 0.0 1.0 0.0
# 2 0.0 1.0 0.0
# 3 0.0 0.0 1.0
また、この回答に基づいて、より詳細な post を記述しました。