常见的五种聚类算法总结

news/2024/8/26 17:22:00 标签: 算法, 聚类, 机器学习

常见的聚类算法总结

1. K-Means 聚类

描述

K-Means 是一种迭代优化的聚类算法,它通过最小化样本点到质心的距离平方和来进行聚类

思想

  • 随机选择 K 个初始质心。
  • 分配每个数据点到最近的质心,形成 K 个簇。
  • 重新计算每个簇的质心。
  • 重复上述步骤,直到质心不再变化或达到最大迭代次数。

代码例子

from sklearn.cluster import KMeans
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [1, 4], [1, 0], 
              [10, 2], [10, 4], [10, 0]])

# 定义 KMeans 模型
kmeans = KMeans(n_clusters=2, random_state=0)

# 训练模型
kmeans.fit(X)

# 获取聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

print("聚类标签:", labels)
print("质心:", centroids)

2. 层次聚类 (Hierarchical Clustering)

描述

层次聚类是一种基于树状结构的聚类方法,分为自下而上(凝聚)和自上而下(分裂)两种。

思想

  • 自下而上:每个数据点开始为一个簇,不断合并最相似的簇,直到所有点合并为一个簇或达到预定的簇数。
  • 自上而下:开始时将所有数据点视为一个簇,不断拆分最不相似的簇,直到每个点为一个簇或达到预定的簇数。

代码例子

from sklearn.cluster import AgglomerativeClustering

# 定义层次聚类模型
hierarchical = AgglomerativeClustering(n_clusters=2)

# 训练模型
hierarchical.fit(X)

# 获取聚类结果
labels = hierarchical.labels_

print("聚类标签:", labels)

3. DBSCAN 聚类

描述

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够发现任意形状的簇,同时识别噪声点。

思想

  • 选择一个样本点,如果在其 ε 邻域内的点数不少于 minPts,则将这些点视为一个簇的核心点。
  • 将核心点邻域内的点添加到该簇中,重复这个过程,直到簇不再增长。
  • 标记未分配到任何簇的点为噪声点。

代码例子

from sklearn.cluster import DBSCAN

# 定义 DBSCAN 模型
dbscan = DBSCAN(eps=3, min_samples=2)

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 训练模型
dbscan.fit(X)

# 获取聚类结果
labels = dbscan.labels_

print("聚类标签:", labels)

4. 均值漂移 (Mean Shift) 聚类

描述

均值漂移是一种基于密度的聚类算法,通过不断移动数据点到高密度区域的中心,找到簇的质心。

思想

  • 对每个点,计算其在一定窗口(带宽)内的密度中心,将点移动到密度中心。
  • 重复上述过程,直到所有点都在其密度中心。
  • 将密度中心附近的点合并为一个簇。

代码例子

from sklearn.cluster import MeanShift
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 定义均值漂移模型
meanshift = MeanShift(bandwidth=2)

# 训练模型
meanshift.fit(X)

# 获取聚类结果
labels = meanshift.labels_
centroids = meanshift.cluster_centers_

print("聚类标签:", labels)
print("质心:", centroids)

5. 高斯混合模型 (Gaussian Mixture Model, GMM)

描述

高斯混合模型是一种基于概率模型的聚类方法,假设数据由多个高斯分布组成,通过期望最大化(EM)算法估计参数。

思想

  • 初始化每个高斯分布的参数。
  • E步:计算每个样本属于每个高斯分布的概率。
  • M步:根据概率更新高斯分布的参数。
  • 重复上述过程,直到参数收敛。

代码例子

from sklearn.mixture import GaussianMixture
import numpy as np

# 生成示例数据
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

# 定义高斯混合模型
gmm = GaussianMixture(n_components=2, random_state=0)

# 训练模型
gmm.fit(X)

# 获取聚类结果
labels = gmm.predict(X)
centroids = gmm.means_

print("聚类标签:", labels)
print("质心:", centroids)

http://www.niftyadmin.cn/n/5558371.html

相关文章

基于LSTM及其变体的回归预测

1 所用模型 代码中用到了以下模型: 1. LSTM(Long Short-Term Memory):长短时记忆网络,是一种特殊的RNN(循环神经网络),能够解决传统RNN在处理长序列时出现的梯度消失或爆炸的问题。L…

【iOS】OC类与对象的本质分析

目录 前言clang常用命令对象本质探索属性的本质对象的内存大小isa 指针探究 前言 OC 代码的底层实现都是 C/C代码,OC 的对象都是基于 C/C 的数据结构实现的,实际 OC 对象的本质就是结构体,那到底是一个怎样的结构体呢? clang常用…

提高Java程序效率:ImmutableList、Stream API 和 JSON序列化实战指南

常用列表构建方法: 1.ImmutableList.of() : 静态方法、不可变的列表 可以接受任意数量的参数,并将它们作为元素添加到新创建的列表中,但是一旦创建,集合的内容就不能被改变。在多线程环境中非常有用,因为…

linux后门教程

linux后门教程 alias 用法 系统默认别名:alias 设置别名:alias lsls -laih 删除别名:unalias ls **加参数:**alias ls‘ls -laih;pwd’ 注意 系统启动默认加载的配置文件 /etc/profile 切换用户就会执行/etc/profile /etc/bash…

Unsloth 微调 Llama 3

本文参考: https://colab.research.google.com/drive/135ced7oHytdxu3N2DNe1Z0kqjyYIkDXp 改编自:https://blog.csdn.net/qq_38628046/article/details/138906504 文章目录 一、项目说明安装相关依赖下载模型和数据 二、训练1、加载 model、tokenizer2、…

JS中对象的方括号[]和点.【对象属性的访问和设置】

在 JavaScript 中,可以使用多种方式来访问和设置对象的属性, 包括点表示法和方括号表示法。 点表示法和方括号表示法 点表示法:使用点号(.)来访问或设置对象的属性。方括号表示法:使用方括号([]&#xff…

可解释医学视觉问答的反事实因果干预| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 Counterfactual Causal-Effect Intervention for Interpretable Medical Visual Question Answering 可解释医学视觉问答的反事实因果干预 01 文献速递介绍 深度学习的进步在计算机视觉、自然语言处理和信息检索领域成功地取得了最先进的(SOTA&…

【Leetcode】二十一、前缀树 + 词典中最长的单词

文章目录 1、背景2、前缀树Trie3、leetcode208:实现Trie4、leetcode720:词典中最长的单词 1、背景 如上,以浏览器搜索时的自动匹配为例: 如果把所有搜索关键字放一个数组里,则:插入、搜索一个词条时&#x…