我正在使用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”,返回了一些负值,使用了窦(如上例所示)基本上尝试了从“基础事实”和“预测”中得出的所有类型的值...
从结果来看,无论我使用什么得分,得分手都会被忽略,被覆盖,不被称为,无论如何......
我错过了什么?有什么建议吗?
答案 0 :(得分:0)
如果要使用自定义函数,则需要使用以下签名定义可调用函数:
def myscoring(estimator,X,y): return np.mean(estimator.predict(X)!= y)