TowardsDataScience 博客中文翻译 2016~2018(一百五十八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

我为我的工作申请建立了一个拒绝-不拒绝电子邮件分类器

原文:https://towardsdatascience.com/i-built-a-reject-not-reject-email-classifier-for-my-job-applications-844a3b6cd67e?source=collection_archive---------3-----------------------

可怕的拒绝邮件。到现在,我已经很习惯了。就好像我申请工作会被拒绝一样。在我的职业生涯中,我收到过很多拒绝邮件。起初,每当我收到拒绝邮件时,我都会感到非常失望。但是随着时间的推移,我有点习惯了。事实上,现在,我一边阅读拒绝邮件,一边享受人力资源团队的创造力。大多数人力资源试图让它听起来尽可能的甜蜜。他们中的一些人会说工作的要求和候选人的技能不匹配。有些人会安慰说,他们确信在其他地方会有更好的机会。有些人会直截了当地说你不够好。

那么一个数据科学家在收到大量拒绝邮件的时候会怎么做呢?构建一个分类器,自动将指示拒绝的电子邮件分类到拒绝类别,并将其他电子邮件分类到非拒绝类别。让我详细说明一下这个过程,这样你也可以这样做。

我开始从我自己的收件箱收集数据。我曾想过从收件箱中使用相关关键词(如“谢谢你的申请”、“我们祝你有个美好的未来”)有计划地收集电子邮件,但后来我决定不这么做,因为我不知道这些关键词是否正确。我手动浏览我的收件箱,并从拒绝邮件中提取文本。我还随机收集了等量的没有任何拒绝的邮件。我将这两类电子邮件文本收集在一起,保存在一个 csv 文件中。

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

Screenshot of reject emails with their labels

这项任务数据收集的一个问题是,我没有收到很多拒绝邮件。许多公司根本不发送任何拒绝电子邮件。他们中的一些人在他们的门户上发送拒绝消息。结果,我们收到的拒绝邮件数量非常有限。事实上,尽管我们被拒绝了很多次,我们还是收到了大约 10 封拒绝邮件。这对于一个健壮的分类器来说是远远不够的。但是让我们试着用我们可以支配的资源来建造一个。

在数据收集之后,我们进入数据预处理阶段。在这一阶段,我们首先将所有大写字符转换成小写字符,因为计算机对每种情况都有不同的处理方式。之后,我们删除标点符号,因为它们对分类器没有贡献。然后,我们删除数字,因为它们对分类器没有贡献。

一旦数据经过预处理,就必须将其转换成可用于机器学习的形式。有多种技术可以将文本转换成数字矩阵。其中包括计数矢量器、Tf-Idf 矢量器和单词包。在我们的例子中,我们使用计数矢量器,因为它几乎可以与 Tf-Idf 矢量器相媲美。

我们还使用 sklearn 的 LabelEncoder 对我们的目标变量,即标签(拒绝或不拒绝)进行编码。这将拒绝和不拒绝分别编码为 0 和 1。

然后,我们使用 sklearn 的 train_test_split 将数据分成训练集和测试集。我们将训练数据标记为 x_train 和 y_train,将测试数据标记为 x_test 和 y_test。

我们使用多项式朴素贝叶斯分类器模型来拟合训练数据。之后,我们编写一个函数,将编码的类别转换回它们的名称,并对测试数据使用预测函数。我们在测试数据上获得了大约 80 %的准确度。

我们还通过给出定制的输入语句来测试我们的分类器,看看它的性能如何。以下是一些预测。

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

Reject and Not Reject predictions from the Multinomial Bayes model

厉害!当然,它并不完美,但它显然能够识别拒绝邮件的模式。有了更多的数据,我相信它可以变得更加稳健。此外,我想探索一下我是否可以将它与我的 gmail 帐户整合在一起。

另外,如果你想浏览一下代码,我已经把它作为 Ipython 笔记本上传到 Github 上了。

https://github.com/imaadmkhan1/reject_not_reject

我用 Python 构建了 T(并修改了它)

原文:https://towardsdatascience.com/i-built-the-t-with-python-and-revamped-it-632127364f4e?source=collection_archive---------9-----------------------

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

Python 是一个很好的网络建模工具——那么它能告诉我们如何改进 T?

今年秋天,我在麻省理工学院上了一堂网络模型课( 1.022 )。这门课涵盖了许多网络/图形的酷概念,如节点中心性和最短路径,以及重要的应用,如流行病和社交网络的行为。这个理论的另一个应用——我选择做我的毕业设计——是交通网络。在我这堂课的最后一个项目中,我模拟了 T,并实验性地对网络做了一些改变。

如果你不熟悉 T…

T 是波士顿地铁系统。马萨诸塞湾运输管理局(MBTA)经营 T,以及公共汽车和通勤铁路。T 上有五条线:红色、蓝色、绿色、橙色和银色的线。银线实际上是一辆公共汽车,我没有把它包括在我的模型中。

T 的官方地图,参考这一页

Have fun exploring the T via this map I made on Carto! 😃

首先,我将解释一下我是如何对网络建模的。

你应该知道的第一件事是, MBTA 的 GTFS 数据在网上公开。 GTFS 数据是一种纯文本格式(。txt)数据,Google 创建这些数据是为了标准化公共交通机构与开发者共享/报告路线的方式。特别是,我使用了“stops.txt”文件,该文件报告了关于 MBTA 站的所有信息。这些数据给了我创建网络节点所需的信息,也就是 T 型站点。

Here is the class Station that I defined to represent the MBTA stations, and the function create_stations that creates Station objects from the MBTA’s GTFS data.

在图论中,图由节点和边组成。边连接节点;它们还可以具有表示其相对重要性的权重。对于 T 形网络,边代表车站之间的连接,即火车轨道所在的位置。这些边的权重表示站点之间的旅行时间。

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

This map by Stonebrown Design was incredibly helpful in reporting travel times.

在时间比例的 T 地图的帮助下,我写了一个文本文件,指定了车站之间的每条边和旅行时间。文件中 116 行的每一行都采用以下形式:

stop1,stop2,time,color

你可以在这里看到整个文件。

使用 Python 上的 Networkx 包,我制作了一个表示地铁网络的 Graph 对象。我还编写了一个函数,使用站点的地理坐标绘制网络,并保持边的颜色与线的颜色一致。

This module makes a Networkx Graph object to represent the T, and it also plots the resulting network.

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

Here’s what the network looks like! Travel times are not visually represented, but you can see how physically far apart the stations are, which is correlated to travel time.

但是我不只是对电视台的网络感兴趣;我想知道实际上有多少人乘坐 T 型车,哪些路线最受欢迎。我联系了 MBTA,得到了一些 2017 年秋季的需求数据!利用他们给我的数据,我实现了一个类似的程序来建立另一个网络。在“需求”网络中,边权重代表工作日一对车站之间的平均乘客数量。你可以在这里看到我为那个写的代码

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

This is a visualization of the demand network, with green edges being the most traveled routes.

在对网络进行更改之前,让我们看看我们已经能够辨别出什么。

我从对节点中心性的一些初步分析开始。在地图上,科普利阿灵顿具有最高的接近中心度。实际上,这意味着这两个站是网络上所有其他站“最接近的”(在行驶时间上)。同样, Copley 具有最高的中间中心性,这意味着网络上最多的最短路径经过 Copley(注意,这没有用行程时间加权)。 State Street 具有最高的特征向量和 Katz 中心性,这意味着它是最有影响力的(同样,不根据出行时间或需求进行加权)。度中心性在地图上的唯一意义是指出发生换乘的车站。因此,使用需求图来计算度中心性更相关。公园街具有最高的中心度,意味着它具有最多的交通/需求。下面是地图图形的放大视图,中心节点已标记。

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

Not surprisingly, the most central nodes are all located in the center of Boston, a.k.a. downtown.

This is an interactive map of the same stations, to give you a little more context if you’re unfamiliar with downtown Boston.

**我还计算了乘客在地铁上的平均出行时间。**为此,我做了一些假设。首先,我假设乘客会通过最短的路径(以分钟为单位)从出发地到达目的地。我还假设线路之间的每一次转换都需要五分钟。这是一个重要的规范,因为否则,我的算法会认为换乘是“免费的”——而实际上乘客喜欢尽可能避免换乘。考虑到传输,我制作了另一个版本的 edges 文件;我拆分了每个有换乘的车站(例如,公园街→公园街红和公园街绿),而是通过 5 分钟的边连接两个车站。下面,看看那些转移边在文本文件中是什么样子的。

place-pktrm_red,place-pktrm_green,5,black
place-gover_blue,place-gover_green,5,black
place-state_orange,place-state_blue,5,black
place-haecl_green,place-haecl_orange,5,black
place-north_green,place-north_orange,5,black
place-dwnxg_red,place-dwnxg_orange,5,black
place-kencl_B,place-kencl_C,5,black
place-kencl_C,place-kencl_D,5,black
place-kencl_D,place-kencl_B,5,black
place-coecl_BCD,place-coecl_E,1,black
place-jfk_A,place-jfk_B,5,black

我的算法是这样计算平均乘客行程时间的:

  • 迭代需求网络上的每条边(例如,站 A 到站 B,150 名乘客/天)
  • 计算这些站点之间的最短路径/行驶时间(例如,站点 A 到站点 B 的最短路径需要 13 分钟)
  • 乘客数量乘以行程长度(例如,从 a 站到 b 站每天贡献 1950“乘客分钟”)
  • 合计每个连接的乘客分钟数,然后除以乘客总数

Here’s how I did it!

使用这个算法,我发现 T 上的平均行程时间(工作日)是 14.7 分钟。

那么,如果 MBTA 最终建造了红线-蓝线连接器会怎么样呢?

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

Here’s what the network would look like with the Red and Blue Lines connected at Charles/MGH! (Currently, the Blue Line ends at Bowdoin.)

关于从鲍登延伸蓝线——它的终点——到查理斯/MGH 已经有谈了T5 年了。红色和蓝色线路是该网络中仅有的两条没有直接连接的主线(抱歉,是银色线路)——目前,你必须乘坐橙色或绿色线路才能在两条线路之间穿行,而无需离开地铁。由于两条线路在地理位置上非常接近(例如,步行 5 分钟),为了避免再次点击你的查理卡并支付另一笔 2.25 美元,乘坐橙色或绿色线路的一站可能会感觉非常愚蠢。

红线-蓝线连接的好处是什么?我的模型预测红线-蓝线连接可能不是很有用。在没有连接的情况下,平均乘客行程时间为 14.70 分钟;有了这条线路,平均乘客出行时间变成了 14.66 分钟。平均而言,这种连接对乘客的影响可以忽略不计(特别是与施工期间的不便相比)。然而,这种连接不会对乘客产生任何影响,除非他们真的在红线和蓝线之间旅行。所以,我也研究了这种差异。我制作了另一个版本的 average_shortest_path ,它只查看两组不同车站之间的乘客——在这里是红线车站和蓝线车站。

如果没有连接,乘客在两条线路之间的平均旅行时间为 16.61 分钟。通过连接,这一时间缩短至 15.77 分钟,因此这些乘客每天可以节省近一分钟。这是一个更显著的区别。此外,该模型假设当添加新连接时,需求不会改变;然而,如果更多的乘客开始乘坐红蓝线之间的 T 线,因为它变得更加方便,这将进一步减少网络上的平均旅行时间。

一条新的快线能给 T 的乘客带来多少好处?

目前,T 没有任何快线。我想知道添加什么样的快速连接是最好的,以及它会带来多大的不同。我应该注意到,我用来确定这一点的指标是相当任意的,但是随着更多的信息和更多的时间,我的模型可以产生更准确的结果。

我看了两个快线场景。在第一种情况下,一列快速列车将在已经存在的轨道上运行,但比正常情况下快 40%(因为它不会在中间停车)。在第二种情况下,一辆特快列车将在两个车站之间的全新轨道上直线行驶,但与其他列车的平均速度相同。

为了确定两种情况下的最佳快速线路,我编写了一个函数(build_best_xline ),测试了给定规范下的每一个可能的连接,并返回平均乘客行程时间减少最多的边。

在这两种情况下,我的算法确定从昆西到波士顿市中心的快速线将是对乘客最有用的快速连接。

在没有铺设新轨道的情况#1 中,公园街到昆西亚当斯将是最好的新连接。在情况#2 中,新线在两个车站之间的直线轨道上运行,最佳新线将是从市中心交叉口到昆西中心

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

Shown on the maps are the two express lines that my algorithm recommends.

**当然,我目前展示的所有发现都是基于一些假设,有很大的误差空间。**车站之间的行程时间仅仅是粗略的预测。此外,新快线的规格相当随意。此外,换乘线路时假定的 5 分钟行程时间是任意的,尽管它在为换乘线路分配非零成本方面部分地达到了其目的。但是,由于寻找车站之间的最短路径是我计算的一个重要部分,用更准确和具体的传输时间重做这个项目会很好。我也只使用了在两个 T 站之间旅行的乘客的需求数据;这并没有考虑到 T 上的所有乘客,因为许多乘客从公共汽车站或通勤铁路开始和/或结束他们的旅行。

我认为 T 的这个模型传达了网络的一般行为,但是缺少了许多精确的层次。没有更精确的计算细节,很难说我的结果实际上有多准确。尽管如此,这里还是有一些很酷的外卖。

T 是一个网络,网络的一般性质可以用来理解在 T 上旅行或改进 T 的最有效方式。

我们可以使用介数中心性、度中心性和最短路径的概念来分析网络的潜在改进。理论上,这种分析可以预测对网络的某些修改会有多大帮助。但是要真正理解这些变化的影响,我们还需要预测需求会如何变化——这要困难得多。

在未来的工作中,我希望使用这种类型的分析来推荐增加 T 型车乘客数量的方法。例如,我可以查看优步的需求数据,而不是只查看 T 型车的当前需求。我怀疑,当公共交通不能充分连接两个点时,人们会更频繁地在这两个点之间乘坐优步。因此,研究如何更好地连接通常由汽车服务的成对 T 型站点可能是值得的。我还想扩展网络模型,使其更加全面;显然,公共汽车(和银线……)是一个重要的考虑因素。该模型的未来迭代也可以包括所有这些连接。

我的希望是,通过向您介绍我是如何做到这一点的,您可以自己尝试一下——或者甚至尝试模拟一个不同的交通网络!

如果您对我的流程有任何疑问,或者对您希望我测试的网络的不同修改有任何想法,请在下面留下评论或直接联系我!

感谢所有帮助我实现这个项目的人!感谢 MBTA 为我提供乘客数据来构建需求网络。感谢我的教授 Amir Ajorlou 和我的助教 Paolo Bertolotti 为我的项目提供指导和反馈。

我可以成为你的英雄,宝贝

原文:https://towardsdatascience.com/i-can-be-your-heroku-baby-a5c1fa2edfd9?source=collection_archive---------11-----------------------

在 Heroku 部署 Python 应用程序!

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

你喜欢数据科学吗?

<上下摇头>

你喜欢数据科学 DIY 部署吗?

<左右摇头>

我也没有。

早期数据科学学习或个人工作中最令人沮丧的部分之一是通过免费的云应用程序部署应用程序。你的代码是最棒的,在本地很管用。我相信你。那么,为什么每次你试图把它推到云端时,它都会爆炸呢?

当然,我具体说的是 Heroku。世界上有十亿本指南,然而我认识的每个人在我们每次尝试部署 Python 应用时都会遇到问题。我们的 Flask 应用程序在本地 Python 服务器上运行良好,但是看似简单的 Heroku 设置会在“创建”或“打开”期间崩溃,让我们对着墙壁大喊大叫……无生命的物体。

不管怎样,重点是赫罗库的性情非常多变。如果一个步骤做得不正确,部署很可能会失败,因此应用程序会崩溃。事实上,在早期,我的努力会变得如此之快,我会删除 Heroku 上的应用程序,然后从头开始。

男孩女孩们,让我的猴子成为你们的马戏团。或者别的什么。下面是 Python apps 的指南来指导你我失败的地方。

  1. 准备您的申请
  2. 创建 Heroku app
  3. 通过 Git 推送到 Heroku

0。但是首先…示例代码&示例应用程序!

目标:懒惰

注意:可以随意叉这个回购,自己试试。这是一个关于肚脐眼的荒谬数据集,但是它的简单性和复杂性使它成为本教程的主要候选对象:链接到回购

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

1。准备您的申请

目标:无聊的 Python 基础

像大多数项目一样,最好从一个全新的环境开始,所以继续创建、复制或安装一个环境。我这里用的是康达。

$ conda create — name env_name

或者克隆您现有的工作环境

$ source activate env_name

您可以随时通过以下方式查看您的环境列表:

$ conda env list

更多关于管理 Conda 环境的信息请点击:

注意:如果您使用 PyHeroku 中的示例代码,跳过下一步,在 requirements.txt 文件上构建环境。

$ conda install —- yes —- file requirements.txt

安装所有必要的库

有时创建一个全新的 python 环境并不包含根环境的基本库标准。为什么?不知道。没关系。我只是注意到这一点。因此,请确保您已经在环境中安装了运行应用程序所需的一切。

通过在活动环境中调用以下脚本来检查包

$ conda list

如果您缺少必需品(例如熊猫)或任何其他东西(例如 Flask、Flask-SQLAlchemy),请立即安装 pip 或 conda。在这一切都很舒适之后,我们还需要两个软件包,如果你是一个 Heroku noob,它们可能不会被安装。Herokoob。

安装 Gunicorn

这个库是一个高性能的 web 服务器,可以在生产环境中运行他们的 Flask 应用程序。我不会对“如何”进行更多的细节描述,但这就是应用程序工作的原因。在您的环境中:

$ pip install gunicorn

安装 psycopg2
如果你的应用程序使用本地数据库,它很可能使用本地数据库

$ pip install psycopg2

调试 app

不要忘记显而易见的事实。确保你的项目在本地运行。由于我使用 Flask 作为示例,只需“Flask run”您的 app.py。如果有问题,请确保 Flask 应用程序已正确初始化、路由和部署。例子包括

# the top of your flask appapp = Flask(__name__)# a route example[@app](http://twitter.com/app).route(‘/’)
 def home():
 return “Hello, Jeffrey Box. U R Kool with a K.”# the bottom of your flask appif __name__ == ‘__main__’:
 app.run(debug=True)

创建必要的项目文件

现在,我们需要在与 app.py 相同的目录下生成两个文件,它们是 Procfile 和 requirements.txt 文件。Heroku 需要这两者来安装所有的应用程序依赖项,然后利用 Gunicorn 在云中启动我们的应用程序。首先创建 Procfile。

$ touch Procfile

使用终端、代码编辑器、文本编辑器打开 Procfile,只需添加以下文本

web gunicorn app:app

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

如果您的应用程序碰巧在不同的子目录中,部署将会失败。您可以通过将脚本修改为“gunicorn 子目录. app:app”或类似的内容来回避这个问题,但我不建议这样做。只要把它们都放在根目录下就行了。

最后,我们通过以下方式创建 requirements.txt 文件

$ pip freeze > requirements.txt

注意:这些文件已经存在于 PyHeroku repo 中

2。创建 Heroku 应用程序

目标:唤醒 Heroku Heroku

嗯……如果你还没有 Heroku 账号的话,创建一个。之后,让我们创建第一个应用程序

创建新应用

拥有帐户后,点击“新建”>“创建新应用”。您将始终为您部署的每个应用程序创建一个新的“应用程序”。在下一个屏幕中,创建您的“应用程序名称”。

重要!!!

这是很多人犯错的地方。该名称对于 Heroku 必须是唯一的,但是该名称还必须与您的本地项目目录(包含 app.py、procfile、需求文件的目录)的名称相匹配。在下面的截图中,heroku app 名称为‘pyheroku-tutorial’;目录名为“pyheroku-tutorial”。明白了吗?

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

但是你真的明白吗?因为如果由于 Heroku 应用程序名称不可用而导致您最终需要修改您的目录名称,这可能会造成 Github 或任何其他代码依赖的问题。现在你明白了,一些非常简单的事情会浪费你几个小时的时间。

一旦完成,点击“创建应用程序”。

为您的数据库配置 Heroku 应用

我们将配置 Heroku 在其末端使用 Postgres。导航到“资源”选项卡。在“加载项”搜索栏中,键入“Heroku Postgres”。它会弹出来。补充一下,但是一定要用免费版!随意 lol 超硬的定价结构。

接下来,单击“设置”选项卡,然后导航到“显示配置变量”按钮。

到数据库的连接字符串现在应该是可用的:
Heroku 会自动将这个 URI 字符串分配给在您的“app.py”文件中使用的“DATABASE_URL”环境变量。已经在 app.py 中的代码将能够使用该环境变量来连接到 heritary 数据库。如果您在 Python 代码中使用 SQLAlchemy,它在 app.py 中可能看起来像这样

app.config[“SQLALCHEMY_DATABASE_URI”] = “sqlite:///db/bellybutton.sqlite”
 db = SQLAlchemy(app)
 …

如果这看起来不熟悉,或者您没有专门初始化数据库,那么您可能不需要修改配置变量或这段代码。我们继续吧。

3。通过 Git 推进到 Heroku

目标:万岁!我们快到了。

有几种方法可以完成下一部分,但是让我们选择最简单的方法,使用 Heroku Git。导航到“Deploy”选项卡,您将看到有关管道的信息以及以下内容:

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

选择 Heroku Git 为您提供 CLI 说明;然而,我在下面概述了它们。

在您的 CLI 中,确保一切仍在顺利运行,并且您仍处于适当的环境中。然后逐行执行以下命令

$ git init
$ git add .
$ git commit -m “init repo”
$ heroku create
$ git push heroku master
$ heroku open

您的浏览器应该会打开正常运行的应用程序!!!

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

你做到了!犒劳一下自己,在法国南部进行一次长途散步。一边洗泡泡浴,一边听约翰·泰什的音乐。创建一个全新的 Heroku 应用程序,因为你可以。

但只是为了团结,这里是如何使用 Github,而不是每一个微小的变化和更新都更新和推送到 Heroku git。

加成:Github
我这条“@路线”运气一直不太好……懂了吧……?烧瓶…?😑总之,要这样做,在部署选项卡中,我们选择 Heroku Git

  1. 选择“连接到 Github ”,然后单击底部的按钮。
  2. 在“repo-name”字段中,输入您的 Github repo 的名称,然后单击“Search”。
  3. 点击“连接”,将 Heroku 应用程序与 Github repo 链接起来。
  4. 点击“启用自动部署”,这将允许 Heroku 服务器在您对 Github repo 进行更改时重启您的应用程序。
  5. 最后,点击“资源”标签,然后点击带有铅笔图标的“编辑”按钮。
  6. 向右滑动工人开关,然后点击“确认”。
  7. 交叉手指,向上帝祈祷

希望这有所帮助。这是我的第一篇 Medium 帖子,当我在广阔的数据科学世界中蹒跚前行时,我期待着分享更多的“智慧”。同时,我们都指望你了,Heroku

杰弗里盒子

“我讨厌数学!”—教育和人工智能在我们所做的事情中寻找意义

原文:https://towardsdatascience.com/i-hate-math-part-1-4e793f5a8f72?source=collection_archive---------9-----------------------

你讨厌的是数学的教授方式。

那一大堆方程式、抽象概念和我们不知道的问题的解决方案,我们很难享受那些我们感觉不属于其中的东西。

但是把我们周围世界的一些数学技巧联系起来怎么样?有可能重新发现数学吗?你愿意试一试吗?

这么多问题!让我们和一只可爱的小猫一起放松一下:

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

可爱的😍!

解数百个方程,解什么“ X 等于”……或者,嗯,学习其他数学概念,比如“导数”(【https://en.wikipedia.org/wiki/Derivative】)是有区别的。

同样,我们解决了几十个不同的问题,包括衍生品。我们练习,解答,再解答,过了一会儿,我们忘记了第一次练习的答案。

当然,有些人乐于解决这类问题,开发新的数学定理,或解决费马大定理(http://www . telegraph . co . uk/science/2016/03/20/why-its-so-impressive-that-fermats-last-theorum-has-solved/),这是一个致力于抽象数学的数学分支。姑且称之为纯数学

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

放大图像。
来源:http://dominicwalliman.com/

如果你在这一点上喜欢数学,找到了!如果你没有,那我邀请你继续读下去……我们就去应用数学领域

我的个人经历

当我在高中和大学以标准的方式学习数学时,我有点不情愿。练习指南以千克为单位称重,学生们成为解决数学问题的熟练忍者,却忘记了所有这些的目的(除了通过考试),也不知道所有这些的真正用途。

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

“我为什么要学这个?”这就是问题所在

在大学里,当我协助一个名为“人工智能和机器人”的研讨会时,一切都开始改变。(好酷的名字!)

一到那里,我就体验到了我以前写过的东西:当演讲者在解释人工神经网络时说:

“人工神经网络可以学习…”🙀哇!

他们的学习得益于一种叫做反向传播的算法。通过使用衍生品!!!

所以导数除了通过考试还有别的用处!让我们来说明这一点:

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

“我们害怕我们不了解的东西。”—很多人。

数学在实践中!

这种算法(反向传播)与现在深度学习(人工智能)中使用的 TensorFlow 框架下的“梯度下降”高度相关。

deep learning——谷歌推出的神经网络的花哨名字,(https://static . Google user content . com/media/research . Google . com/en//pubs/archive/45530 . pdf)。

你不需要知道如何求导。但是,了解其背后的原因可以帮助您:

a)训练你的逻辑技能(比如在困难水平下解数独)
b)开发新的算法。
c) 其他

如果你没有,放松下来,只是保持高水平,同时将过程作为黑盒使用——但是对什么是输入和输出有深刻的理解

免责声明:我不是衍生品的狂热爱好者;其实我今天连怎么推导都不记得了,只记得“指数函数”因为笑话:

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

来源: Reddit 笑话

反正我的个人经历和这里的不相关。此时最重要的是:

📌当我们学习任何新东西时(抽象的东西更是如此),通过使用诸如“它对什么有用”、“谁在使用它”、“它与我已经知道的任何东西相似吗”、“背后的直觉是什么”等问题进行研究来找到意义是很方便的

📌我发现学习数学时有用的另一个要点是通过编码学习

📌寻找例子——当然我们周围有很多。通过改变代码的参数来播放和销毁代码。使用试错的强大技术。

我们公正的朋友:试错法

我们试了一次,结果却犯了一个大错误。我们再次尝试,得到一个较小的误差,最后,我们最后一次尝试产生最小的误差!

这个误差这么小,也算我们学会了!

(这过于简单化了,但这就是深度学习的学习方式😉)

你不知道吗?现在你知道了。这是一个通过直觉学习的例子,通过使用已知的东西。

下面看一个真实的例子。深度学习就是这样学习的(用 R):

来源:https://keras . r studio . com/articles/training _ visualization . html

在深度学习术语中:

  • 这种损失可以看作是错误。
  • 准确度是…准确度。
  • 每个纪元就是时间。

在: 了解深度学习的介绍 https://medium . freecodecamp . org/want-to-know-how-deep-learning-works-heres-a-quick-guide-for-every one-1 adeca 88076

逆向工程:从人工智能到“现实生活”

当我们为考试而学习时,我们用一个我们知道有结果(蓝线)的练习指南练习几次(epochs),所以我们学习如何解决那些问题(使准确率更高)。

现在老师设置一个考试,我们不知道结果,她/他用已知答案(橙色线)进行评估。

最后的话

当我们学习时,通过联想来做是很方便的(就像我们在最后几段中做的那样)。

与其说我们是一个“方程的数据仓库”,不如说我们作为人类更适合将事物互联,在我们想要探索的知识中寻找目的,对呈现在我们面前的提出质疑

联系概念,使用你真实的“现实生活”知识,实践,并找到你所做的事情的意义。

这就是这篇文章的主旨。

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

哦…还在吗?看看这个👇

我不能保证它会很容易理解,但我邀请大家阅读我刚刚出版的开源书籍“数据科学活书”📗。

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

这是我目前从实用和直观的角度教授数据科学的最佳尝试。

这本书可以在http://livebook.datascienceheroes.com获得🚀

谢谢🙂

推特: @pabloc_ds 🐦|| 博客 ✍️.

我有数据。我需要洞察力。我从哪里开始?

原文:https://towardsdatascience.com/i-have-data-i-need-insights-where-do-i-start-7ddc935ab365?source=collection_archive---------1-----------------------

这个问题经常出现。

这通常是刚接触数据科学的数据科学家、分析师和管理人员会问的问题。

他们的老板面临着压力,要求他们展示花在收集、存储和组织数据的系统上的所有资金的投资回报率(更不用说花在数据科学家身上的钱了)。

有时他们是幸运的——他们可能被要求解决一个非常具体且经过充分研究的问题(例如,预测哪个客户可能会取消他们的移动合同)。在这种情况下,有许多方法来剥猫的皮,这是数据科学的天堂。

但通常他们只是被要求“挖掘数据,告诉我一些有趣的事情”。

从哪里开始?

这是一个困难的问题,它没有一个单一的、完美的答案。我确信有经验的从业者已经进化出许多方法来做到这一点。这里有一个我发现很有用的方法。

它基于两个概念:

  1. 每个企业都可以被认为是一个复杂的系统,有许多活动的部分。没有人真正 100%理解它。即使对于有经验的员工来说,他们对业务的理解和实际运作之间也有差距。由于业务不断变化,这种差距总是越来越大。
  2. 你所拥有的任何业务数据都描述了这个复杂系统的行为的某个方面。

鉴于此,你可以把“洞察力”想成是增加你对系统 实际上 如何工作的理解的任何东西。它弥合了你对系统工作方式的看法和它实际工作方式之间的差距。

或者,借用安迪·格罗夫的高产出管理的类比,复杂系统是黑盒,洞察力就像是黑盒侧面的一扇窗户,可以“照亮”里面发生的事情。

所以对洞察力的探索可以被认为是通过分析数据来理解复杂事物是如何运作的努力。

但这是科学家做的事情!这个世界复杂得令人难以置信,他们有一个屡试不爽的剧本来逐渐增加我们对它的了解——科学方法。

非正式地:

利用他们目前对系统如何工作的理解(“理论”),他们做出某些预测。

然后他们检查数据(有时建立精心设计的实验来产生数据),看看它是否与他们的预测相符。

如果没有,他们会深入了解发生了什么,并更新他们的理解(“修改理论”)。

他们做出新的预测。重复循环。

数据科学家和分析师也可以做同样的事情。

在探索数据之前,写下一个简短的列表,列出您期望在数据中看到的内容:关键变量的分布、重要变量对之间的关系等等。这样的列表本质上是基于你当前对业务的理解的预测。

现在分析数据。制作情节,做总结,无论需要什么,看看是否符合你的预期。

有什么不符合的吗?任何让你觉得“很奇怪”或“没有任何意义”的事情。?

放大并尝试理解在您的业务中是什么使这种奇怪的事情出现在这样的数据中。这是关键的一步。

您可能刚刚发现了对业务的洞察力,并增加了您的理解*。

这里有一个真实的例子。几年前,我们在查看一家大型 B2C 零售商的交易数据。数据集中的一个字段是“交易金额”。

我们期待看到什么?嗯,我们预计大部分金额会在平均值左右,但可能会有一些较小的金额和一些较大的金额。所以磁场的直方图可能看起来像这样:

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

但是当我们检查数据时,我们看到的是:

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

我们调查了“嗯”。

原来这些交易不是由典型的购物者——为孩子购物的年轻妈妈们进行的。它们是由每年从国外到美国旅行一次的人制作的,他们走进一家商店,买很多东西,带回到他们的国家,在他们自己的商店里出售。他们是经销商,与我们的零售商没有特殊关系。

这家零售商当时在北美以外没有实体业务,也没有从他们的电子商务网站向这些地方发货。但是国外有足够的需求,当地企业家涌现来填补这个空白。

这一小小的“发现”引发了一系列有趣的问题:这些经销商购买的是什么类型的产品,什么样的促销活动最适合他们,甚至这些数据如何用于制定全球扩张计划。

全部来自一个简单的直方图。

精彩的艾萨克·阿西莫夫完美地抓住了这种精神。

在科学界听到的最激动人心的短语,也就是预示着新发现的短语,不是“尤里卡!”但是“这很有趣……”

艾萨克·阿西莫夫

请注意,从数据追溯到业务中的“根本原因”需要时间、精力和耐心。如果你在商界有一个很好的关系网,可以回答你的问题,你的工作效率就会更高。此外,对你来说奇怪的事情对他们来说可能是显而易见的(因为他们对业务的理解可能比你更好),你可以节省时间。

总的来说,你越了解业务的细微差别,你的预测就越有针对性,最终你会发现更好的洞察力。所以,尽你所能去了解业务的细节。寻找了解业务的同事,向他们学习,如果可能的话,让他们成为你的合作伙伴。

数据科学知识显然是一件好事,但是您的业务知识将对您的工作质量产生更大的影响。

除了数据科学工作之外,我发现这种“预测并检查”的心态在查看任何分析时也很有用。

在“翻页”之前,暂停几秒钟,猜猜你会看到什么样的东西。你可能会发现这增加了对比度,并且你能够更好地在数字的海洋中发现有趣的事情。

  • 或者你可能会发现你的数据收集或计算方式有问题

如果你对这篇文章感兴趣,你可能会喜欢阅读:

[## 首先创建一个常识基线

当你着手解决一个数据科学问题时,很容易一头扎进去,开始构建模型。

towardsdatascience.com](/first-create-a-common-sense-baseline-e66dbf8a8a47) [## 如何在日常分析工作中使用因果推理(第 1 部分,共 2 部分)

在商业领域工作的分析师和数据科学家充斥着大量的观察数据。这些数据是…

towardsdatascience.com](/how-to-use-causal-inference-in-day-to-day-analytical-work-part-1-of-2-b5efbdbf8ab0) [## 如何在日常分析工作中使用因果推理——第 2 部分,共 2 部分

在第 1 部分中,我们研究了如何使用因果推理得出正确的结论——或者至少不会跳到错误的结论…

towardsdatascience.com](/how-to-use-causal-inference-in-day-to-day-analytical-work-part-2-of-2-1824e7024cd2)

我只是没有时间做出更好的决定…

原文:https://towardsdatascience.com/i-just-dont-have-time-to-take-better-decisions-2dc82cb26f16?source=collection_archive---------6-----------------------

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

The Right Scoop

前水门事件记录者鲍勃·伍德沃德上周末充满激情地讲述了在为自己做决定和影响周围人时,花时间弄清事实的重要性。[1]听众中那些潜力巨大的经理们苦笑了一下,因为他们非常清楚现代管理的压力已经使时间成为最稀缺的商品。他们每天有太多的决定要做——根本没有时间去思考最好的真相。

在这种情况下,我们为什么要花时间去改善我们的决策呢?毕竟,管理决策是一个耗时的过程。我们工作中固有的模糊性、复杂性和风险可能会促使许多经理尽可能少地做出决策。许多人认为,近五十年的业务流程改进已经在很大程度上消除了解决简单问题的需要——我们可以遵循程序,阅读脚本,如果情况变得更糟,只需在我们前进的过程中编造事实。剩下的问题:在不断变化的经济环境中优化职业选择,促进工作场所的参与度和幸福感,实际上帮助客户解决他们的问题,这些问题可能太复杂,无法花任何时间来解决。他们认为,除了唾手可得的水果,你不应该浪费时间去追求任何东西。

尽管这种推理看起来很实际,但在得到进一步通知之前,经理们是靠解决问题赚钱的。问题越难,潜在的回报就越大。有些依靠直觉,有些运用分析。在概率论中,解决企业实际问题的机会成本通常在开发或探索场景中建模。是相信我们自己的经验更有利可图,即使不能解决问题,还是花时间去探索提供更令人满意结果的新替代方案?在决策科学中,Gitten 指数、置信上限,甚至杰夫·贝索斯的内疚最小化框架都为探索新的推理路线的价值提供了压倒性的证据。[2]

*管理就是在时间投资和成功投资之间找到恰当的平衡。*改善管理决策包括学会识别我们试图解决的问题的本质以及我们所掌握的数据的质量。机器学习意味着对人类经验进行编码,以检测给定手边问题的最佳、更好或难忘的决策。管理团队和社区需要将数据转化为有影响力的决策——包括我们自己的以及我们的客户、团队和利益相关者的决策。所有这三个学科都有一个共同的目标,那就是帮助管理层明智地使用他们的时间。

商业分析是关于校准思维以做出更好的决策。就像一个网球运动员试图优化他的反手击球一样,时间是一项投资,可以用得其所,也可以用得其所。利用我们对自己的了解和任何一个游戏的背景只会让我们到此为止。球场外的时间也需要用来分析手头挑战的性质,以及探索比赛的新选择和新心态。如果天才的直觉有时能够赢得胜利,那么分析为我们所有人提供了游戏发展的空间。谚语“熟能生巧”依赖于花时间开发最容易获得的真理版本。

商业分析实践是商业分析研究所的核心和灵魂。在巴约纳的暑期学校,以及在欧洲的大师班,我们让分析为您和您的组织服务。该研究所专注于管理人员数据科学的五个应用:在数字时代工作、数据驱动的决策、机器学习、社区管理和视觉通信。数据驱动的决策会对你未来的工作和职业生涯产生影响。


[1]P .卡尔法斯,j .(2017 年)。阅读鲍勃·伍德沃德和卡尔·伯恩斯坦在白宫记者晚宴上的建议,时代杂志,2017 年 4 月 30 日,http://Time . com/4760743/White-House-conductors-Dinner-Woodward-Bernstein-speech-2017/

[2]克里斯蒂安和格里菲思(2016 年)。《赖以生存的算法:人类决策的计算机科学》,亨利·霍尔特公司,纽约

我,机器人和人力资源总监

原文:https://towardsdatascience.com/i-robot-and-hr-director-6b1604921870?source=collection_archive---------18-----------------------

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

人工智能被专注于软技能的部门采用和使用只是时间问题。传统上,人力资源管理是心理学家和其他更具人文精神的专家的领域。计算机能代替多年的经验和人类互动来评估最佳候选人吗?

事实上,人工智能的作用是与人力资源经理和招聘人员并肩工作,向他们伸出援助之手,并承担一些底层工作。采用这一系统有望提高准确性、降低成本并最终加快流程,而现在从开始到结束可能需要几个月的时间和数千美元的成本。

工作流程管理

像在其他领域一样,引入自动化工具对各种过程都有积极的影响。第一个变化是速度和节奏的变化。其他改进包括流程标准化和消除偏见。

候选人筛选

目前,候选人筛选占据了大部分时间。主要的问题是许多申请人不符合他们申请的职位的条件。Glassdoor 声称大多数候选人在简历中撒谎,或者至少美化他们的简历。另一项研究详细说明了这种详述包括夸大他们的技能、以前的职责、职称、学位、公司和奖励。当然,更严重的隐瞒与他们被解雇的原因和犯罪记录有关。

人工智能通过其检测模式的能力,将成为根据一些预先定义的标准筛选简历的完美工具。在初步筛选排除了第一批不合适的候选人后,进一步的调查可能会发现一些危险信号,比如与以前的经验不匹配的技能、虚假的推荐信等等。

改善和规范职位匹配

LinkedIn 等平台以及专有的人力资源管理系统包含大量信息,可用于训练算法,以识别候选人的技能组合、职位甚至成长路径之间的最佳匹配。

更好的工作匹配有大量的长期优势,包括更快乐、更有效率的员工,他们不太可能换工作。来自 InData Labs 的人工智能开发人员声称,随着系统的学习和发展,它将能够通过快速浏览上传的简历来找到合适的候选人,甚至通过搜索公开信息和识别最佳人选来取代猎头。

情感分析

如今有很多关于政治正确、行为公正和不偏不倚以及消除任何形式的工作场所歧视的言论。然而,旧习难改,有时一个良好的意图可能会适得其反。人工智能可以帮助识别潜在的性别、种族或职业偏见,并建议更好的词语,以非对抗性的方式表达相同的想法,适合全球化的世界。

这一切都从招聘启事开始,招聘启事需要清晰、简洁,用公司自己的声音写出来。阅读它应该让潜在的候选人感觉到他们的个性和公司的个性是否匹配。情感分析可以指示公告的文本是更有趣、公司还是学术。

商业模式

尽管人工智能可以帮助削减一些关键的招聘成本,但它仍然需要定义其工作的商业模式。招聘是一种行为,只有当一个完美的候选人或一份优秀的工作被匹配时,才能为客户创造价值。因此,按成功付费是合理的。

这使得提供此类服务的公司现金流波动,可能很快导致破产,或者至少让它们陷入生存模式,而不是提供增长机会。

为了成功地提供基于人工智能的招聘服务,有必要要么确定对员工需求高且相对容易找到技能的活动部门,要么确定除准时雇佣之外提供价值的方法,以证明经常性费用的合理性。

例如,这样的公司可以创建一个人力资源聊天机器人,取代该部门执行的一些乏味的工作,如回答员工的日常询问,就像银行机器人为客户做的一样。

伦理问题

我们之前提到过人工智能是一种消除任何偏见的工具,但这只是在用于训练系统的数据已经针对这些错误进行了检查的情况下。毕竟,人工智能的行为很像一个孩子,无论教它什么,它都会繁殖和延续。

这方面的一个主要例子是微软的 Tay bot,由于用户的输入,它在几个小时内就喷出了恐同和纳粹言论。同样,犯罪预防机制正在根据种族和教育做出假设。这些模式虽然有统计学上的原因支持,但对那些有前途的候选人来说可能是有害的,因为他们是各自阵营中的局外人。

当人工智能成为一种工具时,个人数据安全和隐私也是一个重要的问题。由于它只能通过大量数据来发挥作用,因此可以将 AI 视为对个人隐私的威胁。尽管 GDPR 的法规努力给这种混乱带来一些秩序,并防止未来剑桥分析公司的丑闻,但仍不清楚现有的立法框架是否足够。

今后

即使人工智能不会很快让人力资源专家失业,它也会带来一些新的工作和招聘方式。从好的方面来看,人工筛选不合适的候选人可能会节省大量的时间和精力。当然,使用这样的系统需要一定的学习过程,这甚至会降低常规操作的速度。

另一方面,人力资源人员可能会发现他们被从一个乏味的任务重新分配到另一个任务。由于人工智能需要良好的数据来学习,他们可能会陷入标记数据是否合适或排列候选人的枯燥工作中,只是为了给系统提供一组良好的信息。这被称为监督学习,对于人力资源来说,这可能是最好的方法,因为无监督系统会自己做出决定,这可能不一定是成为好同事和好员工的最佳方式。

我从 BuzzFeed 上搜集了 NYPD 警察纪律案件的数据库

原文:https://towardsdatascience.com/i-scraped-buzzfeeds-database-of-nypd-police-disciplinary-cases-74a30bb5fde8?source=collection_archive---------9-----------------------

BuzzFeed 的数据很棒,但我们能以一种更有用的格式收集它吗?

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

Photo by Dane Tewari on Unsplash

TL;博士: BuzzFeed 今天发布了一组有趣的数据——大约 1800 名被“指控行为不当”的纽约警察局(NYPD)雇员的纪律案件档案我写了一个 scraper 来下载 PDF 和纯文本格式的数据进行大规模分析。

不幸的是,案例文件的存储方式不便于大规模分析。每个案例文件都以单独的 PDF 格式存储,但是没有明确的方法下载所有的文件。原始文本存储在 JavaScript 界面中的选项卡后面。

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

我想对这些数据进行一些基于文本的分析,但是为了做到这一点,我需要每个案例文件的原始文本(最好是 pdf)。手动下载每一个都很耗时,所以我决定构建一个刮刀来收集数据。

下载 PDF 数据

首先,BuzzFeed 提供了一个有用的 CSV 文件,其中包含每个案例文件的 URL。

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

A few rows from the BuzzFeed CSV.

CSV 中的链接会将您带到存储在 DocumentCloud 上的案例文件。该接口主要是 JavaScript,这使得抓取更具挑战性,因为没有太多的 HTML。

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

Each case file has been converted to plain text via optical character recognition (OCR), though the conversion is fairly messy.

我的第一个目标是下载 PDF 格式的所有案例文件。PDF 文件存储在与 BuzzFeed CSV 中的 URL 结构非常相似的 URL 中。通过一点 regex,我能够将 DocumentCloud URLs 转换为 PDF 资产的 URL,并使用 Python 的 requests 库下载它们。

A few regular expressions format the URL correctly for downloading the PDF.

下载文本数据

下载转换后的纯文本更具挑战性。纯文本位于 DocumentCloud JavaScript 界面中,在一个名为 text 的选项卡后面。通过 HTML 抓取文本是不可行的,因为它不存在于页面的常规源代码中。对于 Selenium 这样的 web 驱动程序来说,这是一个自然的用例,它允许您像人类一样与 web 页面进行交互。

为了获取数据,我需要 Selenium 单击 Text 选项卡,以便下载纯文本。我需要一种可靠的方法来访问 Selenium 中的文本选项卡,所以我使用了 Chrome 的开发工具*(在 Chrome 中,右键单击感兴趣的元素,然后单击 Inspect)* 来获取文本选项卡的 XPath。 XPath 是一种查询语言,它使得在网页上查找特定元素变得更加容易。有时候自己编写 XPath 查询更好,因为这样会更灵活。在这种情况下,Chrome 的 XPath 足以让我每次都能看到文本标签。

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

Chrome Developer Tools makes XPath easy. Right click on the tag of interest and choose Copy >> Copy XPath.

使用 XPath 查询,我指示 Selenium 单击 Text 选项卡。通过检查 Chrome 开发工具中的文本,不难获得纯文本的 HTML 类的名称。我可以使用 Selenium 的 text 属性将原始文本下载到一个文件中。

最后,我编写了一个循环来为 CSV 中的每个 URL 下载 PDF 和原始文本文件。现在,我有了一个数据语料库,可以对其应用我自己的 OCR 算法或建立文本挖掘分析。

一般来说,没有一种“正确的”方法可以从网络上抓取数据。在这种情况下,我没有使用基于 HTML 的抓取(例如,使用像请求这样的库),但是逆向工程 URL 和 Selenium 抓取的结合给了我所需要的。

如果您想下载 BuzzFeed 数据集用于您自己的分析,请在这里克隆我的刮刀并让我知道它是如何为您工作的!

我支持向量机,你也应该支持。

原文:https://towardsdatascience.com/i-support-vector-machines-and-so-should-you-7af122b6748?source=collection_archive---------4-----------------------

大约一周前,我在大会上做了一个关于支持向量机的演讲。这是一个介绍性的演讲,旨在揭开支持向量机模型的神秘面纱,支持向量机模型非常强大,但其内部工作原理可能有点难以理解。如果你对这类事情感兴趣的话,一定要看看这个视频,但是我在这里也要讲同样的内容。你将会错过一些我本人的魅力和个人魅力,并因此变得不那么重要。

Man, I move my arms a lot.

好吧,支持向量机有什么用?它们是一种机器学习,允许计算机获取一组数据,并将其分为两组(或通过将任何一组与所有其他组进行比较而分为更多组)。我们可以使用它们来对基本上任何东西进行分类,从获取金融信息来决定某人是否可能拖欠贷款,到图像信息,以便计算机可以决定某物是狗还是猫。它们的一个好处是最大化两组之间的界限(或空间),以允许计算机以前没有看到的新观察被更好地分类。他们还可以利用一种叫做内核技巧的东西,我将很快解释这一点。

基本上,计算机使用大量的数学,youtube 上的聪明人可以向你解释,在已经标记的数据组之间画一条线,然后使用这条线来预测新的观察结果属于哪个类别或组。仔细想想,还是比较可观的。我们可以自然地看到下面的图表,并意识到在哪里最好地画一条线来区分蓝色和红色的 X,但实际上有很多不同的可能性,找到聪明的方法让计算机识别最好的是大企业。

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

One of these lines is better than the others

从数学上来说,计算机在数据之间画一条线,在两个方向上移动其他线,并旋转这些线,直到它在任何一边都碰到观测值。

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

The computer tries to increase the green area to its maximum

它的名字来源于这些最终支持模型的向量。这些向量也是计算机需要保留的唯一重要信息,因为所有其他点对模型或预测没有影响。

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

The aforementioned support vectors!

所有这些看起来很简单,对吗?确实是!虽然从技术上来说,我们只建立了一个最大间隔分类器。如果我们对有一些重叠或极端异常值的事物进行分类,这种方法将会失败。想象一下,你正试图区分猫和狗,而有人把一只吉娃娃扔了进来!或者,上帝保佑,一只西施犬。没有电脑能区分这些,对吗?不对。我们只是告诉我们忽略他们!要是人们这么容易编程就好了…

在下面的 GIF 图中,你可以首先看到一个混合群体,计算机无法用数学方法在他们之间画一条线。通过忽略两个点,它能够找到最佳支持向量,并绘制我们的线。在 GIF 的后半部分,一个极端的异常值(臭名昭著的西施犬)会将我们的线推得太靠近红色类,导致我们的模型对未来的预测分类错误。教导计算机一些观察结果根本不符合我们通常的预期,这在建模中非常重要,并防止过度拟合我们给它的任何训练数据。

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

Overlapping classes and extreme outliers can be overcome with support vector machines with careful tuning

好的。现在所有这些可视化显示了数据的 2D 表示。如果我们对狗和猫进行分类,就好像我们只看到了关于它们的两条信息。也许 x 轴代表他们的体重,y 轴代表,你知道,天生邪恶什么的。所有这一切都在 3 维及以上的空间中进行。我们在画平面(或 4D 及更远地方的超平面),而不是线,但一切还是一样的。看,这是同样魔术的 3D 照片:

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

I’d show you 4D, but I was swore to secrecy

到目前为止还不错,是吗?现在我们进入真正的魔术:内核技巧。所以,我相信你可以想象许多不同的数据集或图表,你不能简单地通过它们画一条线/一个平面/任何东西。被蓝色海洋包围的一簇红色是不可能被划一条线穿过的。数学又来拯救我们了。在下面的例子中,我们有 1D 的数据,无论我们在哪里画线,我们都不能把我们的组分开。这个例子中的核心技巧是用第一维的平方增加另一维。如果我们只是在谈论猫和狗的重量,就好像我们决定也告诉计算机它们重量的平方。对我们来说,这毫无意义,但是看。

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

天哪,我说的对吗?现在从 2D 到 3D 观看同样的东西!

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

That’s some mathematical magic!

这只是一个超级简单的内核技巧。人们已经为支持向量机想出了一些奇特的方法,这使得他们能够处理一些非常复杂的事情。如果你在增加一个维度后仍然有困难,没有人说你不能增加更多的维度!疯狂。

如果你想了解更多关于内核和一些更有效的内核,请查看 Eric Kim 写的这篇文章。就这些东西而言,它相当容易接近。

如果你对支持向量机其他方面背后的数学感兴趣,我推荐 youtube 上的这两个视频:
乌迪·阿哈尼:https://www.youtube.com/watch?v=3liCbRZPrZA
特梅尔·比利西姆:https://www.youtube.com/watch?v=5zRmhOUjjGY

我希望这有助于揭开支持向量机的神秘面纱,并教会你在开始用它们建模时,在引擎盖下发生了什么的基础知识。干杯。

我训练了一个严格按照福克斯新闻频道广播饮食的 Word2Vec 模型

原文:https://towardsdatascience.com/i-trained-a-word2vec-model-on-a-strict-diet-of-fox-news-broadcasts-14da0b174b11?source=collection_archive---------7-----------------------

这是它对世界的看法。

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

Screenshot of my attempt at a visually representing word embeddings. See the original here.

背景

几个月前,我第一次开始尝试 Word2Vec,当时我在 NYU 大学为一门文本分析课程做项目。该项目是一种概念验证,包括收集和分析数百万西班牙语 YouTube 评论,试图检测和测量政治导向的言论。

虽然 Word2Vec 实际上不是我们在本课程中学习的模型之一,但它捕捉单词之间微妙关系的能力给我留下了深刻的印象。

分析用户生成的西班牙语文本的一个主要问题是拼写——尽管有很大程度上的音位拼写,我发现到处都有拼写和语法错误。

不幸的是,目前可用的停用词词典只包括单词的正式拼写,这实际上比某些术语的错误拼写更不常见。更糟糕的是,拼写错误如此之多,以至于无法通过调整词频或缩减采样来消除。

Word2Vec 来救援!通过选取一个常见的拼写错误,并在模型中查询 50 个最相似的单词,我能够构建一个全面的停用词字典来过滤它们。

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

Fifty common but not super-common variations on the word “haha”? Not funny!

那么,为什么是福克斯新闻频道?

上面的实验真正说明了 Word2Vec 揭开语言“个性”的真正力量。我想:如果我训练一个 Word2Vec 语言模型,它以一种非常微妙的方式只代表现实的一种视觉,会怎么样?我唯一能想到的英语候选人是福克斯新闻频道。

挑战

获取文本

虽然福克斯新闻频道实际上在其网站上制作书面文本,但我想要一个考虑到整个福克斯体验的语料库:嘉宾评论、即兴评论、主持人之间的戏谑等。

我家里没有有线电视,所以我建立了一个网络抓取器,提取了当时福克斯新闻频道网站上所有视频的音频——大约 1150 个剪辑,长度从 1 分钟到 20 分钟不等。虽然一些视频可以追溯到 2015 年,但绝大多数是在过去六个月发布的。

为了转换音频,我使用了谷歌的语音识别 API,因为它产生的结果比任何其他服务都好得多(加上他们给你 300 美元的免费积分)。我在这里解释我是如何做到这一点的

哦,标点符号…

语音识别模型的一个不幸之处是,它们返回的文本实际上没有任何标点符号。这在使用 Word2Vec 时特别烦人,因为您需要向它输入标记化的句子(需要标点)。

幸运的是,奥托卡·提尔克已经掩护了我。他训练了一个双向递归神经网络模型,可以恢复英语文本中的标点符号。最棒的是,这个了不起的人还创造了一个 API ,你可以很容易地从 Python 中查询。

唐纳德卡车在房子里!

没错。谷歌并非完美无瑕。有时它会误解某些单词和短语,尤其是当人们互相谈论的时候。例如,与迈克尔·弗林相关的最常见术语之一是“律师”,但“锦标赛”一词也出现在前 20 名中。

我最初的策略是尝试使用变音编码和模糊字符串匹配来发现这些错误。然而,事实证明这比我原先预计的要花更多的时间,所以我搁置了这个想法。

最终,我能够调整 Word2Vec 模型的参数,以最小化不正确术语的影响。

结果

该模型接受了约 50 万个术语的训练——对于 Word2Vec 来说,这不是一个庞大的语料库,但结果仍然非常有趣。我列出了大约 24 个与当前事件或政治问题相关的术语,找到了与它们最相关的词,并将它们添加到(蹩脚的)D3js 图中。

不幸的是,Medium 不允许我嵌入 JavaScript vizualiations,所以你必须在这里查看。

一如既往,我希望听到您的反馈或建议。此外,如果你对我是如何做上述任何事情感到好奇,不要犹豫,伸出手来!

我训练假新闻检测 AI 准确率> 95%,差点疯了

原文:https://towardsdatascience.com/i-trained-fake-news-detection-ai-with-95-accuracy-and-almost-went-crazy-d10589aa57c?source=collection_archive---------0-----------------------

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

Fake news is still a real problem

TL;dr——我们用机器学习和自然语言处理制作了一个准确率超过 95%的假新闻检测器,你可以在这里下载。在现实世界中,准确率可能会更低,尤其是随着时间的推移和文章写作方式的改变。

随着自然语言处理和机器学习的如此多的进步,我想也许,仅仅是也许,我可以制作一个模型,可以标记新闻内容为假,也许可以减轻假新闻泛滥的毁灭性后果。

可以说,制作自己的机器学习模型最困难的部分是收集训练数据。我花了很多天收集 2017/2018 赛季每个 NBA 球员的照片,以训练一个面部识别模型。我一点也不知道我会陷入一个痛苦的、长达数月的过程中,暴露出一些真正黑暗和令人不安的事情,这些事情仍然被作为新闻和真实信息传播。

定义假新闻

我的第一个障碍出乎意料。在对假新闻做了一些研究后,我很快发现误传可以分为许多不同的类别。有些文章是明显虚假的,有些文章提供了真实的事件,但随后做出了一些错误的解释,有些文章是伪科学的,有些文章实际上只是伪装成新闻的观点,有些文章是讽刺性的,还有一些文章主要是由推特和其他人的引用组成的。我在谷歌上搜索了一下,发现有些人试图将网站分成“讽刺”、“虚假”、“误导”等类别。

我认为这是最好的起点,所以我继续前进,开始访问这些领域,试图寻找一些例子。几乎立刻我就发现了一个问题。一些被标记为“虚假”或“误导”的网站有时会有真实的文章。所以我知道,如果不进行健全性检查,就无法清除它们。

然后,我开始问自己,我的模型是否应该考虑讽刺和观点作品,如果应该,它们应该被视为假的,真实的,还是被归入自己的类别?

情感分析

在盯着假新闻网站看了大约一周后,我开始怀疑自己是否已经把问题过于复杂化了。也许我只是需要在情感分析上使用一些现有的机器学习模型,看看是否有一种模式?我决定构建一个快速的小工具,使用 web scraper 来抓取文章标题、描述、作者和内容,并将结果发布到情感分析模型。我使用了 Textbox ,这很方便,因为它在我的机器上本地运行,并快速返回结果。

文本框返回一个情感分数,你可以将其解释为正面负面*。然后,我构建了一个蹩脚的小算法,为我提取的不同类型文本(标题、内容、作者等)的情感添加权重。)然后全部加在一起,看看能不能得出一个全局的分数。*

起初它工作得很好,但是在我尝试了大约第 7 或第 8 篇文章之后,它开始下降。长话短说,它与我想要建立的假新闻检测系统相去甚远。

失败。

自然语言处理

这是我的朋友大卫·赫南德兹推荐的,实际上是在文本本身上训练一个模型。为了做到这一点,我们需要很多很多不同类别的例子,我们希望模型能够预测。

由于我很难理解假新闻的模式,我们决定试着去搜索那些已知的假的、真实的、讽刺的领域。看看我们能否快速建立一个数据集。

在运行原油刮刀几天后,我们有了一个我们认为足够大的数据集来训练一个模型。

结果糟透了。深入研究训练数据,我们意识到,这些领域从来没有像我们希望的那样被划分成整齐的小类别。其中一些是假新闻混合真实新闻,另一些只是来自其他网站的博客帖子,还有一些只是 90%的文本都是特朗普推文的文章。所以我们意识到我们必须从训练数据开始。

这是事情变糟的时候。

那是一个周六,我开始了漫长的过程,手动阅读每一篇文章,然后决定它属于哪一类,然后笨拙地将文本复制并粘贴到一个越来越笨重的电子表格中。有一些黑暗的,令人厌恶的,种族主义的,真正堕落的东西,我读了,起初我试图忽略。但是在阅读了数百篇这样的文章后,他们开始影响我。随着我的视力模糊,我对颜色的理解变得一塌糊涂,我开始变得非常沮丧。文明是怎么沦落到如此地步的?为什么人们不能进行批判性思考?我们真的还有希望吗?这种情况持续了几天,因为我在努力为这个模型找到足够多的例子。

我发现自己在自己对假新闻的解读中随波逐流,当我看到我不同意的文章时会感到愤怒,并努力克制只选择我认为正确的文章的冲动。到底什么是对的或错的?

但是最后,我找到了我一直在寻找的神奇数量的例子,并且如释重负地把它们通过电子邮件发给了大卫。

第二天,当我急切地等待结果时,他又开始了训练。

我们达到了大约 70%的准确率。起初我认为这很棒,但是在对野外的文章做了一些抽查后,我意识到这对任何人都没有用。

失败。

Fakebox

回到绘图板。我做错了什么?大卫提出,也许简化问题是提高准确度的关键。所以我认真思考了我想解决的问题是什么。然后它击中了我;也许答案不是检测假新闻,而是检测真新闻。真正的新闻更容易归类。它实事求是,切中要害,几乎没有解释。有很多可靠的来源可以得到它。

所以我回到网上,重新开始收集训练数据。我决定把所有的东西分成两类:真实和不真实。Notreal 包括讽刺文章、观点文章、假新闻,以及其他所有不以纯粹事实的方式撰写的文章,这些文章也符合美联社的标准。

我花了几周时间做这件事,每天花几个小时从你能想象到的各种网站获取最新内容,从 《洋葱》【路透社】 。我把成千上万真实和非真实内容的例子放入一个巨大的电子表格中,每天我都会添加数百个。最终,我决定我有足够的例子再试一次。所以我把电子表格发给大卫,不耐烦地等待结果。

当我看到准确率达到 95%以上时,我高兴得差点跳起来。这意味着我们在文章的写作方式中发现了一种模式,可以发现真实新闻和你应该半信半疑的东西之间的差异。

成功(算是)!

停止假新闻

这个练习的全部目的是阻止错误信息的传播,所以我很高兴与你们分享这个模型。我们称之为 Fakebox ,它非常容易使用。

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

粘贴您不确定的文章内容,然后单击分析。

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

用一个好的 RESTful API 将其集成到任何环境中。它是一个 Docker 容器,所以你可以在任何你喜欢的地方部署和扩展它。随心所欲地快速制作无限量的内容,并自动标记可能需要关注的内容。

记住,它告诉你的是,如果一篇文章的写作方式与一篇真实的新闻文章相似,那么如果分数真的很低,这可能意味着这篇文章是假的,是一篇观点文章,是讽刺文章,或者不是一篇直截了当、只讲事实的新闻文章。

总之,我们训练了一个机器学习模型,它分析一篇文章的写作方式,并告诉你它是否类似于一篇用很少或没有偏见的词、强烈的形容词、观点或丰富多彩的语言写的文章。如果一篇文章太短,或者主要是由他人的引用(或推文)组成,这可能会很困难。这不是解决假新闻的最终办法。但是希望它能帮助你发现那些需要半信半疑的文章。

请欣赏!

我想学人工智能和机器学习。我能从哪里开始?

原文:https://towardsdatascience.com/i-want-to-learn-artificial-intelligence-and-machine-learning-where-can-i-start-7a392a3086ec?source=collection_archive---------0-----------------------

我是如何从苹果天才到创业失败再到优步司机再到机器学习工程师

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

The trick is to café hop until you find one which has great coffee and plenty of natural light. Then studying becomes easy. Photo by Madison Kanna. Thank you, xoxo.

我在苹果商店工作,我想改变一下。开始制造我所服务的技术。

我开始研究机器学习(ML)和人工智能(AI)。

事情太多了。太多了。

似乎每周谷歌或脸书都在发布一种新的人工智能,以使事情变得更快或改善我们的体验。

不要让我开始谈论自动驾驶汽车公司的数量。这是一件好事。我不喜欢开车,道路很危险。

即使发生了这一切,人工智能到底是什么仍然没有一个一致的定义。

一些人认为深度学习可以被认为是人工智能,其他人会说除非它通过图灵测试,否则它不是人工智能。

这种定义的缺乏在一开始确实阻碍了我的进步。学习有这么多不同定义的东西很难。

定义说够了。

我是怎么开始的?

我和我的朋友正在建立一个网络创业公司。失败了。由于缺乏意义,我们放弃了。但是一路走来,我开始听到越来越多关于人工智能和人工智能的事情。

“电脑帮你学东西?”我简直不敢相信。

偶然发现了 Udacity 的深度学习纳米学位。一个叫 Siraj Raval 的有趣角色出现在其中一个宣传片中。他的能量具有感染力。尽管没有达到基本要求(我以前从未写过一行 Python),我还是签了名。

在课程开始前 3 周,我给 Udacity 支持部门发了电子邮件,询问退款政策。我害怕自己无法完成这门课程。

我没有得到退款。我在指定的时间内完成了课程。这很难。有时候真的很难。我的前两个项目晚交了四天。但是参与世界上最重要的技术之一的兴奋驱使我前进。

完成深度学习纳米学位后,我保证被 Udacity 的人工智能纳米学位、自动驾驶汽车纳米学位或机器人纳米学位录取。所有伟大的选择。

我又迷路了。

经典。“我下一步去哪里?”

我需要一个课程表。我已经用深度学习纳米学位建立了一个基础,现在是时候弄清楚下一步是什么了。

我自创的人工智能硕士学位

我没有打算近期重返大学。反正我也没有 10 万美元去读一个真正的硕士学位。

所以我做了一开始做的事。向我的导师谷歌寻求帮助。

我在没有任何该领域知识的情况下就投入了深度学习。我没有爬到人工智能冰山的顶端,而是被一架直升机送到了顶端。

在研究了一堆课程之后,我在特雷罗列出了我最感兴趣的课程。

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

Trello is my personal assistant/course coordinator.

我知道在线课程的辍学率很高。我不想让自己成为这个号码的一部分。我有任务在身。

为了让自己负起责任,我开始在网上分享我的学习历程。我想我可以练习交流我学到的东西,并找到和我有相同兴趣的人。我的朋友们仍然认为我是一个外星人,当我进行一次人工智能的恶作剧时。

我公开了特雷罗董事会,并写了一篇关于我的努力的博客。

自从我第一次写这本书以来,课程略有变化,但它仍然是相关的。我会每周多次访问 Trello 板来跟踪我的进展。

找工作

我是澳大利亚人。所有的骚动似乎都发生在美国。

于是我做了最符合逻辑的事,买了一张单程票。我已经学习了一年,我想是时候开始把我的技能付诸实践了。

我的计划是去美国,然后被雇佣。

然后阿什莉在 LinkedIn 上给我发消息说,“嘿,我看了你的帖子,他们真的很酷,我想你应该见见迈克。”

我遇见了迈克。

我告诉他我在网上学习的故事,我是多么喜欢 healthtech 和我去美国的计划。

“你最好在这里呆一年左右,看看你能找到什么,我想你会喜欢见到卡梅伦。"

我遇到了卡梅隆。

我们进行了一次类似迈克和我所谈论的谈话。健康,科技,在线学习,美国。

“我们正在研究一些健康问题,你为什么不在星期四来?”

星期四来了。我很紧张。但是有人曾经告诉我紧张和兴奋是一样的。我变得很兴奋。

我花了一天时间会见了 Max Kelsen 团队以及他们正在解决的问题。

两个星期四后,我和首席执行官尼克、机器学习首席工程师阿森去喝咖啡。

"你愿意加入这个团队吗?"尼克问道。

“当然,”我说。

我的美国航班推迟了几个月,我买了一张返程票。

分享您的作品

在网上学习,我知道这是非传统的。我申请的所有职位都要求硕士学位,或者至少是某种技术学位。

这两样我都没有。但我确实拥有从大量在线课程中收集到的技能。

一路上,我在网上分享我的作品。我的 GitHub 包含了我做过的所有项目,我的 LinkedIn 已经被摊开,我已经练习过通过 YouTube 和 Medium 上的文章来交流我所学到的东西。

我从没给麦克斯·凯尔森交过简历。“我们看到了你的 LinkedIn 个人资料。”

我的工作就是我的简历。

不管你是在网上学习还是通过硕士学位学习,拥有一个你所从事的工作的作品集是在游戏中建立皮肤的一个很好的方法。

人工智能和人工智能技能很受欢迎,但这并不意味着你不必展示它们。没有货架,再好的产品也卖不出去。

无论是 GitHub、Kaggle、LinkedIn 还是博客,都要有一个人们可以找到你的地方。另外,拥有自己的网络空间也很有趣。

你如何开始?

你去哪里学习这些技能?什么课程最好?

没有最佳答案。每个人的路都会不一样。有些人通过书本学得更好,有些人通过视频学得更好。

比你如何开始更重要的是你为什么开始。

先说为什么。

为什么要学这些技能?

你想赚钱吗?

你想造东西吗?

你想有所作为吗?

没有正确的理由。所有这些都有其自身的合理性。

从为什么开始,因为有一个为什么比如何更重要。有一个“为什么”意味着当事情变得困难并且将会变得困难时,你就有了可以求助的对象。提醒你开始的原因。

知道为什么吗?很好。是时候来点硬技能了。

我只能推荐我试过的。

我已经完成了以下课程(按顺序):

  • 树屋 Python 简介
  • Data camp—Python 简介和 Python 数据科学专题讲座
  • Udacity —深度学习和人工智能纳米学位
  • coursera——吴恩达深度学习
  • fast.ai —第 1 部分,即将成为第 2 部分

他们都是世界级的。我是视觉学习者。看到事情被做,我学得更好。所有这些课程都是这样。

如果你是一个绝对的初学者,从一些 Python 入门课程开始,当你更有信心时,进入数据科学、机器学习和人工智能。DataCamp 非常适合初学 Python,但希望以数据科学和机器学习为重点的人。

多少数学?

我接受过的最高水平的数学教育是在高中。其余的我通过可汗学院学到了,因为我需要它。

关于进入机器学习和 AI 需要知道多少数学,有很多不同的观点。我会分享我的。

如果你想将机器学习和人工智能技术应用于一个问题,你不一定需要对数学有深入的理解才能获得好的结果。TensorFlow 和 PyTorch 等库允许有一点 Python 经验的人构建最先进的模型,而数学则在幕后处理。

如果你想通过博士项目或类似的方式深入机器学习和人工智能研究,拥有深入的数学知识是最重要的。

就我而言,我并不打算深究数学,将算法的性能提高 10%。我会把这个留给比我聪明的人。

相反,我非常乐意使用可用的库,并在我认为合适的时候操纵它们来帮助解决问题。

机器学习工程师实际上是做什么的?

一个机器工程师在实践中所做的可能不是你所想的。

尽管许多在线文章的封面照片,它并不总是涉及与有红眼的机器人一起工作。

这里有几个机器学习工程师每天都要问自己的问题。

  • 背景——如何使用 ML 来帮助了解您的问题?
  • 数据 —你还需要更多数据吗?它需要什么样的形式?当数据丢失时,您会怎么做?
  • 建模 —您应该使用哪种模型?它在数据上工作得太好了吗(过度拟合)?或者为什么不太好用(欠拟合)?
  • 生产——你如何将你的模型投入生产?它应该是一个在线模型还是应该定期更新?
  • 正在进行的——如果你的模型坏了会怎么样?你如何用更多的数据来改进它?有没有更好的做事方法?

我从 Rachel Thomas 的一篇很棒的文章中借用了这些,她是 fast.ai 的联合创始人之一,她在全文中进行了更深入的探讨。

另外,我制作了一个视频,记录了我们周一在 Max Kelsen 通常会做些什么。

没有设置路径

进入 ML 或 AI(或其他)没有对错之分。

这个领域的美妙之处在于我们可以接触到一些世界上最好的技术,我们所要做的就是学会如何使用它们。

你可以从学习 Python 代码(我最喜欢的)开始。

你可以从学习微积分和统计学开始。

你可以从学习决策哲学开始。

机器学习和人工智能让我着迷,因为它们在所有这些的交汇点相遇。

我了解得越多,就越意识到还有很多东西要学。这让我很兴奋。

有时当我的代码不能运行时,我会很沮丧。或者说我不懂一个概念。所以我暂时放弃。我放弃了,让自己远离问题,打个盹。或者去散步。当我回来的时候,我感觉我用不同的眼光看着它。兴奋感又回来了。我一直在学习。我告诉自己。我是一台学习机器。

这个领域发生了如此多的事情,以至于一开始就让人望而生畏。太多的选择导致没有选择。忽略这个。

从你最感兴趣的地方开始,并遵循它。如果它导致了一个死胡同,很好,你已经找到了你不感兴趣的东西。折回原路,走另一条岔路。

计算机很聪明,但是它们仍然不能自己学习。他们需要你的帮助。

我在找房子,所以我用 Python 做了一个 web scraper!—第二部分(EDA)

原文:https://towardsdatascience.com/i-was-looking-for-a-house-so-i-built-a-web-scraper-in-python-part-ii-eda-1effe7274c84?source=collection_archive---------6-----------------------

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

这篇文章是另一篇文章的后续,在那篇文章中,我构建了一个网络抓取器来寻找里斯本的待售房屋。这一次,我将重点介绍我们之前收集的数据集的转换和清理过程。然后,我将尝试对数据集执行一些探索性数据分析(EDA)。我的目标是给你一些可以做什么的例子,而不是提供一个超级复杂的分析。但是请随意评论和提出建议!我们将在本文中看到的一些内容:

  • 获取每栋房子的房间数量
  • 得到每平方米的价格
  • 去除异常值和“奇怪”的观察值
  • 使用 Seaborn 来可视化我们的数据

先来看看之前从刮萨珀网站得到了什么。

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

数据集中有一个日期,代表广告发布的日期。我已经知道有一些 2018 年之前的广告,我认为这些房子不再出售是安全的。为了有一个快速过滤的方法,我们可以添加年和月两列。

lisboa_clean = lisboayears = []
months = []for x in lisboa_clean['Date']:
    months.append(str(x.year) + '-' + str(x.month))
    years.append(str(x.year))

lisboa_clean['Year'] = years
lisboa_clean['Month'] = months

搞定了。我还将把“Size (m)”转换成数值,对于不包含数值的记录(如“-”),我将把它们转换成 NaN(用强制),然后我将删除它们,因为在本练习中它们的值将是 none。

lisboa_clean['Size (m²)'] = pd.to_numeric(lisboa_clean['Size (m²)'], errors='coerce')lisboa_clean.dropna(subset=['Size (m²)'], inplace=True)

虽然我也获得了“URL”和“Image”列,但是本文不需要它们,所以我们可以简单地删除它们。

lisboa.drop(['URL', 'Image'], axis=1, inplace=True)

如果你对房地产数据做过任何类型的分析,你可能会注意到我们仍然没有每个房产的房间数量…这些信息在搜索页面中是不可用的(至少是直接不可用的),所以我们需要有点创造性。

在每个标题中,都有一个类似“T2”的字符串,它告诉我们这个房子有两个房间。T3 是 3 个房间,以此类推。我的目标是得到数字,它可以有一个或两个数字。输入(可怕的)正则表达式。接下来的几行代码看起来并不漂亮,我几乎可以肯定一定有更简单或更有效的方法来完成它,但是经过一些测试后,这似乎可以很好地完成工作!

该代码遍历数据集中的每个标题,并将匹配下面正则表达式的字符串检索到一个新列表(房间),即“任何以‘T’开头且后面有 1 或 2 个数字的字符串”。我们最终拥有这些独特的价值:

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

似乎有些房子“没有”房间。我们应该可以放弃它们并继续,但是为了以防万一,这段代码告诉我们这样做我们损失了多少房子。

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

A total of 2010 houses were dismissed. Not a serious issue for us though!

在去掉“无”之后,我们可以继续得到数字。多一个带有用于循环的单元将会解决这个问题。这个循环将把字母 t 后面的字符转换成整数。

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

搞定了。在这之后,加上每平方米的价格应该是小菜一碟。然后我们可以检查描述告诉我们对数据集做了什么。

lisboa_clean['Price/m²'] = lisboa_clean['Price'] / lisboa_clean['Size (m²)']

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

with all this process, we are down to 19796 properties

该打扫了!

这可能是整个过程中最重要的部分。最终,这一阶段的工作质量将决定您的分析或模型的质量。事实上,没有确切的规则,这使得我们很难决定应该保留/丢弃多少数据,这就是一点常识派上用场的地方。一个很好的经验法则是去掉不到 3%的数据。如果您丢弃越来越多的数据,您将会限制您必须处理的信息量。

这里的目标是在预处理数据时,始终为您所做的选择提供某种推理。

对于这篇文章,我的选择是不太关心那 3%!我们马上可以看到我们的数据中有一些奇怪的值,更准确地说是一栋价值超过 8000 万欧元的房子,或者是一栋 93 平方公里的房子。这些极值(异常值)将对平均值等测量产生巨大影响。“证据”是,虽然中位价在 35 万左右,但均价在 58.2 万左右。

中位数对异常值不太敏感,这使得它在这种情况下是一个很好的工具。

让我们在清理之前使用 Seaborn 来检查我们的数据。不难发现我们有很多清洁工作要做!由于离群值的数量,联合图看起来不太好。请注意,价格和规模之间的皮尔逊相关性非常低,p 值也是如此(这是一个统计显著性指标,基本上,如果低于 0.05,则意味着相关系数显著)。

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

“not looking good” is an understatement…

经过一些测试后,我为数据集设计了以下过滤器:

  • 我还没打算买城堡,所以我会拆除任何超过 600 平方米的房子
  • 超过 5 个房间的房屋也是如此
  • 180 万欧元以上的价格也有点超出我的预算…

另一方面,我确实觉得很奇怪,可能会有百万富翁在这样一个普通的网站上买房。这似乎不是买卖豪宅的合适平台,所以我们实际上可以说,这些房产并不代表我们在这里试图分析的市场。

简而言之,这就是我对数据科学的描述。想出这些关于你的数据的故事,并检验你的理论(或假设)。

回到我们的数据,让我们去掉我上面提到的观察。通过 len 我们可以看到我们丢弃了多少张唱片。

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

lisboa_clean = lisboa_clean[lisboa_clean['Size (m²)'] < 600]lisboa_clean = lisboa_clean[lisboa_clean['Price'] < 1800000]lisboa_clean = lisboa_clean[lisboa_clean['Rooms'] < 6]

新创建的价格/大小的分布情况如何?我们这里也有一些清洁工作要做。每平方米的平均价格在 5k 左右(见之前的描述方法),所以我会移除这个值高于 10k 的房子。在相反的极端情况下,我也会删除低于每平方米 300 欧元的观察值。

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

lisboa_clean = lisboa_clean[lisboa_clean['Price/m²'] < 10000]lisboa_clean = lisboa_clean[lisboa_clean['Price/m²'] > 300]lisboa_clean.reset_index(inplace=True, drop=True)

再次检查接合处的时间到了。我们基本上是通过从数据中移除极值来平滑分布。例如,如果我们要建立一个预测房价的模型,这将允许更好的模型。

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

notice how the pearson correlation coefficient suddenly improved to 0.69, just by cleaning noise from the dataset

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

the price per square meter is also more balanced

本着多样性的精神,我将分享另一种图表,即 pairplot 。这一个真的很酷,但是如果你加入太多的变量会变得不可读。这里没有很多有价值的见解,但看起来确实很花哨!

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

我们还可以探索剩余的分类变量,如“身份”、“城市”和“房间”。

fig, ax =plt.subplots(3,1, figsize=(12,20))
sns.countplot(lisboa_clean['Rooms'], ax=ax[0])
sns.countplot(lisboa_clean['Status'], ax=ax[1])
sns.countplot(lisboa_clean['Municipality'], ax=ax[2])
ax[2].set_xticklabels(ax[2].get_xticklabels(), rotation=50, ha="right")
plt.show()

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

不出所料,里斯本地区的主要城市是里斯本、卡斯凯什和欧伊拉斯。对于不熟悉这个城市的人来说,这可能没什么意义,但这些基本上都是该区的黄金地段。

2 室的房子比 1 室的房子多一倍以上。我想大多数房子都有不止一个房间是有道理的,我以前从来没有想过这个问题!

让我们用这些变量的一些箱线图来总结一下。

plt.figure(figsize=(15,10))
ax = sns.boxplot(x='Rooms', y='Price', data = lisboa_clean)
ax.tick_params(labelsize=13)
plt.show()

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

同样,很明显的结论,因为我们预计随着房间数量的增加,房产的价值会上升。这些图表中有趣的一面可能是 1 室和 2 室的房子在相同的价格范围内竞争。事实上,我们有无限的方法可以进一步探索这些信息。

最终盒图,我保证!让我们来看看在一组特定的城市中每平方米价格的差异

areas = lisboa_clean.loc[lisboa_clean['Municipality'].isin(['Lisboa', 'Amadora', 'Cascais', 'Oeiras', 'Sintra', 'Loures', 'Odivelas', 'Mafra', 'Torres Vedras'])]

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

当涉及到探索和表示数据时,有大量的可能性。我希望这篇文章能给你一些有用的提示,让你更好地理解你的数据!尽管我们没有发现任何关于里斯本房地产市场的令人震惊的事实,但我认为我们能够看到一些简单的步骤,如去除极值,可以大大提高我们分析的质量。

感谢阅读!如果你喜欢这篇文章,我邀请你看看我的其他故事。我主要感兴趣的是数据科学,Python,区块链和数字货币,技术,还有其他一些东西像 摄影 !如果你想取得联系,你可以在这里联系我或者直接回复下面的文章。

我参加了一个超出我能力范围的技术会议,它既令人羞愧又鼓舞人心。洛杉矶数据科学沙龙

原文:https://towardsdatascience.com/i-went-to-a-tech-conference-that-was-over-my-head-it-was-humbling-and-motivating-f18327ec2f2?source=collection_archive---------14-----------------------

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

会议前— 我现在每月都会参加 Python Meetup 小组,尽管我不得不错过下一次会议,因为那天是我妻子的生日……优先事项。一天,meetup 的组织者问 meetup.com 的小组是否有人有兴趣免费参加数据科学会议。对我来说这是一个不需要动脑筋的问题,所以我马上发了电子邮件,因为前三个是先到先得的。我很幸运被选中,所以我在日历上做了标记,然后等了大约一个半月去参加洛杉矶数据科学沙龙。老实说,我从未听说过这个会议,但我很高兴尝试一些新的东西。

关于我和我为什么选择参加一个我知之甚少甚至一无所知的会议。我是计算机科学领域的大器晚成者,更不用说数据科学了。30 岁时,我重返校园,开始全职工作,现在我即将进入大学三年级,但有一个问题仍然困扰着我,我最终想做什么?我希望我能回到过去的十年,更快地进入编程,但我一直把托尼·罗宾斯的话记在脑子里,我会尽可能地转述:

有人问他需要多长时间才能擅长一件事,他回答说这取决于那个人和他们每天投入的时间。你可以每天花一个小时,在 4 年内变得伟大,或者每天花 4 个小时,在 1 年内变得伟大。

今天,我知道我正在追赶,这正是为什么我每天都在不断地学习和学习,而且我从来不觉得这是我“必须”做的事情,因为我真的觉得编程是我应该做的,我喜欢它。回到会议上,我仍然在考虑我的所有选择,数据科学一直非常有趣,我觉得这次会议可能是真正的数据科学的展示。

会议日— 终于到了参加洛杉矶数据科学沙龙的日子,但首先,如果没有交通,洛杉矶就什么都不是。开车 40 英里花了大约 2 个小时,我比我预期的晚了 20 分钟,因为我想去那里利用那里的停车场,但幸运的是,停车场很充足。

这个节目给我的第一印象是一位名叫 Jorge 的先生,他正在做登记,碰巧是一个非常好的人,非常乐于助人。他的举止肯定让我感觉很受欢迎,这减轻了我去另一个我不认识任何人的会议时的轻微焦虑。这是真的,去一个你不认识任何人的地方,更不用说对他们将要谈论的话题知之甚少,有时会令人生畏,但如果我在 JSConfUS 会议上学到了什么,介绍你自己,问是否可以加入他们,大多数时候,人们是欢迎的。

桌子是站立式的,可以容纳大约 4 个人,碰巧发现一个只有 3 个人一起吃早餐,所以我走近他们,介绍了自己,加入了他们。这将是我一天中第一次与一些极其聪明的人打交道。一个是麻省理工学院的毕业生,另一个在一家大公司的旧金山工作,最后一个有一个迷人的故事,他是如何在 2008 年前成为一名教师的。崩溃发生后,他连续三年被校区解雇,这让他决定从事数据科学方面的职业。他做了一段时间 api 文档的单调工作,最终在一家成功的初创公司找到了一份工作。当我分享的时候,我从我是会员的 meetup 上拿到了票,他说他也是橘子郡的一个 Python 团体的成员,我看着他说,“你是三个中的一个吗?!"。另外两个家伙笑了,因为他认为我的意思是 Python Meetup 中只有三个成员,然后我们都笑了。所以,是的,显然他们中的一个是同事,我们只是没有见过面,但我们现在有了…网络。

会谈(午餐前)—— 人们去参加会议的第二个原因,除了交流就是会谈,对我来说,我终于要看到数据科学是如何在真实的商业世界中使用的,我不会撒谎,有些概念超出了我的理解。现在我不会谈论太多,因为他们将在网上,还有更多真正可以说的,此外,这么多聪明的头脑,有时太聪明了,我跟不上。我并不觉得这本身令人沮丧,因为你永远也不想成为房间里最聪明的人,因为那样你就没什么可学的了。会议主要关注娱乐行业,一般来说是如何使用他们从作为消费者的我们这里收集的所有数据,并像任何成功的企业一样,调整它以提供更好的服务。如果我不谈一个真正给我留下深刻印象的演讲者,那我就失职了。我希望有一天能成为我所观察的演讲者中的一员,但是要成为一名出色的演讲者,你不仅需要知道你要演讲的主题,还要成为一名出色的演讲者。Jen Walraven 是网飞大学科学与分析的经理,起初它几乎像是照本宣科,但即使她在与观众的随意交谈中,她的演讲和词汇也是如此流畅,这是我打算效仿的一个亮点和例子。

午餐— 又到了建立关系网的时刻,我又一次抓起食物,环顾四周,寻找可以加入的人。最后,我和另一组男士坐在一起,我再一次问他们做了什么。一个是大学一年级学生,另一个是研究生,最后一位是来自瑞典的数据科学家博士,现在为一家游戏公司工作。与他交谈是一次非常有启发性的经历,当我站在那里,听他讲述在一家规模虽小但极其成功的游戏公司工作的经历时,我环顾四周,意识到我的同龄人当时的渴望程度。简单地说,学士学位相当于高中文凭。我的意思是说,我周围的这些人都渴望知识,正是这种渴望推动他们取得如此成功。起初,我确实觉得我可能不属于这里,但我改变了我的心态,转而思考我是如何被几十年的经验所包围的,如果有任何时间可以问问题,时间就是那时和那里。最后,我问罗伯特,他是游戏公司的瑞典绅士博士,他会对像我这样的三个人和另外两个还在上学的人说些什么,他给出了具体、务实的建议。他说学习 R 或 Python,学习 SQL 数据库,这促使我问了一个关于 NoSQL 的问题,他的观点是,现在有了 SQL 的新功能,NoSQL 可能会过时。这可能只是一个观点,但尽管如此,这是一个有多年经验的人的观点,至少值得考虑。再说一次,我可能是房间里最笨的,但这意味着我可以问更多的问题,你会发现人们非常愿意给出建议,这次会议也不例外。哦,罗伯特最后成了演讲者之一。

会谈(午餐后)—— 实际上,在我注册之后,我们就开始了一个关于聊天机器人的研讨会,我对聊天机器人了解不多,所以我认为这将是一个很好的关于它们做什么和如何工作的速成班。教授这个研讨会的先生们设置了一个演示,基本上和我想的一样,但令人惊讶的部分是关于如何使用框架创建自己的机器人的讨论。他漫不经心地说,但对我来说,这是我见过的最神奇的事情之一。我知道机器学习风靡一时,对业内许多人来说,它只不过是一种工具,但对我来说,它仍然是某种正在发生的魔法。不要误解我的意思,我对它的工作原理有一个非常非常一般的想法,但是让我吃惊的是,有人或一些人如此聪明地想到创造这个,这是鼓舞和激励成为那些创造者之一。

研讨会结束后,我们有一个短暂的休息时间,进行了更多的会谈,但在午餐前的会谈中,有一个人坐在两个座位之间,我们互相打了个简短的招呼,但没有更多的交谈。午饭后我又见到了他,这是一个尴尬的时刻,当你见过对方不止一次,大多数人仍然不知道谁应该先打招呼。我伸出手介绍自己,我再一次被他的故事和他为什么会在那里所吸引。他的名字叫乔丹,我记得当主持人问他为什么在那天开始的时候在那里,他说他刚刚完成一门课程,所以我问他这个问题。他的学士学位实际上是经济学,我相信他想真正进入数据科学,所以他参加了数据科学的大会课程。有趣的是,我的妻子一直在考虑 UI/UX 的大会,所以我当然代表她问了所有我能想到要问的问题,他不可能比我更了解情况和更乐于交谈。我告诉他很多事情我都不知道,但是他说因为他一个月前刚刚完成,他真的可以很好地理解,所以我又问了另一个问题。对每个人来说,最基本的话题之一就是回归。显然,我坐在后面,就像这样,是的…回归,显然每个人都知道。我问 Jordan 这是什么,他解释得很简单,就是用你拥有的信息和模式猜测其他变量。我想大会为他提供了很好的服务,实际上他对这个课程非常满意。

最后一位演讲者是珍妮·霍尔姆,她是洛杉矶市长的高级技术顾问。她展示了洛杉矶市如何利用技术来帮助城市变得更好。其中一个项目是 Hack LA,听起来很棒,能够成为帮助当地政府改善城市的团体的一员。我住在奥兰治县,到目前为止,我还没有找到一个类似的地方,但它确实激励我思考我能做些什么来帮助我的城市。去年,我们在火灾期间被疏散,这让我想到,也许我可以创建一个应用程序,可以直接向消防队员发送 SOS,消防队员可以获得 SOS 的 gps 位置,当他们靠近时,他们可以激活一个环,帮助他们定位被困人员。更好的办法是让消防队员利用这项技术来定位彼此。我对今天消防队员用的东西知之甚少,但是我哥哥想加入消防队,我可以问问他。不朽的工程,但现在至少我有一个想法,可以慢慢地建立它。

闭幕式— 这一天结束了,现在,因为是洛杉矶,是时候等待交通缓解一些了,所以我决定在附近等一等,做一些网络工作。遇见了安迪,他来自辛辛那提,和他的妻子在一起。他来自克利夫兰,我从他那里学到了宝贵的一课,在辛辛那提,你可以穿任何球队的球衣,除了巴尔的摩,这结束了我的第一次数据科学沙龙 LA conference。参加一个我无法理解的会议的最大好处是,即使你不明白人们在做什么,你也会了解他们是多么的聪明,但在提问的过程中,你会对日常生活有一个实际的了解,这是非常有价值的,尤其是如果数据科学起初看起来很神秘的话。

作为软件工程师,我和一位数据科学家一起工作。下面是我的经验。

原文:https://towardsdatascience.com/i-worked-with-a-data-scientist-heres-what-i-learned-2e19c5f5204?source=collection_archive---------2-----------------------

谈论我作为一名 Java/Kotlin 开发人员与我们的数据科学家一起工作的经历

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

Photo by Daniel Cheung on Unsplash

背景

2017 年末,我开始对机器学习领域产生兴趣。我讲了我开始旅行时的经历。总之,它充满了有趣的挑战和大量的学习。我是一名 Android 工程师,这是我与我们的数据科学家合作 ML 项目的经验。

我记得我试图解决我们的一个应用程序中出现的图像分类问题。我们需要根据一组定义好的规则来区分有效和无效的图像。我立刻从 Deeplearning4J (dl4j)修改了这个例子,并尝试用它来处理分类任务。我没有得到我期望的结果,但我保持乐观。

我使用 dl4j 示例代码的方法并不成功,因为我获得的准确性和训练模型的最终大小。这不可能,因为我们需要一个紧凑的文件大小的模型,这对于移动设备特别重要。

进入数据科学家

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

Photo by rawpixel on Unsplash

大约就在这个时候,我们聘请了一位数据科学家,他带来了丰富的相关经验。我后来从他身上学到了很多东西。在我发现大多数 ML 问题可以用 Python 解决之后,我很不情愿地开始学习 Python 的基础知识。我后来发现有些东西在 Python 中更容易实现,因为在 Python 社区中已经有了对 ML 的巨大支持。

我们从小型学习会议开始。此时,我的其他团队成员开始感兴趣,也加入了会议。他给我们介绍了 Jupyter 笔记本云机器学习引擎。我们很快就开始尝试使用花数据集的例子进行图像分类。

在团队中的每个人都具备了培训和部署模型的基础知识之后,我们直接进入了未完成的任务。作为一名团队成员,我当时专注于两项任务:图像分类问题和分割问题。这两种方法后来都使用卷积神经网络(CNN)来实现。

准备培训数据并不容易

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

Photo by Jonny Caspari on Unsplash

这两项任务都需要大量的训练数据。好消息是我们有很多数据。坏消息是它们没有分类/没有注释。我终于明白 ML 专家说的花最多时间准备训练数据而不是训练模型本身。

对于分类任务,我们需要将成千上万的图像分成不同的类别。这是一项乏味的工作。我不得不调用我的 Java Swing 技能来构建使这项任务更容易的 GUI,但是总的来说,这项任务对于参与人工分类的每个人来说都是单调的。

分割过程有点复杂。我们很幸运地找到了一些擅长细分的模型,但不幸的是它们太大了。我们还希望该模型能够在规格非常低的 Android 设备上运行。这位数据科学家灵光一现,建议我们使用巨大的模型来生成训练数据,这些数据将用于构建我们自己的 mobilenet。

培养

我们最终换成了 AWS 深度学习 AMI 。我们已经对 AWS 很满意了,他们提供这样的服务是一个优势。为图像分割训练模型的过程完全由我们的数据科学家处理,我站在他旁边做笔记:)。

Those are not the actual logs, LOL.

训练该模型是一项计算密集型任务。这是我看到在有足够的 GPU 和 RAM 的计算机上训练的重要性的时候。训练所花的时间相当短,因为我们在训练中使用了这样的计算机。如果我们使用一台基本的计算机,即使不是几个月,也要花几个星期。

我负责图像分类模型的训练。我们不需要在云上训练它,事实上,我是在我的 Macbook pro 上训练的。这是因为我只训练了神经网络的最后一层,而不是我们为分割模型所做的完整网络训练。

我们成功了

经过严格测试后,这两种型号都进入了我们的生产环境🎉。一名团队成员负责构建 Java 包装库。这样做是为了使模型可以以一种抽象的方式使用,这种方式涉及到向模型提供图像和从概率张量中提取有意义的结果。这是包含模型对单个图像进行预测的结果的数组。在这一点上我也参与了一点,因为我之前写的一些代码在这里被清理和重用了。

挑战,挑战无处不在

挑战让生活变得有趣。克服它们才是有意义的。—匿名

我还记得我最大的挑战是处理三维数组的时候。我仍然小心翼翼地接近他们。与我们的数据科学家一起从事 ML 项目是我继续 ML 冒险所需要的鼓励。

在从事这些项目时,我面临的最大挑战是尝试使用 Bazel 从源代码中为 32 位系统构建 Tensorflow Java 库。我在这方面一直不成功。

我也经历了其他挑战,其中一个是常见的:将 Python 解决方案翻译成 Java。因为 Python 已经内置了对数据科学任务的支持,所以代码在 Python 中感觉更简洁。我记得当我试图逐字翻译一个命令时,我的头发都被拔了出来:缩放 2D 阵列,并将其作为透明层添加到图像中。我们终于让它工作了,每个人都很兴奋。

现在,在我们的生产环境中,大多数模型都做得很好,但是当它们产生一个错误的结果时,这些错误的结果就大错特错了。这让我想起了我在这篇精彩帖子上看到的关于将 ML 模型转化为真实产品和服务的引言。

…如果没有新数据的持续输入,模型的质量实际上会下降,而且速度会很快。被称为概念漂移,这意味着随着时间的推移,静态机器学习模型提供的预测变得越来越不准确,越来越没用。在某些情况下,这甚至会在几天内发生。大卫·塔尔比

这意味着我们将不得不不断改进模型,而且没有最终的模型,这很有趣。

我甚至不确定我是否有资格被称为 ML 新手,因为我主要专注于移动开发。今年,我有一次令人兴奋的经历,与一个 ML 团队一起运送帮助解决公司问题的模型。我还想再做一次。

【ICLR 2015】力求简单:带交互码的全卷积网【带 TF 的手动背道具】

原文:https://towardsdatascience.com/iclr-2015-striving-for-simplicity-the-all-convolutional-net-with-interactive-code-manual-b4976e206760?source=collection_archive---------7-----------------------

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

GIF from this website

我已经假设很多人已经知道这篇文章,“力求简单:所有卷积网络 ”它非常有名,目前它是第二个对 CIFAR 10 数据集分类最准确的网络。

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

Image from this website

从上面,我们可以看到全卷积网络是多么有效。在这篇文章中,我们将实现两种不同类型的网络架构,像往常一样,让我们看看所有不同的优化方法进行比较。

案例 a)具有自动微分动量的 conv pool-CNN
案例 b)具有自动微分动量的 conv pool-CNN
案例 c)具有手动回推
AMSGrad 案例 d)具有手动回推AMSGrad(扩张

情况 e)全 CNN 带自动分化动量
情况 f)全 CNN 带自动分化亚当
情况 g)全 CNN 带手动回推
AMSGrad 情况 h)全 CNN 带手动回推AMSGrad(扩张

网络架构

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

从上图中,我们可以看到本文提出的总体架构,因为今天我将只关注 ConvPool-CNN 模型和 All-CNN 模型。值得注意的一个有趣事实是,在最终卷积运算之后会发生什么,如下所示,我们将执行全局平均池运算。

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

Image of General Base Model Presented in the Paper

蓝线 →全局平均池操作

在继续阅读之前,请注意两件事。
a)我将使用均值池而不是最大池
b)我将执行数据扩充标准均值归一化

现在,让我们更深入地了解一下这个全局平均池操作是什么。

全球平均池

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

Image from this website

如上所述,我们可以观察到全局平均池操作减少了给定输入的维度。所以我们可以怀疑这个操作是平均池操作的极端版本。现在让我们看看如何在 Tensorflow 中实现它。

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

Image from this website

从上图中,我们可以看到如何在 Tensorflow 中实现这个操作。现在让我们看看这个操作做了什么。

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

如上所述,我们可以观察到全局平均池操作与取矩阵的平均值相同。(因此,通过适当的信道维数,我们可以将矩阵简化为向量。)此外,如果有人感兴趣,请查看这篇博客文章了解更多信息。(亚历克西斯·库克也做了一项了不起的工作,解释了全球平均汇集[差距]。)此外 AndersonJo 做了一项令人惊叹的工作,解释 GAP 请点击此处或此处。(注一是韩语)。

结果:案例 a)具有自动微分动量的 conv pool-CNN

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

左图 →随时间训练精度/随时间成本
右图 →随时间测试精度/随时间成本

如上所述,我们可以看到,只有在 20 个历元之后,我们才能达到 88%的准确度。考虑到训练图像上的准确率仍然是 96 %,有 4%的机会增加,有可能达到 90%的准确率。

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

结果:病例 b)具有自动微分的 ConvPool-CNN 亚当

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

左图 →随时间训练精度/随时间成本
右图 →随时间测试精度/随时间成本

对于 Adam,我们可以在测试图像上观察到 88%的相似准确性,当与动量比较时,看到结果如此相似是非常有趣的。(我认为它会非常合适)

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

结果:案例 c) ConvPool-CNN 带手动回柱AMSGrad

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

左图 →随时间训练精度/随时间成本
右图 →随时间测试精度/随时间成本

与传统的 ADAM 相比,AMS Grad 被认为在正规化方面做得更好,然而对于这个实验来说,情况并非如此。如下所示,该模型能够达到 88%的准确率,同时在训练图像上具有 96%的准确率。

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

蓝线 →第 19 个历元的准确率为 88%。

结果:案例 d) ConvPool-CNN 带手动回柱AMSGrad(散瞳)**

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

左图 →随时间训练精度/随时间成本
右图 →随时间测试精度/随时间成本

对于前馈操作和反向传播的简单膨胀,结果没有显著改善。然而,它能够在第 12 个历元达到 89%的准确率,如下所示。

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

结果:情况 e)具有自动微分动量的全 CNN

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

左图 →训练随时间的准确性/随时间的成本
右图 →测试随时间的准确性/随时间的成本

当我们用步长为 2 的卷积层替换所有池操作时,我们可以看到精度下降了 3%。(在测试图像上)。

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

结果:情况 f)具有自动微分的全 CNN Adam

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

左图 →列车随时间的准确性/随时间的成本
右图 →测试随时间的准确性/随时间的成本

即使使用 Adam optimizer,我们也可以观察到,在相同的 epoch 数量下,测试图像的准确性下降了 1 ~ 2%。

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

结果:案例 g) All-CNN 带手动回柱AMSGrad

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

左图 →一段时间内的训练精度/一段时间内的成本
右图 →一段时间内的测试精度/一段时间内的成本

AMS Grad 的最高准确率约为 85%。在训练图像上具有相似的精度。

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

结果:案例 h) All-CNN 带手动背道具AMSGrad(散瞳)**

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

左图 →随时间训练精度/随时间成本
右图 →随时间测试精度/随时间成本

最后,对于扩张反向传播的 AMS Grad,它比任何其他方法都差,只能达到 84%的准确性。

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

交互式代码/透明度

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

对于谷歌 Colab,你需要一个谷歌帐户来查看代码,而且你不能在谷歌 Colab 中运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!同样为了透明,我在训练期间上传了所有的日志。

要访问全球平均池的代码,请单击此处。

要访问案例 a 的代码,请点击此处,要访问日志,请点击此处。
访问案例 b 的代码请点击此处,访问日志请点击此处。
要访问案例 c 的代码,请点击此处,要访问日志,请点击此处。
要访问案例 d 的代码,请点击此处,要访问日志,请点击此处。

要访问案件 e 的代码,请点击这里,要访问日志,请点击这里。
访问案例 f 的代码请点击此处,访问日志请点击此处。
要访问案例 g 的代码,请点击此处,要访问日志,请点击此处。
要访问案例 h 的代码,请点击此处,要访问日志,请点击此处。

最后的话

另外,如果你希望看到这个网络的 keras 实现,请查看这个博客帖子。Mate Labs 在解释这个话题方面做得非常出色!)

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有的写作清单,请在这里查看我的网站。

同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。

参考

  1. 斯普林根贝格,j .,多索维茨基,a .,布罗克斯,t .,&里德米勒,M. (2014)。追求简单:全卷积网。Arxiv.org。检索于 2018 年 5 月 11 日,来自https://arxiv.org/abs/1412.6806
  2. cy donia 999/all _ 卷积 _net。(2018).GitHub。检索于 2018 年 5 月 11 日,来自https://github.com/cydonia999/all_convolutional_net
  3. 示例:基础— imgaug 0.2.5 文档。(2018).img aug . readthe docs . io . 2018 年 5 月 11 日检索,来自http://img aug . readthe docs . io/en/latest/source/examples _ basics . html
  4. NumPy . ndarray . dtype—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 5 月 11 日,来自https://docs . scipy . org/doc/numpy-1 . 14 . 0/reference/generated/numpy . ndarray . dtype . html
  5. (2018).[在线]可在:https://www.quora.com/What-is-global-average-pooling[2018 年 5 月 11 日访问]。
  6. 池层 Keras 文档。(2018).keras . io . 2018 年 5 月 11 日检索,来自https://keras.io/layers/pooling/
  7. 这些研究人员是如何尝试一些非传统的东西来得到一个更小但更好的图像…(2017).中等。检索于 2018 年 5 月 11 日,来自https://medium . com/@ mate labs _ ai/how-these-researchers-trying-something-outstanding-to-out-a-small-better-image-544327 f30e 72
  8. 优化器— Keras 文档。(2018).keras . io . 2018 年 5 月 11 日检索,来自https://keras.io/optimizers/
  9. 库克,A. (2017)。用于对象本地化的全局平均池层。alexisbcook . github . io . 2018 年 5 月 11 日检索,来自https://alexisbcook . github . io/2017/global-average-pooling-layers-for-object-localization/
  10. TensorFlow?,H. (2018)。如何在 TensorFlow 中进行全球平均池化?。堆栈溢出。检索于 2018 年 5 月 11 日,来自https://stack overflow . com/questions/42054451/how-do-I-do-global-average-pooling-in-tensor flow
  11. Anderson jo/全球平均池。(2018).GitHub。检索于 2018 年 5 月 11 日,来自https://github . com/Anderson jo/global-average-pooling/blob/master/global-average-pooling . ipynb
  12. Anderson jo/全球平均池。(2018).GitHub。检索于 2018 年 5 月 11 日,来自https://github.com/AndersonJo/global-average-pooling
  13. 贝嫩森河(2018)。分类数据集结果。rodrigob . github . io . 2018 年 5 月 13 日检索,来自http://rodrigob . github . io/are _ we _ there _ yet/build/classification _ datasets _ results . html # 43494641522d 3130
  14. 误差,A. (2018)。避免 tensorflow 打印在标准错误上。堆栈溢出。检索于 2018 年 5 月 19 日,来自https://stack overflow . com/questions/35869137/avoid-tensor flow-print-on-standard-error
  15. 2017 年深度学习优化实现亮点(feat。塞巴斯蒂安·鲁德)。(2018).中等。检索于 2018 年 5 月 19 日,来自https://medium . com/@ SeoJaeDuk/implementation-of-optimization-for-deep-learning-highlights-in-2017-feat-sebastian-ruder-61e 2 CBE 9 b 7 CB
  16. 超越 Tensorflow 的默认自动微分优化器,具有交互式代码[手动…(2018).走向数据科学。检索于 2018 年 5 月 19 日,来自https://towards data science . com/outpering-tensor flows-default-auto-difference-optimizer-with-interactive-code-manual-e 587 a82d 340 e
  17. aleju/imgaug。(2018).GitHub。检索于 2018 年 5 月 19 日,来自https://github.com/aleju/imgaug
  18. 通过 Numpy 和 Tensorflow 中的示例和交互式代码理解批处理规范化。(2018).走向数据科学。检索于 2018 年 5 月 19 日,来自https://towards data science . com/understanding-batch-normalization-with-examples-in-numpy-and-tensor flow-with-interactive-code-7f 59 bb 126642

【ICLR 2016】通过带交互代码的指数线性单元(ELUs)进行快速准确的深度网络学习【带 TF 的手动回推】

原文:https://towardsdatascience.com/iclr-2016-fast-and-accurate-deep-networks-learning-by-exponential-linear-units-elus-with-c0cdbb71bb02?source=collection_archive---------11-----------------------

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

GIF from this website

我知道这份文件存在的时间最长,但是,直到现在我才有时间来实现这个网络。所以在这里,我终于实现了这个完全卷积神经网络与 ELU。非常简单但性能卓越的网络。

最后,为了好玩,让我们使用不同的方法来训练我们的网络,例如……
情况 a)使用标准反向传播的自动微分
情况 b) 反馈对准
情况 c) 扩张反向传播使用 L2 正则化
情况 d)使用反向传播的自动微分、 L2 正则化
情况 f) 使用不同优化器的组合的扩张反向传播

指数线性单位

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

红框 →激活功能的导数

本文的主要贡献是新颖的激活函数。它可能看起来很简单,但不要让表面水平愚弄你,作者实际上有一个完整的部分来解释为什么这种激活工作得这么好。总之,1)使用负梯度是个好主意,或者 2)激活函数的输入值以零为中心,以避免不必要的偏移。现在让我们看看这个函数在绘图时是什么样子的。

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

Graph using this website

红线 → Alpha 值设为 1
蓝线 → Alpha 值设为 2
绿线 → Alpha 值设为 5
橙线 → Alpha 值设为 0.5

根据α值,我们可以观察到负值的陡度彼此不同。这个函数的求导非常简单,正如我们在上面已经看到的,现在让我们来看看实现。

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

红框 →为小于 0 的输入增加 Alpha 值

从添加的 alpha 值中,我们可以知道 tensor-flow 的 elu()实现将 alpha 值默认设置为 1。

数据集(CIFAR 10)

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

Screen Shot from this website

我们将使用 CIFAR 10 数据集来测试该网络的性能。然而,请注意,本文的作者已经执行了 1) 全局对比度归一化 2) ZCA 白化的预处理,以及进一步的数据增强(填充和翻转),但我只是要归一化图像的每个通道。

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

Data Augmentation of the Paper

最后请注意,作者用 CIFAR 10 数据集做了两个实验,一个用 11 个卷积层,另一个用 18 个卷积层。我将实现 11 层网络。

网络架构

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

红色矩形 →输入尺寸为 32 * 32 的图像
黑色矩形 →与 ELU 激活的卷积运算
绿色矩形 →均值/最大池运算
橙色矩形 →用于分类的 Softmax

网络本身并不复杂,它由 11 层组成,但原始论文的作者有特定的超参数设置,如下所示。

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

不幸的是,对我来说,为 165,000 次迭代训练一个模型将花费太多的时间。因此,我不打算这样做,但你可以检查交互代码部分,以准确了解我的超级参数是如何设置的。此外,还有一件事让我感到疑惑:2 * 2 max-在每个堆栈之后应用了跨距为 2 的池。如果我们从 32 *32 的图像开始,我们不能有 6 个池操作(这就是为什么我用了 5 个池层,如上所示。).如果有人知道作者的意思,请在下面评论。

案例 a)使用标准反向传播进行自动微分的结果
(迭代:1K,优化器:动量)

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

左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本

使用动量优化器对该模型进行 1k 次迭代训练,如原始论文中所报告的那样设置退出率。即使在 1k 迭代之后,网络也做得不好,训练图像和测试图像的准确率都是 62%。虽然模型没有过度拟合是件好事,但这也表明收敛速度很慢。

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

情况 b)结果为 (迭代:85,优化器:Adam)

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

我甚至没让模特完成训练。这是因为模型没有学到任何东西。在训练图像上达到 35%的准确率后,模型停止了改进。如果您希望查看培训的详细信息,请点击此处查看日志。

****注意我在这个案例中使用的网络架构与原始论文略有不同。

案例 c)结果为 扩张反向传播 L2 正则化 (迭代:300,优化器:Adam)

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

左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本

请注意两件事,1)我忘记标准化成本,因此图表的 y 轴是如此倾斜 2)这个模型是使用 Adam 优化器训练的。然而,再次,该模型并没有表现得像我想的那样好。由于 Adam Optimizer,它能够在训练图像上实现高精度,但它未能泛化,在测试图像上表现不佳。(这是一个严重的过度拟合案例。)

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

****注意我在这个案例中使用的网络架构与原始论文略有不同。

情况 d)具有反向传播的自动微分的结果, L2 正则化 (迭代:200,优化器:Adam)

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

左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本

即使有了 L2 正则化,当用 Adam optimizer 训练时,网络似乎过度适应。我们可以观察到,在第 25 次迭代之后,测试图像的成本开始增加。

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

尽管该网络在测试图像准确性上比其他网络稍好,但是它遭受过拟合。

****注意我在这个案例中使用的网络架构与原始论文略有不同。

情况 d)使用不同优化器组合的 扩张反向传播 的结果(迭代:200,优化器:亚当/动量)

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

紫色框 →使用 Adam 优化器优化的图层

对于这个网络,我真的想尝试一些不同的东西,为每一层设置不同的优化器。如上所示,用 Adam optimizer 优化了周围有紫色矩形的层,并使用 momentum optimizer 训练了其他层。

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

左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本

该网络的表现不如我所希望的那样好,尽管与情况 c)相比,该模型没有任何正则化技术方法,如 L2 正则化,但该模型能够在测试图像上实现 65%的准确性。

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

****注意我在这个案例中使用的网络架构与原始论文略有不同。

互动代码/透明度

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

对于谷歌 Colab,你需要一个谷歌帐户来查看代码,而且你不能在谷歌 Colab 中运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问案例 a 的代码,请点击此处,要访问的日志,请点击此处。
访问案例 b 的代码请点击此处,访问日志请点击此处。
要访问案例 c 的代码,请点击此处,要访问日志,请点击此处。
要访问案例 d 的代码,请点击此处,要访问日志,请点击此处。
要访问案例 e 的代码请点击此处,要访问日志请点击此处。

最后的话

从这个实验中,我能够看到数据预处理和超参数调整对性能增益的重要性。因为最初的作者能够通过他们的超参数设置获得超过 90%的准确性。

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

蓝线 →在原作者论文上测试 CIFAR 10 的错误率

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。

参考

  1. Clevert,D. A .,Unterthiner,t .,& Hochreiter,S. (2015 年)。通过指数线性单元(elus)进行快速准确的深度网络学习。 arXiv 预印本 arXiv:1511.07289
  2. 作为神经网络激活函数的 ELU。(2018).赛菲克·伊尔金·塞伦吉尔。2018 年 5 月 6 日检索,来自https://sefiks . com/2018/01/02/elu-as-a-neural-networks-activation-function/
  3. tf.nn.elu |张量流。(2018).张量流。检索于 2018 年 5 月 6 日,来自https://www.tensorflow.org/api_docs/python/tf/nn/elu
  4. 分段。(2018).德斯莫斯图形计算器。检索于 2018 年 5 月 6 日,来自https://www.desmos.com/calculator/v9hyi8qj0o
  5. CIFAR-10 和 CIFAR-100 数据集。(2018).Cs.toronto.edu。检索于 2018 年 5 月 6 日,来自https://www.cs.toronto.edu/~kriz/cifar.html
  6. 托马斯,M. (2017)。ZCA 美白。马丁·托马斯。检索于 2018 年 5 月 6 日,来自https://martin-thoma.com/zca-whitening/
  7. aleju/papers。(2018).GitHub。2018 年 5 月 6 日检索,来自https://github . com/aleju/papers/blob/master/neural-nets/elus . MD
  8. IFT 6266 H13 博客。(2013).IFT 6266 H13 博客。2018 年 5 月 6 日检索,来自https://caglarift6266.wordpress.com/
  9. aleju/papers。(2018).GitHub。2018 年 5 月 6 日检索,来自https://github.com/aleju/papers
  10. Matplotlib . py plot . legend-Matplotlib 2 . 2 . 2 文档。(2018).Matplotlib.org。检索于 2018 年 5 月 6 日,来自https://matplotlib . org/API/_ as _ gen/matplotlib . py plot . legend . html
  11. 张量流正则化。(2018).ritchieng . github . io . 2018 年 5 月 6 日检索,来自http://www . ritchieng . com/machine-learning/deep-learning/tensor flow/regulation/
  12. Only Numpy:对深度神经网络实施 L1 /L2 范数/正则化的不同组合…(2018).走向数据科学。2018 年 5 月 6 日检索,来自https://towards data science . com/only-numpy-implementing-different-combination-of-L1-norm-L2-norm-L1-regularity-and-14b 01a 9773 b
  13. 机器学习的 L1 和 L2 正则化。(2018).Msdn.microsoft.com。检索于 2018 年 5 月 7 日,来自https://msdn.microsoft.com/en-us/magazine/dn904675.aspx
  14. [ NIPS 2016 ]直接反馈对齐为深度神经网络中的学习提供了交互式学习。(2018).中等。检索于 2018 年 5 月 7 日,来自https://medium . com/@ SeoJaeDuk/nips-2016-direct-feedback-alignment-provides-learning-in-deep-neural-networks-with-interactive-32d 59045 e8e
  15. 超越 Tensorflow 的默认自动微分优化器,具有交互式代码[手动…(2018).走向数据科学。检索于 2018 年 5 月 7 日,来自https://towards data science . com/outpering-tensor flows-default-auto-difference-optimizer-with-interactive-code-manual-e587 a82d 340 e
  16. 金马博士和巴律师(2014 年)。亚当:一种随机优化方法。Arxiv.org。于 2018 年 5 月 7 日检索,来自https://arxiv.org/abs/1412.6980

ICLR 2016 —用交互代码在 Tensorflow 中实现上下文模块【用 Tensorflow 手动背道具】

原文:https://towardsdatascience.com/iclr-2016-implementing-context-module-in-tensorflow-with-interactive-code-manual-back-prop-with-a2c84b3ae444?source=collection_archive---------5-----------------------

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

Image from pixabay

因为我在上一篇文章中提到了膨胀卷积运算,所以只有我用它制作了一个网络才有意义。所以我认为我最好实现本文中提出的上下文模块通过扩张卷积进行多尺度上下文聚合。在2016国际学习代表大会上发表。

有两件事我想指出来。原始论文的作者使用他们自己的方法初始化权重,对于这篇文章,我将从正态分布初始化。
2。为了好玩,让我们用扩张反向传播和 l 来训练网络。

网络架构(表格形式)/实验设置

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

Screen shot from this paper

基本上,上下文模块是一个具有扩展卷积运算的全卷积神经网络。我们的实验设置非常简单,我们将对 MNIST 数据集执行多类分类。为了实现这一点,我们将在上下文模块网络的输出端添加一个完全连接的神经网络。

网络架构(OOP 形式)

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

Left Image Context Layer / Right Image Fully Connected Neural Network

红线→ 扩张卷积运算

除了上面的红线执行扩张卷积运算外,网络架构与卷积神经网络完全相同。其前面有卷积层,后面有完全连接的神经网络。

膨胀系数/前馈操作

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

红线 →放大系数以匹配原稿

因此,为了保持膨胀因子与本文相同,我们将因子分别设置为 1、1、2、4、8、16、1 和 1。

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

训练结果自动微分(ADAM 优化器)

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

左图 →训练图像随时间变化的成本图
右图 →训练图像随时间变化的精度图

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

左图 →测试图像随时间变化的成本图
右图 →测试图像随时间变化的精度图

这是我见过的最有趣的结果,尤其是对汽车差异化而言。大约在 50 世纪,我们可以看到这个模型表现得非常好。然而过了 100th?)纪元模型的性能开始下降。最终训练和测试图像的准确率都达到了 77%左右。

训练结果(破损)扩张背道具(ADAM 优化器)

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

左图 →训练图像随时间变化的成本图
右图 →训练图像随时间变化的精度图

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

左图 →测试图像随时间变化的成本图
右图 →测试图像随时间变化的精度图

在让模型训练的同时,我去了健身房。在我的锻炼过程中,我意识到,我对扩展卷积层的反向传播的实现是错误的。因此,我将这个模型命名为(破碎的)扩张反向传播。然而,非常有趣的是,当这个过程可能被中断时,这个模型仍然能够学习。虽然与自动微分相比,它的表现不尽人意,但它仍能达到约 75%的准确率。

交互代码

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

为了交互代码,我搬到了 Google Colab!所以你需要一个谷歌帐户来查看代码,你也不能在谷歌实验室运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要获取(破裂)扩张反向传播的代码,请点击此处
要访问自动区分代码,请点击此处。

最后的话

因为,这篇文章更多的是关于实现上下文模块,我不会进一步优化它。但是,如果你能够获得更好的结果,请在下面评论,并说明你是如何达到这个结果的。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣的话,我还做了解耦神经网络的比较。

参考

  1. 贴标”?,W. (2018)。相对于「分段」和「场景标注」,什么是「语义分段」?。Stackoverflow.com。检索于 2018 年 3 月 12 日,来自https://stack overflow . com/questions/33947823/what-is-semantic-segmentation-comparated-to-segmentation-and-scene-labeling
  2. 于,冯,科尔敦,伏(2015)。基于扩张卷积的多尺度上下文聚合。arXiv 预印本 arXiv:1511.07122。
  3. 2017 年深度学习语义分割指南。(2017).Blog.qure.ai .检索于 2018 年 3 月 12 日,来自http://blog . qure . ai/notes/semantic-segmentation-deep-learning-review # dilation
  4. sk learn . utils . shuffle-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。检索于 2018 年 3 月 12 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . utils . shuffle . html
  5. 在 Tensorflow 中用 DeepLab 实现语义图像分割。(2018).研究博客。检索于 2018 年 3 月 12 日,来自https://research . Google blog . com/2018/03/semantic-image-segmentation-with . html
  6. 使用具有交互代码的神经网络去噪 CT 扫描——第 3 部分,卷积残差神经网络。(2018).走向数据科学。检索于 2018 年 3 月 12 日,来自https://towards data science . com/de nosing-lung-CT-scans-using-neural-networks-with-interactive-code-part-3-convolutionary-residual-6 dbb 36 b 28 be
  7. 以数值模拟和张量流为例理解 2D 展开卷积运算。(2018).走向数据科学。检索于 2018 年 3 月 12 日,来自https://towards data science . com/understanding-2d-expanded-convolution-operation-with-examples-in-numpy-and-tensor flow-with-d376b 3972 b25
  8. 于,冯,科尔敦,伏(2015)。基于扩张卷积的多尺度上下文聚合。Arxiv.org。检索于 2018 年 3 月 12 日,来自 https://arxiv.org/abs/1511.07122
  9. 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
  10. TF . nn . conv 2d _ back prop _ input | tensor flow。(2018).张量流。检索于 2018 年 3 月 12 日,来自https://www . tensor flow . org/API _ docs/python/TF/nn/conv2d _ back prop _ input
  11. 只有 Numpy:扩张的反向传播和谷歌大脑的梯度噪声与交互代码。(2018).黑客正午。检索于 2018 年 3 月 12 日,来自https://hacker noon . com/only-numpy-expanded-back-propagation-and-Google-brains-gradient-noise-with-interactive-code-3a 527 fc 8003 c
  12. 价值观?,H. (2018)。如何获取 Tensorflow 张量维数(形状)作为 int 值?。Stackoverflow.com。检索于 2018 年 3 月 13 日,来自https://stack overflow . com/questions/40666316/how-to-get-tensor flow-tensor-dimensions-shape-as-int-values

【ICLR 2016 /论文摘要】无监督学习的卷积聚类

原文:https://towardsdatascience.com/iclr-2016-paper-summary-convolutional-clustering-for-unsupervised-learning-4741707e4b28?source=collection_archive---------6-----------------------

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

GIF from this website

这篇论文是两年前提出的,是利用无监督学习算法学习更高层次结构的另一种方法。(k 表示)

请注意,这篇帖子是给未来的自己看的,回顾这篇论文上的材料,而不是从头再看一遍。

Paper from this website

摘要

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

标记给定数据的任务是一个劳动密集型过程,在这项工作中,作者决定利用无监督学习算法来放松这一限制。其中,他们基于 k-means 聚类算法的增强版本来训练深度卷积神经网络,这减少了类似过滤器形式的相关参数的数量,从而提高了测试分类的准确性。他们能够在 STL 和 MNIST 数据集上获得较好的精度。

简介

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

为了使网络运行良好,需要大量的数据,但是标记数据是一个劳动密集型的过程。因此,需要一些方法来利用未标记的数据。(以前需要无监督的预训练来训练非常深的神经网络。).在这项工作中,作者提出了一种改进的无监督聚类算法,允许过滤器学习不同的特征。(稀疏连接并防止算法学习冗余滤波器,这些滤波器基本上是彼此的移位版本。)

相关工作

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

虽然存在不同的无监督学习方法来学习将要使用的滤波器,但是它们忽略了滤波器将以卷积方式使用的事实。这可能导致过滤器学习重复的特征检测器。为了克服这一点,提出了具有对比散度和卷积稀疏编码的卷积限制玻尔兹曼机。最近,使用 k-means 算法的滤波器得到了关注,然而,很少关注减少学习滤波器中的冗余。(已经提出了诸如随机连接或分组相似特征的小工作,但是它们没有提供显著的改进。)在这项工作中,作者通过设计一种优化的学习算法来解决这个问题,该算法避免了相似过滤器的复制。

学习过滤器

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

K 意味着算法通过使用上述算法从数据向量 w (NM)中学习字典 D (NK)。(S 是与输入 W 相关的码向量,D(j)是字典 D 的第 j 列,矩阵 W 的维数为(NM ),而 S 的维数为(KM)。然而,利用 k 均值学习算法,在学习的滤波器之间会有冗余,因此作者提出了卷积 k 均值。

卷积 K 意味着学习算法选择大得多的图像块来执行聚类,具体来说,选择比滤波器大小大两倍的窗口,并从输入图像中随机选择。然后,质心对整个窗口进行卷积,以计算提取区域的每个位置处的相似性度量,并且具有最大激活值的区域意味着是与质心最相似的特征。这从窗口中提取并分配给相应的质心。(修改后的算法见下图。)

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

如下所示,当我们比较由两种算法学习的滤波器时,我们可以观察到通过 k 均值算法学习的滤波器之间的冗余,而学习的卷积 k 均值算法学习更多的本质基础。

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

为了比较性能,作者使用 STL 数据集,为了学习过滤器,他们只使用未标记的图像。(对于编码方案,他们对输入图像应用了全局对比度归一化。)

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

如上所述,当作者比较通过 k 均值和卷积 k 均值学习滤波器的网络性能时。我们可以看到,通过卷积 k-means 学习的网络具有更好的性能。这表明过滤器在从给定图像中提取有用信息方面做得更好。

学习连接

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

作者还研究了一种学习各层之间联系的方法。虽然完全连接的体系结构完全使用前面各层的所有功能,但非完全连接在计算方面更高效。(作者使用稀疏连接矩阵来实现这一点。).通过限制感受野之间的连接,可以扩展算法。

使用如上所示的架构,作者首先添加了具有预定义的不完全连接的卷积层,并在卷积层之后附加了线性分类器,并使用反向传播算法来训练系统。在这个阶段,通过监督学习来学习连接矩阵,当训练完成时,仅保留连接矩阵,并且通过卷积 k 均值算法来学习卷积滤波器。

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

如上所述,当两个卷积层都通过卷积 k 均值算法学习时,会产生最佳结果。

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

此外,我们可以再次确认卷积 k 均值算法是多么有效。当通过反向传播训练网络时,它过度适应训练数据,因此在测试图像集上具有非常低的性能。

最终分类结果

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

最后,作者比较了他们的方法与其他国家的艺术算法。(对于 STL 和 MNIST 数据集)。

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

Results for STL

如上所述,当我们比较无监督的学习过滤方法时,我们可以看到作者的方法显著地提高了测试精度。(注意,对于上述算法,作者使用了多字典方法,而不是使用单个字典。).

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

甚至对于 MNIST 数据集,我们可以看到作者的方法已经实现了最低的错误率。

结论

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

总之,本文作者提出了一种学习算法,该算法结合了监督学习算法和非监督学习算法的优点。作者修改了 k 均值学习算法,减少了网络学习的冗余滤波器。此外,作者提出了一种学习设置来学习层之间的正确连接。与其他无监督学习方法相比,该方法更简单,性能更好。

最后的话

这种方法的一个非常好的优点是,我们不需要在执行 k-means 聚类之前白化数据。然而,从与 deco 相关的批量标准化中,我们已经知道创建一个增白层是完全可能的。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站

同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t。

参考

  1. Dundar,a .,Jin,j .,& Culurciello,E. (2015 年)。无监督学习的卷积聚类。Arxiv.org。检索于 2018 年 8 月 20 日,来自https://arxiv.org/abs/1511.06241

[ ICLR 2017 /论文摘要]使用强化学习设计神经网络架构

原文:https://towardsdatascience.com/iclr-2017-paper-summary-designing-neural-network-architectures-using-reinforcement-learning-e6f099bcf2ec?source=collection_archive---------13-----------------------

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

GIF from this website

仅仅从名字你就已经知道这种纸有多酷了。

请注意,这个姿势是为了我未来的自己回顾和复习这篇论文上的材料,而不是从头再看一遍。

Paper from this website

摘要

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

设计新的网络架构不仅需要人类的专业知识,还需要劳动时间。本文的作者介绍了一种可以设计高性能卷积神经网络的代理。并且使用 Q-learning 和 e-greedy 探索策略和经验重放来训练代理。

简介

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

CNN 多年来取得了巨大的成功,典型的 CNN 由卷积层、池层和全连接层组成。(同样由于所有的选项,搜索空间相当大。).本文的作者制作了一个代理,旨在无需人工干预的情况下创建新的卷积神经网络架构。(代理正在对以何种顺序放置何种层做出顺序决策。)最后,他们在 MNIST 和 CIFAR 10 等图像分类数据集上测试了创建的网络。

相关工作

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

创建新网络架构的自动化在学术界并不是一个新概念,一些相关的作品是“卷积神经结构”和“遗传算法和神经网络的组合:技术发展水平的调查”。然而,不幸的是,通常情况下,手工制作的网络比生成的网络性能更好。最近在强化学习和深度学习的交叉领域有很多工作。其中,Q-learning、e-greedy 策略和经验重放取得了巨大的成功。

背景

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

在这一部分,作者很好地解释了马尔可夫决策过程,贴现报酬函数,以及它们是如何结合在一起的。关于这个话题的更简单的解释可以在这里找到。此外,如果您希望了解更多关于贝尔曼方程的信息,请点击此处

利用 Q-learning 设计神经网络架构

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

作者为智能体选择的任务是依次选择神经网络层。其中 C(n,f,l)对应于滤波器的数量、感受野大小和步幅,P(f,l)对应于具有相同符号的池层。当代理完成生成不同类型的网络架构时,(换句话说,到达终端状态),生成的网络得到训练。并且验证准确性充当代理的奖励值,网络体系结构也被存储在代理的重放存储器中,并且经验被周期性地从重放存储器中采样以更新 Q 值。

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

作者描述了每个状态空间、动作空间和 Q-Learning 训练过程的实现/配置细节。其中状态空间通过所有相关层参数的元组来定义。(每个参数的细节可以在上面看到。).对于动作空间,它们限制了完全连接层的数量,并使代理能够在任何给定的时间点移动到终止状态。最后,ε递减时间表如下所示。(Q 学习率为 0.01)。

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

实验细节

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

在这里,作者给出了他们在训练网络时选择的超参数的详细描述,以及他们添加了退出层的事实。一个有趣的事实是,如果他们的学习速度不是他们的最佳选择,网络有 5 次机会重新开始他们的训练。(如果他们不能学习,学习率就会降低。而且用了 10 个 nvidia GPU 用了 10 天。)最后,作者描述了他们如何为每个数据集优化超参数。(MNIST、CIFAR 10 和 SVHN。)

结果

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

如上所述,随着代理从探索阶段进入开发阶段,每个数据集的模型的准确性开始增加。(特别是对于 SVHN,它从 52%增加到 88%。).一个有趣的事实是,代理通常选择 C(n,1,1)类型的卷积层作为第一层,这作为预处理步骤(即,将 RGB 图像转换为 YUV 图像)。).

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

如上所述,我们可以注意到,与类似类型的网络(没有更高级的池层等)相比,代理生成的网络表现良好。甚至当比较由更复杂的网络结构组成的不同网络时,我们可以观察到由代理生成的网络仍然是有竞争力的。

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

最后,作者还对 MetaQNN 的迁移学习能力做了一些实验。

结束语

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

总之,为不同的用例设计网络架构是一项耗时的任务。这篇论文的作者提出了一种新的解决方案,他们训练了一个代理,该代理可以对下一步放置什么层做出顺序决策,以设计一个卷积神经网络。此外,作者指出了在未来更优化版本的代理的可能性。

遗言

创建不同类型网络的非常酷的方法。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站

同时,在我的推特这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我也实现了广残网,请点击这里查看博文 pos t。

参考

  1. b .贝克、o .古普塔、n .纳伊克和 r .拉斯卡尔(2016 年)。使用强化学习设计神经网络结构。Arxiv.org。检索于 2018 年 6 月 28 日,来自https://arxiv.org/abs/1611.02167
  2. 遗传算法和神经网络的结合:技术现状的调查——IEEE 会议出版物。(2018).Ieeexplore.ieee.org。检索于 2018 年 6 月 28 日,来自https://ieeexplore.ieee.org/document/273950/
  3. (2018).Arxiv.org。检索于 2018 年 6 月 28 日,来自https://arxiv.org/pdf/1606.02492.pdf
  4. David Silver 的 RL 课程—第 1 讲:强化学习简介。(2018).YouTube。检索于 2018 年 6 月 28 日,来自https://www.youtube.com/watch?v=2pWv7GOvuf0&list = plweqsiczjac 7 pfiyymvyihfpg 9um 82 b
  5. 贝尔曼方程-1。(2018).YouTube。检索于 2018 年 6 月 28 日,来自https://www.youtube.com/watch?v=b1GvQcjDwBU

【ICLR 2017 /论文摘要】探索具有循环学习率的损失函数拓扑

原文:https://towardsdatascience.com/iclr-2017-paper-summary-exploring-loss-function-topology-with-cyclical-learning-rates-4213655ba65?source=collection_archive---------16-----------------------

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

GIF from this website

我想知道更多关于循环学习率的信息。

请注意,这篇帖子是让我未来的自己回顾和回顾这篇论文上的材料,而不是从头再看一遍。

Paper from this website

摘要

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

本文作者训练了一个具有循环学习率(CLR)的残差神经网络。使用线性网络插值,他们能够观察到奇怪的现象。他们还发现 CLR 可以产生更高的测试准确度,尽管他们的学习率很高。

简介

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

在大多数神经网络论文中,作者提供了 top-k 准确度分数以及训练/测试进行情况的图表。这篇论文的作者认为,必须报告额外的行为。如上图(左图)所示,当学习率设置为 0.14 时,我们可以观察到一个奇怪的现象。训练开始后,准确性实际上在再次上升之前下降了。在右边的图表中,当学习率设定在 0.25 到 1.0 之间时,网络在这些范围内表现很好。本文作者希望用循环学习率来进一步研究这一现象。

超收敛

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

该论文的作者首先尝试了三角循环学习率(图表的左侧部分)。我们可以观察到,随着学习率从 0.1 增加到 0.35,训练损失急剧增加(当学习率在 0.25 左右时)。此外,我们可以观察到测试准确性和测试损失之间奇怪的分歧行为。

在图表的右边可以看到另一个令人惊讶的结果。我们可以看到,通过循环学习率,网络实际上能够比典型的学习率更快地收敛。其中仅在 20,000 个时期内就达到了 93%的准确率。然而,不幸的是,训练以较低的准确率结束。本文作者创造了术语“超收敛”来指代这种现象,即与传统训练相比,网络被训练到更好的最终测试精度,但迭代次数更少,学习率更高。

网络插值

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

如果网络的权重初始化不同,则有理由认为网络找到的最优解(最小点)可能不同。将每个网络的权重与下面的等式结合起来,我们可以看到这些最佳点是否彼此相似。

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

正如上文所见(图片和图表),当作者将两种不同状态下的训练(常规学习率)网络结合起来时,我们可以看到一个单一的凹形,指示相似的最小点。但是,当我们结合使用 CLR 训练的网络的两个不同状态的权重时,我们可以观察到网络找到的最优解是不同的。

结论

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

总之,本文作者报道了用循环学习率训练残差网络时的一些奇怪现象。作者认为这些模式出现的根本原因是损失函数拓扑。令人惊讶的是,这篇论文中报道的现象只是作者所看到的所有现象的一小部分。

最后的话

没有多少研究者研究学习速率的动态如何影响网络性能。很高兴看到这些研究正在进行。

参考

  1. l .史密斯和 n .托平(2017 年)。探索具有循环学习率的损失函数拓扑。Arxiv.org。检索于 2018 年 6 月 29 日,来自https://arxiv.org/abs/1702.04283

ICLR 2018 海报亮点(第一部分)

原文:https://towardsdatascience.com/iclr-2018-posters-highlight-part-1-386e674f2f9a?source=collection_archive---------5-----------------------

今年的国际学习代表会议(ICLR)在加拿大美丽的温哥华举行,这是我和我的团队分享的一份快速旅行报告。由于我还没有找到任何关于 ICLR2018 的博文,所以我决定在 Medium 上分享这份报告。但在继续阅读之前,请注意,这是通过我的偏见镜头,只对我感兴趣的领域。

你可以在这里观看每一个主题演讲和演讲(谢谢脸书!):https://www.facebook.com/pg/iclr.cc/videos/?ref=page_internal

下面是我已经做了深入阅读标记的海报。其中大部分是“研讨会”论文。在我看来,“研讨会论文”和“会议论文”实际上是一样的。他们只是在不同的房间,但都同样拥挤。我个人更喜欢“研讨会”论文。

1。在机器学习中放一个 bug:一个蛾的大脑学习阅读 MNIST。

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

**关键词:**神经网络

为什么我觉得这张海报很有趣?

即使是这种最简单的生物神经网络,它也大大优于标准的机器学习方法,如最近邻、SVM 和卷积神经网络(CNN)

将生物工具包移植到 ML 任务的潜在好处

实施细节

1)给蛾嗅觉(嗅觉)网络的计算模型分配学习阅读 MNIST 数字的任务。“蛾网”与飞蛾已知的生物物理学密切相关。

2)为了学习,MothNet 只使用了生物神经网络工具中广泛存在的一些结构元素:一个嘈杂的前置放大网络,具有由高维稀疏层调节的竞争抑制和可塑性

  • 【初学者友好】“竞争性抑制”或“Hebbian”听起来很花哨,但它们并不是那么难的概念。竞争性抑制是酶抑制的一种形式,其中抑制剂的结合阻止了酶的目标分子的结合。赫比安法则认为,如果两个神经元同时放电,它们之间的联系可能会得到加强。

2。不衰减学习速率,增加批量

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

**关键词:**批量大小,学习率

为什么我觉得这张海报很有趣?

该论文声称,在训练期间以线性速率增加批量大小与学习速率下降一样有效。

很好地证明了在 SGD 优化中调整学习率和增加批量之间的等价性

它显示了评估势头、Adam 等的努力。

实施细节

  1. 作者是理论物理博士(!)并且他用他在随机微分方程方面的深入知识(SDE。还记得布朗运动吗?)将随机梯度下降(SGD)解释为 SDE。
  2. 如果你看海报,这部作品的核心是左下角的“SGD 作为随机微分方程”一节。其他的都只是展示结果而已。
  3. 它定义了“噪声尺度”g = eN/B(1-m)其中 g 是噪声尺度,e 是学习率,N 是训练集大小,B 是批量大小,m 是动量系数。噪声使 SGD 远离尖锐的最小值,因此存在一个最佳批量,使测试集精度最大化。这个最佳批量大小与学习率和训练集大小成比例。
  4. 这个噪音等级来自于他之前的论文关于一般化和随机梯度下降的贝叶斯观点。这是一个相当长的数学推导过程,从 dW/dt = dC/dW+η(t)(该部分的第一个等式)开始,其中 W 是参数,C 是成本函数,η(t)是白噪声。你可以看到 dC/dW 是一个梯度。
  5. 然后他引入 F(W),这是一个描述梯度协方差的矩阵,也是当前参数值的函数。如果我冗长的解释让你感到困惑,看看中的等式 11、12、13,关于一般化和随机梯度下降的贝叶斯观点。
  6. 最后,它吹嘘用 64 个 TPU 在 29 分钟内训练了 ImageNet)然后我在上面看到了 Quoc Le 这个名字:)

3.强化行走:用蒙特卡罗树搜索学习在图中行走

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

**关键词:**蒙特卡罗树搜索,知识图,强化学习

为什么我觉得这张海报很有趣?

因为这是我们团队的论文!我们可以把它做成销售图,然后生产出来。

结合 RNN 和 MCTS(蒙特卡罗树搜索)的策略梯度在知识图推理中的新颖应用

实施细节

  1. 问题定义:学习遍历一个图 G = (N,E),其中 N 是一组节点,E 是一组边,以便为给定的一对源节点 Nt ∈ N 和查询 q 找到一个目标节点 Nt ∈ N
  2. 训练数据集是{(Ns,q,Nt)}
  3. RNN 将先前状态、先前动作和目标节点的历史编码到向量 q 中
  4. 用全连接 NN 把 q_t 和 N&E 一起编码成一个高层嵌入向量 h 的(我讨厌介质还是不支持下标。看海报“模特”部分。)
  5. **为什么把 RNN 和 MCTS 结合起来,而不是正常的政策梯度?**策略梯度法一般样本效率较低,尤其是在报酬信号稀疏的情况下,比如在这个问题中,报酬({0,+1})只出现在一个轨迹的末端。MCTS 有助于生成具有更多积极回报的轨迹,我们可以使用这些轨迹来进一步改进政策。
  • [初学者友好]什么是 MCTS?
    非常简单地说:1。建立一个前瞻树(如博弈树。)
    2。使用推广(模拟)来产生奖励。
    3。将类 UCB(置信上限)公式应用于树的内部节点。

4。负责任地预测:通过学会推迟来增加公平性

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

**关键词:**公平,学会推迟

为什么我觉得这张海报很有趣?

本文件提出了一个确保分类公平的框架。它探索了学习推迟的模型。

把学会推迟作为实现公平的一种手段的想法相当新颖。

实验表明,这种策略不仅可以提高预测的准确性,还可以减少决策中的偏差。

实施细节

1)看橙色图。当 IDK 模型预测时,系统输出该模型的预测。当模型显示 IDK 时,系统输出决策者的预测。

2)因此,第一阶段是标记疑难案例以供审查。

3)在数学上,我们可以将 IDK 模型描述如下。

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

4)然后,该模型可以被训练为使用示例损失函数(例如,分类误差、交叉熵)来最小化以下损失函数。

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

5)我让它听起来很简单,但这并不是本文中数学的终结。它从上述思想中分支出来,建立可微的 IDK 学习模型,并使 s_i 成为“延迟概率”,而不仅仅是 0 和 1。

6)他们选择“完全不同的影响”作为公平标准。

5.学习深度模型:临界点和局部开放性

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

He was the only author who didn’t bring the proper poster. I liked how indifferent (read: cool) he is being about the presentation.

**关键词:**非凸优化

为什么我觉得这张海报很有趣?

这是一项“理论构建”工作。

它使用“局部开”的概念来绘制局部最优和全局最优之间的等价关系。

本文不要求对激活函数的可微性进行假设。

实施细节

1)为 Burer-Monteiro 的经典结果提供一个简单的证明,并将其推广到非连续损失函数。

2)证明了两层线性网络的每个局部最优解都是全局最优解。与文献中的许多现有结果不同,他们的结果不需要对目标数据矩阵 Y 和输入数据矩阵 x 进行假设。

3)发展多层线性神经网络的局部/全局最优等价的几乎完整的特征。

我没有详细检查这个结果的证明,但它似乎是正确的。

6。隐式模型的梯度估计器

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

**关键词:**隐性模型

为什么我觉得这张海报很有趣?

它为用于数据采样的生成模型(如 GANs)提供了一种估计某些训练目标梯度的方法。

想法是这可用于培训程序。

提出“Stein 梯度估计器”,直接估计隐式定义分布的得分函数。

实施细节

1)隐式概率模型由随机过程定义,该随机过程允许直接生成样本,但不允许评估模型概率。

2)这个想法基于 Stein 的身份:内核化的解决方案。本文介绍了贝叶斯神经网络和遗传神经网络的应用。

3)大多数现有的学习隐式模型的方法依赖于对基于梯度的优化的难以处理的分布或优化目标进行近似,这易于产生不准确的更新,从而产生差的模型

7。TensorFlow 中批量学习的弹性反向传播(Rprop)

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

**关键词:**张量流

为什么我觉得这张海报很有趣?

它在 Tensorflow 中实现了弹性反向传播(Rprop)算法,并表明在用 RNN 解决简单任务时,它的性能优于 Adam。

实施细节

Rprop 算法只考虑要优化的函数 f 的偏导数的符号,而不考虑它们的绝对值

2)在每次迭代中,如果偏导数的符号

8。修剪,还是不修剪:探索模型压缩中修剪的功效

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

**关键词:**模型稀疏性,模型压缩

为什么我觉得这张海报很有趣?

这是一个有益的实验。大型稀疏模型(为了减少模型的内存占用而进行修剪的大型模型)被修剪成目标大小。他们表明,这些模型比小型密集模型性能更好。(比简单的缩小模型架构的规模更有效。)

结果显示在 conv 模型和 seq2seq 的各种数据集上。

作者甚至公开了代码。

除了我亲手挑选的,这里还有 2018 年 ICLR 最佳论文:

良好的…今天到此为止!我的手机里还有一些其他的海报照片,所以如果时间允许,我可能会写第二部分。感谢阅读!

ICML 2018:转移、多任务和半监督学习的进展

原文:https://towardsdatascience.com/icml-2018-advances-in-transfer-multitask-and-semi-supervised-learning-2a15ef7208ec?source=collection_archive---------5-----------------------

机器学习国际会议于去年 7 月在斯德哥尔摩举行。总之,它展示了机器学习中许多有趣的趋势和方向。由于 ICML 是一个如此大的会议,我将把我的注意力集中在会议上发生的一些有趣的事情上。

具体来说,今年的 ICML 将口头演讲分成了几个不同的“曲目/时段”我很高兴看到其中的三次会议集中在“迁移和多任务学习”上,因为这一直是我感兴趣的领域。此外,大量的海报涉及到这些概念以及其他曲目的一些口述。

缺乏大量干净的标记数据仍然是深度学习潜在影响的障碍。对于许多任务来说,总体上缺乏数据点(例如,预测选举、诊断罕见疾病、翻译成稀有或灭绝的语言……)。在其他情况下,数据是存在的,但有噪音或标记不良(例如,在特定关键字下从 Google 抓取的图像,通过 NLP 分配标签的医疗案例,仅部分注释的文本语料库)。不管是什么原因,找到从有限的或有噪声的(半相关)数据中学习的方法都有明显的好处。

三种这样的方法是迁移学习、多任务(从技术上来说,这是迁移学习的一个子类,就像领域适应一样,但是在本文中,我将它们作为独立的实体对待)和半监督学习。还有其他方法(主动学习、元学习、完全无监督学习),但本文将集中讨论与这三者相关的 ICML 文章(尤其是前两种)。由于这些领域之间的界限并不总是很清楚,我们也可能会涉足其他一些领域。对于需要复习的读者,这里有一个简单的概述。更详细的概述,请参见 Sebastian Ruder 关于迁移学习多任务学习的精彩博文。

Overview of the various idioms. (As an aside a neat trick I just discovered you can actually render markdown in Medium. So if you have need of nested lists or other things just embed a Github gist with a .md extension).

我总是发现迁移学习和多任务学习是非常重要的工具,不管是在哪个行业或领域。无论您是在医学、金融、旅游还是娱乐领域工作,也无论您是在处理图像、文本、音频还是时间序列数据,您都有可能从采用通用的预训练模型并根据您的特定领域对其进行微调中受益。根据您的数据,也很可能有多个相关的任务,您可以训练您的神经网络来学习联合解决,从而提高整体性能。

那些关注医学深度学习(但对其他人也有用)的人特别感兴趣的是一篇题为“ 不要喊狼来了:远程监督的多任务学习重症监护 ”的论文在 ICU 病房中,经常会出现假警报的问题,以至于护士/医生对它们变得麻木不仁。本论文的重点是使用多任务和半监督学习来检测真正威胁生命的 ICU 事件,而不是虚警。该论文的作者着眼于使用带有辅助任务的多任务学习来提高模型的性能,而不需要花费大量时间进行注释。具体来说,他们的模型“结合了大量远程监督的辅助任务,以显著减少训练所需的昂贵标签的数量。”其次,他们开发了一种新的方法“远程监督多任务学习,自动从多元时间序列中识别大量相关的辅助任务,以从标记和未标记的数据中联合学习。”演讲的视频可以在 YouTube 上找到。

如果你想要多任务学习的好处,但只有一个任务怎么办?论文“ 伪任务增强:从深度多任务学习到任务内共享——再回到 ”就是针对这个问题。作者建议利用伪任务来帮助提高主任务的性能。这是可能的,因为在基本层面上,多任务学习通常通过在中间层和上层之间共享特征以及学习用于特定任务的特定任务解码器来工作。因此,训练具有多个解码器的模型应该带来相同的好处,即使解码器都用于相同的任务,因为每个解码器以不同的方式学习任务;这些额外的解码器被称为“伪任务”该论文的作者在 CelebrityA 数据集上实现了 SOTA 结果。我很高兴地看到他们也在 IMDB 情感数据集上进行了测试。他们使用了一个基线模型,并通过使用他们的技术进行训练显示出显著的改善。这表明该技术可以潜在地与多种不同的神经网络架构一起工作。

GradNorm:深度多任务网络中自适应损耗平衡的梯度归一化

本文描述了一种新的多任务神经网络的规范化技术,帮助他们更快地收敛和提高整体性能。它还将需要调整的超参数总数减少到一个。使用 GradNorm,他们在 NYU2 数据集上获得了 SOTA。总体而言,这是一篇有助于降低训练 MLT 算法的复杂性和难度的扎实论文。最后,作者做了有趣的观察,“GradNorm 可能有超出多任务学习的应用。我们希望将 GradNorm 方法扩展到类平衡和序列到序列模型,在所有情况下,梯度信号冲突的问题都会降低模型性能。”

通过学习转移学习

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

A diagram from the paper describing how L2T works.

到目前为止,大多数迁移学习论文只研究了从源域到目标域的知识迁移,或者通过预初始化权重和冻结层,或者通过降低学习速率。这篇论文最好被描述为“元迁移学习”或学习如何最好地执行迁移学习任务(L2T)。作者描述说:

与 L2T 不同,现有的迁移学习研究都是从零开始,即只考虑感兴趣的领域对,而忽略先前的迁移学习经验。更好的是,L2T 甚至可以收集所有算法的智慧,考虑到上面提到的任何算法都可以应用于迁移学习体验

这自然会引出一个问题,这和“元学习”有什么不同事实上,L2T 可以被视为一种特殊类型的元学习;像元学习一样,它利用过去的历史来改进学习方式。然而,在这个上下文中,历史指的是从源域到目标域的迁移学习任务。

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

A diagram of the difference between different types of learning. From the article (Figure #)

该论文的作者在 Caltech-256 上评估了 L2T 框架并绘制了数据集草图。该模型改进了以前的 SOTA 结果,特别是在例子很少的情况下。

我很高兴看到**用卷积网络进行迁移学习的显性归纳偏差**【在被 ICLR 拒绝(我认为不公平)后进入 ICML。本文描述了一种应用正则化来有效地进行迁移学习而不是修改学习速率的方法。作者提出了几种新的正则化方法,这些方法基于预训练模型中的权重应用不同的惩罚。他们取得了很好的实验结果,我目前正致力于将其应用到我的几个医学成像模型中。****

通过迁移学习进行课程学习:深度网络的理论和实验 ”主要是一篇研究“课程学习”的理论论文,这是一种借鉴自教育/心理学的学习习语,旨在以渐进和有组织的方式学习更难的概念。具体而言,本文着眼于迁移学习和课程学习之间的关系,以及课程学习和为训练提供的示例顺序之间的关系及其对随机梯度下降的影响。这里需要注意的是,这种类型的转移不同于迄今为止讨论的其他类型。在这种情况下,迁移学习指的是研究“知识从一个分类器到另一个分类器的迁移,如教师分类器学生分类器。”因此,在这种类型的迁移学习中,“迁移的不是实例表示,而是训练实例的排序。”作者的结论是,课程学习的学习速度总是更快,有时最终的概括能力会得到提高,特别是对于困难的任务。**

学习无监督领域适应的语义表示

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

Figure 1 from the paper.

(无监督的)域适应中的一个问题是目标和源分布之间的对齐。无监督的领域适应是一种迁移学习。作者在这里开发了一个语义转移网络,它通过对齐标记的源质心和伪标记的目标质心来学习“未标记的目标样本”的表示更简单地说,他们的方法旨在通过语义损失函数,基于最小化源域和目标域之间的整体映射差异来对齐源域和目标域的分布。结果包括在 ImageCLEF-DA 和 Office31 数据集上的 SOTA 性能。他们的代码可以通过点击这里在线获得

用黑盒预测器检测和校正标签偏移 是另一篇关于领域适应的有趣论文。它的重点是如何检测训练和测试之间 y 分布的变化,这在医学中非常有用,如果某种疾病的流行或爆发会极大地影响分布。

面对训练集和测试集之间的分布偏移,我们希望检测到量化这种偏移,并且校正我们没有测试集标签的分类器****

本文的具体主题主要是协变量转移。作者开发了几个有趣的标签移动模拟,然后应用于 CIFAR-10 数据集和 MINST。与未校正的模型相比,他们的方法能够大大提高精确度。

用语义映射纠正异构模型

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

Diagram from the paper describing the modeling of feature spaces.

我发现这篇论文很有意思,因为它结合了最优运输来调整分布。

最优运输成为改革的主要工具,它具有调整分配的能力

总之,本文在人工数据集和真实数据集(包括亚马逊用户点击数据集和学术论文分类数据集)上提出了新颖的观点并取得了良好的结果。

这些只是 ICML 2018 的一些有趣的论文;还有许多其他伟大的论文。我确实希望在某个时候总结一下元学习和其他半监督学习论文。我发现这些论文也很吸引人。

公告

我仍在努力完成关于将机器学习模型部署到生产中的系列文章中的下一篇文章。在那篇文章中,我将讨论使用 SeldonCore 和 Kubeflow 以可扩展的方式部署机器学习模型。

northern New England Data and Analytics 将于 8 月 15 日举办一次数据会议,我们将在会上通过 Seldon Core 和 Kubeflow 部署一个最近的 NLP 模型,以便在聊天机器人中使用它。Meetup 将在 Zoom 上进行流媒体播放。

IcoOmen:使用机器学习预测 ICO 价格

原文:https://towardsdatascience.com/icoomen-using-machine-learning-to-predict-ico-prices-29fa4cec6d86?source=collection_archive---------16-----------------------

在真实世界的数据上使用机器学习。

介绍

加密货币无需介绍。加密货币曾经是在线聊天论坛上书呆子社区的专利,现在几乎已经成为主流。另一方面,ico 鲜为人知。

最初的硬币发行,通常被称为 ICO 或代币销售,是一种筹资手段,其中新发行的加密货币中的代币与公众交换为比特币或以太坊等其他加密货币。

这些旨在用于资助早期阶段的加密货币项目,但是它们是相当高风险的投资,因为在 ICO 中筹集的超过 10%的资金已经丢失或被黑客攻击,并且只有 10%发行的 ICO 代币在 ICO 后用于实际的代币生态系统,而其余的只是简单的交易。

直到最近,对 ICO 的监管还很少,市场非常繁荣,ICO 基金增长迅速。2017 年末和 2018 年初尤其如此,如下图所示。这一增长此后迅速放缓,因为整个加密货币市场变得相当悲观。

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

Source: Elementus.io

ico 和加密货币的不可预测性通常会产生一个有趣而困难的问题——我们能对这些行为建模甚至预测它们吗?

更具体地说:

能否用机器学习来预测 ico 的成功/价格?

让我们找出答案。

方法学

  1. 选择输入和输出。
  2. 收集和汇总数据。
  3. 准备数据。
  4. 探索并尝试理解数据。
  5. 选择一个机器学习模型。
  6. 衡量模型的性能。
  7. 保存模型。
  8. 使用模型进行预测。

1.选择输入和输出

输入

选择正确的输入和输出(在监督 ML 的情况下)对于机器学习算法的成功至关重要。在输入和你试图预测的输出之间,需要有某种关联。做到这一点的最好方法是尝试并获得一些领域知识。我对 ico 的各个方面做了一些研究,以衡量可能影响其未来价值的因素。

影响其绩效的 ICO 主要建议因素如下:

  • 开发团队的质量— 更好的团队,更好的 ICO 产品质量。
  • 社交媒体上的受欢迎程度,如 Twitter 上的关注者数量— 一个 ICO 的知名度越高,它获得资金的机会就越大。
  • **与 ICO 相关的因素具体来说——**价格、总供应量、市值……
  • **ICO 推出时的市场相关因素—**ICO 推出时,加密货币市场是否表现良好?

然后,我创建了一个我认为可能影响 ICO 价值的特性列表并检查了我是否可以从任何来源收集这些数据,并创建了一个最终的输入列表。

不幸的是,很难从数字上收集某些数据——例如,度量从事 ICO 工作的开发团队的质量——您度量多年的经验吗?这是衡量质量的有效方法吗?

此外,很难找到其他指标的数据,如 ICO 推出时的受欢迎程度。例如,很难获得 Twitter 的历史数据,即使使用 Wayback Machine ,它不会对每个页面进行索引,这使得在一个 ICO 推出时很难获得 Twitter 追随者的数量。

最终使用的功能列表:

  • 美元价格。
  • BTC 的价格。
  • 总供给。
  • 市值——代币销售期间可以购买的代币数量。
  • 可用供应。
  • 美元上调。
  • 以太坊上市时的价格。
  • 推出时的比特币价格。
  • 月 ICO 上线。
  • ICO 发布的日期,例如当月的第 8 天。
  • ICO 从哪个国家推出。
  • ICO 持续天数。

输出

ico 通常仍然是一种新的筹资方式,所以没有多少 ico 可以用来收集数据。选择六个月的期限,因为这足以观察到 ICO 价格的潜在增长,并且从可用数据来看,有足够多的 ICO 超过六个月。

最终输出:

一个 ICO 六个月后的价格。

ICOs 上收集的部分数据示例

此处提供完整数据集

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

2.收集和汇总数据

这个项目的很大一部分是数据收集。ICOs 上没有可用的数据集,因此必须创建数据集。

使用了 restful API,用 C#编写,遵循 dotnet 核心框架。这个 API 汇集了来自不同站点的数据,并将其存储在一个 Mongo 数据库中。

有些数据,如 ICO 发布的国家/地区,必须手动收集,因为无法始终从特定来源获得这些数据,因此必须使用多个网站。数据是在 2 885 个 ico上收集的。

3.准备数据

一旦数据被收集并存储在 Mongo 数据库中,就必须将数据转换成可用的数据集。从各种来源收集的所有数据都使用数据库视图进行聚合。

如上所述,收集了 2 885 个 ico 的数据,但这些数据很少,因此需要进行数据准备。

一旦数据被清除,我们就有了 189 个 ico 的信息。最后,进一步过滤,只包括存在时间超过六个月的 ico 数据,最终我们的数据集中有 109 个 ico。

准备数据时遇到的问题:

  • 不洁数据

ICO 的开始和结束日期、ICO 持续时间和 ICO 月份的值无效,已通过手动更正这些字段进行了清除。

  • 缺失数据

处理缺失数据的常用方法通常是使用平均值或中位数。然而,由于数据的稀疏性(不到 10%的数据具有大部分必需的字段),这种方法没有被采用。

相反,选择具有大多数必填字段的数据,然后从各种网站手动收集缺少的值,如 ICO 推出的国家。

  • 数据冲突

一些数据是相互矛盾的,例如,网站上有不同的开始和结束日期的 ICO 或国家推出。这是通过检查多个来源并采用一致的值来处理的。

  • 分类数据

一种热编码应用于分类数据字段——ICO
日期、ICO 发布月份和 ICO 国家。

数据收集和准备阶段的工作流程

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

4.探索并试图理解数据

我们可以通过计算相关系数和绘制散点图来研究输入和输出之间的关系。

以美元/BTC 计价的 ICO 推出时的价格与六个月后的期货价格密切相关(显然!),而其他投入与产出并不密切相关。

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

此外,至关重要的是,要确保 ICOs 数据的分布能够代表当前市场,以便有一个能够很好地概括的模型。这一目标已经实现,收集的数据与按国家划分的 ICO 分布相关的统计数据相互关联。

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

Distribution of ICO Data Per Country in ICO Omen.

5.选择机器学习模型

岭回归

一旦对数据进行了一次性编码,输入矩阵就形成了所谓的待定矩阵或胖矩阵。这实质上意味着特征比示例多(128 个特征对 109 个数据点)。

这意味着我们的回归模型易受过度拟合和多重共线性的影响。

"多重共线性是自变量之间高度相关或关联的状态。因此,这是数据中的一种干扰,如果在数据中存在,对数据做出的统计推断可能不可靠。”— 统计解决方案

为了避免这种情况,我们应用正则化。在我们的案例中,我们应用了岭回归(L2 正则化),它惩罚了非常大的权重。你可以在这里阅读更多关于岭回归的内容。

岭回归公式:

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

Source : Penn State

神经网络

我们还使用神经网络将结果与回归模型获得的结果进行比较。

对于神经网络,我们使用 tanh 激活函数,对于解算器,我们使用 Adam 解算器和梯度下降解算器。

6.衡量模型的性能

使用了两种性能测量方法— RSquared(R )均方根误差 ( rMSE)。

R ,度量模型可以解释的“方差的百分比”。高 R 值通常是好的,但并不总是如此,因为这可能意味着您的模型与数据过度拟合。你可以在这里阅读更多关于 R 的内容

**rMSE,**测量我们的模型达到的均方误差的根(误差——我们的模型预测值和实际值之间的差)。

结果

所有结果都是使用维持方法计算的,性能是根据测试数据(即模型从未见过的数据)测量的。

该图描绘了预测结果与测量结果。这显示了预测值和测量值之间的相关性。越靠近虚线的值表示相关性越好。

线性回归模型的 rMSE 得分为 0.86,R 得分为 0.62。

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

神经网络模型的 rMSE 分数为 0.58,R 分数为 0.73。

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

7.保存模型

一旦我们有了满意的模型,我们就应该保存这个模型,这样我们就可以在以后重新使用它来进行预测。

我使用了 Joblib ,这是一个 python 助手类,它是 SciPy 包的一部分,为流水线操作提供了实用程序。它使得保存和加载模型变得简单。

8.使用模型进行预测

一旦保存了模型,就可以加载该模型并进行预测,而无需重新训练模型。

以下是如何使用保存的模型进行预测的示例:

结论和最终想法

现实世界中的机器学习很大程度上依赖于你的数据。与处理模型相比,您通常会花费更多的时间来清理、准备和聚合数据。

在本文中,我们设法创建了一个模型,它可以相当好地预测 ICO 的价格。我们还展示了将机器学习应用于现实世界问题的一般步骤。

感谢您阅读这篇文章,如果您有任何想法或意见,请告诉我。😃

你可以在推特和/或这里找到我。

源代码

所有源代码都是可用的,以文档化的格式。ML 模型还包含一个 Google Colab 链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值