我被一个包含一些具有高基数的分类特征的数据集卡住了。类似'item_description' ...我读到了一些叫做哈希的技巧,但它的主要思想仍然是模糊和不可理解的,我也读到了一个叫做“特征引擎”的库,但我没有真正找到可以解决我的问题的东西。有什么建议吗?
qni6mghb1#
您可以查看category_encoders。这里有许多不同的编码器,可以使用它们将具有高基数的列编码为单个列。其中有所谓的贝叶斯编码器,它使用来自目标变量的信息来转换给定的特征。例如,TargetEncoder,它使用贝叶斯原理将分类特征替换为给定目标的期望值,然后类别采用的值,这与LeaveOneOut非常相似。您还可以检查基于catboost的CatBoostEncoder,这是功能编码的常见选择。
category_encoders
TargetEncoder
LeaveOneOut
CatBoostEncoder
0x6upsns2#
对于像“item_description”这样本质上是文本变量的变量,检查this paper和相应的Python package。或者简单地在网上搜索“dirty categorical variables”,如果有疑问,这篇文章和软件包来自Gal Varoquaux,Sklearn的主要开发人员之一。
zsbz8rwp3#
这篇文章可能也有帮助:4 ways to encode categorical features with high cardinality。它探索了应用于具有26个分类特征的数据集的四种编码方法,其基数高达40 k(包括代码):
目标编码
xqnpmsa84#
哈希是一种用于将分类数据转换为数值数据的技术。哈希背后的主要思想是通过应用哈希函数将每个类别Map到一个唯一的整数。然后,所得整数可以用作机器学习算法的输入。用于此目的的一个常见散列函数是MurmurHash算法,其被设计为提供具有良好性能的高质量散列。散列有几个应用,包括数据检索,检查数据损坏和数据加密。我们有多个哈希函数,如消息摘要(MD,MD2,MD5),安全哈希函数(SHA0,SHA1,SHA2)等等。哈希在较小的维度上转换数据,它可能导致信息丢失。然而,散列的一个潜在缺点是,不同的类别可能最终被Map到相同的整数,这可能导致冲突。这可以通过使用更大的散列空间(即,更多位)或通过使用不同的散列函数来缓解。处理高基数分类变量的另一种方法是使用目标编码或均值编码。这涉及将每个类别替换为训练数据中该类别的平均目标值。这可能是有效的,但它也可能导致过度拟合,特别是如果类别的数量非常大。
wmtdaxz35#
选项:i)使用目标编码。
ii)使用实体嵌入:简而言之,这种技术用一个向量来表示每个类别,然后训练以获得类别的特征。
1.笔记本实现:
额外:有一个哈希技巧可能也很有帮助:https://booking.ai/dont-be-tricked-by-the-hashing-trick-192a6aae3087?gi=3045c6e13ee5
5条答案
按热度按时间qni6mghb1#
您可以查看
category_encoders
。这里有许多不同的编码器,可以使用它们将具有高基数的列编码为单个列。其中有所谓的贝叶斯编码器,它使用来自目标变量的信息来转换给定的特征。例如,TargetEncoder
,它使用贝叶斯原理将分类特征替换为给定目标的期望值,然后类别采用的值,这与LeaveOneOut
非常相似。您还可以检查基于catboost的CatBoostEncoder
,这是功能编码的常见选择。0x6upsns2#
对于像“item_description”这样本质上是文本变量的变量,检查this paper和相应的Python package。
或者简单地在网上搜索“dirty categorical variables”,如果有疑问,这篇文章和软件包来自Gal Varoquaux,Sklearn的主要开发人员之一。
zsbz8rwp3#
这篇文章可能也有帮助:4 ways to encode categorical features with high cardinality。它探索了应用于具有26个分类特征的数据集的四种编码方法,其基数高达40 k(包括代码):
目标编码
计数编码
特征哈希
嵌入
xqnpmsa84#
哈希是一种用于将分类数据转换为数值数据的技术。哈希背后的主要思想是通过应用哈希函数将每个类别Map到一个唯一的整数。然后,所得整数可以用作机器学习算法的输入。
用于此目的的一个常见散列函数是MurmurHash算法,其被设计为提供具有良好性能的高质量散列。散列有几个应用,包括数据检索,检查数据损坏和数据加密。我们有多个哈希函数,如消息摘要(MD,MD2,MD5),安全哈希函数(SHA0,SHA1,SHA2)等等。
哈希在较小的维度上转换数据,它可能导致信息丢失。然而,散列的一个潜在缺点是,不同的类别可能最终被Map到相同的整数,这可能导致冲突。这可以通过使用更大的散列空间(即,更多位)或通过使用不同的散列函数来缓解。
处理高基数分类变量的另一种方法是使用目标编码或均值编码。这涉及将每个类别替换为训练数据中该类别的平均目标值。这可能是有效的,但它也可能导致过度拟合,特别是如果类别的数量非常大。
资源
wmtdaxz35#
选项:
i)使用目标编码。
ii)使用实体嵌入:简而言之,这种技术用一个向量来表示每个类别,然后训练以获得类别的特征。
1.笔记本实现:
iii)使用Catboost:
额外:有一个哈希技巧可能也很有帮助:https://booking.ai/dont-be-tricked-by-the-hashing-trick-192a6aae3087?gi=3045c6e13ee5