具有KernelDensity和自定义得分手的GridSearchCV产生与没有得分者相同的结果

时间:2015-04-02 15:22:31

标签: python scikit-learn kernel-density

我正在使用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”,返回了一些负值,使用了窦(如上例所示)基本上尝试了从“基础事实”和“预测”中得出的所有类型的值...

从结果来看,无论我使用什么得分,得分手都会被忽略,被覆盖,不被称为,无论如何......

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

1 个答案:

答案 0 :(得分:0)

如果要使用自定义函数,则需要使用以下签名定义可调用函数:

def myscoring(estimator,X,y):         return np.mean(estimator.predict(X)!= y)