关联规则挖掘是数据挖掘中研究最早而且至今仍然活跃的方法之一
成果颇丰,数据挖掘里程碑
一个事物数据库可以被用来刻画
给定一个全局项目集I和数据库D,支持度是包含I1的事物在D中所占的百分比
关联规则挖掘问题可以划分为两个子问题:
1.发现频繁项目集
通过给定的最小支持度去寻找所有频繁项目集。
2.生成关联规则
通过给定的最小可信度,寻找满足条件的关联规则。
规则可信度是指包含i1和i2的实物数与包含i1的事务数之比。
Apriori(发现频繁项目集):
就是通过一个for循环遍历整个数据集找到满足最小支持数的频繁项目集L
apriori_gen(Lk-1)(候选集产生):
为了通过k-1频繁项目集产生k-候选集算法:
就是通过发现能够通过增加一个元素然后进行判断是否含有非频繁项目集,通过定理非频繁项目集的超集都是非频繁项目集。
has_infrequent_subset(c,Lk-1)(判断候选集中的元素是不是非频繁集的超集):
就是一个简单的逻辑判断
关联规则生成算法:
对于一个频繁项目集l,生成所有的非空子集
对于l的每一个非空子集x,计算confidence(x),如果confidence(x)>=minconfidence(x),那么x->(l-x)成立。
其实就是遍历整个候选数据去找到满足i1和i2在一起的出现情形和出现i2进行比较,商即为confidence然后呢看看是否满足最小支持度,就可以得到啦
文中所说的递归可以是深搜可以是广度优先搜索,因为反正是要判断子集满不满足,满足的话就继续搜索不满足就跳转。
这里提一下定理:
1如果某条规则不满足关联规则那么其子集也不满足关联规则。
2.如果某条规则满足强关联规则那么其子集肯定也是强关联规则。
Apriori算法的瓶颈:
1.多次扫描事务数据库,需要很大的I/O负载
每次循环,候选集的每个元素都必须通过扫描一次数据库来验证其是否加入Lk,假如一个频繁大项目集包含10个项,那么就至少需要扫描事务数据库10遍
2.可能产生庞大的候选集
解决办法:
1.基于数据分割的方法:
1.合理利用主存空间
2.支持并行挖掘算法
定理:如果一个项目集IS在所有的数据分块内都不(局部)频繁,那么它在整体数据集中也不(全局)频繁。
2.基于散列的方法其实就是hash
就是通过一个hash函数来存的
3.基于采样的方法:
先通过数据库的抽样数据得到一些可能成立的规则,然后利用数据库的剩余部分验证这些关联规则是否正确。
Close算法:
一个频繁闭合项目集的所有闭合子集一定是频繁的,一个非频繁闭合项目集的所有闭合超集一定是非频繁的
Close算法
先介绍一下闭合项目集的概念: 一个项目集,它的直接超集的支持度计数不等于其自身。我们把它称作闭合项目集。
Close算法基于这样的原理:
一个频繁闭合项目集的所有闭合子集一定是频繁的
一个非频繁闭合项目集的所有闭合超集一定是非频繁的
Close算法的具体实现步骤:
Gen_Closure:
产生候选的闭合项目集,以用于频繁项目集的生成,查找闭合的方法是:取出数据库的一项,记为t,如果FCCi的某一项对应的产生式p是t的子集并且它的闭合为空,则把T的闭合记为p的闭合,如果不为空,则把它的闭合与t的交集作为它的闭合,在此过程中也计算了产生式的支持度,最后则将闭合为空的产生式从FCCk中删除
Gen_Generator:
由FCCi生成FCCi+1时,前面的连接和删除非频繁子集与Apriori算法虽然是相同的,但是它增加了一个新的步骤,就是对于FCCi+1的每个产生式p,将FCi的产生式中是p的子集的产生式放到Sp中,对于Sp的每一项s,如果p是s 的闭合的子集,则p的闭合就等于s的闭合,此时需要把它从FCCi+1中删除。
Deriving frequent itemsets(FC,L)
对每个高频繁次数的项目进行分解,找到他的所有i-1项子集,如果它不属于Li-1,则把它加入Li-1,直到i=2,就找到了所有的频繁项目。
第四章 分类方法
分类的目的是学会一个分类函数或分类类型(也常常称作分类器),该模型能够把数据库中的数据项映射到给定类别中的某一个类别,分类可以用于预测。预测的目的是从历史数据中自动推导出对给定数据的趋势描述,从而能对未来数据进行预测。
统计方法:
包括贝叶斯法和非参数法等。常见的临近学习或基于事例的学习属于非参数方法。对应的知识表现则为判别函数和原型事例(原型事例,即有代表性的典型的记录,它的表示是原始记录形式)
机器学习方法
包括决策树和规则归纳法,前者对应的表示为决策树或判别树,后者则有决策表(Decision List)和产生式规则等。
神经网络方法(主要是BP算法):
它的模型是前向反馈神经网络模型(由代表神经元的节点和代表链接权值的边组成的一种体系结构),BP算法本质上是一种非线性判别函数。
KNN算法
knn算法是一种分类算法,但在我看来有些类似于聚类,它选取前k个记录作为初始的类集合,然后遍历记录,找到离某一记录最近的记录替代当前离这一记录最远的记录。
决策树分类方法
从一组无次序、无规则的事例中推理出决策树表示形式的分类规则,决策树分类方法采用自顶向下的递归方式,在决策树的内部节点进行属性值的比较并根据不同的属性值判断从该节点向下的分支,在决策树的叶节点得到结论。
ID3算法
ID3 算法的核心是根据信息增益来做计算。实际上就是选取具有最高增益的属性作为给定集合S的测试属性,对被选取的测试属性创建一个节点,并以该属性标记,对该属性的每个值创建一个分支,并据此划分样本。 是一个深搜的过程,也就是说,在不断去计算这个期望。
ID3性能分析
优势:
假设空间包含所有的决策树,是关于现有属性的有限离散值函数的一个完整空间。因为每个有限离散值函数可以表示为某个决策树,所以ID3算法避免了搜索不完整假设空间的一个主要风险:假设空间可能不包含目标函数。
爬山法是向值增加的方向持续移动到简单循环过程,算法在到达一个“峰顶”时终止, 此时相邻状态中没有比该“峰顶”更高的值。
爬山法不维护搜索树,当前节点只需要记录当前状态及其目标函数值; 爬山法不会前瞻与当前状态不直接相邻的状态的值 ——“就像健忘的人在大雾中试图登顶珠峰一样”
function HillClimbing(problem) return 一个局部最优状态
输入:problem
局部变量:current, 一个节点
neighbor,一个节点
current = MakeNode(Initial-State(problem));
loop do
neighbor = a highest-valued successor of current ;
if VALUE[neighbor] <= VALUE[current] then return STATE[current];
current = neighbor ;
爬山法又称贪婪局部搜索,只是选择相邻状态中最好的一个。尽管贪婪是七宗罪之一, 但是贪婪算法往往能够获得很好的效果。当然,爬山法会遇到以下问题: (1)局部极值 (2)山脊:造成一系列的局部极值 (3)高原:平坦的局部极值区域——解决办法:继续侧向移动
爬山法的变体形式
随机爬山法: 在上山移动中,随机选择下一步,选择的概率随着上山移动到陡峭程度而变化;
首选爬山法 随机地生成后继节点直到生成一个优于当前节点的后继
随机重新开始的爬山法 “如果一开始没有成功,那么尝试,继续尝试” 算法通过随机生成的初始状态来进行一系列的爬山法搜索,找到目标时停止搜索。
该算法以概率1接近于完备:因为算法最终会生成一个目标状态作为初始状态
如果每次爬山搜索成功的概率为p,则需要重新开始搜索的期望次数为 1/p。例如:
八皇后问题,大概需要7次迭代(6次失败,1次成功)即可找到目标,即:
p=1/7=0.14
所需步数的期望值:一次成功迭代的搜索步数 + 失败搜索步数 * (1-p)/p
1*4+6*3=22
可以改用增益比率作为选择的度量标准。这样就可以避免因为划分过于完美造成的树形太宽。
C4.5算法
信息增益比例的概念:
GainRatio=Gain(A)/SplitI(A)
SplitI(A)=-∑(j=1,j<=v)pjlog2(pj)这个就是前面ID3的熵。
贝叶斯分类
P(H|S)=P(X|H)P(H)/P(X)
贝叶斯分类对(1)完全独立的数据,(2)函数依赖的数据 具有比较好的分类效果。
常用的距离函数
明科夫斯基距离
绝对值的r次方的和的r次方根
绝对值距离
绝对值之和
欧式距离
绝对值的平方和的平方根
余弦相似度
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。
余弦相似度更加注重两个向量在方向上的差异,而不是距离或者长度上。
类间距离的度量主要有
最短距离法:定义两个类中最靠近的两个元素间的距离为类间距离。
最长距离法:定义两个类中最远的两个元素间的距离为类间距离
中心法:定义两类的两个中心间的距离为类间距离。
类平均法:它计算两个类中任意两个元素之间的距离,并且综合他们为类间距离
离差平方和