Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们如何使用从pyspark.ml获得的RandomForestClassifier进行预测_Python_Machine Learning_Pyspark_Random Forest_Prediction - Fatal编程技术网

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

Python 我们如何使用从pyspark.ml获得的RandomForestClassifier进行预测,python,machine-learning,pyspark,random-forest,prediction,Python,Machine Learning,Pyspark,Random Forest,Prediction,我正在进行文本分类,并使用管道方法构建了一个模型。我已经创建了RF分类器对象,并设置了在前面步骤(未显示步骤)中获得的features列和label列 我正在拟合我使用数据框创建的训练数据,它有“标签”和“句子”列。标签是不同的问题类型。DF看起来像 training = sqlContext.createDataFrame([ ("DESC:manner", "How did serfdom develop in and then leave Russia ?"), ("DESC:def",

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

我正在拟合我使用数据框创建的训练数据,它有“标签”和“句子”列。标签是不同的问题类型。DF看起来像

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"])
管道的代码是

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()操作来获取预测的标签


但在我的用例中,有一个来自动觉的数据流,它将只是句子(普通字符串)。对于每一句话,我必须预测标签。但现在我在执行dir(model)时没有找到任何predict()函数。为什么从pyspark.ml获得的RandomForestClassifier没有predict()方法?如果没有,我如何才能成功地执行用例?我需要predict()方法来满足需求。如果不是RF,我应该使用什么ML算法?我做错什么了吗?谁能给我提个建议吗?感谢您的帮助。我的环境是Spark 1.6和Python2.7。

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

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

prediction = model.transform(pred)

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

我也在做同样的问题。你能告诉我什么是管道阶段的“pos”(词性)吗?你是如何得到它的。以及如何准备测试数据。以下是我的密码-

tokenizer = Tokenizer(inputCol="sentence", outputCol="words")
wordsData = tokenizer.transform(training)
hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=20)
featurizedData = hashingTF.transform(wordsData)
idf = IDF(inputCol="rawFeatures", outputCol="features")
indexer = StringIndexer(inputCol="label", outputCol="idxlabel")

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

请告诉我我是否做错了什么。

我这样试过-
test=sqlContext.createDataFrame([(“哼:ind”,“谁是扬基队的骄傲?”)],[“标签”,“句子”])prediction=model.transform(test)selected=prediction.select(“句子”,“预测”)selected.show()
并获取以下值-+-----------------------------------------------------+--------------句子|预测|+-------------------------------------------+--------------谁是Prid…| 1.0 |+-------------------+