数学建模(四):分类

简介: 在数学建模比赛中,分类也是我们最常见的问题之一,关于分类这块,现在最火热的垃圾分类其实也是属于我们分类模型中的一种,我们可以根据每个垃圾的一系列指标将其进行分成不同的类别,接下来就详细讲一下如何利用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
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
253 0
|
5月前
|
数据采集 算法 数据挖掘
别再野蛮操作了!用Python优雅地搞定数据清洗
别再野蛮操作了!用Python优雅地搞定数据清洗
211 33
|
数据采集 开发者
适合学校的抢球场,抢图书馆位置等公共资源软件设计思路(以中国石油大学(华东)为例)
适合学校的抢球场,抢图书馆位置等公共资源软件设计思路(以中国石油大学(华东)为例)
274 0
|
28天前
|
机器学习/深度学习 监控 算法
当手环懂你心事:未来的可穿戴情感分析设备
当手环懂你心事:未来的可穿戴情感分析设备
75 4
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
机器学习/深度学习 编解码 算法
图像超分:RFB-ESRGAN(Perceptual Extreme Super Resolution Network with Receptive Field Block)
图像超分:RFB-ESRGAN(Perceptual Extreme Super Resolution Network with Receptive Field Block)
286 0
|
7月前
|
监控 数据可视化 搜索推荐
如何通过数据分析优化营销流程?
在当今竞争激烈的市场中,企业需构建高效的营销流程以整合资源、提升效率并实现业务增长。本文从目标设定、渠道选择、内容创作、数据分析及团队协作工具等方面详细探讨了如何优化营销流程,并指出了常见问题及改进方向。通过明确目标、精准选择渠道、创作高价值内容、用数据驱动决策以及提升团队协作效率,企业能够在激烈的市场竞争中脱颖而出,实现持续增长。
|
9月前
|
存储 NoSQL 架构师
阿里面试:聊聊 CAP 定理?哪些中间件是AP?为什么?
本文深入探讨了分布式系统中的“不可能三角”——CAP定理,即一致性(C)、可用性(A)和分区容错性(P)三者无法兼得。通过实例分析了不同场景下如何权衡CAP,并介绍了几种典型分布式中间件的CAP策略,强调了理解CAP定理对于架构设计的重要性。
411 4
|
11月前
|
运维 安全 jenkins
Jenkins适合哪些场景
【10月更文挑战第18天】Jenkins适合哪些场景
WK
|
12月前
|
机器学习/深度学习 算法
什么是链式法则
链式法则在微积分中用于求复合函数的导数,简化了一元和多元函数的求导过程。在概率论与统计学中,它能够将复杂的联合概率分布分解为简单条件概率的乘积,便于分析。此外,在机器学习和深度学习等领域,链式法则也是反向传播算法的基础,帮助计算损失函数对网络参数的梯度,实现模型优化。这一法则为处理复合函数及概率问题提供了高效途径。
WK
1248 1