带有KernelDensity和自定义记分器的GridSearchCV会产生和没有记分器相同的结果



我正在使用scikit slearn 0.14,并试图为GridSearchCV实现一个用户定义的评分函数来进行评估。

def someScore(gtruth, pred):
    pred = np.clip(pred, 0, np.inf)
    logdif = np.log(1 + gtruth) - np.log(1 + pred)
    return sin(np.sqrt(np.mean(np.square(logdif))))
neg_scorefun = make_scorer(lambda x,y:someScore(x,y))

注意:我添加了鼻窦,所以分数排名与大多数其他分数不同,只是为了测试。。。

现在,如果我运行

g1=GridSearchCV(KernelDensity(),param_grid,scoring=neg_scorefun).fit(X)

然后

g2=GridSearchCV(KernelDensity(),param_grid).fit(X)

然后

print g1.best_score_, g2.best_score_

给我完全相同的结果。"best_params_"也是相同的。无论我在函数"someScore"中输入什么,它总是一样的。我预计结果会有所不同,考虑到我用固定值测试了"someScore",返回了一些负值,使用了sinus(如上面的例子),基本上尝试了从"基本事实"one_answers"预测"得出的各种值。。。

从结果来看,无论我使用什么得分,得分者都会被忽略、覆盖、不被调用,不管怎样。。。

我错过了什么?有什么建议吗?

如果您想使用自定义函数,您需要定义一个具有以下签名的可调用函数:

def-myscoreing(估计器,X,y):return np.meal(估计器.预测(X)!=y)

相关内容

  • 没有找到相关文章