データ圧縮とデータの分類において非常に重要なアルゴリズムと呼ばれるクラスタリングアルゴリズムがあります。
これは、特定の基準における最小距離のクラスタ点の集合を表します。
各クラスの平均値を削除するには、このカテゴリーの代表として考えることができます。
2つのベクトルの距離を測定するために、2つのノルムを取ります。
黄色フォント:分類インデックスセット;
青色フォント:中心ベクトルの各種類;
グリーンフォント:、最終的な結果を測定可能な限り小さく、それを作るために、
特定のアルゴリズムを示します:
- 初期中心ベクトル分類のセットを計算する初期分類セットは、Q値が初期状態で計算され、反復の数は、tが1です。
- 各サンプルベクトルについてA 私はそれが中央のベクトルm見つけた場合、その最寄りの中心ベクトルを見つけ、pは、これはAのベクトルサンプリングします私は Pに最初のカテゴリに入ると、
- Qの新しい値を計算します。
- 誤差のQ値Qを満たす公差余裕の古い値と新しい値の間のギャップを分析し、されていない場合、繰り返しは1〜4ステップ、そうでない場合、動作が終了されます。
注:K-マンアルゴリズムの結果は、グローバル最適ではないことを保証するために、より高速な収束を確保することができます。
function cla=kmeans(A,k)
%K-means聚类算法
%A为样本(m*n),将其列向量分为k类
%M为中心向量矩阵,k*m型
%初始化中心向量矩阵
M=A(:,1:k);
[m n]=size(A);
%初始化分类集
for i=1:k-1
cla{i}=[i];
M(:,i)=A(:,i);
end
cla{k}=[k:n];
M(:,k)=mean(A(:,k:n),2);
Q0=0;
for i=k:n
Q0=Q0+norm(A(:,i)-M(:,k),2)^2;
end
while true
Q=0;
for i=1:n
[min_value,min_cla]=min(sum((M-A(:,i)).^2));
%记录下ai属于第min_cla类,且距离值为min_value,用于后续计算Q
cla{min_cla}=[cla{min_cla},i] %把当前的样本ai记录入对应类
Q=Q+min_value;
end
if abs(Q-Q0)<0.01
return;
else
Q0=Q;
end
%计算新一轮的中心向量
for i=1:k
M(:,i)=zeros(m,1);
for v=cla{i}
M(:,i)=M(:,i)+A(:,v);
end
M(:,i)=M(:,i)/length(cla{i});
end
%置空k个分类指标集
for j=1:k
cla{j}=[];
end
end
サンプルマトリックスを考慮することは素晴らしいことなので、定義やサブルーチンを呼び出すためには使用されていないでしょう。非常に遅くなることがあります感じ。
:推奨試験マトリックスは、この下に示されている
。注:各列が点を表すことは明らかであるように、それを見ることができる:それは3つのカテゴリーに分類されている場合、それは最後の最適点として、図3に示すように、中間体3を事前になければならない4この方法は、当然のことながら、+ 4 = 3つの短い左右+中間体である、それは連続的なタイプに分けることができるべきです。
:上記の関数呼び出しの出力を見てみ
概要:分類はOKです。
さらにもう一度テスト、順序を破壊する:
ここで、行列AAはちょうど行列Aのビット列の列を入れ替えます。
結果:
行列Aの分類結果は、左から右にされる+ 3 +中間
行列AA +中間体4の+右側左の分類結果、説明の分類はかなり成功しました。
上記の前記位置は、以下の図の点の集合のためのものです。