字符串作为决策树/随机森林中的特征

Posted

技术标签:

【中文标题】字符串作为决策树/随机森林中的特征【英文标题】:strings as features in decision tree/random forest 【发布时间】:2015-04-26 20:33:45 【问题描述】:

我是机器学习的新手!

现在我正在做一些关于决策树/随机森林应用的问题。我正在尝试解决具有数字和字符串(例如国家/地区名称)作为特征的问题。现在库 scikit-learn 只接受数字作为参数,但我想注入字符串以及它们携带大量知识。

如何处理这种情况,我可以通过某种机制将字符串转换为数字,例如 python 中的哈希。但我想知道在决策树问题中如何处理字符串的最佳实践。

【问题讨论】:

【参考方案1】:

1) 如何添加“字符串”作为特征。

很少有算法可以原生处理任何形式的字符串,决策树不是其中之一。您必须将它们转换为决策树知道的东西(通常是数字或分类变量)。

如何将它们转换为特征:这在很大程度上取决于字符串的性质。如果字符串是句子,您可以使用 bag of words 之类的东西将每个单词映射到一个数字特征。有许多不同的策略来确定要使用的数值,但仅使用 0/1 表示不存在/存在通常是一个不错的基准。

对于国家/地区,这没有意义,因为您以错误的方式表示您的功能。一个国家更类似于一个分类变量。只有 X 个国家,你必须有一个 X 中的值(这可能不是绝对正确的,但这已经超出了重点)。 scikit-learn 不支持分类变量。您可以使用one-hot-encoding“伪造”它,但它可能不会像完全支持分类变量的库那样工作。

请注意,仅仅因为可以将国家/地区表示为类别并不意味着它是处理它们的最佳方式。这在很大程度上取决于您的数据是什么以及您在做什么。在不了解所有细节的情况下,没有人可以为您解答。

【讨论】:

【参考方案2】:

解决问题的方法是在 R 中使用 Breiman 的 randomForest 实现。此实现将允许您使用实际字符串作为输入。例如,您可以在输入数据框中包含一个字符串 country 列。假设country 的唯一值是您的训练数据中的值,将构建生成的模型。 R 中的randomForest 可以提供的另一件很酷的事情是称为部分依赖图。 R 函数称为partialPlot,它会生成一个图表,显示您的 response 变量(即您要预测的内容)如何依赖于某个预测变量。对于country,您实际上可以生成一个图表,显示您的响应如何根据您选择的country 而变化。

在您不想直接使用字符串的情况下,Raff Edward 的回答也很有意义。其中一个示例可能是您将人名作为字符串作为输入。但是,您对人名的长度如何影响您的响应变量非常感兴趣(无论出于何种原因)。在这种情况下,您只需使用nchar(name),其中name 是包含名称字符串的向量。

要开始在 R 中使用 randomForest,您可以访问 this site 进行下载。它是免费供个人使用的,我相信几年前我在工作中使用它时我们也没有为它付费。

您只需再执行一个步骤即可开始。您必须将 randomForest 包安装到您的 R 控制台中。您可以通过键入:

install.packages("randomForest")

如果您有活动的互联网连接,R 控制台应该能够解决该请求并提示您提供可供选择的镜像列表。

有很多关于如何使用 randomForestpartialPlot 的网站,您可以通过谷歌搜索这些条款。

【讨论】:

以上是关于字符串作为决策树/随机森林中的特征的主要内容,如果未能解决你的问题,请参考以下文章

决策树与随机森林算法

随机森林与Adaboost

随机森林

如何在 spark ml 中处理决策树、随机森林的分类特征?

从决策树到随机森林

决策树与随机森林