- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 LabelEncoder()
将分类数据转换为数值数据。我有一个数据集,如下所示:
['x','s','n','t','p','f','c','n','k','e','e','s','s','w','w','p','w','o','p','k','s','u','p']
['x','s','y','t','a','f','c','b','k','e','c','s','s','w','w','p','w','o','p','n','n','g','e']
['b','s','w','t','l','f','c','b','n','e','c','s','s','w','w','p','w','o','p','n','n','m','e']
...
我使用 labelEncoder()
进行转换。代码如下。
for m in M:
le = preprocessing.LabelEncoder()
le_fitted = le.fit(m)
le.classes_
encoding = list(le.transform(m))
这是我的结果:
[11, 7, 4, 8, 6, 2, 0, 4, 3, 1, 1, 7, 7, 10, 10, 6, 10, 5, 6, 3, 7, 9]
[13, 10, 14, 11, 0, 4, 2, 1, 6, 3, 2, 10, 10, 12, 12, 9, 12, 8, 9, 7, 7, 5]
[0, 9, 11, 10, 4, 3, 1, 0, 6, 2, 1, 9, 9, 11, 11, 8, 11, 7, 8, 6, 6, 5]
我的问题是。为什么同一个角色的数值不同?例如,第一个列表和第二个列表的第一个值都是'x'
,但我得到了不同的数字:11
和13
。为什么会发生这样的事情呢?当我对这些值进行逆变换时,我可以获得相同的结果。我不是这些结果有什么问题吗?会影响我以后的操作,比如使用朴素贝叶斯分类器吗?
最佳答案
您正在为循环中的每个 m
创建并安装一个新的 LabelEncoder
。相反,您希望适合编码器一次,然后使用它来转换每个列表。
您可以通过首先通过所有列表的集合并集来获取所有可能的值进行编码来实现此目的。
from sklearn.preprocessing import LabelEncoder
from functools import reduce
# map each list in M to a set and then reduce using the set union (|)
all_M = list(reduce(lambda u, v: u | v, map(set, M)))
print all_M
#['a', 'c', 'b', 'e', 'g', 'f', 'k', 'm', 'l', 'o', 'n', 'p', 's', 'u', 't', 'w', 'y', 'x']
接下来创建一个编码器并在 all_M
上调用 fit()
。然后在您的列表中使用这个合适的编码器:
le = LabelEncoder()
le.fit(all_M)
for m in M:
encoding = list(le.transform(m))
print encoding
#[16, 12, 9, 13, 11, 4, 2, 9, 6, 3, 3, 12, 12, 15, 15, 11, 15, 10, 11, 6, 12, 14, 11]
#[16, 12, 17, 13, 0, 4, 2, 1, 6, 3, 2, 12, 12, 15, 15, 11, 15, 10, 11, 9, 9, 5, 3]
#[1, 12, 15, 13, 7, 4, 2, 1, 9, 3, 2, 12, 12, 15, 15, 11, 15, 10, 11, 9, 9, 8, 3]
一般来说,对于任何预处理步骤,您只需调用 fit()
一次(通常是在训练数据上)。随后的数据(包括测试数据)将使用相同的拟合对象进行 transform()
步骤。
关于python - LabelEncoder() 对于相同的输入返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48891875/
我使用 LabelEncoder() 将分类数据转换为数值数据。我有一个数据集,如下所示: ['x','s','n','t','p','f','c','n','k','e','e','s','s','
您可以在下面找到我在互联网上找到的用于构建简单神经网络的代码。一切正常。我对 y 标签进行了编码,这些是我得到的预测: 2 0 1 2 1 2 2 0 2 1 0 0 0 1 1 1 1 1 1 1
LabelEncoder 不会“记住”参数。当我用它拟合和转换数据然后询问参数时,我得到的只是{}。这使得不可能在新数据上重新使用编码器。 例子: from sklearn.preprocessing
摘要:Sklearn 的 LabelEncoder 将不同的值编码为相同的值。 encoder.fit(data) 和 data_encoded =encoder.transform(data) 可以
我正在做一个预测项目(为了好玩),基本上我从 nltk 中提取了男性和女性的名字,将名字标记为“男性”或“女性”,然后获取每个名字的最后一个字母,最后使用不同的机器学习算法根据最后一个字母训练和预测性
我编写了这个函数来使用 LabelEncoder 转换分类特征 #convert columns to dummies with LabelEncoder cols = ['ToolType', 'T
嘿, 我的数据集中的“城市”列中有不同的城市名称。我很想使用 LabelEncoder() 对其进行编码。然而,我得到了非常令人沮丧的负值结果 df['city_enc'] = LabelEncode
嘿, 我的数据集中的“城市”列中有不同的城市名称。我很想使用 LabelEncoder() 对其进行编码。然而,我得到了非常令人沮丧的负值结果 df['city_enc'] = LabelEncode
我遇到有关 LabelEncoder 的问题。我将其应用到数据集,如下所示: data_set1 = data_set.apply(LabelEncoder().fit_transform) ...并
我正在尝试建立一个推理管道。它由两部分组成。使用前几年的一些表格订单元数据进行每月 ML 模型训练,并使用当天的新订单进行每日推理预测。我想在我的模型中包含几个字符串分类列,我使用 labelenco
Closed. This question is off-topic。它当前不接受答案。
Image of ull error 我正在尝试在对象类型的所有列上运行LabelEncoder。这是我编写的代码,但它引发了此错误: TypeError: '<' not supported bet
尝试执行以下代码时出现以下错误。 class LabelOneHotEncoder(): def __init__(self): self.ohe = OneHotEncode
我正在编写一个脚本,该脚本使用“局部异常值因子”算法进行“新颖性检测”。在这种情况下,我们需要在进行预测之前“拟合”“干净/训练”数据框。为了使算法正常工作,我们需要对数据帧中的值进行编码,例如将“v
我在数据帧上应用了 LabelEncoder(),它返回以下内容: order/new_cart 有不同的标签编码数字,如 70、64、71 等 这是标签不一致,还是我哪里做错了什么? 最佳答案 La
我有一个很大的 csv,每行有两个字符串,格式如下: g,k a,h c,i j,e d,i i,h b,b d,d i,a d,h 我阅读了前两列并将字符串重新编码为整数,如下所示: import
如果 sklearn.LabelEncoder已在训练集上拟合,如果在测试集上使用时遇到新值,它可能会中断。 对此我能想出的唯一解决方案是将测试集中的所有新内容(即不属于任何现有类)映射到 "" ,然
我想使用 sklearn.preprocessing.LabelEncoder 对元组列表进行标签编码, 如: [(4,5), (6, 7), (1, 1), (6, 7), ... ] 这样每个元组
我正在尝试将分类字符串列转换为几个虚拟变量二进制列,但出现值错误。 代码如下: import sys, os import numpy as np import matplotlib.pyplot a
如果我有一个数据框,请说 df,如果 df["levels"] = pd.Series(["low", "low", "med", "low", "med", "high"]) 有没有办法将其更改为:
我是一名优秀的程序员,十分优秀!