k均值聚类算法优缺点_聚类算法之——K-Means算法
聚类算法属于无监督学习,它将相似的对象归到同一个簇中。K-Means算法是聚类算法中最常用到算法;
1. 预备知识点
距离计算
闵可夫斯基距离
点
欧式距离
点
曼哈顿距离(Manhattan Distance )
图中红线代表曼哈顿距离,绿线代表欧式距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。
曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离。
点
余弦距离
两个向量 A 和 B,其余弦距离(即两向量夹角的余弦)由点积和向量长度给出,计算公式如下:
2. K-Means算法步骤
输入:样本集{
聚类簇数k
输出:簇划C={
- 随机初始化k个点作为簇质心;
- 将样本集中的每个点分配到一个簇中;
计算每个点与质心之间的距离(常用欧式距离和余弦距离),并将其分配给距离最近的质心所对应的簇中; - 更新簇的质心。每个簇的质心更新为该簇所有点的平均值;
- 反复迭代2 - 3 步骤,直到达到某个终止条件;
常用的终止条件有:1)达到指定的迭代次数;2)簇心不再发生明显的变化,即收敛;3)最小误差平方和SSE;
3. 聚类效果的评价指标SSE
SSE(Sum of Square Error, 误差平方和),SSE值越小表示数据点越接近于它们的质心,聚类效果也越好。
4. python脚本
调用sklearn包里的K-Means算法来实现
完整版脚本,直接运行即可
import
运行结果
按原理来实现K-Means算法
import
运行结果
算法优缺点和适用场景
优点:容易实现
缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢
适用数据类型:数值型数据
如何避免陷入局部最优
- 当k=2~10之间时,可运行多次,一般次数在50到1000之间,在得到的多个损失函数中选取最小的;
例如:循环100次,选取损失函数最小的那个聚类结果作为最终的聚类结果;
for i =1 to 100: 随机初始化中心点; 运行k-means算法步骤; 计算损失函数J(即第3部分的误差平方和SSE);
选取损失函数最小的那个聚类结果作为最终的聚类结果; - 当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算法相关推荐
- c均值聚类matlab程序_聚类算法之kmeans算法
一.k-means算法介绍 k-means最早是由James MacQueen在1967年提出的,这一观点能够追溯到1957年Hugo Steinhaus所提出的想法.1957年,斯图亚特最先提出这一 ...
- k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means
K-Means||算法 K-Means||算法是为了解决K-Means++算法缺点而产生的一种算法: 主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每 ...
- 层次聚类 matlab代码_聚类算法解析一
01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...
- mysql聚类函数排序_聚类算法大盘点 - 如鱼饮水,冷暖自知 - OSCHINA - 中文开源技术交流社区...
最近在关注聚类分析,了解了之后才发现,原来聚类分析里已经有这么丰富的成果,因此希望对其做个较全面的总结. 本文涉及到的聚类算法较多,请允许我慢慢更新. 1 层次聚类 (Agglomerative Cl ...
- 层次聚类python实现_聚类算法之层次聚类(Python实现)
起步 层次聚类( Hierarchical Clustering )是聚类算法的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树. 层次聚类算法介绍 假设有 n 个待聚类的样本,对于层次聚类算 ...
- 聚类dbi指数_聚类算法
1 聚类任务 在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础. 聚类是最常见的无监督学习任务 ...
- 算法的优缺点_一文总结机器学习各算法优缺点
关注上方"数据挖掘工程师",选择星标, 关键时间,第一时间送达! 转自Datawhale本期主题是详细总结一下机器学习各大常用算法的优缺点,十分值得收藏目录 正则化算法(Regul ...
- 机器学习算法优缺点_用于机器学习的优化算法的优缺点
机器学习算法优缺点 A deep-dive into Gradient Descent and other optimization algorithms 深入研究梯度下降和其他优化算法 Optimi ...
- 聚类dbi指数_聚类-K-Means
1.什么是K-Means? K均值算法聚类 关键词:K个种子,均值 聚类的概念:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中 K-Means算法是一种聚类分析(cluster an ...
最新文章
- [转]Effective C# 原则5:始终提供ToString()
- Shell 定时清理小脚本
- pythonexcel表格教程_python对excel表格的操作
- 使用Core Audio实现VoIP通用音频模块
- 静态时序分析——On-chip Variation
- SurfaceView类透明背景设置
- sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案
- Oracle exp/imp导入不同的表空间
- 微信小程序项目源代码SSM考勤签到管理系统
- 京东Java面试题、笔试题(含答案)
- CISSP考试指南笔记:1.2安全定义
- 计算机上显示找不到无线网络连接,电脑上网时为什么只显示宽带连接不显示无线网络连接?...
- oracle 并行之二: parallel dml
- fiddler抓包以及连接不上网解决方案
- CYUSB3014芯片使用EEPROM无法下载固件说明
- Abaqus安装CAE报错Regview解决方法
- 二叉树的公共最近祖先问题
- 百度小程序api怎么提交?Python推送代码免费分享给大家
- 解决物理机和kvm虚拟机鼠标不同步问题
- 【软件体系结构】考点总结 第四章 软件体系结构描述 XJU
热门文章
- Ubuntu 15.10系统安装后要做的15件事
- 大数据分析中常见的错误
- 数据治理的陷阱与解决方案
- 大数据精准运营需要注意的点
- Kernel(核函数)
- linux查看进程加载了哪些dll,linux下动态链接库的加载及解析过程
- mysql replace 效率,MySQL replace实用场景 MySQL实现replace函数的几种实用场景
- 设计一个python程序来计算显示通过如图_Python程序设计 17计算机、物联网 合班-中国大学mooc-试题题目及答案...
- C语言把输入值放入数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
- linux目录创立文件硬链接,在Linux中创建文件目录软链接、硬链接的方法