初学者须知的4种机器学习算法(附源代码实现)matlab聚类

国赛仅剩最后6天,今天小编继续给大家总结在国赛中必掌握的:机器学习算法。

01

学习目标

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

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

02

实例演练

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

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

近年来,全国赛的题目中,多多少少都有些数据,而且数据量总体来说呈不断增加的趋势,这是由于在科研界和工业界已积累了比较丰富的数据,伴随大数据概念的兴起及机器学习技术的发展,这些数据需要转化成更有意义的知识或模型。所以在建模比赛中,只要数据量还比较大,就有机器学习的用武之地。

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

以下示例显示了利用MATLAB提供的支持向量机模型进行二分类,并在图中画出了支持向量的分布情况(图1中圆圈内的点表示支持向量)

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

%%支持向量机模型

clc,clear,closeall

loadfisheriris%导入数据集,fisheriris是Matlab自带的数据集

%fisheriris数据类别分为3类,setosa,versicolor,virginica.每类植物有50个样本,共150个。

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

inds=~strcmp(species,'setosa');%产生样本标签,属于setosa类的样本类别为0,其他类别(versicolor,virginica)样本类别为1

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

X=meas(inds,3:4);%在meas数据矩阵中,前50行数据移除,后100行数据移除;保留第三、四列的数据

y=species(inds);%移除前50行的种类,保留后50行的种类。

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

运行结果:

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

fisheriris是Matlab自带的数据集,fisheriris数据类别分为3类,setosa,versicolor,virginica.每类植物有50个样本,共150个。fisheriris是matlab系统自带的fisheriris.csv文件,里面有5列数据,151行,第1行是项目名称:SepalLength,SepalWidth,PetalLength,PetalWidth,Species,第2行以后是5.1,3.5,1.4,0.2,setosa;。。。。等等这样的数据。

loadfisheriris的意思是读入fisheriris这个文件到系统里,运行之后matlab工作区生成2个文件。meas就是前四列全部数据的矩阵,不含名称这行;species就是最后一列即第五列数据。

strcmp(species,'setosa');即把species中的每个元素和‘setosa’做比较,如果一致,则对应位置的元素为1,否则,为0。前50行是'setosa'就变成1,后100行不是就是0。inds=~strcmp(species,'setosa');%取反后返回值inds是一个和species有相同size的logicalarray,inds的元素是1或0。数据文件中species列里面是'setosa'的共有50行。再取反,应该就是一列向量,前50项是0,后面100项是1。

X=meas(inds,3:4);在meas数据矩阵中,前50行数据移除,后100行数据移除;保留第三、四列的数据

y=species(inds);移除前50行的种类,保留后50行的种类。

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

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

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

SVMModel=fitcsvm(X,y,'KernelFunction','linear');%KernelFunction即核函数

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

sv=SVMModel.SupportVectors;

figure

gscatter(X(:,1),X(:,2),y)%gscatter函数可以按分类或分组来画离散点,适用于画多个类别的离散样本分布图。

holdon

plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)%空心圆圈大小

legend('versicolor','virginica','SupportVector')%图例

holdoff

代码分析:gscatter函数可以按分类或分组来画离散点,适用于画多个类别的离散样本分布图。SupportVector为红点与浅蓝点的交界相邻部分。

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

MATLAB多分类问题的处理是基于二分类模型.下面的示例演示如何利用SVM的二分类模型并结合fitcecoc函数解决多分类问题。

%%导入fisheriris数据集

loadfisheriris

X=meas;

Y=species;

tabulate(Y);

%%创建SVM模板(二分类模型),并对分类变量进行标准化处理

%predictors

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

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

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

'ClassNames',{'setosa','versicolor','virginica'})

运行结果如下:

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

回归模型描述了响应(输出)变量与一个或多个预测变量(输入)变量之间的关系。MATLAB支持线性,广义线性和非线性回归模型。以下示例演示如何训练逻辑回归模型。

逻辑回归

在MATLAB中,逻辑回归属于广义线性回归的范畴,可以通过使用fitglm函数实现逻辑回归模型的训练。

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

loadhospital%导入hospital数据集

dsa=hospital;

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

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

modelspec='Smoker~1+Age+Weight+Sex+Age:Weight+Age:Sex+Weight:Sex';

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

mdl=fitglm(dsa,modelspec,'Distribution','binomial')

5、聚类。

例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述如下,使用聚类算法将其分类。

聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。

同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。接下来我们以分层聚类为例进行讲解,上面例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。

解题步骤:

(1)将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为:

(2)与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:

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

(3)详细分析:

Step1首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类;

Step2然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是w3,w4,他们的距离为2,所以将其聚为一类;

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

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

源代码:

%%编程实现

clc;clear;closeall

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

[m,~]=size(data);

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

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

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

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

fori=1:m-1

nd_min=min(nd);

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

label=union(row,col);%提取相似的类别

label=reshape(label,1,length(label));%将类别标签转化成行向量

disp(['第',num2str(i),'次找到的相似样本为:',num2str(label)]);

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

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

break

end

%%工具箱实现

y=pdist(data,'cityblock');%计算任意两样本的绝对值距离

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

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

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

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

T=cluster(z,'maxclust',n);%分析当分n类时,个样本的标签

fori=1:n

label=find(T==i);

label=reshape(label,1,length(label));

disp(['第',num2str(i),'类有:',num2str(label)]);

距离国赛仅剩6天,数模乐园最近在b站推出了一个真题讲解、竞赛流程、题目的选择技巧、需要掌握的基本知识、如何读题解题、揣摩出题人思路等内容免费课程,是两位多次参赛并且多次获奖的国一学长,如果你也想拿国奖点击下方小程序立即学习:

THE END
1.贝叶斯回归代码手写mob6454cc6eb555的技术博客贝叶斯回归代码手写 scikit-learn机器学习五 逻辑回归 朴素贝叶斯 实战:逻辑回归与朴素贝叶斯的比较 20.8.23补充 逻辑回归的定义 逻辑回归中常用的类 损失函数 正则化 逻辑回归的其他重要参数 实战:两种正则化的区别 逻辑回归 逻辑回归中,响应变量描述了结果是正向情况的概率。如果响应变量等于或者超过了一个区分阈值,https://blog.51cto.com/u_16099258/12872530
2.机器学习&深度学习算法及代码实现机器学习代码机器学习&深度学习算法及代码实现 原文地址:https://blog.csdn.net/qq_31456593/article/details/69340697 最近在学机器学习,学习过程中收获颇多,在此留下学习记录,希望与同道中人相互学习交流 最新深度学习教程和相关资源,请关注微信公众号:DoitNLP, 后面我会在DoitNLP上,持续更新深度学习、NLP、Tensorflow的相关教程https://blog.csdn.net/qq_31456593/article/details/69340697
3.十大经典机器学习算法详解及代码实现机器学习领域有许多经典算法,对于初学者来说,全面学习可能有些挑战。以下是十大经典机器学习算法的详细介绍,包括书籍、课件和源代码,供大家参考: 决策树 决策树是一种基于概率的决策分析方法,通过构建决策树来评估项目的风险和可行性。它是一种直观的概率分析图解法。 K均值聚类算法 https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4130926917743983440
4.源码机器学习算法清单!附Python和R代码附Python和R代码 本文约6000字,建议阅读8分钟。通过本文为大家介绍了3种机器学习算法方式以及10种机器学习算法的清单,学起来吧~ 前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明、更个性化的技术。https://cloud.tencent.com/developer/article/1101907
5.机器学习算法一览(附python和R代码)写这篇文章的目的,就是希望它可以让有志于从事数据科学和机器学习的诸位在学习算法的路上少走些路。我会在文章中举例一些机器学习的问题,你们也可以在思考解决这些问题的过程中得到启发。我也会写下对于各种机器学习算法的一些个人理解,并且提供R和Python的执行代码。读完这篇文章,读者们至少可以行动起来亲手试试写http://www.bibdr.org/nd.jsp?id=56&_ngc=-1&groupId=8
6.机器学习算法及代码实现–决策树大码王机器学习算法及代码实现–决策树 1、决策树 决策树算法的核心在于决策树的构建,每次选择让整体数据香农熵(描述数据的混乱程度)减小最多的特征,使用其特征值对数据进行划分,每次消耗一个特征,不断迭代分类,直到所有特征消耗完(选择剩下数据中出现次数最多的类别作为这堆数据的类别),或剩下的数据全为同一类别,不必继https://www.cnblogs.com/huanghanyu/p/12911803.html
7.在Python中实现决策树算法的示例代码python决策树(Decision Tree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中,并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python中动手实现,这可以作为了解这类算法的基础知识+ 目录在深入研究代码之前,我们先要了解支撑决策树的数学概念:熵和信息增益https://www.jb51.net/python/294651gm9.htm
8.2020届计算机科学方向毕业设计(论文)阶段性汇报面向机器学习算法的中间语言设计第二次阶段性汇报 介绍当前项目进展,代码功能实现以及相应的演示。 林耘丰 频域激活函数推导与设计 卷积神经网络中包含卷积,池化,激活函数等算子。其中激活函数具有增加网络非线性性,提高模型表达能力的作用。为了在频域上计算神经网络,需要使用频域上的激活函数。本研究将从推导现有激活函数https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3709
9.R机器学习关键代码机器学习在R语言中是一个广泛的话题,涉及多种算法和包。以下是一些在R中实现机器学习的关键代码示例,包括数据预处理、模型训练、预测和评估: 1. 载入数据和包 # 载入所需的包,如dplyr用于数据处理,ggplot2用于绘图 library(dplyr) library(ggplot2) # 载入数据集 data <- read.csv("data.csv") 2. 数据预https://zhuanlan.zhihu.com/p/693609294
10.腾讯算法岗武功秘籍(上)所以,不要存在侥幸心理,踏踏实实的刷题,复习好常规机器学习算法,尤其是算法的原理和应用场景。 ★ 项目和比赛经历非常的重要,往往面试官都是根据项目里用到的方法拓展提问,对项目的优化和改进也问的比较多。还有就是能内推的一定去找学长学姐或是其它资源去内推。 ★ 面试过程中如果实在写不出来代码的话,就给https://www.flyai.com/article/930
11.教程:AutoML训练无代码分类模型本教程介绍如何在 Azure 机器学习工作室中使用 Azure 机器学习,通过无代码自动化机器学习 (AutoML) 来训练分类模型。 此分类模型预测某个金融机构的客户是否会认购定期存款产品。 利用自动化 ML,可以自动完成耗时密集型任务。 自动机器学习会快速循环访问算法和超参数的多个组合,以帮助你根据所选的成功指标找到最佳模型https://docs.microsoft.com/zh-cn/azure/machine-learning/tutorial-first-experiment-automated-ml
12.TensorFlow机器学习常用算法解析和入门上图为基于ICA的人脸识别模型。实际上这些机器学习算法并不是全都像想象中一样复杂,有些还和高中数学紧密相关。 后面讲给大家一一详细单独讲解这些常用算法。 强化学习 13)Q-Learning算法 Q-learning要解决的是这样的问题:一个能感知环境的自治agent,怎样通过学习选择能达到其目标的最优动作。 https://www.w3cschool.cn/tensorflow/tensorflow-s8uq24ti.html
13.轻松看懂机器学习十大常用算法通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题。 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普。 以后有时间再对单个算法做深入地解析。 https://www.jianshu.com/p/55a67c12d3e9
14.《常用算法之智能计算(三)》:机器学习计算因为机器学习计算中涉及了大量的统计学理论,机器学习与统计推断的联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习计算关注可以实现的、行之有效的学习算法,很多推论问题具有无程序可循的难度,所以部分的机器学习研究是开发简单、处理容易的近似算法。http://www.kepu.cn/blog/zhangjianzhong/201903/t20190327_475625.html