您好,数据框具有超过1600个类别的大分类值,有什么办法可以找到替代方法,使我没有超过1600列。
我在下面的有趣链接中找到了此链接http://amunategui.github.io/feature-hashing/#sourcecode
但是他们正在转换为我不想要的类/对象。我希望最终输出为数据框,以便可以使用不同的机器学习模型进行测试吗?还是有什么方法可以使用生成的矩阵来训练除Logistic回归或XGBoost之外的其他机器学习模型?
无论如何,我可以实施吗?
您好,数据框具有超过1600个类别的大分类值,有什么办法可以找到替代方法,使我没有超过1600列。
我在下面的有趣链接中找到了此链接http://amunategui.github.io/feature-hashing/#sourcecode
但是他们正在转换为我不想要的类/对象。我希望最终输出为数据框,以便可以使用不同的机器学习模型进行测试吗?还是有什么方法可以使用生成的矩阵来训练除Logistic回归或XGBoost之外的其他机器学习模型?
无论如何,我可以实施吗?
Answers:
一种选择是将稀有值映射到“其他”。这通常是在自然语言处理中完成的-直觉是非常稀有的标签没有太大的统计能力。
我还看到人们将1-hot分类值映射到低维向量,其中每个1-hot向量被重新表示为来自多元高斯的平局。参见例如《深度知识跟踪》一书,该论文指出,这种方法是受压缩感知的思想驱动的:
BARANIUK,R.压缩感测。IEEE信号处理杂志24,4(2007)。
具体来说,他们将长度为N的每个向量映射到长度为log2(N)的较短向量。我自己还没有这样做,但是我认为值得尝试。
您可以读取数据,然后首先获得分类变量的所有唯一值的列表。然后,您可以在唯一值列表中放入一个热编码器对象(如sklearn.preprocessing.CategoricalEncoder)。
此方法还可以在训练测试框架中或在分块读取数据时提供帮助。我创建了一个python模块,可以自行完成所有这些操作。您可以在此GitHub存储库中找到它-dummyPy
这方面的简短教程- 如何在Python中热编码分类变量?
请参考以下链接(这也与具有很多唯一值的分类特征有关):
https://datascience.stackexchange.com/a/64021/67149
对于嵌入,您可以参考以下链接(不是我写的,但值得阅读一次):https : //medium.com/@satnalikamayank12/on-learning-embeddings-for-categorical-data-using-keras-165ff2773fc9