聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。

K-均值聚类算法

基本概念

:假定有一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇到底都是些什么。聚类与分类的最大不同在于,分类的目标事先已知,而聚类则是类别未知,其产生的结果和分类相同。
K-均值中的K(簇个数)是自己给定的,k是多少就有多少个簇。
质心:均值,即向量各维取平均,即簇中所有点的中心来描述。
距离的度量:常用欧氏距离 ( x2+y2)\sqrt{x^2+y^2} )x2+y2​)和余弦相似度(通过测量两个向量的夹角的余弦值来度量它们之间的相似性),大多情况下都要先标准化
优化目标:min∑i=1K∑x∈Cidist(ci,x)2min \sum_{i=1}^{K}\sum_{x\in{Ci}}dist(c_i,x)^2min∑i=1K​∑x∈Ci​dist(ci​,x)2 就是使所有簇里的点到质心的距离加起来最小

工作流程:

  • 随机确定k个初始点作为质心
  • 然后将数据集中的每个点分配到一个簇中,即为每个点找距其最近的质心
  • 然后其分配给该质心所对应的簇
  • 然后每个簇的质心更新为该簇所有点的平均值

下面具体来看:

1.根据自己的数据,设K值,现假设K=2

2.K=2,所以随机取两个点作为质心

3.根据那两个质心进行距离计算并划分簇

4.对已经分类了的两个簇进行质心的更新,再重新遍历一遍计算距离

5.更新到再更新他的簇也不再变之后就说明已经分好了

优缺点

优点:简单快速,适合常规数据集

缺点:

  1. K值难确定,不好调参
  2. 复杂度与样本成线性关系,在大规模数据集上收敛较慢。
  3. 可能收敛到局部最小值
  4. 对一些环状簇或者奇形怪状的簇难以分离

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

K-均值聚类的一般流程
(1) 收集数据:使用任意方法。

(2) 准备数据:需要数值型数据来计算距离,也可以将标称型数据映射为二值型数据再用于距离计算。

(3) 分析数据:使用任意方法。

(4) 训练算法:不适用于无监督学习,即无监督学习没有训练过程。

(5) 测试算法:应用聚类算法、观察结果。可以使用量化的误差指标如误差平方和(后面 会介绍)来评价算法的结果。

(6) 使用算法:可以用于所希望的任何应用。通常情况下,簇质心可以代表整个簇的数据 来做出决策。

DBSCAN聚类( Density-Based Spatial Clustering of Applications with Noise)

DBSCAN 的主要优点是它不需要用户先验地设置簇K的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。DBSCAN 比凝聚聚类和 k 均值稍慢,但仍可以扩展到相对较大的数据集。

原理思想

识别特征空间的“拥挤”区域中的点,在这些区域中许多数据点靠近在一起。这些区域被称为特征空间中的密集区域

思想是,簇形成数据的密集区域,并由相对较空的区域分隔开。

基本概念

核心样本:在密集区域内的点被称为核心样本(或核心对象,核心点)。

ϵ-邻域的距离阈值:设定的半径r

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

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

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

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

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

如图。A是核心对象,A1,A2,A3在A这个圈内,即A123是A的下线,A123又会以自己为核心点画圈。往下类似,直到遇到B,C这种下线,他们再画圈,其圈内没有其他下线了,就叫做边界点。N是所有的核心点画的圈都圈不到的一个点,所以N是离群点,也叫噪声点。

工作流程


参数选择:
半径ϵ:可以根据K距离来设定:找突变点

K距离:给定数据集P={p(i); i=0,1,…n},计算点P(i)到集合D的子集S中所有点 之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。

点的个数MinPts: k-距离中k的值,一般取的小一些,多次尝试

优缺点

优点:

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

缺点:

  • 高维数据有些困难(可以做降维)
  • 参数难以选择(参数对结果的影响非常大)
  • Sklearn中效率很慢(数据削减策略)

很牛的一个聚类可视化网站可以自己玩玩
https://www.naftaliharris.com/blog/visualizing-dbscan- clustering/


聚类算法详解——深度AI科普团队相关推荐

  1. 图解机器学习算法(13) | 聚类算法详解(机器学习通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...

  2. 谱聚类算法详解及代码实现

    谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...

  3. 聚类 python_python中实现k-means聚类算法详解

    算法优缺点: 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的,相近 ...

  4. kmeans聚类算法matlab_KMeans聚类算法详解

    "如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油". 日常生活中,从人脸识别.语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地.尽管全球每日新增数据量以 ...

  5. 支持向量机——深度AI科普团队

    1. 支持向量机(SVM) 支持向量机是一个功能强大并且全面的机器学习模型,它能够执行线性或非线性分类.回归,甚至是异常值检测任务.SVM特别适用于中小型复杂数据集的分类. 什么是机?什么是向量?什么 ...

  6. FCM聚类算法详解(Python实现iris数据集)

    参考:https://blog.csdn.net/on2way/article/details/47087201 模糊C均值(Fuzzy C-means)算法简称FCM算法,是一种基于目标函数的模糊聚 ...

  7. Kmeans聚类算法详解

    1. 前言 作为无监督聚类算法中的代表--K均值聚类(Kmeans)算法,该算法的主要作用是将相似的样本自动归到一个类别中.所谓的监督算法,就是输入样本没有对应的输出或标签.聚类(clustering ...

  8. K-means聚类算法详解

    K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用.看了Andrew Ng的这个讲义后才有些明白K- ...

  9. spectral-cluster聚类算法详解

    欢迎关注"生信修炼手册"! spectral clustering,称之为谱聚类算法,和近邻传播AP算法一样,也是基于图论的算法,都是将样本点两两相连,构成图这一数据结构,不同的是 ...

最新文章

  1. 四、Android学习第四天——JAVA基础回顾(转)
  2. HDU 5119 Happy Matt Friends(递推)
  3. Android在一个APP中通过包名或类名启动另一个APP
  4. 6-2-1:STL之string——string的快速入门、常用接口
  5. 《妖猫传》大唐盛世背后那些事
  6. django-静态文件设置
  7. 漫步微积分三十八——流体静力学
  8. 南京航空航天大学2020数据结构课设
  9. JavaScript-12(脚本化CSS)
  10. Linux下编写简单的程序
  11. Quartus II 12.0 下载、安装和破解
  12. JAVA基础知识点大全之二
  13. 桌面美化:自定义桌面 Rainmeter
  14. 130个实用网站集合
  15. 谈谈奋斗里陆涛为什么不爱米莱
  16. 通用 Mapper UUID 简单示例
  17. 子域名收集工具——Sublist3r
  18. 移动直播连麦实现——Server端合成
  19. pb从数据窗口获得数据的方法总结(转自颜建荣ID:jeron1999)
  20. python自动发送邮件实现

热门文章

  1. java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...
  2. 深度学习算法_深度学习算法
  3. 【script】lambda的使用
  4. fisher线性判别算法python_Fisher线性判别(LDA)python实现
  5. python中表示空类型的是_python中什么表示空类型
  6. [C语言] 插入排序之直接插入排序的特性及实现
  7. View Programming Guide for iOS官方文档翻译一
  8. win10 uwp 改变鼠标
  9. android 练习之路 (三)
  10. 201521145048《Java程序设计管理》第一周学习总结