作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
evaluator = BinaryClassificationEvaluator()
grid = ParamGridBuilder().build() # no hyper parameter optimization
cv = CrossValidator(estimator=pipeline, estimatorParamMaps=grid, evaluator=evaluator)
cvModel = cv.fit(dataset)
evaluator.evaluate(cvModel.transform(dataset))
返回:
cvModel.avgMetrics = [1.602872634746238]
evaluator.evaluate(cvModel.transform(dataset)) = 0.7267754950388204
问题:
dataset
进行拟合和评估)最佳答案
这是一个错误 fixed最近。但是,它尚未发布。
根据您提供的内容,我使用以下代码重现了该问题:
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator
from pyspark.ml.linalg import Vectors
from pyspark.sql.types import Row
dataset = sc.parallelize([
Row(features=Vectors.dense([1., 0.]), label=1.),
Row(features=Vectors.dense([1., 1.]), label=0.),
Row(features=Vectors.dense([0., 0.]), label=1.),
]).toDF()
evaluator = BinaryClassificationEvaluator(metricName="areaUnderROC")
grid = ParamGridBuilder().addGrid('maxIter', [100, 10]).build() # no hyper parameter optimization
cv = CrossValidator(estimator=LogisticRegression(), estimatorParamMaps=grid, evaluator=evaluator)
cvModel = cv.fit(dataset)
evaluator.evaluate(cvModel.transform(dataset))
Out[23]: 1.0
cvModel.avgMetrics
Out[34]: [2.0, 2.0]
简单来说,
avgMetrics
was summed, not averaged, across folds
编辑:
关于第二个问题,最简单的验证方法是提供测试数据集:
to_test = sc.parallelize([
Row(features=Vectors.dense([1., 0.]), label=1.),
Row(features=Vectors.dense([1., 1.]), label=0.),
Row(features=Vectors.dense([0., 1.]), label=1.),
]).toDF()
evaluator.evaluate(cvModel.transform(to_test))
Out[2]: 0.5
它确认函数调用返回测试数据集上的指标。
关于apache-spark - 为什么 pyspark 的 BinaryClassificationEvaluator avgMetrics 返回一个大于 1 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39331375/
evaluator = BinaryClassificationEvaluator() grid = ParamGridBuilder().build() # no hyper parame
我的用例是一个常见用例:带有不平衡标签的二元分类,因此我们决定使用 f1-score 通过交叉验证进行超参数选择,我们使用 pyspark 2.3 和 pyspark.ml,我们创建了一个 Cross
我是一名优秀的程序员,十分优秀!