1. 数据挖掘算法入门从超市购物车到数学公式第一次接触数据挖掘算法时我盯着那些晦涩的数学公式直发懵。直到有天在超市排队看到收银台边的口香糖和电池摆在一起突然明白了什么是关联规则——这不就是经典的啤酒与尿布案例的现实版吗数据挖掘算法本质上就是帮我们从海量数据中发现这类隐藏规律的工具箱。以Apriori算法为例它的核心思想就像我们逛超市时的购物习惯。如果80%买奶粉的顾客都会顺手拿尿不湿那么这两种商品就存在强关联。算法中的支持度相当于统计有多少人同时购买这两件商品置信度则计算买了奶粉的人有多大几率会买尿不湿。用数学表示就是# 支持度计算示例 support (同时购买A和B的交易数量) / 总交易数 # 置信度计算示例 confidence (同时购买A和B的交易数量) / 购买A的交易数量实际解题时我建议先用生活场景理解算法再套用公式。比如遇到这道考题已知交易数据库包含{牛奶,面包,尿布}等商品最小支持度设为0.5求频繁项集。解题步骤应该是统计所有商品组合出现的次数计算各组合支持度出现次数/总交易数保留支持度≥0.5的组合2. 关联规则挖掘实战Apriori与FP-Growth对比2.1 Apriori算法步步拆解记得初学Apriori时最头疼的就是理解它的向下闭包性如果{牛奶,面包}不频繁那么{牛奶,面包,尿布}肯定也不频繁。这个特性就像筛选相亲对象如果连基本条件都不满足就不用考虑后续组合了。具体实现时要注意两个优化技巧连接步将Lₖ-1与自身连接生成候选集Cₖ剪枝步删除那些子集不在Lₖ-1中的候选集以这道典型考题为例 给定交易数据库T{(a,b,c),(a,c,d),(a,d,e),(b,c,d)}最小支持度50%求最大频繁项集解题过程首先生成1-项集并计算支持度{a}:3/475%{b}:2/450%...其他1-项集支持度均≥50%连接生成2-项集后筛选{a,c}:2/450%保留{b,d}:1/425%淘汰最终得到最大频繁项集{a,c}2.2 FP-Growth算法的高效秘诀相比Apriori的多轮扫描FP-Growth就像把超市小票直接钉成树状备忘录。我曾在处理百万级交易数据时实测过FP-Growth速度能快10倍以上。它的精髓在于构建FP-tree时按支持度降序排列通过条件模式基递归挖掘看这个考题示例 对事务数据库T{(a,b,c),(a,c,d),(a,d,e)}构建FP-tree最小支持度2操作步骤统计项频次a(3),c(2),d(2),b(1),e(1)按频次排序后重建事务(a,c,b)→(a,c)(a,c,d)→(a,c,d)(a,d,e)→(a,d)构建的FP-tree会呈现a为根c/d为子节点的结构3. 分类算法三剑客ID3、C4.5与CART3.1 信息熵的直观理解ID3算法依赖的信息熵概念可以理解为数据的混乱程度。就像收拾房间时物品分类越明确熵值越低。数学表达式为import math def entropy(p): return -p * math.log2(p) if p 0 else 0 # 计算系统熵 total_entropy sum(entropy(p_i) for p_i in class_probabilities)遇到这类考题时 根据下表天气数据用ID3算法选择根节点属性给出计算过程解题关键先计算整体熵值如是否打球的熵对每个属性计算信息增益 Gain(天气) 总熵 - ∑(天气各取值概率×对应熵)选择增益最大的属性作为分裂节点3.2 C4.5与CART的改进之道C4.5在ID3基础上主要做了三点升级用信息增益率替代增益解决属性偏向问题支持连续值处理通过二分法加入剪枝策略防止过拟合而CART算法则采用Gini指数作为分裂标准就像衡量一筐水果的混杂程度def gini_index(counts): total sum(counts) return 1 - sum((c/total)**2 for c in counts)典型考题如 对于以下数据集计算年龄属性的Gini指数解法按年龄划分数据子集计算每个子集的Gini指数加权求和得到该属性的总体Gini指数4. 聚类分析与序列模式挖掘4.1 K-means的实战技巧K-means算法就像给班级同学分组要找到合适的中心点。我总结的解题步骤是随机选择K个初始中心如考题给定K2计算各点到中心的距离重新分配点到最近中心重新计算中心位置重复直到中心点不再变化对于这类计算题 对点集{(1,1),(1,2),(10,10)}执行K-means聚类K2建议在草稿纸上逐步画出迭代过程注意考题常设的陷阱初始中心选择影响结果空簇处理方式距离计算采用欧式还是曼哈顿4.2 序列模式挖掘的特殊性相比普通关联规则序列模式增加了时间维度。就像分析顾客的购物轨迹不仅要看买了什么还要看购买顺序。典型算法如PrefixSpan解题时需要特别注意序列与项集的区别如{a,b},c≠a,b,c支持度计算基于序列而非单项投影数据库的构建方法遇到这类填空题时 序列数据库S{a(bc)d,b(ac)d}中模式a(bc)的支持度是____关键是要理解a(bc)表示a之后同时出现b和c该模式在S中出现了2次因此支持度2/2100%