数据挖掘RAINFOREST算法
发布网友
发布时间:2022-05-15 09:45
我来回答
共2个回答
热心网友
时间:2023-10-18 15:31
上面算法讲的很清楚了,我来举个例子:
Training data:
Id age income class
1 young 65 G
2 young 15 B
3 young 75 G
4 senior 40 B
5 senior 100 G
6 senior 60 G
AVC set „age“ for N1:
value class count
young B 1
young G 2
senior B 1
senior G 2
AVC set „income“ for N1:
value class count
15 B 1
40 B 1
60 G 1
65 G 1
75 G 1
100 G 1
AVC set „income“ for N2:
value class count
15 B 1
65 G 1
75 G 1
AVC set „age“ for N2:
value class count
young B 1
young G 2
最后推出雨林: N1
age=young / \ age=senior
/ \
N2 N3
最后提醒一点,对于雨林算法,训练样本集不要大于3百万。否则改用SPRINT。
热心网友
时间:2023-10-18 15:31
雨林算法的数据结构:
AVC-set:节点n包含的所有纪录在某个属性上的投影,其中该AVC-set包括了属性的不同值在每个类别上的计数。
AVC-group:一个节点n上所有的AVC -set的集合
AVC-set的所占内存的大小正比于对应属性的不同值个数,AVC-group并不是数据库信息的简单的压缩,它只是提供了建立决策树需要的信息, AVC-group所占用的内存空间远远小于数据库所实际占用的空间。
一般设计方案:
AVC_set
{
//存储属性的各个值
DistinctValue[]
//存储属性各个值在某个类上对应的计数
DistinctValueCountForClassA[]
DistinctValueCountForClassB[]
… …
}
AVC_group
{
//节点n中的每个属性的avc_set
AVC_set[]
}
自顶向下决策树算法
BuildTree(Node m,datapatition D,algorithm decisionTree)
对D使用决策树算法decisionTree得到*指标crit(n)
令k为节点n的子节点个数
if(k>0)
建立n的k个子节点c1,…,ck
使用最佳分割将D*为D1,…,Dk
for(i=1;i<=k;i++)
BuildTree(ci,Di)
endfor
endif
RainForest 算法框架重新定义的部分:
1a) for 每一个属性的谓词p,寻找最佳的分割
1b) decisionTree.find_best_partitioning(AVC-set of p)
1c) endfor
2a) k= decisionTree.decide_splitting_criterion();//决定最终的分割
雨林算法的常规过程:
建立节点的AVC-group
(通过读取整个原始数据库或者某个分支的数据库表或文件)
选择*属性和*标准:取决于使用雨林算法框架的具体算法,通过逐一检查AVC-set来选择。
将数据分解到各个子节点:必须读取整个数据集(数据库或文件),将各条数据分解到各个子节点中,此时如果有足够的内存,我们将建立一个或多个子节点的AVC-group
参考资料:李岱 rainforest.ppt