数学建模(四):分类

简介: 在数学建模比赛中,分类也是我们最常见的问题之一,关于分类这块,现在最火热的垃圾分类其实也是属于我们分类模型中的一种,我们可以根据每个垃圾的一系列指标将其进行分成不同的类别,接下来就详细讲一下如何利用SVM和随机森林去解决该类问题,并对两种智能算法的用法进行区分和总结!

 

目录

✨前言

👉🏻历史回顾👈🏻

🔍1、什么是分类 ?

📑2、SVM(支持向量机)算法

✏️2.1代码

✏️2.2代码和原理的讲解

🗝️2.3二分类水果

🗝️2.4多分类水果

🗝️2.5多分类鸢尾花

🗝️2.6其它数据分类

📑3、随机森林算法

✏️3.1代码

✏️3.2算法简介

✏️3.3实现过程

🗝️3.3二分类水果

🗝️3.4多分类水果

🗝️3.5多分类鸢尾花

🗝️3.6其它数据分类

📖4、总结


✨前言

       在数学建模比赛中,分类也是我们最常见的问题之一,关于分类这块,现在最火热的垃圾分类其实也是属于我们分类模型中的一种,我们可以根据每个垃圾的一系列指标将其进行分成不同的类别,接下来就详细讲一下如何利用SVM随机森林去解决该类问题,并对两种智能算法的用法进行区分和总结!

数学建模专栏:数学建模从0到1

👉🏻历史回顾👈🏻

🔍1、什么是分类 ?

      分类在百度百科上的定义:“分类就是通过比较事物之间的相似性,把具有某些共同点相似特征的事物归属于一个不确定集合的逻辑方法”。

应用到现实生活中就是我们日常的垃圾分类

📑2、SVM(支持向量机)算法

✏️2.1代码

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
res = xlsread('数据集.xlsx');
temp = randperm(357);
P_train = res(temp(1: 240), 1: 12)';
T_train = res(temp(1: 240), 13)';
M = size(P_train, 2);
P_test = res(temp(241: end), 1: 12)';
T_test = res(temp(241: end), 13)';
N = size(P_test, 2);
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input );
t_train = T_train;
t_test  = T_test ;
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
c = 10.0;      
g = 0.01;     
cmd = ['-t 2', '-c', num2str(c), '-g', num2str(g)];
model = svmtrain(t_train, p_train, cmd);
T_sim1 = svmpredict(t_train, p_train, model);
T_sim2 = svmpredict(t_test , p_test , model);
error1 = sum((T_sim1' == T_train)) / M * 100;
error2 = sum((T_sim2' == T_test )) / N * 100;
[T_train, index_1] = sort(T_train);
[T_test , index_2] = sort(T_test );
T_sim1 = T_sim1(index_1);
T_sim2 = T_sim2(index_2);
...........

image.gif

✏️2.2代码和原理的讲解

这块内容,博主我讲的可能不太明白,参考一下其它优秀博主的文章:

SVM算法—原理讲解_测试狗一枚的博客-CSDN博客_svm算法原理

🗝️2.3二分类水果

image.gif编辑

image.gif编辑

🗝️2.4多分类水果

image.gif编辑

image.gif编辑

🗝️2.5多分类鸢尾花

image.gif编辑

image.gif编辑

🗝️2.6其它数据分类

image.gif编辑

image.gif编辑

📑3、随机森林算法

✏️3.1代码

%%  清空环境变量
%warning off             % 关闭报警信息
%close all               % 关闭开启的图窗
%clear                   % 清空变量
%clc                     % 清空命令行
%%  导入数据
%res = xlsread('数据集.xlsx');
P_train = res(temp(1: 50), 1: 4)';
T_train = res(temp(1: 50), 5)';
M = size(P_train, 2); 
P_test = res(temp(51: end), 1: 4)';
T_test = res(temp(51: end), 5)';
N = size(P_test, 2);
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input );
t_train = T_train;
t_test  = T_test ;
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
trees = 50;                                       
leaf  = 1;                                        
OOBPrediction = 'on';                             
OOBPredictorImportance = 'on';                    
Method = 'classification';                        
net = TreeBagger(trees, p_train, t_train, 'OOBPredictorImportance', OOBPredictorImportance, ...
      'Method', Method, 'OOBPrediction', OOBPrediction, 'minleaf', leaf);
importance = net.OOBPermutedPredictorDeltaError;  % 重要性
t_sim1 = predict(net, p_train);
t_sim2 = predict(net, p_test );
T_sim1 = str2num(cell2mat(t_sim1)); %训练集的预测值
T_sim2 = str2num(cell2mat(t_sim2)); %测试集的预测值
error1 = sum((T_sim1' == T_train)) / M * 100 ;
error2 = sum((T_sim2' == T_test )) / N * 100 ;
figure
plot(1 : trees, oobError(net), 'b-', 'LineWidth', 1)
legend('误差曲线')
xlabel('决策树数目')
ylabel('误差')
xlim([1, trees])
grid
figure
bar(importance)
legend('重要性')
xlabel('特征')
ylabel('重要性')
[T_train, index_1] = sort(T_train);
[T_test , index_2] = sort(T_test );
T_sim1 = T_sim1(index_1);
T_sim2 = T_sim2(index_2);
................

image.gif

✏️3.2算法简介

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类

✏️3.3实现过程

随机森林中的每一棵分类树二叉树,其生成遵循自顶向下的递归分裂原则,即从根节点开始依次对训练集进行划分;在二叉树中,根节点包含全部训练数据, 按照节点纯度最小原则,分裂为左节点和右节点,它们分别包含训练数据的一个子集,按照同样的规则节点继续分裂,直到满足分支停止规则而停止生长。若节点n上的分类数据全部来自于同一类别,则此节点的纯度I(n)=0,纯度度量方法是Gini准则,即假设P(Xj)是节点n上属于Xj 类样本个数占训练。

📑具体实现过程如下:

(1)原始训练集为N,应用bootstrap法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类树,每次未被抽到的样本组成了k个袋外数据;

(2)设有mall个变量,则在每一棵树的每个节点处随机抽取mtry个变量(mtry n mall),然后在mtry中选择一个最具有分类能力的变量,变量分类的阈值通过检查每一个分类点确定;

(3)每棵树最大限度地生长, 不做任何修剪;

(4)将生成的多棵分类树组成随机森林,用随机森林分类器对新的数据进行判别与分类,分类结果按树分类器的投票多少而定。

🗝️3.3二分类水果

image.gif编辑

🗝️3.4多分类水果

image.gif编辑

🗝️3.5多分类鸢尾花

image.gif编辑

🗝️3.6其它数据分类

image.gif编辑

🀄结果分析:

随机森林分类的效果明显优于SVM(支持向量机)

📖4、总结

📝1、在处理多指标分类模型的问题中,SVM(支持向量机)和随机森林都可以去解决这一系列问题,btw从上述实战中我们不难发现,随机森林的准确率达到了95%+,在跟前辈的交流中也了解到,随机森林确实比SVM更适合做多指标分类!

上述结果出现的概念:

1.混淆矩阵:[机器学习笔记] 混淆矩阵(Confusion Matrix)

相关文章
|
Python
数学建模——统计回归模型
数学建模——统计回归模型
171 0
|
8月前
|
数据可视化 数据挖掘 Python
数学建模——线性回归模型
数学建模——线性回归模型
122 1
|
8月前
|
数据采集 数据库 数据格式
【数学建模竞赛】数据预处理知识总结2——数据变换
【数学建模竞赛】数据预处理知识总结2——数据变换
87 1
|
8月前
|
机器学习/深度学习 算法 vr&ar
【数学建模竞赛】预测类赛题常用算法解析
【数学建模竞赛】预测类赛题常用算法解析
197 0
|
机器学习/深度学习 算法 vr&ar
数学建模三大类模型适用场景及建模方法(纯干货)
如果评价指标个数过多(一般超过9个),利用层次分析法所得到的权重就有-定的偏差,继而组合评价模型的结果就不再可靠。可以根据评价对象的实际情况和特点,利用一定的方法,将各原始指标分层和归类,使得每易各类中的指标数少于9个。
4285 0
数学建模三大类模型适用场景及建模方法(纯干货)
|
机器学习/深度学习 人工智能 算法
数学建模——人工神经网络模型
数学建模——人工神经网络模型
128 0
|
机器学习/深度学习 自然语言处理 算法
数学建模2:评价类模型
数学建模2:评价类模型
183 0
|
数据采集 机器学习/深度学习 算法
【数学建模】数据预处理
【数学建模】数据预处理
284 0
|
算法 C语言
【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现
客观评价方法中的一种,亦称为理想解法,是一种有效的多指标评价方法。这种方法通过构造评价问题的正理想解和负理想解,即各指标的最优解和最劣解,通过计算每个方案到理想方案的相对贴近度,即靠近止理想解和远离负理想解的程度,来对方案进行排序,从而选出最优方案。
【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现
|
机器学习/深度学习 SQL 人工智能
如何准备数学建模?(附建模必备资料)
如何准备数学建模?(附建模必备资料)
151 0