核密度评分 VS 得分样本 Python Scikit-learn

13
我现在使用scikit-learn和Python几天了,更专门地使用KernelDensity。 一旦模型适合,我想评估新点的概率。 方法score()就是为此而设计的,但显然不起作用,因为当我将一个数组作为输入时,只有一个数字输出。我使用score_samples(),但速度非常慢。 我认为score不起作用,但我没有技能来改善它。 如果您有任何想法,请告诉我。
2个回答

12

score()使用score_samples()如下:

return np.sum(self.score_samples(X))

因此,在您的情况下应使用score_samples()。


确切地说,但总和不应该等于1吗?为什么会这样? - seralouk

11

没有代码很难说,但是:

我们假设您要评估的点保存在数组X中,并且您有一个核密度估计kde,因此您可以调用:

logprobX = kde.score_samples(X)

但是要小心,这些是对数!所以你还需要执行:

probX = np.exp(logprobX) 

这些数值适用于您的直方图(可能是之前计算过的)。

运行这些代码所需的时间取决于X的长度。在我的机器上,计算7500个点相当快。


你说的“最终计算”是什么意思?score_samples()确实非常慢。但应该很容易并行化。 - Kai
我不明白为什么即使是2D特征空间,速度也如此缓慢。 - Kai
"Eventually"在德语中是一个假朋友...我进行了编辑。抱歉,那是几年前的事了。“为什么它这么慢”的问题更适合模块开发人员回答。我不知道我怎么能在这里帮助你。 - Ben Müller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接