gpt4 book ai didi

apache-spark - PySpark 中的自定义评估器

转载 作者:行者123 更新时间:2023-12-01 11:15:53 27 4
gpt4 key购买 nike

我想使用排名指标 (MAP@k) 优化 PySpark 管道的超参数。我在文档中看到如何使用 Evaluation 中定义的指标(Scala),但我需要定义一个自定义评估器类,因为 MAP@k 尚未实现。所以我需要做一些类似的事情:

model = Pipeline(stages=[indexer, assembler, scaler, lg])
paramGrid_lg = ParamGridBuilder() \
.addGrid(lg.regParam, [0.001, 0.1]) \
.addGrid(lg.elasticNetParam, [0, 1]) \
.build()

crossval_lg = CrossValidator(estimator=model,
estimatorParamMaps=paramGrid_lg,
evaluator=MAPkEvaluator(),
numFolds=2)

哪里 MAPkEvaluator()是我的自定义评估器。我见过一个 similar question但不是答案。

是否有任何示例或文档可用于此?有谁知道是否可以在 PySpark 中实现它?我应该实现哪些方法?

最佳答案

@jarandaf 在第一条评论中回答了这个问题,但为了清楚起见,我写了如何使用随机指标实现一个基本示例:

import random
from pyspark.ml.evaluation import Evaluator

class RandomEvaluator(Evaluator):

def __init__(self, predictionCol="prediction", labelCol="label"):
self.predictionCol = predictionCol
self.labelCol = labelCol

def _evaluate(self, dataset):
"""
Returns a random number.
Implement here the true metric
"""
return random.randint(0,1)

def isLargerBetter(self):
return True

现在下面的代码应该可以工作:
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

paramGrid_lg = ParamGridBuilder() \
.addGrid(lg.regParam, [0.01, 0.1]) \
.addGrid(lg.elasticNetParam, [0, 1]) \
.build()

crossval_lg = CrossValidator(estimator=model,
estimatorParamMaps=paramGrid_lg,
evaluator= RandomEvaluator(),
numFolds=2)

cvModel = crossval_lg.fit(train_val_data_)

关于apache-spark - PySpark 中的自定义评估器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51404344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com