使用 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/hypopt/model_selection.py#L240

您可以在此处了解有关创建自己的自定义评分指标的更多信息:

示例: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 中创建)导入模块时出现问题

在 python 中使用 scikit 包在 SVM 中获取负 alpha 值

用greenlet实现Python中的并发

Python primefac包在导入时不编译

为啥xml包在Python3中修改我的xml文件?

python使用textwrap包在已经生成的长字符串中嵌入回车符实战