Spark/Pyspark: SVM - 如何获得曲线下面积?
Spark/Pyspark: SVM - How to get Area-under-curve?
我最近一直在处理随机森林和朴素贝叶斯。现在我想使用支持向量机。
拟合模型后,我想使用输出列“概率”和“标签”来计算 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 中实现。
顺便说一句,有一个类似的问题What does the score of the Spark MLLib SVM output mean?
使用最近的 spark/pyspark
到这个答案的时间:
如果您使用 pyspark.ml
模块(与 mllib
不同),您可以使用 Dataframe 作为接口:
svm = LinearSVC(maxIter=5, regParam=0.01)
model = svm.fit(train)
test_prediction = model.transform(test)
创建评估器(查看其设置源代码):
from pyspark.ml.evaluation import BinaryClassificationEvaluator
evaluator = BinaryClassificationEvaluator()
将评估器应用于数据(同样,源代码显示了更多选项):
evaluation = evaluator.evaluate(test_prediction)
默认情况下,evaluate
的结果是“曲线下面积”:
print("evaluation (area under ROC): %f" % evaluation)
我最近一直在处理随机森林和朴素贝叶斯。现在我想使用支持向量机。
拟合模型后,我想使用输出列“概率”和“标签”来计算 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 中实现。
顺便说一句,有一个类似的问题What does the score of the Spark MLLib SVM output mean?
使用最近的 spark/pyspark
到这个答案的时间:
如果您使用 pyspark.ml
模块(与 mllib
不同),您可以使用 Dataframe 作为接口:
svm = LinearSVC(maxIter=5, regParam=0.01)
model = svm.fit(train)
test_prediction = model.transform(test)
创建评估器(查看其设置源代码):
from pyspark.ml.evaluation import BinaryClassificationEvaluator
evaluator = BinaryClassificationEvaluator()
将评估器应用于数据(同样,源代码显示了更多选项):
evaluation = evaluator.evaluate(test_prediction)
默认情况下,evaluate
的结果是“曲线下面积”:
print("evaluation (area under ROC): %f" % evaluation)