Python 带有KernelDensity和自定义记分器的GridSearchCV与没有记分器的结果相同

Python 带有KernelDensity和自定义记分器的GridSearchCV与没有记分器的结果相同,python,scikit-learn,kernel-density,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_sc

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

给我完全相同的结果。最好的参数也是相同的。不管我在函数someScore中添加了什么,它总是一样的。我希望结果会有所不同,考虑到我用固定值测试了一些分数,返回了一些负值,在上面的例子中使用了窦房结,基本上尝试了从基本事实和预测中得出的各种值

从结果来看,无论我使用什么评分,评分员都会被忽略、覆盖、不调用,无论什么


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

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

def myscoringe刺激器,X,y:
返回np.meansestimator.predictX!=y

是否可以尝试使用当前版本0.16.0?尝试过更新,结果相同。我试着做一个g1.fitX,矢量填充。然后我得到了另一条错误消息,即KernelDensity没有“predict”属性。是否可能,使用评分函数对KD没有意义?至少在我看来这不是故意的?事情是这样的,我想用一个记分员来衡量密度估计的优劣,但现在我觉得我需要选择另一条路径。放弃将GridSearchCV与KernelDensity结合使用,对吗?等等,我对你想做的有点困惑。你的基本事实是什么?KD是一种无监督算法,您可以使用评分函数,但只能使用无监督函数。你想测量什么?基本上我想做热点检测。给定二维平面上的一组点x/y值,我要估计密度,并使用该密度导出热点位置。热点需要满足几个标准,评分函数应考虑这些标准。我在问题中提供的评分函数只是为了测试,因为我是python新手,所以我想尝试一下,了解事情是如何工作的。在评分函数和GridSearchCV的帮助下,我想为KD选择参数,以便满足我对热点的约束。这是完全可能的。创建您自己的评分对象,如下所述:这将允许您使用KD对象的任何属性。
print g1.best_score_, g2.best_score_