机器学习十大算法之Matlab-7随机森林10集成学习

随机森林+Boosting

Matlab代码

随机森林

例子1-用随机森林算法对周志华《机器学习》中的西瓜数据集3.0𝛼 进行分类
  • melon30a.txt
1   0.697   0.460  1
2   0.774   0.376  1
3   0.634 	0.264  1
4   0.608 	0.318  1
5   0.556 	0.215  1
6   0.403 	0.237  1
7   0.481 	0.149  1
8   0.437 	0.211  1
9   0.666 	0.091  2
10 0.243 	0.267  2
11 0.245 	0.057  2
12 0.343 	0.099  2
13 0.639 	0.161  2
14 0.657 	0.198  2
15 0.360 	0.370  2
16 0.593 	0.042  2
17 0.719 	0.103  2
  • RF_melon30a.m
%随机森林对西瓜数据集3.0a分类
clear all; 
close all; 
clc;
data = load('melon30a.txt');
data(:,1)=[]; %删除第一列(序号)
X=data(:,1:2); %训练样本矩阵
Y=data(:,3); %标签向量
figure(1);
gscatter(X(:,1),X(:,2),Y,'rb','*p'); %画原始数据散点图
title('原始数据'); xlabel('密度');ylabel('含糖率');
legend('好瓜','非好瓜','Location','NW'); 
box on;
B=TreeBagger(30,X,Y); %调用随机森林函数
Y1=predict(B,X); %用训练好的模型对样本集X进行预测
figure(2);
gscatter(X(:,1),X(:,2),Y1,'rb','*p'); %分类后的数据散点图
title('随机森林分类'); xlabel('密度');ylabel('含糖率');
legend('好瓜','非好瓜','Location','NW'); 
box on;
nCorrect=sum(str2num(char(Y1))==Y);%正确分类的样本数目
accuracy=nCorrect/length(Y); %计算正确率
例子2-用随机森林算法对鸢尾属植物数据集 Iris 进行分类, 并绘制包外误差曲线 图.
%随机森林对鸢尾属植物数据集Iris分类
clear all; close all; clc;
load fisheriris %载入数据集
%X=meas(:,3:4); %取数据集的后两个属性便于可视化
X=meas;
Y=species; %标签向量
figure(1)
gscatter(X(:,3),X(:,4),Y,'rbm','*pd'); %画原始数据散点图
title('原始数据'); xlabel('花瓣长度');ylabel('花瓣宽度');
legend('Location','SE'); box on
B=TreeBagger(50,X,Y,'oobpred','on'); %调用随机森林函数
Y1=predict(B,X); %用训练好的模型对样本集X进行预测
figure(2)
gscatter(X(:,3),X(:,4),Y1,'rbm','*pd'); %分类后的数据散点图
title('随机森林分类'); xlabel('花瓣长度');ylabel('花瓣宽度');
legend('Location','SE'); box on
figure(3)
plot(oobError(B)); %画包外误差曲线
title('包外误差曲线'); xlabel('决策树棵数');ylabel('包外误差')
nCorrect=sum(strcmp(Y1,Y));%正确分类的样本数目
accuracy=nCorrect/length(Y); %计算正确率

Adaboosting

例子3-用Adaboosting二分类
%AdaBoost算法分类数据集ionosphere
clc, clear all, close all;
load ionosphere; %加载数据
%Z = load('melon3.0.txt'); X=Z(:,2:3); Y=Z(:,4);
Mdl=fitensemble(X,Y,'AdaBoostM1',100,'tree'),
%利用AdaBoost算法训练100轮, 弱学习器类型为决策树, 返回一个Mdl类
rsLoss=resubLoss(Mdl,'Mode','Cumulative');
%计算误差, Cumulative 表示累积1:T分类器的误差
plot(rsLoss,'k-');  %绘制训练次数与误差的关系
xlabel('弱分类器个数');
ylabel('训练误差');
[Y1,~]=predict(Mdl,X); %对原始数据进行预测输出
nCorrect=sum(strcmp(Y1,Y));%正确分类的样本数目
accuracy=nCorrect/length(Y), %计算正确率
Xbar=mean(X);  %构造一个新的样本
[ypredict,score]=predict(Mdl,Xbar)  %预测新样本, 利用predict方法
%ypredict: 预测标签, score: 当前样本点属于每个类的可信度, 分值越大, 置信度越高
view(Mdl.Trained{5},'Mode','graph'); %显示训练的弱分类器
例子4-用Adaboosting多分类
%AdaBoost算法对鸢尾属植物数据集进行分类
clc, clear all, close all;
load fisheriris;  %装载鸢尾属植物数据集, 3类
X = meas; %训练样本集
Y = species; %标签向量
Mdl=fitensemble(X,Y,'AdaBoostM2',400,'tree'), %多分类
%利用AdaBoost算法训练400轮, 弱学习器类型为决策树
rsLoss=resubLoss(Mdl,'Mode','Cumulative');
%计算误差, Cumulative 表示累积1:T分类器的误差
plot(rsLoss,'k-');  %绘制训练次数与误差的关系
xlabel('弱分类器个数'); ylabel('训练误差');
[Y1,~]=predict(Mdl,X); %对原始数据进行预测输出
nCorrect=sum(strcmp(Y1,Y));%正确分类的样本数目
accuracy=nCorrect/length(Y), %计算正确率
Xb=[1 0.2 0.4 2];  %一个新的样本
[ypredict,score]=predict(Mdl,Xb)  %预测新样本, 利用predict方法
%ypredict: 预测标签, score: 当前样本点属于每个类的可信度, 分值越大, 置信度越高
view(Mdl.Trained{100},'Mode','graph'); %显示训练的第8个弱分类器
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值