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. Servlet&jsp基础:第二部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. 随机步法A-Z

    程序是生成一个10X10的字符数组,初始化时全为 ‘.’  的随机步法.程序必须随机的从一个元素 ‘走到’ 另一个元素,每次只向上.向下.向左或向右移动一个元素位置.已访问过的元素按访问顺序用字母A到 ...

  3. 一种json生成html的思路

    输入: [{ tag:"ul", attribute:{ class:"father6" }, property:{ className:"fathe ...

  4. 记CVTE2014年春季招聘实习生求职历程

    进度:目前已经过了网测 明天一面,好紧张,人生第一次实习面试.据说只有一分钟. 网测; 首先在http://exam.cvte.com/ 注册了账号,然后填写相关的个人信息,这里要仔细填写,因为它最后 ...

  5. [转载] 每周推荐阅读 BFQ:实现IO的隔离共享与高吞吐访问

    磁盘IO和网络IO隔离与共享是混部应用中基本需求,从早些年的BVC到现在的Matrix,以及Galaxy,或者未来的BS/Mint混部都遇到类似的问题:由于无法有效实现IO级的隔离(包括吞吐隔离.延时 ...

  6. hdu 2063 过山车(二分图最佳匹配)

    经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...

  7. 项目开发中遇到的extjs常见问题

    事件触发机制 l 给某一个控件添加事件. obj.addEvents( {search : true }); l 给某一个事件添加处理函数 n 给一个对象或变量添加监听及对应得处理,可以在创建时,通过 ...

  8. el 和 fmt 常用

    EL表达式入门 转自 http://blog.chinaunix.net/uid-9789791-id-1997374.html 隐含对象: pageContext: pageContext对象 pa ...

  9. aspcms标签使用经验

    1.调用导航栏标签写法,sort是网站后台栏目管理的编号{aspcms:type sort=19} <a href="[type:link]" title="[ty ...

  10. android 内存泄露之jni local reference table overflow (max=512)

    在android项目中要实现一个需求 为了性能的要求只能用c代码来实现功能. 这样就牺牲了java跨平台性. 通过加载.so的方式,把用c实现的模块集成到app中. android提供jni层,作为一 ...