纠纷奇闻作文社交美文家庭
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Python机器学习(二十一)随机森林算法

1月9日 藏于心投稿
  一、随机森林算法简介:
  在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。LeoBreiman和AdeleCutler发展出推论出随机森林的算法。而RandomForests是他们的商标。这个术语是1995年由贝尔实验室的TinKamHo所提出的随机决策森林(randomdecisionforests)而来的。这个方法则是结合Breimans的Bootstrapaggregating想法和Ho的randomsubspacemethod以建造决策树的集合。
  根据下列算法而建造每棵树:1。用M来表示训练用例(样本)的个数,N表示特征数目。
  2。输入特征数目n,用于确定决策树上一个节点的决策结果;其中n应远小于N。
  3。从M个训练用例(样本)中以有放回抽样的方式,取样k次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
  4。对于每一个节点,随机选择n个特征,每棵决策树上每个节点的决定都是基于这些特征确定的。根据这n个特征,计算其最佳的分裂方式。
  5。每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用。
  6。最后测试数据,根据每棵树,以多胜少方式决定分类。
  在构建随机森林时,需要做到两个方面:数据的随机性选取,以及待选特征的随机选取,来消除过拟合问题。
  首先,从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。第二,利用子数据集来构建子决策树,将这个数据放到每个子决策树中,每个子决策树输出一个结果。最后,如果有了新的数据需要通过随机森林得到分类结果,就可以通过对子决策树的判断结果的投票,得到随机森林的输出结果了。如下图,假设随机森林中有3棵子决策树,2棵子树的分类结果是A类,1棵子树的分类结果是B类,那么随机森林的分类结果就是A类。
  与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。
  优点:
  随机森林的既可以用于回归也可以用于分类任务,并且很容易查看模型的输入特征的相对重要性。随机森林算法被认为是一种非常方便且易于使用的算法,因为它是默认的超参数通常会产生一个很好的预测结果。超参数的数量也不是那么多,而且它们所代表的含义直观易懂。
  随机森林有足够多的树,分类器就不会产生过度拟合模型。
  缺点:
  由于使用大量的树会使算法变得很慢,并且无法做到实时预测。一般而言,这些算法训练速度很快,预测十分缓慢。越准确的预测需要越多的树,这将导致模型越慢。在大多数现实世界的应用中,随机森林算法已经足够快,但肯定会遇到实时性要求很高的情况,那就只能首选其他方法。当然,随机森林是一种预测性建模工具,而不是一种描述性工具。也就是说,如果您正在寻找关于数据中关系的描述,那建议首选其他方法。
  适用范围:
  随机森林算法可被用于很多不同的领域,如银行,股票市场,医药和电子商务。在银行领域,它通常被用来检测那些比普通人更高频率使用银行服务的客户,并及时偿还他们的债务。同时,它也会被用来检测那些想诈骗银行的客户。在金融领域,它可用于预测未来股票的趋势。在医疗保健领域,它可用于识别药品成分的正确组合,分析患者的病史以识别疾病。除此之外,在电子商务领域中,随机森林可以被用来确定客户是否真的喜欢某个产品。
  二、sklearn中随机森林算法应用举例:
  (1)基本步骤:
  选择数据:将你的数据分成三组:训练数据、验证数据和测试数据
  模型数据:使用训练数据来构建使用相关特征的模型
  验证模型:使用你的验证数据接入你的模型
  测试模型:使用你的测试数据检查被验证的模型的表现
  使用模型:使用完全训练好的模型在新数据上做预测
  调优模型:使用更多数据、不同的特征或调整过的参数来提升算法的性能表现
  为方便大家使用,代码如下:随机森林需要调整的参数有:(1)决策树的个数(2)特征属性的个数(3)递归次数(即决策树的深度)importnumpyasnpfromnumpyimportimportrandomfromsklearn。modelselectionimporttraintestsplit生成数据集。数据集包括标签,全包含在返回值的dataset上defgetDatasets():fromsklearn。datasetsimportmakeclassificationdataSet,classLabelsmakeclassification(nsamples200,nfeatures100,nclasses2)print(dataSet。shape,classLabels。shape)returnnp。concatenate((dataSet,classLabels。reshape((1,1))),axis1)切分数据集,实现交叉验证。可以利用它来选择决策树个数。但本例没有实现其代码。原理如下:第一步,将训练集划分为大小相同的K份;第二步,我们选择其中的K1分训练模型,将用余下的那一份计算模型的预测值,这一份通常被称为交叉验证集;第三步,我们对所有考虑使用的参数建立模型并做出预测,然后使用不同的K值重复这一过程。然后是关键,我们利用在不同的K下平均准确率最高所对应的决策树个数作为算法决策树个数defsplitDataSet(dataSet,nfolds):foldsizelen(dataSet)nfoldsdatasplit〔〕begin0endfoldsizeforiinrange(nfolds):datasplit。append(dataSet〔begin:end,:〕)beginendendfoldsizereturndatasplit构建n个子集defgetsubsamples(dataSet,n):subDataSet〔〕foriinrange(n):index〔〕forkinrange(len(dataSet)):index。append(np。random。randint(len(dataSet)))subDataSet。append(dataSet〔index,:〕)returnsubDataSet划分数据集defbinSplitDataSet(dataSet,feature,value):mat0dataSet〔np。nonzero(dataSet〔:,feature〕value)〔0〕,:〕mat1dataSet〔np。nonzero(dataSet〔:,feature〕value)〔0〕,:〕returnmat0,mat1计算方差,回归时使用defregErr(dataSet):returnnp。var(dataSet〔:,1〕)shape(dataSet)〔0〕计算平均值,回归时使用defregLeaf(dataSet):returnnp。mean(dataSet〔:,1〕)defMostNumber(dataSet):返回多类numberset(dataSet〔:,1〕)len0len(np。nonzero(dataSet〔:,1〕0)〔0〕)len1len(np。nonzero(dataSet〔:,1〕1)〔0〕)iflen0len1:return0else:return1计算基尼指数defgini(dataSet):corr0。0foriinset(dataSet〔:,1〕):corr(len(np。nonzero(dataSet〔:,1〕i)〔0〕)len(dataSet))2return1corr选取任意的m个特征,在这m个特征中,选取分割时的最优特征defselectbestfeature(dataSet,m,alphahuigui):fdataSet。shape〔1〕index〔〕bestSbestfeature0;bestValue0;ifalphahuigui:SregErr(dataSet)else:Sgini(dataSet)foriinrange(m):index。append(np。random。randint(f))forfeatureinindex:forsplitValinset(dataSet〔:,feature〕):mat0,mat1binSplitDataSet(dataSet,feature,splitVal)ifalphahuigui:newSregErr(mat0)regErr(mat1)else:newSgini(mat0)gini(mat1)ifbestSnewS:bestfeaturefeaturebestValuesplitValbestSnewSif(SbestS)0。001andalphahuigui:如果误差不大就退出returnNone,regLeaf(dataSet)elif(SbestS)0。001:print(S,bestS)returnNone,MostNumber(dataSet)mat0,mat1binSplitDataSet(dataSet,feature,splitVal)returnbestfeature,bestValuedefcreateTree(dataSet,alphahuigui,m20,maxlevel10):实现决策树,使用20个特征,深度为10bestfeature,bestValueselectbestfeature(dataSet,m,alphaalpha)ifbestfeatureNone:returnbestValueretTree{}maxlevel1ifmaxlevel0:控制深度returnregLeaf(dataSet)retTree〔bestFeature〕bestfeatureretTree〔bestVal〕bestValuelSet,rSetbinSplitDataSet(dataSet,bestfeature,bestValue)retTree〔right〕createTree(rSet,alpha,m,maxlevel)retTree〔left〕createTree(lSet,alpha,m,maxlevel)print(retTree:,retTree)returnretTreedefRondomForest(dataSet,n,alphahuigui):树的个数dataSetgetDatasets()Trees〔〕foriinrange(n):Xtrain,Xtest,ytrain,ytesttraintestsplit(dataSet〔:,:1〕,dataSet〔:,1〕,testsize0。33,randomstate42)Xtrainnp。concatenate((Xtrain,ytrain。reshape((1,1))),axis1)Trees。append(createTree(Xtrain,alphaalpha))returnTrees预测单个数据样本deftreeForecast(tree,data,alphahuigui):ifalphahuigui:ifnotisinstance(tree,dict):returnfloat(tree)ifdata〔tree〔bestFeature〕〕tree〔bestVal〕:iftype(tree〔left〕)float:returntree〔left〕else:returntreeForecast(tree〔left〕,data,alpha)else:iftype(tree〔right〕)float:returntree〔right〕else:returntreeForecast(tree〔right〕,data,alpha)else:ifnotisinstance(tree,dict):returnint(tree)ifdata〔tree〔bestFeature〕〕tree〔bestVal〕:iftype(tree〔left〕)int:returntree〔left〕else:returntreeForecast(tree〔left〕,data,alpha)else:iftype(tree〔right〕)int:returntree〔right〕else:returntreeForecast(tree〔right〕,data,alpha)单棵树预测测试集defcreateForeCast(tree,dataSet,alphahuigui):mlen(dataSet)yhatnp。mat(zeros((m,1)))foriinrange(m):yhat〔i,0〕treeForecast(tree,dataSet〔i,:〕,alpha)returnyhat随机森林预测defpredictTree(Trees,dataSet,alphahuigui):mlen(dataSet)yhatnp。mat(zeros((m,1)))fortreeinTrees:yhatcreateForeCast(tree,dataSet,alpha)ifalphahuigui:yhatlen(Trees)else:foriinrange(len(yhat)):ifyhat〔i,0〕len(Trees)2:yhat〔i,0〕1else:yhat〔i,0〕0returnyhatifnamemain:dataSetgetDatasets()得到数据集和标签print(dataSet〔:,1〕。T)打印标签,与后面预测值对比RomdomTreesRondomForest(dataSet,4,alphafenlei)4棵树,分类。print(RomdomTrees)print(RomdomTrees〔0〕)yhatpredictTree(RomdomTrees,dataSet,alphafenlei)print(yhat。T)getDatasets()
  执行结果:C:Anaconda3python。exeC:ProgramFilesJetBrainsPyCharm2019。1。1helperspydevpydevconsole。pymodeclientport56305print(Pythonsons(sys。version,sys。platform))sys。path。extend(〔C:appPycharmProjects,C:appPycharmProjects〕)Python3。7。6(default,Jan82020,20:23:39)〔MSCv。191664bit(AMD64)〕Typecopyright,creditsorlicenseformoreinformationIPython7。12。0AnenhancedInteractivePython。Type?forhelp。PyDevconsole:usingIPython7。12。0Python3。7。6(default,Jan82020,20:23:39)〔MSCv。191664bit(AMD64)〕onwin32runfile(C:appPycharmProjectsArtificialIntelligencetest。py,wdirC:appPycharmProjectsArtificialIntelligence)〔1。1。0。0。0。0。0。0。1。1。1。0。1。0。0。0。0。1。1。0。1。0。0。1。1。1。1。1。1。1。0。0。0。1。1。0。0。0。0。0。1。1。1。1。1。1。0。0。0。1。0。1。1。1。0。0。1。1。0。1。0。1。1。0。1。1。1。0。1。0。1。1。0。0。0。1。0。1。1。1。1。1。1。0。0。1。0。1。1。0。0。1。0。0。0。0。1。1。0。1。0。1。1。0。0。0。0。1。1。0。1。1。0。0。0。0。1。1。0。0。1。1。1。0。0。1。0。1。0。1。0。1。0。0。1。1。0。0。0。0。1。1。1。0。0。0。0。1。0。1。0。1。0。0。1。1。1。1。1。0。0。0。0。1。0。0。1。1。0。1。0。0。1。1。1。0。0。0。1。0。0。1。1。0。1。1。0。1。0。1。0。0。1。1。1。1。0。0。1。0。〕RomdomTrees〔〔1。1。0。0。0。0。0。0。0。1。1。0。1。0。0。0。0。1。1。0。1。0。0。1。1。1。0。1。1。1。0。0。0。1。0。0。0。0。0。0。1。1。1。1。1。1。0。0。0。1。0。1。1。1。0。0。0。1。0。1。0。1。1。0。1。1。1。0。1。0。1。1。0。0。0。1。0。1。1。0。1。1。0。0。0。0。0。1。1。0。0。1。0。0。0。0。1。1。0。1。0。1。1。0。0。0。0。1。0。0。1。1。0。0。0。0。0。1。0。0。1。1。1。0。0。0。0。1。0。1。0。1。0。0。1。0。0。0。0。0。1。1。1。0。0。0。0。1。0。1。0。1。0。0。1。1。1。1。0。0。0。0。0。1。0。1。1。1。0。1。0。0。1。1。1。0。0。0。1。0。0。1。1。0。1。1。0。1。0。1。0。0。1。1。1。1。0。0。1。0。〕〕
搜索 投诉 评论 转载

马斯克晋升全球首富!旗下SpaceX估值已超1000亿美元财联社(上海,编辑周玲)讯,据报道,在本周内部人士宣布二次售股后,特斯拉CEO埃隆马斯克(ElonMusk)旗下太空探索技术公司SpaceX估值已超过1000亿美元。这意味着马……你的无线充电器有闲置在家吗?网友优缺点太明显现在,我们的手机在充电时需要连接数据线和手机,然后等到手机充满电或需要使用时再拔出充电器的插头。这将需要很长时间。这也可能会带来一些不便。但是,无线充电技术取消了手机的原始数据……绝地求生!华为表示愿意使用高通芯片,就看高通的了在华为全联接2020媒体见面会上,华为方面表示,如果允许的话,愿意使用高通的芯片来制造手机,在断芯之后,麒麟芯片终会耗尽,如果能使用高通芯片,也是目前最好的结果了。毕竟这……手机技术,中国和美国的差距到底有多大现在,手机是生活中的必需品,也反映了一个国家电子信息技术的发达程度。买手机的时候,很多人都会有些纠结,选国产还是选苹果?那么,对于手机的关键技术,我国和美国到底有多……如何挑选一款适合你会议室的麦克风?阜新声艺视听在一场会议中,向所有与会者提供视频和音频几乎已经成为会议的标准。虽然音频和视频内容都是有效远程通信的一部分,但是从某种程度上来看,在开会的过程中,音频往往占据第一的位置。或者可……气候临界点到来,墨迹天气的新基建角色凸显气象是盐2021年,人类对这句话体会的尤为深刻,因为气候突变的常态化,迫使人们将查阅天气预报变成日常习惯。德国的洪灾,美国的暴风,希腊的烈火,巴西的冰雪,还有中国华北地区……智能手表出货量暴增,但国产小米OPPOvivo一加等拖后腿了随着科技的发展,智能设备已经成为生活中不可或缺的产品,提高人们的生活质量,帮助人民更好地适应生活、改善生活,其中智能手表销量这两年出现了暴涨趋势,而在这里领域,苹果智能手表销量……如何为家人选购一台网络电视盒子这段时间不少粉丝和观众留言和私信,大概率都会出现一个我给家人使用,老人用得有没有性价比高的这类需求。也许年轻人并不是电视的忠实用户,但老人和家庭依旧有电视收视需求经……Python机器学习(二十一)随机森林算法一、随机森林算法简介:在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。LeoBreiman和AdeleCutler发展……一台五年前的华为Mate10Pro,放现在,相当于什么价位的我现在用的还是Mate10pro,没任何问题接近三星c7水平中端机接近一千五左右的手机,毕竟屏幕比不怎么占优了属于卖不出去的电子垃圾也就500左右……STM32零基础入门学习(第二阶段)CAN通信实验代码can1。c文件filecan1。c(can回环实验)author逗比小憨憨versionV1。0datexxxxxxxxbriefCAN驱动attention实验平台:STM……苏宁易购10亿元自有资金购回债券,进一步增强投资者信心苏宁易购大手笔回购的背后,显示了公司经营情况稳健、现金流充沛。本文由无冕财经发布,编辑:陈涧,设计:布冬,编辑助理:朱智琪11月12日晚间,苏宁易购发布公告称,使用……
华为P30系列屏幕供应商流出三家大厂齐供应人民日报央视二次点名,鸿蒙发挥超出预期,华为也果断改口一个返修电脑的服务新的证据表明,地震实际上可以帮助树木生长22年新能源车展望锂资源篇小米10QQ音乐合作4D震动音效支持10W首歌曲高端彩电市场强者归来索尼为何能延续此前的亮眼成绩?世界粮食日光盘行动背后的粮食生产和数据你知道多少?试驾迈巴赫S级,配3。0T双涡轮空气悬架,卖146。8万贵吗购买打印机的几个误区看你中招了吗?我为灵魂买单,你却把我推给楼下邻居马斯克再次发推支持狗狗币
国产科幻如何拥抱未来听听刘慈欣怎么说热博聚热点网 冰球男子小组赛中国队对阵美国队春姑娘的脚步小学作文650字快乐的一天作文500字九篇2020最新钟姓男生三字名钟姓男宝宝起名合集不想孩子养成讨好型人格,少用这3句话教训他,父母要重视大别山石窟男人如何征服少妇帝王般的享受!网游玩家喊话开新功能,游戏直接开了个专属服务器 中兴禁购被罚亿美元什么原因如何去进行微商引流你学会了吗里有的纵向有的横向怎么设置

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形