Scorer函数:make_scorer/score_func和的区别

2024-04-19

在 scikit (0.18.1) 文档中,我发现接下来的内容有点令人困惑。似乎可以通过多种方式编写自己的评分函数。但有什么区别呢?

网格搜索简历 http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html需要一个scoring论证为:

带签名的记分器可调用对象/函数scorer(estimator, X, y)

此选项也受支持模型评估文档 http://scikit-learn.org/stable/modules/model_evaluation.html#implementing-your-own-scoring-object.

反过来,make_scorer http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html#sklearn.metrics.make_scorer想要一个score_func as a:

带签名的得分函数(或损失函数)score_func(y, y_pred, **kwargs)

Example

Both GridSearchCV(scoring=dummy_scorer) and GridSearchCV(scoring=make_scorer(dummy_scorer2))打印预期内容。

def dummy_scorer(estimator, X, y):
    print X
    print y
    return 1

def dummy_scorer2(y1, y2):
    print y1
    print y2
    return 1

你看,scikit-learn 有不同的实用函数(precision_score, recall_score, accuracy_score等),可用于直接指定实际值和预测值并计算结果。在大多数情况下,即使编写自定义评分器也必须使用实际值和预测值。 所以签名必须是(y, y_pred, ...).

现在,在网格搜索或随机搜索等技术中,交叉验证数据的分数必须是自动的。随着估计量和 X 不断变化(X 由于交叉验证而变化),预测值和相应的实际值也会变化。 所以scorer(estimator, X, y)说得通。采取估计器并X, call estimator.predict(X)要获得预测输出,请将其与实际(y)并计算结果。

What make_scorer()所做的只是返回一个指向实际函数的指针,该函数执行我上面描述的所有操作。

来自scikit-learn 中的源代码 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/scorer.py,我们可以验证上面的事情:

Line347 : cls = _PredictScorer
          return cls(score_func, sign, kwargs)

Here cls是指向函数的指针这条线 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/scorer.py#L75:

Line100 : y_pred = estimator.predict(X)
          if sample_weight is not None:
              return self._sign * self._score_func(y_true, y_pred, 
                                                 sample_weight=sample_weight,
                                                             **self._kwargs)
          else:
              return self._sign * self._score_func(y_true, y_pred, **self._kwargs)

另外,当您实际使用“准确度”、“精度”等字符串值时scoringGridSearchCV中的参数,那么同样,它首先被转换为scorer(estimator, X, y, ...)通过使用 make_scorer,可以在此行位于同一源文件中 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/scorer.py#351

希望它有一定道理。如有任何疑问或疑问,请随时询问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scorer函数:make_scorer/score_func和的区别 的相关文章

  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并

随机推荐