机器学习基础入门(第四篇):无监督学习与聚类途径

news/2025/11/4 19:55:58/文章来源:https://www.cnblogs.com/yangykaifa/p/19191267

目录

一、前言

二、无监督学习的基本概念

1. 定义

2. 特点

3. 常见任务

三、聚类(Clustering)的核心思想

1. 定义

2. 应用场景

四、常见聚类方法

1. K-Means 聚类

原理

优缺点

Python 实现

2. 层次聚类(Hierarchical Clustering)

原理

Python 实现

3. DBSCAN(基于密度的聚类)

原理

Python 实现

4. 高斯混合模型(GMM)

原理

Python 实现

五、聚类效果评估

六、无监督学习的挑战与趋势

1. 挑战

2. 发展趋势

七、总结


一、前言

在前几篇文章中,我们学习了机器学习的基础知识、分类体系以及监督学习的原理与经典算法。监督学习在实际中非常常见,但它有一个关键前提:需要大量带标签的数据。

然而在现实中,标注往往昂贵甚至不可行:

电商平台积累了大量用户行为数据,却没有人逐一标注“用户群体”;

医学影像数据庞大,但人工标注需要专家参与,耗费极高;

工业传感器产生连续监测数据,但只有少量“故障”样本。

在这些场景中,无监督学习(Unsupervised Learning) 就显得尤为重要。它不依赖标签,而是通过分析数据特征和分布,自动发现潜在规律。本文将重点介绍无监督学习的代表方法——聚类(Clustering)。


二、无监督学习的基本概念

1. 定义

无监督学习是指:在数据没有标签的情况下,算法通过分析样本特征,发现数据内部结构和模式。

如果说监督学习是“老师给出题目和答案,学生学会解题”,那么无监督学习就是“学生自己在题目中寻找规律”。

2. 特点

  • 不需要标签,适合数据预处理阶段;

  • 结果带有探索性和启发性;

  • 常用于数据挖掘、模式发现和特征学习。

3. 常见任务

  • 聚类(Clustering)

  • 降维(Dimensionality Reduction)

  • 异常检测(Anomaly Detection)

  • 关联规则学习(Association Rule Learning)


三、聚类(Clustering)的核心思想

1. 定义

聚类是无监督学习最典型的任务,目标是:

将数据划分成若干组(簇),使同一簇的样本尽可能相似,不同簇的样本尽可能不同。

2. 应用场景

  • 电商:客户群体划分,支持精准营销;

  • 金融:异常交易检测;

  • 医学:基因表达数据分组,探索疾病亚型;

  • 图像处理:图像分割、压缩;

  • NLP:新闻自动分组、搜索结果聚类。


四、常见聚类方法

1. K-Means 聚类

原理

K-Means 通过迭代优化,将样本分配到最近的簇中心:

  1. 随机选择 K 个初始中心;

  2. 将每个样本分配到最近的中心;

  3. 更新每个簇的中心(均值);

  4. 重复 2-3 直到收敛。

优缺点
  • 优点:简单高效,适合大规模数据;

  • 缺点:需要指定 K,对初始中心敏感,只能发现球形簇。

Python 实现
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)
# 训练 K-Means
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
# 可视化
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=30, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, marker='x')
plt.title("K-Means Clustering")
plt.show()

运行结果:可以看到数据点被分为 4 个簇,每个簇中心用红色 “X” 标记。


2. 层次聚类(Hierarchical Clustering)

原理

层次聚类通过不断合并或拆分簇,形成树状的层级结构:

  • 自底向上(凝聚型):每个样本独立为簇,逐步合并;

  • 自顶向下(分裂型):所有样本为一类,逐步拆分。

Python 实现
import scipy.cluster.hierarchy as sch
from sklearn.cluster import AgglomerativeClustering
# 层次聚类
hc = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward')
y_hc = hc.fit_predict(X)
# 树状图
dendrogram = sch.dendrogram(sch.linkage(X, method='ward'))
plt.title("Hierarchical Clustering Dendrogram")
plt.show()

树状图可以帮助选择合适的簇数。


3. DBSCAN(基于密度的聚类)

原理

DBSCAN 根据样本密度定义簇:

  • 核心点:邻域内点数 ≥ MinPts;

  • 密度可达:可以从核心点到达的点;

  • 噪声点:无法归类到任何簇的点。

Python 实现
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
y_db = dbscan.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_db, cmap='plasma', s=30)
plt.title("DBSCAN Clustering")
plt.show()

特点:不需要指定簇数,可识别任意形状的簇,但对参数 eps、MinPts 敏感。


4. 高斯混合模型(GMM)

原理

GMM 假设数据由多个高斯分布混合而成,通过 EM 算法估计参数,输出每个点属于簇的概率(软聚类)。

Python 实现
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=4, covariance_type='full')
y_gmm = gmm.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_gmm, cmap='coolwarm', s=30)
plt.title("Gaussian Mixture Model Clustering")
plt.show()

特点:比 K-Means 更灵活,能发现椭圆簇。


五、聚类效果评估

无监督学习没有“标准答案”,评估聚类效果比较困难。常见方法:

  1. 内部指标(基于样本间距离):

    • 轮廓系数(Silhouette Coefficient):取值 [-1,1],越大越好。

    • Davies-Bouldin 指数。

  2. 外部指标(有少量标签时可用):

    • 调整兰德指数(ARI)。

    • 互信息(Mutual Information)。

  3. 可视化评估:用 PCA、t-SNE 降维后直观查看。

from sklearn.metrics import silhouette_score
score = silhouette_score(X, y_kmeans)
print("K-Means 轮廓系数:", score)

六、无监督学习的挑战与趋势

1. 挑战

  • 簇数选择困难;

  • 高维空间中“距离度量失效”;

  • 聚类结果可解释性弱。

2. 发展趋势

  • 深度聚类:结合神经网络和聚类方法(如 DEC)。

  • 自监督学习:通过伪标签提升无监督能力(如 SimCLR, BYOL)。

  • 可解释聚类:让聚类结果更直观、可用于决策。


七、总结

无监督学习是机器学习的重要分支,在缺乏标注数据的情况下尤其有价值。其中,聚类是最典型的任务,主要方法包括:

K-Means:高效、简单;

层次聚类:能揭示层次关系;

DBSCAN:发现任意形状簇;

GMM:基于概率的软聚类。

借助 Python 的 scikit-learn,我们能快速实现这些算法并进行可视化。聚类不仅帮助我们更好地理解数据,还能为后续建模和应用奠定基础。

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

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

相关文章

图上状压 DP

容易发现每年都在考这玩意。每年都不会。 AT_abc213_g [ABC213G] Connectivity 2 显然删边可以变成保留边。 定义状态函数 \(f_s\) 表示保留边,使得 \(s\) 中的点联通的方案数。那么对于 \(k=k0\) 来说,答案应该就是…

k8s删除Terminating状态的命名空间

k8s删除Terminating状态的命名空间原创于 2021-04-07 16:14:02 发布 CC 4.0 BY-SA版权 K8S/Kubernetes文章已被社区收录加入社区 K8S专栏收录该内容5 篇文章订阅专栏在部署Kubesphere时遇到命名空间kubesphere-system处…

【实用脚本】一键安装Oracle19c数据库

【实用脚本】一键安装Oracle19c数据库完整脚本: #!/bin/bash #Oracle 一键安装工具 log_file="/var/log/oracle_install_$(date +%Y%m%d_%H%M%S).log" # 屏幕输出只显示状态提示,日志文件记录完整详细信息…

程序员必逛的9个开发者社区推荐

程序员必逛的9个开发者社区推荐大家好,我是jobleap.cn的小九。 在技术飞速迭代的今天,开发者想要保持竞争力,离不开优质社区的滋养。无论是解决突发Bug、学习前沿技术,还是交流实战经验、寻找合作机会,合适的社区…

CleanMyMac X 4.14.2 dmg 安装教程|Mac 清理软件详细安装步骤

CleanMyMac X 4.14.2 dmg 安装教程|Mac 清理软件详细安装步骤​ CleanMyMac X​ 是一款专门为 ​Mac 电脑​ 设计的 ​系统清理和优化工具一、下载文件 CleanMyMac X 4.14.2.dmg​ 文件安装包下载: https://pan.quar…

java-迭代器

java-迭代器1.迭代器在遍历集合的时候是不依赖索引的 2.迭代器需掌握三个方法: Iteratorit=list.iterator(); while(it.hasNext()){ String str=it.next(); System.out.println(str); } 3.迭代器的四个细节: *如果当…

go语言访问新浪股票(hq.sinajs.cn)

config.go: package main// 股票代码配置 - 简化版本,只包含主要指数和热门股票 var stockSymbols = []string{// 主要指数"sh000001", // 上证指数"sh000016", // 上证50"sh000300", …

优化算法三剑客:SGD、Adam、AdamW的深度对比

优化算法三剑客:SGD、Adam、AdamW的深度对比 1. 引言:模型训练的"导航系统" 想象一下,你正在一个复杂的地形中寻找最低点(最小损失),四周浓雾弥漫(高维空间不可视)。优化算法就是你的GPS导航系统,它…

某大厂跳动面试:计算机网络相关问题解析与总结 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

动手动脑5

https://files.cnblogs.com/files/blogs/847696/动手动脑5.zip?t=1762256201&download=true程序在第5行有一个问题: int i=1, j=0, k; k=i/j; // 这里会在 try-catch 块之前就抛出异常,导致程序终止 正确的异常…

AI元人文:悟空机制与反思——论智能文明的自我超越之道

AI元人文:悟空机制与反思——论智能文明的自我超越之道 引言 “AI元人文”并非一个已完成的理论城堡,而是一个正在生长中的思想丛林。本文所探讨的“悟空机制”,与笔者此前在相关论述中提及的“决策机制”等概念,在…

从零开始搭建你的 Hexo 静态博客(支持 macOS 与 Windows)

从零开始搭建你的 Hexo 静态博客(支持 macOS 与 Windows)本文将手把手教你如何在 macOS 和 Windows 上使用 Hexo 搭建一个属于自己的静态博客,并部署到 GitHub Pages。文末还附带常见问题及解决方案,助你避开“坑”…

cmake也是个恶大的玩意

cmake也是个恶大的玩意/home/user# apt show scons Package: scons Version: 4.4.0+dfsg-1 Priority: optional Section: devel Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.org> Installed-Size: 2,671 …

实用指南:Python 运算符与列表(list)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

接口请求测试题目

接口请求测试题目1. 基础HTTP GET接口请求测试 操作步骤: 1. 打开JMeter,新建测试计划,右键添加“线程组”(线程数1、循环次数1)。 2. 线程组下添加“HTTP请求”,服务器名称/IP填写httpbin.org,端口80,请求方法…

iOS - 从 @property 开始

核心概念本质:@property 是一组访问器方法的声明 (setter/getter) ,编译器可以自动“合成”「访问器」以及「底层存储(ivar)」,并且允许用点语法调用。例如:@property (nonatomic) NSInteger age;编译器等价(自…

使用涡流效应将伽马射线收集到一起的装置

使用涡流效应将伽马射线收集到一起的装置 用中子轰击u235原子核产生伽马射线,通过螺旋线圈使伽马射线的运动轨道成为一个螺旋曲线。在这个螺旋曲线的上面安装一个超导线圈,在这个超导线圈上面安装另一个超导线圈,,…

ESP32 中断

中断 含义:程序被中断程序打断转去执行中断程序 将中断附加到GPIO void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode); ISR 函数原型 void ISR() {//中断发生时执行的代码 }外部中断类型…

25.11.4随笔联考总结

考试 正常通读题面,发现前面两道题比较可做。T3 挺神秘的,我猜那是子序列自动机 dp,T4 一道果的 ds 题。 开题顺序 2134,本来纠结了一会 34 先开谁,最后随缘了。几分钟会了 2 然后写了过了,通知要去体检于是中途…

docker 常用命令本地部署打包

要查看特定容器的挂载设置,请执行以下命令: docker inspect <容器ID或名称> 进入 Docker 容器内部 使用 docker exec 这是推荐的方法,特别是当你想打开一个新的终端会话时。docker exec 可以在运行中的容器中…