有没有一种方法可以在没有单热编码的情况下使用具有分类变量的决策树?

Posted

技术标签:

【中文标题】有没有一种方法可以在没有单热编码的情况下使用具有分类变量的决策树?【英文标题】:Is there a way to use decision trees with categorical variables without one-hot encoding? 【发布时间】:2019-11-16 08:11:28 【问题描述】:

我有一个包含 200 多个分类变量(非序数)和几个连续变量的数据集。我曾尝试使用 one-hot 编码,但这会大大增加尺寸并导致得分不佳。 似乎常规的 scikit-learn 树只能与已转换为 one-hot 编码(对于非序数变量)的分类变量一起使用,我是如果有一种方法可以创建没有 one-hot 的树。我做了一些研究,发现有一个名为 h2o 的 API 可能有用,但我正在尝试找到一种在本地机器上运行它的方法。

【问题讨论】:

在什么框架下?请具体说明(为什么是h2o 标签?) 我的错,请看我的编辑 好问题 - 我真的不喜欢 R,但看起来 R 中的 rpart() 特性处理分类变量比 Python 中优雅得多。例如在本文第1.2节kaggle.com/floser/… 【参考方案1】:

您可以为 python 安装 h2o-3 包,例如,从 h2o.ai/downloads 或从 pypi。

h2o 包会自动高效地处理分类值。建议不要先对它们进行一次热编码。

您可以在 docs.h2o.ai 找到大量文档。

【讨论】:

我的数据会保留在我的本地机器上还是发送到 h2o 服务器?无法弄清楚 API 是如何工作的(如果它保留我的数据或访问它) @welo121 当你运行h2o.init() 时,无论你在哪里运行这个命令(就像你的本地机器),H2O 实例都会被初始化。然后,当您将数据移动到此 H2O 实例中时,它仍会在您的本地计算机上。 所以数据永远不会离开我的机器进入服务器什么的?必须确保因为它的机密数据 @welo121 这是一个服务器/客户端架构,但默认情况下服务器和客户端都在本地主机上,所以你的数据不会离开机器。 如果 h2o.init() "ip" 参数是 localhost,那么数据不会离开你的机器(数据被发送到 localhost)。如果“ip”参数不是本地主机,那么数据将离开您的机器(并发送到您在“ip”参数中命名的机器)。【参考方案2】:

根据https://datascience.stackexchange.com/a/32623/51879

您可以使用此包装器为 scikit-learn 使用其他编码技术http://contrib.scikit-learn.org/categorical-encoding/

还可以查看这篇精彩的文章了解更多详细信息https://medium.com/data-design/visiting-categorical-features-and-encoding-in-decision-trees-53400fa65931。

【讨论】:

以上是关于有没有一种方法可以在没有单热编码的情况下使用具有分类变量的决策树?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫单热编码列到假人,包括“其他”编码[重复]

如何在 PHP 中没有硬编码密钥的情况下进行对称加密

有没有更好的方法来为 Python 中的集群分配数组生成成员矩阵(单热数组)? [复制]

将 2d 矩阵转换为 3d 单热矩阵 numpy

pd.get_dummies 是单热编码吗?

使用单热编码处理sklearn中的分类变量