H20:如何对文本数据使用梯度提升?
H20: how to use gradient boosting on textual data?
我正在尝试实现一个非常简单的 ML 学习问题,我在其中使用文本来预测某些结果。在 R 中,一些基本示例是:
导入一些虚假但有趣的文本数据
library(caret)
library(dplyr)
library(text2vec)
dataframe <- data_frame(id = c(1,2,3,4),
text = c("this is a this", "this is
another",'hello','what???'),
value = c(200,400,120,300),
output = c('win', 'lose','win','lose'))
> dataframe
# A tibble: 4 x 4
id text value output
<dbl> <chr> <dbl> <chr>
1 1 this is a this 200 win
2 2 this is another 400 lose
3 3 hello 120 win
4 4 what??? 300 lose
使用 text2vec
获得我的文本的 稀疏 矩阵表示(另请参阅 https://github.com/dselivanov/text2vec/blob/master/vignettes/text-vectorization.Rmd)
#these are text2vec functions to tokenize and lowercase the text
prep_fun = tolower
tok_fun = word_tokenizer
#create the tokens
train_tokens = dataframe$text %>%
prep_fun %>%
tok_fun
it_train = itoken(train_tokens)
vocab = create_vocabulary(it_train)
vectorizer = vocab_vectorizer(vocab)
dtm_train = create_dtm(it_train, vectorizer)
> dtm_train
4 x 6 sparse Matrix of class "dgCMatrix"
what hello another a is this
1 . . . 1 1 2
2 . . 1 . 1 1
3 . 1 . . . .
4 1 . . . . .
最后,使用我的稀疏矩阵训练算法(例如,使用 caret
)来预测 output
。
mymodel <- train(x=dtm_train, y =dataframe$output, method="xgbTree")
> confusionMatrix(mymodel)
Bootstrapped (25 reps) Confusion Matrix
(entries are percentual average cell counts across resamples)
Reference
Prediction lose win
lose 17.6 44.1
win 29.4 8.8
Accuracy (average) : 0.264
我的问题是:
我了解如何使用 spark_read_csv
、rsparkling
和 as_h2o_frame
将数据导入 h20
。
但是,对于上面的第 2 点和第 3 点,我完全迷路了。
有人可以给我一些提示或告诉我这种方法是否可以用 h2o
实现吗?
非常感谢!!
您可以通过以下两种方式解决此问题 -- 1. 先在 R 中,然后转移到 H2O 进行建模,或者 2. 完全在 H2O 中使用 H2O 的 word2vec 实现。
使用 R data.frames 和 text2vec,然后将稀疏矩阵转换为 H2O 框架并在 H2O 中进行建模。
# Use same code as above to get to this point, then:
# Convert dgCMatrix to H2OFrame, cbind the response col
train <- as.h2o(dtm_train)
train$y <- as.h2o(dataframe$output)
# Train any H2O model (e.g GBM)
mymodel <- h2o.gbm(y = "y", training_frame = train,
distribution = "bernoulli", seed = 1)
或者您可以在 H2O 中训练一个 word2vec 嵌入,将其应用于您的文本以获得等效的稀疏矩阵。然后训练一个H2O机器学习模型
(GBM)。稍后我将尝试使用您的数据通过一个工作示例编辑此答案,但与此同时,这里有一个 example 演示在 R 中使用 H2O 的 word2vec 功能。
我正在尝试实现一个非常简单的 ML 学习问题,我在其中使用文本来预测某些结果。在 R 中,一些基本示例是:
导入一些虚假但有趣的文本数据
library(caret)
library(dplyr)
library(text2vec)
dataframe <- data_frame(id = c(1,2,3,4),
text = c("this is a this", "this is
another",'hello','what???'),
value = c(200,400,120,300),
output = c('win', 'lose','win','lose'))
> dataframe
# A tibble: 4 x 4
id text value output
<dbl> <chr> <dbl> <chr>
1 1 this is a this 200 win
2 2 this is another 400 lose
3 3 hello 120 win
4 4 what??? 300 lose
使用 text2vec
获得我的文本的 稀疏 矩阵表示(另请参阅 https://github.com/dselivanov/text2vec/blob/master/vignettes/text-vectorization.Rmd)
#these are text2vec functions to tokenize and lowercase the text
prep_fun = tolower
tok_fun = word_tokenizer
#create the tokens
train_tokens = dataframe$text %>%
prep_fun %>%
tok_fun
it_train = itoken(train_tokens)
vocab = create_vocabulary(it_train)
vectorizer = vocab_vectorizer(vocab)
dtm_train = create_dtm(it_train, vectorizer)
> dtm_train
4 x 6 sparse Matrix of class "dgCMatrix"
what hello another a is this
1 . . . 1 1 2
2 . . 1 . 1 1
3 . 1 . . . .
4 1 . . . . .
最后,使用我的稀疏矩阵训练算法(例如,使用 caret
)来预测 output
。
mymodel <- train(x=dtm_train, y =dataframe$output, method="xgbTree")
> confusionMatrix(mymodel)
Bootstrapped (25 reps) Confusion Matrix
(entries are percentual average cell counts across resamples)
Reference
Prediction lose win
lose 17.6 44.1
win 29.4 8.8
Accuracy (average) : 0.264
我的问题是:
我了解如何使用 spark_read_csv
、rsparkling
和 as_h2o_frame
将数据导入 h20
。
但是,对于上面的第 2 点和第 3 点,我完全迷路了。
有人可以给我一些提示或告诉我这种方法是否可以用 h2o
实现吗?
非常感谢!!
您可以通过以下两种方式解决此问题 -- 1. 先在 R 中,然后转移到 H2O 进行建模,或者 2. 完全在 H2O 中使用 H2O 的 word2vec 实现。
使用 R data.frames 和 text2vec,然后将稀疏矩阵转换为 H2O 框架并在 H2O 中进行建模。
# Use same code as above to get to this point, then:
# Convert dgCMatrix to H2OFrame, cbind the response col
train <- as.h2o(dtm_train)
train$y <- as.h2o(dataframe$output)
# Train any H2O model (e.g GBM)
mymodel <- h2o.gbm(y = "y", training_frame = train,
distribution = "bernoulli", seed = 1)
或者您可以在 H2O 中训练一个 word2vec 嵌入,将其应用于您的文本以获得等效的稀疏矩阵。然后训练一个H2O机器学习模型 (GBM)。稍后我将尝试使用您的数据通过一个工作示例编辑此答案,但与此同时,这里有一个 example 演示在 R 中使用 H2O 的 word2vec 功能。