예제 #1
0
def calculate_metric_value(knn_model, knn_df):
    result = knn_model.transform(knn_df)

    # map predicted result string types to numeric type
    indexer = StringIndexer()
    indexer.setInputCol('predict')
    indexer.setOutputCol('predictIndexer')
    index_model = indexer.fit(result)
    index_result = index_model.transform(result)

    # generate label column
    dataset = index_result.withColumn('label', expr("predictIndexer"))
    evaluator = MulticlassClassificationEvaluator(
        predictionCol="predictIndexer")

    # calculate metric
    metric_dict["f1"] = (evaluator.evaluate(dataset,
                                            {evaluator.metricName: "f1"}))
    metric_dict["accuracy"] = (evaluator.evaluate(
        dataset, {evaluator.metricName: "accuracy"}))
    metric_dict["precision"] = (evaluator.evaluate(
        dataset, {evaluator.metricName: "weightedPrecision"}))
    metric_dict["recall"] = (evaluator.evaluate(
        dataset, {evaluator.metricName: "weightedRecall"}))