我是机器学习的新手!
现在我正在做一些关于决策树/随机森林应用的问题。我正在尝试拟合一个以数字和字符串(如国家名称)作为特征的问题。现在的库scikit-learn只接受数字作为参数,但我想注入字符串,因为它们承载了大量的知识。
我如何处理这样的场景,我可以通过某种机制将字符串转换为数字,例如python中的哈希。但我想知道在决策树问题中如何处理字符串的最佳实践。
发布于 2015-02-25 11:03:52
1)如何添加字符串作为功能。
很少有算法可以本机处理任何形式的字符串,决策树不是其中之一。您必须将它们转换为决策树知道的内容(通常是数值或分类变量)。
如何将它们转换为特征:这在很大程度上取决于字符串的性质。如果字符串是句子,您可以使用bag of words之类的东西将每个单词映射到一个数字特征。有许多不同的策略来确定使用哪个数值,但仅使用0/1表示not present / present通常是一个不错的基准。
对于国家/地区来说,这是没有意义的,因为你以错误的方式表示你的功能。一个国家更类似于一个分类变量。只有X个国家,并且您必须有一个以X为单位的值(严格来说,这可能不是绝对正确的,但这超出了范围)。scikit-learn不支持分类变量。您可以通过使用one-hot-encoding来“伪造”它,但它可能不会像完全支持分类变量的库那样工作得很好。
请注意,国家可以表示为类别并不意味着这是处理它们的最佳方式。这在很大程度上取决于你的数据是什么以及你在做什么。没有人可以在不知道所有细节的情况下为你回答。
发布于 2015-02-26 23:22:37
解决问题的方法是在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")如果您有活动的internet连接,R控制台应该能够解析该请求,并提示您一个可供选择的镜像列表。
有很多关于如何使用randomForest和partialPlot的站点,你可以通过谷歌搜索这些术语来访问它们。
https://stackoverflow.com/questions/28709023
复制相似问题