Quiet
  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT

Alex

  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT
Quiet主题
  • ideas

非监督学习(Unsupervised Learning)详解

Alex.Y
Science

2025-08-26 10:55:00

非监督学习(Unsupervised Learning)详解

一、核心理论

定义与本质

非监督学习是机器学习的一种范式,模型从未标记的数据中自主发现隐藏模式、结构或关系。与监督学习不同,它没有预设的目标变量(标签),而是让数据自己”说话”。

核心公式:
给定未标记数据集:
D = {x⁽¹⁾, x⁽²⁾, ..., x⁽ᵐ⁾}
其中 x⁽ⁱ⁾ ∈ ℝⁿ 是特征向量
目标:发现数据中的潜在结构 S = f(D)

关键特点
  1. 无标签驱动:不需要人工标注的正确答案

  2. 探索性分析:揭示数据内在结构而非预测

  3. 模式发现:识别聚类、异常、关联规则等

  4. 降维能力:将高维数据压缩到低维表示

二、主要任务类型

任务类型 目标 典型算法 输出示例
聚类 数据分组 K-means, DBSCAN 顾客分群
降维 简化数据 PCA, t-SNE 3D可视化
关联规则 发现关系 Apriori 购物篮分析
异常检测 识别异常 Isolation Forest 欺诈交易
密度估计 概率分布 GMM 数据生成

三、经典案例:顾客细分分析

业务场景:
电商公司有10,000名顾客的购买行为数据,需要识别不同的顾客群体,以便制定精准营销策略。

数据集特征:

  • 年消费金额
  • 购买频率
  • 平均订单价值
  • 最近购买时间
  • 产品类别偏好
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import matplotlib
matplotlib.rc("font", family='Microsoft Yahei')

# 1. 加载数据(模拟数据集)
data = pd.DataFrame({
'annual_spend': np.random.normal(1500, 500, 10000),
'frequency': np.random.poisson(15, 10000),
'avg_order_value': np.random.gamma(2, 50, 10000),
'recency': np.random.exponential(30, 10000),
'category_pref': np.random.choice([0.2, 0.5, 0.8], 10000)
})

# 2. 数据预处理
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

# 3. 确定最佳聚类数(肘部法则)
inertia = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(scaled_data)
inertia.append(kmeans.inertia_)

plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), inertia, marker='o')
plt.xlabel('簇数量 (K)')
plt.ylabel('簇内平方和')
plt.title('肘部法则确定最佳K值')
plt.show()

# 4. 聚类分析(选择K=4)
kmeans = KMeans(n_clusters=4, random_state=42)
clusters = kmeans.fit_predict(scaled_data)
data['cluster'] = clusters

# 5. 降维可视化
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(scaled_data)
data['pca1'] = reduced_data[:, 0]
data['pca2'] = reduced_data[:, 1]

plt.figure(figsize=(12, 8))
for cluster in sorted(data['cluster'].unique()):
cluster_data = data[data['cluster'] == cluster]
plt.scatter(cluster_data['pca1'], cluster_data['pca2'],
label=f'Cluster {cluster}', alpha=0.6)

plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
marker='X', s=200, c='black', label='质心')
plt.title('顾客聚类可视化')
plt.xlabel('PCA 成分 1')
plt.ylabel('PCA 成分 2')
plt.legend()
plt.show()

# 6. 分析聚类特征
cluster_profiles = data.groupby('cluster').mean()
print(cluster_profiles)

四、实际应用场景

  1. 市场细分:
    • 顾客分群(如上述案例)
    • 产品组合分析
  2. 异常检测:信用卡欺诈检测
  3. 推荐系统:
    • 协同过滤(用户行为聚类)
    • 关联规则(”购买A的顾客也买B”)
  4. 图像处理:图像分割
  5. 自然语言处理:
    • 主题建模(LDA)
    • 词向量聚类
  6. 生物信息学:
    • 基因表达聚类
    • 蛋白质结构分组
上一篇

强化学习(Reinforcement Learning)详解

下一篇

Lofter Words

©2026 By Alex. 主题:Quiet
Quiet主题