《数据挖掘 原理与应用》 学习笔记
第五章 决策树分类 10.15
Hunt算法 只是在不断划分 没有选择最佳划分
在这个基础上,划分数据集的方法有以下几个算法
-
ID3 (Iterative Dichotomiser 3):
- ID3是由Ross Quinlan在1986年开发的。"ID3"这个名字是迭代二分器(Iterative Dichotomiser)的第三个版本的意思。它使用信息增益作为属性选择的标准来构建决策树。
-
C4.5:
- C4.5也是由Ross Quinlan开发的,是ID3的一个改进版,发表于1993年。C4.5的名字并没有特别明确的意义,但可以理解为C4系列算法中的一个进步版本。与ID3相比,C4.5能够处理连续值的属性和缺失值【这一点西瓜书上介绍很详细!】,并且使用信息增益率来选择最佳分裂属性,以减少偏向具有大量属性值的属性。C4.5还有后剪枝操作。增益比率
-
CART (Classification and Regression Trees):
- CART是由Breiman、Friedman、Olshen和Stone四位研究者共同提出的,在1984年出版的《分类与回归树》一书中详细描述了这一方法。CART算法名称直接反映了其功能:既可以用于分类也可以用于回归任务。CART采用基尼指数(Gini Index)作为节点纯度的衡量标准来选择最佳分裂点,与ID3和C4.5使用的基于熵的信息增益不同。CART也有剪枝操作。
第九章 支持向量机分类器 11.5
支持向量机方法是建立在统计学习理论的VC维理论 (V. Vapnik and A. Chervonenkis) 和结构风险最小 (Structural Risk Minimization, SRM) 原理基础上。
结构风险:置信风险 + 经验风险
VC维:针对特定空间中的决策方式的度量。或者说是对模型复杂度的度量。在r维空间中,线性决策面的VC维为r+1。
SVM转化为二次规划问题规范表示过程略
LIBSVM(台湾大学林智仁(Lin Chih-Jen)副教授等)
SVM模式识别与回归的软件包,提供了编译好的Windows系统执行文件,提供了源代码。该软件提供了很多的默认参数,提供了交互检验(Cross Validation)的功能。该软件包可以在http://www.csie.ntu.edu.tw/~cjlin/ 免费获得。该软件可以解决C- SVM分类 、-SVM分类、-SVM回归和-SVM回归等问题,包括基于一对一算法的多类模式识别问题。
关联分析 11.19
项集
频繁项集
极大频繁项集
关联规则 支持度 置信度 阈值
两步走:频繁项集的产生——规则的产生
原始方法:Brute-force approach 枚举法草
Apriori算法
先验原理:
- 如果一个项集是频繁的,那么它的所有子集一定也是频繁的。
- 如果一个项集是非频繁的,那么它的所有超集一定也是非频繁的。
极容易想到的算法。。
可以通过散列项集计数、事务压缩、划分、采样等方法提高算法性能。
FPGroth算法
FP树的构建过程,也很简单
下面开始寻找频繁项集
从叶子节点开始,对每个项生成它的条件模式基,进而生成条件FP-tree,重复这个步骤,直至FP-tree为空或只含唯一路径。
11.26 聚类分析
熟悉的K-Means
处理分类离散情况的K-Modes,更新聚类中心时用众数代替均值
K-Means++,初始聚类中心的选择
K-Means++源码如下:
import numpy as np
from sklearn.metrics.pairwise import pairwise_distances
from sklearn.utils import check_random_state
def kmeans_plusplus(X, n_clusters, random_state=None):
n_samples, n_features = X.shape
centers = np.empty((n_clusters, n_features), dtype=X.dtype)
# Step 1: Select the first center randomly from the data points
random_state = check_random_state(random_state)
center_idx = random_state.randint(n_samples)
centers[0] = X[center_idx]
# Step 2: Compute the distances from each point to the nearest center
dist_sq = pairwise_distances(X, centers[0:1])**2
dist_sq = np.squeeze(dist_sq) # Convert from (n_samples, 1) to (n_samples,)
for i in range(1, n_clusters):
# Step 3: Choose a new center with probability proportional to distance^2
probs = dist_sq / dist_sq.sum()
cumulative_probs = np.cumsum(probs)
# Step 4: Select the next center based on cumulative probabilities
rand_val = random_state.rand()
new_center_idx = np.searchsorted(cumulative_probs, rand_val)
centers[i] = X[new_center_idx]
# Step 5: Update the distances to the nearest center
new_dist_sq = pairwise_distances(X, centers[i:i+1])**2
new_dist_sq = np.squeeze(new_dist_sq) # Convert from (n_samples, 1) to (n_samples,)
dist_sq = np.minimum(dist_sq, new_dist_sq)
return centers
K-Mediods
K中心点法,更新聚类中心时,在每一类中,计算每个成员点对应的准则函数,选取准则函数最小时对应的点作为新的中心点
from pyclust import KMedoids
PAM算法
Partitioning Around Medoids, PAM
对每一聚类随机选一个新点尝试作为中心,看看代价函数是否会变小
代价函数:每个点到其所在类中心点的距离之和
层次方法
-
AGNE算法
自底向上的合并算法, -
DIANA算法
确定超参数K
- 经验法
- 肘部法
12.3 集成学习
Bagging算法
bootstrap随机采样——分别训练出分类器——组合投票法
bootstrap随机采样:一种有放回重采样。如果每次采集和训练集数量相同次数的样本,大约有37%样本未被采样到。
RF随机森林
Bagging算法+决策树
行采样(数据采样)+列采样(特征采样)
Boosting方法
通过改变数据的权重,不断建立新的训练集子集创建新模型,最后根据分类器权重综合得到结果
AdaBoost算法
训练出一个模型——根据预测结果计算分类器权重——根据预测结果更新数据权重——再训练出一个模型——...
- 分类器权重公式 为什么是\(f^*=\frac{1}{2}ln\frac{1-\epsilon_k}{\epsilon_k}\)(\(\epsilon\)是误差率)
- 样本权重更新公式 为什么是按照\(w_{k-1,i}\cdot exp({\alpha_i y_i\cdot G_{k-1}(x)})\)分配
答:Loss使用\(exp(-\alpha_i y_i)\)
如果更换Loss以及\(f^*\)的公式,就会产生其他版本的Boost算法,如L2Boosting、Gradient boosting、LogitBoost
关于为什么\(f^*=\frac{1}{2}ln\frac{1-\epsilon_k}{\epsilon_k}\)
最小化该损失即得到\(\alpha_{t}\,=\,\frac{1}{2}l n\bigl(\frac{1\,-\,\epsilon_{t}}{\epsilon_{t}}\bigr)\)
更多推导可见【博客】深入理解Boosting算法(2)-AdaBoost
GBDT梯度提升决策树
Boosting算法+决策树
将多棵树的得分累加得到最终的预测得分,且每轮迭代,都是在现有树的基础上,增加一棵新的树去拟合前面树的预测值与真实值之间的残差。
Stacking
把不同学习器的预测结果作为训练集学习出一个新的学习器
其实是最简单最直接的一个。。。
LightGBM
Light Gradient Boosting Machine
GOSS
EFB
12.17 模型的评价
准确率、召回率、\(F_1\)值、ROC曲线(TPR-FPR)、AUC
不平衡分类问题的解决
- 过采样:增加少数类样本
- 欠采样:减少多数类样本
- 两阶段学习:先学习一组规则覆盖少数类(会误覆盖一些多数类),再用其覆盖的样本和部分多数类样本学习一组规则。分类时先用第一组规则,如果是多数类那么一定是多数类,否则再用第二组规则。
这种策略体现了机器学习技术的两种思想:
级联分类器(Cascading Classifiers):其中多个分类器按顺序排列,前一个分类器的结果影响后续分类器的应用。
两阶段分类(Two-stage Classification):将分类过程分为两个阶段,每个阶段专注于不同的任务或数据子集。
此外,这种方法也可以视为一种特定形式的代价敏感学习(Cost-sensitive Learning),因为它试图最小化少数类误分类的成本,即便这意味着要接受一定程度的多数类误分类。
- 代价敏感学习
一种是训练阶段改变损失函数,另一种是预测时期望代价最小化
解决过拟合
- 奥卡姆剃刀,正则化
- 验证集
聚类模型的评价
- 调整兰德系数
- 互信息评分
12.24 知识点复习
选择题、判断题、计算题、简答题
可以带计算器
01 绪论
-
KDD?
KDD(Knowledge Discovery in Databases),基于数据库的知识发现。首次出现于 国际人工智能联合大会(1989),1995年召开第一届KDD国际学术会议(KDD'95),1997年创刊《Knowledge Discovery and Data Mining》 -
DM?
DM(Data Mining),数据挖掘
主要内容:
关联规则挖掘【经典例子:啤酒与尿布】
监督式机器学习——标签分类(离散标签预测)、数值预测/回归(连续标签预测)
非监督式机器学习——聚类 -
数据、信息、知识的区别和联系?
-
数据挖掘的定义?
是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。 -
叙述一下数据挖掘过程?
数据经过筛选、预处理、变换等处理,经过数据挖掘得到模式,最后经过解释/评价得到知识。
02 认识数据
-
数据对象、数据集
属性、属性值、属性类型(标称属性、二元属性、序数属性、数值属性,数值又分为区间、比率),问常见的四类属性则回答标称、序数、区间、比率。 -
关于属性类型的问题
- 标称类型的数据分类模型:决策树、朴素贝叶斯、随机森林
- 序数类型的数据求均值不合理。不能用K-means算法。
- 区间类型的特征不能采用乘法原则。
- 适用于比率标定属性的数据挖掘算法:
线性回归、SVM、决策树、随机森林、K-means等。
-
例题:根据数据分布比较平均数中位数众数大小
还要知道一个经验公式
mean−mode = 3x(mean−median)
其实记住那张图也行 -
离散度量图,用五个分位数点,要会计算四分位极差IQR。箱线图/盒状图(Boxplot)也很重要,1.5IQR来算上下边缘。
-
不同类型属性数据的邻近性度量
标称型:匹配程度
二值型:Jacccard系数
序数型:映射到[0,1]区间
数值型:闵可夫斯基距离、余弦相似性
感觉会考计算(不过说主要看数值型的)
03 数据预处理
-
数据清理
数据丢失:忽略、手动填写、自动填写(均值/决策树)
数据噪声:箱线图删除离群点
数据不一致:替换 -
数据集成
相关性分析很重要(Pearson相关系数、协方差的公式和关系,注意区分样本标准差和总体标准差)
- 数据规约
三方面:降维(PCA)、降数据(抽样)、数据压缩(分为有损、无损)
PCA的详细过程可以学一下(1+4步)!相关系数矩阵、求特征值特征向量(特征向量模长是1)、求累计贡献率85%-95%的那些特征作为主成分
- 数据规范化和数据离散化(数据转换)
- 最小最大规范化
- z-分数规范化
- 非监督离散化:主要是等宽法、等频法。当然也可以聚类。
04 分类的基本概念与朴素贝叶斯分类器
这里涉及朴素贝叶斯分类的计算,很重要,不过很简单。
还有就是知道它以独立性假设为基础。
05 决策树分类
-
Hunt算法 贪心策略 没有决定分类属性选择的顺序
-
ID3 (Iterative Dichotomiser 3) 使用信息增益
-
C4.5 使用信息增益率,偏好取值较少的属性。
书上有一个细节,不一定选的是信息增益率最大的,首先信息增益要高于平均水平,再从中选择增益率最大的
-
数据连续怎么办等细节问题
多路划分 or 二元划分(从最小值开始建立分割区间,开始计算各自的信息增益,选择信息增益最大的一个分割区间作为最佳划分点) -
评价一下决策树?
1)构建分类(回归)模型的非参数方法
2)学习离散值函数
3)容易解释
4)代价低
5)对噪声鲁棒性
6)冗余属性不影响准确率
1)数据碎片问题,叶结点可能记录数太少
2)子树重复,使决策树过于复杂
3)决策树无法学习特征之间的线性关系,难以完成特征构造
- 不知道属性缺失值的会不会考。 。
06 基于规则的分类
-
覆盖率、准确率、互斥规则集、有序规则集(决策表)、无序规则集、缺省类、穷举集、基于规则的排序/基于类的排序
-
算法:顺序覆盖(11条)
- 类是有序的!依次对每个类建立一个或多个规则
- 删除实例:删除r覆盖的所有记录,在剩余数据集上学习下一个规则,直到所有第i类记录都被删除。目的是防止规则重复。删除正实例防止高估后面规则的准确率,删除负实例防止过拟合错误训练、低估后面规则的准确率
- Learn-One-Rule函数
分为规则增长、规则评估、停止准则、规则剪枝四部分。规则增长有一般到特殊(通常采用的策略),也有特殊到一般(适用于小样本情况)
- 规则评估
- 准确率
- 规则似然比(重要)
- Laplace
- FOIL信息增益
-
停止条件
计算增益,如果增益不显著, 则丢弃新规则 -
规则剪枝
降低错误剪枝,类似于决策树后剪枝:删除规则中的合取项,比较剪枝前后的错误率,如果降低了错误率,则剪掉该合取项 -
急切学习 & 惰性学习
KNN 属于惰性学习 -
间接算法:决策树
-
规则分类的评价(4+3):
-
表达能力与决策树一样高、性能可与决策树相媲美
-
容易解释
-
容易产生
-
能够快速对新实例分类
-
规则库难以维护
-
规则匹配计算量大
-
缺乏泛化能力
- KNN算法(6步)的默写
07 回归方法
-
最小二乘
公式记一下吧! -
逻辑回归 logistic函数 梯度下降求解 正则化
-
决策树回归算法(6步)
可以去看一下例子,可能会考计算(不过这也太麻烦了吧。。。)
【这个l(x)是啥东西?】
08 SVM
-
根据统计学习理论,学习机器的实际风险由经验风险值和置信范围值两部分组成。而SVM是一种基于结构风险最小化准则的学习方法。SVM的求解最后转化成二次规划问题的求解,因此SVM的解是全局唯一的最优解
-
数学推导可以回顾一下
09 神经网络
-
三方面
神经元激活规则、网络拓扑结构、学习算法 -
BP核心思想:将输出误差以某种形式通过隐层向输入层逐层反传
-
BP算法默写(4步)
- 初始化权重
- 循环以下两步,直到满足条件
- 向前传播输入:在每个节点加权求和,再代入激活函数
- 向后传播误差
- BP注意事项(3+1+4)
-
初始值选择
应设定在一均匀分布的小范围内、不能为零否则趋向于鞍点、不能太大否则远离优化点学习率很慢 -
训练样本输入次序
不同次序学习结果不同,每一次的学习循环中次序应不同 -
终止条件
权值向量的梯度 < 给定值、均方误差值 < 给定误差容限值、推广能力达到目标、结合上述各种方式
10 关联规则挖掘
-
项集、支持度、阈值、频繁项集、最(极)大频繁项集、关联规则、关联规则的支持度和置信度、minsup和minconf
-
子任务一:频繁项集的产生
原始方法:Brute-force approach 枚举法草
先验原理:
- 如果一个项集是频繁的,那么它的所有子集一定也是频繁的。
- 如果一个项集是非频繁的,那么它的所有超集一定也是非频繁的。
Apriori算法(3条):根据先验原理,逐层搜索,包括自连接获取候选集、对候选集进行剪枝两步。注意两种情况都需要剪枝:支持度小于最小支持度 or 有子集是非频繁项集
- Apriori算法评价(3+3+4)
优点:使用先验性质提高了频繁项集逐层产生的效率、简单易理解、数据集要求低
缺点:多次扫描数据库、候选项规模庞大、计算支持度开销大
可以通过散列项集计数、事务压缩、划分、采样等方法提高算法性能。
-
FPGroth算法(可能不会考)
给定minsup,先删除不满足minsup的项(不是项集!),对每个项集的项按频繁程度降序排序,然后构建FP树。
构建好后,从叶子节点开始,对每个项生成它的条件模式基,进而生成条件FP-tree,重复这个步骤,直至FP-tree为空或只含唯一路径。 -
子任务二:从频繁项集中产生关联规则
具体来说,久石给定频繁项集Y, 要查找Y的所有非空真子集X,使得 X→Y–X 的置信度超过最小置信度阈值minconf。
这样就会有2^k–2 个候选关联规则。
通常置信度不满足反单调性。例如:c(ABC →D) 可能大于也可能小于 c(AB →D)
但是,针对同一个频繁项集的关联规则,如果规则的后件满足子集关系,那么这些规则的置信度间满足反单调性。比如c(ABC →D)≥c(AB →CD)
根据这个定理在规则树状图剪枝即可。
11 聚类分析
-
数据挖掘对聚类的要求(2+2+2)
处理噪声数据的能力、对输入数据的顺序不敏感和增量聚类、高维度 -
启发式方法
K-Means算法(4步)
K-Means优缺点(3+6)
处理分类离散情况的K-Modes:更新聚类中心时用(逐维)众数代替均值
K-Means++:初始聚类中心的选择(5步)
K-Mediods:K中心点法,更新聚类中心时,在每一类中,计算每个成员点对应的准则函数,选取准则函数最小时对应的点作为新的中心点 -
PAM算法(可能不考,6步)
Partitioning Around Medoids, PAM
K-Mediods的一种
随机选一个非代表点,尝试和每个代表点身份交换,看看代价函数是否会变小
代价函数:每个点到其所在类中心点的距离之和 -
层次方法
-
AGNE算法
自底向上的合并算法(凝聚)
最小距离/单链接、最大距离/全链接、平均距离/平均链接
三种距离公式可以记一下 -
DIANA算法(可能不考)
自顶向下方法(分裂)
- 聚类评估
两方面:
- 在数据集上进行聚类的可行性
- 产生结果的质量
任务: - 估计聚类趋势:评估数据集是否存在非随机结构,如霍普金斯统计量
- 确定数据集中的簇数:肘部法
- 测定聚类质量
有监督:用某种聚类质量度量对聚类结果和基准进行比较
无监督:通过考察簇的分离情况和簇的紧凑情况来评估聚类,如轮廓系数
12 集成学习
- Bagging算法
bootstrap随机采样——分别训练出分类器——组合投票法
bootstrap随机采样:一种有放回重采样。如果每次采集和训练集数量相同次数的样本,大约有37%样本未被采样到。
- RF随机森林
Bagging算法+决策树
行采样(数据采样)+列采样(特征采样)
两个随机:随机选取训练样本集和随机选取分裂属性集
优点(5条)
- 两个随机性的引入,不容易过拟合
- 两个随机性的引入,抗噪声
- 对数据集的适应能力强:离散连续型数据都能处理,数据集无需规范化,能够有效地运行在大数据集上
- 能处理高维,不需要降维
- 能处理缺省值问题
- Boosting方法
核心思想(3方面)
- 样本的权重
每次循环后分错样本在训练集中所占权重增大,使得下一次循环的弱学习器能够集中力量对这些错误样本进行判断。 - 弱学习器的权重
准确率越高的弱学习机权重越高 - 循环控制
在强学习器的组合中增加一个加权的弱学习器,使准确率提高,损失函数值减小。
- AdaBoost算法
-
流程(5条)
-
样本权重更新公式 为什么是按照\(w_{k-1,i}\cdot exp({\alpha_i y_i\cdot G_{k-1}(x)})\)分配:Loss使用\(exp(-\alpha_i y_i)\)
-
GBDT梯度提升决策树(可能不考)
Boosting算法+决策树
将多棵树的得分累加得到最终的预测得分,且每轮迭代,都是在现有树的基础上,增加一棵新的树去拟合前面树的预测值与真实值之间的残差。 -
Stacking
把不同学习器的预测结果作为训练集学习出一个新的学习器
13 模型评价
- 混淆矩阵及其各种度量
- 准确率
- 精确率
- 召回率
- TPR、FPR
- ROC曲线(要会画)
- AUC
- 减少泛化误差的方式
引入惩罚项,使较简单的模型比复杂的模型更可取:引入正则项;神经网络中引入dropout机制;使用验证集

浙公网安备 33010602011771号