在matlab中做模糊C均值聚类(fcm)算法如何体现初始隶属度?

如题

  我贴部分FCM的Matlab代码:
  expo = options(1); % Exponent for U
  max_iter = options(2); % Max. iteration
  min_impro = options(3); % Min. improvement
  display = options(4); % Display info or not

  obj_fcn = zeros(max_iter, 1); % Array for objective function

  U = initfcm(cluster_n, data_n); % Initial fuzzy partition
  % Main loop
  for i = 1:max_iter,
  [U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
  if display,
  fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
  end
  % check termination condition
  if i > 1,
  if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end,
  end
  end

  其中
  U = initfcm(cluster_n, data_n); % Initial fuzzy partition

  这个就是初始化划分矩阵,随机产生一个隶属度矩阵,

  代码如下:
  U = rand(cluster_n, data_n);
  col_sum = sum(U);
  U = U./col_sum(ones(cluster_n, 1), :);

  上面就是它初始化的一个隶属度矩阵,
  cluster_n行,data_n列。
  即一列中从上到下表示每个样本隶属与每一类的隶属度。
  然后在算法中不断迭代,
  最后得到的还是如此大的一个矩阵,代表每个样本隶属与每一类的隶属度
  然后选择最大的那个就是,它就属于那一类。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-11
它的程序里面是用rand函数随机初始化了一个矩阵N*c,然后对这个随机矩阵进行归一化,即满足一行(也可能是列记不清楚了),反正是让它满足隶属度的每个样本属于所有类隶属度为1的条件。用这个矩阵进行初始化,计算新的中心 新的隶属度 新的中心。。。。 知道满足阈值。matlab里面自己有函数一招就能找到
相似回答