k-means算法:

     第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号.

聚类中心的向量值可任意设定,例如可选开始的$K$个模式样本的向量值作为初始聚类中心。

     第二步:逐个将需分类的模式样本$\{x\}$按最小距离准则分配给$K$个聚类中心中的某一个$z_j(1)$。假设$i=j$时,

\[
D_j (k) = \min \{ \left\| {x - z_i (k)} \right\|,i = 1,2, \cdots K\}
\]

则$x\in S_j(k)$,其中$k$为迭代运算的次序号,第一次迭代$k=1$,$S_j$表示第$j$个聚类,其聚类中心为$z_j$。

第三步:计算各个聚类中心的新的向量值,$z_j(k+1),j=1,2,\cdots,K$,求各聚类域中所包含样本的均值向量:

\[
\begin{array}{*{20}c}
{z_j (k + 1) = \frac{1}{{N_j }}\sum\limits_{x \in S_j (k)} x ,} & {j = 1,2, \cdots ,K} \\
\end{array},
\]

其中$N_j$为第$j$个聚类域$S_j$中所包含的样本个数。以均值向量作为新的聚类中心,可使如下聚类准则函数最小:

\[
\begin{array}{*{20}c}
{J_j = \sum\limits_{x \in S_j (k)} {\left\| {x - z_j (k + 1)} \right\|^2 } ,} & {j = 1,2, \cdots ,K} \\
\end{array}
\]

在这一步中要分别计算$K$个聚类中的样本均值向量,所以称之为$K$-均值算法。

第四步:若$z_j(k+1)\neq z_j(k),j=1,2,\cdots,K$,则返回第二步,将模式样本逐个重新分类,重复迭代运算; 若$z_j(k+1)=z_j(k),j=1,2,\cdots,k$,则算法收敛,计算结束。

K-均值分类算法实例

第一步:取$K=2$,并选

$z_1(1)=x_1=(0 0)^T, z_2(1)=x_2=(1 0)^T$

第二步:因$||x_1-z_1(1)||<||x_1-z_2(1)||$,故$x_1\in S_1(1)$

因$||x_2-z_1(1)||>||x_2-z_2(1)||$,故$x_2\in S_2(1)$

因$||x_3-z_1(1)||<||x_3-z_2(1)||$,故$x_3\in S_1(1)$

……

得到:

S1(1)={x1, x3}, S2(1)={x2, x4, x5, …, x20}

第三步:计算新的聚类中心

第四步:因$z_j(2)\neq z_j(1),j=1,2$,返回第二步;

第二步(返回1):由新的聚类中心,得到:

因此

$S_1(2)=\{x_1, x_2,\cdots, x_8\}$

$S_2(2)=\{x_9, x_{10}, \cdots, x_{20}\}$

第三步(返回1):计算聚类中心

第四步(返回1):因$z_j(3)\neq z_j(2),j=1,2$,返回第二步;

第二步(返回2):分类结果与前一次迭代的结果相同,即$S_1(4)=S_1(3),S_2(4)= S_2(3)$;

第三步(返回2):聚类中心与前一次迭代的结果相同;

第四步(返回2):因$z_j(4)=z_j(3),j=1,2$,算法收敛,得到最终的聚类中心。

,

聚类算法:K-means 算法(k均值算法)的更多相关文章

  1. 聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用

    1.用python实现K均值算法 import numpy as np x = np.random.randint(1,100,20)#产生的20个一到一百的随机整数 y = np.zeros(20) ...

  2. 机器学习之K均值算法(K-means)聚类

    K均值算法(K-means)聚类 [关键词]K个种子,均值 一.K-means算法原理 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中. K-Means算法是一种聚类分析 ...

  3. 聚类--K均值算法

    import numpy as np from sklearn.datasets import load_iris iris = load_iris() x = iris.data[:,1] y = ...

  4. 第八次作业:聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用

    import numpy as np x = np.random.randint(1,100,[20,1]) y = np.zeros(20) k = 3 def initcenter(x,k): r ...

  5. 一句话总结K均值算法

    一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...

  6. 【机器学习】K均值算法(II)

    k聚类算法中如何选择初始化聚类中心所在的位置. 在选择聚类中心时候,如果选择初始化位置不合适,可能不能得出我们想要的局部最优解. 而是会出现一下情况: 为了解决这个问题,我们通常的做法是: 我们选取K ...

  7. 【机器学习】K均值算法(I)

    K均值算法是一类非监督学习类,其可以通过观察样本的离散性来对样本进行分类. 例如,在对如下图所示的样本中进行聚类,则执行如下步骤 1:随机选取3个点作为聚类中心. 2:簇分配:遍历所有样本然后依据每个 ...

  8. Bisecting KMeans (二分K均值)算法讲解及实现

    算法原理 由于传统的KMeans算法的聚类结果易受到初始聚类中心点选择的影响,因此在传统的KMeans算法的基础上进行算法改进,对初始中心点选取比较严格,各中心点的距离较远,这就避免了初始聚类中心会选 ...

  9. KMeans (K均值)算法讲解及实现

    算法原理 KMeans算法是典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标 ...

随机推荐

  1. JAVA排序--[快速排序]

    package com.array; public class Sort_Quick { /* * 项目名称:快速排序 ; * 项目要求:用JAVA对数组进行排序,并运用快速排序算法; * 作者:Se ...

  2. Java 日期往后推迟n天

    在Java中经常会遇到,以指定的日期为基准,计算向后n天<n可以为正.负数,负数为向前移>. 这时需要在Date类的基础上使用Calendar类,处理方法基本如下: import java ...

  3. U盘安装XP_sp3

    1. 用的是老毛桃的 U盘制作工具(百度云OsSkill --> 全部文件 --> 软件安装包 --> 老毛桃 --> Install_LMT_v9_2__Win_x86.ex ...

  4. linux查看文件夹大小

    du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)/文件的大小,并按文件大小排序 ------------------------------------- ...

  5. 用命令访问D:\python学习\wendjia教程\aa.py

    用命令访问D:\python学习\wendjia教程\aa.py d:                                -----------切换到D盘 cd python学习\wend ...

  6. Java用通配符 获得泛型的协变和逆变

    Java对应泛型的协变和逆变

  7. Android网络编程系列 一 TCP/IP协议族之网际层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网 ...

  8. hibernate Criteria查询多对多(Set集合)条件筛选

    PO public class UserPO implements java.io.Serializable { /** 用户唯一标识ID */ private String id; /** 状态(在 ...

  9. double精度问题,数据范围

    浮点数在计算机中存储方式  http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 1. double:  1bit(符号位) ...

  10. Django缓存优化之redis

    Redis 概述 Redis 是一个开源的Inmemory key-value 存储系统,性能高,很大程度上补偿了 memcached 的不足.支持多种存储类型,包括 string, list, se ...