【十大经典数据挖掘算法】k-means

【十大经典数据挖掘算法】系列

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. PageRank
  7. AdaBoost
  8. kNN
  9. Naïve Bayes
  10. CART

1. 引言

k-means与kNN虽然都是以k打头,但却是两类算法——kNN为监督学习中的分类算法,而k-means则是非监督学习中的聚类算法;二者相同之处:均利用近邻信息来标注类别。

聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”嘛。k-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛。

2. 基本算法

在k-means算法中,用质心来表示cluster;且容易证明k-means算法收敛等同于所有质心不再发生变化。基本的k-means算法流程如下:

选取k个初始质心(作为初始cluster);
repeat:对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster;重新计算k个cluser对应的质心;
until 质心不再发生变化

对于欧式空间的样本数据,以平方误差和(sum of the squared error, SSE)作为聚类的目标函数,同时也可以衡量不同聚类结果好坏的指标:

\[ SSE=\sum\limits_{i=1}^{k} \sum_{x\in C_{i}} dist(x, c_i) \]

表示样本点\(x\)到cluster \(C_i\) 的质心 \(c_i\) 距离平方和;最优的聚类结果应使得SSE达到最小值。

下图中给出了一个通过4次迭代聚类3个cluster的例子:
399159-20160131182028552-1529699913.png

k-means存在缺点:

  • k-means是局部最优的,容易受到初始质心的影响;比如在下图中,因选择初始质心不恰当而造成次优的聚类结果(SSE较大):
    399159-20160131182054989-2070474005.png

  • 同时,k值的选取也会直接影响聚类结果,最优聚类的k值应与样本数据本身的结构信息相吻合,而这种结构信息是很难去掌握,因此选取最优k值是非常困难的。

3. 优化

为了解决上述存在缺点,在基本k-means的基础上发展而来二分 (bisecting) k-means,其主要思想:一个大cluster进行分裂后可以得到两个小的cluster;为了得到k个cluster,可进行k-1次分裂。算法流程如下:

初始只有一个cluster包含所有样本点;
repeat:从待分裂的clusters中选择一个进行二元分裂,所选的cluster应使得SSE最小;
until 有k个cluster

上述算法流程中,为从待分裂的clusters中求得局部最优解,可以采取暴力方法:依次对每个待分裂的cluster进行二元分裂(bisect)以求得最优分裂。二分k-means算法聚类过程如图:
399159-20160131182107739-398824999.png

从图中,我们观察到:二分k-means算法对初始质心的选择不太敏感,因为初始时只选择一个质心。

4. 参考资料

[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.
[2] Xindong Wu, Vipin Kumar, The Top Ten Algorithms in Data Mining.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php strstr 效率,PHP中的stristr(),strstr(),strpos()速度比较

测速代码:function getmicrotime(){list($usec, $sec) explode(" ",microtime());return ((float)$usec (float)$sec);}$time_start getmicrotime();$string"xxxddxx";$find"d";for ($i0;$i<300000;$i){if (stristr($string,$find))//if (…

ajax获取数据用弹窗显示_Vue之 点击返回弹出推荐商品弹窗

阅读本文约需要5分钟大家好&#xff0c;我是你们的导师&#xff0c;我每天都会在这里给大家分享一些干货内容(当然了&#xff0c;周末也要允许老师休息一下哈)。上次老师跟大家分享了VUE 之 v-on指令的知识&#xff0c;今天跟大家分享下Vue之 点击返回弹出推荐商品弹窗的知识。…

Navicat 编辑器自动完成代码功能讲解

2019独角兽企业重金招聘Python工程师标准>>> Navicat 提供广泛的编辑器高级功能&#xff0c;例如&#xff1a;编辑代码功能、智能自动完成代码、设置 SQL 格式及更多。本教程将介绍关于自动完成代码的操作。 Navicat下载地址&#xff1a;http://www.formysql.com/xi…

win2008的搜索功能就是个鸡肋

搜索文件名做得还好&#xff0c;搜索文本关键字连98都不如。 还有远程功能&#xff0c;一个终端登陆了&#xff0c;本地马上就注销了&#xff0c;还比不上WIN03转载于:https://www.cnblogs.com/LCX/archive/2010/04/19/1715698.html

DNN Experience

DNN Experience DNN编译导致异常。在做模块开发时&#xff0c;引用DNN原始Dll文件时&#xff0c;设置为不覆盖原有文件。不然容易导错误异常。 在开发DNN Schedule 或其他扩展功能时。因为此时不在站点的页面文件下&#xff0c;不能直接引用DNN命名空间下的很多全局变量。会造成…

oracle 导入excel时间格式,将.xls或者.excel格式的数据导入到Oracle中

本文档来自:[url]http://hi.baidu.com/wangbin_529/blog/item/6191d74b06b83c2b09f7efbd.html[/url]1、将xls格式另存为cvs(逗号隔开)。例如&#xff1a;左边为xls的表格;右边为转换成csv的文档,保存csv文档到E盘。[img]http://hiphotos.baidu.com/smile_%B1%B4/pic/item/a536c…

com 组件调用不起来_AwesomeGithub组件化探索之旅

阅读前请点击右上角“关注”&#xff0c;每天免费获取Android知识解析及面试解答。Android架构解析&#xff0c;只做职场干货&#xff0c;完全免费分享&#xff01;之前一直听说过组件化开发&#xff0c;而且面试也有这方面的提问&#xff0c;但都未曾有涉及具体的项目。所以就…

将团队迁移到可视化项目管理软件

自2000年代中期&#xff0c;“Scrum”项目管理&#xff08;PM&#xff09;一直统治着软件开发方法。它的迭代结构、频繁会议和清晰的层次结构使其成为受频繁变化的客户需求和条件管制的行业的明显选择。因此&#xff0c;大多数团队习惯基于 Scrum项目管理应用管理开发过程。 \\…

一步一步学Silverlight 2系列(3):界面布局_转载

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

网址

Html5 &#xff1a; http://fff.cmiscm.com/#!/main 20个案例让你了解用HTML5可以做出什么作品转载于:https://www.cnblogs.com/wangdyy/archive/2013/01/21/2869545.html

Spring学习11-Spring管理各种数据源

Spring 完全可以不依赖容器,自己管理数据源,但是却依赖第三方的开源的数据源管理框架. Spring在第三方依赖包中包含了两个数据源的实现类包&#xff0c;其一是Apache的DBCP&#xff0c;其二是 C3P0。可以在Spring配置文件中利用这两者中任何一个配置数据源。 1、DBCP数据源…

b树与b+树的区别_一文详解 B-树,B+树,B*树

B-树B-树是一种多路搜索树&#xff08;并不一定是二叉的&#xff09;1970年&#xff0c;R.Bayer和E.mccreight提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为B树&#xff08;或B-树、B_树&#xff09;。一棵m阶B树(balanced tree of order m)是一…

提交按钮禁用的办法

1.html: οnclick"this.value正在打印&#xff0c;请稍候;this.disabled true;" <input id"Button2" type"button" value"打印测试" οnclick"this.disabled true;" /> 效果如下&#xff1a; 2.如果是ASP.NET的服务…

share-Nothing原理

Share nothing理论在数据库设计和优化中的实践应用 首先介绍share nothing概念。最早接触它是在 DataBaseManagentSystem一书的并行数据库章节中。 并行数据库要求尽可能的去并行执行数据库操作&#xff0c;从而提高性能。在并行计算体系结构实现中有很多可选的体系结构。包括&…

linux查看逻辑卷命令,Linux命令--逻辑卷管理

往卷组中添加新的物理卷10.vgcfgbackup备份卷组中各物理卷的VGDA信息到/etc/vmconf目录的文件中11.vgcfgrestore从文件中恢复卷组中物理卷的VGDA12.vgchange改变卷组属性13.vgck检测卷组中VGDA的一致性14.vgdisplay显示卷组信息15.vgexport输出卷组使系统不能识别该卷组16.vgim…

python怎么创建文件夹_如何使用python在文件夹中创建文本文件?

我试图在一个不是运行脚本的目录的文件夹中创建一个.txt文件。我有一个脚本所在的文件夹&#xff0c;我可以在脚本所在的同一个目录中创建该文件夹&#xff0c;但它不会在该文件夹中创建文本文件。我通常遇到两个错误中的一个&#xff1a;PermissionError: [Errno 13] Permissi…

顺利搭建了oracle

哈哈转载于:https://www.cnblogs.com/zzzzw/p/5182224.html

php 计算n天后

法一:date("Y-m-d",mktime(0,0,0,date("m"),date("d")7,date("Y"))); 法二:date("Y-m-d H:i:s",strtotime("-7 day"));转载于:https://www.cnblogs.com/kwishly/archive/2013/01/23/2872834.html

返回对应对象的克隆方法

代码 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Collections;usingSystem.Reflection;namespaceCommon.CloneObjBase{ ///<summary>///BaseObject类是一个用来继承的抽象类。 ///每一个由此类继承而来的类将自动支持克隆方法…

linux磁盘使用情况脚本,技术|用 Linux Shell 脚本来监控磁盘使用情况并发送邮件...

市场上有很多用来监控 Linux 系统的监控工具&#xff0c;当系统到达阀值后它将发送一封邮件。它监控所有的东西例如 CPU 利用率、内存利用率、交换空间利用率、磁盘空间利用率等等。然而&#xff0c;它更适合小环境和大环境。想一想如果你只有少量系统&#xff0c;那么什么是最…