【发布时间】:2021-09-21 15:23:18
【问题描述】:
我陷入了一个包含一些具有高基数的分类特征的数据集中。 像'item_description' ... 我读到了一些叫做散列的技巧,但它的主要思想仍然模糊且难以理解,我还读到了一个名为“功能引擎”的库,但我并没有真正找到可以解决我的问题的东西。 请问有什么建议吗?
【问题讨论】:
-
项目描述是长字符串吗?有意义的英文字符串?
我陷入了一个包含一些具有高基数的分类特征的数据集中。 像'item_description' ... 我读到了一些叫做散列的技巧,但它的主要思想仍然模糊且难以理解,我还读到了一个名为“功能引擎”的库,但我并没有真正找到可以解决我的问题的东西。 请问有什么建议吗?
【问题讨论】:
选项:
i) 使用目标编码。
有关目标编码的更多信息:https://maxhalford.github.io/blog/target-encoding/
这里有关于分类变量的好教程:https://www.coursera.org/learn/competitive-data-science#syllabus [部分:关于模型的特征预处理和生成,第 3 视频]
ii) 使用实体嵌入: 简而言之,这种技术用一个向量来表示每个类别,然后训练得到该类别的特征。
iii) 使用 Catboost:
额外:有一种散列技巧技术也可能会有所帮助:https://booking.ai/dont-be-tricked-by-the-hashing-trick-192a6aae3087?gi=3045c6e13ee5
【讨论】:
您可以查看category_encoders。那里有许多不同的编码器,可用于将具有高基数的列编码为单个列。其中有所谓的贝叶斯编码器,它使用来自目标变量的信息来转换给定的特征。例如,您有TargetEncoder,它使用贝叶斯原理将分类特征替换为给定目标的期望值,然后是该类别采用的值,这与LeaveOneOut 非常相似。您还可以检查基于CatBoostEncoder 的catboost,这是特征编码的常见选择。
【讨论】:
对于像“item_description”这样本质上是文本变量的变量,检查this paper和对应的Python package。
或者干脆在网上搜索“脏分类变量”,如果有疑问,文章和软件包来自 Sklearn 的主要开发人员之一 Gal Varoquaux。
【讨论】: