我正在尝试使用核密度估计器(KDE)制作一个过滤器(用于去除离群值和噪声)。我在我的三维(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)