在R里面求助的一个问题,但是貌似转变成了一个数理统计的问题,所以整理,贴到这里,希望有达人指点,先行谢过:)

-------------------------------------------------------------------------------------------------------

是从个问题开始的:



    给定一个数组 --> @x 做聚类分析,现在不知道它能分成多少类,是要做 fuzzy C-means clustering么?如何在实现未知分类数目的聚类分析?



-------------------------------------------------------------------------------------------------------

我现在的数据都是正整数,如下:

492, 500, 490, 486, 490, 491, 493, 480, 461, 504, 476, 434, 500, 470, 495, 3116, 3805, 3142, 12836, 12692, 3062, 3091, 3141, 3177, 3685, 3150, 3114, 3149, 12658, 3134, 3143, 3156, 3119, 3172, 3113, 12307, 12338, 3162, 2679, 3177, 3111, 3115, 3136, 3156, 12394, 3129, 3176, 3134, 3108, 12657, 506, 473, 495, 494, 434, 459, 445, 475, 476, 3146, 2009, 3132, 3155, 2704, 3125, 3170, 3187



具体分类的话,我查到了这个:

http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/cmeans.html

使得 Jm 最小。



-------------------------------------------------------------------------------------------------------

然后是详细的对所面临的数据的手工分类过程:



  理论上数据可以分成1类,或者2类,这个在每行数据里是不固定的。即某些行可以分成一类,有些行可以分成两类,但是哪些行分成1类那些行分成两类不固定



  但是,由于有实验误差的问题,有些数据需要抛弃,比如,如果一组数据是 23,24,25,332,334,336,2000; 那么这个2000是实验误差,需要摒弃。一般来讲这个误差会是非常大的,比如这里是2000,或者更大,30000;同时误差的个数不固定,有时候是一个2000,有时候是一个2000,一个30000。这里取决于这一行包含数据的个数。数据个数越多,其中包含错误的个数便越多。



  如果让我来手工分类,基本上就是按照上面的方式;首先确定是一个cluster或者是两个clusters,然后再摒弃掉距离cluster距离非常远的数字。



  这里如果是一个cluster,则这个cluster附近的数字符合正态分布;如果是两个cluster,那么在这两个cluster附近的数字分别符合正态分布。



如何来模拟上面的手工分类过程?

---------------------------------------------------------------------------------------------------------
每行数据是否有序?如果顺序不能打乱,那可以考虑用change point analysis.
[quote]引用第1楼wxqmath2009-03-26 15:35发表的“”:

每行数据是否有序?如果顺序不能打乱,那可以考虑用change point analysis.[/quote]



没有顺序。能大体介绍一下change point analysis么?
例如,随时间观测到一列数据,某个时间点之前的数据服从一个分布,在该点数据发生变化,之后分布改变。变点分析就是找到这个时间点的统计方法。这个点找到了,就自然把数据分成两组了。该点前面的数据分为一组,服从同一分布。对第二组继续使用这个技术。如果有奇异值,那么也要在这个过程中找出来。

网上可以找到不老少此类文献。



你的问题可能用不上。直接用聚类分析的系统聚类法或模糊系统聚类法。

1、首先不分类,剔除奇异值,用拟合检验对数据做分布检验,如果通过,说明就一类。

2、如果通不过,则分成两类,剔除奇异值,再用拟合检验对每类数据做分布检验,直到各类数据的检验都通过为止。

3、否则分成3类,。。。。。。直到各类数据的检验都通过为止。



但是估计你不能把检验水平定的太高。我想这是比较直观简洁的方法,但精度不敢保证。