我在 MATLAB GUI 中使用 k-means。我已经完成了。该程序(GUI)工作得很好(在命令窗口中,它工作得很好)。我不知道,有时GUI可以工作,但有时会突然出现错误。这是错误消息:
??? Error while evaluating uicontrol Callback
??? Error using ==> kmeans>batchUpdate at 436
Empty cluster created at iteration 1.
Error in ==> kmeans at 337
converged = batchUpdate();
Error in ==> CalcRand at 4
[g c] = kmeans(data,k,'dist','SqEuclidean');
Error in ==> kmeansFIN2>Centroid_Callback at 203
[g,c,y,clr]=CalcRand( data,k );
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> kmeansFIN2 at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)kmeansFIN2('Centroid_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
一点解释:我的 GUI 有 4 个按钮,它们是 Cluster、Show Centroid、Show the Graphic、Evaluate the Graphic。我可以在这里给出我的代码,但是它太长了,所以我只是提示一下我的代码:
% CLUSTER (PUSH BUTTON)
[g c] = kmeans(cobat,k,'dist','SqEuclidean');
y = [cobat g]
% SHOW CENTROID (PUSH BUTTON)
c
% EVALUATE THE CLUSTER
[s,h]=silhouette(cobat,g,'SqEuclidean');
% SHOW THE GRAPHIC
%# show points and clusters (color-coded)
clr = lines(k);
figure, hold on
scatter3(cobat(:,1), cobat(:,2), cobat(:,3), 36, clr(g,:), 'Marker','.')
scatter3(c(:,1), c(:,2), c(:,3), 100, clr, 'Marker','o', 'LineWidth',3)
hold off
view(3), axis vis3d, box on, rotate3d on
xlabel('x'), ylabel('y'), zlabel('z')
根据错误,有人说,“集群有可能在集群的初始阶段“丢失”其所有成员;这就是 K-Means 算法的工作原理。发生这种情况的通常原因是不好的选择起始集群质心。“EmptyAction”参数控制如果确实发生了要采取的步骤,默认是错误输出。” 这样对吗?有人可以用可靠的来源向我解释吗?有没有办法远离这个错误?
谢谢你。