Как создать кортежи (оригинальный ярлык, предсказанный ярлык) в Spark с помощью MLlib?

Я пытаюсь делать прогнозы с моделью, которую я получил от MLlib на Spark. Цель состоит в том, чтобы сгенерировать кортежи (orinalLabelInData, ForecastLabel). Затем эти кортежи можно использовать для оценки модели. Каков наилучший способ достичь этого? Благодарю.

Предполагая, что parsedTrainData является СДР LabeledPoint

from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.tree import DecisionTree, DecisionTreeModel
from pyspark.mllib.util import MLUtils

parsedTrainData = sc.parallelize([LabeledPoint(1.0, [11.0,-12.0,23.0]), 
                                  LabeledPoint(3.0, [-1.0,12.0,-23.0])])

model = DecisionTree.trainClassifier(parsedTrainData, numClasses=7,
categoricalFeaturesInfo={}, impurity='gini', maxDepth=8, maxBins=32)

model.predict(parsedTrainData.map(lambda x: x.features)).take(1)

Это возвращает прогнозы, но я не уверен, как сопоставить каждый прогноз с исходными метками в данных.

Я старался

parsedTrainData.map(lambda x: (x.label, dtModel.predict(x.features))).take(1)

однако, похоже, что мой способ отправки модели работнику здесь недопустим

/spark140/python/pyspark/context.pyc in __getnewargs__(self)
    250         # This method is called when attempting to pickle SparkContext, which is always an error:
    251         raise Exception(
--> 252             "It appears that you are attempting to reference SparkContext from a broadcast "
    253             "variable, action, or transforamtion. SparkContext can only be used on the driver, "
    254             "not in code that it run on workers. For more information, see SPARK-5063."

Exception: It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transforamtion. SparkContext can only be used on the driver, not in code that it run on workers. For more information, see SPARK-5063. 

1 ответ

Решение

Ну, в соответствии с официальной документацией вы можете просто застегнуть прогнозы и метки, как это:

predictions = model.predict(parsedTrainData.map(lambda x: x.features))
labelsAndPredictions = parsedTrainData.map(lambda x: x.label).zip(predictions)
Другие вопросы по тегам