まずLabelEncoder
は目的変数側に、OneHotEncoder
は説明変数側に使うという大きな違いがあり、使う場所が違うので使い分けを考える必要はありません。
fit(self, y)
Fit label encoder
Parameters:
y : array-like of shape (n_samples,)
Target values.
sklearn.preprocessing.LabelEncoder — scikit-learn 0.21.3 documentation
scikit-learnのモデルの多くは実はターゲットはラベルのまま(たとえば文字列で["hoge", "hoge", "fuga", ...]
のような)入れても動いてくれます。LabelEncoder
を使う必然性はあまりないのかもしれません(それでもなんとなく気持ち悪いから使っておく、程度の存在)。
では説明変数側でLabelEncoder
と同様のことをするものはないのかというと、OrdinalEncoder
というモデルがあります。OneHotEncoder
と比較するならこちらになります。
sklearn.preprocessing.OrdinalEncoder — scikit-learn 0.21.3 documentation
で、あるにはあるのですが、説明変数を0,1,2,...にすることは回帰でも分類でも基本的にはありません。ユーザーガイドにも思いっきりそう書いてあります。そういう目的ならOneHotEncoder
を使え、と。
To convert categorical features to such integer codes, we can use the OrdinalEncoder. This estimator transforms each categorical feature to one new feature of integers (0 to n_categories - 1):
python
1>>> enc = preprocessing.OrdinalEncoder()
2>>> X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']]
3>>> enc.fit(X)
4OrdinalEncoder(categories='auto', dtype=<... 'numpy.float64'>)
5>>> enc.transform([['female', 'from US', 'uses Safari']])
6array([[0., 1., 1.]])
Such integer representation can, however, not be used directly with all scikit-learn estimators, as these expect continuous input, and would interpret the categories as being ordered, which is often not desired (i.e. the set of browsers was ordered arbitrarily).
5.3. Preprocessing data — scikit-learn 0.21.3 documentation
一応用意されているけど、実用的ではないよ、くらいの位置づけです。