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方法自动选择。
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是新预测数据样本,它的形式和数据类型必须于训练中的数据保持一致,且不包含标签。另外,值得注意的是,需要对样本数据采用同样的归一化方法进行训练。