以数字方式编码 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结构生成)
有序标称变量(Categorical Features)编码为数值变量(Continuous Features)详解及实践