k
均值演算法能夠使聚類域中所有樣品到聚類中心距離平方和最小。其原理為:先取
k個初始聚類中心,計算每個樣品到這
k個中心的距離,找出最小距離,把樣品歸入最近的聚類中心,修改中心點的值為本類所有樣品的均值,再計算各個樣品到新的聚類中心的距離,重新歸類,修改新的中心點,直到新的聚類中心和上一次聚類中心差距很小時結束。此演算法結果受到聚類中心的個數和聚類中心初次選擇影響,也受到樣品的幾個性質及排列次序的影響。如果樣品的幾何性質表明它們能形成幾塊孤立的區域,則演算法一般可以收斂。
①產生二維高斯資料,設定聚類中心數n
②隨機取n個點作為聚類中心。
③計算其餘樣品到這n個聚類中心的距離,將他們歸到最近的類,到所有的樣品都歸完類。
④計算各個類樣品的平均值作為該類新的聚類中心,再計算所有樣品到新的聚類中心的距離,把他們歸到最近的類,如此反覆,直到聚類中心不再變化為止。
1.3kmeans
演算法程式設計實現
clear all;close all;clc;
% 第一組資料
mu1=[0 0 ]; %均值
s1=[.1 0 ;0 .1]; %協方差
data1=mvnrnd(mu1,s1,100); %產生高斯分布資料
%第二組資料
mu2=[1.25 1.25 ];
s2=[.1 0 ;0 .1];
data2=mvnrnd(mu2,s2,100);
% 第三組資料
mu3=[-1.25 1.25 ];
s3=[.1 0 ;0 .1];
data3=mvnrnd(mu3,s3,100);
% 顯示資料
plot(data1(:,1),data1(:,2),'b+');
hold on;
plot(data2(:,1),data2(:,2),'r+');
plot(data3(:,1),data3(:,2),'g+');
grid on;
% 三類資料合成乙個不帶標號的資料類
data=[data1;data2;data3];
n=3;%設定聚類數目
[m,n]=size(data);
pattern=zeros(m,n+1);
center=zeros(n,n);%初始化聚類中心
pattern(:,1:n)=data(:,:);
for x=1:n
center(x,:)=data( randi(300,1),:);%第一次隨機產生聚類中心
endwhile 1
distence=zeros(1,n);
num=zeros(1,n);
new_center=zeros(n,n);
for x=1:m
for y=1:n
distence(y)=norm(data(x,:)-center(y,:));%計算到每個類的距離
end[~, temp]=min(distence);%求最小的距離
pattern(x,n+1)=temp;
endk=0;
for y=1:n
for x=1:m
if pattern(x,n+1)==y
new_center(y,:)=new_center(y,:)+pattern(x,1:n);
num(y)=num(y)+1;
endend
new_center(y,:)=new_center(y,:)/num(y);
if norm(new_center(y,:)-center(y,:))<0.1
k=k+1;
endendif k==n
break;
else
center=new_center;
endend
[m, n]=size(pattern);
%最後顯示聚類後的資料
高斯數對
可以看到聚類數目
n對聚類有一定影響,同時在
n相同的情況下每次的聚類結果也不完全一樣,說明初始的聚類中心對聚類結果也有一定影響。
kmeans演算法思想及其python實現
第十章 利用k 均值聚類演算法對未標註的資料進行分組 聚類演算法可以看做是一種無監督的分類方法,之所以這麼說的原因是它和分類方法的結果相同,區別它的類別沒有預先的定義。簇識別是聚類演算法中經常使用的乙個概念,使用這個概念是為了對聚類的結果進行定義。聚類演算法幾乎可以用於所有的物件,並且簇內的物件越相...
常用排序演算法及其實現
1.插入排序 遍歷陣列 n 將每個元素插入到前面子串行的合適位置 插入時採取前面的部分元素後移,再將本元素填在適當位置的方法 模擬 12 30 9 100 1 3 10 12 30 9 100 1 3 10 9 12 30 100 1 3 10 9 12 30 100 1 3 10 1 9 12 3...
常用排序演算法及其實現
1.插入排序 遍歷陣列 n 將每個元素插入到前面子串行的合適位置 插入時採取前面的部分元素後移,再將本元素填在適當位置的方法 模擬 12 30 9 100 1 3 10 12 30 9 100 1 3 10 9 12 30 100 1 3 10 9 12 30 100 1 3 10 1 9 12 3...