算法过程

  1. 随机选取K个种子点
  2. 求所有点到种子点的距离,将点纳入距离最近的种子点群
  3. 所有点均被纳入群内后,将种子点移动到种子群中心
  4. 重复上述2、3过程,直至种子点没有移动

优缺点:

  • 优点:容易实现
  • 缺点:可能收敛到局部最小值,在大规模数据上收敛较慢

思考:

  • k值如何确定?

    • ISODATA算法针对这个问题进行了改进:当属于某个类别的样本数过少时把这个类别去除,当属于某个类别的样本数过多、分散程度较大时把这个类别分为两个子类别(类的自动合并和分裂)
    • Elbow Method:通过绘制K-means代价函数与聚类数目K的关系图,选取直线拐点处的K值作为最佳的聚类中心数目
    • 从实际问题出发,人工指定比较合理的K值,通过多次随机初始化聚类中心选取比较满意的结果
    • 根据方差分析理论,应用混合 F 统计量来确定最佳分类数,并应用了模糊划分熵来验证最佳分类数的正确性
    • 使用了一种结合全协方差矩阵的 RPCL 算法,并逐步删除那些只包含少量训练数据的类
    • 使用的是一种称为次胜者受罚的竞争学习规则,来自动决定类的适当数目。它的思想是:对每个输入而言,不仅竞争获胜单元的权值被修正以适应输入值,而且对次胜单元采用惩罚的方法使之远离输入值。
  • 初始随机种子如何确定
    • K-means++选取K个聚类中心的思想:假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法(聚类中心互相离得越远越好)
    • 采用遗传算法(GA)进行初始化,以内部聚类准则作为评价指标
  • 度量方式
    • 传统K-means采用欧式距离进行样本间的相似度度量,显然并不是所有的数据集都适用于这种度量方式。kernel k-means参照支持向量机中核函数的思想,将所有样本映射到另外一个特征空间中再进行聚类,就有可能改善聚类效果
  • 空簇
    • 如果所有的点在指派步骤都未分配到某个簇,某个簇就会变成空簇。如果这种情况发生,则需要某种策略来选择一个替补聚类中心,否则的话,平方误差将会偏大(算法的目的就是使各个样本与所在类均值的误差平方和达到最小,这也是评价K-means算法最后聚类效果的评价标准)。一种方法是选择一个距离当前任何质心最远的点。这将消除当前对总平方误差影响最大的点
  • 噪声处理
    • k-means对离群值非常敏感,算法目标是簇内差异最小化,即SSE最小,所以单个噪音点也可以对整个簇造成很大的扰动,常用解决办法

          

  • 离散型数据处理

          

代码:

地址:https://github.com/AaronX121/Clustering,使用方式非常简单,目前支持三种形式的输入,分别对应着上面的三种算法:

  • [centroid, result] = Clustering(data, ‘kmeans’, k , iteration);
  • [centroid, result] = Clustering(data, ‘kmeans++’, k , iteration);
  • [centroid, result] = Clustering(data, ‘isodata’, desired_k , iteration, minimum_n, maximum_variance, minimum_d);

其中的输入data是一个矩阵,每一行代表数据集中的一个样本。其他输入的意义与上面的算法描述中一一对应。输出的centroid是聚类中心的位置,result是每个样本所对应的类别索引。

应用:

  k-means不仅局限于坐标点的计算,现实世界里的物体属性只要能抽象成向量,都可以用k-means来归类

参考

http://www.cnblogs.com/yixuan-xu/p/6272208.html

https://www.zhihu.com/question/60868444

转载于:https://www.cnblogs.com/xiaoyun94/p/7387863.html

k-means算法概述相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. K邻近算法概述、欧式距离、Scikit-learn使用 、kNN邻近算法距离度量、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、余弦距离、汉明距离、杰卡德距离、马氏距离

    一.K-邻近算法概述 K邻近算(K Nearest Neighbor算法,KNN算法):如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  3. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. 机器学习实战之K近邻算法

    k近邻算法概述 简单地说,K近邻算法采用测量不同特征值之间的距离方法进行分类. 优 点 :精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. ...

  6. 【机器学习】机器学习从零到掌握之二 -- 教你实现K近邻算法

    本文是<机器学习从零到掌握>系列之第2篇 [机器学习]机器学习从零到掌握之一 -- 教你理解K近邻算法 伪代码如下: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别 ...

  7. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  8. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  9. 机器学习:K近邻算法(K-NN)

    K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的有监督学习方法之一,它非常有效而且易于掌握. 1 K近邻算法概述 一个样本与数据集中的k个样本最相似, 如果这k个样本中的 ...

  10. K近邻算法讲解与python实现(附源码demo下载链接)

    k近邻算法概述 对应demo源码及数据:传送门 K近邻(k-Nearest Neighbor,简称kNN)算法,是一种应用很广泛的监督学习算法.它非常有效且易于掌握,其工作机制也很简单:给定测试样本, ...

最新文章

  1. Visual Studio 2010 and .NET Framework 4 Beta 1
  2. Java高级面试题!java小游戏制作视频
  3. Spring JDK动态代理
  4. 60-200-070-使用-命令-MySQL慢查询日志
  5. Mac OS X的入门文档
  6. 配置vhost、https、重定向
  7. cocos2dx[3.x](11)——拖尾渐隐效果MotionStreak
  8. 为什么需要等待2MSL
  9. Python猜数字项目源代码
  10. 【Mybatis-Plus】【异常】Inferred type ‘E‘ for type parameter ‘E‘ is not within its bound;
  11. ipad投影到mac上_如何停止Mac和iPad上的来电
  12. layui 数据表格 点击分页按钮 监听事件
  13. discuz论坛部署及常见问题处理
  14. 主要的竞争情报分析研究方法
  15. PCIe 6.0时代即将到来 你准备好了吗?
  16. 大专学历计算机专业高薪工作,大专毕业一年,工资三千多,计算机行业高薪路茫茫(下)...
  17. 二、Mingw下载安装
  18. PHP直播系统开发源码原理以及源代码主要的作用
  19. Struts1、Struts2、Hibernate、Spring框架工作原理介绍
  20. UVa Problem 109 - SCUD Busters

热门文章

  1. Hadoop1.2.0开发笔记(九)
  2. Spring——Java程序员的春天
  3. 命令行模式下导入导出MySQL数据库
  4. MySQL呕血汇总--从基础到毕业【收藏篇】
  5. C++ minidump类
  6. C++17特性一览(转载)
  7. clickhouse语句_Siem落地方案:初识clickhouse
  8. FISCO BCOS(一)———搭建单群组FISCO BCOS联盟链
  9. android 背景逐渐变暗,UI:使View背景逐渐变暗的方法
  10. python123输出hello world_2-python学习——hello world