两者有什么区别?似乎两者都创建了新列,其数量等于要素中唯一类别的数量。然后,他们根据数据点的类别为数据点分配0和1。
答案 0 :(得分:15)
使用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)
另一个解释OneHotEncoder的好链接是:Explain onehotencoder using python
专家们可能会解释两者之间可能存在其他有效差异。
答案 1 :(得分:2)
区别在于您可以将OneHotEncoder
用于多列数据,而不能用于LabelBinarizer
和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)
答案 2 :(得分:1)
Scikitlearn建议将OneHotEncoder用于X矩阵,即您在模型中提供的功能,并使用LabelBinarizer用于y标签。
它们非常相似,只不过OneHotEncoder可以返回一个稀疏矩阵以节省大量内存,而您在y标签中并不需要它。
即使您遇到多标签多类问题,也可以对y标签使用MultiLabelBinarizer,而不必切换到OneHotEncoder进行多热编码。
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
答案 3 :(得分:1)
OneHotEncoder()和LabelBinarizer()的结果几乎相似[默认输出类型可能有所不同。
但是,据我所知,理想情况下,LabelBinarizer()应该用于响应变量,而OneHotEncoder()应该用于特征变量。
尽管目前,我不确定为什么我们需要不同的编码器来完成相似的任务。任何朝这个方向的指针都会受到赞赏。
快速摘要:
LabelEncoder –用于标签(响应变量)编码1,2,3…[隐含顺序]
OrdinalEncode r –用于编码1,2,3的功能…[隐含顺序]
标签Binarizer –用于响应变量,编码0和1 [创建多个虚拟列]
OneHotEncoder -用于功能变量,编码0和1 [创建多个虚拟列]
可以找到一个简单的示例here。