如何使用从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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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