数据科学家需要了解的 5 个基本统计概念
想获得灵感?快来加入我的 超级行情快讯 。😎
当执行数据科学(DS)的艺术时,统计学可以是一个强有力的工具。从高层次的角度来看,统计是使用数学对数据进行技术分析。一个基本的可视化,如条形图,可能会给你一些高层次的信息,但有了统计数据,我们可以以一种更加信息驱动和有针对性的方式对数据进行操作。相关的数学帮助我们对数据形成具体的结论,而不仅仅是猜测。
使用统计数据,我们可以更深入、更细致地了解我们的数据究竟是如何构建的,以及基于这种结构,我们如何以最佳方式应用其他数据科学技术来获取更多信息。今天,我们将探讨数据科学家需要了解的 5 个基本统计概念,以及如何最有效地应用它们!
统计特征
统计特征可能是数据科学中使用最多的统计概念。这通常是您在探索数据集时应用的第一个统计技术,包括偏差、方差、平均值、中值、百分位数等。理解和用代码实现都相当容易!请看下图的插图。
A basic box plot
中间的线是数据的中值。中值用于平均值,因为它对异常值更稳健。第一个四分位数实质上是第 25 个百分位数;即数据中 25%的点低于该值。第三个四分位数是第 75 个百分位数;即数据中 75%的点低于该值。最小值和最大值代表我们数据范围的上限和下限。**
箱线图完美地展示了我们可以利用基本统计特征做些什么:
- 当箱线图短时,这意味着您的数据点大多相似,因为在一个小范围内有许多值
- 当箱形图高时,这意味着你的许多数据点是非常不同的,因为这些值分布在很宽的范围内
- 如果中值更接近底部那么我们知道大部分数据具有更低的值。如果中值更接近顶部那么我们知道大多数数据具有更高的值。基本上,如果中线不在方框的中间,则表明数据偏斜。****
- 胡须很长吗?这意味着您的数据具有较高的标准差和方差,即数值分散且变化很大。如果盒子的一边有长胡须,而另一边没有,那么数据可能只在一个方向上变化很大。
所有这些信息都来自几个简单的易于计算的统计特征!当您需要快速查看数据时,请尝试这些方法。
概率分布
我们可以把概率定义为某一事件发生的概率。在数据科学中,这通常在 0 到 1 的范围内进行量化,其中 0 表示我们确信此不会发生,1 表示我们确信此会发生。概率分布是一个函数,它代表实验中所有可能值的概率。请看下图的插图。
Common Probability Distributions. Uniform (left), Normal (middle), Poisson (right)
- 一个均匀分布是我们这里展示的 3 个中最基本的一个。它只有一个值,这个值只出现在一个特定的范围内,而这个范围之外的值都是 0。这在很大程度上是一种“开或关”的分布。我们也可以认为它是一个具有两个类别的分类变量的指示:0 或值。您的分类变量可能有多个非 0 值,但我们仍然可以将其视为多个均匀分布的分段函数。
- 一个正态 分布,通常被称为一个高斯****分布,是由其均值和标准差具体定义的。平均值在空间上改变分布,标准偏差控制分布。与其他分布(如泊松分布)的重要区别在于标准差在所有方向上都是相同的。因此,对于高斯分布,我们知道数据集的平均值以及数据的分布,即它是分布在一个很大的范围内,还是高度集中在几个值周围。
- 一个泊松分布类似于正态分布,但是增加了一个偏斜度的因子。当偏斜度值较低时,泊松分布在所有方向上具有相对均匀的分布,就像正态分布一样。但是,当偏斜度值很大时,我们的数据在不同方向上的分布是不同的;在一个方向,它将非常分散,而在另一个方向,它将高度集中。
你可以深入研究更多的发行版,但是这 3 个已经给了我们很多价值。我们可以很快看到并解释均匀分布的分类变量。如果我们看到高斯分布,我们知道有许多算法默认情况下特别适合高斯分布,因此我们应该选择这些算法。对于 Poisson,我们将看到,我们必须特别小心,选择一种对空间分布变化具有鲁棒性的算法。
降维
术语降维理解起来相当直观。我们有一个数据集,我们想减少它的维数。在数据科学中,这是特征变量的数量。请看下图的插图。
Dimensionality Reduction
立方体代表我们的数据集,它有 3 个维度,总共有 1000 个点。现在用今天的计算,1000 点很容易处理,但是在更大的范围内,我们会遇到问题。然而,仅仅从二维的角度来看我们的数据,比如从立方体的一边,我们可以看到从那个角度划分所有的颜色是非常容易的。通过降维,我们可以将 3D 数据投影到 2D 平面上。这有效地将我们需要计算的点数减少到了 100,大大节省了计算量!
我们可以做维度缩减的另一种方法是通过特征修剪。通过特征修剪,我们基本上想要移除任何我们认为对我们的分析不重要的特征。例如,在浏览数据集后,我们可能会发现 10 个特征中有 7 个与输出高度相关,而另外 3 个相关性非常低。那么这 3 个低相关性特征可能不值得计算,我们可以在不影响输出的情况下从分析中删除它们。
用于降维的最常见的统计技术是 PCA,它本质上创建特征的向量表示,显示它们对输出的重要性,即它们的相关性。PCA 可用于上述两种降维方式。在本教程中了解更多信息。
过采样和欠采样
过采样和欠采样是用于分类问题的技术。有时,我们的分类数据集可能过于偏向一边。例如,我们有 2000 个类 1 的例子,但是只有 200 个类 2 的例子。这将抛弃许多我们试图用来建模数据和进行预测的机器学习技术!我们的过采样和欠采样可以解决这个问题。请看下图的插图。
Under and and Over Sampling
在上图的左侧和右侧,我们的蓝色类比橙色类有更多的样本。在这种情况下,我们有 2 个预处理选项,可以帮助训练我们的机器学习模型。
欠采样意味着我们将只从多数类中选择一些数据,只使用少数类拥有的那么多例子。应该进行这种选择以保持类的概率分布。那很容易!我们只是通过减少样本来平衡数据集!
过采样意味着我们将创建少数类的副本,以便拥有与多数类相同数量的实例。复制时将保持少数民族的分布。我们只是在没有获得更多数据的情况下平衡了数据集!
贝叶斯统计
充分理解我们为什么使用贝叶斯统计需要我们首先理解频率统计失败的地方。频率统计是大多数人听到“概率”这个词时会想到的统计类型。它涉及应用数学来分析某个事件发生的概率,特别是我们计算的唯一数据是之前的数据。**
让我们看一个例子。假设我给你一个骰子,问你掷出 6 的几率有多大。大多数人会说是六分之一。事实上,如果我们要做一个频率分析,我们会查看一些数据,其中有人掷骰子 10,000 次,并计算每个数字的掷出频率;大概是六分之一!
但是如果有人告诉你,给你的特定骰子被装载总是落在 6 上呢?由于频率分析只考虑了先验数据,所以给你的关于模具被装载的证据是而不是被考虑在内。**
贝叶斯统计是否考虑了这个证据。我们可以通过看看贝耶定理来说明这一点:****
Baye’s Theoram
我们方程中的概率 P(H) 基本是我们的频率分析;给定我们的先验数据,事件发生的概率是多少。我们等式中的 P(E|H) 被称为可能性,本质上是给定我们频率分析的信息,我们的证据是正确的概率。例如,如果你想掷骰子 10,000 次,而前 1000 次你得到了全部 6 次,你就开始非常确信骰子已经装好了! P(E) 是实际证据为真的概率。如果我告诉你骰子已经上膛了,你能相信我说它真的上膛了吗?还是你认为这是个骗局?!
如果我们的频率分析非常好,那么我们的猜测 6 是正确的就有一定的分量了。与此同时,我们考虑到我们的证据加载芯片,如果它是真实的或不基于其本身的先验和频率分析。从等式的布局可以看出,贝叶斯统计把一切都考虑进去了。当您觉得以前的数据不能很好地代表未来的数据和结果时,就使用它。
数据科学家需要知道的 5 种聚类算法
想获得灵感?快来加入我的 超级行情快讯 。😎
聚类是一种涉及数据点分组的机器学习技术。给定一组数据点,我们可以使用聚类算法将每个数据点分类到特定的组中。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有非常不同的属性和/或特征。聚类是一种无监督学习的方法,并且是在许多领域中使用的统计数据分析的常用技术。
在数据科学中,我们可以使用聚类分析从数据中获得一些有价值的见解,方法是在应用聚类算法时查看数据点属于哪些组。今天,我们将看看数据科学家需要了解的 5 种流行的聚类算法及其优缺点!
k 均值聚类
K-Means 可能是最著名的聚类算法。它在许多介绍数据科学和机器学习的课程中讲授。很容易理解,用代码实现!请看下图的插图。
K-Means Clustering
- 首先,我们首先选择一些要使用的类/组,并随机初始化它们各自的中心点。为了确定要使用的类的数量,最好快速浏览一下数据,并尝试识别任何不同的分组。中心点是与每个数据点向量长度相同的向量,是上图中的“X”。
- 每个数据点通过计算该点和每个组中心之间的距离来分类,然后将该点分类到其中心最接近它的组中。
- 基于这些分类的点,我们通过取组中所有向量的平均值来重新计算组中心。
- 重复这些步骤一定次数的迭代,或者直到组中心在迭代之间没有太大变化。您也可以选择随机初始化组中心几次,然后选择看起来提供最佳结果的运行。
K-Means 的优点是它非常快,因为我们真正做的是计算点和组中心之间的距离;非常少的计算!因此它具有线性复杂度 O ( n )。
另一方面,K-Means 也有一些缺点。首先,你必须选择有多少组/类。这并不总是微不足道的,在理想情况下,我们希望使用聚类算法来为我们找出这些问题,因为它的目的是从数据中获得一些洞察力。K-means 也是从随机选择聚类中心开始的,因此它可能在不同的算法运行中产生不同的聚类结果。因此,结果可能不可重复且缺乏一致性。其他聚类方法更加一致。
K-Medians 是另一种与 K-Means 相关的聚类算法,只是我们使用组的中值向量,而不是使用平均值来重新计算组中心点。这种方法对异常值不太敏感(因为使用了中值),但对于较大的数据集来说速度要慢得多,因为在计算中值向量时,每次迭代都需要排序。
均值漂移聚类
均值漂移聚类是一种基于滑动窗口的算法,它试图找到数据点的密集区域。这是一种基于质心的算法,意味着目标是定位每个组/类的中心点,它通过将中心点的候选更新为滑动窗口内的点的平均值来工作。然后,在后处理阶段过滤这些候选窗口,以消除近似重复,形成最终的中心点集合及其相应的组。请看下图的插图。
Mean-Shift Clustering for a single sliding window
- 为了解释均值漂移,我们将考虑二维空间中的一组点,如上图所示。我们从以点 C(随机选择的)为中心并且以半径 r 为核心的圆形滑动窗口开始。均值漂移是一种爬山算法,它涉及在每一步将该核迭代地转移到更高密度的区域,直到收敛。
- 在每次迭代中,通过将中心点移动到窗口内点的平均值,滑动窗口向更高密度的区域移动(因此得名)。滑动窗口内的密度与窗口内的点数成比例。自然地,通过移动到窗口中点的平均值,它将逐渐向更高点密度的区域移动。
- 我们继续根据平均值移动滑动窗口,直到没有移动可以容纳内核中更多点的方向。看看上面的图片;我们继续移动圆圈,直到我们不再增加密度(即窗口中的点数)。
- 对许多滑动窗口进行步骤 1 到 3 的过程,直到所有点都位于一个窗口内。当多个滑动窗口重叠时,包含最多点的窗口被保留。然后根据数据点所在的滑动窗口对其进行聚类。
下图显示了使用所有滑动窗口的端到端的整个过程。每个黑点代表滑动窗口的质心,每个灰点是数据点。
The entire process of Mean-Shift Clustering
与 K-means 聚类相比,不需要选择聚类的数量,因为 mean-shift 会自动发现这一点。这是一个巨大的优势。聚类中心向最大密度的点汇聚的事实也是非常理想的,因为它非常容易理解,并且在自然数据驱动的意义上非常适合。缺点是窗口大小/半径“r”的选择可能不重要。
基于密度的噪声应用空间聚类(DBSCAN)
DBSCAN 是一种基于密度的聚类算法,类似于 mean-shift,但有几个显著的优点。看看下面的另一幅精美图片,让我们开始吧!
DBSCAN Smiley Face Clustering
- DBSCAN 从一个尚未访问的任意起始数据点开始。使用距离ε提取该点的邻域(在ε距离内的所有点都是邻域点)。
- 如果在这个邻域内有足够数量的点(根据最小点),则聚类过程开始,并且当前数据点成为新聚类中的第一个点。否则,该点将被标记为噪声(稍后该噪声点可能成为聚类的一部分)。在这两种情况下,该点都被标记为“已访问”。
- 对于新聚类中的第一个点,其ε距离邻域内的点也成为同一聚类的一部分。然后,对于刚刚添加到聚类组的所有新点,重复使ε邻域中的所有点属于同一聚类的过程。
- 重复步骤 2 和 3 的过程,直到聚类中的所有点都被确定,即聚类的ε邻域内的所有点都被访问和标记。
- 一旦我们完成了当前的聚类,就会检索和处理一个新的未访问点,从而发现下一个聚类或噪声。重复此过程,直到所有点都被标记为已访问。由于在此结束时已经访问了所有点,每个点将被标记为属于一个聚类或者是噪声。
DBSCAN 与其他聚类算法相比有很大的优势。首先,它根本不需要 pe-set 数量的集群。它还将异常值识别为噪声,这与均值漂移不同,即使数据点非常不同,均值漂移也只是将它们放入一个聚类中。此外,它可以很好地找到任意大小和任意形状的簇。
DBSCAN 的主要缺点是,当集群的密度不同时,它的性能不如其他方法。这是因为当密度变化时,用于识别邻域点的距离阈值ε和最小点的设置将随着聚类的不同而不同。这一缺点在非常高维的数据中也会出现,因为距离阈值ε再次变得难以估计。
使用高斯混合模型的期望最大化(EM)聚类(GMM)
K-Means 的一个主要缺点是它简单地使用了聚类中心的平均值。通过下面的图片,我们可以明白为什么这不是最好的做事方式。在左手边,对于人眼来说,很明显有两个半径不同的圆形星团,它们以相同的平均值为中心。K-Means 不能处理这个问题,因为聚类的平均值非常接近。K-Means 在聚类不是圆形的情况下也会失败,这也是使用平均值作为聚类中心的结果。
Two failure cases for K-Means
高斯混合模型(GMM)比 K-Means 给了我们更多的灵活性。对于 GMM,我们假设数据点是高斯分布的;这是一个限制性较小的假设,而不是通过使用平均值说它们是圆形的。这样,我们就有两个参数来描述聚类的形状:均值和标准差!以二维为例,这意味着集群可以采取任何类型的椭圆形状(因为我们在 x 和 y 方向上都有标准偏差)。因此,每个高斯分布被分配给单个聚类。
为了找到每个聚类的高斯参数(例如平均值和标准偏差),我们将使用一种称为期望最大化(EM)的优化算法。请看下图,图中显示了高斯分布正被装配到集群中。然后,我们可以继续使用 GMM 进行期望最大化聚类的过程。
EM Clustering using GMMs
- 我们首先选择聚类的数量(像 K-Means 一样)并随机初始化每个聚类的高斯分布参数。人们也可以通过快速查看数据来尝试提供对初始参数的良好猜测。尽管注意,从上图中可以看出,这并不是 100%必要的,因为高斯分布一开始很差,但很快就被优化了。
- 给定每个聚类的高斯分布,计算每个数据点属于特定聚类的概率。一个点离高斯中心越近,它就越有可能属于该聚类。这应该有直观的意义,因为对于高斯分布,我们假设大部分数据更靠近聚类的中心。
- 基于这些概率,我们为高斯分布计算一组新的参数,从而最大化聚类内数据点的概率。我们使用数据点位置的加权和来计算这些新参数,其中权重是数据点属于该特定聚类的概率。为了直观地解释这一点,我们可以看看上面的图表,特别是以黄色星团为例。该分布在第一次迭代时随机开始,但我们可以看到大多数黄色点位于该分布的右侧。当我们计算一个概率加权的和时,尽管有一些点在中心附近,但大多数都在右边。因此,分布的平均值自然会向这些点的集合移动。我们也可以看到,大部分的点都是“右上到左下”。因此,标准偏差会发生变化,以创建更适合这些点的椭圆,从而最大化概率加权和。
- 重复第 2 步和第 3 步,直到收敛,每次迭代的分布变化不大。
使用 GMM 有两个主要优势。首先,在聚类协方差方面,GMM 比 K-Means 更加灵活;由于标准偏差参数,聚类可以呈现任何椭圆形状,而不局限于圆形。K-Means 实际上是 GMM 的一个特例,其中每个聚类在所有维度上的协方差都接近 0。第二,由于 GMM 使用概率,所以每个数据点可以有多个聚类。因此,如果一个数据点位于两个重叠聚类的中间,我们可以简单地定义它的类别,即 X %属于类别 1,Y %属于类别 2。即 GMMs 支持混合 会员。
凝聚层次聚类
分层聚类算法分为两类:自顶向下或自底向上。自底向上算法在开始时将每个数据点视为单个聚类,然后连续合并(或聚集)成对的聚类,直到所有聚类都已合并为包含所有数据点的单个聚类。自底向上的层次聚类因此被称为层次凝聚聚类或 HAC 。这种聚类层次结构被表示为一棵树(或树状图)。树根是收集所有样本的唯一聚类,树叶是只有一个样本的聚类。在进入算法步骤之前,请看下图
Agglomerative Hierarchical Clustering
- 我们首先将每个数据点视为一个单独的聚类,即如果我们的数据集中有 X 个数据点,那么我们就有 X 个聚类。然后,我们选择一个距离度量来度量两个集群之间的距离。例如,我们将使用平均链接,其将两个聚类之间的距离定义为第一个聚类中的数据点和第二个聚类中的数据点之间的平均距离。
- 在每次迭代中,我们将两个集群合并为一个。将被组合的两个聚类被选择为具有最小平均链接的那些聚类。即,根据我们选择的距离度量,这两个聚类彼此之间具有最小的距离,因此是最相似的,并且应该被组合。
- 重复步骤 2,直到我们到达树的根,即我们只有一个包含所有数据点的聚类。通过这种方式,我们可以选择最终需要多少个集群,只需选择何时停止组合集群,即何时停止构建树!
分层聚类不需要我们指定聚类的数量,我们甚至可以选择哪个数量的聚类看起来最好,因为我们正在构建一个树。此外,该算法对距离度量的选择不敏感;所有这些算法都可以很好地工作,而对于其他聚类算法,距离度量的选择是至关重要的。层次聚类方法的一个特别好的用例是当基础数据具有层次结构并且您想要恢复该层次结构时;其他聚类算法做不到这一点。层次聚类的这些优势是以较低的效率为代价的,因为它的时间复杂度为 O(n ) ,不像 K-Means 和 GMM 的线性复杂度。
结论
这是数据科学家应该知道的 5 大聚类算法!感谢 Scikit Learn,我们将以这些算法和其他一些算法的出色表现的令人敬畏的可视化来结束本文!非常酷地看到不同的算法如何比较和对比不同的数据!
你应该知道的 4 个深度学习突破
非专家深度学习系列的第一篇
为什么要看这个?
无论是作为个体从业者还是作为组织,要开始应用深度学习,你需要两件事情:
- “什么”:深度学习的最新发展能够做什么的想法。
- “如何做”:培训新模型或使用现有模型并使其投入生产的技术能力。
由于开源社区的强大,第二部分变得越来越容易。关于如何使用 TensorFlow 等库来训练和使用深度学习模型的具体细节,有许多很好的教程,其中许多出版物如《走向数据科学》每周出版一次。
这意味着,一旦你有了如何使用深度学习的想法,实现你的想法虽然不容易,但涉及到标准的“开发”工作:遵循本文中链接的教程,根据你的特定目的和/或数据修改它们,通过阅读 StackOverflow 上的帖子进行故障排除,等等。例如,他们不要求(或雇佣)一个拥有博士学位的独角兽,他可以从零开始编写原始的神经网络架构和是一个有经验的软件工程师。
这一系列文章将试图填补第一部分的空白:在高层次上覆盖深度学习的能力,同时为那些想要了解更多和/或深入代码并解决第二部分的人提供资源。更具体地说,我将介绍:
- 使用开源架构和数据集的最新成就是什么。
- 导致这些成就的关键架构或其他见解是什么
- 在自己的项目中开始使用类似技术的最佳资源是什么。
这些突破有什么共同点
这些突破虽然涉及许多新的架构和想法,但都是使用机器学习中常见的“监督学习”过程实现的。具体步骤如下:
- 收集大量适当的训练数据
- 建立一个神经网络架构——即一个复杂的方程系统,松散地模仿大脑——它通常有数百万个称为“权重”的参数。
- 通过神经网络重复输入数据;在每次迭代中,将神经网络的预测结果与正确结果进行比较,并根据神经网络的偏差程度和偏差方向来调整每个神经网络的权重。
This is how neural nets are trained: this process is repeated many, many times. Source.
这个过程已经被应用到许多不同的领域,并且已经产生了看起来已经“学习”的神经网络。在每个领域,我们将涵盖:
- 训练这些模型所需的数据
- 使用的模型架构
- 结果呢
1。图像分类
神经网络可以被训练来计算出图像包含什么对象。
所需数据
为了训练图像分类器,你需要带标签的图像,其中每个图像属于多个有限类中的一个。例如,用于训练图像分类器的标准数据集之一是 CIFAR 10 数据,其正确标记了 10 类图像:
Illustration of images of CIFAR-10 data. Source
深度学习架构
我们将涉及的所有神经网络架构都是由思考人实际上必须如何学习解决问题而激发的。对于图像检测,我们如何做到这一点?当人类确定图像中的内容时,我们首先会寻找高级视觉特征,如树枝、鼻子或车轮。然而,为了检测这些,我们下意识地需要确定较低层次的特征,如颜色、线条和其他形状。事实上,从原始像素到人类可以识别的复杂特征,比如眼睛,我们需要检测像素的特征,然后是像素的特征,等等。
在深度学习之前,研究人员会手动尝试提取这些特征,并将其用于预测。就在深度学习出现之前,研究人员开始使用技术(主要是支持向量机)试图找到这些手动提取的特征与图像是猫还是狗之间的复杂非线性关系。
Convolutional Neural Network extracting features at each layer. Source
现在,研究人员开发了神经网络架构,可以学习原始像素本身的这些特征;具体来说,深度卷积神经网络架构。这些网络提取像素的特征,然后提取像素的特征等,然后最终通过常规神经网络层(类似于逻辑回归)进行最终预测。
Samples of the predictions a leading CNN architecture made on images from the ImageNet dataset.
在以后的文章中,我们将深入探讨卷积神经网络是如何用于图像分类的。
突破
其结果是,在这些架构旨在解决的中心任务——图像分类——上,算法现在可以获得比人更好的结果。在著名的 ImageNet 数据集上,这是卷积架构最常用的基准,经过训练的神经网络现在在图像分类上实现了优于人类的性能:
As of 2015, computers can be trained to classify objects in images better than humans. Source
此外,研究人员已经找到了如何获取不立即用于图像分类的图像,分割出最有可能代表特定类别对象的图像矩形,通过 CNN 架构馈送这些矩形中的每一个,并最终得到图像中单个对象的分类以及界定其位置的框(这些被称为“边界框”):
Object detection using “Mask R-CNN”. Source
这整个多步骤过程在技术上被称为“物体检测,尽管它使用“图像分类”来完成最具挑战性的步骤。
资源
理论:要深入了解为什么CNN 会工作的理论,请阅读 Andrej Karpathy 的斯坦福课程中的教程。对于一个稍微更数学的版本,查看克里斯·奥拉关于卷积的帖子这里。
代码:要快速开始构建图像分类器,请查看 TensorFlow 文档中的这个介绍性示例。
2。文本生成
可以训练神经网络来生成模仿给定类型文本的文本。
所需数据
给定类的简单文本。例如,这可能是莎士比亚的所有作品。
深度学习架构
神经网络可以对元素序列中的下一个元素进行建模。它可以查看过去的字符序列,并针对给定的一组过去的序列,确定下一个最有可能出现的字符。
用于该问题的架构不同于用于图像分类的架构。对于不同的架构,我们要求网络学习不同的东西。之前,我们要求它学习图像的哪些特征是重要的。在这里,我们要求它注意一个字符序列,以预测序列中的下一个字符。要做到这一点,与图像分类不同,网络需要一种跟踪其“状态”的方法。例如,如果之前看到的字符是“c-h-a-r-a-c-t-e”,网络应该“存储”该信息,并预测下一个字符应该是“r”。
递归神经网络架构能够做到这一点:在下一次迭代中,它将每个神经元的状态反馈到网络中,允许它学习序列(还有更多内容,但我们将在稍后讨论)。
Image of a Recurrent Neural Net architecture. Source.
然而,要想真正擅长文本生成,网络还必须决定在序列中回溯多远。有时,就像在单词中间,网络只需查看最后几个字符来确定下一个字符,而其他时候它可能需要查看许多字符来确定,例如,我们是否在一个句子的末尾。
有一种叫做“LSTM”(长短期记忆)的特殊细胞在这方面做得特别好。每个细胞根据细胞内部的权重决定是“记住”还是“忘记”,权重随着网络看到的每个新字符而更新。
The inner workings of an LSTM cell. Source.
突破
简而言之:我们可以生成看起来有点像我们试图生成的文本的特征的文本,减去一些拼写错误的单词和错误,使其不是正确的英语。这个 Andrej Karpathy 的帖子有一些有趣的例子,从生成莎士比亚的戏剧到生成保罗·格拉厄姆的散文。
相同的架构已经被用于通过顺序生成 x 和 y 坐标来生成手写,就像语言是一个字符一个字符地生成一样。点击这里,查看的演示。
Written by a neural net. Can we still call it handwriting? Source
在以后的文章中,我们将深入探讨递归神经网络和 LSTMs 是如何工作的。
资源
理论上: 克里斯·奥拉在 LSTMs 上的这篇文章是经典之作,安德烈·卡帕西在 RNNs 上的这篇文章也是经典之作,它们能完成什么,以及它们是如何工作的。
代码: 这个是关于如何开始构建端到端文本生成模型的一个很好的演练,包括数据的预处理。这个 GitHub repo 使得使用预先训练的 RNN-LSTM 模型生成手写变得容易。
3。语言翻译
机器翻译——翻译语言的能力——一直是人工智能研究人员的梦想。深度学习让这个梦想更加接近现实。
所需数据
不同语言之间的成对句子。例如,对“我是学生”和“我是学生”将是训练神经网络在英语和法语之间进行翻译的数据集中的一对句子。
深度学习架构
与其他深度学习架构一样,研究人员已经“假设”了计算机可能如何理想地学习翻译语言,并建立了一个试图模仿这一点的架构。就语言翻译而言,从根本上来说,一个句子(编码为一系列单词)应该被翻译成其潜在的“意义”。这个意思应该被翻译成新语言中的一系列单词。
句子从单词“转化”成意义的方式,应该是一种擅长处理序列的架构——这原来就是上面所说的“递归神经网络”架构。
Encoder-decoder architecture diagram. Source
这种架构在 2014 年的中首次被发现可以很好地用于语言翻译,此后在许多方向上得到了扩展,特别是“注意力”这一概念,我们将在未来的博客文章中探讨。
突破
这篇谷歌博客文章表明这个架构确实完成了它设定的目标,将其他语言翻译技术打得落花流水。当然,谷歌能为这项任务获取如此棒的训练数据也无妨!
Google Sequence-to-Sequence based model performance. Source
资源
**代码&理论:**谷歌,值得称赞的是,在这里发表了一篇关于序列到序列架构的精彩教程。本教程概述了序列到序列模型的目标和理论,并指导您如何在 TensorFlow 中对它们进行编码。它还包括“注意”,这是对基本序列到序列架构的扩展,我将在详细讨论序列到序列时讨论它。
4。生成对抗网络
神经网络可以被训练来生成看起来像给定类别的图像的图像——例如,不是实际人脸的人脸图像。
所需数据
特定类别的图像—例如,一组人脸图像。
深度学习架构
gan 是一个令人惊讶的重要成果——世界上领先的人工智能研究人员之一 Yann LeCun 说,在我看来,它们是“过去 10 年中最有趣的想法。“事实证明,我们可以生成看起来像一组训练图像的图像,但实际上不是来自训练集的图像:例如,看起来像人脸但实际上不是真实人脸的图像。这是通过同时训练两个神经网络来实现的:一个试图生成看起来真实的假图像,另一个试图检测图像是否真实。如果你训练这两个网络,使它们以“相同的速度”学习——这是构建 GANs 的困难部分——试图生成假图像的网络实际上可以生成看起来非常真实的图像。
说得更详细一点:我们想用 GANs 训练的主要网络叫做生成器:它将学习接收随机噪声向量,并将其转换成逼真的图像。这个网络具有来自卷积神经网络的“逆”结构,被恰当地命名为“去卷积”架构。另一个试图区分真实和虚假图像的网络是一个卷积网络,就像那些用于图像分类的网络一样,被称为“鉴别器”。
Deconvolutional architecture of a “generator”. Source
Convolutional architecture of the “discriminator”. Source
在 GANs 的情况下,两个神经网络都是卷积神经网络,因为这些神经网络特别擅长从图像中提取特征。
突破和资源
Images generated by a GAN from a dataset of faces of celebrities. Source
Code : 这个 GitHub repo 既是一个关于使用 TensorFlow 训练 GANs 的很棒的教程,也包含了一些由 GANs 生成的引人注目的图像,比如上图。
理论:Irmak Sirer 的这个演讲是对 GANs 的有趣介绍,也涵盖了许多有监督的学习概念,这也将帮助你理解上面的发现。
最后,优秀的 Arthur Juliani 在这里有另一个有趣的 GANs 的可视化解释,以及在 TensorFlow 中实现它的代码。
摘要
这是对深度学习在过去五年中产生最大突破的领域的高度概述。我们讨论的这些模型都有许多开源实现。这意味着您几乎总是可以下载一个“预训练”模型并将其应用于您的数据,例如,您可以下载预训练的图像分类器,您可以通过这些图像分类器输入数据,以便对新图像进行分类或在图像中的对象周围绘制方框。因为这项工作的大部分已经为你完成了,所以使用这些前沿技术所必需的工作不是“进行深度学习”本身——研究人员已经在很大程度上为你解决了这一部分——而是进行“开发”工作,以获得其他人为解决你的问题而开发的模型。
希望现在你对深度学习模型的能力有了一点更好的理解,并且更接近实际使用它们了!
新泽西州运输系统故障的 5 个阶段
这篇文章是我和 迈克尔·张 之间正在进行的合作的一部分,分析我们收集的实时新泽西州过境数据。你可以在这里 找到入门文章 ,在这里 找到上一篇文章 。
2018 年 3 月 2 日星期五,纽约市是三月份横扫该地区的四个东北方中的第一个的末端。从前一天晚上到下午早些时候,寒冷的天气一直在持续下降,并伴有上午晚些时候的阵风。
当我结束一天的工作,前往纽约宾州车站回家时,我越来越担心,因为朋友和家人发来短信告诉我,新泽西州的交通服务严重受阻。
An ominous screenshot of Departure Vision for New York Penn at 4:39 pm on 3/2/18. Note the “STATUS” column.
我完全没有料到自己会真的到达宾州车站,一大群沮丧的通勤者涌入第七大道。新泽西州的交通系统完全瘫痪,9 趟列车同时取消,随后又有几趟列车因天气原因被取消。
虽然这种大规模、全系统的故障很少见,但它们给成千上万整天或周末都被毁掉的通勤者留下了深刻的印象。让我们来看看这次服务中断的影响:下面的图表显示了 3 月 2 日进出纽约佩恩站的每趟新泽西州运输列车的延误情况。
Each dot is a train colored by delay severity. Note the symmetry in volume about hour 14 or 15. (Left: Inbound trains into New York Penn, Right: Outbound trains from New York Penn)
进入纽约宾州的火车晚点是由它们到达纽约宾州(它们的最后一站)的累积延迟决定的,而离开纽约宾州的火车晚点是由它们到达第一站的延迟决定的。原定于下午 5 点到 7 点从纽约出发的 32 列火车中,有 18 列被取消,其他几列严重延误。
系统怎么会沦落到这种地步?导致这种情况的原因是什么?导致这种故障的系统动态是什么?我们可以检查数据,以可视化系统如何对中断做出反应,并识别导致系统崩溃的不同阶段。
可视化运行中的新泽西州运输系统
对于外行人来说,新泽西州运输系统是一个非循环的铁路网络,服务于新泽西州的 162 个火车站,并将旅客连接到纽约佩恩站。作为参考,这里是放大的系统铁路地图,捕捉了纽约宾州车站周围的车站,包括纽瓦克宾州车站、Secaucus Junction(上层)、纽瓦克布罗德街和霍博肯:
Abbreviated NJ Transit system map. Pink inset: The stations we will focus on. Note the overlap at Secaucus Junction, where the lines crossing above stop at Secaucus Upper Level; the lines crossing below stop at Secaucus Lower Level.
由于许多线路交叉和纽约宾州车站的高容量,新泽西州运输运营的这个区域具有复杂的系统动态,每天影响成千上万的人。
我们将通过关注这一段轨道来调查 3 月 2 日的系统故障,因为催化服务中断(稍后介绍)发生在纽瓦克宾州车站和 Secaucus Junction 之间;此外,大量的列车将展示系统动力学在发挥作用。
第一阶段:暴风雨前(或期间)的平静
让我们从 3 月 2 日早上的系统状态开始分析,因为它处理了前一天晚上开始的持续冻雨。在处理了早上由于列车故障和美国国家铁路客运公司轨道维修造成的一些小的服务中断后,该系统在早高峰后立即找到了一些稳定性。
下面的动画显示了左侧的计划系统行为和右侧的实际观察行为。由我们的刮刀收集的停止级列车数据被转换成有状态的数据结构,然后从该数据结构对列车位置进行插值和动画处理。
System animation at 10 am. Each dot here corresponds to a train. Left: Scheduled trains, Right: Observed trains. Stations: NWP (Newark Penn), SEC (Secaucus Upper Level), NYP (New York Penn), ND (Newark Broad St), HOB (Hoboken)
火车在停靠站之间以大致相同的平均速度行驶。此外,我们看到列车在非常接近其预定发车时间的情况下从纽约宾州始发发车。目前,系统是稳定的。
第二阶段:有东西坏掉了
当天下午早些时候,暴风雨带来的降水开始减少,取而代之的是阵阵狂风。然后,发生了这样的事:
下午早些时候,纽瓦克·佩恩和 Secaucus Junction 之间的一条高架电线断了。为列车沿途供电的架空电力线是固定铁路基础设施中最脆弱的部分之一,因为它们容易受到大风和持续冬季降水的破坏。
在这种情况下,我们看到,在电线断开时,该地区的风速确实增大了。以下是新泽西州纽瓦克 3 月 2 日的风力数据:
Wind speed in Newark on 3/2/18 (courtesy of the Time Machine on darksky.net)
尽管上面的推文时间标记为下午 4 点 47 分,但由于天气恶劣,下午早些时候有几趟列车被取消;出于分析的目的,我们假设电线在下午 1 点到 2 点之间断开。这条下线导致纽瓦克·佩恩和 Secaucus 之间的有限路段只有一条轨道可用(根据我从 NJ Transit 听到的公告)。让我们看一下系统中受影响的部分是如何应对这种服务中断的。
第三阶段:排队
下午早些时候通常是新泽西州运输服务周期中相对较慢的时段,但随着下午晚些时候的临近,进出纽约宾州的列车数量开始快速增长。作为一个简化的假设,我们可以说足够多的火车需要在下午晚些时候到达纽约宾州,以便它们可以被重用来服务纽约宾州的晚上通勤。这些列车的确切配置尚不清楚,但我们看到该时间表旨在保持进出航站楼的列车数量相等。
然而,在 3 月 2 日,由于纽瓦克和 Secaucus 之间的线路故障,这两个车站之间的列车不得不共用一条轨道。开往纽约宾州的火车慢如蜗牛,因为它们排成了一列,而更早的火车使用的是单轨。
System animation at 4 pm. Note the queueing trains heading towards NWP at 4:00 pm.
第四阶段:取消
让我们检查之前的服务中断和排队对到达纽约宾夕法尼亚的火车数量的影响。为了做到这一点,我们将查看在任何给定时间点到达纽约宾州的累计列车数与计划离开纽约宾州的累计列车数之间的差异。实际上,这是在任何给定的时间点,纽约宾州车站可用于服务预定出站需求的列车数量。同样,这可能是对系统工作方式的简化假设,但它捕捉到了系统的一般行为。
The cumulative difference between how many trains have arrived to New York Penn, versus how many have been scheduled to go out. The “actual” line incorporates observed delays and cancellations on 3/2/18.
在上图中,当“计划”(蓝色)线偏离“实际”(橙色)线并在当天晚些时候恢复时,这表明排队导致了延迟。“实际”线向我们显示,在 3 月 2 日下午 6:30,计划从纽约宾夕法尼亚出发的列车数量超过了已经到达纽约宾夕法尼亚的列车数量。此外,下午 2 点左右备用列车数量的急剧下降也反映了当天早些时候的取消。
如果一切都按照时间表进行,9 趟列车将在下午 6:30 到达纽约宾州车站,为通勤的末端提供服务。相反,早些时候的取消和下午 4 点到 6 点之间的排队使得系统严重落后。在下午 6 点 29 分整,我们收集的数据显示,新泽西州运输同时取消,你猜对了,9 列火车离开纽约宾州。该系统似乎依赖于在终点站有足够的“储备”列车来满足出站需求。
第五阶段:决议
下午 6:30 的批量取消正是我发现自己在 3 月 2 日进入宾州车站的时候。虽然我可以理解通勤者对取消航班有多么沮丧,但我现在看到,新泽西州运输公司可能没有足够的火车在佩恩站的院子里服务于整个晚上的时间表。下午 6:30 的批量取消实际上是一种机制,使系统能够跟上传出的需求。
晚上晚些时候,排队仍然存在,在受影响的轨道上有许多剩余的火车交通,但火车再次进出纽约宾夕法尼亚。我们可以在晚上 8:30 左右看到系统缓慢的恢复:
System animation around 8:30 pm.
外卖
这一重大服务中断影响了 3 月 2 日大约 12 点到 9 点的系统性能。大量航班取消后,数千名通勤者被困,不得不寻找替代方式回家。
分析纽瓦克和 Secaucus 之间的线路中断后的系统响应,也许可以揭示为什么纽约宾州车站缺少可用的列车。根据进出的供应和需求,很明显,在官方宣布大规模取消之前至少一个小时左右,没有足够的列车。
在这种情况下,我非常同情新泽西州运输公司。他们承受着巨大的压力,这些压力来自他们无法控制的因素,即天气、美国国家铁路客运公司基础设施和缺乏资金。首先,我认为 NJ Transit 可以做一些事情来减轻通勤者在大规模延误时的挫折感:
- 恶劣天气调度:虽然 3 月 2 日东北风预计会降低降水强度,但由于预计会有大风,NJ Transit 可能会选择使用他们的恶劣天气 1 级备用调度。
- 警告通勤者即将发生的故障:当火车被取消或严重延误时,新泽西州运输推特会自动发送推文。在 3 月 2 日这样的情况下,Twitter 页面可以警告客户系统范围内的恶劣条件,并鼓励旅行者制定不同的计划。尚不清楚关于个别列车的推文是否会出现大规模取消。
- 为通勤者提供一种从整体上查看系统状态的方式(类似于本文中的动画):通勤者会意识到问题的严重性,并对解决问题需要多长时间有一个现实的感觉。
无论如何,很明显,基础设施的改善是非常必要的,特别是在关键的,高容量的轨道路段。如果没有资金和更具弹性的基础设施,我们可以预期这 5 个阶段会一再重复。
如果您喜欢这篇分析,请👏下面这篇文章。还有,跟着我的媒体简介,以及 迈克尔张 ,去获取这些数据(很快!)并在未来几个月阅读更多 NJ Transit 分析!谢谢大家!
机器学习的 7 个步骤
从检测皮肤癌,到分拣黄瓜,到检测需要维修的自动扶梯,机器学习赋予了计算机系统全新的能力。
但是它在引擎盖下是如何工作的呢?让我们看一个基本的例子,并以此为借口,谈谈使用机器学习从你的数据中获得答案的过程。
L 假设我们被要求创建一个系统来回答一种饮料是葡萄酒还是啤酒的问题。我们构建的这个问答系统被称为“模型”,这个模型是通过一个称为“训练”的过程创建的。训练的目标是创建一个准确的模型,在大多数情况下正确地回答我们的问题。但是为了训练一个模型,我们需要收集数据来进行训练。这是我们开始的地方。
如果你是机器学习的新手,想先快速浏览一下,请先看看这篇文章,然后再继续:
这个世界充满了数据。很多很多数据。从图片、音乐、文字、电子表格、视频到…
medium.com](https://medium.com/towards-data-science/what-is-machine-learning-8c6871016736)
This is just the beginning
葡萄酒还是啤酒?
O 我们将从葡萄酒和啤酒中收集你的数据。我们可以从饮料的很多方面收集数据,从泡沫的数量到杯子的形状。
出于我们的目的,我们将只选择两个简单的:颜色(作为光的波长)和酒精含量(作为百分比)。希望我们可以根据这两个因素来划分我们的两种饮料。从现在开始,我们称这些为我们的特征:颜色和酒精。
我们流程的第一步将是跑到当地的杂货店,买一堆不同的啤酒和葡萄酒,以及一些设备来做我们的测量——测量颜色的分光计和测量酒精含量的比重计。我们的杂货店有一个电子硬件部分:)
收集数据
一旦我们有了设备和酒,就该开始机器学习的第一步了:收集数据。这一步非常重要,因为您收集的数据的质量和数量将直接决定您的预测模型的好坏。在这种情况下,我们收集的数据将是每种饮料的颜色和酒精含量。
这将产生一个颜色、酒精百分比以及是啤酒还是葡萄酒的表格。这将是我们的训练数据。
数据准备
几个小时的测量之后,我们已经收集了我们的训练数据。现在到了机器学习的下一步:数据准备,我们把我们的数据加载到一个合适的地方,准备在我们的机器学习训练中使用。
我们将首先把所有的数据放在一起,然后随机排序。我们不希望数据的顺序影响我们的学习,因为这不是决定一种饮料是啤酒还是葡萄酒的一部分。换句话说,我们决定饮料是什么,与之前或之后的饮料无关。
这也是对数据进行任何相关可视化的好时机,有助于您了解不同变量之间是否有任何相关的关系可以利用,以及向您显示是否有任何数据不平衡。例如,如果我们收集的关于啤酒的数据点比葡萄酒多得多,我们训练的模型就会偏向于猜测它看到的几乎所有东西都是啤酒,因为大多数时候它都是对的。然而,在现实世界中,模型可能会看到等量的啤酒和葡萄酒,这意味着猜测“啤酒”有一半是错误的。
我们还需要将数据分成两部分。第一部分用于训练我们的模型,将是数据集的主要部分。第二部分将用于评估我们的训练模型的性能。我们不想使用模型被训练用于评估的相同数据,因为它可能只是记住“问题”,就像你不会在考试中使用数学作业中的相同问题一样。
有时我们收集的数据需要其他形式的调整和处理。像去杜平、规范化、纠错等等。这些都发生在数据准备阶段。在我们的例子中,我们没有任何进一步的数据准备需求,所以让我们继续。
选择模型
我们工作流程的下一步是选择模型。多年来,研究人员和数据科学家创建了许多模型。有些非常适合图像数据,有些适合序列(如文本或音乐),有些适合数字数据,有些适合基于文本的数据。在我们的例子中,因为我们只有两个特征,颜色和酒精百分比,我们可以使用一个小的线性模型,这是一个相当简单的模型,应该可以完成这项工作。
培养
现在我们进入通常被认为是机器学习的主体部分——训练。在这一步中,我们将使用我们的数据逐步提高模型预测给定饮料是葡萄酒还是啤酒的能力。
在某些方面,这类似于某人第一次学开车。起初,他们不知道踏板、旋钮和开关是如何工作的,也不知道什么时候应该使用它们。然而,经过大量的实践和纠正他们的错误,一个有执照的司机出现了。此外,经过一年的驾驶,他们已经变得相当熟练。驾驶行为和对现实世界数据的反应改变了他们的驾驶能力,磨练了他们的技能。
我们将在更小的范围内用我们的饮料来做这件事。具体来说,直线的公式是 y=m*x+b,其中 x 是输入,m 是直线的斜率,b 是 y 截距,y 是直线在 x 位置的值。我们可以用来调整或“训练”的值是 m 和 b。没有其他方法可以影响直线的位置,因为其他变量只有 x(我们的输入)和 y(我们的输出)。
在机器学习中,有许多 m,因为可能有许多特征。这 m 个值的集合通常形成一个矩阵,我们将 W 表示为“权重”矩阵。同样对于 b,我们把它们放在一起,称之为偏差。
训练过程包括为 W 和 b 初始化一些随机值,并尝试用这些值预测输出。正如你所想象的,它做得很差。但是我们可以将我们的模型的预测与它应该产生的输出进行比较,并调整 W 和 b 中的值,这样我们将有更正确的预测。
然后重复这个过程。更新权重和偏差的每次迭代或循环被称为一个训练“步骤”。
让我们更具体地看看这对于我们的数据集意味着什么。当我们第一次开始训练时,就像我们在数据中画了一条随机的线。然后,随着训练的每一步进行,这条线一步一步地移动,更接近葡萄酒和啤酒的理想分离。
估价
一旦训练完成,就该用评估来看看这个模型是否好了。这就是我们之前搁置的数据集发挥作用的地方。评估允许我们用从未用于训练的数据来测试我们的模型。这一指标使我们能够看到模型对尚未看到的数据的表现。这代表了模型在现实世界中的表现。
我在培训评估中使用的一个很好的经验法则是 80/20 或 70/30。这在很大程度上取决于原始源数据集的大小。如果您有大量数据,也许您不需要评估数据集的大部分。
参数调谐
一旦你做了评估,你可能想看看你是否能以任何方式进一步提高你的训练。我们可以通过调整我们的参数来做到这一点。我们在进行培训时隐含地假设了一些参数,现在是回过头来测试这些假设并尝试其他值的好时机。
一个例子是我们在训练中运行训练数据集的次数。我的意思是,我们可以多次向模型“展示”我们的完整数据集,而不仅仅是一次。这有时会导致更高的精度。
另一个参数是“学习率”。这定义了根据前一个训练步骤的信息,我们在每一步中移动直线的距离。这些值在我们的模型可以变得多精确以及训练需要多长时间方面都起着作用。
对于更复杂的模型,初始条件在确定训练结果时可以发挥重要作用。根据模型开始训练时是否将值初始化为零,而不是值的某种分布,可以看出差异,这导致了使用哪种分布的问题。
The potentially long journey of parameter tuning
正如你所看到的,在训练的这个阶段有很多需要考虑的事情,重要的是你要定义一个“足够好”的模型,否则你可能会发现自己要调整很长时间的参数。
这些参数通常被称为“超参数”。这些超参数的调整仍然是一门艺术,更像是一个实验过程,在很大程度上取决于数据集、模型和训练过程的细节。
一旦您对您的训练和超参数感到满意,在评估步骤的指导下,是时候最终使用您的模型做一些有用的事情了!
预言;预测;预告
机器学习是用数据回答问题。所以预测,或者说推理,是我们回答一些问题的步骤。这是所有这些工作的重点,也是机器学习的价值得以实现的地方。
我们最终可以使用我们的模型来预测给定的饮料是葡萄酒还是啤酒,给定它的颜色和酒精百分比。
整体情况
机器学习的力量在于,我们能够使用我们的模型来确定如何区分葡萄酒和啤酒,而不是使用人类的判断和手动规则。您也可以将今天提出的想法推广到其他问题领域,这些领域也适用相同的原则:
- 收集数据
- 准备这些数据
- 选择模型
- 培养
- 估价
- 超参数调谐
- 预测。
张量流游乐场
F 或更多训练和参数玩法,查看 TensorFlow 游乐场。这是一个完全基于浏览器的机器学习沙箱,在这里你可以尝试不同的参数,并针对模拟数据集进行训练。
下一步是什么?
虽然我们将来会遇到更多的步骤和细微差别,但这是一个很好的基础框架,可以帮助我们思考问题,让我们有一个共同的语言来谈论每个步骤,并在将来更深入地探讨。
下一次,我们将使用代码构建我们的第一个“真正的”机器学习模型。再也不用画线和复习代数了!
“一个[?]“iPhone Bug 像病毒一样传播
tldr:A[?]影响 iPhone 用户的漏洞可能是一种在用户间传播的病毒。我分析了 Twitter 上受感染的用户来研究这个问题,展示了病毒的 3 个特性:指数增长、以位置为中心的传播和以网络边缘为中心的传播(通过朋友传播)。
Analysis of 2.5M tweets from 1M infected users
The A[?] Bug
苹果于 11 月 1 日推出了 iOS 11.1,发布了大量问题和漏洞。但是没有什么能与 A [?] bug 在过去的一周收到了这个。
对于门外汉,A[?] bug 影响试图键入字母“I”的 iOS 用户,他们的键盘会自动将“I”更正为“A [?]".随着人类最古老也是最重要的文字之一被破坏,这个 bug 可以理解地把 人 逼疯了。下面是这个 bug 的截图:
这个错误是如此严重,以至于许多人倒退到石器时代,“我”再次成为自我认同的首选术语。
理论形成了
关于是什么导致了这个 bug,以及为什么它没有影响到所有用户,有很多猜测。最有趣的猜测是,关于这种病毒的报道似乎每天都在增加,好像它正在传播。有一种理论认为,只有当自动更正软件看到 A [?]字符。基本上:如果有人发给你,你就被感染了。
这完全符合病毒的模式(尽管我确信苹果不会使用这个术语)。然而,所有这些都只是猜测,所以我开始通过跟踪这个 bug 在 Twitter 上的传播来定量地回答这个问题。
The bug frustrating users on both Twitter and Snapchat.
Unicode、表情符号和一个[?]
问题中的角色实际上不是一个[?],但实际上是一系列 unicode 表情符号字符“\x49\xEF\xB8\x8F”。一些软件将其渲染为“A [?]”,有些软件把这个渲染成“我”。有趣的是,许多用户并没有意识到这个错误,因为 unicode 字符对他们来说是“I”。正因为如此,他们发送了许多损坏的信息,推文等,没有编辑字符。
推特数据
过去一周,我使用 Twitter API 搜索并下载了约 250 万条包含违规字符的推文,以调查关于该漏洞传播的 3 个关键问题。
1.病毒呈指数增长
当观察这些推文的分布时,一些事情立即变得显而易见:它们的频率正在加快。受感染的推文数量实际上每天都在翻倍,呈指数级病毒式增长。这种关系也适用于被感染用户的数量。
2.病毒通过位置传播
病毒通常以地理方式在人群中传播。在这里,我展示了随着时间的推移,病毒在美国的传播情况。注意在最初的感染点周围是如何形成集群并向外扩散的。
3.病毒在朋友间传播
任何感染过单核细胞增多症的人都知道,病毒通过密切接触传播。我调查了朋友的关系网,以了解 A [?] bug 在网络间传播。这个动画是由 100 个 twitter 好友组成的(互相关注)。每个节点都是用户,每条边都是友情连接。只有当两个朋友都感染了病毒时,优势才会显现。请注意病毒如何在有许多受感染朋友的节点中传播得最快。该动画还显示了病毒的总体增长模式,最初很少有人被感染,并通过网络呈指数级传播。
是 A [?] Bug 一个病毒?
可能吧(见更新)。
这项调查表明 A [?]病毒以病毒般的方式传播。这种影响可能是由于 11.1 更新的逐步采用,但这应该显示线性增长,而不是指数增长。苹果已经在最新的 11.1.1 更新中修补了这个错误,但没有发布关于最初错误原因的声明。重要的是要记住,在苹果发布关于问题的官方报告之前,我们不能确定任何事情。在那之前,我们只能猜测。
更新:
许多人强烈怀疑病毒会在用户之间传播,所以我录制了一段我的 iPhone 通过被感染的短信感染病毒的视频。
在这个视频的开始,我的 iPhone 可以输入正常的 I。首先,我收到一条带有正常“I”的消息。这不影响我的自动更正。接下来,我收到一条带有畸形“I”的消息。看到这种畸形的字符导致错误在我的 iPhone 上出现。这让我更加确信这个漏洞主要是以用户对用户的方式传播的。
Screencast of user acquiring the bug via text.
使用的工具:
python,matplotlib,numpy,d3,twitter api…代码即将发布
喜欢这篇文章吗?
如果你喜欢这篇文章,请用拍手 或分享来帮助你的朋友。黑客新闻链接:【https://news.ycombinator.com/item?id=15681249
机器学习基础知识
在投入机器学习之前,你需要知道的事情。
在过去的几年里,人们对机器学习重新产生了兴趣。这种复兴似乎是由强大的基本面驱动的——全球各地的传感器发出的大量数据,廉价的存储和有史以来最低的计算成本!
机器学习引起了技术人员对机器学习的浓厚兴趣。然而,在深入 ML 的海洋之前,这里有一些你应该熟悉的基本概念。把这个放在手边,因为在学习 ML 的时候你会经常碰到这些术语。
监督、非监督和半监督学习:
监督学习:
监督式学习顾名思义是指作为老师的监督人的存在。基本上,监督学习是一种学习,在这种学习中,我们使用标记良好的数据来教授或训练机器,这意味着数据已经标记了正确的答案。之后,向机器提供没有目标标签(期望输出)的新的一组示例(数据),并且机器通过应用其从历史训练数据的学习来预测新数据的输出。
在监督学习中,您有输入变量(x)和输出变量(Y ),并使用算法来学习从输入到输出的映射函数。
Y = f(X)
目标是很好地逼近映射函数,以便当您有新的输入数据(x)时,可以预测该数据的输出变量(Y)。
监督学习问题可以进一步分为回归和分类问题。
分类:一个分类问题是当输出变量是一个类别时,比如“红”或“蓝”或“病”和“没病”。
回归:一个回归问题是当输出变量是一个实值时,比如“工资”或者“价格”。
无监督学习:
无监督学习是指只有输入数据(X)而没有相应的输出变量。
无监督学习的目标是对数据中的底层结构或分布进行建模,以便了解更多关于数据的信息。
这些被称为非监督学习,因为不像上面的监督学习,没有正确的答案,也没有老师。算法留给它们自己的设备去发现和呈现数据中有趣的结构。
无监督学习问题可以进一步分为聚类和关联问题。
聚类:聚类问题是你想要发现数据中的内在分组,比如按照购买行为对客户进行分组。
关联:关联规则学习问题是你想要发现描述大部分数据的规则,比如购买 X 的人也倾向于购买 y。
无监督学习算法的一些流行示例是:
聚类问题的 k-均值算法。
关联规则学习问题的 Apriori 算法。
半监督学习:
你有大量输入数据(X)而只有部分数据被标记(Y)的问题,叫做半监督学习问题。
这些问题介于监督学习和非监督学习之间。
一个很好的例子是照片档案,其中只有一些图像被标记(例如狗、猫、人),而大多数图像没有标记。
许多现实世界的机器学习问题都属于这一领域。这是因为标记数据既昂贵又耗时,因为这可能需要咨询领域专家。而无标签数据便宜且易于收集和存储。
您可以使用无监督学习技术来发现和学习输入变量中的结构。
您还可以使用监督学习技术对未标记的数据进行最佳猜测预测,将该数据作为训练数据反馈到监督学习算法中,并使用该模型对新的未知数据进行预测。
机器学习中的分类和连续特征:
功能是用于分析基础表(ABT)中的列的术语。所有的特征都可以分类为绝对的或连续的。分类特征具有几个值中的一个,其中选项是类别(例如小于 50 或大于 50)、欺诈或非欺诈、信用卡违约或非违约等,而连续特征具有许多可能的值选项,例如人的工资、人的年龄、商品的价格、要给予的贷款金额等。
如果分类特征不是数字或字符串,则需要通过手动替换、 标签编码器或一个热编码器 将其编码为数字表示,因为 ML 模型只能处理数字而不能处理字符串值
Scikit-learn:
Scikit-learn 可能是 Python 中最有用的机器学习库。Scikit-learn 通过 Python 中的一致接口提供了一系列监督和非监督学习算法。Scikit-learn 附带了许多特性。把 Scikit-learn 当做机器学习的工具箱。这里有几个例子可以帮助你理解这种差异:
**监督学习算法:**想想你可能听说过的任何监督学习算法,它很有可能是 scikit-learn 的一部分。从广义线性模型(如线性回归)、支持向量机(SVM)、决策树到贝叶斯方法——所有这些都是 scikit-learn 工具箱的一部分。算法的传播是 scikit-learn 使用率高的一大原因。我开始使用 scikit 来解决监督学习问题,并向新接触 scikit /机器学习的人推荐它。
**交叉验证:**有多种方法可以检查监督模型对未知数据的准确性
**无监督学习算法:**又一次出现了大量的算法,从聚类、因子分析、主成分分析到无监督神经网络。
**各种玩具数据集:**这在学习 scikit-learn 时派上了用场(例如 IRIS 数据集、波士顿房价数据集)。在学习一个新的库的时候,把它们放在手边很有帮助。
**特征提取:**用于从图像、文本(如单词包)中提取特征
训练和测试数据集:
训练数据集:
训练数据集是我们用来训练 ML 模型的原始数据集的一部分。该模型通过运行算法来学习这些数据,并映射函数 F(x ),其中自变量(输入)中的“x”对应于“y ”,其中“y”是因变量(输出)。在数据集上训练我们的模型时,我们向我们的模型提供输入和输出变量,以便我们的模型能够学习基于输入数据预测输出。
测试数据:
测试数据基本上是从原始数据集保留下来的验证集,它用于通过将模型的预测结果与测试数据集的实际结果进行比较来检查我们的模型的准确性。虽然我们知道测试数据是从原始数据集本身提取出来的,但是我们在测试时并没有向我们的模型提供输出变量。当模型根据对训练数据的学习给出其预测时,我们将预测结果与原始结果进行比较,以获得我们的模型对未知数据的准确性或性能的度量。
考虑一个例子,其中我们的原始数据集有 1000 行,我们的因变量是欺诈而不是欺诈,我们将在 70%的数据即 700 行上训练我们的模型,然后在 30%的数据即 300 行上测试我们的模型准确性。如上所述,在测试我们的模型时,我们不会为我们的模型提供测试数据的结果,尽管我们知道结果,并让我们的模型给出这 300 行的结果,稍后我们将比较我们的模型的结果与我们的测试数据的原始结果,以获得我们的模型预测的准确性。
为了将我们的数据分割成训练和测试集,我们使用 scikit-learn 库的 train_test_split 方法
混乱矩阵:
混淆矩阵是分类模型做出的预测的正确性的度量。
顾名思义,混淆矩阵是模型做出的正确和不正确预测的矩阵表示。
考虑这样一个场景,我们预测这个人是患有“疾病”(事件)还是“没有疾病”(没有事件)。
混淆矩阵现在将基于 4 个术语
正确预测事件值的正真值。
误报为错误预测的事件值。
“真阴性”表示正确预测的无事件值。
“假阴性”表示预测错误的无事件值。
假设我们有 100 个测试数据,其中 50 个有疾病(D) 和 50 个无疾病(ND) ,我们的模型预测结果为 45 疾病(D) 和 55 无疾病,在这种情况下,我们的混淆矩阵将为
Confusion Matrix
真阳性:45(正确预测的事件值,即左上角的绿色单元格)。
假阳性:0(没有事件值被预测为 0,即左下红细胞)
真阴性:50(正确预测无事件值,即右下角绿色单元格)
假阴性:5(事件值预测为无事件值,即右上红细胞)
绿色对角线代表正确预测,红色对角线代表错误预测,因此正确预测的总数为 45+50 = 95
而不正确的预测是 5+0 = 5
准确度分数:
准确度分数也提供了对分类模型所做预测的准确度或正确性的测量,但是它在 0 到 1 的范围内,然后乘以 100 得到 0 到 100 之间的分数,该值越接近 1,模型越准确。
准确度分数计算如下:
准确度得分=正确预测总数/做出的预测总数 100*
考虑到之前的场景准确度得分将=
95/100 * 100 = 0.95*100 = 95%
用于计算准确度分数的库是sk learn . metrics . accuracy _ score
平均绝对误差和均方根误差:
虽然使用准确度分数和混淆矩阵可以很好地评估分类模型,但使用平均绝对误差和均方根误差评估回归模型,因为我们回归模型的目标是预测尽可能接近实际值的值。
MAE 和 RMSE 越接近 0,模型越准确。
平均绝对误差:
它是作为绝对误差值的平均值来计算的,其中“绝对”意味着“使之为正”,以便将它们相加在一起。
MAE =总和(abs(预测值-实际值)/总预测值
考虑一个例子;
实际值= [2,4,6,8],预测值= [4,6,8,10】
MAE = ABS(4–2+6–4+8–6+10–8)/4 = 2
用于计算平均绝对误差的库是sk learn . metrics . mean _ absolute _ error
均方根误差:
计算一组回归预测中的误差的另一种流行方法是使用均方根误差。
缩写为 RMSE,这种度量有时被称为均方误差或 MSE,从计算和名称中去掉根部分。
RMSE 的计算方法是实际结果和预测之间的平方差的平均值的平方根。
对每个误差求平方会强制这些值为正,而均方误差的平方根会将误差度量返回到原始单位进行比较。
RMSE = sqrt(总和((预测值-实际值))/总预测值)
实际值= [2,4,6,8],预测值= [4,6,8,10】
RMSE = sqrt((8)/4)= sqrt(64/4)= sqrt(16)= 4
一旦你熟悉了上面的术语,并对 python 有了基本的了解,你就可以尝试一些简单的 ML 模型了。
如果这个博客已经帮你给了一些的掌声,那就把它分享给你的朋友吧。
—谢谢
权力的滥用:数据分析中权力计算的普遍谬误
在文章《滥用权力:数据分析中权力计算的普遍谬误》中,Hoenig 和 Heisey 指出了使用权力计算来解释假设检验结果的缺陷,该结果给出了统计上不显著的结果。他们提供了适当的理由,并主张在这种情况下应避免通过权力计算得出结论。
作者指出,有时在假设检验过程中,会发生第二类错误,即研究人员未能拒绝错误的零假设。这导致研究人员进退两难,当他们无法拒绝一个在人群中站不住脚的假设时,他们应该做什么。然而,他们发现了许多文献提出的对抗这种情况的令人沮丧的解决方案。许多文献建议使用实验后功效计算来解释给出统计上不显著输出的测试结果。作者回顾了 19 种应用期刊,发现在报告结果时采用了这种做法。他们给出了 Anon (1995,1998)的参考文献,其中有两种期刊作为政策问题提出了这样的计算方法。甚至一些统计教科书也被发现说明这种有缺陷的方法(如罗斯纳 1990;维纳、布朗和米歇尔斯 1991;Zar 1996)。作者(Hoeining 和 Heisey)提醒研究人员注意幂计算作为数据分析方法的缺点,并建议他们寻找更合适的方法。在这里,理解为什么应用科学家鼓励使用功效分析方法变得很重要,其中一个可能的原因是应用科学家提倡后功效方法,因为大多数时候他们受传统的束缚来测试通常的“无影响零假设”。尽管它并不总是与研究中提出的问题相关的零假设。
作者给出了支持其主张的理由,即使用功效计算来解释零假设的无统计学意义的结果是不合适的,如下所示:
第一点是,大多数研究人员主张计算检验统计量的观测值的检验功效。这被称为“观察功效”,意味着观察到的治疗效果和可变性等于真实参数值,并在此基础上计算拒绝零假设的概率。相反,作者提出了他们的观点,即观察到的功效永远不能实现这些目标,因为测试的 p 值也决定了观察到的功效,并且对观察到的功效和 p 值之间的关系存在误解,其中观察到的功效是 p 值的 1:1 函数。因此,如果一个观察到的能量在数量上更高,这并不一定意味着在总体中不被拒绝的零假设成立。作者将这种解释称为“权力接近悖论”(PAP)。
实验后功效计算的第二个,也是最有趣的用法,是找到导致特定功效的假设的真实差异。这里,应用科学家使用了两种方法:“可检测效应大小”及其另一种变体“生物学显著效应大小”,并指出,检测有意义的零偏差的计算能力越高,当零未被拒绝时,自然接近零的证据就越强。作者认为,尽管这两种方法似乎比之前讨论的观察权力方法更有吸引力,但这些方法也存在“权力方法悖论”(PAP)。
此外,第三点是,从教育学的观点来看,将从置信区间的考虑中获得的推断与从功效分析方法中获得的推断进行比较是有趣的,但是一旦我们构建了置信区间,功效计算就不会产生额外的见解。因此,对 CI 之外的假设进行功效计算变得毫无用处,因为数据已经表明这些是不相关的值。
讨论的第四点是通过功效方法进行的等效性测试,Schuirmann (1987)指出,当被视为等效性的正式测试时,功效方法导致一个临界区,该临界区基本上与合理的等效性测试应该具有的区域颠倒。
在他们的结束语中,作者承认在数据分析中使用幂型概念及其重要性不能完全排除,但断言这种方法的应用非常有限。他们指出了一个潜在的应用,可能是检查几个实验是否相似,除了样本大小;这在荟萃分析中可能是一个问题(Hung,O’ Neill,Bauer 和 Kohne 1997)。他们解释说,在这种情况下的目标是检查同质性,这不同于事后功率计算的通常动机。
他们(作者)强烈提出,虽然功效计算告诉我们,在给定特定状态和统计研究设计的情况下,我们在未来能够多好地表征自然,但他们不能使用数据中的信息来预测或告诉自然的可能状态。他们认为,这可以通过置信区间、适当选择零假设和等价测试来实现,并建议研究人员更多地强调一般原则,而不是强调力学,以避免对这些问题的混淆。
参考文献
匿名。(1995),《新闻杂志》,《野生动物管理杂志,59,196–199。
Hoenig,J. M .,& Heisey,D. M. (2001 年)。滥用权力:数据分析中权力计算的普遍谬误。美国统计学家, 55 (1),19–24。
洪,H. J .,奥尼尔,R. T .,鲍尔,p .,,Kohne,K. (1997 年)。当替代假设为真时 p 值的行为。生物特征,11–22。
罗斯纳,B. (1990 年)。方差分析。生物统计学基础。加利福尼亚州贝尔蒙特 PWS-肯特出版公司,474–526。
舒尔曼博士(1987 年)。评价平均生物利用度等效性的两个单侧检验程序和功效方法的比较。药代动力学与生物药剂学杂志, 15 (6),657–680。
Winer,B. J .,Brown,D. R .,& Michels,M. (1991 年)。单因素实验设计与分析:完全随机设计。实验设计中的统计原则,第三版。马萨诸塞州波士顿:麦格劳-希尔公司,74–219 页。
Zar,J. H. (1996 年)。生物统计分析第三版。新泽西州上马鞍河。
人工智能中的访问问题
我们应该担心的不是工作的自动化,而是人工智能技术的可及性
T 何范式
1965 年,英特尔的联合创始人发表了一篇观察到一个奇怪现象的论文。每一年,每个集成电路的元件数量似乎都翻了一番。这意味着电路越来越小,越来越便宜,而计算速度越来越快。在接下来的几十年里,这一趋势将成为技术革命的基石。
四年后的 1969 年,一个由美国国防部资助的小组开始致力于多个网络的互联,以创建一个更大的网络。1990 年,这个项目导致了我们今天所称的互联网的诞生,通信革命由此诞生。
2012 年,ImageNet 挑战赛中的一项重大突破大幅提升了计算机视觉领域的性能。这种性能的飞跃是以技术革命(2012 年是 ImageNet 首次使用 GPU)和通信革命(长达数十年的机器学习研究国际合作)为前提的。计算机视觉社区的这一胜利很快转化为自然语言处理、生成任务、音频处理和其他多种任务的性能改善。
20-point performance jump in 5 years
2018 年,我们仍然在努力挖掘机器学习的巨大潜力。我们正在学习这对编程的未来意味着什么,并且在这个过程中发现了一个新的软件范例。开发 ML 密集型软件需要一个完全不同的工作流程,一系列新颖的技术和实践。特斯拉人工智能总监安德烈·卡帕西(Andrej Karpathy)说得好。
“神经网络不仅仅是另一个分类器,它们代表了我们编写软件方式的根本转变的开始。它们是软件 2.0。”
该领域的巨头、现任谷歌人工智能负责人杰夫·迪恩(Jeff Dean)认为,深度学习正在改变系统工程的格局。在 SysML 2018 主题演讲中,他指出:
深度学习正在改变我们设计计算机的方式。
问题是
在狭义的任务上,机器学习算法比专家表现得更好,劳动力市场自然会关注自动化。当深度学习在读取心电图方面比心脏病专家表现得更好,在检测肺炎方面与人类放射科医生不相上下,在识别对话语言方面几乎与人类一样好时,对教育和人力资源就业的急剧转变的担忧似乎是合理的,“工作的未来”似乎处于混乱状态,没有一份工作看起来不会受到干扰。
Source: Andrej Karpathy
但是这些关于自动化和随之而来的失业的观点是短视的。他们没有考虑到这些技术进步所创造的新工作。新的范式将优化置于编程的中心,这意味着调整超参数,设计有代表性的损失函数,确保干净准确的数据,并检查公平性。所有这些都从根本上背离了传统程序员的工作和思考方式。难怪福布斯认为人工智能领域严重人手不足,人工智能专业知识需求巨大。
T2:问题不在于自动化,而在于享受不到科技进步的好处。
也许我们不必担心自动化带来的失业的最好证据是过去 50 年美国经济的劳动生产率(每小时劳动的商品&服务产出)和生产率增长(长期劳动生产率)的趋势。虽然前者稳步上升,后者却在下降。事实上,生产率增长在全球范围内大幅下降。或许这其中最令人吃惊的暗示是虽然技术让我们的个人生活变得更好,但它并没有对劳动力市场的生产率增长产生大的影响。如果我们想想过去十年里手持设备对生活和个人生产力的影响,这是很有意义的。我们所做的工作,我们的生产力,都得到了提高。但是今天我们有更多的工作,而不是更少。所以失业并不是我们最大的问题。
另一方面,令人担忧的是美国普通家庭的收入。我们在技术上越进步,利益似乎就越集中在这部分人口中最上层的 20%身上。我们看到劳动生产率的提高,但事实是这种提高的好处并没有被广泛分享。一种天真的思考方式是,注意到上层 20%的人拥有现有的资本来实际执行和利用这些新的技术创新来为个人谋利。这导致了一种强大的复合效应,使技术成为富人变得更富、穷人停滞不前的手段。这是 AI 今天面临的接入问题。用几句话来说:
人工智能和自动化有可能扩大美国社会的社会和经济流动性差距,原因很简单,因为下层阶级无法获得成为新劳动力一部分所需的教育和技术。
解决方案
NimbleBox 是一个云平台,旨在将人工智能带给大众。它允许用户以比任何其他平台都更便宜的价格租用 GPU,并具有即使对于初学者来说也能让构建人工智能项目成为直观体验的功能。Nimblebox 采取的以教育为重点的方法来解决这个问题,这对于让新来者能够访问人工智能以及让有经验的用户很快轻松部署是至关重要的。
凭借直观的 UX 和反应灵敏的支持团队,NimbleBox 旨在实现人工智能的民主化。我们在这里帮助每个人更快更好地实现他们的人工智能目标。我们相信人工技术是软件历史上的决定性时刻,确保我们以包容和共享的方式分享这一进步的好处是一项集体责任。
这是我们的使命。我们希望你能加入我们的 NimbleBox.ai
PS:谢谢 Arjun Bahuguna 帮我写这篇文章:)
人工通用智能
我最喜欢的讲师之一莱克斯·弗里德曼(Lex Fridman)即将在麻省理工学院开设一门关于 AGI 的精彩课程(或者在这篇文章发表时可能已经开始了),我想就这个我已经阅读了几个月的主题写点东西。
“几乎所有从事人工智能工作的年轻人都会环顾四周,然后说——流行什么?统计学习。所以我会这么做。那正是科学的自杀方式。”
——2011 年,马文·明斯基在麻省理工学院开设名为“心智社会”的课程。
美国著名认知科学家、麻省理工学院人工智能实验室的联合创始人马文·明斯基从来不同意对 AGI 采取过于简单的方法,也不同意复制大脑的功能。但我们仍然不能否认深度学习在该领域带来的进步。大脑很有可能不做梯度下降之类的事情,但在此基础上破坏深度学习是不公平的。
在创造大脑的复制品时,有许多关于大脑的东西是我们不具备的。此外,深度学习肯定会被证明是创造真正智能机器的重要组成部分,但光靠它可能还不够。
可以说,本·高尔策尔作品背后的核心思想是绝大多数好奇的人很久以前就会想到的;通过使用认知协同的概念,有计划地将人的部分设计为 AGI 的组成部分,以创造接近人类的智能,如果不是与人类不相上下的话。但是没有人能够将这个想法变成现实…他做到了。有许多伟大的研究人员值得一提,比如马库斯·哈特(艾西)和汪裴(NARS)。
尽管存在缺陷,也可能没有谷歌、脸书和特斯拉等科技巨头提供的足够资金,但 OpenCog 对创造 AGI 的贡献无论如何都不能被忽视。
你猜怎么着?就连 Ben 的作品都用了深度学习!深度学习不能被抛弃的原因有很多。正如 Geoff Hinton 自己所说,有必要重新思考反向传播,但没有人能否认这是一个巨大的成功。也许有人会为深度学习,特别是反向传播提出一个更明智的替代方案,因为它在过多的应用程序中使用。
没有看过电影《Ex 玛奇纳》的人应该——
I)跳到下一段
ii)尽快看这部电影!
我清楚地记得艾娃奔向她自己的创造者内森去杀他的场景。它确实让观众不寒而栗。
这种事情已经在各种科幻电影中一次又一次地出现,也得到了该领域非常著名的人的支持,他们警告我们注意人工智能。如果我们的创造成为我们死亡的原因呢?这就提出了在机器人中包含共存和“仁慈”的需要,这样它们就不会害怕我们。但话说回来,有人强烈声称,今天的人工智能甚至还没有达到老鼠的智能水平。
我非常相信 Ben Goertzel 关于认知协同需要的观点。那是什么?它是设计为智能的不同组件的组合,以形成一个认知系统,其中它们将相互帮助来执行它们各自的任务,以便该系统能够被称为真正智能的,而不管它以前是否在现实世界中面临过特定的情况。
人们可以以迁移学习为例,其中只有最后几层被改变和训练,而模型的大部分保持不变。
人们也可以想象用它来完成几个需要预测的任务。基于系统的要求,可以训练模型来学习哪种情况需要使用哪种类型的最后层来比人类更有效地成功完成任务(因为如果不需要,那么嗯…有什么意义?)
Yann LeCun’s post about Sophia
我显然不能保证 Sophia 实际上有多真实,这个使用机器人的 Twitter 有多接近智能,它实际上执行了多少功能,而不是来自开发团队的人,但我真的很欣赏这个想法和为实现它付出的努力,不管最终产品和它的可行性。
既然提到了 Yann LeCun 的帖子,我还想提一下他和 Gary Marcus ( @GaryMarcus )那场著名的辩论。他回应加里观点的一句话,我个人认为是最重要的一句话
“AI 需要更多的先天机械吗?答案可能是肯定的,但也有可能,不像加里想的那么多。”
-扬·勒昆,费尔和 NYU
虽然 Gary 提出了一些非常有趣的观点供大家思考,但有些时候它们听起来有些极端。另一方面,脸书的艾导演非常冷静,非常理智地处理了所有的争论。
Ali Rahimi’s view on Gary Marcus’s Paper on drawbacks of Deep Learning
诚然,这两位备受尊敬的个人所同意的事情是当前全球人工智能状态的非常基本的问题,但 Yann LeCun 关于辩论主题的立场仍然是更可接受的,也是合乎逻辑的,而 Gary Marcus 则因他在最近的论文中发表的某些言论而受到批评。
One of the most well received views on Gary’s paper by Thomas Dietterich
我绝对没有资格去评论或抛出非理性的观点,或支持在我出生前几十年就已经诞生的伟大思想进程,但请把这些看作是某个一直密切关注该领域先驱作品的人的想法。
我只是相信这样一个想法,如果 AGI 在未来的某一天能够被创造出来,那么深度学习肯定会在它的正常运行中发挥重要作用。像 OpenAI 这样的公司激励我和许多其他人相信,投入数小时研究和思考人工智能的应用肯定会产生惊人的结果,这将彻底改变我们的生活方式。
它将是结合不同研究领域的东西,如神经科学、哲学、数学、物理、计算机科学等,它们将共同贡献于一部杰作,这部杰作将被证明是人类最伟大的创造。
事实上,人工智能领域分裂成不同的团体,他们相信以不同的方式接近 AGI 问题的解决方案,而且没有一个看起来是错误的。
这些团体(对 AGI 有象征性的或行为性的或任何其他的方法)有着不同的意识形态,并且在他们的方法中有相当多的缺点,需要以某种方式结合起来,每个团体都可以抵消另一个团体的缺点,这又把我们带回了认知协同的概念。你看,没有一个想法可以完全忽略。为成功实现 AGI 而编写的每一种方法、每一次尝试、每一行代码都很重要。
与此同时,即使是为各国使用 AGI 制定治理原则,也应该制定并集成到机器中,以便它们不会被用于错误的目的,这正是伦理人工智能的全部内容。
有几个类似这样的问题笼罩着 AGI 的概念,需要加以解决,以便在该领域实际取得更实质性和突破性的成果。让我们希望,如果 AGI 是可能的,那么我们都在正确的轨道上走向 AGI,如果不是,至少最终找到正确的方式走向人类和机器人共存的想法,让世界成为一个更好的地方,为我们和未来的几代人生活!
我分享了一些链接和视频,有兴趣了解 AGI 的人一定要看看
- 辩论:“AI 是否需要更多的先天机器?”(扬·勒昆和加里·马库斯)
- AGI——温柔的介绍
- 超智能——科学还是虚构?(埃隆·马斯克、戴密斯·哈萨比斯、雷·库兹韦尔和许多其他伟大的头脑)
- 麻省理工学院。S099:人工通用智能
你可能喜欢的其他文章—【https://medium.com/@raksham_p
请继续关注即将发布的更多关于人工智能的帖子!😃
敏捷营销堆栈
如果你在技术圈里呆过一段时间,你一定听说过敏捷这个术语。该术语起源于一种软件开发方法,专注于快速迭代、简化的沟通、灵活的路线图,以及快速轻松地完成产品版本、更新和发布的能力。敏捷主要是一种由过程和工具集支持的思维模式。这些过程和心态现在正被它们起源的开发人员圈子之外的人所采用。他们开始渗透到 B2B 营销部门,并带来了他们自己的一套工具,为敏捷营销栈奠定了基础。
如果没坏,为什么要修?
B2B 营销团队多年来一直使用相同的系统和策略,简单的事实是它们没有被破坏。敏捷的目标不是取代你的系统和策略,而是优化它们。
该流程的重点是减少时间浪费,减少基于数据的决策猜测工作,自动化重复流程,并提供实时性能指标。这些领域中的每一个都可以通过更新您的营销工具得到显著优化。我们称这套工具为你的营销栈。每家公司都会有一个适合其系统和需求的堆栈。在这篇文章中,让我们关注 B2B 营销团队的需求。
[## 什么是敏捷营销?-为什么 B2B 应该倾听- Mindbox 工作室
敏捷营销是传统营销过程的一种计算方法。敏捷营销重视灵活性…
mindboxstudios.com](http://mindboxstudios.com/agile-marketing%E2%80%8A-%E2%80%8Aand-b2b-listen/)
减少时间浪费
时间浪费是 B2B 营销组织中最大的问题之一。这是由长达一小时的会议、缓慢的电子邮件回复、低项目可见性以及严重依赖猜测的决策过程造成的。
在 Mindbox,我们试图取消所有的内部团队会议。我们这样做是因为面对面会议通常安排在 30-60 分钟,但实际上,只需要 5-10 分钟。我们在营销中采用了两种技术来改善我们的沟通。
首先是懈怠。这可能并不令人惊讶,因为大多数组织已经在使用 Slack 来改善内部沟通。我想重点说的是我们如何使用 Slack。这里有三种方法可以让你更灵活地使用 Slack:
1.每周更新——我非常喜欢发送高水平的每周更新,然后是我的项目经理发来的相应的行项目任务列表。它让我的团队从周一早上坐在工作间的那一刻起,就确切地知道如何优先安排他们的时间。我们将这些每周更新保存在公司范围的渠道中,以便我们的开发团队、高管和分包商都知道。我估计这个小小的纪律已经让我们每周的工作效率提高了 10%。
2.特定于项目的渠道——Slack 可能会迅速变成有史以来最混乱、最强大的交流平台。为了减轻这一点,我们创建了项目特定的渠道,防止团队成员被拖入与他们无关的对话。它还允许我们专注于特定的项目,跟踪项目资产,并拥有任何沟通或决策的统一历史记录。
3.直接消息与电子邮件——只要有可能,我都会使用 Slack 的直接消息功能,而不是发送电子邮件。由于 Slack 的即时通讯方式,发送收件箱中可能没有回复的快速消息变得更加容易。如果你使用 5 分钟管理风格,这也是一个很好的工具,它提供了一个不像电子邮件那么专业,但比短信更专业的沟通渠道。
我们用来交流的第二个应用是appear . in—appear . in 是一款基于网络的视频交流 app。你可以在几秒钟内旋转一个会议室,并将链接直接放入你的 Slack 频道。Appear.in 已经成功地创造了一个比 Google Hangouts 更可靠的产品,不需要登录,而且非常轻便。作为一个分布式团队,Appear.in 是我们成功的关键,我们喜欢它。
取消猜测工作
B2B 营销团队面临着大量的猜测。猜测是对时间的巨大浪费,因为当你完成了猜测,你仍然没有一条清晰的成功之路。猜测往往把自己伪装成直觉和感觉。它直接与敏捷方法相矛盾,并且通常以收入最高的人的观点结束。
敏捷营销团队用数据杀死河马牌。他们不花时间讨论想法,而是花时间查看数据,用事实支持他们的假设。当他们完成时,他们会做出一个清晰的决定,这个决定给了他们最大的成功机会。
我们的堆栈严重依赖于通过我们的营销自动化软件和二级应用程序(如 Google Analytics )收集的分析。我们跟踪一切,从链接点击到网站访问者和帖子表现。当我们探索新策略或弥补现有策略的不足时,所有这些数据都会被归档并提取出来。不要在数据收集的设置上吝啬,这一点非常重要。你可能不会全部用上,但是如果你没有它,你就根本用不上。
我们营销堆栈中的一些基本数据源包括:
用于转化跟踪的谷歌分析
用于入站链接跟踪的谷歌 UTM 构建器
用于行为分析的网站 cookies】
全部自动化
下一步是消除营销过程中的任何重复步骤。一遍又一遍的做同样的事情,不是敏捷。这就是营销自动化软件如此迅速被采用的原因。
像 HubSpot 、 Marketo 、 Infusionsof 、 Pardot 、 Drip 和 Eloqua 这样的营销自动化软件在敏捷营销栈中扮演着基础角色,使 B2B 营销团队能够根据用户交互发送自动化的电子邮件活动。然后可以对用户进行评分和培养,直到他们准备好接受销售代表的联系。
我们喜欢 Marketo、HubSpot 和 Infusionsoft。但是,选择正确的软件不应该掉以轻心。考虑组织的独特需求。我们可以通过 1 小时的免费咨询帮助您决定哪种营销自动化平台适合您。
当它发生的时候知道它发生了
敏捷营销栈的最后一块是访问实时营销分析。B2B 营销依赖于一个组织的能力,使瞬间支点。一个团队对实时数据的访问水平使得这些支点成为可能。我们非常重视为我们的团队和客户的团队构建分析仪表板。
敏捷分析仪表板的关键是数据的结构。我们重视图形和图表,因为当数据以更直观的格式组织时,我们可以更快地发现问题。为了实现这一点,我们已经将 DataDeck 添加到我们的营销堆栈中。
DataDeck 允许我们导入所有我们喜欢的分析和数据源,包括众所周知的困难的电子表格,只要它像 Google Sheets 一样托管在云中。我们也有机会与其他平台合作,如 PeriscopeData ,这是 B2B 组织的一个很好的资源,他们希望在他们的数据库中可视化他们的客户群,以及 Looker ,这是一个挖掘大规模关系数据库的强大工具。
最后
无论你的组织在哪个行业运作,在你的营销堆栈中选择正确的工具是建立一个敏捷组织的关键。一旦你有了一套可靠的工具,是时候审视你的流程和你在营销团队中根深蒂固的心态了。记住:敏捷主要是一种心态。这些工具只是让我们能够创建一个可复制的过程,大规模地实现这些心态。
你最喜欢的 B2B 营销工具有哪些?
这篇文章最初发表在 Mindbox 期刊上。
关于作者: 杰斯·威廉姆斯是一位年轻的企业家、丈夫、父亲、技术专家和 SaaS 营销专家。你可以在Twitter上关注他,在这里 了解更多关于他和他的项目 。
人工智能感知和响应框架:为高管和企业家寻找人工智能机会的方法
高管和企业家问我,他们应该对人工智能(AI)做些什么。我就这个主题发表演讲,我认为我已经为高管和企业家如何找到近期人工智能机会提供了一个框架。人工智能感知和响应框架将人工智能目前可以做的事情提炼为高管或企业家可以做的可操作的业务事情。
该框架将人工智能能力分解为三组盒子(为简单起见):
- 模式识别
- 预测
- 自动化
注意:第三项(自动化)不一定涉及人工智能算法本身,但它只是基于前两项(模式识别和预测)的结果可以采取的行动。
感觉:模式识别和预测
模式识别和预测被归入我称之为 Sense 的部分。在 Sense 部分,我们有您的数据输入、经过训练的模型以及可以推动洞察力和决策的输出。输入数据可能来自您当前的数据集、其他公司的数据集、传感器等。您可以获得的数据是基于您自己的业务,每个人都会有所不同。感觉部分(模式识别和预测)的目标是感知一些可以由人工智能模型解释的世界。模式识别(包括分类)和预测是 AI 相关模型现在能做的合理的、应用的事情。模型接受输入,并感知足够好的东西,从而得出见解和决策。
回应:自动化
另一部分叫做自动化。它在一个叫做“回复”的部分。这些是计算机可以基于来自模式识别的发现(洞察力和决策)和从模式识别和预测生成的预测数据自行采取(自动化)的(可选)动作。
使用框架
要使用该框架,您需要在 x 轴上列出 3 个部分,并在 y 轴上列出您的业务类别。我用了一个非常简单的例子,所有企业都有的两个通用类别:创收和运营效率(你可以用营销、销售、会计、运营、销售等。—任何对你有用的东西。)
现在,填写每个模式识别和预测框。只要有正确的信息,应用人工智能现在就可以做这些事情。现在,一旦这些框被填满——你可以在那里结束——你将拥有人工智能的有用用例,以便产生可以导致决策的见解。你会想你会寻找什么样的模式来产生更多的钱(例如),等等。这些是人工智能技术可以用来让你的业务受益的用例。然后,您也可以完成自动化框。通读模式识别和预测用例,并询问“接下来我们可以采取什么行动”。这将帮助你提出基于人工智能驱动的见解可以自动化的东西。
当然,围绕实施还有其他复杂因素。您可能会发现,为了创建您想要的软件,您需要清理旧数据或收集新数据。但是,这个框架将帮助你思考你能做什么以及它能如何帮助你。
建立感知和响应系统
最终,我们将建立一个感知和回应的世界。我可能会在以后的文章中写更多的内容。本质上,无论我们谈论物联网还是任何业务,我们都在谈论建立学习系统。具有模式识别、预测、观察和输出的输入。然后,在一个永无止境的学习循环中,从头再来。通过观察(感觉)理解输出,循环再次开始。同时允许人类输入/洞察,同时提供其自己洞察。我们所有的公司都在学习系统。有些人将来会做得更好。人工智能技术可以帮助所有企业,因为它非常适合系统需要理解模式或做出预测的情况。这两者都是让系统主动学习的关键。
我认为这个框架对大企业很有用,可以产生很多内部人工智能驱动的项目,可以给你的公司带来价值。此外,企业家可以使用这种模型来产生新的人工智能创业公司,通过将你从客户那里观察到的需求与人工智能可以提供的能力进行匹配,来满足客户的需求。所以,祝你好运,构建你自己的人工智能感知和响应用例。
在 Twitter 上关注我: @willmurphy
多产上关注我:@威尔
人工智能的冬天结束了。原因如下。
除非你生活在岩石下,否则你可能已经注意到人工智能(AI)越来越多地出现在技术对话和商业战略中。我甚至注意到我的朋友们对“认知”他们的应用程序越来越感兴趣。
很容易看出为什么。每个人都知道自动驾驶汽车革命,如果你在圈内,你就会知道这主要是由于人工智能的进步,特别是“机器学习”,这是一种用于在软件应用程序或运行软件的机器人中实现人工智能的策略。稍后将详细介绍。
我们先退一步讨论 AI。机器拥有人工智能意味着什么?
本质上,这是一个简单的想法。人工智能是机器以我们认为“智能”的方式执行任务的更广泛的概念。
而且,
机器学习是人工智能的一个当前应用,它基于这样一种想法,即我们应该让机器访问数据,并让它们自己学习。
有些人听说过“人工智能”这个术语,甚至早在 70 年代就有一些人工智能应用的经验。大多数人对人工智能的熟悉要归功于游戏。当你没有其他人一起玩的时候,在视频游戏中玩 AI 是很常见的。用户熟悉的其他人工智能应用程序包括拼写检查器等工具和其他有用的系统,这些系统似乎部分智能地帮助人类使用定义良好的规则完成任务。然而,许多这些“老人工智能”是在我们称之为“专家系统”中开发和实现的。这意味着,要将智能编码到程序或软件中,我们需要一个专家,比如在谈论拼写检查时需要一个语言专家,或者在谈论帮助医生诊断病人的系统时需要一个医学专家。这种人工智能系统在 80 年代和 90 年代非常流行。
不幸的是,这些类型的人工智能专家系统存在一个问题。任何使用过通过专家系统方法实现的人工智能的人都可以证明,这些系统在处理不常见的场景或甚至连专家都不精通的情况下经常出错。人工智能在这些情况下毫无用处,修复这些系统需要用新的专家信息重新编程。专家系统的另一个缺点是建造成本非常高。它需要为每一个特定的领域找到一个专家,这个专家能够向程序员清楚地说明他们领域的复杂性,以及应该在何时以及为什么做出任何给定的决定。当编写确定性算法时,很难对这些类型的决策进行编码(确定性算法是一种给定特定输入,将总是产生相同输出的算法,底层机器总是经过相同的状态序列)。
出于这些原因,人工智能研究人员需要发明一种更好的方法来赋予机器“智慧”。
这就是机器学习(ML)发挥作用的地方。当谈到 AI 研究时,许多人都惊讶地发现 ML 实际上是一个相对古老的话题。研究人员早在 80 年代就明白,专家系统永远不会创造出能够驾驶我们的汽车或在国际象棋或危险游戏中击败最优秀的人类的人工智能。这是因为诸如此类的问题的参数变化太大,随着时间而变化,并且基于应用的不同状态而具有许多不同的权重。此外,一个问题有许多属性无法直接观察到,因此无法直接编程到应用程序逻辑中。
机器学习通过开发能够基于可访问的数据进行学习和决策的程序来解决这个问题,类似于人类的认知,而不是对机器进行编程以执行确定性的任务。因此,程序不是做出确定性的决定,而是依靠概率和概率阈值来决定它是“知道”还是“不知道”某件事。这就是人类大脑在我们生活的复杂世界中做出决定的方式。
例如,如果你看到一朵看起来像玫瑰的花,你说,“是的,这是一朵玫瑰,”你实际上说的是,“是的,根据我以前的知识(数据),我认为玫瑰看起来像什么,我被告知玫瑰看起来像什么,我 97%确定这是一朵玫瑰。”
另一方面,如果你看到了一朵鸢尾花,而你以前没有见过多少,或者在你的记忆中没有太多关于鸢尾花的描述,你可能会说,“我不确定那是什么花。”你的“置信区间”低于你认为可接受的识别这朵花为鸢尾花的阈值(让我们称之为 30%确定它是鸢尾花。)
基于概率做决定是我们大脑最擅长的。如果我们能以同样的概念方式来模拟一个计算机程序,那么对人工智能的影响将是无限的!
好吧,你现在应该问的问题是,“如果我们在 70 年代和 80 年代就知道这些,那为什么 ML 现在才流行起来?”
我对此的回答类似于科学界刚刚验证了爱因斯坦多年前在理论物理中提出的引力波的存在。我们只是没有机器或工具来验证或否定他的理论,这是超前的,它的实际应用必须等待。
尽管多年来我们已经理解了机器学习的数学模型,但在 20 世纪 70 年代和 80 年代,让机器学习成为现实(而不是理论)所需的基础设施、技术和数据并不存在。然而,现在已经不是这样了,“人工智能冬天”可能很快就要结束了。
创建实用的机器学习应用程序需要三种基本的“原材料”。来说说他们吧。
1.廉价并行计算
思考不是一个同步的过程。从本质上来说,思维就是模式识别。我们不断地看到、感受到、听到、品尝到或闻到激活不同神经元簇的模式。数百万个这种“模式识别神经元”将低级模式传递给下一个神经网络。这个过程一直持续到我们到达最高的概念层和最抽象的模式。
每个神经元可以被认为是一个独立的模式识别单元,基于它从其他神经元获得的输入(识别的模式),我们最终可以做出高水平的决策。我们希望以类似的方式来模拟计算机程序。以类似大脑生物结构的方式模拟计算机程序被称为“人工神经网络”。多合适啊!
这种类型的数据处理的并行化对于构建模拟人类思维的系统显然是至关重要的。这种类型的能力在 80 年代是不可用的,只是最近变得足够便宜,可以在机器学习解决方案中实用。
为什么是现在?
一个词。GPU。
好吧,也许那是三个字?图形处理单元(GPU)变得流行起来,因为它们能够为视频游戏、游戏机甚至手机处理高质量的图形。图形处理本质上是并行的,这些 GPU 是以利用这种计算类型的方式设计的。随着 GPU 变得流行,它们也变得更便宜,因为公司相互竞争以压低 GPU 的价格。没过多久,人们就意识到 GPU 可能会解决困扰研究人员几十年的计算问题。这可以为他们提供构建人工神经网络所需的必要的并行计算。他们是对的,GPU 成本的降低使公司能够购买大量的 GPU,并将其用于构建机器学习平台。这将大大加快我们利用高度并行化的神经网络构建的速度,以及我们能够处理的数据量。说到数据…
2.大数据
这个大数据,那个大数据…
我知道每个人都听说过对大数据的大肆宣传。然而,这到底意味着什么呢?为什么现在在这里?之前在哪里?“大”有多大??
事实是,当我们谈论大数据时,我们实际上是在说我们每年都在捕获、处理和生成更多的数据,而且这些数据正在呈指数级增长。
这很重要的原因是,为了训练人工大脑进行自我学习,你需要大量的数据。婴儿每年接受和处理的视觉数据量比 80 年代数据中心拥有的数据量还要多。然而,这甚至不足以训练机器。那是因为我们不想等一年才学会初级视觉!为了在人工视觉中训练计算机,我们需要的数据比一些人一生所能吸收的还要多。这终于成为可能,因为存储和记录如此多的数据是廉价的,快速的,无处不在的,由一切产生的!
我们智能手机上的数据量比 80 年代大多数巨型计算机系统存储的数据量还要多。数据和内存存储,它已经增长到史诗般的比例,而且没有任何迹象表明会很快放缓。这些数据对于智能机器的实现至关重要,因为它需要一个问题的许多实例来推断概率上正确的解决方案。大数据是这些计算机需要学习的知识库。人工智能可以访问的所有知识都是我们收集和提供给人工智能越来越多的数据,并让机器从数据中的潜在模式中学习的结果。
当计算机开始识别人类从业者从未见过的模式时,人工智能的力量就来了。机器将理解数据并识别数据中的模式,就像我们的神经元开始识别我们以前见过的问题的特定模式一样。这台机器相对于我们的优势是通过电路发送电子信号,这比我们大脑中突触上的生物化学信号快得多。如果没有大数据,我们的机器将没有任何可以学习的东西。数据集越大,人工智能将变得越聪明,机器将学习得越快!
3.更好/更深入的算法
正如我之前提到的,研究人员在 20 世纪 50 年代发明了人工神经网络,但问题是,即使他们有计算能力,他们仍然没有有效的算法来处理这些神经网络。一百万或一亿个神经元之间有太多天文数字般巨大的组合关系。最近,这一切都改变了。这一过程中算法的突破导致了新型人工网络的出现。分层网络。
例如,以识别人脸这一相对简单的任务为例。当发现神经网络中的一组比特触发了一种模式——例如,一只眼睛的图像——结果就是(“这是一只眼睛!”)被移到神经网络中的另一个级别,用于进一步解析。下一级可能会将两只眼睛组合在一起,并将有意义的块传递给另一级层次结构,使其与鼻子的模式相关联。要识别一张人脸,可能需要数百万个这样的节点(每个节点产生一个计算结果,提供给周围的其他节点),这些节点堆叠起来有许多层。2006 年,当时在多伦多大学的 Geoff Hinton 对这种方法做了一个关键的调整,他称之为“深度学习”。他能够从数学上优化每一层的结果,这样随着层的增加,学习积累得更快。几年后,当深度学习算法被移植到 GPU 时,它们的速度大大加快了。单靠深度学习的代码不足以产生复杂的逻辑思维,但它是当前所有人工智能的必要组成部分,包括 IBM 的沃森;谷歌的搜索引擎 DeepMind 和脸书的算法。
这场廉价并行计算、更大数据和更深入算法的完美风暴造就了人工智能 60 年来的一夜成功。这种融合表明,只要这些技术趋势继续下去——没有理由认为它们不会——人工智能就会不断进步。
感谢阅读!我在业余时间写了这些帖子,如果你喜欢的话,对博客最大的补充就是分享它!
此外,您可能有兴趣订阅我在 JasonRoell.com 的博客,我在那里发布了我认为普通程序员甚至技术爱好者都感兴趣的技术主题。
我想亲自感谢凯文·凯利为这个职位的灵感。我强烈推荐阅读他的书《不可避免的》,他在书中更详细地讨论了这些以及更多的过程。
来源:
不可避免的:理解将塑造我们未来的 12 种技术力量。-2016 年凯文·凯利奥运会
如何创造思维——雷·库兹韦尔
http://www . Forbes . com/sites/Bernard marr/2016/12/06/人工智能与机器学习的区别是什么/#7ed065c687cb
算法抛绳器
数据科学和分析团队中有一类人。这些人往往需求量很大,能赚很多钱,而且当他们发表意见时往往不会受到质疑。他们带着一套对某些人来说很有启发性的工具进来。公司会吹嘘他们的团队中有多少人,他们在做多少项目。他们将谈论他们拥有的统计背景,以及他们花了多少钱来购买这些人想要的工具。他们被称为算法投递员,是数据科学领域最危险的人。
一个算法抛砖引玉者是一个拥有制作算法技能的人。他们可以来自统计数据、新的数据科学计划,或者只是对深度学习或机器学习有很好的理解。问题是,就他们能带来什么而言,这就差不多了。然而,他们往往对自己的技能非常有信心,这种信心有助于他们获得牵引力。因为他们非常直言不讳,所以他们往往会引起那些真正不明白是什么让数据科学很好地工作的高级领导的注意。就像在老西部片里一样,这些算法投递员走进办公室,开始用算法扫射这个地方。他们不会杀死任何人,但他们可以轻而易举地毁掉你的生意。他们会上网找到一些开源工具,并声称他们需要它,但你可能会发现该工具在六个月内没有任何贡献。他们会要求最新的工具,不是因为你需要它,而是因为它很酷,他们需要它来填充他们的简历,这样他们就可以在你弄清楚他们造成了什么损害之前离开。他们不遵循流程来完成工作,事实上,他们甚至可能承认,他们只是把东西往墙上扔,看看有什么粘在一起。这就是问题所在,数据科学需要成为一门科学才能很好地工作,当你只是吐出算法时,它就不是一门科学。事实上,如果任其发展,它可以提高一个公司的技能。
在过去的几年里,我目睹了这种情况的发生。公司会雇佣会编码和制作算法的人,并付给他们 20 万美元或更高的年薪。如果你像我一样生活在中型市场,20 万美元对于一个没有什么经验和知识的人来说是一大笔钱。问题是,他们实际上并不做数据科学,尽管这是他们拿工资要做的事情,但他们做的事情在未经培训的局外人看来像数据科学,但实际上不是。他们经常只是把东西往墙上扔,希望有东西粘在墙上,这不是科学,如果你打算继续做生意,这也不是经营你企业的好方法。但是这些人在数据科学社区横行霸道,引发各种问题。
本质上,这是因为在许多公司中,数据科学不是科学,这些算法抛砖引玉者还没有找到如何以实际推动业务的方式解决问题。因此,他们可以随心所欲。你会让金融做任何合法的事情吗?做自己想做的事的自由;自负和缺乏高层领导经常导致项目无法完成,成本严重超支。当这些成本超支需要支付时,其他团队通常会以裁员作为代价。但公司一直要求有更多这样的算法抛绳器,因为他们不知道自己不知道什么。
一个真正的数据科学家实际上做实验,知道如何有一个假设陈述,并在他们做任何工作之前创建一个。其中一个算法抛手曾经跟我说过,他们在搞清楚工作,能说出它的意思之后,会做一个假设陈述。事情不是这样的。数据科学实际上需要是关于科学的。测试想法,验证想法,跟踪结果,尽可能地阐明这些结果的意义。不仅仅是制造算法和自我炫耀,这不是数据科学。
另一个方面是高层领导。数据科学通常位于分析或 IT 领域。大多数 CIO 不懂数据科学,他们懂软件,不一样。是的,数据科学确实涉及编码,但这并不意味着它等同于软件开发。一些分析型领导者知道传统的 BI,同样,不一样。大多数传统的 BI 团队只做报告,而数据科学需要更主动地开展工作。BI 没有错,但是我们不要把两者混为一谈。数据科学的领导地位非常新,很少有人知道。你能做的最好的事情实际上是诚实你不知道并且去学习它。数据战略和数据科学领导力对任何公司都至关重要。一旦你有了好的领导,你就不会雇佣一个算法抛砖引玉的人,你会省去很多头疼的事情。典型的例子:
我曾经做过一个项目。一些算法抛砖引玉者花了数年时间研究一个看不到尽头的模型。他们只是不断增加项目,高管们认为这很棒,因为他们听到了他们不理解的统计短语,并认为这意味着事情正在完成。但唯一被修改的是银行账户。算法投掷者想要新的工具,因为他们 6 个月前需要的工具现在还不够好,当然这不是他们的错。他们需要更多的人,当然就像他们一样。他们没有路线图,没有一个单一的截止日期,事实上,其中一个人吹嘘他从来没有按时完成任何事情。他们一年花掉了 500 万美元,并计划每两年翻一倍,但没有任何产品在收入或利润方面赚钱。让我们将其与拥有使用数据科学方法的实际数据科学家的团队进行比较。同一家公司的另一个团队拥有数据领导权、战略、期限和时间表。他们在不到 6 个月的时间里创造了价值 1.5 亿美元的产品。你想要哪个?如果你想要结果,不要雇佣算法抛绳者。
支付的算法化
算法将如何改变支付行业
Algorithms…
就在不久前,首席执行官和大型银行还相信,银行的位置永远是服务客户所必需的。然而,在过去的十年中,我们已经看到了数字银行的出现,这些银行从来没有也可能永远不会拥有物理位置,但仍然设法扩大了他们的用户群,并增加了包括保险、抵押贷款和贷款在内的附加服务。
在支付行业,我们看到像 Chase 和 First Data 这样的公司统治了四十多年。然而,就像银行业的数字化迫使现任者改变他们的战略一样,支付的数字化使 WorldPay、Vantiv 以及最近甚至 Stripe、PayPal/Braintree 和 Adyen 等公司占据了很大一部分市场份额,不是通过专注于传统业务,而是专注于已经发展到让传统业务黯然失色甚至破产的初创公司。想想百视达对网飞,出租车对优步,或者传统商店对亚马逊。
Market Cap of Amazon versus Traditionals 2006 versus 2018
但随着越来越多的企业认识到数字是新的传统,我经常会问支付行业的下一步是什么?
就像在 20 世纪 70 年代和 80 年代对采用计算机和数据库持开放态度的公司,或者在 20 世纪 90 年代和 21 世纪初互联网泡沫破裂后理解互联网将成为游戏规则改变者的公司一样,我相信那些理解算法化将改变行业并积极投资于它的公司,最有可能在 2010 年和 2020 年成为幸存者。
流程的数字化
为了理解什么是算法化,我们需要两步回到传统的业务流程。数百年来,传统的业务流程是由人们创造产品或提供服务的劳动以及伴随而来的支持业务流程组成的。
例如,提供医疗服务的医生会有办公时间,在那里病人可以走进来或者预约。传统上,登记病人、更新他们的档案或写处方的过程都是用手写在纸上完成的。随着这些过程的数字化,计算机进入了医生的办公室,文件以数字方式存储,预约在数字日历中进行,处方通过电子邮件发送给药剂师。
直到今天,企业仍在通过开发移动应用程序或为客户提供基于云的解决方案来改善流程的数字化,以更好地访问或存储来自实际业务流程的数据。
算法化
当我们谈论算法化时,我们谈论的是使用数字化标签数据的过程,这些数据作为数据集存储在数据库中,并使用自动化过程来创建用户可以从中获取信息的分析。大多数公司都经历过这个过程,但这只是算法化的第一步。每当数据集(N)可以用于创建用户从中获取信息的分析时,下一步就是使用机器学习和人工智能来创建新的过程(N=N+1),这本身就提供了新的数据集,从而完成了算法化循环。
支付服务提供商示例
举例来说,设想一家支付服务提供商每天处理数百万笔交易。商家提交的每笔交易都包含与交易相关的信息,如 PAN(个人账号)、CVC(卡验证码)、截止日期、客户姓名和电子邮件地址。通过浏览器,PSP 能够收集附加数据,如日期和时间、设备指纹、浏览器类型和版本、IP 地址和一些其他数据点(N)。
随着交易被处理,它们被存储在数据库中。大多数 PSP 将使用这些数据为他们的商家提供特定一天的交易的标准报告。有些人甚至会汇总数据以提供数据摘要。如果他们想变得更有创意,他们会开发可以通过 UI 访问的仪表板和图表,以显示事务如何随着时间的推移而进展。
随着计算能力、云计算和分布式存储技术的进步,包括 PSP 在内的许多公司都在尝试改进现有流程的方法。因此,举例来说,前面提到的 PSP 可以决定研究是否大量的历史数据可以帮助他们防止即将到来的交易欺诈。通过使用机器学习和人工智能,数据科学家可以创建一种算法,能够使用交易中的许多变量,并预测新提交的交易存在欺诈的可能性。
基于卡的支付的伟大之处在于,持卡人可以在特定的时间内对交易提出异议。每当欺诈性交易被报告时,发行者向该方案发送消息以拒付交易。每当 PSP 接收到这个信息,他们就能够把它存储在他们的数据库中。这使他们有能力学习他们最初预测的准确性。通过使用人工智能,他们可以调整原始算法,通过增加或减少算法中考虑的变量的权重来提高得分,实际上创建了一个新的过程(N=N+1)。
算法化将如何影响支付?
上面的例子只是算法化如何用于改进现有流程的一个用例,关于上面的例子,有趣的是,这是大多数欺诈解决方案多年来处理该问题的方式,但是欺诈者也变得越来越聪明,这意味着欺诈仍然会发生。
但是支付不仅仅是防止欺诈。成本、转换、连接、计费和支出是新的 PSP 能够使用算法来发挥作用的一些领域。随着越来越多的公司开始习惯于 PSP 的商品化,作为 PSP 保持成功的唯一方法不是专注于减少欺诈或降低每笔交易的成本,而是展示 PSP 能够为你带来更多业务的价值。
销售人员比财务部门更受欢迎的原因是,创造更多的收入等于增长,而降低成本可能会提高利润,但不会增加收入。
智能采集路由
相同的交易数据可用于基于性能、功能或价格优化获取途径。一个很好的方法是实现多臂 bandit 算法,这是一种“更智能”或更复杂的 A/B 测试版本,它使用机器学习算法来动态地将流量分配给表现良好的变体,同时将较少的流量分配给表现不佳的变体。通过连接多个收单机构,PSP 可以通过将交易路由到收单机构来改善他们的商户结果,收单机构为他们提供该商户的最佳结果,最好是性能、价格或功能。
动态 3D 安全
通过额外的两步验证措施,如 Visa 验证或万事达卡的 3DSecure,许多 PSP 仍然会看到高下降率,因为发行商要求两步验证交易。通过使用决策树学习,PSP 可以预测交易是否需要路由到 3DSecure 页面进行额外的两步验证,或者继续传统流程是否会导致成功的交易。
不要被别人的想象力所限制
当然,使用支付中可用的交易数据来提高商户绩效还有许多其他方式。PSP 将能够获取几十年来生成的相同数据,并思考如何通过使用今天可用的工具来改进流程,以创建更适合甚至尚不存在的商家和商业模式的 PSP。
感谢阅读;),如果你喜欢它,请点击下面的掌声按钮,这对我意义重大,也有助于其他人了解这个故事。让我知道你的想法,联系推特或 T2 的 Linkedin。
强化学习的惊人影响
我认为今天有一些技术将会大规模地重塑我们所知的社会面貌。如果你关注我的帖子,你会知道我认为区块链科技在这方面是一个很好的竞争者。我认为 CRISPR 和基因疗法将会极大地改变医疗保健。但也许我最确定的技术是“人工智能”(这不是一个我真正喜欢的术语,但出于本文的目的,我们将使用它)。
更具体地说,我认为机器学习领域的许多进步正在让学习算法变得越来越复杂,这将彻底改变我们周围的世界。
深度学习已经开始在那里取得进展。我认为我们实际上处于 DL 的初级阶段。但是我最感兴趣的一种方法是强化学习。
这是一个我仍在了解自己的领域,但它是一个我们将在我们的金融科技初创公司中积极使用的领域,它已经证明了它的巨大威力(在 Alpha Go 中击败最优秀人类的算法是一个 RL 算法,在 DoTA 中击败最优秀玩家的算法也是如此,如果我必须打赌,我会打赌很多自动驾驶汽车公司都在使用它)。
如果我必须总结 RL 真正擅长的是什么,我会说这是一种在极端不确定性面前做出最佳长期决策的伟大方法论。我知道这有点模糊,但仔细想想,这也是一个非常有力的说法。
它的模糊性说明了它的普遍性。传统上,只有人脑真正擅长的事情现在由算法来处理——这种算法可能能够避免偏见和主观性,并能够接收大量数据。
RL 也让我们离通用人工智能的世界更近了一步。它开始非常非常地模仿我们大脑权衡决策的方式。
这与构成深度学习网络的“布线”架构相结合,开始看起来有点类似于大脑的硬件布线和大脑做出决策的方式。
这是一个令人难以置信的令人兴奋的领域,我期待着很快在一个更好的投资管理产品中实现。
古代游戏与人工智能
对于人工智能和人类来说,游戏都是极好的训练工具。让我们一步一步地了解如何编写游戏,训练人工智能机器人,并确定最有效的玩家。一路上,我们了解我们选择的游戏。
由马特·达沃利奥 ( GitHub )和埃里克·兰根博格 ( GitHub )。
曼卡拉
出于我们的目的,我们将利用一个非常古老的游戏。
Mancala (Oware)
曼卡拉的起源可以追溯到 6 世纪。多年来,这项运动有了许多变化。本文将使用西方世界流行的 Oware 版本。
Mancala UI
曼卡拉游戏棋盘由 14 个盘子组成,其中两个是得分盘,另外 12 个在两个玩家之间平分。游戏开始时,在 12 个非得分的盘子中各放四颗石头。一个玩家从他们的六个包含石头的盘子中选择一个来移动。被选中的盘子里的石头都被捡起来,然后每颗石头被一次一颗地放入下一个顺时针运动的盘子里。可以在十二个非得分盘和当前玩家的得分盘中各放一块石头。对方的得分盘会被跳过。游戏在玩家之间交替进行。当一名玩家得分达到 25 分或更多时,游戏结束。
还应用了两个附加的通用规则。当一个玩家的移动导致最后一块石头被放入得分盘时,他们可以进行另一轮。如果满足两个条件,就会出现捕获规则:玩家在移动中掉落的最后一块石头落在当前玩家这边的空盘子中,并且在对手那边的相邻盘子中至少有一块石头。在这种情况下,当前玩家将获得最后一颗掉落的石头以及对手盘子中的所有石头。
游戏状态和动作
曼卡拉的棋盘由 14 个盘子组成,每个盘子可以包含任意数量的石头。这就形成了一个简单的数组< int > 表示的棋盘。该状态的唯一其他部分与当前玩家回合有关。单个布尔跟踪该信息。额外注意:这个状态是马尔可夫:一个无记忆系统,其中所有相关信息都包含在当前状态中。
可行的行动是从 12 个可能收集石头的盘子中选择一个重新分配。在每一回合中,玩家只能在棋盘上自己的一边移动,限制在六个选项之内。此外,只能选择有石头的菜肴。
曼卡拉是一种以完美信息为特色的游戏,比如井字游戏、国际象棋或围棋。因此,代理的状态视图总是完整的,并且他们被交给完整的游戏来做出决定。
代理人
代理只是一个在环境中做出选择的系统。本文将按照复杂性的大致顺序逐步介绍尝试的代理。提供的伪代码涵盖了要点,但是访问主库获得适当的细节。
随机代理
让我们检查一下基本系统:随机代理。
随机代理只是查看可用的选项并随机挑选。虽然不是很大的挑战,但这个相当于身份函数的人工智能可以作为一个很好的基线。在未来,任何代理的第一个问题是:它能打败随机机遇吗?
最大代理
由于曼卡拉缺少随机成分,任何一个动作的结果都可以被精确预测。最大值代理计算每一个可能的移动的分数,并选择具有最高收益的选择。这是一个专家代理,意味着逻辑来自人类书写的规则。
确切代理人
来自 Max 代理的增强利用了 Mancala 中的重复移动规则。通过支持不放弃回合的行动,该代理可以利用在回合中增加领先优势。精确代理搜索的第一个移动是任何移动,其中一个洞中的石头数量与玩家得分洞的距离匹配。这将允许玩家进行另一次移动。如果有一个以上的洞符合条件,将选择最靠近得分孔的洞。这允许球员多次使用这种情况,因为更远的握杆会超过更近的球洞。
如果没有符合条件的可能的移动,代理将退回到最高的可能得分。
最小最大代理
最小最大代理是一种技术,它在一定深度探索可能的行动,并选择具有最大期望结果的路径。
代理遍历代表每个树深度的选择的大树。当模拟给予代理人控制权时,代理人将分数最大化,而当对手控制时,代理人将分数最小化。这个名字来源于这个模式。当显示游戏状态时,代理建立一个代表树,并播放为当前玩家产生最高分数的根节点。由于移动的次数随着深度的增加呈指数级增加,这个代理需要大量的开销。
Alpha-Beta Pruning Example [2]
Alpha-beta 修剪通过减少遍历树时搜索的分支数量来缓解这个问题。如果代理意识到路径不可能比先前观察到的选择执行得更好,则放弃对分支的评估。通过遍历,存储了两个变量:alpha,玩家在分支中保证的最高分,和 beta,对手保证的最低分。在最大化级别的遍历过程中(代理正在运行),如果节点不增加 alpha,则修剪分支,代理继续运行。相反,在最小化级别上,如果 beta 不降低,则节点被放弃。对于我们选择的深度,观察到的性能提高大约是一个数量级。
蒙特卡罗树搜索代理
蒙特卡罗树搜索 (MCTS)最近在双人游戏中成为一种流行的方法,这主要是由于 AlphaGo 机器人的成功,它作为一个组件包含在内。MCTS 是最小最大树搜索和阿尔法贝塔剪枝的进步。
代理构建了一个类似的最小最大树,但是一旦达到深度,代理随机地完成游戏并记录输赢。实际上,MCTS 用随机的输赢结果代替了最小最大值的适应度函数。经过多次迭代后,最终结果对有利路径的评分更高。由于游戏的大状态空间,代理需要大量的迭代来调查足够的可用移动,即使在浅的深度。
Kocsis and Szepesvári’s score for selecting nodes [3]
在这些迭代中,记录每个可能节点的分数,以将所选节点的值制成表格。随着每次迭代的执行,代理通过树反向传播结果以更新节点分数。
q 学习代理
Q 学习是一种强化学习方法,用于估计每个状态的动作值(Q)。实际价值来源于设计者如何构建奖励。除了提取状态的典型任务(通常比这个曼卡拉例子更复杂),设计者还必须选择系统何时奖励代理以及奖励多少。一个简单的策略可能是对感知到的有利位置进行奖励,而不是最终想要的结果。然而,大多数情况下,让代理学习并在达到最终目标时给予奖励是有益的。对曼卡拉来说,目标是赢得比赛。
Q Values — Value of Actions given current state. [1]
简而言之,Q 函数估计代理人在给定状态下期望从一个行为中获得多少回报。
有多种方法可以发现系统的 Q 值,例如 SARSA(状态-行动-奖励-状态-行动)。通过遍历状态、动作和下一个状态,代理不断更新对奖励的估计。对一个国家的一些访问可能会基于代理人或环境(在曼卡拉的例子中,环境是规则和对手代理人的组合)的后续行动而导致不同的回报。因此,在 Q 函数收敛于正确的奖励值之前,需要多次通过。
Example Updating Q Values — [1]
但是许多应用程序都受到这些方法的影响,因为状态/动作空间非常大。对曼卡拉可能的状态的粗略估计是上限为 12⁴⁸ (12 个可玩的盘子,48 个可用的石头)≈10⁵⁰——这太多了,无法探究。有几种方法可以避开这个问题,下面详细介绍一些更成功的版本。
曼卡拉的基本 Q 学习尝试包括通过逼近每个盘子里的石头来压缩状态空间。注意盘子是否是空的将状态空间减少到 12,只有 4096 种可能的状态,很容易探索。结果很糟糕:这种国家表述太不精确了。这种状态表示法忽略了太多的细节。类似的分解状态的方法失败了,并再次将所需的探索路径的数量推到合理的计算之外。
深度 Q 学习代理
深度 Q 学习是一种流行的技术,利用强化 Q 学习和深度神经网络来表示估计的动作值(Q),消除了状态/动作表。流程大体相同,但进行了重组,以最大限度地提高网络效率。 <状态、动作、状态 _ 下一个、奖励> 的体验重放存储器被不断更新和采样,以便训练网络。
常见的技术包括使用卷积神经网络(CNN)来分析作为状态输入的原始帧。一个小的 CNN 被训练成以 6x2 灰度图像的形式抓住板上的图案。
异步优势行动者-批评家代理
A3C 代理是一种策略评估方法,它运行并行代理,而不是经验重放。三个网络协同工作:输入、行动和批评。输入网络将状态转换到嵌入空间,策略网络给出可用移动的概率分布,价值网络描述当前状态的回报。
A3C Networks
多个代理同时使用这个共享模型运行游戏,并根据行动的回报结果更新策略和价值网络。除了随着每个额外的线程更新模型而线性加速之外,不同的游戏不太可能收敛到相似的最小值(正常的演员-评论家方法的常见问题)。
结果
特工们对比了一个简单的流程:玩曼卡拉!
代理人的每一个组合都被测试了 500 场游戏,每一场游戏都以不同的种子开始,以允许随机因素达到平衡。特工们甚至自己打自己。为了简洁起见,省略了一些表现不佳的代理。
Values are % of wins for Player 1 vs Player 2
代理性能大致符合复杂性:随机代理最差,A3C 代理最好。专家代理在对抗不太专业的代理时比 RL A3C 代理表现得更好,而 A3C 代理避开了最好的专家代理。
请注意,代理人相对于他们自己的对角线总是倾向于第一个玩家——曼卡拉拥有非常强大的先发优势。MinMax 作为第一玩家赢了 62%对 A3C 的比赛,但作为第二玩家只赢了 19%。假设他们交易先发优势,A3C 将赢得 71.5%的比赛。最先进的强化学习技术表现良好。
这并没有贬低专家代理:这些竞争,既不需要昂贵的培训,也不需要装载大型模型。精确代理只需要几行代码,是完成计算最快的代理之一。相比之下,当搜索更大的深度时,MinMax 很容易变得不可行,而 A3C 需要加载模型(需要 GPU 和相关的库)。对于大多数人类玩家来说,Exact 是一个可怕的对手,并且不需要太多的依赖。
建于弗吉尼亚大学的数据科学研究所。
参见 GitHub 上的代码。
由马特·达沃利奥 ( GitHub )和埃里克·兰根博格 ( GitHub )。
参考
[1]https://en.wikipedia.org/wiki/Q-learning
[2]https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning
[3]https://en.wikipedia.org/wiki/Monte_Carlo_tree_search
基于人群的餐馆评论的反民主化
我完全赞同过去 20 年技术爆炸为发达国家所做的一切。直接——它带来了效率,让我们的生活更轻松,让我们更快地得到东西,甚至帮助我们活得更久。间接的——也许它最丰富的副产品已经在我们看待书呆子、内向者、书呆子和一般社交笨拙者的方式上带来了一场非常激进的改革。至于不发达国家的技术进步,我倾向于说,他们既无法跟上同样的步伐,也没有深远的潜力。我的意思是,上一次我费心去检查的时候,小额金融贷款的增长似乎达到了顶峰,其最初最响亮的倡导者转向了争议较少和更具社会影响的追求。
具体来说,我想重点谈谈技术如何在很大程度上影响我们相互交往方式的范式转变。NYU 经济学家兼作家 Arun Sundararajan 将人类的这种进化称为“共享经济”,他进一步指出:
“这种转变将通过刺激新的消费、提高生产率以及催化个人创新和创业精神,对经济增长和福利产生积极影响。”
越来越多的企业家几乎每天都在单独或集体创办新的企业,这证明了以上几乎所有的观点都是正确的。无论动机是为了解决现存的老问题,还是为了超越一个似乎没有得到正确公式的倒闭的企业,创业社区继续经历着快速加速的增长。
是的,你没看错,我的确把整个创业社区归为两类。
因为这种创业失败的历史记录往往会因幸存者史诗般的“凤凰涅槃”故事而半途而废,对成功的过度索引往往会使外部观察者认为这种成功和高度搜索引擎优化显著(正)相关。在大多数情况下,要在这个合理的逻辑中找出漏洞是非常困难的。我敢说它几乎是气密的。
但不完全是。
请允许我分享一些观点。作为一名企业家,我的大多数企业都失败了,因为我要么没有足够地培养它们,要么没有组建合适的团队来补充我有限的技能。虽然许多失败的企业家可能会很快指出资本不足几乎是他们创业失败的唯一原因,但我认为这只是一个借口。事实上,我被大量的数据所左右,这些数据表明相反的情况更符合经验事实。
至于我们(这次是一个团队,有我姐姐、她的丈夫,还有你的丈夫)最近的投资,是一家印度快餐餐馆(孟买弗兰基公司),我们已经决定依赖于一个大量启动的初始投资方法。这在很大程度上是基于确保软着陆,因为一旦失败,我们没有投资者可以偿还。但正如许多企业家喜欢过分自信地安慰自己,“这次会不同。”我们也是。
这家餐厅开业几周后,我没有意识到有多少技术会渗透到业务的几乎每一个部分。虽然在我职业生涯的大部分时间里,我广泛地从事技术工作,并编写了数百万行代码,但不知何故,我未能预见到交集会变得如此位和字节密集。从建立我们的 Square 销售点到现在与我们合作的 8 个在线交付服务,除了依赖生物计量时钟设备进行工资支付,每一次集成都有一个独特的技术障碍需要克服。但寻找解决方案的每一步都变得越来越令人满意,因为这种努力似乎完全是精英制的——我们投入的工作越多,得到的回报就越多。
- 系统启动了
- 顾客越来越多
- 付款处理速度很快,交易费用低于行业平均水平,付款到我们银行账户的延迟时间也很短
- 簿记很快就完成了,没有一个陡峭的学习曲线
- 我们的数字业务开始快速增长。
但随后我们遇到了意想不到的绊脚石。
Yelp
在你去餐馆或任何其他地方之前,别人的评论或评论可能会严重影响你成为最终消费者的决定,我相信你已经查看了那家店的 Yelp 评论。作为一个严重依赖这些评论和“看似”民主的评论分享过程的人,我已经养成了努力缩小消费者和贡献者之间差距的习惯。所以,我写评论已经很多年了。现在,在接收端(作为企业所有者),我们从来没有考虑过以下问题——当我们的评论者给我们留下一贯的五星评论(现在达到 37 星)时,“看似”民主的平台同时将它们一扫而光,这公平吗?
超级强调‘bot’。
Yelp 这么做的理由?这是一种算法。说到蒙骗我们。为了验证我的假设,即模型拟合他们的“算法”实际上有多差,一些实验是必要的:
- 由于我们的大多数评论者都来自那些很少或根本没有 Yelp 存在的人,这些评论可以合理地假设被指定删除。但是当更多的(甚至一些资深的)评论家开始投稿时,结果是完全一样的。
- 评论似乎倾向于不同程度的情绪变化和夸张。无论是明显的压抑,高度的尖锐,还是仅仅敷衍了事,结果似乎也是完全一样的。
- 移除此类审查后,回归确定半衰期。如果在第 1 天留下了 4 条评论,那么到第 3 天,这 4 条评论都将被删除。
- 不顾一切地向我们的在线社区展示我们至少有一篇评论,我决定写一篇。令人惊讶的是,这 4 天没有被删除。更奇怪的是,该算法没有自动删除我的评论,因为我正在使用我的企业主资料来留下对 Yelp 知道我拥有的企业的评论。也许扩大同情票是一个嵌入的功能。
- 我们甚至决定屈服于这样一种观念,即通过承诺向 Yelp 广告支付 350 美元,“付费游戏”将使我们的评论复活。到目前为止,两周过去了,还是没有任何改善。
结论:与语义算法几乎没有线性关系,但是嵌入在时间去除函数中的模型拟合很好
扎加特调查对比
起初,我们对这种看似欺诈的做法感到愤怒,但现在看到我们的业务并没有完全衰退,我们不得不将我们的想法转移到我们从基于不对称寡头垄断的经济中转移出来的是多么少。快进到 20 世纪 80 年代和 90 年代,当时 Zagat 调查似乎是餐厅评论领域唯一的真理来源,多年后在 2004 年出现的穿着闪亮盔甲的骑士是 Yelp。随着它在市场上的无处不在和声名鹊起,它似乎为这个被垄断的市场带来了一场基本上民主的改革,更不用说降低那些长期以来享受小人物特权的乏味评论家的垄断影响力了。但是随着许多企业走向成熟,无意中脱离了他们充满理想主义的开端,Yelp 失宠成为像 Zagat 调查最终那样令人厌恶(和淡化)只是时间问题。
让颠覆游戏开始吧。
人工智能的建筑师——深度学习
人工智能是十年来最显著的进步之一。人们正在从显式软件开发转向构建基于人工智能的模型,企业现在依赖于数据驱动的决策,而不是人工定义规则。一切都在变成人工智能,从人工智能聊天机器人到自动驾驶汽车,从语音识别到语言翻译,从机器人到医学。然而,人工智能对研究人员来说并不是什么新鲜事物。它在 90 年代之前就已经存在了。但是是什么让它如此流行并向世界开放呢??
我已经从事人工智能和数据科学工作近两年了,并且已经围绕许多所谓的最先进的人工智能系统工作,如生成聊天机器人、语音识别、语言翻译、文本分类、对象识别、年龄和表情识别等。因此,在人工智能领域呆了两年之后,我相信在这场人工智能热潮背后只有一项主要技术(或者随便你怎么称呼它),即深度学习。
这是我的入门博客,我不会深入研究深度学习和神经网络的技术细节(将在即将到来的博客中谈论我的工作),但与你分享为什么我认为深度学习正在接管其他传统方法。如果你对深度学习和人工智能不感兴趣,让我用简单的非技术性的语言解释给你听。想象一下,你必须建立一种方法来将电子邮件分类,如社交邮件、促销邮件或垃圾邮件,这是谷歌为你的 Gmail 收件箱做的主要人工智能任务之一!你会怎么做来实现这个目标?也许你可以列一个单词列表,在电子邮件中查找,如“广告”、“订阅”、“时事通讯”等,然后编写一个简单的字符串匹配正则表达式,在电子邮件中查找这些单词,如果找到这些单词,就将它们分类为促销或垃圾邮件。但这里的问题是,你能通过这种方式抓住多少关键词,或者你能为此手动编写多少规则?你知道互联网上的内容是交叉折叠的,每天都会有新的关键词出现。因此,这种基于关键词的方法不会给你带来好的结果。
现在,如果你仔细想想,你有一台比你快一百万倍的计算机可以进行关键字匹配。因此,与其使用你强大的计算设备来进行简单的字符串匹配,为什么不让计算机来决定分类规则呢!我的意思是,计算机可以处理成千上万的数据,并在你能想到 5 个这样的规则的时间内,为这项任务提出更精确的规则。
这就是深度学习!而不是你明确地设计你认为可以解决问题的规则和条件(比如简单的 if-else,制作关键字字典等等)。),深度学习致力于赋予计算机产生特定规则的能力,计算机可以使用这些规则来解决问题。这意味着它是一个端到端的架构。您将数据作为输入提供给网络,并告知每个数据点的期望输出。然后,网络仔细检查数据,并相应地更新规则,以找到一组优化的规则。
这种决策能力一般仅限于我们人类,对吧?这就是人工神经网络(或简称神经网络)发挥作用的地方。这些是一组分层排列的节点,通过权重(不过是数字矩阵)连接,就像我们大脑中的神经元连接一样。同样,我不会进入架构的技术细节,它们的学习算法和背后的数学,但这是深度学习模仿大脑学习过程的方式。
让我们再举一个例子,假设你要识别一幅图像中的人脸,它可以位于图像中的任何位置。你会怎么做?一个显而易见的方法是在整个人脸上定义一组关键点,这些关键点一起可以表征人脸。一般来说,这些是 128 或 68 套。这些点相互连接形成一个图像掩模。但是如果脸部的朝向从正面变成侧面呢??帮助这些点识别面部的面部几何形状发生变化,因此,关键点方法将检测不到面部。
68 key points of human face, Image taken from www.pyimagesearch.com
深度学习也让这成为可能!我们使用的关键点是基于人类对面部特征(如鼻子、耳朵、眼睛)的感知。因此,为了检测一张脸,我们试图让计算机在一张图像中找到这些特征。但是你猜怎么着,这些手动选择的特性对计算机来说并不那么明显。深度学习让计算机遍历大量的人脸(包含各种扭曲和方向),并让计算机决定哪些特征图似乎与计算机的人脸检测相关。毕竟电脑要识别的是脸,不是你!这给出了令人惊讶的好结果。你可以通过我的一个项目 这里 我用 ConvNets(一种深度学习架构)来识别面部表情。
拥有大量人脸数据集来识别人脸可能会给你带来问题。但是像暹罗网这样的一次性学习方法也解决了这个问题。这是一种基于称为对比三重损失的特殊损失函数的方法,并在 FaceNet 论文中进行了介绍。这个我就不在这里讨论了。如果你想了解它,你可以在这里 查阅论文。
Siamese Network for Gender Detection, Image taken from www.semanticscholar.org
关于深度学习的另一个神话是,深度学习是一个黑盒。架构背后没有工程和数学方面的特征。因此,它只是简单地复制数据,而没有真正为问题提供可靠的长期解决方案。
不,不像!它以类似于传统机器学习方法的方式涉及数学和概率,无论是简单的线性回归还是支持向量机。深度学习使用与线性回归相同的梯度下降方程来寻找优化的参数值。成本函数、假设、从目标值的误差计算(损失)都以与传统算法(基于等式)相似的方式完成。深网中的激活函数不过是数学函数。一旦你理解了深度学习的每个数学方面,你就可以弄清楚如何为特定任务建立模型,以及需要做什么样的改变。只是深度学习中涉及的数学证明并不复杂。但是如果你得到了正确的概念,它就不再是一个黑匣子了!事实上,这适用于世界上所有的算法。
据我所知,我已经完成了它背后的所有数学。从简单的感知器开始,神经元的标准 Wx+b 方程和反向传播到现代架构,如 CNN、LSTM、编码器-解码器、Sequence2Sequence 等。
这个博客的目的是在机器学习和人工智能领域为深度学习创造更多的接受度。这也是我没有讲深度学习架构、代码、张量流的原因。基于人工智能开展业务的公司需要支持深度学习以及传统的机器学习方法。在我即将发布的博客中,我将谈论我做的一些很酷的项目,可能是生成聊天机器人,也可能是神经机器翻译。如果你也对人工智能感兴趣,请在博客上告诉我你的看法!
A/B 测试艺术
走过统计意义的美丽数学
A/B 测试,又名。分割测试,指的是一种实验技术,根据选定的标准来确定新的设计是否带来改进。
在网络分析中,想法是用一个新的网站(B)挑战一个现有的网站(A ),通过随机分割流量并比较每个分割的指标。
Exchanging on interface layouts
为了举例,让我们看看美容公司丝芙兰东南亚(丝芙兰海,我工作的地方),特别是它的电子商务平台。
使用案例
让我们假设 Sephora SEA 正在考虑为其黄金会员重新安排登陆页面。
Landing pages pane arrangement: version A (current) and version B (alternative to be tested)
对公司至关重要的指标是:
- 每次会话花费在登录页面上的平均时间
- 转换率,定义为以交易结束的会话比例
A/B 测试可用于挑战当前的安排。
请注意,如果您担心版本 b 造成的损失,您可以选择流量分割,而不是 50-50,并将更多流量分配给版本 A。
然而,请记住,非常偏斜的分割通常会导致 A/B 测试变得*(统计)* 显著之前需要更长的时间。
A/B 测试作为唯一的最终测试
在网站上开发新功能的问题是,你很难事先知道这些功能会如何发挥作用:它们可能会损害你的业务或让你的利润飙升。
用户体验(UX)设计师的知识对于挑选可能有效的功能建议至关重要。它通常会遵循 UX 的最佳做法或在其他类似情况下被证明是成功的设计范例。
然而,没有任何先验假设可以打败真正的现场测试,即 A/B 测试。
A/B 测试使用真实的客户端实时测量性能。如果执行得很好,在对人口 A 和 B 进行抽样时没有偏见,它会给你最好的估计,如果你部署版本 B 会发生什么。
需要统计形式主义
在做了一些预先的市场研究后,Sephora SEA 决定对 B 版进行现场测试,流量分配如下:
让我们假设在 7 天的 A/B 测试之后,实验的跟踪指标是
仅从这些结果来看,就产生了一些问题:
- 因为 B 版展现出更高的 CR,是否意味着 B 版带来了提升?同样,我们能得出对平均花费时间的影响吗?
- 如果是,有多大的把握?
- B 版更高的 CR/更高的平均花费时间是偶然发生的吗?
在下结论之前,你需要记住的是
我们得到的原始结果只是更大群体的样本。它们的统计特性随着它们所属人群的不同而不同。
因此,有必要对这些输出进行统计建模。在假设检验中引入统计显著性的概念也是如此。
假设检验入门
关于假设检验的深入解释,我推荐威廉·科尔森的这篇伟大的文章。
用数据证明一件事是什么意思?
towardsdatascience.com](/statistical-significance-hypothesis-testing-the-normal-curve-and-p-values-93274fa32687)
对于那些想快速复习统计学的人来说,你可能想看看这篇来自 Cassie Kozyrkov 的文章。
曾经希望有人能告诉你统计学的意义是什么,术语用简单的英语表达是什么意思吗?让…
towardsdatascience.com](/statistics-for-people-in-a-hurry-a9613c0ed0b)
在这里,我将介绍假设检验的主要内容:一个工具,用于根据样本比较两个群体的分布。
可以比较的是它们分布的参数(例如花费时间的平均值)或分布本身(例如转化率的二元分布)。
这个过程开始于陈述一个关于人口的无效假设 H₀ 。总的来说就是相等假设 : 例如“两个种群均值相同”。
备择假设 H₁ 否定零假设:例如“第二总体的均值高于第一总体”。
测试可以总结为两个步骤:
- **1。**模型 H₀ 为单个实值随机变量上的分布(称为检验统计量
- **2。**评估这些样本,或者更极端的样本,在 H₀.下产生的可能性有多大 这个概率就是著名的 p 值。越低,我们越有信心拒绝 H₀.
在上述帖子中,williamkoersshen测试大学的平均睡眠时间是否低于全国平均水平,从而将估计值与理论值进行比较。他用一个 T2 Z 测试来达到这个目的。
在这里,我建议将该框架扩展到 Sephora SEA 案例中的 A/B 测试。
特别是,我将展示:
- 如何将 Z 测试应用于测试经历 B 的客户端是否平均花费更多时间
- 如何使用卡方检验决定 B 版本是否导致更高的转化率
- 如何调整 Z 检验以测试 B 版本的转换率,以及它是否得出与卡方检验相同的结论
Let’s get testing!
1 | Z-平均花费时间测试
要测试的假设是:
- H₀ :“两个版本平均花费的时间相同”
- h₁:“b 版平均花费时间较高”
第一步是塑造 H₀
Z 检验使用中心极限定理(CLT)这样做。
Illustration of the CLT (from Wikipedia)
CLT 确定:
给定期望的随机变量xμ和有限方差 σ 、 {x₁,…,xn}∼x*、*n独立同分布(iid) rv,如下近似值
在我们的上下文中,我们将花费在每个客户端会话 i 上的时间建模为实现:
- t49】aᵢ的RV的*aᵢ∨a、*的如果客户端会话属于版本 a 分裂**
- bᵢ的RV 的 Bᵢ的∨b、 别的
我们用 CLT 提供的近似值推导出
因此,rv 的近似值的差异(维基百科:总和的正态分布 rv ),
在 H₀、 我们有平等的真正手段和因此的模式
****
Curves about N(0,1): centrered and reduced Gaussian distribution, probability density function (pdf) and associated p-values
第二步是看我们的样品在 H₀下的可能性有多大
A 和 B 的真实期望值和方差未知。我们介绍它们各自的经验估计量:
我们的样本生成了以下测试统计量 Z ,需要针对简化的中心正态分布进行测试:
从概念上讲, Z 代表观察到的均值差远离 0 的标准差的个数。这个数字越高, H₀ 的可能性越小。
还要注意,在这种情况下估计的期望值实际上是不同的,(samples)↗, Z ↗.
从 Z 的公式中,还可以得到要证明的差越小,需要的样本越多的直觉。
在 Python 中,计算如下
p-value calculation and graphical representation
像我们观察到的这样极端的结果很有可能发生在 H₀.时代 有了 5%的常用标准 α ,我们就可以放心地拒绝p value<α和【h₀。**
在样本量不大(<每版 30 个),CLT 近似不成立的情况下,可以看看 学生的 t 检验 。
2 |转化率的χ检验
要检验的假设有:
- H₀ :“两个版本的转换率相同”
- h₁:“b 版转化率更高”
与前一种情况不同,每个客户端会话的结果不是连续的,而是二进制的:“未转换”或“已转换”。
观察到的结果总结如下
χ检验比较了多项结果的分布,但是在这个例子中我们将保持二元的情况。
和以前一样,我们将分两步解决这个问题:
第一步是模拟 H₀
在 H₀中,版本 a 和版本 b 中的 转换遵循相同的二项分布 B(1,p) 。我们汇总了版本 A 和版本 B 中的观测值,并导出了 CR 的估计量
并得到\hat{p} = 0.0170
由此可见, 下的 H₀, 下的理论结果表是
让我们看看 rv D,定义为
D 表示理论分布和观测分布之间的平方相对距离。
根据皮尔逊定理,在 下 H₀ , D 遵循 1 自由度(df)的χ概率定律。
Curves about the χ² law (df=1)
第二步是看我们的样品在 H₀下的可能性有多大
它包括计算观察到的 D 并根据χ定律导出其相应的 p 值。
这是如何在 Python 中实现的:
p-value calculation and graphical representation
在 H₀.的情况下,一个结果有可能至少和我们的观察一样远离理论分布 用一个常见的常用词α5%的准则,我们有p value>α和*【h₀*不能拒绝。
3 |转换率的 Z 测试
通过将转换率建模为以{0,1}为单位实现的 rv,Z 测试可适用于转换率:
- 1 表示转换
- 0 其他
我们保留与之前相同的符号,并将每个客户端会话 i 的模型转换作为实现:
- ∈{ 0,1 }RVaᵢ【a】,** 如果客户端会话属于版本 a 拆分****
- bᵢ ∈ {0,1 }RVbᵢ【b】,** 其他****
第一步是模拟 H₀
在 H₀的 下,μ(A) = μ(B) 和我们有
相应的测试统计
这一次,使用二元 rvs,可以证明标准差的估计值是期望值的函数:
第二步是看我们的样品在 H₀下的可能性有多大
为此,我们计算 Z 得分和相应的右尾 p 值:
p-value calculation and graphical representation
使用这种建模,p 值输出略低于χ检验。用同样的 α =0.05 的准则,我们早就拒绝了零假设(!!!).
这种差异可以用 Z-检验的一个轻微弱点来解释,它在这里不承认 rv 的二元性质:【μ(B)】-μ(A)***实际上在 ***[-1,1】中有界,因此观察结果被归因于较低的 p 值。
总是质疑你的测试
永远不要做假设。在决定新特性的相关性时,A/B 测试确实是减少人为偏见的好方法。然而,不要忘记 A/B 测试仍然依赖于一个真实的模型:正如我们已经看到的,有不同的可能模型。
在大样本的情况下,他们倾向于得出相似的结论。特别是,CLT 近似比小样本情况下更好。
在后一种情况下,人们可以探索学生的 t 检验、韦尔奇的 t 检验和费希尔的精确检验。你也可以探索强化学习的领域,以便在测试时获得最大收益(多臂强盗和开发与探索的两难境地)。
你不仅要严格解释结果,还要意识到 A/B 测试的背景效应:
- 一年/一月/一周的时间、天气、经济环境都会影响你的听众的性质
- 即使在两天的 A/B 测试后,你的结果是显著的,也可能不会超过一周
主要带回家的信息
- 假设检验是对一个零假设 H₀ 进行建模,并评估它的可能性,给定你从 A/B 检验中得到的样本
- 关键是在 H₀ 模型中我们已经看到,它可以从 CLT (Z 检验)或皮尔逊定理(χ检验)中推导出来
我们的统计之旅到此结束:我希望你能像我写这篇文章一样享受这次旅程!非常感谢您的评论、建议和更正。
清理数据的艺术
像奥巴马放弃麦克风一样放弃那些糟糕的数据
想获得灵感?快来加入我的 超级行情快讯 。😎
清理数据应该是数据科学(DS)或机器学习(ML)工作流程的第一步。没有干净的数据,你将很难看到探索中真正重要的部分。一旦你最终开始训练你的 ML 模型,它们将不必要地变得更具挑战性。最主要的一点是,如果你想充分利用你的数据,它应该是干净的。
在数据科学和机器学习的背景下,数据清理意味着过滤和修改数据,以便更容易探索、理解和建模。过滤掉你不想要或不需要的部分,这样你就不需要查看或处理它们。修改您确实需要的部件,但这些部件不是您需要的格式,因此您可以正确地使用它们。
在这里,我们将看看一些我们通常想要在我们的数据中清理的东西,以及可以用来做这件事的 pandas 代码!
缺失数据
大型数据集很少完全填满。我所说的完整是指所有的数据点都有其所有特征变量的值。通常会有一些缺失的值,当在 pandas 中加载类似于pd.read_csv()
的东西时,这些值会被标记为 NaN 或 None。这类数据丢失有许多实际原因。收集数据的人可能只是忘记了,或者他们直到数据收集过程进行到一半才开始收集该特征变量。
在处理数据集之前,绝对需要处理缺失数据。例如,假设您正处于数据探索过程中,您发现了来自某个特征变量(比如“变量 F”)的数据的一些关键信息。但是后来你发现数据集中“变量 F”的 95%的值都是 NaNs 你不可能从一个仅仅代表数据集 5%的变量中得出任何关于数据集的具体结论!当你开始训练你的 ML 模型时,NaNs 也可能被你的程序当作 0 或无穷大,完全打乱了你的训练!
有几种方法可以处理熊猫丢失的数据:
- 检查 nan:
pd.isnull(object)
检测数据中缺失的值;这将检测“NaN”和“None” - 删除缺失数据:
df.dropna(axis=0, how='any')
返回包含 nan 的数据点已被删除的数据框。 - 替换缺失数据:
df.replace(to_replace=None, value=None)
用“值”替换“to_replace”中给定的值。如果你知道你希望这个特征变量是什么值,这是很有用的。 - 删除一个特征:
df.drop('feature_variable_name', axis=1)
如果您发现某个特征变量在数据集中有> 90%的 NaN 值,那么从您的数据中删除整个东西是有意义的。
Drop those bad features like an Obama mic drop
极端值
数据集中的异常值是一个大杂烩。一方面,它们可能包含关键信息,因为它们与主要群体有很大不同。另一方面,它们让我们看不到主要群体,因为我们必须看得很远才能看到离群值!在最大似然方面,包含离群值的训练可能会让你的模型更好地泛化,但也会把它从你的大部分数据所在的主要组中分离出来。
一般来说,通常建议两面看。探索有无异常值的数据。如果您决定您的 ML 模型需要它们,那么选择一个足够健壮的方法来处理它们。如果您发现这些异常值确实存在,并且对获取大图信息和数据建模没有用处,那么最好就像上一节所示的那样丢弃它们。
此外,如果您想要过滤掉那些异常值,您可以使用以下方法:
# Get the 98th and 2nd percentile as the limits of our outliers
upper_limit = np.percentile(train_df.logerror.values, 98)
lower_limit = np.percentile(train_df.logerror.values, 2) # Filter the outliers from the dataframe
data[‘target’].loc[train_df[‘target’]>upper_limit] = upper_limit data[‘target’].loc[train_df[‘target’]<lower_limit] = lower_limit
A plot with outliers included (left) and a histogram with outliers removed (right)
错误数据和重复数据
坏数据是指任何不应该存在的数据点或值,或者完全错误的数据点或值。例如,假设您的一个特征变量称为“性别”,其中大部分值为“男性”或“女性”。但是当你浏览数据集时,你会注意到有几个数据点的性别值为 67.3!显然,67.3 在这个变量的上下文中没有任何意义。此外,如果您尝试将“性别”特征变量转换为分类浮点数:男性= 0.0,女性= 1.0,您将得到一个额外的数字:67.3 = 2.0!
重复只是数据集中完全重复的数据点。如果有太多这样的问题,就会影响你的 ML 模型的训练。就像我们之前看到的那样,可以简单地从数据中删除重复项。
可以通过丢弃或使用一些智能替换来处理坏数据。例如,我们可能会查看性别值为 67.3 的数据点,并看到所有这些数据点的正确值都应该是“女性”。因此,我们可以简单地将所有 67.3 的值转换为“女性”。这样做的好处是,我们有效地为 ML 训练获得了这些数据点,而不是把它们扔掉。你可以在熊猫身上做这样的转换:
value_map = {'male': 'male', 'female': 'female', '67.3': 'female'}pd_dataframe['gender'].map(value_map)
Watch out for that duplicate Loki data
无关的特征
并非所有功能都是相同的。有些东西你可能根本不需要!例如,您可能正在查看过去一年从 Amazon 购买的图书数据集,其中一个特征变量称为“font-type ”,表示书中使用的字体类型。这与预测一本书的销量完全无关!您可以像这样安全地删除所有这些特性:
df.drop('feature_variable_name', axis=1)
这样做可以让你的数据探索变得更容易,因为你不需要浏览太多的东西。这也有助于训练你的 ML 模型更容易和更快,因为你不需要处理太多的数据。如果您不确定变量是否重要,那么您可以等到开始研究数据集时再做决定。计算特征变量和目标输出之间的相关矩阵有助于确定变量的重要性。
When your feature variable is useless …
标准化
每个特征变量中的所有数据都应该采用相同的标准化格式。它将使数据探索和建模的技术方面变得更加容易。例如,让我们再次以值为“男性”或“女性”的“性别”变量为例。如果数据是由一个人收集的,您可能会得到许多您没有预料到的不同值:
- 男,女(这个不错)
- 男性,女性(输入时大写锁定)
- 男性,女性(有些人会大写)
- Make,Femall(错别字!)
如果我们继续将特征变量转换成分类浮点数,我们将得到比我们想要的 0 和 1 更多的值!我们实际上会得到这样的结果:
{
'male': 0,
'female': 1,
'MALE': 2,
'FEMALE': 3,
'Male': 4,
'Female': 5,
'Make': 6,
'Femall': 7
}
有几种方法可以处理这种情况。如果事情很简单,比如全部小写或首字母大写,就像这样做:
# Make the whole string lower case
s.lower()# Make the first letter capitalised
s.capitalize()
如果有错别字,您需要使用我们之前看到的映射功能:
value_map = {'Make': 'male', 'Femall': 'female'}pd_dataframe['gender'].map(value_map)
喜欢学习?
在 twitter 上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!
数据工程的艺术
在您的数据科学项目开始之前,您需要一个数据集。即使你有了一个初始数据集,你也可能需要更多的数据来改进你的模型。建立这些数据集会带来许多问题。
你如何收集新数据?你应该收集哪些数据?如何改进现有的数据集?如何组织这些数据输入到统计模型中?
“数据工程师”可能不像“数据科学家”那样有魅力,但是,从长远来看,这些数据收集、存储、预处理和组织的基本过程对于一个成功的项目是必不可少的。
收集数据
在互联网上可以找到很多很棒的数据集,比如 kaggle.com、谷歌数据集搜索和 UCI 知识库。然而,当你为自己的个人项目建立机器学习模型时,这些数据可能不会削减它。因此,你将需要学习一些数据收集技巧,如网页抓取。
由于语义网的兴起,网络抓取对于收集数据非常有用。很多时候,您可以根据正在解析的 HTML 元素周围的语义标签来标记数据。
如果您不能依靠收集的性质来标记数据,则另一种数据收集策略是使用您构建的模型来帮助收集数据。首先,你训练一个模型,然后你收集大量的新数据,让模型为你分离出来。不幸的是,这确实需要一些手动工作来可视化模型所犯的错误。这些错误可能对您的新模型来说是最有价值的数据,因为它在对这些实例进行分类时犯了错误。
一旦你收集了数据,你将需要找出在哪里存储它。这可以在数据库中完成,无论是关系数据库(SQL)还是非关系数据库(MongoDB)。知道如何从数据库中查询这些数据并将其格式化用于培训是一项非常重要的技能。另一个数据存储选项是使用云存储,我个人使用过 AWS S3 存储桶,到目前为止没有任何抱怨。然而,如果您使用 google collab 的 GPU 运行时来训练您的模型,您可能会发现将数据存储在 google drive 上会更方便。
改善数据集
我最近写了很多关于数据增强的重要性。数据扩充包括对我们的数据集进行转换,使我们能够添加合成数据,并利用少量的初始数据进行学习。
数据扩充对图像来说非常直观,但对文本来说就不那么直观了。对于图像,我们可以翻转它们、添加噪声、向左、向右、向上、向下平移、旋转等等。对于文本,常用的扩充方法包括使用同义词库来替换单词,或者在可能的情况下打乱某些部分,例如简历中的某些部分。对于这两种应用,使用生成模型,例如生成对抗网络,对于数据增强的应用是非常有前途的。
此外,还有很多方法可以改善数据集。
改善数据集的常见方法包括将属性值归一化到 0 和 1 之间、移除处于临界情况的实例,或者对数据集进行采样以处理类不平衡。
类不平衡的问题不是我在 medium 上经常看到讨论的问题,但是,类分布重采样确实可以提高模型在类分布不平衡的测试集上的性能。
例如,如果您的训练数据集中当前有一个 50:50 的类分布,但您的测试集有一个替代分布,如 75:25 或更严重的偏斜,则使用随机过采样或欠采样对数据集进行重采样以匹配该分布可能会改进您的模型。
格式化数据
Tensorflow 对于接受什么样的数据进行训练可能会很挑剔。开发处理管道是一种被称为管道-过滤器的软件设计模式。这些模型可以帮助您概念化格式化序列和高级架构。
在实现方面,熟悉 NumPy 库,知道如何使用?reshape 方法,知道 floats,uint8s 等数据类型的区别。,并知道如何打电话。检查数据集的形状都是实现管道来格式化统计建模数据的好地方。
结论
发展对数据工程过程的良好理解将为您的数据科学项目节省大量时间。收集更多的数据是提高模型性能的最可靠的方法之一。然而,手动收集数据是非常耗时和恼人的。此外,检查数据集以确保不存在不一致的数据格式、缺失值或其他问题,可以得到更好的模型。格式化数据需要理解模型的基本输入形状,并知道如何使用 NumPy 库将数据处理成这种格式。
CShorten
Connor Shorten 是佛罗里达大西洋大学计算机科学专业的学生。对计算机视觉、深度学习和软件工程感兴趣。
演绎的艺术:以熊猫和蟒蛇为特色
如果你选择 Python 作为你的帮凶,那么几乎每个开始学习机器学习或数据分析或几乎任何其他数据科学相关主题的人都必须学会使用 Pandas。(就我个人而言,我想念 r。还没有失去爱情)
这是对熊猫的一个简短而全面的介绍,也许是你入门所需要的全部。关于熊猫的内容比我们在本文中介绍的要多,但是随着您的数据科学之旅的进行,您一定会了解到它。但是这肯定会让你准备好阅读一些代码,理解“ pd ”符号在某些地方到底在做什么。
我们为什么需要熊猫?
嗯,因为熊猫对中国竹林的生存至关重要(英国广播公司和其他各种来源已经展示了这些濒临灭绝的美丽生物的重要性)。哇!你已经爱上熊猫了!谈到 Python 的 Pandas 库,它已经成为 Python 中数据分析和建模的标准。除非你正在使用 R(还没有失去爱),你将需要依赖熊猫的一切-数据。
Pandas 具有以下优势,这使得它成为 Python 数据分析的事实标准:
- 数据帧
- 易于读写多种表格格式(CSV、Excel 甚至 SQL)的数据
- 处理缺失数据
- 轻松重塑数据
- 切片和混叠操作简单
- 这个库是用 C 语言编写的,这提高了它的性能。。。还有更多!
熊猫怎么装?
关于安装说明,请参考官方 Pandas 文档。我保证这真的很容易设置,可能只需要一行代码就可以执行。
导入 pandas 库的标准符号是:
import pandas as pd
导入数据
有几种类型的数据文件格式可以作为 Pandas DataFrame 载入。加载不同类型的数据有特定的格式,一般格式如下:
my_data = pd.read_csv(‘ __link to data file here with .csv extension__ ‘)
大多数情况下,我们会处理 CSV( 逗号分隔值)类型的文件,所以这种符号应该足够了。CSV 文件比 XLS 更受青睐,因为 Excel 文件有一些格式问题,有时会变得混乱。我们不想处理那种情况,对吗?好像是 2018 年!
Pandas 支持许多其他文件加载服务,这些服务可以在官方文档中找到(链接)。
我们在本文中使用了术语 DataFrame。实际上熊猫给我们提供了两种东西:
数据帧:
一个表格格式(可以可视化为 SQL 表或者 Excel 表)
构造一个数据帧的符号是:
my_frame = pd.DataFrame({‘col_1’:[val_1,val_2,val_3], ‘col_2’:[val_4,val_5,val_6]}, index=[‘index_1’, ‘index_2’, ‘index_3’])
上面的代码将创建一个 3*2 大小的数据帧,称为 my_frame 。你可以把数据帧看作 Python 字典,它的键是列名,值是列中的值列表。
data frame 中的附加参数为我们的数据分配一个特定的索引。然而,现在可以忽略这一点,因为我们对从 1 开始的一般自动索引完全没有问题。
系列:
一个值数组。就像 Python 中的列表一样。
my_list = pd.Series([val_1, val_2, val_3], index=[index_1, index_2, index_3], name=’Column_name’)
中提琴!这个很简单! 一个系列被可视化为一个数据帧的一列。因此它具有所需的属性。同样,我们可以跳过索引部分,但我们应该记住名称部分。(如果要将此列添加到数据框架中,您需要为新列命名)
您加载的数据帧的形状可以使用以下代码行来描述:
print(my_dataframe.shape)
这将打印出类似于:(1000,10)
的内容,这意味着您的 DataFrame 有 1000 行数据和 10 列。整洁!
您还可以使用" head() "函数打印出数据帧的前 5 行(只是为了大致了解数据类型或者列包含的值类型)。
my_dataframe.head()
另一方面,您也可以将修改后的数据帧存储成各种格式。
my_dataframe.to_csv(“ __name of file with .csv extension__ “)
你的文件会和数据框中的所有数据一起保存到你的工作目录中。
希望到现在为止一切都清楚了。这些是我们在执行分析时要做的基本事情——加载和读取数据,查看我们在处理什么。继续前进。
选择、切片和各种其他数据格式化操作:
DataFrame 上的大多数 select 操作与我们在本地 python 对象(如列表和字典)上执行的操作非常相似。
使用点符号可以通过以下方式访问整个列:
my_data.column_1
#or
my_data[‘column_1’]
此外,如果我们需要所选列中的特定数据行,我们可以以类似的方式使用索引来选择该特定行:
my_data[‘column_1’][5]
#Remember that DataFrames follow the zero indexing format
我们还可以使用 iloc 操作符来完全基于索引对数据集进行切片,也就是说,我们将使用列名的索引来选择该行的列和行的索引。
my_data.iloc[:,0]
#This would select all the rows from the column index 0(1st column). #Just “:” represents “everything”.#Or to select the first 3 rows:
my_data.iloc[:3,0]
需要注意的是,当我们使用“0:4”格式时,左边的数字代表切片开始的索引,右边的数字代表切片发生的索引,即右边的索引不会被选择。这种符号也适用于 Python 中的切片操作。没什么好担心的!
我们还可以通过一个列表来选择特定的列,而不是以有序的方式进行切片:
my_data.iloc[[0,5,6,8],0]
最好探索你所有的选择。越来越多地调整函数来测试它的能力和用途。
现在,我们必须记住的最重要的选择特性是条件选择。在许多情况下,条件选择可以节省一天的时间和大量的时间。它的作用很像 SQL 中的“WHERE”子句。
在这些情况下,iloc 的兄弟“ loc ”出现了。就像 iloc 支持基于整数的索引一样, loc 可以基于标签或传递给它的布尔数组来访问数据。
my_data.column_1 == some_numeric_value#This would return a Series of boolean data based on wether the condition was evaluated as true or not. We can then pass this Series to the loc function to conditionally pick all the rows who’s index evaluated to be TRUE for the conditionmy_data.loc[my_data.column_1 == some_numeric_value]
请仔细阅读 loc 操作符的官方 Pandas 文档以获得更全面的理解:
(不要担心 iloc,因为您读到的几乎就是它)
你也可以在 Pandas 中浏览与索引和选择数据相关的官方文档。
Pandas 中有一些非常有用的函数可以用来汇总数据:
my_data.head()
#Prints out the first five rows of your DataFramemy_data.column_name.describe()
#Prints out some important statistical values like count, mean, max etc of a specific column. In case the column containts String values, it will print the count, freq and top etcmy_data.column_name.mean()
#You get itmy_data.column_name.unique()
#If the column contains String values, this function will print out all the unique values present in that column
这些是数据帧上一些最常用的汇总函数。还有更多这些不像这些那样经常使用。有关汇总功能的更多信息,请参考文档。
处理缺失数据
通常我们的数据帧中会有缺失的数据。这些是没有描述数据的字段。这可能会给我们的模型评估或分析带来问题。在我们继续其他阶段之前,将所有 NaN 值解析为某个实际值是很重要的。
NaN 代表“非数字”,NaN 的 dtype 设置为 float64 。
我们有一个优秀的操作符,用于轻松选择这些数据字段,名为“ isnull ”,反之,“ notnull ”。这些函数将自动选择指定列中包含任何 NaN 值的所有行,因此我们可以共同为它们分配一些值。
my_dataframe[my_dataframe.column_name.isnull()]
我们有一个熊猫提供的优秀函数来解决上述问题: fillna 。我们可以在数据帧或选定的数据帧上调用 fillna,为指定列中的所有 NaN 值赋值。
my_data.column_name.fillna(value_to_be_passed)
这些是文档的一些重要部分,您应该仔细阅读以理解一些更深入的关键概念。压缩它没有意义,因为最好通过适当的详细示例来理解这些内容:
除此之外,理解方法链的概念也很重要。我不能强调方法链接在数据分析阶段的重要性。
Joost H. van der Linden 制作了一个优秀的资源库,它基于方法链概念,带有一个 iPython 笔记本,你可以运行、编辑和修改。所以一定要在 Github 上查看。
你可以在 Kaggle 上找到的泰坦尼克号生存问题的数据集是一个很好的练习数据集。您可以找到许多人在各种来源上开发的优秀方法,或者您可以查看其他用户提交的其他内核。几乎所有人最初都会遵循必要的数据汇总和清理步骤。
我尝试用 R 来解决这个问题,所以我现在不能发布我自己的解决方案。但是万一你想试试 R,这将是一个好机会。分析的所有阶段通常都是相同的,但在使用 R 时,您可以期待一个更加干净和专注的环境。如果您需要 R 中的问题的教程,我想推荐 David Langer 的 Youtube 频道 。我真的很喜欢他引导观众通过所有必要的步骤和代码背后的工作的流程。
就这样,我们结束了对可爱熊猫的温柔介绍。
用熊猫,爱熊猫,救熊猫!
多维数据的有效可视化艺术
有效数据可视化的策略
Image via Pixy
介绍
描述性分析 是与数据科学项目甚至特定研究相关的任何分析生命周期的核心组件之一。数据聚合、汇总和可视化是支持这一数据分析领域的一些主要支柱。从传统的 商业智能 时代到现在的 时代,人工智能 、 数据可视化 一直是一种强大的工具,并因其在提取正确信息、清晰轻松地理解和解释结果方面的有效性而被组织广泛采用。然而,处理通常具有两个以上属性的多维数据集开始产生问题,因为我们的数据分析和通信媒介通常局限于二维。在本文中,我们将探讨一些有效的多维数据可视化策略(从 一维 到*)。*
动机
这是一个非常流行的英语习语,我们都很熟悉,应该为我们理解和利用数据可视化作为我们分析中的有效工具提供足够的灵感和动力。永远记住“有效的数据可视化既是一门艺术,也是一门科学”。在开始之前,我还想提一下下面这段话,这段话非常贴切,强调了数据可视化的必要性。
一张照片最大的价值是当它迫使我们注意到我们从没想到会看到的东西
约翰·图基
可视化的快速复习
我假设普通读者知道用于绘制和可视化数据的基本图形和图表,因此我不会进行详细的解释,但我们将在这里的动手实验中涵盖其中的大部分。正如著名的可视化先驱和统计学家爱德华·塔夫特所提到的,数据可视化应该在数据之上利用“清晰、精确和高效”来交流模式和见解。**
结构化数据通常由行表示的数据观察和列表示的特征或数据属性组成。每个列也可以作为数据集的一个特定维度来调用。最常见的数据类型包括连续的数值数据和离散的分类数据。因此,任何数据可视化基本上都是以易于理解的方式描述一个或多个数据属性,如散点图、直方图、箱线图等。我将涵盖(一维)和 多变量 (多维)数据可视化策略。我们将在这里使用 Python 机器学习生态系统,我们建议您查看用于数据分析和可视化的框架,包括[pandas](https://pandas.pydata.org/)
、[matplotlib](https://matplotlib.org/)
、[seaborn](https://seaborn.pydata.org/)
、[plotly](https://plot.ly/)
和[bokeh](https://bokeh.pydata.org/en/latest/)
。除此之外,如果你对用数据制作美丽而有意义的可视化感兴趣,了解[D3.js](https://d3js.org/)
也是必须的。有兴趣的读者推荐阅读爱德华·塔夫特的《量化信息的可视化展示》。
空谈是廉价的,让我看看可视化(和代码)!
让我们开始工作吧,不要让我在理论和概念上喋喋不休。我们将使用可从 UCI 机器学习库获得的 葡萄酒质量数据集 。该数据实际上由两个数据集组成,描述了葡萄牙“Vinho Verde”葡萄酒的红色和白色变种的各种属性。本文中的所有分析都可以在我的 GitHub 资源库 中找到,作为一个 Jupyter 笔记本供那些渴望亲自尝试的人使用!
我们将从加载以下分析所需的依赖项开始。
****import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import numpy as np
import seaborn as sns****%matplotlib inline****
我们将主要使用**matplotlib**
和**seaborn**
作为我们的可视化框架,但是您可以自由地使用您选择的任何其他框架进行测试。我们先来看看经过一些基本的数据预处理步骤后的数据。
我们通过合并红葡萄酒和白葡萄酒样本的数据集来创建一个单一的葡萄酒数据框架。我们还基于葡萄酒样本的**quality**
属性创建了一个新的分类变量**quality_label**
。现在让我们来看一下数据。
****wines.head()****
The wine quality dataset
很明显,我们有几个葡萄酒样品的数字和分类属性。每个观察值属于一个红葡萄酒或白葡萄酒样品,属性是从物理化学测试中测量和获得的特定属性或特性。如果你想了解每个属性的详细解释,你可以查看 Jupyter 笔记本。让我们对其中一些感兴趣的属性做一个快速的基本描述性汇总统计。
Basic descriptive statistics by wine type
对不同类型的葡萄酒样本进行对比和比较这些统计数据是非常容易的。请注意一些属性的明显差异。我们将在以后的一些可视化中强调这些。
单变量分析
单变量分析基本上是最简单的数据分析或可视化形式,我们只关心分析一个数据属性或变量,并将其可视化(一维)。
一维可视化数据(1-D)
可视化所有数字数据及其分布的最快和最有效的方法之一是使用pandas
来利用 直方图
Visualizing attributes as one-dimensional data
上面的图很好地说明了任何属性的基本数据分布。
让我们深入到 可视化一个连续的数字属性。 本质上是一个 直方图 或 密度图 在理解该属性的数据分布方面非常有效。
Visualizing one-dimensional continuous, numeric data
从上面的图中可以明显看出,葡萄酒sulphates
的分布存在明显的右偏。
可视化一个离散的、分类的数据属性 略有不同,而 条形图 也是最有效的方法之一。你也可以使用饼状图,但是一般来说要尽量避免使用它们,尤其是当不同类别的数量超过三个的时候。
Visualizing one-dimensional discrete, categorical data
现在让我们继续看更高维度的数据。
多变量分析
多元分析是乐趣和复杂性的开始。这里我们分析多个数据维度或属性(2 个或更多)。多变量分析不仅包括检查分布,还包括这些属性之间的潜在关系、模式和相关性。如果需要,您还可以根据手头要解决的问题,利用推断统计和假设检验来检查不同属性、组等的统计显著性。
以二维方式可视化数据(2-D)
检查不同数据属性之间的潜在关系或相关性的最佳方式之一是利用 成对相关矩阵 并将其描绘为 热图 。
Visualizing two-dimensional data with a correlation heatmap
热图中的梯度根据相关性的强度而变化,您可以清楚地看到,很容易发现潜在属性之间具有很强的相关性。另一种方法是在感兴趣的属性之间使用 成对散点图 。
Visualizing two-dimensional data with pair-wise scatter plots
根据上面的图,您可以看到散点图也是观察数据属性的二维潜在关系或模式的一种不错的方式。
关于成对散点图需要注意的重要一点是,这些图实际上是对称的。任何一对属性
***(X, Y)***
的散点图看起来与***(Y, X)***
中的相同属性不同,只是因为垂直和水平刻度不同。它不包含任何新信息。
将多个属性的多元数据可视化的另一种方式是使用 平行坐标 。
Parallel coordinates to visualize multi-dimensional data
基本上,在如上所述的可视化中,点被表示为连接的线段。每条垂直线代表一个数据属性。跨越所有属性的一组完整的连接线段代表一个数据点。因此,倾向于聚集的点看起来会靠得更近。通过观察,我们可以清楚地看到,与白葡萄酒相比,**density**
更适合红葡萄酒。同样,白葡萄酒的**residual sugar**
和**total sulfur dioxide**
比红葡萄酒高,而红葡萄酒的**fixed acidity**
比**white wines**
高。查看我们之前导出的统计表中的统计数据来验证这个假设!
让我们来看一些我们可以 可视化两个连续的数字属性 的方法。特别是 散点图 和 联合图 不仅是检查模式、关系的好方法,也是查看属性的个体分布的好方法。
Visualizing two-dimensional continuous, numeric data using scatter plots and joint plots
上图左侧为 散点图 ,右侧为 联合图 。正如我们提到的,您可以在联合图中检查相关性、关系以及个体分布。
如何看待 可视化两个离散的、分类的属性? 一种方法是利用单独的情节(支线情节)或 面 来获得一个分类维度。
Visualizing two-dimensional discrete, categorical data using bar plots and subplots (facets)
虽然这是可视化分类数据的好方法,但正如您所见,利用**matplotlib**
已经导致编写了大量代码。另一个好方法是使用 堆叠条 或 多个条 用于单个图中的不同属性。我们可以轻松地利用**seaborn**
实现同样的目的。
Visualizing two-dimensional discrete, categorical data in a single bar chart
这肯定看起来更干净,你也可以有效地比较不同的类别很容易从这个单一的阴谋。
让我们看看 在二维中可视化混合属性 (本质上是数字和分类在一起)。一种方法是使用 刻面\支线剧情 连同通用 直方图 或 密度剧情 。
Visualizing mixed attributes in two-dimensions leveraging facets and histograms\density plots
虽然这很好,但我们又一次有了很多样板代码,我们可以通过利用**seaborn**
来避免这些代码,甚至可以在一个图表中描绘这些图。
Leveraging multiple histograms for mixed attributes in two-dimensions
你可以看到上面生成的图清晰简洁,我们可以很容易地比较不同的分布。除此之外, 箱形图 是根据分类属性中的不同值有效描绘数字数据组的另一种方式。 箱形图 是了解数据中四分位值以及潜在异常值的好方法。
Box Plots as an effective representation of two-dimensional mixed attributes
另一个类似的可视化是violin plots,这是使用核密度图(描绘不同值的数据的概率密度)可视化分组数字数据的另一种有效方式。
Violin Plots as an effective representation of two-dimensional mixed attributes
你可以清楚地看到上面不同酒类quality
和sulphate
的密度图。
将数据可视化为二维非常简单,但是随着维度(属性)数量的增加,数据开始变得复杂。原因是因为我们被二维的展示媒介和环境所束缚。
对于三维数据,我们可以通过在图表中取一个 z 轴或者利用支线图和分面来引入一个虚假的深度概念。
然而,对于高于三维的数据,可视化变得更加困难。超越三维的最好方法是使用小平面、颜色、形状、大小、深度等等。您也可以使用时间**作为维度,为其他属性制作一个随时间变化的动画图(考虑到时间是数据中的一个维度)。看看汉斯·罗斯林的精彩演讲就知道了!**
三维可视化数据(3-D)
考虑到数据中的三个属性或维度,我们可以通过考虑一个 成对散点图 并引入 颜色 或 色调 的概念来分离出分类维度中的值,从而将它们可视化。
Visualizing three-dimensional data with scatter plots and hue (color)
上面的图使你能够检查相关性和模式,也可以围绕葡萄酒组进行比较。就像我们可以清楚地看到白葡萄酒的**total sulfur dioxide**
和**residual sugar**
比红葡萄酒高。****
让我们看看 可视化三个连续的数字属性 的策略。一种方式是将两个维度表示为常规的(x-轴)和 宽度(y-轴),并且还将 深度(z-轴)的概念用于第三维。****
Visualizing three-dimensional numeric data by introducing the notion of depth
我们还可以利用常规的二维轴,并引入尺寸的概念作为第三维(本质上是一个 气泡图 ),其中点的尺寸表示第三维的数量。**
Visualizing three-dimensional numeric data by introducing the notion of size
因此,你可以看到上面的图表并不是一个传统的散点图,而是一个气泡图,根据**residual sugar**
的数量有不同的点大小(气泡)。当然,你并不总是能在数据中找到明确的模式,就像在这种情况下,我们在其他两个维度上看到不同的大小。
对于 可视化三个离散的分类属性, 虽然我们可以使用传统的,但是我们可以利用以及 面 或 支线剧情 的概念来支持额外的第三维。**seaborn**
框架帮助我们将代码保持在最少,并有效地进行规划。****
Visualizing three-dimensional categorical data by introducing the notion of hue and facets
上面的图表清楚地显示了与每个维度相关的频率,您可以看到这在理解相关见解时是多么容易和有效。
考虑到三个混合属性的可视化,我们可以使用 色调 的概念来将我们的组在一个分类属性中分离,同时使用常规的可视化,如 散点图 来可视化数值属性的二维。**
Visualizing mixed attributes in three-dimensions leveraging scatter plots and the concept of hue
因此,色调充当了类别或组的良好分隔符,尽管如上所述不存在或非常弱的相关性,但我们仍然可以从这些图中了解到,与白相比,红葡萄酒的**sulphates**
略高。除了散点图,还可以使用 内核密度图 来理解三维数据。**
Visualizing mixed attributes in three-dimensions leveraging kernel density plots and the concept of hue
与白葡萄酒相比,红葡萄酒样品具有更高的**sulphate**
水平,这是很明显的,也是意料之中的。您还可以看到基于色调强度的密度浓度。**
如果我们正在处理三维中的 多个分类属性 ,我们可以使用 色相 和 中的一个常规轴 来可视化数据,并使用类似于 盒图 或 小提琴图的可视化
Visualizing mixed attributes in three-dimensions leveraging split violin plots and the concept of hue
在上图中,我们可以看到,在右边的三维可视化图中,我们在 x 轴上表示了葡萄酒**quality**
,在**wine_type**
上表示了色调。我们可以清楚地看到一些有趣的现象,比如与白葡萄酒相比,红葡萄酒的更高。****
您还可以考虑使用 盒图 以类似的方式表示具有多个分类变量的混合属性。
Visualizing mixed attributes in three-dimensions leveraging box plots and the concept of hue
我们可以看到,无论是对于**quality**
还是**quality_label**
属性,葡萄酒的**alcohol**
含量随着质量的提高而增加。此外,基于的质量等级,与白葡萄酒相比,红葡萄酒往往具有略高的中值**alcohol**
含量。然而,如果我们检查的质量等级,我们可以看到,对于等级较低的葡萄酒(3&4)白葡萄酒中值**alcohol**
含量大于红葡萄酒样品。除此之外,与白葡萄酒相比,红葡萄酒的平均含量似乎略高。********
以四维方式可视化数据(4-D)
根据我们之前的讨论,我们利用图表的各种组件来可视化多个维度。一种在四维空间中可视化数据的方法是使用 深度 和作为常规绘图中的特定数据维度,如 散点图 。**
Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and depth
**wine_type**
属性由色调表示,这在上面的图中非常明显。此外,虽然由于情节的复杂性,解释这些可视化变得越来越困难,但你仍然可以收集到一些见解,如**fixed acidity**
对于红酒更高,而**residual sugar**
对于白酒更高。当然,如果**alcohol**
和**fixed acidity**
之间存在某种关联,我们可能会看到一个逐渐增加或减少的数据点平面,显示出某种趋势。****
另一种策略是保持二维绘图,但使用和数据点 大小 作为数据维度。通常这将是一个 气泡图 ,类似于我们之前看到的。**
Visualizing data in four-dimensions leveraging bubble charts and the concept of hue and size
我们用来表示**wine_type**
,用数据点 大小 来表示**residual sugar**
。我们确实从之前的图表中观察到了类似的模式,白葡萄酒的气泡尺寸更大,通常表明白葡萄酒的**residual sugar**
值比红葡萄酒的值更高。********
如果我们有两个以上的分类属性要表示,我们可以重用我们的概念,利用 【色调】 和 刻面 来描述这些属性,以及像 散点图 这样的规则图来表示数字属性。让我们看几个例子。
Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and facets
我们可以很容易地发现多种模式,这一事实验证了这种可视化的有效性。白葡萄酒的**volatile acidity**
水平较低,同样高品质葡萄酒的酸度水平也较低。同样根据白葡萄酒样本,高品质葡萄酒的**alcohol**
含量较高,低品质葡萄酒的**alcohol**
含量最低!
让我们举一个类似的例子,用其他一些属性来构建一个四维的可视化。
Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and facets
我们清楚地看到,优质葡萄酒的**total sulfur dioxide**
含量较低,如果你对葡萄酒成分有必要的了解,这一点是很重要的。我们还看到红酒的**total sulfur dioxide**
水平低于白酒。然而,在几个数据点上,红酒的**volatile acidity**
水平更高。
在五维空间中可视化数据(5-D)
再次遵循与上一节相似的策略,在五维空间中可视化数据,我们利用各种绘图组件。让我们用、 色相 和 大小 来表示除了 正轴 以外的三个数据维度来表示另外两个维度。既然我们使用了尺寸的概念,我们将基本上绘制一个三维的 气泡图 。**
Visualizing data in five-dimensions leveraging bubble charts and the concept of hue, depth and size
这个图表描述了我们在上一节中谈到的相同的模式和见解。然而,我们也可以看到,根据由**total sulfur dioxide**
表示的点数大小,白葡萄酒比红葡萄酒具有更高的**total sulfur dioxide**
等级。**
除了 深度 ,我们还可以使用 刻面 以及 色调 来表示这五个数据维度中的多个分类属性。代表 大小 的属性之一可以是数值(连续)甚至是分类(但是我们可能需要用数字来表示数据点大小)。虽然由于缺乏分类属性,我们没有在这里进行描述,但是您可以在自己的数据集上尝试一下。**
Visualizing data in five-dimensions leveraging bubble charts and the concept of hue, facets and size
这基本上是另一种方法,可以将我们之前绘制的五维图可视化。虽然在查看我们之前绘制的图时, 深度 的额外尺寸可能会使许多人困惑,但是由于 小平面 的优势,该图仍然有效地保留在二维平面上,因此通常更有效且更易于解释。
我们已经可以看到,处理如此多的数据维度变得越来越复杂!如果你们有些人在想,为什么不增加更多的维度呢?让我们试一试吧!
可视化六维数据(6-D)
既然我们玩得开心(我希望!),让我们在可视化中添加另一个数据维度。我们将利用色相大小形状* 除了我们的 规则的两个轴 来刻画所有的六个数据维度。*******
Visualizing data in six-dimensions leveraging scatter charts and the concept of hue, depth, shape and size
哇,在一个情节中有六个维度!我们有由 形状高(平方像素)中(X 标记)和低(圆圈)品质的葡萄酒。其中**wine_type**
由 表示色相, **fixed acidity**
由 深度 和数据点 大小 表示**total sulfur dioxide**
内容。****
解释这一点似乎有点费力,但是在试图理解正在发生的事情时,请一次考虑几个组件。
- 考虑到 形状 & y 轴 ,我们有高和中品质的葡萄酒,与低品质的葡萄酒相比具有更高的
**alcohol**
水平。****** - 考虑到 色相大小 ,我们对于白葡萄酒的
**total sulfur dioxide**
含量要高于红葡萄酒。****** - 考虑到 深度 和 色调 ,我们有白葡萄酒比红葡萄酒的
**fixed acidity**
水平低。**** - 考虑到 色调 和 x 轴 ,我们有红葡萄酒比白葡萄酒的
**residual sugar**
水平低。**** - 考虑到形状* ,白葡萄酒似乎比红葡萄酒拥有更多高品质的葡萄酒(可能是因为白葡萄酒的样本量更大)。*******
我们还可以通过移除 深度 组件并使用 面 来代替分类属性来构建 6-D 可视化。
Visualizing data in six-dimensions leveraging scatter charts and the concept of hue, facets and size
因此,在这个场景中,我们利用 面 和来表示三个分类属性,利用 两个常规轴 和 大小 来表示我们的 6-D 数据可视化的三个数值属性。**
结论
数据可视化是一门艺术,也是一门科学。如果你正在读这篇文章,我真的很赞赏你通读这篇内容广泛的文章的努力。其目的不是为了记忆任何东西,也不是为了给可视化数据提供一套固定的规则。这里的主要目标是理解和学习一些有效的数据可视化策略,尤其是当维度数量开始增加时。我鼓励你在将来利用这些片段来可视化你自己的数据集。请在评论中留下您的反馈,并分享您自己的有效数据可视化策略“尤其是如果您能走得更高的话!”**
本文使用的所有代码和数据集都可以从我的 GitHub 中访问
该代码也可作为 Jupyter 笔记本