
期末复习周又到了我又一次翻开《数据挖掘导论》的前三块内容课程介绍、数据预处理方法、定性归纳。说实话这门课第一轮复习最容易让人犯的错误就是“只看后面的算法”觉得介绍部分是废话、预处理是体力活、定性归纳背背概念就行。但实际做项目或者应付考试之后你就会发现这三块恰恰是整门课的骨架不把它们串起来理解后面学关联规则、聚类、神经网络都会觉得像浮在空中。这篇文章就是我自己的复习笔记只围绕“介绍数据预处理方法定性归纳”这条主线展开。我会把每个知识点的来龙去脉、为什么这么设计、考试怎么考、做完项目踩过哪些坑都写清楚。适合期末突击、面试前速过、或者项目里需要快速建立数据挖掘基础的朋友。1. 为什么要从这三块开始复习1.1 这三块内容的内在关系很多人把第一章“介绍”当成纯文科内容背几句定义就过了。实际上理解数据挖掘的整体框架是后面所有章节的坐标系。你能在脑中画出一张图输入什么数据、经过哪些处理、用什么任务、输出什么模式后面学到的大部分方法都能在这张图上找到位置。没有这张图学一个算法就是一个孤岛。数据预处理方法则是连接原始数据和模型之间的桥梁。真实场景里原始数据几乎没有能直接进模型的缺值、噪声、单位不一致、维度太高这些都是常态。课上也许只花两周讲预处理但真实项目里至少一半时间都在做这件事。考试里它经常以“给出某个场景选择最合理的处理策略”的形式出现这种题没有标准答案拼的就是你理解每种方法背后的适用边界。定性归纳是第一类真正意义上的“挖掘”思路。它把数据总结成一组“如果满足什么条件就属于哪个类别”的规则典型的代表就是决策树和规则归纳。我的复习经验是先理解规则的形式再理解决策树是怎么生成规则的最后理解如何用覆盖算法直接学规则。这条线顺下来分类问题的主干就有了。1.2 复习重点与优先级复习之初我先划清主次防止在细节上浪费时间。下面这张表是我自己梳理的复习优先级供你参考板块核心考点常见题型我的复习优先级数据挖掘介绍定义、流程、任务类型简答、概念辨析中但必须先过一遍数据预处理缺失值处理、噪声处理、归一化与标准化、维规约场景选择、计算、简答高工程价值最高定性归纳熵、信息增益、增益率、基尼指数、剪枝、规则归纳手算推导、构造决策树、简答最高计算量相对大且易出错我的建议是先花半天时间把介绍部分读成“一个完整故事”再花一天重点刷预处理的场景题和定性归纳的计算题。不要一上来就背ID3、C4.5、CART的公式区别先把每个公式在解决什么问题弄明白。1.3 一次复习的节奏建议我自己复习这门课一般分成三步。第一步把讲义里所有概念用一句话写在白纸上能默写出来就代表记住第二步手工推导一遍决策树的信息增益计算从熵的定义开始每个数字都亲自算第三步找一个公开的表格数据集写代码跑一遍预处理管线再跑一次决策树看参数变化对树结构的影响。这三步做完基本可以应付大部分考试和面试问题。2. 数据挖掘介绍先把整张地图刻在脑子里2.1 一句话定义但别小看它数据挖掘课程里最经典的定义是从大量数据中发现潜在的、事先未知的、有价值的信息模式。我在复习时喜欢拆成三个关键词来记大量、未知、有价值。“大量”强调的是数据规模足够大小样本上的统计规律往往不可靠这也是数据挖掘和传统统计分析的重要差异之一。“未知”表示这些模式是事先不知道的不是简单的查询或报表比如“上季度华东区销售额是多少”就不是数据挖掘问题但“找出华东区销售额异常下降的客户群体特征”就有点像了。“有价值”就更直接了模式的最终价值要看能不能带来决策上的改变比如降低流失率、提高转化率或者帮助业务发现新的增长点。2.2 数据挖掘能解决的问题类型数据挖掘任务通常被分成两大类预测性任务和描述性任务。预测性任务的典型代表是分类、回归和异常检测。分类是预测离散标签比如判断一封邮件是垃圾邮件还是正常邮件回归是预测连续数值比如根据房屋面积、位置预测房价异常检测是找出与大多数样本明显不同的对象常用于欺诈识别。描述性任务的代表是聚类、关联规则和序列模式挖掘聚类是把相似的样本分到同一组中但分组标准事先不知道关联规则最经典的场景就是购物篮分析发现“买尿布的顾客很可能也买啤酒”这种模式。复习时要特别注意“分类”和“聚类”的区别分类是有监督的样本标签已知目标是对新样本进行预测聚类是无监督的标签未知目标是发现内部结构。这个辨析题几乎每年都会出现。2.3 标准流程CRISP-DM 六阶段课程里介绍的标准流程是CRISP-DM六个阶段分别是业务理解、数据理解、数据准备、建模、评估、部署。业务理解就是搞清楚要解决什么业务问题、成功的标准是什么数据理解是熟悉数据、收集数据、探索数据数据准备包括清洗、集成、变换、归约等也就是我们接下来要细聊的内容建模是选择和应用各种模型评估是从业务角度判断模型是否达到预期部署是把挖掘结果落地到实际业务流程里。我在复习时特别提醒自己注意两点第一这个过程不是单向线性的经常要往回迭代比如评估阶段发现数据不行要退回数据准备阶段第二数据准备通常占据整个项目的大部分时间和精力这不是“没本事的人做的活”而是决定模型上限的关键环节。2.4 哪些情况不适合数据挖掘教材常讲适用条件但考试的难点反而在于“不适合”的场景。数据挖掘不适合的情况有这几种数据量太小统计分析就能解决问题数据本身噪声极大可信度很低问题非常明确直接写SQL查就能得到答案领域规则已经被专家完整总结过再去挖掘属于重复造轮子。理解“不适用”边界非常重要因为实际项目中很多人拿到一个任务就急着上复杂模型结果资源和时间都浪费了。面试时如果能主动说清楚“这里为什么不适合用数据挖掘”通常能给面试官留下不错的印象。3. 数据预处理方法真正决定结果上限的脏活累活3.1 为什么预处理比建模更能影响效果数据挖掘圈有句话叫“垃圾进垃圾出”。模型再强喂给它的数据不干净结果也好不到哪去。更加反直觉的是清洗和变换数据时做的每一个选择最后都会在模型结果里放大。你选了均值填充还是中位数填充你做了min-max归一化还是z-score标准化都会直接影响后续模型的表现。课程里讲的数据预处理方法大致可以归为四个方向数据清洗、数据集成、数据变换、数据归约。复习时不要只背名词要能把它们按“为什么要做、用什么方法、方法之间的区别”串起来。3.2 数据清洗缺失值、噪声与离群点缺失值处理是最常见也最关键的预处理步骤。复习的时候老师通常会给一张各种填充策略的对比表但实际使用时我的决策思路是这样的如果某一列的缺失率极高比如超过40%甚至60%这列的可用信息已经很有限一般直接删除该列如果某一行缺失的字段太多也考虑删除该行。如果缺失率很低比如低于5%直接删除缺失行影响不大但如果样本量本身很少删除行会很可惜就要考虑填充。中间情况用填充策略。数值变量常用均值或中位数填充类别变量常用众数填充。带时间序列特征的数据前向填充也是常用手段。很多人会忽略的是填充规则只能用训练集去拟合并应用到测试集不能拿全部数据算均值和标准差再回填。这个知识点在后面的“易错点”里我会再强调一遍。噪声数据处理常见的办法是分箱和平滑。分箱就是把连续值按区间切成几个箱再对每个箱内的值做均值平滑、中值平滑或边界平滑。比如一组价格数据[100,120,150,210,230],按等宽分成两个箱第一个箱均值是123那么箱内值都换成123这就是均值平滑。分箱复习时要注意等宽和等频的区别等宽按值域切成相等间隔缺点是可能某个箱里样本特别少等频按数量切成每箱样本数相等的箱缺点是区间宽度可能差异很大。离群点的识别方法常考的有3σ原则、四分位数间距IQR方法和基于聚类的检测。这里我要特别提醒离群点不一定是噪声它可能是真正的异常模式。在欺诈检测场景中离群点恰恰是我们最想找的目标。所以“先识别离群点然后一律删除”是非常粗暴的处理方式正确的做法是结合业务判断。3.3 数据集成多个数据源合并时的坑数据集成是把来自多个系统的数据合并到一起比如把交易表、用户表、商品表拼成一个宽表。实际项目中这步最费精力因为不同系统的数据口径经常不一样。实体识别是第一个难题同一用户在不同系统里可能表示成不同字段需要靠主键或者匹配规则去对齐第二是数值冲突同一指标在不同数据源里单位不同例如一个系统记录金额单位是“元”另一个是“万元”合并前必须统一第三是数据冗余不同来源的字段之间可能存在高度相关比如“年龄”和“出生日期”本质上是同一信息保留其一即可否则会给模型引入冗余和多重共线性问题。复习教材里讲到可以用相关系数矩阵来判断数值字段的冗余程度当两个字段间的绝对值超过0.85时通常建议只保留其中一个。这不仅是理论题也是实际项目中特征工程的第一步。3.4 数据变换归一化、标准化与离散化数据变换是预处理方法里计算量最大、考得也最细的一块。首先要分清归一化和标准化。min-max归一化的公式是X (X - min) / (max - min)它的作用是把数值映射到[0,1]区间适合数据本身范围固定、没有太多极端值的情况。它的致命缺点是一旦新数据超出了原来的min或max归一化结果就不再是[0,1]范围整个数值相对关系都会变化。所以使用min-max归一化时一定要保存训练集上的min和max应用时直接用训练集的统计量而不是重新计算。z-score标准化的公式是X (X - mean) / std它在数据近似正态分布、或存在少量离群点时更为稳健因为均值和标准差受极端值的影响比min和max小。很多距离类算法比如K近邻、K-means以及神经网络都会优先推荐标准化。离散化是另一类变换方法。把连续变量变成有序类别比如把“年龄”分成“青年、中年、老年”常用方法有等宽法、等频法和基于聚类或决策树的方法。离散化的价值在于某些算法只能处理类别型数据比如朴素贝叶斯处理类别变量更自然离散化还能增强模型可解释性比如“年龄在18到25之间”比“年龄等于23.5”更容易向业务解释。我个人在复习时会用一小段Python示例来串起这些预处理操作。假设我们有一个类表格结构的数据集大致逻辑如下# 数据预处理逻辑示例缺失值检查与填充 for col in dataset.columns: missing_rate dataset[col].isna().mean() if missing_rate 0.6: dataset.drop(col, axis1, inplaceTrue) elif missing_rate 0.05: dataset.dropna(subset[col], inplaceTrue) else: if dataset[col].dtype object: dataset[col].fillna(dataset[col].mode()[0], inplaceTrue) else: dataset[col].fillna(dataset[col].median(), inplaceTrue) # 对数值列做z-score标准化 for col in numeric_cols: mu dataset[col].mean() sigma dataset[col].std() dataset[col] (dataset[col] - mu) / sigma这段代码虽然只是概念示意但包含了我认为最重要的两个习惯一是先看缺失率再决定删还是填二是所有填充和标准化统计量都只是在训练部分计算不能拿全量数据去算否则会造成数据泄漏。3.5 数据归约给数据做减法数据归约的目标是在不显著损失信息的前提下减少数据规模从而降低计算开销。课程里主要讲两类维度归约降维和数值归约。维度归约的代表是主成分分析PCA。PCA的思想很直观把原始高维数据投影到少数几个方差最大的方向上用投影后的坐标代替原始特征。形象地说就像把三维物体拍成一张二维照片虽然丢了些信息但保留了主要形状。复习PCA时需要理解协方差矩阵、特征值和特征向量的关系主成分的方差贡献率概念经常考。维度的选择通常以累积方差贡献率达到70%到85%为参考标准。特征选择是另一个方向和特征抽取不同它不改变原特征只是从所有特征中选一个子集。课程里把特征选择方法分成三类过滤式、包裹式和嵌入式。过滤式独立于学习算法先按统计指标卡方、相关系数、互信息筛特征包裹式直接在候选特征子集上训练模型用模型表现来评价嵌入式在模型训练过程中自动完成特征选择比如决策树的特征重要性、带L1正则化的模型。数值归约则包括直方图、聚类质心和抽样。抽样方法里有不放回简单随机抽样、放回抽样和分层抽样分层抽样保证每个类别的样本按比例被抽到在不平衡数据中非常重要。4. 定性归纳从数据里提炼if-then规则的经典路线4.1 定性归纳到底在归纳什么“定性归纳”这个名字听起来有点学术其实本质很简单从数据中归纳出一组描述性的规则每条规则的形式是“如果满足条件A且条件B且条件C那么属于类别D”。比如“如果天气晴且湿度低那么去打球”。它能回答“什么样的样本会被分到哪个类别”这种定性问题。复习时要注意它和定量归纳的区别。定量归纳得到的是数值关系比如回归方程 ( y a bx )定性归纳得到的是分类规则或概念描述它更强调可解释性。有些教材会把它归入分类任务的范畴有些则单独作为概念描述来考但不管归到哪儿核心都是“规则学习”这条线。4.2 决策树复习主线从ID3到CART决策树是定性归纳最重要的实现方式。树从根到叶子的每条路径都可以改写成一个if-then规则。复习决策树的关键就是搞清楚每一代算法到底在“选择划分属性”上做了什么改进。先看信息熵。熵度量的是数据集的不确定性或混乱程度公式是Entropy(S) -Σ p_i log₂ p_i其中 ( p_i ) 是第 ( i ) 类样本所占比例。如果数据只属于一类熵为0纯度最高如果两类各占一半熵为1最混乱。ID3算法用信息增益选择划分属性。信息增益的公式是Gain(S, A) Entropy(S) - Σ (|S_v| / |S|) × Entropy(S_v)其中 ( S_v ) 是属性A取值为v时划分出的子集。信息增益越大说明用属性A划分后纯度提升越多。考试时经常给出一个小数据集让你手工计算信息增益。我复习时用的例子是一组天气数据包含14个样本正例打球9个负例不打球5个。总熵是Entropy(S) - (9/14) log₂(9/14) - (5/14) log₂(5/14) ≈ 0.940以Outlook属性为例它有Sunny、Overcast、Rain三个取值。Sunny有5个样本其中正例2个、负例3个熵约为0.971Overcast有4个样本全是正例熵为0Rain有5个样本其中正例3个、负例2个熵约0.971。条件熵为(5/14) × 0.971 (4/14) × 0 (5/14) × 0.971 ≈ 0.693所以Outlook的信息增益是Gain 0.940 - 0.693 ≈ 0.247这个计算过程几乎每年都考一定要亲自手算一遍尤其是log₂的计算要熟练。ID3有个著名缺点它偏好取值较多的属性。比如“日期编号”这种属性每个样本取值都不同划分后每个子集都特别纯信息增益会非常高但这样的划分没有泛化意义。C4.5引入了增益率来修正这个问题GainRatio(S, A) Gain(S, A) / SplitInfo(S, A)其中 SplitInfo 也叫分裂信息它考虑的是属性A取值的多样性。继续用Outlook这个例子按照Sunny、Overcast、Rain各占5、4、5个样本计算SplitInfo - (5/14) log₂(5/14) - (4/14) log₂(4/14) - (5/14) log₂(5/14) ≈ 1.577所以增益率为GainRatio ≈ 0.247 / 1.577 ≈ 0.157CART算法则是另一条路线它用基尼指数代替熵。二分类问题中基尼指数的公式是Gini(D) 1 - Σ p_i²基尼指数越小纯度越高。对二分类来说Gini 2p(1-p)其中p是一类样本占比。CART选择划分时会计算每个候选划分的基尼指数选择加权基尼指数最小的属性。CART和ID3/C4.5还有一个重要区别CART生成的始终是二叉树。复习决策树时还必须把剪枝搞明白。不剪枝的决策树会把训练集噪声也学进去这就是过拟合。预剪枝在建树过程中判断“当前划分是否带来泛化能力提升”常用方式包括限制树的最大深度、设置节点最小样本数后剪枝是先把树建完再从下往上合并节点或用验证集评估剪掉某些子树。课程里提到的悲观剪枝和代价复杂度剪枝属于后剪枝。4.3 规则归纳与顺序覆盖算法除了决策树定性归纳还包含直接学规则的方法。最经典的思路是顺序覆盖算法也叫逐步覆盖算法。它的核心逻辑很简单循环学习一条规则每学到一条规则就把它覆盖的样本从训练集中去掉再在剩余样本上学下一条规则直到覆盖完某个类别的所有样本。我复习时会把顺序覆盖写成伪代码来帮助记忆# 顺序覆盖算法逻辑 learned_rules [] remaining_samples train_set while positive_samples_in(remaining_samples) is not empty: rule learn_one_rule(remaining_samples) learned_rules.append(rule) remaining_samples remove_samples_covered_by(rule, remaining_samples) return learned_rules一个规则覆盖了哪些样本定义要清楚如果某样本的特征满足规则的“条件部分”并且该规则预测的类别与样本真实类别一致这个样本就被规则“正确覆盖”。学习单条规则时常用爬山搜索从空条件开始逐步添加能显著提升规则纯度的条件直到规则覆盖的样本足够纯。课程里提到的CN2算法就是在这种框架下用拉普拉斯估计或似然比来评价规则质量。这种规则学习和决策树的区别在哪里决策树是“分而治之”每次选一个属性划分整个数据集然后递归顺序覆盖是“逐个攻克”每次只针对一个类别学一条独立规则。理解这个区别简答题基本就能拿分。4.4 支持度、置信度与规则评价有了规则还要能评价它好不好。课程里定义了三个关键指标以规则 ( X \rightarrow Y ) 为例指标公式含义备注支持度P(X ∪ Y)X和Y同时出现的样本比例支持度低说明规则覆盖范围小置信度P(Y | X)X出现时Y出现的条件概率置信度高不代表规则一定有效提升度P(X ∪ Y) / (P(X) × P(Y))X对Y出现概率的提升倍数大于1才有正相关意义这组指标常出现在关联规则章节但定性归纳里的规则评价也会用到复习时不要以为只要记住“支持度、置信度”就行。还需要区分两类规则关联规则是没有目标变量的购物篮里“A→B”只是同时出现不指向某个预定类别分类规则则有明确的目标类别后件是类别标签。这两个概念弄混是考试最常见的失分点。5. 复习时最容易踩的坑与高频易错点5.1 数据泄漏先切分还是先预处理数据泄漏是个考得深也考得多的点。很多初学者喜欢在完整数据集上先做缺失值填充、标准化、特征选择然后再划分训练集和测试集。这个顺序是错的原因在于你用全量数据算出来的均值、标准差、填充值已经“看到了”测试集的信息测试集就不再是未见数据模型的性能估计会虚高。正确流程是先划分训练集和测试集所有预处理参数都只在训练集上拟合并保存然后直接应用到训练集和测试集。特征选择的流程也如此特征子集只能在训练集上筛选绝不能把测试集的信息提前引入。考试里如果给一个“先预处理后切分”的流程让你找问题答案就是数据泄漏。5.2 归一化和标准化的选择对照复习时我给自己总结了一个简洁的选择逻辑场景推荐方法理由数据有严格上下界min-max归一化映射到固定区间相对距离保留数据近似正态分布z-score标准化均值和方差有意义结果更稳定数据有离群点z-score标准化优先min-max会被极端值拉伸区间使用距离类算法归一化或标准化皆可但要统一量纲不一致会扭曲距离计算使用树模型通常不需要归一化树模型按阈值划分对单调变换不敏感树模型不擅长外推但擅长捕捉非线性对数据的绝对值不敏感所以做不做归一化对决策树影响不大。但如果你用的是KNN、SVM或者神经网络量纲不一致会严重影响模型结果这一点复习时要牢牢记住。5.3 缺失值填充的副作用均值填充是很多人的默认操作但它会降低数据方差让分布变得更集中可能掩盖掉变量原本的波动。对类别变量用众数填充也可能引入偏差。更稳妥的思路是除了简单填充还可以考虑增加一个“是否缺失”的指示特征让模型自己学习缺失模式。这个方法考试不一定会考但在项目里非常实用。5.4 决策树过拟合与手工构建小坑考试里手工构建决策树时有几件事特别容易扣分。第一划分属性时如果没有说明使用的指标默认要写出熵或基尼的计算过程不能只写结论第二剪枝决策不能只看训练集准确率要用验证集或估计泛化误差很多题会在这里设陷阱第三连续属性的划分阈值要排序后逐一尝试相邻值的中点而不是拿离散值直接套公式。5.5 考前自测清单我复习到最后会做一次快速自测如果你能比较流畅地回答下面这些问题说明这块基础是稳的。数据挖掘的定义中“潜在”“事先未知”“有价值”分别强调什么CRISP-DM的六个阶段是什么哪个阶段通常耗时最长缺失值处理策略有哪些各自适用什么场景离群点一定都是噪声吗如果不是能举一个实际场景吗min-max归一化和z-score标准化的公式分别是什么各有什么优缺点什么是数据泄漏正确的预处理和划分顺序是什么熵、信息增益、增益率、基尼指数的公式和用途是什么ID3、C4.5、CART的主要区别有哪些为什么不剪枝的决策树容易过拟合顺序覆盖算法的基本流程是什么支持度、置信度、提升度的公式是什么提升度大于1意味着什么分类规则和关联规则的根本区别是什么这几个问题如果能不看笔记写出来复习效果基本及格了。我个人复习时的体会是数据预处理和定性归纳这两块千万不能只背概念一定要亲手算和亲手跑。信息增益的log计算填过一次和没填过是完全不同的记忆深度预处理管线自己在小数据集上跑一遍就能真正理解为什么每个环节的顺序那么重要。这门课的复习一到这里后面还有聚类、关联规则、模型评估等更精彩的内容咱们下一篇继续聊。