使用 python 中的 hypopt 包在 GridSearch 函数中指定评分指标
Posted
技术标签:
【中文标题】使用 python 中的 hypopt 包在 GridSearch 函数中指定评分指标【英文标题】:specify scoring metric in GridSearch function with hypopt package in python 【发布时间】:2019-03-25 12:34:56 【问题描述】:我正在使用 hypopt 包中的 Gridsearch 函数来使用指定的验证集进行超参数搜索。分类的默认指标似乎是准确度(不太确定)。在这里,我想使用 F1 分数作为指标。我不知道应该在哪里指定指标。我查看了文档,但有点困惑。
熟悉hyopt包的人知道我该怎么做吗?提前非常感谢。
from hypopt import GridSearch
log_reg_params = "penalty": ['l1'], 'C': [0.001, 0.01]
opt = GridSearch(model=LogisticRegression())
opt.fit(X_train, y_train, log_reg_params, X_val, y_val)
【问题讨论】:
【参考方案1】:hypopt
包的默认指标是 score()
函数,适用于您使用的任何模型,因此在您的情况下,默认为准确度的 LogisticRegression().score()
。
如果您通过pip install hypopt --upgrade
将hyopt 包升级到版本1.0.8,您可以在GridSearch.fit()
的scoring
参数中指定您选择的任何指标,例如fit(scoring='f1')
。这是一个基于您使用 F1 指标的代码的简单工作示例:
from hypopt import GridSearch
param_grid = "penalty": ['l1'], 'C': [0.001, 0.01]
opt = GridSearch(model=LogisticRegression(), param_grid = param_grid)
# This will use f1 score as the scoring metric that you optimize.
opt.fit(X_train, y_train, X_val, y_val, scoring='f1')
hypopt
支持sklearn
支持的大多数评分功能。
hypopt
支持以下指标(作为字符串):'accuracy'、'brier_score_loss'、'average_precision'、'f1'、'f1_micro'、'f1_macro'、'f1_weighted'、'neg_log_loss'、'精度”、“召回”或“roc_auc”。
对于回归,hypopt
支持:“explained_variance”、“neg_mean_absolute_error”、“neg_mean_squared_error”、“neg_mean_squared_log_error”、“neg_median_absolute_error”、“r2”。
您还可以创建自己的指标your_custom_score_func(y_true, y_pred)
,方法是将其包装到这样的对象中:
from sklearn.metrics import make_scorer
scorer = make_scorer(your_custom_score_func)
opt.fit(X_train, y_train, X_val, y_val, scoring=scorer)
您可以在此处的hypopt.GridSearch.fit()
文档字符串中了解更多信息:
您可以在此处了解有关创建自己的自定义评分指标的更多信息:
示例:https://github.com/cgnorthcutt/hypopt/blob/master/tests/test_core.py#L371 源代码:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html【讨论】:
非常感谢您的详细回答!还有一个问题,hyopt 和 hyperopt 包一样吗? 太棒了 - 如果它是正确的答案,请标记并投票。回答你的问题 - 一点也不。 Hypopt 是一个通用软件包,您可以随时为任何模型找到最佳参数设置。 Hypopt 是唯一一个用于使用验证集优化参数的简单案例的 python 包。然而,hyperopt 为贝叶斯高斯过程的特定情况实现了树搜索算法。贝叶斯超参数优化的包有很多,hyperopt可能是一个不错的,我不知道,因为我没用过。 @zesla 刚刚投了赞成票。多谢。我以为你也是 hyperopt 的作者 @zesla 请注意,您需要升级到 hypopt 版本 1.0.7,1.0.6 中有一个减号错误。现在修复:)以上是关于使用 python 中的 hypopt 包在 GridSearch 函数中指定评分指标的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题