量化/算法/机器学习交易的完整书籍列表
你和你的财务自由之间唯一的障碍是 108 本书,所以你还在等什么?开始阅读吧!
那些在前方寻求智慧的人,请小心,因为这是一个很长的列表…(100 多本书)
“你不会一夜之间成为算法天才、杰出的学者、慈善家、亿万富翁.”
三个月后你就不是了。一年后你也不会成为其中一员。你可能永远也不会成为一个。但是就像生活中的大多数事情一样,如果你努力,你可能会越来越接近实现财务自由的梦想。
现在很明显,其中一些有重叠的内容,所以你应该自己研究一下哪些书更适合你的心态和当前的技能。
这个列表由网上的多个来源组成,并尽我所能过滤成以下几类:
- 一般阅读
- 轻读
- 编程
- 数学
- 经济学&金融学
- 技术&时序分析
- 其他
- 衍生品
如果你喜欢这篇文章并想看更多,请务必关注我的简介。
一般阅读——基础
这可能是一个很好的起点,这些书涵盖了广泛的主题,可能是对量化交易的各种元素的一个不错的介绍。
Listed below in order of appearance in this picture!
- 艾德·索普 战胜市场
- 期货与期权市场基本面 约翰·C·赫尔著
- 期权、期货和其他衍生品 约翰·C·赫尔
- 量化交易 陈伟民
- 投资要点Zvi Bodie,Alex Kane & Alan Marcus
- 金融建模 西蒙·贝宁加著
- 期权波动率&定价 谢耳朵
- 衍生品 由桑基夫达斯&兰加拉詹孙达拉姆
- 巴里·约翰逊 算法交易和 DMA
- 定量动量 作者韦斯利·r·格雷&杰克·r·沃格尔
- 量化值 卫斯理·r·格雷&托比亚斯·卡莱尔
轻阅读——故事
这些大多是“战争故事”和来自量化世界的故事。有些会很有教育意义,有些会比较悠闲的读书。
Listed below in order of appearance in this picture!
- 《国富论》 亚当·斯密
- 动荡的年代 格林斯潘著
- 爱德华·索普
- 【我的一生】伊曼纽尔·德曼著
- 杰西·利弗莫尔著股票操作者回忆录
- 【至关重要的对话工具】……作者李淑昕·帕特森
- 马克·乔希 Quant 求职面试问答
- 骗子的扑克 迈克尔·刘易斯著
- 费希尔·布莱克&金融的革命性理念 佩里 m
- 黑匣子里的Rishi k . Narang 著
- 斯科特·帕特森的
- 在街上听说 被蒂莫西破解
编程—机器学习和一般
这是一个机器学习文献的联合列表,也是专门针对 Python、R 和 C++的通用良好实践编程书籍。
Listed below in order of appearance in this picture!
机器学习
通用编程
- 现代计算金融 作者安托万·萨万
- 应用计算经济学和金融学 作者马里奥 J. &保罗 l
- C++设计模式和衍生产品定价 作者 Mark Joshi
- 掌握 Python 迈克尔·b·怀特著
- 诺曼·马特洛夫的《R 编程的艺术》
- renéCarmonaR财务数据统计分析
- 用于数据分析的 Python作者 Wes McKinney
数学——统计与概率、随机过程和一般
现在我们进入细节。这些书的有用性将高度依赖于你在该领域的教育和经验,所以要小心行事。
普通数学:
Listed below in order of appearance in this picture!
- 经济学的数学 卡尔·西蒙&劳伦斯·e·布鲁姆
- 金融工程数学入门 作者丹·s
- 数理金融的概念与实践 马克·乔希著
- 金融微积分 作者马丁·巴克斯特&安德鲁·雷尼
- 金融市场的数学方法
统计和概率:
Listed below in order of appearance in this picture!
- 概率 作者 A.N. Shiryaev
- 《统计学习导论》( Gareth J. & Trevor H。
- 统计推断 乔治·卡塞拉&罗杰·伯杰
- 统计学习的要素
- 工程与科学的概率与统计 杰伊 l
- 概率 作者利奥·布雷曼
- 概率和统计推断 罗伯特·v·霍格著,埃利奥特·坦尼斯
- 罗伯特·w·基纳的《理论统计——核心课程主题》
- 统计数据概括地说 由莎拉·博思劳
- 金融概率统计 斯维特洛扎·t·拉切夫
随机过程:
Listed below in order of appearance in this picture!
- 随机微分方程 作者 Bernt Oksendal
- 马尔可夫链蒙特卡罗手册 布鲁克斯史蒂夫著
- 扩散、马氏过程和鞅 作者 L. Roger,D. Williams
- 随机微积分及应用 塞缪尔 N. &罗伯特 j
- 金融随机微积分 I 作者史蒂文·什里夫
- 史蒂文·什里夫的《金融的随机微积分 II》
经济与金融——一般资产定价和管理
如果你没有金融或经济背景,明智的做法是阅读这些书籍,了解构成我们市场基础的各个部分。就像所有这些一样,有些可能不适合你,有些可能适合,所以在承诺之前做好自己的研究!
Listed below in order of appearance in this picture!
普通经济学:
- 中级微观经济学:现代方法 哈尔·瓦里安著
- 《计量经济学导论:现代方法》
- 管理会计导论 作者彼得 b、雷 G. &埃里克 n
资产定价:
- 资产定价与投资组合选择理论 由回克里
- 【金融决策与市场:资产定价教程】约翰·y
- 【资产定价(修订版) 作者约翰·h
风险和资产管理:
- 量化风险管理 作者亚历山大 j、鲁迪格 F. &保罗 e
- 资产管理:要素投资的系统方法 安
- 高级金融风险管理 作者唐纳德 r&德温特 k
- 《VaR 建模手册Greg n . Gregoriou 著
- 预期收益:收获市场回报指南 作者 I. Anti
- 风险平价和预算简介Ron calli Thierry
技术和时间序列分析——画出那些线!
尽管技术分析在交易界是一个很大的争议,但是理解这些概念还是有价值的。
Listed below in order of appearance in this picture!
技术分析:
- 技术分析的艺术与科学 亚当·格里姆斯著
- 循证技术分析 大卫·阿伦森
- 股票趋势技术分析 罗伯特·爱德华兹,约翰·马吉
时间序列分析:
其他—介于两者之间的一切
这份清单的独特之处在于,我不确定该把这些书放在哪里。当然,这并不是说这些书比这本书集中的任何其他书都差,事实上,它们中的一些可能对你的学习经历至关重要并产生巨大影响。
- 证券分析 本杰明·格拉哈姆、大卫·多德、沃伦·巴菲特
- 市场的(错误)行为
- 达莫达兰论估价 达莫达兰·阿斯瓦特著
- 行为恶劣的模特 伊曼纽尔·德曼
- 交易系统 作者埃米利奥·托马西尼
- 商业周期与均衡 费希尔·布莱克著
- 双动力投资 作者加里·安东纳奇
- HFT 的问题 作者海姆·博德克
- 《金融市场计量经济学》 作者约翰·y、罗文-C、阿奇·c
- 凯文·戴维 构建成功的算法交易系统
- 交易与交易所 拉里·哈里斯著
- 金融建模中的鞅方法 由 Marek M,Marek R
- 动态对冲:管理香草和奇异期权Nassim n
- 带有跳跃过程的金融建模 作者 Rama C. & Peter T
- 交易策略的评估与优化 罗伯特·p
- 公司财务基础 作者斯蒂芬·a、伦道夫·W&更
- 连续时间套利理论 托马斯·比约克著
- 范·k·塔普著通过交易获得财务自由
衍生品—股票、外汇、商品、利率、信用、外汇
这是不言自明的。关于特定种类衍生产品的高度特定的文献。当这些书的主题植入你的脑海时,你可能会认为自己是这个领域的伪专家。
股票衍生品:
外汇衍生品:
- 外汇期权和微笑风险 作者安东尼奥·卡斯塔尼亚
- 外汇期权定价 作者伊恩·克拉克 FX
- 外汇期权和结构性产品 作者 Uwe Wystup
商品衍生品:
利率衍生品
- 利率模型——理论与实践 达米亚诺 B. &法比奥 m
- 定价和交易利率衍生品 由 J. H. M .达比
- 利率建模一、 、 二、&三、 作者叶小开·安德森&弗拉基米尔·皮特伯格
- 利率期权模型 由 Rebonato
信用衍生品
- 多米尼克 建模单名和多名信用衍生品
- 信用风险——建模、估价&套期保值 作者 Tomasz R. & Marek R
XVA
- XVA:信贷、融资和资本估值调整 作者 Andrew G
- 交易对手信用风险、抵押品和融资 达米亚诺·布里戈著
最后的沉思——继续前进
My face when I finally finished this list.
所以我们做了,我们做了一个“完整的算法和量化交易的书单!现在不言而喻,像这样的一份名单只是“完整的”直到有人评论说:
“但是,等等,你忘记了这篇至关重要的文献,你怎么能这样做呢?!"
正是因为这个原因,我会继续更新,尽可能多地从你们在媒体和 推特 和 Reddit 上的人那里获得反馈。
结束语
阅读彼得·尼斯特拉普在媒介上的作品。数据科学、统计和人工智能…推特:@PeterNistrup,LinkedIn…
medium.com](https://medium.com/@peter.nistrup)****
完全强化学习词典
强化学习术语,从 A 到 Z
在媒体上阅读此文,而不是使用此 好友链接 的媒体成员!
每当我开始学习一门新的学科时,我发现最难应付的是它的新术语。每个领域都有许多术语和定义,对于一个局外人来说完全是晦涩难懂的,这会使一个新手迈出第一步相当困难。
当我第一次踏入强化学习的世界时,我被每隔一行就弹出的新术语所淹没,并且总是让我惊讶的是在这些复杂的单词背后隐藏着非常简单和符合逻辑的想法。因此,我决定用自己的话把它们都写下来,这样我就可以随时查阅,以防忘记。这本字典就是这样产生的。
这不是强化学习的入门文章,而是学习时的辅助工具。如果你也想在这个领域开始你的职业生涯,我可以给你以下建议:
- 如果你正在寻找一个包含代码示例的快速、10 分钟速成课程,请查看我的 Qrash 课程系列:RL 和 Q-Learning 简介和政策梯度和行动者-批评家。
- 如果你有更深的兴趣,并且想学习和编写几种不同的 RL 算法并获得更多的直觉,我可以推荐托马斯·西蒙尼的这个系列和亚瑟·朱利安尼的这个系列。
- 如果你已经准备好掌握 RL,我会把你引向强化学习的“圣经”——理查德·萨顿和安德鲁·巴尔托的《强化学习导论》。第二版(从 2018 年开始)作为 PDF 文件免费(合法)提供。
我将尽我最大的努力不断更新这本词典。如果我错过了什么重要的事情或者做错了什么,请随时告诉我。
字典
**动作值功能:**见 Q 值 。
**动作:**动作是 代理 的方法,允许其交互并改变其 环境 ,从而在 状态 之间转移。代理人执行的每一个动作都会从环境中获得一个 奖励 。选择哪个动作的决定由 策略 做出。
**演员-评论家:**当试图解决一个 强化学习 问题时,有两种主要方法可供选择:计算每个状态的 值函数 或 Q 值 并根据这些来选择动作,或者直接计算一个 策略 ,该策略定义了每个动作应该被采取的概率 Actor-Critic 算法结合了这两种方法,以创建一种更健壮的方法。一个很棒的插图漫画解释可以在这里找到。
**优势函数:**通常表示为 A(s,a) ,优势函数是在给定某个状态的情况下,衡量某个 动作 好坏的一个决策——或者更简单的说,从某个状态中选择某个动作的优势是什么。它在数学上定义为:
其中 r(s,a) 是从状态 s 开始的动作 a 的期望 奖励 ,并且 r(s) 是在选择动作之前整个状态 s 的期望奖励。它也可以被视为:
***代理:*学习和 演戏 一部分 强化学习 问题,即试图最大化 奖励 它是由 环境 给出的。简单地说,代理就是你试图设计的模型。
***盗匪:*正式命名为“k-Armed 盗匪”后昵称“独臂盗匪”给予吃角子老虎,这些被认为是最简单类型的 强化学习 任务。盗匪没有不同的 状态 ,只有一个——而考虑中的 奖励 只是眼前的一个。因此,土匪可以被认为是有单态 集 。每个 k 臂被认为是一个 动作 ,目标是学习在每个动作(或拉臂)后将最大化期望回报的 策略 。
尽管如此,这个任务仍然是一个单一状态的阶段性任务,一个上下文不能对其他上下文产生影响。
***贝尔曼方程:*形式上,贝尔曼方程定义了一个给定的 状态 (或状态- 动作 对)与其后继者之间的关系。虽然存在许多形式,但在 强化学习 任务中通常遇到的最常见形式是最优 Q 值 的贝尔曼方程,其由下式给出:
或者当不存在不确定性时(即概率为 1 或 0):
其中星号表示最佳值*。一些算法,如 Q-Learning ,就是以此为基础进行学习的。*
连续任务: 强化学习 不是由 集 组成,而是永远持续的任务。这个任务没有终端状态 s. 为了简单起见,通常假设它们由一个永无止境的情节组成。
深度 Q-Networks (DQN) :参见 Q-Learning
***深度强化学习:*使用带有深度神经网络的 强化学习 算法作为学习部分的近似器。这样做通常是为了处理可能的 状态 和 动作 的数量迅速增加,并且精确的解决方案不再可行的问题。
贴现因子(γ) :贴现因子,通常表示为γ,是乘以未来期望 报酬 的因子,在[0,1]的范围内变化。它控制着未来回报相对于眼前回报的重要性。折扣因子越低,未来的回报就越不重要,而 代理 会倾向于专注于只会产生即时回报的 行动 。
***环境:*除了之外的一切代理;代理可以直接或间接与之交互的一切。环境随着代理执行 动作 而变化;每一个这样的变化都被认为是一个 状态-转换。代理执行的每个动作都会产生一个由代理接收的 奖励 。
***插曲:*介于初态和终态之间的所有 态;比如:一盘棋。 代理的目标是让它在一集里收到的总 奖励 最大化。在没有终极状态的情况下,我们考虑一个无限事件。重要的是要记住,不同的情节是完全相互独立的。
****阶段性任务:强化学习 任务由不同的 剧集 (意思是,每一集都有一个终端状态 )。
**预期回报:有时被称为“整体报酬”,偶尔被表示为 G ,是在整个剧集中的预期。
****体验回放:作为 强化学习 任务,没有预先生成的训练集可供其学习, 代理 必须保留其遇到的所有 状态 - 转换的记录,以便以后可以从中学习。用于存储此内容的内存缓冲区通常被称为体验回放。这些内存缓冲区有几种类型和架构,但一些非常常见的是循环内存缓冲区(它确保代理保持对其新行为的训练,而不是可能不再相关的事情)和基于库采样的内存缓冲区(它保证记录的每个状态转换都有均匀的概率被插入到缓冲区中)。
开发&探索: 强化学习 任务没有可以学习的预先生成的训练集——它们创建自己的 经验 并“动态”学习。为了能够这样做, 代理 需要在许多不同的状态下尝试许多不同的动作,以便尝试和学习所有可用的可能性,并找到将最大化其总体回报的路径;这被称为探索,因为代理探索 环境 。另一方面,如果代理只做探索,它永远不会最大化整体回报——它还必须使用它学到的信息来这样做。这被称为利用,因为代理利用其知识来最大化其收到的回报。
这两者之间的权衡是强化学习问题的最大挑战之一,因为这两者必须平衡,以便让代理既能充分探索环境,又能利用它所学到的东西,并重复它找到的最有价值的路径。****
****贪策,ε——贪策:一贪 策 意为 代理 不断地执行 动作 即被认为能产生最高预期 报酬 。显然,这样的政策根本不会允许代理人 探索 。为了仍然允许一些探索,通常使用一种 ε- 贪婪策略来代替:选择[0,1]范围内的一个数(名为 ε ) ,并且在选择动作之前,选择[0,1]范围内的一个随机数。如果该数字大于 ε ,则选择贪婪动作,但如果该数字小于该数字,则选择随机动作。注意,如果 ε =0,则该策略成为贪婪策略,如果 ε =1,则始终探索。
****k-武装土匪:见 土匪 。
马尔可夫决策过程(MDP): 马尔可夫属性是指每个状态完全依赖于它之前的状态,从那个状态中取出的被选择的 动作 和在那个动作被执行之后立即收到的 奖励 。数学上的意思是: s’ = s’(s,a,r) ,其中 s’ 是未来状态, s 是其之前状态, a 和 r 是动作和奖励。不需要事先知道在 s 之前发生了什么——马尔可夫属性假设 s 包含所有相关信息。马尔可夫决策过程是基于这些假设的决策过程。
基于模型&无模型:**基于模型和无模型是一个 代理 在试图优化其 策略 时可以选择的两种不同的方法。最好用一个例子来解释:假设你正试图学习如何玩21 点。你可以通过两种方式做到这一点:一,你预先计算,在游戏开始之前,所有 状态 的获胜概率,以及所有可能的动作的所有状态转移概率,然后简单地按照你的计算去行动。第二种选择是在没有任何先验知识的情况下简单地玩,并使用“试错法”来获取信息。注意,使用第一种方法,你基本上是在建模你的 环境 ,而第二种方法不需要关于环境的任何信息。这正是基于模型和无模型的区别;第一种方法是基于模型的,而后者是无模型的。
蒙特卡洛(MC): 蒙特卡洛方法是一种算法,它使用重复的随机抽样来获得一个结果。它们经常在 强化学习 算法中使用,以获得期望值;例如—计算一个 状态 值函数 通过反复返回同一状态,对每次收到的实际累计 奖励 进行平均。
On-Policy&Off-Policy:**每一个 强化学习 算法都必须遵循一些 策略 以决定在每一个状态下执行哪些 动作 。尽管如此,算法的学习过程在学习时不必考虑该策略。关注产生过去状态行为决策的策略的算法被称为符合策略的算法,而忽略它的算法被称为不符合策略的。
一个众所周知的非策略算法是 Q-Learning ,因为它的更新规则使用将产生最高 Q 值 的动作,而实际使用的策略可能会限制该动作或选择另一个动作。Q-Learning 的基于策略的变体被称为 Sarsa ,其中更新规则使用由跟随的策略选择的动作。**
****独臂土匪:见 土匪 。
一步到位 TD: 见 时间差 。
策略(π): 策略,记为 π (有时也称为 π(a|s) ),是从某个 状态 s 到给定该状态下选择每个可能的 动作 的概率的映射。例如,一个 贪婪策略 为每个状态输出具有最高期望 Q 值 的动作。
Q-Learning: Q-Learning 是一种off-policy强化学习 算法,被认为是非常基础的算法之一。在其最简化的形式中,它使用一个表来存储所有可能的 状态 - 动作 对的所有 Q 值 。它使用 贝尔曼方程 更新该表,而动作选择通常使用ε-贪婪策略 进行。 以其最简单的形式(无不确定性-状态跃迁和预期*),Q-Learning 的更新规则是:*****
它的一个更复杂的版本,尽管更受欢迎,是深度 Q-网络变体(有时甚至简称为深度 Q-学习或简称为Q-学习*)。这种变体用神经网络代替状态-动作表,以便处理大规模任务,其中可能的状态-动作对的数量可能是巨大的。你可以在这篇博文中找到这个算法的教程。***
****Q 值(Q 函数):通常表示为 Q(s,a) (有时带π下标,有时表示为 Q(s,a;θ) 中 深 RL ),Q 值是整体预期 奖励 假设 代理 处于 状态并执行 动作 它的名字是“质量”一词的缩写,数学上定义为:
其中 N 是从状态 s 到终止状态的状态数,γ是 折扣因子 ,r⁰是在状态 s 执行动作 a 后收到的即时奖励。
强化算法:强化算法是 强化学习 算法的一个家族,它根据策略相对于策略参数的梯度来更新自己的 策略 参数论文。该名称通常只使用大写字母,因为它最初是原始算法组设计的缩写:"REwardINon negativeF*actorxOffsetRE enforcementxCcharacter isticE***
强化学习(RL): 与监督学习和非监督学习一样,强化学习是机器学习和人工智能的主要领域之一。它关注的是一个任意存在的学习过程,正式名称为 智能体 ,在其周围的世界中,称为 环境 。智能体寻求从环境中获得的 奖励 最大化,并执行不同的 动作 以学习环境如何反应并获得更多奖励。RL 任务的最大挑战之一是将行为与延迟奖励相关联——延迟奖励是代理在产生奖励的行为做出很久之后才收到的奖励。因此,它被大量用于解决不同类型的游戏,从井字游戏,国际象棋,雅达利 2600 和所有的方式去和星际争霸。
****奖励:由 代理 从 环境 中接收的一个数值,作为对代理 动作 的直接响应。代理人的目标是在一集中最大化其收到的总奖励,因此奖励是代理人以期望的行为行动所需的动机。所有的行动都会产生奖励,大致可以分为三种类型:积极奖励强调想要的行动,消极奖励强调行动者应该偏离的行动,零,这意味着行动者没有做任何特殊或独特的事情。
**Sarsa:Sarsa 算法基本上是一种 Q-Learning 算法,只是稍加修改,使其成为一种 on-policy 算法。Q-学习更新规则是基于贝尔曼方程求最优的 Q 值,因此在-状态-跃迁和期望不确定的情况下,Q-学习更新规则是:
为了将其转换为基于策略的算法,最后一项被修改:
当此处,两个 动作 a 和a’都由同一个 策略 选择。算法的名字来源于它的更新规则,更新规则基于( s,a,r,s’,a’),都来自同一个策略。
****状态:在环境中 智能体 遭遇的每一个场景都正式称为状态。代理通过执行 动作 在不同状态之间转换。还值得一提的是终端状态,它标志着一集的结束。达到终态后就没有可能的状态了,新的一集开始了。很多时候,一个终止状态被表示为一个特殊的状态,其中所有动作都转换到同一个终止状态,并且 奖励 0。
****状态-值函数:见 值函数 。
时间差分(TD): 时间差分是一种结合了动态规划和 蒙特卡罗 原理的学习方法;它像蒙特卡罗一样“在飞行中”学习,但像动态编程一样更新它的估计。最简单的时间差分算法之一被称为一步 TD 或 TD(0) 。根据以下更新规则更新 值函数 😗*
其中 V 为价值函数, s 为 状态 , r 为 奖励 , γ 为 贴现因子 , α 为学习率,方括号中的项被称为时间差误差。
****端子状态:见 状态 。
上自信界(UCB)😗*【UCB】是一种 探索 方法,它试图确保每个 动作 都被很好地探索。考虑一个完全随机的探索 策略——意思是,每个可能的动作都有相同的机会被选中。有些行动可能会比其他行动探索得更多。一个动作被选中得越少,这个 代理 就越没有信心能左右其预期的 奖励 ,而其 剥削 阶段就可能受到伤害。UCB 的探索考虑了每个动作被选择的次数,并给予那些探索较少的动作额外的权重。从数学上来说,所选择的动作是通过以下方式挑选的:
其中 R(a) 是动作 a 的预期总体回报, t 是采取的步骤数(总共选择了多少个动作), N(a) 是选择动作 a 的次数, c 是可配置的超参数。这种方法有时也被称为“通过乐观进行探索”,因为它赋予较少探索的行为更高的价值,鼓励模型选择它们。
****价值函数:通常表示为 V(s) (有时带有π下标),价值函数是对整体预期 奖励 的度量假设 代理 处于 状态 s 然后继续播放直到 第一集 结束它在数学上定义为:
虽然它看起来确实类似于 Q 值 的定义,但有一个隐含的——但很重要的——区别:对于n = 0,v(s)的奖励 r⁰是刚处于状态 s 、在进行任何动作之前的预期奖励,而在 q 值中,r⁰是在进行某个动作之后的预期奖励。这种差异也产生了 优势函数 。
新手的完整 TensorFlow 教程
从安装到构建用于手势识别的神经网络
Photo by Jan Kahánek on Unsplash
TensorFlow 是一个用于机器学习和深度学习的健壮框架。它使得构建模型和为生产部署模型变得更加容易。
它是开发人员中最受欢迎的框架。这并不奇怪,因为该框架也可用于基于网络的机器学习( TensorFlow.js )和设备上的推理( TensorFlow Lite )。此外,随着最近发布的 TensorFlow 2.0 ,该框架将很快变得更容易使用,因为语法将被简化,减少了 API,并且它将支持 Julia 编程语言。
现在是入门 TensorFlow 的大好时机,掌握它是数据科学家的重要资产。
本教程将帮助您开始使用 TensorFlow。注意 TensorFlow 2.0 并不稳定,所以我们将重点放在之前的稳定版本上。
我们将首先以最简单的方式安装框架,然后我们将编写一些函数来学习语法和使用一些 API。最后,我们将编写一个能够识别手势的模型。
我们开始吧!
关于机器学习、深度学习和人工智能的实践视频教程,请查看我的 YouTube 频道。
Yep, our model will recognize these signs!
装置
我们安装 TensorFlow 吧!我们将在 Windows 机器上完成安装过程。
如果您在其他操作系统上遇到困难,请随时发表评论。
步骤 1 —下载 Anaconda
第一步是下载并安装 Anaconda 。Anaconda 是一个使数据科学变得更容易的平台;它提供了对最流行的工具和库的访问,并且它还充当了一个包管理器。
下载适用于您的操作系统的 Anaconda 发行版,并遵循安装步骤。接受默认设置是安全的。安装可能需要几分钟,因为 Anaconda 捆绑了很多东西。
安装完成后,在 Windows 搜索栏中搜索 anaconda 提示符。打开应用程序,您应该会看到类似这样的内容:
Anaconda prompt window
太好了!
步骤 2-安装 TensorFlow
现在,要安装 Tensorflow,只需输入:
pip install tensorflow
等待安装完成,瞧!您现在可以使用 TensorFlow 编写代码了!
正在热身
其余的教程将遵循这个笔记本。您还可以在整个教程中获取任何需要的实用程序。觉得卡住了就参考一下吧!
计算 sigmoid 函数
让我们用张量流来计算 sigmoid 函数。这是完整的代码块。然后,我们将遍历代码正在做什么。
一个 TensorFlow 程序通常分为两部分:一个构建阶段和一个计算阶段。
在构建阶段,我们使用一个占位符来创建一个变量。我们需要定义变量的类型,并给它一个名字。然后,我们简单使用内置的 sigmoid 函数。请注意,在构建阶段,没有正在计算的值。事实上,代码根本不运行。这就是为什么我们需要一个计算阶段。
在计算阶段,我们创建一个会话,并将计算结果赋给另一个变量。注意该函数以 z 作为输入,但是在函数内部使用了 x ,因此需要 feed_dict 。
并且整个块单元被称为张量流图。所有 TensorFlow 程序都是这样构建的:
- 在构建阶段定义变量和计算步骤
- 在计算阶段运行计算
理解这个结构是掌握 TensorFlow 的关键。一旦你熟悉了这一点,你就能编写更高级的程序了。
计算成本
现在,让我们计算一个分类问题的成本函数。我们习惯于计算交叉熵函数并从头开始编写它。现在,让我们看看 TensorFlow 如何让我们轻松实现相同的结果:
就是这样!只有一行定义了损失函数!
再次注意我们如何使用占位符,并识别上面代码单元的构造和计算阶段。
一键编码
一键编码是一种将多类标签转换为 0 和 1 的向量的技术。
让我们看看如何在 TensorFlow 中实现:
再一次,TensorFlow 使得操纵我们的数据变得非常容易。
既然你对一般的结构已经比较熟悉了,让我们继续建立一个实际的神经网络来对手势进行分类!
手势识别
在这个小项目中,我们将建立一个手势识别系统。具体来说,我们的神经网络将识别手是否正在表达从 0 到 5 的数字。
让我们加载数据集,看看一个示例图像:
您应该会看到:
A sample of the dataset
在构建我们的模型之前,我们将首先展平图像,归一化它们的特征,并对标签进行一次性编码:
现在开始建立模型!
创建占位符
首先,我们编写一个函数来为特征矩阵和标签矩阵创建占位符:
然后,我们编写一个函数来初始化权重矩阵和偏差矩阵:
厉害!现在,我们必须定义正向传播:
注意,在上面的代码单元中,注释显示了 numpy 中的等价语法。
最后,我们定义一个函数来计算成本:
现在,我们准备将所有内容组合成一个模型!
等等…
反向传播呢?与之前我们从头开始编写反向传播的帖子不同,深度学习框架只需几行代码就能自动完成!
将所有内容放入一个模型中
现在,我们将所有函数合并到一个模型中,我们将使用小批量梯度下降来训练神经网络:
现在,我们用下面的代码行运行模型:
parameters = model(X_train, Y_train, X_test, Y_test)
您应该得到:
太好了!测试精度不是很好,因为我们只使用了整个数据集的一小部分,而且我们没有训练很长时间。本教程的主要目标是习惯 TensorFlow 并对其 API 有一个大致的了解。
干得好!您现在已经准备好将 TensorFlow 用于更高级的神经网络和应用程序。在接下来的帖子中,我们将探索不同的神经网络结构,并使用 TensorFlow 或 Keras (另一种深度学习框架)来构建它们。
敬请关注,继续学习!
困惑矩阵:揭开面纱
如何衡量分类性能…用口袋妖怪!
Image from: Source
所有好的经验如果伪装成冒险会更好的学习…我们今天的任务将是发现传说中的口袋妖怪,以便抓住他们。为此,我们将使用我们所掌握的最好的工具:机器学习!
这篇文章的目的是解释混淆矩阵是什么,它在评估分类算法性能中的重要性,以及如何用它来比较不同的模型。一切从一开始就会解释清楚,项目中使用的代码会在文章末尾提供,供您随意摆弄和复制。
数据集
正如你可能已经猜到的,我们将使用著名的 完整口袋妖怪数据集 ,你可以在这里下载。该数据集包含了 802 只口袋妖怪的 41 个特征,如它们的名字、身高、体重、攻击和防御等…我们将关注的是:一个二元特征,它告诉我们口袋妖怪是否是传奇。
Can we catch them all?
在包含所有代码的笔记本中,您会发现一个探索性数据分析 (EDA)阶段,在这个阶段,我会对数据进行一点探索,构建虚拟变量,并进行一些清理。这个阶段不在这里讨论,所以我们可以直接跳到更困扰我们的问题:分类结果。
分类结果的问题
当我们有一个回归算法时(例如,我们想估计房子的价格),评估这个算法做得有多好并不太难。我们可以简单地计算预测的每个数值和房屋的实际值之间的差异,并使用一个容易理解的指标来推断整体性能,如平均百分比误差 (MAPE)或均方误差 (MSE)。
*在*的分类中,却不是那么微不足道的。例如,让我们考虑一个二元分类问题。我们的数据中有两个不同的类别(就像我们案例中的传奇和非传奇口袋妖怪),通常用 0(通常用于虚假案例)和 1(通常用于真实案例)表示。评估性能的最简单方法是使用模型的精确度,这是考虑到正确分类的样本数和样本总数而简单计算的。
accuracy formula
这个指标的问题是,尽管它给了我们一个模型表现如何的总体估计,它不包含我们的模型在不同类上表现如何的信息。让我们看一个例子,为什么这是相关的。
考虑一个虚构的口袋妖怪世界,我们总共有 1000 个口袋妖怪,在这 1000 个中,只有 10 个是传奇。如果我们用一个糟糕的机器学习算法构建了一个令人敬畏的 Pokedex 来告诉我们一个口袋妖怪是否是传奇,并且它每次都告诉我们这个口袋妖怪不是传奇,那么会发生两件事:
- 1 。在所有的口袋妖怪中,因为只有 10/1000 = 1%是传奇,所以我们的模型仍然具有以下准确性:
accuracy of our model
99%的准确率。哇哦。理论上这看起来很棒,但是我们的算法真的做得很好吗?
- 2 。作为口袋妖怪大师,我们会变得非常沮丧,因为我们已经购买了一些非常昂贵的主球,以便能够抓住传说中的口袋妖怪并提升我们的游戏,但每次我们面对新的口袋妖怪时,尽管它们看起来多么强大,我们的 Pokedex 与机器学习算法一起告诉我们它不是传说中的。
What can we do then? Source
通过仅使用准确性来评估我们的机器学习模型的性能,我们错过了许多相关信息。此外,当比较不同的模型时,如果我们只使用这个指标,我们只能看到一个非常宽泛的画面,而没有进一步研究它们可能的差异。
不过不要担心,还有其他更具体的指标和工具可以帮助我们发现这些差异,并让我们更深入地了解我们的模型是如何执行的。这些工具中的第一个是混淆矩阵。让我们来看看吧。
混乱矩阵
混淆矩阵为评估分类算法的结果提供了一种比准确度更精细的方法。它通过将结果分成在矩阵中连接在一起的两个类别来做到这一点:数据点的预测标签和实际标签。
在继续之前,让我们看一个混乱矩阵的图像,这样你就能知道我在说什么。
Standard confusion matrix for binary classification
正如您从这个图中看到的,行代表我们的测试数据的预测标签,列代表实际的或真实的标签。有时您会发现这个矩阵被转置了,行代表实际值,列代表预测值,所以在解释它时要小心。
让我们描述一下这个矩阵中每个元素的含义,这样你就能明白它为什么如此有用。当我们看到一个真实的例子时,这些字母( TP 、 FP 、 FN 和 TN )将被数字所取代,从中我们可以得出各种见解:
- **TP —真阳性:**该块是真预测与真标签的交集;其代表具有由我们的算法或模型正确预测的真实标签的数据点。在我们的口袋妖怪例子中,这将代表被正确识别的传奇口袋妖怪的数量。
- **FP —假阳性:**这个块是真预测和假真标签的交集。它表示具有虚假真实标签但被模型预测为真实的数据点。在我们的情况下,这将是口袋妖怪,不是传说中的,但已经被我们的算法预测到了。
- **FN —假阴性:**这个块是假预测与真标签的交集。它表示具有被算法错误地预测为假的真实真实标签的数据点。在我们的情况下,这将是传说中的口袋妖怪被预测为常见的。
- **TN —真阴性:**这个块是假预测和假真实标签之间的交集。它表示具有被模型正确分类为假的假真实标签的数据点。在我们的例子中,这个单元对应于已经被正确分类的非传奇口袋妖怪。
真阳性和真阴性表示我们的模型已经正确分类的数据点,而假阳性和假阴性表示我们的模型已经错误分类的数据点。
Correct and Incorrectly classified blocks of the Confusion Matrix
假阴性和假阳性很容易混淆。“哪个代表什么?”你可能会发现自己在问。为了避免这种混淆(没有双关的意思),把假阴性想象成假阴性预测(所以是真阳性),把假阳性想象成假阳性预测(所以是真阴性)。
在我们的示例中,在进行了训练-测试分离、对训练数据进行了非常简单的逻辑回归训练,并使用对测试数据进行的预测构建了混淆矩阵之后,我们得到了以下结果:
Confusion matrix for our example using Logistic Regression
这个混淆矩阵告诉我们的是,在我们的数据集中的 25 个传奇口袋妖怪中,23 个被正确地分类为传奇,2 个被错误地分类为非传奇(左下方的假阴性块)。此外,我们的模型在分类非传奇口袋妖怪方面做得很好,因为它得到了所有正确的预测(矩阵的右栏)。
这里的准确度也是 99%,但是,我们现在可以比仅仅评估这个数字更深入。让我们看看混淆矩阵如何帮助我们做到这一点:想象我们是一个痴迷的口袋妖怪训练师,想要捕捉传说中的每一只口袋妖怪。随着这个逻辑回归模型在我们的 Pokedex 上运行,将会有两个传说中的口袋妖怪,我们永远无法识别,因此我们永远无法实现我们的梦想。
有了这些信息,我们现在可以决定尝试不同的算法或模型,这将完美地分类所有传说中的口袋妖怪。让我们训练一个随机森林,并使用混淆矩阵评估其性能:
Confusion matrix for our example using Random Forest
酷!有了随机森林,我们现在可以正确地分类所有的传奇口袋妖怪,然而,有一个非传奇口袋妖怪被分类成这样(右上角的假阳性)。我们可以不断尝试各种模型,直到找到完美的模型,但在现实生活中,这种模型很少存在。现在发生的是,我们必须选择我们更喜欢哪种错误。
我们更喜欢错过 2 个传奇口袋妖怪还是捕捉一个不是传奇的想法呢?这很大程度上取决于我们的情况和这个机器学习项目的目标。我们可以进一步分析错误,并获得关于正在发生的事情的更多信息。
Errors of both models
从上图中我们可以看到,我们的逻辑回归将塔普菲尼和卡璞·鸣鸣归类为非传奇,而他们实际上是传奇。另一方面,兰登森林将巨金怪归类为传奇人物,而他不是。
现在该由我们来决定了。知道了这些错误,我们是否介意错过这两个,以及可能错过未来加入口袋妖怪社区的其他传奇口袋妖怪,或者在像巨金怪这样的口袋妖怪上使用我们珍贵的主球,以及可能在其他不那么有价值的新口袋妖怪上出现?
无论我们做出什么决定,混淆矩阵都允许我们在知道将会发生什么的情况下做出这个决定,这正是我们想要的:使用这些模型做出更明智和增值的决策。
从混淆矩阵中可以提取出许多度量标准,告诉我们这样的事情:我们的模型在 0 或 1 上做得如何,在预测值中有多少是正确的,以及其他一些。让我们来看看其中的一些。
从混淆矩阵中导出的度量
可以从混淆矩阵中得出的两个主要指标(除了准确性)是精度和召回。让我们恢复初始的、通用的混淆矩阵,看看这些来自哪里。
Standard confusion matrix for binary classification
- 模型的精度使用预测标签的真实行计算。它告诉我们,当我们的模型做出正面预测时,它有多好。在我们的例子中,它会告诉我们,在我们算法的所有积极预测中,我们有多少真正的传奇口袋妖怪。
Formula for the precision of the model
当我们想要避免我们算法的真实预测中的错误时,这个度量是重要的。在我们故事的例子中,如果我们知道我们只有 25 个传说中的口袋妖怪,并且我们正好买了 25 个主球来捕捉它们,那么 100%的精确度将意味着我们的 Pokedex 在看到它时将正确地识别每个传说中的口袋妖怪,不会将非传说中的与传说中的混淆。我们训练的逻辑回归模型就是这种情况。
然而,该算法只预测了总共 23 个传奇口袋妖怪,而实际上有 25 个。为了评估这个错误,我们有另一个度量:召回。
- 我们型号的召回是使用实际或真实标签的 True 列计算的。它告诉我们,在我们的真实数据点中,算法或模型正确地捕捉了多少。在我们的例子中,它将反映有多少传奇口袋妖怪被正确地识别为传奇。
Formula for the recall of the model
当我们想要尽可能地识别数据的最真实的实例时,这个指标是很重要的。在我们的例子中,如果我们不想错过一个传说中的口袋妖怪,我们会考虑这个指标。我们的随机森林算法具有 100%的召回率,因为它正确地发现了所有传说中的口袋妖怪。回忆有时也被称为敏感度。
总而言之,精度与我们的模型在做出正面预测时的表现有关,而召回指的是我们的模型在识别正面真实标签时的表现。
还有一个组合指标,即考虑了精确度和召回率的 F1-Score ,当我们想要在两者之间进行折衷,并且想要一个不同于精确度的指标时,或者当我们想要快速比较两个分类器时。F1 的公式如下:
Formula for the F1 Score
该公式表示精度和召回率的调和平均值。与给所有值相同权重的普通算术平均值相反,调和平均值给低值更高的权重。这意味着只有当精确度和召回率都很高时,我们才会有很高的 F1 分数。
结论
我们已经看到了混淆矩阵是什么,以及如何使用它来评估分类模型的性能。我们还探讨了从它衍生的不同指标。在下一篇文章中,我们将看到使用 ROC 曲线和 AUC 来做这件事的更多方法。
这个简单项目的代码可以在我的 Github 上找到。
来看看 关注我上媒 ,敬请关注!
One of our precious Masterballs
就这些,我希望你喜欢这个帖子。欢迎在 @jaimezorno 的 Twitter 上关注我。还有,你可以看看我其他关于数据科学和机器学习的帖子这里 。好好读!
人工智能地牢 2 的创造者如何使用 GPT 2 来创建永无止境的冒险游戏
想象无限的电子游戏
The TI-99/4A computer I used to play text-based adventure games. (Credit: Rama & Musée Bolo on Wikipedia)
小时候,我在家里的 TI-82 上用盒式磁带数据驱动器玩基于文本的冒险游戏。我对斯科特·亚当斯的经典海盗冒险游戏记忆犹新,这是一款早期基于文本的视频游戏。
游戏很简单。你首先站在伦敦的一套公寓里,必须通过键入简单的命令,如“向西”、“爬楼梯”或“帮助”,导航到一个神秘的岛屿当你输入“拿朗姆酒”时,游戏回应道:“有一种奇怪的声音……我想是我。嘻嘻。”)
回到那些美好的旧时光,我不断地陷入早期基于文本的游戏的叙事约束。“我不知道那是什么”和“我不能朝那个方向走”这两句话至今仍萦绕着我,追寻着由人类作家创造和编码的想象世界的艰难界限。
The old-school Pirate Adventure text-based adventure emulated on the Frotz app.
见见 AI 地牢 2 的创作者
游戏创作者 Nick Walton 上周发布了 AI Dungeon 2,使用 OpenAI 的超能力 GPT-2 语言模型的完整 1.5B 参数版本来构建一个无限的基于文本的幻想游戏。
在 AI 地下城 2 中,我扮演了一个探索危险法术库的巫师,然后我的女儿扮演了一个保护她的城堡免受兽人入侵的贵妇。
游戏从来没有告诉我们“我不知道那是什么”和“我不能朝那个方向走。”感谢强大的 GPT 2 故事引擎,AI 地下城 2 总是试图生成一个新的场景或新的对话,不管我们的请求有多奇怪。
就我个人而言,我非常喜欢魔法书和魔法图书馆。所以我花了很长时间躲在一个废弃的城堡里看书。
A few paragraphs from one of my AI Dungeon 2 adventures.
目前,你可以在这个 Google Colab 链接上玩游戏。
正如尼克在网站上解释的那样,游戏正在转型,因为他要应对“疯狂的下载费用”,这迫使他寻求一种新的发行模式:
“我们使用 bittorrent 作为临时解决方案来托管游戏文件并保持游戏的活力。速度不快,但这是我们目前最好的了。如果你想帮忙,你能做的最好的事情就是 下载这个带有游戏文件 和的种子文件尽你所能无限期地下载。这将有助于新玩家更快地下载这款游戏,并发现 AIDungeon2 的广阔世界!”
我和尼克讨论了《人工智能地下城 2》这个无尽的人工智能生成的游戏世界背后的硬件、数据集和编程。
自从我们的采访之后,Nick 更新了他的 Patreon 页面,更新了关于即将推出的付费订阅模式的应用版本的消息。
“该应用的 alpha 版本正在运行,我们拥有在云上运行该模型的基础设施。在开始测试之前,我们还需要一两天的测试,但我们希望在本周末开始。”
这是我们关于游戏采访的完整文本…
创建您的训练数据集需要多长时间?
数据集是大约 30 MB 的文本冒险故事,我是从 chooseyourstory.com 的网上搜集来的。我大概花了 20 个小时左右来构建 web scraper,运行它并管理数据集。我想确保我使用的所有数据都是正确的格式。
我的建议是,尤其是在文本中,少量的高质量数据比大量的低质量数据更有价值。
在 GPT-2 产生的故事中,你采取了哪些编码步骤来维护上下文?
我使用了一个包含 8 个高性能图形处理器的 DGX 1 来训练。我最终使用的模型花了大约 12-16 个小时来训练。
我已经尝试了很长时间,尝试了很多东西。
对正确的文本冒险数据进行微调可能是我为保持叙述清晰所做的最重要的事情。
增加内存也有所帮助。在过去,记忆更接近于 2(最后 2 个动作-结果对),上下文句子更重要,而现在记忆设置为 10,我不确定它是否真的重要。
我也做了相当多的工作来修改玩家的输入,使其符合正确的格式,并删除模型输出,使其不包含动作线(用“>”符号表示)
您还修改了您的模型,以减少 GPT-2 输出中的重复。你能解释一下吗?
在 Salesforce CTRL 模型中,他们给生成一个已经生成的单词的概率加上一个惩罚,将它的对数概率除以大约 1.2。
这有助于避免模型陷入说同一个单词或一组单词的困境。正因为如此,CTRL 模型能够使用比 GPT-2 低得多的温度(后者需要高温来防止重复)。通过给 GPT-2 增加这个惩罚,我能够将温度降低到 0.4,这有助于连贯性,同时仍然避免重复(大部分)
关于你的游戏和你的微调模型所产生的故事,你对版权和知识产权有什么看法?
就像人类从其他作者那里学到了很多如何写作的知识一样,我很乐意让模特在其他人的作品上接受训练,以学习如何写得更好。就一个模型输出的东西而言,我不反对人们用它来写奇幻小说或在网上发布他们的冒险经历。
人工智能地牢 2 不是一个讲故事的人。人们发布的故事很有趣,不仅仅是因为人工智能,还因为人类如何与它互动,以创造有趣和有趣的故事。
您希望在未来的迭代中向数据集添加什么类型或其他格式?
我当然想加入更多的类型,但我下一步要做的是得到一个更好的主机解决方案,并完成我的反向人工智能地下城模式,其中人工智能是玩家,人类是地下城主。
回归不连续设计:因果推理皇冠上的宝石
实验和因果推理
带 R 代码的 RDD 完全指南
Photo by Harley-Davidson on Unsplash
为什么是哈利?
B/C 数据科学摇滚!
简介
在一系列的帖子(为什么实验、双向因果方向、陷阱、关联&因果、自然实验)中,我们已经涵盖了包括什么、为什么以及如何进行实验的主题。不管它们看起来多么令人向往,出于各种原因,不可能对所有类型的商业问题进行实验。
这样做可能是不道德的。假设我们对本科教育对学生未来收入的影响感兴趣。随机分配一些高中生接受教育,而不分配给其他人,这从根本上来说是错误的。
或者,它可能是昂贵的,耗时的,或技术上不可行的。即使是像网飞和 Airbnb 这样的顶级公司,也无法始终保证随机化在个人用户层面的内部有效性。
在这些情况下,我们不得不依靠其他方法,包括观察和准实验设计,来推导因果关系。回归不连续设计 RDD 作为一种成熟的准实验技术,经历了很长一段时间的休眠,直到最近才强势回归。
在这篇文章中,我们详细阐述了 RDD 的基本概念,如研究意识形态,统计假设,潜在结果框架(POF),优点,局限性和 R 说明。
什么是 RDD?
首先,这是一种带有前后测试设计的准实验方法,意味着研究人员在干预(治疗)之前和之后实施感兴趣的措施。
通过设置一个“截止”点,我们选择略高于阈值线的受试者为治疗组,略低于阈值线的受试者为对照组。由于这两个组在地理上彼此接近,我们可以控制潜在的混杂变量,并将其视为一个 好像 随机治疗分配。如果潜在结果有任何不同,我们可以将其归因于治疗的存在。
这种“好像”随机成分使我们相信 RDD 可以像随机对照试验(RCT)一样准确地得出因果推断。
以统计形式:
哪里
Di:受试者是否接受了治疗
Xi:强迫(又名得分或跑动)变量
c:截止点
简单地说,如果受试者 I 的 Xi 值高于截止值,则受试者 I 接受治疗。
假设,我们感兴趣的是获得基于成绩的奖学金对学生未来成功的因果影响。主要的评选标准是 GPA:GPA 在 3.5 以上(≥3.5)的都拿到奖学金,线下的都没拿到,不管多接近。换句话说,绩点 3.51 的学生和绩点 3.49 的学生之间没有显著差异。
采用 RDD 框架,我们可以通过以下步骤估计因果关系。
- 选择 勉强 有资格获得奖学金的学生(绩点在 3.51 到 3.55 之间)作为治疗组。
- 选择略低于分数线的学生作为对照组(其平均分在 3.45 至 3.49 之间)。
- 比较这两组之间的差异。
让我们看一下图解。
Plot 1
哪里
D_i = 1:获得奖学金的人(治疗组)
D_i = 0:没有的人(对照组)
c: GPA = 3.5
Plot 2
从图 2 中,我们可以看到有奖学金的学生用蓝色表示,没有奖学金的用红色表示。
Plot 3: POF and LATE
在拟合回归线之后,我们观察到两条回归线之间存在不连续。因此,我们得出结论,奖学金确实有所不同。
结论是:给学生更多的经济支持!
潜在成果框架
在其 POF 中,RDD 有以下表示:
该估计值是两个回归函数在分界点 c 处的差值。换句话说,RDD 是在分界点而不是在个体和群体水平上估计局部平均治疗效果(晚期)。一些人认为,对 RDD 来说,能够晚测既是一件幸事,也是一个缺点。在试图概括这些发现时要小心。
统计假设
有两个假设。
- 1。独立作业。
潜在受益人或任何其他利益相关者不会影响分配流程。比方说,平均绩点为 3.4 的学生不能告诉管理员将分数线设置为 3.4,这样他/她就有资格。
- 2。条件回归函数的连续性
E[Y(0)|X=x]和 E[Y(1)|X=x],在 X 中是连续的。而且,条件分布函数在协变量中是光滑的。这一点很重要,因为我们想排除其他协变量在分界点引起不连续性(回归线中的跳跃)的可能性。
r 插图
我们将使用模拟数据。
这是上例的回归模型:
#setwd(“/Users/andy/desktop”)#generate a sample data#cutoff point = 3.5GPA <- runif(1000, 0, 4)future_success <- 10 + 2 * GPA + 10 * (GPA>=3.5) + rnorm(1000)#install and load the package ‘rddtools’
#install.packages(“rddtools”)library(rddtools)data <- rdd_data(future_success, GPA, cutpoint = 3.5)# plot the dataset
plot(data,col = “red”,
cex = 0.1,
xlab = “GPA”,
ylab = “future_success”)
# estimate the sharp RDD model
rdd_mod <- rdd_reg_lm(rdd_object = data, slope = “same”)summary(rdd_mod)Call:
lm(formula = y ~ ., data = dat_step1, weights = weights)Residuals:
Min 1Q Median 3Q Max
-3.3156 -0.6794 -0.0116 0.6732 2.9288Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 16.96270 0.06878 246.63 <2e-16 ***
D 10.13726 0.12352 82.07 <2e-16 ***
x 2.00150 0.03330 60.10 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.025 on 997 degrees of freedom
Multiple R-squared: 0.9577, Adjusted R-squared: 0.9577
F-statistic: 1.13e+04 on 2 and 997 DF, p-value: < 2.2e-16
估计效果为 10.13,在 0.001 水平显著。
# plot the RDD model along with binned observations
plot(rdd_mod,cex = 0.1,
col = “red”,
xlab = “GPA”,
ylab = “future_success”)
这是效果的直观表示,我们可以在截止点看到“跳跃”。
什么时候为什么去 RDD?
- 当随机化不可行时,这是一个很好的选择。
- 非常适合基于规则的问题(例如选举、项目评估等)。).
- 易于在实践中应用,假设不太严格。
- 如果应用得当,具有很强的内部效度和因果效应。
Medium 最近进化出了它的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。
[## 阅读叶雷华博士研究员(以及其他成千上万的媒体作家)的每一个故事
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
leihua-ye.medium.com](https://leihua-ye.medium.com/membership)
喜欢读这本书吗?
还有,看看我其他关于人工智能和机器学习的帖子。
word 嵌入层的关键-第 1 部分
在最后一个故事中,我们讨论了 RASA NLU,这是一个开源的对话式人工智能工具。我们使用 Tensorflow 管道进行意图分类。流水线有不同的组件,如记号赋予器、特征赋予器、实体提取器和意图分类器。我们的意图分类器本身有子组件,如 TensorFlow 嵌入。现在我们将讨论嵌入层及其在管道中的重要性。
目标
人类可以非常直观地处理文本格式,但是如果我们在一天内生成数百万甚至数十亿个文档,我们不可能让人类执行所有的任务。它既不可扩展也不有效。因此,我们有计算机来执行所有使用机器学习技术的任务。在本文中,我们将讨论各种可用的嵌入层。我们这篇文章的目标是实现这些单词嵌入层。我们将深入了解这些层。
什么是文字嵌入?
嵌入不过是把东西从一个维度放到另一个维度。它从高维空间中选取点,放入低维空间。单词嵌入是将文本转换成数字,并且这些数字可能具有相同文本的不同数字表示。简单地说,它是文档(句子)词汇的表示。
为什么要嵌入单词?
大多数机器学习算法甚至深度学习架构都能够处理句子或文本。我们可以对每个字符采用基于字符的编码。但是它不会帮助我们理解一个词的意思。
例子:我们来举个例子。一种常见的简单字符编码是 ASCII(美国信息交换标准代码)。
ASCII of sweat
ASCII of waste
所以,你可以看到汗水和浪费的意义是不同的。但是它们仍然共享 ASCII 值。对于计算机来说,这可能是一项令人生畏的任务。
一个词嵌入有两类。
- 简单的基于频率的嵌入
- 基于预测的嵌入方法
a) 计数矢量器&一键编码
I . count vectorizer 提供了一种简单的方法,既可以标记一组文本文档,构建已知单词的词汇表,还可以使用该词汇表对新文档进行编码。
二。一键编码是将分类变量表示为二进制向量。每个整数值都表示为一个二进制向量,除了用 1 标记的整数索引之外,其他都是零值。
三。余弦相似度是一种度量,用于确定文档的相似程度,而不考虑它们的大小,并且它测量在多维空间中投影的两个向量之间的角度的余弦。
所以以(I,ii,iii)为例
Example
Cosine distance
x 和 y 的余弦相似度是 0.75
b) TF-IDF 矢量器
TF 表示词频,idf 表示逆文档频率。TF 计算所有项,并对它们一视同仁。
TF= term count/document word count
IDF 代表逆文档频率,表示日志。对数是指数运算的反函数。1614 年,天文学家和数学家约翰·耐普尔首先发现了对数,用来解决复杂的数学运算。
IDF = log(number of documents/ number of documents with term)
为什么要日志?
我们可以将 log 与 Zipf 定律联系起来,Zipf 定律是一条经验定律使用数理统计方法制定,并以语言学家 George Kingsley Zipf 的名字命名。它指出,给定一个使用的单词的大样本,任何单词的频率都与其在频率表中的排名成反比。
Zipf’s law
TF-IDF 的主要目标是缩小语料库中信息量较少的术语的影响。在语料库中频繁出现但意义较小的术语,如(“this”、“will”)。我们需要降低常用词的权重,同时降低生僻词的权重。
**示例:**假设我们有一个包含 1800 个单词的文档,该文档有 50 个出现术语“apple”的实例。
**TF = 50/1,800 = 0.027**
现在,假设我们有另一个包含 1000 万个单词的文档,单词“apple”出现了 1250 次,那么 IDF 和 TF-IDF 将是:
**IDF = log(10,000,000/1,250) = 3.9****TF-IDF = 0.027 * 3.9 = 0.10**
所以现在我们已经减轻了我们任期的分量。
c) word2vec
可以说是自 2013 年以来最重要的单词嵌入模型。如果有两个单词 w1 和 w2,并且如果它们相似,那么向量 v1 和 v2 会更接近。Word2Vec 是使用浅层神经网络学习单词嵌入的最流行的技术之一。它是由谷歌的托马斯·米科洛夫于 2013 年开发的。它用于学习单词的向量表示,称为“单词嵌入”,并作为预处理步骤完成,之后学习的向量被输入到模型中,以生成预测并执行各种有趣的事情。
word2vector
Word2vec 构建于:
- 滔滔不绝的话
- 跳过克
一.连续词汇袋(CBOW)
CBOW 的核心思想是给定的上下文词预测焦点词。
简单来说就是使用目标单词 ft 前后的 n 个单词进行预测。你也可以称之为多类分类器。我们的目标是在给定当前(聚焦)单词的情况下,找到对预测周围单词有用的单词表示。
让我们从神经网络的角度来理解 CBOW(最后😍)
CBOW (NN Intuition)
二。跳过程序
Skip-gram 的工作方式与 CBOW 略有不同。我们可以说 skip-gram 是 CBOW 的反义词。skip-gram 背后的核心思想是给出一个聚焦的单词来查找上下文单词。
Skip-gram (NN intuition)
Word2vec 提供了在(CBOW 和 skip-gram)之间进行选择的选项。这些参数是在模型训练期间提供的。可以选择使用 softmax 或分层 softmax 层。
现在我们来计算时间复杂度
- CBOW → 1 软最大值
- Skip-gram → k softmax
因为 Skipgram 有 k 个 softmax,所以计算量更大。
利弊
CBOW:
训练速度更快
对常用词更有效
跳过程序:
较慢/困难/复杂
可以很好地处理较小的数据
对不常用的单词更有效
**注意:**如果上下文单词增加,维数 N 增加,如果 N 增加,word2vec 工作得更好。
让我们计算重量
2250 万的重量😧
训练 2250 万个重量需要叶…
等等!优化前来救援☺️
算法优化简介:
分级 softmax
传统的 softmax 方法在大型语料库上可能是昂贵的。因此,我们将使用分层的 softmax →修改的 softmax 使其达到最优。
分层 softmax 是受(霍夫曼)二叉树(数据结构😋)是由 Morin 和 Bengio (2005)提出的。它本质上是用一个以单词为叶子的分层层来替换平面的 softmax 层。通过使用数据结构,我们最终能够轻松有效地解决问题。
假设我有 8 个包含概率的激活单元(每个单词 wn)。所以 wn 的和将会是 1。我们的任务是找到概率最高的单词。
我只需要 3 个激活单位就能得到我的单词 w3,而不是应用 8 个激活单位。因此,通过使用二叉树方法,我们的时间和计算复杂性大大降低。
**log base 2 (8) = 3**
阴性采样
负采样采用训练样本,并且只修改一小部分权重,而不是所有权重。使用负采样,我们随机选择少量的词来更新权重。
Negative sampling
- 始终保持目标词(在我们的例子中是 3)
- 在所有非目标词中,不要更新所有词,只需使用样本。对于采样,我们有一个如上所示的公式。
在下一篇文章中,我们将深入了解算法优化,如 softmax 函数、分层 softmax、负采样、噪声对比估计、快速文本、glove 和脸书的拼写错误遗忘(单词)嵌入(MOE)。
如有疑问,请通过shubhamdeshmukh @Yahoo . in联系作者。如果你对数据科学/机器学习有热情,请随时在 LinkedIn 上加我。
维度的诅咒
Photo by rawpixel.com from Pexels
为什么高维数据会如此麻烦
你有没有在给别人讲故事的过程中,或者在对复杂的事情进行冗长的解释时,对方看着你问道:“这有什么意义?”
第一,你的朋友太粗鲁了!
但是我们也站在你朋友的立场上——我们都是忙碌的人,有地方要去,有朋友要见。我们希望我们的信息快速而中肯。
这就是降维的本质。当面对一大堆数据时,我们可以使用降维算法让数据“切中要害”。
在之前的一篇文章中,我介绍了 PCA ,这是一种强大而通用的降维算法,可以挖掘我们数据中的潜在趋势。还有其他选择——比如非负矩阵分解、线性判别分析等等(我保证以后会谈到这些)。
然而,今天我们的话题不是关于一个特定的算法,而是关于我们为什么首先需要降维算法——维度的诅咒。
什么时候数据是高维的,为什么这可能是一个问题?
维数灾难听起来像是直接来自盗版电影,但它真正指的是当你的数据有太多的特征时。
这个短语是理查德·贝尔曼发明的,用来表达使用暴力(也叫网格搜索)来优化一个有太多输入变量的函数的困难。想象一下,运行一个 Excel 规划求解优化,其中有 100,000 个可能的输入变量,或者换句话说,有 100,000 个潜在的杠杆可以利用(很肯定这会使您的 Excel 崩溃)。
在当今的大数据世界中,它还可以指当您的数据具有大量维度时出现的其他几个潜在问题:
- 如果我们的特征比观察值多,我们就有可能过度拟合我们的模型——这通常会导致糟糕的样本外性能。
- 当我们有太多的要素时,观测值会变得更难聚类-信不信由你,**过多的维度会导致数据集中的每个观测值看起来与所有其他观测值等距。**因为聚类使用距离度量比如欧几里德距离来量化观察值之间的相似性,这是一个大问题。如果距离都近似相等,那么所有的观察结果看起来都一样(也一样不同),并且不能形成有意义的聚类。
第二点很重要,所以让我们用一个例子来看看为什么会这样。
高维数据诅咒我们的一个简单例子
假设我们的数据集由以下 8 种糖果组成。
Our Two Candy Clusters
事实是,在我们的 8 种糖果的数据集中有两类——辣的和甜的。所以,如果我们所关心的只是得到正确的口味,我们怎么能把我们的糖果聚集在一起,以确保我们永远不会不小心把辣糖给了我们爱吃甜食的朋友呢?
我们可以按颜色分类,如下所示:
Our 2 Color Based Clusters of Candy Flavor
很好,由于我们的聚类,我们知道如果我们吃红色的糖果,它会是辣的;如果我们吃一颗带蓝色的糖果,它会是甜的。
但实际上没那么简单。作为人类,我们能够目测糖果,并很快决定红色意味着辣,蓝色意味着甜。但是,只有当数据正确呈现给机器学习算法时,它才能做到这一点。如果我们的数据看起来像下表,那么我们是幸运的——我们有两个特征,红色和蓝色,它们产生完美的味觉簇,给我们一个完美的模型。
Perfect Clusters
但是如果我们的数据是高维的,如下表所示,那该怎么办呢?
High Dimensional Data Makes Trouble For Clustering
现在我们有 8 种颜色,而不是 2 种。聚类算法可能如何解释这一点?它会查看每一颗糖果,并得出以下结论:
- 每种糖果都有自己的颜色。
- 作为一个算法(没有经过特殊训练), 不知颜色之间的关系。 比如,不像人类,我不知道粉色比绿松石更接近红色。
- 给定这组特征,我推断有 8 个聚类,并且它们彼此都同样相似。
- 我还得出结论,在我的 8 个聚类中,4 个是辣的,4 个是甜的。
那一点用都没有。诚然,糖果都是不同的颜色,但这个结论并没有让我们比我们开始时过得更好。再读一遍最后一点——它只是重申了我们已经知道的数据集。我们对如何预测给定的糖果是辣的还是甜的一无所知。那么我们该如何解决这个问题呢?
降维拯救
下面是降维工作原理的典型例子。这并不意味着解释一个特定的算法,而是一个简单的例子,展示了维数约减算法遵循的一些原则。
Each Feature’s Exposure to the Latent Features
算法首先定位我们特征中的潜在趋势——这些可以是文本数据中的体育或政治等主题,或者时间序列数据中的主要趋势(参见我的理解 PCA 博客帖子以了解更多关于此的细节)。对于我们的糖果数据集,潜在的趋势很可能是红色和蓝色这两种原色。在数据科学中,隐藏在我们特征中的这些潜在趋势通常被称为潜在特征。
接下来,该算法根据上表中这些潜在特征的暴露程度来估计和重写每一个其他特征。
让我们根据每种糖果的潜在特征曝光度(上表中的数值)来绘制它们的图表——回想一下,每种糖果都有自己独特的颜色:
Each Candy Plotted According to its Latent Exposures
不错!从上面的图中可以很清楚地看出,使用我们的潜在特征(红色和蓝色)让我们产生了两个有意义的集群。最后,我们可以查看每个聚类,并计算有多少糖果是辣的,有多少是甜的,并使用这个频率作为我们预测的基础。
因此,我们的糖果辣/甜模型看起来如下所示:
- 给定一种新糖果,记录它的颜色。
- 将其颜色转换为红色特征和蓝色特征的曝光——换句话说,根据我们的潜在特征重写颜色。
- 使用我们的新糖果的潜在特征曝光,使用距离度量,例如欧几里德距离,计算出它是否更类似于红色糖果集群或蓝色糖果集群。
- 如果我们的模型将它放在红色聚类中,我们预测新的糖果是辣的(因为我们原始数据集中所有的红色聚类糖果都是辣的)。如果我们的模型把它放在蓝色的聚类中,我们预测新的糖果是甜的(因为我们原始数据集中所有的蓝色聚类糖果都是甜的)。
结论
今天,我们看到了太多的特征会如何混淆某些机器学习算法,如聚类算法。我们看到了降维是如何帮助恢复秩序的。
在混乱、嘈杂的数据和复杂关系的真实世界中(不像我们简单的糖果),降维代表了一个更健壮的模型(希望如此!)和较低的可解释性(我的 PCA 博客文章对此进行了更详细的讨论——查看标题为“将所有这些联系在一起的示例”的部分)。
所以请记住,虽然我们有一个工具来对抗维数灾难,但是使用这个工具是有代价的。干杯!
如果你总体上喜欢这篇文章和我的写作,请考虑通过我在这里的推荐链接注册 Medium 来支持我的写作。谢谢!
维度的诅咒
AI/ML 实用性
怪异的事情发生在更高的维度。即使是有用的信息也可能使机器学习模型过载。
本文是 AI/ML 实用性 系列的一部分。
我们大多数人都有非常合理的直觉,认为信息越多越好。例如,我对潜在借款人了解得越多,我就能越好地预测该借款人是否会拖欠贷款。令人惊讶的是,这种直觉是错误的,有时错误得惊人。
我已经单独写了额外的信息可能比无用的信息更糟糕,因为数据样本中的字段可能以误导的方式聚集或关联。这种不相关或随机的偶然效应会掩盖真实的效应。
事实上,事情变得更糟。额外的信息即使有用也会引起问题。这个令人惊讶的事实是由于只在高维度中出现的现象,被称为维度的诅咒。
(注意:如果你对更高维度的概念感到不安,这篇文章可能会有所帮助。)
掉进兔子洞
诅咒是一系列依赖于问题细节的效应。下面我将详细介绍其中两个最大的问题。不过,所有这些都与高维空间的直觉延伸效应有关。所以,我想从一个简单的智力游戏开始。
让我们看看随着输入数量的增加,输入空间会发生什么变化。输入空间是一个奇特的术语,指所有可能的输入组合,不管它们是否真实。
假设我们试图只用一个输入特征来预测一个结果。我们的输入空间由该特征的所有可能值组成。让我们来看看下面三分之一的可能值,用蓝色条表示:
1/3 of feature range = 1/3 of input space
很明显,输入的所有可能值的三分之一包含在该输入范围的中间三分之一。并且,因为只有一个特征,所以它也包含所有输入组合的三分之一,即输入空间的三分之一。
当我们添加第二个特性并将它的可能值分成三份时,我们可以画一个正方形来表示一个范围,该范围覆盖了这两个特性中每一个的可能值的三分之一:
1/3 of each feature range = 1/9 of the input space
这里,输入空间有两个值,每个要素一个值。虽然这个框包含了每个特性的三分之一的可能值,但是它只包含了九分之一,或者所有可能值组合的 11%。
添加第三个特征使我们的立方体再次覆盖了每个特征范围的三分之一,但是现在只有 1/27 或大约 4%的输入空间:
1/3 of each feature range = 1/27 of the input space
我们无法想象超过三个维度,但是我们可以计算。一旦我们达到十个特征,等效的框将包含不到千分之一的输入空间。有了 20 个特征,该框将包含不到百万分之一的输入空间。有了 50 个特征,我们已经超过了万亿分之一。
然而,这些代表输入空间的极小部分的小盒子仍然代表了每个维度的三分之一的可能值。
虽然盒子很小,但是它们有很长的边!
怪异。对吗?
高维=稀疏
为了理解为什么这很重要,让我们换一个更容易思考的效果。
假设我们有一个 500 个数据点的样本,让我们探索一下当我们获得关于每个数据点的更多信息时,即当我们添加维度时,会发生什么。
添加关于每个数据点的更多信息为数据点之间的不同创造了新的方式。因此,它增加了数据点之间的可能距离。
Each new dimension creates an opportunity for two data points to differ in a new way — i.e. to be farther apart from each other
只有一条信息,我们的 500 个数据点看起来几乎是连续的。
对于每个数据点的两条信息,点之间的平均距离大约是两倍:
对于三条信息,它们之间的平均距离是四倍:
尽管我们无法想象更高维度,但数学告诉我们,点与点之间的距离会继续增长。有了 50 维,点与点之间的平均距离将是只有一维时的 20 多倍。
稀疏=误差
用非常简单的话来说,机器学习的基本策略是通过查看相似的数据来进行推断。一些模型,像 k- 最近邻,甚至明确地这样做。
用数学术语来说,“相似”就是接近的意思。随着我们对每个数据点了解得越来越多,我们发现它们之间的距离越来越远。因此,我们被迫从越来越不相似的数据中做出推论。
然而,并非所有的距离都同等重要。有些特征比其他特征更能告诉我们想要推断的东西。机器学习的工作是揭示这些差异和无关紧要的负重距离。但是,随着维度数量的增加,数据以指数方式变得更加稀疏,真正的差异被随机变化(噪声)掩盖了。
您可以通过获取更多的训练数据来解决这个问题。但是,过了某一点,这几乎是不可能的。在我们的示例中,要保持相同的数据密度,每增加一个维度需要 500 倍的数据。在 50 维,你需要的数据点比宇宙中的粒子还要多!
顺便说一下,最近邻居遇到了另一个奇怪的问题。如果数据存在随机变化,增加多个维度可以使所有点之间的距离大致相同。因此,“邻居”的概念就消失了。
一切都是异数
在统计分析中,与其他数据显著不同的数据点称为异常值。这些极端事件造成了很多麻烦。
首先,很难知道异常值是否代表了被测量的东西或我们如何测量它的统计变化。我们可能会问,婴儿出生时体重 12 磅的可能性有多大?还是称出了故障?甚至对于统计学家来说,丢弃离群值以防止混淆统计模型也是很常见的。
此外,数据集边缘附近的推理永远不会像中心附近那样有效。弄清楚两个已知案例之间发生了什么比想象已知案例之外发生了什么要容易得多。
在以下示例中,从正弦波(绿线)中采样了 10 个点。一种名为“三次样条”(橙色虚线)的技术在数据点之间的曲线插值方面做得很好,但在边缘处完全放大了。
Modeling at the edges of a dataset is much harder!
这是一种人为的情况,但它只是每个机器学习模型都会发生的一个极端例子。
在高维空间,这是一个更大的问题。考虑到这么多方面,事实证明几乎每个数据点在某种程度上都是异常值。让我们进行同样的一次一个维度的演练,看看发生了什么。
下面是我们在稀疏部分看到的相同数据。极端数据点以紫色突出显示。为了这个例子的目的,我们将考虑一个极值,如果它在所有观察值的最低或最高的 2.5%。
In one dimension, 5% of the data points are extreme
添加第二维度后,我们现在突出显示其值在二维度中的任一维度或二维度中都为极值的数据点。
In two dimensions, 9.75% of the data points are extreme
至少在一个方面极端的数据点比例几乎翻倍,从 5%增加到 9.75%。
对于三个维度,异常值的百分比上升到 14.26%:
In three dimensions, 14.26% of the data points are extreme
再说一次,我们无法想象三维以外的情况,但是我们可以做数学计算。在 10 个维度中,40.13%的数据点在至少一个维度上是极端的。在 100 个维度中,99.41%的数据点在至少一个维度上是极端的。
Outliers form an “outer shell” of the dataset
再次查看二维图,我们可以用另一种方式描述异常值。它们是靠近数据集边缘的点,形成一个“外壳”。
在高维空间中,几乎所有的数据都在外壳中。这意味着,“邻域”通常会延伸到多个维度的外部边缘,机器学习模型几乎总是需要外推,并且很少有其他数据点会与任何给定的数据点“相似”。
厄运和黑暗?
尽管存在诅咒,但机器学习的许多最大成功都来自高维领域。
在图像识别中,每个像素通常是一个维度。垃圾邮件过滤器和机器翻译通常将语言中的每个单词视为一个维度。然而,在这些领域,机器学习产生了惊人的结果。怎么回事?
首先,在成功的地方,数据是丰富的。谷歌在机器翻译领域占据主导地位并不奇怪。他们已经把网上所有的文件都编目了!
第二,与我上面使用的三次样条方法不同,图像识别和翻译中使用的模型是为解决高维度问题而设计并不断改进的。
第三,当数据中的数据变化很大时,高维度问题最糟糕。但是许多,也许是大多数,数据集至少在某些维度上有高度的规律性。这种效应被称为“一致性的祝福”,它在一定程度上消除了维数灾难。
注意:示例中的数据集在所有维度上都是独立的标准正态分布。
知识的诅咒
Claude Monet, Cart on the Snow Covered Road with Saint-Simeon Farm, 1865
为什么有能力的人往往教学这么差?事实证明,专业知识伴随着认知障碍,这使得很难将高级知识转移给其他人。
一个三岁的男孩来到实验室,坐在一张桌子旁。实验者给了他一盒聪明糖。他很兴奋。他打开盒子,发现盒子里装的不是智能玩具,而是铅笔。所以孩子很惊讶。实验者把铅笔放回盒子里,关上盒子,放回桌子上。他说:好的,现在另一个小男孩要进来了,杰森。杰森认为盒子里有什么?而男孩会说铅笔。当然,尽管杰森无法知道盒子里装的是铅笔,但男孩知道,但新来的男孩不会知道。事实上,如果你问他,当你走进房间时,你认为盒子里是什么?他会说铅笔。现在他知道了,就再也无法恢复他曾经不知道的那种天真无邪的状态了。”—史蒂芬·平克,21 世纪的语言学、文体与写作 [4]。
“知识的诅咒”一词是经济学家科林·卡默勒、乔治·洛温斯坦和马丁·韦伯在 1989 年的《政治经济学杂志》上发表的一篇文章中创造的,用来描述一种认知偏见,这种偏见使人们将自己对世界的知识和经验投射到他人身上。知识的诅咒使我们很难准确地重建我们以前的、知识较少的精神状态,在这种状态下,我们不知道或不理解某些东西。实际上,我们有一种强烈的倾向,不知不觉地认为别人知道我们知道的东西,或者认为学习它比实际上更容易。在他关于后见之明偏差的论文中,人们倾向于认为已经发生的事件比事件发生前的实际情况更可预测,菲施霍夫提出理论,认为在知识较少的状态下无法与自己产生共鸣是因为我们“锚定在接受知识所产生的后见状态中”[5]。
Richard Fisher 在他的文章中指出,在 20 世纪 80 年代,一些行为经济学家观察到了这一现象,当时汽车销售人员错误地判断了他们的汽车可以赚多少钱。因为他们对自己的汽车了如指掌,他们无意识地认为他们的顾客也是如此,包括汽车的缺陷。然而,事实上,无知的顾客会很乐意支付更多的钱。
加州斯坦福大学的帕梅拉·海因兹是最早研究这个问题的心理学家之一。在她的一个实验中,她让有经验的销售人员估计一个新手需要多长时间学会如何使用手机完成一系列任务。她发现专家们大大低估了所需的时间。平均来说,不熟练的新手花的时间是预期的两倍。“这些研究的结果表明,专家可能有认知障碍,导致低估新手面临的困难,而具有中等专业水平的专家可能更准确地预测新手的表现”[1]。由新手和中级用户组成的另外两个组被问了同样的问题。两者都给出了更好的估计。
为什么我们如此不善于猜测别人知道什么?为什么很容易低估一个人学会一件事需要多长时间?首先,我们必须承认,仅仅因为你知道一些事情,而你的观众不知道,你们两个之间一定有差距。提炼多年的经验很难,因为很多时候不容易用语言表达出来。肌肉记忆、精神习惯、无意识偏见都起着主要作用。
在讨论优秀写作的挑战时,史蒂芬·平克注意到,作者根本没有想到,读者没有学会他们的行话,不知道中间的步骤,这些步骤似乎太明显而不能提及,也不能在作者的脑海中想象出当前的场景。实际上,他们懒得解释行话,阐明逻辑,并为读者提供具体的细节和例子。平克接着说,不幸的是,这种情况甚至在为专业同行写作时也会发生,他举了以下《认知科学趋势》杂志上一篇论文中的一段话作为例子:
有意识知觉的缓慢和整合的本质在行为上得到观察的证实,如“兔子错觉”及其变体,其中刺激最终被感知的方式受到原始刺激后几百毫秒发生的刺激后事件的影响
“我干这行快四十年了,我根本不知道他们在说什么。”
在日益复杂、瞬息万变的信息时代,传递知识的能力极其重要。因此,知识的诅咒给我们的现代文明提出了一个棘手的问题。正如我们所看到的,已经掌握知识的老师,常常不能以适合于那些还没有掌握知识的人的方式来传授知识。正如 Chip 和 Dan Heath 补充的那样,在商业世界中,经理和员工、营销人员和客户、公司总部和一线,都依赖于持续的沟通,但却遭受着巨大的信息不平衡。
费希霍夫的理论认为,在知识较少的状态下,我们无法与自己产生共鸣,是因为我们“被固定在接受知识所产生的后视状态中”。
我们能做些什么呢?
幸运的是,我们可以做一些事情来减少负面影响。平克说,一个传统的解决方案是始终让你的读者保持警惕。“也就是说,要和读者强调,从她的角度看世界,试着感受她的痛苦,穿着她的鹿皮鞋走一英里路。”然而,他补充说,这并不总是有效的,因为许多心理学研究表明,我们不太擅长弄清楚别人知道什么,即使我们非常非常努力地尝试[原文]。一个更好的解决方案是直接吸引你的观众,并获得尽可能多的反馈。把你的草稿给你的学生或同事看,甚至在一段时间后给你自己看,材料已经不熟悉了。“如果你和我一样,你会发现自己在想‘这不清楚’或者‘我这么说是什么意思?’,或者经常说,“谁写的这些垃圾?””平克开玩笑地说。然后,重写材料(最好是几次),记住许多你的听众可能不知道的事情,同时,不要假设你的听众已经知道一些事情。
第二条重要的建议来自 Chip 和 Dan Heath 的畅销书 Made to Stick,该书教导如何创造出持久并“留在”观众记忆中的创意。作者说“具体的语言和故事打败了知识的诅咒。”根据希斯兄弟的说法,这种具有强烈形象化的想法更容易理解和记忆。"语言常常是抽象的,但生活并不抽象."因此,作者建议用简单的语言和尽可能多的例子来表达复杂的思想,同时避免过于抽象的语言。
最后,承认并拥抱你的无知。不出所料,看到知识的诅咒的一个更明显的地方是在教室里。不列颠哥伦比亚大学的心理学家苏珊·伯奇说:“这是一种矛盾的说法,但无知在教育中可以是一种美德。”。要把你的知识传递给别人,你不仅要把多年的经验提炼成文字,这本身就够难的了,而且你还需要从新手的天真角度看待事物。“有时,经验不足的老师能更好地在恰当的层面传达信息。”
无知是福。
参考
- Hinds,P. J. (1999 年)。专业知识的诅咒:专业知识和去偏方法对新手表现预测的影响。实验心理学杂志:应用, 5 (2),205。
- 理查德·费希尔。不要自作聪明:知识的诅咒。新科学家。
- 奇普·希斯,丹·希斯。为什么一些想法存活下来,而另一些却死了。兰登书屋。
- 史蒂芬·平克。21 世纪的语言学、文体和写作。
- 奇普希斯,丹希斯。知识的诅咒。哈佛商业评论。
- 巴鲁克·菲施霍夫(1975 年)。“后见之明不等于先见之明:不确定条件下结果知识对判断的影响”。实验心理学杂志:人类感知与表现。1(3):288–299。
CX 革命
实施人工智能以提供卓越的客户体验
现在人工智能(AI)已经存在很久了;在 20 世纪 80 年代末,我们用它的力量在职业棋手的游戏中击败他们,今天我们用它来驱动自动驾驶汽车。人工智能革命是本世纪最重要的进化之一,没有人知道人工智能下一步会做什么。
在人工智能承诺的数百种可能性中,客户体验(CX)是一个为组织增长和差异化提供巨大机会的领域。
AI 是客户体验的未来吗?
绝对的。欢迎来到体验经济,消费者会不断地将你的产品和服务与相似甚至更好的产品和服务进行比较。今天,赢得客户的不仅仅是你的产品或低廉的价格,而是你的公司提供给消费者的客户体验。消费者的期望比以往任何时候都高,公司现在被迫重塑其业务模式,并重新思考其业务战略,以满足这些不断变化的消费者期望。这里没有冒险的余地——企业无法猜测什么可行,什么不可行。这就是为什么越来越多的组织现在开始关注人工智能来应对这一挑战,并创造更有意义的客户体验。
客户体验再也不会一样了
毫不奇怪,像亚马逊、优步和网飞这样的公司现在严重依赖人工智能的力量来加强他们的游戏,并且随着他们取得的成果,已经没有回头路了;人工智能将留下来,并改变世界以前看待客户体验的方式。
人工智能对未来客户体验的影响
区分顾客和品牌忠诚者的关键特征是顾客服务。这就是为什么 CRM 技术在几年前如此受组织欢迎(通过数百万美元的投资)。CRM 承诺在 CX 实现自动化,这很好,但对于今天有闪烁行为的客户来说还不够。人工智能通过将智能与自动化相结合,将客户服务置于自动驾驶状态,在增强客户体验方面更进了一步。
这场“智能自动化”革命的结果是,客户比以往任何时候都更快乐,企业也是如此。从预订航班到订购披萨,顾客们正在逐渐适应 CX 的这种智能变化,而且他们喜欢这种变化。事实上,专家认为,到 2020 年,85%的未来客户服务互动可能会实现自动化——而这仅仅是个开始。因此,让我们更深入一点,看看人工智能将如何影响不同行业内客户体验的未来。
- 零售业:通过人工智能个性化保持前 1%的客户参与 研究表明,零售商前 1%的客户的价值是其普通客户的 18 倍。个性化是留住这些高价值客户的最佳工具。然而,关键是要超越基本的个性化,例如,在正确的时间向正确的设备发送带有正确信息的一次性个性化简讯,其中包含客户定制的促销活动。这可以通过使用预测分析和强化学习来实现,预测分析和强化学习消除了营销中的人工猜测,并通过不断寻找下一个最佳行动来提供最佳结果,从而优化客户体验。对于零售和时尚行业的 CX 来说,未来还拥有虚拟个人造型师、视觉搜索、聊天机器人、类似的产品推荐等等。
- 银行&金融部门:内向者轻松理财 银行和金融部门也逐渐显示出适应人工智能的迹象。像摩根大通这样的大公司已经投资于这项技术,推出了一个合同智能(COiN)平台,旨在分析法律文件,提取关键数据点和条款。而富国银行(Wells Fargo)等其他金融公司正在利用人工智能技术来增强客户体验,他们通过 Facebook Messenger 平台与数百名员工一起测试人工智能驱动的聊天机器人。虚拟助理直接与客户打交道,帮助他们更改密码或访问他们的帐户信息。
- 医疗保健行业:虚拟护理伴侣和数据驱动的反馈引领患者体验的未来 医疗保健组织(HCO)在客户服务方面一直以懒惰著称。尽管满足患者需求的传统方式不能完全抛弃,但实时反馈的使用能够并将很快成为 CX 医疗保健战略的前沿。
为了向住院患者和门诊患者提供更简化的体验,HCO 已经在虚拟护理技术上投入巨资。医疗保健部门可以通过聊天机器人实现查询过程的自动化来节省大量成本。Juniper Research 的一份报告指出:
“到 2022 年,聊天机器人将负责为零售、电子商务、银行和医疗保健每年节省 80 亿美元的成本。”
- 娱乐业:个性化娱乐时代开始 流媒体服务正在彻底改变人们以前看待娱乐的方式。从 100 多个没什么可看的电视频道,到网飞上的 10 万个节目,娱乐业无疑在这十年里实现了巨大的飞跃。
Google Play Music 和 Apple Music 等流媒体服务通过排列播放列表中的新曲目,为消费者提供数据驱动的个性化体验,同时仍能迎合听众的口味。人工智能允许这些服务不仅通过跟踪用户的历史记录,还通过收集具有相似特征的听众倾向于喜欢什么的数据来向消费者提供建议。这就像网飞总能猜到某人在开心或难过的时候想看什么一样。 - 农业部门:作物健康监测变得更加智能 曾经有一段时间,大多数人几乎可以肯定,农业部门将获得的唯一创新来自基因工程,很可能是以转基因生物的形式。这对所有那些人来说可能是一个惊喜,但这个部门最终将很快得到一个重要的人工智能升级。技术专家和农业专业人士正在共同努力,通过使用计算机视觉和深度学习算法处理数据来监控作物和土壤健康,以便通过虚拟助理向农民提供合理的建议,从而使农业变得更加智能。
为当今的公司实施人工智能
在保持领先的永久竞赛中,企业终于开始拥抱人工智能技术。这不是跟随最新的趋势,而是使用正确的技术为企业和客户解决问题。尽管在公司中实施人工智能的想法似乎对大多数企业主来说很有吸引力,但这可能不是手头最直接的任务,许多人可能最终会为此而挣扎。
首先,公司首先需要确定他们的问题,并判断人工智能是否会帮助他们解决问题。例如,需要自动化的企业或组织的任何领域都可以从人工智能中受益。
“人工智能有助于自动化重复性任务,通过帮助员工和代理做出更好、更快、更明智的决策来增强他们的能力。”— Jorge Sanchez,Appian 产品战略总监
聊天机器人这种简单的工具可以为任何规模的企业带来巨大的变化。
各种规模的公司都可以利用以下工具开始
- AgentBot —是一种自动客户服务解决方案,它使用人工智能来实时了解和解决客户的需求
- 永不流失 —了解、预测并最大限度地减少客户流失
- Botsify — 为 Facebook Messenger 或网站创建在线自动聊天机器人
- Zendesk AI —有效的人工智能票务将常规任务转化为高效的沟通
然而,在已经成熟的业务中实施 AI 并不意味着必须改变整个商业模式。这是一项超级智能的技术,将帮助任何公司改进其当前的流程。关键是要了解一点人工智能,以便在实施它之前,可以完全理解它可以为他们的业务做什么。
一锤定音
当谈到人工智能时,客户体验的未来拥有无限的可能性。未来,人工智能将彻底改变每个行业的企业与客户互动的方式,并将改变我们创建客户体验战略的方方面面,从顶层决策到营销。
人工智能在招聘中的危险(及 3 点建议)
我最近遇到了人工智能在招聘中最用心良苦、也最令人不安的应用之一;一个会说话的机器人头被认为是避免面试中偏见的解决方案。想象一个 Alexa 大小的机器人,上面画着一张真实的人脸。脸变了,试图表现出表情和非语言的暗示。
就像许多第一次尝试从技术上解决人类问题一样,过度应用技术和公众不准备在如此严峻的应用中接受这种程度的“我,机器人”(我正看着你谷歌眼镜),很容易令人痛苦地错过目标。
机器人的宣传视频以一个戴头巾或 khimar 的女性开始。她在回答典型的面试问题时,对自己的技能、培训和教育给予了积极的回应。她应该是个重要的候选人,对吧?她的白人面试官可不这么认为,他们很难看出她的“健康”。直到最后,有人听到她的话,她的经历,她的价值。有人吗?某件事。进入面试机器人。
看着这段视频,穆斯林妇女一次又一次地被歧视,然后被一个字面上的会说话的头带着惊讶和宽慰接受和欢迎,我不禁努力想象一个候选人会对这样的面试感到高兴和投入。想象一下潜在的非故意的信息,一个已经代表不足的候选人可能有被歧视的历史,不值得一个真正的人类同胞的时间或考虑(感知是现实,不管意图的纯度)。我希望我们的目标是足够好地理解偏见并克服它,利用技术来增加和加强我们的人际关系,而不是简单地试图用技术来交换人。要是让我们的文化超越种族歧视有那么容易就好了。
说到这个…
我们怎么知道算法不是种族歧视?
比机器人应该在世界上最人性化的行业之一(招聘)中取代人类更令人担忧的是,许多人接受并在算法是客观的、不受过去经验影响的前提下操作,而且,嗯,是机器人。事实上,这很可能是有偏见的,与它首先试图解决的问题背道而驰。
这可能是由多种原因造成的,但我们只简单分析两个原因。
首先,编写代码的开发人员本身主要是白人男性,这导致在我们了解模式和行为之前,潜在的对底层代码的偏见。
“就其本质而言,算法会带有某种偏见……每当你在纸上、印刷品上或代码中表达一个想法时,这个想法就会以一种单方面定义的方式出现,必然带有某种偏见。”Dipayan Ghosh,哈佛大学肯尼迪学院新美国和 Shorenstein 中心的研究员。
其次,AI/机器学习是在海量数据集上训练的。根据定义,这些数据来自历史行为,事件,甚至是成功的衡量,等等,我们普遍认为这些数据包含偏见,这就是为什么我们首先要解决这个问题。我们如何开发一个基于有偏数据的客观算法?
“如果您使用反映现有和历史偏差的数据,并要求数学工具基于该数据进行预测,预测将反映该偏差。”——Rachel Goodman,美国公民自由联盟种族公正项目的律师
不要误解我,我完全支持和认可这些努力背后的思想和他们试图解决的问题。偏见,无论是隐性的还是显性的,在面试过程中(或任何地方)都是没有位置的,我赞扬开发人员试图解决这个普遍而隐蔽的社会问题。这项技术和其他相关技术有一个难以置信的机会来解决招聘中猖獗的一些问题,偏见是一个非常重要的问题。
从筛选到评估到日程安排,甚至聊天机器人实时回答候选人的常见问题等等,招聘人员利用这些新兴技术的潜力很大。但我也在确保保持人力资源中的“H”的阵营中,并且我是在雇主品牌、讲故事和招聘中包含和展示人、真诚互动和员工故事的坚定支持者,所以我喜欢寻找这两者如何真正协同工作。
设定期望值的重要性
成功最关键的一步是设定现实的内在期望。作为术语人工智能(以及相关术语,如算法、机器学习等。)在集体意识中上升,与从自动驾驶汽车到投资到寻找下一个公寓的所有事情联系在一起,似乎有一种相应的想法,即它们是为你做所有事情的“一劳永逸”的系统。
没有灵丹妙药。人才市场竞争异常激烈,购买最新的玩具不会让你的所有候选人突然接受你的提议。但它能做的是,让你的团队腾出更多的时间来从事更有价值的活动,在减少采购和招聘过程中的偏见方面发挥积极作用,并在不增加(事实上,往往更少)工时的情况下,提供更加简化、更具吸引力的候选人体验。
在所有具备颠覆条件的行业中,人才收购是最人性化的行业之一,如果不是最人性化的话。我们的角色是关系的媒人,这将占据你意识时间的绝大部分;你的事业。你可能比你的家人或其他重要的人花更多的时间和你的同事在一起。你的工作对你的精神、身体和财务健康有着根本性的影响。你工作场所的文化可能会让你在早上兴奋不已,或者在你考虑回去的时候沉浸在周日的忧郁中。如果我们有办法做到这一点:
- 较好的
- 更有效地
- 更有效地
- 更少的偏见
- 随着更多的交流
- 更加个性化
我全押上了。但是,当产品和推销以及未经充分思考的“解决方案”冲击市场和你的收件箱时,你怎么知道从哪里开始呢?我建议我们从确定一些我们希望用技术解决/改进的核心问题开始,并回到正确的方法,用更先进的工具集成我们的人类团队。毕竟,你不会想走进手术室,却发现一个全自动手术机器人在没有人类监督和控制的情况下准备切开你的身体。同样,候选人不希望感觉他们正在被筛选、选择,并被算法认为有价值或没有价值。我们身处的是一个关系行业,关系,无论好坏,都是与他人建立的。
您可以从三个方面入手
清单很长,很容易做很多事情,却没有做得特别好。而在我开始之前,我先承认,这些并不都是“AI”。
先说三个。名单上还有很多,所以我不认为知道“正确”的三个,但我认为这些都是唾手可得的果实,从招聘人员和候选人的角度来看,都可以加快和改善往往是艰巨而痛苦的招聘过程。我将这些概括为:
- 偏见
- 时间
- 沟通
偏见:增加候选人渠道的多样性
我们都有偏见,有些人(比其他人)更有偏见,但它以你可能没有意识到的方式影响了这个过程,从某人在哪里上学到他们是否和你从事同样的运动。幸运的是,现在有一些系统和平台允许对技能和能力进行评估,而不考虑教育背景、GPA 或其他历史证书,这些证书在很大程度上被证明与该角色的表现没有任何关联。这些正在被大型知名品牌广泛使用,是扩大你的人才库和发现最佳人才的好方法,不会产生偏见。
时间:增加对增值活动的关注。
你的团队花了多少时间来(重新)安排面试,回答候选人同样的问题,整理简历……这样的事情不胜枚举。有一些很棒的解决方案可以帮你摆脱这些,这样你就可以把时间花在你最擅长的事情上;居然招人!让人们决定接受还是不接受这份工作的是与人的对话,以及他们与招聘人员和面试团队中其他人的互动,但他们可能会因为人力资源部门的过度工作和人手不足而错过这个过程。让人工智能处理分析简历、安排面试,你可以专注于在你的优势所在之处产生最大的影响。更进一步,你可以拥有一个永远在线的人工智能聊天机器人,通过桌面或文本来回答候选人的问题和状态更新请求,这导致
沟通:实际去做
从两面来看,我们都很清楚投简历和职位空缺之间众所周知的“黑洞”,以及整个面试过程中经常出现的有限(或完全缺乏)沟通。
以我们现有的技术,绝对没有任何借口或理由这样做。至少,当收到申请时,当申请在 ATS 中从一个阶段进入另一个阶段时,以及一旦做出决定时,你应该与你的候选人保持联系(补充说明:这些需要从股票模板样板中重写,以你的品牌声音出现,哦,这是一个多么棒和意想不到的文化视频!)
关于这个话题还有很多可以写的,但是我想加入这个话题的讨论,并且很乐意阅读/回应任何评论、问题、观察等。!
数据分析中标题游戏的危险
我对数据初级人员和专业人员的建议
在谷歌,你的头衔并不重要。你的工作有!
Source: Unsplash
“你是一名数据分析师,为什么要做机器学习?”
一个应届毕业生问我。在他心目中,我把自己的头衔定为数据分析师真的很奇怪。他毕竟是一家大型电子商务初创公司的数据科学家/机器学习工程师。这两个头衔目前在数据分析领域享有盛誉。
然而,在谷歌,头衔并不重要。不管你是数据分析师还是软件工程师。如果你的日常工作需要,他们会希望你使用机器学习。尽管我称自己为分析师,但我仍然扮演着技术角色。我从 Gmail 和 Chrome 作为数据源,用计算机视觉、图像识别、机器学习来检测钓鱼攻击。
在传统定义中,我是一个完整的数据科学家,提取数据,然后用产品可维护代码生成洞察/模型。
数据分析师和数据科学家的传统定义。
From Skillfin Learning
当我开始我的数据科学之旅时,我作为一名数据科学家在 Lazada 实习。在 Lazada,他们有两种类型的数据科学家:
- 使用 excel 或 dashboard viz 工具生成图表和业务见解的数据科学家。
- 使用机器学习和统计严谨性来分析数据和发现见解的数据科学家。
他们都被称为数据科学家,处理数据,但本质上角色是不同的。根据 Skillfin 的定义,他们将 1 号称为数据分析师,2 号称为数据科学家。一些创业公司称 1 号为初级数据科学家。当然,后者是你作为数据科学家通常期望从事的工作。
肮脏的标题游戏
Source unsplash
“数据科学家”头衔的滥用
似乎随着数据科学家这个头衔的不断演变,它变得越来越饱和。5 年前,在新加坡,数据科学家的头衔并不突出。然而,随着数据趋势变得越来越大,许多研究人员、顾问和教育家也加入了这一趋势,并承担起数据科学家的角色。
这导致很多创业公司滥用了“数据科学家”这个头衔。因此,数据科学家这个术语被越来越多地滥用。如今,我们可以看到一些数据科学家已经将自己更名为机器学习工程师或研究科学家。
作为人类,我们是天生的简化论者,我们总是想简化事物,以便更容易理解。如今,许多公司将他们的工作描述与数据科学家的头衔分开。核心思想是数据分析师建立仪表板和初步分析,然后数据科学家建立机器学习模型。
当我向一位从初创公司跳槽到谷歌的同事提到这一点时,他告诉我:
就在不久前,我的 10 个同事将他们的头衔从数据科学家改为机器学习工程师。他们接着问我,“你怎么会被降职为数据分析师?."对他们,我只是回答“我不在乎,我得到的报酬更多。”
原因
为什么会出现这种标题剧?很简单,这是因为新的头衔会吸引更多的人和威望。许多初创公司会调整他们的头衔和工作描述,以顺应潮流,让更多应届毕业生和专业人士申请他们的公司。
还记得在故事开始时接近我的那个应届毕业生吗?他告诉我,他真的很开心把自己的头衔从数据科学家变成了机器学习工程师。对他来说,这使他更有价值。
最终,许多人失望了。招聘经理很失望,他们认为他们雇佣了一个很好的数据科学家,但最终得到的是一个只知道如何实现库而不知道为什么的人。他们的工作描述与职位名称不符。
另一方面,工人们也很失望。我有几个做数据科学家实习生的朋友,但是深感沮丧,因为他们只手动输入数据标签。
从这里,我们知道,如果你不仔细分析标题,它会在未来咬你。
真正重要的是:解决你的招聘经理问题
Source: Unsplash
根据我对多位数据科学家/专业人士的采访,我发现对你来说重要的只是关注你的经验和技能。作为一名教育工作者,我总是告诉我的后辈:专注于你提供的价值。
每次面试都有一个简单的目标
你如何解决面试官的问题?
你需要评估你拥有哪些对你和你的面试官有价值的资产。不管你在简历中放了多少废话和“华丽的”字眼,如果你不能回答“你是如何解决面试官的问题的”,你就不会成功。
在谷歌,面试官将测试你以前的经历,以及你将如何适应和学习这个角色。每位面试者将以匿名身份将招聘包交给招聘委员会。这意味着招聘委员会不知道每个面试者的姓名、性别,甚至种族。然后,他们会纯粹根据招聘计划对你的价值做出选择。你的头衔在这方面会有点发言权。
面试也将在结构化面试中进行。这意味着他们会问很多假设性的(如果…)和行为性的(如果…)。这两个问题对于谷歌确定你的价值至关重要。我有更多关于参加符合这些描述的数据分析面试的信息。
那你被录用后。这是一个你需要专注于培养技能和超越自我的时刻。我已经在我的文章中提到了这一点的重要性。
另一个参考是加州纽波特的深度作品,作者教你在有限的时间内培养技能的技巧,这样你就可以学习并在当今纷乱的世界中变得有价值。从这里,我学会了批量处理我的工作,并专注于数据分析和机器学习的复杂世界。
结论:关注工作而不是头衔
Source: Unsplash
总之,你不是由标题和绒毛来判断的。而是你所做工作的影响。解决你的面试官和招聘经理的问题,你就没事了。思考如何建立必要的价值观和技能,为未来的职业生涯做准备。
对我来说,我总是利用我的空闲时间来进行我的副业项目,并将它们很好地打包到 Github 或其他博客中。然后,我会部署这些应用程序并编写它们,以便为我的下属和其他数据从业者带来价值。几个月之内,我的 LinkedIn 就成了 Google HR 推荐我的个人资料,以便与我联系。当他在 LinkedIn 搜索上键入“数据挖掘”和“数据分析”时,他发现了我的个人资料。多么美妙的惊喜啊!
总之,记住这些可行的计划:
- 小心你的头衔和工作描述。这可能不是你想要的。
- 关注你给简历和面试带来的价值。这就是你赢得面试的方法。
- 通过发展和贡献你的技能来超越自己。然后做深入的工作,贡献更多的价值。
如果你把你工作的许多价值带给别人,你会得到许多机会。这就是你应该如何在你的职业生涯中穿越。
最后…
我真的希望这是一本很棒的读物,是你发展和创新的灵感来源。
请在下面评论以获得建议和反馈。就像你一样,我也在学习如何成为一名更好的数据科学家和工程师。请帮助我改进,以便我可以在后续的文章发布中更好地帮助您。
谢谢大家,编码快乐:)
关于作者
Vincent Tatan 是一名数据和技术爱好者,拥有在 Google LLC、Visa Inc .和 Lazada 实施微服务架构、商业智能和分析管道项目的相关工作经验。
Vincent 是土生土长的印度尼西亚人,在解决问题方面成绩斐然,擅长全栈开发、数据分析和战略规划。
他一直积极咨询 SMU BI & Analytics Club,指导来自不同背景的有抱负的数据科学家和工程师,并为企业开发他们的产品开放他的专业知识。
文森特还在 BestTop 和 10to8 上开设了他的一对一导师服务,指导你如何在谷歌、Visa 或其他大型科技公司获得你梦想的数据科学家/工程师工作。如果你正在寻找良师益友,请在这里预约你和他的约会。
最后,请通过LinkedIn、Medium或 Youtube 频道 联系文森特
人工智能自动学习偏见的危险
阅读新闻,你会读到机器学习和人工智能领域取得的巨大成功和发展。但是仔细研究一下,你会发现数据科学已经发现了一些过去的错误。
Photo by Trym Nilsen on Unsplash
机器学习中的习得性偏差
我认为这将是一个很好的报道领域,因为最近的 BBC 新闻文章强调,由于英国警方采用的面部识别软件是针对主要是欧洲白人的,该系统将遭受更高的错误率,任何人都不在这个群体之内。的文章强调了这可能会导致黑人和少数民族更高的误判率。
可悲的是,这不是一次性的案例,如果你在新闻中搜索一下,你会发现几篇谈论机器学习偏见问题的文章。
事实上,算法中明显的性别歧视和种族歧视是一些人争论了很久的事情(特别是在医学领域,这里是这里是和这里是),归结为数据本身(有时是算法设计者)包含算法发现的偏见。对于上述许多技术和高等医学领域,男性占主导地位,该算法将其视为成功的有力指标并加以利用(当它对过去的数据进行预测时,通过使用它,它得出了很好的准确性,这只会加强它)。
为什么这很重要?
出于任何伦理或道德原因,我们都不希望这种行为成为首要原因。这对数据科学的健康和地位也很重要,因为它的一个被吹捧的优势是,它将人从等式中移除,从而做出无偏见的卓越决策。然而,如果结果是我们在教它我们自己的偏见,并潜在地放大它们。
如果人们对机器学习失去信心,开始不信任它,那么整个领域的未来都会因此受损。
人比机器更能原谅人的错误。
你能做什么来阻止它?
你能做什么?这很大程度上取决于观察你的算法随着时间的推移表现如何(它是否正确工作?)并检查你得到的数据中可能包含的潜在偏见。你本质上追求的是一个代表性样本,不是老的有偏见的人口,而是你想要的人口。因此,举例来说,如果你看一下旧的录取数据,就会发现它明显偏向男性,因此,当时被录取的申请人中就有偏见。然而,对于未来,你不希望这样,所以历史数据需要纠正。
校正的基本方法是对有偏见的群体的数据进行加权,删除算法可能使用的特征(例如性别),或者您甚至可以对有偏见的群体进行降采样,以便获得相等的数量。也有一些更先进的方法,一些研究人员开发了保留性别信息但消除了偏差的方法。
拿走
数据是解决您的问题的正确数据吗?是否包含不良偏见?
然而,随着越来越多的地方提供伦理课程,机器学习带来了更多关于机器学习如果使用不当可能造成的损害的意识,以及关于如何纠正机器学习的建议,这并不完全是悲观的,但也有一些论点认为,即使有偏见的模型仍然可能比他们取代的有偏见的人更好,即使它仍然不可取。我将让你决定那一个。
数据雪崩及其对建筑环境的影响
大数据现象为设计师提供了利用该技术的巨大机会
Image by Author
在建筑演讲中,当我们谈论技术的到来时,我们经常会讨论它改变数字设计本质的潜力,以及建筑技术和智能系统。虽然这些流程正在被广泛开发和采用,但有一种全球现象正在进入这一领域,它有可能从根本上影响我们做出的设计和开发决策——大数据。AEC 公司,就像任何其他企业一样,在不久的将来可能会面临大量的数据(如果还没有的话)。如今,任何企业的价值都与其挖掘数据的能力息息相关。
“每个架构元素都将与数据驱动技术相关联。”—威尼斯双年展上的冉·库哈斯
计算设计和建筑信息建模已经取代了传统的 CAD,这实质上意味着加法逻辑被关联逻辑所取代。想象一下,在形状复杂且不平坦的场地上放置柱子的工作,在传统情况下,需要大量的点击和详细的手动属性,而在 BIM 环境中编写一个算法来完成这项任务只需几分钟。虽然这种升级使设计师的生活变得更加轻松,但计算的实际潜力只能通过决定性的逻辑(即模拟)来利用。这种在虚拟环境中用真实世界的数据进行各种模拟的创新从根本上改变了设计解决方案的构思方式。考虑建筑物的能源模型——它已经完全成为一个自己的领域。
现在,当我们谈论逻辑的时候——都是关于算法的思考。而这种进化需要越来越多的特定领域知识。现在,如果我们考虑用数据的方式来处理事情呢?是的,如果有具体数据可用,数据科学可以提供另一种做出决策的方法。在这个信息系统的智能网络时代,数据集可以方便地产生,这只是我们利用其潜力的能力问题。虽然这种方法不能完全取代算法的方式,但它打开了一个全新的并行机制,这就是数据驱动的设计。通常,影响设计决策的参数不能包含在传统的算法过程中。人类行为模式可能是一个很好的例子—想象一个工作场所配置,它是由简单回归或朴素贝叶斯模型驱动的,该模型基于一段时间内捕获的用户使用模式数据集或地理人口统计调查。客观地说,数据驱动设计揭示了一个全新的整体设计过程,它包含了许多复杂而重要的层面,使设计变得高效。
Source : Freepik.com
在过去几年中,建筑技术和管理在开始使用数据的方式上经历了巨大的转变。建筑师不再局限于只绘制图纸,客户需要用于设施管理的集成信息模型。
由此产生的数据集被转化为可流入简单应用程序的指标。这个过程不仅仅是将项目数字化或虚拟化,而是让我们能够将大量信息联系起来,这是理解项目价值如何随时间变化的有效方式。
建筑无人机&模块化现浇元件已经变得很常见。另一方面,物联网正在统治 conTech 行业。所有这些智能装置都成为了宝贵的数字建筑资产。价值如此之高,以至于这些建筑被设计用于集成建筑传感器网络。收集了所有这些数据后,数据科学再次在识别可能有利可图但人类感官不容易察觉的模式方面发挥了作用。
在城市层面,商业房地产技术正在见证众多连接土地所有者、买家和卖家的物流应用的发展。虽然这些应用程序并没有真正直接改善建筑环境,但令人兴奋的是通过将地理空间数据抽象为节点和网络而产生的数据和见解。这可能会转化为制图信息并生成 3d GIS 数据,从而为任何目的(城市规划或公共政策)提供灵活的模型。
最后,最后,任何架构项目都是不同领域专家的合作成果。我相信,建筑的大部分价值在于前期设计阶段。建筑工作室中的数据科学专业知识迟早会变得司空见惯,数据挖掘和可视化成为设计过程中不可或缺的一部分。这种多学科方法为伟大的高性能架构铺平了道路。
关于作者
从事人工智能产品和建筑技术的数据分析和决策科学专家。印度海得拉巴。
https://www.linkedin.com/in/sriharipramod/
密尔沃基犯罪数据驱动指南
我们调查了超过 600,000 起事件,揭示了美国最危险的城市之一的错综复杂的犯罪
Milwaukee at Night. Photo by Kayle Kaupanger
密尔沃基是威斯康星州最大的城市,也是哈雷戴维森汽车公司、密尔沃基艺术博物馆的所在地,并以其酿酒厂而闻名。但更重要的是,它因高犯罪率而臭名昭著。
密尔沃基已经被列为 T2 最危险的城市之一。犯罪分析网站指出,密尔沃基比美国 96%的–97%的 %更危险,比威斯康星州的 99% 更危险。
利用从 密尔沃基市开放数据门户 公开获得的 WIBR 犯罪数据,我捕获并评估了从 2005 年 3 月到 2018 年 12 月发生的 666,790 起被视为A 组犯罪的犯罪事件。据我所知,这项工作是第一次公开探索和分析这些信息。
这是一份全面的指南,其中包括:I)犯罪率与时间之间关系的详细评估,II)对在犯罪中使用的武器的评估,以及最后,III)展示城市中犯罪发生的地理空间分析。**
免责声明: 以下数据和数字代表被举报的罪行。根据皮尤研究中心的数据,大多数犯罪都没有向警方报案( 此处 )。因此,在解释结果时应该小心。
基于时间的可视化
当的罪行发生时
以下结果表明犯罪是在什么时候被报告的,而不是在什么时候发生的。犯罪发生的时间和报案的时间可能会有所不同,请在阅读时记住这一点。
每天下午 4:00 的犯罪报告高峰
根据密尔沃基 2005-2018 年(上文)按小时统计的总犯罪报告,凌晨 2:00 至 6:00 之间的犯罪率最低,这一时间许多人可能正在睡觉。早上 6:00-8:00,当许多人醒来时,我们看到犯罪报告迅速增加。犯罪报告在一天中持续上升,在下午 4 点达到最大值。
在按一天中的小时划分的犯罪类型中, 盗窃占早上 8:00 到下午 6:00 之间报告的大多数犯罪。针对刑事损坏、锁定车辆进入和车辆盗窃的犯罪报告具有相似的模式,报告中的峰值出现在上午 8:00。与其他犯罪模式在早上或中午达到高峰不同,攻击罪和抢劫的报案量在早上较低,在傍晚达到高峰。
上述数字表明,一周内犯罪报告略有变化。为了测试所报告的犯罪数量是否与一周中的某一天有关,对数据进行了单向方差分析(ANOVA)。测试得出的 p 值为 0.287,未超出预定义的显著性阈值(p< 0.05). Thus, )报告的犯罪数量与一周中的天 无关。
全年犯罪率
犯罪率随季节变化是众所周知的事实(此处阅读更多&此处)。此外,天气变化最大的地区在夏季也会经历与财产相关的犯罪的急剧增加。
然而,犯罪率的这些“季节性”变化似乎完全可以用社会互动来解释。因此,我们应该注意犯罪率的变化不太可能直接归因于天气或温度的变化。
*密尔沃基每月的总犯罪率(2006–2008)*显示了报告的犯罪总数与一年中的月份之间的密切关系。犯罪报告的低谷出现在二月,高峰出现在七月和八月。让我们了解一下个人犯罪是如何促成这一趋势的:
在《密尔沃基每月犯罪率》一书中,我们提出了个人犯罪在几个月内如何波动的想法。盗窃、伤害罪、刑事毁坏、入室盗窃、车辆盗窃、抢劫高峰在 7、8 月份,而锁车进入高峰在 9、10 月份。
为了检查每个月之间发生的犯罪率波动,这里有一个更精细的可视化:
How to Read the Figure: the columns and rows are grouped into months and years, respectively (see the top and right graph headings). The small individual columns labeled on the bottom of the graph each represents the day of the week. The individual rows labeled on the bottom of the graph represent the week of the month. Each small colored square represents a single day and is colored according to the total amount of crime reports made that day.
该热图可以直观显示每周和每天的趋势。7 月和 8 月的季节性犯罪高峰似乎是这两个月犯罪水平一致的结果,但 2014 年除外,该年的高峰出现在 7 月底和 8 月初。
几乎每个月的月最小值(最暗的紫色方块)都落在该月的第一周,这一趋势适用于 2005—2013 年的数据(未公布的结果)。
每月每天报告的犯罪总数证实了我们在上图中观察到的趋势,每月的低点通常出现在每月的第四天,紧随其后的是第二天。虽然犯罪报告变化很大,但通常会在一个月内增加。
犯罪率下降的趋势
犯罪报告总量在 2006 年达到高峰后不久就稳步下降。 与 2006 年的水平相比,2018 年报告的犯罪总数下降了近 40%。然而,这种趋势并非密尔沃基独有。根据皮尤研究中心的数据,自 20 世纪 90 年代初以来,美国的犯罪率一直在大幅下降。
在按犯罪类型分类的年度犯罪总数报告中,我们看到盗窃和 c 刑事伤害随着时间的推移明显稳步下降。相反,自 2006 年以来,攻击性犯罪的报告数量有所增加,当时的犯罪报告总数要高得多。尽管报告的犯罪总量有很大的变化,但性犯罪、纵火和凶杀案的数量在过去几年里保持不变。
基于武器的调查结果
武器使用
在本分析报告的 667,025 起犯罪中,有 277,580 起报告使用了武器。然而,在超过 100,000 个案例中,使用的武器被归类为“未知”。这就剩下大约 175,000 个已确认的武器使用案例需要分析。
为了按武器类型确定武器使用的普遍程度,915 种不同的“使用的武器”分类被压缩到类似的分组中,结果被过滤,产生 2005 年至 2018 年间 100 起或更多事件中使用的武器。
密尔沃基 2005 年至 2018 年犯罪中使用的武器总数显示 使用的前 3 种武器是“手”、“手枪”和“枪”。 为了调查与犯罪类型相关的武器使用情况,武器根据其在犯罪中的使用记录绘制成柱状图:
为了简明起见,只列入了在 1 000 起或更多事件中使用的武器。由于事件数量有限,用于杀人、锁车和偷车的武器不在列表中。
在按犯罪类型划分的武器使用中,攻击性犯罪,入室盗窃,性犯罪,盗窃中使用频率最高的武器是“手”。“手枪”一直是抢劫案中使用的主要武器,也是涉及武器的袭击案中使用第二多的武器。
A Milwaukee city street. Photo by Lucas Ludwig
可视化基于位置的数据
为了对犯罪进行地理空间分析,选择了 2018 年的密尔沃基犯罪数据,并清理了数据以移除缺失和不完整的位置值。这些数据随后被导出到德克萨斯州的地理服务公司,他们为这个项目捐赠了世界一流的地理编码服务。从 Texas A & M GeoServices 接收计算的纬度和经度坐标,并将结果与现有数据相结合。然后,基于位置(地理空间)的密尔沃基犯罪地图被创建。 注: 位置数据可能代表犯罪发生的地点或报案的地点。
识别犯罪‘热点’
为了开发我们对 2018 年发生许多犯罪的区域的直觉,创建了一个基于密度的地图,其中该区域被划分为半径为 0.5 英里(0.8047 公里)的六边形。每个六边形根据犯罪密度进行颜色编码,密度最低的区域为白色,密度最高的区域为紫色:
Density map of crime reported in Milwaukee in 2018. Note: not all data is visible. Click here to interact with the map and explore the full data set. Click here to interact with a 3-dimensional version of the map.
随着我们向市中心移动,犯罪率有上升的趋势。特别是,两个连续的高密度(紫色)区域非常突出,一个在城市中心的西北方向,另一个在中心的西南方向。
为了更好地显示犯罪类型的犯罪率,我们制作了一张地图,地图上的六边形根据各自区域内最常见的犯罪进行了着色:
Prevalence of Crime by Crime Type for Milwaukee in 2018. Hexagons are colored according to the crime that is most prevalent within it. Interact with the map here.
在上面的地图中,我们看到袭击罪是 2018 年密尔沃基最普遍的犯罪。我们还注意到,在城市的东部,密尔沃基港的上方和下方,上锁的车辆入口非常普遍。
识别基于位置的集群
为了识别基于位置的犯罪集群(分组),实施了监督机器学习算法:对点进行排序以识别集群结构(光学)。 OPTICS 是一种基于密度的聚类算法,允许我们准确识别聚类,即使道路、湖泊和街区等地理特征可能会影响犯罪发生的地点。阅读更多关于光学 这里 & 这里。
Points with low reachability distance (located in ‘valleys’) are identified and grouped together into clusters (represented by color).
在包含 1000 起或更多犯罪(minPts = 1000)的基础上搜索高密度区域,这些犯罪发生在彼此接近的可达性距离内(对比参数 xi = 0.0037)。
OPTICS 被设置为识别 1,000 个或更多犯罪发生的聚类。证明我们的聚类选择的可达性图和凸聚类壳图分别在上面和下面可用。
A summary of the cluster data’s spatial distribution.
最后,我们将聚类绘制到密尔沃基的地图上:
The results of OPTICS-defined clusters mapped to Milwaukee. Visit the interactive map here.
上图显示了 2018 年密尔沃基四个光学定义的犯罪集群。聚类 1 由暗淡的褐红色点组成,并且包含所分析的所有点。请注意,并非所有的点都可以从该图像中看到,因为该图像的重点是强调 3 个感兴趣的集群(红色、橙色和黄色),但是,通过此链接可以看到这些点(确保切换缩小)。
红色聚类表示发生了近 1,800 起犯罪的区域,橙色区域包含发生了超过 2,500 起犯罪的区域,黄色区域包含发生了约 5,100 起犯罪的区域(详见表 1)。
位置图标代表每个集群的近似中心。为了更好地了解这些中心点的位置,将中心点与本地标识符进行匹配,结果如表 1 所示。
表 1: 聚类,2018 年的犯罪事件数量,&代表聚类中心的本地标识符。要查看地图,点击这里的集群编号: 1 , 2 , 3 ,&4。
结论
这项分析研究了 2005 年至 2018 年间密尔沃基报告的 60 多万起犯罪。结果表明,有案可查的犯罪在过去 13 年中大幅下降,这主要是由于盗窃行为的减少。然而,尽管有这种趋势,关于攻击的报告一直在增加。从历史上看,犯罪率在每年的 2 月份最低,在 7 月和 8 月达到高峰。24 小时报告的犯罪趋势表明,上午 8:00 至下午 5:00 之间的水平较高,而没有观察到犯罪与星期几之间的关系。
地理空间分析将 2018 年犯罪数据映射到密尔沃基,并证明袭击是该市大多数地区最普遍的犯罪。最后, OPTICS 聚类确定了密尔沃基的三个高犯罪率地区,占 2018 年犯罪率的约 25%。
Milwaukee Skyline at Sunset. Photo Credit: Steve. Photo modified to fit the page.
致谢
衷心感谢 Charin Polpanumas 对他在数据科学方面的指导以及对这个项目的审查(点击查看他的杰出工作)。感谢德克萨斯州地理服务公司为该项目提供地理编码服务。
**连线:**加入脸书的美国数据科学
Github:https://github.com/jsolson4
**作者:**贾斯汀·奥尔森
数据驱动的运营模式
数据,尤其是机器学习通常被认为是解决所有商业挑战的灵丹妙药。随后,许多企业已经或正在建设必要的基础设施和人才,以兑现他们认为数据和机器学习可以提供的崇高承诺。这是正确的举措——毫无疑问,分析,无论是描述性的还是规范性的,都有能力彻底改变企业的动力和效率。不幸的是,许多公司都难以实现数据和机器学习所代表的崇高承诺。
正如我们大多数人所知,真正成功的数据科学或分析项目与业务成果密不可分,并跨越多个团队、组织和专业领域。构建模型或拼接数据本身很复杂,但通常是操作数据流或算法的“简单”部分,以便对业务产生真正的影响并推动战略向前发展。很少看到数据项目达到这种水平,正因为如此,许多数据项目被视为失败或被忽视。大型高科技公司也不能幸免于这一挑战。我亲眼目睹了世界上最大的技术公司之一的数据科学团队花费数年时间来完成一个模型,但无法以任何有效的方式将该模型有效地交付给最终客户。
数据操作的复杂性
我们如何解决这个问题?这个问题的最佳答案会让你相信这是由于人才短缺造成的,也就是说,如果我们有更多的专家或“合适的”专家来解决“数据”问题,我们就能解决它。这种策略是许多组织应对困难挑战时所采用的。在科学界,这种想法被称为“局部搜索”(爱泼斯坦, Range ,第 173 页— 在我之前的文章中提到)依赖单一知识领域的专家,他们利用最老套的方法来解决复杂的问题。虽然专业化绝对没有错,但在多个组织或整个公司中部署描述性和规范性分析的挑战跨越了多个业务知识领域、团队以及业务战略和财务、数据工程、数据科学和运营之间的交叉领域。有这么多的变量在起作用,“数据项目”的复杂性达到了令人眩晕的高度。著名的行为科学家丹尼尔·卡内曼帮助我们理解这种性质的问题是“邪恶的”卡尼曼将一个棘手的问题定义为“一个游戏规则经常不清楚或不完整的问题,可能有也可能没有重复的模式,它们可能不明显,反馈经常被延迟或不准确,或者两者兼而有之。”(Epstein, Range ,第 21 页)集成和部署数据驱动的解决方案和产品的挑战充满了各种障碍,这些障碍对于每个组织来说都是独一无二的,需要能够横向连接跨领域和业务部门的知识和专业技能。心理学家称之为“类比思维”,即“在多个领域或场景中识别概念相似性的实践,这些领域或场景表面上似乎没有什么共同点。”(爱泼斯坦,范围,第 103 页)
类比思维提供了一套工具,用于解决在整个组织范围内操作数据的挑战性任务。我在自己的工作中利用类比思维提出了一个解决这个问题的框架——我称之为数据驱动的运营模式。
数据驱动的运营模式
数据驱动的运营模式是一个构建流程和基础设施的框架,使公司能够有效地运营数据。我主要在营销组织的环境中使用这个框架,但是我相信这里的原则将广泛适用。数据驱动的运营模式的目标不是提供一个放之四海而皆准的解决方案,而是提供一个框架来创建您自己的计划,以组织您企业的人员、流程和数据基础架构,从而部署高效的描述性和规范性分析解决方案。该模型由 5 根支柱支撑:
- 客户智能
- 决策
- 交付
- 商业智能
- 数据翻译
五大支柱中的每一个都可以由一个团队或个人组成,遵循为该支柱设计的独特流程。下面,我将解释每一个支柱,该支柱中的团队或个人的责任,以及应该围绕它们设计的流程。(如果您不想阅读每一部分,请滚动到最后一段了解关键要点。)
客户智能
不要与商业智能相混淆,客户智能是一个存储库和流程(CDP、CRM 或手工制作),其中保存了客户的完整资料。这是为整个数据驱动模型提供动力的燃料。最终,客户是保持业务运营的关键,因此围绕客户知识组织一个团队,并以逻辑方式将这些知识结合起来,对于实现业务驱动的分析解决方案至关重要。
该团队或个人负责创建尽可能完整的客户形象。这意味着创建一个数据库、CDP 或 CRM(可能两者都有),它对您的整个客户群、他们在您的交付渠道中的行为集(稍后将详细介绍)以及将数据引入存储库的自动化或 ETL 的构建进行了有组织的细分。
这个团队负责从您的每个外联渠道获取和组织数据,通常由数据工程师、数据分析师和业务分析师组成。这包括您选择的 CDP/CRM 软件中的 Salesforce 分析师或专家。该团队不仅统一了客户数据流,而且对客户是谁、应该收集哪些客户数据以及为什么应该收集这些数据有着深刻的理解。在您的普通组织中,数据工程与 IT 坐在一起,并且经常与那些具有深厚客户知识的人分开。这些团队需要通力合作,为客户提供能够推动业务发展的行动和知识。
该团队使用数据翻译来获取和拼接数据,这些数据与公司的战略业务目标相一致,用于衡量和决策制定。该团队还对客户群进行特别分析,以回答客户活动和化妆品方面的业务问题。
决策
决策是围绕数据处理建立的团队和基础设施。这意味着算法和自动化进入外联渠道或商业智能,用于报告和决策。
该团队与客户智能和数据翻译合作,将业务目标合成为数据产品,推动公司目标向前发展,该团队由数据科学家、数据工程师和研究人员组成。
该团队通过数据翻译将业务问题和目标转化为数据产品,这意味着预测客户在营销或业务运营方面的行为,预测销售/库存/渠道,或者构建自动化以推动向客户或商业智能的交付。
交付
交付是用于操作预测模型和自动化的团队和基础设施,这些模型和自动化实现了去往客户或返回业务的各种活动集。
这个团队与决策和数据翻译一起工作,获取测试模型和自动化,并将其投入到适当渠道的生产中。这意味着将算法投入生产,用于电子邮件营销活动、网站个性化、客户体验、业务可视化或其他。这个团队由机器学习工程师和数据工程师组成。
商业智能
商业智能是为企业创建、维护和交付报告和仪表板的团队和基础设施。
该团队负责数据翻译和交付,以开发需要持续检查的报告和仪表板,例如营销活动绩效或高级管理业务摘要。该团队由数据工程师和分析师组成,他们专门负责构建和设计报表和数据自动化,以支持仪表盘、电子邮件、警报或销售、营销和产品团队可能需要的任何其他商业智能。
数据翻译
数据转换是数据驱动运营模式的基础,也是其他支柱正常运行的关键。如果只从这篇文章中拿一样东西的话,数据翻译概念是最重要的。
数据翻译团队负责将业务目标和策略翻译成技术数据项目。该团队与业务运营部门一起学习业务需求,并将这些需求转化为技术项目,然后将这些项目反馈给客户智能、业务智能和决策部门的各个小组。该团队由“数据翻译”组成,即精通业务的转换分析师、数据工程师或数据科学家,他们擅长将所有不同的部分结合在一起,以提供分析解决方案。最终,确保数据项目成功的任务落到了数据翻译人员的身上,他们需要跨多个业务部门来部署成功的解决方案。
这种模式与当今公司的做法有何不同?
数据驱动的运营模式的焦点是团队或个人(数据翻译人员),他们的责任和时间完全集中在连接业务战略、运营团队以及分析和数据团队之间的点,以释放数据可以为组织带来的全部潜力。
我主要观察了在大多数企业中部署分析的两种不同的组织模式:1)由数据科学家和分析师组成的中央数据团队与运营业务部门坐在一起并提供支持,或者 2)分别位于每个组织内的较小的分析团队。虽然这些模型可以提供一些价值,但它们缺乏将所有业务单位和业务战略横向连接到分析组织的刻意关注,而完整的组织模型需要这种关注。数据驱动的运营模式通过围绕业务活动(而非数据活动)组织数据和分析来解决这一问题,即了解客户、做出有关客户的决策、向客户交付产品以及做出有关业务的决策。数据翻译团队在这些团队和他们的业务运营对应方之间建立联系,从而实现全面的说明性和描述性分析的整体方法。
我如何将数据驱动的运营模式引入我的组织?
我在本文中介绍的框架并不完美,也没有解决每个公司的独特情况。我也不处理与团队重组相关的政治或结构性挑战。然而,我希望该模型能为您提供一个全新的视角,让您了解如何更有效地组织数据团队,从而提供更具影响力的数据解决方案。和所有的框架一样,我在这里介绍的只是一个指导方针,告诉你如何在你工作的地方实现积极的改变。为此,以下是关键要点:
- 如果可能的话,围绕业务活动而不是数据活动来组织不同的分析团队或团队成员。这意味着,与其拥有分散的数据工程、数据科学和分析师团队,不如将人员放在一起,共同更有效地实现业务目标或完成项目。当麻省理工学院研究员托马斯艾伦研究美国政府工程团队在太空竞赛中的效率时,他发现最成功的团队(那些完成最复杂项目的团队)有一个惊人的共同点;他们桌子的接近度(科伊尔,,文化代码,第 5 章)。我们与那些和我们工作关系密切的人交流得更多——从而带来更大的信任和更多的联系。显而易见,当我们之间没有墙(无论是组织上的,还是实际上的墙)时,我们会做更多的事情。
- 有人需要将业务单位和数据组织之间的点连接起来。无论是正式的“数据翻译”还是你团队中的某个人(或者你!)非常擅长将业务需求和战略转化为技术解决方案,这是绝对必要的。这个人或团队必须得到业务和技术团队的信任和重视,并像与数据组织一样与业务部门密切合作。
- 我们都可以花更多的时间做“类比思考”也就是说,在与我们专业领域完全不同的领域工作和思考。这样做会让我们更好地解决“邪恶”的问题,这些问题是我们大多数人从未见过的,模式不清楚,也没有明确的规则存在。正是这些类型的问题,如果得到解决,将对我们和我们工作的地方产生最大的影响。
数据驱动的派对:电影胡子
“电影胡子”背后的概念很简单,但却是革命性的。和朋友一起看电影,但在电视上留一两撇小胡子——只要小胡子和角色的上唇对齐,每个人都会喝酒。这个游戏对我来说是陌生的,直到几周前,当我观看亚当·桑德勒经典电影《T2 水兵》时才体验到。虽然看着每个角色都留着电视上的小胡子很令人惊讶,但与接下来的问题陈述相比,这就相形见绌了:*我们怎么才能把小胡子放在一起,最大限度地让大家一起喝酒呢?*和往常一样,这里看到的代码可以在 my GitHub 上完整查看。
The placement of this mustache was optimized for comedic effect
由于面部识别软件包的可用性,通过正确的方法,这个问题可以在不到一天的时间内得到解决。为了尽可能高效地解决我的问题陈述,我将其分解为几个简单的步骤:
- 找到一个预先训练的神经网络,找到人脸
- 使用模型返回的面部坐标,估计小胡子应该去哪里
- 使用电影数据获取频繁的小胡子位置
- 理智地想象这些位置
The red dot marks where MTCNN suggests a mustache should go
我使用的模型涉及多任务级联卷积神经网络,称为 MTCNN。我想特别感谢这篇文章包含了很多与包相关的语法,因为它几乎忽略了这一努力。MTCNN 非常有效地定位面部标志,并返回五个更有用的标志:左眼和右眼、左右嘴角和鼻子。用我自己的一张照片测试这个模型,我们可以看到它不能完美地检测到这些面部标志,但是对于这个项目来说,它足够好了。在左边的图片中,我用 MTCNN 在我的脸上画了一个边界框,并在模型输出我的鼻子、右嘴角和左嘴角的地方画了蓝点。我用红色标出了这三个点的质心,以估计小胡子应该去哪里,结果令我非常惊喜。
现在,我们已经用 MTCNN 在我的一张脸上做了概念验证,是时候扩大这个过程了。使用下面的代码,我让 MTCNN 观看了《T10》印第安纳·琼斯和《夺宝奇兵》,找到了小胡子应该去的地方。
#get_mustache takes the output from MTCNN and returns the #coordinates of the nose and mouth-corners centroid.detector = MTCNN()mustaches = []
for file in os.listdir(‘data/indiana_jones1/’):
image = cv2.imread(f’data/indiana_jones1/{file}’)
result = detector.detect_faces(image)
for face in result:
mustache_location = get_mustache(face)
mustaches.append(mustache_location)
我现在有了一个与第一部印第安纳·琼斯电影相关的(~9000)个胡须位置元组的列表,是时候可视化结果了。因为元组列表与我想到的可视化解决方案不兼容,所以必须进行一些轻微的清理:
x = []
y = []
for location in mustaches:
x.append(location[0]/2880)
y.append((1800-location[1])/1880)
我使用的 y 值是 1800 减去 y 坐标,因为(0,0)表示图像的左上方,但我需要(0,0)表示图像的左下方,图像是 2880x1800。然后我把它们缩小到小数,这样坐标值就可以成为任何电视或屏幕上可用的分数。
A kde plot of frequent mustache coordinates
在这个游戏中,我用来最大化饮酒量的表示是一个核密度估计器(KD)和一个 2D hexplot。kde 图就像一张地形图,显示了所测量的所有事件的密度。在这种情况下,它显示了小胡子出现概率最高的区域。在轴上,分别有胡子的 x 和 y 坐标的平滑分布。这些轴按屏幕比例缩放,因此(0.5,0.5)的值将是屏幕中心的一个点。我非常喜欢这种可视化,因为它简单易懂,但也有缺点。首先也是最重要的一点,它只显示了一个高密度的区域,所以如果我们玩的游戏有一个以上的胡子,这种可视化显然是有限的。这种可视化的另一个主要缺陷是它有多模糊。地形风格的层是很好地看到收敛在一个点上,但最暗的层是令人失望的大。使用不同的可视化,我们应该能够看到胡子应该去哪里。
Hexplot of frequent mustache locations
使用 hexplot,解决了 kde plot 的两个缺点。此处显示的六边形图就像一个 2D 直方图,准确地显示了胡须最常出现的位置。该图的 x 轴和 y 轴显示了 KD 图轴上表示的不平滑直方图,更精确地表示了每个维度中的数据。hexplot 还显示了小胡子与脸对齐的每个位置,这意味着如果我们不想最大化所喝的饮料,我们仍然可以将小胡子放在它们偶尔会与脸对齐的合理位置。
如果规则是在小胡子排成一行的时候喝酒,这里描述的方法有助于让电影小胡子之夜更有侵略性,但是如果规则是每个小胡子只能喝一杯,我们可能需要考虑一个稍微不同的方法。要在这个新的方向上采用基于算法的方法,只需跟踪先前的小胡子位置,并在将坐标添加到列表之前确保每个后续坐标对都在预定距离阈值之外,从而从我们的数据集中移除重复的移动。诚然,我没有运用这一逻辑,但我假设这不会对最终结果产生太大影响。
我欢迎对这些方法的任何改进,也欢迎对数据科学工具包的其他有趣应用提出你想看到的建议——请在下面留下评论!
机器学习的数据结构。第一部分。
语义和数据结构的新进展如何帮助我们更好地进行机器学习。还有,机器学习的新定义。这里是关于深度学习的 1-b 部分。
Image by Héizel Vázquez
点击此处阅读第 1-b 部分:关于数据结构的深度学习:
[## 机器学习的数据结构。第 1-b 部分:图上的深度学习。
图形的深度学习日益重要。在这里,我将展示思考机器的基础…
towardsdatascience.com](/the-data-fabric-for-machine-learning-part-1-b-deep-learning-on-graphs-309316774fe7)
介绍
如果你在网上搜索机器学习,你会找到大约 2,050,000,000 个结果。是啊,真的。找到适合每一种用途或情况的描述或定义并不容易,但还是有令人惊讶的。在这里,我将提出一个不同的机器学习定义,专注于一个新的范式,即数据结构。
目标
一般
解释数据结构与机器学习的联系。
细节
- 描述数据结构和创建数据结构的生态系统。
- 用几句话解释一下什么是机器学习。
- 提出一种在数据结构内部可视化机器学习洞察的方法。
主要理论
如果我们能够构建一个支持公司所有数据的数据结构,那么其中的业务 洞察可以被认为是 it 中的凹痕。发现洞察力是什么的自动过程,它被称为机器学习。
第一节。什么是数据结构?
我在之前已经谈到过数据结构,并且给出了它的定义(下面我将再次把它放在这里)。
当我们谈到数据结构时,有几个词我们应该提到:图、知识图、本体、语义、关联数据。如果你想要这些定义,请阅读上面的文章;然后我们可以说:
数据结构是支持公司所有数据的平台。它是如何被管理、描述、组合和普遍访问的。该平台由企业知识图构成,以创建统一的数据环境。
让我们把这个定义分成几部分。我们首先需要的是一个知识图。
知识图由数据和信息的集成集合组成,其中还包含不同数据之间的大量链接。这里的关键是,在这个新模型下,我们不是在寻找可能的答案,而是在寻找答案。我们想要事实——这些事实从何而来并不重要。这里的数据可以代表概念、物体、事物、人,实际上是你脑海中的任何东西。图表填充了概念之间的关系和联系。
知识图表还允许您为图表中的关系创建结构。有了它,就有可能建立一个框架来研究数据及其与其他数据的关系(还记得本体论吗?)。
在这种情况下,我们可以向我们的数据湖提出这个问题:
这里存在什么?
数据湖的概念也很重要,因为我们需要一个存储数据、管理数据和运行工作的地方。但我们需要一个智能数据湖,一个了解我们拥有什么以及如何使用它的地方,这是拥有数据结构的好处之一。
数据结构应该是一致和统一的,这意味着我们应该努力将组织中的所有数据组织在一个地方,并真正管理和控制它。
第二节。什么是机器学习?
http://www.cognub.com/index.php/cognitive-platform/
机器学习已经存在一段时间了。有很多关于它的描述、书籍、文章和博客,所以我不会用 10 个段落来烦你。
我只想把几点说清楚。
机器学习不是魔法。
机器学习是数据科学工作流程的一部分。但这并不是结束。
机器学习需要数据才能存在。至少现在是这样。
好了,接下来,让我给机器学习一个借用的个性化定义:
机器学习是理解数据中的模式和一些数据表示的自动过程,通过使用能够提取这些模式而无需专门编程的算法来创建解决特定(或多个)问题的模型。
你可以同意这个定义,也可以不同意,现在文献中有很多很好的定义,我只是认为这个定义很简单,对我想表达的东西很有用。
第三节。在数据结构中进行机器学习
在爱因斯坦引力理论(广义相对论)中,他从数学上提出质量可以使时空变形,这种变形就是我们所理解的引力。我知道如果你不熟悉这个理论,听起来会很奇怪。让我试着解释一下。
在没有引力的狭义相对论的“平坦”时空里,力学定律呈现出一种特别简单的形式:只要没有外力作用在物体上,它就会在时空里做直线运动:沿直线路径匀速运动(牛顿力学第一定律)。
但是当我们有质量和加速度时,我们可以说我们在重力的存在下。就像惠勒说的:
时空告诉物质如何运动;物质告诉时空如何弯曲。
在上面的图像中,“立方体”是时空结构的代表,当质量在其中移动时,它会使其变形,“线”移动的方式会告诉我们一个附近的物体在接近那个物体时会如何表现。所以重力就像是:
所以当我们有质量时,我们可以在时空中制造一个“凹痕”,之后当我们靠近那个凹痕时,我们看到的就是重力。我们必须离物体足够近才能感受到它。
这正是我提出的机器学习在数据结构中的作用。我知道我听起来很疯狂。让我解释一下。
假设我们已经创建了一个数据结构。对我来说,最好的工具是我在其他文章中提到的 Anzo。
https://www.cambridgesemantics.com/
你可以用 Anzo 建立一个叫做“企业知识图”的东西,当然也可以创建你的数据结构。
图中的节点和边灵活地捕捉了每个数据源的高分辨率孪生数据—结构化的或非结构化的。该图表可以帮助用户快速、互动地回答任何问题,允许用户与数据对话以揭示洞察力。
顺便说一句,这是我如何描绘一个洞察力:
Image by Héizel Vázquez
如果我们有数据结构:
Image by Héizel Vázquez
我的建议是,一个洞见可以被认为是其中的一个凹痕。发现这种洞察力是什么的自动过程,就是机器学习。
Image by Héizel Vázquez
所以现在我们可以说:
机器学习是通过使用算法发现数据结构中隐藏的见解的自动过程,这些算法能够在没有专门编程的情况下找到这些见解,以创建解决特定(或多个)问题的模型。
通过结构生成的洞察本身是新数据,作为结构的一部分变得显式/明显。也就是说,洞察力可以扩大图表,潜在地产生进一步的洞察力。
在数据结构中,我们遇到了一个问题,试图找到数据中隐藏的见解,然后使用机器学习我们可以发现它们。这在现实生活中会是什么样子?
剑桥语义的人也有 Anzo 的答案。Anzo for Machine Learning 解决方案用一个现代数据平台取代了这种繁琐、容易出错的工作,该平台旨在快速集成、协调和转换来自所有相关数据源的数据,使其成为优化的机器学习就绪的要素数据集。
数据结构提供了快速有效的功能工程所必需的高级数据转换功能,有助于将关键业务信号与无关噪声分离开来。
请记住,数据第一,这种新模式使用内置的图形数据库和语义数据层来集成和协调所有相关的数据源,包括结构化和非结构化数据。数据结构传达了数据的业务上下文和含义,使业务用户更容易理解和正确利用。
再现性对于数据科学和机器学习来说非常重要,因此我们需要一种简单的方法,通过管理数据集的目录以及数据集成的持续方面(如数据质量处理)来重用协调的结构化和非结构化数据,这就是数据结构所提供的。它还保留了组成机器学习数据集的数据的端到端血统和出处,以便在生产中使用模型时,很容易发现需要什么数据转换。
在接下来的文章中,我将给出一个具体的例子来说明如何在这个新的框架中进行机器学习。
结论
机器学习并不新鲜,但有一个新的范式来做它,也许它是该领域的未来(我多么乐观)。在数据结构内部,我们有了新的概念,如本体、语义、层、知识图等;但所有这些都可以改善我们思考和进行机器学习的方式。
在这种范式中,我们通过使用算法来发现数据结构中隐藏的见解,这些算法能够找到这些见解,而无需为此专门编程,从而创建解决特定(或多个)问题的模型。
感谢科学与数据团队对本文的帮助。
也感谢你阅读这篇文章。希望你在这里发现了一些有趣的东西:)。如果这些文章对你有帮助,请与你的朋友分享!
如果您有任何问题,请在 Twitter 上关注我:
Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…
twitter.com](https://twitter.com/faviovaz)
和 LinkedIn:
[## favio vázquez——science ia y Datos | LinkedIn 创始人
查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 16 个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/faviovazquez/)
那里见:)
机器学习的数据结构。第 1-b 部分:图上的深度学习。
图形的深度学习日益重要。在这里,我将通过库 Spektral 和平台 MatrixDS 展示在图上思考机器学习和深度学习的基础知识。第一部分这里。
声明:这不是第二部分的过去的文章的主题;这是第一部分的延续,强调深度学习。
介绍
我们正在定义一种新的机器学习方式,专注于一种新的范式,即数据结构。
在过去的文章中,我给出了我对机器学习的新定义:
机器学习是通过使用算法发现数据结构中隐藏的见解的自动过程,这些算法能够在没有专门编程的情况下找到这些见解,以创建解决特定(或多个)问题的模型。
理解这一点的前提是我们已经创建了一个数据结构。对我来说,最好的工具就是我在其他文章中提到的 Anzo。
https://www.cambridgesemantics.com/
你可以用 Anzo 建立一个叫做“企业知识图”的东西,当然也可以创建你的数据结构。
但是现在我想把重点放在机器学习内部的一个话题,深度学习。在的另一篇文章中,我给出了深度学习的定义:
深度学习是机器学习的一个特定子领域,是从数据中学习表示的一种新方式,它强调学习越来越有意义的表示的连续**“层**【神经网络】。
在这里,我们将讨论深度学习和图论的结合,并看看它如何帮助我们的研究向前发展。
目标
一般
为在数据结构上进行深度学习奠定基础。
细节
- 在图上描述深度学习的基础。
- 探索图书馆的特色。
- 验证在数据结构上进行深度学习的可能性。
主要假设
如果我们可以构建一个支持公司所有数据的数据结构,那么通过使用神经网络(深度学习)从数据中学习越来越有意义的表示来发现见解的自动过程就可以在数据结构内部运行。
第一节。关于图的深度学习?
https://tkipf.github.io/graph-convolutional-networks/
通常我们使用张量来创建神经网络,但是记住我们也可以用矩阵来定义张量,并且图可以通过矩阵来定义。
在库speck tral的文档中,他们声明一个图通常由三个矩阵表示:
- A∈{0,1}^(N×N): a 二元邻接矩阵,其中如果节点 i 和 j 之间有连接,A_ ij =1,否则 a _ij= 0;
- X∈ℝ^(N×F):编码节点属性(或特征)的矩阵,其中 FF 维属性向量与每个节点相关联;
- E∈ℝ^(N×N×S):一个编码边属性的矩阵,其中一个 S 维属性向量与每个边相关联。
我不会在这里详细介绍,但如果你想更全面地了解图形深度学习,请查看 Tobias Skovgaard Jepsen 的文章:
第 1 部分:图卷积网络的高级介绍
towardsdatascience.com](/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-7d2250723780)
这里重要的部分是图形神经网络(GNN)的概念。
图形神经网络(GNN)
https://arxiv.org/pdf/1812.04202.pdf
GNN 的思路很简单:对图的结构信息进行编码,每个节点 v_ i 可以用一个低维状态向量 s_ i ,1 ≤ i ≤ N 来表示(记住向量可以认为是秩 1 的张量,张量可以用矩阵来表示)。
学习图上的深度模型的任务可以大致分为两个领域:
- **以节点为中心的任务:**任务与图中的单个节点相关联。例子包括节点分类、链接预测和节点推荐。
- **以图形为中心的任务:**任务与整个图形相关联。示例包括图形分类、估计图形的某些属性或生成图形。
第二节。使用 Spektral 进行深度学习
https://github.com/danielegrattarola/spektral/
作者将 Spektral 定义为一个关系表示学习的框架,用 Python 构建,基于 Keras API。
装置
我们将使用 MatrixDS 作为运行我们代码的工具。请记住,在 Anzo 中,你也可以带着这段代码在那里运行。
您需要做的第一件事是派生 MatrixDS 项目:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c6ae7c8c1b06ba1e18f2a6e/files)
点击:
您将已经安装了库,并且一切都正常工作:)。
如果你在外面运行这个,记住这个框架是为 Ubuntu 16.04 和 18.04 测试的,你应该安装:
sudo apt install graphviz libgraphviz-dev libcgraph6
然后使用以下内容安装该库:
pip install spektral
数据表示法
在 Spektral 中,一些层和函数被实现为在单个图形上工作,而其他层和函数则考虑图形的集合(即数据集或批次)。
该框架区分三种主要操作模式:
- 单个,这里我们考虑一个单个的图,以及它的拓扑和属性;
- batch ,这里我们考虑一个图的集合,每个图都有自己的拓扑和属性;
- 混合,这里我们考虑一个具有固定拓扑的图,但是是不同属性的集合;这可以被视为批处理模式的一种特殊情况(即,所有邻接矩阵都相同的情况),但是出于计算原因而被分开处理。
例如,如果我们跑
from spektral.datasets import citation
adj, node_features, edge_features, _, _, _, _, _ = citation.load_data('cora')
我们将以单一模式加载数据:
我们的邻接矩阵是:
In [3]: adj.shape
Out[3]: (2708, 2708)
出音符属性包括:
In [3]: node_attributes.shape
Out[3]: (2708, 2708)
我们的优势是:
In [3]: edge_attributes.shape
Out[3]: (2708, 7)
基于图关注层的半监督分类
声明:我假设你从这里知道 Keras。
有关更多详细信息和代码视图:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c6ae7c8c1b06ba1e18f2a6e/files)
GAT 是一种新颖的神经网络体系结构,利用掩蔽的自注意层对图结构数据进行操作。在 Spektral 中, GraphAttention 层计算类似于layers.GraphConv
的卷积,但是使用 Attention 机制对邻接矩阵进行加权,而不是使用归一化拉普拉斯算子。
它们的工作方式是通过堆叠层,其中节点能够关注其邻域的特征,这使得能够(隐式地)为邻域中的不同节点指定不同的权重,而不需要任何代价高昂的矩阵运算(如求逆),也不依赖于预先知道的图结构。
https://arxiv.org/pdf/1812.04202.pdf. The attention mechanism employed by the model, parametrized by a weight vector, applying a LeakyReLU activation.
我们将使用的模型非常简单:
# Layers
dropout_1 = Dropout(dropout_rate)(X_in)
graph_attention_1 = GraphAttention(gat_channels,
attn_heads=n_attn_heads,
attn_heads_reduction='concat',
dropout_rate=dropout_rate,
activation='elu',
kernel_regularizer=l2(l2_reg),
attn_kernel_regularizer=l2(l2_reg))([dropout_1, A_in])
dropout_2 = Dropout(dropout_rate)(graph_attention_1)
graph_attention_2 = GraphAttention(n_classes,
attn_heads=1,
attn_heads_reduction='average',
dropout_rate=dropout_rate,
activation='softmax',
kernel_regularizer=l2(l2_reg),
attn_kernel_regularizer=l2(l2_reg))([dropout_2, A_in])# Build model
model = Model(inputs=[X_in, A_in], outputs=graph_attention_2)
optimizer = Adam(lr=learning_rate)
model.compile(optimizer=optimizer,
loss='categorical_crossentropy',
weighted_metrics=['acc'])
model.summary()# Callbacks
es_callback = EarlyStopping(monitor='val_weighted_acc', patience=es_patience)
tb_callback = TensorBoard(log_dir=log_dir, batch_size=N)
mc_callback = ModelCheckpoint(log_dir + 'best_model.h5',
monitor='val_weighted_acc',
save_best_only=True,
save_weights_only=True)
顺便说一句,模型很大:
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 1433) 0
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 1433) 0 input_1[0][0]
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 2708) 0
__________________________________________________________________________________________________
graph_attention_1 (GraphAttenti (None, 64) 91904 dropout_1[0][0]
input_2[0][0]
__________________________________________________________________________________________________
dropout_18 (Dropout) (None, 64) 0 graph_attention_1[0][0]
__________________________________________________________________________________________________
graph_attention_2 (GraphAttenti (None, 7) 469 dropout_18[0][0]
input_2[0][0]
==================================================================================================
Total params: 92,373
Trainable params: 92,373
Non-trainable params: 0
因此,如果你没有那么多的力量,就减少使用它的次数。请记住,升级您的 MatrixDS 帐户非常容易。
然后我们训练它(如果你没有足够的电力,这可能需要几个小时):
# Train model
validation_data = ([node_features, adj], y_val, val_mask)
model.fit([node_features, adj],
y_train,
sample_weight=train_mask,
epochs=epochs,
batch_size=N,
validation_data=validation_data,
shuffle=False, # Shuffling data means shuffling the whole graph
callbacks=[es_callback, tb_callback, mc_callback])
获得最佳型号:
model.load_weights(log_dir + 'best_model.h5')
并对其进行评估:
print('Evaluating model.')
eval_results = model.evaluate([node_features, adj],
y_test,
sample_weight=test_mask,
batch_size=N)
print('Done.\n'
'Test loss: {}\n'
'Test accuracy: {}'.format(*eval_results))
在 MatrixDS 项目中查看更多信息:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c6ae7c8c1b06ba1e18f2a6e/files)
第三节。这在数据结构中处于什么位置?
如果您还记得上一部分,如果我们有一个数据结构:
洞察力可以被认为是其中的一个凹痕:
如果您在 MatrixDS 平台上阅读本教程,您会意识到我们使用的数据不是简单的 CS,但是我们为库提供了:
- 一个 N 乘 N 邻接矩阵(N 是节点数),
- N 乘 D 特征矩阵(D 是每个节点的特征数量),以及
- 一个 N 乘 E 的二进制标签矩阵(E 是类的数量)。
存储的是一系列文件:
ind.dataset_str.x => the feature vectors of the training instances as scipy.sparse.csr.csr_matrix object; ind.dataset_str.tx => the feature vectors of the test instances as scipy.sparse.csr.csr_matrix object; ind.dataset_str.allx => the feature vectors of both labeled and unlabeled training instances (a superset of ind.dataset_str.x) as scipy.sparse.csr.csr_matrix object; ind.dataset_str.y => the one-hot labels of the labeled training instances as numpy.ndarray object; ind.dataset_str.ty => the one-hot labels of the test instances as numpy.ndarray object; ind.dataset_str.ally => the labels for instances in ind.dataset_str.allx as numpy.ndarray object; ind.dataset_str.graph => a dict in the format {index: [index_of_neighbor_nodes]} as collections.defaultdict object; ind.dataset_str.test.index => the indices of test instances in graph, for the inductive setting as list object.
所以这些数据存在于图表中。我们所做的就是将数据加载到库中。实际上,您可以在库中将数据转换为 NetworkX、numpy 和 sdf 格式。
这意味着,如果我们将数据存储在一个数据结构中,我们就有了我们的知识图,所以我们已经有了许多这些特征,我们所拥有的是找到一种将它与库连接起来的方法。这是现在最棘手的部分。
然后,我们可以通过对数据结构中的图表运行深度学习算法,开始在数据结构中寻找见解。
有趣的是,在图表本身中可能有运行这些算法的方法,为此我们需要能够利用图表结构中固有的存储数据来构建模型, Lauren Shin 在 Neo4j 中有一个非常有趣的方法:
同样的 neo4j 线性回归程序,现在自变量无限!更多功能,无需额外…
towardsdatascience.com](/graphs-and-ml-multiple-linear-regression-c6920a1f2e70)
但这也是一项正在进行的工作。我想象这个过程是这样的:
这意味着神经网络可以生活在数据结构中,算法将与其中的资源一起运行。
有一件重要的事情我在这里甚至没有提到,那就是非欧几里德数据的概念,但是我稍后会讲到。
结论
如果我们可以将知识图与 Spektral(或其他)库连接起来,通过为我们拥有的图形数据部署图形神经网络模型,就有可能在数据结构上运行深度学习算法。
除了节点或图分类等标准的图推理任务,基于图的深度学习方法还被应用于广泛的学科领域,如建模社会影响、推荐系统、化学、物理、疾病或药物预测、自然语言处理(NLP)、计算机视觉、交通预测、程序归纳和解决基于图的 NP 问题。见https://arxiv.org/pdf/1812.04202.pdf。
应用是无止境的,这是一个新时代的开始。敬请关注更多:)