如何使用从pyspark.ml获得的RandomForestClassifier进行预测

我正在进行文本分类,并使用pipeline方法构建了一个模型。我已经创建了RF分类器对象,并设置了我在前几步中获得的特征列和标签列(步骤未显示)。

我正在拟合我使用数据框创建的训练数据,该数据框包含“labels”和“sentences”列。标签是不同的问题类型。数据框看起来像这样,

training = sqlContext.createDataFrame([("DESC:manner", "How did serfdom develop in and then leave Russia ?"),("DESC:def", "What does '' extended definition '' mean and how would one a paper on it ? "),("HUM:ind", " Who was The Pride of the Yankees ?")], ["label", "sentence"])

pipeline的代码是,

rf = RandomForestClassifier().setFeaturesCol("features").setLabelCol("idxlabel") pipeline = Pipeline(stages=[pos, tokenizer, hashingTF, idf, indexer,rf])model = pipeline.fit(training)

因此,现在我可以通过以下代码获得预测,

prediction = model.transform(test)selected = prediction.select("sentence","prediction")

我可以使用select()操作来获取预测的标签。

但在我的用例中,有来自Kinesis的数据流,这些数据仅是句子(纯字符串)。对于每个句子,我都需要预测标签。但现在当我使用dir(model)时,我找不到任何predict()函数。为什么从pyspark.ml获得的RandomForestClassifier没有predict()方法?如果没有,我该如何成功执行我的用例?我需要predict()方法来满足需求。如果不使用RF,我应该使用什么机器学习算法?我做错了什么吗?谁能给我一些建议?任何帮助都将不胜感激。我的环境是Spark 1.6和Python 2.7。


回答:

所以我发现没有可用的predict()方法。因此,我们需要使用transform()方法来进行预测。只要移除标签列并创建一个新的数据框。例如,在我的情况下,我做了,

pred = sqlContext.createDataFrame([("What are liver enzymes ?" ,)], ["sentence"])prediction = model.transform(pred)

然后我们可以使用select()方法找到预测。至少目前为止,这个解决方案对我来说是成功的。如果有任何更正或更好的方法,请告诉我。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注