Skip to content

01-无监督学习算法

本章讲解无监督学习的经典算法:K-Means 聚类、层次聚类、DBSCAN 和 PCA 降维。


实际场景

你是一家电商公司的分析师,想了解客户群体特征。你有客户的购买数据:购买频率、平均消费金额、偏好品类等,但没有客户的群体标签。你想自动将客户分成几类:比如"高消费活跃用户"、"低消费潜在用户"、"偶尔购买用户"等。这是一个典型的无监督学习聚类问题——在没有标签的情况下,自动发现数据的内在结构。

K-Means 聚类

最常用的聚类算法,通过迭代将数据分为 K 个簇。

python
from sklearn.cluster import KMeans
from numpy.typing import NDArray

kmeans: KMeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)

labels: NDArray = kmeans.labels_
centers: NDArray = kmeans.cluster_centers_

选择 K 值

python
from sklearn.cluster import KMeans
from numpy.typing import NDArray

inertias: list[float] = [KMeans(n_clusters=k).fit(X).inertia_ for k in range(1, 11)]

from sklearn.metrics import silhouette_score
scores: list[float] = [silhouette_score(X, KMeans(n_clusters=k).fit_predict(X)) 
                       for k in range(2, 11)]

层次聚类

通过计算样本间的距离,构建树状的层次结构。

python
from sklearn.cluster import AgglomerativeClustering
from numpy.typing import NDArray

agg: AgglomerativeClustering = AgglomerativeClustering(n_clusters=3, linkage='ward')
labels: NDArray = agg.fit_predict(X)

DBSCAN

基于密度的聚类算法,可以发现任意形状的簇。

python
from sklearn.cluster import DBSCAN
from numpy.typing import NDArray

dbscan: DBSCAN = DBSCAN(eps=0.5, min_samples=5)
labels: NDArray = dbscan.fit_predict(X)

n_clusters: int = len(set(labels)) - (1 if -1 in labels else 0)

PCA 降维

通过线性变换将数据投影到方差最大的方向。

python
from sklearn.decomposition import PCA
from numpy.typing import NDArray

pca: PCA = PCA(n_components=2)
X_pca: NDArray = pca.fit_transform(X)

print(f"解释方差比:{pca.explained_variance_ratio_}")

t-SNE 非线性降维

适合高维数据的可视化。

python
from sklearn.manifold import TSNE
from numpy.typing import NDArray

tsne: TSNE = TSNE(n_components=2, perplexity=30)
X_tsne: NDArray = tsne.fit_transform(X)

算法对比

算法优点缺点适用场景
K-Means简单高效需指定 K球形簇
层次聚类可视化层次结构计算慢小数据集
DBSCAN任意形状、识别噪声对参数敏感密度均匀
PCA线性、快速只能线性降维特征压缩
t-SNE保留局部结构计算慢可视化

本章小结

┌─────────────────────────────────────────────────────────────┐
│                    无监督学习算法 知识要点                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   聚类算法:                                                 │
│   ✓ K-Means:需指定 K,手肘法选择                           │
│   ✓ 层次聚类:树状图可视化                                  │
│   ✓ DBSCAN:任意形状簇,识别噪声                            │
│                                                             │
│   降维算法:                                                 │
│   ✓ PCA:线性降维,最大化方差                               │
│   ✓ t-SNE:非线性降维,可视化                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘