Shashank Prasanna, MathWorks
机器学习无处不在。从医疗诊断、语音和手写识别到自动交易和电影推荐,机器学习技术被用于每天每时每刻做出关键的商业和生活决策。每个机器学习问题都是独特的,因此管理原始数据、识别影响模型的关键特征、训练多个模型和执行模型评估都是具有挑战性的。
在本节课中,我们将探讨使用MATLAB进行机器学习的基本原理。通过几个例子,我们回顾了监督学习(分类)和非监督学习(聚类)的典型工作流程。
亮点包括
关于主讲人: Shashank Prasanna是MathWorks的产品营销经理,他专注于MATLAB和用于统计、机器学习和数据分析的附加产品。s manbetx 845在加入MathWorks之前,Shashank在Oracle从事软件设计和开发工作。Shashank拥有亚利桑那州立大学电气工程硕士学位。
记录:2015年3月19日
大家好,欢迎来到轻松机器学习。我叫Shashank Prasanna。我是MathWorks公司统计和机器学习产品的产品经理。s manbetx 845
这是今天剩下的演讲议程。我将从什么是机器学习以及为什么您可能想要考虑它的高级概述开始。然后我们将看到机器学习中的一些关键挑战。
接下来,我将通过解决一个涉及真实世界数据的有趣问题来更深入地研究机器学习。为了解决这个问题,我将介绍一个通常用于解决机器学习问题的典型工作流。然后我们将介绍另一个涉及图像数据的有趣示例。我将向您展示一个使用网络摄像头的视频来识别物体的现场演示。我们将以一个总结和一些关于何时考虑机器学习的指导来结束会议。
因为这是一个容易的主题,所以没有先决条件。基本熟悉MATLAB是有帮助的,但不是必需的。机器学习无处不在。在当今世界,这些技术越来越多地被用于做出关键的商业和生活决策。今天,有了机器学习,我们能够解决汽车、金融、计算机视觉和其他几个以前被认为是不可能的领域的问题。
那么什么是机器学习呢?让我们花一分钟快速浏览一下机器学习的高级概念。即使你对这个主题很熟悉,这也可以作为一个快速的提醒,让你知道什么时候进行机器学习是有用的。
我们可以将机器学习定义为一种使用数据并生成程序来执行任务的技术。让我用一个例子来解释一下。假设有一项任务需要使用来自手机的传感器数据来检测一个人的活动;例如,如果这个人在走路、坐着、站着等等。解决这类问题的标准方法要么是分析信号,然后用一组设计良好的规则编写一个程序,要么是知道一组使用输入并预测输出的方程或公式。
机器学习方法就是直接从数据中学习这样一个程序。在这种情况下,我们为算法提供输入和输出数据,并让它学习程序来解决这个任务。这一步通常被称为训练。输出的模型现在可以用于从新的传感器数据中检测活动。
请注意,我没有明确提到一个特定的机器学习算法,因为有很多算法可供选择,每个算法都有自己的优点和缺点。当我们详细讲解这个例子时,我们会看到这一点。如果我想让你们从这张幻灯片中学到两件事,那就是,第一,你需要数据。如果你没有数据,你就无法进行机器学习。这是一个强烈的要求。
第二,只有当任务很复杂,并且没有神奇的方程或公式来解决它时,才考虑机器学习。如果您有一个公式,您可以继续并实现它。机器学习将起作用,但不建议在这种情况下使用这种方法。
让我们去MATLAB看看机器学习的方法是什么样的。我们正在处理的数据包括6个输入,3个来自加速度计,3个来自移动电话的陀螺仪。响应或输出是执行的活动。包括走路、站立、跑步、爬楼梯和躺着。
这是分类学习者。它是一个交互式工具,可以让您执行常见的机器学习任务,例如交互式探索数据、选择特征、指定验证方案、训练模型和评估结果。在我的左边,我有几个不同的机器学习模型,它们已经经过了传感器数据的训练。紧挨着每个模型的是一个百分比数字,表示在单独的验证集中所选分类器的准确性。我可以使用右边的可视化来探索我的数据,以搜索模式和趋势。
训练一个新模型很容易。我只需导航到Classifier库,选择一个感兴趣的分类器,然后点击Train。训练完成后,您可以在History List中看到新模型以及模型的性能准确性。这个数字越高,模型在新数据上的表现就越好。我将选择我的最佳性能模型,并单击Export开始在MATLAB中使用我的模型,我可以看到导出的模型就在这里的工作区中。
我现在想使用这个模型,以及一些测试数据,来可视化模型的预测结果。这是一个显示两秒半流加速器和陀螺仪数据的图表。上面的绿条显示的是人的实际活动与这里的传感器信号相对应。如果模型能够成功地预测到这个人的实际活动,底部的条是绿色的,如果不能预测到这个人的实际活动,则是红色的。你看,这个模型经常把走路和爬楼梯搞混。
让我们快速回顾一下我们刚刚取得的成果。我们使用分类学习者使用数据来拟合几个不同的模型。然后我们选择了一个显示出良好效果的,我们测试它,以确保它做了它应该做的。这看起来很简单,那么为什么机器学习有这么难的名声呢?
为了回答这个问题,我想引用一位著名统计学家的话,他曾经在一本教科书中写道:“所有的模型都是错误的,但有些是有用的。”为什么?因为模型是近似值。不仅仅是机器学习模型——所有的模型都是基于一些假设的近似,但这并不会降低它们的用处。机器学习模型可以解释数据中的复杂模式,但要成功应用机器学习,需要找到有用的模型,而这可能是一项具有挑战性的任务。
实际上,在机器学习工作流程的每一步中都存在不止一个而是多个挑战。数据有各种形状和大小。它可以是简单的数字数据,比如来自金融数据或传感器信号的数据,也可以是来自相机的流图像或文本数据。现实世界的数据集通常是凌乱的,并不总是表格式的。
数据预处理需要特定于领域的算法和工具。例如,信号或图像处理算法需要从信号和图像数据中提取有用的特征。特征选择和特征转换需要统计算法。我们经常需要来自多个领域的工具,当使用多个机器学习算法时,寻找最佳模型可能是一项令人畏惧和耗时的任务。
最关键的是,选择最好的机器学习模型是一种平衡的行为。高度灵活的模型可能是准确的,但也可能过度拟合数据,在新数据上表现不佳。在另一个极端,简单模型可能对数据假设太多。在模型的速度、准确性和复杂性之间总是有一个权衡。
最后,机器学习工作流从来都不是一个方便的线性工作流。我们总是不断地来来回回,迭代,并尝试不同的想法,直到我们汇聚到一个解决方案。我今天的目标是:向你们介绍一套常用的工具和策略来应对这些挑战。
在解决机器学习任务时,我们喜欢遵循一个简单的两步工作流程。第一步是训练你的模型。我们首先引入数据,这些数据来自各种不同的来源,如数据库、流设备等。接下来,我们使用特征提取或其他统计工具对数据进行预处理。这一步对于将数据转换为机器学习算法可以使用的格式至关重要。
之后,我们准备从数据中学习。如果任务是预测标签或类别,我们选择分类方法。如果任务是预测连续的值,那么我们选择回归方法,然后继续建立一个模型。当然,这是一个迭代的过程,需要反复到预处理步骤,尝试不同的机器学习算法,调整不同的参数,等等。
这个工作流程的第二步是实际使用模型,在左边,我有新的数据,在右边,我需要做出预测。那么从数据到预测我们需要什么呢?首先,我们需要对新数据使用所有预处理步骤,因此这里不涉及额外的工作。我们只是重复利用我们在训练阶段所付出的所有努力。
接下来,我们使用来自训练阶段的模型并进行预测。对于一些工程问题,第二步通常被部署或集成到生产环境中,例如,在使用机器学习执行自动化特征的服务器上。现在让我们使用这个工作流在MATLAB中通过一个例子。
本例的目标是训练分类器,以根据传感器测量自动识别人类活动。数据由六个输入组成,三个来自加速度计,三个来自陀螺仪。输出的响应是所执行的活动:步行、站立、跑步、爬楼梯和躺下。
我们将采取的方法如下。首先,我们将从传感器信号中提取基本特征。然后,我们将使用分类学习者来训练和比较几种不同的分类器,最后,在不可见的传感器数据上测试结果。
这就是MATLAB。我们从这里的当前文件夹窗口开始。由于工作流的第一步是引入数据,所以我将在MAT文件中加载一些原始传感器数据。要导入此数据,我所要做的就是将其拖放到工作区窗口中。工作空间窗口可以帮助你跟踪MATLAB中的所有变量,无论它们是现有的变量还是我们在开发过程中创建的新变量。
我的数据由七个变量组成。前6个是感官输入变量,3个用于陀螺仪,3个用于加速度计x、y和z。最后一个变量TrainActivity包含传感器测量的每个观察的活动标签。注意,所有的变量都有大约7000个观测值。让我们来看看个体的感官输入是什么样的。
如果我绘制x轴陀螺仪数据的单行图,我们会看到它大约有128个点。这就是数据的含义。传感器数据通常被收集并固定在窗框上。每一行有128个读数,对应着2.5秒的传感器数据。
现在,这些数据的形式不能用于机器学习。我必须首先处理所有这些输入,为这128个点或2.5秒的窗口提取特征,我必须对所有6个传感器输入都这样做。但在我们开始特征提取之前,让我们看看原始传感器数据是什么样子的。
我在这里有一个自定义的图,它显示了三个加速度计原始传感器数据,它们有不同的颜色,对应于人们正在进行的活动。MATLAB中的绘图具有很强的互动性。我可以放大查看是否有任何视觉模式或趋势可以帮助我们识别这个人的活动。
快速浏览一下,我们可以看到每种颜色的传感器值看起来是不同的。例如,这里的橙色值,对应的是爬楼梯,和紫色值很不一样,紫色值对应的是站立。然而,与此同时,我们很难从视觉上区分行走和攀登,因为两者都包含大量的运动。像这样的问题都是机器学习的很好的候选者,因为我们并不总是很明显地可以为每一个活动定义规则。
在我们开始特征提取步骤之前,我将从这六个传感器输入创建一个表。表是保存混合类型数据的优秀工具,这在机器学习中很常见。在这个例子中,我们有传感器测量,它是数值,标签是分类值。
现在,我的工作空间中有了一个表变量,其中包括所有6个单独的传感器变量。使用表格进行机器学习的另一个好处是,我可以用一行代码对表格中的所有变量应用单一特征提取函数。我所要做的就是调用VarFun,它代表变量函数,并传入我的特征提取函数。这里的WMean是一个函数,它计算传感器变量中每一行的平均值。在本例中,我正在计算传感器值的2.5秒帧的平均值。
WMean是我当前文件夹浏览器中的一个函数,正如您所看到的,它是一个相当简单的函数。但是,根据您的应用程序和您想提取的特性,这可以非常复杂。除了均值,我想提取另外两个特征,这是每个帧的标准差,和PCA,代表主成分分析,我想只保留第一个主成分。由于表可以保存混合类型的数据,我将把标签Activities分配为一个名为Activity Within Table的新变量。
让我们运行这一节,看看人类活动数据表是什么样子的。我总共有19列,前6列对应于框架的平均值。接下来的6个是框架的标准差,最后6个是PCA输出。我的最后一列是与每次观察相对应的活动,可以是躺着、坐着、爬楼梯、站着或走。
现在我们已经准备好了数据,让我们移动Classification Learner来训练我们的模型。分类学习者是统计和机器学习工具箱的一部分,您可以通过在MATLAB命令行中键入分类学习者启动它。或者您可以在MAT统计和优化的AppStat下找到它。
我们首先从从MATLAB工作区导入数据开始。在导入对话框的第一步中,我们从MATLAB工作区中选择数据集。在第二步中,注意到应用程序会自动选择一个变量是预测器还是响应。
应用程序根据数据类型来决定。但是,您也可以选择更改其角色或完全删除该变量。现在,我们让它保持原样。
在第三步中,我们可以选择我们的验证方法。验证可以防止过拟合等问题。当您拥有一个相对较小的数据集时,选择交叉验证,因为它可以有效地利用所有数据。如果有足够的数据,请选择Hold Out。
对于我们的问题我将选择这个选项因为我们有很多数据点。将我的Hold Out百分比设置为20%指示应用程序使用80%的数据进行训练,20%用于验证模型的性能。最后一种选择通常不推荐。由于所有的数据都用于训练和测试,这导致了对模型准确性的偏见估计。
Classification Learner是一个交互性很强的环境,有许多不同的窗口和组件,我保证我们会在它们变得相关的时候浏览每一个。顶部的工具条显示了从左到右的工作流,从导入数据到导出模型。中心是由响应变量分组的两两散点图。
这个图对于寻找模式很有用。例如,这一对预测器,我们注意到,铺设似乎与其他活动很好地分开。坐姿似乎也很好地分开了,但也有一些重叠。工具条上的特性选择选项允许您从模型中排除预测器。对于这个例子,因为我们没有太多的预测器,所以我们将让它保持原样。
在解决分类问题时,没有万能的方法。不同的分类器最适合不同类型的数据和问题。Classification Learner允许您从决策树、支持向量机、最近邻和集成分类器中进行选择,对于每种分类器类型万博1manbetx,都有几个预设值,它们是一系列分类问题的优秀起点。如果您不确定选择哪一个,一个弹出的工具提示将为您提供分类器的简要描述。
当使用MATLAB时,帮助总是只需要点击即可。要获得进一步的帮助,只需单击右上角的问号,这将打开应用程序的文档。您将在这里找到有关应用程序的所有信息。现在,让我们转到下面的部分,该部分提供了关于选择分类器的指导。
这里有一个很好的表格,它根据您想要做的权衡,为您选择哪个分类器提供了指导。例如,决策树的拟合速度很快,但预测精度中等。另一方面,对于较小的问题,最近邻具有较高的预测精度,但也有较高的内存使用量。让我们使用文档中的这个技巧,首先从决策树开始。
训练一个模型很容易。只需从图库中选择一个预设并点击train,这将在模型历史中产生一个火车模型,以及它的预测精度。我们再训练一棵中等树和一棵复杂树。在验证集上表现最好的模型总是用绿色框显示。
除了预测准确率百分比之外,还有其他有用的诊断工具。混淆矩阵是一个很好的工具,它可以告诉你一个分类器是如何快速运行的,这就是你如何阅读混淆矩阵。对角线上的任何东西都是正确分类的。任何偏离对角线的都是错误分类。一个完美的分类器在对角线上应该是100%,其他地方都是0%。
让我们仔细看看一项活动:爬楼梯。读取的方法是89.1%的时间,模型成功地预测了活动。但是,有10.9%的情况下,模型认为爬楼梯就是走,也就是说,模型错误地将爬楼梯归为走。在现代历史上,我们总是可以在不同的模型之间切换来比较混淆矩阵。
该应用程序还提供了另一个诊断工具Auto C Curve。用自动C曲线来描述二分类器的灵敏度。曲线的形状显示了敏感性和特异性之间的权衡。当我们向上移动到曲线的右侧,我们增加了真阳性的几率,但也增加了假阳性的几率。
在我看来,使用应用程序而不是编写代码的最大优势之一是能够训练多个模型。除了决策树,我现在要训练最近邻分类器,因为我知道它们训练起来很快,预测起来也很快。当训练多个模型时,您不必局限于这些预设。
如果您是高级用户,您总是可以打开高级弹出窗口来调整分类器参数。为了方便,这些变化也显示在模型历史中。在模型历史中,我们现在有大约8个模型,我在几秒钟内训练所有的模型,而不需要写一行MATLAB代码。
有两种模式可以导出您的分析。您可以直接将您的模型导出到MATLAB中,或者您可以选择生成MATLAB代码,使您可以自动执行我们在构建该模型时所采取的所有步骤,而不必编写任何代码。让我选择这个选项,向您展示生成的代码是什么样子的。
我这里的MATLAB是一个注释良好的,完全自动生成的MATLAB代码。我们还可以看到代码捕获的工作流中的不同步骤。例如,提取预测器和响应,使用KNN分类器训练分类器,设置Hold Out验证等等。您总是可以自定义生成的代码,将其集成到您的应用程序中。
让我们回到Classification Learner,导出一个模型,我们可以看到这个模型现在在MATLAB工作区中是可用的。我们现在准备在新的数据上测试模型。首先,我们从MAT文件加载一些新的传感器数据。然后我们应用与之前相同的特征提取步骤。然后,我们使用导出的模型在新的传感器数据上测试结果。
正如我们前面看到的,顶部的绿色条显示了这个人正在执行的实际活动,底部的绿色条表示模型成功检测到该活动。如果出错就会变成红色。如果您想尝试一个新的模型,您可以简单地返回Classification Learner,直接导出模型或生成MATLAB代码,训练新模型使用新数据进行预测。
让我们快速浏览一下我们的工作流程,总结一下我们刚刚所做的工作。我们的训练数据是来自手机传感器的传感器信号。我们应用基本的预处理技术来提取特征,如平均标准差和主成分分析。然后,我们使用分类学习者应用程序,基于抵制验证精度来达到我们的最佳模型。
对于新数据的预测,我们对新数据应用相同的预处理步骤,然后使用训练过的模型进行预测,然后将结果可视化。让我们来看另一个例子,我们将使用图像数据训练一个机器学习模型。本例的目标是训练分类器自动从网络摄像头视频中检测汽车。数据由四辆不同玩具车的几张图片组成。输出的响应是这四辆车中的每一辆的标签。
我们将采取的方法如下。首先,我们将使用一种称为词袋的技术从这些图像中提取特征。然后,我们使用分类学习者使用这些特征来训练和分类几个不同的分类器。最后——这是有趣的部分——我们将看到我们训练的模型的现场演示,通过我办公室的网络摄像头实时识别汽车。
让我们切换到MATLAB。我要清理我的工作空间,重新开始。让我们来看看我们的数据。这里有一堆图像和文件夹,每个文件夹的名称都是该文件夹中图像集的标签。让我们看看这些图像在MATLAB之外是什么样子的。
这里是一堆沙丘的图片,从不同的角度和不同的光照条件拍摄的,我有一些这四辆车的图片。在处理图像时,以循环方式加载所有图像并跟踪所有文件和文件夹以及标签可能是很痛苦的。计算机视觉系统工具箱有方便的工具,如图像集,使这一任务很容易。我只是为Image Set提供了一个文件夹,里面有我所有的图片,并指示查看所有的子文件夹。Image Set的另一个重要优势是它不会将所有的图像加载到内存中,所以当你有很多很多的图像时,它很容易使用。
为了预处理数据并提取特征,我将使用一种称为特征袋的方法。这是一种相当复杂的从图像中提取特征的技术,效果特别好。如果您有兴趣了解更多关于该函数的功能,计算机视觉系统工具箱文档详细解释了算法的底层功能。现在,让我们把这个函数看作一个特征提取工具,我们将使用它从图像中提取特征。
就像我们在前面的例子中所做的一样,让我们创建一个表并将标签分配给表。让我们直接跳到分类学习者,开始训练我们的模型。让我们快速浏览一下我们的数据。我们从图像中提取了200个新的特征,最后一个变量是响应。我将再次选择坚持作为我的验证,现在我准备开始训练模型。
我将快速训练几个模型,从最近的邻居和支持向量机开始。万博1manbetx现在我有了一些或多或少的训练,让我们使用混淆矩阵做一个快速的视觉诊断。混淆矩阵大部分是对角线的,所以这是一件好事,我们将快速导出这些模型中的一个,看看它在真实流图像上的表现。
在运行这个函数之前,我想向您展示代码,以及获取流图像和实时对它们进行分类是多么容易。这个函数有两个输入。第一个是火车模型,第二个是特征包对象,我将使用它从新图像中提取特征。
启动网络摄像头很容易。我要做的就是调用网络摄像头命令。在一个连续运行的循环中,我首先从网络摄像头获取快照,然后将其转换为灰度,这意味着模型应该能够在没有颜色信息的情况下识别汽车。下一步是从新图像中提取特征,最后使用预测函数和训练好的模型对新图像进行预测。让我们回去运行这个函数。
上面的图显示的是我的网络摄像头拍摄的图像,这里的绿条是模型对这幅图像做出预测的结果。这是我使用的分类器,这个柱状图显示了分类器对这辆车属于闪电,脱线,奈杰尔或沙丘的信心。让我们移动相机来看看模型在不同角度和方向下的表现。
所以模型基本上是对的闪电,但当我们转移到奈杰尔,你会看到模型不是完全确定它是哪辆车。底部的概率图显示了模型预测这是哪辆车的信心。这是沙丘,最后是板牙。
让我们从Classification Learner导出另一个模型,看看两个模型是如何并排执行的。所以我将使用线性支持向量机,并选择使用默认名称的导出。现在我的工作区中有两个分类器,或者说两个模型。一个是KNN。另一个是支持向量机。万博1manbetx
现在让我运行这段代码,比较这两种分类器的性能。我们在这里再次看到的是一个比较两个分类器并排的性能的视频。左上红色部分是我们的SVM分类器的性能,右下是KNN分类器的性能。这里要注意的重要一点是,它不仅很容易在Classification Learner中比较和测试模型,而且也很容易将这些模型导出到MATLAB并实时测试它们。
我们的演示到此结束。现在让我们回到我们的演示。让我们再次使用我们熟悉的工作流图来总结我们刚刚完成的工作。
我们的输入由磁盘上的几个标记图像组成。我们使用单词袋的方法来生成新特征。然后我们使用分类学习者应用程序来达到我们的最佳模型。在预测步骤中,我们从网络摄像头获取新的数据,对图像和新特征进行编码,并使用训练过的模型进行实时预测。
这就引出了总结和关键要点。为了总结到目前为止我们所看到的,让我回到我在这个演讲开始时提出的挑战。希望你们今天已经看到了MATLAB是如何解决这些挑战的。
对于数据多样性的第一个挑战,我们看到了MATLAB如何处理不同类型的数据。MATLAB还可以访问和下载金融数据提要,处理文本、地理空间数据和其他几种数据格式。MATLAB也有经过审查的工业标准算法和函数库。MATLAB还为金融、信号处理、图像处理等方面的特定工程工作流提供了额外的工具。
我们还看到了如何快速构建和原型解决方案,它与应用程序驱动的工作流程交互,让您专注于机器学习,而不是编程和调万博 尤文图斯试。机器学习的最佳实践,如交叉验证和模型评估工具,被集成到应用程序和功能中。正如我们所看到的,MATLAB也有丰富的文档,其中有一些指导方针,可以帮助您为工作选择正确的工具。最后,MATLAB本质上是一个灵活的建模环境和完整的编程语言,对您可以对您的分析进行定制没有任何限制。这使得MATLAB成为一个优秀的机器学习平台。
我们的演讲到此结束,我会尽量保持简短。关于什么时候应该考虑机器学习,我想和大家分享一些指导方针。如果您正在处理一个手写规则和方程式太复杂或无法表述的问题,可以考虑使用机器学习。或者当您的任务的规则不断地变化,您的程序或模型需要不断地适应,因为您的任务是一个移动的目标。或者当数据的性质发生变化时,程序需要不断地进行调整。
希望我已经能让你们相信MATLAB是一个强大的平台,适用于机器学习工作流程的每一步。我们一直有兴趣收到您的来信,您可以在统计和机器学习工具箱产品页面上找到我的联系信息。如果您有兴趣了解更多信息,请查看产品文档。有大量的示例和概念页面,它们不仅可以帮助您入门,还可以指导您掌握这些工具。
要了解与机器学习相关的算法、应用领域、示例和网络研讨会的更多信息,请访问机器学习页面。我们的会议到此结束。谢谢大家的聆听。
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。