随机森林

随机森林是多个决策树的集成学习,每个决策树用bagging的方法选数据集,并且在选择最佳属性划分的时候随机划分一些属性进行分类,比单个分类器效果更好,泛化能力更强。

代码解释

1.用结构体的嵌套实现树的结构。
2.makerandomtree递归的创建树。
3.可自动适应不同的类别标签,不同的属性个数和不同的类别个数。
4.函数ent(D)返回D的信息熵。

代 码

树的主体:

function tree=makerandomtree(D,a)
tree=struct('isnode',1,'a',0.0,'mark',0.0,'child',{});%isnode判断是否是分支还是叶子,a表示节点属性,若节点是叶子,a表示分类结果,child是孩子
tree(1).a=1;%给tree分配一个确切的内存
if length(unique(D(:,end)))==1%D中样本属于同一类别tree.isnode=0;%把tree标记为树叶tree.a=D(1,end);%把tree的类别标记为D的类别return
end
if sum(a)==0 ||length(D)==0 %属性划分完毕tree.isnode=0;%把tree标记为树叶tree.a=mode(D(:,end));%把tree的类别标记为D出现最多的类别return
end
for i=1:length(a)if a(i)==1if length(unique(D(:,i)))==1tree.isnode=0;%把tree标记为树叶tree.a=mode(D(:,end));%把tree的类别标记为D出现最多的类别returnendend
end
k=ceil(log2(sum(a)));%随机选k个属性进行学习
randomindices=zeros(length(a),1); %随机去掉属性的索引,结束之后要恢复随机去掉的属性
if k>1
i=1;
su=sum(a);
while 1 %随机去掉一些属性,使得剩下的属性是k个random1=randperm(length(a),1);if a(random1)==1randomindices(random1)=1;a(random1)=0;i=i+1;endif i==(su-k+1)break;end
end
endgain=zeros(length(a),1); %保存每个属性的信息增益
best=zeros(length(a),1); %保存每个属性的最佳划分for i=1:length(a)if a(i)==1t=D(:,i);t=sort(t);gain1=zeros(length(t)-1,1);for j=1:length(t)-1%二分划分ta=(t(j)+t(j+1))/2;Df=D(D(:,i)<=ta,:);Dz=D(D(:,i)>ta,:);gain1(j)=ent(D)-(ent(Df)*length(Df(:,end))/length(D(:,end))+ent(Dz)*length(Dz(:,end))/length(D(:,end)));end[gain(i),j]=max(gain1);ta=(t(j)+t(j+1))/2;best(i)=ta; end
end
[~,m]=max(gain);%选择信息增益最大的属性
D1=D(D(:,m)<=best(m),:);
D2=D(D(:,m)>best(m),:);
a(m)=0;
for i=1:length(a)  %恢复随机去掉的属性if randomindices(i)==1a(i)=1;end
end
tree.a=best(m); %建立分支
tree.mark=m;
% disp('****************************')
% tree.a
% tree.mark
tree.isnode=1;
tree.child(1)=makerandomtree(D1,a);
tree.child(2)=makerandomtree(D2,a);end

计算ent

function f=ent(D)%计算信息商
l=unique(D(:,end));
if length(D)==0f=0;return
end
f=0;
t=zeros(length(l),1);
for i=1:length(D(:,end))for j=1:length(l)if D(i,end)==l(j)t(j)=t(j)+1;break;endend
end
n=length(D(:,end));
for i=1:length(l)f=f+(t(i)/n)*log2(t(i)/n);
end
f=-f;
end

主函数

function randomforest()
clc
clear all
T=3;%bagging采样的次数
M = importdata('D:\毕业设计\数据集1\australian.txt');  %读取数据
[sm,sn]=size(M);
% for i=1:sm             %归一化
%     mins=min(M(i,1:sn-1));
%     maxs=max(M(i,1:sn-1));
%     for j=1:sn-1
%         M(i,j)=2*(M(i,j)-mins)/(maxs-mins)-1;
%     end
% end
indices=crossvalind('Kfold',M(1:sm,sn),10); %十折交叉,划分训练集和测试集
testindices=(indices==1); %测试集索引
trainindices=~testindices;%训练集索引
trainset=M(trainindices,:); %获取训练集
testset=M(testindices,:);%获取测试集
[testm,~]=size(testset);
[trainm,trainn]=size(trainset);predict=zeros(trainm,T);
for t=1:T %开始bagging采样D=[];%训练集for i=1:trainm%采样k=randperm(trainm,1);D=[D;trainset(k,:)];end[~,sn]=size(D);a=ones(sn-1,1);%属性集合a,1代表该属性未被划分tree=makerandomtree(D,a);%递归构造简单决策树for i=1:trainmtreet=tree;while 1if treet.isnode==0predict(i,t)=treet.a;break;endif trainset(i,treet.mark)<=treet.atreet=treet.child(1);elsetreet=treet.child(2);endendendend
acc=0;
for i=1:trainmif trainset(i,end)==mode(predict(i,:))acc=acc+1;end
end
acc=acc/trainm
end

随机森林原理及其用于分类问题的matlab实现相关推荐

  1. 随机森林-集成学习方法(分类)

    随机森林-集成学习方法(分类) 1 集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题.它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测.这些预测最后结合成单预测,因此优于任何 ...

  2. 机器学习sklearn实战-----随机森林调参乳腺癌分类预测

    机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录 机器学习sklearn随机森林乳 ...

  3. 集成学习—随机森林原理(理解与论文研读)

    如果只想大致理解下随机森林的原理请看第一部分,第二部分是对原论文的研读(灰色引用标记的为证明或自己的理解),这部分可能需要花的时间比较长,不需要的可以忽略. 此外,文末列出来的参考视频,如果读论文还是 ...

  4. 随机森林原理详解及python代码实现

    随机森林(RF)算法 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.算法需要注意的点 5.python代码实现(待更......) 导入相关包 读取数据并预处理(必须处理缺失值) ...

  5. 随机森林针对中文文本分类

    改编自博客: http://blog.csdn.net/github_36326955/article/details/54891204 做个笔记 代码按照1 2 3 4的顺序进行即可: 1.py(c ...

  6. 随机森林原理_机器学习(29):随机森林调参实战(信用卡欺诈预测)

    点击"机器学习研习社","置顶"公众号 重磅干货,第一时间送达 回复[大礼包]送你机器学习资料与笔记 回顾 推荐收藏>机器学习文章集合:1-20 机器学习 ...

  7. R语言惩罚逻辑回归、线性判别分析LDA、广义加性模型GAM、多元自适应回归样条MARS、KNN、二次判别分析QDA、决策树、随机森林、支持向量机SVM分类优质劣质葡萄酒十折交叉验证和ROC可视化

    最近我们被客户要求撰写关于葡萄酒的研究报告,包括一些图形和统计输出. 介绍 数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息.该数据集有1599个观测值和12个变量,分别是 ...

  8. [机器学习算法]随机森林原理

    随机森林 单棵决策树的劣势 有时候单棵决策树可能难以实现较高的准确率,这主要是由以下几个方面决定的: 求解一棵最优(泛化误差最小)的决策树是一个NP难(无法穷极所有可能的树结构)问题,往往得到的是局部 ...

  9. 在envi做随机森林_随机森林原理

    随机森林由Leo Breiman(2001)提出的一种分类算法,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取n个样本生成新的训练样本集合训练决策树,然后按以上 ...

最新文章

  1. NumPy (6)-结构化数据类型数组
  2. Scala if...else案例
  3. c++STL容器的Queue
  4. 世界各地奇葩讨债方法,竟百发百中
  5. Black and white
  6. 天玑720支持鸿蒙系统吗,天玑720属于骁龙多少 天玑720处理器相当于骁龙几
  7. python求函数一二阶导_python:利用多种方式解微分方程(以二阶微分系统零状态响应为例)...
  8. python 字典类型问题_[ python ] 字典类型的一些注意问题
  9. scala的函数(day02)
  10. MyBatis foreach语句批量插入数据
  11. Javascript特效:缓动动画
  12. 物业计算机管理系统论文,物业小区管理系统 计算机专业毕业论文.doc
  13. 3Dmax导入bip(此篇讲解模型都有骨骼)
  14. php 公众号推送图片尺寸,微信公众号推送文图片什么尺寸最佳?
  15. 【程序】Marvell 88W8686 WiFi模块(WM-G-MR-09)创建或连接热点,并使用lwip2.0.3建立http服务器(20180312版)
  16. 无所遁形——快把你的口罩戴上(口罩识别)
  17. PIPI1003: 最少钱币数c++
  18. 9个可视化图表在线制作工具,总有一款适合你
  19. golang并发资源的竞争
  20. 宝塔linux开启缓存,宝塔面板缓存在哪里

热门文章

  1. 毕设无忧|51单片机经典设计项目
  2. 运动跑步耳机哪个牌子好、最受欢迎的跑步耳机
  3. php laravel微信支付
  4. 不直播不露脸也能做短视频变现,想挣点生活费试试这些玩法
  5. Gbase 8a GDCA考试真题100%
  6. 天九共享加持指尖生活派打造快递便民服务店
  7. 0代码html交互动画设计pdf,Mugeda零代码制作微信H5交互动画(34集)
  8. H5案例课—5点连线画一个爱-岑远科-专题视频课程
  9. 机器学习之概率图模型(贝叶斯概率,隐马尔科夫模型)
  10. 使用基于分形系统的离线签名方法