聚类一维数据的核密度估计
Kernel Density Estimation for clustering 1 dimensional data
我正在使用 Matlab 和提供的代码
http://www.mathworks.com/matlabcentral/fileexchange/14034-kernel-density-estimator/content/kde.m
对一维数据进行聚类。特别是我估计了我的数据的密度函数,然后分析了我应该能够识别形成我的数据集的不同分布的峰值。 (正确的?)
然后我根据这些聚类质心(密度函数的峰值)对这些点进行聚类。
您可以在以下位置找到我的数据 (z):
https://drive.google.com/file/d/0B3vXKJ_zYaCJLUE3YkVBMmFtbUk/view?usp=sharing
概率密度函数图位于:
https://drive.google.com/file/d/0B3vXKJ_zYaCJTjVobHRBOXo4Tmc/view?usp=sharing
我所做的只是运行
[bandwidth,density,xmesh]=kde(z);
plot(xmesh,density);
我得到的(请看第二个 link)是每个数据点的密度函数有 1 个峰值....
我认为我做错了什么...... kde 函数的默认参数可能是原因吗?
kde(data,n,MIN,MAX)
% data - a vector of data from which the density estimate is constructed;
% n - the number of mesh points used in the uniform discretization of the
% interval [MIN, MAX]; n has to be a power of two; if n is not a power of two, then
% n is rounded up to the next power of two, i.e., n is set to n=2^ceil(log2(n));
% the default value of n is n=2^12;
% MIN, MAX - defines the interval [MIN,MAX] on which the density estimate is constructed;
% the default values of MIN and MAX are:
% MIN=min(data)-Range/10 and MAX=max(data)+Range/10, where Range=max(data)-min(data);
这可能吗?你能告诉我我应该根据什么来改变它们吗?
您指出问题的解决方案。该文档建议该算法设置从数据创建的 2^N 个峰值的上限。默认值(16k 或 2^14)大于您提供的点数(~8k),导致 "spiky" 行为。
如果你改为 运行
[bandwidth,density,xmesh]=kde(z,2^N);
对于 2^N 的不同值(函数需要 2 的幂,必须是 FFT 的东西)你得到如下图:
您可以根据此选择合适的 N 值。
我正在使用 Matlab 和提供的代码 http://www.mathworks.com/matlabcentral/fileexchange/14034-kernel-density-estimator/content/kde.m
对一维数据进行聚类。特别是我估计了我的数据的密度函数,然后分析了我应该能够识别形成我的数据集的不同分布的峰值。 (正确的?) 然后我根据这些聚类质心(密度函数的峰值)对这些点进行聚类。
您可以在以下位置找到我的数据 (z): https://drive.google.com/file/d/0B3vXKJ_zYaCJLUE3YkVBMmFtbUk/view?usp=sharing
概率密度函数图位于: https://drive.google.com/file/d/0B3vXKJ_zYaCJTjVobHRBOXo4Tmc/view?usp=sharing
我所做的只是运行
[bandwidth,density,xmesh]=kde(z);
plot(xmesh,density);
我得到的(请看第二个 link)是每个数据点的密度函数有 1 个峰值.... 我认为我做错了什么...... kde 函数的默认参数可能是原因吗?
kde(data,n,MIN,MAX)
% data - a vector of data from which the density estimate is constructed;
% n - the number of mesh points used in the uniform discretization of the
% interval [MIN, MAX]; n has to be a power of two; if n is not a power of two, then
% n is rounded up to the next power of two, i.e., n is set to n=2^ceil(log2(n));
% the default value of n is n=2^12;
% MIN, MAX - defines the interval [MIN,MAX] on which the density estimate is constructed;
% the default values of MIN and MAX are:
% MIN=min(data)-Range/10 and MAX=max(data)+Range/10, where Range=max(data)-min(data);
这可能吗?你能告诉我我应该根据什么来改变它们吗?
您指出问题的解决方案。该文档建议该算法设置从数据创建的 2^N 个峰值的上限。默认值(16k 或 2^14)大于您提供的点数(~8k),导致 "spiky" 行为。
如果你改为 运行
[bandwidth,density,xmesh]=kde(z,2^N);
对于 2^N 的不同值(函数需要 2 的幂,必须是 FFT 的东西)你得到如下图:
您可以根据此选择合适的 N 值。