一篇文章让你搞懂K-means!!!!

K-Means算法

思想

K-均值算法(聚类算法)

优点:易于实现
缺点:可能收敛于局部最小值,在大规模数据收敛慢

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

如果我们想直接求上式的最小值并不容易,这是一个NP难的问题,K-Means采用的启发式方式很简单

引申:启发式算法(heuristic algorithm)是相对于最优化算法提出的。一个问题的最优算法求得该问题每个实例的最优解。启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。启发式算法就是例如遗传算法,模拟退火,各种群算法,蚁群,鱼群,粒子群,人工神经网络等模仿自然界或生命体行为模式的算法,一般又称人工智能算法或全局优化算法。

要点

  1. 对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验经验选择一个合适的k值,如果没有什么先验知识,则可以通过交叉验证选择一个合适的k值。
  2. 在确定了k的个数后,我们需要选择k个初始化的质心,就像上图b中的随机质心。由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择合适的k个质心,最好这些质心不能太近。

输入是样本集 D = { x 1 , x 2 , . . . x m } D=\{x_1,x_2,...x_m\} D={x1,x2,...xm},聚类的簇树k,最大迭代次数N

输出是簇划分 C = { C 1 , C 2 , . . . C k } C=\{C_1,C_2,...C_k\} C={C1,C2,...Ck}

  1. 从数据集D中随机选择k个样本作为初始的k个质心向量: { μ 1 , μ 2 , . . . , μ k } \{μ_1,μ_2,...,μ_k\} {μ1,μ2,...,μk}

  2. 对于n=1,2,…,N

    a. 将簇划分C初始化为 C t = ∅ C_t = \empty Ct=, t = 1 , 2... k t = 1,2...k t=1,2...k

    b. 对于i=1,2…m,计算样本 x i x_i xi和各个质心向量 μ j ( j = 1 , 2 , . . . k ) μ_j(j=1,2,...k) μj(j=1,2,...k)的距离, d i j = ∣ ∣ x i − u j ∣ ∣ 2 2 d_{ij} = ||x_i-u_j||_2^2 dij=xiuj22 x i x_i xi标记最小的为 d i j d_{ij} dij所对应 的类别 λ i λ_i λi。此时更新 C λ i = C λ i ∪ x i C_{λi}=C_{λi}∪{x_i} Cλi=Cλixi

    c. 对于j=1,2,…,k,对 C j C_j Cj中所有的样本点重新计算新的质心
    μ j = 1 ∣ C j ∣ ∑ x ∈ C j x μ_j=\frac{1}{|C_j|}\sum_{x\in C_j}x μj=Cj1xCjx
    d. 如果所有的k个质心向量都没有发生变化,则转到步骤3

  3. 输出簇划分 C = C 1 , C 2 , . . . C k C={C1,C2,...Ck} C=C1,C2,...Ck

引申:2-范数: ∣ ∣ x ∣ ∣ 2 = ( ∑ ∣ x i ∣ 2 ) 1 2 ||x||_2= (\sum|x_i|^2)^{\frac{1}{2}} x2=(xi2)21,Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再开方,matlab调用函数norm(x, 2)

代码

众所周知,matlab是有kmeans方法的

这是原始数据

在这里插入图片描述

这是K-means跑过的数据

在这里插入图片描述

代码如下

load data1.txt;

rng default; % For reproducibility
X = [data1(:,1), data1(:,2)];

figure;
plot(X(:,1),X(:,2),'.');
title 'Randomly Generated Data';

opts = statset('Display','final');
[idx,C] = kmeans(X,2,'Distance','cityblock',...
    'Replicates',5,'Options',opts);

figure;
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2), 'b.','MarkerSize',12)
plot(C(:,1),C(:,2),'kx',...
     'MarkerSize',15,'LineWidth',3) 
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title 'Cluster Assignments and Centroids'
hold off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值