k-means & DBSCAN 总结


Posted in Python onApril 27, 2021

k-means

概述

k-means 通常被称为劳埃德算法, 是聚类算法中最经典也是最容易理解的模型. 简单的来说聚类就是把相似的东西分到一组.
k-means & DBSCAN 总结

基本概念

k 值:

  • 要得到簇的个数

质心:

  • 均值, 即向量各维度取平均即可

距离的度量:

  • 欧几里得距离和余弦相似度

优化目标:
k-means & DBSCAN 总结

代码:

class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')
  """
  :param n_clusters:要形成的聚类数以及生成的质心数

  :param init:初始化方法,默认为'k-means ++',以智能方式选择k-均值聚类的初始聚类中心,以加速收敛;random,从初始质心数据中随机选择k个观察值(行

  :param n_init:int,默认值:10使用不同质心种子运行k-means算法的时间。最终结果将是n_init连续运行在惯性方面的最佳输出。

  :param n_jobs:int用于计算的作业数量。这可以通过并行计算每个运行的n_init。如果-1使用所有CPU。如果给出1,则不使用任何并行计算代码,这对调试很有用。对于-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。因此,对于n_jobs = -2,所有CPU都使用一个。

  :param random_state:随机数种子,默认为全局numpy随机数生成器
  """

基本方法

fit(X,y=None)

使用 X 作为训练数据拟合模型. 如:

kmeans.fit(X)

predict(X)

预测新的数据所在的类别. 如:

kmeans.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)

clustercenters

获取集群中心的点坐标. 如:

kmeans.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])

labels_

获取每个点的类别. 如:

kmeans.labels_

工作流程

算法的执行过程分为 4 个阶段:

  1. 随机设 k 个特征空间内的点作为初始的聚类中心
  2. 对于根据每个数据的特征向量, 从 k 个聚类中心中寻找最近的一个, 并把该暑假标记为这个聚类的中心
  3. 在所有的数据都被标记过聚类中心之后, 根据这些数据分配的类簇, 通过取分配每个先前质心的所有样本的平均值来创建新的质心重, 新对 k 个聚类中心做计算
  4. 计算旧和新质心之间的差异. 如果所有的数据点从属的聚类中心与上一次的分配的类簇没有变化, 那么迭代就可以停止, 否则回到步骤 2 继续循环
    k-means & DBSCAN 总结

优势 vs 劣势

优势

  • 算法原理简单, 可解释性好
  • 收敛速度快
  • 调参的时候只需要改变 k 一个参数

劣势

  • k 值难以确定
  • 复杂度与样本呈线性关系
  • 很难发现任意形状的簇

DBSCAN 算法

概述

DBSCAN 算法 (Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度空间聚类算法.
k-means & DBSCAN 总结

基本概念

核心对象:

  • 若某个点的密度达到算法设定的阈值则其为核心点
  • 即 r 邻域内的点的数量不小于 minPts

邻域的距离阈值:

  • 设定的半径 r

直接密度可达:

  • 若某点 p 在点 q 的 r 邻域内, 且 q 是核心点则 p-q 直接密度可达

密度可达:

  • 若有一个点的序列 q0, q1, … qk, 对任意 qi-qi-1 是直接密度可达的, 则从 q0 到 qk 密度可达, 这实际上是直接密度可达的 “传播”

密度相连:

  • 若从某核心点 p 出发, 点 q 和点 k 都是密度可达的. 则称点 q 和点 k 是密度相连的

边界点:

  • 属于某一个类的非核心点, 不能发展下线了

噪声点:

  • 不属于任何一个类簇的点, 从任何一个核心出发都是密度不可达的

图解

k-means & DBSCAN 总结

  • A: 核心对象
  • B, C: 边界点
  • N: 离群点

工作流程

  • 参数 D: 输入数据集
  • 参数 e: 指定半径
  • MinPts: 密度阈值

优势 vs 劣势

优势

  • 不需要指定簇个数
  • 可以发现任意形状的簇
  • 擅长找到离群点 (检测任务)
  • 只需两个参数

劣势

  • 高维数据不是特别适用 (可以做降维)
  • 参数对结果的影响非常大
  • Sklearn 中效率并不是很高 (数据削减策略)

总结

DBSCAN 的总体效果比 k-means 好很多, 当我们需要用到聚类算法的时候推荐使用 DBSCAN, 特别在数据不规则的情况下.
k-means & DBSCAN 总结

Python 相关文章推荐
对于Python编程中一些重用与缩减的建议
Apr 14 Python
Python里disconnect UDP套接字的方法
Apr 23 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
详解python中@的用法
Mar 27 Python
Python初学者常见错误详解
Jul 02 Python
python psutil监控进程实例
Dec 17 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
如何定义TensorFlow输入节点
Jan 23 Python
Python中常见的导入方式总结
May 06 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 #Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
python实现腾讯滑块验证码识别
Apr 27 #Python
python实现调用摄像头并拍照发邮箱
Apr 27 #Python
django如何自定义manage.py管理命令
Apr 27 #Python
Python爬虫之爬取二手房信息
七个Python必备的GUI库
You might like
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
动态控制Table的js代码
2007/03/07 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Python复制目录结构脚本代码分享
2015/03/06 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
个人实习生的自我评价
2014/02/16 职场文书
《春天来了》教学反思
2014/04/07 职场文书
医学求职自荐信
2014/06/21 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
七一晚会主持词
2015/06/29 职场文书
二胎满月酒致辞
2015/07/29 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
详解 TypeScript 枚举类型
2021/11/02 Javascript
Python 绘制多因子柱状图
2022/05/11 Python