【问题标题】:MatLAb: Warning: Failed to converge in 1 iterationsMatLAb:警告:未能在 1 次迭代中收敛
【发布时间】:2014-12-03 03:34:04
【问题描述】:
%% clear/load
clc; clear all; close all; % removes variables, clears console

%% const, values do not change
fdim = 2; % data dimension
iter = 5; % number of em algorithm iterations
ncl = 3; % number of clusters
stype = 'full';
% covariance matrix type < spherical, diagonal, full >

%% artificial data
%% true mixture parameters & generate observations
% m stands for mu, μ (mean)
% cluster mean
m1 = [2,3];
m2 = [5,8];
m3 = [9,4];

% sig stands for sigma, σ (standard deviation)
% cluster variances
sig1 = [2.5,0.6;0.6,2.5];
sig2 = [2.2,1.1;1.1,2.2];
sig3 = [3,-1.7;-1.7,3];
% cluster weight (number of observations)
N1 = 1000;
N2 = 600;
N3 = 400;

% multivariate normal random numbers
% syntex
% R = mvnrnd(MU,SIGMA)
% r = mvnrnd(MU,SIGMA,cases)
cluster1 = mvnrnd(m1, sig1, N1)';
cluster2 = mvnrnd(m2, sig2, N2)';
cluster3 = mvnrnd(m3, sig3, N3)';

% whole observations
clustertot=[cluster1 cluster2 cluster3];

%% Initialized by K-means
len_data = length(clustertot); % data length

% k-means clustering
% syntex
% idx = kmeans(X,k,Name,Value)

% initial parameter estimation (using k-means)
[p,mvec]=kmeans(clustertot',ncl,'Maxiter',1); % <--------------------------- error

我得到错误:

Warning: Failed to converge in 1 iterations. 
> In kmeans>loopBody at 395
  In smartForReduce at 128
  In kmeans at 299
  In hw4 at 48 
>> 

有什么想法吗?

【问题讨论】:

  • 您将最大迭代次数设置为 1,但它没有在 1 次迭代中收敛。默认值为 100。
  • @excaza 无论我选择什么,它都表明它不会收敛:/
  • 由于印刷错误,投票结束此问题。我验证了将迭代次数更改为超过 1 可以使算法收敛。请不要冒犯。

标签: matlab


【解决方案1】:

kmeans 使用迭代算法来获得解决方案。您会收到警告(不是错误),因为您设置 MaxIter = 1 并且算法仅在一步后未收敛。如果您将 kmeans 调用更改为以下内容,则您的程序可以运行:

[p,mvec]=kmeans(clustertot',ncl);

您是否有理由使用 MaxIter 选项?

【讨论】:

  • 另外,如果您让 kmeans 调用 [p,mvec]=kmeans(clustertot',ncl,'Display','final');,那么它会告诉您需要多少次迭代才能收敛(在我的情况下为 7-20)
猜你喜欢
  • 2014-09-08
  • 2018-11-16
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 2019-03-14
  • 2021-05-16
  • 2022-06-17
  • 2018-02-12
相关资源
最近更新 更多