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

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

  • 随机森林+Boosting
    • Matlab代码
      • 随机森林
        • 例子1-用随机森林算法对周志华《机器学习》中的西瓜数据集3.0 进行分类
        • 例子2-用随机森林算法对鸢尾属植物数据集 Iris 进行分类, 并绘制包外误差曲线 图.
      • Adaboosting
        • 例子3-用Adaboosting二分类
        • 例子4-用Adaboosting多分类

随机森林+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个弱分类器

你可能感兴趣的:(算法,matlab)