K-means 算法是无监督的 聚类算法,算法简单,有效。

K-means算法:

输入参数:

  指定聚类数目 k,训练集 X

输出 :

  k 个聚类

算法描述:

  K-means 算法 是一个 迭代算法,每次迭代分成两个步骤:

    1)指定聚类步骤:

      计算每个样本到 k 个 聚类中心的 距离,将样本归类到 距离 聚类中心 最小的那个类别

    2)移动聚类中心步骤:

      根据每个聚类所拥有的样本点,重新计算每个聚类的中心

伪代码描述:

  随机初始化 k 个聚类的 中心 u(1), u(2)... u(k)

  repeat {

    for i = 1 to m # 假设有m 个样本

      c(i) = 聚类中心 离 X(i) 最近的那个聚类的下标索引 #(1,2... k)

    for i = 1 to k # k 个类别

      u(i) =  属于 i 聚类所有 点的 平均值,即 中心  

  }

  注意:停止条件可以自己设定,比如 归类不再发生变化,或者最多 N次迭代 等

K-means算法 = 优化问题:

  K-means的优化目标:

    J(c(1), c(2)...c(m), u(1), u(2)...u(k)) = 1/2 * sum( ||x(i) - uc(i) || ^2)

    min J

  对应到算法:

    1)指定聚类步骤时,保持聚类中心不变,通过改变每个样本所属聚类来最小化 J;

    2)移动聚类中心步骤时,通过移动调整聚类中心 来 最小化 J。

    

K-means算法存在问题:

  往往K-means算法的解空间存在多个满足 J 局部最小值,因此K-means算法得到的解,很有可能只是满足 J 局部最小的那个解,而不是全局最小的那个解。

一种避免方案:

  运行 K-means 算法 n 次,比如 n = 100 次,每次 都是 随机初始化 k 个 聚类中心, 然后迭代最后收敛得到 k 个 聚类。

  最后,依此计算 这 n 次 J 值,选择 J 值 最小那次 得到的 k 个 聚类

如何选择 k?:

  计算 J 随着 k 数目变化 而 如何变化,k = 1, 2 ..

  如果选择的 k 是 发生比较明显转折的那个点,就叫做 elbow method

K-means算法简介的更多相关文章

  1. 李航统计学习方法(第二版)(五):k 近邻算法简介

    1 简介 k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类.k近邻法假设给定一个训练数据集,其中的实例类别已定.分类时,对新的实例,根据其k个最近邻的训练实例的类别,通 ...

  2. KNN 与 K - Means 算法比较

    KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...

  3. K-means算法

    K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢?  ...

  4. 排列熵算法简介及c#实现

    一.   排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...

  5. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  6. 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)

    K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...

  7. <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...

  8. 《算法图解》——第十章 K最近邻算法

    第十章    K最近邻算法 1 K最近邻(k-nearest neighbours,KNN)——水果分类 2 创建推荐系统 利用相似的用户相距较近,但如何确定两位用户的相似程度呢? ①特征抽取 对水果 ...

  9. PageRank 算法简介

    有两篇文章一篇讲解(下面copy)< PageRank算法简介及Map-Reduce实现>来源:http://www.cnblogs.com/fengfenggirl/p/pagerank ...

  10. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...

随机推荐

  1. iOS字符串转化成CGFloat

    NSString *str = @"abc"; [str floatValue];

  2. C语言根据函数名调用对应的函数

    通过函数指针定义,调用时加上参数 struct Command { const char *name; const char *desc; // return -1 to force monitor ...

  3. keepalived: Compile & startup

    first get keepalived source from git: git clone https://github.com/acassen/keepalived then unzip and ...

  4. vim的vimrc设置

    map <F9> :call SaveInputData()<CR> func! SaveInputData() exec "tabnew" exec 'n ...

  5. startActivityForResult与onActivityResult

    androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCo ...

  6. MyEclipse8.5优化经验

    第一步: 取消自动validation    validation有一堆,什么xml.jsp.jsf.js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下!    取消方法:   ...

  7. url拼凑示例(具体拼凑规则由服务器定)

    请求一页的所有数据: // http://127.0.0.1:8090/home?index=0&name=zhangsan&age=20 String url = HttpHelpe ...

  8. JavaBean-- 保存 范围

    1. page:当前页 2. request:一次服务器跳转范围中 3. session:一次用户操作范围,重新打开浏览器失效 4. application:整个服务器保存,服务器关闭才失效 定义一个 ...

  9. C++零食:使用Unicode版的预定义宏__FUNCTION__

    在C++中支持一种预定义宏.比如: __FILE__: 就是当前源代码文件名 __LINE__: 就是当前源代码的行号 这些宏可以在printf等语句中直接作为字符串使用,调试的时候很方便. 如下代码 ...

  10. HTTP 中 POST和GET的区别

    1.传送数据的方式不一样 get是将数据队列添加到URL中提交,用户可以看到(对URL反编码就行) post是将数据队列放到HTTP的报文的报头中提交,用户看不到所提交的数据: 2.服务器端获取变量的 ...