小步预测
复合预测的一个实验案例
揭示变量之间的抽象非线性关系是机器学习提供的效用。然而,从已知输入直接跳到抽象相关的期望值会产生最准确的结果吗?在一系列更密切相关的变量可以首先被预测并反馈到模型中以预测最终产出的情况下会发生什么?
假设这种方法的一般结果是很棘手的。一方面,传统的工程方法表明,复合误差、不确定性和多次预测迭代的舍入将导致输出预测的不准确性增加。然而,输入和输出变量之间的关系越抽象,机器学习模型就越难准确预测输出,尤其是在有多种可能的输入情况并且模型没有过度拟合的情况下。也许简单地进行实验是最好的。
为了从实验上检验这一概念,有必要获得具有数学上精确的输入和输出的数据。为此,我使用了一个六连杆机构的运动学数据,该数据是针对输入角度以及沿着其中一个杆的特定销的位置(枢轴位置)而迭代计算的。这些数据既有越来越抽象相关的变量,也有已知的输出。
正在讨论的机制如下:
Vector loops based on which the mechanism’s kinematics are analyzed
在这种情况下,DC 杆的角度旋转了一整圈,以计算每个位置的运动系数(一阶和二阶)、角度和角速度(1 度增量)。对沿着条形 DC 的销 O2 的不同位置重复该过程,同时保持条形 DC 的总长度。
运动学变量之间的一般关系如下:
分析这两种方法精度的过程包括预测一阶运动系数(h’)。第一种方法,姑且称之为“复合预测”方法,包括顺序计算θ、h、w 以及随后的 h’值。第二种方法,让我们称之为“巨大的飞跃”方法,包括使用上面给出的最终关系中的变量直接预测 h′。
数据可视化
为了直观显示运动变量的复杂性,可以参考下列图表(按照抽象程度增加的顺序,按照顺序求解的顺序)。
Linkage angles with respect to the input angle Theta 2
First order kinematic coefficients ( h ) with respect to input angle Theta 2
Angular velocities (w) with respect to input angle Theta 2 and input angular velocity w_1 (1 rad/s).
First order kinematic coefficients ( h ) with respect to input angle Theta 2 and input angular velocity w_1 (1 rad/s)
模型设置
对于这个实验,有必要创建一个在两种情况下都保持不变的模型。在不同情况下改变模型会产生太多的变量,以至于无法根据最终结果得出结论。由于这是一个回归任务,但也是非线性的,所以我选择使用神经网络(Scikit 中的 MLPRegressor 为了简单起见而学习)。手动优化模型参数后,我决定采用 150,75,25,10 的锥形隐藏层模式,以“relu”作为激活函数,500 个连续时期的截止容差为. 000010,最大迭代次数为 10,000 次。
两种情况下的培训设置;然而,会有很大的不同。“巨大飞跃”方法将在数学求解最终结果所需的最少数量的输入变量上进行训练。“复合预测”方法将基于中间变量(θ,然后是一阶运动系数(h 值),然后是角速度(w 值),然后是二阶运动系数(h '值)的连续预测来求解。
结果
提醒一下,两种情况下的输出变量都是 h’3、h’4、h’5 和 h’6。此外,平均 R 值(决定系数)将用于比较结果。
让我们从分析“巨大飞跃”预测案例的结果开始:
Second order kinematic coefficients predicted based on input theta 2 and link lengths
可以看出,这些预测并不那么精确。它们确实显示了一个具有合理累积准确性的总体趋势;不过波动比较大。这些结果不适合任何工程任务,并且不是最佳的。
现在,让我们看看复合预测方法在整个预测过程中的结果。
Predicted values of theta based on link lengths and input Theta 2
First order kinematic coefficients ( h ) predictions based on link lengths, input theta 2, and theta prediction values
Angular velocities ( w ) based on link lengths, predicted theta values and first order coefficients
Second order kinematic coefficients ( h’ ) based on link lengths, predicted theta values, first order coefficients, and angular velocities
讨论
基于决定系数,“复合预测”方法的结果远比“巨大飞跃”方法更准确(平均 R 为 0.9773 对 0.8745)。尽管基于预测值进行预测会产生复合误差,但这是事实。给定必要的输入参数,输入和输出变量之间的关系对于“巨大飞跃”方法中使用的当前模型来说简直太抽象了。另一方面,该模型足够稳健,能够对中间变量进行准确的顺序预测,最终达到对最终产出的准确预测。
我想承认这些结果有一些局限性;虽然,这远远不是一个完整的列表。首先,网络的大小在案例之间没有改变。也许如果对用于“巨大跳跃”方法的网络进行足够的调整,它将具有更好的准确性。第二,测试规模只有几千个数据点,拥有更多可能会改善结果。第三,网络参数是通过几次反复试验选择的,决不是要理解为这个特定任务的最佳网络。第四,决定系数可能不是给定模型有效性的最佳衡量标准。
结论/TLDR
我希望通过这篇文章和小实验传达的是,可能有这样的情况,即做出更小、更简单的预测,直到最终的预测,这是一个值得探索的策略!例如,预测土地的价值、建筑物的价值、家具/器具的价值等,而不是基于一堆指标来预测房子的价值。然后根据这些值进行最终预测。
我并不打算把这个测试的结果作为一般规则来传达,只是作为一个发人深省的例子来提出这个问题,以便进行更深入、更详细的探索。
如有任何问题,请联系我们。此外,如果有人想要数据集,请给我发消息,我可以让它可用。
小胜利:用 Django 和 AWS 构建一个 Web 应用并建立信心
^^^That 是我用手机在电脑屏幕上拍的照片,前几天我高兴地把它上传到了我的个人社交媒体上。(是的,我真的是那种极客…)它代表了我的第一个 web 应用程序原型的成功测试,该应用程序在现实世界中运行(托管在我建立的免费 AWS 实例上)。我是 11 月 8 日拍的上图,原型机还在成功运行。
我称之为一个小小的胜利,因为我意识到,对于技术领域更有经验的人来说,这似乎非常容易。但对于一个在我今年早些时候参加数据科学训练营之前从未上过正式计算机科学课的人来说,终于更全面地理解了 web 应用程序这样的东西是如何工作的,这是一个启示。我自己能做到这一点真是太棒了。
Ooh, what’s that under there? Looks exciting!
这篇文章是我非常喜欢的 Chipy(芝加哥 Python)导师项目的要求系列文章的第三篇。自从我在的上一篇文章以来,在我曾经很有能力的导师乔·贾辛斯基的帮助下,我已经了解了姜戈很多新的方面。今天,我想我会把重点放在这个应用程序将要做的数据收集上,而不仅仅是为用户提供一个微小的服务。
正如我之前提到的,我是一个完全的数据极客——就我而言,一个人能收集的数据越多越好。我长期使用基于 SQL 的数据库,包括运行我的主要客户项目MyBodyGallery.com的大型数据库。我很高兴 Django 自带了创建 SQLite 数据库的内置功能(如果我想的话,以后我可以改成更好的 Postgres 或 MySQL)。我不一定需要一个数据库作为这个应用程序的一个功能(我没有存储数据的,但它是一个受欢迎的附加功能。
我这次指导的主要目标是让我创建的数据科学模型(一个纹身书流行度计算器)在现实世界中运行。我本可以让 web 应用程序告诉人们计算器的答案,然后消失在太空中,而不存储他们的查询或其他任何关于他们或他们与应用程序的用户交互的信息。但是第二个 Joe 向我提到,我们可以将用户查询存储在一个表中(在 Django 中称为模型,只是为了让事情变得更加混乱——阅读文档这里),这让我的大脑转动起来,我想到了一些其他类型的数据,这些数据非常适合存储用于未来的分析项目。
With all the right data, we can take over the world!!! (I’m probably dating myself with this cartoon reference.)
我成功的 web 应用程序的手机照片可能很有吸引力,但这里有一个非常基本的原型应用程序界面的截图,用户可以在这里输入他们的书名查询。屏幕最初看起来是这样的:
Pink is my favorite test color.
然后,一旦用户输入他们的查询,它会在同一个页面上输出如下内容:
Note: Right now all the queries result in a hard-coded number of 20 libraries — the web app does not incorporate the calculator model yet.
用户查询存储在一个 SQL 表中(在 Django-speak 中称为模型),在本例中称为 QueryLog。Joe 教我如何进入并充实表将收集的数据。Django models 文档有许多可以包含的字段类型——如果您有兴趣的话,一定要读一读。稍后我可能会添加一些其他字段,但是现在我将收集一些显而易见的信息,比如查询本身、它是否被查看过、它是何时创建的以及它最后一次被修改的时间。乔建议添加一个“desc”字段,这基本上允许我在输入任何特定查询后进行记录;我也可以将这个领域用于其他各种可能的用途。
对我来说,重要的是跟踪查询来自哪里。这在表中有两种形式:首先,我想记录原始网站(这将在以后的课程中介绍——“website _ origin”的代码现在只是一个占位符)。至少,我会把这个放在我的 centerfortattoo.org和 tattoohistorian.com网站上,这样我就能,比如说,快速地找出哪个网站的流量更大。我也有一个想法,我可以把这个代码放在 Github 上作为开源,其他面向纹身的网站也可以嵌入计算器。如果发生这种情况,我想知道这些查询是从哪里发出的,以此来跟踪还有谁在使用这个应用程序。
其次,我认为跟踪每个查询的 IP 地址会很有趣。我可以利用这些 IP 来分析用户的地理分布。Joe 建议使用 Django-ipware 来实现这一目的,它确实有效(我让我值得信赖的测试员,也就是我那令人敬畏的男朋友从远处输入一些查询来进行测试)。下面是我的代码中概述所有数据库表字段的部分:
This models.py script sets up all the different types of fields in the QueryLog table. I can add more if I want to. I just then need to run manage.py make migrations and then migrate to make those additions actually happen.
当您运行构建所有股票框架代码的初始 Django manage.py startapp 命令时,Django 会自动创建一个漂亮的管理仪表板。您可以通过在测试 IP 的末尾添加/admin/并导航到它来访问这个仪表板。您还需要将自己设置为超级用户才能使用它。这是通过 AWS 运行的管理仪表板的外观——当你从自己的机器上运行服务器时,它看起来更好,但 Joe 提到我们必须在托管版本中调整一些东西。但现在还有效,所以谁在乎呢?
这已经是一个很长的帖子,所以我没有时间来解释这个问题,但 Joe 教我如何添加代码,以便在“计算器”(这是这个应用程序的名称)下的管理面板中,你可以访问“查询”,它提供了 QueryLog 表中的所有数据。瞧:
目前,我们将管理仪表板 QueryLog overview 设置为显示查询、查询创建日期和任何修改日期。稍后我会添加一些我想看的其他东西的专栏,比如 IP 和网站来源。
是的,在测试代码的时候,你肯定会对我的思维状态有所了解。“他妈的耶”,“我喜欢猫!”,还有《狗真恶心》(那只狗刚走过来,流了我一胳膊的口水)肯定是令人兴奋的、有头脑的书名。我要补充的是,问题 14-17 来自我的男朋友,我想这告诉了你他有多棒。得到一句“我爱你!”通过你的原型网络应用程序发送信息,甚至发送两次,是非常令人惊奇的。
Love you right back, honey! (Readers: I’m a woman in tech. I can be a bit sappy. Deal with it.)
如果您单击用户输入查询条目的行号之一,您可以看到关于每个查询的更多信息。你也可以进去改变这里的一切。您还可以在管理面板中将某些字段设置为不可更改的(您可以在这里看到创建和修改日期以及 IP 的示例——这提醒了我也需要对查询本身执行此操作)。下面是我们设置 IP 跟踪之前的完整查询记录的一个示例(因此是硬编码的 1.1.1.1 占位符地址):
好了,今天有时间就写这么多。但是请继续关注:尽管这个项目只需要一个由三部分组成的博客,我肯定会创建至少第四部分来宣布最终项目的启动和运行。我想我能做到。我知道我能做到。我给这篇文章加了副标题:建立一个网络应用程序……建立自信是有原因的。
我在这个新冒险中的每一步都让我对自己的编码技能越来越有信心。我甚至考虑在 40 多岁的时候重返校园,攻读某种计算机科学学位,以增加我的收藏。(我真的很后悔没有从一开始就获得这个学位,尽管幸运的是,今天我们有很好的继续教育机会,比如针对我们这些处于职业生涯中期的人的训练营和导师项目。)
对于我的下一步,至少,在导师计划于 12 月中旬结束之前,我需要花一点时间清理计算器模型(及其各种子模型)并为用户输入的查询编写一个适当的数据管道。然后我需要想出如何将它嵌入我现有的 Wordpress.com 网站(目前的想法是用 iframe,但我知道 Wordpress 用 iframe 会很奇怪…)。咻。我能做到!如果我能让它看起来漂亮,那将是锦上添花。我一定会得到一个漂亮的蛋糕来庆祝!
Belle’s got the right idea. Maybe some pastries and wine are in order too 😃
智能城市:普通市民一直是缺失的一环
首尔一名学生的一条推文让每年的汽车出行减少了 230 万次
当你听到的都是自动驾驶汽车和人工智能等高科技概念时,很容易感到与智能城市的对话疏远。但到目前为止,实际建设智能城市的经验告诉我们,我们必须首先从人开始。当城市在搞清楚技术的用途之前就购买了昂贵的技术,这就犯了错误。在阿姆斯特丹,市民不仅提供想法,还提供资金、人才和专业知识来创建真正需要的智能城市解决方案。
第一步:合适的人——公民、政府和人才
2012 年,首尔一名学生的一条推文使每年的汽车出行减少了 230 万次,每年为居民节省了 40 万美元,并使城市在夜间更加安全。这条推文是对市长的一个建议,移动电话公司的电话和短信数据可以用来绘制城市地区的深夜出行地图。这些数据可以用来在首尔地铁停止运营的午夜和凌晨 5 点之间为公交车引入更好的路线。当市长将这个想法转发到他的脸书主页上时,3 万多名居民立即支持了这个计划。
韩国电信免费提供了超过 30 亿条匿名电话和短信记录,他们与首尔市政府一起对这些记录进行了分析。因此,如果一个人用他们的移动电话从市中心打电话,然后,一个小时后,从城外发短信,这将被标绘为一次旅行。他们很快确定了最繁忙的路线,并提供了“夜猫子”巴士来覆盖它们。试点项目立即取得了成功,除了已经提到的改进之外,还减少了非法出租车的数量,减少了污染,振兴了深夜经济。
与公民接触至关重要
智慧城市要想运转,首先需要的是人。使用交通工具、呼吸空气和制造废物的是公众。他们产生的数据是对诊断问题和找到解决方案都至关重要的反馈。过去,城市只是打击无证出租车,或者依靠耗时的人工问卷来确定该地区最需要的交通工具。首尔的解决方案使用已经数字化的预先存在的被动数据进行高效分析。我们不要忘记,首先提出解决方案的也是一个公民——避开了在市政厅召开冗长而昂贵的解决问题会议的通常过程。从数以千计(如果不是数百万的话)不同经验和专业知识的公民中众包想法,比询问一小组政府官员要好。
合适的人并不总是最明显的选择
然而,你仍然需要合适的管理人员来协调你的智能城市。在首尔夜班车事件中,如果市长没有在社交媒体上与市民互动,并积极选择分享推文,该项目就不会存在。在运营阿姆斯特丹智能城市六年后,Ger Baron 向市政府建议,他们需要一名首席技术官来调解其智能城市过渡。这既是为了防止私营企业的需求超过公众的需求,也是为了确保这座城市愿意灵活地制定法规,以跟上创新的步伐。该市拒绝了 Baron 提出的候选人,而是更愿意给他这个职位,因为他有这样一个新项目所需要的确切经验。
当荷兰首都的市政当局决定他们也需要一个“夜间市长”来解决该市政党区的噪音、垃圾和暴力问题时,他们举行了投票。一个由五名专家、音乐节与会者和公众组成的小组选择雇用一名经验丰富的俱乐部发起人,而不是另一名公务员。Mirik Milan 已经与酒吧老板和用户建立了关系,了解规则,最重要的是,对夜生活有着真正的理解和热情。在接受《卫报》采访时,他说他想做些不同的事情,因为当人们抱怨时,城市当局的本能是**“实行宵禁,收紧法规,关闭场所,禁止东西。这是可以理解的:如果你在市政厅,对晚上发生的事情毫无头绪,你怎么能制定好的法律呢?”**。
他所不具备的是官僚专业知识或权力,这就是为什么与日间市长办公室的联系如此重要。米兰告诉花旗集团,他最自豪的成就之一是能够向场馆授予 24 小时许可证。他确保他们不在居民区,并能证明他们会策划他们的议程,以确保他们为城市增加文化价值,而不仅仅是促进夜生活和旅游经济。此外,当俱乐部成员在凌晨 5 点被驱逐出会场时,街道上突然出现了很多混乱。24 小时营业的许可证让夜晚更自然地结束,这意味着当人们离开时,他们是在一个可管理的流中这样做,并直接回家睡觉,而不是继续聚会。对俱乐部和居民都好。
解决方案应该惠及所有人
24 小时营业执照之所以成为可能,是因为与阿姆斯特丹夜生活相关的反社会行为和犯罪减少了。同样,解决方案来自于选择正确的人。该市的警察太忙了,无法对每一个电话作出反应,等到有人向市政当局投诉时,处理几天或几周前造成问题的人已经太晚了。所以安装了“方形主机”。他们是训练有素的社会工作者,可以充当警察、居民、俱乐部和狂欢者之间的无所畏惧的交汇点。虽然他们的主要目的是让参加聚会的人保持秩序,但他们也可以为那些寻找方向、选择哪个俱乐部或最近的厕所的人提供友好的建议。下一阶段包括计划创建一个应用程序,以便居民可以立即将任何问题转达给社区官员,社区官员将通知地面上的广场主持人。
你需要的最后一群人是人才,那些拥有促进创新的技术专长的人。在首尔,数据科学家必须用算法或人工智能来收集和分析证据。市长想要的市民投诉实时应用程序可能需要前端和后端开发人员,UX 和用户界面设计师。因此,想要成为智能城市的人必须吸引人才,激发创意,并为创新者的蓬勃发展提供支持。借助城市数据、阿姆斯特丹智能城市挑战赛和循环挑战赛等激励措施,阿姆斯特丹正积极推动变革,通过一个共同的目标将各个群体联系起来——改善城市区域。就国内而言,荷兰已确保其拥有具有竞争力的基础设施、优惠的税收和稳健的国际旅游框架,这也是网飞和优步等几家大型科技公司将欧盟总部设在阿姆斯特丹的原因。
对于创业公司来说,阿姆斯特丹是一些孵化器、加速器和政府支持的计划的所在地,如 StartupDelta 和 Startup Amsterdam。稍远一点的代尔夫特大学继续培养年轻人才,他们与美国阿姆斯特丹的 AMS 学院和麻省理工学院密切合作。埃因霍温仍然被认为是世界上最具硬件创新的城市之一。根据经济合作与发展组织的数据,2013 年,该市平均每 10 万居民拥有 23 项专利,与之最接近的竞争对手圣地亚哥只有 9 项。
步骤 2:基础设施—连接性、隐私和安全性
正如我们刚才提到的,在许多项目成为现实之前,您的智能城市将需要高速宽带、传感器和物联网连接等基础设施。然而,它在我们的列表中排在第二位,因为在过去,城市规划者在知道它将有什么用途之前就仓促行事,大量投资于基础设施。这就是为什么你必须首先依靠人们来确定问题并提出解决方案,这样你就知道需要建立什么。
但是,如果没有收集和分析城市数据所需的传感器、节点和应用程序网络,这些智能城市计划很难奏效。对阿姆斯特丹来说幸运的是,荷兰政府已经投资了高速宽带。然而,对于像物联网这样的庞大网络来说,大都市需要低电池使用量、远程和低带宽的网络,而 LoRaWAN(远程广域网)正是这种网络。它允许东西在没有 3G 或 WiFi 的情况下与互联网“对话”。
连接物体、设备和人
物联网成立于阿姆斯特丹,是一个“全球化、众包、开放、免费和去中心化的物联网网络”。他们的设备成本大约是目前最流行的 LoRaWAN 网关的 20%,提供 10 公里的覆盖半径,服务多达 10,000 个节点。网关是所有事物和互联网之间的路由器,而节点是附在每个“事物”上使其连接的设备。例如,可以在运河船上放置一个节点来探测水。如果节点中的传感器检测到泄漏,它将通过 LoRaWAN 网络向网关无线发送警报,网关连接到互联网,并可以向您的手机发送消息。
目前,在各大洲 23 个国家的 82 个城市中有 1380 个活跃的网关。24777 名开发人员已经注册,他们已经部署了 11444 个应用程序。考虑到每个网关仅花费€200 英镑,而且仅用 10 个网关就覆盖了整个阿姆斯特丹市,这还算不错。该公司现在还为开发人员推出了支持 LoRaWAN 的 Arduino 单元,以及一种更简单的设备(node ),该设备已经包含温度、运动和光线传感器,适用于那些希望参与其中但不太懂技术的人。本着该项目的精神,他们也将开放所有的代码和设计。
信用:下一个网络
平衡公私利益
物联网是利用众筹来避免官僚主义拖延的一个例子。**说到智能城市,政府制定政策和立法的通常方法可能效率低下。**随着数据的实时收集和创新发展步伐的加快,预测或调整法规以适应新趋势和变化变得越来越困难。直到最近,阿姆斯特丹仍在使用基于五年前统计数据的交通管理模型,这些模型已不再适用,因为自 2011 年以来,汽车使用量下降了四分之一,摩托车使用量增加了一倍。
然而,一个有助于引导城市发展的独特愿景是必要的,以避免过去规划不当的发展所犯的错误。经常被引用的例子是美国州际高速公路系统的破坏性影响,它很好地改善了各州之间的交通,但是,通过直接穿过市中心,该项目也破坏了街区,导致大量人口和企业在郊区流离失所。通常,越是贫困的公民损失越大。
正如阿姆斯特丹的第一任首席技术官 Ger Baron 必须尽力平衡公共和私人利益一样,同样的规则也必须适用于全国和全世界。这正是联合国试图通过其国家城市政策指令鼓励的。该政策侧重于为城市的长远未来发展一个包容性的全球基础设施。这意味着为所有社会成员服务,不论性别、种族、财富、阶级,也不论他们是否喜欢在凌晨睡觉或聚会。它试图涵盖更广泛的问题,如生产可持续能源和回收日益减少的原材料库存,但也对每个城市特有的较小问题提出建议,如阿姆斯特丹运河船上的大声音乐或巴塞罗那的停车位。在 Eli5,我们为 Mobypark 创建了一个平台,这个应用程序允许你在世界上最繁忙的一些城市租赁停车位,包括我们的家乡阿姆斯特丹。与一些路边停车费相比,这为司机节省了高达 70%的费用,平均 20 分钟就能找到一个停车位,这也意味着租用的停车位得到了充分利用。此外,停车位所有者可以从租赁中获得少量收入。
在数据共享方面重建信任
当许多人想到数据时,他们想到的第一个词是“隐私”。公众必须有信心,不仅他们的信息在城市数据库中是匿名和安全的,而且他们可以相信政府会负责任地使用他们的数据。这意味着使用公共数据来造福城市,而不是被企业滥用来获利。
DECODE——即分散化的公民数据生态系统——是一个为期三年的项目,由 EU-资助,旨在改善数据共享的体验。他们的一个试点项目将于 2017 年底在阿姆斯特丹和巴塞罗那推出,1000 名测试人员将能够准确选择他们想要上传的关于自己的信息。重要的是,他们还可以决定如何使用以及由谁使用。因此,他们可以选择参与一个特定的计划来管理他们街道上的垃圾,同时向私营公司隐瞒这些信息。DECODE 还将利用区块链技术来确保信息安全,防止黑客攻击。
来自英国创新慈善机构 Nesta 的 Tom Symons 正在研究 DECODE,他告诉《新科学家》杂志(New Scientist)说,“人们并不能真正控制他们的数据”。DECODE 已经公开批评网络公司不共享他们从公众那里收集的数据,以造福社会,就像韩国电信对夜猫子风险投资所做的那样。
步骤 3:合作:国际、国家和个人
所以现在你有了合适的人,技术,法律基础设施,来自你的城市和市民的数据,你就有了开创性的智慧城市想法。
现在你需要开发、验证和实现你的项目。为此,你必须找到资金,最好是一些专家的指导。您可以通过地方、国家或国际层面的捐赠、众筹、激励、竞赛、奖励、公共部门支持或私营部门投资来筹集资金。
正如物联网所证明的,众筹可以成为项目融资的直接解决方案。鹿特丹的另一项提议是,在一个办公楼开发项目告吹后,建造一座临时木桥,连接该市被公路和铁路封锁的部分地区。8000 多名捐赠者每人给了€25 英镑——奖励是把他们的名字刻在一块木头积木上——理事会批准了这个计划。Luchtsingel 桥现在有 390 米长,有 18 个桥,连接鹿特丹的北部和中心。荷兰在线平台 Voor Je Buurt 现在每年处理数十万欧元的公民众筹捐款,以资助对其社区至关重要的项目。
用人们的语言与他们交谈
由于他们自己忙碌的生活,很难让社区对可持续发展这样的大问题感到兴奋。但你不能只是假设公民想要什么。否则,你的冒险会失败。碳扫盲项目认为他们找到了答案。去年,他们开展了一项让曼彻斯特及其周边地区的人们对气候变化感兴趣的计划,最终招募了令人印象深刻的 4000 人。他们的方法只是不关注你认为重要的事情,而是关注对你试图参与的社区来说重要的事情。这篇阿姆斯特丹智能城市文章中引用的例子是减少开车去看比赛的足球迷的数量,不是告诉他们这对环境更好,而是提到他们关心的事情,如省钱,不用担心停车,与朋友一起旅行,可以在比赛时分享啤酒。或者通过与团队本身合作来传达信息,并促进对作为一个集体共同努力减少排放的自豪感。
我们现在已经兜了一圈,回到了人民身边。通过合作,你让更多的人参与进来。更多的人意味着更多的数据。更多的数据意味着更多的项目,更多的专家。他们需要基础设施和援助来启动他们的项目。所有这些造就了一个智能城市。
2017 年智能家居状况
Shiny sparkly hyper-futures always turn people off. This looks like the childless home of an Alpha class in Gattaca.
智能家居仍然是一个年轻的类别,但它反映了数字化、连接性、效率和安全性的深刻趋势。对于平台领导者来说,进一步殖民家园也是一场漫长的游戏。更有趣的是,这可能是对我们正在出现的气候危机的必要回应。然而,随着这一类别的成熟,在建立信任和价值方面存在巨大挑战。
虽然我们似乎正在走向智能结构的未来,这些智能结构能够感知其居民,并积极地模拟和管理他们的需求以及房屋的物理需求,但智能家居的全面承诺尚未实现,可能需要十年才能实现任何有意义的存在。
市场
分析师估计,到 2020 年,该市场的价值将在 500 亿美元至 1500 亿美元之间——这是一个相当广泛的分布,现在包括 wifi 扬声器和 Alexa 语音助手等产品,但大多数都没有集成的家庭管理系统。一个支持 Spotify 的 wifi 扬声器几乎算不上物联网,也无助于家庭的智能。类似地,使用智能手机控制照明也只不过是界面更新。因此,值得注意的是,“智能家居”的标签正逐步被“互联”和“智能”所取代。
不进行大规模的改造和更强的人工智能,更便宜的公用事业账单和知道你是谁的房间的承诺仍然遥不可及。
目前的智能家居市场由安全和娱乐主导,这两者都不是新的类别,而且都主要依赖于愚蠢的技术。从战略上讲,安全性是构建更多服务的支柱和(希望)收入渠道。娱乐主要是由集成了流媒体音乐服务(如 Spotify)的无线扬声器驱动的。
在这些部分之后是连接的固定装置,如照明、门铃和锁,以及各种传感器。这些往往服务于更高端的早期采用者和技术极客。也有一些利基交钥匙家庭自动化供应商,主要迎合富裕的技术人员,但普通人不太关心不均衡的未来。
不进行大规模的改造和更强的人工智能,更便宜的公用事业账单和知道你是谁的房间的承诺仍然遥不可及。然而,智能家居的愿景继续推动着双方的市场,朝着未来努力,在未来,家居可以主动降低我们的水电费,管理我们的废物循环,简化我们的时间表,个性化我们的娱乐,保护我们的家庭,保护我们的健康和福祉。
玩家
消费物联网和智能家居市场一直很大&很分散,但现在显示出顶级平台玩家越来越占据主导地位。市场可以分为三组提供商:有线服务、网络巨头和第三方设备制造商。
目前的市场更多的是由供应和愿景主导,而不是需求。
在美国,美国电话电报公司的 Digital Life & Comcast 的 Xfinity line 各自销售基于其现有集线器构建的智能家居解决方案,主要销售支持第三方设备生态系统的远程监控安全选项。这一策略主要是让人们呆在他们的客厅中心,并通过一些不久的将来的机器用户来对冲电话用户的下降。值得注意的是,威瑞森停止了自己的智能家居努力,转而支持其合作伙伴 Nexia。
网络巨头们也在用他们的网络中心占领客厅,但像亚马逊、谷歌和三星这样的数据驱动提供商更有兴趣把它们作为进入他们的云的入口。他们推销娱乐解决方案,如互联网接入、音乐流媒体和灯光控制,吸引互联网用户,而不是有线电视和电信公司的电视用户。
从历史上看,苹果的这种试探性姿态是一个信号,表明他们认为这个类别还不成熟。
亚马逊与 Alexa 的区别在于,它的语音界面带有 API。他们的平台主要是你家的百货商店,并增加了按需仪表盘按钮。谷歌通过 Nest 和 Nest Cam 追求家庭设施管理和安全,最近推出了其 Alexa 竞争对手 home,据传将宣布一个家庭安全解决方案。他们提供了一个与谷歌无处不在的数据机器紧密相连的高端技术产品系列。三星已经采取了一种围绕众多传感器类型构建的模块化方法——一种更实惠、更独特的产品,迎合了想要为家庭安装仪器的修补匠。
值得注意的是,苹果拥有 HomeKit,这是一个用于数据管理和可视化的开发平台。他们没有制造品牌设备,更喜欢依赖第三方供应商,如飞利浦 Hue 照明系统。从历史上看,苹果的这种试探性姿态是一个信号,表明他们认为这个类别还不成熟。
虽然互操作协议主要集中在少数几个标准上,但 M&A 的活跃表明了巨大的机会。事实上,目前的市场更多地是由供给和愿景主导,而非需求。
驱动程序和启用程序
消费物联网设备的爆炸式增长得到了资金容易获得的创新者的支持,这些创新者能够获得廉价而强大的组件和全球制造链。这是一系列试验,试图看看什么是坚持。设备出现了寒武纪大爆发,但几乎没有全面整合。大部分人还是看不到价值。
这是向家庭行为剖析迈出的一步,这对于提供有意义的个性化服务是必要的,但也开始让人感到侵扰和潜在的危险。
采用的主要障碍是成本和不便。随着市场证明价值,组件成本将稳步下降,但在深度学习解决方案投入使用之前,不便将是一个障碍。这种解决方案将利用声音、视觉、数据 API 和训练有素的分类器,而不需要给你的家重新布线。
从主电流中通过算法提取设备特征的能力已经显示出前景。这可以使学习系统通过电器监控来优化能源使用,对水和 HVAC 有类似的模型。由 GE 和 LG 等公司领导的烤箱等联网电器开始获得预测性维护能力,但大型电器可能每 10 年才更新一次,因此存在翻新障碍。
像 Nest Cam 这样的门口摄像头开始接受机器视觉生物识别。这是向家庭行为建档迈出的一步,这是提供有意义的个性化服务所必需的,但也开始感觉到侵扰和潜在的危险,这取决于服务提供商的数据卫生。
Toto 提供了一种可以进行简单代谢分析的马桶,但改造升级周期又是一个障碍。大多数房主永远不会更换他们的陶瓷马桶,如果他们这样做,他们可能不会选择在房子的墙壁之外分享他们最隐私的数据。
随着家庭面临更直接的经济和环境压力,更积极的气候变化可能会推动更多的采用。
解决方案还需要更加灵活和本地化,以应对区域压力,特别是在全球变暖和气候变化重塑环境条件的情况下。例如,一些家庭需要控制空气质量,防止灰尘侵入和过敏原,而其他家庭可能需要优化水的收集。随着家庭面临迫在眉睫的经济和环境压力,更积极的气候变化可能会推动更多的采用。
这一切都在持续的当前转移更多的能力(和责任)回到边缘。电力、食物和水的集中管理不如分散、局部和自我维持的管理可行。
这一切都在持续的当前转移更多的能力(和责任)回到边缘。
为了实现显著的市场渗透,互联解决方案将需要成为新住宅的一部分。正如建筑法规引领绿色发展一样,将更多联网设施引入新住宅也是必要的(人们可能会认为太阳能渗透率是联网家庭解决方案需求的一个指标)。改造之路只能走这么远,如果有承包商参与,许多人不会在意。然而,我们只能通过修复现有的大量住房来减少能源浪费。因此,广泛的增长将由要求下一代节能电器的进步建筑规范下的新住宅引领,随后是翻新的竞争和监管压力。
挑战
有许多挑战应该贯穿于产品策略中。这些问题包括漏洞和入侵、恶意软件和僵尸网络、关键服务中的漏洞、对隐私和数据所有权的担忧、无利可图的遗留平台的衰退以及平台所有者规定条款和服务的能力。这些都是在住房拥有率下降和西方经济增长降温的背景下制定的。未来的家很可能不再是乌托邦式的幻想,而是更注重性价比。
随着市场的增长,如何处理数据和用户如何管理信任将是一个巨大的挑战。
一个基本的挑战是可用性。机械锁很容易使用,电灯开关也一样。拿起智能手机,进行身份验证,启动应用程序,浏览菜单来开灯,并不是一种持久的替代方式。因此,飞利浦色调水龙头,但许多供应商仍然只是使基本任务更加困难。
比可用性更深的是,家是建立在信任和安全之上的。增加连接性为世界打开了更多的孔,正如最近婴儿监视器被网络不满者攻击的故事所显示的那样。同样, Defcon 用一个伪造的客人 ID 击败了八月锁。在采用率足够高以提供有趣的攻击面之前,漏洞通常不会被发现。更多的用户引来更多的入侵。
如何处理数据和用户如何管理信任是一个巨大的挑战。亚马逊的 Alexa 是一个电子商务前端,在你家里有一只耳朵(而且它可以被传唤作证指控你)。Alexa 团队的创始人之一,【Nikko Strom 说“我们收到了数量惊人的数据,我们可以对其进行处理。”这是关于信任:你希望公司在你的房子里攫取更多的土地份额吗?许多用户不会采用将数据传输到第三方的互联家庭解决方案。
这是跨服务生态系统分布功能的一个非常真实的结果:所有权、访问和责任越来越多地在用户和提供商之间共享,并有硬 EULAs 来描述它们。
此外,企业数据所有权已经超出了修复和修补的范围。在制造商禁止他们在现场进行自己的维修后,农民们正在从乌克兰下载非法黑客软件,以便快速修复他们连接的 John Deere 拖拉机。随着采用的增长和用户开始理解其品牌锁定的含义,这种情况将在互联家庭领域出现。
这种水平的读写能力正在慢慢被那些被锁在系统之外或者面临功能被弃用的用户所了解。一位智能家居用户最近发布了他们家中加湿器漏水的图片,因为网络证书过期了。
这是跨服务生态系统分布功能的一个非常真实的结果:所有权、访问和责任越来越多地在用户和提供商之间共享,并有硬 EULAs 来描述它们。商业领袖们首先考虑的是如何将他们的平台更深地融入我们的生活。第二,关于如何帮助我们在一些增值能力。
家庭必须带来稳定,而变化威胁着这种稳定。
这给我们带来了最大的挑战:家庭必须带来稳定,而变化威胁着这种稳定。庇护所、安全、家庭、隐私、营养、休息——忽视这些或试图改变这些品质或无意中改变这些品质的技术将会失败。
向前看(略)
在发达经济体,房屋和建筑正朝着更高效、更自动化的未来缓慢前行。未来的互联家庭解决方案将由两个相互冲突的引擎形成:个人授权和平台锁定。它们将拥有更多传感功能,与现有设施和设备的耦合更紧密,与用户配置文件和时间表的集成更紧密,以及复杂的深度学习系统,可以对机器和居民进行观察、分类、建模、预测、管理和推荐。许多这些功能将由服务提供商远程管理和维护,他们的目标和责任与用户不同。
未来的互联家庭解决方案将由两个相互冲突的引擎形成:个人授权和平台锁定。
不能有效地将信任传递到家庭中的供应商将会失败,他们公开的失败将会抑制市场的采用。一个强大的差异化优势将通过将功能和数据完全保留在现场来增强家庭及其成员的能力——这是大多数数据优先服务提供商无法想象的。
创新者正试图解决由一系列深层潮流驱动的需求:在 VUCA 世界中寻找安全和稳定;加速人类世的气候混乱;提高家居效率以更好地管理资源和财务开销的需求;我们通过数字网络的无处不在的连通性,以及我们的日程、责任和关系的数字化;智能手机让我们期待直接、易用的界面和功能,以及跨界面点的配置文件和偏好的连续性。
但是家的变化是缓慢的——它是包裹在信任和安全周围的基础设施,嵌入在冰冷的建筑规范和繁琐的成本结构中。这仍然是一个有远见的长期游戏,有许多障碍要克服。
智能公共交通
我经常乘坐公共交通工具;一辆去地铁站的公共汽车,在登上去伦敦郊区的火车之前,在地铁上打开一两个开关——这就是我每天早上去上班的旅程。天气好的时候,我花 3 ~ 4 个小时通勤;想象一下糟糕的一天需要多长时间?
美好的一天是在到达公交车站的 3 分钟内赶上公交车,每趟地铁的等待时间不超过 2 分钟,火车上没有延误。不错吧?那么什么构成了糟糕的一天呢?幸运的是,我只有大约 235,459,607 个例子,因为公共交通系统太棒了。
几周前,我在去雷丁的路上,决定途经伦敦帕丁顿。那天气温大约是 27 度,不幸的是我不得不搭贝克鲁线;可以说是有史以来最糟糕的地铁线路。为什么?车厢老旧、布满灰尘、肮脏,而且几乎没有通风或冷却系统。我终于到达了帕丁顿,在流了大约 2%的汗后,我震惊地发现,我应该赶上的火车——一整列火车——被取消了,因为“一名工作人员不在”。我不得不额外等了 20 分钟,和大约 70 多名乘客一起等下一趟火车。震惊甚至不足以形容我的感受。一列火车怎么会因为一个员工没来上班而被取消呢?更糟糕的是,我不知道哪个员工缺席了——是司机吗?可能是警卫?或许是清洁工?现在,我不责怪这个人,因为他们可能有一个合法的理由;疾病,假期或其他什么。更确切地说,我指责这个系统允许如此多的事情发生在一个单点故障上。
每延迟一分钟,对车站资源(站台空间、厕所、售票系统等)的人均压力就会增加一分钟。随着站的大小,这变得非常大和昂贵。
我昨天 18:00 左右在伦敦滑铁卢——艾格姆有延误,影响了从温莎&伊顿到雷丁和滑铁卢的整条线路——那里人满为患,可能比平时多了 200 多人。如果在那一瞬间出现紧急情况,人们会如何出站?有多少人会在潜在的踩踏事故中受伤?我可以整天讲故事,但这不是这个博客的目的。
令人尴尬的是,火车/铁路等公共交通系统不断受到天气(是的,即使是一点点降水也会造成重大问题)、信号故障、工作人员缺失或不足,当然还有“偶尔”罢工等问题的困扰。
我们利用一些运输系统已经超过 150 年了,但仍然不能把它做好;也许是时候将其中的人为因素最小化,让数据和数据科学一起发挥更突出的作用了。
想象一个 24 小时,365.25 天,智能设计的公共交通系统。没有罢工或信号故障的一致而舒适的服务。我一直在使用地铁,所以它们将是这篇文章的主要焦点(是的,我知道标题是智能公共交通)。然而,所提到的一切都可以适用于任何形式的公共交通——火车、公共汽车、电车、出租车等。不管怎样,这一切看起来会是怎样的呢?它是如何工作的?
第一步是将所有形式的公共交通转换为电动或绿色燃料系统。这将有助于环境的脱碳,使国家变得更加可持续和生态友好。公共交通系统节省的能源最终会减轻国家电网的压力。
为了提高无障碍性,每个车站都将配备无障碍通道、盲文和手语设施。为了降低复杂性,一张类似于 oyster 的预付卡将允许进入整个英国的任何交通系统;消除了对所有那些蹩脚的纸质机票、旅行卡、装满零钱的口袋和许多位于后端的冗余遗留系统的需求。
地铁将安装传感器,以精确测量车上有多少乘客,并根据这些数据调整网络服务——当乘客密度高时,增加地铁数量,当乘客密度低时,减少地铁数量。大约 5 ~ 7 分钟的最大等待时间将确保试管 24/7 运行。
传感器也将嵌入主要的管道组件,如电池、通风系统、制动器、发动机、门、散热器等,以获取用于测量管道使用、功耗、组件健康、发动机温度和许多其他尺寸的数据。捕获的数据最终将被外推用于预测性维护,管道将在主要部件损坏之前向工程师/维护人员发送信息。
每列火车也将安装超高速无线网络;允许你在飞行中规划和调整你的旅程。管道将连接到著名的外部数据源,如天气或新闻。例如,天气数据将允许基于输入自动调节车厢气候——27 度的温度将启动空调以保持地铁格外凉爽,而在寒冷的日子里,将启动加热以保持地铁温暖舒适。当事件或事故发生时,新闻数据可能特别有用,并根据接近实时的信息向乘客提供替代路线。USB 充电端口也将具有(为什么不呢?).
列车和车站站台上将是交互式的触摸屏,显示时间、天气、新闻、厕所信息、车厢内可用座位、帮助和援助、每个车站的连接(沃伦街将显示维多利亚和北线)、每个车站的著名地标(查林十字路口将显示特拉法尔加广场和国家美术馆)、服务于机场的列车的到达/离开信息、每个车站晚点时的当地出租车信息以及紧急服务的详细信息。每辆列车都将充当一个信息亭,确保乘客无论身在何处都能获得信息。
如前所述,火车站/终点站基础设施将具有弹性/智能。例如,如果发生紧急情况,车站需要疏散,将自动联系所有应急服务,出口将被清楚地标记和突出显示,栅栏将立即禁用并保持打开,直到事故停止。出口路径会以类似于飞机跑道的方式点亮。此外,遍布车站各处的交互式触摸屏面板将以箭头的形式显示最近出口的方向,显示急救程序,并包括一个帮助按钮——这样,如果需要紧急帮助,紧急服务将立即找到乘客并做出迅速反应。
所有的运输系统将共享一个分散的数据库;使它们始终保持同步。例如,火车上的突然中断会被公共汽车服务立即发现,并最大限度地减少对乘客旅程的干扰。如果紧急服务需要访问数据,例如事件发生后的闭路电视镜头,那么他们可以很容易地获得这些数据。
智能交通并非完全理想化。支撑这一想法的许多技术已经存在。我们现在面临的挑战是有效地结合和实施这项技术,最终鼓励广泛采用。
希望在未来的某个时候,开始工作将永远是美好的一天。
存储数据的巧妙方式
让我们来谈谈位打包、重复数据删除等等
位打包就是让数据表示像手套一样适合你的数据。这是一个非常形象的比喻,但可能会有点混乱,所以让我们直接看第一个也是最简单的例子:
00000001 00000000 00000001
上面看到的是一个布尔数组的二进制表示:true, false, true
。在大多数编程语言中,布尔值以 8 位存储,其中0
是false
,而>=1
是true
。这一切都是有意义的,因为 CPU 是如何读取数据的,但是如果我们知道我们要存储一个布尔值数组,我们可以使用一个位数组:
00000101
在这种情况下,bool 数组可以表示为一个字节数组,其中 size 是ceil(size/8)
。当我们请求索引i
处的元素时,我们需要从i
创建两个索引:
- 字节索引
floor(i/8)
- 位索引
i mod 8
,或者你也可以做i — (byteIndex * 8)
如果你不想做模运算。
为了找出索引i
处的值是true
还是false
,我们需要从比特索引1 << bitIndex
创建一个比特掩码,然后应用下面的表达式:bitArray[byteIndex] & mask != 0
。
正如我们所看到的,从位数组中读取布尔值需要一些计算,但在最好的情况下可以将存储数据的大小减少 87.5%。
现在我们来谈谈数字。数字以字节存储:
- 1 字节:0… 256
- 2 字节:0…65536
- 4 字节:0… 4,294,967,296
- 8 字节:0… 18,446,744,073,709,551,616
但是如果我们知道我们的数据是由较小的数字组成的呢?
四分之一字节可以代表数字 0…3,一半字节可以代表数字 0…15。
我们可以使用与位数组中相同的技术——计算两个索引,并通过几次位移操作得到值。
00000001 00000010 00000011 00000000
其中值为1, 2, 3, 0
。可以变成:
00111001
实现了 75%的减少。我将让读者去思考如何用半字节表示保存一个数组。
存储一个 6 位数字有意义吗?
如果我们存储的数不是二位数的幂(1,2,4,8),我们将不得不面对这样一个事实,即一个数存储在两个字节之间。这意味着我们必须先读取第一个字节,然后再读取第二个字节。所以一般来说这是可能的,但老实说我从未见过有人这样做。然而,我所看到的是——将两个小数字的元组一起存储在一个字节中。例如 FlexBuffers 类型定义是:
- 2 个较低的位代表子的位宽(8,16,32,64)
- 6 位代表实际类型
如果我不知道我的数字会有多大呢?
在这种情况下,你可以选择尽可能大的尺寸,或者应用可变长度数量技术。
在这种技术中,我们取一个代表数字的比特流,并将其分成 7 个比特。第 8 位成为“标志”位。如果下一个 7 位分区不包含所有的0
,标志位将被设置为1
,如果您对细节感兴趣,请查看维基百科文章。
协议缓冲区中使用了可变长度数量技术,这对格式非常重要,这是编码文档解释的第一件事。
有趣的是,如果你看看 UTF-8 编码。这基本上是相同的技术,只是在扫描字节方面有一点小小的调整。字节序列中的第一个字节,它编码一个 Unicode 字符告诉你序列有多长。如果字节以0
开始(从左到右方向),则只有这一个字节。如果 unicode 字符需要两个字节,那么第一个字节的“开始”将是11
,如果是三个字节,则是111
,依此类推。
在我们转向重复数据消除之前,我还想讨论一项技术。我说的是存储增量。
假设您正在存储一个时间戳序列,表示为 unix 时间。如果我们按原样存储时间戳,每个条目将消耗 4 个字节。然而,如果我们只按原样存储第一个条目,而所有其他条目只作为增量存储,那么我们可以对所有后续条目使用小得多的数字表示。最佳情况下,事件之间的间隔总是小于 255 秒(4 分 15 秒)。因此,我们可以用 1 字节存储时间戳,节省大约 75%的空间。
现在我们来谈谈重复数据消除。
每个数据都有某种重复。重复数据删除技术试图找到这些重复数据并*【消除】*它们。
消除是一个很强的词,我们不能因为一个值存储了两次就删除它。我们能做的,是间接地储存价值。一个很好的重复数据删除的老例子是 GIF 格式。在 GIF 中,一种颜色用 24 位——3 字节来表示。它存储在调色板中。一个调色板可以容纳 256 个条目(3 * 256 = 768 字节)。存储图像中的每个像素都存储为 1 字节调色板索引。
让我们做一些数学
我们有 768 字节的开销,每像素 66%的收益。这意味着,如果我们有超过 384 像素:384 * 3 = 384 * 1 + 768
我们弥补了调色板的成本,并开始了我们的旅程,以减少 66%的空间。
同样的技术可以应用于大数字、文本串或任何其他在我们的数据集中重复出现的数据。这种技术的唯一问题是,我们需要知道数据有多少种不同的表现形式。使用 GIF,调色板是以某种方式创建的,一些颜色可能被“挤压”成一种颜色。这不是图像的问题,但是你可能不想对文本做同样的事情。
如果你仔细阅读前面的章节,你可能已经知道答案了。我们可以将调色板索引存储为可变长度的量。
我们还可以做另一件聪明的事情。我们可以尝试使用大数定律。在一个大的数据集中,我们可以假设一些条目会比其他条目出现得更频繁。在这种情况下,我们可以为 X 个最常出现的值创建一个小调色板,使用另一个调色板/数组来存储不经常出现的数字,这些值将存储在一个位打包数组中,该数组将指示该数字是否经常出现。好的,这很抽象,让我们举个小例子。
假设我们正在存储数字,我们知道7, 13, 42
是我们通常存储的三个最常用的数字。现在让我们看一个数据序列的例子:
Initial: 7, 7, 7, 13, 13, 13, 2345, 42, 42, 7, 13, 6543, 7=>Index: 1, 1, 1, 2, 2, 2, 0, 3, 3, 1, 2, 0, 1
Frequent: 7, 13, 42
Other: 2345, 6543
所以我们看到我们有一个 13 个条目的索引,它存储从0
到3
的数字。这是我们存储的一系列值。如果值大于0
,则表示“频繁”的号码:1 -> 7, 2 -> 13, 3 -> 42
。如果是0
,那么我们需要从“其他”数组中取出下一个数字。
这意味着我们不能通过索引来访问值,我们只能遍历它们,但是由于索引是一个在0
和3
之间的数字,我们可以用四分之一字节来存储 13 个值,用 2 个字节来存储 5 个其他值。让我们再计算一下:
- 索引:
ceil(13 / 4) = 4
字节 - 频率+其他:
5 * 2 = 10
字节
总计14
字节与13 * 2 = 26
字节相比。
看起来,如果你有很多条目,并且大数定律站在你这边,那么争论是值得的。
一个用例是当你处理一个稀疏值序列时,大数定律肯定是对你有利的。我说的稀疏值序列是指一个序列,其中许多值可以是“默认”或null
(缺少值)。在这种情况下,我们的索引可以只是一个位数组,表示没有值。我们不需要“频繁”数组,我们只需要“其他/值”。
Initial: 23, 45, null, null, null, null, null, 3=>Index: 1, 1, 0, 0, 0, 0, 0, 1
Values: 23, 45, 3
另一种技术是基于大数定律的 T2 霍夫曼编码。我认为理解其背后概念的最好方法,是看一下莫尔斯电码。在莫尔斯电码中,最常用的字符用最短的序列表示,不常用的用最长的序列表示。这样,当你用莫尔斯电码交流时,你可能会花更少的时间传输。霍夫曼编码有点复杂,因为它是二进制格式,其中莫尔斯码是三进制的(短、长、无声),但想法非常接近。
可能有更聪明的方法来存储数据,但遗憾的是,这是我所能得到的。我很乐意在评论中看到更多的技巧。如果你愿意,你可以鼓掌。
将类序列化/反序列化到 Tensorflow 图或从 tensor flow 图序列化/反序列化类的智能方法
Photo by John Fowler on Unsplash
自动将您的字段与张量流图绑定
将类字段自动绑定到图中的 tensorflow 变量并恢复它们,而不用手动从图中获取每个变量,这是不是很酷?
本文的代码可以在 这里找到, 一个笔记本版本可以在 这里找到
想象你有一个Model
类
通常,你首先建造你的模型,然后训练它。之后,你想从保存的图中得到旧的变量,而不是从头开始重建整个模型。
<tf.Variable 'variable:0' shape=(1,) dtype=int32_ref>
现在,假设我们刚刚训练了我们的模型,我们想要存储它。通常的模式是
现在你想执行推理,也就是通过加载存储的图来取回你的东西。在我们的例子中,我们想要名为variable
的变量
INFO:tensorflow:Restoring parameters from /tmp/model.ckpt
现在我们可以从图中找回我们的variable
name: "variable" op: "VariableV2" attr { key: "container" value { s: "" } } attr { key: "dtype" value { type: DT_INT32 } } attr { key: "shape" value { shape { dim { size: 1 } } } } attr { key: "shared_name" value { s: "" } }
但是,如果我们想再次使用我们的model
类呢?如果我们现在试着打电话给model.variable
,我们没有收到
None
一个解决方案是重新构建整个模型,然后恢复图形
INFO:tensorflow:Restoring parameters from /tmp/model.ckpt <tf.Variable 'variable:0' shape=(1,) dtype=int32_ref>
你已经可以看到这是浪费时间。我们可以通过以下方式将model.variable
直接绑定到正确的图节点
name: "variable" op: "VariableV2" attr { key: "container" value { s: "" } } attr { key: "dtype" value { type: DT_INT32 } } attr { key: "shape" value { shape { dim { size: 1 } } } } attr { key: "shared_name" value { s: "" } }
现在想象一下,我们有一个非常大的嵌套变量模型。为了正确恢复模型中的每个变量指针,您需要:
- 命名每个变量
- 从图表中获取变量
如果我们可以自动检索在模型类中设置为字段的所有变量,会不会很酷?
TFGraphConvertible
我创建了一个类,叫做TFGraphConvertible
。你可以使用TFGraphConvertible
来自动序列化和反序列化一个类。
让我们重新创建我们的模型
它公开了两个方法:to_graph
和from_graph
序列化-到图形
为了使序列化一个类,你可以调用 to_graph 方法来创建一个字段名字典- > tensorflow 变量名。你需要传递一个fields
参数,一个我们想要序列化的字段的字典。在我们的情况下,我们可以通过所有的测试。
{'variable': 'variable_2:0'}
它将创建一个字典,将所有字段作为键,将相应的 tensorflow 变量名作为值
反序列化-从图形
为了反序列化一个类,您可以调用 from_graph 方法,该方法获取之前创建的字典并将每个类字段绑定到正确的 tensorflow 变量
None <tf.Tensor 'variable_2:0' shape=(1,) dtype=int32_ref>
现在你有你的model
回来了!
完整示例
我们来看一个更有趣的例子!我们将为 MNIST 数据集训练/恢复一个模型
我们去拿数据集吧!
Using TensorFlow backend.
现在是时候训练它了
0.125
0.46875
0.8125
0.953125
0.828125
0.890625
0.796875
0.9375
0.953125
0.921875
完美!让我们将序列化模型存储在内存中
{'x': 'ExpandDims:0',
'y': 'one_hot:0',
'forward_raw': 'dense_1/BiasAdd:0',
'accuracy': 'Mean:0',
'loss': 'Mean_1:0',
'train_step': 'Adam'}
然后我们重置图表并重新创建模型
INFO:tensorflow:Restoring parameters from /tmp/model.ckpt
当然,我们的变量在mnist_model
不存在
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-21-9def5e0d8f6c> in <module>() ----> 1 mnist_model.accuracy AttributeError: 'MNISTModel' object has no attribute 'accuracy'
让我们通过调用from_graph
方法来重新创建它们。
<tf.Tensor 'Mean:0' shape=() dtype=float32>
现在mnist_model
已经准备好了,让我们看看测试集的准确性
INFO:tensorflow:Restoring parameters from /tmp/model.ckpt
1.0
结论
在本教程中,我们已经看到了如何序列化一个类并将每个字段绑定回张量流图中正确的张量。请注意,您可以将serialized_model
存储为.json
格式,并从任何地方直接加载。这样,您可以通过使用面向对象编程直接创建您的模型,并检索其中的所有变量,而不必重新构建它们。
感谢您的阅读
弗朗西斯科·萨维里奥·祖皮奇尼
原载于gist.github.com。
为机器学习编码分类数据的更智能方法
实践教程
探索类别编码器
更好的分类数据编码意味着更好的模型性能。在本文中,我将向您介绍来自类别编码器包的各种编码选项,用于 Python 中的 scikit-learn 机器学习。
Enigma for encoding
TL;DR;
当您有可能提供值的名义数据或序号数据时,请使用类别编码器来提高模型性能。
对于名义列,尝试 OneHot、Hashing、LeaveOneOut 和 Target 编码。避免对高基数列和基于决策树的算法使用 OneHot。
对于序数列,请尝试 Ordinal (Integer)、Binary、OneHot、LeaveOneOut 和 Target。赫尔默特、求和、倒向差和多项式不太可能有帮助,但如果你有时间或理论上的理由,你可能想试试它们。
对于回归任务,Target 和 LeaveOneOut 可能不会很好地工作。
路标
Map
在这篇文章中,我将讨论术语、一般用法和五个经典编码选项:序数、一个热点、二进制、BaseN 和散列。在未来,我可能会评估贝叶斯编码器和对比编码器与统计假设测试的根源。🚀
在早先的一篇文章中,我认为我们应该将数据分类为七种类型之一,以便更快地建立更好的模型。以下是七种数据类型:
无用—对机器学习算法无用,即—离散
标称—无顺序组—离散
二元—非此即彼—离散
序数—有顺序组—离散
计数—出现次数—离散
时间—有时间成分的循环数—连续
区间—无时间成分的正数和/或负数—连续
在这里,我们关心的是名义数据和序数数据的编码。具有名义数据的列中的值无法以任何有意义的方式排序。名义数据通常是一位热码(又名哑元)编码,但有许多选项可能对机器学习有更好的表现。
Rank
相反,序数数据可以按等级排序。概括地说,顺序数据可以用三种方式中的一种进行编码,但我认为可以肯定地说,它的编码通常没有经过仔细考虑。
- 可以假设它与区间数据足够接近(值之间的幅度相对相等),从而可以这样对待它。社会科学家一直用李克特量表做这个假设。例如,“从 1 到 7,1 表示极不可能,4 表示既不可能也不太可能,7 表示极有可能,您向朋友推荐这部电影的可能性有多大?”这里,3 和 4 之间的差以及 6 和 7 之间的差可以合理地假设为相似。
- 它可以被视为名义数据,其中每个类别与另一个类别没有数字关系。您可以尝试一键编码和其他适用于名义数据的编码。
- 这两个数字之间的差异可以忽略不计。你可以用不同的编码来训练你的模型,看看哪种编码效果最好。
在这个系列中,我们将看看从版本 1.2.8 开始的分类编码器 11 编码器。* 更新:版本 1.3.0 是截至 2019 年 4 月 11 日 PyPI 上的最新版本。*
这些编码方法中有许多在统计界有不止一个名字,有时一个名字可能意味着不同的事情。我们将遵循类别编码器的用法。
非常感谢威尔·麦金尼斯创建和维护这个包。它很大程度上来源于 StatsModel 的 Patsy 包,而 Patsy 包又是基于这个 UCLA 统计参考。
对分类信息进行编码的方式有无数种。类别编码器中的那些对于大多数用途应该是足够的。👍
快速小结
下面是分类编码器函数的列表,包括它们的描述和它们最适合编码的数据类型。
经典编码器
第一组五个经典编码器可以在一列(序数)到 k 列(OneHot)的连续嵌入信息上看到。对于机器学习从业者来说,这些编码非常有用。
序数 —通过 k 将字符串标签转换为整数值 1。序数。
OneHot —每个值对应一列,用于与所有其他值进行比较。名词,序数。
二进制 —将每个整数转换成二进制数字。每个二进制数字占一列。一些信息丢失,但维度更少。序数。
BaseN —序数、二进制或更高级编码。名词,序数。没有增加多少功能。大概避免。
哈希——像一个热点但维度更少,一些信息因碰撞而丢失。名词,序数。
Sum*—就像 OneHot 一样,除了一个值在所有列中保持不变并编码为-1。*
对比度编码器
五个对比度编码器都有多个问题,我认为这些问题使得它们不太可能对机器学习有用。对于在列中找到的每个值,它们都输出一列。他们的陈述意图如下。
【反转】 —将某个级别的因变量平均值与之前所有级别的因变量平均值进行比较。
后向差异 —将某一级别的因变量平均值与前一级别的因变量平均值进行比较。
多项式 —正交多项式对比。k=4 级的多项式编码所采用的系数是分类变量中的线性、二次和三次趋势。
贝叶斯编码器
贝叶斯编码器在其编码中使用因变量的信息。它们输出一列,可以很好地处理高基数数据。
目标 —使用 DV 的均值,必须采取措施避免过度拟合/响应泄漏。名词,序数。用于分类任务。
leave one out—类似目标但避免污染。名词,序数。用于分类任务。
weight of evidence—v 1.3 新增,2019 年 4 月 11 日单据中未记录。这个方法在这个帖子里有解释。
詹姆斯-斯坦 —即将在 v1.4 中发布,此处用代码描述。
M-估计量 —即将在 v1.4 中发布。在此的代码中描述。简化的目标编码器。****
使用
类别编码器遵循与 scikit-learn 的预处理器相同的 API。它们有一些额外的便利,例如能够轻松地将编码器添加到管道中。此外,如果向编码器传递数据帧,它将返回一个 pandas 数据帧。以下是二进制编码的代码示例:
我们将在未来的实现中解决一些问题。但是如果您熟悉 scikit-learn 的 API,您应该能够直接进入前五种。
请注意,默认情况下,所有类别编码器都会自动估算缺失值。但是,我建议您在编码之前自己填充缺失的数据,这样您就可以测试几种方法的结果。我计划在下一篇文章中讨论输入选项,所以如果你想确保不会错过,请在 Medium 上关注 me 。
术语
你可能会看到评论者互换使用以下术语:维度、特征、向量、系列、自变量和列。我也会:)同样,你可能会看到行和观察互换使用。
k 是数据列中唯一值的原始数量。高 基数意味着很多唯一值(一个大的 k) 。包含数百个邮政编码的列是高基数特性的一个例子。
High cardinality theme bird
高维度是指一个矩阵有多个维度。高维度伴随着维数灾难——关于这个话题的详细讨论可以在这里找到。其要点是,高维度需要大量的观测数据,并经常导致过度拟合。
A wand to help ward off the Curse of Dimensionality
稀疏数据是一个相对于其他值有很多零的矩阵。如果您的编码器转换您的数据,使其变得稀疏,一些算法可能无法很好地工作。稀疏性通常可以通过标记来管理,但许多算法并不能很好地工作,除非数据是密集的。
Sparse
深入分类编码器
事不宜迟,我们来编码吧!
序数
OrdinalEncoder 将每个字符串值转换为整数。列中的第一个唯一值变为 1,第二个变为 2,第三个变为 3,依此类推。
当您用 OrdinalEncoder拟合 _ transform时,编码前的实际值不会影响它的变化。第一个值可能是 10,第二个值可能是 3。现在他们将分别是 1 和 2。
**如果列包含名义数据,在使用 OrdinalEncoder 后停止是个坏主意。您的机器学习算法会将变量视为连续的,并假设值在有意义的范围内。相反,如果您有一个值为 car、bus、和 truck 的列,您应该首先使用 OrdinalEncoder 对这个名义数据进行编码。然后使用一种适用于名义数据的方法再次对其进行编码,我们将在下面探讨这种方法。
相反,如果您的列值确实是有序的,这意味着分配给每个值的整数是有意义的。作业要用心做。假设您的列中有字符串值“第一”、“第三”和“第二”。应该通过向 OrdinalEncoder 传递一个字典列表将这些值映射到相应的整数,如下所示:
**[{"col": "finished_race_order",
"mapping": [("First", 1),
("Second", 2),
("Third", 3)]
}]**
下面是所有代码示例的基本设置。你可以在这个 Kaggle 内核获得完整的笔记本。
这是未转换的 X 列。
下面是将颜色列值从字母转换成整数的 OrdinalEncoder 代码。
所有的字符串值现在都是整数。
Scikit-learn 的 OrdinalEncoder 和 Category Encoder 的 OrdinalEncoder 做的事情差不多,但是不太用户友好。Scikit-learn 的编码器不会返回熊猫数据帧。相反,如果您传递一个 DataFrame,它将返回一个 NumPy 数组。它还输出从 0 开始的值,而 OrdinalEncoder 默认输出从 1 开始的值。
在 pandas 中,您可以通过将字符串值映射到整数来完成序号编码。但是一旦你知道如何使用分类编码器,那就是额外的工作了。
OneHot
一键编码是处理标称数据,也可能是序数数据的经典方法。在 Kaggle 的机器学习教程系列中,它被称为“分类数据的标准方法”。也有名 哑编码、指示符编码,偶尔还有二进制编码。是的,这是令人困惑的。😉
That’s one hot sun
独热编码器为每个值创建一列,以便与所有其他值进行比较。对于每个新列,如果一行包含该列的值,则该行获得一个 1 ,如果不包含,则获得一个 0 。它看起来是这样的:
color_-1 实际上是一个无关的列,因为它都是 0——没有变化,它没有帮助你的模型学习任何东西。它可能是为缺失值设计的,但是在类别编码器的 1.2.8 版本中,它没有任何用途。
**独热编码可以执行得非常好,但是新特征的数量等于 k,唯一值的数量。如果数据集具有高基数要素,这种要素扩展会造成严重的内存问题。对于基于决策树的算法来说,一位热编码数据也可能是困难的——参见这里的讨论。
熊猫 GetDummies 和 scikit-learn 的 OneHotEncoder 函数执行与类别编码器 OneHotEncoder 相同的角色。我发现分类编码器 OneHotEncoder 更好用一些。
二进制的
二进制编码可以被认为是一位热编码器和散列编码器的混合体。Binary 比 one-hot 创建更少的功能,同时保留列中值的一些唯一性。它可以很好地处理高维有序数据。
Binary
它是这样工作的:
- 如果类别还不是数字形式的,则由 OrdinalEncoder 进行编码。
- 然后这些整数被转换成二进制代码,例如 5 变成 101,10 变成 1010
- 然后,该二进制字符串中的数字被拆分到单独的列中。因此,如果一个序号列中有 4–7 个值,那么将创建 3 个新列:一个用于第一位,一个用于第二位,一个用于第三位。
- 每个观察值都以二进制形式跨列编码。
它看起来是这样的:
第一列没有方差,所以它对模型没有任何帮助。
只有三个层次,嵌入的信息就变得混乱了。有许多碰撞,模型不能从特征中收集很多信息。如果一列只有几个值,就对它进行一次热编码。
相比之下,当列的基数较高时,二进制确实会大放异彩——例如,美国的 50 个州。
二进制编码比一键编码创建的列少。它的内存效率更高。它还减少了较高基数的维数问题的机会。
对于序号数据,大多数在序号形式下彼此接近的值将在新列中共享许多相同的值。很多机器学习算法可以学习到特征是相似的。二进制编码对于高基数的序数数据来说是一种不错的折衷。
如果你已经成功地使用了二进制编码,请在评论中分享。对于名义数据,具有更细粒度控制的哈希算法通常更有意义。
巴森
当 BaseN base = 1 时,它基本上与一个热编码相同。当 base = 2 时,基本上与二进制编码相同。麦金尼斯说这种编码器,“实际上,这增加了很少的新功能,很少有人在实际问题中使用基数-3 或基数-8 或除了序数或二进制以外的任何基数。”
Base 3
*BaseN 存在的主要原因是可能使网格搜索更容易。您可以将 BaseN 与 scikit-learn 的 G*ridsearchv 一起使用。然而,如果您要使用这些编码选项进行网格搜索,您可以将编码器作为 scikit-learn 管道的一部分,并将选项放在您的参数网格中。我看不到使用 BaseN 的令人信服的理由。如果你有,请在评论中分享。
BaseNEncoder 的默认基数是 2,相当于 BinaryEncoder。
散列法
哈希编码器实现了哈希技巧。它类似于一键编码,但是新的维度更少,并且由于冲突会丢失一些信息。除非有大量重叠,否则冲突不会显著影响性能。关于散列技巧和选择输出特征数量的指南的精彩讨论可在这里找到。
这是序数栏,再次提醒一下。
这是带输出的哈希编码器。
n_components 参数控制扩展列的数量。默认为八列。在我们有三个值的示例列中,缺省值导致五列全是 0。
如果将 n_components 设置为小于 k ,则编码数据提供的值会有一点减少。你的维度也会更少。
您可以将自己选择的哈希算法传递给 HashingEncoder 默认是 md5 。哈希算法在一些 Kaggle 竞赛中非常成功。如果您有高基数特性,那么值得尝试为名义数据和序数数据使用哈希编码。👍
包装
Exercise break
目前就这些。这里有一个回顾和建议何时使用编码器。
对于名义列,尝试 OneHot、Hashing、LeaveOneOut 和 Target 编码。避免高基数列的 OneHot。
对于序数列,请尝试 Ordinal (Integer)、Binary、OneHot、LeaveOneOut 和 Target。赫尔默特、求和、倒向差和多项式不太可能有帮助,但如果你有时间或理论上的理由,你可能想试试它们。
贝叶斯编码器可以很好地完成一些机器学习任务。例如,Owen Zhang 使用留一编码方法在一个 Kaggle 分类挑战中表现良好。
*** 2019 年 4 月更新:我更新了这篇文章,以包括关于即将推出的编码器的信息,并修改了结论。****
我写的是数据科学、 Python 、 SQL 和 DevOps。查看我的其他文章,如果你对这些感兴趣,请点击这里关注我。😀
感谢阅读!
闻起来像机器学习的进步
注意:我想指出的是,我是作为机器学习的实践者来探讨这个话题的,而不是作为化学家、神经科学家或香水设计师。如果在读完这篇文章后,你决定……原谅这个双关语……把你的鼻子放在不属于它的地方,我将不负任何责任。
对于某些类型的刺激,机器学习已经取得了相当大的进展。
计算机视觉系统在越来越多的任务上超越了人类,并在从医学成像到自动驾驶汽车(以及收割机器人)的广泛技术中发挥着核心作用。
关于声音处理的一般问题的进展,可能被一个特定应用,即语音识别的日益流行所掩盖。
迄今为止,很少有人关注嗅觉。最近的发展表明,这种情况即将改变。
主观体验玫瑰的气味可能暂时仍是生物的专属。然而,这并不能阻止机器学习预测各种气味的数字和语言体验。
在很大程度上,机器学习是围绕竞赛来组织的。这一特殊领域的核心竞争是梦境嗅觉预测挑战。[1] 476 种不同的气味分子,以低浓度和高浓度呈现,由 49 个人在 21 个维度上进行评级。这就是“挑战”的开始。
评级可变性至少有两个来源。首先,由于遗传和环境原因,个体的实际嗅觉是不同的。[2]其次,描述词在语言上的模糊性使问题更加复杂。我对“麝香”的感觉可能和你不同。
文献中指出了在 0 到 100 的范围内匿名化评级的一些显著差异。[3]例如,个体 46 显示出在 50 左右评级趋势。显然,29 号个体有更强烈的观点,并表现出对 100 分的偏好。个人 10 依次将其等级均匀地分布在 0 到 100 之间。
环戊烷硫醇是一种具有强烈气味的调味成分,通常被描述为大蒜[4]。该研究中的 9 名受试者完全同意这种看法,并给这种分子打了 100 分的大蒜最高分。然而,三分之一的参与者根本不认为这是一种大蒜味。其余的在极端分数之间分配得相当均匀。
参与者对气味的强度和愉悦程度基本一致。评分变化最大的两个属性是“木质”和“温暖”。有趣的是,“冷”的描述比“暖”的描述更符合事实。
由于这些个体差异,梦嗅觉预测挑战分为两部分:子挑战#1 处理群体水平上的预测,而子挑战#2 基于模型预测个体嗅觉等级的能力来评估模型。
除了评级,数据集还提供了 4,884 种化学特征。让我们以丁酸甲酯为例,讨论特征的一个子集,莫罗-布罗托自相关。
这种特殊的分子显示出令人愉快的水果气味,由五个碳原子、十个氢原子和两个氧原子组成。除去氢,原子按以下方式排列:
Methyl Butyrate (without hydrogen atoms)
我们可以从分子图的角度来考虑这种排列,节点代表原子,边对应于原子之间的键。两个原子之间的边/键的数量称为距离。
我们例子中的每个原子至少有一个距离为 1 的邻居。对于一些对,例如碳原子 2 和碳原子 4 的对,有一个距离为 2 的路径。丁酸甲酯分子中的最大距离是 6。
为了计算莫罗-布罗托自相关[6],我们需要两个循环。设 i 表示外环的索引,设 j 为内环的索引。外部循环从 1 迭代到最后一个原子的索引减去 d 。对于给定的距离 d ,内循环从 i+d 迭代到最后一个索引。我们必须决定的另一个因素是,每个原子的属性。一个常见的选择,也是下面例子中使用的,是原子质量。
对于由距离为 d 的路径连接的每对原子【T10(I,j)】,我们计算原子 i 的质量乘以原子 *j 的质量。*原子质量和距离为 d 的莫罗-布罗托自相关是这些乘积的总和。
假设我们将距离 d 设为 2。为了获得特征值,我们必须考虑以下对:(1,3),(2,4),(3,5)和(3,6),(4,7)。设 w_k 表示原子 k 的质量。然后,特征值是以下计算的结果:
w _ 1 * w _ 3+w _ 2 * w _ 4+w _ 3 * w _ 5+w _ 3 * w _ 6+w _ 4 * w _ 7
既然我们已经讨论了数据集,并了解了一组常用的特征,我们可以继续研究最先进的技术。梦嗅觉预测挑战的获胜者是密歇根大学研究人员提交的模型,李等人(2017)[3]对此进行了描述。
获胜的模型有三个关键特征:(1)随机森林的使用,(2)单个目标的重新加权以及(3)包含四克特征。
特征空间远大于样本空间。4885 个基本功能与 992 个评级形成鲜明对比。因此,需要采取措施来防止过度拟合的风险。为数不多的可用数据点充斥着异常值,证明了嗅觉感知的非线性。出于这些原因,作者认为随机森林是合适的,这是一种流行的学习方法,可以在数据集的不同部分训练一组单独的决策树。
为了进一步减少异常值对模型的影响,使用个人评级和所有 49 名受试者的平均评级(群体评级)的仿射组合对目标进行重新加权:
*重新加权目标= alpha *个人评分+ (1 - alpha) 群体评分
最后,数据集提供的基本特征被丰富为四个字母的特征,即通过在分子名称上滑动窗口产生的四个字母的字符序列。例如,“丁酸甲酯”包含以下附加特征:“甲基”、“乙基”、“htyl”、“tyra”、“yrate”、“rate”。
按照刚刚概述的方法,测试数据中预测等级和实际等级之间的报告相关性对于气味强度约为 0.4,对于愉快度接近 0.3。
总的来说,19 个语义描述符变得更难预测,相关性低于 0.2。特别是,对于个人强烈反对的描述词“温暖”和“木头”,预测和实际评分之间几乎没有线性关系。相比之下,关于描述符“水果”和“甜食”的表现与愉悦属性的结果相当。
5 重交叉验证表明 0.2 的小值是 alpha 的合适选择,alpha 是调节单个目标值重新加权的参数。
简单的化学特征,如分子量或官能团的存在,几乎没有预测能力。在 21 个属性中,超过 20%的前 5 个特征是莫罗-布罗托自相关。值得注意的是,基于前 15 个特性的随机森林实现了与访问全部特性集的模型相当的性能。
因此,在梦嗅觉预测挑战中获胜的参赛作品是一个传统的随机森林,它能够根据一些化学特征和小而嘈杂的数据集以中等精度预测个体的嗅觉感知。
在其他应用中,这开辟了使用机器学习作为现有香水设计方法的替代或补充的可能性。据估计,全球香水、除臭剂和止汗剂的市场价值约为 700 亿美元。[7]由机器学习支持的设计过程可能与定制和小众香水的增长趋势特别相关。
我期待着(也嗅到了)带有工作名称的产品的发布,比如“随机森林的气味”,当然还有“深层香水”。
感谢您的阅读!如果你喜欢这篇文章,请点击拍手按钮并关注我,以接收更多关于令人兴奋的机器学习应用程序的信息。
笔记
[1] Keller,a .,Gerkin,R.C .,Guan,y .,Dhurandhar,a .,Turu,g .,Szalai,b .,大陆,J.D .,Ihara,y .,Yu,C.W .,Wolfinger,r .和 Vens,c .,2017 .从气味分子的化学特征预测人的嗅觉。科学,p.eaal2014。
[2] Menashe,I .,Man,o .,Lancet,d .和 Gilad,y .,2003 年。不同的人有不同的鼻子。自然遗传学, 34 (2),第 143 页
[3]李,h .潘瓦尔,b .奥门,G.S .和关,y . 2017。根据大规模化学信息特征精确预测个性化嗅觉。千兆科学。
[4]环戊烷硫醇,thegoodscentscompany.com。
[5]丁酸甲酯,thegoodscentscompany.com。
[6] Todeschini,r .和 Consonni,v .,2008 年。分子描述符手册(第 11 卷)。约翰·威利的儿子们。
[7]2012-2024 年全球香水、除臭剂和止汗剂市场规模(以十亿美元计),statista.com
那么,你有多少 ML 模型没有造出来?
Source : Pixabay
好奇怪的问题!!这是你看了标题后会想到的。也许你认为“不是”这个词是偶然的。
嗯,在过去的几年里,我们很多人都遇到过这样的文章
“十大机器学习算法每个数据科学家都应该 知道”
“每个数据科学家都应该知道的前 20 个 R 包”
“每个数据科学家都应该知道的前 30 个 Python 库”
不胜枚举。任何新的数据科学追求者仅仅通过在互联网上看到“应该知道”类型的文章就已经挥舞起白旗了。
一天结束时,由于信息量太大,一个人不知道首先从哪里开始。
从一个有抱负的数据科学家的角度来看,我上面描述的是一个问题。
给我造一个 ML 模型
由于“应该知道”类型的文章,有一个更大的问题,问题的承担者是公司——初创公司和大型跨国公司。
你问的问题是什么?
每个人都想分享最新的“数据科学”。
Adapted from Dan Ariely’s original Quote
许多公司想做数据科学,因为
他们认为他们的竞争对手正在这么做
他们不想被视为落后者
他们相信会有很好的投资回报
但对于这些公司中的许多人来说,数据科学完全是一个新领域,因此他们的工作描述通常很奇怪,面试过程甚至更奇怪。
一些受“应该知道”类文章影响的公司告诉求职者
这是我们面临的问题,告诉我们有哪些机器学习算法可以应用?
新培养的数据科学家很快脱口而出 2-3ML 算法,并被倾心的公司聘用。在适当的时候,算法被实现。这位数据科学家给公司留下了良好的印象,他的模型准确率高达 90% .这些模型已投入生产。但是你瞧,这个模型并没有给公司带来它所希望的投资回报率。发生了什么事?
事实是,数据科学家没有商业头脑,认为他/她的 KPI 只是构建“好的”ML 模型。这家公司有商业头脑,但没有机器学习/统计知识。理想的婚姻从未发生过。
修船人的故事
我们都听说过这个故事或者这个故事的变体。
Source : Pixabay
一家轮船公司雇用了一名工程师来修理轮船的发动机。工程师的工具箱里有所有的工具。经过一番分析后,工程师拿出一把锤子,敲击发动机的一个部件。发动机开始工作了。第二天,工程师把发票寄给了轮船公司,仅仅 5 分钟的工作就要支付 10,000 美元的巨额费用。
船公司经理大吃一惊,要求工程师逐项列出发票。该法案内容如下
用锤子敲打——2 美元
知道去哪里——9998 美元
现在你可能认为我强调领域知识和经验,是的,你猜对了。
修船人—数据科学家类比
故事中的工程师工具箱里有所有的工具,但他只选择了锤子(也许是最简单的工具)来修理发动机。此外,最重要的是,他知道问题出在哪里。同样,一个数据科学家不应该选择先用基础分析解决问题吗?而是直接实现机器学习算法?
最小化损失函数
“所有的模型都是错的,有些是有用的”。
在大多数机器学习算法中,我们试图最小化损失函数。
模型是现实的抽象。这里的词是抽象。这不是真的。
你想想,构建机器学习算法的过程本身就有更大的‘损失函数’。那就是我们与现实不同。
那么,我们是不是应该少建一些模型来最小化这个更大的‘损失函数’呢?
嘿,数据科学家,像 CEO 一样思考
我们这些数据科学家经常陷入非常技术性的思维。我们只考虑哪种 ML 算法适用于 x,y,z 问题。如何做特征选择?如何减少特征的数量?如何提高模型的精度?
我们不认为最大似然算法会给公司带来什么好处。通过我的 ML 算法我能为公司省多少钱。投资回报率会是正数吗?
我们忘记问的最重要的问题是**“这个商业问题真的需要机器学习算法吗”?**
我知道最后一句话会引起轩然大波。你们中的许多人会感到震惊,可能会问“你是想让我们失业吗?”
相反,没有。
有许多商业问题确实需要机器学习方法,但不是所有的。大多数业务问题都可以通过简单的分析或基线方法来解决。
会让我们失业的是机器学习的过度杀伤。我见过用机器学习算法来解决非常琐碎的问题,更糟糕的是,这些公司在这个想法上投入了大量资金。这是一颗定时炸弹。一旦公司意识到投资回报率为负,他们就会完全回避数据科学实践。我们都知道赢得一个被责骂的顾客有多难。没有数据科学,就没有数据科学家。
尊重
我相信,当数据科学家说“对不起,你的业务问题不值得使用机器学习算法”时,这极大地提高了数据科学家在客户/公司眼中的地位。照吩咐去做比违背要容易得多。当数据科学家拒绝时,它会做两件事
- 它展示了数据科学家拥有丰富的知识,因此也知道局限性
- 它展示了数据科学家不仅了解业务,还关心客户/公司的福祉(业务方面)
时间到了,数据科学审计员来了
业界对数据科学的前景既兴奋又警惕。许多已经实施了数据科学解决方案的人由于投资回报率低而不再抱有幻想。
进入数据科学审核员
我预见到一个新的工作角色将被创造出来“数据科学审计员”,公司将雇佣有经验的数据科学家(统计学家/应用数学家)来审计数据科学项目。
在我最近的一个咨询项目中,我感觉自己就像一名审计员。我被要求即兴创作一个由数据科学家建立的 ML 模型,但经过分析发现,所应用的 ML 算法不仅是错误的,而且对于给定的业务问题,没有 ML 算法会起作用!!
客户只是被骗了。
反响——客户对数据科学家没有好感,感觉在情感和金钱上都受到了欺骗。
也许,下次不要问数据科学家“你已经建立了多少 ML 算法”
宁愿问
“您还没有构建多少 ML 算法”
如果你喜欢我的文章,给它一些掌声,你也可以在下面发表评论,表达你对这篇文章的看法。
你可以联系我
我的博客:分析洛卡
那么 AI 有什么新的?三十年后,我决定参加人工智能进修课程,这就是我的发现
我毕业时获得了人工智能学位,当时相当于一部 iPhone 的计算能力的成本是 5000 万美元。很多事情都变了,但令人惊讶的是,很多事情还是老样子。
停止疯狂!
W 当我今天早上醒来,在 Flipboard 上查看我的 AI 故事每日新闻时,我觉得我应该继续睡觉。很明显,我们所知的世界即将终结。在我大约三分之一的个性化新闻文章中,人工智能标题清晰响亮。以下是其中的一些:
人工智能专家列出了人工智能的真正危险
限制人工智能的缺点
新报告概述了人工智能的一些反乌托邦元素
关于新兴人工智能风险的新报告描绘了一个严峻的未来
埃隆·马斯克退出人工智能伦理研究小组
AI 会奴役人类吗?可能不会,但它可能会在自动取款机上抢劫你
NatWest 雇佣“数字人”Cora 与客户聊天,并帮助解决简单的银行业务
人工智能是对文明的威胁吗?
当像斯蒂芬·霍金和埃隆·马斯克这样的聪明人说,我引用他的话,“全人工智能的发展可能会导致人类的灭亡”和“人工智能是我们最大的生存威胁”时,我有什么资格反驳。当享誉全球的管理咨询公司麦肯锡(McKinsey)在全球首席执行官中引起广泛关注时,它坚定地表示,“我们估计,全球劳动力市场上人们被雇佣从事的所有活动中,约有一半可能会实现自动化”,那么,假设我们都注定要失败似乎也不无道理。
The Telegraph newspaper reports that experts believe robots will take over most jobs within 30 years.
但简而言之,我相信这是很多媒体头条抓取废话。为什么我有资格对这个话题发表意见?自从我从苏塞克斯大学获得人工智能和计算机科学学位后,我已经观察人工智能三十多年了。这要追溯到人们认为 AI 意味着人工授精的时代。任何在人工智能历史的许多篇章中生活、呼吸和工作过的人,都对最近的说法抱有一定程度的怀疑。
艾是历史上非常寒冷的冬天
自从人工智能出现以来,它就一直处于反复无常的状态。在 70 年代,80 年代,90 年代,甚至是 21 世纪初,大规模的宣传和投资围绕着人工智能迅速展开,随后被降级到内陆地区,因为预期总是远远达不到。在 20 世纪 90 年代初,试图找到一份拥有人工智能学位的工作是一条通往失业的必经之路。我不得不将自己重塑为一名地理信息系统(GIS)工程师。至少 GIS 使用了人工智能算法,如两个地点之间的最短路线和知识表示技术。但我的许多人工智能专业的毕业生都无法通过他们的教育选择来成就事业,除非他们进入学术界或研究领域。
但是现在有些事情真的不同了。人工智能可能真的开始兑现它的承诺了。人工智能已经悄悄进入我们的日常生活,通过技术实现了许多日常服务:
- 亚马逊 Alexa ,这个价值 49 美元的冰球,坐在我们的厨房里,它能理解我在说什么,而且通常会给我合理的答案。它的语音转文本识别真的很好。你应该看看相关的应用程序,它发现了许多不知情的青少年,他们问了 Alexa 可疑的问题,不知道这些问题都被转换成文本供他们的父母查看。
- 脸书非常擅长面部识别。每天都有数十亿用户上传数百万张照片。脸书扫描这些照片,找出人脸,然后给他们起名字。由于隐私法的原因,这一功能在欧洲并不常见,但这项技术正在大规模地做一些通常属于人类的事情。
- 谷歌最近展示了其 DeepMind AlphaGo 团队,计算机可以在古老的围棋比赛中击败世界最佳选手。这在几年前被认为是不可能的,因为游戏中的移动数量超过了宇宙中的原子数量。但他们的深度神经网络已经能够自我学习击败世界最佳的策略。
人工智能正在为各种服务提供动力,从聊天机器人和虚拟代理到智能机器人和自动驾驶汽车。所有这些都是人工智能的例子,表明计算机可以完成通常需要人类智能的活动,如视觉感知或语音识别,决策,以及在复杂的世界中感知和导航。
我们生活在一个指数增长的世界里
当我学习人工智能时,课程包括语音识别、自然语言处理、视觉识别、机器学习、神经网络和推理。我记得一份试卷给我们出了一个难题,如何检测汽车牌照。我编写了第一个神经网络来解决旅行推销员问题——如何找到十个地理位置之间的最短驾驶距离。我记得有一个长期项目是给一台机器编程,学习如何进行数学推理。但当时真的感觉我们离日常生活中可以使用的东西还很远。这些节目真的很慢。数据集非常小。这些系统不能从一个话题概括到另一个话题。而所谓的人工智能强调 人工高于智能。
但是有些事情已经改变了。很难想象 iPhone 只有十几岁。很难想象一个没有脸书的世界。很难想象一个世界,如果我需要找到一些信息,我不会搜索谷歌。计算能力和数据的指数级增长使得数字世界成为可能。这推动了人工智能的转变。一些有趣的事实证明了我们指数世界的力量:
- 如果自 1971 年以来,一辆汽车的速度与计算芯片的速度一样快,那么它的行驶速度将达到每小时 420,000,000 英里。
- 如今的数据存储比 1993 年便宜了 28,450 英镑。
- 据估计,到 2020 年,地球上 70 亿人口中的每一个人每秒都会产生 1,700,000 字节的数据。这相当于这个星球上的每个人每秒钟都会发出 100 多封没有图片的电子邮件。
据说全球 80%的数据都是近两年才产生的。在物联网、移动设备、工业传感器、健身设备和社交媒体活动的推动下,这一数字将继续呈指数级增长。我不得不查找一个 Zettabyte 的大小(10 的 21 次方),因为据估计,到 2020 年将会产生 44 Zettabytes 的数据。
这个指数级的世界已经产生了看起来可行的人工智能应用。在过去的三年里,随着面部识别的进步,图像识别的错误率已经从 28%下降到 7%。语音识别率已经下降到人类的准确性领域。
Error rates for recognising images have dropped from 28% to 7% over the past few years. Courtesy of Benedict Evans
And similarly speech recognition error rates have dropped precipitously from 26% to 4%. This is approaching human levels.
谷歌免费提供尖端的机器学习软件 tensor flow
但是还有其他的事情在发生。以前写软件做机器学习之类的事情真的很难。机器学习是指计算机能够自己学习,而不必像你写软件时那样被明确告知规则。
考虑深度神经网络,它是驱动最新一轮人工智能歇斯底里的基础技术。根据大脑神经元的松散模型,下面的示意图显示了一个深度神经网络,它可以学习识别狗的图片,并区分类似的动物,如狼或猫。
A deep neural network that learns to identify pictures of dogs from other animals. The program is not told what features differentiate the animals but rather learns for itself from seeing thousands of examples. Courtesy of Fortune.
在所谓的监督训练中,神经网络被输入许多动物的图片。向神经网络展示一张物体的图片,并告诉它是否是一只狗。深度神经网络由神经元层组成,这些神经元层代表关于对象的越来越多的抽象。第一层发现基本的视觉特征,如线条边缘或纹理或颜色。然后,更高的层次开始将这些放在一起,以看到更全面的特征,如鼻子或爪子或腿或尾巴。然后最高层把它们放在一起“看”一匹马、一只狗或一只狼。在所有这些情况下,机器在看到许多训练示例后,已经自己学习了模式。它能以 90%的准确率识别一张照片是狗还是狼。
这种神经网络软件的非凡之处在于,机器没有被告知动物之间的区别,而是自己学习。升起机器!
编写软件来做到这一点真的很难。让机器识别物体、单词或句子将花费我好几个月的时间,即便如此,结果也是有限的。三十年前,我们没有足够的计算机能力来进行多层次的学习,而是只有一个层次,而且我们只有很小的数据集。
今天,谷歌是世界上最大的人工智能公司。它能够吸引该学科中最优秀和最聪明的头脑。他们正在研究自动驾驶汽车、语音识别、智能推理、海量搜索和大多数经典的人工智能问题。他们已经免费提供他们的人工智能软件来驱动他们的服务是免费的! TensorFlow 现在是一个开源软件项目,它从谷歌获得了最好的人工智能软件库,并允许社区使用它。
你可以在几分钟内设置一个机器学习程序——你不是天才!
**这个 TensorFlow 软件不仅代表了人工智能和机器学习的艺术水平,而且使用起来也相对简单。正如最近在 KDnuggets 的一篇文章标题是“神经网络 AI 很简单。所以……别再假装自己是天才了。情有可原。但现实是,在黄金时间做 AI 确实需要工作和专业知识。然而,建立并运行一个神经网络演示几乎是小菜一碟。
我最喜欢的软件库是 Keras ,也是免费的。它涵盖了 Tensorflow 和其他机器学习引擎,使构建和训练神经网络变得更加简单。
A combinaton of Keras and TensorFlow is a great toolkit to start machine learning programming.
人工智能学生学习的第一个程序是 MNIST。这是一个让机器从视觉上学习手写数字 0 到 9(如下)之间的区别的任务。一台计算机被展示 6 万幅图像样本,并学会识别这些数字的视觉差异。
使用 Keras,下面的代码是您构建和训练深度神经网络所需的全部内容——这是一个卷积神经网络,特别适合视觉识别。这些机器学习识别数字的准确率达到 99.6%。
Keras 中的编程步骤如下灰框所示。理解具体的代码指令并不重要,重要的是要注意实现程序只需要五个主要的概念性步骤。
- 加载 Keras 的软件库以及矩阵和向量数学
import numpyfrom keras.datasets import mnistfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom keras.layers import Flattenfrom keras.layers.convolutional import Conv2Dfrom keras.layers.convolutional import MaxPooling2Dfrom keras.utils import np_utilsfrom keras import backend as KK.set_image_dim_ordering('th')
2.设置随机数
# fix random seed for reproducibilityseed = 7numpy.random.seed(seed)
3.加载 60,000 幅图像的训练数据,并将其存储在正确形成的矩阵和向量中
# load data(X_train, y_train), (X_test, y_test) = mnist.load_data()# reshape to be [samples][pixels][width][height]X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')
4.构建输入和输出数据,以便用于培训
# normalize inputs from 0-255 to 0-1X_train = X_train / 255X_test = X_test / 255# one hot encode outputsy_train = np_utils.to_categorical(y_train)y_test = np_utils.to_categorical(y_test)num_classes = y_test.shape[1]
5.建立模型,对数据进行训练,并输出数据的准确性
def baseline_model():# create modelmodel = Sequential()model.add(Conv2D(32, (5, 5), input_shape=(1, 28, 28), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.2))model.add(Flatten())model.add(Dense(128, activation='relu'))model.add(Dense(num_classes, activation='softmax'))# Compile modelmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])return model# build the modelmodel = baseline_model()# Fit the modelmodel.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200, verbose=2)# Final evaluation of the modelscores = model.evaluate(X_test, y_test, verbose=0)print("CNN Error: %.2f%%" % (100-scores[1]*100))
为了证明它有多简单,我喜欢这个由@datitran 用 TensorFlow 写的浣熊探测器。这个程序使用 TensorFlow 最新的库进行对象检测。
A racoon detector built on TensorFlow’s object detector APIs.
人工智能将成为无处不在的赋能工具包
在过去的几个月里,我一直在卷起袖子,把手弄得很脏,为神经网络编程。一天下午,我突然有一种似曾相识的感觉,随后恍然大悟。
大约三十年前,第一个商业 SQL 关系数据库出现在 IBM、Ingres 和 Oracle 等公司。数据库将储存、管理和分析以表格形式组织的数据。它们本身并没有给最终用户带来任何明显的好处,但它们是一套技术和工具,让的企业能够创造出无穷无尽的应用。如今,我很难想象全球有哪家公司没有由关系数据库以及现在的非 SQL 数据库支持的应用程序。它已经成为无处不在的 T4,它们所能实现的应用数量仅仅是想象力极限的函数。****
同样,今天人工智能市场的发展正受到难以置信的强大和可访问的人工智能工具包和技术的推动。这些工具包允许构建无限的应用程序。DeepIndex 允许你查看近 300 个人工智能应用,其中大部分都是用这些工具包构建的。
这些工具可以轻松地用于实现有价值的应用程序,这意味着在未来几年,我们甚至可能不会谈论人工智能和机器学习,因为它将如此普遍,并融入所有技术的结构中。
人工智能将在数千个用例中证明真正的经济价值
我现在想知道人工智能的经济价值。因此,我在过去几个月里绘制了数百个人工智能用例,并查看了数百家人工智能公司以及大量的技术工具包和框架。我想知道人工智能现在是如何在公司各部门、公司和行业中使用的。我想知道人工智能是否有真正的价值。我很难确定未来几年不会使用人工智能的单一功能和行业。
虽然今天人工智能的许多企业应用都处于规划和实验阶段,但人工智能的商业应用将从帮助更好地管理和分析企业数据财富开始。机器学习在发现海量数据集中的模式方面非常出色。它的应用将使公司增加收入,降低成本,提高生产力,改善产品和服务。机器学习真正擅长的一些任务包括:
- 识别视觉模式,例如识别场景中的人脸和物体,在视觉上检测生产线上的缺陷,在病理切片上发现癌症标记,或从检查照片中估计汽车的损坏程度,或确定品牌标志何时被无证使用。
- 预测,例如哪些客户可能流失,哪些消费者最有可能转变为付费客户,或者确定何时应该更换零件以提供预测性维护。或者预测哪些信用卡交易可能是欺诈。或者一个人会根据别人的推荐喜欢哪些电影。以及我们网络中的哪些活动违反了网络安全。
- 语音和自然语言处理,例如自动筛选和排列简历或确定客户的情绪,以帮助呼叫中心代理更好地响应客户。
当然,围绕传感和反应技术有一整套用例,如机器人和自动驾驶汽车。
那么谁来从 AI 身上赚钱呢?
在检查人工智能使用案例时,很明显我们现在正进入一个真正的人工智能黄金时代。成千上万的新公司都在竞相抢占他们的份额。我将把我的分析留到另一篇论文中,但有几个关键主题似乎表明了经济** 价值正在向何处转移:**
- ****数据是 AI 的关键。要训练机器变得聪明,拥有数据训练集至关重要。拥有数据集的人处于有利地位。几年前,优步(Alibaba)或 AirBnB 等新贵可以颠覆整个行业,而现在,一些价值和权力转移回了现有企业。谁能比拥有大量承保索赔历史数据的保险公司更好地利用人工智能呢?这家金融服务公司对消费者的购买行为了如指掌?或者是用户搜索信息最多的搜索公司?
- 全球科技巨头正在为人工智能领域的领导地位展开军备竞赛。据 CBInsights 报道,2016 年科技巨头在人工智能领域的投资超过 200 亿美元。谷歌可以说是世界上最大的人工智能公司。但它正与亚马逊、微软和 IBM 争夺主导地位。人工智能初创公司几乎没有机会颠覆这些巨头关注的人工智能基础设施和平台。很少有创业公司会在云计算上比微软花费更多或更聪明,或者比谷歌的张量处理单元建立更好的人工智能芯片,或者比亚马逊建立更好的物体识别软件库。
- ****国家也在进行人工智能军备竞赛。中国并不羞于在 AI 问题上发出自己的声音。它认为自己比美国具有结构性优势,包括更具支持性的监管框架(特别是在数据隐私和使用方面),其政府支持的人工智能生态系统包括对不断增长的技术和工程人才的巨额投资,以及大规模的数据和可用性。中国的 AI 公司比如百度或者 Face++真的很好,有海量的数据集。中国人指出,他们的移动市场是美国的 3 倍,移动支付是美国的 50 倍,这是一个巨大的数据优势。
- ****人工智能初创企业比比皆是,但它们需要获得独特的数据集、深厚的领域知识、雄厚的资金以及吸引日益紧缺的人工智能人才的能力。这不是一个车库里的应用程序会改变世界的案例。2016 年,VC 和 PE 对人工智能公司的投资超过 60 亿美元,其中大部分是机器学习横向应用。
人工智能的淘金热开始了。但是看起来越来越像是最大的公司和国家将获得经济价值的最大份额。
最后的反思——学习人工智能既容易又难
在过去的几个月里,我决定休假去研究人工智能。我真的很想弄清楚什么是真实的,什么不是。了解人工智能的现状在很大程度上是一个大数据问题。关于正在发生的事情的信息量、种类和速度是巨大的。这反映了一个真正蓬勃发展的行业。跟上最新的人工智能研究、技术、工具、初创公司、用例就像从消防水管喝水一样。如果你在谷歌上搜索神经网络,你会看到 140 万篇文章。随着 d eep 神经网络,胶囊网络,卷积网络,LSTM,BatchNorm ,激活函数,随机梯度下降,降维,嵌入,辍学,残差网络,Keras,Tensorflow,递归神经网络(RNNs),残差网络,数据角力,Python,内核,前馈,监督 Vs 非监督等等的首字母缩略汤,很容易变得不知所措。互联网已经被证明是能够找到信息的真正繁荣,但问题是有太多的信息。
所以我决定回到学校**。我需要回到一所受信任和尊重的学校的教室,这所学校以其教学法而闻名。那我做了什么?我报名参加了一个大型开放式在线学习课程(MOOCs)。我选择了吴恩达教授的 Coursera 深度学习课程,他是斯坦福大学的兼职教授,曾在谷歌和百度工作。他是一位出色的教师,了解人工智能的教学方法。成本仅仅是我的时间和月费,比你的星巴克咖啡还少。MOOCs 已经民主化教育,这是大约三十年前我第一次上人工智能课程以来的一个巨大变化。**
在线课程既有趣又有挑战性。我发现它们重新激活了我大脑中的部分区域,在那里,我的导数和微积分、大规模维度矩阵和向量空间、编程(现在是 Python)和机器学习算法的知识出人意料地处于休眠状态。它回来了。几十年后,这种材料变得异常熟悉。编程肯定比以前容易得多——有数百个库处理所有困难的部分。
事情越是变化,它们就越是一成不变
我会对工作场所产生真正的影响,但我们应该忽略这种夸张。工作岗位最终会被取代,但在很大程度上,人工智能将被证明是生产力的繁荣。是的,人工智能确实令人担忧,比如黑客攻击的数字风险,自主无人机远程攻击等物理风险,以及虚假宣传和国家监控带来的政治风险。但是,这些机器还远远没有达到真正取代我们的普通智能水平。当今天的神经网络学习猫和狗之间的视觉差异时,它不具备人类那样的概括和持有这些动物的任何概念的能力。它不知道它们还活着。他们是宠物。应该轻轻地抚摸它们。他们应该得到食物。他们有感情。它知道的很少。
三十年前,我们研究了一般智力和狭义智力的概念。一般智力还有很长的路要走,但是狭窄已经有了很大的改善。人工智能真正改变的是,工具、技术和算法真的进化了。现在大规模实现人工智能要容易一百倍甚至更多倍。而且便宜很多。现在人工智能的经济机会很大,令人兴奋。淘金热正在进行,经济利益将再次被少数人和大多数人攫取。
但是如果你问我三十年来发生了什么变化。一切都变了,但从概念上来说,并没有什么真正的改变。
作者 作者 西蒙·格林曼
我热爱技术以及如何将技术应用于商业领域。我很幸运地在互联网早期共同创立了MapQuest.com服务,并继续利用技术来发展、创新和改造公司和行业。我目前经营着自己的咨询公司 DigitalInnovators.a 帮助董事会和高管让他们的公司实现人工智能。
如果你喜欢这首曲子,我希望你能按下拍手按钮👏所以其他人可能会偶然发现它。你可以直接给我发电子邮件或在 LinkedIn 或 twitter 上找到我,或在 Simon Greenman 上关注我。
所以你将管理一个数据科学团队
我见过你们这些人不会相信的事情。仪表板上着火的数据透视表。r 脚本在 Hadoop 集群附近的黑暗中闪闪发光。
但是(很抱歉鲁特格尔·哈尔剽窃了他的精彩独白)我也看到了很多数据科学是通过技术实现的——首先没有将人或流程考虑在内,我想我应该提出一些源于我引导客户和合作伙伴通过这些水域的经验的想法。
作为一名崭露头角的企业人类学家,(恢复中的)技术总监和国际养猫人,我经常惊讶于对技术技能和工具的重视程度,而不是实际建立一个有效的团队。
作为一名训练有素的工程师(尽管有明显的量化倾向),我对让数据科学团队成功所需的技术、技能组合甚至数据类型的意见非常着迷,因为实际上很少有关于哪些是关键因素的硬数据。
因此,我将从所涉及的技术和科学后退一步,看看流程应该如何工作,以及不管你的背景如何,在管理数据科学团队时应该考虑的一些事情。
人员、流程、技术
几年前,我(被我的前首席技术官)反复灌输卓越是一个过程,这句格言一直伴随着我,因为他指的是个人和团队成长意义上的“卓越”,而不是利用科技炒作或搭乘六适马列车。
请注意,工具和技术至关重要,但你必须放眼全局。
以深度学习为例: Tensorflow 可能是目前的首选库,但 Keras 会给你一个更好的抽象,也让你利用 CNTK 作为后端,并可能在迭代问题时获得更快的周转,所以我认为它应该是你(和你的团队)需要投资的更高级的工具。
如果你从长远来看,从纯统计/回归方法到 RNNs 的整个过程意味着一个深刻的承诺,不仅是学习它们背后的科学,而且是理解它们在你必须解决的一系列挑战中的位置。
相信我,选择工具并不是你需要首先解决的问题——你应该首先解决的是你的团队,然后是团队运作的环境。
第一个错误
组织(和管理者)犯的第一个错误是认为向你汇报的数据科学家就是你的整个团队。
无论人们对矩阵管理和跨职能团队的需求谈论了多少,人类都有一种将人(和事物)分类到漂亮整洁的箱子里的自然倾向,当你必须激励和推动人们时,就会涉及到额外的偏见——毕竟,作为一名经理,你的主要职责是确保你被分配的团队团结一致地工作,在数据科学领域(尤其是在该领域的新公司),也需要证明你的价值。
我的意思是团队的价值——你可能凭借自己的能力成为一名奇才,但你的工作是确保你的团队能够实现目标,并且在你的直接下属内部和外部都清楚地定义了目标和期望。
所以你的实际的团队由各种各样的利益相关者组成——产品所有者、管理层,以及(同样重要的)*技术角色中的其他每个人,*因为你所做的事情(以及你所获得的洞察力)不可避免地会影响业务的其余部分,以及它是如何构建/实现/部署的等等。您并不存在于真空中,而是您拥有的数据(或者,更多情况下,没有)和业务需要改进的数据之间的管道(我在这里有意避免逆向流动,即当业务要求您改进已经实现的东西时)。
在大数据炒作期间,我以前见过非常类似的事情发生,我们成功解决这一问题的方法是通过建立人员“小组”来解决每个具体问题-每个小组由通常的三人组成,即数据科学家(通常是您的直接下属)、实施者(可能是也可能不是)和领域专家(通常是产品所有者或业务利益相关者)。
我使用上面的术语“实现者”,因为根据您正在处理的问题,问题域可能需要:
- 数据转换的快速迭代(在这种情况下,您可以用开发人员或 DBA 来担当这个角色)
- 整合数据可视化(前端开发人员或设计人员)
- 或者弄清楚如何大规模部署模型(架构师或开发人员)
不管是哪种方式,最终结果都是,在更正式的组织中,你会发现自己不得不与管理同行混合和匹配时间表,因此,如果你能清楚地沟通总体目标是什么,以及应对特定挑战需要什么样的技能,这将会有所帮助。
从里到外都不辜负这个角色
你有丰富的实践经验,你的团队尊敬你,你让自己参与关于架构、特性工程、算法选择和模型评估的各种讨论——这很好,除了管理与此无关。
管理一个团队需要你走出自己的舒适区,处理好优先事项,遵守截止日期,指导人们的职业生涯,以及在商业环境中领导人们和交付成果所带来的所有混乱、不科学的问题。
这里最重要的是避免成为冒名顶替综合症的牺牲品——记住,你得到这份工作是有原因的,对吗?成为一名经理并不意味着你停止做科学工作——事实上,你可能会比你通常做的更多的科学工作(但在更高的层次上),仅仅因为你需要了解你的扩展团队在做什么,识别陷阱或障碍,并把人们引向正确的方向。
要做到这一点,你需要学会如何有效地沟通——不仅仅是在团队内部,还要在团队外部,而且经常是与没有相同背景(技术或其他)的人沟通。
将流程落实到位
随着工作的到来和你所有的豆荚排好队,你的团队开始建立一个挑战的管道来通过(通常有多个子挑战,因为你开始钻事情)。那么,你如何将这些挑战分配给你的团队,同时让每个人都开心呢?
在我们解决这个问题之前,我们需要后退一步,想想人们最有可能如何度过他们的时间。
在扩大数据科学团队的规模时,基本上有两个约束,它们都归结为时间:理解问题和制定解决方案所花费的时间,以及实施和推广它所花费的时间。
实际上,通常发生的情况是:
- 你的团队 80%的时间将花在挖掘数据的意义上:搜寻数据集、做 ETL 和做初始特性选择。到目前为止,第一部分是工作中最不吸引人的部分,但它与人类对数据和问题领域获得直观感受的需求非常契合,因此*你应该置身事外。*无论如何,每天都要站起来(如果这是你的事情),和团队坐在一起讨论他们在做什么,但是当被要求/需要时,尽量只利用你自己的专业知识——不要微观管理人们,而是帮助他们从长远角度出发,把他们正在做的事情变成可重复的过程。
- 剩下的 20%的时间通常花在弄清楚如何让你的数据和模型对公司的其他人可用上——这是大多数数据科学团队忽略的地方。
碰巧的是,交付数据科学比生成报告和仪表板有更多的*。所以你(作为一个经理)应该期望花费大量的时间(在早期可能高达 80%),检查上面的 20%,并与你的团队合作,将他们所做的转化为可重复的、可度量的过程,或者通过利用持续集成工具来比较迭代之间的模型,或者通过定义检查和平衡:什么特性被添加到了模型中?它在新数据集上的表现如何?考虑到您的数据(或业务流程)的更新速度,它多久会过时?*
一个好的经理知道在“快速失败”方法和不仓促行事之间要取得平衡——尽一切可能让人们去尝试新方法(这是让人们开心的一个重要部分),但是定义你要用来衡量结果的尺度——我们是否从新模型或工具中获得更快的周转?它是否在不影响性能的情况下表现得更好?我们是否获得了诸如自动消除偏差或防止过度拟合之类的附带好处?
根据您的公司、资源和流程,开始时可能需要相当长的时间,但这里的想法是,当您开始交付解决方案时,您将构建一组其他人将使用的 API、基础架构或数据集,为它们定义路线图,并对它们进行迭代——因此您与其他团队构建的桥梁在这里将是无价的。
用科学发展你的团队!
很快,你就会发现谁有解决特定问题的诀窍或专业知识。然而,不要把看起来像钉子的东西都分配给他们,把这些人和以前从未做过的人配对。
让他们拓宽视野,再一次把它变成一个可重复的过程,同时也把它展示给他们的同伴。一定要介入引导讨论,但要记住,个人成长来自于学习新的东西和并将它们传递下去,如果每个人都清楚这些过程,并且如果他们将这些过程视为工作的一个组成部分,那么你的团队将会更加有效(和快乐)。
不要因为效率而陷入流程中,或者为了自己的利益而开始计算 KPIs 相反,把流程看作是给你们所有人正在做的工作增加结构*(因此意味着什么),并从改善手册中吸取经验。*
让数据科学成为公司文化的一部分
一旦其他一切就绪,确保组织理解您的团队角色的最佳方式包括走出团队——这意味着再次利用您的沟通技巧:
- 在其他团队中培养一种以数据为中心的文化,让他们明白这并不是真的要存储大量的原始数据,而是要确保你拥有的数据集能够被清楚地识别,并且容易获取(在这方面有关于个人身份信息和适当的数据卫生的常见警告)。
- 就可以以最小的开发/集成开销进行交换的通用数据表示(或桥格式)达成一致,并就其他团队访问您的团队生成的训练模型的 API 达成一致。
- 解决真正困难的问题,比如从面向批处理的流程转移到事件流。欺诈检测、推荐引擎和其他业务所依赖的主要工具需要即时访问数据,而且(从经验来看)无论从技术上还是从业务角度来看,没有什么比处理流数据更好的了。
- 了解企业想要什么。没有什么是真正必要的,实际上是不可能的(即使考虑到最近围绕数据科学的大肆宣传,这似乎很难),并且会有很多人耐心地引导人们回到可行性领域,但请记住,你被选为经理是因为你擅长建立桥梁,在所有方面。
最重要的是,不要害怕——你仍然在做数据科学
即使上面的一些在一开始对你来说并不自然,也不要担心。你会没事的,只要你不断地重新训练你自己的心智模式,让你知道你的团队(和你)在大局中所扮演的角色。
请放心,您将能够花费大量时间进行实际的数据科学研究,即使只是因为上述概述的大多数业务和团队相关方面的发展比您预期的要慢得多——没有优化人类组织的梯度下降算法,而且,从各方面考虑,我认为这是一件好事。
(本文 原载于 LinkedIn )
使用 Apache Spark 和 Neo4J 进行社交网络分析
了解社会系统和互动的旅程
Photo by Matthew Cabret on Unsplash
我对社会网络分析(SNA)感兴趣已经有一段时间了,从小规模问题开始,最终使用手机数据解决大规模问题。以我目前在 Praekelt 的角色,我们可以利用这些概念来接触难以接触到的个人,例如,鼓励他们进行 HIV 检测。
作为学习曲线的一部分,我发现 Apache Spark 在处理能力方面提供了实质性的提升,当与图形数据库(Neo4J)结合时,完全改变了必要的东西。在这篇文章中,我试图给出 SNA 可能有用的地方,一些 SNA 术语和指标,以及一个可以用来大规模分析社交网络的代码链接。
为了将这篇博文建立在真实数据的基础上,我使用了 Statnet R 包中的一个数据集。这些数据是基于哈里斯、弗洛里、塔博尔、贝尔曼、琼斯和乌德里*的数据通过模拟生成的。*由于数据是通过模拟生成的,因此不存在匿名或隐私问题。这些数据是一个不变的、无方向的友谊网络,由 1,461 个模拟个体组成,包括他们的年级、性别和种族。
查看社交网络时,理解一些词汇很重要。下面我们找到了一些常用词:
- **节点:**个人的图形化表示。
- **边:**边代表两个个体(节点)之间的关系
- **度:**连接一个节点的边数。这些可以进一步细分为入度(即传入边沿的数量)或出度(传出边沿的数量)。
- **组件:**这是一组独立的个体(在图中表示为节点),它们相互连接。
A graph representation of part of thesimulated social network used in this blog post
现实社会网络中有许多有趣的观察结果。其中之一是,如果一个人有两个朋友(一个三联体),那么这两个朋友也很有可能是朋友。这就是所谓的**。当试图影响社交网络中的信息传播或连通性时,这可能是有用的。**
Demonstration of triadic closure
*第二个有用的度量被称为 聚类系数 *。这衡量一个集群中实际连接的百分比,与可能连接的数量进行比较。较高的聚类系数表示图中的高连通性。
*(*【物以类聚】)是现实世界网络的属性。个人更有可能与和他们至少有一些相似之处的其他个人联系在一起。在下面的图表中,我们展示了模拟数据集中种族的同质性,然而,这也与性别和年级有关。
另一个有用的度量是给每个节点分配一个影响级别。有很多方法可以实现这一点,但最广为人知的可能是 PageRank。 下图证明了这一点,其中,与联系较少的个人相比,联系较多的个人被分配了较高的 PageRank (PR)。
能够处理大型社交网络是很有用的,考虑到边的数量,这些很快成为难题。这得益于大规模并行处理平台,如 Apache Spark。我在我的 github 页面(https://github.com/chopley/spark_social_network_analysis)上放了一个教程来指导用户完成这个过程。特别是 Apache Zeppelin 文件将引导新用户完成计算上述值的过程。本教程还将指导您设置 Neo4J 并生成上面的图。
我希望你玩得开心!如果你觉得这个有用,请给我一个掌声!
- Mark S. Handcock、David R. Hunter、Carter T. Butts、Steven M. Goodreau 和 Martina Morris (2003 年)。 statnet :网络数据统计建模软件工具。网址http://statnetproject.org
- Harris KM,Florey F,Tabor J,Bearman PS,Jones J,Udry JR (2003)。"全国青少年健康纵向研究:研究设计."北卡罗来纳大学技术报告。网址http://www.cpc.unc.edu/projects/addhealth/design.
社交网络数据:Twitter vs FB vs Google vs 其他所有人
这是关于技术如何塑造我们的社会联系的三篇系列文章中的第三篇。第一篇文章试图让你相信我们的在线和离线社交网络非常重要。第二篇概述了一些 T2 策略,设计者可以用来设计更好的社交网络。
如果我是你的朋友,谁拥有这些信息?脸书说我们中的任何一个都可以向世界展示我们的友谊。但是这让许多脸书用户感到惊讶,所以他们不断报告这是一个安全漏洞。关于我们社会互动的信息提出了独特的挑战。
这篇文章着眼于社交网络数据的来源,并对它们的质量、可用性和道德合法性进行评级。我的博士研究使用了 Twitter,但我已经用脸书数据、引用网络和离线网络做了工作。我还怀疑谷歌坐拥有史以来最有价值的社交网络信息,即使它不知道如何处理这些信息。
推特
Twitter 非常适合研究:默认情况下它是公开的,平台很乐意与用户分享(有限的)数据。它也有一种“城市广场”的氛围,是一个讨论当今重大问题的地方。
在我的博士学位中,我开发了一个工具,它使用 Twitter 数据来帮助地方政府改善和定位他们的服务。有一个问题,正如布兰克所说:
英国的推特用户比其他互联网用户更年轻、更富有、受教育程度更高,而其他互联网用户又比离线的英国人更年轻、更富有、受教育程度更高
类似的情绪在英国以外也是如此。在整个研究过程中,我已经意识到了这个问题。作为回应,我有两个论点:1)有数据总比没有数据好,所有的数据都有偏差,2)年轻人与当地政治无关,所以他们是一个可以接触到的好群体。
即便如此,Twitter 对更富裕、更有权力的人的过度描绘总是让它感到力不从心。社会的某些部分是“难以触及的”,如此难以参与,以至于几乎任何试图增加参与的系统都会失败。长期失业的人、不讲英语的人、露宿者——这些群体将需要不同的、可能是高度资源密集型的方法来增加他们的民主参与。一个让他们失望的系统不一定是完全失败的,如果它可以服务于其他不那么严重的弱势群体。尽管有这种逻辑,Twitter 在大多数时候确实是最有优势的。也有少数例外,可能为以后的工作指明方向。例如,对于行动不便的人或者不喜欢面对面交流的人来说,Twitter 是一种政治包容的手段。
Twitter 的另一个问题是让计算机处理数据。直觉上,推文应该对软件来说是高度易读的,包含非常丰富的元数据的简短文本——时间、地点、作者、标签、@提及。这还不是故事的全部。也许部分是因为推文的简洁性,有意义的推文活动分散在多条消息、讽刺性的转发、用户简介、图片中的文本、子推等上下文信息中。这些对计算机来说很难理解。
尽管有这些缺点,你会猜想 Twitter 应该是一个令人惊叹的研究平台。但是你多久能从 Twitter 数据中看到真正惊人的见解呢?感觉有点累了。
数据政治:Twitter 可能有各种各样的政治问题,但就数据而言,它非常透明:(本质上)一切都是公开的。当然,有些人会在公共场合说一些事情,并希望他们没有这样做。我认为任何保护人们免受这种危险的系统都是幼稚和家长式的。Twitter 非常明确,你的推文是公开的——这是 Twitter 服务的核心部分——我不认为这有什么道德问题。(虽然跟我提过很多次。)
**数据质量:**不完整,不具有人口统计学代表性,我的猜测是,将 Twitter 数据与其他来源结合起来将是其未来最丰富的应用。
数据可用性: Twitter 有一个可爱的 API(一个获取数据的计算机可读接口)。
脸谱网
脸书是最大的社交网络,所以你可能会猜测它一定有最好的数据。我想你可能错了。脸书的许多手势——也许尤其是“表示友好”——都以一次性乏味著称。脸书的原始友谊数据可能只不过是谁和谁一起上学的列表。(大多数情况下——我知道脸书有一些小众社区,它们编码了不同的关系。)Facebook Messenger 的互动可能更能表明有意义的社会关系——但话说回来,它可能只是告诉你他们最亲密朋友的相对较短的名单。
脸书提供了一个页面,在这里你可以看到他们对你的了解。我最近让一些学生使用这个工具,并告诉全班他们觉得它有多准确。从你在报纸上听到的,每个人都会被脸书的窗户送到你的潜意识里。事实上,大约一半的学生认为它有相当准确的信息,另一半认为它基本上是错误的。
**数据质量:**未知。很多人——包括营销公司和脸书本身——都有动机让人们觉得脸书的数据比实际情况要好。 WhoTargets。Me 是一个监测脸书政治广告的项目,在英国 2017 年大选前,我们看到了许多针对性很差的广告。这不一定直接反映 FB 的社交网络数据,但它可能是指示性的。
数据政治:绝大多数脸书用户不知道脸书有什么数据,也不知道如何浏览其隐私设置。众所周知,脸书也因其与俄国的关系而成为政治猜疑的对象。合法性不足。
数据可用性:脸书是一个有围墙的花园。几乎不可能在它上面建造任何东西。你可以要求用户安装一个 Chrome 插件,我们在 WhoTargets.me 项目上就是这么做的。不过,大多数情况下,研究人员都被脸书拒之门外。
谷歌
My Gmail network, visualised. Whose data is this for me to publish? (I’ve obscured uncommon names)
如果脸书没有强大的社交网络数据,谁有呢?Gmail。电子邮件是冗长、耗时的交流方式:它们是昂贵的信号。他们代表了各种各样的网络联系,不仅仅是你的朋友:专业的,社会的,甚至是与银行,能源供应商等的客户关系。Gmail——为此做好准备——拥有大量来自非 Gmail 账户持有人的网络数据。即使你不使用 Gmail,你一半的电子邮件(和相关的网络数据)仍然会被谷歌处理掉。如果电子邮件中的一个人有 Gmail 帐户,Gmail 可以看到收件人的完整列表。一个使用 Gmail 的自由职业者可以将整个公司结构的社交结构泄露给 Gmail(假设你的公司还没有使用 Google Apps……)。
**数据质量:**大概难以置信。
数据政治:谷歌的历史有些清白。它没有被指控选举了特朗普。很多人都有过这样的经历:在脸书分享的内容超过了他们的预期,而在谷歌上分享的却更少。他们甚至试图在 Google +平台上使用他们的社交网络数据,但是失败了——可能主要是因为实施而不是隐私政治。
**数据可用性:**与脸书不同,Gmail 的社交网络数据并非完全无法获取。我使用麻省理工学院的沉浸工具生成了上面的可视化效果。用户必须给出明确的许可,正如他们应该做的那样。
所有其他的
我想强调几个不太明显的社交网络数据来源。一个有趣的例子是同路人数据——来自位置数据的社交网络数据。
Co-traveller analysis carried out by the NSA. (via the Washington Post)
即使你有一群人非常好的位置数据,也很难知道他们是在互动,还是只是站得很近。除非你从统计学的角度来看:即使有非常低分辨率的位置数据,你也可以开始对社交互动做出强有力的推断,只要你有足够的位置数据点来工作。这里有很多很好的贝叶斯分析要做,但直觉很简单——如果两个人经常在不同的地方彼此靠近,他们可能认识彼此。
上面的信息图是为了解释美国国家安全局如何使用同路人分析来秘密跟踪潜在目标。但是你也可以在人们的许可下使用它,如果你建立了一个他们可以信任的平台,并且提供了一个合适的有说服力的提议。
最后,我想提一下学术引用网络,这是我和我的 Who Cites 一起工作的。项目。学术引用占据了一个特别有趣的伦理位置。学术研究几乎总是由国家支付部分费用,因此公开相关数据似乎是合理的。它还有可能揭示关于谁应该与谁一起工作,以及谁的工作最有影响力的有用信息。这与非市场合作(公共资源)的更广泛的想法一致,科利·多克托罗很好地概括了这一点。
摘要
在三篇文章中(第一篇第一篇和第二篇这里),我试图解释我在博士期间学到的一些东西。用非论文的语言写出来,对帮助我理清我认为我已经学到的东西,并思考下一步该去哪里有着难以置信的帮助。我已经感觉到另一个帖子,这次是关于道德的,即将到来…
社交网络、恐怖主义和数据隐私
By Martin Grandjean — Own work : http://www.martingrandjean.ch/wp-content/uploads/2013/10/Graphe3.png, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=29364647
我正试图开始一个新的小项目来帮助我跟上世界上发生的事情。我订阅了《经济学人》,但这些问题一直堆积在咖啡桌上,无人阅读,所以我努力改变这种状况,确保我不会持有愚蠢或无知的观点。
我的想法是每隔几周左右挑选一些我认为有趣的文章,总结它们,也许解释一点背景,并形成至少一个半可辩护的观点。
这里什么都没有。
本周有两篇关于科技公司如何运作以及这对恐怖主义、美国政治和信息隐私意味着什么的文章。这些文章是:
恐怖和互联网
在过去的十年中,互联网已经从一个大型的、分布式的、开放的网站集合变成了一个非常小的强大的、流行的、封闭的网站群。谷歌和 Facebooks 已经成为培育社区的平台,而这些社区对社会的影响并不总是积极的,由于这些平台是集中的,它们的支持者正在为发生在它们身上的事情受到一些指责。主要问题是假新闻、暴力和极端主义宣传、版权规避以及其他一些相对来说不那么重要的东西。
大部分讨论将是关于极端主义的宣传,因为这是原始文章和姐妹文章所强调的。
脸书、Youtube 和其他社交平台已经花费了数亿美元来维持高质量的产品。他们的运营团队打击垃圾邮件、欺诈、处理安全问题,以及执法部门通常处理的其他好事情。其中之一就是监控潜在的极端组织的皈依者。似乎令人毛骨悚然,但很有必要。抱怨似乎是这些公司做得不够,但对于一个已经做了很多的公司来说,这是一个相当强硬的声明。
科技公司的运营通常被视为成本中心。增加主要成本中心的成本通常是你想对公司做的相反的事情。问题是这些活动对你的底线有多大帮助,这种激励是否足以涵盖合理的反恐努力。
事实上,有几个问题是我感兴趣的,尽管在思考这如何影响社会时可能被认为是理所当然的。我在这里只是稍微绕一下路,因为我对获得真实答案的技术可行性感兴趣。总之,问题是:
- 我们如何知道社交平台上的招聘意义重大?
- 为了减少对社会的不良影响而去刷洗互联网的成本值得吗?我们在这方面能有多有效?
- 是谁的责任?
为此做实际工作会非常有趣,但很耗时,但这是我的个人博客,而不是博士论文,所以我将通过一个攻击计划来解决工作。我会把这个放在我未来技术项目的候选名单中。
衡量招聘率和寻找细分似乎相当困难。显然,大多数对恐怖主义的定量分析研究都集中在基于地点的恐怖袭击频率上(根据 Young 的测量恐怖主义,一篇超级有趣的文献综述)。这是有道理的,因为在此之前,任何有关恐怖活动的信号都很难从公开数据中衡量。这让我对军事情报中使用的方法非常好奇。
但是,如果恐怖组织通过营销转化模式招募的人数在增加,那么应该有办法通过这个平台来衡量。例如,你可以从 Twitter 的消防水管中获取信息,过滤那些带有极端主义宣传的链接,然后简单地统计一下。毫无疑问,IS 社交媒体经理有多个账户,但我们应该看到这两种情况下的趋势,因为它应该与一个常数成比例(除非扩展单个工具是可行的,这不是一个疯狂的想法)。如果您真的担心这个因素,您可以运行一个重复数据消除方案,它可以变得像您喜欢的那样复杂。这绝对是可能的,因为我知道一些大型的科技组织已经在这么做了。这是相当资源密集型的,因为它有大量的数据,但科学家在没有特殊数据访问权限的情况下也可以做到。
应该有类似的东西可以在 Youtube 和脸书上工作,我很有信心联邦调查局和国家安全局已经这样做了。尽管他们并没有真正谈论他们的成功率。正如我前面提到的,大多数对恐怖主义的统计分析将袭击的频率视为一般恐怖活动的信号。对于打击恐怖主义的总体目标来说,这很好,但如果我们想从社交网络方面了解招募工作的情况,我们需要更精细的东西。
这让我想起了一个博士生,他曾经秘密为美国某个地方的毒枭工作,然后写了一本关于他的经历的书。
我有更多的技术想法,但我不想让任何非技术读者感到厌烦,所以我们应该继续。我将跳过关于媒体版权的讨论,因为它不像恐怖主义和政治那样引人注目,因为我感觉这篇文章已经很长了。然而,这是一个很好的例子,说明过多的监管会扼杀技术进步,所以有点遗憾的是,我不会在这里过多地谈论它。
上述方法可能在某种程度上适用于分析假新闻,但有一个很大的区别:极端主义宣传(通常)对人类来说是非常明显的,但假新闻不是,我认为这是部分原因。我愿意不加分析地相信假新闻是重要的,但我对通过社交媒体招募恐怖分子有点怀疑。这看起来可能是一个奇怪的观点,因为恐怖分子会试图让这种方法奏效是完全合理的,但我认为这是一个简单得多的技术问题。我也看到了这些平台积极删除极端内容的强烈动机,但这与这些平台目前的做法相冲突(根据《经济学人》的文章)。
进入下一个问题:这是谁的问题?我想大多数人都会同意,科技公司应该监管自己的平台,但当我们讨论如何监管时,这个问题变得有趣了。
总的来说,我认为让公司做新的技术工作,以有趣的方式改变我们的生活是一件好事,但它需要经过大量的思考。我们已经看到了大约十年的大规模社交媒体,我们正试图确定它的哪些部分很糟糕。我认为联邦调查局和国家安全局迫使脸书在打击外国恐怖分子的斗争中采取符合美国最大利益的行动是正确的。但是如果不是恐怖分子而是另一个国家呢?如果敌人变成某些美国公民呢?所以这就成了问题。
这实际上导致了一些关于这些公司正在收集人们的私人数据的有趣讨论,这是本文后半部分的主题。你永远不知道这些数据库什么时候会被用来对付你,或者在那种情况下如何保护自己。GoogBookSoft 也是国际公司——如果有人因为你争取跨性别权利而决定在莫斯科的机场拘留你,会发生什么?
这篇文章批评科技公司只在影响到他们的底线时才投入资源,尽管打击假新闻最近已经成为一个社会优先事项,但如果公司认为他们可以忽视假新闻而不受惩罚,这种情况可能不会持续下去。
这是一个很好的批评。科技公司真的需要理解它们在社会中的长期角色,即作为公民对抗政府的工具。文章称,如果维护平台质量的自身利益还不够,那么唯一的求助手段就是法律。暂且忽略公民权利,我认为,如果它试图将市场推向正确的方向,而不是破坏性地、强有力地这样做,这可能是好的。这一点很重要,因为在这些问题上的强硬立场会减缓较小的竞争对手的进展,这些竞争对手可能没有资源来完全遵守。
但是有很多原因可以解释为什么你根本不希望政府介入。互联网是人们对抗日益强大的政府的巨大工具。Youtube 和 Twitter 在阿拉伯之春革命中的作用,以及维基解密帮助监控举报者的行为,非常清楚地表明了这一点。我在这里提供了一个有点滑坡的论点,但我认为这是完全有效的,因为我们正在玩一个每个玩家都在不断争夺更多控制权的游戏。自从第一只阿尔法雄性大猩猩被赋予统治地位来领导其余的笨蛋大猩猩以来,这一点就一直如此。
这其实是一个很大的哲学问题。我们想要安全和结构,还是无政府和自由?
最后,我认为如果你的兴趣是反恐,这种讨论会分散你的注意力。为此,我们真的需要从根本上解决问题,为什么人们一开始就想加入极端组织,并以其他方式缓和这些情绪。这是一个我想在以后的文章中多探讨一点的领域。
我认为,极端分子的招募是一个非常有趣的例子,说明了互联网(及其随后与社交网络的演变)带来的更强大的社区建设的更广泛影响。看看它是如何帮助恐怖分子的,可能会很容易说这对社会是一件坏事,但这将是一个错误。这只是不同,我们需要学习新的方法来应对一个可以在其他观点(有效或无效)中找到安慰和认可的社会。
未来的燃料
我真的很喜欢阅读和思考这两篇文章。我花了很多时间试图理解这波新的免费互联网产品的成本。我把它看作是“没有免费的午餐”定理的一种应用——每样东西都有它的成本,只是找到它的问题。
我们在自己的数据中没有发现很多价值。这只是总体上的问题,对一家公司来说,匿名与否并不重要,只要他们能影响你的行为,这是他们想要的。即使是拥有数据的公司也没有真正理解它在具体方面的价值(文章称,数据是不可替代的)。这体现在“数据交易”中,即公司同意相互提供对方的数据库,在某些情况下,公司宁愿收购其他公司,也不愿为自己的数据谈判价格。这基本上是以物易物,在如此先进的行业中看到这种经济倒退非常有趣。但我不是经济学家,所以这可能不是很有见地。我很想知道其他商品不容易估价的市场。
公司希望尽可能多地囤积数据,以获得竞争优势。对于一种实际上永远用不完的资源来说,这似乎不是最佳选择。这篇文章谈到印度政府将中央身份系统作为公共基础设施,并询问强迫公司开放其数据是否会缓解一些反垄断问题。这可能会,但不幸的是,这也加剧了隐私问题,因为更多的公司将获得这些数据,而大规模的交换更有可能导致泄露。类似 HIPAA 的法规可能会在这里发挥作用,但看到它给医疗和生物技术初创公司带来的额外负担,我确信它会大大减缓创新。
我认为如果有选择的话,我更喜欢数据公开,即使存在隐私问题。相互竞争的公司中存在太多的低效问题,这对社会没有好处。只有在行业已经发展起来的情况下,旨在人为维持竞争的监管才有意义。在此之前,你只是在扼杀创新。
我不会说脸书或谷歌应该成为公共基础设施。这实际上是一个可怕的想法——与道路、污水或水不同,搜索引擎可以被巧妙地操纵,以帮助政府积聚更多的权力。正如我在之前的总结中提到的,确保这种情况不会发生非常重要,因为互联网给了我们(人民)很多对抗政府的手段。
数据驱动的巨头与 20 世纪初工业时代的公司有两个有趣的不同之处:数据很少被出售或交易,客户对他们得到的东西相当满意。我对这一领域的历史了解不多,但我认为反垄断调查的一个原因是消费者价格欺诈。最大的区别是互联网服务是免费的,每个人都知道这是可能的,因为公司愿意为眼球时间付费。但这篇文章不是关于广告的,是关于数据的,特斯拉、GE 这样的公司是不会这么操作的。他们只是对产品进行创新,以获取更多价值。我认为广告的情况更令人怀疑,因为它促进了消费主义,对于健康经济的一些指标来说,这可能是好的,但对于正在挣扎的阶层来说,可能有不利影响。
无论如何,真正的问题是一小撮强大的垂直科技行业正在积聚太多的力量。亚马逊、谷歌和脸书是全球排名前三的互联网公司,这三家公司都非常强大,它们的利润都依赖于消费主义。与贫富差距的讨论密切相关,贫富差距的趋势令人担忧。
也就是说,也有不少其他公司出于明显的良好目的使用数据。特斯拉、优步、通用电气和英特尔都收集了大量的驾驶数据,以竞争自动驾驶汽车业务。公用事业公司收集关于你如何使用物理资源生活的数据,比如电和水。我认为这类数据更能证明个人价值。也许我的 Instagram 点击流只对广告商有价值,但我的驾驶和公用设施数据非常有价值,只要不让其他人知道就行(比如保险公司)。
互联网公司的许多可怕之处在于,它们试图以非常可疑的理由改变你的行为。如果你真的有动力,你当然可以提出一个荒谬的论点来反对更高效的交通,但我认为很明显,特斯拉和优步为社会做出了巨大的贡献。脸书想成为你一直看着的电话簿,这真的很奇怪。谷歌在这方面有更多的理由,因为有效获取知识极其重要,如果它必须由广告驱动,那么我想我们可能不得不接受这一点。亚马逊坐在中间:他们的激励驱使他们走向促进消费主义的极端,但我确实相信他们通过他们的平台和基础设施为社会做了好事。
这里的问题似乎是关于激励。资本主义的驱动力是亚马逊希望人们买一堆东西的原因,即使这对它自己的顾客有长期的损害。有大量的用户行为研究挖掘大脑的成瘾中心,让你点击并购买东西。为一个有用的产品特性和一个破坏性上瘾的特性找到一个好的阈值是一项复杂的任务,但应该不是不可能的。不幸的是,除了行为数据之外,很难测量这些东西——我们可能不得不等到我们可以将 MRI 机器塞进耳机或帽子里(尽管心电图可能是有效的?噪音很大,但小型化设备今天已经存在)。我认为走法律途径并不是不合理的,因为心理学方法在今天的互联网服务中相当普遍。
这也可能是一家公司生产抗成瘾产品的潜在途径。想象一下,如果你的浏览器可以告诉你,你正在表现出强迫或上瘾行为的迹象,或者指出你在相当无用的东西上花了很多钱。也许它可以检测出你对有针对性的在线广告反应有点太好了。我自己也愿意为这样的东西付钱。如果这艘船已经在数据隐私上航行,我们至少应该为了我们自己的个人利益最大限度地利用它。
我的感觉是,收集个人数据是不可逆转的社会变革之一,就像农业或资本主义一样。一旦世界看到了收集、交易和融合数据源以构建新产品的效率提升,似乎就没有回头路了。在这方面,我的观点相当自由,我认为在社会的大多数领域,变化通常是一件好事。自然保证了权力不会在一个地方集中太久。
也就是说,我仍然认为隐私很重要。解释这种风险的简洁方法是引用马克·吐温关于谎言、该死的谎言和统计数据的经典名言。定量研究和定性研究之间的区别比一个更严格或使用更多数据的定量研究要明显得多。我没有任何证据表明这会导致糟糕的决策,但我希望如此。我们的社会在统计学和实验设计方面还没有达到必要的水平。这可能会改变,但我对此表示怀疑。
几年前有部有趣的马特·达蒙电影叫《极乐世界》。我最喜欢的一个场景是,当他的角色正在接受一个执法机器人的采访时,执法机器人在他排队等候某事时发现了他涉嫌流氓行为。机器人根据一堆关于他的数据和他的犯罪记录来判断他犯罪的可能性。它迅速决定对他判刑,但整个场景的笑话是,他只是在错误的时间出现在错误的地点。
这个场景展示了一些事情,比如权威机构在自动决策过程中缺乏严谨性,但也是一个潜在的论点,即利用我们现有的资源来扩大执法规模,而不是将这些资源用于更小但更精确的过程。这些都是常见的道德问题,所以它们并不新鲜,但即使我们从定性发展到定量,我们也必须认清它们的本质。在许多情况下,对科技公司来说,精度并不那么重要,只要他们测量的信号按照他们想要的方式发展。我想我从来没有听说过一个产品团队会优先考虑客户的个人福祉。
通过确保作为一个社会,我们对我们允许机器做的事情保持高度警惕,很多问题都可以得到解决。即使他们没有自主决定事情,他们影响我们决策的事实仍然非常重要。我认为隐私是保护人们免受统计数据暴政的一个方面。现在尤其重要的是,有人可以说决策或过程是定量的,因为他们有数据。我认为,如果你的听众没有将统计学正确应用于现实世界问题的背景,这是一件很难反驳的事情。
或许这表明该行业需要一点监管。我一点也不喜欢许可和更多的找工作的官僚主义,所以也许有办法让公司对他们的分析负责。也许它的工作原理类似于个人医疗数据的 HIPAA 合规性,在这种情况下,您可以对存储和传输敏感医疗数据的安全实践进行审核。也许根据公司分析的统计严谨性来审计公司是合理的,至少对于那些被认为在处理重要个人数据或提供重要服务的公司来说是如此。
我确实觉得用用户数据强制开放的想法非常有趣。使用数据来制造更好的产品是相当新的,因此开放应该鼓励所有这些数据的创新使用。这也部分解决了某些技术行业垂直行业的权力集中问题,因为这限制了它们的竞争优势。在此之前,最重要的是要弄清楚如何保护个体消费者。我认为保护的两个部分是来自压迫性的政府程序和公司的产品界面,如果能增加他们的利润,他们会很乐意让你的精神和财务健康受到损害。我很想知道是否有我没有想到的其他领域。
#socialMediaOuch!
Study of Leonardo da Vinci’s St. Jerome in the Wilderness, Private collection
“我们所创造的世界是我们思考的过程。不改变我们的思维,就无法改变。”[人名]阿尔伯特·爱因斯坦(犹太裔理论物理学家)
今天,你我经历了 86164.1 秒的变化,就看你怎么定义一天了。你可以说,今天早上的我已经不是那一天结束时的我了,在那 86,164.1 秒里,我发生了一连串的变化,说来也怪,我们每个人都是如此。跨越多少年?
一年包含了 31,536,000 秒的微小变化。毫无疑问,去年的我已经不是现在的我了,我是说一秒钟前,哦,几秒钟前…你明白了。
仅去年一年就有超过 3100 万个小的连续变化。
3100 万,或者更准确地说,因为变化正在我们所有人身上发生,一系列的变化大致跨越了
这是一个很大的变化。
是的,我们在睡觉的时候也在改变,所以即使我们没有意识到,这个总数仍然是有价值的。
# social media——嗡嗡声进入我们的眼睛、耳朵和思想,随着接触的每一秒,我们都在改变自己。许多人的共同想法。
试想一下,在历史上的大部分时间里,士兵们都是按着同样的节拍前进的——这是一种有组织的控制方式,同时在整个团队中创造出一种团结感,“ 我们是一体的。 “与#socialMedia 惊人的相似。
只是观察一下。
嘿,随着机器学习和深度学习开始组织并推动代表我们个人#socialMedia 活动的数据产生特定结果,将会或可能会发生什么——我们可以期待什么类型的结果?
有趣的问题,汉克。一定要说。
比如说,考虑像亚马逊这样的实体的全球存在。这同样适用于脸书或谷歌。考虑一下,作为人类,我们共享某些生物结构,如果你分析代表行为模式的数据,这是一件好事,因为人类结构的相似性使得一组基础算法、非常大规模的经济可以用于分析,甚至提议的行动(或者甚至改变,记住上面的内容,我们生来就是为了改变)。
7515284153
全球影响(如果每个人都以某种方式使用社交媒体应用。他们还没有考虑到这个趋势)!
让我们用美元/印象数来说明这个数字。让我们考虑一下全球人口的百分之一
7,515,284,153 x 0.01 = 75,152,841.53 人
让我们说,只是为了有一个开始的地方(你必须从某个地方开始到某个地方),1%的人使用某种形式的社交媒体,比如说,他们一天中的 10%,或者:
86,164.1 秒 x 0.1 = 8,616 秒的潜在影响
在全球 1%的 75,152,841 人中,一天之内,我们假设的社交媒体影响是:
8,616(秒)x 75,152,841(假设人群集)= 647,516,878,056 秒基础印象!
现在,让我们用这个数字来确定实施人工智能的商业价值。
如果我是一个全球商业实体,不知何故,我能够给每个人每秒的印象贴上一个标签,你知道,就像营销行业是如何工作的,那么,你就可以赚很多钱。多少钱?
在一天中,以平均每天 10%的时间影响全球 1%的人口——在某些情况下更少,在其他情况下更多,一天的印象价值的各种假设值:
@ $0.01(一美分)每印象/秒= 0.01 美元 x 647,516,878,056 = 6,475,168,780 美元
每天超过 60 亿美元!
宝贝,这就是我想从事的行业!
对,所以,这只是一个模型。减少每秒每印象的值,或改变群体大小等。把它演完。不管怎么说,这都是个大数目。
这里更重要的一点是,通过#socialMedia 来推动特定结果有着非常真实的价值。人工智能、机器和深度学习相结合,是一个伟大的开端,通过数据预测分析,开始引导观众走向可预测的结果。
“就像云计算迎来了当前初创企业的爆炸一样……机器学习平台可能会推动下一代消费者和商业工具的发展。” 人工智能的民主化:对技术创新意味着什么
这还不是最可怕的部分。
如果我拥有并出售人工智能即服务(AIaaS ),通过#socialMedia 来推动特定的成果,我认为这些成果将对销售产品的公司有巨大的价值。你觉得呢?
可怕的是,当你考虑成功的小创业,特别是商业成功时,通常会有一些投资花在让成功的赚钱机器更有效率上。想想 iPhone,Amazon,或者更好的 AWS,当他们在时间内取得一定程度的成功时,发生了什么。持续投资。因此,这意味着这些漂亮的小机器和深度学习算法,随着它们通过更有效的商业见解和由此产生的商业决策来提高效率和收入,从而证明它们的价值,这些回报将产生更多的投资,目标是推动更好的结果。驱动特定结果的趋势线是什么?切入正题,人口控制成果。
#socialMediaOuch!
一枚戒指统治一切——一台#社交媒体机器和深度学习基板,推动理想的业务成果。我相信华盛顿有人已经想通了,他们已经为企业号准备好了他们的“谢谢”。
干杯,
一卷
汉克·m·格林是谁?
“我就是我说过的我,一个讲故事的人。但是,你可能会问,我从哪里来,要到哪里去?十掌握着我去哪里的钥匙,它将决定我从哪里来。”
读一读汉克·m·格林@【https://sites.google.com/view/time-a-trilogy/ 写的《第一册:十个》的草稿
推特@hankmgreene 或https://twitter.com/hankmgreene
https://www.facebook.com/hankmgreene 脸书
Flipboard: HankMGreene
带 Tensorflow 的软标志激活功能[带 TF 的手动后撑]
GIF from this website
因此,论文“二次特征和分块的深度架构”自 2009 年就已经存在,然而我最近在阅读“理解训练深度前馈神经网络的困难”时发现了该论文中介绍的激活函数(我也就此事做了一篇论文总结,如果有人对感兴趣,请点击此处)。)
只是为了好玩,让我们比较许多不同的情况,看看哪个给我们最好的结果。
案例 a) Tanh 激活函数 与 AMS Grad 案例 b)软签激活函数 与 AMS Grad 案例 c) ELU 激活函数 与 AMS Grad
软标志激活功能
红线 →软标志激活功能
蓝线 →双曲正切激活功能
绿线 →软标志功能的导数
橙线 →双曲正切激活功能的导数
如上所述,我们可以直接观察到软符号激活函数比双曲正切激活函数更平滑的事实。(具体来说,该函数名义上是多元增长,而不是指数增长。)并且这种更温和的非线性实际上导致更好更快的学习。在更详细的解释中,研究人员发现,柔和的手势可以防止神经元饱和,从而提高学习效率。(要了解更多信息,请阅读这篇博文。)
网络架构/数据集
红框 →输入图像
黑框 →与不同激活函数的卷积运算
橙框 →分类的软 Max 运算
如上所述,我们将使用的基础网络架构是 ICLR 2015 中展示的全卷积网络。最后,我们将用来评估我们网络的数据集是 CIFAR 10 数据。
结果:情况 a) Tanh 激活功能 与 AMS Grad (CNN)
左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本
如上所述,对所有卷积网络使用 tanh 的图像分类任务似乎需要更长的时间来收敛。在 21 世纪末期,该模型只能在训练图像上达到 69%的准确度(在测试图像上达到 68%的准确度),然而该模型似乎在正则化方面做得很好。
结果:情况 b)软标志激活功能 与 AMS Grad (CNN)
左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本
我其实很惊讶,软标志激活功能的表现不如 tanh。花费更长的时间来收敛并不总是意味着激活函数不好,然而对于这种设置,软符号激活函数可能不是最佳选择。
结果:情况 c) ELU 激活功能 与 AMS Grad (CNN)
左图 →一段时间内的训练精度/成本
右图 →一段时间内的测试精度/成本
对于图像分类,传统的 relu 类激活似乎是最好的选择。因为它们不仅在训练/测试图像上具有最高的精度,而且收敛得更快。
交互代码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!同样为了透明,我在 github 上上传了所有的训练日志。
要访问案例的代码,点击这里,日志的点击这里。
点击此处查看案例 b 的代码,点击此处查看日志。
要访问案例 c 的代码,请点击此处,要查看日志,请点击此处。
遗言
另外,这篇博文在比较许多其他激活功能方面做得非常出色,所以如果有人感兴趣,请查看一下。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的推特这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- 图瑞安、伯格斯特拉和本吉奥(2009 年)。组块的二次特征和深层结构。人类语言技术会议录:计算语言学协会北美分会 2009 年度会议,配套卷:短文,245–248。从https://dl.acm.org/citation.cfm?id=1620921取回
- 作为神经网络激活函数的软设计。(2017).赛菲克·伊尔金·塞伦吉尔。检索于 2018 年 5 月 28 日,来自https://sefiks . com/2017/11/10/soft sign-as-a-neural-networks-activation-function/
- 对一个不很深的神经网络的深入研究。第 2 部分:激活函数。(2018).走向数据科学。2018 年 5 月 28 日检索,来自https://towards data science . com/deep-study-of-a-not-very-deep-neural-network-part-2-activation-functions-FD 9 BD 8d 406 fc
- (2018).Proceedings.mlr.press .检索于 2018 年 5 月 28 日,来自http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
- 【论文摘要】了解训练深度前馈神经网络的难度。(2018).中等。检索于 2018 年 5 月 28 日,来自https://medium . com/@ SeoJaeDuk/paper-summary-understanding-the-difference-of-training-deep-feed-forward-neural-networks-ee34f 6447712
- 导数双曲函数。(2018).Math2.org。检索于 2018 年 5 月 28 日,来自http://math2.org/math/derivatives/more/hyperbolics.htm
- 2017 年深度学习优化实现亮点(feat。塞巴斯蒂安·鲁德)。(2018).中等。检索于 2018 年 5 月 28 日,来自https://medium . com/@ SeoJaeDuk/implementation-of-optimization-for-deep-learning-highlights-in-2017-feat-sebastian-ruder-61e 2 CBE 9 b 7 CB
- Wolfram|Alpha:让世界知识可计算。(2018).Wolframalpha.com。检索于 2018 年 5 月 28 日,来自http://www.wolframalpha.com/input/?I = f(x)+% 3D+x % 2F(1% 2B % 7Cx % 7C)
- Numpy 向量(N,)。(2018).Numpy 向量(N,1)维-> (N,)维转换。堆栈溢出。检索于 2018 年 5 月 29 日,来自https://stack overflow . com/questions/17869840/numpy-vector-n-1-dimension-n-dimension-conversion
- CIFAR-10 和 CIFAR-100 数据集。(2018).Cs.toronto.edu。检索于 2018 年 5 月 29 日,来自 https://www.cs.toronto.edu/~kriz/cifar.html
- [ ICLR 2015 ]追求简单:具有交互码的全卷积网。(2018).走向数据科学。检索于 2018 年 5 月 29 日,来自https://towards data science . com/iclr-2015-力争简单-所有卷积网与交互式代码手册-b4976e206760
- [谷歌]连续可微分指数线性单位与互动代码。(2018).中等。检索于 2018 年 5 月 29 日,来自https://medium . com/@ SeoJaeDuk/Google-continuously-differentiable-index-linear-units-with-interactive-code-manual-back-2d 0a 56 DD 983 f
软技能是雇佣优秀数据科学家的决定性因素
当人们听到“数据科学家”这个头衔时,他们通常会想到一个有数字头脑的人,擅长数学和统计,并且只在有数据支持的情况下推广策略。虽然这是真的,但它描绘了一幅可悲的不完整画面。事实是,最优秀的数据科学家因其软技能而大放异彩,利用他们的创造力和沟通能力将自己与普通专业人士区分开来。
硬技能在整个工业革命中受到重视,逻辑和决定论允许我们建造机器,以便我们理解每个运动部件,并使用明确的指令指挥它们。通过控制每一个输入到输出,我们的机器被认为是可靠的,可控的,并使我们在我们的工业雄心中保持竞争力。但这种显式控制正迅速成为一种过时的工程方法,因为它不再生产与信息时代同步的产品。
今天的机器需要适应,需要自己学习。这需要对基于规则的软件中所没有的复杂性的理解。数据科学家需要和机器一起工作,让他们做计算,让我们做训练。生产一台能够提供智能输出的机器是一项复杂的工作,涉及人类参与和创造力的许多方面。
数据科学家必须在比传统工程师更高的抽象层次上工作,因为我们创造的技术与用户需求更直接地重叠。我们的应用程序产生的输出是*决策,*而不是像可排序列表或索引照片这样的传统特性。这就是为什么数据科学需要软技能来理解人们以及他们做出日常决策的方式。
我们需要意识到,我们已经进入了机器比人更擅长“硬技能”的时代。许多候选人以及刚接触机器学习的组织未能意识到这一点,认为数据科学是关于技术和数字的。当然,我们对数字很在行,但这与在白板上解公式或在追求某种终极理论时推导方程的意义不同。现在,科学和企业都把这些任务推给了机器,把解释和策略留给了我们人类。
数据科学家非常擅长混合和调整算法,这样数学和统计学就能解决并汇聚成重要的输出。这不是你可以硬连线到机器中的东西,而是在多次尝试准备数据并转动我们算法的“旋钮”后观察到的东西。这就是在数据科学中做数学的意义。
对于那些不太熟悉机器学习生态系统的人来说,给数据科学专业带来太多硬技能通常意味着重新发明轮子。半个多世纪的机器学习已经过去,这个行业很少需要从头开始构建新的算法。伟大的数据科学家是变化和迭代的大师,他们混合和匹配现有的解决方案,直到现实世界用一个有效的产品来验证他们的努力。它是在多次尝试后知道你在看什么;不要天真地试图预先计划一种方法,使用仅仅在象牙塔后面发展起来的“专业知识”。
软技能允许数据科学家通过我们的机器学习努力巧妙地应对挑战,因为正是软技能将技术与最重要的事情联系起来;用户反馈。任何行业的领域专家几乎都是非技术性的,但是他们拥有成功构建智能软件的重要知识和经验。没有他们的智慧和我们的算法之间的桥梁,我们在真空中产生一切,在上下文中什么也没有。
软技能在雇用数据科学家时更具决定性,因为那些能够制作智能软件和进行有效沟通的人是稀有品种。他们明白,数学和统计只是一个更复杂旅程的起点,没有更柔和的触摸是无法实现的。那些能够通过与人交谈,理解他们的痛点,并哄骗机器成为它需要的样子来解决问题的人。
对于那些希望进入数据科学的人来说,首先要确保你对数学和统计学的理解是概念上的。智能软件不是在白板上实现的,它诞生于领域专家和训练机器的人才之间的有效对话。你的硬技能永远比不上今天的智能软件,也不会让你在一个为人们构建产品的职业中脱颖而出。学会清晰地说话,简化你的思维,尽可能地去除行话,对机器的终点和你的起点建立一种欣赏。你的事业会感谢你的。
简化的 Softmax 函数
回归公式如何提高深度学习模型的准确性
TL;这是我致力于机器/深度学习和自然语言处理主题系列的第一篇文章。这篇文章讨论了 Softmax 回归,其中我们计算输入向量的指数,以便将数据集归一化为值总和为 1 的概率分布。适合多维分类,而不是二元分类。
序言
我对机器学习(ML)产生了浓厚的兴趣,特别是探索自然语言处理(NLP)领域。通过研究论文和算法,引起我对这个领域的好奇心;总的来说,人工智能在优化实验结果方面总是有改进的空间,100 行代码如何能够让行业自动化那些否则需要漫长而乏味的时间才能完成的任务。在我们必须学习一个数据集的情况下,然后输出有意义的信息,这些信息是认知的或与现实世界的期望一致的,并迭代地这样做,以通过增量变化来实现更高的准确性,这对我来说绝对是令人着迷的。
对我的学术旅程的洞察对大多数人来说是独特的,因为我的大多数课程都与产品工程和数据分析有关。然而,我想给这次学术经历增添一些额外的趣味。为了做到这一点,我决定报名参加学校计算机科学系开设的自然语言处理课程。
该课程在揭示大量可供学习的主题方面做得非常出色,随着该领域取得如此多的进展,我非常有动力开始撰写与 ML、NLP 和深度学习相关的概念。然而,随之而来的是一个挑战。课内外学习的概念已经是数学密集型的,充满了令人困惑的符号和推导。我想以这样一种方式简化它们,任何对某些主题有热情的人都可以很容易地理解它们,甚至可能将它们应用于研究、职业、创业或黑客马拉松。
所以在最初的几堂课中,教授带我们浏览了与语言建模相关的材料;这是智能系统使用的*、*技术,用于准确预测任何给定文本中的单词或句子。直到教授引入了一个特殊的术语叫做最大回归的 S之前,这些内容都是有意义的。我被那些看起来像法语(或者更像拉丁语)的符号淹没了。)对我来说。通过几个小时的自学和一杯热腾腾的榛子咖啡,这个概念很快就有了意义。
为了以一种更加简化和进步的方式解释它,我们将首先从定义开始,然后理解所涉及的符号,最后看到函数本身的编码实现。
定义
Softmax 回归是逻辑回归的一种形式,它将输入值归一化为值的向量,该向量遵循总和等于 1 的概率分布。输出值在范围[0,1]之间,这很好,因为我们能够避免二进制分类,并在我们的神经网络模型中容纳尽可能多的类或维度。这就是 softmax 有时被称为多项式逻辑回归的原因。
顺便说一下,Softmax 回归的另一个名字是最大熵(MaxEnt)分类器。
该函数通常用于计算训练数据集时的预期损失。softmax 回归的已知用例在判别** 模型中,如交叉熵和噪声对比估计。这些只是试图优化当前训练集以增加预测正确单词或句子的可能性的各种技术中的两种。(我们将在接下来的几篇文章中触及上述技术,敬请关注。)**
如果你从一开始就看它,这个定义可能听起来微不足道,但在机器学习和 NLP 领域,这个回归函数作为一个基线比较器是有用的。设计新解决方案的研究人员必须进行实验,并将 softmax 结果作为参考。然而,应该注意的是,softmax 并不像 Sigmoid 或 ReLU (整流线性单元)那样理想地用作激活功能,而是用于多层或单层之间。
注释
分类器函数涉及一些高级符号,我们接下来将深入探讨。下图展示了 Softmax 函数的样子。让我们试着一点一点去理解。
A mathematical representation of the Softmax Regression function
- 给定一个独热编码矩阵 θ、形式的净输入参数,我们的目标是预测训练的特征集x; 每一个都有自己设定的权重,都是 j 的一类。一个独热矩阵由二进制值组成,数字 1 代表列的 iᵗʰ位置的元素,而其余的是 0(相对较大的矩阵有稀疏的风险,我们将在下一篇文章中讨论)。**
- 在公式中,我们计算输入参数的指数和输入中所有现有值的指数参数总和**。Softmax 函数的输出是参数的指数与指数参数之和的比值。**
- θ ,在高层次上是向量中每个出现元素的得分之和。在一般形式中,我们说θ是权重矩阵 w 的转置,乘以特征矩阵 x.
- 术语 w₀x₀是需要在每次迭代中添加的偏差。
代码实现
实现代码非常容易,有趣的是,考虑到我们有必要的 Python 助手函数,它只有一行代码。在下面的 Github 要点中,我使用了 Numpy 和 Tensorflow 来编写 Softmax 函数,如前一节所述。这两个提到的库普遍用于执行数学和神经网络相关的操作。
结论
在下一篇文章中,我们将进一步了解如何利用 softmax 函数作为对数损失神经网络的一部分进行计算,以最小化单词嵌入中的预测误差。我们将获取文本样本,这将允许我们理解关于 NLP 及其在现实世界中的实际应用的更深层次的概念。
敬请关注。😃
引用的作品
** [## Softmax 函数和 Sigmoid 函数的区别
在学习逻辑回归概念时,主要的困惑是用于计算的函数…
dataaspirant.com](http://dataaspirant.com/2017/03/07/difference-between-softmax-function-and-sigmoid-function/)
https://sebastianraschka . com/FAQ/docs/soft max _ regression . html**
传播和分享知识。这篇文章是致力于理解 NLP 核心概念的系列文章中的第一篇。如果这篇文章激起了你的兴趣,请鼓掌,因为它总是激励我写出更多的信息内容。此外,请关注我的个人资料,获取更多与技术相关的文章。—哈姆扎
软件架构模式
分层架构
这是大多数企业级应用程序中最常见的架构模式。假设层数为 n ,这也被称为 n 层模式。这是 JAVA EE 应用程序的事实模式。
层的示例场景
Source: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture
表示层
网页、UI 表单和最终用户交互 API 的呈现
业务层
可访问性、安全性和身份验证背后的逻辑发生在这一层。这包括 ESB(企业服务总线)、中间件和其他各种请求拦截器来执行验证。
持久层
这是数据的表示层。这包括 DAO(数据访问对象)表示、ORM(对象关系映射)和其他在应用程序级别表示持久数据的模式。换句话说,这展示了 RAM 中的持久数据。它通常位于下层的磁盘中。
数据库层
简单的数据库扩展到 San(存储区域网络)
层的组成
层由组件组成。这些组件比对象类和包更抽象。一个组件可以演示一组执行单一任务的包。
“组件加强了关注点的分离”
关键概念
封闭层
这展示了 隔离层 的概念,它以更严格的方式分隔每一层,只允许顺序通过各层,而不允许旁路。如图所示,这加强了层的更好的解耦,使得整个系统对于变化更加可行。
Source: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture
打开图层
开放层允许系统绕过层并触及下面的层。这是在任务关键型系统中完成的,在这些系统中,延迟会造成很大的损失。通常这些层意味着通信开销。因此,有时绕过层并直接从正确的层寻找数据是合理的。
Source: https://www.oreilly.com/ideas/software-architecture-patterns/page/2/layered-architecture
模式分析
采用分层模式可能会误导并导致一种称为 “架构陷坑反模式” 的反模式,这种反模式展示了具有不执行任何逻辑的层,但增加了通信开销。因此,这些层必须以执行特定任务的方式进行设计,以补偿整个系统的通信开销和可维护性。
模式可测试性
由于分层的性质,这个值更高。通过传递虚拟消息并使用虚拟接口来演示直接层,可以单独测试每一层。
性能和可扩展性
由于有通信开销,这可能很低。这可能需要转换消息类型等。就可伸缩性而言,添加更多层不是一个选择。该模式不会无限扩展。
尽管有起有落,开发工作还是少了很多,因为一旦确定了通信协议,不同的团队就可以在不同的层上工作,并在每个团队的成员之间分配组件。
用爬山搜索算法解决幻灯片难题
爬山搜索算法是局部搜索和优化技术中最简单的算法之一。Miroslav Kubat 在《机器学习导论》一书中是这样定义的:
Hill Climbing Algorithm Steps
步骤 3 中的评估函数计算当前状态与最终状态的距离。所以在 3x3 幻灯片拼图的情况下,我们有:
Final State:
1 2 3
4 5 6
7 8 Consider Current State:
1 2 3
4 5 6
7 8
评估函数 dF 计算每个瓦片达到其最终状态所需的移动的总和。由于图块 1 至 7 已经位于正确的位置,因此不需要移动它们。然而,瓦片 8 从其最终位置移开。
dF(8) = m(1)+m(2)+m(3)+m(4)+m(5)+m(6)+m(7)+m(8)
= 1
爬山评估可能的下一步,选择距离最短的一步。它还检查是否已经观察到移动后的新状态。如果为真,那么它跳过这步棋,选择下一步最好的棋。由于空缺的瓷砖只能由其邻居填充,爬山有时会被锁定,无法找到任何解决方案。这是这个算法的主要缺点之一。
另一个众所周知的缺点是局部最优。该算法根据即时距离(成本)决定下一步行动(状态),假设现在的小改进是达到最终状态的最佳方式。但是,选择的路径可能会导致后期成本更高(步骤更多)。
类似于爬上一座小山后进入一个山谷。
为了避开局部最优,我建议使用深度优先的方法。
深度优先法爬山
想法是遍历一条路径一个确定的步骤数(深度)以确认它是最好的移动。
- 对当前状态的所有可能的下一步(状态)进行循环。
- 调用步骤 1,直到达到深度 d。这会生成一棵高度为 d 的树。
- 选择最小成本(dF)的移动(状态)
- 返回 dF,以便在
depth-1
级别进行评估。
我观察到深度优先的方法提高了到达最终状态的整体效率。但是,它占用大量内存,与使用的深度值成比例。这是因为系统必须根据使用的深度跟踪未来状态。
以下是各种深度的移动距离图表的简要比较:
Puzzle Initial State
Depth=0, Puzzle Unresolved even after 480 steps
Depth=1, Puzzle Unresolved in 48 Steps
Depth=3, Puzzle Unresolved in 34Steps (Note fewer hills)
Depth=6, Puzzle Unresolved in 26 Steps (Even fewer hills)
这里可以进行现场评估。尝试各种深度和复杂性,并查看评估图。有时,由于锁定(没有新状态),谜题仍未解决。
或者,如果你只是有解谜的心情,试试自己对抗由爬山算法驱动的 bot 。
每当你输给机器人时,点击这篇文章的“喜欢”按钮:-)
玩得开心!
已编辑:Live evaluation 和 bot 目前无法在移动设备上运行。
用 Python 解决简单的分类问题——水果爱好者版
Photo credit: Pixabay
在这篇文章中,我们将使用 Python 最流行的机器学习工具 Scikit-learn 在 Python 中实现几个机器学习算法。使用简单的数据集来训练分类器以区分不同类型的水果。
这篇文章的目的是确定最适合手头问题的机器学习算法;因此,我们希望比较不同的算法,选择性能最好的算法。我们开始吧!
数据
水果数据集是由爱丁堡大学的伊恩·默里博士创建的。他买了几十个不同品种的橘子、柠檬和苹果,并把它们的尺寸记录在一个表格里。然后密执安大学的教授将水果数据稍微格式化,可以从这里下载。
让我们看看前几行数据。
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as pltfruits = pd.read_table('fruit_data_with_colors.txt')
fruits.head()
Figure 1
数据集的每一行都代表一片水果,由表的列中的几个要素表示。
数据集中有 59 种水果和 7 个特征:
print(fruits.shape)
(59,7)
数据集中有四种水果:
print(fruits['fruit_name'].unique())
[‘苹果’ ‘橘子’ ‘橘子’ '柠檬]]
除了普通话,其他数据都很平衡。我们只能顺其自然了。
print(fruits.groupby('fruit_name').size())
Figure 2
import seaborn as sns
sns.countplot(fruits['fruit_name'],label="Count")
plt.show()
Figure 3
形象化
- 每个数值变量的箱线图将使我们对输入变量的分布有一个更清晰的概念:
fruits.drop('fruit_label', axis=1).plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False, figsize=(9,9),
title='Box Plot for each input variable')
plt.savefig('fruits_box')
plt.show()
Figure 4
- 看起来颜色分数可能具有近似高斯分布。
import pylab as pl
fruits.drop('fruit_label' ,axis=1).hist(bins=30, figsize=(9,9))
pl.suptitle("Histogram for each numeric input variable")
plt.savefig('fruits_hist')
plt.show()
Figure 5
- 一些属性对是相关的(质量和宽度)。这表明了高度的相关性和可预测的关系。
from pandas.tools.plotting import scatter_matrix
from matplotlib import cmfeature_names = ['mass', 'width', 'height', 'color_score']
X = fruits[feature_names]
y = fruits['fruit_label']cmap = cm.get_cmap('gnuplot')
scatter = pd.scatter_matrix(X, c = y, marker = 'o', s=40, hist_kwds={'bins':15}, figsize=(9,9), cmap = cmap)
plt.suptitle('Scatter-matrix for each input variable')
plt.savefig('fruits_scatter_matrix')
Figure 6
统计摘要
Figure 7
我们可以看到数值没有相同的标度。我们需要对我们为训练集计算的测试集应用缩放。
创建训练集和测试集并应用缩放
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
构建模型
逻辑回归
from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression()
logreg.fit(X_train, y_train)print('Accuracy of Logistic regression classifier on training set: {:.2f}'
.format(logreg.score(X_train, y_train)))
print('Accuracy of Logistic regression classifier on test set: {:.2f}'
.format(logreg.score(X_test, y_test)))
逻辑回归分类器对训练集的准确率:0.70
逻辑回归分类器对测试集的准确率:0.40
决策树
from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier().fit(X_train, y_train)print('Accuracy of Decision Tree classifier on training set: {:.2f}'
.format(clf.score(X_train, y_train)))
print('Accuracy of Decision Tree classifier on test set: {:.2f}'
.format(clf.score(X_test, y_test)))
决策树分类器在训练集上的准确率:1.00
决策树分类器在测试集上的准确率:0.73
K-最近邻
from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print('Accuracy of K-NN classifier on training set: {:.2f}'
.format(knn.score(X_train, y_train)))
print('Accuracy of K-NN classifier on test set: {:.2f}'
.format(knn.score(X_test, y_test)))
K-NN 分类器在训练集上的准确率:0.95
K-NN 分类器在测试集上的准确率:1.00
线性判别分析
from sklearn.discriminant_analysis import LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis()
lda.fit(X_train, y_train)
print('Accuracy of LDA classifier on training set: {:.2f}'
.format(lda.score(X_train, y_train)))
print('Accuracy of LDA classifier on test set: {:.2f}'
.format(lda.score(X_test, y_test)))
LDA 分类器在训练集上的准确率:0.86
LDA 分类器在测试集上的准确率:0.67
高斯朴素贝叶斯
from sklearn.naive_bayes import GaussianNBgnb = GaussianNB()
gnb.fit(X_train, y_train)
print('Accuracy of GNB classifier on training set: {:.2f}'
.format(gnb.score(X_train, y_train)))
print('Accuracy of GNB classifier on test set: {:.2f}'
.format(gnb.score(X_test, y_test)))
GNB 分类器在训练集上的准确率:0.86
GNB 分类器在测试集上的准确率:0.67
支持向量机
from sklearn.svm import SVCsvm = SVC()
svm.fit(X_train, y_train)
print('Accuracy of SVM classifier on training set: {:.2f}'
.format(svm.score(X_train, y_train)))
print('Accuracy of SVM classifier on test set: {:.2f}'
.format(svm.score(X_test, y_test)))
SVM 分类器在训练集上的准确率:0.61
SVM 分类器在测试集上的准确率:0.33
KNN 算法是我们尝试过的最精确的模型。混淆矩阵提供了对测试集没有错误的指示。然而,测试集非常小。
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
pred = knn.predict(X_test)
print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred))
Figure 7
绘制 k-NN 分类器的决策边界
import matplotlib.cm as cm
from matplotlib.colors import ListedColormap, BoundaryNorm
import matplotlib.patches as mpatches
import matplotlib.patches as mpatchesX = fruits[['mass', 'width', 'height', 'color_score']]
y = fruits['fruit_label']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)def plot_fruit_knn(X, y, n_neighbors, weights):
X_mat = X[['height', 'width']].as_matrix()
y_mat = y.as_matrix()# Create color maps
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF','#AFAFAF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF','#AFAFAF'])clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
clf.fit(X_mat, y_mat)# Plot the decision boundary by assigning a color in the color map
# to each mesh point.
mesh_step_size = .01 # step size in the mesh
plot_symbol_size = 50
x_min, x_max = X_mat[:, 0].min() - 1, X_mat[:, 0].max() + 1
y_min, y_max = X_mat[:, 1].min() - 1, X_mat[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, mesh_step_size),
np.arange(y_min, y_max, mesh_step_size))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)# Plot training points
plt.scatter(X_mat[:, 0], X_mat[:, 1], s=plot_symbol_size, c=y, cmap=cmap_bold, edgecolor = 'black')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())patch0 = mpatches.Patch(color='#FF0000', label='apple')
patch1 = mpatches.Patch(color='#00FF00', label='mandarin')
patch2 = mpatches.Patch(color='#0000FF', label='orange')
patch3 = mpatches.Patch(color='#AFAFAF', label='lemon')
plt.legend(handles=[patch0, patch1, patch2, patch3])plt.xlabel('height (cm)')
plt.ylabel('width (cm)')
plt.title("4-Class classification (k = %i, weights = '%s')"
% (n_neighbors, weights))
plt.show()plot_fruit_knn(X_train, y_train, 5, 'uniform')
Figure 8
k_range = range(1, 20)
scores = []for k in k_range:
knn = KNeighborsClassifier(n_neighbors = k)
knn.fit(X_train, y_train)
scores.append(knn.score(X_test, y_test))
plt.figure()
plt.xlabel('k')
plt.ylabel('accuracy')
plt.scatter(k_range, scores)
plt.xticks([0,5,10,15,20])
Figure 9
对于这个特定的日期集,当 k=5 时,我们获得最高的精确度。
摘要
在这篇文章中,我们关注的是预测的准确性。我们的目标是学习一个具有良好泛化性能的模型。这种模型最大限度地提高了预测精度。我们确定了最适合手头问题(即水果类型分类)的机器学习算法;因此,我们比较了不同的算法,并选择了性能最好的算法。
创建这篇文章的源代码可以在这里找到。我将很高兴收到关于上述任何反馈或问题。
解决墨西哥城的自行车站问题
Photo by Wayne Bishop on Unsplash
几年前,我住在墨西哥城,是名为 eco bici T1 的城市自行车系统的常客。这个系统真的很容易使用,在过去的几年里它变得如此受欢迎真是令人惊讶。然而,由于墨西哥城是一个巨大的城市,对于用户来说,关于在不同的取货站分配自行车的许多问题是日常事务。我们分两节课总结一下这些问题:接送问题和落车问题。这些问题中的第一个是当用户想要骑自行车时缺少可用的自行车。第二类问题依赖于你可以归还自行车的免费停车位的稀缺。从现在起,我将集中讨论第一类问题。
一名 EcoBici 用户抱怨自行车在取货站的分配不合理。这只是这个庞大的交通系统每天都会遇到的问题的一个例子。
我将在接下来的文章中解释一个基于公开可用的数据的每日预测模型。首先,我试图通过使用 ARIMA 模型来模拟每天的出行次数,但我意识到如果我想让这个模型真正准确和有用,我需要模拟每个车站的每日出行次数,这将涉及到创建大约 400 个 ARIMA 模型。经过一些考虑,我决定使用著名的 LSTM 网络(如果你不熟悉他们,看看这里)。
首先,让我们看看按性别划分的旅行总次数。
从这张图表中很容易看出周末的季节性影响,而且只有 24%的日常出行是由女性完成的。这段时间从 2017/01/01 到 2017/03/31。
在研究期间关于 EcoBici 系统的事实
448 个站点
41%的站点每天最多有 5 场活动
27,593 次平均每日出行
5,072 辆平均每月有用的自行车
34.7 岁是用户的平均年龄
数据
该模型旨在根据每个车站最近 3 周的活动预测一整周的活动。为此,我需要“打包”28 天的行程(21 天作为输入,7 天作为输出),为此,我移动了 28 天的时间段,从 2017 年 1 月 1 日开始,到 2017 年 3 月 3 日结束,得到 62 组 28 天的行程。最后一个需要乘以站的数量,我们总共有 27,776 个实例,应该分成训练集和验证集。此外,正如我们之前看到的,周末有很强的季节性影响,所以我引入了一个分类变量来表示工作日(星期一、星期二、星期三……)
最后,数据集的结构为:
(#stations*#sets,#days,trips+one-hot encoding for weekdays)
=(448 * 62,28,1+7) = ( 27776,28,8)
这 27776 个实例需要划分为训练集和验证集。通过将 75%的实例设置为训练集,我们有:20,832 个训练实例和 6,944 个验证实例。
模型结构
我使用一个批量大小为 32 的 LSTM 层、一个 p=0.5 的下降层和一个 7 个单位的密集层来连接输出。而且我用的是 keras 的亚当优化器,学习率 0.0005。最后,作为损失函数,我考虑了均方误差。
业绩和预测
我运行了 300 个时期的训练过程,但是为了更好的可视化,这里是前 100 个时期的损失值的图。
损失值如下所示:
Loss function values over epochs
可视化预测的一种方法是计算网络的预测值,并将这些值与真实值进行比较。由于我们有大约 6900 个测试实例,我决定简单地随机选取一个实例,并绘制预测值与真实值的对比图。下面是一些相应的 MAPE(平均百分比误差)值的例子。
MAPE 8.3%
MAPE 9.1%
MAPE 18.7
摘要
我引入了一个 LSTM 模型来预测墨西哥城 EcoBici 系统的自行车使用量。该模型的输入是 21 天内的旅行次数,以预测随后 7 天的旅行次数,此外,该模型将一周中的某一天视为一次性编码向量。
该模型产生的平均 MAPE(测试集的平均值)为 21%,这意味着还有很多需要改进的地方。
后续步骤
为了获得更好的结果,可以添加更多的信息:假期、允许识别站点是否在线的布尔变量、每天有用自行车的数量等。
应测试输入内容的不同组合。也许考虑到前 21 天可能会有很多噪音,
由于我打算让这个模型成为一个可操作的工具,所以我认为聚合级别应该以小时为基础。
换句话说,更多的信息,更好的结果,这可能会导致更好的自行车分布在不同的车站。
这款车型的代码可在这里获得。
我的下一篇文章将展示该模型的第二个版本。请随意评论!