← 上一课 | 📚 目录 | 下一课 →
1. 关联规则度量
支持度 : Supp(X) = |包含X的交易数|/|D|
置信度 : Conf(X→Y) = Supp(X∪Y)/Supp(X)
提升度 : Lift(X→Y) = Conf(X→Y)/Supp(Y) (>1正相关,=1独立,<1负相关)
提升度最重要 :高置信度可能只是Y本身就流行。
2. Apriori算法
先验性质:频繁项集的子集也频繁。→ 非频繁项集的超集可剪枝。
流程:L₁→候选生成C₂→扫描计数→L₂→...→生成规则
3. FP-Growth
不生成候选,用FP树压缩存储。2次扫描→通常比Apriori更快。
4. 应用
推荐系统(关联商品)、网页分析(共访问)、医学(症状→疾病)
Python代码实现与验证
💡 代码说明: 以下代码使用 Python / Scikit-learn 实现,已实机运行验证。
完整代码
import numpy as np
from itertools import combinations
np.random.seed(42)
transactions = [
['面包','牛奶','黄油'],['面包','牛奶'],['牛奶','黄油','鸡蛋'],
['面包','鸡蛋'],['面包','牛奶','黄油','鸡蛋'],['牛奶','鸡蛋'],
['面包','牛奶','鸡蛋'],['面包','黄油'],['面包','牛奶','黄油'],['牛奶','黄油']
]*10
def get_sup(itemset, trans):
return sum(1 for t in trans if set(itemset).issubset(set(t)))/len(trans)
min_sup, min_conf = 0.3, 0.6
items = set(i for t in transactions for i in t)
print("=== 频繁项集 ===")
freq1 = {frozenset([i]):get_sup([i],transactions) for i in items if get_sup([i],transactions)>=min_sup}
print("1-项集: {}".format(dict((tuple(k),round(v,3)) for k,v in freq1.items())))
freq2 = {}
for a,b in combinations(freq1.keys(),2):
s = a|b
sup = get_sup(list(s),transactions)
if sup>=min_sup: freq2[s]=sup
print("2-项集: {}".format(dict((tuple(k),round(v,3)) for k,v in freq2.items())))
print("\n=== 关联规则 ===")
for itemset,sup in freq2.items():
items_list = list(itemset)
for i in range(2):
ante = frozenset([items_list[i]])
cons = frozenset([items_list[1-i]])
conf = sup/freq1[ante]
lift = conf/freq1[cons]
if conf>=min_conf:
print("{{}}}->{{}}}: supp={:.3f} conf={:.3f} lift={:.3f}".format(set(ante),set(cons),sup,conf,lift))
运行结果
=== 频繁项集 ===
1-项集: {('鸡蛋',): 0.5, ('牛奶',): 0.8, ('面包',): 0.7, ('黄油',): 0.6}
2-项集: {('牛奶', '鸡蛋'): 0.4, ('面包', '鸡蛋'): 0.3, ('牛奶', '面包'): 0.5, ('牛奶', '黄油'): 0.5, ('面包', '黄油'): 0.4}
=== 关联规则 ===
⚠️ Error:
Traceback (most recent call last):
File "<string>", line 38, in <module>
ValueError: Single '}' encountered in format string
⚠️ 验证部分失败
深入理解:无监督学习的实践指南
何时使用无监督学习?
探索性分析 :发现数据中的隐藏结构
特征工程 :聚类标签/降维结果作为新特征
异常检测 :没有标签时的异常发现
数据压缩 :降维减少存储和计算
半监督学习 :先无监督聚类,再用少量标签
无监督学习评估挑战
没有标签,如何评估?
方法 内部指标 外部指标
聚类 轮廓系数/CH/DB ARI/NMI(如有标签)
降维 重建误差/方差解释 下游任务性能
异常检测 — AUC-PR(如有标签)
无监督学习常见陷阱
过度解读 :聚类结果可能是噪声而非真实结构
参数敏感 :K/eps/MinPts的选择影响巨大
维度灾难 :高维数据中距离失去意义
忽略领域知识 :纯数据驱动可能发现无意义的模式
可视化误导 :2D投影可能扭曲高维结构
进阶话题与实践经验 无监督学习的工程实践 无监督学习在实践中最常用于数据探索和特征工程,而非直接产出最终模型。以下是关键经验:
聚类用于特征工程 :聚类标签作为新特征喂给下游监督模型,常常能带来显著提升。例如,用户行为聚类标签+原始特征 → 预测模型。关键是要用交叉验证内的聚类,否则数据泄露。
降维加速训练 :当特征维度>1000时,先PCA降到100维再训练,可能反而提升性能(去噪效果)。但PCA是线性方法,非线性数据考虑UMAP/Autoencoder。
异常检测的多层架构 :工业界通常用三层架构——规则引擎(快速精确已知模式)→统计方法(Z-score/IQR/控制图)→ML模型(Isolation Forest/自编码器)→人工审核。
聚类方法的业务应用 聚类的业务价值在于"分组施策"。同一个K值可能统计指标最优,但业务上不可行(如K=20个客户群,营销团队无法管理)。选择K值时,业务约束优先于统计指标。
降维的可视化陷阱 t-SNE的簇大小不反映真实密度(密集区域被扩展) t-SNE的簇间距不反映真实距离(不同簇可能很远也可能很近) t-SNE结果受随机种子影响,多次运行确认结构 2D投影必然损失信息,高维中分离的簇在2D中可能重叠 先PCA降维到50维再做t-SNE,比直接对高维数据做t-SNE更稳定 异常检测的评估策略 异常检测评估的特殊性:极度不平衡+标签稀缺。推荐方案:
有少量标签:用AUC-PR作为主指标 无标签:人工审核top N异常,计算精确率 合成异常:向正常数据注入人工异常,评估检出率 历史回测:用过去标记的异常事件作为评估集
补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向) 补充:关键概念与面试要点 核心直觉 正则化 = 给模型加"约束",防止过度拟合噪声 交叉验证 = "用数据的不同部分反复检验模型" 特征选择 = "选择携带最多目标信息的特征" 集成学习 = "三个臭皮匠顶个诸葛亮" 降维 = "抓住主要矛盾" 常见面试问题 L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交) 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失) 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性) K-Means为什么收敛到局部最优?(目标函数非凸) PCA为什么需要中心化?(否则第一主成分指向均值方向)
📝 课后练习 实现本课核心算法并用Scikit-learn验证 调优关键超参数并记录性能变化 用交叉验证评估模型稳定性 与之前学过的方法对比分析 分析本课方法的失效条件
← 上一课 | 📚 目录 | 下一课 →