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