我是机器学习的新手!
现在我正在做一些关于决策树/随机森林应用的问题。我试图解决一个以数字和字符串(如国家名称)为特征的问题。现在,scikit-learn库只将数字作为参数,但我想注入字符串,因为它们携带了大量的知识。
我该如何处理这种情况,我可以通过一些机制将字符串转换为数字,比如python中的哈希。但我想知道在决策树问题中如何处理字符串的最佳实践。
1)如何添加"字符串"作为功能。
很少有算法能够原生地处理任何形式的字符串,决策树也不是其中之一。您必须将它们转换为决策树所知道的东西(通常是数字或分类变量)。
如何将它们转换为功能:这在很大程度上取决于字符串的性质。如果字符串是句子,您可以使用单词袋之类的东西将每个单词映射到一个数字特征。有许多不同的策略来确定使用什么数值,但仅使用0/1表示不存在/不存在通常是一个不错的基线。
对于一些国家来说,这是没有意义的,因为你用错误的方式表示你的功能。一个国家更像是一个分类变量。只有X个国家,你必须有一个在X中的值(这可能不是绝对正确的,但这超出了重点)。scikit-learn不支持分类变量。您可以通过使用one-hot编码来"伪造"它,但它可能无法像完全支持分类变量的库那样工作。
请注意,仅仅因为国家可以被表示为类别,并不意味着这是处理它们的最佳方式。这在很大程度上取决于你的数据是什么以及你在做什么。没有人能在不了解所有细节的情况下为你回答。
处理问题的方法是在R中使用Breiman的randomForest
实现。该实现允许您使用实际字符串作为输入。例如,您可以在输入数据帧中包含一个字符串country
列。生成的模型将假设country
的唯一值是训练数据中的值。R中的randomForest
可以提供的另一个很酷的东西是所谓的部分依赖图。R函数称为partialPlot
,它生成一个图,显示您的响应变量(即您试图预测的内容)如何取决于某个预测器。在country
的情况下,您实际上可以生成一个图,显示您的响应如何根据您选择的country
而变化。
Raff Edward的答案在你不想直接使用字符串的情况下也是有意义的。其中一个例子可能是将人名作为字符串输入。然而,你真的很感兴趣(无论出于何种原因)一个人名字的长度如何影响你的反应变量。在这种情况下,您只需要取nchar(name)
,其中name
是包含名称字符串的向量。
要开始在R中使用randomForest
,你可以访问这个网站下载它。它是免费的,供个人使用,我相信几年前我在工作中使用它时我们也没有为此付费。
你只需要再迈出一步。您必须将randomForest
软件包安装到您的R控制台中。你可以输入:
install.packages("randomForest")
如果您有活动的互联网连接,R控制台应该能够解决该请求,并提示您提供一个可供选择的镜像列表。
有很多关于如何使用randomForest
和partialPlot
的网站,你可以通过谷歌搜索这些术语来访问这些网站。