机器学习中聚类算法-简单介绍

聚类算法

聚类算法: 将数据分成不同的组,如K均值(K-Means)和层次聚类(Hierarchical Clustering)。
聚类是机器学习中一类重要的无监督学习问题,其目标是将数据集中的样本划分为不同的组,使得同一组内的样本相似度较高,不同组之间的相似度较低。
常见的聚类算法如下:

K均值聚类(K-Means Clustering):原理: 将数据划分为K个簇,每个簇的中心是该簇中所有样本的平均值。特点: 适用于凸形簇,对大规模数据集有效。算法流程图:初始化: 选择K个初始聚类中心点。分配: 将每个数据点分配到最近的聚类中心。更新: 根据分配的数据点,更新每个聚类中心的位置。迭代: 重复步骤2和步骤3,直到收敛(聚类中心不再改变)或达到最大迭代次数。
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 生成随机数据作为示例
np.random.seed(42)
data = np.random.randn(300, 2) + np.array([4, 4])# 设定聚类数K
k = 3# 使用K均值聚类算法
kmeans = KMeans(n_clusters=k)
kmeans.fit(data)# 获取聚类中心和预测标签
centroids = kmeans.cluster_centers_
labels = kmeans.labels_# 可视化结果
colors = ['r.', 'g.', 'b.']
for i in range(len(data)):plt.plot(data[i][0], data[i][1], colors[labels[i]], markersize=10)# 绘制聚类中心
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=150, linewidths=5, zorder=10)
plt.show()
层次聚类(Hierarchical Clustering):原理: 通过构建树状结构(聚类树)来表示数据的层次结构,可以是自底向上(凝聚性聚类)或自顶向下(分裂性聚类)。特点: 不需要预先指定簇的数量,可视化结果更直观。层次聚类(Hierarchical Clustering)是一种基于树状结构的聚类方法,它可以分为两类:凝聚型(Agglomerative)和分裂型(Divisive)。下面是凝聚型层次聚类的算法代码流程图和Python代码示例。算法流程图:初始化: 每个数据点视为一个初始簇。计算相似度: 计算每一对簇之间的相似度。合并最相似的簇: 将最相似的两个簇合并为一个新簇。更新相似度矩阵: 更新相似度矩阵,将新簇与其他簇的相似度计算出来。重复: 重复步骤3和步骤4,直到只剩下一个簇。
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt# 生成随机数据作为示例
np.random.seed(42)
data = np.random.randn(10, 2)# 使用层次聚类算法
linkage_matrix = linkage(data, 'ward')# 绘制树状图
dendrogram(linkage_matrix, labels=range(1, 11))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Data Point Index')
plt.ylabel('Distance')
plt.show()
谱聚类(Spectral Clustering):原理: 将数据投影到特征空间,然后在新的空间中使用K均值等算法进行聚类。特点: 在处理复杂结构的数据上表现较好,如图像分割。算法流程图:构建相似度图: 根据数据点之间的相似度构建相似度图,通常使用高斯核函数。计算拉普拉斯矩阵: 从相似度图中计算拉普拉斯矩阵。特征分解: 对拉普拉斯矩阵进行特征分解,得到特征向量。K均值聚类: 将特征向量作为新的数据表示,然后使用K均值聚类进行最终的聚类。
import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成示例数据
data, labels = make_blobs(n_samples=300, centers=3, random_state=42)# 使用谱聚类算法
spectral = SpectralClustering(n_clusters=3, affinity='nearest_neighbors', random_state=42)
predicted_labels = spectral.fit_predict(data)# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=predicted_labels, cmap='viridis', marker='o', s=50)
plt.title('Spectral Clustering')
plt.show()
OPTICS(Ordering Points To Identify the Clustering Structure):原理: 基于样本的密度和可达性建立聚类结构,不需要预先设定簇的数量。特点: 对密度变化较大的数据集有较好的适应性。OPTICS(Ordering Points To Identify the Clustering Structure)是一种基于密度的聚类算法,它不需要预先设定簇的数量,并可以发现不同密度的簇。以下是OPTICS的简要算法流程图和Python代码示例:算法流程图:计算核心距离和可达距离: 对每个数据点计算核心距离,然后计算可达距离。生成簇: 通过对可达距离进行排序,确定簇的边界。构建簇的层次结构: 将数据点组织成一个层次结构,其中较高层次的点表示较高的可达距离。提取簇: 根据层次结构,提取具有一定密度的簇。
from sklearn.cluster import OPTICS
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成示例数据
data, labels = make_blobs(n_samples=300, centers=3, random_state=42)# 使用OPTICS算法
optics = OPTICS(min_samples=5, xi=0.05, min_cluster_size=0.1)
optics.fit(data)# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=optics.labels_, cmap='viridis', marker='o', s=50)
plt.title('OPTICS Clustering')
plt.show()
Affinity Propagation:原理: 通过样本之间的消息传递来确定簇的中心,具有自动选择簇数的特点。特点: 对于数据集中存在多个簇的情况表现较好。Affinity Propagation是一种基于数据点之间消息传递的聚类算法。该算法通过在数据点之间传递“责任”和“可用性”来确定聚类的中心。以下是Affinity Propagation的算法流程图和Python代码示例:算法流程图:初始化相似度矩阵: 计算数据点之间的相似度矩阵。初始化责任矩阵和可用性矩阵: 将责任矩阵R和可用性矩阵A初始化为零矩阵。迭代传递消息: 迭代传递“责任”和“可用性”消息,更新矩阵R和A。计算聚类: 根据矩阵R和A计算聚类结果。迭代更新: 重复步骤3和步骤4,直到收敛或达到最大迭代次数。
from sklearn.cluster import AffinityPropagation
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成示例数据
data, labels = make_blobs(n_samples=300, centers=3, random_state=42)# 使用Affinity Propagation算法
affinity_propagation = AffinityPropagation(damping=0.9, preference=-200)
affinity_propagation.fit(data)# 获取聚类中心的索引
cluster_centers_indices = affinity_propagation.cluster_centers_indices_# 获取聚类标签
labels = affinity_propagation.labels_# 可视化结果
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis', marker='o', s=50)
plt.title('Affinity Propagation Clustering')
plt.show()

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

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

相关文章

【AI】目标检测算法DETR源码解析及推理测试

说到目标检测,自然而然我们会想到YOLO这个框架,YOLO框架已经发展到V8版本了,各种应用也比较成熟,不过我最近在研究Transformer,今天的主角是Transformer在目标检测的开山之作:DETR:End-to-End O…

FairGuard游戏加固产品常见问题解答

针对日常对接中,各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注,我们梳理了相关问题与解答,希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A:FairGuar…

结构体详解

结构体: 一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构 结构体可以用来封装一些属性来组成新的类型。 结构体的大小: 结构体的大小不是结构体元素单纯相加。内存对齐(若计算机使用32位字长的cpu,对32位的…

【算法】dp题单

题单链接: https://vjudge.net/contest/574209#overview 目录 1. 洛谷 P1020 导弹拦截 (dp二分Dilworth 定理) 2. P1439 最长公共子序列(二分求最长公共子序列) 3. 洛谷 P1854 花店橱窗布置 (线性dp 用…

OpenFeign

OpenFeign 一、基本使用 1、引入依赖 <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-start…

k8s的网络

k8s的网络 k8s中的通信模式&#xff1a; 1、pod内部之间容器与容器之间的通信 在同一个pod中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信 每个pod都有一个全局的真实的ip地址…

“MapStruct妙用指南:解锁Java对象映射的强大力量!“ ️

目录 1-10 MapStruct进阶问题解析11-20 MapStruct进阶问题解析感谢阅读 前言&#xff1a; 欢迎来到今天的博客&#xff0c;我们将一同探索Java领域中一款备受瞩目的对象映射框架 — MapStruct。它的强大之处不仅在于简化代码&#xff0c;更在于提高开发效率。在本文中&#xf…

BMS均衡技术

一、电池的不一致性&#xff1f; 每个电池都有自己的“个性”&#xff0c;要说均衡&#xff0c;得先从电池谈起。即使是同一厂家同一批次生产的电池&#xff0c;也都有自己的生命周期、自己的“个性”——每个电池的容量不可能完全一致。例如以下的两个原因都会造成电池不一致…

CSS中的object-fit和background-size

上面文章总结了下img标签和background-image的区别&#xff0c;这篇文章介绍一下其相关属性。 object-fit CSS属性指定可替换元素&#xff08;例如&#xff1a;<img> 或 <video>&#xff09;的内容应该如何适应到其使用高度和宽度确定的框。object-fit的默认值是…

docker部署mysql

1.查找mysql镜像 [rootVM-4-5-centos ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-sourc…

AnyText:多语言视觉文字生成与编辑——最详细傻瓜式安装教程

先看图,下面都是AnyText生成的,可以说效果效果确实是很震撼了。 附上地址: GitHub - tyxsspa/AnyTextContribute to tyxsspa/AnyText development by creating an account on GitHub.https://github.com/tyxsspa/AnyText接下来开始详细讲解安装过程: 1. 下载项目 (1)下…

全国计算机等级考试| 二级Python | 真题及解析(8)

1. 数据库系统的核心是___________。 A数据库管理系统 B数据模型 C软件工具 D数据库 正确答案: A 2. 下列叙述中正确的是___________。 A线性表链式存储结构的存储空间可以是连续的,也可以是不连续的 B线性表链式存储结构与顺序存储结构的存储空间都是连续的 C线性表…

探讨JVM垃圾回收机制与内存泄漏

目录 1. 垃圾回收机制的基本原理 2. 内存泄漏的定义与表现 3. 垃圾回收机制的局限性 4. Finalizer导致的延迟 5. 不当使用静态集合 6. JNI资源未释放 7. 解决内存泄漏的方法 8. 结语 在Java虚拟机&#xff08;JVM&#xff09;的世界中&#xff0c;垃圾回收机制被设计用…

电磁波的信号加载说明

电磁波的信号加载电磁波(Electromagnetic wave)是由同相振荡 且互相垂直的电场与磁场在空间中衍生发射的振荡粒子波&#xff0c;是以波动的形式传播的电磁场&#xff0c;具有波粒二象性&#xff0c;其粒子形态称为光子&#xff0c;电磁波与光子不是非黑即白的关系&#xff0c;而…

外显和呼叫系统的关系

经常接到推销电销&#xff0c;对于不同号码显示&#xff0c;我们选择接听电话和挂断电话的概率也是不一样的。 我们接到号码有显示运营商和归属地名称。 例如&#xff1a;北京 移动&#xff0c;广东深圳 电信&#xff0c;广电&#xff0c;广东广州 虚拟运营商等&#xff1b; 有…

快速打通 Vue 3(二):响应式对象基础

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

Flink-【时间语义、窗口、水位线】

1. 时间语义 1.1 事件时间&#xff1a;数据产生的事件&#xff08;机器时间&#xff09;&#xff1b; 1.2 处理时间&#xff1a;数据处理的时间&#xff08;系统时间&#xff09;。 &#x1f330;&#xff1a;可乐 可乐的生产日期 事件时间&#xff08;可乐产生的时间&…

算法导论复习——CHP24 单源最短路

单源最短路径问题&#xff1a; 给定一个图G (V,E)&#xff0c;找出从给定的源点s∈V到其它每个结点v∈V的最短路径。 这样最短路径具有最优子结构性&#xff1a;两个结点之间的最短路径的任何子路径都是最短的。 基本概念 负权边&#xff1a;权重为负值的边称为负权重的边。 如…

【Vue3组件间通信理解】

Vue3组件通信方式 方式一&#xff1a;props方式二&#xff1a;自定义事件方式三&#xff1a;mitt方式四&#xff1a;v-model方式五&#xff1a;$attrs方式六&#xff1a;refs, parent方式七&#xff1a;provide, inject 总结来源于 尚硅谷vue3 大部分实现双向通信都是向子组件…

Vue3+TS+ElementPlus的安装和使用教程【详细讲解】

前言 本文简单的介绍一下vue3框架的搭建和有关vue3技术栈的使用。通过本文学习我们可以自己独立搭建一个简单项目和vue3的实战。 随着前端的日月更新&#xff0c;技术的不断迭代提高&#xff0c;如今新vue项目首选用vue3 typescript vite pinia……模式。以前我们通常使用…