数据挖掘·第五章 数据分类
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若属性A所有可能值的集合S的笛卡尔乘积小于一个阈值 MAXSETSIZE,则直接计算S的所有子集。否则使用贪心算 法。
贪心算法:
即先将一个集合C臵为空集,另一个集合D包含 所有的值,然后反复地从D中选取一个值移至C中, 直到没有合适的值可以选取。选择移动的值应满 足条件:移动后导致Gini值减小并且与移动其它值 相比其Gini值是最小的。
30 23
40 55 55 45
65 15
75 40 100 60
G B
G B G G
SLIQ的执行过程
创建根节点N1
属性表 age 23 rid 2 属性表 salary 15 rid 21 N1 类表 class leaf
创建并排序属性表,创建类表:
G
B G B G
N1
N1 N1 N1 N1
因为每次计算都需要排序,所以这项操作的代价极大。 解决: SLIQ在树的构建阶段是用预排序技术以减少计算连续属 性的代价。
离散属性的分支选择
测试: 设S(A)为离散属性A的所有值的集合,则分支测试 S产生的子集。有n个取 就是具有 A S的形式,其中 为 S 2n 值的属性所产生的子集数量为 个。因此对最优子集的搜 索的代价将是十分昂贵的。 解决:
23 30 G ini 同理可以求出 Gini split 23 0.44 、 、 0.6 split 2 45 55 Gini split 0.42 Gini split 55 0.44 2
40 45 Gini split 0.6 2
1
G
1
1
3
(a)
最后根据图(b)计算
(b) Gini split 35 即:
2 1 1 1 1 4 1 1 3 3 5 Gini split 35 1 1 0.42 6 2 2 2 2 6 4 4 4 4 12
最佳的分割属性。
为了计算节点中属性的分支指标Gini,在每个 叶节点对应的数据划分中需使用类的频率分布。 分布通过附加在每一个叶节点上的类矩形表累 计。
类矩形表
类矩形表(histogram):
位于决策树的每个节点内,存放每个节点当前 的类分布信息——左、右子树的每个类各拥有多 少条记录。 对于连续属性,矩形表由形如<类,频率>的若 干对组成。 对于离散属性,矩形表有形如<属性值,类, 频率>的若干三元组组成。
age对应节点N1的取值有:23、30、40、45、55、55分别计算
23 30 30 40 40 45 45 55 Gini split 23、Gini split 、 G ini 、 G ini 、 G ini 、 split split split 2 2 2 2
多云 1 …… …… 类型 适合 不适合 …… 叶点 N1 N1 ……
预排序过程
首先,对训练数据扫描一次后,为每一个非类别 属性建立一个属性表,每一个属性值都对应着相 应的类表索引。 类表的所有叶指针字段都指向决策树的根节点。
连续属性的属性表独立地进行排序。
预排序举例
训练数据集 预排序后 驻留磁盘的属性表 age salary class 30 23 40 55 55 45 65 15 75 40 100 60 G B G B G G
计算属性salary的Ginisplit
65 75 75 100 Gini split 0.44、0.27、0.22、0.33、0.4、0.44。 、Gini split 值分别为 2 2 40 60 由上可知,属性salary的 Gini split 最小,那么 N1引出两个孩子 2
计算连续属性最佳分割
当前属性是连续属性时,
每次做遍历时,类矩形表亦随之改变,随时表征 以当前属性A的当前值v做分割点时对叶子的分裂状 况。并由类矩形表计算出某个分裂方案的Gini 值。 完成对属性A的遍历后,Gini 值最低的A的值就是 用属性A分裂的最佳值。新方案可以存入决策树节点。
计算离散属性最佳分割
MDL目标:就是修剪决策树以使Cost(M,D)最小。
算法流程
算法的控制结构是一个队列。
这个队列存放当前的所有叶子节点,这是 为了控制搜索的结束。 当队列为空时,说明所有的叶子节点都已 经被处理完毕,这时建树算法可以结束。
算法流程举例
设训练样本数据集如下:
age salary class
类表更新举例
N1
Age≤35
属性表
age rid
属性表
salary rid
类表
class leaf
1 G 2 B 3 G
N2
Salary≤40
N3
Salary≤50
23
30 40 45 55
2
1 3 6 5
15
40 60 65 75 100
2
4 6 1 3 5
N2
N4 N3 N3 N3
4 B
5 G 6 G
扩展性问题
可扩展: 对应于分类算法评估尺度中的伸缩性。 伸缩性: 指对磁盘驻留数据的处理能力,即对大数据 量有效构造模型的能力。 SLIQ算法提出的意义: 为了解决一般算法无法解决的可伸缩性问题。
一般决策树分类方法
决策树的构造分为两个阶段:
1.树的构建
对每个属性分支计算最优分支选择。 使用最优的分支生成划分。
第五章 数据分类
基本内容
SLIQ:一种快速可扩展的分类算法 SPRINT:数据挖掘中一种可扩展的并行分类器
基本内容
SLIQ:一种快速可扩展的分类算法 SPRINT:数据挖掘中一种可扩展的并行分类器
SLIQ:一种快速可扩展的分类算法
分类算法存在一个问题——不能进行扩展
数据量在急剧增长,训练样本达到数百万是 非常普遍的,由于内存及CPU时间的限制, 原有的许多算法已经无法处理这些数据。 因此,必须寻找新的方法来解决大数据集 的分类问题。
2.树的修剪 修剪策略有基于代价复杂度的修剪,悲观修剪, 和最小描述长度MDL修剪。
一般决策分类方法
决策树的构造分为两个阶段:
1.树的构建
对每个属性分支计算最优分支选择。 使用最优的分支生成划分。
2.树的修剪 修剪策略有基于代价复杂度的修剪,悲观修剪, 和最小描述长度MDL修剪。
最优分支的选择问题
最优分支的选择依据于分支指标,分支指标用来 给属性的可选分支确定“优良程度”。 分支指标: 熵(ID3和C4.5) 最小Gini指标(CART,SLIQ和SPRINT)。
SLIQ使用Gini指标作为分支指标
定义:对数据集包含n个类的数据集S,Gini(S)定义为:
Gini ( S ) 1 Pj 2
j 1
n
,Pj是S中第j类数据的频率。
如果集合S分成两部分 S1 and S2 。那么这个分割的Gini就是:
wenku.baidu.com
n1 Gini( ) n2 Gini( ) ( S ) Gini split S1 S2 n n
式中,n1,n2分别是S1,S2的记录数。 提供最小Ginisplit 就被选择作为分割的标准。
1.
2.
用预排序技术来减少计算连续属性的代价。
利用贪心算法来确定离散属性的分支。
3. 使用MDL算法修剪树。
SLIQ中预排序所需的数据结构
SLIQ使用若干驻留磁盘的属性表和单个驻留内存 天气 索引 的类表。 0 晴 属性表:有两个字段, ①属性值, ②指向类表的索引。 类表:也有两个字段, ①类的标号, ②决策树叶节点的指针。
N4
N5
N6
N7
55
4
N3
N6
SLIQ采用MDL修剪
MDL( Minimum Description Length)思想:
遵循最简单的解就是最期望的。
编码的总代价为: Cost(M,D)=cost(D/M)+cost(M)
其中, cost(D/M):给定模型M后对数据编码的比特数。 cost(M):对模型M编码的代价。
类表的更新算法
Updatelables( ) for 在分支中使用的每一个属性A do 遍历A的属性表 for 属性表中的每一个值v do 找到类表中的对应位臵(比如说e) 通过在从e指向的节点上进行分支测试找到v所属的新类c 将e的类标号更新到c 更新在e中引用的节点到与类c对应的子节点 end end
Gini split 55
Age中Gini值的计算
Gini 的计算方法如下:首先构造节点 35 对于 N1 的类矩形表,如图(a);其次根据age的属性确定类矩形 表中元素的值,结果如图(b);
split
30 40 Gini split 即 2
B
L R
G
L R
B
节点N2和N3,将N2和N3入队,并将salary属性表的第一和第二个记 录( salary <=50)的Index值在类表中对应的leaf值改为N2,类表中
N2 salary 15 rid 2 1 2 class leaf G N2 初始矩形表 B L 0 R 1 G
0 1
N3 B L 0 R 1 G
0 3
40
60
4
6
B
G
N2
N3
3
4 5 6
65
75
1
3
B
G
N3
N3
更新类矩形表及计算N2第一个分支节点 (salary≤15) B L 1 R 0 B
1
100
30
预排序
1
3 6 5 4
40
60 65 75 100 工资表
42
63 14 35 5 6 类表
40 45 55 55 年龄表
G
N1
SLIQ的执行过程
创建空队列queue,并将N1入队
N1
f r
队列queue的队头元素出队,及N1出队 计算出刚出队的元素N1所对应节点Ginisplit ① 计算属性age的Ginisplit
5
G
N3
G
0 1
B L 0 R 1 B
G
0
3
更新类矩形表及计算N3第一个分支节点 (salary ≤ 40) L G
0 1
L 1
G
0 3
R 0
R 0
选择分支属性生成子节点并更新类表
最佳分割求解出后,信息已存放在节点中, 算法的下一步便是创建子节点、更新类表。 这一步的主要任务是对应该分裂的类表进行 更改。
连续属性的分支选择
操作:
v 采用 A 的二叉分支的方法。第一步,与 C4.5的处理方 法类似,即根据将要分支的属性取值对训练样本进行排序。 设属性取值排序后的结果为v1,v2……,vn ,vi 和vi+1之间一 般取中间点(vi +vi+1)/2作为分支点,这样需确定n-1个可能的 分支。
树的修剪
修剪阶段要选出拥有最小已估计错误比率的子树。
估计错误比率的方法:
使用原始训练样本集,如交叉验证等。对于大数据集 不可用,因构建一个决策树代价很大。
使用独立的数据集,如何确定测试数据集的大小,及 导致精度降低。
解决:
SLIQ使用基于最小描述长度(MDL)方法来修剪决策树。
SLIQ使用如下技术提高可扩展性
salary中Gini值的计算
②
Salary属性中取值有:15、40、60、65、75、10 同样以计算出
15 40 40 60 60 65 Gini split 15、Gini split 、 G ini 、 G ini 、 split split 2 2 2
预排序 后
驻留内存的类表 rid 2 4 6 1 3 class leaf
age 23
rid 2
salary 15 40 60 65 75
30
40 45 55
1
3 6 5
1 G 2 B
3 G 4 B 5 G 6 G
N1 N1 N1
N1
N1 N1
55
4
100
5
计算最佳分割
最佳分割包括两个内容:
属性的最佳分割点,
当前属性是离散属性时,
遍历过程中,记录下每个属性值对应的类 的分布信息。 遍历完成后,利用贪心算法得到Gini最小 的离散属性A的子集。即为所求的用A的分裂 方案。新方案可以存入决策树节点。
分支计算举例
如图,假设在属性age上使用分支 age 35 对数据已初始化。 当前待分裂属性Salary,右边为类矩形图的变化过程。属性 表从上往下扫描。 N1 age 35