TowardsDataScience 博客中文翻译 2021(七百一十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

无监督机器学习解释

原文:https://towardsdatascience.com/unsupervised-machine-learning-explained-1ccc5f20ca29?source=collection_archive---------18-----------------------

它是什么,方法和应用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jase Bloor 在 Unsplash 上拍摄的照片

当我们想要发现数据的底层结构时,无监督学习是一个很好的解决方案。与监督学习相比,我们不能将非监督方法应用于分类或回归类型的问题。这是因为无监督的 ML 算法从未标记的数据中学习模式,而我们需要知道输入-输出映射来执行分类或回归(在大多数情况下,我将在后面谈到这一点)。本质上,我们的无监督学习算法将发现数据中的隐藏模式或分组,而不需要人类(或任何人)标记数据或以任何其他方式干预。

接近无监督学习

当我们的数据未被标记时,这种学习方法通常被利用。例如,如果我们想要确定我们想要发布的新产品的目标市场是什么,我们将使用无监督学习,因为我们没有目标市场人口统计的历史数据。执行无监督学习时主要有三个任务(不分先后):1)聚类 2)关联规则 3)降维。让我们更深入地研究每一个。

聚类

从理论上讲,同一组中的实例将具有相似的属性和/或特征。聚类包括根据相似性和差异对未标记的数据进行分组,因此,当两个实例出现在不同的组中时,我们可以推断它们具有不同的属性和/或特征。

这种无监督学习的方法非常流行,并且可以进一步细分为不同类型的聚类,例如排他聚类、重叠聚类、层次聚类和概率聚类——这些方法的细节超出了本文的范围。一种流行的聚类算法是 K 均值聚类

关联规则规则

关联规则学习是一种基于规则的机器学习方法,用于发现给定数据集中变量之间的有趣关系。该方法的目的是使用感兴趣的度量来识别在数据中发现的强规则。这些方法通常用于市场购物篮分析,使公司能够更好地了解各种产品之间的关系。有许多不同的算法用于关联规则学习,但最广泛使用的是 Apriori 算法

降维 降维

无监督学习的另一种形式是降维。这是指将数据从高维空间转换到低维空间,使得低维空间保留原始数据的含义属性。我们降低数据维度的一个原因是为了简化建模问题,因为更多的输入特征会使建模任务更具挑战性。这就是所谓的 维度诅咒 。我们这样做的另一个原因是为了可视化我们的数据,因为可视化超过 3 维的数据是困难的。

在机器学习工作流程的的数据预处理或解释性数据分析(EDA)阶段,通常会采用降维技术。流行的算法有主成分分析奇异值分解自动编码器

无监督学习的应用

当我们谈论机器学习时,很容易看出监督学习在商业中的位置,但在无监督学习中就不那么容易了。一个原因可能是,无监督学习自然会引入更高的不准确结果风险,因为没有什么可以衡量算法得出的结果——企业可能不愿意承担这种风险。

尽管如此,它仍然为查看数据提供了一个很好的探索途径,使企业能够发现数据中的模式,比他们手动观察数据要快。

无监督学习在现实世界中的常见应用包括:

  • 新闻分段:众所周知,谷歌新闻利用无监督学习对来自不同新闻媒体的基于同一故事的文章进行分类。例如,足球(为我在大西洋彼岸困惑的朋友准备的足球)转会窗口的结果都可以归类到足球下。
  • 计算机视觉:物体识别等视觉感知任务利用无监督学习。
  • **异常检测:**无监督学习用于识别偏离数据集正常行为的数据点、事件和/或观察值。
  • 客户角色:可以使用无监督学习创建有趣的买家角色档案。这有助于企业了解客户的共同特征和购买习惯,从而使企业能够更好地调整产品。
  • 推荐引擎:过去的购买行为与无监督学习相结合,可以帮助企业发现数据趋势,从而制定有效的交叉销售策略。

最后的想法

无监督学习是发现未标记数据的潜在模式的好方法。这些方法通常对分类和回归问题毫无用处,但我们可以使用无监督学习和监督学习的混合方法。这种方法被称为半监督学习——我将在另一篇文章中更深入地讨论这一点。

感谢阅读!

如果你喜欢这篇文章,请通过订阅我的免费**每周简讯与我联系。不要错过我写的关于人工智能、数据科学和自由职业的帖子。**

相关文章

** https://medium.com/geekculture/how-to-get-paid-to-learn-data-science-machine-learning-37c9088ab925 **

人脑分布式区域的无监督表示学习(下)

原文:https://towardsdatascience.com/unsupervised-representation-learning-on-distributed-regions-in-the-human-brain-part-iv-55fecf4e1b6f?source=collection_archive---------27-----------------------

无监督学习和人脑的交集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

腹侧颞叶皮层感兴趣区域的潜在空间(图片由作者提供)

这是该系列的第四篇文章,即“腹侧颞叶皮层时空功能磁共振成像的认知计算模型”。如果你想了解整个系列,请点击下面的链接。

我将介绍人脑中分布式区域上的无监督表示学习的主题及其在大脑解码研究中的用例。让我们开始吧。

所有相关资料都放在我的 GitHub 页面上。别忘了去看看。如果你是一个纸质爱好者,你可以阅读这一系列文章的纸质版,也可以在我的回购中找到。

https://github.com/cankocagil/Cognitive-Computational-Modelling-for-Spatio-Temporal-fMRI-in-Ventral-Temporal-Cortex

无监督的&人脑中的流形学习

F 如果考虑用标准成像参数采集的所有体素或表面坐标,功能性 MRI 数据是非常高维的。在我们的数据集中,4D 时间序列图像数据的结构,我们有一个维数曲线的问题。因此,降维和流形学习算法可以通过在较低的空间表示中保持测地线关系来降低 fMRI 空间的维度。我们使用主成分分析、线性判别分析、独立分量分析、NNMF 和 MDS 作为降维算法。此外,t- SNE,UMAP,ISOMAP,LLE 和频谱嵌入执行生成低维流形的功能磁共振成像空间。让我们开始发现无监督学习和人类大脑的交集。我执行了许多无监督学习算法,因为它进一步帮助理解人类大脑下面的测地线信息,并给出关于分布式区域中的神经活动是否可解码的先验信息。

让我们安装并导入所有必需的包。请参考以前的文章(第一部分)了解数据集。请注意,本文不是为了回答以下问题(这些问题之前已经回答过了)

  • fMRI 数据是如何构成的?(第一部分)
  • 为什么对人脑进行时空掩蔽?(第二部分)

下面是安装我们需要的所有东西的 pip 命令。

我们安装了所有需要的东西(甚至更多)。下面我们来导入一下。

我们准备好了!让我们获取哈克斯比数据集。

接下来的事情是准备,屏蔽,标准化和转换 fMRI 数据为 NumPy 矩阵形式如下。

预处理部分完成。因此,我们可以转到我们想要执行的实际流程。在这个代码片段中,“masks”是人脑中被屏蔽的区域,我们希望对其执行认知任务,类别只是它们的标签。我们不使用整体体素进行表示学习。我们的主要想法是提取和可视化人类大脑中的潜在变量,其中神经活动的分布和重叠模式正在发生。

最后,我们可以开始实际的业务如下。在下图中,不同的颜色代表不同的类别。(即蓝色属于第 1 类,橙色属于第 2 类,等等。)

为了恰当地可视化潜在空间,我使用了 plotly python 包。以下代码以交互方式执行 2D 和 3D 可视化。

降维:主成分分析

PCA 是一种线性无监督降维算法,它计算主向量来改变表示的基础[26]。PCA 是在从图像压缩到文本去相关的广泛主题中使用的算法。这里,我们对受试者 5 的 RoI 进行了 PCA,并将其可视化如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人类大脑掩蔽区域的主成分分析(图片由作者提供)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人类大脑掩蔽区域的主成分分析(图片由作者提供)

降维:LDA

LDA 是一种监督降维算法,它是 Fisher 线性判别式的推广,旨在找到表征原始数据空间的线性子空间。因为它是受监督的,所以它是表征学习中一个强有力的范例。这里,我们对受试者 5 的 RoI 执行 LDA 并将其可视化。从图中,我们可以看到,通过独特地分离流形中的测地线距离,LDA 优于其他方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LDA 研究人类大脑中的掩蔽区域(图片由作者提供)

降维:ICA

ICA 是一种计算方法,用于将多变量信号分离成它们的加性分量。这是无监督降维的自然范例。这里,我们对受试者 5 的 RoI 进行 ICA,并将其可视化如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人类大脑中掩蔽区域的 ICA(图片由作者提供)

降维:NNMF

NNMF 是一种迭代的非负因子分析,将一个非负矩阵分解成它的线性子空间。这对于提取原始数据样本的自然线性子空间是有用的。在这里,我们对受试者 5 的 RoI 进行了 NNMF,并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NNMF 论人类大脑中的掩蔽区域(图片由作者提供)

流形学习:MDS

MDS 是通过保持流形中的测地线距离来提取原始数据空间的非线性子空间的经典方法。获得较低维度的嵌入来表示流形中的原始数据。在这里,我们对受试者 5 的 RoI 进行了 MDS,并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MDS 论人类大脑中的掩蔽区域(图片由作者提供)

流形学习:t-SNE

T-SNE 是一种迭代统计方法,用于通过保留小的成对距离或局部相似性来产生原始数据空间的非线性嵌入。它最小化了低维嵌入和高维数据的联合概率之间的 Kullback-Leibler 散度。在这里,我们对受试者 5 的 RoI 进行了 t-SNE 检查并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

t-SNE 研究人类大脑中的掩蔽区域(图片由作者提供)

流形学习:UMAP

UMAP 是非线性嵌入的最近方法,并且它通常以显著的优势胜过 t-SNE。它与 t-SNE 非常相似,但也保留了数据的全局测地线结构。在这里,我们对受试者 5 的 RoI 进行了 UMAP,并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UMAP 论人类大脑中的掩蔽区域(图片由作者提供)

流形学习:ISOMAP

ISOMAP 映射也是一种通过等距映射的非线性嵌入算法,用于通过保持流形中的测地线距离来精确估计流形的内在几何形状。这里,我们对受试者 5 的 RoI 执行了 ISOMAP,并对其进行了可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人脑掩蔽区域的 ISOMAP(图片由作者提供)

流形学习:LLE

LLE 是一种保持拓扑的非线性降维算法,试图保持流形中的邻居结构,并且它通常在优化和速度方面优于 ISOMAP,因此它在文献中具有非常实际的用途。在这里,我们对受试者 5 的 RoI 进行了 LLE,并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LLE 论人类大脑中的掩蔽区域(图片由作者提供)

流形学习:光谱嵌入

频谱嵌入也是一种非线性嵌入算法,它形成一个亲和矩阵并将频谱分解应用于拉普拉斯图。这里,我们对受试者 5 的 RoI 进行了光谱嵌入,并将其可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人脑掩蔽区域的光谱嵌入(图片由作者提供)

本文到此为止。我们涵盖了人脑中分布式区域的无监督表示学习及其在大脑解码研究中的用例。恭喜你!您已经完成了第四篇文章,并通过认知计算方法对人脑解码迈出了一步。

在下一篇文章中,我们将执行从经典 ML 算法到神经网络的全面解码算法。

文章链接

  1. 发表文章

https://cankocagil.medium.com/introduction-to-cognitive-computational-modelling-of-human-brain-part-i-90c61e0e24c9

https://cankocagil.medium.com/discovery-neuroimaging-analysis-part-ii-b2cdbdc6e6c3

https://cankocagil.medium.com/functional-connectivity-and-similarity-analysis-of-human-brain-part-iii-c427c88ca5bb

https://cankocagil.medium.com/unsupervised-representation-learning-on-distributed-regions-in-the-human-brain-part-iv-55fecf4e1b6f

2.在路上(即将到来…)

  1. 第五部分的占位符

进一步阅读

  • https://www.hindawi.com/journals/cmmm/2012/961257/

我在机器学习和神经科学方面的研究中使用了以下参考文献列表。我强烈建议复制粘贴参考资料,并简要回顾一下。

参考

[1]巴、基罗斯和辛顿。图层归一化,2016。

[2] L. Buitinck,G. Louppe,M. Blondel,F. Pedregosa,A. Mueller,O. Grisel,V. Niculae,P. Prettenhofer,A. Gramfort,J. Grobler,R. Layton,J. VanderPlas,a .乔利,B. Holt,10 和 G. Varoquaux。机器学习软件的 API 设计:scikit-learn 项目的经验。在 ECML PKDD 研讨会:数据挖掘和机器学习的语言,第 108–122 页,2013。

[3]褚,田,王,张,任,魏,夏,沈。双胞胎:重新审视《视觉变形金刚》中空间注意力的设计,2021。

[4] K .克拉默、o .德克、j .凯舍特、s .沙莱夫-施瓦茨和 y .辛格。在线被动攻击算法。2006.

[5] K. J .弗里斯顿。统计参数映射。1994.

[6]格罗斯、罗查-米兰达和本德。猕猴下颞皮质神经元的视觉特性。神经生理学杂志,35(1):96–111,1972。

[7] S. J .汉森、t .松坂和 J. V .哈克斯比。用于物体识别的腹侧颞叶组合编码。

[8]哈克斯比、戈比尼、富里、伊沙伊、斯豪滕和彼得里尼。《视觉物体识别》,2018。

[9]赫克曼、哈伊纳尔、贾巴尔、吕克特和哈默斯。结合标记传播和决策融合的自动解剖脑 mri 分割。神经影像,33(1):115–126,2006。

10d .亨德里克斯和 k .金佩尔。高斯误差线性单位(gelus),2020。

[11]黄少华,邵文伟,王明林,张德庆.人脑活动视觉信息的功能解码:简要综述。国际自动化和计算杂志,第 1-15 页,2021。

[12] R. Koster、M. J. Chadwick、Y. Chen、D. Berron、A. Banino、E. Duzel、D. Hassabis 和 D. Kumaran。海马系统内的大循环复发支持跨发作的信息整合。神经元,99(6):1342–1354,2018。

[13]马奥尔。勾股定理:4000 年的历史。普林斯顿大学出版社,2019。

[14] K. A. Norman、S. M. Polyn、G. J. Detre 和 J. V. Haxby 超越读心术:功能磁共振成像数据的多体素模式分析。认知科学趋势,10(9):424–430,2006。

[15]奥图尔、江、阿卜迪和哈克斯比。腹侧颞叶皮层中物体和面孔的部分分布表征。认知神经科学杂志,17(4):580–590,2005。

[16] F .佩德雷戈萨、g .瓦洛夸、a .格拉姆福特、v .米歇尔、b .蒂里翁、o .格里塞尔、m .布隆德尔、p .普雷登霍弗、r .魏斯、v .杜伯格、j .范德普拉斯、a .帕索斯、d .库尔纳波、m .布鲁彻、m .佩罗特和 e .杜切斯内。sci kit-learn:Python 中的机器学习。机器学习研究杂志,12:2825–2830,2011。

17 r . a .波尔德拉克。功能磁共振成像的感兴趣区域分析。社会认知和情感神经科学,2(1):67–70,2007。

[18] M. Poustchi-Amin、S. A. Mirowitz、J. J. Brown、R. C. McKinstry 和 T. Li。回波平面成像的原理和应用:普通放射科医师回顾。放射学,21(3):767–779,2001。

[19] R. P. Reddy,A. R. Mathulla 和 J. Rajeswaran。心理健康专家的观点采择和情绪传染的初步研究:移情的玻璃脑观点。印度心理医学杂志,0253717620973380,2021 页。

[20]史密斯、米勒、萨利米-科尔希迪、韦伯斯特、贝克曼、尼科尔斯、拉姆齐和伍尔利奇。功能磁共振成像的网络建模方法。神经影像,54(2):875–891,2011。

21 田中先生。下颞叶皮层和物体视觉。神经科学年度评论,19(1):109–139,1996。

[22] M. S .特雷德。Mvpa-light:一个多维数据的分类和回归工具箱。神经科学前沿,14:289,2020。

[23] M. P .范登赫维尔和 H. E .波尔。探索大脑网络:静息态功能磁共振成像功能连接综述。欧洲神经精神药理学,20(8):519–534,2010。

[24] G. Varoquaux,A. Gramfort,J. B. Poline 和 B. Thirion。大脑协方差选择:使用群体先验的更好的个体功能连接模型。arXiv 预印本 arXiv:1008.5071,2010。

[25] Y. Wang,J. Kang,P. B. Kemmer 和 Y. Guo。一种利用偏相关估计大规模脑网络功能连接的有效可靠的统计方法。神经科学前沿,10:123,2016。

26s . Wold、K. Esbensen 和 P. Geladi。主成分分析。化学计量学和智能实验室系统,2(1–3):37–52,1987。

27s . Wold、K. Esbensen 和 P. Geladi。主成分分析。化学计量学和智能实验室系统,2(1–3):37–52,1987。

基于 Lbl2Vec 的无监督文本分类

原文:https://towardsdatascience.com/unsupervised-text-classification-with-lbl2vec-6c5e040354de?source=collection_archive---------0-----------------------

对无标签文本文档的基于嵌入的分类的介绍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

帕特里克·托马索Unsplash 上拍摄的照片。

本帖基于我们的论文“LBL 2 vec:一种基于嵌入的预定义主题无监督文档检索方法(2021)”。你可以在那里读到更多的细节。

文本分类的任务是给一个句子或文档分配一个合适的类别。类别取决于所选数据集,可以涵盖任意主题。因此,文本分类器可用于组织、构建和分类任何类型的文本。

常见的方法使用监督学习来分类文本。尤其是近年来基于 BERT 的语言模型取得了非常好的文本分类效果。这些传统的文本分类方法通常需要大量的标注训练数据。然而,在实践中,用于训练最先进的分类算法的带注释的文本数据集通常是不可用的。数据的标注通常涉及大量的人工工作和高昂的费用。因此,无监督的方法提供了对未标记数据集运行低成本文本分类的机会。最近,无监督文本分类也被称为零镜头文本分类。在本文中,你将学习如何使用LBL 2 vec来执行无监督的文本分类。

Lbl2Vec 是如何工作的?

Lbl2Vec 是一种用于无监督文档分类和无监督文档检索的算法。它自动生成联合嵌入的标签、文档和词向量,并返回由手动预定义的关键字建模的类别的文档。该算法的核心思想是许多语义相似的关键词可以代表一个类别。在第一步中,该算法创建文档和单词向量的联合嵌入。一旦文档和单词被嵌入到共享向量空间中,该算法的目标是从先前手动定义的表示类别的关键词中学习标签向量。最后,该算法可以基于文档向量与标签向量的相似性来预测文档与类别的从属关系。在高层次上,该算法执行以下步骤来分类未标记的文本:

1.对每个感兴趣的类别使用手动定义的关键字

首先,我们必须定义关键字来描述每个感兴趣的分类类别。这个过程需要一定程度的领域知识来定义描述分类类别并且在分类类别中彼此语义相似的关键词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同运动分类类别的关键词示例。图片作者。

2.创建联合嵌入的文档和单词向量

嵌入向量是允许我们在多维空间中表示单词或文本文档的向量。嵌入向量背后的思想是相似的单词或文本文档将具有相似的向量。 - 阿莫尔

因此,在创建共同嵌入的向量之后,文档被定位成靠近其他相似的文档并且靠近最有区别的单词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

联合嵌入的单词和文档向量。图片作者。

一旦我们有了一组单词和文档向量,我们就可以进入下一步。

3.找到与每个分类类别的关键字向量相似的文档向量

现在我们可以计算文档和每个类别的手动定义的关键字之间的余弦相似度。与类别关键词相似的文档被分配给相应类别的一组候选文档。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分类类别关键字及其各自的候选文档集。每种颜色代表不同的分类类别。图片作者。

4.清除每个分类类别的异常文档

该算法使用 LOF 从每组候选文档中清除离群文档,这些文档可能与一些描述性关键字相关,但不完全匹配预期的分类类别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红色文档是从候选文档集中移除的离群值。图片作者。

5.计算异常值清除文档向量的质心,作为每个分类类别的标签向量

为了得到分类类别的嵌入表示,我们计算标签向量。稍后,将使用文档与标签向量的相似度来对文本文档进行分类。每个标签向量由一个类别的异常清除文档向量的质心组成。该算法计算文档而不是关键词质心,因为实验表明仅基于与关键词的相似性来分类文档更加困难,即使它们共享相同的向量空间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签向量,计算为各个清除的候选文档向量的质心。点代表各个主题的标签向量。图片作者。

6.文本文档分类

该算法为数据集中的每个标签向量和文档向量计算标签向量< - >文档向量相似度。最后,文本文档被归类为具有最高标签向量< - >文档向量相似度的类别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集中所有文档的分类结果。点表示分类类别的标签向量。文档颜色代表其预测的分类类别。图片作者。

Lbl2Vec 教程

在本教程中,我们将使用 Lbl2Vec 对来自 20 个新闻组数据集的文本文档进行分类。它是大约 20,000 个文本文档的集合,平均分布在 20 个不同的新闻组类别中。在本教程中,我们将重点关注由类别“rec.motorcycles”、“rec.sport.baseball”、“rec.sport.hockey”和“sci.crypt”组成的 20 个新闻组数据集的子集。此外,我们将为每个分类类别使用已经预定义的关键字。预定义的关键字可以从这里下载。还可以在 GitHub 上访问更多 Lbl2Vec 示例

安装 Lbl2Vec

我们可以使用 pip 和以下命令安装 Lbl2Vec:

pip install lbl2vec

读取数据

我们将下载的“20newsgroups_keywords.csv”文件存储在与 Python 脚本相同的目录中。然后我们读取带有熊猫的 CSV,并从 Scikit-learn 获取 20 个新闻组数据集。

预处理数据

为了训练 Lbl2Vec 模型,我们需要对数据进行预处理。首先,我们处理用作 Lbl2Vec 输入的关键字。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到,关键字描述了每个分类类别,关键字的数量可能会有所不同。

此外,我们还需要对新闻文章进行预处理。因此,我们对每个文档进行单词标记化,并添加gensim . models . doc 2 vec . tagged document标签。Lbl2Vec 需要标记化和标签化的文档作为训练输入格式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以在数据框中看到文章文本及其分类类别。“tagged_docs”列包含作为 Lbl2Vec 输入所需的预处理文档。“class_name”列中的分类类别仅用于评估,而不用于 Lbl2Vec 培训。

培训 Lbl2Vec

准备好数据后,我们现在可以在训练数据集上训练 Lbl2Vec 模型。我们用以下参数初始化模型:

  • keywords_list :列表的可重复列表,包含每个类别的描述性关键字。
  • tagged _ documents:gensim . models . doc 2 vec . tagged document 元素的可迭代列表。每个元素由一个文档组成。
  • label_names :每个标签自定义名称的可重复列表。同一主题的标签名称和关键字必须具有相同的索引。
  • similarity_threshold :只有与各个描述关键词的相似度高于该阈值的文档才用于计算标签嵌入。
  • min_num_docs :用于计算标签嵌入的最小文档数。
  • 纪元:语料库的迭代次数。

文本文档的分类

在模型被训练之后,我们可以预测用于训练 Lbl2Vec 模型的文档的类别。

[Out]: F1 Score: 0.9054393305439331

我们的模型可以预测正确的文档类别,得分相当可观,为 F1≈0.91 。这是在培训期间甚至不需要看到文档标签的情况下实现的。

此外,我们还可以预测未用于训练 Lbl2Vec 模型并因此对其完全未知的文档的分类类别。为此,我们从以前未使用的测试数据集中预测文档的类别。

[Out]: F1 Score: 0.889937106918239

我们训练的 Lbl2Vec 模型甚至可以预测新文档的分类类别,得分为 F1≈0.89 。如前所述,这是通过完全无监督的方法实现的,其中在训练期间不使用标签信息。

关于 Lbl2Vec 可用特性的更多细节,请查看 Lbl2Vec GitHub 库。我希望这篇教程对你有用。

摘要

Lbl2Vec 是最近开发的一种方法,可用于无监督的文本文档分类。与其他最先进的方法不同,它在训练期间不需要标签信息,因此提供了对无标签数据集运行低成本文本分类的机会。开源的 Lbl2Vec 库也非常容易使用,允许开发人员只需几行代码就可以训练模型。

来源

  1. 绍普夫,t。Braun d .和 Matthes f .(2021)。 Lbl2Vec:基于嵌入的预定义主题无监督文档检索方法,(2021),第 17 届网络信息系统与技术国际会议论文集
  2. https://github.com/sebischair/Lbl2Vec

具有 BERT 嵌入的会议的无监督主题分割(摘要)

原文:https://towardsdatascience.com/unsupervised-topic-segmentation-of-meetings-with-bert-embeddings-summary-46e1b7369755?source=collection_archive---------9-----------------------

NLP 研究论文演练

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改后的图片来自 来源

在这篇博客中,我试着根据我的理解总结了 使用 BERT 嵌入的会议无监督主题分割 这篇论文。请随时评论你的想法!

问题陈述

在过去的几年里,各种在线会议工具的使用突然激增,比如 Zoom、Google Meet、Microsoft Teams 等。几乎所有的时间你都会因为这样或那样的原因记录这些会议,但是因为它们的原始形式和某人操纵会议中讨论的要点所需要的痛苦,它们真的被再次看到或提及吗?我想不会。受这个问题的启发,脸书的研究人员提出了一种无监督的方法,使用预先训练的 BERT 嵌入将会议分割成主题

会议背景下的主题分割是预测多人会议记录中主题边界的任务。作者在无人监督的情况下特别针对这项任务,因为大规模手动注释这些会议很难。

方法建议

假设我们有一份会议记录 M ,其中有 U 个总话语数和 T 个总话题边界数需要我们识别。这里 T 个话题中的每一个都是用 U 个连续的话语集合来表示的,姑且称之为可以用 U(i)到 U(i+z)来表示的块。这里, z 是块中考虑的连续话语的计数。现在以 M 和 U 作为输入,任务是预测长度为 U 的布尔向量,其中 0 表示话语 U(i)包含在正在进行的主题中,1 表示话语 U(i)是正在进行的主题的主题转移。

如前所述,作者利用 BERT 嵌入来获得会议片段的语义表示。他们为此测试了两种技术,其中一种是 max-pooled 预训练 RoBERTa 在架构中倒数第二层的嵌入。第二个是句子-BERT 模型(BERT 使用暹罗网络在 SNLI 数据集上训练)。

在此之后,他们将整个会议语料库分成大小为 z 的多个块,并通过对话语嵌入分层执行最大池操作来获得每个块的嵌入表示。在获得块表示之后,它们计算对话中相邻块表示之间的角距离。最后,基于某个阈值,他们给话语分配 0 或 1 值。

下图直观地说明了这一点—

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提议方法的插图|作者提供的图片

我的想法

我觉得这确实是一项有趣、实用、同时又具有挑战性的任务。所提出的方法看起来很有希望,尽管在下一次迭代中,有趣的是看到围绕发言者的身份、会议的主题、专业领域地名词典等添加额外的特征将如何影响当前的分数。此外,观察使用非上下文嵌入时的分数变化也是值得尝试的。下一步可以尝试的一件更有趣的事情是提出一种自动标记这些主题的技术。

如果你愿意,你也可以 看看我写的其他研究论文摘要

随意看论文,对作者说“ Hi ”,感谢他们的贡献。此外,如果你喜欢看视频而不是文字(就像我:D 一样),一定要看看——

多看此类研究论文演练

论文标题:具有 BERT 嵌入的会议无监督主题分割

论文:【https://arxiv.org/pdf/2106.12978.pdf】T2

作者 : 亚历山德罗·索尔比亚蒂凯文·赫夫南圣乔治·达玛斯基诺什瓦尼·波德达尔舒巴姆·莫迪雅克·卡利

我希望你喜欢读这篇文章。如果你愿意支持我成为一名作家,可以考虑注册成为一名媒体成员。每月只需 5 美元,你就可以无限制地使用 Medium。谢谢!

揭示新加坡 2021 年预算与以往预算趋势的差异

原文:https://towardsdatascience.com/unveiling-insights-from-singapores-budget-2021-with-data-science-596c0c67c752?source=collection_archive---------43-----------------------

R 中基于文本的分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:石民·德( Unsplash

每年 2 月左右,我们的财政部长都会公布新加坡的财政预算。但预算报告通常相当冗长,长达 40-50 页。

此外,如果我们想研究过去的趋势如何演变,以了解政府的立场,我们可能必须手动阅读过去的预算报表,这是非常耗时的。

使用 R 和少量基于文本的分析,我们可以:(1)有效地获得 2021 年预算中的主要主题,以及(2)快速地与过去预算报表中的先前趋势进行比较,以研究政府的立场是否发生了变化。

具体而言,通过将《2021 年预算》与以前的预算进行比较,可以揭示政府在各种主题上的立场,如亲商、进步、气候变化和数字化工作。

这篇文章是上一篇文章的延伸,在这篇文章中,我通过查看新加坡过去 19 年(2002 年至 2020 年)的预算报表,分析了新加坡是否真的正在变成一个支持国家。

我将重复使用与以前相同的工作流程,做一些小的调整。

好了,让我们从代码开始吧!

数据

这项分析的第一步将是从财政部的网站下载最新的《2021 年预算》报表,并将其添加到我们过去的预算报表集合中。

我把它们保存为。txt 文件,因为它们以后会更容易处理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

以下是我们需要的库:

**# Libraries**library(tidyverse)
library(tidytext)
library(readtext)
library(scales)
library(wordcloud)

现在我们将 R 中的工作目录设置为上面的文件夹,并读入。我们 20 个预算报表的 txt 文件:

**# Call the files from working directory into R**list_of_files <- list.files(path=".", recursive = TRUE, pattern="\\.txt$",full.names=TRUE)data <- lapply(list_of_files, readtext)
data1 <- do.call(rbind, data)

接下来,我们将句子分解成单个单词,并删除停用词,例如 thea 。最后,我们计算每个单词的频率。

**# Unnest tokens**dtm <- data1 %>%
  unnest_tokens(word, text)**# Clean the dtm, remove stopwords**dtm_clean <- dtm %>%
  anti_join(get_stopwords())**# Get the words frequency**words <- dtm_clean %>%
  group_by(doc_id) %>%
  count(word, sort=TRUE)

粗略检查后,似乎有必要进行二次手动清洁。txt 文件似乎包含许多奇特的符号。

**# Secondary "manual" cleaning of the words data frame**droptext <- c(letters, 0:2021, "â", "ï", "page", "ii", "iii", "iv", "can", "also", "å", "ä", "ç", "æ", "è", "çš", "kg", "é", "year", "years", "must", "annex")**# Drop the words with 1-2 characters only**words1 <- words %>%
  mutate(
    numchar=nchar(word)
  ) %>%
  filter(!word %in% droptext,
         !numchar %in% c(1,2))

在第二次手工清理之后,我们在数据框中添加一个“年”列,并按升序对预算报表进行排序:

**# Create a new column in words1 which is the year column**words2 <- words1 %>%
  mutate(year= as.numeric(str_match(doc_id, "\\d{4}")))**# Sort by year**words3 <- words2[order(words2$year),]

2021 年预算的主题

现在基础工作已经完成,我们可以开始提取见解了!

使用单词云有助于快速了解 2021 年预算的主要主题:

**# Word Cloud**wcloud <- words3 %>% filter(year == 2021)dev.new(width=1000, height=1000, unit="px")
wordcloud(words=wcloud$word, freq=wcloud$n, scale=c(3,0.2),
          min.freq=2, max.words=80, random.order=FALSE,
          rot.per=0.1, colors=brewer.pal(8, "Dark2"))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

一眼望去,Covid、就业、工人和企业占据了中心舞台,其次是数字化、技能升级和气候变化等主题。

这些主题也与亚洲新闻频道报道的《2021 年预算》标题一致。

【2021 年预算与以往预算趋势对比

《2021 年预算》与之前各种主题的预算相比如何,如亲商、进步、气候变化和行业转型努力?

危机期间的亲商立场?

有趣的是,我发现在经济不稳定时期,提及“商业相关”词汇的次数,如企业、商业、雇主、公司,往往高于提及“工人相关”词汇的次数,如工人雇员

我们可以将“业务相关”单词和“工人相关”单词汇总如下:

**# Business/Worker ratio****# Create vector of "Business-related" & "Worker-related" words** selectedwords <- c("worker","workers","employer","employers",
                   "business","businesses","employee","employees",
                   "enterprise","enterprises","company","companies")words4 <- words3 %>%
  group_by(word) %>%
  filter(word %in% selectedwords) %>%
  select(year, word, n)**# Classify words into "Business" or "Worker" group** words4 <- words4 %>%
  mutate(
    status = ifelse(word %in% c("employer", "employers", "business",
                                "businesses", "enterprise",
                                "enterprises", "company",
                                "companies"), 
                                "Businesses", "Workers")
  )words4 <- words4 %>%
  group_by(year, status) %>%
  summarise(n=sum(n)) %>%
  spread(status,n)**# Rescale Businesses and Workers to a similar scale** words4$Businesses <- rescale(words4$Businesses, to=c(50,100))
words4$Workers <- rescale(words4$Workers, to=c(50,100))**# Create a ratio score: Businesses/Workers** words4 <- words4 %>%
  mutate(
    ratio = round(`Businesses`/`Workers`,2)
  )

现在,我们可以使用 Loughran 词典创建一个不确定性得分,这对于分析带有金融术语的文本非常有用。

**# Use the Loughran lexicon to get Uncertainty score**
senti_dfloughran <- dtm_clean %>%
  group_by(doc_id) %>%
  inner_join(get_sentiments("loughran")) %>%
  count(sentiment) %>%
  spread(sentiment, n, fill=0)**# Add year column to senti_dfloughran to compare across time**
senti_dfloughran <- senti_dfloughran %>%
  mutate(year=as.numeric(str_match(doc_id, "\\d{4}"))) %>%
  filter(year >= 2002)**# Rescale uncertainty score to match the Business/Worker scale**
senti_rescale <- senti_dfloughran %>%
  select(year,uncertainty)senti_rescale$uncertainty <- rescale(senti_rescale$uncertainty,
                                     to=c(50,100))**# Correlation between uncertainty score & the Business/Worker ratio**
cor(words4$ratio, senti_rescale$uncertainty) 
**#0.865**

在下面的图表中,我将每年预算报表的不确定性得分与企业员工比率进行了比较,企业员工比率是通过将“企业相关”词语的总频率除以“员工相关”词语的总频率获得的。

在给定的一年中,企业与员工的比率为 2 意味着“与企业相关”的词汇提及次数是“与员工相关”的两倍。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:业务人员比率乘以 100,以便更好地与不确定性得分进行比较。

不确定性得分和企业与员工比率之间的相关性为 0.865,这意味着它们表现出强烈的协同运动。

虽然我们观察到在经济不稳定时期,企业与工人的比率似乎有上升的趋势,但这并不意味着政府优先考虑企业而不是工人。

通常,政府的危机管理策略包括为企业支付商业和工资成本,确保足够的信贷额度,同时提供一些家庭支持。

总体想法是首先让企业保持运转,进而避免危机期间大范围的裁员和失业。

新加坡越来越进步了吗?

如果我们观察“福利相关”词汇的使用趋势,如支持、帮助、提供、补贴,并将它们与衡量收入不平等的基尼系数进行比较,我们确实发现了一种反比关系。

**# Create a vector of "Welfare-related" words**
selectedwords <- c("support","help","provide","give","subsidy",
                   "subsidies")words5 <- words3 %>%
  group_by(word) %>%
  filter(word %in% selectedwords) %>%
  select(year, word, n)words5 <- words5 %>%
  group_by(year) %>%
  summarise(n=sum(n))**# Plot the trend of "Welfare-related" words** 
words5 %>% ggplot(aes(x=year,y=n))+geom_line()+geom_point()+
  xlab("")+ylab("")+
  theme_bw()+
  labs(title="Trend of Welfare-related words", 
       subtitle = "2002-2021")+
  scale_x_continuous(breaks=seq(2001,2021, by=4))+
  annotate("rect", xmin = 2015, xmax = 2021, ymin = 40, ymax = 300,
           alpha = .1,fill = "blue")+
  scale_y_continuous(expand=c(0,0))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:蓝色阴影部分表示财政部长(2015 年至今)的任期

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:基尼系数数据来自新加坡统计局(Ref Id: 12307,经合组织标度)

随着“福利相关”词语的使用增加,基尼系数逐年下降,这意味着收入不平等正在缩小,这可能是额外的支持措施和货币转移的结果。

“福利相关”词汇的使用在 2015 年左右达到高峰,此后一直保持在相当高的水平,这与 DPM Heng 担任新加坡财政部长的时间相吻合。

与此同时,基尼系数继续呈下降趋势。转移支付后的基尼系数在 2020 年大幅下降,这是因为向家庭发放了大量补贴和凭证以应对新冠肺炎。

气候变化是一种生存威胁吗?

如果我们看看“气候变化相关”词汇的使用趋势,如气候、可持续发展环境,很可能政府在 2017 年左右开始认识到气候变化的严重性。

**# Environment & climate change****# Create vector of "climate change-related" words**
selectedwords <- c("green", "sustainable", "sustainability",
                   "environment", "climate")words6 <- words3 %>%
  group_by(word) %>%
  filter(word %in% selectedwords) %>%
  select(year, word, n)words6 <- words6 %>%
  group_by(year) %>%
  summarise(n=sum(n))**# Plot the trend of "climate change-related" words** 
words6 %>% ggplot(aes(x=year,y=n))+geom_line()+geom_point()+
  xlab("")+ylab("")+
  theme_bw()+
  labs(title="Trend of Climate Change-related words", 
       subtitle = "2002-2021")+
  scale_x_continuous(breaks=seq(2001,2021, by=4))+
  annotate("rect", xmin = 2015, xmax = 2021, ymin = 0, ymax = 120,
           alpha = .1,fill = "blue")+
  scale_y_continuous(expand=c(0,0))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:蓝色阴影部分表示财政部长(2015 年至今)的任期

我个人认为,自 2017 年以来,推动可持续发展的紧迫性增加了,这令人鼓舞。

政府今年还公布了“绿色计划 2030”,这将加快电动汽车和绿色债券融资的采用,因为新加坡寻求将自己定位为绿色中心。

新冠肺炎是否阻碍了政府对数字化的关注?

自 2010 年以来,供应委员会建议新加坡应优先考虑生产力,将其作为未来 GDP 增长的关键驱动力,进而减少对进口外国劳动力的依赖。

要实现生产率增长,公司必须采用数字化,工人必须提高技能。

从“数字化相关”词汇的使用趋势来看,如技能提升、创新、变革、技能未来,这似乎是政府持续关注的焦点,并在 2015-2016 年左右有所增加。

**# Create vector of "digitalisation-related" words**
selectedwords <-c("skills","upgrade","upgrading","digital",
                  "digitalisation","restructure","restructuring",
                  "transform","transformation","upskill",
                  "upskilling","innovate","innovation",
                  "skillsfuture")words7 <- words3 %>%
  group_by(word) %>%
  filter(word %in% selectedwords) %>%
  select(year, word, n)words7 <- words7 %>%
  group_by(year) %>%
  summarise(n=sum(n))# **Plot the trend of "digitalisation-related" words** 
words7 %>% ggplot(aes(x=year,y=n))+geom_line()+geom_point()+
  xlab("")+ylab("")+
  theme_bw()+
  labs(title="Trend of Digitalisation-related words", 
       subtitle = "2002-2021")+
  scale_x_continuous(breaks=seq(2001,2021, by=4))+
  annotate("rect", xmin = 2015, xmax = 2021, ymin = 0, ymax = 200,
           alpha = .1,fill = "blue")+
  scale_y_continuous(expand=c(0,0))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:总生产率(每实际工作小时的增加值);新加坡统计局(引用 Id: 16098)

2015-2016 年的激增很可能是由于全国技能未来计划的推出,该计划为工人提供信用以提升他们的技能。

技能未来计划今天仍然有效,是政府旨在提高我们缓慢的生产率增长数字的众多政策之一。

结论

在这篇文章中,我们应用基于文本的分析来研究新加坡的 2021 年预算,以及以前预算报表中的趋势,而不必手动阅读每份文件的 40-50 页。

通过单词 cloud,我们可以很快确定 2021 年预算中的关键主题与 Covid、就业、工人和企业有关,其次是数字化、技能升级和气候变化的主题。

从不确定性得分的下降可以看出,《2021 年预算》显示了谨慎的乐观。虽然这仍然是一个旨在支持工人和企业的扩张性预算,但重点已经慢慢开始从仅仅提供紧急财政援助转向为新冠肺炎后的增长重新定位经济。

结合过去的预算报表,我们还可以看到,进步、气候变化和数字化等主题仍然是政府前进的关键优先事项。

非常感谢您的阅读!

升级和重建主机

原文:https://towardsdatascience.com/upgrading-and-rebuilding-the-host-6dd4efb347d2?source=collection_archive---------27-----------------------

从零开始逐个任务地进行数据科学

在我最后一次通宵黑客攻击后,事情进展得很快

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

丹尼·米勒Unsplash 上的照片

如果你开车并经历过左前爆胎,我可以很舒服地说,我知道你看到 Denny MüllerUnsplash 上发布的照片时的感受。在我的驾驶生涯中,我有过两次危险的井喷。有一次,在进入一个急转弯时,我的轮胎爆裂了,失去了控制,那真是太可怕了。最近,在另一个急转弯时,我撞到了一块岩石,粉碎了我的左前轮。一次完全不可思议且令人心痛的经历。当我说 “在我的日志文件中找不到支持 Cuda 的设备” 对我来说是一次同样痛苦和令人沮丧的经历,而且不像爆胎那样容易修复,也许你不一定同意。

如果你一直在阅读我的文章,你会从我的上一篇文章中知道我熬了一个通宵——在 Ubuntu 20.4 LTS 上配置 GPU 库。在我的数据科学机器上配置了 TensorFlow GPU 和 OpenCV 4.0,这很难抑制我纯粹的兴奋。不过,我并不那么有信心,就像那些瘪了的轮胎一样,事情可能而且经常会出错。从字面上看,我期望整件事都破裂, 果然如此。

依附神赢得了另一场战斗。让我们讨论一下发生了什么,以及我是如何解决的。这次我感觉更舒服了,但只有时间会证明一切。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由哈桑·阿尔马西Unsplash 上拍摄

发生了什么

我所知道的和表面上的事实如下。12 月 31 日,我安装了 TensorFlow 2.0 GPU,用 Cuda 库编译了 OpenCV。我还安装了 Virtual Box,并用一些 Ubuntu 和 Windows VM 做了一些工作。2021 年 1 月的第一周,一切都很好。由于一切都运行良好,我创建了一个 FastApi 端点并包装了我的 Yolo 类,为我提供了一个我可以使用的端点。我对这个设置很满意。使用 Curl 或 Postman,我可以向端点发送一张照片,并取回在 JSON 中检测到的对象。API 的响应时间非常好。我的下一步是集成 webhook 和来自 Motion Eye 设备的调用,使我走向实时触发和警报。我取得了这么大的进步,这看起来很疯狂。

我有一些专业的东西需要我 120%的注意力,但我记得 Ubuntu 上的一些更新,我选择在我的构建中实现它们。这似乎是一个错误的举动!更新后,我用我的鸟类检测相机,想知道 Yolo 是否会正确检测和分类当地的鸟类。所以我对我的 FastAPI 端点进行了 API 调用,并发出了第一张图片。在 Postman 中,我收到了来自端点的错误消息。查看日志, 我发现了“没有找到支持 Cuda 的 GPU”错误 。不管你是否同意我的比喻,我感觉我的心脏像被刀捅了一刀。这似乎是我人生旅途中的又一次爆胎。在某种程度上,我对配置和功能的损失感到难过。对于开发机器来说,这可能过于戏剧化了,但是对于生产主机来说,这个错误可能会很麻烦。

然而,不仅仅是我的深度学习工具链被破坏了! 虚拟框也开始给我报错 。所以我也不能使用我的虚拟机,这也很痛苦。我做过一些 OSINT ( 开源智能 )配置,也很享受这段旅程。

在这一点上,我不得不接受一些教训,让我来分享这些,这样你就可以反思你自己的实践。

我学到了什么?

对我来说,最大的问题是我不得不接受我熬夜的方式可能导致了我的问题。

第一件事是我已经在我的 Ubuntu 20.04 系统中添加了 Ubuntu 18.04 库。更糟糕的是,我甚至可能将更老的库添加回 16.04。我认为这真的是一个可怕的想法。在发出 sudo add-apt 之前,考虑对系统的影响可能是明智的。

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt update

接下来,一些二进制文件中出现了错误和差异。Virtual Box 6 在从主机到客户或客户到主机的复制和粘贴方面存在一些问题。为了解决这个问题,我安装了 Virtual Box 5,但是我在系统上的 APT 库中混合了一些库。

对我来说,最大的教训是那句古老的格言— “如果它没坏,就不要修理它!” 这适用于在没有做任何研究的情况下接受可能不必要的更新或升级。那才是真正的杀手。

最后一个教训是,我们不能盲目地从教程中复制粘贴命令,从一个教程跳到另一个教程,直到有东西可以用为止!搜索谷歌并执行命令希望修复只会导致一个不稳定的系统和最终的 “没有找到支持 Cuda 的设备”。

我遇到的一些困难的根本原因似乎是 未签名的二进制文件,Ubuntu 要求所有二进制文件都要签名 。所以我猜是安装了一个安全更新,引发了旧版本的一些问题。

好吧,你可以说,我也听得见,这些东西很复杂,必须加载许多依赖项。这当然不容易,事情可能会出错。我是怎么修好的?嗯,我是通过 有条不紊的细心得到的! 那是底线。让我解释一下!我是怎么修好的

我是怎么修好的

解决我的问题包括几件不同的事情。首先,我必须接受教训,让自己适应用不同的方式做事。然后是一段时间的反思和对主机硬件的回顾。最后确定方向,执行计划,回到正轨。让我用简短的总结来解释这些步骤。

反映在主机上并定义所需的硬件

我的 Linux 数据科学工作站最初是为我女儿建造的游戏平台。它是专门为 最大性能 下玩模拟人生 4 而配置制作的。回想起来,我觉得那是大约 6 年前的事了。当我购买组件时,我的预算有限,所以我添加了一个当时已经被取代的 GPU。我得出的结论是,硬件需要检查和更新。

现在,你可能会说并认为这种升级是可以避免的。毕竟,我在 GTX 750TI 上编译了 CUDA Open CV DNN 模块,我对出错前我的端点的响应时间很满意。事实是我也有编译错误。考虑用 Cuda 构建 OpenCV 的 cmake 命令。

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
***-D CUDA_ARCH_BIN=7.0 \***
-D WITH_CUBLAS=1 \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D HAVE_opencv_python3=ON \
-D PYTHON_EXECUTABLE=~/.virtualenvs/opencv_cuda/bin/python \
-D BUILD_EXAMPLES=ON ..

特别是 CUDA_ARCH_BIN=7.0,就是麻烦的那一行。同样,您不能只是复制粘贴并执行这个 cmake 命令。在我的系统上,CUDA_ARCH_BIN = 5.0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

摘自 Nivida 的《GPU、CUDA 库和计算能力指南》

尽管如此,用 CUDA_ARCH_BIN = 5.0 编译 Cuda 10,OpenCV 4 只是产生了 Cuda 编译错误。于是我尝试了 Cuda 9,用 CUDA_ARCH_BIN = 5.0 打开 CV 3。然后我得到一条错误消息,告诉我 5.0 不是允许的值,需要 CUDA_ARCH_BIN > 5.3。所以你知道这一切将走向何方。 我很难解释甚至回忆起我有多少次擦系统,安装了一个全新的 Ubuntu 安装,调用了 CMake,安装了 TensorFlow GPU。TensorFlow 有很好的记录,并不是真正的问题;相反,我努力编译 OpenCV 来获得我的 CV2 Python 与 Cuda 的绑定。最后,我决定是时候换一个新的显卡了。

我目前的 GPU 是 GTX 750Ti,根据英伟达的说法,这是“第一代英伟达 Maxwell 架构”。如果您愿意,可以在 NVIDIA 产品网站上找到完整的规格。最新的 GPU 架构是 Ampere——NVIDIA 的第二代 RTX 架构,在 NVIDIA 的产品特定页面 *有很好的描述。*现在,从第一代 Maxwell 转向第二代 RTX 将需要一大笔钱,这也将是痛苦的。痛苦在于,需要用许多啤酒代币来换取另一个 GPU,而这些卡供应有限,在新冠肺炎全球疫情期间不可能在爱尔兰买到。

云计算与内部部署

我们都会抓住的另一个论点是 IBM、Google、Oracle、AWS 和 Microsoft 上可用的 GPU 实例。我们应该租用 GPU 实例,而不是购买、安装和配置本地工作站。这个问题永远不会有直截了当的答案。这将归结为项目,可用的预算,安全和隐私的要求。

将我的前门系统连接到公共云,我会感到不舒服。想想这篇文章“几十个人说他们在家里的智能摄像头被黑后受到了死亡威胁、种族诽谤和勒索。”来自守护者

考虑运行一项服务所需的系统数量至关重要。这些是:

  • 生产实例;
  • 预生产、试运行或用户测试环境;
  • 集成测试代码的开发环境;
  • 面向个人工程师的开发机器

当我们从环境数量的角度来看这种情况时,使用基于云的服务的价值就变得更加明显了。当我们谈论一个个人工作站来做实验、设计服务和写书或写论文时,云并没有多大意义。我在 AWS 上有基于 GPU 的虚拟机,但偶尔我会收到巨额账单,因为我忘了关闭开发机器。

考虑到所有的事情,我决定购买一张新卡,并安装在我现有的系统中。我很了解云的论点,但我也知道事情可能会很快失控。

制定计划

做出购买新卡的决定后,我开始寻找我能得到的东西。这里的新冠肺炎疫情比以往任何时候都更糟糕,此外,我们还受到英国退出欧盟的影响。经过一番寻找,我设法得到了一个 Quadro P2000 交付。对我来说,Quadro P2000 产品描述包含了一些要点。它拥有一个“ Pascal GPU,拥有 1024 个 CUDA 内核,超大 5 GB GDDR5 板载内存“ ,来自 Nvidia 产品页面。

从第一代 Maxwell 架构转移到 Pascal 框架允许我从 计算能力 5.0 跳到 6.1。对我来说,就所涉及的金钱而言,这似乎是合理的。有了新设备,剩下的就是安装卡并让它工作! 执行计划老兄!

执行计划

由于工作站是我自己建造的,所以我很容易就能打开盖子,接触到机器的内部。移除几个螺丝让我可以将 GPU 从插槽中取出。请不要忘记, 主板有一个锁紧机构 ,在插卡之前必须打开。否则,你会弄坏东西的!安装卡、更换外壳和连接外围设备非常简单。我没有把我的显示器直接插入 GPU 卡,因为我的 CPU 芯片上也有一个 GPU。在训练深度神经网络时,最好移除屏幕工作负载,甚至直接启动到终端。使用带有 UI 的计算机对 GPU 来说是一个很大的工作量,会降低速度。 你不能一边看《网飞》,一边你的深度神经网络在同一台机器上训练!

我决定最好清除硬盘,安装 Ubuntu 18.04 作为新的安装程序,重新进行配置。环顾四周,阅读 NVIDIA CUDA 文档,显示对 Ubuntu 20.04 的参考相对较少,所以我认为我应该继续使用 18.04。

为了配置tensor flow 2.0我使用了以下教程

https://www.pyimagesearch.com/2019/12/09/how-to-install-tensorflow-2-0-on-ubuntu/

为了配置 OpenCV DNN 和 Cuda 我使用了这个教程

https://www.pyimagesearch.com/2020/02/03/how-to-use-opencvs-dnn-module-with-nvidia-gpus-cuda-and-cudnn/

对于虚拟盒子,我使用的是版本 6.0.24,如下所示,但我已经得到了 关于更新版本 的通知。抵抗 不是徒劳的! 忽略它!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者显示“关于虚拟框”对话框的图像

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者展示虚拟盒子升级通知的图片。

双向复制和粘贴功能 不工作 ,但我已经决定生活没有这些。在我的新 Ubuntu 系统上安装 Virtual Box 5.0 失败。

这次 我没有添加任何新的库 。没有 sudo apt-add!但是我已经从 Ubuntu 18.04 得到了两个“系统问题”的报告。我又一次担心这个新版本会很快遇到问题。

靶心——一切又恢复了。OMG!我的 Yolo 课程终于又开始工作了,这是多么美妙的一刻啊。 '模块不是用 CUDA 编译的!'再也没有了! 下面你可以看到一段处理要使用的设备的代码。

coprocessor = {
'***cuda***': {
 'backend' : cv2.dnn.DNN_BACKEND_CUDA,
 'target' : cv2.dnn.DNN_TARGET_CUDA
},
'***cpu***': {
 'backend': cv2.dnn.DNN_BACKEND_DEFAULT,
 'target': cv2.dnn.DNN_TARGET_CPU
},
'***myriad***': {
 'backend' : cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE,
 'target' : cv2.dnn.DNN_TARGET_MYRIAD
}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由安妮·尼加德Unsplash 拍摄

随着系统的工作,但很明显,操作系统级的问题存在,我可以再次考虑前进。

走向

要回到我原来的位置,还有很多工作要做。 Nginx 必须安装, Gunicorn,FastAPI ,我需要重新做 我的 OSINT 虚拟机 。但这是个好日子!我的 GPU 升级了,性能也提高了。当然,我安装可视代码是我做的第一件事!为了说明新的性能,我进行了一些测试。

from myYoloC import myYolo
my = myYolo(device='cuda')
a = my.run()
myY = myYolo(device='cpu')
a = myY.run()

之前我创建了一个名为 myYolo 的类,在上面的代码中,我简单地用两个不同的设备创建了该对象的一个实例。示例“my”是用 Cuda 后端和分配给 CPU 的“myY”模型制作的。五个代码 行简直可以击垮我的精神, 但是我必须勇敢的去执行它们。关于可视代码,我非常喜欢的一个特性是虚拟环境支持。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者展示可用 Python 环境的图片

我的 opencv_cuda 环境包含了用 cuda 编译的 OpenCV 4.0 版本。我的“dl4cv”虚拟环境具有 TensorFlow GPU 配置。这与 pyimagesearch.com 的指导是一致的。

选择正确的环境允许我运行代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码执行后作者从可视代码中获取的图像

因此,从磁盘加载 Yolo,并向前传递 192 张照片,拍摄了 7.57 秒的*,平均每张照片花费了*0.039 秒。这是新 GPU 的出色表现。在 CPU 上花费了 44.75 秒,平均每张图片 0.23 秒。这也不错,但是用户不会喜欢这样的延迟。围绕 CPU 和 GPU 信令,当然还有两个代码片段中的模块加载,大约有 7 秒钟的构造和解构造任务。**

当我在 GTX 750TI 上运行同样的代码时,我得到了不同的答案。这毕竟是第一代麦克斯韦和帕斯卡,所以如果答案是一样的,我会感到惊讶。正如下面的截图,从我的上一篇文章中可以看出,Maxwell 的 GPU 平均值为 .13,而 Pascal 的 GPU 平均值为. 04。那大约是 时间 的 1/3。太神奇了!同样的工作 在老款 GPU 上需要 31 秒,而在新卡 上只需要 14 秒。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由作者基于前一篇文章。

无论我们安装什么样的 GPU,基于 CPU 的处理都不会改变。我没有在 Linux 机器上安装 OpenVino,所以我不知道 Intel Myriad 设备会怎样。在 Raspberry Pi 板上,我们知道 Myriad 很快。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传****外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由前一篇文章的作者提供

从上面的图片中,右上方显示了基于 CPU 的 ARM 处理器,配备了 Raspberry Pi 4 8GB——这项工作花费了32 分钟,一切都变得很紧张。在 Myriad 上,左上 同样的工作量用了 3 分钟 。我猜这些统计数据证明了为什么使用 Pascal 架构对我如此有吸引力。装备更好的 Linux 工作站可以在 14 秒内用 192 幅图像进行正向传递神经网络推理。这些事实都让我非常兴奋,继续我的任务,使用 Yolo、计算机视觉和廉价的基于 Raspberry Pi 的运动检测器来计数经过的车辆。

蛋糕上的糖衣也许可以用 TensorFlow 来演示

**import tensorflow as tf
print(tf.__version__)
print(tf.test.is_gpu_available())**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 is_gpu_available()的结果作者提供

is_gpu_available() = True

是不是很神奇?有一种轮胎被修理过的感觉。我车上所有的轮子都是对的,我在开阔的道路上行驶。尽情享受吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 KAUE FONSECAUnsplash 上拍摄

作为数据科学领域的职业成年人的技能提升

原文:https://towardsdatascience.com/upskill-as-a-working-adult-in-the-data-science-field-c51da3d07006?source=collection_archive---------20-----------------------

我在一个月内完成了 6 门在线课程,以下是我的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

如果你是数据科学从业者或与数据科学团队密切合作,你会意识到总是需要继续提升工作任务或有趣的副业项目的技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

数据科学领域非常广泛,各行业不断推出新的平台/包。数据科学领域的任何职位都需要继续保持和掌握新技能。取决于任务的紧急程度,学习-应用-遇到障碍的循环可能会加快。

9 月,我开始担任数据科学主管的新职务。这从一整套不同的挑战开始,例如处理几 TB 的数据、可视化这些数据的趋势以及管理利益相关者的期望。

随着向新角色的转变,我利用这个机会提升了自己应对新挑战所需的一些基本技能,并在一个月内完成了 6 门课程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

现在,任何订阅过在线课程的人都知道,完成整个课程并不是一帆风顺的。一个 4 小时的课程不需要花 3 个小时来完成。将它乘以 3 倍的可能性更大,或者它可能永远不会完成,因为大多数人中途停下来,让它无人照管。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

这里有一些关于如何完成在线课程以及如何在这个过程中最大化学习的有价值的提示。

内容

  • 看一眼终点线
  • 设定雄心勃勃的目标
  • 每天一口的大小

看一眼终点线

激励我们参加在线课程的一件事是知道在终点线等待我们的是什么水果。

我强烈建议在订阅课程后立即执行这一步骤。成为流氓,直接滚动到最后几章,看看高级话题是什么样子的。

现在,回想一下,所有通向大结局的章节都是完成一个相对更复杂的任务的基础。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

肯·苏亚雷斯在 Unsplash 上的照片

这将培养我们作为学习者理解较小模块的毅力,并有助于将我们推向终点线。

设定雄心勃勃的目标

在成年人的工作生活中,参加在线课程不再仅仅是为了通过考试。我们也可能没有人在背后给我们施压,要求我们完成一门课程。这有时会导致我们一旦认为我们学得足够多,甚至更糟,失去兴趣,就放弃了。

为了克服这一点,在开始时设定一个雄心勃勃的最终目标可以提供完成课程的动力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由谢恩Unsplash 上拍摄

目标是不同的,通常对学习者来说是个人的,促使他/她首先学习一门课程。然而,我们的目标不应该是一个唾手可得的果实,而是一个令人兴奋的、当我们想到它时会让我们夜不能寐的果实。

供参考的一些目标:

  • 通过添加认证来提升专业形象
  • 提高完成经理分配的任务的能力
  • 构建有趣的辅助项目

每天一口的大小

CourseraLinked in LearningUdemy 等学习平台上选修任何一门课程,你会发现这门课程被精心制作成了一个个小章节。每个单元持续时间为 3 至 10 分钟。这是有意在合理的时间内吸引学习者的注意力。

我发现致力于学习在线课程的一个有效策略是利用平台的功能。目标是在更短的时间内完成更小的里程碑。对我来说,这意味着每天坚持几个小节。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

或者,可以在 LinkedIn Learning 上设定每周目标。这很好地让我们保持在正轨上,如果我们比计划晚了,可以在周末进行冲刺。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

订阅一门课程并不仅仅是为了走完这段旅程并完成它。对于数据科学从业者来说尤其如此。这里的目标是最大限度地学习特定主题,并将其应用于我们面临的棘手问题。

学习,弄脏你的手,创造出令人敬畏的产品。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

下次见!

成为最受欢迎的数据科学家

原文:https://towardsdatascience.com/upskill-to-be-a-most-sought-after-data-scientist-bde9f3bc32d7?source=collection_archive---------21-----------------------

成为成功的数据科学家的全面技能列表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 迈克尔·布隆维斯特 发自 派克斯

随着技术的发展,保持行业领先地位所需的技能也在发展。过去几年来,成为一名数据科学家一直是许多人的梦想。不用说,这是一份高收入的工作。你们中的一些人可能是数据科学家,其他人可能会在这个领域寻找职位。在这篇简短的文章中,我将列出现代数据科学家的技术技能要求。如果你是一名在职的数据科学家,你将拥有其中一些技能,但是,你可能需要在许多新的领域提高技能。如果你是一个初学者,这个全面的列表将帮助你规划成为一名数据科学家的职业生涯。

我先说最本质的技巧。

编程语言的选择

任何机器学习项目,像任何其他软件项目一样,都需要选择合适的编程语言。没有一个软件开发者会想到用 Fortran 做商业应用;同样,您永远不会在科学应用程序中使用 COBOL。也就是说,每种编程语言在设计时都有特定的目的。

我不需要解释,但是 Python 是大多数 ML 开发的选择。如果你调查一下招聘信息,你会注意到 Python、SQL 和 R 可能是最热门的。我会推荐 Python。如果你是一个经验丰富的开发者,考虑一下 Julia 的高性能。

这里最重要的问题是,你需要了解 Python 到什么深度?初学者可能会惊讶地发现,每一个机器学习代码都只有几行——不到 100 到 200 行。框架代码在所有 ML 应用程序中保持不变。这是完整的骨架代码(算法):

  • 数据清理
  • 数据预处理
  • 探索性数据分析
  • 特征工程
  • 创建培训、测试和验证数据集
  • 选择 ML 算法
  • 培养
  • 评估模型的性能

训练后,如果您对模型对看不见的数据的推断感到满意,您可以将模型移动到生产服务器。

上述培训和测试代码在所有 ML 项目中保持不变;改变的只是 ML 算法。尽管如此,根据您的数据类型和您试图解决的问题,每个步骤都会有所不同。然而,顶层视图在所有项目中保持不变。我希望你说到点子上了。对于编写这种模型训练代码,您不需要掌握很深的 Python 技能。我很少在我的 ML 项目中使用 Python 的面向对象和函数式编程。

与其他编程语言形成对比。如果不使用这些高级特性,您将永远无法开发出高性能的软件应用程序。在 ML 中,什么是高性能?即使模特训练需要额外的时间,我也没意见。对我来说,重要的是结果,也就是模型的准确性。第二,通过使用函数式和面向对象的代码,我会让见习开发人员更难读懂。因此,我总是坚持简单的基本代码,即使是新手也能很容易理解。

你甚至可以为 400+ ML 算法找到现成的模板。使用这样的服务将会剥夺你写一个框架代码的工作。

接下来的技巧是机器学习库的选择。

机器学习库

scikit-learn 是许多 ML 开发者的选择。scikit-learn 为预测建模和分析提供了大量工具。需要用熊猫,NumPy,Matplotlib/Seaborn 来补充 sklearn。NumPy 和 Pandas 是创建机器可理解的数据集、要素/目标选择和创建数据集所必需的。Matplotlib 和 Seaborn 将协助 EDA。

任何 ML 项目中最大的挑战是选择一个合适的算法,最终给你看不见的数据最好的预测。下面是帮助你选择最佳算法的 AutoML。

AutoML

对于算法选择,请使用 AutoML。AutoML 是一个工具,它可以将几个 ML 算法应用到您的数据集,并按照性能准确性的升序对它们进行排序。使用 AutoML,您不需要开发那些核心数据科学家的专业知识。在学习过程中节省了很多——你只需要学习各种算法背后的概念以及它们解决了什么问题。

即使是 ML 的初学者也可以学习使用这些工具来帮助选择最佳性能的模型及其所有微调的超参数。有一个巨大的清单,自动和超参数调整库。我已经生成了一个完整的列表供您快速参考。

AutoML 库/工具:

AutosklearnTPOTAutokerasMLBoxautoglonautowekaH2OAutoMLautoPyTorch亚马逊 LexDataRobotTransmogrifAIAzur

这一领域值得研究的新成员是 BlobCity AutoAI 。我想提到的最有趣的特性是,它泄露了生成模型的项目源,数据科学家可以声称这是他自己的创造。已编辑—2022 年 1 月 17 日

超参数调节库/工具:

OptunahyperptScikit-optimizeRay tunerandomsearccvGridSearchCV微软 NNI

我不想为你背书或推荐一个。你可以自己尝试一下。在 ML 开发中,算法选择和微调超参数是最艰巨的任务,而这些工具的使用使这变得很容易。

接下来是统计建模和人工神经网络之间的选择。

经典 ML 和 ANN 之间的选择

在这里,我可以向你推荐我之前发表在 Medium 上的文章现代数据科学家的建模方法,或者你可以观看 YouTube 上关于 @blobcity 频道的演示,它讲述了数据科学家在建模中采用的方法。

如果你更喜欢神经网络而不是经典的 ML,开发者的首选是 TensorFlow。它不仅仅是一个人工神经网络开发库,而是一个完整的平台,允许您创建数据管道,使用分布式培训来减少培训时间,根据您拥有的资源使用 CPU/GPU/TPU,允许在本地服务器、云甚至边缘设备上部署。出于您的善意考虑,我可能会让您参考我的以了解更多细节,其中也包含 25 个以上基于 ANN 的真实项目。

另一个流行的 ANN 开发工具是 PyTorch。

迁移学习

训练 DNN 需要巨大的计算资源,数周的训练时间,以及数百万张图像或数兆字节文本数据的数据集。许多科技巨头创造了几个 DNN 模型来解决某一类问题。这些公司创造的模式,在这个世界上没有人能做到。

这里有一个全面的列表供您快速参考。

图像分类 : ImageNet,CIFAR,MNIST

计算机视觉的 CNN 模型 : VGG19,Inceptionv3 (GoogLeNet),ResNet50,EfficientNet

NLP 机型 : OpenAI 的 GPT-3,Google 的 BERT,微软的 CodeBERT,ELMo,XLNet,Google 的 ALBERT,ULMFiT,脸书的 RoBERTa

幸运的是,这些公司已经公开了这些模型。作为一名数据科学家,您可以原样重用这些模型,或者扩展它们以满足您的业务需求。我们称之为迁移学习。他们为特定的目的训练每个模型。你只需要在将他们的学习转移到你的模型之前理解它。

现在出现了一个重大的变化,它将改变我们多年来开发模型的方式。

动态模式

到目前为止,我们一直在静态数据上开发 ML 模型。在今天的疫情情况下,你认为这些大约 2 年前根据静态数据训练的模型会帮助你预测你的客户访问模式和他们新的购买趋势吗?您需要根据新数据重新训练模型。这意味着所有基于静态数据开发的模型都必须定期重新训练。这需要消耗资源、时间和精力。这需要额外的成本。

于是就出现了动态建模的概念。您可以根据流数据不断地重新训练模型。您在流中收集的单位时间内的数据点数量将决定窗口大小。解决方案现在可以归结为时间序列分析。动态建模的主要优势之一是您可以使用有限的资源进行模型训练。在静态建模的情况下,它们需要您在内存中加载大量的数据点,这也会导致很长的训练时间。

开发流数据模型需要额外的技能。看看 PySpark。您需要将一些 web 框架应用到您的模型中。请注意,您会持续训练模型,并使用它进行即时实时预测。web 框架应该能够产生快速响应。

在我的下一篇文章中,我将更深入地讨论动态模型。

颠覆性创新来了。

MLaaS

最后,我必须提到 MLaaS,它可能会取代数据科学家。亚马逊、谷歌、IBM 和微软等科技巨头提供完整的机器学习服务。

你只需要把你的数据上传到服务器上。他们做全部的数据预处理、模型建立、评估等等。最后,他们只是给你一个模型,可以直接移植到他们的产品服务器上。尽管这对数据科学家来说是一种威胁,但我仍然建议数据科学家应该习惯这些新技术,并为其所有者提供快速解决方案。毕竟,让老板满意有助于你保住工作。

摘要

我已经为您提供了在当前数据科学状态下成为顶尖数据科学家所需技能的全面观点。随着技术的进步,你不需要掌握每一项技能。比如到目前为止设计的统计 ML 算法就有几百种。您现在可以使用像 AutoML 这样的工具来为您的业务用例选择一个性能最好的。甚至就编程语言而言,你已经看到,要成为一名 ML 开发人员,你并不需要成为 it 专家。

人工神经网络的成功揭开了 ML 发展的新篇章。有几件事现在被过分简化了。创建数据管道、自动特征选择、无监督学习和在万亿字节数据上训练网络的能力只是 ANN 技术的几个优点。作为一名数据科学家,您需要获得这些技能,如果您目前还没有这样做的话。使用 DNN 和预先训练的模型进一步简化了数据科学家的工作。

另一个出现的重要需求,可能是因为当前的流行病,是需要开发动态模型。作为一名数据科学家,他们现在要求你开发流数据模型。开发高频数据的动态模型是当前研究的主题。

最后,你可以选择 MLaaS 作为快速解决方案。

祝你好运,努力成为最受欢迎的数据科学家。

你可能会喜欢在 YouTube 上观看我的演讲。

信用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

城市健康第 2 部分:预测发展中国家的粮食不安全

原文:https://towardsdatascience.com/urban-health-part-2-predicting-food-insecurity-in-developing-countries-8cf39e15ecec?source=collection_archive---------41-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由nguyễnUnsplash 上拍摄

这个故事是我的城市健康教程的第二部分。在这个故事中,我们将使用各种机器学习技术预测发展中国家的粮食不安全状况。你可以在这里找到第一部分:https://towards data science . com/healthy-cities-in-the-us-part-1-food-62b 9724467 E8

工具和数据

该数据集是通过收集 28 个国家的食品数据创建的,包含以下变量:

'Dietary_Adj', 'Food_Production', 'Dietary_Supply', 'Cereal_Supply',
       'Average protein supply (g/cap/day) (3-year average)',
       'Average supply of protein of animal origin (g/cap/day) (3-year average)',
       'GDP', 'Prevalence of undernourishment (percent) (3-year average)',
       'Number of people undernourished (million) (3-year average)',
       'Severe_Food_Insec', 'Mod_Sev_Inad',
       'Number of severely food insecure people (million) (3-year average)',
       'Number of moderately or severely food insecure people (million) (3-year average)',
       'Cereal import dependency ratio (percent) (3-year average)',
       'Percent of arable land equipped for irrigation (percent) (3-year average)',
       'Value of food imports in total merchandise exports (percent) (3-year average)',
       'Political stability and absence of violence/terrorism (index)',
       'Per capita food production variability (constant 2004-2006 thousand int$ per capita)',
       'Per capita food supply variability (kcal/cap/day)',
       'Percentage of population using at least basic drinking water services (percent)',
       'Percentage of population using at least basic sanitation services (percent)',
       'Percentage of children under 5 years affected by wasting (percent)',
       'Percentage of children under 5 years of age who are stunted (percent)',
       'Percentage of children under 5 years of age who are overweight (percent)',
       'Prevalence of obesity in the adult population (18 years and older)',
       'Prevalence of anemia among women of reproductive age (15-49 years)',
       'Prevalence of exclusive breastfeeding among infants 0-5 months of age',
       'Prevalence of low birthweight (percent)'

数据清理和预处理

初始数据包括 2003 年至 2019 年期间约 28 个国家及其食品相关指标。这是一张快照:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,这些指标分布在各个行上,每一行都代表该特定指标一年的价值。让我们转换数据,将这些变量作为列名:

以下是更改后的数据集:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们继续可视化之前,我们还需要修正 NaNs 和 N/A 类型值。使用此函数可以轻松解决前者:

为了固定 N/A 虚拟值,我将它们替换为 1,然后取每列中其他非 1 值的平均值,如下所示:

(英)可视化(= visualization)

现在我们有了一个干净的数据集,让我们更熟悉一下这些数据。我们将寻找正态分布,因为正态是机器学习数据的一般假设。首先,这是一张所有国家平均膳食能量供应充足度的图表,符合一条相对正常的正态分布线:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,让我们看看另一个变量是如何分布的,即“中度和重度食物不足”,它看起来也聚集在 40 左右,但仍然是正常的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们希望这些变量中的许多变量相互关联,因为它们是不同的饮食指标。让我们使用热图 : 来想象一下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如你所看到的,诸如膳食供应等变量与食物不足呈负相关,这是可以预料的。然而,国内生产总值与膳食充足性的相关性很弱(0.58),这可能令人惊讶。

线性回归

现在,我们可以开始让模型适合我们的数据集。我们将使用数据中的所有列(除了我们正在预测的那一列)来预测平均膳食能量供应充足性。我们可以从一个简单的线性回归模型开始:

我们使用的测试规模为数据的 0.2 或 20%,随机状态等于 27。让我们看看斜率和截距是多少:

  • **系数(斜率)😗*56660 . 68686868661
  • 截距:【4.64360863 e-03,3.89312086e-02,-6.49480051e-02,-1.59175835e-02,
    1.38100769e-02,-1.06957325e-04,7.38095045e-02,6.35949018e-03

为了衡量我们的模型有多好,我们可以使用 sklearn 的一些内置指标:

  • 均方误差

顾名思义,均方误差衡量的是误差平方的平均值。误差被定义为实际值和预测值之间的差异。线性回归模型的误差约为 2.72。与以下两个指标一起,它可以用来确定一个模型有多好。

  • 绝对平均误差

平均绝对误差是误差绝对值的平均值,在我们的模型中,它约为 1.65。

  • r 的平方

R square 衡量数据点与模型预测线的接近程度。分数越高,模型的表现越好。

里脊回归

我们也可以使用岭回归来预测我们的变量。当数据存在多重共线性时,通常使用岭回归,即当一些预测变量与其他预测变量相关时,其主要好处是避免数据的过度拟合。这个模型可以很容易地构建成这样:

现在,让我们看看山脊模型的三个指标:

  • r 的平方值:0.9662149081149515
  • 平均绝对误差:1.6。36860.68686868661
  • 均方误差:2。38860 . 68868686861

R 平方值略低于线性回归模型,因为平均绝对误差和均方误差非常相似。我们能进一步调整这个模型以提高它的性能吗?

测试各种α值

在这里,我们将查看一组将传递给模型的 alpha 值,然后构建一个散点图来查看它们的 R 平方值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,alpha 的最佳值是 0.001 和 0.01,因为它们产生最高的 R 平方值。

套索回归

另一种回归技术是套索回归。它与岭回归有相似的用例,因为它也减少了过度拟合。拟合该模型的代码如下:

以下是 lasso 回归的指标:

  • r 的平方是:0.964876876866
  • 平均绝对误差:1.646868686866
  • 均方误差:2.864886888866

lasso 回归的指标稍差,尤其是误差值。我们可以使用不同的 alpha 值来优化模型吗?

测试各种α值

让我们像处理岭回归一样输入多个α值。下面是 alpha 数组(0.001,0.01,0.1,1,10)与均方误差的散点图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,alpha 值为 0.001、0.01、0.1 时,错误率最低。

随机森林

作为我们的最后一个模型,我们将为数据集拟合一个随机森林回归量。这方面的代码如下:

以下是衡量标准:

  • r 的平方是:0.987686868866
  • 均方误差:1.00003863686
  • 平均绝对误差:1.000038686866

需要注意的一点是,随机森林模型的误差值似乎有所减少,这可能会使其更好地用于现实世界的数据集。

做预测

现在我们已经建立了几个模型,我们可以用它们来做一些预测。让我们挑选一些国家,比如塞尔维亚和印度尼西亚,看看这个模型对他们的平均膳食能量供应充足性的预测是什么:

从上面可以看出,模型预测值分别为 119.07 和 114.52。现在我们已经建立了一些模型并对它们进行了评估,是时候继续建立神经网络来进行与食物相关的预测了。这将是本系列的第 3 部分。感谢您的阅读,您可以在这里找到代码:

https://github.com/DeaBardhoshi/Data-Science-Projects/blob/main/Urban Health%2C Part 2 Developing Countries - Machine Learning Algorithms.ipynb

城市中的数据科学:一个故事

原文:https://towardsdatascience.com/urbanism-for-developing-cities-a-data-science-perspective-d53d0fb824b7?source=collection_archive---------33-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

美国宇航局在 Unsplash 拍摄的照片

问题:如何利用数据科学来帮助我们更好地了解发展中的城市?

你好中号!

数据科学是一个跨学科领域,其大部分应用仍未开发。数据科学可以帮助改善的领域之一是城市规划和发展。例如,我一直对“智能城市”的概念很感兴趣,也就是被设计成尽可能高效的城市。在本教程中,我们将看看地拉那,阿尔巴尼亚的首都,也是我的家乡。现在,地拉那远远不符合“智能城市”的描述——事实上,地拉那在很大程度上是一个发展中国家的首都:熙熙攘攘,脏乱不堪,充满活力。

通过与城市中的其他人交谈,我听到最多的一个抱怨是城市过于拥挤:交通太拥挤,建筑太多,绿色和休闲空间太少。所以我想,我们能不能用数据科学来更仔细地看待这个说法?让我们开始吧:

首先,指导这一过程的几点:

  • 地拉那的人口密度在世界城市中排名很高吗
  • 地拉那是否缺少绿色空间(也就是说,没有足够的空间供居住在那里的每个人使用)?

要使用的库:

让我们看看地拉那的人口数量和密度。对于这部分,我将使用来自 opendata.tirana.al 的 GeoJSON 数据。地拉那的城市分为 11 个行政区,每个行政区有不同的面积和人口数:“states”是一个 GeoPandas 数据框,显示每个地区及其相应的对称性,“pa”显示每个地区的 2020 人口。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

管理员。区域及其各自的多边形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个行政区的人口(在“人口亚洲 _2020”下)。区域

现在,让我们通过使用人口除以表面积来查看每个区域的密度,如下所示:首先,我们创建一个数据框架,其中包含每个行政区域的人口和表面积数据。然后,我们计算密度,将它们作为一列添加,并将几何多边形添加到数据帧中。在此基础上,我们绘制数据帧,用不同颜色显示密度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所见,这些区域有不同的密度。但是什么是平均密度,它与不同的世界城市相比如何?下面,您可以找到返回平均密度为 20229.54889607044 的 Python 计算,以及从联合国收集的城市密度数据集:

现在,让我们使用条形图绘制该数据集,x 轴为国家,y 轴为密度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如你所看到的,地拉那的城市在列表中名列前茅(请记住,这一数据仅涉及城市人口,尽管地拉那包括 8 个农村地区)。

现在,让我们看看地拉那的绿色空间。为了回答它们是否足够多的问题,我们首先需要像上一节中的多边形一样可视化和绘制数据。我找不到地拉那公园的任何 GeoJSON 数据,所以我访问了 Geojson.io 并手工绘制了这些区域,然后将其导出到 Geojson 文件中。然后,我可以用 geopandas 读取该文件,结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多边形显示地拉那的公园和娱乐区

为了测量有多少绿色空间,我决定使用 shapely 来计算每个多边形的面积。基本上,坐标列表包含了所有绿色空间的几何形状,但是是以弧度的形式,然后 area_greens 计算坐标中每个元素的面积,单位是平方公里。

如果我们把面积加起来,大约有 4.02815753409 平方公里。地拉那市区总面积为 41.8 平方公里。因此,地拉那大约有 10%的绿地。具体来说,它与其他世界城市相比如何?嗯,看看下面排序的数据集,地拉那的身材排名最接近巴黎(令人惊讶!)和布宜诺斯艾利斯。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

世界城市,“数字”是绿色区域的百分比

现在我们知道了地拉那与其他城市相比如何,我们如何决定是否有足够的绿色空间给它的每个居住者?为了回答这个问题,我们需要有某种考虑到绿地比例和密度的指标。绿地比例除以人口密度怎么样?为了解释这一点,我们可以认为大的值意味着人们有更多的绿色空间,小的值意味着更少的空间。下面的单元格对地拉那和数据集中的其他城市进行计算,然后绘制结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们计算的度量标绘了

结论:

正如我们在这个简短的教程中看到的,与其他世界城市相比,地拉那看起来确实人口过剩。此外,该市居民认为该市缺乏绿色空间的想法可能是正确的,在比例和比例/密度这两项指标上排名都很低。

  • 另外,如果您对本教程的代码感兴趣,可以在下面找到它:

https://github.com/DeaBardhoshi/Data-Science-Projects/blob/main/Project 3%2C Is Tirana Overpopulated_.ipynb

感谢阅读!

(几乎)免费使用量子云

原文:https://towardsdatascience.com/use-a-quantum-cloud-for-almost-free-13da8f1dfa34?source=collection_archive---------11-----------------------

实用量子计算 AWS Braket 101

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

演职员表:佩克斯公司的弗拉达·卡尔波维奇

这个故事是关于地理和社会包容的!

地理包容性:量子计算机目前并不便宜(我们谈到了 1500 万美元的投资),更不用说设置它的知识了。好消息是,地球上的任何人都可以通过云平台开始使用量子计算机。所以,不管你住在挪威、美国、秘鲁还是博茨瓦纳。只要你能上网,你就能在量子电路上运行程序。不幸的是,它们不是完全免费的,但是它们的价格是可以接受的(例如每次运行 0.3 美元)。

社会包容:在这篇文章中,我将介绍其中一个平台。这不是一个过于全面的指南,我也没有将这个平台与其他平台进行比较。我想让你展示在量子电路上运行程序是多么容易。需要量子物理博士吗?显然这样更好,但是如果你只是一个高中生,你可以从这里开始,如果你喜欢,你可以在将来继续。还有,姑娘们这不是书呆子气的东西,你们可能会喜欢:-)所以我们先从亚马逊 Braket 说起。

1.初始步骤

Amazon Braket 是一个易于在线访问的平台。这是一个量子计算平台,允许访问来自不同公司(D-Wave、IonQ、Rigetti)的多个量子设备,使用它的一种方式是通过 Braket Python SDK 。我会指导你基本的步骤。老实说,我更喜欢 IBM QPU(实际上完全免费)和 Qiskit,但我认为正是因为这个原因,我将来会在 dept 教程中写得更多。无论如何,这里让我们首先关注 Braket。

首先,打开浏览器,进入网址https://aws.amazon.com/braket/

然后,您必须选择一个北美云和一个数据存储库。亚马逊 Braket 将您的算法结果存储在任何亚马逊 S3 桶中。

我们可以选择量子处理器 (D-wave,IonQ,Rigetti)或者模拟器。D-Wave 和 Rigetti 有几种选择。也有可能那些量子机器暂时没有。在您选择之前,让我们先简要了解一下这些连接的设备。这个仪表板实际上更多的是可能性的概述,实际的选择是通过编码进行的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亚马逊 Braket 初始截图

D-Wave —优势系统

Advantage quantum processor unit(QPU)基于量子位和耦合器的物理点阵,称为 Pegasus。飞马架构包括一个重复的结构,其中每个量子位耦合到其他相对排列的量子位。一个基本单位细胞包含 24 个这样的量子位。

D-wave 机器的一个特别之处在于它是一个量子退火器,特别适合优化解决方案。退火是一种寻找全局最小值/最大值的元启发式算法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8 个量子位回路(黄金)的示意图。蓝点是允许量子位交换信息的 16 个耦合元件的位置。在数学上,这些元素将你希望计算机解决的问题中的变量结合在一起。演职员表: D-wave

IonQ

IonQ 是一台通用门量子计算机,带有俘获离子。更具体地说,有 11 个由镱制成的量子位,带有由激光定义的陷阱链。尽管只有 11 个量子位,但这种拓扑结构非常有趣,因为该设备是完全连接的,这使得量子位交互非常有效。使用来自锁模脉冲激光器的一对反向传播光束,通过双光子拉曼跃迁给出门。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

IonQ 拓扑的亚马逊市场图

还有关于校准保真度(两个量子态有多接近的度量)的信息:

{
 “braketSchemaHeader”: {
 “name”: “braket.device_schema.ionq.ionq_provider_properties”,
 “version”: “1”
 },
 “fidelity”: {
 “1Q”: {
 “mean”: 0.99717
 },
 “2Q”: {
 “mean”: 0.9696
 },
 “spam”: {
 “mean”: 0.9961
 }
 },
 “timing”: {
 “T1”: 10000,
 “T2”: 0.2,
 “1Q”: 0.000011,
 “2Q”: 0.00021,
 “readout”: 0.000175,
 “reset”: 0.000035
 }
}

这意味着我们有 99.7%的机会为一个量子位应用一个门读出与预期相同的状态。

里盖蒂

Rigetti 是另一台带有超导量子位的计算机。它有 30 个量子位(大于 10 个量子位),但拓扑结构完全不同:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Rigetti Aspen 8 的 Amazon Braket 地块

并非所有的量子位都是相互连接的,这需要在量子位上编程 c-零门时特别注意。例如,我们将需要交换门,这将增加错误测量的机会(量子电路仍然容易出错)。至于 IonQ,Braket 也提供校准信息,包括每个量子位的相干时间。

T1T2 是 cubit 失去相干性需要多长时间的时间量化(可以存储的时间量子信息量)。

T1 是自旋晶格弛豫时间,而测量一个量子位漂移回基态需要多长时间。T2 的退相时间也叫 自旋弛豫横向弛豫。 **当一个量子比特处于某个状态,但它开始绕轴旋转时,就会发生去相位(而这显然是不好的)。**为了实现高精度,目标是使这些值尽可能高。

模拟器

Braket 还提供了一个多达 34 个量子位模拟器。模拟器只是一台经典计算机伪装成量子计算机。然而,它可以用来测试电路,以及当我们在量子电路上运行它们时,它们的成本是多少。不幸的是,模拟器也不是免费的,但它肯定比真正的量子计算机便宜。

在 Braket 行话中,镜头是一个程序运行的次数(这对成本也有影响)。

一旦你理解了所有这些设置,你就可以启动一个笔记本和一个程序。由于价格是由时间和镜头给出的,请记住,您使用笔记本的次数越多,价格越高**(不要忘记关闭实例,如果您不在乎,我不负责您的账单)**。

2.笔记本实例

点击左侧菜单*“笔记本”*进入笔记本部分:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在点击橙色按钮“创建笔记本实例”。

提供实例名称、实例类型以及是否加密的选项。一旦您启动它,将需要几分钟时间(您可以在菜单中看到“待定或“服务中”)。

当你看到*“服役中”*时,你可以点击名字,从那里打开 Jupyter 笔记本(在那里你可以看到一些例子)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你想创建一个新的脚本,点击角落,你可以创建一个新的笔记本(选择 conda_braket)。如果你是全新的,Jupyter 笔记本正在编写网页脚本,我们可以在其中运行 Python 脚本。如果你完全不懂 Python,最好先一些基本语法(import,notation…)。

我通过一个简单的 Python 脚本(就像一个“量子 Hello World”)来指导你,在最相关的一行(以 bell=…)我们建立了一个具有两个量子位的 bell 态。贝尔态是两个量子位的四个特定最大纠缠量子态

首先在 Box1 中选择量子计算机,导入特定的库,然后我们在 Box2 中定义贝尔态。框 3 中的“运行方法”是实际启动任务的代码行。

在这个例子中,我选择了一个模拟器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后将电路提交给本地模拟器并获得结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要在 quantum 处理器上运行,请使用以下代码行:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们在模拟器上运行脚本,你会得到上图中绘制的结果,这是因为第一个量子位处于零状态,受控的非门对第二个量子位没有做任何事情,第二个量子位仍然处于零状态。然而,量子位处于一个状态,它将第二个量子位从零状态翻转到一个状态。第一个量子位处于相等的叠加状态,这意味着它有 50%的几率坍缩到零状态,有 50%的几率坍缩到一。

在真实的量子机器上运行的结果可能与 50–50 略有不同,因为真实的量子硬件可能会有误差。这确实是一个独立的话题,目前有几个解决方案正在调查

在 Jupyter 笔记本的示例文件夹中,还有一个子文件夹,其中有更多关于 D 波 QPU 和网络分析的有趣示例(如图形划分、最小顶点覆盖问题等)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

永远记得停止实例,费用很低,但如果你让它每天或每月运行;这将是昂贵的,所以选择实例并停止它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.如何从这里继续

为了保持超级拼版的主题,你可以在这里看到 Python 中使用其他量子计算库的相同 Bell 对示例。

如果你想了解更多关于 Braket 云系统的信息,起点大概是亚马逊 Braket 指南。

关于其他量子云解决方案(Azure 和 IBM)的简要介绍,请查看

https://medium.com/technology-hits/azure-quantum-computing-b7b9e009de7a https://medium.com/illumination-curated/is-quantum-machine-learning-the-next-thing-6328b594f424

结论

有了 AWS Braket,你可以真正启动你的量子计算脚本。这是一个让你真正接触量子计算机和模拟器的合理方法。这样,任何人,即使没有量子物理/计算博士学位,在地球上的任何地方(从挪威到卢旺达,从智利到印度),任何人都可以成为量子开发者。你需要网络连接和信用卡上的一些美元。显然,这还远远算不上高级研究。为此,你需要更多的量子位、更少的噪音和更长的相干时间。11 或 30 个量子位太小,无法实现量子计算机的算法,声称量子优势有用(如寻找整数质因数的肖尔算法,,即使它们在例子中可用)。IBM Quantum cluster 和 Azure 给出了其他替代解决方案。无论如何,这个行业还处于起步阶段,希望所有的量子云在(不久的)将来会更有效率。

想连接就连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@ Dr _ Alex _ 克里米

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@ Alec rimi 博士

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://web.facebook.com/dralecrimi

主动学习促进你的智力问题

原文:https://towardsdatascience.com/use-active-learning-to-boost-your-ml-problem-53c70f72b979?source=collection_archive---------16-----------------------

你也可以看看我在 FWdays 大会上的演讲视频关于主动学习和弱监督用法解决 NLP 问题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迷因作者使用了 imgflip.com上的照片

很难否认,解决机器学习(ML)问题的最广泛和最有效的方法是香草监督学习。在过去的十年里,算法改进了很多,特别是深度学习模型。然而,模型的成功在很大程度上取决于数据的质量和数量,而这反过来又需要时间、财力和人力资源。这里可能会出现并发症。

如果您对开发成功的数据科学解决方案感兴趣,但遇到资源不足的问题或没有足够的资源来获取标签,那么这些材料正适合您!即使你或你的公司有足够的(财政)资源来获得标签,这篇文章仍然是有益的。即使在 Wix 这样的大公司,我们有一个完整的内部标签部门,我们仍然在获得令人满意的高质量标签数据方面遇到问题。

考虑可能的情况:

  • 您的问题涉及特定领域的数据,如司法文档或生物数据。要获得标签,你需要高度合格的专家;
  • 你不能给你的数据贴上廉价众包平台的标签,因为它有 NDA 下的敏感信息;
  • 你没有很多数据——例如,不平衡的数据集和罕见的类;
  • 你需要训练一个更复杂的模型,比如神经网络,对数据特别饥渴;
  • 贴标签的过程非常耗时,您希望以某种方式加快它的速度。

所以,不管上面发生了什么情况,你都没有足够的标签数据。

在这里,主动学习成为焦点!

有了这个神奇的工具,您在数据科学任务中可能需要更少的手动标记样本,而不会损害甚至提高性能!

Wix.com,我们用它来解决文本分类(业务分类)问题,对用户支持请求、对象和肖像分割进行情感分析。

还有,除了贴子,你还可以回顾一下准备好的 Colab 笔记本,用编码弄脏自己的手:)

开始吧!

目录

  1. 数据集和起始组件
  2. 主动学习框架
  3. 主动学习的查询策略
    基本查询策略
    如何选择查询策略
    如何定制查询策略
  4. 满管道
  5. 结果
  6. 总结
  7. 参考文献

数据集和起始组件

在本帖中,为了简单易懂,我们将使用经典的垃圾短信收集数据集【1】【2】来检测垃圾短信。该数据集包含大约 5200 个样本。班级比例如下图 1 所示。

我们将该数据集分为三个部分:

  • 取 20% 作为测试集。
  • ~75% 作为短信池,我们假设这里没有标签。
  • 剩余的(~ 200 个样本)作为带标签的初始训练集—种子。

我们将用一个初始的小训练集来模拟标签短缺的情况,并展示主动学习将如何解决这个问题!

作为模型,我们将采用 TF-IDF 矢量器和简单的逻辑回归。作为受监控的指标—F1—对“垃圾邮件”类别的评分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1 —垃圾短信数据集中的类别比例—按作者分类

主动学习框架

拥有用于模型训练的无尽资源、时间和金钱——您只需收集所有可用的数据信号,并为每个信号分配一个标签。但遗憾的是,这是不可行的。现在,想象一下,你的数据科学模型非常聪明,它可以决定它喜欢和想要训练的数据。当然,该模型没有关于数据的情感,但是仅在显著影响其性能的样本上训练该模型仍然是一个好主意。这实际上就是主动学习所做的。

AL 背后的主要思想是允许我们的模型以" smart 的方式选择用于训练的数据。在 AdaBoost 算法中使用了类似的想法,其中它将更高的权重分配给信息更丰富的样本,即模型犯更多错误的样本。我们将为模型提供最丰富、最复杂的例子。因此,由于标记更少的数据点,训练过程的成本将被优化。

有不同类型的主动学习[ 3 ]。我们将专注于最流行的一种——基于池的类型的主动学习(AL)。

让我们试着找出常规的 ML 和主动学习用法的 ML 之间的区别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2——经典学习和主动学习 ML 对比——作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3——主动学习周期——作者的图片,灵感来自[ 3 ]

从上图中可以看出,经典的监督训练和基于池的主动学习的区别在于查询策略——如何选择训练集数据进行标注。

此外,不要忘记 ML 过程本质上是迭代的——如果模型评估结果不够好——您可以返回并决定是添加更多数据还是玩模型。虽然在常规 ML 中,您可能会以第一次迭代结束,但在主动学习中,您肯定会有两次迭代——您将设置批处理大小参数——您将在一次迭代中标记多少数据样本。

主动学习的提问策略

理解算法的最好方法就是编码。因此,我们将在这里实现选定的查询策略。

你可以尝试各种已经实现了不同查询策略的主动学习软件包(比如 modAL 或者 ALiPy )。但是,如果您不需要复杂的 POC 或想要创建快速 POC,请自己编写代码。

我使用了本教程【5】中的实现思想。

首先,我们需要定义一个只有一个抽象方法的元类——“选择*”。*

基本查询策略

随机选择

我们用来选择数据进行标记的天真方法是随机抽样——只是从未标记的池中随机查询样本——这实际上是被动学习。与其他非随机选择相比,它有一个显著的优势,因为您的训练集分布将反映现实,尽管它有其他明显的问题,如高成本。

下面看看如何实现“选择”方法( pool_len 是未标记池中数据样本的数量, num_samples —我们的批量大小,我们将在一次迭代中标记多少样本):

不确定性采样:余量选择

另一组最流行的查询策略是不确定性采样——在模型不确定的地方选择样本。对于支持概率输出的模型来说,这是一个非常简单的概念,比如逻辑回归,而对于只输出[0,1]范围内的分数的模型来说就不那么简单了。

边界选择 不确定性抽样查询策略之一的情况下,最不确定的样本将是两个最高置信度预测之间的差值最小的样本(概率最高)。

保证金分步选择的实施:

  1. 对于未标记池中的每个样本,将其预测概率从最大到最小排序:

2.计算两个最大概率之间的差值:

3.取值最小的样本(在数量 _ 样本数量中)——最不确定的样本:

要了解更多关于查询策略的信息,请阅读本主动学习手册http://burrsettles.com/pub/settles.activelearning.pdf***【3】。*****

想了解更多主动学习 python 的包—看这个 调查【4】。****

如何选择查询策略

不同的查询策略会选择不同的样本;因此,需要选择您的模型将从中受益最多。

****模型不支持 概率输出。在这种情况下,您可以考虑不使用概率的查询策略,如按委员会查询。此外,请记住:'最不确定的实例位于分类边界上,但并不“代表”分布中的其他实例,因此知道其标签不可能提高整体数据的准确性 ’ [3]。这就是为什么即使您的模型具有概率输出,您也可能不仅希望使用基于不确定性的查询策略。

****不平衡的数据集。当您有异常/欺诈检测任务或不平衡的数据集时,这种情况下的“次要”类别通常更重要。在这种情况下,基于相似性或密度的查询策略会更有用。

分散或高密度特征分布。如果查询策略试图增加数据方差并获取最不相似的样本,它可能会查询异常值,这不会提高模型性能。

每次迭代,模型性能不会改变。一些查询策略是贪婪的——在一次迭代中,它们将选择信息含量相似的数据点。因此,我们需要选择一种查询策略,它不仅要选择信息量最大的数据,还要选择信息量多样的数据。例如,您可以组合几个查询策略或者使用批处理感知策略[ 7 ]。

不要忘记冷启动。开始时,试着使用一些查询策略,而不是专注于某些特定的策略。****

幸运的是,您不局限于现有的查询策略。此外,您可以创建适合您的特定问题的查询策略。不要害怕使用定制的查询策略,例如,基于一些规则或启发。你会看到:这很容易做到!

如何定制查询策略

正如你已经知道的,中心点是给模型最有价值的数据实例。您可以决定在特定问题中哪些样本可以提供信息。您可能对某个特定的类感兴趣,而您的模型很难检测到它。或者,在错误分析之后,您已经知道了模型的弱点,并打算利用它们。

经典的基于不确定性的查询策略选择接近 0.5 预测概率值的样本。但是,如果您将决策阈值从默认的 0.5 更改为另一个值会怎么样呢?现在,您可能对落在阈值附近的概率值感兴趣。然后,您可以创建策略来选择接近阈值的样本。

区间内的最大误差

另一种了解模型在哪里表现更差的方法是查看每个不同预测概率值的误差分布直方图,并找到具有最大错误分类量的最有问题的概率范围。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4 —不同概率范围导致的误差分布示例—按作者分类

例如,在上面的图中,我们可以说 (0.3,0.4] 概率值区间是误差最大的区间。

基于此,我们将实现一个查询策略,从具有最高错误数的概率范围中选择样本:

  1. 将模型预测的概率分成 10 个(随意设置另一个数字)大小相等的区间。

2.在训练集上,进行预测并计算每个区间的错误数。

3.选择错误数量最多的时间间隔。

4.从未标记的池样本中选取,这些样本的预测概率落在从第 3 步选择的区间内。

这种“最大误差”查询策略可以用于任何分类问题。

文本相似度查询策略

在 Wix,对于网站分类任务,我们遇到了有数十亿个 Wix 网站的问题,例如,要找到瑜伽教练网站,您需要随机选择并标记大量数据。因此,有了 Yoga 站点示例的小种子,我们选择只标记与种子有相似文本的站点。如下所示,我们能够以低得多的成本标记和构建大量类别的数据集!

现在,试着回答这个问题:对于垃圾短信检测来说,哪些样本的信息量最大?

在大多数垃圾邮件检测应用中,正确的“垃圾邮件”检测至关重要,因为我们只有 13%的垃圾邮件样本,所以我们可以说“垃圾邮件”类别比常规的非垃圾邮件样本更重要。

因此,这里有一个基于相似性的查询策略,它使用文本嵌入来计算数据点的相似性,并根据您的需要选择特定的样本。

我们可以使用简单的 TF-IDF 或 BOW,预训练的单词嵌入,如 TensorFlow 的通用句子编码器或任何其他先进的预训练嵌入(BERT、LaBSE 等)。).为了使用文本嵌入为我们的“垃圾邮件”类获取最相似的样本,我们还必须定义一个相似性度量。我们决定使用通用语句编码器嵌入和余弦相似度度量。****

现在,让我们一步一步地编写这个查询策略:

0.首先,准备嵌入函数。

  1. 从我们已经训练好的数据中获取“垃圾邮件”样本并嵌入它们。

2.计算未标记池的嵌入。

3.计算来自步骤 1 的“垃圾邮件”样本和来自步骤 2 的池嵌入之间的余弦相似性。

4.从未标记的库中获取具有最高相似性的样本。

仅此而已!您可以通过选择与整个训练集最不相似的样本(以增加数据集方差)或选择与所有类相似的样本(如果认为这样的样本最棘手)来修改此查询策略。

如您所见,定制查询策略不是火箭科学,而是您可以发挥创造力并从中获得乐趣的领域!

完整管道

既然我们已经实现了查询策略,那么是时候将它们放入主动学习循环并训练模型了。

  1. 定义分类器:

2.在我们的初始小标签集上训练分类器。

3.对未标记的池进行预测:

4.使用所选的查询策略进行选择(例如,边距选择):

5.将带有标签的选定数据样本添加到已经存在的初始训练集:

6.从库中删除所选项目(因为我们已经将这些数据点添加到训练集中):

7.在更新的训练集上训练分类器,并计算更新的度量。

8.重复步骤 2-7,直到您获得满意的结果或耗尽资源。

结果

最后,让我们在一个使用不同查询策略的测试集上回顾一下模型性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5 —主动学习结果—按作者分类的图表

在图 5 中,我们可以看到,如果我们标记整个未标记池,我们会得到一个87%F1-分数。因此, 87% F1 将是分数基线——因为这是你标注所有数据后得到的表现。

利用余量选择,在 14 次迭代(140 个数据样本)上实现相同的性能。对于 207 行的初始测试,总共有 347 个样本。那可是比少十倍的数据!****

在下表中,您可以看到使用不同的查询策略获得 87% 基线 F1 分数需要多少个标签。边距选择的性能几乎与区间选择中的最大误差相同,而文本相似性选择稍差,但仍然非常好。

表 1:主动学习实验结果

总之,无论我们使用哪种查询策略,我们都可以用更少的数据标签获得良好的性能。

在 SMS 案例中,最好的是边缘选择策略,但请记住,我们对一个非常简单的分类问题进行了实验,并使用了逻辑回归模型,该模型给出了校准良好的概率输出。在真实的情况下,仅使用基于不确定性的查询策略可能无法获得如此好的性能。

摘要

让我们总结一下我们在上面所做的一切:

  • 主动学习可以显著减少标记数据点的数量(在我们的例子中,数据几乎减少了十分之一!);
  • 主动学习查询策略可以针对特定任务轻松定制和优化。

在您的数据科学任务中,有许多方法可以克服数据瓶颈。你只需要选择一个最适合你的问题。在这篇文章中,我们用主动学习工具成功地解决了这个问题。

致谢 非常感谢 Gilad Barkan、Olga Diadenko 和 Lior Sidi 对本文早期版本的反馈!

参考

[1] UCI 机器学习知识库:垃圾短信收集数据集
【2】Almeida,T.A .、GÃ mez Hidalgo,J.M .、Yamakami,A. 对垃圾短信过滤研究的贡献:新的收集和结果 (2011),2011 年 ACM 文档工程研讨会会议录(DOCENG’11)。
【3】毛刺落定。主动学习文献调查 (2010),计算机科学技术报告 1648,威斯康星大学麦迪逊分校。
【4】亚历山大·亚伯拉罕。主动观察主动学习包——来自渠道的数据 (2020)。
【5】Ori Kohen。主动学习教程 (2018)。
[6]陈育坤、托马斯·A·拉斯科、朱樵·梅、约书亚·C·丹尼、华旭。临床文本中命名实体识别的主动学习方法研究 (2015),生物医学信息学杂志,第 58 卷,第 11-18 页。
【7】丹尼尔·吉辛。批量主动学习|判别主动学习 (2018)。

使用并增强这个 Python 类来下载 Excel 工作簿,并为分析做准备

原文:https://towardsdatascience.com/use-and-enhance-this-python-class-to-download-excel-workbooks-and-prepare-them-for-analytics-4750ae00d8c2?source=collection_archive---------10-----------------------

使用 Python 类 c_download_prep_excel 从网站上自动下载 excel 电子表格,并准备用于数据分析项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

免费图片,由 Pixabay.com 提供。

介绍

在最近的一篇文章中,我分享了一个从 analytics.usa.gov 的 T2 下载报告的 Python 类。这些文件提供了有关公众如何访问大约 5,700 个美国政府网站的数据。他们是干净的,同质的设计,并准备在画面中可视化。

相比之下,美国联邦调查局(FBI)在其网站上公布的一些 Excel 文件则存在挑战。我需要转换他们的数据,然后才能在数据分析项目中使用它们。本文介绍了一个可重用的 Python 类,称为 c_download_prep_excel,它从网站上下载 excel 工作簿(如 FBI 发布的工作簿),并重新构造它们的数据,为数据分析项目做准备。

这种技术和这里介绍的 c_download_prep_excel 类可以用来从其他站点下载和处理 excel 文件。任何人也可以修改这个类来处理不同来源的 Excel 文件和执行其他任务。

联邦调查局报告样本

我使用了 from 2019 年暴力犯罪统计报告来开发和测试 c_download_prep_excel 类。单击下载 Excel-表 1 以检索 Excel 工作簿。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

美国联邦调查局 2019 年美国犯罪报告。图片来自 FBI 网站。

报告问题

下面显示的示例 Excel 工作表还不能用于数据分析。虽然可以接受在 Excel 中查看,但应该对其进行清理和转换,以使其适合分析。以下是它的一些问题:

  • 第 1 行到第 3 行包含元数据的标题信息。
  • 第 25 到 31 行包含页脚信息,这些信息也是元数据。
  • 第 1 列中的某些年份包含向年份值添加数字的上标。
  • 数据的矩阵格式不适合加载到数据分析工具中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

联邦调查局暴力犯罪报告。作者拍摄的图片。

解决方案

为了准备用于数据分析的报告,我编写了一个 Python 类和程序,将数据从原始工作表转录到新工作表中。结果格式如下所示,每行一个数据点(年份、犯罪类型和犯罪率的组合)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将联邦调查局暴力犯罪报告中的数据转换成可供分析的格式。图片由作者提供。

可以根据需要使用和增强该类,以便从 FBI 网站或其他网站下载和准备其他 Excel 文件。本文后面给出的示例程序执行这些步骤:

  1. 将 Excel 工作簿从 FBI 网站下载到本地文件夹。
  2. 如果工作簿是 xls 文件,请以 xlsx 格式保存一份副本。
  3. 保持 xlsx 文件的原始工作表不变。相反,创建一个新的工作表,其中包含所需格式的数据。以下步骤描述了将工作表 19tbl01 中的数据转录到新工作表中。
  4. 创建三个列名:年份、犯罪类型和犯罪率。
  5. 对于犯罪类型,在第 1 列中每年写一行,在第 2 列中写犯罪类型。
  6. 将包含上标的年份值截断为四位数。
  7. 将每种犯罪类型的犯罪率数据从原始工作表转录到新工作表中。
  8. 右对齐第 1 列和第 3 列的列名。
  9. 设置列宽。

本项目中使用的工具

我使用了以下工具来开发程序。

  • Python 3.9.2
  • 微软 Excel 365
  • Microsoft Visual Studio 社区

程序、c_download_prep_excel 类和 Python 模块

该计划

下载和准备用于数据分析的 Excel 工作簿的程序由文件 process_fbi_data.py 中的控制器模块和文件 c_download_prep_excel.py 中的 c_download_prep_excel 类组成。process_fbi_data.py 中的代码控制程序。控制器创建 c_download_prep_excel 的一个实例,并调用它的函数将 FBI 报告文件的原始工作表中的数据转录并转换到一个新的工作表中。

c _ 下载 _ 准备 _excel 类

c_download_prep_excel 类执行控制器请求的任务,如上面的解决方案部分所述。它可以根据需要进行修改和增强,以满足特定的要求。

程序控制器和 c_download_prep_excel 类代码见 附录 A

Python 模块

程序调用 openpyxl 模块中的函数来创建新的工作表并格式化数据。该程序还调用 pyexcel 函数,这些函数使用 pyexcel-xls 和 pyexcel-xlsx 将 xls 工作簿复制到 xlsx 工作簿。

从命令行运行下面列出的命令,或者如果支持,在您的集成开发环境(IDE)中运行这些命令,以安装这些模块:

  • pip 安装 openpyxl
  • pip 安装 pyexcel
  • pip 安装 pyexcel-xls
  • pip 安装 pyexcel-xlsx

Python 包括程序使用的操作系统和请求模块

Tableau 公共仪表板

我将支持分析的 Excel 工作表加载到 Tableau Public 中,并创建了一个简单的仪表板来显示各种犯罪类型的趋势

潜在的改进

该程序很好地执行了它的基本任务,从 FBI 报告电子表格中准备暴力犯罪数据用于数据分析。以下增强功能可以使程序为生产做好准备,并扩展其处理不同格式的各种 Excel 工作簿的能力。

  • 添加错误处理来从严重错误中恢复或者优雅地关闭程序。
  • 将程序活动写入日志文件,以跟踪程序的启动、完成、错误和动作。
  • 向类中添加函数以执行额外的格式化并应对新电子表格带来的挑战。
  • 从其他文件或数据库中查找并替换数据
  • 执行额外的数据清理

结论

Excel 电子表格可以从网站上手动下载,并手动转换成可供分析的形式。但是程序可以自动完成这项任务。当需要下载多个文件并准备在数据分析项目中使用时,这是非常有益的。另外,如果设计良好,您可以在将来为类似的任务重用 Python 类和程序。

关于作者

Randy Runtsch 是一名数据分析师、软件开发人员、作家、摄影师、自行车手和冒险家。他和妻子住在美国明尼苏达州东南部。

关注 Randy 即将发表的关于公共数据集的文章,以推动数据分析见解和决策、编程、数据分析、摄影、自行车旅行等。你可以在 shootproof.com 和 shutterstock.com 看到他的一些照片。

附录 A —源代码

程序的 Python 控制器代码和 c_download_prep_excel 类代码如下所示。请随意复制代码并根据您的需要进行修改。

使用注释来讲述更好的故事

原文:https://towardsdatascience.com/use-annotations-to-tell-better-stories-with-your-plots-410cb1752bee?source=collection_archive---------20-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由艾萨克·史密斯Unsplash 拍摄

以及如何使用plotly在 Python 中实现

俗话说,一幅画胜过千言万语。在数据科学中,我们经常使用不同类型的情节来探索数据或讲述故事,通常是针对非技术观众。

数据可视化通常被认为是一项独立的技能,需要花费专门的时间和精力来掌握。几乎任何人都可以运行一行程序来创建一个简单的情节。但是有许多技术或细节可以极大地改善图形,强化我们想要传达的信息。

有许多很棒的文章和书籍致力于该主题,例如, 用数据讲故事:商业人士的数据可视化指南 (免责声明:引用链接)。在这篇短文中,我们将关注一个可以极大地帮助理解故事的方面——情节注释。

关于封面故事的一些背景信息

你很有可能已经听说过这个故事,即使你可能对加密货币没有明确的兴趣。2021 年初,埃隆·马斯克发布了几条关于 DOGE 的推文,DOGE 最初是作为一个笑话而创造的。这些推文对 DOGE 的价格产生了很大的影响,使其暴涨。我们将仔细看看硬币的价格,以及它是如何受到推文的影响的。

引发这一切的推特

用 Python 探索 DOGE 价格

和往常一样,我们首先需要导入库。对于本文,我们将使用绘图库plotly。这是因为我发现它是最容易实现注释的。然而,这在其他库中也是可能的。

我们将使用yfinance库下载 2021 年 1 月至 4 月的 DOGE-USD 历史价格。关于如何使用这个库的更多细节,你可以参考我以前的文章。我们还计算了每日百分比变化,以供进一步分析。

下载的数据如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们可以使用以下代码片段轻松创建 DOGE 收盘价的交互式线图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们确实可以看到 DOGE 的价格是如何随着时间的推移而变化的。在那 4 个月里,价格增长了 65 倍!使用plotly的交互式工具提示,我们可以详细了解任意一天的价格。

注释的一个方便的用例是指出埃隆·马斯克在哪一天发推文。然后,我们可以清楚地观察到价格是如何响应这些推文而变化的(注意:推文本身并不是价格变化的唯一原因)。

首先,让我们定义注释。

在这个列表中,我们提到了埃隆·马斯克在 2021 年的 4 个月里发布的 4 条推文。对于每个注释,我们指定以下内容:

  • x-用于注释的 x 轴值。在这种情况下,我们使用推文的日期。
  • y —用于注释的 y 轴值。这里,我们使用当天的收盘价。
  • text —注释的标题。在这里,我们使用的是埃隆·马斯克的推文内容。
  • arrowhead —表示我们想要使用哪种形状的箭头

我们可以使用的一些附加参数:

  • arrowsize —决定箭头的大小
  • ax / ay —用于沿轴移动标注。当我们不希望注释相互重叠或与线条重叠时,这就很方便了。

当我们准备好列表时,我们可以使用update_layout方法将注释应用到图中。

运行该行会更新该图,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

通过注释,我们可以清楚地看到 DOGE 的价格在推文发布当天以及随后几天的表现。有趣的是,当我们查看 2021 年之前的价格历史时,与推文发布后的暴涨相比,价格基本持平。

注意:我们也可以使用fig对象的add_annotation方法来添加注释。参数与上面指定的参数相同。我们使用了update_layout方法,因为一次添加多个注释更方便。

通过稍微修改包含注释(y 轴值)的列表,我们可以得到相同的图,但 DOGE 价格的每日百分比变化除外。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

正如我们所看到的,tweets 和随后的几天可以被描述为 DOGE 价格的异常高的每日百分比变化。

外卖食品

  • 在情节上使用注释可以极大地帮助向观众传达故事,尤其是非技术性的观众,
  • 在 Python 中,注释可以添加到任何类型的绘图中,但是要记住,不同库之间实现的细节是不同的,
  • plotly提供了一种非常简单的方法来给它的图形添加注释。

你可以在我的 GitHub 上找到本文使用的代码。此外,欢迎任何建设性的反馈。你可以在推特或评论中联系我。

喜欢这篇文章吗?成为一个媒介成员,通过无限制的阅读继续学习。如果你使用这个链接成为会员,你将支持我,不需要额外的费用。提前感谢,再见!

您可能还会对以下内容感兴趣:

[## 用 Python 创建交互式烛台图表的最简单方法

towardsdatascience.com](/the-simplest-way-to-create-an-interactive-candlestick-chart-in-python-ee9c1cde50d8)

参考

https://www . fool . com/the-ascent/buying-stocks/articles/5-times-elon-musk-has-send-dog ecoin-prices-spiring/

使用贝叶斯定理在列表中查找不同的名称

原文:https://towardsdatascience.com/use-bayes-theorem-to-find-distinctive-names-in-a-list-5acd8fe03c2b?source=collection_archive---------24-----------------------

通过这个实用的 Python 应用程序学习对数概率贝叶斯

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的顶点事件拍摄的照片

国会跑步俱乐部想让你找到他们的比赛结果。比赛公布结果,所以只要在那些结果中寻找俱乐部成员的名字,对吗?然而,如果你只寻找一个名字,比如“罗伯特”或“斯科特”,你会发现你得到太多的匹配。而且,如果你寻找全名,你有时会仍然得到太多的匹配(“罗伯特·斯科特”)。由于错误、打字错误、昵称和缩写(例如,“Chellie Pingree”显示为“Chelly Pingree”),您有时也会得到很少的匹配。一个好的解决方案是给与众不同的名字(“Pingree”)比普通的名字(“Robert”)更大的权重。让这个解决方案可行的关键是贝叶斯定理。

具体来说,我们将学习“朴素贝叶斯”的对数概率版本。这个奇妙的公式让我们把匹配和不匹配的分数加起来。它还为我们提供了一种原则性的方法:

  • 根据名字的独特性来打分
  • 缺少一个名字时,减去不同的点数
  • 将名和姓的点结合起来
  • 处理昵称
  • 处理附加信息,例如,跑步者的家乡,它有时会出现在比赛结果中。

我真正的跑步俱乐部使用这些工具的版本。除了这篇文章,我还提供了一个您可以使用的 Python 笔记本。除了比赛结果,你应该会发现它在其他名字/地方/等方面很有用。匹配应用程序。此外,虽然朴素贝叶斯被广泛教授,但其美丽的对数概率公式经常被忽视,学习起来很有用。

我们将通过考虑一系列概率问题来发展我们的匹配方法。我们的目标不是产生“完美”的概率;相反,我们希望概率是:

  • 简单—易于计算
  • 合理—足以突出大多数匹配
  • 原则性——在给出一些简化假设的情况下,与全概率理论一致。

如果需要,这些结果可以进一步改进。

让我们开始提问:

随机线是关于罗伯特的

:假设你从一场本地比赛的结果中随机选择一条线,并随机选择一名跑步俱乐部的成员。这条随机线指向这个随机成员的(合理)概率是多少?

**答:**让我们假设一个给定的俱乐部成员有 1%的机会参加给定的本地比赛。我们还假设一场典型的比赛包括 1000 名跑步者,因此有 1000 条结果线。因此,随机线指向随机俱乐部成员的概率约为 1%/1000 = .00001。

输入:

prob_member_in_race = .01
result_count = 1000prior_prob = prob_member_in_race / result_countf"{prior_prob:.5f}"

输出:

'0.00001'

我们的罗伯特导致“罗伯特”

**问:**关于成员 Robert Scott 的的结果行包含单词“Robert”的概率是多少?

**答:**你可能认为这是肯定的事情,但是“事情总会发生”,比如错误、错别字、不知名的昵称、缩写等等。让我们假设一个错别字的概率,等等。一个名字是 40%。因此,答对一个名字的概率是 60%。

输入:

prob_name_right = .6
prob_name_right

输出:

0.6

其他人指向“罗伯特”

:假设我们选择一个随机的结果行,这个结果行是而不是关于那个成员 Robert Scott 的。随机行包含“罗伯特”这个词的概率有多大?

**答:**让我们假设这个概率与美国人口中“罗伯特”这个名字的出现频率相同。利用公开的政府数据,我创建了一个包含 245,000 个名字及其(大概)频率的表格。(这张表是给你用的。)它报告“罗伯特”的概率为 3%。

输入:

import pandas as pd
from pooch import retrievedef load_name_to_prob():
    name_prob_file = retrieve("https://github.com/CarlKCarlK/bayesmatch/releases/download/v0.0.1/name_probability.tsv",
        known_hash="md5:cf2b3277a9e88b846c18bed559a4fbea",
        fname="name_probability.tsv")
    name_to_prob_df = pd.read_csv(name_prob_file, sep="\t")
    name_to_prob_df.set_index("name", inplace=True)
    name_to_prob = name_to_prob_df.to_dict()["probability"]
    return name_to_probname_to_prob = load_name_to_prob()
prob_coincidence = name_to_prob["ROBERT"]
prob_coincidence

输出:

0.03143

“罗伯特”来自罗伯特

**问:**包含“Robert”的结果行是关于我们的成员 Robert Scott 的概率有多大?

到目前为止,我们已经看到了导致结果的原因。例如,我们说一个关于成员 Robert Scott(原因)的结果行将包含单词“Robert”(结果),概率为 60%。

贝叶斯定理让我们逆转这一点,从结果到原因进行反向推理。在示例中,当结果行包含单词“Robert”(一个结果)时,贝叶斯定理告诉我们结果行关于成员 Robert Scott(一个原因)的概率。

通常的贝叶斯定理公式是:

P(C1|E) = P(E|C1) P(C1) / P(E) 何处P(E) = (E|C1) P(C1) + P(E|C2) P(C2)

我们将使用等价的对数概率表:

logodds(C1|E) = logodds(C1) + log(P(E|C1)/P(E|C2))

公式的两个版本都告诉我们如何

  • 一个原因的先验概率(随机线是关于罗伯特的),
  • 给定一个原因的结果的概率(我们的罗伯特导致“罗伯特”),
  • 给定所有其他原因的结果的概率(其他人导致“罗伯特”)

把它们变成

  • 给定结果的原因的后验概率(“罗伯特”来自罗伯特)

我们喜欢这个公式的对数概率版本,因为它包含的项更少。此外,它让我们创建一个积分系统。具体来说,称为“对数贝叶斯因子”的术语log(P(E|C1)/P(E|C2))告诉我们,如果我们看到“罗伯特”,应该增加多少分。在 Python 中,计算变成:

输入:

import numpy as npdef logodds(prob):
    return np.log(prob / (1.0 - prob))def prob(logodds):
    odds = np.exp(logodds)
    prob = odds / (odds + 1.0)
    return probprior_points = logodds(prior_prob)
print(f"prior: {prior_points:.2f} points, {prior_prob:.5f} probability")delta_points = np.log(prob_name_right / prob_coincidence)
print(f"delta: {delta_points:.2f} points")post_points = prior_points + delta_points
print(f"post: {post_points:.2f} points, {prob(post_points):.5f} probability")

输出:

prior: -11.51 points, 0.00001 probability
delta: 2.95 points
post: -8.56 points, 0.00019 probability

换句话说,在结果行中看到“Robert”会使该行与成员 Robert Scott 有关的概率增加 19 倍。(它将概率从 0.00001 移动到 0.00019。)

该代码还显示了如何从概率转换到对数优势点,以及如何转换回来。此表显示了一些转换值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

没有“罗伯特”,但仍然来自罗伯特

**问:**包含“Robert”的结果行而非是关于我们的成员 Robert Scott 的概率有多大?

**答:**我们看到,在结果行中找到“Robert”会增加该行与 Robert Scott 相关的概率。同样,找不到“罗伯特”会降低概率。有趣的是,潜在的增加通常不同于潜在的减少。公式是:

logodds(C1|not E) = logodds(C1) + log(P(not E|C1)/P(not E|C2))

这告诉我们如何采取

  • 原因的先验概率(如前),
  • 给定一个原因遗漏一个结果的概率(我们的罗伯特不会导致“罗伯特”,0.4,一个错别字的概率,等等。),
  • 在给定所有其他原因的情况下,遗漏一个效应的概率(其他人不会导致“罗伯特”,大约 97%,人口不命名为“罗伯特”)。)

把它们变成

  • 给定缺失结果的原因的后验概率(没有“罗伯特”,但仍然来自罗伯特)

术语log(P(not E|C1)/P(not E|C2))是在结果中看不到“罗伯特”的对数贝叶斯因子。在 Python 中,计算变成:

输入:

print(f"prior: {prior_points:.2f} points, {prior_prob:.5f} probability")delta_points = np.log((1.0-prob_name_right) / (1.0-prob_coincidence))
print(f"delta: {delta_points:.2f} points")post_points = prior_points + delta_points
print(f"post: {post_points:.2f} points, {prob(post_points):.6f} probability")

输出:

prior: -11.51 points, 0.00001 probability
delta: -0.88 points
post: -12.40 points, 0.000004 probability

换句话说,看不到“罗伯特”会减少我们 0.88 分。因此,它将这条线关于成员 Robert Scott 的概率从 0.00001 降低到 0.000004。

“罗伯特”和“斯科特”来自罗伯特·斯科特。

**问:**包含“Robert”和“Scott”的结果行是关于我们的成员 Robert Scott 的概率有多大?

**答:**如果我们愿意忽略“罗伯特”和“斯科特”之间可能存在的依赖关系(详见下文),那么公式就变成了:

logodds(C1|E1&E2) = logodds(C1) + log(P(E1|C1)/P(E1|C2)) + log(P(E2|C1)/P(E2|C2))

旁白:我们称之为“朴素贝叶斯”,因为它忽略了证据之间可能的相关性。例如,它忽略了一个粗心的键盘输入者比一般人更有可能在两个 T2 的名字中造成一个错别字。它还忽略了来自苏格兰的姓(“斯科特”)与常见的苏格兰名(“罗伯特”)相关联。尽管如此,这种“天真”的假设在实践中往往很有效,并极大地简化了我们的数学和编程。

新公式只是原始公式的第二个增量“Scott”。在 Python 中:

输入:

print(f"prior: {prior_points:.2f} points, {prior_prob:.5f} probability")first_name_points = np.log(prob_name_right / name_to_prob["ROBERT"])
print(f"first_name: {first_name_points:.2f} points")last_name_points = np.log(prob_name_right / name_to_prob["SCOTT"])
print(f"last_name: {last_name_points:.2f} points")post_points = prior_points + first_name_points + last_name_points
print(f"post: {post_points:.2f} points, {prob(post_points):.5f} probability")

输出:

prior: -11.51 points, 0.00001 probability
first_name: 2.95 points
last_name: 4.70 points
post: -3.86 points, 0.02055 probability

换句话说,看到“罗伯特”增加了 2.95 分(和之前一样),看到“斯科特”又增加了 4.70 分。因此,概率从 0.00001(非常、非常、非常不可能)变为 0.02(不可能)。

当我们试图将一名俱乐部成员与一个更独特的名字 Chellie Pingree 匹配时,会发生以下情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

她的姓值 12 分,所以如果我们看到她的姓,但没有看到她的名(-0.92 分),我们最终有 40%的可能性结果行是关于她的。同样,她更独特的名字本身就值 13 分以上,因此后验概率为 72%。最后,如果我们看到两个名字,我们将 99.99%确定结果行是关于她的。

“鲍勃”来自罗伯特

**问:**包含“Bob”和“Robert”的结果行是关于我们的成员 Robert Scott 的概率有多大?

**答:**为了处理昵称,我们需要指定关于成员 Robert Scott 的结果包含的概率,例如,“Robert”、“Bob”、“Rob”和其他内容。

让我们假设我们仍然有 40%的机会出现打印错误,等等。然而,现在,如果有昵称,我们假设有 50%的机会看到主名。我们将剩下的 10%概率平均分配给昵称。请注意,这些概率加起来是 100%。

我们将在这里使用的公式是:

logodds(C1|E1 ∨ E2 ∨ E3) = logodds(C1) + max( log(P(E1|C1)/P(E1|C2)), log(P(E2|C1)/P(E2|C2)), log(P(E3|C1)/P(E3|C2)) ) 其中“∨”表示“逻辑或”

这表示当寻找多个相关效果时,我们将分别找到每个效果的分数,然后使用分数最高的那个。这是一个保守的假设,它阻止我们对包含名字的两个版本的结果行给予额外的积分,例如,“Robert (Bob)”。

当我们对包含“Robert”、“Bob”和“Scott”的行运行 Python 时,结果是:

prior: -11.51 points, 0.00001 probability
    ROBERT: 2.77 points
    BOB: 4.51 points
    ROB: -0.05 points
first_name: 4.51 points
last_name: 4.70 points
post: -2.30 points, 0.09083 probability

我们既看到“罗伯特”,也看到“鲍勃”,但“鲍勃”更有特色,所以我们用其中的点。

然而,即使有了昵称,我们仍然只有 9%的把握这一行是关于我们的成员罗伯特·斯科特的。为了做得更好,我们需要一些额外的信息。正是因为这个原因,大型比赛通常包含城市信息。

旁白:带连字符的名字(比如奥卡西奥-科尔特斯)和多词名字(比如范·霍伦)怎么办?我们将像对待昵称一样对待它们,将昵称作为主要名称和一个或多个附加名称。

“贝尔维尤”指的是罗伯特·斯科特的小镇。

**问:**如果结果包含城市信息,那么包含“Bellevue”的结果行是关于我们住在 Bellevue 的成员 Robert Scott 的概率有多大?

**答:**要回答这个问题,我们必须回答两个子问题。

  • 如果这条线是关于成员罗伯特·斯科特的,它包含“贝尔维尤”的概率是多少?我们将再次假设 60%(因此,40%的打字错误的概率,等等。)
  • 如果这条线是关于别人的,那么它包含“贝尔维尤”的概率是多少?我们将在感兴趣的比赛结果中使用“Bellevue”的频率,而不是在美国使用名称的频率。查看一个真实的比赛结果,我发现在 1592 行中有 170 行包含“Bellevue”。我们将稍微平滑一下,把这些计数变成一个概率:

P(“Bellevue”|about someone else) = (170+1)/(1592+2)= 0.11

在 Python 中,我们添加这些行:

city_name_points = np.log(0.60 / ((170+1)/(1592+2)))
print(f"city: {city_name_points:.2f} points")

这导致了以下输出:

prior: -11.51 points, 0.00001 probability
    ROBERT: 2.77 points
    BOB: 4.51 points
    ROB: -0.05 points
first_name: 4.51 points
last_name: 4.70 points
city: 1.72 points
post: -0.58 points, 0.35846 probability

因此,现在我们认为这条结果线以 36%的概率指向我们来自贝尔维尤的俱乐部成员罗伯特·斯科特。这足以说明这条结果线值得一看,也许可以通过突出它来说明。

首字母和遗漏的姓名

**问:**如果我们不知道一个成员的名字或者只知道一个首字母,应该如何调整概率?

答:处理这个问题的一个实用方法就是跳过评分。如果我们不知道成员的名字或者只知道名字的首字母,我们可以跳过记录他们的名字。如果我们不知道成员的城市,或者如果结果不包含城市,我们可以跳过城市评分。

后续步骤

有了这些问题的答案,我们可以有效地从列表中挑选出名字。您可以在笔记本[CarlKCarlK/Bayes match:(github.com)]中看到用于创建这篇论文的 Python 代码。我的跑步俱乐部也在使用这些方法作为一个更大的比赛结果项目的一部分,用 c#[luillo 1/race results(github.com)]编写。(如果您对我将 Python 笔记本扩展成完整的 Python 包感兴趣,请告诉我。)

这些方法可以在几个方向上更进一步。

  • 更多信息——我们可以用编辑距离来模拟拼写错误的概率,而不是忽略拼写错误。我们也可以考虑谁比赛更频繁,谁倾向于一起比赛。最后,通过更好地解析比赛结果,我们可以尝试匹配性别、年龄、首选距离和预期速度。当我实际寻找比赛结果时,我发现从程序的输出开始,然后使用这些额外的信息源来手动确认匹配是很有用的。
  • 新的应用——除了比赛结果,我还在一个未发表的项目中使用这些方法来识别科学论文的作者。我使用的主要信息来源是名称独特性、合著者、机构和主题领域。我认为这些方法在系谱学中也是有用的。
  • 作为机器学习的输入—想象一个简单的机器学习系统,它将对数贝叶斯因子作为输入,即来自匹配或缺失效应的点。这样一个系统可以轻易地覆盖数十万个名字和数千个城市,包括那些以前从未见过的城市。它可以以一种比我们现在更数据驱动的方式将它们结合起来。(如果你知道这样的作品,请留下评论。)
  • 作为贝叶斯推理的第一个构件,概率编码了数据和由于我们缺乏数据而产生的不确定性。

摘要

我们已经看到了贝叶斯定理如何提供了一种从结果到原因反向推理的有原则而又实用的方法。使用其奇妙的对数概率公式,将影响的存在或不存在转化为简单的点。最后,“朴素贝叶斯”假设让我们用加法将这些点结合起来。

感谢 David Heckerman 和 Luke Bordonaro 对本文的建议。

用例:在几分钟内构建一个用于材料缺陷检测的 CNN

原文:https://towardsdatascience.com/use-case-air-conditioner-piston-check-6007b9be40cf?source=collection_archive---------28-----------------------

我们如何建立一个图像识别模型,可以对 AC 活塞的图像进行分类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

空调(图片来源)

制造或建筑中使用的材料可能有各种各样的缺陷,从物理异常(如断裂)到化学问题(如油性表面)。这些问题可能在制造、安装或安装后(例如,由于磨损、环境暴露等)发生。).这种问题通常需要尽快检测以避免随后的问题,或者被标记为待修复或被重新分类为较低质量等级,这取决于情况。

在涉及高精度组件的情况下,检测此类缺陷对于避免后续问题变得更加重要。一个这样的例子是制造空调(AC)单元的活塞,该活塞必须在严格的公差内制造,以使单元在现场可靠地运行。

随着工业物联网 (IIoT)和工业 4.0 越来越多地使用计算机视觉来分析和检测缺陷,我们受到启发,建立了一个图像识别模型,可以将 AC 活塞的图像分类为正常(即无缺陷)、油性/油腻或有缺陷(即破裂、变形或掉落)。这包括准备和处理训练数据,构建一个. csv 文件来将数据映射到分类,并在 PerceptiLabs 中迭代模型。

数据

对于这个模型,我们使用了来自这个 Kaggle 数据集的图像,这些图像代表了 AC 活塞的三种分类:

  • 缺陷 1 :破损、变形或掉落。
  • 缺陷 2 :有油渍、油污或锈迹。
  • 正常:正常、无缺陷活塞。

图 1 显示了一些正常交流活塞图像的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:来自描述正常 AC 活塞的训练数据集的图像。

我们对图像进行了预处理,将每个图像的大小调整为 80x80 像素的分辨率,并创建了一个. csv 文件,以将图像映射到标称分类值:0 表示缺陷 1 ,1 表示缺陷 2 ,2 表示正常。下面是一个部分的例子。csv 文件看起来:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将数据加载到感知实验室的. csv 文件示例,其中 0 表示缺陷 1,1 表示缺陷 2,2 表示正常。

车型总结

我们的模型只用了三个组件:

组件 1:卷积路径大小=3,步幅=2,特征映射=16

组件 2:密集激活= ReLU ,神经元=128

组件 3:密集激活= Softmax ,神经元=3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:percept ilabs 中的最终模型(图片来源percept ilabs)。

培训和结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3: PerceptiLabs 在训练时的统计视图(图片来源percept ilabs)。

我们用 32 个一批 25 个历元训练模型,使用 ADAM 优化器,学习率 0.001,交叉熵损失函数。

使用大约 21 秒的**训练时间,我们能够实现 100%的训练准确率和 98.25%的验证准确率。**在下面来自 PerceptiLabs 的屏幕截图中,您可以看到准确性如何在 25 个时期内提升到这些百分比,其中大部分提升仅发生在前六个时期内:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:精度图(图片来源 感知器 )。

与此同时,在前三个时期,损失下降最多:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:损失图(图片来源 感知器 )。

垂直应用

使用这种图像识别模型来发现缺陷可以在工业物联网( IIoT )应用中发挥关键作用,范围从机械到石油和天然气等。公司有可能使用它来自动检测缺陷,从而获得对资源的更多控制,减少缺陷,并优化他们的运营。

该模型本身也可以用作转移学习的基础,以创建检测其他类型缺陷的更高级的模型。

总结

这个用例是一个简单的例子,说明了如何使用 ML 通过图像识别来识别材料缺陷。如果你想在几分钟内建立一个类似的深度学习模型,运行 PerceptiLabs 并从 GitHub 获取我们预处理过的数据集的副本。

用例:使用图像识别的自动化天气分析

原文:https://towardsdatascience.com/use-case-automated-weather-analysis-using-image-recognition-c6b4659557ac?source=collection_archive---------26-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源

许多行业都需要识别当前和过去的天气状况。这些数据有助于他们计划、组织和/或优化运营。例如,农民可能会查看当前的天气来决定是否应该打开或关闭洒水装置。滑雪场经营者可能会根据山上不同的天气条件选择启用造雪机。建筑工人可能会计划好他们在一个偏远的工地需要的物资和雨具。

目前,做出这样的决定可能需要手动查看来自远程摄像机的视频,依赖天气预报,或者只是看着窗外。

通过提供一只数字眼,使用机器学习(ML)提供了自动化的潜力。更具体地说,如果可以建立图像识别 ML 模型来通过简单地查看天气图像来识别条件,则它可以部署在如上所述的场景中。例如,农场上的摄像机馈送可以由部署在边缘的物联网设备(例如,智能摄像机)上的 ML 模型来处理。然后,该模型可用于自动确定当前的天气状况,并相应地启用或禁用喷水阀。

为了演示这个用例,我们在 PerceptiLabs 中建立了一个模型,用于对四种不同类型的天气进行分类。我们使用了来自多类天气数据集的 1123 张图像进行图像分类:多云、晴朗、日出和下雨。

数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:来自描述不同天气条件的训练数据集的图像。

我们对图像进行了预处理,将每个图像的大小调整为 224x224 像素的分辨率,并创建了一个. csv 文件来将图像映射到它们各自的分类枚举。下面是一个部分的例子。csv 文件看起来:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将数据加载到 PerceptiLabs 的. csv 文件示例,其中 0 表示多云,1 表示下雨,2 表示晴天,3 表示日出。

型号总结

我们的模型仅由三个组件组成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ResNet50 可以在这里找到。ReLU 可以在这里找到。Softmax 可以在这里找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:感知器

训练及结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:感知实验室

我们使用 ADAM 优化器,学习率为 0.001,交叉熵损失函数,以 10 个历元为一批,每批 50 个来训练模型。

在大约四分钟的**训练时间内,我们能够实现 99.4%的训练准确率和 95.9%的验证准确率。**在以下来自 PerceptiLabs 的屏幕截图中,您可以看到准确度如何在 10 个时期内提升到这些百分比,其中大部分提升发生在前三个时期内:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:感知实验室

与此同时,在前五到六个时期,损失下降最多:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:感知实验室

垂直应用

使用图像识别自动识别当前天气状况的能力可以在工业物联网( IIoT )应用中发挥关键作用,从农业到石油和天然气等等。公司可以利用它来控制资源、节约能源和优化运营。

该模型本身也可以用作迁移学习的基础,以创建更高级的模型,检测其他天气条件,甚至分析给定的环境。

总结

这个用例是一个简单的例子,展示了 ML 如何通过图像识别来识别天气状况。如果你想在几分钟内建立一个类似的深度学习模型,运行 PerceptiLabs 并从 GitHub 获取我们预处理过的数据集的副本。

数据集鸣谢:Ajayi,Gbeminiyi (2018),“用于影像分类的多类天气数据集”,门德利数据,V1,doi: 10.17632/4drtyfjtfy.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值