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和的区别 的相关文章

  • from __future__ importabsolute_import 实际上做了什么?

    I have answered https stackoverflow com a 22679558 2588818一个关于Python中绝对导入的问题 我认为我通过阅读理解了这个问题Python 2 5 变更日志 https docs p
  • Python Numpy TypeError:输入类型不支持 ufunc 'isfinite'

    这是我的代码 def topK dataMat sensitivity meanVals np mean dataMat axis 0 meanRemoved dataMat meanVals covMat np cov meanRemov
  • python列表理解和extend() [重复]

    这个问题在这里已经有答案了 深入学习 Python 2 7 1 但未能理解这一点 几个小时 gt gt gt a 1 2 gt gt gt b 3 4 gt gt gt gt gt gt a extend b 0 gt gt gt a 1
  • Python中的键盘可中断阻塞队列

    It seems import Queue Queue Queue get timeout 10 键盘可中断 ctrl c 而 import Queue Queue Queue get 不是 我总是可以创建一个循环 import Queue
  • 是否可以在 SQLAlchemy 中创建一个可以创建父记录的事件侦听器?

    有两个表 父表和子表 我想创建一个事件监听器 触发器 如果孩子没有父母 它可以创建父母 这就是我试图做的 class parent db Model tablename parent id db Column db Integer prim
  • 使用自定义元素类在 Python 中解析 xml

    我想使用 Python 的 xml etree ElementTree 模块解析 xml 文档 但是 我希望生成的树对象中的所有元素都具有我定义的一些类方法 这建议创建我自己的 Python 元素类的子类 但我无法告诉解析器在解析时使用我自
  • 为什么通过selenium切换到alert不稳定?

    为什么通过selenium切换到alert不稳定 例如 1 运行代码 一切顺利 一切都很顺利 但如果这段代码在几分钟内运行 那么可能会出现错误 例如 没有可以单击的元素 等等 2 在一个站点上有一个警报窗口 alert driver swi
  • 如何从 python 脚本更改 python 文件中的变量值

    我目前有一个 python 文件 其中包含一堆带有值的全局变量 我想从一个单独的 python 脚本永久更改这些值 我尝试过 setattr 等 但似乎不起作用 有没有办法做到这一点 简短的回答是 不 不值得这么麻烦 听起来您正在尝试创建一
  • 如何在 Python 中重命名文件并保留创建日期

    我知道创建日期不存储在文件系统本身中 但是当我使用时我遇到了问题os rename 它正在更新我正在使用的文件的创建日期 是否可以重命名文件而不更改其原始创建日期 正如都铎所说 你可以使用os stat http docs python o
  • 在 Django 1.9 中使用信号

    在 Django 1 8 中 我能够使用信号执行以下操作 一切顺利 init py from signals import 信号 py receiver pre save sender Comment def process hashtag
  • Python 字符串参数解析

    我正在 python 中使用 cmd 类 它将所有参数作为一个大字符串传递给我 将此 arg 字符串标记为 args 数组的最佳方法是什么 Example args arg arg1 arg2 with quotes arg4 arg5 1
  • 结束一天(日期时间)的最优雅的方式是什么?

    我目前正在编写一些报告代码 允许用户选择指定日期范围 它的工作方式 简化 是 用户 可选 指定年份 用户 可选 指定月份 用户 可选 指定一天 这是一个代码片段 以及描述我想要的内容的注释like to do from datetime i
  • Python - Map/Reduce - 如何在使用 DISCO 计数单词示例中读取 JSON 特定字段

    我正在按照 DISCO 示例来计算文件中的单词数 将单词数作为 Map Reduce 作业 http discoproject org doc disco start tutorial html 我对此工作没有任何问题 但是我想尝试从包含
  • python中不规则点之间的坐标列表

    想象一下 我们为 x 和 y 随机选择两个介于 0 到 100 之间的点 例如 95 7 35 6 现在使用简单的 pygame draw line 函数 我们可以轻松地在这些点之间绘制一条没有任何间隙的线 我的问题是 我们如何找到两点之间
  • 了解 Tensorflow 中的 while 循环

    我正在使用用于 Tensorflow 的 Python API https www tensorflow org api docs python 我正在努力实施罗森布罗克函数 https www sfu ca ssurjano rosen
  • 为什么这个记忆器适用于递归函数?

    我不明白为什么下面的代码是这样的fib以线性而非指数时间运行 def memoize obj Memoization decorator from PythonDecoratorLibrary Ignores kwargs cache ob
  • 将数值和分类数据混合到具有密集层的 keras 序列模型中

    我在 Pandas 数据框中有一个训练集 我将此数据框传递到model fit with df values 以下是有关 df 的一些信息 df values shape 981 5 df values 0 array 163 0 6 83
  • python字符串包含双引号字符

    我的输入字符串由字符组成 包括双引号和单引号 和 B SS JU PQ AD DDSFD ABD E J 但是 当我从文本文件打开上述输入并打印它时 第三行中的双引号 被打印为 xe2 x80 x9d 我的目标是进行简单的字符计数 B 2
  • launchd执行python脚本,但导入失败

    我使用 appscript 编写了一个 python 脚本来跟踪我当前活动的窗口 我通过 launchd 运行它 但是当我这样做时 它无法导入 appscript 我已经在 launchd 的 plist 中设置了 PYTHONPATH 但
  • 交响二阶颂歌

    我有一个简单的二阶 ODE 的齐次解 当我尝试使用 Sympy 求解初始值时 它返回相同的解 它应该替代 y 0 和 y 0 并产生一个没有常数的解 但事实并非如此 这是建立方程的代码 它是一个弹簧平衡方程 k 弹簧常数 m 质量 我在其他

随机推荐