R:如何使用随机森林来预测使用字符串变量的二元结果?

时间:2016-10-21 14:10:00

标签: r machine-learning classification random-forest text-classification

考虑以下数据框

outcome <- c(1,0,0,1,1)
string <- c('I love pasta','hello world', '1+1 = 2','pasta madness', 'pizza madness')

df = df=data.frame(outcome,string)


> df
  outcome        string
1       1  I love pasta
2       0   hello world
3       0       1+1 = 2
4       1 pasta madness
5       1 pizza madness

在这里,我想使用随机森林来了解string变量中包含的句子中哪些单词是<{1}}变量的强预测变量

在R中有(简单)方法吗?

1 个答案:

答案 0 :(得分:4)

您想要的是由randomForest生成的变量重要性度量。这是从importance函数获得的。以下是一些可以帮助您入门的代码:

outcome <- c(1,0,0,1,1)
string <- c('I love pasta','hello world', '1+1 = 2','pasta madness', 'pizza madness')

第1步:我们希望outcome成为一个因素,以便randomForest分类string作为字符向量

df <- data.frame(outcome=factor(outcome,levels=c(0,1)),string, stringsAsFactors=FALSE)

第2步:string列标记为单词。在这里,我使用dplyrtidyr只是为了方便起见。关键是要将您想要的单词标记作为预测变量。

library(dplyr)
library(tidyr)
inp <- df %>% mutate(string=strsplit(string,split=" ")) %>% unnest(string)
##   outcome  string
##1        1       I
##2        1    love
##3        1   pasta
##4        0   hello
##5        0   world
##6        0     1+1
##7        0       =
##8        0       2
##9        1   pasta
##10       1 madness
##11       1   pizza
##12       1 madness

第3步:构建模型矩阵并将其提供给randomForest

library(randomForest)
mm <- model.matrix(outcome~string,inp)
rf <- randomForest(mm, inp$outcome, importance=TRUE)
imp <- importance(rf)
##                     0        1 MeanDecreaseAccuracy MeanDecreaseGini
##(Intercept)   0.000000 0.000000             0.000000        0.0000000
##string1+1     0.000000 0.000000             0.000000        0.3802400
##string2       0.000000 0.000000             0.000000        0.4514319
##stringhello   0.000000 0.000000             0.000000        0.4152465
##stringI       0.000000 0.000000             0.000000        0.2947108
##stringlove    0.000000 0.000000             0.000000        0.2944955
##stringmadness 4.811252 5.449195             5.610477        0.5733814
##stringpasta   4.759957 5.281133             5.368852        0.6651675
##stringpizza   0.000000 0.000000             0.000000        0.3025495
##stringworld   0.000000 0.000000             0.000000        0.4183821

正如您所看到的,面食和疯狂是预测outcome的关键词。

请注意: randomForest有许多参数可用于解决实际的比例问题。这绝不是解决您问题的完整方案。它仅用于说明使用importance函数回答您的问题。您可能需要在Cross Validated上就使用randomForest的详细信息提出适当的问题。