← 返回首页
🤖

无监督学习入门

📂 ai ⏱ 2 min 206 words

无监督学习入门

什么是无监督学习

无监督学习(Unsupervised Learning)是一种没有标签指导的学习方式。模型需要从未标记的数据中自动发现隐藏的模式、结构或规律。就像让一个孩子在没有大人指导下,自己把玩具按颜色或形状分类一样。

无监督学习的核心任务

1. 聚类(Clustering)

将相似的数据点自动分组到同一类别中。常见应用:

2. 降维(Dimensionality Reduction)

在保留重要信息的前提下,减少数据的特征维度。常见应用:

常用无监督学习算法

算法 类型 特点
K-Means 聚类 简单高效,需要预设K值
DBSCAN 聚类 基于密度,可发现任意形状
层次聚类 聚类 生成树状结构
PCA 降维 线性降维,最大化方差
t-SNE 降维 非线性降维,适合可视化
UMAP 降维 快速,保留局部和全局结构

聚类算法对比

K-Means

DBSCAN

代码示例:聚类与降维实战

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans, DBSCAN
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score

# 生成模拟数据
X, y_true = make_blobs(
    n_samples=300, centers=4, cluster_std=0.60, random_state=42
)

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# --- K-Means聚类 ---
# 使用肘部法则确定最佳K值
inertias = []
K_range = range(2, 10)
for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X_scaled)
    inertias.append(kmeans.inertia_)

# 使用轮廓系数评估
print("不同K值的轮廓系数:")
for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    labels = kmeans.fit_predict(X_scaled)
    score = silhouette_score(X_scaled, labels)
    print(f"  K={k}: {score:.4f}")

# 使用最佳K值进行聚类
best_k = 4
kmeans = KMeans(n_clusters=best_k, random_state=42, n_init=10)
labels_kmeans = kmeans.fit_predict(X_scaled)

# --- DBSCAN聚类 ---
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels_dbscan = dbscan.fit_predict(X_scaled)
n_clusters_dbscan = len(set(labels_dbscan)) - (1 if -1 in labels_dbscan else 0)
print(f"\nDBSCAN发现的簇数: {n_clusters_dbscan}")

# --- PCA降维 ---
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(f"\nPCA解释方差比: {pca.explained_variance_ratio_}")
print(f"累计解释方差: {sum(pca.explained_variance_ratio_):.4f}")

# 输出聚类结果统计
print(f"\nK-Means各簇样本数:")
for i in range(best_k):
    print(f"  簇{i}: {sum(labels_kmeans == i)}个样本")

如何选择算法

选择无监督学习算法时需要考虑:

  1. 数据规模:大规模数据优先考虑K-Means
  2. 簇形状:任意形状选择DBSCAN
  3. 噪声比例:噪声多选择DBSCAN
  4. 维度高低:高维数据先降维再聚类

无监督学习的挑战

总结

无监督学习在数据探索和模式发现中具有重要价值。虽然评估和解释比监督学习更困难,但在实际应用中(如客户细分、异常检测)发挥着不可替代的作用。建议结合可视化技术来更好地理解无监督学习的结果。