模糊聚类分析及matlab程序实现
采用模糊数学语言对按一定的要求进行描述和分类的数学方法称为模糊聚
【1】
类分析。聚类分析主要经过标定和聚类两步骤。1 标定(建立模糊相似矩阵)
城市居民食品零售价格,第t时刻第i种食品的零售价记为x(i,t)。 相似矩阵R的构建方法:NTV法
设时间序列A(i,j)表示食品i在时间t的价格,其中i=1,2…42;t=1,2…39。
m?R(i,j)?1?k?1mk?1xik?xjk(其中i,j,k=1,2…42,m=39)
xik,xjk)?max(R?R(i,j)42*42
2 聚类
2.1 计算R的传递闭包:
对模糊相似矩阵R,依次用平方法计算,R2kkkkR*R?R时,则称R为传递闭包。
,R4,…,R2,…,当第一次出现
t【1】
【2】
2.2 开始聚类:
(1)令T={1,2,3…42},取xi?T(1) ,令X、Q为空集; (2)令j?0;
(3)若R(xi,j)???且xj?X,则令X?X?{j},Q?Q?{j}; (4)j?j?1;
(5)若j?n,返回(1);
(6)若Q为空集,怎输出聚类x,T?T-X; (7)xi?Q(1),Q?Q?{xi},返回(2)。
设置不同的置信水平?值,就可以得到不同的分类。
Matlab程序实现: A=data;
[N M] = size(A);
for i = 1:N for j = 1:N
R(i,j)=abs(1-sum(abs(A(i,:)-A(j,:)))/sum(max([A(i,:);A(j,:)])));
end end
for j=1:42 for i=1:42 y(i,j)=0;
for k=1:42
mn(k)=min(R(i,k),R(k,j)); end
y(i,j)=max(mn); end
end
numda=[1 0.9 0.95 0.85 0.8 0.75 0.55 0.7 0.655 0.35 0.255 0.25 0.2 0.15 0.1]; for i=1:42
TT(i)=i; end
for i=1:length(numda) disp ('当分类系数是'); disp(numda(i)); a=numda(i); T=TT;
disp ('分类为'); while 1 if ~isempty(T) xi=T(1); end
X=[];Q=[]; while 1
for j=1:42
if (y(xi,j)>=a)&isempty(intersect(X,j)) X=union(X,j); Q(length(Q)+1)=j; end end
if isempty(Q) disp(X); break else xi=Q(1); Q(1)=[]; end end
0.65 0.6 0.55 0.5 0.45 0.454 0.4 0.45 0.3 T=setdiff(T,X); if isempty(T) break end end end
相关推荐: