聚类算法属于无监督学习,它将相似的对象归到同一个簇中。K-Means算法是聚类算法中最常用到算法;

1. 预备知识点

距离计算

闵可夫斯基距离

之间的闵可夫斯基距离为

欧式距离

之间的欧氏距离为:

曼哈顿距离(Manhattan Distance )

图中红线代表曼哈顿距离,绿线代表欧式距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。

曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离。

之间的曼哈顿距离为:

余弦距离

两个向量 A 和 B,其余弦距离(即两向量夹角的余弦)由点积和向量长度给出,计算公式如下:

其中,
分别代表向量 A 和 B 的各分量 。

2. K-Means算法步骤

输入:样本集{

}

​ 聚类簇数k

输出:簇划C={

}
  1. 随机初始化k个点作为簇质心;
  2. 将样本集中的每个点分配到一个簇中;
    计算每个点与质心之间的距离(常用欧式距离和余弦距离),并将其分配给距离最近的质心所对应的簇中;
  3. 更新簇的质心。每个簇的质心更新为该簇所有点的平均值;
  4. 反复迭代2 - 3 步骤,直到达到某个终止条件;
    常用的终止条件有:1)达到指定的迭代次数;2)簇心不再发生明显的变化,即收敛;3)最小误差平方和SSE;

3. 聚类效果的评价指标SSE

SSE(Sum of Square Error, 误差平方和),SSE值越小表示数据点越接近于它们的质心,聚类效果也越好。

4. python脚本

调用sklearn包里的K-Means算法来实现

完整版脚本,直接运行即可

import 

运行结果

按原理来实现K-Means算法

import 

运行结果

算法优缺点和适用场景

优点:容易实现

缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢

适用数据类型:数值型数据

如何避免陷入局部最优

  1. 当k=2~10之间时,可运行多次,一般次数在50到1000之间,在得到的多个损失函数中选取最小的;
    例如:循环100次,选取损失函数最小的那个聚类结果作为最终的聚类结果;
    for i =1 to 100: 随机初始化中心点; 运行k-means算法步骤; 计算损失函数J(即第3部分的误差平方和SSE);
    选取损失函数最小的那个聚类结果作为最终的聚类结果;
  2. 当k比较大时,不建议采取(1)的方法。

如何选择K的数量

  • 用“Elbow Method”(肘部法则)来选择K的数量;
    需要画图(横轴聚类的数量,纵轴损失函数),选择曲线明显的拐点作为K
    但也会存在没有清晰的拐点,无法选出K的数;
  • 根据后续目标来选择聚类数目;
    比如哪种衬衫尺码会更好的满足我的顾客。
    衬衫的尺码数k=3(S M L)还是k=5(XS S M L XL),选哪个会让顾客更满意(这是目标);

补充

如果没有数据,也可以通过python现有库模拟产生数据,代码如下

from 

用模拟生成的数据替换上面代码中的x和k,则调算法包和用原理实现的运行效果分别如下

总结

用封装好的算法和用原理实现的算法相比,从时间上来看,封装好的算法要比按原理实现的速度快,后续探索到其他方面再补充。

k均值聚类算法优缺点_聚类算法之——K-Means算法相关推荐

  1. c均值聚类matlab程序_聚类算法之kmeans算法

    一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...

  2. k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means

    K-Means||算法 K-Means||算法是为了解决K-Means++算法缺点而产生的一种算法: 主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每 ...

  3. 层次聚类 matlab代码_聚类算法解析一

    01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...

  4. mysql聚类函数排序_聚类算法大盘点 - 如鱼饮水,冷暖自知 - OSCHINA - 中文开源技术交流社区...

    最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结. 本文涉及到的聚类算法较多,请允许我慢慢更新. 1 层次聚类 (Agglomerative Cl ...

  5. 层次聚类python实现_聚类算法之层次聚类(Python实现)

    起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...

  6. 聚类dbi指数_聚类算法

    1 聚类任务 在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础. 聚类是最常见的无监督学习任务 ...

  7. 算法的优缺点_一文总结机器学习各算法优缺点

    关注上方"数据挖掘工程师",选择星标, 关键时间,第一时间送达! 转自Datawhale本期主题是详细总结一下机器学习各大常用算法的优缺点,十分值得收藏目录 正则化算法(Regul ...

  8. 机器学习算法优缺点_用于机器学习的优化算法的优缺点

    机器学习算法优缺点 A deep-dive into Gradient Descent and other optimization algorithms 深入研究梯度下降和其他优化算法 Optimi ...

  9. 聚类dbi指数_聚类-K-Means

    1.什么是K-Means? K均值算法聚类 关键词:K个种子,均值 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中 K-Means算法是一种聚类分析(cluster an ...

最新文章

  1. [转]Effective C# 原则5:始终提供ToString()
  2. Shell 定时清理小脚本
  3. pythonexcel表格教程_python对excel表格的操作
  4. 使用Core Audio实现VoIP通用音频模块
  5. 静态时序分析——On-chip Variation
  6. SurfaceView类透明背景设置
  7. sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案
  8. Oracle exp/imp导入不同的表空间
  9. 微信小程序项目源代码SSM考勤签到管理系统
  10. 京东Java面试题、笔试题(含答案)
  11. CISSP考试指南笔记:1.2安全定义
  12. 计算机上显示找不到无线网络连接,电脑上网时为什么只显示宽带连接不显示无线网络连接?...
  13. oracle 并行之二: parallel dml
  14. fiddler抓包以及连接不上网解决方案
  15. CYUSB3014芯片使用EEPROM无法下载固件说明
  16. Abaqus安装CAE报错Regview解决方法
  17. 二叉树的公共最近祖先问题
  18. 百度小程序api怎么提交?Python推送代码免费分享给大家
  19. 解决物理机和kvm虚拟机鼠标不同步问题
  20. 【软件体系结构】考点总结 第四章 软件体系结构描述 XJU

热门文章

  1. Ubuntu 15.10系统安装后要做的15件事
  2. 大数据分析中常见的错误
  3. 数据治理的陷阱与解决方案
  4. 大数据精准运营需要注意的点
  5. Kernel(核函数)
  6. linux查看进程加载了哪些dll,linux下动态链接库的加载及解析过程
  7. mysql replace 效率,MySQL replace实用场景 MySQL实现replace函数的几种实用场景
  8. 设计一个python程序来计算显示通过如图_Python程序设计 17计算机、物联网 合班-中国大学mooc-试题题目及答案...
  9. C语言把输入值放入数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
  10. linux目录创立文件硬链接,在Linux中创建文件目录软链接、硬链接的方法