聚類演算法(1) K Means

2021-07-11 22:17:34 字數 2185 閱讀 3922

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核心思想 在...