当前位置: 首页 > 科技观察

从零基础开始用Swift学习数据科学

时间:2023-03-14 15:23:29 科技观察

概述Swift正在迅速成为数据科学中强大有效的语言之一Swift与Python非常相似,所以你会发现两种语言之间的转换非常顺利我们将涵盖Swift的基础知识,并学习如何使用该语言构建您的第一个数据科学模型。简介Python被广泛认为是数据科学领域最好、最有效的语言。近年来我遇到的大多数调查都将Python列为该领域的领导者。但事实是,数据科学是一个广阔且不断发展的领域。我们用来构建数据科学模型的语言将随之发展。还记得R何时成为流行语言吗?它很快就被Python超越了。去年,Julia语言也出现在数据科学领域。现在还有另一种语言正在蓬勃发展。是的,我说的是Swift语言。“我一直希望,当我开始学习一门新的语言时,会有一些新的想法打开我的思路,Swift永远不会让我失望。Swift易于解释、灵活、简洁、安全、易用、快速.大多数其他语言在这些方面都有很大的局限性。”-JeremyHoward当一种语言得到JeremyHoward的认可并且您开始在日常数据科学工作中使用它时,值得开始考虑该语言的优点。在本文中,我们将了解Swift作为一种编程语言,以及它如何融入数据科学领域。如果您是Python用户,您会注意到两者之间的细微差别和惊人的相似之处。这里也有很多代码,让我们开始吧!为什么选择Swift?Swift数据分析基础在Swift中使用Python库在Swift中使用TensorFlow构建基本模型Swift中数据科学的未来1.为什么选择Swift?限制。但现在我们正在接近Python的极限,而Swift有潜力填补这一空白。”-JeremyHoward最近,Swift作为一种数据科学语言引起了很多兴奋和关注。每个人都在谈论它。以下是您应该学习Swift的几个原因:Swift很快,非常接近C的速度At同时,它的语法非常简单易读,与Python非常相似:与Python相比,Swift是一种更高效、更稳定、更安全的编程语言,也是一门很好的移动语言。事实上,它是为iPhone开发iOS应用程序的官方语言。它对自动微分具有强大的集成支持,这使其成为为数不多的数值计算高级语言之一。它背后有谷歌、苹果、FastAI等。支持!这是JeremyHoward对Swift的评论视频:https://youtu.be/drSpCwDFwnM2。用于数据分析的Swift基础知识在我们深入了解使用Swift执行数据科学的细节之前,让我们简要介绍一下Swift编程语言知识的基础知识。2.1Swift的生态系统目前用于数据科学的Swift主要由两个生态系统组成:开源生态系统Apple生态系统开源生态系统是我们可以在任何操作系统或机器上下载并运行Swift的地方。我们可以使用非常酷的Swift库构建机器学习应用程序,例如SwiftforTensorFlow、SwiftAI和SwiftPlot。Swift还允许我们从Python无缝导入成熟的数据科学库,例如NumPy、pandas、matplotlib和scikit-learn。另一方面,Apple的生态系统本身就令人印象深刻。有一些有用的库,例如CoreML,可以让我们在Python中训练大型模型,并将它们直接导入到Swift中进行推理。此外,它还提供了大量预训练的高级模型,我们可以直接使用它们来构建iOS/macOS应用程序。还有其他有趣的库,如swift、coreml、transformer,它们允许我们在iPhone上运行最先进的文本生成模型,如GPT-2、BERT等。当您需要为Apple设备构建基于机器学习的应用程序时,还有许多其他库可以提供良好的功能。这两个生态系统之间存在一些差异。但最重要的是,要想使用Apple的生态系统,你需要有一台Apple机器,你只能为Apple设备开发,比如iOS、macOS等。现在你已经对Swift作为数据科学语言有了一个概述,让我们进入代码!2.2为Swift设置环境Swift可用于具有GPU和TPU版本的GoogleColab。我们将使用它,这样您就可以快速上手,而无需在安装过程中花费太多时间。您可以按照以下步骤打开一个快速激活的Colabnotebook:)点击“文件”并选择“在云端硬盘中保存副本”——这将在您自己的Google云端硬盘上保存一个新的Swift笔记本!准备开始编写Swift代码,这里是第一行:如果你想在自己的系统上使用Swift,那么这里有一些你可以点击的链接:如果你想在本地系统上安装Swift,你可以按照安装说明进行操作:https://swift.org/getting-started/#using-the-repl要在Ubuntu上安装JupyterNotebook,请参考JeremyHoward的Swift安装说明:https://forums.fast.ai/t/jeremys-harebrained-install-guide/43814在Ubuntu上,您还可以使用Docker安装Swift:https://github.com/apple/swift-docker现在,让我们在继续将其用于数据科学之前快速介绍一些基本的Swift功能。2.3打印功能这个相信你用过吧。它的工作方式与Python非常相似。只需调用print()并在括号内键入您想要打印的内容:2.4Swift中的变量Swift提供了两个用于创建变量的有用选项:let和var。let用于创建一个“常量”,其值为它不能在程序的任何地方更改。var与我们在Python中看到的变量非常相似——您可以在程序的任何时候更改存储在其中的值。让我们看一个例子看看区别。创建两个变量a和b:现在,尝试改变a和b的值:你会注意到b更新它的值没有错误,而a给出错误:这种创建常量和变量的能力非常有用,可以帮助我们防止代码中不可见的错误。正如您将在本文中进一步看到的那样,我们将使用let创建常量来存储重要信息并且不需要更改值,这里有一个技巧:使用var创建要用于某些中间的结果需要更改的计算。同样,使用let来存储训练数据或结果,这些基本上是您不想更改或乱用的值。此外,Swift有一个很酷的功能,你甚至可以使用表情符号作为变量名!这是因为Swift对Unicode的支持非常好,所以我们可以使用希腊字母来创建变量:2.5Swift数据类型Swift支持所有常见的数据类型整数、字符串、浮点数和双精度数等类型。我们可以赋值给任何变量,它的类型会被Swift自动检测:你也可以在创建变量时显式地写数据类型。这有助于防止程序中出现错误,因为如果类型不匹配。Swift会抛出一个错误:Candoaquiz。创建一个值为4且显式类型为“Float”的常量将导致错误。有一种简单的方法可以将变量的值包含在字符串中,方法是将变量括在括号中并在括号前写一个反斜杠()。例如:对于占多行的字符串,你可以使用三重双引号(""")。2.6列表和字典Swift支持列表和字典数据结构,就像Python一样(这是另一个比较!)这里不像Python,我们不不需要单独的语法,如字典的“{}”和列表的“[]”。让我们在Swift中创建一个列表和字典:我们可以通过在“[]”括号或元素中写入索引或键来访问列表字典(类似于Python):上面的代码会将“Jayne”和“PublicRelations”的键值对添加到字典中。如果打印上面的字典,输出如下:2.7使用循环循环是任何编程语言最重要的特性之一,Swift不会让你失望。它不仅支持所有传统的循环机制(for、while等),而且还实现了自己的一些变体。for..in循环是与Python非常相似,您可以在Swift中对列表或范围使用for循环:thre第一个示例中的点代表Swift中的“范围”。如果我们想在a到b的范围内做某事,我们会使用a...b文法。同样,如果我们不想要最后一个数字,我们可以将三个点改为“..<”,如“a..”。这里还有一点需要注意的是,与Python不同,Swift没有使用缩进的概念,而是使用花括号“{}”来表示代码层次。您可以以类似的方式在Swift中使用while和其他类型的循环。您可以在此处了解有关循环的更多信息:https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html。2.8条件(if-else)Swift支持条件语句,如if、if..else、if..else..if、嵌套if甚至switch语句(Python不支持)。if语句的语法非常简单:boolean_expression可以是任何比较,只有比较的结果或表达式的计算结果为真时,if块中编写的语句才会被执行。您可以在此处阅读其他条件语句:https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html。2.9函数Swift函数在语法上与Python中的函数非常相似。这里的主要区别是我们使用了func关键字而不是def,并且我们明确提到了参数的数据类型和函数的返回类型。一个基本函数如下:和条件语句一样,我们用花括号“{}”来表示属于这个函数的代码块。2.10用代码写注释写注释是好的代码最重要的方面之一。这适用于任何行业。这是您应该学习的最重要的编程技能!在您的代码中包含注释文本作为对自己的注释或提醒。Swift在编译时会忽略注释。单行注释以两个斜杠(//)开头:多行注释以一个正斜杠和一个星号(/*)开头,以一个星号和一个正斜杠(*/)结尾:现在您已经熟悉了抛开Swift的基础知识,让我们学习一个有趣的特性——在Swift中使用Python库!3.在Swift中使用Python库Swift支持与Python的互操作性。这意味着您可以从Swift导入有用的Python库,调用它们的函数,并在Swift和Python之间无缝切换。这赋予了Swift的数据科学生态系统不可思议的力量。该生态系统还很年轻,仍在发展中,您已经可以使用Numpy、pandas和Python的Matplotlib等成熟库来填补现有Swift产品的空白。为了在Swift中使用Python的模块,你可以直接导入Python并加载任何你想使用的库!这与您在Python中使用NumPy的方式非常相似,不是吗?你可以对其他包做同样的事情,比如matplotlib:你已经学到了很多关于Swift的知识。现在是构建您的第一个模型的时候了!4.使用TensorFlow在Swift中构建基础模型Swift4Tensorflow是Swift开源生态系统中最成熟的库之一。我们可以使用非常简单的类keras语法轻松构建机器学习和深度学习模型。它变得更加有趣!Swift4Tensorflow不仅仅是TensorFlow的Swift包装器,它是作为语言本身的一个特性开发的。人们普遍认为,在不久的将来它将成为该语言的核心部分。这意味着来自Apple的Swift团队和Google的Tensorflow团队的工程师将确保您可以在Swift中进行高性能机器学习。该库还为Swift添加了许多有用的功能,例如对自动微分的原生支持(这让我想起了PyTorch中的Autograd),使其与数值计算更加兼容。4.1关于数据集让我们了解一下我们将在本节中使用的问题陈述。如果你以前接触过深度学习领域,你可能对它很熟悉。我们将构建一个卷积神经网络(CNN)模型,使用MNIST数据集将图像分类为数字。该数据集包含60,000张训练图像和10,000张手写数字测试图像,可用于训练图像分类模型:该数据集是处理计算机视觉问题的相当常见的数据集,因此我不打算详细描述它。4.2启动项目在开始构建模型之前,我们需要下载数据集并对其进行预处理。为了您的方便,我创建了一个包含预处理代码和数据的GitHub存储库下载安装代码、下载数据集、导入必要的库:您的数据集现在将在Colab上下载。让我们加载数据集:4.3加载数据集4.4探索MNIST我们将从数据集中绘制一些图像以了解我们在做什么:这是我们的图像的样子:看起来很直观,对吧?第一个数字是手写的0,第二个数字是4。4.5定义模型的结构现在让我们定义模型的结构。我使用的是LeNet-5架构,这是一个非常基本的CNN模型,它使用2个卷积层、平均池化层和3个全连接层。最后一个全连接层的形状是10,因为我们有10个目标类,一个对应0到9的每个数字:您可能已经注意到代码看起来与Keras、PyTorch或TensorFlow等Python框架中的代码非常相似。编写代码的简单性是Swift最大的卖点之一。Swift4Tensorflow你可以在这里阅读更多相关信息:https://www.tensorflow.org/swift/api_docs/Structs4.6选择梯度下降作为优化器同样,我们需要一个优化器函数来训练我们的模型。我们将使用Swift4Tensorflow中可用的随机梯度下降(SGD):Swift4Tensorflow支持许多其他优化器。根据您的项目,您可以选择:AMSGradAdaDeltaAdaGradAdaMaxAdam参数RMSPropSGD4.7模型训练现在一切都已设置,让我们训练模型吧!上面的代码运行一个训练循环,将数据集示例提供给模型,以帮助它做出更好的预测。以下是我们的训练步骤:我们迭代每个时期。epoch是遍历整个数据集的次数。在epoch中,我们迭代训练数据集中的每个样本并获得其特征(x)和标签(y),这对下一步非常重要。使用示例的特征,我们进行预测并将其与真实标签进行比较。这用于计算模型的损失和梯度。这时候就用梯度下降法来更新模型中的变量。记录一些训练数据,方便以后查看。对每个时期重复步骤1到5。epochCount变量是遍历数据集集合的次数。你用了多少个epoch才能在测试集上达到90%以上的准确率?在12个时期内,我在训练集和测试集上的准确率都超过了97%。4.8可视化训练和测试数据虽然打印出模型的训练进度很有帮助,但查看可视化通常更有帮助。让我们可视化模型训练期间捕获的训练和测试统计数据。以下是训练过程中训练和测试准确度的演变:5.数据科学Swift的未来行业专家对Swift的反应令人难以置信,感觉它不仅有潜力成为数据科学的主流语言,而且还适用于在现实世界中构建基于机器学习的应用程序。目前,它还处于起步阶段,围绕数据科学和数值计算的图书馆仍在开发中。然而,它背后有强大的行业支持,我期待未来它会拥有丰富的工具和库生态系统(甚至可能比今天的Python更好)。以下是一些您可以进一步探索的Swift库:Nifty(演示):这是一个用于Swift编程语言的通用数值计算库。GithubSwiftplot:一个用于数据可视化的Swift库。GithubSwift的TensorFlow:是下一代机器学习平台。Github