2023年随机森林实验报告.docx
《2023年随机森林实验报告.docx》由会员分享,可在线阅读,更多相关《2023年随机森林实验报告.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、随机森林实验报告实验目的实现随机森林模型并测试。实验问题Kaggle 第二次作业 Non-linear class i fica t ion算法分析与设计一.算法设计背景:1 .随机森林的原子分类器一般使用决策树,决策树又分为拟合树和分类树。这两者的 区别在于代价估值函数的不同。2 .根据经验,用拟合树做分类的效果比分类树略好。3 .对于一个N分类问题,它总是可以被分解为N个2分类问题,这样分解的好处是其决 策树更加方便构造,更加简朴,且更加有助于用拟合树来构建分类树。对于每一个2分类问 题,构造的树又叫CART树,它是一颗二叉树。4 .将N个2分类树的结果进行汇总即可以得到多分类的结果。5
2、.CART树构造:trace.pusn(u);树的初始化(插入头节点)完成后,正式开始决策树的构建while (!trace.empty()int current_node = trace.topO;trace.popQ;int container2 = 0 ;(*Tree).getPartition(current_node, container);判断当前节点是否成功分割if (container0 != -1) trace.push(containerl);trace.push(container0);训练完成,计算输出下面再重点说一下函数:bool decisionTree:getPa
3、rtition(int index, int container2)这个函数是单棵决策树构造的核心,调用这个函数,假如当前节点的G ini值己经为0,那么这个函数会计算当前节点的拟合值:if (Nodesindex.gini = = 0 | Nodesindex.layer = MaxLayerNum/* | /4Nodesindex.dataSet.sizeO 10*/) Nodesmdex.isLeaf = 1;计籁叶子节点的拟合值double sum = 0;for (int i = 0; i Nodesindex.datalndex.size(); +i)sum = trainOutN
4、ode$(index.dataIndexIi;/Node$index.resiiNode$mdex.value = sum / Node$index.dataIndex.$izeO;containerfO = containerl = -1;return false;d-结束条件是g ini = 0|层数等于10假如当前节点不满足结束分割条件,那么函数将对属性进行抽样,抽样的方法是打乱后取前se 1 ectedCol u mn s列。然后调用getN o deA 11 r (s,index)获取当前节点的备选分割值,这里的s是抽取的属性的列号的集合。获得打乱后的索引,并选取前面的25个作为选取
5、的列的索引,传递给getAttr ,获得所需要的分割值 vector sequence(numparametres -2);srand(unsigned)time(NULL);for (i = 0; i sequence sizeQ; +i)sequencei.index = i;sequence(i).value = rand();)std:sort(sequence.begin()r sequence.endO.cmp);vectors(SelectedColumns);for (int i = 0; i SelectedColumns; +i)s(i = sequencei.index;
6、在得到备选的属性分割值后,将进入循环,寻找最优分割点for (i = 0; i SelectedColumns; +i) vector:iterator cursorfor (cursor = Nodesindex.attributesij.beginO; cursor != Nodes(index.attributesi.endO; cursor) temp_gini = computeGini(index, s(ij, cursor);if (min_gini temp_gini) min_gini = temp_gini;par_label = si;par_value = *curso
7、r;6 .最终结果计算在m a in函数中,我们将四个线程所得的transf o rmOu t T相加,最后遍历取每一行最大值的 下标,即可得到最终结果。六.算法优化.应用了数组+校建树取代了普通的函数递归建树,加快了建树速度。1 .在传递每个节点的节点数据集时,使用了传递数据集的索引而非数据自身,这样做的好处 是,本来假如传递条数据需要复制617个double类型的数量,而现在只需要传递个 Ini型的索引,这种快了 61 7倍的数据集传递方式使程序运营效率提高了 10倍以上。2 .在每个属性中选择备选分割值的时候,采用了一种下采样的策略。即:假如该节点的数据 集大小小于某一数值,则将这个数据
8、集的这个属性的所有值都纳入候选分割值列表。但是假 如大于了这个阈值,则将属性所相应的列进行排序后再进行等间距采样得到样本数等于阈值 的子集作为候选分割集。代码详见getPartition().这样做的好处是需要计算的分割gini 值大大减少了(本人取的采样阈值时100,相比原数据集,样本空间缩小了尽3 0倍),这里也再 一次加速了程序运营。但是这个优化随机而来的个问题是:有也许每次分割都不是最佳分 割。3 .使用了 C+I 1的vihread库进行了并行实现,开出4个线程,程序相比单线程加速了 4倍。七.并行实现C+1 1thread库创建线程,为每个线程赋予独立的数据容器,并将随机森林提成等
9、量的4部分(由于我使用的是4个线程)。即,每个线程中执行的函数承担1/4规模的随机森 林的构造,实现代码如下:threat threadl(mainInThread. transformOutPerTimeTl, trainlnPerTimeTl, tran$formTe$tOutTl,&Treel); thread thread2(mainInThread, transformOutPerTimeT2, trainInPerTimeT2, transformTestOutT2, &Tree2); threat: thread3(mainInThread, transformOutPerTim
10、eT3, trainInPerTimeT3, transformTestOutT3, &Tree3); thread thread4(mainInThread, transformOutPerTimeT4, trainInPerTimeT4, transformTestOutT4, &Tree4);threadl.join();thread2.join();thread3.join();thread4.join();int mainInThread(int transformOutPerTime_type$Num + 1. double trainInPerTime_lnumparametre
11、s - 2, double transformTestOut /廉财地入口for (int times = 0; times ForestSize / 4; times+ +)最后将4个线程得到的结果累加再做转换即可得到最终结果。r (int i = 0; i testsetNum; +i) (for (intj = 0;j test I n . test I D。这个函数使用的f stream逐行读入的方法,这里不做详述。2 .训练集输出转化为相应的2 6维0 1数组tra n sformOuttype s Num在da t aD e fine.h中,我们定义了分类类别数t y pesNum
12、:在 main. cpp 中,我们定义了全局变量 tr a n s f ormOut t ypesNumint transformOuttrainsetNumtypesNum + 1 = 0 ; / 类别数这里的t ransfo r mOu t是用于储存将trai nOut每行的值映射为行相应的2 6维01序列 后所产生的结果。这里面的相应关系是:例如tra i nOu t 10中的值是13那么transfo r mOu t 1 0 =l,t rans formOutl 0除1 3外其他列=0;假如值是14,那么14列为1 ,其他列为0,行 号代表的是它们相应的是第几条记录;tra inOut
13、llO和tra n sforni 0 u tl 0 J都表达的是第 10行的分类值为某个值,只是表达方式不同。前者用数字表达,后者将相应下标的值置1 表达。转换接口由1。 i n.c p p中的函数void indexTransform(inttransformresHt.pesK+ 1, double ogresl); /户弓启始W出丫,化力Y,”,定义,它的输入参数依次为转换输出的承接容器t r ans f ormre s,盛放原始输出的容器org它所做的事情是将tra n s f o r mresfi o r g es i 的值置1.并行构建随机森林在ma in. cpp中,我们构建了d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 随机 森林 实验 报告
限制150内