k-means算法概述
算法过程:
- 随机选取K个种子点
- 求所有点到种子点的距离,将点纳入距离最近的种子点群
- 所有点均被纳入群内后,将种子点移动到种子群中心
- 重复上述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算法概述相关推荐
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- K邻近算法概述、欧式距离、Scikit-learn使用 、kNN邻近算法距离度量、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、余弦距离、汉明距离、杰卡德距离、马氏距离
一.K-邻近算法概述 K邻近算(K Nearest Neighbor算法,KNN算法):如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...
- k means算法C语言伪代码,K均值算法(K-Means)
1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- 机器学习实战之K近邻算法
k近邻算法概述 简单地说,K近邻算法采用测量不同特征值之间的距离方法进行分类. 优 点 :精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. ...
- 【机器学习】机器学习从零到掌握之二 -- 教你实现K近邻算法
本文是<机器学习从零到掌握>系列之第2篇 [机器学习]机器学习从零到掌握之一 -- 教你理解K近邻算法 伪代码如下: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别 ...
- K means 图片压缩
k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...
- k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优
k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...
- 机器学习:K近邻算法(K-NN)
K近邻(K-Nearest Neighbor, KNN)是一种最经典和最简单的有监督学习方法之一,它非常有效而且易于掌握. 1 K近邻算法概述 一个样本与数据集中的k个样本最相似, 如果这k个样本中的 ...
- K近邻算法讲解与python实现(附源码demo下载链接)
k近邻算法概述 对应demo源码及数据:传送门 K近邻(k-Nearest Neighbor,简称kNN)算法,是一种应用很广泛的监督学习算法.它非常有效且易于掌握,其工作机制也很简单:给定测试样本, ...
最新文章
- Visual Studio 2010 and .NET Framework 4 Beta 1
- Java高级面试题!java小游戏制作视频
- Spring JDK动态代理
- 60-200-070-使用-命令-MySQL慢查询日志
- Mac OS X的入门文档
- 配置vhost、https、重定向
- cocos2dx[3.x](11)——拖尾渐隐效果MotionStreak
- 为什么需要等待2MSL
- Python猜数字项目源代码
- 【Mybatis-Plus】【异常】Inferred type ‘E‘ for type parameter ‘E‘ is not within its bound;
- ipad投影到mac上_如何停止Mac和iPad上的来电
- layui 数据表格 点击分页按钮 监听事件
- discuz论坛部署及常见问题处理
- 主要的竞争情报分析研究方法
- PCIe 6.0时代即将到来 你准备好了吗?
- 大专学历计算机专业高薪工作,大专毕业一年,工资三千多,计算机行业高薪路茫茫(下)...
- 二、Mingw下载安装
- PHP直播系统开发源码原理以及源代码主要的作用
- Struts1、Struts2、Hibernate、Spring框架工作原理介绍
- UVa Problem 109 - SCUD Busters
热门文章
- Hadoop1.2.0开发笔记(九)
- Spring——Java程序员的春天
- 命令行模式下导入导出MySQL数据库
- MySQL呕血汇总--从基础到毕业【收藏篇】
- C++ minidump类
- C++17特性一览(转载)
- clickhouse语句_Siem落地方案:初识clickhouse
- FISCO BCOS(一)———搭建单群组FISCO BCOS联盟链
- android 背景逐渐变暗,UI:使View背景逐渐变暗的方法
- python123输出hello world_2-python学习——hello world