大分类值的一种热门编码替代方案?


13

您好,数据框具有超过1600个类别的大分类值,有什么办法可以找到替代方法,使我没有超过1600列。

我在下面的有趣链接中找到了此链接http://amunategui.github.io/feature-hashing/#sourcecode

但是他们正在转换为我不想要的类/对象。我希望最终输出为数据框,以便可以使用不同的机器学习模型进行测试吗?还是有什么方法可以使用生成的矩阵来训练除Logistic回归或XGBoost之外的其他机器学习模型?

无论如何,我可以实施吗?


这真的有问题吗?假设您使用的是稀疏矩阵表示,onehot编码将不会是一个真正的问题。
路易T

@LouisT我有数百万条记录,超过5亿条记录
vinaykva '17

如果仍然很热门,则使用稀疏矩阵也无关紧要
Louis T

@LouisT复杂性将增加,培训时间也将增加,我的数据将变得太稀疏
vinaykva

1
您的帖子大约在1年前,也许不再感兴趣,但是如果您仍然感兴趣,您是否听说过使用神经网络进行实体嵌入?medium.com/@satnalikamayank12/...
TwinPenguins

Answers:


10

一种选择是将稀有值映射到“其他”。这通常是在自然语言处理中完成的-直觉是非常稀有的标签没有太大的统计能力。

我还看到人们将1-hot分类值映射到低维向量,其中每个1-hot向量被重新表示为来自多元高斯的平局。参见例如《深度知识跟踪》一书,该论文指出,这种方法是受压缩感知的思想驱动的:

BARANIUK,R.压缩感测。IEEE信号处理杂志24,4(2007)。

具体来说,他们将长度为N的每个向量映射到长度为log2(N)的较短向量。我自己还没有这样做,但是我认为值得尝试。


我想知道如何使用这种编码计算距离?
eric2323223'4

2

您可以读取数据,然后首先获得分类变量的所有唯一值的列表。然后,您可以在唯一值列表中放入一个热编码器对象(如sklearn.preprocessing.CategoricalEncoder)。

此方法还可以在训练测试框架中或在分块读取数据时提供帮助。我创建了一个python模块,可以自行完成所有这些操作。您可以在此GitHub存储库中找到它-dummyPy

这方面的简短教程- 如何在Python中热编码分类变量?



0

您可以对相似值进行分类,以便将拥有最接近值(或具有非常相似)模式的值(或列)替换为一个值(或列),因此您的1600个值可以降为400(甚至减)。

例如 可以将(像-云雨云,毛毛雨,小雨,大雨,大雨)的值转换为(小雨,大雨,大雨)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.