MATLAB机器学习工具箱
wptr33 2025-05-28 20:48 15 浏览
MATLAB机器学习工具箱
MATLAB包含统计和机器学习工具箱(Statistics and Machine Learning Toolbox),其包含如下一些子模块:探索性数据分析、数据降维、机器学习、回归和方差分析、概率分布拟合及假设检验等功能模块。
1.工具箱简介
机器学习算法使用计算方法直接从数据中“学习”信息,不把预定方程假设为模型。不同的机器学习算法,按照解决问题的性质,可以分为分类(回归)、聚类和强化学习问题。相应的,在Statistics and Machine Learning Toolbox中提供用于执行受监督和无/非监督机器学习的方法。分类算法使用户可以将一个分类应变量建模为一个或多个预测元的函数。Statistics and Machine Learning Toolbox提供涵盖多种参数化和非参数化分类算法的应用程序和函数,如logistic回归、朴素贝叶斯、k近邻、SVM等。
分类学习器应用程序(Classification Learner App)提供了一个机器学习应用常用的操作,如交互式探查数据、特征选择、指定交叉验证方案、训练模型和评估结果。分类学习器应用程序用于使用监督式机器学习来训练模型对数据进行分类,使用它可以执行常见任务,例如导入数据和指定交叉验证方案;探索数据和选择特征;使用多种分类算法训练模型;比较和评估模型;在计算机视觉和信号处理等应用场合中共享训练过的模型。
除此之外,分类学习器集成了多种可视化方式来方便用户选择模型,进行模型评估和比较。训练好的模型也可以直接导入MATLAB的工作空间,来对新的数据预测,也可以直接生成代码,方便和其他应用集成。
Statistics and Machine Learning Toolbox中也实现了很多聚类算法,聚类算法通过根据相似度测量对数据分组来发现数据集中的规律。可用的算法包括k-均值、k-中心点、分层聚类、高斯混合模型和隐马尔可夫模型。当不知道聚类的数量时,可以使用聚类评估技术根据特定指标确定数据中存在的聚类数量。
2.分类学习器基本流程
对遇构建机器学习应用,通常包括五部分,分别是数据导入、数据的探索和特征选择、训练模型、比较模型和输出模型。
2.1数据导入
首先为了启动分类学习器,可以直接在命令行输入“classification Learner”或者在MATLAB的菜单栏中选择“应用程序”选项卡下的分类学习器应用classification Learner。
导入数据的方法分为两种方式,点击新建对话后,可选择从工作区或文件中导入数据。演示数据通过fishertable=readtable('fisheriris.csv')导入。
该窗口主要目的是用来设置训练数据的相关属性、标签及设置验证集。导入数据依次对应3个步骤,第一步中主要功能是选择数据集,且设置数据集矩阵中的行(rows)作为一个变量,还是将列(columns)作为一个变量;第二步中需要向算法声明哪些维度是输入量,哪些是输出量,对于分类问题来说就是选择哪几个变量作为属性值,哪个变量作为标签。预测变量对应输入,响应变量对应标签。此时导入数据的工作就完成了。
为了优化算法中的一些超参数,需要一定的手段来评估不同参数的表现,其中,验证集的目的是用来对算法的超参数调优。验证集应该是训练集的一部分。但是当训练集数量较少(因此验证集的数量更少)时,将用到交叉验证法。所谓k折交叉验证就是把训练集均分成k份,其中k-1用来训练,1份用来验证。然后循环取k-1份来训练,其中1份来验证,最后取所有k次验证结果的平均值作为算法验证结果。点击开始会话。
2.2选择模型并调整训练参数
该激活的窗口包含了训练一个机器学习应用的核心要素,其大体分为六部分。最上边的菜单栏提供了特征选择、算法选择、训练模型、可视化绘图及输出等操作。特征选择模块用于选择输入特征,即选择属性特征,也可以利用PCA方法自动选择。
分类学习算法分成四大类,分别是决策树类、判别分析类、支持向量机类、神经网络类。除了简单地点击Train进行训练外,还可以通过Advanced按钮设置一些训练的参数。
2.3输出模型
当用户选择一个训练模型后,它就会出现在窗口的右侧方框中。用户可以选择多个模型,依次训练。得到的每个分类器的分类精度会显示在方框中。其中分类效果最好的模型会以方框突出显示。当前模型一栏显示当前模型的一些详细信息。
训练完毕后,用户不仅仅得到一个分类的精度值,同时用户还可以通过各种图形来直观地观测当前模型的表现。当然,图示化训练数据对于数据探索,发现数据的模式也是大有脾益。可以绘制的图形包括训练数据的散点图、混淆矩阵、ROC曲线等。在窗口的最右侧可以设置绘图参数。
通过可视化窗口界面,用户可以再次调整模型,如进一步的特征提取,或者设置更加合理的超参数值,来改善模型的表现。
一但得到满意的模型,可以通过两种方式加以利用。一种是用户导出训练好的模型到工作空间中,这个时候用户将发现变量空间多了一个结构体变量,这个变量含有一个用于预测的成员函数,此时,用户将可以用它来做预测。但是如果用户希望更改模型,或者把它集成到其他的应用,则需要用到另一种方法,也是最通用的方法,即代码的形式使用。
3.分类学习器算法优化与选择
使用工具箱的方法并不是智能的,同样需要对数据进行预处理,并根据经验和分析选择合适的数据特征。另外,机器学习各类算法也具有不同的特点,使用者应在不断的实践中了解各类机器学习算法,在特定的应用场合应选择适合数据自身的算法。
3.1特征选择
在分类学习器中可以通过对原始数据做散点图来分析是否需要或排除某个特征。选择不同特征作为坐标轴,如果数据某一类别数据很好地分开,说明这个特征是有用的。如果某个特征对于分类没有任何作用,则可以考虑把它排除。在fisheriris数据集中选择X和Y分别为PetalLength和PetalWidth,可以看到setosa类能够被很好地分开。
在分类学习器窗口,也可以通过勾选耨个特征,观察分类器的表现。如果删除某个特征后可以提高模型的性能,那么应该排除这个特征,尤其是当收集该数据比较昂贵和困难的时候。具体操作为单击特征组中的特征选择按钮,可以取消勾选特征中特征名称后的复选框。
利用主成分分析来降低特征空间的维度,有助于防止过拟合。PCA能够消除数据中的冗余信息,产生一个新的变量集,该变量集称为主成分。在工具箱中使用PCA包括以下步骤:(1)在分类器的特征中单击PCA按钮;(2)在高级PCA选项中选中启用PCA,并设置响应参数(一般采用默认)。至此,用户已完成了对PCA的设置,之后,当用户点击Train的时候,PCA会首先对数据做变换和处理,然后进行模型训练。
在分类学习器中也可以利用平行坐标图(Parallel Coordinates Plot)来选择特征,具体操作为单击分类学习器窗口的绘图中的平行坐标图按钮,生成平行坐标图。
在平行坐标图中其实它就是把每个特征列在列在一个一维的轴上画出来,然后把每个记录(一个样本点)依次连接起来,最后用不同的颜色表示不同的类别,错分的类别用虚线表示。如果某个特征具有很好的区分度,那么在坐标轴上就会出现明显的聚类现象。从图中可以看出PetalLength和PetalWidth特征具有很好的分类效果。
3.2选择分类器算法
各分类器算法有各自的特点,依赖于具体的需求,如速度、存储、灵活性、可解释性等,会有不同的选择。如果对于一个数据没有特别深刻的理解,或者特别适合的模型,最开始用户可以选择All Quick-To-Train,这个选项会用所有高效的模型对数据进行训练,能够快速地得到不同分类器的表现。但一般来说,不同类型算法用不同的特点,有大概的了解也会有利于用户选择分类器算法。下表对不同类型分类器算法进行了比较。
4.工具箱分类学习实例
本节通过实例来阐述如何使用分类学习器APP。所述的实例是基于fisheriris数据集。中文名为安德森鸢尾花数据集(Anderson’s Iris Data Set),也称鸢尾花数据集(Iris Data Set)或费雪鸢尾花数据集(Fisher’s Iris Data Set),是一类多重变量分析的数据集。其数据集包含了150个样本,都属于鸢尾属下的3个亚属,分别是山鸢尾、变色鸢尾和维吉尼亚鸢尾。4个特征被用于样本的定量分析,它们分别是花萼和花瓣的长度和宽度。因此算法的任务就是基于这4个特征,利用不同的分类算法来分辨它们到底属于哪个亚属。
下面介绍利用Classification Learner实现分类算法的步骤。
(1)在MATLAB命令行中输入命令,进行fisheriris数据集的加载,命令为“fishertable=readtable(‘fisheriris.csv’);”。
(2)对fisheriris数据集的四项特征的数据进行归一化处理,经典的方法有min-max标准化、Z-score标准化、小数点定标标准化。
(3)在上述3种归一化方法种,在本实例中选择第一种方法进行处理。然后MATLAB的“应用程序”选项卡中选择Classification Learner。
(4)经过上一步骤,会出现一个分类学习器窗口。在分类学习器窗口中单击新建对话按钮,此时将出现一个用于数据处理的窗口,按照上节方法进行设置,分别设置预测变量和响应变量及一些关于交叉验证的参数。本实例采取默认设置。之后单击该窗口右下角开始会话。此时,分类学习器创建了一个数据的散点图。可发现散点的分布形式没有发生变化,仅仅是坐标轴的范围发生了改变,这就是对数据进行归一化后的数据结果。用户可以通过选择不同的特征来绘图,从而观察哪些变量能够很好地区分数据。值得注意的是,通过其他方式进行归一化处理,散点的分布形式会有一定的变化。本实例中样本属性特征为4,且各特征对于训练都有作用,因此不进行删减特征处理及PCA主成分分析。
为了应用判别分析算法,单击CLASSIFICATION LEARNER选项卡CLASSIFIER组中的下拉按钮,选择ALL选项,然后单击TRAINING组中的Train按钮,此时,就可以开始训练模型了,经过2~3分钟的训练后。同样,也可以在CLASSIFIER组中的下拉列表中单独选择决策树算法、SVM、logistic回归及集成方法。这里为了方便,这里直接选择ALL选项,它会对训练数据应用所有的可用的分类器。
在图的左侧可以看到总共24个分类算法,最好的分辨率达到了98%的识别率,相应的识别算法包括ComplexTree、Medium Tree、Simple Tree、Quadratic SVM、Medium Gaussian SVM。需要具体了解训练算法的相关参数及训练时间,可单击相应算法,则在其左下角的现有模型窗格中显示。
另外,在散点显示图中,则发现显示为“X”的点,这些点表示预测错误的点,单击图中的散点,可显示出具体的数据信息。
为了观察每个类预测的准确率,可以单击画图组中的混淆矩阵按钮。也可以单击ROC曲线。
(5)最后,为了导出模型,在导出模型下拉列表中可以选择不同的导出方式。本实例中采用导入工作空间的方法,即选择导出模型中的导出紧凑模型。
采用默认值,单击“确定”按钮。此时在MATLAB的工作空间中便显示了一个名为trainedClassifier的结构体数据,即为训练好的模型。
为了利用训练好的数据模型进行新样本的预测,需要调用和使用它的成员函数XXX,predicFcn,其中XXX为模型名称,本实例中使用格式如下:
Yfit=trainedClassifier.predicFcn(T)
其中,T是新预测数据样本,它的形式和数据类型必须于训练中的数据保持一致,且不包含标签。另外,值得注意的是,需要对样本数据采用同样的归一化方法进行训练。
- 上一篇:MATLAB二分法求方程的根(实例加程序)
- 下一篇:IIR数字滤波器原理及实现方法
相关推荐
- redis的八种使用场景
-
前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...
- 基于Redis的3种分布式ID生成策略
-
在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...
- 基于OpenWrt系统路由器的模式切换与网页设计
-
摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...
- 这篇文章教你看明白 nginx-ingress 控制器
-
主机nginx一般nginx做主机反向代理(网关)有以下配置...
- 如何用redis实现注册中心
-
一句话总结使用Redis实现注册中心:服务注册...
- 爱可可老师24小时热门分享(2020.5.10)
-
No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...
- Apportable:拯救程序员,IOS一秒变安卓
-
摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...
- JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透
-
以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...
- 3月26日更新 快速施法自动施法可独立设置
-
2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...
- Redis 是如何提供服务的
-
在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...
- lua _G、_VERSION使用
-
到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...
- China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting
-
BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...
- 移动工作交流工具Lua推出Insights数据分析产品
-
Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...
- Redis 7新武器:用Redis Stack实现向量搜索的极限压测
-
当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...
- Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求
-
重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)