首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果Spark evaluator只返回1个值,为什么它有avgMetrics属性?

如果Spark evaluator只返回1个值,为什么它有avgMetrics属性?
EN

Stack Overflow用户
提问于 2021-06-01 22:23:59
回答 1查看 33关注 0票数 0

我使用MulticlassClassificationEvaluator在PySpark中检索一些指标,如F1-Score或accuracy in a Cross Validation:

代码语言:javascript
复制
cross_result = CrossValidator(estimator=RandomForestClassifier(),
                              estimatorParamMaps=ParamGridBuilder().build(),
                              evaluator=MulticlassClassificationEvaluator(metricName='f1'),
                              numFolds=5,
                              parallelism=-1)

f1_score = cross_result.avgMetrics[0]

现在,我的问题是:如果avgMetrics只有一个值,为什么它是一个列表?它不应该是一个标量值吗?我是否遗漏了此属性的某些内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-10 21:03:13

根据源代码,我意识到avgMetrics是一个列表,其中包含在ParamGrid中定义的每个参数的度量的所有交叉验证折叠的平均值。所以:

代码语言:javascript
复制
dataset = spark.createDataFrame(
    [(Vectors.dense([0.0]), 0.0),
     (Vectors.dense([0.6]), 1.0),
     (Vectors.dense([1.0]), 1.0)] * 10,
    ["features", "label"])
lr = LogisticRegression()

# Note that there are three values for maxIter: 0, 1 and 5
grid = ParamGridBuilder().addGrid(lr.maxIter, [0, 1, 5]).build()
evaluator = MulticlassClassificationEvaluator(metricName='accuracy')
cv = CrossValidator(
    estimator=lr,
    estimatorParamMaps=grid,
    evaluator=evaluator,
    parallelism=2
)
cvModel = cv.fit(dataset)

cvModel.avgMetrics[0] # Average accuracy for maxIter = 0
cvModel.avgMetrics[1] # Average accuracy for maxIter = 1
cvModel.avgMetrics[2] # Average accuracy for maxIter = 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67790646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档