【学习】数据挖掘导论

链接: https://pan.baidu.com/s/1pIbKslArK8zlQ3f4UOyJZA 提取码: t537

第一章 绪论

1.1 什么是数据挖掘?
image.png
1.4 数据挖掘任务

预测任务:用自变量来预测因变量,又可分为分类和回归;
描述任务:导出概括数据中潜在的联系模式(相关、趋势、聚类等)

第二章 数据

2.1 数据类型

数据的属性:温度、颜色等。
数据类型:不同的属性又有不同的类型,标称(几个分类之间完全没有序数关联)、序数(比如衬衣尺码,属于是有层级之分的标称)、区间、比率等。
数据集的类型:进一步,数据集的话,还需要考虑其维度、稀疏性、分辨率、序列性等。

2.2 数据质量

存在的问题:测量误差和数据收集错误、噪声和伪像;离群点(异常值)、遗漏值等
评价的维度:精度(通常用标准差来度量,表示的是多次重复测量值之间的接近程度)、准确率。

2.3 数据预处理

1)聚集;
2)抽样:挖掘中的抽样是为了提升效率。
3)维规约(降维):常用PCA和SVD(奇异值分解)来降维
4)特征子集:嵌入方法(与具体算法有关,类似于决策树那种,到最后面不对一些信息量很少的维度进行决策)、特征加权(对重要的特征赋予更高的权值,这个其实已经引入领域知识了)
5)特征创建:不同于特征子集,这里是利用原有特征创建新特征,包括特征提取(比如提取图像中关于人脸边缘的一些信息)、映射变换(傅里叶、小波)、特征构造(一般要采用专家意见和领域知识)
6)离散化和二元化:二元化比如遗传算法编码,离散化比如区间数据的决策树使用。离散化尤其需要注意是采用非监督离散化还是监督离散化,监督离散化常用基于熵的划分方法。还有一种情况,是分类情况有很多值,我们需要对其进行合并,减少分类值的个数。
7)変量変换:两种重要的变化,简单函数变换和规范化。简单函数变换一般是为了更好地寻找规律,而规范化则是为了标准化数据。

2.4 相似性和相异性的度量

相似性和相异性可以是互相转化,例如相似性=1-相异性,或则相似性=1/相异性,具体要看数据构成。

  • 常用距离公式:欧几里得距离公式、闵可夫斯基距离公式(就是范式的推导公式)
  • 其他邻近性度量公式:简单匹配系数SMC、Jaccard系数、余弦相似度、相关性等。

第三章探索数据

3.2 汇总统计

汇总统计:频数、众数、百分位数、截断均值(截断上下限多少百分位之后的均值)、极差、方差、标准差、协方差(相关性)。

3.3 可视化

常用可视化图:茎叶图(我觉得不用管)、直方图、二维直方图、盒状图(盒子一般是1/4~3/4分位)、饼图、累积分布函数、散布图;
时空数据:空间的等高线图、曲面图,时间的切片(按一定时间尺度切片)、动画

3.4 OLAP

https://zhuanlan.zhihu.com/p/75453235
https://blog.csdn.net/qq_33414271/article/details/81149966
OLAP其实就是切片,适用于维度特别多,而且具备一定的层级关系(下钻和汇总),因此如果每次查询要单独编写语句进行查询就很麻烦,因为olap就提前设定好维度信息,在数据仓库中计算好各种维度的计算结果,这样在查询的时候就直接提取数据就可以了。所以总的来说,OLAP是数据仓库技术,但是是直接为数据展示和数据分析服务的。

第四章 分类:决策树

4.3 决策树的工作原理

节点分类:根节点、内部节点、叶节点(终结点)
Hunt算法:ID3、C4.5、CART等算法的基础。
针对不同属性的输出:二元属性(直接分)、标称属性(多个标称可能需要合并为两类)、序数属性(要注意序数关系)、连续属性(按区间分)
选择最佳的划分度量:度量基础,熵、gini、卡方(卡方还没研究过,知道就行了)等→信息增益→信息增益率
决策树算法:确定度量方式→根据所选度量(代价函数)确定各个节点作为新一轮决策树节点的性能,并选出最佳节点→进行下一轮节点筛选,根据迭代条件决定是否停止增长
典型案例:区分访问web的是机器人(爬虫)还是正常用户。
决策树的特点:一旦建立,则模型特别快;模型容易解释,而且在一些简单数据集中精度也很高;对噪声干扰具有较好地鲁棒性(鲁棒性是指哪怕训练集中有很大的扰动,也不会影响模型精度,稳定性是指哪怕训练集中有很大的扰动,但是如果这个模型是不断训练的,那之后的精度也会不断提高);冗余属性不会影响决策树的准确率(因为另一个冗余属性的增益率不会高了,所以就不会被选择)

4.4 模型的过分拟合

误差类型:训练误差、泛化误差
过拟合的原因:噪声导致(鲁棒性不好)、样本没选好(缺乏代表性样本)、多重比较(属性太多时,容易发生随机事件将一些不重要的节点作为新节点,所以决策树本身是不适合多属性决策的)
过拟合的一般处理方法:先剪枝和后剪枝
泛化误差估计:再带入估计、估计统计上界、结合模型复杂度进行评估、使用确认集(将训练集再细分为训练集和误差估计集)

4.5 评估分类器的性能
  • 保持方法:保持集
  • 交叉验证:保证每个记录用来训练的次数相同,且都被验证一次。。。二折交叉验证:分为两个同样数量的集合;k折交叉验证:分为k份相同的数据,每次用一个集合来做验证,共交叉验证一次;留一发:k=样本数目。。。
4.6 比较分类器的方法

评估模型的准确性:根据验证集的校验记录(准确率),估计一定置信水平下的模型准确率水平。(因为在充分的校验下,模型的准确率肯定会趋于真实值的)
比较两个模型的性能:利用t分布或者F分布来检验是否具有显著性差异。。。

第五章分类:其他技术

5.1 各类算法

决策树
KNN
贝叶斯:贝叶斯误差率(就是ROC曲线那一套,判断阈值该取多少合适)、贝叶斯信念网络(就是非朴素贝叶斯)
人工神经网络ANN:感知器(没有隐藏层)、激活函数选择(线性、双曲正切、S型、符号函数)、BP反向传播求解(本质上还是爬坡的思想)
SVM:基本理论、松弛变量和惩罚函数、核函数选择(多项式核、RBF、s型)
组合方法:bagging(多个模型进行投票)、boosting(提升分类错误的样本的权重)

5.7 不平衡类问题

度量:

  • 基本度量:TP、FP、TN、FN
  • ROC度量:灵敏度TPR;特异度TNR;召回率recall;精度precision;混淆矩阵
  • 综合度量:利用精度和召回率构建F-measure,是两者的加权值。。
  • AUC:ROC曲线下面积,越大越好。。。
    代价敏感问题:上面的F-measure是一种折中

计算模型效果的方法,这里也可以用一些代价函数来处理,比如把正确的分为错误的代价是把错误的分为正确的的100倍。。其实核心思想还是一个权重问题。。
处理不平衡样本的方法,比如有100个正样本和1000个负样本:

  • a)只从1000个负样本中抽100个样本,但容易导致未能筛选出有效样本;
  • b)是a基础上,多次抽取,并用组合模型来构建多分类器;
  • c)反复抽样复制正样本,直到有1000个正样本,但是容易导致噪声正样本过分拟合
5.8 多类问题

类似于用SVM来处理多类问题一样,那就构建多个1/n-1类分类器,然后进行组合的选择。

第六章关联分析:基本概念和算法

6.1 问题定义

主要解决两个问题:

  • 从数据集中发现关联模式可能在计算上要付出很大代价;
  • 有的模式可能是虚假的。
6.2 基本概念

基本概念:支持度(包含规则的条目占所有条目的比例)、置信度(包含规则的条目占包含规则前置条件的条目的比例)。所以当然是希望支持度和置信度越高越好,置信度的话可以作为一种条件概率来估计规则条件。

6.3 规则产生

发现关联规则:就是指发现支持度大于minsup、置信度大于minconf的规则。两者就是给定的阈值。可以变为第一步先找频繁项集(支持度大于阈值)、第二部提取规则(置信度大于阈值)

6.4 Apriori算法
image.png
6.7 关联模式评估

支持度和置信度可以保证在样本数不够的时候,筛选掉一些偶然形成的强规则。但实际上筛选出这些规则后,还要进一步评估,是为了避免因为样本倾斜而得到错误地或者不合适的结论。
常用:兴趣因子、相关系数、IS度量(余弦度量)

image.png

在实际过程中,可以把所有可用度量都进行求解,然后再确定哪个度量更合适分析当前的模式。当然度量中是显然可能会存在矛盾的信息的。

辛普森悖论:因为忽略了隐藏变量,从而得出一个完全相反的结论,文中给出了一个例子,是因为没有对职业进行分层,所以,在实际分析中,要考虑分层来避免辛普森悖论产生虚假的模式。

6.8 交叉支持

交叉支持:说的是,如果本身就存在很多样本较小但是很重要的规则,比如:啤酒→珠宝,实际上可能根本通不过支持度校验。如果支持度放得很小,又会产生很多噪声规则。这种情况就是交叉支持。
关于交叉支持的解决办法这里不深究。

第七章 关联分析:高级概念

7.1 处理分类属性

处理二元属性、标称属性(有的标称属性不适合直接数据离散化,而是要单独成很多列)。
还要注意标称属性如果类别过多,可以考虑汇集成一个稍微大一些的类。。

7.2 处理连续属性
  • 基于离散化的方法:就是把连续数据离散化很多个段(也是分层的一种嘛),来寻找强规则,但是计算开销也很大。
  • 统计原理:在离散化之后,通常是按支持度和置信度来判断是否强规则对不对,但是在此外,还需要判断离散化后的区间之间是否具有显著性差异,比如你把年龄 1~100岁 离散为 1~50 , 50~100 ,但如果两个样本都很集中在 45~55 之间,那么很有可能这样离散的区间并没有显著性差异。。。所以这里讲的是一个统计校验的问题。。
7.3 处理概念分层

Umm。。。就是说比如食品可以细分为面包和牛奶,面包又可以细分为balabala,所以在本身一些存在严密分层逻辑况下的物品时候,可以严格按照框架寻找关联关系,但是就是会涉及到计算量和过度发现虚假模式。。

7.4 序列模式

序列问题就是时间戳问题哈。。

序列模式发现:有很多主体(ABCDE)在时间序列上发生很多事件(称为序列事件吧),然后找序列模式就是找各个主体出现序列事件的概率大于约定的支持度missup的序列。。。

和常规关联分析的区别:

  • 常规的关联分析是不存在时间戳的,比如下面的A,把所有时间合并起来就是12345,那么常规就是找23同时发生的关联度,但是序列的话必须细化到每个时间戳;
  • 序列事件可以找组合序列,比如要发生<1,2>和<5>才算是一种关联,类似于常规关联是找买鸡蛋的人同时也会买牛奶,那么序列模式就是买鸡蛋的人,之后也会买牛奶。。
  • 此外还可以规定时间限制,比如两次序列的时间间隔不能超过多少等等。。。


    image.png
7.6 非频繁模式

为什么要挖掘非频繁模式,旨在探测竞争关系和故障,比如火灾和报警系统如果是非频繁的,那么说明系统有故障了。。。

第八章 聚类分析:基本概念和算法

8.1 概述

按聚类类型分:层次聚类和非层次聚类、模糊聚类与完全互斥的聚类

按簇类型分:我们以前说的基本上是基于中心的簇(离自己簇的中心距离最近)、但实际上还有明显分离的簇(簇内的对象到同簇中每个对象的距离都比到其他簇的对象的距离小。。)、基于密度的等等,这里基本上基于中心的簇就够用了。。

8.2 K均值

需要考虑的问题:

  • 初始质心的优选;
  • 空簇处理(直接用增加簇个数的方法来填充数量);
  • 离群点处理;
  • 分裂簇和合并簇的方法;
  • 增量更新质心(而不是每一次大迭代完成再更新)

二分K均值:基本K均值的补充,由1个簇→分裂为2个簇→选中其中的一个簇分裂为两个簇,现在总共有3个簇。。。直至满足条件。。。。每一次要分裂哪个簇,是根据分裂后的聚类结果来选的。。

8.3 凝聚层次聚类

方法:合并的方法(树状图,广泛采用的就是这种方法)、分裂的方法(这个基本上没看到)
簇之间的邻近性定义:两个簇的min、max、平均值邻近度、ward方法。层次聚类一般采用平均值邻近度和ward方法,ward方法是计算合并簇导致的SSE增加量来确定要合并的簇的,这个也是K均值聚类通常采用的方法。。。不同的邻近性定义还可以用一个综合的lance-williams公式来表示,不同系数就对应不同方法。

8.4 DBSCAN(密度聚类)

关键指标:点半径eps、点半径领域内的点个数minpts阈值
关键定义:核心点、边界点和噪声点
算法流程:这个非监督的算法,不用指定K,但需要指定eps和minpts,所以这两个指标就确定了簇的个数。。。

如何确定参数eps和minpts:有一种K-距离方法,比如k=4,查看原始所有数据点的第k个最邻近点的距离,然后并进行排序,排序到后面肯定有很多店的k-距离出现突变,说明这些点就是噪声点,那么久可以选定k=minpts,然后发生突变的距离为eps,这样既能保证绝大部分点可以被聚类,又可以剔除噪声数据。。。不过总的来说这种方法还是很依赖于人工结合图来进行判断。。

8.5 簇评估

评估方法:

  • n 凝聚度和分离度:,其实就是组内距离和组间距离,在此基础上,轮廓系数就是两者的一个混合值。。
  • n 邻近度矩阵(这个很少用啊,其实就是计算所有数据的相似度,然后这个相似度还要再转化一下,其实就是距离,只是要归一化一下):
  • n 层次聚类还有个共性分类相关系数,这个是真的没看懂,不过反正也用不到。。。

确定正确的簇个数:根据图示结果来判断

第九章 聚类分析:基本概念和算法

9.2 模糊聚类

K均值的模糊版本,称作模糊C均值(FCM),而K均值本来就又叫做C均值。。。
https://www.cnblogs.com/wxl845235800/p/11046248.html
最后的聚类结果就是,A对于簇1的隶属度为30%,对于簇2的隶属度为70%;B对于簇1的隶属度为25%,对于簇2的隶属度为35%。。。然后簇1的坐标为(x,x,x,x),簇二的坐标为(y,y,y,y)

第十章 异常检测

检测方法:

  • 基于模型的技术(利用统计方法确定概率分布模型):一元正态分布、多元正态分布、混合模型
  • 基于邻近度的技术:KNN,应该是每个点都计算其余所有点的距离,k以内的就算作非离群点,其他点则根据距离计算离群值,然后每个点做一个离群点得分的加权。。K的选取十分管家
  • 基于密度的技术
  • 基于聚类的技术:一种是丢弃远离其他簇且数目较小的小簇,所以这里有两个阈值,距离和数目的阈值;另一种是先将所有数据聚类,然后根据点到其他最近簇(基本上就是他所属的簇)的质心的距离来计算离群点得分,然后根据阈值丢弃。对簇的数目K高度敏感。而且离群点本身也会影响聚类结果。

推荐阅读更多精彩内容