[聚类算法] K-means 算法
聚类 和 k-means简单概括。
- 聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起。
k-means算法是聚类分析中使用最广泛的算法之一。它把n个对象根据它们的属性分为k个聚类,以便使得所获得的聚类满足:
同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。
k - means的算法原理:
(文/qinm08(简书作者) 原文链接:http://www.jianshu.com/p/32e895a940a2)

使用K-Means算法进行聚类,过程非常直观:
(a) 给定集合D,有n个样本点
(b) 随机指定两个点,作为两个子集的质心
(c) 根据样本点与两个质心的距离远近,将每个样本点划归最近质心所在的子集
(d) 对两个子集重新计算质心
(e) 根据新的质心,重复操作(c)
(f) 重复操作(d)和(e),直至结果足够收敛或者不再变化
Python demo:
from sklearn.cluster import KMeans model=KMeans(n_clusters=4,random_state=0)
X=[
[50.0,50.0,9.0]
,[28.0, 9.0,4.0]
,[17.0,15.0,3.0]
,[25.0,40.0,5.0]
,[28.0,40.0,2.0]
,[50.0,50.0,1.0]
,[50.0,40.0,9.0]
,[50.0,40.0,9.0]
,[40.0,40.0,5.0]
,[50.0,50.0,9.0]
,[50.0,50.0,5.0]
,[50.0,50.0,9.0]
,[40.0,40.0,9.0]
,[40.0,32.0,17.0]
,[50.0,50.0,9.0]
] model.fit(X) for a in X:
print(model.predict(a),a)
结果:
(array([1]), [50.0, 50.0, 9.0])
(array([2]), [28.0, 9.0, 4.0])
(array([2]), [17.0, 15.0, 3.0])
(array([3]), [25.0, 40.0, 5.0])
(array([3]), [28.0, 40.0, 2.0])
(array([1]), [50.0, 50.0, 1.0])
(array([0]), [50.0, 40.0, 9.0])
(array([0]), [50.0, 40.0, 9.0])
(array([0]), [40.0, 40.0, 5.0])
(array([1]), [50.0, 50.0, 9.0])
(array([1]), [50.0, 50.0, 5.0])
(array([1]), [50.0, 50.0, 9.0])
(array([0]), [40.0, 40.0, 9.0])
(array([0]), [40.0, 32.0, 17.0])
(array([1]), [50.0, 50.0, 9.0])
两个缺点:
1)初始聚类中心的个数需要事先给定,一般非常困难
2)初始聚类中心的选取很随机,可能导致非常不同的聚类效果
K-means++算法:
改进了2)初始聚类中心的选取
(a)从数据集中随机选择一个点,作为第一个中心C1
(b)计算所有点到离它最近的中心的距离D(x),然后在此中心根据概率原则选择距离“比较大”的点作为下一个中心点。
SUM(D(x))*random(0,1)>SUM(D(xi) && SUM(D(x))*random(0,1)<SUM(D(xi-1)
(c)重复操作(b)直到找到k个中心点
缺点:
k个中心点,互相依赖,即内在的有序性。
[聚类算法] K-means 算法的更多相关文章
- 第4章 最基础的分类算法-k近邻算法
思想极度简单 应用数学知识少 效果好(缺点?) 可以解释机器学习算法使用过程中的很多细节问题 更完整的刻画机器学习应用的流程 distances = [] for x_train in X_train ...
- 聚类算法:K-means 算法(k均值算法)
k-means算法: 第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号. 聚类中心的向量值可任意设 ...
- 分类算法----k近邻算法
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- 机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)
六.网格搜索与 K 邻近算法中更多的超参数 七.数据归一化 Feature Scaling 解决方案:将所有的数据映射到同一尺度 八.scikit-learn 中的 Scaler preprocess ...
- 机器学习(四) 分类算法--K近邻算法 KNN (上)
一.K近邻算法基础 KNN------- K近邻算法--------K-Nearest Neighbors 思想极度简单 应用数学知识少 (近乎为零) 效果好(缺点?) 可以解释机器学习算法使用过程中 ...
- python 机器学习(二)分类算法-k近邻算法
一.什么是K近邻算法? 定义: 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 来源: KNN算法最早是由Cover和Hart提 ...
- KNN 与 K - Means 算法比较
KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...
- 【机器学习】聚类算法——K均值算法(k-means)
一.聚类 1.基于划分的聚类:k-means.k-medoids(每个类别找一个样本来代表).Clarans 2.基于层次的聚类:(1)自底向上的凝聚方法,比如Agnes (2)自上而下的分裂方法,比 ...
- 分类算法——k最近邻算法(Python实现)(文末附工程源代码)
kNN算法原理 k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法.它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样 ...
- 【学习笔记】分类算法-k近邻算法
k-近邻算法采用测量不同特征值之间的距离来进行分类. 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 用例子来理解k-近邻算法 电影可以按 ...
随机推荐
- 利用substring()方法,把一个表的不同分级所对应的字段名取出来。
实例:现在有一个物料分类的表.知道表的第四级的值,要取前面的2,3级值. 例如,如图所示: 可以通过取前面几个字段的值,得到对应级别的值.利用substring(),但是因为要写在一句话里. 因此可以 ...
- sublime快捷键<转>
写在前面的话:平时做项目中在用eclipse和vs,但是对于一些小项目,感觉没有必要搞那么大的一个工具使用,比如写个小微商城,搞个小脚本了什么,所以就一直在用Sublime Text,界面清新简洁,没 ...
- 搜索引擎关键词劫持之.net篇
摘要:蛋疼写的,有需要的就拿去,注意要保存为Global.asax. 重要说明:为避免编码问题,请在劫持页面(data_url)指向页面加入meta标记来指明编码,如 meta content=tex ...
- [数据库]漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)
ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人 ...
- noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30
T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...
- 数据字典生成工具之旅(4):NPOI操作EXECL
这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...
- LiveSDK初始化/登录时失败的解决办法
环境描述 Windows 8.1+VS 2013 Update3+Live SDK 5.6 Metro风格的程序,集成LIVE认证 问题描述 如下图,提示Null Reference的异常. 解决办法 ...
- operating expense & captial expenditure
营运成本(营业成本, operating expense, OPEX) 指的是运行企业的持续性.消耗性的支出,与之对照的是资本支出(captial expenditure, CAPEX).例如:购买影 ...
- java list随机打乱
java list随机打乱package arrlist; import java.util.ArrayList; import java.util.Collections; import java. ...
- 清空KindEditor富文本编辑器里面的内容方法
//清空KindEditorKindEditor.instances[0].html(""); 0表示第一个KindEditor编辑器对象 详情见链接:http://www.new ...