Фильтр, дающий противоречивый результат в искре - PullRequest
0 голосов
/ 06 сентября 2018

rest_data =

+--------------------+-----+---------+
|            features|label| old_label
+--------------------+-----+---------+
|[1.0,0.0,1.0,0.0,...|  1.0|      0.0|
|[1.0,1.0,1.0,1.0,...|  1.0|      0.0|
|[0.42857143282890...|  0.0|      0.0|
|(10,[0,2,5,7,9],[...|  0.0|      0.0|
|[1.0,1.0,0.0,0.0,...|  1.0|      0.0|
|[1.0,1.0,0.800000...|  1.0       0.0|
|[0.40000000596046...|  0.0|      0.0|
|(10,[0,2,5,9],[0....|  0.0|      0.0|
|[1.0,1.0,1.0,1.0,...|  1.0|      0.0|
|[0.40000000596046...|  0.0|      0.0|
|[1.0,1.0,1.0,1.0,...|  1.0|      0.0|
|[1.0,1.0,0.888888...|  1.0|      0.0|
|[0.0,0.0,1.0,1.0,...|  1.0|      0.0|
|[0.16666667163372...|  0.0|      0.0|
|[0.375,0.0,0.1428...|  0.0|      0.0|
|(10,[0,2,5,7],[0....|  0.0|      0.0|
|[1.0,1.0,1.0,1.0,...|  1.0|      0.0|
|[1.0,1.0,1.0,1.0,...|  1.0|      0.0|
|[0.25,0.0,0.5,0.0...|  0.0|      0.0|

Каждый раз, когда я выполняю этот фрагмент кода, я получаю разные результаты подсчета, где old_label == прогноз или значения точности и вспоминаем

from pyspark.ml.evaluation import BinaryClassificationEvaluator 
from pyspark.mllib.evaluation import MulticlassMetrics

precision_list = list()
recall_list = list()
i = 0
for model in model_list:
    x = model.transform(rest_data)
    t = x.select(col('old_label').cast('int'),col('prediction').cast('int'))
    t.createOrReplaceTempView('t')

    print spark.sql('select count(*) from t where old_label=prediction').show()

    prediction_and_labels = x.select(col('prediction').cast('float'),col('label').cast('float')).rdd.map(lambda pl : (pl.prediction,pl.label))
    metrics = MulticlassMetrics(prediction_and_labels)
    print metrics.confusionMatrix()
    recall_list.append(metrics.recall(label=1.0))
    precision_list.append(metrics.precision(label=1.0))
    x = x.withColumn('old_label',col('prediction').cast('int'))
    #   display(x)
    i +=1

Даже если я использую команду filter вместо spark sql, результаты каждый раз будут противоречивыми.

...