回答:
Afaik、どちらも同じ機能を持っています。少し違いが背後にあるアイデアです。OrdinalEncoder
はフィーチャの変換用で、LabelEncoder
はターゲット変数の変換用です。
それはなぜだOrdinalEncoder
の形状があるデータにフィットすることができます(n_samples, n_features)
しばらくLabelEncoder
缶の形状をしているだけフィットデータ(n_samples,)
(ただし使用過去1でLabelEncoder
の仕事になってきているものを処理するために、ループ内でOrdinalEncoder
今)
LabelEncoder
は機能での使用は意図されておらず、教師付き学習ターゲットでのみ使用されています。」
OrdinalEncoder
とLabelEncoder
実装の違いについては、受け入れられた回答はデータの形状に言及しています:(OrdinalEncoder
2Dデータの場合;形状(n_samples, n_features)
、LabelEncoder
1Dデータの場合:形状の場合(n_samples,)
)
これOrdinalEncoder
が、エラーが発生する理由です。
ValueError: Expected 2D array, got 1D array instead:
... 1Dデータに適合しようとする場合: OrdinalEncoder().fit(['a','b'])
ただし、エンコーダーのもう1つの違いは、学習したパラメーターの名前です。
LabelEncoder
学ぶ classes_
OrdinalEncoder
学ぶ categories_
フィッティングLabelEncoder
vs OrdinalEncoder
の違い、およびこれらの学習されたパラメーターの値の違いに注意してください。LabelEncoder.classes_
は1D、OrdinalEncoder.categories_
2Dです。
LabelEncoder().fit(['a','b']).classes_
# >>> array(['a', 'b'], dtype='<U1')
OrdinalEncoder().fit([['a'], ['b']]).categories_
# >>> [array(['a', 'b'], dtype=object)]
を含むOneHotEncoder
、2Dで動作する他のエンコーダーもこのプロパティを使用しますcategories_
dtypeに関する詳細情報<U1
(リトルエンディアン、Unicode、1バイト、つまり長さが1の文字列)
編集
私の回答へのコメントでは、Piotrは同意しません。Piotrは、序数エンコーディングとラベルエンコーディングの違いをより一般的に指摘しています。
cold
、warm
、hot
);blonde
、brunette
)これは素晴らしいコンセプトですが、この質問はsklearn
クラス/実装について尋ねます。実装がどのように概念と一致しないかを見るのは興味深いです。特にOrdinalEncoder
; 具体的には、順序エンコードを自分で行う方法。
実装のためとして、それはのように思えるLabelEncoder
し、OrdinalEncoder
持って一貫性のある行動を限り選ばれた整数。彼らの両方に基づいて割り当て整数アルファベット順。例えば:
OrdinalEncoder().fit_transform([['cold'],['warm'],['hot']]).reshape((1,3))
# >>> array([[0., 2., 1.]])
LabelEncoder().fit_transform(['cold','warm','hot'])
# >>> array([0, 2, 1], dtype=int64)
両方のエンコーダーが整数をアルファベット順の 'c' <'h' <'w'に割り当てていることに注意してください。
しかし、この部分は重要です。どちらのエンコーダも「実際の」次数が正しくないことに注意してください(つまり、実際の次数は温度を反映している必要があります。ここで、次数は「コールド」<「ウォーム」<「ホット」です)。「実際の」順序に基づいて、値に'warm'
は整数1が割り当てられます。
Piotrが参照するブログ投稿では、作成者は使用していませんOrdinalEncoder()
。序数エンコーディングを実現するには、作成者が手動で行います。次のような辞書を使用して、各温度を「実際の」次数の整数にマッピングします{'cold':0, 'warm':1, 'hot':2}
。
Pandasを使用してこのコードを参照してください。最初に、ディクショナリを通じて変数の実際の順序を割り当てる必要があります...非常に単純ですが、順序値を伝えるためのコーディングが必要であり、テキストから整数への実際のマッピングは何ですかオーダー。
つまり、を使用するかどうか疑問に思っている場合は、実際に「通常のエンコーディング」が期待どおりに提供されない可能性があることにOrdinalEncoder
注意してください。OrdinalEncoder
順序エンコーディングを使用して、カテゴリデータの順序を保持します(コールド、ウォーム、ホットなど)。低中高。犬、猫、クジラなどのデータに順序がないカテゴリデータには、ラベルエンコーディングまたは1つのホットを使用します。メディアでこの投稿を確認してください。これらの概念をよく説明しています。
OrdinalEncoder
ですか?