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:非线性降维,可视化 │
│ │
└─────────────────────────────────────────────────────────────┘