Roo*_*shi 21 python encoding scikit-learn categorical-data data-science
两者有什么区别?似乎两者都创建了新列,其数量等于要素中唯一类别的数量.然后,他们根据数据点的类别为数据点分配0和1.
小智 19
使用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)
Run Code Online (Sandbox Code Playgroud)
解释OneHotEncoder的另一个好的链接是:使用python解释onehotencoder
专家们可能解释的两者之间可能存在其他有效差异.
Aks*_*ana 12
Scikitlearn 建议将 OneHotEncoder 用于 X 矩阵,即您在模型中提供的特征,并为 y 标签使用 LabelBinarizer。
它们非常相似,除了 OneHotEncoder 可以返回一个可以节省大量内存的稀疏矩阵,并且您在 y 标签中实际上不需要它。
即使您有多标签多类问题,您也可以将 MultiLabelBinarizer 用于您的 y 标签,而不是切换到 OneHotEncoder 进行多热编码。
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
不同之处在于您可以将其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.]])
Run Code Online (Sandbox Code Playgroud)
LabelBinarizer().fit_transform(X)
# ValueError: Multioutput target data is not supported with label binarization
LabelEncoder().fit_transform(X)
# ValueError: bad input shape (3, 2)
Run Code Online (Sandbox Code Playgroud)
OneHotEncoder() 和 LabelBinarizer() 的结果几乎相似[默认输出类型可能存在差异。
但是,据我所知,理想情况下 LabelBinarizer() 应该用于响应变量,而 OneHotEncoder() 应该用于特征变量。
虽然目前我不确定为什么我们需要不同的编码器来完成类似的任务。任何在这个方向上的指针将不胜感激。
快速总结:
LabelEncoder – 用于标签(响应变量)编码 1,2,3... [暗示顺序]
OrdinalEncode r – 用于编码 1,2,3 的特征...... [暗示顺序]
标签二值化器——用于响应变量,编码 0 和 1 [创建多个虚拟列]
OneHotEncoder - 对于特征变量,编码 0 & 1 [创建多个虚拟列]
可以在此处找到一个快速示例。
| 归档时间: |
|
| 查看次数: |
10950 次 |
| 最近记录: |