在机器学习领域,无监督学习是与监督学习并列的核心分支,它以 “无需人工标注标签” 的特性,成为挖掘数据隐藏规律、探索未知模式的重要工具。无论是数据预处理中的特征降维,还是商业场景中的用户分群,无监督学习都发挥着不可替代的作用。本文将从理论基础、核心算法、实践案例三个维度,带你全面掌握无监督学习的关键知识点,助力入门者快速上手。
一、无监督学习理论基础:从 “无标签” 中找规律
1.1 无监督学习的定义与核心目标
无监督学习(Unsupervised Learning)是指模型仅通过无标注的原始数据(即只有输入特征 X,无对应输出标签 y),自主挖掘数据内在结构、分布规律或隐藏关联的机器学习方法。其核心目标可概括为两点:
- 聚类(Clustering):将相似的数据样本归为同一类别,使类内样本相似度高、类间样本相似度低,例如用户分群、异常检测中的 “正常 / 异常” 划分。
- 降维(Dimensionality Reduction):在保留数据关键信息的前提下,减少特征维度,解决 “维度灾难”(高维数据计算量大、冗余信息多的问题),例如图像压缩、特征可视化。

1.2 无监督学习与监督学习的核心区别
很多入门者容易混淆无监督学习与监督学习,二者的核心差异集中在 “数据标签” 和 “学习目标” 上,具体对比如下:
|
对比维度 |
无监督学习 |
监督学习 |
|
数据要求 |
仅需输入特征 X(无标签) |
需输入特征 X + 输出标签 y(标注数据) |
|
学习目标 |
挖掘数据内在结构 / 规律 |
学习 X 到 y 的映射关系(预测) |
|
典型应用场景 |
聚类、降维、异常检测 |
分类、回归 |
|
结果可解释性 |
多为 “模式发现”,解释性较弱 |
多为 “明确预测”,解释性较强 |
1.3 无监督学习的关键假设
无监督学习能有效工作,依赖于对数据的两个核心假设,这也是选择算法的重要依据:
- 相似性假设:特征相似的数据样本,大概率属于同一类别(适用于聚类算法,如 K-Means)。
- 低维结构假设:高维数据通常隐含低维的 “核心特征”(适用于降维算法,如 PCA)。
二、无监督学习核心算法:原理、优缺点与适用场景
无监督学习算法种类繁多,入门阶段需重点掌握聚类算法和降维算法两大类,以下为最常用的 5 种核心算法详解。
2.1 聚类算法:给数据 “自动分类”
(1)K-Means:最经典的聚类算法
- 核心原理:
- 随机选择 K 个样本作为初始 “聚类中心”(K 需人工指定,如通过肘部法则确定);
- 计算每个样本到 K 个聚类中心的距离(常用欧氏距离),将样本归到距离最近的聚类中心所属类别;
- 重新计算每个类别的 “均值”,作为新的聚类中心;
- 重复步骤 2-3,直到聚类中心不再变化或达到迭代次数上限。
- 优缺点:
- 优点:计算速度快、易于实现,适合处理大规模数据;
- 缺点:需提前指定 K 值、对初始聚类中心敏感(易陷入局部最优)、对非球形聚类(如环形数据)效果差。
- 适用场景:用户分群(如电商平台按消费习惯分群)、图像分割(简单场景下的物体划分)、文档聚类(按主题归类新闻)。
(2)DBSCAN:基于密度的聚类算法
- 核心原理:
以 “密度” 为核心,通过两个参数定义聚类:
- ε(epsilon):样本的 “邻域半径”;
- MinPts:邻域内最少样本数。
算法将样本分为三类:
- 核心点:邻域内样本数≥MinPts 的点;
- 边界点:邻域内样本数 < MinPts,但在核心点的邻域内;
- 噪声点:既不是核心点也不是边界点的点。
最终,由核心点及其可达的边界点构成一个聚类,噪声点则视为异常数据。
- 优缺点:
- 优点:无需指定 K 值、能自动识别异常点、对非球形聚类效果好;
- 缺点:对 ε 和 MinPts 参数敏感(需反复调试)、高维数据中距离计算误差大(需先降维)。
- 适用场景:异常检测(如信用卡欺诈识别、工业设备故障检测)、地理数据聚类(如城市商圈划分)。
2.2 降维算法:给数据 “瘦身”
(1)PCA(主成分分析):最常用的线性降维算法
- 核心原理:
通过 “线性变换”,将高维数据映射到低维空间,且保证映射后的数据方差最大(即保留最关键的信息)。具体步骤:
- 对原始数据进行标准化(消除量纲影响,如将特征值缩放到 [0,1]);
- 计算数据的协方差矩阵(衡量特征间的相关性);
- 求解协方差矩阵的特征值和特征向量(特征值越大,对应特征向量的 “信息承载能力” 越强);
- 选择前 k 个最大特征值对应的特征向量,构成 “降维矩阵”;
- 将原始数据与降维矩阵相乘,得到低维数据。
- 优缺点:
- 优点:计算高效、能去除特征间的冗余(如高度相关的特征);
- 缺点:仅适用于线性数据(无法处理非线性结构数据)、降维后的数据可解释性弱(主成分是原特征的线性组合)。
- 适用场景:高维数据预处理(如图像数据降维后输入分类模型)、数据可视化(如将 100 维数据降维到 2 维后画图)。
(2)t-SNE:非线性降维算法(可视化首选)
- 核心原理:
针对 PCA 无法处理非线性数据的问题,t-SNE 通过 “概率分布映射” 实现降维:
- 高维空间:计算样本间的 “高斯相似度”(相似样本概率高,不相似样本概率低);
- 低维空间:计算样本间的 “t 分布相似度”(t 分布尾部更宽,能缓解高维数据中的 “拥挤问题”);
- 通过梯度下降最小化高维与低维空间相似度分布的 “KL 散度”,最终得到低维映射结果。
- 优缺点:
- 优点:对非线性数据降维效果好,降维后的数据可视化清晰度高(如聚类边界明显);
- 缺点:计算速度慢(不适合百万级样本)、对参数(如困惑度 perplexity)敏感、无法保留全局结构(仅关注局部相似性)。
- 适用场景:高维数据可视化(如 MNIST 手写数字数据集降维可视化、高维特征的聚类结果展示)。
(3)AutoEncoder(自编码器):基于深度学习的降维 / 特征提取
- 核心原理:
自编码器是一种神经网络模型,通过 “编码 - 解码” 结构实现降维:
- 编码层:将高维输入 X 压缩为低维 “隐向量”(即降维后的特征);
- 解码层:将隐向量重构为与输入 X 尽可能相似的输出 X';
- 模型训练目标:最小化 X 与 X' 的重构误差(如 MSE 均方误差)。
训练完成后,编码层的输出即为低维特征,可用于后续的分类、聚类任务。
- 优缺点:
- 优点:能处理非线性数据、可通过加深网络(如 CNN-AutoEncoder 处理图像)捕捉复杂特征、降维后的特征可用于迁移学习;
- 缺点:需要大量数据训练、模型复杂度高(需调参网络结构)、训练时间长。
- 适用场景:复杂数据降维(如图像、文本数据)、特征提取(如从 raw 数据中自动提取有效特征,替代人工特征工程)。
三、无监督学习实践:基于 Python 的 K-Means 聚类与 PCA 降维案例
理论学习后,通过代码实践才能真正掌握无监督学习的应用。以下以 “鸢尾花数据集(Iris)” 为例,分别演示 K-Means 聚类和 PCA 降维的完整流程(使用 Python 的 scikit-learn 库)。
3.1 环境准备
3.2 案例 1:K-Means 聚类 —— 鸢尾花品种自动划分
步骤 1:加载数据与预处理
鸢尾花数据集包含 3 个品种(标签)、4 个特征(花瓣长度、花瓣宽度、萼片长度、萼片宽度),此处我们隐藏标签,用 K-Means 自动聚类:
步骤 2:确定最优 K 值(肘部法则)
通过计算不同 K 值对应的 “轮廓系数” 或 “惯性(inertia,簇内平方和)”,选择拐点处的 K 值:
# 计算不同K值的惯性
inertia = []
k_range = range(1, 10)
for k in k_range:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
inertia.append(kmeans.inertia_)
# 绘制肘部图
plt.figure(figsize=(8, 4))
plt.plot(k_range, inertia, 'bo-')
plt.xlabel('K值(聚类数量)')
plt.ylabel('惯性(簇内平方和)')
plt.title('K-Means最优K值选择(肘部法则)')
plt.grid(True)
plt.show()
结果分析:惯性随 K 值增大而减小,当 K=3 时,惯性下降速度明显放缓(出现 “肘部”),因此选择 K=3。
步骤 3:训练 K-Means 模型并评估
# 3. 训练K-Means模型(K=3)
kmeans = KMeans(n_clusters=3, random_state=42)
y_pred = kmeans.fit_predict(X_scaled)
# 4. 聚类结果可视化(因特征为4维,先通过PCA降维到2维)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 绘制真实标签与聚类标签对比图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))
# 真实标签
ax1.scatter(X_pca[:, 0], X_pca[:, 1], c=y_true, cmap='viridis', s=50)
ax1.set_title('真实标签(鸢尾花品种)')
ax1.set_xlabel('PCA维度1')
ax1.set_ylabel('PCA维度2')
# 聚类标签
ax2.scatter(X_pca[:, 0], X_pca[:, 1], c=y_pred, cmap='viridis', s=50)
# 绘制聚类中心
centers_pca = pca.transform(kmeans.cluster_centers_)
ax2.scatter(centers_pca[:, 0], centers_pca[:, 1], c='red', marker='X', s=200, label='聚类中心')
3.3 案例 2:PCA 降维 —— 鸢尾花数据降维与可视化
步骤 1:训练 PCA 模型并降维
from sklearn.decomposition import PCA
# 1. 加载并标准化数据(复用案例1的X_scaled)
# 2. 训练PCA模型(降维到2维)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 3. 查看主成分的解释方差比例(衡量信息保留程度)
print(f'主成分1解释方差比例:{pca.explained_variance_ratio_[0]:.4f}')
print(f'主成分2解释方差比例:{pca.explained_variance_ratio_[1]:.4f}')
print(f'总解释方差比例:{sum(pca.explained_variance_ratio_):.4f}')
# 输出:总解释方差比例约0.977,说明降维后保留了97.7%的原始信息
步骤 2:降维结果可视化
# 绘制PCA降维后的散点图(按真实标签着色)
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_true, cmap='viridis', s=60, alpha=0.8)
plt.xlabel(f'主成分1(解释方差:{pca.explained_variance_ratio_[0]:.2%})')
plt.ylabel(f'主成分2(解释方差:{pca.explained_variance_ratio_[1]:.2%})')
plt.title('PCA降维结果可视化(鸢尾花数据集)')
plt.legend(handles=scatter.legend_elements()[0], labels=list(iris.target_names))
plt.grid(True, alpha=0.3)
plt.show()
结果分析:降维后的数据仍能清晰区分 3 个品种,且保留了 97.7% 的原始信息,证明 PCA 降维效果优秀。
四、无监督学习入门常见问题与避坑指南
- “不知道 K 值怎么选?”
除了案例中用的 “肘部法则”,还可使用 “轮廓系数(Silhouette Score)”:计算每个样本的轮廓系数(取值范围 [-1,1],越接近 1 聚类效果越好),选择轮廓系数最大的 K 值。
- “聚类结果总是和预期不一致?”
先检查数据是否标准化(如 K-Means 对量纲敏感,若特征单位不同需先标准化);再尝试调整算法参数(如 DBSCAN 的 ε 和 MinPts);若仍无效,可换用非线性聚类算法(如 DBSCAN 替代 K-Means)。
- “降维后数据丢失太多信息?”
通过explained_variance_ratio_查看信息保留比例,若低于 80%,可适当增加降维后的维度(如 PCA 的 n_components 设为 3);若数据是非线性的,换用 t-SNE 或 AutoEncoder(保留更多非线性信息)。
- “无监督学习结果如何评估?”
- 有真实标签时:用调整兰德指数(ARI)、互信息(MI)评估聚类与真实标签的一致性;
- 无真实标签时:用轮廓系数(聚类紧凑性)、Davies-Bouldin 指数(类间分离度)评估。
五、总结与进阶学习建议
无监督学习是机器学习中 “探索性数据分析” 的核心工具,入门阶段需重点掌握:
- 理论层面:理解无监督学习的目标、假设,以及与监督学习的区别;
- 算法层面:熟练掌握 K-Means、DBSCAN(聚类)和 PCA、t-SNE(降维)的原理与适用场景;
- 实践层面:通过 Python 的 scikit-learn 库实现算法,并能评估与调优。
若想进一步进阶,可学习以下内容:
- 更复杂的聚类算法:层次聚类(Hierarchical Clustering)、谱聚类(Spectral Clustering);
- 深度无监督学习:生成对抗网络(GAN)、变分自编码器(VAE)(用于生成新数据

9700

被折叠的 条评论
为什么被折叠?



