我正在使用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)