k-means不斷地取離種子點最近均值,將資料點到原型的某種距離作為優化的目標函式,利用函式求極值的方法得到迭代運算。
演算法流程:
(1)初始化選擇k個點作為k個聚類樣本中心
(2)迭代:計算每個樣本點到中心點的距離,根據距離判斷每個樣本點所屬類別;
各聚類根據屬於自己這一類的樣本點的均值更新聚類中心
(3)直到每個樣本點所屬類別不再變化
離群點問題:離群點將極大影響聚類中心的位置,通過尋找樣本數很少的聚類在一定程度上找到離群點
演算法後處理:對聚類進行進一步的**、合併或直接拆散或引進新的聚類中心等方法以達到更好的效果
**實現:對788個點聚成7個類(使用matlab)
(1)kmeans.m
clear; close all; clc;
load('788points.mat');
k = 7;
m = 788;
id = zeros(m, 1);
centroids = ...
[ x(50,1) x(70,2);
x(230,1) x(180,2);
x(360,1) x(280,2);
x(420,1) x(480,2);
x(570,1) x(400,2);
x(680,1) x(600,2);
x(750,1) x(700,2) ];
figure; hold on;
% 找到與當前聚類中心的距離最小的陣列序號
for i=1:5
id = findclosestcentroids(k,x, centroids);
centroids = updatecentroids(x, id, k);
endplotdata(x, centroids,id, k);
hold off;
(2)findclosestcentroids.m
function id = findclosestcentroids(k,x, centroids)
id = zeros(size(x,1), 1);
for i=1:size(x)
min = norm((x(i,:) - centroids(1,:)),2);
id(i) = 1;
for j=2:k
if norm((x(i,:) - centroids(j,:)),2) < min
min = norm((x(i,:) - centroids(j,:)),2);
id(i) = j; end
endendend
(3)updatecentroids.m
function centroids = updatecentroids(x, idx, k)
[m n] = size(x);
centroids = zeros(k, n);
num = zeros(k,1);
%求和for i=1:m
centroids(idx(i),:) = centroids(idx(i),:) + x(i,:);
num(idx(i)) = num(idx(i)) + 1;end
%求平均值
for j=1:k
centroids(j,:) = centroids(j,:) / num(j); end
end
(4)plotdata.m
function plotdata(x, centroids, idx, k)
% 畫資料點
palette = hsv(k + 1);
colors = palette(idx, :);
scatter(x(:,1), x(:,2), 15, colors);
% 標出聚類中心
plot(centroids(:,1), centroids(:,2), 'x', ...
'markeredgecolor','k', ...
'markersize', 10, 'linewidth', 3);
end
最終聚類結果:
資料探勘1 K means均值聚類演算法
一.k means均值聚類演算法原理 對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為k個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。如果用資料表示式表示,假設簇劃分為 c1,c2,ck 則我們的目標是最小化平方誤差e 其中 i是簇ci的均值向量,有時也稱為質心,表示式為 二....
Python機器學習 1 KMeans聚類
python進行kmeans聚類是比較簡單的,首先需要import numpy,從sklearn.cluster中import kmeans模組 import numpy as np from sklearn.cluster import kmeans 然後讀取txt檔案,獲取相應的資料並轉換成nu...
機器學習中的聚類演算法(1) k means演算法
一文詳解雷射點雲的物體聚類 q 什麼是聚類演算法?現在我們在做的深度學習當中,比如影象的識別和分類等等,這樣的一般是有監督的學習。但是在現實當中有很多的資料他都是沒有標籤的,所以我們需要進行一種無監督或者非監督的學習。因此,聚類演算法是一種很好的解決方案。q 聚類演算法分為哪些類?1.1核心思想 在...