Scikit-Learn KDE 中的 PDF 估计

Posted

技术标签:

【中文标题】Scikit-Learn KDE 中的 PDF 估计【英文标题】:PDF estimation in Scikit-Learn KDE 【发布时间】:2015-02-15 15:07:43 【问题描述】:

我正在尝试从使用 scikit-learn 模块计算的 KDE 计算 PDF 估计值。我已经看到了 2 种评分变体,我都在尝试:下面的语句 A 和 B。

语句 A 导致以下错误:

AttributeError: 'KernelDensity' 对象没有属性 'tree_'

语句 B 导致以下错误:

ValueError: 查询数据维度必须匹配训练数据维度

似乎是一个愚蠢的错误,但我无法弄清楚。请帮忙。代码如下...

from sklearn.neighbors import KernelDensity
import numpy

# d is my 1-D array data
xgrid = numpy.linspace(d.min(), d.max(), 1000)

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d)

# statement A
density_score = KernelDensity(kernel='gaussian', bandwidth=0.08804).score_samples(xgrid)

# statement B
density_score = density.score_samples(xgrid)

density_score = numpy.exp(density_score)

如果有帮助,我正在使用 0.15.2 版本的 scikit-learn。我已经用 scipy.stats.gaussian_kde 成功地尝试过了,所以数据没有问题。

【问题讨论】:

【参考方案1】:

对于语句 B,我遇到了同样的错误:

 ValueError: query data dimension must match training data dimension

这里的问题是你有一维数组数据,但是当你将它提供给 fit() 函数时,它假设你只有一个多维数据点!因此,例如,如果您的训练数据大小为 100000 点,则您的 d 为 100000x1,但 fit 将它们视为 1x100000!

所以,你应该在拟合之前重塑你的 d:d.reshape(-1,1)xgrid.shape(-1,1) p>

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d.reshape(-1,1))
density_score = density.score_samples(xgrid.reshape(-1,1))

注意:语句 A 的问题在于,您正在对尚不合适的对象使用 score_samples!

【讨论】:

【参考方案2】:

您需要先调用 fit() 函数,然后才能从分布中采样。

【讨论】:

我在打电话。见行density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d)

以上是关于Scikit-Learn KDE 中的 PDF 估计的主要内容,如果未能解决你的问题,请参考以下文章

基于debian/ubuntu的linux在非KDE桌面下okular无法读取pdf原因和解决方案

分享《机器学习实战:基于Scikit-Learn和TensorFlow》+PDF+Aurelien

分享《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码

分享《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码

分享《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码

分享《机器学习实战:基于Scikit-Learn和TensorFlow》高清中英文PDF+源代码