听说这样玩聚类会更骚

编程入门 行业动态 更新时间:2024-10-26 12:22:51

听说这样玩聚类会更骚

听说这样玩聚类会更骚

概念介绍

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。(来源百度百科)

算法刨析

(1) 两个输入,一个是 K , K K,K K,K 表示你想从数据中聚类出簇的个数,第二个数需要聚类的原始数据集 x i x_i xi​。让我们需要做的是随机初始化K个聚类中心,记作
μ 1 , μ 2 , ⋯ , μ k \mu_1,\mu_2,\cdots,\mu_k μ1​,μ2​,⋯,μk​
下图 K = 2 K=2 K=2

粉红色的叉号代表随机生成的第一个聚类中心,红色的叉号代表随机生成的第二个聚类中心。
(2) 然后我们把原始样本依据离哪一个聚类中心近的原则,分成K簇。计算距离公式为
d = m i n ∣ ∣ x i − μ k ∣ ∣ d=min||x_i-\mu _k|| d=min∣∣xi​−μk​∣∣

(3) 利用第二步分好的聚类数据,重新计算聚类中心,聚类中心为第二步分好的聚类数据的平均值。
(4) 迭代,达到目标效果。

具体描述

输入:样本集 D = { x 1 , x 2 , ⋯ , x n } D=\lbrace x_1,x_2,\cdots,x_n\rbrace D={x1​,x2​,⋯,xn​}:
聚类簇数 k k k
过程:

  1. 从D中随机选择K个样本作为初始均值向量{ μ 1 , μ 2 , ⋯ , μ k \mu_1,\mu_2,\cdots,\mu_k μ1​,μ2​,⋯,μk​}
  2. repeat
  3. 令 C i = ∅ ( 1 ≤ i ≤ k ) C_i=\emptyset(1\leq i\leq k) Ci​=∅(1≤i≤k)
  4. for j = 1 , 2 , ⋯ , n j=1,2,\cdots,n j=1,2,⋯,n d o do do
    计算样本 x j x_j xj​ 与各均值向量 μ i \mu_i μi​ 的距离: d j i = ∣ ∣ x j − μ i ∣ ∣ d_{ji}=||x_j-\mu_i|| dji​=∣∣xj​−μi​∣∣;
    根据距离最近的均值向量确定 x j x_j xj​的簇标记: λ \lambda %_j=argmin_{i\in\lbrace x_1,x_2,\cdots,x_k\rbrace}d_{ji} λ;
    将样本 x j x_j xj​划入相应的簇; C λ j = C λ j ∪ { x j } C_{\lambda _j}=C_{\lambda _j}\cup\lbrace x_j\rbrace Cλj​​=Cλj​​∪{xj​}
  5. end for
  6. for i = 1 , 2 , ⋯ , k i=1,2,\cdots,k i=1,2,⋯,k d o do do
    计算新均值向量: μ n e w i \mu_{new}^i μnewi​
  7. if μ n e w i ≠ μ i \mu_{new}^i \neq\mu_i μnewi​​=μi​ then
    将当前均值向量 μ i \mu_i μi​ 更新为 μ n e w i \mu_{new}^i μnewi​
  8. else
    保持当前均值向量不变
  9. end if
  10. end for
  11. until 知道当前均值向量均未更新
  12. 输出 :簇划分 C i = { C 1 , C 2 , ⋯ , C k } C_i=\lbrace C_1,C_2,\cdots,C_k\rbrace Ci​={C1​,C2​,⋯,Ck​}

实际例子

首先,利用PCA (主成分分析)对数据进行降维,选择主要的特征数据。
具体参照
机器学习(2)——PCA(principal components analysis 主成分分析)降维
机器学习(3)——PCA(续):The use of machine learning Toolbox function PCA

进行完主成分分析后,发现第一,第二主成分占总体的98.7%,因此,选择主成分分析后第一,第二主成分的数据作为聚类函数的原始输入数据。即下列函数中的X

[idx,C] = kmeans(X,k,Name,Value)
参数解释

X 为输入的 n × p n\times p n×p数据矩阵,idx是将的观察结果划分为k个簇,并返回包含每个观察结果的簇索引的 n × 1 n\times 1 n×1向量(idx)。C为分类的中心,如果输入数据X为 n × p n\times p n×p,加入需要分成k类,则C的大小为 k × p k\times p k×p
k 是需要分类的簇, 让name 等" Replicates ",则Value为需要迭代的次数,我在这里取5

完整代码
load fisheriris  
[coeff,score,latent,~,explained]=pca(meas);%首先进行主成分分析
ax1=subplot(1,2,1);
scatter(score(:,1),score(:,2));%参数score为主成分分析后新坐标中的数据
title ('principal component anaysis Data')
xlabel('1st Principal Component')
ylabel('2nd Principal Component')
[clusters,C]=kmeans(score(:,1:2),3,'Replicates',5);%K means聚类
ax2=subplot(1,2,2);
gscatter(score(:,1),score(:,2),clusters,'rgb');%gscatter全程group scatter,
%用于按分类或按分组来画离散点,适用于画多个类别的离散样本分布图
title('k-means Data')
hold on
plot(C(:,1),C(:,2),'kx','MarkerSize',15,'LineWidth',3) 
效果展示

总结

machine learning 分为监督学习和非监督学习,监督学习分为分类问题和回归问题,非监督学习主要指 聚类问题 ,一个数据库或者数据仓库可能会包含很多维或很多属性。许多聚类算法擅长于处理低维数据,涉及二维或三位,因此,在这里我们把原始数据通过PCA(主成分分析)降维,选取最重要的两个主成分,从而对数据进行二维上的聚类分析。
k means(均值聚类算法)是一种迭代求解的聚类分析,由于它简洁和高效,使它成为聚类算法中最被广泛使用的。

如果还有问题,或需要探讨,请留言或联系本人。 Q Q : 2214564003 QQ:2214564003 QQ:2214564003
欢迎关注本人微信公众号:

更多推荐

听说这样玩聚类会更骚

本文发布于:2024-03-23 21:11:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742857.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:玩聚类会更骚

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!