Что вы хотите - это переменные значения, которые производятся от 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
колонки в слова. Здесь я использую dplyr
и tidyr
только для удобства. Ключ состоит в том, чтобы иметь только текстовые токены, которые вы хотите использовать в качестве своей предикторной переменной.
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
.
Возможно, вам понадобится довольно много текстовой предварительной обработки, например. для всех текстов, посвященных макаронам и пицце, вы можете создать двоичный столбец «is_food» и вуаля, точность 100% (конечно, это чрезвычайно упрощенный пример). –
спасибо! но я фактически не нуждаюсь в предварительной обработке. Меня просто интересует сила прогнозирования одиночных слов, таких как пицца, макаронные изделия и т. Д. –
Разделить пространство, преобразовать в столбцы, затем индикаторы, запустить rf? – Vlo