TowardsDataScience 博客中文翻译 2016~2018(二百九十六)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

优步的自主车祸调查

原文:https://towardsdatascience.com/ubers-autonomous-car-accident-investigation-57fcc88cb6e7?source=collection_archive---------7-----------------------

3 月 19 日,一个故事震惊了自动驾驶汽车行业,当时优步的一辆自动驾驶汽车在亚利桑那州坦佩撞倒了一名女子。这是被自动驾驶汽车撞上后的第一起死亡事件。这严重地对自动驾驶汽车提供的安全功能的所有说法产生了严重的怀疑。3 月 23 日,Tempe 警方发布了一段事故视频,这让许多事情都成了问题。完整视频可以在 youtube 这里观看。

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

Image Source (https://www.aol.com/article/news/2018/03/19/woman-dies-in-arizona-after-being-hit-by-uber-self-driving-car/23389700/)

分析 Dashcam 视频

完整视频可点击查看。(来源-美国广播公司行动新闻)。让我们看一下从仪表板上捕捉到的第一张图像,以分析我们获得的所有信息。

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

5 seconds before collision.

这里有几点需要注意-:
1。车道线清晰可见。
2。远处的路上有车,还有一些建筑物的灯光。
3。路上有路灯!
4。用肉眼,除了远处的汽车什么也看不见。

撇开这些细节-
1。汽车以每小时 38 英里的速度行驶,限速 45 英里。( 来源 ) 2。汽车在近光灯上行驶。

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

2 seconds before the collision

跳跃到 0.07,碰撞前 2 秒,可以观察到在左侧和右侧,我们有路灯,所以有足够的光线,但在左侧也有道路的黑色部分。

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

Left Street Light Passes by in the next frame of the same second

我们仍然处于第七秒,仍然没有任何行人的迹象,看着左边的路灯在这一帧中经过。

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

还在第 7 秒,两个灯都过去了。现在,这是我们第一次看到行人的脚步。

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

碰撞前 1 秒,从仪表板摄像头可以清楚地看到行人或有障碍物。

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

嗯,我们在第八秒,现在我们也可以看到行人和自行车的下半部分。

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

现在,这个女人和她的自行车清晰可见。但是那辆车减速了,甚至试图减速了吗?不要!再次需要注意的重要一点是,这位女士穿着黑色衬衫/夹克。但是自行车或者那个女人的白鞋子呢?

我有意跳过了第 9 帧的图像。即使在第 9 秒,赛车也没有减速!那就奇怪了!!

相机不是问题

确实,在撞击前 50 到 60 帧的时候,有人观察到了这个女人,但是机器仍然无法捕捉和减速!但这里的重点不是关于相机,它很暗,相机可能会错过这一点,而且上半部分是黑色的,也可能会错过这一点。自行车甚至完全看不见。现在主要问题来了。激光雷达怎么了?激光雷达是自动驾驶汽车使用的最昂贵的设备之一,它没有反应!!任何人都可以争辩雷达可能会错过一些信息,但激光雷达不会。激光雷达把那个女人当成噪音了吗?嗯,看起来只有这个,如果是这样,我们肯定有一个用例要处理。这里还有一点需要思考,那就是这个女人甚至一秒钟都没有意识到车的存在!

激光雷达没有工作,好吧,我们对雷达没有期望,但是它也没有工作。即使发现了自行车,照相机也坏了。这是不可接受的,需要进行详细的调查,需要了解激光雷达把这个女人当成了什么,为什么相机的输入被丢弃了。所有传感器和技术的融合失败了 3 秒钟,这是非常令人惊讶的!!还有,视频素材不够!

谁有错的问题仍然存在。**司机有错吗?**从内饰视图中可以清楚地看到,在碰撞发生前,驾驶员正在向下看。在任何这种情况下控制汽车是她的责任,但我相信即使是一个正常的司机也无法避免事故,这就是我们制造自动驾驶汽车的确切原因,以避免司机的错误。现场非常黑暗,不幸的是,这个女人在错误的时间出现在了错误的地点。如果她能从一个街灯足够亮的地方穿过去,她可能会得救。但是现在问题来了,我们有分析过的录像,但是谁有错呢?优步,女人,技术?

好吧,现在有一件事非常清楚,自动驾驶汽车行业需要严格的测试来重新赢得人们的信任。此外,需要像我们在空难调查中那样对此类事件进行详细的调查,并且应该在各个参与者之间分享,以提高这个行业的安全标准。

请随意分享你的观点。

Ubuntu +深度学习软件安装指南

原文:https://towardsdatascience.com/ubuntu-deep-learning-software-installation-guide-fdae09f79903?source=collection_archive---------0-----------------------

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

我最近在报读 Udacity 的自动驾驶汽车工程师 Nanodegree 后,造了一台深度学习机器。你可以在这里阅读我的构建:花 800 美元构建一个深度学习平台。在这篇文章中,我将描述从一个干净的构建到训练深度神经网络的必要步骤。有很多好的安装指南——特别是来自 floydhub 的这个,大部分内容都是基于它——但是我发现自己不得不挖掘许多不同的资源来正确安装所有的东西。本文的目标是将所有必要的资源整合到一个地方。

系统检查

即使在安装操作系统之前,您也应该执行一些基本的检查,以确保您的系统正常启动和运行。为此,我建议遵循 Paul 的硬件 YouTube 频道中的关于新 PC 构建的前 5 件事。他继续安装 Windows,但视频的前半部分适用于任何机器,不管是什么操作系统。

人的本质

首先下载 Ubuntu 16.04.2 LTS ,Ubuntu 最新的长期支持版本。然后,用 Ubuntu ISO 创建一个可启动的 u 盘。如果你在 macOS 上,你可以遵循 Ubuntu 官方说明这里,或者如果你在 Windows 上,你可以遵循这里。一旦你把 Ubuntu ISO 加载到你的 u 盘上,把它插入你的新版本并启动机器。要安装 Ubuntu,你需要进入启动菜单,对我来说是 F11 键,然后选择从 u 盘启动。从那里,您可以简单地按照屏幕上的安装说明。你也可以参考 Ubuntu 的社区 wiki 快速指南:从 USB 记忆棒安装 Ubuntu了解更多细节。

基础

从终端运行以下命令来更新软件包并安装一些基本软件:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential cmake g++ gfortran git vim pkg-config python-dev software-properties-common wget
sudo apt-get autoremove
sudo rm -rf /var/lib/apt/lists/*

Nvidia 驱动程序

您需要根据您的 GPU 型号下载正确的驱动程序,您可以使用以下命令进行检查:

lspci | grep -i nvidia

查看专有 GPU 驱动程序 PPA 库,找到您的 GPU 的当前版本。在撰写本文时,GeForce 10 系列的最新版本是 381.22,但我选择了 375.66,这是当前的长期分支版本。使用以下命令安装驱动程序:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-375

然后重新启动计算机:

sudo shutdown -r now

要再次检查驱动程序是否已正确安装:

cat /proc/driver/nvidia/version

库达

Nvidia 的网站下载 CUDA 8.0 工具包。转到下载目录(或者您选择保存它的地方)并安装 CUDA:

sudo dpkg -i cuda-repo-ubuntu1604*amd64.deb
sudo apt-get update
sudo apt-get install cuda

将 CUDA 添加到环境变量:

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

检查是否安装了正确版本的 CUDA:

nvcc -V

重新启动计算机:

sudo shutdown -r now

cuDNN

Nvidia 的网站下载 cuDNN 库。在下载 cuDNN 之前,您需要首先注册 Nvidia 的开发者计划。他们说这可能需要几天的时间,但是我几乎立刻就获得了访问权限。在撰写本文时,cuDNN v5.1 是 TensorFlow 官方支持的版本,所以除非你知道 v6.0 受支持,否则不要发布(他们目前正在开发)。下载后,转到下载目录提取并复制文件:

tar xvf cudnn*.tgz
cd cuda
sudo cp -P */*.h /usr/local/cuda/include/
sudo cp -P */libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

Anaconda +包

Continuum 站点下载 Anaconda 安装程序。我选择了 Python 2.7 版本,但是您可以选择任何您想要的版本作为您的默认 Python:

bash Anaconda2-4.4.0-Linux-x86_64.sh

当安装程序询问您是否想将 Anaconda 添加到您的路径中时,回答“是”(除非您不想将它作为您的默认 Python)。一旦安装了 Anaconda,就可以用所有必要的深度学习库创建一个新的 conda 环境。我将使用 Udacity 的初学者工具包作为一个例子,因为这是我在许多项目中使用的。从CarND-term 1-Starter-Kit下载(或复制粘贴)environment-gpu.yml 文件。您可以在文件的顶部随意更改环境的名称。从保存环境-gpu.yml 文件的目录中:

conda env create **-**f environment-gpu**.**yml

要激活您的新环境:

source activate carnd-term1

现在,您可以通过运行 TensorFlow 的内置 MNIST 示例模型(不再适用于 TensorFlow 版本≥ 1.0)进行测试,以确保一切正常工作。请注意,以下命令将在首次运行时自动下载 12 MB MNIST 数据集:

python -m tensorflow.models.image.mnist.convolutional

如果在这一点上一切正常,那么恭喜你——你现在已经准备好对热狗进行分类了!

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

http://www.foodandwine.com/news/silicon-valleys-hot-dog-identifying-app-very-real

UCSF 科学家利用人工智能发现创伤性脑损伤的特征

原文:https://towardsdatascience.com/ucsf-scientists-use-artificial-intelligence-to-uncover-hallmarks-of-traumatic-brain-injury-a672ae75704a?source=collection_archive---------5-----------------------

我们在 UCSF 大学的长期合作者几周前刚刚发表了一篇论文,题为“使用 PLOS 一号中的拓扑数据分析揭示创伤性脑损伤(TBI)中的精确表型-生物标记关联”。UCSF 也发布了一份新闻稿。这是我们与 UCSF 合作的第二份出版物(以前的《自然》论文快公司文章和我们的以前的博客)。这项研究得到了美国国立卫生研究院——国家神经疾病和中风研究所的资助。这些分析可能为 TBI 患者的未来临床试验中的患者分层和治疗计划提供一种可靠的方法。我已经在另一个博客中写了这项研究。

创伤性脑损伤是一种复杂的疾病,通常根据临床体征和症状来描述。最近的成像和分子生物标记创新为改善护理提供了机会,结合了病理解剖和分子机制。用于 TBI 诊断和患者分层的不同数据是一个挑战。来自扎克伯格旧金山总医院创伤中心、匹兹堡大学医学中心和德克萨斯州奥斯汀大学医学中心 Brackenridge 的急性创伤性脑损伤患者参与了这项研究。创伤性脑损伤的转化研究和临床知识(TRACK-TBI)试点多中心研究招募了 586 名急性 TBI 患者,并收集了研究人群的不同公共数据元素(TBI-CDEs),包括影像学、遗传学和临床结果。这些 CDEs 包含 944 个变量,包括人口统计学、临床表现、影像学和心理测试。

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

该论文阐述了机器智能(MI)如何揭示患者结果中的数据驱动模式,以识别潜在的恢复生物标志物,这可以使用更传统的单变量统计测试方法,显著预测 TBI 后患者结果的恢复。MI 算法在多维空间中组织并绘制了 TBI 患者的数据,确定了轻度 TBI 患者的一个子集,该子集具有与损伤后 3 个月和 6 个月的不利结果相关的特定多变量表型。进一步的分析显示,该患者亚组具有较高的创伤后应激障碍(PTSD)发生率,并且富含几种与细胞对应激和 DNA 损伤的反应以及纹状体多巴胺加工相关的独特遗传多态性。最后,MI 确定了一个独特的诊断亚组,该亚组由轻度 TBI 后出现不良结果的患者组成,这些患者可通过特定基因多态性的存在进行显著预测。

如果你想合作,请联系我们在 collaborators@ayasdi.com

Udacity 无人驾驶汽车纳米度项目 10 —模型预测控制

原文:https://towardsdatascience.com/udacity-self-driving-car-nanodegree-project-10-model-predictive-control-e9b4195d3f9?source=collection_archive---------3-----------------------

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

Udacity 自动驾驶汽车工程师纳米学位项目的第十个项目,也是第二学期的期末项目,题为“模型预测控制”(MPC)。MPC 将 PID 控制的概念提升到无数个层次,随之而来的是无数倍的复杂性。不过,Udacity 将大部分复杂性卸载到了 IPOPTCPPAD 包中。

像 PID 控制和行为克隆项目一样,这个项目的目标是在 Udacity 提供的模拟器中导航一条轨道。我很高兴看到他们从“湖”赛道上获得了一些额外的里程(明白吗?).这三个项目都需要我们的代码通过 websocket 与模拟器通信,根据它提供的数据向模拟器发送转向和油门命令。在行为克隆中,它提供相机馈送,在 PID 控制中,它提供跨轨道误差(CTE,大约是从轨道中心线的距离),这次它提供遥测(位置、速度、方向)和未来一段轨道的几个航路点。这个项目的奖金挑战原来是强制性的(什么?!):一旦我们让我们的控制器工作,我们必须在发送控制命令之前投入 100 毫秒的延迟,以模拟我们在现实世界中可能遇到的延迟类型。

首先要做的是对提供的路点拟合一条曲线,最好是在它们已经从轨迹坐标转换到车辆视点之后,以简化未来的计算。我称之为最佳拟合曲线。然后,IPOPT 和 CPPAD 软件包可用于计算最佳轨迹及其相关的驱动命令,以便以最佳拟合最小化误差。你可能会想,“那么,为什么不遵循最合适的呢?”当然,这就是我们在 PID 控制中所做的事情,但现在我们知道接下来会发生什么,可以更聪明地规划我们的控制。当你开车转弯时,你并不完全是九十度,对吗?或许更像这样?

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

Image credit: Udacity

MPC 可以考虑车辆的运动模型,在给定一组约束的情况下,根据车辆运动的限制以及定义我们希望车辆如何移动的成本组合(如保持接近最佳拟合和所需方向,或防止车辆过快猛打方向盘),规划出有意义的路径。

优化只考虑短时间内的航路点,因为这是我们真正需要计划的(就我们的执行器控制而言)。我们可以调整优化器在其计划中使用的离散时间点的数量,以及它们之间的时间间隔,以便它可以在合理的时间内计算出最佳计划(我们当然希望它足够快,以实时控制汽车)。优化器需要一个巨大的一维向量,其中包括计划中每个时间步的状态变量和约束,以及总成本函数——坦率地说,不是特别直观,但易于管理。

由于未来时间步长的变量取决于先前的时间步长,因此它们的约束利用了车辆的运动学模型。运动学模型包括车辆的 x 和 y 坐标、方位角(psi)和速度,以及跨轨迹误差和 psi 误差(epsi)。执行器输出只是加速度和 delta(转向角)。该模型将前一时间步的状态和动作结合起来,根据以下公式计算当前时间步的状态:

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

经过一些调试和调整成本函数,我的车在赛道上行驶。是时候通过增加延迟来彻底摧毁它了——这就是所发生的事情。我处理它的方法是双重的(不仅仅是限制速度):最初的运动学方程依赖于前一个时间步的驱动,但是有 100 毫秒的延迟(恰好是我的时间步间隔),驱动在另一个时间步之后应用,所以我改变了方程来说明这一点。(注意:我的项目评审员建议了一个更简单的解决方案——在运行 MPC 求解器方法之前,将汽车的当前状态预测到未来 100 毫秒。例如,按照现在的情况,传递给解算器的我的汽车的 x 和 y 位置是0,0,但是 100 毫秒后它应该是不同的。)此外,除了课程中建议的成本函数,我还加入了一个惩罚速度和转向组合的成本,这导致了更多的可控转弯。

下面是一段轻松愉快的视频回顾:

这个项目的源代码可以在我的 GitHub 上找到

原载于 2017 年 6 月 30 日【http://jeremyshannon.com/2017/06/30/udacity-sdcnd-mpc.html】*。*

Udacity 无人驾驶汽车纳米学位项目 4 —高级车道发现

原文:https://towardsdatascience.com/udacity-self-driving-car-nanodegree-project-4-advanced-lane-finding-f4492136a19d?source=collection_archive---------2-----------------------

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

欢迎来到“妈妈报告”(嗨妈妈!);如果技术术语和晦涩难懂的语言更符合你的风格,那么 请点击这里 ,否则请尽情享受吧!

Udacity 自动驾驶汽车工程师 Nanodegree 第一学期的第四个项目建立在第一个项目的之上,超过了第二个项目和第三个项目。虽然这看起来很明显,因为它们都涉及到寻找车道线,但这背后的原因是项目 2 和项目 3 向我们介绍了深度学习的新奇之处,几乎可以为我们编写代码,而项目 1 和项目 4 依赖于更传统的计算机视觉技术来非常明确地了解我们如何从输入到输出。这几乎让人失望——就像用键盘换铅笔一样——但是人们会说:(我听起来像总统吗?)公司仍然依赖这些技术,所以它绝对值得学习(并且仍然有趣和具有挑战性), OpenCV 库是承担所有重担的人。

"所以让我们拿个仪表盘找些车道!"你是说?好吧,等一下,特克斯。你不能随便就开始找车道。首先,你用的摄像机?它扭曲了图像。你可能看不出来,但这是真的!看:

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

幸运的是,这可以通过几张棋盘照片和 OpenCV 函数findChessboardCornerscalibrateCamera来纠正(对于单个相机/镜头)。看看这个:

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

我知道——对我来说它看起来也几乎一样,但失真在图像的角落最明显(看看底部汽车引擎盖形状的差异)。

现在我们可以开始有趣的事情了。下一步是应用透视变换来获得前方车道的鸟瞰图。它看起来是这样的:

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

我可能做了不必要的努力来使我的透视变换恰到好处(使直线在最终的鸟瞰图中完全垂直),但是因为变换是根据相同的规则反向的,所以最终可能没什么关系。

接下来,我探索了一些不同的颜色转换和渐变阈值,试图隔离车道线,并生成一个二进制图像,其中车道线处为 1(白色),其他地方为 0(黑色)。这无疑是整个过程中最微妙的部分,对光线条件和褪色非常敏感(更不用说那些该死的白色汽车了!)在路上。我不会用细节来烦你;我只想说这是我在这个项目上花了大部分时间的地方。最后,我结合了一个在 Lab 色彩空间的 B 通道上提取黄线的阈值和一个在 HLS 色彩空间的 L 通道上提取白色的阈值。这是每一个的样子:

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

这是它们在几幅测试图像上的组合:

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

不算太寒酸!

现在,聪明的一点是:搜索整个图像来识别哪些像素属于左车道和右车道是不必要的(并且计算量很大),因此我们计算了二进制图像下半部分的直方图,如下所示:

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

左半部分和右半部分的峰值为我们提供了车道线开始位置的良好估计,因此我们可以从底部开始搜索小窗口,并基本上沿着车道线一直到顶部,直到识别出每条线中的所有像素。然后可以将多项式曲线应用于识别的像素,瞧!

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

不仅如此,使用前一帧的拟合并在附近搜索,可以更容易地在视频的连续帧中找到像素,如下所示:

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

它只是在多项式线和多边形中着色以填充它们之间的通道,应用反向透视变换,并将结果与原始图像相结合。我们还做了一些简单的计算和转换,以确定道路的曲率半径和汽车离车道中心的距离。这是最终的结果:

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

这是我应用于下面链接的视频的管道,带有一点平滑(整合来自过去几帧的信息)和健全性检查以拒绝异常值(例如忽略不在特定距离内的拟合)。

该视频可爱地展示了图像处理管道中的步骤:

这里有一个链接到我的视频结果,这里有一个奖励视频,其中有一些额外的诊断信息,在这里你可以看到算法与困难的照明和路面条件进行斗争(在某些情况下会崩溃)。

再说一遍,如果你感兴趣的是技术类的东西, 去这里

最初发表于 …//2017/03/03/uda city-SD CND-advanced-lane-finding . html2017 年 3 月 3 日。

Tableau 认证终极指南

原文:https://towardsdatascience.com/ultimate-guide-to-getting-certified-in-tableau-5bd2df7d0c7d?source=collection_archive---------3-----------------------

作为一个 tableau 的忠实支持者,一个认为 tableau 是商业智能和可视化领域最好的产品的人,我很自然地想办法提高我的 Tableau 知识,这样我就可以随时成为任何 Tableau 相关查询的联系人。在提高知识的同时,你会有一个两难的时刻,如果你现在就去争取一个更公开的认可,而不仅仅局限于你的“工作认可”,或者你应该坚持只与工作相关的认可。

虽然工作认可总是好的,并且是我们非常努力工作的事情,但获得证书使我们能够在社区中被听到,并有助于围绕数据科学、分析和 BI 进行建设性的讨论。从对整体形象的增值角度来看,证书并不是普遍得到认可的,因为如果你与 10 位经理谈论“他们在审查/选择求职面试简历时是否重视证书”,很肯定你会得到 5 个肯定,5 个否定。因此,学生和入门级的专业人士经常处于进退两难的境地,但考虑到我对画面的热爱,我不在其中😊。

自从我加入锡拉丘兹大学的 iSchool 以来,我一直在考虑获得 tableau 的认证,以及大多数招聘职位如何要求一个人知道至少一种标准的 BI 工具,无论是 Tableau、Microstrategy、PowerBI 还是其他工具。BI 工具上的所有这些招聘信息、讲座和博客点燃了我继续学习的好奇心,我决定要在 Tableau 获得认证。我在 2016 年 9 月决定了这一点,但由于时间表和事件的顺序,我未能将此事置于其他承诺之上。但最后,我在去年(2017 年)感恩节假期后恢复活力后做了这件事,并预订了日期。如果你已经犹豫了一段时间,不知道这样做的价值以及你是否会有时间,你应该只预订考试的日期。如果你不预订日期,你永远不会有时间!简单。

是什么启发我写了一篇关于 Tableau 证书的博客?

互联网上有大量的博客和资源,经过上个月的搜索,我觉得,我拥有的资源帮助我在考试中获得了超过 90%的分数。可以肯定的是,下面的资源不会让你获得 Tableau 认证,但也会帮助你成长为 Tableau 开发人员。

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

在我们深入研究计划以及如何从可用的免费/付费资源中学习之前,让我们先为从未听说过 Tableau 认证的人谈谈内务管理。

这里我们讨论的是 Tableau 桌面认证,请注意,Tableau 也是 Tableau 服务器认证,但这是另一天。

即使在 Tableau 桌面认证套件中,我们也根据您对该工具的理解和专业水平提供了几个选项。

1) Tableau 桌面合格助理(TDQA)

  • 推荐给具有至少 5 个月使用该工具的实践经验的人,以及了解 SQL 基础知识并理解数据库、连接和标准数据分析术语的人(即使您以前没有 Tableau 的经验,但愿意学习,您也可以获得认证)。
  • 费用:250 美元(不幸的是,没有学生折扣)
  • 时间限制:2 小时(额外 30 分钟用于设置和调查)
  • 问题数量:36
  • 问题的划分:70 次动手/30 次基于工具本身的理论
  • 及格分数:75%(注:每道题根据难度高低权重不同,动手更有价值)
  • Tableau 考试指南:下载 Tableau 考试指南

2) Tableau 桌面认证专家:

  • 推荐给有丰富 Tableau 桌面经验的人。建议有 9 个月以上的经验。与 TDQA 不同,该证书包括动手操作、书面回答和在 Tableau 桌面中构建/保存解决方案
  • 成本:600 美元(同样没有折扣)
  • 时间限制:3 小时(同样,额外的 30-45 分钟用于设置和调查)
  • 通过和评分:根据详细的评分标准手动评分

备考:

该博客安全地假设您从未使用过 Tableau 或者对该工具的访问权限有限。如果您是一名学生,并且没有访问该工具的权限, tableau 为学生提供一年的免费桌面工具访问权限。对于非学生和专业人士, tableau 提供 14 天的试用期这可能不够。但在博文的最后,我会分享免费获得 6 个月 Tableau 桌面访问的方法。继续读!

开始准备:

建议您做的第一件事是浏览 Tableau 桌面证书指南中的每个单词。pdf 做得非常好,列出了证书的知识,考试中测量的详细技能,并为您提供了样本问题和解决方案,以验证您对所要求技能的理解。对于该指南对于掌握证书的重要性,我怎么强调都不为过。实际上,在我准备的时候,我每周都会浏览 pdf 文档,并在我有绝对信心的技能和仍然需要改进的技能上打勾。一旦你复习完考试指南,就该记下你缺乏必要知识的地方,并开始复习。

我已经尝试将资源分为初级高级级别,以便在正确的时间访问正确的资源。

初学者资源:

  1. Tableau 学习 : 话不多说至于 Tableau 官网的免费培训对我备考有多大帮助。如果你看过考试指南,你会知道技能测试部分已经被分成数据连接,分别组织&简化数据 Tableau Learning 以类似的方式很好地组织了他们的培训。浏览 Tableau Desktop 下的所有视频两次,是的,两次,因为仅仅浏览一次是不够的,当你像我一样重新观看时,你会在观看时学到更多的技巧和诀窍,并提高你对该工具的理解。

**费用:**免费

2)【Tableau 10 A-Z 初学者】Kirill Eramenko**😗*Kirill Eramenko 的初学者课程不是很适合专注于 Tableau 证书,如 Tableau Learning 和 Lukas Halim 的初学者 Tableau(描述如下),但该课程很好地介绍了 Tableau 10 的所有功能,该课程最好的部分是它很实用。一旦你完成了这个课程,你将从一个专业人士的角度学习 tableau,而不是作为一个仅仅是为了获得认证而学习 tableau 的学生。

通常需要 199.99 美元,但你总能在 Udemy online 上获得 90-95 折的优惠券,其中之一就是“JNY1202”

3)Lukas Halim**😗*与 Kirill 的课程不同,本课程是专门为获得 Tableau 桌面认证而设计的。视频讲座充其量也就相当一般,我不会责怪 Lukas,因为课程的主要重点是让学生获得认证,而不是成为 Tableau 专家。本课程的好处是它非常紧密地遵循考试指南中的“技能衡量”部分,这允许您遵循考试的结构,并对所问的技能/问题更加自信。

课程中最精彩的部分?

Tableau 桌面资格助理考试的小测验和两个完整长度的模拟测试。我将在高级部分谈论考试,因为如果你还不熟悉这个工具本身,谈论模拟考试是没有意义的。

**费用:**与上面的建议类似,你可以用“JNY1202”这样的代码花 10-12 美元就能进入课程

  1. 安迪是数据学校的主教练,负责在 tableau 和 alteryx 上培训超过 1000 名个人。他是 Tableau 禅师,也是一个了不起的老师。在这段视频中,Andy 和他的 tableau/data school 学生团队分享了他们参加 Tableau QA 考试的经历,并单独谈论了技能部分,分享了一些如何快速学习这些技能的技巧&以及在考试中会遇到什么。我不得不说,这是一个相当不错的长达一小时的视频。

**花费:**你 1 个小时的时间

  1. Tableau 知识库 : 虽然没有遵循这些建议的特定格式,但我过去常常只是将“衡量技能”中的一行复制粘贴到谷歌上,然后阅读 Tableau 知识库上的文章。考虑到考试包含 30%的理论问题/权重,我们可以使用互联网搜索答案,阅读 Tableau 知识库是一个很好的培养习惯。

成本:免费

初学者部分到此为止。如果你遵循先完成 Tableau 学习,然后转到 Kirill 的 Tableau 10 A-Z,然后转到 Lukas Halim 的课程的模式,你现在应该足够自信,能够尝试 Tableau QA 考试指南中 50-60%以上的问题。

高级资源:

一旦您尝试了 Tableau QA 指南中的问题,就该进入高级部分了,这些部分将涵盖细节层次计算、集合/组、分析窗格等高级主题:

  1. Tableau 10 基里尔·叶列缅科 : 我非常喜欢基里尔的教学方式和他亲自动手的方法,即使是最简单的概念。在本高级培训中,Kirill 将带您浏览 5 个仪表板,涵盖一些非常高级的内容,如详细程度计算、高级计算(如字符串处理、数据处理、高级连接、数据混合)、仪表板操作、集合和组!同样,与 Kirill 之前的课程一样,他不会带着让您获得认证的心态教授课程,他会从专业分析师的角度教授,以及分析师将如何处理最终利益相关方提出的数据问题。一个一定要看的视频课程。

成本:$ 10–12

2)Coursera 的数据可视化与 Tableau 交流: 杜克大学的这门课程是我最喜欢的在线学习 Tableau 的课程之一。本课程最精彩的部分是,教师使用的数据集都是经过深思熟虑的,并且是实际操作的。数据集包括 H1B 工作签证申请数据和由 Dognition 提供的真实商业数据集,Dognition 是一家狗训练公司,它很乐意向学生提供关于他们公司的数据。

通过注册该课程,您还可以免费使用**tableau 6 个月,**即使您没有注册他们的付费证书选项。如果你因为没有 tableau 访问权限而坚持自己,那就去做吧

费用:免费,如果你需要完成证书

3)Simplilearn 的模拟测试:在你完成了上面链接的高级视频课程后,你现在已经准备好测试你的知识并了解你的弱点在哪里。如果你在网上搜索 tableau 考试的模拟试题,你会感到失望。在你准备期末考试之前,没有很多资源可以测试你的知识。Simplilearn 提供 2 个模拟测试样本,在您提交个人详细信息后,测试 1 即可公开获取,而如果您需要访问测试 2,则必须注册 Simplilearn 提供的 Tableau 课程的免费试用。当您尝试本模拟测试中的问题时,您会慢慢意识到这些问题的水平比考试指南低一个等级。真正的考试符合考试指南的水平,但由于没有太多的模拟考试,任何可以测试你的知识的考试都更有价值。如果你在这些测试中得分在 90%以上,不要太高兴,真正的模拟测试如下所述。

**费用:**免费或 7 天免费试用

  1. 学习 Tableau 实践考试 1:Tableau 桌面合格协理考试的事实上的实践考试。一旦你完成了所有的课程链接,Lukas Halim 的课程测试和 Simplilearn 的练习测试,并复习了测试之后,是时候进行真正的测试了!如果我说这个测试不值得,那我就是在撒谎。这是最接近 Tableau 的考试(包括练习 2,如下所述)。如果你真的对认证很认真的话,这是必须的。Lukas 做了一项了不起的工作,他真的提供了能很好地引起考试共鸣的数据集和问题。它的挑战性足以让你思考,不像 Simplilearn 测试,但也足够简单,让你对自己的准备感觉良好。卢卡斯创造了这些测试。

这项测试的另一个出色之处是 Lukas 为所有问题提供了一个出色的解决方案,而 simplilearn 没有做到这一点。这些解决方案指南帮助你了解错误的解决方案,并帮助你以更好的方式学习

**费用:**包含在您购买的 Lukas Halim 课程中,如果您没有兴趣购买课程,Lukas 还有独立测试包(比课程贵)。LearningTableau.com 有详细报道

  1. 高级概念:

如果我必须根据不同的难度等级来评价 tableau 考试,我会说 25%的问题是高级概念,我会在下面列出。这些概念是上述课程的一部分,但是单个概念的博客/视频可以让你更加关注它们,从而对它们更加好奇。你不仅要为考试准备这些高级概念,而且作为一个 tableau 的重度用户,我个人也在日常的 tableau 工作中使用一些概念。

a.**细节层次计算:**这是考试中最重要的概念之一。你不会得到超过 2-3 个关于这个概念的问题,但是考虑到它的用例以及 LOD 的强大,当然建议你尽可能多的了解它们。如果你浏览下面的链接,你会获得足够的关于 LOD 及其用例的知识。在考试中,您可能会遇到关于群组分析(或每个群组贡献了多少收入/销售额)、客户订单频率、客户获取的问题。

这里有一个提示,它将在考试中帮助你:只要学习固定 LOD,甚至不用担心包含或排除 LOD,包含和排除能做的,固定也能做。所以要成为固定 LOD 的专家。这里有一些关于它们的好资源

b. **Top N/Nested N/Nested 排序:**另一个重要的概念,你可以很容易地想到关于 Top N/Nested N 的几个问题。这并不难,但如果没有给予适当的尊重,就很容易被忽略。以下资源将帮助您理解它。

c.**表计算:**大多数 tableau 新用户都知道计算字段,如 sum、average、datediff、datepart 等,但 tableau 中计算的另一个重要方面是表计算。这里有一些关于它们的好资源:

d.**参数及其用例:**虽然您不会被要求“专门”创建一个参数来解决任何问题,但它是您希望添加到 tableau 目录中的一个特性。最终利益相关者喜欢摆弄数据和控制数据点/参数的能力。tableau 中的参数赋予了他们这种超能力。

(我几乎每隔一周就重温一次这个视频,以获得如何在我的仪表板中使用参数的想法,它太棒了!只需将它加入书签以备将来使用)

e.**分析窗格:**分析窗格覆盖了考试总分数的 15%以上,是失分是犯罪的部分之一。如果你知道均值、中位数、众数、标准差、回归是什么意思,这里应该不会失分。一些好的资源:

f.**其他重要概念:**虽然我没有任何推荐的概念列表资源,但上面的课程很好地涵盖了它们:

  • 集合、组和创建组合集合
  • 高级过滤
  • 数据混合
  • 如何利用交叉表
  • 数据透视表
  • 拆分,自定义拆分
  • 连接计算
  • 绿色药丸和蓝色药丸的区别
  1. 学习表格练习测试 2 :已经学得够多了,该准备考试了。你怎么知道你是否准备好考试了呢?通过尝试卢卡斯·哈利姆的模拟测试 2。这两个测试都是最接近真实的测试。如果你直接从 udemy 上购买课程,你可以直接自动参加这两项考试,总共可以节省 20 美元。当尝试这个测试时,确保尝试复制真实的考试环境,这基本上意味着在两个小时内进行测试,没有手机,没有干扰。只有你和练习测试可以访问互联网,但没有电子邮件和聊天应用程序。一旦你完成了,即使你的分数低于 75%也不要担心,我有朋友在第二次测试中的分数低于 50%,但却通过了考试。只要确保你把事情放在你的下巴上,并仔细阅读解决方案指南。你现在准备好了!及时行乐!

杂项提示:

  • 该考试是监考考试,您可以在方便的时候进行,这意味着您可以在任何地方进行考试,唯一的问题是它将被监考。
  • 考试将在安装了相关数据文件和 tableau 桌面的虚拟机中进行。请务必查看数据文件。
  • 另一个非常重要的提示是,我一直给与我一起学习的其他人,总是用你的问题编号来重命名你的工作表。不要把它放在第一页、第二页……当到了复习的时候,你会浪费时间去找问题的工作表。
  • 在开始解决问题之前,在您的工作簿中添加一个仪表板,并在视图中拖动一个文本元素,开始记录需要检查的问题/要点,稍后再回来。
  • 一开始的问题让我很惊讶。这些问题的难度让我大吃一惊,我花了将近 20 分钟才解决了 3 个问题。所以,如果你也遇到了这种情况,不要担心,在最初的困难之后,问题会变得很简单,很容易解决。
  • 即使你对理论问题 100%有信心,也不要在没有搜索的情况下给它打分。提问的方式会利用你的疏忽,这样你就会失分。
  • 仪表板问题很简单,但问题的微小细节很容易被忽略。小心点。
  • 当你在 chrome 和 tableau 之间切换时,利用分屏可以节省一些时间。chrome 考试标签是移动自适应的,所以如果你调整考试标签的大小,你仍然可以阅读较小的 chrome 标签中的所有文本,而无需滚动。这给了我很大的帮助,也让我在回答问题的时候可以多次阅读问题。

继续你的学习:

考完了吗?已经认证了?恭喜你。你做到了。但是下一步,如果你想继续学习 Tableau 并从这一点开始成长。以下资源对我很有帮助,我很确定你也能从中学到很多。

  • tableau 大会直播:#Data17 即 Tableau 大会是 Tableau 每年举办的最大的数据大会之一。如果你是一名学生,参加会议的费用会很高,但是如果你能接触到会议上讨论的内容,如果你能接触到会议上教授的实践练习册,会怎么样呢?
  • 是啊。你可以!前往 tclive.tableau.com向最优秀的人学习!每年他们都会用最新的#数据视频和 handson 工作簿更新内容。
  • #改头换面星期一:需要一些不断的灵感和数据来挑战自己?网络上每周都有一些非常好的社交项目,其中之一是安迪·克里贝尔和伊娃·默里的#改头换面星期一,请访问#改头换面星期一,了解更多关于社区仪表盘的信息,让你大吃一惊!
  • 即社会公益:类似于#改头换面星期一,但具有独特的挑战。点击了解更多信息
  • Tableau Tips 周二:每周一篇关于一些高级 Tableau 概念的博客文章,由 Andy Kriebel 亲自解释!他们的一些令人惊叹的博客帖子包括 KPI 和迷你图创建棒棒糖图表

这应该足以满足你的好奇心,以了解更多关于 Tableau。如果你觉得这篇博文足够有价值,点击分享按钮,或者在 Medium 上阅读时鼓掌,或者在 LinkedIn 上添加我,让我们在这里创建一个#数据社区,互相学习。

原载于 2018 年 10 月 1 日www.linkedin.com

CTR 预测的不确定性:一个阐明所有不确定性的模型

原文:https://towardsdatascience.com/uncertainty-for-ctr-prediction-one-model-to-clarify-them-all-8cb0aa5ed2?source=collection_archive---------21-----------------------

在本系列的第一篇文章的中,我们讨论了会影响模型的三种不确定性——数据不确定性、模型不确定性和测量不确定性。在的第二篇文章中,我们具体讨论了处理模型不确定性的各种方法。然后,在我们的第三篇文章中,我们展示了如何利用模型的不确定性来鼓励在推荐系统中探索新项目。

如果我们可以使用一个统一的模型,以一种有原则的方式处理所有三种类型的不确定性,这不是很好吗?在这篇文章中,我们将向你展示我们在 Taboola 是如何实现一个神经网络来估计一个物品与用户相关的概率,以及这个预测的不确定性。

让我们跳到深水处

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

一张图胜过千言万语,不是吗?一张包含一千个神经元的图片?…

无论如何,这是我们使用的模型。该模型由几个模块组成。我们将解释每个人的目标,然后画面会变得更清晰…

项目模块

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

该模型试图预测一个项目被点击的概率,即 CTR(点击率)。为此,我们有一个模块,它获取项目的特征作为输入,如标题和缩略图,并输出一个密集的表示——如果你愿意,也可以是一个数字向量。

一旦模型被训练,这个向量将包含从项目中提取的重要信息。

上下文模块

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

我们说过模型预测了一个项目被点击的概率,对吗?但是这个项目是在什么样的背景下展示的呢?

上下文可能意味着很多事情——出版商、用户、一天中的时间等等。该模块获取上下文的特征作为输入。然后它输出上下文的密集表示。

融合模块

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

因此,我们从项目和上下文中提取了信息。当然,这两者之间有一些互动。例如,与金融出版商相比,体育出版商中关于足球的项目可能具有更高的点击率。

这个模块将两种表示融合成一种,类似于协同过滤。

估计模块

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

最后,我们有一个模块,其目标是预测 CTR。此外,它还估计了 CTR 估计的不确定性。

我猜你对这个模块是如何工作的不太确定,所以让我们来解释一下。

我们将带您了解我们提到的三种不确定性,并向您展示我们的模型是如何处理每一种不确定性的。首先,让我们解决数据的不确定性。

资料不确定

让我们用一些在回归任务上训练的通用神经网络。一个常见的损失函数是 MSE——均方误差。我们喜欢这种损失,因为它是直观的,对不对?您希望最小化误差…但事实证明,当您最小化 MSE 时,您隐含地最大化了数据的似然性-假设标签正态分布,具有固定的标准偏差𝝈.这个𝝈是数据中固有的噪声。

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

我们可以做的一件事是通过引入一个新的节点,我们称之为𝝈.,显式地最大化可能性将其插入似然方程并让梯度传播使得该节点能够学习输出数据噪声。

我们没有取得任何不同,对吗?我们得到了与最初基于 MSE 的模型相同的结果。但是,现在我们可以引入从最后一层到𝝈:的链路

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

现在我们开始有趣的事情了!𝝈现在是输入的函数。这意味着模型可以学习将不同级别的数据不确定性与不同的输入关联起来。

我们可以让这个模型更加强大。我们可以估计高斯分布的混合物,而不是估计高斯分布。我们加入的高斯函数越多,模型的容量就越大——也更容易过度拟合,所以要小心。

这种架构被称为 MDN——混合密度网络。它是由主教等人于 1994 年引进的。以下是它捕捉到的一个例子:

我们有两组类似的项目——一组是关于购物的,另一组是关于运动的。

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

事实证明,购物项目往往有更多的可变点击率——可能是由于趋势。事实上,如果我们要求模型估计每组中一个项目的不确定性(图中的虚线),我们得到的购物不确定性比运动更高。

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

所以数据不确定性已经过去了。下一步是什么?

测量不确定度

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

这个有点复杂。在的第一篇文章中,我们解释了有时候测量会有噪音。这可能会导致有噪声的要素甚至有噪声的标注。在我们的例子中,我们的标签 y 是一个项目的经验性点击率——到目前为止它被点击的次数除以它被显示的次数。

假设一个物品的真实 CTR 是 y* —也就是说,没有测量噪声。如果我们在上下文中无限次显示该项目,这将是 CTR。但是时间是有限的(至少我们有的时间是有限的),所以我们只展示了有限的次数。我们测量了一个观察到的 CTR y。这个 y 有测量噪声——我们用𝜺.表示

接下来,我们假设𝜺呈正态分布,标准偏差为𝝈𝜺。r 的𝝈𝜺函数——我们展示物品的次数。r 越大,𝝈𝜺越小,这使得 y 更类似于 y*。

在一天结束时,在我们把你从数学细节中解救出来(你可以在我们的论文中找到)之后,我们得到这个可能性等式:

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

这与混合高斯分布的 MDN 架构中的可能性相同,但有一点不同,误差项分为两部分:

  • 数据不确定性(𝝈i)
  • 测量不确定度(𝝈𝜺)

既然模型能够用不同的术语解释每个不确定性,数据不确定性就不会被测量不确定性所污染。

除了能够以更好的方式解释数据,这允许我们在训练过程中使用更多的数据。这是因为在这项工作之前,我们过滤掉了太多噪音的数据。

最后但并不是最不重要的

在前一篇文章中,我们讨论了如何处理模型不确定性。我们描述的方法之一是在推理时使用 dropout。

能够估计模型的不确定性使我们能够更好地理解模型由于缺乏数据而不知道的东西。所以让我们来测试一下吧!

让我们看看独特的标题是否与高不确定性有关。我们将把训练集中的每个标题映射到一个密集表示(例如,平均 word2vec 嵌入),并期望该模型对唯一标题不太确定,唯一标题是映射到嵌入空间的稀疏区域的标题。

为了测试它,我们通过计算 KDE(核密度估计)来计算稀疏和密集区域。这是一种估计我们空间的 PDF(概率密度函数)的方法。接下来,我们要求模型估计与每个标题相关的不确定性。事实证明,该模型在稀疏区域确实具有更高的不确定性!

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

很好…如果我们向模型显示更多稀疏区域的标题,会发生什么?会不会对这些区域比较确定?让我们来测试一下!

我们取了一堆类似的关于汽车的标题,把它们从训练集中去掉了。实际上,它改变了他们在空间中的区域,从密集变为稀疏。接下来,我们估计了这些标题的模型不确定性。不出所料,不确定性很高。

最后,我们只将其中一个标题添加到训练集中,并重新训练该模型。令我们满意的是,现在所有这些项目的不确定性都降低了。整洁!

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

正如我们在看到的关于勘探开发的帖子,我们可以鼓励对这些稀疏地区的勘探。这样做之后,不确定性就会降低。这将导致该地区勘探的自然衰退。

最后的想法

在这篇文章中,我们详细阐述了如何使用一个统一的模型,以一种原则性的方式对所有三种类型的不确定性——数据、模型和测量——进行建模。

我们鼓励你思考如何在你的应用中使用不确定性!即使你不需要在你的预测中明确地模拟不确定性,你也可能从在训练过程中使用它中受益——如果你的模型能够更好地理解数据是如何产生的,以及不确定性如何影响游戏,它可能会有所改进。

这是与我们在今年 KDD 会议的一个研讨会上提交的论文相关的系列文章的第四篇: 深度密度网络和推荐系统中的不确定性

第一篇帖子可以在 这里找到
第二个帖子可以在这里找到

第三个帖子可以在这里找到*
。***

原载于engineering.taboola.com由我和 Inbar Naor

深度学习和神经网络中的不确定性?我没有那种感觉!

原文:https://towardsdatascience.com/uncertainty-in-deep-learning-and-neural-network-i-do-not-feel-that-way-f11ceca4341a?source=collection_archive---------1-----------------------

注意:这是 2014 年 6 月 5 日星期四的一篇旧博客文章

您可能知道,神经网络最近经常出现在新闻中,有许多成功的故事。

神经网络现在是最先进的算法,可以理解复杂的感官数据,如图像、视频、语音、音频、声音、音乐等。

神经网络最近更名为深度学习(DL)或深度神经网络。

2012 年,他们在一个行业标准图像数据集中超过任何其他算法 10%以上,成为新闻:

http://image-net.org/challenges/LSVRC/2012/results.html

他们在语音识别方面也有类似的提高,提高了 20%:

http://www . nytimes . com/2012/11/24/science/scientists-see-advances-in-deep-learning-a-part-of-artificial-intelligence . html?_r=0

和许多其他任务中。最近在熟悉面孔识别中达到人类表现的水平:

https://www.facebook.com/publications/546316888800776/

然而,行业和投资者都很谨慎。

他们经常看到新算法来来去去,几乎是年年如此。

他们说:“为什么一家初创公司要做深度学习或神经网络?当一个更好的算法出现并把你从平板电脑上抢走时,会发生什么?”

这是一个合理的怀疑,但是我确信我们不应该再为此担心了。

神经网络已经存在很多年了。

这有三个强有力的理由:

1.神经网络非常优越:

2012 年,深度神经网络算法被证明是理解复杂感官数据的最佳算法 10–20%,而不是每年 1–2%的典型改进。

这是复杂数据中算法性能的大差异。在我的职业生涯中,我从未见过如此大的进步。

想象一下,一名 100 米短跑运动员用 7.5 秒跑完,比其他人快了整整 2 秒,而以前的典型记录通常只比他快 0.1 秒。你不会感到惊讶吗?“几乎不真实!”

2.神经网络将在多项任务中达到人类水平的性能:

人脑是一个巨大的神经网络。深度学习提供了受生物神经系统(如人脑)启发的大型神经网络模型。

人脑是已知宇宙中复杂感官数据的最佳“处理器”。我们可以理解图像、视频、声音,就像今天没有电脑能理解的那样!

随着数据集和网络拓扑结构的改善,人脑模型,如深度学习中使用的人工神经网络,可以扩展到人类的表现。上面提到的脸书·迪普法斯就是一个例子。

随着我们加深对大脑神经拓扑的了解,并改进人工神经网络模型,我们可以在更多的任务中达到人类的表现。现在这种情况正在发生:每隔几个月,我就会有一个新的结果。

3.神经网络可以扩展:

我们在过去已经看到许多算法不能扩展到感官数据的复杂性。他们可以做得很好几年,然后他们在新一波“新”算法下消失了。虽然这已经发生了,但神经网络持续不断地进化,有时在聚光灯之外,持续了 60 多年。我们将这一进展归功于许多聪明的同事和研究人员。

但是将神经网络与其他技术区分开来的一个区别是,它们是一个非常可扩展的模型。他们理解数据的能力可以随着模型的大小以及可用于训练这些模型的数据而增长。通过添加神经元层、不同的连接和连接拓扑、空间和时间形式的更多输入数据,模型可以提供不断增强的能力,以理解它们接受训练的复杂数据和同类的新数据。

底线:

深度学习和神经网络将继续存在。至少 10 年,或者只要我们在理解原始感官数据方面达到人类的表现水平。

如果您想投资并推动技术的未来,这就是您想要的!

你为什么要相信我?“这只是你的看法!”,”“你到底是谁?"

我是教授、发明家、工程师和科学家。我希望我的工作能改变世界。因为我的研究成功,我见到了美国总统奥巴马。我教授大学水平的计算神经科学、微芯片设计、计算机架构、机器和深度学习等等。

我在神经形态系统的设计方面有 20 多年的经验。我在模拟微芯片、数字微芯片、计算机代码和理论中看到过神经网络。我见过许多人工神经系统的例子,不管是在硬件领域还是软件领域,都有成功的例子,也有失败的例子。我自己设计了许多系统,以第一人称测试代码和算法,而不仅仅是通过其他人的工作。

我的目标是用我的科技知识帮助人类。这就是现在的方法,用深度神经网络!

我不喜欢算法,我喜欢可行的和可扩展的。深度神经网络现在可以工作和扩展。

我见过很多事情,我有经验把我的一生花在对整个人类的重要目标上。如果我不是非常相信神经网络的力量和潜力,我不会在这个领域工作。

现在相信我或者让时间说服你,代价是失去一个大好机会。

在你们做出决定的同时,我和我的所有同事将每天继续推动技术的发展,打破阻碍当前计算机理解图像、视频、语音、音频和任何复杂感官数据的障碍。

这是我们的选择,我们的命运。

这是不可避免的。

欢迎评论!

发布于 2014 年 6 月 5 日,星期四

关于作者

我在硬件和软件方面都有将近 20 年的神经网络经验(一个罕见的组合)。在这里看关于我:传媒网页学者LinkedIn 等等…

揭示 Python 中树集合的结构

原文:https://towardsdatascience.com/uncover-the-structure-of-tree-ensembles-in-python-a01f72ea54a2?source=collection_archive---------6-----------------------

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

Photo by Ghost Presenter on Unsplash

集成方法将多个基本估计量结合起来,以产生更稳健的模型,更好地概括新数据。 BaggingBoosting 是集成方法的两个主要类别,它们的区别在于它们组合来自基础估计量的预测的方式。

Bagging 方法独立地建立估计量,然后平均它们的预测值。通过在构建每个基础估计量的方式中引入随机性,他们旨在减少最终模型的方差。换句话说,减少过度拟合。

Boosting 方法在序列中建立基本估计量,其中每个后续估计量从其前一个估计量的错误中学习。与减少方差相反,这些方法的目标是减少所得估计量的偏差。

每一类都包含几个算法。在这里,我们将看看两个广泛应用的算法,每个类别一个;随机森林作为装袋的例子 Ada Boost 作为 boosting 方法的例子,用决策树作为基本估计器。我们将在分类的上下文中讨论这些方法,尽管这两种方法也在回归任务中使用。

这篇文章的目的是展示如何通过可视化的树来挖掘集合的几个潜在估计量。

随机森林

随机森林,顾名思义,是一种建立在决策树上的装袋方法。每棵树都在数据的引导样本上进行训练,并且可以选择使用原始输入特征的子集。这两个随机因素确保了每棵树都是不同的。如果我们假设每棵树都超过了部分数据,我们期望它们的平均值会减少这种影响。

控制随机森林结构的主要参数是估计器的数量( n_estimators ),即构建的决策树的总数和用于在每个节点选择分裂的输入属性的最大数量( max_features )。

一般来说,估计量越大,结果越好。然而,大量的估计器也导致长的训练时间。也很有可能在一定数量的估计量之后,精确度的增加将趋于平稳。人们应该在准确性和性能之间寻求平衡。交叉验证是一种可以用来调整这些参数的原则性方法。

一旦选择了 n_estimators= N ,就以上述方式构建了 N 个决策树,并且通过对这些预测进行平均来获得最终预测。为了深入了解每个单独的预测,我们可以将构建的每个树可视化。

在这篇文章中,我们展示了如何在 Jupyter 笔记本中绘制决策树。这里,我们将更进一步,看看如何绘制一个系综的所有 N 棵树。

下面是为 sklearn 葡萄酒数据集训练随机森林分类器的脚本。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine# load dataset
data = load_wine()# feature matrix
X = data.data# target vector
y = data.target# class labels
labels = data.feature_namesestimator = RandomForestClassifier().fit(X, y)

分类器对象有一个属性 estimators_ ,它是一个由 N 棵决策树组成的列表。这个列表的长度给出了树的数量。

print(“Number of trees “ + str(len(trees)))Number of trees 50

如果我们打印 trees 对象,我们将得到每个估计量的摘要。

display(estimator.estimators_)

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

Sample of estimators_

我们可以遍历列表中的每个元素,得到每棵树的节点数。

print("Number of nodes per tree is ")

i_tree = 0
for tree_in_forest in trees:
print(tree_in_forest.tree_.node_count)
i_tree += 1Number of nodes per tree is 
23
23
9
19
27
27
21
23
21
25

现在,如果我们迭代 trees 对象,我们可以使用 export_graphviz 函数来绘制每棵树。因为树的数量通常很大,所以在笔记本中画出每一棵树并不方便。相反,我们可以将每个文件保存在工作目录中的. dot 文件中。如果您还想将每个文件保存为. png 格式,请使用 check_call 功能。

from sklearn.tree import export_graphviz
from subprocess import check_callcnt = 1
for item in trees:
     export_graphviz(item, out_file=str(cnt)+’_tree.dot’,feature_names= labels, class_names=labels, rounded=True, precision=4, node_ids=True, proportion=True
, filled=True)

     check_call([‘dot’,’-Tpng’,str(cnt)+’_tree.dot’,’-o’,str(cnt)+’_tree.png’]) cnt += 1

一旦迭代完成,我们将在我们的目录中得到一个文件编号列表。

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

List of files in directory

下面是两种经过训练的树。

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

Two of the Decision Trees of the trained Random Forest model

我们可以看到,每棵树可以有不同的深度,以及不同的节点结构和分裂。这正是在不同的数据子集上构建每棵树,并基于特征子集进行分割的结果。在这一点上,我们应该提到,bagging 方法通常在复杂的底层模型(即深树)中工作得更好,它们减少了过拟合效应。

Ada 增强

与 bagging 相反,boosting 方法的原理是训练一系列“弱”学习器,例如深度小的决策树。在每次迭代中,通过为数据的每个实例分配权重来构建树。首先,给定 k 个训练样本,每个训练样本被赋予等于 1/k 的权重。在每次迭代中,没有被正确分类的样本得到更高的权重,迫使模型在这些情况下更好地训练。最后,通过加权多数投票将预测结合起来。

Ada Boost 的主要参数是 base_estimatorn _ estimator。估计量的数量相当于随机森林所描述的参数。基本估计量是基础模型的模型类型。在 sklearn learn 中,默认的基础估计器是决策树桩(具有 max_depth = 1 的决策树)。

与 RandomForestClassifier 类似,AdaBoostClassifier 也有一个 estimators_ 属性。因此,我们可以训练一个 AdaBoost 分类器,并以上述方式绘制所有的树。

from sklearn.ensemble import AdaBoostClassifierestimator = AdaBoostClassifier().fit(X, y)

trees = estimator.estimators_

print("Number of trees " + str(len(trees)))Number of trees 50

sklearn 中 AdaBoost 的默认估计数是 50。使用与上面完全相同的循环,我们可以得到 50 棵决策树中每一棵的图像。

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

Three first Decision Trees of the trained AdaBoost model

有前三个决策树,每个在顶部节点有不同的分割。这一次,不同的分裂是由于每个样本在每次迭代中得到的不同权重。每棵树都专注于正确预测前一棵树未能正确分类的内容。

在本文中,我们看到了一种可以应用于 bagging 和 boosting 两个分类器家族的方法,以便可视化底层模型,这些模型的投票构成了我们模型的最终预测。通过这种可视化,我们展示了如何通过装袋中的随机化和 boosting 中的权重分配从相同的原始数据和输入要素构建 N 个不同的树。再一次,我发现这是一个实用的方法,可以更好地理解集合方法在幕后是如何工作的,并且在我们的项目中使用这种模型时,可以减少黑箱。

使用数据科学揭示 AirBnB 评论中的隐藏趋势

原文:https://towardsdatascience.com/uncovering-hidden-trends-in-airbnb-reviews-11eb924f2fec?source=collection_archive---------9-----------------------

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

欢迎来到词汇世界

在做情感挖掘的研究时,我熟悉了主观词汇的重要概念。词典的应用是情感分析的两种主要方法之一。它包括从文本中出现的单词或短语的语义方向计算情感。

R 中可用的词典:

qdap 的极性()函数:使用来自 hash _ 情操 _ 刘虎(IL @CHI 极性(+/-)词研究的 U)的词典

  • NRC —根据 8 种情绪的单词,如“愤怒”或“喜悦”以及阳性/阴性
  • —标记为肯定或否定的词
  • AFINN —得分从-5 到 5 的单词

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

省力原则 使有限的词库变得有用。

您可以根据自己的需要随时修改词典!

1.定义业务问题

这是我最喜欢的,也是任何项目成功的最重要的一步:问正确的问题。一些领域的理解或与领域专家的交流确实有助于定义一个合适的问题陈述。

你应该很清楚自己的数据,并且有充分的理由去挖掘情感,而不仅仅是因为这听起来很酷!;)

例如,通常在调查中,消费者被要求在一定范围内对产品进行评级。在这种情况下,一个有序的评级足以确定消费者对产品的情绪,这里的情绪分析就有点过了。如果你想** 知道消费者喜欢或不喜欢产品的什么, 使用开放式问题,并使用回答提取有意义的见解。**

在这个博客中,我们将找出哪些住房属性(例如,餐馆、地铁站附近、卫生、安全等。)根据总体客户评价带来良好的租赁体验。

2.识别文本来源

从任何网站获取顾客评论的流行方式之一是通过网络搜集。用 R 或者 Python 都可以。我会在我的下一篇博客中保留这个话题。目前,我选择了一个数据集,其中有 1000 条关于波士顿 AirBnB 租赁的用户评论。****

*# Upload dataset in R (available as .rds file)* 
> bos_reviews <- readRDS("bos_reviews.rds", refhook = NULL)

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

3.组织和清理文本

在这一步,我们将使用两种不同的词汇( PolarityBING )来确定所收集的房屋评论的情感得分。

基于简单 Qdap 的极性评分

从进行情绪分析开始是一种合理的方法,因为它让您熟悉数据,并帮助您设定期望,以更好地解决业务问题。为此,来自 qdap 封装的极性功能非常有用。它允许我们将文本分为正面或负面。

*# Check out the boston reviews polarity overall polarity score* > bos_pol <- polarity(bos_reviews)  
> bos_pol all total.sentences total.words ave.polarity sd.polarity stan.mean.polarity all 1000 70481 0.902 0.502 1.799 *# Summary for all reviews* 
> summary(bos_pol$all$polarity) 
   Min. 1st Qu. Median  Mean  3rd Qu.  Max.   NA's 
-0.9712 0.6047  0.8921 0.9022 1.2063  3.7510   1 *# Kernel density plot of polarity score for all reviews* 
> ggplot(bos_pol$all, aes(x = polarity, y = ..density..)) + theme_gdocs() + geom_histogram(binwidth = 0.25, fill = "#bada55", colour = "grey60") + geom_density(size = 0.75)

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

The above graph shows that the median polarity score is greater than zero, i.e., the reviews tend to be positive. Notice that the reviews do not center on zero: this is known as grade inflation. There are two possible causes for this. First, social norms may lead respondents to be pleasant instead of neutral. The second reason could be **feature-based sentiment,where an author may write, “the bed was comfortable and nice, but the kitchen was dirty and gross” and the sentiment encompasses multiple “features” simultaneously, thereby skewing the average score.

TidyText 的必应词典

在这里,我们将直接从名为“comments”的 review 列创建 word data。

> library(tidytext) 
> library(tidyr) 
> library(dplyr) *# Use unnest_tokens to make text lowercase & tokenize reviews into single words.* 
> tidy_reviews <- bos_reviews %>% unnest_tokens(word, comments) *# Group by and mutate to capture original word order within each group of a corpus.* 
> tidy_reviews <- tidy_reviews %>% group_by(id) %>% mutate(original_word_order = seq_along(word)) *# Quick review* 
> tidy_reviews 
A tibble: 70,834 x 3 
Groups: id [1,000] 
id               word         original_word_order 
1 1               my                  1 
2 1            daughter               2 
3 1              and                  3 
4 1               i                   4 
5 1              had                  5 
6 1               a                   6 
7 1           wonderful               7 
8 1             stay                  8 
9 1             with                  9 
10 1            maura                 10 # ... with 70,824 more rows 
*# Load stopwords lexicon* 
> data("stop_words") *# Perform anti-join to remove stopwords* 
> tidy_reviews_without_stopwords <- tidy_reviews %>% anti_join(stop_words) *# Getting the correct lexicon* > bing <- get_sentiments(lexicon = "bing") *# Calculating polarity for each review* > pos_neg <- tidy_reviews_without_stopwords %>% inner_join(bing) %>% count(sentiment) %>% spread(sentiment, n, fill = 0) %>% mutate(polarity = positive - negative) *# Checking outcome* 
> summary(pos_neg) 
    id              negative         positive         polarity 
Min. : 1.0       Min. : 0.0000      Min. : 0.00     Min. :-11.000 
1st Qu.: 253.0   1st Qu.: 0.0000    1st Qu.: 3.00   1st Qu.: 2.000 Median : 498.0   Median : 0.0000    Median : 4.00   Median : 4.000 Mean : 500.4     Mean : 0.6139      Mean : 4.97     Mean : 4.356 
3rd Qu.: 748.0   3rd Qu.: 1.0000    3rd Qu.: 7.00   3rd Qu.: 6.000 Max. :1000.0     Max. :14.0000      Max. :28.00     Max. : 26.000 *# Kernel density plot of Tidy Sentiment score for all reviews* 
> ggplot(pos_neg, aes(x = polarity, y = ..density..)) + geom_histogram(binwidth = 0.25, fill = "#bada55", colour = "grey60") + geom_density(size = 0.75)

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

Based on the polarity distribution for both Qdap’s polarity score and TidyText’s BING, we can say that the comments are tending towards positive.

4.创建基于极性的语料库

在极性检查之后,我们需要创建一个大的文本集,用于下一步的特征提取。

a .根据步骤 2 中计算出的极性得分,将所有 1,000 条意见分为正面和负面意见。

*# Add polarity column to the reviews*
> bos_reviews_with_pol <- bos_reviews %>% mutate(polarity = bos_pol$all$polarity)

*# Subset positive comments based on polarity score*
> pos_comments <- bos_reviews_with_pol %>% filter(polarity > 0) %>% pull(comments)

*# Subset negative comments based on polarity score*
> neg_comments <- bos_reviews_with_pol %>% filter(polarity < 0) %>% pull(comments)

b .将正面和负面评论折叠成两个较大的文档。

*# Paste and collapse the positive comments* 
> pos_terms <- paste(pos_comments, collapse = " ") *# Paste and collapse the negative comments * 
> neg_terms <- paste(neg_comments, collapse = " ") *# Concatenate the positive and negative terms* 
> all_terms <- c(pos_terms, neg_terms)

c .创建词频逆文档频率(TFIDF)加权词频文档矩阵(TDM)。

这里,不是计算单词在语料库中的频率,而是对过度使用的术语惩罚 TDM 中的值,这有助于减少无信息的单词。

*# Pipe a VectorSource Corpus* 
> all_corpus <- all_terms %>% VectorSource() %>% VCorpus() *# Simple TFIDF TDM* 
> all_tdm <- TermDocumentMatrix(all_corpus, control = list( weighting = weightTfIdf, removePunctuation = TRUE, stopwords = stopwords(kind = "en"))) *# Examine the TDM * 
> all_tdm <> Non-/sparse entries: 4348/5582 Sparsity: 56% Maximal term length: 372 Weighting: term frequency - inverse document frequency (normalized) (tf-idf) *# Matrix* 
> all_tdm_m <- as.matrix(all_tdm) *# Column names* 
> colnames(all_tdm_m) <- c("positive", "negative")

5.提取特征

在这一步中,我们将从 TDM 中提取关键的住房特征,从而得出正面和负面的评价。

*# Top positive words* 
> order_by_pos <- order(all_tdm_m[, 1], decreasing = TRUE) *# Review top 10 positive words* 
> all_tdm_m[order_by_pos, ] %>% head(n = 10) DocsTerms       positive     negative 
walk           0.004565669       0 
definitely     0.004180255       0 
staying        0.003735547       0 
city           0.003290839       0 
wonderful      0.003112956       0 
restaurants    0.003053661       0 
highly         0.002964720       0 
station        0.002697895       0 
enjoyed        0.002431070       0 
subway         0.002401423       0 *# Top negative words* 
> order_by_neg <- order(all_tdm_m[, 2], decreasing = TRUE) *# Review top 10 negative words* 
> all_tdm_m[order_by_neg, ] %>% head(n = 10) DocsTerms       positive      negative 
condition           0        0.002162942 
demand              0        0.001441961 
disappointed        0        0.001441961 
dumpsters           0        0.001441961 
hygiene             0        0.001441961 
inform              0        0.001441961 
nasty               0        0.001441961 
safety              0        0.001441961 
shouldve            0        0.001441961 
sounds              0        0.001441961

6.分析特征

让我们比较一下通过 WordClouds 获得正面和负面评价的房屋特征。

a .对比云

> comparison.cloud(all_tdm_m, max.words = 20, colors = c("darkblue","darkred"))

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

b .缩放后的对比云

通过这种可视化,我们将在执行语料库子集之前,通过将评论分数调整回零,修复等级膨胀对租赁评论极性分数的影响。这意味着一些先前的正面评论可能会成为负面子部分的一部分,反之亦然,因为平均值变为零。

*# Scale/center & append* 
> bos_reviews$scaled_polarity <- scale(bos_pol$all$polarity) *# Subset positive comments* 
> pos_comments <- subset(bos_reviews$comments, bos_reviews$scaled_polarity > 0) *# Subset negative comments* 
> neg_comments <- subset(bos_reviews$comments, bos_reviews$scaled_polarity < 0) *# Paste and collapse the positive comments* 
> pos_terms <- paste(pos_comments, collapse = " ") *# Paste and collapse the negative comments* 
> neg_terms <- paste(neg_comments, collapse = " ") *# Organize* 
> all_terms<- c(pos_terms, neg_terms) *# VCorpus* 
> all_corpus <- VCorpus(VectorSource(all_terms)) *# TDM* 
> all_tdm <- TermDocumentMatrix( all_corpus, control = list( weighting = weightTfIdf, removePunctuation = TRUE, stopwords = stopwords(kind = "en"))) # Column names 
> all_tdm_m <- as.matrix(all_tdm) 
> colnames(all_tdm_m) <- c("positive", "negative") # Comparison cloud 
> comparison.cloud(all_tdm_m, max.words = 100, colors = c("darkblue", "darkred"))

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

除了上面的分析,我还想评估一个作者在写正面评论和负面评论时付出的努力之间的相关性。这是通过绘制正面和负面评论的字数来完成的。

*# Create effort* 
> effort <- tidy_reviews_without_stopwords %>% count(id) *# Inner join* 
> pos_neg_with_effort <- inner_join(pos_neg, effort) *# Review* 
> pos_neg_with_effort  
A tibble: 953 x 5 Groups: id [?] 
id      negative     positive      polarity     n 
1 1         0            4             4        26 
2 2         0            3             3        27 
3 3         0            3             3        16 
4 4         0            6             6        32 
5 5         0            2             2         8 
6 6         0            3             3        21 
7 7         0            5             5        18 
8 8         0            2             2        10 
9 9         0            4             4        12 
10 10       1           15            14        46 
*# ... with 943 more rows * *# Add pol* 
> pos_neg_pol <- pos_neg_with_effort %>% mutate(pol = ifelse(polarity >= 0, "Positive", "Negative")) *# Plot* 
> ggplot(pos_neg_pol, aes(polarity,n, color = pol)) + geom_point(alpha = 0.25) + geom_smooth (method = "lm", se = FALSE) + ggtitle("Relationship between word effort & polarity")

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

7.得出结论

不足为奇的是,顶级正面词汇包括:

  • 步行
  • 装备精良
  • 饭店
  • 地铁

相比之下,最负面的术语包括:****

  • 自动过账
  • 垃圾箱
  • 肮脏的
  • 卫生
  • 安全
  • 声音

同样,可以看出作者会花更多的精力来写一篇更强有力的正面或负面评论。这话多么真实啊!

我确信,有了更大的数据集,我们可以挖掘出比这个小案例研究更深刻的见解。

非常感谢您的阅读!

我写这篇博客的目的是与所有有志成为数据科学家的人分享情绪分析的基本概念,但我们不能就此止步!我想我已经准备好为我的作品集做一个更精细的情感挖掘项目了,😄,你呢?

请在下面的评论中分享你的想法/反馈。

也可以在 Linkedin 上和我联系。

继续编码。干杯!

(首发@www.datacritics.com)

揭开 Airbnb 高收入的秘密

原文:https://towardsdatascience.com/uncovering-the-secrets-to-higher-airbnb-revenues-6dbf178942af?source=collection_archive---------8-----------------------

使用数据分析和机器学习来揭示波士顿和西雅图 Airbnb 成功上市背后的秘密

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

介绍

Airbnb 是全球最受欢迎的短期租赁在线房源服务之一。虽然建立 Airbnb 业务相对容易,但在这一行取得成功可能很难。如果你正在考虑进入波士顿和西雅图的 Airbnb 业务,这篇文章就是为你而写的。

我们将探索 Airbnb 在这些城市是否确实是一项可行的业务,并应用数据分析和机器学习来确定策略,以帮助您获得超越竞争对手的优势。

将调查以下问题:

  • Airbnb 主机的收入有多少?
  • 出租什么类型的房产最好?
  • 什么时候是最好的租赁时间?
  • 哪些区域最适合出租?
  • 为了吸引更多的注意,你应该在列表名称中写些什么?

我们还将分享一些额外的技巧,帮助你成为一名成功的 Airbnb 房东,敬请关注。

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

数据

为了回答这些问题,我们将使用 Kaggle 提供的 Airbnb 数据集来处理波士顿和 T2 的数据。这些数据集提供的信息包括两个城市的房源详情、客户评论和房源安排。

假设

虽然两个数据集都没有提供预订的详细信息,但我们可以根据他们在该时间段内收到的评论数量来估计每个酒店的预订数量。然后,我们可以用以下公式推断每项资产的收入:

评论数量 x 列表价格 x 最短停留时间

这是对收入的保守估计,因为酒店的预订量很可能会超过点评量。此外,客人还可能会停留超过规定的最低住宿天数。

事不宜迟,我们开始吧!

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

s

2015 年波士顿的平均主机收入为 7200 美元,而西雅图为 4700 美元

2015 年,波士顿 Airbnb 主机的平均估计收入为 7200 美元。在一年中有 90 多天在网上登记房产的活跃房东中,平均年收入增长到了 9000 美元左右。

虽然 2015 年波士顿 Airbnb 主机的平均收入相对较高,但收入差距普遍存在。50%的活跃主机收入低于 3,900 美元,而前四分之一的活跃主机平均收入超过 9,800 美元。

波士顿的顶级 Airbnb 主机在 2015 年获得了超过 371,000 美元的收入!事实上,4 个票房收入最高的主机在那一年获得了至少 10 万美元的收入。

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

在西雅图,2015 年 Airbnb 主机的平均收入估计为 4700 美元,而一个活跃的主机收入超过 4900 美元。

和波士顿的情况一样,西雅图也存在收入差距。50%的活跃主机收入不到 2,400 美元,而前 25%的活跃主机平均收入超过 5,800 美元。同时,西雅图的顶级主持人获得了超过 27 万美元的收入。

在波士顿,你应该租出整个公寓或房子,而在西雅图,能容纳 4 个人的公寓最好

在波士顿出租整个公寓或房子可能会带来不错的收入。预计整套公寓的年收入为 6100 美元,整栋房子的年收入为 6700 美元。

这不仅远高于波士顿 Airbnb 房源的平均收入(4600 美元),公寓和房屋也是波士顿房源的最大组成部分。因此,对这类房产的需求相对健康。

虽然可能有其他类型的财产(床和早餐,阁楼等。)产生了更高的收入,它们在波士顿上市公司中所占的比例较小,因此更有可能服务于较小的利基市场。

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

Average annual revenues of Airbnb listings in Boston in 2015

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

Number of listings by property type in Boston in 2015

此外,能容纳更多客人的酒店也更有可能在波士顿创造更高的收入。事实上,容纳 4 位客人的酒店的平均收入几乎是容纳 3 位客人的酒店的两倍。2015 年,可容纳 6 名客人的房源收入最高。但是这些房源比较稀缺,所以这个细分市场可能不会很大。

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

Mean Revenues vs Number of Guests in Boston in 2015

列表的收入会有很大的不同,就像主机的收入一样。2015 年,波士顿 50%的房源收入低于 2300 美元,而前 25%的房源收入超过 5520 美元。

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

如果你正在西雅图寻找一个完美的 Airbnb 房源,那就看看能容纳 4 人的公寓吧。2015 年有 336 处此类房产上市,平均年收入为 4500 美元。

相比之下,2015 年西雅图 Airbnb 房源的平均收入为 3400 美元。

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

Average annual revenues of Airbnb listings in Seattle in 2015

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

Number of listings by property type in Seattle in 2015

出租整艘船估计每年可以获得 9000 美元的收入,远远超过其他任何财产。然而,这个数字应该谨慎对待,因为 2015 年只有两个这样的财产被列入名单。

如果你出租整栋房子或公寓,这是西雅图最常见的房源,你可以合理地预计分别获得 4500 美元和 4000 美元。

在西雅图,能容纳更多客人的酒店也在 2015 年创造了更高的收入。同样,理想的客人数量似乎是 4 个,因为这些酒店产生了相对较高的收入,同时仍然服务于相当大的市场。

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

Mean Revenues vs Number of Guests in Boston in 2015

有两间卧室的房源也获得了相对较高的收入,同时仍然迎合了一个大市场。拥有超过 2 间卧室的影响通常可以忽略不计。当我们考虑到超过 4 间卧室的房源的较小市场规模时,这一点尤其正确。

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

Mean Revenues vs Number of Bedrooms in Boston in 2015

收入差距在西雅图也确实存在。50%的房产在 2015 年收入低于 1800 美元,而前 25%的房产收入超过 4500 美元。

八月和九月是波士顿最好的租房时间。虽然八月是西雅图最好的月份

8 月和 9 月是波士顿 Airbnb 房产最好的月份。这几个月的收入最高也就不足为奇了,因为这段时间天气通常很好,游客可以欣赏波士顿令人惊叹的秋色。

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

在西雅图,八月是出租房产的最佳月份,而七月和九月也是有利可图的选择。

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

在这两个城市,总收入多年来一直大幅上升,这表明在可预见的未来,对 Airbnb 房产的需求可能会增长。

灯塔山和后湾是波士顿表现最好的社区,而第一山是西雅图最好的社区

在波士顿,Beacon Hill 在 2015 年创造了所有社区中最高的收入,平均每份房源约 7400 美元。Back Bay 是第二好的社区,总收入超过 6900 美元。

就可用房源总数而言,这两个社区都位列前五名。这是 Airbnb 认可的波士顿 25 个社区中的一个。

注意:在地图上,每个邻近区域都用一个圆圈表示,圆圈的颜色反映了邻近区域中某个列表的平均收入。每个圆圈的大小对应附近的房源数量,圆圈越大,房源越多。

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

This map depicts the average revenue in each neighborhood in Boston during 2015.

在西雅图的所有社区中,第一山的收入最高,2015 年平均每家上市公司的收入超过 5900 美元。然而,值得注意的是,与贝尔敦和百老汇等社区相比,该地区的房源数量明显较低。

中央商务区和史蒂文斯是 2015 年票房收入第二高的社区。2015 年,这两个社区的 Airbnb 房源收入约为 4500 美元。

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

This map depicts the average revenue in each neighborhood in Seattle during 2015.

在你的刊登名称中提及热门地点

潜在客户在寻找公寓时首先看到的往往是房源名称和房源图片。因此,你的上市名称吸引读者的注意力是至关重要的。

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

Most popular words used in the names for Boston listings ranked in the top 10% of revenue generated

上面显示的是收入排名前 10%的波士顿上市公司名称中最常用的词的词云。相比之下,下面的单词云描述了收入排名后 30%的列表中最常见的单词。

注意:单词在云中的大小与其在列表中出现的频率相对应,使用频率越高的单词出现得越大。

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

Most popular words used in the names for Boston listings ranked in the bottom 30% of revenue generated

通过比较,我们立即注意到,像 South EndBack BayBeacon Hill 这样的社区经常出现在高收入的列表中。另一方面,这些社区在低收入的列表中很少被提及。因此,如果你的房产位于上述社区附近,一定要在你的房源名称中突出显示。

单词 studio 在表现最好的列表中出现过多,而单词 room 在表现较差的列表中出现过多。在波士顿,出租工作室单元似乎比出租房间更有利可图,尽管人们必须记住,出租房间可能比工作室单元产生更低的运营成本。

有趣的是,虽然像漂亮宽敞这样的词在这两种房源中都很常见,但顶级房源更有可能使用现代这个词来描述它们的房产,而收入较低的房源更倾向于使用舒适这个词。这可能是波士顿游客更喜欢现代装饰的一个标志。

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

下面显示的是收入排名前 10%的西雅图列表名称中最常用的词。

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

Most popular words used in the names for Seattle listings ranked in the top 10% of revenue generated

相比之下,收入排名在后 30%的列表中使用频率最高的词。

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

Most popular words used in the names for Seattle listings ranked in the bottom 30% of revenue generated

两者之间最明显的区别是,顶级上市公司的名字中经常有西雅图 T21 这个词,而收入较低的上市公司很少提到它。另一方面,与顶级房源相比,低收入房源更有可能使用房间*、舒适现代等词语。*

私人、市中心、巴拉德国会山也更频繁地出现在顶级列表中,这表明这些属性很受欢迎。巴拉德和国会山都是西雅图的街区,很可能这两个地方都非常受游客欢迎。

有趣的是,视图在任一类型的列表中都有很好的表现。大多数游客可能是因为西雅图的壮观景色而来到这里的。

与波士顿相反,工作室单元的吸引力较低,这表明在西雅图拥有工作室单元没有任何优势。

从这一点可以得出一个重要的结论,即地名在列表名称中非常重要。房产的位置可能是 Airbnb 客户最重要的考虑因素之一。如果您的酒店位于任何热门地点附近,请确保在您的列表名称中突出显示这些地点的名称。

另一个关键要点是中的单词 room。在这两个城市,房源名称几乎总是与较低的收入联系在一起。

如果到目前为止你喜欢这篇文章,这里有一些额外的见解可以帮助你的 Airbnb 之旅。

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

Airbnb 超级房东在波士顿和西雅图挣得更多。在这两个城市,被认可为 Airbnb 超级房东可能会带来更高的收入。成为一名超级房东的要求如下:获得 4.8+的综合评分,在 24 小时内回复至少 90%的预订请求,每年至少接待 10 次住宿,并尊重每一次预订。

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

**波士顿偏好温和或严格的取消政策。**在波士顿,具有适度或严格取消政策的酒店往往能获得更高的收入。2015 年,实行中度或严格取消政策的酒店的收入中值为 2600 美元。相比之下,采用灵活或超严格 30 取消政策的酒店的收入中位数为 1300 美元。

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

**在波士顿,顾客更喜欢物有所值的房产。**波士顿 Airbnb 的顾客主要关心的是让他们的钱花得值。因此,在波士顿,价值评估得分较高的酒店往往表现更好。

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

在西雅图,顾客更喜欢干净的酒店。在西雅图,清洁度评分较高的酒店往往会获得略高的收入。西雅图的 Airbnb 客户肯定对清洁有强烈的偏好,所以要注意这一点。

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

**更高的清洁费不会影响波士顿的收入。**事实上,清洁费较高的房源往往比波士顿的其他房源表现更好。因此,如果你需要的话,不要害怕要求更高的清洁费,特别是如果你的地方为需要清洁的客人提供了很多额外的补贴。

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

在整篇文章中,我们看到了许多帮助你建立完美 Airbnb 房源的技巧和策略。现在,我们将总结一下这篇文章的主要发现。

波士顿 Airbnb 主机的关键见解概述

  • 2015 年,波士顿 Airbnb 的平均收入为 7200 美元
  • 租一整栋公寓可能会带来稳定的收入
  • 可容纳 4 位客人的酒店似乎是最佳选择
  • 八月和九月是出租房产的最佳时间
  • Beacon Hill 和 Back Bay 通常是建立 Airbnb 的最佳社区
  • 在你的列表名称中提及热门地点,如南端后湾比肯山可能会吸引浏览者的注意
  • 工作室单位在波士顿是首选。
  • 作为 Airbnb 超级房东,你会赚得更多
  • 具有适度或严格取消政策的酒店通常表现更好
  • 顾客更喜欢物有所值的房产
  • 更高的清洁费不会影响收入

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

西雅图 AIrbnb 房东的关键见解概述

  • 2015 年,西雅图 Airbnb 的平均收入为 4700 美元
  • 租一整栋公寓来接待 4 个客人可能会带来稳定的收入
  • 有两间卧室的房产是最好的选择
  • 八月是出租房产的最佳月份。七月和九月也是不错的选择
  • 第一山是出租房产的最佳街区,其次是中央商务区和史蒂文斯
  • 在你的列表名称中提到 private、downtown、BallardCapitol Hill 可能会吸引更多的兴趣
  • 作为 Airbnb 超级房东,你会赚得更多
  • 顾客更喜欢干净的房产

感谢您阅读这篇文章!我希望你喜欢它!

这个分析的代码可以在这里找到。

欠采样:不平衡数据的性能助推器

原文:https://towardsdatascience.com/under-sampling-a-performance-booster-on-imbalanced-data-a79ff1559fab?source=collection_archive---------11-----------------------

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

在某些情况下,用于开发机器学习/深度学习模型的数据集通常是不平衡的。在这里,不均衡是指阶级分布的高度不平等或不均衡。不平衡数据的一个例子如下(图 1):

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

Fig 1. Binary Imbalanced Data

这里,标签 0 包含 24,720 个实例,而标签 1 仅包含 7841 个实例。这是一个二进制(因为有 2 个标签,0 和 1)不平衡数据的例子。通过对多数类(标签 0)进行欠采样,并使其接近标签 1,可以在很大程度上减少这种不平衡。其中一个著名的欠采样算法是基于聚类质心的多数欠采样技术(CCMUT) 。除此之外,我在之前的文章《 基于扩展聚类质心的多数欠采样技术(E-CCMUT) 》中介绍了基于扩展聚类质心的多数欠采样技术(E-CCMUT) 。在这之后的下一篇文章中,我一定会讨论 E-CCMUT 对 CCMUT 的改进。至于现在,在本文中,我将展示一个在 UCI 成人数据集上的实验,并从统计上证明欠采样可以获得更好的结果,并在不平衡数据集中充当性能助推器。

实验

“从人口普查数据预测一个人的收入水平是否大于 50k 美元”。

数据集

来自 UCI(加州大学欧文分校)的成人数据集用于预测模型开发。数据集包含 48,842 个实例和 14 个属性/特征

数据预处理

  1. 对分类特征进行标签编码(参见表 1)
  2. 特征选择通过使用额外的树分类器训练整个数据集并使用每个特征的特征重要性分数来完成,特征种族本国被丢弃。(参见表 1)
  3. 对分类特征进行一键编码,其中假设二进制值为 0/1,特征的每个类别成为特征本身。

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

Table 1

数据不平衡消除

数据的不平衡性质如图 1 所示。它包含 24,720 个‘0’标记的(多数)实例和 7841 个‘1’标记的(少数)实例。使用基于聚类质心的多数欠采样技术(CCMUT)来消除这种数据不平衡,其中多数类(标签 0)欠采样 68%。图 2 显示了 68%欠采样后数据失衡的减少。

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

Fig 2. Reduction in Data Imbalance after 68% Under-sampling

洗牌和拆分

结果数据集包含 7911 个“0”标记的实例和 7841 个“1”标记的实例。整个数据集以一致的方式进行混洗,并且 80–20 分割(80%训练集和 20%验证集)。

学习算法

在训练集上使用梯度提升分类器作为学习算法。分类器通过网格搜索进行调整,以获得最佳的超参数集。

网格搜索后得到 200 个估计量和最大深度为 4 的最优超参数。图 3 显示了基于平均分数的模型的网格搜索调整的总结。

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

Fig 3. Grid-Search Summary on Mean Score

结果:

使用度量、训练准确度、验证准确度、召回率、精确度、F1 分数、受试者操作者特征曲线下面积(图 4 所示的 AUROC)和混淆矩阵(图 5 所示)来分析模型性能。

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

Fig 4. ROC Curve showing Area Under the Curve

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

Fig 5. Normalized Confusion Matrix

表 2 中列出了训练准确度、验证准确度、召回率、精确度和 F1 分数。

与最先进技术的对比

到目前为止, Chakrabarty 等人【1】名为“ 一种成年人普查收入水平预测的统计方法 ”的研究论文是最先进的模型。表 2 给出了与最先进水平的比较。

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

Table 2

结论

从上述演示实验的统计结果来看,很明显,如果所使用的数据中存在类别不平衡,欠采样可以证明是非常强大的性能助推器。

参考文献

[1] Chakrabarty,Navoneel 和 Sanket Biswas。“成人人口普查收入水平预测的统计方法.” arXiv 预印本 arXiv:1810.10076 (2018)。

在分析项目的掩护下

原文:https://towardsdatascience.com/under-the-hood-of-an-analytics-project-1cc2348a5411?source=collection_archive---------11-----------------------

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

Photo by Markus Spiske on Unsplash

新数据项目早期阶段的演练

几周前,我写了一篇文章深入 NHL 的详细拍摄,如何转化为篮板,以及这两个事件如何影响比赛的结果。

在你现在正在阅读的文章中,我想从不同的角度来看同样的分析。我希望它能帮助潜在的/新的数据科学家了解如何开始构建自己的项目,并让我的想法更加清晰。

找到正确的问题

找到正确的问题通常是开始一个新的数据科学项目的最困难的部分,尤其是当这个问题没有提供给你的时候。很难找到动力去完成一个没有真正目的的项目,花时间定义你在做什么是至关重要的。

我喜欢散步,思考数据集,用它可以实现什么,我可以回答什么样的问题。通过这个项目,我可以访问过去 4 年中每场 NHL 比赛的详细数据,我想建立一个预测比赛结果的系统。

下面 Vox 的视频总结了这样做的动机。NHL 的结果被认为很大程度上是运气的结果。在运气-技能连续体中,曲棍球被归类为最“随机”的运动之一。我有疑问,我想深入了解一下。

深入研究

随着我更多地思考如何解决这个问题,我意识到我想要建立的系统会有多复杂。一开始,我不知道哪些数据与获胜相关,更重要的是,似乎其他人也不知道。显然已经对游戏的各个方面进行了研究,但我找不到我想做的事情的完美起点。

为了解决这个问题,我会从更简单的问题开始,然后建立一个最终模型。我预计这个项目将花费数百个小时,随着时间的推移,可能会增加到数千个小时——但你需要从某个地方开始。我决定在一系列我称之为“深度潜水”的游戏中系统地移动游戏的各个部分。这些深入的研究将建立在我对该领域的整体理解上,但也会产生我可以在最终模型中使用的特性。

所以我建立了一个灵活的计划来一次解决这些问题。我不知道我会在每个部分花多长时间——这个选择可以让我决定是否在必要时进一步追求一个想法。我要挖掘的一些数据不可避免地会相当不直观,可能会鼓励更多的探索。

经过一些初步的探索性挖掘,我采用了以下策略:

逐一深入以下类别,在数据中寻找有意义的相关性

  • 射击
  • 惩罚
  • 失误
  • 守门
  • 主客场优势

然后,我会把我发现的见解构建到预测系统中。

在我分析的早期,很明显这将是一项艰巨的任务。我全神贯注于拍摄统计数据,亲眼目睹了为什么许多统计学家把这么多事情归结于偶然。然而,我也发现了一些我以前不知道的有趣信息(也找不到任何其他信息)。

最重要的是,我开始对游戏的一个非常具体的部分有了感觉。这让我相信,可以建立许多可以预测整个季节的特征,但这些相同的统计数据充满了嘈杂的异常值。我一直怀疑 NHL 是一个非常基于动力的游戏,一支球队如何在长期的基础上行动是他们成功的预测,行为比进球或射门等个人数据更重要。这篇文章的一个重要观点可以在下面的三张图中得到解释。

首先,我们发现什么是反弹。

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

其次,我们查看出现的次数来衡量重要性。

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

最后,我们查看了过去 4 年中的所有团队,以了解这些信息如何预测结果。

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

我们的结论。

“从分析的数据来看,更高的篮板球率实际上并不意味着更高的胜率。事实上,较高的反弹率与较低的胜场数相关联!

我们还发现,篮板率越高,投篮次数越少,投篮次数越多,胜率越高。”

代码走查

为了更好地介绍这个过程,并让您了解我是如何实现这一目标的,我提供了一些感兴趣的人来浏览代码。首先,你可以在这里得到原始数据。我们不会使用所有的数据集,我们主要关注的是详细的数据。

我们的第一步是加载比赛数据,提取进球和射门,创建标识射手和守门员的列,并缩放 x 和 y 位置,以便我们可以在我在 Plotly 上制作的曲棍球图上显示我们的射门分析。

然后,我们编写一个函数,它接受 shooting_df 函数的输出,并添加一些我们需要的数据。我们将添加球队名称,构建数据集,以便我们可以分析主场/客场,而不是输赢。

现在,我们将构建将在最终分析中使用的数据集。我想确定什么是反弹,这样我就可以利用这些信息来确定好的拍摄位置。由于没有明确的定义,我需要自己分析。

我对数据集中的独特游戏进行循环,并按时间顺序对每个游戏进行排序。然后,我可以在数据集上逐个镜头地迭代,并构建镜头之间的时间、这些镜头的结果以及反弹的位置。然后,我们添加一些必要的列,允许我们以几种不同的方式切割数据进行分析,特别是添加一个“for”列,以便我们可以查看整个赛季的球队。

为了更好地理解什么是反弹,我们需要按时间步长汇总我们的反弹数据框架。与此同时,我为 Plotly 图表添加了几个文本列,我们将使用它们来更好地了解篮板的影响和得分率。

这让我们可以创建我们在上面看到的前两个图,让我们知道什么是反弹。

知道了 3 秒以内的投篮命中率会有大幅上升,我按照前一次投篮在那个时间段内的任何一次投篮对篮板进行了分类。它让我们很好地了解了反弹的整体影响。

和下面的图表。

虽然抢篮板的投篮只占所有投篮的 5%,但他们占所有进球的 15%以上。

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

我也想知道高质量的照片是否有某种模式。在溜冰场制作热图的代码很长——所以我不会全部嵌入这里,但你可以在这个链接找到它。

概括地说,我们经历了以下过程:

  1. 我们创造了各种情节性的形状,产生了一个空的曲棍球场作为情节。X 和 Y 轴用于模拟竞技场的一半。
  2. 我们创建了一组盒子,将半溜冰场分成 625 个大小相等的盒子(25 x 25)。
  3. 我们从数据中选取一个子集,使其符合上一步中为盒子创建的 x-y 坐标。然后我们根据需要(射门、进球或进球率)给它上色
  4. 我们在每个框的中心产生一个数据点来提供鼠标悬停信息。

结果如下(互动版此处)

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

为了更好地理解拍摄地点,我回顾了这个图的一些变化。没有什么非显而易见的东西跳出来,但它给出了一些创建一个功能的想法,该功能涉及到在一些进一步的分析中使用这些框来产生镜头质量度量。从像这样的噪声数据到预测特征可能涉及几个阶段。

为了更好地理解拍摄地点,我回顾了这个情节的一些变化。没有什么非显而易见的东西跳出来,但它给出了一些创建一个功能的想法,该功能涉及到在一些进一步的分析中使用这些框来产生镜头质量度量。从像这样的噪声数据到预测特征可以包括几个阶段。

然后,我们有一个相对较长的代码片段来生成我们在原始文章中看到的 Plotly 图表。

我们取三个 x-y 对。

  1. 反弹率与获胜次数
  2. 反弹率与投篮次数
  3. 击球次数与获胜次数

我们在这里发现了一些非直觉的信息,这让我相信曲棍球的特征在一段时间内比一场比赛更相关。我们还发现了一些可能会引导我们找到另一组特征的东西。也许我们需要根据球队的类型和守门员的质量来调整射门次数或篮板比例?

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

仅仅是开始

这只是这种分析的开始。我们甚至还没有触及这个复杂游戏的表面,但是我们已经发现了一些潜在的有价值的特性,并且获得了一些领域知识。

我希望这篇文章对新的数据科学家有所帮助,让他们了解探索性数据分析有多重要,并正确看待项目设计。

一键外卖 —玩长游戏,找到错综复杂的细节,然后开始建模。您将最终得到一个好得多的模型,并获得无价的领域知识,在您前进的过程中帮助您。

最初发表于Jesse Moore . ca

在神经网络前向传播——可怕的矩阵乘法的掩护下

原文:https://towardsdatascience.com/under-the-hood-of-neural-network-forward-propagation-the-dreaded-matrix-multiplication-a5360b33426?source=collection_archive---------0-----------------------

简介

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

这篇文章的动机是我正在构建的神经网络中的一个令人沮丧的错误,它最终迫使我进入引擎盖下,真正理解神经网络核心的线性代数。我发现我做得很好,只是确保我相乘的两个矩阵的内部维度匹配,当错误发生时,我会在这里转置一个矩阵,在那里转置一个矩阵,直到事情解决,但这掩盖了我并不真正理解矩阵乘法如何工作的每一步的事实。

我们将介绍使用前向传播来计算一个相当简单的神经网络的成本函数的每个步骤。哦,如果你想知道我的矩阵乘法无知导致的错误,那就是我把我的偏差单位(1 的向量)作为一列添加了,而它应该是一行。我这样做是因为在这一步之前,我并没有真正理解矩阵乘法的全部输出,所以没有意识到我必须做出改变。首先,我将解释神经网络正向传播中发生的高级背景,然后我们将更仔细地看一个具体的例子,用索引值和代码来保持事情的清晰。

因此,神经网络在模拟复杂关系方面是不可思议的。我们只讨论网络的前馈传播部分。现在,神经网络的输入单元可以是任何东西。例如,它们可以是代表一串手写数字的 20 像素乘 20 像素图像的灰度强度(在 0 和 1 之间)。在这种情况下,您将有 400 个输入单元。这里我们有 2 个输入单元,加上+1 个偏置单元(关于为什么要有偏置单元的精彩解释,请点击这里)。正向传播实质上是从一个示例(比如一个手写数字的图像)中提取每个输入,然后将输入值乘以单元/节点之间每个连接的权重(见图 5),然后将所有连接的所有乘积加到正在计算激活的节点上,取总和(z)并通过 sigmoid 函数进行计算(见下文)。

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

Figure 1: Sigmoid Function

这样你就可以激活隐藏层的每一个单元。然后你做同样的事情来计算下一层,但是这次你使用隐藏层的激活作为“输入”值。你将所有的 a 激活(即隐藏层)单元乘以第二组权重θ2,将连接到单个最终输出单元的每个乘积求和,并将该乘积通过 sigmoid 函数,从而得到最终输出激活 a。g(z)是 sigmoid 函数,z 是 x 输入(或隐藏层中的激活)和权重θ(在图 5 的正常神经网络图中由单个箭头表示)的乘积。

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

Figure 2: Hypothesis Function, using the Sigmoid Function.

一旦你有了所有这些,你想计算网络的成本(图 4)。对于给定的示例,您的成本函数本质上是计算输出假设 h(x)和实际 y 值之间的成本/差异。因此,在我一直使用的例子中,y 是输入所代表的实际数字的值。如果通过网络有一个“4”馈送的图像,则 y 是值“4”。因为有多个输出单元,所以成本函数将输出 h(x)与列向量进行比较,其中第 4 行是 1,其余都是 0。这意味着表示“4”的输出单元输出为真,其余都为假。对于 1、2 或 n 的输出,请参见下文。

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

Figure 3: Our example data y values represented as logical TRUE/FALSE column vectors.

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

Figure 4: The Multi-Class Logistic Regression Cost Function

上面成本函数 J(theta)中的两个适马用于合计通过网络输入的每个示例(m)和每个输出类(K)的成本。现在,你可以通过单独进行每个计算来做到这一点,但事实证明,人类定义矩阵乘法的方式非常适合同时进行所有这些正向传播计算。我们在数值计算方面的朋友已经优化了矩阵乘法函数,这样神经网络就可以极其高效地输出假设。编写我们的代码,以便我们同时进行所有的计算,而不是对所有的输入示例进行 for 循环,这是一个称为向量化代码的过程。这在神经网络中非常重要,因为它们在计算上已经足够昂贵,我们不需要任何 for 循环来进一步降低我们的速度。

我们的网络示例

在我们的网络中,我们将有四个类,1、2、3、4,我们将完成这个计算的每一步。我们将假设网络已经被训练,并且我们已经通过反向传播训练了我们的θ参数/权重。这将是一个 3 层网络(有两个输入单元,2 个隐藏层单元和 4 个输出单元)。网络和参数(也称为权重)可以表示如下。

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

Figure 5: Our Neural Network, with indexed weights.

在我们走得更远之前,如果你不知道矩阵乘法是如何工作的,那就去看看可汗学院花 7 分钟,然后做一两个例子,确保你对它是如何工作的有直觉。在前进之前知道这一点是很重要的。

让我们从所有的数据开始。我们的 3 个示例数据和相应的 y 输出值。这些数据不代表任何东西,它们只是显示我们将要进行的计算的数字:

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

Figure 6: Our data.

当然,正如我提到的,由于有 4 个输出单元,我们的数据必须表示为三个示例输出的逻辑向量矩阵。我在 MATLAB 中工作,把我们的 y 向量变成一个逻辑向量矩阵:

yv=[1:4] == y;   %creating logical vectors of y values

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

Figure 7: Matrix of Example Output y data turned into logical vectors.

另外,注意我们的 X 数据没有足够的特性。在我们图 5 的神经网络中,当我们计算权重/参数和输入值的乘积时,我们有虚线偏置单元 x(0)。这意味着我们需要将偏差单位添加到数据中。这意味着我们在矩阵的开头添加了一列:

X = [ones(m,1),X];

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

Figure 8: Data with bias added. Bias represented by dotted-line unit/node in Neural Net Figure 5

数据 X 被定义为第一个输入层 a 的第一个激活值,所以如果你在代码中看到 a(第 3 行),它只是指初始输入数据。网络中每个连接/箭头的权重或参数如下:

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

Figure 9: First set of weights/parameters for our neural network with indices that match those on the arrows of the Figure 5 Neural Network diagram.

下面是我们将用于计算物流成本函数的完整代码,我们已经处理了第 2 行和第 9 行,但我们将在代码的其余部分慢慢分解矩阵乘法和重要的矩阵操作:

1:  m = size(X, 1);
2:  X = [ones(m,1),X]; 
3:  a1 = X;
4:  z2 = Theta1*a1';
5:  a2 = sigmoid(z2);
6:  a2 = [ones(1,m);a2];
7:  z3 = Theta2*a2;
8:  a3 = sigmoid(z3);
9:  yv=[1:4] == y;
10: J = (1/m) * (sum(-yv’ .* log(a3) — ((1 — yv’) .* log(1 — a3))));
11: J = sum(J);

让我们执行正向传播的第一步,上面代码中的第 4 行。将每个示例的输入值乘以它们相应的权重。我总是想象输入值沿着我们网络中的箭头流动(图 5 ),被击中/乘以权重,然后在激活单元/节点等待其他箭头进行乘法。然后,特定单元的整个激活值首先由这些箭头的总和(输入 x 重量)组成,然后该总和通过 sigmoid 函数传递(参见上面的图 1)。

所以这里很容易犯你的第一个矩阵乘法错误。因为我们的偏置单位加到 X(这里也称为 a1)的数据是 3×3 矩阵,而θ1 是 2×3 矩阵。简单地将这两个矩阵相乘是很容易的,因为θ:2×3 和 X:3×3 的两个内部维度是相同的,所以 viola 应该正确工作,并给出我们的 2×3 合成矩阵?不对!

z2 = Theta1 * a1;      %WRONG! THIS DOESN'T GIVE US WHAT WE WANT

虽然运行这个计算将输出一个我们期望的和下一步需要的正确维数的矩阵,但是所有计算的值都将是错误的,因此从现在开始所有的计算都将是错误的。此外,由于不存在计算机错误,即使您注意到了,也很难解释为什么您的网络成本函数会计算错误的成本。记住,当你做矩阵乘法时,得到的矩阵的每个元素 ab 都是第一个矩阵的行 a 乘以第二个矩阵的列 b 的点积和。如果我们使用上面的代码来计算上面的 z,那么得到的矩阵中的第一个元素将由我们的第一行 Theta 的[0.1 0.3]相乘得到。0.5]有一整列偏置单位,[1.000;1.000;1.000],对我们没用。这意味着我们需要转置示例输入数据的矩阵,以便矩阵将每个θ与每个输入正确相乘:

z2 = Theta1*a1';

其矩阵乘法如下:

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

Figure 10: The indexed symbolic representation of the matrix multiplication. The resultant elements in the columns each representing a single example, and the rows being the different activation units in the hidden layer. 2 hidden layers results in two values (or rows) per example.

然后,我们对上述 z 矩阵中的 6 个元素分别应用 sigmoid 函数:

a2 = sigmoid(z2);

对于三个示例中的每一个,这仅仅给出了两个隐藏单元的隐藏层激活值的 2×3 矩阵:

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

Figure 11: The activation values of the hidden units.

因为这是作为矩阵乘法完成的,所以我们能够一次性计算隐藏层的激活值,而不是在所有示例中使用 for 循环,这在处理较大的数据集时会变得非常昂贵。更不用说还需要反向传播。

现在我们在第二层中有了激活单元的值,这些值作为下一层也是最后一层,即输出层的输入。对于图 5 中第二层和第三层之间的每个箭头,该层具有一组新的权重/参数θ2,我们将做与上面相同的事情。将激活值(输入)乘以连接到每个激活节点的权重,分别对连接到每个激活节点的乘积求和,然后通过 sigmoid 函数对每个激活节点求和,得到最终输出。上述 a 作为我们的输入数据,我们的权重/参数如下:

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

Figure 12: Theta2 weights/parameters with indices. Each row represents a different output unit with the weights contributing to each output unit across each column.

我们想做以下计算:

z3 = Theta2*a2;

但在此之前,我们必须再次将偏差单位添加到我们的数据中,在这种情况下,隐藏层激活 a。如果您在图 5 中再次注意到,隐藏层中的虚线圆圈 a(0),偏差单位仅在我们进行下一次计算时添加。因此,我们将它添加到上面图 11 所示的激活矩阵中。

这是我介绍我的 bug 的地方,这也是我写这篇文章的动机。为了向前传播激活值,我们将θ中的一行的每个元素与 a 中的一列的每个元素相乘,并且这些乘积的总和将给出结果 z 矩阵的单个元素。通常数据的组织方式是将偏差单位作为一列添加,但是如果你这样做了(我愚蠢地这样做了),这将会给我们错误的结果。所以我们将偏差单位作为一行添加到。

a2 = [ones(1,m);a2];

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

Figure 13: Adding the bias row to the a² activations.

在我们运行矩阵乘法来计算 z 之前,请注意,在 z 之前,您必须转置输入数据 a,使其正确“排列”,矩阵乘法才能产生我们想要的计算结果。这里,我们的矩阵按照我们想要的方式排列,所以没有 a 矩阵的转置。这是另一个常见的错误,如果你不理解其核心的计算,这是很容易做到的(我过去对此非常内疚)。现在,我们可以在 4x3 和 3x3 矩阵上运行矩阵乘法,从而为 3 个示例中的每一个生成 4x3 输出假设矩阵:

z3 = Theta2*a2;

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

Figure 14: The indexed symbolic representation of the matrix multiplication. The resultant elements in the columns each representing a single example, and the rows being the different activation units of the output layer, with four output units. In a classification problem this would mean four classes/categories. Also notice the [m] superscript index on all the a’s in each element is the example number.

然后,我们对 z 矩阵中的 12 个元素逐一应用 sigmoid 函数:

a3 = sigmoid(z3);

这就为我们提供了每个输出单元/类的输出层激活的 4x3 矩阵(也称为假设):

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

Figure 15: The activation values for each of the output units of the network, for each example. If you were doing a for loop over all your examples, this would be a column vector rather than a matrix.

从这里开始,你只是在计算成本函数。唯一要注意的是,你必须转置 y 向量的矩阵,以确保你在成本函数中进行的元素操作与每个示例和输出单元正确对齐。

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

Figure 16: Transpose of the logical y vectors matrix.

然后,我们将它们放在一起计算成本函数:

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

Figure 4: The Multi-Class Logistic Regression Cost Function

J = (1/m) * (sum(-yv’ .* log(a3) — ((1 — yv’) .* log(1 — a3))));
J = sum(J);

这就给出了我们的成本,注意,所有类和所有例子的总和都是双倍的。这就是所有的人。矩阵乘法可以使代码非常简洁高效,不需要 for 循环来减慢速度,但是您必须知道矩阵乘法中发生了什么,以便您可以适当地调整矩阵,无论是乘法的顺序、必要时的转置,还是将偏差单位添加到矩阵的正确区域。一旦你把它分解了,掌握起来就更直观了,我强烈建议你自己慢慢地看一遍这个例子,如果你还是不确定,它总是归结到一些非常简单的基础上。

我希望这有助于理解向前传播所需的线性代数。此外,这是我的第一个帖子,也是我的第一个技术帖子,所以任何反馈,问题,评论等,都非常感谢。

在神经网络的保护下。第 1 部分:完全连接。

原文:https://towardsdatascience.com/under-the-hood-of-neural-networks-part-1-fully-connected-5223b7f78528?source=collection_archive---------0-----------------------

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

深度学习进展很快,快得令人难以置信。拥有如此大的 AI 开发人员社区的原因之一是我们有许多非常方便的库,如 TensorFlow、PyTorch、Caffe 等。正因为如此,通常实现一个神经网络不需要任何该领域的高深知识,这是非常酷的!然而,随着任务复杂性的增加,了解内部实际发生的事情会非常有用。这些知识可以帮助您选择激活函数、权重初始化、理解高级概念等等。所以在这组文章中,我将解释不同类型的神经网络的推理和训练过程背后的数学原理。

这篇文章我将致力于最基本类型的神经网络:全连接网络。尽管纯全连接网络是最简单的网络类型,但理解它们的工作原理是有用的,原因有二。首先,与其他类型的网络相比,它更容易理解后面的数学。第二,全连接层仍然存在于大多数模型中。

在这里,我将解释任何监督神经网络中的两个主要过程:全连接网络中的前向和后向传递。这篇文章的重点将放在称为反向传播的概念上,它成为现代人工智能的主力。

前进传球

前向传递基本上是一组将网络输入转换到输出空间的操作。在推理阶段,神经网络仅依赖于正向传递。让我们考虑一个具有两个隐藏层的简单神经网络,它试图将二进制数(这里是十进制 3)分类为偶数或奇数:

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

这里我们假设除了最后几层的神经元,每个神经元都使用 ReLU 激活函数(最后一层使用 softmax )。激活函数用于将非线性引入系统,这允许学习复杂的函数。让我们记下在第一个隐藏层中进行的计算:

神经元 1(顶部):

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

神经元 2(底部):

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

将它改写成矩阵形式,我们将得到:

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

现在,如果我们将输入表示为矩阵 I(在我们的情况下,它是一个向量,但是如果我们使用批量输入,我们将使它的大小为样本数乘以输入数),神经元权重为 W,偏差为 B,我们将得到:

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

其可以被概括为全连接神经网络的任何层:

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

其中 i —是层数, F —是给定层的激活函数。将此公式应用于网络的每一层,我们将实现正向传递,并最终获得网络输出。您的结果应该如下所示:

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

偶数道次

如果我们做所有的计算,我们最终会得到一个输出,这个输出实际上是不正确的(因为 0.56 > 0.44 我们输出的是偶数作为结果)。知道了这一点,我们想更新神经元的权重和偏差,这样我们就能得到正确的结果。这正是反向传播发挥作用的地方。反向传播是一种计算关于每个网络变量(神经元权重和偏差)的误差梯度的算法。这些梯度随后用于优化算法,如梯度下降,相应地更新它们。权重和偏差更新的过程称为反向传递。

为了开始计算误差梯度,首先,我们必须计算误差(即损耗)本身。我们将使用标准分类损失—交叉熵。然而,损失函数可以是任何可微分的数学表达式。回归问题的标准选择是均方根误差(RMSE)。交叉熵损失如下所示:

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

其中 M 是类的数量, p 是网络输出的向量, y 是真实标签的向量。对于我们的情况,我们得到:

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

现在,为了找到每个变量的误差梯度,我们将集中使用链式法则:

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

因此,从最后一层开始,对损失相对于神经元权重进行偏导数,我们得到:

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

了解在 softmax 激活和交叉吸附丢失的情况下我们拥有的事实(你可以自己推导出来作为一个很好的练习):

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

现在我们可以找到最后一层的梯度为:

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

继续第 2 层:

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

第一层:

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

对偏差遵循相同的程序:

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

现在我们可以跟踪一个常见的模式,它可以概括为:

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

这是反向传播算法的矩阵方程。有了这些等式,我们就可以计算每个权重/偏差的误差梯度。为了减少误差,我们需要在与梯度相反的方向上更新我们的权重/偏差。这种思想用于梯度下降算法,定义如下:

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

其中 x 是任何可训练变量(W 或 B), t 是当前时间步长(算法迭代),而 α 是学习率。现在,设置 α = 0.1(您可以选择不同的,但请记住,小值假设较长的训练过程,而高值导致不稳定的训练过程)并使用上面的梯度计算公式,我们可以计算梯度下降算法的一次迭代。您应该获得以下重量更新:

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

应用此更改并执行向前传递:

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

我们可以看到,我们的网络性能有所提高,与上例相比,现在奇数输出的值有所提高。对不同的例子(或一批样本)多次运行梯度下降算法,最终将得到一个经过适当训练的神经网络。

摘要

在这篇文章中,我解释了全连接神经网络训练过程的主要部分:向前和向后传球。尽管给出的概念很简单,但对反向传播的理解是建立鲁棒神经模型的一个基本步骤。我希望你从这篇文章中获得的知识能帮助你在训练过程中避免陷阱!

如果你觉得这篇文章有用,别忘了鼓掌,敬请关注!在下一篇文章中,我将解释递归网络的数学原理。

请在下面的评论中留下你的反馈/想法/建议/修正!

感谢阅读!

在神经网络的保护下。第二部分:经常性。

原文:https://towardsdatascience.com/under-the-hood-of-neural-networks-part-2-recurrent-af091247ba78?source=collection_archive---------5-----------------------

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

在本系列的第 1 部分中,我们已经研究了前馈全连接网络的前向和后向通路。尽管前馈网络很普遍,并且在现实世界中有很多应用,但是它们有一个主要的局限性。前馈网络不能处理顺序数据。这意味着它们不能处理不同大小的输入,也不能存储以前状态的信息(内存)。因此,在本文中,我们将讨论允许克服命名限制的递归神经网络(RNNs)。

前进传球

从技术上讲,循环网络可以表示为用状态变量和循环回路扩展的前馈网络。因此,在数学上,RNNs 的输入序列的每个元素被处理如下:

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

其中 It 为时步 t (输入序列的第 t 个元素)的输入, st 为时步 t 的隐藏状态, yt 为时步 t 的输出, fsfo 为各层的激活函数。从等式中我们可以看出,递归网络的状态基本上是隐含层的输出。网络的 r ecurrence 通过在时间步长 t 的计算中出现 t-1 项来解释。因此递归网络的每次计算都依赖于先前的状态和输入。

随着递归网络在各种现实世界问题中的应用,我们可以看到 RNN 架构的不同变体,这些变体不会显著改变背后的数学。这种应用和相应模型的例子可以是:(a)语言翻译,(b)视频分类,©图像字幕,(d)自动完成系统。

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

(a) RNN for translation

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

(b) RNN for video classification

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

(c ) RNN for image captioning

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

(d) RNN for the autocomplete system

由于情况(a)的训练过程的数学推导可以容易地应用于其余情况,我们将考虑一个序列遍历网络的简单例子。假设我们有一个数字序列(用二进制表示)1,3,5,在将它们逐个输入我们的网络后,我们希望得到 5,3,1 作为输出。首先让我们随机初始化变量:

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

**注:**这里为了计算简单,我们将状态大小设为 2,然而状态变量通常是高维变量。

由于输出端可以有多个 1,我们将使用 sigmoid 激活函数( fo ),而 fs 将使用 tanh

现在,已经初始化了变量,我们可以使用上面介绍的等式来计算网络的正向传递。结果我们会得到:

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

示意性地,我们的网络看起来像:

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

偶数道次

与前馈相比,递归网络的第一个不同之处在于,我们也可以将序列作为输出。因此,损耗表示为每个输出端的损耗之和(或它们的平均值)。因此:

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

其中θ可以由任何可训练变量表示。

这里我们将再次使用交叉衰减(在第 1 部分中介绍)。在这种情况下,我们向前传球的损失是 3.30 。在激活功能之前,损失相对于 o 的导数为:

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

由于 WoBo 不依赖于之前的时间步,没有循环回路,我们将从它们开始推导:

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

继续处理其余变量:

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

注: tanh 激活函数的衍生物:

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

现在我们有了计算梯度和应用梯度下降算法的所有方程(在第 1 部分中讨论)。让我们从分别计算每个输出的梯度开始,我们将从时间步骤 4 的输出开始:

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

对时间步骤 5 和 6 的输出执行相同的计算,我们将得到:

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

有了所有需要的梯度,我们可以将总损失的最终梯度计算为每个单独损失的梯度之和:

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

在应用学习率为 0.5 的梯度下降算法后,我们将得到新的变量:

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

现在,更新的网络将导致以下正向传递:

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

新的总损失等于 1.36

总结

在本文中,我介绍了递归神经网络 (RNNs),并推导了训练过程所需的基本方程。这种类型的网络对于序列处理任务特别有用。

尽管反向传递后的训练损失显著减少,但这种网络的训练过程仍然是棘手的。首先,应该增加状态的维度。更重要的是,经典(或香草)rnn 很难记住旧的状态。为了解决这个问题,存在许多解决方案。其中最著名的可能是:

  1. 在状态之间添加剩余连接(使得每个状态不仅依赖于前一个状态,也依赖于 t-2 或 t-3 状态)
  2. 使用长短期记忆( LSTM )细胞,这需要单独一篇文章来描述。

在下一部分中,我将描述卷积神经网络,它成为了现代深度学习和计算机视觉领域的重要组成部分。

如果你觉得这篇文章有用,别忘了鼓掌,关注我,看更多这样的帖子!

请在下面的评论中分享你对未来帖子的反馈和想法!

感谢阅读!

了解如何通过 doc2vec 将您的段落转换为 vector

原文:https://towardsdatascience.com/understand-how-to-transfer-your-paragraph-to-vector-by-doc2vec-1e225ccf102?source=collection_archive---------7-----------------------

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

“person holding camera lens” by Paul Skorupskas on Unsplash

在之前的故事中,提到的 word2vec 是 Mikolov 等人(2013)介绍的。Mikolov 和 Le 发表了句子/文档向量转换。这是嵌入技术的又一个突破,我们可以用向量来表示一个句子或文档。米科洛夫等人称之为“段落向量”。

看完这篇文章,你会明白:

  • 段落向量设计
  • 体系结构
  • 履行
  • 拿走

段落向量设计

doc2vec 的设计基于 word2vec。如果你不熟悉 word2vec(即 skip-gram 和 CBOW),你可以看看这个的故事。Doc2vec 还使用无监督学习方法来学习文档表示。每个文档的文本(即单词)输入可以是多种多样的,而输出是固定长度的向量。

段落向量和单词向量被初始化。段落向量在所有文档中是唯一,而单词向量在所有文档中是共享的,从而可以从不同的文档中学习单词向量。

在训练阶段,单词向量将被训练,而段落将被丢弃。在预测阶段(即在线预测),段落向量将被随机初始化,并通过词向量来计算。

体系结构

学习单词向量有两种算法。这两种方法都是受学习单词向量的启发,单词向量是 skip-gram 和连续词袋(CBOW)

分布式段落向量记忆模型(PV-DM)

段落向量和单词向量都是随机初始化的。每个段落向量被分配给单个文档,而单词向量在所有文档之间共享。平均或连接段落向量和单词向量,并传递到随机梯度下降,梯度通过反向传播获得。

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

Architecture of PV-DM (Mikolov et al., 2014)

这种方法类似于 word2vec 中的连续词包(CBOW)方法。

【分布式文字包版本段落矢量(PV-DBOW)

另一种方法走的是不同的路。它不是预测下一个单词,而是使用段落向量对文档中的整个单词进行分类。在训练过程中,对单词列表进行采样,然后形成分类器,对单词是否属于文档进行分类,从而学习单词向量。

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

Architecture of PV-DBOW (Mikolov et al., 2014)

这种方法类似于 word2vec 中的跳格法。

履行

首先,我们需要传递训练数据来构建词汇,并调用训练阶段来计算单词向量。

doc2vec_embs = Doc2VecEmbeddings()
x_train_tokens = doc2vec_embs.build_vocab(documents=x_train)
doc2vec_embs.train(x_train_tokens)

之后,我们可以通过提供训练数据和测试数据对其进行编码。

x_train_t = doc2vec_embs.encode(documents=x_train)
x_test_t = doc2vec_embs.encode(documents=x_test)

最后,我们可以将向量传递给分类器

from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression(solver='newton-cg', max_iter=1000)
model.fit(x_train_t, y_train)y_pred = model.predict(x_test_t)from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_reportprint('Accuracy:%.2f%%' % (accuracy_score(y_test, y_pred)*100))
print('Classification Report:')
print(classification_report(y_test, y_pred))

结果

Accuracy: 52.8%
Average Precision: 0.66
Average Recall: 0.53
Average f1: 0.5

拿走

要访问所有代码,你可以访问我的 github repo。

  • 与 word2vec 不同,doc2vec 动态计算句子/文档向量。换句话说,在预测时间内得到矢量需要时间。
  • 根据 Mikolov 等人的实验, PV-DM 始终优于 PV-DBOW
  • 在 PV-DM 方法中,串联方式通常比求和/平均方式更好

参考

米克洛夫·托马斯,来自英国。2014.句子和文档的分布式表示

gensim 中的 doc 2 vec

理解文本摘要并在 python 中创建自己的摘要器

原文:https://towardsdatascience.com/understand-text-summarization-and-create-your-own-summarizer-in-python-b26a9f09fc70?source=collection_archive---------1-----------------------

文本摘要介绍

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

我们都与使用文本摘要的应用程序进行交互。这些应用程序中有许多是针对发布每日新闻、娱乐、体育文章的平台的。在我们忙碌的时间表中,我们更喜欢在决定阅读整篇文章之前先阅读那些文章的摘要。阅读摘要有助于我们确定感兴趣的领域,给出故事的简要背景。

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

摘要可以被定义为在保留关键信息和整体含义的同时产生一个简洁流畅的摘要的任务。

冲击

摘要系统通常有额外的证据,它们可以用来指定文档中最重要的主题。例如,当总结博客时,博客帖子后面的讨论或评论是很好的信息来源,可以确定博客的哪些部分是重要的和有趣的。

在科学论文摘要中,有大量的信息,如引用的论文和会议信息,可以用来识别原始论文中的重要句子。

文本摘要的工作原理

通常有两种类型的摘要,抽象的提取的摘要。

  1. **抽象概括:**抽象方法基于语义理解选择单词,即使那些单词没有出现在源文档中。它旨在以新的方式生产重要的材料。他们使用先进的自然语言技术解释和检查文本,以便生成新的更短的文本,传达原始文本中最重要的信息。

它可以与人类阅读文本或博客文章,然后用自己的话总结的方式相关联。

输入文档→理解上下文→语义→创建自己的摘要。

**2。提取摘要:**提取方法试图通过选择保留最重要观点的单词子集来总结文章。

这种方法对句子的重要部分进行加权,并用其形成摘要。使用不同的算法和技术来定义句子的权重,并基于它们之间的重要性和相似性来进一步对它们进行排序。

输入文档→句子相似度→句子权重→选择等级较高的句子。

有限的研究可用于抽象概括,因为与提取方法相比,它需要对文本有更深的理解。

与自动抽象摘要相比,纯粹的提取摘要经常给出更好的结果。这是因为抽象摘要方法处理诸如语义表示、
推理和自然语言生成之类的问题,这比诸如句子提取之类的数据驱动方法相对困难。

有许多技术可以用来生成摘要。为了简单起见,我将使用一种 无监督学习 方法来寻找句子的相似性并对它们进行排序。这样做的一个好处是,在项目中使用它之前,您不需要训练和构建模型。

理解余弦相似性对于充分利用你将要看到的代码是有好处的。余弦相似度是内积空间的两个非零向量之间的相似度,度量它们之间角度的余弦。因为我们将把我们的句子表示为向量束,所以我们可以用它来寻找句子之间的相似性。它测量矢量之间角度的余弦值。如果句子相似,角度将为 0

到现在都好…? 希望如此:)

接下来,下面是我们生成总结文本的代码流:-

输入文章→拆分成句子→去除停用词→建立相似度矩阵→基于矩阵生成排名→挑选前 N 个句子进行汇总。

让我们创建这些方法。

1.导入所有必需的库

from nltk.corpus import stopwords
from nltk.cluster.util import cosine_distance
import numpy as np
import networkx as nx

2.生成干净的句子

**def read_article(file_name):**
    file = open(file_name, "r")
    filedata = file.readlines()
    article = filedata[0].split(". ")
    sentences = [] for sentence in article:
     print(sentence)
     sentences.append(sentence.replace("[^a-zA-Z]", " ").split(" "))
     sentences.pop() 

    return sentences

3。相似性矩阵

这就是我们将使用余弦相似度来寻找句子间相似度的地方。

**def build_similarity_matrix(sentences, stop_words):**
    # Create an empty similarity matrix
    similarity_matrix = np.zeros((len(sentences), len(sentences)))

    for idx1 in range(len(sentences)):
        for idx2 in range(len(sentences)):
            if idx1 == idx2: #ignore if both are same sentences
                continue 
            similarity_matrix[idx1][idx2] = sentence_similarity(sentences[idx1], sentences[idx2], stop_words)return similarity_matrix

4.生成汇总方法

方法将继续调用所有其他帮助函数,以保持我们的摘要管道运行。确保看一下下面代码中的所有# Steps

**def generate_summary(file_name, top_n=5):**
    stop_words = stopwords.words('english')
    summarize_text = [] **# Step 1 - Read text and tokenize**
    sentences =  read_article(file_name) **# Step 2 - Generate Similary Martix across sentences**
    sentence_similarity_martix = build_similarity_matrix(sentences, stop_words) **# Step 3 - Rank sentences in similarity martix**
    sentence_similarity_graph = nx.from_numpy_array(sentence_similarity_martix)
    scores = nx.pagerank(sentence_similarity_graph) **# Step 4 - Sort the rank and pick top sentences**
    ranked_sentence = sorted(((scores[i],s) for i,s in enumerate(sentences)), reverse=True)    
    print("Indexes of top ranked_sentence order are ", ranked_sentence)for i in range(top_n):
      summarize_text.append(" ".join(ranked_sentence[i][1])) **# Step 5 - Offcourse, output the summarize texr**
    print("Summarize Text: \n", ". ".join(summarize_text))

所有放在一起,这里是完整的代码。

让我们看看它的运行情况。

一篇名为 的文章的全文微软推出智能云中心,提升学生在人工智能&云技术 方面的技能

In an attempt to build an AI-ready workforce, Microsoft announced Intelligent Cloud Hub which has been launched to empower the next generation of students with AI-ready skills. Envisioned as a three-year collaborative program, Intelligent Cloud Hub will support around 100 institutions with AI infrastructure, course content and curriculum, developer support, development tools and give students access to cloud and AI services. As part of the program, the Redmond giant which wants to expand its reach and is planning to build a strong developer ecosystem in India with the program will set up the core AI infrastructure and IoT Hub for the selected campuses. The company will provide AI development tools and Azure AI services such as Microsoft Cognitive Services, Bot Services and Azure Machine Learning.According to Manish Prakash, Country General Manager-PS, Health and Education, Microsoft India, said, "With AI being the defining technology of our time, it is transforming lives and industry and the jobs of tomorrow will require a different skillset. This will require more collaborations and training and working with AI. That’s why it has become more critical than ever for educational institutions to integrate new cloud and AI technologies. The program is an attempt to ramp up the institutional set-up and build capabilities among the educators to educate the workforce of tomorrow." The program aims to build up the cognitive skills and in-depth understanding of developing intelligent cloud connected solutions for applications across industry. Earlier in April this year, the company announced Microsoft Professional Program In AI as a learning track open to the public. The program was developed to provide job ready skills to programmers who wanted to hone their skills in AI and data science with a series of online courses which featured hands-on labs and expert instructors as well. This program also included developer-focused AI school that provided a bunch of assets to help build AI skills.

(来源:analyticsindiamag.com)

而用2作为输入的概括文本是

*Envisioned as a three-year collaborative program, Intelligent Cloud Hub will support around 100 institutions with AI infrastructure, course content and curriculum, developer support, development tools and give students access to cloud and AI services. The company will provide AI development tools and Azure AI services such as Microsoft Cognitive Services, Bot Services and Azure Machine Learning. According to Manish Prakash, Country General Manager-PS, Health and Education, Microsoft India, said, "With AI being the defining technology of our time, it is transforming lives and industry and the jobs of tomorrow will require a different skillset.*

如你所见,它做得很好。您可以进一步定制它,以减少到数字到字符而不是行。

重要的是要理解我们已经使用了 textrank 作为对句子进行排序的方法。TextRank 不依赖于任何以前的训练数据,可以处理任何任意文本。TextRank 是 NLP 的一个通用的基于图的排序算法。

有许多先进的技术可用于文本摘要。如果你是新手,你可以从一篇名为文本摘要技术:简要调查的有趣的研究论文开始

自然语言生成技术现状调查:核心任务、应用和评估是一篇更加详细的研究论文,您可以浏览一下以获得更好的理解。

希望这已经给了你一个文本摘要的简要概述和总结文本的代码示例演示。你可以从上面的研究论文入手,获取解决这个问题的高级知识和方法。

*这里显示的代码在我的GitHub**上有。*可以下载玩玩。

你可以在 MediumTwitterLinkedIn 上关注我,有任何问题,请发邮件给我(praveend806 [at] gmail [dot] com)。

理解这 4 个高级概念,听起来像机器学习大师

原文:https://towardsdatascience.com/understand-these-4-advanced-concepts-to-sound-like-a-machine-learning-master-d32843840b52?source=collection_archive---------3-----------------------

这是我一年前写的关于机器学习的一些基本概念的文章的续篇。有时候续集比《终结者 2》或《卡恩之怒》更好,但除非你看过第一部,否则你无法欣赏它们。去读那个帖子然后回来。我会等…

机器学习中有许多概念,理解这些概念对于掌握知识非常重要。更重要的是,如果你要实现人工智能,销售人工智能,集成人工智能,或者写关于人工智能的文章,你可能想要温习这些核心的,但先进的概念,以便有一个良好的,强大的基础来开始。

看完这篇文章后,你的 M 机器 I 智慧 L 收入 Q uotient(或 MILQ )将会大幅增加。你准备好了吗?

精确度和召回率

什么是活基督的精确和回忆?!有时当你读到精确和回忆时,它们听起来完全一样;“精确是你正确的频率,回忆是你正确的频率” —例如。Welp,它们实际上是不同的,不幸的是,对于理解为什么机器学习模型对用例有效或无效是重要的。

这可能是我解释这种差异的第三种最佳方式:

比方说,你试图记住一些事情,比如你一生中见过多少把蓝色雨伞。回忆描述了你有多擅长每次看到蓝色雨伞就回忆起来,代价是也会误认一些紫色雨伞的记忆。假设你在生活中看到了 10 把蓝色的雨伞,你把这 10 把雨伞都记住了。但是,你也错误地记住了另外 5 次,事实上它们是紫色的伞(但是你记得它们是蓝色的)。你的回忆是 100%,因为你每次都记得。恭喜你这个怪人!

现在精度将描述你的记忆中有多少是正确的。在上面这个奇怪的例子中,15 次记忆中,只有 10 次是正确的。因此,你的精度约为 66%。

那么哪个更重要呢?这取决于你的用例。如果你正在使用计算机视觉或深度学习从痣的照片中识别癌症,那么尽可能减少你告诉病人他们没有癌症的次数(假阴性),甚至冒着增加告诉人们他们没有癌症的可能性(假阳性)的风险。

关键是你不能两者兼得,总有的权衡。这取决于哪个对你的用例更重要;冒着得到一些假阳性的风险得到每一个真阳性?或者冒着得到更多假阴性的风险,确保尽可能多的结果是真阳性。

明白了吗?如果你仍然困惑,不要担心,它很复杂,很难记住。但是我要继续前进…好吗?

识别与检测

当你应用机器学习时,你会有一些非常酷的工具,比如人脸识别和商标检测*。还可以有人脸检测和 logo 识别。搞什么鬼。为什么?*

让我通过提供每种类型的一些例子来解释这个概念:

人脸识别-输入是一张人脸的图像,机器学习模型识别这个人,并向您返回这个人的名字。

人脸检测-输入是人脸图像,模型会返回一个包围它找到的人脸的边界框。它告诉你脸在哪里,但不告诉你是谁。

图像识别—输入是一幅图像,输出(可能)是描述该图像的多个标签,如雾天、汽车、单色、建筑、风景等。

对象检测—输入是特定图像(如徽标)和要在其上进行检测的一般图像,输出是图像中特定图像(或徽标)出现的每个位置周围的边界框。

这有助于解释差异吗?没有吗?太好了——我们势如破竹,继续前进…

分类

很多好的机器学习实现实际上都是分类器。一篇文章是假新闻还是真新闻,这是一片叶子、一片棕榈叶、一片枫叶还是毒橡树的图像,这句话是不是一个连续的句子,等等。

每堂课就像一个选择或者一个标签。你训练一个机器学习模型,把一些输入数据(比如一张照片或一篇新闻)放到一个类中。有些模型可以给你几个类作为结果,有些一次只能做一个类。

要知道的关键是,当你训练一个分类器时,你必须遵循一些基本规则,否则它不会很好地工作(像我的语法检查器)。

  1. 你的训练数据必须 平衡 。这意味着你必须有和你的狗一样多的猫的照片。如果你尝试训练一个类不均匀的模型,自然会变得更偏向于实例较多的类。
  2. 这个模型不会仅仅指出哪些例子是错误的。你的训练数据必须非常干净。如果你的猫文件夹里有一些狗的例子,那么你真的是在欺骗自己。去把那些照片移到狗文件夹里。

深度学习

深度学习听起来很牛逼吧?还有什么比常规学习更好的呢?我知道…深度学习。好吧,事实证明深度学习很棒,但它有一个问题。首先,让我试着解释一下什么是深度学习。

大多数深度学习模型都是基于人工神经网络的。神经网络本质上是一层又一层的节点,这些节点以某种该死的神奇方式相互连接。当你的输入层和输出层之间有超过 1 或 2 层时,你就有了一个很深的网络!真正酷的是,当你训练网络时,它以某种方式弄清楚如何组织自己来识别人脸(例如)。它可能会将第一层分配给像素分组,第二层分配给边缘检测,第三层分配给鼻子理解,等等……但它会自己找出答案。太神奇了。

但这并不是一切。一个安全的经验法则是,当你听到深度学习时,它意味着 GPU。而 GPU 又很贵。所以你真的需要考虑你的用例。例如,有一个很棒的人脸检测器,而没有使用深度学习。这是一个计算机视觉过滤器,有大约 97%的准确率。这种人脸检测还有深度学习版。精确度逐渐提高,但这是以巨大的性能成本为代价的。你需要 GPU!而计算机视觉版本可以在单个 CPU 上超快运行。

所以,这又是一个权衡。

好了,你的机器学习硕士课程到此结束。

再见

理解这 5 个基本概念,让自己听起来像机器学习专家

原文:https://towardsdatascience.com/understand-these-5-basic-concepts-to-sound-like-a-machine-learning-expert-6221ec0fe960?source=collection_archive---------0-----------------------

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

https://cdn2.hubspot.net/hub/395829/file-2619018693-jpg/TheEvolutionofForecasting-03-15ENJPG.jpg

亚伦·爱戴是 机器盒子 的联合创始人——这是一家机器学习初创公司,旨在让用机器学习来建造东西变得容易。

大多数人似乎都对机器学习感到有点害怕或困惑。这是什么?它要去哪里?现在能给我一些钱吗?

所有有效的问题。事实是,你已经训练机器学习模型多年了,可能还没有意识到这一点。你用 iPhone 还是苹果照片?或者脸书怎么样?你知道它是如何向你展示一组面孔并让你识别它们的吗?嗯,通过标记这些照片,你正在训练一个面部识别模型来识别新面孔。恭喜你,你现在可以说你有训练机器学习模型的经验了!但在此之前,请阅读这些机器学习基础知识,这样你就可以准确地回答任何后续问题。

1)机器学习的好处是可以预测

如果你只是在图片中标记你朋友的脸,你就不是在使用机器学习模型。如果你上传一张新照片,突然它告诉你每个人是谁,那么你正在用机器学习气体做饭。机器学习的全部意义在于根据模式和其他训练它的因素来预测事物。它可以是任何东西;基于邮政编码和卧室数量的房价,基于一年中的时间和天气的航班延误可能性,图片中物体或人物的标记等。

2)机器学习需要训练

你必须告诉机器学习模型它试图预测什么。想想人类的孩子是如何学习的。他们第一次看到香蕉时,不知道那是什么。然后你告诉他们这是一根香蕉。下一次他们看到一个(不是你训练他们吃的那个,因为你已经吃过了),他们会认出那是一个香蕉。机器学习以类似的方式工作。你给它看尽可能多的香蕉图片,告诉它这是一只香蕉,然后用一只没有被训练过的香蕉图片来测试它。这有点过于简化了,因为我省略了你必须告诉它什么不是香蕉的部分,并向它展示不同种类的香蕉,不同的颜色,不同视角和角度的图片等等。

3) 80%的准确率被认为是成功的

在技术上,我们还没有达到机器学习平台在识别图片中的香蕉时达到 100%准确率的地步。但是没关系。事实证明,人类也不是 100%准确。行业内的潜规则是,80%准确率的模型就是成功的。如果你想一想在你的收藏中正确识别 800,000 张图片是多么有用,尽管可能没有正确识别 200,000 张图片,你仍然节省了自己 80%的时间。从价值的角度来看,这是巨大的。如果我能挥动魔杖,让你的生产率提高那么多,你会给我很多钱。嗯,事实证明我可以,使用机器学习,所以请寄支票或现金。

2018 年更新:80%法则现在更像 90%法则了。

4)机器学习不同于人工智能、深度学习或神经网络

人们倾向于随便使用这些术语。要想听起来像专家,就要学会区别。

AI——人工智能只是指在完成特定任务方面与人类一样好(或更好)的计算机。它也可能意味着一个可以根据大量输入做出决定的机器人,就像终结者或 C3PO 一样。这是一个非常宽泛的术语,不是很有用。

机器学习是一种实现人工智能的方法。这意味着根据分析数据集的训练对某件事做出预测。有许多不同的方式,一个 ML 平台可以实现训练集来预测事情。

NL-神经网络是机器学习模型可以预测事物的方式之一。神经网络的工作有点像你的大脑,通过大量的训练来调整自己,以理解香蕉应该是什么样子的。你创建了一层层的节点,这些节点变得非常深。

5)在人工智能拥有自我意识之前,我们还有一段路要走

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

( https://xkcd.com/1319/))

我现在还不担心机器人会接管地球。主要是因为如果你曾经建立过一个机器学习模型,你就会知道它有多依赖你这个人来告诉它该做什么。即使你给它明确的指示,它通常也会出错。你必须对这些系统如此明确,以至于它突然变得有知觉的可能性微乎其微。即使是一个简单的网页,显示一个带有单词的框,也需要你准确地告诉它这个框出现在哪里,它是什么形状,它是什么颜色,如何在不同的浏览器上工作,如何在不同的设备上正确显示等等。等等。等等。

即使是非常深的神经网络接管世界,将我们变成电池,也有很多障碍,主要是因为没有人告诉它这样做(希望如此)。

用交互代码理解 Numpy 和 Tensorflow 中的 2D 展开卷积运算

原文:https://towardsdatascience.com/understanding-2d-dilated-convolution-operation-with-examples-in-numpy-and-tensorflow-with-d376b3972b25?source=collection_archive---------1-----------------------

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

Image from Pixabay

所以从这篇论文来看。用膨胀卷积进行多尺度上下文聚合,我被介绍到膨胀卷积运算。而且说实话只是用修改过的核,准确的说是更宽的核进行卷积运算。然而,为了充分理解一些事情,我需要实施它,因此有了这个帖子。

卷积 vs 扩张卷积(理论)

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

Image from paper

红线→ “熟悉的”离散卷积(在我们的例子中是正常的 2D 卷积)运算和扩张卷积之间的关系

我们熟悉的离散卷积就是 1-膨胀卷积 。因此,仅仅从这个陈述中,我们已经可以看出,当 1 的值增加到 2 时,这不是我们都喜欢的“熟悉的”卷积运算。而这一点,可以通过图片看得很清楚。

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

蓝色书写→ 膨胀因子为 1、2、4。(或 1-扩张卷积、2-扩张卷积和 4-扩张卷积)

那么这些扩张因子是什么呢?这可以用另一个图像来解释。(其实是同一个图像 lol)

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

蓝色数字 →应用于内核的膨胀因子

所以上图并不是膨胀卷积的最佳表现,但你可以大致了解这个膨胀因子是什么。并且随着膨胀因子的增加,原始核元素之间的空间变得越来越宽。现在让我们来看例子。

实验设置

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

红框 →原矩阵
蓝框 →我们要用的内核

因此,我们将使用蓝框核对红框矩阵执行多重卷积运算。但是,有三点需要注意。

  1. 在 Tensorflow 中有两种方法来执行扩张卷积,或者通过基本的 tf.nn.conv2d() (通过设置扩张的)或者通过 tf.nn.atrous_conv2d()
  2. 然而,似乎这两个操作都没有翻转内核。所以他们正在执行互相关(如果我错了请纠正我),所以我们将手动翻转内核,如下所示。(红线)

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

3.如上所述,所有的 Tensorflow 操作将使用原始(3*3)内核,同时改变膨胀因子,而对于 Numpy,我们将为每个膨胀率生成特定内核。

例 1-扩张因子 1

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

我们已经知道,如果我们将膨胀因子设置为 1,它就像我们学会的卷积运算一样。所以这个例子没有什么特别的。现在让我们看一下代码。

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

红线 →注意我们正在对 Numpy
进行“熟悉的”卷积运算,黄线 →张量流的膨胀因子

示例 2 -扩张因子 2

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

红框 →为 Numpy 生成膨胀因子为 2 的内核

现在,由于膨胀因子已经增加到 2,我们将为 Numpy 生成一个新内核。

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

红线 →注意我们正在对 Numpy
黄线 →张量流的膨胀因子进行“熟悉的”卷积运算

示例 3 —扩张因子 3

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

红框 →为 Numpy 生成膨胀系数为 3 的内核

现在,由于膨胀因子已经增加到 3,我们将为 Numpy 生成一个新内核。

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

红线 →注意我们正在对 Numpy
进行“熟悉的”卷积运算,黄线 →张量流的膨胀因子

例 4—扩张因子 4

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

红框 →为 Numpy 生成膨胀系数为 4 的内核

现在,由于膨胀因子已经增加到 4,我们将为 Numpy 生成一个新内核。

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

红线 →注意我们正在对 Numpy
黄线 →张量流的膨胀因子进行“熟悉的”卷积运算

交互代码

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

我为了交互代码搬到了 Google Colab!所以你需要一个谷歌帐户来查看代码,你也不能在谷歌实验室运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

注意安装在 Google Collab 上的 Tensorflow 版本似乎不支持膨胀因子大于 2 的膨胀卷积,(仅适用于 tf.nn.conv2d())它会给出以下错误。所以我已经把 tf.nn.cond2d()注释掉了。

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

要访问代码,请点击此处

最后的话

一个惊人的事实是:对扩张卷积运算进行反向传播只是转置卷积运算

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请点击这里查看我的网站。

同时,在我的推特这里关注我,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣,我还在这里做了解耦神经网络的比较。

参考

  1. 膨胀卷积和克罗内克因子卷积。(2016).推论。检索于 2018 年 3 月 12 日,来自http://www . inference . VC/expanded-convolutions-and-kronecker-factorisation/
  2. 卷积运算教程—no 1 . 0 . 0 文档。(2018).Deeplearning.net。检索于 2018 年 3 月 12 日,来自http://deep learning . net/software/the ano/tutorial/conv _ 算术. html
  3. tf.nn.atrous_conv2d | TensorFlow。(2018).张量流。检索于 2018 年 3 月 12 日,来自https://www . tensor flow . org/API _ docs/python/TF/nn/atrous _ conv 2d
  4. SciPy . signal . convolved 2d—SciPy v 1 . 0 . 0 参考指南。(2018).Docs.scipy.org。检索于 2018 年 3 月 12 日,来自https://docs . scipy . org/doc/scipy/reference/generated/scipy . signal . convolved . html
  5. 数组,I. (2018)。NumPy 数组的就地类型转换。Stackoverflow.com。检索于 2018 年 3 月 12 日,来自https://stack overflow . com/questions/4389517/in-place-type-conversion-of-a-numpy-array
  6. TF . nn . conv 2d _ back prop _ filter | tensor flow。(2018).张量流。检索于 2018 年 3 月 12 日,来自https://www . tensor flow . org/API _ docs/python/TF/nn/conv2d _ back prop _ filter
  7. tf.nn.conv2d | TensorFlow。(2018).张量流。检索于 2018 年 3 月 12 日,来自https://www.tensorflow.org/api_docs/python/tf/nn/conv2d
  8. “扩张卷积和卷积+步幅有什么区别?——Quora”。2018.Quora.Com。2018 年 3 月 12 日访问。https://www . quora . com/What-is-difference-of-expanded-convolution-and-convolution+stride
  9. 于,冯,科尔敦,伏(2015)。基于扩张卷积的多尺度上下文聚合。 arXiv 预印本 arXiv:1511.07122
  10. 理解多层 CNN 转置卷积的反向传播。(2018).中等。检索于 2018 年 3 月 12 日,来自https://medium . com/swlh/only-numpy-understanding-back-propagation-for-transpose-convolution-in-multi-layer-CNN-with-c0a 07d 191981

理解黑盒

原文:https://towardsdatascience.com/understanding-a-black-box-896df6b82c6e?source=collection_archive---------7-----------------------

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

模型可解释性方法的概述…以及为什么它很重要。

在我们深入研究一些流行且相当强大的方法来打开黑盒机器学习模型(如深度学习模型)之前,让我们首先明确一下为什么它如此重要。

你看,有许多领域将受益于可理解的模型,如自动驾驶汽车,或广告定位,甚至有更多的领域需要这种可解释性,如信誉分配,银行,医疗保健,人力资源。能够审计这些关键领域的模型是非常重要的。

理解一个模型的最重要的特征让我们深入了解它的内部工作,并给出改进它的性能和消除偏差的方向。

除此之外,有时它有助于调试模型(经常发生)。然而,与预测一起提供解释的最重要的原因是,可解释的 ML 模型对于获得最终用户的信任是必要的(以医疗应用为例)。

我希望现在你也相信可理解的机器学习是非常重要的,所以让我们深入到具体的例子中来解决这个问题。

简单方法

人们能想到的最简单的方法是稍微改变输入数据,以观察底层黑盒是如何反应的。对于视觉数据,使用部分遮挡的图像是最简单的方法。对于文本——替换单词,对于数字/分类数据——改变变量。就这么简单!

这种方法的最大好处是——它是模型不可知的,您甚至可以检查其他人的模型,而无需直接访问它。

即使听起来很容易,好处也是巨大的。我多次使用这种方法来调试机器学习即服务解决方案和在我自己的机器上训练的神经网络,发现训练的模型选择不相关的特征来决定图像的类别,从而节省了工作时间。真正的 80/20 法则在起作用。

GradCAM

梯度加权类激活图——一种更高级更专业的方法。这种方法的限制是您需要访问模型的内部,并且它应该可以处理图像。为了让您对该方法有一个简单的直觉,给定一个数据样本(图像),它将输出图像区域的热图,其中神经网络具有最多和最大的激活,因此图像中的特征与该类的相关性最大。

从本质上讲,与之前的模型相比,您对该模型的重要特性有了更细粒度的理解。

这里是 GradCAM 可解释性方法的一个很好的演示。
要了解 GradCAM 如何工作,请查看“Grad-CAM:通过基于梯度的定位从深度网络进行可视化解释”的论文。

石灰

也许你听说过这个。如果没有,首先看看这个简短的介绍。

2016 年发表《我为什么要相信你?:解释任何分类器的预测”的论文,该论文介绍了 LIME —局部可解释的模型不可知解释。让我们从名字中推导出它的功能!

局部可解释性*——*你要知道机器学习模型的复杂度越高,模型的可解释性越差。也就是说,逻辑回归和决策树比随机森林和神经网络更容易解释。LIME 方法的假设是,像随机森林或神经网络这样的非线性复杂模型可以是线性的,并且在局部是简单的,即在整个决策边界的小块上。回想一下,我们说过简单的模型是可以解释的。

模型无关 这部分比较容易。LIME 对被解释的模型没有任何假设。

关于 LIME 最好的事情是它也可以作为 PyPI 包使用。你已经准备好出发了!要了解更多信息,这里是他们的 GitHub repo 基准和一些教程笔记本,这里是他们论文的链接。仅供参考,LIME 也被 Fast Forward Labs(现在是 Cloudera 的一部分)用于演示模型可解释性的重要性

SHAP

SHapley 附加解释 —一种理解黑盒模型的最新解决方案。在某种程度上,它非常类似于石灰。两者都是强大的统一解决方案,与模型无关,并且相对容易上手。

但是 SHAP 的特别之处在于它内部使用石灰。事实上,SHAP 背后有太多的可解释模型,它选择最适合手头问题的模型,用正确的工具给你所需的解释。

此外,如果我们分解这个解决方案的能力,我们实际上发现,SHAP 用 Shapley 值解释了任何机器学习模型的输出。这意味着 SHAP 为每个预测的每个特征分配一个值(即特征属性);该值越高,该特征对特定预测的贡献就越大。这也意味着这些值的总和应该接近原始模型预测。

检查他们的 GitHub repo ,就像 LIME 一样,他们有一些教程,也可以通过 pip 安装 SHAP。此外,要了解更多细节,请查看他们的压印线预打印纸

最终注释

机器学习模型的可解释性和可解释性是人工智能社区的一个热门话题,具有巨大的影响。为了让人工智能产品和服务进入新的高度监管的市场,必须了解这些新算法是如何做出决策的。

此外,知道机器学习模型的原因在调试它,甚至改进它方面提供了突出的优势。

在设计深度学习/机器学习系统时,最好考虑到可解释性,这样总是很容易检查模型,并在关键情况下抑制其决策。

如果你已经做到了,谢谢你!我鼓励你在这个新领域进行自己的研究,并在评论区与我们分享你的发现。

另外,如果你喜欢这篇文章,别忘了鼓掌😏或者关注我,获取更多关于机器学习和深度学习的各种主题的文章。

P.S .抱歉,这次没有 Colab 笔记本,因为已经有很多关于这个主题的非常好的教程让你开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值