K-means算法简介
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算法简介的更多相关文章
- 李航统计学习方法(第二版)(五):k 近邻算法简介
		
1 简介 k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类.k近邻法假设给定一个训练数据集,其中的实例类别已定.分类时,对新的实例,根据其k个最近邻的训练实例的类别,通 ...
 - KNN 与 K - Means 算法比较
		
KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...
 - K-means算法
		
K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢? ...
 - 排列熵算法简介及c#实现
		
一. 排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...
 - 机器学习——KNN算法(k近邻算法)
		
一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...
 - 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)
		
K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...
 - <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
		
转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...
 - 《算法图解》——第十章 K最近邻算法
		
第十章 K最近邻算法 1 K最近邻(k-nearest neighbours,KNN)——水果分类 2 创建推荐系统 利用相似的用户相距较近,但如何确定两位用户的相似程度呢? ①特征抽取 对水果 ...
 - PageRank 算法简介
		
有两篇文章一篇讲解(下面copy)< PageRank算法简介及Map-Reduce实现>来源:http://www.cnblogs.com/fengfenggirl/p/pagerank ...
 - 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
		
转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...
 
随机推荐
- oracle中触发器的讲解
			
触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数. ...
 - cakephp 复杂查询
			
$now = time(); $this->CardTypeInfos->recursive = -1; $conditions = [ 'seller_id'=>SELLER_ID ...
 - 安卓常用  widget
			
验证码 public class SpinnerImg extends ImageView { /** * 完成选择后启动另外一个spinner */ private ItemListener ite ...
 - java复用类
			
java复用类英文名叫reusing classes ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承: 1.组合: has-a 的关系 (自我理解:组合就是我们 ...
 - AppCompatActivity工具栏的设置(返回操作)
			
<android.support.v7.widget.Toolbar android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionB ...
 - lucene-SpanNotQuery和SpanOrQuery交迭与全局跨度
			
1.在匹配结果中排除相互交迭的跨度 SpanNotQuery构造函数的第一个参数表示要包含的跨度对象,第二个参数表示要排除的跨度对象. 1) SpanNearQuery quick_fox=new S ...
 - Oracle Sql优化之lead,lag分析函数
			
1.表中有四个字段:人员编号,开始时间,结束时间,类型,数据ID,需要实现如下需求 a.当类型为-1时,丢弃该记录 b.当类型为-1时,且前一行结束时间为null,当前行的开始时间-1作为前一行的结束 ...
 - ZOJ 2872 Binary Partitions
			
先写一个完全背包,然后找规律,然后打表. #include<cstdio> #include<cstring> #include<cmath> #include&l ...
 - mysql笔记4之数据操作
			
1修改数据 插入:insert into stu(id,name,age,addr) values(2,"李四",44,"重庆"); 2修改某一列 updata ...
 - hdu_3549_Flow Problem(最大流)
			
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 题意:求1到n的最大流 题解:模版题,直接上Claris的ISAP,效率是一般dfs的十倍,OR ...