当前位置: 首页 > news >正文

机器学习之聚类算法

一、聚类算法基础

1.核心概念

        聚类算法是一种无监督学习算法,核心逻辑是依据样本间的相似性将数据自动划分到不同类别,无需预先标注类别标签。其核心目标是在缺乏先验知识的情况下,挖掘数据集中隐藏的内在结构与模式。

        相似性度量:常用欧式距离(适用于连续型数据,计算两点在多维空间中的直线距离),但并非唯一方式,还包括曼哈顿距离(适用于高维数据,降低异常值影响)、余弦相似度(适用于文本、图像等向量数据,衡量方向相似性)等。

        聚类准则:不同准则会产生不同结果,例如 “最小化簇内样本距离”“最大化簇间样本距离” 等,需根据业务场景选择。

2.应用场景

        聚类算法在实际业务中应用广泛,核心价值是实现 “数据分组” 与 “模式识别”,典型场景包括:

        用户运营:用户画像构建(如按消费能力、年龄、兴趣划分用户群体)、精准广告推荐(向同类用户推送相似产品)。

        互联网服务:搜索引擎流量推荐(将用户搜索行为聚类,匹配同类内容)、新闻聚类(按主题将新闻分类,便于用户筛选)。

        风险控制:恶意流量识别(聚类异常访问行为)、信用卡异常消费检测(识别与用户常规消费模式差异大的交易)。

        技术领域:图像分割(将图像中相似像素聚类,提取目标区域)、基因片段分析(发掘功能相同的基因片段)、基于位置的商业推送(向同一区域用户推送周边服务)。

3.算法分类

聚类算法可从 “颗粒度” 和 “实现方法” 两个维度划分:

分类维度具体类型核心特点
颗粒度粗聚类聚类结果类别数量少,每个类别包含大量样本,适用于快速概览数据分布
细聚类聚类结果类别数量多,每个类别样本更精细,适用于精准分群场景
实现方法K-means 聚类基于 “质心” 划分,通用性强、效率高,是工业界最常用的聚类算法
层次聚类通过逐层合并或拆分簇实现聚类,可形成树状聚类结构( dendrogram ),适用于需明确层级关系的数据
DBSCAN 聚类基于密度的算法,无需预先指定簇数量,能识别任意形状的簇,同时检测离群点,适用于含噪声、非凸分布的数据
谱聚类基于图论的算法,将数据转化为图结构,通过图切割实现聚类,适用于高维数据或非线性分布数据

二、K-means算法详解

1.核心原理

        K-means 是基于 “距离” 的聚类算法,核心思想是通过迭代优化,使 “簇内样本距离最小化、簇间样本距离最大化”,最终得到稳定的聚类结果。

2.实现流程

(1)确定K值:根据业务需求或数据特征,预先设定最终聚类的类别数量 K(K 的选择需结合后续评估方法优化)。

(2)初始化质心:从所有样本中随机选择 K 个样本作为初始聚类中心(质心),初始质心的选择会影响最终结果,优化方式包括 “多次随机初始化取最优”“K-means++ 算法(使初始质心尽可能分散)”。

(3)样本分配:计算每个样本到 K 个质心的距离(默认欧式距离),将样本分配到距离最近的质心所属的簇。

(4)更新质心:对每个簇内的所有样本,计算其在各特征维度上的平均值,作为该簇新的质心。

(5)迭代终止:对比新质心与旧质心的位置,若质心不再变化(或变化小于设定阈值),则聚类收敛,停止迭代;否则返回步骤 3,重复样本分配与质心更新过程。

3.关键示例

以 15 个样本点(含 X、Y 坐标)聚类为例:

  1. 设定 K=2,随机选择 P1(7,7)、P2(2,3)作为初始质心。
  2. 计算其他样本(如 P3(6,8)、P4(1,4))到 P1、P2 的欧式距离,将 P3 分配到 P1 簇(距离更近),P4 分配到 P2 簇。
  3. 计算 P1 簇所有样本的 X、Y 平均值,得到新质心 P1'(7.3,7.2);同理得到 P2 簇新质心 P2'(2.3,3.3)。
  4. 重复步骤 2-3,直至新质心与旧质心完全一致,最终将 15 个样本分为 2 个簇,簇内样本相似度高。

三、聚类算法API与实践

1.核心API(基于sklearn)

sklearn 库提供了简洁的聚类算法接口,以 K-means 为例:

类定义:sklearn.cluster.KMeans(n_clusters=8, random_state=None, max_iter=300)

        关键参数:

                n_clusters=8:聚类类别数量,默认 8,需结合业务或评估方法调整。

                random_state=None:随机种子,用于固定初始质心,确保实验可复现。

                max_iter=300:最大迭代次数,默认 300,防止算法陷入无限循环。

        核心方法:

                fix(x):仅对数据 X 进行聚类训练,计算质心,不返回样本类别。

                predict(x):基于已训练的模型,预测数据 X 中每个样本的类别。

                fit_predict(x):同时完成训练与预测,返回每个样本的类别,等价于fit(X)后调用predict(X)

2.实践步骤(以随机二维数据集为例)

(1)环境准备:导包

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs  # 生成模拟聚类数据
from sklearn.metrics import calinski_harabasz_score  # 聚类评估指标

(2)创建数据集

X, y = make_blobs(n_samples=1000,  # 样本数量n_features=2,    # 特征维度centers=[[-1,-1], [0,0], [1,1], [2,2]],  # 真实质心位置cluster_std=[0.4, 0.2, 0.2, 0.2],  # 各簇数据标准差random_state=22  # 固定随机种子
)

(3)模型训练与预测

# 设定K=3,训练并预测
y_pred = KMeans(n_clusters=3, random_state=22).fit_predict(X)

(4)结果可视化:绘制聚类效果

plt.scatter(X[:, 0], X[:, 1], c=y_pred)  # 按预测类别着色
plt.title("K-means Clustering Result")
plt.show()

(5)模型评估:适用CH系数评估效果

print("CH Score:", calinski_harabasz_score(X, y_pred))  # 数值越大,聚类效果越好

四、聚类模型评估方法

聚类评估的核心是量化 “簇内紧凑性” 与 “簇间分离性”,常用指标包括以下四类:

(1):误差平方和(SSE)

        定义:计算所有样本到其所属簇质心的距离平方和

        公式:(k为簇数,(C_i)为第i个簇,p为簇内样本,(m_i)为第i个簇的质心)。

        解读:SSE 越小,说明簇内样本越集中,聚类效果越好;但 SSE 会随簇数 K 的增加持续减小(K=n 时 SSE=0),因此不能单独用于确定最优 K 值,需结合 “肘部法” 使用。

(2)肘部法(Elbow Method)

        作用:基于 SSE 确定最优 K 值,解决 SSE 随 K 增大持续下降的问题。

        原理:

                1.遍历K 从 1 到 n(样本总数),对每个 K 训练 K-means 模型,计算对应的 SSE。

                2.绘制“K-SSE” 曲线,曲线下降过程中会出现一个 “拐点”(类似手肘形状),拐点处 K 值即为最优值 —— 此时增加 K 值,SSE 下降率突然变缓,继续增加 K 会导致过拟合(簇划分过细,失去业务意义)。

        示例:在含 4 个真实簇的数据集上,K=4 时 SSE 下降趋缓,故最优 K=4。

(3)轮廓系数(SC)

        定义:综合考虑 “簇内紧凑性” 与 “簇间分离性”

        公式:(a为样本到簇内其他样本的平均距离,b为样本到其他所有簇的平均距离的最小值)。

        解读:1.SC 取值范围为 [-1,1],值越接近 1,说明样本在簇内越紧凑、与其他簇越分离,聚类效果越好。2.SC=0 时,样本处于两个簇的边界;SC<0 时,样本可能被分配到错误的簇。

        优势:无需依赖真实类别标签,适用于无监督场景;但计算复杂度较高(需遍历所有样本与簇),大数据集下效率较低。

五、扩展与注意事项

(1)算法局限性与优化

        局限性:

                需预先指定 K 值,对初始质心敏感(易陷入局部最优),可通过 K-means++(优化初始质心选择)、多次初始化取最优解缓解。

                对非凸分布数据(如环形、螺旋形数据)聚类效果差,此时需改用 DBSCAN、谱聚类等算法。

                对异常值敏感(异常值会严重偏离质心),需先通过箱线图、Z-score 等方法处理异常值。

        适用场景

                数据含噪声 / 非凸分布:优先 DBSCAN(无需指定 K,可识别离群点)。

                需明确层级关系(如公司组织架构、物种分类):选择层次聚类。

                高维数据(如文本向量、图像特征):优先谱聚类(降维后聚类,避免维度灾难)。

(2)实战技巧

        1.特征预处理:聚类算法对特征尺度敏感(如 “年收入(千级)” 与 “消费指数(0-100)”),需先通过 StandardScaler(标准化)或 MinMaxScaler(归一化)统一特征尺度。

        2.多指标综合评估:单一指标可能存在偏差,例如 SSE 最小化可能导致 K 过大,需结合肘方法、SC、CH 共同确定最优 K 值。

        3.业务验证:聚类结果需结合业务逻辑验证,例如 “客户聚类” 需与运营经验匹配,避免仅追求技术指标而脱离实际需求。


文章转载自:

http://deo0RIwZ.rynqh.cn
http://8meNSsbo.rynqh.cn
http://XQhW2oZs.rynqh.cn
http://rKrayKuT.rynqh.cn
http://4AEoQJRg.rynqh.cn
http://U9cOFcoj.rynqh.cn
http://vRjo2sdi.rynqh.cn
http://qeQ9yASb.rynqh.cn
http://yhUehx6u.rynqh.cn
http://ofCRwm3Q.rynqh.cn
http://vRTx4CfN.rynqh.cn
http://jjmZCasl.rynqh.cn
http://tTN7HKJS.rynqh.cn
http://RIqiegHQ.rynqh.cn
http://5mJAyHcZ.rynqh.cn
http://yJ55e3vK.rynqh.cn
http://lBztZiCU.rynqh.cn
http://yWFH7H2B.rynqh.cn
http://620ujwVP.rynqh.cn
http://I06PJ2bC.rynqh.cn
http://6YDV0uzD.rynqh.cn
http://rpZO6wgu.rynqh.cn
http://09dGRhLY.rynqh.cn
http://Sx5WbofK.rynqh.cn
http://o7OpHS3I.rynqh.cn
http://thedtTnZ.rynqh.cn
http://zq2uTe09.rynqh.cn
http://aGIKw6JP.rynqh.cn
http://KbirIJ3z.rynqh.cn
http://HwsSYJDY.rynqh.cn
http://www.dtcms.com/a/374292.html

相关文章:

  • bash:trtexec:command not found
  • 今日分享:C++ Stack和queue(栈与队列)
  • Avalonia:使用附加属性实现命令与事件的绑定
  • AI的核心操控:从算法到硬件的协同进化
  • C++初阶(5)类和对象(中)
  • Linux I/O 访问架构深入分析
  • 实现一个可中断线程的线程类
  • Java全栈学习笔记31
  • 算法之双指针
  • js定义变量时let和cons的使用场景
  • DataLens:一款现代化的开源数据分析和可视化工具
  • 人工智能-python-深度学习-神经网络-MobileNet V1V2
  • TDengine 选择函数 Last() 用户手册
  • MySQL的数据模型
  • vulnhub:Kioptrix level 2
  • C++ Int128 —— 128位有符号整数类实现剖析
  • 前端部署,又有新花样?
  • Neural Jacobian Field学习笔记 - omegaconf
  • C++(day8)
  • 设计模式:模板方法模式
  • 英发睿能闯关上市:业绩波动明显,毅达创投退出,临场“移民”
  • 华清远见25072班网络编程day1
  • 深入理解 AbstractQueuedSynchronizer (AQS):Java 并发的排队管家
  • 32位CPU架构是如何完成两数(32位)相加的指令的?
  • 深度学习中的损失函数都有哪些,大模型时代主要用的损失函数有哪些,中间有什么区别?
  • java:io流相关类的继承关系梳理
  • PAT 1004 Counting Leaves
  • Linux操作系统shell脚本语言-第六章
  • 基于Springboot + vue3实现的小区物业管理系统
  • 自动化测试DroidRun