TowardsDataScience 博客中文翻译 2019(一百一十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

初学者的计算机视觉:第 4 部分

原文:https://towardsdatascience.com/computer-vision-for-beginners-part-4-64a8d9856208?source=collection_archive---------7-----------------------

轮廓检测和一点点乐趣

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

有很多方法可以让你有效地学习进步。对我来说,把学习和一点点乐趣结合起来是最好的策略。在这一系列教程中,许多图像被用来演示图像处理概念。你可能会感兴趣地注意到,人们喜欢我以一种有趣的方式将这个概念应用到图像中的部分。我建议你把娱乐和学习结合起来。

这是 OpenCV 初学者教程的最后一部分,完整系列如下:

  1. 理解颜色模型并在图像上绘制图形
  2. 使用过滤和渐变进行图像处理的基础知识
  3. 从特征检测到人脸检测
  4. 轮廓检测又有了一点乐趣

从第一个系列中,我们看到了如何在图像上绘制图形。我们还讨论了如何使用各种选项应用模糊和阈值处理。在第三部分,我们讨论了几种检测算法,包括边缘检测。还有另一种检测技术叫做轮廓检测,它在物体检测中是必不可少的。在那之后,我们会用一点玩蒙版的乐趣来结束这个系列。

本文假设您已经遵循了前面的步骤,或者您已经知道这些概念。但如果不是这样,请查看本系列前面的部分。本教程的完整代码一如既往地在Github上提供。

轮廓检测

你可能已经熟悉了“轮廓”这个词。在以前的帖子中,我已经多次使用这个术语。 轮廓线 表示代表相同值或相同强度的边界的曲线。等高线图是我们能想到的最简单的例子。

但是你可能会问。边缘和轮廓有什么区别?这两个术语经常互换使用,所以可能会有点混淆。简单地说,边缘的概念是在局部范围内,而轮廓的概念是在图形的整体边界上。边是其值与其相邻点相比发生显著变化的点。另一方面,轮廓是从边缘获得的封闭曲线,描绘了图形的边界。这里 可以找到进一步的解释

***# Load the image
img = cv2.imread('images/pine_apple.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)***

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

所以我们要做的是检测这个菠萝的轮廓。在应用检测算法之前,我们需要将图像转换成灰度并应用如下的阈值处理。所有这些步骤都是我们在上一系列文章中讨论过的。

***# Blurring for removing the noise 
img_blur = cv2.bilateralFilter(img, d = 7, 
                               sigmaSpace = 75, sigmaColor =75)# Convert to grayscale 
img_gray = cv2.cvtColor(img_blur, cv2.COLOR_RGB2GRAY)# Apply the thresholding
a = img_gray.max()  
_, thresh = cv2.threshold(img_gray, a/2+60, a,cv2.THRESH_BINARY_INV)
plt.imshow(thresh, cmap = 'gray')***

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

轮廓检测可以通过 OpenCV 中的函数cv2.findContours()来实现,这里有两个重要的参数。mode是寻找轮廓的方法,method是检测的近似方法。我要求你从 文档 中找到其他信息。

***# Find the contour of the figure 
image, contours, hierarchy = cv2.findContours(image = thresh, 
                                   **mode = cv2.RETR_TREE, 
                                   method = cv2.CHAIN_APPROX_SIMPLE**)***

模式cv2.RETR_TREE找到所有有希望的轮廓线,并重建嵌套轮廓的完整层次。方法cv2.CHAIN_APPROX_SIMPLE只返回绘制等高线所需的端点。正如你在上面看到的,这个函数给出了图像,检测到的轮廓和它们的层次作为输出。

返回的等高线是由等高线组成的点的列表。为了画出图形的外部线条,我们将按面积对轮廓进行排序。选中轮廓线后,cv2.drawContours()将描绘出边界线和如下所示的点。

***# Sort the contours 
contours = sorted(contours, key = cv2.contourArea, reverse = True)# Draw the contour 
img_copy = img.copy()
final = **cv2.drawContours(**img_copy, contours, contourIdx = -1, 
                         color = (255, 0, 0), thickness = 2**)**
plt.imshow(img_copy)***

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

很简单吧?虽然底部也加了阴影,但是结局还是蛮满意的。

关于轮廓的更多信息

我们可以对轮廓做更多的事情。借助于图像矩的概念,我们可以找到图像的质心或计算边界场的面积。一瞬间在这里意味着什么?单词‘moment’在通常用法中是一小段时间。但在物理学术语中,一个 是距离和另一个物理量的乘积,意味着一个物理量是如何分布或定位的。所以在计算机视觉中, 图像矩 就是图像像素强度是如何根据位置分布的。它是图像像素强度的加权平均值,我们可以从图像矩中获得质心或空间信息。

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

有三种类型的矩-空间矩、中心矩和中心归一化矩。我们可以用 OpenCV 中的函数cv2.moments()得到图像的矩,它返回 24 个不同的矩。如果您打印如下所示的输出M,它将以字典格式返回 24 个时刻。

***# The first order of the contours
c_0 = contours[0]# image moment
M = cv2.moments(c_0)
print(M.keys())***

我想在这里把重点放在图像时刻的实现上。如果你有兴趣,可以在本文末尾找到额外的阅读资源。

为了得到轮廓的面积,我们可以实现函数cv2.contourArea()。为什么我们不在这里尝试几种轮廓?如果您输入第一个、第二个和第三个轮廓,您将得到如下所示的递减值。这表明轮廓检测算法形成了检测到的边界的层次。

***# The area of contours 
print("1st Contour Area : ", cv2.contourArea(contours[0])) # 37544.5
print("2nd Contour Area : ", cv2.contourArea(contours[1])) # 75.0
print("3rd Contour Area : ", cv2.contourArea(contours[2])) # 54.0***

轮廓的弧长可以通过函数cv2.arcLength()得到。参数closed指示曲线是否应该闭合。

***# The arc length of contours 
print(cv2.arcLength(contours[0], closed = True))      # 2473.3190
print(cv2.arcLength(contours[0], closed = False))   # 2472.3190***

现在让我们试着画出菠萝的质心和极值点。我们可以用下面的公式得到质心点。

***# The centroid point
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])***

极值是左边和右边、顶部和底部的端点。并且我们可以把 x 和 y 坐标分别排列如下。

***# The extreme points
l_m = tuple(**c_0[c_0[:, :, 0]**.argmin()][0])
r_m = tuple(**c_0[c_0[:, :, 0]**.argmax()][0])
t_m = tuple(**c_0[c_0[:, :, 1]**.argmin()][0])
b_m = tuple(**c_0[c_0[:, :, 1]**.argmax()][0])pst = [l_m, r_m, t_m, b_m]
xcor = [p[0] for p in pst]
ycor = [p[1] for p in pst]***

现在让我们在图像上绘制所有这些点。

***# Plot the points
plt.figure(figsize = (10, 16))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap = 'gray')
plt.scatter([cx], [cy], c = 'b', s = 50)plt.subplot(1, 2, 2)
plt.imshow(image, cmap = 'gray')
plt.scatter(xcor, ycor, c = 'b', s = 50)***

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

其他轮廓形状

除了紧致轮廓,我们还可以画出一个图形的凸轮廓或矩形轮廓线。让我们先尝试一个直的矩形。有了外部轮廓线,我们将围绕对象绘制矩形。函数cv2.boundingRect()返回边界框的 4 个点,如下所示。

***# The first order of the contours
c_0 = contours[0]# Get the 4 points of the bounding rectangle
x, y, w, h = cv2.boundingRect(c_0)# Draw a straight rectangle with the points
img_copy = img.copy()
img_box = cv2.rectangle(img_copy, (x, y), (x+w, y+h), color = (255, 0, 0), thickness = 2)***

注意,这个直矩形不是其他可能边界中的最小值。我们可以用函数cv2.minAreaRect()提取面积最小的矩形,该函数找到一个包含输入 2D 点集的旋转矩形。之后,我们得到这个矩形的四个角,并把它们放在contour参数中,如下所示。

***# Get the 4 points of the bounding rectangle with the minimum area
rect = cv2.minAreaRect(c_0)
box = cv2.boxPoints(rect)
box = box.astype('int')# Draw a contour with the points 
img_copy = img.copy()
img_box_2 = cv2.drawContours(img_copy, **contours = [box]**, 
                             contourIdx = -1, 
                             color = (255, 0, 0), thickness = 2)***

现在让我们检查结果并比较两个不同的轮廓框。

***plt.figure(figsize = (10, 16))
plt.subplot(1, 2, 1); plt.imshow(img_box)
plt.subplot(1, 2, 2); plt.imshow(img_box_2)***

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

我们也可以使用cv2.convexHull()功能绘制一个凸形轮廓。这需要一组点,并从给定的集合中返回凸包。在cv2.drawContours()中输入这个返回的点为contours,我们可以得到如下的凸轮廓。

***# Detect the convex contour
hull = cv2.convexHull(c_0)img_copy = img.copy()
img_hull = cv2.drawContours(img_copy, **contours = [hull]**, 
                            contourIdx = 0, 
                            color = (255, 0, 0), thickness = 2)
plt.imshow(img_hull)***

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

在轮廓检测中有太多的事情要涉及。我鼓励你查看文档并自己探索更多选项。

掩蔽带来的一点乐趣

作为这个系列的最后一个练习,我想做一些有趣的图像遮罩。我们可以通过图像加法或位运算等算术运算将两幅不同的图像相加。所以我们最后的任务是把我们的菠萝先生系在一个男人的左肩上。

*****# Import the large image
backpacker = cv2.imread('images/backpacker.jpg')
backpacker = cv2.cvtColor(backpacker, cv2.COLOR_BGR2RGB)
plt.imshow(backpacker)*****

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

我们将从大图和小图中剪切出感兴趣的区域(肩部),如下所示。注意,这里两个图像的大小(图像的高度和宽度)应该是相同的。

*****# Crop the small image and the roi
roi = backpacker[750:1150, 300:500]
img_2 = img[40:440, 80:280]plt.figure(figsize = (6, 6))
plt.subplot(1, 3, 1); plt.imshow(roi)
plt.subplot(1, 3, 3); plt.imshow(img_2)*****

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

下一步是为每张图片制作蒙版。我们要用掩码实现位运算,掩码应该是一个二进制图像。通过对小图像img_2进行阈值处理,我们创建了蒙版。然后用cv2.bitwise_not(),我们制作另一个和第一个完全相反的面具。

*****# Creating the mask for the roi and small image
img_gray = cv2.cvtColor(img_2, cv2.COLOR_RGB2GRAY)
_, mask = cv2.threshold(img_gray, 254/2+100, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)plt.figure(figsize = (6, 6))
plt.subplot(1, 3, 1); plt.imshow(mask, cmap = 'gray')
plt.subplot(1, 3, 3); plt.imshow(mask_inv, cmap = 'gray')*****

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

如果我们实现函数cv2.bitwise_and()和遮罩,它们将只通过图像的白色区域。因此,如果我们将第一个蒙版应用于roi图像,我们可以从它设置背景图像。同样的,如果我们将第二个应用到img_2图像,我们可以用水果制作前景图像。

*****# Masking 
img_bg = cv2.bitwise_and(roi, roi, mask = mask)
img_fg = cv2.bitwise_and(img_2, img_2, mask = mask_inv)
dst = cv2.add(img_fg, img_bg)plt.figure(figsize = (10, 6))
plt.subplot(1, 3, 1); plt.imshow(img_bg)
plt.subplot(1, 3, 2); plt.imshow(img_fg)
plt.subplot(1, 3, 3); plt.imshow(dst)*****

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

考虑到底部的阴影,结果有点混乱,但让我们保持它。如果你想了解位运算是如何工作的,详细的解释可以在 这里 找到。现在,我们准备将这个组合图像附加到原始图像上。因此,我们可以简单地这样做,将dst图像放在roi位置,如下所示。

*****# Final output
backpacker[750:1150, 300:500] = dst
display(backpacker)*****

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

😄👋祝你和背包客过得愉快!

摘要

从第 1 部分到第 4 部分,我们已经学习了很多关于图像处理和计算机视觉的基础知识。到目前为止,你喜欢这些教程吗?我希望在阅读本系列文章的同时,您对这些技巧有了信心。

如果您完全是图像处理的初学者,最初不熟悉 OpenCV 函数的术语和用法是正常的。最好的练习方法是自己实现所有这些。选择你喜欢的任何类型的图片,并从中获得乐趣。改变颜色模式,旋转和调整图像大小,遮罩并粘贴到不同的图像上。或者你也可以应用边缘、拐角和轮廓的检测技术。虽然通过组合几个预处理和尝试不同的参数来获得乐趣,但您可以在没有意识到的情况下更快地习惯 OpenCV 库。

资源

有你想改正的错误吗?请与我们分享您的见解。我总是乐于交谈,所以请在下面留下评论,分享你的想法。我还在 LinkedIn 上分享有趣和有用的资源,欢迎随时关注并联系我。下次我会带来另一个有趣的故事。一如既往,敬请关注!😎

蒸汽波艺术的计算机视觉

原文:https://towardsdatascience.com/computer-vision-for-vaporwave-art-32a330c827ee?source=collection_archive---------20-----------------------

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

Photo by Sean Foley on Unsplash

利用现代技术进行艺术追求

当然,通读出版物和实现实用算法是令人兴奋的。我喜欢寻找聪明的方法来分割图像,检测人们是不是 T2 混蛋,甚至帮助机器人通过 T4 农场。然而,有几个星期我不想用计算机视觉做任何有意义的事情。在大脑感觉特别顺畅的日子里,让代码从手指中流出并出于良性目的使用磁场是令人放松的。

本周就是其中的一周。除了参与科技,我还喜欢时尚和艺术。我最近发现了一种被称为 Vaporwave 的边缘艺术形式。形式采用流行的互联网时代艺术形式的元素,如 glitch art 和 chillwave。Vaporwave 与其他形式不同,它强调怀旧主题,经常使用来自美国和日本文化的 20 世纪 80 年代风格的波普艺术。90 年代和 21 世纪初的图形用户界面(GUI)也是常见的噱头。当个人电脑还处于萌芽状态,科技行业还相当不景气时,这些物品会让人产生不正当的简单感觉。

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

Vaporwave has many forms and is seen in digital media and fashion!

在千年之交的成长过程中,我觉得这些作品向我的成长致敬。作为一名活跃的图像处理程序员,我决定参与艺术形式。我开发了一个简短的 Python 脚本,可以蒸发任何给定的照片。

毛刺艺术方法

在图像处理和计算机视觉中,通常使用数字操作来清除噪声和分离感兴趣的项目。这个项目做的完全相反。目标是添加噪声和破坏图像,但以一种有品位的方式。

我想加入的 Vaporwave 艺术的一个特征是毛刺艺术。这是指数字误差被故意用来制作艺术图案。这种艺术形式应用在人脸上时有一种特别强烈的感觉。

OpenCV 等有用的库使得面部识别变得相当简单。OpenCV 拥有可以用来检测不同面部姿态和特征的模型。我特别想开发出可以操控整张脸或者只操控眼睛的功能。使用哈尔级联和一些参数调整,人脸和眼睛出现在大多数图像中。

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

Facial detection results. Images by demegree

知道了面部的位置,我想执行两个主要的面部瑕疵,面部拖动和静态瑕疵。面部拖动是选择面部上的一个区域并在图像上拖动该区域中的一行像素的效果。这种效果让人想起在拖动或移动时滞后的旧电脑上的 GUI。静态毛刺是一种更常见的影响。当电视连接不良时,通常会出现这种情况。屏幕上的像素会出现横向抖动。

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

Ah, good old days.

这两个元素都很容易实现。通过随机选择拖动面部的方向来执行面部毛刺。面上的随机 x 轴或 y 轴位置被选作将要拖动的线。然后沿着一组行或列复制该行中的像素

对于静态毛刺,面部被分成随机数量的条。每一条都向左或向右移动一段随机距离。

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

Face Dragging (Left) and Glitch Static (Right)

“眼睛是心灵的窗户”是一个常见的艺术老生常谈,Vaporwave 经常强调这一特征。眼睛经常被黑条遮住,这是指广播电台过去如何审查个人。本文中较早展示的一个片段包括了这一点。偶尔,为了模仿希腊罗马雕像,图像中的瞳孔被完全移除。

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

Eye Glitch Drag, Source

我见过的一个更罕见、更迷人的效果是仅仅眼睛的小故障。这类似于面部拖动效果,但是,只有眼睛的部分被拖动,以创建哭泣和阴沉的外观。我发现这种风格要么绝对吸引观众,要么让他们毛骨悚然。

审查条要求适度使用几何学。找到双眼的中心后,我找到了连接两点的向量。然后我用垂直的单位向量乘以一些标量来找到相对于双眼中心的审查条的角。

眼球阻力效应类似于面部阻力。我没有把整个眼睛拉成一列或一行,而是把眼睛描述成一条条的,然后把它们一个一个地拉成随机的长度。

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

Eye Drag (Left) and Censor bar (Right)

蒸汽波艺术——最后一笔

正如我之前提到的,蒸汽波艺术不仅仅是可怕地扭曲了一幅图像。没有那些 80 年代和 90 年代的参考,我的作品感觉不太完整。所以我拿了一堆图像和时代精神的符号,用几个随机发生器把它们组合起来,扔在那里。

最重要的是,我添加了一个高对比度的滤镜,并用高斯噪声对图像进行了爆破,使图像呈现出一种老式阴极射线管电视和计算机的美感。

图库和结果

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

我对这个项目的结果非常满意。当我开始写剧本的时候,我并没有过高的期望。然而,由于程序的完全随机性,偶尔会产生一些有味道的结果。

此外,作为一个技术领域的人,我并不期望用我的技能来创造艺术。这个程序很好地展示了新兴的计算机视觉领域的艺术应用。对于那些需要实际应用的人来说,这样的程序类似于社交媒体应用 Snapchat 的面部过滤器。

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

尽管这个项目很有趣,但我不认为自己会在上面投入太多时间。也就是说,该程序确实有一些不完整的功能,我欢迎有兴趣的人来开发。我想在审查栏上添加随机的“尖锐”文本,这是 Vaporwave 艺术中的另一个陈词滥调。

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

Yours Truly

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

以上图片由de gree原创拍摄(除了我的那张)。

二等奖;荣誉奖;H 奖

尽管其中一些图片很棒,但重要的是要承认这个脚本具有难以置信的随机性。我在选集里挑了一些我最喜欢的。偶尔,一些生成的作品绝对疯狂。

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

Houston, we have lift off

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

We get it…

密码

[## TimChinenov/VaporWaveArt

下面的代码生成了一个图像。创建一个帐户,为 TimChinenov/VaporWaveArt 的发展做出贡献…

github.com](https://github.com/TimChinenov/VaporWaveArt)

如果你使用这个脚本,我很想看看你会生成什么样的图像!能分享就分享吧。如果加入更多的元素,那就更好了!

计算机视觉:掩模 R-CNN 的实例分割

原文:https://towardsdatascience.com/computer-vision-instance-segmentation-with-mask-r-cnn-7983502fcad1?source=collection_archive---------2-----------------------

这是计算机视觉旅程 系列的第四部分。在本文中,我们将探索掩模 R-CNN,以了解实例分割如何与掩模 R-CNN 一起工作,然后使用 Keras** 预测具有掩模 R-CNN 的图像的分割

第一部分——CNN,R-CNN,快速 R-CNN,更快 R-CNN

第二部分——了解 YOLO、约洛夫 2、YOLO v3

第三部分——用 YOLOv3 使用 Keras 进行物体检测

什么是实例切分,与语义切分有什么不同?

语义分割在像素级检测图像中存在的所有对象。输出具有不同类别或对象的区域

语义分割以语义上有意义的方式对像素进行分组。属于人、道路、建筑物、栅栏、自行车、汽车或树木的像素被单独分组。

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

Semantic Segmentation

实例分割是识别图像中每个已知对象的每个对象实例

实例分割为图像的每个像素分配一个标签。它用于计算物体数量等任务

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

Instance segmentation

实例分段需要

  • 图像中所有对象的对象检测。这里的目标是对单个对象进行分类,并使用边界框对每个对象实例进行定位
  • 分割每个实例。这里的目标是在不区分对象实例的情况下,将每个像素分类到一组固定的类别中

屏蔽 R-CNN

屏蔽 R-CNN 扩展更快 R-CNN。

屏蔽 R-CNN 和更快的 R-CNN 有什么不同?

掩模 R-CNN 具有用于以像素到像素的方式预测每个感兴趣区域(RoI)上的分割掩模的附加分支

更快的 R-CNN 不是为网络输入和输出之间的像素到像素对齐而设计的。

更快的 R-CNN 有两个输出

  • 对于每个候选对象,类别标签和包围盒偏移;

屏蔽 R-CNN 有三个输出

  • 对于每个候选对象,类别标签和包围盒偏移;
  • 第三个输出是对象遮罩

口罩 R-CNN 和更快的 R-CNN 有什么相似之处?

-掩码 R-CNN 和更快的 R-CNN 都有一个用于分类和包围盒回归的分支。

-两者都使用 ResNet 101 架构从图像中提取特征。

-两者都使用区域提议网络(RPN)来生成兴趣区域(RoI)

Mask R-CNN 是如何工作的?

掩模 R-CNN 模型分为两部分

  • 区域提议网络(RPN)提出候选对象包围盒。
  • 二进制掩码分类器,为每个类别生成掩码

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

Mask R-CNN Source: [Mask R-CNN Paper](https://arxiv.org/pdf/1703.06870.pdf)

  • 图像通过 CNN 运行以生成特征地图。
  • 区域提议网络(RPN)使用一个 CNN 来生成多个感兴趣区域(RoI ),使用一个轻量级的二进制分类器。它在图像上使用了 9 个定位框。分类器返回对象/非对象分数。非最大抑制应用于具有高客观性分数的锚点
  • RoI 对准网络输出多个边界框而不是单个确定的边界框,并将它们扭曲成固定的尺寸。
  • 然后将扭曲的要素输入到完全连接的图层中,使用 softmax 进行分类,并使用回归模型进一步优化边界框预测
  • 扭曲的特征也被送入掩模分类器,该分类器由两个 CNN 组成,为每个 RoI 输出一个二进制掩模。掩码分类器允许网络为每个类别生成掩码,而不会在类别之间产生竞争

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

锚箱

Mask R-CNN 使用锚定框来检测图像中的多个对象、不同比例的对象以及重叠的对象。这提高了目标检测的速度和效率。

锚点是一组具有一定高度和宽度的预定义边界框。定义这些框是为了捕捉要检测的特定对象类的比例和纵横比。

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

Image with multiple anchor boxes Source: matterport

为了预测图像中的多个对象或对象的多个实例,Mask R-CNN 进行了数千次预测。最终的目标检测是通过去除属于背景类的锚框来完成的,剩余的锚框通过它们的置信度得分来过滤。我们发现 IoU 大于 0.5 的锚盒。使用下面解释的非最大抑制来选择具有最大置信度得分的锚框

并集上的交集— IoU

IoU 通过算法计算两个边界框的并集上的交集,即地面真实的边界框和预测框的边界框

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

当 IoU 为 1 时,这将意味着预测的和真实边界框完全重叠。

为了在图像中检测一次对象,非最大抑制会考虑 IoU >为 0.5 的所有边界框

如果我有多个 IoU 大于 0.5 的边界框怎么办?

非最大抑制

  • 非最大抑制将移除 IoU 小于或等于 0.5 的所有边界框
  • 选取 IoU 值最高的边界框,并抑制其他边界框以识别同一对象

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

Bounding refinement after applying Non Max Suppression

使用 Keras 屏蔽 R-CNN 代码

为此我们使用**matter port Mask R-CNN**。本例中使用的 Mask R-CNN 模型是在 COCO 数据集上预训练的。

步骤 1:克隆屏蔽 R-CNN 库

git clone [https://github.com/matterport/Mask_RCNN.git](https://github.com/matterport/Mask_RCNN.git)cd Mask_RCNN$ python setup.py install

第二步:从matter port下载 COCO 模型的预训练权重。将文件放在名为“mask_rcnn_coco.h5”的 Mask_RCNN 文件夹中

第三步:导入所需的库

# import the necessary packages
from mrcnn.config import Config
from mrcnn import model as modellib
from mrcnn import visualize
import mrcnn
import numpy as np
import colorsys
import argparse
import imutils
import random
import cv2
import osfrom matplotlib import pyplot
from matplotlib.patches import Rectangle%matplotlib inline

第四步:我们创建一个myMaskRCNNConfig类,它继承了Mask R-CNN Config类。**

因为我正在使用 CPU,所以设置 GPU_COUNT=1

COCO 数据集有 80 个标签,所以我们将 NUM_CLASSES 设置为 80 + 1(用于背景)

class myMaskRCNNConfig(Config):
 # give the configuration a recognizable name
 **NAME = “MaskRCNN_inference”**

 # set the number of GPUs to use along with the number of images
 # per GPU
 **GPU_COUNT = 1**
 **IMAGES_PER_GPU = 1**

 # number of classes (we would normally add +1 for the background
 # but the background class is *already* included in the class
 # names)
 **NUM_CLASSES = 1+80**

****步骤 5:创建一个 myMaskRCNNConfig的实例

config = myMaskRCNNConfig()

**步骤 6:使用我们创建的配置实例**初始化“推理”的屏蔽 R-CNN 模型

print(“loading  weights for Mask R-CNN model…”)
**model = modellib.MaskRCNN(mode=”inference”, config=config, model_dir=’./’)**

****第七步:为屏蔽 R-CNN 加载权重。这些是 COCO 数据集的预训练权重

**model.load_weights(‘mask_rcnn_coco.h5’, by_name=True)**

步骤 8:定义 coco 模型的 80 个类和 1 个用于背景(BG)

**class_names** = [**‘BG’**, ‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’,
 ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’,
 ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’,
 ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’,
 ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’,
 ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’,
 ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’,
 ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’,
 ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’,
 ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’,
 ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’,
 ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’,
 ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’,
 ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’,
 ‘teddy bear’, ‘hair drier’, ‘toothbrush’]

步骤 9:为图像中检测到的对象绘制方框的功能

# draw an image with detected objects

**def draw_image_with_boxes(filename, boxes_list):**
     # load the image
     data = pyplot.imread(filename)
     # plot the image
     pyplot.imshow(data)
     # get the context for drawing boxes
     ax = pyplot.gca()
     # plot each box
     for box in boxes_list:
          # get coordinates
          y1, x1, y2, x2 = box
          # calculate width and height of the box
          width, height = x2 - x1, y2 - y1
          # create the shape
          rect = Rectangle((x1, y1), width, height, fill=False, color='red', lw=5)
          # draw the box
          ax.add_patch(rect)
     # show the plot
     pyplot.show()

步骤 10:我们最终做出预测,并在检测到的物体周围画出包围盒

加载图像,然后将其转换为 numpy 数组

from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_arrayimg = load_img(‘donuts.jpg’)pyplot.imshow(img)img = img_to_array(img)

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

Original image of Donuts

我们现在做出预测

# make prediction
results = model.detect([img], verbose=0)

结果是我们传递给 detect() 函数的图像的字典。

字典中有边界框、遮罩、类别和分数的关键字。每个键指向图像中检测到的多个可能对象的列表。

这本字典的关键字是

  • ROI’:被检测物体的感兴趣区域(ROI)。
  • 遮罩’:被检测对象的遮罩。
  • Class _ ids’:被检测对象的类整数。
  • 分数’:每个预测类别的置信概率。

步骤 11:通过在感兴趣区域(ROI)周围绘制边界框来可视化结果

# visualize the results
draw_image_with_boxes('donuts.jpg', results[0]['rois'])

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

画面具

# get dictionary for first prediction
**from mrcnn.visualize import display_instances
r = results[0]**# show photo with bounding boxes, masks, class labels and scores
**display_instances(img, r[‘rois’], r[‘masks’], r[‘class_ids’], class_names, r[‘scores’])**

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

Bounding boxes, masks, class and their scores using Mask R-CNN

要查找对象和类的数量

classes= r['class_ids']
print("Total Objects found", len(classes))
for i in range(len(classes)):
    print(class_names[classes[i]])

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

No. of objects and their classes

使用 github 提供的掩码 R-CNN 进行预测的代码

参考资料:

面具 R-CNN 纸

https://engineering . matter port . com/splash-of-color-instance-segmentation-with-mask-r-CNN-and-tensor flow-7c 761 e 238 b 46

https://medium . com/@ Jonathan _ hui/image-segmentation-with-mask-r-CNN-ebe6d 793272

http://www . cs . Toronto . edu/~ urta sun/courses/CSC 2541/08 _ instance . pdf

** [## 如何在 Keras 中使用 Mask R-CNN 进行照片中的对象检测

目标检测是计算机视觉中的一项任务,涉及识别一个或多个目标的存在、位置和类型

machinelearningmastery.com](https://machinelearningmastery.com/how-to-perform-object-detection-in-photographs-with-mask-r-cnn-in-keras/)**

机器学习中的概念漂移和模型衰退

原文:https://towardsdatascience.com/concept-drift-and-model-decay-in-machine-learning-a98a809ea8d4?source=collection_archive---------7-----------------------

概念漂移是基本相同数据的标签随时间的漂移。它导致新数据的决策边界与根据早期数据/标签建立的模型的决策边界不同。对随机采样的新数据进行评分可以检测出偏差,使我们能够根据需要触发昂贵的重新标记/重新训练任务…

没有什么是永恒的。甚至没有一个精心构建的模型是建立在大量标记良好的数据之上的。它的预测能力会随着时间而衰减。概括地说,模型会以两种方式衰退。由于数据漂移或由于概念漂移。在数据漂移的情况下,数据会随着时间的推移而演变,从而可能引入以前未见过的各种数据和所需的新类别。但是对以前标记的数据没有影响。在概念漂移的情况下,我们对数据的解释随着时间而变化,即使数据的总体分布没有变化。这导致终端用户模型预测解释为对于相同/相似数据已经随时间恶化。此处的修复需要重新标记受影响的旧数据并重新训练模型。数据和概念也可能同时漂移,使问题变得更加复杂…

就像让湖人队在世界职业棒球大赛中对阵爱国者队,当概念/比赛和数据/球员都改变时,看台上会有很多人挠头……

这篇文章是关于后期制作场景中概念漂移的检测,在这种场景中,根据旧数据训练的模型用于对新输入的数据进行分类。对旧数据进行持续的重新标记和重新训练是极其昂贵的,因此我们希望检测概念漂移,并根据需要采取行动。为了便于说明和可视化,我们坚持二维(即两个特征)和两个类来划分特征空间。但是检测的方法是通用的。一旦检测到漂移,就需要更新模型。细节将取决于应用,但一般来说:

  • 如果我们诊断出一个概念漂移,那么受影响的旧数据也需要重新标记并重新训练模型。
  • 如果我们诊断出数据漂移,则需要标记足够多的新数据以引入新的类,并重新训练模型
  • 当我们发现数据和概念都发生了漂移时,上述两种情况都出现了

这个帖子的重点是概念漂移。数据漂移是本系列下一篇文章的主题。我们查看一些代码片段进行说明,但是可以从 github 下载复制报告结果的完整代码。

更新(2020 年 8 月 21 日):在 neptune.ai 上看到了一篇关于这个话题的好文章,作者是 Shibsankar Das。处理概念漂移的最佳实践

1.概念漂移

当我们对数据的解释随着时间而变化时,即使数据可能没有变化,也会出现概念漂移。我们过去一致认为属于 A 类的东西,我们现在声称它应该属于 B 类,因为我们对 A 和 B 的性质的理解已经改变了。这是纯粹的概念漂移。显然需要进一步的解释和背景。例如,一段文本在 1960 年可以被合法地标记为属于一个类别,但在 2019 年属于另一个类别。因此,1960 年建立的模型对 2019 年相同数据的预测将会有很大误差。下面的图 1 是一个极端的例子,也许是用来说明游戏规则改变时的问题。

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

Figure 1. Data has not changed. But our interpretation and assigned class thereof have.

2.改变决策界限

概念漂移可以被看作是决策边界随时间的变化。考虑图 2 中模拟的两类情况。

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

Figure 2. Concept drift can be detected by the divergence of model & data decision boundaries and the concomitant loss of predictive ability

  • 在时间 t1,线 y = x 清楚地将类分开,并且有一些好的分隔来引导。我们在该数据上训练 SVM 分类器,并且获得的模型决策边界与模拟数据的决策边界完全一致。暂时一切都很好,我们的预测是正确的
  • 新数据在稍后的时间 t2 到来,我们手动标记它(测试预测是否仍然正确的唯一方法!).所有的标注都是根据我们在标注时对数据的理解。这是关键点。随着我们对数据的解释的发展,我们最终将一些数据放在 A 中(同时在时间 t1 将类似的数据放在 B 中),并将一些其他数据放在 B 中(同时在时间 t1 将类似的数据放在 A 中)。
  • 因此,新数据有一个明显的决策边界,该边界与基于类似数据的解释建立的模型决策边界不一致。因此,基于模型的预测对于标记的区域来说是错误的。

因此,数据决策边界的不断变化是概念漂移的症结所在。那么,检测它的唯一方法当然是努力在常规基础上标记至少一些新数据,并寻找模型预测能力的退化。当我们感到退化不再可容忍时,我们将需要根据当前对数据的理解,用重新标记的数据重建模型。

3.模拟概念漂移

我们继续处理如图 2 所示的类似问题,但是是定量的,以便触发“重建!”当模型性能下降到阈值时发出信号。这是问题陈述。

  1. 数据决策边界是线性的(为了简单起见,这不是必需的),开始时与水平线成 5 度角。
  2. 我们在这个标记良好的数据上训练一个 SVM 分类器。
  3. 新一批数据到达时,每一批都遵循逆时针旋转 0.2 度的判定边界。
  4. 我们在批中随机抽取 10%的新数据,并根据手头的模型评估 f1 分数。如果 f1 分数低于可接受的值,我们将触发重新标记任务,并继续上面的步骤 2

3.1 生成数据

A 类和 B 类都将从 1000 个数据点开始。每新增一批,每班加 125 分。每批的数据判定界限( w )不同。

3.2 构建 SVM 分类器

我们在标记数据上建立 SVM 模型,并使用该模型获得测试/采样数据的 f1 分数。

3.3 检测衰变

标记 25 个随机选择的数据点(该批的 10%),并与手头最新模型的预测进行比较。当样本的 f1 分数低于阈值(此处为 0.925)时,我们会触发重新标记/重新训练任务。

3.4 重新贴标签

随着数据决策边界的旋转,并且越来越偏离模型的决策边界,模型预测会持续变差。当采样数据的 f1 分数下降到大约 0.925 时,我们根据当前数据决策边界重新标记所有数据*。*现在,在我们具有 2 个特征和线性数据/模型决策边界的简单几何图形中,很容易找出错误分类的新数据。但一般来说不会,所以我们重新标记所有数据。

3.5 重新训练以完成循环

该模型需要使用更新的标签重新训练,以便恢复其预测能力。

4.结果

下面的图 3 证实了我们的预期。经过几个批次的漂移后,新采样的数据与起始/最终(当 f1 分数下降到 0.925 时)数据判定边界一起绘制。这些图显示了会被先前构建的模型错误分类的新数据量。根据最终数据决策边界重新标记,并在该点重建模型,恢复完美的 f1 分数。所有数据在重建后绘制,以显示更新后的模型的决策边界完美地分离了两个类。

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

Figure 3. As the new data obeys a continuously rotating decision boundary, the model predictions for randomly sampled new data get steadily worse. The misclassified zones are visible when just the new data alone is plotted. When a threshold for quality is breached, we trigger a task to re-label all the data as per the decision boundary of the new data and rebuild the model. The dense plots after rebuild show all the data to be perfectly separated by the model/data decision boundary.

下面的图 4 显示了模型随着概念的漂移而衰退,随后是在重新标记和重建任务后的恢复。旋转的总角度是概念漂移的代表。

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

Figure 4. The f1-score of the model suffers as the model’s decision boundary gets farther and farther away from the decision boundary of the new data. It recovers upon rebuilding

5.结论

考虑到需要手动重新标记旧数据,修复概念漂移驱动的模型衰减可能会很昂贵。可以通过全局测量来检测漂移,例如采样的新数据的 f1 分数恶化。我们可以在这里对所有数据进行完全的重新标记,因为我们的标记不是手动的,而是由公式驱动的。然而,在真实情况下,这是不可能的。即使是粗略识别需要重新标记的旧数据,也有助于减少手动工作。需要进一步研究的东西。

我们将在下一篇文章中继续讨论数据漂移和相关问题。

原载于 2019 年 4 月 25 日【http://xplordat.com】

概念学习和特征空间

原文:https://towardsdatascience.com/concept-learning-and-feature-spaces-45cee19e49db?source=collection_archive---------14-----------------------

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

我们如何教会机器理解一个想法?

2004 年夏天,世界各地数百万的电影观众体验了《我,机器人》——《T1》,这部电影描绘了一个美好的未来,在这个未来里,人形机器仆人将成为社会不可或缺的一部分*。*这部电影受到阿西莫夫同名短篇小说集的启发,邀请观众提出与机器智能、人工意识、强人工智能以及最终对人类意味着什么有关的常见问题。

虽然有更好的电影处理类似的哲学主题,童年怀旧是一个强大的东西;所以,在考虑如何最好地介绍概念学习的时候,一个来自我,机器人的场景浮现在脑海里。在这个场景中,侦探史普纳(威尔·史密斯饰)审问一个被怀疑谋杀了它的创造者的机器人。这两种智能讨论人类的情感,Spooner 试图激怒机器人,以表明它已经学会模拟愤怒:

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

“机器人会写交响乐吗?机器人能把画布变成美丽的杰作吗?”—勺子

为了回答这个问题,我们首先要问自己,机器人是否能理解交响乐是什么?机器能学会从尖叫的婴儿、黑板上的钉子或麦莉·赛勒斯的音乐中分辨出交响乐吗?毕竟,为了让机器创作交响乐,它必须首先能够识别一首。

概念学习

教机器区分例子和非例子的想法,如交响乐,愤怒,美丽,狗,猫等。叫做概念学习

在**概念学习中,**我们的目标是使用数据来教会机器解决二分类问题。也就是说,将数据点分类为属于或不属于特定的概念或想法。

从形式上来说,概念学习需要试图找到一种学习方法和一组特征,用它们来引导机器学习所选概念的一组特征的特征函数。这只是一个布尔值函数,给定某个示例的特征值,如果该示例属于或不属于该概念,则分别为该示例分配值 10

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

Characteristic function for lookin’ good — Looks_Good(Will Smith) = 1, Looks_Good(You) = 0

在我的关于解读数据的帖子中,我谈到了采用好的数据观点的重要性和需要注意的地方。特征只是从我们的数据中得到的列/属性,所以为概念学习选择特征,本质上是为学习问题选择一个数据观点。对于概念学习来说,一个好的数据观点是细粒度的和相关的,足以让我们描述我们试图学习的概念,但不会充斥着不必要的信息。概念学习中的一半战斗是选择一组特征:如果特征选择不好,可能根本不可能学习任何类似于特征函数的东西,例如,想象一下试图通过只看动物的高度来判断它是不是狗。另一方面,如果我们选择在我们的学习模型中包含太多的特征,噪音和增加的复杂性会使学习过程变得非常困难。

如果我们觉得我们可以从足够大的数据集中直观地捕捉到一个具有一组特征的概念,我们实际上如何让机器尝试从这些特征样本中学习呢?对我们人类来说幸运的是,有一种相当优雅的方式来数学地描述不同数据点有多“接近”,因此,通过精心选择的特征,属于该概念的示例将分组在一起,并以机器可以理解的数字方式与非示例区分开来。这种“接近度”的描述要求我们在一个特征空间中表示我们的数据。

特征空间中的概念

给定一个概念学习问题的一组特征,我们可以将该特征集解释为一个特征空间。

给定一些数据,特征空间就是从该数据中选择的一组特征的所有可能值的集合。总是可以仅使用数字来表示特征值,从而表示特征空间,并且进一步以这样的方式来表示,使得特征空间可以被解释为实空间。

我们所说的真实空间是什么意思?一位数学家会说,我们的 n 维特征空间可以表示为同构于 向量空间,但是它们的意思是我们可以在我们的特征空间中移动和跳舞,并且有 n 维空间可以让我们进行隐喻性的移动。

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

More dimensions? More room for activities.

抛开跳舞不谈,真正重要的是我们可以将我们的数据表示为一个特征向量,给出在 n 维空间中的坐标,其中 n 是(通常)特征的数量。举个例子,假设我们有特征为*高(米)、宽(米)重(公斤)的数据。*我们可以把它写成一个元组(高,宽,重),我们可以把它看作一个三维空间:

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

3D feature space for (height, width, weight) populated with some examples.

数据的这种空间表示非常有用的原因之一是,它允许我们在数据中引入“距离”的概念,从而引入“接近”的概念。例如,如果我们试图学习“狗的概念”,那么猫应该比房子更接近狗,这似乎是很自然的。可以肯定地说,人们并不经常把房子误认为是狗,但可能有一些相当像狗的猫。

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

Left: Atchoum, the dog-cat. Right: The doggiest house I could find.

给定一些关于狗和非狗的标记数据,我们可以选择一些适当的特征,并在我们的特征空间中绘制数据。如果我们在我们的特征空间中看到代表狗的数据点的清晰聚类,那么我们的数据中的特征一定很好地表征了狗。如果我们的特征在描述狗方面做得很好,我们可能会期望看到任何表示猫的数据点比我们期望看到的任何房子更接近狗群。在我们的数据具有良好特征的理想场景中,我们的特征空间中的 空间距离类似于我们试图学习的目标概念的概念距离 。下面我们可以看到一个概念学习问题的三个不同质量的可能特征空间,有两个特征:

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

Examples of different 2 dimensional feature spaces for a concept learning problem.

上图中最左边的特征空间描绘了概念学习的理想特征空间。属于目标概念的红色数据点可与不属于目标概念的蓝色数据点分开。在这里,空间距离对应的是概念距离,这正是我们想要的。这意味着存在基于这两个特征的完美特征函数,并且该目标概念因此是可学习的。中间的图像描绘了用于概念学习的更真实的特征空间。空间距离近似对应于概念距离,并且由于非完美分离,我们不能基于这些特征定义完美的特征函数,但是我们可以学习对具有小误差的特征函数的有用近似。在一个差的特征空间的最右边的例子中,我们甚至不能希望用任何合理的误差量来近似一个连续的特征函数,因为例子和非例子是混合的。在这种情况下,我们选择的数据特征在将空间距离与概念距离相关联方面表现不佳。

如果我们有一个相对较好的特征空间,如上面的前两个例子,我们的分类问题就变成了如何最好地划分我们的特征空间,以便以最小的误差捕获概念的问题,这是一个纯数值问题,是机器的适当领域。这是特征空间和概念学习之间的本质结合。

绘制决策边界

如果我们的直觉告诉我们,在我们的 n 维特征空间中存在代表概念的潜在信息,那么让机器使用这些特征来学习概念就像给它一些训练数据并要求它在空间中绘制一条边界一样简单,以最小的误差将示例和非示例分开。然后,为了分类新的和以前没有见过的例子,我们可以简单地计算它们在决策边界的哪一边。

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

One possible decision boundary for the given 2D concept learning problem.

你听说过的每一种分类学习模型:支持向量机、神经网络、朴素贝叶斯分类器、K 近邻、遗传算法等等。所有这些都(明确地或隐含地)依赖于这种特征空间的思想,并且它们都是用于寻找好的决策边界的简单不同的方法,根据基础特征空间的性质具有不同的优点和缺点。

如果你是机器学习的新手,你可能会问:为什么我们需要让机器来解决这些问题,为什么我们不能可视化我们的特征空间并绘制我们自己的决策边界?答案是双重的:首先,我们根本不是在寻找“画”一个决策边界——我们在寻找一个函数,它将一个例子的特征值作为参数,告诉我们这个例子是否属于这个概念。虽然这个函数可以在特征空间中画出来,但是这个理论的视觉元素只是为了帮助你理解人类。这台机器没有将特征空间可视化——它只是在执行纯粹的数字运算。为了找到一个对应于决策边界的函数,你会发现你必须自己做这些相同的计算,最好是留给机器去做。其次,大多数概念和想法都很复杂,需要高维数据和特征空间来捕捉。这些数据中的模式对于具有三维直觉的人类来说很少是显而易见的。机器不会像我们一样看到数据——它们的感官是数字的,它们的决策是二元的。人类的直觉对于让机器尽可能容易地解决概念学习问题是必要的,但寻找模式是机器的工作。

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

Where does dog end and cat begin? Learning to recognise a concept in an n-by-n image is an n²-dimensional learning problem if we use each pixel intensity as a feature.

机器人会创作交响乐吗?

令人惊讶的是,一个机器人已经做到了。AIVA 是世界上第一个被音乐协会(SACEM)认可的人工智能作曲家。AIVA 代表人工智能虚拟艺术家——它的主要学习方法使用在大量无版权的经典分区上训练的深度神经网络。AIVA 的音乐已经被用于商业用途,其背后的团队正在继续进行音乐创作,并探索 AIVA 表达其创造力的其他途径。

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

Suck it Spooner!

AIVA 正在解决的不仅仅是一个简单的概念学习问题,但这篇文章中提出的想法确实是所有机器学习的核心,并将允许我们在未来的博客文章中谈论更复杂的想法。AIVA 不会独自完成所有的作品;它需要人为输入更高层次的元素,如配器,所以从某种意义上说,也许斯普纳侦探是对的,但似乎我们离独立的机器作曲家并不太远。

你可以在这里听 AIVA 的音乐,也可以在这里阅读一篇关于 AIVA 的深度文章。

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

这是一个总结——感谢阅读!

这篇博文是我下一篇博文的前奏,我的下一篇博文将更具技术性,并专注于核心技巧:一种优雅的数学方法,允许我们改善分离并获得更多关于数据的信息,而不增加我们的特征空间的复杂性。敬请期待!

如果你喜欢这个概念学习和功能空间的介绍,请随时联系我( )关于对未来博客文章的任何想法、疑问或建议!

正则化概念

原文:https://towardsdatascience.com/concept-of-regularization-28f593cf9f8c?source=collection_archive---------20-----------------------

这就是为什么正则化是机器学习中重要的一步!

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

让我们考虑我们正在开发一个机器学习模型。该模型通常使用“训练数据集”进行训练,并使用“测试数据集”进行测试。如果数据集未经预处理,模型的准确性通常会下降。事实上,在训练模型之前,大部分时间都花在预处理数据上。

模型精确度低的可能原因是什么?

有两种主要的可能性:

  1. 欠拟合
  2. 过度拟合

欠拟合

欠拟合是一种模型没有学习到数据集的广义模式的现象。这可能是由于数据集不充分,或者对该特定数据集使用了不适当的机器学习算法。

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

Underfitting

让我们考虑一个例子。该图包含表示正弦曲线的数据点。这些数据点被输入线性回归算法。这条线是模型的预测输出。很明显,模型的精确度并不是很高!为什么这样因为线性模型是在非线性数据集上训练的。因此,用一条线性线来拟合非线性数据会过度简化模型。

过度拟合

过度拟合是一种模型从数据集学习过多的现象。过度拟合模型在对其进行训练的数据中表现得非常好,但是在对一组新数据执行时,其准确性往往会降低。

让我们考虑同样的例子。在这种情况下,让我们使用多项式回归模型。通过使用多项式特征变换,可以找到数组中每个元素的幂,直到指定的幂。存储在多维数组中的这些值可用于输入多项式回归模型。随着多项式特征转换器中指定幂的增加,模型似乎学习到了比所需更多的内容,并且似乎是对训练数据集非常“特定”的输出。

过拟合模型被称为具有高方差

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

overfitting

当基函数的系数较大且相互抵消时,会出现过拟合现象!

正规化防止过度拟合!

正则化技术用于通过在给定的训练集上适当地拟合函数来减少误差,以避免过度拟合。这些函数实质上减少了每个特征的系数(β),从而减少了值被抵消的机会。回归方程的一个例子如下:

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

Linear Regression

正规化的类型

  1. L1
  2. L2
  3. 弹力网

L1(套索正规化):

L1 正则化背后的思想是将数据集减少到仅影响“目标变量”的最重要的特征。L1 正则化增加了等于系数绝对值之和的惩罚。

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

通过添加上述惩罚,一些特征的系数变为 0 ,剩余的特征将是最有用的特征。这种正则化方法可以看作是一种特征选择方法。

L2(岭正则化):

L2 正则化附加了一个等于系数平方值之和的惩罚。

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

等式中的λ是控制惩罚强度的超参数。

当λ→0 时,结果类似于线性回归

当λ→∞,所有特征都减少到 0。

当施加惩罚时,系数不会剧烈变化到 0,而是缓慢降低到 0。因此,与 L1 不同,L2 不能用于特征选择。

在这两种情况下,

惩罚越大,系数越小。

弹性网:

弹性网正则化是 L1 正则化和 L2 正则化的结合。

适用的罚款§如下:

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

在这种情况下,λ是一个共享参数,用于设置 L1 和 L2 之间的比率。因此,结果将是 L1 和 L2 正则化的混合。正则化的几何表示如下所示:

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

正规化的实施

导入所需的库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Lasso,Ridge
from sklearn.pipeline import make_pipeline

加载数据集(本例中,使用了 Ames Housing 数据集:

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

将数据分为“列车数据”和“测试数据”:

from sklearn.model_selection import train_test_splitX = data.iloc[:,:-1]
y = data.SalePriceX_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 9,train_size = 0.5)

1.要执行线性回归:

from sklearn.linear_model import LinearRegression,Lasso,Ridge
from sklearn.metrics import mean_squared_errorregressor = LinearRegression() #Linear model
regressor.fit(X_train,y_train)
y_pred = regressor.predict(X_test)
mean_squared_error(y_test,y_pred)

2.要执行套索回归:

lasso_model = Lasso(alpha = 140,max_iter = 100000, random_state=9)
lasso_model.fit(X_train,y_train) #Lasso model
y_pred = lasso_model.predict(X_test)
mean_squared_error(y_test,y_pred)

3.要执行岭回归,请执行以下操作:

ridge_model = Ridge(alpha = 0.00002,max_iter = 100000,random_state = 9)
ridge_model.fit(X_train,y_train) #Ridge model
y_pred = ridge_model.predict(X_test)
mean_squared_error(y_test,y_pred)

在每种情况下,都要从模型验证的测试数据中找到预测的“目标变量”和实际的“目标变量”之间的均方误差

谢谢你阅读这篇文章。

请通过 LinkedIn 与我联系,或者您可以发到我 LinkedIn 个人资料上的邮箱。

概念化知识图构建管道

原文:https://towardsdatascience.com/conceptualizing-the-knowledge-graph-construction-pipeline-33edb25ab831?source=collection_archive---------10-----------------------

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

互联网的出现使得大量内容创建者能够获取信息。由于这个原因,现在网上有大量的数据。为了提供有用的见解,我们需要一种有效的方式来表示所有这些数据。一种有效的知识表示方法是通过知识图。简而言之,知识图是一个庞大的互联数据网络。知识图是从知识库构建的。知识库从网页上的自由文本、数据库以及音频和视频内容中收集信息。知识图构建过程的基本流程如图 1 所示。

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

Figure 1. The knowledge graph construction pipeline

现在,让我们详细了解一下该管道中发生的流程。

在管道的第一阶段,我们从自由文本中识别事实。最初,我们搜索互联网,通过从自由文本中识别实体和实体涉及的关系来过滤有用的信息。这个识别过程使用自然语言处理技术进行,例如命名实体解析、词汇化和词干化。因此,在第一步中从自由文本中提取的数据可能类似于以下语句的形式。

卢浮宫位于巴黎

进行到管道的第二阶段,语句在知识库中以三元组的形式被概括;这些三元组将使用本体提取过程在不同的本体下分类,该本体提取过程也可以利用自然语言处理技术的能力。三元组由主语、谓语和宾语组成。主语和宾语是由谓语定义的关系中涉及的实体。因此,对于从自由文本中确定的前一个陈述,我们将其分解为以下知识库三元组形式。

  • 主题:卢浮宫
  • 谓语:位于
  • 对象:巴黎

所以在一个知识库内,我们将以 *islocated(卢浮宫,巴黎)*的形式拥有上述关系。这是知识库中的一个三元组。实际上,知识库包括数百万个这样的三元组,我们也称之为事实。这些事实在知识库中被归入本体。本体是特定事实领域的识别类别。因此,本体解释了在那个类别中存在什么样的实体。例如,如果本体是’机场,那么,属于这个类别的一些实体可能包括’爱迪生机场’、戴高乐机场’、曼德利乌机场’等等。

知识库可以是特定领域的,也可以是通用的。医学知识库和学术研究论文知识库是一些特定领域的知识库。然而,通用知识库并不将它们的知识局限于特定的领域。他们对一般的世界事实和多个领域有更广泛的覆盖。

在我们前进到管道的最后一个阶段,即知识图之前,请参考下表,了解从原始论文中理解的各种知识库的一些特征。该表列出了过去几十年中最重要的知识库。

表 1。知识库及其特征

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

https://en.wikipedia.org/w/api.php ^1 维基百科 API :

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

Figure 2. The Freebase Topic Page, where a user adds a sibling property (Source: Bollacker et al. [3])

关于知识库,让我们进一步阐明 NELL 知识库,因为我们将考虑 NELL 处理其事实的方式,作为我们稍后将讨论的管道的知识图构建阶段的样本。

内尔

永无止境的语言学习者(NELL)是卡内基梅隆大学在 2010 年发起的一个项目[5]。它被建模来弥补学习系统和实际人类学习之间的差异。因此,它是基于对事实的不断学习塑造专业知识的概念。自 2010 年以来,内尔一直在不断了解事实。该知识库主要执行两项任务。

  1. 信息提取:搜索语义网以发现新的事实,积累这些事实并不断扩展其知识库。
  2. 增强学习过程:根据以前提取信息的经验,NELL 试图通过返回到前一天学习事实的页面,并搜索更新的事实来提高其学习能力。

内尔的事实是基于本体论的分类:实体或关系。基于实体的本体分类包括可能出现在该域中的实例的子域,而基于关系的本体分类包括基于连接实体实例的关系的事实的子域。NELL 中的事实是三元组(主语-宾语-谓语)的形式。举个例子,

事实示例:“自由女神像位于纽约州

作为三元组,上述事实可以表示为 locatedIn (statueOfLiberty,newYork) 其中,

  • 主题:状态自由
  • 谓词:位于
  • 对象:纽约

使用文本上下文模式、正字法分类器、URL 指定的 ML 模式、学习嵌入、图像分类器和本体扩展器来提取 NELL 的事实。目前 NELL 受到限制,因为它不能修改其定义的学习过程。如果学习的过程可以基于先前的学习经验被动态地增强,NELL 可以改进其事实的质量和累积其事实的性能。

现在,让我们进入流水线的最后阶段,看看知识库中的三元组是如何转换成知识图的。

知识图表

知识图是一个由相互连接的实体组成的大型网络。基于来自知识库的三元组创建连接。知识图的主要目的是识别实体之间缺失的链接。为了进一步阐明这一点,让我们考虑一下从知识库中收集的以下示例关系。

  • 好友(安妮、简)
  • 朋友(简,吉姆)
  • LivesIn(安妮,帕里斯)
  • LivesIn(巴西吉姆)
  • LivesIn(巴西简)
  • 博宁(安妮,巴黎)
  • 博宁(吉姆,巴黎)

如果我们试图建立一个只基于上述关系的基础知识图表,我们将能够看到下面的图表。

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

Figure 3. A knowledge graph constructed only using the observed facts

另一方面,有一些未知的关系没有明确地从知识库中检索出来,例如,

  • 安妮和吉姆是朋友吗?
  • 简的出生地是哪里?

这意味着这种关系可以被认为是缺失的环节。

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

Figure 4. The missing links in the knowledge graph

这些缺失的环节是使用统计关系学习(SRL)框架推断出来的。这些 SRL 框架计算推断/预测链接的相关置信度。以前的工作试图以不同的方式发现新的/缺失的信息,并计算推断这些信息的置信度。这些将在以下段落中简要讨论。

在管道的第一阶段,我们从自由文本中提取事实,我们也经常以错误的事实结束。为了从这些事实中识别出稳定的知识图,Cohen 等人提出了一种对提取的事实进行联合评估的方法论[6]。这种方法的问题是,它只考虑了提取的事实中可能出现的一组微不足道的错误。

作为流水线的第二阶段,我们从提取的事实中找到三元组,这些三元组将构成知识库。继续进行,在最后阶段,我们需要通过从知识库三元组中推断缺失的链接来发现新的事实。为此,继 Cohen 之后,Jiang 等人借助 Markov 逻辑网络来发现提取的事实之间的关系[7]。他们以一阶逻辑规则的形式定义了本体约束。这些约束将管理可以推断的可能关系。然而,在马尔可夫逻辑网络中,我们称之为“谓词”的逻辑关系的变量只能是布尔值。这对于推断事实的可信度是不利的。

这导致了概率软逻辑()的定义,它使用江等人和马尔可夫逻辑网络的概念,并定义了一个复杂的统计关系框架,该框架联合推理所有事实,以基于先前的事实发现新的/缺失的信息[8]。除此之外,PSL 从概率上计算了一个置信度值,这是一个在[0,1]范围内的软真值,以表明 PSL 项目根据所提供的信息认为事实有多真实。

一旦发现了新的/缺失的信息,并且计算了它们的置信度,我们就可以用高度可信的事实来构建知识图。这将为我们提供一个图表,其中除了提取的原始事实之外,还提供了无法明确驱动的新信息。这就是我们如何用知识库中的事实和基于现有观察新发现的事实构建知识图表。

最后,当我们在更高的层面上总结知识图管道的这些级联步骤时,以下是在构建知识图时发生的过程[9]。

阶段 1 :从自由文本中提取事实

  • 从自由文本、非结构化数据源和半结构化数据源中提取数据。
  • 处理这些原始数据是为了提取信息。这涉及到实体、关系和属性的提取,它们是进一步定义实体和关系的属性。
  • 如果数据已经结构化,与步骤 1 不同,该数据将直接与来自第三方知识库的信息融合。
  • 在此之后,各种自然语言处理技术将应用于融合的知识和处理的数据之上。这包括共同引用解析、命名实体解析、实体消歧等等。

阶段 2 :从提取的事实中公式化三元组

  • 以上步骤结束了知识库信息的预处理。然后,执行本体提取过程,以对提取的实体和它们各自的本体下的关系进行分类。
  • 进行本体形式化后,事实将被提炼并作为三元组存储在知识库中。

阶段 3 :用新的链接和置信度构建知识图

  • 为了从知识库构建知识图,将对这些三元组应用统计关系学习(SRL)。
  • SRL 过程为每个事实而不是整个领域计算置信度,以确定这些事实在多大程度上是正确的。
  • 在构建知识图时,将使用置信度来识别缺失的链接,并将形成新推断的关系链接。

由于推理中的置信度被合并到知识图中,一旦知识图被构建,关于事实在多大程度上被认为是真实的决定也可以基于置信度。因此,Cayley [10]生成的电影演员领域的样本知识图如下所示。

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

Figure 4. A sample knowledge graph of a movie actors domain

随后,这种知识图可以用于信息检索系统、聊天机器人、网络应用、知识管理系统等。,以有效地提供对用户查询的响应。

结论

到目前为止,我们已经提供了整个知识图管道如何工作的抽象解释。使用这些阶段中指定的技术将保证发现丢失的链接。然而,在知识图谱社区中仍然存在一个公开的未知数,即根据人类的观点识别错误的事实或三元组。目前,我们有基于领域和事实集计算现有和发现的关系的置信度的方法。然而,这并没有提供一种可靠的方法来判断事实是否会被实际的人类评估者评估为有效的事实。因此,在我们的下一篇文章中,我们将进一步详细阐述我们如何使用概率软逻辑等统计关系框架来推断缺失的环节,以及如何将足够的监督水平关联到模型中,以将事实与知识图中的众包真相相匹配。

参考

[1] Auer,s .,Bizer,c .,Kobilarov,g .,Lehmann,j .,Cyganiak,r .,& Ives,Z. (2007 年)。Dbpedia:开放数据网络的核心。在语义网中(第 722-735 页)。斯普林格,柏林,海德堡。

[2] Lenat,D. B .,& Guha,R. V. (1991 年)。Cyc 表示语言 CycL 的演变。美国计算机学会 SIGART 通报,2(3),84-87。

[3]博拉克,k .,埃文斯,c .,帕里托什,p .,斯特奇,t .,泰勒,J. (2008 年 6 月)。Freebase:一个用于构建人类知识的合作创建的图形数据库。2008 年 ACM SIGMOD 数据管理国际会议论文集(第 1247-1250 页)。AcM。

[4]vrandei,d .,& krtzsch,M. (2014 年)。维基数据:一个免费的协作知识库。美国计算机学会的通讯,57(10),78-85。

[5] Betteridge,j .,Carlson,a .,Hong,S. A .,Hruschka Jr .,E. R .,Law,E. L .,Mitchell,T. M .,& Wang,S. H. (2009 年)。迈向永无止境的语言学习。AAAI 春季研讨会:从阅读中学习和学会阅读(第 1-2 页)。

[6]科恩,W. W .,考茨,h .,&麦卡勒斯特,D. (2000 年 8 月)。强化软信息源。《第六届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集》(第 255–259 页)。ACM。

[7]江,s,劳得,d .,,窦,D. (2012 年 12 月).使用马尔可夫逻辑学习提炼自动提取的知识库。在数据挖掘(ICDM),2012 年 IEEE 第 12 届国际会议上(第 912-917 页)。IEEE。

[8]布罗克勒、米哈尔科娃和格图尔(2012 年)。概率相似逻辑。arXiv 预印本 arXiv:1203.3469。

[9] 刘峤, 李杨, 段宏, 刘瑶, & 秦志光. (2016). 知识图谱构建技术综述. 计算机研究与发展, 53(3), 582–600.

[10]开源图形数据库:https://cayley.io/

图片来源:【https://www.iconfinder.com/

条件独立性——贝叶斯网络的支柱

原文:https://towardsdatascience.com/conditional-independence-the-backbone-of-bayesian-networks-85710f1b35b?source=collection_archive---------3-----------------------

条件独立性直觉、推导和例子

有时候维基百科里的解释并不是最容易理解的。

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

From https://en.wikipedia.org/wiki/Conditional_independence

1.条件独立性的直觉

假设 A孩子的身高B孩子认识的单词数。似乎当 A 为高时, B 也为高。

有**一条信息会让 A 和 B 完全独立。**那会是什么?

孩子的年龄。

孩子知道的身高和单词数不是独立的,但如果你提供孩子的年龄,它们是有条件独立的

2.数学形式

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

**A**: The height of a child
**B**: The # of words that the child knows
**C**: The child's age

记住这句话的更好方法是:

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

条件独立性基本上就是独立性的概念 P(A ∩ B) = P(A) * P(B) 应用于条件模型。

但是我见过的定义不仅有 P(A ∩ B|C)还有 P(A|B ∩ C)!

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

为什么当(Aㅛ B)|C 时,P(A|B ∩ C) = P(A|C)?

证据来了。

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

条件独立的要旨:知道 C 使 A 和 B 独立。

P(A,B|**C**) = P(A|**C**) * P(B|**C**)

3.应用程序🔥

为什么有条件的独立很重要?

因为它是我们使用的许多统计模型的基础。(例如,潜在类别模型、因素分析、图形模型等。)

A.贝叶斯网络(又名图形模型)中的条件独立性

贝叶斯网络使用图表示联合分布。具体来说,它是一个 有向无环图 ,其中每条边是一个条件依赖**,而每一个节点是一个独特的随机变量。它还有很多其他的名字:信念网络、决策网络、因果网络、贝叶斯(ian)模型或概率有向无环图模型等。**

看起来是这样的:

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

From Wikipedia: A simple Bayesian Network with conditional probability tables

为了让贝叶斯网络为概率分布建模,它依赖于一个重要的假设:给定其父变量,每个变量都有条件地独立于其非后代变量。

例如,我们可以将 P(草湿|洒水器,雨)简化为 P(草湿|洒水器),因为草湿有条件地独立于其非后代,给定洒水器

利用这个性质,我们可以将整个联合分布简化为下面的公式:

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

这个近似(**条件独立假设)**有什么了不起的?

变量之间的条件独立可以大大减少参数的数量。

这减少了大量的计算,因为我们现在只考虑它的父节点,而忽略其他所有的东西。

我们来看看数字。

假设您有 n 个二进制变量(= n 个节点)。

无约束联合分布需要 O(2^n) 概率

对于一个贝叶斯网络任意节点最多有 k 个父节点,我们只需要 O(n * 2^k)个概率。(对于一定数量的类别,这可以在线性时间内进行。)

**n = 30 binary variables, k = 4 maximum parents for nodes**• **Unconstrained Joint Distribution**: needs 2^30 (about **1 million**) probabilities -> Intractable!• **Bayesian Network**: needs only **480** probabilities 

我们可以使用条件独立性得到联合分布的有效分解表示。****

B.贝叶斯推理中的条件独立性

比方说,我想估计一下我的博客的参与度。设 p 为读者会为我的文章拍手的比例。我们将从人群中随机选择 n 名读者。对于 **i = 1,…,n,**让 Xi = 1 如果读者鼓掌,或者 Xi = 0 如果她/他不鼓掌。

在一种频率主义者的方法中,我们不把概率分布分配给 p
p 简单来说就是**‘sum(Xi)/n’**。
我们将把 X1,…,Xn 视为独立的随机变量。

另一方面,在贝叶斯推断中,我们假设 p 遵循一个分布,而不仅仅是一个常数。在这个模型中,随机变量 X1,…,Xn不独立,但给定 p 的分布,它们是条件独立的。

C.相关性≠因果关系

“相关性不是因果关系”意味着仅仅因为两件事相关并不一定意味着一个导致另一个。

这里有一个令人捧腹的出租车事故的例子:

一项研究表明,事故数量与出租车司机穿外套之间有着显著的正相关关系。他们发现外套可能会妨碍司机的行动,造成事故。一项新的法律准备禁止出租车司机开车时穿外套。

直到另一项研究指出,下雨时人们会穿外套…😂

P(accidents, coats | rain) = P(accidents | rain) * P(coats | rain)

两件事之间的关联可能是由影响它们的第三个因素造成的。这第三个因素叫做。混杂因素是雨,它是事故和穿外套之间联系的原因。

P(accidents | coats, rain) = P(accidents | coats)

请注意,这并不意味着事故与降雨无关。它的意思是:给定穿着外套的司机,知道下雨并不能给出更多关于事故的信息。

4.条件独立与边际独立

边际独立和普通独立是一样的,

有时,两个随机变量可能不是边际独立的。然而,在我们观察到一些第三变量之后,它们可以变得独立。

5.更多例子!

  • 超速罚款金额 车型 | 速度
  • 肺癌 黄牙 | 吸烟
  • 孩子的基因 祖父母的基因 | 父母的基因
  • 汽车的启动马达工作吗?ㅛ:车上的收音机能用吗? | 电池
  • 未来 过去 | 现在(这是马氏假设!)

他们都是和 A ㅛ B | C 一样的形式。
AB 如果不考虑 C 的话,看起来是相关的。然而,一旦我们将 C 包含在图片中,那么 AB 之间的明显关系就消失了。如你所见,任何因果关系都是潜在的条件独立的。我们永远不会确切知道 A & B 之间的关系,直到我们测试每一个可能的 C (混杂变量)!

有条件的爱:调节神经网络的重正化技术的兴起

原文:https://towardsdatascience.com/conditional-love-the-rise-of-renormalization-techniques-for-neural-network-conditioning-14350cb10a34?source=collection_archive---------6-----------------------

批处理规范化,以及围绕它成长起来的相关规范化策略的动物园,在最近的深度学习研究中扮演了一系列有趣的角色:作为一个神童优化技巧,作为关于 理论严密性讨论的焦点,以及更重要的,但更多的是作为一种旁观者,作为一种灵活和广泛成功的途径,将条件信息注入模型。

条件重正化开始时足够谦虚,作为训练更灵活的风格转移模型的聪明技巧,但多年来,这个最初简单的技巧在复杂性和概念范围方面都有所增长。我不断看到这种策略的新变体出现,不仅仅是在文学的边缘,而是在其最核心和最新颖的进步中:从 2017 年 ImageNet 竞赛的获胜者到 2018 年最令人印象深刻的生成图像模型。我看得越多,就越想讲述这个简单想法的故事,我看着它从一个一次性的技巧发展成为一个广泛适用的以低复杂度的方式集成新信息的方法。

虽然我会一路做一些(相对简单的)数学力学的解释,但我的主要目标是探索条件规范化的不同用途,指出这一思想的发展或扩展点,并大体讲述一个连贯的故事,说明它及其智力后代如何在现代深度学习中发挥越来越重要的作用

什么是调理?

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

从最基本的统计学意义上来说,条件反射包括将某个变量或一组变量固定为固定值,并观察由于将你考虑的世界限制在符合这些条件的范围内而产生的移位分布。如果你考虑温度和月份的联合分布,你对“现在是什么温度”的信念分布,从全年来看,将与以月份=一月为条件的温度分布有意义的不同。联合分布中的其他特征因调节其他变量而改变的程度取决于两组特征在统计上的相关程度。继续我们之前的例子,我们不会特别期望我们在所有温度上的分布与当一周中的一天是星期天时的温度分布不同,因为天气不会以一定会使星期天比其他任何一天更热或更冷的方式变化。如果给定一个特性的条件分布与无条件分布的不同,那么知道该特性的值就给了你关于其余(假定未知)特性值的信息。

你可以通过一个预测框架来考虑这个问题:如果你只是通过从一年的分布中取样来选择一个温度,你的误差在预期中会相当高。如果你知道你在预测一月份的某一天,你可能会大大减少你的误差。事实上,这种简单的概念工具正是用来表示神经网络中的预测问题的:学习 y 的分布(或点估计)预测,以已知变量 X 的值为条件。在预测任务中,希望 X 变量携带大量关于 y 值的信息,以便根据它们建立模型可以减少相对于随机无条件猜测的错误。

因此,由于所有监督模型都以已知输入特征为输出分布的条件,所以所有模型在某种意义上都是有条件的,但我们倾向于将该术语保留给模型的特定子集,在这些模型中,我们使用条件作为控制杠杆,使我们的模型执行所需的行为。这里有一些我们称之为条件反射的重复使用案例,我将在后面详细讨论:

  • 根据所提的具体问题,回答关于图像的问题
  • 从基于特定视觉类别(猫、狗、房子等)的生成图像模型中提取样本
  • 生成模拟某些特定输入图像的视觉风格的图像

所有这些任务的一个共同特征是,在这些情况下,我们希望对模型在部署时执行的计算进行更高程度的控制。我们希望能够提出(半)任意的问题,并得到我们碰巧回答的任何问题的答案,而不是在测试时硬编码的一些图像摘要。我们不只是从所有图像的空间中取样,我们想要告诉模型我们想要取样一只猫,或者我们想要取样一幅莫奈风格的画。

实际上,这种控制是通过设计一种途径来实现的,将某种信息的压缩形式(比如说,一个问题)添加到我们的网络中,并将其与模型的“主要”输入(比如说,一幅图像)合并。然后,我们可以训练模型学习答案的输出分布,条件是图像和问题的固定值,这有望比我们看不到图像或不知道问题是什么更精确。如果我想出于某种实际目的使用图像生成模型(GANs 必须对某种实用的东西有好处),那么如果我能给模型一个请求并让它给我一个合理的响应,这个模型会更有用。换句话说,即使图像生成器可以完美地捕捉图像的全局分布,通常我们实际上并不想要从全局分布中采样,我们想要采样一些特定的东西。

我还倾向于将条件反射视为多任务学习的简化形式:我们希望能够执行在某些情况下可能被认为是不同的任务(回答问题 A,回答问题 B),但为此我们使用带有一些条件参数的联合模型,而不是完全独立的模型,因为我们认为任务足够相似,可以从共享参数和提取的特征中受益。

我认为条件作用的世界必须提供一些有趣的概念见解,但在举例之前解释它们有点困难,所以我想带你参观一些不同的条件作用方法,并在此过程中强调差异、技术的发展和问题表述的微妙之处。

模型调节动物园之旅

条件甘斯

就问题表述和机制而言,条件化的最简单形式之一是条件生成对抗网络(GAN)。

在无条件 GAN 中,从某个分布(通常是多元高斯)中采样向量 Z,并训练网络将该向量映射到与真实训练集中的图像无法区分的像素图像中。GAN 的目标是学习将每个可能的样本向量映射到似乎合理的图像输出的参数。在无条件 GAN 中,您可能会学习生成猫和狗的图像,但是为了知道哪个向量对应于其中的一个,您需要选取样本并通过 GAN 向前运行这些样本,这将是一项计算成本很高的任务。

在训练期间,条件 GAN 指定作为其输入的一部分,它试图从哪个类生成,并从本质上激励您的模型学习许多每个类的分布,而不是一个单一的分布一次捕获所有图像类别。您不只是输入采样的 z 向量,而是将 z 与对应于数据分布中特定类别的一键表示连接起来。然后,每当你输入与猫相对应的热门标签时,你就训练网络生成看起来像是从猫的真实分布中提取的图像;当你给狗贴上标签,你就可以根据狗的分布来训练它,等等。

这种连接过程在概念上非常简单:这意味着网络的第一层有更多的参数,传递到更高层的向量表示应该以某种方式捕捉标签的事实,但由于向量对于附加信息来说并不更大,所以它不需要额外的参数。

这种方法的缺点是,当 Z 输入网络时,条件信息只输入一次。这样做的结果是,每一层都需要学习传递后续层需要的信息。举个简单的例子,假设你是 GAN 的第二层。您在类别“cat”下看到一个输入,并意识到您应该将可用的特征(如“脚”、“腿”、“头”等)对齐,以对应于猫的身体。但是你也需要确保传递图像是猫的事实,因为这有助于下一层知道脚应该是猫的脚,头应该是猫的头,等等。这不是模型固有的偏好要做的事情,因此它需要模型能力来学习一种机制,以确保类信息被向前传递。这一弱点引发了这样一个问题:是否有可能在网络中的稍后点重新引入条件信息,而不添加太多额外的参数。

样式转移的实例规范化(2017)

许多有趣的调节工作来自于风格转换的世界,在那里我们希望根据另一个图像的风格统计来调节一个图像的生成。实现这一点的原始方法是直接优化单个图像的像素,使它们与参考图像的激活统计相匹配。但这是非常低效的,因为我们需要对每张图片进行优化,所以我们开始训练网络,它可以接受参考图片,并将其转换为特定风格的风格转换版本,只需向前传递网络。但即使这样,我们也需要为每一种风格训练一个独立的网络。本文,关于风格转换的自适应实例规范化,是对该问题的回应,并建立了一个条件网络,可以训练该网络根据传入的任何风格标签将图像转换为多种不同的风格。

他们通过一种称为自适应实例规范化的技术实现了这一点,因为它建立在现有的批量规范化机制的基础上,并做了一点小小的调整,让它可以针对不同的样式调整不同的激活。批处理规范化有两个部分:

  • 归一化(我们分别根据批均值和方差进行移位和缩放),以及
  • 重正化,其中网络根据学习到的参数重新调整和重新移动标准化的特征值。

典型地,网络将学习每个特征通道的一个伽马和贝塔(如下面的等式所示),并在每个空间位置对该通道使用相同的伽马、贝塔对。

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

条件归一化通过学习每个(channel,style_id)组合的参数对,而不是学习每个通道的单个参数对,来修改这种基本方法。所以,如果我们试图模仿《星夜》,我们用一组参数重新调整每个特征,如果我们试图模仿《蒙娜丽莎》,我们会用另一组参数。

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

A figure from the Adaptive Style Transfer paper showing the differences that can be achieved by using the renormalization parameters corresponding to each style

值得花一点时间对此进行更深入的研究,并对它能够如此有效地工作这一事实留下深刻印象。这些重正化参数一次仅影响一个特征的激活值;没有参数来控制特征之间的交互效果,作为我们正在模仿的风格的函数。它们在任何方面都不是空间或上下文智能的:这是一个纯粹的线性变换,我们将以同样的方式重新调整给定风格的给定功能的激活,而不管该位置的潜在激活的值。

然而,尽管有这些限制,实例规范化被证明是足够强大的,足以在这种情况下产生令人印象深刻的结果,这种简单思想核心的变体已经被应用于各种设置中;这篇文章的其余部分将集中在绘制它的路径。

但首先,快速说明一下术语和知识谱系:MILA 2017 年的一篇论文提出了特征线性调制(FiLM)作为条件机制的总称,这些机制通过根据一些学习或计算的移动和比例因子,独立于其他特征移动和缩放每个特征来操作。

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

A figure from the FiLM paper, showing how channel-wise scale and shift modulation works in a convolutional network

我个人更喜欢这个术语,因为我认为它更清晰地抓住了核心观点,并且不太强调(我认为是正确的)与批处理规范化的联系。然而,后来的论文继续使用“条件规范化”框架,并建立在这个原始的适应性实例规范论文。因此,在这篇文章的其余部分,我可能会在“重正化”和“调制”之间交替使用,因为这两个词表示相同的意思:根据某组参数移动和缩放每个层中的每个特征。一个有趣的问题,也是这个方法变得有趣而普遍的一个问题是:这些参数从何而来?

高根:蒙版场景调节

上述技术的一个有趣的变体是 GauGAN 使用的,绘画生成器在这里找到了。该模型将场景类别的掩码作为输入,将图像的不同部分附加到不同的场景类型。然后,它会为每种场景类型学习一组不同的重正化参数,因此对于每种(场景类型、图层、要素)组合,都有一个唯一的平移和缩放值。

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

A diagram showing how GauGAN works: the user passes in 1) a map corresponding to where in the image they want different kinds of landscape features, and 2) a style image, and the network applies, for example, the conditional parameters corresponding to “tree” in places where that mask is present.

对于图像的每个部分,模型应用与该位置的遮罩中指定的场景类型相对应的重正化参数。因此,就好像我们在使用一个类条件模型,就像前面提到的那些,除了我们在图像的不同位置生成不同的类。这是一个简单的风格转换案例:学习几个离散类别中每个类别的一个参数集,并在整个图像中一次应用一个参数集,GauGAN 根据用户试图在图像的给定区域生成的内容应用其特定于风景的参数。

基于图像的问答

以上两种技术都以离散的分类信息为条件:一个固定的有限的风格集合中的一个风格,一个固定的类别集合中的一个风景类别。在这些情况下,可以只学习与每个类别相对应的唯一参数集,并提取出适用于您尝试进行条件处理的类别的参数集。

但是在某些情况下,您可能希望以一个连续的向量为条件,而不是一个热变量或分类变量,该向量可以在不同的表示形式之间平滑变化,比如一个图像、一个 Word2Vec 向量或一个单词序列:比简单的一个 K 分类值更复杂的东西。在这种情况下,我们不能简单地学习不同的每类参数,因为在连续空间中有无穷多个点;相反,我们需要一个映射函数,它可以接受我们想要调节的任何复杂数据对象,并以调节函数可以使用的方式向前传递信息。(其中“映射函数”通常指“以某种方式处理输入并输出向量的神经网络”)

基于这种直觉,在我这里提到的例子中,问题是接受一个图像和一个关于该图像内容的问题,并给出所提问题的答案。这里,图像被视为主要输入,问题被视为条件输入。作者使用了相同的条件重正化技巧的扩展,但不是为每种风格设置一组缩放和移位参数,**他们训练一个网络来输出给定句子的这些参数值。**更具体地说,给定某个问题,LSTM 学习映射,使得在处理图像的卷积网络中由该问题引起的尺度和偏移以使其输出 softmax 更可能输出该特定问题的答案的方式调节该网络。现在,在给定一些输入的情况下,我们在产生权重的网络中捕获信息,而不是在重新参数化权重本身中捕获关于条件的信息。

面部表情的一次性视频

除了处理复杂数据的能力之外,使用网络将一般输入映射到条件权重的另一个好处是,您可以对您在培训期间从未见过的输入进行条件化,因为网络将(希望)学习到一个可概括的映射。最近的一篇论文利用这一点来训练一个网络,该网络可以生成做出想要的任意表情的人脸帧,即使它只看到人脸的一个例子。在这个问题中,

这个模型需要结合两条信息来生成它的人工图像:
1)我们希望我们的对象制作的表情的面部标志数据

2)对象的至少一张参考照片,在图像顶部绘制地标数据

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

A diagram showing the data sources for one-shot expression transfer. The expression face is turned into landmarks, and a network is run on those landmarks, using conditional feature modulation parameters generated from the source image, to generate the result.

作者选择了一种生成结构,该结构将所需的地标作为输入,并逐渐进行逆卷积,以将它放大为做出表情的整张脸的图像。为了使这不仅仅是一张普通的脸,而是我们的目标的脸做出那种表情,他们在整个生成网络中执行条件重正化,由 CNN 生成的重正化参数将目标脸作为输入。当我们在测试时看到一个新面孔时,我们通过 CNN 传递它,并希望它产生的参数能够很好地调整特征值,以指导该面孔的产生。从条件反射的角度来看,我们可以将这视为一种元学习,网络正在学习如何根据它看到的输入生成自己计算的参数。

说话人条件语音识别

从一组重正化参数的初始核开始,条件归一化方法已经将标准批量范数的概念的边界首先扩展到多个参数集,然后扩展到动态生成的参数。除了产生参数的机制之外,调节方法最近也变得更奇怪和更有创造性;这方面的一个例子是自我调节的技术。在很高的层次上,自我调节是一种根据全局信息的汇总版本来调节局部计算的方法。

在第一个问题中,我们将研究自我调节的应用,目标是执行语音识别,接收音频波形并预测正在说出的单词序列。当这篇论文被写的时候,递归神经网络,或者 RNNs,是像这样的序列对序列问题的标准机制。(一岁左右;目前的技术水平似乎使用了变压器,尽管我个人没有去那个兔子洞检查过。当 rnn 在序列上前进时,它们迭代地累积状态,并使用该状态通知它们在序列中该点的计算。这允许网络结合过去的环境,但是实际上 rnn 倾向于关注最近的过去,并且难以跟踪旧的信息。

在这种大部分是本地计算的情况下,我们可以看到紧凑的全局信息是多么有用。举个例子,如果你只听到一小段文本,不知道说话者的口音,你可能很难理解他们使用的声音是如何映射到单词上的,而如果你缩小来听更多,你可以利用你对单词在英语口音中发音的了解,从波形中正确地解析它们。这或多或少正是本文所做的:它通过聚合整个波形的表示来计算汇总向量(此时它已丢失特定于单词的信息,但仍保留特定于说话人的信息),并将该向量用作网络的输入,该网络生成 RNN 运算中使用的条件重正化参数。

这已经到了我们关于简单统计意义上的条件作用的直觉开始崩溃的地步:我们不是基于一个类别,甚至任何一条外部数据,而是基于包含输入数据点本身的信息,尽管是在不同的尺度上聚合的。这就提出了一个重要而有趣的观点,这个观点将在最近的几个例子中反复出现:即使理论上没有信息也是可以访问的,特征调制也是一个很好的方法,可以在整个计算过程中重复地提供该信息的有效压缩版本。

压缩和激励网络

这种使用概括的全局信息来调节局部特征计算的策略也被发现在现代机器学习时代的典型问题:大规模图像分类中是有效的。2017 年,ImageNet 挑战赛由的“挤压和激励”架构获得冠军。S & E 的定义特征是它使用特征调制的方式来传达关于通道激活的广泛、全局行为的信息,否则在给定的卷积层的有限感受域内是不可见的。

这种机制听起来很熟悉,因为我们到目前为止已经看到了这样的例子:网络通过在图像的所有空间区域上平均给定通道的激活来计算每个通道的全局摘要。然后,将该向量传递到网络中,以生成乘法因子向量(每个通道一个),该向量控制每个空间位置的给定要素的缩放。这与学习比例和移位因子的重正化方法略有不同,但在本质细节上是相似的,因为两者都通过特征式调制来执行调节。

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

An diagram for Squeeze and Excitation networks, showing 1) transforming the spatial features, 2) aggregating them by feature/channel, and 3) using them to shift the values of those channels over the whole image

卷积网络的一个中心问题是:我们如何平衡我们对宽感受域的渴望和我们必须支付的高参数成本,以通过使用更大的卷积核来拓宽该域。这种方法通过为全局信息流创建一条基于条件的路径来回避这些问题,否则这些信息流将成为纯粹的局部计算。

StyleGAN

到目前为止,我们已经看到了以类、外部数据对象或相同输入数据实例的全局表示为条件的模型。虽然这些方法互不相同,但它们都有一个共同的特性,即我们用来制约网络其余部分的信息是一些具体的、现有的、可指定的东西:标签、图像等等。如果你问我们对于一个给定的实例,我们会提前知道,并且可以用语言描述。我们给我们的模型某种提示——类“马”,这种风格“梵高”,一个特定的图像来回答问题——并优化它,使其能够以对应于该提示的方式运行

甘一家采用了这种条件反射范式,并将其颠倒过来。GANs 不是获取一个类或风格向量并学习如何将其映射到特定的期望输出,而是通过获取一个随机噪声向量(它与特定输出没有先验联系)并将其映射到来自数据分布的样本。gan 定义了基于像素的图像和代表这些图像的“代码”向量之间的对应关系。简单地说,当你传入一个向量时,它对应于一个单一的,特定的图像,因为 GAN 只是一堆确定性的变换。

因此,一旦 GAN 被训练,每个向量对应于一个特定的图像,如果我们通过传入该向量来“调节”GAN,它将生成该图像。虽然这种映射在数学上确实存在,但它对于条件作用的典型用例并不特别有用:因为我们无法提前知道哪些向量将对应于哪些类型的图像,而且,即使有了训练好的模型,我们也无法知道我们需要传入什么向量来产生我们想要的输出。找出答案的唯一方法是向前运行模型并进行采样。如果我们幸运的话,附近的向量可能会产生附近的图像,但这在数学上不是必需的。

这是 GANs 的一个核心奇怪之处:因为模型最终建立了向量和输出之间的映射,我们可以说噪声向量携带了指定产生什么图像的信息,即使它一开始并不包含任何有意对该信息的编码。

StyleGAN 利用了这一想法——一个给定的噪声向量携带了指定其产生的特定图像的信息——并使用它来创建一种强大有效的自我调节形式。每次 StyleGAN 运行时,它都会对一个 z 向量进行采样,然后将该向量馈送到一个网络中,该网络会为图像生成层次结构中的每个层和通道生成按特征的调制权重。这可以被看作是在不同时期重新引入和加强全球形象规范的一种方式。

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

StyleGAN samples showing the images you can generate by combining conditioning parameters corresponding to multiple different images

顺便提一下,这个网络被称为 StyleGAN 的原因是,它从我们谈到的第一篇论文中获得了条件重正化的灵感,那篇关于适应性风格转移的论文。使用 StyleGAN 模型,您还可以通过使用对应于网络低层一个图像的归一化参数和对应于较高层另一个图像的归一化参数,进行有趣的转换。这就产生了将一张脸的高级风格特征传递给另一张脸的效果。

如果我们相信作者认为这是在起作用的机制,那么不断传递关于共享全局表示的信息会使生成层更容易以一致的方式运行,并在正在创建的图像的空间位置上进行协调,因为网络不必担心向前传递规范信息。与以前的工作世界相比,这一点尤其正确,在以前的工作世界中,全局规范仅在模型的输入层被馈入一次,并且每个本地代在执行其计算时只能访问本地信息。

我们能从中学到什么?

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

如果你能走到这一步,我既感动又感激。我意识到这篇文章在风格上不同于我以前写的其他文章:与其说是对任何一种技术的详细解释,不如说是一张展示技术之间概念联系的地图。此外,我意识到它是巨大的。那么,考虑到这些方法的机制相对简单,为什么值得我写或者你读呢?

在对象层次上,我认为基于特性的条件规范化是有趣的,因为它的工作效果如此之好令我印象深刻和惊讶。它一次只能修改单个要素的值,它(通常)在所有空间点以相同的方式修改每个要素,并且不管该要素的初始值或该点任何其他要素的初始值如何,它都以相同的量修改每个要素。与你能想象到的处理信息的所有灵活方式相比,这是一个相当迟钝的工具。由于特征调制,网络有可能具有如此一致的不同输出,这一事实更新了我对深层网络的直觉,我怀疑这种方式对更新我的直觉是有用的。

在一个更元的层面上,我发现条件规范化最有趣的方面是,它不是从深刻的理论根源开始的,而是作为或多或少的工程启发而出现的,是自适应实例规范化论文中用于风格转移的“一个奇怪的批量规范技巧”,最终在其应用中变得越来越复杂和多样。机器学习具有双重存在,既是理论假设的领域,也是实际的工程学科,当我看着这种以实践为动机的技术随着时间的推移而发展时,感觉就像看着这两方之间的对话。这在条件规范化的创新通常不是一篇论文的核心贡献,而只是架构或实现的一个次要特征的方式中最为突出。

最后,严格地说,我发现了自我规范化的想法,或者说是基于概括的全局环境来调节局部行为的技术,这是我的心理工具包中一个有价值和令人信服的想法。我认为这实际上在概念上有点类似于旧的翻译编码器/解码器模型,因为在那个领域中,很明显,例如,在不知道所翻译内容的完整上下文的情况下,你不能对翻译的句子进行局部去切分。像 StyleGAN 和挤压与激励网络这样的方法只是采用了这个想法,并将其应用到更广泛的领域。

作为对所有这些积极性的警告,在写这篇文章的过程中,我因为缺乏好的综述论文来比较不同的条件作用机制的效果以及它们的局限性而感到沮丧。在我提到的论文中,作者的主要目标是证明他们使用的条件重正化是可行的,但不清楚是否有其他更好的方法。条件规范化能在条件甘的多类调节机制中表现良好吗?我们真的需要两个重整化参数来做有效的调节吗,或者我们可以只需要一个吗?尽管我们有许多这种方法起作用的例子,但像这样的基本问题仍然没有答案。因此,尽管条件重正化已经远离了它的批次规范起源,但条件重正化的支持者也许可以从它的智力祖先那里学到一课:在缺乏对为什么和什么时候某样东西起作用的严格检验的情况下,我们的理解不如它所希望的那样坚实。

一如既往,我还是有疑问!

  • 这些方法与重正化的联系有多紧密?如果您只是添加了一个具有相同结构的特征调制层,而没有之前的批处理规范操作,它们会工作得一样好吗?我怀疑批处理规范是如此普遍地有用,以至于移除它没有意义,但是考虑到这整个条件作用学派的名字来源于它的规范化起源,知道这种联系是必要的还是偶然的是有价值的
  • 延伸上述问题,是否有功能调制不适用的应用?例如,用这种方法来处理完全类条件的 GANs 会不会太简单了?(我发现的大多数有条件的 GAN 示例仍然采用 concatenate-class-ID-to-input-vector 方法)

参考

数据科学中的条件概率及实例

原文:https://towardsdatascience.com/conditional-probability-with-examples-for-data-science-717922800847?source=collection_archive---------8-----------------------

顾名思义,条件概率就是某一事件在某种给定条件下发生的概率。基于这个条件,我们的样本空间减少到条件元素。

例如,假设一个人已经申请了房屋贷款,求他投保的概率。这里的样本空间仅限于那些已经取得住房贷款的人。

为了理解条件概率,建议理解概率基础知识,如互斥和独立事件、联合、联合和边际概率以及概率与统计等。如果你想修改这些概念,你可以参考这里的数据科学的概率基础

维基定义:

在概率论中,条件概率是在给定一个事件已经发生的情况下,另一个事件发生的概率的度量。如果感兴趣的事件是 A,已知或假设事件 B 已经发生,“给定 B 的条件概率”,或“条件 B 下 A 的概率”,通常写成 P(A | B),有时也写成 PB(A)或 P(A/B)——维基百科

现在的问题可能是为什么要使用条件概率,它在数据科学中有什么意义?

让我们举一个现实生活中的例子。在某一天卖出一台电视的概率可能只有 30%。但如果我们考虑到给定的日子是排灯节,那么就有更多的机会卖出一台电视。在排灯节当天卖出一台电视的条件概率可能是 70%。我们可以将这些概率表示为 P(随机一天的电视销售量)= 30%。p(鉴于今天是排灯节,电视销售额)= 70%。

因此,条件概率有助于数据科学家从给定的数据集获得更好的结果,对于机器学习工程师来说,它有助于建立更准确的预测模型。

让我们更深入地探讨一下:

下表包含了不同年龄组的拖欠和未拖欠贷款的人。

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

将上表转换成概率

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

因此,如果我们能够将问题中给出的数据转换成表格形式,那么样本空间将减少到一整列或一整行,样本空间的其余部分将变得无关紧要。

假设一个人已届中年,他/她不会拖欠贷款的概率是多少? P(无|中年)= 0.586/0.690 = 0.85【参考表— 2,概率形式数据】 P(无|中年)= 27368/32219 = 0.85【参考表—1,正常编号数据】

如果你注意到,很明显在分子中是联合概率,是一个人没有拖欠贷款的概率,而且这个人是中年人。

而在分母中,是边际概率,也就是一个人中年的概率。

因此,我们也可以将条件概率定义为联合概率与边际概率之比。

P(A|B) = P(A 和 B)/P(B)

让我们通过改变下面的顺序来稍微不同地问这个问题。

假设一个人没有拖欠贷款,那么他/她是中年人的概率是多少?

现在看,样本空间已经改变到彩色行,即没有拖欠贷款的人。

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

P(中年|否)= 0.586/0.816 = 0.72(订单事项)

现在你又注意到了什么,概率是通过改变事件的顺序而改变的。

因此在条件概率中顺序很重要。

使用概率树的条件概率可视化

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

解释:

我试图解释树本身中的每个分支逻辑。现在让我们深入解释概率树在计算条件概率中的重要性的问题。

p(年轻没有)?

  • 使用标准条件概率公式:
  • **P(Young | No)= P(Young and No)/P(No)**这意味着:
  • P(年轻且无)= P(年轻|无)* P(无)
  • 通过概率树,我们知道 P(Young | No) = 0.275,P(No) = 0.816 的概率。
  • 现在看右边,所有的概率值都是已知的,因此把它们放到上面的等式中,我们就会得到期望的概率。
  • p(年轻和没有)= 0.275 * 0.816 = 0.2244 = ~0.225

p(没有且年轻)?(顺序已更改)

  • P(无且年轻)= P(年轻且无)= 0.225[同上]
  • 在联合概率中,顺序并不重要

p(年轻)?

查看与 Young(以 Young 结尾)相关的所有分支,并对分支内的概率值进行乘积求和,这意味着

p(Young)= 0.816 * 0.275+0.184 * 0.419 = 0.301496 = ~ 0.302

p(没有)?

P(No) = 0.816(直接来自树)

p(年轻|没有)?

p(年轻|无)= p(年轻|不是贷款违约者)= 0.275[见树]

p(不|年轻)?[订单已更改]

  • P(No | Young) = P(Young 和 No)/P(Young)[我们已经在上面的计算中计算了右侧概率]
  • p(否|年轻)= 0.225/0.302 = 0.745

现在我们来探究一下标准的条件概率公式。

根据条件概率,我们知道

  • P(A|B) = P(A 和 B)/P(B)
  • P(A 和 B)= P(B)* P(A | B)———[ 1]

类似地

  • P(B|A) = P(B 和 A)/P(A) = P(A 和 B)/P(A)[I in 联合概率顺序无关紧要]
  • P(A 和 B)= P(A)* P(B | A)–[2]

根据等式[1]和[2],

  • P(B) * P(A|B) = P(A) * P(B|A)
  • P(A | B)= P(A) P(B | A)/P(B)【又称贝叶斯定理*

现在如果我们想找到 P(不| Young)。那么我们可以直接使用上面推导出的公式。因为 P(Young | No)以及 P(Young)值将从概率树中获得,并且输入上述公式将给出结果。在下一篇文章中,我们会学到更多关于贝叶斯定理的知识。

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

说明

我试图用上面显示的概率树来解释给定的问题。然而,如果有任何不清楚的地方,我会写下给出的内容和询问的内容。以及如何计算被询问的内容。

P(A 成为 CEO) = 0.2,P(B 成为 CEO) = 0.3,P(C 成为 CEO) = 0.4。

从问题中,我们需要正确推导出,以后的概率都是条件概率。这是这里的诀窍。因为一旦他们成为首席执行官,他们只会做出有益的决定。因此,我们应该阅读这些概率如下

  • p(采取有益的决策| A 被选为 CEO) = 0.5
  • p(采取有益的决策| B 被选为 CEO) = 0.45
  • p(采取有益的决策| C 被选为 CEO) = 0.6

所以现在 P(有有利决策)不过是总概率。因此将计算关联的每个分支概率值的乘积之和。(有利决策的分支,见树)。因此:

P(有受益决策)= 0.2 * 0.05+0.3 * 0.45+0.4 * 0.6 = 0.475

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

说明

  • p(帐户 1 中的电子邮件)= 0.70
  • p(帐户 2 中的电子邮件)= 0.20
  • p(帐户 3 中的电子邮件)= 0.10
  • P(电子邮件是垃圾邮件|发送到帐户 1) = P(垃圾邮件|帐户 1) = 0.01
  • P(电子邮件是垃圾邮件|发送到帐户 2) = P(垃圾邮件|帐户 2) = 0.02
  • P(邮件是垃圾邮件|发送到帐户 3) = P(垃圾邮件|帐户 3) = 0.05

利用贝叶斯定理,

P(帐户 2 |电子邮件是垃圾邮件)= P(帐户 2) * P(垃圾邮件|帐户 2)/P(垃圾邮件)

分子值是已知的,分母 P(垃圾邮件)是已知的 ans 总概率,通过取每个分支概率值的乘积之和来计算[以垃圾邮件结尾的分支见树]。

p(垃圾邮件)= 0.70 * 0.01+0.20 * 0.02+0.10 * 0.05

p(账户 2)= 0.20[给出问题]

p(Spam | Account 2)= 0.02[给出问题]

把所有东西放在一起,P(账号 2 |邮件是垃圾邮件)= 0.20 * 0.02/(0.70 * 0.01+0.20 * 0.02+. 10 * 0.05)

答案:P(账号 2 |邮件是垃圾邮件)= 0.25

这就是数据科学的条件概率。在接下来的帖子中,我将详细地写贝叶斯定理和概率分布,这将完成数据科学的概率系列。

我希望你喜欢这篇文章。对于任何评论,请使用下面的评论部分给我回信,或者你也可以使用https://ashutoshtripathi.com/contact/给我写信。我会尽量回答你所有关于 DS,ML,AI 的疑问。

下一篇文章:贝叶斯定理在数据科学和机器学习中的重要性

原载于 2019 年 8 月 15 日【http://ashutoshtripathi.com

条件随机场解释

原文:https://towardsdatascience.com/conditional-random-fields-explained-e5b8256da776?source=collection_archive---------1-----------------------

条件随机场是一类最适合预测任务的判别模型,其中上下文信息或邻居状态影响当前预测。仅举几个例子,CRF 在命名实体识别、词性标注、基因预测、降噪和对象检测问题中找到它们的应用。

在本文中,我将首先介绍与马尔可夫随机场相关的基本数学和术语,马尔可夫随机场是 CRF 所基于的一种抽象。然后,我将详细介绍和解释一个简单的条件随机场模型,它将说明为什么它们非常适合于序列预测问题。之后,我将在 CRF 模型的背景下回顾似然最大化问题和相关的推导。最后,我将通过在手写识别任务中进行训练和推理来演示 CRF 模型。

马尔可夫随机场

马尔可夫随机场或马尔可夫网络是一类在随机变量之间有无向图的图形模型。这个图的结构决定了随机变量之间的相关性或独立性

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

MRF with four random variables

  1. 马尔可夫网络由图 G = (V,E)表示,图中的顶点或节点表示随机变量,而边共同表示这些变量之间的依赖关系。
  2. 该图可以分解成 J 个不同的集团或因子,每个集团或因子由因子函数ϕⱼ控制,其范围是随机变量 Dⱼ.的子集ϕⱼ(dⱼ)应该严格肯定 dⱼ.的所有可能的价值观
  3. 对于要表示为一个因素或集团的随机变量子集,所有这些变量在图中应该相互连接。此外,所有集团的范围的联合应该等于图中存在的所有节点。
  4. 变量的非标准化联合概率是所有因子函数的乘积,即,对于上面显示的 V= (A,B,C,D)的 MRF,联合概率可以写成:-

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

Joint probability as normalized product of factors

分母是随机变量可能取的所有可能值的乘积之和。它是一个常数,也称为配分函数,通常用 z 表示。

吉布斯符号

我们还可以通过对对数空间中的因子函数进行操作,将关节表示为吉布斯分布。使用β(dⱼ)= log(ϕ(dⱼ),我们可以用 Gibbs 符号来表示关节,如下所示。请注意,X 是图中所有随机变量的集合。β函数也称为因子势。

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

Joint probability as Gibbs Distribution

在本文后面,我们将使用 Gibbs 符号来推导似然最大化问题。

条件随机场模型

暂且让我们假设一个马尔可夫随机场,把它分别分成两组随机变量 Y 和 X。

条件随机场是马尔可夫随机场的一个特例,其中图满足以下性质:“当我们对 x 上的图进行全局条件化时,即当 x 中的随机变量的值固定或给定时,集合 y 中的所有随机变量都遵循马尔可夫性质 p(Yᵤ/X,Yᵥ,u≠v) = p(Yᵤ/X,Yₓ,Yᵤ~Yₓ),其中 Yᵤ~Yₓ表示 Yᵤ和 Yₓ在图中是邻居。”一个变量的相邻节点或变量也被称为该变量的马尔可夫链

满足上述特性的一个这样的图是下面共享的链结构图:-

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

Conditional Random Field structure

由于 CRF 是一个判别模型,即它模拟条件概率 P(Y/X ),即 X 总是给定或观察到的。因此,该图最终简化为一个简单的链。

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

CRF model, conditioned on X

当我们以 x 为条件,并试图为每个 Xᵢ找到相应的 Yᵢ时,x 和 y 也分别称为证据和标签变量。

我们可以验证上面显示的“因子减少”的通用报告格式模型遵循如下所示的变量 Y₂的马尔可夫性质。如图所示,在给定所有其他变量的情况下,Y₂的条件概率最终仅取决于其相邻节点。

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

Variable Y₂ satisfying the Markov property, conditional depends only on neighboring variables

CRF 理论与似然优化

让我们首先定义参数,然后使用 Gibbs 符号建立联合(和条件)概率的方程。

  1. 标号定义域:假设集合 y 中的随机变量有一个定义域:{m ϵ ℕ | 1≤m ≤M}即前 m 个自然数。
  2. 证据结构和领域:假设集合 x 中的随机变量是大小为 f 的实值向量,即∀ Xᵢ ϵ X,Xᵢ ϵ Rˢ.
  3. 设 CRF 链的长度为 L 即 L 个标签和 L 个证据变量。
  4. 设βᵢ(Yᵢ,Yⱼ) = Wcc '如果 Yᵢ = c,Yⱼ = c '而 j = i+1,0 否则。
  5. 让β’ᵢ(Yᵢ,Xᵢ) = W’c。Xᵢ,如果 Yᵢ = c,否则为 0,其中。代表点积,即ϵ Rˢ.
  6. 注意,参数的总数是 M×M+M×S,即每个标签转换有一个参数(M×M 个可能的标签转换),每个标签有 S 个参数(M 个可能的标签),这些参数将被乘以该标签处的观察变量(大小为 S 的向量)。
  7. 设 D = {(xn,yn)}对于 n=1 到 N,是由 N 个例子组成的训练数据。

记住上述内容,能量和可能性可以表示如下

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

Likelihood expression for CRF model

因此,训练问题简化为最大化所有模型参数 Wcc’和 W’cs 的对数似然性。

关于 W’cs 的对数似然性梯度已推导如下:-

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

Derivative of likelihood wrt label-observation weights

注意,上面等式中的第二项表示 y’ᵢ的边际概率等于 c 的和(在 y’可以取的所有可能值上),由 xnis 加权。这里的 y’-i 表示除了位置 I 的以外的每个位置的标签/y 变量的集合

我在下面直接分享的 dL/dWcc '也有类似的推导

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

Derivative of likelihood wrt label-label weights

既然我们有了导数的表达式和对数似然,我们实际上就有了从头开始编写 CRF 模型所需的所有内容。我们可以使用上面提到的等式对可能性进行编码,使用置信传播来计算边际并计算出导数,然后使用现成的优化算法(如 L-BFGS)来优化可能性。

然而,为了简单明了,我们不会重新发明轮子,而是使用现有的 CRFSuite 库进行演示。

演示—手写识别

到目前为止,应该相当清楚为什么以及如何 CRF 的结构使它们成为捕获顺序关系的任务的理想选择,如词性标注句子、命名实体识别等。对于这个演示,我将使用 CRF 进行手写检测任务。

为了准备这个演示的数据集,我使用了斯坦福 OCR 数据集和古腾堡项目档案的组合。

数据集准备

斯坦福 OCR 数据集总共包含 6877 个手写单词,分为 9 个不同的文件夹。每个单词的第一个字符缺失,以使数据集中的所有字符都是小写的。对于每个单词中的每个手写字符,数据集包含长度为 128 的扁平二进制数组,该数组可以转换为大小为 16x8 的图像。数据集中的一些单词可视化分享如下

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

Word images obtained after stacking 16x8 character images side by side

经过分析,我发现整个数据集中唯一单词的数量只有 24 个。

我们的希望是,CRF 模型将学习标记 observations(xᵢ,在我们的情况下,它们是共同出现的字符像素向量。尽管就字符像素向量而言,数据集中有 6,877 个唯一的例子,但是全部背后有 24 个唯一的单词太少,不足以从概率上捕捉一般英语文献中的字符共现,并准备好良好的手写/单词识别器。

为了解决这个问题,我决定自己创建一个数据集,使用所有的字符向量表示。我为地图/字典中的每个字符捕获了数据集中可用的所有不同字符像素向量变量。完成后,我导入了名著莫比迪克中出现的所有单词,过滤掉了所有长度小于 3 或包含字母表以外的任何内容的标记,并将过滤后的标记转换为小写。通过这种方式总共提取了 18,859 个单词,然后按照单词长度分层,将这些单词按 80-20 的比例分别分成训练集和测试集。

为了组成 CRF 模型的实际训练和测试集,我使用了我在开始时创建的字符到像素阵列的矢量图。为了为任何单词创建 image/x,我依次检查了它的字符,并使用统一采样从字典中为该字符选择了一个像素数组向量变量。下面分享了由此创建的数据集的几个样本

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

Sample words from Moby Dick

还为任何想玩的人分享数据准备脚本:-

Dataset preparation script

准备好训练和测试数据集后,就该训练模型并在任务中对其进行评估了。

模型训练和评估

CRF training and model evaluation script

使用上面的脚本,我在由 15088 个单词组成的训练集上训练了一个 CRF 模型,并在测试集上实现了近 85%的准确率。

对于一个简单的实验来说还不错…让我知道你的想法!

进行人口比例估计研究(二元变量):如何进行的想法。

原文:https://towardsdatascience.com/conducting-a-population-proportion-estimation-study-binary-variable-ideas-on-how-to-approach-it-50505006af9d?source=collection_archive---------18-----------------------

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

Image by JanBaby on Pixabay

简介

假设我生活在撒哈拉以南非洲一个叫 X 的国家。这项研究是基于一个真实的国家,但由于某些原因,我更愿意称它为 X。X 的第三大死因被认为是车祸。我认为自己是一个谨慎负责的司机。然而,鲁莽驾驶似乎无孔不入。我最害怕的,也是经常听说的那种事故是迎面相撞。为了看看我能在多大程度上证明我的担心是有道理的,我决定进行一项研究,评估全岛发生这种事故的可能性。很明显,比例根据你所在国家的哪个地区而有所不同。因此,除了估计整个国家的比例之外,估计各州的比例也是一个好主意。这项研究有三个主要部分:

  1. 规划
  2. 数据收集和筛选
  3. 数据分析(比例估计)

头脑风暴和策划

那么我该怎么做呢?目标人群是哪个?我如何对代表所有事故的事故进行抽样?它是一个什么样的变量,如何测量?我从哪里得到数据?我用哪个时间段?为了精确估计,我需要的最少事故次数是多少?我的目标是多精确,在什么样的置信水平下?我希望这项研究有多大的权力?这些问题的答案决定了我的研究结果。

在我进行自己的研究之前,我搜索了是否有任何以前做过的研究。可惜好像没有。在调查了可能的数据来源并假设他们有所有发生过的事故的文章后,我意识到废弃不同的本地新闻网站是最可行的选择。

检查每个独立的事故是否是正面碰撞构成了伯努利随机变量——这是一个是或否的问题。对每个观察值求和的结果是一个二项式分布。通常,有两种估计总体参数的方法。参数可以被估计为单个值(点估计)和/或区间(置信区间估计)。点估计只是样本的平均值。然而,置信区间提供了真实总体可能在其中的值的范围。它考虑了参数的不确定性。此外,它也是你期望你的价值观如何变化的指南。(Udacity,A/B 测试课程:A/B 测试概述,视频 14 和 15)。例如,假设您选取了一个真正有代表性的样本来计算置信区间,如果您要用 200 个不同的样本来重复这项研究,那么您希望 190 个样本的平均值(在本例中为比例)落在区间内,其余 10 个落在区间外。如果“低于置信水平%样本”意味着落在区间内,那么您的研究中一定出现了问题,您可能需要进行调查。同样,您应该预计围绕这些平均值构建的区间会与真实总体参数(比例)重叠,而围绕其他 10 个样本的平均值构建的区间不会重叠。

为了估计参数的区间,研究人员根据是否满足某些条件,使用参数或非参数统计程序。参数程序是正态密度函数。由于中心极限定理(CLT),我们从二项分布(或任何其他分布)转移到正态分布。

正如你可能已经知道的,如果真的很大,分析整个人口几乎总是不切实际的。因此,目标人群的随机样本用于对人群进行推断。CLT 指出,如果你有很多样本,比如 1000 个足够大(超过 30 个)的样本,并计算它们的平均值,这些均值的分布(样本均值的抽样分布)接近正态分布,均值=真实总体均值,样本比例的标准差 ( SD)=sqrt(P(1-P)/N)* 。样本比例的分布称为样本比例的抽样分布(SDSP)。SD 公式仅适用于一个样本比例。样本均值的抽样分布有不同的 SD 公式。

为了使用正态分布来确定比例的置信区间,两个条件必须为真才能得到合理的结论:

  • z > 5 和**(N-z)>5**

其中:

z =成功的次数(正面碰撞)N-z=失败的次数(非正面碰撞)

  • 如果这两个条件不满足,这意味着 SDSP 偏向较大的值(成功或失败)并且不是正态分布的。满足这些条件表明样本可能是随机的,并且能很好地代表目标人群。

样本量

数据日期范围从 X 成为独立国家 5 年后的 2000 年到 2019 年。我可以使用所有这些数据来获得更多信息,但为了节省时间,我决定使用过去五年(2014 年至 2018 年)的数据。

考虑到上述信息,我需要计算最小样本量,以节省我的成本,并在大多数情况下(通常为 80%或更多)使误差等于或小于最大允许值。一般来说,一项统计研究达到其目标的概率就是所谓的研究的统计功效。(克鲁施克,第二版。,第 359 页)。具体来说,这项研究旨在估计 X 中迎面碰撞的比例,最大可接受误差低于或高于真实比例 0.05 点。我随意选了 0.05 分误差。

有多种方法来计算样本量,其中之一是在线计算器。在本文中,我将使用 AUSVET 计算器。通常,样本量计算需要以下输入:

  • 估计真实比例 —这通常来自以前的研究、专家或试点研究。正如在引言中提到的,以前没有关于这个问题的研究,从某个地方开始,我废弃了 140 个事故报告(每个州 10 个)进行比例估计。设 z = 50,N = 140。那么 p-hat= 0.36。其中 z 和 p-hat 是迎面碰撞的次数和样本中迎面碰撞的比例。
  • 允许误差:这是需要达到的最大允许误差。它决定了置信区间的宽度。
  • Alpha :既然我会用 95%的置信度,那么对应的 Alpha 水平=5%。
  • 预计目标人群规模:其中一家报纸报道全国每年发生约 12500 起事故。因此,本研究的目标人群为 12500 * 5(过去 5 年)。

提交所有要求的输入,计算的最小样本为 353

既然我已经确定了从哪里获取数据;哪些数据构成了我的总体和抽样框架;以及确保 80%的时间有 5%的误差幅度和 95%的置信水平的适当样本量,下一步是收集数据。

2。数据收集和筛选

我通过网络搜集资料。在开始计算任何东西之前,您要确保收集的数据是计划中的数据。

发现并必须解决的问题:

  • 属于一些国家的文章的日期早于截止年(2014 年)。这些文章必须被删除,以确保所有国家的文章都来自同一年。
  • 关于汽车或一般事故的文章,而不是关于发生的具体事故的文章被删除了。
  • 为了能够估计出州一级以及全国的比例,我确保每个州至少有 5 次正面碰撞和非正面碰撞。

3。计算置信区间

一旦清理了正确的数据,我就计算出了比例。

结论

嗯,我就是这样进行研究的。最有经验的数据专业人员我暴露自己告诉一件事:数据收集和清理占用了大部分时间,我的研究也不例外。在所有这三个步骤中,我注意到计算期望的估计值占用的时间最少。最初,我开始收集数据,但没有定义我上面提到的一些要点。因此,我碰了很多壁。在阅读和观看内容后,我明白了花时间明确决定你计划测量什么和如何测量的重要性。所以请抓紧时间为自己的学习做好规划。它为你以最有效的方式进行可靠的研究铺平了道路。希望这篇文章对你有所帮助。

参考文献:

  • 维埃拉(2017 年)。真实世界统计简介:带分步 SPSS 指令。
  • Kruschke,J.K .(第二版。).做贝叶斯数据分析:与 R、JAGS 和斯坦的教程
  • Udacity,A/B 测试课程,第 1 课:A/B 测试概述

k 均值的置信度

原文:https://towardsdatascience.com/confidence-in-k-means-d7d3a13ca856?source=collection_archive---------18-----------------------

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

所以你用 k-means 做了一些聚类;您已经缩放了数据,应用了 PCA,使用肘和剪影方法检查了聚类,并且您非常确信您的模型为您提供了您所能获得的绝对最佳的聚类。但是你能对单个数据点的分类有多信任呢?这就是我要在这里讨论的。

大多数用于评估聚类算法的指标都是对模型的全局成功的度量。但是,如果您不希望对每个数据点进行分类,而是希望识别明确适合特定聚类的特定数据点,该怎么办呢?例如,你可能不想把一个病人归为某一特定疾病的低风险人群,仅仅因为这是最坏的一类;你需要确信它们绝对是低风险的。同样,你可能不希望为没有表现出你的用户细分所定义的强烈行为特征的客户提供个性化的数字体验。

有一个非常简单的方法可以计算出你的算法对每个分类的置信度。然后,您可以过滤掉模型不确定的预测,并根据剩余的、有把握的结果做出决策。

软 k 均值算法概述

软 k-均值算法与硬 k-均值算法类似,它基于数据点和聚类中心之间的欧几里德距离。与将每个数据点仅分配给一个聚类的普通 k-means 不同,软 k-means 计算一个权重,该权重描述每个数据点属于每个聚类的可能性。较高的值表示强的或有把握的分类,较低的值表示弱的或不太可能的分类。

尽管确实存在可以执行软 k 均值的预写算法,但是它们没有得到很好的支持。还有很多原因可以解释为什么你不想改变你的实际模型。幸运的是,您可以使用硬 k 均值聚类中心追溯计算软 k 均值权重。

虹膜数据集上的 k-均值

让我们在具有 3 个聚类的 iris 数据集上训练一个非常直接的 k-means 算法。绘制花瓣长度与花瓣宽度的关系图,我们可以看到该算法工作得很好,但是在绿色和蓝色聚类相遇的地方有一些不正确的分类(右图)。在这种情况下,我们可以很容易地使用视觉检查发现这一点,因为我们知道每个虹膜是什么物种的基本事实(左图)。理想情况下,我们希望知道,在没有真实类别的先验知识的情况下,该区域中的点很难分类,因此不太可信。

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

软 k 均值权重

xᵢ为数据点。数据点属于聚类 j 的可能性可以使用下面给出的权重等式来计算:

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

The wij are used in the soft k-means algorithm to assign a probability of a point belonging to a cluster

这里的 c ⱼ是第 j 星团中心的坐标。 m 的值是控制算法模糊性的参数,典型的默认值为 2。对于每个数据点,权重的总和是 1,这就是为什么它们作为可能性或概率工作得很好。这里有一个很好的 python 函数来为您计算权重:

权重过滤

一旦我们计算了每个聚类的软 k 均值权重,我们就可以确定与硬 k 均值算法分配的聚类相关联的权重。然后我们可以过滤掉那些低值,只留下我们有把握的数据点。下面我为我的 iris 数据集聚类做了这个,用一个过滤器去除权重低于 0.9 的点。

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

过滤器已经移除了蓝色和绿色聚类之间的不确定区域中的许多数据点。已经确定,16%的数据点太难分类,无法过滤掉。

结论

只需几行代码,我们就可以计算出每个数据点的置信度得分,表明我们的 k-means 算法在分类中的置信度,而无需事先了解真实类别。

密码

soft_cluster_weights 函数和附带的笔记本在这个 GitHub repo 中提供。

为数据科学家简单解释置信区间

原文:https://towardsdatascience.com/confidence-intervals-explained-simply-for-data-scientists-8354a6e2266b?source=collection_archive---------4-----------------------

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

PIxabay: Cast a net

没有沉重的术语

最近,有人问我如何用简单的术语向外行解释置信区间。我发现很难做到这一点。

即使对了解置信区间的人来说,解释置信区间也是一件令人头疼的事情,更不用说对不懂统计学的人来说了。

我去维基百科找了些东西,下面是它的定义:

统计中,置信区间 ( CI )是从观测数据的统计中计算出来的一种估计。这为未知的参数提出了一系列似是而非的值。该区间具有相关的置信水平,即真实参数在建议的范围内。这可以更清楚地表述为:置信水平代表未知参数位于给定区间的概率。调查者可以选择置信度。一般来说,未知参数的置信区间基于对相应的估计器分布进行采样。【1】

我的第一个想法是,他们可能是这样写的,所以没有人能理解它。这里的问题在于统计学家喜欢使用大量的术语和语言。

这篇文章是关于用一种简单易懂的方式解释置信区间,而不是故作姿态

现实生活中的问题

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

Source

让我们从创建一个真实的场景开始。

假设你想找出美国某个州所有人的平均身高。

你可以去那个特定州的每个人那里询问他们的身高,或者你可以做更聪明的事情,在这个州抽取 1000 人作为样本。

然后,您可以使用他们身高的平均值(估计平均值)来估计该州身高的平均值(真实平均值)

这一切都很好,但作为真正的数据科学家,你并不满意。估计的平均值只是一个单一的数字,您希望有一个真实平均值所在的范围。

我们为什么要一个范围?因为在现实生活中,我们关心的是估计值的置信度。

通常情况下,即使我让你猜测美国某个州的人的身高,你也更倾向于说类似于*“我相信它在 6 英尺到 6 英尺 2 英寸之间”,而不是像“它的 6 英尺 2.2345 英寸”这样的点估计。*

我们人类在进行评估时也喜欢附加一定程度的信心。你有没有说过——“我有 90%的自信”。

在这个特定的例子中,我对陈述- “我相信它在 5 英尺到 7 英尺之间”比“我相信它在 6 英尺到 6 英尺 2 英寸之间”更有信心,因为第一个范围是第二个范围的超集。

那么我们如何得到这个范围并量化一个置信度值呢?

战略

为了理解我们将如何计算置信区间,我们需要理解中心极限定理。

中心极限定理:中心极限定理(CLT) 简单地说,如果你有一个具有均值μ和标准差σ的总体,并从总体中随机抽取样本,那么样本均值的分布**将近似正态分布 以均值为总体均值 和估计的 标准差 s/√

所以知道了这一切,你就变得好奇了。我们在美国已经有了 1000 人的样本。我们能应用 CLT 吗?

我们知道,抽样分布的均值等于总体均值(我们不知道但想估计),抽样分布的样本偏差由 σ/√n 给出(即样本的标准差除以样本中的观察次数)

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

Casting a net around the sample mean to capture the true population mean

现在,您想在 X 轴上找到包含真实总体平均值的区间。

那我们怎么办?我们从已知的价值中撒网。

为了得到这样的范围/区间,我们从 Xbar 开始走 1.96 个标准差,样本在两个方向上的均值。而这个范围就是 95%的置信区间。

现在,当我说我估计真实均值为 Xbar(样本均值),置信区间为[Xbar-1.96SD,Xbar+1.96SD]时,我是说:

这是一个使用特定程序构建的音程。如果在大量样本上重复这一过程,包含真实总体参数的计算置信区间(每个样本不同)的分数将趋向于 95%

当你取 99%的置信区间时,你实际上增加了这个比例,从而用三个标准差撒出了一个更宽的网。

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

The simple formula

  • 这里 Xbar 是样本平均值(你取的 1000 个高度样本的平均值)。
  • z 是偏离样本均值的标准差的个数(1.96 代表 95%,2.576 代表 99%)——你想要的置信度
  • s 是样本中的标准偏差。
  • n 是样本的大小。

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

Most of the nets we cast in different experiments do contain the true population mean

上图中的每条线都是这样一个实验,点代表样本平均值,线代表范围。图中的虚线是真实的人口平均值*。*

看这些区间怎么有些不包含真实总体均值,几乎全部(95%)都包含真实总体均值

临界 Z 值

我们说过,Z 是偏离样本均值的标准差的个数(1.96 代表 95%,2.576 代表 99%)——你想要的置信度

你可以选择任意的自信程度。比方说,你想要 90%的信心。你可以通过使用法线曲线内部的阴影区域需要为 0.90 的想法来得到它。

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

Source: The Normal curve showing a 95% CI.

import scipy.stats as st
p = 0.9 + (1-0.9)/2
Z = st.norm.ppf(p, loc=0, scale=1)
print(Z)
----------------------------------------------------------
1.6448536269514722

继续学习

如果你想了解更多关于假设检验、置信区间以及数字和分类数据的统计推断方法,Mine etinkaya-Rundel 在 coursera 上教授了 推断统计学 课程,没有比这更简单的了。她是一个伟大的导师,很好地解释了统计推断的基础。

谢谢你的阅读。将来我也会写更多初学者友好的帖子。关注我的 媒体 或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter@ mlwhiz联系

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

排列重要性的置信区间

原文:https://towardsdatascience.com/confidence-intervals-for-permutation-importance-2d025bc740c5?source=collection_archive---------21-----------------------

一种旧的特征重要性度量方法的新理论视角

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

Feature importance helps us find the features that matter.

介绍

在本帖中,我们解释了流行的排列特征重要性技术的新理论视角如何让我们用置信区间量化其不确定性,并避免其使用中的潜在陷阱。

首先,让我们首先激发使用这种技术的“为什么”。假设您刚刚被一家大型国际零售商的数据科学团队聘用。在你到来之前,这个团队建立了一个复杂的模型来预测你在全球几十个地方的每周销售额。该模型考虑了多种因素:地理数据(如当地人口密度和人口统计数据)、季节性数据、天气预报数据、单个商店的信息(如总面积),甚至是你公司的推文最近获得的赞数。让我们也假设这种模式非常有效,可以让业务团队提前几周洞察未来的销售模式。只有一个问题。你能猜出它是什么吗?

没有人知道为什么销售预测模型如此有效。

为什么这是一个问题?很多原因。依赖该模型预测的商界人士不知道,如果 Twitter 在一周内经历了一次宕机,Twitter 赞数下降,他们的预测会有多可靠。在数据科学团队中,您几乎不知道哪些因素对模型最有用,因此在识别新信号以支持模型性能时,您会盲目行事。我们不要忘记其他利益相关者。如果基于这个模型的预测做出的决定会给公司带来糟糕的结果,董事会将希望了解更多关于这个模型的信息,而不是“它只是工作而已”,特别是随着人工智能继续变得越来越受监管

那么我们能做什么呢?一个很好的第一步是获得一些特征重要性的度量。这意味着给你的模型使用的每个因素分配一个重要的数字分数。这些数值分数代表了这些特征对于模型做出高质量预测的能力有多重要。

许多建模技术都带有内置的特征重要性度量。也许您可以使用 xgboost 模型默认提供的基于信息增益的重要性度量?没那么快!正如你的队友将会指出的,不能保证这些特征重要性将描述你的复杂系综,此外,基于增益的重要性度量是有偏差的[1]。

那么我们能做些什么呢?我们可以使用“随机消融”(又名“置换”)特征重要性度量。Christoph Molnar 在他的可解释的 ML 书 [2]中提供了这种技术的清晰而简明的描述:

这个概念非常简单:我们通过计算置换特征后模型预测误差的增加来衡量特征的重要性。如果打乱某个特征的值会增加模型误差,则该特征是“重要的”,因为在这种情况下,模型依赖于该特征进行预测。如果对某个特征的值进行调整后模型误差保持不变,则该特征“不重要”,因为在这种情况下,模型会忽略该特征进行预测。

背景

这种技术从何而来?随机消融特征的重要性当然不是新的。事实上,它的起源至少可以追溯到 2001 年,当时这种技术的一个变种被作为变量的“噪声”引入,以更好地理解随机森林模型如何使用它们[3]。然而,最近,这种技术在使用和变化方面又有所复苏。例如,这种技术的实现将包含在流行的 Scikit-learn 库的即将到来的 0.22 版本中[4]。作为一个更加理论化的例子,考虑最近引入的“模型类别依赖”框架,该框架将随机消融特征重要性的一个变体称为“模型依赖”,并将其用作核心构建模块[5]。

新的理论视角

当在 Fiddler Labs 使用这种技术时,我们试图从理论上明确置换一列特征意味着什么,在你的模型中运行,看看模型的误差增加了多少。这让我们使用了理论透镜随机消融,因此我们为通常被称为排列的特征重要性取了一个新名字。

在 arXiv 上发布的最新预印本中,我们开发了该技术的清晰理论公式,因为它与经典的统计学习问题陈述相关。我们发现,在置换特征(或者,更正式地说,通过随机化消除它们)后测量误差的概念实际上非常符合监督学习中风险最小化的数学[6]。如果你熟悉这套理论,我们希望这种联系对你的直觉和我们的直觉一样有帮助。

此外,我们的重新表述提供了两种围绕随机化消融特征重要性分数构建置信区间的方法,这是一种从业者可以用来避免随机化消融特征重要性应用中潜在陷阱的技术。据我们所知,这种技术的当前公式和实现不包括这些置信度度量。

特征重要性的置信区间

考虑如果我们使用不同的随机消融(例如,通过使用不同的随机种子)重新运行随机消融特征重要性,或者如果我们在一个非常大的数据集的两个不同的随机子集上运行它(例如,为了避免使用超过我们机器的存储器容量的完整数据集),会发生什么。我们的功能重要性可能会改变!理想情况下,我们希望使用大型数据集并对许多消融进行平均,以减轻算法中固有的随机性,但在实践中,我们可能没有足够的数据或计算能力来这样做。

随机化消融特征重要性分数有两个不确定性来源:我们使用的数据点和我们使用的随机消融值(即排列)。通过多次运行该算法并检查每次运行的差异,我们可以构建一个置信区间 (CI ),用于测量所用消融术产生的不确定性。类似地,通过逐点查看消融造成的损失增加(而不仅仅是在我们的数据集上平均损失),我们可以构建一个 CI 来衡量有限数据集产生的不确定性。

例如:预测房价

为了演示随机消融特征重要性值在 CIs 中的使用,让我们将该技术应用于真实模型。为此,我使用 Ames 住房数据集[7]建立了一个复杂的模型来估计房屋的销售价格。这个例子的完整代码可以在 Jupyter 笔记本这里获得。

为了显示置信区间的重要性,我们仅使用 100 个点运行了随机消融特征重要性,仅重复 K=3 次。这为我们提供了以下 10 大得分特征,黑色误差线表示 95%的置信区间:

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

Randomized ablation feature importance for 100 points after 3 repetitions.

正如我们从误差线中看到的,在这 100 个点中,不确定哪个特性实际上是第三重要的。重新运行 K=30 次迭代的随机化消融特征重要性,我们得到了更严格的误差界限,并且我们自信地发现,在对我们的模型的重要性方面,一所房子的邻居实际上超过了它的总地下室平方英尺:

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

Randomized ablation feature importance for the same 100 points after 30 repetitions.

然而,事实证明,这些特征重要性分数的不确定性的更大来源实际上源于所使用的数据集的小尺寸,而不是消融重复的小数量。这一事实是通过使用我们论文中介绍的其他 CI 方法发现的,该方法捕捉了消融和数据集大小所导致的不确定性。在数据集的另外 100 个点上运行这种 CI 技术(仅重复一次),我们观察到以下宽 CI:

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

Randomized ablation feature importance for 100 points with point-by-point CIs.

通过将点的数量从 100 增加到 500,我们的信心显著提高,并且我们变得相当有信心邻域是我们模型整体上第三重要的特征(不仅仅是在我们有限的数据集中)。

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

Randomized ablation feature importance for 500 points with point-by-point CIs.

结论

特征重要性技术是获得关于机器学习模型的有价值的洞察力的强大而简单的方法。随机化消融特征重要性技术,通常称为“置换”重要性,为计算特征重要性提供了直接且广泛适用的技术。我们还在这里展示了如何通过一种新的方法来理论化和公式化随机消融特征重要性的“真实”值,我们能够围绕我们的特征重要性测量构建置信区间。这些置信区间是在实践中避免陷阱的有用工具,尤其是当数据集不大时。

如果你喜欢这篇文章,你可以在 Fiddler 的博客上找到更多类似的文章,如果你想更深入地了解随机消融功能的重要性,请务必查看的全文。别担心,只有四页长!

参考

[1]帕尔等人。艾尔。当心默认随机森林重要性(2018)。【https://explained.ai/rf-importance/

[2]克里斯托弗·莫尔纳尔。可解释的机器学习(2019)。https://christophm . github . io/interpretable-ml-book/feature-importance . html

[3]布雷曼,利奥。随机森林(2001 年)。https://www . stat . Berkeley . edu/% 7 ebreiman/randomforest 2001 . pdf

[4]sci kit-学习贡献者。排列特征重要性(2019)。https://sci kit-learn . org/dev/modules/permutation _ importance . html

[5]费希尔等人。艾尔。模型类依赖(2019)。https://arxiv.org/abs/1801.01489

[6]卢克·梅里克。随机消融特征重要性(2019)。https://arxiv.org/abs/1910.00174

[7]德·科克,院长。艾姆斯,爱荷华州:波士顿住房数据的替代方案,作为期末回归项目(2011)。【http://jse.amstat.org/v19n3/decock.pdf

时间序列数据的置信区间:SharpestMinds Slack 聊天

原文:https://towardsdatascience.com/confidence-intervals-for-time-series-data-sharpestminds-slack-chats-4b05e211943a?source=collection_archive---------20-----------------------

应大众的要求,我们决定公开专业数据科学家和他们的学员之间关于 SharpestMinds 内部松弛的一些对话。我们希望这将让更多的人从 SharpestMinds 的专业知识中受益,即使他们不能直接进入社区。

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

当大多数人开始学习数据科学时,他们处理的数据是与时间无关的。他们预测泰坦尼克号上乘客的生存概率,识别 MNIST 数据集中的手写字符,或者执行。其他类似的任务。

要解决这些问题,通常首先要将每个样本随机分配给两个不同的数据集:一个用于训练模型,另一个用于验证模型的性能。这个验证步骤很重要,因为它允许你做出这样的声明,“我希望这个预测准确到真实值的 10%以内,20 次中有 19 次。”

但是,这对时间序列数据不起作用:如果您试图预测季节性影响、股票市场波动或客户流失行为,您会很快意识到,将数据随机分配给训练集和验证集会破坏原始数据集的时间顺序中包含的信息。

那么,如何为时间序列预测提供置信区间(又名:预测区间)?

或者,正如一位敏锐的学员最近在我们的内部 Slack 社区中问到的:

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

Chiemi 之前已经发现了这种方法,但是它只对梯度推进回归器有效。她想要一个更通用的解决方案。

第一个伟大的建议来自 SharpestMinds 的导师 Ray Phan ,他是一个真正的数据科学 Slack 超级英雄:

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

这是他提供的链接的可点击版本。老实说,我不知道这个功能,它看起来非常方便。

接下来是夏普明德校友(现在是数据科学家🚀)凯赢:

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

她链接的 Jason Brownlee 的帖子在这里(强烈推荐!).

最后,学员克里斯蒂安·法甘还提出了一个基于贝叶斯区间的非常有趣的策略——它更先进,如果你喜欢冒险和数学,值得一试:

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

(再次,这里是可点击的形式)。

就是这样!今天只是一个简短的问题,但我认为这里建议的所有不同的观点和工具,如果你正在考虑你自己的时间序列问题,会有所帮助。

直到下次🙂

想要更多吗?

我们每隔几周发布一份时事通讯,其中包含关于如何在数据科学领域就业的对话和提示。【你可以在 这个链接*】*查看一个例子

可以在推特上关注 Jeremie()@ Jeremie charris)或者 sharpes minds()@ sharpes mindsai)。

原载于 2019 年 11 月 21 日https://blog.sharpestminds.com

混杂变得简单

原文:https://towardsdatascience.com/confounders-made-simple-19131ff63ed1?source=collection_archive---------13-----------------------

摘要:在一项观察性研究中,并不是所有的治疗和结果变量的协变量都应该被调整。默认情况下,人们应该怀疑那些盲目调整许多混杂因素而没有从因果关系上证明其选择的研究。

**免责声明:**我的因果推理知识有限,我可能会说一些非常错误的话。如果你发现错误,请在推特上联系我 @jsevillamol

混杂因素的问题

假设你想确定治疗对结果的因果影响。当务之急是确定它们之间是否存在统计相关性。

虽然仍然具有挑战性,但我们有很好的统计工具来确定复杂变量集之间的统计关联网络。

然而,相关性不是因果关系 —相关性可能是由混杂因素引起的,是治疗和结果的因果前因。

例如,治疗可能是吸烟,结果可能是呼吸系统疾病,一个似是而非的混杂因素是年龄;年纪大的人吸烟更频繁,也更容易患呼吸道疾病。

我们可以用因果图来说明这种情况:

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

A causal diagram for a smoking study

我们说从治疗到结果有一个畅通的后门路径通过年龄,即吸烟<= age =>呼吸道疾病。

理想情况下,我们希望进行一项随机对照试验(RCT ),随机分配治疗方案,这样我们就可以转移后门。

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

A randomized controlled trial (RCT) of a smoking study

但这并不总是可能的;例如,治疗可能是不道德的,或者我们可能想从历史数据中得出结论。在那些情况下我们应该做什么?

如何不对混杂因素进行调整

阻止混杂因素的虚假影响的另一种方法是通过例如分层来调整。在吸烟的例子中,我们可以将数据分为年轻人和老年人,研究每一组中吸烟和疾病之间的相关性,然后报告加权相关性,作为因果效应的估计。

如果我们确信协变量确实是一个混杂变量,或者是治疗和结果的因果祖先,这将很好地工作——因为在每个研究组中,混杂变量是固定的,它不再能够对治疗和结果产生虚假的影响,我们将能够对治疗的真正因果影响做出断言。

因此,每当研究人员发现一个与治疗和结果都相关的变量时,他们往往会对其进行调整。

但这并不是三个变量之间唯一可能的因果关系!

治疗 X、结果 Y 和协变量 Z 之间可能的因果关系

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

Confounder

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

Mediator

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

Collider

协变量可能会调节治疗和结果之间的相互作用。即 X = > Z,Z = > Y。

例如,我们可以研究转基因作物对消费者健康的影响,我们发现转基因作物不太可能被病原体感染。在这种情况下,病原体的存在将成为转基因生物和消费者健康之间的媒介。

请注意,介质不一定是解释这种效应的唯一机制——转基因生物也可能改变作物的饮食结构,而与它对病原体的影响无关。

在这种情况下,对协变量 Z 进行调整将减少治疗 X 对结果 Y 的明显影响,我们的报告将具有误导性(除非我们特别试图单独测量非协变量介导的治疗效果部分)。

第三种可能性是协变量是治疗和结果的 T2 对撞机。也就是说,X 和 Y 都导致 z。例如,我们可以让人工智能研究人员和国际象棋爱好者都喜欢阅读自动化国际象棋比赛的发展。

调整对撞机将会增加治疗效果在结果中的表观强度。

在前面的例子中,如果我们调查阅读了自动下棋文章的人,我们可能会发现象棋爱好者不太可能是人工智能研究人员,反之亦然——但这并不奇怪,因为我们从我们的调查人口统计中过滤掉了既不是人工智能研究人员也不是象棋爱好者的人。

所以要小心调整调解器和碰撞器!

现在,我们如何区分协变量是混杂变量的情况和协变量是中介变量或碰撞变量的情况?

简而言之:我们不能,至少不能仅从观察数据来看。我们需要依赖于潜在因果关系的领域特定知识。

当涉及多个协变量时,情况会变得更加复杂。我们需要绘制出所有协变量、治疗和结果之间的整个因果图,并在科学基础上证明我们的因果图。

然后,我们可以使用 do-calculus 的规则和原则,如后门标准,找到一组要调整的协变量,以阻止治疗和结果之间的虚假相关性,这样我们就可以估计真正的因果关系。

总的来说,我预计一项研究调整的变量越多,它们就越有可能通过对撞机引入虚假的相关性或阻断中介路径。

自由度的问题

我们应该怀疑以无原则的方式调整许多变量的研究的另一个强有力的原因是如何进行研究的自由度的增加。

如果你用 1000 种不同的方法来衡量两个变量之间的关系,并选择一个相关性最大的,你很可能高估了治疗的有效性。

拥有一个更大的协变量集可以让你对任何子集进行调整。例如,如果你有 10 个协变量,你可以调整 2^10 ≈ 1000 个可能的子集。

不一定是单个研究小组系统地尝试所有可能的调整子集并挑选最佳子集(尽管值得注意的是,一些统计方法正在做一些非常类似的事情——例如变量选择的逐步或最佳子集方法)。可能是不同的研究人员正在尝试不同的子集,而结合他们结果的机制是有偏见的。

例如,100 个研究小组可能会尝试 100 个不同的子集。他们中的 95 个正确地识别出没有影响,但是由于发表偏倚,他们没有广泛地公布他们的结果,而错误地识别出有强烈影响的 5 个组是唯一一个被发表的,造成了一种印象,即所有进行的研究都发现了强烈的影响,而实际上没有。

总的来说,当你不预先承诺在研究中遵循一种原则性的调整方法时,你更有可能在结果中引入偏差

提醒一句:你仍然需要良好的控制

在这篇文章中,我们将重点放在选择太多不合适的控件的问题上,因为我看到更多的人缺乏这种直觉,即使是那些了解应用统计学的人也是如此。

然而,请注意,你可能会犯相反的错误——你可能无法调整相关的混淆因素——并最终得出结论巧克力消费导致诺贝尔奖

尤其是对复杂现象的观察,只对一些事情进行调整实际上保证了你忽略了你应该调整的事情——你可能会高估或低估效果。

一个相关的挑战出现在“残留混杂”的标题下。即使你确定了一个混杂因素并对其进行了调整,它仍然会影响到与你测量它的准确程度相称的结果——自然,我们测量的大多数东西都是不准确的或通过代理来测量的。

所以用一句话概括:如果你想从观察数据中推断因果关系,控制混杂因素是关键

那么我们该怎么办呢?

作为一个试金石,更值得怀疑的是那些对变量进行调整而没有根据因果关系证明其调整选择的观察性研究

然而,一些研究没有做必要的工作来证明他们选择的混杂因素,这使得我们在从他们的工作中提取可靠的数据时处于一个更糟糕的位置。在这种情况下,我们能做些什么?

首先,我们可以单独检查每一个选择的混杂因素,并思考它们与治疗和结果的因果关系。

例如,假设我们正在审查一项关于核不扩散条约(X)对核武器投资水平(Y)的影响的研究,我们想知道它们是否应该根据 GDP (Z)进行调整。

嗯,有可能 GDP 较高的国家也更有影响力,并使条约对他们有利,所以 Z => X。而 GDP 较高的国家可以在核武器上投资更多,所以 Z => Y。在这种情况下,GDP 将是一个混杂因素,我们应该为此进行调整。

但我们可以讲一个同样令人信服的故事,认为签署该条约的国家可能会被视为更加合作,并获得更好的贸易协议,所以 X => Z。而在核武器上投资更多的国家具有更好的安全性,因此它们吸引更多的投资者,所以 Y => Z。根据这种解释,GDP 是一个对撞机,我们不应该为此进行调整。

或者我们可以结合前面的两个场景来论证 X=>Z 和 Z=>Y,所以 GDP 将是一个碰撞体,我们也不应该对它进行调整。

在没有令人信服的理由来拒绝替代解释的情况下,我们不应该根据 GDP 进行调整。

然而,想象一下,这项研究正在根据其他核协议的参与情况进行调整。认为加入其他条约导致加入《不扩散条约》似乎有些牵强;这两者似乎都是由该国签署核条约的普遍倾向更直接导致的。

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

在这种情况下,“对条约的偏好”是《不扩散核武器条约》对核投资影响的混淆因素,但我们无法直接观察到它。然而,我们可以通过后门标准调整“其他核条约”来阻止其虚假影响。

如果这项研究对 GPD 和参与其他核条约进行调整,会发生什么?

默认情况下,我们应该怀疑他们的结论的因果有效性。

我们可以利用这一信息做出一些预测(例如,我们可以利用上述研究的结果来猜测一个无论如何都要签署条约的国家是否会减少对核武库的投资),但我们不能提出处理建议(例如,我们不能断言游说一个国家行为者接受《不扩散条约》是让他们减少核武库的有效方式)。

如果我们想挽救他们的结果,我们可以试着建立一个相关变量的因果图,并考虑他们选择的混杂因素是否满足相关标准。

如果他们选择的调整变量没有正确地阻止虚假效应或通过碰撞器引入新的效应,并且我们可以访问这些数据,我们可能想尝试用更好的调整变量重新运行这项研究。

但是当然,我们仍然可以确定作者没有包括在数据集中的关键混杂因素。在这种情况下,我建议关注约翰·图基的话:

“一些数据和对答案的渴望并不能确保从给定的数据中提取出合理的答案。”

结论

在这篇文章中,我们解释了协变量和治疗结果对之间的三种因果关系:混杂因素、中介因素和碰撞因素。我们已经看到,为了推断因果效应,我们应该调整混杂因素,而不是中介因素或碰撞因素。

我们认为,一项观察性研究调整的变量越多,它们就越有可能犯因果错误,或者额外的自由度和发表偏倚夸大了报道的效果。

我们也提醒读者不要犯相反的错误——以有原则的方式调整混杂因素对于将观察数据转化为因果信息至关重要。

作为从以前的研究中提取数据的一种方式,我们建议根据因果标准严格检查他们对调整协变量的选择。如果他们对不需要的变量进行了调整,我们建议在数据可用的情况下重新进行分析,而如果数据中缺少关键混杂因素,我们应该接受有时我们没有足够的信息来正确回答我们关心的问题。

我要感谢 Luisa Rodriguez 给了我思考混杂因素的借口,感谢 Gregory Lewis 阅读了早期的草稿并指出错误。通过我直接从格雷戈里的评论中剽窃的文章的一些巧妙的引用;所有的错误都是我的错。

关于因果推理的进一步阅读,我推荐朱迪亚·珀尔的《为什么 和 一本 关于好与坏控制的速成教程 ,以及格温的《为什么关联通常≠因果关系 》。

本文由牛津大学 人类未来研究所 暑期研究员杰米·塞维利亚撰写。在 twitter 上找我@ jsevillamol

直面深度学习系统:有多少事情已经改变,有多少我们不知道

原文:https://towardsdatascience.com/confronting-deep-learning-systems-how-much-things-have-changed-f067738b728f?source=collection_archive---------21-----------------------

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

Photo by Magne Træland on Unsplash

随着公司在业务中采用人工智能,他们正在大规模地面对深度学习系统的技术。这就像进入一个巨大的黑暗洞穴——惊奇和兴奋,伴随着恐惧,你不知道你将进入什么!

在 IT 方面几乎一无所知

我向一位同事推荐了帕科·内森的博客,该博客总结了最近的地层调查。这位同事是商业智能和数据仓库领域备受尊敬的专家。

他的反应是,“ 有多少事情已经改变,有多少我们不知道!
……指 IT 专业人士对抗新兴的深度学习系统。

用我的话来说,IT 专业人士对建立在现有基础设施上的人工智能系统的含义一无所知。此外,在企业集团之间出现了严重的文化脱节,这些集团必须为组织及其利益相关者合作,以实现人工智能系统的价值。

虽然这是一个令人不安的评论,但听到这个反应,我还是松了一口气。我花了去年的时间试图说服其他 BI/DW 同事,让他们认识到等待企业 IT 的未决问题。通常的反应是干瞪眼…好像他们怀疑我的理智!

术语:使用人工神经网络(ANN)的深度学习(DL)是机器学习(ML)的一个子集。这篇文章强调了企业系统中传统机器学习(无 ANN)与深度学习(使用 ANN)之间的差异。

那么,有什么好大惊小怪的呢?

TL;在你有地图之前,不要进入(人工智能系统的)洞穴!

Pacoid 再次出击!

Paco Nathan(或 twitter 上的 Pacoid)自我描述为“邪恶的疯狂科学家”和“球员/教练”。我的经验严重倾向于后者。在 AI/ML/DS 社区中,他是一个杰出的人物,他与外界联系紧密,才华横溢,善于表达,富有人情味。

内森与本·洛里卡合作,本·洛里卡是奥莱利媒体公司的首席数据科学家,也是地层数据会议和 T21 人工智能会议的项目总监。他们调查了这些社区的态度和行动,这些社区是早期采用者——跨越(或努力跨越)鸿沟,在他们的组织内拥抱人工智能系统。

因此,大惊小怪的是关注这些早期采用者告诉我们的关于当前人工智能系统的信息,无论它们是成功的、失败的、灾难性的、道德上有害的、政治上幼稚的,还是介于两者之间的一切。

该调查基于 2018 年 11 月中旬的 1300 份答复,具有良好的全球企业代表性。因此,应该认真对待这一信息。这里是如何做到这一点…

首先,我推荐阅读 Pacoid 的博客。[1]其次,浏览与 Lorica 合著的这三份报告中的调查详情:

  • 机器学习状态(2018 年 8 月)[2]
  • (2019 年 1 月)[3]
  • (2019 年 2 月)【4】—尤其是这个**
  • 此外,在[5]和[6]中引用的早期报告

如果你正在你的组织内拥抱(或计划拥抱)人工智能系统,你会发现几个发人深省的观察。…洞穴地图的碎片。

以下是我的几点看法。请在下面的评论中分享你的观察。

外卖:深度学习有牵引力

与我交谈过的许多 IT 专业人士认为,神经网络令人兴奋,但传统的机器学习对于未来许多年的商业应用来说绰绰有余。

然而,这些调查表明,深度学习技术在企业系统中具有相当大的吸引力。它不再仅仅是研究人员的宠儿;这项技术正在投入使用!

调查数据显示,超过一半的人正在使用深度学习(55%),以及强化学习(22%)和迁移学习(16%),如图所示。

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

Figure 1–15. AI technologies used, from AI Adoption survey [4]

另一方面……人们也想知道受访者在检查时在想象什么:主动学习、知识图表、计划和推理。这里需要面对面的面试!

正如所料,超过一半(53%)的人使用神经网络进行图像处理。然而,令人惊讶的是,更多的人将神经网络用于结构化数据(86%)和文本(69%),如下所示。

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

Figure 1–21. Data types, limited to deep learning respondents, from AI Adoption survey [4]

当被问及使用的人工智能工具时,令人惊讶的是,大量工具主要涉及神经网络,如 TensorFlow (55%)、Keras (34%)和 PyTorch (29%)。这明显多于传统机器学习的工具,如 scikit-Learn。

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

Figure 1–29. AI tools used, in [4]

最后,人工智能采用报告[4]中的后续数字表明,深度学习的采用在各个行业都很普遍,并在人工智能成熟实践的公司中加速。

外卖:跟上人工智能成熟的人——不

it 专业人士经典的“等到别人想通了”策略对一些公司来说可能是一场灾难。这种策略忽略了新兴人工智能系统正在推动的基本范式的快速转变。这种转变需要缓慢的文化变革,以使技术变革得以成功实施。让我们详细研究一下这个问题。

洛里卡和内森经常区分人工智能采用的三个成熟阶段:尚未成熟的 (19%),正在评估的 (54%),以及正在生产的或人工智能成熟的(27%)。[4]这一区别用于理解报告中的几个因素。

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

Figure 1–2. Stage of maturity for AI adoption, in [4]

虽然这些类别是模糊的,但请观察这些关键方面。人工智能成熟的(生产中的)公司正在不断地做所有这三个类别。人工智能成熟的公司可能还没有特定的人工智能方法(如强化学习),但他们已经指派一些专家每周监测关于该方法的新兴研究。人工智能成熟的公司可能正在评估许多原型,但他们不断在他们的生产模型中使用它们进行挑战者-冠军竞赛。这是各个层面的持续创新,因此…****

一个关键的见解是,人工智能成熟的组织正在迅速扩大与尚未成熟和正在评估的组织的差距,使其难以赶上,如下所示。请注意,瓶颈(黄色突出显示)——文化没有认识到需求,用例没有确定——对于人工智能成熟的公司来说变得不那么重要。相比之下,缺乏高质量的数据和缺乏熟练的人员对人工智能成熟的公司来说更为显著。

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

Figure 1–9. Challenges, by stage of maturity, in [4]

人工智能成熟公司的人工智能技术更倾向于深度学习(以黄色突出显示),这需要更大的投资,如下所示。

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

Figure 1–17. AI technologies, by stage of maturity, in [4]

差距扩大的原因是人工智能采用的障碍主要是文化上的,而不是技术上的。在这种情况下,没有针对啤酒的跳跃式银子弹,至少在地平线上没有!

外卖:人工智能学习的动物园

在过去的一年里,深度学习的一个有趣的方面是深度学习的途径、方法、视角和实践的不断扩大。每周在 arXivPapersWithCodeDataElixirtwo minutes papers上,我经常反应真的!…还是很神奇!

在调查中,你会看到这个动物园的新术语,如迁移学习、强化学习、生成对抗学习等等。这个动物园的一部分是一个叫做元学习的类别,它表示一个算法正在学习它如何学习以及如何改进它的学习。这就像一个人类导师的角色,引导和激励学生学得更多更好。

参考上面图 1–17 中人工智能技术的成熟阶段。请注意,与评估阶段的公司相比,实践成熟的公司使用迁移学习的次数是前者的 3 倍。洛里卡和内森发表评论…

迁移学习提供了一个有趣的细微差别,因为它在生产中的使用往往需要更有经验的从业者。我们
看到成熟的实践利用迁移学习的速度是评估阶段公司的近三倍。迁移学习的应用是有价值的,尽管这些价值对于门外汉来说可能不那么明显。[4]

在公司研究更高水平的人工智能成熟度之前,他们不知道自己不知道什么,并且能够获得价值。

在其他地方,洛里卡和内森谈到了强化学习…

已经使用强化学习的受访者正在开始
在我们 2017 年列出的
强化学习的一些应用领域建立人工智能系统:客户服务;
运营、设施和车队管理;金融;和营销,
广告,和公关。[4]

最后,无监督的深度学习是一个热门的研究领域,有自动编码器,高维嵌入空间等等。许多与机器学习的明显区别正在变得模糊,例如训练/测试数据集的意义。因此,吸收这又一个范式转变将是具有挑战性的!

外卖:优化业务指标—是

成功的人工智能系统的文化变革不可或缺的是正确识别深度学习的业务用例的技能,由针对特定业务目标的指标塑造。这项技能需要重新思考基本范式、丰富的想象力和良好的商业头脑。所有职能部门(数据科学家、数据工程、开发运维专家、业务线经理等)都缺乏这种技能。)是关键的拦路虎。

在下图中,最大的技能缺口(57%)是对“ML 建模师和数据科学家”的明显需求。然而,几乎有一半(47%)表明了对能够“理解和维护一组业务用例”的人的需求。

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

Figure 1–10. Skills gap, in [4]

内森特别指出…

“人工智能的产品管理”缺乏经过验证的方法,这种专业知识需要时间在组织层面上培养。[1]

要点:不仅仅是业务指标

一个令人耳目一新的方面是对不仅仅与业务相关的指标的强调。每个组织都存在于大社会中,它必须为大社会做出贡献,而不仅仅是索取。因此,调查受访者对“透明度、可解释性、公平性、偏见、道德、隐私、安全性、可靠性和合规性”重要性的认识令人惊讶。

下图列出了调查中的问题,按人工智能采用成熟度分类。

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

Figure 1–28. Risks checked, by stage of maturity, in [4]

请注意,随着公司在人工智能采用方面的成熟,他们对这些问题的关注也在增加。我发现数据科学专业人士中越来越多的共识是,这些问题是他们公司的真正风险,并将决定应用人工智能技术的长期成功。要使这成为现实,还有艰巨的技术工作要做。把它想象成给你正在制造的核弹安装安全装置。这迫使你进入正确的心态!

外卖:另一件事

在 Pacoid 博客的结尾,有一段是以“另一件事”开始的,好像 Nathan 停顿了一下,思考了一下,并分享了最后的深切关注…

我一直听到的一个观点是,数据科学家和工程师之间有一种隐现的脱节。相反,迫在眉睫的脱节是 ML 的工程部署和业务用例的“最后一英里”之间的差距,你需要熬夜担心**。火花,卡夫卡,张量流,雪花等。,不会在那里救你。AutoML 不会在那里救你。这就是模型一旦暴露给实时客户数据就会退化的地方,这需要大量的统计专业知识来回答甚至一个简单的“为什么?”利益相关者的问题。这是一个大的攻击面暴露于针对输入数据的安全利用的点——具有目前几乎不可想象的后果。这就是复杂的道德和合规问题产生的地方,这些问题会导致愤怒的监管者前来敲门。那些是商业问题。当最终业务问题会给你的组织带来最大的痛苦时,停止膨胀数据工程团队作为灵丹妙药。我们在企业中采用人工智能的时间还不够长,关于这些问题的案例研究还不足以成为标准的 HBS 讲座,但它们将会成为。很快。[1]**

这一段真的击中了我的要害!我可以清楚地想象一家大公司热情地推出一个创新的人工智能系统来解决一个重大的商业问题,结果却撞毁了上述段落中的现实。

思考新范式和新价值观

理解上述要点的一个有用方法是认识到我们都需要以不同的方式思考过去几十年来推动企业系统技术进步的基本范式和价值观。这可不容易!因为…

这是一种思考信息以及如何有效利用信息来改进业务流程的新方式。仅仅为管理者提供见解已经不够了,这威胁到了当今大多数商业智能基础设施。见解不能在委员会会议上被搁置,而必须立即转化为指导当今商业交易的指南。

这是对软件的一种新的思考方式,今天的软件本质上是天才计算机程序员的艺术作品……就像博物馆里描绘静态逻辑清晰片段的油画。世界不是一成不变的。静态逻辑的每一部分从投入生产的那一天起就过时了,需要不断地修改和修补以跟踪不断变化的世界。如今的软件无法追踪世界每小时的变化。

这是对学习的一种新的思考方式,如今这种学习仅限于组织信息生态系统的数据集成,正如数据仓库+数据湖架构所反映的那样。这种范式必须转变为管理模型,将这些数据归纳为一个持续的学习过程。软件必须通过不断进化这些模型中的逻辑来跟踪世界的每一个曲折。所以,你上周安装的人工智能系统这周的行为有了很大的不同。你能做到吗?

这是一种思考人类智能及其在管理组织中的作用的新方式。人们越来越容易认为,用人工智能取代人类智能更具成本效益,因此这自然会导致工作岗位的减少。一个人应该接受这个结果,并发现一个新的职业。越来越难认为用人工智能(例如,人在回路中)增强人类智能具有独特的好处,应该被设计到人工智能系统中。这似乎是一个越来越困难的任务,对组织没有明显的好处。那么,这是未来社会人类智慧的最终结果吗?

不幸的是,许多组织将永远无法转变他们的文化,从而失去他们的竞争优势——作为一个企业的目的——并遭受挥之不去的死亡。

这不是必然的!作为 IT 专业人员,我们生活在一个有趣的时代。咳咳!随着人工智能技术的爆炸式增长,我们有令人兴奋的有利机会以现在难以想象的方式在全球范围内改变商业。希望是,作为一个社会,我们这样做是为了造福所有人。然而,不幸的现实是…如果我们懒惰或以自我为中心,甚至是恶意的,那些同样的机会是可以被误用的。

BizSmartAnalytics 插件

我愿意与关心上述问题的其他人合作。首先,在下面的评论中分享你的想法。第二,分享你对 BizSmartAnalytics.com所列相关文章的反馈。第三,支持 Patreon 在https://www.patreon.com/BizSmartAnalytics指导与人工智能系统相关的 IT 专业人员同行小组。

****帽子尖给《T2》数据灵丹妙药 的编辑 Lon Riesberg——这是我推荐的。每周,我都会找到至少一两个关于这个爆炸式增长的数据科学领域的优秀资源。这是我发现 Pacoid 博客的地方。在https://DataElixir.com/免费订阅。

参考

[1]内森,帕科。每个 Pacoid 的主题和会议,第 7 集。数据科学博客,多米诺数据实验室。2019 年 3 月 3 日。
https://blog . dominodatalab . com/themes-and-conferences-per-pacoid-episode-7/

**[2]洛里卡&内森。企业采用机器学习的状况。2018 年 8 月。
https://www . oreilly . com/data/free/state-of-machine-learning-adoption-in-the-enterprise . CSP(需要免费注册,不含广告拦截)

**[3]洛里卡&内森。不断发展的数据基础设施:高级分析和人工智能的工具和最佳实践。2019 年 1 月。
https://www . oreilly . com/data/free/evolving-data-infra structure . CSP(需要免费注册不含广告拦截)

[4]洛里卡&内森。人工智能在企业中的采用:企业如何在实践中规划和优先考虑人工智能项目。2019 年 2 月。
https://www . oreilly . com/data/free/ai-adoption-in-the-enterprise . CSP(需要免费注册,不含广告拦截)

[5]洛里卡。人工智能技能发展的三个有希望的领域。2018 年 8 月。
https://www . oreilly . com/ideas/3-有前途的人工智能技能发展领域

[6]洛里卡和洛基德斯。公司如何通过深度学习将人工智能投入工作。2018 年 4 月。
https://www . oreilly . com/data/free/how-companies-is-put-to-work-through-deep-learning . CSP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值