无监督学习-Complete Guide (较长)
无监督学习是机器学习的一个分支,其数据没有明确的标签或目标。目标是发现数据中的隐藏模式、分组或结构。与有监督学习(模型从带标签的样本中学习)不同,无监督学习处理的是原始、无标签的数据。
为什么要用无监督学习?
- 无标签数据丰富: 现实世界中大多数数据都是无标签的(如图片、文本、传感器数据)。
- 探索性数据分析: 有助于在应用其他方法前理解数据的结构和分布。
- 数据压缩: 降低维度以便存储、可视化或加速计算。
- 降噪: 去除无关或冗余特征。
- 预处理: 通过提取有用特征或降噪提升有监督学习的效果。
- 新颖/异常检测: 发现异常模式或离群点。
- 生成建模: 学习生成与输入数据相似的新样本。
无监督学习的类型
- 聚类: 将相似的数据点分组(如客户细分)。
- 降维: 在保留重要信息的前提下减少特征数量(如 PCA、t-SNE)。
- 异常检测: 识别罕见或异常的数据点(如欺诈检测)。
- 关联规则挖掘: 发现变量间有趣的关系(如购物篮分析)。
- 密度估计: 估计数据的概率分布(如高斯混合模型)。
- 生成建模: 学习生成新数据(如 GAN、VAE)。
有监督 vs. 无监督学习
- 有监督学习:
- 带标签观测:每个观测是 (x, y) 的元组,x 为特征向量,y 为输出标签,两者通过未知函数 f(x) = y 关联。
- 训练时:利用带标签观测学习 x 与 y 的关系,即找到最适合观测的函数(或模型)h(x)
- 目标:确保学到的模型 h(x) 能准确预测未见过的测试输入的输出标签(泛化能力)
- 标签:训练时是"老师",测试时是"验证者"
- 无监督学习:
- 无标签特征向量数据集
- 目标:在无明确标签的情况下发现数据中的结构、模式或分组
聚类
聚类是将一组对象分组的任务,使得同一组(簇)中的对象彼此更相似,而不同组之间的对象差异更大。
- 目标: 找到观测/对象/特征向量之间的自然分组
- 应用:
- 市场细分
- 社交网络分析
- 文档或图片组织
- 异常检测
- 推荐系统
常见聚类算法
K-Means(K均值)
- 通过最小化组内方差将数据分为 k 个簇。
- 快速且可扩展,但需指定 k,且假设簇为球形。
- 对初始化和异常值敏感。
层次聚类
- 通过合并(自底向上)或分裂(自顶向下)簇构建聚类树(树状图)。
- 不需要提前指定簇数。
- 能捕捉嵌套簇,但大数据集下扩展性较差。
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
import numpy as np# 生成合成数据
np.random.seed(42)
X = np.random.rand(10, 2)# 执行层次聚类
Z = linkage(X, 'ward')# 绘制树状图
plt.figure(figsize=(6, 3))
dendrogram(Z)
plt.title('层次聚类树状图')
plt.xlabel('样本索引')
plt.ylabel('距离')
plt.show()
DBSCAN(基于密度的空间聚类)
- 将密集点分为一组,将孤立点标记为离群点。
- 不需要指定簇数。
- 能发现任意形状的簇,对异常值鲁棒。
from sklearn.cluster import DBSCAN
import numpy as np
import matplotlib.pyplot as plt# 生成合成数据
X = np.random.rand(100, 2)# 应用 DBSCAN
db = DBSCAN(eps=0.1, min_samples=5).fit(X)
labels = db.labels_plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow')
plt.title('DBSCAN 聚类')
plt.show()
高斯混合模型(GMM)
- 假设数据由多个高斯分布混合生成。
- 能拟合椭圆形簇,提供软分配(概率)。
- 适用于密度估计和聚类。
from sklearn.mixture import GaussianMixture
import numpy as np
import matplotlib.pyplot as plt# 生成合成数据
X = np.random.rand(300, 2)# 拟合 GMM
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(X)
labels = gmm.predict(X)plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('高斯混合模型聚类')
plt.show()
相似性度量(距离指标)
用于量化任意两个特征向量之间关系的强度。
- 连续值特征
- 例如 x = (0.1, 11, 15, 1.5),可计算任意两点的"距离"
欧氏距离
测量 n 维空间中两点的最短直线距离。可看作多维毕达哥拉斯定理。
D euclidean ( a , b ) = ∑ i = 1 n ( a i − b i ) 2 D_{\text{euclidean}}(a, b) = \sqrt{ \sum_{i=1}^{n} (a_i - b_i)^2 } Deuclidean(a,b)=∑i=1n(a