机器学习十大算法之Matlab-7随机森林10集成学习
- 随机森林+Boosting
-
- Matlab代码
-
- 随机森林
-
- 例子1-用随机森林算法对周志华《机器学习》中的西瓜数据集3.0 进行分类
- 例子2-用随机森林算法对鸢尾属植物数据集 Iris 进行分类, 并绘制包外误差曲线 图.
- Adaboosting
-
- 例子3-用Adaboosting二分类
- 例子4-用Adaboosting多分类
随机森林+Boosting
Matlab代码
随机森林
例子1-用随机森林算法对周志华《机器学习》中的西瓜数据集3.0 进行分类
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
%随机森林对西瓜数据集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个弱分类器