TowardsDataScience-博客中文翻译-2020-一百一十七-

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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

基于空气质量传感器数据的时间序列模式识别

原文:https://towardsdatascience.com/time-series-pattern-recognition-with-air-quality-sensor-data-4b94710bb290?source=collection_archive---------5-----------------------

一个具有真实传感器数据的面向真实客户的项目

Marcin JozwiakUnsplash 上拍摄的照片

1。简介
2。探索性数据分析
2.1 模式变化
2.2 特征之间的相关性
3 .异常检测与模式识别
3.1 点异常检测(系统故障)
3.2 集体异常检测(外部事件)
3.3 聚类与模式识别(外部事件)
4 .结论
参考文献
附录—所选特征的散布矩阵
关于我

:详细的项目报告和本帖使用的数据集可以在我的 GitHub 页面找到。

1.介绍

这个项目是我为客户做的自由数据科学工作的一部分。不需要保密协议,该项目不包含任何敏感信息。因此,我决定展示该项目的数据分析和建模部分,作为我个人数据科学作品集的一部分。客户信息已被匿名化。

在该项目中,提供了两个数据集,每个数据集由一周的空气质量传感器读数组成。它们用于完成以下四项任务:

1.发现数据集中的异常以自动标记事件

2.将异常归类为“系统故障”或“外部事件”

3.从数据集中的模式中提供任何其他有用的结论

4.可视化数据集中要素的相互依赖关系

在本报告中,我将简要介绍我用于数据分析、特征关联可视化、自动标记“系统故障”和“外部事件”的机器学习技术以及我从数据中得出的发现的步骤。

2.探索性数据分析

我在这部分的代码和结果可以在这里找到。

数据集带有两个 CSV 文件,都可以从我的 GitHub 页面访问。我首先用 Python 将它们导入并连接成一个熊猫数据帧。除了我们感兴趣的 11 个特征之外,进行了一些重新排列以移除列:

  • 臭氧
  • 硫化氢
  • 总挥发性有机化合物
  • 二氧化碳
  • PM 1
  • PM 2.5
  • PM 10
  • 温度(内部和外部)
  • 湿度(内部和外部)。

在美国东部时间(GMT-4)时区,时间戳从 2020 年 5 月 26 日到 6 月 9 日(总共 14 整天)。通过减法,发现每个读数之间有不同的间隔,从 7 秒到 3552 秒不等。下面的表 1 中列出了前 5 个频繁的时间间隔,其中大多数都接近 59 和 60 秒,因此可以得出结论,传感器每分钟都在读取。然而,如果不涉及故意干扰,阅读间隔的不一致性可能值得研究,因为它可能会在未来的时间序列分析中造成麻烦。

表 1:传感器测量的前 5 个时间间隔

对于每个特征,时间序列数据处于不同的尺度上,因此为了更好的可视化和机器学习效率,它们被归一化。然后对它们进行绘图和视觉检查,以发现任何有趣的模式。

2.1 模式变化

一些特征似乎在特定时间点共享相似的模式变化。三个最重要的因素(外部温度、外部湿度和臭氧)如下图 1 所示。可以清楚地看到,用粉红色突出显示的区域倾向于具有平坦的信号,而未突出显示的区域是正弦曲线。

图 1:温度(外部)、湿度(外部)和臭氧的读数。它们在相同的时间点经历相似的模式变化。

根据常识,室外温度在中午达到最高点,并在晚上下降,我开始怀疑在这 14 天期间不同的测试环境的可能性。为了测试这个想法,从加拿大天气统计中查询多伦多天气数据[1]。温度和相对湿度被叠加,并与该数据集中的外部温度和湿度进行比较。该图如图 2 所示。可以看出,实际温度和湿度以正弦方式波动。温度和湿度读数的大部分与天气数据有很好的相关性,而用粉红色突出显示的区域保持相对不变。我没有获得任何关于测量环境的相关信息,但是从图中可以合理地推断出该装置在 14 天期间在室内和室外环境之间进行了重新定位。这也将在第 3.3 节的自动异常检测中进行测试。

图 2:温度(外部)和湿度(外部)与多伦多天气数据叠加。与其他区域相比,粉红色突出显示的区域保持相对不变。

2.2 特征之间的相关性

相关性是一种研究两个定量的连续变量之间关系的技术,以表示它们之间的相互依赖性。在不同的相关技术中,皮尔逊相关是最常用的一种,它测量两个变量之间的关联强度。其相关系数从-1 到 1,其中 1 代表最强的正相关,-1 代表最强的负相关,0 代表无相关。计算每对数据集之间的相关系数,并绘制成热图,如表 2 所示。所选特征的散点图也绘制在图中并附在附录部分。

首先要注意的是,PM 1、PM 2.5 和 PM 10 之间的相关性很高,这意味着它们总是以相同的方式波动。臭氧与二氧化碳负相关,与温度(内部)和温度(外部)正相关。另一方面,令人惊讶的是,在温度(内部)和温度(外部)之间没有发现任何显著的相关性,这可能是由于仪器具有优异的隔热性能。然而,由于没有提供相关知识,因此无法对这一发现的合理性做出结论。除臭氧外,温度(内部)也与二氧化碳、硫化氢和三种颗粒物指标呈负相关。相反,温度(外部)与湿度(内部)和三种颗粒物测量值正相关,而与湿度(外部)负相关,正如图 1 中的时间序列图所示。

表 2:特征间皮尔逊相关系数的热图。

3.异常检测和模式识别

在本节中,将基于数据集检查各种异常检测方法。数据没有标签,因此没有知识或分类规则来区分“系统故障”、“外部事件”和其他。也没有提供仪器和实验的任何细节。因此,我在这一部分的结果可能会偏离预期,但我会尽最大努力做出假设,定义问题,然后根据我的个人经验完成它们。该部分由三部分组成:点异常检测、集体异常检测和聚类。

3.1 点异常检测(系统故障)

点异常或全局异常值是那些完全在通常信号范围之外的数据点,没有任何近邻的支持。这通常是由人为或系统错误引起的,需要在数据清理过程中移除,以便在预测建模中获得更好的性能。在这个数据集中,通过假设“系统故障”等同于这种点异常,有几个特征值得研究,例如图 3 所示的例子。

图 3:自动标记之前(左)和之后(右)的时间序列信号。点异常(异常值)标记为红色。从上到下:湿度(内部)、总挥发性有机化合物和二氧化碳。

这里,从湿度(内部)到总挥发性有机化合物到二氧化碳,每一个都代表了点异常检测任务的独特复杂性。在第一个例子中,三个异常值位于 0 级,因此一个简单的布尔过滤器可以标记这些数据点。在第二种情况下,异常值明显偏离我们感兴趣的信号,因此可以使用线性阈值来分离出异常值。这两种情况都很容易实现,因为它们可以通过纯粹基于经验的方法来完成。当涉及到第三种情况时,不可能使用线性阈值来分离出异常值,因为即使它们偏离其邻居,这些值也可能不像在其他时间点的通常信号那样大。

对于这种情况,有很多方法可以处理。一种简单的方法是计算每个时间点的滚动平均值或中值,并测试实际值是否在通过从中心线加减一定波动范围计算的预测区间内。因为我们在处理异常值,所以滚动中位数更稳健,所以在这个数据集中使用。

图 4:放大的二氧化碳时间序列图,带有滚动中值和预测区间

从图 4 中可以更清楚地看到这种方法:基于滚动中值设置等距预测区间。这里,滚动窗口设置为 5,这意味着对于每个数据点,我们取其最近的四个邻居,并计算中位数作为预测的中心。则围绕中心填充 0.17 的预测间隔。任何外部点都被视为异常值。

使用这种方法检测点异常是简单而有效的。但是,它也有不足之处,在处理更复杂的数据时可能不够可靠。在该模型中,有两个参数:滚动窗口大小和预测区间大小,这两个参数都是通过给定数据的实验手动定义的。我们基本上解决了从情况 2 到情况 3 时遇到的问题,如图 3 所示,方法是根据时间对信号和异常值之间的分类边界启用自调整能力。然而,带宽是固定的,因此在点异常的定义随时间变化的情况下,它变得不太有用。例如,超级便宜机票的定义在正常工作日和假日季节可能完全不同。

这就是机器学习发挥作用的时候,模型可以从数据中学习,以便在时间发生变化时自行调整参数。它将知道在特定时间点何时数据点可以被分类为点异常或不被分类为点异常。然而,我不能为这个数据集在这个任务上构建这样一个有监督的机器学习模型,因为前提是有标记的数据,而我们的没有。我们仍然建议在未来沿着这条路走下去,因为有了这样的模型,无论系统或数据有多复杂,都会产生最准确的结果。

即使有监督的学习方法在这个任务中不起作用,也有无监督的学习技术是有用的,例如聚类,也在 3.3 小节中讨论。聚类可以通过使用相似性度量(如向量空间中数据点之间的距离)对未标记的数据进行分组。然后通过选择远离聚类中心的异常点来区分异常点。然而,为了在该数据集中使用聚类进行点异常检测,我们必须遵循这样的假设,即外部事件是用多个特征的范围来定义的,而不是分别对待每个单独的时间序列。关于这一点的更多细节将在以下两个小节 3.2 和 3.3 中讨论。

3.2 集体异常检测(外部事件)

如果我们将“系统故障”定义为点异常,那么“外部事件”有两个方向。其中之一是将其定义为出现在每个时间序列信号中的集体异常。集体异常的概念与点异常相反。点异常是与通常信号有很大偏差的不连续值,而集体异常通常是连续的,但值超出预期,如在某些时间点显著增加或减少。在这一小节中,所有 11 个特征被分别视为一个时间序列。接下来的任务是找出它们各自发生的突变。

对于这样的问题,一种典型的方法是调整时间序列预测的用法:我们可以将模型拟合到某个时间段之前,然后预测该时间段之后的值。然后将实际值进行比较,看它是否落入预测区间。它与前一小节中使用的滚动中值方法非常相似,但这里只使用了以前的时间点,而不是使用两个方向的邻居。

该模型也有不同的选项。像 SARIMA 这样的传统时间序列预测模型是一个很好的选择,但是该模型可能不够复杂,无法适应我在第 2.1 节和第 3.3 节中提到的“模式”。另一种选择是为时间序列训练一个监督回归模型,这种模型现在被广泛使用。

想法很简单:使用滑动窗口的概念从时间序列中提取特征,如表 3 和图 5 所示。滑动窗口大小(蓝色)设置为与所需的特征号 k 相同。然后,对于时间序列中的每个数据点(橙色),特征是从滞后 1 到滞后 k 之前的数据点值。因此,具有 N 个样本的时间序列能够被转换成 N-k 个观察值和 k 个特征的表。接下来,通过实现“正向链接”的概念,每个点由使用从指数 0 到 k-1 的观察值训练的回归模型预测。除了主回归模型之外,还训练了两个具有不同显著性水平的分位数回归变量来预测预测区间的上限和下限,这样我们就能够判断实际值是高于还是低于区间范围。

表 3:通过滑动窗口的特征提取算法

图 5:滑动窗口和正向链接的概念[2]。使用滑动窗口从时间序列中提取特征和目标。训练过程基于“正向链接”。

这个方法应用于给定的数据集,下面的图 6 显示了一个例子。为了加快训练速度,每小时对臭氧时间序列进行采样,提取特征,并使用 Scikit-Learn 将其输入三个梯度增强回归器模型(1 个主回归器和 2 个分位数回归器)。选择显著性水平,使得预测水平代表 90%的置信区间(在图 6 顶部显示为绿色)。然后将实际值与预测区间进行比较,并在图 6 底部用红色(意外增加)和蓝色(意外减少)标记。

图 6:通过应用分位数回归方法,用臭氧时间序列数据(每小时采样)标记结果。顶部:数据和预测区间;底部:带有显示在预测间隔之上或之下的标志的数据。

结果可能还不是非常令人印象深刻,因为围绕回归模型选择和超参数微调还需要做更多的工作。然而,它已经显示出应对这些突然增加和减少的能力。使用机器学习模型的一个好处是,当输入数据时,模型会自己学习和进化。从图 6 底部可以看出,最后三个山丘(大约 240 小时后)的标记点比之前的少。这不仅是因为幅度较小,而且是因为模型正在从以前的经验中学习,并开始适应“思想”,它现在处于“山区”,应预料到周期性波动。因此,不难得出结论,如果输入更多的数据实例,模型性能会越来越好。

除了这种分位数回归模型,深度学习模型如 LSTM 可能能够实现更好的性能。长短期记忆(LSTM)是一种专门的人工递归神经网络(RNN),由于其反馈连接的特殊设计,它是序列建模的最新选择之一。但是,设置和微调网络架构需要更长的时间和精力,这超出了本项目的时间限制,因此本报告中未将其作为可展示的内容。

另一方面,正如我在前面的章节中提到的,所提供的数据没有显示哪些数据点被认为是异常的标签。通过限制模型的选择和性能,它确实给本小节中讨论的集体异常检测任务带来了困难。未来如果提供一些标签,就变成了半监督或监督学习问题,这样就变得更容易达到更好的效果。

3.3 聚类和模式识别(外部事件)

正如我在上面 3.2 小节中提到的,识别“外部事件”可以从两个方向着手:一个是分别处理每个时间序列并监控传感器信号发生的任何意外变化,另一个是假设事件同时影响多个特征,这样我们希望通过查看不同特征中显示的独特特征来区分事件。在这种情况下,如果我们已经标记了数据,这将是一个常见的分类问题,但即使没有标签,我们仍然能够通过聚类来处理。

聚类是一种无监督的机器学习技术,它根据特征发现数据之间的相似性,并将相似的数据对象分组到聚类中。它可以作为一个独立的工具来深入了解数据分布,也可以作为其他算法的预处理步骤。有许多不同的聚类方法,这里我使用两种最常用的方法:K-Means 和 DBSCAN。

K-means 是用于聚类的划分方法之一。它将对象随机划分为非空子集,并不断添加新对象和调整质心,直到在优化每个对象和质心之间的距离平方和时达到局部最小值。另一方面,基于密度的噪声应用空间聚类(DBSCAN)是一种基于密度的方法,其中聚类被定义为密度连接点的最大集合[3]。

图 7:投影到前两个主成分的聚类结果。左:K-Means;右图:DBSCAN

图 8:投影到前 3 个主成分的聚类结果。左:K-Means;右图:DBSCAN

图 9:温度时间序列的聚类结果(外部)。左:K-Means;右图:DBSCAN

主成分分析(PCA)是一种降维技术,它创造了新的不相关变量,以增加可解释性和最小化信息损失。在本项目中,对标准化数据应用 K-means 和 DBSCAN 算法后,执行 PCA,并使用前 2 个和 3 个主成分在 2D(图 7)和 3D(图 8)中绘制聚类结果。此外,为了从另一个角度查看聚类结果,制作了带标签的时间序列图,温度(外部)图如图 9 所示。

从图中可以清楚地看出,这两种方法都能够区分我在第 2.1 节中提到的室内/室外模式变化。主要区别是基于划分的 K-means 方法对昼夜交替引起的星等变化更敏感。数据集中的许多变量都受到同时发生的这种明显的正弦变化的影响,包括温度(外部和内部)、湿度(外部和内部)和臭氧。k 均值倾向于区别对待波峰和波谷。另一方面,基于密度的 DBSCAN 不太关心星等差异,而是更关注密度分布。因此,它将整个正弦部分聚集成一个质量云,如图 7 和图 8 所示。

在现阶段不可能评论哪种聚类方法比另一种更好,因为它们有足够的独特性来满足不同的兴趣。如果我们对区别对待正弦信号的高低部分更感兴趣,我们将使用 K 均值;如果只想区分室内/室外模式,那么 DBSCAN 更好。另外,由于是无监督的学习任务,除了可视化和凭经验判断,没有办法量化模型之间的性能。在未来,如果提供一些标记数据,结果可以变成半监督学习任务,并且可以获得更多关于模型选择的直觉。

4.结论

在本文中,我将简要介绍探索性数据分析和相关性分析的方法和结果,以及用于点异常检测、集体异常检测和聚类的三种不同建模管道的构造。

在探索性数据分析部分,发现传感器读数时间间隔变化很大。即使它们中的大多数包含在一分钟左右,不一致性问题仍然值得研究,因为它可能会降低分析任务的效率和性能。我们发现测量环境受时间序列图变化的影响,后来通过与实际的多伦多天气数据以及聚类结果保持一致而得到保证。此外,还对特征之间的相关性进行了研究和举例。出现了一些困惑,如温度(内部)和温度(外部)之间的奇怪关系,这需要通过实验或设备本身来研究。

在异常检测部分,由于“系统故障”和“外部事件”没有明确定义,我将项目分成三个不同的任务。点异常被定义为严重偏离和不连续的数据点。这里使用了滚动中值方法来成功地自动化标记这种点异常的过程。另一方面,集体异常被定义为偏离的数据点集合,通常被视为突然增加或减少。这项任务是通过从时间序列数据中提取特征,然后训练回归模型来完成的。还使用 K-mean 和 DBSCAN 对数据集执行聚类,这两种方法都发挥了它们的优势,并通过利用它们相似和不相似的特征成功地对数据进行聚类。

本项目中介绍的所有异常检测模型都只是原型,没有广泛的模型部分和微调。如果付出更多的努力,并通过获得更多的数据知识,它们中的每一个都有很大的潜力进化成更好的形式。对于点异常,有更多基于机器学习的异常检测技术,如隔离森林和局部异常因子,以适应更复杂的数据形式。对于集体异常,最先进的 LSTM 值得投入精力,特别是在时间序列数据和序列建模方面。对于聚类来说,还有许多其他的方法,比如层次聚类和基于网格的聚类。他们有能力获得类似的出色表现。

当然,这些未来的方向都是在没有标注数据的前提下建议的。如果有经验的工程师或科学家能够就哪些类型的数据被视为“系统故障”或“外部事件”给出他们的见解,那么通过将任务转化为半监督或监督学习问题,肯定会取得更令人兴奋的进展,届时将有更多的工具可供选择。

感谢您的阅读!如果你喜欢这篇文章,请关注我的频道和/或 成为我今天的推荐会员 (非常感谢🙏).我会继续写下去,分享我关于数据科学的想法和项目。如果你有任何问题,请随时联系我。

[## 通过我的推荐链接加入 Medium 周(乔)徐

阅读周(Joe)徐(以及媒体上成千上万的其他作家)的每一个故事。您的会员费直接支持…

zhouxu-ds.medium.com](https://zhouxu-ds.medium.com/membership)

关于我

我是赛诺菲的数据科学家。我拥抱技术,每天都在学习新技能。欢迎您通过媒体博客LinkedInGitHub 联系我。我的观点是我自己的,而不是我雇主的观点。

请看我的其他文章:

参考

[1]加拿大天气统计:https://www.weatherstats.ca/

[2]时间序列机器学习框架:https://towards data science . com/Time-Series-Machine-Learning-regression-Framework-9ea 33929009 a

[3] J. Han,M. Kamber 和 J. Pei,数据挖掘:概念和技术,2011 年第 3 版。

附录—所选特征的散布矩阵

超越测试数据的时间序列预测

原文:https://towardsdatascience.com/time-series-prediction-beyond-test-data-3f4625019fd9?source=collection_archive---------3-----------------------

许多(如果不是全部的话)与时间序列预测相关的例子仅用于测试数据,缺乏如何预测真实未来日期的例子。这个简单的例子展示了如何在测试数据集之外进行预测。

来源:Pixabay

我当时的任务是构建一个大规模时间序列预测解决方案。我最终在单一解决方案中使用了多种方法的组合——预言家、ARIMA 和 LSTM 神经网络(运行在 Keras/TensorFlow 之上)。使用 Prophet ( 用 Flask 提供 Prophet 模型—预测未来)和 ARIMA 可以直接计算未来日期的预测,两者都提供了返回给定未来范围的预测的函数。如果你是新手,LSTM 的情况就不一样了——这将需要大量的时间来研究如何预测真实的未来日期(大多数例子只展示了如何根据测试数据集进行预测)。

我发现了一个很好的例子,它帮助我解决了我的任务——一个使用长短期记忆(LSTM)网络进行时间序列预测的快速例子。在这篇文章中,我将展示如何预测洗发水销售月度数据,主要基于上面例子中的代码。

可以从 Kaggle 下载一个包含洗发水月销售数据的数据集

LSTM 模型是用 TensorFlow 2.0 和 Keras 建立的。

首先,我们需要获取和解析时间序列数据:

def parser(x):
    return pd.datetime.strptime('190'+x, '%Y-%m')df = pd.read_csv('shampoo.csv', parse_dates=[0], index_col=0, date_parser=parser)
df.tail()

对于 LSTM 模型训练,必须对数据进行缩放,这是通过来自 sklearn 库的 MinMaxScaler 完成的:

train = dfscaler = MinMaxScaler()
scaler.fit(train)
train = scaler.transform(train)

时间序列预测是一项序列预测任务。日期对于 ML 算法来说并不重要,它试图识别过去和未来数据之间的依赖模式。有许多方法可以将原始序列数据转换成适合 LSTM 神经网络训练的数据。我更喜欢使用 Keras TimeseriesGenerator(在这里阅读更多信息— 如何在 Keras 中使用 TimeseriesGenerator 进行时间序列预测)。我们将预测 12 个月的洗发水销售额,因为这将使用过去 12 个月的时间窗口来确定预测:

n_input = 12
n_features = 1
generator = TimeseriesGenerator(train, train, length=n_input, batch_size=6)

LSTM 模特培训。对于输入和目标,我们将使用整个时间序列数据集,模型将在整个数据集上进行训练。这将允许为训练集中可用的最后日期之后的日期生成预测:

model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_input, n_features)))
model.add(Dropout(0.15))
model.add(Dense(1))optimizer = keras.optimizers.Adam(learning_rate=0.001)
model.compile(optimizer=optimizer, loss='mse')history = model.fit_generator(generator,epochs=100,verbose=1)

一旦模型训练完毕,我们就可以生成未来日期的预测。这里的想法是——使用最近的 12 个步骤,为未来的一个步骤生成一个预测。向数组中添加新的预测,从同一数组中删除第一个条目,并用 12 步的更新数组预测下一步。

pred_list = []batch = train[-n_input:].reshape((1, n_input, n_features))for i in range(n_input):   
    pred_list.append(model.predict(batch)[0]) 
    batch = np.append(batch[:,1:,:],[[pred_list[i]]],axis=1)

创建包含未来月份的数据框,我们将为这些月份分配计算的预测数据:

add_dates = [df.index[-1] + DateOffset(months=x) for x in range(0,13) ]
future_dates = pd.DataFrame(index=add_dates[1:],columns=df.columns)

创建包含日期和预测数据的数据框。最后,与训练数据框架合并,以绘制显示训练数据和真实未来预测的图表:

df_predict = pd.DataFrame(scaler.inverse_transform(pred_list),
                          index=future_dates[-n_input:].index, columns=['Prediction'])df_proj = pd.concat([df,df_predict], axis=1)

结果显示为 Plotly:

plot_data = [
    go.Scatter(
        x=df_proj.index,
        y=df_proj['Sales'],
        name='actual'
    ),
    go.Scatter(
        x=df_proj.index,
        y=df_proj['Prediction'],
        name='prediction'
    )
]plot_layout = go.Layout(
        title='Shampoo sales prediction'
    )
fig = go.Figure(data=plot_data, layout=plot_layout)
pyoff.iplot(fig)

预测的真实未来销售额,以黄色显示:

源代码可以在 GitHub 上获得。

Python 中的时间序列处理

原文:https://towardsdatascience.com/time-series-processing-in-python-32a8d085e6e5?source=collection_archive---------42-----------------------

第一部分:使用熊猫的基本分析

Ales KrivecUnsplash 上拍摄的照片

时间序列是一段时间内的一系列值。旧金山过去 30 天的日平均气温就是一个例子。

时间序列出现在各行各业,从天气到经济到产品销售到健康指标。

为什么要分析时间序列?因为这可以揭示趋势和其他模式。从中可以预测未来的价值。

这篇文章通过一个简单的运行和发展的例子,介绍了 Python 中 Pandas 库中处理时间序列的各种特性。

熊猫时间序列特征可以分为两类:时间序列中的值的特征和这些值后面的时间指数的特征。本帖涵盖前者。后者本身就是一个完整的主题,将在后续的帖子中讨论。

示例设置:温度

要开始使用熊猫,只需

import pandas as pd

接下来,让我们创建我们的第一个时间序列。

temps = pd.Series([70,75,65,70,75,70,30, 100, 80,72,76,79,85,76,81,69, 78])

temps想象成存储旧金山连续几天的日平均温度。日期隐含在索引中 t = 0,1,2,…

Pandas 支持更精细的时间指数。例如,我们可以存储 temps 封面的实际日期。我们不会在这里讨论这些。因此,我们可以将重点放在值的操作上,这些值有很大的变化。

温度最小值、最大值、平均值、可变性

temps的平均(或最低或最高)温度是多少?简单:只需做temps.mean()temps.min()temps.max()。气温波动有多大?Do: temps.std()获得数量感。它会给出标准差。

让我们从数据中感受一下。temps.mean()返回约 73.58。这接近于人们仅仅通过观察数据所猜测的。temps.min()temps.max()分别是 30 和 100。范围很广。

temps.std()返回约 13.74。因此,大多数温度徘徊在平均值的 13 度以内——正负。我们一眼就能看出这一点。

另一种方法是通过计算第 5 和第 95 个百分点,这可以被认为是 min 和 max 的软化。temps.quantile(0.05)为 58.0,temps.quantile(0.95)约为 88。所以这也给了我们一个相似的范围。

接下来,让我们给temps添加一个异常值,看看它如何影响我们的分析。这种异常值可能是由数据输入错误引起的。

temps_with_outlier = pd.Series([70,75,65,70,75,70,30, 100, 80,72,76,79,**10000**,85,76,81,69, 78])

我们看到temps_with_outlier.mean()是一个巨大的 625.055!而temps_with_outlier.std()安,更是高达 2339.715!由此得出的教训是,无论是均值还是标准差,对异常值都不稳健。

统计学家建议,在这种情况下,我们应该使用中位数和平均绝对偏差(mad)来代替。它们是对异常值稳健的均值和标准差版本。temps_with_outlier.**median**()是 75.5。哇!temps_with_outlier.**mad**()是 1041.66。有点帮助。不够。经验教训:一定要用中位数。

从华氏温度转换到摄氏温度

你可能已经猜到我们的温度目前是华氏温度。怎样才能让这些进入摄氏温度?不多。

temps_celcius = (temps-32)*5/9

相当多的事情发生在幕后。首先,从temps中的每个值中减去 32,得到一个新的时间序列。接下来,结果时间序列中的每个值都乘以 5/9。

关联邻近城市的温度

接下来,让我们根据旧金山的估计温度虚构一个圣何塞的估计温度时间序列(尽管是真实的)。

temps_sj = temps + 10

这里的想法是,圣何塞往往比旧金山暖和几度,因为它远离海洋,在一个避风的山谷里。

我们注意到tempstemps_sj是相关的,即它们一起移动。在任何一天,temps_sj中的值总是比 temps 中的值高 10 度。

这让我们不禁要问:如何度量同一时间点上的两个时间序列是相关的?在探讨这个之前,我们先设置一个“控制”。这将与温度无关。所以我们可以衡量我们的措施有多有效。通过比较tempstemps_sj相对于temps和控制的公式相关性。

import random
temps_random = pd.Series(random.sample(range(58,88),len(temps)))

这里发生了很多事。我们来解释一下。

random.sample(range(58,88),len(temps))从 58 到 88 的范围内独立均匀地采样len(temps)值。我们试图近似我们在temps中看到的数值范围,同时平均分配这些数值。这就是为什么tempstemps_random有相似的值,只是它们不相关。

提出相关性度量的第一个合理尝试是将这两个时间序列的各个部分相乘,以产生一个新的时间序列。然后对这个时间序列中的所有值求和。让我们来看看实际情况。先应用到tempstemps_sj上吧。

m = temps*temps_sj
m.sum()

m中的前两个值是 5600 和 6375。5600 等于temps[0]*temps_sj[0],6375 等于temps[1]*temps_sj[1]

*操作也称为点积。

m.sum()等于 107593。价值大。我们不知道这是怎么回事。这就是控制权的来源。如果我们的相关性度量很好,如果我们用temps_random代替temps_sj,那么m.sum()的值应该会低得多。

(temps*temps_random).sum()等于 88480。所以确实低了,意料之中!也就是说,它应该更低,对不对?

嗯,让我们试试不同的东西。在进行点积之前,让我们先将tempstemps_random分别居中。随着代码变得越来越复杂,让我们把它封装成一个函数。

def centered_dot_product(time_series_1,time_series_2):
    ts1_centered = time_series_1- time_series_1.mean()
    ts2_centered = time_series_2- time_series_2.mean()
    return (ts1_centered*ts2_centered).sum()

centered_dot_product(temps,temps_sj)返回 3024.11,而centered_dot_product(temps,temps_random)返回-414.58。那好多了。区别更加明显。

为什么前者效果不好?因为在所有的时间序列中,大部分温度都在 58 到 88 度之间。点积发现了这种相似性。先定中心“减去”这种相似性,这样得到的测量结果可以不关注时间序列中的值,而是关注它们如何共变

我们可以在这个指标上进一步改进,但我们不会。我们希望涵盖其他功能。

发现温度异常值

考虑一下temps_with_outlier。以前我们用它来说明处理异常值的统计数据。在这里,我们研究如何找到离群值。

我们已经将发现异常值封装到一个函数中。它的代码有点复杂。我们建议先读一遍,然后看看我们接下来的解释,如果你还有点不清楚的话,可能还会再读一遍。

def outliers(time_series,lowp,highp):
   low = time_series.quantile(lowp)
   high = time_series.quantile(highp)
   in_range = time_series.between(low,high)
   outliers = []
   for t,v in in_range.items():
      if not v:
          outliers.append([t,time_series[t]])
   return outliers

在解释幕后发生的事情之前,让我们打个电话给它,看看它会有什么回报。此外,这也给了我们一个解释参数lowphighp的机会。

outliers(temps_with_outlier,0.01,0.99)返回[[6,30],[12,10000]]。这表明温度 30 和 10000 被视为异常值,分别出现在时间点 6 和 12。有道理!

我们在决定什么是离群值时有多严格?这是由分位数的下限和上限指定的,我们在此图中选择的值是 0.01 和 0.99。提高下限和降低上限将放宽离群值标准。让我们看看这是如何运作的。

outliers(temps_with_outlier,0.1,0.9)返回[[2,65],[6,30],[7,100],[12,10000]]。在我们之前的异常值列表中又增加了两个:65 度和 100 度。新发现的可能被合理地解释为分别是“异常冷”和“异常热”。

不错。

气温上升了吗?

考虑temps的以下变体:

temps = pd.Series([60,65,62,68,65,67,70,67,73,67,75,66,77,69,77,69,79])

你看到了什么?气温呈上升趋势。通过适当区分时间序列,可以使这种趋势更加生动。让我们看看这个效果如何。

首先尝试temps.diff(1)。这导致了temps中一步差的时间序列。即:NaN,temps[1]-temps[0],temps[2]-temps[1],…第一个值是 NaN,因为temps[-1]未定义。

nan 5.0 -3.0 6.0 -3.0 2.0 3.0 -3.0 6.0 -6.0 8.0 -9.0 11.0 -8.0 8.0 -8.0 10.0

嗯,还没那么生动。让我们试试temps.diff(**4**)。这导致了temps中 4 步差的时间序列。结果中的第个条目是temps[i]-temps[i-4]

nan nan nan nan 5.0 2.0 8.0 -1.0 8.0 0.0 5.0 -1.0 4.0 2.0 2.0 3.0 2.0

好多了!趋势暴露了。

让我们做temps.diff(4).mean(),这导致了 3.0。这可以被解释为平均每 4 天气温升高 3 度。

让我们看看通过不同的计算得到了什么:temps.diff(10).mean()给出了 7.85。请注意,3.0/4 大致等于 7.85/10。换句话说,两者都表明平均气温每天上升约 0.75 度。不错。

温度上升的百分比是多少?

假设我们想知道temps每天的平均百分比增长。熊猫里的shift操作员会在这里帮忙。

我们将逐步构建我们的解决方案,因为它有点复杂。让我们从temps.shift(4)开始。这产生了一个版本的temps,其中时间移动了 4 步。下面是原始版本和转换后的版本

**Original**: 60 65 62 68 65 67 70 67 73 67 75 66 77 69 77 69 79
**Shifted**: nan nan nan nan 60.0 65.0 62.0 68.0 65.0 67.0 70.0 67.0 73.0 67.0 75.0 66.0 77.0

我们选择移动 4 步,因为这 4 步的差异在之前对相同的数据进行了很好的计算。

另外,注意temps — temps.shift(4)相当于temps.diff(4)

我们最后的表达是

100.0*(temps-temps.shift(4))/temps.shift(4)

将时间序列temps-temps.shift(4)除以时间序列temps.shift(4)得到分数变化的时间序列。(请注意,这种划分是针对组件的。)乘以 100.0 以百分比表示。

消除温度波动

均线是对时间序列的一种重要操作。它产生一个新的时间序列,其值是前一个时间序列中相邻值的平均值。这具有消除瞬时波动的效果。

认为

temps = pd.Series([60,65,62,68,65,67,70,67,73,67,75,66,77,69,77,69,79])
temps_smoothed = temps.rolling(2).mean()

我们先来看结果,在temps_smoothed

nan 62.5 63.5 65.0 66.5 66.0 68.5 68.5 70.0 70.0 71.0 70.5 71.5 73.0 73.0 73.0 74.0

哇——这些绝对是平滑的!它们更生动地揭示了上升趋势。

现在让我们来解释一下幕后发生了什么。告诉熊猫建造宽度为 2 的滚动窗户。mean()然后计算窗口中的平均值。这个滚动过程产生平滑的时间序列。

默认情况下,窗口在右边,不居中。我们可以通过检查结果来推测这一点。注意temps_smoothed[1]是 62.5,是temps[0]的平均值,是 60,temps[1]是 65。

时间序列、信号和傅立叶变换

原文:https://towardsdatascience.com/time-series-signals-the-fourier-transform-f68e8a97c1c2?source=collection_archive---------8-----------------------

未来文章的介绍和入门

在我接下来的三篇文章中,我将介绍和讨论傅立叶和小波变换,它们提取了一个量如何随时间振荡的信息。这些方法几乎有无数的应用,我在这里描述了其中的一些。

示例代码 链接可以在下面的“参考资料”部分找到。

时间序列

毫无疑问,每个人都熟悉时间序列,即使你没有听说过这个术语。一个时间序列仅仅是一组按时间排序的值。例如,股票指数价格,在你最喜欢的新闻网上通常被描绘成价格与时间的关系图。另一个例子是 7 天预报,显示几天内的高温。时间序列是表示数据的一种自然方式。

纳斯达克指数价格随时间变化是一个熟悉的时间序列。图片来自谷歌搜索“纳斯达克”。

7 天预报中的最高和最低温度形成一个时间序列。图片来自谷歌搜索“天气”。

信号

信号是一种时间序列。更具体地说,信号是代表物理事件的时变量。信号的两个基本属性是:振幅和频率。信号的幅度是其大小,例如音频信号的响度。信号的频率表征了它在时间上的振荡,例如吉他发出的音调。

音乐的音频信号波形。信号是立体声混音的左半部分。图片作者。

不言而喻,当从连续信号(数量的无限集合)到离散信号(数量的有限集合)时,信息会丢失。因此,离散信号通常是连续信号的近似。例如,考虑捕捉办公室中的温度波动来运行 HVAC 系统。在任何时候,办公室都会有一些平均环境温度。假设每小时用一套温度计测量这个温度。这种测量会产生一个离散的信号,近似于办公室中真实的温度波动。有理由怀疑这些每小时的温度记录会导致空调不良,因为温度可能会在比一小时小得多的时间尺度上变化。如果是,应该多久测量一次温度?使用奈奎斯特定理正式回答了这个问题。为了可靠地捕获连续信号,记录信息的速率(称为采样速率)必须是目标信号频率的两倍。这就是为什么音频通常以 44,100 Hz 采样,因为人类听觉的上限约为 20,000 Hz。

实际上,从环境中获取有意义的信息可能并不那么简单。真实世界的信号通常是非周期性的、有噪声的,并且受多种来源的影响。从这些信号中提取有用的信息是信号处理的基本目标。

傅立叶变换

傅立叶变换的定义。还存在其他一些因前置因子而不同的约定。图片作者。

信号处理的核心是傅立叶变换。FT 将函数分解成正弦和余弦即波。理论上,任何函数都可以用这种方式表示,即表示为不同振幅和频率的(可能是无限的)正弦和余弦函数之和。下面给出一个玩具例子。代码可以在随附的 GitHub repo 找到。

玩具示例信号。图片作者。

玩具的构成频率举例:换句话说,玩具信号可以表示为频率为 1 和 2 Hz 的 2 个正弦函数之和。图片作者。

玩具信号的单侧功率谱:对应于信号分解成两个正弦函数,在 f=1 和 2 Hz 处出现两个幅值相等的显著峰值。图片作者。

应用程序

傅立叶变换在频谱分析、解微分方程和 A/V 制作中有无数的应用。

音频制作

均衡(EQ)是音频制作的重要组成部分。特定频率范围的音量可以调高或调低,从而改变音频的声音。EQ 的一个基本用途是从音频文件中去除背景噪音。

顶部面板显示音频信号。底部面板显示均衡器,它增加或减少频率范围的增益。图片作者。

脑电图

脑电图是一种记录大脑电活动的技术。EEG 的频谱分析被广泛使用,即通过成分频率能量检查信号。EEG 中广泛使用的频带约定如下。

脑电图中常用的频带。图片作者。

结论

时间序列和信号是组织数据的自然方式。傅立叶变换提取嵌入在数据中的频率信息。这种方法在音频工程、物理和数据科学等领域有无数的用例。对于实际应用,傅立叶变换通过快速傅立叶变换(FFT) 算法进行离散化并提高计算效率。FFT 将在我的下一篇文章中讨论。

资源

更多系列 : FFT | 小波变换

连接 : 我的网站 | 预定电话 | 消息我

社交:YouTube|LinkedIn|Twitter

支持 : 给我买杯咖啡 ☕️ | 成为会员 ⭐️

[## 通过我的推荐链接加入媒体——肖文·塔莱比

⭐️成为会员使用我的推荐链接,并获得充分的媒体上的每一篇文章。您的会员费直接…

shawhin.medium.com](https://shawhin.medium.com/membership)

时间序列平滑以实现更好的聚类

原文:https://towardsdatascience.com/time-series-smoothing-for-better-clustering-121b98f308e8?source=collection_archive---------24-----------------------

机器学习的金融序列处理

莱蒂·施密在 Unsplash 上拍摄的照片

在时间序列分析中,脏的和杂乱的数据会改变我们的推理和结论。这是真的,尤其是在这个领域,因为时间依赖在处理时间序列时起着至关重要的作用。

噪声或异常值必须按照特定的解决方案小心处理。在这种情况下, tsmoothie 软件包可以帮助我们在准备时间序列进行分析时节省大量时间。 Tsmoothie 是一个用于时间序列平滑和异常值检测的 python 库,可以以矢量化的方式处理多个序列。它很有用,因为它可以提供我们需要的预处理步骤,如去噪或剔除异常值,保留原始数据中的时间模式。

在本帖中,我们使用这些小玩意来改进聚类任务。更准确地说,我们试图通过一种无监督的方法来识别财务数据中的一些变化。最后,我们将期望指出收盘价中的清晰模式,这些模式可用于检查市场的隐藏行为。

数据

如前所述,我们操作金融时间序列。有许多工具或预制数据集可以提供和存储金融数据。对于我们的目标,我们使用从 Kaggle 收集的数据集。2000–2018 年的股票数据是从 2000 年到 2018 年大约 39 只不同股票的股票价格的清理集合。它每天报告成交量、开盘价、最高价、最低价和收盘价。我们关注接近的价格。

出于演示的目的,我们考虑亚马逊的股票价格,但同样的发现也出现在其他股票信号中。

亚马逊收盘价历史和分布

时间序列平滑

我们工作流程的第一步包括时间序列预处理。我们的策略非常直观有效。给定收盘价的时间序列,我们把它分成小的滑动块。然后对每个片段进行平滑处理,以去除异常值。平滑过程对于减少我们系列中出现的噪声和指出可能随时间推移出现的真实模式是必不可少的。

Tsmoothie 为我们的目的提供了不同的平滑技术。它还具有内置的实用程序来运行滑动平滑方法。原始时间序列被分割成相等的窗口片段,然后被独立地平滑。我们选择局部加权散点图平滑(洛斯)作为平滑过程。

LOWESS 是一种强大的非参数技术,通过单变量或多变量平滑来拟合给定数据的平滑线。它对移动范围内的点集合进行回归,并根据横坐标值周围的距离进行加权,以计算序数值。平滑参数(α)的选择通常完全基于“重复试验”的基础。没有特定的技术来选择它的精确值。特定值的选择可能导致“过平滑”或“欠平滑”。

下面是应用上述程序的结果,滑动窗口长度为 20 天,且α等于 0.6。换句话说,我们正在为每个生成的窗口计算一个 LOWESS。

AMZN 股票价格的第一个平滑窗口

时间序列聚类

第二步包括使用聚类算法来识别我们的时间序列中的行为。创建等长窗口旨在轻松解决这一任务。

一般来说,将不同的时间序列聚类到相似的组中是具有挑战性的,因为每个数据点都遵循一个时间结构,为了获得满意的结果,我们必须遵守这个时间结构。标准聚类算法中使用的距离度量,如欧几里德距离,通常不适用于时间序列。一个更强的方法是用比较时间序列的度量代替默认的距离度量,例如动态时间扭曲

使用 K-均值和动态时间弯曲度量搜索 4 个聚类产生以下结果:

带平滑的缩放聚类中心和相关样本

正如我们所看到的,很明显产生了 4 个不同的集群,代表了 4 种不同的市场运动:上升趋势(集群 0 )、下降趋势(集群 1 )、下降转折点(集群 2 )、上升转折点(集群 3 )。我们可以在不计算平滑度的情况下对原始时间窗口做同样的事情,并进行比较。

缩放的聚类中心和相关样本没有平滑****

现在这四组之间的差异并不明显。对生成的集群进行解释更加困难。从聚类算法中生成有意义的组的能力是任何无监督方法的更重要的先决条件。如果我们不能做出解释,结果就不能用来做决定。在这个意义上,采用平滑预处理可以帮助分析。

AMZN 收盘价和相应的窗口簇。通过平滑获得聚类

摘要

在金融领域,波动性的概念是决策的基础。它衡量市场中存在的不确定性,即风险。在这里,我们更深入地扩展了短期市场机制的概念。我们确定了四个明确的市场条件,平滑我们的时间序列块,以更好地理解数据的真实动态。在本文中,我们利用了金融聚类应用程序中的时间序列平滑,但这种方法在其他一些涉及时间序列分析的竞赛中也是有效和有用的。

查看我的 GITHUB 回购

保持联系: Linkedin

时间序列平滑用于更好的预测

原文:https://towardsdatascience.com/time-series-smoothing-for-better-forecasting-7fbf10428b2?source=collection_archive---------13-----------------------

降低传感器中的噪声,以更好地预测太阳能电池板的发电量

亚历山大·埃里明在 Unsplash 上的照片

在时间序列预测中,脏的和杂乱的数据的存在会损害最终的预测。这是真的,尤其是在这个领域,因为时间依赖在处理时间序列时起着至关重要的作用。

噪声或异常值必须按照特定的解决方案小心处理。在这种情况下, tsmoothie 软件包可以帮助我们在准备时间序列进行分析时节省大量时间。 Tsmoothie 是一个用于时间序列平滑和异常值检测的 python 库,可以以矢量化的方式处理多个序列。它很有用,因为它可以提供我们需要的预处理步骤,如去噪或剔除异常值,保留原始数据中的时间模式。

在本帖中,我们用这些小玩意来改进预测任务。更准确地说,我们试图预测太阳能电池板的日发电量。最后,我们将期望从我们的去噪过程中受益,并产生比没有预处理的情况更好的预测。

数据

Kaggle 上有一个用于我们目的的真实数据集。该数据存储了安装在私人住宅屋顶上的太阳能电池板的日发电量。数据自 2011 年开始记录,以时间序列格式呈现 3 个不同的来源:

  • 房子每天的煤气消耗量。
  • 房子的日常用电量。其中负值表示太阳能超过了当地的电力消耗。
  • DC 到交流转换器上功率计的每日值。这是目前累积的太阳能电力。我们不需要累计值,而是需要每日的绝对值,因此,我们进行简单的微分运算。这是我们的预测目标。

正如我们从 raw 系列的图中可以注意到的,存在大量噪声。这对于传感器记录的数据来说是正常的。如果我们的数据源受到外部气象条件的影响,或者如果传感器质量不好,并且位于非最佳位置,情况会更糟。

幸运的是,我们有知识和工具来实现我们预测任务的良好结果。

时间序列平滑

我们工作流程的第一步包括时间序列预处理。我们的策略非常直观有效。我们获取目标时间序列(发电量),并用一个神奇的工具对其进行平滑:每个数据科学家都必须知道的卡尔曼滤波器

一般来说,在时间序列任务中使用卡尔曼滤波器的最大优点是可以使用状态空间形式来表示未观察到的组件模型。以状态空间形式表示时间序列模型的范围是一组通用算法(包括卡尔曼滤波器)的可用性,用于高斯似然的计算,其可以在数值上最大化以获得模型参数的最大似然估计。著名的软件使用这种表示来拟合像 ARIMA 这样的模型并不是偶然的。在我们的特殊情况下,我们使用卡尔曼滤波器和状态空间表示来建立一个未观察到的组件模型。

到目前为止,所有这些解释听起来都很棘手,但我想向您保证…Tsmoothie可以轻松地构建未观察到的组件模型,以非常简单有效的方式操作自定义卡尔曼平滑。在这个阶段,我们可以释放我们的想象力,从水平、趋势、季节性、长期季节性中检测哪些成分有助于创建我们正在观察的时间序列。365 天的水平长季节性对我们来说听起来不错。我们只需为每个组件假设添加一个“置信度”,就完成了。

对所有系列进行卡尔曼平滑(仅用于视觉目的)。我们只使用平滑的目标

得到的平滑时间序列保持原始数据中存在的相同时间模式,但是具有一致且合理的噪声降低。

****专业提示:如果我们的系列出现 NaNs,这不是问题,这个过程非常有效,它是一个非常强大的工具,可以填补我们数据中缺失的空白…这就是卡尔曼平滑的魅力。

时间数列预测法

第二步是建立一个神经网络结构来预测未来几天的发电量。首先,我们在原始数据上拟合一个模型,其次,我们尝试在平滑的序列上拟合。平滑数据仅用作目标变量,所有输入序列保持原始格式。平滑标签的使用旨在帮助模型更好地捕捉真实模式并丢弃噪声。

我们选择 LSTM 自动编码器来预测未来 5 天的发电量。使用keras-hype tune执行训练程序。该框架以非常直观的方式提供了神经网络结构的超参数优化。我们对一些参数组合进行网格搜索。所有涉及的两项培训都是如此。

基线只是现值的重复

我们可以想象,预测误差是时间范围的函数。第二天的预测比未来五天的预测更准确。重要的一点是,就所有时间预测范围的预测精度而言,平滑过程提供了很大的好处。

对未知测试数据的预测

摘要

在这篇文章中,我们利用了预测场景中的时间序列平滑。我们应用卡尔曼滤波器来平滑我们的原始数据并减少噪音的存在。这一选择被证明在预测准确性方面是有利的。我还想指出卡尔曼滤波器在这一应用中的强大功能,以及它在构建未观察到的组件模型时成为一种良好工具的能力。

查看我的 GITHUB 回购

保持联系: Linkedin

是时候改变了(数据)—使用 Pivot 和 Python,借助 Power BI 跟踪您的个人财务状况。

原文:https://towardsdatascience.com/time-to-change-data-track-your-personal-finance-with-power-bi-using-pivot-and-python-5839a6f804e7?source=collection_archive---------5-----------------------

采用微软 POWER BI 的数据科学

一种使用 python 在 Power BI 中实现完全动态透视的方法,同时还可以享受跟踪个人财务的乐趣

在 Power BI 中学习一些关于 pivot 和 python 的新知识,同时构建一种更好的方法来跟踪您的个人财务状况,这不是很好吗?

如果你想要这个仪表盘👇那么这个故事是给你的!

个人财务仪表板

除了有趣的部分,我们还学到了以下内容:

  • 如何在 Power BI 中进行透视,同时保持所有列完全动态,使添加新数据变得容易,而无需接触我们的模型。
  • 动态检测 Power BI 中的数据类型,并使用自定义函数转换列。
  • 在 Power BI 中使用 Python 清理和转换数据。

数据

从我的 Github 库下载样本数据。

[## sebastian zolg/动力枢轴 bi

github.com](https://github.com/sebastianzolg/dynamic-pivot-in-powerbi)

让我们快速浏览一下我们的数据。

在 Excel 中打开 personal-spendings.xlsx 文件,注意它的简单结构。这样做的目的是让你从不同的地方添加数据变得容易,比如你的银行账户或者你正在做的任何项目。

您可以随意添加任意多的细节,但是输入数据要简单,这样跟踪数据就不会太难。我们让权力 BI 为我们做繁重的工作。

在枢轴上转动

Pivot 是将我们的数据维度转换为新形式的过程。在我们的例子中,我们希望初始的类别作为一个特征矩阵,以数量作为值。

将左侧数据集透视到右侧数据集

Power BI 中的 pivot 面临的挑战是在初始建模之后引入新标签(列)所需的工作。

这是因为 Power BI 通过名称静态引用列和其他元素。这迫使我们每次推出新品类时都要接触我们的模型。我们需要一个解决方案!

构建我们的模型

在 Power BI 中,点击获取数据,选择 Excel ,点击连接。从我的 Github 存储库中打开样本数据,或者选择您自己的数据集。

选择财务电子表格,查看数据并点击转换

第一步,我们将列转换成一个单独的日期列。

选择两列并点击合并列

选择自定义作为分隔符类型,并使用斜线( / )作为分隔符。将列命名为日期并点击确定按钮。搞定了。

现在是时候将我们的数据转换到目标结构中,其中类别成为我们的列,数量成为我们的值。

确保您已经选择了类别列,然后单击透视列

从数值下拉字段中选择金额。如果我们在同一个月有多个条目,我们希望 Power BI 使用 Sum 作为聚合函数。

点击确定

结果应该如下面的屏幕所示。

请注意以下三点:

  1. 我们有很多无效数据,因为不是每个类别都有收益支出。
  2. 我们对支出类型的值有负数,这可能很难想象。
  3. 我们没有每个日期(月)的总计栏。

为了满足我们的需求,我们在 Power BI 中使用了一个 Python 脚本。

点击运行 Python 脚本并插入下面的脚本。

让我们分解一下,看看这个 python 脚本为我们做了什么。

首先,我们动态选择数据类型为编号为的所有列。这样我们就不用硬引用任何列,并且可以很容易地添加新列。

numeric_cols = dataset.select_dtypes(include=np.number).columns

接下来,我们用数字 0 替换所有的空值

dataset.fillna(0, inplace=True)

现在我们已经选择了所有的数字列,我们只需在所有的行上调用abs()函数,将所有的负数转换成它的绝对等效值。

dataset[numeric_cols] = dataset[numeric_cols].abs()

最后,我们对所有行及其数字列进行求和。我们将结果存储在名为 GrandTotal 的新列中。

dataset['GrandTotal'] = dataset[numeric_cols].sum(axis=1)

为了使用结果,我们单击来扩展数据集。

在运行 Python 片段后,Power BI 试图自动检测数据类型,但在这里没有做好。

此外,这一步添加了对命名列的硬引用。

因为我们希望它是完全动态的,我们通过点击 X 图标从应用步骤面板中移除了变更类型步骤。

等一下!当我们不能使用 Power BI 类型检测时,我们如何动态地输入数据?我们需要一个函数!

右键点击查询面板,选择新建查询>空白查询

首先,我们给新的查询函数起一个好听的名字,比如AutoDetectAndTransformTypes

接下来,我们通过点击高级编辑器图标调出编辑器。插入下面的脚本,点击完成

这是怎么回事? 这个剧本的灵感来源于 这里的 。向作者致敬。这篇文章很好地解释了脚本的作用。然而,我介绍了一些简化和另一种类型检测方法。

简而言之,脚本检查每一列,并通过检查每个值来推断正确的数据类型。然后,它构建列和数据类型的映射,并将其传递回 Power BI。

现在我们通过点击公式栏中的 fx 图标来调用此功能。

没看到公式栏? 转到 查看 并勾选 公式 旁边的方框。

要调用数据集上的函数,请输入下面的公式并点击 enter。

= AutoDetectAndTransformTypes(dataset)

搞定!如您所见,我们的函数运行得非常好,将所有数值转换为类型十进制数并将日期字段转换为类型日期。

要开始可视化您的数据,点击关闭&应用

构建仪表板

现在我们有了如此简单的数据,我们可以轻松地构建一个漂亮的报告。我让你自己去做。

如果您不想自己动手,我会将 Power BI 模板放在我的 Github 存储库中的数据文件旁边。只需克隆整个存储库并从同一个目录中打开dynamic-pivot-in-power bi . pbit文件。

由于我们的旋转模型,这都是视觉上的拖放。不需要代码或公式。

添加新类别

让我们来看看这一解决方案的强大功能。在 Excel 中打开原始数据,在列表底部引入任何新的类别。别忘了它。

回到 Power BI,您唯一需要做的就是刷新数据。

点击刷新,选择仪表板上的任何视觉效果,看到新添加的类别自动出现在字段列表中。勾选旁边的方框就大功告成了。

当然,这个字段也是总计计算的一部分。一切都充满活力。

就是这样!你做得很好。

就这样吧。

—塞巴斯蒂安

是时候将敏捷编程和敏捷数据科学结合起来了

原文:https://towardsdatascience.com/time-to-combine-agile-programming-and-agile-data-science-26df7532b0e9?source=collection_archive---------34-----------------------

数据科学家来自火星,软件工程师来自金星(第五部分)

敏捷软件 2.0 宣言和过程

来源:照片由罗伯特·科林斯Unsplash 上拍摄

在本系列的第 1 部分中,我们研究了软件和模型之间的主要区别;在 Part 2 中,我们探讨了将模型与软件混为一谈的十二个陷阱;在第 3 部分中,我们看了模型的进化;在第 4 部分中,我们经历了模型生命周期。现在,在本系列的最后一部分,我们将讨论模型生命周期和敏捷软件开发方法应该如何结合在一起。

基于我们之前的讨论,我们主要关心的是模型生命周期过程——及其迭代的价值发现、价值交付和价值管理——如何能够与传统的敏捷软件开发方法相结合。本文的重点是这两种方法的结合;关于使数据科学或模型生命周期敏捷,这是 而不是 。模型生命周期过程本身是迭代的和敏捷的。

敏捷的历史

敏捷的根源可以追溯到 20 世纪 30 年代的敏捷制造。在他们关于“敏捷创新的秘史”的文章中,作者——达雷尔·里格比杰夫·萨瑟兰竹内广孝——注意到了这一历史背景。

一些人将敏捷方法追溯到弗朗西斯·培根在 1620 年对科学方法的阐述。更合理的起点可能是 20 世纪 30 年代,当时贝尔实验室的物理学家和统计学家沃尔特·休哈特(Walter Shewhart)开始将计划-实践-研究-行动(PDSA)循环应用于产品和流程的改进。休哈特将这种迭代和增量开发方法教给了他的学生 W. Edwards Deming,后者在二战后的几年里在日本广泛使用了这种方法。

软件中敏捷性概念的早期应用之一(例如,它的持续和迭代性质)可以追溯到 20 世纪 50 年代。根据专家 Craig Larman 和 Victor Basili 的说法,早在 1957 年,IBM 服务局公司的 Gerald Weinberg 和 Bernie Dimsdale 就在洛杉矶进行增量软件开发。然而,敏捷的诞生通常归功于 2001 年犹他州雪鸟的一次会议。以下引自《大西洋月刊》的一篇文章抓住了这一诞生的精神:

但正是在这里,一群软件反叛者聚集在一个滑雪胜地的白雪皑皑的群山中,于 2001 年起草并签署了该行业历史上最重要的文件之一,这是编码集的一种独立宣言。这个为期三天的小型务虚会将有助于塑造大部分软件的想象、创建和交付方式——或许还有世界的运行方式。

正是在这个地方,敏捷宣言敏捷十二原则诞生了。详细研究敏捷宣言是值得的,这样我们就可以为敏捷数据科学开发另一个宣言。

敏捷软件开发宣言

敏捷软件开发宣言由四个关键陈述组成:

  1. 过程和工具之上的个人和交互
  2. 综合文档之上的工作软件
  3. 合同谈判中的客户协作
  4. 响应变化而不是遵循计划

该文档继续指出虽然右边的项目有价值,但我们更重视左边的项目。因此,敏捷思维是对当时现有最佳实践的补充,而不是替代。有时候,敏捷被用作不提供全面的文档或没有架构设计或开发计划的借口。讽刺的是,敏捷本身已经变得更像一个过程和方法,而不是关注个人和他们的互动。

敏捷数据科学宣言

在他 2013 年关于敏捷数据科学的第一本书和 2017 年名为敏捷数据科学 2.0 的修订版中,Russell Jurney 展示了如何构建一个数据平台来构建、部署和完善分析应用。他将敏捷数据科学的目标定义如下:

敏捷数据科学流程的目标是记录、促进和指导探索性数据分析,以发现并遵循关键路径获得引人注目的分析产品。

然后,他根据以下七条原则组织了他的敏捷数据科学宣言

1.迭代,迭代,迭代:表格,图表,报告,预测。

2.船舶中间输出。即使失败的实验也有产出。

3.执行任务的原型实验。

4.在产品管理中整合数据的专制观点。

5.当我们工作时,在数据价值金字塔上爬上爬下。

6.发现并追求通向杀手级产品的关键路径。

7.获取 meta。描述过程,而不仅仅是结束状态。

这些原则针对的是我们在之前的文章中概述的软件和模型之间的一些关键差异——主要是以实验为中心的开发过程和基于使用数据的归纳的推理机制。

在我们看来,这份敏捷数据科学宣言遗漏了一些关键发展:

  • 数据产品与模型:重点是以敏捷的方式用 web 前端构建(大)数据产品。宣言中缺少持续和迭代的价值发现、价值交付和价值管理的丰富内容。
  • 数据科学家 vs 跨学科团队:正如我们之前讨论过的,模型生命周期管理正在从预测即服务转向模型工厂,这导致了新角色的出现,如 ML 工程师、模型操作和数据操作专家。这需要更多地关注跨学科团队。
  • 应对变化与颠覆:敏捷数据科学宣言更关注应对变化,而不是用创新产品颠覆市场。

现在,我们来看看如何将敏捷软件开发和数据科学宣言结合到我们所谓的敏捷软件 2.0 宣言中。

敏捷软件 2.0 宣言

特斯拉人工智能高级总监安德烈·卡帕西(Andrej Karpathy)介绍了术语软件 2.0 ,并将其与传统编程进行了对比,他称之为软件 1.0。具体来说,他说:

软件 1.0 的“经典栈”是我们都很熟悉的——它是用 Python、C++等语言编写的。它由程序员写给计算机的明确指令组成。通过编写每一行代码,程序员用一些期望的行为来识别程序空间中的特定点。

相比之下,软件 2.0 可以用更抽象、对人类不友好的语言编写,比如神经网络的权重。没有人参与编写这段代码,因为有很多权重(典型的网络可能有几百万),直接用权重编码有点困难(我试过)。

虽然 Karpathy 仅将软件 2.0 一词用于使用机器学习和深度学习开发的系统,但很明显,在可预见的未来,我们将需要软件开发的 1.0 和 2.0 版本共存。因此,我们应该将敏捷软件开发的关键价值与敏捷模型开发结合起来。我们认为这一联合宣言的目标如下:

通过促进(数据、软件和模型的)持续集成、交付和(机器)学习,我们正在发现开发由(AI/ML)模型驱动的软件的更好方法。

将敏捷软件开发宣言扩展为敏捷软件 2.0 宣言,我们有以下四个基本价值观:

  1. 多学科团队和个人&互动:当我们将传统软件 1.0(例如,传统编程)与软件 2.0(例如,机器学习或更一般的模型构建)相结合时,我们正在将数据、软件和模型生命周期相结合。这要求我们关注来自数据、软件和数据科学的多学科团队,包括业务分析师、数据分析师、架构师、软件开发人员、数据科学家、ML 工程师、DevSecOps、MLOps 或 ModelOps 以及 AI ethicists 没有一个人能够拥有所有这些能力,而且这些人也不仅仅来自一个学科;它们需要是由生命周期中的阶段决定的多学科。
  2. 有洞察力的行动和决策以及工作软件:传统的敏捷软件开发加速了有用的工作软件的时间线,通常被称为最小可行产品(MVP)。然而,在这个敏捷软件周期中强制进行数据探索和模型构建通常会导致简单的描述性分析,而没有洞察力或预测性或规范性模型。模型构建或数据科学敏捷周期需要从软件敏捷周期中分离出来(如下所述),以便产生同样有洞察力的工作软件。
  3. 数据&模型探索和客户协作:敏捷软件开发强调客户协作,因为传统的瀑布方法过度索引了从客户收集需求、设计软件、构建和测试。软件 2.0 带来了数据和模型,为这个等式增加了一个维度。客户可能无法总是清楚地表达他们的偏好或原因,或者他们为什么做出某些决定。拥有“数据讲述故事”和“模型展现数据本质”的能力对于软件 2.0 至关重要。
  4. 创新&颠覆性和响应变化:敏捷软件开发非常善于响应变化——尤其是客户要求的变化。根据我们的经验,软件开发的短迭代周期(即 sprints)通常会导致功能的增量改进,但不会通过使用可用的数据和从模型中获得的洞察力来为创新和破坏提供足够的机会。

图 1:敏捷软件开发宣言(来源:Agilemanifesto.org)和敏捷软件 2.0 宣言

在讨论了敏捷软件 2.0 宣言之后,我将详细讨论如何将敏捷软件开发生命周期与模型开发生命周期结合起来,这在我之前的文章中已经讨论过了。

集成的敏捷软件 2.0 流程

考虑到软件和模型之间的根本差异——以及上面敏捷软件 2.0 宣言中提到的原因——我们需要在时间方面将传统的敏捷软件冲刺与模型生命周期分开。同时,我们不希望将它们作为两个独立且不同的敏捷周期来运行,因为这将阻止我们实现传统软件和模型的全部好处。那么,解决办法是什么呢?

一个解决方案包括交错 sprint 周期,并为软件 sprint 和模型 sprint 提供单独的时钟。在这个交错的过程中,有几个关键的交互点值得详细说明:

  1. 产品启动/积压:在产品的启动阶段,尤其是结合了传统软件和模型的产品,软件、数据和建模团队需要一起决定客户想要的关键功能、可用的数据、需要产生的潜在见解或需要测试的假设,以及产品的关键差异化因素。一旦完成了这些,软件和建模团队就可以独立地执行他们的冲刺了。软件团队可以通过他们的标准 sprint 过程,而建模团队使用数据和模型进行探索和实验,正如我们在模型生命周期中的 价值交付循环 所描述的那样。
  2. Sprint Backlog: 当建模团队已经验证了假设并生成了洞察之后,被测试的模型和数据管道被放入 Sprint Backlog 中。当软件团队完成了它的标准冲刺后,它会将测试过的模型合并到软件的当前版本中。在这一步,软件开发人员、数据工程师、ML 工程师和数据科学家必须合作调整模型并大规模部署它们。
  3. 完成的工作和价值交付:这个软件和模型集成 sprint 然后产生一个软件,它有一个准备好部署的嵌入式模型。在这个集成冲刺的最后,模型被部署到生产环境中,价值交付过程开始了。与传统软件不同,在传统软件中,软件可以进入操作阶段,对于具有嵌入式模型的软件,我们需要经历价值交付阶段,以确认模型仍然按照生产环境中的要求执行。一旦完成,集成模型就可以进入价值管理流程。

图 2:敏捷软件 2.0 过程

总之,敏捷软件 2.0 需要整合来自敏捷软件开发和敏捷数据科学的领先敏捷方法,以帮助希望部署嵌入 AI/ML 模型的软件的客户获得投资回报。

数据、软件和 AI/ML 模型的融合才刚刚开始。广泛的软件工程、软件开发和维护方法对于 AI/ML 模型来说是不存在的。最佳实践刚刚出现,未来十年将会看到该领域更多的学术和行业进步。我们以声称数据科学家来自火星,软件开发人员来自金星开始这个系列。在过去的几年里,这些学科逐渐融合在一起。这个由五部分组成的系列只是软件开发人员和 AI/ML 建模人员关注的主要领域的开始。

是时候做出改变了

原文:https://towardsdatascience.com/time-to-make-the-switch-9eb719d434de?source=collection_archive---------3-----------------------

将 MacOS 默认值从 Python 2 升级到 Python 3

2020 年正在如火如荼地进行中,如果你还没有这样做的话,是时候更换你的默认 python 了。自 1 月 1 日起,Python 2.7 的维护已经停止。这意味着您当前版本的 python 现在是遗留代码!虽然在您的系统上保留一个版本的 Python 2 对于旧的脚本来说仍然很方便,但是现在是时候更新您的系统了。在本简报中,我们将下载 Python 3,将其设为默认,并将 Python 2 存储为别名。现在开始,让我们探索一下当前的 Python 环境。

来源 XKCD

要找到我们的默认 Python 在系统中的位置,只需输入:

which python

这将向您显示默认 Python 的路径。如果您像我一样在/usr/local/bin 系统之外有一个默认的 Python,这可能会提供一些信息。我的默认 Python 是 Anaconda 发行版的一部分。要查看如何更改 Anaconda 发行版中的默认 Python,请向下滚动一点,越过默认方法。

默认 MacOS 系统

要查看 Python 的当前版本,只需输入:

python --version

我现在的版本是 2.7.15。要改变 MacOS 上的默认版本,我们可以从【https://www.python.org/downloads/mac-osx/】Python 下载页面()下载最新的安装程序开始。下载安装程序会将新版本插入/usr/local/bin。在更改默认 Python 之前,让我们将旧的 python2 版本链接到 Python 2 命令。

echo "alias python2=/usr/local/bin/python2.7" >> ~/.bashrc

别名“python2”意味着当我们键入命令时,默认的 python 版本将是我们的 Python 2 发行版。现在让我们为新的 Python 3 创建一个别名。

echo "alias python=/usr/local/bin/python3.8" >> ~/.bashrc

应该可以了。这种方法的局限性在于,如果您想要更新 Python 版本,则必须手动重置别名。这意味着对于 Python 3.9,您必须重新执行之前的命令。

使用 Anaconda Base 升级

我的系统使用除 Anaconda 之外的默认 Python 发行版。要更改默认 Python 版本,只需输入:

conda install python=3.8.1

这将安装 Python 3.8.1。要在 Anaconda 上查看所有可用的 Python 版本,只需输入:

conda search python

安装较新版本的 Python 可能需要几分钟时间,并且额外的冲突解决方案是您之前下载的包可能与较新版本的 Python 不兼容。

你有它!一个简单的更新 Python 默认值的步骤,这样你就可以为这十年做好准备了!我叫科迪·格利克曼,你可以在 LinkedIn 上找到我。

利用数据科学了解气候变化:大气 CO2 水平(基林曲线)——模型拟合和时间序列分析

原文:https://towardsdatascience.com/timeseries-data-science-curve-fitting-pandas-numpy-scipy-b0cd938ecb59?source=collection_archive---------30-----------------------

TL;博士:

也称为“执行摘要”

欢迎光临!本文是数据科学的一个完整项目。本文涵盖了 1)数据准备 2)建模、3)模型评估的领域。这个项目着眼于一个时间驱动的季节性数据集,我们将与熊猫库合作。对于建模和拟合,我们使用 Numpy 的 polyfitScipy 的 optimize 库。我将带你经历提出和构建模型的思维过程,以及如何验证它们。

对于更高级的读者,我将在另一篇文章中讨论如何通过 PyStan (斯坦的Python 实现)使用蒙特卡罗方法对同一数据集执行预测分析

你可以在这里找到完整的代码。

背景

斯克里普斯二氧化碳项目

该项目基于自 1958 年以来在夏威夷莫纳罗亚天文台收集的二氧化碳浓度数据。该数据集由斯克里普斯海洋研究所编制,因此被称为 斯克里普斯二氧化碳数据集 。这是迄今为止最全面和最一致的科学测量之一,自 20 世纪 70 年代以来,美国国家海洋和大气管理局(NOAA)的 GMD 计划一直在努力扩大这一测量。

从 1980 年到 2010 年的月平均大气 CO2 浓度(来源)

龙骨曲线

数据集的结果曲线被命名为 基林曲线 ,以纪念启动监测程序的科学家查理斯·大卫·基林。基林曲线显示了二氧化碳浓度的平均增长(~ 2 ppmv/年),并且是温室气体如何导致气候变化的最权威的证据之一。基林曲线有助于识别二氧化碳的季节变化、自然和人类活动之间的相互作用以及现代工业时代二氧化碳浓度的加速。

数据准备

数据下载

您可以直接从 Scripps 程序主页下载数据。csv 格式:https://Scripps CO2 . ucsd . edu/data/atmospheric _ CO2/primary _ mlo _ CO2 _ record . html。在我们的调查中,我们将使用文件名为“weekly _ in-situ _ co2 _ mlo . CSV”的每周原位 CO2 数据集。请注意,默认的原位 CO2 数据是每月——因此请确保您下载的是正确的文件。

数据的前 44 行是关于文件的信息,应该在导入 Python 之前丢弃。第一列表示记录的日期,格式为“yyyy/mm/dd”。第二列表示大气 CO2 浓度,单位为百万分率(ppm)。

数据导入

我们将使用熊猫图书馆来存放我们的数据。对于那些不熟悉熊猫的人来说,这是一个让你用一堆有用的特性创建数据框架的库。如果你正在进入数据科学领域,你会经常用到它!

df = pd.read_csv('weekly_in_situ_co2_mlo.csv',names=['date','CO2 ppm'])
print('Dataframe has **%d** data points of **%d** features'
      %(df.shape[0],df.shape[1]))df.head()

数据的输出(。csv 文件)导入。

将日期列转换为“日期时间”格式

当前日期采用字符串格式。我们将其更改为 datetime 对象,这样 Python 就可以识别出时间线上的数据点。熊猫对此有一个函数叫做“到 _datetime

df['date'] = pd.to_datetime(df['date'],format='%Y/%m/**%d**')
df.head()

将“日期”列更改为日期时间后的输出

创建“天”列

虽然 date 列用于将数据绘制成时间序列,但它对我们的建模步骤用处不大。为对应于第一天之后 N 天的的数据创建一个新参数会提供更多信息。至少,它使我们的模型参数易于解释

*# take the first row as the start date* epoch = df['date'][0]*# take integer values of the days from epoch* df['days'] = (df['date']-epoch).dt.daysdf.head()

添加要在我们的模型中使用的“days”列的输出。请注意,“天数”列将用于查找模型的参数,而“日期”列将用于绘图。

数据观察

数据科学的第一步是调查数据的一般形式(如果可能的话)。这将使我们能够确定用于建模的宏观趋势。

未经编辑的原始数据

在宏观的一瞥之后,对数据进行一些细微的观察也是值得的。对于这个数据集,我将始终查看数据集的第一年、前三年、最后三年和最后一年。

数据集两侧的 1 年和 3 年数据图。

从这两个观察中,我们看到有一个增加的基数趋势和一个波动的季节性趋势。这两种趋势是您将在时间驱动的数据集中看到的典型趋势,尤其是关于自然观测的数据集。

建模和评估

建模

对数据建模是一种尝试,旨在识别生成数据的不同力量。建模可以通过科学调查或从数据中推断来完成。

如果你意识到一些创造数据的基本力量,通过科学调查建模是可能的。有限资源环境中的人口增长,例如病毒在有限人口中的传播,是一个已经在数学中广泛建模的问题。虽然这些数学模型无法解释数据中的所有变化,但它们可以提供塑造模型的关键方向,并且更适用于类似的场景(例如,具有不同初始点的类似环境)。

推断建模是针对数据中的变化进行的,当你不知道这些变化是如何产生的时候。推理建模仅限于指数或正弦曲线的基本集合,因为复杂的多项式函数往往会过度拟合数据,并且具有有限的可推广性。

估价

可以通过视觉和数字两种方式进行评估。目视评估可通过目视检查模型生成数据与实际数据来进行。当差异较大或数据中有未说明的趋势时,目视检查非常有用。重要的是从建模数据中创建相关图表,以查看剩余数据是否显示其他趋势。然后,可以通过添加额外的数学模型来解释这些数据。

数值评估通常采用 R 平方值的形式。r 平方值显示预测(或回归)解释的原始数据方差的百分比。接近 1.00 的 R 平方值更好(有可能过度拟合数据),而接近 0 的值更差。(负的 R 平方值也是可能的,但是我们在这里不考虑这个概念。)R 平方值本身并不能揭示无法解释的方差在哪里。噪声引起的方差是不可分辨的,而缺少建模引起的方差是可以改善的。

模型# I——线性基本趋势

线性基本趋势建模

最明显的基本趋势是线性趋势。由于我们还没有考虑季节变化,所以整个模型是一个带有两个参数的多项式——零阶和一阶系数。

Numpy (np)的 Polyfit 库允许我们对数据进行多项式拟合。然后,我们可以使用输出系数值为我们拥有的每个数据点创建合成数据(即,为我们拥有的每个 x 点绘制相应的 y 点)。

coeffs = np.polyfit(df['days'],df['CO2 ppm'],deg=1)
print('Data has a linear trend**\n\**
1st deg coeff: **%.3e** (slope)**\n\**
0th deg coeff: **%.3e** (intercept)'
     %(coeffs[0],coeffs[1]))

df['linear trend'] = df['days']*coeffs[0]+coeffs[1]
df['relative ppm (lin)'] = df['CO2 ppm']-df['linear trend']

线性基本趋势的拟合参数值。

线性基本趋势评估

我们首先从模型的外观检查开始。将建模数据叠加到原始数据上显示,我们的线性模型确定了多年来的持续增长。

我们拟合的线性趋势叠加在原始数据之上

现在,我们观察在解释了线性趋势的变化后,数据看起来是什么样的。这是通过简单地从原始数据中减去模型数据来实现的。在代码中,这存储在一个名为‘相对 ppm(Lin)’的新列中。

线性趋势无法解释的其余变化。

从这个相对图中我们可以观察到两件事。首先,在剩余的数据中有明显的减少和增加(月牙形)。这表明数据的增长率平均先降低后升高,与线性趋势假设的恒定增长率相反。其次,数据有明显的季节性。这是显而易见的,因为我们还没有在我们的模型中实现季节性趋势,因此季节性仍然无法解释。请注意,当考虑到宏观水平的增长时,可以更好地观察到季节性趋势的幅度

使用数值分析使用 r 平方,我们发现数据中 97.7%的变化可以用简单的线性趋势来解释。

模型#2 —二次基本趋势

二次基趋势建模

虽然使用高次多项式通常会因其过度拟合和缺乏可推广性而受到反对,但二次多项式,也称为二次函数,被广泛认为是合理的基本趋势。

像线性基本趋势一样,我们使用 Numpy 的 polyfit 库来拟合我们的数据的三个参数。

coeffs = np.polyfit(df['days'],df['CO2 ppm'],deg=2)
print('Data has a quadratic trend**\n\**
2nd deg coeff: **%.3e** (quad term)**\n\**
1st deg coeff: **%.3e** (slope)**\n\**
0th deg coeff: **%.3e** (intercept)'
     %(coeffs[0],coeffs[1],coeffs[2]))

df['quad trend'] = df['days']**2*coeffs[0]+df['days']*coeffs[1]+coeffs[2]
df['relative ppm (quad)'] = df['CO2 ppm']-df['quad trend']

二次基本趋势的拟合参数值。

二次基本趋势评估

同样,我们试图通过将趋势叠加到我们的数据上来进行视觉评估

拟合的二次趋势叠加在原始数据之上。

我们立即看到,二次基趋势是一个比线性趋势好得多的宏观趋势。我们再次将剩余变化绘制到基本趋势上,以识别任何未解释的变化。

二次趋势无法解释的其余变化。

我们看到,以前的(线性)模型的新月形变化现在在新的(二次)模型下得到解释。似乎还有一些更高层次的变异,但现阶段很难直观观察到。

看一下的 r 平方值,我们现在看到 99.4%的变化现在被模型解释了——比以前的模型增加了 1.7 个百分点。

模型# 3——二次基数和正弦季节趋势

二次+正弦趋势建模

既然我们对的基本趋势有些满意,我们可以开始处理的季节性趋势。对于这个模型,我们实现了一个正弦曲线作为我们的季节因素。

基本趋势的参数仍然是二阶多项式函数的三个系数。一条一般正弦曲线也有三个系数** : (1)振幅,(2)频率,和 (3)相位。**

这就是我们可以利用我们的科学调查的地方。我们可以预测每年的季节性变化。虽然这可能不准确,但我们仍然可以测试假设并观察性能。当我们能够减少拟合参数的数量时,它也为我们节省了大量的计算能力并增加了末端拟合的精度。因为我们的时间是以天为单位的,所以我们可以将频率参数取为 1/365.25,因为每年有 365.25 天。(如果你不知道. 25 的出处,查“闰年”)

由于我们的模型不再是一个多项式,我们不能使用 Numpy 的 Polyfit 库。相反,我们使用 Scipy 的优化模块来找到五个(之前是六个)参数的拟合值。

**def** test_func(t,c0,c1,c2,c3,c4):
    **return** c0+c1*t+c2*t**2+c3*np.cos(2*math.pi*f_year*t+c4)
coeffs, coeffs_covariance = optimize.curve_fit(test_func,df['days'],df['CO2 ppm'])

print('optimized coefficient values:')
**for** i **in** range(5):
    print('c**%d**: **%.3e**'%(i,coeffs[i]))

df['quad+sin trend'] = coeffs[0] + coeffs[1]*df['days'] +\
                        coeffs[2]*df['days']**2 +\
                        coeffs[3]*np.cos(2*math.pi*f_year*df['days']+coeffs[4])
df['relative ppm (quad+sin)'] = df['CO2 ppm']-df['quad+sin trend']

拟合的参数值。请注意,与 Numpy 的 polyfit 库不同,scipy.optimize 要求您显式声明一个函数来拟合数据。

二次+正弦趋势评估

我们的模型在整个数据期间以及第一年和最后五年的原始数据集上的叠加。

****目视检查显示我们的组合模型与我们的数据非常吻合。 r 平方值告诉我们,我们现在已经解释了来自五个参数的数据变化的 99.9% (具体地说,99.8783%)。我们看到,正弦模型的增加使我们的模型的解释能力提高了 0.5 个百分点。

我们应该满足于这 99.9%的解释吗?这就是我们需要警惕过度拟合的地方。任何数据集,只要加入足够多的参数,都可以 100%“解释”。(从技术上来说,任何大小为 N 的数据集都可以通过使用具有 N 个参数的多项式进行 100%匹配)仅使用 5 个参数,现在就对一个3000+数据点数据集进行过度拟合还为时过早。决定归结为剩余的方差是来自噪声,我们不应该过度拟合,还是来自模式,我们希望将其合并到模型中。这就是为什么我们总是需要查看剩余变化并观察是否存在我们可以建模的模式。

二次+正弦模型预测后的剩余变化。

观察整个时标的剩余变化,我们首先看到变化的幅度已经显著降低。在线性基础模型中,最大变化(数据最高点和最低点之间的差异)约为 17 ppm,在二次基础模型中为 11 ppm。现在,考虑到正弦季节性,最大变化仅为 6 ppm。我们还看到两个 30 年长的新月形,但是它们的偏斜度很难识别。

第一年和最后一年绘制的剩余变化。

多年时间尺度上,我们看到仍然有一些周期变化大约 6 个月长度。放大到年尺度,我们看到低谷出现在每年的 4 月和 10 月左右,高峰出现在 1 月和 7 月。这些半年波动振幅约为 2.5 ppm ,其中心在宏观尺度上移动。

奖金——研究正弦不对称

虽然我们的基本趋势是一年(365.25 天),但我们无法解释的变化的周期是 6 个月,即我们正弦周期的一半。这似乎表明我们的年度正弦季节性周期性地抵消我们的数据。

我们可以调查这种偏移是如何发生的,方法是将我们的所有数据逐月叠加,并查看它与我们模型中使用的正弦季节性相比如何。****

为了实现这一点,我们首先将年度差异移至我们的“日期”栏。这确保了我们所有的数据将绘制在 x 轴的同一线段上。在我的代码中,我通过将年份部分重置为 1904 来实现这一点。这与完全删除年份部分略有不同,默认情况下,这将使用 1900 年的“datetime”类纪元年份。这不适用于我们的情况,因为我们的一个数据点有闰日(2 月 29 日),1900 年不是闰年(1904 年是)。

其次,我们需要根据我们在线性和二次基本趋势中看到的每年的平均值增长进行调整。这确保了我们所有的数据将被绘制在 y 轴的同一范围内。在我的代码中,我通过从每年的数据值中减去每年的平均数据值来实现这一点。这意味着我的绘图将以 y=0 线为中心。

*# the list of years represented in the dataset*
dfYears = range(df.iloc[0]['date'].year,df.iloc[-1]['date'].year+1)
**for** year **in** dfYears:
    dfYear = df[df['date'].dt.year == year]
    *## there's 1992-02-29 in the dataset*
    *## and the "epoch" year in the datetime module (1900)*
    *## is NOT a leap year*
    monthDays = [datetime.strptime('1904-'+str(date.month)+'-'+str(date.day), '%Y-%m-**%d**')
                 **for** date **in** dfYear['date']]
    plt.plot(monthDays,dfYear['CO2 ppm']-np.mean(dfYear['CO2 ppm']),
             color='b',alpha=0.1)

最后,我们在聚合图上绘制正弦曲线,以验证我们的假设。为了比较,我在黄色虚线中加入了一个非相移正弦图(从 0 开始到结束)。我用眼睛标记了一个相移,它的图形用橙色虚线表示。

每年绘制的大气 CO2 汇总数据图,并以绝对高度归一化(蓝色,不透明度=0.1)

在此,我们确定数据的季节性实际上是正弦曲线略有出入。数据值从谷到峰的增加非常缓慢的——总计耗时 8 个月。另一方面,数据值的下降,只需要 4 个月。这解释了当数据的增长速度比我们的模型慢并且的下降速度比我们的模型快时 6 个月与模型的差异。

如果你真的去查阅斯克里普斯项目网站上的文件和出版物,你会发现一个解释,解释了大气 CO2 的增减循环中的这种不对称性。简而言之,大气 CO2 的减少来自夏季植被的生长,因为植物消耗 CO2 并排出 O2。由于大部分地块集中在北半球,本次夏季从5 月持续至9 月,为期 4 个月。CO2 水平变化在大气中的反映延迟约 1 个月,实际下降周期为6 月(高峰)至 10 月(低谷)。****

下一步是什么?

首先,祝贺你走到这一步!现在,您已经了解了为时间序列数据建立模型的基本思维过程。在数据科学方面,你也使用了三个 Python 包——熊猫(数据结构)、Numpy 和 Scipy。Numpy 和 Scipy 都广泛用于数学计算,Scipy 为线性代数函数提供了更全面的能力。如果你是一个刚进入数据科学领域的学生,你会看到这些软件包更多!

具体来说,关于这个项目,你可以关闭这一章满意地解决了 99.9%的变化在一个数据集重要的人类;或者尝试对该变化进行甚至更大的定址(诸如微调该正弦曲线以更好地拟合该增大-减小不对称性);或者尝试数据外测试(即投影),以查看模型在数据集中的时间序列中的表现。关于最后一点,我写了一篇单独的文章,使用蒙特卡罗方法来确定模型的投影边界,并通过 PyStan 库实现。

用 Pandas 和 Python 进行时间序列数据分析的时间戳解析

原文:https://towardsdatascience.com/timestamp-parsing-with-python-ec185536bcfc?source=collection_archive---------11-----------------------

入门

卢克·切瑟Unsplash 上拍摄的照片

TL;Pandas 为解析时间戳格式提供了很大的灵活性。但是灵活性是以性能为代价的。在处理标准格式的时间戳时,这仍然是一个很好的解决方案。然而,当时间戳格式不标准时,像记忆和带有预建查找表的映射这样的技术可以比 Pandas 快几个数量级。跳至总结部分了解不同条件下使用方法的建议。****

我们今天生成的许多数据都是时间序列数据的形式。并且对该数据的分析通常依赖于在一种结构中表示数据的时间戳,该结构服从于基于时间的切片和切割。在标准 Python 和流行的数据分析库中,如 Numpy 和 Pandas,有专门的数据类型来存储基于时间的信息。但是,传入的时间戳通常是不同格式的字符串。并且将这些字符串解析成基于时间的数据类型是一个耗时且有时乏味的过程。

Pandas 中时间相关数据的数据类型。图片来自 pandas.pydata.org。

在标准 Python 中,解析具有已知格式的时间戳字符串的常见方式是 time 模块的 strptime 方法(类似于 C 的 strptime 的接口)。

然而,由于大多数数据科学家不得不在数据集上做比解析时间戳字符串更多的事情,像 Pandas 这样强大的库变得非常受欢迎。在 Pandas 中,解析时间戳字符串最常见的方式是 to_datetime 方法。这种方法提供了很大的灵活性,甚至可以自动推断格式。所以很多人几乎是盲目的使用。

在本文中,我们将研究不同时间戳解析方法在不同类型数据集上的性能和适用性。我们就看什么时候盲目用熊猫,什么时候用别的了。

常用方法

在这个分析中,我们将比较六种解析时间戳字符串集合的常用方法。

1.time.strptime

对于具有已知格式的时间戳字符串,Python 的时间模块提供了这个方法来将字符串转换为 Python Datetime 对象。

示例:

2.Pandas.to_datetime 无需推断

Pandas 库中的这个方法可以转换时间戳字符串的集合,即使没有预先知道的格式。

示例:

请注意时间戳字符串列表 ts_str_list 如何具有不同格式的时间戳。Pandas 自动推断出每个时间戳字符串的格式,然后进行转换。

3.带推断的 Pandas.to_datetime

同样的 to_datetime 方法在 Pandas 中有几个可选的参数。其中一个参数是推断日期时间格式。默认设置为。然而,通过将其设置为 True ,该方法推断集合中第一个时间戳字符串的格式,然后尝试使用该格式解析其余的字符串。如果推断出的格式与集合中的任何后续字符串都不匹配,则该方法会采用 infer_datetime_format = False 的行为。

这种方法的优点是在解析具有一致格式的字符串集合时节省了大量时间。

示例:

4.具有指定格式参数的 Pandas.to_datetime

to_datetime 方法接受的另一个参数是格式。类似于 time.strptime,这让我们可以显式地定义一种格式来解析时间戳字符串的集合。正如我们将在后面看到的,这种方法的优点是它比让 Pandas 自己推断日期时间要快得多。然而,先决条件是时间戳字符串的集合具有一致且预先知道的格式。

示例:

5.time.strptime 带记忆

记忆是一种存储操作结果的技术,这样就不需要重复操作。使用 memos for the time.strptime 方法可以确保在具有重复时间戳的数据集中,我们不会浪费时间多次解析同一个字符串。当然,在没有任何重复的数据集中,这种方法不会比 plain time.strptime 方法有优势。

示例:

6.预建的查找映射

另一种解析已知格式和已知时间范围的长时间戳列表的方法是创建字符串到日期时间对象的映射。然后,我们可以使用 Python 的 map 方法来获得对应于每个时间戳字符串的 Datetime 对象的列表。

示例:

具有唯一时间戳的实验

1.标准格式的时间戳列表

ISO-8601 是一个被广泛接受的时间相关信息交换国际标准。除了遵循 ISO-8601 标准的时间戳之外,就 Pandas 而言,其他一些时间戳也是一种“标准”格式。这意味着熊猫可以非常有效地解析一些时间戳格式。没有一个详尽的列表(据我所知),但是一般来说,包含日期所有部分的时间戳格式和以年份开始的格式似乎都属于这一类。

现在,让我们看看当给定已知标准格式的时间戳时,这些方法是如何执行的。时间戳的格式在每个数据集中是一致的。我们用不同大小的数据集测试了适用方法的性能。

时间戳为标准格式时比较不同的方法|作者图片

结果显示,在这种情况下, Pandas.to_datetime 明显优于 time.strptime。预构建的查找方法也略微优于 time.strptime 方法。然而,它仍然远远达不到熊猫提供的性能。

2.非标准格式的时间戳列表

现在,如果我们对具有非标准时间戳格式(例如 13–11–2000 04:50:32)的数据集运行相同的测试,我们会看到一些差异。

时间戳为非标准格式时比较不同的方法|作者图片

我们在这里注意到,具有指定格式的 Pandas.to_datetime 执行得最好,而普通的 time.strptime 循环排在第二位。预构建的查找方法花费太多时间来构建地图,因此其性能受到影响。没有 infer 选项的 Pandas.to_datetime 也需要很长时间,因为每个时间戳字符串都需要重复的格式推断。

在 Pandas.to_datetime with infer 的结果中,我们也看到了一些奇怪的行为。我们看到,在数据集规模接近 20000 之前,它的表现异常出色。然后它以与 Pandas.to_datetime 相同的方式执行,而不使用 infer。这是怎么回事?!

这种行为恰好是这些实验中使用的数据集的副作用,但它说明了一个重要的问题。这些实验中使用的数据集是一个时间戳列表,从 2000 年 1 月 1 日上午 12:00 开始,以 1 秒的间隔持续进行。使用的时间戳格式为 dd-mm-yyyy hh:MM:ss 。因此,当 Pandas 试图推断列表中的第一个时间戳时,格式存在模糊性。这是因为时间戳字符串 01–01–2000 00:01:00 的格式可以是 dd-mm-yyyy hh:MM:ssmm-dd-yyyy hh:MM:ss

因此,当我们有一个以模糊时间戳开始但在列表末尾有明确时间戳的数据集时,Pandas 可能会在到达列表末尾时意识到其推断是不正确的。然后,它会退回到为每个时间戳字符串单独推断日期时间格式的行为。这将导致操作的性能类似于 infer_datetime_format = False 时的情况。

重复数据集上的实验

迄今为止使用的数据集没有重复的。然而,在现实世界中,我们经常处理具有重复时间戳的数据集或来自同一时间段的多个数据集。在工业智能领域(我目前在其中工作),同时处理来自同一时间范围的大量数据集并不少见,因此,在所有这些数据集之间存在大量重复的时间戳字符串。

在下面的实验中,我们将看到我们对时间戳解析的选择会如何根据我们的数据集中有多少重复而改变。

在接下来的实验中,所有数据集都包含一百万个时间戳字符串。在测试过程中,不同数量的副本被注入每个数据集,同时保持数据集大小固定。注入的最低重复数是 0(都是唯一的),最高重复数是 100(数据集中的每个时间戳有 99 个其他副本)。

尝试使用标准格式的时间戳字符串(并且在整个数据集中保持一致)

当时间戳格式为标准|图片由作者提供时,无论有无重复,熊猫都表现良好

我们在这里看到,在处理标准格式时,Pandas.to_datetime 是一个简单的选择。正如所料,随着数据集中重复项数量的增加,内存化和预构建的查找映射会得到改善。

尝试使用非标准格式的时间戳字符串(并且在整个数据集中保持一致)

当时间戳格式不标准时,记忆和预建查找的性能优于 Pandas 图片由作者提供

但是当时间戳的格式不标准并且数据集中有一些重复时,记忆和预建的查找映射都表现得更好。事实上,我最近使用了预先构建的查找映射方法来解析大量时间戳字符串,这为我节省了 8 个多小时!

摘要

对于没有太多重复的数据:

  1. 已知格式一致的时间戳 使用熊猫并指定格式。
  2. 具有一致但未知格式的时间戳
    使用熊猫 infer_datetime_format = True。
  3. 没有一致格式的时间戳 使用 Pandas with infer _ datetime _ format = False。

对于有大量重复的数据:

对于有重复的数据,时间戳的格式很重要。因此,这里有一个方便的表格来帮助你选择。

在不同条件下解析时间戳字符串的推荐方法|作者图片

时间戳与时间增量与时间段

原文:https://towardsdatascience.com/timestamp-vs-timedelta-vs-time-period-afad0a48a7d1?source=collection_archive---------32-----------------------

了解熊猫时间序列数据结构

照片由内森·杜姆劳Unsplash 上拍摄

数据!不仅仅是数据科学,软件行业的所有其他领域都在处理数据。从系统软件到应用软件,以高效的方式处理和存储数据始终是一项挑战。一种常见且最有效的战斗策略是利用 数据结构。

正如计算机科学家弗雷德·布鲁克斯所说,

在与缓慢的系统进行的永无止境的战斗中,程序员的主要武器是改变内部模块结构。我们的第一反应应该是重组模块的数据结构。

无论怎样强调数据结构都不为过——您可以拥有完美的代码、完美的逻辑、零错误,但是以笨拙的方式存储数据可能会导致应用程序的崩溃。

Pandas 本质上是为分析金融时间序列数据的目的而开发的。它包含了大量的工具来处理日期和时间相关的数据。在本文中,我将解释基本的 pandas 时间序列数据结构、它们可以接受的输入类型以及它们的功能。

处理时序数据的一些基本数据结构是:

  • 工时戳记
  • 时间差
  • 时间段

1)时间戳:

Python 在包含三种不同类型的[datetime](https://docs.python.org/3/library/datetime.html)模块中提供了日期和时间功能,

  • 日期—日、月、年
  • 时间—小时、分钟、秒、微秒
  • 日期时间—日期和时间的组成部分

python 中的datetime由日期和时间组成,pandas 的替代方案是将日期和时间封装在一起的Timestamp对象。它是 python 的datetime的对等物,但基于更有效的 numpy.datetime64 数据类型。

时间戳插图

熊猫 时间戳 引用具有纳秒精度(十亿分之一秒)的特定时刻。

这是最基本的时间序列数据类型,它将值与特定时刻相关联。时间戳构造函数非常灵活,可以处理各种输入,比如字符串、浮点、整型。下面是它可以接受的不同类型的输入的例子。

用各种输入创建时间戳对象

在上面的示例中,[7]和[8]包含一个标量值。诸如整数或浮点数之类的单个值也可以传递给时间戳构造函数,它返回的日期和时间相当于 UNIX 纪元(1970 年 1 月 1 日)之后的秒数。此外,它允许人类可理解的日期对象与 UNIX 纪元相互转换,以便于计算。当一个 nan 值像[9]中那样被传递时,它返回一个 NaT(不是时间)值,这是 pandas 对于时间戳数据的 null 值。

时间戳构造函数理解时区转换。默认情况下,它不知道时区,但是可以通过在创建对象时将时区传递给参数tz来使知道时区。这个对象在内部存储了一个 UTC 时间戳值,使得时区之间的转换变得简单。

注意 :如果您的列/索引/对象不支持时区,您将会得到如下错误

时区转换错误

您可以通过本地化(使其具有时区意识)然后转换来克服这个问题。

除此之外,时间戳可以存储频率信息,具有大量对数据操作有用的属性和方法。时间戳的索引结构是 DatetimeIndex ,其类型为 datetime64,包含时间序列特定方法,便于处理。

2)时间差:

delta 的定义之一是它是两个事物或值之间的差异。Timedelta只不过是时间上的差异,可以指两个间隔之间的时间量或确切的时间长度,并且基于 numpy.timedelta64。

与时间戳构造函数类似,Timedelta 也倾向于接受可变数量的输入。有趣的是,它既可以取正值,也可以取负值。下面是一些例子,让你一窥究竟。

Timedeltas 是 python 和 pandas 的一部分。他们可以

  • 彼此相加或相减

  • 彼此相除以返回浮点值

  • 添加到timestamp

  • 添加到datetime

  • 添加到date

  • 无法添加到time

Timestamp类似,Timedelta也有大量用于操作数据的属性和方法,相关的索引结构是类型为 int64 的 TimedeltaIndex

3)时间段:

时间周期指开始和结束时间戳之间的特定时间长度,该时间长度不变且不重叠。Period类采用Period类型,该类型采用一个字符串或整数,并基于 numpy.datetime64 对固定频率进行编码。

通常,一个值和一个频率参数被传递给Period()构造函数,被指定为freq的频率参数接受一组预定义的字符串。考虑下面的例子,

时间段示例

在[1] freq='A-OCT'中,表示频率为每年一次,固定在十月底,而在[3] freq='M'中,表示频率为每月一次。您还可以指定每季度、每周的频率。要了解更多信息,请点击查看

时间周期图示

可以使用带有startend和频率参数的period_range()函数生成一系列Period对象。

生成一系列期间

频率之间的转换是一项经常需要处理的任务。这可以通过[asfreq](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.asfreq.html)方法完成。让我们考虑一个将月频率转换为周频率的例子,

频率之间的转换

除此之外,Periods可以转换成Timestamps,反之亦然。与Period对象相关联的索引结构是PeriodIndex

感谢你一路阅读到这里。如果你有任何问题、反馈或批评,请在评论区告诉我。祝你今天开心!玩的开心!

时间和数量

原文:https://towardsdatascience.com/timing-and-numpy-611b93338cc3?source=collection_archive---------15-----------------------

一个用 Jupyter notebook 在 Python 中计时代码的例子。

作者: Edward Krueger 数据科学家兼讲师和 Douglas Franklin 助教兼技术作家。

在本文中,我们将点积计算作为基准测试运行时的模型,我们将可视化一些生成点积的方法,看看哪种方法最快。此外,我们还将介绍一些计时代码行和 ipython 单元的方法。

链接到 GitHub 库:https://github.com/edkrueger/dot-product-timing

程序员通过可读性、模块化和运行时间来判断代码质量。本文主要关注 Python 和 Jupyter 中的运行时和计时方法。随着函数处理更多的数据,运行时间可能会急剧增加。在所有条件相同的情况下,越快的函数越好。在本文中,我们将点积计算作为基准测试运行时的模型,我们将可视化几种生成点积的方法,看看哪种方法最快。点积是两个或多个向量相乘的结果。向量是大多数科学算法的基础,也是机器学习和梯度下降的基础。因此,对于数据科学家、机器学习研究人员,甚至是寻找技巧的新程序员来说,这些方法可能会提供洞察力。

Jupyter 方法

属国

# import packagesimport numpy as np
from timeit import timeit
import matplotlib.pyplot as plt

我们将在 Jupyter 笔记本中展示三种不同的时间编码方法。我们计时方法的输出有时被分成“墙时间”和“CPU 时间”两个子类别墙上时间是我们熟悉的时间概念,就像墙上的时钟或秒表的时间一样。墙壁时间记录从过程开始到结束的时间。CPU 时间是 CPU 专用于一个进程的总执行时间或运行时间。CPU 时间将是墙时间的一小部分。这是因为其他不直接涉及 CPU 的操作都包含在 wall time 中。我们将关注“墙时间”,因为它提供了直接和直观的时间。

在开始计时之前,我们需要计时的代码和作为参数传递的数组。为了创建函数计时的数组,我们使用 NumPy 生成两个大小为 1,000 的随机向量作为 NumPy 数组

# create the vectors# create the vectors as numpy arrays
A_arr = np.random.randn(10**3)
B_arr = np.random.randn(10**3)# copy the vectors as lists
A_list = list(A_arr)
B_list = list(B_arr)

现在我们将讨论 Jupyter 笔记本中的三种计时方法;Jupyter 内置的 time 'magic '和 timeit 'magic '方法以及一个名为 timeit 的外部包。

魔术是 Ipython(或 Jupyter)内核特有的,由 Ipython 内核提供。magics 的一个优点是你不必导入一个包。为了正常工作,Magics 使用了在底层语言中无效的语法元素。例如,Jupyter 内核对 Magics 使用“%”语法元素,因为“%”在 Python 中不是有效的一元运算符。然而,`% '在其他语言中可能有含义。

  1. Jupyter 的内置魔术时间
    Jupyter 的内置时间魔术返回单次执行一个单元格或一行的时间。通过在要计时的代码行上插入“%time ”,可以将时间魔法应用于一行代码。时间魔法也可以通过在单元格的开头放置%%time 来应用于单元格。这个“%%”告诉 Jupyter 使用魔法来计时整个细胞。

示例:时间线魔术

# time one execution of numpy’s function%time np.dot(A_arr, B_arr)[out] Wall time: 4.99 ms

例子:时间单元魔法

%%time# timing numpy’s built in functionnp.dot(A_arr, B_arr)[out] Wall time: 4.99 ms
  1. Jupyter 的内置魔术 timeit
    Jupyter 的内置魔术 timeit 会返回同一单元格或行的多次执行的平均值。当对每个单元格或行的单次执行进行计时时,结果可能会有所不同。这种差异可能是由后台运行的计算机进程造成的。因此,使用 timeit 将通过返回一组执行次数的平均值和标准偏差来产生更有价值的结果。这个方法也可以用作单元格或行魔术,但是为了比较,我们只把它实现为行魔术。

例如:朱庇特的时间

# find average of 10 runs of numpy’s dot product%timeit -n 10 np.dot(A_arr, B_arr)[out] 5.14 ± 2.93 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

3)time it 外部包

timeit 包还可以对一个函数的多次执行进行计时。这个包创建了一个函数计时的环境。默认情况下,这种环境关闭垃圾收集和缓存。垃圾收集是通过删除不再需要或不再使用的数据来释放计算机内存空间的自动过程。缓存是由用于在计算环境中临时存储数据的硬件或软件来完成的。这种方法的优点是它使独立的计时更具可比性。缺点是垃圾收集和/或缓存可能是被测函数性能的重要组成部分。

要使用 timeit,我们需要创建一个没有参数的函数。一个简单的方法是传递一个 lambda 函数,不带参数,作为计时的参数。

示例:Timeit 包

# find average of 10 runs of numpy’s functiontime = timeit(
 lambda: np.dot(A_arr, B_arr),
 number=10
)print(f”{time} ms”.format(time * 1000/ 10))[out] 0.0018839795529856929 ms

以上三种计时方法收敛到相同的结果。NumPy 数组上基于循环的函数最慢,列表上基于循环的函数次之,而 NumPy 的函数是目前最快的。

使用 timeit 的更彻底的方法
另一种方法是编写一个计时器函数,接受要计时的函数及其参数。然后它定义一个等价的(lambda)函数,没有参数,并计时。

def time_function(func, *args, reps=10):

“””
Passes *args into a function, func, and times it reps 
times, returns the average time in milliseconds (ms).
“””
 avg_time = timeit(lambda:func(*args),number=reps) / reps

 return avg_time * 1000

由此,我们得到了与直接使用 timeit 大致相同的结果。

现在,我们可能想看看随着向量长度的增长,时间是如何变化的。我建立了一个函数来计算不同长度的点积函数。使用同一个向量多次计时可能会产生不准确的结果,因为对于某些向量来说,计算点积可能会更快。我将重复不同的向量,以确保公平的测试。

def time_dot_product(func, 
 vector_length, 
 input_type = “array”, 
 data_reps = 10, 
 reps = 10
): 

“”” 
Takes func, a function that perfroms a calculation on 
two vectors (array-lines) and returns the times (in ms) 
the function takes to run on std. normal generated 
vectors.Arguments: 
 — — — — — 
 func (function): a function that performs a calculation 
 on two vectors (array-lines) 
 vector_length (int): the length that the random 
 vectors should be 
 input_type (str): Controls the data type of the random vector. 
 Takes values \”list\” or \”array\” 
 data_reps (int): the number of times to generate 
 the data 
 reps (int): the number of time to run the timer 
 for each data set 
“””total_time = 0 

 for i in range(0, data_reps): 

 A = np.random.standard_normal(vector_length) 
 B = np.random.standard_normal(vector_length) 

 if input_type == “list”: 
 A = list(A) 
 B = list(B) 

 inst_time = time_function(func, A, B, reps=reps)

 total_time += inst_time 

avg_time = total_time / data_repsreturn avg_time

为了可视化这些函数的行为,我们将使用 Matplotlib 绘制它们的图形。为此,我们对长度为 1 到 1,000,000 的向量的每个点积函数进行计时。对于较慢的计算机,应选择较低的数量级。如果有一台更快的计算机,看看这些函数在更长的向量上的表现可能会很有趣。

# create an array of increasing timesord_mag = 6
lengths = [10 ** n for n in range(0, ord_mag + 1)]

随着向量长度的增加,运行时间的增加几乎是完全线性的。这种线性符合理论:假设算术运算具有恒定的时间复杂度,点积运算具有线性时间复杂度,即 O(n)。基于循环的点积在 NumPy 数组上较慢,因为循环函数必须将 NumPy 数组转换为 python 列表数据类型。这种转换意味着遍历一个 NumPy 数组比遍历一个 list 需要更多的时间。NumPy 函数可能看起来不会增加执行时间。然而,如果我们放大,我们可以看到与其他时间复杂性相似的行为;O(n)。

总之,应该使用 NumPy 进行点积计算。对于其他向量运算也是如此。但是,如果必须编写循环,使用列表比 NumPy 数组作为输入更有效。我们所有的计时方法都返回了相似的结果,尽管格式不同。尽管根据我们的结果,NumPy 点积具有最短的运行时间,但是我们可以说所有的测试都具有相同的渐近复杂度或顺序;O(n)。在实际情况下,算法的运行时间取决于它必须完成的操作数量。记住,所有的事情都是一样的,更快的功能是更好的功能。当编写在大型数据集上运行的代码或编写模块化代码时,我们应该记住这一点。向量对于机器学习应用至关重要。因此,对于任何机器学习计算,NumPy 数组都是可行的。更快意味着更少的计算资源、时间和能量。在计算中,更快的解决方案是更好的解决方案!

我希望这是信息丰富和发人深省的!请随意浏览标题中链接的 Jupyter 笔记本,并亲自尝试一些计时。你的电脑比我的快吗?

我的电脑
|组件|规格|规格

|型号| iMac Retina 5k,27 英寸,2015 年末|
|CPU | 3.2 GHz 英特尔酷睿 i5 |
| RAM | 8GB 1867 MHz DDR 3 |
| GPU | AMD 镭龙 r9 m390 2gb |
| OS | Mojave v 10 . 14 . 5 |

对新冠肺炎实施制裁的时机很重要

原文:https://towardsdatascience.com/timing-matters-in-imposing-measures-for-covid-19-db53e2e5a987?source=collection_archive---------47-----------------------

越早采取的措施控制得越好

图片来源:freepik

作者:吉塔达斯&凯瑟琳洛佩斯

从第一个新冠肺炎病例出现在一个国家开始,这种病毒已经以不同的速度在不同的国家渗透到不同的社区。在某一时刻,政府通常会实施某种措施和政策,以拯救生命和生计。这些措施包括检测、追踪、增加卫生系统的容量、封锁和旅行限制等等。在这篇文章中,我们研究了一组国家,以了解他们在控制病毒传播方面的表现,以及他们使用的各种措施的时机。

本研究数据&国家

从我们在之前的工作继续,我们在这项研究中纳入了比澳大利亚确诊病例更多的国家。截至 2020 年 6 月 12 日,有 64 个国家出现了更多的确诊病例,并提供了它们的措施数据。因此,本研究将对这 64 个国家进行调查,其截至 6 月 12 日的确诊病例如下图 1 所示。

图一。截至 2020 年 6 月 12 日,世界各国的病例数超过澳大利亚

我们使用了来自人道主义数据交换(HDE)的 2 组数据。

  1. 数据集追踪全球受新冠肺炎影响的人数,包括确诊、康复和死亡病例。
  2. 获取强制措施“acaps _ covid 19 _ government _ measures _ Dataset . xlsx”的数据集

强制措施之间的相互关系

这项研究列出了 33 个国家的措施,从“加强公共卫生系统”到“部分封锁”等等。根据一个国家使用的每个具体措施的时间,每个措施都被缩放到[0,1]。从一个国家报告第一例病例的那一天起,如果没有使用某项措施,则该措施记录为 0。一个国家越早采取一项措施,该具体措施记录的数值就越高(越接近 1)。下图 2 显示了基于皮尔逊相关系数的热图。

图二。包含 33 个测量值的关联热图

上面的热图显示,“加强公共卫生系统”和“经济措施”之间有很强的相关性,“一般建议”和“测试政策”之间也有很强的相关性。它还表明了“部分封锁”和“国内旅行限制”之间的相关性。我们可以理解为这些措施经常一起使用。在所有这些被研究的国家中,“检测政策”是完全独立的,与“边境检查”无关。

实施措施和时机的聚类分析

在研究了 33 个测度之间的相关性后,通过降维得到了一组 28 个主成分。我们使用 K-means 聚类和剪影分数从 64 个国家的数据中得出一组 6 个聚类。

在每个国家出现第一例病例后,在不同的时间采取了不同的措施。所有这 64 个国家都根据其采取措施的时间特点被分配了一个类别号。如下面图 3 中的热图所示,如果度量值引入较早,则度量值更暗,在[0,1]的范围内更接近 1。一组国家使用的指标越晚,热图中显示的颜色越浅。

例如,“有限聚集是在新冠肺炎病例在这些国家开始后的早期阶段在所有国家使用的措施。相反,这项研究中包括的这些国家最近采取的措施是“封锁难民”和“大规模人口测试”。

图三。6 个集群中每个度量的时间平均值的热图

第 1 组(第 1 组)包括澳大利亚—“早起鸟”风格:

这 14 个国家包括澳大利亚、奥地利、比利时、丹麦、法国、德国、意大利、挪威、葡萄牙、西班牙、瑞士、哈萨克斯坦、菲律宾和南非。这些国家采用的措施的特点是:

  • 过早或相当早地推出 政府可能推出的大量跨选项措施。这些措施包括“经济措施”、“关闭商业和公共服务”和“加强公共系统”。
  • 杰出早期简介【心理援助与医务社会工作】和【测试政策】相比其他团体。

这组国家每日确诊病例的 7 天滚动平均值如图 4 所示。在这 14 个国家中,包括澳大利亚在内的 11 个国家已经(或几乎已经)使曲线变平。这些国家中的大多数也经历了病例从高峰到最新状态的大幅减少。澳大利亚政府在早期阶段采取了多项措施,成功地走上了这条曲线。

图 4。包括澳大利亚在内的第一组国家

第 2 组(第 2 类、第 5 类和第 6 类)——“早或晚”风格:

在下图 5 中,这一组包括 18 个国家。参照图 3,这些国家在实施措施方面有两个共同点。

  • 很早 一些措施的介绍:与其他国家相比,第 2 组国家很早就采用了"监视和监测"、"关闭学校"和"关闭边境",第 6 组国家很早就采用了"提高认识运动"、"加强公共卫生系统"和"机场健康检查"。
  • 很晚才出台“军事部署”和“乱人口测试”等措施,与其他团体的“测试政策”相比。

从下图 5 所示的案件数量的 7 天移动平均数来看,除了爱尔兰、以色列和厄瓜多尔这些奉承曲线的国家之外,大多数国家还没有用“或早或晚”模式实施的措施使曲线变平。

图五。第 2 类、第 5 类和第 6 类国家

第 3 组(第 3 组和第 4 组)——“中晚期”风格

这一组包括 33 个国家。关于这些国家采用所有这 33 项措施的时间,我们可以看到,与其他国家相比,大多数措施是在相当晚或相当晚的阶段引入这些国家的,只有“学校关闭”是一个例外。从下图 6 所示病例数的 7 天移动平均数来看,大多数国家的阳性病例数仍在上升。然而,中国、韩国、加拿大、荷兰、英国都包括在成功控制第一波疫情的国家之内,这表明除了引入的时机之外,我们还需要考虑更多的因素。

图六。第 3 类和第 4 类国家

见解和开放式问题

不同的国家在不同的时间采取不同的措施来控制传染病的传播。根据采取这些措施的时间,我们对国家进行了分组,以确定这 64 个国家的具体模式。很明显,越早采取措施,对控制疾病传播的影响就越大:

“时机很重要!越早越好”

然而,这项研究也强调指出,产生足够影响的时机非常有限。我们需要研究每项措施在控制 COVID19 传播方面的有效性,以便各国能够通过了解更多信息来调整更有效的短期和长期管理策略:

"在减少传播方面,各种措施有不同的效果!"

欢迎随时访问 GitHubrepo,欢迎您的反馈和意见。**

高效 Python 代码的计时

原文:https://towardsdatascience.com/timing-the-performance-to-choose-the-right-python-object-for-your-data-science-project-670db6f11b8e?source=collection_archive---------11-----------------------

如何比较列表、集合和其他方法的性能

乔恩·泰森在 Unsplash 上的照片

动机

让我们看看这些常用的创建列表的方法:

串联:

l = []
   for i in range(10000):
      l = l + [i]

追加:

l = []
   for i in range(10000):
      l.append(i)

理解:

l = [i for i in range(10000)]

列表范围:

l = list(range(10000))

这些方法应该给你同样的数组。但是你有没有想过不同方法的效率?如果您正在处理一个小数据集,您可能不需要选择一种方法而不是另一种方法,但是当数据集变大时,选择一种有效的方法会对性能产生很大的影响。

惊讶于concat和其他方法在性能上的巨大差异?等到你看到比例:

1019.0323133454616!

您可能会意识到理解不同方法和 Python 对象之间的性能差异是多么重要。但是你能用什么方法来选择一个有效的方法呢?

计时来追踪它

你追踪的一个方法是用时间来追踪创建某个对象需要多长时间,比较时间差。timeit方法允许你这么做。

import timeitimport numpy as npfrom timeit import Timer

让我们看看如何跟踪方法的时间来创建我之前展示的列表。要使用Timer,我们需要:

  • 将您想要计时的函数作为字符串位置传递,以将该函数放入Timer
  • 设置实验次数以找到该功能的平均时间

结果:

concat  25.208993583999998 milliseconds
append  0.13781585199999924 milliseconds
comprehension  0.08480268199999941 milliseconds
list range  0.024738168999999033 milliseconds

Worse vs. best ratio 1019.0323133454616

比较其他 Python 方法

酷!现在我们知道如何比较不同方法之间的时间。让我们用它来跟踪我们在 Python 中经常使用的其他方法

Pop-front 与 Pop-end

您可能会猜测弹出数组前面的元素比弹出数组末尾的元素花费更多的时间(因为在弹出第一个元素后,您必须重新分配数组中其他元素的位置)。但是随着数组大小的增加,先弹出多长时间呢?

我们使用范围从 10000 到 1000000 的数组进行测试,步长为 20000。让我们一起来观察我们的结果

import numpy as npmatrixDat = np.array( result )import matplotlib.pyplot as pltplt.plot(matrixDat[:,0], matrixDat[:,1], 'o', color='red',label='pop_zero');
plt.plot(matrixDat[:,0], matrixDat[:,2], '+', color='blue',label='pop_end');leg = plt.legend(numpoints=1)

.pop(0)的持续时间随着阵列尺寸的增加而增加,而.pop()的持续时间几乎保持不变。如果不追踪时间,我们不会注意到差异。

列表与集合

在我们找到 list 和 set 在性能上的区别之前,你愿意猜猜哪个性能更好吗?保持你的猜测,向下滚动找到答案。

使用前面的代码行来绘制结果。女士们先生们,让我来宣布结果:

如果你最初的猜测成立,你是对的。随着大小的增加,创建列表的持续时间增加,而集合的持续时间保持不变。

结论

了解 Python 方法之间的性能差异有助于您为自己的目标选择最有效的方法或对象。由于您将在数据科学项目中使用大型数据集,因此关注不同方法的性能以节省时间至关重要。

this Github repo 中,您可以随意使用本文的代码。

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以通过 LinkedInTwitter 与我联系。

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 使用 Python 最大化您的生产力

你创建了一个待办事项清单来提高效率,但最终却把时间浪费在了不重要的任务上。如果你能创造…

towardsdatascience.com](/maximize-your-productivity-with-python-6110004b45f7) [## cy thon——Python 函数的加速工具

当调整你的算法得到小的改进时,你可能想用 Cython 获得额外的速度,一个…

towardsdatascience.com](/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd) [## 用 Python 选择要投资的股票

您计划在未来 3 年投资几只股票,每只股票的每一美元都有不同的预期回报…

towardsdatascience.com](/choose-stocks-to-invest-with-python-584892e3ad22) [## 为您的数据科学项目提供 Numpy 技巧

创建数组、矩阵、执行矩阵运算、解决线性代数问题和常见数据科学的技巧…

medium.com](https://medium.com/@khuyentran1476/comprehensive-numpy-tutorials-for-beginners-8b88696bd3a2)

如果火绒可以直接刷到你身上会怎么样?

原文:https://towardsdatascience.com/tinder-swipe-on-you-fd65b905791?source=collection_archive---------45-----------------------

字节/大小

随着视频聊天功能即将推出,这个约会平台可以使用人工智能来检测令人不快的图像

亚历山大·辛恩在 Unsplash 上的照片

18 岁是每个人生命中的一大步,一两个月前我迈出了这一步。它通常伴随着一系列的通过仪式:买你的第一张彩票,喝你的第一杯酒,签订令人心碎的债务协议。

另一个是加入 Tinder。我们可能相距遥远,但与他人联系的需求比以往任何时候都更强烈。我想,离别使心更亲?

那是谎言,你的高中恋情不会持续到大学两个星期,杰西卡。

Tinder 最近宣布计划为该平台引入视频聊天功能,他们已经明确表示,在我所谓的“性感垂直缩放会议”期间,将利用某种人工智能 + 物体检测来防止骚扰并确保安全。

什么是物体识别?

一些定义:

  • AI(人工智能):泛指机器(计算机)系统,执行人类可以完成的任务。
  • CV(计算机视觉):专门理解图像或视频内容的一类 AI。
  • 物体检测:与 CV 相邻,它在寻找一个特定的物体。

在人类的术语中,‘大脑’有点像人工智能的整体概念,你的’眼睛执行计算机视觉,当你寻找特定的东西(你的钥匙、零食、真爱)时,你正在执行物体探测任务。

大多数 CV 程序使用CNN(卷积神经网络):

CNN 的每一个“层”都着眼于图像的某些特征(通过像素值),从简单的边缘开始,逐渐变得更加复杂。

这些特征被映射以给出每个特征的概率位置。来自每个部分的最高概率被汇集到一个更小的图像中,其中负像素值被变成 0。

然后过程重复。最终,所有这些连接的层可以被编译,使得它们匹配某个标签/结果。基于这些结果的概率,CNN 给出了它对图像中内容的最佳猜测。

来源

这很巧妙,但也很耗时。如果查丁顿·伍兹沃斯在 Tinder 视频聊天上开始变得太……舒服,20 秒的处理时间会感觉像过了一辈子。

幸运的是,一些 CNN 可以在实时运行。 YOLO 是一种物体检测算法,在自动驾驶汽车方面显示出了前景,在自动驾驶汽车中,实时检测是一个生死攸关的问题。

唯一一次说 YOLO 在 2020 年是可以接受的

YOLO 将图像分解成一个网格,每个网格方块负责预测其边界内物体的大小、类别和位置。

它还给出一个置信度得分——有多确定这是一个对象?然后,它试图找出对象的(在它实际上对象的情况下)。这返回一个条件概率:例如 P(Car | Object)。

这些置信度得分与正在讨论的对象周围的边界框相关联,最终产生许多不同权重的边界框。该算法然后寻找有许多 重叠盒子——这意味着那里很可能有一个物体。

来源 |较重的边界框线对应较大的置信度得分。

那些高度重叠的预测被输出,如果它们满足某个阈值概率分数,它们将被保留。YOLO 可以在视频的每一帧/每一秒都这样做,如果 Tinder 想监控视频聊天的安全,这是一个完美的工具。

这对 Tinder 的发展意味着什么

Tinder 表示,当涉及到安全和隐私之间的平衡时,他们向安全学习。在他们即将推出的视频聊天功能中使用 YOLO 实时物体检测可以让许多人感到更安全使用它+阻止任何小动作。

Tinder 的下一波用户是 Z 世代——我们的整个生活都在互联网上,所以我想我们会对 Tinder 观看我们的视频聊天感到满意。

这项功能如何工作是一个不同的问题。如果 Tinder 看到一个不受欢迎/不合适的对象,他们会结束通话,举报用户,还是给你一个警告?

技术上来说,这完全是另一回事。在整个关系中,从用户到用户、的不适当变化的分类。即使算法是为每个用户定制的,这也将是一个计算上具有挑战性的问题。

幸运的是,我 18 岁
在 3 英里外
,我喜欢解决问题和在沙滩上漫步。

A **byte-sized deep dive** into **tech** and **business**.

大家好,我是 Murto,是加拿大多伦多的一名 18 岁的企业家和学生。如果你想聊天,请在 LinkedIn 上联系我!

微型机器学习:下一次人工智能革命

原文:https://towardsdatascience.com/tiny-machine-learning-the-next-ai-revolution-495c26463868?source=collection_archive---------1-----------------------

更大的模型并不总是更好的模型

由 NASA 推动开始的电子产品小型化成为了一个完整的消费产品产业。现在我们把贝多芬的全部作品别在翻领上,戴着耳机听。— 尼尔·德格拉斯·泰森,天体物理学家兼科学评论员

[……]超低功耗嵌入式设备的普及,加上面向微控制器的 TensorFlow Lite 等嵌入式机器学习框架的推出,将使人工智能支持的物联网设备大规模扩散。— 哈佛大学副教授维杰·贾纳帕·雷迪

嵌入式设备微型机器学习(TinyML)概述。

这是微型机器学习系列文章的第一篇。本文的目标是向读者介绍微型机器学习的概念及其未来的潜力。在本系列的后续文章中,将深入讨论具体的应用程序、实现和教程。

简介

在过去的十年里,由于处理器速度的提高和大数据的出现,我们目睹了机器学习算法的规模呈指数级增长。最初,模型足够小,可以使用中央处理器(CPU)中的一个或多个内核在本地机器上运行。

不久之后,使用图形处理单元(GPU)的计算变得有必要处理更大的数据集,并且由于引入了基于云的服务,如 SaaS 平台(如谷歌联合实验室)和 IaaS(如亚马逊 EC2 实例),变得更加容易获得。此时,算法仍然可以在单台机器上运行。

最近,我们已经看到了专用集成电路(ASICs)和张量处理单元(TPU)的发展,它们可以打包大约 8 个 GPU 的能力。这些设备已经增加了跨多个系统分布学习的能力,以试图发展越来越大的模型。

最近,随着 GPT-3 算法(2020 年 5 月发布)的发布,这一点达到了顶峰,该算法拥有包含惊人的 1750 亿神经元的网络架构,是人脑中现有数量的两倍多(约 850 亿)。这比有史以来第二大神经网络图灵-NLG(2020 年 2 月发布,包含约 175 亿个参数)的神经元数量多 10 倍。一些估计称,该模型的培训成本约为 1000 万美元,并使用约 3 GWh 的电力(约为三个核电厂一小时的发电量)。

虽然 GPT-3 和图灵-NLG 的成就值得称赞,但自然地,这导致了一些业内人士批评人工智能行业越来越大的碳足迹。然而,它也有助于激发人工智能社区对更节能计算的兴趣。这些想法,像更有效的算法、数据表示和计算,多年来一直是一个看似不相关的领域的焦点:微型机器学习

微型机器学习(tinyML)是机器学习和嵌入式物联网(IoT)设备的交集。该领域是一个新兴的工程学科,有可能彻底改变许多行业。

tinyML 的主要行业受益者是边缘计算和节能计算。TinyML 源于物联网(IoT)的概念。物联网的传统理念是,数据将从本地设备发送到云端进行处理。一些人对这一概念提出了某些担忧:隐私、延迟、存储和能效等等。

能源效率。传输数据(通过有线或无线)非常耗能,大约比机载计算(具体来说,乘累加单元)耗能多一个数量级。开发能够自行执行数据处理的物联网系统是最节能的方法。人工智能的先驱们已经讨论了“以数据为中心”的计算(相对于云模型的“以计算为中心”)有一段时间了,我们现在开始看到它的表演。

隐私。传输数据可能会侵犯隐私。此类数据可能会被恶意行为者截获,并且当存储在单一位置(例如云)时,其安全性会变得更低。通过将数据主要保存在设备上并最大限度地减少通信,这提高了安全性和隐私性。

储存。对于许多物联网设备来说,它们正在获取的数据毫无价值。想象一下,一个安全摄像头一天 24 小时记录着一栋大楼的入口。在一天的大部分时间里,摄像机镜头没有任何用处,因为什么都没发生。通过拥有一个仅在必要时激活的更智能的系统,需要更低的存储容量,并且传输到云的必要数据量也减少了。

潜伏期。对于标准的物联网设备,如亚马逊 Alexa,这些设备将数据传输到云端进行处理,然后根据算法的输出返回响应。从这个意义上来说,这个设备只是一个通向云模型的便捷通道,就像你和亚马逊的服务器之间的信鸽。这个设备相当笨,完全依赖于互联网的速度来产生结果。如果你网速慢,亚马逊 Alexa 也会变慢。对于具有板载自动语音识别功能的智能物联网设备,延迟会减少,因为对外部通信的依赖会减少(如果不是没有的话)。

这些问题导致了边缘计算的发展,即在边缘设备(位于云“边缘”的设备)上执行处理活动的想法。这些设备在内存、计算和功率方面受到高度的资源限制,导致了更高效的算法、数据结构和计算方法的开发。

这种改进也适用于更大的模型,这可能导致机器学习模型的效率提高几个数量级,而不会影响模型的准确性。例如,由微软开发的 Bonsai 算法可以小到 2 KB,但甚至可以比典型的 40 MB kNN 算法或 4 MB 神经网络有更好的性能。这个结果听起来可能不重要,但在 1/10,000 大小的模型上同样的精度是非常令人印象深刻的。这么小的模型可以在 Arduino Uno 上运行,Arduino Uno 有 2 KB 的 RAM 可用——简而言之,你现在可以在 5 美元的微控制器上建立这样的机器学习模型。

我们正处于一个有趣的十字路口,机器学习正在两种计算范式之间分叉:以计算为中心的计算和以数据为中心的计算。在以计算为中心的范式中,数据由数据中心中的实例存储和分析,而在以数据为中心的范式中,处理在数据的源位置本地完成。虽然我们似乎正在快速迈向以计算为中心的范式的天花板,但以数据为中心的范式的工作才刚刚开始。

物联网设备和嵌入式机器学习模型在现代世界中越来越普遍(预计到 2020 年底将有超过 200 亿台活跃设备)。其中很多你可能都没有注意到。智能门铃,智能恒温器,当你说两句话,或者甚至只是拿起电话,智能手机就会“醒来”。本文的剩余部分将更深入地关注 tinyML 是如何工作的,以及当前和未来的应用程序。

云的层次结构。(来源: eBizSolutions )

TinyML 的示例

以前,设备需要复杂的电路来执行各种操作。现在,机器学习越来越有可能将这种硬件“智能”抽象为软件,使嵌入式设备变得越来越简单、轻便和灵活。

嵌入式设备的机器学习带来的挑战是相当大的,但在这一领域已经取得了很大的进展。在微控制器上部署神经网络的关键挑战是低内存占用、有限的功率和有限的计算。

也许 TinyML 最明显的例子是在智能手机中。这些设备会持续主动地监听唤醒词,比如安卓智能手机上的“嘿谷歌”,或者 iPhones 上的“嘿 Siri”。通过智能手机的主中央处理器(CPU)运行这些活动,现代 iPhone 的 CPU 为 1.85 GHz,仅在几个小时内就会耗尽电池。对于大多数人一天最多使用几次的东西来说,这种程度的退化是不可接受的。

为了解决这个问题,开发人员创造了专门的低功耗硬件,能够由小型电池供电(如圆形 CR2032“硬币”电池)。这使得电路即使在 CPU 不运行时也能保持活动,基本上是在屏幕不亮的时候。

这些电路的功耗低至 1 mW,使用标准 CR2032 电池可供电长达一年。

可能看起来不像,但这是一件大事。对于许多电子设备来说,能量是一个限制因素。任何需要市电的设备都被限制在有布线的位置,当十几个设备出现在同一个位置时,布线会很快变得难以承受。干线电力也是低效和昂贵的。将电源电压(在美国约为 120 V)转换为典型的电路电压范围(通常约为 5 V)会浪费大量能源。任何有笔记本充电器的人在拔掉充电器的时候可能都会知道这一点。充电器内变压器产生的热量是电压转换过程中浪费的能量。

即使是带电池的设备,电池寿命也有限,需要频繁对接。许多消费类设备的设计都是为了让电池能够持续工作一个工作日。依靠硬币大小的电池可以持续工作一年的 TinyML 设备意味着它们可以被放置在偏远的环境中,只在必要时进行通信以节省能源。

唤醒词并不是我们看到的唯一无缝嵌入智能手机的 TinyML。加速度计数据用于确定是否有人刚刚拿起手机,这将唤醒 CPU 并打开屏幕。

显然,这些不是 TinyML 唯一可能的应用。事实上,TinyML 为企业和爱好者提供了许多令人兴奋的机会,来生产更智能的物联网设备。在一个数据变得越来越重要的世界中,将机器学习资源分发到远程位置的内存受限设备的能力可能会对农业、天气预报或地震学等数据密集型行业产生巨大的好处。

毫无疑问,赋予边缘设备执行数据驱动处理的能力将为工业过程带来范式转变。例如,能够监测作物并在检测到土壤湿度、特定气体(例如,苹果成熟时会释放乙烷)或特定大气条件(例如,大风、低温或高湿度)等特征时发送“帮助”消息的设备将极大地促进作物生长,从而提高作物产量。

另一个例子是,智能门铃可能装有摄像头,可以使用面部识别来确定谁在场。这可以用于安全目的,或者甚至仅仅是当有人在场时,门铃的摄像机信号被传送到房子里的电视,以便居民知道谁在门口。

tinyML 目前的两个主要关注领域是:

关键词看点 大多数人已经熟悉了这个应用程序。“嘿 Siri”和“嘿 Google”是关键词的例子(通常与 hotword 或 wake word 同义)。这种设备持续收听来自麦克风的音频输入,并被训练成只对与所学习的关键词相对应的特定声音序列做出响应。这些设备比自动语音识别(ASR)应用程序简单,并且相应地使用较少的资源。一些设备,如谷歌智能手机,利用级联架构来提供安全的说话人验证。

视觉唤醒词 有一种基于图像的模拟唤醒词,称为视觉唤醒词。把这些想象成一个图像的二进制分类,来表示某样东西是存在还是不存在。例如,智能照明系统可以被设计成当它检测到人的存在时激活,当他们离开时关闭。类似地,野生动物摄影师可以在特定动物出现时使用这个来拍照,或者在他们检测到有人出现时使用安全摄像头。

下面显示了 TinyML 的当前机器学习用例的更广泛的概述。

tiny ml 的机器学习用例(来源图片:NXP)。

TinyML 如何工作

TinyML 算法的工作方式与传统的机器学习模型非常相似。通常,模型像往常一样在用户的计算机上或云中被训练。后期培训是 tinyML 真正工作的开始,这个过程通常被称为深度压缩

深度压缩过程示意图。来源: ArXiv

模型蒸馏

在训练之后,模型然后以这样的方式被改变,以创建具有更紧凑表示的模型。剪枝知识 提炼就是这样两种技术。

知识提炼的基本思想是,较大的网络中有一些稀疏或冗余。虽然大型网络具有高的表示能力,但是如果网络能力不饱和,它可以在具有较低表示能力(即,较少神经元)的较小网络中表示。Hinton et al. (2015)将教师模型中的嵌入信息转移到学生模型中称为“暗知识”。

下图说明了知识提炼的过程。

深度压缩过程图。在这个图中,“老师”是一个经过训练的卷积神经网络模型。教师的任务是将其“知识”转移到一个参数更少的更小的卷积网络模型,即“学生”。这一过程被称为知识提炼,用于将相同的知识保存在一个较小的网络中,提供了一种压缩网络的方法,以便它们可以在更多内存受限的设备上使用。来源:ArXiv

在这个图中,“教师”是一个经过训练的神经网络模型。教师的任务是将其“知识”转移到一个参数更少的更小的网络模型“学生”中。该过程用于将相同的知识保存在较小的网络中,提供了一种压缩知识表示的方式,从而压缩神经网络的大小,使得它们可以用于更多内存受限的设备。

同样,修剪有助于使模型的表示更加紧凑。广义地说,修剪试图去除对输出预测几乎没有用处的神经元。这通常与较小的神经权重有关,而较大的权重由于在推理过程中更重要而被保留。然后,在修剪后的架构上重新训练网络,以微调输出。

提取模型知识表示的剪枝图解。

量化

在提炼之后,该模型在训练后被量化成与嵌入式设备的架构兼容的格式。

为什么量子化是必要的?想象一个使用 ATmega328P 微控制器的 Arduino Uno,该微控制器使用 8 位算法。要在 Uno 上运行一个模型,模型权重理想情况下必须存储为 8 位整数值(而许多台式计算机和笔记本电脑使用 32 位或 64 位浮点表示)。通过量化模型,权重的存储大小减少了四分之一(对于从 32 位到 8 位值的量化),并且精度通常受到可忽略的影响(通常在 1–3%左右)。

8 位编码期间的量化误差图(然后用于重构 32 位浮点)。(来源: TinyML 书)

由于量化误差,一些信息可能在量化过程中丢失(例如,在基于浮点表示的 3.42 的值可能在基于整数的平台上被截断为 3)。为了解决这个问题,量化感知(QA)训练也被提出作为一种替代方案。QA 训练本质上在训练期间约束网络仅使用量化设备上可用的值(参见张量流示例)。

霍夫曼编码

编码是一个可选的步骤,有时通过以最有效的方式存储数据来进一步减少模型大小:通常通过著名的霍夫曼编码

汇编

一旦模型被量化和编码,它就被转换成某种形式的光神经网络解释器可以解释的格式,其中最流行的可能是 TF Lite (大小约 500 KB)和 TF Lite Micro (大小约 20 KB)。然后,该模型被编译成 C 或 C++代码(大多数微控制器为了有效利用内存而使用的语言),并由设备上的解释器运行。

TInyML 应用的工作流程(来源:Pete Warden 和 Daniel Situnayake 所著的 TinyML 一书)

tinyML 的大部分技能来自于处理复杂的微控制器世界。TF Lite 和 TF Lite Micro 之所以这么小,是因为去掉了任何不必要的功能。不幸的是,这包括调试和可视化等有用的能力。这意味着,如果在部署过程中出现错误,很难辨别出发生了什么。

此外,虽然模型必须存储在设备上,但是模型还必须能够执行推理。这意味着微控制器必须具有足够大的存储器,以便能够运行(1)其操作系统和库,(2)神经网络解释器,如 TF Lite,(3)存储的神经权重和神经架构,以及(4)推理期间的中间结果。因此,tinyML 研究论文中经常引用量化算法的峰值内存使用量,以及内存使用量、乘累加单元(MAC)的数量、精度等。

为什么不在设备上训练?

设备上的训练带来了额外的复杂性。由于数值精度降低,保证足够训练网络所需的精度水平变得极其困难。标准台式计算机上的自动微分方法近似精确到机器精度。计算 10^-16 精度的导数是不可思议的,但是利用 8 位值的自动微分将导致糟糕的结果。在反向传播过程中,这些导数被合成并最终用于更新神经参数。在如此低的数值精度下,这种模型的精度可能很差。

也就是说,神经网络已经使用 16 位和 8 位浮点数进行了训练。

第一篇研究降低深度学习中数值精度的论文是 Suyog Gupta 和他的同事在 2015 年发表的论文有限数值精度的深度学习。这篇论文的结果很有趣,表明 32 位浮点表示可以简化为 16 位定点表示,而精度基本上没有下降。然而,这是使用 随机舍入 的唯一情况,因为平均而言,它产生一个无偏的结果。**

2018 年,王乃刚及其同事在他们的论文用 8 位浮点数 训练深度神经网络中,训练了一个使用 8 位浮点数的神经网络。使用 8 位数字而不是推理来训练神经网络,实现起来明显更具挑战性,因为需要在反向传播期间保持梯度计算的保真度(当使用自动微分时,它能够实现机器精度)。

计算效率如何?

还可以定制模型,使其计算效率更高。广泛部署在移动设备上的模型架构,如 MobileNetV1MobileNetV2 就是很好的例子。这些基本上是卷积神经网络,它们重新设计了卷积运算,使其计算效率更高。这种更有效的卷积形式被称为深度方向可分离卷积。还可以使用 基于硬件的评测神经架构搜索 来优化架构的延迟,本文对此不做介绍。

下一场人工智能革命

在资源受限的设备上运行机器学习模型的能力为许多新的可能性打开了大门。发展可能有助于使标准机器学习更加节能,这将有助于平息对数据科学对环境影响的担忧。此外,tinyML 允许嵌入式设备基于数据驱动的算法被赋予新的智能,这可以用于从预防性维护探测森林中的鸟声的任何事情。

尽管一些机器学习从业者无疑将继续扩大模型的规模,但一个新的趋势正在朝着更具内存、计算和能源效率的机器学习算法发展。TinyML 仍处于萌芽阶段,这方面的专家很少。我推荐感兴趣的读者查看参考资料中的一些论文,它们是 tinyML 领域中的一些重要论文。这个领域正在快速发展,并将在未来几年内成为人工智能在工业中的一个新的重要应用。注意这个空间。

参考

[1]辛顿,杰弗里&维尼亚尔斯,奥里奥尔&迪恩,杰夫。(2015).在神经网络中提取知识

[2] D. Bankman,L. Yang,B. Moons,M. Verhelst 和 B. Murmann,“一款始终在线的 3.8μJ/86% CIFAR-10 混合信号二进制 CNN 处理器,所有片内存储器均采用 28nm CMOS ,” 2018 年 IEEE 国际固态电路会议——(ISSCC),加利福尼亚州三藩市,2018 年,第 222–224 页,doi: 10.1109

[3]沃登,P. (2018)。机器学习的未来为何微小。皮特·沃顿的博客。

[4]沃德-福克斯顿,S. (2020 年)。皮层上的 AI 声音识别——M0:数据为王。EE 时代。

[5]利维,M. (2020)。MCU 上的深度学习是边缘计算的未来。EE 时代。

[6]格鲁恩斯坦、亚历山大&阿尔瓦雷斯、拉结尔&桑顿、克里斯&戈德拉特、穆罕默德阿里。(2017).移动设备上关键字定位的级联架构

[7] Kumar,a .,Saurabh Goyal 和 M. Varma。(2017).物联网用 2 KB RAM 的资源高效机器学习

[8]张,运东&须田,纳文&赖,梁真&钱德拉,维卡斯。(2017). Hello Edge:微控制器上的关键词识别

[9]费多罗夫、伊戈尔&斯塔梅诺维奇、马尔科&延森、卡尔&杨、李奇亚&曼德尔、阿里&甘、&马蒂娜、马修&沃特穆格、保罗。(2020). TinyLSTMs:助听器的高效神经语音增强

[10]林,季&陈,魏明&林,&科恩,约翰&甘,庄&韩,宋.(2020). MCUNet:物联网设备上的微小深度学习

11】陈、田琦&莫罗、蒂埃里。(2020). TVM:面向深度学习的自动化端到端优化编译器

[12]韦伯、洛根和安德鲁·雷乌施(2020)。Tiny ml——TVM 如何驯服 Tiny

13】克利须那摩提,Raghuraman。(2018).量化深度卷积网络实现高效推理:白皮书

[14]约辛斯基,贾森&克伦尼,杰夫&本吉奥,Y. &利普森,霍德。(2014).深度神经网络中的特征有多大的可转移性?

[15]赖,良真&须田,纳文&钱德拉,维卡斯。(2018).cMSIS-神经网络:Arm Cortex-M CPU 的高效神经网络内核

[16]乔德里,阿坎克沙&沃顿,皮特&施伦斯,黄邦贤&霍华德,安德鲁&罗德斯,洛奇。(2019).视觉唤醒词数据集

[17]监狱长,皮特。(2018).语音命令:用于有限词汇语音识别的数据集

[18]泽姆利亚尼金,马克西姆&斯莫卡洛夫,亚历山大&哈诺瓦,塔蒂亚娜&彼得罗维奇娃,安娜&谢列布里雅科夫,格里戈里。(2019). 512KiB RAM 就够了!单片机上的现场摄像头人脸识别 DNN。2493–2500.10.1109/ICCVW.2019.00305

用于搜索的 TinyBERT:比 BERT 快 10 倍,小 20 倍

原文:https://towardsdatascience.com/tinybert-for-search-10x-faster-and-20x-smaller-than-bert-74cd1b6b5aec?source=collection_archive---------19-----------------------

加速谷歌用来回答你的问题的算法,这样它就可以在标准的 CPU 上运行

合著 科尔梯恩梯

最近,谷歌推出了一种理解搜索并决定你看到哪些结果的新方法。这种方法基于流行的开源转换器 BERT,使用语言理解来理解搜索背后的含义,这是传统的关键字方法无法做到的。

我们构建了 NBoost 来让非 Google 用户也能轻松使用高级搜索排名模型,并在此过程中开发了 TinyBERT for search,我将在本文中介绍它。

特别是对于更长、更具对话性的查询,或者像“for”和“to”这样的介词对意义非常重要的搜索, Search 将能够理解您查询中单词的上下文。你可以用自己觉得自然的方式搜索。

  • Pandu Nayak,谷歌搜索副总裁

让伯特变得更小更快

BERT 已经被证明可以改善搜索结果,但是有一个问题:运行这些查询理解模型需要大量的计算机。当速度很重要并且需要处理数百万次搜索时,这一点尤为重要。这一挑战如此艰巨,以至于谷歌甚至建立了自己的硬件来运行这些模型。而且他们用来在生产中运行这些 TPU 的代码是私有的,所以其他任何想运行它的人都要倒霉了。

为了在标准硬件上运行这些模型,我们使用 知识提炼 ,一个更大的教师网络被用来训练一个更小的学生网络的过程,该网络保持了大部分的准确性,但使用了更少、通常更小的层,使其更小更快

https://nerv anasystems . github . io/distiller/knowledge _ distillation . html

TinyBERT 建筑

我们使用来自这个报告的代码进行知识提炼,并对其进行修改,用于在女士马可数据集上进行训练和评估。我们最初用 MS Marco 训练三元组在 PyTorch 中训练了一个教师 bert-base-uncased 网络。然后我们用它作为老师训练一个更小的学生 BERT 网络,只有 4 个隐含层而不是标准的 12 个。此外,这些层中的每一层都只有 312 的尺寸,而不是 768 的尺寸,使得模型更加轻便。我们在 BERT 的末尾使用前馈二进制分类层来产生搜索排名的分数。

BERT 用于对(问题、答案)或(搜索、搜索结果)对进行搜索评分,然后根据这些评分对结果进行排名

以下是我们使用的 tinyBERT 架构的示例 bert_config.json ,与标准 bert_config 的显著差异以粗体显示。

{
 “attention_probs_dropout_prob”: 0.1,
 “cell”: {},
 **“emb_size”: 312,**
 “hidden_act”: “gelu”,
 “hidden_dropout_prob”: 0.1,
 “hidden_size”: 312,
 “initializer_range”: 0.02,
 **“intermediate_size”: 1200,**
 “max_position_embeddings”: 512,
 “num_attention_heads”: 12,
 **“num_hidden_layers”: 4,**
 “pre_trained”: “”,
 “structure”: [],
 “type_vocab_size”: 2,
 “vocab_size”: 30522
}

评估模型

[1] MRR 对 BM25 排名前 50 的结果。宾查询指的是马尔科女士。K80 GPU 上的速度。

Marco 女士是真实世界搜索引擎使用数据的最大公开来源,使其成为评估搜索和问答模型的理想选择。它显示真实世界的必应搜索结果,以及用户最终点击了什么的信息。当伯特基地第一次在 MSMarco 上使用的时候,它以 0.05 MRR 的成绩击败了最先进水平(很多)。基于 BERT 的解决方案仍然位居排行榜首位。我们的目标是找到一种方法,从一个在现实世界中使用足够快的模型中实现这种提升。

进来吧,TinyBERT。虽然在重新排名方面不如 BERT Base 有效,但我们的实验表明,它保留了 BERT Base 的 90%的 MRR 分数(0.26 比 0.29,从 BM25 重新排名前 50),同时使模型 ~快 10 倍~小 20 倍。然而,基于马尔科女士等学术基准的结果往往缺乏现实世界的普遍性,因此应该持保留态度。

将机器学习添加到你的小应用程序中

原文:https://towardsdatascience.com/tinyml-add-machine-learning-to-your-tiny-apps-b21c41ffb422?source=collection_archive---------40-----------------------

使用机器学习构建嵌入式系统项目指南

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

您可能已经使用 NVIDIA 的 Jetson 板或 Raspberry Pi 设计了 ML 项目。对于构建汽车和机器人应用来说,这些都是非常强大的设备。例如,Jetson 使用强大的 GPU,满负荷运行时功率为几十瓦。

但你有没有想过在你的微型微控制器或 Arduino 项目中利用深度学习?嗯,你可能最终会想‘哦,这几乎不可能’。这些微型微控制器仅仅运行在几十或几百千字节的内存上。它们主要用于低功耗和低成本的应用程序,并且计算效率低下,无法运行深度学习功能。

你可能会惊讶地发现,你的 Android 手机使用什么机制来不断监听“Ok Google”呼叫词。我告诉你,它没有使用 Android 强大的处理器和千兆字节的 RAM 来运行强大的神经网络。相反,它只是使用运行在数字信号处理器(DSP)上的 14KB 神经网络来完成这项任务。这些 DSP 只有几十千字节的内存,功耗只有几毫瓦。

简而言之,为了将机器学习引入到运行在几千字节内存、低处理能力和寿命为几个月的硬币电池(能源成本低于 1 mW)上的设备中,TinyML 的这一想法被引入。结合深度学习和嵌入式系统,您现在可以通过集成简单的语音识别、通过运动传感器进行的手势检测以及通过摄像头传感器检测人员来构建令人惊叹的应用。

我需要什么硬件?

最初,从许多现成的板开始是一个好习惯。 SparkFun 的 EdgeArduino Nano 33 BLE SenseMbed STM32F746G 探索套件是一些受欢迎的选项。如果你想建立一些现实的原型项目,你还需要一个麦克风,加速度计或摄像头。

我需要什么软件?

大多数开发者更喜欢 TensorFlowKeras 来构建和训练深度学习网络。张量流模型基本上是一组指令,告诉解释器如何转换数据以产生输出。当我们想要使用这个训练好的模型时,我们将它加载到内存中,并使用解释器执行它。幸运的是,TensorFlow 提供了一个解释器来在这些微小的低功耗设备上运行模型。这套工具叫做 TensorFlow LiteTensorFlow Lite 转换器用于将我们的模型转换为 TensorFlow Lite 格式。

TensorFlow Lite 有一个变种叫做tensor flow Lite for micro controllers,这是一个专门为运行在只有几十千字节可用内存的嵌入式设备上而设计的框架。

模型被转换后,就可以部署了。我们使用 tensor flow Lite for micro controller 的 C++库将模型加载到设备并进行预测。由于这是我们的模型满足我们的应用程序代码的一部分,我们需要编写一些代码,从传感器获取原始输入数据,并将其转换为与我们的模型被训练时相同的格式。然后,将转换后的数据传递到模型中,用于进行预测。

作者图片

包扎

TinyML 使我们能够将机器学习模型集成到 C++程序中,以创建用于在低内存和低功耗设备上部署的强大应用程序。微控制器无处不在,我们周围的不同设备中大约有 2500 亿个微控制器。想象一下,如果由这种微小的人类般的智能为它们提供动力,它们会给我们带来什么样的力量?

Python 中快速数据分析的技巧和诀窍

原文:https://towardsdatascience.com/tips-and-tricks-for-fast-data-analysis-in-python-f108ad32fa90?source=collection_archive---------13-----------------------

尼古拉斯·霍伊泽在 Unsplash 拍摄的照片

用 python 快速总结和描述数据集

python 编程语言有大量用于数据分析的内置函数和库。结合这些库可以产生非常强大的方法来总结、描述和过滤大量数据。

在本文中,我想分享一些关于如何结合 pandasmatplotlib 和一些内置 python 功能来快速分析数据集的技巧。

本文中的所有库都可以通过软件包管理器安装。

数据

在本文中,我将使用一个被称为成人收入数据集的数据集,它可以从 UCI 机器学习库下载。该数据集包含关于每个成年人的许多特征和一个目标变量,该变量告诉我们他们的收入是否超过 50,000 pa。

这里是我正在使用的库的所有导入。

import pandas as pd
import numpy as np
from sklearn import preprocessingimport matplotlib.pyplot as plt
%matplotlib inline

我使用 pandas 读取数据集并返回前几行。

data = pd.read_csv('adults_data.csv')
data.head()

该数据集通常用于建立机器学习模型,该模型根据特征预测收入阶层。然而,在进入模型构建阶段之前,先进行一些数据分析是有用的。

形容

describe 函数允许我们快速查看数据集中数字要素的一些基本描述性统计数据。运行data.describe()我们可以看到我们的数据集有 32,561 行,我们可以看到每个数字特征的平均值,并了解每个特征的值分布情况。

值计数

在这个数据集中,我们还有分类变量,对这些变量的分布有一个基本的了解也是很有用的。value_counts()函数提供了一种非常简单的方法来实现这一点。让我们用这个来检查一下marital-status的特性。

data['marital-status'].value_counts()

为了使其更容易可视化,我们可以通过添加少量额外代码来快速创建该值的条形图。标题是可选的,您可以使用通常的 matplotlib 功能自定义轴标签、颜色和图表的其他方面。

plt.title('Marital Status')
data['marital-status'].value_counts().plot.bar()

当我们有一个具有高基数(大量唯一值)的要素时,使用值计数绘图就不那么有效了。

plt.title('Native Country')
data['native-country'].value_counts().plot.bar()

对于像 native-country 这样的要素,只绘制前 n 个值会更有用,因为这为我们提供了有用的洞察力。我们可以通过增加一点代码来实现。

plt.title('Native Country')
data['native-country'].value_counts().nlargest(10).plot.bar()

熊猫小组

当我们有数据要进行分段比较时,pandas groupby 函数非常有用。在该数据集中,我们希望执行分析以了解两个收入类别之间的差异以及要素差异的大小。pandas 的 groupby 函数提供了一种非常快速的方法来实现这一点。

如果我们运行下面的代码,我们可以分析两个收入组之间所有数值的均值差异。

round(data.groupby(['income']).mean(),2)

比较差异的更好方法是查看两组的分布差异。箱线图是一种很有用的方法。这可以通过与 groupby 一起使用绘图功能来实现。可视化如下所示。

data.groupby('income').boxplot(fontsize=20,rot=90,figsize=(20,10),patch_artist=True)

你会注意到,由于数值在不同的尺度上,很难比较这两种分布。为了克服这一点,我们可以缩放这些值。为此,我使用了scikit-learnminmax scaler 函数。这会缩放这些值,使它们都位于 0 和 1 之间。我们现在可以清楚地看到一些特征之间的实质性差异,例如年龄和每周工作时间。

numeric_features = data.select_dtypes(include=['int64', 'float64']).columns
categorical_features = data.select_dtypes(include=['object']).columnsnumeric_data = data[numeric_features]
categorical_data = data[categorical_features]x = numeric_data.values 
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
numeric_data = pd.DataFrame(x_scaled, columns=numeric_data.columns)
data_transformed = pd.concat([numeric_data, categorical_data], axis=1)
data_transformed.groupby('income').boxplot(fontsize=20,rot=90,figsize=(20,10),patch_artist=True)

我们还可以使用 groupby 函数来比较分类特征。在下图中,我们可以很快发现,在高收入阶层中,男性人数多于女性。

data.groupby('income').gender.value_counts().unstack(0).plot.barh()

数据透视表

Pandas 的功能使您能够用 python 创建电子表格风格的数据透视表。数据透视表允许您快速汇总、分组和过滤数据,以执行更复杂的分析。

我们可以使用数据透视表来探索更复杂的关系。让我们更深入地研究一下性别和收入阶层之间的关系。女性挣得少是因为她们每周工作时间少吗?

pivot_workclass = pd.pivot_table(data, values=['hours-per-week'],
                                 index = 'gender',
                                 columns = 'income', aggfunc=np.mean, fill_value=0)

我们可以添加绘图功能,使这更容易可视化。

pivot_workclass = pd.pivot_table(data, values=['hours-per-week'],
                                 index = 'gender',
                                 columns = 'income', aggfunc=np.mean, fill_value=0).plot.bar()

上面描述的所有方法都可以扩展,以创建更丰富、更复杂的分析。更多关于熊猫图书馆的信息,请看我之前的指南,可以在这里找到。

感谢阅读!

RStudio 和 R Markdown 中的提示和技巧

原文:https://towardsdatascience.com/tips-and-tricks-in-rstudio-and-r-markdown-7a464508b0c?source=collection_archive---------26-----------------------

或者如何更快更有效地写 R 代码

照片由胡安·戈麦斯拍摄

如果你有机会和一位经验丰富的程序员一起工作,你可能会惊讶于她写代码的速度。在本文中,我分享了一些技巧和快捷方式,您可以在 RStudio 和 R Markdown 中使用它们来加速代码的编写。

运行代码

你很可能已经知道这个快捷方式,但是我仍然为新的 R 用户提到它。从您的脚本中,您可以运行一段代码:

command + Enter on Mac
Ctrl + Enter on Windows

在 R and R 减价中插入评论

要插入注释:

command + Shift + C on Mac
Ctrl + Shift + C on Windows

此快捷方式可用于:

  • 当你想注释你的代码时。它会在行首添加一个#
  • 对于 R Markdown 中的文本。它会在文本周围添加<!---->

请注意,如果您想要注释多行,请选择您想要注释的所有行,然后使用快捷键。如果您想要取消注释,请应用相同的快捷键。

编织一个 R 减价文件

您可以使用此快捷方式来编织 R Markdown 文档:

command + Shift + K on Mac
Ctrl + Shift + K on Windows

代码片段

代码段通常只有几个字符长,用作插入一段普通代码的快捷方式。你只需输入几个字符,然后按下Tab,它会用一个更大的代码来完成你的代码。然后再次使用Tab在需要定制的代码中导航。例如,如果您键入fun,然后按下Tab,它将自动使用所需代码完成代码,以创建一个函数:

name <- function(variables) {

}

再次按下Tab将在占位符间跳转,以便您进行编辑。所以你可以先编辑函数的名字,然后是变量,最后是函数内部的代码(自己试试!).

RStudio 中默认有很多代码片段。以下是我最常用的代码片段:

  • lib呼叫library()
library(package)
  • mat创建一个矩阵
matrix(data, nrow = rows, ncol = cols)
  • ifelei创建if() {}else {}else if () {}等条件表达式
if (condition) {

}else {

}else if (condition) {

}
  • fun创建一个函数
name <- function(variables) {

}
  • for创建 for 循环
for (variable in vector) {

}
  • ts插入带有当前日期和时间的注释(如果你有很长的代码并与他人分享,以便他们能看到它何时被编辑,这很有用)
# Tue Jan 21 20:20:14 2020 ------------------------------
library(shiny)ui <- fluidPage(

)server <- function(input, output, session) {

}shinyApp(ui, server)

你可以看到所有默认的代码片段,并通过点击工具>全局选项…>代码(左侧栏) >编辑代码片段…

R 降价中的有序列表

在 R Markdown 中,当创建这样的有序列表时:

  1. 项目 1
  2. 项目 2
  3. 项目 3

而不是纠结于数字和打字

1\. Item 1
2\. Item 2
3\. Item 3

你可以简单地输入

1\. Item 1
1\. Item 2
1\. Item 3

获得完全相同的结果(自己尝试一下或者查看本文的代码!).这样,在创建新项目时,您就不必担心下一个号码是什么了。

更进一步,只要第一项是您想要开始的数字,任何数字实际上都将呈现相同的结果。例如,您可以键入:

1\. Item 1
7\. Item 2
3\. Item 3

这使得

  1. 项目 1
  2. 项目 2
  3. 项目 3

然而,我建议总是使用你想要的数字来开始所有的条目,因为如果你移动了顶部的一个条目,列表将从这个新的数字开始。例如,如果我们将7\. Item 2从前面的列表中移到顶部,列表将变成:

7\. Item 2
1\. Item 1
3\. Item 3

这不正确地呈现了

  1. 项目 2
  2. 项目 1
  3. 项目 3

R Markdown 中的新代码块

当编辑 R Markdown 文档时,您将需要多次插入新的 R 代码块。以下快捷方式将使您的生活更轻松:

command + option + I on Mac (or command + alt + I depending on your keyboard)
Ctrl + ALT + I on Windows

R Markdown 中的新 R 代码块

重新格式化代码

一个清晰可读的代码总是更容易和更快地阅读(并且在分享给合作者时看起来更专业)。自动应用最常见的编码准则,如空白、缩进等。,使用:

cmd + Shift + A on Mac
Ctrl + Shift + A on Windows

例如,下面的代码不符合指导原则(并且不容易阅读):

1+1
  for(i in 1:10){if(!i%%2){next}
print(i)
 }

变得更加简洁易读:

1 + 1
for (i in 1:10) {
  if (!i %% 2) {
    next
  }
  print(i)
}

RStudio addins

RStudio 插件是一些扩展,它们为从 RStudio 中执行高级 R 函数提供了一种简单的机制。更简单地说,当执行一个插件(通过单击插件菜单中的一个按钮)时,相应的代码被执行,而您不必编写代码。RStudio 插件的优势在于,与您自己编写代码相比,它们允许您更轻松地执行复杂和高级的代码。

我最常用的 addin 可能是[{esquisse}](https://www.statsandr.com/blog/rstudio-addins-or-how-to-make-your-coding-life-easier/#esquisse) addin ,它允许用[{ggplot2}](https://www.statsandr.com/blog/graphics-in-r-with-ggplot2/) 以用户友好和交互的方式绘制图形,而不必自己编写代码。

RStudio 插件种类繁多,需要更详细的解释,所以我写了一篇文章专门讨论这些插件。见文章此处

{pander}{report}为美学

{pander}包中的pander()功能对于 R Markdown 文档和报告非常有用。这实际上不是一条捷径,但它极大地提高了 R 输出的美观性。

例如,参见下面独立性卡方测试的默认输出与使用pander()函数(使用[{ggplot2}](https://statsandr.com/blog/graphics-in-r-with-ggplot2/) 中的diamonds数据集)的相同测试的输出之间的差异:

library(ggplot2)
dat <- diamondstest <- chisq.test(table(dat$cut, dat$color))
test## 
##  Pearson's Chi-squared test
## 
## data:  table(dat$cut, dat$color)
## X-squared = 310.32, df = 24, p-value < 2.2e-16library(pander)
pander(test)

你需要的所有信息都显示在一个雅致的表格中。pander()函数适用于许多统计测试(不是所有测试,但我没有在 R 中的所有可用测试中尝试过)和回归模型:

# Linear model with lm()
model <- lm(price ~ carat + x + y + z,
            data = dat)
model## 
## Call:
## lm(formula = price ~ carat + x + y + z, data = dat)
## 
## Coefficients:
## (Intercept)        carat            x            y            z  
##      1921.2      10233.9       -884.2        166.0       -576.2pander(model)

pander 函数还制作数据集、表格、向量等。在 R Markdown 输出中可读性更好。例如,请参见下面的差异:

head(dat) # first 6 observations of a dataset## # A tibble: 6 x 10
##   carat cut       color clarity depth table price     x     y     z
##   <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
## 2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
## 3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
## 4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
## 5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
## 6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48pander(head(dat))

summary(dat) # main descriptive statistics##      carat               cut        color        clarity          depth      
##  Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065   Min.   :43.00  
##  1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258   1st Qu.:61.00  
##  Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194   Median :61.80  
##  Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171   Mean   :61.75  
##  3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066   3rd Qu.:62.50  
##  Max.   :5.0100                     I: 5422   VVS1   : 3655   Max.   :79.00  
##                                     J: 2808   (Other): 2531                  
##      table           price             x                y         
##  Min.   :43.00   Min.   :  326   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710   1st Qu.: 4.720  
##  Median :57.00   Median : 2401   Median : 5.700   Median : 5.710  
##  Mean   :57.46   Mean   : 3933   Mean   : 5.731   Mean   : 5.735  
##  3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540   3rd Qu.: 6.540  
##  Max.   :95.00   Max.   :18823   Max.   :10.740   Max.   :58.900  
##                                                                   
##        z         
##  Min.   : 0.000  
##  1st Qu.: 2.910  
##  Median : 3.530  
##  Mean   : 3.539  
##  3rd Qu.: 4.040  
##  Max.   :31.800  
##pander(summary(dat))

table(dat$cut, dat$color) # contingency table##            
##                D    E    F    G    H    I    J
##   Fair       163  224  312  314  303  175  119
##   Good       662  933  909  871  702  522  307
##   Very Good 1513 2400 2164 2299 1824 1204  678
##   Premium   1603 2337 2331 2924 2360 1428  808
##   Ideal     2834 3903 3826 4884 3115 2093  896pander(table(dat$cut, dat$color))

names(dat) # variable names##  [1] "carat"   "cut"     "color"   "clarity" "depth"   "table"   "price"  
##  [8] "x"       "y"       "z"pander(names(dat))

克拉切工颜色净度深度价格xyz

rnorm(4) # generates 4 observations from a standard normal distribution## [1] -1.8170575  0.2089859  1.0480589  0.1609936pander(rnorm(4))

1.2910.1842-0.1146-1.006

这个技巧在编写 R Markdown 时特别有用,因为生成的文档看起来会更好。

另一个美观的技巧是{report}包中的report()函数。

pander()类似,report()函数允许以更易读的方式报告测试结果——但它也为您解释结果。例如,参见相关性测试:

# install.packages("remotes")
# remotes::install_github("easystats/report") # You only need to do that once
library("report") # Load the package every time you start Rreport(cor.test(dat$price, dat$carat))## Effect sizes were labelled following Funder's (2019) recommendations.
## 
## The Pearson's product-moment correlation between dat$price and dat$carat is positive, significant and very large (r = 0.92, 95% CI [0.92, 0.92], t(53938) = 551.41, p < .001)

测试结果与 p 值和相关系数一起显示并解释给您。

注意,report()功能可用于其他分析。在软件包的文档中查看更多示例。

{equatiomatic}提取方程模型

如果您经常需要在 R Markdown 报告中编写与统计模型相对应的方程,[{equatiomatic}](https://cran.r-project.org/package=equatiomatic)将帮助您节省时间。

下面是一个多元线性回归的基本示例,使用与上述相同的数据集(即diamonds来自{ggplot2}):

# install.packages("equatiomatic")
library(equatiomatic)# fit a basic multiple linear regression model
model <- lm(price ~ carat + depth,
            data = dat)extract_eq(model,
           use_coefs = TRUE)

价格= 4045.33 + 7765.14 克拉-102.17 克拉(深)+ ϵ

如果方程很长,您可以通过添加参数wrap = TRUE在多行中显示它:

model <- lm(price ~ carat + x + y + z + depth,
            data = dat)extract_eq(model,
           use_coefs = TRUE,
           wrap = TRUE)

价格= 12196.69 + 10615.5 克拉-1369.67 克拉+ 97.6 克拉+ 64.2 克拉-156.62 克拉(深)+ ϵ

请注意:

  • 如果您在 R Markdown 中使用它,您需要为该特定代码块添加results = 'asis',否则该方程将被呈现为 LaTeX 方程
  • 在撰写本文时,它仅适用于 PDF 和 HTML 输出,不适用于 Word
  • 每行的默认术语数是 4。您可以使用terms_per_line参数来更改它:
extract_eq(model,
           use_coefs = TRUE,
           wrap = TRUE,
           terms_per_line = 2)

  • {equatiomatic}也支持逻辑回归的输出。在插图中查看所有支持的型号
  • 如果您需要没有实际参数估计的理论模型,请删除use_coefs参数:
extract_eq(model,
           wrap = TRUE)

在这种情况下,我更喜欢用β0 作为截距,而不是α。你可以用intercept = "beta"论点来改变这一点:

extract_eq(model,
           wrap = TRUE,
           intercept = "beta")

管道操作员%>%

如果您经常使用{dplyr}{tidyverse}{magrittr}软件包,以下是管道操作员%>%的快捷方式:

command + Shift + M on Mac
Ctrl + Shift + M on Windows

其他人

与许多其他程序类似,您也可以使用:

  • Mac 上的command + Shift + N和 Windows 上的Ctrl + Shift + N打开一个新的 R 脚本
  • Mac 上的command + S和 Windows 上的Ctrl + S保存您当前的脚本或 R Markdown 文档

感谢阅读。我希望这些提示和技巧对你有用。如果你正在使用其他的,请在评论区分享。

和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。

相关文章:

原载于 2020 年 1 月 21 日 https://statsandr.com

Sci-kit 学习的技巧和诀窍会让你大吃一惊!

原文:https://towardsdatascience.com/tips-and-tricks-of-sci-kit-learn-that-will-amaze-you-ce791431552e?source=collection_archive---------64-----------------------

“学习不是偶然获得的,必须用热情去追求,用勤奋去对待。”——阿比盖尔·亚当斯

阿娜斯·阿尔尚蒂的 Unsplash

我从我的同事那里收到很多问题,比如“sci-kit learn 中最常用的函数是什么,我们可以学习这些函数来尽快开始构建数据科学项目”,这迫使我思考,“他们是在阅读了 帕累托原理 后接近我还是什么?”。

我不能告诉你在这样的库中学习一些特定的函数,因为每一个都有它们的使用案例和重要性。

在本文中,我将讨论 sci-kit learn library 的一些提示和技巧,它们在任何与数据相关的项目中都非常有用。

这就是我们今天要讨论的:

  1. 使用带有分层参数的 test_train_split()函数。
  2. 何处不使用 values()函数。
  3. simple imputr()函数。
  4. 管道中的特征选择。
  5. 使用 K 折叠和带洗牌的分层折叠。
  6. 使用 AUC 进行分类。
  7. 四种方式监控流水线的步骤。
  8. CountVectorizer()和 make_column_transformer()。
  9. 处理 Joblib 函数()。

1.使用带有分层参数的 test_train_split()函数。

我们不能在回归和分类任务中使用具有相同参数的函数。

在分类问题中,我们寻找预测一些离散值,对吗?。我们也会意识到输出属性可能会有类不平衡。因此,在执行 train_test_split 操作时,分类比例不一定要保留在训练和测试数据中。

因此,为了解决这个问题,我们使用分层参数,如下图所示。

例如:

来源:我的图库

2。哪里不使用 values()函数?

在将系列或任何数据帧传递给 sci-kit learn 时,不需要使用 values 函数,因为它知道如何访问底层的 numpy 数组。

示例:

来源:我的图库

3.简单估算器()函数

在进行数据分析时,我们经常会遇到一些列或行缺少标记为“nan”的标签。为了处理这种问题,我们用列的平均值代替 nan 值,有时用最频繁出现的词代替。

对于所有这些任务,我们在 sklearn 中有一个函数 SimpleImput

请参见下面的例子以获得更多的理解。

举例:

来源:我的图库

4.管线中的特征选择:

通过以下方式将特征选择添加到管道非常容易:

  1. 通过使用 SelectPercentile 功能来保持最高得分特征。
  2. 在预处理之后、模型构建之前添加特征选择。

例如:

来源:我的图库

5.使用 K 折叠和带洗牌的分层折叠。

如果我们正在考虑使用交叉验证,并且我们的数据集不是任意排序的,我们可以使用洗牌来获得更好的结果。这里有更多关于洗牌的信息。

例子:

来源:我的图库

6.使用 AUC 进行分类

如果我们执行具有类别不平衡的二元分类,AUC 可以是有效的评估度量。

参见示例:

来源:我的图库

6.监控流水线步骤的四种方法。

有四种方法来监控机器学习流水线的各个步骤。请参见下面的例子以获得更多的理解。

例如:

来源:我的图库

8.CountVectorizer()和make _ column _ transformer()

如果我们想要向量化两个文本列并一次连接它们,请遵循以下步骤。

例如:

来源:我的图库

9.处理 Joblib 函数():

为了通过将我们的机器学习模型嵌入到任何实时 web 应用中来部署它,或者为了保存该模型以备后用,我们使用 sklearn 中可用的 joblib 函数

参见下面的 E 示例:

来源:我的图库

在我们走之前..

本文到此为止。我相信今天你们都已经了解了 sci-kit learn library 的一些新特性和功能。我没有包括第 10 个和更远的,因为我将在下一篇文章中描述它们。

在此之前,我需要知道你对这篇文章是否有用的回应。请在下面的评论区发表评论,让我知道我是否遗漏了什么,以便我可以在下一篇文章中纠正它。

请跟随凯文·马卡姆先生,因为他经常发布这样的提示和技巧。

如果这篇文章对你有所帮助。请在这里支持我https://www.buymeacoffee.com/shobhitsri】

谢谢你。

阅读和撰写 ML 研究论文的技巧

原文:https://towardsdatascience.com/tips-for-reading-and-writing-an-ml-research-paper-a505863055cf?source=collection_archive---------18-----------------------

从几十次同行评审中获得的经验教训

凯文·Ku 在 Unsplash 上的照片

同行评议是科学界的一个主要过程,它总是在科学杂志或会议上发表论文之前进行。它的目标是接收同行研究者的反馈,这些研究者根据他们自己的经验分析你的工作,并根据一些标准如新颖性、技术正确性甚至可读性来判断它。

在与“AI”相关的领域(如计算机视觉、自然语言处理、语音处理等……)中,这一步往往会因为 arxiv.org 这样的工具而被延迟或完全跳过。Ariv 是一个预印本服务器,它的目标应该是新作品的早期传播和辩论,但许多论文在任何同行评审之前就放在那里变得非常受欢迎。有时根本没有同行评议。许多这样的论文确实是非常有价值的作品,但在某些情况下,一些想法在没有得到社区“绿灯”的情况下传播,并且有很好的理由。

这很糟糕吗?这样好吗?当然,arxiv 防止了一些可能阻碍年轻研究人员职业生涯的守门机制。另一方面,我们的世界充斥着论文,对于新的研究人员(或需要阅读它们的数据科学家/工程师)来说,很难区分好的和坏的工作。有这么多的文件,我们需要一种方法来缩小我们的重点。

在这篇文章中,我想分享我从同行评审中学到的论文写作/阅读的经验,当我说阅读时,我指的是评审。这是一个很好的练习,把你面对的所有论文,也是最受欢迎的论文,作为一个综述来阅读。它们并不提供已有的知识,通常需要几年时间,社区才能广泛地复制和再现实验以吸收新知识。所以,让怀疑和批评来预测你的热情。阅读会花更长的时间,但你会在这个过程中学到更多。

写作技巧

在接下来的部分,我描述了一篇论文需要分析的不同方面,这些方面也是你在会议同行评议中需要评估的。这些建议是四年写作和阅读的产物,得到被拒绝的论文,并根据审稿人的建议进行改进。我知道,与许多教授十年的经验相比,四年算不了什么。然而,这些都是从艰难的道路上得到的教训,我想我可以通过写下它们来让别人的生活变得更容易。讨论的观点对写作和阅读都有效,但写作显然更难,因此,我想在开始之前补充一些内容。

首先,英语和科技写作掌握的越多越好。良好的研究是论文被接受的必要条件,但这还不够。你的读者应该能够理解你所做的事情及其价值。 提高 继续。永远不要停止学习,永远不要认为自己的写作能力足够好。有说母语的人和你在同一个领域写作,有被训练成语言学家的研究人员,他们总会比你写得更好。幸运的是,这是一项持续进行的工作,如果一切顺利,当你再次阅读一年前的论文时,你会因写作问题而感到尴尬。要想提高得更快,不要局限于在研究工作结束时写论文。写草稿,提案,甚至博客(看我做什么,而不是看我说什么;) )最重要的是,接收反馈。当你的错误被指出并被纠正时,你就进步了。

第二,记住你的听众。你的论文应该遵循你正在撰写的会议/杂志的写作惯例,并且结果应该是正确的类型。例如,一项关于技术如何帮助翻译的研究很难在 EMNLP,上发表,但它将非常适合像 MT 峰会这样的机器翻译会议。同样,一个新的数据收集界面可能对许多任务非常有用,但除非它提出新的深度学习模型,否则它永远不会到达 NeurIPS 。或者说,机器学习会议比其他会议需要更多的数学写作。

第三,永远把你的读者放在心上。提醒你的读者并不在你的头脑中。你的读者不知道你知道什么,没有你的经验,不知道你写作时在想什么,更不知道你的假设。除非你把一切都写下来。然后,写论文不是自我庆祝。没有人读你知道你可以粉碎所有的竞争,打破最先进的结果。研究论文是交流新知识的一种方式,而你的读者正是需要这种方式。经常问自己为什么读者(和评论家)会对你的作品感兴趣,为什么他们会关心你的作品,你怎样才能让它变得更有趣。在企业界,最成功的公司是那些能够更好地理解客户需求并据此提出产品建议的公司。写作也需要同样的心态。

最后,科学写作不应该是无菌的。每当你写作时,给你的读者讲一个故事。如果你论文的每一部分都是独立的,而且大部分都是你的数字的轮廓,那么它可能是有用的参考,但不会让你的读者兴奋。一篇研究论文需要遵循一个类似于现代故事的进程:一个强大的敌人威胁要扰乱我们的生活(我们的问题);真的需要有人和他打一架(动机);出现一个能对敌的英雄(拟法);在他之前也有人尝试过,失败了(相关 woks);打斗发生(实验和结果);但是,由于我们是科学家,胜利被对战斗的分析所取代。最后,根据从分析中学到的经验,我们请求我们的社区加入我们的战斗,并承诺很快回来。当你写一个好的故事时,你创造了参与度,提供的不仅仅是信息。

研究论文的关键方面

新奇

新奇是科学中一个棘手的话题。研究显然必须产生新的知识,但这可能意味着不同的人有不同的想法,有时社区会以牺牲其他知识为代价高估一种知识,主要是因为研究趋势或当时被认为“困难”的东西。

最明显的例子发生在 NLP 会议(以及其他与“人工智能”相关的领域),当时每个人都开始使用深度学习。似乎唯一值得做的研究是为不同的任务提出新的深度学习拓扑。其他重要的领域,比如构建语言资源和评估系统质量,都被放到了次要的会议上。

我认为这个问题的出现是因为许多没有经验的评论者(像我一样)更感兴趣的是深度学习可能实现的东西,而不是实际上更好地理解一个问题以及如何解决它。这种态度导致了许多我们不再记得的论文被接受,可能是因为“新”方法与以前更简单的模型没有任何实质性的不同。

幸运的是,现在会议明确地鼓励他们的评论者对“可接受的”论文有更广阔的视野。事实上,新颖性可能意味着在两个不同的研究领域之间建立意想不到的联系,提出所需的语料库,更好的评估,甚至更好的是,为新的任务铺平道路。

新颖性与研究论文的内容密切相关。几年前,表明可以用深度学习做一些事情,然后用 RNNs、CNN 等等,是一个合理的研究问题。现在它不再被认为是有趣的了(假设你可以找到一个没有应用所有这些东西的任务)。

当你读一篇论文时,把它和以前的作品联系起来,试着理解它有多新颖。这个问题以前解决过吗?这篇论文提出了一种看待这个问题的新方法吗?资源是否有价值,建造方法是否有利于复制?

写作时,尽可能地突出论文的新颖性。如果你不做,别人也不会做。突出新鲜感也能给你提供故事线索。

清楚

内容质量在一篇研究论文中是绝对重要的,但是为了能够传达内容,它必须写得好。一篇好的论文有好的结构,便于阅读。摘要和引言以广泛的方式传达信息,并激励读者继续阅读。在中间必须清楚哪里可以找到你的假设,实验设置,实验,需要的背景以及它在当前文献中的位置。结论总结了论文,强调了研究结果以及为什么其中包含的研究是重要的。

摘要、引言和结论必须写得特别仔细,因为它们的目的是让读者相信这篇论文值得一读。

如果你是一个初学者写论文,最好的办法是坚持在你发表论文的地方使用与你相似的最常见的论文结构。随着时间和经验的积累,你会学会改变它以更好地适应你的论文,但在这一点上没有必要跑得太快。使用干净的结构,专注于你的写作。

良好的英语是第二点,也是更难的一点。语法要尽可能完美,句子要清晰简洁。避免泛泛而谈或模棱两可的陈述。清楚地解释你给出的数字和表格,不要做任何假设。再一次,记住:

读者不在你的头脑里。

如果你希望你的论文对同行研究人员来说是清楚的,首先请具有不同背景的人阅读,并告诉你他们发现什么不清楚。你会对实际的可读性感到惊讶。

阅读时,欣赏一篇写得漂亮的论文,或者只是把一篇写得不好的论文放在一边。如果你不能理解它所说的,或者如果内容太含糊,很可能对其他人来说很难阅读。这对于提供新知识是没有用的。

动机

一篇论文的引言必须提供一般的背景信息以及它所解决的科学问题,一些关于所使用的方法和手段的信息以及所有这些背后的动机。这部分在写论文的时候会被低估,可能是因为一个人假设它的价值是显而易见的,也可能是因为一个人认为一篇论文中真正需要的只是结果。事实证明,除非你在一个过度拥挤的领域做研究,否则你的读者不太可能知道它为什么重要。我有时会遇到论文被拒绝的情况,主要是因为它们没有很好的动机。

你可能会问,如果其中包含的研究是好的,为什么会如此重要。原因是,如果你不能解释解决一个问题的相关性,其他人怎么能知道这是一个问题呢?此外,任何发表地点的论文空间都是有限的。那么,在其他条件相同的情况下,一篇解决了一个引人注目的问题的论文会比另一篇动机可疑的论文更有价值。

我的建议是仔细思考为什么你的读者会觉得你的研究有趣,然后明确地写出来。如果动机与你的读者产生共鸣,并且解决方案很好,他们将成为你在这个星球上最大的粉丝,并争取让它被接受/知晓。相反的情况听起来会像:“方法是有趣的,结果是好的,是好的,但我为什么要关心?”。试着往好的方面想。

复习的时候,尽量谨慎一点。如果动机没有引起你的共鸣,那可能是因为你不理解要解决的问题。然而,如果论文不能以一种可理解的方式框定一般问题和其中所研究的方面,那么这是一个需要指出的问题。

假设

科学的支柱之一是可证伪的假设:在观察到一个现象后,我提出一个假设,并设计假设成立的实验。我希望我的假设没有被我的实验证明是错的,但将来可以被证明是错的/不完全的。

假设应该对一种现象给出解释,或者证明一项工程改进是合理的。在一篇论文中,应该从摘要开始清楚地陈述,并沿着论文重复。如果最成功的论文也是那些假设改变了我们看待问题的方式的论文,这就不是巧合了。注意力是你所需要的全部假设自我注意力在建模序列时比递归神经网络更有效;" BERT "假设大量未标记的文本数据可以为许多 NLP 任务的系统提供动力;提取神经网络中的知识“假设神经网络可以学习目标类之间的潜在关系,这些关系比原始数据本身对训练新模型更有用。他们现在都是科学界的常识,但他们的想法是通过他们强有力和简洁的信息传递的,而不仅仅是通过表格中的数字。相比之下,假设弱的论文将被视为“增量工作”,然后被移到较低的排名。

写作时,清楚地陈述你的假设,并确保你提出的方法与其一致。显然,这一部分应该在设计方法的时候就完成,而且比写论文要早得多,但是当你写的时候,是时候让你的读者明白这一点了。

阅读/复习时,问问自己假设是否清晰,是否有趣,实验是否与假设一致。如果方法和假设之间不一致,那么论文不是产生知识而是混乱。如果你觉得研究是好的,点击“拒绝”总是不好的,但是通过一个不成立的假设来证明的方法会导致错误的主张。当论文的标题与其内容不符或分析/结论突然提出主张时也是如此。在科学中,错误是可能发生的,但公开的错误主张是不可接受的。

数据集/评估

用于实验的数据集不是实验设计的次要选择。数据集体现了一组在研究过程中应该牢记的领域(或语言,用于语音和语言处理)、假设和偏见。数据集应该反映要研究的现象。一些研究工作使用真实任务的“代理”数据集,但这通常不是一个好主意。

机器翻译领域数据集问题的一个常见例子是关于低资源语言对的论文,我必须承认我犯了同样的错误。许多论文提出了针对低数据条件的方法,但随后在大型数据集的一个小(有时不是很小)子集上进行实验。然而,许多方法在这里似乎可以工作,只是因为小数据产生一个弱基线。此外,这种方法假设资源贫乏的语言和资源丰富的语言是相似的,只是词汇量较少。这主要是一厢情愿的想法,因为语言可以像你想象的那样多种多样。例如,“存在”和“拥有”的概念可以用许多不同的方式表达,如果要表达的话;不同的正式程度会导致完全不同的词汇;这些习惯用语确实与他们的文化有关;不同的书写系统,有时很多在一起。这些只是资源真正匮乏的语言所面临的挑战中的一部分,很难从小型数据集中学到。

一个不同的问题是评价问题。有时,研究人员急于对他们仍然不知道如何评价的问题提出新的解决方案。在这种情况下,建立一种评价方法比“新方法”更能培育研究领域。例如,“性别处于危险之中?在 MuST-SHE 语料库上评估语音翻译技术提出了一种可再现的方法来评估关于性别相关现象的语音翻译质量。构建包含手动注释的测试集所需的评估方法。还能做得更好吗?当然是的,但是我们仍然不知道怎么做。与之前关于翻译性别偏见的研究相比,该论文是一大进步,之前的研究只是简单地评估总体翻译质量,并将其作为任务的代理。

您是否希望解决一项任务,但现有的数据集/评估方法不够好?建立这些,你的工作将比使用超级复杂的神经网络来解决假问题更有价值。
记住,任何接近新研究领域的人都需要软件、数据集和自动评估。通过使访问这些资源变得容易,你可以在你的领域获得关注(和引用)。就我个人而言,人们开始在语音翻译领域注意到我,是因为我工作的代码数据集

在写论文时,确保你使用的数据集和评估方法与你想要解决的问题是一致的。

阅读论文时,确保引言/结论中的主张确实与实验发现相符。

基线

你的基线代表了你对工作的关注程度。一个强基线,可能比其他发表的结果更强,意味着你的方法提供的改进是可靠的。有时,它碰巧阅读或审查基线与 5 年前的结果具有竞争力的论文,并且他们绝对忽略了在此期间产生的所有改进。然后,尽管基线上的改进可能是有意义的,最终结果是不可靠的。原因是当应用于更强的基线时,许多方法或归纳偏差的贡献(就最终结果而言)趋于零。例如,很难理解在具有大量训练数据的神经机器翻译模型中嵌入预训练的价值,而当训练集很小时,它们非常有效。

写论文时,对你的基线表现出更多的爱,它会得到回报。更强的基线可以让你对一个问题有新的认识,并突出到目前为止解决问题的一些缺陷。弱基线只有在试图通过希望获得不了解你的领域的评论者来发表论文时才有用。请不要这样做。

当阅读一篇论文时,在被论文中闪亮的结果所震惊之前,检查它是否引用了同一领域的最新论文,并验证基线是否与其他研究一致。列出当前技术水平的表格通常是有价值的,但要经常仔细检查它是否真的是当前的技术水平。我看到一些论文排除了他们应该知道的结果(因为时间流逝和发表的论文数量很少)。这样,他们的结果看起来比实际情况好得多。这是一种非常糟糕的科学实践,一旦发现就应该立即停止。

结果/分析

这些结果对于像 NLP 这样的经验领域来说是一个重要的方面,但深度学习的采用迫使我们半信半疑地阅读它们。什么会出错?在检查基线是否令人信服之后,我们需要评估改进的实体。相对较小的改善,尽管在统计上是显著的,但仍然可能是由于随机性(如不同的随机种子,或者甚至是方法的不同实现)或者超参数的更好选择。仅仅通过阅读一篇论文,很难说出改进的原因是什么,所以我更喜欢专注于分析。如果分析可以显示假设和结果之间的一致性,那么我倾向于持积极的态度。如果分析显示了一些东西,只是因为它必须显示,那么论文的其余部分最好是真正好的。

然而,有时真的很难产生一个分析,可以显示一些有趣的研究。通常,发生这种情况是因为它涉及到理解网络权重内部发生了什么,这仍然是很难解释的。然后,我们被迫提供代理来获得关于我们的方法的一些见解。代理应该仍然与我们感兴趣的现象和模型有关。无论如何,如果你在读一篇论文,发现分析不令人满意,不要太消极,除非你能提出一个更有价值的分析。

写论文时,确保你的结果令人信服,遵循的程序与以前的研究相似,以便读者容易比较。

当阅读一篇论文时,试着弄清楚这些结果是否真的是由于所应用的方法或者其他不相关的因素。仔细阅读分析,理解它是否对所研究的现象有说服力。

结论

一篇科学论文写起来/读起来/审阅起来可能会很吓人,但随着时间的推移,实践和经验会让它变得更容易。幸运的是,许多论文遵循相同的结构,这使得阅读更容易,当他们不这样做时,要么他们特别好,要么他们特别差。这两种情况通常都很容易发现。如果你是写科学论文的新手,你可能想提高你的科学写作技巧。网络上到处都是资源,我链接的只是一个很小的样本。通过这种方式,我学到了许多有用的技巧和建议。如果你是评论的新手,最好通过评论已发表的论文并请更有经验的人来评论你的评论来做一些练习。我希望这篇文章能帮助你关注相关的方面,让你更容易理解一篇论文的价值,避免我开始时犯的一些错误。

[## 带有类发现的 Python 多态性

学习一种模式来隔离包,同时扩展 Python 代码的功能。

towardsdatascience.com](/python-polymorphism-with-class-discovery-28908ac6456f) [## 科技博士让你在学术之外茁壮成长的 7 种方式

我从我的博士学位中学到了什么,为什么我会再做一次。

medium.com](https://medium.com/be-unique/7-ways-a-ph-d-in-tech-will-make-you-thrive-outside-academia-3a3ef7e49538) [## 同方差和混合效应模型

什么是同异方差,为什么异方差需要混合效应模型和一个真实的例子。

medium.com](https://medium.com/machine-translation-fbk/homoscedasticity-and-mixed-effects-models-f0f301700815)

中等会员

你喜欢我的文章吗?你是否正在考虑申请一个中级会员来无限制地阅读我的文章?

如果您通过此链接订阅,您将通过您的订阅支持我,而无需为您支付额外费用https://medium.com/@mattiadigangi/membership

作为数据科学家员工#1 的生存技巧

原文:https://towardsdatascience.com/tips-for-surviving-as-data-scientist-employee-1-ef9f623c5267?source=collection_archive---------20-----------------------

如何成为第一个在战场上的数据士兵

越来越多的企业正在向数据科学迈出第一步,许多企业希望在内部建立这种能力。这为数据科学家提供了充分的机会,让他们能够从一开始就参与进来,并在引导一个组织走向数据智能未来的过程中发挥作用。

我很幸运/自虐地在两家不同的公司做了这件事——一家网页设计公司和一家律师事务所。在这个过程中,我学到了很多关于我的领域如何更好地服务于其他领域的工作人员,并为公司带来价值。这并不容易,有时我会想念和我的同龄人一起工作的日子。但这种火的洗礼可以增强你的学习,拓宽你的技能,给你一个通过数据做出真正改变的机会。以下是我对成为“数据人”的一些机会和陷阱的看法。

Arnaud Mesureur 在 Unsplash 上拍摄的照片

你必须推销数据科学

数据科学是一个众所周知的名词,但是对于没有技术背景的人来说,有点抽象和神秘。你的新同事可能不会立即看到你的用处以及你的技能会如何帮助他们——他们习惯了自己做事的方式,如果有选择,大多数人会像以前一样愉快地继续下去。

—你必须成为一名销售人员,不仅仅是为了你自己的技能,而是为了整个数据科学领域—

这不是批评,这只是人之常情。你有责任证明数据科学如何让其他人受益。因此,你必须成为一名销售人员,不仅仅是为了你自己的技能,而是为了整个数据科学领域。

拓展战略将有助于提升你在企业中的形象,并开启关于你可以做出贡献的方式的对话。

  • 写——承诺定期给整个公司发一封电子邮件,展示你的工作,让人们了解可能性,并邀请人们与你联系。这让您的工作范围更广,并让数据科学在人们的脑海中挥之不去。如果你觉得自吹自擂到这种程度不舒服,也许可以找一些其他学习技术的同事,把范围扩大一点。然而,你被带进来是有原因的,你的同事可能会喜欢有机会听到你正在做的有趣的工作。
  • 网络——一对一的聊天是一种快速有效的了解他人世界的方式。在半个小时的专门补课时间里,你可以很好地了解某人的一天是什么样子,他们做的决定和他们使用的材料。这也是一个机会,让他们了解数据科学可能帮助他们的一些方式,并提出一些想法。确保做好准备,准备好一系列要问的问题,以及一些要点,说明你认为公司内部哪里有数据科学的机会。大多数情况下,没有什么会直接产生,但是通过在早期建立这些关系,并教育人们你所做的事情,你将更有可能在以后需要你的帮助时被想到。
  • 出席 —没有什么能代替站在整个公司面前说“你好,我是理查德,这是我的工作”。只需一个简短的演示以及几分钟的问答时间,就能让你的名字与众不同,并建立对什么是数据科学的基本理解。如果可以的话,在你自愿做这件事之前等几个星期。你需要让演讲尽可能地与你的听众相关,而不是泛泛的数据科学之旅。展示你早期的工作并提出一些想法会让你变得平易近人、有用,并可能为接下来的几个月建立一连串的工作。

但是不要过度销售…

围绕数据科学和人工智能有很多炒作。所有行业的公司都渴望告诉世界他们在大数据上的投资以及它带来的所有好处。

承诺不可能的事情却做不到,这对任何人都没有好处

对于业外人士来说,这看起来像是魔术。脸书和谷歌近乎读心术的能力,加上人工智能在越来越多的任务中超越人类的故事,创造了一个神话,表明一切皆有可能。

在这种情况下,随着你渴望在你的新角色中留下深刻印象,很容易过度承诺。好的作品需要时间和细心的迭代。承诺不可能的事情却做不到,这对任何人都没有好处。一旦你让某人失望了,就很难再把他们赢回来,所以那些早期的作品对你来说至关重要。

数据科学很难,很耗时,而且经常令人沮丧,不能保证得到你想要的答案。交流你所在领域的局限性和交流机会同样重要。任何人都可以谈论天马行空的头脑风暴,但是你的专业知识将创造性思维与实际现实联系起来。通过诚实地说出你在一定时间内可以达到的目标,你可以建立信任的关系,通过这种关系你的技能可以真正发光。

学会说“不”

即使你在销售和教育人们数据科学方面做得非常出色,仍会有一些人将你放在普通的 it 岗位上。这可能意味着没有推动你或充分利用你的专长的请求来到你面前。例如,有人问我关于电脑无法启动、重置密码和编辑 WordPress 页面的问题。

当你是一个新角色,渴望显得有用和忙碌时,很容易接受不适合你的工作。因此,虽然平易近人和乐于助人很重要,但当一项工作最好由别人来做时,一定要果断和清晰地沟通。

有策略

在你开始考虑你希望在头 6-12 个月里能够实现的事情之前,仔细想想。提前咨询你的经理,从你面试前后的谈话中获得信息。当你开始一份新工作时,没有什么比有一个计划更能让你立足的了。你需要敏捷,因为随着你对业务了解的增加,优先级会改变,但是拥有一个项目想法的列表会帮助你快速获得动力。

在早期,你可能会注意到一堆你可以轻松贡献的东西。您的新同事将会开发出自己处理数据的方式。但是随着你的专业知识的注入,你可能会有很多方法可以快速改进事情。一些简单的事情,比如对某人的电子表格进行重组并添加一些方便的公式,或者编写一些 PowerShell 脚本来自动完成一项任务,都会对某人的工作周产生很大的影响。这些唾手可得的果实是立即证明你的价值并开始在企业内建立盟友网络的绝佳机会。

布瑞恩·洪在 Unsplash 上拍摄的照片

当然,你在组织中的主要赞助商可能已经迫不及待地想让你加入,有一长串的项目要启动。他们雇用你是因为他们看到了公司内部数据科学的潜力,并且渴望充分利用你的技能。对于你应该优先考虑什么,他们会有自己的想法,重要的是采纳他们的意见。但是他们也没有你的眼光去发现什么是可能的,什么是比他们想象的更困难的。所以,不要犹豫,积极主动,提出你自己的想法,尝试一起想出一个计划。

它可以是孤独的

当你在一家专门从事数据科学的公司或一个数据科学家团队工作时,当事情变得棘手时,你会有一个由同样书呆子气的同事组成的网络。每当你需要集思广益,设计解决方案或调试工作时,总有人能够理解并做出贡献。

然而,如果你是第一个在地面上的数据科学家,在开始时,你将是单枪匹马。你周围的人可能会在高层次上理解你,但是对于更深层次的东西,你只能靠自己了。当你与一个难题搏斗,却没有人给你出主意的时候,你通常会感到压力很大。因此,如果你能在企业中找到任何对数据科学感兴趣的人,并希望学习和参与其中,那么就鼓励和支持他们。

数据会很乱

在我早期职业生涯的大部分时间里,我被宠坏了,因为我只处理财务和销售数据的大数据仓库。我不必担心数据是如何到达那些表的。在以 DS#1 的身份进入一家小的网络开发机构后,我不得不迅速提高我的数据集成能力。一个项目的数据将以不同的格式分散在不同的平台上。我可能需要收集数据,在这里查询 MySQL,在那里查询 PostgreSQL,遍历分页的 API 请求或抓取网站内容,而不是简单地从几个表中进行选择。当然,每个系统都为其原始功能进行了完美的设计,但从数据科学的角度来看,将数据转换成我可以使用的形式需要更多的工作。

当您第一次浏览公司数据时,执行审计并绘制出信息存储位置图将是一个有用的参考。它还将为改善数据治理和评估数据质量创造机会。

注重质量,而不是数量

如果你的工作质量很高,人们会想要更多,需求很快就会超过一天中的工作时间。这是一个很好的问题,并引入了扩展团队的机会。

由于缺乏数据科学同行,确保工作质量变得更加困难。如果没有人能够理解和质疑你的模型,你就必须把你自己的措施落实到位,以保持高质量。设定标准,使用清单和严格的单元测试可以帮助你对你交付的工作感到舒适。但最好的建议可能是给自己更多的时间来完成事情,让自己正确地处理手头的任务,并进行彻底的测试。

积极保持你的技能

当你被其他数据科学家包围着,从事几十个不同的项目时,你会通过纯粹的潜移默化被动地学到很多东西。在了解有趣的新应用及其技术缺陷方面,饮水机和午餐时间的聊天是非常宝贵的。通过知识共享和内部培训进行更正式的学习也有助于不断发展和增加新技能。

作为 DS#1,这一切都落在你身上。虽然在一家新公司建立数据科学的日常工作肯定会让你忙得不可开交,但继续投资于你的技能并为你的职业生涯锦上添花也很重要。这意味着在朝九晚五之外,花时间在 MOOCs 上,跟上行业新闻,与你的专业同行进行社交。

重要的是不要脱离圈子

像 Meetup 这样的网站,以及脸书和 LinkedIn 群都是在你的城市结识志同道合者的好方法。重要的是,不要脱离圈子,错过你的同龄人兴奋的事情。通过每月参加一到两次活动,你将能够跟上行业的发展,避免在新角色中被孤立。

成为“万事通”

如果你在一家中大型科技公司工作,你会被各种各样的技术知识所包围,在数据科学和技术的许多不同领域都有明确的角色划分。如果你的专长在一个领域,你周围会有足够的支持让你专注于你擅长的领域。

然而,如果你是 DS#1,你将需要填写你的技能“栈”。你的新同事可能不知道什么是数据集成,所以他们肯定不会在意你是否有这方面的经验。使用“其他人用来处理那部分”是行不通的。因此,提升您在整个数据科学流程中的技能对于能够定期交付有价值的工作至关重要。

我作为 DS#1 的头几个月是一次严峻的考验,但我在那段时间学到的东西可能比我职业生涯中其他任何时候都多。

虽然有许多定义“数据科学流程”的尝试,但通常会引用以下组件:

  • 数据收集/整合
  • 数据清理
  • 数据分析
  • 系统模型化
  • 解释
  • 模型部署

为了更深入的解释,我推荐 Chanin Nantasenamat 的这篇文章。

适应文化

你可能会有一个与你共事的人非常不同的背景。这意味着他们的工作方式和你习惯的做事方式之间可能会有很大的文化差异。重要的是要融入工作文化,适应新环境,而不是像往常一样硬着头皮进去工作。

这可能涉及:

  • 不同的着装要求
  • 不同的质量控制标准
  • 不同的工作节奏
  • 更扁平或更等级化的文化
  • 初级员工不同程度的自主权
  • 流程驱动 vs 人员驱动

我们可能是“21 世纪最性感职业”的成员,像脸书和谷歌这样的公司为工作生活设定了新的标准。但是硅谷的方式并不是唯一的方式,一个方形的钉子将不会适合一个圆形的洞。你的工作只有通过对文化的敏感和让其他人容易从中受益才能带来价值。

从一家零售分析公司转向商业诉讼,让我印象深刻的一件事是节奏的变化。在零售业,一切都在以疯狂的速度前进,每周都有多项分析发生。当我到达律师事务所时,我会问人们什么时候想看到结果,最后期限是几个月,如果不是几年的话。与此同时,对我提供的分析的质量和信心的需求要高得多。如果我的工作要在法庭上被依赖,它需要绝对滴水不漏。

这导致了一个更慢的,更多考虑的,测试驱动的工作方法,严格的文档和清晰的质量标准交流。如果没有这种调整,我的同事们可能会觉得使用我的作品不太舒服。

概括起来

根据我在几家不同公司担任第一个数据科学家的经历,我希望你喜欢这些技巧。虽然有时会很困难,但进入数据科学的底层是一个有益的挑战,可以将你的技能推向更高的水平。我会把它推荐给任何人。

  • 你必须推销数据科学
  • 但是不要过度销售…
  • 学会说“不”
  • 有策略
  • 这将是孤独的
  • 数据会很乱
  • 注重质量,而不是数量
  • 积极保持你的技能
  • 成为一个万事通
  • 适应文化

构建可信数据科学组合项目的技巧和资源

原文:https://towardsdatascience.com/tips-resources-to-for-building-authentic-data-science-portfolio-projects-2068ce153ebb?source=collection_archive---------29-----------------------

了解不同的资源,让你的下一个作品集脱颖而出。

凯利·西克玛在 Unsplash 上的照片

介绍

投资组合项目是任何数据科学的关键。他们不仅向招聘人员展示你的工作、能力和优势,也是应用你所学知识的好方法。

不幸的是,许多人并没有真正把他们的投资组合项目做到最好。相反,他们写一些代码,放在 Github 上,可能写一篇关于它的文章,或者,他们做一个 Kaggle 竞赛,把代码放在 Github 上。

不幸的是,这不是创造投资组合项目的好方法。为什么?因为您创建的模型只是存在于笔记本中,因此您不了解模型部署。第二,大多数比赛都有干净的数据集供你使用,这与真实世界的数据形成了鲜明的对比,所以你并没有真正做获取数据的困难部分。

我这篇文章,我将与你分享以下内容:

  • 如何为投资组合想出好主意?
  • 在那里你可以找到下一个作品集项目的免费开放数据集
  • 如何着手投资组合项目
  • 为了充分利用你的作品集项目,需要采取的两个基本步骤

所以,坐下来,放松,享受这篇文章吧!

第一步:为投资组合项目想出好主意

Unsplash 上的absolute vision拍摄的照片

这可以说是投资组合项目中最难的部分,因为有时你可能拥有做一个项目的所有技能,但你不知道在哪里以及如何应用它!

技巧 1:获得灵感

照片由你好我是 Nik🎞 on Unsplash

一种方法是从人们已经完成的其他项目中获取灵感。以下是一些很好的例子:

  • 斯坦福的 ML 类项目:这其实是斯坦福的机器学习类的作品。由一个项目组成,报告和海报可以在网上看到。这是我最喜欢的项目之一,因为这里的一些项目令人惊叹,他们也友好地提供了 Github 代码。
  • 人工智能生成食谱:这个由德里克·贾制作的项目是一个很好的例子,展示了如何将你热爱的两件事结合成一个真正鼓舞人心的项目。
  • 这个项目是一个很好的例子,并不是所有的投资组合项目都必须通过 Flask 部署或者制作成 Docker 映像。在这里,作者制作了一个 PyPi 包,帮助初学者选择项目的最佳模型。
  • SnapStudy :不仅是一个很棒的想法,更是一个很棒的名字!这个项目允许用户拍下他/她的笔记,并自动生成抽认卡来帮助他们记忆!多酷啊!
  • 股票交易机器人:这也是一个真正的端到端强化学习项目的好例子。包含了非常清晰的项目说明和信息,这是一个很好的例子,说明如何将强化学习知识应用到现实世界中。

技巧 2:头脑风暴,解决生活中的问题

Kelly SikkemaUnsplash 上拍摄的照片

头脑风暴是为项目产生想法的一个非常强大的工具。科学证明,把事情写下来可以让你更有效率,我自己也经常对我在便利贴上写下的想法感到惊讶!。这篇教程是关于如何充分利用头脑风暴会议的完美指南。

另一种方法是找出你在日常生活中可能面临的问题,看看你能否利用数据科学解决这些问题。您可以提出以下问题:

  1. 我可以利用 NLP 为自己写文章吗?
  2. 我可以使用监督学习创建垃圾邮件分类器吗?
  3. 我可以创建一个应用程序来推荐我应该看的网飞电影吗?或者我该听什么 Spotify?
  4. 我可以创建一个应用程序,根据我喜欢的食物向我推荐食谱吗?
  5. 我可以创建一个可以阅读我的笔迹的 NLP 应用程序吗?
  6. 我能创造一个强化学习机器人来帮我交易股票吗?

诸如此类。重点是有很多事情可能会困扰你,但是不要抱怨它们,看看你是否可以利用 ML & Data 科学来提出创新的想法!

步骤 2:为你的作品集项目打开数据集

米卡·鲍梅斯特在 Unsplash 上的照片

任何项目最重要的部分都是数据。没有数据,其他一切都没用。然而,为您的项目找到正确的数据可能是一项艰巨的任务。这就是为什么我编制了一份免费、开放和高质量数据集的清单,供你在下一个作品集项目中使用。

事不宜迟,这里是免费开放数据集的列表:

  1. 五三八
  2. BuzzFeed 新闻
  3. 索克拉塔
  4. 牛逼数据
  5. 谷歌公共数据集
  6. Quandl
  7. Data.gov
  8. 学术洪流
  9. data.world
  10. AWS 公共数据集
  11. r/数据集
  12. 数据是复数
  13. 维基百科数据集
  14. IMF 数据
  15. 世界银行数据
  16. 美国宇航局数据集
  17. CERN 开放数据门户
  18. 全球健康观察数据仓库

这是我根据自己使用这些资源的亲身经历整理的清单。我鼓励你去看看,看看哪些是热门的,哪些不是。所以现在你肯定不能用“我找不到好的数据”这个借口了!

一旦您下载了数据集并准备好进行分析,请暂停片刻,并询问一些关键问题:

  1. 这个数据集是如何创建的?
  2. 数据从哪里来?
  3. 数据中存在哪些数据类型?
  4. 是否存在缺失值?如果是,他们是 MCAR、马尔还是马尔?
  5. 数据有分类值吗?

步骤 3:如何着手一个投资组合项目

Gary BendigUnsplash 上拍摄的照片

当我开始构建组合项目时,我通常会跳过所有的 EDA 和预处理,只运行一个 XGBoost 模型(是的,确实很愚蠢。)然而,我知道我需要遵循一个清晰的项目结构。然后就遇到了 CRISPDM

数据挖掘的跨行业标准流程

图片来自维基百科

跨行业数据挖掘标准流程(CRISPDM)是一个流程模型,描述了描述数据科学生命周期的 6 个步骤。它本质上帮助你计划组织构建实施你的项目。

太好了。但是这些步骤真正涉及到什么呢?好问题。所以,让我们具体讨论一下!

CRISPDM 中涉及的步骤

Unsplash 上由 Ambrose Chua 拍摄的照片

1.业务理解/目标定义

在这里,您定义了项目的实际目标,以及您通过创建这个项目想要实现的目标。这可以分为 3 个阶段:

  • 目标:在这里,你定义项目的目标和你试图完成的任务。您还需要调查数据是否可以用来解决这个问题
  • 资源评估:在这里,你调查项目所需的资源,以及从哪里和如何获得这些资源。你会在本地工作,还是在云上工作?您的数据需要从多个位置汇集吗?
  • 工具评估:在这里,您可以根据项目的目标,选择您认为最适合这个项目的最佳工具和技术

2.数据理解

好了,现在你已经理解了你想要达到的目标,你开始做你的分析。这些步骤可以分解为以下任务:

数据收集:从收集数据开始。您可以利用 REST API、数据仓库服务或其他方法来收集数据并将其整合到一个可用的数据集中

数据描述:从做一些 EDA 开始,查看数据的基本结构,对数据有一个感觉,并理解您正在处理的数据类型

数据探索:在这里,您可以更深入地研究您的数据。您开始执行更复杂的查询,在数据中寻找隐藏的模式,并试图找到数据中对当前问题有关键见解的方面

数据评估:你开始评估数据的质量。你会问这样的问题:

  • 数据干净吗?
  • 是否存在缺失值?
  • 我需要删除一些功能吗?
  • 我需要如何预处理我的数据?
  • 是否需要功能缩放?

3.数据准备

这是您准备用于模型的最终数据的步骤。这里的阶段如下:

  • 数据选择:选择您将需要的数据,并从您的数据中移除不需要的特征。
  • 数据清洗:这个阶段通常是最长的。您可能需要估算、更正、删除和格式化值
  • 数据构建:特征工程。在这种情况下,您可以使用从数据分析中获得的见解来了解如何智能地利用现有要素来构建有望使您的模型受益的新要素。您可能还需要使用不同的转换来转换某些值
  • 数据集成:将不同的数据集组合在一起,形成一个完整的数据集
  • 数据格式化:您可能需要格式化某些值,例如,您可能想要将字符串和分类值编码/调整为数值,以便从特征中获得有用的信息

4.建模

可能是项目中最令人愉快和期待的部分。这个阶段分为 4 个部分:

  1. 选择建模技术:确定尝试哪些算法(如回归、神经网络)。这可以通过尝试几种基线方法并同时对它们进行评估来实现
  2. 生成测试设计:根据您的建模方法,您可能需要将数据分成训练集、测试集和验证集。您可能会决定使用交叉验证来更好地了解您的模型将如何推广到新数据。确保而不是在测试集上评估您的数据!
  3. 构建模型:听起来可能很迷人,但这可能只是执行几行代码,如“reg = LinearRegression()。fit(X,y)"。这也可以包括将一组模型组合在一起,称为集合。
  4. 评估模型:通常,多个模型相互竞争,数据科学家需要根据领域知识、预定义的成功标准和测试设计来解释模型结果。
  5. 调整模型:选择理想模型后,您可能希望调整模型的参数,以获得与数据的最佳拟合。

5.估价

周期的这一阶段关注的是哪个模型最适合目标和项目,并计划接下来的步骤。这个阶段可以分为以下几个部分:

  • 评估模型:你可以根据你的领域问题使用不同的度量标准来调查,看看哪个模型表现最好。您必须选择最符合项目目标的模型。
  • 复习项目:这是重要的一步。你回顾整个周期,看看你是否可以做得更好。你做了彻底的 EDA 吗?是否选择了最佳功能?总结你的发现,并根据需要调整你的项目
  • 确定后续步骤:根据模型的性能以及它满足项目目标的程度,您可以决定继续进行部署,或者您可以回顾整个周期,看看您是否可以批准项目的某些方面。

部署

很抱歉打破你的幻想,但是一个模型对你笔记本里面的人来说不是很有用!您需要有一个部署模型的计划。其中涉及的步骤如下:

  • 计划开发:为您将如何部署模型开发一个清晰而简明的计划
  1. 计划监控和维护:制定一个全面的监控和维护计划,以避免在模型的操作阶段(或项目后阶段)出现问题。
  2. 生成最终报告:项目团队记录项目摘要,其中可能包括数据挖掘结果的最终演示。
  3. 回顾项目:进行项目回顾,了解哪些进展顺利,哪些可以做得更好,以及将来如何改进。

这些原则将极大地帮助你清晰地构建你的投资组合项目,这样你就不会从一个阶段跳到另一个阶段。如果在任何阶段你不确定某件事,总是穿越回这个周期,看看你是否能改进什么。

为了充分利用您的项目,需要使用的 2 项关键资产

Silas k hler 在 Unsplash 上拍摄的照片

我把这两种方法作为它们自己的一部分的原因仅仅是因为我还没有看到足够的组合项目利用它们。这两种方法被低估了,但它们在以下方面有很大帮助:

  1. 排除故障
  2. 减少错误

关键资产 1:伐木

照片由稍微有用的Unsplash 上拍摄

毫无疑问,我从未见过使用最少的策略是日志记录。它如此简单,却很少被使用。本质上,日志记录跟踪你的代码并且记录关键信息,如果你在项目中开始遇到问题,你可以通过查看这些信息。

我一直都在使用这个工具,并且我已经捕获了许多讨厌的 bug,否则这些 bug 就会进入产品中,并且会迫使我花费无数的时间来修复它们。如果你想学习如何使用日志记录,这里有一篇由 Real Python 撰写的关于日志记录的文章,老实说,这是你唯一需要阅读的教程,因为它非常全面。

关键资产 2:建立 CI/CD 渠道

凯西·霍纳Unsplash 上拍摄

这也是一个被严重低估和利用不足的策略。我怎么强调测试驱动开发的重要性和它所拥有的无数好处都不为过。建立稳固的 CI/CD 渠道有助于实现以下目标:

  1. 在 bug 投入生产之前尽早捕捉它们
  2. 如果有严重的错误,回滚到以前的代码
  3. 在开发的所有阶段跟踪您的代码
  4. 将项目的不同方面划分到不同的工作空间中,以便对过程的所有阶段进行单独的跟踪和评估。

就我个人而言,我喜欢在设置 CI/CD 管道时使用 Travis CI 和 Git。但是,您可以随意使用您想要的任何 CI 或 CD 工具。

结论

虽然没有人是完美的,但我相信一个人应该永远为之奋斗。在这里,我给出了让你的项目脱颖而出的技巧和资源,以及如何充分利用你的项目。我已经描述了应该执行的端到端循环,以及如何使用两种被低估的方法在下一个项目中真正达到最大效率。

我希望这篇文章以某种方式帮助了你,我希望你现在已经准备好构建有史以来最真实的投资组合项目了!确保不断更新更多内容,永远做最好的自己!

照片由威廉·冈克尔Unsplash 上拍摄

从 10 天的 ML 挑战看如何建立更好的深度学习模型

原文:https://towardsdatascience.com/tips-to-building-better-deep-learning-models-from-10-days-of-ml-challenge-2cd84f12e0a4?source=collection_archive---------45-----------------------

资料来源:tensorflow.org

这些建议是我在参加 10 天 ML 挑战赛时制定的,这是孟买的 T ensorFlow 用户组的一项精彩倡议,旨在鼓励人们更多地学习或实践 ML,而不一定是 TensorFlow。流程是这样的,你会在一天开始时被分配一项任务,你被期望完成任务并在推特上发布你的结果。任务可以是从预处理数据到构建模型到部署模型的任何事情。我建议你仔细检查挑战的任务,并亲自尝试,不管你是初学者还是实践者。我将继续分享我从这些任务中获得的主要收获。我所有的解决方案和挑战问题的陈述都是开源的-

[## Rishit-dagli/10 天 ML

TFUG 孟买发起的 ML 10 天的存储库。所有的代码将在每天 7 点左右被推送到回购处…

github.com](https://github.com/Rishit-dagli/10-Days-of-ML)

我的外卖

挑战最好的部分是,它不像一个核心竞争,而是一个促进学习的倡议,这意味着如果你不知道一个概念或有你无法修复的错误,你可以向这个精彩的社区提出并获得支持。这对初学者尤其起到了很大的作用。更好的一点是,你还会得到相关的链接来研究完成挑战所需的主题。

我所有相同的输出都可以在这个线程中得到

第一天

我们被要求为可用的新冠肺炎数据集制作一些交互式图表这里。首先你必须建立一个-

  • 国家图表
  • 日期图表
  • 洲状图

这里的一个主要问题是数据集没有纬度或经度数据,您可以将这些数据传递到函数中来创建一个洲级图表。所以,我所做的是从 Kaggle 获得另一个国家和大陆数据集,并在我的原始数据集中添加一个名为“大陆”的列。这就解决了问题。有了这么多的数据,我看到一些人制作了巨大复杂的图表,由于这些图表的目的,简化事情和便于分析是一种挑战。你再也无法从中观察到任何模式。例如,一个简单的散点图向我展示了一些国家的增长率就像教科书上的指数图,所以我用ln(x1)代替了特征x1,它几乎是线性的!

制作更简单、更容易理解的图表,通过这些图表,你可以分析数据,发现一些事情或模式,而不是复杂的图表,这些图表没有太大意义,违背了原因。

第二天

第二天是关于特征工程和泰坦尼克号数据集的数据预处理,这里是。Titanic 是一个很好的候选对象,因为我们在 Titanic 数据集中看到了许多变化和低相关性特征,因此采用良好的特征工程和预处理策略非常重要。此外,你还可以做一些数据可视化。

特征工程是将原始数据转换为更好地代表预测模型潜在问题的特征的过程,从而提高对未知数据的模型准确性。

您可以在这个数据集本身中使用许多方法,如分类转换、分类列、热编码等等。自己尝试一下。

第三天

我们终于到了构建模型的部分,我们必须预测贷款状态谷物评级以及为高级用户分析评论毒性的 NLP 任务。前两项任务非常简单,针对的是初学者,处理毒性数据非常棒。从 NLP 任务中得到的一个简单但有力的观察是,最好选择 RNN/ LSTM/ GRU 单位作为词汇量的倍数。

尝试选择你的递归层的单元数作为词汇大小的倍数,并尝试通过一个首选的相似性度量来选择你的嵌入维度。此外,不要简单地堆积你的循环层,而是尝试改进你的整体模型架构。选择嵌入维数为特征数的 4 次方根的倍数,模型做得很好。

第四天

我们最终在 Expedia 数据集上实现了无监督学习,这里是 T4。数据集非常大,有超过 2 GB 的数据,因此在受限环境下处理如此巨大的数据集时必须采取一些预防措施。你可以使用一些技巧来这样做,就像你应该清除你的中间张量和变量,你可以很容易地使用

del [variable_name]

您还应该尝试使用并行处理技术获取数据,同时使用预处理技术在 map 函数中运行它们,并充分利用您的 CPU 内核。在我的方法中,我已经使用云做了一些高成本的操作,比如 PCA 或 LDA,你也应该试着做同样的事情。你也不应该跳到像受限玻尔兹曼机器这样的算法上,在这种情况下,K-Means 和玻尔兹曼机器之间有大约 0.8%的精度差异,这里使用 K-Means 和简化你的算法比一点精度更有意义。

总是获取数据,并在一个map中并行地对其进行预处理。尽可能清除中间张量和变量,以释放内存,从而获得更好的性能。你应该总是喜欢简单而不是精确的小变化。

第五天

我们被要求为著名的狗和猫的数据集建立模型这里。这个想法是使用卷积神经网络或 CNN 来做同样的事情,并找出图像中的特征。我使用了两种方法来完成这项任务,一种是从初始数据集进行迁移学习,冻结一些层,并在此之下添加一些密集层。我重新训练了我在初始模型下面添加的层,并以良好的准确性结束。对于另一种从头开始构建网络的方法,我使用了几个卷积层和池层来完成这项工作。为了防止过度拟合,我还使用了正则化、去除图层和图像增强,这些都可以通过 tensor flow轻松实现。两者都存在于回购中。

你应该总是尝试使用正则化,放弃层和图像增强来克服过度拟合。也尝试使用奇数内核大小,如 3x3 或 5x5。不要只是不断增加你的通道数,你可能会得到更好的训练精度,但数据过拟合。总是从使用较小的滤波器开始是为了收集尽可能多的局部信息,然后逐渐增加滤波器宽度以减小生成的特征空间宽度来表示更多的全局、高级和代表性信息。

第六天

第六天我们有两项任务,为时尚 MNIST 制作模型,为预测肺炎制作 x 光图像。这又是一个图像问题,我们被期望使用 CNN。

如果数据集不像时尚 MNIST 那样复杂,就不要浪费时间制作一个 10 层左右的庞大模型架构。

X 射线肺炎问题有点棘手,我们还需要对数据进行一些特征工程。在研究这个问题时,我发现了一些非常有用的实验结果,我认为人们应该遵循这些结果。

批量规格化 一般必须在通过包含激活功能的层之后,在脱落层(如果有的话)之前,放置在架构中。sigmoid 激活函数是一个例外,其中您需要在激活前放置批处理规范化图层,以确保在应用函数前值位于 sigmoid 的线性区域内。K 在网络的初始阶段保持特征空间宽而浅,并在接近末端时使其变得更窄和更深。

(非常重要)将辍学层放在最大池层之后。如果放置在 Max-Pool 图层之前,则由 Dropout 移除的值可能不会影响 Max-Pool 图层的输出,因为它会从一组值中选取最大值,因此只有在移除最大值后,才能考虑移除要素依赖关系。

第七天

这都是关于 NLP 的,我们再次面临两个挑战,分析 IMDB 评论,这也是一个非常著名的数据集,以及通过 Twitter 数据集分析评论的情绪。

每个 LSTM 层都应该有一个下降层。该层将通过在训练期间忽略随机选择的神经元来帮助防止过度拟合,并因此降低对单个神经元的特定权重的敏感性。20%通常用作保持模型准确性和防止过度拟合之间的良好折衷。

这里的主要挑战是选择 LSTM/ GRU 单位的数量。我用 K-Fold 交叉验证来做到这一点,如果你不想深入研究它的工作原理,你可以用这个简化的结果

Nᵢ 是输入神经元的数量, Nₒ 是输出神经元的数量,ns 是训练数据中的样本数量,a 代表比例因子。

这里的 a 或α代表比例因子,通常在 2 到 10 之间。您可以将α视为每个神经元的有效分支因子或非零权重的数量。我个人建议您将α设置在 5 到 10 之间,以获得更好的性能。

这是我用嵌入式投影仪制作的一个很棒的可视化图像

IMDB 数据可视化

第八天

对可用的消费者投诉数据的文档或文本进行聚类这里是第 8 天的任务。任务是将投诉数据分成不同的类别。我尝试了许多不同的算法,如 K-Means、分层、模糊、密度聚类和受限机器,K-Means 再次给了我最好的结果。我使用肘方法和轮廓曲线,以了解相同的最佳集群数。我将再次举这个例子来说明人们应该选择简单而不是一点点性能。在这种情况下,亲和度级数给了我最好的 Fowlkeys-Mallows 分数,比 K-Means 分数稍高一点,所以我最终改用 K-Means。

在模型可解释性和性能或准确性之间的权衡中,您应该更喜欢小差异情况下的可解释性。

第九天和第十天

这些天是关于 TensorFlow JS 的,我们必须部署运行在浏览器本身的模型。如果你对 TF.js 了解不多,你可以在这里阅读我的博客

* [## TF.js 浏览器深度学习入门

如果你是机器学习的初学者,并想开始在浏览器中开发模型,这是为…

medium.com](https://medium.com/analytics-vidhya/getting-started-with-deep-learning-in-browser-with-tf-js-1e949b911e31)

我们必须用 TF.js 构建一个我们选择的项目。这些天我构建了两个项目,一个实时文本情感分析器和一个可以确定你的姿势的 web 应用程序。姿态检测建立在 Posenet 模型之上。基于浏览器的推理或训练要小心谨慎,你不希望你的进程阻塞你的计算机或用中间变量填充它。这里的一个好主意是使用类似 Firebase 的东西来托管一个经过训练的模型,并从您的 web 应用程序调用它。当进行实时推理时,确实有许多预处理要做。您也不应该阻塞任何线程并异步运行您的流程,以便在您的模型被加载并准备就绪时不阻塞您的 UI。

我见过很少有人把他们所有的 JS 代码写在 HTML 本身的两个script标签之间,或者把他们所有的代码放在一个单独的index.js文件中,现在你只有一个包含所有代码的文件。从开发人员的角度来看,这是一个非常糟糕的方法,您应该尝试将代码分成一个文件,一个用于获取数据,另一个用于加载模型,另一个用于预处理,等等。这使得其他人理解你的代码变得非常容易。

使用奇妙的tf.tidy几乎是强制性的,它让您的运行时不受中间张量和其他变量的影响,这些变量可能是您为了获得最佳内存利用率和防止内存泄漏而创建的。

异步运行你的进程,你可以简单地在定义函数时使用关键字 a async,在调用函数时使用关键字await,这不会冻结你的 UI 线程,非常有用。

我建议通过应用权重量化来缩小模型大小。通过量化模型权重,我们可以将模型的大小缩小到原始大小的四分之一。

结果

挑战赛的结果于 2020 年 4 月 9 日揭晓,我是获胜者之一😃。令我高兴的是,由于惊人的参与度,我还被提升为团队的导师。

感谢 Sayak PaulAli Mustufa ShaikhShubham SahMitusha AryaSmit Jethwa 在项目期间的指导。*

关于我

大家好,我是里希特·达利

推特

网站

如果你想问我一些问题,报告任何错误,建议改进,给我反馈,你可以发邮件给我

TIQ 第 1 部分——如何用自动日期/时间摧毁您的 Power BI 模型

原文:https://towardsdatascience.com/tiq-part-1-how-to-destroy-your-power-bi-model-with-auto-date-time-8fec32b22aff?source=collection_archive---------20-----------------------

在 TIQ 系列的第一部分,找出为什么使用自动日期/时间是一个坏主意

TIQ 代表时间智商。由于“常规”智能通常被作为智商来衡量,而时间智能是数据建模中最重要的主题之一,我决定开始一个博客系列,将介绍一些基本概念、特定解决方案的利弊和要避免的潜在陷阱,一切都是为了增加你的整体 TIQ,并使你的模型在时间分析方面更加健壮、可伸缩和灵活

马克·尼尔在 Pexels 上的照片

如果您曾经执行过任何类型的数据分析,您肯定应该知道,分析不同时间段内的数字、识别一段时间内的趋势,或者根据特定事件发生的时间点评估各种 KPI,是每个 BI 项目的“面包和面包屑”。

你可以在不了解客户、地理位置、产品等细节的情况下偷偷摸摸(当然也强烈建议使用这些维度),但是不知道随着时间的推移会发生什么,你的整体分析就会受到影响。

因此,我真诚地将日期维度视为“威严”——在我看来,这是整个数据模型中最重要的维度!

当我最近写了关于创建一个自定义日期维度的文章时,我承诺我会专门写一篇文章来更深入地解释时间智能。

所以,这是时间智能主题系列的第一篇文章。

由于它的重要性,我将尝试提供一个日期维度的全面概述,它提供的明显好处,以及在 Power BI 中正确使用(不正确)时的潜在陷阱。

power BI——没有日期维度,我能偷偷通过吗?

答案很简单——当然,你可以!但是,你不应该。如果您的数据模型中没有使用日期维度,Power BI 不会让您失望。相反,它会“帮助”您,通过在模型中的每个日期列上自动创建日期层次结构!

哇,一开始听起来棒极了!既然 Power BI 可以为我构建一个单独的日期维度,我为什么还要浪费时间呢?保持关注,你很快就会发现为什么这不是你想要的结果。

打开新的 Power BI 文件时,在“文件”选项卡下,选择选项和设置,然后选择选项。在左侧的“全局”下,您会看到“时间智能”选项。

如果您选中新文件的自动日期/时间选项,则每次打开新的 Power BI 文件时,Power BI 都会自行处理日期。

另一个可以设置的地方是在左边的当前文件下,然后是数据加载。

让我简单解释一下当您选中此选项时,后台发生了什么:Power BI 将创建一个由年、季度、月和日期组成的日期层次结构,以便您可以在这四个粒度级别上分割数据。

我使用堆栈溢出数据库进行演示,因为它足够大,可以在启用自动日期时间时注意到我们的数据模型的行为。报告本身非常简单,包含两个卡片,显示我们模型的两个表中的许多行:

现在,当您在字段窗格中查看时,您会注意到日期类型的每一列都显示为一个层次结构。因此,我可以使用这些层次结构之一来分割数据:

每个关闭日期的帖子数量

“那有什么不对吗?”,你会问一个合理的问题。我得到了现成的解决方案,不需要编码、导入、扩展数据模型等。

Power BI 幕后

在我继续之前,让我们先来看看当我尝试使用我们的“Date”维度来计算堆栈溢出数据库中年初至今的帖子总数时,后台发生了什么:

如果您看一下自动创建的 DAX 代码,您会注意到我们的 CreationDate 列的不寻常的列引用:

Count Posts YTD = 
IF(
    ISFILTERED('Posts'[CreationDate]),
    ERROR("Time intelligence quick measures can only be grouped or filtered by the Power BI-provided date hierarchy or primary date column."),
    TOTALYTD([Count Posts], 'Posts'[CreationDate].[Date])
)

这意味着 Power BI 指向自动创建的层次结构的特定成员(在我们的例子中。[日期],但也可能是。[年份],。[季度]或。[月])。

尽管如此,计算在这里,一切看起来很好。但是,如果我想让我的用户能够在不同的日期对数据进行切片,该怎么办呢?或者,如果用户要求每周分析数据?财政年度?星期几?

弹性等于零!

使用我们的自动日期维度,这些都是不可能的!所以,忘掉灵活性吧,你得到的是年、季度、月和日期,仅此而已。不要误解我的意思,这对于我们说的 80%的分析来说是很好的,但是我们应该如何处理剩下的呢?

例如,如果我想比较一段时间内基于 CreationDate 和 LastActivityDate 的数据,并且希望有一个切片器来更方便地执行我的分析,该怎么办?

正如您所注意到的,只用一个切片器是不可能满足这个要求的。我们需要两个切片器,分别用于每个日期层次结构。现在,假设我们想要基于四五个不同的日期对数据进行切片。更不用说,如果你采用这种策略,你的报告会变得多么丑陋、反直觉和复杂。

我们不能用新的属性扩展日期维度,这是这种方法的最大限制。

用自动日期表格隐藏和寻找

为了对幕后发生的事情有一个大致的了解,我将展示 BI 需要什么样的能力来处理这个问题。对于每个日期列(在我们的 Posts 表中,我们有 5 列:ClosedDate、CommunityOwnedDate、CreationDate、LastActivityDate 和 LastEditDate),Power BI 创建了一个单独的日期表!

你不相信?请跟我来…

当您转到模型视图时,那里没有表。那么他们在哪里(如果他们真的存在的话)?

诀窍在于,这些表在默认情况下是隐藏的,在 Power BI 模型中是看不到的,正如这篇微软文章中的所描述的。

因此,让我们启动 DAX Studio 来支持我们搜索这些本地日期表。对于那些还不熟悉 DAX Studio 的人,我强烈推荐尝试一下——它有一大堆方便的功能,最重要的是,它是免费的!

我已经连接到我的 PBIX 文件,看:

在左边的“模型”下,你会看到一大堆日期表!!!谁创造了他们?我没有,正如你之前看到的。这些都是自动创建的数据表,BI 在后台创建这些数据表来实现时间智能计算。

数据模型的规模在增长…

不必说这些表是您的数据模型的一部分,即使您不是有意创建它们的。包含日期列的表越大,整个模型就越大。

我看到过许多例子,数据模型因为许多自动数据表而变得臃肿。

因此,在阅读了所有这些关于自动日期/时间功能的负面内容后,人们可以理解地问一个问题:

为什么这个自动日期/时间甚至存在于 Power BI 中,更不用说它是默认启用的了?!

照片由内森·考利拍摄

微软没有给出官方解释,但我认为这一决定背后的基本原理是 Power BI 作为一种自助式 BI 工具被推广。

我们不要忘记,有很多人根本不熟悉维度建模概念,更不用说通过编写 DAX 或 M 代码或使用数据仓库中现有的 SQL 日期维度来创建适当的日期维度了。他们需要 Power BI,他们使用 Power BI。

无论出于什么原因,自动日期/时间是 BI, 的一部分,只是不要使用它。

在 TIQ 系列的下一部分,我将讲述如何以适当的方式处理日期维度的可能解决方案。所以,敬请期待!

TIQ 第二部分—陛下:日期维度

原文:https://towardsdatascience.com/tiq-part-2-your-majesty-date-dimension-b4d54db84be9?source=collection_archive---------46-----------------------

Power BI 数据模型中的日期维度有什么特别之处?在 TIQ 系列的第二部分中找到答案

Pixabay 在 Pexels 拍摄的照片

TIQ 代表时间智商。由于“常规”智能通常被作为智商来衡量,而时间智能是数据建模中最重要的主题之一,我决定开始一个博客系列,将介绍一些基本概念、特定解决方案的利弊和要避免的潜在陷阱,一切都是为了增加你的整体 TIQ,并使你的模型在时间分析方面更加健壮、可伸缩和灵活

您可能还记得,在本系列的第一部分中,我强调了日期维度是数据模型中所有维度中最重要的。让我简单解释一下我对此的看法:你可以在不知道某个特定客户群是否购买你的产品的情况下做你的生意;你会莫名其妙地偷偷摸摸,不知道你卖了 100 单位的产品 X 还是 200 单位的产品 Y;但是,如果不知道一段时间内的总体趋势,你肯定会迷失在数据分析中。

我并不是想贬低所有维度的重要性。我会称日期维度为【第一对】,或者“第一对”。在这个意义上,我经常称日期维度为“威严”…

Giga-01 在 fotocommunity.de 拍摄的照片

回归基础——让您的模型像明星一样闪耀!

在对日期维度给予应有的关注之前,我们需要澄清为什么它被称为维度,以及从更广泛的角度来看这意味着什么。

说到数据建模,很少有被普遍接受的概念。其中之一就是维度建模,对于各种报表系统(如 Power BI)的数据建模尤为重要。简单地说,这个概念假设你有一个或多个事实表和至少一个,但通常是多个维度

事实表存储有关已发生事件的数据—无论是销售交易、汇率、温度值…在大多数情况下,事实是可以以某种方式聚合的数值(总和、平均值、数量等)。)

然而,这些数字没有价值,除非我们把它们放到特定的环境中。比如说,我们想知道黑色产品的销售额。或者,我们希望看到每个月的毛利润。或者,我们希望分析与欧洲相比,我们在美国销售了多少台设备。

这里,维度开始发挥作用。最简单地说,维度是业务实体的描述性表示。听起来势不可挡?很少有基本的例子能在一分钟内理清头绪。

假设您有一个名为 Customer 的业务实体。你会用什么样的特征来描述客户?名,姓,她/他住的地方?性别,学历?你说得对,所有这些都可以用来描述一个客户。产品呢?类别、类型、颜色…只是你可以使用的一些属性。

日期维度是数据模型 中最一致的维度——虽然其他维度可以根据特定的报告需求进行不同的设置,或者可以在稍后阶段通过添加/删除属性来扩展/缩减,但是日期维度在每个数据模型中都或多或少是一致的!

理论上,你可以给一个产品添加无限数量的属性,而对于日期,你只能有一定数量的属性(即使你包括一些特定的东西,如工作日、公共假日等)。).这些属性有着完美的层次顺序:日期 2020 年 6 月 27 日将始终属于 2020 年、第二季度和六月,并且它将始终是星期六。您可以将产品 X 更改为属于奢侈品类别,而不是普通产品,但是对于日期,您不能应用相同的逻辑。

经过对维度的详细描述,我们的模型最终应该是这样的:

当您看一看这个图时,它为什么被称为星型模式就很明显了。我们在模型中间有一个事实表,不同的维度围绕着它,所以它让人想起一颗星星。每个维度和一个事实表之间只有一个关系。

不深入讨论其他数据建模技术的细节,例如雪花平面(非规范化)表,因为这需要单独的系列文章,我只说在 Power BI 中创建数据模型时,推荐使用星型模式。

是什么让日期维度如此独特?

为了充分利用 Power BI 中强大的时间智能 DAX 函数,您的数据模型必须满足一些条件。主要的一条是: 你的模型中至少需要有一个日期表!

此外,表需要满足以下条件才能被视为日期表:

  • 该表必须包含数据类型为日期或日期/时间的列(我们将该列称为日期列)
  • 日期列必须有唯一的值
  • 日期栏必须是连续的(不允许有遗漏的日期)
  • 日期列中不允许有空值
  • 最后,日期表必须标记为日期表

乍一看,在准备单独的日期表时,这看起来开销太大,特别是如果您还记得 Power BI 可以自动为您创建日期表,而无需您做出任何努力。

然而,就像在任何其他发展领域一样,在开始的时候,稍微多付出一点努力,就会让你在以后结出果实。从一开始就以正确的方式做事才是正道。创建一个单独的日期维度,并将该表标记为一个日期表,这将使您能够充分利用 Power BI,并在使用强大的 DAX 时间智能函数时为您提供最大的灵活性(在本系列的下一篇文章中会详细介绍)。

在 TIQ 系列的下一部分中,我将介绍在 Power BI 模型中创建全功能日期维度的所有现有技术,敬请关注!

如果你正在准备 DA-100 用 Power BI 分析数据考试,一定要查看我的成功经验的详细概述这里

TIQ 第 3 部分—日期维度创建的最终指南

原文:https://towardsdatascience.com/tiq-part-3-ultimate-guide-to-date-dimension-creation-98b951ffa68c?source=collection_archive---------30-----------------------

在 TIQ 系列的第三部分中,学习在 Power BI 中创建适当的日期维度的所有可用方法

Pixabay 在 Pexels 上拍摄的照片

TIQ 代表时间智商。由于“常规”智能通常被作为智商来衡量,而时间智能是数据建模中最重要的主题之一,我决定开始一个博客系列,将介绍一些基本概念、特定解决方案的利弊和要避免的潜在陷阱,一切都是为了增加你的整体 TIQ,并使你的模型在时间分析方面更加健壮、可伸缩和灵活

在本系列的第一部分解释了为什么在 Power BI 中使用自动日期/时间特性是合法的,但不是处理数据模型中日期的理想解决方案,并在第二部分强调了星型模式中日期维度的重要性之后,在本部分中,您将找到在数据模型中创建适当日期维度的各种解决方案。

解决方案 1: SQL

在大多数情况下,如果您连接到关系数据源,如 SQL Server、Oracle 或 MySQL,那么驻留在数据仓库中的数据模型很可能已经包含了日期维度。

在这个场景中,您只需将现有的日期维度导入到 Power BI 数据模型中,就万事俱备了。这种方法带来的好处是,在组织级别上确保关于时间处理的单一真实来源。

假设我正在连接到一个 Contoso SQL Server 数据库,该数据库保存着一家名为 Contoso 的虚构公司的销售数据。一旦我选择了在 Power BI 中获取数据并连接到 Contoso 数据库,我唯一需要做的事情就是选择 DimDate 表(以及我需要的其他表),并且我在 Power BI 数据模型中有了一个适当的日期维度!

这是 Power BI 数据模型中处理时间最简单、最常用的方式。

如果出于任何原因,您的数据仓库没有日期维度(老实说,您被卡车撞上的机会比找到没有日期维度的数据仓库的机会更多),您可以自己创建一个。网络上有多种现成的解决方案,例如 Aaron Bertrand 的这个,因此,如果您出于任何原因需要它,使用 SQL 的日历表可以在几分钟内创建。

解决方案#2: M(超级查询)

如果您没有现有的日期维度可以导入到您的数据模型中,您可以使用 Power Query 及其 M 语言快速轻松地创建一个全新的日期维度。

正如我在之前的一篇文章中已经提到的,关于各种权力查询技巧,网上有许多现成的解决方案。我从礼萨·拉德那里选了这个

以下是如何使用 M 语言创建日期维度的分步说明。打开新的 Power BI 文件,并在获取数据下选择空白查询:

如果要创建高度灵活和自定义的日期维度,应该利用参数。因此,在“管理参数”下,选择“新参数”并将其设置如下:

定义日期维的开始年份后,对结束年份应用相同的步骤:

完成后,打开高级编辑器并粘贴以下脚本:

let
    StartDate = #date(StartYear,1,1),
    EndDate = #date(EndYear,12,31),
    NumberOfDays = Duration.Days( EndDate - StartDate ),
    Dates = List.Dates(StartDate, NumberOfDays+1, #duration(1,0,0,0)),
    #"Converted to Table" = Table.FromList(Dates, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "FullDateAlternateKey"}}),
    #"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"FullDateAlternateKey", type date}}),
    #"Inserted Year" = Table.AddColumn(#"Changed Type", "Year", each Date.Year([FullDateAlternateKey]), type number),
    #"Inserted Month" = Table.AddColumn(#"Inserted Year", "Month", each Date.Month([FullDateAlternateKey]), type number),
    #"Inserted Month Name" = Table.AddColumn(#"Inserted Month", "Month Name", each Date.MonthName([FullDateAlternateKey]), type text),
    #"Inserted Quarter" = Table.AddColumn(#"Inserted Month Name", "Quarter", each Date.QuarterOfYear([FullDateAlternateKey]), type number),
    #"Inserted Week of Year" = Table.AddColumn(#"Inserted Quarter", "Week of Year", each Date.WeekOfYear([FullDateAlternateKey]), type number),
    #"Inserted Week of Month" = Table.AddColumn(#"Inserted Week of Year", "Week of Month", each Date.WeekOfMonth([FullDateAlternateKey]), type number),
    #"Inserted Day" = Table.AddColumn(#"Inserted Week of Month", "Day", each Date.Day([FullDateAlternateKey]), type number),
    #"Inserted Day of Week" = Table.AddColumn(#"Inserted Day", "Day of Week", each Date.DayOfWeek([FullDateAlternateKey]), type number),
    #"Inserted Day of Year" = Table.AddColumn(#"Inserted Day of Week", "Day of Year", each Date.DayOfYear([FullDateAlternateKey]), type number),
    #"Inserted Day Name" = Table.AddColumn(#"Inserted Day of Year", "Day Name", each Date.DayOfWeekName([FullDateAlternateKey]), type text)
in
    #"Inserted Day Name"

完成后,点击 Close&Apply,您的数据模型中就有了功能齐全的日期维度!此外,如果您将文件另存为。pbit (Power BI 模板文件),您可以轻松地更改要生成日期的时间段。

正如您可能已经注意到的,您只是定义了您想要的日期维度的开始和结束年份,而 M 负责处理所有其他事情——这多酷啊!

解决方案 3: DAX

最后,如果您喜欢使用 DAX 进行 Power BI 计算,也可以使用它来创建适当的日期维度。DAX 内置了函数 CALENDAR()CALENDARAUTO() ,这些函数会为其他必要的属性做铺垫,比如周、工作日等。

在我指导您在哪里找到创建日期维度的最佳 DAX 脚本之前,我只想建议在大多数情况下避免使用 CALENDARAUTO() 函数,因为它从整个数据模型中获取最早的日期值,并扩展到整个数据模型中的最新日期!

这在某些有限的情况下可以很好地工作,但是在许多现实生活的场景中,比如当您导入关于客户的数据时,有些记录我们不知道客户的正确出生日期。然后,有人插入默认值 1900 年 1 月 1 日,如果您选择使用 CALENDARAUTO() 函数,Power BI 模型中的日期维度会突然从 1900 开始!

这里的关键是——您需要利用特定场景的处理,不要让 Power BI 搞乱您的数据模型。请记住,你是你的数据模型的老板!

正如我在上面承诺的,如果你决定使用 DAX 创建日期维度,不要再犹豫,使用 DAX 大师 Marco Russo 和 Alberto Ferrari 的解决方案。

关键要素—将日期维度标记为日期表

无论您选择哪种创建日期维度的解决方案(SQL、M 或 DAX ),都不要忘记最重要的一点——将这个表标记为一个日期表!这将使您能够充分利用日期维度,执行所有强大的 DAX 时间智能功能,而不必担心结果和性能。

为了被标记为日期表,一个表,或者更好地说,一个将被标记的列,必须满足几个条件:

  • 每一行都包含唯一的值
  • 不允许空值
  • 包含连续的日期(不允许有间隔)
  • 必须是日期数据类型

让我们看看如何通过几次点击将该表标记为日期表。右键单击日期维,将鼠标悬停在标记为日期表选项上,然后单击标记为日期表:

应会打开一个对话框,Power BI 将让您选择要在哪个列上应用标记:

Power BI 将自动识别正确数据类型的列,一旦您选择了该列,Power BI 将执行验证并通知您所选列是否验证成功。

如果一切正常,您应该会在日期列名称旁边看到一个小图标:

恭喜你!您已经完成了在数据模型中创建正确的、功能齐全的日期维度的所有必要步骤。

现在,我们已经为使用不同时间段操作数据奠定了基础,在本系列的下一部分中,我将介绍 DAX 中最重要的时间智能函数,以及如何使用它们来利用不同的现实场景。

TIQ 第四部分——在电力商业智能中保持时间智能

原文:https://towardsdatascience.com/tiq-part-4-being-time-intelligent-in-power-bi-88171980b141?source=collection_archive---------49-----------------------

在 TIQ 系列的最后一部分,学习什么是时间智能,以及各种 DAX 时间智能函数之间的明显区别

TIQ 代表时间智商。由于“常规”智能通常被作为智商来衡量,而时间智能是数据建模中最重要的主题之一,我决定开始一个博客系列,将介绍一些基本概念、特定解决方案的利弊和要避免的潜在陷阱,一切都是为了增加你的整体 TIQ,并使你的模型在时间分析方面更加健壮、可伸缩和灵活

乔恩·泰森在 Unsplash 上拍摄的照片

亲爱的读者,我们即将结束这个系列。在详细解释了为什么可以、但不应该使用 Power BI 中的自动日期/时间特性之后,接着强调了数据模型中日期维度重要性,在上一篇文章中,我已经为创建适当的日期维度提供了各种解决方案。

因此,现在是时候总结一些最常用的时间相关计算的例子以及它们之间的一些明显差异了。

什么是时间智能?

用最简单的方式,时间智能表示某种与日期相关的计算。不要把它和“时间”这个词混为一谈,当有人谈论“时间智能”的时候,不要期望把小时/分钟/秒/毫秒看作是最底层的粒度。

更合适的术语应该是“日期智能”,但是由于“时间智能”已经被普遍接受,所以让我们坚持这个命名约定。

安德里克·朗菲尔德在 Unsplash 上拍摄的照片

DAX 中所有时间智能函数的主要特征是,无论如何,它们都需要对日期或日期/时间数据类型的列进行操作。这意味着这些函数的输入参数之一需要是日期或日期/时间列

此外,所有这些都会将您选择的日期转换为一些新的日期(无论是过去还是未来)。

最后但同样重要的是,时间智能函数支持将一天作为最低级别的粒度,这意味着您不能在小时/分钟/秒等计算中使用它们。

正确使用时间智能功能的检查表

  • 正如在本系列的前几篇文章中所强调的,您应该创建一个单独的日期维度,遵循所有必要的规则(连续日期、唯一值、非空值等)。)
  • 在数据类型为日期或日期/时间的列上创建日期维度和事实表之间的关系,而不是在代理键整数列上创建关系,除非您将日期维度标记为日期表(在这种情况下,在整数代理键上创建关系也是可以的)感谢 Derek van Leeuwen,MSc 发现了之前不精确的解释
  • 不要在时间智能函数中使用事实数据表中的日期或日期/时间列(例如,不要使用示例 Contoso 数据库中事实在线销售表中的订单日期列)
  • 始终在日期维度中创建全年值。这意味着,即使事实表中的最后一个订单是在 2013 年 9 月,日期维度也应该包括整个 2013 年,最后一个值是 12 月 31 日
  • 如前一章所述,坚持将一天作为最低级别的粒度

最常见的时间智能功能

有几十种时间智能功能,但其中一些比另一些使用得更频繁。例如,几乎所有使用数字的 Power BI 报告都需要进行某种比较,以确定趋势。或者,显示累积值也是最重要的业务需求之一。

这些功能乍看起来很简单,但同时也相当强大。让我们来看看这个简单的例子,计算所选年份的运行总数。

在 Contoso 数据库中,我创建了一个计算销售额的度量值:

Sales Amt = SUM('Online Sales'[SalesAmount])

现在,让我们创建用于计算运行总数的度量:

Sales Amt YTD = CALCULATE('Online Sales'[Sales Amt],
DATESYTD(Dates[Date])
)

当我将这些度量值拖到报表中并选择 2009 年 1 月到 8 月的月份时,您可以立即注意到月份级别上的数字差异:

这很简单,但让我解释一下在销售金额本年迄今衡量计算的背景下发生了什么,因为这对于理解这里的整个逻辑非常重要。

超越基础

回想一下我上面提到的时移概念——这里,我们选择了 2009 年 1 月 1 日到 2009 年 8 月 31 日的日期。YTD 计算发生的情况是,过滤器上下文被更改为包括从 2009 年1 月 1 日到所选月份最后一天之间的日期,不管我们选择的是哪个月份!

看下面的例子会更清楚,我选择了 2009 年 3 月到 2009 年 8 月的几个月:

仔细看看标有红色的数值。无论我们选择三月来显示我们的数字, DATESYTD() 函数都会重置我们的过滤器,并包含年初的值。我们在表格中看不到它们,但它们包含在三月份的总数中,因为您可以很容易地与第一个截图进行比较。无论我们如何更改切片器中的选择,YTD 的总数保持不变。

我最喜欢 DAX 的一点是,你可以用多种不同的方式实现相同的目标。这也代表运行总计计算,因为除了 DATESYTD() ,您还可以使用 TOTALYTD() 函数。 TOTALQTD()TOTALMTD() 的工作方式与相同,但粒度不同(分别为季度和月份)。

细节决定成败…

您还应该注意特定函数之间的细微差别,因为在一种情况下,它们可以给你完全相同的结果,但在其他一些情况下,它们的表现完全不同。

因此,如果您想要执行年度间的比较,您可以同时使用sameperiodlastyre()DATEADD() 函数,以及以下度量…

Sales Amount PY = CALCULATE(SUM('Online Sales'[SalesAmount]),
DATEADD(Dates[Date],-1,YEAR)
)Sales Amount PY Alt = CALCULATE('Online Sales'[Sales Amt], 
SAMEPERIODLASTYEAR(Dates[Date])
)

…将返回相同的结果:

唯一的区别是 DATEADD() 为您提供了更大的灵活性,因为您可以根据自己的需要以及日期层次结构的不同级别(季度、月、日)来改变时间间隔,而 SAMEPERIODLASTYEAR() 仅绑定到上一年。 PARALLELPERIOD() 也非常相似,但仍然有很大的不同,就像我们为日期移动设置静态间隔一样:

Sales Amount PP = CALCULATE('Online Sales'[Sales Amt],
PARALLELPERIOD(Dates[Date],-12,MONTH)
)

但是,当我们将上次创建的度量值更改为…

Sales Amount PP = CALCULATE('Online Sales'[Sales Amt],
PARALLELPERIOD(Dates[Date],-1,YEAR)
)

…您可能认为-1 年相当于-12 个月…

然而,事实并非如此,因为 PARALLELPERIOD 将返回上一年的总销售额(切片器选择已被忽略):

我不想说:用 DATEADD() 不要用 PARALLELPERIOD() 。或者,避免使用 SAMEPERIODLASTYEAR() ,而是使用 DATEADD() 。所有这些函数在您的计算中都有它们的位置— 这里的关键接管是:当您选择时间智能函数来执行特定的时间计算时要小心!正如你已经看到的,在某些情况下,它们会返回相同的结果,但实际上,它们的行为完全不同。

结论

时间智能是 Power BI(以及一般的商业智能)中最重要的概念之一。因此,正如我大胆尝试的那样,在几篇博文中涵盖所有内容几乎是不可能的。但是,我真心希望现在一些基本的概念和思路更加清晰。

最后,我打赌你的 TIQ(时间智商)比你开始这个有趣的 TIQ 之旅时要高。

感谢阅读!

厌倦了数据质量讨论?

原文:https://towardsdatascience.com/tired-of-data-quality-discussions-654106ce2e00?source=collection_archive---------57-----------------------

避免这些讨论的五个步骤

我参加过无数的会议,会上展示了各种分析的数据和结果。而且大多数会议都有一个共同点,数据质量正在受到的挑战,会议的大部分时间都用来讨论潜在的数据质量问题。本次会议的第一项跟进工作是验证未决问题,然后我们重新开始。听起来很熟悉?

照片由卢克·切瑟Unsplash 上拍摄

可以不一样。在有些会议上,这些讨论并没有发生,或者可能已经开始了,但是很快就解决了。我见过并参与了一些。这种类型的会议有一个我反复看到的区别。提交数据的人没有掌握他们的数据,没有预料到和没有想得更远

提出数据的人是 没有掌握自己的数据, 没有预见到*没有更进一步思考 *

事实上,许多数据质量讨论实际上并不是数据质量问题,而是对数据含义的理解。例如它的层次或结构,以及度量标准的解释。当你不明白某件事的时候很容易指责数据质量,但是通常是,问题出在别的地方**。******

当你不明白某件事的时候,很容易指责数据质量数据质量,但是通常是,问题出在别的地方*。*******

让我们假设你正在做一些探索性的数据分析,以便开始使用 AI 。成功的关键是真正理解你正在处理的数据。如果质量不符合标准,就让它符合标准,或者想办法处理数据。积极主动,然后它会发现这是一条很长的路。

1.从小处着手

这里的关键是随着这么多事情地开始变小。如果你在看一些特性,你可以深入了解这些特性的含义。如果你一开始就有几百个,那就更难了。让我们看看每个客户的产品数量,这显然是很少的。

如果你在看一小部分特性,你可以深入了解这些特性的含义

2.确保你理解你的数据

因为你从小开始,你才能够深挖。绘制相关图,查看频率,并阅读关于这些特性的文档。

因为你从小开始,所以你能够深挖并真正理解数据

在我们的例子中,我们基本上有两个特征要考虑,这两个特征实际上都有很大的讨论潜力。我曾经花了大约三个月的时间来定义什么是客户,当在 B2B 环境中工作时,这是一个特别困难的问题。根据您工作的公司,可能会使用不同级别的产品,其中每个产品都可能会引起不同类型角色的兴趣。产品经理与区域销售主管的兴趣层次不同。

3.验证数据质量

可能已经有了检查数据质量的标准方法,你应该理解并能够解释这些方法。我建议比通常的检查更进一步。检查不一致业务的角度来看,你客户的大部分工作是“会计”吗?再想想,可能是下拉列表的顶选。另一个典型的质量问题是系统之间的不一致性。请确保您了解这些不一致之处、它们的驱动因素以及它们的含义。

它可能是下拉列表的顶部选项

4.预见问题

你可以预料到相当多的问题。你通常会被问到什么问题?向您的受众报告了哪些KPI?过去发生过哪些讨论?哪些词汇在日常讨论中使用?举例来说,这应该能让你很好地理解你所看到的产品划分(剧透一下,你的数据中可能没有划分)。确保你理解为什么以及如何使用它们的不同层次。

预测问题将允许您从数据质量讨论中转移**

在我的例子中,有许多不同的产品层次结构(来自不同的系统),被不同的受众使用。我在仪表板中内置了这两个层次结构,并能够解释两者之间的重叠和差异。

如果你发现你的观众正在使用哪些系统,他们通常会看到哪些数据。与你信任的人进行预先讨论,检查数据和结果,找出所有可能的缺陷。

5.了解问题并解决它们

一旦你知道了存在的问题。是时候围绕他们开展工作了。一种方法是从源头解决问题。这可能不是您的工作,但对于后续项目来说可能是至关重要的,因为这些功能将会被用到。

如果你还在探索阶段,那么你可以考虑把问题和假设说清楚。关键在于你能够解释它们以及它们的含义,从而赢得听众的信任。

关键是你能够解释这些问题以及它们的含义来获得你的观众信任

你在想这是大量的工作?嗯再想一想,一旦这件事解决了,你就可以真正做你的工作了开始创造可行的见解采取行动

关于我:我是一名分析顾问,也是当地一所商学院“人工智能管理”研究的主任。我的使命是帮助组织利用人工智能创造商业价值,并创造一个数据科学家可以茁壮成长的环境。 报名参加我的 通迅 获取新的文章、见解,并祭上 AI 管理 这里

TL;博士:狄利克雷过程高斯混合模型变得容易。

原文:https://towardsdatascience.com/tl-dr-dirichlet-process-gaussian-mixture-models-made-easy-12b4d492e5f9?source=collection_archive---------7-----------------------

聚类是数据科学家生活中的祸根。我们中有多少人花了很多个周日晚上,带着越来越多的担忧看着一个新的数据集,在 scikit-learn 中翻找算法,摸索距离度量和集群数等超参数,同时向偏见之神祈祷宽恕。解决办法?贝叶斯非参数,英雄,我们都值得,但我们都非常需要。

图片鸣谢:欧空局/哈勃& NASA

首先也是最重要的:聚类生成的逆。

生成模型是给我们观察的模型。我们可以使用伯努利分布模型来生成硬币翻转观察。我们可以用泊松分布模型来模拟放射性衰变。我们可以用一个训练好的神经网络来生成古典音乐。模型越真实,这些观察结果就越接近现实。

高斯混合模型

下面是从四个独立的双变量正态分布中产生的 400 个样本的混合物,它们具有不同的平均值和相等的标准偏差。令人惊讶的是,这种混合高斯分布模型的名字叫做高斯混合模型

K 均值聚类

使用 K-Means 算法和难以置信的 Sherlockesque 聚类数推理(核密度图字面上告诉你有 4 个聚类),我能够恢复生成模型并对下面的每个聚类进行颜色编码。恢复/群集是干净的,因为数据非常干净。每个高斯贡献了 100 个样本,所以我们不必担心混合概率。我选择了四个截然不同的高斯均值和一个小的标准差进行采样,这样我就不用担心分布重叠了。

在现实中,大自然永远不会对你这样,永远不会对你这样,永远不会对你这样,我们不能忽视我们对聚类数、混合概率和混合中每个高斯矩的估计的不确定性。那么,我们如何根据数据复杂性来扩展我们的聚类方法呢?

非参数模型

让我们区分一下参数化非参数化模型。参数模型是我们可以用固定数量的参数写在一张纸上的模型。 y=mx + c 有两个固定参数( mc ),因此是参数化的。

当适合数据集时,随机森林分类器可以采用 M 个参数( yX ={x_{1},x_{2},…,x_{n}}),但是如果我们引入另一个特征 x_{n+1},则需要更多的K;随着数据复杂性的增加,模型也是如此。参数的数量没有上限,意味着对于足够复杂的数据,世界上没有足够的纸来写下完整的模型。这是一个非参数模型的例子。

谁在乎呢?事实证明,当我们对聚类数或混合概率的先验信念有限时,我们可以转向非参数化,并无限地考虑其中的许多。自然地,这些聚类中的许多是多余的,并且混合概率非常接近于 0* ,以至于我们可以忽略它们。令人难以置信的是,这个框架让数据决定最可能的集群数量。*

太酷了,我们怎么开始?首先,我们需要一种描述无限多个分布的混合的方法,这就是狄利克雷过程的用武之地。

狄利克雷过程

狄利克雷过程先验可以用足够多的数学术语来描述,使人退回到 K-Means,所以我将偏头痛,给一个直观的概述。

我们希望将混合概率𝜋={𝜋_{1 },𝜋_{2 },…𝜋_{n }…}分配给无限个聚类。我们知道, 𝜋 之和必须为 1,并且每个𝜋_{ i }都大于或等于 0。如果我们把 0 和 1 之间的概率想象成一根棍子,我们就在寻找打破这根棍子的方法,以便它准确地反映 GMM 中每个高斯的混合贡献。这种定义狄利克雷过程先验的方法被称为断棒过程,它本身具有贝塔分布先验。我强烈推荐在这里阅读统计细节。

断棒过程的图示。感谢http://blog . sha kirm . com/2015/12/machine-learning-the-trick-of-day-6-tricks-with-sticks/

在我们之前的例子中,我们有来自四个高斯人的相等贡献,所以 𝜋 = { 𝜋 _{1} = 0.25, 𝜋 _{2} = 0.25, 𝜋 _{3} = 0.25, 𝜋 _{4} = 0.25, 𝜋 _{5} = 0, 𝜋 _{6} = 0,…,我们打破了我们的棍子无数次,但概率密度只集中在前四个组成部分,允许我们截断无限分布。那么现在我们有了一个混合概率分配的非参数框架,我们如何将它拟合到数据中呢?

狄利克雷过程高斯混合模型

现在大揭秘:因为 𝜋 告诉我们每个高斯在我们的 GMM 中的相对贡献,它实际上是一个分布。每个𝜋 _{i} 对应一个唯一的高斯n(μ{ I }σ{ I })由均值 μ _ {i} 和协方差矩阵σ{ I }参数化。如果我们让θ* { I } =(μ_σ_*),我们的问题简化为给每个θ【t58 _ { I }分配一个概率𝜋 _{i} ,反映其对数据混合的贡献程度

给定一些 k 维多元高斯数据 X,我们从一个先验信念开始,即所有的 p( 𝜋) 都是同等可能的。然后,我们想使用我们的数据 X 来计算这个新的一切皆有可能的结构的可能性 p( X |𝜋)。最后,我们使用贝叶斯定理为模型后验 p(𝜋|x)∝p(x |𝜋)p(𝜋).更新我们的模型通常情况下,p(𝜋| X 涉及一些非常棘手的积分,所以我们依靠类似马尔可夫链蒙特卡罗采样变分推断来近似 p(𝜋| X 。幸运的是,给定正确的先验选择,我们可以使用期望最大化 (EM)算法进行推理!让我们在 scikit-learn 中看看它的实际应用。

实施

首先,我们生成一些非常混乱的玩具 GMM 数据集,富含随机的潜在相关结构。使用 20 维、8 个分量的 GMM,根据从具有均匀先验的狄利克雷分布初始化的权重方案抽取 10,000 个样本(链接到代码这里)。

对前两个特征进行核密度估计,并不能告诉我们数据中潜在的聚类数,但确实揭示了惊人的异质性。

跨数据的前两个 PCA 分量的聚类散点图向我们显示了恢复一般模型可能有多困难:

使用 EM 算法拟合截断为 15 个分量的 DPGMM,我们看到大部分概率集中在前 8 个分量周围:

事实上,如果我们使用像kull back–lei bler 散度这样的度量,我们可以计算我们的估计参数和我们的数据集中的地面真实参数之间的距离的不对称度量:

每个估计的 DPGMM 聚类映射其自己唯一的基本事实聚类,相对于与其比较的其余基本事实聚类,具有非常小的 KL 散度。对于这种匹配,毫不奇怪,DPGMM 几乎完美地恢复了聚类,而 K-Means 分类器根据最大平均轮廓分数选择聚类数,努力恢复实际的聚类数。

请查看上面链接的代码,尝试用自己的数据实现它。祝好运,集群快乐!

TL;博士:高斯过程贝叶斯优化

原文:https://towardsdatascience.com/tl-dr-gaussian-process-bayesian-optimization-5e66a014b693?source=collection_archive---------20-----------------------

数据科学家的难题:我们已经清理了数据,做出了建模假设,并急切地启动了 sklearn 所有阻挡在我们和 Kaggle 竞赛荣耀之间的都是这些讨厌的超参数。我们如何选择他们?

模型性能通常归结为三个关键因素:数据、模型的适当性和超参数的选择。我们可以将数据和模型类视为最棒的蓝莓松饼食谱中的配料,但即使是这些也无法挽救一个面包师在 300 摄氏度的烤箱中放置三个小时的产品。我们如何帮助他找到这些最佳设置?

超参数优化

优化模型超参数的艺术被称为超参数优化,你猜对了。在建模的这个阶段,我们提出了这样一个问题:选择什么样的模型设置可以在我的验证数据集上获得最佳性能?

注意:模型超参数应与模型参数相区别。模型参数是从数据中学习的,而超参数是由我们这些数据科学家选择的。例如,当拟合以下形式的线性模型时:

我们正在从我们的数据 yX 中学习 β 。如果 X 包含许多具有潜在相关结构的特征,我们可能想要使用类似 L1、L2 或 elasticNet 正则化来减少过度拟合

超参数优化帮助我们回答这样的问题:“我应该选择什么正则化方法?”以及“我应该为正则化参数设置什么值?”。我们可以通过询问“我需要多少棵树”来调整其他模型,如随机森林回归器以及“最大树深度应该是多少?”。

网格搜索

最简单的方法是使用每一个超参数组合来拟合我们的模型,并确定在拒绝验证集上提供最佳性能。这种方法被称为网格搜索优化,因为我们可以将每个组合想象为每个超参数值所跨越的网格上的一个点。

图一。两个回归模型类适合玩具数据。左图:使用 L1 比率和正则化参数调整的弹性网络回归。右图:使用最大树深度和树总数调整的随机森林回归。

上面是在一个玩具数据集上调整的两个模型类,该数据集有 100 个特征和 1000 个样本。在这种网格搜索中,每对超参数用于训练一个新模型,该模型具有在保留数据集上评估的验证性能。虽然这在弹性网模型中是相对可行的(图 1。左),在像随机森林回归(图 1)这样的非参数模型类的情况下,它的计算量非常大。对)。

网格搜索是一种确定性超参数调整方法:我们独立考虑每个超参数配置。对图 1 中表面的关键观察。他们是连续的行为良好的(如果我们确定地知道曲面上的任何一点,我们就可以对它旁边的值进行合理的猜测)。因此,如果我们采用概率方法,我们可以近似图 1 中的表面。使用数量少得多的训练模型。这就是贝叶斯优化非常有用的地方。

贝叶斯优化

Bayes 规则让我们提出以下问题:我有一些关于我的误差表面看起来如何的先验信念,我有一个模型类和数据可以用来收集更多的证据,我如何使用新收集的证据更新我的误差表面以给我一个最优超参数的后验估计

首先,我们需要一个灵活、可扩展且性能良好的模型来逼近我的回归模型相对于超参数的误差曲面。在贝叶斯优化中,这被称为代理模型。假设我们正在调优岭回归模型的 Lambda 超参数,它在 python 的 sklearn 实现中接受[0,1]中的值。

我们假设我们的验证误差是这个超参数的函数,但是不确定这个函数采取什么形式。由于我们还没有任何证据,我们可以从假设一个无信息结构开始,其中每个误差值都是从均值为 0、标准差为 1 的标准正态分布中独立提取的。这在图 2 中绘制在λ域上。下面。

您可以想象沿着 x 轴集合了无限数量的单个正态分布,阴影区域表示偏离以 0 为中心的平均值+/-1 个标准偏差。我们前面说过,当邻近的点已知时,我们对建议点的值的信心应该增加;我们需要将这种依赖性编码到协方差结构中。

这就是核函数特别有用的地方,它们测量任意两个给定点之间的相似性,并可用于在所有可能的协方差矩阵上建立先验分布。相似的 L1 比值比遥远值更可能具有相似的模型误差分布,并且这被编码在我们选择的核函数中。最棒的是,我们可以用它来建立函数的先验分布。这种结构有一个特殊的名字:高斯过程(GP)先验。关于 GPs 的深入概述,包括不同类型的核函数及其在贝叶斯优化中的应用,可以在这里找到。

我们将使用 Matern 内核作为代理函数协方差矩阵的先验。从我们的先验中采样值给出了线的分布:

为了更新我们的先验,我们可以从 Lambda 的随机样本开始,并用它来更新代理函数。在与之前相同的玩具数据集上拟合岭回归模型,我们可以计算λ= 0.1 时的决定系数;我们看到,与它相邻的点周围的不确定性大大降低:

理想情况下,我们希望下一个λ样本的决定系数期望值高于当前样本。这可以通过使用采集功能来实现,如预期改善 (EI)。我们可以从代理模型中直接计算出这个值,并使用它来提出下一个要评估的点。

我们可以在评估、取样、评估、取样之间反复,只要我们愿意。建模者决定准确性和计算量之间的权衡。以下是进一步四轮更新的图表:

****

仅经过五轮贝叶斯更新,我们看到我们的代理函数正在采取一个独特的形状。采集函数引导我们的优化远离过度正则化模型的较高λ值。

总结:使用高斯过程先验的贝叶斯优化是一个非常有用的工具,用于调整模型超参数,同时最小化整体计算开销。对于那些有兴趣阅读更多内容的人,我肯定会推荐彼得·弗雷泽关于这个领域的评论。 Thomas Huijskens 开发了一个优秀的 python 资源,用于使用预期改进的贝叶斯优化。

愿贝叶斯力量与你和你所有的努力同在。

TL;博士:拥有更多的赃物如何能让人工智能司机更安全

原文:https://towardsdatascience.com/tl-dr-how-having-more-swag-can-make-for-safer-ai-drivers-d23457ecdb93?source=collection_archive---------37-----------------------

贝叶斯深度学习可以帮助捕捉传统方法通常忽略的不确定性属性。通过使用 SWAG 进行学习,我们表明可以训练自动驾驶员以更高的准确性做出更可靠的决策。

KITT OG 自动驾驶汽车

自动驾驶汽车曾经只是《霹雳游侠》等 20 世纪娱乐经典的主题。如今,谷歌有了 Waymo ,优步有了 XC90 SUV ,每辆现代特斯拉都配备了自己的、不那么啰嗦的 KITT 版本,名为 autopilot 。和普通司机一样,AI 司机的大脑也要有经验,反应快,最重要的是,自信。虽然我们可以通过更多的数据来改善体验,通过更强大的机器或更快的算法来提高速度,但我们如何衡量和调节我们的信心呢?

注意我说的调节并不一定是提高。这是因为自动驾驶司机的决定通常由某种深度学习模型驱动,而这种模型已经过于自信。驾驶并不是一项让过度自信有回报的活动;罕见的错误会带来毁灭性的后果。没有人说深度学习模型自大,它们只是大多数确定性函数,不能代表不确定性。这就是贝叶斯方法胜出的地方。

随机梯度下降

DNNs 非常强大的模型,在从语言翻译到图像分类的一系列预测任务中表现出卓越的性能。它们通常包含成千上万的参数,可以调整这些参数以从数据中学习复杂的模式。在监督学习中,目标是学习 p ( y | θ,X);我们搜索模型参数 θ ,连同我们的特征数据 X,可用于区分或预测我们的目标变量 y 中的观察值。对于任何 θ ,我们可以通过使用适当的损失度量来计算我们的模型代表数据的程度,例如在分类任务的负对数似然回归模型的情况下的均方误差(MSE)。

如果我们绘制【L】θ 的曲线,我们可以看到损耗幅度如何在参数空间内变化:

CIFAR10 数据集的 RESNET-20 损失面的可视化。鸣谢:铁木尔·加里波夫和同事们。

这张漂亮的插图放大了在 CIFAR10 数据集上训练的 RESNET-20 DNN 的高度非凸损失表面。(x,y)轴上的每个 θ 实质上代表一个新的模型,其误差由 z 轴上的 L 的高度跟踪;理想情况下,我们希望挑选 L 值最小的 θ 。随机梯度下降(SGD)就像一种全球定位系统,引导我们从最初的起始位置沿着最大下降的路径前进,直到我们到达许多局部最小值中的一个。对于那些不熟悉 SGD 的人,我强烈推荐从 Andrew NG 的精彩概述开始。

这种方法并非没有缺点:

  • 有人认为传统的 SGD 只收敛到一组高性能网络的边界。小样本变化会导致训练和测试数据集之间的损失表面移动,从而将 θ 推离该边界,导致泛化能力差。
  • SGD 通常与一个衰减学习率一起使用,以便收敛到一个最优 θ 。虽然这加快了推理的速度,但它并没有覆盖所有可能的解决方案。
  • 当我们做出导致过度自信估计的预测时,我们忽略了与 θ 相关的不确定性。

我们怎样才能在不增加额外计算开销的情况下解决这些问题呢?

贝叶斯网络的 SWAG

SWAG 中的 SWA 代表 随机加权平均 g ,这是一种专门解决前两个缺点的方法。其思路是从一个预先训练好的解θ_ {pre}开始,然后把学习率推上去,利用 SGD 探索局部几何。在每一步 i 中,我们以恒定或循环的学习速率移动到权重空间 θ _{i} 中的新位置。恒定的学习速率产生一个新的解,我们连续地将它与我们的预训练解进行平均,以给出 SWA 解θ_ {SWA}。对于循环学习率,求解器“跳出”一个局部极小值,收敛到附近的另一个解;学习周期结束时的收敛解与训练解进行平均。作者表明,这种新的解决方案更有可能集中在一组广泛的高性能网络中,并强调了跨许多残差和图像分类网络的预测准确性的提高。

Maddox 等人将该方法包装在贝叶斯魔术中,通过使用形式为N(θ_ {SWA},σ)的多元高斯模型来近似局部误差表面,将 SWA 扩展到 SWA( G )。

*σ是一个协方差矩阵,它跟踪沿局部几何形状的变化,并使用沿 SWA 算法路径移动的每个新点 θ _{i} 进行更新。不幸的是,如果我们包含每个迭代 *i,那么计算σ**是很昂贵的;dnn 包含数百万个参数。作为速度黑客,作者使用全套迭代来仅更新σ中的对角线元素,使用 SGD 迭代中的最后 T 项来计算非对角线。

现在来看最精彩的部分:我们不再只有对 θ、一个选择,我们有了由N(θ_ {swa}σ)给出的整个分布,它描述了围绕θ_ {swa}的几何特征。这让我们可以使用 贝叶斯模型平均 将不确定性直接建模到任何给定的预测中。原则上,这包括将 p ( y | θ,X )中的 θ 积分,得到p(y|X)。在实践中,这在计算上是难以处理的,所以我们通过蒙特卡罗采样来解决近似:采样θ_ {K} ~N(θ_ { swa }σ)K次,并平均 1/K(σp(y****

SWAG 在图像分类、分割和回归任务上表现出了令人印象深刻的性能,但它在自动驾驶上又会如何呢?

带 SWAG 的自动驾驶

Udemy 早在 2016 年就推出了一款很棒的驾驶模拟器,可以用来手动收集训练数据和处理来自 python API 的 I/O。本实验中使用的网络架构和数据预处理步骤来自于 Manajit Pal 的一个很棒的教程,其中还包括一个链接,指向用于两个轨道之一的数据集

本质上,该网络是一种改进的卷积神经网络,具有预测单一转向角的线性层。该网络将汽车驾驶员视角的右视图、中视图和左视图作为输入。因为这是一项回归任务,所以使用均方误差作为损失标准。所有代码都是用 python 编写的,使用 pytorch 和 Maddox 等人发布的 SWAG 训练报告进行推理。

使用 80:20 的种子随机分配将数据分成训练集和验证集。首先,使用传统的 SGD 在 60 个时期内训练初始网络,线性衰减的学习速率最初被设置为 0.1,持续 30 个时期,线性衰减至 0.00001,并在最后 6 个时期保持固定。在整个训练过程中,动量被设置为常数 0.9,其中 L2 正则化使用 0.0001 重量衰减来实现。通常在 40 个时期后观察到收敛。

然后 SWAG 再运行 60 个时期,更新每个时期 I 的循环学习率,如伊兹迈洛夫等人所述:

  1. t(I)=(mod(i1,c) + 1)/c,
  2. α(I)=(1t(I))α1+t(I)α2

使用基本学习率参数(α1,α2)= {(101,103),c 是设置为 5 个历元的周期长度。我记录了训练/验证 MSE,并将其转换为负对数可能性,以便于解释。我们可以对获得的协方差矩阵执行奇异值分解(SVD ),以将我们的验证集损失表面投影到由特征向量定义的二维平面上:

这里,v1、v2 表示在由前两个 SVD 特征向量跨越的低维平面中距 SWA 解的距离。这是一个非常低维的表示,但是非常好地捕捉了损失表面的几何形状!!我们看到,尽管我们的 SGD 解在 SWAG 3σ区域内(绿色虚线),但它与恰好位于宽损失边界正中心的 SWAG 平均解相差甚远。

最终的结论是,我们的 SGD 模型实现了 0.91±0.0115 的验证集 NLL,而 SWAG 构造具有更低的损失和更紧密的围绕 0.88±0.0094 的解决方案的置信界限。

由于该框架非常灵活,因此可以扩展到更复杂的自动驾驶网络,这些网络具有类似记忆的组件,如 LSTMs。但是现在,我希望我已经让你相信贝叶斯网络真的很神奇,并且对未来有很大的希望。

谷歌的协作环境为这个项目提供了动力,他们免费提供 GPU 时间,因此任何人都可以训练他们的模型!也感谢Marco Antonio Awada博士对信息几何及其在深度学习中的应用的大力指导。

TL;灾难恢复结构因果模型(Dag)变得简单

原文:https://towardsdatascience.com/tl-dr-structural-causal-models-dags-made-easy-part-1-25526374cfd5?source=collection_archive---------48-----------------------

“吸烟与癌症有关”vs“吸烟致癌”,哪个更容易摇摆公众情绪?后者肯定;因果结论强于关联。我们拥有比以往更多的数据,但开发因果人工智能引擎仍然是一个重大挑战,我们在哪里?

先有鸡还是先有蛋?资料来源:publicdomainpictures.net

联想 vs 因果关系

简而言之:因果关系是那些在外部条件变化时保持不变的关系,无论如何关联都保持不变。

假设我们想了解一年中的哪一个月是冰淇淋需求增加的原因。相关性是一个简单的模型,其中观察到的冰淇淋需求被建模为一年中月份的线性函数我们可以通过测量边际概率 P (冰淇淋 | 月)来表示这种关系。然而,一台机器如何仅凭联想就能确定是冰淇淋需求导致了一年中的哪一个月,还是相反?

它不能!这是因为我们无法在变化条件下验证 P (冰淇淋 | 月)。这就是所谓的关联模型的静态属性 ,包括但不限于关联和回归。

批判地说,朱迪亚·珀尔(现代因果理论之父)将我们温顺的“相关性并不意味着因果关系”重新表述为更严格的 “一个人不能仅仅从关联中证实因果关系的主张,即使是在群体水平上——在每一个因果结论的背后,必定存在一些在观察研究中不可检验的因果假设” 。这与我们将因果假设直接编码到数据收集过程中的实验形成对比。那么,我们如何验证“六月会导致更多的冰淇淋需求”这句话呢?

一些人通过简单地控制与治疗变量 x 和结果变量 y 相关的变量 Z 来宣称因果关系。例如,当检查六月( x )是否会导致冰淇淋需求激增( y )时,分析师可能会针对天气调整他们的模型。如果 (Zx ) 和( Zy )不是独立的, Z 就说是一个 混杂变量 。因此,如果我们考虑天气因素,我们的计算机可以使用更新的关联模型P’(y|x)来识别下面这些家伙之间的正确因果关系吗?

差得远,“控制Z”只是我们已经验证的因果假设的一个子集,仍然有太多的依赖和事情在发生!为了了解为什么会出现这种情况,我们可以用一种叫做有向无环图 结构因果图来说明因果关系。

因果有向无环图

通俗地说,DAG 是一个没有圈的有向图:

这意味着从图中的任何节点开始,比如 D、D,没有任何路径可以将你带回到 D 。重要的是,它们可以用于编码因果模型的所有假设,这被称为因果 DAG。节点表示事件,有向边表示因果关系:E->-F 隐含 E 是因果 F 。因为图是无环的,没有事件能引起自身。事件由路径连接,有三种路径需要考虑。让我们从字母转移到我们的冰淇淋示例,以获得一些实际的上下文:

DAG 1:开放路径

****(1)开放路径:六月是气温升高的原因,而气温升高又是冰淇淋需求增加的原因。天气在六月和冰淇淋需求之间扮演着 T2 的中介角色。健康的经济也会导致冰淇淋需求的增加,但是由于没有箭头指向它,这一事件与月份或天气无关。

DAG 2:后门路径

****(2)后门路径:这里两个变量共享同一个因果路径。在一个以农业为主的经济体中,气温升高可能会增加作物产量,从而提高经济健康水平,进而增加冰淇淋需求。更高的温度也让人们想吃更多的冰淇淋。因此,我们可以看到天气或一年中的月份如何成为农业和冰淇淋需求之间关系的混淆变量,因为两者之间存在关联。在因果 Dag 中,通过追踪后门路径总能找到混淆变量。

DAG 3:封闭路径

(3)封闭路径:**这里,一个变量有两个效应导入其中。更高的温度可能会使人们想开着空调汽车到处跑。此外,更健康的经济让汽车更实惠。后果如何?天气和通过更多驾驶传递的冰淇淋需求之间没有联系。驱动事件变量被称为碰撞器。

现在我们明白了为什么简单地“控制混杂变量”会产生误导。在模型(1)中,对天气的调节对应于对中介的调节,这关闭了路径,并且这歪曲了事件之间的关系。在模型(3)中,错误地控制一个碰撞器作为混杂因素,打开了一条从六月到通过驾驶的冰淇淋需求的路径,扭曲了整体关系。在实验设计中,这也是一个同样重要的考虑因素,研究天气对倾向于驾驶的人群中冰淇淋销售的影响选择偏差

最重要的是,检查因果 Dag 可以指导我们选择混杂变量:为了在模型(2)中收集经济健康对冰淇淋销售的影响的无偏估计,控制天气似乎是一个不错的选择。

TL;博士:罗伯特·马丁的《干净的编码者》

原文:https://towardsdatascience.com/tl-dr-the-clean-coder-by-robert-martin-d53a77dd228b?source=collection_archive---------33-----------------------

布莱恩·戈夫在 Unsplash 上的照片

我刚刚读完罗伯特·c·马丁的《干净的程序员:职业程序员行为准则》。不可思议的书,全新的程序员,十分之十。我推荐给每一个日常写代码的人。

我决定做一些笔记,将书中的建议与我自己在数据科学和机器学习方面的一些经验结合起来。我试着把这些笔记写成可操作的形式,这样就很容易从中养成习惯。

  1. 负责
  2. 对自己的职业负责
  3. 当你打算重用代码时,使用 TDD
  4. 不要害怕说“不”
  5. 定义“完成”
  6. 通过给出时间估计来显示承诺
  7. 提供时间估计,而不是猜测
  8. 将大任务分解成几个小任务
  9. 使用 PERT 方法
  10. 请你的队友估计所需的时间
  11. 不要参加所有邀请你参加的会议
  12. 提供一个清晰的议程和一系列要实现的目标
  13. 会议期间做笔记
  14. 进行结对编程会话
  15. 开始使用番茄红素

让我们详细看看每一个。

职业化

这本书的细红线是在回答这个问题,“成为一名软件开发专业人员意味着什么?”。你自己也想一想。你能称自己为专业人士吗?为什么?如果不是,你和专业人士的区别是什么?

负责

我父亲总是告诉我,“工作吧,就像你拥有它一样。”如果公司是你自己的,你会写蹩脚的代码,做最少的工作来满足需求,或者做肤浅的分析吗?大概不会。在道德上有义务为自己的行为负责。

非专业人士要容易得多。非专业人士不必对他们所做的工作负责。

我们如何承担责任?罗伯特·马丁提出了几点:

  1. 不要损害功能。确保你的代码做了你想让它做的事情。
  2. 设计易于测试的解决方案。问问你自己,“如果我在一年内重构这段代码,会有多容易?”如果你有可靠的测试,你就不会害怕改变代码。
  3. 设计易于维护的解决方案。代码会随着时间而退化;维护它是你的责任。童子军规则:总是签入一个比你签出时更干净的模块。

对自己的职业负责

确保你有销路不是你雇主的责任。为你的事业努力。

  1. 每周花 n 个小时学习新东西。阅读博客帖子,细读 arxiv 论文,在 YouTube 上观看会议笔记,在 Twitter 或 LinkedIn 上关注顶级人工智能影响者——有无数种方法可以了解数据科学和机器学习领域正在发生的事情。但是尽量不要被噪音淹没。把学习时间当作对你的职业和未来的巨大投资。让你的生活成为一个不断学习的过程。
  2. 练习你的技能。贡献开放软件,做自己的宠物项目,参加机器学习比赛或者黑客马拉松。让练习技能成为每天的例行公事。
  3. 成为某人的导师。即使你确实知道这个话题,向别人解释也会使你的知识结构化。与某人合作或成为导师。为社区做贡献。

测试驱动开发

来源

测试驱动开发(TDD)是一个软件开发过程,在这个过程中,程序员重复小周期的工作:为一个功能编写测试,编写这个功能,让这个功能通过测试。这种方法有多种好处;以下是几个例子:

  1. 通过编写更多的测试,您可以确保您的程序如您所愿。TDD 允许您捕捉 bug,并对您的代码更有信心。
  2. 久而久之,你的代码开始“发臭”,也就是说,代码质量下降。一个好的做法是不时地进行代码重构。但是你怎么能确定你的重构没有破坏代码呢?没有测试,就不可能确切知道。缺乏测试会阻止开发人员执行必要的重构(“如果我破坏了它,我需要修复它”)。
  3. TDD 迫使你正确地编写代码。考虑一下为一个同时做多件事的函数编写测试(例如,拆分数据、归一化数据、训练模型以及计算分数)。那会很难。因此,您开始考虑是否可以将函数分解成几个更小的独立函数,这样测试会更容易。
  4. 后来写的测试不如先写的测试深刻。

当你打算重用代码时,使用 TDD

数据科学家是否应该使用 TDD 并不是那么明显。有多种理由反对将 TDD 用于数据科学和机器学习任务:

  1. TDD 需要更多的时间。在某些情况下,数据科学团队需要快速迭代,而 TDD 会减慢这个过程。反驳论点一:你如何确定你迭代的结果是可靠的?一个管道可能会被拒绝,因为一个隐藏的错误使分数很低。当你发现这个 bug 的时候,你必须再次迭代,以确定结果。反驳论点二:现在写脏代码,将来会需要更多时间。在许多情况下,技术债务是可以避免的。
  2. 一些数据科学任务无法测试。反方:不能做所有的事情并不意味着我们不应该做任何事情。即使 10%的测试覆盖率也比 0%要好。
  3. 并不是每一段 DS 代码都投入生产,因此很多工作可能是无用的。反驳:如果它没有投入生产,并不意味着代码不会被重用。
  4. 数据科学家通常不是软件工程师,所以很少有人能写出合适的测试。反驳:开始做,熟能生巧。

自己决定用不用 TDD。

我为自己制定了一个简单的规则:如果我打算多次使用这段代码,我将首先编写测试。对于需要快速迭代的任务,使用眼球测试(例如,通过打印输出或绘图自己检查输出的完整性)。如果我们谈论生产,所有代码必须被测试。

说不和说是

不要害怕说“不”

-我们真的很喜欢你为我们设计的标志!但是我们的管理层有一些很棒的想法…

-没有。

管理层并不像你那样对你的领域有深刻的理解(这就是他们雇佣你的原因)。他们通常不明白一项任务要花多少时间,或者在一些任务上投入资源是否有意义。你的管理层指望你捍卫你的目标,而不只是同意他们所说的一切。要有主见。你和你的经理都需要通过谈判获得尽可能好的结果。我并不是说你应该总是说“不”,但是请记住,专业人士是不会同意的。

定义“完成”

了解你被期望做什么是至关重要的,尤其是在数据科学领域,分数的提高可能需要额外几周的工作。管理层的期望可能与你的计划不同,所以为了避免沮丧,讨论并定义什么是“完成”。如果你不确定什么时候可以说“完成了”,把任务分解成几个你确定的小任务。

通过给出一个时间估计来显示承诺

“我会尽力在下周末之前完成”——你觉得怎么样?这句话的意思可能会有所不同,从“如果有就好了;如果我有时间的话,我会做的,这取决于说这话的人。在某些情况下,这样的短语可能会被视为对完成任务的承诺,这可能会导致错误的承诺。对你的承诺要非常清楚,给予并且不要害怕询问估计的时间。

当你说你会做的时候

你是认真的

你真的做到了

你时不时会受到其他人的阻碍,或者因为意想不到的原因而无法完成任务。那很好。能做多少就做多少,专业一点。如果你不能及时完成项目,尽快通知利益相关者。

时间估计值

“完成这项任务需要五个工作日”——你这么说是什么意思?你的意思是:

我认为它可能需要五天。也许四个,也许六个。甚至可能是 10 年。但我最后的猜测是五天。

或者你实际上的意思更接近于:

不管要花多少钱,我都承诺在五天或更短的时间内完成它。我会加班;没有家人,没有朋友。五天,不能再多了。

提供时间估计,而不是猜测

企业将时间估计视为承诺,而开发人员倾向于将估计视为猜测。真正的软件开发人员会做出承诺,并努力实现它们。问题是,在现实中,我们不知道这项任务需要多少时间,因此我们需要估计。人们往往是糟糕的评估者。然而,有几种方法可以帮助我们提高估计值。

将大任务分解成几个小任务

假设你正在计划去巴哈马度假的预算。你需要多少?1k,3k,10k?你能确定吗?

你可能不能完全确定,但你仍然可以给出一个合理的估计。你所要做的就是得到一个往返的票价;你打算在食物、娱乐和礼物上花多少钱;等等等等,然后总结一下。这些估计也没那么难吧?时间规划也是如此。

把大任务分解成几个小任务,你是一举两得。首先,这种分解有助于理解任务所需的组件和整个架构。其次,它提高了估算的准确性:估算小任务所需的时间比大任务要容易得多。

使用 PERT 方法

为了提高估计的准确性,开始考虑时间估计不是一个单一的数字,而是几种情况:

O :乐观——如果一切顺利,任务会很快完成。

N :正常——这个估计有最大的成功机会(最可能的时间)。不是所有的事情都是完美的;将会出现一些错误和阻塞。

P :悲观——事事不顺。最坏的可能,但也是可能的。

从左到右:乐观,正常和悲观的时间估计。使用过的照片,从左到右:在 UnsplashIshan @seefromthesky 的照片,在 UnsplashMax Duzij 的照片,在 UnsplashJosep Castells 的照片

给定这些估计值,并假设任务所需的时间可以用 beta 分布来描述,您可以计算:

  • 任务的预期持续时间: m = (O + 4N + P) / 6 (天)
  • 任务的标准差:σ=(P—O)/6(天)

一系列具有预期持续时间 m_i 和标准偏差 sigma_i 的任务所需的时间计算如下:

  • 一系列任务的预期持续时间: M = m_1 + m_2 + … + m_n
  • 一个任务序列的标准差:西格玛* = ( 西格玛 _1 ^ 2 + 西格玛 _2 ^ 2 + … + 西格玛 _n ^ 2 ) ^ 0.5*

请你的队友估计所需的时间

1906 年,英国统计学家弗朗西斯·高尔顿参加了在普利茅斯的一个郡会,普利茅斯是德文郡南海岸的一个港口城市。他偶然发现了一个猜重量的彩票,参与者被要求猜屠夫斧头的重量。猜得最接近的人将会获奖。高尔顿要求彩票组织者写下参与者的猜测。

根据这些笔记,高尔顿发现 800 次猜测的平均值与斧头实际重量相差不到 500 克,这比获胜者的猜测要近得多。这有助于认知科学中的洞察力,即群体的个人判断可以建模为响应的概率分布,中间值集中在待估计量的真实值附近(参见群体智慧中的更多群体智慧示例)。

获得一项任务所需时间的更准确估计的最简单和最快的方法是独立地问你的队友,然后平均他们的答案。你不需要像在 ax 重量彩票中那样问 800 个人来得到一个可靠的预测。即使在几个同事的帮助下,最终的估计也会有更低的方差,因此估计会更准确(估计的误差包括偏差、方差和噪声;减少其中一个,你会得到更好的预测)。

混合估计似乎很熟悉?没错,这是人类版的随机森林

要进一步改进预测,您可以执行以下操作:

  1. 猜测完成任务所需的时间。假设你的估计是 7 天。
  2. 询问同事这项任务需要的时间是多还是少。找出他们的估计和你的估计之间的差异。将差值乘以一个小数字(如果你有一个庞大的部门,则为 0.01;0.5,如果你有一个小团队)并将这个结果添加到你的估计中。
  3. 重复直到收敛。

这种方法类似于梯度增强。理论上,它减少了估计的偏差。关于偏差-方差权衡、混合和增强的更多信息可以在统计学习介绍(第 2 章和第 8 章)中找到。

没错,这是人类的梯度推进

会议

工作日太短,你能投入编码的深度工作甚至更短。

不要参加所有邀请你参加的会议

管理你的时间是你的工作,而不是邀请你的人。有时候,最好进行一次简短的面对面的讨论,不要开太长的会议。

提供一个清晰的议程和一系列要实现的目标

这是一个简单而高效的提高会议效率的策略。你是要在会议中解决什么问题还是只是随意讨论?写下需要讨论的要点和应该做出的决定。让它变得可行。

会议期间做笔记

你还记得两个月前会议上的内容吗?我也没有。我不知道是否有人可以。也许有人可以,但他们最有可能是在拉斯维加斯算牌。

自己做笔记或者请别人在会议期间做笔记。写下最重要的陈述、共识和任务。在 Confluence 或 Google Docs 中公开共享您的笔记,这样那些没有参加会议的人仍然可以得到更新。

团队合作

进行结对编程会话

结对编程是指两个或两个以上(最好是两个)的人一起完成一项任务。通常,一个人编写代码,另一个人讨论问题并观察问题,如语法、逻辑或代码风格。结对编程有多种好处:

  1. 这可能是审查代码的最佳方式。
  2. 结对编程是在公司内部传递知识的最快方式。
  3. 结对编程有助于团队建设。

开始使用番茄红素

大约六个月前,我开始使用番茄工作法,我注意到专注于问题和跟踪每天的结果变得更容易了(每天站立也有帮助)。此外,将你的工作时间分成几个间隔更健康,这样你就可以从电脑前起来热身。

来源

刮胡子,还是不刮胡子,这是个问题

原文:https://towardsdatascience.com/to-beard-or-not-to-beard-that-is-the-question-b46864d7e003?source=collection_archive---------62-----------------------

使用深度学习对有胡须和无胡须的照片进行年龄分类

威廉.莎士比亚两幅画作的年代预测。在这种情况下,胡子不会改变年龄范围,尽管这幅画的平滑特征可能会妨碍模特的表现。原创图片分别来源于 Flickrpen light

机器学习在计算机视觉中的应用是数据科学中一个不断发展的领域,一些有趣的问题已经用这些方法解决了。计算机视觉是识别偷猎者并将他们绳之以法,以及推动无人驾驶汽车的浪潮。在这篇文章中,我使用计算机视觉是出于一个更不相关的原因,即识别我有胡子和没有胡子的年龄。如果你对使用机器学习进行年龄预测感兴趣,我在之前的文章中加入了很多我的代码和推理。如果你对计算机视觉感兴趣,OpenCV 是必不可少的,有许多教程可以帮助你入门。本文的代码改编自 Adrian Rosebrock 的 pyimagesearch 教程。我还通过使用 Prerak Agarwal 的 TDS 帖子来训练我自己的模型。我改编的代码可以在 GitHub 上找到,尽管我建议从 Adrian 和 Prerak 上查看代码。由于 Tensorflow 的训练时间较长,我的脚本使用了预先构建的 CAFFE 模型。

为了训练用于分类任务(例如年龄预测)的任何模型,我们需要具有真实年龄的标记人脸数据。要使用 Tensorflow 训练自己的深度学习模型, Prerak 的 CoLab 笔记本是一个很好的起点。他首先创建均匀分布的标记的训练数据的年龄范围或。在我自己的模型训练中,我改变了箱子以更准确地表示发展阶段。例如,我将 10-20 岁这一大类分为 8-12 岁、13-16 岁和 17-25 岁。然而,在面部年龄数据集UTKFace 数据集的组合中,出现了 17-25 岁和 25-30 岁人群的富集。训练后,我在遗漏的测试数据集上测试了我的新深度学习模型,发现我的模型预测所有测试案例为 25–30。这可能是不平衡的训练数据的结果。我需要对我的训练数据进行降采样,以平衡我的类来处理这个问题。我没有继续摆弄自己的模型,而是求助于 Adrian 教程中预先训练好的模型。

为了实现年龄分类模型,必须首先找到图片中的所有人脸。OpenCV 有使用级联分类器的面部分类器演示。谢天谢地,面部检测模型已经创建好了。我们可以找到人脸,然后创建一个矩形框来突出显示我们的模型识别的“斑点”,以预测年龄和性别。斑点是图像的子部分的术语。我们的脚本通过网络向前运行新的 blob 预测,并获取最大预测分数。最大预测得分是分配给预测人脸的项。

运行年龄/性别预测脚本

要运行该脚本,只需从项目 Github 下载源代码和模型。需要安装 Opencv 来运行模型和脚本

pip install opencv-python

然后进入文件夹,摆弄一些照片。** 要分类的照片必须与 AgeGender.py 在同一个目录下才能打印输出文件。**

./AgeGender.py --input bearded_willy.jpg

这将输出文件 age-gender-out-beadled _ willy . jpg。打开该文件以查看分类性能。

忍受令人发指的毛发生长带来的瘙痒和斑斑驳驳,还是把刀片拿到脸上,以相反的方式终结它们,哪个更高尚?去理发,去刮胡子。

这个年龄分类系统是如何对我自己有胡子/没有胡子的图片起作用的。

我长着一张娃娃脸,没有胡子,模特预测我的年龄在 15-20 岁之间,然而,有胡子的我属于 25-32 岁之间。

这个年龄分类系统把我没有胡子的脸定为 15-20 岁。鉴于我现在已经快 30 岁了,我认为留胡子可以让未来的面部识别技术准确识别我的年龄范围。我的名字是科迪·格利克曼,可以在 T2 的 LinkedIn 上找到我。请务必查看下面的一些其他文章。

[## 使用 Python 创建照片镶嵌

一步一步的教程,让你自己的美丽的图像

towardsdatascience.com](/creating-photo-mosaics-using-python-49100e87efc) [## 使用 Dash 和 SQL 快速浏览圣诞歌曲

使用 SQL 数据库创建 Dash 仪表板的简单项目

towardsdatascience.com](/dashing-through-christmas-songs-using-dash-and-sql-34ef2eb4d0cb) [## 使用 GitHub 创建漂亮的静态网页

查找模板和为静态网页创建表单的位置

towardsdatascience.com](/building-a-beautiful-static-webpage-using-github-f0f92c6e1f02)

要成为更好的数据科学家,你需要像程序员一样思考

原文:https://towardsdatascience.com/to-become-a-better-data-scientist-you-need-to-think-like-a-programmer-18d0a00994dc?source=collection_archive---------53-----------------------

拥有强大的编程技能将使你有能力探索数据科学的新领域。但是如何成为一个呢?

动机

随着您越来越多地参与数据科学,有时您需要实现研究论文中的新方法,或者为特定用途定制一个库。因此,对于一个数据科学家来说,成为一名优秀的程序员是非常重要的。

尽管我一直在使用 Python 的可视化和机器学习库,但对我来说,从理论上实现算法并开发 Django 应用程序是一项挑战。我花了一个多月的时间来实现 Voronoi 图。

[## 如何用 Voronoi 图找到最近的医院

给定美国医院的大型数据集,我们如何快速找到最近的医院?

towardsdatascience.com](/how-to-find-the-nearest-hospital-with-voronoi-diagram-63bd6d0b7b75)

但是就像人们常说的“成为一个好的编码者的最好方法是尝试从零开始实现一些算法”。实现算法后,我学会了调试代码和快速找到解决方案的基本策略。有了这些策略,与我过去的工作流程相比,我可以在更短的时间内达到同样的效果。这种能力让我有勇气探索更具挑战性的领域,创造创新产品

我希望我即将分享的策略也能帮助你在数据科学的道路上成为一名更高效的程序员。

照片由杰佛森·桑多斯Unsplash 上拍摄

一次消除一个潜在错误

我过去做的事

当我的代码中出现错误时,如果代码很长,我可能会怀疑代码的不同部分可能是潜在的原因。代码的 10 个部分中可能只有 3 个部分导致了问题。但是因为我花了很多时间去修复每一个我怀疑的部分,所以我浪费了时间去修复不必要的部分。更糟糕的是,我还可能导致我的代码遇到更多的错误。

我的新方法

一次排除一个可能原因。再次运行代码,看看是否有效。如果没有,请排除下一个可能的错误。我经常惊讶于发现和修复错误的速度有多快。

停止尝试,开始尝试

我过去做的事

当用 Django 实现一个应用程序时,由于 Django 对我来说是新的,我在 Google 上搜索如何开发一个特定的功能。我对许多可供选择的方案感到困惑。经过近一个小时的寻找,最终一无所获。

我的新方法

我没有试图去寻找做某事的完整教程,而是挑选了一些旨在做类似任务的教程,并试图理解它为什么有效。然后我会从教程中挑选一些可能对我的代码有用的元素,并对其进行测试。通过这样做,我可以比严格遵循教程更快地创建个性化功能。

使用 Git Commit 保存工作

我过去做的事

在我的代码中引入更多元素后,我最终遇到了一些错误。我想回到代码运行时的状态,并从那里重新开始我的工作。但是我不记得为了恢复到那个状态,删除哪个代码,保留哪个代码。那时我才意识到用 git commit 保存我工作的不同状态是多么重要。

我的新方法

我保持着为我的项目创建 Github repo 的新习惯。然后使用克隆它

git clone url/of/yourgithubproject

我也提醒自己在成功开发某个特定功能后,保存工作的某个状态。这些是我最喜欢用来完成这项任务的命令行:

git add .
git commit -m "Add id"

然后我在 VSCode 中使用 Git Lens 在我的工作的不同提交之间来回切换。右键单击要返回的提交,然后选择切换到提交。当前文件将切换回这种状态。

检查完此状态后,如果您想要重置到此状态,只需右键单击提交,然后选择重置以提交。现在你又回到以前的状态了!最棒的是,如果你不喜欢你正在切换到的版本,你可以通过切换回你当前的分支很容易地切换回你当前的版本。

查看我关于 VSCode 的文章,了解使用该工具可以获得的更多生产力技巧:

[## 如何在数据科学项目中利用 Visual Studio 代码

直到发现一种新的有效方法,我们才意识到我们是多么低效

towardsdatascience.com](/how-to-leverage-visual-studio-code-for-your-data-science-projects-7078b70a72f0)

别想太多,试出来就好

我过去做的事

实现一个特定的任务有不同的方法,所以我试着在选项之间权衡,以得出最佳的实现。在许多情况下,我可能有一个特定功能的解决方案,但认为一定有更好的方法。我最终花了几个小时寻找替代解决方案,并对自己无法完成任何事情感到沮丧。

我的新方法

通过简单地实现我想到的第一个选项,我很快解决了一个特定的问题。一旦使功能工作,我可以寻找一个更好的,如果有必要的。

例如,我希望每次用户进入数据库时,都会创建具有新 id 的新数据。但是新数据不断得到 0 的 id,导致主键重复的错误。研究了几下一无所获,我问自己如果只是把当前的 id 0 加到数据的长度上会怎么样?随着数据的增加,id 也会增加,我再也不会出现重复的错误。像这样一个简单的解决方案是有效的!

旨在制造错误

我过去做的事

在测试代码的每个部分之前,我尝试开发一个长代码。我非常害怕如果不完善我的代码,我会遇到错误。当运行我的代码时,我最终得到了一堆错误,我不知道错误来自哪里。它可能是我的未测试代码的任何部分。

我的新方法

只是运行一小部分我已经实现的代码。当我有错误时,我知道下一步我需要处理什么来使整个代码工作。

认为这很容易

我过去做的事

想想我需要实施的所有步骤。当我知道我需要学习很多新的东西来完成这项工作时,我感到气馁。

我的新方法

我将复杂的实现分解成更小的容易理解的任务。在试图寻找完成任务的方法之前,我告诉自己,也许我已经具备了实现这个的条件。我只需要找到一种方法将我的旧知识应用于这个新问题

这种想法防止我过度思考,并使我能够用我的知识创造。如果应用旧知识不起作用,至少我知道是什么使它不起作用。这将帮助我有效地过滤和缩小搜索范围。

结论

这些策略帮助我提高了我的编码技能。我希望你可以采用这些策略来改进你当前的编码实践。拥有一个好的编码方法会给你勇气和动力去尝试新的方法,用创新的方法解决挑战性的问题。

我喜欢写一些基本的数据科学概念,并尝试不同的算法和数据科学工具。你可以在 LinkedIn 和 Twitter 上与我联系。

如果你想查看我写的所有文章的代码,请点击这里。在 Medium 上关注我,了解我的最新数据科学文章,例如:

[## 当生活不给你喘息的机会,如何学习数据科学

我努力为数据科学贡献时间。但是发现新的策略使我能够提高我的学习速度和…

towardsdatascience.com](/how-to-learn-data-science-when-life-does-not-give-you-a-break-a26a6ea328fd) [## 如何通过将自己置于合适的环境中来加速您的数据科学职业生涯

我感到增长数据科学技能停滞不前,直到我有了一个飞跃

towardsdatascience.com](/how-to-accelerate-your-data-science-career-by-putting-yourself-in-the-right-environment-8316f42a476c) [## 如何创建可重用的命令行

你能把你的多个有用的命令行打包成一个文件以便快速执行吗?

towardsdatascience.com](/how-to-create-reusable-command-line-f9a2bb356bc9) [## 使用这两个工具在您的机器学习项目中实现可重复性

你能打包你的机器学习模型,并根据你的需要挑选一个最好的吗?

towardsdatascience.com](/achieve-reproducibility-in-machine-learning-with-these-two-tools-7bb20609cbb8) [## 如何在不确定时期完成你的兼职项目

有什么方法可以让你在隔离期间工作得更有效率?

medium.com](https://medium.com/skilluped/how-to-finish-your-side-projects-in-times-of-uncertainty-d7af45330ac0)

蒸馏还是不蒸馏:伯特、罗伯塔和 XLNet

原文:https://towardsdatascience.com/to-distil-or-not-to-distil-bert-roberta-and-xlnet-c777ad92f8?source=collection_archive---------11-----------------------

变形金刚是自然语言处理中无可争议的王者。但是周围有这么多不同的模型,很难只选择一个。希望这能有所帮助!

照片由维多利亚诺·伊斯基耶多Unsplash 拍摄

这已经有点老生常谈了,但是 Transformer 模型已经改变了自然语言处理。BERT(和他的朋友们)在几乎所有常见的 NLP 任务中都扫除了之前设定的基准。这种成功,以及随之而来的流行,已经见证了基于 BERT 架构和训练技术的一系列新模型(前面提到的朋友)的开发。事实上,我们有幸拥有如此多的新模型,以至于对于哪个模型应该用于哪个任务有些困惑。这个问题我已经被问过很多次了,但在大多数情况下,答案是明确的“视情况而定”。

考虑到这一点,我不会尝试选择最佳模型,而是将几种最常见的模型进行比较,特别是在最终精度和训练时间方面。因此,我将使用相同的超参数来训练所有模型,这意味着这不一定是每个(或任何)模型的最佳情况。然而,我希望这个比较能让你对每个型号在相同情况下的表现有一个的感受

设置

环境

这个实验是使用简单的变形金刚库进行的,这个库的目的是使变形金刚模型简单易用。这个库建立在流行的拥抱脸变形金刚库之上。

如果你希望跟随实验,你可以在几个简单的步骤中准备好环境;

  1. 这里安装 Anaconda 或 Miniconda 包管理器
  2. 创建新的虚拟环境并安装软件包。
    conda create -n transformers python
    conda activate transformers
    如果使用 Cuda:
    conda install pytorch cudatoolkit=10.1 -c pytorch
    其他:
    conda install pytorch cpuonly -c pytorch
  3. 如果您使用 fp16 培训,请安装 Apex。请按照这里的指示。(从 pip 安装 Apex 给一些人带来了问题。)
  4. 安装简单变压器。
    pip install simpletransformers

请注意,我将同时使用 CUDA 和 FP16 培训(使用 Apex)。

数据

AG News 数据集用于训练和评估模型。准备好数据集;

  1. 从 Fast.ai 下载数据集。
  2. 提取train.csvtest.csv并将它们放在目录data/中。

使用的硬件

任何机器学习模型的训练时间将在很大程度上取决于所使用的硬件,因此您的里程数可能会有所不同!我附上了我用来对比的硬件。

在上面列出的两个 GPU 中,所有实验都只在 NVIDIA Titan RTX GPU 上运行。此外,这个 GPU 在实验期间执行的唯一任务是实验本身(包括操作系统 GUI 在内的一切都由 RTX 2080 处理),以确保所有模型在任何时候都可以访问相同的硬件资源。

模特们

我们将试用下面给出的模型。

  • Bert-base-cased
    12 层,768 隐,12 头,110M 参数。
    接受过小写英文文本的训练。
  • RoBERTa-base
    12 层,768-隐藏,12 头,125M 参数
    RoBERTa 使用 BERT-base 架构
  • distil bert-base-uncased
    6 层,768-隐藏,12 头,66M 参数
    从 BERT 模型中提取的 distilbert 模型 bert-base-uncased 检查点
  • xlnet-base-cased 12 层,768 隐,12 头,110M 参数。
    XLNet 英文型号
  • distilloberta-base 6 层,768 隐藏,12 头,82M 参数
    distilloberta 模型是从 roberta 模型中提炼出来的 roberta-base 检查点。
  • Bert-base-multilingual-cased 12 层,768-hidden,12 头,110M 参数。
    使用最大的维基百科对前 104 种语言的大小写文本进行培训
  • distilbert-base-Multilingual-cased 6 层,768 隐藏,12 头,134M 参数
    多语言 distil bert 模型是从多语言 BERT 模型 BERT-base-Multilingual-cased check point 中提炼出来的。

超参数

成功训练一个好模型的一个重要部分是获得正确的超参数。根据我的经验,只要超参数值合理,大多数预训练的变压器模型都会收敛并给出良好的结果。因此,以下给出的值可被视为所有型号的合理默认值,而非针对任何特定型号的优化值。

对所选值的快速解释;

最大序列长度

变压器模型被限制为每个输入示例最多有个标记。令牌是模型词汇表中的一个“单词”(不一定是正确的英语单词)。任何输入文本都会被拆分,直到整个输入都由模型词汇表中的标记表示。如果结果表示包含的令牌数超过了允许的最大数量,它将被截断到最大长度。如果更短,它将被填充到最大长度。

由于 AG News 数据集中除了少数例子之外,其他例子的长度都小于 256 个标记,所以我决定使用这个值。请注意,增加最大长度会增加资源消耗。

训练时期的最大数量

很明显,每个模型将被训练最多 5 个时期,其中一个时期是所有训练数据的一次通过。

训练批量

培训期间将并行处理的示例数量。较大的批处理大小往往会减少训练时间(直到某个特定点,直到 GPU 的计算核心被完全利用),但会消耗更多的 GPU 内存。一般来说,使用 GPU 能够处理的最大批量是安全的。

学习率

控制在训练期间更新模型权重时的步长。

早期停止耐心

早期停止是一种用于防止机器学习模型过度适应训练数据的技术。一般的想法是,一旦模型停止提高其在验证/测试数据上的性能,就终止训练。耐心是在终止之前等待多少步。耐心为 3,如果连续 3 次评估损失没有改善,我们将终止培训。

人工种子

我们正在设置手动种子值4,以确保结果可以重现。

代码

该脚本可用于在农业新闻数据集上训练每个模型。这还会将训练进度发送到 Weights & Biases 以便于可视化。您可以通过移除train_args中的线路wandb_projectwandb_kwargs来禁用此功能。然后可以从文件x-y-training_progress_scores.csv中获得训练进度,其中 x 和 y 分别是model_typemodel_name。Tensorboard 也支持可视化(运行保存到runs/)。

该脚本需要两个参数,model_typemodel_name。这里,model_type是 Transformer 架构,model_name是该架构的特定预训练模型。下面的 bash 脚本将为这个实验中使用的每个模型运行训练。

方法

我们将在 AG News 数据集上训练每个模型,并比较它们的性能。

之前指定的超参数将用于每个模型。重要的是,我们将使用早期停止来确保模型不会过度适应训练数据,这使我们能够进一步了解每个模型收敛的速度。

用于评估的指标是马修斯相关系数 (MCC)。将每隔 1000 个训练步骤并在每个训练时期结束时计算评估数据集上的模型的 MCC 分数。

结果

给聪明人一个忠告:结果可能因所用的数据集和所选的超参数而异。这不是也不打算作为模型的决定性基准。

现在,我已经(希望)给出了足够的警告来保护自己免受热心学者的亵渎指控,让我们开始吧!

完成时间

首先,看一下每个模型的运行时间。请注意,这同时考虑了培训时间和培训期间执行评估所花费的时间。

此外,由于提前停止,更快达到峰值性能的模型将具有更短的运行时间。

绘制上述值:

运行时与模型

为了看到整个画面,重要的是要考虑到提前停止的影响。

关键要点:

  • 对于给定的模型类型(提取模型、基本 BERT/RoBERTa 模型和 XLNet ),执行给定数量的训练步骤所花费的时间是相同的。这一点从每条线的梯度就可以看出来。
  • 推理时间(在这种情况下为评估)遵循类似的模式,对于给定的模型类型,时间是相等的。从线的平坦(水平)部分可以观察到单次通过评估数据集所花费的时间。平坦部分越长,评估时间越长。

收敛步骤的数量也呈现出同样的趋势。

  • 基本模型(bert-base-cased、bert-base-multilingual-cased、roberta-base)收敛最快(平均 8 500 步)。
  • 接下来是经过提炼的模型,平均 10 333 步。
  • XLNet 收敛于 11 000 步,与蒸馏模型相当。

绘制总步骤数:

最终性能

所有这些模型在 AG News 数据集上都表现得非常好。

差一点就打电话了。

如前所述,所有模型在测试数据上都表现出良好的性能,这证明了 Transformer 模型在 NLP 任务中的能力。

这些可视化(以及更多)可以在这里找到。

结论

虽然不同的 Transformer 模型在性能和训练时间方面存在明显的差异,但是最佳的选择通常取决于特定的数据集、任务和需求。

也就是说,我们可以得出一些通用的经验法则(拇指?).

  • 与 BERT 和其他类似 BERT 的体系结构相比,XLNet 通常需要更多的资源,并且需要更长的时间来正确训练。
  • XLNet 在推理方面也比较慢。
  • 然而,当数据与预训练数据明显不同时,XLNet 表现得更好。
  • 经过预先训练的变形金刚的精华版本通常非常接近原始模型的性能。在这种情况下,它们超过了原始模型,但这很可能是因为所选择的超参数值。
  • 经过提炼的模型训练速度更快,推理速度也更快。
  • 然而,提取的模型可能难以收敛于某些数据集,尤其是在任务复杂的情况下。

基于这些观察(以及我的个人经验),我通常会建议从精选模型开始,如果性能不令人满意,就转到基本模型和/或 XLNet。

这些模型的“大”版本是另一种选择,但我发现它们通常更难正确训练,而且由于它们的尺寸,肯定需要更长的时间来训练。

思想?经历?见解?如果你有,请分享!

对于每一个动作,并不总是有相反的相等的反应

原文:https://towardsdatascience.com/to-every-action-theres-not-always-an-opposed-equal-reaction-9d2553f71f3c?source=collection_archive---------4-----------------------

让我们停止编造,成为更好的科学家。

Héizel Vázquez 插图

如果你在生活中接触过任何基础或初级物理学,你会听到这样的话:

每一个作用力总会有一个相等的反作用力。

这是牛顿第三定律的摘录,它说:

每一个作用力总有一个相等的反作用力:或者说两个物体之间的相互作用力总是相等的,并且指向相反的方向。

这里有一幅来自 1729 年翻译的《自然哲学的数学原理》的图片:

https://archive.org/details/bub_gb_Tm0FAAAAQAAJ/page/n63

你们中的大多数人可能都知道这一点,而且,我很肯定你已经听说过人们把这一点应用到生活中的每一件事情上。我是说一切。

让我给你看一些例子:

瑜伽:

https://www.yoga-philosophy.com/eng/karmalaw.htm

这太尴尬了。

https://medium . com/@ patrickbshirley/how-newtons-third-law-can-help-you-have-better-relationships-and-a-happy-life-2c 4 e 0 ff 2b 83

哦,我的:

https://www . jackcanfield . com/blog/using-the-law-of-attraction/

在心理学中(有很多这样的例子):

https://www . tandfonline . com/doi/full/10.1080/08870446 . 2011 . 613995

我可以继续,但我想你明白我的意思了。我们人类是将事物外推到新领域的专家。有许多科学论证被人们日复一日地使用,却不知道它们的含义和范围。

让我说清楚一点。牛顿说的是物体的运动,物理物体,而不是生命或感觉。我劝你读一下牛顿的原理,这样你就知道我的意思了。这是非常重要的,你应该知道一个科学论证意味着什么,以及它在哪里适用。它不能在任何地方使用。在牛顿写下他定义了物质、动量、力等等之前,他陈述了公理并解释了整个物理学理论。这个论点只适用于粒子,运动和力。

但更重要的是,我们调查了第三定律可以被打破的地方,这让它变得有点模糊。看一看:

[## 牛顿第三定律被打破的统计力学

牛顿第三定律被违反的情况有很多种。通常,动作-反应…

journals.aps.org](https://journals.aps.org/prx/abstract/10.1103/PhysRevX.5.011035) [## 物理学家展示了打破局部因果关系的新方法

2017 年 4 月 21 日,Phys.org,Lisa Zyga(phys . org)-物理学家首次通过实验证明了…

phys.org](https://phys.org/news/2017-04-physicists-violate-local-causality.html) [## 通过作用-反作用对称破缺的光学径向驱动加速

一个动作产生一个大小相等方向相反的反作用。然而,如果有可能两个身体中的一个拥有…

www.nature.com](https://www.nature.com/articles/nphys2777)

所以请不要再把第三定律的陈述当作“谋生的法则”

与数据科学的联系

Héizel Vázquez 插图

如果你在这里,你可能对数据科学感兴趣。链接是这样的:

不要用简单的论点在任何事情上寻找因果关系。

我们必须停止制造“简单”的模型,用“年龄”或“性别”这样的变量来解释复杂的事情。没那么容易。不要误解我,这只是一个开始,但如果我们想解决问题,我们需要深入挖掘。我们需要收集尽可能多的数据,并尽可能多地转换我们的数据,以找到尽可能有用的信息。

永远记住相关性并不意味着因果关系,对行动并不总是有简单的反应,并不是所有事情都是这样。

我们是科学家,如果你仍然不相信,请阅读这个:

[## 关于数据和科学

第一部分:将科学引入讨论的重要性。

towardsdatascience.com](/https-towardsdatascience-com-on-data-and-science-e96849b5f363)

每一个问题都不能用一个线性或逻辑回归或有 20 个特征的神经网络来解决。如果你采用这种方法,你就是“数据技术员”,而不是数据科学家。如果我们想改变世界,我们必须超越直觉和常识,这也适用于数据科学。

等待更多关于这个主题的信息,并请写下你的想法。

为了得到一份数据科学方面的工作,我用 Python 构建了一个自定义的职位发布过滤器

原文:https://towardsdatascience.com/to-get-a-job-in-data-science-i-built-a-self-customized-job-posting-filter-with-python-15406ea428e7?source=collection_archive---------70-----------------------

找工作从来都不是一件小事。从来没有。

即使有像 Indeed 和 LinkedIn 这样的在线招聘平台的帮助,搜索的过程仍然需要大量的人工努力。不匹配的赞助帖子不断出现让你烦恼,当你尝试不同的搜索词时,同样的工作重复出现,只是进一步增加工作量。

此外,数据科学的范围如此之广,以至于它给搜索的难度增加了另一个乘数。用一个头衔“数据科学家”,你可以得到实际上截然不同的描述。

Unsplash 上由 Hitesh Choudhary 拍摄的照片

但是你想过让梦想的工作找到你吗?在经历了没完没了的搜索之后,我决定用 Python 开发一个工具来帮助有效地管理招聘信息,并优先考虑那些最匹配我的。

我们开始吧!

数据收集

第一件事是收集足够的与数据相关的招聘信息。在这里,我选择了 indeed.com,并使用了从“数据科学家”、“机器学习”到“数据分析师”和“数据可视化”的关键词。

为了指定我的偏好,我使用过滤器来限制工作地点和经验水平。下面是一个结果页面的 URL 的截图。

有了它,我们就可以构建代码来收集职位发布。要继续,请确保您已经下载了 SeleniumBeautifulSoupChromeDriver 并在您的机器中进行了配置。(请将文件“ chromedriver ”放在放 Jupyter 笔记本的同一个文件夹下。)

首先,我创建了一个工具来生成 URL 链接,这样当我想改变搜索设置时,就不需要打开一个新的标签页来访问了。

输入你的偏好和搜索词,你会得到用于网络搜索的链接:

我使用 Selenium 来处理 web 抓取任务,因为它执行得很好,尤其是当您必须与网页交互来获取信息时。

例如,每页上有 10 多张招聘信息卡,您需要单击每张卡片来导航到相应的职位描述。这种情况下,。点击()可以为我们调出内容。另外,在第二个结果页面上会出现一个弹出窗口,所以我添加了一行按 Esc(escape)键来关闭窗口。

我写了以下代码来检索利益信息:职位名称地点公司职位描述发布日期,如果是急招。我还在网上搜索工作 id,生成新的网址,引导我回到某些发布信息的网页。

数据处理

我针对不同的搜索词运行了上述代码,以收集一个职位发布池。然后我合并数据集并删除重复的。我从最初的 900 多条帖子中得到了总共 650 多条独特的评论。(无法想象我是怎么翻遍这么多职位描述的!)

数据集一览:

之后,我对日期和工作描述做了一些文字处理:

定制作业选择器

主菜来了:构建一个定制的工作选择器。我的方法如下:

  1. 根据我的技能组合创建有意义的指标。
  2. 通过给每个指标一个权重来量化,并计算总分。

我做的第一件事是制作一个包含我所有技能的表格。我想出了几个类别,并给它们添加了一些关键词(当然,根据你想找什么样的工作,你也可以有自己的版本)。该表将用于从工作描述中提取短语。

关键词表的外观:

我使用下面的代码创建单词列表进行匹配。

对于每个类别,我计算了我的列表中有多少关键词在每个职位描述中被提及。例如,在“机器学习”类别中,我列出了 8 个关键词。如果其中 3 个出现在某个工作描述中,那么标签“机器学习”的值将是 3。

在用技能组合标注了所有的招聘信息后,我创建了一些新的指标来做进一步的比较。这些指标是根据我的个人资料和工作偏好设置的。

位置

我住在旧金山,我更喜欢在湾区工作,以避免搬迁。所以我创建了一个名为 relocate 的标签,如果它的位置在湾区之外,就加上“1”。

发布日期

如果一份工作是新发布的(在过去 5 天内),它绝对值得申请,因为这意味着我的简历会有更高的曝光率。

程序设计语言

我还关心所需的编程语言。如果一个帖子没有指定 R、Python 或任何 DBMS 语言(如 SQL)中的任何语言,它可能不适合我,因为这份工作可能在数据科学领域太“商业”或太“核心”。

总发布分数

我构建了一个名为“ basic_analytics 的指标来标记最基本的技能,比如数据操作和数据可视化。

然后使用类似的方法,我为高级分析技能和专业技能创建了指标。

权衡不同的分析技能

量化一份工作与你匹配程度的一种方法是建立一个总体发布分数。一篇文章的总得分被定义为上述指标的加权和。同样,这是非常灵活的,重量可以根据您的需要进行调整。

我给予高级分析技能相对较高的权重,因为我更喜欢在机器学习算法和建模方面需要更多知识和实践的工作。

最后,我把帖子按总分排序。最终表格和显示分数分布的直方图:

下一步是什么?

有了这个方便的工具,我可以优先考虑得分较高的工作,并相应地准备我的简历。它更方便、省时,也让我的求职过程更容易管理。

您还可以利用这个脚本来定制您自己的作业选择器,并通过添加更多的特性使它达到更高的水平。(全码)

求职愉快!

查看我过去的博客:

[## 新冠肺炎期间基于新闻话题的推特情感分析

—网络公众如何回应疫情

towardsdatascience.com](/twitter-sentiment-analysis-based-on-news-topics-during-covid-19-c3d738005b55)

意味着还是不意味着(这是中心趋势问题)

原文:https://towardsdatascience.com/to-mean-or-not-to-mean-thats-the-central-tendency-question-2ba86b3126fb?source=collection_archive---------53-----------------------

照片由 Siora 摄影Unsplash 上拍摄

我一直是“数学小子”。作为一个年轻的女孩,我痴迷于乘法表,我喜欢学习函数和如何绘制它们。我总是特别迷恋概率和统计,甚至从年轻的时候。这始于简单概念的介绍,如平均值和中位数。

因为我很小就接触到这些术语,所以我总是把它们当作“婴儿用品”一笔勾销。我认为,随着我在数学和统计学方面的知识的深入,这些概念是不可能有用的。

剧透警告:哦,我错了。

所以我上了大学,学了更多的统计学和概率论,并很快意识到:a)如果使用正确,均值和中值可以讲述一个极其有力的故事;b)如果使用错误,或恶意使用,均值和中值可以讲述一个极其欺骗性的故事。

如果你还没有读过查尔斯·惠兰的《裸体统计数据》,我强烈推荐你去看看。他对均值为何会产生误导的解释改变了游戏规则。对于那些没有读过它的人,我会给你一个快速的纲要,有一个现代的转折。

误导手段的故事:3 个声音云说唱歌手和里尔·简自豪·韦特

假设有三个“崭露头角”的 Soundcloud 说唱歌手在一家咖啡店闲逛(因为这就是 Soundcloud 说唱歌手做的事情,咄)。为了更好地了解说唱歌手的知名度,我们可以确定每个说唱歌手在平台上有多少粉丝。然后,我们可以取这些值的平均值来了解说唱歌手之间的平均追随者数量。假设平均值为 2496。

突然,才华横溢、家喻户晓的说唱歌手利尔·简自豪·韦特冲进咖啡店,要了一杯燕麦牛奶拿铁(完全披露:不确定他点了什么咖啡……但燕麦牛奶拿铁很好喝)。总之,现在咖啡店里有 4 个说唱歌手。由于我们的人口已经改变,我们必须重新计算他们的追随者计数的平均值。

在短短几秒钟内,咖啡店内的平均 Soundcloud 粉丝数从 2071 增加到 481997!哇,那三个崭露头角的说唱歌手是不是突然爆红了?不要!里尔·简自豪·韦特刚刚出现,他的 240 万粉丝就把平均值从之前的值拉高了。

平均值对异常值很敏感…那么我们应该使用它吗?

显然,平均值会受到数据集中任何异常值的严重影响。当我大学毕业的时候,我发誓这已经被灌输到我的脑海里了。以至于,事实上,直到最近,我还真的认为这个方法不可信。我相信中位数是最好的汇总统计。

剧透警告#2:哦,我错了。

我再次感谢惠兰先生。他的书告诉我,均值不仅有用,而且在某些情况下,它们是更好地理解数据集的重要测量形式。

是的,均值容易受到异常值的影响。是的,中位数不容易受到离群值的影响。中位数赋予数据集中的每个观察值相等的权重,无论其大小如何。

然而,这实际上是中间派的最终垮台。播放戏剧性的音乐

“并非所有数据点都是平等的”

在我们的说唱歌手例子中,不可否认,中位数是更好的描述性统计。但这是因为我们想在调查他们的名气时平等地对待每个说唱歌手。

当处理并非所有数据点都是平等的数据集时,平均值会战胜中位数。Charles Wheelan 在他的书中用一个医学试验作为例子,很好地说明了这一点。

因为我的大脑喜欢看例子,所以我在每天阅读后花时间开发自己的场景,在这个场景中,平均值将击败中位数,成为最佳的描述性统计选择。

一个均值可能让你加薪(而中位数可能让你被解雇)的例子

假设你是一家电子商务公司的分析师。营销团队正在计划一项活动来接触您的现有客户,希望在这个低迷的季度增加收入。他们制作了一个精美的电子邮件模板,并把它发送给大约 50 万名忠实客户。

10 天过去了,每个人都迫不及待地想看到这个团队努力工作的结果。你开始提取数据,很自然地,你认为首先要用一些描述性的统计数据来总结数据。一种选择是找到收到活动电子邮件的每个客户花费的美元的主要趋势。

因为您听说平均值对异常值很敏感,所以您决定使用中位数作为您的中心趋势度量。你运行你的计算,你的结果是一个巨大的,巨大的,可怕的零。一无所获。什么?但是有成千上万的顾客使用了促销代码!!!你根本不可能将这些结果交付给营销团队(至少不会让一些人陷入困境)。

然后,你突然想到:均值呢?你重新计算,然后如释重负地松了一口气。收到活动电子邮件的每位客户平均花费 1.30 美元。这听起来好多了,尤其是因为每封邮件的成本大约是 0.008 美元。平均值更适合于在这个特定场景中获取这个特定指标。此外,您可以满怀信心地将这些成果交付给您的团队。

均值可能是更好选择的场景

正如我之前提到的,利用中位数来分析扭曲数据的想法已经深入我的大脑。但是,在阅读《赤裸裸的统计数据》之前,我从来不知道什么时候选择平均值作为集中趋势的衡量标准的经验法则。这里有两个总体特征,通常意味着均值可能是更好的选择:

  1. 我们不会因为失败而失去太多。
  2. 一小部分人(比如说,不到一半)取得了成功。事实上,我们甚至可能期待小的成功。

在我们的电子邮件示例中,两者都是 1。第二。都存在。我们不会因为失败而失去太多。如果他们忽略邮件,顾客就不会有危险。发送一封电子邮件的费用非常低。此外,通常只有一小部分人会对电子邮件营销活动做出回应。有人说“良好回复率”下降了 5–10%左右。

当我们试图使用这些类型场景的中位数时,我们可能会错过隐藏的见解。但是当我们使用均值时,我们可能会发现一些关于我们成功的秘密。

原载于 2020 年 9 月 6 日https://data dreamer . io

提供还是不提供?星巴克的机器学习项目

原文:https://towardsdatascience.com/to-offer-or-not-to-offer-a-starbucks-machine-learning-project-c21bf9c398bc?source=collection_archive---------39-----------------------

寻找那些免费的咖啡奖励。 来源 Pikist

我将第一个承认,我是一个狂热的咖啡爱好者。但是,我并不局限于某一家连锁店。在我的手机上,我下载了咖啡豆、星巴克和 Dunkin 的应用程序。大多数时候,距离会决定我去哪家店。然而,随着我在每个连锁店获得越来越多的忠诚度积分,我会因为收到特别优惠通知而去某个特定的商店。

星巴克怎么知道什么时候给我发那些奖励?他们如何在买一送一、下一次订单减 2 美元或简单的奖励星级之间做出选择?

这是我在我的 Udacity 数据科学纳米学位的顶点项目中试图回答的问题。

如果你有兴趣跟随代码, 查看 Github 上的项目。

TL,DR:

  • 在星巴克,女性平均比男性花更多的钱。
  • 没有完全填写会员资料的用户通常花费较少,这表明他们也不会从“精酿饮料”相关优惠中受益(例如,尝试我们的新 venti magic unicorn frappuccino,添加额外的糖屑和仙粉,并获得额外的 20 颗星!).
  • 提供折扣的优惠比买一送一的优惠更有可能成交。
  • 为了获得最大的完成度,在你的分销计划中加入社交媒体。最成功和第二次最不成功的报价几乎在所有方面都是一样的,除了最成功的报价是通过社交媒体传播的,而另一个不是。
  • 通过机器学习,我验证了社交媒体是一个影响要约是否会被完成的因素。
  • 其他重要因素包括优惠持续时间、用户年龄和奖励金额。不重要的因素包括电子邮件、用户成为会员的时间以及他们的性别。

数据

为了完成该项目,星巴克向 Udacity 提供了 3 个关键数据集:

  • portfolio:关于样本数据中提供的所有 10 个报价的数据
  • profile:关于所有进行交易或提供通知的用户的数据
  • 文字记录:关于所有已发生交易的数据,无论是购买还是与报价的交互

深入到这里的细微差别,关于每个数据集还有一些事情需要注意。投资组合指定了特定报价的发布渠道,包括电子邮件、手机、社交网络或网络。还有一个难度分数,完成报价必须花费的金额。还指定了奖励金额、到期前的持续时间和优惠类型。

个人资料包括用户的性别、收入、年龄和成为会员的日期。然而,一些人口统计数据丢失了。

抄本包括记录的事件和交易金额,或者要约是否被接收、查看或完成。

问题陈述

使用这些数据的目的是识别购买趋势和报价完成情况。理想情况下,通过这个项目,我将能够预测用户是否会因为收到报价而进入商店购买。

因此,需要记住一些注意事项。如果有人要进来买 10 美元的咖啡,不管有没有报价,我们都不一定要在 10 美元的购买报价上降低 2 美元。

此外,用户可能会在没有阅读甚至不知道要约存在的情况下完成要约。同样,在这些案例中,该提议没有达到其改变行为的目标。

因此,在解析数据时,我确保只有当用户查看了要约并在要约到期前完成了要约,才认为要约已完成。

数据清理

幸运的是,这些数据集没有太多清理工作要做。但是,为了便于分析,做了一些更改。

首先,offer id 是一个看似随机的长字符串。这些被简单的两个字符的代码所取代。第一个字母表示报价是信息性的、折扣的还是买一送一的(I、D 和 B)以及一个序列号。

接下来,使用虚拟变量重新映射了性别和 offer 分布方法等列。

还检查了数据的完整性和正确性。人们发现大量的年龄被输入为 118,这是一个明显的错误。这些值被替换为 NaN。

数据探索

在我们进入机器学习之前(我知道这是你们所有人在这里的目的),我从初步的数据探索开始。这有助于识别机器学习问题,验证从机器学习中得出的结论,并找到仅通过机器学习无法识别的数据集的基本统计描述符。

首先,我研究了每笔交易花费的金额。

正如经常光顾咖啡店的人所料,绝大多数交易都低于 8 美元。有趣的是,在 1-2 美元附近有一个大的峰值,也许这些人只是进去并得到一杯派克酒,还有房间。

接下来,我对用户人口统计数据感兴趣。我只考虑年龄和收入。

这看起来像是一个非常标准的用户群,尽管我原本预计年龄分布会有一个较低的峰值。

还有,对星巴克的 100 岁格莱美大声喊出来。

现在,任何去过星巴克的人都知道拿着星冰乐的少女的迷因。所以,我还想看看按性别划分的平均支出。有一些关于性别的“其他”数据,要么表示没有为该用户收集性别数据,要么表示用户识别为二进制之外的性别。区分这两者是很好的,但是,唉。

有意思。女性通常比男性多花 5 美元左右。由于每杯精酿饮料大约 5 美元,这表明女性比男性更经常购买多种饮料(可能是为家人或朋友购买)。

此图也让我们对“其他”类别有了一些了解。可能这些用户并没有完全注册成为会员,他们只是来买一杯黑咖啡,而不是对特别优惠的手工饮品特别感兴趣。

当然,这种独特的见解需要更多的数据来验证。

接下来,我对哪些报价最有可能完成感兴趣。提醒一下,这里的代码指的是优惠是直接折扣(即 10 美元订单减 2 美元)还是买一送一。也有信息提供,但这些只是通知用户新产品,例如,并没有行动。每份报价也以 4 种方式中的任何一种发布:电子邮件、手机、社交媒体或网络。

首先,重要的是要注意到每个提议被分发的次数大致相同,所以不存在偏见。最后两行在很大程度上也可以忽略,因为它们是信息提供,而不是折扣或 BOGOs。

从这一分析中得出的一些关键结论是,完成折扣的可能性比 BOGO 提供的更大。此外,所有表现最佳的产品都以各种可能的方式发布,尤其是社交媒体。当只有社交媒体被删除时,这些优惠就排在了最后,尽管它们也是折扣。

事实上,让我们比较一下 D3 和 D4。D3 是表现最好的,但除了一个关键因素:社交媒体,它几乎与 D4 相同。D3 也持续了几天时间,但考虑到表现最差的报价都不是在社交媒体上,这就很能说明问题。

机器学习

现在有趣的是,建立一个机器学习模型来预测哪些因素会增加要约完成率。

响应变量是报价是否成功,编码为 0 表示不成功,1 表示成功。如果要约在到期前被用户阅读并履行,则该要约被定义为成功。

这些是包含在机器学习算法中的因素,以及考虑的前 4 个交易的值。请注意,start_year 和 start_month 是指用户成为会员的时间。

完成了 25%的训练分割以建立机器学习管道。

有了这个,我就可以实现三种不同的方法了:

  • 决策树分类器
  • 逻辑回归
  • 随机森林分类器

以下是每个型号的相关分数:

随机森林分类器

使用每个模型,我还能够确定哪些解释性因素对要约是否会被完成影响最大:

每个模型给出的结果略有不同,但总体来看,重要的因素包括报价持续时间、用户年龄和奖励金额。不重要的因素包括电子邮件、用户成为会员的时间以及他们的性别。随机森林模型还将社交媒体分布确定为一个重要因素,这一点我之前已经能够直观地识别出来。

结论

通过这个项目,我能够建立一个机器学习模型,并探索数据,以找到一些使要约更有可能成功的关键特征。

对数据集的一些改进将有助于完善我能够做出的预测。例如,如果有位置数据或更长的用户历史数据就好了。具体来说,看看总是点同样几样东西的用户是否会因为优惠而购买新的菜单项目会很有趣。这是该数据集的一个显著缺点,因为它没有具体说明具体购买了什么。

很有兴趣听听大家的想法!你有没有在你的星巴克应用程序(或其他商店的类似程序)上看到过似乎是为你量身定制的优惠?随着越来越多的数据可供用户使用,个性化服务似乎只会越来越频繁。

如何像数据科学家一样思考?

原文:https://towardsdatascience.com/to-pose-a-learning-problem-6e069d6c17d?source=collection_archive---------47-----------------------

你被困在一个问题上了吗?

来自 Pexels 的 Andrea Piacquadio 的照片

我们都是问题解决者。我们开始减少做任何事情的努力。我们厌倦了一次又一次地做同样的重复性工作。所以,我们想为什么不让机器来做呢。你瞧,今天你有聊天机器人,自动驾驶汽车,还有很多。

但是,所有这些努力都始于一件事。问题。

你想解决什么?

这是起点。就像在的真实对话中,第一印象为整个对话的成功开创了先例,当提出一个机器学习问题时,人们必须让对问题产生良好的印象

问题的要素

任何深度学习问题都有三件事需要明确定义,才能在其中取得成功。

工作

简单吧?没有。

假设,我们从一个计算机视觉问题开始。我想创建一个解决计算机视觉问题的 DL 算法。但是,如果你只是打开那扇门,就会有近千个子问题。想要证据,这就是:

来源:www.paperswithcode.com·SOTA(作者截图)

所有这些子问题今天都存在,因为人们选择解决一个特定的问题,而不是一次做所有的事情(psst,这是一个坏主意)。

为此,使用自上而下的方法

我们再次重复这个任务发现。假设您必须创建一个系统来自动将图书放在图书馆的书架上。

问题 1 :任务是什么?

:在图书馆自动上架图书。

问题 2 :这个任务包括什么?

回答:先看书名然后,归类到一个主题。

问题 3 :我如何利用深度学习解决这个问题?

回答:我会用文字识别(计算机视觉)和主题分类(自然语言处理)。

Tada!你终于完成了你的任务。

经验

“有些东西是教不来的;他们必须有经验。只有经历过自己的旅程,你才能学到人生中最有价值的课程。”
罗伊·t·贝内特

对于机器来说,这并没有什么不同。为了解决问题,他们需要经历问题。

这里的问题是:

我的 DL 系统需要什么样的体验才能实现最佳性能?

继续上面的例子,我们现在有两个任务:文本识别和主题分类。

问题:我的系统需要什么样的经验才能轻松识别书本上的文本?

:从很多书的封面上看。

通常,对于 DL 系统,我们并不总是得到我们想要的。所以,我们问另一个问题。

问题:如果我无法获得上述数据,什么样的体验可以帮助我的系统获得最佳性能?

回答:如果我找不到这个特定的数据,那么我应该找到包含不同背景颜色、角度和光线条件下的文本的数据。

关键是要找到一些涵盖你的具体问题的一般数据。在这里,你采取的是通才方法

然后,到了你继续搜索数据的时候了。如果你幸运的话,你会找到它。如果不是,那么,你需要问自己这个问题:

问题:在找不到任何数据的情况下,什么样的体验可以帮助我的系统?

回答:如果我得不到,那我就得自己做。我需要从各种角度生成印有文字的图像,背景必须从简单单调的颜色到生动的背景。

这是你去没人去过的地方时最常求助的方法。旅程还没有结束。

最后一个问题:

问题:我可以使用任何现有数据为自己的系统创造体验吗?

答案:答案基本上是肯定的,这将使你的生活变得更容易。获得一些真实的数据,并在此基础上构建你的数据,这是你能为自己做的最大的一件好事。

你必须为你的系统设计最佳的工作体验。

为你的系统选择合适的体验将决定它的成败。

工作指标

每个人都是天才。但是如果你根据一条鱼爬树的能力来判断它,它会一辈子相信自己是愚蠢的。
——阿尔伯特·爱因斯坦

如果您最终错误地度量了系统的性能,您最终会认为这是一个失败而不是成功。

继续上面的例子,我们如何衡量我们的系统是否在最佳状态下运行。

你问自己的问题是:

什么指标可以帮助我正确判断系统的性能?

在我们的例子中,答案是正确上架的书的数量。

但是,这能让我们全面了解系统的性能吗?

由于你有两个任务,它们的性能决定了整个系统的性能。所以,你也要为他们决定绩效指标。

所有现实生活中的任务都是多方面的。

对于文本识别,您可以选择字符级的识别精度。

对于主题分类,您可以选择主题被正确分配的次数。

所有现实生活中的任务都是多方面的,因此,需要在多个维度上进行评估。在我们的例子中,有子系统的性能和系统的整体性能。

摘要

在这篇文章中,我们了解了如何深入研究机器学习问题以及如何思考它。我们知道将深度学习问题分解成这些准系统(任务、经验和绩效衡量)是多么重要。然后,我们明白了如何探索这些准系统,以获得可能令我们惊讶的解决方案。正确的思考导致正确的解决方案。

出版,还是不出版

原文:https://towardsdatascience.com/to-publish-or-not-to-publish-f61e06d25bc3?source=collection_archive---------26-----------------------

医疗公司是否应该定期在科学出版物和会议上发表和分享他们的研究成果

TL;速度三角形定位法(dead reckoning)

是的。你应该出版。

米尔科维Unsplash 拍摄的照片

在这篇文章中,我将讨论医疗创业公司的 ML 团队是否应该定期发表论文。我将尝试展示其优点和缺点,以帮助确定出版物是否应该优先于其他项目。

首先,免责声明。一切都是从我的角度写的,这是基于我的个人经历,在医疗保健初创公司的 ML 研究团队中工作。我认为它适用于各种领域,但是谁知道呢。

一个名为“秘密研究:缺乏来自医疗保健独角兽的同行评审证据”的有趣观点最近发表在欧洲临床研究杂志上。作者讨论了 隐身研究 的问题,并声明:

“医疗保健初创企业是生物医学创新的主要力量,有能力做出革命性的发现。”

但表现出的担忧是:

“大多数价值最高的医疗保健初创企业在公开的科学文献中的参与度和影响力都很有限,或者根本不存在。”

这是一本非常有趣的读物,我完全同意。在当今的研究环境中,当最先进的成果频繁实现,并且代码在开源存储库中共享时,医疗公司不能落后。他们必须考虑并找到一种方式在科学界分享他们的知识和经验。我知道;总有泄露自己秘密的恐惧,尤其是在公司初期。尽管如此,如果你发现你公司的存在很大程度上依赖于一两个“秘方”算法,而这些算法在某种程度上是不能共享的,那么你的公司就有麻烦了。有很多聪明的人在努力推动这个领域向前发展,有人能够或者将会解决这个问题。你只能从出版中长期获利,在几个考虑下你应该让它成为一种习惯和常规,我在这里会描述。

让我们非常宽泛地将发布可能性分为四个选项:

  1. 顶级期刊[ 《自然》《科学》《柳叶刀》,…]
  2. 临床期刊或临床会议[ 期刊排名
  3. 面向技术的医学会议[ MICCAIMIDLMLHC ,…]
  4. 顶级技术会议[ CVPRECCVICLRNeurIPS ,…]

所有这些选择都有利于公司、团队和文化,但影响程度不同。

让我们逐一探讨这些可能性,并尝试理解在这些地方从事出版工作的利弊。

顶级日记帐

医药公司的圣杯出版物。这是大多数公司和研究人员想要实现的目标。一份你可以自豪地带回家让父母骄傲的论文。

这种出版物验证了你的研究,并有助于你的上市[人工智能]战略。这表明你的工作已经在公司内部圈子之外得到了审查和验证,并得到了认可。这一事实将有助于接触新客户和投资者。

在处理竞争公司和改善公司护城河方面,它也是有益的——提高进入该领域的门槛。

在顶级期刊上发表文章也将公司置于记者的聚光灯下,并吸引了优秀的公共关系。公关机器会替你完成工作,在各大杂志、社交网络上描述论文的主要关键点,采访作者等。最终,这为公司制造了宣传,并吸引了新的用户群。

现在糟糕的部分来了。

这种出版需要大量的努力和时间。它通常发生在一个大型项目的漫长旅程结束后,该项目取得了一些突破或创新的成果,现在不是释放一些蒸汽,放松并转向下一个项目,这将阻止许多团队成员继续进行其他任务。写论文会阻碍公司的一个主要垂直行业向前发展。这一事实并不适用于所有的公司,它高度依赖于公司所处的阶段。在开始这次冒险之前,你应该想清楚。

它还假设你的团队拥有技能,能够处理相关的任务:写一篇科学论文,复制结果,设计图表,审查材料,等等。

此外,你应该考虑这将如何影响团队士气,无论是作为一个团队还是个人。第一,担心被拒绝,这打击了士气,动摇了已经投入巨大努力的信心。第二,审查过程可能会很长,可能需要几个星期才能得到裁判的审查结果。与此同时,团队成员已经忙于其他任务,现在需要联系切换回旧的实验,以便添加丢失的统计值。当然,这将在一些古老的提交中完成,现在不起作用了[顺便说一句,您应该使用 docker 容器并在接近提交时包装您的系统,以便为这种情况做好准备]。

你应该注意的最后一件事是作者在论文中出现的顺序,这可能会成为一个问题。如果涉及到自我,这可能会变成一个痛点——很难让每个人都开心,通常有人最终会不满意。提前想好这个。

临床杂志或临床会议

在这种类型的出版物中,我指的是医疗保健领域某个特定主题的知名期刊,或者发表会议记录或类似内容的高价值会议。

我认为最好的方法是与强有力的合作者一起进行,他们领导这项工作并提出研究问题。在这种情况下,团队支持并帮助推进合作。这样,重担就在外部团队和你的团队之间分配了。双方都喜欢分享和看到他们工作领域的另一个视角。此外,你所在领域的知名研究人员和意见领袖的出版物将有助于公司在行业和学术界的可信度和参与度。

您应该注意不要同时进行太多的协作,因为它们往往会与当前的工作流重叠,并降低团队的速度。协作者通常在不同的时间和不同的节奏下工作,如果管理不当,会导致团队受挫。很难指出同时合作的神奇数量,这也取决于团队的规模以及从长远来看谁处理这些项目。此外,很难拒绝一位重要专家的合作,即使你已经忙于其他人,但尽量限制自己的最佳想法,这将导致有意义的出版物。

这些合作中的一些需要团队成员的工作,但是把他们放在非前排座位上。对于某些合作来说,这是不可避免的,因为研究人员可能想要处理研究,并在需要时使用您的“服务”。然而,让团队成员从事这项工作并且只发送报告会非常令人沮丧。我建议团队成员全程参与研究。并让他们成为与合作者交谈的联系人,这将带来更多的个人关系。此外,信用和认可很重要。如果你的队友“在黑暗中”为别人工作,你最终会士气低落,感到沮丧。

面向技术的医学会议

这种类型的出版物是一个伟大的中间地带。它通常比其他替代方案需要更少的工作,并且适合团队已经在进行的许多项目。

向这些会议提交论文给团队带来了很多快乐,一旦被接受会增加团队士气。这将激励其他团队成员将他们的项目推向高质量,以便与这种类型的出版物相关。

这有助于向社区展示公司,也有助于为团队招募新人才,并吸引对出版物感兴趣的研究人员。

从更模糊的角度来看,它创造了一种卓越的感觉,这种感觉来自于团队所做的工作不仅与公司领域相关,而且与相邻领域的其他人相关。

我认为这种类型的出版对公司和团队都有好处。由于投资回报高,而且比其他选择需要的工作量少,我认为团队应该至少每年进行一次这样的发布。

顶级技术会议

如果顶级期刊是公司的圣杯,这些会议是每个 ML 研究者的愿望清单。我们都在列车对列车的基础上阅读和使用这些出版物。

并非偶然,在这些会议上提交和发表论文的都是来自学术界的研究人员、该领域的顶尖人才或大公司的团队。它可能需要探索与公司范围没有直接联系的问题,并且通常需要使用公共数据集。创业公司通常没有特权和能力为这类项目分配资源。

这些会议的优势之一,也是面向技术的医学会议的优势之一,是预先知道最后期限。截止日期是好的,尤其是对研究团队来说。截止日期公布在会议网站上,您可以调整团队项目,并为此类发布工作设定固定时间。

另一个优势是,与期刊相比,这些会议的回顾过程较短。这基本上是一个拒绝或接受的回应[有一个很短的时间来反驳和更新论文]。

这些会议中的出版物将该团队定位在“大联盟”中,并将该团队标榜为享有盛誉的团队。然而,这种类型的发布需要大量的计算能力,这需要很多钱,尤其是如果您使用云计算的话。它可能会堆积成千上万美元,并“吃掉”团队计算预算。此外,它需要大量时间和专注于研究过程中有时会被忽略的小细节,如专注于提高公开可用的已知数据集的 1-2%的准确性。

最后,我想强调三个要点。

(1)志存高远,做好充分准备,开始时将工作提交给一个比你认为自己价值更高的目标。

(2)我认为,通过对数据集和模型建立更深入的理解,你在撰写论文时总能学到一些新东西。写文章时会有一种奇妙的感觉,这种感觉会推动你的工作质量进一步提高,对你自己和公司都有好处。

(3)如果出版是你的团队的一个目标,你可以做许多提示和不同的行动。我可能会写另一篇文章,但最重要的提示是让合适的专家在你身边。你需要一群支持你的顾问来帮助你将这艘船推向正确的港口。不要小看这个。过去发表过无数次的人的一句正确的话是非常重要的。我很荣幸和几位超级聪明的顾问一起工作,并在今天的每次讨论中不断向他们学习。

那么你下一步打算在哪里出版呢?在下面的回复中分享你的想法,或者给我发私信。

超越平凡——数据科学阅读清单

原文:https://towardsdatascience.com/to-rising-above-the-ordinary-a-data-science-reading-list-4548c363fb9?source=collection_archive---------22-----------------------

每天一小时的阅读冲刺,以保持你的知识面广泛和最新

作为发展最快的行业之一,作为一名没有研究团队的数据科学家可能会令人无能为力。去年年底,我意识到我经常错过行业的新发展,不知不觉地重新发明轮子,在与专家的对话中失败。作为一名数据科学顾问,我的压力水平爆炸了,因为我总是觉得自己没有准备好去见客户。

金伯利农民在 Unsplash 上拍摄的照片。作者通过 AdobeSpark 添加的引文。

因此,作为我 2020 年的目标,我决定让自己摆脱这种压力。

“T o 知道你不知道是最好的。当你不知道的时候,认为你知道是一种疾病。把这个病认作是病,就是解脱。”——老子

从这句话中,我得出了一个相当简单的策略:通过阅读更多的书籍,我应该更了解与人工智能相关的新闻。这反过来又增加了我参与不同的人工智能相关讨论的信心。

从一月份开始,我开始定期使用博客和播客来保持自己的相关性。每个工作日,在瑜伽和冥想之后,在我上午 10 点站立之前,我会花一个小时阅读,同时喝第一杯咖啡。

我的收件箱里没有强迫症,所以我减少了订阅量,以确保我能得到我需要的信息,而不会淹没在信息中。作为一家专注于 ML 部署的公司的首席数据科学顾问,我确保我的阅读列表可以在三个方面提升我:

  • 人工智能领导者(我的客户)会关心的事情:人工智能行业的状态,客户端行业的状态,Gartner 和麦肯锡发布的这类东西。
  • 让我工作更有效率的事情:新的图书馆,新的建筑,温习一些数学/编程技能。
  • 成为良好话题引子的东西:有趣的人工智能故事、初创企业新闻、客户的竞争对手在做什么。

我做的大部分阅读来自我订阅的邮件列表和播客。让别人获得你的阅读清单的权衡是花在寻找阅读内容上的时间和 100%符合你兴趣的高质量阅读材料。

这是我想出来的订阅,但它们会根据我的需求不断变化。随着世界的关闭和在家工作成为一种规范,我希望这个列表可以帮助你开始你的阅读计划。在没有经理不断潜伏在你身后盯着你屏幕的时候,抓住机会。

📩邮件列表:

我正在根据目标受众、阅读时间和我喜欢它的地方来组织列表。当然,目标读者仅仅是一个推荐,阅读时间很大程度上取决于你点击了多少链接,以及你进入兔子洞有多远。我可以用我整个阅读时间来研究一篇文章。

总之。(宣称即将开始令人兴奋或危险的活动)看我的👇

1.deeplearning.ai 的批处理

[## The Batch:来自 deeplearning.ai 的新每周简讯!

欢迎来到 The Batch,这是 deeplearning.ai 的一份新的每周简讯!这一批提出了最重要的人工智能事件和…

www.deeplearning.ai](https://www.deeplearning.ai/thebatch/)

这是吴恩达的另一个创意,它让我想起有一个随时可用的研究小组。该小组每周提交 6 篇关于深度学习最新发展的精彩文章。

👥目标受众:学者、研究人员、深度学习爱好者。

阅读时间: ~30 分钟(每周)

⭐我喜欢它的地方:它组织得非常好。这些文章来自各种来源,对它是什么、它如何工作、它为什么重要、新闻背后有什么以及编辑们对它的看法进行了很好的总结。

2.哈佛数据科学评论

[## 哈佛数据科学评论

作为哈佛数据科学倡议的开放访问平台,哈佛数据科学评论(HDSR)的特点是…

hdsr.mitpress.mit.edu](https://hdsr.mitpress.mit.edu/)

我无法比网站上的开篇段落解释得更好,上面写着:

作为哈佛数据科学倡议的开放访问平台,哈佛数据科学评论 (HDSR)以基础思维、研究里程碑、教育创新和主要应用为特色。它旨在发布内容,帮助将数据科学定义和塑造为一个基于有原则和有目的的数据生产、处理、解析和分析的科学严谨且具有全球影响力的多学科领域。

👥目标受众:每个人都有一个专栏

⏱阅读时间: 60+分钟(每月)

⭐我喜欢它的地方:有一个不错的网站,里面的信息是按照它吸引的观众类型排序的。有一个愿景和辩论的全景视图,一个致力于数据科学教育的支柱和关于历史、行业领导者、理论等的各种专栏。

3.中型每日文摘

[## 中等——更明智地对待对你重要的事情。

Medium 不同于互联网上的任何其他平台。我们的唯一目的是帮助您找到令人信服的想法…

medium.com](https://medium.com/)

👥目标受众:有抱负的高级数据科学家和工程师

⏱阅读时间: ~20 分钟(每日)

⭐我喜欢它的地方:你可以很容易地定制你所阅读的内容,而且它的内容种类繁多。此外,许多流行的库和工具在 Medium 上也有自己的配置文件。我通过 Jupyter 博客获得关于 Jupyter 项目的更新,并且我第一次在 Medium 上发现了 Streamlit 。我也很喜欢阅读文章的评论,Medium 是我发现评论最多的一个,这个社区总体来说也不错。

因为我还订阅了与数据科学无关的出版物,所以通过阅读一些其他材料,它帮助我让我的大脑休息一下。不过,我确实发现推荐倾向于付费墙后面的文章。

4.奥莱利数据和人工智能简讯

[## 获取奥赖利数据简讯——奥赖利媒体

在 1,969 个评级中,平均每五颗星中有四颗保持消息灵通。从业内人士那里获得每周见解,此外…

www.oreilly.com](https://www.oreilly.com/data/newsletter.html)

O'Reilly newsletter 是一份很好的行业见解每周综述。从纯技术到如何领导数据科学团队和其他商业信息,主题范围广泛。

👥目标受众:技术领导者&行业专业人士

⏱阅读时间: ~20 分钟(每周)

⭐我喜欢它的什么:与我关注的其他邮件列表相比,奥赖利的时事通讯有更多的“x 状态”文章。这些文章都是经过精心研究的,有很酷的图表和有趣的统计数据可供引用。我还发现这份时事通讯包含了更多的数据工程和 ML 部署类型的文章。对了,Data 和 AI 是两个独立的时事通讯。

5.KDNuggets 新闻

[## 订阅 KDnuggets 新闻— KDnuggets

订阅 kdnugges 新闻邮件:Email: Name:(可选)kdnugges 是机器学习、数据…

www.kdnuggets.com](https://www.kdnuggets.com/news/subscribe.html)

该时事通讯分为特色文章、活动/网络研讨会、新闻、教程和观点文章。我发现对于刚刚开始职业生涯的数据科学家或希望进入数据科学的人来说,KDNuggets 是一个很好的起点。

👥目标受众:更多初级/中级数据科学家

⏱阅读时间: < 10 分钟(每日)

⭐我喜欢它的什么:偶尔,我不明白它是如何关联的,但我通过 KDNuggets 在我的收件箱中收到了 DataRobot、Gartner 和 Figure8 之类的报告。我喜欢这些类型的报告,因为它们的分析相当全面,并有良好的统计数据和可视化来支持他们的主张。

🎧播客:

我早上准备的时候或者晚上做晚饭的时候会听播客。我不擅长同时处理多项任务,所以我选择了那些有挑战性内容但又容易理解的播客。

1.线性离题

[## 线性离题

搜索我

lineardigressions.com](http://lineardigressions.com/)

凯蒂和本是线性题外话的主持人。该节目涵盖了一切:数据科学、机器学习、模型可解释性、职业轨迹等。Katie 是一名数据科学顾问,所以我发现她的例子和思维框架对我与客户沟通很有帮助。

👥目标受众:有抱负的高级数据科学家和工程师。对这里的工程师来说,这是一个很大的呼喊,因为 Ben 帮助在数据科学和软件工程世界之间画出了很好的相似之处。

⏱听力时间:20-30 分钟(每周)

⭐我喜欢它的地方:主持人之间的对话风格使它成为一次轻松有趣的聆听。举个例子,听你的朋友谈论伯特比听你的教授谈论伯特有趣得多。本问了一些很有见地的问题,凯蒂用我能理解的简单易懂的语言解释了这些问题——通常是在切胡萝卜和煎牛排之间周旋的时候。

2.数据怀疑论者

[## 数据怀疑论者

您值得信赖的播客,以数据科学、机器学习和人工智能为中心。请每周收听…

dataskeptic.com](https://dataskeptic.com/)

数据怀疑论播客有一系列与数据科学、统计学、机器学习等相关的主题。这个节目选择了一个主题,并对其进行了几个月的深入报道——我广泛关注的一个主题是假新闻和 NLP。主持人凯尔特别热衷于科学方法和运用批判性思维解决问题。

👥目标受众:有抱负的高级数据科学家和工程师

⏱听力时间:20-50 分钟(每周)

⭐我喜欢它的地方:通常会有一个贯穿多集的主题,主题涉及面很广。开头几集适合入门者和初学者,随着主题的进展,内容变得有挑战性但有趣。

3.奥赖利数据显示

[## 奥赖利数据秀播客——奥赖利

O'Reilly 数据秀播客:Evan Chan 谈 Spark+Cassandra、FiloDB 和云计算的早期。的…

www.oreilly.com](https://www.oreilly.com/radar/topics/oreilly-data-show-podcast/)

该节目探讨了推动大数据、数据科学和人工智能的机会和技术。每一集,主持人本·洛里卡采访领先的行业专业人士,谈论他们在现实世界中的经历。

**我也刚刚意识到这个节目似乎要停播了,但主持人有一个新的播客,叫做数据交换。我仍然认为奥赖利数据秀的插曲值得一听!

👥目标受众:行业专业人士,更倾向于机器学习工程师,因为很多剧集都与模型部署有关。

⏱听力时间:20-50 分钟(每周)

⭐:我喜欢它的地方:这个节目的嘉宾在他们各自的领域都非常精通并且受人尊敬。听到公司面临的各种问题非常有趣,从他们的经历中学习更有见地。

这就是我的数据科学阅读清单

希望这篇文章能给你的邮箱增加一些内容,或者启发你自己建立一个阅读清单。

我总是在寻找好的时事通讯和播客,请给我留下好材料的评论。

感谢阅读 ⭐在媒体LinkedIn 上关注我,或者访问我的网站。此外,如果您想要对您的机器学习部署框架进行评估,请在 Melio Consulting 发送电子邮件给我们

为人类服务

原文:https://towardsdatascience.com/to-serve-man-60246a82d953?source=collection_archive---------14-----------------------

使用 Seldon Core 在 Kubernetes 上部署模型

来源:Pixabay

介绍

讽刺的是,有史以来关于机器学习的最好的论文之一与实际的机器学习几乎没有关系!

在论文机器学习系统中隐藏的技术债务中,一群来自谷歌的机器学习研究人员敏锐地指出,“任何现实世界的 ML 系统中只有一小部分是由 ML 代码组成的”,并且通常“[模型]所需的周围基础设施是巨大而复杂的。”

换句话说,能够将一个模型从 Jupyter 笔记本中的单个单元转换为一个实际的生产软件并不容易。

服务基础设施

正如本文的图表所示,任何生产 ML 系统的一个较大部分是它的服务基础设施,它通常是利益相关者与 ML 代码实际交互的地方。

对于许多企业来说,该基础架构是某种容器编排引擎,如 Kubernetes。

但是在深入研究如何使用像 Seldon Core 这样的框架为 Kubernetes 下的模型提供服务的技术细节之前,为什么首先要经历所有这些麻烦呢?

作为一等公民的模范

当一个复杂的系统在其主要的功能领域中定义和执行真正的关注点分离时,维护和管理它就容易得多。

简而言之,您希望所有的机器学习代码都是自包含的,并且不依赖于它所在的更广泛的应用程序的运行时。

这就是为什么,例如,将模型作为自包含的 Docker 图像,或将它们隐藏在定制的烧瓶或闪亮的应用程序中,在生产中通常会受到反对——它将机器学习位隐藏在许多层之下,使其更难管理。

理想情况下,您希望能够利用与 CPU、存储等其他计算资源相同的部署和管理习惯。但是你的模特。

这样,数据科学家和/或机器学习工程师可以专注于模型设计和性能,而您的 MLop 人员则可以专注于模型部署和相关基础设施。

在 Kubernetes 的世界中,这意味着模型应该被定义为真正的 Kubernetes 对象( YAML / CRDs ),并使用 kubectl 进行管理。

进入谢顿核心

资料来源:谢顿核心文件

Seldon Core 是一个开源项目,为您的 Kubernetes 集群提供通用模型服务框架。它解决了三个主要挑战:

  • 支持大量不同语言的机器学习框架。
  • 将模型作为 REST 或 gRPC web 服务自动公开。
  • 支持模型部署的全生命周期管理,包括健康、遥测、安全和扩展。

在本文中,我们将在 Seldon Core 下部署一个简单的 REST 风格的模型服务,它接收一个图像,然后不加修改地返回它。

在这个过程中,您将看到注入 ML 代码来执行推理以创建一个成熟的模型微服务是多么容易。

到本文结束时,您应该对如何在 Kubernetes 上的 Seldon Core 下部署模型有了很好的理解。

推理图

资料来源:谢顿核心文件

谢顿核心的预测 API 让你将你的模型定义为一个推理图

请求流过图的每个节点,最终到达一个模型叶节点,该节点在您最喜欢的 ML 框架(例如 Tensorflow、scikit-learn)中运行某种预测功能,并返回结果。

Seldon Core 支持许多不同种类的节点,允许您创建更复杂的推理图工作流程,如上图所示。

最简单的推理图只有一个根模型节点,这是我们的示例服务将要实现的。

先决条件

在阅读下面的教程时,会做出以下假设:

  • 您可以访问已经安装了 Seldon Core 的 Kubernetes 集群(≥1.12),或者拥有管理权限来安装该集群。

谢顿核心很容易安装:只需遵循几个简单的指令来部署它

  • 您已经安装了 Docker,并且可以轻松地编写 Docker 文件以及构建映像并将其推送到本地集群注册表。

选择一种语言,任何语言…

目前, Seldon Core 支持多种语言包括 Python、R、Java、NodeJS,现在还有 Go (alpha)。

但是如何

任何 k8s 集群中的基本执行单元是一个 Pod,它总是由一个或多个 Docker 容器支持。

Seldon Core 让您首先在他们的预测 API 下实现您的模型代码,然后将其包装在 Docker 容器中。

您创建的图像既可以通过 Dockerfile 直接构建,也可以使用 OpenShift 的 s2i 工具以 Seldon Core 的包装图像为基础构建。

对于我们简单的基于 Python 的服务示例,我们将使用几个简单的 Dockerfile 指令直接创建它。

听候吩咐

好了,让我们编写一个简单的 Python 服务,我们可以使用它的预测 API 部署在 Seldon Core 下。

我们的服务只是将图像作为张量读入,然后返回。

创建一个名为 MyModel.py 的文件,如下 :

#!/usr/bin/env python3import io
import logging
import numpy as npfrom PIL import Imagelogger = logging.getLogger('__mymodel__')**class MyModel(object):** def __init__(self): logger.info("initializing...")
    logger.info("load model here...")
    self._model = None
    logger.info("model has been loaded and initialized...") **def predict(self, X, features_names):** """ Seldon Core Prediction API """

    logger.info("predict called...") # Use Pillow to convert to an RGB image then reverse channels.
    logger.info('converting tensor to image')
    **img = Image.open(io.BytesIO(X)).convert('RGB')
    img = np.array(img)
    img = img[:,:,::-1]** logger.info("image size = {}".format(img.shape)) if self._model:
      logger.info("perform inference here...") # This will serialize the image into a JSON tensor
    logger.info("returning prediction...") # Return the original image sent in RGB
    **return img[:,:,::-1]**

让我们来分解一下:

  • 我们的模型服务类是一个简单的 Python 对象,它实现了一个 predict() 方法。请注意,在您的实际模型代码中不需要 Seldon 核心 API。您所需要做的就是用 predict()方法创建一个类对象,这样就完成了!
  • predict()方法将一个张量 X 和一列特征名作为输入。这些类型由谢顿核心 protobuf 规范定义,在此处找到。在我们的示例服务中,我们将只使用张量对象,因为我们的模型吸收图像。
  • 我们需要将 Seldon Core 传入的 object X 这样的字节数组转换成 RGB 图像。
  • 然后我们反转图像的通道来创建我们最终的 BGR 图像进行处理(适合一些 OpenCV 处理)。
  • 注意,我们可以在类实例化时注入加载模型,然后在 predict()函数中非常容易地运行推理。

包起来!

既然我们已经整理好了模型类,让我们使用这段代码来构建一个使用 Seldon 核心包装 API 的 Docker 容器。

创建一个 Dockerfile ,看起来像:

FROM python:3.7-busterRUN apt-get update && DEBIAN_FRONTEND=noninteractive && apt-get install -y \
   curl \
   python3-setuptools && \
apt-get clean && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*COPY requirements.txt .
RUN curl -s [https://bootstrap.pypa.io/get-pip.py](https://bootstrap.pypa.io/get-pip.py) -o get-pip.py && python3 get-pip.py && rm -f get-pip.pyRUN pip3 install --no-cache numpy Pillow **seldon-core****# Seldon Core specific**
**COPY . /microservice
WORKDIR /microservice****ENV MODEL_NAME MyModel
ENV API_TYPE REST
ENV SERVICE_TYPE MODEL
ENV PERSISTENCE 0****CMD exec seldon-core-microservice $MODEL_NAME $API_TYPE --service-type $SERVICE_TYPE --persistence $PERSISTENCE****EXPOSE 5000**

让我们来分解一下:

  • docker 文件的大部分是相当标准的内容,因为我们创建了一个小的 Python 3.7 buster 映像,有一些运行时需求。
  • 注意,我们安装了谢顿核心 Python 模块,作为模型运行时的一部分。
  • 我们将应用程序安装在容器的/微服务目录中。
  • 您的模型类对象实际上是由seldon-core-microservice应用程序加载的,并在内部将其公开为一个 Flask webapp(我们将在实际部署模型时意识到这一点)。
  • Seldon Core 同时支持 REST 和 gRPC web 服务 API。这里我们指定 REST,因为我们将使用一个简单的 http POST 操作来测试我们的服务。

构建映像并将其推送到集群的存储库:

$ docker build --no-cache -t my-model:0.1 .
Sending build context to Docker daemon  6.144kB
Step 1/14 : FROM python:3.7-buster
---> 879165535a54
...
Step 14/14 : EXPOSE 5000
 ---> Running in 8e9f588abe89
 ---> 83b0a4682783
Successfully built 83b0a4682783$ docker tag my-model:latest <your repo>/my-model:0.1
$ docker push <your repo>/my-model:0.1

为当地服务

现在我们已经构建了一个映像,让我们通过运行我们的 seldon-core-microservice 作为一个独立的 docker 容器来测试它:

$ docker run -d --rm --name my-model -p 5000:5000 my-model:0.1
5aa997b0b093612f88499e13260cf96ee6d9931749f2dfa23ee3d61d303c2cc5
$ docker logs -f my-model
2020-02-21 01:49:38,651 - seldon_core.microservice:main:190 - INFO:  Starting microservice.py:main
...
**2020-02-21 01:49:38,659 - __mymodel__:__init__:15 - INFO:  initializing...
2020-02-21 01:49:38,659 - __mymodel__:__init__:16 - INFO:  load model here...
2020-02-21 01:49:38,659 - __mymodel__:__init__:18 - INFO:  model has been loaded and initialized...**
2020-02-21 01:49:38,659 - seldon_core.microservice:main:325 - INFO:  REST microservice running on **port 5000**
2020-02-21 01:49:38,659 - seldon_core.microservice:main:369 - INFO:  Starting servers
 * Serving Flask app "seldon_core.wrapper" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
2020-02-21 01:49:38,673 - werkzeug:_log:113 - INFO:   * Running on [http://0.0.0.0:5000/](http://0.0.0.0:5000/) (Press CTRL+C to quit)

请注意,您上面编写的 MyModel 类已被加载,并作为 Flask 应用程序在端口 5000 上提供。模型的预测终点在'/预测''/API/v 0.1/预测'

当地商店

让我们通过编写一个简单的客户端脚本来测试我们的 MyModel 服务,该脚本将向我们的模型的预测端点发送一个图像文件。我们将使用相同的脚本来测试我们在 Kubernetes 上的部署,只需更改 URL。

这是我们的客户,my-model-client.py :

#!/usr/bin/env python3import base64
import json
import logging
import os
import numpy as np
import requests
import sysfrom PIL import Imagelogger = logging.getLogger('__mymodelclient__')
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler())if __name__ == '__main__':
    url = sys.argv[1]
    path = sys.argv[2] **# base64 encode image for HTTP POST
    data = {}
    with open(path, 'rb') as f:
        data['binData'] = base64.b64encode(f.read()).decode('utf-8')** logger.info("sending image {} to {}".format(path, url))
  **  response = requests.post(url, json = data, timeout = None)**

    logger.info("caught response {}".format(response))
    status_code = response.status_code
    js = response.json() if response.status_code == requests.codes['ok']:
        logger.info('converting tensor to image')
        data = js.get('data')
        tensor = data.get('tensor')
        shape = tensor.get('shape')
        values = tensor.get('values')
        logger.info("output image shape = {}".format(shape)) # Convert Seldon tensor to image
       ** img_bytes = np.asarray(values)
        img = img_bytes.reshape(shape)
        Image.fromarray(img.astype(np.uint8)).save('result.jpg')**
        logger.info('wrote result image to result.jpg')
    elif response.status_code == requests.codes['service_unavailable']:
        logger.error('Model service is not available.')
    elif response.status_code == requests.codes['internal_server_error']:
        logger.error('Internal model error.')

让我们来分解一下:

  • 我们传递想要张贴图像的 URL 和图像本身的路径。
  • 我们需要对图像进行 base64 编码,为发布到本地作为容器运行的 Seldon Core 微服务做准备。
  • 我们发送一个包含 JSON 字符串的 POST,该字符串包含 binData 键和 base64 编码图像作为其值。
  • 如果 POST 成功(HTTP STATUS OK 200 ),我们从 JSON 响应中读取数据键,并提取张量,这实际上是我们的结果图像。
  • 张量有一个形状键——值键是图像本身作为像素强度的数组。
  • 我们使用 Pillow 将张量值写成一个名为“result.jpg”的 JPEG 文件。

现在让我们使用这个脚本来测试我们的服务:

$ file test_image.jpg
test_image.jpg: JPEG image data, JFIF standard 1.00, resolution (DPI), density 0x0, segment length 16, comment: "LEAD Technologies Inc. V1.01", baseline, precision 8, **1280x960, components 3**$ python3 my-model-client.py [http://localhost:5000/api/v0.1/predictions](http://localhost:5000/api/v0.1/predictions) test_image.jpg
sending image test_image.jpg to [http://localhost:5000/api/v0.1/predictions](http://localhost:5000/api/v0.1/predictions)
caught response <Response [200]>
converting tensor to image
result image shape = [960, 1280, 3]
wrote result image to result.jpg$ file result.jpg
result.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, **1280x960, components 3**

让我们看看处理图像的 docker 容器的日志消息:

$ docker logs my-model
2020-02-21 15:32:33,363 - __mymodel__:predict:22 - **INFO:  predict called...**
2020-02-21 15:32:33,391 - __mymodel__:predict:27 - **INFO:  image size = (960, 1280, 3)**
2020-02-21 15:32:33,391 - __mymodel__:predict:33 - **INFO:  returning prediction...**
2020-02-21 15:32:33,977 - seldon_core.user_model:client_class_names:166 - INFO:  class_names is not implemented
2020-02-21 15:32:33,977 - seldon_core.user_model:client_custom_tags:134 - INFO:  custom_tags is not implemented
2020-02-21 15:32:33,977 - seldon_core.user_model:client_custom_tags:134 - INFO:  custom_tags is not implemented
2020-02-21 15:32:33,977 - seldon_core.user_model:client_custom_metrics:307 - INFO:  custom_metrics is not implemented
2020-02-21 15:32:34,271 - werkzeug:_log:113 - INFO:  172.17.0.1 - - [21/Feb/2020 15:32:34] **"POST /api/v0.1/predictions HTTP/1.1" 200 -**

部署它!

像所有 Kubernetes 的东西一样,Seldon Core 通过一个自定义资源定义(CRD) 文件定义了自己的部署对象,称为 SeldonDeployment

让我们通过一个 seldon-deploy.yaml 文件来定义我们的模型的 seld deploy:

apiVersion: machinelearning.seldon.io/v1alpha2
kind: SeldonDeployment
metadata:
  name: my-model
spec:
  name: my-deployment
  **predictors:**
  - componentSpecs:
    - spec:
        containers:
        - name: my-model-graph
          image: <your cluster's registry>/my-model:0.1
    **graph:**
      **children: []**
      **endpoint:
        type: REST
      name: classifier**
      **type: MODEL
    annotations:
      predictor_version: "0.1"
      seldon.io/svc-name: my-model-svc   ** 
    **name: my-graph**
 **   replicas: 1**

让我们来分解一下:

  • 一个很少部署由一个或多个预测器组成,这些预测器定义了这个部署中包含哪些模型。注意:您可能想要为金丝雀或多臂强盗类型场景定义多个预测器。
  • 每个预测器都由一个 Pod spec 组成,它定义了我们上面构建的模型代码的 Docker 映像。
  • 由于 SeldonDeployment 是一种部署类型,每个预测器都由一个或多个复制集支持,复制集定义了应该创建多少个 pod 来支持您的模型(推理图)。这是允许您扩展部署以满足计算需求的方法之一。
  • 我们还设置了一个自定义的服务名,因为一个很少部署会将我们的微服务自动公开为 Kubernetes Service 对象。

让我们创建 SeldonDeployment,并查看部署以及创建的背后的对象:

$ kubectl get seldondeployments
NAME       AGE
my-model   6s$ kubectl create -f seldon-deploy.yaml
seldondeployment.machinelearning.seldon.io/my-model created$ kubectl get all
NAME                                                  READY   STATUS    RESTARTS   AGE
**pod/my-deployment-my-graph-20302ae-5cfc6c47f4-m78ll**   2/2     Running   0          80sNAME                                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
**service/my-model-svc**                              ClusterIP   172.26.126.119   <none>        8000/TCP,5001/TCP   55s
service/seldon-9d8927429acc983eba0168e21059f589   ClusterIP   172.28.210.215   <none>        9000/TCP            80sNAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
**deployment.apps/my-deployment-my-graph-20302ae**   1/1     1            1           80sNAME                                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/my-deployment-my-graph-20302ae-5cfc6c47f4   1         1         1       80s

注意一些事情:

  • 创建的运行您的模型代码的 Pod 实际上有两个容器——您的模型代码以及在部署时注入的“sidecar”seldon-container-engine
  • 谢顿容器引擎将把所有请求和响应整理成谢顿核心信息格式,并监控你的模型容器的健康和遥测。
  • ClusterIP 服务在端口 8000 上公开,以便我们与微服务进行通信。

现在我们的模型微服务已经启动并运行,让我们使用上面的同一个客户端来测试它。我们需要设置一个公共可访问的入口或者使用端口转发来创建到我们的服务对象的直接连接。

在我们的简单示例中,我们只使用一个简单的端口转发:

$ kubectl port-forward svc/my-model-svc 8000:8000
Forwarding from 127.0.0.1:8000 -> 8000
Forwarding from [::1]:8000 -> 8000
Handling connection for 8000$ python3 my-model-client.py [http://localhost:8000/api/v0.1/predictions](http://localhost:8000/api/v0.1/predictions) test_image.jpg
sending image test_image.jpg to [http://localhost:8000/api/v0.1/predictions](http://localhost:8000/api/v0.1/predictions)
caught response <Response [200]>
converting tensor to image
result image shape = [960, 1280, 3]
wrote result image to result.jpg

成功!

我们刚刚发送了一个图像进行推断,并从运行在我们集群上的微服务得到了一个响应。

你现在可以打开你的原始图像和我们的微服务返回的结果图像,看起来应该是一样的。

为了验证我们甚至可以在 Pod 内部转储日志:

$ kubectl logs deployment.apps/my-deployment-my-graph-20302ae -c my-model-graph
...
2020-02-22 01:44:49,163 - __mymodel__:predict:22 - INFO:  predict called...
2020-02-22 01:44:49,223 - __mymodel__:predict:27 - INFO:  image size = (960, 1280, 3)
2020-02-22 01:44:49,223 - __mymodel__:predict:33 - INFO:  returning prediction...
2020-02-22 01:44:49,948 - seldon_core.user_model:client_class_names:166 - INFO:  class_names is not implemented
2020-02-22 01:44:49,949 - seldon_core.user_model:client_custom_tags:134 - INFO:  custom_tags is not implemented
2020-02-22 01:44:49,949 - seldon_core.user_model:client_custom_tags:134 - INFO:  custom_tags is not implemented
2020-02-22 01:44:49,949 - seldon_core.user_model:client_custom_metrics:307 - INFO:  custom_metrics is not implemented
2020-02-22 01:44:50,355 - werkzeug:_log:113 - INFO:  127.0.0.1 - - [22/Feb/2020 01:44:50] "POST /predict HTTP/1.1" 200 -

打扫

$ kubectl delete -f seldon-deploy.yaml
seldondeployment.machinelearning.seldon.io "my-model" deleted

我们很少部署和相关的物体现在都被终止了。

结论

我希望通过这篇简短的教程,你能更深入地了解如何使用 Seldon Core 将你的模型部署为 Kubernetes 下的微服务。

一般来说,谢顿核心开发工作流程如下:

  • 按照 Seldon 核心预测 API,将您的推理图编码为一组简单的 Python 对象。
  • 将模型代码和运行时包装成 Docker 容器。
  • 首先在本地测试您的容器,以验证您的模型代码是否按预期工作。
  • 将您的模型部署为一个微服务,作为一个取消部署对象。
  • 通过创建入口或使用端口转发将请求推送给它,来测试您的 SeldonDeployment 微服务。

Seldon Core 支持许多我在本文中没有提到的高级特性,因此我鼓励您仔细阅读该项目的大量文档,以更好地理解其整体设计和丰富的特性集。

但是,希望这篇文章能让您体会到为什么像 Seldon Core 这样的专用服务基础设施值得您花费时间和精力。

搅拌还是旋转:更好的浓缩咖啡体验

原文:https://towardsdatascience.com/to-stir-or-to-swirl-better-espresso-experience-8cf623ea27ef?source=collection_archive---------40-----------------------

跨空间和时间分析咖啡浓度

我第一次听说搅拌和漩涡是在詹姆斯·霍夫曼的视频中,他认为你不应该搅拌你的浓缩咖啡。他给出了不少似乎有科学依据的理由,但没有容易理解的数字来说明什么都不做、旋转或搅拌浓缩咖啡之间的区别。白马也有一篇令人信服的文章关于为什么应该搅拌而不是漩涡。我开始激动,从品尝经验来看,我不得不同意他的观点,但我想知道我们是否可以在这个问题上获得更多数据。

还有另一个类似的对话,关于等多久才能喝一杯浓缩咖啡。 Clive Coffee 很好地引入了这个话题,有些人认为应该马上来一杯浓缩咖啡。我通常会等它冷却一点,但不小心,我注意到当它冷却很多时,它有一种更糖浆的味道。然后我开始测量酒的温度,现在,我喝 47 度的酒。

然而,在所有这些讨论中,除了单镜头比较,我还没有看到数据,所以我收集了一些数据。我想用数据来回答这个问题,对于浓缩咖啡来说,最有用和最著名的指标是总溶解固体(TDS)。在过去的几个月里,我一直在使用这个指标来帮助理解我的过程中的各种变量,与其他测试不同,我可以对我拍摄的每个镜头进行漩涡/搅拌测试。

  1. 搅拌和旋转哪个更好?
  2. 多大的漩涡能让你更接近搅拌?
  3. 关于 TDS,随着时间的推移,击球会发生什么变化?

单次分析

我测量了几张照片,从照片的顶部、中部和底部开始。除了试图在我的设置中处于中间位置,很难获得合适的深度,而拍摄的顶部和底部更容易一致地测量。

下面这两张照片表明,如果你留下一张照片,它会随着时间的推移在 TDS 方面自我均匀化。我认为随着镜头的稳定,TDS 在镜头的顶部会减少,在底部会增加。然而,弹丸根据扩散原理运行,这意味着较高的浓度扩散到较低的浓度区域。

漩涡次数

看漩涡的次数,似乎漩涡越长,越接近搅动,这是一个直观的结果。在你愿意搅拌多久和搅拌多久之间有一个权衡。该数据还显示,就 TDS 均匀性而言,涡旋仍然没有接近搅拌。

侧面对中间

那你测量射击的位置呢?我通常从照片的中心开始测量,但是我想我也应该从侧面收集测量数据。我惊讶地发现,两边和中间有很大的不同。我曾怀疑从上到下的 TDS 会与两侧不同,我很惊讶地发现不同侧的 TDS 差异有多大。这可能是由于测量误差或测量过程中干扰液体,我还没有分离出这些变量。

多次拍摄的大量数据收集

为了更好地理解,我收集了一些照片的数据。对于每个镜头,我收集每个镜头的样本如下:

  1. 每个位置的顶部、中部和底部
  2. 在中心和侧面收集
  3. 未接触时收集,旋转(5 秒),搅拌(仅中心)
  4. 每次射击的温度

然后,我将这些样品放在盖子上,直到它们达到室温,在测量过程中,我一直将样品盖着,以确保没有水分蒸发。

根据这些数据,我使用散点图对 TDS 进行了一些比较,以了解 TDS 的不同之处。首先,让我们来看看漩涡 vs 未触及以及侧 vs 中心的比较:

漩涡肯定会改变击球的落点。它导致顶部具有较高的 TDS,底部具有较低的 TDS,而中间部分基本不受影响。结果应该是更均匀的拍摄。与侧面相比,中间有一些变化,但不太明显。侧面顶部似乎有更高的 TDS,中心底部似乎有更高的 TDS。

现在让我们比较一下漩涡和搅拌:

搅拌的均匀性增加,搅拌似乎比侧边的漩涡好一点。让我们更仔细地看看中心和侧面的数据。与未搅动相比,漩涡移动了周围的浓度,但与搅动相比,它并没有好到哪里去。

做决定

这些图表很有趣,但数据似乎令人困惑。有大量的数据,希望答案是显而易见的。如果我们使用这样的标准,即浓度越分散,搅拌或涡旋就越好。因此,我们可以查看顶部、中部和底部这些镜头的标准偏差(STD)。

从这些图表来看,旋转或搅拌肯定比不动镜头要好。这是假设你在一两分钟内喝完你的饮料,因为接近 4 或 5 分钟是东西自然扩散的时候。

当比较搅拌与涡旋时,数据倾向于搅拌比涡旋具有更低的 STD,表明搅拌在使注射均匀方面更好。

就均质浓缩咖啡而言,搅拌比涡旋要好,但由于扩散,这与让一杯咖啡静置几分钟是一样的。当然,也许这只是冰山一角。也许我们并不像自己认为的那样理解浓缩咖啡。

最后,我希望这能帮助你在每次搅拌咖啡时做出一个小而重要的决定。无论你做什么,一定要选一杯,因为这比不碰就喝要好。未接触的镜头是在液体开始于高浓度,结束于较低浓度的过程中制作的,因此有理由认为它不会是均匀的。

如果你愿意,可以在 Twitter 和 YouTube 上关注我,我会在那里发布不同机器上的浓缩咖啡视频和浓缩咖啡相关的东西。你也可以在 LinkedIn 上找到我。

我的进一步阅读:

香辣浓缩咖啡:热磨,冷捣以获得更好的咖啡

断续浓缩咖啡:提升浓缩咖啡

用纸质过滤器改进浓缩咖啡

浓缩咖啡中咖啡的溶解度:初步研究

断奏捣固:不用筛子改进浓缩咖啡

浓缩咖啡模拟:计算机模型的第一步

更好的浓缩咖啡压力脉动

咖啡数据表

工匠咖啡价格过高

被盗咖啡机的故事

浓缩咖啡过滤器分析

便携式浓缩咖啡:指南

克鲁夫筛:一项分析

翻译还是不翻译,非英语情感分析的最佳实践

原文:https://towardsdatascience.com/to-translate-or-not-to-translate-best-practices-in-non-english-sentiment-analysis-144a53613913?source=collection_archive---------22-----------------------

在本文中,在具有正/负标签的多样化的 50,000 个荷兰评论数据集上建立和训练递归神经网络。将性能与测试集被翻译成英语并通过预先训练的英语情感模型分类的情况进行比较。接下来,在去除停用词和不嵌入使用词的情况下测试该模型。ConceptNet Numberbatch 受到更密切的关注,因为这种多语言单词嵌入优于其他单词嵌入。

图片来自维基共享资源

总结
翻译对于情感分析来说不是一个好的选择,它会导致 16%的准确率下降。对于情感分析,停用词和词嵌入是有用的。事实证明,对于荷兰语自然语言处理,Conceptnet Numberbatch 单词嵌入优于 Word2vec/Glove。

翻译与递归神经网络 在本文中,递归神经网络在独立测试集上的准确性与 Textblob 在该测试集的英语 google 翻译上的性能进行了比较。荷兰训练模型是在一个数据集上训练的,该数据集包括近 50,000 条对酒店、购物产品、食品和服务的各种评论,标签为正面或负面。训练后,该模型用于预测独立测试集的标签。翻译后的模型是从 Textblob 预训练的。Textblob 是 Python 中广泛使用的预训练文本分析库。翻译后的模型首先翻译测试集,然后使用预训练的情感分析模型。独立测试集的结果如下:

如您所见,性能降低了 16%。根据斯坦福大学的研究,Textblob 在母语英语测试集上的准确率约为 87.5%。因此,如果翻译是完美的,Textblob 模型的性能已经降低了 4%左右。另外 12%是因为翻译不完美。因此,在这种情况下,建议收集大量的母语数据集。

但有时在小语种中,获取大数据集可能会很困难。除了英语和中文,没有很多大的标准数据集可以使用,网络内容也不太容易获得。如果你能设法得到几百个数据点(但不是 10.000 以上),那么迁移学习可能是一种选择。为了在这种情况下应用迁移学习,一个带有正负标签的(大)英语数据集被翻译成荷兰语,然后被训练。然后,该模型的权重用于在荷兰数据集的一小部分(1000 条评论)上进一步训练。这给出了比翻译的 Textblob 模型更好的结果:

培训和测试中的三种方法概述:

无停用词 如果停用词被过滤,数据集中最常见的词是好、好吃、酒店、预订、快捷和送货。这些词有些是中性的,有些则带有感情色彩。但是,结果表明准确率下降了 7%以上:

如果检查未过滤数据集中最常见的单词,可以看到前 20 个单词全部是停用词(这是有道理的)。性能下降变得明显。“不是”和“但是”这两个词颠倒了句子的意思。单词“too”和“also”也会改变句子的意思。如果模型不能考虑到这些词,它就不能预测一个句子/评论的反转情绪。

所以在这种情况下,最好将停用词保留在数据集中。

没有单词嵌入 为了新鲜起见,单词嵌入是用数字(或张量)来表示单词。例如,“遛狗的人”可以表示为这样的二维单词嵌入:[1.3,-0.2] [0.4,1.1] [-0.3,0.1] [1.3,-0.2] [1.2,0.7]。因此,当像上面那样使用二维嵌入时,每个(唯一的)单词都被转换成两个数字的组合。单词嵌入工作得如此之好是因为单词的语义被捕获了。意义相同的词具有相似的张量值,与其他词群的差异也相似。如下图所示,单词嵌入的性能要高得多。

concept net number batch concept net 是一个多语言的单词嵌入集。ConceptNet 优于其他众所周知的单词嵌入,如 Word2Vec 和 GloVe,如下图所示:

图来自 ConceptNet 项目

word embeddings 文件可以在下载部分下载。该文件的结构如下:/c/language _ code/word0.4…0.1。例如,dog 的结构如下:/c/en/dog 0.2 … 0.9。使用 Numberbatch 时,请确保只上传所需的语言,以减少冗余。Numberbatch 的词汇量令人印象深刻,请看下面的 15 种顶级语言:

那么嵌入如何寻找荷兰人呢?这些单词是用 300 个维度来表示的。为了将这个数字压缩到 2,可以使用 T-SNE 算法。共测试了三大类 18 个单词,分别是服装类的夹克、围巾、裤子、鞋子、袜子、毛衣的荷兰语翻译(下图黄色),动物类的虎、鹰、蜘蛛、鹰、狮子、鬣狗的荷兰语翻译(下图灰色),君主制类的皇冠、国王、女王、王子、宫殿、加冕(下图浅蓝色)。如您所见,单词根据相似性进行聚类,这意味着单词嵌入有助于需要处理荷兰语的模型:

最后,下面是一些关于如何实现 Numberbatch 的代码。下一节中的代码打开了 Numberbatch 单词嵌入(确保文件只包含您的语言部分,所以对于荷兰语是 c/nl/)。它创建了一个包含所有荷兰语单词及其 Numberbatch 单词嵌入表示的 300 维字典。例如,单词 dog 将保存为{ 'dog': [0.2,0.1,0.5 … 0.3]}:

这部分将数据集标记化。代码为每个唯一的单词分配一个数字,所有唯一的单词都被计算在内。接下来,将构建包含在训练集中出现的单词的字典,并且脚本向其添加 300 维嵌入:

最后,让 Keras 网络的第一层成为嵌入层。这确保了输入数据句子被转换为 Numberbatch 张量:

结论 如果你能够收集一个母语的大数据集,那么在这个数据集上训练的模型可能会给出最好的分类精度。如果你不能得到一个大的数据集,但只能得到几百个数据点,那么迁移学习仍然可以给出很好的结果。翻译数据,然后使用英语训练的模型是不推荐的,除了坏的准确性,这也将恶化您的应用程序的性能,因为数据首先需要被翻译。关于停用词和词嵌入,在这种情况下它们是有用的。Conceptnet Numberbatch 是一个非常好的单词嵌入工具,用于非英语的自然语言处理任务。

Next up 2021 我要写一篇关于神经风格转移的文章。要查看文章的最终应用,请查看以下页面(荷兰语):

Schilderij laten maken

到时候见!

令牌输出及其他

原文:https://towardsdatascience.com/token-outputs-and-beyond-fc63bcdfd752?source=collection_archive---------77-----------------------

主题建模:超越令牌输出

劳里·威廉姆斯 — 9 分钟阅读

我最近面临一项任务,其最终目标是将大量非结构化的句子和短文段自动聚合到相关主题的组中。
在这个任务中,我意识到在主题建模方法方面还没有太多的报道,特别是当试图给主题起一个有意义的名字的时候。

斯特凡·格雷奇在 Unsplash 上拍摄的照片

机器学习对儿童电视剧角色的痴迷

由凯瑟琳·杨 — 7 分钟读完

埃尔默、伯特和玛吉(辛普森饰)不仅仅是你在成长过程中最喜欢的电视角色——他们也是机器学习和自然语言处理模型

用滚动跨期分析揭示动量效应

由 Yulia Malitskaia—9 分钟阅读

文章展示了跨期方法,扩展和概括了滚动时间序列技术的范围,用于导出过渡过程和经验策略的模型。该方法是在解释动量溢价的背景下说明的,动量溢价是一个长期的持续挑战。

照片由 Valery Rabchenyuk 在 Unsplash 上拍摄

我如何使用 Python 代码提高我的韩语水平

由尼娅姆·金斯利 — 4 分钟读完

2020 年初,我决定要自学韩语。我对这种文化很感兴趣,并被学习一门非欧洲语言的挑战所吸引。我不想成为这种感觉像家务杂事的常见陷阱的受害者,所以我开始使用各种资源,包括 Duolingo、LingoDeer、Talktomeinkorean.com、闪存卡、韩剧,显然还有几千小时的 BTS 专辑。

背景图片由艾哈迈德·迪里尼

基于能量的模型和生成算法的未来

杰瑞米·哈里斯和威尔·格拉斯沃尔——50 分钟🎧

研究生院中的机器学习和工业中的机器学习是非常不同的东西。在行业中,部署和数据收集变得很关键,唯一重要的是你是否能以足够快的速度交付真正客户想要的产品,以满足内部期限。

自然语言处理的标记化

原文:https://towardsdatascience.com/tokenization-for-natural-language-processing-a179a891bad4?source=collection_archive---------3-----------------------

自然语言处理是编程中由软件处理自然语言的领域之一。这有许多应用,如情感分析、语言翻译、假新闻检测、语法错误检测等。

自然语言处理中的输入是文本。本文的数据收集来自许多来源。在数据可以用于分析之前,这需要大量的清理和处理。

以下是 NLP 中处理数据的一些方法:

  • 标记化
  • 停止单词删除
  • 堵塞物
  • 正常化
  • 词汇化
  • 词性标注

标记化

标记化是将原始文本分成小块。记号化将原始文本分解成单词和句子,称为记号。这些标记有助于理解上下文或开发 NLP 的模型。标记化有助于通过分析单词的顺序来解释文本的意思。

例如,文本“It is raining”可以标记为“It”、“is”、“raining”

SOULSANAUnsplash 上拍摄的照片

有不同的方法和库可用于执行标记化。NLTK、Gensim、Keras 是可以用来完成这项任务的一些库。

可以对单独的单词或句子进行标记化。如果使用某种分离技术将文本分成单词,这被称为单词标记化,对句子进行的相同分离被称为句子标记化。

停用词是文本中对句子没有添加任何意义的那些词,它们的移除不会影响用于定义目的的文本处理。它们被从词汇表中删除,以减少噪声并降低特征集的维数。

基于建模的语言和目的,有各种可用的标记化技术。下面是 NLP 中使用的一些标记化技术。

空白标记化

这是最简单的记号化技术。给定一个句子或段落,每当遇到空白时,它通过分割输入来标记成单词。这是最快的标记化技术,但对于用空格将句子分割成有意义的单词的语言来说,这种技术也是有效的。比如:英语。

基于词典的标记化

在这种方法中,基于字典中已经存在的标记来找到标记。如果找不到令牌,则使用特殊规则对其进行令牌化。与空白标记器相比,这是一种先进的技术。

基于规则的标记化

在这种技术中,为特定的问题创建了一组规则。标记化是基于规则完成的。例如,为特定语言创建基于语法的规则。

正则表达式标记器

这种技术使用正则表达式来控制文本到标记的标记化。正则表达式可能从简单到复杂,有时很难理解。当上述方法不能达到要求的目的时,这种技术是首选。这是一个基于规则的记号赋予器。

宾夕法尼亚树库标记化

树库是一个语料库,它给出语言的语义和句法注释。Penn Treebank 是已出版的最大的树库之一。这种标记化技术将标点符号、连字符号(与其他单词一起出现的单词,如 I'm,don't)和连字符单词分开。

空间标记器

这是一种更快、更容易定制的现代标记化技术。它提供了指定不需要分段或需要使用特殊规则分段的特殊令牌的灵活性。假设您希望将$作为一个单独的标记,它优先于其他标记化操作。

摩西记号赋予者

这是一个高级的记号赋予器,在 Spacy 引入之前就有了。它基本上是一个复杂的规范化和分段逻辑的集合,对于像英语这样的结构化语言非常有效。

子词标记化

这种标记化对于子词有意义特定应用非常有用。在这种技术中,最频繁使用的单词被赋予唯一的 id,而不太频繁使用的单词被分成子单词,它们最好独立地表示意思。例如,如果单词“很少”在文本中频繁出现,它将被分配一个唯一的 id,其中越来越少的罕见单词和在文本中不太频繁的单词将被分成子单词,如“很少”、“er”和“est”。这有助于语言模型不学习越来越少的两个独立的单词。这允许在训练期间识别数据集中的未知单词。下面给出了不同类型的子词标记化,并且将简要讨论字节对编码和单词块。

  • 字节对编码(BPE)
  • 文字片
  • 单语法语言模型
  • 句子片断

字节对编码(BPE)

该技术基于信息论和压缩中的概念。BPE 使用霍夫曼编码进行符号化,这意味着它使用更多的嵌入或符号来表示不太频繁的单词,使用较少的符号或嵌入来表示更频繁使用的单词。

BPE 分词是自底向上的分词技术。BPE 算法涉及的步骤如下。

  1. 首先将输入单词分割成单个 unicode 字符,每个字符对应最终词汇表中的一个符号。
  2. 从当前词汇表中找出最频繁出现的符号对。
  3. 把这个加到词汇量里,词汇量就会增加一。
  4. 重复步骤 ii 和 iii,直到构建了定义数量的符号,或者没有新的符号组合以所需的频率存在。

文字块

除了将新的令牌添加到词汇表的方式之外,WordPiece 类似于 BPE 技术。BPE 考虑将出现频率最高的符号对合并到词汇表中。而单词块也考虑单个符号的频率,并基于下面的计数将其合并到词汇表中。

计数(x,y) =频率(x,y) /频率(x) *频率(y)

具有最大计数的符号对将被视为合并到词汇中。因此,与 BPE 相比,它允许将罕见的标记纳入词汇。

用 NLTK 进行标记化

NLTK(自然语言工具包)是微软开发的一个 python 库,用于辅助 NLP。

Word_tokenize 和 sent_tokenize 是 NLTK 中非常简单的标记化器

它基本上从字符串中返回单个作品。

Sent_tokenize 将字符串拆分成多个句子。sent_tokenizer 是从 PunktSentenceTokenizer 类派生的。sent_tokenize 使用来自 token izers/punkt/English . pickle 的预训练模型。有针对不同语言的预训练模型可供选择。PunktSentenceTokenizer 可以根据我们自己的数据进行训练,以制作一个定制的句子标记器。

custom _ sent _ tokenizer = punksentencetokenizer(train _ data)

还有一些其他特殊的标记器,如多词表达式标记器(MWETokenizer),Tweet 标记器。

MWETokenizer 通过使用 MWEs 的词典,获取已经被分成记号的字符串,并对其进行重组,将多词表达式合并成单个记号。

想想“尽管面临重重障碍,他还是完成了任务”这句话

这被标记为['他','完成','任务','在','怨恨','的','所有','障碍','面临']

如果我们在 MWETokenizer 的词典中添加“尽管”,那么当上述标记传递给 MWETokenizer 时,它将被标记为['他','完成','任务','尽管','所有','障碍','面临']

TweetTokenizer 解决了 tweets 的具体问题,比如处理表情符号。

RegexpTokenizer

这个分词器根据正则表达式将句子拆分成单词。例如,在下面的例子中,记号赋予器从货币表达式和任何其他非空白序列中形成记号。

用文本块进行标记

Textblob 用于处理文本数据,是 Python 中的一个库。与其他包类似,它提供了用于情感分析、词性标注、分类、翻译等的 API。下面是要标记成句子和单词的代码片段,你可以注意到在输出中表情符号被从标点符号中删除了。

用 Gensim 进行符号化

Gensim 是主要用于主题建模的库之一。Gensim 为标记化提供了实用函数。

Gensim 也有一个句子标记器。来自文本清理器的 Split_sentences 对这个句子进行标记化。

用 Keras 进行标记化

标记化也可以用 Keras 库来完成。我们可以使用 Keras 中的 text_to_word_sequence。预处理. text 来标记文本。Keras 使用 fit_on_words 开发文本中单词的语料库,并使用该语料库创建具有 text_to_word 序列的单词序列。

标记化的挑战

在标记化方面有很多挑战,但是我们讨论了一些单词切分的困难。

标记化的最大挑战之一是获取单词的边界。在英语中,单词的边界通常由空格和标点符号来定义句子的边界,但这在所有语言中并不相同。在诸如中文、朝鲜语、日语的语言中,符号代表单词,并且很难得到单词的边界。

甚至在英语中也有很多符号,比如,$,€,后面跟着数字来代表钱,还有很多科学符号,比如,α等等。这给标记化带来了挑战。

英语中也有很多缩写形式,如 I'm(我是),dot(没有)等。这些问题需要解决,否则会在 NLP 的下一步中引起很多问题。

在自然语言处理领域仍有许多研究在进行,我们需要为手头的自然语言处理任务选择合适的语料库。

参考文献:

Gensim 文档:https://pypi.org/project/gensim/

NLTK 文档:https://www.nltk.org/

Keras 文件:https://keras.io/

作者

斯里尼瓦斯·查克拉瓦蒂——srinivas.yeeda@gmail.com

钱德拉塞卡·纳加拉吉——chandru4ni@gmail.com

Tokenizers: NLP 的构建模块

原文:https://towardsdatascience.com/tokenizers-nlps-building-block-9ab17d3e6929?source=collection_archive---------25-----------------------

探索经常被忽视的变压器构件

学分:Unsplash

事实是,令牌化者并不那么有趣。当我第一次阅读 BERT 论文时,我跳过了单词片段标记部分,因为它不像论文的其他部分那样令人兴奋。但是标记化已经从单词发展到子单词标记化,不同的转换器使用不同的标记化器,这些标记化器很难理解。

已经有一些讨论和解释记号赋予者的好文章——我最喜欢的是 FloydHub详细博客文章拥抱脸简短教程

相反,我想把重点放在应用上——特别是不同模型的标记化器如何开箱即用,以及这如何影响我们的模型的理解能力。如果你从一个预先训练好的 Transformer 模型开始你的 NLP 任务(这通常比从头开始训练更有意义),你会被这个模型的预先训练好的记号化器和它的词汇所困扰——知道它的行为和怪癖可以让你更容易地选择最好的模型和调试问题。

但首先,我们需要一些基础知识,这样这篇文章才能独立阅读。如果您已经了解了标记化的基础知识,可以跳过这一部分。

基本原则

子词标记化:在具有无限内存和计算能力的理想世界中,我们将保存我们的词汇表中的每个词,并在我们的词汇表中为每个词保留一个位置。遗憾的是,事实并非如此,所以我们需要有一个固定的词汇表,通常在 30-50k 左右。限制词汇大小的需要意味着几乎肯定会有不够“重要”而不被包括在内的单词,即“词汇表之外”或 OOV。这导致了可怕的< UNK >记号,即未知记号——这被归入每个未知单词,因此,模型将很难理解其语义。但是通过子词标记化,我们能够用更频繁的子词来标记不常用的词,从而两全其美,拥有更小的词汇量,同时仍然能够标记罕见的或拼写错误的词。

词汇构建:前面我提到过,只有重要的单词才会被收录到词汇中。那么“重要性”是如何确定的呢?我们从基本字符开始,然后通过将字符合并到子字中来构建词汇表,直到达到最大词汇量。主要的记号化方法在首先考虑什么子词(即,要合并的子词的顺序)以及合并决定方面有所不同。下面的图片来自 Floydhub 的博客,展示了 3 种主要子词分词方法的区别。

来源:https://blog.floydhub.com/tokenization-nlp/

嵌入:输入记号由一个嵌入层表示,它是每个记号的多维投影。通过将嵌入传递通过变换器块,获得了对输入的上下文理解,即,标记的嵌入依赖于序列中的其他单词。层次越多,表示就越具体。

符号化者如何看待表情符号

为了分析任何现代文本,特别是用户生成的内容,如推文或消息,我们的模型应该理解表情符号的意思。理想情况下,该模型应该能够直接读取表情符号,尽可能少地进行预处理,以保留句子的原始上下文。

凭借我们对符号化器如何工作的初步理解,我们知道模型阅读表情符号的能力简单地取决于字符是否被添加到模型的词汇中。

装货🤗的预训练模型包含预训练模型及其标记器的全部范围,我们只看到罗伯塔的词汇包含表情符号——其字节级 BPE 的秘密酱允许它标记所有字符,并避免可怕的标记。

来源:https://gist . github . com/neoyipeng 2018/CB 6b 5 BC 10624 AE 6 fcb 9 b 0 e 3c 76 CB 01 f 0

这样做的后果是巨大的——即使你给预训练的 BERT 输入更多的训练数据,它也永远不会知道😀和🤬,因为表情符号不在词汇表里。

为了看到这一点,我们来看看不同的模型如何看待包含不同表情符号的极性句子。只有 Roberta 的 BPEtokenizer 能够区分只有表情符号不同的两个句子,如两个不同的点所示,而 BERT 或 ALBERT 具有相同的极性句子嵌入投影。

这个例子是人为设计的,因为通常有其他不同的单词帮助模型理解句子,但关键是,如果我们希望我们的模型真正辨别我们的表情符号加载推文的含义,我们需要预处理并用相应的含义替换表情符号,或者如果我们不使用 GPT-2 的罗伯塔,从头重新训练标记化器/模型。

记号赋予者如何看待数字

当将 NLP 应用于金融时,一个关键的考虑因素是我们的模型如何看待数字——这也受到表征器/模型本身的影响。

如果我们可视化一些样本句子的隐藏状态,我们会看到,与 XLNet 的句子相比,BERT 的单词块和 ROBERTA 的 BPE 对数字的敏感度要低得多——这表明带有句子标记器的模型更适合有大量数字的文档。

来源:https://gist . github . com/neoyipeng 2018/f 5 cbbbf 4d 39404464122 CD 41 ef 2e 4 e 6d

来源:https://gist . github . com/neoyipeng 2018/f 5 cbbbf 4d 39404464122 CD 41 ef 2e 4 e 6d

对于我做的更多实验,你可以在这里查看我的要点。

结论

最好的 transformer tokenizer 是什么?至于所有乱七八糟的事情,看情况。这取决于您的数据,当您进行 EDA 并可视化一些样本文本时,检查模型的最大错误并检查是否有任何重要的单词将帮助您了解预先训练的模型理解什么,并让您做出更好的选择。

来源

[1] 语境嵌入有多语境化?作者 Kawin Ethayarajh

未来的数据市场将取决于今天的隐私保护

原文:https://towardsdatascience.com/tomorrows-data-markets-will-depend-on-privacy-protections-today-c5de7181b0d6?source=collection_archive---------28-----------------------

意见、数据隐私和安全性

对所有希望参与新兴的全球数据经济的企业发出温和的战斗号令

格尔德·奥尔特曼/弗赖堡/德国

它可能看起来不像,但与我们当前的社会、政治和现在的社会生物学时代精神相反,这种精神似乎倾向于封闭的边界和受约束的市场,全球经济正在积极寻求通过开放的商业实践来保持竞争力——至少对信息和数据驱动的资产来说是这样。但不是每个人都会玩。无论是受监管的、公共的还是私有的,任何希望参与“数据经济”的企业都需要解决一些关于数据安全和隐私的非常基本的首要原则。

2020 年 2 月,欧盟委员会发布了优先公报(2020 年欧洲数据战略)[ i 。在这份报告中,欧盟(EU)呼吁居民国创建一个对企业、研究人员和公共行政部门都有利的单一数据市场,允许这些实体和公民自己利用非个人数据的洞察力。基本上,欧盟希望促进创建充满可销售数据集和人工智能(AI)资产的欧洲数据池,这些数据池将为欧盟集体经济提供动力,同时符合其自身的数据保护立法。

欧盟指出了一个非常重要的机会,让企业共同努力,利用他们各自的数据和面向人工智能的资产。到目前为止,物联网(IoT)智能城市用例构成了早期数据市场机会的主要部分,支持智能自行车共享、车辆拥堵和停车管理以及空气质量报告和响应。类似的互惠互利的数据生成和消费交换在零售、医疗、金融和其他数据密集型市场中占据一席之地似乎只是时间问题。

毫不奇怪,这种机会主义推理要求对消费者愿意分享的数据负责的人具备很高的数据能力。这就是为什么欧盟如此关心数据的自由交换,尽管它自己的立法对数据共享有一些重大限制。欧盟认为这两种观点不仅相互兼容,而且相互包容,是对其长期经济成功至关重要的一把连体锁和钥匙。

显然,对于已经沉浸在数据隐私和治理措施中的大型商业实体来说,参与更广泛的数据经济所需的许多基础工作已经就绪。对于大型企业对消费者(B2C)公司来说尤其如此,这些公司已经重构了他们的后端系统,以适应当前在全球范围内推出的越来越多的数据隐私和治理法规。

苹果、谷歌、网飞和脸书等大公司(以及联邦机构)如果不能保护用户的隐私和安全,肯定会损失惨重。政府强制实施的法规,如欧盟的一般数据保护法规(GDPR)、加州消费者隐私法(CCPA)、巴西的一般数据保护法(LGPD)以及许多其他法规,正在进入市场。许多国家已经针对一些非常基本的 IT 或业务相关问题征收了高额罚款。

回到 2019 年 12 月,全球域名托管提供商 1&1 Ionos 收到了德国联邦数据保护和信息自由专员(BfDI)高达 955 万€的罚款,原因是

“个人数据保护不足,未能采取‘充分的技术和组织措施’来保护呼叫中心的客户数据。违反了 GDPR 第 32 条。”[ ii

简而言之,1&1 Ionos 允许坏人打电话到公司的联络中心,通过提供用户的姓名和出生日期来获取任何其他用户的信息。对于用户认证中一个非常基本的失误来说,这是一笔很大的罚款,特别是考虑到该公司在 2019 年仅赚了 1.18 亿多€。

这给小企业带来了什么?

像这样的警示故事应该会让企业主和 IT 专业人士感到恐惧,特别是在那些试图远离客户数据管理麻烦的小公司。对于这些较小的参与者来说,甚至不值得考虑有目的地使用这些数据来参与外部数据市场。

但是他们的参与是至关重要的。正如欧盟最近就此事发表的公报中所述,欧洲机构认为,它必须削弱(甚至打破)亚马逊和苹果等大型科技巨头对消费者数据的貌似铁定的控制。就此而言,欧盟和许多其他国家担心,如果没有某种手段从这些精通技术的巨头手中夺取消费者数据的控制权,小企业最终将被遗忘。

小型企业的关键是建立一个坚实的基础,然后随着时间的推移在此基础上添加特定用例的细微差别,以响应不断变化的市场(和监管)需求。对不同投资领域的任何详细观察都不仅仅是这样一个简短的专栏。然而,一般来说,小型企业在保护他们最宝贵的资产时,确实应该考虑两个主要的体系结构领域。

首先,保护数据本身,因为它位于数据存储中。其次,在数据移动以响应数据请求时控制数据,尤其是外部请求和那些涉及机器学习(ML)操作的请求。将有足够的时间来考虑令人兴奋的话题,如建立数据文化,以及如何在新兴的数据交易所(如欧盟设想的交易所)中营销客户数据。

关于高贵但未被充分重视的企业数据库本身,好消息是几乎所有的企业级数据库、数据湖、数据仓库——甚至是个人数据存储,如 Microsoft Office 365——都通过强大的访问控制方法和对静态和动态数据的加密来优先考虑安全性。这些供应商越来越多地增加了针对数据隐私问题的功能(例如,数据屏蔽和子集)。唯一真正的问题是是自托管还是订阅托管数据库。这两者之间的许多权衡取决于内部能力、区域数据主权要求以及值得在其他地方进一步讨论的大量变量。

在处理第二个目标时,投资于能够处理特定隐私和合规性问题的技术,这里也有许多选择。事实上,解决方案涵盖了整个数据安全和隐私领域:数据屏蔽、令牌化、归档、销毁、发现等。像 Delphix、DATPROF、Informatica 和众多竞争对手这样的供应商非常擅长提供数据保护,支持不同的使用案例,如地区监管合规标准(希腊最近发布的关于如何处理 web 浏览器 cookies 的指南)。[ iii

这些解决方案通常在体系结构上位于数据库和消费者(用户或应用程序)之间,提供必要的控制来确保个人身份信息(PII)等敏感数据不会突破安全的企业边界。由于云优先的规模经济,小公司现在可以获得一些非常具体的保护,这些保护在财务上是根据他们对云内和本地数据库部署的具体要求量身定制的。

他们说水涨船高。但是,除非较小的船只(即小企业)通过建立一个坚实的基础来将注意力转向他们的数据——从数据库开始,然后向上移动业务堆栈——否则他们就有可能在停泊的地方沉入较大的船只中。

附录:值得考虑的主要参与者的简要列表

了解数据隐私的数据库供应商

  • SAP (HANA +各种)
  • AWS(红移、S3 和各种)
  • 微软(Azure SQL 数据库+ Azure 数据湖)
  • 谷歌(云 Bigtable,云扳手)
  • Oracle 数据仓库
  • IBM/Cloudera 数据湖
  • 弹性企业搜索
  • OpenText(各种)
  • Teradata(各种)
  • 雪花

数据隐私和安全厂商

  • 数据伪装
  • PKWARE
  • 信息(各种)
  • Guardium
  • 德尔菲克斯
  • IBM Optim 数据隐私
  • 索利斯
  • 金雅拓
  • 六层
  • HPE 安全数据
  • 门蒂斯
  • TokenEx

脚注

[i]欧洲委员会,(2020 年),欧洲数据战略

[ii]安东尼·斯帕达佛拉(2019), 1 & 1 命中百万欧元 GDPR 罚款,科技雷达

[iii] OneTrust 数据指南,(2020 年),希腊:HDPA 发布 cookies 指南

太多的术语会破坏回归

原文:https://towardsdatascience.com/too-many-terms-ruins-the-regression-7cf533a0c612?source=collection_archive---------21-----------------------

多项式回归过度拟合及其避免方法

通过增加现有要素的功能,多项式回归可帮助您充分利用数据集。它允许我们用简单的模型来模拟非线性关系,比如线性回归。这可以提高模型的准确性,但是如果使用不当,可能会出现过度拟合。我们希望避免这种情况,因为这会给你留下一个在未来表现不佳的模型。

来源:作者

在本文中,我们将解释多项式回归的概念,并展示它如何导致过度拟合。我们还将讨论一些可以用来避免过度拟合的技巧。这些方法包括使用 k-fold 交叉验证或坚持集,但最重要的是,我们将讨论如何应用领域知识来帮助您避免过度拟合。我们不会讨论任何代码,你可以在 GitHub 上找到完整的项目。

什么是多项式回归?

让我们通过将一些线性回归模型拟合到一个数据集来直接进入这个概念。我们将使用一个房地产估价数据集,其中包含 414 所售出房屋的信息。为了简单起见,我们只考虑两个变量——单位面积的房价和房龄。我们可以在下面的图 1 中看到这两个变量之间的关系。这个想法是利用房子的年龄来预测价格。

图 1:房价与年龄的散点图

查看图 1,这两个变量之间似乎没有线性关系。这意味着这种关系不能用直线来表示。在我们的案例中,房价最初会随着年龄的增长而下降。然而,大约 25 年后,它开始随着年龄的增长而增加。这表明这种关系可能是二次的。在我们进入建模之前,让我们讨论一下为什么会这样。我们将在后面看到,当涉及到多项式回归时,为数据中的关系提供充分的理由是很重要的。

来源: flaticon

最初的行为是有意义的。随着房屋的老化,它们会越来越破旧,失去价值。房地产专家会有更好的理解,但也许,经过一段较长的时间,房子会变得古色古香。随着人们开始重视他们悠久的历史,他们的年龄会增加价值。也可能有一些选择偏差来解释这种上升趋势。也就是说,昂贵的房子往往不会被拆除,因此出售的唯一老房子就是这些昂贵的房子。

标准线性回归

不管是什么原因,因为这种关系不是线性的,我们不会期望一个标准的线性模型做得很好。让我们通过尝试使用线性回归来展示仅使用年龄的房价模型。我们通过以下方式做到这一点:

  1. 将数据集随机分成训练集(70%)和测试集(30%)。
  2. 使用训练集训练模型。
  3. 通过对测试集进行预测并计算 MSE 来评估模型。

按照这个过程,我们将最终得到一个由以下等式表示的模型:

房价= β₁(age) + β₀

其中β₁和β₀是由模型估计的参数。这个方程也可以称为模型的预测线。它给出了给定年龄的预测房价。

在图 2 中,我们可以看到在数据集上使用该模型的结果。这里,红线给出了预测线。看这条线,我们看到模型在捕捉潜在的二次趋势方面做得不好。我们可以使用测试集 MSE(145.91)来总结该模型的准确性。

图 2:标准线性回归

多项式回归

现在让我们尝试使用多项式回归来改进我们的模型。最终,由于关系似乎是二次的,我们期望下面的等式能做得更好:

房价= β₂(age ) + β₁(age) + β₀

问题是,如果我们对当前数据集使用线性回归,就不可能得到这样的方程。为了解决这个问题,我们可以简单地添加一个新的变量到我们的数据集,年龄。为了避免混淆,让我们把它重新标记为年龄平方。增加这个特性,允许我们把非线性方程改写成线性方程:

房价= β₂(age_squared) + β₁(age) + β₀

我们现在有一个两个变量的线性函数(即年龄的平方&年龄),它实际上是一个变量(即年龄)的非线性函数。这允许我们像以前一样使用线性回归来估计β参数。我们可以在图 3 中看到最终的预测线。在这种情况下,测试 MSE 为 127.42,比我们之前的模型低 13%。所以这个新模型在预测房价方面做得更好。

图 3:随年龄的多项式线性回归

通过使用这个新特性,年龄,我们正在做多项式回归。概括地说,每当使用 n 次多项式来模拟目标和特征之间的关系时,就要进行多项式回归。比如:

房价= βn(ageⁿ)+…+ β₂(age)+β₂(age)+β₁(age)+β₀

通过添加这些功能,我们可以在数据集中模拟更复杂的关系。在我们上面的模型中,我们有 n =2,但是我们可能通过使用更高次的多项式得到更好的结果。也就是说,通过添加更多的功能,我们也可能会过度适应我们的数据。

多项式回归过度拟合

当模型与训练数据集过于接近时,我们称之为过度拟合。该模型捕捉数据中的噪声,而不仅仅是潜在的趋势。其结果是,该模型可能在训练数据集上表现良好,但在测试数据集上表现不佳。事实上,我们不会期望该模型在任何未经训练的数据集上表现良好。

过度拟合通常是因为模型太复杂或特征太多。随着你添加更多的特性,你就越有可能过度适应。随着多项式回归次数的增加,也会发生同样的情况。在图 3 中,您可以看到这意味着什么。我们遵循相同的建模过程,但是每一步,我们增加多项式的次数。我们从 n=1 开始,到 n=25 结束。请注意,随着度数的增加,预测线变得更加扭曲。

图 3:增加 x 次方对回归的影响

现在的情况是,随着你增加度数,你允许模型有更多的转折点。二次多项式有 1 个转折点,三次多项式有 2 个转折点,依此类推…对于每个额外的转折点,我们给予模型更大的自由度以更接近训练数据集。对于更高的度数,模型可能只是捕捉噪声。真实的潜在趋势不太可能如此复杂。

另一种可视化的方法是查看训练集和测试集的 MSE。如图 4 所示,随着度数的增加,训练 MSE 趋于减小。这意味着模型在训练集上变得越来越准确。测试 MSE 讲述了一个不同的故事。当 n=2 时,测试 MSE 最小,之后趋于增加。这意味着模型在测试集上的表现越来越差。换句话说,随着我们增加程度,模型变得更加过度拟合。

图 4:训练和测试的 MSE

如何避免过度拟合

我们已经看到了多项式回归是如何出错的。现在的问题是,我们如何选择正确的程度,避免过度拟合。像任何机器学习模型一样,我们希望训练一个具有在测试集和训练集上都表现良好的特征组合的模型。这样,为多项式回归选择最佳特征的过程与任何其他机器学习问题没有什么不同。

坚持组

一种常见的方法是使用拒绝集。对于这种方法,数据集被分成训练集和保留/测试集。对于不同的特征集,模型在训练集上被训练,并在测试集上被评估。在这里,我们使用 MSE 等指标来评估性能。我们通常会选择在测试集上表现最好的特性集。

看着上面所做的工作,我们可以将这个方法应用到我们的房价例子中。在这种情况下,n=2 的模型具有最小的测试 MSE。这意味着我们将只在最终模型中使用年龄和年龄。这似乎是一个合理的结果,因为真正的潜在趋势似乎是二次的。我们也想出了一些逻辑上的理由来支持这个结果。

k 倍交叉验证

类似的方法是使用 k-fold 交叉验证。这里,我们将数据集划分为 k 个大小相等的子集\折叠。然后,我们在 k-1 个折叠上进行训练,并计算剩余折叠的 MSE。我们重复这个步骤 k 次,这样每一次折叠都作为测试集。模型的最终得分将是所有测试折叠的均方误差的平均值。具有最低平均 MSE 的模型将被选为最终模型。图 5 显示了如何使用 5 重交叉验证来划分数据集的示例。在这种情况下,我们将计算 5 次测试折叠的平均 MSE。

图 5:五重交叉验证示例

领域知识和常识

使用拒绝集和 k-fold 交叉验证通常可以给你一个好的模型。但是数据是杂乱的,统计异常可能发生。仅仅盲目地使用这些方法而不考虑你的问题,你仍然会偶然地得到一个坏的模型。到目前为止,我们已经使用一个特定的训练测试分割执行了上述分析。在这种情况下,我们得出结论,年龄模型是最好的。但是,如果我们使用不同的随机列车测试分裂呢?

您可以在图 6 中看到我们的意思。这里,我们遵循与之前完全相同的过程,除了这一次,我们使用不同的随机训练测试分割。在这种情况下,测试 MSE 最低,n = 8。通过使用拒绝方法,我们将使用它作为我们的最终模型。

图 6:具有替代训练测试分割的 MSE

此时,你应该问问自己,使用 8 次多项式是否有逻辑意义。我们的预测线将采用以下形式:

房价=β₈(age⁸)+β₇(age⁷)+…+β₂(age)+β₁(age)+β₀

价格和年龄的关系真的有那么复杂还是以上结果只是统计上的异常?答案可能是后者,这强调了为什么我们不应该仅仅依赖于像 k 倍交叉验证这样的方法。

在选择特性时,考虑您的问题并应用任何领域知识是很重要的。在我们的房价例子中,n = 2 的模型似乎捕捉到了潜在的趋势。我们也为这种关系提出了一些很好的潜在原因。考虑到这一点,这种模式可能更好。一般来说,如果你包含的特征有一个逻辑上的原因来解释为什么它们是可预测的,那么你就不太可能捕捉噪音和过度拟合。

图像来源

图片是我自己的或从www.flaticon.com获得。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

参考

[1] J. Frost,过度拟合回归模型:问题、检测和避免(2020),https://statisticsbyjim . com/Regression/over fitting-Regression-Models/

[2]机器学习中的过度拟合:什么是过度拟合以及如何防止过度拟合(2020 年),https://elitedata science . com/overfit-in-Machine-Learning

数据太多,时间太少

原文:https://towardsdatascience.com/too-much-data-too-little-time-1e7441ecdae1?source=collection_archive---------40-----------------------

你不需要用 1000 个特征来处理这 200 万个数据点就能得到好的结果

照片由法比奥Unsplash 上拍摄

我们都知道为什么数据越多越好。你的结果可以更可靠,你可以(有希望)决定性地证明或否定一个给定的假设。然而,有这样一种东西,即拥有太多的数据,或者至少拥有如此多的数据,以至于很难有效地运行某些模型。根据您的具体问题,有几种不同的方法可以解决这个问题。

我有太多的数据点

仅仅因为您从数百万个数据点开始,并不意味着您必须通过您选择的任何模型实际运行所有这些点。事实上,不这样做是个好主意!当你处理数据时,你需要做的第一件事是编辑你的数据,这样每个点实际上都是有用的,因为越大并不总是越好。

第一步:检查异常值

说你的项目和人口身高有关。你想做的一件大事是制作某种直方图,显示人们的身高分布。如果你看到一堆 0 以上的人,很可能你面对的不是微观的一部分人(除非这些数据来自《格列佛游记》中的某个岛屿)。出于同样的原因,如果有很多测量值明显偏高,那么您也会发现更多可以从数据框中剔除的异常值。基本上,除非有可解释的原因(比如从人口异常多或异常少的岛屿收集数据),否则这些异常值可以而且应该从数据集中剔除。

为什么领域知识很重要:有时候有一个离群值是有原因的(来源:维基共享资源)

第二步:明确你的问题并采取相应的行动

这比第一个问题不太容易理解,但在清理数据时仍然非常重要。假设您有一个数据集,记录了客户的每次购买。如果您想要查看最近的购买趋势,您可能想要只包括客户最近的购买,或者只包括在特定时间范围内记录的数据点。如果你想知道顾客买了什么,把每个顾客的购买量加起来,每个顾客一行可能更有用。

相关地,使用你的领域知识。如果你没有大量的领域知识,问问周围的人或者查查资料。有了领域知识,不仅你的假设会更清晰,而且你会更好地知道你需要拒绝或确认你的假设。举一个非常基本的例子,如果你的假设是购买高于平均水平的美容产品的人也购买更健康的食物,你可以使用美容产品或非美容产品的领域知识来过滤你的数据集。当然,这是一个高度简化的例子,但是你明白了。

本质上,明确你的实验和你的假设,明确你需要什么信息来证明或反驳你的假设。没有一个明确的解决方案,就像检查异常值一样。这是数据科学的一部分,需要更多的创造力和批判性思维,但在创建高质量的数据集方面非常有价值。

我有太多的特征了

如果我们正在处理一个数据帧或表,最后一节解决了行太多的问题。本节处理列太多的问题。就像你不需要每一个数据点来运行一个好的模型一样,你也不(一定)需要每一个特性。事实上,如果你有太多的功能,你可以为手头的问题编辑它们。

第一步:检查给定列的信息量

并非所有特征都是同等创建的。有些列几乎肯定会包含每个数据点的数据(那些在该行中没有数据的列可能会被丢弃)。但是,一些更专业的功能可能没有每行的信息。它们也可能只有少数数据点的值。例如,回到有一个顾客购物行为的数据框架的例子,如果有一个关于有多少人购买了限量版培根风味酸奶的列,而只有 5 个人购买了它,那么完全删除该列可能会容易得多。也就是说,如果仅仅抛弃一整列的想法让你感到厌恶,你也可以尝试将多个特性合并到一个特性中。回到我们的培根风味酸奶的例子,您可以将所有酸奶风味的购买合并到一个列中,该列只显示消费者购买了多少酸奶。您还可以将列合并成某个品牌的产品被购买的数量。同样,这是一个很好的例子,说明领域知识和批判性思维是数据科学家的重要工具。通过确切地知道你需要什么来证明或否定一个假设,你可以将特征压缩成一个仍然能提供你需要的信息的特征。

第二步:检查共线性

什么是共线性?就是共线的性质。共线是什么意思?如果我们看一下维基百科页面,共线意味着以下内容:

如果两个变量之间存在精确的线性关系,则这两个变量完全共线。

本质上,当一个自变量增加时,另一个自变量以相同的速度增加或减少。检测和纠正这个问题可能会非常复杂,可能会有自己的博客文章。事实上,有人就此写了一篇博文!因此,这里不再讨论共线性,这里是 TDS 的帖子,它更详细地讨论了什么是共线性以及如何解决它。

第三步:套索回归

照片由普里西拉·杜·普里兹Unsplash 拍摄

人们使用两大正则化技术,套索和岭回归。两者都通过惩罚某些数据特征来降低模型复杂性和防止过度拟合,你可以在这里和这里阅读更多关于它们如何工作的信息。我在这种情况下指定套索回归的原因是,与岭回归不同,套索回归会将一些系数减少到 0(基本上消除了该特征),而岭回归只会使它们变得非常非常小。因此,如果你的主要目标之一是减少维度(或者数据框架中的列数),那么 lasso 回归将是一个不错的选择。

第四步:PCA

在上述所有步骤中,尽管您可能会删除一些功能或将多个功能浓缩为一个,但您仍然知道每个功能是什么以及它表示什么。我特意把主成分分析(PCA)放在最后的原因是,你将不再知道你所有的特征是什么。然而,PCA 的明确目的是减少数据维数,所以它是一个有用的工具,尽管我个人认为它是最后的手段。

有两种方法可以实现 PCA,您可以指定想要保持多少方差(例如,您可以说您想要保持 85%的方差)。你也可以说你希望最终的数据帧有多少个变量(例如,你可以说你只需要两个或三个变量,这样它们就可以被绘制在图上)。在第一个示例中,您不知道将返回多少个变量,在另一个示例中,您不知道保留了多少方差。因此,您采取的方法取决于您想要实现的目标。例如,您想要易于可视化的数据吗?如果是这样,您需要指定两个或三个变量。你想仅仅简化你的数据框架,仅仅减少变量的数量吗?在这种情况下,请指定要保留的差异百分比。

结论

虽然除了我在这里介绍的方法之外,可能还有其他编辑和简化数据集的方法,但是当您需要编辑和简化数据时,这是一个很好的起点。虽然有很多技术步骤可以实现(如 PCA 和岭回归),但数据编辑的一个重要组成部分是利用您的领域知识和批判性思维。虽然数据科学家当然需要了解统计和算法,但这也是数据科学家需要创造力和跳出框框思考的能力的原因。

拿了一个机器学习的硕士学位,我(非常)没有准备

原文:https://towardsdatascience.com/took-a-masters-in-machine-learning-and-i-was-very-unprepared-7aba95f044a8?source=collection_archive---------3-----------------------

我从全职到人工智能硕士生过渡的探索。

Unsplash 上由 Gery Wibowo 拍摄的照片

我其实在题目里撒了谎——喘气,我没有考机器学习硕士。那是在计算机视觉、机器学习和太空机器人学。

陈述确切的过程可能会增加对学位难度的理解…也可能不会。外面的天才可能会想,“ meh 听起来像在公园里散步”,但我向你保证不是。

背景

去年 12 月,我写了一篇文章,强调了我申请的一个数据科学职位遭到拒绝的情况。我将在本文末尾为感兴趣的人放置一个链接。

我关于我被拒的文章传开了(在 Medium 上),有几个人通过 LinkedIn 联系我,询问我读机器学习硕士的经历如何,更重要的是,这是否值得?

我将为您节省一些时间和麻烦,并通知您,在机器学习等有前途和发展中的领域拥有高级资格或学位是绝对值得的。

从我目前的经验来看,我注意到雇主不仅需要某个领域的专业知识;他们还要求资格证明。

拥有神经网络的实践和理论知识,或者详细了解反向传播的工作原理,会让你在竞争中脱颖而出。

但是我偏离了这篇文章的主要观点,将回到我是如何对机器学习硕士学位毫无准备的。

自负

对于那些熟悉过于自信的人,我们知道它有各种各样的形式。

对我来说,它有两种形式。

首先,我对自己在软件工程本科学位(BSc)的优异表现过于自信。那时,关于软件开发生命周期的一切似乎都一拍即合。随着我一次又一次地经历这个过程,设计、实现和测试软件应用程序成了我的第二天性。

这种软件开发的便捷性随后投射到了我四年的 Web 开发生涯中。我知道如何开发一个网站的用户界面,由一个具有 API 的完善的后端系统和一个连接的数据库系统支持,该系统托管在一个托管平台上,如亚马逊。简单对吗?

我错误地认为机器学习对我来说会像网络开发一样容易。

伙计,我错了。对我来说一点都不容易。

我的第二种过度自信来自于低估了机器学习领域整体的复杂程度。

我对机器学习可能有多难的天真,部分是因为那些华而不实的新闻文章,这些文章提到“一名 10 年的执业律师如何在 3 个月内成为一名数据科学家”。

你无法逃避围绕人工智能的大肆宣传。

三个月。

我的近期目标是在三个月内学会机器学习。所以,我买了这本书。

对于那些不熟悉这本书的人来说,这就像你给一个小学教育的孩子一本关于微积分的书;或者就像通过阅读一本关于火箭船的书来学习如何修理自行车一样——我在这里有些夸张,但你已经明白了。

这本书里的术语和方程式对我来说就像一种完全不同的语言。直到今天,有些仍然如此。

老实说,这本书的内容吓坏了我,结果我把研究机器学习与这个星球上最具挑战性的事情之一联系起来。

快进到现在,我不得不承认,这本书对于任何渴望认真对待机器学习的人来说都是必不可少的。这本书是为那些希望超越框架、API 和库的人准备的。

我原以为机器学习会轻而易举,结果却更像是一场龙卷风。

提示:如果你正着手研究机器学习,从小处着手。这里有一个自我激励的资源:

[## 如何学习机器学习,自我启动的方式

如果你已经选择认真研究机器学习,那么恭喜你!你有一个有趣且有意义的旅程…

elitedatascience.com](https://elitedatascience.com/learn-machine-learning?utm_source=mybridge&utm_medium=web&utm_campaign=read_more)

毫无准备

我的过度自信导致我在攻读学位时缺乏准备。

首先是数学,然后是论文,最后是紧张的学习——起床后睡在图书馆学习。

不幸的是,在我的学术生涯中,数学和我从来都不是最好的朋友。获得硕士学位也没有什么不同。尽管如果你在高中或大学时数学或统计学很强,那么与机器学习相关的数学可能一点也不令人生畏。

对我来说,恰恰相反;我喜欢学习反向传播,但是寻找函数的偏导数并不有趣。但这是必须的。

在工作了三年之后,我已经习惯了为了赶上发布日期而一坐就是几个小时。

但是硕士学位要求更多。

我不得不将我的注意力和集中力提高四倍。这很有挑战性,我为这个学位的前半部分而奋斗。

一旦我让自己沉浸在学习小组中,在图书馆安静的房间里,使用生产力应用程序,对我来说专注变得更加舒适

提示:如果你发现很难放下手机,远离社交媒体平台,那么使用森林:

[## 森林

Forest 是一款帮助你远离智能手机,专注工作的应用。

www.forestapp.cc](https://www.forestapp.cc/)

从教科书中学习和在 StackOverflow 上寻找解决方案是非常不同的。

只有在几门硕士课程中表现不佳后,我才意识到,在大学里,你周围有一个资源库。

所以我和一些我见过的最聪明的人进行了一对一的谈话。我上网找到了一个很多机器学习工程师和数据科学家都很熟悉的 YouTube 频道,3Blue1Brown。

[## 3 蓝色 1 棕色

格兰特·桑德森的《3blue1brown》是数学和娱乐的结合,这取决于你的喜好。目标是…

www.youtube.com](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw)

最后,写论文。论文写作本身就是一种技能,而我严重缺乏这种技能。当然,我可以花几个小时在笔记本电脑上打字,但那是在调试或实现代码的时候。写作文就不一样了。

文章写作是我必须通过经常练习来学习的东西。我在网上没有找到任何资源可以帮助你获得机器学习方面的论文写作技能。

提示:练习在媒体上撰写和发表解释机器学习主题和概念的文章。从某种意义上来说,这和写论文很相似,你必须进行研究,并能言善辩地写作(有时是)。下面是这类文章的一个例子:

[## 理解梯度下降及其变体

简要了解机器学习模型中的学习过程是如何得到优化支持的…

towardsdatascience.com](/understanding-gradient-descent-and-its-variants-cf0df5c45478)

经验教训

不要低估机器学习(或任何专业学位)

简单的说,机器学习不是闹着玩的。个人已经将他们的生命奉献给了开发机器学习内部的主题和角落,所以当我告诉你你不可能在三个月内掌握或学习机器学习时,请相信我。在最好的情况下,你可能知道一些在很短的时间内很容易理解的常见概念。

不要低估你的能力

在整篇文章中,我提到了我的缺点。然而,我必须给自己一些荣誉,因为我克服了所有的困难,设法完成并通过了我的硕士学位。如果你曾经克服了你认为不可能的事情,你也应该给自己一些信任。

不要高估你的能力

既然我们都拍了拍自己的背,是时候谦虚一下了。如果我只是做了充分的准备,我就不会经历硕士期间的所有混乱。我在软件开发方面的能力蒙蔽了我,我错误地将学习机器学习比作学习新的 web 开发框架或库。

你在一个领域的成功并不能保证你在另一个领域的成功,即使它们可能是相关的。我知道,这似乎是显而易见的,但不得不说。

永远让自己完全沉浸其中

诚实地说,长时间保持全神贯注的能力应该被认为是一种超能力。在当前的数字时代,时间和注意力是新的黄金,您设备上的移动应用程序经过优化,每次都能吸引您的注意力。

你需要重新获得自制力,能够断开互联网。从长远来看,断开一个小时左右的联系,利用这段时间专注于一项特定的任务可能会有所收获。

能够集中注意力是一项需要培养的技能,所以要有耐心,从小处着手。

结论

如果你已经做到了这一步,我告诉你学位的结果是公平的。我通过了硕士考试,获得了与人工智能相关的各种主题的有用知识。

我确实发现,在我的硕士课程中(所以这可能不是标准),你不会学到实际的技能,比如部署你的 ML 模型,建立数据库。我没有听说过像 Sci-Kit Learn、Numpy 和 Pandas 这样的标准数据科学库。但是你可以自己独立地学习所有这些。

攻读硕士学位可能不是获得机器学习或其相关领域工作的必要条件,但它确实有助于你入门。

如果你有一个 ML 硕士学位和一些很酷的项目/投资组合,你将拥有别人可能没有的竞争优势。

这是我拒绝文章的链接,如下面所承诺的,如果你喜欢这篇文章并想看更多,给我一个关注。

[## (拒绝)来自我的第一次数据科学面试

拒绝是获得数据科学工作的整个过程的一部分。但它并不经常被提起。这是我的账户…

towardsdatascience.com](/rejected-from-my-first-data-science-interview-c9784dd65296)

这里有一篇来自David Chong的有趣文章,他在文章中探索了机器学习/数据科学研究后的现实。

[## 我有人工智能硕士学位。现在怎么办?

更多的时候,人们开始了硕士课程,以进一步他们在某一领域的专业知识或获得一些…

towardsdatascience.com](/i-have-a-masters-in-artificial-intelligence-now-what-a71a92b4c51)

在线共享 Jupyter 笔记本的工具

原文:https://towardsdatascience.com/tools-for-sharing-jupyter-notebooks-online-28c8d4ff821c?source=collection_archive---------2-----------------------

马文·迈耶在 Unsplash 上的照片

与非程序员共享 python 笔记本的三个工具

我最近开始帮助一个新的数据项目,这个项目是由我的一个朋友建立的。项目的数据部分是一个分析部分,将一些自然语言处理应用于调查中基于文本的回答。我为这个项目创建了一个 Github 库,并在一个 Jupyter 笔记本中完成了分析。

作为这个项目的一部分,我希望能够与非程序员分享这些笔记本,他们不一定熟悉 Github。这是大多数数据科学家面临的共同问题。

Jupyter 笔记本是探索性数据分析的伟大工具,但在项目中需要与非程序员利益相关者分享这种分析是很常见的。幸运的是,有很多工具可以让非 Github 用户在线托管笔记本。

在下面的文章中,我将介绍如何使用其中的三种工具,并讨论每种工具的优缺点。

安装

为了测试这些工具,我创建了一个 Github 库和一个样本笔记本。

如果您还没有 Github 帐户,您可以免费创建一个。如果你对创建、克隆和推送 Github 库不熟悉,我之前在这里写了一个指南。

我创建了一个 Github 存储库,用于测试,结构如下。

笔记本文件夹包含一个笔记本,该笔记本由 Kaggle 数据集的机器学习工作流组成,该数据集包含标记为灾难或非灾难的推文。关于这个数据集和数据的信息可以在这个链接中找到。

可以在下面查看笔记本的快照。

现在让我们来看一些与非程序员共享这个笔记本的方法。

Jupyter nbviewer

Jupyter nbviewer 是 Jupyer 社区创建的一个工具,用于呈现 Github online 上托管的笔记本。

使用起来极其简单。只需将笔记本的 URL 粘贴到这个网页中。

笔记本现在通过一个独特的链接呈现,您可以与他人共享。

优点

  • 使用起来极其简单。
  • 只要笔记本在 Github 存储库中的位置不变,Link 就会保持活动状态。

劣势

  • Nbviewer 只渲染笔记本的输入和输出。链接中的代码不可执行。
  • 为了减少渲染时间,nbviewer 缓存输出大约 10 分钟。因此,在查看您在链接中所做的任何更改时会有延迟。

粘合剂

Binder 是另一个共享笔记本的开源项目。Binder 不仅在笔记本中呈现输入和输出,还构建存储库的 Docker 映像,使托管笔记本具有交互性。

要共享笔记本,请导航到此链接。与 nbviewer 不同,您需要添加存储库 URL,而不是笔记本的路径,如下所示。您可以选择将路径添加到笔记本,但是如果留空,Binder 将通过链接提供整个存储库。

Binder 将需要几分钟来构建 docker 映像。

该笔记本现已在网上出售。链接的接收者可以查看代码和输出并与之交互。

优点

  • 笔记本可以作为可执行代码使用,因此意味着接收者可以复制您的项目并与之交互。
  • 简单易用,不需要注册账户什么的。
  • 当对存储库进行新的提交时,docker 映像会自动重建。

缺点

  • Github 存储库需要包含 Docker 映像的配置文件。可接受的格式包括 environment.yml、Pipfile、requirements.txt、setup.py。这并不是一个缺点,但如果您还没有使用过这些文件,这可能会增加您的复杂性。

木星的

Jovian 是一个跟踪和协作数据科学项目的平台。该平台的一部分是一个在线托管 Jupyter 笔记本的工具,与上面提到的其他工具略有不同。Jovian 是开源的,但在定价上也有一些企业元素。免费层给你无限的公共项目和访问 5 个私人项目。这足以快速共享偶尔的笔记本。

要上传笔记本,您首先需要创建一个帐户。一旦注册,你需要在你的项目虚拟环境的机器上安装 jovian。这可以通过带有pip install jovian的 pip 安装。

要上传笔记本,请添加import jovian。准备好共享笔记本后,请键入以下内容。

jovian.commit()

这将要求提供 API 密钥,您可以在 jovian.ml 网站上的帐户中找到该密钥。

一旦你输入了密钥,几秒钟后你会得到一个“提交成功!”消息。

如果您现在转到您的个人资料页面,您将看到您的笔记本。Jovian.ml 捕获并上传 python 虚拟环境和笔记本,以便合作者可以与代码进行交互。

如果您导航到笔记本,您可以添加协作者或使用链接与其他人共享。

优势

  • 共享选项适合程序员和非程序员,因为您可以选择简单地查看静态输入和输出,或者克隆并运行您自己的版本。
  • Jovian 允许细胞水平的评论和讨论,这是一个非常好的功能。

劣势

  • 你需要有一个 Jovian.ml 帐户,并且需要在本地安装 Jovian 来共享你的笔记本,因此这个工具比其他两个选项需要更多的设置。
  • 笔记本需要单独上传到 Jovian.ml,所以如果你使用 Github 进行版本控制,你需要提交两次,你的项目可能会在两个不同的地方。

本文概述了在线共享 Jupyter 笔记本的三种工具。每种工具本身都非常有用,我肯定会使用这三种工具。然而,对于我在文章开头提出的目的,即与非程序员共享笔记本,nbviewer 绝对是我会选择的选项。这是最简单的选择,并且为我提供了我所需要的,一种仅查看的共享形式。

感谢阅读!

我每月发一份简讯,如果你想加入请通过这个链接注册。期待成为您学习旅程的一部分!

Python 中每个数据科学项目都应该使用的工具

原文:https://towardsdatascience.com/tools-you-should-be-using-on-every-data-science-project-in-python-3df506705ab7?source=collection_archive---------23-----------------------

保持组织有序和高质量的软件开发工具

数据科学中使用的软件和软件包有许多在线列表。熊猫、Numpy 和 Matplotlib 始终是特色,还有机器学习库 Scikit-learn 和 Tensorflow。

然而,同样重要的是一些不太特定于 DS 的软件开发工具,它们应该成为每个项目工作流程的一部分。

托德·夸肯布什在 Unsplash 上的照片

饭桶

版本控制对于任何编码项目都是必要的,数据科学也不例外。在任何规模的项目中,跟踪谁在什么时候做了什么,并拥有一个工作的、经过测试的代码的全面历史是无价的,尤其是在与他人合作时。

Git 跟踪对您的代码库所做的更改,维护代码版本的注释审计跟踪。可以从主存储库中克隆代码用于开发,然后提交带有注释的更改,并在充分测试后推回。您可以在任何时候在版本之间切换,并创建分支来分离主要特性的开发,然后将它们合并回主分支。

这允许多人同时处理同一个代码库的不同特性,而没有覆盖其他人的工作的风险。根据您团队的结构和项目的规模,您可能希望在合并之前围绕测试和代码审查制定一些策略。

照片由扎克·赖纳Unsplash 上拍摄

GitHub(归微软所有)可能是最受欢迎的 Git 存储库托管服务,但也存在其他替代服务,如 GitLab、BitBucket 和 Launchpad。这些工具都提供了各种各样的管理工具来帮助进一步组织您的项目,例如路线图和问题跟踪。

一个很棒的教程可以在这里找到,但是没有什么比实践更好,所以确保你的下一个项目充分利用了版本控制和它的所有特性。

康达

管理您的环境对于代码的可复制性至关重要。没有人希望在克隆一个 git 存储库后,花费数小时修复兼容性错误,安装和重新安装模块。Conda 通过虚拟环境来处理这个问题,你可以在虚拟环境中安装你需要的软件,然后在它们之间轻松切换。这允许您保持您的环境简约和干净,只包括您当前项目需要的包。

Anaconda Navigator 是一个可移植的 GUI,它使得管理 VEs 变得非常容易。只需创建一个新的环境,搜索您想要使用的包并点击“应用”来添加它们。从那里,您可以在终端、直接 Python 或 Jupyter 笔记本中访问该环境。

我经常不得不在多台机器和操作系统上工作,因此快速轻松地安装我需要的工具的能力非常有用,使我可以避免移动数据。

大卫·克劳德Unsplash 上拍摄的照片

如果你使用的是终端,Conda 以学习一些命令为代价提供了更多的灵活性。这包括将环境导出为。yml 文件,可以导入到其他地方。将这些环境文件保存在您的 Git 存储库中意味着其他人在尝试运行您的代码之前很容易复制您的环境。

Tim Hopper 在这里详细介绍了使用 Git 和 Conda 的工作流程。

统一测试

布莱恩·克尼根曾经写道:

每个人都知道调试比一开始写程序要难两倍。所以,如果你在编写它的时候尽可能的聪明,你将如何调试它呢?

每个人都知道,当一个项目进行到一半时,事情比你预想的要复杂得多,这种沮丧的感觉。80/20 法则经常适用,你花 20%的时间完成 80%的工作,然后是最后的 20%导致所有的头痛。数据科学项目的复杂性可能会迅速上升,让你的脑袋适应所有的活动部分可能会很棘手。

因此,将您的项目分割成更小、更简单的组件对于协作和创建健壮的代码而不迷失在复杂性中是至关重要的。当处理一小段独立的代码时,单元测试会让您确信它正在按预期工作。这让你可以忘记它是如何工作的,而只关心它做了什么——一个名为“黑盒抽象的概念。

国立癌症研究所Unsplash 上拍摄的照片

Python 附带安装了 Unittest 框架。使用这个框架,您可以使用各种 assert 语句指定任意多的测试来检查函数的输出。这些可以作为脚本运行,使测试变得容易,并在编辑时继续测试代码的正确性。

例如,假设您正在著名的泰坦尼克号数据集的“Cabin”字段上进行一些特征工程。您可能希望编写一个函数,从船舱值“C38”中提取甲板字母“C”。在编写完函数之后,您可以指定一些测试用例以及预期的输出。如果这些单元测试都像预期的那样运行,那么您可以确信您已经正确地编写了函数。

进一步设想,以后,您希望添加提取客舱号码“38”的功能。在编辑功能时,你不想破坏原有的功能。将这些单元测试放在手边,以确保没有任何东西被破坏(如果有,使用 Git 来恢复您的更改),这使您能够编辑代码,而没有损坏您以前构建的东西的风险。

数据科学中的测试有其自身的一系列挑战。您的代码所依赖的底层数据可能会在不同的测试之间发生变化,这使得难以重现意外的行为,并且数据的大小可能会使常规测试非常耗时。解决这个问题的一个好办法是使用静态的数据子集进行测试。这允许您在几秒钟内明确调试任何奇怪的行为并运行您的代码。您还可以添加虚拟的数据点来测试您的代码如何响应边缘情况。

关于如何使用 Unittest 的更多细节可以在这里找到。

还有其他的吗?

你能在上面的列表中添加更多的例子吗?

2020 年及以后的十大人工智能趋势

原文:https://towardsdatascience.com/top-10-ai-trends-for-2020-d6294cfee2bd?source=collection_archive---------6-----------------------

图片由皮克斯拜的 Gerd Altmann 提供

人工智能在工作场所的兴起支持和维持数字劳动力是 2020 年的明显趋势。

人工智能、机器学习、神经网络或任何其他行业正在出现的花哨术语,被定义为复杂的计算机技术,正被广泛用于理解和改善业务和客户体验。我假设你以前听说过它,但是今天它的定义是计算机科学的一个领域,强调创造像人类一样工作和反应的智能机器

以下是今年值得关注的十大人工智能趋势:

照片由莫赫达姆·阿里Unsplash 上拍摄

对数字智能的需求。

随着越来越多的企业意识到他们必须了解自己的运营,数字智能将在每个数字化转型战略中发挥越来越重要的作用,它是衡量组织从各种关键角度了解其业务流程以及其中的内容和数据的能力的标准。

数字智能解决方案将通过优化自动化计划和补充 RPA 和 BPM 等平台,帮助组织提高这种业务关键型能力。2020 年,随着企业意识到这些解决方案照亮了改善客户体验、降低运营成本和增强竞争优势的道路,更多的组织将在其总体数字化转型计划中采用数字智能技术。(如之前发布的此处。)

图片由 www_slon_pics 来自 Pixabay

数字工作者将改变办公室。

正如我最近谈到的,全球范围内数字工作者的使用越来越多。根据新的 IDC 研究报告,到 2022 年,数字工作者——如软件机器人和人工智能——的贡献将增长 50%以上。(如前所述此处。)

每个人类工作者都有一个数字工作者。预计许多数字机器人将在办公室承担极简任务。数字工作者将接受培训,像任何员工一样执行业务任务,只是速度更快,没有错误。未来,整个企业的所有员工都将有数字工作者与他们并肩工作。这在工作场所将变得非常正常,你肯定会在你的工作场所看到更多这样的技术(继续阅读了解原因)。

图片来自 PixabayGerd Altmann

过程智能的扩散。

如果你以前没听过,今年你一定会看到。流程智能允许企业使用其系统中包含的信息来创建其流程的可视化模型,实时分析它们以识别异常值和瓶颈,并预测未来结果以促进技术投资决策。

随着更复杂的数字化转型技术的部署,监控组织各个方面的运营变得越来越重要。管理非常具体的功能(CRM、ERP、CMS、EHR 等)的单独技术系统。)只提供对其平台控制的流程的可见性。这些独立的系统都无法提供全面而深入的洞察力。

[## 过程智能增强供应链的 7 种方式

随着供应链变得更加全球化和复杂,监控和管理流程变得越来越困难

medium.com](https://medium.com/@ryraiker/7-ways-process-intelligence-enhances-the-supply-chain-6d83b444ba5e)

为了获得这种可见性,组织需要利用流程智能技术,提供所有流程的全面、准确和实时的视图—跨部门、职能、人员,甚至不同的位置。在未来的几年中,更多的企业将会认识到,流程智能使组织能够更好地理解和更有效地管理他们的端到端流程,这些技术将会成为企业的标准。(如之前发布的此处。)

图片由 Gerd AltmannPixabay 拍摄

人工智能不仅适用于消费者,也适用于企业。

作为消费者,我们每天都在体验人工智能,但往往不知道它正在被使用。在企业中,预计到 2020 年,流程负责人和那些领导客户体验改善计划的人将会看到他们对人工智能工具的参与和访问大幅增加。

许多企业在数字化转型项目上花费了数百万美元,但这些项目从未与企业需求保持一致。当然,他们仍然想知道为什么他们失败了。只有解决业务问题,并确保 it 解决正确的问题,才能确保在 2020 年及以后的企业中取得数字成功。不要只是为了拥有 AI 或 RPA 而拥有它们,要让技术与业务保持一致。

正如 Nathan Furr 和 Andrew Shipilov 在他们的文章中解释的那样,打破了《哈佛商业评论》中关于数字颠覆的观点,,“管理者通常认为数字转型主要是关于技术变革。当然,这涉及到技术变革,但聪明的公司认识到,转型最终是为了更好地服务于客户需求,无论是通过更有效的运营、大规模定制还是新的产品。”

人工智能将变得更容易在工作场所使用。商业用户将很快进入机器人和其他易于使用的自动化工具的内部市场,所有技术熟练的人都可以使用这些工具。这些新平台将在改善员工完成工作的方式方面发挥作用,从而改善客户体验,使流程优于竞争对手。

人工智能将监测和改善业务流程。

但是你不能改善你不理解和衡量的东西。

虽然简单的任务自动化已经成为工作场所的常见做法,但高度自动化(如【2020 年十大技术趋势中所述)和智能、认知自动化项目取决于集成人工智能工具的能力,以重塑和重新定义业务流程的实时执行方式。RPA 本身并不智能;这是简单的基于规则的任务自动化。

Derek Miers 是 Gartner RPA 软件魔力象限的高级总监兼分析主管。Miers 参加了今年的 Gartner Symposium/ITxpo,他在会上发表了一篇讲话,对当今存在的 RPA 提出了令人惊讶的批评。

“你所做的是用创可贴覆盖组织,希望能有一个健康计划,”迈尔斯解释道。"你必须修正流程。所以,你真正要做的是在你的旧应用程序前搭建一个小门面,你可以重复使用。”

实现认知自动化将需要为这项任务构建新的工具。人工智能支持的流程和内容智能技术将为数字工作者提供处理自然语言、推理和判断所必需的技能和理解,建立上下文,提供数据驱动的见解。

RPA 工具本身不是用人工智能构建的智能机器人,因此它们需要人工智能驱动的解决方案来实现智能。监控整个企业的流程并触发 RPA、capture 或其他工具的能力将由理解流程(参见上面的流程智能部分)和作为流程有效负载的内容的工具来处理。

简而言之,RPA 的作用是自动化以前由人类处理的重复性任务。该软件被编程为跨应用程序和系统执行重复性任务。该软件被教导具有多个步骤和应用的工作流程。”–安东尼·爱德华兹,首席运营官在茄子

图片由 kiquebgPixabay 获得

混合劳动力的常态-人类和人工智能的合作。

许多人认为企业内部的人工智能和自动化是工作杀手。新兴的混合劳动力——人类和机器人——还活着,并且在成长。组织正在迅速实施认知 AI 和 RPA,这些技术可以大规模处理大量重复任务。随着越来越多的用例出现,混合劳动力也在增长。

获得认同可能很难,但企业领导人应该对员工开放和诚实,让他们透明地了解人工智能将如何使用,以及对当前人类工人及其日常工作生活的持久影响

总的来说,无论你的组织是否努力获得认同,信息都很明确:习惯它。在不远的将来,你可能会在日常工作中与人工智能工具、数字工人和机器人一起工作。希望这些数字工作者与业务保持一致,并帮助解决问题,从而加快您的价值实现。

更多人类与 AI 的互动。

人工智能在工作场所的常态也将是我们看到更多人类与人工智能互动的原因。我们将被期待与人工智能一起生活和工作,就像我们已经与 Alexa、Siri 和其他数字助理一起生活一样。你的智能数字工作者会叫什么名字?

随着技术能力的提高,监管允许和社会接受度的增长,更多的人工智能将被部署在不受控制的公共空间。我想象我们中的更多人将与人工智能互动,也许甚至不知道它。虽然我们已经明白,客户体验往往是基于我们的个人资料和兴趣而改进和定制的,但我期待与人工智能的许多其他形式的交互,即使在我们看不到它发生的地方。

图片来自 Pexels.com Pixabay

数据是人工智能火上浇油。

正如比利·周所说:我们没有放火;它总是在燃烧;因为世界一直在转动;我们没有放火;不,我们没有点燃它;但我们试图与之抗争:不久前,企业将数据视为许多业务流程和交易结束时产生的多余废气。这里发生了巨大的转变,大大小小的组织现在都在系统和方法上进行投资,以收集和记录他们能够收集和记录的所有数据——当然是为了改进!

在过去的 25 年中,数据的快速增长、存储成本的降低以及访问数据的便利性都取得了令人难以置信的增长。数据正在推动客户体验的改善,提升分析能力(特别是在流程数据和流程智能的新领域),实现机器学习和人工智能,并允许企业利用由数据驱动的智能自动化的真正价值。

迈克·科诺诺夫在 Unsplash 上拍摄的照片

人工智能促进网络安全。

在改善网络安全的持续努力中,人工智能将为首席信息安全官带来令人印象深刻的新优势。

虽然人工智能可以增强安全性,但它不是万能的。“人工智能不会解决你所有的安全问题,”安全公司迈克菲前副总裁兼企业产品总经理拉贾·帕特尔说,他现在是阿卡迈科技安全产品副总裁。"把它看作是提高安全态势的一种方法,而不是银弹."

正如我在2020 年前 20 大技术趋势文章中指出的,未来的人工智能安全将有 3 个关键视角。

照片由内特·格兰特Unsplash 上拍摄

更多的人工智能做人工智能的事情——自动化人工智能开发。

“2020 年,预计将在 IBM 所谓的‘人工智能的人工智能’领域看到重大的新创新:使用人工智能来帮助自动化创建、部署、管理和操作人工智能模型的生命周期中涉及的步骤和过程,以帮助将人工智能更广泛地扩展到企业中,”IBM 研究人工智能副总裁 Sriram Raghavan 说。来源:下网

2019 年,IBM 推出了 AutoAI ,这是一个自动化数据准备、模型开发、特征工程和超参数优化的平台。

寻找包括分布式深度学习的开发技术,使开发人员能够更快更有效地构建人工智能引擎。自动化机器学习将使人工智能开发可用于更多样化的开发人员群体。

Unsplash 上由 Hitesh Choudhary 拍摄的照片

总的来说,人工智能有能力重塑和重新定义我们的生活和工作方式。我们都应该期待的增长趋势是在工作场所看到越来越多的人工智能解决方案。这些工具将有助于创造新的用户体验和更好的结果,并确保我们及时高效地实现我们的目标。当考虑混合劳动力的需求时,领导者需要决定简单的基于任务的自动化工具是否是他们问题的答案,或者他们是否需要人工智能和其他变革性技术的组合来实现真正的智能和认知自动化。

选择仍然存在——你的组织将成为由人工智能驱动的成功和可持续数字化的领导者,还是因为害怕变化而保持静止和停滞不前。

RYAN M. RAIKER,MBA // Ryan Raiker 是 ABBYY 的高级产品营销经理,ABBYY 是一家业务流程和数字智商解决方案的全球供应商。作为常驻的“流程智商人员”,Ryan 在流程发现、分析、监控和预测/说明性分析、业务战略管理、业务发展方面拥有专业知识,专注于帮助公司了解其业务流程并从中获得价值。他获得了威得恩大学的工商管理硕士学位、商业分析/信息学学士学位和运营管理辅修学位,并继续在该大学担任兼职教授。

机器学习初学者的 9 大算法

原文:https://towardsdatascience.com/top-10-algorithms-for-machine-learning-beginners-149374935f3c?source=collection_archive---------2-----------------------

有大脑的机器是未来。

在过去的几年里,机器学习的使用和它的威力已经成倍增长。我们的祖父母认为只有有智力的人才能做的事情现在正在由机器在没有人类干预的情况下完成。这就是机器学习的力量。

1952 年,当 IBM 的亚瑟·塞缪尔(Arthur Samuel)在他的跳棋游戏中首次提出“机器学习”这个词时,他从未想到机器学习会开辟一个全新的领域,从帮助残疾人到祝贺企业决策和动态定价。

机器学习是一种自动建立分析模型的数据分析方法。它是一个技术分支,允许系统从数据中学习,识别模式并在最少的人工干预下做出决策。

机器学习使构建能够理解图像、声音和语言的软件成为可能,并使我们每天都能够了解更多的技术。

当我在 2013 年第一次从 Verge 的一篇文章中知道机器学习的时候,我永远无法理解机器是如何被训练出来的!??直到 2015 年开始本科,开始学习机器学习。训练数据,测试数据,监督-非监督数据,决策树,深度学习和神经网络的随机森林,这是一个沉重的知识云。

一个接一个,我学习了不同的机器学习算法,并做了相关的项目。我读得越多,和他们一起工作得越多,我明白有些算法是从你开始的,这让你对整个人工智能和人工智能生态系统更加熟悉。

在我们进入这个故事之前,非常重要的是要把基础正确地建立在监督和非监督学习上。

监督学习

监督学习是当你有一些输入变量,比如说 x 和一个输出变量 y ,你用一个算法学习从输入到输出的映射函数为 y = f (x)

监督学习的目标是逼近映射函数,当您有新的输入数据(x)时,您可以以相同的精度预测该数据的输出变量(Y)

它被称为监督学习,因为算法的学习过程是通过从训练数据集进行学习,这可以被视为类似于教师监督一些学生的学习过程。

无监督学习

无监督学习是当你只有输入数据 x,没有对应的输出变量。

无监督学习的目标是构建数据中的底层结构或分布,以便了解更多关于数据的信息。

这些被称为非监督学习,因为与监督学习不同,没有解决问题的正确方法,也没有老师来监督。算法学习数据本身,设计以最佳方式发现和呈现数据中有趣的结构。

因此,有了我的这个故事,让我们进入9 大机器学习算法吧,我们已经听过上百次了,但这次要清楚地阅读它的应用和能力,没有特定的重要性顺序。

1.线性回归

线性回归线

线性回归是一种基于监督学习的机器学习算法。线性回归对因变量和一个或多个自变量之间的关系进行建模。线性回归主要用于处理标量和探索性变量。

线性回归应用于确定因变量(标量)和一个或多个自变量(探索性的)之间存在线性关系的程度。单个自变量用于预测因变量的值。

线性回归的实际应用

  1. 金融服务或保险领域的风险管理
  2. 预测分析
  3. 计量经济学的
  4. 流行病学
  5. 天气数据分析
  6. 客户调查结果分析

2.逻辑回归

当因变量为二元时,使用逻辑回归。这是统计学中二元分类问题的常用方法。首先,理解什么时候使用线性回归,什么时候使用逻辑回归是很重要的。

线性回归和 Logistic 回归有什么区别?

当因变量连续且回归线为线性时,使用线性回归。

当因变量本质上是二元时,使用逻辑回归。

何时使用逻辑回归?

这是线性回归的一个特例,其中目标变量本质上是明确的。它使用概率的对数作为因变量。

sigmoid 函数也称为逻辑函数,它给出了一条“S”形曲线,可以将任何实数值映射为 0 到 1 之间的值。

  1. 如果曲线趋向正无穷大,y 预测值将变为 1
  2. 如果曲线走向负无穷大,预测的 y 将变成 0
  3. 如果 sigmoid 函数的输出大于 0.5,我们可以将结果分类为 1 或是,如果小于 0.5,我们可以将其分类为 0 或否
  4. 如果输出是 0.75,我们可以按照概率说:病人有 75%的机会患癌症。

因此,逻辑回归利用 sigmoid 函数预测二元事件的发生概率。

逻辑回归的实际应用

  1. 癌症检测
  2. 创伤和损伤严重程度评分
  3. 图像分割和分类
  4. 地理图像处理
  5. 手写识别
  6. 基于语料库中的单词包预测一个人是否抑郁

3.支持向量机

机器学习很大程度上涉及预测和分类数据。为此,需要根据数据集实现一组机器学习算法。这些最大似然算法之一是 SVM。想法很简单:创建一条线或一个超平面,将数据分成多个类。

SVM 超平面及其类

支持向量机(SVM)是一种监督的机器学习算法,可用于分类或回归挑战。但多用于分类问题。SVM 在此基础上转换你的数据库,在可能的输出之间找到一个最佳的边界。

支持向量机通过寻找最大化两个类之间的间隔的超平面来执行分类。

定义超平面的向量被称为支持向量。

SVM 算法

  1. 定义一个具有最大余量的最优超平面
  2. 将数据映射到更易于使用线性决策表面进行分类的高维空间
  3. 重新表述问题,使数据隐式映射到这个空间

SVM 的现实生活应用

  1. 人脸检测—对图像上的人脸和非人脸区域进行分类
  2. 文本和超文本分类
  3. 图像分类
  4. 生物信息学——蛋白质、基因、生物学或癌症分类。
  5. 手写识别
  6. 用于治疗的药物发现

近年来,SVM 通过其在分类中的应用在癌症检测和治疗中发挥了非常重要的作用。

4.决策树

来源:维基百科

决策树是一种决策支持工具,它使用决策过程和可能结果的树状模型。它涵盖了事件结果、资源成本和决策的效用。决策树类似于只包含条件控制语句的算法或流程图。

倒过来画决策树,根节点在上面。每个决策树有 3 个关键部分:根节点、叶节点、分支。

在决策树中,每个内部节点代表一个测试或一个事件。比如说,掷硬币是正面还是反面。每个分支代表测试的结果,每个叶节点代表一个类标签——这是在计算所有属性后做出的决定。从根到叶节点的路径代表分类规则。

决策树可以是用于分类和回归的强大的机器学习算法。分类树对目标进行分类,判断它是正面还是反面。回归树以类似的方式表示,但它们预测连续值,如附近的房价。

关于决策树最好的部分:

  1. 处理数字和分类数据
  2. 处理多输出问题
  3. 决策树需要相对较少的数据准备工作
  4. 参数之间的非线性关系不会影响采油树的性能

决策树的实际应用

  1. 选择要旅行的航班
  2. 预测酒店入住高峰期
  3. 附近药店的数量对客户 X 特别有效
  4. 癌细胞与非癌细胞分类,其中癌细胞很少,例如 1%
  5. 建议顾客买什么车

5.随机森林

机器学习中的随机森林是一种关于分类、回归和其他操作的集成学习技术,这些操作在训练时依赖于大量决策树。它们快速、灵活,代表了挖掘高维数据的健壮方法,并且是我们上面讨论的分类和回归决策树的扩展。

总体而言,集成学习可以定义为通过组合单个模型来进行预测的模型。集合模型倾向于更灵活,偏差和方差更小。集成学习有两种流行的方法:

  • 装袋 : 从数据集中随机抽取每棵树,并通过 s 个随机数据子集进行训练,从而产生不同的树
  • 助推 : 每一个单独的树/模型都从先前模型所犯的错误中学习并改进

随机森林运行时间相当快。他们在处理缺失和不正确的数据时非常有效。从负面来看,它们无法预测超出训练数据定义范围的数据,并且可能会过度拟合噪声特别大的数据集。

随机森林应该有 64-128 棵树。

随机森林和决策树的区别

随机森林本质上是决策树的集合。决策树是在整个数据集上构建的,使用所有感兴趣的特征/变量,而随机森林随机选择观察值/行和特定的特征/变量来构建多个决策树,然后对结果进行平均。

随机森林的实际应用

  1. 银行账户、信用卡欺诈检测
  2. 检测和预测药物的药物敏感性
  3. 通过分析病人的医疗记录来确定他们的疾病
  4. 预测购买特定股票时的估计损失或利润

6.k-最近邻

K-最近邻(kNN)是一种简单的监督机器学习算法,可用于解决分类和回归问题。

kNN 存储可用的输入,并基于类似的度量(即距离函数)对新输入进行分类。KNN 主要应用于统计估计和模式识别。

kNN 是做什么的?

KNN 的工作原理是找出查询和数据中所有输入之间的距离。接下来,它选择最接近查询的指定数量的输入,比如 K。然后它投票给最频繁的标签(在分类的情况下)或平均标签(在回归的情况下)。

kNN 算法:

  1. 加载数据
  2. k 初始化为数据中选定数量的邻居
  3. 对于数据中的每个示例,计算查询示例和数据的当前输入之间的距离
  4. 将该距离添加到输入的索引中,以形成有序集合
  5. 按距离分组的升序对距离和索引的有序集合进行排序
  6. 从排序的集合中挑选前 K 个条目
  7. 获取所选 K 个条目的标签
  8. 如果是回归,返回 K 个标签的平均值;如果分类,返回 K 标签的模式

kNN 的真实世界应用

  1. 指纹检测
  2. 预测股票市场
  3. 货币汇率
  4. 银行破产
  5. 信用评级
  6. 贷款管理
  7. 洗钱分析
  8. 根据糖尿病患者血液的红外吸收光谱估计该患者血液中的葡萄糖含量。
  9. 根据临床和人口统计学变量确定癌症的风险因素。

6.k 均值聚类

K-means 聚类是最简单也是最流行的无监督机器学习算法之一。

我们上面不是讲过这么类似的东西吗?

k-最近邻和 k-均值聚类的区别

K-means 算法识别 k 个质心,然后将每个数据点分配到最近的聚类,同时保持质心尽可能小。K-means 中的表示是指数据的平均;也就是求质心。

K-means 算法从第一组随机选择的质心开始,这些质心被用作每个聚类的起始点,然后执行迭代(重复)计算以优化质心的位置。当质心稳定或达到定义的迭代次数时,它会停止创建和优化簇。

K-means 聚类算法:

  1. 指定集群的数量 K
  2. 通过首先改组数据集,然后为质心随机选择 K 个数据点来初始化质心,而无需替换
  3. 不断迭代,直到质心稳定
  4. 计算数据点和所有质心之间距离的平方和
  5. 将每个数据点分配给最近的聚类(质心)
  6. 通过取属于每个聚类的数据点的平均值来计算聚类的质心。

K-均值聚类的实际应用

  1. 识别假新闻
  2. 垃圾邮件检测和过滤
  3. 将书籍或电影按流派分类
  4. 城市规划中的热门交通路线

8.朴素贝叶斯

朴素贝叶斯是我最喜欢的,超级有效的,常用的机器学习分类器。朴素贝叶斯本身是一个算法家族,包括用于监督和非监督学习的算法。

朴素贝叶斯分类器是一组基于贝叶斯定理的分类算法。它不是一个单一的算法,而是一个算法家族,所有算法都有一个共同的原则,即每一对被分类的特征都是相互独立的。

为了理解朴素贝叶斯,让我们回忆一下贝叶斯法则:

什么是如此“天真:在朴素贝叶斯?

朴素贝叶斯(NB)是朴素的,因为它假设测量的属性是相互独立的。我们可以简单地将一个属性作为独立的量,并确定属于该类的先前测量的比例,该类仅具有该属性的相同值。

朴素贝叶斯主要用于基于多个属性预测不同类的概率。它主要用于挖掘数据时的文本分类。如果你看看朴素贝叶斯的应用,你一直想做的项目可以由这个算法家族最好地完成。

朴素贝叶斯的现实应用

  1. 对一篇关于技术、政治或体育的新闻文章进行分类
  2. 社交媒体上的情感分析
  3. 面部识别软件
  4. 网飞和亚马逊的推荐系统
  5. 垃圾邮件过滤

9.主成分分析

现在,这一个,主成分分析可能不是算法类别中的最佳候选,但它绝对是一种超级有用的机器学习技术。

主成分分析(PCA)是一种无监督的统计技术,主要用于通过机器学习中的特征提取进行降维

当我们谈论高维度时,它意味着数据集具有大量的特征。这需要大量的内存和计算能力。

PCA 使用正交变换,将一组相关变量转换成一组不相关变量。它用于通过线性组合来解释一组变量的方差-协方差结构。它也是探索性数据分析和预测建模中最广泛使用的工具。

PCA 背后的思想是简单地找到一组概括数据的低维轴。比方说,我们有一个由一组汽车属性组成的数据集;尺寸、颜色、座位数量、车门数量、行李箱尺寸、圆形度、紧凑度、半径……然而,这些特征中的许多将指示相同的结果,因此可能是多余的。作为聪明的技术专家,我们应该努力消除这些冗余,用更少的属性描述每辆车,使计算变得简单。这正是 PCA 的目标。

主成分分析不考虑属性信息。它与每个属性的方差有关,因为高方差的存在表明类别之间的良好划分,这就是我们如何降低维度。PCA 从来不会只考虑一些而抛弃另一些。它从统计上考虑了这些属性。

PCA 的实际应用

  1. 优化多个通信信道中的功率分配
  2. 图像处理
  3. 电影推荐系统

感谢您的阅读!我希望你喜欢这篇文章。请务必让我知道,在你的机器学习之旅中,你期待学习或探索什么技能?

数据帐篷快乐!

免责声明:本文表达的观点仅代表我个人,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。她是用户体验分析师和顾问、技术演讲者和博客作者。

十大二元分类算法[初学者指南]

原文:https://towardsdatascience.com/top-10-binary-classification-algorithms-a-beginners-guide-feeacbd7a3e2?source=collection_archive---------5-----------------------

如何用几行 Python 代码实现 10 个最重要的二进制分类算法

Javier Allegue Barros 在 Unsplash 上拍摄的照片

介绍

B 一元分类问题可以通过从朴素贝叶斯到深度学习网络的各种机器学习算法来解决。哪种解决方案在运行时间和准确性方面表现最佳取决于数据量(样本和要素的数量)和数据质量(异常值、不平衡数据)。

本文提供了一个概述和代码示例,您可以很容易地自己尝试。目标是快速获得 Python 的第一个工作结果。在这里,我将保持事情简短,并将详细解释每个算法。我已经添加了对每个算法的参考,以防你想了解更多关于算法,它的基本理论和如何调整它的参数。

在本文中,我们将重点介绍 10 种最常见的二进制分类算法:

  1. 朴素贝叶斯
  2. 逻辑回归
  3. K-最近邻
  4. 支持向量机
  5. 决策树
  6. Bagging 决策树(集成学习 I)
  7. 增强决策树(集成学习 II)
  8. 随机森林(集成学习 III)
  9. 投票分类(集成学习 IV)
  10. 神经网络(深度学习)

为了让事情尽可能简单,我们在本教程中将只使用三个 Python 库: NumpySklearnKeras

在代码示例中,我总是在代码片段的顶部导入必要的 Python 模块,以明确接下来会用到它。你可以在你的脚本开始的时候加载它们。

我创建了一个 Jupyter 笔记本,里面有你能在我的 Github 资源库中找到的所有代码:https://Github . com/alexortner/teaching/tree/master/binary _ classification

资料组

在本文中,我们将对电影评论进行二元情感分析,这是自然语言处理中的一个常见问题。

我们使用高度极性电影评论的 IMDB 数据集,以对不同电影的文本评论和正面或负面评分的形式。

目标是通过分析评论文本中的情感来训练可以预测评论的模型。

数据导入

我们直接从 Keras 加载数据集。这样做的好处是,我们不需要下载文件,也几乎不需要在代码中准备数据。Keras 网站的描述称:

这是来自 IMDB 的 25,000 个电影评论的数据集,由情绪(正面/负面)标记。评论已经过预处理,每个评论都被编码成一个单词索引(整数)列表。为方便起见,单词按数据集中的总频率进行索引,例如,整数“3”编码数据中第三个最频繁出现的单词。这允许快速过滤操作,例如:“仅考虑前 10,000 个最常用的单词,但排除前 20 个最常用的单词”。

按照惯例,“0”不代表特定的单词,而是用于编码任何未知的单词。

(引自:https://keras.io/api/datasets/imdb/)

import keras.datasets as keras_data(imdb_train_data,imdb_train_labels),(imdb_test_data,imdb_test_labels) = keras_data.imdb.load_data(num_words=10000)

num_words 将文本导入限制为 10,000 个最常用的单词。

数据的快速概览

训练和测试数据各包含 25000 个样本。来自 Keras 源的文本已经被标记化,这意味着它被编码成一个整数序列,其中每个数字对应一个单词。

print(imdb_train_data.shape)
print(imdb_test_data.shape)print(imdb_train_data[5])**# output** (25000,)
(25000,)
[1, 778, 128, 74, 12, 630, 163, 15, 4, 1766, 7982, 1051, 2, 32, 85, 156, 45, 40, 148, 139, 121, 664, 665, 10, 10, 1361, 173, 4, 749, 2, 16, 3804, 8, 4, 226, 65, 12, 43, 127, 24, 2, 10, 10]

如果您想以明文形式查看评论,可以使用数据集中的 get_word_index 函数将索引映射回原始单词。请记住,标点和空格已经从数据集中移除,因此无法恢复。

word_index = keras_data.imdb.get_word_index()**# map index to word mapping into a Python dict**
reverse_word_index = dict([(value,key) for (key,value) in word_index.items()])**# map the word index to one of the tokenized comments**
decoded_word_index = ''.join([reverse_word_index.get(i-3,'?') for i in imdb_train_data[5]])

打印单词索引列表中最常用的 10 个单词:

for key in sorted(reverse_word_index.keys()):
    if(key<=10): 
        print("%s: %s" % (key, reverse_word_index[key]))**# output**
1: the
2: and
3: a
4: of
5: to
6: is
7: br
8: in
9: it
10: i

打印解码的注释:

print(decoded_word_index)**# output**
beginsbetterthanitendsfunnythattherussiansubmarinecrewoutperformsallotheractorsit'slikethosesceneswheredocumentaryshotsbrbrspoilerpartthemessagedechiferedwascontrarytothewholestoryitjustdoesnotmeshbrbr

数据矢量化和一键编码

目前,每个样本都是一个整数数组,长度取决于注释的文本长度。所使用的算法需要一个张量,其中每个样本具有相同数量的特征。为此,我们通过将每个数字替换为长度为 10,000 的向量来对整数列表进行一次性编码,该向量在索引位置的值为 1,在所有其他位置的值为 0。所以我们基本上是把整数序列编码成二进制矩阵。

文本的符号化和矢量化示意图(图片由作者提供)

对于向量化,我们写一个简单的函数

import numpy as npdef vectorize_sequence(sequences,dimensions):
    results=np.zeros((len(sequences),dimensions))
    for i, sequence in enumerate(sequences):
        results[i,sequence] = 1.
    return results

并用它将我们的测试和训练数据转换成张量

x_train=vectorize_sequence(imdb_train_data,10000)
x_test=vectorize_sequence(imdb_test_data,10000)

标签数据已经是一个二进制整数,我们只需将它转换成一个 Numpy 数组和浮点类型,因为 Keras 只接受这种数据类型

y_train=np.asarray(imdb_train_labels).astype('float32')
y_test=np.asarray(imdb_test_labels).astype('float32')

对张量形状的检查表明,对于训练和测试数据集,我们现在有 25000 个样本和 10000 个特征

print(x_train.shape)
print(x_test.shape)**#output**
(25000, 10000)
(25000, 10000)

1.朴素贝叶斯

朴素贝叶斯方法是一种监督学习算法,它基于应用贝叶斯定理和给定类变量值的每对要素之间条件独立性的“朴素”假设。

from sklearn.naive_bayes import MultinomialNBmnb = MultinomialNB().fit(x_train, y_train)print("score on test: " + str(mnb.score(x_test, y_test)))
print("score on train: "+ str(mnb.score(x_train, y_train)))

总结:朴素贝叶斯算法对于这个特征丰富的数据集非常快(记住我们有一个具有 10,000 个特征向量的张量),并且已经提供了 80%以上的好结果。训练和测试数据上的得分彼此接近,这表明我们没有过度拟合。

**Results Naive Bayes**
+-------------+------+
| **run time**    | 2s   |
+-------------+------+
| **train score** | 0.87 |
+-------------+------+
| **test score ** | 0.84 |
+-------------+------+

2.逻辑回归

逻辑回归是解决分类问题的最古老、最基本的算法之一:

from sklearn.linear_model import LogisticRegressionlr=LogisticRegression(max_iter=1000)
lr.fit(x_train, y_train)print("score on test: " + str(lr.score(x_test, y_test)))
print("score on train: "+ str(lr.score(x_train, y_train)))

总结:逻辑回归需要相当长的训练时间,而且会过拟合。从训练数据得分(98%)与测试数据得分(86%)的偏差中可以看出算法过拟合。

**Results Logistic Regression** +-------------+------+
| **run time**    | 60s  |
+-------------+------+
| **train score** | 0.98 |
+-------------+------+
| **test score ** | 0.86 |
+-------------+------+

3.k-最近邻

k-最近邻(KNN) 算法是一种监督机器学习算法,可用于解决分类和回归问题。对于 KNN,众所周知,它不太适用于大型数据集(高样本量),尤其是许多特征(高维)。我们具有 25000 个样本和 10000 个特征的数据集对于该算法来说已经不是最优的了。我必须设置两个参数, algorithm = "brute "和 n_jobs=-1 来让分类器在最近运行。

from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(algorithm = 'brute', n_jobs=-1)knn.fit(x_train, y_train)print("train shape: " + str(x_train.shape))
print("score on test: " + str(knn.score(x_test, y_test)))
print("score on train: "+ str(knn.score(x_train, y_train)))

总结:不出所料,这个算法不太适合这类预测问题。它需要 12 分钟,预测非常差,只有 62%,并显示出过度拟合的趋势。

**Results K-Nearest Neighbours** +-------------+------+
| **run time**    | 12m  |
+-------------+------+
| **train score** | 0.79 |
+-------------+------+
| **test score ** | 0.62 |
+-------------+------+

4.支持向量机

支持向量机是用于分类和回归任务的简单算法。它能以较小的计算能力非常快地提供高精度。由于大量的特性,我们使用 LinearSVC。结果表明,设置正则化参数 C=0.0001 提高了预测质量,减少了过拟合。

from sklearn.svm import LinearSVCsvm=LinearSVC(C=0.0001)
svm.fit(x_train, y_train)print("score on test: " + str(svm.score(x_test, y_test)))
print("score on train: "+ str(svm.score(x_train, y_train)))

总结:支持向量机速度非常快,预测得分高,没有过拟合问题。

**Results Support Vector Machine** +-------------+------+
| **run time**    | 2s   |
+-------------+------+
| **train score** | 0.86 |
+-------------+------+
| **test score ** | 0.85 |
+-------------+------+

5.决策图表

决策树是一种用于分类和回归的非参数监督学习方法。目标是通过学习从数据特征推断的简单决策规则(if-else)来创建预测目标变量的值的模型。

from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier()
clf.fit(x_train, y_train)print("score on test: "  + str(clf.score(x_test, y_test)))
print("score on train: " + str(clf.score(x_train, y_train)))

总结:对这个特征丰富的数据集应用单个决策树会导致大量的过度拟合。事实上,100%的准确率意味着它准确地记住了训练数据集,因此对测试数据的概括很差。我们在这里看到的是单一决策树的缺点之一,它不能处理太多特征的数据。

**Results Decision Tree** +-------------+------+
| **run time**    | 4m   |
+-------------+------+
| **train score** | 1.0  |
+-------------+------+
| **test score ** | 0.70 |
+-------------+------+

然而,这个问题可以通过调整算法的一些参数或引入集成学习技术来解决。在这里可以找到关于决策树分类器参数调优的深度文章:https://medium . com/@ mohtedibf/indepth-parameter-tuning-for-decision-tree-6753118 a03c 3。接下来,我们将关注一些常见的集成学习方法。

6.Bagging 决策树(集成学习 I)

当决策树过度拟合时,应用像 bagging 这样的集成学习算法可能会提高预测模型的质量。在打包中,通过从训练数据中提取引导来增加训练数据。这意味着从训练数据中获取多个样本(替换),并在这些子数据集上训练模型。最终预测是每个引导样本所有预测的平均值。

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier**# max_samples:** maximum size 0.5=50% of each sample taken from the full dataset**# max_features:** maximum of features 1=100% taken here all 10K 
**# n_estimators:** number of decision trees bg=BaggingClassifier(DecisionTreeClassifier(),max_samples=0.5,max_features=1.0,n_estimators=10)
bg.fit(x_train, y_train)print("score on test: " + str(bg.score(x_test, y_test)))
print("score on train: "+ str(bg.score(x_train, y_train)))

总结:Bagging 分类器要慢得多,因为它基本上运行 10 个决策树,但人们可以看到我们在单个决策树上看到的过度拟合的减少和测试分数的增加。调整参数以进一步改善这个结果。

**Results Bagging Decision Tree** +-------------+------+
| **run time**    | 10m  |
+-------------+------+
| **train score** | 0.93 |
+-------------+------+
| **test score ** | 0.77 |
+-------------+------+

7.推进决策树(集成学习 II)

一般来说,我们不能用提升来改善一个分值= 1 的完全过拟合的模型。要应用 Boosting,我们首先必须稍微调整一下决策树分类器。我花了一些试验和错误,直到我得到了决策树和 AdaBoost 分类器的最佳参数。我确信你可以通过更多的比赛进一步提高。

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifieradb = AdaBoostClassifier(DecisionTreeClassifier(min_samples_split=10,max_depth=4),n_estimators=10,learning_rate=0.6)
adb.fit(x_train, y_train)print("score on test: " + str(adb.score(x_test, y_test)))
print("score on train: "+ str(adb.score(x_train, y_train)))

总结:通过 Boosting 和改进的底层决策树,我们摆脱了过拟合问题。尽管我们只能以大约 80%的把握进行预测,但我们可以对所有的测试数据进行可靠的预测。

**Results Boosting Decision Tree** +-------------+------+
| **run time**    | 5m   |
+-------------+------+
| **train score** | 0.80 |
+-------------+------+
| **test score ** | 0.78 |
+-------------+------+

8.随机森林(集成学习 III)

随机森林算法是另一种常用的集成学习分类器,它使用多个决策树。随机森林分类器基本上是决策树的改进的 bagging 算法,它不同地选择子集。我发现 max_depth=9 对于这个特性丰富的数据集来说是一个很好的值。

from sklearn.ensemble import RandomForestClassifier**# n_estimators = number of decision trees** rf = RandomForestClassifier(n_estimators=30, max_depth=9)
rf.fit(x_train, y_train)print("score on test: " + str(rf.score(x_test, y_test)))
print("score on train: "+ str(rf.score(x_train, y_train)))

总结:随机森林不会过拟合,其预测分数与增强决策树的预测分数相当,但它的性能要好得多,因为它比增强决策树快一个数量级以上(快 15 倍)。

**Results Random Forest** +-------------+------+
| **run time**    | 20s  |
+-------------+------+
| **train score** | 0.83 |
+-------------+------+
| **test score ** | 0.80 |
+-------------+------+

9.投票分类器(集成学习 IV)

这个来自集成学习工具箱的分类器评估不同的分类器并从中选择最好的

[**VotingClassifier**](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html#sklearn.ensemble.VotingClassifier)背后的想法是结合概念上不同的机器学习分类器,并使用多数投票或平均预测概率来预测类别标签。这种分类器可以用于一组同样表现良好的模型,以平衡它们各自的弱点。

(引用自:https://sci kit-learn . org/stable/modules/generated/sk learn . ensemble . voting classifier . html)

因此,让我们使用这个分类器来组合我们到目前为止的一些模型,并应用投票分类器

  • 朴素贝叶斯(84%,2 秒)
  • 逻辑回归(86%,60 秒,过度拟合)
  • 随机森林(80%,20 秒)
  • 支持向量机(85%,10s)

请注意,对于这个代码片段,所有使用的模型定义都必须加载到 Python 内核中。

from sklearn.ensemble import VotingClassifier**# 1)** naive bias = mnb
**# 2)** logistic regression =lr
**# 3)** random forest =rf
**# 4)** support vector machine = svmevc=VotingClassifier(estimators=[('mnb',mnb),('lr',lr),('rf',rf),('svm',svm)],voting='hard')
evc.fit(x_train, y_train)print("score on test: " + str(evc.score(x_test, y_test)))
print("score on train: "+ str(evc.score(x_train, y_train)))
  • 总结:即使有点过拟合,但它在测试数据上得到了迄今为止最好的预测分数。
**Results Voting Classifier** +-------------+------+
| **run time**    | 2s   |
+-------------+------+
| **train score** | 0.91 |
+-------------+------+
| **test score ** | 0.86 |
+-------------+------+

10.神经网络(深度学习)

深度学习使用人工神经网络,该网络使用多层从训练数据中逐步提取更高级别的特征。我们使用一个简单的三层网络,没有任何优化,除了使用一个小的验证数据集。这里我们用的是 Keras 而不是 Sklearn。

from keras import layers
from keras import models
from keras import optimizers
from keras import losses
from keras import metrics**# split an additional validation dataset**
x_validation=x_train[:1000]
x_partial_train=x_train[1000:]
y_validation=y_train[:1000]
y_partial_train=y_train[1000:]model=models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])model.fit(x_partial_train,y_partial_train,epochs=4,batch_size=512,validation_data=(x_validation,y_validation))print("score on test: " + str(model.evaluate(x_test,y_test)[1]))
print("score on train: "+ str(model.evaluate(x_train,y_train)[1]))

总结:使用神经网络得到了迄今为止我们所达到的最好的测试分数,大约为 88%。然而,标准设置导致训练数据的过度拟合。

这个问题可以通过添加一些较小的调整参数来轻松解决,这些参数会将训练分数降低到 0.90。

在下文中,我应用了在神经网络中处理过拟合的 3 个最佳实践:

  1. 缩小网络的规模
  2. 增加一些重量调整
  3. 添加辍学
from keras import layers
from keras import models
from keras import optimizers
from keras import losses
from keras import regularizers
from keras import metrics# add validation dataset
validation_split=1000
x_validation=x_train[:validation_split]
x_partial_train=x_train[validation_split:]
y_validation=y_train[:validation_split]
y_partial_train=y_train[validation_split:]model=models.Sequential()
model.add(layers.Dense(**8**,**kernel_regularizer=regularizers.l2(0.003)**,activation='relu',input_shape=(10000,)))
**model.add(layers.Dropout(0.5))** model.add(layers.Dense(**8**,**kernel_regularizer=regularizers.l2(0.003)**,activation='relu'))
**model.add(layers.Dropout(0.6))** model.add(layers.Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])model.fit(x_partial_train,y_partial_train,epochs=4,batch_size=512,validation_data=(x_validation,y_validation))print("score on test: " + str(model.evaluate(x_test,y_test)[1]))
print("score on train: "+ str(model.evaluate(x_train,y_train)[1]))**Results Deep Learning with Neural Network standard** +-------------+------+
| **run time**    | 8s   |
+-------------+------+
| **train score** | 0.95 |
+-------------+------+
| **test score ** | 0.88 |
+-------------+------+**Results Deep Learning with Neural Network optimised** +-------------+------+
| **run time**    | 8s   |
+-------------+------+
| **train score** | 0.90 |
+-------------+------+
| **test score ** | 0.88 |
+-------------+------+

摘要

我们现在在同一数据集上训练了 10 种不同的机器学习算法来解决同一任务,根据对文本段落的情感分析预测正面或负面的评论。让我们看看谁在预测质量和运行时间方面胜出。参数过拟合(OF)就是训练分数与测试分数之间的差异。如果它很大,这意味着我们有很高的过度拟合。

+----+-------------------+----------+-------+------+---------+
**| No | Algorithm         | Time [s] | Train | Test | OF      |**
+----+-------------------+----------+-------+------+---------+
| 1  | Naive Bayes       | **2 **       | 0.87  | 0.84 | 0.03    |
+----+-------------------+----------+-------+------+---------+
| 2  | Logistic Reg.     | 60       | 0.98  | **0.86** | **0.12 !!** |
+----+-------------------+----------+-------+------+---------+
| 3  | KNN               | 720      | 0.79  | 0.62 | **0.17** !! |
+----+-------------------+----------+-------+------+---------+
| 4  | SVM               | **2**        | 0.86  | 0.85 | 0.01    |
+----+-------------------+----------+-------+------+---------+
| 5  | Decision Tree     | 240      | 1.0   | 0.70 | **0.3 !! ** |
+----+-------------------+----------+-------+------+---------+
| 6  | Bagging DT        | 600      | 0.93  | 0.77 | **0.16 !!** |
+----+-------------------+----------+-------+------+---------+
| 7  | Boosting DT       | 300      | 0.80  | 0.78 | 0.02    |
+----+-------------------+----------+-------+------+---------+
| 8  | Random Forest     | 20       | 0.83  | 0.80 | 0.03    |
+----+-------------------+----------+-------+------+---------+
| 9  | Voting Classifier | **2 **       | 0.91  | **0.86** | 0.04    |
+----+-------------------+----------+-------+------+---------+
| 10 | **Neuronal Network**  | **8**        | 0.90  | **0.88** | 0.02    |
+----+-------------------+----------+-------+------+---------+

最佳运行时间:

在运行时间方面,最快的算法是朴素贝叶斯、支持向量机、投票分类器神经网络。

最佳预测得分:

就测试数据集的最佳预测而言,最佳算法是逻辑回归、投票分类器神经网络。

最差过拟合:

过拟合最多的算法是逻辑回归、K 近邻决策树Bagging 决策树。

最佳算法:

解决该文本情感分析任务的总体最佳方法是神经网络、,其速度快、精度高且低过拟合。速度稍快但预测质量稍差的是投票分类器

Jupyter 笔记本

你可以在我的 Github 资源库中找到所有作为 Jupyter 笔记本的代码:https://Github . com/alexortner/teaching/tree/master/binary _ classification

在这里,您会发现应用于不同机器学习问题和数据集的相同的前 10 个二进制分类算法。

  1. IMDB 数据集— 自然语言处理 —二元情感分析
  2. FashionMNIST 数据集— 计算机视觉 —二值图像分类
  3. 威斯康星州乳腺癌数据集-简单二元分类法

感谢阅读!

我希望你喜欢这篇文章。如果您看到任何需要纠正的地方,请发表评论,以便我尽快修复。

2020 年研究数据科学和机器学习的前 8 本书

原文:https://towardsdatascience.com/top-10-books-to-study-data-science-and-machine-learning-in-2020-483a8c9279b1?source=collection_archive---------31-----------------------

本文涵盖了一些最受欢迎的数据科学书籍,旨在帮助新手探索数据科学的世界,并帮助有经验的从业者获得更深入的知识。以下是我发现有用或被推荐的前 8 条。

以下书籍将让你了解和理解数据科学的重要领域,如统计学、数据科学、机器学习、深度学习和部署

入门水平

1.统计学习导论

作者:加雷斯·詹姆斯、丹妮拉·威滕、特雷弗·哈斯蒂和罗伯特·蒂布拉尼

这本书非常适合初学者,有很多插图和真实世界的场景,结合在一起是一堂容易理解的机器学习课。这本书的长处在于解释关键概念。我也可以向 Python 开发人员强烈推荐这一点。广泛应用于大学课程。

2.数据科学家实用统计学

彼得·布鲁斯

这是数据科学统计学中许多概念的综合参考指南。这是一本在统计学和数据科学之间架起桥梁的好书。尽管这本书假设读者熟悉 R,但它仍然是 Python 程序员学习统计概念的好书。

3.数据科学和大数据分析:发现、分析、可视化和呈现数据

本书介绍了大数据并涵盖了数据分析生命周期。这本书易于阅读,并且澄清了所有的概念,否则你可能很难在其他地方找到。还向读者介绍了使用 MapReduce、Hadoop 和 SQL 的高级分析。

4.制作更好的数据可视化的好图表、提示工具和练习

作者:斯科特·贝里纳托

在本书中,你将学会如何选择最适合你的数据的图表;当你有决策者的五分钟时间时,与他们沟通的最有效方式;如何有效地使用色彩?

中间能级

5.Python 数据科学手册

杰克·范德普拉斯

Python 数据科学手册也是所有标准 Python 库的优秀指南:NumPy、pandas、Matplotlib、Scikit-learn。对于有 Python 经验但需要数据科学工作可用工具指南的人来说,这是完美的。

专家级

如果你是专家级别的,那么我会推荐阅读科学论文。

6.概率视角下的机器学习

凯文·p·墨菲

如果你对数学感兴趣,那么你会喜欢这本书,并且作为机器学习研究的参考非常有用。

7.机器学习向往

作者:吴恩达

这本书旨在教数据科学家如何构建机器学习项目,并为数据科学团队设定方向。它很好地概述了何时以及如何使用机器学习,以及如何处理在现实世界中实现人工智能所涉及的复杂性。

8.生产中的数据科学;用 Python 构建可扩展的模型管道

作者本·G·韦伯

这本书涵盖了云部署开发 web 端点机器学习模型。韦伯从自上而下的方法教导:建立可复制的模型,在生产中可以很好地扩展。在 PySparkPub/Sub 技术和 Kafka 之间,Weber 深入研究了基本的数据科学工具。

2020 年十大商业智能工具

原文:https://towardsdatascience.com/top-10-business-intelligence-tools-of-2020-be5bfe22a9b?source=collection_archive---------15-----------------------

如何挑选适合企业学习的工具?

Artem Beliaikin 在 Unsplash 上拍摄的照片

在当今快速发展的世界中,当技术以前所未有的速度发展时,有大量的工具和技能需要探索、学习和掌握。在这个数字和数据时代,商业信息和情报已经在很大程度上爬上了重要商业技能的阶梯,如果

如今,商业智能可以被视为重要的组织能力!如今,借助 BI,组织可以通过潜在提升品牌知名度、内部参与度、组织效率和盈利能力来推动其业务远远领先于竞争对手。

到 2021 年底,商业智能和分析行业的价值预计将飙升至 265 亿美元

此外,使用商业智能分析的公司做出更快、更明智决策的可能性的五倍。在这种情况下,增强商业智能技能是至关重要的。在这个故事中,我列出了 2020 年行业中使用的顶级 BI 工具。现在有很多商业智能工具在使用,但是下面是最流行的,按字母顺序排列。

让我们来认识他们吧!

1.谷歌数据工作室

谷歌数据工作室于 2016 年首次推出,可能是谷歌必须提供的免费的基于网络的套件,但谷歌对商业智能的用户友好、直观的设计可能是其最强的卖点之一。

优点:可以很好地处理来自 Google 的数据,比如 Google Analytics,Search Console,AdWords,YouTube analytics 等等。你可以从谷歌表单中获取任何你想要的数据。

缺点:从其他来源的数据中提取大量的预建连接器并没有什么好处。需要很多才能使处理各种数据类型变得容易。

至于可视化和分析功能,与其他分析套件相比,Data Studio 提供了相当多的选项。Data Studio 的另一个潜在缺点是它完全基于网络。对于那些愿意直接访问您提供的链接的人来说,共享很容易,但是您将无法导出为 pdf 或任何其他常见的报告格式,并且自动报告交付也受到限制。

谷歌数据工作室卖什么?

  1. Data Studio 有许多第三方连接器来连接和提取数据,如亚马逊卖家、Stripe、脸书广告、易贝和 Twitter
  2. 谷歌数据工作室是免费的!
  3. 实时分析和过滤
  4. 轻松共享和协作

2.IBM Cognos 分析

IBM 的典型商业智能套件——Cognos Analytics 是一个基于云的商业智能和分析平台。

Cognos Analytics 从各种来源导入数据,以帮助创建交互式仪表板、可视化和报告。它的用户是多样的;从多个行业的企业,从小到大的企业。

IBM 将 Cognos Analytics 定义为一种注入人工智能的决策工具。该平台的一个显著特点是使用移动应用程序来查看图表、接收警报和获取实时更新。

Cognos Analytics 卖什么?

  1. 通过 web、电子邮件和 Slack 方便团队共享内容
  2. 使用大量格式选项的数据讲述故事
  3. 允许在本地或云端安装和访问
  4. 通过网页、电子邮件或 Slack 共享报告和仪表盘
  5. 使用机器学习来评估和组合相关来源
  6. 创建带有人工智能建议的交互式仪表盘、可视化和报告

3.检查员

我从来不知道像 Looker 这样的 BI 工具存在,直到上周我遇到了来自迪士尼、华纳媒体和一家本地初创公司的三个入门级全职数据分析师职位,要求熟练掌握 Looker。当我查看 Looker 时,它必须在 BI 工具列表中才能知道。

Looker 是一个基于浏览器的商业智能平台,使用简单,易于选择、定制和创建各种交互式可视化,提供各种图形和图表供选择。我现在遇到了很多关于 Tableau 和 Looker 的比较。

我发现 Looker 最好的特性是创建拖放式仪表板,这对于非技术用户来说是一个很大的帮助。可视化和报告可以在所有设备上访问,并可以导出到 Looker 仪表板之外,以便与其他人协作,这是一个很好的功能?

什么卖 Looker?

  1. 连接到用户 SQL 数据库或类似的数据仓库
  2. 为查询优化提供专有的 LookML 语法
  3. 创建在所有设备上可用的实时可视化
  4. 为仪表板创建提供拖放功能
  5. 允许在 web 和移动设备上访问
  6. 安装在内部或由旁观者托管的云中
  7. 提供导出可视化效果以便与其他人协作的功能

4.Microsoft Power BI

微软在商业智能工具领域的领先产品 Power BI 旨在为商业分析师和数据科学家提供帮助。

我在 2017 年在 Larsen & Toubro 实习时听说过 Power BI,使用 Power BI 进行跨部门的收入支出分析、员工效率、焊接的实时数据处理和轮班。

通过简单的拖放界面,PowerBI 为 MS Excel 用户提供了一种相似或熟悉的感觉。Power BI 是一个无代码平台,这可能是它大获成功的原因。PowerBI 有一个很棒的预建连接器库,不像这里列出的一些其他工具那样广泛,但 Power BI 将是任何以 Windows 为中心的数据工作流的一个很好的附加组件,特别是与 Azure 结合使用。

微软关于为什么 PowerBI 的博客非常清楚地解释了为什么 Power BI 对数据科学家来说是事实。Power BI 可轻松连接、建模和可视化数据,创建难忘的报告,并根据品牌的 KPI 进行个性化设置。

根据我的个人经验,PowerBI 在处理非常大的数据集时往往会滞后,所以如果您的数据非常大,您可能需要看看其他地方。

什么卖 PowerBI?

  1. 提供基于网络的商业智能,专注于分析
  2. 平台选择范围:超级商务智能、超级商务智能专业版和超级商务智能高级版
  3. 收集、连接和存储内部或云中的所有数据源
  4. 随着企业的发展,允许迁移到更密集的套件产品
  5. 创建在所有设备上可用的实时可视化
  6. 提供导出报告以便与其他人协作的功能
  7. 为不同行业的各种规模的企业提供解决方案

5.Qlik 和 QlikSense

想想饼图、折线图、数据透视表、条形图等等📊,QlikView 是一款在行业中广泛使用的工具。

QlikView 也是一个商业智能和数据发现工具,其目标是为目标业务挑战创建导向分析应用程序和仪表板。该软件使用户能够揭示各种变量之间的数据洞察力和关系。

关于 QlikView 的受欢迎程度一直存在争议。虽然 Tableau 口袋里有大品牌,但 QlikView 使用内存数据模型,使其能够即时准确地处理庞大的数据集,这是 Tableau 的改进范围。

【Qlik 卖什么?

  1. 允许访问内部和云移动和网站服务
  2. 为收集和操作数据提供统一的界面
  3. 通过人工智能驱动的建议帮助用户创建分析
  4. 创建点击式可视化和交互式报告
  5. 集中分析和应用程序以实现协作
  6. 允许从 R 和 Python 进行高级分析计算

6.SAP HANA

SAP HANA(高性能分析设备)是一个 RDBMS,由 SAP 开发和销售。它作为数据库服务器的主要功能是根据支持应用程序的请求存储和检索数据。

SAP HANA 是一种基于 ETL 的复制,使用 SAP 数据服务从 SAP 或非 SAP 源迁移数据到 HANA 数据库。在其生物圈中使用 SAP 的企业使用 HANA 在短时间内处理大量实时数据。

由于 SAP 是一个闭源生态系统,HANA 可能不是独立数据科学家的工具,但对于 SAP 中的业务或职业来说,HANA 可能是一个值得炫耀的好技能。

SAP HANA 卖什么?

  1. 实时发现商业智能趋势
  2. 提供高速事务和分析处理的内存数据库
  3. 与 SAP Business Objects BI 解决方案紧密联系,以获得洞察力和分析能力
  4. 用于第三方应用程序访问的 SQL、SAP ERP 接口
  5. BI 自助服务分析

7.斯堪的纳维亚航空公司

SAS —统计分析系统

和 R 一样,SAS 是为高级数据分析和复杂的统计操作开发的工具。它是一个闭源的专有工具,提供了各种各样的统计功能来执行复杂的建模。由于其高可靠性,SAS 主要由大型组织和专业人员使用。

虽然 SAS 不是最适合初学者和独立数据科学爱好者的工具,但它 SAS 是为满足高级业务需求而量身定制的,如果你在职业生涯中寻找特定的数据科学角色,良好的 SAS 知识将为你的档案增添光彩。

SAS 在企业分析领域一直是无可争议的市场领导者,但是,要将其功能与 Python 或 R 进行比较,SAS 似乎很难对数据进行建模和可视化。此外,学习曲线是棘手的,有时很难,主要是由预算庞大的大公司使用。

销售 SAS 的是什么?

  1. 名字
  2. 非常强的数据分析能力,有助于分析和洞察
  3. 通过单一 SAS 业务分析许可证访问来自 60 多个数据源的数据,包括 RDBMS、PC 文件、Hadoop、Amazon Redshift 和其他数据仓库设备
  4. 提供一个交互式、自助式、易于使用的界面,用于分析、清理和混合数据
  5. 实现与分析管道的完全集成
  6. 为自助式数据发现、报告和世界一流的分析提供集成环境
  7. 无需编码即可访问高级分析功能—关联、预测、决策树、文本分析等

8.(舞台上由人扮的)静态画面

Tableau 是目前商业智能中非常流行和强大的数据可视化工具。Tableau 的数据分析快速而强大。通过可视化仪表板和工作表,Tableau 涵盖了将原始数据简化为非常容易理解的格式、清理数据以及识别潜在趋势和模式。

很长一段时间以来,像百事可乐、威瑞森、查尔斯·施瓦布、可口可乐、Chipotle 这样的大公司都在使用 Tableau 来利用他们的数据并做出结论性的明智决策。对于任何对数据科学或数据分析职业感兴趣的人来说,Tableau 这样的工具是必不可少的。

什么卖画面?

  1. 广泛的功能和客户群
  2. 提供内部、公共和完全托管的商业智能解决方案
  3. 安装本地、公共云、Tableau 云
  4. 允许在 web 和移动设备上访问
  5. 为没有技术知识的用户提供直观的自助式分析
  6. 集成来自多个来源的数据,无论是内部的还是基于云的
  7. 只需点击几下鼠标,即可创建实时可视化效果

9.TIBCO Spotfire

Spotfire 是一家位于马萨诸塞州萨默维尔的商业智能公司,于 2007 年被 TIBCO 收购(维基百科)。Spotfire 具有与 Tableau 或 QlikView 相同的通用可视化功能。

虽然 Tableau Public 和 Power BI Desktop 可以免费使用,但 TIBCO Spotfire 的价格为每位用户每年 650 美元。没有免费版本可能会使它在独立数据科学家中不那么受欢迎。然而,我最近看到了这个故事,讲述了雅高酒店如何使用 TIBCO Spotfire 改善客户体验,以及更快、更容易、更简单的整合。

TIBCO 最初是集成和分析领域的全球领导者,拥有庞大的客户群。你可以点击这里访问 TIBCO 客户名单

TIBCO Spotfire 的卖点是什么?

  1. 广泛的可视化(约 16 个 viz 选项)
  2. 通过移动浏览器访问构建、部署和共享分析应用
  3. 建议向导自动创建可视化效果
  4. 使用统计/回归模型获得预测洞察力
  5. 从实时行业数据中获取不间断分析
  6. 250GB 集中式存储,带 Spotfire 云

10.Zoho 分析

Zoho 是一个基于网络的在线办公套件,它提供了一个名为 Zoho Analytics 的自助式商业智能平台。这是一个基于云的平台,可以选择内部安装。Zoho 连接到各种各样的来源来收集数据。它可以从流行的商业软件或通过 Zoho 的自助服务工具自动合并数据。数据保留在美国数据中心。

Zoho Analytics 旗下有 50 万家企业,约 5000 万 2M 用户,以及 5000 万份报告。根据我的研究,我发现 Zoho Analytics 拥有最全面的第三方连接器——500 多个现成的商业应用集成!一定要看看这个工具。

【Zoho Analytics 的卖点是什么?

  1. 允许访问内部、移动和云
  2. 需要最少的专业知识
  3. 从许多来源收集数据,并允许自动同步
  4. 提供拖放工具来创建仪表板、可视化和报告
  5. 通过网页和应用程序共享报告和仪表板
  6. 为协作提供工作空间

这就是我的博客的结尾。感谢您的阅读!我希望这有所帮助!一定要让我知道你想学习或探索什么样的 BI 工具。

免责声明:本文表达的观点是我自己的观点,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。

学习机器和深度学习的 10 大课程(2020)

原文:https://towardsdatascience.com/top-10-courses-to-learn-machine-and-deep-learning-2020-7cc2d9c3bae3?source=collection_archive---------26-----------------------

机器学习课程——终极清单

你知道我开始学机器学习的时候希望拥有什么吗?多合一机器学习课程。当时,要找到一门包含所有必要概念和算法的好课程真的很难。所以我们被迫在网上搜索,阅读研究论文,买书。

幸运的是,情况不再是这样了。现在我们的情况正好相反。外面有那么多课程。我应该如何知道哪一个是好的,这包括我需要学习的所有东西。所以我在这里整理了一份最受欢迎和教授得最好的课程清单。

大部分我都有亲身经历,我强烈推荐所有的。我认识的每一个机器学习工程师或数据科学家都建议他们中的一个或多个。所以不要再往前看了。好了,我们开始吧。

1)斯坦福大学(Coursera)的机器学习

斯坦福大学的这门课程被许多人认为是最好的机器学习课程。它是由吴恩达亲自教授的(对于那些不认识他的人,他是斯坦福大学教授、Coursera 的联合创始人、谷歌大脑的联合创始人和百度的副总裁),它涵盖了你需要知道的所有基础知识。此外,它的评分高达 4.9 分(满分 5 分)。

该材料是完全独立的,适合初学者,因为它教你线性代数和微积分的基本原理以及监督学习。我能想到的一个缺点是,它使用 Octave(Matlab 的开源版本)而不是 Python 和 R,因为它真的希望你专注于算法而不是编程。

费用:免费审核,如果你想要证书,79 美元

完成时间:76 小时

评分:4.9/5

教学大纲:

  • 一元线性回归
  • 线性代数评论
  • 多元线性回归
  • Octave/Matlab 教程
  • 逻辑回归
  • 正规化
  • 神经网络:表示
  • 神经网络:学习
  • 应用机器学习的建议
  • 机器学习系统设计
  • 支持向量机
  • 降维
  • 异常检测
  • 推荐系统
  • 大规模机器学习
  • 应用示例:照片 OCR

2)Deep Learning . ai(Coursera)深度学习专业化

这是一门由吴恩达教授的课程,也被认为是深度学习领域的佼佼者。你看到这里的模式了吗?它实际上由 5 门不同的课程组成,它将让你清楚地了解最重要的神经网络架构。说真的,如果你对 DL 感兴趣,不要再看了。

它利用 Python 和 TensorFlow 库(可能需要了解一些背景知识),让您有机会处理自然语言处理、计算机视觉、医疗保健等现实生活中的问题。

费用:免费审核,认证费 49 美元/月

完成时间:3 个月(11 小时/周)

评分:4.8/5

教学大纲:

  • 神经网络和深度学习
  • 改进神经网络:超参数调整、正则化和优化
  • 构建机器学习项目
  • 卷积神经网络
  • 序列模型

3)高级机器学习专业化(Coursera)

高级机器学习专业由国立研究大学高等经济学院提供,由顶级 Kaggle 机器学习实践者和 CERN 科学家组织和教授,包括 7 门不同的课程,涵盖强化学习和自然语言处理等更高级的主题。你可能需要更多的数学知识和对 ML 基本概念的理解,但是优秀的教学和有趣的环境会弥补你的不足。我强烈推荐它。

费用:免费审核,认证费 49 美元/月

完成时间:8-10 个月(每周 6-10 小时)

评分:4.6/10

教学大纲:

  • 深度学习简介
  • 如何赢得数据科学竞赛:向顶级 Kagglers 学习
  • 机器学习的贝叶斯方法
  • 实用强化学习
  • 计算机视觉中的深度学习
  • 自然语言处理
  • 通过机器学习应对大型强子对撞机的挑战

4)佐治亚理工学院(Udacity)的机器学习

如果你需要一个整体的方法和一个互动的环境,这就是你的课程。不得不承认,我还没见过比这更完整的课程。从有监督的学习到无监督的强化,你能想到的它都有。

它不会教你深度神经网络,但它会让你清楚地了解所有不同的 ML 算法,它们的优点,它们的缺点以及它们如何在现实世界中使用。此外,如果你是整个课程中非常短的视频和互动测验的粉丝,它对你来说是一个完美的匹配。

费用:免费

完成时间:4 个月

教学大纲:

  • 监督学习
  • 无监督学习
  • 强化学习

【theaisummer.com关于机器学习和人工智能的更多教育内容和资源,请不要忘记查看我们的博客

5)机器学习入门(Udacity)

这门入门课是由 Udacity 的联合创始人巴斯蒂安·特龙和数据科学研发总监凯蒂·马龙设计和教授的。它的主要受众是正在寻找 ML 入门课程的初学者。同样,如果你喜欢 Udacity 的环境(我个人也喜欢),这是一个很好的入门选择。

费用:免费

完成时间:10 周

教学大纲:

  • 欢迎来到机器学习
  • 朴素贝叶斯
  • 支持向量机
  • 决策树
  • 选择你自己的算法
  • 数据集和问题
  • 回归
  • 极端值
  • 使聚集
  • 特征缩放

6)深度学习纳米度(Udacity)

Udacity 的深度学习 Nanodegree 将教你从卷积网络到生成对抗网络的所有前沿 DL 算法。这是相当昂贵的,但也是唯一一个有 5 个不同动手项目的课程。您将构建一个狗品种分类器、一个人脸生成系统和一个情感分析模型,您还将学习如何在生产中部署它们。最棒的是,它是由真正的权威人士讲授的,如伊恩·古德菲勒、朱俊彦、巴斯蒂安·特龙和安德鲁·特拉斯克。

费用:1316 €

完成时间:4 个月

评级 4.6/5

教学大纲:

  • 项目 1:预测自行车共享模式(梯度下降和神经网络)
  • 项目 2:犬种分类器(CNN,AutoEncoders 和 PyTorch)
  • 项目 3:制作电视剧本(RNN,LSTM 和嵌入)
  • 项目 4:生成人脸(GAN)
  • 项目 5:部署情感分析模型

7)机器学习由哥大(edX)

我们列表中的下一个是 edX,由哥伦比亚大学提供。它需要大量的数学(线性代数和微积分)和编程(Python 或 Octave)知识,所以如果我是初学者,我不会从这里开始。然而,如果更高级的学生想要发展对算法的数学理解,它可能是理想的。

这门课程的独特之处在于,它专注于机器学习的概率领域,涵盖了贝叶斯线性回归和隐马尔可夫模型等主题。

费用 : 免费审核,证书 227 美元

完成时间:12 周

教学大纲:

  • 第一周:最大似然估计,线性回归,最小二乘法
  • 第二周:岭回归,偏差-方差,贝叶斯法则,最大后验推断
  • 第三周:贝叶斯线性回归,稀疏性,线性回归的子集选择
  • 第四周:最近邻分类,贝氏分类器,线性分类器,感知器
  • 第五周:逻辑回归,拉普拉斯近似,核方法,高斯过程
  • 第 6 周:最大利润,支持向量机,树,随机森林,助推
  • 第 7 周:聚类,k-均值,EM 算法,缺失数据
  • 第八周:高斯混合,矩阵分解
  • 第九周:非负矩阵分解,潜在因素模型,主成分分析和变异
  • 第十周:马尔可夫模型,隐马尔可夫模型
  • 第 11 周:连续状态空间模型,关联分析
  • 第 12 周:模型选择,后续步骤

8)程序员实用深度学习,v3 ( by fast.ai)

《程序员实用深度学习》是一个了不起的免费资源,面向有一些编码背景(但不太多)的人,包括各种笔记、作业和视频。它是围绕着给学生在这个领域的实践经验的想法而建立的,所以期待通过编码来实现。你甚至可以学习如何使用云上的 GPU 服务器来训练你的模型。相当酷。

费用:免费

完成时间:12 周(每周 8 小时)

教学大纲:

  • 随机森林简介
  • 随机森林深潜
  • 性能、验证和模型解释
  • 功能重要性。树解释程序
  • 外推和 RF 从零开始
  • 数据产品和实时编码
  • RF 从零开始和梯度下降
  • 梯度下降和逻辑回归
  • 正规化、学习率和 NLP
  • 更多 NLP 和柱状数据
  • 嵌入
  • 完整的罗斯曼。伦理问题

9)机器学习 A-Z:数据科学领域的实践 Python&R

毫无疑问,这是 Udemy 上最受欢迎的人工智能课程,有 50 万学生注册。它是由数据科学家和外汇系统专家基里尔·叶列缅科和数据科学家哈德林·德·庞特维斯共同创建的。在这里,您可以使用 Python 和 r 中的代码模板对最重要的 ML 算法进行分析。

成本:199 €(但有折扣。在撰写本文时,价格为 13.99€)

完成时间:41 小时

教学大纲:

  • 第 1 部分—数据预处理
  • 第 2 部分—回归:简单线性回归、多元线性回归、多项式回归、支持向量回归、决策树回归、随机森林回归
  • 第 3 部分—分类:逻辑回归、K-NN、SVM、核 SVM、朴素贝叶斯、决策树分类、随机森林分类
  • 第 4 部分—聚类:K-均值,层次聚类
  • 第 5 部分—关联规则学习:Apriori,Eclat
  • 第 6 部分—强化学习:置信上限,汤普森抽样
  • 第 7 部分—自然语言处理:自然语言处理的词袋模型和算法
  • 第 8 部分—深度学习:人工神经网络、卷积神经网络
  • 第 9 部分—降维:主成分分析、线性判别分析、核主成分分析
  • 第 10 部分—模型选择和提升:k 倍交叉验证、参数调整、网格搜索、XGBoost

10) CS234 —斯坦福的强化学习

名单上最难的课程,因为强化学习无疑要困难得多。但是如果你想深入其中,没有更好的方法了。事实上,这是斯坦福大学的真实录音讲座。所以你自己要做好成为斯坦福学生的准备。Emma Brunskill 教授使理解所有这些复杂的主题变得非常容易,并为您提供了关于 RL 系统和算法的精彩介绍。当然,你会发现很多数学方程和证明,但是涉及到强化学习的时候就没有办法了。

你可以在这里找到课程网站和这个 Youtube 播放列表中的视频讲座

费用:免费

完成时间:19 小时

教学大纲:

  • 介绍
  • 给定一个世界模型
  • 无模型策略评估
  • 无模型控制
  • 价值函数逼近
  • CNN 和深度 Q 学习
  • 模仿学习
  • 政策梯度一
  • 政策梯度二
  • 政策梯度三和审查
  • 快速强化学习
  • 快速强化学习 2
  • 快速强化学习 III
  • 批量强化学习
  • 蒙特卡罗树搜索

给你。机器和深度学习课程的终极清单。其中一些可能太先进,一些可能包含太多的数学,一些可能太贵,但每一个都保证教你在人工智能领域取得成功所需的一切。

老实说,你选择哪一个并不重要。都是一流的。重要的是选择一个并开始学习。

****有关机器学习和人工智能的更多教育内容和资源,请不要不看我们的博客就离开theaisummer.com

原载于 2020 年 2 月 10 日 https://theaisummer.com。****

2020 年十大数据科学和人工智能博客

原文:https://towardsdatascience.com/top-10-data-science-and-ai-blogs-in-2020-af7367d9a1f3?source=collection_archive---------24-----------------------

数据科学

2020 年的一些最佳数据科学和人工智能博客

Unsplash 上由 Franck V. 拍摄的照片

数据科学和人工智能(AI) 是将塑造这个宇宙未来的新兴领域。数据是公司或政府机构最重要的资产之一。它帮助我们根据过去的经验预测未来。

医学研究人员需要数据来发明治疗方法。气象分析师利用数据调查大气并预测天气状况。甚至,美国国家航空航天局向月球和火星发送任务仅仅是为了收集数据。

简而言之,我们被尚未探索的数据所包围。人工智能可能会帮助我们加快这些数据的收集和分析。

今天,我将分享我个人最喜欢的关于数据科学和人工智能的博客。我定期阅读它们,以深入了解当前的研究情况和最佳实践。

这份清单排名不分先后,都是很棒的读物!

(这不是一个赞助的帖子,所有列出的博客都是我最喜欢读的)

1- 数据科学中心

数据科学中心主页

数据科学中心是一个为对人工智能和数据科学感兴趣的人提供的平台。许多顶尖的研究人员和数据从业者都是这个社区的一部分。

人们经常通过博客、播客、网络研讨会和论坛来分享他们的知识。在这里,你甚至可以找到与商业智能、数据分析和统计相关的工作。

我强烈推荐你加入这个志趣相投的社区。请放心,如果您需要一些与数据科学项目相关的帮助,总会有人帮您的。

2- 走向数据科学

走向数据科学主页

这是一个由数据科学专业人士社区支持的博客。他们用它来与我们分享他们的想法和代码示例。

基本上,在走向数据科学上,您将获得专为数据科学受众设计的高质量内容。这意味着您将经常学习一些新概念和可行的技巧,以增强您的数据科学和机器学习技能。

如果您已经对 R、Python 和 JavaScript 等编程语言有所了解,那就太好了。这些语言主要被数据科学家用来执行复杂的计算。

我本人是这份流行媒体出版物的读者和作者,它在名单上,因为它是我每天阅读数据科学的 gotos 之一。

3- 实时码流

实时代码流主页

几年前,我也很难找到关于数据科学、机器学习和人工智能的优质内容。如果您停留在某个地方,几乎没有任何可用的编码解决方案。

在经历了艰难的学习之后(例如,通过代码实验),我最终决定创建这个博客。主要的想法是与你们分享我的数据科学和编程经验,使用要点教程和指南。

比如我以前发表过类似使用 JavaScript 的人脸滤镜不用深度学习找车道的文章。

4- 分析 Vidhya

分析 Vidhya 主页

Analytics Vidhya 始终被列为数据科学学生的最佳学习点之一。它就像一个一站式商店,提供免费和付费课程、论坛和博客。它甚至使公司能够通过组织竞争来雇用顶尖人才。

我认为 Analytics Vidhya 适合数据科学学习者,无论他们是刚刚起步还是已经有一些专业经验。

如果你在寻找机器学习或数据科学方面的工作,那么我建议你参加他们的黑客马拉松。它将帮助你建立一个对吸引潜在客户非常重要的投资组合。

5- 人工智能趋势

人工智能趋势主页

顾名思义,AI trends 专注于报道与人工智能相关的话题和新闻。这可能有助于你为即将到来的项目获得灵感。

它的编辑人员包括一些人工智能领域最优秀的人才。所以,这意味着书签人工智能趋势一定会让你了解最新的发展。

6- 麻省理工学院人工智能新闻

麻省理工学院主页人工智能新闻

麻省理工学院无疑是领先的技术研究机构。他们在自己的网站上为人工智能爱好者专门开辟了一个完整的版块。

他们不时分享关于机器如何学习和改善我们生活的研究材料。像能够推理日常行为的机器学习模型帮助自动驾驶汽车看到拐角这样的文章表明了智能系统的能力。

7- KDnuggets

KDnuggets 主页

自 1997 年以来,KDnuggets 一直在发表关于人工智能、机器学习和数据科学的文章。在数据科学家和程序员中,这是一个非常有名的资源。

它还有不同的部分,管理员在那里显示与社区相关的在线课程、网络研讨会、活动和工作的链接。

8- IBM 开发人员代码模式

IBM 开发人员代码模式主页

开发人工智能程序是一项非常复杂和耗时的任务。作为一名程序员,我们经常陷入困难的编码挑战中,这减缓了我们的进度。

这就是为什么 IBM 主动创建了一个名为代码模式的平台来解决开发人员普遍面临的问题。他们写了关于机器学习模型、数据可视化、语音识别以及与编程世界相关的一切的最佳实践。

9- 机器学习掌握度

机器学习大师主页

杰森·布朗利是这个关于机器学习的博客的幕后黑手。在撰写本文时,他已经发表了 967 篇博文。它告诉我们他对这个领域的一致性和熟悉程度。

我个人通过他的循序渐进指南学到了很多新的机器学习概念。

杰森还出版了 19 本与机器学习和深度学习相关的电子书。他的一些电子书是为初学者设计的,而另一些是为更高级的学习者设计的。

10- 数据波

Datanami 主页

Datanami 发布关于人工智能、数据科学和高级分析的新闻。关注这个网站意味着你将定期了解世界是如何利用人工智能和数据科学的。

这是由 Tabor Communications 管理的众多网站之一。他们的团队由来自科技行业的专业人士组成,他们通过这个平台发表了自己的想法和观点。

优质内容是 Datanami 的第一要务。这意味着你永远不会在他们的网站上看到任何无用的材料。如果你对新兴技术感兴趣,那么 Datanami 可能是一个很好的资源。

结论

没有数据,就不可能做出明智的决策。数据科学家是那些分析过去信息并创建人工智能系统可以遵循的程序的人。

由于这个市场仍在发展中,所以新人有很多机会被雇佣。但是,在此之前,拥有良好的人工智能和数据科学知识将非常有益。

所以,我强烈推荐你收藏这些最佳数据科学和人工智能博客

未来 9 大数据科学职业

原文:https://towardsdatascience.com/top-10-data-science-applications-of-the-future-bd6cf7553eca?source=collection_archive---------21-----------------------

你以前可能没有探索过的数据科学应用。

亚历山大·奈特Unsplash 上拍照

在当今快速发展的技术世界中,当人类倾向于生成大量数据时,分析数据是必不可少的。D ata 现在是商业的前沿,或者我可以说它已经成为工业的燃料。

有各种各样的行业,如银行、金融、制造、运输、电子商务、教育等。我们听说过使用数据科学。在这篇文章中,我列出了 9 个随着数据科学和相关领域的兴起而发生转变的数据科学职业。我们将看到数据科学如何彻底改变企业感知数据的方式,并激发您对未来的展望。

这篇文章的第二部分将会介绍更多未来的数据科学职业。继续跟着!

1.田径

2017 年 7 月,我在一个基于板球运动的网络系列中首次介绍了田径分析,其中一名团队分析师跟踪了一名球员的过去并展示了他的表现,找出了他的弱点,确定了优势,给出了对手的痛点,并根据数据设计了一个策略,以提高球员在后续比赛中的表现。

到 2020 年,教练和团队现在可以结合球员的表现、心率、卡路里摄入、血液报告、速度、加速和减速等数据来查看趋势。数据分析可以理解运动员数据,提供见解,使教练能够满足运动员训练并提高团队绩效。

在体育运动中,胜负之间的差异可以降到毫秒或毫米,数据可以决定这些。

体育分析有三个主要工具:

SAP Sports One

SAP Sports One 软件通过交互式仪表盘进行实时分析,帮助俱乐部和团队实现运动表现管理的数字化,从而实现协调训练和团队管理;

微软运动性能

微软的运动表现平台是一个定制的运动分析解决方案,通过大数据和机器学习算法聚集和可视化统计数据,为跟踪和提高运动员和团队表现提供预测结果。

体育管理分析表

Tableau 提供交互式仪表盘来创建例程、图形和图表,以提供更好的解决方案来解决疼痛、预测结果,并使运动员为体育运动的身体和精神需求做好充分准备。利益相关者也使用 Tableau 为受众创建仪表板。

2.航空

非凡的问题需要非凡的酊剂!

鉴于全球疫情时代的不断发展,航空业在全球范围内遭受严重损失已不是什么隐藏的事实。无论是国内还是国际,航空公司都是以低于 30%的客座率和营业利润运营的。

在经济形势较好的时候,航空燃油价格和航空公司营销费用的大幅上涨影响了运营利润。不久前,航空公司认识到将数据科学引入其战略管道的潜力。

航空使用案例

  1. 提高燃油效率
  2. 做出更快的业务决策
  3. 预测最佳航线
  4. 预测性维护解决方案
  5. 处理客户忠诚度计划
  6. 反馈分析
  7. 船员管理

Oliver Wyman 是一个很好的关于航空技术的网站资源。根据其网站,高级分析对航空公司来说意味着巨大的节约;相当于节省全球总运营成本的 2%-2.5%,相当于每年 50 亿至 60 亿美元!

3.约会

不然你以为你是怎么找到火柴的?😉

比起现实生活,现在似乎更有可能在约会应用上遇到你的另一半。在线约会网站和应用程序因其配对能力而广受欢迎。为了帮助用户找到完美的伴侣,约会应用程序使用数据科学算法,这些算法由庞大的数据存储提供支持。

聚类和关联

使用聚类和熊猫在约会档案中寻找相关性。配置文件可能会与其他类似的配置文件聚集在一起。这将减少相互不兼容的配置文件的数量。从这些聚类中,用户可以找到更像他们的其他用户。约会应用严重依赖聚类来找到与一个用户账户最相似的约会档案。

自然语言处理(NLP

约会应用程序使用 NLP 来发现关于用户的见解,并根据他们的偏好评估与其他用户的潜在兼容性。该模型使用来自多个用户的输入来寻找具有相似输入的其他用户以进行匹配。这些模型基于用户简档被训练,以将相似的简档放在第一线。

深度学习(DL)

深度学习通过面部特征对用户资料进行排序,这些特征包括有没有被喜欢或被刷过。根据用户刷卡的性质,呈现给你的选项会有所不同。

推荐系统

识别共同兴趣的模型,让您选择一起做的事情—电影、游戏、旅行等。这种机器学习模型可以帮助用户找到下一步的最佳行动。

职业:

Bumble、OkCupid、Tinder、Hinge、火柴等等

4.金融

金融就是数字。它一直是一个涉及处理大量数据的领域。随着数据科学的出现,金融机构比以往任何时候都更加依赖自动化算法和复杂的分析工具来保持领先。

在资金领域,对于如何以及何时采取下一步行动,何时撤回资金,或者何时投入更多资金的决策,有一个指导力量是至关重要的。数据允许以分析、个性化和预测的形式轻松判断转瞬即逝的货币市场

金融用例

  1. 风险分析
  2. 客户分析
  3. 实时股票分析
  4. 消费者数据管理
  5. 股票价值预测
  6. 投资预测
  7. 欺诈检测(信用卡/借记卡)
  8. 算法股票交易

5.赌博

全世界有超过 20 亿玩家(来源不明),游戏数据是一个巨大的储存库,很少被发掘。鉴于当前的“呆在家里”时代,博彩业是巨大收入的来源,预计在不久的将来会进一步增长。随着用户数量呈指数增长,要收集和处理的数据量也在增加。玩家时间、互动时间、退出点、活动峰值、结果、分数等。为数据分析提供大量材料。

游戏中的数据科学主要用于建立模型,分析和识别优化点,进行预测,并支持机器学习算法,识别模式和趋势以改进游戏模型。

游戏的使用案例

  1. 游戏开发
  2. 游戏设计
  3. 玩家分析
  4. 物体识别
  5. 游戏货币化
  6. 欺诈检测(支付)

对于游戏,爱好者也寻求商业智能的途径,通常用于策略、决策和收入监控。

6.卫生保健

医疗保健被认为是最具发展性的领域,因为它依赖于数据分析和可视化。

保险数据是一个迅速扩大其使用范围的数据。保险数据通常包括由疾病、事故、残疾或死亡引起的费用索赔和承保。保险业的数据科学与机器学习和人工智能模型允许保险提供商监控和降低风险,改善客户体验。

保险数据的用例

  1. 欺诈检测
  2. 索赔预测
  3. 风险评估
  4. 个性化医疗保健计划
  5. 价格优化
  6. 终生价值预测
  7. 虚拟助手
  8. 生物信息学

有了数据科学,现在可以获得准确的诊断方法。医疗保健中有几个领域利用了数据科学,如检测、发现、成像和预测诊断。

医学用例

  1. 医学图像分析
  2. 药物开发
  3. 癌症检测
  4. 遗传学和基因组学
  5. 行为分析
  6. 保险和索赔数据
  7. 远程保健
  8. 用于监控患者数据的可穿戴数据

7.营销

在快速发展的数据技术世界中,企业拥有大量的数据。相应地,消费者比以往更期待个性化的购物体验。这就是营销分析发挥作用的时候。营销分析测量、管理和分析营销绩效,以最大化其有效性并优化投资回报(ROI)。

了解营销分析可以让营销人员提高工作效率,并最大限度地减少网络营销费用的浪费。

营销用例

  1. 情感分析
  2. 客户细分
  3. 相似性映射
  4. 推荐系统
  5. 定价策略
  6. 对客户行为的预测分析
  7. 市场篮子分析
  8. 实时互动营销
  9. 预算优化
  10. 用户分组
  11. 观众识别
  12. 瞄准正确的渠道
  13. 销售线索定位
  14. 内容策略创建

现在告诉我一个没有市场营销那么激动人心的职业。

8.流媒体服务

在过去的几年里,在线流媒体已经成为寻求疯狂观看电影和电视节目的观众事实上的目的地。流媒体服务完全是为了用户个性化。数据科学赋予了这一切。平台基于几个输入获得消费者口味的更真实的图片。

观看以下视频,了解网飞如何使用其数据!

职业

Hulu、迪士尼、网飞、亚马逊的 Prime Video、Pandora、Apple Music and TV、Spotify 都是数据科学和分析领域的大量用户和招聘者。

流媒体服务的使用案例

  1. 推荐系统
  2. 客户分析
  3. 实时流分析
  4. 内容个性化
  5. 搜索优化
  6. 内容创作
  7. 客户细分
  8. 相似性映射
  9. “事件”跟踪—播放、暂停、退出、观看日期

9.天气

对芝加哥来说,有句谚语说,你诅咒天气 30 分钟,它就会变!

天气容易受骗。一个阳光明媚的日子可能会因为一场倾盆大雨而毁了你的郊游,因此,一个高度自信的准确预测是必不可少的。天气预报是关于大气的数据。

我看过一篇文章,IBM 收购了气象公司,利用其数据为其著名的人工智能机器沃森(Watson)提供数据,从那次收购中诞生了 Deep Thunder — 高度准确的超本地化预报。许多大型企业集团都在各个领域(农业、体育、哮喘患者、汽车销售)的决策过程中大量投资天气及其数据(显然,雨天会吸引人们购买汽车!🚘)

天气用例

  1. 探索性数据分析
  2. 农业气象人工智能
  3. 天气预报
  4. 卫星图
  5. 图像传感

不久前,印度东海岸遭受了近 20 年来最强的名为“T0”Fani 的飓风袭击。在飓风袭击该地区的 13 天前,印度气象部门有迹象表明可能会有一场大规模的风暴,他们开始为风暴的爆发做准备。创纪录的 120 万人在不到 48 小时内被疏散,仅仅是因为数据科学家!这就是为什么天气会出现在这个列表中!!

这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请务必让我知道你期待什么职业来探索你的数据科学之旅?

数据帐篷快乐!

免责声明:本文表达的观点仅代表我个人,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。

2020 年你应该关注的 10 大数据科学领导者

原文:https://towardsdatascience.com/top-10-data-science-leaders-you-should-follow-in-2020-28ff75776ca7?source=collection_archive---------5-----------------------

如果你是一名数据科学家

(来源)

在我的数据科学生涯中,甚至在生活中,有伟大的导师可以学习是一个巨大的幸事。

我仍然记得大学最后一年我决定从物理学 过渡到数据科学 的决定性时刻。

这一跳……很吓人。

自我怀疑是真实的。恐惧是真实的。

信不信由你,我就像其他有抱负的数据科学家一样,通过学习在线课程、阅读相关教科书和加入 Kaggle 开始。

但我还是觉得少了点什么。

在那段时间里,我一直在自学,但并没有真正理解 数据科学在现实世界中是如何“工作”的,以及如何成为一名伟大的数据科学家。

我觉得我需要一些指导。我需要向导师学习。

这是我开始在 LinkedIn 上向数据科学领导者学习的时候,这对我的学习之旅有很大的帮助,甚至推动了我的数据科学职业生涯,达到了我从未想象过的程度,有丰富的学习机会。

事实上,他们是我通过在 LinkedIn 和 Medium 上分享我的经验、知识甚至错误来回馈数据科学社区的原因。

如果你一直在关注我的文章,我在一年前分享了第一份数据科学领导者名单,这份名单绝非详尽无遗,因此我在此基础上撰写了这篇文章。

****如果你在数据科学领域,我强烈建议你关注这些巨头——我将在下面的部分列出这些巨头——并成为我们数据科学社区的一员,向最优秀的人学习并分享你的经验和知识。

相信我,向这些巨人学习可能会成为你一生中做出的改变人生的决定之一(至少对我来说)。

说够了…让我们开始吧!

2020 年你应该关注的 10 大数据科学领导者

(来源)

1。卡西·科济尔科夫

卡西·科兹尔科夫至少可以说是一个传奇。句号。

她目前在谷歌担任首席决策科学家,也是统计学、数据科学和人工智能交叉领域的专家。

就我个人而言,我认为她是真正的一种罕见的拥有深厚技术专长的人,同时也有能力将事情分解成简单的想法让人们理解。

她在机器学习、人工智能和数据科学领域的思想领导力和想法从未让我感到惊讶,因为它们总是给我新的视角和知识,而我不知道这些是从其他地方学到的。

我的朋友,这就是向他人(也就是导师)学习的力量。

如果你有兴趣向凯西学习——我强烈推荐——看看她在 LinkedinMediumTwitterYouTube 上的帖子、文章和视频。

事实上,是她启发了我写这篇文章——数据科学家 解释的 P 值——看了她关于 P 值分享!

什么是 p 值?(作者:凯西·科济尔科夫)

2。本·泰勒

Ben 是我的一个好朋友,我们第一次见面是在 LinkedIn 上,当时正在讨论某些数据科学话题。

他是人工智能领域的资深思想领袖,拥有超过 16 年的机器学习经验。

他目前在 DataRobot 工作,担任首席人工智能宣传员——是的,如果你想了解更多关于人工智能的知识并了解该领域的最新趋势,他是必去的人。

本——在我看来——是人工智能领域迄今为止最敏锐的头脑之一,他不断地揭开这个领域中一些常见误解的神秘面纱,目标是使人工智能的使用民主化。

如果你在求职过程中使用公司要求的T3视频面试…

你猜怎么着?

Ben 是数据科学团队的领导者,开发了第一个视频面试预测引擎,名为 HireVue Insights,以及许多其他人工智能产品!

3。数据传输

如果你在 LinkedIn 上的数据科学社区中很活跃,我相信你对Dat Tran很熟悉,因为他不断地向公众分享最新的技术和深度学习更新,并提供了许多很好的建议。****

如果你还是不知道他是谁。帮你自己一个忙。看看他在 LinkedinMedium 上的分享吧!

Dat Tran 目前正在领导 Axel Springer AI,这是欧洲最大的数字出版社 Axel Springer SE 的人工智能部门,旨在让 Axel Springer 内部的每个人都可以访问 AI,从而推动创新,重点关注计算机视觉NLP 问题。

顺便说一句,他也是该领域著名的主题演讲人和导师,为数据科学界提供了广泛的帮助。

4。凯文·陈

当我刚开始从事数据科学时,Kevin 是我在 LinkedIn 上通过分享我们的想法和相互学习而结识的首批数据科学家之一。

他在各种科技创业公司工作的广泛经验以及在开发信贷和风险模型方面的深厚专业知识进一步证明了我为什么如此喜欢他的分享。

此外,他关于在现实世界环境中成为一名伟大的数据科学家的建议——无论是技术性的还是非技术性的——对我的学习之旅非常实用和有帮助,因为我们会继续一起成长。

听从他的建议,你就会明白我的意思。😄

5。何塞·马西亚尔·波尔蒂利亚

如果你曾经上过 Udemy 上的数据科学课程,我相信这个名字对你来说听起来很熟悉。

你看。

当我第一次开始我的数据科学之旅时,我不是通过阅读教科书开始的,我不是通过向 Kaggle 学习开始的。

相反,我开始参加这个在线课程,由 Jose Marcial 教授的Python for Data Science and Machine Learning boot camp,这给了我一个强大的基础,并让我对数据科学和机器学习有了更好的理解。****

他是我迄今为止见过的最好的课程创建者和指导者之一,他的课程简单易懂,最重要的是,对你开始学习很实用!

如果你是数据科学的初学者,想更好地了解这个领域及其应用,那么可以看看他的课程

6。古平顺

Koo Ping Shung 绝对是数据科学和人工智能领域的巨头之一。

从他作为一名应届经济学毕业生的卑微起步,到成为数据科学培训、指导和咨询方面的专家,帮助公司建立内部数据科学能力,是如此鼓舞人心!

鼓舞人心的故事作者古平雄

更有趣的是,他还是新加坡最大、最活跃的数据科学聚会组织之一Data Science SG的联合创始人。

我们的目标是教育公众对数据科学有什么期望,数据科学家的工作真正包括什么,并帮助企业了解他们如何从数据科学中受益。

我个人去过几次不同主题的聚会,也和这个领域的专业人士交流过。毫无疑问,这是有史以来最好的聚会,因为每个人都很热情,都渴望一起学习和成长。

7。莱克斯·弗里德曼

Lex Fridman 是麻省理工学院的一名研究科学家,致力于以人为中心的人工智能和深度学习方法,以实现自动驾驶汽车的共享自主。

更令人瞠目结舌的是,他之前做过播客,既做过乔·罗根(part 1&part 2)的嘉宾,也做过主持人(人工智能播客,例如 埃隆·马斯克 )。

埃隆·马斯克:特斯拉自动驾驶| 人工智能(AI)播客

如果你想更多地了解人类行为和人工智能之间的互动,或者你想站在人工智能技术和应用的最前沿,请查看他的播客YouTube 频道,当然,还有他的 LinkedIn 帖子,在那里他分享了关于人工智能的有意义的见解。

就我个人而言,我觉得他的播客和 Linkedin 帖子非常有见地,尤其是关于人工智能的演变及其与人类行为的有趣联系。

8。克里斯汀·凯尔勒

目前克里斯汀·克雷尔是加州大学伯克利分校的数据科学讲师,也是T5【数据打动我 的创始人。

自 2010 年以来,Kristen 一直在多个行业提供创新和可行的机器学习解决方案,包括公用事业、医疗保健和电子商务。

在我的整个数据科学职业生涯中,Kristen 一直是我学习的榜样/导师,她在 SQL 和分析领域拥有丰富的经验和知识。

特别是,我喜欢她和其他杰出的数据科学家之间的讨论,如 LinkedIn 上的 Favio Vázquez ,最重要的是,播客采访——数据科学的人类——与Kate strach Nyi

您可能已经意识到,LinkedIn 上的数据科学社区是一个紧密联系的社区,我们在这里相互交流,共同分享和学习。

9。Srivatsan Srinivasan

Srivatsan 目前是 Cognizant 的首席数据科学家/架构师。

他在构建复杂的分析管道、针对极其复杂的业务流程的机器学习模型以及帮助公司实现数据和分析空间转型方面的经验,无疑提高了我对大数据、云和人工智能等许多领域的理解。

在 LinkedIn 上阅读他的 见解深刻的帖子一直是最有收获的学习活动之一,让我不断了解最新的人工智能技术和数据科学领域的最佳实践。

看看他的帖子,你就知道我的意思了。我知道你会喜欢它们的。😅

10。大卫·兰格

只要你在 LinkedIn 上寻找数据科学帖子(或一般内容)来学习,你可能已经认识大卫了。

除了担任 Schedulicity 的分析副总裁之外,他还以其作为讲师、博客作者和 YouTuber 的出色数据科学教学而闻名。

我的愿景是一个充满懂数据的专业人士的世界。大卫·兰格

他大力提倡 20%的分析推动 80%的投资回报率。

就我个人而言,我从他在 LinkedIn 上的分享中学到了很多,我要说他绝对是数据科学领域最杰出的教育家之一。

最后的想法

(来源)

感谢您的阅读。

这里有一长串的数据科学领导者需要遵循,不是吗?

相信我。

与自学相比,向走过这条道路的导师学习将会节省你大量的时间。更好的是,你将掌握数据科学的知识(技术&软技能),以及如何成为一名伟大的数据科学家****

当然,这里的数据科学领导者名单绝非详尽无遗。这些只是我开始数据科学之旅以来一直关注和学习的一些顶级数据科学领导者。

我希望他们的分享对你有深刻的见解和帮助。

⭐在下面评论,如果你知道我们应该关注的其他数据科学领导者!👇🏻

受到他们贡献的启发,我正在通过分享我的知识和经验来回馈数据科学社区,希望能够帮助更多有抱负的数据科学家。

最终,作为数据科学社区的一员,我们在这里,并将永远在这里分享、帮助、学习和共同成长。

这就是一个社区的意义所在。

我希望您喜欢阅读这篇文章,并期待您成为数据科学社区的一员。

记住,不断学习,永不停止进步。

一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄

关于作者

Admond Lee 目前是东南亚排名第一的商业银行 API 平台 Staq 的联合创始人/首席技术官。

想要获得免费的每周数据科学和创业见解吗?

你可以在 LinkedInMediumTwitter脸书上和他联系。

***** [## 阿德蒙德·李

让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。

www.admondlee.com](https://www.admondlee.com/)*****

十大 dplyr 函数—简化数据分析

原文:https://towardsdatascience.com/top-10-dplyr-functions-data-analysis-made-easy-23fc67f158d5?source=collection_archive---------40-----------------------

Dplyr 比熊猫更轻松,更干净。你敢换吗?

在过去的几年里,我一直是 Python 的粉丝。这种语言对于数据科学来说非常优秀,作为一种通用的语言使得数据科学的非数据科学部分变得更加容易。但是在数据探索和准备领域,R 的dplyr能打败 Python 的pandas吗?是的,可以。

照片由斯科特·格雷厄姆Unsplash 上拍摄

今天我们来看看如何使用 10 个最常见的dplyr功能。这还不是该软件包所能提供的全部,请参考此链接获取完整列表。我们将使用 Gapminder 数据集进行整个分析,该数据集可直接在 r

以下是如何导入我们今天需要的所有包:

library(dplyr)
library(gapminder)

让我们从下一节开始探索。

挑选

当我们想要选择一列或多列时,使用 select 命令。可以把它想象成 SQL 中的一个SELECT语句,在这里我们可以只挑选感兴趣的列,而不去碰其他的列。

这是使用select的第一种方法——列出我们想要保留的所有列:

gapminder %>% 
  select(country, year, lifeExp)

作者图片

另一种方法是通过指定我们想要删除的列——用-前缀完成:

gapminder %>% 
  select(-continent)

作者图片

过滤器

filter 命令相当于 SQL 中的WHERE关键字,因为我们只能获取感兴趣的子集。使用该命令有多种方式,如下所示。

让我们只保留 1952 年的那些行:

gapminder %>% 
  filter(year == 1952)

作者图片

让我们添加另一个过滤器—年份仍然是 1952 年,但我们只需要克罗地亚的数据:

gapminder %>%
  filter(year == 1952, country == 'Croatia')

作者图片

那太好了,但是我们如何通过多年来过滤。这里%in%操作符派上了用场:

gapminder %>%
  filter(year %in% c(1952, 1957), country == 'Croatia')

作者图片

安排

arrange运算符用于按单个列对数据进行排序,可以是升序,也可以是降序。默认情况下,升序排序。它相当于 SQL 中的ORDER BY关键字。

让我们按人口升序对 Gapminder 数据集进行排序:

gapminder %>% 
  arrange(pop)

作者图片

让我们按照降序来做同样的事情:

gapminder %>% 
  arrange(desc(pop))

作者图片

明显的

该运算符用于查找给定属性的唯一元素。它不需要任何进一步的澄清,所以让我们直接进入代码。

下面是我们如何在数据集中看到独特的大陆:

gapminder %>% 
  distinct(continent)

作者图片

使突变

mutate操作符用于创建新列。在此操作过程中,所有其他列保持不变。

让我们用人口乘以人均 GDP 来计算一个国家的 GDP:

gapminder %>%
  mutate(totalGdp = pop * gdpPercap)

作者图片

使变形

这个操作符与mutate几乎相同,唯一的区别是transmute不保留其他属性——只保留新的属性。

我们将再次使用它来计算总 GDP,然后将结果与mutate运算符进行比较:

gapminder %>%
  transmute(totalGdp = pop * gdpPercap)

作者图片

正如所承诺的,只显示了新的totalGdp列。

重新命名

顾名思义,这个操作符用于重命名。注意语法,因为我们必须首先指定新名称。

让我们重新命名几个列——life exp 到寿命预期pop人口:

gapminder %>% 
  rename(lifeExpectancy = lifeExp, population = pop)

作者图片

总结

summarizesummarise操作符对于在数据集上创建汇总统计非常有用。如果不执行分组操作,结果将是单个值。

例如,假设我们想要找出总体平均预期寿命:

gapminder %>% 
  summarize(meanLifeExp = mean(lifeExp))

作者图片

如果我们想的话,我们可以联系其他运营商,比如说在 2007 年找到平均预期寿命:

gapminder %>% 
  filter(year == 2007) %>% 
  summarize(meanLifeExp = mean(lifeExp))

作者图片

这很好,但是summarize在用于分组操作时最有用。接下来我们来讨论这些。

group_by

我们可以使用分组操作符来充分利用前面讨论过的操作符的潜力,比如summarize。这个相当于 SQL 中的GROUP_BY关键字,所以您可能已经很熟悉了。

假设我们想要找出每个大陆的平均预期寿命,如果没有分组运算符,这是不可能的:

gapminder %>% 
  group_by(continent) %>% 
  summarize(meanLifeExp = mean(lifeExp))

作者图片

我们可以将多个操作符链接在一起,并在多个列上执行分组。例如,让我们看看如何找到每个洲的平均预期寿命,并进一步按年份分组(仅 2002 年和 2007 年):

gapminder %>% 
  filter(year %in% c(2002, 2007)) %>% 
  group_by(continent, year) %>% 
  summarize(meanLifeExp = mean(lifeExp))

作者图片

if_else

这不是你的传统操作符,因为我们在其他操作符中使用它,比如mutate。它让我们无需编写多行代码就可以执行矢量化的 if-else 语句。

让我们看看如何按洲和年份(仅 2002 年和 2007 年)分组并计算平均预期寿命,然后创建另一个列,如果平均预期寿命大于 70,则该列的值为“Y ”,否则为“N ”:

gapminder %>% 
  filter(year %in% c(2002, 2007)) %>% 
  group_by(continent, year) %>% 
  summarize(meanLifeExp = mean(lifeExp)) %>% 
  mutate(meanLifeExpOver70 = if_else(meanLifeExp > 70, 'Y', 'N'))

作者图片

离别赠言

一天下来,在dplyr完成的任何事情都可以在pandas完成。但是你不得不承认—dplyr做起来如此轻松,而且用了一种更简单、更干净的方式。两者之间的比较是另一个时间的潜在主题,所以让我知道你是否对此感兴趣。

此外,让我知道你更喜欢哪一个,为什么——尽量保持你的观点不偏不倚。

加入我的私人邮件列表,获取更多有用的见解。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

原载于 2020 年 10 月 26 日https://www.betterdatascience.com

Azure Synapse 分析工作区的十大功能

原文:https://towardsdatascience.com/top-10-features-in-azure-synapse-analytics-workspace-ec4618a7fa69?source=collection_archive---------23-----------------------

让我们来分解 Azure Synapse Analytics 的不同组件

作者图片

TLDR

  • 什么是 Azure Synapse Analytics

十大特色

  • SQL 池
  • 复印作业
  • 数据流
  • 管道
  • SQL 脚本
  • 火花笔记本
  • 从存储器快速读取数据
  • 运行 ML 项目
  • 可视化
  • 访问控制

什么是 Azure Synapse Analytics

它是一个端到端的数据平台,将数据仓库、可视化、数据科学和 ETL / ELT 流程全部结合在一个地方。在这篇博客中,我将列出一些使 Azure Synapse Analytics 成为一个非常强大的工具的顶级功能。

图片来自 Azure Synapse Analytics

1。SQL 池(数据仓库)

如果你在 Azure 门户中键入“Azure SQL 数据仓库”,Azure Synapse 就会出现。这是 Synapse 之前 Azure 产品中以前的数据仓库的名称。就 Azure Synapse 是什么而言,这可能会造成一点混乱。Azure Synapse 不仅仅是数据仓库,它还有数据仓库以及上图中显示的其他几个组件。数据仓库被称为 SQL 池。使用 SQL Pool,您可以加载事实表或维度表。您还可以随时选择增加计算以获得更好的性能,以及暂停 SQL 池。

2。复印作业

现在我们知道 Azure Synapse 包含数据仓库,我们需要将数据放入数据仓库。这是通过编排工具完成的。您可以从工作区内的多个连接器中的任何一个创建复制作业。看看下面的连接器。这些是你可能在 Azure Data Factory 中见过的连接器。

作者视频。来自微软复制活动的文档

您还可以从多种格式中复制数据:

作者图片

3。数据流

这可能是我在 Azure Synapse 中最喜欢的功能,因为它降低了清理数据的障碍。我非常支持让事情变得更容易完成(我认为每个人都应该成为:D)。数据流将 SQL 带到您的家门口,能够执行常见的任务,如连接、联合、查找、选择、过滤、排序、更改等等。所有代码都很少甚至没有。

作者图片

它还能让您很好地了解数据清理过程。看看下面的例子。

作者图片

4。管道

一旦创建了拷贝作业或数据流。你可以通过管道来运行它。这使您有机会通过添加触发器来调度作业,从而自动化该过程。

作者图片

或者

向管道中添加其他活动,如 Spark 作业、Azure 函数、存储过程、机器学习或条件(If、then、ForEach 等)。

作者图片

5。编写 SQL 脚本

在 SQL 脚本下,您可以编写自己熟悉的 SQL 语句。它可以灵活地连接到 Synapse 工作区之外的外部数据源,例如 Hadoop、Azure Data Lake Store 或 Azure Blog Storage。您还可以连接到公共数据集。看看下面的例子

[## 使用 SQL on-demand(预览版)在 Azure Synapse Studio(预览版)中分析 Azure 开放数据集…

在本教程中,您将学习如何通过使用……组合不同的 Azure Open 数据集来执行探索性数据分析

docs.microsoft.com](https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/tutorial-data-analyst)

可视化您的 SQL 输出

在 SQL 查询的结果窗口中,您可以通过将视图菜单从表格更改为图表来可视化结果。这为您提供了自定义结果的选项,例如,我在下面运行的查询让我可以选择以折线图的形式查看我的结果,我还可以随意编辑图例并为其添加标签。完成后,我可以将图表保存为图像,以便在 Azure Synapse 之外进一步使用。

作者图片

6。一本闪闪发光的笔记本

你可以连接不同风格的 PySpark(Python),Spark(Scala),。Net Spark (C#)和 Spark SQL。有了这些选项,您可以在同一个笔记本中用任何语言无缝地编写代码。

参见下面的示例,其中

  1. 用 PySpark (Python)连接一个 ADLS csv 文件
  2. 用 PySpark 创建一个临时视图
  3. 然后使用 SparkSQL 读取临时视图
  4. 这为您提供了更多选择,例如:
  • 按特定列排序
  • 创建一个图表(类似于 SQL 脚本)

5.再往下,我用 Spark(Scala)连接到一个 SQL 池

作者图片

Azure Synapse 笔记本最大的特点之一就是可以灵活地使用任何语言来完成工作。具有不同技能的人可以在示例笔记本中轻松协作。

7。从 Azure Data Lake 商店快速阅读(ADLS)

ADLS 是 Azure Synapse 的默认存储单元,它基本上就像一个文件浏览器,能够保存不同格式的数据。它也有助于快速预览数据,使用 Azure Synapse,您可以右键单击文件,执行一些方便的选项,如:

  • 选择前 100 行
  • 预览数据
  • 用 Spark 将数据读入笔记本
  • 将数据读入 SQL 表
  • 创建数据集
  • 创建数据流

作者图片

拥有这些选项就像拥有热键或键盘快捷键,因为它们加快了数据摄取过程。

8。运行机器学习项目

机器学习可以通过 Apache Spark MLlib 在 Azure Synapse 中使用(参见示例链接)。你可以导入你喜欢的 ML 包,比如 Matplotlib,Pandas,Numpy 等等。您还可以选择通过 Azure Machine Learning Studio 创建您的 ML 模型,并通过我在特性 4 中提到的管道接收它。

[## 使用 Apache Spark ml lib-Azure Synapse Analytics 构建机器学习应用程序

在本文中,您将学习如何使用 Apache Spark MLlib 创建一个机器学习应用程序,该应用程序执行简单的…

docs.microsoft.com](https://docs.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-machine-learning-mllib-notebook)

9。可视化

在 Azure Synapse 中,您还可以链接您的 Power BI 工作区。这允许您将数据导入 Power BI,以创建报告和响应性仪表板。

作者图片— 来自 Azure GitHub 的数据集 Repo

10。访问控制

对于我上面提到的所有功能,权限对于维护职责分离至关重要。在 Azure Synapse 中,您可以基于您的角色分配权限。有 3 个角色:工作区管理员、SQL 管理员和 Apache Spark 管理员。

作者图片

更多详情请点击下面的链接

[## 教程:Azure Synapse 分析入门-使用 Power BI - Azure 可视化工作区数据…

在本教程中,您将学习如何创建一个 Power BI 工作区,链接您的 Azure Synapse 工作区,并创建一个…

docs.microsoft.com](https://docs.microsoft.com/en-us/azure/synapse-analytics/get-started-visualize-power-bi)

结论

Azure Synapse 拥有大量功能,无论您是数据分析师、数据科学家、数据工程师还是所有这些角色的混合体。在我即将发表的文章中,我希望你能和我一起探索这些特性。

十大免费自动化测试工具,让您的生活更轻松

原文:https://towardsdatascience.com/top-10-free-automation-software-that-will-make-your-life-easier-63217e670447?source=collection_archive---------2-----------------------

今天,我们需要一切都快而又快捷,所以这就是为什么有那么多工具可以帮助你更快地实现目标。

NeONBRANDUnsplash 上的原始照片

我整理了一份 10 大自动化工具的清单,可以帮助你更快地完成工作。这个列表包含了不同的测试工具,这些工具被用于自动化/手动测试、单元测试、性能、web、移动等领域。

比所有那些能帮到你的自动化工具更好的是,它们可以免费使用( 开源 )。

让我们直接投入进去吧!

Selenium 使用Chrome 的 Web 驱动程序来测试命令和处理网页以获得你需要的数据。它与几乎所有可用的编程语言兼容,并为您提供了各种各样的命令和选项,您可以对其进行操作。

这是我最喜欢的,我已经写了很多次了。我将它与 PythonWeb Scraping 结合起来,以获得可能的最佳结果。
如果你想了解更多关于 Selenium 及其功能的信息,请查看:Selenium 的 25 大功能,它们将使你成为网络抓取专家

另外,如果你想要更高级的用法,请查看:如何用 Python 制作分析工具

链接到图像

美味的汤

美汤是一个 python 库,用于从 HTML 和 XML 文件中提取数据。它创建了数据解析树以便于获取数据。

继 Selenium 之后,这也是我的最爱之一,仅仅是因为它的易用性和强大性。

这里还有一个美汤用法的例子:如何用 Python 省钱。

链接到图像

机器人工厂

Robotium 是一款免费软件,可以让你测试基于 Android 的应用程序。这是一个测试自动化框架,它支持许多不同的测试领域,包括灰盒 UI 测试、系统测试,以及对本地和混合 android 应用程序的用户接受度测试。

从他们的 GitHub 中:

R obotium 是一个 Android 测试自动化框架,完全支持本地和混合应用程序。Robotium 使得为 Android 应用程序编写强大且健壮的自动黑盒 UI 测试变得容易。在 Robotium 的支持下,测试用例开发人员可以编写功能、系统和用户验收测试场景,跨越多个 Android 活动。

链接到图像

瓦特尔

Watir 是一个免费的 Ruby 库,可以让你进行自动化测试,比如点击、填写表格等。

Name 是一个首字母缩写词,来自于应用程序 uby。

从他们的网站:

用于自动化测试的开源 Ruby 库。Watir 与浏览器的交互方式和人们一样:点击链接、填写表格和验证文本。

链接到图像

阿帕奇 JMeter

Apache JMeter 是一个免费使用的 Java 桌面应用程序,主要用于 web 应用程序负载测试。它还支持有限的功能和单元测试。

它有许多不同的选项,如动态报告、可移植性、强大的测试 IDE,并支持不同类型的应用程序、shell 脚本、Java 对象和数据库。

从他们的网站:

Apache JMeter 应用程序是开源软件,一个 100%纯 Java 应用程序,旨在加载测试功能行为和测量性能。它最初是为测试 Web 应用程序而设计的,但后来扩展到了其他测试功能。

Apache JMeter 可用于测试静态和动态资源、Web 动态应用程序的性能。
可用于模拟一台服务器、一组服务器、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。

这里还有一个教程列表,可以帮助您开始使用 JMeter:

链接到图像

卡塔隆

Katalon 是用于 web 和移动自动化测试的开源软件。它非常简单,支持跨平台使用。除此之外,它有惊人的 JIRA 实现。

从他们的网站:

Katalon 帮助您快速生成跨平台的自动化测试。
将自动化测试无缝集成到您的 CI/CD 管道中。
利用 Katalon TestOps 提供集中的报告和质量洞察。

链接到图像

专家

Maven 是一个用于 Java 项目自动化测试的免费工具。
我自己也经常使用 Maven,我不得不说这是一款相当不错的软件。

从他们的网站:

Maven 基本上是一个开源的构建自动化工具,主要用于 java 项目。我们有可供测试的 maven 插件。插件提供的“surefire:test”目标与软件管理生命周期的测试阶段相关联。

链接到图像

硒机器人

这是一个用于 Android 应用程序和移动网络的免费自动化框架。它支持扩展和并行测试。

Selendroid 是一个用于 Android 和 web 应用程序的免费自动化框架。【Selendroid 很酷的一点是它支持并行测试和伸缩。

从他们的网站:

elendroid 是一个测试自动化框架,它驱动了 Android 本地和混合应用程序(apps)以及移动 web 的 UI。测试是使用 Selenium 2 客户端 API 编写的——就是这样!

链接到图像

Linux 桌面测试项目

LDTP 是一个免费工具,主要针对各种语言的 GUI 测试( PythonJavaRuby、Perl、C#、VB.NET、PowerShellClojure )

从他们的网站:

GNU/Linux 桌面(GUI 应用程序)测试项目(GNU LDTP)旨在开发高质量的测试自动化框架和尖端工具,用于测试和改进 GNU/Linux 或 Solaris 桌面。它使用可访问性库通过应用程序的用户界面进行发现。

链接到图像

开放测试

OpenTest 是一款免费的 web、移动应用和 API 工具。

从他们的网站:

OpenTest 是一个面向 web 应用程序、移动应用程序和 API 的免费开源功能测试自动化框架,为可伸缩性和可扩展性而构建,重点是支持主流测试自动化实践。OpenTest 是一个功能强大的工具,几乎不需要任何编码技能,几乎可以处理任何类型的功能测试自动化项目。

链接到图像

临终遗言

还有很多工具,我没有在这里介绍,但是这些工具对我来说非常重要。

我希望你喜欢这 10 个免费自动化测试工具的列表,并关注我获得更多!

感谢阅读!

查看我的其他文章并关注我的媒体

当我有新文章发表时,请在 Twitter 上关注我

2020 年最受欢迎的 10 种编程语言

原文:https://towardsdatascience.com/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e?source=collection_archive---------0-----------------------

权威指南

Python,JavaScript,Java,C#,C,C++,PHP,Swift,Go,Ruby

大约有 600 种编程语言。编程语言的需求和受欢迎程度每年都在波动。此外,新的编程语言也带来了吸引人的特性。

那么,应该学习哪种编程语言呢?学习一门新的编程语言总是对你的时间和智力的投资。如果你是一个经验丰富的开发人员或者已经知道几种编程语言,你可以学习一种合适的现代语言。最近,我写了一篇博客,列出了七种值得学习的现代编程语言:

[## 现在要学习的 7 种现代编程语言

Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能

towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)

但是如果你在 2020 年开始你的编程生涯,或者学习你的第一或第二种编程语言,那么学习主流和成熟的编程语言之一是明智的。这里我将根据以下标准列出编程语言:

  • 已经成为软件开发行业的主流并牢牢确立了地位
  • 在知名编程语言排名网站中排名第一的
  • 受欢迎程度正在上升或保持稳定而不是急剧下降。
  • 他们有大量的库、框架、工具支持,并且有一个庞大的社区。
  • 他们在就业市场上要求高薪。

此外,我将总结编程语言以及历史背景、关键特性和主要用例

1.计算机编程语言

当吉多·范·罗苏姆在 20 世纪 90 年代开发 Python 作为他的副业时,没有人想到它有一天会成为最流行的编程语言。考虑到所有公认的排名和行业趋势,我将 Python 作为整体上的头号编程语言。

Python 并没有像 Java 或 C/C++那样迅速流行起来。另外,Python 不是一种破坏性的编程语言。但是从一开始, Python 就专注于开发者体验并试图降低编程的门槛,这样学校的孩子们也可以编写产品级的代码。

2008 年,Python 经历了一次大规模的检修和改进,代价是通过引入 Python 3 引入了重大的突破性变化。

今天,Python 无处不在,并被用于许多软件开发领域,而且没有放缓的迹象。

3 个关键特性:

  • Python 的 USP 是它的语言设计。它高效、优雅、简单,但功能强大。
  • Python 与 C/C++进行了一流的集成,可以无缝地将 CPU 繁重的任务卸载给 C/C++。
  • Python 有一个非常活跃的社区和支持。

人气:

在过去的几年里,Python 的需求有了巨大的增长,而且没有减缓的迹象。编程语言排名网站 PYPL 将 Python 列为 2019 年受欢迎程度相当高的头号编程语言:

来源: PYPL

此外,根据 GitHub repositories 的贡献,Python 已经超过 Java,成为第二大最受欢迎的语言:

来源:八月

另外,StackOverflow 开发者调查将 Python 列为第二大最受欢迎的编程语言(第四大最受欢迎的技术):

来源: StackOverflow 开发者调查,2019

另一个编程语言排名网站 TIOBE 将 Python 列为第三大最受欢迎的语言,去年有了巨大的进步:

来源: TIOBE

根据 GitHub Octoverse 的数据,Python 仍然有机会在今年的排名中进一步上升,因为 Python 去年增长了 50%:

来源:十月

StackOverflow 开发者调查将 Python 列为第二受欢迎的编程语言:

来源: StackOverflow 开发者调查,2019

大多数较老的主流编程语言都有稳定或向下的牵引力。此外,Python 是一个例外,在过去的五年中,它有着越来越强的上升趋势,这一点从 Google trends 中可以清楚地看出:

来源:谷歌趋势

就业市场:

据 Indeed 报道,Python 是美国就业市场上需求最大的编程语言,2020 年 1 月最高 74 K 职位发布。此外,Python 以 12 万美元的年薪排名第三。

来源:的确

另外,StackOverflow 开发人员调查显示,与其他主流编程语言相比,Python 开发人员的经验相对较少,但薪水却很高:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 数据科学
  • 数据分析
  • 人工智能,深度学习
  • 企业应用
  • Web 开发

2.Java Script 语言

在第一次浏览器大战期间,网景公司指派布伦丹·艾希为其浏览器开发一种新的编程语言。Brendan Eich 只用了十天就开发出了最初的原型,剩下的就是历史了。由于 JavaScript 糟糕的语言设计和缺乏特性,软件开发人员在早期经常嘲笑它。

多年来,JavaScript 已经发展成为一种多范式、高级的动态编程语言。JavaScript 的第一次重大突破出现在 2009 年,当时 Ryan Dahl 发布了跨平台 JavaScript 运行时 Node.js 并使 JavaScript 能够在服务器端运行。

JavaScript 的另一个巨大突破发生在 2010 年左右,当时谷歌发布了一个基于 JavaScript 的网络开发框架 AngularJS。

今天,JavaScript 是全球使用最广泛的编程语言之一,几乎可以在任何地方运行:浏览器、服务器、移动设备、云、容器、微控制器。

3 个关键特性:

  • JavaScript 是浏览器编程中无可争议的王者。
  • 得益于 Node.js,JavaScript 提供了事件驱动编程,特别适合 I/O 繁重的任务
  • JavaScript 在过去几年里经历了大规模的现代化和彻底改革,特别是在 2015 年、2016 年和以后。

人气:

JavaScript 是排名最靠前的编程语言之一,因为它在所有平台上无处不在的使用和大量采用。

根据 GitHub repositories 的贡献,Octoverse 已经连续五年将 JavaScript 列为头号编程语言:

来源: Octoverse

此外,StackOverflow 开发者调查 2019 将 JavaScript 列为最受欢迎的编程语言和技术:

来源: StackOverflow 开发者调查,2019

另一个编程语言流行网站 PYPL 将 JavaScript 列为第三大流行编程语言:

来源: PYPL

编程语言流行网站 TIOBE 将 JavaScript 列为第七大最流行的编程语言:

来源: TIOBE

根据 StackOverflow 开发人员调查,JavaScript 一度被开发人员视为可怕的编程语言,也是第 11 大最受欢迎的编程语言:

来源: StackOverflow 开发者调查,2019

JavaScript 的趋势相对稳定,如 Google Trends 所示:

来源:谷歌趋势

就业市场:

在美国的就业市场上,Indeed 将 JavaScript 列为第三大需求最大的编程语言,2020 年 1 月发布了 57 K 份工作。JavaScript 平均年薪为 11.4 万美元,在薪酬方面排名第四:

来源:的确

另外,StackOverflow 开发人员调查显示,JavaScript 开发人员可以凭借相对较低的经验获得中等收入:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • Web 开发
  • 后端开发
  • 移动应用程序开发
  • 无服务器计算
  • 浏览器游戏开发

3.Java 语言(一种计算机语言,尤用于创建网站)

Java 是迄今为止最具颠覆性的编程语言之一。在 90 年代,商业应用程序主要是使用 C++开发的,c++相当复杂并且依赖于平台。詹姆斯·高斯林和他在 Sun 的团队通过提供一种更简单的、面向对象的、支持多线程编程的解释型编程语言,降低了开发商业应用程序的门槛。

Java 通过开发 Java 虚拟机(JVM)实现了平台无关性,从开发者那里抽象出底层操作系统,给出了第一个“一次编写,随处运行”的编程语言。此外,JVM 提供了代垃圾收集,它管理对象的生命周期。

近年来,Java 失去了一些市场,让位于对开发人员高度友好的现代语言和其他语言的兴起,特别是 Python、JavaScript。此外,JVM 由于其庞大的体积而不是云友好的。甲骨文最近对 JDK 征收高额许可费,这将进一步削弱 Java 的受欢迎程度。

幸运的是,Java 正在努力克服它的缺点,并通过 GraalVM 计划使 Java 适合云计算。此外,在 OpenJDK 中,有一个免费的替代专有的 Oracle JDK。

Java 仍然是企业的头号编程语言。

3 个关键特性:

  • Java 提供了一种强大的、功能丰富的、多范例的、解释性的编程语言,具有适中的学习曲线和较高的开发人员生产率。
  • Java 是严格向后兼容的,这是商业应用程序的一个关键要求。
  • Java 的运行时 JVM 是软件工程的杰作,也是业界最好的虚拟机之一。

人气:

发布五年后,Java 成为第三大最受欢迎的编程语言,并在接下来的二十年里一直保持在前三名。以下是流行的 TIOBE 排名中 Java 的长期历史:

来源: TIOBE

根据 TIOBE 的说法,Java 的受欢迎程度在过去几年有所下降,但它仍然是最受欢迎的编程语言,如下所示:

来源: TIOBE

来源: TIOBE

根据 GitHub repository 的贡献,Java 在 2014-2018 年期间排名第一,去年才下滑到第三位:

来源:十月

另一个流行编程语言排名网站 PYPL 将 Java 列为第二大流行编程语言:

来源: PYPL

StackOverflow 开发者调查也将 Java 排在前列,仅被 JavaScript 和 Python 编程语言取代:

来源: StackOverflow 开发者调查,2019

根据 Google trends,Java 在过去的五年中不断失去吸引力:

来源:谷歌趋势

就业市场:

据 Indeed 称,Java 是美国第二大需求最大的编程语言,2020 年 1 月有 69 K 个职位空缺。此外,Java 开发人员的年薪排名第六(10.4 万美元):

来源:确实

根据 stack overflow Developers survey 2019,Java 在几年的经验后提供了适中的工资:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 企业应用开发
  • Android 应用程序开发
  • 大数据
  • Web 开发

4.C#

2000 年,科技巨头微软决定创建他们的面向对象 C 语言,如编程语言 C#作为他们的一部分。NET initiative,它将被管理(运行在类似 Java 的虚拟机上)。经验丰富的语言设计师安德斯·海尔斯伯格设计了 C#作为微软公共语言倡议(CLI) 平台的一部分,在这个平台上,许多其他语言(主要是微软的语言)被编译成一种中间格式,在一个名为公共语言运行时(CLR) 的运行时上运行。

在早期,C#被批评为对 Java 的模仿。但是后来,两种语言都产生了分歧。此外,微软对 C#编译器/运行时的许可并不总是明确的。虽然微软目前没有在微软开放规范项目下实施其专利,但它可能会改变。

如今,C#是一种多范例编程语言,广泛应用于 Windows 平台、iOS/Android 平台(多亏了 Xamarin )和 Linux 平台。

3 个关键特性:

  • 安德斯·海尔斯伯格出色地将 C#带出 Java 的阴影,并赋予了自己的身份。
  • 在微软的支持下,C#已经在业界存在了 20 年,拥有庞大的库和框架生态系统。
  • 像 Java 一样,C#也是独立于平台的(感谢 CLR ),可以在 Windows、Linux 和移动设备上运行。

人气:

流行语言排名网站 TIOBE 在 2020 年 1 月以巨大的收益排名第五:

来源: TIOBE

此外,Octoverse 将 C#列为 GitHub repositories 贡献的第五大流行编程语言:

来源:十月

StackOverflow 开发者调查将 C#列为第四大最受欢迎的语言(2019 年第七大最受欢迎的技术:

来源: StackOverflow 开发者调查,2019

有趣的是,StackOverflow 开发者调查将 C#列为第十大最受欢迎的编程语言(远远高于 Java):

来源: StackOverflow 开发者调查,2019

从 Google trends 可以清楚地看到,C#在过去几年里并没有被大肆宣传,如下所示:

来源:谷歌趋势

就业市场:

Indeed 为美国的 C#开发人员发布了 32,000 个职位空缺,使 C#成为该榜单中第五大最苛刻的编程语言。C#年薪 96 K 美元,在该榜单中排名第八:

来源:确实

StackOverflow 开发人员调查显示,就全球平均工资而言,C#高于 Java(尽管经验更丰富):

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 服务器端编程
  • 应用程序开发
  • Web 开发
  • 游戏开发
  • 用于 Windows 平台的软件

5.C

在 20 世纪 60 年代和 70 年代,CPU 的每个周期和内存的每个字节都非常昂贵。贝尔实验室工程师丹尼斯·里奇(Dennis Ritchie)在 1969 年至 1973 年间开发了一种过程化的通用编程语言,直接编译成机器语言。C 编程提供低级内存访问,并对底层硬件进行完全控制。

多年来,C 成为最常用的编程语言之一。此外,C 可以说是历史上最具颠覆性和影响力的编程语言,几乎影响了这个列表中的所有其他语言。

虽然 C 经常因其意外的复杂性、不安全的编程和缺乏特性而受到批评。此外,C 是平台相关的,即 C 代码是不可移植的。但是如果你想充分利用你的硬件,那么 C/C++或者 Rust 是你唯一的选择。

3 个关键特性:

  • 由于 C 提供了低级内存访问并编译成机器指令,所以它是速度最快、功能最强大的编程语言之一。
  • c 提供了对底层硬件的完全控制。
  • c 是“该语言的编程语言”之一,也就是说,许多其他编程语言如 Ruby、PHP、Python 等的编译器都是用 c 编写的。

人气:

c 语言是这个列表中最古老的编程语言,已经统治这个行业 47 年了。从 TIOBE 的长期排名历史中可以清楚地看出,c 语言在编程语言流行度排名中的统治地位超过了任何其他语言:

来源: TIOBE

根据 TIOBE 排名,C 是 2019 年第二大最受欢迎的语言,人气增长巨大:

来源: TIOBE

来源: TIOBE

根据 GitHub 资源库的贡献,Octoverse 还将 C 语言列为第九大最受欢迎的语言:

来源: Octoverse

StackOverflow 开发者调查也将 C 语言排在第 12 位(考虑编程语言的第 8 位):

来源: StackOverflow 开发者调查,2019

在过去的五年里,Google trending 也显示了对 C 语言相对稳定的兴趣。

来源:谷歌趋势

就业市场:

根据 Indeed 的数据,在美国有 28000 个 C 开发人员的职位空缺,这使得 C 成为第六大最苛刻的编程语言。薪资方面,C 以 Java(104K)排名第 6:

来源:的确

StackOverflow 开发人员调查显示,与 Java、Python 等相比,C 语言开发人员可以获得平均工资,但需要更长的时间才能达到这一水平:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 系统程序设计
  • 游戏开发
  • 物联网和实时系统
  • 机器学习,深度学习
  • 嵌入式系统

6.C++

20 世纪 70 年代,比雅尼·斯特劳斯特鲁普和丹尼斯·里奇(C 语言的创造者)一起在贝尔实验室工作。深受 C 语言的影响,他首先创建了 C++作为 C 语言的扩展,增加了面向对象的特性。随着时间的推移,C++已经发展成为一种多范例、通用的编程语言。和 C 一样,C++也提供低级内存访问,并直接编译成机器指令。

C++也提供了对硬件的完全控制,但代价是意外的复杂性,并且不提供对内存安全和并发安全的语言级支持。此外,C++提供了太多的功能,是最复杂的编程语言之一。

由于所有这些因素及其平台依赖性,在 21 世纪初,C++在企业软件开发和大数据领域的受欢迎程度已经输给了 Java。

随着 GPU、容器化、云计算的兴起,C++越来越受欢迎,因为它可以快速适应硬件或生态系统的变化。

今天,C++是业界最重要和使用最广泛的编程语言之一。

3 个关键特性:

  • 像 Java 一样,C++也随着硬件或生态系统的变化而不断更新和适应自己。
  • C++还提供了对底层硬件的完全控制,可以在任何平台上运行,并利用任何种类的硬件,GPU、TPU、容器、云、移动设备或微控制器。
  • C++非常快,在性能关键和资源受限的系统中大量使用。

人气:

C++是该列表中第二古老的编程语言,在 TIOBE 编程语言排名中排名第四:

来源: TIOBE

根据 GitHub repository 的贡献,Octoverse 将 C++排在第 6 位:

来源:八月

此外,2019 年 StackOverflow 开发者调查将 C++列为第 9 大最受欢迎的技术(第 6 大最受欢迎的语言):

来源: StackOverflow 开发者调查,2019

尽管 C++面临着来自 Rust 或 Go 等现代编程语言的激烈竞争,但在过去的五年中,它仍然引起了稳定的兴趣:

就业市场:

事实上,C++已经以 41,000 的招聘量被列为第四大最苛刻的编程语言。此外,C++开发人员每年收入 10.8 万美元,排名第五:

来源:确实

StackOverflow 开发人员调查显示,与 Java 相比,C++开发人员可以获得更高的工资,尽管他们的经验更长:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 系统程序设计
  • 游戏开发
  • 物联网和实时系统
  • 机器学习,深度学习
  • 嵌入式系统、分布式系统

7.服务器端编程语言(Professional Hypertext Preprocessor 的缩写)

像 Python 一样,PHP 是另一种编程语言,是由一个开发者在 90 年代作为一个附带项目开发的。软件工程师拉斯马斯·勒德尔夫最初创建了 PHP,作为一套用 C 语言编写的公共网关接口二进制文件来创建动态网络应用程序。后来,更多的功能被添加到 PHP 产品中,它有机地演变成一种成熟的编程语言。

目前,PHP 是一种通用的动态编程语言,主要用于开发服务器端的 Web 应用程序。

随着基于 JavaScript 的客户端 Web 应用程序开发的兴起,PHP 正在失去吸引力和受欢迎程度,PHP 已经过了它的全盛时期。与普遍的看法相反,PHP 不会很快消亡,尽管它的受欢迎程度会逐渐降低。

3 个关键特性:

  • PHP 是一种高效的服务器端 Web 开发编程语言。
  • 在过去的 35 年里,PHP 被用于 Web 开发,市场上有许多成功且稳定的 PHP 开发框架。
  • 许多大公司都在使用 PHP(脸书,WordPress),这为它带来了极好的工具支持。

人气:

编程语言排名网站 TIOBE 在 2020 年 1 月将 PHP 列为第八大最受欢迎的编程语言。虽然 PHP 的长期排名历史表明,PHP 已经过了它的全盛时期,正在慢慢失去它的吸引力:

来源: TIOBE

Octoverse 将 PHP 列为 GitHub repositories 贡献的第四大最受欢迎的编程语言:

来源:八月

根据 2019 年 StackOverflow 开发者调查,PHP 是第五大最受欢迎的编程语言(第八大最受欢迎的技术):

来源: StackOverflow 开发者调查,2019

尽管 PHP 仍然是使用最广泛的编程语言之一,但它的趋势正在慢慢下降,这一点从 Google Trends 中可以清楚地看出:

来源:谷歌趋势

就业市场:

2020 年 1 月,求职网站的确将 PHP 列为美国就业市场第七大需求编程语言,有 18 K 个职位。此外,PHP 开发人员可以期待一份合理的薪水(9 万美元),这使他们在这一类别中排名第十:

来源:确实

StackOverflow 开发者调查显示 PHP 是 2019 年收入最低的编程语言:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 服务器端 Web 应用程序开发
  • 开发 CMS 系统
  • 独立 Web 应用程序开发。

8.迅速发生的

Swift 是同时出现在我的列表中的仅有的两种编程语言之一:“****”。由克里斯·拉特纳领导的一组苹果工程师开发了一种新的编程语言 Swift,主要用于取代 Mac 和 iOS 平台上的 Objective-C。

它是一种多范例、通用、编译的编程语言,也提供了高开发效率。Swift 支持 LLVM (开发者为克里斯·拉特纳)编译器工具链,如 C/C++,Rust。

Swift 与 Objective-C 代码库具有出色的互操作性,并且已经成为 iOS 应用程序开发的主要编程语言。作为一种编译过的强大语言,Swift 在其他领域也越来越受欢迎。

3 主要特点:

  • Swift 的主要 USP 之一是其语言设计。在 Apple 生态系统中,它提供了比 Objective-C 更高效、更好的替代方案,具有更简单、简洁、干净的语法和开发人员工效学特性。
  • Swift 还提供了现代程序语言的特性:空安全。此外,它还提供了避免“末日金字塔”的句法优势
  • 作为一种编译语言,Swift 和 C++一样快。它在系统编程和其他领域也越来越受欢迎。

人气:

像其他现代编程语言一样,Swift 在开发人员中非常受欢迎,在最受欢迎语言排行榜中排名第六:

Swift 在其第一个稳定版本发布仅 5 年后,就进入了 TIOBE index 最受欢迎编程语言排行榜的前 10 名:

来源: TIOBE

另一个流行编程语言排名网站 PYPL 将 Swift 列为第九大流行编程语言:

来源: PYPL

StackOverflow 开发者调查将 Swift 列为第 15 大最受欢迎的技术(第 12 大最受欢迎的编程语言):

来源: StackOverflow 开发者调查,2019

Google trends 还显示 Swift 的受欢迎程度急剧上升:

来源:谷歌趋势

就业市场:

事实上,Swift 在美国排名第九,有 6000 个职位空缺。在薪酬方面,Indeed 以 12.5 万美元的年薪位列 Swift 第二:

来源:的确

StackOverflow 开发人员调查还显示,与 Objective-C 相比,Swift 开发人员可以凭借相对较少的经验获得高薪:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • iOS 应用程序开发
  • 系统程序设计
  • 客户端开发(通过 WebAssembly)
  • 深度学习
  • 物联网

9.去

和 Swift 一样,Go 也是过去十年中排名第二的编程语言。此外,与 Swift 一样,Go 也是由一家科技巨头创建的。

在过去的十年里,谷歌沮丧地发现,现有的编程语言无法承受谷歌看似无限的硬件和人力资源。比如编译 Google 的 C++代码库就花了半个小时。此外,他们想用新语言解决开发规模问题。

谷歌的著名软件工程师罗布·派克** (UTF-8)和肯·汤普森 (UNIX 操作系统)创造了一种新的、实用的、易学的、高度可扩展的系统编程语言 Go,并于 2012 年发布。 Go 有一个运行时和垃圾收集器(几兆),但是这个运行时打包在生成的可执行文件中。**

虽然 Go 有点功能贫血,但它已经迅速成为主流编程语言。

3 个关键特性:

  • Go 拥有对并发的语言级支持。它通过 Goroutine(轻量级绿色线程)和 Channel 提供了基于 CSP 的消息传递并发性。
  • Go 最大的 USP 就是它的语言设计和简洁。它成功地结合了 Python 的简单性和高效性以及 c 的强大功能。
  • Go 嵌入了垃圾收集器(虽然没有 JVM 垃圾收集器成熟)。Go 开发者可以用安全的 Java,Python 写系统编程。

人气:

和 Swift 一样,Go 的受欢迎程度也直线上升。

在几乎所有比较网站的流行编程语言中,Go 排名都很高,已经超过了很多现有的语言。这是 2020 年 1 月的 TIOBE 指数排名,Go 排名第 14 位:

来源: TIOBE

StackOverflow 开发者调查 2019 也将 Go 列为第 13 大最受欢迎的技术(第 10 大最受欢迎的编程语言):

来源: StackOverflow 开发者调查,2019

根据 Stackoverflow 的调查,Go 是第九大最受欢迎的编程语言:

来源: StackOverflow 开发者调查,2019

根据 GitHub Octoverse 的数据,Go 也是十大发展最快的语言之一:

来源: Octoverse

围棋越来越受欢迎也反映在谷歌趋势中,谷歌趋势显示过去五年围棋的吸引力越来越大:

来源:谷歌趋势

就业市场:

Indeed 将 Go 列为第十大最苛刻的语言,2020 年 1 月将有 4 K 个空缺。在薪酬方面,Go 排名第 9 位:

来源:的确

2019 年 StackOverflow 开发者调查显示,Go 是收入最高的编程语言之一:

来源: StackOverflow 开发者调查,2019

主要使用案例:

  • 系统程序设计
  • 无服务器计算
  • 商业应用
  • 云原生开发
  • 物联网

10.红宝石

Ruby 是这个列表中第三种由个人开发者在 20 世纪 90 年代开发的编程语言。日本计算机科学家松本幸宏创造了 Ruby 作为一种“面向对象的脚本语言”,并于 1995 年发布。

Ruby 后来发展成为一种解释的、动态类型的、高级的、多范例的通用编程语言。Ruby 是用 C 实现的,提供垃圾收集。

像 Python 一样,Ruby 非常关注开发人员的生产力和开发人员的快乐。虽然 Ruby 不是一种被大肆宣传的语言,但对于新开发人员来说,它是一种优秀的语言,学习曲线很平坦。

3 个关键特性:

  • Ruby 成功地结合了编程语言的一些最佳特性:动态、面向对象、函数式、垃圾收集和简洁。
  • 尽管 Ruby 本身没有破坏性,但它的 Web 开发框架 Ruby on Rails 可能是最具破坏性和影响力的服务器端 Web 开发框架。
  • Ruby 被一些最大的软件项目所使用,比如 Twitter、GitHub、Airbnb,并且拥有优秀的工具和框架支持。

人气:

TIOBE 在 2020 年 1 月将 Ruby 列为第 11 大最受欢迎的编程语言,这是一个非常积极的举动:

****

来源: TIOBE

Octoverse 还将 Ruby 列为 GitHub repositories 贡献的 2019 年第十大最受欢迎的编程语言:

来源:十月

StackOverflow 开发者调查 2019 将 Ruby 列为第 9 大最受欢迎的编程语言(第 12 大最受欢迎的技术):

来源: StackOverflow 开发者调查,2019

近年来,Ruby 并没有成为一种被大肆宣传的语言,但根据 Google 的趋势,它仍然保持着它的吸引力:

来源:谷歌趋势

就业市场:

在美国的就业市场上,Ruby 开发人员可以拿高薪,而且排名第一。此外,Indeed 在 2020 年 1 月发布了针对 Ruby 开发人员的 16 K 个职位空缺,这使得 Ruby 在最苛刻的编程语言中排名第八。

来源:的确

stack overflow developer survey 2019 也表明,Ruby 开发人员可以在相对较低的经验下获得高薪:

来源: StackOverflow 开发者调查,2019

类似文章:

** [## 现在要学习的 7 种现代编程语言

Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能

towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec) [## 关于 2021 年软件发展趋势的 21 个预测

云、边缘、容器、量子、区块链、AI、深度学习、批处理、流媒体、数据库、编程、软件……

towardsdatascience.com](/21-predictions-about-the-software-development-trends-in-2021-600bfa048be) [## 2020 年前端开发的五大热门 JavaScript 框架

为前端开发人员、求职者和其他人提供的顶级 JavaScript 框架的深入分析和排名

medium.com](https://medium.com/@md.kamaruzzaman/top-5-in-demand-javascript-frameworks-for-front-end-development-in-2020-a59c4340d082)**

2020 年要学习的十大 JavaScript 框架

原文:https://towardsdatascience.com/top-10-javascript-frameworks-to-learn-in-2020-a0b83ed3211b?source=collection_archive---------1-----------------------

现代 JavaScript 开发中最重要的 JavaScript 框架的精选列表

照片由 Md Kamaruzzaman 拍摄

JavaScript 是最流行的编程语言之一,也是网络的通用语言。在我之前的一篇文章中,我将 JavaScript 列为仅次于 Python 的第二大需求编程语言:

[## 2020 年最受欢迎的 10 种编程语言

针对求职者和新开发人员的顶级编程语言的深入分析和排名

towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e)

无论是想开发前端 web 应用还是后端 Web 应用,JavaScript 无处不在。有许多优秀的 JavaScript 框架,而新的 JavaScript 框架几乎每天都在出现。

如果你想在 JavaScript 开发领域开始你的职业生涯,或者如果你是一个有经验的 JavaScript 开发人员,现在想提升你的技术技能,那么你应该学习哪个框架?这里我根据以下标准列出了最重要的 JavaScript 框架:

  • 流行基于可靠的网站( GitHubJavaScript 的状态NPM 趋势谷歌趋势)。
  • 在社区和行业中成为主流并已确立
  • 一个庞大而充满活力的社区支持他们。
  • 仍然很强大,不会像 jQuery 或 AngularJS 那样逐渐消失。

此外,我将包括前端和后端开发的框架。

我在这个列表中添加了纯 JavaScript 框架,除了 ReactNode.js 。React 是一个只实现视图层的库。但实际上,React 核心库是整个 React 生态系统的一部分,包括其他 React 库(如 React 路由器)和第三方库。此外,像“【JavaScript 的状态】 ”和“ 栈溢出开发者调查 ”这样的知名网站已经将 React 列入 Web 框架类别。我还觉得,如果不包括最基本的 Web 框架/库,我只能给出 JavaScript 前景的一部分。此外, Node.js 是 JavaScript 运行时,而不是框架。但是 Node.js 提供了一个完整的基于 JavaScript 的后端开发生态系统,很多排名(例如“Stack Overflow Developer Survey”)通常会将 Node.js 与 Ruby on Rails、Django、PHP Laravel 放在后端框架类别中。我知道一些纯粹主义者可能不喜欢它,我会得到反弹,将 React 和 Node.js 包括在这个列表中。但是为了描绘 JavaScript 领域的全貌,我有意识地选择将 React 和 Node.js 放在这个列表中

1.反应

React 并不是最早的颠覆性的基于 JavaScript 的 Web 框架。但它是最具颠覆性和影响力的基于 JavaScript 的网络框架。乔丹·沃克和一群脸书的工程师在 2013 年创建了 React,这是一个基于组件的 Web 框架,具有单向数据流,永远改变了前端 Web 开发。它还引入了许多其他概念,如函数式、声明式编程不可变状态、,这在前端开发中并不常见。React 的另一个突破是引入了虚拟 DOM,它提供了更好的用户体验和性能增益。

今天,React 是迄今为止最占主导地位的 Web 框架,没有很快下滑的迹象。

5 个主要特点:

  • React 是最不个性化的框架之一,React-Core 只是视图层的一个基于组件的库。
  • React 有这样的口号:“学一次,写哪里。”软件工程师可以使用 React 开发 Web (React)、移动 App (React Native)、桌面 App(electronic)、后端开发(用 Node.js)。
  • React 提供了一流的服务器端渲染(SSR)和出色的 SEO 支持
  • 科技巨头脸书的需求推动了发展。好的一面是,React 的功能经过了 T4 26 亿脸书用户的考验。
  • React 也在不断完善自己,最近推出了 React-Fiber (并发性更好) React hook (样板代码更少)悬疑(渲染效果更好)。

人气:

React 每周有 800 万次下载,是目前下载量最大的前端 JavaScript 框架。此外,过去五年的 NPM 趋势表明,React 是前端框架中的明显赢家,远远领先于其他框架:

来源: NPM 趋势

它是 GitHub 中排名第二的 JavaScript 框架,拥有第二多的贡献者:

来源: GitHub

“JavaScript 现状”调查将 React 放在满意度和认知度的首位:

来源:JavaScript 的状态,2019

2019 年 StackOverflow 开发者调查将 React 列为 Web 开发中第二大使用框架:

来源: StackOverflow 开发者调查,2019

它也是 2019 年最受欢迎的前端框架:

来源: StackOverflow 开发者调查,2019

2.节点. js

尽管在服务器端开发中有过几次使用 JavaScript 的尝试,但都不是很受欢迎。2009 年, Ryan Dahl 创建了异步、事件驱动的服务器端 JavaScript runtime Node.js 并将 JavaScript 带入了后端开发的未知领域。Ryan Dahl 使用了流行的 JavaScript 引擎 V8 和 C++库。从那以后,Node.js 和 JavaScript 的受欢迎程度直线上升。凭借节点包管理器 NPM 和无数的框架/库,Node.js 已经超越了许多其他成熟的服务器端框架。由于其异步事件驱动的特性和轻量级的快速运行时,Node.js 特别适合 I/O 繁重的应用程序,如 Web、IoT、无服务器。

今天,Node.js 不是一个框架,而是服务器端 JavaScript 开发的整个生态系统。凭借许多创新(如 NPM、模块系统),Node.js 是改进 JavaScript 作为编程语言并增加 JavaScript 受欢迎程度的主要驱动力之一。

5 个主要特点:

  • Node.js 是一个异步、事件驱动的 JavaScript 框架,用于构建可伸缩的网络应用。
  • Node.js 是一个跨平台,将 Java 的“一次编写,随处运行”提升到了一个新的高度。它可以在 Windows、Linux、macOS、iOS、Android 和许多其他平台上运行。
  • 由于其相对较小的尺寸和较快的启动速度,Node.js 大量用于无服务器计算
  • Node.js 由 OpenJS 基金会运营,是一个开源框架,不受一家科技公司的控制。今天,几乎所有的科技巨头(IBM、微软、网飞)都在使用和支持 Node.js
  • 它原生支持 JavaScript 和所有其他“编译成 JS”语言,如 TypeScript、CoffeeScript、Dart 。Node.js 还支持 Web 的下一个巨大事物: WebAssembly

人气:

虽然 Node.js 是排名第三的 JavaScript 项目,但它在 GitHub 中拥有最多的贡献者:

来源: GitHub

StackOverflow 开发者调查 2019 将 Node.js 放在了其他框架类别的首位:

来源: StackOverflow 开发者调查,2019

此外,2019 年 Stack Overflow 开发者调查将 Node.js 列为第六大最受欢迎的框架:

来源: StackOverflow 开发者调查,2019

从过去十年的 Google 趋势数据来看,很明显 Node.js 已经超越了其他流行的服务器端框架,如 PHP Laravel、Django 和 ASP.NET。

来源:谷歌趋势

3.vue . j

在网络框架得到大型科技公司支持的今天, Vue.js 是一个例外。2014 年,前谷歌工程师尤雨溪决定结合 AngularJS (视图层)和 React (虚拟 DOM)的优点,创建 Vue.js。今天,Vue.js 是最受欢迎的基于 JavaScript 的 Web 框架之一。尤雨溪的关键设计目标之一是降低基于 JavaScript 的前端开发的门槛。Vue.js 是最简单的前端框架之一,开发人员可以在其中轻松编写 SPA 应用程序。

开发者可以使用 Vue.js 作为一个端到端的框架,包括路由、状态管理(如 Angular ),或者仅仅作为一个视图层(如 React)。它还提供了类似双向数据绑定的角度,以及类似使用虚拟 DOM 渲染的额外反应。

5 个主要特点:

  • Vue.js 提供了渐进式应用程序开发,是同类文档中最好的。如果您有一个大型的遗留 JavaScript 代码库,那么您可以使用 Vue.js 逐步更新您的代码库。
  • Vue.js 既作为自以为是的端到端框架工作,也作为具有状态管理的视图层
  • 它提供了反应式双向数据绑定(如 Angular)和虚拟 DOM、事件源(如 React)
  • Vue.js 对 JavaScript 和 TypeScript 的支持是一样的。
  • Vue.js 在即将到来的 Vue.js 3.0 中正在经历重大的检修和改进。

人气:

Vue.js 是最明星的 GitHub 项目,如下图:

来源: GitHub

Vue.js 最近在行业中的采用率很高,这从 NPM 的高下载量和 Angular 的追赶上来看是显而易见的:

来源: NPM 趋势

根据 2019 年 StackOverflow 开发者调查,Vue.js 在所有 Web 框架中排名第 7:

来源: StackOverflow 开发者调查,2019

此外,StackOverflow 开发者调查 2019 将 Vue.js 列为第二大最受欢迎的 Web 框架:

来源: StackOverflow 开发者调查,2019

“JavaScript 现状”调查将 Vue.js 列为第二大热门网站:

来源:JavaScript 的状态,2019

4.有角的

AngularJS ,谷歌在 2010 年创建了最早的基于 JavaScript 的前端框架。但一旦脸书发布 React,它就暴露了 AngularJS 的设计缺陷,它很快成为一个过时的框架。因此,谷歌团队创建了一个全新的SPA 框架,并于 2016 年发布了 Angular 。Angular 和 AngularJS 虽然名称相似,但实际上是两种不同的框架。与 React 不同,它是一个端到端框架,提供开发企业级 Web 应用所需的一切“开箱即用”支持。此外,Angular 是第一个包含 TypeScript 的重要框架,并在 TypeScript 的流行中发挥了相当大的作用。

如今,Angular 在宣传和兴趣方面落后于 React、Vue.js 或 Svelte。但是它是一个经过验证的可靠的企业级框架,将会在未来几年内出现在社区中。

5 个主要特点:

  • Angular.js 是一个端到端的框架,支持开发企业应用。在 Angular CLI 中,它拥有 JavaScript 领域中最好的命令行工具之一。
  • 使用 TypeScript 并将模板从样式和业务逻辑中分离出来,它特别适合于企业级大型代码库。
  • t 天生就是最安全的前端框架,具有像 DOM 清理这样的内置特性。
  • 尽管谷歌没有像脸书支持 React 那样支持 Angular,但它仍然投入了足够的资源,以使 Angular 仍然是一个有吸引力的创新框架。最近它增加了惰性装载,差异装载来改善模块的装载时间。
  • 在 Angular 9 中,它发布了一个新的渲染引擎 Ivy,以改善启动时间、响应时间,并减少包的大小。

人气:

如果我们考虑 GitHub stars,那么它是第四大流行的 JavaScript 框架,如下所示:

来源: GitHub

Angular 通过在行业中的大规模采用弥补了其缺乏人气,因为它在 NPM 下载量方面领先于非常受欢迎的 Vue.js:

来源: NPM 趋势

StackOverflow 开发者调查 2019 将 Angular 排在所有 Web 框架的第三位:

来源: StackOverflow 开发者调查,2019

根据 2019 年“JavaScript 现状”调查,Angular 在认知度方面排名第二:

来源:JavaScript 的状态,2019

5.表达

当 Node.js 在 2009 年出现时, TJ Holowaychuk 已经基于极简网络框架 Sinatra 创建了 Express.js。它是一个开发 Web 应用程序和 REST API 的极简 Web 框架。也不那么固执己见,速度非常快。许多其他基于 JavaScript 的 Web 框架都是基于 Express 的。

今天,Express.js 无疑是最受欢迎的基于 JavaScript 的 Web 应用程序框架。

5 个主要特点:

  • Express.js 几乎是默认的 JavaScript 服务器端框架。
  • Express 是一个完整的应用框架,包括中间件、路由和模板。
  • Express 支持 MVC 模式,View 系统支持 14 个以上的模板引擎。
  • 它还提供可靠的路由。
  • Express 还支持内容协商。

人气:

它是最流行的基于 JavaScript 的后端框架,GitHub stars 证明了这一点:

来源: GitHub

凭借每周超过 1000 万次的下载量,Express.js 是目前下载量最大的 JavaScript 框架:

来源: NPM 趋势

“JavaScript 现状”调查已经连续三年(2017、2018、2019)将 Express.js 列为顶级 JavaScript 服务器端框架:

来源:JavaScript 的状态,2019

2019 年 StackOverflow 开发者调查将 Express 列为 2019 年第五大最受欢迎的 Web 框架和最受欢迎的 JavaScript 后端框架:

来源: StackOverflow 开发者调查,2019

6.Next.js

React 是一个非常非个性化的框架,其中 React-Core 只提供视图层。总是需要一个基于 React 的端到端的、固执己见的框架。蒂姆·诺特肯斯和一群来自荷兰公司 Zeit 的软件工程师在 React 和 Node.js 的基础上创建了 Next.js 作为一个端到端的、更高级别的网络框架。Next.js 为 Web、桌面和移动设备提供了服务器呈现的和静态的网站。

5 个主要特点:

  • Next.js 建立在两个最流行和久经考验的 JavaScript 框架之上:React 和 Node.js。
  • 它还提供了“一次构建,随处运行,”,即 Next.js 可以在 Web、移动和桌面上运行。
  • Next.js 提供了出色的服务器端渲染,以及出色的 SEO 支持和快速启动
  • 它提供自动代码分割和基于文件系统的路由。
  • 它还支持易于使用的数据获取和内置的 CSS 支持。

人气:

就 GitHub stars 而言,它是第六大最受欢迎的 JavaScript 框架和第二大最受欢迎的 JavaScript 后端框架:

来源: GitHub

Next.js 的受欢迎程度在过去几年里直线上升,下载量的增加就说明了这一点:

来源: NPM 趋势

根据《JavaScript 现状》2019,Next.js 连续两年(2018,2019)作为第二最满意的 JavaScript 后端框架:

来源:JavaScript 的状态,2019

7.流星

2012 年,一群工程师已经创建了 Meteor,作为一个基于 Node.js 的同构、开源的全栈 JavaScript 框架,它还支持为 Web、移动、桌面平台构建端到端的应用程序,并与 React、Vue.js、Angular、Svelte 等流行的前端框架很好地集成。它还是一个“电池内置”框架,为企业级应用程序开发提供“开箱即用”的支持。

5 个主要特点:

  • Meteor 是一个全栈框架来开发完整的栈:前端到后端。
  • 对于前端开发,它有自己的模板引擎。但开发者可以将 Meteor 与其他流行的前端框架一起使用,如 Angular、React、Vue.js 或 Svelte
  • 它是一个跨平台框架,可以为 Web、移动和桌面开发应用程序。
  • Meteor 已经集成了 JavaScript 栈,这使得不同的集成技术(例如 MongoDB 数据库、React 前端)变得非常容易。
  • 它是一个同构平台,在客户端和服务器端共享相同的 API。

人气:

根据 GitHub 星级的数量,它是第七大最受欢迎的 JavaScript 框架:

来源: GitHub

“JavaScript 现状”调查将 Meteor 列为第七大最受欢迎的 JavaScript 框架,尽管其受欢迎程度正在下降:

来源:JavaScript 的状态,2019

8.苗条的

2016 年,卫报软件工程师 Rich Harris 有了的突破性想法,开发了一个没有框架特定运行时的 JavaScript 框架,并发布了 Svelte。这个想法是使用 Svelte 编译器,它将特定于框架的代码编译成普通的 JavaScript、HTML、CSS,并将编译后的代码呈现给浏览器。尽管这个概念在软件开发中并不新鲜,但在前端开发中却是未知的领域。Svelte 的另一个重要贡献是增加了对反应性的一流支持,从而在没有虚拟 DOM 的情况下实现更快、更好的性能。今天,它可以说是最热门的前端框架,在业界有着巨大的吸引力和兴趣。

5 个主要特点:

  • 它是一个编译时框架,不需要任何特定于框架的运行时。在所有框架中,它拥有最小的包大小
  • Svelte 通过反应式编程执行 DOM 渲染,这在大多数情况下比虚拟 DOM 快。因此,Svelte 是所有框架中渲染速度最快的。
  • Svelte 和 React-Core 一样只是一个视图层,是一个非个性化的框架。
  • Svelte 同时支持客户端和服务器端渲染,具有出色的 SEO 支持。
  • 开发人员可以使用 Svelte 开发 Web 应用程序、跨平台移动应用程序开发或桌面应用程序开发。

人气:

Svelte 自 2018 年第二版发布以来才开始流行,在 GitHub 星级中排名第八:

来源: GitHub

在过去的几年里,Svelte 在业内的认养人数越来越多,这从 NPM 趋势中可以明显看出:

来源: NPM 趋势

社区和行业对 Svelte 表现出了很高的兴趣,这一点从“JavaScript 的现状”调查中可以明显看出,Svelte 在兴趣方面排名第一:

来源:JavaScript 的状态,2019

9.寇阿相思树

在 2013 年,由 TJ Holowaychuk 领导的 Express.js 的核心成员已经创建了 Koa 作为一个轻量级的、现代的、富有表现力的、健壮的中间件框架,用于 Web 应用和 API。Koa 是非常模块化的,只有很小的核心,没有中间件。然而,中间件可以作为独立的模块使用。

5 个主要特点:

  • Koa 有一个轻量级的、更小的内核,没有现成的中间件包。
  • Koa 有一个高度模块化的架构,并提供可插拔的中间件模块。
  • Koa 以类似堆栈的方式支持级联中间件,允许下游执行动作,而上游操纵响应。
  • Koa 使用了 async/await 来代替回调,并且支持更干净、更有表现力的代码以及更好的错误处理。
  • 性能方面,胜过 Express.js

人气:

Koa 也是一个非常受欢迎的基于 JavaScript 的后端框架,在 GitHub 星级中排名第九:

来源: GitHub

Koa 在行业中也大量使用,这从每周的高下载量可以明显看出:

来源: NPM 趋势

JavaScript 调查将 Koa 列为最令人满意的 JavaScript 后端框架的第五名:

来源:JavaScript 的状态,2019

10.Ember.js

Ruby on Rails 原则“约定优于配置”的启发,来自 Apple耶胡达·卡茨在 2012 年创建了 Ember.js 作为一个非常固执己见的端到端框架。Ember.js 是一个严格向后兼容的框架,从一开始就没有引入重大的突破性变化。当那个时代的其他框架(Backbone.js,AngularJS)越来越不受欢迎时,Ember.js 仍然提供了一个可靠的、高效的框架来满足现代前端开发的需要。

5 个主要特点:

  • 端到端的自以为是的内聚框架关注于"约定胜于配置。"
  • Ember 得到了 LinkedIn、雅虎等几家科技巨头的支持,而不是一家科技巨头。因此,它不是由一家公司的需求驱动的
  • Ember 的数据库是最好的一次访问多个数据源的数据,建立异步关系。
  • Ember CLI 中,它拥有所有 JavaScript 框架中最好的 CLI,有助于搭建和生成所有具有正确结构的必要代码,包括所有依赖项。
  • 在其最新版本 Ember Octane 中,它引入了 HTML 优先和组件优先方法,改进了对状态管理和反应性的支持

人气:

Ember.js 是 JavaScript 框架中排名第十的 GitHub 项目:

来源: GitHub

Ember.js 最近受到了业界越来越多的关注,每周下载量超过 10 万次:

来源: NPM 趋势

根据“JavaScript 现状”调查,Ember.js 在知名度方面排名第四:

来源:JavaScript 的状态,2019

类似文章:

[## 2021 年十大热门 Web 开发框架

针对企业和开发人员的顶级 web 开发框架的深入分析和排名

towardsdatascience.com](/top-10-in-demand-web-development-frameworks-in-2021-8a5b668be0d6) [## 2020 年最受欢迎的 10 种编程语言

针对求职者和新开发人员的顶级编程语言的深入分析和排名

towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [## 现在要学习的 7 种现代编程语言

Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能

towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)

2020 年商务智能工具的 10 大关键特性

原文:https://towardsdatascience.com/top-10-key-features-of-bi-tools-in-2020-fd02c1dd4c71?source=collection_archive---------14-----------------------

你知道商业智能能解决什么问题,什么样的 BI 工具才算好的吗?

如今,商业智能市场正在升温。投资界和 IT 界都在密切关注大数据和商业智能。但是你知道 BI 工具能解决什么问题,什么样的 BI 工具才算是好的吗?

图片来源:https://www . exist bi . com/articles/business-intelligence-systems-and-data-mining/

根据对 Gartner 分析和商业智能平台魔力象限评估标准的研究,我总结了 BI 工具的 10 大关键特性,供您参考。

总体而言,随着用户的数据来源变得更加广泛,他们对 BI 的偏好也在发生变化。他们更喜欢自助式开发、交互式仪表盘和自助式数据探索。说白了,用户越来越希望自己做数据分析,而不必找 it 部门支持。

1.BI 平台的管理、安全性和架构

好的 BI 工具可以实现平台安全,管理平台用户,监控访问和使用,优化性能,支持不同操作系统的运行,保证系统的高可用性和灾难恢复。

BI 平台作为企业信息化的一部分,有很多理由做单独的管理和容灾。一方面,政府、互联网公司、大型企业都非常重视信息化建设,要求单独维护。另一方面,BI 系统也逐渐成为企业管理决策的支撑,发挥着越来越大的作用。企业需要 BI 系统全天提供稳定的服务。

2.元数据管理

用户可以集中管理元数据,包括元数据的搜索、提取、处理、存储、共享和对外发布。

这里的元数据集中于业务分析所需的维度、指标、层次、度量和其他数据。还包括一些经过处理的数据,比如 KPI、个人销量、单品销量等数据。同时,系统支持管理员将用户处理和存储的元数据与连接到 BI 平台的底层数据关联和集成。

3.分析仪表板

借助可视化探索操作和嵌入式高级地理空间分析,创建高度互动的仪表盘和内容。

分析仪表板也可以理解为交互式图表组件,如常见的条形图、折线图、散点图等。,以及高级矩形树形图、多层圆环图、行政地理图、自定义地图、热图、流程图等。这里的重点是这些图表要内置在 BI 工具中,同时它支持业务人员简单的拖拽实现图表展示。从目前来看,这个趋势还是比较明显的。

FineReport 制作的高速公路监控仪表盘

FineReport 制作的制造业仪表盘

4.交互式视觉探索

使用一系列常用和特殊图表探索和分析数据。

这些常规图表主要是饼状图、折线图等。,而特殊图表指的是特殊的视觉效果,如热图、流程图、矩形树图、GIS 地理信息图等。当然,除了图表的丰富和美观,还需要注意交互操作。

FineReport 制作的下钻图

如果你想了解更多的图表类型,这篇文章供你参考: 数据可视化中前 16 种图表类型

5。支持移动显示

用户可以将 BI 工具的分析内容发布到移动终端设备上,并可以利用移动设备自身的功能实现触摸操作、照片、视频、定位等。双页的。

移动商务智能是目前商务智能市场的一大亮点。不同的公司有不同的需求。有人关注多个操作系统,比如 Android 和 IOS 版本,必须同步支持。有些人注重功能和交互效果,如移动设备上的数据采集、图像和视频采集、定位、联动和钻孔。但是请大家多注意移动终端的安全,移动 BI 一定要保证企业数据的安全。

FineReport 制作的移动仪表盘

6.嵌入分析内容

支持 BI 分析页面与业务流程或业务系统的无缝集成,支持在业务软件中直接创建和修改分析内容,支持 BI 平台的管理。

BI 分析内容的无缝嵌入主要考虑几个方面。首先是实现单点登录,即用户不必先登录业务系统,再重新登录 BI 系统,系统自动完成多平台认证。二是权限整合。BI 平台必须提供一个集成解决方案,允许用户在业务软件界面查看权限内的 BI 分析内容。第三是 UI 集成。作为嵌入到业务系统中的组件的一部分,BI 平台本身应该具有轻松修改 UI 的能力,以便将嵌入式 BI 接口集成到业务系统中。

7.嵌入式高级分析

用户可以轻松使用 BI 平台内置的高级分析功能,也可以导入和集成外部开发的高级分析模型。

通俗的理解,BI 平台自带高级分析模型和算法模型,允许用户拖动数据,自动运行模型得出结论。从目前市面上的 BI 产品策略来看,大部分 BI 产品尚未支持嵌入式高级分析,少数支持与 R 语言集成。常见的场景是用户自己开发算法模型或者多年积累的高级分析模型,然后将分析模型处理的数据连接到 BI 系统进行可视化分析和展示。也就是 BI 工具还是为了数据分析和图形显示。

8.自助数据准备

用户自己拖拽不同来源的数据,创建分析模型,然后系统通过智能分析和自动关联,自动处理数据,包括结构化数据和非结构化数据。

自助数据准备本质上是让 BI 系统自动处理数据之间的逻辑关联。目前很多 BI 工具很难做到这一点,但是市面上类似 FineReport 这样的 BI 报表工具却开辟了新的解决方案。除了自动关联和转义数据,还可以手动设置关联。同时,在 IT 人员初步处理完数据后,业务人员可以通过 SPA 螺旋分析功能再次处理数据。

9.发布和共享分析内容

允许用户通过各种文件输出类型和分发方式发布和操作 BI 分析内容。

用户可以通过商业智能平台分享商业智能分析的内容和决策。总之我做的 BI 分析页面可以分享给别人,我也可以编辑修改别人分享的内容,我们可以互相交流。这里最大的价值是 BI 分析的重用。即你所做的 BI 分析数据和结论可以共享,你自己的分析模型也可以共享,提高企业员工的协作效率。

10.易用性和可视化

易于管理和部署 BI 平台,创建和共享 BI 分析,易于可视化数据。

BI 软件的专业性和易用性是很难平衡的两个方面。BI 软件的易用性必须考虑到业务人员的软件操作水平和这方面可接受的培训成本。我认为易用性更多的是提供操作提示和更容易的交互。然而,仍然需要进行必要的培训。毕竟数据分析本身就是一个专业的事情,需要相应的技能。

最后

在商业智能领域的研究和实践中,越来越多的管理者期望通过实施数据分析项目和购买商业智能软件来解决企业管理和决策中遇到的困难。一些公司从数据共享、数据分析和业务预测三个层面进行探索。更多的时候,他们适应企业的实际运作,进行业务调整。

还有的更注重企业的管理,走分析、运营、战略三个阶段。这就造成了对商业智能需求的根本差异。我们不一定要改变公司管理业务的方式。相反,我们使用合适的 BI 软件来使管理更有效,使决策更科学。

您可能也会对…感兴趣

2019 年你不能错过的 9 款数据可视化工具

让你的数据报告脱颖而出的指南

6 种数据分析方法帮你做出出色的财务报表

图形神经网络的 10 大学习资源

原文:https://towardsdatascience.com/top-10-learning-resources-for-graph-neural-networks-f24d4eb2cc2b?source=collection_archive---------9-----------------------

让你开始进入令人兴奋的深度学习领域

照片由 Unsplash 上的 Dmitry Ratushny 拍摄

G 图形神经网络(GNNs)是深度学习的一个相对较新的领域,最近变得越来越受欢迎。Twitter、谷歌或脸书等大公司投资 GNN 研究,因为它被证明优于其他处理图形数据的机器学习模型。

由于这个领域发展迅速,GNNs 背后的知识还不容易获得。目前,你可以在互联网上找到分散在研究论文、文章或博客中的 GNN 理论。我们缺少的是一本 GNN 的书,或者一本在线资源的汇编来帮助人们在这个领域起步。

在做了一些搜索之后,我发现实际上有一些很好的资源以一种平易近人的方式解释了 GNNs。我希望它对这个领域的新手有用。我们开始吧!

1.林子幸·汉密尔顿的图形表示学习书

[## 图形表示学习手册

在过去的七年里,图形表示学习领域以令人难以置信的(有时甚至是笨拙的)速度发展

www.cs.mcgill.ca](https://www.cs.mcgill.ca/~wlh/grl_book/)

这本书是一个游戏改变者,目前可以在线下载。它从图论和传统的图论方法等初学者主题开始,到新的 GNN 模型和最新的 GNN 研究等更高级的主题。它是一个设计良好的独立材料,具有图形神经网络所需的大部分理论。

2.斯坦福课程笔记——使用图表的机器学习

[## CS224W |主页

网络是对复杂的社会、技术和生物系统进行建模的基本工具。再加上…

web.stanford.edu](http://web.stanford.edu/class/cs224w/)

这是斯坦福大学的一门课程,专门研究图形的机器学习。它公开了他们讲课的幻灯片和推荐读物。如果你想系统地学习一门结构良好的课程,这很好。

3.艾伯特-拉斯洛·巴拉巴希的网络科学书籍

[## 阿尔伯特·拉斯洛·巴拉巴希的《网络科学》

网络科学的力量,网络可视化的美好。

networksciencebook.com](http://networksciencebook.com/)

这是一本在线的交互式书籍,重点是图和网络理论。虽然它没有讨论 GNNs,但是它是一个很好的资源,可以为操作图打下坚实的基础。

4.托马斯·基普夫博客

[## 图卷积网络有多强大?

许多重要的现实世界数据集以图表或网络的形式出现:社会网络、知识图表…

tkipf.github.io](https://tkipf.github.io/graph-convolutional-networks/)

由 GNN 领域最著名的研究者之一——托马斯·基普夫博士创建的一个优秀的博客。在他的文章中,他温和地介绍了 GNNs,提供了新方法的文献综述,并讨论了他的论文中的发现— 用图卷积网络进行半监督分类

5.迈克尔·布朗斯坦博客

[## 迈克尔·布朗斯坦—中号

阅读迈克尔布朗斯坦在媒体上的文章。教授@imperialcollege,Graph ML Research 负责人@Twitter,ML Lead…

medium.com](https://medium.com/@michael.bronstein)

迈克尔·布朗斯坦是伦敦帝国理工学院的教授,也是 Twitter 图形学习研究的负责人。最近,他开始在《走向数据科学》上发表文章。他的博客文章聚焦于 GNNs 的数学视角和该领域的最新进展。他倾向于引用 GNNs 上的许多其他文章,这可能有助于您发现其他有趣的文章。

6.生命科学的深度学习:将深度学习应用于基因组学、显微镜学、药物发现等

[## 生命科学的深度学习

深度学习已经在很多领域取得了显著的成果。现在它正在整个科学界掀起波澜…

www.oreilly.com](https://www.oreilly.com/library/view/deep-learning-for/9781492039822/)

虽然这一立场不完全是关于 GNNs,这本书的一部分提供了 GNN 模型的实际应用。它解释了如何使用生命科学的深度学习库 Deepchem 将 GNNs 应用于分子数据集。它还讨论了 GNNs 所需的不同预处理方法。

7.Flawnson Tong 博客

[## Flawnson Tong -走向数据科学

阅读 Flawnson Tong 在《走向数据科学》中的文章。使用机器学习一步一步地加速科学…

towardsdatascience.com](https://towardsdatascience.com/@flawnsontong1)

Flawnson 在 Medium 上发表了几篇关于 GNNs 的介绍性文章。他们的目标是希望对图形神经网络背后的理论有一个基本了解的初学者。很好,如果你想一瞥什么是 gnn。

8.最新 GNN 论文集— Github Repo

[## thunlp/GNNPapers

图形神经网络必读论文(GNN)。通过在…上创建帐户,为 thunlp/GNNPapers 的开发做出贡献

github.com](https://github.com/thunlp/GNNPapers#survey-papers)

这是一份最近 GNN 论文的汇编,包含了这个领域中大多数发表的论文。他们把清单细分成单独的主题,如我们。如果你正在寻找 GNNs 的一个特殊应用领域的论文,值得一查。

9.带代码的图形神经网络

[## 论文与代码-论文与代码:图形神经网络搜索

10 个搜索结果

paperswithcode.com](https://paperswithcode.com/search?q_meta=&q=graph+neural+networks)

Paperswithcode 是一个知名的分享研究论文及其代码的网站。如果您想找到已经有代码实现的 GNN 模型,这是一个好地方。

10.图形神经网络综述

[## 图形神经网络综述

近年来,深度学习已经彻底改变了许多机器学习任务,从图像分类到…

arxiv.org](https://arxiv.org/abs/1901.00596)

这篇研究论文总结了 GNNs 中的大部分重要发现,提供了 GNNs 背后的历史的简要概述,并讨论了不同类型的 GNN 建筑。

关于我

我是阿姆斯特丹大学的人工智能硕士学生。在我的业余时间,你可以发现我摆弄数据或者调试我的深度学习模型(我发誓这很有效!).我也喜欢徒步旅行:)

如果你想了解我的最新文章和其他有用的内容,以下是我的社交媒体资料:

每个 Java 开发人员都应该知道的 10 大库

原文:https://towardsdatascience.com/top-10-libraries-every-java-developer-should-know-37dd136dff54?source=collection_archive---------1-----------------------

Java 和 JVM 软件开发中基本 Java 库的精选列表

照片由安民派克斯拍摄

Java 是商业应用程序开发领域的头号编程语言。它也是顶级编程语言之一。

Java 的一个关键特性是它有一个功能丰富且庞大的核心库。虽然标准 Java 库功能强大,但在专业软件开发中,您还需要其他 Java 库。经过 25 年的积极开发以及业界和社区的采纳,Java 有了许多成熟而有用的库。

这里我列出了在所有领域的 Java 应用程序中使用的前 10 个 Java 库。无论您是为业余爱好项目还是企业级项目开发软件,您可能都需要我在下面列出的大多数库。

Apache Commons

Apache Commons 就像 Java 软件开发中的一把瑞士刀,它扩展了许多 Java 核心库。如果您想在自己的项目中编写一个实用程序类,那么很有可能已经存在一个成熟而强大的 Apache Commons 库。Apache Commons 由 43 个模块化库组成,涵盖了集合、数学、类、数据库、缓存、I/O 实用程序等领域。

它被广泛应用于业界和几乎非官方的 Java 标准库增强。如果您正在进行一个大项目,并且没有使用任何 Apache Commons 库,那么您可能正在重新发明轮子。

主要特点:

  • Java 集合框架扩展。
  • 数学和统计部分。
  • JDBC 助手。
  • Java 类。
  • I/O 实用程序。
  • 日志记录实用程序。

链接:

[## Apache Commons — Apache Commons

Apache Commons 是一个 Apache 项目,专注于可重用 Java 组件的所有方面。Apache Commons 项目是…

commons.apache.org](https://commons.apache.org/)

谷歌番石榴

Google Guava 是另一个顶级的通用 Java 库。最初由 Google 开发,由著名软件工程师和作家 Joshua Bloch 设计。它现在是一个开源项目,谷歌以外的许多工程师都为此做出了贡献。像 Apache Commons 一样,它也是模块化的,包含许多独立的库。

它涵盖了基本的实用程序、集合、字符串操作、并发实用程序、图形库、I/O 实用程序、哈希等等。谷歌番石榴比阿帕奇公共图书馆有更好的软件设计。如果你觉得有必要创建一个共享库或实用类,那么先看看谷歌番石榴库。

主要特点:

  • Java 集合框架扩展。
  • I/O 实用程序。
  • 并发实用程序。
  • 字符串实用程序。
  • 缓存。
  • 哈希。

链接:

[## 谷歌/番石榴

Guava 是来自 Google 的一组核心 Java 库,包括新的集合类型(如 multimap 和 multiset)…

github.com](https://github.com/google/guava)

杰克逊

在软件开发中,你必须处理不同格式的数据。要么你必须以不同的格式加载或保存数据,要么你必须以不同的格式传输数据。JSON 是现代软件开发中事实上的数据交换格式。其他常见的数据格式有 Avro、XML、YAML、Protobuf、CSV、BSON、CBR。

Jackson 是一套用于 Java 的数据处理库。Jackson JSON 是事实上的流 JSON 解析器/生成器库。它还支持其他数据格式,如 Avro、BSON、CBOR、CSV、Smile、Protobuf、XML 或 YAML,以及数据类型,如 Guava、Joda、PCollections 等等。

Jackson 还提供了数据绑定和注释。您可以将 POJO 转换为数据,或者借助 Jackson 注释从数据生成 POJO。如果您处理数据格式,Jackson 是一个必备的工具集。它是高度模块化的,具有提供基本功能的核心模块和各种扩展模块。

主要特点:

  • 流、注释、数据绑定的核心模块,并支持 JSON 数据格式。
  • 针对 Avro、CBOR、CSV、Ion、Protobuf、Smile、XML、YAML 等数据类型的特定模块。
  • 科特林土著类型。
  • JSON 模式。
  • 标准和集合数据类型。
  • 支持第三方数据类型(Yandex Bolts、GeoJSON、Lombok、MongoDB 等等)。

链接:

[## FasterXML/jackson

这是 Jackson 项目的主页,以前被称为 Java 标准 JSON 库(或 JVM 平台……

github.com](https://github.com/FasterXML/jackson)

JAXB

正如上一节所讨论的,XML 是另一种流行的数据格式,它提供了更严格的数据验证、存储和传输。直到 Java 8,Java 标准库才有 XML 支持,包括数据绑定。从 Java 9 开始,XML 处理功能不再是标准 Java 库的一部分,而是转移到了一个单独的库 JAXB 中。

JAXB 提供了用 Java 处理 XML 所需的一切。它为 XML 和 Java 代码之间的映射提供了一种标准而有效的方式。它还包括基于注释的数据绑定。

主要特点:

  • 支持所有 W3C XML 模式特性。
  • 基于注释的 Java 到 XML 数据绑定。
  • 验证。

链接:

[## JAXB

用于 XML 绑定的 Java 架构(JAXB)提供了一个 API 和工具,可以自动化 XML 文档之间的映射…

javaee.github.io](https://javaee.github.io/jaxb-v2/)

SLF4J

日志记录是生产级软件开发中不可或缺的一部分。仔细的日志记录将有助于您理解软件的工作,并找到错误的根本原因,尤其是在生产系统中。Java 标准库在 java.util.Logging 中提供了基本的日志记录。还有其他日志库,如 Log4j、Log4j 2、Logback,它们提供了高级的 Java 日志功能。虽然这些日志库提供了具体的实现,但 SLF4J 为各种日志库提供了抽象或门面。它允许用户在部署期间更改所需的日志库。

起初,使用额外的 facade 库 SLF4J 进行日志记录听起来可能会适得其反。但是使用 SLF4J 会给你额外的灵活性,如果需要的话,可以毫不费力地修改具体的日志库。使用您首选的日志记录框架作为 SLF4J 的可插拔日志记录程序总是一个好主意。

主要特点:

  • 提供底层日志框架的抽象。
  • 日志框架可以在运行时更改。
  • 支持所有主要的日志框架。
  • 提供了一个包含有用工具和特性的库(slf4j-ext.jar)。
  • 记录事件的事件记录器。

链接:

[## SLF4J

Java 的简单日志门面(SLF4J)作为各种日志框架的简单门面或抽象…

www.slf4j.org](http://www.slf4j.org/)

Log4j 2

Java 中有很多优秀的日志库:java.util.logging,Log4j,Log4j 2,Logback。其中,Log4j 2 和 Logback 是两个最强大的日志库。与 Logback 相比,我更喜欢 Log4j 2,尤其是对于大型项目,因为它提供了更好的性能。对于大型项目,日志库的性能至关重要,尤其是异步日志、峰值吞吐量和延迟。就这些标准而言,Log4j 2 比 Logback 略胜一筹,如下所述:

[## Log4j —性能

除了功能需求之外,选择日志库的一个重要原因通常是它能很好地满足…

logging.apache.org](https://logging.apache.org/log4j/2.x/performance.html)

主要特点:

  • 通过异步日志记录提高性能。
  • 将 API 与实现分开。
  • 高级过滤。
  • 插件架构。
  • 云支持。

链接:

[## Apache Log4j 2

Apache Log4j 2 是 Log4j 的升级版,对其前身 Log4j 1.x 进行了重大改进,并且…

logging.apache.org](https://logging.apache.org/log4j/2.x/)

莫奇托

单元/集成测试是软件开发过程中不可或缺的一部分。通常您想要测试一个单独的类(SUT),但是它依赖于其他重量级的类或者外部功能(例如,数据库操作,I/O 操作)。在这种情况下,编写单元/集成测试的一种方法是模仿。您可以模仿其他外部服务调用的行为,只关注您想要测试的类。

Mockito 是 Java 中使用最广泛的模仿库。无论您是在测试一个小项目,还是一个庞大、复杂的企业 Java 项目,您都可以在任何地方使用 Mockito。它提供了一个非常简单、干净的 API,让你的单元/集成测试保持干净。

主要特点:

  • 精益清洁的 API。
  • 提供简化的存根模型。
  • 经由间谍的局部嘲讽。
  • 基于注释的模拟/间谍注入。
  • 使用 BDDMockito 的行为驱动开发语法。

链接:

[## Mockito 框架站点

Szczepan Faber and friends 为您提供摩奇托。第一批在生产中使用 Mockito 的工程师是…

site.mockito.orgHa](https://site.mockito.org)

AssertJ

AssertJ 是我列表中第二个与 TDD 相关的库。测试的主要特征之一是验证测试结果是否与预期结果相匹配。JUnit 在 org.junit.Assert 类中有一个内置的断言机制。对于专业开发人员来说,这两种方法是不够的。

幸运的是,Java 环境中存在两个强大的断言库: Hamcrest matchers 和 AssertJ 断言。相比 Hamcrest,我更喜欢 AssertJ,因为它的 API 很流畅。它也是高度模块化的,在其核心模块中提供必要的功能,在其他模块中提供一些高级功能。

主要功能:

  • 流畅的断言 API 提供更好的代码可读性。
  • 丰富的断言集和有用的错误消息。
  • 标准 Java 库的核心模块。
  • 在流行的 Java 库中提供断言的模块,例如 Guava、Joda、Neo4j。
  • 模块为 SQL 数据库提供断言。

链接:

[## AssertJ——流畅断言 java 库

所有资产的入口点方法和实用程序方法(例如入口)导入静态…

assertj.github.io](https://assertj.github.io/doc/)

冬眠

在我们作为软件工程师的日常生活中,我们必须使用数据存储。在现代,有许多类型的数据存储:SQL 和无数的 NoSQL 数据存储。处理数据存储的一种方式是使用低级 API(例如,SQL 的 JDBC)。这种方法的缺点是不可移植。因此,处理数据存储的最佳方式是在应用程序和数据存储之间引入一个抽象层。这个抽象层(ORM)将 Java 类与数据库表/集合进行映射。Hibernate 是所有编程语言中最早的 ORM 库之一,并启发了业界许多类似的技术。

尽管 Hibernate 主要以 SQL 数据库的 ORM 功能而闻名,但它也扩展到了 NoSQL 数据库。Hibernate 也是模块化的,它提供了一个核心模块和许多基于功能的模块。

主要特点:

  • 关系数据库(ORM)的域模型持久性。
  • NoSQL 数据存储(OGM)的域模型持久性。
  • 领域模型的基于注释的验证。
  • 领域模型的全文搜索。

链接:

[## 冬眠

编辑描述

hibernate.org](https://hibernate.org/)

Apache HTTPComponents

HTTP 是迄今为止使用最多、最流行的应用层协议。Java 标准库没有提供太多处理 HTTP 的功能。幸运的是,Apache HTTPComponents 提供了一套专注于 HTTP 和相关协议的 Java 组件工具。Apache HTTPComponents 也是高度模块化的,它提供了一个核心模块来开发定制的客户机/服务器 HTTP 服务,占用空间很小。它还为异步 HTTP 客户端等高级功能提供了增值模块。

主要特点:

  • 用于客户机/服务器服务的低级 HTTP 传输组件。
  • 提供阻塞和非阻塞 I/O 型号。
  • 用于客户端身份验证、状态管理和连接管理的同步 HTTP 客户端。
  • 异步 HTTP 客户端处理大量并发连接。

链接:

[## Apache http components—Apache http components

Apache HttpComponents 项目负责创建和维护低级 Java 组件的工具集…

hc.apache.org](https://hc.apache.org/)

类似文章:

[## 金融科技的编码语言:JVM 如何让你成功?

Java,Kotlin,Scala,Groovy,Clojure

md-kamaruzzaman.medium.com](https://md-kamaruzzaman.medium.com/coding-languages-for-fintech-how-will-jvm-make-you-succeed-89f84af22296) [## 10 个优秀的 GitHub 库,适合每一个 Java 开发者

面向 Java 开发人员的基本 GitHub 库的精选列表

towardsdatascience.com](/10-excellent-github-repositories-for-every-java-developer-41084a91ade9) [## 您应该尝试的 25 个鲜为人知的 Java 库

对 Java 和 JVM 软件开发有很大帮助的库

towardsdatascience.com](/25-lesser-known-java-libraries-you-should-try-ff8abd354a94)

Python 中提高生产力的 10 大神奇命令

原文:https://towardsdatascience.com/top-10-magic-commands-in-python-to-boost-your-productivity-1acac061c7a9?source=collection_archive---------4-----------------------

jupyter 笔记本中重要 IPython 魔术命令的实现

Artem Maltsev 在 Unsplash 上拍摄的照片

Python 不仅是最通用的编程语言,而且在集成新特性时也是最灵活的。也就是说,魔术命令是 python shell 中添加的重要特性之一。

python 中的魔法命令到底是什么?

魔术命令是在普通 python 代码上添加的增强功能,这些命令是由 IPython 内核提供的。

这些神奇的命令通常以“%”字符为前缀

添加这些命令主要是为了解决我们面临的常见问题,同时也为您的代码提供了一些快捷方式。

有两种神奇的命令可供使用— %前缀和%%前缀

% prefix 表示命令在单行代码上操作,而%% prefix 允许命令在整个单元上操作。

以下是在 jupyter notebook 中执行的魔法命令及其实现列表。

运行外部文件

当我们尝试在 jupyter 笔记本中运行一些代码片段时,我们希望运行位于某个目录中的外部代码文件。

%run 允许您从 jupyter 笔记本运行任何外部 python 文件

上面的文件 myCode.py 包含一个简单的脚本,它输出上述语句。

如果我们指定包含%run 命令路径的文件名,它将执行该文件。

注意:%run 也允许执行外部 jupyter 笔记本。

代码执行时间

有没有想过你的手机运行需要多长时间?

照片由卢克·切瑟Unsplash 上拍摄

时间魔术命令允许跟踪你的细胞的总执行。

因为我们将在这里处理整个单元格,所以我们将在 time 关键字前使用%%作为前缀。

上面的单元格包括一个随机计算的 for 循环。%%time 有助于获得运行 for 循环所需的执行时间。

将内容复制到外部文件

大多数时候,您会觉得需要直接从 jupyter 笔记本中将内容添加到 python 脚本或文本文件中。

您可以通过在代码前添加 writefile 命令来直接导出单元格内容,而不是复制所有内容并创建新文件。

请注意命令前的双%,它表示将导出单元格的全部内容。

因为我已经创建了包含一些内容的文件,所以它显示“Overwriting myCode.py ”,指定它将用上面图像中显示的内容覆盖我的原始内容。

显示外部文件的内容

通常你会觉得需要从外部文件中复制几行代码到你的代码中。%pycat 允许您显示任何目录中任何文件的内容,而不是获取文件并打开它进行复制的漫长过程。

它将外部文件的所有内容显示为输出。就其应用而言,它可以被认为是%writefile 的反向。

克里斯·利维拉尼在 Unsplash 上的照片

抓紧了!大量令人惊奇的命令仍有待探索。

列出所有变量

这个神奇的命令显示了整个笔记本中使用的所有变量。

下面是 3 个变量——2 个字符串和 1 个整数。如果我们运行 %who,,它将列出我们已经定义的所有 3 个变量。

a = "hello"
b = "Good Morning"
c = 1

上面的代码显示了所有变量,不管它们的数据类型如何。

为了显示特定的数据类型变量,我们需要在 magic 命令后传递数据类型。上面的代码将所有 string 数据类型变量显示为其输出。

在笔记本之间共享变量

凯利·西克玛Unsplash 上拍摄的照片

这个神奇的命令允许你在不同的 jupyter 笔记本之间共享任何变量。您需要用 magic 命令传递原始变量。

要检索变量,您需要传递带有'-r '参数的相同命令。

这是第一个笔记本的样子

检索这些数据所需的代码写在另一个笔记本上。

这可能是在不同笔记本之间共享任何数据类型的数据的最简单方式。

执行 html 脚本

%% html 允许我们在单元格中编写 html 代码。该单元格现在将充当 html 编辑器,输出该单元格的 html。

下面的代码包含一个用 html 创建的简单表格。您可以注意到显示预期表格的 html 输出。

%%html
<html>
<body>
<table>
        <tr> 
            <th>Name</th> 
            <th>Country</th> 
            <th>Age</th> 
        </tr> 
        <tr> 
            <td>Sid</td> 
            <td>India</td> 
            <td>22</td> 
        </tr>
        <tr> 
            <td>Dave</td> 
            <td>UK</td> 
            <td>28</td> 
        </tr>
</table>
</body>
</html>

提示:您可以使用类似于 HTML magic command 的%%js magic command 在单元格中运行 Javascript 代码。

显示 Matplotlib 图形

% matplotlib inlinemagic 命令是最流行的命令。这个命令允许 Jupyter notebook 在笔记本中显示 matplotlib 图形。此命令为您的 jupyter 笔记本激活 matplotlib 交互式支持。

import random
import matplotlib.pyplot as plt
%matplotlib inline

我们导入了一些解释命令功能所需的库。

我们现在将创建两个随机列表来绘制图表

a = []
b = []
for i in range(10):
    a.append(random.randint(0,10))
    b.append(random.randint(0,10))

现在我们将绘制数据的散点图。

plt.scatter(a,b)

%matplotlib inline magic 命令允许您在 jupyter 笔记本中可视化图形。

设置环境变量

这个神奇的命令允许你做 3 件事——列出所有的环境变量,获取特定环境变量的值,并为变量设置一个值。

没有参数的%env 将列出所有的环境变量。

带有单个参数的%env 将返回指定参数的值。

'%env 变量值'将为指定的变量名设置值。

对象详细信息

%pinfo 提供了与其一起传递的对象的详细信息。它是类似于的物体吗?功能。

在下面的代码片段中,我传递了一个简单的字符串' a '和%pinfo,以获得关于它的详细信息。

a = "The World Makes Sense!"
%pinfo a

从上面的输出中,%pinfo 提供了关于 string 对象的所有信息。

亚历克斯·纪尧姆在 Unsplash 上的照片

使用' %lsmagic '命令可以找到所有的魔法命令列表。

%lsmagic

这些是我的 10 大神奇命令,可以帮助你提高工作效率,节省时间。

希望你喜欢!

分类 ML 模型的 10 大模型性能指标

原文:https://towardsdatascience.com/top-10-model-evaluation-metrics-for-classification-ml-models-a0a0f1d51b9?source=collection_archive---------5-----------------------

机器学习基础

解释非常规,这将作为评估分类机器学习模型的详尽列表。

介绍

在本帖中,我们将了解 10 个最重要的模型性能指标,这些指标可用于评估分类模型的模型性能。

以下是 10 个指标的列表,我们将通过示例以相互关联的方式进行研究:

  1. 混淆矩阵
  2. 第一类错误
  3. 第二类错误
  4. 精度
  5. 回忆或真阳性率或灵敏度
  6. 精度
  7. 特异性
  8. F1 得分
  9. ROC 曲线- AUC 评分
  10. PR 曲线

一旦我们学会了正确的用法以及如何根据您的问题陈述来解释这些指标,那么评估分类模型的强度就变得轻而易举了。

让我们开始吧!

我们将使用一个数据集示例,该数据集具有用于训练逻辑回归模型的“是”和“否”标签。此用例可以是任何分类问题—垃圾邮件检测、癌症预测、流失率预测、活动目标预测等。在本帖中,我们将根据需要引用特殊用例。现在,我们将考虑一个简单的逻辑模型,它必须预测是或否

首先,逻辑模型可以给出两种输出:

1.它给出类别标签作为输出值(是/否,1/0,恶性/良性,流失/保留,垃圾邮件/非垃圾邮件等)。)

2.它给出 0 到 1 之间的概率值作为输出值,以表示某一事件对于特定观察的可能性。

类别标签场景可以进一步细分为平衡或不平衡数据集的情况,这两种情况都不能/不应该基于相似的度量来判断。一些指标更适合另一个,反之亦然。类似地,概率场景与类标签场景具有不同的模型性能度量。

下面是流程图,它是这篇文章的完美总结和完美序言,我们将在最后再次回顾这个流程图,以确保我们理解了所有的指标。

1.混淆矩阵

在构建任何统计或 ML 模型时,我们从开发数据集开始。将数据集分为两部分:训练和测试。将测试数据集放在一边,并使用训练数据集训练模型。一旦模型准备好进行预测,我们就尝试对测试数据集进行预测。一旦我们将结果分割成类似于上图所示的矩阵,我们就可以看到我们的模型能够正确预测多少,以及它的预测有多少是错误的。

我们用测试数据集中的数字填充下面的 4 个单元格(例如,有 1000 个观察值)。

  1. TP(真阳性):在测试数据集中,该列的实际标签为“是”,而我们的逻辑回归模型也预测为“是”。(500 次观察)
  2. TN(真阴性):在测试数据集中,该列的实际标签为“否”,而我们的逻辑回归模型也预测为“否”。(200 项观察)
  3. FP(假阳性):在测试数据集中,该列的实际标签为“否”,但我们的逻辑回归模型预测为“是”。(100 项观察)
  4. FN(假阴性):在测试数据集中,该列的实际标签为“是”,但我们的逻辑回归模型预测为“否”。(200 项观察)

这 4 个单元格构成了“混淆矩阵”,因为在该矩阵中,通过清楚地描绘出我们模型的预测能力,可以减轻对我们模型的良好性的所有混淆。

混淆矩阵是一个表格,通常用于描述分类模型(或“分类器”)对一组真实值已知的测试数据的性能。

2.第一类错误

第 1 类错误也称为假阳性,当分类模型错误地预测了最初错误观察的真实结果时就会发生。

例如:假设我们的逻辑模型正在处理垃圾邮件,而不是垃圾邮件。如果我们的模型将一封重要的电子邮件标记为垃圾邮件,那么这就是我们的模型的第一类错误的例子。在这个特定的问题陈述中,我们对尽可能减少 I 类错误非常敏感,因为重要的电子邮件进入垃圾邮件会产生严重的后果。

3.第二类错误

第二类错误也称为假阴性,发生在分类模型错误地预测了原本真实的观察结果的错误结果时。

例如:假设我们的逻辑模型正在处理一个用例,它必须预测一个人是否患有癌症。如果我们的模型将一个患有癌症的人标记为健康人,并将其错误分类,那么这是我们模型的第二类错误的一个例子。在这个特定的问题陈述中,我们对尽可能减少 II 型错误非常敏感,因为在这种情况下,如果疾病在受影响的人中继续未被诊断,假阴性可能导致死亡。

4.准确(性)

现在,上面讨论的三个指标是通用指标,与您拥有的训练和测试数据的类型以及您为您的问题陈述部署的分类算法的类型无关。

我们现在将讨论非常适合特定类型数据的指标。

让我们从这里开始讨论准确性,这是一个最适合用于平衡数据集的指标。参考下图,该图来源于本媒体文章

来源:链接

如您所见,一个平衡的数据集是这样的:1 和 0、是和否、正和负由训练数据均等地表示。另一方面,如果两个类别标签的比率是倾斜的,那么我们的模型将偏向一个类别。

假设我们有一个平衡的数据集,让我们学习什么是准确性。

精度是测量结果与真实值的接近程度。它告诉我们,我们的分类模型能够多准确地预测问题陈述中给出的类别标签。

例如:假设我们的分类模型试图预测客户流失情况。在上图中,在总共 700 个实际流失客户(TP+FN)中,模型能够正确地对 500 个流失客户进行分类(TP)。同样,在总共 300 个保留客户(FP+TN)中,该模型能够正确地对 200 个保留客户(TN)进行分类。

准确率=(TP+TN)/客户总数

在上面的场景中,我们看到模型在 1000 个客户的测试数据集上的准确率是 70%。

现在,我们知道了准确性是一个应该只用于平衡数据集的指标。为什么会这样呢?让我们看一个例子来理解这一点。

在这个例子中,这个模型是在不平衡的数据集上训练的,甚至测试数据集也是不平衡的。准确性指标的得分为 72%,这可能给我们的印象是我们的模型在分类方面做得很好。但是,仔细看,这个模型在预测负面的阶级标签方面做得很糟糕。它只预测了 100 个总阴性标签观察中的 20 个正确结果。这就是为什么如果数据集不平衡,就不应该使用精度指标。

下一个问题是,如果你有一个不平衡的数据集,该怎么做呢?答案是召回率和精确度。下面我们来详细了解一下这些。

5.召回/灵敏度/ TPR

回忆/敏感度/ TPR(真阳性率)尝试回答以下问题:

正确识别实际阳性的比例是多少?

来源:维基百科

这个指标给出了 78%的召回分数,如上图所示。召回通常用在真理检测至关重要的用例中。例如:癌症预测、股市分类等。在这里,问题陈述要求假阴性最小化,这意味着召回/灵敏度最大化。

6.精确

精密试图回答以下问题:

实际上有多少比例的正面认同是正确的?

来源:维基百科

上图中显示的示例向我们展示了精度分数为 75%。精度通常用于最重要的是不要有大量误报的情况。例如:在垃圾邮件检测案例中,正如我们上面所讨论的,误报是指不是垃圾邮件但被我们的分类模型分类为垃圾邮件的观察结果。太多的误报会破坏垃圾邮件分类器模型的目的。因此,在这种情况下,Precision 在判断模型性能时非常方便。

7.特征

特异性(也称为真阴性率)衡量被正确识别的实际阴性的比例。

来源:维基百科

基于我们用来理解精确度的同一个垃圾邮件检测分类器示例。特异性告诉我们,我们的模型能够准确地分类多少否定。在本例中,我们看到特异性=33%,这对于垃圾邮件检测模型来说不是一个好的分数,因为这意味着大多数非垃圾邮件被错误地分类为垃圾邮件。通过查看特异性度量,我们可以得出这个模型需要改进的结论。

8.F1 分数

我们分别在第 6 点和第 7 点讨论了召回率和精确度。我们知道,在一些问题陈述中,较高的召回率优先于较高的准确率,反之亦然。

但是在一些用例中,区别不是很明显,作为开发人员,我们希望同时重视召回率和精确度。在这种情况下,可以使用另一个指标——F1 分数。它依赖于精确度和召回率。

在二进制分类的统计分析中, F1 得分(也称为 F 得分F 度量)是测试准确度的一种度量。它同时考虑了测试的精度 p 和召回率 r 来计算分数

来源:维基百科

在讨论最后两个指标之前,下面是维基百科上提供的一个很好的汇总表,涵盖了我们到目前为止在本文中讨论的所有指标。放大看看图像是否看起来不清楚。

来源:维基百科

现在,我们在这篇文章的最后一站。到目前为止,我们已经讨论了预测类别标签的分类模型的模型性能度量。现在,让我们研究基于概率运行的模型的度量。

9.ROC 曲线- AUC 评分

曲线下面积(AUC),受试者工作特征曲线(ROC)

这是用于衡量模型性能的最重要的指标之一,在数据科学家中广受欢迎。

让我们从一个例子开始理解这一点。我们有一个分类模型,给出 0-1 范围内的概率值来预测一个人肥胖与否的概率。接近 0 的概率值表示所考虑的人肥胖的概率非常低,而接近 1 的概率值表示人肥胖的概率非常高。现在,默认情况下,如果我们考虑 0.5 的阈值,那么所有概率≤0.5 的人将被归类为“不肥胖”,而概率> 0.5 的人将被归类为“肥胖”。但是,我们可以改变这个阈值。如果我把它变成 0.3 或者 0.9 呢。让我们看看会发生什么。

为了便于理解,我们在样本中选取了 10 个人。

为了绘制 ROC 曲线,我们必须在 x 轴上绘制(1-特异性)即假阳性率,在 y 轴上绘制灵敏度即真阳性率。

ROC ( 接收器操作特性)曲线告诉我们该模型能够多好地区分两种情况(例如 患者是否肥胖)。更好的模型可以准确区分两者。然而,一个差的模型将很难区分这两者。

我们将看到 4 种不同的场景,其中我们将选择不同的阈值,并将计算 ROC 曲线的相应 x 轴和 y 轴值。

场景 1:阈值=0.9

场景 2:阈值=0.6

场景 3:阈值=0.3

场景 4:阈值=0

现在,我们有 4 个数据点,在它们的帮助下,我们将绘制我们的 ROC 曲线,如下所示。

因此,这就是如何为分类模型绘制 ROC 曲线,方法是分配不同的阈值以创建不同的数据点来生成 ROC 曲线。ROC 曲线下的面积称为 AUC。AUC 越多,你的模型就越好。你的 ROC 曲线离中间线性线越远,你的模型越好。这就是 ROC-AUC 如何帮助我们判断分类模型的性能,并为我们提供从许多分类模型中选择一个模型的方法。

10.PR 曲线

在数据主要位于负标签的情况下,ROC-AUC 将给出一个不能很好代表现实的结果,因为我们主要关注正比率方法,TPR 在 y 轴上,FPR 在 x 轴上。

例如,看看下面的例子:

在这里,您可以看到大部分数据位于负标签下,ROC-AUC 不会捕获这些信息。在这种情况下,我们求助于 PR 曲线,它只不过是精确召回曲线。

在 PR 曲线中,我们将在 Y 轴上计算并绘制精度,在 X 轴上绘制召回,以查看我们的模型表现如何。

就是这样!我们已经到达这篇文章的结尾。我希望它有帮助。

你可以从我的个人资料中查看 ML 上的其他帖子。我发表的文章是关于特性缩放的,如果你喜欢的话,可以读一读。

[## 清楚地解释:什么,为什么和如何特征缩放-规范化和标准化

特征缩放的重要性以及如何应用它。我的机器学习模型会从规范化中受益吗?

towardsdatascience.com](/clearly-explained-what-why-and-how-of-feature-scaling-normalization-standardization-e9207042d971)

请关注这个空间,了解更多关于机器学习、数据科学和统计学的内容!

快乐学习:)

十大最常用的数据角色和技能

原文:https://towardsdatascience.com/top-10-most-hired-data-roles-and-skills-e6c01b9cb975?source=collection_archive---------22-----------------------

意见

最全面的数据职业道路指南 出在这里

照片由 Jonathan ChngUnsplash 上拍摄

在当今快速发展的技术世界中,当人类倾向于生成大量数据时,分析数据是必不可少的。数据现在是商业的新前沿,或者我可以说它已经成为这个时代商业的燃料。对于一个处理数据和信息的组织来说,可以获得各种各样的工作来收集、整理和检查信息。

据估计,到 2026 年将有 1150 万个新工作岗位(来源:美国劳工统计局)

从简单的功能到值得注意的知识,每一项信息工作的职责可能会有很大的混乱。在这个故事中,我从与招聘人员、同行的交谈或阅读我的 Google Feed 推荐的文章中,收集了数据行业中最受雇佣的角色以及首选技能、角色和职责的信息。请继续阅读,了解它们是什么!

1.商业分析员

业务分析师负责分析一个组织或业务,它的过程、需求或系统。业务分析师的主要角色是评估业务模型或其与技术的集成。

简单地说,业务分析师负责将业务预期转化为数据分析。如果核心数据团队缺乏领域专业知识,业务分析师可以弥合这一鸿沟,并帮助企业做出数据驱动的决策。基于数据分析,指导企业改进流程、产品、服务或软件。

首选技能

数据可视化、商业智能、SQL

角色和职责

  1. 改进业务流程
  2. 充当业务和 IT 需求之间的中介
  3. 数据可视化工具— Tableau、Power BI、Looker、Alteryx
  4. 商业智能理解
  5. 数据建模
  6. 有意识的倾听和讲故事

2。数据分析师

在我看来,典型的数据分析师最擅长发现如何使用数据来回答问题和解决问题。

数据分析师的角色围绕着正确的数据收集和解释的使用。数据分析师的工作是确保收集的数据相关且详尽,同时解释分析结果。企业雇佣数据分析师,让他们具备可视化和讲故事的技能,将孤立的数字转化为切实的见解。

首选技能

r、Python、JavaScript、C/C++、SQL

角色和职责

  1. 收集、处理、执行统计分析
  2. 可视化交流
  3. 数学、统计和机器学习
  4. Excel,电子表格
  5. 数据库系统:SQL 和 NoSQL

3.数据架构师

“你不能在薄弱的基础上建造伟大的建筑。如果你要有一个强大的上层建筑,你必须有一个坚实的基础。”~戈登·b·欣克利

数据架构是模型、策略、规则或标准的结构,用于管理收集的数据,以及如何在数据系统和组织中存储、安排、集成和使用这些数据。

在这种情况下,数据架构师的角色包括设计、创建、部署和管理组织的数据架构。

数据架构师是企业的关键,因为他们的角色是处理大量数据——是的,大数据!数据架构师与云平台、数据仓库、数据库架构、数据集中化密切合作,并确保不同来源的完整性。

首选技能

SQL,NoSQL,XML,Hive,Pig,Hadoop,Spark

角色和职责

  1. 创建数据管理蓝图
  2. 集成、集中、保护和维护数据源
  3. 数据库
  4. 数据建模
  5. 系统开发
  6. 深入了解数据库架构
  7. 开发数据管道
  8. 提取、转换、加载、商务智能工具

4.数据库管理员

数据库管理员的工作职责是不言自明的——他们负责企业所有数据库的正常运行,并根据公司员工的要求授予或撤销其服务。他们还负责数据库备份和恢复。

如何成为一名数据库管理员?
数据库管理员的一些必备技能和才能包括数据库备份和恢复、数据安全、数据建模和设计等。对于数据库管理员来说,擅长灾难管理当然是一个额外的收获。

首选技能

SQL、Python、Java、Ruby on Rails、XML、C#

角色和职责

  1. 数据库应随时可供所有相关用户使用
  2. 数据库保持安全并正常运行
  3. 数据建模和设计
  4. 灾难管理
  5. 分布式计算(Hadoop)
  6. ERP 和商业知识
  7. 数据库系统:SQL 和 NoSQL

5.数据工程师

数据工程师实施、测试并保存记录数据流和设计的基础设施附加信息。实际上,一个数据工程师的职位可能会融合在一个人身上,这个人具有一系列非常相近的能力:ETL、管道。

数据工程通常包括数据设计、构建和数据系统的安装,作为他们职责的一部分。数据工程师在数据团队中推动机器学习和人工智能分析,包括数据采集、数据转换、数据建模以及更多围绕数据处理的工作。

首选技能

SQL,NoSQL,Hive,Pig,Matlab,SAS,Python,Java,Ruby,C++,Perl

角色和职责

  1. 开发、构建、测试、维护数据架构师
  2. 数据 API
  3. 数据建模和 ETL 工具
  4. 数据仓库技术
  5. 数据库系统:SQL 和 NoSQL

6。数据记者

就我的理解而言,数据记者的角色主要围绕着通过将数据放在正确的环境中来理解数据输出。他们还负责阐明业务问题,并在引人注目的故事中塑造分析结果。

虽然要求有编码和统计经验,数据记者应该能够向利益相关者提出想法,并代表数据团队与那些不熟悉统计的人打交道。

首选技能

SQL,Python,R,Scala,Carto,D3,QGIS,Tableau

角色和职责

  1. 为数据驱动的故事产生想法
  2. 将数据的开发和可视化概念化
  3. 报告和分析数据,以描述一系列平台上令人信服的故事
  4. 在编辑会议上代表数据团队和新闻团队

7。数据科学家

假设你不打算成为独角兽,数据科学家负责使用机器学习和数据挖掘技术解决业务任务。如果这太模糊,可以通过进一步的模型训练和评估将角色缩小到数据准备和清理。

通过推断和共享隐含的数据见解,数据科学家可以帮助企业在数据的帮助下解决棘手的问题。将数据科学与数据建模、统计、分析和数学技能相结合,以及商业敏锐度,数据科学家发现主要问题的解决方案,帮助企业成为可靠的数据科学家。

首选技能

r,SAS,Python,MATLAB,SQL,NoSQL,Hive,Pig,Hadoop,Spark

角色和职责

  1. 清理和组织数据
  2. 预测建模
  3. 讲故事和视觉化
  4. 数学、统计和机器学习
  5. 分布式计算

8。数据分析经理

数据分析经理引导数据科学团队的方向,并确保设置正确的优先级。这个人将多样化技术中的强大技术技能与管理团队所需的社交技能结合起来。

首选技能

SQL,Python,R,SAS,Matlab,Java,NoSQL,Pig,Hive,Hadoop

角色和职责

  1. 管理分析师和数据科学家团队
  2. 为数据向导欢呼,解决挑战,并跟踪进展
  3. 领导力和项目管理
  4. 数据挖掘和预测建模
  5. 数据库管理系统:SQL 和 NoSQL
  6. 人际沟通

9.机器学习工程师

机器学习工程师通过确定使用哪个模型以及每个模型应该使用什么数据来检查结合软件工程和建模技能的任务。

概率统计也是机器学习工程师的强项。机器学习工程师的日常职责是训练、监控和维护模型。

首选技能

r,Python,Scala,Julia,Java

角色和职责

  1. 设计和开发机器学习和深度学习系统
  2. 运行机器学习测试和实验
  3. 实现适当的 ML 算法
  4. 进行统计分析
  5. 培训和再培训数据和系统
  6. 承担机器学习实验和测试
  7. 基于业务需求开发深度学习系统
  8. 最后实现合适的 AI/ML 算法

10.统计员

这一切都始于数据及其洞察力的历史领导者——统计学家。

统计学家在统计理论和方法方面的深厚背景,逻辑和以统计为导向的思维模式使他们能够收获数据,并将其转化为有用的信息和知识。

统计学家可以处理各种数据,并不断探索还能做什么。由于他们的定量背景,2020 年的统计学家可以快速掌握新技术,提高他们的智力。统计学家带来了“数学魔力”,正是统计学家的洞察力可以从根本上改变业务和决策。

首选技能

r,SAS,SPSS,Perl,Matlab,Stata,Python,Pig,Hive,SQL,Spark

角色和职责

  1. 收集、分析和解释数据
  2. 进行定性和定量数据分析
  3. 统计理论和方法
  4. 数据挖掘和机器学习
  5. 云工具:AWS,谷歌云,Azure
  6. 分布式计算(Hadoop)
  7. 数据库系统— SQL 和 NoSQL

虽然上述职业和角色只是在查看不同的数据科学职位发布时对企业期望的一种解释,但我们确实揭示了当今市场上可用的不同数据科学职位。与此同时,不要忘记保持您的数据科学技能与时俱进。

这就是我的博客的结尾。感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在您的数据之旅中,您期待探索哪些数据角色?

数据帐篷快乐!

免责声明:本文表达的观点仅代表我个人,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。

数据科学十大时事通讯

原文:https://towardsdatascience.com/top-10-newsletters-in-data-science-7b8942f1530e?source=collection_archive---------16-----------------------

你认为报纸和时事通讯哪个先出现?

来源: Unsplash

我为什么要问?不是为了确定哪个更好,而是为了强调简讯是最古老的和最新的知识传播媒介。

时事通讯起源于古罗马,最初是为一群人提供的手写信息,后来转变成面向更广泛受众的报纸。

为特定利益群体管理知识的文化在线下和线上媒体中仍然很受欢迎——无论是通过报纸的周日杂志还是免费的周日版。

报纸和时事通讯的一个共同点是,它能帮助你适应一天的工作。它用新鲜的想法触发头脑,此外,阅读的行为有助于你集中注意力。

作为数据领域的专业人士,我们的工作要求我们不仅要了解生态系统中正在发生的事情,还要不断向我们的知识库添加新的工具和技术。

此外,吸引我们的不仅仅是尖端人工智能技术的发明,还有人类商业和生活中的应用,同意吗?

那么,在哪里可以找到这样的信息呢?🤔

尤其是现在— 信息过载的年代?好吧,这就是时事通讯帮助我们的地方!

订阅数据科学简讯,每天或每周将精选信息发送到您的收件箱,这是一个很好的起点。为了缩小你的搜索范围,这里有一个十大时事通讯的列表。

附言如果你坚持到最后,我们会有两个惊喜!🤩

在今天的新闻中

TLDR

《TLDR》是一份每日时事通讯,因其字节大小的技术、科学和编码信息而广受欢迎。

由技术爱好者李丹管理,这份时事通讯是任何数据科学爱好者的必读之作。李将时事通讯分为如下几个清晰的部分:

  • 每日更新
  • 大型科技和创业公司
  • 科学和未来技术
  • 程序设计和数据科学

这篇时事通讯最好的部分是在每个故事链接下面给出的简明摘要。查看最新一期这里订阅这里

CB insight

这份简讯可以作为您获取以下所有最新消息的电子邮件:

  • 技术趋势
  • 风险资本
  • 创业公司

…所有这些都有强大的数据点、研究和合理的趋势图作为后盾。他们的网站上充满了疯狂的评论,所以去看看,并在这里订阅。

数据中的一周

如果您想了解全球各地发生的最佳数据事件,也想享受参加这些讲座的折扣,本新闻通讯将为您提供有关数据和技术新动态的所有有趣新闻。

它是由 ODI(开放数据倡议)策划的,ODI 于 2012 年由 web 和 AI 的发明者蒂姆·伯纳斯·李爵士奈杰尔·沙德博尔特爵士发起,旨在向所有人展示开放数据的价值。点击这里可以订阅。

来源:数据中的 T he 周截图情人节版

内部数据科学

数据科学综述

这篇时事通讯中友好的第一人称的声音让读者感觉好像是特里斯坦·汉迪在亲自和我们讨论本周的热门数据博客文章。这绝对是我们的最爱之一🧡订阅简讯这里

点击查看他的 2019 年前 20 篇文章综述。

来源:数据科学综述时事通讯的片段

重要

这篇时事通讯有一个有趣的格式,有助于揭开人工智能的神秘面纱。这封信的作者杰克·克拉克(Jack Clark)也是 open . ai(open . ai)的主管,他的写作风格非常自然。“为什么那很重要”部分给出了对版本中每一件作品的理解和作者的观点。

最有趣的部分是简讯的最后一部分,一个科技故事,这是一个有趣的故事,由科技和人工智能的一些相关主题编织而成。查看其档案部分,并在此订阅。

布丁

如果不添加一个好的数据可视化时事通讯,我们的列表将是不完整的!

让这份简讯脱颖而出的是,它的每一版都是一个有趣的数据故事,具有美丽而强大的可视化效果。他们称这些故事为视觉散文。查看到目前为止创作的所有视觉散文这里订阅信这里

来源:布丁的数据可视化故事之一。

新技术和资源

数据科学周刊

这份时事通讯充满了新的知识。它包含数据科学领域的有用文章、视频、指南和工作。对于刚接触数据生态系统并希望了解更多信息的人来说,这篇新闻简报是一个很好的起点。订阅它这里

P . S .。他们为有抱负的数据科学家提供了一些非常有用的资源,帮助他们踏上征程。点击查看它们。

数据是复数

每周杰里米·辛格都会在你的收件箱里发送一些最有趣的公开数据集,让你大吃一惊。他们一定会提示你内心的数据分析师,从他的列表里挑一个,自己去分析。你可以在这里订阅时事通讯。

点击这里或者你也可以查看其 GitHub repo 的所有存档问题这里来访问迄今为止精选的数据集的完整列表。

数据药剂

这份时事通讯是每周一次的对数据世界的学习和见解,内容简洁,不太多。它包含以下几个部分:

  • 工具和技术
  • 数据即
  • 会议和活动

查看档案这里点击这里订阅。

奥莱利数据通讯

是的,这是同一个 O'Reilly,它出版了数据科学领域的书籍,他们的时事通讯也同样不错,内容丰富。他们也有单独的人工智能时事通讯,只关注人工智能新闻和资源。您可以在此查看样本简讯并在此订阅

来源:奥赖利数据通讯的一个片段

现在是揭开惊喜的时候了!🥁

特别提到我们一直以来最喜欢的时事通讯等等,但是为什么xkcd

这两个简讯几乎总能让您喜笑颜开,并促使您从不同的角度进行思考,这有时是应对我们富有创造力和多功能的数据科学领域的挑战所必需的。

这篇文章最初发表在 Atlan 的人类数据上。

来源:xkcd 的机器学习验证码

参考文献

  1. 时事通讯、报纸和小册子
  2. 维基百科时事通讯

每个人都必须知道的 10 大 OpenCV 函数

原文:https://towardsdatascience.com/top-10-opencv-functions-everyone-has-to-know-about-945f33de8f6f?source=collection_archive---------12-----------------------

我们来看一下 OpenCV 库,它同时用于计算机图形和视觉。

计算机视觉和计算机图形学现在真的很受欢迎,因为它们与人工智能有很大的联系,它们的主要共同点是它们使用同一个库 OpenCV 以便从数字图像或视频(CV)或生成图像(CG)中执行高级理解。

这就是为什么今天我们要来看看这个为计算机科学的这些大领域提供燃料的同一个库,看看有哪些功能可以让你受益匪浅!

原创图片由创作

在我们进入 OpenCV 的强大功能之前,让我们看一下计算机视觉、图形和 OpenCV 的定义,以便更好地理解我们在这里做什么。

计算机视觉

计算机视觉是一个跨学科领域,研究如何让计算机获得对数字图像或视频的高级理解。从工程的角度来看,它寻求将人类视觉系统可以完成的任务自动化。

电脑图形图像

计算机图形学是计算机科学的一个分支,它研究在计算机的帮助下生成图像。今天,计算机图形是数码摄影、电影、视频游戏、手机和计算机显示器以及许多专业应用的核心技术。

OpenCV

OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库。OpenCV 旨在为计算机视觉应用提供一个公共基础设施,并加速机器感知在商业产品中的应用。

该库提供了处理和分析图像内容的工具,包括识别数字照片中的对象(如人脸和人物、文本等。),跟踪物体的运动,转换图像,应用机器学习方法,识别各种图像中的共同元素。

一旦我们解决了这个问题,我们就可以从我个人选择的 10 大功能开始。(用 Python 编写的函数代码)

imread/imshow

这个功能必须是第一位的,因为它是用图像开始你的项目的关键。从这个函数的名字就可以猜到,它加载了一个 BGR(蓝绿色红色)格式的图像。

import cv2
import matplotlib.pyplot as plotimage = cv2.imread('data.png') #load image
plot.imshow(image) #show image

CVT 颜色

加载图像后,还可以使用 cvtColor 中的不同标志将其转换为不同的配色方案。

cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

下面是 cvtColor 的一些其他标志:COLOR_BGR2GRAY、COLOR_BGR2HSV、COLOR_BGR2YUV 等。
这是双向的,所以比如 COLOR_YUV2BGR 也是可以的。

调整大小

有时你只需要一个不同大小的图片,这就是你需要的功能。

cv2.resize(image, dimension, interpolation = cv2.INTER_AREA)

它获取原始图像,并使用 dimension 创建一个新图像。尺寸定义为:

dimension = (width, height)

插值是它对图片重新采样的方式,在我的具体例子中,它使用INTER _ AREA——使用像素区域关系重新采样,还有更多类似的方式

  1. INTER_NEAREST: 最近邻插值
  2. INTER_LINEAR: 双线性插值
  3. INTER _ CUBIC:4×4 像素邻域上的双三次插值
  4. INTER _ LANCZOS 4:8×8 邻域上的 lanc zos 插值

拆分/合并

每张图片有 3 个通道,如果我们想将它们分割成单独的图像,我们可以使用分割功能。

(channel_b, channel_g, channel_r) = cv2.split(img)

如果图像是 BGR 格式,它会将每个通道分成你定义的三个变量。

在你已经分割了频道并且你想要将它们合并在一起,你使用合并

cv2.merge(channel_b, channel_g, channel_r)

vconcat/hconcat

使用vconcat()hconcat()纵向和横向连接(组合)图像。v表示垂直,h表示水平。

cv2**.**vconcat([image1, image2])
cv2**.h**concat([image1, image2])

1/0

如果您想要在所有三维空间用 1 或 0 填充图像(Mat ),因为 Mat 需要彩色图像的 3 个层/维度。

size = 200, 200, 3
m = np.zeros(size, dtype=np.uint8)
n = np.ones(size, dtype=np.uint8)

作为一个额外的功能,我想在这里补充一点,那就是转置功能。

移项

如果我们有一个要转置的定义好的矩阵 mat,我们要做的就是对它使用这个函数:

import numpy as np  
mat = np.array([[1, 2, 3], [4, 5, 6]])  
mat_transpose = mat.transpose()
print(mat_tranpose)

我们得到输出:

[[1 4]  
 [2 5]  
 [3 6]]
#original input
[[1, 2, 3]
 [4, 5, 6]]

我们完了!

后续步骤

这主要是针对初学者的,但是下一次我们将看看 OpenCV 更高级的特性。

在此之前, 跟我 求更!😎

感谢阅读!

查看我的其他文章并关注我的媒体

当我发布一篇新文章时,请在 Twitter 上关注我

了解数据科学的十大热门 GitHub 存储库。

原文:https://towardsdatascience.com/top-10-popular-github-repositories-to-learn-about-data-science-4acc7b99c44?source=collection_archive---------7-----------------------

数据科学

以下是 GitHub 上一些关于数据科学的最佳资源。

照片由吴镇男·大卫Unsplash 拍摄

itHub 是一个来自世界各地的程序员共享代码的平台。这是一个协作、学习、培养技能等等的地方。但是 GitHub 不仅仅是一个分享代码的地方,它还是一个分享资源的地方。

Github 中的数据科学

自创建以来,GitHub 一直被认为是软件工程师的居所。但随着数据呈指数级增长,Python 和 JavaScript 等语言变得流行,GitHub 已经成为数据科学爱好者和专业人士的巨大社区。

随之而来的是,出现了大量主题为“机器学习”、“自然语言处理”、“计算机视觉”的知识库,最突出的是 python 库“Scikit-learn”和“TensorFlow”,这是两种流行的用于数据科学的 Python 工具。GitHub 中数据科学的兴起催生了许多免费资源,帮助成千上万的数据爱好者了解数据科学。

DIY 数据科学

这些免费资源隐藏在金色的 GitHub 仓库中,收集了大量与数据科学相关的资源。任何你能想到的,都在那里。寻找学习数据科学的学院、在线课程(MOOC)、网站、数据集、时事通讯、播客、书籍等。

因此,与其为互联网上过多的在线课程付费,为什么不去 GitHub 创建自己的数据科学课程呢?关于白手起家的数据科学家如何从对编程一无所知到在大型科技公司工作的故事数不胜数。那个人也可以是你!

所以在这篇文章中,我将与你分享这些资源。不分先后听。现在就来看看下面吧!

目录

  1. 一般
  2. 路线图
  3. 备忘单
  4. 博客
  5. 编程;编排

1.牛逼的数据科学

作者:法提赫·阿克图尔克侯赛因·梅尔特 & 奥斯曼·温古尔雷杰普·埃罗尔

这本书无疑是关于数据科学的最佳资源集。它几乎涵盖了学习数据科学的所有方面,从解释为什么学习数据科学的动机方面开始。然后是视觉信息图,帮助初学者理解数据科学的整个途径。剩下的就是数据集、博客、播客、书籍、比赛等资源。

这份报告对那些数据科学新手非常有帮助,肯定有助于缓解学习曲线。

2.数据-科学家-路线图

作者: MrMimic

数据科学路线图 Swami Chandrasekaran

这个报告的灵感来自 Swami Chandrasekaran 的数据科学技能路线图。它包含成为一名数据科学家所需的全部内容,从基础知识、统计学、编程到机器学习、数据可视化和数据管理。还有一个存放数据科学家在工作中使用的工具的文件夹。

如果你想了解成为数据科学家的历程,这份报告正适合你。

3.数据科学最佳资源

作者: Tirthajyoti Sarkar

正如 readme.md 中提到的,这个 repo 是一个精心策划的资源和链接(关于软件、平台、语言、技术等主题)的宝库。)与数据科学相关的,都在一个地方。它有各种各样的资源——人工智能文章、亚马逊网络服务、博客、书籍、文章、MOOCs、可视化、神经网络、云计算、REST API、时间序列等等。

这个回购是为那些寻找与数据科学相关的各种主题的有趣文章的人准备的。

4.数据科学备忘单

由: Asif Bhat

正如 repo 的名字所暗示的,这个 repo 包含了所有数据科学的备忘单。备忘单对于初学者来说是非常好的,可以让他们以直观的方式进入一个主题,并对他们正在钻研的主题有所了解。这些小抄包括 AI、大数据、数据角力、Git、面试问题、机器学习、Numpy 等主题。

这是为那些寻找数据科学小抄的人准备的。

5. Ds-cheatsheets

作者:法维奥·安德烈·巴斯克斯

这是另一个回购,其中包含大量数据科学备忘单。与之前的回购相比,这是一个较小的列表,但在您的数据科学资源库中有更多可用的备忘单也无妨。然而,这个回购有一些有趣的备忘单,涉及商业科学、R、SQL、数据可视化等主题。

这个回购是为每个人谁是寻找数据科学的小抄。

6.数据科学资源

作者: jb

这个回购开始时是创作者的资源宝库,但在意识到数据科学变得如此流行后,它最终成为数据科学主题和高质量资源的精选列表。

最初的目标是涵盖数据科学的技术方面,如编程、数据管道和工具以及机器学习。但是,由于数据科学正在世界各地的企业中实施,因此也涵盖了数据科学团队、用例以及职业道路等主题。

这个回购是为那些希望学习数据科学和利用给定的职业资源规划未来职业生涯的人准备的。

7.数据科学博客

作者: Artem Golubin

这个报告包含了大量的数据科学博客,供你了解数据科学的一切。为了便于导航,列表按字母顺序排列,链接就在博客标题的旁边。数据科学博客是解释、建议、技巧和诀窍以及端到端教程和项目的绝佳选择。一些著名的博客包括 Analytics Vidhya、Data Science Dojo Blog、Drew Conway、FastML 等。

对于那些希望发现数据科学内容的伟大博客的人,请查看此回购。

8.免费数据科学书籍

作者:吴语

本报告包含学习数据科学和大数据的免费资源。它首先介绍什么是数据科学,然后是数据处理和数据分析、统计学、机器学习,最后是数据科学的应用。这个回购的一个好处是,每个资源旁边都有初级、中级和资深标签,确保你根据自己的水平学习。

这个回购是为那些寻找免费数据科学资源和数据科学速成班。

9。 自由数据科学学习

作者:学数据 Sci

这个回购包含一个免费数据科学书籍的列表。学习数据科学的书籍是令人惊奇的,因为你在做“如何做”之前学习它们为什么,这对于像数据科学这样复杂的主题是很重要的。每个链接都会把你带到这些书的 pdf 文件,你可以开始免费阅读它们。

这个回购是为那些寻找关于数据科学的免费书籍。

10.数据-科学-维基

作者:伦纳德

这个报告是 DevOps 指南、脚本和教程的列表。有一个类别是从初学者到高级水平的数据科学、Python 编程、Linux 教程、git、代码编辑器和机器学习。这些教程以文章、youtube 视频、在线课程等形式出现。

这个回购更多的是面向希望学习如何编码的数据科学爱好者。

行动计划

西蒙·米加杰在 Unsplash 上拍摄的照片

itHub 存储库就像是宝贵资源的宝库,可以启动您的数据科学之旅。有了上面大量的免费资源,你就可以用自己的课程学习数据科学了。

有了这些回复,你可以通过备忘单更多地了解什么是数据科学,找到我们的哪些编程语言是重要的,找到你最喜欢的 YouTuber,关注分享丰富帖子的 Twitter 帐户,找到一本为你提供知识并培养你的技能的书。

所以,在你的浏览器中把这些资源加入书签,或者把它们保存在你的笔记中,当你需要它们的时候就可以参考它们。或者像上面的数据科学家一样,制定自己学习数据科学的路线图。

保持动力

您还可以创建自己的 GitHub repo 和 commit 网站、书籍和教程,帮助您了解这个多学科领域的更多信息。学习过程中的一个重要部分是记录你的进步,因为这会让你更有动力和灵感。同样,参加像#100DaysofMlcode 这样的挑战也能让你保持热情。

投资组合

这会让你有一个作品集,你可以向你周围的人展示,并增加你的工作前景。在这个文件夹中,你可以展示你用上述资源完成的项目,并突出你的技能。

所以,现在就在 GitHub 上记录下你的进步,并与世界分享吧!

感谢你阅读这篇文章,我希望它对你有用。注意安全。

如果您对学习数据科学感兴趣,请查看“超学习”数据科学系列!

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)

查看其他文章,了解更多关于数据科学的知识。

[## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客

面向数据爱好者的最佳数据科学播客列表。

towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

其他联系方式:

注意安全!

作为数据科学家,你需要学习 Python 的 7 大理由

原文:https://towardsdatascience.com/top-10-reasons-why-you-need-to-learn-python-as-a-data-scientist-e3d26539ec00?source=collection_archive---------6-----------------------

Python 给数据科学家带来的好处

Unsplash 上由 Hitesh Choudhary 拍摄的照片

作为一名新的数据科学家,你知道你的道路从你需要学习的编程语言开始。在所有可供选择的语言中,Python 是最受所有数据科学家欢迎的语言。在这篇文章中,我将讲述 Python 流行背后的 7 个原因,这将帮助你理解为什么程序员喜欢它。

1.简单

Python 是开始您的旅程最简单的语言之一。此外,它的简单性不会限制您的功能可能性。

是什么赋予 Python 如此的灵活性?有多种因素:

  • Python 是一种免费的开源语言
  • 这是一个高级编程
  • Python 被解读
  • 它有一个庞大的社区

另外,Python 写起来速度很快。只需比较这两个用 Java 和 Python 编写的例子:

Java vs Python 对比

这个简单的例子展示了如何从 Python 中获益。您只需要编写 1 行代码,而不是输入 3 行代码。想象一下,在更复杂的任务中你可以节省多少时间。

1.可量测性

Python 是一种扩展速度非常快的编程语言。在所有可用的语言中,Python 是伸缩性的领导者。这意味着 Python 有越来越多的可能性。

Python 的灵活性对于应用程序开发中的任何问题都非常有用

随着新的更新即将到来,任何问题都可以很容易地解决。说 Python 为新手提供了最好的选择,因为有很多方法来决定同一个问题。

即使你有一个懂 c++设计模式的非 Python 程序员团队,就开发和验证代码正确性所需的时间而言,Python 也更适合他们。

它发生得很快,因为你没有花时间去寻找内存泄漏,编译或分段错误。

2.库和框架

由于它的流行,Python 有数百个不同的库和框架,这对你的开发过程是一个很好的补充。它们节省了大量手动时间,可以轻松替换整个解决方案。

作为一名数据科学家,你会发现许多这些库将专注于数据分析和机器学习。此外,还有对大数据的巨大支持。我认为应该有一个强有力的理由来解释为什么你需要把 Python 作为你的第一语言。

下面给出了其中的一些库:

这是伟大的数据分析和数据处理。Pandas 提供数据操作控制。

NumPy 是一个免费的数值计算库。它提供了高级数学函数和数据操作。

这个图书馆与科学和技术计算有关。SciPy 可用于数据优化和修改、代数、特殊函数等。

3.Web 开发

为了让你的开发过程尽可能的简单,学习 Python 吧。有很多 Django 和 Flask 库和框架可以让你的编码更有效率并加快你的工作。

如果你比较 PHP 和 Python,你会发现同样的任务可以通过 PHP 在几个小时的代码内创建。但是使用 Python,只需要几分钟。看看 Reddit 网站就知道了——它是用 Python 创建的。

以下是 Pythons 开发的全栈框架:

  • 姜戈
  • 金字塔
  • Web2py
  • 涡轮齿轮

以下是 Pythons 开发的微框架:

  • 瓶子
  • 樱桃派
  • 紧抱

此外,您可能需要考虑一个替代框架:

  • 龙卷风

4.巨大的社区

正如我之前提到的,Python 有一个强大的社区。你可能认为这不应该是你选择 Python 的主要原因之一。但事实恰恰相反。

如果你得不到其他专家的支持,你的学习之路会很艰难。这就是为什么你应该知道这不会发生在你的 Python 学习过程中。

以下是一些 Python 社区的列表:

官方 Python 有用链接:

官方教程:http://docs.python.org/tutorial/
语言参考:http://docs.python.org/reference/

每日新闻和互动

巨蟒日报:http://www.pythonware.com/daily/
星球巨蟒:http://planet.python.org/

视频教程:http://showmedo.com/videotutorials/python

事实:http://www.ibiblio.org/swaroopch/byteofpython/read/

团体

Irc 节点:【http://www.python.org/community/irc/】T2
stack overflow:http://stackoverflow.com/questions/tagged/python?排序=最新的

5.自动化

使用 PYunit 这样的 Python 自动化框架有很多好处:

  • 不需要安装额外的模块。它们和盒子一起送来的
  • 即使你没有 Python 背景,你也会发现使用 Unittest 非常舒服。它是衍生的,工作原理类似于其他的 xUnit 框架。
  • 你可以用一种更直接的方式来运行单个实验。你应该简单地在终端上指出名字。输出也很紧凑,这使得该结构在执行测试用例时具有适应性。
  • 测试报告在几毫秒内生成。

用于测试自动化的 5 个 Python 框架:

  1. 机器人框架

2.单元测试

3。Pytest

4。行为

5。生菜

6.就业和增长

Python 是一种独特的语言,具有强大的增长能力,并为数据科学家提供了多种职业机会。如果你学习 Python,你可以考虑将来可能想转行的多个额外工作:

  • Python 开发者
  • 生产部经理
  • 教师
  • 财务顾问
  • 数据记者

7.薪水

如果你正在寻找高薪机会,Python 为你提供了大量选择。看看这些数据:

2020 年各州 Python 开发人员的平均工资

2020 年各州 Python 开发人员的平均工资 Daxx

结论

Python 是任何数据科学家的基础。选择这种功能强大的编程语言有很多原因,所以主要原因是什么取决于你。你一定要考虑 Python,因为它的可能性和正在进行的改进,这将帮助你构建惊人的产品和帮助企业。

拥有这 10 种资源,在 2023 年成为数据科学家

原文:https://towardsdatascience.com/top-10-resources-to-become-a-data-scientist-in-2020-99a315194701?source=collection_archive---------1-----------------------

无障碍学习,图片来自 Pixabaysilviarita

来自数据科学家的行动计划

我是一名机械工程师。我的职业生涯始于钢铁行业的一份核心工作。

穿着沉重的钢制橡胶靴,戴着塑料头盔,在大型高炉和轧钢厂周围冒险。至少可以说是人为的安全措施,因为我知道如果发生不幸的事情,什么也救不了我。也许跑鞋会有帮助。至于头盔。我只能说钢水的燃烧温度是 1370 摄氏度。

由于我不断的恐惧,我意识到这份工作不适合我,所以我把在 2011 年左右进入分析和数据科学领域作为我的目标。从那时起,MOOCs 就成了我学习新事物的首选,我最终选择了很多。好的和坏的。

现在 2023 年,数据科学领域变化如此之快,学习数据科学的资源并不短缺。但这也经常给初学者带来一个问题,即从哪里开始学习,学什么?互联网上有很多很好的资源,但这意味着也有很多不好的资源。

很多选择可能经常导致停滞不前,因为焦虑对学习没有好处。

在他的书《选择的悖论——为什么越多越少》中,施瓦茨认为,消除消费者的选择可以大大减少购物者的焦虑。数据科学课程也是如此。

本文旨在为迷失的灵魂提供建议,让他们可以选择从哪里开始他们的数据科学之旅。

1) Python 3 编程专门化

Python 2.7 的“再见世界”!!!

首先,你需要一门编程语言。密歇根大学的这个专业是关于学习使用 Python 和自己创造东西的。

您将学习编程基础,如变量、条件和循环,并接触一些中间材料,如关键字参数、列表理解、lambda 表达式和类继承。

在进行这个专门化的过程中,你可能也想看看我的 Python Shorts 帖子。

[## 蟒蛇短裤

阅读关于 Python 的文章,了解数据科学。共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com/tagged/python-shorts)

2)使用 Python 的应用数据科学

先做,后理解

在完全理解机器学习之前,我们需要先体验一下。

这个关于 Python 应用数据科学的专业介绍了许多你应该知道的现代机器学习方法。不是彻底的打磨,但你会得到工具来建立你的模型。

这种基于技能的专业化面向具有基本 python 或编程背景,并希望通过流行的 python 工具包(如 pandas、matplotlib、scikit-learn、nltk 和 networkx)应用统计、机器学习、信息可视化、文本分析和社交网络分析技术来深入了解其数据的学习者。

在学习本专业的过程中,您可能还想看看我的一些帖子:

[## 数据科学家的最小熊猫子集

您需要的所有熊猫功能

towardsdatascience.com](/minimal-pandas-subset-for-data-scientists-6355059629ae) [## Python 的一个线性图形创建库,带有汉斯·罗斯林风格的动画

动画,单线图。它拥有一切

towardsdatascience.com](/pythons-one-liner-graph-creation-library-with-animations-hans-rosling-style-f2cb50490396) [## 针对每个数据集的 3 种出色的可视化技术

同时学习一些关于足球的知识

towardsdatascience.com](/3-awesome-visualization-techniques-for-every-dataset-9737eecacbe8)

3)机器学习理论和基础

完成上述课程后,你将获得我称之为“初学者”的地位

恭喜你。!!。你懂东西;你知道如何实现事情

你很有用

然而,你并没有完全理解所有这些模型背后的数学和计算。

你需要理解clf.fit背后的含义。该是面对现实的时候了。在你理解模型背后的数学之前,没人会把你当回事。

如果你不理解它,你就不能改进它

游戏改变者机器学习专精来了。它包含了许多机器学习算法背后的数学。

我将把这个专精称为 一个你必须接受的专精 作为这个专精的前一个版本激励我进入这个领域,吴恩达是一个伟大的导师。还有,这是我刚开始的时候自己上的第一门课。

这种专门化几乎什么都有——回归、分类、异常检测、推荐系统、神经网络,还有很多很棒的建议。

在学习本课程的过程中,您可能还想看看我的一些帖子:

[## 《搭车人特征提取指南》

对特征工程技术的详尽研究

towardsdatascience.com](/the-hitchhikers-guide-to-feature-extraction-b4c157e96631) [## 每个数据科学家都必须知道的 5 个分类评估指标

以及具体什么时候使用它们?

towardsdatascience.com](/the-5-classification-evaluation-metrics-you-must-know-aa97784ff226) [## 每个数据科学家都应该知道的 5 种特征选择算法

额外收获:是什么让一个优秀的足球运动员变得伟大?

towardsdatascience.com](/the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2) [## 3 个决策树分裂标准背后的简单数学

🌀理解分割标准

towardsdatascience.com](/the-simple-math-behind-3-decision-tree-splitting-criterions-85d4de2a75fe)

4)学习统计推断

"事实是顽固的东西,但统计数字是易驾驭的."
――马克·吐温

mine etinkaya-run del 教授这门关于推断统计学的课程。没有比这更简单的了。

她是一个很好的老师,并且很好地解释了统计推断的基础——这是一门必修课。

您将学习假设检验、置信区间和数字和分类数据的统计推断方法。

在学习本专业的过程中,您可能还想看看我的一些帖子:

[## 为数据科学家简单解释 p 值

没有统计学家的自命不凡和数据科学家的冷静

towardsdatascience.com](/p-value-explained-simply-for-data-scientists-4c0cd7044f14) [## 为数据科学家简单解释置信区间

没有沉重的术语

towardsdatascience.com](/confidence-intervals-explained-simply-for-data-scientists-8354a6e2266b)

5)学习数据科学的 SQL 基础知识

SQL 是所有数据 ETL 的核心

虽然我们觉得通过创建模型和提出不同的假设更有成就,但数据管理的作用不能低估。

当谈到 ETL 和数据准备任务时,SQL 无处不在,每个人都应该知道一点,至少是有用的。

SQL 也已经成为使用 Apache Spark 等大数据工具的事实标准。这位来自加州大学戴维斯分校的SQL 专家将教你关于 SQL 以及如何使用 SQL 进行分布式计算。

从课程网站:

通过四个难度逐渐增加的 SQL 项目和数据科学应用程序,您将涵盖 SQL 基础知识、数据争论、SQL 分析、AB 测试、使用 Apache Spark 的分布式计算等主题

在学习本专业的过程中,您可能还想看看我的一些帖子:

[## 艰难地学习 SQL

通过写它

towardsdatascience.com](/learning-sql-the-hard-way-4173f11b26f1) [## 使用 Spark 处理大数据的指南

不仅仅是介绍

towardsdatascience.com](/the-hitchhikers-guide-to-handle-big-data-using-spark-90b9be0fe89a) [## 在 PySpark 数据框架中添加新列的 5 种方法

并且,它们都是有用的

towardsdatascience.com](/5-ways-to-add-a-new-column-in-a-pyspark-dataframe-4e75c2fd8c08)

6)深度学习

深度学习是未来

Andrew NG 带着他的新深度学习专业化再次归来。这是纯金的。

吴恩达在用通俗易懂的方式解释复杂的概念方面已经达到了炉火纯青的地步。他所遵循的术语不同于网上的所有其他教程和课程,我希望它能流行起来,因为它对理解所有的基本概念非常有帮助。

从专业化网站:

学习深度学习的基础,了解如何构建神经网络,学习如何领导成功的机器学习项目。您将了解卷积网络、RNNs、LSTM、Adam、Dropout、BatchNorm、Xavier/He 初始化等等。你将从事医疗保健、自动驾驶、手语阅读、音乐生成和自然语言处理的案例研究。

在试图理解本课程中的一些材料时,你可能想看看我的一些帖子。

[## GANs 的端到端介绍

柠檬榨汁机

towardsdatascience.com](/an-end-to-end-introduction-to-gans-bf253f1fa52f) [## 使用深度学习方法的对象检测:端到端的理论观点

物体探测领域最有影响力的论文详解

towardsdatascience.com](/object-detection-using-deep-learning-approaches-an-end-to-end-theoretical-perspective-4ca27eee8a9a)

Pytorch

着火的蟒蛇

我通常从不提倡学习一种工具,但在这里我提倡。原因是它是不可思议的和严肃的,如果你理解 Pytorch,你将能够阅读许多最近的研究论文中的代码。Pytorch 已经成为从事深度学习的研究人员的默认编程语言,它只会为我们学习它付费。

学习 Pytorch 的一种结构化方法是通过参加 Pytorch 的深度神经网络课程。从课程网站:

课程将从 Pytorch 的张量和自动微分包开始。然后,每一节将涵盖不同的模型,从基础开始,如线性回归,逻辑/softmax 回归。其次是前馈深度神经网络,不同激活函数的作用,归一化和漏失层。然后卷积神经网络和转移学习将被涵盖。最后,将介绍其他几种深度学习方法。

你也可以真正地看看你的这些帖子,在那里我试图解释如何使用 PyTorch。

[## 从喀拉斯到皮托尔彻

为什么?怎么会?没那么难。

towardsdatascience.com](/moving-from-keras-to-pytorch-f0d4fff4ce79) [## 面向数据科学家的 PyTorch 最完整指南

进行深度学习时需要的 PyTorch 的所有功能。从实验/研究中…

towardsdatascience.com](/minimal-pytorch-subset-for-deep-learning-for-data-scientists-8ccbd1ccba6b)

8)机器学习 AWS 入门

秘诀:重要的不是你知道什么,而是你表现出什么。

在构建一个伟大的机器学习系统时,有很多事情需要考虑。但是经常发生的是,作为数据科学家,我们只担心项目的某些部分。

但是我们有没有想过一旦有了模型,我们将如何部署它们呢?

我见过很多 ML 项目,其中很多注定要失败,因为他们从一开始就没有一套生产计划。

拥有一个好的平台,并了解该平台如何部署机器学习应用程序,将在现实世界中产生很大的影响。这个关于 AWS 的课程旨在实现机器学习应用,这正是它所承诺的。

本课程将教会你:

1.如何使用内置算法的 Amazon SageMaker 和 Jupyter Notebook 实例构建、训练和部署模型。

2.如何使用亚马逊人工智能服务构建智能应用程序,如亚马逊理解、亚马逊 Rekognition、亚马逊翻译等。

你也可以看看我的这篇文章,在这里我试着谈论应用并解释如何计划生产。

[## 如何为数据科学家使用简单的 Python 编写 Web 应用?

无需了解任何 web 框架,即可轻松将您的数据科学项目转换为酷炫的应用程序

towardsdatascience.com](/how-to-write-web-apps-using-simple-python-for-data-scientists-a227a1a01582) [## 如何使用 Amazon Free ec2 实例部署 Streamlit 应用程序?

10 分钟内将数据应用程序上传到网上

towardsdatascience.com](/how-to-deploy-a-streamlit-app-using-an-amazon-free-ec2-instance-416a41f69dc3) [## 通过这 5 个简单的步骤将您的机器学习模型投入生产

或者为什么机器学习项目会失败?

towardsdatascience.com](/take-your-machine-learning-models-to-production-with-these-5-simple-steps-35aa55e3a43c)

9)数据结构和算法

算法。是的,你需要它们。

算法和数据结构是数据科学不可或缺的一部分。虽然我们大多数数据科学家在学习时没有上过适当的算法课程,但它们仍然是必不可少的。

许多公司在招聘数据科学家的面试过程中会询问数据结构和算法。

它们将需要像你的数据科学面试一样的热情来破解,因此,你可能想要给一些时间来研究算法和数据结构以及算法问题。

我发现学习算法最好的资源之一是 UCSanDiego 在 Coursera 上的 算法特殊化。来自专业化网站:

你将学习解决各种计算问题的算法技术,并用你选择的编程语言实现大约 100 个算法编码问题。在算法方面,没有任何其他在线课程能为你提供你在下一次工作面试中可能面临的大量编程挑战。

你可能也想看看我的一些帖子,同时试图理解这个专业中的一些材料。

[## 数据科学家的 3 个编程概念

数学更少,代码更多

towardsdatascience.com](/three-programming-concepts-for-data-scientists-c264fc3b1de8) [## 面向数据科学家的链表简单介绍

或者说,什么是链表,为什么我需要了解它们?

towardsdatascience.com](/a-simple-introduction-of-linked-lists-for-data-scientists-a71f0eb31d87) [## 数据科学家的动态编程

DP 如何工作?

towardsdatascience.com](/dynamic-programming-for-data-scientists-bb7154b4298b) [## 在数据科学算法面试中处理树

不是那种树桩

towardsdatascience.com](/handling-trees-in-data-science-algorithmic-interview-ea14dd1b6236)

10.Coursera Plus 订阅

最后但并非最不重要的一点是,我建议你参加 Coursera+ 课程,它可以让你以一个全包的订阅价格无限制地学习 7000 多门世界级课程、实践项目和就业准备证书课程。

继续学习

将来我也会写更多初学者友好的帖子。在 关注我,或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系到我。

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

[## 通过我的推荐链接加入 Medium-Rahul Agarwal

作为一个媒体会员,你的会员费的一部分给了你所阅读的作家,你可以在…上看到所有的故事

mlwhiz.medium.com](https://mlwhiz.medium.com/membership)

数据科学家的十大技能

原文:https://towardsdatascience.com/top-10-skills-for-a-data-scientist-in-2020-2b8e6122a742?source=collection_archive---------0-----------------------

那会让你在数据部工作。

用加仑的咖啡清理收件箱,欢迎回到研磨!😀

寒假的时候,我列了一个我想写的故事的清单,这是我最兴奋的一个!因为我也努力学习一些数据科学的技能。作为数据领域的人,你最终会阅读和了解很多很多东西。

根据我的理解,数据科学总是关于组合最适合完成工作的工具。它是关于从数据中提取知识来回答一个特定的问题。对我来说,简单地说,数据科学是一种力量,它允许企业和利益相关者做出明智的决策,并用数据解决问题。

现在,不是每个技术专家都对其他技能充满热情,但她会对自己工作领域的技能感到兴奋。数据科学家的一些技能也是如此。随着我们在新的一年里为新的技术趋势和更重大的挑战做好准备,我们必须夯实我们的基础。

排名不分先后,让我们一起来了解一下 2020 年数据科学家的10 大技能!

1.概率与统计

数据科学是关于使用资本流程、算法或系统从数据中提取知识、见解并做出明智的决策。在这种情况下,进行推断、估计或预测是数据科学的重要组成部分。

借助于统计方法的概率有助于为进一步的分析作出估计。统计学主要依赖于概率论。简单来说,两者是交织在一起的。

数据科学的概率统计能做什么?

  1. 探索和了解更多关于数据的信息
  2. 确定两个变量之间可能存在的潜在关系或依赖关系
  3. 根据以前的数据趋势预测未来趋势或预测漂移
  4. 确定数据的模式或动机
  5. 发现数据中的异常

特别是对于数据驱动的公司,利益相关者依赖数据进行决策和数据模型的设计/评估,概率和统计是数据科学不可或缺的一部分。

2.多元微积分和线性代数

大多数机器学习,总是数据科学模型,是建立在几个预测器或未知变量的基础上的。多元微积分的知识对于建立机器学习模型是很重要的。以下是在数据科学领域工作时您可能会熟悉的一些数学主题:

  1. 导数和梯度
  2. 阶跃函数、Sigmoid 函数、Logit 函数、ReLU(校正线性单位)函数
  3. 成本函数(最重要)
  4. 功能绘图
  5. 函数的最小值和最大值
  6. 标量、矢量、矩阵和张量函数

摘要

数据科学线性代数:矩阵代数与特征值

数据科学的微积分:导数和梯度

从零开始梯度下降:从零开始实现神经网络

3.编程、软件包和软件

当然啦!数据科学本质上是关于编程的。数据科学编程技能汇集了将原始数据转化为可操作见解所需的所有基本技能。虽然编程语言的选择没有特定的规则,但是 Python 和 R 是最受欢迎的。

我不是一个对编程语言偏好或平台有宗教信仰的人。数据科学家选择一种编程语言来满足手头问题陈述的需要。然而,Python 似乎已经成为最接近数据科学通用语言的东西。

点击阅读更多关于十大数据科学 Python 库 的信息。

排名不分先后,以下是可供数据科学选择的编程语言和软件包列表:

  1. 计算机编程语言
  2. 稀有
  3. 结构化查询语言
  4. Java 语言(一种计算机语言,尤用于创建网站)
  5. 朱莉娅
  6. 斯卡拉
  7. 矩阵实验室
  8. TensorFlow(非常适合 Python 中的数据科学)

我不是在写你能用数据科学中的编程技能做什么😛

从这里往下的一切都是关于编码的。数据科学,没有熟悉的编码经验或知识,可能有点难。因此,我更喜欢先提高我的 Python 技能,阅读关于我将从事的项目的文献,然后开始构建代码。

4.数据争论

通常,企业获取或接收的数据还没有准备好进行建模。因此,理解并知道如何处理数据中的缺陷是非常必要的。

数据争论是你为进一步分析准备数据的过程;将原始数据从一种形式转换和映射到另一种形式,以便为洞察做好数据准备。对于数据角力,你基本上是获取数据,结合相关领域,然后清洗数据。

对于数据科学的数据争论,你能做什么?

  1. 通过从多个渠道收集数据,揭示数据中隐藏的深层情报
  2. 及时向业务和数据分析师提供可操作数据的非常准确的表示
  3. 减少处理时间、响应时间,以及收集和组织难以处理的数据并加以利用的时间
  4. 使数据科学家能够将更多精力放在数据分析上,而不是清理部分
  5. 将数据驱动的决策流程引向由准确数据支持的方向

5.数据库管理

对我来说,数据科学家是不同的人,是所有插孔的主人。他们必须知道数学、统计学、编程、数据管理、可视化,以及不是“全栈”数据科学家的东西。

正如我前面提到的,80%的工作是准备在行业环境中处理的数据。由于要处理大量的数据,数据科学家知道如何管理这些数据是至关重要的。

数据库管理本质上由一组可以编辑、索引和操作数据库的程序组成。DBMS 接受来自应用程序的数据请求,并指示操作系统提供特定的所需数据。在大型系统中,DBMS 帮助用户在任何给定的时间点存储和检索数据。

对于数据科学的数据库管理,您能做些什么?

  1. 定义、检索和管理数据库中的数据
  2. 操作数据本身、数据格式、字段名称、记录结构和文件结构
  3. 定义写入、验证和测试数据的规则
  4. 在数据库的记录级上操作
  5. 支持多用户环境并行访问和操作数据

一些流行的数据库管理系统包括:MySQL、SQL Server、Oracle、IBM DB2、PostgreSQL 和 NoSQL 数据库(MongoDB、CouchDB、DynamoDB、HBase、Neo4j、Cassandra、Redis)

6.数据可视化

数据可视化必然意味着什么?对我来说,它是从所考虑的数据中发现的图形表示。可视化有效地沟通和引导探索的结论。

我本质上是一个数据可视化的人。它给了我从数据中构思故事和创建综合演示的能力。数据可视化是更重要的技能之一,因为它不仅仅是表示最终结果,还包括了解和学习数据及其脆弱性。

形象地描绘事物总是更好;真正的价值是众所周知的。当我创建一个可视化,我肯定会得到有意义的信息,这可能是令人惊讶的,因为它拥有影响系统的力量。

直方图、条形图、饼图、散点图、折线图、时间序列、关系图、热图、地理图、三维图以及一长串可用于数据的可视化效果。更详细的名单,请点击这里访问

数据可视化能为数据科学做些什么?

  1. 为强大的洞察力绘制数据(当然!😀)
  2. 确定未知变量之间的关系
  3. 可视化需要关注或改进的区域
  4. 识别影响客户行为的因素
  5. 了解哪些产品应该放在哪里
  6. 显示来自新闻、联系、网站、社交媒体的趋势
  7. 可视化大量信息
  8. 客户报告、员工绩效、季度销售图
  9. 设计针对用户群的营销策略

一些流行的数据可视化工具包括: Tableau、PowerBI、QlikView、Google Analytics(用于 Web)、MS Excel、Plotly、Fusion Charts、SAS

7.机器学习/深度学习

如果你在一家管理和操作大量数据的公司工作,在那里决策过程是以数据为中心的,可能需要的技能是机器学习。ML 是数据科学生态系统的一个子集,就像统计或概率一样,有助于数据建模和获得结果。

数据科学的机器学习包括对 ML 至关重要的算法;k 近邻,随机森林,朴素贝叶斯,回归模型。PyTorch、TensorFlow、Keras 也发现了它在数据科学的机器学习中的可用性

数据科学的机器学习能做什么?

  1. 欺诈和风险检测与管理
  2. 医疗保健(蓬勃发展的数据科学领域之一!遗传学、基因组学、图像分析)
  3. 航线规划
  4. 自动垃圾邮件过滤
  5. 面部和声音识别系统
  6. 改进的交互式语音应答(IVR)
  7. 全面的语言和文档识别和翻译

8.云计算

数据科学实践通常包括使用云计算产品和服务来帮助数据专业人员访问管理和处理数据所需的资源。[customerthink.com数据科学家的日常工作通常包括分析和可视化存储在云中的数据。

你可能已经读到过数据科学和云计算携手并进,这通常是因为云计算帮助数据科学家使用 AWS、Azure、Google Cloud 等平台,这些平台提供了对数据库、框架、编程语言和运营工具的访问。

鉴于工具和平台的规模和可用性,熟悉数据科学包括与大量数据的交互这一事实,理解云和云计算的概念对于数据科学家来说不仅是相关的,而且是关键的技能。

对于数据科学,云计算能做什么?

  1. 数据采集
  2. 解析、管理、争论、转换、分析和净化数据
  3. 数据挖掘[探索性数据分析(EDA),汇总统计,…]
  4. 验证和测试预测模型、推荐系统和此类模型
  5. 调整数据变量并优化模型性能

一些流行的数据科学云平台包括亚马逊网络服务、Windows Azure、谷歌云或 IBM 云。不久前,我还读到有人正在试验阿里云,这让我觉得很有趣。

9.微软优越试算表

我们知道 MS Excel 可能是最好和最流行的数据处理工具之一。我们可能会听到,“嘿,你收到老板发来的 Excel 了吗?等等,我们不是在讨论数据科学的技能吗?Excel?我一直想知道一定有什么简单的方法来管理数据。随着时间的推移,探索 Excel 的数据管理,我意识到,Excel 是:

  1. 2D 数据最佳编辑
  2. 高级数据分析的基础平台
  3. 获得与 Python 中正在运行的 Excel 表的实时连接
  4. 你可以做任何你想做的事情,无论何时,只要你愿意,你可以保存任意多的版本
  5. 数据操作相对容易

今天,大多数非技术人员经常使用 Excel 作为数据库的替代品。这可能是一种错误的用法,因为它在某种程度上缺乏版本控制、准确性、可再现性或可维护性。然而,Excel 所能做的也有些令人惊讶!

用 Excel 做数据科学可以做什么?

  1. 命名和创建范围
  2. 过滤、排序、合并、整理数据
  3. 创建数据透视表和图表
  4. visual Basic for Applications(VBA)[如果你还不知道,可以谷歌一下。这是一个 MS Excel 的超级能力,这个空间不会公正地解释它。VBA 是 Excel 的编程语言,它允许你运行循环,宏,如果..else]
  5. 清除数据:删除重复值在绝对、混合和相对之间改变引用
  6. 在成千上万的记录中查找所需的数据

10.DevOps

我一直听说并相信数据科学是为那些懂数学、统计学、算法和数据管理的人准备的。不久前,我遇到了一个在核心 DevOps 领域拥有 6 年以上经验的人,他正在寻找数据科学方面的职业转变。好奇的我想知道 DevOps 是否以及如何成为数据科学的一部分。我对 DevOps 知之甚少(实际上是一无所知),但有一点是肯定的:DevOps 对数据科学的重要性日益增加。

DevOps 是一套结合软件开发和 IT 运营的方法,旨在缩短开发生命周期,并提供高质量的不间断交付。

DevOps 团队与开发团队紧密合作,有效地管理应用程序的生命周期。数据转换要求数据科学团队与 DevOps 紧密协作。DevOps 团队预计将提供高度可用的 Apache Hadoop、Apache Kafka、Apache Spark 和 Apache Airflow 集群来处理数据提取和转换。

DevOps 可以为数据科学做些什么?

  1. 调配、配置、扩展和管理数据集群
  2. 通过持续集成、部署和监控数据来管理信息基础架构
  3. 创建脚本,为各种环境自动提供和配置基础。

感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在您的数据科学之旅中,您期待学习或探索什么技能?

数据帐篷快乐!

免责声明:本文表达的观点仅代表我个人,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。她是用户体验分析师和顾问、技术演讲者和博客作者。

2020 年十大技术技能

原文:https://towardsdatascience.com/top-10-technology-skills-for-2020-9eac27e0839c?source=collection_archive---------5-----------------------

来源:freephotoc,via pixabay

重塑和重新定义工作场所的技能

根据来自麦肯锡的研究,随着技术的快速进步,到 2030 年将近三分之一的美国工人将需要寻找新的工作。这些进步意味着员工需要不断学习新技能。

听着,归根结底,我对几件事充满热情:优质啤酒(开玩笑的,但说真的,你可以把你当地的 IPAs 寄给我)、领导力和管理、经济学和消费者行为、企业家精神和初创企业,最后是技术和小工具。技术是最突出的,因为我全职管理 ABBYY Software 的全球过程智能部门的产品营销。我对技术的热情意味着是的!我手腕上有一个智能小玩意儿,家里有声控恒温器和其他漂亮的智能设备。技术趋势变化如此之快,新的“酷东西”发展如此之快,这让我不断阅读文章,观看 CES 2020 live 的片段,渴望了解“下一步是什么?”。谈论所有与技术相关的事情,接着我之前关于 2020 年 10 大技术趋势的文章,我想讨论 2020 年及以后的 10 大趋势技术技能。

[## 2020 年十大技术趋势

改变我们思考和工作方式的策略和事物

towardsdatascience.com](/top-10-technology-trends-for-2020-4a179fdd53b1)

你知道利害关系在变,我也知道。我不认为这些顶级技能会让你感到惊讶,但它们值得在你的下一次管理或领导会议上提及。对技术的需求,尤其是对拥有高级技术技能的工人的需求正在飞速增长。随着企业内大规模中断的发生,组织需要以全新、创新的方式做出响应。这意味着重新思考我们如何对待劳动力技能和人才管理。许多公司正在投入更多的资源来招募、雇佣和培养合适的人才,以保持竞争力。毫无疑问,这意味着愿意花时间开发先进技术技能的员工可能在未来 12 个月内获得企业中一些最受欢迎的角色。

Unsplash 上由 Austin Distel 拍摄的照片

根据招聘软件公司 iCIMS 的 2019 年报告,2016 年组织平均需要 55 天来填补一个技术职位。2019 年,这一数字跃升至 66 天。根据该报告,这些空缺职位每天每个空缺会造成约 680 美元的收入损失。这些技术工作的供给很少,需求却很大!你具备获得这些职位的技能吗?

2016-2019 年越来越受欢迎的十大技术技能

当在 Udemy 上查看最热门的技能趋势时,数据显示在过去的 3 年中,已经出现了向人工智能和数据科学技能学习的转变。这是有意义的,因为 2020 年的许多顶级技术趋势包括超自动化、自主事物和人工智能安全等。(如果你还没有读过这些技术,我建议你至少从上面链接的文章中了解完整的列表。)

根据 Udemy 的数据,从 2016 年到 2019 年,这是过去 3 年里越来越受欢迎的 10 大技术技能。

  1. 张量流
  2. 聊天机器人
  3. 微软 Azure —架构
  4. OpenCV(计算机视觉/人工智能)
  5. 神经网络
  6. LPIC- Linux
  7. 以太坊(区块链)
  8. Splunk(数据)
  9. 开源地理信息系统软件
  10. 科特林

*排名基于 2019 年 Udemy.com 的最高消费。资料来源:2020 年 Udemy 数据。

TensorFlow、OpenCV 和神经网络是数据科学家今天正在利用的基础技能,对于理解和开发人工智能应用程序和平台至关重要。

开源机器学习和神经网络处理越来越受欢迎的人工智能(AI)创新背后的沉重负担。这些数字技术席卷了世界,可以在各行各业看到。

2020 年十大最受欢迎的技术技能

当 Udemy 查看学习平台网站上 2020 年最受欢迎的技能时,也有类似的趋势。

技能缺口困扰着全球的组织,这 10 项技能是必备的。商业领袖正在努力填补这些工作角色。

如果你想在今年进行 IT 技能投资或开始新的职业生涯,这些是你要考虑的领域。在分析了超过 4000 万用户的数据后,Udemy 发现人们正在学习的最受欢迎的技术技能是编程语言 Python。

总体而言,该报告指出,人们对学习人工智能(AI)和数据科学有着巨大的兴趣,但对网络开发框架(React,Angular)、云计算和其他 IT 认证(AWS,CompTIA)以及 Docker 的需求也在不断增长。

  1. Python —一种用于软件开发、基础设施管理和数据分析的编程语言。Python 的设计理念强调代码的可读性,并大量使用空白。
  2. React (web) —一个用于构建用户界面的 JavaScript 库。它由脸书和一个由个人开发者和公司组成的社区维护。React 可以用作开发单页面或移动应用程序的基础。
  3. Angular —基于 JavaScript 的开源前端 web 框架。它由谷歌的 Angular 团队和一个由个人和公司组成的社区维护。Angular 是由构建 AngularJS 的同一个团队完全重写的。
  4. 机器学习——算法和统计模型的科学研究。它被视为人工智能的一个子集
  5. Docker —一个开源平台,用于创建称为容器的软件包。容器是相互隔离的,捆绑了它们自己的软件、库和配置文件。
  6. Django —一个基于 Python 的免费开源 web 框架。Django 的主要目标是简化复杂的、数据库驱动的网站的创建。
  7. CompTIA —一家专业技术机构,拥有从入门级到专家级的四个 IT 认证系列。它被认为是 It 行业的顶级行业协会之一。
  8. 亚马逊 AWS —AWS 向个人、公司和政府提供随需应变的云计算平台和 API,采用计量付费的方式。AWS 认证验证了云专业知识。
  9. 深度学习 —一类基于人工神经网络的机器学习。学习可以是有监督的、半监督的或无监督的。
  10. React Native (mobile) —由脸书创建的开源移动应用框架,用于开发 Android、iOS、Web 和通用 Windows 平台的应用。

*排名基于 2019 年 Udemy.com 最高消费。资料来源:2020 年 Udemy 数据。

2020 年十大新兴技术技能

虽然有很多技能对 2020 年的技术成功至关重要,但今年及以后还会出现一些技术技能。

  1. Gatsby.js(网络框架)
  2. AWS 大数据
  3. 反应钩
  4. 微软 Azure 架构
  5. Next.js (web 框架)
  6. 阿帕奇气流(数据处理)
  7. SwiftUI(苹果应用程序)
  8. 数字过程自动化
  9. ESP32(物联网)
  10. 量子计算

*数据基于 2018 年零消耗但 2019 年在 Udemy 上激增的技能。资料来源:2020 年 Udemy 数据。

2020 年十大新兴技术技能包括网络开发、量子计算和物联网(IoT)。

Udemy 分析了目前超过 4000 万人正在该平台上学习的新兴技能,并发现 Gatsby.js,一种新的 web 开发框架工具,正在迅速被采用。越来越受欢迎的其他 web 开发工具包括 React Hooks、Next.js 和 SwiftUI,这是一种用于苹果应用程序的用户界面工具。全新的技能出现在新兴技术技能清单上,包括量子计算和 ESP32,用于物联网的发展。

数字化的转变即将到来——对数字化技能的需求至关重要

这些榜单展示了企业兴趣的转变,也反映了我们日益数字化的世界。你为数字化企业做好准备了吗?

这些 2020 年十大技术技能和其他有趣的见解来自 Udemy for Business 的 2020 年工作场所学习趋势报告:未来的技能 (48 页,PDF,选择加入)。该报告强调了您的组织在 2020 年将需要的未来技能,以及您如何为这个新的十年准备您的员工。

如果你喜欢这篇文章,你可能也会喜欢其他的阅读!:

[## 2020 年十大人工智能趋势

人工智能在工作场所的兴起支持和维持了数字化劳动力,这是一个明显的趋势…

towardsdatascience.com](/top-10-ai-trends-for-2020-d6294cfee2bd) [## 2020 年十大技术趋势

改变我们思考和工作方式的策略和事物

towardsdatascience.com](/top-10-technology-trends-for-2020-4a179fdd53b1) [## 数据挖掘的 5 个误区

什么是数据挖掘?

towardsdatascience.com](/5-myths-of-data-mining-70d49f0abd18) [## 你的团队中有数据英雄吗?

商业分析和商业智能

towardsdatascience.com](/do-you-have-a-data-hero-on-your-team-e4ddc318926e)

RYAN M. RAIKER,MBA // Ryan Raiker 是 ABBYY 的高级产品营销经理,ABBYY 是一家业务流程和数字智商解决方案的全球供应商。作为常驻的“流程智商人员”,Ryan 在流程发现、分析、监控和预测/说明性分析、业务战略管理、业务发展方面拥有专业知识,专注于帮助公司了解其业务流程并从中获得价值。他获得了威得恩大学的工商管理硕士学位、商业分析/信息学学士学位和运营管理辅修学位,并继续在该大学担任兼职教授。

2020 年十大技术趋势

原文:https://towardsdatascience.com/top-10-technology-trends-for-2020-4a179fdd53b1?source=collection_archive---------2-----------------------

改变我们思考和工作方式的策略和事物

20 世纪 60 年代的电视节目如《杰森一家》预言 21 世纪将充满会飞的汽车,空中机器人将成为我们日常生活的一部分。2015 年 10 月 21 日标志着马蒂·小飞侠(迈克尔·J·福克斯饰)在 1989 年的经典《回到未来第二部》续集中旅行到的时间点。他发现的未来已经抓住了数百万人的想象力——相反,今天,我们生活在一个由直播、智能手机和社交网络主导的世界,而不是飞行汽车或悬浮板(也许,因为这真的是悬浮板吗?)。

来源

在短短的 10 年时间里,或者更短的时间内,像优步LyftDoorDashAirBnB 等服务应用已经产生了数百万用户,几乎每个人的智能手机上都可以找到它们。像 Siri 和 Alexa 这样的个人助理已经进入了我们的很多生活。任何人如果说世界在过去十年没有改变,那就太天真了。这种技术的发展和变化可能会持续到下一个十年甚至更久。

是咆哮 20 的宝贝!在新千年开始时,信息技术对 2000 年问题深感忧虑……“哦,不,是零和时钟!”当时钟在 2000 年敲响 12 点时,iPhone、Twitter、脸书、4k、5G 以及我们今天知道的所有其他有趣的东西都不存在。那么,随着新十年的开始,会发生什么呢?

你更感兴趣的是你需要学习哪些技能来跟上 2020 年的技术趋势?

[## 2020 年十大技术技能

重塑和重新定义工作场所的技能

towardsdatascience.com](/top-10-technology-skills-for-2020-9eac27e0839c)

2020 年将带来许多改变游戏规则的技术趋势,我们将会接受(或者已经接受)。虽然有些东西已经存在,并且在现代企业中很常见,但其他新技术是彻底改变我们生活、工作和社交方式的“首选”。随着我们所了解和喜爱的现代技术随着新的用例甚至更新的应用而发展,我们将开始看到新的优势和机会。

2019 年 10 月的 Gartner IT 研讨会/Xpo 上公布了 2020 年十大技术趋势。Gartner 预测,2020 年的关键战略技术趋势包括两个主要领域:以人为中心和智能空间。

来源

高度自动化

高度自动化将任务自动化提升到了一个新的水平。它是人工智能(AI)和机器学习(ML)等先进技术的应用,以比传统自动化能力更具影响力的方式自动化流程(不仅仅是任务)。它结合了多种机器学习、打包软件和自动化工具来交付工作。高度自动化需要工具的组合来帮助支持复制人类参与任务的部分。这一趋势始于机器人流程自动化(RPA ),但将随着流程智能、内容智能、人工智能、OCR 和其他创新技术的结合而增长。

来源

多重体验

多重体验处理从二维屏幕和键盘界面到更加动态、多模态的界面世界的巨大转变,我们沉浸在交互技术中,它围绕着我们。Multi-experience 目前专注于使用增强现实、虚拟现实、混合现实、多通道人机界面和传感技术的沉浸式体验。

人工智能对话平台改变了人们与数字世界互动的方式。除了对话,虚拟现实(VR)、增强现实(AR)和混合现实(MR)正在改变人们对数字世界的看法。这种感知和互动的综合转变将带来未来的多感官和多模态体验。在未来十年,这种趋势将成为所谓的环境体验。

来源

技术的民主化

技术民主化指的是技术的获取继续快速变得对更多的人更容易。

技术的民主化意味着让人们无需大量或昂贵的培训就能轻松获得技术或商业专业知识。随着公民开发者的兴起,这一点已经得到了广泛的认可。过去,自动化是由 IT 部门管理和部署的,但随着数字工人的出现,机器人流程自动化的出现改变了这一状况。我们现在看到新一代的公民开发人员,如业务分析师,他们更接近业务挑战,可以对数字工作者进行编程和自动化,以帮助他们完成工作。这一趋势将集中在四个关键领域:应用开发、数据和分析、设计和知识。根据 Gartner 的说法,这些工具可能是为“生成合成训练数据而设计的,这有助于解决 ML 模型开发的重大障碍。”

新技术和改进的用户体验将使技术行业之外的人能够获得和使用技术产品和服务。

安迪·凯利在 Unsplash 上的照片

人类隆胸

人类增强探索技术如何被用来提供认知和身体的改善,作为人类体验不可分割的一部分。这种增强利用技术来提高人类的身体和认知能力。像波士顿动力公司这样的公司已经开发了各种各样的人类增强设备,可以在工厂或战场上使用。

我们已经看到智能设备和智能可穿戴设备的激增。新的应用包括使用这些可穿戴设备来提高采矿业工人的安全。在零售和旅游等其他行业,可穿戴设备可以用来提高员工生产率和增强人类能力。

来源

透明度和可追溯性

越来越多的消费者意识到他们的个人信息是有价值的,并要求控制。许多人认识到保护和管理个人数据的风险越来越大。除此之外,政府正在实施严格的立法来确保他们这样做。透明度和可追溯性是支持这些数字道德和隐私需求的关键要素。

未来几年,世界各地可能会颁布更多类似于欧盟通用数据保护法规(GDPR)的立法。

随着越来越多的组织部署人工智能,并利用机器学习代替人类做出决定,这是一个令人担忧的进一步原因。对可解释的人工智能和人工智能治理的需求不断发展。这一趋势要求关注信任的这些关键要素:正直、开放、负责、能力和一致性。

来源

被授权的边缘

边缘计算是一种计算拓扑,在这种拓扑中,信息处理、内容收集和交付更靠近信息的来源、存储库和消费者。这允许减少延迟,并且允许这些边缘设备上的某种程度的自治。边缘计算诞生于物联网系统向嵌入式物联网世界提供断开连接或分布式功能的需求。

据 Gartner 的 Brian Burke 称:“随着边缘设备拥有越来越复杂和专业的计算资源以及更多的数据存储,边缘计算将成为几乎所有行业和使用案例的主导因素。包括机器人、无人机、自动驾驶汽车和操作系统在内的复杂边缘设备将加速这一转变”。

这将扩大设备作为智能空间基础的作用,并将关键应用和服务移至更靠近使用它们的人和设备。

来源

分布式云

分布式云是云转变的方式。大多数人认为云是独立于位置的——它就在那里;它就在上面的某个地方。但是现在有了分布式云,这些数据中心的物理位置变得越来越重要。解决法规问题和延迟问题等诸如此类的问题变得越来越重要。

云现在扩展了它的领域并成为分布式云,这是将公共云服务分发到不同的位置,而原始公共云提供商承担服务的运营、治理、更新和发展的责任。这代表着大多数公共云服务的集中化模式的重大转变,并将引领云计算的新时代。

来源

更自主的东西

自主事物是使用人工智能来自动化先前由人类执行的功能的物理设备。目前最容易识别的自主事物形式是机器人、无人机、自主车辆和电器。这些东西的自动化超越了僵化的编程模型所提供的自动化,它们利用人工智能来交付高级行为,这些行为与环境和人的交互更加自然。

随着技术能力的提高,监管允许和社会接受度的增长,更多自主的东西将被部署在不受控制的公共空间。

照片由思想目录Unsplash 上拍摄

加密货币和实用区块链

认识到“实用区块链”在这里很重要:虽然区块链已经出现了几年,但由于技术上的一些技术和管理问题,它的商业部署一直很慢。区块链有可能通过实现信任、提供透明度和实现跨商业生态系统的价值交换来重塑行业,有可能降低成本、减少交易结算时间并改善现金流和材料的流动。

报告指出,区块链具有潜力的另一个领域是身份管理。智能合约可以被编程到区块链中,事件可以触发动作;例如,当收到货物时,付款被释放。然而,Gartner 的 Brian Burke 表示,由于一系列技术问题,包括较差的可扩展性和互操作性,区块链在企业部署方面仍不成熟。“尽管面临这些挑战,但巨大的中断和创收潜力意味着组织应该开始评估区块链,即使他们预计不会在短期内积极采用这些技术,”他说。

随着人工智能和物联网等互补技术开始集成,区块链将看到企业的巨大增长。

照片由 Denys NevozhaiUnsplash 上拍摄

AI 安全

超自动化等不断发展的技术已经表明,真正的数字化转型正在改变商业世界。然而,这些技术也通过潜在的新攻击点产生了安全漏洞。未来的人工智能安全将有 3 个关键的视角:1)保护人工智能驱动的系统,安全的人工智能训练数据,以及训练有素的管道和机器学习模型;2)利用人工智能来增强安全防御,并利用机器学习来理解模式,发现攻击并自动化部分网络安全流程;3)预测攻击者对 AI 的负面使用——识别这些攻击并防御它们。

克里斯多夫·伯恩斯在 Unsplash 上拍摄的照片

2020 年为企业领导者带来了巨大的机遇和挑战。重要的是要永远记住,拥抱变化和采用新的技术和趋势将保证您的组织在市场上保持竞争力。毫无疑问,抵制变革会让你的公司落后。那些专注于真正的数字化转型的人将会发展他们的业务。你有足够的勇气去执行这些将重塑未来的趋势吗?

Gartner 的完整报告【2020 年战略技术趋势,可在此下载(需要注册)

如果你喜欢这篇文章,你可能也会喜欢其他的阅读!:

[## 2020 年十大人工智能趋势

人工智能在工作场所的兴起支持和维持了数字化劳动力,这是一个明显的趋势…

towardsdatascience.com](/top-10-ai-trends-for-2020-d6294cfee2bd) [## 2020 年十大技术技能

重塑和重新定义工作场所的技能

towardsdatascience.com](/top-10-technology-skills-for-2020-9eac27e0839c) [## 数字化员工在工作场所的贡献将增长 50%

人机协作——混合劳动力是成功企业的新常态。

medium.com](https://medium.com/@ryraiker/digital-workers-contributions-in-the-workplace-to-grow-by-50-e26335b43836) [## 数据挖掘的 5 个误区

什么是数据挖掘?

towardsdatascience.com](/5-myths-of-data-mining-70d49f0abd18) [## 你的团队中有数据英雄吗?

商业分析和商业智能

towardsdatascience.com](/do-you-have-a-data-hero-on-your-team-e4ddc318926e)

RYAN M. RAIKER,MBA // Ryan Raiker 是 ABBYY 的高级产品营销经理,ABBYY 是一家业务流程和数字智商解决方案的全球供应商。作为常驻的“流程智商人员”,Ryan 在流程发现、分析、监控和预测/说明性分析、业务战略管理、业务发展方面拥有专业知识,专注于帮助公司了解其业务流程并从中获得价值。他获得了威得恩大学的工商管理硕士学位、商业分析/信息学学士学位和运营管理辅修学位,并继续在该大学担任兼职教授。

充分披露:本文中包含的一些链接是附属链接,这意味着您无需支付额外费用,如果您点击并购买或注册一项服务,我可能会收到佣金。

会员链接:

  1. 首次乘车可获得 5 美元的 Lyft 积分!
  2. 使用代码“6jrv6ue”,您的前 3 次优步骑行每次可获得 2.00 美元的优惠。
  3. 在 DoorDash 上,您的前 3 笔订单每笔可获得 5.00 美元的折扣。
  4. 首次使用 airbnb 旅行可获得 55 美元的优惠。

Github 上的十大趋势数据科学项目

原文:https://towardsdatascience.com/top-10-trending-data-science-projects-on-github-ec1d4d4119f?source=collection_archive---------15-----------------------

少数几个 GitHub 存储库通过它们的各种项目突出了数据科学的能力。

Unsplash 上由 Austin Distel 拍摄的照片

数据科学领域带来了各种科学工具、流程、算法和从结构化和非结构化数据中提取知识的系统,用于识别其中有意义的模式。

数据科学是一个快速增长的行业,目前是这十年来最令人向往的领域之一。这就转化为成千上万拥有不同水平的数据科学相关技能的人 积极尝试进入数据科学的世界。如果你也热衷于了解数据科学所能提供的东西,并希望获得新的技能来增加你的投资组合,那么不要再犹豫了。

在整篇文章中,我们将浏览一些 GitHub 存储库,这些存储库突出了数据科学的能力,以及它们针对一系列用例的各种项目。像这样的开源项目非常适合研究数据科学的各个方面,同时让您可以选择修补它们,这样一旦您有信心,您就可以构建自己的项目。

数据真正推动了我们所做的一切。

——杰夫·韦纳

[## Github 上的 10 个流行数据科学资源

一些顶级的 GitHub 库将教你所有关于数据科学的知识。

towardsdatascience.com](/10-popular-data-science-resources-on-github-7ae288ff4a75) [## GitHub 上十大热门 Python 项目

像这样的 GitHub 项目是人们创造力和才华的完美展示

towardsdatascience.com](/top-10-trending-python-projects-on-github-fb852cd58262)

Github 上的顶级数据科学项目

GitHub 无疑是让你熟悉开源代码的最好地方之一,不仅是数据科学,还有任何技术。作为一个相当广泛的领域, 数据科学充满了各种工具 、框架、技术和算法来从数据中提取有见地的知识。

本节涵盖的项目在描绘数据科学如何部署在各行各业以及您如何轻松从中获取所需信息方面做了令人惊叹的工作。但是在深入研究这个之前,先看看 12 个适合初学者和专家的数据科学项目想法。

[## 12 个适合初学者和专家的酷数据科学项目创意

“到目前为止,您已经完成了多少个数据科学项目?”

towardsdatascience.com](/12-cool-data-science-projects-ideas-for-beginners-and-experts-fc75b5498e03)

1.艾伯特

Lite BERT(变压器的双向编码器表示)的缩写, ALBERT 是一款轻量级 BERT ,旨在通过克服满量程 BERT 的内存限制来实现更好的性能。ALBERT 通过使用比常规 BERT 少得多的参数来做到这一点。

虽然谷歌的 BERT 允许任何人高精度地训练自己的模型,但 ALBERT 已经领先一步,只用 10%的参数就实现了更高的性能产出。伯特和阿尔伯特都允许你在 GPU 或 TPU 上训练你的模型。如果您的任何任务需要与一个NLP 一起工作,我们强烈建议您让 ALBERT 尝试一下,亲自看看性能的提高。

2.秘密集会的看守人

来源:平铺器

如果你喜欢艺术项目,我们建议给 Tiler 一个机会。Tiler 是一个有趣而令人兴奋的开源项目,它使用 Python 构建而成允许任何人创建有趣而独特的图像。这个项目的工作方式是为你提供一系列不同颜色的形状,这些形状可以以不同的角度旋转来创建更复杂的图像。您所要做的就是将您想要平铺的图像作为参数传递,让 Tiler 发挥它的魔力。Tiler 还有一系列其他参数,您可以使用它们来微调您的最终图像。

Tiler 提供了许多不同种类的开箱即用的形状,如波浪、十字绣、圆形、乐高、心形等等,并且有多种颜色。Tiler 的设计考虑到了灵活性,因为它可以让用户创建自己的各种颜色的瓷砖,如果他们觉得特别有创意的话。

3.PLM Papers——预训练语言模型研究论文集

这个数据科学 GitHub repo 专注于为一系列问题提供各种预训练模型。对于门外汉来说,预先训练的模型是迁移学习的生命线,人们可以使用其他人的模型,只需稍加修改,就可以解决类似的问题。

预训练模型对于将训练成本保持在最低水平至关重要,因为它们可以帮助您不需要在任何专用训练硬件(GPU)上花费时间,同时还可以帮助您减少总花费时间。****

repo 是一百多个模型的研究论文的家园,可以帮助你更深入地理解问题及其建议的解决方案。repo 还包含一个信息图来表示这些 PLM 之间的关系。

4.TubeMQ

如果你曾经对大公司如何实时地将数据从一个站点转移到另一个站点感兴趣,这个项目也许能让你一窥其中的秘密。TubeMQ 是一个企业级分布式消息队列(MQ)系统,它在大约一年前开源,现在被 Apache Software Foundation 采用,旨在提供高性能存储和传输海量数据。

TubeMQ 可以帮助组织在保持完全可伸缩性的同时,在吞吐量、延迟、稳定性、性能和成本方面提供几个关键优势,从而占据上风。该项目的其他显著特性包括功能丰富的仪表盘、认证和授权、对大数据和流媒体生态系统的支持、与 TCP 和 SSL 等传输协议兼容、高效的推拉式消费模式等等。

5.深度隐私

现代世界与互联网紧密相连,在这里,这个词已经失去了意义,现在只是一个神话。你使用的每一个应用程序或服务都在某种程度上跟踪你的一举一动,在你提出要求之前,为你提供更好的服务和建议。****

DeepPrivacy 就是这样一个 GitHub 项目,旨在自动匿名化图像中的人脸。DeepPrivacy 使用 生成对抗网络(GAN) 通过使用包围盒识别敏感区域和稀疏姿态信息在各种场景下引导网络来实现人脸匿名化。该项目使用同类最佳的检测模型,Mask-R-CNN用于生成稀疏姿态信息, DSFD 用于人脸识别。如果你有兴趣研究 DeepPrivacy 的研究论文,你也可以通过 GitHub repo 来完成。

来源: Github 深度隐私

6.DeepCTR

这个数据科学项目是通过预测用户的点击率(CTR) 来解决向用户提供正确推荐或搜索结果这一主要问题的重要一步。DeepCTR 项目提供了对许多易于使用、模块化和可扩展的深度学习模型的访问,这些模型具有许多核心组件层,您可以使用它们来构建定制模型。许多受支持的模型包括:

DeepFM

●基于产品的神经网络

●深度和交叉网络

●深度兴趣网络

● FLEN

● FGCNN

●卷积点击预测模型

虽然 DeepCTR 的这个变体可能因为其 TensorFlow 实现而看起来并不适合每个人,但是还有 DeepCTR-Torch,它使用了这个项目的 PyTorch 实现。

7。人脸识别

面部识别工具可以与来自一个人的图像的面部数据一起使用,以分析和提取许多关键信息,如性别、年龄、等等。利用最新技术的现代工具可以从视频和图像中识别人脸。 Alexandre Attia 的现代人脸识别工具利用深度学习,由 梯度方向直方图方法 提供支持。该人脸识别工具使用的更详细的步骤列表包括:

●使用 HOG 算法在图像中查找面部,以获得面部结构的基本表示

●剪切、旋转、缩放等变换,使眼睛和嘴巴居中

●使用深度学习和经过训练的神经网络对检测到的面部进行编码

●最后,使用分类器(LVM 或任何其他)在数据库中找到与测试图像最匹配的人

来源: Github 人脸识别

8.墨西哥政府报告文本分析

使用 Python 构建,这个项目提供了一个关于【NLP】系统如何为文本挖掘工作的实践经验。该项目已经由墨西哥政府在 2019 报告中进行了演示,并包括许多从报告中清晰提取文本并在以后可视化的活动。********

为了实现这一点,该项目使用了多个 Python 库。每个库的简要说明如下:

PyPDF2: 一个高度可定制的库,用于可靠地从 PDF 中提取干净的文本

空间:现实世界中自然语言处理工作负载的高速库

NumPy: 为项目提供必要的计算能力

pandas: 用于从数据集中提取和分析有价值的见解

matplotlib: 用于创建令人惊叹且富有洞察力的数据可视化

seaborn: 用于更精确地控制用 matplotlib 构建的图形和绘图

geopandas: 用于处理空间数据库和绘制视觉上吸引人的地理地图

9.提绳器****

来源: Github 字符串筛选器

这个数据科学项目的目标是应用安全,其目标用户主要是恶意软件分析师和网络安全专家。StringSifter 项目利用 Python 中的 strings 程序和机器学习的能力,使得在各种大小的程序二进制文件中找到一系列隐藏的字符串变得更加容易。

这些隐藏的字符串经常被恶意使用,通过将它们作为 StringSifter 程序的输入,几乎可以毫不费力地找到它们。一旦列表被输入到程序中,它就会深入地筛选二进制文件,并向分析人员报告任何相关的发现。作为一款易于使用的工具,安全专家可以毫不费力地将 StringSifter 集成到他们现有的恶意软件分析堆栈中。用户还可以选择将 StringSifter 与 Docker 映像一起使用,因为所有必需的命令行实用程序都是现成的。

10。IMDb 电影分级预测系统

这个列表中的另一个项目来自为我们带来人脸识别项目的开发者,这个评级预测系统试图在电影上映前预测电影在的电影评级。在机器学习的支持下,ProjectMovieRating 项目试图通过以下三个部分来实现这一点:****

第 1 部分:它试图解析来自 IMDb 和目标电影数字网站的数据,如演员信息、奖项、导演、类型、预算等

第 2 部分:然后,它试图分析数据,以识别第 1 部分中变量之间的任何相关性。

第三部分:在最后一步,该项目使用机器学习算法 Random Forests 来预测电影的 IMDb 评分

**** [## 机器学习算法之旅

阅读机器学习算法的介绍性列表

towardsdatascience.com](/a-tour-of-machine-learning-algorithms-466b8bf75c0a)****

结论

数据科学已经成为一个竞争非常激烈的领域,需要不断了解最新和最好的技术才能完成工作。要想在竞争中保持领先,你需要提高自己的水平。理论教育固然很好,但如果你不把这些知识用于解决现实世界的问题,这些知识对你就没有任何用处。

在这篇文章中,我们试图涵盖 GitHub 上的一系列数据科学项目,这些项目涉及一些有趣且受欢迎的主题,试图为多个领域中一些具有挑战性的现实问题提供有效的解决方案。我们祈祷这些项目会激发你涉足数据科学,创造你自己版本的解决方案,或者可能是一个有趣的项目?

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

如果你有更多的建议,我很想听听。

更多有趣的读物

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

**** [## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## 2020 年必读的数据科学书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 给 Python 开发者的 10 个很酷的 Python 项目想法

您可以使用 Python 构建的有趣想法和项目列表

towardsdatascience.com](/10-cool-python-project-ideas-for-python-developers-7953047e203) [## 2020 年必读的 Python 书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb) [## 你必须知道的 12 项 Python 开发者技能

Python 开发人员必备的顶级技能

towardsdatascience.com](/top-12-python-developer-skills-you-must-need-to-know-9e2b6c7fc6c) [## 面向所有人的顶级谷歌人工智能工具

使用谷歌人工智能中心将想法变为现实

towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## 2020 年人工智能工程师的顶级编程语言

从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言

towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0)

关于作者

克莱尔 D 。在digital ogy是一个内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。与我连线上 Linkedin&推特 ****

GitHub 上十大热门 Python 项目

原文:https://towardsdatascience.com/top-10-trending-python-projects-on-github-fb852cd58262?source=collection_archive---------2-----------------------

像这样的 GitHub 项目是人们创造力和才华的完美展示

李·坎贝尔在 Unsplash 上的照片

编写 Python 代码的乐趣应该在于看到短小、简洁、易读的类,这些类用少量清晰的代码表达大量的动作——而不是让读者厌烦得要死的大量琐碎代码。

——吉多·范·罗苏姆

在相当长的一段时间里,全世界的开发人员都倾向于将Python用于他们的大多数项目。编程语言的易用性,它在实时和非实时系统中的效率,以及它广泛的救生包集合,这些都是开发人员喜欢 Python 的部分原因。

像 Python 这样的编程语言给了你将梦想变成现实的自由,并向世界展示你的才华。这就是为什么我们要探索 GitHub 上的几个顶级 Python 项目,不仅是为了启发你,也是为了让你体验一下用创新思维和 Python 可以做什么。****

你知道吗?

  • 根据 Stackoverflow 的说法,python 是最受青睐的语言,也就是说大多数开发者使用 Python。
  • Python 是 GitHub 第二流行的语言,也是最流行的机器学习语言。

** [## 2020 年大一新生热门 Python 面试问答

这里列出了大一新生最常被问到的 python 面试问题和答案,涵盖了核心…

blog.digitalogy.co](https://blog.digitalogy.co/python-interview-questions-and-answers-for-freshers/)**

GitHub 上的顶级 Python 项目

GitHub 显然是大多数在线代码的所在地。Python 作为一种令人惊叹的通用编程语言,已经被成千上万的开发人员用来构建各种有趣而有用的项目。在下一节中,我们将尝试介绍 GitHub 上一些使用 Python 构建的最佳项目。

但是在深入研究这个之前,你也可以在这里为 Python 开发人员查看一些很酷的 Python 项目创意—

** [## 给 Python 开发者的 10 个很酷的 Python 项目想法

您可以使用 Python 构建的有趣想法和项目列表

towardsdatascience.com](/10-cool-python-project-ideas-for-python-developers-7953047e203)**

1.马尼姆

星星: 26.2k

分叉者: 3.4k

研制者: 格兰特·桑德森

****GitHub 链接:https://github.com/3b1b/manim

****Manim 代表数学动画引擎。这个项目背后的想法是让人们更容易将有趣和直观的动画与数学教材中的图形和图表相结合,摆脱学习数学必须枯燥的刻板印象。

****格兰特运营着一个名为 3Brown1Blue 的 YouTube 频道,在那里他使用 manim 库根据需要创作和控制这些动画,向观众教授高等数学。使用 manim,您还可以创建动画视频,精确控制图表和插图中使用的动画。如果你觉得这是一个有趣的想法,你应该看看他的频道,看看图书馆的运作。

****Youtube 链接:https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw

2.DeepFaceLab

星星: 20.4k

分叉者: 4.8k

****开发人:伊佩罗夫

****GitHub 链接:https://github.com/iperov/DeepFaceLab

DeepFaceLab 是这个列表中 Python 上最好玩的 GitHub 项目之一。DeepFaceLab 是一个可以创建深度假像图像和视频的工具,允许你做很多有趣的事情,比如改变、 去老化、交换面孔。为了让事情更引人注目,你甚至可以改变他们的发言,尽管这需要熟练掌握视频编辑软件。

开发者声称互联网上超过 95%的深度造假视频都是用这个工具制作的。您可以在该项目的 GitHub 页面上找到设置指南和一些 facesets 来帮助您开始。

3.气流

恒星: 18.6k

分叉者: 7.3k

****由开发:Apache 软件基金会

****GitHub 链接:https://github.com/apache/airflow】T4

Airflow 是来自Apache Software Foundation的一款开源工作流管理工具,由 Python 提供支持。Airflow 允许您在工作流上执行一系列活动,例如创作、调度和监控它们。当定义为代码时,工作流变得更容易管理、测试和协作。

它提供了可伸缩性、动态管道生成和可扩展性。简单的用户界面使使用 Airflow 更加顺畅,其与其他工具和服务的强大集成功能有助于通过节省时间来充分利用它。业界的一些大公司正在积极使用 Airflow,比如 Adobe、Lyft、Slack、Expedia 等等。

** [## 10 家使用 Python 的世界级公司

Python 正被 IT 界的一些巨头积极使用

towardsdatascience.com](/10-world-class-companies-using-python-26cde24919a8)

4.GPT-2

星星: 13.4k

分叉者: 3.4k

GitHub 链接:https://github.com/openai/gpt-2

GPT-2 是一个巨大的基于 transformer 的语言模型,它是在一个同样庞大的数据集上训练的,准确地说是来自的文本和超过 80 亿个网页的。目标?给定上下文中的一组或所有前面的单词,预测下一个单词。

更简单地说,你给 GPT-2 一些文本,语言模型将预测并生成一个质量非凡的文本的冗长延续。

GitHub repo 拥有 OpenAI 论文“语言模型是无监督的多任务学习者”的代码和模型,而页面提到了 GPT-2 的描述和一些警告。

[## 2020 年必读的 Python 书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb)

5.XSStrike

星星: 8.5k

分叉者: 1.2k

开发人: Somdev Sangwan

GitHub 链接:https://github.com/s0md3v/XSStrike

跨站点脚本, 又名 XSS ,是一个对网站来说极其恼人和有害的漏洞。通过从客户端注入恶意代码,攻击者可以对网站和数据造成无法控制的破坏。 s0md3v 的 XSStrike 本质上是一个 XSS 检测套件,它本身是独一无二的。

开发者声称,他的工具不是简单地测试随机的有效载荷,而是分析网站并生成特别设计的有效载荷。该工具的一些不同功能包括:

  • 语境分析
  • 强大的起毛引擎
  • 支持多线程分析
  • 支持从文件中强制有效负载
  • 定制的 HTML 和 JavaScript 解析器
  • 扫描任何过期的 Javascript 库

** [## 机器学习和深度学习的最佳 Python 库

现代机器学习模型和项目的 Python 库

towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c)

6.谷歌图片下载

星星: 7.1k

分叉者: 1.7k

开发人:哈迪克·瓦萨

GitHub 链接:https://github.com/hardikvasa/google-images-download

Hardik Vasa 的脚本可以让你一次从谷歌下载数百张图片到你的电脑上。这个工具的工作方式是你安装这个库,使用这个命令,把你想要的关键字作为参数,让这个工具发挥它的魔力。rebound 本质上是在 Google Images 的索引中搜索带有指定关键字的图片,一旦找到就下载它们。

您也可以使用另一个 Python 文件中的库,它仍然可以照常工作。如果你需要一次性从谷歌上下载大量图片,这确实是一个有趣而有用的项目。

7.光子

星星: 7k

分叉者: 965

开发人: Somdev Sangwan

GitHub 链接:https://github.com/s0md3v/Photon

Photon 是一个强大且易于使用的网络爬虫,它是使用 Python 构建的。 s0md3v 的 轻量级快速爬虫遵循开源智能框架的指导方针和方法,允许收集和分析从开放或公共来源获取的信息。

Photon 可以从许多来源获取信息,其中包括:

  • URL,包括带参数的 URL
  • 社交媒体账户、电子邮件
  • pdf、png、XML 文档等文件
  • 子域
  • JavaScript 文件

Photon 将所有提取的信息有条不紊的保存起来,甚至可以导出为 JSON 文件。该工具还提供了各种选项来定制其工作,如控制超时,排除一些网址,等等,我们建议您深入研究一下。

[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24)

8.神经语言

星星: 5k

分叉者: 1.2k

开发人:安德烈·卡帕西

GitHub 链接:https://github.com/karpathy/neuraltalk2

在其核心,NeuralTalk 是一个用 Python 和 NumPy 编写的图像字幕项目,它使用了多模态递归神经网络。由于技术的改进和更好的硬件支持,开发者发布了比最初的 NeuralTalk 更好更快的 NeuralTalk2,

使用批量实现,NeuralTalk2 仍然使用 RNN s 的,并且是基于 Torch,并且可以在 GPU** 上运行,同时支持 CNN 微调。虽然开发者已经弃用了最初的 NeuralTalk,但它仍然可以在 GitHub 上找到,任何人都可以看看。**

9.Xonsh

星星: 3.9k

分叉者: 434

GitHub 链接:https://github.com/xonsh/xonsh

读作 conch ,你可以把 Xonsh 看作是一种由 Python 驱动的跨平台 shell 语言。Xonsh 使得使用 Python,甚至是最基本的任务,变得更好,因为它深深地集成在 Xonsh 中。

使用 Xonsh,不用输入“$ echo 2+2”,您可以只使用$ 2+2,它仍然会给出正确的结果。多简单啊!

开始使用 Xonsh shell 也非常简单,只需根据您的环境使用正确的命令安装它,一切都准备好了。Xonsh 可用于许多包管理器,包括 pip、Conda、Apt、Brew、等等。至于它的特性,Xonsh 是易于脚本化的,有一个大型的标准库,带有类型化变量、等等。

10.篮板球

星星: 3.3k

分叉者: 299

开发人员:乔纳森·肖布鲁克

GitHub 链接:https://github.com/shobrook/rebound

编译器错误通常会令人非常沮丧和困惑。唯一的解决方法是前往 栈溢出 或者阅读文档。Jonathan Shobrook 和他著名的工具 rebound 已经找到了一种方法,可以让你在处理那些烦人的编译器错误时更加轻松。

rebound 的工作方式是用这个工具运行你的文件,它会检查文件中存在的任何编译器错误,并获取它能找到的任何相关的堆栈溢出线程。

Rebound 在终端和浏览器中加载线程的能力不仅对新手来说是救命稻草,对资深程序员来说也是如此,节省了他们无休止地寻找答案的时间。目前反弹只支持 Python、node . jsRubyGolang,以及Java

结论

创造力也没有限制。像这样的 GitHub 项目是人们创造力和才华的完美展示。但是这仅仅是冰山一角,因为 Python 可以被用于执行广泛的活动,假设你有专业知识和你想要实现的清晰的图片。随着 Python 的不断发展,越来越多的开发人员将开始使用它来构建惊人的、足智多谋的项目,就像我们上面提到的那些项目。让这篇文章成为你的灵感之源,唤醒你头脑中沉睡的想法,让事情运转起来。

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

如果你有更多的建议或想法,我很乐意倾听。

更多有趣的读物

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

[## 面向所有人的顶级谷歌人工智能工具

使用谷歌人工智能中心将想法变为现实

towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## Python vs. Node。JS:哪个最适合你的项目?

使用一组预定义的因素对 Python 和 Node.js 进行详细比较

towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## 2020 年必读的数据科学书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 面向数据科学的顶级 Python 库

面向数据科学的流行 Python 库概述

towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b) [## 数据科学家的最佳数据科学工具

数据科学工具,使任务可以实现

towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88) [## 2020 年必读的机器学习书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7)

关于作者

克莱尔维。是位于Digitalogy的内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。在 上跟我连线Linkedin&Twitter。********

寻找数据科学工作的 10 大网站和资源

原文:https://towardsdatascience.com/top-10-websites-resources-for-your-data-science-job-hunt-988cfe62a3c5?source=collection_archive---------19-----------------------

利用这些资源让你的求职更上一层楼

克里斯多佛·萨丁纳在 Unsplash 上的照片

我知道许多人因为冠状病毒而被解雇,并且正在寻找工作。在过去的几年里,我和我的朋友们发现了一些惊人的资源,它们真的对我的求职很有帮助。下面是几个求职板、论坛和网站,你可以在找实习或全职工作时加以利用!

这篇文章有两个部分: 求职板面试准备 资源我强烈建议你特别利用面试准备资源!

工作公告板

1.y 组合公司(YC)

网站链接 此处

Y Combinator 是世界上最大的种子加速器之一,已经投资了一些非常成熟的科技公司,如 Stripe、Airbnb 和 DoorDash。他们也有一个求职平台,可以帮你联系到 400 多家由 YC 资助的创业公司。

2.天使列表

网站链接 此处

AngelList 是为创业公司提供投资和招聘的最大平台之一。像 LinkedIn 一样,你可以创建自己的个人资料,填写自己的信息,并获得一些创业职位。我发现,如果你在寻找较小的创业公司(1-10 人),这个网站特别好。

3.超狗 io

网站链接 此处

超狗 io 主页

《超狗》的独特之处在于,它只在纽约、旧金山和洛杉矶等少数几个城市提供创业职位。也就是说,他们专注于保持招聘信息的高质量,他们有大量顶级科技初创公司,如 Instacart、Lever 和 Airtable。

4.StackOverflow

网站链接 此处

StackOverflow 是最大的编程和工程问答网站之一。碰巧他们也有一个就业委员会!这不仅是数据科学家的绝佳去处,也是软件工程师和开发人员的绝佳去处。

面试准备

5.Leetcode

网站链接 此处

Leetcode 类似于 HackeRank 和 InterviewBit,是一个可以通过完成编码挑战来练习编码技能的网站。这是复习排序算法和 SQL 的好地方。他们还增加了一个新功能,你可以在那里练习模拟面试!总的来说,我强烈建议你用这个来帮助你准备技术面试。

6.面试查询

网站链接 此处

我想我会分享这个网站,因为它是一个非常新的和独特的资源。你可以把它想象成 Leetcode,但它是专门为数据科学家设计的。它有一个巨大的技术问题库,您可以使用它来帮助准备您的数据科学工作。如果您注册,他们会在每周一、周三和周五向您发送一个数据科学问题。如果这还不够,你还可以支付一个高级帐户。

7.助推启动法

网站链接 此处

Jumpstart 是一个非常好的资源,我最近才通过一个朋友看到它。你可以把它想象成 Reddit,但是是为了技术工作。虽然主要用作论坛,但他们也有自己的工作板,并有一个充满各种技术活动的日历,你可以报名参加!

8.玻璃门

网站链接 此处

是的,我知道 Glassdoor 是一个工作板。但就我个人而言,我从来没有真正把它用于那个目的。相反,我喜欢用它的独特功能,如查看公司评论和为众多公司面试提问的能力。如果你申请的是你从未听说过的公司,利用这一点,知道你将进入什么样的公司。如果你想更好地了解一家公司的面试过程,这也是一个很好的资源。

9.屋顶积雪

网站链接 此处

屋顶雪泥在保持匿名的意义上类似于玻璃门,但是它的用途是非常不同的。这是一个很好的资源,你可以向专业人士提问,而不必担心暴露自己。同时,专业人士能够提供诚实的答案,因为他们的身份也是匿名的。你也可以用它来获得员工推荐、简历评论、工作面试建议等等。

10.盲目的

网站链接 此处

与 Rooftop Slushie 类似,Blind 是一个由专业人士组成的匿名网络,在这里你可以提出问题,接受建议,了解工作、公司和行业。

奖金

感谢阅读!

如果你喜欢我的工作,想支持我…

  1. 支持我的最好方式是在媒体这里跟随我
  2. 成为第一批在TwitterT2 上关注我的人之一。我会在这里发布很多更新和有趣的东西!
  3. 此外,成为第一批订阅我的新 YouTube 频道 这里目前还没有视频,但即将推出!
  4. LinkedIn 这里关注我
  5. 在我的邮箱列表 这里报名。
  6. 查看我的网站,【terenceshin.com】T21

2021 年要学习的 12 大数据科学技能

原文:https://towardsdatascience.com/top-12-data-science-skills-to-learn-in-2020-5f635d7d98bf?source=collection_archive---------7-----------------------

用这些数据科学技能提升自己

斯科特·格雷厄姆Unsplash 上拍照

数据科学领域带来了各种科学工具、流程、算法和从结构化和非结构化数据中提取知识的系统,用于识别其中有意义的模式。

数据科学处于最近引领信息技术领域创新的最前沿。作为 人工智能及其一系列智能工具 带来的变化的关键因素,数据科学通过为分析师和研究人员配备 强大的工具 和技术来帮助他们从数据中提取关键的洞察力。

随着数据科学领域的竞争日益激烈,跟上最新创新的需求也在增加。为了利用数据科学最大限度地利用数据,你必须用各种常用工具和技能提升自己的技能,这样你才能在一些可靠信息的支持下自信地回答手头的问题。这篇文章背后的目标是让你熟悉一些在 2020 年受欢迎的最新数据科学技能

数据科学是让数据变得有用的学科

[## 2020 年必读的数据科学书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 2020 年的数据科学趋势

新十年的关键数据科学趋势

towardsdatascience.com](/data-science-trends-for-2020-9b2ee27af499)

2020 年要学习的数据科学技能

“我们正在进入一个数据可能比软件更重要的新世界。”——
——蒂姆·奥莱利

数据科学使用一系列的方法、算法和系统,处理从各种数据来源中提取有洞察力的和改变游戏规则的知识,而不管其存在时间。如果你想在这个快速发展的领域保持竞争力,你需要定期根据最新的变化更新你的技能。

在接下来的部分中,我们将分享顶级数据科学技能,这些技能不仅会让从业的数据科学家受益,也会让任何热衷于处理大量数据的人受益。

但是在深入研究之前,你也可以在这里查看一些很酷的数据科学项目创意—

[## 12 个适合初学者和专家的酷数据科学项目创意

“到目前为止,您已经完成了多少个数据科学项目?”

towardsdatascience.com](/12-cool-data-science-projects-ideas-for-beginners-and-experts-fc75b5498e03)

1. GitHub

图片来源— Github

如果你编写过任何代码,我们相信你一定听说过 GitHub 。GitHub 是继 栈溢出 之后,今天开发者最常用的工具之一。GitHub 不仅允许开发者毫不费力地在网上托管他们的代码以方便随时访问,还提供版本控制以有效管理他们代码的众多构建通道和版本。

作为开发人员的强大工具,GitHub 还提供了几个企业级特性,例如团队成员之间的安全协作和访问控制,数百个服务的集成支持,以及支持个人开发人员和企业的友好社区。

2.敏捷

照片由 Bonneval SebastienUnsplash 上拍摄

敏捷是一种软件开发和项目管理模型,它通过交付较小但功能性的迭代,而不是一次性开发整个项目,来承认和响应软件开发生命周期中的变化。敏捷在交付迭代之前遵循系统化的方法,通过组织定期的团队会议让每个人都在同一页面上。

随着项目逐渐转化为最终的可交付成果,开发团队会确认任何反馈或变更请求,并在完成每个迭代之前实现它们。

作为一名数据科学家,你可以使用敏捷来计划项目的里程碑并对其进行优先级排序,方法是用估计的时间表明确地定义它们,最后,演示一切并从团队那里收集关于哪里出错的反馈。

3.编程(Python/R)

Unsplash 上拍摄的照片

编程是数据科学的核心。将未处理的数据转化为有用的信息是数据科学家必须具备的核心技能之一。虽然数据科学家可以使用多种编程语言,例如 Julia ScalaSwiftPython R 一直是最受欢迎的编程语言

选择 Python 和 R 的主要原因包括减少开发人员生活中混乱的大量第三方库,这些编程语言在众多面向数据科学的任务中的成功历史清晰易懂的语法,代码的效率以及资源的有效利用。

也读出这些文章—

[## 面向数据科学的顶级 Python 库

面向数据科学的流行 Python 库概述

towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b) [## 数据科学的顶级 R 库

面向数据科学的流行 R 库概述

towardsdatascience.com](/top-r-libraries-for-data-science-29b4e9f4907c) [## 2020 年人工智能工程师的顶级编程语言

从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言

towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0)

4. SQL

在之前的指针中,我们讨论了 编程语言在数据科学 中的重要性,但同样必要的是从数百个来源中提取和处理原始数据的能力。

SQL结构化查询语言直接与数据仓库交互,并将它们转换成有用的信息,然后由开发人员使用。

SQL 通过它的查询提供了各种高级的数据操作技术,使开发人员不仅可以根据自己的喜好重构数据,还可以对数据进行处理。你可以说,除了能够编码之外,数据科学家还必须具有很强的 SQL 知识,以获得必要的有意义的见解。精通这两种语言的数据科学家可以聪明地利用各种可用的库,比如说 Python 或 R ,用 SQL 更快地获得结果。

5.生产准备****

现代数据科学家总是在编写代码,无论是商业利益相关者的临时代码还是新的机器学习模型,但并不是每个人都精通代码。很有可能一小部分数据科学家没有充分接触软件工程,从而导致糟糕的代码。

众所周知,产品代码在其整个生命周期中会被几个开发人员接触到,这就是为什么它必须遵循定义良好的编码标准,以保持代码的可重复性和模块化,同时保持一切都有良好的文档记录。

通过瞄准上述标准,数据科学家可以克服为生产编写糟糕代码的障碍。毫无疑问,这一开始看起来很有挑战性,但是一旦你开始将这些方面整合到你的代码中,你将会看到你的工作质量有了根本性的提高。

** [## 2020 年最佳数据科学博客

最值得信赖和享有盛誉的来源,让您了解数据科学领域的最新动态。

towardsdatascience.com](/best-data-science-blogs-to-follow-in-2020-d03044169eb4)

6.自然语言处理、神经网络和深度学习

照片由像素皮克斯拜拍摄

鉴于人工智能的发展速度,随着其使用越来越广泛,数据科学家越来越有必要对神经网络深度学习 有深入的了解。

自然语言处理在管理和处理人与计算机之间的自动化交互中起着关键作用。这里你最好的例子包括 聊天机器人**语音助手电子邮件过滤工具、语言翻译器**等等。****

人工神经网络 模拟人脑中的神经元网络,帮助解决复杂问题。它的一些现实应用可以在预测股票价值、图像压缩技术、人脸和语音识别中找到。

而深度学习在更深层次上使用多层人工神经网络来解决问题,例如欺诈检测、像素恢复、黑色着色&白色图像、等等。

**** [## 用于自然语言处理的 Python 库

用于自然语言处理的流行 python 库概述

towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64)

7.数学和统计技能

数学和统计学是数据科学的先决条件之一。你会惊讶地发现,数据科学中涉及的大部分过程、算法、模型和系统都需要强大的数学和统计背景。

获得这些知识不仅会让你理解这些算法和方法背后的逻辑,还会确保你的洞察力是准确的、可信的,并且没有离群值。更重要的是,您将能够更详细地探索数据,找出任何隐藏的模式和趋势,并找到数据中变量之间的任何关系或依赖关系。

8.机器学习

数据科学是一个更广泛的术语,包括机器学习。简而言之,数据科学处理从数据中提取知识,然后可以在机器学习模型中用作输入数据集。根据这些知识,您可以训练您的系统根据识别的模式执行操作,甚至使用系统进行预测。

现代数据科学家非常希望理解机器学习 中涉及的概念和 算法,例如各种监督和非监督学习算法。由于您可以使用 Python 或 R 中的各种可用库轻松地应用它们,因此您应该能够确定哪些问题需要什么类型的解决方案。

[## 2020 年必读的机器学习书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [## 12 个最好的免费在线机器学习课程

在经历了无数免费的在线课程后,我们已经为…策划了一些最好的机器学习免费课程

blog.digitalogy.co](https://blog.digitalogy.co/best-and-free-online-machine-learning-courses/)

9.AutoML

机器学习 由于行业内的各种创新,机器学习在过去几年中有了相当大的发展,但它仍然依赖人类专家来执行各种相关任务。对于刚接触机器学习的数据科学家来说,应用和优化模型起初似乎很有挑战性。

为了克服这一点, AutoML 被开发出来,它接管了将机器学习模型应用于现实生活问题所涉及的任务,例如预处理和清理数据、选择正确的特征、优化模型的超参数、问题检查以及分析结果。通过自动化这些乏味的任务,数据科学家可以节省大量的时间,而不必担心训练甚至最复杂的机器学习模型,最终提高生产力,即使只有一个小团队。

也看看这些文章—

[## 10 大人工智能技术趋势,可将您的业务推向新的高度

最后更新由克莱尔 d。人工智能无处不在,它已经影响到我们的生活。这是无法逃避的,因为人工智能…

blog.digitalogy.co](https://blog.digitalogy.co/artificial-intelligence-technologies/) [## 日常生活中人工智能的 10 个最佳例子

在过去的几十年里,人工智能一直在发展,它积极地使人们和…

blog.digitalogy.co](https://blog.digitalogy.co/best-examples-of-artificial-intelligence-in-everyday-life/)

10.数据可视化

数据可视化是整个数据科学过程中的关键阶段之一,因为它通过使用各种可视化工具,如图表、图形、直方图,以图形方式让我们第一眼看到数据。正是在这个过程中,数据开始描绘一些模式,我们开始从中汲取有意义的见解,以解决手头的问题。

这些可视化几乎不需要技术技能,非常适合发送给组织中的各种利益相关者。要为您的数据创建信息可视化,您必须了解一些编程语言,如 R 和 Python、以及它们相关的可视化包

11.数据库管理

照片由马库斯·斯皮斯克佩克斯拍摄

一个 DBMS 或数据库管理系统本质上支持 SQL ,允许开发人员创建、操作和查看结构化关系数据,但是在此之上, DBMS 添加了数据库和存储数据的表的创建、管理和操作。

此外,DBMS 还可以充当请求数据的应用程序和数据之间的桥梁,舒适地存放在某个数据存储中。除此之外,DBMS 还可以为数据科学家提供一些有用的功能,其中一些功能包括多用户环境、在粒度级别访问甚至修改数据结构的能力、数据库的备份和恢复。

12.云和大数据

组织喜欢在上运行他们的业务,他们正在积极地从内部基础设施转向云计算

你知道为什么吗?

这是因为云为复杂和资源饥渴的领域提供了强大而又负担得起的计算资源,如人工智能、数据科学、机器学习。这背后的另一个原因是,一些处于创新前沿的行业领先企业,如微软、亚马逊、谷歌、IBM 和英伟达,正在积极致力于使这些服务易于每个人使用。

大数据也从向云计算的转变中受益匪浅,因为它允许数据科学家远程管理遍布全球的节点上存储的数据,并扩展他们的数据流程,而不必担心资源的限制。

更多技术和非技术数据科学技能—

  • 数据争论
  • 数据分析
  • 数据讲述技巧
  • 数据摄取
  • 多变量微积分和线性代数
  • 数据直觉
  • 有效的商务沟通
  • 实验
  • 商业头脑
  • Hadoop 平台
  • 商业智能

结论

随着越来越多的企业开始采用现代数据科学技术,对熟练数据科学家的需求也在增加。为了迎合这种不断扩大的需求,我们分享了 12 项必备技能,这些技能不仅能提高您的数据提取和处理技能,还能大大提高您收集更好见解的分析技能。事实证明,你会在一生中不断学习,在数据科学这样一个不断发展的行业中,你对数据科学领域的当代工具和技术越有经验和技能,你就越有可能在一家知名的不断发展的公司中获得一份高层工作。如果你坚持到了最后,请分享你对这些技能的看法。

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

如果你有更多的建议或想法,我很乐意倾听。

更多有趣的读物

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## 给 Python 开发者的 10 个很酷的 Python 项目想法

您可以使用 Python 构建的有趣想法和项目列表

towardsdatascience.com](/10-cool-python-project-ideas-for-python-developers-7953047e203) [## 2020 年必读的 Python 书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb) [## Python vs. Node。JS:哪个最适合你的项目?

使用一组预定义的因素对 Python 和 Node.js 进行详细比较

towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## 10 家使用 Python 的世界级公司

Python 正被 IT 界的一些巨头积极使用

towardsdatascience.com](/10-world-class-companies-using-python-26cde24919a8)

关于作者

克莱尔 D 。在digital ogy是一个内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。与我连线上 Linkedin&推特 ******

你必须知道的 12 项 Python 开发者技能

原文:https://towardsdatascience.com/top-12-python-developer-skills-you-must-need-to-know-9e2b6c7fc6c?source=collection_archive---------5-----------------------

Python 开发人员必备的顶级技能

照片由 Pexelsolia danilevich 拍摄

Python 是程序员需要多大自由的一个实验。太多的自由,没人能读懂别人的代码;太少,表现力受到威胁。

吉多·范·罗苏姆

在过去的几年里, Python 已经稳步成为行业中无数任务最受欢迎的编程语言之一。Python 为所有开发人员提供了一个坚实的切入点,让他们能够充分利用其多才多艺的特性和它提供的一些好处。

但是仅仅拥有最好的应用程序开发编程语言和工具并不能让你成为一名优秀的 python 开发人员。如果你想成为最好的 Python 开发者,你需要的不仅仅是 Python。

在本文中,我们将了解一些基本技能,这些技能可以提高 Python 开发人员的生产力,并为精英中的精英开辟新的职业选择。

你知道吗?

根据 Stackoverflow 的说法,python 是最受欢迎的语言,这意味着大多数开发人员都使用 Python。

[## 2020 年大一新生热门 Python 面试问答

这里列出了大一新生最常被问到的 python 面试问题和答案,涵盖了核心…

blog.digitalogy.co](https://blog.digitalogy.co/python-interview-questions-and-answers-for-freshers/)

Python 开发人员技能

Python 是你能读懂的最强大的语言。

  • 保罗·杜布瓦

Python 正被积极地用于各种领域,如数据科学、机器学习、网络应用等等。在这一节中,我们将介绍十多项 python 开发人员必备的技能,帮助您掌握使用 Python 的艺术

1.核心 Python 的专业知识

在进入框架或开发环境之前,首先掌握任何编程语言的核心概念是至关重要的。Python 或任何编程语言也是如此。你应该把注意力集中在牢固掌握各种基本概念上,例如:

  • 变量和数据类型
  • 数据结构
  • 异常处理
  • 文件处理
  • 面向对象编程
  • 更多

如果不知道从哪里入手,可以在网上找一些好的有用的资源。你甚至可以使用 Python 参考书,因为它们很好地涵盖了这些主题的深度。

[## 2020 年必读的 Python 书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb)

2. Python 框架

Python 框架对开发者来说是天赐之物。他们最擅长的是加速开发过程,因为他们不再需要担心底层的东西,比如套接字、协议或线程。有几个 Python 框架可以选择,比如 Django Flaskweb 2py Bottle 等等。

一旦 Python 开发人员掌握了窍门,像这样的框架就可以简化他们的生活。Python 框架可以让你快速开发应用原型,因为框架可以从本质上把你从重复输入代码的麻烦中拯救出来。Python 框架的可用性不仅仅局限于 web 应用程序开发,因为它们还延伸到像人工智能、机器学习和数据科学这样的领域。

Python 中的 5 大框架—

3.Python 库

Python 最好的一点是它拥有最大的库集合之一。

根据 Python 包索引 , Python 有超过 26.7 万个项目。无论您计划创建什么,都很有可能已经创建好了,并且随时可以使用,并且有足够的文档。

一个聪明的 Python 开发人员必须足够熟练,能够找到、研究并正确实现 Python 生态系统提供的包,因为您几乎每天都会用到它们。这些库涵盖了广泛的领域,比如人工智能、机器学习、数据科学等等。Python 还有一个 活跃而热情的社区 ,在这里你可以从世界各地的其他开发者那里获得帮助。

一些与 Python 库相关的有用文章—

[## 机器学习和深度学习的最佳 Python 库

现代机器学习模型和项目的 Python 库

towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c) [## 用于自然语言处理的 Python 库

用于自然语言处理的流行 python 库概述

towardsdatascience.com](/python-libraries-for-natural-language-processing-be0e5a35dd64) [## 面向数据科学的顶级 Python 库

面向数据科学的流行 Python 库概述

towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b)

Python 框架和 Python 库的区别—

4.前端技术知识

Florian OlivoUnsplash 上拍摄的照片

如果你认为作为一名 Python 开发者,你只会与后端技术打交道,那你就错了。Python 开发人员经常需要使用前端技术来确保客户端与服务器端相匹配。在企业环境中,为了更好地协调工作流,这通常会涉及 UI/UX 团队、项目经理和 SCRUM Masters。在前端工作让您对应用程序的外观和工作有一个清晰的了解。

但是没有这些职责并不意味着你不应该在你的前端开发技能上努力。掌握一些前端技术,如JavaScript、** CSS HTML 将证明是有益的。尽管这些技能和经验可能不是所有地方都必须具备的,但它们肯定是非常受欢迎的,因为一些项目,如果不是所有的项目,可能会用到它们。**

5.机器学习和人工智能****

像机器学习和人工智能这样的行业最近一直在蓬勃发展。这背后的部分原因是惊人的创新率和行业中这些创新的类似实施率。由于 ML 和 AI 都是非常受欢迎的技术,Python 开发者应该深入研究它们的基础概念和算法以获得清晰的理解。

在处理大量数据的项目时,精通数据科学也将被证明是至关重要的。一旦你提高自己的技能,从数据中获取、分析、可视化和预测信息,你会发现很容易从你的观察中向你的利益相关者描绘出一幅清晰的画面,并伴有任何异常值。

一些有用的机器学习文章—

** [## 机器学习算法之旅

阅读机器学习算法的介绍性列表

towardsdatascience.com](/a-tour-of-machine-learning-algorithms-466b8bf75c0a) [## 2020 年必读的机器学习书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [## 12 个最好的免费在线机器学习课程

在经历了无数免费的在线课程后,我们已经为…策划了一些最好的机器学习免费课程

blog.digitalogy.co](https://blog.digitalogy.co/best-and-free-online-machine-learning-courses/)

6.深度学习

一旦你已经覆盖了人工智能和机器学习的基础,你旅程的下一步应该是深度学习。深度学习是机器学习的一部分,学习过程和技术与我们人类的大脑非常相似。我们有监督、半监督和非监督学习。

一旦你弄清楚什么是深度学习,你应该能够使用你新发现的技能来开发基于深度学习的系统,例如:

  • 推荐系统
  • 自然语言处理
  • 图像识别
  • 自动语音识别
  • 图像恢复
  • 还有更多

7.熟悉 ORM 库

ORMs 或对象关系映射器本质上是一类库,它方便了从关系数据库到 Python 对象的数据传输。开发者可以使用这些库,通过使用 Python 代码而不是 SQL 来直接对存储在他们数据库中的数据进行更改。【SQLAlchemy】、Peewee ORMDjango ORMPonyORM和** 乌龟 ORM 只是 Python 可用的众多 ORM 库中的一部分。**

ORM 库提供的好处通常可以节省大量的开发时间,同时为您提供在需要时切换到另一个关系数据库的灵活性。

8.版本控制

任何软件项目,无论是 Python 还是任何编程语言,在其开发阶段都会经历大量的变更和版本。版本控制可以帮助你追踪最微小的变化,并具有完全的可追溯性。在项目中与其他开发人员合作时,这变得越来越重要。

有一些顶级的版本控制工具,如【Git】MercurialApache Subversion等等,但 Git 是其中最受欢迎的。在学习版本控制的过程中,您会遇到一些术语,如“提交”、“推送”、“拉取”和“分支”T17,它们本质上是版本控制成为可能的原因。请记住,这将是您在使用 IDE 或代码编辑器之后最常用的工具之一,所以我们建议您在学习这一技能时密切关注。****

**** [## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24)

9.了解多流程架构

在开发 web 应用程序时,Python 开发人员必须选择一个开发架构或框架,将应用程序的内部工作与用户分开。现代开发人员可以选择使用模型视图控制器架构或者模型视图模板架构。

虽然这是一个设计工程师的角色,但作为一个 Python 开发人员,您应该对您的代码在发布或部署环境中如何工作有一个基本的了解。在理解了架构之后,一旦您开始在这些环境上工作,您应该能够识别和解决核心框架中的问题,以获得更好和优化的结果。

[## GitHub 上十大热门 Python 项目

像这样的 GitHub 项目是人们创造力和才华的完美展示

towardsdatascience.co](/top-10-trending-python-projects-on-github-fb852cd58262) [## 给 Python 开发者的 10 个很酷的 Python 项目想法

您可以使用 Python 构建的有趣想法和项目列表

towardsdatascience.com](/10-cool-python-project-ideas-for-python-developers-7953047e203)

10.通讯技能

奥斯汀·迪斯特尔Unsplash 上拍摄的照片

良好的沟通技巧不仅是 Python 开发人员的必备技能,也是专业或个人环境中每个人的必备技能。一个具有良好沟通技巧的人在与他人沟通时不会留下任何空白或困惑,并清晰地传达他/她的信息。

由于开发人员经常必须与其他程序员进行结对编程,因此在项目协作或审查代码以保持一致时,清晰的沟通变得更加重要。此外,与您的团队成员进行清晰的沟通可以解决许多问题,并为任何组织带来成功。

11.分析能力

照片由卢卡斯派克斯拍摄

编程有时往往是一项具有挑战性的任务,但如果你缺乏工作所需的分析技能,它将成为你的噩梦。不仅仅是 Python,任何使用任何编程语言的开发人员都应该有很强的分析能力,有丰富的经验,并且对驱动事物的算法有很好的理解。

一个优秀的开发人员拥有的众多技能之一是他们用正确的逻辑编写清晰、无冗余和极度优化的代码的能力。一旦你开始这样做,你应该能够看到你的分析技能得到提高,因为它在数据科学等行业变得越来越相关和重要,在这些行业中,你需要不断地处理、分析和可视化数据。

12。设计技巧

让我们明确一点,我们这里指的不是前端设计的设计技巧。通过设计技巧,我们指的是设计高度可伸缩的系统。如今,企业依靠高效设计的系统和解决方案蓬勃发展,这些系统和解决方案可以在尽可能短的停机时间内为每个人所用。

为了满足这个标准,你必须了解最好的开发技术和工具,例如, Django 或 Flask 。这两个框架都有助于构建在客户端和服务器端都能高效工作的系统。

结论

任何人都可以学习编写代码,但是让你在竞争中占上风的是你采取的方法、你的代码的效率、你对各种包和工具的专业知识。在本文中,我们介绍了 Python 开发人员必备的 10 多项顶级技能。拥有这些技能的有经验的开发人员会脱颖而出。如果你也受到这篇文章的启发,并想通过采用这里提到的技巧来提高自己,我们强烈建议你这样做。这些技能不仅能帮助你提高 Python 开发人员的水平,还能帮助你找到一份更好的工作。

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

如果你有更多的建议或想法,我很乐意倾听。

更多有趣的读物

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

[## 面向所有人的顶级谷歌人工智能工具

使用谷歌人工智能中心将想法变为现实

towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## Python vs. Node。JS:哪个最适合你的项目?

使用一组预定义的因素对 Python 和 Node.js 进行详细比较

towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [## Python vs(和)R 用于数据科学

用一组预定义的因素详细比较 Python 和 R

towardsdatascience.com](/python-vs-and-r-for-data-science-4a32580846a4) [## 10 家使用 Python 的世界级公司

Python 正被 IT 界的一些巨头积极使用

towardsdatascience.com](/10-world-class-companies-using-python-26cde24919a8)

关于作者

克莱尔 D 。在Digitalogy是一个内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。与我连线上 Linkedin,&Twitter********

学习 AWS 的 12 大方法(免费)

原文:https://towardsdatascience.com/top-12-ways-to-learn-aws-for-free-1113af329d06?source=collection_archive---------3-----------------------

提高云计算技能的最佳资源

邦妮·凯特在 Unsplash 上的照片

当你看到这些天的技术招聘广告时,很多都需要一些关于亚马逊网络服务的知识。无论你是一名程序员、数据科学家、数据工程师、开发人员、数据库管理员、数据分析师,还是一名经理,了解 AWS 都是一项重要的技能。即使一些公司使用不同的云提供商,云存储、计算或网络、的主要概念在所有供应商中非常相似。在下面的文章中,我列出了对学习 AWS 非常有帮助的免费资源。

1.AWS 提供的 edX 课程

AWS 在 edX 上创建了一系列高质量的课程(见下面的链接)。这些课程将带您体验一系列服务,包括大量演示、练习和重要概念回顾。你可以选择为每门课程支付 100 美元左右并获得证书,但你不需要这样做——你可以免费旁听课程,并从中获得很多价值。

[## 亚马逊网络服务

亚马逊网络服务(AWS)是世界上最全面和最广泛采用的云平台,提供超过 165 个完整的…

www.edx.org](https://www.edx.org/school/aws)

2.Qwicklabs 实验室

我强烈支持边做边学。Qwicklabs 是一个提供预配置的云环境的平台,这对于刚刚开始使用 AWS 的人来说尤其有价值。该平台允许你尝试不同的服务,而不用担心做错什么或者万一你忘记关闭一些资源时会收到一大笔账单。

尽管你可能不会像在你自己的 AWS 账户中做每件事那样学到很多东西,但该平台为你提供了一个环境,在那里你需要所有的资源来学习一项特定的服务。IAM 角色,安全组)设置完毕。最重要的是,教程为您提供了特定服务的简短介绍以及完成特定任务的逐步说明。

[## Qwiklabs -实践云培训

我们给你亚马逊网络服务的临时凭证,所以你可以使用真实的东西来学习云——不…

aws.qwiklabs.com](https://aws.qwiklabs.com/)

3.AWS 自由层

没有比在现实生活中实际尝试更好的学习方法了。AWS 为您的前 12 个月提供免费等级,这使您可以(有限地)访问最受欢迎的服务。您可以创建自己的帐户,设置账单提醒以避免不必要的费用,并开始提供资源和与您选择的服务进行交互。在这里,您可以找到免费层涵盖的服务的详细概述:

[## AWS 自由层

免费体验 AWS 平台、产品和服务,探索超过 85 种产品并开始…

aws.amazon.com](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)

比如用 t2.medium 笔记本可以免费获得两个月 250 小时的 SageMaker 资源。

4.官方培训网站

如果您想深入了解 AWS,最好的资源可能是官方培训和认证页面,其中包括大量免费资源,涵盖了使用特定服务的理论基础和实际意义。我可以推荐它,尤其是如果你打算获得认证,因为有许多课程是专门为准备认证考试而设计的。

[## AWS 培训和认证

编辑描述

www.aws.training](https://www.aws.training/)

5.AWS YouTube 频道

AWS 有一个官方的 YouTube 频道,包括教程、会议视频和演示如何使用他们的服务。理想情况下,你可以将它与免费等级帐户结合使用,这样你就可以直接尝试你所学的东西。

[## 亚马逊网络服务

Amazon Web Services (AWS)提供了一整套基础设施和应用服务,使您能够运行…

www.youtube.com](https://www.youtube.com/channel/UCd6MoB9NC6uYN2grvUNT-Zg)

6.AWS 播客

AWS 也有一个官方播客,他们在其中分享他们产品的更新,特定主题的建议和用户故事。该播客也可以在谷歌播客上获得,这样你就可以在上下班途中和休息时间轻松收听。

[## AWS 播客|收听并了解 AWS

AWS 官方播客是一个面向开发者和 IT 专业人士的播客,旨在寻找以下领域的最新新闻和趋势…

aws.amazon.com](https://aws.amazon.com/podcasts/aws-podcast/?podcast-list.sort-by=item.additionalFields.EpisodeNum&podcast-list.sort-order=desc)

7.免费 Udemy 课程

Udemy 上有许多付费但也有一些免费的 AWS 课程。例如,这里有两个免费(高评分)的课程,不需要事先了解 AWS:

[## 免费亚马逊 AWS 教程-亚马逊 AWS 教程:学习亚马逊 Web 服务(AWS)

LevelUpCloud 为所有云计算平台提供领先的在线培训。亚马逊网络服务,谷歌云…

www.udemy.com](https://www.udemy.com/course/learn-amazon-web-services-the-complete-introduction/) [## 免费亚马逊 AWS 教程-亚马逊网络服务(AWS) -零到英雄

自 2014 年以来,提供由 AWS 专业级认证讲师讲授的加速学习计划。独一无二的…

www.udemy.com](https://www.udemy.com/course/amazon-web-services-aws-v/)

8.AWS 文档

可能是最“无聊”的,但同时也是你不可避免会大量使用的最有用的资源()在与 AWS 合作时是特定服务的文档化。每项服务都有一个“入门”部分,该部分将指导您逐步调配和配置特定资源。以下是 SageMaker“入门”部分的一个示例:

[## Amazon SageMaker 笔记本实例和 SDK 入门

学习如何使用 Amazon SageMaker 的最好方法是创建、训练和部署一个简单的机器学习模型。至…

docs.aws.amazon.com](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-console.html)

9.常见问题

这听起来可能也很无聊,但是我发现很多 FAQ 对于深入理解具体的服务真的很有用。通过简单的问答形式,你可以快速扩展你对某一特定主题的知识。如果你打算获得认证,常见问题会证明非常有用。AWS 承认,他们的考试问题大量基于常见问题。这也是 SageMaker 服务的一个例子:

[## 亚马逊 SageMaker 常见问题解答-亚马逊网络服务(AWS)

问:亚马逊 SageMaker 在哪些地区有售?有关受支持的亚马逊 SageMaker AWS 地区的列表,请…

aws.amazon.com](https://aws.amazon.com/sagemaker/faqs/)

10.AWS Github 官方页面

在撰写本文时,AWS 有超过 200 个存储库!如果您想了解如何使用特定的 SDK 或找到示例代码来开始您的项目,那么很可能已经有一些包含有用代码示例的存储库。例如,您可以在以下存储库中找到几个涵盖各种数据科学模型的 SageMaker Jupyter 笔记本:

[## AWS/亚马逊-sage maker-示例

这个知识库包含示例笔记本,展示了如何在亚马逊应用机器学习和深度学习…

github.com](https://github.com/aws/amazon-sagemaker-examples/blob/master/README.md)

11.事件

AWS 正在举办许多活动和网络研讨会,这不仅让您可以学习,还可以与其他人联系并提出问题。

[## AWS 活动和网络研讨会

AWS 举办在线和面对面的活动,将云计算社区聚集在一起,进行联系、协作…

aws.amazon.com](https://aws.amazon.com/events/)

12.Reddit 和堆栈溢出

通常,如果你陷入困境,你可能会想请更有经验的人来帮助你前进。软件工程中一个明显的问题是堆栈溢出。除此之外,我发现r/aws subreddit 是一个提问和了解最新消息的好地方。

[## r/aws

r/aws:涵盖亚马逊网络服务(aws)的新闻、文章和工具,包括 S3、EC2、SQS、RDS、DynamoDB、IAM…

www.reddit.com](https://www.reddit.com/r/aws/)

结论

云计算知识变得越来越重要。我强烈建议至少尝试一下 edX 课程,因为我个人从中学到了很多。如果这篇文章有帮助, 跟着我 不要错过我的下一篇文章。例如,在下面的文章中,我讨论了我最喜欢的 AWS 服务之一,Fargate 上的 EKS:

[## AWS 上的无服务器 Kubernetes 集群和 Fargate 上的 EKS

为什么它会改变游戏规则,以及如何使用它

medium.com](https://medium.com/better-programming/serverless-kubernetes-cluster-on-aws-with-eks-on-fargate-a7545cf179be)

学习数据科学的 13 大 YouTube 渠道

原文:https://towardsdatascience.com/top-13-youtube-channels-to-learn-data-science-a9883e280441?source=collection_archive---------21-----------------------

YouTube 上的信息频道,可获取吨关于数据科学的信息视频

来自 Pexels 的【freestocks.org】T2 的照片

数据科学是让数据变得有用的学科。

YouTube 不需要太多的介绍,我们相信你们都知道它在所有年龄段的人群中有多受欢迎。YouTube 不仅是一个巨大的娱乐宝库,也是一个同样重要的教育来源。不可否认,从 YouTube 学习最棒的一点是,获取大量教育视频不需要任何费用。

数据科学和许多其他类似的领域起初可能会令人望而生畏,但有了 YouTube,你可以轻松访问大量关于大量主题的教育和教学视频,包括数据科学。这篇文章背后的目标是向您介绍 YouTube 上的一系列信息频道,这些频道揭开了数据科学的复杂概念,以便您可以按照自己的节奏学习。但是在深入研究这个之前,先看看

一些有趣的数据科学文章—

[## 2020 年必读的数据科学书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb) [## 2020 年最佳数据科学博客

最值得信赖和享有盛誉的来源,让您了解数据科学领域的最新动态。

towardsdatascience.com](/best-data-science-blogs-to-follow-in-2020-d03044169eb4) [## Github 上的 10 个流行数据科学资源

一些顶级的 GitHub 库将教你所有关于数据科学的知识。

towardsdatascience.com](/10-popular-data-science-resources-on-github-7ae288ff4a75)

顶级数据科学 YouTube 频道

数据科学领域带来了各种科学工具、流程、算法和从结构化和非结构化数据中提取知识的系统,用于识别其中有意义的模式。

人人都爱 YouTube,对吧?但是,访问几乎成千上万的关于数据科学的信息视频,不仅涵盖基础知识,还涵盖该领域的最新进展,这难道不是很有趣吗?

大规模在线开放课程(mooc)的时代,YouTube 是一个强大的平台,可以找到你的问题的答案,否则这些问题就不会出现在课程视频中。同时帮你省钱。

我们猜测到现在为止,你对这些频道的了解已经相当兴奋了,很公平,让我们不要再浪费时间,继续关注 YouTube 上专注于数据科学的频道列表。

1.3 蓝色 1 棕色

来源:3 蓝色 1 棕色

3Blue1Brown 是格兰特·桑德森 于 2015 年 3 月创建的一个相当有趣的频道,该频道主要致力于以娱乐的方式教授数学。

你可能想知道为什么我们把这个频道包括在我们的列表中。嗯,这有两个原因。首先是,他在自己的频道上讲述了大量与数据科学领域相关的话题。这些主题包括神经网络、线性代数、傅立叶变换、微积分等。

其次,你在他的视频中看到的那些令人惊叹的可视化效果都是由一个用 Python 编写的名为 manim 的动画引擎创造的,这是格兰特自己创造的。3Blue1Brown 频道有超过 100 次上传,总计1.65 亿次观看

通过他的频道,你会意识到可视化在格兰特的视频中扮演了多么重要的角色,以及 manim 库可以多么漂亮地用来创建一些光滑的视觉效果。

2.freeCodeCamp.org

来源:freeCodeCamp.org

由昆西·拉森于 2014 年 12 月创建的自由代码营是一个的非营利组织,其使命是让人们能够编码并帮助他人。freeCodeCamp 更像是一个面向课程的频道,由一群知识渊博的人运营,他们有很强的编程背景。他们的 YouTube 频道提供各种主题的信息视频,如数据结构、JavaScript、Python、数据科学、机器学习、 Node.js ,迄今为止已有超过1.27 亿次总浏览量

freeCodeCamp 的频道有超过 1100 个视频,其中相当大一部分是至少超过一个小时的内容和代码课程。你也可以访问他们的网站获取超过 6000 份关于编程和道德黑客的教程。

3。send ex

来源:send ex

由 Harrison Kinsley 于 2012 年 12 月创建send ex涵盖了 机器学习自然语言处理数据分析与可视化,以及一些带有树莓 Pi 项目的机器人项目

哈里森简化各种主题的清晰和解释性风格使 Sentdex 成为 YouTube 上最好的数据科学频道之一。该频道拥有超过 1200 个视频和超过 8700 万次观看。Harrison 对 Python 的热爱可以在他的频道上看到,因为他用 Python 讲述了大量编程主题。

他还经营着一个名为 Python 编程教程的网站,在那里你可以找到一个非常详细的 Python 项目的健康集合,并看到事情是如何工作的。如果你对一个更高级的话题感兴趣,比如说神经网络,Harrison 已经写了一本关于它的书,名为《Python 中从头开始的神经网络

一些与 Python 相关的有趣文章—

[## 2020 年你必须使用的最好的 Python IDEs 和代码编辑器

具有显著特性的顶级 Python IDEs 和代码编辑器

towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [## 给 Python 开发者的 10 个很酷的 Python 项目想法

您可以使用 Python 构建的有趣想法和项目列表

towardsdatascience.com](/10-cool-python-project-ideas-for-python-developers-7953047e203) [## 2020 年必读的 Python 书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb)

4.科里·斯查费

来源:科里·斯查费

科里·斯查费的 YouTube 频道主要围绕对现代程序员和研究人员至关重要的编程工具展开,包括编程的基本概念。科里频道上的视频已经获得了超过 4700 万的点击量,并且还在增加。该频道的涵盖了一系列主题,如编程基础知识、Linux 教程、 SQL 教程 Django等等。

对于对数据科学感兴趣的个人,Corey 为您提供了视频播放列表,主题包括 【熊猫】Matplotlib,以及一系列入门视频 Python 。无论您是专业环境中的编程老手,还是学习该技术的初学者,Corey 都提供了考虑到每个人技能水平的教育内容。

5.蒂姆的技术

来源:蒂姆科技

由 Tim Ruscica 于 2014 年 4 月开始,Tim 频道上的视频更多的是侧重于 Python 编程总体上有一些游戏开发使用 PyGame一些机器学习的教程、JavaScript搭配一些框架。随着超过 3200 万的总浏览量,蒂姆的频道有一些关于几个主题的很酷的项目,比如 Flappy Bird 游戏,人脸识别工具,Slack bot 等等。

Tim 也做过一些长的编码直播流,范围从可管理的 2 小时到更累人的 12 小时。你还会在的频道上为新开发者找到一些重要的提示和建议以及一些编程项目想法,还有一些关于 GolangFlutter 的初学者友好教程。如果你喜欢 Tim 频道上的项目,你可以在他的 GitHub repo 上找到代码来跟进他的一些视频。

6. Python 程序员

来源:贾尔斯·麦克马伦

Giles McMullen2008 年 8 月创建了这个频道,以激发世界对 Python 的兴趣,并展示他对编程语言的热爱,因此被命名为 Python 程序员。这些年来,Giles 在他的频道上覆盖了各种主题的大量教程,从更基础的初学者教程,如Python 编程基础到 更高级的主题,如数据科学和机器学习。

你可以在 Giles 的数据科学和机器学习频道上找到一些免费课程,这些课程基本上可以让你对这些学科的核心概念有一个很强的了解。除了涵盖教育主题,Giles 还有关于流行 Python 库的视频,如 Pandas、 NumPy Scikit-learn以及一些方便的技巧,向程序员介绍 Python 的所有技能,或者只是一般编程

7.Josh Starmer 的 stat quest

来源: StatQuest

起初只是向同事解释复杂的统计技术,很快就变成了 Josh 的热情,后来变成了 StatQuest。 StatQuest 消除了人们在理解现代统计学和机器学习充满的复杂术语和方法时通常面临的挑战。

由 Josh Starmer 于 2011 年 5 月创建的 StatQuest 拥有超过 180 个视频,总计有1700 万次观看。在频道中,您会发现一些播放列表解释了各种基本概念,如逻辑回归、线性回归、线性模型。您也可以访问 StatQuest 的网站来查找学习指南,其中包含详细信息,有助于更好地理解子主题,如 AdaBoost、分类树和其他一些主题。

8.克里斯·纳伊克

来源:克里斯·纳伊克

创建于 2012 年 2 月,克里斯·纳伊克的频道让你探索各种主题,不仅是数据科学,还有机器学习和深度学习。如果你是数据科学领域的初学者,我们强烈建议你从播放列表部分开始,特别是“完整机器学习”播放列表。该播放列表不仅会带你完成机器学习,还会教你 Python,因为整个播放列表都是围绕编程语言 Python 展开的。

一旦你访问该频道,你会发现许多播放列表专注于几个方面和主题,如解决面试问题,增强现实,深度学习,统计学,自然语言处理等等。就数字而言,在写这篇文章的时候,Krish 的频道有超过 750 个视频,总浏览量达 1400 万。

[## 2020 年必读的机器学习书籍

看看吧,你为什么要读它们?

towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7)

9.布兰登·福尔茨

来源:布兰登·福尔茨

在访问 Brandon Foltz 的 YouTube 频道时,你会发现一排又一排的视频,涵盖了不同主题的完整课程,如统计学、运营管理、基础会计和管理科学。布兰登的频道创建于 2011 年 8 月,仅差一点就达到了 1950 万的总浏览量,超过 200 次上传

Brandon 的频道特别注重让您全面了解数据科学数学和统计学的各种概念,如线性回归、非线性回归、逻辑回归、概率、模型构建等等。

10.数据学校

来源:凯文·马卡姆

凯文·马卡姆于 2014 年 4 月创办了这个频道,心中只有一个目标,那就是在数据科学世界及其看似神秘的众多概念的旅程中为绝对的初学者提供指导。在开始编写代码之前,Kevin 非常重视用足够的介绍性信息涵盖每个主题的整体。

除了数据科学之外,Kevin 还在他的频道上涵盖了几个主题,如机器学习、数据分析和流行的 Python 库,如 Scikit-learn、DP lyr和 Pandas。凯文的频道有超过 90 个视频,总观看次数超过 750 万。

11.365 数据科学

来源: 365 数据科学

****365 数据科学始于 2017 年 8 月,是一个电子学习频道,拥有大量与数据科学相关主题的教育视频。他们的频道有接近 500 万的观看量跨越超过 160 个视频教程,涉及各种主题,包括机器学习、深度学习、统计学、Python、SQL 和许多其他主题。

他们的 YouTube 频道上的培训材料已经以易懂的方式进行了解释,同时考虑到了初学者和老手。365 数据科学的 YouTube 频道补充了他们的网站,在那里你可以报名参加他们提供的数据科学课程,以更深入地了解这个主题。

12.数据营****

来源:数据营

数据营(Data camp)是一个平台,你可以在这里报名参加一系列精心策划的课程,从现代数据科学、机器学习、、统计学、数据可视化、、编程以及许多其他主题。他们的 YouTube 频道创建于 2014 年 3 月,接近 1200 个视频的大关,总浏览量超过 5500 万。****

在他们的频道上,你会发现关于数据科学的播客,这可以让你彻底了解什么是数据科学,以及它如何造福现代世界。他们还有一堆视频,教你如何开始使用R 和 Python 编程语言 来实现以数据科学为中心的目标。您还将学习数据操作和可视化技术。如果你对这些课程感兴趣,一定要去看看他们的网站。

13.数据科学道场****

来源:数据科学道场

Dojo 这个词源于日语,翻译过来就是沉浸式学习的地方。

数据科学 Dojo 旨在为所有对数据科学感兴趣的人提供类似的学习体验。创建于 2014 年 8 月,他们的 YouTube 频道至今已有超过 300 万的浏览量,他们的上传数接近 250。****

在他们的频道上,你会找到关于 Python 和 R 的教程视频,以及关于数据挖掘和 Azure Studio 机器学习的基础视频。虽然 Data Science Dojo 已经为远程学习或现场学习提供了预先计划的课程,这可能需要更严格的时间表,但您可以使用他们的 YouTube 频道,在最适合您的时间按照您自己的进度学习数据科学。

** [## Github 上的 10 个流行数据科学资源

一些顶级的 GitHub 库将教你所有关于数据科学的知识。

towardsdatascience.com](/10-popular-data-science-resources-on-github-7ae288ff4a75)**

结论

深入 YouTube 的无意义视频的兔子洞是相当容易的,但最终,它大多被证明是浪费时间。YouTube 不仅仅是一个随意播放视频的平台,它也是一个强大的媒体,可以播放大量的教育和知识视频。

数据科学正在彻底改变我们使用数据的方式。如果你渴望成为其中的一员并学习数据科学,我们强烈建议你将 YouTube 添加到你的有用资源列表中。我们写下这篇文章的唯一目标是让我们的观众了解 YouTube 上一些最受欢迎的专注于数据科学的频道。

注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。

如果你有更多的建议,我很想听听。

更多有趣的读物

我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢

** [## 12 个适合初学者和专家的酷数据科学项目创意

“到目前为止,您已经完成了多少个数据科学项目?”

towardsdatascience.com](/12-cool-data-science-projects-ideas-for-beginners-and-experts-fc75b5498e03) [## 2020 年要学习的 12 大数据科学技能

必须用这些数据科学技能提升自己的技能

towardsdatascience.com](/top-12-data-science-skills-to-learn-in-2020-5f635d7d98bf) [## 面向所有人的顶级谷歌人工智能工具

使用谷歌人工智能中心将想法变为现实

towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## 2020 年人工智能工程师的顶级编程语言

从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言

towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0) [## 面向数据科学的顶级 Python 库

面向数据科学的流行 Python 库概述

towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b)

关于作者

克莱尔 D 。在digital ogy是一个内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。与我连线上 Linkedin&推特 **

帮助你赢得面试的 15 个数据科学和统计问题!

原文:https://towardsdatascience.com/top-15-data-science-statistics-questions-to-help-ace-your-interview-c86da6a954fe?source=collection_archive---------32-----------------------

有答案的问题

丹尼尔·麦卡洛在 Unsplash 上的照片

今天,数据科学已经成为世界上最热门和最受欢迎的职业之一。数百万人,包括新生和有经验的专业人士,都在努力获得数据科学行业所需的技能。我从数据科学和统计学中收集了一系列问题,这些问题可能会对面试有所帮助。
注意——这不是一份详尽的问题清单,也不适用于所有人,但它将与 83%的申请人相关。

一般问题

在数据科学项目中,您会遵循哪些不同的步骤?

一般来说,所有数据科学项目都有相同的工作流程
加载 使用适当的命令在 R、Python、SAS(或任何其他语言)上加载给定的数据集。
检查原始数据 —使用散列表计算/平均值/模式检查加载的数据集的准确性/一致性,以确保数据已正确加载。
清理 —对数据集进行缺失值插补、离群点检测等。 预处理方法——如检查独立变量之间的相关性、处理分类变量、创建新的合成变量、合并外部数据(如果存在)。
预建模步骤——包括在训练/测试/验证分割中划分数据,创建一个精度指标,变量缩减技术(主成分、逐步回归等)。
模型创建 —创建不同的统计和数据科学模型,如线性、逻辑、随机森林、gbm、神经网络等,并测试它们的准确性。 部署 服务器上的模型。

始终确保与客户/业务团队进行健康的讨论,以便他们的所有期望都符合上述模型。

有监督和无监督模型有什么区别?

监督模型是那些根据标记数据训练的模型,即我们有一个或多个自变量(x) 和一个因变量(y)。如此创建的训练模型将有助于根据未知或独立变量(x)的未来值预测因变量(y)。* 无监督模型是那些没有经过标记数据训练的模型,即我们只有一个或多个自变量(x),但没有因变量(y)。*在这样的方法中,你允许算法本身发现数据中隐藏的模式。

什么是回归?

它是一种确定两个或多个变量之间统计关系的技术,其中因变量的变化与一个或多个自变量的变化相关联,并取决于一个或多个自变量的变化。
例如:线性回归、逻辑回归

什么是集群?

聚类是一项任务,通过该任务,计算机算法将观察结果分成不同数量的组,使得一个组中的观察结果比其他组中的观察结果更加相似
例如:K 均值、DBSCAN、LOCi

数据清理问题

有哪些不同的数据插补方法,我们为什么要这样做?

如果数据中有缺失值,计算机算法无法计算并抛出错误。一些插补方法有:
连续数据——用平均值代替缺失值
分类数据——用模式
代替缺失值。其他几种插补方法有——正向插补、线性回归、随机森林的 missforest 技术、MICE 等。

为什么我们需要测试异常值?

异常值的出现有几个原因——坏数据、一次性案例、实验误差等。一般来说,它们并不重要,可能会降低模型的准确性或给出不准确的结果,或者两者兼而有之。但是有时候它们非常重要,可以用来发现异常。尤其有助于信用卡、保险索赔等欺诈检测。

预处理问题

什么是相关性,它与回归有什么不同?

相关性是确定两个变量的相互关系或关联的统计度量。相关系数表示两个变量一起移动的程度。
回归描述了自变量与因变量在数字上的关系。回归表示已知自变量(x)的单位变化对因变量(y)的影响

什么是分类变量,我们如何处理它们?

分类变量是那些只能取有限数量的值的变量。像国家这样的变量会有一组确定的值,如印度、美国、韩国、泰国等。分类变量可以有两种类型
序数 —变量的值以某种形式排序。例如:考试成绩可以有一组有限的值,如 A、B、C、D 等,并且可以排序,即 A>B>C>D
名义值——变量具有未排序的值。例:上面提到的国家例子。

有序的分类变量通常可以直接用于建模过程中,但这不适用于名义变量。有多种方法处理它,但最简单和最常用的方法是创建虚拟变量或零热编码变量,并将它们用作建模变量

建模前问题

为什么我们要在训练测试中分割数据?

训练测试有助于模型不对给定的数据进行概括或过度拟合,并有助于在现实世界中表现良好。因此,该模型在训练数据集上被训练,并被用于在看不见的测试数据集上评分和检查准确性。

什么是 R-Square,它与调整的 R-Square 有何不同?

R-Square 确定因变量(y) 的总变化中有多少是由自变量(x) 的变化解释的。(您对直线或曲线的拟合程度如何)。
调整后的 R-square 是 R-square 的修改版本,已针对模型中的预测器数量进行了调整。如果我们在模型中加入无关紧要的变量,调整后的 r 平方将会减少。如果我们增加重要的变量,调整后的 r 平方将会增加

偏倚和方差的区别?

偏差是模型的平均预测值与我们试图预测的正确值之间的差异。具有高偏差的模型很少关注训练数据,并且过度简化了模型。它导致训练和测试数据的高误差(欠拟合 )
方差是给定数据点或告诉我们数据分布的值的模型预测的可变性。高方差模型非常重视训练数据,不会对以前没有见过的数据进行归纳。这种模型在训练数据上表现很好,但是在测试数据上有很高的错误率(过拟合)

通俗地说什么是决策树?

决策树是使用分支方法来说明决策的每一个可能结果的图形。决策规则通常采用 if-then-else 语句的形式。树越深,规则越复杂,模型越合适

建模问题

套索和岭回归有什么区别?

套索和岭回归是不同类型的正则化技术,有助于减少过度拟合。这是通过在损失函数中添加另一个最小化元素来实现的,该元素被称为罚函数。
岭回归(L2) 中,惩罚是系数的平方和。因此,它有助于降低一个不重要变量的系数值。
而在拉索(L1)回归中,惩罚是系数的绝对值之和。因此,它不仅有助于降低系数值,还有助于减少变量。

装袋(随机森林)和助推 (GBM)有什么区别?

bagging 和 boosting 都是建立在决策树上的集成技术,但是:
Bagging: 模型是在从训练数据中随机选择的多个数据子集上训练的。最后,对不同的树进行平均预测(回归)/最高频率(分类)。可能会导致高偏差和低方差。 Boosting: 逐步或顺序训练模型。早期模型相对简单,而以下模型分析前一个模型的误差,并尝试拟合残差。可能导致低偏差和高方差

有哪些不同的准确性指标?

对于回归模型:
MAPE =(y-yhat)/y
RMSE = sqrt((y-yhat)/n)
调整后的 R 平方

对于分类模型:
准确率= TP+TN/TP+FP+FN+TN
精度= TP/TP+FP
召回/灵敏度= TP/TP+FN
特异性= TN/TN+FP
F1 得分= 2(召回精度)/(召回+精度)
Gini = 2*AUC -1
ROC 曲线

20 大数据科学不和谐服务器

原文:https://towardsdatascience.com/top-20-data-science-discord-servers-to-join-in-2020-567b45738e9d?source=collection_archive---------5-----------------------

数据科学|不和谐

去见其他伟大的数据科学家,一起学习

Discordapp.com

如果你以前从未听说过不和,那么你很可能不是一个游戏玩家。但这种情况即将改变。最初,Discord 被构建为一个实时社交平台,游戏玩家可以在这个平台上团结起来,互相交流。但现在,“不和谐”已经成为影响者、YouTubers、memers 以及基本上任何人与他们的社区联系的重要工具。

什么是不和谐

对我来说,我会说 Discord 是 Skype 和 Reddit、丨t丨e丨l丨e丨g丨r丨a丨m丨s丨、Twitter 等社交平台的混合,但没有所有的噪音,加上它自己的独特功能和更干净、更快的用户界面。

不和谐音。说它现在有超过 2 . 5 亿的注册用户,比一年前的 1 . 3 亿有所增加,并且每天有 8 . 5 亿条信息被交换。聊了这么多。

虽然虚拟聚会现在有许多角落,人们可以谈论任何事情(从书籍到网飞的电视节目),但似乎人工智能、机器学习和数据科学也进入了 Discord 服务器,数据科学爱好者和专家聚集在一起分享各种事情,从解决多变量微积分和从头制作神经网络到漫谈如何获得数据科学家的工作以及数据科学家在未来几十年将如何被机器学习取代。

如何使用它

如果你以前从未使用过不和谐,你不知道如何开始,不要担心。超级好用。

在这里注册 Discord 之后,你可以加入不同的服务器,类似于使用自定义邀请链接的 slack channels,你将在本文后面的每个服务器下面看到。每台服务器代表一个社区,您可以直观地在它们之间切换。

在服务器内部,你会在服务器图标旁边看到一个标签列表(频道),聊天在中间,服务器成员在最右边。你也可以选择不使用服务器与你的朋友进行私人对话。

想要更深入地了解如何使用 Discord,请看这个视频

为什么使用不和谐

你可能会问,如果你对 Twitter 和 Reddit 感到舒适,为什么要开始使用这个神秘的紫色聊天平台呢?嗯,原因如下。

Discord 是一个开放式的平台,你可以提出各种各样的问题和询问,以满足你的好奇心。许多有影响力的人和 YouTubers,如 Ninja、Try Guys 和 Philip DeFranco 都喜欢使用 Discord,因为他们喜欢这个以社区为中心的平台和它提供的以隐私为中心的体验。

Discords 的一些好处包括:
1。高度可定制—私人和公共频道、角色、颜色等
2。私人
3。面向聊天

Discord 是一个与人谈论你关心的事情的地方,你可以以任何方式与任何人交往,无论是进行辩论还是分享对模因和笑话的兴趣。

现在你已经了解了什么是 Discord,这里有一个 Discord 上的服务器列表,你可以在这里提出任何关于 AI、ML、数据科学等方面的问题。数据科学不是在公园里散步,你必须在学习如何编码的同时解决困难的统计和概率概念,更不用说你必须掌握的沟通技巧了。

不和谐是一个很好的地方,让你找到一个朝着同一目标努力的社区,它可以激励你超越自己的极限。

所以,今天就开始使用 discord,加入这些令人惊叹的数据科学服务器吧!

我写关于数据科学和人工智能的文章。如果你想在我发帖时得到通知,现在就订阅我的媒体简讯!

如果你不是普通会员,可以考虑今天就订阅,只需 5 美元。你将直接支持我,你将获得大量的优秀作品!

服务器列表

· [General](#b21c)
  ∘ [1\. Science and Technology](#3679)
  ∘ [2\. Everything Hub](#d0e0)
· [Hacking Skills](#3ff8)
  ∘ [3\. Programming](#43c5)
  ∘ [4\. The Programming Hangout](#510e)
  ∘ [5\. The Programming Server](#d244)
  ∘ [6\. CS50](#5d21)
  ∘ [7\. The Coding Den](#de08)
  ∘ [8\. Python](#9f34)
  ∘ [9\. Planet: Code](#b680)
  ∘ [10\. CP Community](#cefe)
  ∘ [11\. #100DaysOfCode](#a947)
· [Data Science](#d063)
  ∘ [12\. Towards Data Science](#6d7b)
  ∘ [13\. Data Science](#2e0e)
  ∘ [14\. CS Dojo](#9051)
· [Projects/Tutorials](#41d1)
  ∘ [15\. Tech with Tim](#392c)
  ∘ [16\. Sentdex](#241e)
· [ML and AI](#4bae)
  ∘ [17\. /r/LearnMachineLearning](#e6ea)
  ∘ [18\. Fundamentals of ML](#0b35)
  ∘ [19\. Artificial Intelligence Community](#6ddd)
  ∘ [20\. TensorFlow](#99a9)
  ∘ [21\. Learn AI Together](#2573)

一般

数据科学是一个多学科领域,需要从流行病学到金融等各个领域的知识。因此,加入这些服务器将为你未来的努力提供不同种类的信息。

1.科学与技术

致力于科学探索和技术创新的社区!一个分享科学讨论、研究和会见对科学学术界感兴趣的新的和类似的个人的地方。

[## 加入科技不和谐服务器!

查看 Discord 上的科技社区—与 12,743 名其他成员一起闲逛,享受自由的声音和…

不和谐. gg](https://discord.gg/science)

2.一切枢纽

名字说明了一切。这台服务器几乎拥有一切,从动物、运动、电影到技术和编程。

[## 加入一切枢纽不和服务器!

查看 Discord 上的 Everything Hub 社区-与 712 名其他成员一起玩,享受免费的语音和文本聊天。

不和谐. gg](https://discord.gg/ecJcuGA)

黑客技能

数据科学涉及到大量的编码工作,提高编码技能的一种方法是提问(并从 StackOverflow 获得答案)。所有这些服务器都包含狂热的程序员和黑客,他们可以回答你向他们提出的任何问题。问吧!

3.编程;编排

围绕各种编程语言、操作系统以及硬件、安全性和低级编程的活跃社区。

[## 加入编程不和谐服务器!

查看 Discord 上的编程社区—与 11,404 名其他成员一起闲逛,享受免费的语音和文本聊天。

discordapp.com](https://discordapp.com/invite/010z0Kw1A9ql5c1Qe)

4.节目常去的地方

面向编程的社区。TPH 为各类程序员留有一席之地,从完全的初学者到拥有 20 年经验的专家。

[## 加入程序员的 Hangout Discord 服务器!

查看 Discord 上的程序员社区——与 41,211 名其他成员一起玩,享受自由之声…

不和谐. gg](https://discord.gg/programming)

5.编程服务器

拥有数学、ML 和 AI、数据科学和网络安全渠道的编程服务器。初学者询问数据科学相关问题的地方。

[## 加入编程服务器 Discord Server!

查看 Discord 上的编程服务器社区——与 874 名其他成员一起闲逛,享受免费语音和…

不和谐. gg](https://discord.gg/zrrya7H)

6.CS50

计算机科学课程最受欢迎的介绍之一,现在在 Discord 上。跟上他们的最新课程,并与这里的聪明人保持联系!

[## 加入 cs50 Discord 服务器!

在 Discord 上查看 cs50 社区—与 24,828 名其他成员一起闲逛,享受免费语音和文本聊天。

不和谐. gg](https://discord.gg/E7AAncA)

7.编码室

一个可以自由向其他编码员/程序员寻求帮助的地方,或者任何与编码相关的问题。堆栈溢出和 r/coding /r/ programming 等子编辑之间的混搭。

[## 加入编码巢穴不和服务器!

你的代码需要帮助吗?想成为友好的编程社区的一员吗?如果是这样的话,TCD 是适合你的地方…

不和谐. gg](https://discord.gg/code)

8.计算机编程语言

一个围绕 Python 编程语言的巨大社区,对那些希望学习该语言或提高技能的人以及那些希望帮助他人的人开放。

[## 加入 Python Discord 服务器!

专注于 Python 编程语言,我们相信任何人都可以学习编码,并致力于新手开发者…

不和谐. gg](https://discord.gg/python)

9.星球:代码

针对特定编程语言问题的服务器,如 c、CPP、java、python、SQL 等。

[## 加入星球:代码不和谐服务器!

查看星球:不和谐代码社区——与 1,576 名其他成员一起玩,享受免费语音和文本聊天。

不和谐. gg](https://discord.gg/MyRxEUG)

10. CP 社区

一个有竞争力的程序员社区,程序员在这里向代码团队提问。有一个初级题和数学的频道。

[## 加入 CP 社区 Discord 服务器!

在 Discord 上查看 CP 社区社区-与 12,992 名其他成员一起闲逛,享受免费语音和文本…

不和谐. gg](https://discord.gg/5tAk8V8)

11.#100DaysOfCode

臭名昭著的#100 天代码,专注的程序员承诺每天编码 100 天,并发布在 twitter 上。在这个服务器上与其他热心的程序员联系!

[## 加入#100DaysOfCode Discord 服务器!

查看 Discord 上的#100DaysOfCode 社区——与 720 名其他成员一起闲逛,享受免费的语音和文本聊天。

不和谐. gg](https://discord.gg/p6WadTP)

数据科学

12.走向数据科学

一个由社区驱动、维护和管理的项目,不是 TDS 组的正式扩展。询问数据科学问题以及在整个学习过程中获取资源的绝佳服务器。

[## 加入数据共享 Discord 服务器!

查看 Discord 上的数据共享社区—与 1,666 名其他成员一起玩,享受免费语音和文本…

discordapp.com](https://discordapp.com/invite/eaPVRW3)

13.数据科学

一个由数据科学专业人士和爱好者组成的社区。探索该领域的所有不同方面,从可视化和通信到数据工程和模型部署。无论你是学者、学生还是业余爱好者,我们都欢迎!

[## 加入数据科学 Discord 服务器!

查看 Discord 上的数据科学社区—与 1,404 名其他成员一起闲逛,享受免费的语音和文本聊天。

discordapp.com](https://discordapp.com/invite/UYNaemm)

14.CS 道场

CS Dojo 是一个知名的谈论编程相关东西的 YouTuber。加入他的大型社区,在那里讨论编程、游戏开发、网页开发、人工智能和人工智能、数据科学等。是制造出来的。

[## 加入 CS 道场 Discord 服务器!

查看 Discord 上的 CS Dojo 社区-与 4,667 名其他成员一起玩,享受免费的语音和文本聊天。

不和谐. gg](https://discord.gg/NTK2TrM)

项目/教程

这些是 YouTubers 用户的服务器,他们为 Python,机器学习,神经网络等等的教程制作惊人的视频。有蒂姆和森德克斯的 YouTubers】科技是特色。

15.蒂姆的技术

与 Tim 爱好者联系,在那里你可以提出问题、项目建议、python、pygame、机器学习和人工智能。

[## 加入蒂姆不和谐服务器的技术!

在 Discord 上查看 Tim 社区的技术-与 3,887 名其他成员一起闲逛,享受免费语音和文本…

不和谐. gg](https://discord.gg/DphySVr)

16.Sentdex

Sentdex 的社区主要由 Python 程序员组成,但也欢迎其他人加入。#help 频道非常有用。

[## 加入 Sentdex Discord 服务器!

查看 Discord 上的 Sentdex 社区-与 23,279 名其他成员一起闲逛,享受免费的语音和文本聊天。

不和谐. gg](https://discord.gg/YA764TH)

ML 和 AI

这些服务器是为那些需要问机器学习和人工智能问题的人准备的。对这群想和你达成同样目标的人保持激励,并互相分享知识。

17./r/learn 机器学习

一个伟大的社区,所有人都是友好的 ML 爱好者,他们愿意帮助每个人,甚至是完全的初学者。还有臭名昭著的吴恩达机器学习课程和 fast.ai 深度学习课程的自习室。

[## 加入/r/LearnMachineLearning Discord 服务器!

查看 Discord 上的/r/LearnMachineLearning 社区——与 6,910 名其他成员一起玩,享受自由的声音和…

不和谐. gg](https://discord.gg/R8Bcbf4)

18.ML 基础

一个询问关于 ML 的一切的地方,从基本的线性回归到神经网络。

[## 加入基本面 ML 不和谐服务器!

在 Discord 上查看基础 ML 社区-与 154 个其他成员一起玩,享受免费语音和文本…

不和谐. gg](https://discord.gg/pQFXHK4)

19.人工智能社区

一个人工智能爱好者的社区,主要渠道包括机器学习、语言处理、视觉和语音等。

[## 加入人工智能社区 Discord 服务器!

查看 Discord 上的人工智能社区——与其他 432 名成员一起玩,享受免费的…

不和谐. gg](https://discord.gg/HFVStFk)

20.张量流

Tensorflow 是一个端到端的开源机器学习平台。如果您想开始使用 Tensorflow,请先加入此服务器。

[## 加入 TensorFlow Discord 服务器!

在 Discord 上查看 TensorFlow 社区—与 1,314 名其他成员一起闲逛,享受免费语音和文本聊天。

discordapp.com](https://discordapp.com/invite/7a8PCRh)

21.一起学 AI

“一起学习人工智能”是一个非常不和谐的服务器,有近 4000 名人工智能爱好者共享论文,项目,kaggle 竞赛,课程等等。这对任何对人工智能感兴趣的人来说都是一个很好的补充,并且是学习人工智能社区的一部分。

[## 加入一起学习 AI 不和谐服务器!

一起学习,提问,寻找 Kaggle 队友,分享你的项目,等等。都和 AI 有关!| 3,731…

不和谐. gg](https://discord.gg/learnaitogether)

行动计划

马丁·杰恩伯格Unsplash 上拍摄

iscord 服务器令人惊叹,你不仅可以拥有一个分享相同激情和目标的社区,还可以提出各种问题,并在瞬间得到答案。成为这样的社区的一部分很重要,因为数据科学真的很难独自学习。与教科书上的东西相比,其他人的见解和经验是至关重要的。

这是人们最纠结的数据科学的理论部分,尤其是在数学和编程方面。有一个友好和乐于助人的社区,你成为数据科学家的旅程会更顺利。

所以,如果你还没有不和谐,尝试一下。并且开始提问,也回答别人的问题,因为提问证明你确实在学习,而不是假装知道什么。

“永远不要让恐惧阻止你问一些你不了解或不知道的问题。假装或表现得好像你知道是不明智的。”

凯瑟琳·脉动者

感谢阅读这篇文章,我希望它启发你开始使用不和谐。

请在下面留下您想要分享的任何其他服务器的评论!

查看这些关于数据科学资源的文章。

[## 2020 年你应该订阅的 25 大数据科学 YouTube 频道

以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers

towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客

面向数据爱好者的最佳数据科学播客列表。

towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

请关注我:

快乐的不和谐!

互联网上 20 大免费数据科学、ML 和 AI MOOCs。

原文:https://towardsdatascience.com/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12?source=collection_archive---------1-----------------------

数据科学|机器学习|人工智能

以下是关于数据科学、机器学习、深度学习和人工智能的最佳免费在线课程列表。

天一马Unsplash 上拍照

F21 世纪的正规教育已经转变为一种选择,而不是生活中的一个强制步骤。随着互联网的繁荣和大规模开放在线课程(MOOCs)的兴起,人们可以选择在线学习数据科学,避免学生债务的负担。统计数据显示,电子学习使学生在每小时的培训中多学习 5 倍的材料。在线学习的好处是无限的——从削减成本到灵活的时间表和环境。

数据科学的民主化

现在是 2020 年,数据科学比以往任何时候都更加民主化。这意味着,只要提供适当的工具和大量的数据,任何人都可以在没有专业知识的情况下进行数据科学研究。随着数据渗透到行业的每一个部分,拥有数据科学家的技能将是必不可少的,因为这将产生一支讲数据语言的劳动力队伍。

考虑到这一点,通过利用在线课程,一个完全的初学者开始追求数据科学是可行的。所需要的只是一个结构合理的学习课程、正确的学习方法(超学习)、坚持不懈的动力和热情以及副业/项目。

如何在网上学习数据科学?

最好的 MOOCs 正确的学习方法+激情+项目

因此,在这篇文章中,我将介绍最好的 MOOCs,它们是免费的,在你成为数据科学家的过程中非常有价值。

数据科学文氏图

安德鲁·西尔弗,阿德雷特有限责任公司(2017 年),德鲁·康威(2013 年)

Drew Conway 绘制的这张臭名昭著的维恩图可以形象地展示数据科学的多学科领域。根据这个图表,可以推断出数据科学包括黑客技术、机器学习和多元统计。

我排除了领域专业知识,因为这取决于你工作的公司,而沟通技巧等硬技能无法通过在线课程获得,你需要在现实生活中与人交谈才能做到这一点(尽管这可能令人生畏)。

下面列出的 20 门课程将分为 3 个部分:

1\. Data Science2\. Hacking skills
- Python
- R
- SQL3\. Machine Learning & AI
- Basics of ML & AI 
- Deep Learning
- NLP
- Computer Vision

我没有在课堂上翻来翻去,也没有花几个小时过滤网上的噪音,而是编制了这个列表,其中包含了我认为对学习机器学习、人工智能、数据科学和编程有用的课程。

所以,现在就向下滚动查看列表吧!

网络公开课

约翰·施诺布里奇在 Unsplash 上的照片

0.学习如何学习

这是一门教你人生中最重要的技能之一的课程,那就是学会如何学习。它教你技术和方法,确保你能记住你所学的,并帮助你在现实生活中应用它们。既然学会如何学习是学习任何东西的重要前提,这就是为什么它被列为第 0,这意味着它为下面的其他课程奠定了基础。

[## 学会如何学习:帮助你掌握困难学科的强大心智工具

这门课程让你很容易接触到艺术、音乐、文学专家所使用的无价的学习技巧…

www.coursera.org](https://www.coursera.org/learn/learning-how-to-learn)

数据科学

1.CS109 数据科学—哈佛

CS109 是一门介绍调查的五个关键方面的方法的课程:

  • 数据争论、清理和采样以获得合适的数据集
  • 数据管理,能够快速可靠地访问大数据
  • 探索性数据分析产生假设和直觉
  • 基于回归和分类等统计方法的预测
  • 通过可视化、故事和可解释的总结交流结果。

另外,它是用 Python 教的!

[## CS109 数据科学

预测 Hubway 站的地位由劳伦亚历山大,加布里埃尔 Goulet-朗罗伊,约书亚沃尔夫从数据学习…

cs109.github.io](http://cs109.github.io/2015/index.html)

2.从数据中学习—加州理工学院

对于所有数据爱好者来说,深刻理解机器如何从数据中学习以及如何改进这一过程是最基本的。这是一门介绍性的 ML 课程,涵盖了基础理论、算法和应用。

您将学到的内容:

  • 什么是学习?
  • 机器能学习吗?
  • 怎么做?
  • 怎么做好?

[## 从数据中学习—在线课程(MOOC)

加州理工学院教授亚塞尔·阿布·穆斯塔法教授免费介绍机器学习在线课程(MOOC)

work.caltech.edu](http://work.caltech.edu/telecourse)

3.大数据简介—加州大学圣地亚哥分校

这是大数据时代,所有数据科学爱好者都有义务了解它是什么以及它为什么重要。

您将学到的内容:

  • 术语以及大数据问题、应用和系统背后的核心概念。
  • 大数据对他们的业务或职业有多大用处。
  • 介绍最常见的框架之一 Hadoop

[## 大数据简介| Coursera

了解加州大学圣地亚哥分校的大数据简介。有兴趣增加你的知识…

www.coursera.org](https://www.coursera.org/learn/big-data-introduction)

4.数据科学—约翰·霍普斯金大学

简而言之,本课程教你问正确的问题,操作数据集,并创建可视化的交流结果。

您将学到的内容:

  • 使用 R 来清理、分析和可视化数据。
  • 浏览从数据采集到发布的整个数据科学管道。
  • 使用 GitHub 管理数据科学项目。
  • 使用回归模型进行回归分析、最小二乘法和推理。

最后,您将有一个顶点项目,在这个项目中,您将通过使用真实世界的数据构建一个真实的产品来应用您所学到的技能。然后,该投资组合将描述您在数据科学领域新获得的能力。

[## 数据科学|课程

提出正确的问题,操作数据集,并创建可视化的交流结果。这种专业化…

www.coursera.org](https://www.coursera.org/specializations/jhu-data-science)

数学

5.面向机器学习专业化的数学——伦敦帝国理工学院

这门课程是 ML 专业化的数学课程,涵盖了你需要的所有数学知识,帮助你重温你在学校可能已经忘记的所有概念和理论。最棒的是,这门课教你它在计算机科学中的应用,让你对矩阵和回归与 ML 和数据科学的关系有更直观的感觉。

该专业分为三个主要课程:

  1. 线性代数
  2. 多元微积分
  3. 主成分分析降维

在本专业结束时,您将获得继续您的旅程和学习机器学习方面更高级课程的必备数学知识。

[## 机器学习数学| Coursera

从伦敦帝国理工学院学习机器学习的数学。对于很多机器方面的高级课程…

www.coursera.org](https://www.coursera.org/specializations/mathematics-machine-learning)

6.线性代数—麻省理工学院

由独一无二的吉尔伯特·斯特朗教授授课。斯特朗先生是最好的线性代数讲师(我认为)。因此,如果你正在寻找一个伟大的线性代数课程,这是它。

本课程涵盖矩阵理论和线性代数,强调对其他学科有用的主题。

[## 线性代数

这门课程涵盖矩阵理论和线性代数,强调在其他学科有用的主题,如物理…

ocw.mit.edu](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/)

7.多变量微积分—麻省理工学院

多变量微积分是数据科学中的另一个重要概念。从简单的线性回归到支持向量机和神经网络,都需要微积分。

本课程涵盖一元以上函数的微分、积分和向量微积分。

[## 多元微积分

丹尼斯·奥鲁。18.02SC 多元微积分。2010 年秋天。麻省理工学院:麻省理工学院开放式课程…

ocw.mit.edu](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)

8.概率与统计——斯坦福

概率和统计是数据科学中所有奇迹发生的基础。如果没有 p 值和二项式分布以及所有这些术语,用数据进行预测将是不可能的。

您将学到的内容:

  1. 探索性数据分析
  2. 生产数据
  3. 可能性
  4. 推理

很遗憾,课程已经结束,所以下面是复习资料! 或者想要卡耐基梅隆类似的课程,点击 这里

[## CS 229 -概率和统计复习

你想看看你母语的备忘单吗?可以在 GitHub 上帮我们翻译一下!由 Afshine…

stanford.edu](https://stanford.edu/~shervine/teaching/cs-229/refresher-probabilities-statistics)

黑客技能

9.谷歌的 Python 课程

谷歌为初学者提供的免费课程。本课程主要由笔记、视频和大量编码练习组成,帮助您开始使用 Python 编码。我发现它很有用,我把它推荐给所有想开始学习 Python 的人。

[## 谷歌的 Python 课| Python 教育|谷歌开发者

欢迎来到谷歌的 Python 课程——这是一门免费课程,面向有一点编程经验的人,他们…

developers.google.com](https://developers.google.com/edu/python/)

10.Python 应用数据科学— UMich

密歇根大学专业的 5 门课程通过 python 编程语言向学习者介绍数据科学。本课程使用便捷直观的 Jupyter 笔记本。

5 门课程:

  1. 数据科学导论
  2. 应用绘图、图表和数据表示
  3. 应用机器学习
  4. 应用文本挖掘
  5. 应用社会网络分析

又一门 Python 课程!

[## 使用 Python 的应用数据科学

密歇根大学专业的 5 门课程通过 python 向学习者介绍了数据科学

online.umich.edu](https://online.umich.edu/series/applied-data-science-with-python/)

11.R 专业统计学—杜克大学

这个专业帮助你掌握 R 语言的分析和可视化,R 语言是数据科学领域的顶级编程语言之一。

您将学到的内容:

  • 创建可重复的数据分析报告
  • 统计推断的统一性
  • 执行 frequentist 和贝叶斯统计推断和建模,以了解自然现象并做出基于数据的决策
  • 正确、有效地传达统计结果,不依赖统计术语,评论基于数据的主张,评估基于数据的决策
  • 使用 R 包进行数据分析,并使数据可视化。

[## 使用 R | Coursera 进行统计

在这个专业中,你将学习在 R 中分析和可视化数据,并创建可再现的数据分析…

www.coursera.org](https://www.coursera.org/specializations/statistics)

12.面向数据科学的 SQL 加州大学戴维斯分校

SQL——用于与数据库系统交互的既定语言——是数据科学家检索和处理数据的重要工具。这门课程是为希望将 SQL 添加到 LinkedIn 技能部分并开始使用它来挖掘数据和处理数据的初学者量身定制的。最重要的是,他们将学会提出正确的问题,并给出好的答案,为您的组织提供有价值的见解。

您将学到的内容:

  • 创建表格并能够将数据移入其中
  • 常见运算符以及如何组合数据
  • 案例陈述和概念,如数据治理和分析
  • 讨论有关数据的主题,并使用真实世界的编程作业进行练习
  • 解释源数据中的结构、含义和关系,并作为专业人员使用 SQL 来塑造您的数据,以便进行有针对性的分析。

[## 数据科学| Coursera

从加州大学戴维斯分校学习 SQL for Data Science。随着数据收集呈指数级增长,数据收集也呈指数级增长…

www.coursera.org](https://www.coursera.org/learn/sql-for-data-science?)

机器学习和人工智能

13.机器学习速成班——谷歌

这个速成课程是一个面向有抱负的机器学习从业者的自学指南,它包含一系列课程,包括视频讲座、真实案例研究和动手实践练习。这是谷歌人工智能倡议下的课程之一,鼓励所有人学习人工智能。

[## 机器学习入门|机器学习速成班

本模块介绍机器学习(ML)。预计时间:3 分钟学习目标识别实用…

developers.google.com](https://developers.google.com/machine-learning/crash-course/ml-intro)

14.人工智能的要素—赫尔辛基大学

人工智能的要素是由 Reaktor 和赫尔辛基大学创建的一系列免费在线课程。它旨在鼓励每个人学习什么是人工智能,人工智能可以(和不可以)做什么,以及如何开始创建人工智能方法。这些课程将理论与实践结合起来,可以按照你自己的进度完成。

[## 面向非专家的免费人工智能在线介绍

2018 年春天,Reaktor 和赫尔辛基大学携手合作,帮助人们获得力量…

www.elementsofai.com](https://www.elementsofai.com/)

15.机器学习——吴恩达

吴恩达的机器学习是互联网上最受欢迎的在线课程之一,它拥有一切。从基础到神经网络和 SVM,最后加上一个应用项目。这门课的好处是吴恩达是一位令人难以置信的老师。不好的是,它是在 MATLAB 中教授的(我更喜欢 Python)。

[## 机器学习|课程

机器学习是让计算机在没有明确编程的情况下行动的科学。在过去的十年里…

www.coursera.org](https://www.coursera.org/learn/machine-learning#instructors)

16.面向编码人员的实用深度学习— Fast.ai

如果你想免费学习深度学习,Fast.ai 是一门在线课程。互联网上的每个人都推荐它,对于那些想学习深度学习的人来说,它肯定是一个有价值的资源。本课程利用 Jupyter 笔记本进行学习,PyTorch 作为编码深度学习的主要工具。

[## 程序员实用深度学习,v3

欢迎光临!如果你是所有这些深度学习的新手,那么不要担心-我们将带你一步一步地完成它…

course.fast.ai](https://course.fast.ai/)

17.CS230 深度学习—斯坦福

深度学习是人工智能中最受欢迎的技能之一。在这门课程中,你将学习深度学习的基础,了解如何构建神经网络,并学习如何领导成功的机器学习项目。您将了解卷积网络、RNNs、LSTM、Adam、Dropout、BatchNorm、Xavier/He 初始化等等。

[## CS230 深度学习

深度学习是人工智能中最受欢迎的技能之一。在本课程中,您将学习…的基础

cs230.stanford.edu](https://cs230.stanford.edu/)

18.CS224N 深度学习自然语言处理—斯坦福

自然语言处理是信息时代最重要的技术之一,也是数据科学的重要组成部分。自然语言处理的应用无处不在——网络搜索、电子邮件、语言翻译、聊天机器人等等。在这门课程中,学生将全面了解 NLP 深度学习的前沿研究。

您将学到的内容:

  • 设计、实现和理解你的神经网络模型。
  • PyTorch!

在 Youtube 这里观看。

[## 斯坦福 CS 224N |深度学习的自然语言处理

讲座:太平洋时间周二/周四下午 4:30-5:50 在 NVIDIA 礼堂举行。注册学生的讲座视频…

web.stanford.edu](http://web.stanford.edu/class/cs224n/)

19.CS231n:用于视觉识别的卷积神经网络——斯坦福

计算机视觉在我们的社会中已经无处不在,应用于搜索、面部识别、无人机,最引人注目的是特斯拉汽车。本课程深入探讨深度学习架构的细节,重点是学习这些任务的端到端模型,尤其是图像分类。

您将学到的内容:

  • 实现、训练和调试他们的神经网络
  • 详细了解计算机视觉的前沿研究。

最后一项任务是训练一个数百万参数的卷积神经网络,并将其应用于最大的图像分类数据集(ImageNet)。

在 Youtube 上观看这里

[## 用于视觉识别的卷积神经网络

计算机视觉在我们的社会中已经变得无处不在,在搜索、图像理解、应用程序、地图绘制…

cs231n.stanford.edu](http://cs231n.stanford.edu/2017/)

补充课程

行动计划

奥利弗·尼布赖特在 Unsplash 上拍摄的照片

L 在线学习数据科学有时会很难,因为没有结构化的课程告诉你该做什么。但是不要这样看,要意识到你有自由去构建一条适合你的学习道路,并能激发出你最好的一面。一件好事是你可以在大脑效率最高的时候学习,在效率较低的时候休息。此外,你可以根据自己的兴趣和热情决定学什么。

建议

在网上学习的时候,有几个小窍门,那就是总是做简单的笔记,在一天结束的时候写下心得,或者写下你所学到的东西。同样,通过向朋友和家人解释你所学到的东西来利用费曼技术也很重要,尤其是对于像数据科学这样复杂的学科。

此外,当学习机器学习算法和神经网络时,在编写代码的同时学习它是至关重要的,这样你可以看到你正在学习什么,并对手头的主题有更好的理解。成为 Reddit、 Discord 等在线社区的一员也不错。因此,您可以提出问题,并从专家那里获得很好的答案。

总结一下:

  1. 记笔记/写博客
  2. 使用费曼技术
  3. 编码和概念(从头开始创建神经网络)
  4. 加入数据科学在线社区,提出问题

最后,我引用亚瑟·w·奇克林和斯蒂芬·c·埃尔曼的一段话

“学生们仅仅坐在教室里听老师讲课、背事先准备好的作业,并快速给出答案,是学不到多少东西的。他们必须谈论他们正在学习的东西,反思性地写下来,将它与过去的经历联系起来,并应用到他们的日常生活中。他们必须让他们所学的成为自己的一部分。”

感谢阅读,我希望这篇文章对你有用。

请在评论中留下您建议的任何其他免费的数据科学在线课程!

点击这里查看我的其他文章!

数据科学工具箱—数据科学介绍系列

[## 数据科学简介

关于什么是数据科学、大数据、数据和数据科学过程及其应用。

towardsdatascience.com](/the-data-scientists-toolbox-part-1-c214adcc859f)

阅读我的超学习数据科学系列,其中提供了大量关于有效学习的建议和技巧。

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)

这里有一些很棒的数据科学资源!

[## 2020 年你应该订阅的 25 大数据科学 YouTube 频道

以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers

towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客

面向数据爱好者的最佳数据科学播客列表。

towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e) [## 关于人工智能和大数据的 20 大电影。

这里有一些人工智能和大数据电影,你应该在新冠肺炎封锁期间在家观看。

towardsdatascience.com](/top-20-movies-about-machine-learning-ai-and-data-science-8382d408c8c3)

联系人

如果你想了解我的最新文章,请关注我的媒体

其他联系方式:

快乐学习!

大数据和数据科学的 20 大最新研究问题

原文:https://towardsdatascience.com/top-20-latest-research-problems-in-big-data-and-data-science-c6fb51e03136?source=collection_archive---------2-----------------------

5 类问题陈述、研究方法和研究实验室

尽管截至 2020 年,大数据已经成为运营的主流,但研究人员仍然可以解决一些潜在的问题或挑战。其中一些问题与数据科学领域重叠。在本文中,根据我的个人经验(考虑到我所在组织的知识产权)和这些领域的最新趋势,涵盖了大数据和数据科学结合中最有趣的 20 个最新研究问题[1,2]。这些问题涵盖在 5 个不同的类别下,

处理规模的核心大数据领域

处理数据中的噪音和不确定性

安全和隐私方面

数据工程

大数据和数据科学的交汇点

本文还涵盖了解决特定问题的 研究方法 以及在这些领域开展工作的 顶级研究实验室 以供参考。

我鼓励研究人员解决将对整个社会产生更大影响的应用研究问题。强调这一点的原因是,我们几乎没有分析 1%的可用数据。另一方面,我们每天都在产生万亿字节的数据。这些问题不是特定于某个领域的,而是可以跨领域应用的。

我先来介绍一下 大数据的 8v(基于 Elena 的一篇有趣文章),即体量、价值、准确性、可视化、多样性、速度、粘性、病毒式。如果我们仔细观察图 1 中各个 V 的问题,它们引发了研究人员的兴趣点。即使它们是商业问题,也有潜在的研究问题。比如 02-Value:“最需要的时候能找到吗?”有资格分析可用数据,并在需要时给出上下文相关的答案。

图 1: 8V 大数据提供: Elena

理解了大数据的 8V 之后,让我们来看看要解决的研究问题的细节。通用大数据研究主题的台词是:

  • 可扩展性—并行数据处理的可扩展架构
  • 实时大数据分析—文本、图像和视频的流数据处理
  • 用于大数据采用和分析的云计算平台—降低云中复杂分析的成本
  • 安全和隐私问题
  • 高效存储和转移
  • 如何有效地对不确定性建模
  • 图形数据库
  • 用于大数据分析的量子计算

接下来,让我涵盖上面提到的五个类别中的一些具体研究问题。

核心大数据区处理规模相关的问题:-****

  1. 可扩展的并行数据处理架构:

Hadoop 或 Spark 类环境用于离线或在线处理数据。行业正在寻找可扩展的架构来执行大数据的并行数据处理。近年来有了很大的进步,但是,还有巨大的潜力来提高性能。

2. 在分布式云中处理实时视频分析:

随着互联网的普及,甚至在发展中国家,视频已成为数据交换的常用媒介。在这方面,电信基础设施、运营商、物联网(IoT)的部署和闭路电视都发挥了作用。能否以低延迟和更高的准确性增强现有系统?一旦实时视频数据可用,问题是如何将数据传输到云,如何在边缘和分布式云中高效处理数据?

3. 大规模高效图形处理:

社交媒体分析就是这样一个需要高效图形处理的领域。图表数据库在大数据分析中的作用在参考文章[4]中有广泛介绍。大规模的有效图形处理仍然是一个迷人的问题。

处理数据中的噪声和不确定性的研究问题:-

4. 近实时识别假新闻:

随着假新闻像病毒一样以爆发式方式传播,实时、大规模地处理假新闻是一个非常紧迫的问题。这些数据可能来自 Twitter 或虚假网址或 WhatsApp。有时,它可能看起来像一个经过认证的来源,但仍然可能是假的,这使得解决问题更有趣。

5. 大规模数据的降维方法:

人们可以扩展现有的降维方法来处理大规模数据或提出新的方法。这也包括可视化方面。人们可以使用现有的开源贡献来开始并回馈开源。

6. 在嘈杂环境和不完全数据下的训练/推理 :

有时,人们可能得不到输入数据的完整分布,或者数据可能由于噪声环境而丢失。可以通过过采样、合成少数过采样技术(SMOTE)或使用生成式对抗网络(GANs)以有意义的方式扩充数据吗?增强有助于提高性能吗?如何训练和推断是需要解决的挑战。

7. 处理大数据处理中的不确定性:

有多种方法可以处理大数据处理中的不确定性[4]。这包括子主题,例如如何从低准确性、不完整/不精确的训练数据中学习。当数据量很大时,如何处理未标记数据的不确定性?我们可以尝试使用主动学习、分布式学习、深度学习和模糊逻辑理论来解决这些问题。

安全 和隐私【5】领域的研究问题:-

8. 超大规模系统的异常检测:

异常检测是一个非常标准的问题,但在大规模实时应用中却不是一个微不足道的问题。应用领域的范围包括医疗保健、电信和金融领域。

9. 大规模系统中敏感领域的有效匿名 :

让我举一个医疗系统的例子。如果我们有一个胸部 x 光图像,它可能包含 PHR(个人健康记录)。在一个大规模的系统中,如何匿名敏感领域以接近实时地保护隐私?这也可以应用到其他领域,主要是为了保护隐私。

10. 真实世界应用的安全联邦学习:

联邦学习能够对分散数据进行模型训练。如果由于法规/隐私问题而无法共享数据,但仍然需要在本地构建模型,然后跨边界共享模型,则可以采用这种方法。我们是否还能让联合学习大规模运行,并通过标准的软件/硬件级别的安全性来确保它的安全性,这是下一个需要解决的挑战。感兴趣的研究人员可以从 UCB 的 RISELab 获得这方面的更多信息。

11. 大数据上可扩展的隐私保护:

大规模数据的隐私保护是一个具有挑战性的研究问题,因为其应用范围从文本、图像到视频不尽相同。国家/地区级别隐私法规的差异将使问题更难处理。

数据工程方面相关的研究问题

12. 轻量级大数据分析即服务:

一切提供即服务是行业的新趋势,如软件即服务(SaaS)。我们能否致力于提供轻量级大数据分析服务?

13. 自动转换算法到 MapReduce 问题:

MapReduce 是大数据中众所周知的编程模型。它不仅仅是一个 map 和 reduce 函数,还为应用程序提供了可伸缩性和容错性。但是直接支持 map-reduce 的算法并不多。我们能建立一个库来自动转换标准算法以支持 MapReduce 吗?

14. 火花簇的自动化部署:

最近 spark 集群的使用取得了很大的进步,但是它们还没有完全为自动化部署做好准备。这是另一个需要进一步探索的挑战性问题。

大数据与数据科学交叉的研究问题:-

15.用较少的数据样本使模型学习的方法:****

在过去的 10 年里,随着更多数据和计算能力的可用性,深度学习模型的复杂性增加了。一些研究人员自豪地声称,他们在深度学习中解决了一个有数百层的复杂问题。例如,图像分割可能需要 100 层网络来解决分割问题。然而,最近的趋势是,有人能用较少的相关数据和较少的复杂性解决同样的问题吗?这种想法背后的原因是在边缘设备上运行模型,而不仅仅是在使用 GPU/TPU 的云环境中。例如,在大数据上训练的深度学习模型可能需要部署在闭路电视/无人机中以供实时使用。这从根本上改变了解决复杂问题的方法。你可以在这个副题中解决挑战性的问题。

16.神经机器翻译为本地语言:****

人们可以使用谷歌翻译进行神经机器翻译(NMT)活动。然而,在政府的支持下,当地大学有很多研究用当地语言进行神经机器翻译。变压器双向编码器表示(BERT)的最新进展正在改变解决这些问题的方式。人们可以通过合作来解决现实世界的问题。

17.处理现实世界应用的数据和模型漂移:****

如果我们知道数据模式在变化,模型的性能会下降,我们需要对推理数据运行模型吗?甚至在将数据传递给模型之前,我们能识别数据分布中的漂移吗?如果一个人可以识别漂移,为什么要传递模型推断的数据,浪费计算能力。这是一个迫切需要在现实世界中大规模解决的研究问题。主动学习和在线学习是解决模型漂移问题的一些方法。

18.在实时应用中处理深度学习模型的可解释性:****

可解释的人工智能是最近的热门词汇。可解释性是可解释性的子集。机器/深度学习模型不再是黑箱模型。像决策树这样的模型很少是可以解释的。但是,如果复杂性增加,基础模型本身可能无法解释结果。我们可能需要依赖替代模型,如局部可解释模型不可知解释(LIME) / SHapley 附加解释(SHAP)来解释。这可以帮助决策者证明所产生结果的合理性。例如,拒绝贷款申请或将胸透归类为新冠肺炎阳性。可解释模型能处理大规模实时应用吗?

19.构建上下文相关的大型系统:****

构建大规模上下文相关系统是最新的趋势。有一些开源的努力来启动。然而,它需要大量的努力来收集正确的数据集,并建立上下文敏感的系统来提高搜索能力。如果你有搜索、知识图和自然语言处理(NLP)的背景,你可以在这个主题中选择一个研究问题。这适用于所有领域。

20.构建基于大规模生成的会话系统(聊天机器人框架)😗***

一个获得动力的特定领域是建立对话系统,如问答和聊天机器人生成系统。有很多聊天机器人框架可用。使它们具有生成性并在实时对话中准备摘要仍然是具有挑战性的问题。随着规模的扩大,问题的复杂性也在增加。这个领域正在进行大量的研究。这需要很好地理解自然语言处理和最新的进展,如来自变压器的双向编码器表示(BERT),以扩大对话系统可以大规模解决的范围。

研究方法:

希望你能从上面强调的主题中 用你的领域和技术专长 框出具体的问题。让我来推荐一种方法来解决这些问题。有些观点对研究人员来说可能是显而易见的,但是,为了让更多的读者感兴趣,让我来介绍一下这些观点:

****确定你的核心优势无论是在理论、实现、工具、安全,还是在特定领域。你可以在做研究的时候获得其他新技能。用合适的数据确定正确的研究问题差不多达到了里程碑的 50%。这可能与其他技术领域重叠,如物联网(IoT)、人工智能(AI)和云。你对研究的热情将决定你能在解决这个问题上坚持多久。趋势是跨部门的跨学科研究问题。因此,人们可以选择一个特定的领域来应用大数据和数据科学的技能。

****文献调查:我强烈建议只关注经认证的出版物,如 IEEE、ACM、Springer、Elsevier、Science direct 等……不要落入“国际期刊”的陷阱,这些出版物没有经过同行评议。请不要将文献调查仅限于 IEEE/ACM 论文。许多有趣的论文可以在 arxiv.org 的论文中找到,论文代码为。人们需要根据入围的主题检查/跟踪行业和学术界的顶级研究实验室。这提供了最新的研究更新,并有助于确定需要填补的空白。

****实验室生态系统:创造良好的实验室环境,开展强有力的研究。这可以是在你的研究实验室里,与学术界的教授、博士后、博士、硕士和本科生在一起,或者与工业界的高级、初级研究人员在一起。拥有正确的伙伴关系是合作的关键,你也可以尝试虚拟团体。拥有良好的生态系统可以提高结果,因为一个人可以挑战其他人进一步改善结果的方法。

通过正确的途径发表:**正如文献调查中提到的,在正确的论坛上发表研究论文,在那里你将收到来自世界各地专家的同行评议。在这个过程中,我们可能会遭到拒绝。然而,只要你收到了建设性的反馈,你就应该感谢匿名评论者。如果方法新颖、非显而易见且有创造性,你可能会看到申请专利的潜在机会。最近的趋势是在发表论文的同时开源代码。如果您的机构允许它开源,您可以通过在 Github 中上传相关代码,并附上适当的许可条款和条件。

值得关注的顶级研究实验室:

其中一些研究领域活跃在全球顶尖的研究中心。我请求你们遵循这些建议,找出进一步的差距,以便继续开展工作。以下是全球大数据+数据科学领域的一些顶级研究中心:

美国柏克莱大学 RISE 实验室

英国爱丁堡大学数据科学博士研究中心

美国哥伦比亚大学数据科学研究所

美国约翰·霍普斯金大学数据密集型工程与科学研究所

脸书数据科学研究

英国牛津大学大数据研究所

美国奥斯汀德克萨斯大学大数据分析中心

美国奥克兰大学数据科学和大数据分析中心

瑞士苏黎世联邦理工学院机器学习研究所

英国艾伦·图灵研究所

IISc 计算和数据科学研究

美国卡内基梅隆大学数据实验室

如果你想继续你在大数据方面的学习,我有以下建议:

Coursera 大数据专业化

加州大学圣地亚哥分校的大数据课程

根据你的需要,你可以从《印度分析》杂志的总结文章中挑选出前 10 本书。

数据挑战:

在解决现实问题的过程中,人们可能会遇到与数据相关的挑战:

  • 可用数据中的 相关 数据是什么?
  • 缺乏数据隐私法规的国际标准
  • 《通用数据保护条例》( GDPR)是一种跨国家的法规
  • 遵守规则的联合学习概念——人们可以构建模型并共享,但数据仍然属于国家/组织。

结论:

在本文中,我简要介绍了大数据研究问题,并列出了 2020 年大数据和数据科学的 20 个最新研究问题。这些问题被进一步分为 5 类,以便研究人员可以根据他们的兴趣和技能来解决问题。这份清单绝非详尽无遗。但是,我希望这些输入可以激发你们中的一些人解决大数据和数据科学中的真正问题。我在网络研讨会中介绍了这些要点以及大数据的一些背景知识,供您参考[7]。你可以参考我的另一篇文章,其中列出了新冠肺炎数据科学需要解决的问题[8]。 让我们一起来用科技建设一个更美好的世界。

参考资料:

[1]https://www . Gartner . com/en/news room/press-releases/2019-10-02-Gartner-reveals-five-major-trends-shaping-the-evoluti

[2]https://www . Forbes . com/sites/louiscumbus/2019/09/25/whats-new-in-Gartner-hype-cycle-for-ai-2019/# d 3 EDC 37547 bb

[3]https://arxiv.org/ftp/arxiv/papers/1705/1705.04928.pdf

[4]https://www . xenon stack . com/insights/graph-databases-big-data/

[5]https://journalofbigdata . springer open . com/articles/10.1186/s 40537-019-0206-3

[6]https://www . rd-alliance . org/group/big-data-ig-data-security-and-trust-WG/wiki/big-data-security-issues-challenges-tech-concerns

[7]https://www.youtube.com/watch?v=maZonSZorGI

[8]https://medium . com/@ sunil . vuppala/ds 4 covid-19-用数据科学解决什么问题-新冠肺炎-a997ebaadaa6

选择正确的研究问题,运用你的技能去解决它。祝一切顺利。请在评论区分享您的反馈。如果您遇到这方面的更多主题,请随时添加。

数据科学最流行的工具和软件

原文:https://towardsdatascience.com/top-20-most-popular-tools-for-data-science-93c5618893a4?source=collection_archive---------36-----------------------

数据科学家在 2020 年使用的最终工具列表

Unsplash 上由 Elena Rouame 拍照

数据管理

1.Hadoop

Apache Hadoop 是管理大数据的最重要的工具之一。

它还允许用户存储所有形式的数据,即结构化数据和非结构化数据。借助 Hadoop,数据科学家可以跨计算机集群对数据集中的大量数据进行可靠的分布式处理。

成为数据科学家并不迫切需要 Hadoop,但数据科学家必须知道如何首先将数据取出来进行分析,Hadoop 正是存储大量数据的技术,数据科学家可以在这方面工作。

Hadoop 由几个模块组成:Hadoop Common、Hadoop 分布式文件系统、Hadoop YARN、Hadoop MapReduce,实现灵活的数据处理。

2.MongoDB

MongoDB 是一个探索你认为合适的结构化数据的工具。作为一个 NoSQL 数据库,它不遵循 SQL 强加的严格的关系格式。通过提供通常需要向 SQL 添加层的功能,它降低了复杂性。借助动态模式,您可以一起处理差异极大的数据并整合分析。

或者,也可以使用其他 NoSQL 工具——Cassandra、CouchDB、ArangoDB、Postgre SQL 或 DynamoDB,将数据传输到提供可靠数据管理的平台。

3.关系型数据库

资料来源:DB-Engines via Statista

SQL 是数据科学中最需要的技能之一。

要从数据库中获取数据,您需要 SQL。在 SQL 平台中——MySQL、Microsoft SQL Server、Oracle Database、PostgreSQL、MongoDB、CouchBase、DB2 或其他数据库,Oracle 的数据库解决方案在 2019 年进行的大多数调查中脱颖而出。

MySQL 和微软 SQL Server 位列前三。尽管数据库管理行业包含了一些科技行业中最大的公司,如微软、甲骨文和 IBM,但一些免费的开源 DBMSs,如 PostgreSQL 和 Apache Cassandra,仍然具有很强的竞争力。

当每个人都忙于学习数据科学的 R 或 Python 时,我们往往会忘记没有数据就没有数据科学。数据科学家需要 SQL 来获取这些数据并使用它们。SQL 允许快速方便地存储、查询、创建、解析和操作数据—基本上是数据管理。

4.Neo4j

Neo4j 是由 Neo Technology Inc .开发的开源和世界领先的图形数据库管理系统,是一种使用图形结构进行语义查询的数据库,具有节点、边和属性来表示和存储数据。

它旨在优化节点和关系的快速管理、存储和遍历,具有高度可伸缩性,旨在利用数据及其关系。

Neo4j 为数据上的 CRUD 操作提供了可伸缩性、高可用性和灵活性。这个工具是用 Java 编写的。并提供灵活的数据模型以给出实时输出。

5.SAP HANA

SAP HANA(高性能分析设备)是一个 RDBMS,由 SAP 开发和销售。它作为数据库服务器的主要功能是根据支持应用程序的请求存储和检索数据。

SAP HANA 是一种基于 ETL 的复制,使用 SAP 数据服务从 SAP 或非 SAP 源迁移数据到 HANA 数据库。在其生物圈中使用 SAP 的企业使用 HANA 在短时间内处理大量实时数据。

由于 SAP 是一个闭源生态系统,HANA 可能不是独立数据科学家的工具,但对于 SAP 中的业务或职业来说,HANA 可能是一个值得炫耀的好技能。

6.储备

Apache Hive 是一个建立在 Apache Hadoop 之上的数据仓库软件项目,用于提供数据查询和分析。Hive 类似于一个 SQL 接口,用于查询跨数据库和文件系统存储的数据,以便以后与 Hadoop 集成。

Hadoop、Hive、Pig 本质上在数据管理层紧密合作。

Hive 以提供数据汇总和数据查询而闻名。HIVE 是为工作的人构建的,在 SQL 知识方面,不需要学习一种全新的语言来获取 Hadoop 生态系统中的数据并与之交互。

7.阿帕奇火花

Apache Spark 是一个用于大规模数据处理的统一分析引擎。它可以跨多种语言编写应用程序,这使得它非常健壮——Java、Scala、Python、R 和 SQL。

数据科学家使用 Spark 进行数据清理和转换、功能工程、模型构建、模型评估评分和“生产化”数据科学管道。我从 Python 中读到 Spark 致力于提供类似熊猫的体验,这让我很感兴趣。

我不太了解 Apache Spark,但我会在秋季学习它🙈。如果你有兴趣了解更多关于 Apache Spark 的知识,这里的是一个很好的参考资源。

8.快速采矿机

RapidMiner 是一款开源、完全透明、功能强大的端到端数据挖掘工具,用于快速构建预测模型。该工具支持数百种数据准备和机器学习算法,以支持一系列数据挖掘项目。

RapidMiner 可用于准备数据、机器学习和模型开发。它支持多种数据管理技术和机器学习步骤,如数据准备、数据可视化、预测分析、部署等。这个工具是用 Java 编写的。

数据可视化

9.Microsoft Power BI

Microsoft Power BI 是一款用于商业智能的交互式数据可视化和分析工具。我在 2017 年在 Larsen & Toubro 实习时听说过 Power BI,使用 Power BI 进行跨部门的收入支出分析、员工效率、焊接和拱架轮班的实时数据处理。

数据科学家可以从广泛的来源提取数据,并创建漂亮的仪表板来跟踪对业务非常重要的指标

微软关于为什么 PowerBI 的博客非常清楚地解释了为什么 Power BI 对数据科学家来说是事实。Power BI 可轻松连接、建模和可视化数据,创建难忘的报告,并根据品牌的 KPI 进行个性化设置。

Power BI 可以轻松地与 Microsoft Office 应用程序(Microsoft Teams 和 Excel)集成,使组织能够做出数据驱动的业务决策,从而推动他们采取战略行动。

10.(舞台上由人扮的)静态画面

Tableau 是目前商业智能中非常流行和强大的数据可视化工具。Tableau 的数据分析快速而强大。通过可视化仪表板和工作表,Tableau 涵盖了将原始数据简化为非常容易理解的格式、清理数据以及识别潜在趋势和模式。

很长一段时间以来,像百事可乐、威瑞森、查尔斯·施瓦布、可口可乐、Chipotle 这样的大公司都在使用 Tableau 来利用他们的数据并做出结论性的明智决策。对于任何对数据科学或数据分析职业感兴趣的人来说,Tableau 这样的工具是必不可少的。

11.QlikView

想想饼图、折线图、数据透视表、条形图等等📊,QlikView 是一款在行业中广泛使用的工具。

QlikView 也是一个商业智能和数据发现工具,其目标是为目标业务挑战创建导向分析应用程序和仪表板。该软件使用户能够揭示各种变量之间的数据洞察力和关系。

关于 Tableau 和 QlikView 的争论相当激烈。虽然 Tableau 口袋里有 bog 品牌,但 QlikView 使用内存数据模型,使其能够即时准确地处理庞大的数据集,这是 Tableau 的改进范围。

12.TIBCO Spotfire

Spotfire 是一家位于马萨诸塞州萨默维尔的商业智能公司,于 2007 年被 TIBCO 收购(维基百科)。Spotfire 具有与 Tableau 或 QlikView 相同的通用可视化功能。

虽然 Tableau Public 和 Power BI Desktop 可以免费使用,但 TIBCO Spotfire 的价格为每位用户每年 650 美元。没有免费版本可能会使它在独立数据科学家中不那么受欢迎。然而,我最近看到了这个故事,讲述了雅高酒店如何使用 TIBCO Spotfire 改善客户体验,以及更快、更容易、更简单的整合。

TIBCO 最初是集成和分析领域的全球领导者,拥有庞大的客户群。你可以点击这里访问 TIBCO 客户名单

数据分析

来源:2019 年 6 月最受欢迎的数据科学技能[1]

13.计算机编程语言

你认为这不会在清单上吗?Python 在数字方面压倒了一切。

Python 面向对象的特性有助于数据科学家以更好的稳定性、模块化和代码可读性来执行任务。虽然数据科学只是多样化的 Python 生态系统的一小部分,但 Python 拥有丰富的专业深度学习和其他机器学习库以及流行的工具,如 scikit-learn、Keras 和 TensorFlow。

毫无疑问,Python 使数据科学家能够开发出可以直接插入生产系统的复杂数据模型。Python 有大量的包和库,不仅仅是为了数据分析,而是为了数据分析。

Python 的数据分析库, Pandas 无疑是数据探索的最佳选择。通过组织成数据框, Pandas 可以轻松地过滤、排序和显示数据。

14.稀有

作为数据科学的典型统计工具,R 不仅仅是一种语言,它本身就是一个执行统计计算的完整生态系统。它有助于执行数据处理、数学建模、数据可视化等操作。

r 是为了对大型数据集进行统计和数值分析而构建的,因此,有大量的操作可用于数据分析和探索——排序数据、转置表、创建图表、生成频率表、采样数据、概率分布、合并数据、变量转换等等。探索封装 dplyrtidyr 以获得最佳结果。

15.斯堪的纳维亚航空公司

SAS —统计分析系统

和 R 一样,SAS 是为高级数据分析和复杂的统计操作开发的工具。它是一个闭源的专有工具,提供了各种各样的统计功能来执行复杂的建模。由于其高可靠性,SAS 主要由大型组织和专业人员使用。

虽然 SAS 不是最适合初学者和独立数据科学爱好者的工具,但它 SAS 是为满足高级业务需求而量身定制的,如果你在职业生涯中寻找特定的数据科学角色,良好的 SAS 知识将为你的档案增添光彩。

SAS 在企业分析领域一直是无可争议的市场领导者,但是,要将其功能与 Python 或 R 进行比较,SAS 似乎很难对数据进行建模和可视化。此外,学习曲线是棘手的,有时很难,主要是由预算庞大的大公司使用。

16.矩阵实验室

MATLAB 是我用于数据科学的第一个工具。当我发现 MATLAB 是进行深奥的数学运算的有效工具时,我在我的一门本科课上把 MATLAB 作为图像处理工具。虽然数据科学也与数学有关,但我抓住机会探索是什么使这项技术成为数学建模、图像处理和数据分析的强大工具。

MATLAB 拥有一个庞大的数学函数库,用于线性代数、统计、傅立叶分析、滤波、优化、数值积分和求解常微分方程。MATLAB 提供了用于可视化数据的内置图形和用于创建自定义绘图的工具。

我不认识很多用 MATLAB 的数据科学家。说了这么多,不可否认对于数学和建模来说是很棒的。随着 R 和 Python 在数据科学领域的出现,MATLAB 一直在走下坡路,但正如我们在上面的统计数据中看到的那样,它仍然在那里。

17.附加电源装置(Supplementary Power Supply Set 的缩写)

IBM SPSS 软件平台提供高级统计分析、庞大的机器学习算法库、文本分析、开源可扩展性、与大数据的集成以及无缝部署到应用程序中。

我可以说,IBM SPSS 是一个相对较少使用的工具。它更受社会科学、心理学、金融、人力资源等领域的研究学者和学者的欢迎。虽然大多数数据科学家和行业使用 R、Python 或 SAS 作为主要工具,但如果你在心理学或相关领域工作,SPSS 是一个很好的工具。

18.斯塔塔

Stata 是一个强大的统计软件,使用户能够分析、管理和生成数据的图形可视化。它主要由经济学、生物医学和政治学领域的研究人员用来检查数据模式。

正如 Stata 的官网所说“数据科学家依赖 Stata 是因为它强大的编程能力、可再现性、可扩展性和互操作性。从数据争论到报告,Stata 为您提供完成分析所需的工具。许可授权允许您轻松地将其集成到您的专有工作流程中。”

19.河流逻辑

RiverLogic 是一个建模和分析平台,它利用诊断、预测和说明性分析来进行假设分析和优化分析。

其规范性分析平台使用户能够通过协作、快速、基于云的场景分析来解决无限数量的决策挑战。

来源:河逻辑官方网站

20.SAP Lumira

SAP Lumira 让数据科学家和分析师能够构建有影响力的商业智能可视化,以评估风险、提高效率、突出独特见解并发现机会。

SAP Lumira 还支持用于高级分析的 OLAP 技术。Lumira 的可视化为交互式和有效的数据分析提供了自适应布局容器。

官方网站引用:
创建分析应用程序和仪表盘 开发可移动的交互式仪表盘和分析应用程序,与用户及其数据故事进行协作,并提供可操作的洞察。

开发支持移动的交互式仪表盘和分析应用,与用户及其数据故事进行协作,并提供对可操作洞察的指尖访问。

感谢您的阅读!我希望你喜欢这篇文章。请务必让我知道您以前知道或不知道哪些工具,并且希望在您的数据科学之旅中学习或探索这些工具。

数据帐篷快乐!

免责声明:本文表达的观点是我自己的观点,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。

必看的 20 部人工智能电影

原文:https://towardsdatascience.com/top-20-movies-about-machine-learning-ai-and-data-science-8382d408c8c3?source=collection_archive---------1-----------------------

人工智能

这里有一些必看的人工智能电影,以了解人工智能的能力。

埃里克·维特索在 Unsplash 上的照片

M 电影不仅仅是爆炸和超能力的大片,它是电影背后的主要思想,它改变了人们,并在观众的头脑中注入了一种观念。

举例来说,电影《小丑》并不是一部英雄与反派的电影,与超能力者战斗,给纽约市带来巨大灾难。它描绘了富人和穷人、幸运者和不幸者之间的明显鸿沟,以及精神疾病如何扭曲一个人的道德和价值体系。

因此,电影不仅仅是一种享受和娱乐的活动,它在塑造我们的世界观和公共意识方面起着不可或缺的作用。

简而言之,电影教育人们,传播思想,就像今天的平装本书一样。

为什么是电影?

电影有效的一个原因也是电影和书的鲜明区别,就是可视化。与书籍相比,视觉内容显示的内容更快地记录到我们的视觉刺激,这解释了为什么人们会花几个小时在 YouTube 上,而不是阅读一本书。此外,电影有助于生成具体的图形,帮助人们更长时间地坚持这个想法。显然,电影是了解一个想法或首先用你的头脑深入一个话题的完美媒介。

好莱坞的艾

人工智能、机器学习、数据科学都是这个时代的流行名词。了解它是什么以及它在未来几年的价值比以往任何时候都更加重要。

尽管好莱坞电影往往为了戏剧效果而夸大其词,例如终结者电影,天网的杀手机器人变得有知觉并开始毁灭人类,但这些电影仍然有一些道理。今天,该领域的专家担心一个超级智能的人工智能会比我们聪明,并最终决定将我们从地球上抹去。

另一方面,人工智能被描述为一项奇迹发明,即能够比人类更好地执行模拟和预测等分析任务的智能机器。在电影中,你看到人工智能是人类的助手,协助我们完成各种任务,从太空探险的助手到爱人。

如果你对人工智能、机器学习和数据科学感兴趣,请查看下面的电影列表(排名不分先后)并观看它们。

我写关于数据科学和人工智能的文章。如果你想在我发帖时得到通知,现在就订阅我的媒体简讯吧!

如果你不是普通会员,考虑一下今天只需 5 美元就可以订阅。你将直接支持我,你将获得大量的优秀作品!

20 大人工智能电影

照片由雅各布·欧文斯Unsplash 上拍摄

1.银翼杀手(1982)

《银翼杀手》是一部经典的反乌托邦电影,在这部电影中,由人工智能驱动的生物工程复制人生活在真实的人类中间,他们之间的唯一区别是他们只能活 4 年。这部电影的续集,《银翼杀手 2049》也是一部伟大的电影,它更深入地探讨了人工智能及其未来的主题。

[## 银翼杀手(1982) - IMDb

收视率最高的电影#168 |获得两项奥斯卡提名。另外 12 场胜利和 16 项提名。查看更多奖项“演员概况…

www.imdb.com](https://www.imdb.com/title/tt0083658/)

2.西部世界(1973)

《西部世界》是一部关于人工智能如何被用来娱乐我们并让我们实现梦想的电影。它让我们想起了技术和伦理的微妙冲突,并让我们质疑自己。

[## 西部世界(1973) - IMDb

演员概况首先只宣传:有钱度假者的游乐园。公园为顾客提供了一种生活方式…

www.imdb.com](https://www.imdb.com/title/tt0070909/)

3.2001:太空漫游

HAL 9000 是一台安装在前往木星的宇宙飞船上的超级计算机,它负责大多数操作,当它出现故障并决定毁灭世界时,会导致可怕的事件。随着哈尔一个接一个地杀死船员,我们被提醒让人工智能控制我们的世界的危险,并注意后果。

[## 2001 年:太空漫游(1968) - IMDb

由斯坦利·库布里克导演。与凯尔·杜拉,加里·洛克伍德,威廉姆·西尔维斯特,丹尼尔·里希特。在发现一个…

www.imdb.com](https://www.imdb.com/title/tt0062622/)

4.月亮(2009 年)

《月亮》和《2001:太空奥德西》很相似,因为这部电影有自己的哈尔 9000,名字叫柯里。葛蒂是山姆·贝尔的电脑和伴侣,山姆·贝尔是月球表面上的一名孤独的宇航员。当他在月球上的任期即将结束时,他面临一场事故,并遇到了年轻的自己。这部电影的简约品质,加上富有哲理和发人深省的场景,使其成为最好的科幻电影之一。

[## 月亮(2009) - IMDb

由邓肯·琼斯导演。和山姆·洛克威尔,凯文·史派西,多米妮克·麦克艾丽戈特,罗西·肖一起。

www.imdb.com](https://www.imdb.com/title/tt1182345/)

5.黑客帝国(1999 年)

黑客帝国典型的反乌托邦,人类对超级智能人工智能的恐惧成为现实。在《黑客帝国》(The Matrix)中,人工智能创造了一个模拟现实的场景来让我们保持克制,尼奥遇到了墨菲斯,这让他从模拟中解脱出来,并开始了他人生的新篇章,他以特工的形式与智能开始战斗,并发现了他的真实身份。《黑客帝国》让我们看到了人工智能黑暗面的可怕未来,以及一些值得思考的人生教训。

[## 黑客帝国(1999) - IMDb

托马斯·安德森是一个过着双重生活的人。白天,他是一个普通的电脑程序员,晚上,他是一个黑客…

www.imdb.com](https://www.imdb.com/title/tt0133093/)

6.星球大战(1977)

《星球大战》中著名的机器人二人组——深受喜爱的 C3·阿宝和他的机器人伙伴 R2D2——都是有感知能力的人工智能机器人,具有类似人类的人格,能够表达情感。有趣的是,他们被当作宠物,甚至是奴隶。这类似于狗和人之间的关系,除了狗可以说话和表达自己的意见。《星球大战》对人工智能的这种看法让我们思考它们将如何嵌入我们的社会结构,以及未来社会将如何对待人工智能,要么将其视为助手、宠物、朋友,要么根本不信任它们。

[## 《星球大战:第四集——新的希望》(1977)——IMDb

乔治·卢卡斯导演。和马克·哈米尔,哈里森·福特,凯丽·费雪,亚历克·伊兹高尼一起。卢克·天行者加入部队…

www.imdb.com](https://www.imdb.com/title/tt0076759/)

7.《星际迷航:世代》( 1994)

电影中的人工智能明星是少校·数据,一个有感知、有自我意识的机器人,在企业号航空母舰上担任高级军官。这个由人工智能驱动的超级大脑还配备了一个模拟人类情感的情感芯片。这使得数据成为一个类似人类的机器人,可以像我们一样感觉,但有一个复杂的大脑,可以比任何人都更好地计算风险。

[## 《星际迷航:几代人》(1994)——IMDb

由戴维·卡森导演。与帕特里克·斯图尔特,威廉·夏特纳,马尔科姆·麦克道威尔,乔纳森·弗雷克斯。在…的帮助下

www.imdb.com](https://www.imdb.com/title/tt0111280/)

8.终结者(1984)

《终结者》是最受欢迎的电影之一,它描绘了一个 AI 突然变得邪恶并开始杀害所有人的黯淡未来。它说明了人工智能成为一种生存威胁的可能性。在这部电影中,天网,一个引发核浩劫的人工智能系统,派回了一个机器人刺客(终结者)来阻止约翰·康纳的出生,他将引发一个反抗天网的反叛组织。这部电影提醒人们创造一个安全的人工智能,并在创造一个可以消灭我们的人工智能时三思。

[## 《终结者》(1984)——IMDb

由詹姆斯·卡梅隆执导。阿诺德·施瓦辛格,琳达·汉密尔顿,迈克尔·比恩,保罗·温菲尔德。1984 年,一个人类…

www.imdb.com](https://www.imdb.com/title/tt0088247/)

9.机械战警(1987)

《机械战警》据说是一部真正揭露人工智能伦理的电影。这是因为 Robocop 是 AI 和人类的融合,它证明了一个事实,即道德和伦理不能是人工的或自动化的。我们潜在的人性仍然需要成为等式的一部分,否则后果将接踵而至。这涉及到将人工智能武器化(致命的自主武器系统)的危险,以及为什么必须制定人工智能使用的法规以防止人工智能的滥用。

[## 机械战警(1987) - IMDb

获得两项奥斯卡提名。另外 11 场胜利和 10 项提名。查看更多奖项“未来的底特律充满犯罪…

www.imdb.com](https://www.imdb.com/title/tt0093870/)

10.瓦力

瓦力是我们今天看到的人工狭义智能的缩影,尽管没有电影中的那些复杂(瓦力能够表达孤独和爱等情感)。狭义的 AI 是一个非常擅长做一件特定事情的智能系统。我们在今天的日常生活中看到,比如自动驾驶汽车和语音助手。在这部电影中,瓦力清理垃圾,夏娃寻找生命,自动驾驶飞船。《瓦力》( WALL-E)是为数不多的展示人工智能光明一面及其给世界带来的好处的科幻电影之一。

[## 墙 E (2008 年)- IMDb

在一个遥远但并非不切实际的未来,人类已经放弃了地球,因为它已经被垃圾覆盖…

www.imdb.com](https://www.imdb.com/title/tt0910970/)

11.玛奇纳除外

艾娃是天才程序员凯勒·史密斯创造的 AGI(人工通用智能)。AGI 是一个拥有比人类多得多的技能和知识的人工智能。艾娃和我们一样善于交谈,甚至能控制他人的情绪。这部电影引发了对像艾娃这样有自我意识的机器人的治疗和实验的伦理关注,导致了一个黑暗的结局。

[## 玛奇纳除外(2014 年)- IMDb

由亚历克斯·嘉兰导演。与艾丽西卡·维坎德,多姆纳尔·格里森,奥斯卡·伊萨克,水野索诺娅。一个年轻的程序员…

www.imdb.com](https://www.imdb.com/title/tt0470752/)

12.查皮

设定在一个专制的未来,警察部队现在是机械化的,有自主机器人在街上巡逻,处理违法者。其中一个机器人被盗,并被从阿尼升级到 AGI,这意味着它变得有知觉。这个机器人,查皮,带着他新发现的情感,与社会中的腐败作斗争,并被贴上了威胁人类秩序的标签。这也带来了伦理问题,以及 AGI 如何通过探索周围环境来自我学习,就像查皮在电影中所做的那样。

[## 查皮(2015) - IMDb

由尼尔·布鲁姆坎普导演。与沙尔托·科普雷,戴夫·帕特尔,休杰克曼,西格妮·韦弗。在不久的将来,犯罪…

www.imdb.com](https://www.imdb.com/title/tt1823672/)

13.我,机器人

VIKI(虚拟互动运动智能)是一台超级计算机,它使用从世界各地收集的数据,其计算能力控制世界各地的机器人。在这个世界上,机器人无处不在,它们被赋予嵌入其系统中的法律,以确保社会的安全。但是有了 VIKI,这些法律不再阻止机器人,这取决于一个技术恐惧的警察和一个好的机器人阻止 VIKI 结束世界。这部电影带来了人工智能接管世界的可怕可能性,以及即使制定法律来控制它们也会适得其反。

[## 我,机器人(2004) - IMDb

获得 1 项奥斯卡提名。又一个 1 胜 13 提名。查看更多奖项“2035 年,技术恐惧症杀人侦探德尔…

www.imdb.com](https://www.imdb.com/title/tt0343818/)

14.星际穿越

《星际穿越》采取了完全不同的方式在科幻电影中呈现 AI。这对名为 TARS 和 CASE 的四边形机器人没有像 HAL 9000 或终结者那样成为对手,而是令人惊讶地呈现出与《星球大战》和《星际迷航》中常见的类人形态毫无相似之处的形态。TARS 和 CASE 的设计代表了将功能置于人性之上的设计,它代表了机器人和人工智能中复杂设计的许多可能性。

[## 《星际穿越》(2014) - IMDb

地球的未来已经被灾难、饥荒和干旱弄得千疮百孔。只有一种方法可以确保人类的…

www.imdb.com](https://www.imdb.com/title/tt0816692/)

15.她

《她》讲的是一个男人爱上了一个人工智能操作系统。我们今天在智能手机中看到虚拟助手,但技术没有“萨曼莎”复杂,“她”中的智能操作系统。像 Siri 和 Google Assistant 这样的语音助手只能完成简单的任务,如设置闹钟或给朋友发短信,但 Samantha 是一个令人印象深刻的健谈者,对语言、常识和情感有着惊人的掌握,能够处理复杂的任务,如过滤电子邮件和在一秒钟内下载数百万本书。像她这样高度先进的操作系统能够通过经验学习和进化,这是我们今天的技术水平无法实现的。这部电影让我们看到了语音助手在未来会是什么样子,我们甚至可以爱上它们。

[## 她(2013) - IMDb

获得 1 项奥斯卡。另外 81 场胜利和 184 项提名。查看更多奖项“演员概况,仅第一张账单:西奥多是一个…

www.imdb.com](https://www.imdb.com/title/tt1798709/)

16.钱球

“Moneyball”展示了预测分析的惊人力量及其在现实世界中的能力。在这部电影中,数据分析和“钱球理论”被用来在最小的预算下挑选出被低估的球员的最佳团队。通过对球员的数据挖掘的力量,以及两个显著的数据点(击球率和上垒率),形成了冠军棒球队。这部电影展示了数据在决策中的重要性,以及在预测建模中选择正确的统计数据。但更重要的是,基于分析做出决策的勇气,以及对数据做出改变的信心。

[## 《摇钱树》(2011)——IMDb

获得 6 项奥斯卡提名。另外 30 场胜利和 75 项提名。查看更多奖项“奥克兰运动家队的总经理比利·比恩是残疾人…

www.imdb.com](https://www.imdb.com/title/tt1210166/)

17.追加保证金通知

“追加保证金通知”展示了错误的预测模型对社会中每个人的影响。显然,技术不是生活在泡沫中,一个微小的错误都会导致可怕的后果。这部电影以 2008 年金融危机为中心,在银行工作的风险分析师和金融分析师发现,他们的风险模型正导致公司陷入金融灾难。这部电影讲述了贪婪的危险,以及对预测模型的各个方面进行故障检测以防止灾难发生是多么重要。

[## 追加保证金通知(2011 年)- IMDb

获得 1 项奥斯卡提名。另外 8 次获奖和 23 次提名。查看更多奖项“演员概况,第一单只:一个受尊敬的…

www.imdb.com](https://www.imdb.com/title/tt1615147/)

18.少数派报告

《少数派报告》展示了数据科学的最佳状态。在这部电影中,一组具有精神能力的人类或称为 PreCogs 的“数据科学家”能够通过分析大量数据来预测未来的犯罪。通过这种分析,视觉数据被传输到预防犯罪中心,这是一个被派去防止犯罪的警察单位。这就引出了数据如何在现实世界中做大事的想法,比如预防灾难和拯救数百万人的生命。

[## 少数报告(2002 年)- IMDb

史蒂文·斯皮尔伯格导演。汤姆·克鲁斯,科林·法瑞尔,萨曼莎·莫顿,马克斯·冯·赛多。在未来,一个…

www.imdb.com](https://www.imdb.com/title/tt0181689/)

19.模仿游戏

著名的“图灵测试”的创造者、现代计算机科学之父艾伦·图灵出现在这部电影中。以二战为背景,艾伦·图灵是破解谜题的传奇数学家。“谜”是纳粹用来对他们的信息进行编码的一种战略代码,图灵决定建造一台能够比任何人都更快地执行复杂排列的计算机。凭借这台计算机,图灵为创造机器以及加强密码学和网络安全领域铺平了道路。此外,电影中的一个重要教训是解决“谜”时创造力和新颖性的重要性,以及对沟通和人类行为的理解,这是解决任何问题的关键组成部分。

[## 模仿游戏(2014) - IMDb

获得 1 项奥斯卡。另外 48 场胜利和 159 项提名。查看更多奖项“演员阵容概述,仅限第一张账单:基于真实…

www.imdb.com](https://www.imdb.com/title/tt2084970/)

20.《美丽心灵》

《美丽心灵》的主角是诺贝尔经济学奖得主约翰·纳西。他因对博弈论或经济理论的贡献而闻名,这些贡献导致了经济学领域的突破。他的工作在计算机科学中被大量利用。在这部电影中,看看博弈论是如何慢慢被解开,并发现它的意义,不仅是数学世界,但在日常生活中。

[## 美丽心灵(2001) - IMDb

演员概况首次仅公布:从恶名的高度到堕落的深度,小约翰·福布斯·纳什…

www.imdb.com](https://www.imdb.com/title/tt0268978/)

21. 21

讽刺的是,《21》是一个的真实故事,讲述了 6 名来自麻省理工学院的学生前往拉斯韦加斯,用暗号、手势和锐利的目光算牌。这部电影展示了预测分析的力量,并教导观众如何基于数据的决策可以为任何企业带来利润。

行动计划

马特·邓肯在 Unsplash 上拍摄的照片

我希望通过这些令人惊叹的科幻电影,你能够完全沉浸在一个人工智能成为朋友、爱人、杀手、士兵、奴隶的世界中,并发现数学和算法的力量及其实现令人惊叹的事情的能力,如停止战争和在赌场中赢得大奖。

人工智能确实是人类最伟大的发明。正如电影中所见,人工智能要么是我们的死亡,要么是我们人类认知和身体能力的增强,让我们可以做不可思议的事情。

艾的神话

在不久的将来,人工智能将无处不在,了解它的第一步是打破人工智能的神话。

一个最重要的神话是,人工智能会变得有良知并变得邪恶,杀死每一个经过它的人,尽管这令人不安,真正的担心是人工智能会有与我们不一致的目标。当这种情况发生时,我们无法阻止他们。

另一个大神话是超级 AI 即将到来,我们现在应该都很担心。事实是,没有人,即使是该领域最聪明的专家也不知道超级人工智能何时会实现。可能是几十年,几个世纪,甚至永远不会。

电影总是把 AI 描绘成一个令人生畏的机器人形象,它能发射激光,坚不可摧。然而,一个人工智能不需要一个身体来做它最糟糕的事情,它需要的只是互联网上的一个地方,所有的地狱都可以逃脱。

如何从看电影中获得更多

  1. 在推特上发布电影对白/把它们保存在笔记应用或记事本中(如果你是守旧派)
  2. 拥抱电影,运用你的五种感官,想象你就在电影中
  3. 反思你所学到的东西
  4. 检查电影中的信息以防止任何误解
  5. 去 Reddit 上看看其他人对这部电影的看法

我希望这篇文章对你有用,并且你得到了一个令人惊奇的“电影观看列表”!在家注意安全,万事如意。

最后,我引用一段埃隆·马斯克关于 AGI 的话

“我越来越倾向于认为,应该有一些监管监督,也许是在国家和国际层面,只是为了确保我们不会做一些非常愚蠢的事情。我的意思是,有了人工智能,我们在召唤恶魔。”——埃隆·马斯克在麻省理工学院航空航天百年研讨会上警告说

下面是另外几篇文章,供你今天开始学习数据科学!

[## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

其他联系方式:

快乐流媒体!

2021 年数据科学 22 大播客

原文:https://towardsdatascience.com/top-20-podcasts-for-data-science-83dc9e07448e?source=collection_archive---------4-----------------------

数据科学|播客

数据科学、机器学习和人工智能最新消息的最佳播客列表。

Unsplash 上由 Austin Distel 拍摄的照片

视频直播是学习新事物的最佳方法之一,也是培养好奇心和激情的便捷工具。我喜欢在上下班的火车上和散步的时候听 TED 广播一小时。这确保了我每天都有足够的知识,睡觉时比醒来时更聪明,这是我从美国亿万富翁投资者查理芒格那里学到的。

“睡觉时比醒来时更聪明。”

―查理·芒格

随着数据科学的不断发展,了解该领域的最新创新和发明至关重要,这样您才不会在这个快节奏的时代中落后。

播客的伟大之处在于,你可以在通勤、排队、散步等时候听它。这就像在会议上听数据科学家和人工智能专家的对话,但你可以随时暂停、播放和倒带。随时随地提供建议和新闻的图书馆。

因此,无论你只是一个数据科学爱好者,还是一名首席数据科学家,播客都可以为你提供该领域的各种观点和新发展。像这样一个复杂的多学科领域需要大量的研究和学习,还有什么比听播客更好的方法呢?

你还在等什么?现在就向下滚动查看列表吧!

目录

**General**
1\. Freakonomics**Data Science** 2\. Data Science Salon 
3\. Data Crunch
4\. Data Skeptic
5\. Data Stories
6\. DataFramed7\. Linear Digression
8\. Not So Standard Deviations
9\. Making Data Simple
10\. Data Engineering Podcast
11\. Super Data Science
12\. Data Science at Home
13\. The Digital Analytics Power Hour
14\. O’Reilly Data Show**AI and ML** 15\. HumAIn Podcast
16\. Talking Machines
17\. The TWIML AI Podcast
18\. Learning Machines 101
19\. Artificial Intelligence (AI Podcast) with Lex Fridman
20\. AI Today Podcast: Artificial Intelligence Insights, Experts, and Opinion
21\. Artificial Intelligence in Industry with Daniel Faggella
22\. Gradient Dissent

在我们开始进入播客列表之前,如果你还不知道,走向数据科学有他们自己的播客,在那里他们分享关于数据科学的概念、想法和代码。每周都有该领域的不同专家,他们在那里分享建议、经验和见解。

[## 走向数据科学 TDS 团队

在 Spotify 上收听《走向数据科学》。分享概念、想法和代码

open.spotify.com](https://open.spotify.com/show/63diy2DtpHzQfeNVxAPZgU)

一般

1.魔鬼经济学

《魔鬼经济学》一书的合著者斯蒂芬·j·杜布纳是本期播客的主持人。每周,Dubner 都会带你踏上探索一切事物隐含的一面的旅程,从你一直以为你知道的事情到你从未想过你想知道的事情。在数据科学中,你会发现数据的隐藏价值,因此了解更多并扩展你的思维不会有什么坏处。

[## 魔鬼经济电台

与《魔鬼经济学》的合著者斯蒂芬·j·杜布纳一起探索一切事物隐藏的一面。每周…

open.spotify.com](https://open.spotify.com/show/6z4NLXyHPga1UmSJsPK7G1)

数据科学

2.数据科学沙龙

数据科学沙龙是一个独特的垂直聚焦会议,已发展成为该领域最多元化的高级数据科学、机器学习和其他技术专家社区

他们有一个令人惊叹的播客,其中包括与数据科学、人工智能和机器学习领域的顶尖和后起之秀进行采访和咖啡聊天,讨论推动该领域向前发展的趋势和商业用例。

数据科学沙龙系列是一个独特的垂直聚焦会议,汇集了专家面对面地相互教育,阐明最佳实践,并在休闲的氛围中创新新的解决方案,提供食物、咖啡和娱乐。

他们的最新一期是关于人工智能在零售行业的趋势和挑战,包括顶级数据科学家的参与,如菲利普·罗西(Shopify 数据科学负责人)、赖雅·沙姆加(Lowe's 公司的数据科学家)或杰弗里·邱(沃尔玛实验室数据科学负责人)。

[## 剧集|数据科学沙龙播客

数据科学沙龙官方播客。我们采访数据科学、机器学习领域的顶尖和后起之秀…

data-science-salon-podcast.simplecast.com](https://data-science-salon-podcast.simplecast.com/episodes)

3.数据紧缩

Data Crunch 是为那些数据科学、人工智能、ML 和 DL 爱好者准备的,他们希望更多地了解它对世界的影响,以及它们如何在社会的每个部分得到利用,从医学到金融。这个节目通常以企业家和专家为特色,他们在这里分享他们处理这项惊人技术的经验——他们的失败、成功和影响。

[## 数据压缩—数据压缩公司

如果你想了解数据科学、人工智能、机器学习和深度学习是如何被用来…

open.spotify.com](https://open.spotify.com/show/5Kqi6CV44DNi85N4c9Lv5P)

4.数据怀疑论者

Data 怀疑论者每周都会为您带来一些故事,讲述如何更多地了解我们的数据驱动世界,以及对统计、ML、大数据、人工智能和数据科学等主题的展望。

[## 数据怀疑论者——凯尔·波利奇

数据怀疑论者是你对统计学、机器学习、大…

open.spotify.com](https://open.spotify.com/show/1BZN7H3ikovSejhwQTzNm4)

5.数据故事

Enrico BertiniMoritz Stefaner 主持,这个播客谈论数据及其对我们生活的影响。

[## 数据故事— Enrico Bertini 和 Moritz Stefaner

在 Spotify 上听数据故事。一个关于数据及其如何影响我们生活的播客 Enrico Bertini 和 Moritz…

open.spotify.com](https://open.spotify.com/show/0aIvhK1ANin1kSOKRhWG1M)

6.数据框架

DataCampHugo Bowne-Anderson 带来的这个节目探讨了数据科学实际上可以解决什么样的问题,而不是解释什么是数据科学(这可能是肤浅和难以理解的)。

[## 数据帧—数据营

数据科学是发展最快的行业之一,被称为“21 世纪最性感的工作”。但是…

open.spotify.com](https://open.spotify.com/show/02yJXEJAJiQ0Vm2AO9Xj6X)

7.线性离题

线性离题是所有关于 ML 和数据科学,并集中在 ML 是如何解决世界各地的众多问题,并实现大规模突破被认为是不可能的。

[## 线性离题——本·贾菲和凯蒂·马龙

在 Spotify 上听线性题外话。线性离题是一个关于机器学习和数据科学的播客…

open.spotify.com](https://open.spotify.com/show/1JdkD0ZoZ52KjwdR0b1WoT)

8.不那么标准偏差

由 Roger Peng 和 Hillary Parker 主持,该节目强调了学术界和工业界在数据科学和分析方面的全新理念,这对于在该领域工作至关重要。

[## 不那么标准偏差——罗杰·彭和希拉里·帕克

在 Spotify 上听不那么标准的偏差。Roger Peng 和 Hilary Parker 谈论数据科学的最新发展和…

open.spotify.com](https://open.spotify.com/show/1NJ6li5ZpNVBBQfpd3D6bi)

9.简化数据

IBM 数据和人工智能开发副总裁 Al Martin 是该节目的主持人,他提供了关于大数据、人工智能及其对全球公司的影响的最新信息。

[## 让数据变得简单— IBM 大数据&分析中心

在 Spotify 上听“简化数据”。由 IBM 数据和人工智能开发副总裁 Al Martin 主持,让数据变得简单…

open.spotify.com](https://open.spotify.com/show/6i8sGQUN5PNzyExrQJtndx)

10.数据工程播客

本播客每周为工程师和塑造行业的企业家带来关于数据管理的摘要。这个播客更适合专家和已经在这个领域的人。

[## 数据工程播客——托拜厄斯·小萌

在 Spotify 上收听数据工程播客。每周与工程师和…深入探讨数据管理

open.spotify.com](https://open.spotify.com/show/2iLvljRGVVIGlJshT5vNDS)

11.超级数据科学

由数据科学教练兼生活方式企业家基里尔·叶列缅科主持。本播客的主要目的是聚集世界各地的领先数据科学家和分析师,提供您的见解和建议,以推动您在这一充满挑战的领域的职业生涯。对于所有渴望在数据分析领域取得成功的人,请听听叶列缅科的观点,并做好笔记。

[## 超级数据科学——基里尔·叶列缅科:蔻驰数据科学,生活方式企业家

基里尔·叶列缅科是一名数据科学教练和生活方式企业家。超级数据科学播客的目标是…

open.spotify.com](https://open.spotify.com/show/1n8P7ZSgfVLVJ3GegxPat1)

12.家庭数据科学

主持 Francesco Gadaleta 《数据科学在家中》为您带来关于技术、人工智能和人工智能的有趣讨论和发人深省的问题。一个完美的例子就是这个关于 AI 阴暗面的系列。

[## 家庭数据科学—

在家通过 Spotify 收听数据科学。技术、机器学习和算法。来加入讨论吧…

open.spotify.com](https://open.spotify.com/show/57AJ6GiMDPVBLGRqvjeoz6)

13.数字分析动力时刻

由三位分析师主持——迈克尔·赫尔布林莫伊·基斯蒂姆·威尔森,每一集都是一场开放式的讨论,偶尔会有嘉宾来讨论数字分析。在节目中,他们四个人倾吐了他们对这个话题的想法、经历和疑问。

[## 数字分析的力量时刻——迈克尔·赫尔布林、莫·基斯和蒂姆·威尔逊

三位分析师和一位偶尔来访的嘉宾讨论当今的数字分析话题。每集都是一个封闭的话题…

open.spotify.com](https://open.spotify.com/show/2ReJKUbDtcom5U0GgpOlAz)

14.奥赖利数据显示

声名狼藉的 O'Reilly 带来了数据科学、编程、AI、机器学习等方面最好的书籍。这个节目探索了推动数据科学、大数据和人工智能的机会和方法。

[## 奥赖利数据显示播客的想法和资源。

奥赖利数据秀播客探讨了推动大数据、数据科学和人工智能的机遇和技术

www.oreilly.com](https://www.oreilly.com/topics/oreilly-data-show-podcast)

人工智能和机器学习

15.HumAIn 播客

由 David Yakobovitch 主持,这个播客通过与业界思想领袖在 HumAIn 上的炉边对话,探索消费者的人工智能。本播客的演讲者包括首席数据科学家和人工智能顾问,他们是推进人工智能的领导者,HumAIn 播客是发布新的人工智能产品,了解行业趋势,以及在第四次工业革命中弥合人类和机器之间差距的渠道。

[## HumAIn 播客

HumAIn 播客-人工智能、数据科学、工作的未来和开发者教育

linktr.ee](https://linktr.ee/humain)

16.会说话的机器

由凯瑟琳·戈尔曼和尼尔·劳伦斯主持的“会说话的机器”是通向机器学习世界的门户。每一集都为你带来该领域专家的精彩见解,有见地的讨论,以及对你的问题的回答。随着机器学习不断改变世界,我们必须开始学习如何提出正确的问题,以及如何处理这些答案。这些播客可以帮助你做到这一点。

[## 会说话的机器——手提袋产品

会说话的机器是你进入机器学习世界的窗口。你们的主持人,凯瑟琳·戈尔曼和尼尔·劳伦斯…

open.spotify.com](https://open.spotify.com/show/0gKf364z7Vri0wbNXsHd2B)

17.TWIML 人工智能播客

行业分析师、演讲人、评论员和思想领袖 Sam Charrington 主持 TWIML 人工智能播客,介绍人工智能和人工智能领域的顶尖人物,并为世界各地的研究人员、数据科学家、工程师和数据驱动领导者提供丰富的信息。这个播客涵盖了所有的主题,从 ML 和 AI 到神经网络和深度学习。

[## TWIML 人工智能播客(原本周机器学习&人工智能)——山姆…

机器学习和人工智能正在极大地改变企业运营和人们生活的方式。的…

open.spotify.com](https://open.spotify.com/show/2sp5EL7s7EqxttxwwoJ3i7)

18.学习机器 101

本期节目的主持人理查德·m·戈登(Richard M. Golden)为你解答了自动驾驶汽车和虚拟助手等人工智能设备和机器如何工作,它们来自哪里,以及它们如何变得更像我们。人工智能和机器学习正在呈指数增长,知道它们能做什么和不能做什么是至关重要的,这样你才能为即将到来的事情做好准备。

[## 学习机器 101 —理查德·m·戈尔登博士,电气工程硕士,电气工程学士

基于人工智能和机器学习原理的智能机器现在在我们的生活中很普遍…

open.spotify.com](https://open.spotify.com/show/1MVjzhCjFB9y2qENVKDPoP)

19.Lex Fridman 的人工智能(AI 播客)

莱克斯·弗里德曼是最好的人工智能播客主持人之一。每集都有一段与著名专家(如埃隆·马斯克)关于技术、科学和人类状况的精彩对话。

[## Lex Fridman 的人工智能(AI 播客)——Lex frid man

在 Spotify 上听 Lex Fridman 的人工智能(AI 播客)。关于技术、科学的对话…

open.spotify.com](https://open.spotify.com/show/2MAi0BvDc6GTFvKFPXnkCL)

20.今日人工智能播客:人工智能见解、专家和观点

今天的人工智能提供了大量关于现实世界、行业和采用人工智能的市场研究和情报的信息。如果你需要了解更多关于人工智能的信息,请收听今天的人工智能。

[## 今日人工智能播客:人工智能见解、专家和观点——认知分析

收听 AI Today 播客:人工智能见解、专家和对 Spotify 的看法。现实世界、工业和…

open.spotify.com](https://open.spotify.com/show/4z2M4S9e0K6yk3KB9XrO7h)

21.人工智能在工业中的应用

Emerj 的创始人丹尼尔·法盖拉(Daniel fag gella)将带你踏上一段旅程,探索什么是可能的,什么是人工智能在行业中的应用。拥有顶尖的人工智能和以人工智能为中心的高管以及金融、国防、零售等领域的研究。找出当今人工智能的趋势,并了解如何在这个人工智能时代茁壮成长。

[## 人工智能在工业中的应用

了解人工智能在企业中的可能性和作用。每周,Emerj 创始人…

open.spotify.com](https://open.spotify.com/show/4gD9xiYU9iC24vnjUx1PTg)

22.梯度异议——一个机器学习播客

gradient dissubmission 是一个每周一次的机器学习播客,它让你看到行业领导者如何在现实世界中使用深度学习的幕后场景。这个很棒的播客邀请了像

[## 梯度异议-机器学习播客

梯度异议是一个机器学习播客,我们采访行业领袖,并讨论机器学习在…

wandb.ai](https://wandb.ai/site/podcast)

行动计划

照片由 Patrik MichalickaUnsplash 上拍摄

D ata 科学不易。尽管如此,在播客的帮助下,你会遇到发人深省的问题,并激发数据科学领域专家之间的辩论。播客可以帮助你理解复杂的概念,让你了解最新的突破,而不是练习灌输式的研究新课题的方法——教科书和测试。因此,将播客融入到你的日常生活中,并开始看到你思维过程的变化。

建议/提示

在听播客的时候,不要只是被动地听,试着在你的头脑中想象这个想法,积极地处理进入你大脑的信息并将这些想法拼凑起来。听完播客后,把你学到的东西写在一张纸上或电脑上,并存放在安全的地方。

通过积极倾听和回忆大脑中的信息,你可以对所听的事实和内容有更高的记忆力。这可以确保你确实从这些播客中受益,因为与阅读相比,听的人往往对想法的记忆力较低。

通过几个小时的倾听,你获得了所有这些新的想法和原则,你能够将它们融合在一起,为你生活中的问题提供新的解决方案。

所以,当你戴上耳机按下播放键时,确保你真的在集中注意力,而不只是被动地消费。

总结一下,下面是 Gimlet Media 首席执行官 Alex Blumberg 的一段话,

“很多人听播客是因为他们想学习一些东西,并在途中得到娱乐。”

感谢阅读这篇文章,我希望它能启发你开始听播客。

请在下面留下你想分享的任何其他播客的评论!

如果你对学习数据科学感兴趣,就从这两个伟大的系列开始吧!

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b) [## 数据科学简介

关于什么是数据科学、大数据、数据和数据科学过程及其应用。

towardsdatascience.com](/the-data-scientists-toolbox-part-1-c214adcc859f)

查看这些关于数据科学资源的文章。

[## 从零到英雄学习 Python 所需的一切

分享我用来学习 Python 的资源,从书籍、课程、播客到编码网站和…

towardsdatascience.com](/everything-you-need-to-learn-python-from-zero-to-hero-3dc950cb1b4c) [## 2020 年你应该订阅的 25 大数据科学 YouTube 频道

以下是你应该关注的学习编程、机器学习和人工智能、数学和数据的最佳 YouTubers

towardsdatascience.com](/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

其他联系方式:

快乐聆听!

数据科学的 20 大技能和关键词

原文:https://towardsdatascience.com/top-20-skills-and-keywords-for-data-science-6bc6bfc8c28a?source=collection_archive---------15-----------------------

在隔离即将结束的时候,你想学习新技能还是重温旧技能?

全球疫情和经济放缓对就业市场的影响非常不均衡。虽然 Slack 和 Zoom 等远程工作支持者正在加速招聘,但我们必须解决裁员和职位取消的问题。在这样一个时代,我们都想为那些仍然空缺的职位全力以赴。

众所周知,最大的战斗是与 ATS 的战斗。每个数据科学职位都有一个被雇佣者必须遵守的角色和职责。如果 ATS 无法从你的简历中识别出任何重要的技能或关键词,认为你不适合这份工作,那么你可能无法通过 ATS 可读性测试。

为了顺利通过 ATS 并突出您的技能,我按照字母顺序研究了您下一个数据科学职位的 30 项顶级技能和关键词。让我们看看它们是什么。

1.自动警报系统

云服务对于各种规模的企业来说都非常有用,可以帮助他们准备后端基础架构,通过只在需要时付费来显著降低云存储开支。云计算的先驱 AWS 已经成为数据科学家的一个充满活力的工具。

  1. 弹性计算云(EC2)
  2. 简单存储服务(S3)
  3. 关系数据库服务
  4. 红移
  5. 弹性 MapReduce

是 AWS 使用的一些实例。使用云服务的经验,尤其是像 AWS 这样受欢迎的服务,在你的数据科学职业生涯中是一个巨大的优势。

大多数技术公司现在都依赖这些服务,并坚持不懈地使用它们。因此,如果你熟悉这些服务中的一个,它肯定会给他们信心,你需要更少的培训来加入。随着越来越多的人进入数据科学领域,您希望您的简历尽可能突出!

2.大数据

数据科学是一个包含与数据相关的一切的领域。从清理、挖掘、准备和分析,数据科学是一个过程。

大数据是指难以实时存储和处理的海量数据。这些数据可用于分析洞察力,从而做出更好的决策。数据科学的原则保持不变,数据量成倍增长。

在真实的商业世界中,需要处理的是大数据。因此,从现在开始,无论你做什么项目,大数据都是你可以关注分析的东西。

3.商业智能(BI)

我不是说商业智能是数据科学的一部分。

然而,由于两者都必须做大量的工作来检查仅由业务流程使用的数据,因此 BI 通常与数据科学一起使用。简而言之,虽然 BI 帮助解读过去的数据,但数据科学可以分析过去的数据,识别趋势或模式,以做出未来预测。

BI 主要用于报告或描述性分析,这也可以通过数据科学来完成,因此,这是一项很好的学习技能。

热门 BI 工具:

  1. 微软的 PowerBI
  2. 画面
  3. SAP 商业智能(针对企业)
  4. Qlik

4.云计算

数据科学实践通常包括使用云计算产品和服务来帮助数据专业人员访问管理和处理数据所需的资源。

数据科学家的日常工作通常包括分析和可视化存储在云中的数据。您可能已经读到过数据科学和云计算携手并进,这通常是因为云计算帮助数据科学家使用提供数据库、框架、编程语言和操作工具的平台。

  1. 亚马逊— AWS
  2. 谷歌云平台——GCP
  3. 微软— Azure
  4. 阿里巴巴——阿里云

5.数据分析

数据科学是一个涵盖多个相关学科的总称,包括数据分析。虽然数据科学家应该根据过去的模式预测未来,但数据分析师可以从各种数据源中提取有意义的见解。

数据分析跨越描述性、诊断性、规范性和预测性分析,每种分析都有自己的应用。

数据分析的应用似乎永无止境。每天收集的数据越来越多,这为将数据分析应用于商业、科学和日常生活的更多领域带来了新的机遇。

6.数据探索

仓库中有数据,但是这些数据非常不一致。所以你必须清理和统一杂乱复杂的数据集,以便于访问和分析。

探索性数据分析(EDA) 是数据分析过程的第一步。在这里,你要弄清楚你所拥有的数据,然后弄清楚你想问什么问题,如何设计这些问题,以及如何最好地操作你可用的数据源来得到你需要的答案。

7.数据管理

您将处理的许多数据将会很混乱,可能会丢失值,可能会出现日期和字符串格式不一致的情况。在开始处理之前,您需要清理和整理您的数据。

数据的价值不是基于其来源、质量或格式;它的价值取决于你用它做什么!

数据管理包括获取、验证、存储、保护和处理所需的数据。数据管理可以包括以下技能—

  1. 数据争论—为下游运营转换和映射数据
  2. 数据处理—从原始数据中检索、转换和分类信息
  3. 数据安全性—防止未经授权的访问和数据损坏
  4. 数据治理—管理可用性、可用性、完整性和安全性
  5. 数据操作—使数据更容易阅读或更有条理
  6. 数据建模——数据、查询、设计数据流之间的关联
  7. 数据迁移—选择、准备、提取、转换和传输数据
  8. 数据仓库—存储来自数据源的数据,用于报告和分析
  9. 数据转换等等..

8.数据可视化

数据可视化是数据分析最重要的部分之一。以一种可理解的、视觉上吸引人的格式呈现数据一直是很重要的。数据可视化是数据科学家为了更好地与最终用户沟通而必须掌握的技能之一。有多种工具,如 Tableau、Power BI,它们给你一个很好的直观界面。

当然,这是数据科学的重要组成部分,因为它让科学家向技术和非技术受众描述和交流他们的发现。像 matplotlib、ggplot 或 d3.js 这样的工具让我们可以做到这一点。另一个很好的工具是 Tableau。

9。DevOps

我一直听说并相信数据科学是为那些懂数学、统计学、算法和数据管理的人准备的。然而,最近,我发现 DevOps 对于数据科学越来越重要。

DevOps 是一套结合软件开发和 IT 运营的方法,旨在缩短开发生命周期,并提供高质量的不间断交付。

DevOps 团队与开发团队紧密合作,有效地管理应用程序的生命周期。数据转换要求数据科学团队与 DevOps 紧密协作。DevOps 团队预计将提供高度可用的 Apache Hadoop、Apache Kafka、Apache Spark 和 Apache Airflow 集群来处理数据提取和转换。

DevOps 可以为数据科学做些什么?

  1. 调配、配置、扩展和管理数据集群
  2. 通过持续集成、部署和监控数据来管理信息基础架构
  3. 创建脚本,为各种环境自动提供和配置基础。

10.HADOOP

Hadoop 是数据科学家的必备品。

Hadoop 的主要功能是存储大数据。它还允许用户存储所有形式的数据,即结构化数据和非结构化数据。Hadoop 还提供了像蜂巢这样的模块来分析大规模数据。

现在,我不会说 Hadoop 是成为数据科学家的必要条件,但数据科学家必须知道如何首先将数据取出来进行分析,Hadoop 正是存储大量数据的技术,数据科学家可以在这方面工作。

11.机器学习

顾名思义,机器学习是让机器变得智能的过程,这些机器具有思考、分析和决策的能力。通过建立精确的机器学习模型,一个组织有更好的机会识别有利可图的机会——或避免未知的风险。

您应该对各种监督和非监督算法有很好的实践知识。

深度学习将传统的机器学习方法提升到了一个新的水平。它受到生物神经元(脑细胞)的启发。这里的想法是模仿人脑。使用这种人工神经元的大型网络,这被称为深度神经网络。现在的机构大多要求深度学习的知识,这个不要错过。

12.多元微积分和线性代数

大多数机器学习,总是数据科学模型,是建立在几个预测器或未知变量的基础上的。多元微积分的知识对于建立机器学习模型是很重要的。以下是在数据科学领域工作时您可能会熟悉的一些数学主题:

  1. 导数和梯度
  2. 阶跃函数、Sigmoid 函数、Logit 函数、ReLU(校正线性单位)函数
  3. 成本函数(最重要)
  4. 功能绘图
  5. 函数的最小值和最大值
  6. 标量、矢量、矩阵和张量函数

对于不喜欢或者不精通数学的人来说,数据科学很可能不是一个好的职业选择。数据科学家奇才擅长数学和统计学,同时能够与业务线高管密切合作,交流复杂方程的“黑匣子”中实际发生的事情

13.矩阵实验室

由 MathWorks 开发的 MATLAB 展示了深度学习的全套能力,并提供了从研究到原型的端到端集成工作流

数据科学和机器学习必须与矩阵打交道,MATLAB 最适合矩阵计算,用较少的代码行轻松设计复杂的神经架构。

Coursera 上吴恩达的 ML 课程在 Octave 上教授机器学习,Octave 是 MATLAB 的同义词。增加一项技能会让你的简历更引人注目,不是吗?

14.Python 河

当然啦!数据科学本质上是关于编程的。数据科学编程技能汇集了将原始数据转化为可操作见解所需的所有基本技能。虽然编程语言的选择没有特定的规则,但是 Python 和 R 是最受欢迎的。

我不是一个对编程语言偏好或平台有宗教信仰的人。数据科学家选择一种编程语言来满足手头问题陈述的需要。然而,Python 似乎已经成为最接近数据科学通用语言的东西。

点击阅读更多关于十大数据科学 Python 库

15.斯堪的纳维亚航空公司

就分析软件而言,SAS 是最老的软件之一。SAS 有自己的类似 SQL 的编程语言。任何数据分析语言的未来在未来几年都是非常光明的,因为根据高需求,训练有素的专业人员是不可用的。加入 SAS 的主要原因是—

SAS 工作——SAS 编程技能的需求是惊人的。统计显示,70%的分析工作是在 SAS 编程,其次是 R,然后是 Python。它根据行业需求不断演变的功能是其受欢迎的一个主要因素。

对于大一新生来说,情景会话的范围很广。银行大量使用情景应用程序,保险和其他金融服务公司如汇丰、花旗、摩根大通和富国银行也是如此。SAS 提供多种认证项目,让你接受技能培训。

16.附加电源装置(Supplementary Power Supply Set 的缩写)

IBM SPSS 软件平台提供高级统计分析、庞大的机器学习算法库、文本分析、开源可扩展性、与大数据的集成以及无缝部署到应用程序中。

我可以说,IBM SPSS 是一个相对较少使用的工具。它更受社会科学、心理学、金融、人力资源等领域的研究学者和学者的欢迎。虽然大多数数据科学家和行业使用 R、Python 或 SAS 作为主要工具,但如果你在心理学或相关领域工作,SPSS 是一个很好的工具。

也有人说,随着 R 接管,SPSS 正在消亡

17.统计数字

作为一名数据科学家,你应该能够使用统计测试、分布和最大似然估计等工具。一个优秀的数据科学家会意识到什么技术是解决他/她的问题的有效方法。有了统计数据,你可以帮助利益相关者做决定,设计和评估实验。

18.结构化查询语言

SQL 是第四代语言;一种特定领域的语言,设计用于管理存储在 RDMS(关系数据库管理系统)中的数据,并用于 RDSMS(关系数据流管理系统)中的流处理。在数据变量相互关联的情况下,我们可以用它来处理结构化数据,这是数据科学的核心

19.(舞台上由人扮的)静态画面

Tableau 是目前商业智能中非常流行和强大的数据可视化工具。Tableau 的数据分析快速而强大。通过可视化仪表板和工作表,Tableau 涵盖了从简化原始数据到非常容易理解的格式,清理数据和识别潜在的趋势和模式。

很长一段时间以来,像百事可乐、威瑞森、查尔斯·施瓦布、可口可乐、Chipotle 这样的大公司都在使用 Tableau 来利用他们的数据并做出结论性的明智决策。对于任何对数据科学或数据分析职业感兴趣的人来说,Tableau 这样的工具是必不可少的。

20.VBA

Excel 是各种业务中最常用的工具之一。Excel 本身非常灵活和强大,然而,当甚至复杂的功能都不够好时,VBA 就出现了。

你可以在 VBA 计算、模拟或测试这些数据。Excel VBA 有自己的局限性和替代方案。同样的工作也可以在 SQL 或 Python 中高效地完成,但是,这显然取决于您的业务需求。

注意:如果你在一个 excel 文件在工作流程中占很大比重的环境中工作,特别是你自己的工作输出必须是 excel 文件本身的环境中,你可能想要学习 VBA。

感谢您的阅读!我希望你喜欢这篇文章。请务必告诉我,在您的数据科学之旅中,您期待学习或探索什么技能?

数据帐篷快乐!

免责声明:本文表达的观点仅代表我个人,不代表严格的观点。

了解你的作者

拉什是芝加哥伊利诺伊大学的研究生。她喜欢将数据可视化,并创造有见地的故事。当她不赶着赶学校的最后期限时,她喜欢喝一杯热巧克力,写一些关于技术、UX 等的东西。

编码挑战和竞赛前 25 名网站[2021 年更新]

原文:https://towardsdatascience.com/top-20-websites-for-coding-challenge-and-competition-in-2020-f667089a5b47?source=collection_archive---------1-----------------------

编码

这里是我列出的最好的编码挑战和练习编码的比赛的网站。

照片由威森·王Unsplash

现在是 2020 年,一个十年的结束,另一个十年的开始。在人类在地球上繁荣昌盛的 10 年里,我们在科学和技术方面取得了惊人的突破。

仅举几个例子:好奇号火星车首次登陆火星(2012 年),探测来自深空的引力波(2015 年),引入基因编辑超能力——CRISPR(2018 年),用视界望远镜“拍摄”第一张黑洞照片(2019 年)。

人工智能的崛起

同样,2010 年代最重大的突破是人工智能的兴起,或者更为人熟知的人工智能。有了人工智能,科幻小说变得栩栩如生。

机器学习赋予了机器学习和深度学习的能力——这是一项用人工神经网络重建人脑复杂性的繁重工作——赋予了机器自己的思想。

随着技术不断进步,深度学习专家们都倾向于一个目标,即创造一种人工通用智能——一种能够执行任何形式操作的机器,类似于人类。

代码的力量

你在上面读到的每一个量子飞跃都是因为计算机编程而成为可能的。举例来说,好奇号火星车事先被预编程,这样它就可以在没有人类干预的情况下独自探索火星;产生黑洞的图像需要一种算法从地球表面的卫星网络收集图像数据。

这种与计算机交流的媒介导致了我们今天看到的许多科学突破。没有它,我们的社会将停滞不前。

我写关于数据科学和人工智能的文章。如果你想在我发帖时得到通知,现在就订阅我的媒体简讯吧!

如果你不是普通会员,考虑一下今天就订阅,只需 5 美元。你将直接支持我,你将获得大量的优秀作品!

每个人都会编码

Adi Goldstein 在 Unsplash 上拍摄的照片

在这个指数数据增长的时代,我相信每个人都应该掌握编码的艺术。创始人、首席执行官、商业领袖、风投,甚至老年人和年轻人。随着经济差距继续扩大,不平等现象持续存在,编码技能将是生存所不可或缺的。

好消息是任何人都可以学习如何编码!坏事吗?编码很难。但是只要你拥有这些特质:好奇心、决心和纯粹的意志,你就能做到。写代码也是为了解决问题。这是编程背后的基本概念。它通常用于自动化一项单调的任务。

此外,学习如何编码的最好方法之一是实践,大量大量的实践,让编码成为一种习惯。那么,在学习编码时,有什么比通过编码挑战和竞赛来提高技能更好的方法呢?

这里是我收集的 20 个网站,它们可以帮助你练习编程,并赋予你解决复杂算法问题的机会。

该列表没有任何排名顺序。所以现在向下滚动,享受它吧!

我用来查看网站的模板

简介 :
特点:
最佳品质:

编码网站列表

1.黑客地球

HackerEarth 是一个流行的编码平台,拥有 8000 多个问题、2000 个挑战和 1000 个黑客马拉松。它还受到 1000 多家公司的招聘经理的信任。这个平台拥有一个由 300 万开发者组成的繁荣社区。

特点:

  • 练习(基本编程问题)
  • 竞赛(从初学者到长达一周的马拉松)
  • 黑客马拉松(解决现实世界的问题和商业挑战)
  • 数据科学竞赛(测试您的数据科学技能)

最佳品质:网站显示比赛和竞赛的剩余天数,它有一个开发者评估软件,显示你的进步。还有一个远程面试功能加上分析,让公司看到你的统计数据。

[## HackerEarth |帮助 300 多万开发人员升级,1000 多名招聘人员雇佣顶级技术人才。

通过编码竞赛、数据科学竞赛和黑客马拉松帮助 3M+开发者变得更好。信任者…

www.hackerearth.com](https://www.hackerearth.com/)

2.黑客银行

HackerRank 是一个招聘平台,事实上是为全球 2000 多家公司评估开发人员技能的平台。通过使技术招聘人员和招聘经理能够在招聘过程的每个阶段客观地评估人才,HackerRank 帮助公司雇佣熟练的开发人员,并更快地创新。

功能:

  • 编码实践
  • 面试准备

最佳品质: HackerRank 是最顶尖的编码实践网站之一。这是众所周知的匹配开发商与伟大的公司,对雇主和雇员都有用。

[## 黑客银行

加入 700 多万开发者。练习编码,准备面试,然后被录用。

www.hackerrank.com](https://www.hackerrank.com/)

3.练习

Exercism 是一句话——“代码实践和每个人的导师”。它有跨越 51 种语言的 3,173 个练习来提高您的编程技能,并与他们热情的导师团队进行富有洞察力的讨论。最棒的是,它永远 100%免费。

功能:

  • 语言轨迹
  • 个人辅导
  • 实践模式

最佳品质:exercim 从语言轨道开始,允许用户选择他们喜欢的语言。此外,还有人类导师会检查你的代码,并在你进步时帮助你改进。这使得该平台非常适合希望加深对新编程语言理解的初学者。

[## 练习

通过 52 种语言的 3,133 个练习提升您的编程技能,并与我们专门的…

练习 10](https://exercism.io/)

4.SPOJ

SPOJ 是一个简单的网站,有大量的编码挑战。这些挑战帮助你成为一名真正的编程大师,并给予你构建高效算法的技能。

功能:

  • 比赛
  • 算法
  • 级别
  • 状态
  • 讨论页面

最佳品质: SPOJ 有大量令人难以置信的编码挑战,这些挑战将真正考验你的技能。你也可以参加比赛来展示你的技能。

[## 环球在线法官

SPOJ (Sphere Online Judge)是一个在线裁判系统,拥有超过 315,000 名注册用户和超过 20,000 个问题。的…

www.spoj.com](http://www.spoj.com/)

5.方案 mr

Programmr 是一个在线互动平台,任何人都可以学习和练习编码。他们认为最好的学习方法是在自学环境中按照自己的速度学习。Programmr 声称要做世界上最好的编码模拟器,在这里你可以编码和运行各种程序。

功能:

  • 挑战
  • 项目
  • 比赛
  • 证书

最佳品质: Programmr 有一个惊人的在线编码模拟器和一个 B2B API,允许任何人将编码小部件集成到网站中。

[## 编程挑战|编程先生

通过解决 Programmr 的编码挑战,以最有趣的方式提高您的编码技能!不要忘记…

www.programmr.com](http://www.programmr.com/exercises)

6.TopCoder 挑战

TopCoder 是一个有竞争力的编程平台。它提供了一系列算法挑战,您可以在他们自己的代码编辑器中解决这些挑战。网站上总是有挑战,如果你准备好了,你可以随时参与。

功能:

  • 挑战
  • 零工

最佳品质:挑战有明确的截止日期,每个挑战上都有明确的奖品。它们还显示了需要什么样的语言或库。虽然这些挑战并不适合初学者,但它们的构建非常好。

[## 顶部编码器

Topcoder 是一个众包市场,它将企业与难以找到的专业知识联系起来。Topcoder 社区…

www.topcoder.com](https://www.topcoder.com/challenges)

7.代码力

CodeForces 是一个协作平台,编码人员可以参与“回合”,设定时间限制并将分数分发给参与者。CodeForces 也有竞赛、习题集以及程序员小组。

特色:

  • 比赛
  • 体育馆
  • 问题集

最佳品质: CodeForces 非常适合寻求有趣挑战的程序员,他们可以提高自己的技能,加入适合自己需求的团队。健身房的功能也非常独特,程序员可以在特定的挑战中训练他们的技能,并在最后看到他们的地位。

[## 代码力

你好,Codeforces 社区!我很高兴邀请你加入 Codeforces

codeforces.com](https://codeforces.com/)

8.代码战争

Codewars 是一个设计良好的平台,用户可以在这里一起工作,创造挑战。有两组人让它工作,创作者授权卡塔教授各种技术,用启发他人的解决方案解决卡塔,并用建设性的反馈进行评论,领导者将调节内容和社区。

类别:

  • Kata(编码实践)
  • 对打(1v1 挑战)
  • 论坛
  • 维基网

最佳品质: Codewar 有一个迷人的界面,以独特的方式呈现挑战,命名为 Katas,程序员在这里获得技能,并在对打中挑战其他程序员。这是学习编码并同时享受乐趣的最好地方之一。

[## 登录| Codewars

Codewars 是开发人员通过挑战掌握代码的地方。在道场训练形,达到你的最高境界…

www.codewars.com](https://www.codewars.com/users/sign_in)

9.厨师长

CodeChef 是一个有竞争力的编程平台,旨在帮助程序员提升他们在算法、编程和竞赛领域的技能。他们提倡学习和友好编程的文化,拥有一个庞大的问题管理员社区。

功能:

  • 实践
  • 竞争
  • 讨论
  • 主办竞赛
  • 校园分会

最佳品质: CodeChef 已经是最大的竞争编程平台之一。他们开放自己的平台,让任何人都可以举办编程竞赛,并有一个名为 campus chapter 的功能,作为编程俱乐部使用的工具。他们每个月还会举办 3 次颁奖比赛。

[## CodeChef |编程竞赛、编程竞赛、在线计算机编程

CodeChef——一个为有抱负的程序员提供的平台 code chef 是一个帮助程序员在…

www.codechef.com](https://www.codechef.com/)

10.CodeGym

CodeGym 是一个在线 Java 编程,80%基于实践。任何想学 Java 的人,这里都是可以去的地方。

特性:

  • 课程
  • 任务
  • 比赛
  • 闲谈
  • 论坛

最佳品质: CodeGym 为 Java 初学者提供了实用的任务,让他们了解所有他们需要知道的东西。他们还提供即时解决方案验证,以便可以立即发现错误。CodeGym 还利用最新的教学技术,令人惊叹的可视化和游戏。

[## CodeGym 是一门学习 Java 编程的在线课程

CodeGym 是一个在线 Java 编程课程,80%是基于实践的

codegym.cc](https://codegym.cc/)

11.CodePen 挑战

CodePen 是一个很酷的在线 IDE,它允许你在浏览器中编写代码,并在你构建代码时看到结果。CodePen challenges 是一个通过构建东西来提升你的技能的地方。每周都有新的挑战出现在你面前,最好的“钢笔”会被挑选出来。

功能:

  • 播客
  • 教育

最佳品质: CodePen 挑战非常有趣,是一个创造力和协作的地方。根本没有竞争,因为没有什么可失去的,但你确实通过这些挑战获得了技能。

[## 密码笔

一个在线代码编辑器、学习环境和社区,用于使用 HTML、CSS 和 JavaScript 的前端 web 开发…

codepen.io](https://codepen.io/)

12.编码游戏

CodinGame,我们的目标是让程序员通过解决世界上最具挑战性的问题来不断提高他们的编码技能,学习新概念,并从最好的开发人员那里获得灵感。

功能:

  • 实践
  • 竞争
  • 捐助
  • 学习

最佳品质:coding game 以游戏的形式帮助人们学习编码,让他们以有趣的方式学习。开发人员也可以向导师寻求帮助,以审查他们的代码并相互比较解决方案。

[## 编码游戏和更好编码的编程挑战

通过用 25 种以上的语言解决有趣的挑战来学习新概念,解决所有热门的编程话题。就…而言

www.codingame.com](https://www.codingame.com/start)

13.LeetCode

LeetCode 是帮助你提升技能、拓展知识面、准备技术面试的最佳平台。它被成千上万的程序员用来收集亚马逊、脸书、谷歌、LinkedIn 等的算法实践。有 1400 多个问题需要练习。

功能:

  • 算法
  • 数据库ˌ资料库
  • 并发
  • 比赛

最佳品质: LeetCode 有一个 explore 工具,可以帮助程序员迈向编程生涯的下一步。LeetCode 帮助他们准备技术面试,并帮助公司雇佣顶尖人才。

[## 问题— LeetCode

提高你的编码技能,迅速找到工作。这是扩展你的知识和做好准备的最好地方…

leetcode.com](https://leetcode.com/problemset/all/)

14.极客工作室

GeeksForGeeks 是一个为极客服务的网站。它有大量关于编程和算法的资源。它还有一个面试部分,帮助程序员赢得他们梦想的工作。还有一个优秀的 C 和 C++谜题集合供程序员解答。

特性:

  • 算法
  • 采访
  • 学生
  • 盘问

最佳品质: GeeksforGeeks 有大量的文章,教授数据结构、算法、计算机科学等主题,以及测试知识和理解能力的测验。这是一个吸收一些 CS 知识的好地方。

[## 谜题——极客之福

最近的谜题!拼图 C 拼图 C++拼图:拼图 1 |用两根相同的线测量 45 分钟拼图…

www.geeksforgeeks.org](https://www.geeksforgeeks.org/puzzles/)

15.投影欧拉

如果你正在学习算法和计算机编程,那么你可能听说过“欧拉工程”。一个数学问题的集合,是为有兴趣将数学和编程结合起来的问题解决者而制作的,Project Euler 要求使用数学来形成算法并获得有效的解决方案,并使用计算机编程来实际解决它。这些问题难度很大,而且不是在公园里散步。

功能:

  • 存档的问题
  • 新闻

最佳品质:虽然网站没有内置的代码编辑器或解决方案检查器,但这将是程序员下载 IDE 并在其上编码的好机会。此外,解决这些问题有助于开发作为程序员不可或缺的技能,因为数学是算法和数据结构的基础。

[## 存档的问题—欧拉项目

问题档案表显示了问题 1 到 684。如果你想解决最近出版的 10 本书…

projecteuler.net](https://projecteuler.net/archives)

16.URI 在线法官

URI 在线法官是由 URI 大学计算机科学系开发的。该项目的主要目标是提供编程实践和知识共享。他们的网站有一个友好的用户界面,包含 1000 多个问题,分为 8 大类,用 11 种语言解决。

功能:

  • 问题存储库
  • 论坛
  • 竞争和排名
  • 学术的
  • 比赛

最佳品质: URI 是由大学生开发的,这意味着他们拥有想要以有趣的方式学习编码的初学者心态。而且问题结构合理,划分也相应,从初学者的类别开始,逐渐进入计算几何、图学等更复杂的题目。

[## URI 在线法官

URI 在线法官是为你开发的项目!我们的目标是提供一个平台,在那里你可以学习,实践和…

www.urionlinejudge.com.br](https://www.urionlinejudge.com.br/judge/en/login)

17.回复挑战

回复挑战(Reply Challenges)是由“回复者”设计的一系列挑战,面向任何热爱技术和网络竞赛的人开放。回复挑战都是关于在编码、网络安全、创造力和投资等领域获得乐趣和展示才华。每个挑战都有丰厚的奖品——Macbook Pro 16、Airpods Pro 等。挑战对学生和专业人士开放。

特性:

  • 投资挑战
  • 代码挑战标准
  • 代码挑战青少年
  • 网络安全挑战(即将推出)
  • 创意(即将推出)

最佳品质:回复挑战是有趣的挑战,有诱人的奖品。他们非常多样化,任何人都可以自由加入。

[## 回复挑战

由 Replyers 设计的一系列挑战,向任何热爱技术和在线竞赛的人开放。回复…

challenges.reply.com](https://challenges.reply.com/tamtamy/home.action)

18.KickStart——谷歌的编码竞赛

Kick Start 是 Google 举办的一项竞赛,它为全世界的程序员提供了一个通过在线竞赛发展技能的机会。每一轮持续 3 个小时,他们的特色是由谷歌工程师开发的算法挑战,这样你就可以尝到在谷歌工作的滋味。他们的轮次定期举行,以便每个人都有机会参与。

特色:——

最佳品质:排名第一的程序员有机会参加面试,甚至可能在谷歌找到工作。

Hashcode 是 Google 举办的又一次伟大的编码比赛。

[## 启动——谷歌的编码竞赛

用面向学生和编码竞赛新手的算法难题磨练你的编码技能。参与…

codingcompetitions.withgoogle.com](https://codingcompetitions.withgoogle.com/kickstart/about)

19.代码堵塞

Code Jam 是谷歌历史最长的全球编码竞赛,各种水平的程序员在这里测试他们的技能。参与者必须通过一系列的算法难题来赢得世界总决赛的席位,有机会成为冠军并赢得 15,000 美元的高额奖金。

功能:——

最佳素质: Code Jam 以 4 轮在线的形式挑战全球程序员解决高难度算法问题,每年在不同的国际 Google 办事处举办年度 Code Jam 世界总决赛。这个巨大的挑战让所有级别的程序员都可以获得经验,并激励他们提高技能,争取进入决赛。

[## 代码堵塞——谷歌的编码竞赛

把你的编码技能的测试,因为你的工作方式,通过多轮的算法编码难题,为…

codingcompetitions.withgoogle.com](https://codingcompetitions.withgoogle.com/codejam)

20.Kaggle Learn

Kaggle 因成为数据科学家相互合作和竞争的地方而闻名。但是他们也有一个叫做 Kaggle Learn 的平台,在那里提供微课。它们是迷你课程,数据科学家可以在其中学习可以立即应用的实用数据技能。他们称之为成为数据科学家或提高现有技能的最快(也是最有趣的)方式。提供的课程有:Python、Pandas、SQL 和数据可视化。

特性:

  • 教程
  • 练习

最佳品质:这些微型课程将复杂的主题归结为关键的组成部分,帮助初学者快速学习重要的主题并获得必要的技能。他们内置的代码编辑器 kernel 易于使用,非常适合初学者。

[## 学习 Python,Data Viz,Pandas &更多|教程| Kaggle

你可以立即应用的实用数据技能:这就是你将在这些免费的微型课程中学到的东西。他们是…

www.kaggle.com](https://www.kaggle.com/learn/overview)

21.SoloLearn

SoloLearn 是学习如何编码的最佳场所之一,拥有超过 3900 万学习者、1784 节课和 14k 测验。我开始在这个网站上学习如何编写 HTML 和 CSS 代码,这太棒了。

特色

  • 伟大的网站与代码操场和论坛
  • 移动应用,随时随地学习
  • 免费证书

最好的品质:【SoloLearn 最好的一点就是所有的课程都是免费的,在网站和移动应用上。

[## SoloLearn:学习编码

立即加入,学习基础知识或提升现有技能

www.sololearn.com](https://www.sololearn.com/)

22.极客

Geektastic 与其他平台不同,因为他们还提供同行评审的带回家挑战,这些挑战由来自谷歌和亚马逊等公司的专家评审。

特征

  • 当你作为开发人员加入 Geektastic 时,你完成了他们的快速挑战,这是简短的多项选择挑战。
  • 挑战由社区创建,并使用 ELO 评级系统(用于计算零和游戏(如国际象棋)中玩家的相对技能水平)对挑战和开发者进行评级,允许您将自己与他们全球社区的其他人进行比较。

最佳品质

  • 如果你被选中加入他们的付费评论团队(如果你这样做,恭喜你!!)您可以获得一份不错的兼职工作,审查社区和高端技术企业客户群提交的代码挑战,他们使用该平台测试软件工程和开发运维职位求职者的技能。

[## 技术评估和代码挑战平台

我们分析你的候选人的代码质量,解决问题的技能,可维护性,测试覆盖率和解决方案设计…

geektastic.com](https://geektastic.com/)

23.编码球棒

CodingBat 是一个免费的现场编码问题网站,用于构建 Java 和 Python 的编码技能(示例问题)。CodingBat 是斯坦福大学计算机科学讲师尼克·帕兰特的一个项目。

特色

  • 编码 Bat 问题被设计为具有低开销:
  • 简短的问题陈述(如考试)
  • 没有要安装的内容
  • 浏览器中的即时反馈

最佳品质:【CodingBat 最大的优点是它的简单性,以及如何构建和实践小代码问题来巩固您的代码技能。

[## 编码 Bat Java

代码实践

codingbat.com](https://codingbat.com/java)

24.暗号

CodeSignal 有一个技术面试练习,通过在高级 IDE 中完成真实世界的评估,帮助您为技术面试做好准备。它从定制个人学习计划开始,然后通过解决现实世界的问题来帮助你掌握关键主题。

特性

  • 练习并理解如何应用技术面试中提出的核心概念
  • 了解你的优势和劣势,知道在面试前你应该把大部分时间花在哪里
  • 刷新您的面试知识,验证您对技术面试中常见的重要技能和概念的理解

最佳品质:coding bat 最大的优点是它的可靠性,它被世界各地的许多科技公司所使用。

[## 面试练习|代码信号

技术面试练习-用高级编码中的真实问题模拟完整的评估…

codesignal.com](https://codesignal.com/developers/interview-practice/)

25.埃达比特

Edabit 是一个新的编码平台,以 JavaScript(Python 和 C#即将推出)的交互式教程和 C#、Java、JavaScript、PHP、Python、Ruby 和 Swift 的挑战为特色。这是最快、最简单、最容易上瘾的学习方式。

功能

  • 无限的挑战,让你可以快速提升自己的能力。
  • 从简单开始,按照你自己的速度前进,直到你能够战胜最艰难的挑战。
  • 简单的游戏机制,使学习过程有趣和上瘾。获得经验,解锁成就和水平。

最佳品质:EDA bit 最棒的地方在于它易于使用和清理界面,以及为编码教程增添乐趣的 shuffle 特性。

[## Edabit //通过 10,000 多个交互式挑战学习编码

通过有趣的小挑战学习编码。获得经验,解锁成就和水平。这就像多林哥的…

edabit.com](https://edabit.com/)

呼吁采取行动

伊森·埃利萨拉在 Unsplash 上拍摄的照片

在这个时代,编程是一项和原始时代生火和狩猎一样重要的技能。

这并不是说一个没有这种技能的人将注定失败,这只是意味着拥有这种技能的人将会占据主导地位并取得成功。这就像喝了一种特殊的药水,赋予你神奇的力量或者被闪电击中,被赋予超高速。

鉴于编码给我们的世界带来的影响,以及它使之成为可能的技术,编码应该被视为一种超级力量。

行动计划

  1. 如果你是一个完全的初学者,首先选择一种编程语言。
  2. 参加像#100DaysofCode 这样的挑战,它可以给你作为一个完全的初学者开始编码的动力,并继续编码。或者你可以找个朋友和你一起编码。
  3. 从上面的列表中选择一两个,找到适合自己的,坚持到最后。
  4. 卡住的时候不要看对答案,什么都学不到。相反,确保你做对了基础,然后再尝试挑战。
  5. 加入 Reddit、Discord 等社区,提出问题。
  6. 安装一个 IDE 来解决一些问题,或者使用 Jupyter 笔记本。

今天开始编码永远不会太晚。如果你已经是一名程序员,或者是这个领域的专家,那么恭喜你,我希望你在你的旅程中蒸蒸日上!

我希望你发现这个列表是有用的,并且我已经激励你开始编码。

感谢阅读,并保持安全!

这里有一些我写的关于学习数据科学的文章

[## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 互联网上 20 大免费数据科学、ML 和 AI MOOCs

以下是关于数据科学、机器学习、深度学习和人工智能的最佳在线课程列表

towardsdatascience.com](/top-20-free-data-science-ml-and-ai-moocs-on-the-internet-4036bd0aac12)

联系人

如果你想了解我的最新文章,请关注我的媒体

其他联系方式:

2020 年你应该订阅的 26 大数据科学 YouTube 频道[2021 年更新]

原文:https://towardsdatascience.com/top-20-youtube-channels-for-data-science-in-2020-2ef4fb0d3d5?source=collection_archive---------6-----------------------

数据科学| Youtube

这里是你应该关注的学习编程、机器学习和人工智能、数学和数据科学的最佳 YouTubers。

Szabo Viktor 在 Unsplash 上拍摄的照片

Y ouTube 是一个娱乐和教育的绝佳平台。最棒的是,在 Youtube 上观看视频不需要每月 10 美元的订阅费,而是完全免费的。除了唯一的货币,你花钱看他们是你的时间,你决定看什么完全取决于你。关于 YouTube 的事情是,如果你知道如何明智地使用它,珍惜你的时间并意识到你观看的视频,你实际上从它那里获得了一些有用的东西,为你的生活增加了价值。这是一个叫做机会成本的概念。

“我们所做的一切都有机会成本。这就是为什么我们必须有意识,以确保我们所追求的是我们真正重视的,因为追求会留下无数失去的机会。我们选择了一种体验,而牺牲了所有其他体验。”——克里斯·马塔卡斯

YouTube 上的数据科学

价格令人质疑的数据科学在线课程充斥网络,大部分不可信,只是一种营销策略。与其在网上淘,为什么不去 YouTube?YouTube 是一个很好的学习平台,因为它能够可视化复杂的主题。如果你要学习 NLP,你会读一本关于它的书还是看一个经验丰富的程序员用代码和直观的例子向你解释它?我本人更喜欢后者。

尽管 YouTube 也遭遇了类似的 clickbait 视频问题,但这个平台上有一些非常好的宝石,足智多谋的人们几乎免费提供教程和课程。因此,在本文中,我将分享这些创造数据科学最佳视频的瑰宝,无论是其建议、编码教程、项目等。

新冠肺炎让每个人都呆在家里,这是开始学习新东西的绝佳机会,为什么不把数据变成科学呢?一个正在蓬勃发展并在社会中发挥巨大作用的领域。不要照本宣科,跟随这些 YouTubers,从他们多年的经验中获得见解和建议。此外,您可以通过阅读他们的教程来学习如何编码,并掌握一项新技能。

所以,在下一个标签中打开 YouTube,订阅下面这些 YouTube!

YouTubers 上的

UnsplashRachit 坦克拍摄

走向数据科学

说到 youtube 频道, TDS 有自己的 Youtube 频道!通过这个平台,他们带来了数据科学方面最优质的内容,包括采访、工作-生活、新工具等。TDS 是媒体上最大的数据科学出版物,所以为什么不在 YouTube 上查看一下,看看他们在做什么!

最喜欢的播放列表:我们在 YouTube 上找到的一些最好的视频。

[## 走向数据科学

www.towardsdatascience.com 东方数据科学有限公司是一家在加拿大注册的公司。利用媒介,我们提供…

www.youtube.com](https://www.youtube.com/channel/UCuHZ1UYfHRqk3-5N5oc97Kw)

1.蒂姆的技术

Tech With Tim 是一名出色的程序员,他教授 Python、Pygame 游戏开发、Java 和机器学习。他在 Python 上创建了一流的编码教程。

网站

最喜欢的播放列表: Python 搭配机器学习教程

[## 蒂姆的技术

Python 编程,游戏开发,Pygame,Java 教程,机器学习。这是一些…

www.youtube.com](https://www.youtube.com/channel/UC4JX40jDee_tINbkjycV4Sg)

2.Sentdex

Sentdex 创建了 YouTube 上最好的 Python 编程教程之一。他的教程涵盖了完全的初学者,不仅仅是基础知识。了解机器学习、金融、数据分析、机器人、网页开发、游戏开发等等。看看他在新冠肺炎·卡格尔挑战赛上的最新视频

网站

最喜欢的播放列表:用 Python 进行机器学习

[## sentdex

Python 编程教程,不仅仅是基础知识。了解机器学习、金融、数据分析…

www.youtube.com](https://www.youtube.com/user/sentdex/)

3.科里·斯查费

科里斯查费为程序员和开发人员创建教程,涵盖从初学者到高级水平的主题。各种主题,如 Python,SQL,JavaScript,Git,以及技巧和窍门都涵盖了,以帮助你的职业生涯。科里的视频有

网站

最喜欢的播放列表: Python 教程

[## 科里·斯查费

欢迎来到我的频道。这个频道专注于为软件开发人员创建教程和演练…

www.youtube.com](https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g)

4.Python 程序员

Python 程序员是一个 YouTuber,你猜对了,他提供与 python 相关的内容。他的内容包括 Python、数据科学、机器学习、书籍推荐等方面的教程。如果你在学习 Python 时需要帮助,他将会帮助你。

最喜欢的播放列表:数据科学课程

[## Python 程序员

我是 Giles McMullen-Klein,这是我的 YouTube 频道。我的内容包括 python、数据科学、机器…

www.youtube.com](https://www.youtube.com/channel/UC68KSmHePPePCjW4v57VPQg)

5.基思·加利

Keith Galli 是麻省理工学院的毕业生。他制作关于计算机科学、编程、棋盘游戏等的教育视频。

最喜欢的播放列表: Python 熊猫数据科学

[## 基思·加利

刚从麻省理工毕业。我制作关于计算机科学、编程、棋盘游戏等等的教育视频!我在网上找到的…

www.youtube.com](https://www.youtube.com/channel/UCq6XkhO5SZ66N04IcPbqNcw/about)

6.大卫·兰格

David Langer 的频道发布了关于数据科学各个方面的精彩视频。他的视频涵盖了数据挖掘项目的整个生命周期——数据争论、数据探索、数据清理、数据可视化、数据分析、特征工程和机器学习。讲授的主要编程语言是 R 编程语言,他还涉及到许多相关的库,如 ggplot2、randomForest 和 rpart。

最喜欢的播放列表:带 R 的数据科学简介

[## 大卫·兰格

该频道的重点是发布关于数据科学各个方面的高质量教育内容。视频……

www.youtube.com](https://www.youtube.com/channel/UCRhUp6SYaJ7zme4Bjwt28DQ)

7.安德烈亚斯·克雷茨

Andreas Kretz 是一名数据工程师,也是数据科学管道公司的创始人。对他来说,数据工程就是摄取、处理和存储数据,以帮助数据科学家做他们最擅长的事情。在他的频道里,他做直播,关于如何获得数据工程实践经验的教程,以及关于 Hadoop、Kafka、Spark 等数据工程的 Q & A 视频。

网站

最喜欢的播放列表:数据工程在线课程

[## 安德烈亚斯·克雷茨

我帮助你进入数据工程,数据科学的管道。构建大数据平台。的故乡…

www.youtube.com](https://www.youtube.com/channel/UCY8mzqqGwl5_bTpBY9qLMAA/videos)

8.自由代码营

FreeCodeCamp 是一个令人惊叹的非营利组织和开源社区,它收集了帮助人们免费学习编码和构建自己的项目的资源。他们的网站对任何人学习编程都是完全免费的,他们有自己的新闻平台,分享关于编程和项目的文章。

最喜欢的播放列表:数据科学

[## freeCodeCamp.org

我们是一个由忙碌的人们组成的开源社区,他们为非营利组织学习编码和构建项目。

www.youtube.com](https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ)

9.跳板

跳板 YouTube 频道发布了对谷歌、优步、Airbnb 等顶级公司的数据科学家的采访。从这些视频中,您可以一窥作为数据科学家的感受,并获得应用于生活的宝贵建议。

网站

最喜欢的播放列表:数据科学,机器学习工程热门话题

[## 跳板

在线学习,有工作保障。找份工作或者把你的钱要回来。深入数据科学、UX 设计等领域…

www.youtube.com](https://www.youtube.com/channel/UCqd6TofKNjqagInm5Waeu7w)

10.数据科学道场

数据科学 Dojo 是一个致力于向所有人教授数据科学的频道。他们致力于剥离数据科学的复杂性,并以一种更容易接受的形式呈现出来。在这个频道中,您可以找到大量关于数据工程和科学的教程、讲座和课程。

网站

最喜欢的播放列表: Python 编程教程

[## 数据科学道场

在 Data Science Dojo,我们相信数据科学适合所有人。以下人员参加了我们的现场数据科学训练营…

www.youtube.com](https://www.youtube.com/user/DataScienceDojo)

11.CS 道场

CS Dojo 由 YK·苏格创建,他是一名多伦多的软件开发人员和数据科学家,在包括谷歌和微软在内的多家软件公司工作过。他制作关于编程和计算机科学的视频。

网站

最喜欢的视频:获得数据科学工作的 5 个技巧【面试】

[## CS 道场

你好。我的名字叫 YK,我在这里制作的视频大多是关于编程和计算机科学的。如果你还没有,你…

www.youtube.com](https://www.youtube.com/channel/UCxX9wt5FWQUAAz4UrysqK9A)

12.365 数据科学

365 数据科学是一个致力于帮助数据科学爱好者的频道,他们在资格和可信度方面遇到了困难。这个频道希望帮助那些想成为数据科学家的人做好充分准备,并开始他们的职业生涯。

网站

最喜欢的播放列表:2020 年数据科学生涯

[## 365 数据科学

从 365 数据科学到 2020 年 4 月 15 日免费数据科学课程✅在这里注册:http://bit.ly/2J0IEjy 从…

www.youtube.com](https://www.youtube.com/channel/UCEBpSZhI1X8WaP-kY_2LLcg)

13.爱德华卡。

Edureka 是一个电子学习平台,包含大量关于 python、R、机器学习、数据科学等主题的教程和演练。

网站

最喜欢的播放列表:Python 中的机器学习教程

[## 爱德华卡。

感谢您的订阅!如果你还没有,现在就订阅吧!我们是一个实时互动的电子学习平台…

www.youtube.com](https://www.youtube.com/user/edurekaIN)

14.数据学校

凯文·马卡姆创立了数据学校。他致力于帮助初学者学习正确的东西,并专注于他们首先需要掌握的主题。他的频道包含面向所有技能水平的顶级教程。Kevin 拥有在物理课堂和网络上使用 Python 的教学经验。

最喜欢的播放列表:Python 中的数据分析与熊猫

[## 数据学校

你是否在努力学习数据科学,以便获得你的第一份数据科学工作?你可能对…感到困惑

www.youtube.com](https://www.youtube.com/user/dataschool/featured)

15.数据营

DataCamp 的频道推广成熟的教程,帮助学生从世界顶级数据科学家那里学习和获得技能。他们提倡的原则是,在每节课结束后,立即应用学生所学的知识,确保学生记住并理解手头的主题。

网站

最喜欢的播放列表: R 教程

[## 数据营

DataCamp 通过更好地利用数据,帮助企业回答最具挑战性的问题。我们的用户获得并…

www.youtube.com](https://www.youtube.com/channel/UC79Gv3mYp6zKiSwYemEik9A)

16.数据虚线

DataDash 是一个与加密货币、数据分析和科学以及利用最新分析技术检测全球趋势相关的所有事物的频道。

最喜欢的播放列表: SQL &初学者数据分析

[## 数据仪表板

DataDash 是一个一站式商店,提供与加密货币、数据分析和科学以及发现全球…

www.youtube.com](https://www.youtube.com/channel/UCCatR7nWbYrkVXdxXb4cGXw)

17.数据教授

数据教授 Chanin Nantasenamat 是一所研究型大学的生物信息学副教授,他在那里经营着一个研究实验室,该实验室利用数据科学来揭示医学中大数据的隐藏知识。通过他的渠道,他提供了解释概念、教程以及回答大数据相关问题的优秀内容。他的主要目标是帮助学生和爱好者学习数据科学,并具备理解数据的能力。

最喜欢的播放列表:数据科学 101

[## 数据教授

Chanin Nantasenamat 帮助学生和感兴趣的个人了解数据科学以及如何使用它来制作…

www.youtube.com](https://www.youtube.com/channel/UCV8e2g4IWQqK71bbzGDEI4Q/featured)

18.3 蓝色 1 棕色

格兰特·桑德森创建的 3blue1brown 是 YouTube 上最好的数学可视化工具。他的目标是用动画向观众解释复杂的数学概念,希望帮助他们从不同的角度看待事物,并对这些概念有更深的理解。

网站

最喜欢的播放列表:神经网络

[## 3 蓝色 1 棕色

格兰特·桑德森的《3blue1brown》是数学和娱乐的结合,这取决于你的喜好。目标是…

www.youtube.com](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw)

19.霍马理工大学

霍马理工大学是一个制作视频来帮助人们进入科技行业的优步。作为一名数据科学家和软件工程师,他体验过在大型科技公司工作的生活。凭借这段经历,他制作了关于专家采访、硅谷生活方式的视频,并让数据科学变得更加平易近人。

网站

最喜欢的视频:什么是数据科学

[## 霍马理工大学

我谈论硅谷的生活、大型科技公司、数据科学和软件工程。霍马创业公司:一个网络…

www.youtube.com](https://www.youtube.com/channel/UCV0qA-eDDICsRR9rPcnG7tw)

20.马特·特兰

Matt Tran 提供了对真实世界的见解,并与在该领域工作的人们进行了交谈,向您提供了成为数据科学家所需的未经过滤的现实,作为一名数据科学家工作是什么样的,以及工资和爱好等细节。

最喜欢的视频:如何在科技行业找到工作

最喜欢的播放列表:如何成为数据科学家(不需要大学)

[## 马特·特兰

你知道你的职业幸福是决定你幸福的首要因素吗?你有一半的可能性…

www.youtube.com](https://www.youtube.com/user/EngineeredTruth)

21.乔丹·哈罗德

乔丹·哈罗德是哈佛和麻省理工学院的研究生,研究脑机接口和医学机器学习。她一直对人工智能融入我们生活的方式着迷,从社交媒体到军事。在她的频道中,她探索了我们人类与人工智能和算法互动的方式,以及它们在我们日常生活中的用途。乔丹擅长向大众传达复杂的话题,如人工智能,并使其更容易理解。在 AI 上查看她的播放列表!

最喜欢的播放列表: AI 101

[## 乔丹·哈罗德

探索我们每天与人工智能、算法和其他新技术互动的方式,为…

www.youtube.com](https://www.youtube.com/channel/UC1H1NWNTG2Xi3pt85ykVSHA/featured)

22.肯·吉

Ken Jee 在过去的 5 年里一直在数据科学领域从事体育分析,并在从初创公司到财富 100 强企业的公司中工作过。当他刚开始学习数据科学时,他发现可供学习的资源非常少,因此作为回报社会的一种方式,他正在 YouTube 上制作视频,以分享他的经验,并帮助其他人进入该领域。我最近才发现关于肯吉和他的渠道是非常翔实和足智多谋的,一定要检查他!

最喜欢的视频:我是如何学习数据科学的

最喜欢的播放列表:

[## 肯·吉

数据科学和体育分析是我的爱好。我叫 Ken Jee,一直在数据科学领域工作…

www.youtube.com](https://www.youtube.com/channel/UCiT9RITQ9PW6BhXK0y2jaeg)

23.Josh Starmer 的 StatQuest

统计学可能是一个非常具有挑战性的话题,这也是数据科学难以学习的原因之一。像随机过程和统计极限理论这样的概念可能很难理解。这就是 StatQuest 的拯救之路,通过他令人惊叹的视频,他将主要方法分解为易于消化的部分。最重要的是,他没有把话题弄得很枯燥,而是让你变得更聪明,提高你的统计能力。今天就去看看他!

最喜欢的播放列表:

[## Josh Starmer 的 StatQuest

统计学、机器学习和数据科学有时看起来是非常可怕的话题,但由于每种技术都是…

www.youtube.com](https://www.youtube.com/channel/UCtYLUTtgS3k1Fg4y5tAhLbw)

24.贾布里勒

正如贾布里勒在他的简历中所说,他只是一个知道得很少但想知道很多的人。他的视频主要是对人工智能在不同应用中的使用进行妥协,例如制作一个人工智能应用程序来拯救生命,以及编写一个人工智能无人机来跟随他。他还制作编程视频。

最喜欢的播放列表:

[## 贾布里勒

哟!我只是一个知道的很少,但想知道很多的人。帮助电脑。想要什么吗?联系我!(我……

www.youtube.com](https://www.youtube.com/channel/UCQALLeQPoZdZC4JNUboVEUg)

25.真由子

Mayuko 在 Intuit、Patreon 和网飞等硅谷公司担任了六年的高级 iOS 软件工程师。现在,她主要在 YouTube 上全职创作内容,帮助她的观众打入科技行业。她的视频还涉及生活方式、职业和技术建议,以及文化身份和冒名顶替综合症等话题。检查她的播放列表开始阿瑟职业生涯!

最喜欢的播放列表:如何开始你的软件工程生涯

[## 真由子

嗨!我是 Mayuko。我制作关于我的生活和科技之类的视频!

www.youtube.com](https://www.youtube.com/channel/UCEDkO7wshcDZ7UZo17rPkzQ)

26.数据科学沙龙

数据科学沙龙是一个独特的垂直聚焦数据科学会议,它发展成为一个由高级数据科学、机器学习和其他技术专家组成的多元化社区。他们面对面地聚在一起,在一种随意的氛围中相互学习,阐明最佳实践并创新新的解决方案。

他们的 YouTube 频道为那些想随便获得新技能的数据科学从业者和管理者提供了精选的见解。最近,他们发布了两条路线(一条技术路线和一条业务路线),每周发布 2 个视频(完整会议),包括将人工智能和人工智能应用于不同垂直行业的最佳实践和见解。

这些视频以前只对付费会员开放,现在就去看看吧!

[## 数据科学沙龙

数据科学沙龙是一个独特的垂直聚焦数据科学会议,发展成为一个多元化的社区…

www.youtube.com](https://www.youtube.com/c/DataScienceSalon/featured)

行动计划

Leon BublitzUnsplash 上拍摄的照片

不要让呆在家里的痛苦导致任何内心的不适,这是我们总是分心的根本原因。事实是,我们想分散注意力。与其连续 10 个小时狂看最新的网飞节目,为什么不试试在 YouTube 上学习呢?今天学习数据科学是对您的时间和精力的巨大投资回报(ROI ),因为数据将呈指数级增长,从数据中发现意义的能力将是不可或缺的。所以,订阅这些频道,看看他们的视频,学习一项有市场价值的技能或者学习一些新的东西。

为了确保你能最大限度地从 YouTube 上学习,这里有一些提示和技巧:

  1. 为了确保你只获得数据科学内容,创建一个新的谷歌账户,只订阅这些频道和更多频道(如果你愿意的话)
  2. 如果你正在看一步一步的编码教程,将视频放在屏幕的一半,你的编辑器/Jupyter 笔记本放在另一半,跟着视频一起编码。这样,你就可以学以致用了。
  3. 如果你在看一个建议/采访类型的视频,在视频结束后停下来思考一下,想想如何将你刚刚听到的应用到你的生活中。例如,你听说你可以通过展示你的投资组合项目获得一份数据科学方面的工作,你的下一步应该更多地关注于做数据科学项目,而不是记住不同神经网络的名称
  4. 如果你在看一个基于概念/事实的视频,比如数学或机器学习,不要被理论和术语弄得不知所措。成为一名数据科学家并不是在一次一年后你会忘记的测试中获得满分,而是了解数据,清理数据,可视化数据,并向他人展示最终结果。最后,重要的是如何和为什么而不是什么。

我希望这篇文章对你有用,希望你学习数据科学和成为一名出色的数据科学家的旅程更加容易。最后,让我给你一段关于视觉学习的引言。

"据说人们所学的 80%是视觉上的."

—艾伦·克莱因

感谢您的阅读,上帝保佑。

点击这里查看我的其他文章!

数据科学工具箱—数据科学介绍系列

[## 数据科学简介

关于什么是数据科学、大数据、数据和数据科学过程及其应用。

towardsdatascience.com](/the-data-scientists-toolbox-part-1-c214adcc859f)

请阅读我的超学习数据科学系列,其中提供了大量关于有效学习的建议和技巧。

[## 如何“超级学习”数据科学—第 1 部分

这是一个简短的指南,基于《超学习》一书,应用于数据科学

medium.com](https://medium.com/better-programming/how-to-ultralearn-data-science-part-1-92e143b7257b)

这里有一些很棒的数据科学资源!

[## 机器学习和数据科学的 20 大网站

这里是我列出的最好的 ML 和数据科学网站,可以提供有价值的资源和新闻。

medium.com](https://medium.com/swlh/top-20-websites-for-machine-learning-and-data-science-d0b113130068) [## 开始数据科学之旅的最佳书籍

这是你从头开始学习数据科学应该读的书。

towardsdatascience.com](/the-best-book-to-start-your-data-science-journey-f457b0994160) [## 数据科学 20 大播客

面向数据爱好者的最佳数据科学播客列表。

towardsdatascience.com](/top-20-podcasts-for-data-science-83dc9e07448e) [## 关于人工智能和大数据的 20 大电影。

这里有一些人工智能和大数据电影,你应该在新冠肺炎封锁期间在家观看。

towardsdatascience.com](/top-20-movies-about-machine-learning-ai-and-data-science-8382d408c8c3)

联系人

如果你想了解我的最新文章,请通过媒体关注我。

其他联系方式:

看的开心!

25 大 Selenium 功能,让你成为网页抓取专家

原文:https://towardsdatascience.com/top-25-selenium-functions-that-will-make-you-pro-in-web-scraping-5c937e027244?source=collection_archive---------9-----------------------

W

获取数据,然后按照你想要的方式进行处理。

这就是为什么今天我想向大家展示 Selenium 的一些顶级功能,Selenium 是一个用于 Web 抓取的库。

我以前写过关于 Selenium 和 Web Scraping 的文章,所以在你开始之前,我建议你阅读这篇文章“关于 Web Scraping 的一切”,因为它的设置过程。如果你已经比较精通网络抓取,可以试试我的高级脚本,比如“如何用 Python 省钱”和“如何用 Python 制作分析工具”。

让我们直接投入进去吧!

获取()

我以前写过这个,但是 get 函数很重要,没有它你什么都做不了。

get 命令启动一个新的浏览器,并在您的 Webdriver 中打开给定的 URL。它只是将字符串作为您指定的 URL,并打开它进行测试。

如果您使用的是 Selenium IDE,它类似于 open command。

示例:

driver.get(“https://google.com");

“驱动程序”是您的 web 驱动程序,您将在其上执行所有操作,在执行上面的命令后,它看起来像这样:

测试目的窗口

find_element()

当您想要访问页面上的元素时,这个函数非常重要。假设我们想要访问“Google search”按钮来执行搜索。

有许多方法可以访问元素,但是我更喜欢的方法是找到元素的 XPath。XPath 是元素在网页上的最终位置。

通过点击 F12,您将检查该页面,并获得关于您所在页面的背景信息。

通过单击选择工具,您将能够选择元素。

找到按钮后,单击右边蓝色标记的部分,复制元素的“完整 Xpath”。

self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')

这是查找特定元素的完整命令。与常规 XPath 相比,我更喜欢完整的 XPath,因为如果新会话中的元素发生变化,常规的 XPath 可能会发生变化,而下次执行脚本时,它就不起作用了。

其他 find_element 函数概述。(还有 find _ elementss)

find_element 函数的所有选项

发送键()

Send_keys 函数用于将文本输入到您使用 find_element 函数选择的字段中。

假设我们想在 google 中输入“plate ”,这就是我们使用 send_keys 函数的原因。

google_tray = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[1]/div/div[2]/input')google_tray.send_keys("plate")google_search = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')google_search.click()

为了更加清晰,我将元素保存在各自的变量中,然后对它们执行函数。

最后你会得到这个:

单击()

该函数使用找到的元素,并对其执行“单击”操作。简单的东西。

这是一个点击“谷歌搜索”按钮的代码示例。

google_search = self.driver.find_element_by_xpath('/html/body/div/div[4]/form/div[2]/div[1]/div[3]/center/input[1]')google_search.click()

getClass()

该命令用于检索表示该对象的运行时类的类对象。这意味着您执行这个函数来获取某个元素的类。

driver.getClass()

当前网址()

当你已经在某个页面上使用这个命令时,你可以检索你所在的 URL。

这个命令不需要参数,它返回字符串。

driver.current_url()

getPageSource()

使用这个命令,您将能够检索页面的源代码。

这个命令不需要参数,它返回字符串。

driver.getPageSource()

该命令可以与 contains()等其他命令结合使用,以检查该过滤器下是否存在该字符串。

driver.getPageSource().contains("Example");

在这种情况下,这将是一个布尔值,所以不是真就是假。

getTitle()

检索您当前所在网站的标题。

这个命令不需要参数,它返回字符串。如果找不到标题,将返回 null。

driver.getTitle()

getText()

使用这个命令,您将获得 Web 元素的文本部分。

这个命令不需要参数,它返回字符串。

driver.findElement(By.id("Price")).getText()

getAttribute()

使用这个命令,您将获得 Web 元素的属性。

我们传递一个字符串参数,它应该是我们想要知道的属性,然后返回一个字符串值。

driver.findElement(By.id("Price")).getAttribute("val");

getWindowHandle()

当我们有多个窗口要处理时,使用这个命令。

该命令帮助我们切换到新打开的窗口,并在新窗口上执行操作。

如果他/她愿意,您也可以切换回上一个窗口。

String winHandleBefore = driver.getWindowHandle()
driver.switchTo().window(winHandleBefore)

getWindowHandles()

这个命令类似于 getWindowHandles(),但是基本的区别是我们在这里处理多个窗口。所以不止两个。

driver.getWindowHandles()

链接文本()

此命令用于根据页面上的超链接及其包含的文本来查找页面上的元素。

假设我们想在谷歌搜索中找到第一个链接。

driver.findElement(By.linkText(“Car - Wikipedia”))

这种链接搜索还有另一个选项:

partialLinkText()

您也可以在页面上搜索部分或子字符串,而不是键入要查找的整个字符串。

driver.findElement(By.partialLinkText(“BMW”))

这个命令将在谷歌上找到头条的第一个链接。

提交()

在表单的字段中输入文本后,可以使用 submit 函数单击该按钮并完成表单。

driver.findElement(By.<em>id</em>("submit")).submit();

关闭()

该方法关闭用户正在操作的当前窗口。

该命令不需要任何参数,也不返回值。

driver.close()

退出()

它可能看起来非常类似于 close 命令,但是主要的区别是它关闭了用户当前打开的所有窗口。

该命令不需要任何参数,也不返回值。

driver.quit()

I 启用()

当您想要检查 Web 驱动程序中是否启用了该元素时。

首先,你必须找到元素,然后检查它。

它有一个布尔值,所以不是真就是假。

driver.findElement(By.id("Price")).isEnabled()

大小()

使用这个函数,您可以获得所选 Web 元素的大小。

driver.findElements(By.id("Price")).size()

它返回元素的大小,输出如下所示:

{'width': 77, 'height': 22}

睡眠()

这个函数用于暂停线程执行一段时间。

例如,您输入登录凭证,在下一个页面加载之前,会有一个时间延迟。这就是为什么我们使用睡眠来克服这些加载时间。

这个函数通常是有用的,它不是来自 Selenium,但是有一些 Selenium 内置的函数。

sleep(1)

这将暂停执行 1 秒钟。

pageLoadTimeout()

使用 sleep 函数,你必须基本上猜测你想要克服的加载时间,但是使用 pageLoadTimeout()你可以将其设置为特定的。

driver.manage().timeouts().pageLoadTimeout(3, SECONDS);

该命令将等待 3 秒钟以加载页面。

隐式等待()

这是那些睡眠/等待函数的又一次迭代,将帮助你实现完美多线程

为了避免抛出错误和异常,我们在页面上定位元素之前,在特定的时间内向添加一个命令。

driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

执行下一个命令前等待 3 秒钟。

导航()+前进()+后退()

这些被组合在一起,以便在 URL 之间切换,并按照您的意愿后退和前进。

所以您想打开另一个页面,但是您不想使用 get(),而是想使用 navigate here 并轻松地在这些页面之间进行操作。

driver.navigate().to("https://www.facebook.com");
driver.navigate().back();
driver.navigate().forward();

临终遗言

如前所述,这不是我第一次写关于 Selenium 和 Web 抓取的文章。我还想介绍更多的功能,还会有更多的功能。我希望你喜欢这个教程,为了跟上进度,请继续关注我!

感谢阅读!

查看我的其他文章并关注我的媒体

当我发布一篇新文章时,请在 Twitter 上关注我

数据可视化的前 3 篇文章

原文:https://towardsdatascience.com/top-3-articles-for-data-visualization-956a08a54b04?source=collection_archive---------39-----------------------

如果您想更好地构建数据可视化,这些文章很有帮助。

艾萨克·史密斯在 Unsplash 上拍摄的照片

对数据科学家来说,可视化数据是一项很有价值的技能。学起来容易,掌握起来难。数据可视化是您的数据、聚合和模型结果的图形表示,总结为最终用户可访问的可视元素。这些可视化允许用户快速看到数据中的趋势、异常值和存在的模式。当你开发可视化时,你需要记住用户将如何与你的作品交互。您的可视化应该有助于用户分析数据。如果操作正确,可视化和表格可以让数据更容易被他人访问和理解。

绘制您的仪表板

我想与你分享的第一篇文章是由约翰·麦卡利斯特写的,他谈到了首先绘制你的仪表盘,然后实现它们。在研究使用 Tableau 创建仪表板的示例之前,John 详细介绍了数据可视化。在他的文章中,John 提出了一个很好的观点,即为什么你应该首先用手绘制你的可视化效果。

花时间手绘一个可视化图需要你思考你实际上在做什么…手绘图表让常识占上风。手绘视觉效果的每一个细节都倾注了心血。

在绘图时,花些时间退后一步思考可视化的设置,可以让您思考如何最好地可视化数据。我们经常发现自己在确定制作的视觉效果是正确的之前,就在快速制作仪表盘和视觉效果。问问你自己,为什么你使用一种特定类型的可视化,比如条形图和折线图。当你处理视觉效果时,想想你希望用户如何与这些数据进行交互。使用不同的视觉效果和表格的过程对其他人来说是直观的吗,还是会让他们感到困惑?

如果你想更深入地探讨为什么这种方法有效,可以看看 John 的文章!

[## 我的画面仪表盘糟透了——直到我开始画它们

为什么手绘仪表盘能培养更强的数据可视化技能

towardsdatascience.com](/my-tableau-dashboards-sucked-until-i-started-drawing-them-ec4c9d4a4fe8)

理解科学绘图

为科学出版物、白皮书和会议开发情节可能非常耗时,以确保您以简洁的格式获得正确的信息,尤其是如果您受限于页数或海报大小。在一篇关于使用 Matplotlib 进行科学绘图的文章中,作者 Rizky Maulana Nurhidayat 讨论了如何定制 Matplotlib 参数并创建色盲友好的可视化。

这篇文章是我希望能早点看到的,因为它详细介绍了如何为你的论文或海报设计漂亮的视觉效果。我特别喜欢这篇论文,因为他指出了通过 Matplotlib 可以获得的许多不同的绘图风格以及如何使用它们。为了更深入地了解这篇文章,Nurhidayat 讨论了 rcParams,它允许您使用 LaTeX 字体、自定义字体大小等等。他提出了每一点,并详细介绍了如何使用它们,这有助于理解如何使用每一个特性并在图中实现它。我发现这篇文章很有帮助,因为他在一个例子中遍历了 rcParams,向您展示了如何创建一个看起来相似的图。

他的文章的第二部分讨论了色盲友好的情节实现,以及如何为色盲的个人开发调色板。创建这些调色板后,您可以在 Matplolib 图和其他设计元素中使用它们。他论文的这一半给出了调色板的优秀例子,以及如何在你的可视化中使用它们。

如果你想改善你的科学情节,或者想就开发色盲友好的调色板进行一次很好的讨论,我建议你看看他的文章。

[## 用于科学绘图的 Matplotlib 样式

为您的科学数据可视化定制 Matplotlib

towardsdatascience.com](/matplotlib-styles-for-scientific-plotting-d023f74515b4)

定制你的支线剧情

继续与 Matplotlib 合作制作科学图的主题, Rizky Maulana Nurhidayat 发表了另一篇有用的文章。在本文中,Nurhidayat 讨论了如何使用多个子情节来创建更复杂的可视化效果。当试图将不同的数据联系在一起时,支线剧情会派上用场。学会在引人注目的情节中将这些数据联系起来可以帮助你通过你的视觉引导你的用户。

当需要在同一轴上将不同的数据联系在一起时,我经常创建情节和支线情节。我主要处理在确定的时间段内共享一个轴的时间序列数据,例如用三个时间序列数据集创建从当前日期开始的 90 天回顾。理解如何获取这些数据,并用一个共享轴将它们组合成不同的支线剧情是很有价值的。

像他的上一篇文章一样,Nurhidayat 很好地分解了他的过程,从一个情节开始,以不同的方式添加额外的次要情节。这篇文章分享了简单和复杂的多重支线剧情设计,以及如何在最终的可视化中设置不同大小的剧情。他使用不同的方法来添加支线剧情,这让你可以学习多种添加支线剧情的方法。

这篇文章是理解如何使用 Matplotlib 开发支线剧情的很好资源。

[## 在 Matplotlib 中自定义多个子情节

使用 subplot、add_subplot 和 GridSpec 在 Matplotlib 中创建复杂 subplot 的指南

towardsdatascience.com](/customizing-multiple-subplots-in-matplotlib-a3e1c2e099bc)

最后的想法

数据可视化是数据科学的重要组成部分。这是我们通过仪表板、科学论文/海报等与他人分享我们见解的一种方式!在这三篇文章中,你将学到一些重要的经验:

  • 后退一步,在做之前把你的想象画出来。这个动作会让你思考你为什么要制作视觉效果,以及用户会如何与他们互动。
  • 您将在期刊、白皮书、海报等中使用的科学可视化。使用 Matplotlib 创建您的可视化风格并开发您的可视化。
  • 要明白,如果你的可视化用户是色盲,他们可能很难与你的可视化用户互动。看看创建色盲友好的调色板用于您的可视化。
  • 当试图将不同的数据联系在一起时,支线剧情会派上用场。学会在引人注目的情节中将这些数据联系起来可以帮助你通过你的视觉引导你的用户。

如果你想阅读更多,看看我下面的其他文章吧!

[## 每位数据科学家的 8 大技能

当我参加大学讲座时,最常被问到的问题是“我需要具备什么技能?”

towardsdatascience.com](/top-8-skills-for-every-data-scientist-79e6b1faf3e1) [## 停止浪费你的时间,咨询一个主题专家

在从事数据科学项目时,请一位主题专家来审查您的工作可能会有所帮助。

towardsdatascience.com](/stop-wasting-your-time-and-consult-a-subject-matter-expert-f6ee9bffd0fe) [## 采用现有数据科学项目的成功关键

代码本来可能不是你的,但现在是你的了。那么接下来呢?

towardsdatascience.com](/keys-to-success-when-adopting-a-pre-existing-data-science-project-9f1225fb0275) [## 利用您的一对一会议

您如何从一对一会议中获得更多价值,从而更好地了解您自己和您的工作?

medium.com](https://medium.com/the-innovation/leveraging-your-1-1-meetings-c0de2d3c8704) [## 不要太骄傲而不愿寻求帮助

如果你被一个 bug 卡住了或者感到不知所措,你可以寻求你需要的帮助。

towardsdatascience.com](/dont-be-too-proud-to-ask-for-help-76f21d16f318)

每位数据科学工程师的前三本书

原文:https://towardsdatascience.com/top-3-books-for-every-data-science-engineer-e1180ab041f1?source=collection_archive---------19-----------------------

软件开发

我放在书架上的伟大资源,我喜欢介绍给软件工程师和数据科学家。

照片来自像素上的 Stas Knop

在大学里,我不太喜欢课本。但自从毕业并全职工作以来,我发现自己收集了一些关于数据科学和软件工程的书籍,放在办公桌上以备工作之用。我正在开发一个小型的参考图书馆,当我解决一个问题或者学习一个特定的领域时,我可以参考这个图书馆。到目前为止,我发现最有帮助的三本书是《干净的代码》、《统计学习入门》和《每个程序员都应该知道的 40 种算法》。

清洁码

来自亚马逊列表的图书封面图片

作者:罗伯特·塞西尔·马丁

《干净的代码》对软件工程师来说是一本完美的书,但也适用于主要从事代码工作的数据科学家,尤其是面向对象的代码。我第一次接触这本书是在我以前工作的一个工程师读书俱乐部。来自所有不同部门的工程师每周聚在一起阅读一章,讨论它如何应用到他们的工作中,以及为什么他们可能会或可能不会遵循基于他们团队制定的标准的方法。在读书俱乐部会议期间有许多有趣的讨论。这些对话包括整个组织的团队如何看待编码标准,以及如何在其工作范围内定义干净的代码标准。

通过阅读这本书,你会明白写不好的代码意味着什么,以及如何才能写出更干净的代码。每一节都详细介绍了如何将代码从不好的转变为好的,讨论了命名、创建函数、对象和类。作者还详述了如何最好地格式化代码以获得最大的可读性,我发现这是最有帮助的。在这本书的结尾,他讨论了错误处理和单元测试,这些不会混淆编码逻辑,并有助于测试驱动的开发。《干净的代码》是迄今为止我最喜欢的技术书籍之一,也是必读之作。

统计学习导论

来自亚马逊列表的图书封面图片

作者:加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼

作为我在硕士期间阅读的唯一的教科书之一,这是我的必读书籍之一,因为它是统计学习的极好指南。本书涵盖了可用于建模和理解数据的不同工具。我喜欢这本书,因为它解决问题的实用方法是针对最终应用的,而不仅仅是算法的数学实现。这本书还使用 R 中的例子来分解主题,允许读者跟随并自己实现这些例子。你需要理解统计学的术语和概念,但是这本书是书架上很好的参考资料。

在统计学习的开始讨论了评估模型准确性和解释不同类型的机器学习的概念。通读开篇章节后,本书对不同种类的算法进行了更详细的描述,如线性回归、分类、基于树的模型和支持向量机。然而,我最喜欢的一章是关于重采样方法的,它更详细地介绍了交叉验证和引导。这一章是关于如何在机器学习中使用交叉验证的很好的参考。当我寻找一些关于 ML 模型的信息时,我经常会参考这本书,然后用它作为垫脚石来确定我缺少什么信息来解决我的问题。

每个程序员都应该知道的 40 种算法

亚马逊列表的封面图片

作者:伊姆兰·艾哈迈德

《40 算法》是我书架上最新的一本书,因为它讨论了标准的软件算法,包括机器学习算法。这本书是一个算法的集合,涵盖了排序,搜索,图形,机器学习,自然语言处理,推荐引擎,数据,密码学和大规模的需求。我被这本书吸引是因为它的评论是一个很好的资源,有清晰的材料和 Python 代码片段。这本书的实际应用例子是理解如何在实践中使用这些算法的好方法。

这本书的第一章介绍了算法设计技术、性能分析和算法验证。在这个介绍之后,这本书讨论了算法中常用的不同的数据结构,如果你还没有关于数据结构的单独的书,这是一个很好的复习。这本书然后用两个不同的例子分解了如何设计一个算法:旅行推销员问题和页面排序问题。本书另一个令人兴奋的章节讨论了开发者在开发算法时可能会考虑的实际问题。这一章着眼于算法的伦理和可解释性。总而言之,这是一个很好的参考资料,可以添加到我的书架上,因为它从数据科学问题的角度讨论了计算机科学算法。

摘要

最后,如果我必须向对数据科学和软件开发感兴趣的人推荐 3 本书,我会推荐:

你的书架上有什么有用的书吗?如果有,它们是什么?

本文包含会员链接。如果你想了解更多,可以看看我下面的其他文章!

[## 公众演讲能在数据科学领域帮助你的三大理由

理解你的听众,回答问题,并寻求反馈

towardsdatascience.com](/top-3-reasons-public-speaking-can-help-you-in-data-science-18cdbf4bb2f2) [## 远程工作很难让你成为一名出色的数据科学家

不要因为你太安静而被忽视

towardsdatascience.com](/remote-work-can-make-it-hard-to-stand-out-as-a-strong-data-scientist-71e9a2a6bc0) [## 离开我热爱的工作的三大教训

跳槽到下一个机会:成为数据科学顾问

towardsdatascience.com](/top-3-lessons-learned-from-leaving-a-job-i-loved-6c71a76cae7)

启动你的机器学习之旅的前三本书

原文:https://towardsdatascience.com/top-3-books-to-kickstart-your-machine-learning-journey-58e8668717f2?source=collection_archive---------23-----------------------

无论你是数据分析师还是程序员

机器学习不像以前那么难了。每天都有新的书籍和课程出现,选择你会坚持的书籍和课程变得越来越难。这个列表应该能帮助你更快地到达那里,与你的背景无关。

Unsplash 上由 Toa Heftiba 拍摄的照片

该列表对每个人都有帮助——不管你的时间安排是否很紧,或者几乎没有机器学习经验。这些书没有任何顺序,所以挑一本你觉得最舒服的。

请记住——下面你会找到我推荐的书籍的附属链接。这对你来说没什么,因为价格是一样的,但是如果你决定购买,我会得到一点佣金。我只收录了我亲自阅读过的书籍,可以保证 100%的质量。

先说第一个。

一百页的机器学习书

它更像一本 150 页的机器学习书,但你明白了。它是为赶时间的人设计的,因为它不太关注细节,但仍然设法涵盖所有重要的事情。

https://amzn.to/340xXJ6

它从基础开始——机器学习和最重要的统计概念(如随机变量和贝叶斯定理)的介绍。

故事还没有结束,因为每一个主要的监督算法都得到了很好的解释,从线性回归支持向量机。无监督算法也涵盖在内,但稍后。还涵盖了来自特征工程的基本概念,如一键编码、标准化和丢失数据处理。

这本书还通过最重要的模型评估指标,如准确性,精确度,召回,和 AUC/ROC 曲线。你也可以期待获得一些深度学习技术的覆盖面,但这本书在那里相当模糊。

总的来说,对于任何刚开始阅读的人或者没有时间看完一本 800 页的书的人来说,这都是显而易见的。

你可以在这里得到书

使用 Scikit-Learn、Keras 和 TensorFlow 进行机器实践学习

如果你是那种愿意花几个月的时间阅读 800 多页的书的人——恭喜你,你会得到一份享受。

https://amzn.to/2T1qDGF

这本书在亚马逊上长期畅销,只是因为它涵盖了人们在该领域工作可能需要的一切,解释得非常清楚。说真的,这本书涵盖了从机器学习定义到 GANs强化学习的主题。

我很高兴这本书是我的机器学习大学课程的必修课,因为我从它身上学到的比从教授那里学到的多得多。如果你的教授不是吴恩达,而是更多像西拉杰这样的人,我估计也会这样。

如前所述,这些书籍从简单的主题,如数据收集、EDA、功能扩展,到通过决策树、随机森林和梯度增强等算法进行的实际机器学习。它还涵盖了主要的降维技术和无监督学习。所有这些都在头 300 页里!

剩下的留给神经网络和深度学习,从理论到应用在 TensorFlow 库中。期望学到很多关于 ann、CNN、RNNs、自动编码器、gan 和强化学习的知识。

如果你有时间的话,另一个简单的方法。还有威尔。

你可以在这里得到书

利用 Fastai 和 PyTorch 为编码人员提供深度学习

PyTorch 是我一直以来最喜欢的深度学习库,而 FastAI 是另一个值得你花时间的库,因为它使用 PyTorch 快速开发生产就绪的模型——你已经猜到了。

https://amzn.to/3dADtoP

它是针对软件开发人员的,因为它更侧重于实践部分。它也非常适合不愿意深入理论的数据科学家。理论部分会在书的后面提供,但我不认为它是必读书。

如前所述,主要关注的是 FastAI 库,它广泛用于以尽可能少的代码处理计算机视觉、表格、NLP 和推荐系统任务。官方网站提供一些免费课程,所以去看看是个好主意。

这本书非常深入地涵盖了前面提到的四个主题,这足以在您的应用程序中使用深度学习的力量。

总的来说,这是一本优秀的书,绝对值得你花时间去读。

你可以在这里得到这本书。

离别赠言

这三本书我觉得特别有用,也很容易读懂。没有必要全部读完,所以如果你不能决定,请参考下面的要点:

  • 如果你是从机器学习开始,并且没有太多的空闲时间,读第一本书
  • 如果你对实用的机器学习和深度学习感兴趣,请阅读上一本书
  • 如果你有时间和意愿去学习该领域的理论和实践,请阅读第二本书

这次就这样了。感谢阅读。

加入我的私人邮件列表,获取更多有用的见解。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

原载于 2020 年 10 月 16 日 https://betterdatascience.com

2020 年 3 大免费深度学习课程

原文:https://towardsdatascience.com/top-3-free-deep-learning-courses-in-2020-f2cd1c1b0f48?source=collection_archive---------37-----------------------

你可以在网上免费找到一些最好的高质量资源来学习深度学习

Unsplash 上的 Element5 数码拍摄。

# 1 Fastai Coders 2020 实用深度学习

2020 年 8 月 21 日,fastai 发布了 fastai 库和他们深度学习课程的新版本!

这是我给任何想开始实用深度学习的人的第一条建议。Fastai 自上而下的教学方法允许您从第一天开始将您的知识应用于现实世界的问题,并逐渐深入细节。此外,您将学习使用 fastai 库,这是一个非常强大的工具,可以提高您所有深度学习项目的生产率!

#2 deeplearning.ai 深度学习专业化

Coursera 上的 deeplearning.ai 在线课程并不是免费的。但是,所有的课程视频都可以在 YouTube 上免费观看!

此外,你可以从这些对顶级深度学习研究人员的采访中获得进一步的灵感:深度学习的英雄

这些课程让你对深度学习有一个很好的概述,涵盖了一些有深度的重要主题,但吴恩达以简单的方式进行了解释。我建议在完成 fastai 课程后观看这些播放列表。

排名第三的麻省理工深度学习课程

麻省理工学院的课程是另一个很好的资源!如果你想在网上更深入地研究深度学习,可以考虑下面的播放列表。

如果您观看了前两个课程,这些课程可能会为您提供一些之前未涉及的主题的补充信息和额外视角。

接下来呢?

学习任何技能都需要练习和许多小时的工作。可用的免费在线资源对你成为顶级深度学习实践者来说绰绰有余。有时候最难的部分是保持动力。观看课程不会让你成为专家,将你的知识应用于实践会让你成为专家。因此,Kaggle 可能是最好的地方,在那里你可以实践现实世界中的问题,并与成百上千的其他竞争者分享想法。当你第一次参加 Kaggle 比赛时,你可能会努力争取一个好成绩。不放弃会让你学到最多,获得直觉,成为该领域的专家。

结束语和进一步阅读

如果你觉得这个故事有用,请随时在 Twitter 上关注我,这样你就不会错过我接下来的任何故事了!你可以在下面的故事中了解更多关于我的深度学习之旅!

[## 我的 3 年历程:从零 Python 到深度学习竞赛高手

自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…

towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7) [## 今天学习人工智能-走向数据科学

阅读《走向数据科学》中关于学习人工智能的文章。共享概念、想法和代码的媒体出版物。

towardsdatascience.com](https://towardsdatascience.com/tagged/learn-ai-today)

感谢阅读!祝您愉快!

使用基于查询的 ML 自动化发票处理的三大见解

原文:https://towardsdatascience.com/top-3-insights-from-using-query-based-ml-to-automate-invoice-processing-a3260c3b840d?source=collection_archive---------38-----------------------

RPA 中的 ML 1)可能很容易,2)它需要不同的思维模式,3)它有许多使用案例

在 Posti 项目中,一个软件机器人使用机器学习来填写采购发票流程表单。照片由 Unsplash 上的 Mantas Hesthaven 拍摄

芬兰物流巨头 PostiRPA 团队开始使用机器学习来提升他们的发票自动化。这些是那个项目的关键见解。这是一本很好的读物,适合那些在利用机器学习实现现有自动化并使其智能化时领导或做出贡献的人。

你可以在这里阅读更多关于这个项目的信息。简而言之,问题是 Posti 一个月收到一万张购物发票。出于会计、支付和税务目的,每张发票需要与 1)审核人 2)预算/账户 3)部门和 4)增值税代码相关联。

在采购发票自动化流程中,目标是根据 4 个已知的发票字段自动填充 4 个缺失字段。几乎所有组织中的无数高级雇员、会计师、经理和主管不断地填写这种表格。图片来源:Aito

作为解决方案,UiPath 用于将历史发票复制到预测数据库。然后使用预测性数据库查询来预测缺失的字段:

{
  “from” : “purchase_invoices”,
  “where”: {
    “purchase_number “: “XY12345678”,
    “company_id”: “234234–3”,
    “vendor_number”: “0002948810”,
    “currency” : “EUR"
  },
  “predict”: “reviewer”
}

然后,RPA 机器使用具有高置信度/概率估计值的预测来填充发票中缺失的字段,并使流程的不同阶段自动化。

这是我们学到的。

洞察力 1:使用正确的工具,智能自动化并不难

在实施的发票自动化中,基本的交互非常简单:

  1. 首先,RPA 机器人将已处理的发票表单从会计系统中抓取到预测数据库中。
  2. 其次,机器人读取收到的发票,进行 4 次简单的预测查询来预测缺失的字段
  3. 第三,机器人使用预测将缺失的字段写入会计系统,并改变发票处理状态。

有许多 RPA+ML 问题可以用类似的简单方式解决。本质上,无论何时您看到一个带有表单的流程,有点像这样,它都可能以同样的方式被自动化:

任何包含表单的流程都是基于 ML+RPA 的自动化的潜在目标。在本例中:客户可以根据电子邮件进行统计推断,而产品、问题类别和正确的客户支持人员可以根据标题和描述进行推断。因此,支持人工智能的机器人可以完美地处理大多数案件。图片来源:Aito

尽管 RPA 部分可能相对简单,但 ML 部分可能正好相反。在典型场景中,您会要求数据科学团队花费时间来拟合、部署和集成 4 ML 模型,这些模型对 4 个不同的领域进行预测。数据科学项目可能需要一段时间,可能会很昂贵,本质上:数据科学团队将根据更广泛的公司优先级来安排时间。

另一方面,如果您使用预测数据库来查询未知字段,体验类似于使用 SQL 数据库来查询已知字段。对于大多数 RPA 开发人员来说,这种类似 SQL 的体验非常简单,相关的工作和时间投入更适合紧张的 RPA 预算和计划。Posti RPA 开发人员评论道:“我最喜欢 Aito 的一点是它易于使用”,这反映了这种方法的内在简易性。还有一种观点认为,预测性数据库集成只是项目的一小部分。

因此,使用正确的工具,RPA+ML 很容易实现。在可供选择的 ML 工具中:预测数据库似乎特别有前途,因为用预测查询进行机器学习非常容易

洞察力 2: RPA+ML 需要业务影响思维

虽然在传统的基于规则的 RPA 中,您可以有力地保证流程没有错误,但使用智能自动化很难创建完全没有错误的解决方案。这是因为机器学习组件以统计方式运行。

统计系统引入了可控的误差率。由micha ParzuchowskiUnsplash 拍摄的照片

虽然你不可能拥有一个完美无误的系统,但你可以拥有:

  • 可控的误差率。在 Posti 案例中,ML 组件能够在 99%的案例中以小于 1%的误差填充缺失税码字段,在 63%的成本中心案例中以小于 5%的误差填充缺失税码字段。在发票自动化的情况下,会计部门会对内容进行双重检查,因此小的错误率通常不是问题。
  • 极端复杂系统的自动化速度大大提高。在 Posti 案例中,您可以看到成千上万种不同的采购发票类型&特殊案例。在这种情况下,开发和维护数以千计的不同规则来实现基于规则的高覆盖率 RPA 是完全不可行的。虽然复杂的基于规则的自动化可能设法处理例如 10%的发票,但我已经看到基于 ML 的解决方案的 80%或 90%的自动化率。

RPA+ML 的本质是:你接受一个受控的错误率,以换取一个根本上更高的自动化率、更低的维护成本和解决无法解决的问题的能力。

在实践中,这需要改变思维模式,并与业务所有者直接讨论统计误差和最佳误差率/自动化率的权衡。还可能需要在流程中增加一个步骤来审查和纠正错误率超过 1%的统计决策。

作为 Posti 项目的一部分,RPA 团队和会计团队开会决定自动化率和错误率之间的权衡。由 You X VenturesUnsplash 上拍摄的照片

你可以在 TDS 关于 ML 投资回报的文章中找到更多相关信息

洞察力 3:有许多用例

RPA 和流程自动化通常是机器学习应用非常有益的领域,因为:

  1. 公司往往对其核心业务流程有高质量和完整的记录,因为没有这些记录(如订单或发票)企业就无法运营,如果业务记录保存不好,在最坏的情况下可能会产生法律影响(如发票)。
  2. 大多数过程都有非常强的模式。例如,来自“停车公司”的发票往往总是进入“停车预算”。这种模式很容易从数据中获取并用于过程自动化,例如允许 20%-99%的自动化率,以换取统计过程中 1%-5%的误差。
  3. 大公司的核心流程可能会有大量的数据。例如:Posti 每月处理大约一万张发票。

由于良好的数据、高自动化率和高容量,现有的过程数据通常很容易在智能自动化中开发和重用,从而获得巨大的业务收益。

RPA+ML 领域有巨大的机会,尤其是现在,当机器学习的经济学更适合有限的 RPA 项目预算时。照片由 Unsplash 上的 Mantas Hesthaven 拍摄

根据与项目团队的讨论:

  • 如果使用预测数据库,RPA+ML 项目与传统 ML 项目相比并不昂贵。Posti RPA 团队估计,中等 RPA 项目可能平均需要 3 个月(通常涉及大量分析、沟通和组织开销),而 RPA+ML 项目可能需要 4 个月(因为 ML 部分、额外的数据集成、额外的沟通和处理可能错误的额外步骤)。尽管如此,为您的组织完成的第一个 RPA+ML 项目预留更多的时间还是有好处的。
  • RPA+ML 应用程序的商业收益可能很高:可能高达数十万欧元,因为在适度复杂的大容量流程中自动化率很高
  • 总体而言,可能 10%-20%的 Posti RPA 用例会受益于类似预测数据库的机器学习。

作为这些讨论的结果:团队已经确定了许多有价值的商业案例和机会,并决定使用相同的工具设置来扩展 ML 的部署。

结论和建议

RPA+ML 不需要太难,不需要数据科学家,并且可以立即产生业务影响。

然而,我们发现大多数公司在识别 RPA+ML 用例方面存在困难。这是完全可以理解的,因为 RPA 团队通常缺乏市场上大多数解决方案所需的机器学习经验和专业知识。

虽然 RPA+ML 机会很多,但在识别用例方面存在挑战,因为 RPA 团队缺乏机器学习专业知识。照片由马库斯·斯皮斯克Unsplash 拍摄

结果是:虽然一个公司可能有大量好的用例,但是这些用例很大程度上没有被认识到。现在来解决关于用例的问题:

  1. 一个简单的思维练习会有所帮助。就像之前提到的:任何可以被认为是表单的业务流程都是潜在的 RPA+ML 自动化目标。
  2. 网上有很多用例描述。
  3. 你也可以随时咨询智能自动化专家或像我们这样的 T2 供应商的建议。

如果您对该主题有任何疑问或意见,我们很乐意在 https://aito.ai/contact-us/提供帮助,或者您可以通过 Sisua Digital 联系我们的 RPA 顾问朋友。Sisua 在 ML 支持的 RPA 自动化方面拥有丰富的专业知识,他们在 Posti 发票自动化项目中担任顾问角色。

前 3 名 JavaScript 机器学习库

原文:https://towardsdatascience.com/top-3-javascript-machine-learning-libraries-84a4b509db85?source=collection_archive---------56-----------------------

基于社区支持和个人经验的排名

KOBU 机构Unsplash 上拍摄的照片

avaScript 是最受欢迎的编程语言之一,拥有庞大的粉丝群。不再局限于网页设计,可以用于移动开发,游戏设计,甚至机器学习(ML) 。在过去的几年中,许多新的 ML 库被创建,其功能已经变得相当令人印象深刻。

可以说 Python 是机器学习的唯一语言。虽然在一定程度上这是真的,但人们已经很难忽视 JavaScript(JS) 在该领域的日益流行。在对其中的一些库进行实验后,我决定发布一份最有前途和最实用的 JavaScript 机器和深度学习库的列表。

找什么?

Shane Aldendorff 在 Unsplash 上拍摄的照片

在进入本文之前,让我们考虑一下 ML 库中我们关心的是什么。以下是您可能需要考虑的几点:

流行

听起来很明显,拥有活跃社区的图书馆经常更新。在机器学习这样一个快速发展的领域,我们必须确保我们的应用程序能够支持最新的功能。

功能

这一点不一定是关于功能和模型的数量,而是关于它们的可定制性和可扩展性。如果你需要改变算法的某些部分,你可能不想重写整个应用程序。

可利用的资源

对于任何刚接触 JavaScript,特别是使用 JavaScript 的 ML 的人来说,拥有一份编写良好的文档是非常有用的。任何指南和 YouTube 教程在学习过程中也会派上用场。

Brain.js

Robina Weermeijer 在 Unsplash 上拍摄的照片

特点:

  • 简单的
  • 最适合小型应用

Brain.js 是目前最流行的用 JavaScript 编写的 ML 库之一。它提供了多种实现神经网络的方法,并具有良好的浏览器支持。既然它如此受欢迎,许多公司实际上使用它,你可以在网上找到各种项目。文档可以在 GitHub 上获得,并且组织得相当好。我在寻找特定功能及其用法时没有任何问题。

例如,与 Tensorflow 相比,代码和函数似乎更简单一些。然而,这可能受到了我以前的 JavaScript 经验的影响。

ConvNetJS

照片由乌列尔 SCUnsplash 上拍摄

特点:

  • 复杂的
  • 仅浏览器

这个库在更有经验的开发者中是众所周知的。该项目的代码是开源的,可以在 GitHub 上获得。该库在支持社区的帮助下不断更新。它也可以在 Nodejs 下获得,这是一个很好的特性。ConvNetJS 因其功能性和专业性而获得好评。它当然值得更多的关注,在使用它之后,你也可能成为一个支持者。

Tensorflow.js

照片由沙哈达特·拉赫曼Unsplash 上拍摄

特点:

  • NodeJS 供电
  • 流行的
  • 出色的表现

Tensorflow最广为人知的 Python ML 库之一,也是最广为人知的 ML 库。TensorFlow for JS 的发布是影响 JavaScript 上 ML 发展的事件之一。知道 TensorFlow 有如此海量的粉丝群以及更新改进的规律性,这个库很难出错。TensorFlow 知识是任何一个 ML 应用开发者的必备。

开发人员非常重视优化浏览器对该库的支持。它允许更多的互动和更好的反馈。从用户的角度来看,在浏览器窗口中运行 ML 不需要任何软件包或安装,它简单而实用。查看表情符号寻宝游戏获得一些想法。这个游戏利用你的手机摄像头来实时检测物体。这是相当令人印象深刻的,尤其是记住你可以在你的浏览器中玩这样的游戏。

该库支持 GPU 和 CPU 培训。现有的预训练模型可以很容易地转换为 Tensorflow.js 格式并加载到浏览器中。在收集了一些用户数据之后,它也可以在浏览器本身中被重新训练。对于游戏开发等诸多领域,创造了无尽的机会。

最后的想法

当想到机器学习时,JavaScript 可能不是第一个想到的语言。然而,它一直在朝着这个方向稳步前进。开发人员喜欢使用 JavaScript 的交互性支持和不断增长的社区。请随意与这些库分享您的经验,不要害怕尝试新的东西!

链接:

brain . js:【https://brain.js.org/#/的

https://cs.stanford.edu/people/karpathy/convnetjs/

tensor flow . js:https://www.tensorflow.org/js

三大鲜为人知的熊猫功能

原文:https://towardsdatascience.com/top-3-lesser-known-pandas-function-9cab7d490702?source=collection_archive---------29-----------------------

作为一名现代数据科学家,您需要了解熊猫的功能

说到 Python 中的数据科学库,Pandas可能是最有用的一个。它已经存在了相当长的一段时间,包含了很多节省时间的功能。本文以实用的方式介绍了三个鲜为人知的Pandas函数。

照片由 XPSUnsplash 上拍摄

不想看书?看看我关于这个主题的视频:

你需要一个房价数据集来跟进,所以请从这个链接下载。让我们把熊猫装进去:

import pandas as pd df = pd.read_csv('HousingPrices.csv') 
df.head()

以下是数据集的外观:

图片 1-房价数据集标题(图片由作者提供)

事不宜迟,让我们直接进入第一个函数。

select_dtypes()

select_dtypes函数用于只选择特定数据类型的列。假设您想对字符串做一些工作——您可以使用上面提到的函数来创建非数字列的子集,并从那里执行操作。

我们的数据集不包含字符串列,如下图所示:

图 2 —每列的数据类型(作者图片)

我们将使用select_dtypes函数只保留整数列。根据之前的图像,应该只保留TransactionDateNumStores列:

df.select_dtypes('int64').head()

结果如下:

图 3-整数列(作者图片)

让我们进行下一个功能。

内存使用量()

memory_usage函数顾名思义就是报告内存使用情况。默认情况下,报告是以列和字节为单位进行的,但是我们稍后将看到如何更改它。

对整个数据集调用该函数:

df.memory_usage()

该调用为我们的数据集产生了以下系列:

图 4 —以每列字节为单位的内存使用情况(图片由作者提供)

如果您想得到总数,您可以对结果集调用sum()函数:

df.memory_usage().sum()

这将产生23312字节。由于字节不像兆字节那样容易理解,我们接下来进行转换:

df.memory_usage().sum() / 1e+6

上面的代码在执行时输出0.023312,代表住房数据集占用多少兆字节的内存。

您可以进一步使用日志来监控生产应用程序中的内存使用情况,但这超出了本文的范围。

让我们复习一下最后一个功能。

查询()

query函数用于过滤数据集并获取感兴趣的记录。过滤格式是它的特别之处。如果您按多个条件进行过滤,则不需要管理几十个括号,因为该函数使您能够将过滤条件作为字符串传递。

让我们先看一个简单的例子,我们对 20 到 30 年的房子感兴趣:

df.query('20 < HouseAge <= 30').head()

结果如下:

图片 5—20 至 30 年楼龄的房屋(图片由作者提供)

但是如果我们想测试多种情况呢?只需在中间插入andor关键词:

df.query('20 < HouseAge <= 30 and NumStores == 6').head()

这是产生的子集:

图片 6-20 至 30 年的房屋,附近有 6 家商店(图片由作者提供)

你只需要知道这些。让我们在下一部分总结一下。

离别赠言

Pandas是 Python 中顶尖的数据科学库之一,这是有原因的——没有什么是你不能简单直观地完成的。复杂的过滤会让事情变得混乱,但是新学到的query函数会让事情变得更简单。

你最喜欢的鲜为人知的Pandas功能有哪些?请在下面的评论区告诉我。

感谢阅读。

加入我的私人邮件列表,获取更多有用的见解。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

原载于 2020 年 11 月 16 日 https://www.betterdatascience.com**T21

posted @ 2024-10-16 09:02  绝不原创的飞龙  阅读(285)  评论(0)    收藏  举报