Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark Spark/Pyspark:SVM-如何获得曲线下的面积?_Apache Spark_Pyspark_Apache Spark Ml - Fatal编程技术网

Apache spark Spark/Pyspark:SVM-如何获得曲线下的面积?

Apache spark Spark/Pyspark:SVM-如何获得曲线下的面积?,apache-spark,pyspark,apache-spark-ml,Apache Spark,Pyspark,Apache Spark Ml,我最近一直在处理随机森林和朴素贝叶斯。现在我想使用支持向量机 在拟合模型之后,我想使用输出列“概率”和“标签”来计算AUC值。但是现在我看到SVM没有“概率”栏了 在这里,您可以看到我到目前为止所做的工作: from pyspark.ml.classification import LinearSVC svm = LinearSVC(maxIter=5, regParam=0.01) model = svm.fit(train) scores = model.transform(train)

我最近一直在处理随机森林和朴素贝叶斯。现在我想使用支持向量机

在拟合模型之后,我想使用输出列“概率”和“标签”来计算AUC值。但是现在我看到SVM没有“概率”栏了

在这里,您可以看到我到目前为止所做的工作:

from pyspark.ml.classification import LinearSVC

svm = LinearSVC(maxIter=5, regParam=0.01)
model = svm.fit(train)

scores = model.transform(train)
results = scores.select('probability', 'label')

# Create Score-Label Set for 'BinaryClassificationMetrics'
results_collect = results.collect()
results_list = [(float(i[0][0]), 1.0-float(i[1])) for i in results_collect]
scoreAndLabels = sc.parallelize(results_list)

metrics = BinaryClassificationMetrics(scoreAndLabels)
print("AUC-value: " + str(round(metrics.areaUnderROC,4)))
这就是我过去对随机森林和朴素贝叶斯的做法。我想我也可以用svm来做。。。但这不起作用,因为没有输出列“概率”


有人知道为什么“概率”栏不存在吗?现在如何计算AUC值?

SVM算法不提供概率估计,只提供一些分数

Platt提出了一种算法来计算给定SVM分数的概率,但它受到了批评,但也有一些,显然没有在Spark中实现


顺便说一句,有一个类似的问题

使用了最新的
spark/pyspark
来回答这个问题:

如果使用
pyspark.ml
模块(与
mllib
不同),则可以使用Dataframe作为接口:

svm = LinearSVC(maxIter=5, regParam=0.01)
model = svm.fit(train)
test_prediction = model.transform(test)
创建计算器(有关设置,请参阅其源代码):

将evaluator应用于数据(同样,源代码显示了更多选项):

默认情况下,
评估的结果为“曲线下面积”:

from pyspark.ml.evaluation import BinaryClassificationEvaluator
evaluator = BinaryClassificationEvaluator()
evaluation = evaluator.evaluate(test_prediction)
print("evaluation (area under ROC): %f" % evaluation)