以数字方式编码 Dataframe 特征

Posted

技术标签:

【中文标题】以数字方式编码 Dataframe 特征【英文标题】:Encoding Dataframe features numerically 【发布时间】:2020-10-19 23:27:12 【问题描述】:

我有一个具有许多功能的数据框。有一个特殊的功能,它是完全动态的,我的目标是对其进行编码。我不能使用 one-hot 编码,因为值的唯一计数可能会改变。 LabelEncoder 可以用,但是类/目标标签的数量可以改变吗?

考虑一个示例(名称功能):

index | A | B | Name
------+---+---+-----
  1     5   6    abc
  2     4   7    abc
  2     3   0    def
  2     3   0    ghi
  3     3   0    abc
  3     3   0    def

我希望将其编码为

index | A | B | Name
------+---+---+-----
  1     5   6    1
  2     4   7    1
  2     3   0    2
  2     3   0    3
  3     3   0    1
  3     3   0    2

还要记住,如果稍后出现与所有这些不同的另一个值,它们会自动通过下一个连续值存储在编码器中,即使下一行输入是

index | A | B | Name
------+---+---+-----
  1     5   6    xyz

它被编码并用作

index | A | B | Name
------+---+---+-----
  1     5   6    4

而我该如何取回原来的值呢?

【问题讨论】:

【参考方案1】:

您可以使用astype 类别,然后使用类别访问器.cat 来获取分配的代码:

df['Name'] = df['Name'].astype('category').cat.codes + 1

输出:

   index  A  B  Name
0      1  5  6     1
1      2  4  7     1
2      2  3  0     2
3      2  3  0     3
4      3  3  0     1
5      3  3  0     2

【讨论】:

但是,这是否像我所说的那样对新价值观具有灵活性?以及如何取回原始值? 请创建最详尽的示例和测试用例。 对不起,请查看已编辑的帖子。我后来意识到这一点并添加了它 这很令人困惑......所以你有一个带有名称的原始数据帧,你对名称进行编码以生成一个新的数据帧。你回到原来的数据框插入一个新名字?您仍然可以再次对该名称进行编码。没有什么能阻止你这样做。 问题是这是我正在构建的机器学习模型的数据。现在 xyz 标签或新标签甚至可以作为测试数据的一部分出现,并且可以看不见。这就是为什么我无法返回数据框并将其插入回【参考方案2】:

你可以试试factorize

df.Name=df.Name.factorize()[0]+1

【讨论】:

但是,这是否像我所说的那样对新价值观具有灵活性?以及如何取回原始值?

以上是关于以数字方式编码 Dataframe 特征的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DataFrame 中将 Column 声明为分类特征以在 ml 中使用

R语言dataframe创建新的特征(变量)行加和特征行均值特征(基于加减乘除指数模数等操作符)创建新的特征(变量)生成编码特征(基于比较操作符逻辑操作符)

R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table独热编码缺失值删除DMatrix结构生成)

python离散特征编码

有序标称变量(Categorical Features)编码为数值变量(Continuous Features​​​​​​​)详解及实践

机器学习:如何在具有分类和数字特征的 pandas 数据帧上应用一种热编码?