这是我的问题:
我有下一个数据“A”,看起来像:
正如你所看到的,我用红色圆圈绘制了明显的峰值,最明确的是2和7,我说它们是定义的,因为它的标准偏差与其他峰值相比较低(尤其是第二个峰值)
我需要的是一种方法(无论如何)来获取数字数组中 n 峰值的值和标准偏差。
我尝试过“群集”,但是没有取得好成绩:
首先,我使用了“kmeans”MATLAB函数,我意识到这个算法没有按照我的需要对峰值进行分组。如上图所示,在红色圆圈中,该簇具有少于3或4个峰。并且kmeans需要您设置群集的数量,我需要自动识别它。
我希望任何人都可以给我一些想法,或者一种方法来获得更好的结果,谢谢。
Pd:我在下一个链接中保留数据“A”。
https://drive.google.com/file/d/0B4WGV21GqSL5a2EyQ2l0SHZURzA/edit?usp=sharing
答案 0 :(得分:0)
问题是你的轴有不同的含义。
K-means优化方差。但是X中的方差与Y中的方差完全不同,不是吗?此外,这些方法中的每一种都会将数据分成 X和Y,而我假设您希望数据仅在X轴上进行分区。
我建议如下:将Y轴视为重量,将X轴视为位置。
然后执行加权密度估算,并寻找低密度来分离您的聚类。
我无法帮助您使用MATLAB。我不习惯。
在数学上,你想要做的是在每个点放置一个高斯,区域Y和中心X.然后在这些高斯的总和上找到最小值和最大值。有关详细信息,请参阅Wikipedia, Kernel Density Estimation;除了你想使用Y轴作为权重。如果您不想使用重量,也可以使用1 / Y作为标准偏差。