【机器学习】聚类算法原理详解

聚类算法

性能度量:

  • 外部指标
    • jaccard系数(简称JC
    • FM指数(简称FMI
    • Rand指数(简称RI
  • 内部指标
    • DB指数(简称DBI
    • Dunn指数(简称DI

距离计算:

  • L p L_p Lp 范数
  • 欧氏距离
  • 曼哈顿距离

分类:

  • 原型聚类:k-means算法,学习向量量化(有监督学习),高斯混合聚类 都是此类型算法

假设聚类结构能够通过一组原型刻画,然后对原型进行迭代更新求解。

  • 密度聚类:DBSCAN

  • 层次聚类:AGNES

    试图在不同层次上对数据集进行划分,分为自底向上的聚合策略和自顶向下的分拆策略

聚簇之间的距离的计算:最小距离,最大距离和平均距离(两个簇中样本点对距离之和取平均)

AGNES算法被相应称为:单链接算法(以最小距离为准),全链接算法(以最大距离为准)和均链接算法

以单链接算法为例:

  • 初始时每个样本点看做一个簇,找到所有簇对中最小的距离,将他们合并为一个簇,此时合并的簇与其他簇的距离更新为两个点到其他簇距离的最小值。
  • 上面的步骤为循环里面的步骤,接着进行下一次循环,找到所有簇中最短的距离,然后将他们合并,合并后更新簇之间的距离为【合并簇中的所有点到其他簇距离的最小值】,一直进行上述循环操作,直到达到指定簇的数量再停止循环。

K-MEANS算法

1 概述

聚类概念:这是个无监督问题(没有标签数据),目的是将相似的东西分到一组。

通常使用的算法是K-MEANS算法

K-MEANS算法:

  • 需要指定簇的个数,即K值
  • 质心:数据的均值,即向量各维取平均即可
  • 距离的度量:常用欧几里得距离和余弦相似度(先标准化,让数据基本都是在一个比较小的范围内浮动)
  • 优化目标: m i n ∑ i = 1 K ∑ x ∈ C i d i s t ( c i , x ) 2 min\sum \limits_{i = 1}^K \sum \limits_{x \in C_i} dist(c_i, x)^2 mini=1KxCidist(ci,x)2 (对于每一个簇让每一个样本到中心点的距离越小越好, c i c_i ci代表中心点)

2 K-MEANS流程

假设平面上有一系列样本点,现在需要将其进行分组。

选定K=2,即将这些数据点分成两个组别。

  • 随机选择两个质心(分别代表两个簇),计算所有样本点到两个质心的距离。每个样本点会计算出到两个质心的距离,那么选择最小的距离,这个样本点就归属于哪个簇。
  • 然后对于两个簇的所有样本点分别算出对应的质心(这两个质心便充当新的质心),再对所有样本点计算到两个新的质心的距离,还是选择最小的距离,那么这个样本点就归属于哪个簇。
  • 最终直到两个簇所属的样本点不在发生变化。

K-MEANS工作流程视频参考

3 优缺点

优点:

  • 简单快速,适合常规数据集

缺点:

  • K值难以确定
  • 复杂度与样本呈线性关系
  • 很难发现任意形状的簇
  • 初始的点影响很大

K-MEANS可视化演示

4 K-MEANS进行图像压缩

from skimage import io
from sklearn.cluster import KMeans
import numpy as npimage = io.imread("1.jpg")
io.imshow(image)
# io.show()  # 显示图片rows = image.shape[0]
cols = image.shape[1]
print(image.shape)image = image.reshape(rows * cols, 3)
kmeans = KMeans(n_clusters=128, n_init=10, max_iter=100)  # 簇128, 最大迭代次数100
kmeans.fit(image)clusters = np.asarray(kmeans.cluster_centers_, dtype=np.uint8)
labels = np.asarray(kmeans.labels_, dtype=np.uint8)
labels = labels.reshape(rows, cols)print(clusters.shape)
np.save('test.npy', clusters)
io.imsave('compressed.jpg', labels)

DBSCAN算法

1 概述

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,DBSCAN算法将定义为密度相连的点的最大集合。

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

基于以上密度的定义,我们可以将样本集中的点划分为以下三类:

  • 核心点:在半径r区域内,含有超过MinPts数目(最小数目)的点,称为核心点;
  • 边界点:在半径r区域内,点的数量小于MinPts数目,但是是核心点的直接邻居;
  • 噪声点:既不是核心点也不是边界点的点

噪声点是不会被聚类纳入的点,边界点与核心点组成聚类的“簇”。

一些概念:

  • 直接密度可达(密度直达):如果p在q的r领域内,且q是一个核心点对象,则称对象p从对象q出发时直接密度可达,反之不一定成立,即密度直达不满足对称性。
  • 密度可达:如果存在一个对象链q–>e–>a–>k–>l–>p,任意相邻两个对象间都是密度直达的,则称对象p由对象q出发密度可达。密度可达满足传递性。
  • 密度相连:对于 x i x_i xi x j x_j xj ,如果存在核心对象样本 x k x_k xk ,使 x i x_i xi x j x_j xj 均由 x k x_k xk 密度可达,则称 x i x_i xi x j x_j xj 密度相连。密度相连关系满足对称性

核心点能够连通(密度可达),它们构成的以r为半径的圆形邻域相互连接或重叠,这些连通的核心点及其所处的邻域内的全部点构成一个簇。

2 原理

  1. DBSCAN通过检查数据集中每个点的r邻域来搜索簇,如果点p的r邻域包含多于MinPts个点,则创建一个以p为核心对象的簇;
  2. 然后, DBSCAN迭代的聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;
  3. 当没有新的带你添加到任何簇时,迭代过程结束。

优缺点:

  • 优点:基于密度定义,可以对抗噪声,能处理任意形状和大小的簇

  • 缺点:当簇的密度变化太大时候,聚类得到的结果会不理想;对于高维问题,密度定义也是一个比较麻烦的问题。

3 实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
import matplotlib.colors# 创建Figure
fig = plt.figure()
# 用来正常显示中文标签
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
# 用来正常显示负号
matplotlib.rcParams['axes.unicode_minus'] = FalseX1, y1 = datasets.make_circles(n_samples=5000, factor=.6,noise=.05)
X2, y2 = datasets.make_blobs(n_samples=1000, n_features=2,centers=[[1.2,1.2]], cluster_std=[[.1]],random_state=9)# 原始点的分布
ax1 = fig.add_subplot(311)
X = np.concatenate((X1, X2))
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.title(u'原始数据分布')
plt.sca(ax1)# K-means聚类
from sklearn.cluster import KMeans
ax2 = fig.add_subplot(312)
y_pred = KMeans(n_clusters=3, random_state=9).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.title(u'K-means聚类')
plt.sca(ax2)# DBSCAN聚类
from sklearn.cluster import DBSCAN
ax3 = fig.add_subplot(313)
y_pred = DBSCAN(eps = 0.1, min_samples = 10).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.title(u'DBSCAN聚类')
plt.sca(ax3)plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端性能优化深入解析:提升用户体验的几个关键点

文章目录 前言一、代码分割与动态导入二、图片和脚本的懒加载三、缓存策略四、如何根据项目特点选择合适的前端性能优化策略?结语 前言 在当今的互联网环境中,网页加载速度直接影响到用户的满意度和留存率。因此,前端性能优化对于提高用户体…

系统架构设计师论文

资源库:https://blog.csdn.net/weixin_43905586/article/details/118719986 2019年 2019年下半年试题二:论软件系统架构评估及其应用 2012年 2012年下半年试题一:论基于架构的软件设计方法及应用

用 Android Studio 从零开发一个多功能计算器应用

简介 计算器是每个学习 Android 开发者必经的经典项目之一。本篇文章将带你创建一个功能更强大的计算器应用,支持基本的加减乘除运算、带小数点的输入以及更多操作符功能。通过这个项目,你将全面掌握 Android 的布局设计、事件处理和逻辑实现技巧。 一、…

【代码随想录day33】【C++复健】62.不同路径;63. 不同路径 II;343. 整数拆分;96.不同的二叉搜索树

感觉dp的题真的很适合背,当然不是死记硬背,而是当做一种模板题,出来一道新的题就往模板题上面去靠,如果套对模板的话剩下的事情其实就简单了。所以只要看一遍解法知道大致思路其实就够了,毕竟大部分dp的代码也不算难写…

SHELL笔记(条件测试)

基本概念: 条件测试用于在 Shell 脚本中对各种条件进行判断,根据判断结果来决定是否执行特定的命令或代码块。条件测试可以用于比较数值、字符串,检查文件或目录的属性,以及判断命令的执行结果等。 格式: 格式1&…

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境,使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载: MAVEN下载传送…

微信小程序-prettier 格式化

一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里: "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…

【Mac】未能完成该操作 Unable to locate a Java Runtime

重生之我做完产品经理之后回来学习Data Mining Mac打开weka.jar报错"未能完成该操作 Unable to locate a Java Runtime" 1. 打开终端执行 java -version 指令,原来是没安装 JDK 环境 yyzccnn-mac ~ % java -version The operation couldn’t be comple…

【ArcGIS微课1000例】0127:计算城市之间的距离

本文讲述,在ArcGIS中,计算城市(以地级城市为例)之间的距离,效果如下图所示: 一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析…

【WPF】Prism学习(五)

Prism Commands 1.错误处理(Error Handling) Prism 9 为所有的命令(包含AsyncDelegateCommand)提供了更好的错误处理。 避免用try/catch包装每一个方法根据不同遇到的异常类型来提供特定的逻辑处理可以在多个命令之间共享错误处…

【element-tiptap】Tiptap编辑器核心概念----结构篇

core-concepts 前言:这篇文章来介绍一下 Tiptap 编辑器的一些核心概念 (一)结构 1、 Schemas 定义文档组成方式。一个文档就是标题、段落以及其他的节点组成的一棵树。 每一个 ProseMirror 的文档都有一个与之相关联的 schema,…

2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索

Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中,图像与相关文本的一致性问题,如患者有病症但影像可能无明显异常,影响图像检索系统准确性。传统的基于文本的医学图像检索&#xff0…

PGMP-练DAY26

1. Which of the following items are key elements of the program charter?以下哪些项目是项目集章程的关键要素? A.Scope, assumptions,constraints,goals and objectives, timing, key stakeholders.范围、假设、约束、目标和目的、时间安排、主要利益相关者 …

Spark_写ORALCE:ORA-01426 numeric overflow 问题解决

问题 是这样的,20241118,我spark程序写Oracle时候,关联完HBase数据后,在写入ORACLE中,遇到了这个bug, 数据入到一半,每次都报错ORA-01426 numeric overflow,具体呢,也不告…

初识Linux · 信号处理 · 续

目录 前言: 可重入函数 重谈进程等待和优化 前言: 在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个…

流量模型 -20241118

流量模型 个体的注意力注意力提升销量,转化为直接收益,同时提升品牌价值购物平台的出现使注意力变现变得简单,开拓了注意力的的使用方式,使其分散使用转变为集中使用各个视频,直播平台集中注意力,使得流量…

微信小程序 最新获取用户头像以及用户名

一.在小程序改版为了安全起见 使用用户填写来获取头像以及用户名 二.代码实现 <view class"login_box"><!-- 头像 --><view class"avator_box"><button wx:if"{{ !userInfo.avatarUrl }}" class"avatorbtn" op…

WPF MVVM框架

一、MVVM简介 MVC Model View Control MVP MVVM即Model-View-ViewModel&#xff0c;MVVM模式与MVP&#xff08;Model-View-Presenter&#xff09;模式相似&#xff0c;主要目的是分离视图&#xff08;View&#xff09;和模型&#xff08;Model&#xff09;&#xff0c;具有低…

云原生周刊:Kubernetes v1.32 要来了

开源项目推荐 Woodpecker Woodpecker 是一款轻量级且功能强大的 CI/CD 引擎&#xff0c;以其高度可扩展性和易用性著称。它支持多种版本控制系统与编程语言&#xff0c;能够灵活适配不同开发流程&#xff0c;帮助团队实现高效的持续集成与交付。无论是个人项目还是大型团队&a…

Elasticsearch-Elasticsearch-Rest-Client(三)

1&#xff09;TCP spring-data-elasticsearch:transport-api.jar&#xff1b; springboot版本不同&#xff0c;transport-api.jar不同&#xff0c;不能适配es版本, 7.x已经不建议使用&#xff0c;8以后就要废弃 2&#xff09;、9200&#xff1a;HTTP JestClient&#xff1a;…