请考虑以下示例
dtrain <- data_frame(text = c("Chinese Beijing Chinese",
"Chinese Chinese Shanghai",
"Chinese Macao",
"Tokyo Japan Chinese"),
doc_id = 1:4,
class = c(1, 1, 1, 0))
dtrain_spark <- copy_to(sc, dtrain, overwrite = TRUE)
> dtrain_spark
# Source: table<dtrain> [?? x 3]
# Database: spark_connection
text doc_id class
<chr> <int> <dbl>
1 Chinese Beijing Chinese 1 1
2 Chinese Chinese Shanghai 2 1
3 Chinese Macao 3 1
4 Tokyo Japan Chinese 4 0
在这里,我有经典的Naive Bayes示例,其中 class
标识属于 China
类别的文档 .
我可以通过执行以下操作在 sparklyr
中运行Naives Bayes分类器:
dtrain_spark %>%
ft_tokenizer(input.col = "text", output.col = "tokens") %>%
ft_count_vectorizer(input_col = 'tokens', output_col = 'myvocab') %>%
select(myvocab, class) %>%
ml_naive_bayes( label_col = "class",
features_col = "myvocab",
prediction_col = "pcol",
probability_col = "prcol",
raw_prediction_col = "rpcol",
model_type = "multinomial",
smoothing = 0.6,
thresholds = c(0.2, 0.4))
哪个输出:
NaiveBayesModel (Transformer)
<naive_bayes_5e946aec597e>
(Parameters -- Column Names)
features_col: myvocab
label_col: class
prediction_col: pcol
probability_col: prcol
raw_prediction_col: rpcol
(Transformer Info)
num_classes: int 2
num_features: int 6
pi: num [1:2] -1.179 -0.368
theta: num [1:2, 1:6] -1.417 -0.728 -2.398 -1.981 -2.398 ...
thresholds: num [1:2] 0.2 0.4
但是,我有两个主要问题:
-
如何在样本中评估此分类器的性能?准确度指标在哪里?
-
更重要的是,如何使用此训练模型预测新值,例如,在以下
spark
测试数据框中?
测试数据:
dtest <- data_frame(text = c("Chinese Chinese Chinese Tokyo Japan",
"random stuff"))
dtest_spark <- copy_to(sc, dtest, overwrite = TRUE)
> dtest_spark
# Source: table<dtest> [?? x 1]
# Database: spark_connection
text
<chr>
1 Chinese Chinese Chinese Tokyo Japan
2 random stuff
谢谢!
1 回答
通常(有一些模型提供某种形式的摘要),对训练数据集的评估是Apache Spark中的一个单独步骤 . 这非常适合原生的
Pipeline
API .Background :
Spark ML Pipelines主要由两种类型的对象构建:
Transformers
- 提供transform
方法的对象,它将DataFrame
映射到更新的DataFrame
.您可以
transform
使用Transformer
和ml_transform
方法 .Estimators
- 提供fit
方法的对象,将DataFrame
映射到Transfomer
. 按照惯例,相应的Estimator
/Transformer
对称为Foo
/FooModel
.您可以使用
ml_fit
模型在sparklyr
中fit
Estimator
.另外,ML管道可以与
Evaluators
(参见ml_*_evaluator
和ml_*_eval
方法)结合使用,这些方法可用于根据模型生成的列(通常是概率列或原始预测)计算转换数据的不同度量 .您可以使用
ml_evaluate
方法应用Evaluator
.相关组件是否包括交叉验证器和列车验证拆分,可用于参数调整 .
Examples :
5776754
PipelineStages
可以通过直接传递数据,或通过传递spark_connection
实例并调用上述方法(ml_fit
,ml_transform
等)来急切地评估(如在您自己的代码中) .这意味着您可以按如下方式定义
Pipeline
:适合
PipelineModel
:转换,并应用一个可用的
Evaluators
:要么
使用
ml_transform
或ml_predict
(后者是一个conince包装器,它在输出上应用进一步的转换):Cross validation :
示例中没有足够的数据,但您可以交叉验证并调整超参数,如下所示:
Notes :
请记住,Spark的多项式Naive Bayes实现considers only binary feature (0 or not 0) .
如果您使用带
Vector
列的Pipelines
(不是基于formula
的调用),我强烈建议您使用标准化(默认)列名:label
为因变量 .features
用于组装的自变量 .rawPrediction
,prediction
,probability
分别用于原始预测,预测和概率列 .