SwitUI:用Create ML训练模型

SwitUI:用Create ML训练模型_第1张图片
Create ML

在iOS 11中,设备上的机器学习从“非常难做”变成了“非常可能,并且惊人地强大”,这都要归功于一个苹果框架:Core ML。一年后,苹果推出了第二个名为 Create ML 的框架,该框架在它的技能包中增加了“容易做”的内容,第二年后,苹果推出了Create ML应用程序,使整个过程只需要拖拽就能完成(Drag-and-Drop)。由于所有这些工作,现在任何人都可以将机器学习添加到他们的应用程序中。

Core ML 能够处理各种训练任务,例如识别图像、声音甚至运动,但是在本例中,我们将研究表格回归(Tabular Regression)。这是一个奇特的名字,在机器学习中很常见,但它真正的意思是,我们可以在Create ML中抛出大量类似电子表格的数据,并要求它找出各种值之间的关系。

机器学习分为两步:训练模型,然后要求模型进行预测。训练是计算机查看所有数据以找出它们之间的关系的过程,而在大型数据集中,训练可能需要很长时间——很容易需要几个小时,甚至可能需要更长时间。预测是在设备上完成的:我们将训练好的模型提供给它,它将使用以前的结果对新数据进行预测。

让我们现在开始训练过程:请在您的Mac上打开 Create ML 应用程序。如果您不知道它在哪里,可以从 Xcode 启动它,方法是转到 Xcode 菜单并选择 Open Developer Tool > Create ML。

Create ML 应用程序会做的第一件事是要求您创建一个项目或打开上一个项目——请单击 New Document 开始。您将看到有许多模板可供选择,但如果向下滚动到底部,您将看到表格回归器(Tabular Regressor);请选择该模板并点击Next。对于项目名称,请输入BetterRest,然后点击 Next,选择您的桌面,然后点击 Create。

接下来,在这里 Create ML 似乎有些棘手,因为你会看到一个包含很多选项的界面。不过放心,一旦我逐步引导,就不会那么困难。

第一步是向 Create ML 提供一些训练数据。这是要查看的原始统计数据,在我们的案例中,该统计数据包含四个值:

  • 某人想要醒来的时间
  • 他们认为自己需要多少睡眠
  • 每天喝多少咖啡
  • 他们实际需要多少睡眠

我已经在 BetterRest.csv 中帮你提供了这份数据,文件位于项目的项目文件中。这是 Create ML 可以使用的由逗号分隔值的数据集,我们的第一项工作是导入这个数据集。
BetterRest.csv:https://github.com/twostraws/HackingWithSwift/tree/master/SwiftUI/project4-files

因此,在 Create ML 中,在 “Data Inputs” 下查找,然后在 “Training Data” 标题下选择 “Choose” 。点击 Select File 时,会打开一个文件选择窗口,选择 BetterRest.csv

重要提示:这个 CSV 文件包含的数据只能用于这个项目,不要将它用于与健康相关的实际工作。

下一步是确定目标,也就是我们希望计算机学习预测的值,以及特征,也就是计算机用来预测目标值的输入项。比如,如果我们选择某人认为他需要多少睡眠以及他们实际需要多少睡眠作为特征,我们可以训练计算机来预测他们喝了多少咖啡。

在这种实例下,我们将选择 “actualSleep” 作为目标(Target),也就是说,我们希望计算机学习如何预人们实际需要多少睡眠时间。现在,点击 “Select Features”,然后选择所有三个选项:“wake”,“estimatedSleep” 和 “coffee” —— 我们希望计算机在生成预测时将所有这三个因素都考虑在内。

在 “Select Features” 按钮下面是算法的下拉列表,有五个选项:“Automatic”,“Random Forest,”,“ Boosted Tree”,“ Decision Tree” 和 “Linear Regression”。每种方法都采用不同的方法来分析数据,尽管我们这里不是在学习机器学习,但我还是想简要解释一下它们的作用。

  • Linear Regression 线性回归 是最容易理解的,因为它几乎完全是我们大脑的工作方式。它尝试通过将变量视为线性函数,如 applyAlgorithm(var1, var2, var3)的一部分来估计变量之间的关系。线性回归的目标是能够在所有数据点上绘制一条直线,其中直线与每个数据点之间的平均距离应尽可能小。
  • Decision Tree 决策树回归 让我们将信息以一系列选择的形式组织,以形成自然的树状结构。尝试想象这就像一个有 20 个问题的游戏:“你是人还是动物?如果你是一个人,你是活着还是死了?如果你还活着,那么你是年轻还是年老?” 依此类推,每次树会根据每个问题的答案而分支,直到最终有了明确的答案。
  • Boosted Tree 增强树回归 使用一系列决策树来工作,其中每棵树旨在纠正前一棵树中的任何错误。例如,第一棵决策树会尽最大的可能去寻找一个好的预测,但是误差有 20% 。然后,将其传递到第二棵决策树以进行进一步细化,重复该过程,但这一次,误差降至 10% 。进入到第三棵树,误差降低到 8% ,第四棵树,误差降低到 7% 。
  • Random Forest 随机森林模型和增强树相似,但略有不同:对于增强树,树中的每个决策都可以访问所有可用数据,而对于随机森林中的树,每棵树只能访问数据的一个子集。

这听起来可能很奇怪:你为什么要保留数据?好吧,想象一下,你正面临一个编码问题并试图提出一个解决方案。如果你要求某位同事提供想法,他将根据你所了解的知识为你提供一些想法。如果你要求另外的同事提供想法,这位同事又可能会根据他所知道的知识为你提供不同的想法。如果你向一百位同事征求想法,你将获得一系列解决方案。

每个同事的背景,教育程度和工作经历都与其他同事不同,因此你会得到一系列建议。但是,如果你将每个人的建议平均化(不管大多数人怎么说,不管他们是怎么做出决定的),那么你就很有机会获得正确的解决方案。

这正是随机森林回归的工作方式:每棵决策树都有自己的数据视图,这份数据视图与其他树的不同,将它们的所有预测结合在一起以得出平均值,你就很有可能获得良好的结果。

真希望有一个自动选项可以尝试自动选择最佳算法,它不一定总是正确的,实际上这种选项极大地限制了我们的选择范围。但是对于这个项目来说,已经足够了。

准备就绪后选择 Linear Regression 线性回归,点击窗口标题栏中的 “Train” 按钮。几秒钟后 —— 我们的数据很小!—— 你会看到一些结果指标。我们关心的值称为“均方根误差(Root Mean Square Error)”,你应该获得大约 180 的值。这意味着这个模型能够预测准确睡眠时间的误差仅为 180 秒。

更棒的是,你可以在右上角看到一个 MLModel 图标,上面写着 “Output” ,它的文件大小约为 500 字节。 Create ML 占用了 180KB 的数据,并将其压缩为 500 个字节 —— 几乎可以忽略。

我知道 500 个字节听起来很小,但是值得一提的是,几乎所有这些字节都是元数据:作者的名字就在其中,包括 “A machine learning model that has been trained for regression” 这段默认描述。它甚至对所有字段的名称都进行编码:wake,estimateSleep,coffee 和 actualSleep 。

数据部分占用的实际空间量 —— 即基于我们的三个变量来预测所需的睡眠量的算法 —— 远远低于 100 个字节。这是可能的,因为 Create ML 实际上并不关心值是什么,而只关心关系是什么。因此,它花费了数十亿个 CPU 周期,为每个特征尝试了权重的各种组合,以查看哪些特征组合产生的值与实际目标值最接近,并且一旦知道了最佳算法,便会简单地存储该算法。

SwitUI:用Create ML训练模型_第2张图片
Create ML 训练过程

现在我们的模型已经训练完毕,你可以把模型文件从 “Create ML” 拖到桌面,以便我们在代码中使用。

提示:如果你想再次尝试训练 —— 也许尝试使用其他可用的各种算法 —— 只要单击窗口右下角的 “Make A Copy ” 就可以创建副本。

译自Training a model with Create ML >

Previous: BetterRest 项目——使用日期 Hacking with iOS: SwiftUI Edition Next: BetterRest 项目

赏我一个赞吧~~~

你可能感兴趣的:(SwitUI:用Create ML训练模型)