找回密码
 立即注册
搜索
查看: 7|回复: 0

国赛仅剩6天!掌握机器学习算法:二分类、多分类、回归与聚类全解析

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
60564
发表于 2025-4-21 20:00:00 | 显示全部楼层 |阅读模式
国赛只剩下 6 天了。今天,小编继续为大家进行总结,这些总结是在国赛中必须要掌握的内容,其中包括机器学习算法。

[]

学习目标

(1)了解机器学习算法在数学建模中的应用。

(2)掌握机器学习算法中的二分类、多分类、回归、聚类算法。

02

实例演练

1、谈谈你对机器学习算法与数学建模的了解。

机器学习是一门多领域交叉学科,它包含概率论、统计学、计算机科学以及软件工程等领域。机器学习指的是一套工具或方法,利用这套工具和方法,通过使用历史数据对机器进行“训练”,从而使机器“学习”到某种模式或规律,并且建立起能够预测未来结果的模型。机器学习包含两类学习方法。一类是有监督学习,主要用于决策支持。它借助有标识的历史数据来进行训练,目的是实现对新数据标识的预测。有监督学习方法主要包含分类和回归。另一类是无监督学习,主要用于知识发现。它能在历史数据中发现隐藏的模式或内在结构。无监督学习方法主要包含聚类。

近年来,全国赛的题目包含数据。这些数据量总体呈增加趋势。科研界和工业界已积累丰富数据,伴随大数据概念兴起和机器学习技术发展,这些数据需转化为更有意义的知识或模型。所以在建模比赛中,若数据量较大,就有机器学习的用武之地。

2、用二分类算法对数据集进行分析。

以下示例展示了运用所提供的支持向量机模型来进行二分类,并且在图中把支持向量的分布情况给画了出来(在图 1 中,圆圈内的点即为支持向量)

(1)导入数据并处理数据。

%% 支持向量机模型

clc,clear,close all

load  % 导入数据集,是自带的数据集

数据类别被分成 3 类。每类植物都有 50 个样本。总共的样本数是 150 个。

% 读取数据集中的两个分类‘' 和 ''

inds 等于取反后的空数组;这用于产生样本标签,其中属于某类的样本类别被设定为 0,而其他类别(逗号分隔的其他类别)的样本类别被设定为 1

% 使用两个维度,即第三列和第四列数据。

X 等于从 meas 数据矩阵中选取第三列和第四列的数据,同时移除前 50 行数据和后 100 行数据。

y 等于 inds;将 inds 中的前 50 行的种类移除,只保留后 50 行的种类。

(y) % ()用于统计数值的个数和频率

运行结果:

下面,我将对这段代码进行详细的分析:

自带的数据集,其数据类别被分为 3 类。每类植物都有 50 个样本,总计 150 个。这是系统自带的.csv 文件,其中包含 5 列数据以及 151 行。第 1 行是项目名称,后面接着是具体的内容,如 5.1,3.5,1.4,0.2 等这样的数据,从第 2 行开始便是这些数据。

load 的意思是将这个文件读入到系统中。运行之后,工作区会生成 2 个文件。meas 是前四列全部数据的矩阵,且不含名称这行;meas 也是最后一列即第五列的数据。

即对中的每个元素与“”进行比较,若一致,那么对应位置的元素即为 1,反之则为 0。若前 50 行是“”就变为 1,若后 100 行不是“”就为 0。inds = ~(,“”);% 进行取反操作后返回的 inds 是一个与大小相同的 array,inds 的元素为 1 或 0。在数据文件的列中是“”的一共有 50 行。再取反,应该就是一列向量,前50项是0,后面100项是1。

X 等于从 meas 数据矩阵中选取第三、四列的数据;meas 数据矩阵的前 50 行数据被移除;meas 数据矩阵的后 100 行数据被移除

y 等于 inds;将 inds 中的前 50 行的种类移除,把后 50 行的种类保留下来。

(y) ; ()用于统计数值的个数和频率

(2)训练SVM模型,并将结果可视化。

%% 使用线性核函数训练SVM模型,并将结果可视化

= (X,y,'',''); % 即核函数

% 查看进行数据划分的支持向量

sv = .;

函数能够按照分类或者分组的方式来绘制离散点,它适用于绘制多个类别的离散样本的分布情况。

hold on

在 sv 矩阵的第一列(sv(:,1))和第二列(sv(:,2))上绘制空心圆圈,圆圈大小为 10 。

('','',' ') % 图例

hold off

运行结果:



代码分析:函数能够依据分类或者分组来绘制离散点,这种方式适合用于绘制多个类别的离散样本的分布情况。它是红点与浅蓝点交界相邻的那部分。

3、用多分类算法对数据集进行分析。

多分类问题的处理是以二分类模型为基础的。以下的示例会展示怎样运用 SVM 的二分类模型并且结合相关函数来解决多分类问题。

%% 导入数据集

clc,clear,close all

load

X = meas;

Y = ;

(Y);

创建一个用于二分类的 SVM 模板,并且对分类变量实施标准化处理。

%

t = ( '' , 1); % 对分类变量进行标准化处理

%% 基于SVM二分类模型进行训练并生成多分类模型

Mdl = (X,Y,'',t,...

'',{'','',''})

运行结果如下:

4、用回归算法对数据集进行分析。

回归模型对响应(输出)变量与一个或多个预测变量(输入)变量之间的关系进行了描述。它支持线性、广义线性和非线性回归模型。以下这些示例会展示怎样去训练逻辑回归模型。

逻辑回归

在某一领域中,逻辑回归属于广义线性回归的范围,能够通过运用某种函数来达成逻辑回归模型的训练。

%% 判断不同体重、年龄、性别的人的吸烟概率

clc,clear,close all

load  % 导入数据集

dsa = ;

% 指定模型使用的计算公式

% 公式的书写方式符合  , 详情请查看:

Age 加上 1 ,再加上 Sex ,以及 Age 本身 ,还有 Age 与 Sex 的组合 ,以及 Sex 本身 。

% 通过参数''指定''构建逻辑回归模型

mdl = (dsa, , '', '')

运行结果:

5、聚类。

有 5 个销售员,分别是 w1、w2、w3、w4、w5。他们的销售业绩由二维变量(v1,v2)来进行描述。以下是具体情况,接着使用聚类算法将这些销售员进行分类。

聚类意味着在数据中,仅存在数据特征,而需要依据某一特定的标准,把这些数据划分到不同的类别当中。

同样地,如今在一个教室中,所有人都没有明显的标签。现在若要将整个教室的人分为两类,那么可以从性别、体型、兴趣爱好、位置等诸多角度去进行分析。接下来我们以分层聚类这种方式为例来进行讲解,上述例子源自于《数学建模算法与应用》,其目的是辅助进行说明。通常而言,分层聚类分为两类。一类是自上向下的分裂,也就是先把所有个体当作一个类,接着依据规则逐步将其分裂成多个类;另一类是自下而上的合并,即先把每个个体看作一个类,然后按照规则逐步合并为一个类。所以,分层聚类最终能够得到一个金字塔结构,每一层的类别数量各不相同,我们可以选取所需的类别数量。

解题步骤:

把 5 个人的两种数据当作他们的指标,首先,我们对任意两组数据的距离进行简单定义,即:

与此相对应的是,当某一样本被归为一类之后,若要计算类间距离,就需要一个计算方式。我们将任意两类之间的距离定义为两类中每组数据距离的最小值。

因此,可以得到任意两个销售员的数据距离矩阵:

(3)详细分析:



首先,最相近的两组样本是 w1 和 w2,它们之间的距离是 1,因此先把它们聚为一类。

然后,剩下的样本有 w1、w2、w3、w4、w5。我们发现,除了距离 1 之外,最相似的是 w3 和 w4,它们的距离为 2,所以将 w3 和 w4 聚为一类。

然后,剩下的样本有{w1,w2}、{w3,w4}以及 w5。我们发现,除了距离 1 和 2 之外,最相似的是{w1,w2}与{w3,w4}。它们的距离是以 w2 和 w3 的距离为准,距离为 3。所以将这两类聚为一类。

最后,剩下的样本有 w1、w2、w3、w4 和 w5。因为只剩最后两类了,所以最后一类是 {w1,w2,w3,w4,w5},类间距是以 w3/w4 与 w5 的距离 4 为准的。

源代码:

%% 编程实现

clc;clear;close all

data 包含了[1,0]、[1,1]、[3,2]、[4,3]、[2,5]这些数据;这些数据是原始数据。

[m, ~] = size(data);

d = (data');%求任意两组数据的距离

d = tril(d);%取下三角区域数据

nd = (d);%去除0元素

nd = (nd);%去除重复元素

for i = 1 : m-1

= min(nd);

[row, col] = find(d == );

提取相似的类别,即进行 label = union(row,col) 的操作。

将类别标签进行转化,转化后的结果为行向量;类别标签为(label, 1, (label))

找到的第 i 次相似样本为:label;

nd(nd == ) = [];%删除已归类的距离

if (nd)%如果没有可分的类就停止

break

end

end

%% 工具箱实现

clc;clear;close all

data = [1,0;1,1;3,2;4,3;2,5];%原始数据

y 等于使用 pdist 函数来计算 data 之间的距离,这里的距离是任意两样本的绝对值距离,并且没有指定具体的距离度量方式。

yc = (y);%将距离转化成对称方阵

z = (y);%生成聚类树

[h, t] = (z);%画出聚类树

n = 3;%最终需要聚成多少类

T 由 z、空字符串 '' 和 n 组成;分析在对 n 类进行划分时,各个样本的标签情况。

for i = 1 : n

label = find(T == i);

label = (label, 1, (label));

输出第 i 类的内容,即 label 。

end

运行结果:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【宏智网络】 ( 京ICP备20013102号 )

GMT+8, 2025-5-8 04:43 , Processed in 0.117619 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表