【发布时间】:2015-09-20 18:38:30
【问题描述】:
我正在尝试使用内核密度估计器 (KDE) 制作一个过滤器(以去除异常值和噪声)。我在我的 3D (d=3) 数据点中应用了 KDE,这给了我概率密度函数 (PDF) f(x)。现在我们知道密度估计的局部最大值 f(x) 定义了数据点集群的中心。所以我的想法是定义合适的 f(x) 来确定这些集群。
我的问题是如何以及哪种方法更适合在 f(x) 中找到局部最大值这一目的。如果有人可以为我提供一些示例代码/想法,我将非常感激。
这是查找在 3D 数据中给出 f(x) 的 KDE 的代码。
import numpy as np
from scipy import stats
data = np.array([[1, 4, 3], [2, .6, 1.2], [2, 1, 1.2],
[2, 0.5, 1.4], [5, .5, 0], [0, 0, 0],
[1, 4, 3], [5, .5, 0], [2, .5, 1.2]])
data = data.T
kde = stats.gaussian_kde(data)
minima = data.T.min(axis=0)
maxima = data.T.max(axis=0)
space = [np.linspace(mini,maxi,20) for mini, maxi in zip(minima,maxima)]
grid = np.meshgrid(*space)
coords = np.vstack(map(np.ravel, grid))
#Evaluate the KD estimated pdf at each coordinate
density = kde(coords)
【问题讨论】:
标签: python machine-learning cluster-analysis kernel-density