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爬虫之打包生成exe文件
Nov 06 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python比较2个时间大小的实现方法
Apr 10 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
对python中array.sum(axis=?)的用法介绍
Jun 28 Python
Python引用计数操作示例
Aug 23 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
Django接收照片储存文件的实例代码
Mar 07 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php如何连接sql server
2015/10/16 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
js 单引号 传递方法
2009/06/22 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
JavaScript运算符小结
2015/06/03 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Java程序员面试题
2013/07/15 面试题
综合办公室个人的自我评价
2013/12/22 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
原材料检验岗位职责
2014/03/15 职场文书
人事任命书怎么写
2014/06/05 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
幼师小班个人总结
2015/02/12 职场文书
提档介绍信范文
2015/10/22 职场文书
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库