《数据挖掘 原理与应用》 学习笔记

第五章 决策树分类 10.15

Hunt算法 只是在不断划分 没有选择最佳划分
在这个基础上,划分数据集的方法有以下几个算法

  1. ID3 (Iterative Dichotomiser 3):

    • ID3是由Ross Quinlan在1986年开发的。"ID3"这个名字是迭代二分器(Iterative Dichotomiser)的第三个版本的意思。它使用信息增益作为属性选择的标准来构建决策树。
  2. C4.5:

    • C4.5也是由Ross Quinlan开发的,是ID3的一个改进版,发表于1993年。C4.5的名字并没有特别明确的意义,但可以理解为C4系列算法中的一个进步版本。与ID3相比,C4.5能够处理连续值的属性和缺失值【这一点西瓜书上介绍很详细!】,并且使用信息增益率来选择最佳分裂属性,以减少偏向具有大量属性值的属性。C4.5还有后剪枝操作。增益比率
  3. 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}\)

\[\begin{align*} {\cal L}_{exp}(\alpha_{t}, h_{t}|D_{t}) &= \mathbb{E}_{x\sim D_{t}}[e^{-\alpha_{t}}\mathbb{I}(f(x)=h_{t}(x)) + e^{\alpha_{t}}\mathbb{I}(f(x)\neq h_{t}(x))]\\ &=e^{-\alpha_{t}}\,P_{x\sim D_{t}}(f(x)=h_{t}(x))+e^{\alpha_{t}}P_{x\sim D_{t}}(f(x)\neq h_{t}(x)))\\ &=e^{-\alpha_{t}}\,(1-\epsilon_{t})+e^{\alpha_{t}}\epsilon_{t} \end{align*} \]

最小化该损失即得到\(\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 绪论

  1. KDD?
    KDD(Knowledge Discovery in Databases),基于数据库的知识发现。首次出现于 国际人工智能联合大会(1989),1995年召开第一届KDD国际学术会议(KDD'95),1997年创刊《Knowledge Discovery and Data Mining》

  2. DM?
    DM(Data Mining),数据挖掘
    主要内容:
    关联规则挖掘【经典例子:啤酒与尿布】
    监督式机器学习——标签分类(离散标签预测)、数值预测/回归(连续标签预测)
    非监督式机器学习——聚类

  3. 数据、信息、知识的区别和联系?

  4. 数据挖掘的定义?
    是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。

  5. 叙述一下数据挖掘过程?
    数据经过筛选、预处理、变换等处理,经过数据挖掘得到模式,最后经过解释/评价得到知识。

02 认识数据

  1. 数据对象、数据集
    属性、属性值、属性类型(标称属性、二元属性、序数属性、数值属性,数值又分为区间、比率),问常见的四类属性则回答标称、序数、区间、比率。

  2. 关于属性类型的问题

  • 标称类型的数据分类模型:决策树、朴素贝叶斯、随机森林
  • 序数类型的数据求均值不合理。不能用K-means算法。
  • 区间类型的特征不能采用乘法原则。
  • 适用于比率标定属性的数据挖掘算法:
    线性回归、SVM、决策树、随机森林、K-means等。
  1. 例题:根据数据分布比较平均数中位数众数大小
    还要知道一个经验公式
    mean−mode = 3x(mean−median)
    其实记住那张图也行

  2. 离散度量图,用五个分位数点,要会计算四分位极差IQR。箱线图/盒状图(Boxplot)也很重要,1.5IQR来算上下边缘。

  3. 不同类型属性数据的邻近性度量
    标称型:匹配程度
    二值型:Jacccard系数
    序数型:映射到[0,1]区间
    数值型:闵可夫斯基距离、余弦相似性

感觉会考计算(不过说主要看数值型的)

03 数据预处理

  1. 数据清理
    数据丢失:忽略、手动填写、自动填写(均值/决策树)
    数据噪声:箱线图删除离群点
    数据不一致:替换

  2. 数据集成

相关性分析很重要(Pearson相关系数、协方差的公式和关系,注意区分样本标准差和总体标准差)

  1. 数据规约
    三方面:降维(PCA)、降数据(抽样)、数据压缩(分为有损、无损)

PCA的详细过程可以学一下(1+4步)!相关系数矩阵、求特征值特征向量(特征向量模长是1)、求累计贡献率85%-95%的那些特征作为主成分

  1. 数据规范化和数据离散化(数据转换)
  • 最小最大规范化
  • z-分数规范化
  • 非监督离散化:主要是等宽法、等频法。当然也可以聚类。

04 分类的基本概念与朴素贝叶斯分类器

这里涉及朴素贝叶斯分类的计算,很重要,不过很简单。
还有就是知道它以独立性假设为基础。

05 决策树分类

  1. Hunt算法 贪心策略 没有决定分类属性选择的顺序

  2. ID3 (Iterative Dichotomiser 3) 使用信息增益

  3. C4.5 使用信息增益率,偏好取值较少的属性。

书上有一个细节,不一定选的是信息增益率最大的,首先信息增益要高于平均水平,再从中选择增益率最大的

  1. 数据连续怎么办等细节问题
    多路划分 or 二元划分(从最小值开始建立分割区间,开始计算各自的信息增益,选择信息增益最大的一个分割区间作为最佳划分点)

  2. 评价一下决策树?

1)构建分类(回归)模型的非参数方法
2)学习离散值函数
3)容易解释
4)代价低
5)对噪声鲁棒性
6)冗余属性不影响准确率

1)数据碎片问题,叶结点可能记录数太少
2)子树重复,使决策树过于复杂
3)决策树无法学习特征之间的线性关系,难以完成特征构造

  1. 不知道属性缺失值的会不会考。 。

06 基于规则的分类

  1. 覆盖率、准确率、互斥规则集、有序规则集(决策表)、无序规则集、缺省类、穷举集、基于规则的排序/基于类的排序

  2. 算法:顺序覆盖(11条)

  • 类是有序的!依次对每个类建立一个或多个规则
  • 删除实例:删除r覆盖的所有记录,在剩余数据集上学习下一个规则,直到所有第i类记录都被删除。目的是防止规则重复。删除正实例防止高估后面规则的准确率,删除负实例防止过拟合错误训练、低估后面规则的准确率
  • Learn-One-Rule函数
    分为规则增长、规则评估、停止准则、规则剪枝四部分。规则增长有一般到特殊(通常采用的策略),也有特殊到一般(适用于小样本情况)
  1. 规则评估
  • 准确率
  • 规则似然比(重要)
  • Laplace
  • FOIL信息增益
  1. 停止条件
    计算增益,如果增益不显著, 则丢弃新规则

  2. 规则剪枝
    降低错误剪枝,类似于决策树后剪枝:删除规则中的合取项,比较剪枝前后的错误率,如果降低了错误率,则剪掉该合取项

  3. 急切学习 & 惰性学习
    KNN 属于惰性学习

  4. 间接算法:决策树

  5. 规则分类的评价(4+3):

  • 表达能力与决策树一样高、性能可与决策树相媲美

  • 容易解释

  • 容易产生

  • 能够快速对新实例分类

  • 规则库难以维护

  • 规则匹配计算量大

  • 缺乏泛化能力

  1. KNN算法(6步)的默写

07 回归方法

  1. 最小二乘
    公式记一下吧!

  2. 逻辑回归 logistic函数 梯度下降求解 正则化

  3. 决策树回归算法(6步)
    可以去看一下例子,可能会考计算(不过这也太麻烦了吧。。。)
    【这个l(x)是啥东西?】

08 SVM

  1. 根据统计学习理论,学习机器的实际风险由经验风险值和置信范围值两部分组成。而SVM是一种基于结构风险最小化准则的学习方法。SVM的求解最后转化成二次规划问题的求解,因此SVM的解是全局唯一的最优解

  2. 数学推导可以回顾一下

09 神经网络

  1. 三方面
    神经元激活规则、网络拓扑结构、学习算法

  2. BP核心思想:将输出误差以某种形式通过隐层向输入层逐层反传

  3. BP算法默写(4步)

  • 初始化权重
  • 循环以下两步,直到满足条件
  • 向前传播输入:在每个节点加权求和,再代入激活函数
  • 向后传播误差
  1. BP注意事项(3+1+4)
  • 初始值选择
    应设定在一均匀分布的小范围内、不能为零否则趋向于鞍点、不能太大否则远离优化点学习率很慢

  • 训练样本输入次序
    不同次序学习结果不同,每一次的学习循环中次序应不同

  • 终止条件
    权值向量的梯度 < 给定值、均方误差值 < 给定误差容限值、推广能力达到目标、结合上述各种方式

10 关联规则挖掘

  1. 项集、支持度、阈值、频繁项集、最(极)大频繁项集、关联规则、关联规则的支持度和置信度、minsup和minconf

  2. 子任务一:频繁项集的产生

原始方法:Brute-force approach 枚举法草

先验原理:

  • 如果一个项集是频繁的,那么它的所有子集一定也是频繁的。
  • 如果一个项集是非频繁的,那么它的所有超集一定也是非频繁的。

Apriori算法(3条):根据先验原理,逐层搜索,包括自连接获取候选集、对候选集进行剪枝两步。注意两种情况都需要剪枝:支持度小于最小支持度 or 有子集是非频繁项集

  1. Apriori算法评价(3+3+4)

优点:使用先验性质提高了频繁项集逐层产生的效率、简单易理解、数据集要求低

缺点:多次扫描数据库、候选项规模庞大、计算支持度开销大

可以通过散列项集计数、事务压缩、划分、采样等方法提高算法性能。

  1. FPGroth算法(可能不会考)
    给定minsup,先删除不满足minsup的项(不是项集!),对每个项集的项按频繁程度降序排序,然后构建FP树。
    构建好后,从叶子节点开始,对每个项生成它的条件模式基,进而生成条件FP-tree,重复这个步骤,直至FP-tree为空或只含唯一路径。

  2. 子任务二:从频繁项集中产生关联规则
    具体来说,久石给定频繁项集Y, 要查找Y的所有非空真子集X,使得 X→Y–X 的置信度超过最小置信度阈值minconf。
    这样就会有2^k–2 个候选关联规则。
    通常置信度不满足反单调性。例如:c(ABC →D) 可能大于也可能小于 c(AB →D)
    但是,针对同一个频繁项集的关联规则,如果规则的后件满足子集关系,那么这些规则的置信度间满足反单调性。比如c(ABC →D)≥c(AB →CD)
    根据这个定理在规则树状图剪枝即可。

11 聚类分析

  1. 数据挖掘对聚类的要求(2+2+2)
    处理噪声数据的能力、对输入数据的顺序不敏感和增量聚类、高维度

  2. 启发式方法
    K-Means算法(4步)
    K-Means优缺点(3+6)
    处理分类离散情况的K-Modes:更新聚类中心时用(逐维)众数代替均值
    K-Means++:初始聚类中心的选择(5步)
    K-Mediods:K中心点法,更新聚类中心时,在每一类中,计算每个成员点对应的准则函数,选取准则函数最小时对应的点作为新的中心点

  3. PAM算法(可能不考,6步)
    Partitioning Around Medoids, PAM
    K-Mediods的一种
    随机选一个非代表点,尝试和每个代表点身份交换,看看代价函数是否会变小
    代价函数:每个点到其所在类中心点的距离之和

  4. 层次方法

  • AGNE算法
    自底向上的合并算法(凝聚)
    最小距离/单链接、最大距离/全链接、平均距离/平均链接
    三种距离公式可以记一下

  • DIANA算法(可能不考)
    自顶向下方法(分裂)

  1. 聚类评估
    两方面:
  • 在数据集上进行聚类的可行性
  • 产生结果的质量
    任务:
  • 估计聚类趋势:评估数据集是否存在非随机结构,如霍普金斯统计量
  • 确定数据集中的簇数:肘部法
  • 测定聚类质量
    有监督:用某种聚类质量度量对聚类结果和基准进行比较
    无监督:通过考察簇的分离情况和簇的紧凑情况来评估聚类,如轮廓系数

12 集成学习

  1. Bagging算法
    bootstrap随机采样——分别训练出分类器——组合投票法

bootstrap随机采样:一种有放回重采样。如果每次采集和训练集数量相同次数的样本,大约有37%样本未被采样到。

  1. RF随机森林
    Bagging算法+决策树
    行采样(数据采样)+列采样(特征采样)
    两个随机:随机选取训练样本集和随机选取分裂属性集
    优点(5条)
  • 两个随机性的引入,不容易过拟合
  • 两个随机性的引入,抗噪声
  • 对数据集的适应能力强:离散连续型数据都能处理,数据集无需规范化,能够有效地运行在大数据集上
  • 能处理高维,不需要降维
  • 能处理缺省值问题
  1. Boosting方法
    核心思想(3方面)
  • 样本的权重
    每次循环后分错样本在训练集中所占权重增大,使得下一次循环的弱学习器能够集中力量对这些错误样本进行判断。
  • 弱学习器的权重
    准确率越高的弱学习机权重越高
  • 循环控制
    在强学习器的组合中增加一个加权的弱学习器,使准确率提高,损失函数值减小。
  1. AdaBoost算法
  • 流程(5条)

  • 样本权重更新公式 为什么是按照\(w_{k-1,i}\cdot exp({\alpha_i y_i\cdot G_{k-1}(x)})\)分配:Loss使用\(exp(-\alpha_i y_i)\)

  1. GBDT梯度提升决策树(可能不考)
    Boosting算法+决策树
    将多棵树的得分累加得到最终的预测得分,且每轮迭代,都是在现有树的基础上,增加一棵新的树去拟合前面树的预测值与真实值之间的残差。

  2. Stacking
    把不同学习器的预测结果作为训练集学习出一个新的学习器

13 模型评价

  1. 混淆矩阵及其各种度量
  • 准确率
  • 精确率
  • 召回率
  • TPR、FPR
  • ROC曲线(要会画)
  • AUC
  1. 减少泛化误差的方式

引入惩罚项,使较简单的模型比复杂的模型更可取:引入正则项;神经网络中引入dropout机制;使用验证集

posted @ 2024-09-11 17:52  藤君  阅读(286)  评论(0)    收藏  举报