核密度分数与Python Scikit的score_samples
我最近在用Python和scikit-learn,特别是在使用KernelDensity这个功能。模型训练好后,我想评估一些新点的概率。为此有一个叫score()的方法,但好像不太好用,因为当我输入一个数组时,输出的结果只有一个数字。我试过用score_samples(),但是速度非常慢。
我觉得score这个方法可能有问题,但我没有能力去改进它。如果你们有什么想法,请告诉我。
2 个回答
11
没有代码的话,有点难判断,不过:
我们假设你想要评估的点保存在一个叫做 X
的数组里,并且你有一个核密度估计 kde
,所以你会调用:
logprobX = kde.score_samples(X)
但要小心,这些是对数值!所以你还需要做:
probX = np.exp(logprobX)
这些值是和你的直方图相匹配的(可能是之前计算过的)。
运行这些代码的时间取决于 X
的长度。在我的电脑上,计算7500个点是相当快的。
12
score()这个函数是通过score_samples()来工作的,具体用法如下:
return np.sum(self.score_samples(X))
所以,这就是为什么在你的情况下应该使用score_samples()的原因。