web-dev-qa-db-ja.com

Scikit-learnのLabelBinarizerとOneHotEncoder

2つの違いは何ですか?どちらも新しい列を作成するようです。その列の数は、フィーチャ内の一意のカテゴリの数に等しくなります。次に、彼らは彼らがいるカテゴリに応じてデータポイントに0と1を割り当てます。

18
Roozbeh Bakhshi

LabelEncoder、OneHotEncoder、LabelBinarizerを使用して配列をエンコードする簡単な例を以下に示します。

OneHotEncoderは、LabelBinarizerの場合は必要ないが、それぞれのエンコードに変換するために、最初に整数エンコード形式のデータを必要とすることがわかります。

from numpy import array
from numpy import argmax
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# define example
data = ['cold', 'cold', 'warm', 'cold', 'hot', 'hot', 'warm', 'cold', 
'warm', 'hot']
values = array(data)
print "Data: ", values
# integer encode
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
print "Label Encoder:" ,integer_encoded

# onehot encode
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
print "OneHot Encoder:", onehot_encoded

#Binary encode
lb = LabelBinarizer()
print "Label Binarizer:", lb.fit_transform(values)

enter image description here

OneHotEncoderを説明するもう1つの良いリンクは次のとおりです。 pythonを使用したonehotencoderの説明

おそらく専門家が説明できる2つの間に他の有効な違いがあるかもしれません。

18
Rahul Pant

違いは、OneHotEncoderLabelBinarizerではなく、複数列データにLabelEncoderを使用できることです。

from sklearn.preprocessing import LabelBinarizer, LabelEncoder, OneHotEncoder

X = [["US", "M"], ["UK", "M"], ["FR", "F"]]
OneHotEncoder().fit_transform(X).toarray()

# array([[0., 0., 1., 0., 1.],
#        [0., 1., 0., 0., 1.],
#        [1., 0., 0., 1., 0.]])
LabelBinarizer().fit_transform(X)
# ValueError: Multioutput target data is not supported with label binarization

LabelEncoder().fit_transform(X)
# ValueError: bad input shape (3, 2)
5
Kota Mori