1

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 (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')

エラーによると、誰かが次のように述べています。クラスター重心の開始の選択. 'EmptyAction' パラメーターは、それが発生した場合に実行される手順を制御し、デフォルトはエラー アウトです." そうですか?誰かが信頼できる情報源で私に説明できますか? そして、このエラーを回避する方法はありますか?

ありがとうございました。

4

2 に答える 2

1

はい、k-means アルゴリズム中に 1 つのクラスターがすべてのメンバーを失う可能性があります。これは、アルゴリズムのどの段階でも発生する可能性があります。ただし、最も可能性の高い原因は、最初のクラスター重心が適切に選択されていないことです。その場合、アルゴリズムの初期段階で発生する可能性があります。

MATLAB のkmeansアルゴリズムには、EmptyActionこの場合に何をすべきかを指定するパラメーターがあります。(デフォルト)、(この場合、クラスターは削除され、対応する戻り値は NaN に設定されます) または(この場合、新しいクラスターはその重心から最も離れた単一のポイントとして作成されます) に設定EmptyActionできます。errordropsingleton

dropまたは のいずれかを選択singletonすると、アルゴリズムは完了に進むことができますが、最初の重心が適切に選択されていない可能性があることに注意する必要があります。その場合は、それに対処する必要があります。

kmeans のドキュメント

于 2013-05-13T12:43:55.163 に答える