Python 记分器功能:生成记分器/记分器功能与

Python 记分器功能:生成记分器/记分器功能与,python,python-2.7,scikit-learn,grid-search,Python,Python 2.7,Scikit Learn,Grid Search,在scikit的(0.18.1)文档中,我发现下面的内容有点令人困惑。似乎可以通过多种方式编写自己的评分函数。但是有什么不同呢 将评分参数作为: 记分器带签名的可调用对象/函数记分器(估计量,X,y) 中也支持此选项 相反,想要一个score\u func作为: 带有签名的得分函数(或损失函数)score\u func(y,y\u pred,**kwargs) 实例 GridSearchCV(评分=dummy\u scorer)和GridSearchCV(评分=make\u scorer(dum

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

评分
参数作为:

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

中也支持此选项

相反,想要一个
score\u func
作为:

带有签名的得分函数(或损失函数)
score\u func(y,y\u pred,**kwargs)

实例
GridSearchCV(评分=dummy\u scorer)
GridSearchCV(评分=make\u scorer(dummy\u scorer 2))
打印预期内容

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\u score、recall\u score、accurity\u score
等),可用于直接指定实际值和预测值并计算结果。即使编写自定义记分器,在大多数情况下也必须使用实际值和预测值。 因此签名必须是
(y,y_pred,…)

现在,在GridSearch或RandomizedSearch等技术中,交叉验证数据的分数必须自动计算。由于估计器和X不断变化(X因交叉验证而变化),因此预测值和相应的实际值也会变化。 因此,
scorer(估计器,X,y)
是有意义的。取估计器和
X
,调用
估计器。预测(X)
以获得预测输出,将其与实际(
y
)进行比较并计算结果

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

从中,我们可以验证上述内容:

Line347 : cls = _PredictScorer
          return cls(score_func, sign, kwargs)
此处
cls
是指向以下位置的函数的指针:

此外,当您在GridSearchCV中的
评分
参数中实际使用字符串值如“准确性”、“精度”等时,也可以使用make\u scorer将其首先转换为
评分器(估计器,X,y,…)
,可在


希望这有点道理。如果您对此有任何疑问或疑问,请随时询问。

不要获取“交叉验证数据的分数必须自动”,您的意思是自动调用实用程序函数(在GridSearch循环中?)在查看示例和整个图片后确定(\u PredictScorer)[我知道它是如何工作的。谢谢。是的,没错。我的意思是,在每个交叉验证循环中,通过调用记分器(在训练和测试数据上)自动计算分数。谢谢-记分器(估计器,X,y)不在文档中!了解它正在做
预测(X)
y
上得分是关键!
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)