加入了权重项改进的FCM模糊聚类算法不收敛,代码哪里有问题吗?

根据论文的推导对FCM算法进行了改进,加入了权重这一项。但是我按照论文的方法进行编程之后,代码运行不收敛。本人matalab刚入门,下面是改进算法的公式推导以及我的代码运行结果。
img
MATLAB R2019b
img

img

我的代码如下:

data数据如下,是60组九个维度的数据
data=[0.106481481481481,0.0337078651685393,0.600000000000000,0,0.569800569800570,0.0481927710843374,0,0.107142857142857,0.139175257731959;%越大越坏归一化
0.162037037037037,0.191011235955056,0.600000000000000,0,0.515669515669516,0.660929432013769,0,0.0714285714285714,0.154639175257732;
0.226851851851852,0.247191011235955,0.600000000000000,0,0.749287749287749,0.469879518072289,0.0333333333333333,0.0714285714285714,0.201030927835052;
0.189814814814815,0.0337078651685393,0.600000000000000,0,0.730769230769231,0.0929432013769363,0.0111111111111111,0.0357142857142857,0.0103092783505155;
0.0416666666666667,0.0337078651685393,0.600000000000000,0,0.954415954415955,0.709122203098107,0.0333333333333333,0.250000000000000,0.237113402061856;
0.0324074074074074,0,0.600000000000000,0,0.658119658119658,0.0722891566265060,0,0,0.0154639175257732;
0.0185185185185185,0,0.600000000000000,0,0.158119658119658,0.0654044750430293,0.0555555555555556,0.0357142857142857,0.0257731958762887;
0.111111111111111,0.280898876404494,0.600000000000000,0,0.222222222222222,0.296041308089501,0.0111111111111111,0,0.00515463917525773;
0,0.0112359550561798,0.600000000000000,0,0.222222222222222,0.611015490533563,0.0333333333333333,0.0357142857142857,0.0154639175257732;
0.0138888888888889,0,0.600000000000000,0.0600000000000000,0.189458689458690,0.0499139414802065,0.0666666666666667,0.214285714285714,0.211340206185567;
0.0787037037037037,0.382022471910112,0.600000000000000,0,0.914529914529915,0.345955249569707,0,0.0714285714285714,0.0103092783505155;
0.0231481481481481,0.539325842696629,0.600000000000000,0,1,0.0550774526678141,0.0666666666666667,0.392857142857143,0.340206185567010;
0.0185185185185185,0.0112359550561798,0.600000000000000,0,0.639601139601140,1,0,0.0357142857142857,0.0360824742268041;
0.0416666666666667,0.224719101123596,0.600000000000000,0,0.189458689458690,0.0740103270223752,0.0222222222222222,0.464285714285714,0.453608247422680;
0.203703703703704,0.247191011235955,0.600000000000000,0.990000000000000,0.189458689458690,0.347676419965577,0.288888888888889,0.285714285714286,0.324742268041237;
0.0138888888888889,0,0.600000000000000,0,0.158119658119658,0.514629948364888,0,0.214285714285714,0.247422680412371;
0.166666666666667,0.202247191011236,0.200000000000000,0,0.189458689458690,0.0550774526678141,0.0222222222222222,0.607142857142857,0.798969072164948;
0.00462962962962963,0,0.200000000000000,1,0.126780626780627,0.993115318416523,0.0777777777777778,0.500000000000000,0.701030927835052;
0.0324074074074074,0.0224719101123595,0.200000000000000,0,0.253561253561254,0.846815834767642,0.0222222222222222,0.464285714285714,0.618556701030928;
0.0277777777777778,0.0337078651685393,0.200000000000000,0.600000000000000,0.253561253561254,0.497418244406196,0.777777777777778,0.107142857142857,0.231958762886598;
0.175925925925926,0.112359550561798,0.200000000000000,0,0.538461538461539,0.652323580034424,0.0111111111111111,0.250000000000000,0.340206185567010;
0.0185185185185185,0,0.200000000000000,0.780000000000000,0.569800569800570,0.0516351118760757,0.955555555555556,0.321428571428571,0.381443298969072;
0.0324074074074074,0,0.200000000000000,0.990000000000000,0.316239316239316,0.519793459552496,0.122222222222222,0.392857142857143,0.355670103092784;
0.217592592592593,0.0898876404494382,0.600000000000000,0.990000000000000,0.253561253561254,0.0636833046471601,0.588888888888889,0.464285714285714,0.283505154639175;
0.162037037037037,0.505617977528090,0.600000000000000,0.0900000000000000,0.702279202279202,0.0619621342512909,0,0.214285714285714,0.190721649484536;
0.185185185185185,0.224719101123596,0.600000000000000,0,0.683760683760684,0.499139414802065,0.511111111111111,0.464285714285714,0.381443298969072;
0.162037037037037,0.359550561797753,0.600000000000000,0.110000000000000,0.702279202279202,0.0516351118760757,0.433333333333333,0.357142857142857,0.247422680412371;
0.370370370370370,0.280898876404494,0.600000000000000,0,0.702279202279202,0.0550774526678141,0.344444444444444,0.321428571428571,0.268041237113402;
0.541666666666667,0.202247191011236,0.600000000000000,0,0.702279202279202,0.0413080895008606,0.455555555555556,0.107142857142857,0.211340206185567;
0.361111111111111,0.0898876404494382,0.200000000000000,0,0.380341880341880,0.0550774526678141,0.0333333333333333,0,0.0103092783505155;
0.879629629629630,0.0561797752808989,0.200000000000000,0,0.237891737891738,0.0808950086058520,0.977777777777778,0.0357142857142857,0.0257731958762887;
1,0.0449438202247191,0.200000000000000,0.356000000000000,0.158119658119658,0.0447504302925990,0.0333333333333333,0.464285714285714,0.675257731958763;
0.583333333333333,0.0224719101123595,0,0,0.316239316239316,0.0895008605851979,0.122222222222222,0,0.0154639175257732;
0.745370370370370,0.0674157303370787,0,0,0,0,0.0222222222222222,0.0357142857142857,0.0206185567010309;
0.185185185185185,0,0,0,0,0.0808950086058520,0,0.0357142857142857,0.0206185567010309;
0.185185185185185,0.0112359550561798,0.200000000000000,0,0,0.151462994836489,0.288888888888889,0,0.0103092783505155;
0.194444444444444,0.00674157303370786,0.600000000000000,0,0,0.161790017211704,1,0.535714285714286,0.829896907216495;
0.0185185185185185,0,0.200000000000000,0,0,0.0722891566265060,0.0333333333333333,0.0357142857142857,0.0206185567010309;
0.189814814814815,0.0112359550561798,0.200000000000000,0,0,0.0619621342512909,0,0.0714285714285714,0.298969072164948;
0.185185185185185,0,0,0,0,0.0378657487091222,0.0666666666666667,0.0357142857142857,0.0206185567010309;
0.171296296296296,0.0112359550561798,0.200000000000000,0,0,0,0.0222222222222222,0.0357142857142857,0.0309278350515464;
0.189814814814815,0.0224719101123595,0,0,0,0.0585197934595525,0,0,0.00515463917525773;
0.495370370370370,0.426966292134831,0,0,0,0.0757314974182444,0.144444444444444,0.0714285714285714,0.0206185567010309;
0.180555555555556,0.0269662921348315,0,0,0,0.0654044750430293,0.177777777777778,0,0.0154639175257732;
0.356481481481481,0.0112359550561798,0,0,0,0.0740103270223752,0,0,0.0309278350515464;
0.421296296296296,0.112359550561798,0,0,0.347578347578348,0.0585197934595525,0.0444444444444444,0.0357142857142857,0;
0.175925925925926,0.0224719101123595,0.600000000000000,0.300000000000000,0.522792022792023,0.113597246127367,0.100000000000000,1,1;
0.740740740740741,0.0337078651685393,0.200000000000000,0,0.522792022792023,0.0654044750430293,0.0666666666666667,0,0.0309278350515464;
0.115740740740741,1,0.600000000000000,0,0.766381766381767,0.614457831325301,0,0.0714285714285714,0.190721649484536;
0.189814814814815,0.0112359550561798,0.200000000000000,0,0.347578347578348,0.0774526678141136,0.0666666666666667,0.0357142857142857,0.0360824742268041;
0.0555555555555556,0.0337078651685393,0.600000000000000,0.980000000000000,0.693732193732194,0.0722891566265060,0.444444444444444,0.250000000000000,0.237113402061856;
0.0509259259259259,0.191011235955056,0.200000000000000,0,0,0.0602409638554217,0.100000000000000,0.0357142857142857,0.00515463917525773;
0.0787037037037037,0.370786516853933,0.600000000000000,0.620000000000000,0.639601139601140,0.0826161790017212,0.122222222222222,0.142857142857143,0.201030927835052;
0.0324074074074074,0.0337078651685393,0.600000000000000,0,0.621082621082621,0.0550774526678141,0.411111111111111,0.285714285714286,0.268041237113402;
0.370370370370370,0.202247191011236,0.200000000000000,0,0.347578347578348,0.0808950086058520,0.144444444444444,0.250000000000000,0.0463917525773196;
0.0277777777777778,0,0.200000000000000,0,0,0,0,0,0.0257731958762887;
0.342592592592593,0.0337078651685393,0.200000000000000,0,0.316239316239316,0.0654044750430293,0.0777777777777778,0,0.0206185567010309;
0.745370370370370,0.0449438202247191,1,0,0,0.0981067125645439,0.977777777777778,0.0357142857142857,0.0154639175257732;
0.541666666666667,0.0337078651685393,0.200000000000000,0,0,0.0671256454388985,0.122222222222222,0,0.0206185567010309;
0.0694444444444445,0.168539325842697,0.600000000000000,0,0.189458689458690,0.0636833046471601,0.477777777777778,0.392857142857143,0.309278350515464];

运行结果

img

img

img

万分感谢!


```html
function [center,U,W,obj_fun] = FWCMcluster(data,cluster_n,options)
% FWCMCluster.m   采用模糊C均值对数据集data聚为cluster_n类
% 用法:
%   1.  [center,U,W,obj_fun] = FWCMCluster(Data,cluster_n,options);
%   2.  [center,U,W,obj_fun] = FWCMCluster(Data,cluster_n);
% 输入: 
%   data        ---- n*m矩阵,表示n个样本,每个样本的维度为m
%   cluster_n   ---- 标量,表示聚类中心数目,即类别数
%   options     ---- 5*1矩阵,其中
%       options(1):  隶属度矩阵U的模糊加权指数,>1          (缺省值: 2.0)
%       options(2):  最大迭代次数                         (缺省值: 100)
%       options(3):  隶属度最小变化量,迭代终止条件         (缺省值: 1e-5)
%       options(4):  每次迭代是否输出信息标志              (缺省值: 1)
%       options(5):   权重系数加权指数                     (缺省值: 2)
% 输出:
%   center      ---- 聚类中心
%   U           ---- 隶属度矩阵
%   obj_fun     ---- 目标函数(值)


if nargin ~= 2 && nargin ~= 3    % 判断输入参数个数只能是2个或3个
    error('Too many or too few input arguments!');
end

cluster_n = 5;          % 表示聚类中心数目,即类别数,本课题取值5个
data_n = size(data, 1); % 求出data的第一维行数,即样本个数,60个
in_n = size(data, 2);   % 求出data的第二维列数,即样本的维度(特征值长度),9列
% 默认操作参数
default_options = [2;    % 隶属度矩阵U的模糊加权指数
    100;                % 最大迭代次数
    1e-5;                % 隶属度最小变化量,迭代终止条件
    1;                   % 每次迭代是否输出信息标志
    2];                  %权重系数加权指数

% 参数配置
if nargin == 2
    options = default_options; % 如果只输入前两个参数,那么就调用默认的参数
else
    if length(options) < 4  % 如果参数个数少于4个,那么其他选用默认参数
        tmp = default_options; % 令tmp赋值等于默认参数
        tmp(1:length(options)) = options; % 令tmp的前options长度的个数对应位置赋值等于options中相应位置的值,更新tmp
        options = tmp;         % 令options赋值等于新的tmp
    end
    nan_index = find(isnan(options)==1);  % 返回options中不是数值时对应位置的值为1(1表示真,如NaN非数值),是数时的值为0(假);并将值为1的相应位置编号赋值给nan_index
    options(nan_index) = default_options(nan_index);  % 将denfault_options中对应位置的参数赋值给options中不是数的位置
    if options(1) <= 1
        error('The exponent should be greater than 1!');  % 如果模糊矩阵(即隶属度矩阵)的模糊加权指数小于等于1,则显示错误,该值应大于1
    end
end

% 将options 中的分量分别赋值给五个变量;
expu = options(1);       % 隶属度矩阵U的模糊加权指数
max_iter = options(2);   % 最大迭代次数
min_impro = options(3);  % 隶属度最小变化量,迭代终止条件
display = options(4);    % 每次迭代是否输出信息标志
expw =  options(5);      %权重系数加权指数

obj_fun = zeros(max_iter, 1); % 初始化输出参数obj_fun

U = initfcm(cluster_n, data_n);     % 初始化模糊分配矩阵,使U满足每列相加等于1

% data=rand(60,9)
Foods=(1+rands(5,9))*0.5;

center=Foods;   % 将IABC的运算中心结果作为FWCM的初始聚类中心

% Main loop  主要循环
 for k = 1:max_iter
% 在第i步循环中改变聚类中心center\模糊矩阵U的隶属度值\权重系数W的值;
%     [U,center,W,obj_fun(i)] = stepfcm(data,center,cluster_n,expu,expw);
   
%%更新权重矩阵W
out1=ones(size(center,1)*size(data,1),size(data,2));%用来储存各个数据点各个维度到各个聚类中心各个维度的差的平方
out=ones(size(center,1)*size(data,1),size(data,2));
W=initfcm(1,size(data,2))*(size(data,2));%初始化权重矩阵
for i=1:size(data,1)%遍历data中的每一个数据
    for j=1:size(center,1)%遍历每一个聚类中心点
        out1(size(center,1)*(i-1)+j,:)=(data(i,:)-center(j,:)).^2;
       out(size(center,1)*(i-1)+j,:) = out1(size(center,1)*(i-1)+j,:);
    end
end
% out;
temp=(sum(out)).^(1/(1-expw));
W=temp./(sum(temp)*(1/size(data,2)));%求得初始权重矩阵   *(1/size(data,2))

%%更新隶属度矩阵U
temp1=ones(size(center,1)*size(data,1),1);
temp2=ones(size(center,1),size(data,1));
temp3=ones(1,300);
for i=1:size(data,1)
    for j=1:size(center,1)
        temp1((i-1)*size(center,1)+j,1)=((1+W)*(out((i-1)*(size(center,1))+j,:))').^(1/(1-expu));

    end
end
temp2=reshape(temp1,size(center,1),size(data,1));
repmat(sum(temp2),1,size(center,1));
temp3=(temp1)'./( repmat(sum(temp2),1,size(center,1)));
U=reshape(temp3,size(center,1),size(data,1));
%%计算目标函数
%%                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
obj_fun(k)=sum(sum((U.^(expu)).*(reshape((1+W.^(expw))*(out'),size(center,1),size(data,1)))));  
%%更新聚类中心
center=((U.^(expu))*data)./(repmat((sum((U.^(expu))'))',1,size(data,2)));



    if display  %display即disp,可用来显示字符串、计算结果、矩阵、数字等
        fprintf('FWCM:Iteration count = %d, obj_fun = %f\n,', k, obj_fun(k));% %d表示整数,%f表示小数形式的实数;输出的结果为单引号内的内容,其中i和obj_fun(i)替换%d和%f  
    end                                                                       % Interaction count为迭代次数;\n是换行,英文是New line,表示使光标到行首

%% 终止条件判别
    if k > 1
        if abs(obj_fun(k) - obj_fun(k-1)) < min_impro   % 终止条件判别   
            break;
        end
    end
 end
 
U
W 
for i=1:60
    [m(i),b(i)]=max(U(:,i));
end
find(b==1)
find(b==2)
find(b==3)
find(b==4)
find(b==5)


iter_n = k; % 实际迭代次数  
obj_fun(iter_n+1:max_iter) = []; %清除后面没有迭代的位置

```