数据挖掘算法-分类
- 基于距离的方法
- 基于决策树的方法
- 基于贝叶斯理论的方法
- 基于神经网络的方法
- 基于SVM的方法
1.基于距离的分类算法
1.1 算法伪代码
算法 基于距离的分类算法
输入:每个类的中心C1,…,Cm;待分类的元组t。
输出:输出类别c。
(1)dist=∞;//距离初始化
(2)FOR i:=1 to m DO
(3) IF dis(ci,t)<dist THEN BEGIN
(4) c← i;
(5) dist←dist(ci,t);
(6) END.
1.2 算法直观解释
1.3 K最近邻居算法(KNN)
1.3.1 基本概念
- 通过计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别。
- 训练样本用n维数值属性描述。每个样本代表n维空间的一个点。所有的训练样本都放在n维模式空间中。给定一个样本,k-最临近分类法搜索模式空间,找出最接近未知样本的k个训练样本
直观理解:在已有的数据集下,若对一个类别未知的记录进行分类,计算它和数据集中其他点的记录,选取是最近的k个,这k个中标签出现最多的类作为未知点的分类。
1.3.2 伪代码
输入: 训练数据T;近邻数目K;待分类的元组t。
输出: 输出类别c。
(1)N=;
(2)FOR each d ∈T DO BEGIN
(3) IF |N|≤K THEN
(4) N=N∪{d};
(5) ELSE
(6) IF ∃u∈N such that sim(t,u)<sim(t,d) THEN BEGIN
(7) N=N-{u};
(8) N=N∪{d};
(9) END
(10)END
(11)c=class to which the most u∈N.
k的选取:
- 如果k过于小,那么将会对数据中存在的噪声过于敏感
- 如果k过大,邻居中可能包含其他类的点
- 一个经验的取值法则为k≤ √q ,q 为训练元组的数目。商业算法通常以10作为默认值。
1.3.3 实例
采用最邻近方法对元组<Pat,女,1.6 >进行分类
K=5;
数据如下:
- 首先,因为k=5,所以Kristina直Stephanie5人全部加入集合N中
- 第六个记录 Bob更近一些,因此替换掉Jim
- 第七个Kathy替换 Maggie
- 最后Wyneete 也完成替换,整个数据集遍历完毕
- 此时N中是Kristina,Dave,Kathy,Wynette,Stephanie。其中4个label是“矮”一个是“中等”。因此最后Pat的类别为“矮”。
2.基于决策树的分类方法
决策树是一种自顶向下增长树的贪婪算法,在每个节点选取能最好分类样本的属性,继续这个过程直到这棵树能完美地分类训练集,或所有的属性均已被用过。
在其生成过程中,分割方法即属性选择度量是关键。通过属性选择度量,选择出最好的将样本分类的属性。
根据分割方法的不同,决策树可以分为两类
- 基于信息论的方法
- ID3 - 基于信息增益(Information gain)
- C4.5 - 基于增益比率(Gain ration)
- 最小GINI指标的方法
- SLIQ和SPRINT - 基于基尼指数(Gini index) | 为了适应大规模数据集的需要
2.1决策树的结构
2.2决策树算法的步骤
-
第1步(关键)利用训练集建立并精化一棵决策树,建立决策树模型。这个过程实际上是一个从数据中获取知识,进行机器学习的过程。这个过程通常分为两个阶段:
- 建树(Tree Building):这是一个递归的过程,最终将得到一棵树。
- 剪枝(Tree Pruning):剪枝目的是降低由于训练集存在噪声而产生的起伏。
-
第2步:利用生成完毕的决策树对输入数据进行分类。对输入的记录,从根结点依次测试记录的属性值,直到到达某个叶结点,从而找到该记录所在的类。
-
输入:
数据分区D,训练元组和他们对应类标号的集合
attribute_list,候选属性的集合
Attribute_selection_method,指定选择属性的启发式过程 -
算法步骤:
- 树以代表训练样本的单个节点(N)开始
- 如果样本都在同一个类,则该节点成为树叶,并用该类标记
- 否则,算法调用Attribute_selection_method,选择能够最好的将样本分类的属性;确 定“分裂准则”,指出“分裂点”或“分裂子集”
- 对测试属性每个已知的值,创建一个分支,并以此划分元组
- 算法使用同样的过程,递归的形成每个划分上的元组决策树。一旦一个属性出现在一个节点上,就不在该节点的任何子节点上出现
- 递归划分步骤停止的条件:
- 划分D(在N节点提供)的所有元组属于同一类
- 没有剩余属性可以用来进一步划分元组——使用多数表决
- 没有剩余的样本
- 给定分支没有元组,则以D中多数类创建一个树叶
伪代码:
DTree(examples, attributes)
If 所有样本属于同一分类,返回标号为该分类的叶结点
else if 属性值为空,返回标号为最普遍分类的叶结点
else 选取一个属性,A,作为根结点
for A的每一个可能的值vi
令 examples i 为具有A=vi的样本子集
从根结点出发增加分支(A=vi)
如果examplesi为空
则创建标号为最普遍分类的叶结点
否则递归创建子树——调用
DTree(examplesi,attributes-{A})
2.3 ID3算法
- 决策树中每一个非叶结点对应着一个非类别属性,树枝代表这个属性的值。一个叶结点代表从树根到叶结点之间的路径对应的记录所属的分类值。
- 每一个非叶结点都将与属性中具有最大信息量的非分类属性相关联。
- 采用信息增益来选择能够最好地将样本分类的属性。
2.3.1 分裂属性选择
选择属性的方法: 选择具有最大信息增益的属性作为当前节点的测试属,即能最大限度降低划分不确定性的属性
怎样计算信息增益(information gain)?
- 信息增益被定义为原始分割的熵与划分以后各分割的熵累加得到的总熵之间的差。
- 信息增益是指划分前后进行正确预测所需的信息量之差。
- 选择具有最高信息增益的属性作为当前节点的测试属性
2.3.2 信息熵
信源具有不确定性
这种不确定性是存在于通信之前的,因而又叫做先验不确定性,表示成信息熵 H(U)
通信结束之后,信源仍可能具有一定程度的不确定性,称为后验不确定性,表示成:条件熵 H(U/V)
- 自信息: 消息ui发生前的不确定性
- 信息熵: 信源输出前的平均不确定性
如果n种可能的发生都有相同的概率,即所有的ui有P(ui)=1/n,H(U)达到最大值log n,系统的不确定性最大
P(ui)互相接近,H(U)就大。P(Ui)相差大,则H(U)就小 - 后验熵:当接收到输出符号V=vj 后,信源的平均不确定性
- 条件熵:接收到输出符号V后,信源的平均不确定性
- 互信息(信息增益):接收到符号V后获得的关于U的信息量
具体计算例子请参考课件8-1 P73
2.3.3 分类规则的获取
- 决策树所表示的分类知识可以被抽取出来并可用IF-THEN 分类规则形式加以表示。
- 从决策树的根结点到任一个叶结点所形成的一条路径就构成了一条分类规则。
- 沿着决策树的一条路径所形成的属性-值偶对就构成了分类规则条件部分(IF 部分)中的一个合取项,叶结点所标记的类别就构成了规则的结论内容(THEN 部分)
2.3.4 决策树算法的数据准备
- Data cleaning
删除/减少noise,
补填missing values - Data transformation
数据标准化(data normalization)
数据归纳(generalize data to higher-level concepts using concept hierarchies)
例如:年龄归纳为老、中、青三类
控制每个属性的可能值不超过七种(最好不超过五种) - Relevance analysis
对于与问题无关的属性:删
对于属性的可能值大于七种又不能归纳的属性:删
2.3.5 ID3小结
ID3算法是一种经典的决策树学习算法,由Quinlan于1979年提出。
ID3算法的基本思想:以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息量最多的属性,亦即能使熵值变为最小的属性,以构造一颗熵值下降最快的决策树,到叶子节点处的熵值为0。此时,每个叶子节点对应的实例集中的实例属于同一类。
2.3.6 ID3实际应用
利用决策树方法进行数据挖掘,一般有如下步骤:
数据预处理、决策树挖掘操作,模式评估和应用
- 不适合直接挖掘的数据,需要做数据的预处理工作,一般包括数据的选择(选择相关的数据)、净化(消除冗余数据)、转换、归约等。数据预处理工作准备是否充分,对于挖掘算法的效率乃至正确性都有关键性的影响。
2.4 决策树的剪枝(prunig)
2.4.1 先剪枝方法
在先剪枝方法中,通过提前停止树的构造(例如,通过决定在给定的节点上不再分裂或划分训练样本的子集)而对树“剪枝”。一旦停止,节点成为树叶.
- 确定阀值法:在构造树时,可将信息增益用于评估岔的优良性。如果在一个节点划分样本将导致低于预定义阀值的分裂,则给定子集的进一步划分将停止。
- 测试组修剪法:在使用训练组样本产生新的分岔时,就立刻使用测试组样本去测试这个分岔规则是否能够再现,如果不能,就被视作过度拟合而被修剪掉,如果能够再现,则该分岔予以保留而继续向下分岔。
预剪枝判断停止决策树的生长的方法大体上可以归纳为以下几种:
(1)一种最为简单的方法就是在决策树到达一定高度的情况下就停止树的生长;
(2)到达此结点的实例具有相同的特征向量,而不必一定属于同一类,也可停止生长。这种情况可以处理数据中的数据冲突问题;
(3)到达此结点的实例个数小于某一个阈值也可停止树的生长;
(4)更为普遍的做法是计算每次扩张对系统性能的增益,如果这个增益值小于某个阈值则不进行扩展。如果在最好情况下的扩展增益都小于阈值,即使有些叶子结点的实例不属于同一类,也停止树的增长。
2.4.2 后剪枝方法
后剪枝方法是由“完全生长”的树剪去分枝。通过删除节点的分枝,剪掉叶节点。
- 案例数修剪是在产生完全生长的树后,根据最小案例数阀值,将案例数小于阀值的树节点剪掉。
- 成本复杂性修剪法是当决策树成长完成后,演算法计算所有叶节点的总和错误率,然后计算去除某一叶节点后的总和错误率,当去除该叶节点的错误率降低或者不变时,则剪掉该节点。反之,保留。
2.5 C4.5
对ID3对主要改进
- 用信息增益比例/信息增益率来选择属性,克服了用信息增益选择属性时偏向于选择取值多的属性的不足;
- 能够完成对连续属性的离散化处理;
- 可以处理具有缺少属性值的训练样本;
- 在树构造过程中或者构造完成之后,进行剪枝以避免树的过度拟合;
- C4.5采用的知识表示形式为决策树,并最终可以形成产生式规则。
2.5.1 信息增益比例
分裂信息SplitInfo(S,A)代表了按照属性A分裂样本集S的广度和均匀性。
假如以属性A的值为基准对样本进行分割的化,SplitI(A)就是前面熵的概念。
2.6 决策树原理和优缺点
基本算法(贪心算法)
- 自上而下分而治之的方法
- 开始时,所有的数据都在根节点
- 属性都是离散值字段 (如果是连续的,将其离散化)
- 所有记录用所选属性递归的进行分割
- 属性的选择是基于一个启发式规则或者一个统计的度量 (如, information gain)
停止分割的条件
- 一个节点上的数据都是属于同一个类别
- 没有属性可以再用于对数据进行分割
优点:
- 可以生成可理解的规则
- 计算量相对来说不是很大,速度较快。
- 可以处理连续和离散类型字段
- 决策树可以清晰的显示那些字段比较重要。
缺点:
- 对连续性的字段比较难预测
- 对有时间顺序的数据,需要很多预处理工作
- 当类别太多时,错误可能增加的比较快。
- 可能不是全局最优
3 贝叶斯分类
贝叶斯分类是统计学方法。他们可以预测类成员关系的可能性,如给定样本属于一个特定类的概率。贝叶斯分类主要是基于贝叶斯定理,通过计算给定样本属于一个特定类的概率来对给定样本进行分类。
分类问题:
X 是一个数据样本,他的类标号未知
H 是一个假设:假设数据样本 X 属于特定的类 C
对于分类问题,希望确定 P(H|X)
给定观测数据样本 X ,假定H成立的概率。
贝叶斯网络:
贝叶斯网络是一种实用的基于学习的分类方法
在以下情况下可以使用贝叶斯网络方法:
- 如果可获得的训练集的数目比较多
- 属性之间有条件的独立
Naïve Bayes Classifier假设属性值之间是独立的,因此可以简化很多计算,故称之为Naïve 。
当属性值之间有依赖关系时,采用Bayesian Belief Networks进行分类。
3.1 贝叶斯定理
贝叶斯定理给出了如下计算P(H|X)的简单有效的方法:
P(H):是先验概率,或称H的先验概率。
P(X): 样本数据被观察的概率。
P(X|H)代表假设H成立的情况下,观察到X的概率。 P(H|X)是后验概率,或称条件X下H的后验概率。
后验概率P(H|X) 比先验概率P