寻找食物的模式
继续上一篇关于食物和营养的文章,今天我想找到与不同季节、节日和主题相关的常见食材。
为了做到这一点,我对 Epicurious recipe 数据应用了关联规则,以基于 3 个度量来找到相关的项目集:它们出现得相对频繁(支持),一个项目经常与另一个项目一起出现(置信度),以及它们出现得比偶然更频繁(提升)。
food associated with different seasons
在矩阵视图中,关联子集被分组。我们看到季节性产品,如春天的芦笋,秋天的红薯,还有季节性饮料,如冬天的热饮。
food associated with major festivals
就节日食物而言,在一个简洁的视图中,它显示了从新年前夜的香槟、7 月 4 日的后院烧烤到圣诞节的可食用礼物等各种食物。
这方面的一个用例是,食谱网站可以将他们的季节性食谱与谷歌搜索食品趋势进行比较,以了解用户的新需求。
当放大一个节日时,人们可以观察到更多细节。
然后,我们还可以了解与某种食物相关的配料和饮食,如快餐和便餐:
A salad/couscous kinda mood
开胃菜:
some cheese, some tomato, some seafood
甜点:
all the sweet things
此外,由于双重标记的性质(一个配方同时标记一个项目及其父项目,如果有的话),我们实际上可以使用它来分组标签,达到类似的聚类效果:
这是我关于数据科学和视觉故事的# 100 日项目的第 55 天。我的 github 上的全部代码。感谢阅读。欢迎新主题的建议和反馈。
在命令行中查找 2017 年美国大学排名中的学院百分比(第二部分 grep 和 wc)
Image adopted from the unsplash.com
各位编码员好!欢迎回到我的系列课程数据科学@ Bash Shell 。在上一课中,我们学习了如何预览数据集( unirank.csv )。您应该从下面的网页下载数据,因为我们已经稍微简化了数据,让我们将数据保存为:unirank.csv
wget https://www.scientificprogramming.io/datasets/unirank.csv
数据集预览
现在让我们进行我们的第一个分析:要列出数据文件中包含短语**“college”**的所有行,我们需要向您介绍命令grep
(全局正则表达式打印)。简而言之,grep
允许您浏览文件中的所有行,但只输出那些匹配模式的行。在我们的例子中,我们希望找到数据集中包含“college”的所有行。
我们是这样做的:
$ grep -i "college" unirank.csv | csvlook
这里,grep 命令有两个命令行参数:第一个是模式,第二个是我们要在其中搜索该模式的文件。如果运行此命令,您应该会看到一些包含字符串“college”的行:
Institutes containing “colleges” in the unirank.csv data set
请注意,我们已经设置了-i
选项,使匹配案例变得不敏感。还有,发现逻辑误将两所大学认定为学院!因为他们的名字包含字符串(“学院”)。因此,在数据分析中使用grep
时,尤其是在做出决定之前,你需要小心谨慎!
找到大学的百分比
对于这一步,我们需要引入管道的概念,这是 Bash shell 中最强大的特性之一。管道用竖线符号(|
)表示。本质上,管道允许您将一个命令的输出转发到另一个命令的输入,而不必将中间输出保存到文件中。
我们想把grep
的输出给另一个命令,它可以告诉我们这个输出有多少行。事实证明,有一个命令可以让我们做到这一点:wc
代表单词计数,用于计算给定输入中有多少单词,但最常用的是与-l
选项一起使用,它将计算输入中的行数。所以让我们从计算unirank.csv
文件中总共有多少行开始:
$ wc -l unirank.csv232 unirank.csv
现在我们来数一下学院的数量,让我们用管道把我们所学的东西集合起来:
$ grep -i "college" unirank.csv | wc -l8
grep 的输出——文件中包含“学院”的行——被传递给wc -l
,它将计算文件中的行数。注意,我们没有在wc -l
命令中指定文件名;我们不需要这么做,因为我们通过管道将数据传输到wc -l
,所以它不需要从文件中读取数据。
所以在这个数据集中,((8-2)/232) x 100% = 2.5%
institutes 来自美国高校。我们仔细地扣除了两个错误识别的学院。 下集再见 ⏰!
[这个项目是‘学习 Bash Shell 和 Linux 中的数据’课程的一部分。]
描述 Bash 可能不是处理所有类型数据的最佳方式,但是经常会出现这样的情况
科学编程](https://school.scientificprogramming.io/course/learn-practical-data-science-with-bash-shell/2?/learn-bash/)
寻找纽约时报畅销书的趋势
每个作家都梦想全职写作,但可悲的事实是,大多数作家挣的钱都不够养活自己,更不用说养家了。如果你登上了《纽约时报》畅销书排行榜,你将写作作为职业的机会将会更高,尤其是如果它在排行榜上停留了许多周,因为《纽约时报》畅销书排行榜与图书销售密切相关。那么,有什么诀窍可以让这一切发生吗?我对《纽约时报》2008 年至 2016 年的畅销书排行榜做了一些分析,看看我是否能找到任何重要的趋势。
选择类别/流派
如下图所示,悬疑/惊悚小说和普通小说在畅销书排行榜中所占的比例一直高于其他任何类别。请注意,这并不意味着这些类别的书一定更有可能成为畅销书,但是确实表明这些类别比其他类别卖得更好,因此这些类别的书有更大的机会成为畅销书。
一般小说是相当广泛的,但包括任何小说,不能被归类到任何其他子类。这可能意味着生活片,文学,和其他一般的小说。它也被称为主流小说。
性别差距?
畅销书排行榜显示,男性和女性接近分榜。合著的书肯定不那么普遍了,但仍然占据了很大的比例,尽管其中一个合著者通常已经是畅销书了。名单上的大多数书只有一个作者。
赢家拿走大部分产业
詹姆斯·帕特森以他的名字出现 408 次而雄踞榜首。这包括他和别人合著的书。他的第一本书出版于 1976 年,直到 1993 年,他的第八部小说才登上畅销书排行榜。他现在是纽约时报畅销书排行榜上书籍最多的吉尼斯世界纪录保持者。
约翰·格里森姆在 1989 年出版了他的第一部小说,但是是他在 1991 年出版的第二部小说让他登上了畅销书排行榜。
这些排名前 20 位的作者占据了畅销书排行榜的 29%,而在分析的 8 年时间跨度中,610 位作者占据了另外的 71%。一个作者出现在榜单上的平均时间是 13 周,中位数是 5 周。大多数作者只在名单上呆了一周。
什么书最受欢迎?
另一方面,这些是最常出现在清单上的书。《帮助》是凯瑟琳·斯托克特第一部也是唯一一部出版的小说,《所有我们看不见的光》是安东尼·杜尔第二部出版的小说。两者都可以归类为一般小说,以历史为题材。
一本书在榜单上停留的平均周数是 5 周,中位数是 3 周。和作者一样,大多数书只能在榜单上停留 1 周。
书名的趋势
假设你已经写完了你的小说,和一个出版商签了一本书,现在正为封面和书名而紧张。某些书名比其他的表现好吗?
起始词
清单上的大多数书都不是以“A/An”或“the”开头,但根据你写作的体裁,“The”通常是标题中的第一个词(参见动作/冒险或宗教小说)。
起始词真的有影响吗?一些出版商强调要让书名“谷歌化”。人们很容易找到你的书吗?
使用“A”或“The”可能会对图书在图书馆或实体店中按字母顺序的位置造成一些混乱,或者可能会抑制人们对标题的本能反应。(作者的假设。)
使用“of”
另一组要看的是使用介词" of “的书,以及有多少书的书名后面有一个” the "。如下所示,列表中的大多数书都没有使用介词,即使使用了,也不会经常使用“the”。
结论
如果一本书上了畅销书排行榜,它很可能是一个作者写的悬疑/惊悚或普通小说。标题可能不会以“A”或“The”开头,也不会包含“of”。
即使你的书登上了榜单,也很可能只会停留 3 到 5 周,而且在这 8 年的时间跨度中,大多数作者总共只会在榜单上停留 5 周,尽管每位作者在榜单上的平均周数被那些似乎一直生活在榜首的名人向上倾斜了。
不幸的是,用于这种分析的数据不包括一本书写得有多好,它是如何营销的,或许多其他因素,这些因素无疑对图书销售非常重要。Erica Verillo 在她的帖子中说得很好
归根结底,最成功的作家遵循了自己的想法、灵感和灵感。
但是,如果你有选择,选择一个喜欢惊悚片或主流小说的缪斯。
用神经网络寻找川普
当总统发微博时,我们怎么知道谁是真正的键盘后面的人?有了训练有素的神经网络,我们也许能找到答案。
在 2018 年 3 月之前,唐纳德·特朗普(Donald Trump)在担任总统期间曾使用未经授权的个人安卓手机。虽然这让他的工作人员感到焦虑,但对于记者和研究人员来说,这对于区分总统本人的话和白宫工作人员的话特别有用。有了 Twitter 的 API——Twitter 为任何想要利用其数据的人提供的网关——提供每条推文的“来源”信息,就可以合理地假设,如果“来源”是 Android,那就是纯特朗普。
然而,正如你从下面的图表中看到的,该图表按照推文频率(y 轴)绘制了推文的月份(x 轴),在 2017 年 3 月左右,Android 的活跃度下降,iPhone 的活跃度上升。
Chart showing Tweet activity for “@realDonaldTrump@ split by source.
正如白宫社交媒体主任小丹·斯卡维诺(Dan Scavino Jr .)透露的那样,特朗普已经在 3 月中旬搬到了 iPhone。媒体猜测这一变化是出于安全考虑,个人机器人规避了白宫的机构管理。虽然对白宫工作人员来说是好事,但(不)预期的后果也意味着特朗普本人写的推文现在与他的工作人员在 POTUS 账户上写的推文混在一起。由于 Twitter 已经成为白宫沟通的一个关键组成部分,加上美国总统任期内的异常事态,能够区分总统本人和他的工作人员的推文变得相当重要。输入计算解!—一个经过训练的神经网络,可以仅通过推文文本识别特朗普创作的推文。
在我们开始之前…
首先,应该指出的是,这种建模纯粹是一种练习。我喜欢技术转移和学习新技能的借口。有时候,这些借口会变成我学生的完整论文和新课程,但通常它们会被卡在一个数字抽屉里。类似的练习已经使用其他机器学习技术完成了,我鼓励任何感兴趣的人去阅读关于它的。
然而,对于这个特定的项目,我将看看我们是否可以训练一个神经网络,纯粹通过推文的文本来识别特朗普。神经网络是计算机模拟,其运行方式类似于我们大脑的工作方式。它们拥有高度互联的人工神经元,可以根据流经它们的数据来适应和改变自己。对于这个网络的数据,我使用了特朗普推特档案,该档案提供了从 2009 年开始的特朗普账户推特的储存库。不幸的是,数据归档似乎已于 2018 年 1 月停止,但我们将利用我们在练习中获得的信息进行工作。对于有编程头脑的人来说,详细描述代码的记事簿是可用的,但我的目的是给非程序员的社会科学家一个这些过程如何工作的要点,以便他们可以在自己的项目中考虑它们。
检查数据
首先,我将 2015 年、2016 年和 2017 年的精简数据集加载到一个数据框架中,删除所有转发,因为这些转发将包含并非来自特朗普或他的工作人员的文本。你可以加入 2018 年的数据集,但它将于 1 月中旬结束。
An example of the data after loading into the Pandas DataFrame
首先,我快速浏览了一下数据,看看账户上使用了哪些类型的资源及其活动。在整个综合数据集中,该账户的前三大来源是 Android、iPhone 和 Twitter 网络客户端,尽管最后一个似乎在特朗普宣布参加 2015 年 6 月总统大选之前最活跃。查看 Twitter 网络客户端的几个例子,并不完全清楚网络客户端上的人是唐纳德还是助手。
ICYMI,@IvankaTrump 的 int。在@TODAYshow 上讨论@Joan_Rivers &选手在@学徒 NBChttp://t.co/Em7bgj10SM上的竞争
“@nanaelaine7 @realDonaldTrump 只有你能让它再次伟大。你的计划是现实中唯一的计划。特朗普让美国变得伟大”
。@megynkelly 最近说不能被川普拉拢。她各方面都那么一般,谁他妈想追求她!
事实✔️on“红线”在叙利亚:人权委员会“我不在那里。”事实:2012 年 8 月划定的界限。人权委员会 Secy 的状态,直到 2 月 13 日。https://t.co/4yZjH3TR5B
目前还不清楚这些人是应该被排除在数据之外,还是应该被归类为特朗普或工作人员。对于这个练习,我让他们作为工作人员,因为我们的主要假设是特朗普从 Android 发推文,但稍后返回并尝试其他分类会很有趣。
我们已经知道,特朗普是在 2017 年 3 月的某个时候转向 iPhone 的,因此值得深入研究并定位 Android 变暗的确切日期。利用熊猫对时间序列数据进行重新采样的奇妙能力,我将数据重塑为 2017 年 2 月至 4 月期间每天的推文计数,并按来源进行拆分。
Graph demonstrating Trump’s Android phone finally went dark on the 8th March 2018 (…kind of).
从图表中我们可以看到,一般来说,Android 手机的最后一次使用是在 2018 年 3 月 8 日。来自 Android 的两条推文在 3 月 25 日再次出现,但似乎无关紧要,因此为了简单起见,我们将忽略它们,因为从 4 月到数据集结束,不再有 Android 推文出现。
在此基础上,我将数据一分为二,iPhone 前和 iPhone 后的数据。对于 iPhone 之前的数据,我们可以假设任何 Android 推文都是特朗普,任何其他推文都是员工。对于后 iPhone 时代的数据,我们不能再做这样的假设。这意味着我们需要训练我们的神经网络模型来区分 iPhone 前数据上的特朗普和工作人员推文,然后使用该模型来预测 iPhone 后数据上的来源。轻松点。
像数字一样的神经网络——大量的数字
训练网络的第一步是使单词对它来说是可理解的。我们通过将来自 Python 库“Scikit Learn”的 TFIDF 矢量器与整个文本数据相匹配来实现这一点。这个阶段基本上创建了一个小模型,记录所有推文中的每个独特的词,以及它在数据中的流行程度。我们将这个模型放在手边,因为我们将需要它将我们不同的文本数据集转换成神经网络可以理解的数字模式。矢量器的工作原理是将一串文本转换成一个非常宽的电子表格,每个文档占一行,每个可能的单词占一列。计算的值可以是单词在文档中出现的次数,1 或 0 表示它是否出现过,或者在 TFIDF 的情况下,是基于单词对该文档的重要性的分数,同时考虑文档本身和数据集中的所有其他文档。下面用《爱丽丝梦游仙境》中的两段摘录和 TFIDF 单词分数的两行数组演示了这一点。
但是它是怎么“知道”的呢?!—训练神经网络
神经网络进行分类的方式是,通过向它们提供大量数据示例来训练它们,最重要的是,向它们提供模型应该预测的预期输出或标签。对于每个例子,模型将其预测与“正确”标签进行比较,对自身进行调整,然后再次尝试。训练继续进行,直到尽可能接近正确预测训练数据的所有实例的分类的理想情况。在我们的例子中,我们为模型提供了大量的推文,对于每条推文,我们都告诉模型它是特朗普的推文还是员工的推文,直到它的预测非常接近正确的类别。
通常,经过多次迭代训练后,神经网络模型在将其预测与预期结果进行匹配时会变得非常准确,但实际上,我们想知道它对从未见过的推文的分类预测会有多好。我们可以通过保留一定比例的训练数据来评估神经网络做出这些预测的效果,以便这些推文永远不会被训练中的模型看到。然后,我们要求模型预测推文作者,并根据我们已经分配的类别检查其预测。对于我建立的最终模型,结果是一个模型在预测它见过的训练数据中的标签方面的准确率为 97.6%,在预测它从未见过的推文中的准确率为 76.8%。然而,人们不只是建立一个模型。首先你建立 120 个模型!
为您选择正确的神经网络…
通常,在处理文本数据时,机器学习的改进来自对训练数据的更好管理,例如在我们的情况下,要么只关注 iPhone 和 Android 推文,要么考虑特朗普是否也要对其他平台的推文负责。我们也可能会考虑是否更好地预处理文本(清除噪音,正确识别表情符号,删除网址等)。)可能是个不错的决定。然而,也可能这些噪声元素实际上是模型的最大信息量。在我们的例子中,在清除了推文中的网址、标签和表情符号后,我发现模型的准确性下降了 20%左右,这表明正是这些特征有助于识别。
然而,构建和使用神经网络的一个关键部分是选择你的网络有多少层,每层有多少个节点。这些不一定是可以通过算法选择的东西,它们因数据而异。一个建议是在不同数量的层和节点的不同模型形状上运行试验。对于每个模型形状,您都要多次训练和评估模型,每次都使用训练数据的不同子集。对于每个模型形状,取其试验的平均分,并查看哪个模型在小块训练数据上表现最好。正如您在评估了 120 个独立构建的模型后所看到的,最好的结果是模型 010,这是一个包含 4 个隐藏层的神经网络,其中每个隐藏层包含 1000 个节点。请注意,简单地增加节点和层并不一定会提高预测能力,正确的模型“形状”通常取决于您正在处理的数据。
Making this Graph required building and training 120 different neural networks. You’d think it would look more impressive.
大结局:找到特朗普
在确定了要使用的最佳模型形状(1000 个节点的 4 个隐藏层)后,我们建立了一个全新的模型,并用我们所有的训练数据训练它,并转向我们迄今为止被忽视的特朗普改用 iPhone 后的推文数据集。在这种情况下,我们没有“正确”的标签,因为我们不再确定哪些推文来自特朗普的手机,哪些来自他的工作人员,因为它们都来自 iPhone 平台。我们使用原始的 TFIDF 矢量器转换文本,并将其提供给模型,要求它为我们提供预测;工作人员还是特朗普?。就活跃度而言,我们可以看到该模型在推文之间有相对均匀的划分,在某些日子工作人员的预测活跃度更高,而在其他日子特朗普的预测活跃度更高。
Trump and his staff put the work in equally. It’s a fair division of labour.
考虑到该模型在未公开数据上的准确率约为 77%,我们有必要单独检查推文,看看我们认为该模型在定性层面上的表现如何。从每个类别中随机抽取 10 个样本,为我们提供了一个很好的概览。对于特朗普撰写的那些预测的推文,我们看到了许多感叹号,许多强调的强烈措辞,一些反民主党的诽谤和许多与老狐狸和朋友的互动。工作人员发布的推文通常带有一个 URL,更多的是以详细描述的方式发言,并喜欢感谢和祝贺各种公民的努力。对于每个预测,您可以看到模型对自己的预测有多有信心,1 表示绝对有信心,0 表示没有信心。
预测川普推特
预测员工推文
对任何政治家来说,让多人通过一个被认定为一个人的账户“说话”会让公众很难搞清楚他们选出的官员到底是谁。对于那些希望让这些波兰人承担责任的人来说,这也增加了不确定性,因为他们可以振振有词地声称,他们一开始就没有写那条有问题的推文。然而,至少根据这个模型,这是 100%的特朗普,有 100%的信心。
如果你对自己摆弄神经网络感兴趣,或者想知道我是如何建立模型的细节,这种转移的代码是 ,可作为 Jupyter 笔记本 。
埃塞克斯大学的 ESRC 人权、大数据和技术项目 为这一转移提供了部分支持。
这项工作得到了经济和社会研究委员会的支持[批准号 ES/ M010236/1]
在 scikit-learn 中微调分类器
很容易理解,许多机器学习问题受益于作为其最佳性能度量的精确度或召回率,但实现这一概念需要详细过程的知识。我最初几次尝试为回忆(灵敏度)微调模型很困难,所以我决定分享我的经验。
这篇文章来自我的第一个 Kaggle 内核,我的目的不是构建一个健壮的分类器,而是想展示优化分类器的实用性。在下图 A 中,目标是将决策阈值向左移动。这最大限度地减少了假阴性,这在为本文选择的数据集中尤其麻烦。它包含 357 个良性和 212 个恶性乳腺活检图像的特征。假阴性样本相当于错过了恶性肿瘤的诊断。数据文件可以在这里下载。
The goal of this post is to outline how to move the decision threshold to the left in Figure A, reducing false negatives and maximizing sensitivity.
使用 scikit-learn,针对召回调整分类器可以(至少)通过两个主要步骤来实现。
- 使用
[GridSearchCV](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html)
通过搜索最佳超参数并保留具有最高召回分数的分类器来调整您的模型。 - 使用精确回忆曲线和 roc 曲线调整决策阈值,这是一个更复杂的方法,我将详细介绍。
首先加载必要的库和数据。
通过统计diagnosis
列可以找到阶级分布。b 代表良性,M 代表恶性。
B 357
M 212
Name: diagnosis, dtype: int64
转换类别标签,并将数据分成训练集和测试集。使用stratify=True
的train_test_split
导致训练集和测试集之间的一致类别分布:
# show the distribution
print('y_train class distribution')
print(y_train.value_counts(normalize=True))print('y_test class distribution')
print(y_test.value_counts(normalize=True))y_train class distribution
0 0.626761
1 0.373239
Name: diagnosis, dtype: float64
y_test class distribution
0 0.629371
1 0.370629
Name: diagnosis, dtype: float64
既然已经准备好了数据,就可以构建分类器了。
第一个策略:使用 GridSearchCV 和 scoring 参数优化灵敏度。
首先建立一个通用分类器并设置一个参数网格;随机森林有许多可调参数,这使它适合于GridSearchCV
。scorers
字典可以用作GridSearchCV
中的scoring
参数。当多个分数通过时,GridSearchCV.cv_results_
将返回所提供的每种分数类型的评分标准。
下面的函数使用 GridSearchCV 根据param_grid
中的参数组合来拟合几个分类器。来自scorers
的分数被记录下来,最佳模型(由refit
参数评分)将被选择并“改装”成完整的训练数据,供下游使用。这也对伸出的X_test
进行预测,并打印混淆矩阵以显示性能。
包装器功能的要点是根据所选择的评分标准类型快速重用代码以适合最佳分类器。首先,试试precision_score
,它可以限制误报的数量。这不太适合最大灵敏度的目标,但允许我们快速显示针对precision_score
优化的分类器和针对recall_score
优化的分类器之间的差异。
grid_search_clf = grid_search_wrapper(refit_score='precision_score')Best params for precision_score
{'max_depth': 15, 'max_features': 20, 'min_samples_split': 3, 'n_estimators': 300}
Confusion matrix of Random Forest optimized for precision_score on the test data:
pred_neg pred_pos
neg 85 5
pos 3 50
param_grid
中每个参数组合的精度、召回率和准确度分数都存储在cv_results_
中。这里,pandas 数据框架有助于可视化每次分类器迭代的得分和参数。这是为了表明,尽管分类器之间的准确率可能相对一致,但很明显,准确率和召回率之间存在权衡。按精度排序,最好的评分模型应该是第一条记录。这可以通过查看第一条记录的参数并将其与上面的grid_search.best_params_
进行比较来检查。
results = pd.DataFrame(grid_search_clf.cv_results_)
results = results.sort_values(by='mean_test_precision_score', ascending=False)results[['mean_test_precision_score', 'mean_test_recall_score', 'mean_test_accuracy_score', 'param_max_depth', 'param_max_features', 'param_min_samples_split', 'param_n_estimators']].round(3).head()
该分类器针对精度进行了优化。为了比较,为了显示GridSearchCV
如何选择最佳分类器,下面的函数调用返回一个为召回优化的分类器。网格可能与上面的网格相似,唯一的不同是召回率最高的分类器将被重新调整。这将是癌症诊断分类问题中最理想的度量,在测试集混淆矩阵上应该有更少的假阴性。
grid_search_clf = grid_search_wrapper(refit_score='recall_score')Best params for recall_score
{'max_depth': 5, 'max_features': 3, 'min_samples_split': 5, 'n_estimators': 100}
Confusion matrix of Random Forest optimized for recall_score on the test data:
pred_neg pred_pos
neg 84 6
pos 3 50
再次复制生成结果表的相同代码,只是这一次最好的分数将是recall
。
results = pd.DataFrame(grid_search_clf.cv_results_)
results = results.sort_values(by='mean_test_precision_score', ascending=False)results[['mean_test_precision_score', 'mean_test_recall_score', 'mean_test_accuracy_score', 'param_max_depth', 'param_max_features', 'param_min_samples_split', 'param_n_estimators']].round(3).head()
第一种策略没有为recall_score
产生令人印象深刻的结果,与为precision_score
优化的分类器相比,它没有显著减少(如果有的话)假阴性的数量。理想情况下,在设计癌症诊断测试时,分类器应尽可能减少假阴性。
策略二:调整决策阈值,确定操作点
precision_recall_curve
和roc_curve
是可视化分类器中灵敏度-特异性权衡的有用工具。它们有助于告知数据科学家在何处设置模型的决策阈值,以最大化灵敏度或特异性。这被称为模型的“工作点”。
理解如何在 scikit-learn 中微调分类器的关键是理解方法
.predict_proba()
和.decision_function()
。这些返回样本被预测在一个类中的原始概率。这是与调用.predict()
方法返回的绝对类预测的一个重要区别。
为了使这种方法适用于 scikit-learn 中的所有分类器,要知道有些分类器(如 RandomForest)使用.predict_proba()
,而有些分类器(如 SVC)使用.decision_function()
。RandomForestClassifier
的默认阈值是 0.5,所以以此为起点。创建一个名为y_scores
的类概率数组。
y_scores = grid_search_clf.predict_proba(X_test)[:, 1]# for classifiers with decision_function, this achieves similar results
# y_scores = classifier.decision_function(X_test)
为分类器生成精确召回曲线:
p, r, thresholds = precision_recall_curve(y_test, y_scores)
这里的adjusted_classes
是一个简单的函数,用于返回上面计算的y_scores
的修改版本,只是现在将根据概率阈值t
分配类别标签。下面的另一个函数绘制了相对于给定阈值t
的精度和召回率。
多次重复执行该功能,每次改变t
,调整阈值,直到出现 0 个假阴性。在这次特别的运行中,我不得不一直降到 0.29,然后将假阴性降低到 0。
precision_recall_threshold(p, r, thresholds, 0.30)pred_neg pred_pos
neg 79 11
pos 1 52
查看精确度和召回率之间权衡的另一种方式是将它们一起绘制为决策阈值的函数。
# use the same p, r, thresholds that were previously calculated
plot_precision_recall_vs_threshold(p, r, thresholds)
最后,ROC 曲线显示,为了实现 1.0 的召回,模型的用户必须选择一个允许某些假阳性率> 0.0 的操作点。
fpr, tpr, auc_thresholds = roc_curve(y_test, y_scores)
print(auc(fpr, tpr)) # AUC of ROC
plot_roc_curve(fpr, tpr, 'recall_optimized')0.9914046121593292
感谢跟随。针对特异性和敏感性调整模型的概念应该更加清晰,并且您应该能够轻松地在您的 scikit-learn 模型中实现这些方法。我很想听到改进代码和/或分类器的建议。
像老板一样在 Python 中微调 XGBoost
XGBoost(或 eXtremeGradientBoosting)不再被引入,它在太多的数据科学竞赛中被证明是相关的,如果你刚刚开始使用它,它仍然是一个很难微调的模型。
为什么微调是关键?因为如果你有大数据集,你对 5 个不同的参数进行简单的网格搜索,每个参数有 5 个可能的值,那么你将有 5⁵= 3125 次迭代。如果一次迭代需要运行 10 分钟,那么在获得参数之前,您将有超过 21 天的等待时间(我不说 Python 崩溃,不让您知道,并且您在意识到它之前等待了太长时间)。
在这里,我想你首先正确地完成了你的特性工程工作。特别是分类特征,因为 XGBoost 不接受输入中的分类特征。
1.列车测试分割、评估指标和提前停车
在进行参数优化之前,先花些时间设计模型的诊断框架。
XGBoost Python api 提供了一种方法,通过增量树的数量来评估增量性能。它使用两个参数:“eval _ set”——通常是训练集和测试集——以及相关的“eval_metric”来测量这些评估集上的误差。
绘制结果的时间:
在分类误差图上:看起来我们的模型学习了很多,直到 350 次迭代,然后误差非常缓慢地减少。这反映在测试集上,当迭代次数从 350 增加时,我们不一定看到性能。有了这个,你已经可以考虑在 350 棵树后进行切割,并为将来的参数调整节省时间。
如果你不使用 scikit-learn api,而是使用纯 XGBoost Python api,那么还有提前停止参数,它可以帮助你自动减少树的数量。
2.是时候微调我们的模型了
当您还没有运行任何模型时,从哪里开始呢?
- 为关键输入填充合理的值:
learning _ rate:0.01
n _ estimators:100 如果你的数据量很大,1000 如果是中低的
max _ depth:3
子样本:0.8
col sample _ bytree:1
gamma - 运行 model.fit(eval_set,eval_metric)并诊断您的第一次运行,特别是 n_ 估计器参数
- 优化最大深度参数。它表示每棵树的深度,即每棵树中使用的不同特征的最大数量。我建议从一个低的 max_depth (例如 3)开始,然后递增 1,当增加它没有性能增益时停止。这将有助于简化您的模型,避免过度拟合
- 现在玩一下学习率和避免过拟合的特性:
learning_rate :通常在 0.1 到 0.01 之间。如果你关注的是性能,并且有足够的时间,在增加树的数量的同时,逐渐降低学习速度。
子样本,这是每棵树用于构建该树的行数百分比。我建议不要取出太多行,因为性能会下降很多。取 0.8 到 1 之间的值。
colsample_bytree :每棵树使用的列数。为了避免一些列在预测中占据过多的份额(就像在推荐系统中,当你推荐了购买最多的产品而忘记了长尾理论),去掉一个适当比例的列。如果您有许多列(尤其是如果您进行了一次热编码),则值为 0.3 到 0.8;如果您只有几列,则值为 0.8 到 1。
gamma :通常被误解的参数,它作为一个正则化参数。要么 0,要么 1,要么 5。
你可以走了!
参数 base_score 什么都没给我。要么是和收敛没关系,要么是不知道怎么用。
3.其他备注
查看 feature_importance 表,并确定解释超出其应有范围的变量。你的数据可能有偏差!你的模型和参数都不相关。
比较两个模型的预测,其中一个模型比另一个模型多使用一个变量。具体比较预测不同的数据(预测类不同)。
请记住,在实际项目中,如果您今天将 XGBoost 模型工业化,明天您将希望改进该模型,例如通过向模型添加新的特性或简单地添加新的数据。为了比较这两个模型,绘制属于类别 1 的概率(风险= proba > 50%),如下所示:
你会知道你的新型号与旧型号相比如何,它们哪里相似,哪里不同。同样,绘制两个 feature_importance 表,并比较两个模型中最相关的要素。
我希望这篇文章对你有用,如果有用,考虑至少给 50 次掌声:)
基于全卷积网络的指纹去噪和修复
By Jeremy Yap on https://unsplash.com/
指纹是主要的身份识别手段之一,因为两个人拥有相同指纹的概率估计为 640 亿分之一。这意味着能够准确有效地处理和匹配指纹对是一项宝贵的资产。这就是这个项目的动机,在这个项目中,我们试图从噪声失真的观察中提取一个干净的指纹图像。
所有图像都包含某种形式的噪声。这种噪声可能是由于采集设备、压缩方法或应用于图像的处理造成的。这促使研究人员研究去噪和修复等方法和工具来缓解这个问题。它们被用作预处理步骤,为目标任务(可能是分类、分割、匹配……)准备图像。在我们的例子中,最终目标是提高指纹错误接受率或错误拒绝率。
深度学习,特别是深度卷积神经网络的最新进展,通过展示学习有噪图像到“干净”图像之间的映射的能力,实现了去噪和去噪,并改进了现有技术。
在这篇文章中,我们将使用一种类似于 U-Net [1]的架构,并展示它可以成功地应用于去噪和盲修复。
数据
http://chalearnlap.cvc.uab.es/challenge/26/description/
我们将使用的数据集由 chalearn challenge 的组织者提供,由 84k 合成指纹图像组成,这些图像是使用 Anguli:合成指纹生成器生成的。然后,通过添加随机变换(模糊、亮度、对比度、弹性变换、遮挡、划痕、分辨率、旋转)和背景图像,人为地降低这些图像的质量。
目的是从退化的观测数据中提取干净的指纹图像。我们使用平行数据集(噪声图像、指纹图像)作为模型训练的(输入、输出)。
模型
所用的架构如上图所示,与[1]中介绍的架构相似(除了我们填充输入而不是镜像边沿)。这种架构的一个重要优点是,在对像素进行预测时,它能够考虑更广泛的背景。这得益于上采样操作中使用的大量通道。
U-Net 的另一个重要特征是跳跃连接,因为它们通过减少消失梯度问题使训练更容易。
在代码中,它看起来像这样:
处理
输入图像的处理如下:
- 归一化:像素强度除以 255,因此它们在(0,1)范围内。
- 重新调整大小:由于最大池化,网络期望输入图像的每个维度可被 2⁴整除。
- 数据扩充:仅在训练期间执行。随机翻转(水平或垂直或两者)、随机剪切、随机平移(水平或垂直或两者)、随机缩放、随机对比度变化、随机饱和度变化、随机旋转。
培养
我们使用 Adam optimizer,初始学习率为 1e-4,每次验证损失稳定超过 3 个时期时,学习率降低 0.5,如果验证损失在最后 5 个时期没有改善,则停止学习。
在 1070 GTX 卡上使用 Keras 和 Tensorflow 后端完成实施。
结果
这种方法在所有三个指标上得到最好的结果(【Mae】、 psnr 、 ssim )。尽管我们只在损失函数中使用了 MAE,但它似乎是其他两个指标的良好代理。
作为比较,rgsl888 使用了与我们相似的架构,但增加了扩张卷积以扩展网络的感受域。hcilab 使用分层方法,sukeshadigav 使用基于 M-Net 的卷积神经网络。
在这篇文章中,我们训练了一个深度神经网络,对指纹图像的噪声版本进行像素级预测,以消除噪声。我们展示了类似 U-Net 的架构可以在 Chalearn 竞赛的所有三个指标上取得最佳结果。
这里有代码:https://github.com/CVxTz/fingerprint_denoising
[1] Olaf Ronneberger、Philipp Fischer 和 Thomas Brox。生物医学图像分割的卷积网络。
2017 年金融科技交易所将重点放在数据上
上周,包括我在内的数百名金融和科技专业人士齐聚芝加哥,参加 Barchart 第三届年度金融科技交易所(FinTech Exchange)会议。该活动专注于专门针对市场和交易的技术。每年的主题都在演变,以反映及时的主题。正如 Barchart 首席执行官 Mark Haraburda 在 John Lothian 新闻简报中分享的那样,今年的内容是“关注数据、数据交付方式、数据存储方式、数据分析和可视化方式以及替代数据空间中的新型数据。”
虽然与会者和演讲者来自各地,但芝加哥的存在是最强的——不仅因为会议在那里举行,还因为芝加哥已经成为金融科技创新的中心。
如果人们需要一个提醒,说明芝加哥已经在全球金融科技领域取得了重要地位,他们马上就能得到。哈拉布尔达在欢迎辞中指出,德勤最近将芝加哥列为全球金融科技中心的第五名。这是芝加哥第一次上榜,这是一个强大的首次亮相,这座风城的排名领先于除纽约、硅谷、伦敦和新加坡之外的所有城市。
如果这一事实不足以让与会者相信 TT 的家乡是金融科技领域的“en fuego ”,来自芝加哥的闪电圆桌会议主持人提供了大量证据。虽然他们代表了从全球交易所到软件初创公司的各种公司,但他们都专注于为我们的行业提供数据相关的创新。
但是并不是所有的演讲者都来自芝加哥。总部位于西雅图的 Tableau 的 Vaidy Krishnan 的开场主题演讲重点关注大数据。根据 Krishnan 的说法,虽然构建将数据带到最前沿的仪表板很重要,但当你深入表面之下并问“为什么?”时,数据的真正价值才显现出来他断言,是这个简单的问题,而不是数据本身,激发了新的见解。但他警告说,大多数分析工具并不是为了让你探索下一层问题而设计的。他的建议是:选择一个具有仪表板功能的分析平台,该平台将挖掘其所在位置的数据,并超越仪表板指标来回答那些意想不到的问题。
来自 CME Group 的 Julie Menacho 谈到了交易所的几项数据相关计划,特别是应用程序和数据中心服务,以及专注于 CME 数据业务和市场数据分发的合作伙伴关系。最引人注目的是,她描述了该交易所新推出的基于云的数据服务。从 1970 年开始,超过 450 的历史数据以及来自非传统来源的替代数据(如卫星、信用卡交易和社交媒体)现在可以通过云轻松访问,从而为投资决策提供信息。
来自 Enova 的肖恩·奈史密斯(Sean Naismith)教授了另一个与数据相关的话题:预测分析。奈史密斯表示,自 Enova 于 2004 年成立以来,分析一直是这家在线贷款公司的“心脏和灵魂”,Enova 自称是芝加哥最早的金融科技公司之一。他讲述了客户对即时答案的需求如何推动该公司建立了一个名为 Colossus 的实时决策管理系统。他解释说,这样一个系统需要三个组成部分——业务规则、预测模型和优化例程——并分享了 Enova 在建造 Colossus 时学到的六个值得注意的经验。其中包括:深刻理解客户体验及其留下的数据。
Vertex Analytics 的吉姆·奥斯汀获得了最具娱乐性演示奖。Vertex 的平台通过提供扫描和利用实时和交易后交易数据的工具,帮助交易公司管理当今监管环境的复杂性和雷区。奥斯汀利用了金融科技交流恰逢带孩子上班日这一事实。他让一群学龄儿童和他一起上台,扮演场内交易者和电子交易者的角色。他赢得了当天最大的笑声和推特上的大量喜爱。干得好,吉姆。
DataRobot 的贾斯汀·迪克森(Justin Dickerson)给数据主题又增加了一层。他专注于自动机器学习(AML),这属于更大的(也是人们谈论最多的)人工智能(AI)类别。DataRobot 通过利用云使分析建模变得更加容易。迪克森透露,在这家成立五年的公司基于云的机器学习平台上,已经建立了超过 1.3 亿个预测模型。他的信息很有说服力:你最好关心机器学习。这不仅仅是因为它能够快速识别业务问题/趋势,具有大规模“学习”的内在能力,并且几乎每天都在变化,还因为您的竞争对手将会使用它。
最后两位演讲者,Nadex 的 Tim McDermott 和 TopstepTrader 的 Michael Patak,来自非常不同的公司。Nadex 是一个受监管的交易所,提供二元期权交易,而 TopstepTrader 的使命是为新交易者提供资金。尽管这两家公司乍看之下几乎没有相似之处,但麦克德莫特和帕塔克传达了一个共同的信息。两人都断言,交易的未来在于零售。麦克德莫特说,该交易所正在努力吸引散户投资者,解决他们对成本和恐惧的担忧,调整市场时间和其他时间框架,并使新交易者更容易进入市场。Patak 说“所有的眼睛都盯着零售”,他的重点是通过教育扩大公司的用户群。看看他们的预测能否实现将会很有趣。
感谢 FinTech Exchange 2017,我现在变得更聪明了,对专注于数据的技术和公司也更加好奇了。我们的行业产生和消耗的数据量可能是巨大的,但芝加哥和其他地方正在发生创新爆炸,可以帮助以更高效和更有利可图的方式处理和管理这些数据。我希望 2017 年的许多演讲者明年将带着更新返回 FinTech Exchange。
要了解更多金融科技交易所的关键信息,请查看 Twitter 上的 @FinTechChicago 和 #FTX17 流。
2018 年的金融科技——墨西哥浪潮
席卷拉丁美洲的工业革命
墨西哥超过了 300 家金融科技初创公司的门槛,巩固了其作为拉丁美洲第二大金融科技生态系统的地位
仅在 12 个月内,125 家新的金融科技创业公司在墨西哥诞生,巩固了墨西哥作为拉丁美洲地区主要金融科技生态系统之一的地位,主要受以下领域增长的驱动:金融机构的企业技术、交易&资本市场、财富管理和替代评分、身份和欺诈。
金融部门目前正处于深刻的变革和创新过程中,这一过程的主要特点是使用新技术。这种颠覆性的浪潮始于伦敦或新加坡等稳固而成熟的市场,在过去几年中已经扩展到几乎全世界,在拉丁美洲,它正在迅速发展,并正在改变我们所知的金融世界。
Finnovista 之前对拉丁美洲主要金融科技生态系统进行的研究结果证明了该地区金融部门的稳固转型。在过去几年中,我们见证了该地区大多数金融科技生态系统的增长率约为 50%。迄今为止,芬诺维斯塔已经发表了对 【阿根廷】巴西智利哥伦比亚厄瓜多尔西班牙的研究 以及关于在拉丁美洲运营的外国创业公司的特定雷达(**** Fintech Radar 外国创业公司 )和关于金融普惠(fin tech for Inclusion Radar))。 当前的分析代表了 Fintech Radar Mexico 与 泛美开发银行 合作的更新,其第一版于 2017 年 7 月发表。************
过去几个月,墨西哥采取了重大举措来推动金融科技创新生态系统,并将自己定位为潜在的全球金融科技中心之一。仅在一年前,在该分析的第一个版本中,该国成为该地区最大的金融科技生态系统,拥有 238 家初创公司。在新版 Fintech Radar 中,墨西哥的 Fintech 生态系统增长到了 334 家 Fintech 初创公司,这使得该国落后于巴西,根据 2018 年 6 月发布的上一份Fintech Radar Brazil,巴西是该地区最大的 fin tech 生态系统,有 377 家初创公司。因此,墨西哥巩固了其作为拉丁美洲第二大金融科技生态系统和该地区金融创新主要驱动力之一的地位。墨西哥的生态系统目前比哥伦比亚大 2.5 倍,哥伦比亚是该地区第三大金融科技生态系统,有 124 家创业公司,比阿根廷大 3 倍多,比智利大 4 倍多。
这表明在过去的 12 个月中,墨西哥金融科技生态系统中的创业公司数量增长了 96 家,年增长率为 40% ,略低于该地区其他主要生态系统的年增长率,如巴西增长了 48%,哥伦比亚增长了 52%,阿根廷增长了 56%,尽管高于智利去年增长的 22%。然而,与其他国家相比,墨西哥的死亡率较高,为 12%,而巴西为 14%。这反映出墨西哥有 29 家创业公司在过去几年中停止了运营,因此,同期该国出现了 125 家新的创业公司。与其他金融科技生态系统相比,较低的增长率以及较低的死亡率也可能反映了该国金融科技行业的整合阶段,更多处于更高级发展阶段的创业公司正在整合其商业模式。
目前,墨西哥的六个主要细分市场是:
- 支付和汇款,占 75 家初创公司总额的 23%
- 贷款,占 74 家创业公司总数的 22%
- 企业财务管理,占 45 家初创企业总数的 13%
- 个人理财,占总数的 11%,有 36 家初创公司
- 众筹,有 30 家初创公司,占总数的 9%
- 面向金融机构的企业技术,占总数的 7%,有 23 家初创公司。
在这项分析中,其余五个新兴领域都不到已识别初创企业总数的 6%:
- 保险,占总额的 6%
- 财富管理,占总额的 3%
- 替代得分、身份和欺诈,也占总数的 3%
- 交易和资本市场,占总数的 2%
- 数字银行,占总数的 1%。
如果我们将这些结果与前一版的 Fintech Radar Mexico 进行比较,我们会发现主要 Fintech 细分市场之间的微小变化。支付和汇款、贷款、企业财务管理、个人财务管理和众筹仍然是创业公司数量中最重要的部分。唯一的区别是,这一次,支付和汇款部门成为美国最大的金融科技部门,有 75 家初创公司,贷款部门略有落后,有 74 家初创公司。
然而,当查看所有金融科技细分市场在过去 12 个月中的增长率时,我们可以看到增长率最高的细分市场通常不是该国创业公司数量最多的细分市场。在这个新版本中,以下部分经历了特别强劲的增长:
- 金融机构的企业技术,从 10 家增加到 23 家,增长了 130%
- 交易和资本市场,从 3 到 6 家初创公司增长了 100%
- 另类评分、身份和欺诈,从 6 家增加到 11 家,增长了 83%
- 财富管理,从 6 到 10 家初创公司增长了 67%。
与此同时,墨西哥四大金融科技生态系统在过去 12 个月中也经历了超过 30%的高增长率:支付和汇款(增长 42%)、贷款(37%)、众筹(36%)和企业财务管理(29%)。尽管在美国的 11 个金融科技领域中,没有任何一个领域出现负增长,但我们确实发现了两个领域的增长速度比其他领域慢:保险,增长率为 27%,个人金融管理,在过去 12 个月中增长了 6%。
另一方面,值得注意的是,数字银行领域出现了 5 家金融科技初创公司,因为在上一期墨西哥金融科技雷达中,该领域没有初创公司。正如我们在巴西已经观察到的那样,该细分市场在一年内增长了 147%,多达 16 家初创公司,我们不断发现更多的数字银行解决方案,试图适应新的市场需求,从而接近新一代。
如果我们将墨西哥金融科技细分市场的分布与拉丁美洲的其他两个主要生态系统(巴西和哥伦比亚)进行比较,我们会发现这三个国家拥有相同的主要金融科技细分市场,但略有不同:支付和汇款、贷款和企业财务管理。支付和汇款现在是这三个国家中最大的部分,这反映了我的移动设备在进行交易时变得越来越重要。在其他两个细分市场中观察到了细微的差异,因为贷款细分市场是墨西哥和哥伦比亚的第二大生态系统,而在巴西则位于第三位,这可能是受该国该细分市场面临的监管限制的影响。
我们认为,在过去 12 个月里,墨西哥和巴西在金融科技领域的增长趋势方面存在重大差异。正如我们已经提到的,面向金融机构的企业技术这一细分市场在墨西哥的增长率最高,有 13 家初创公司,而在巴西,这一细分市场一年内只有 5 家新的初创公司,这可能反映了墨西哥金融机构对将金融科技解决方案纳入其业务的开放程度更高。另一方面,保险部门的增长率差异也值得注意,因为在巴西,该部门在 12 个月内增长了 73%,而在墨西哥,该部门的增长率限制在 27%,这表明该部门在墨西哥处于早期发展阶段,这可能是受 WeeCompany 首席执行官 Jesús Hernández 指出的“不愿意冒太大风险”的保守形象的影响。这种较慢的增长率反映了墨西哥保险技术部门的停滞,而此时该部门正在经历世界其他地区的增长和转型过程。墨西哥显然需要高效且无处不在的创新保险服务,因此墨西哥最具创新性的保险公司将利用这一机会整合 InsurTech 创新,无论是墨西哥还是外国的解决方案,正如西班牙初创公司【Bdeo】,已经与墨西哥重要的保险公司一起推出了视频理赔工具。
为了对墨西哥的金融科技生态系统进行更深入的分析,对该国 110 家金融科技初创公司进行了一项关于不同业务方面的调查。
收集的信息表明,墨西哥城是大多数墨西哥金融科技初创公司的创办城市,有 61%的人提到了它们的起源城市,其次是瓜达拉哈拉,9%,蒙特雷,6%,梅里达,4%,普埃布拉,2%。关于国际化,83%的公司声称只在墨西哥运营,而 17%的公司确认在国外运营。我们发现,与该地区最大的金融科技生态系统巴西相比,墨西哥的国际化率较低,巴西的国际化率为 30%,仍远远低于该地区国际化率最高的阿根廷的 48%。
当分析已经开始国际化进程的初创公司的主要目的地国家时,我们观察到 62%的国际扩张发生在拉丁美洲和加勒比海地区,38%的墨西哥金融科技初创公司已经扩张到该地区以外,是巴西的两倍。
哥伦比亚成为墨西哥金融科技初创公司的主要目的地,其中 30%在该国运营,其次是智利和秘鲁,每个国家都是 17%墨西哥金融科技初创公司的目的地,以及巴西,其中 9%的墨西哥金融科技初创公司已经扩张。另一方面,我们还观察到洪都拉斯、巴拿马或哥斯达黎加等加勒比国家是主要目的地,这反映了墨西哥金融科技初创公司如何将其业务国际化到仍处于早期发展阶段的生态系统,因此在开发较少的市场中寻找机会。
除了拉丁美洲和加勒比海地区,美国和加拿大是墨西哥金融科技初创公司的下一个目的地,这些公司决定将活动扩展到其他大陆,因为 19%的公司已经在这里运营。与此同时,11%的金融科技初创公司在欧洲运营,8%的墨西哥金融科技初创公司已经扩展到亚洲。
墨西哥金融科技雷达的这一新版本展示了关于墨西哥金融科技生态系统成熟度的重要结果,因为我们观察到,78%的受访金融科技初创公司已经处于高级阶段,超过了巴西注册的 66%。具体来说,31%的人声称已经处于增长和扩张阶段,而 47%的人表示已经准备好进行扩展。其余 22%仍处于早期阶段,主要是准备用于商业发布的测试版本,因为 16%的受访金融科技初创公司声称处于这一阶段。
然而,尽管墨西哥的金融科技生态系统处于高度成熟的阶段,并且正如我们在巴西等该地区其他重要生态系统中所看到的那样,大多数接受调查的初创公司在员工数量方面仍然很小,因为其中 54%的公司声称拥有 1 至 10 名员工,而只有 8%的公司拥有 50 名以上的员工。
从公司的年龄来看,墨西哥的 Fintech 生态系统主要由年轻的创业公司组成,因为 85%的公司不到 5 年。具体来说,45%不到 2 岁,31%出生于 3 至 4 年前,9%出生于 4 至 5 岁。与此同时,只有 15%的被调查创业公司成立超过 5 年
根据 世界银行 的数据,37%的墨西哥成年人口拥有官方银行账户,这意味着墨西哥的银行化率约为 63%,高于该地区的平均水平(51%)。然而,我们可以再次看到,银行服务不足和没有银行服务的消费者和中小企业市场仍然是墨西哥金融科技初创公司的主要目标市场,这是我们 Finnovista 称为金融科技包容性的细分市场。具体而言,54%的墨西哥金融科技初创公司将他们的产品和/或服务瞄准了这一细分市场,这一比例自 2017 年以来有所增加,当时 46%的墨西哥金融科技初创公司被确定将他们的服务瞄准了这一细分市场。另一方面,有趣的是,要强调的是,这一比例高于该地区其他主要金融科技生态系统,因为在巴西,35%的初创公司将其解决方案瞄准金融科技领域,哥伦比亚为 45%,阿根廷为 41%,智利为 40%。
当被问及用于创建其产品和服务的主要技术时,墨西哥 Fintech 初创公司最常用的三种技术是:大数据和分析(25%)、API 和开放平台(17%)以及移动和应用(15%)。我们再次看到开放银行在不同实体的产品和服务之间的联系方面获得的重要性,所有参与者都在利用传统金融实体拥有的大量数据和信息,另一方面,金融科技方面的技术创新能力也在改善他们的客户服务。这一过程反映了金融实体如何与行业中的新参与者进行更深入的合作,这些新参与者通过适应消费者的新需求来获得市场份额。
在回答融资问题的 110 家墨西哥金融科技初创公司中,64%的公司声称过去获得过第三方公司的资金,这表明了外部资金来源在该国创业项目发展中的重要性。然而,墨西哥金融科技初创公司仍在筹集少量外部资金,40%的公司表示收到的资金不到 10 万美元,而只有 7%的公司声称筹集了超过 100 万美元,低于巴西注册的金额,巴西 13%的金融科技初创公司筹集了超过 100 万美元。然而,在过去几年中,我们已经看到墨西哥金融科技初创公司的重要投资轮次,例如由贷款平台 Konfio 筹集的8900 万美元 轮次,由 Vostok Emerging Finance 牵头;the**700 万美元 由 Curu 募集,QED 投资人领投;或者是由 ePesos 融资的600 万美元 轮,由 Santander Innoventures 牵头。**
当在墨西哥金融科技初创公司中确定主要资金来源时,正如在巴西发生的那样,天使投资者成为最重要的资金渠道,因为同意分享这些信息的初创公司中有 27%通过这些方式筹集了资金。与其他生态系统不同,大多数墨西哥金融科技初创公司(20%)仍在转向封闭的资金来源,即所谓的3f**:朋友、家人和傻瓜。另一方面,加速和孵化计划也是墨西哥金融科技初创公司的重要替代资金来源,因为其中 14%的公司声称参与了类似的计划。具体来说,在墨西哥,我们发现加速计划 Startupbootcamp FinTech 墨西哥城 ,以及规模计划startup boot camp Scale fin tech,两者都由 Finnovista 运营。最后,还值得注意的是风险投资公司在墨西哥金融科技生态系统中的重要性,因为 18%的墨西哥初创公司声称从当地基金筹集了资金,12%来自外国基金。**
最后,当被问及他们的融资计划时,墨西哥 71%的金融科技初创公司表示他们目前正在寻找资金,其中 71%在这个过程中提供股权,20%通过收购债务来实现。
最终外卖
正如我们在 Finnovista 之前进行的研究中看到的那样,金融科技创新浪潮现在是一种全球现象,据估计,银行业面临着因金融科技初创公司而损失高达 4.7 万亿美元收入的潜在风险。拉丁美洲也未能幸免于这场革命,过去在一些市场上是孤立的创新,现在是整个地区的普遍趋势。这一波金融创新在这个 51%的人口仍然没有银行账户的地区尤其重要,换句话说,他们被排除在正规金融系统之外,因为金融科技解决方案通过提供从汇款平台或数字支付到智能手机的各种解决方案,将自己定位为这部分人口的替代者。
然而,为了实现该行业的稳定增长、发展和接受,仍有一些关键因素必须考虑和解决,例如在监管或行业开放方面所做的努力。从这个意义上说,在 2018 年 3 月通过监管金融科技机构的法律(通常称为金融科技法)成为该地区第一部法律和全球参考后,墨西哥成为了先锋。这项新法律的目标是通过一个立法框架来监管所有被称为金融科技机构(FTI)的平台,从而提供更大的法律确定性,并创建一个法律框架,确保金融科技初创公司与传统金融和银行机构之间的公平竞争。
金融科技行业存在适当和量身定制的监管是该国行业大多数主要参与者所接受的必要性,因为正如在伦敦或新加坡等其他整合生态系统中所看到的那样,它增加了该行业的清晰度,从而推动了创新解决方案的进一步增长和整合。然而,我们面临着这些新法规的风险,如墨西哥的金融科技法,导致过度监管的市场,从而减缓甚至阻碍更大的金融创新。在墨西哥,新的法律规定,电子支付机构必须通过独立的第三方评估遵守“这些机构根据上述规定必须遵守的关于信息、电子手段的使用和持续运作的安全措施”的情况。这一过程高度依赖区块链技术,因此高度依赖提供这些技术要求的外国公司,这些技术要求在墨西哥和该地区其他地方尚未被广泛采用。
最后,因为我们发现自己正处于技术金融全球化的时代,所以新的监管不应该局限于一个国家的情况。拉丁美洲国家必须考虑到国际领域,学习其他国家的最佳做法,以及最终阻碍进一步创新和新商业模式的主要障碍。通过这种方式,该地区将能够在国际市场上实现更大程度的整合,同时将拉丁美洲国家定位为外国公司的目的地生态系统,并将为该地区的初创公司打开扩张之门。
参考
见原帖:芬兰人
首先创建一个常识基线
当你着手解决一个数据科学问题时,很容易一头扎进去,开始构建模型。
不要。首先创建一个常识基线。
如果你不了解任何数据科学,常识基线就是你如何解决问题。假设你不知道监督学习,无监督学习,聚类,深度学习,随便什么。现在问问你自己,我会如何解决这个问题?
有经验的从业者经常这样做。
他们首先对数据和问题进行一些思考,对什么是好的解决方案有一些直觉,并考虑应该避免什么。他们与可能一直手动解决问题的业务最终用户交谈。
他们会告诉你,常识性的基线不仅实现简单,而且通常很难超越。即使数据科学模型超过了这些基线,它们也是以微弱的优势超过的。
我们将看三个例子,从直接营销的一个问题开始。
你在一家服装零售商工作,有一个客户数据库,其中包含了过去一年中从你这里购买过东西的每个客户的信息。你知道他们买了什么,花了多少钱,还有一些人口统计信息。
您想要发送一封邮件,宣传您最新的春季服装系列,并且您有足够的预算从数据库中向多达 100,000 名客户发送邮件。
你应该挑选哪 10 万个客户?
您可能渴望创建一个训练和测试数据集,并学习一些监督学习模型。也许是随机森林或者梯度推进。甚至是深度学习。
这些都是强大的模型,应该放在你的工具箱里。但首先,问自己这个问题:“如果这些方法都不存在,我必须靠自己的智慧生活,我将如何挑选最好的 10 万名客户?”。
常识告诉我们,你应该在数据库中挑选最忠诚的客户。毕竟,如果有人会找到感兴趣的邮件,这些客户会*。
你如何衡量忠诚度?直觉上,一个忠诚的顾客可能会买很多东西,花很多钱。这样你就可以计算出每个顾客在过去一年里花了多少钱,和你一起购物了多少次。
如果你这样做,看看数据,你会发现它很好地抓住了忠诚度。但你也会注意到,它挑选的客户在上半年是忠诚的,但在下半年似乎从地球上消失了。
您可以通过查看顾客最近如何与您一起购物来解决这个问题。如果消费和购物频率相似,昨天与您一起购物的客户比 11 个月前购物的客户对您更有价值。
总而言之,对于每个客户,您可以计算
- 他们在过去 12 个月里和你一起度过的时光
- 过去 12 个月的交易数量
- 自上次交易以来的周数
您可以根据这三个指标对客户文件进行划分,并相应地对客户列表进行排序。
挑选前 100,000 名客户。
恭喜你!你刚刚发现了古老的近因-频率-货币(RFM) 启发式方法,一种久经考验的直销方法。
如果你想知道在十分位数列表中 R、F 或 M 哪个更重要,那么 R 被认为是最重要的。
RFM 方法易于创建、易于解释和易于使用。最棒的是,效果出奇的好。经验丰富的直销从业者会告诉你,即使更复杂的方法击败了 RFM,它们之间的差距也会比你想象的小得多,会让你怀疑复杂的东西是否值得努力。
接下来是产品推荐区的一个例子。
你工作的零售商有一个电子商务网站,你被要求建立一个产品推荐区,将显示在主页上。
它需要个性化——如果访问者以前来过你的网站,你需要利用你对他们的任何了解来推荐适合他们兴趣的产品。
关于这个主题的整本书(示例、示例)已经写好了,GitHub repos ( 示例、示例)随时准备为您服务。你应该深入研究矩阵分解吗?
你也许应该在某些时候,但不是第一件事。您应该首先创建一个常识基线。
你能向访问者展示的最简单、最相关的东西是什么?
畅销产品!
当然,它们不是个性化的。但是,畅销产品之所以成为畅销产品,是因为有足够多的访问者购买它们,所以从这个意义上来说,至少有合理比例的访问者会发现它们是相关的,即使它们不是专门为它们选择的。
此外,你无论如何都需要准备好畅销商品,因为你需要一些东西展示给你没有数据的首次访问者。
挑选畅销书很简单。确定一个时间窗口(过去 24 小时,过去 7 天,…),确定一个指标(收入、浏览量等)。),决定重新计算的频率(每小时,每天,…)。),编写查询并将其放入一些自动化中。
你可以用简单的方法调整这个基线,让它变得有点个性化。例如,如果您记得访问者在上次访问中查看的产品类别,您可以简单地从这些特定类别中(而不是从所有类别中)选择最畅销的产品,并在推荐区域中显示它们。在前一次访问中浏览了女装类别的访问者可以在当前访问中看到女装的畅销商品。
明确地说,上面描述的“调整”将涉及开发工作,因为你需要在访问中“记住”信息。但是,如果您计划构建并交付基于模型的个性化推荐,无论如何都需要这样做。
我们的最后一个例子来自零售价格优化。
作为一家服装零售商,你销售季节性商品,例如毛衣,这些商品需要在每个季度末从商店中清理出来,以便为下一季的产品腾出空间。降低这些季节性产品的价格以刺激购物者购买,这是业内的标准做法。
如果你折扣太少,你会在季末有剩余的商品,你将不得不以残值处理掉。如果你打折太多,你会卖完产品,但失去赚更多钱的机会。
在行业中,这种平衡行为被称为清仓优化或降价优化。
关于如何使用数据科学技术建模和解决这个问题,有大量的文献(例如,参见牛津定价管理手册中的第 25 章)。披露:是我写的)。
但是,让我们首先考虑如何创建一个常识基线。
假设您手头有 100 件毛衣,当前季节还剩 4 周。你可以一周改变一次价格,所以你有四次机会做某事。
本周该不该降价?
嗯,首先,这取决于如果你保持价格不变,你认为在接下来的 4 周内你能卖出多少台。
我们怎样才能对此有所了解呢?我们能做的最简单的事情就是看看上周卖出了多少台。
假设我们卖出了 15 台。如果接下来的 4 周与上周相似,我们将售出 60 台,到本季度结束时仍有 40 台未售出。
不太好。显然降价是理所应当的。
零售商有时使用折扣阶梯——20%折扣、30%折扣、40%折扣…——降价必须在阶梯上。最简单的做法是走到阶梯的第级第级,即将下周的价格打八折。
快进一周。假设你上周卖出了 20 台。您现在还剩 80 个单位,还有 3 周时间。如果在接下来的三周内保持相同的销售速度(例如每周 20 台),您将在剩余的三周内售出 60 台,在季末还有 20 台未售出。所以,你又下了一个台阶,把折扣提高到 30%。
你明白了。每周重复,直到赛季结束。
不同的产品可能遵循不同的折扣路径,这取决于它们的销售率对折扣的反应。在下面的例子中,B 项比 a 项需要更多的折扣刺激。
这个常识基线可以用非常简单的 if-then 逻辑来实现。与上面的个性化推荐示例一样,它可以被调整(例如,不是仅使用上周的销售单位作为未来几周的“预测”,而是取最后几周的平均值)。
有了基线,您现在就可以向前迈进,尽您所能在这个问题上投入所有的数据科学火力。但是,将您所做的一切与常识基线的结果进行比较,以准确衡量努力的回报。
在许多问题领域,古老的 80-20 原则仍然有效。常识性的基线通常会让你很快达到 80%。
随着你在这个问题上投入越来越多的数据科学,你会看到更多的价值,但速度会越来越慢。现在,根据您的具体情况,您可能会决定采用复杂的方法来提取最后的价值。但是你应该对增量成本和收益有一个清晰的概念。
最终,常识基线会保护你免受由理查德·费曼著名描述的危险。
第一个原则是你不能欺骗自己——而你是最容易被欺骗的人。
构建数据科学模型可能非常令人愉快,并且很容易让人误以为您复杂的、精心创建和调整的模型比实际情况更好(从成本/收益角度来看)。
常识基线快速传递价值,保护你免受自我伤害。让它们成为一种习惯。
有一种不同的方式来思考这个问题——提升建模——它考虑了给客户发送邮件的增量*效果。
在 Nodeflux 作为人工智能研究科学家的第一次实习
大二学生实习的机会很少,至少在我家附近是这样。我的动机是获得新的经验,了解校园生活是什么样的。通过这篇文章,我将讲述我自己,Nodeflux,以及我作为数据科学家的实习经历,后来从注册到最后经过 2 个月的实习,我的实习经历修改为人工智能研究科学家。
我的一般背景
我的名字是丹迪·瑙法尔迪。在我写这篇文章的时候,我即将开始我在 ITS 信息学系的第三年。我的高中背景是一个喜欢学习数学和物理的书呆子。大概我选择信息学专业就是为了避开生物和化学。在校园里,我总是有兴趣学习新的东西,这可能是我决定不再继续竞争编程 lol 后的“数据科学”之旅的开始。
Nodeflux
你可能从未听说过 Nodeflux。这是一家非常年轻的初创公司,位于雅加达,专注于智能视频分析服务。利用各种知识,你可以从中央电视台的视频流。他们的一些产品是高速公路休息区的车辆计数器,在’ mudik '期间确实帮助了很多人,使用人脸识别技术的员工考勤机,以及 2018 年亚运会的视频监控系统也使用人脸识别技术。他们的口号是“扩展视野,超越想象”。检查他们的网页。
实习前:我如何到达这里
在我的第四个学期,我决定我必须在我的下一个假期实习,以获得新的经验和知识。于是,我开始主要在 IT 创业上寻找实习信息。我在寻找软件工程师的职位。有一次,我 2012 届的学长 Mas Fika 在我的部门脸书小组分享了关于 Nodeflux 实习机会的信息。我不太了解 Nodeflux,之前我只知道 2013 届的 Mas Rizok 不是我们系唯一在 Nodeflux 工作的校友。我只知道他们做 AI 的东西,专注于计算机视觉技术。当时,Nodeflux 面向软件工程师、web 开发人员和 devops 工程师开放职位。我只是认为这是一个机会,我必须申请这一个。
首先,我只是把我的简历发到海报中提供的邮箱。接下来是技术任务。它包括一些与不同领域相关的问题,就像职位空缺一样。所以有一些面向对象的问题,CSS 和 Javascript 的东西,linux 的理解,和机器学习的东西。有很多问题要在 3 天的期限内完成。除了一些我以前从未听说过的 devops 之外,它们都很简单。之后,被选中的候选人将与 Nodeflux 的一些工程师进行在线面试。最初的几个问题之一是我对什么职位感兴趣。我一片空白,忘了有哪些职位空缺。我只是说我对软件工程和机器学习的东西感兴趣*(他们的海报里没有发表,lol)* 。问了一些问题后,问题开始聚焦在 web 开发和数据科学上。有人问我更喜欢 web dev 还是 data scientist,我选择了 data scientist,因为这家公司的专长是人工智能,我认为这将是扩展我知识的一个非常好的机会。几周后,我得到了这个职位。耶!!
日常实习
首先,你需要知道这里的数据科学家不是那种以商业为导向的工作。我们更像人工智能工程师或人工智能研究科学家或机器学习工程师,他们专注于使用人工智能来创造产品或增强产品。有趣的事实是,这里没有数据科学家职位的员工,只有人工智能工程师和人工智能研究科学家。在我实习期间,我有 2 个导师,Mas Rizok(人工智能工程师)和 Mas Alvin(人工智能研究科学家)。第一天,我被要求学习容器概念和 Docker,因为它在这里被大量用于容器化开发环境和产品部署。然后,我得到了一个在整个实习期间要完成的项目,就是制作一个能够从一个人的正面照片预测年龄和性别的模型。查看我的项目这里
With one of my mentor, Mas Rizok (Informatics ITS 2013)
我做这个项目的过程是起起伏伏的。挑战之一是处理这种“脏”数据集,即 IMDB-Wiki 数据集。它包含大量标签错误数据。我花了大约 3 天时间浏览了 20,000 张图片(只有全部部分清理过的数据集的 1/10 ),并设法丢弃了其中的 2000 张,而这实际上只是全部数据的一小部分。让我开心的一件事是获得大量的计算能力。起初,我获得了使用 2 个 GTX 1080Ti + 2 个 16 核英特尔至强的服务器的权限,然后更改为使用 Tesla V100 的 AWS 实例。它们真的很快,我从来没有机会使用这么大的计算能力。
我在这里学到了很多新的技术和方法。它们是人脸检测、人脸对齐、制作双输出模型、多重处理和多线程。在我实习之前,我从来没有处理过这种不适合内存的数据,有一天,我刚刚用完了所有 60 GB 的可用内存,因为我的笨脑袋,然后我学会了如何根据需要加载数据,并通过多处理最小化 I/O 开销。这个项目也是我的第一个项目,我给了很多文件。我试图让其他人也能复制它。在这里,我也熟悉自己阅读论文作为参考,因为他们真的是很好的参考。我在这里学到了很多新东西,直到我可以说我的大部分代码对我来说都是新事物。
后来,当我完成了模型的制作。我的导师要求我建立一个端到端的系统,以实时视频流作为输入来推断模型。在那里,我学会了如何在线程中分离作业,以实现实时视频处理。我还集成了排序跟踪器,后来我知道它使用卡尔曼滤波器作为其主要结构。研究了一下卡尔曼滤波器,我意识到我的线性代数和统计&概率课是值得的。是的,我在实习期间学到的很多新东西实际上是我在校园里所学的东西的实现(操作系统课程、线性代数课程、统计&概率课程,还有其他一些)。
值
在这里,我形成了一些价值观,它们真的帮助我度过了第一次实习。它们是:
- 好奇心:永远要有学习新事物的精神,让它们引导你克服你真正的问题。多搜索,多阅读
- 自信:新的挑战总会向你走来,你必须确保你能做到。坚强的意志真的有帮助。
- 耐心:在你的旅程中可能会遇到障碍,你必须有耐心保持在你的轨道上并始终如一。以后你将能够克服这些问题。
With some of other intern, CEO, and employee. From top left to bottom right: Guntara (SE Intern), Atina (SE Intern), Kak Ilham (SE), Kak Meidy (CEO), Chasni (Web Dev Intern), Dani (AI Intern), Nanda (DevOps Intern), Adi (DevOps Intern), Kevin (SE Intern), Daniel (SE Intern), Me, Kak Anggun (Talent Management)
结论
在实习期间,我得到了所有我想要的东西。我学到了新的东西,认识了伟大的人,向最优秀的人学习,并且能够与他人讨论我的想法。Nodeflux 是一家年轻的初创公司,发展非常迅速。我会把它推荐给任何喜欢体验新事物,解决挑战,当然也想了解更多人工智能的人。这里所有的人都是伟大的人,他们热爱自己的工作,热爱自己的工作。我想感谢 Nodeflux 给我这个好机会,因为这是我的第一次实习,真的很有趣。
Our “Agustusan” event
卡格尔的第一枚银牌
Fig 1. Camera Model Identification Challenge
**问题陈述:**摄像机型号识别
面临的挑战是建立一种算法,通过使用图像中固有的痕迹来识别哪种相机模型捕捉了图像。数据集中的图像来自 10 种不同的相机型号,如下所示:
- 索尼 NEX-7
- 摩托罗拉摩托 X
- 摩托罗拉 Nexus 6
- 摩托罗拉 DROID MAXX
- LG Nexus 5x
- 苹果 iPhone 6
- 苹果 iPhone 4s
- HTC One M7
- 三星银河 S4
- 三星 Galaxy Note 3
解决这个问题对犯罪调查有很大的影响,调查人员可以识别拍摄图像的相机,这有助于验证镜头。
受训模特
ImageNet 模型(如 ResNet、DenseNet 模型)经过微调,可以对前面提到的 10 种不同的摄像机进行分类。微调 ImageNet 权重和训练分类器只不过是迁移学习!!
Fig 2. Transfer Learning
转移学习直觉
假设一个人正在努力学习如何骑自行车/滑板车。
场景 1: 他/她已经知道如何骑自行车,现在他/她正在学习骑滑板车。
场景 2: 他/她正在从头开始学习骑滑板车。
在哪个场景中涉及的学习更多?🤔
显然在第二个场景中正确!
由于这个人是从零开始学骑踏板车,他/她必须学会如何平衡踏板车,习惯不同的功能,如刹车或加速等…这需要花很多时间去学习。而一个已经知道如何骑自行车的人可以在学习骑自行车/踏板车时很容易地转移他的知识。
这同样适用于从零开始训练图像分类器,而不是使用 ImageNet 权重并用较低的学习速率微调权重来训练分类器。
以下是我们在本次比赛中使用的几个模型,并给出了相应的准确度分数。
注:所有模型都用 ImageNet 模型权重初始化。
Fig 3. Accuracy for different models & settings.
作为一个团队,我们提交了大约 63 份作品&最后 3 份作品的最高投票使我们在私人排行榜上排名第 43 位,是的,我们获得了第一枚银牌!!
观察结果&竞赛要点:
- 仅仅微调顶层效果并不好。在卷积神经网络中,所学习的特征是非常特定于任务的,对于这个竞赛分类也是如此,它不是基于图像中存在的内容,而是基于图像中的图片质量、模糊度、噪声模式等… 因此,对用低学习率的 ImageNet 权重初始化的整个模型进行微调对于这场比赛是必要的。
- 与传统的机器学习模型相比,深度学习模型需要大量数据**。增加更多来自 Flickr 的训练样本,准确率提高了 4 - 5%。**
Fig 4. Performance of DL & ML models with increasing data.
- 数据集清洗至关重要(移除 Flickr 数据集中主要来自 moto_x mobile 的不良训练样本)。
- 通过增加类别权重来处理类别不平衡(每个类别约占训练集的 10-15%,Moto X 除外,它仅占训练集的 3%)。
- **TTA(测试时间增加)**在私人排行榜上增加了 1.1%的准确率。
- 合奏 作品!!我们对我们最好的 3 个模型进行了最大投票,这是我们在比赛中的最后一次提交&我们的私人得分增加了大约 0.8%。
如果没有安德烈亚斯·托鲁比亚、伊万·罗马诺夫和格莱布分享来自 Flickr 的额外数据集的想法,获得银牌是很困难的。
如果您有任何想法、意见或问题,请在下面留下评论或在 LinkedIn 上联系我们。
我发表的一些博客:
关注我上 中 阅读更多此类博客。
团队成员:
[## Rajesh Shreedhar Bhat -数据科学家-印度沃尔玛实验室| LinkedIn
Rajesh Shreedhar Bhat 是班加罗尔沃尔玛实验室的数据科学家。他的工作主要集中在…
www.linkedin.com](https://www.linkedin.com/in/rajeshshreedhar)
苏拉布·赫姆卡:https://www.linkedin.com/in/saurabhkhemka
https://www.linkedin.com/in/vignesh-s-53424847
潘卡杰·夏尔马:https://www.linkedin.com/in/pankaj-sharma-ab1016a7
Python 数据科学的第一步— NumPy
我读到过学习的最好方法是写博客。既然我学习数据科学已经有一段时间了,我想为什么不试一试呢。这就是了。我的第一篇博客。
现在,网上有很多优秀的资源,人们可以从中学习。但是,当您刚刚开始时,可用资源的数量会让您有些不知所措。特别是在数据科学领域,你可以找到所有这些热门词汇,如数据科学、人工智能、机器学习、深度学习等等。它变得令人困惑——从哪里开始呢?
如果你像我一样,你会发现一些使用数据科学或人工智能的很酷的应用程序,你会迫不及待地开始自己构建这些应用程序。你将开始学习基础知识,但很快就无法决定如何将它们整合在一起,最终会感到沮丧。我对任何新手的建议是要有耐心。不要看得太远,只关注眼前的事情。一般来说,数据科学或编程是一门艺术,你需要一步一步来。我还没到,但我在努力。
最重要的是开始;第二重要的是坚持下去。
毫无疑问,学习基础知识很重要。但是如果你不能解决任何真正的问题,学习又有什么意义呢?我相信无论你何时学习,你都必须有一个最终目标。我在这篇文章中的目标是尝试解决问题;非常简单的问题,但仍然是问题。从问题到解决方案,分享数据科学第一步的一些基础知识——NumPy。
等等,什么是 NumPy?
NumPy 代表数字 Python。正如文档所述,NumPy 是使用 Python 进行科学计算的基础包。它用于对数组执行数值运算。NumPy 在大小、速度和功能性方面都优于 python list。关于 python list 和 NumPy 数组比较的详细描述可以在这个链接中找到。
在开始使用 NumPy 之前,它需要安装在您的系统中。您可以使用 pip 或 anaconda 安装它。本文中的代码使用 Python3 和随 anaconda 安装的 NumPy。我不会对安装进行详细说明。如何安装 NumPy 见此链接。
说够了。让我们进入正题。
你可以在下面的链接中找到这篇文章的完整代码。
numpy -在解决问题的同时学习 numpy 基础知识
github.com](https://github.com/bajracharya-kshitij/numpy)
在我们开始使用 NumPy 或任何其他包执行任何种类的计算之前,第一步总是导入包。所以,还是导入 NumPy 吧。
import numpy as np
这里,我们给 NumPy 取一个更短的名字— np。这就是所谓的混叠。从今以后,每当我们需要从 NumPy 包中访问任何方法时,我们将使用’ np '来这样做。参见此链接了解更多关于混叠的信息。
我们不是要解决问题吗?
是的。现在我们已经导入了 NumPy,我们可以用它来执行各种计算。那么,现在让我们来定义第一个问题。
问题 1
给你 5 个不同半径和高度的圆柱形容器,高度从 5 厘米到 25 厘米不等。找出
a)每个容器可以容纳的水的体积,
b)所有容器可以容纳的水的总体积,
c)哪个容器可以容纳的最高体积和多少,
d)哪个容器可以容纳的最小体积和多少,
e)容器可以容纳的水的体积的平均值、中间值和标准偏差是多少?
这是基本的算术。我不需要 NumPy 来解决这个问题。
你当然不知道。Python 包是为解决更复杂的问题而构建的,并且能够解决更复杂的问题。但是这里的目的只是给出 NumPy 如何工作的一个基本概念,以便这些技术以后可以应用于更大规模的问题。我只是不想吓跑那些新手。
解决方案 1
首先,我们需要 5 个圆柱形容器的半径和高度。半径和高度的值被定义为在 5 和 25 cm 之间。我们先用变量来定义这些。
no_of_items = 10
lower_limit = 5
upper_limit = 25
项目的数量是 10,因为我们需要 5 个容器中的每一个都有 2 个值——一个是半径,另一个是高度。
稍微提个醒。与网上其他关于 NumPy 的资源不同,这些资源遵循特定的模式或不同属性或方法引入的顺序,本文不会这样做。因为我们的目标是解决手头的问题,所以我们将向前推进,按照有助于我们解决问题的顺序引入概念。所以,这一切都是随机的。说到这里,我们来生成一些随机数。
np.random.seed(0)
values = np.random.randint(lower_limit, upper_limit, no_of_items)
上面有三个参数——下限 5、上限 25 和项目数 10。这个执行的结果是values
将被分配一个由 5 到 25 之间的 10 个随机数组成的 NumPy 数组。这是创建 NumPy 数组的一种方法。注意,这里下限是包含性的,上限是排他性的。所以,25 永远不会出现在数组中。np.random.seed
是一种有趣的方法。它有一个参数(上面的 0 ),它的作用是返回一组随机数。有趣的是,不管你什么时候执行上面的代码块——现在,午饭后或者一年后——你总是得到相同的随机数集合。相比之下,如果从上面的代码块中删除np.random.seed
,每次执行都会得到不同的随机数集合。我在这里使用 0 作为种子,但是您可以使用任何整数;你得到的只是一组不同于我的随机数。
注:也有其他方法产生随机数。np.random.randint
生成整数。如果需要浮点数,可以用np.random.rand
和np.random.randn
。这些你可以自己去探索。
如果你现在打印出values
,你会得到这样一个 NumPy 数组
array([17, 20, 5, 8, 8, 12, 14, 24, 23, 9])
这里我们可以看到,有一个单独的开始和结束方括号。这说明values
是一个一维数组。为了进一步验证这一点,您可以使用values.ndim
,它返回值1
,表示values
是 1D。现在,为了验证数组中实际上有 10 个条目,我们可以使用values.size
,它返回数组的长度10
。此外,要找出列表中包含什么类型的值,您可以使用values.dtype
,在这种情况下,它将返回dtype('int64')
,表示数组包含整数。
接下来,我们通过使用返回(10,)
的values.shape
来看看这个数组的形状。这里逗号分隔每个维度上的项目数。由于values
是 1D,逗号后面没有数字。这些只是熟悉 NumPy 的一些属性。让我们回到问题上来。
所以,我们需要圆柱体的半径和高度,但是现在我们只有一个简单的数字数组。让我们重新组织一下,使数字成对出现,每个气缸一个。为此,我们使用reshape
方法。
no_of_rows = 5
no_of_columns = 2
containers = values.reshape(no_of_rows, no_of_columns)
reshape 方法将 NumPy 数组的形状更改为我们指定的任何维度;唯一的要求是沿着每个维度的项目数的乘积等于项目总数。在这里,我们将values
转换成一个 5 行(每个容器一行)2 列(一列表示半径,另一列表示高度)的 2D 数组,并将其存储在containers
中。现在,如果你打印出containers
,你会看到如下所示。
array([[17, 20],
[ 5, 8],
[ 8, 12],
[14, 24],
[23, 9]])
正如我们所见,有两个左右方括号,所以这是一个 2D 数组。使用containers.ndim
验证这一点。现在形状也变了。试试containers.shape
,你会看到它返回(5,2)
。
现在我们有一个 2D 数组,让我们分开半径和高度数组。为此,我们将使用切片。这里我们只处理两列,所以切片会非常简单。关于切片的深入细节,请参见本教程。
假设第一列代表半径,第二列代表高度。我们来切片containers
。
radius = containers[:,0]
这定义了我们只取所有的行(:)和第一列(0)。同样,对于高度,我们取所有的行(😃,只取第二列(1)。
height = containers[:,1]
现在我们有了半径和高度的所有值,我们终于可以计算圆柱体的体积了。你可能知道,圆柱体的体积可以这样计算:
volume = np.pi*(radius**2)*height
如果我们现在打印volume
,它会返回一个数组,如下所示
array([18158.40553775, 628.31853072, 2412.74315796, 14778.05184249,14957.12262374])
只用一行代码,它就计算出了所有 5 个圆柱体的体积。这里,我们只取了一个包含 5 个元素的 1D 数组。NumPy 能够快速高效地执行多维数组计算,每个维度上有成百上千个项目。这就是 NumPy 的力量。
现在,为了找到所有圆柱体中包含的水的总体积,我们可以简单地将上述数组中所有圆柱体的体积相加。
total_volume = volume.sum()
总容积也可以用另一种方法计算,不用计算单个气缸的容积。方法是计算半径和高度的点积。
radius_squared = np.square(radius)
dot_product = np.dot(radius_squared, height)
total_volume_by_dot_product = np.pi*dot_product
total_volume
和total_volume_by_dot_product
都给出相同的结果。点积在这里有效,因为半径平方和高度都是一维的。对于二维矩阵,它必须满足第一个矩阵的列数必须等于第二个矩阵的行数的要求。因此,如果两个 2D 矩阵具有相同的维数,在执行点积之前,有必要使用np.transpose()
方法找到其中一个矩阵的转置。
现在,要找到哪个圆柱体能容纳最大体积的水,我们可以使用max
方法,这个圆柱体在数组中的索引可以通过使用argmax
方法找到。
max_volume = volume.max()
index_of_max_volume = volume.argmax()
类似地,我们可以使用min
方法来查找最小体积,使用argmin
方法来查找圆柱体在数组中的索引。
min_volume = volume.min()
index_of_min_volume = volume.argmin()
最后,我们可以计算圆柱体体积的平均值、中间值和标准偏差。
volume_mean = np.mean(volume)
volume_median = np.median(volume)
volume_standard_deviation = np.std(volume)
问题 2
从 1 到 25 的 25 张牌随机平均分配给 5 个人。找出每个人的纸牌总数,这样对于第一个人来说,总数是第一张纸牌的价值减去其余纸牌的总数;对于第二个人,总和是第二张牌的值减去其余牌的总和,依此类推。纸牌总数最大的人将获胜。找出赢家。
解决方案 2
这次我们需要从 1 到 25 的 25 个数字。在问题 1 中,我们通过使用np.random.randint
方法生成了一个 NumPy 数组。现在,让我们看看生成 NumPy 数组的第二种方法。这次我们将使用arange
方法。请注意,这是一个安排,而不是安排。
numbers = np.arange(1,26)
和np.random.randint
方法一样,下限是包含性的,上限是排他性的。如果没有定义下限,将导致 NumPy 数组从 0 开始。我们还有一个用于arange
的step
参数,如果定义的话,它将在开始和结束限制之间产生step
的倍数。此时,如果您选中numbers
,您将得到下面的数组。
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25])
现在我们有了从 1 到 25 的卡片,让我们在分发之前洗一下。为此,我们使用np.random.shuffle
。
np.random.shuffle(numbers)
现在,如果我们看一下numbers
,我们将得到一个类似这样的数组。
array([12, 22, 20, 19, 3, 23, 21, 17, 11, 1, 4, 5, 16, 9, 14, 10, 6, 18, 15, 8, 25, 2, 13, 7, 24])
这只是可能的方式之一。这是因为shuffle
方法在每次运行时都会改变numbers
的顺序。你的将会完全不同。
太好了。我们已经洗牌了。现在让我们把它们平均分配给 5 个人,每人 5 张卡片。
reshaped_numbers = numbers.reshape(5,5)
看起来像这样。
array([[12, 22, 20, 19, 3],
[23, 21, 17, 11, 1],
[ 4, 5, 16, 9, 14],
[10, 6, 18, 15, 8],
[25, 2, 13, 7, 24]])
5 张卡片,每张 5 个人,排列成 2D 矩阵。完美。现在,我们需要做的就是找出每个人的总数。为此,添加对角线元素并减去其他元素。因此,第一个人的总和将是12-22-20-19-3
,第二个人的总和将是-23+21-17-11-1
,以此类推。要做到这一点,我们需要一个矩阵,它的对角线元素和上面的一样,但是其他元素都是无效的。首先,让我们用单位矩阵得到对角线。
对“我”的一只眼睛使整个世界变瞎。嗯,除了对角线。
为了生成一个单位矩阵I
,我们使用了eye
方法。由于I
是方阵,我们只需要一个自变量。在这种情况下,我们需要一个 5x5 的矩阵。
I = np.eye(5)
这会生成下面的单位矩阵。
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
现在,如果我们将reshaped_numbers
与I
相乘,一个元素接一个元素的乘法将只保留对角线元素,并删除所有其他元素。
diagonal_matrix = np.multiply(reshaped_numbers,I)
所以,diagonal_matrix
看起来会像下面这样。
array([[12., 0., 0., 0., 0.],
[ 0., 21., 0., 0., 0.],
[ 0., 0., 16., 0., 0.],
[ 0., 0., 0., 15., 0.],
[ 0., 0., 0., 0., 24.]])
接下来,我们需要否定的非对角线元素。要做到这一点,我们只需要一个对角线上为 0,其他地方为-1 的矩阵。如果我们从单位矩阵I
中减去一个单位矩阵U
就可以得到。U
是全 1 的矩阵。U
不需要是一个正方形矩阵,所以我们需要定义行数和列数。
U = np.ones((5,5))
所以,U
现在看起来像
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
请注意,ones
的参数是一个元组(5,5 ),而不像reshape
和其他方法那样只有 5,5。还有一个类似的zeros
方法,生成一个给定形状的全零矩阵。现在,让我们生成我们需要的矩阵。
I_minus_U = I - U
当我们从单位矩阵中推导出单位矩阵时,我们得到下面的矩阵。
array([[ 0., -1., -1., -1., -1.],
[-1., 0., -1., -1., -1.],
[-1., -1., 0., -1., -1.],
[-1., -1., -1., 0., -1.],
[-1., -1., -1., -1., 0.]])
对角线是 0,其余是-1。我们再次执行reshaped_numbers
与I_minus_U
的逐元素乘法,以获得我们需要的矩阵。
negative_diagonal_matrix = np.multiply(reshaped_numbers,I_minus_U)
negative_diagonal_matrix
现在看起来是这样的。
array([[ 0., -22., -20., -19., -3.],
[-23., 0., -17., -11., -1.],
[ -4., -5., 0., -9., -14.],
[-10., -6., -18., 0., -8.],
[-25., -2., -13., -7., 0.]])
现在,我们需要做的就是使用add
方法将diagonal_matrix
和negative_diagonal_matrix
结合起来。
combined_matrix = np.add(diagonal_matrix, negative_diagonal_matrix)
元素相加的结果是combined_matrix
看起来像这样。
array([[ 12., -22., -20., -19., -3.],
[-23., 21., -17., -11., -1.],
[ -4., -5., 16., -9., -14.],
[-10., -6., -18., 15., -8.],
[-25., -2., -13., -7., 24.]])
最后,剩下要做的就是对combined_matrix
执行逐行加法。
sum_matrix = combined_matrix.sum(axis=1)
这里,axis=1
执行逐行加法。如果需要按列添加,请使用axis=0
。
最后,您将得到一个矩阵,其中包含每个人的总和,如下所示。
array([-52., -31., -16., -27., -23.])
数字最高的就是赢家。为了找到赢家的指数,我们使用argmax
。
winner = np.argmax(sum_matrix)
更新:
正如@ Payal Bhatia 在她的回复中提到的,上述内容在技术上是列方式的添加,而不是行方式的添加。乍看之下,我们似乎在做逐行加法,而这正是我们想要的。但是,NumPy sum 的工作方式比这要复杂一些。点击下面的链接可以更直观地了解 NumPy sum 是如何工作的。
如果你不清楚 NumPy 是什么或者它是如何工作的,请先看看这篇文章。
towardsdatascience.com](/understanding-numpy-sum-1587eec69527)
问题 3
给你一根 5 米长的绳子。将绳子分成 9 段,每段长度相等。
解决方案 3
我们需要在等距离的点切断绳子,这样就有 9 个部分。所以,除了start
和end
点,我们还需要 8 点;一共 10 分。
start = 0
end = 5
no_of_points = 10
为了找到等距点,我们使用linspace
方法。
np.linspace(start, end, no_of_points)
这将为我们提供下面的数组。
array([0\. , 0.55555556, 1.11111111, 1.66666667, 2.22222222,
2.77777778, 3.33333333, 3.88888889, 4.44444444, 5\. ])
所以,除去数组中的第一个和最后一个条目,剩下的就是绳子必须被切断的点,这样我们就有 9 个等长的部分。
linspace
常与arange
混淆。arange
通过使用第三个参数作为一个步骤,生成一个从头到尾(排除)的 NumPy 数组。linspace
通过使用第三个参数作为两端之间要计算的点数,生成一个 NumPy 数组,该数组包含从开始到结束(包括)的等距点。
我想做很酷的东西,不是这个。
当然,这篇文章没有包含任何花哨的可视化效果,也没有介绍任何可以展示的酷模型。但是,NumPy 是所有即将出现的酷东西的基本构件。此外,这篇文章并没有涵盖所有关于 NumPy 的知识。但是现在你很擅长自己探索。这是这篇文章的结尾,但也是数据科学中其他一切的开始。
在下一篇文章中,我们将关注数据科学中的另一个基础包——熊猫。
既然我们已经迈出了数据科学的第一步,
towardsdatascience.com](/beginning-to-walk-the-data-science-road-part-1-pandas-series-920e2237c336)
关于卡格尔的初步想法
大约两周前,我报名参加了我的第一个 Kaggle 竞赛,即梅赛德斯-奔驰绿色制造竞赛。我的代码可以在这里找到,我尝试的日志可以在这里找到。以下是我对 Kaggle 的第一印象:
学习曲线
进入大赛,我唯一的机器学习知识来自麻省理工的入门课(6.036)。因此,我惊喜地发现,卡格尔竞赛对那些之前经验很少的人来说是完全可以参加的。这很大程度上是由于 Kaggle 的内核,它允许更有经验的 Kaggle 用户与其他人公开分享他们的代码。内核甚至允许那些完全不熟悉机器学习的人在排名中具有竞争力— 通过简单地复制代码,任何人都可以取得与 Kaggle 老手不相上下的结果。
我发现,在我尝试改进内核代码的过程中,我收到了关于机器学习中多个概念的简要介绍,其中许多概念我希望在未来写得更透彻:
- 梯度增强树
- 超参数调谐
- 降维:主成分分析,独立分量分析,tSNE,逻辑主成分分析,TSVD,GRP,SRP
- 过度拟合、K 倍交叉验证、非折叠预测
- 集合、堆叠和平均
- Sklearn 型号:套索、ElasticNet 等。
- 基本特征选择和特征工程
- 可能性编码(赛后)
在我看来,这个比赛是一个快速“边做边学”的好方法。很难在网上找到任何其他像 Kaggle 这样有助于学习数据科学概念的资源。
排行榜的不可预测性
从最终排名的大规模调整可以看出,公共排行榜对于预测私人排行榜来说完全不可靠:几乎所有在比赛中领先的人最终都下降了数百个排名。然而,即使是交叉验证也被证明是无用的:我的最终模型,用 5 重 CV 评估,并不比我在第四天制作的严重过度拟合的 XGBoost 模型表现得更好。
Public and Private LB scores for my 36 submissions — a few past models made it over the bronze cutoff!
最后,事实证明有可靠的方法来测试一个模型——尽管在大多数情况下,参赛者(包括我)对评估他们模型的表现不够彻底。
Kaggle 的竞赛社区
对于 Kaggle 的社区,我只有积极的话要说。用户提交的关于比赛的内核和线程大大鼓励了参赛者之间的合作。在比赛期间,许多用户在公开论坛上一起工作,改进彼此的模型并讨论数据集的属性。本次比赛是参赛者共同努力的众多成果之一,通过排行榜探测,从测试数据集中发现了 32 个 y 值。
结论
我发现参加这次比赛非常愉快!虽然我的最终排名(~ 1400 名)有点令人失望,但比赛非常有趣,让我学到了很多东西,我计划将来在 Kaggle 上更加活跃。如果您有任何反馈,请告诉我——也许更多关于 Kaggle 的报道将很快出现。😃
2017 年应用数据科学的第一个周末
本周末,学生们学习了应用数据科学课程中教授的许多机器学习技术的基础知识。他们温习了线性代数、统计学和复杂性理论。此外,他们还学习了 Python 中的自动化测试,以及如何编写可读和可维护的测试,以获得信心并促进代码协作。
最大的收获是对我们在这门课中所做的所有工作背后的理论有了一个真正清晰而简明的理解。正如 Thibaut 提到的,你可以在不参加这个周末的情况下获得对这个项目 85%的理解,但是有了它,你就有了能够更深入地探索这些概念的基础知识。这样当你面临一个问题时,你就可以理解它背后的理论,并提出一个更新颖的解决方案。那是我的关键外卖。
从我的背景(没有任何强大的数学经验)来看这些材料是非常令人生畏的,但我现在知道了我需要在接下来的两周内学习的关键技术,并积累了一些工作知识。
为了让我理解这个理论,将我们所做的应用到现实世界的例子和工作案例中是非常有用的。在本课程之外,我正在处理一个大数据问题,但我们没有数据科学团队来探索它。因此,我将从这个周末开始思考我们在开发解决方案时忽略的一些事情,以及我们如何从不同的角度看待这个问题。
Rupert Prescot,产品经理
我真的很期待即将到来的回归模块和覆盖神经网络的最后一个周末。但是你需要掌握数学才能达到目的——这是我们都在努力的。
Suresh Gangaiah,计算机科学毕业生
一些关键要点。当谈到特征向量和特征值时,Thibaut 把它们框起来,作为描绘矩阵和得到足迹的一种方式。我喜欢承认每种技术对你有什么帮助的想法。在这种情况下,您希望了解以后需要的某些特征。他在会议中也有一个关于规范的线索,这是一个很好的方式来加强这个概念的重要性。
安东·苏斯,经济学家
如果您希望提升您目前的技能,了解前沿的行业方法,并在数据科学领域开始职业生涯, 现在就申请在 2018 年加入我们。
机器学习简介:使用 TensorFlow 对 Kaggle 数据集应用逻辑回归
Machine Learning can create complexly beautiful systems. Source: Pixabay.
经过几天的特征工程和探索性分析,机器学习是完美的甜点。
如果你一直关注我以前的帖子,你已经读过这个,和这个,在那里我分析了这个 Kaggle 数据集。我查看了奥运会项目及其参与者的历史,将分析缩小到几个方面:
- 赢得奖牌。
- 随着时间的推移,女性和男性的参与情况。
- 给定性别,每个运动项目运动员的身高和体重统计。
最后,我提到使用数据开发机器学习模型可能会很有趣。
让我想到的是看到运动员的体重和身高与他们在生物学上是男是女之间的强烈关联。这让我想到,应该有可能将运动员性别的预测建模为一个分类问题。
因此,在我的第一篇机器学习文章中,我们将看看如何预测奥运会运动员的性别(为了简洁起见,从现在起我将使用单词 sex 来指代生物性别)。为了实现这一点,我们将用我们能找到的最好的特征来建模这个问题。
我们将使用 TensorFlow 构建模型。
在这第一部分中,我们将看一个简单的逻辑回归,它实际上实现了比我预期的更好的性能。在接下来的文章中,我们可能会关注更复杂的模型,比如深度神经网络。然而,我坚信,在事情变得更复杂之前,我们应该从用我们可能使用的最简单的模型来解决问题开始。
虽然我将添加相关的代码片段,但我鼓励你跟随笔记本上的这个 GitHub 项目,尤其是如果你想试验代码并实际运行它的话。
但首先,几个定义。
机器学习
机器学习是人工智能的一个分支。它包含各种算法,但它们的共同点是能够从输入中“学习”。
它们通常需要大量的数据才能真正学到东西,但如果训练得当,它们会非常强大。在机器学习可以解决的许多问题(图像合成、欺诈预防、推荐系统)中,许多都属于分类的范畴:为建模数据的某个样本分配一个或多个标签。在这种特殊情况下,我们将为数据的每个样本(每个运动员)分配一个标签(男性或女性)。
逻辑回归
早在古代(50 年代),英国统计学家大卫·考克斯发明了一种算法,在给定某些变量的情况下预测事件的概率。
在给定上下文的情况下,逻辑回归为二元事件分配一定的概率(从 0 到 1)。为了使用它,我们将首先创建输入向量,其中每个向量对应于一名运动员,向量的每个字段是该运动员的一个(数字)特征(例如,他们的体重或身高)。
然后,我们将尝试预测其中一个字段为 1 或 0 的概率(例如,在我们的例子中,1 可能意味着女性和男性)。
它通过以下方式做到这一点
- 在输入要素中执行仿射变换,即,将它们乘以一个矩阵,并向乘积中添加一个偏差向量。我们称矩阵和偏差向量的元素为“权重”。
- 用 sigmoid 函数组合该运算,该函数将整个实数域中的数字“处理”成介于 0 和 1 之间的(仍然是无限的)数字。这给了结果一个概率的概念。
- 用代价函数惩罚模型(在我们的例子中,我们将使用交叉熵):如果我们希望模型学习某样东西,我们将不得不惩罚它没有学习它…
- 找到成本函数(我们希望最小化)的梯度作为模型权重的函数。
- 向相反方向稍微更新权重,由称为“学习率”的常数指示,以便在下一次迭代中降低成本函数。
这个循环反复执行,多次迭代整个输入集。这些迭代中的每一次都被称为“时期”。
最终,该函数收敛到一个值,该值通常是成本函数的局部最小值。然而,这并不能保证是一个全球最小值。
这整个过程被称为“训练”模型。模型训练完成后,我们将通过测量其准确性来了解它的表现:它做出的预测中有多少是正确的,除以它总共做出的预测数。用统计学术语来说,在整个预测集合中,模型有多少真阳性和真阴性。
在这个小小的介绍之后,我鼓励你进一步阅读维基百科,也许是一本书。我特别喜欢奥莱利版。
变脏:预处理数据。
我们终于可以从本文中实用、有趣的部分开始了。为了让模型消费数据,我们必须首先决定 CSV 的哪些列是相关的,并将它们转换成数值。这包括像“运动”这样的分类特征。
保留正确的列
对于这个特殊的问题,我认为我们实际上能找到的有用的栏目只有身高、体重、参加过的运动、性别。我还会添加每个运动员的名字,因为我们可能希望检查他们的独特性。
我们不希望参加一个以上项目的运动员使我们的数据有偏差。为了避免这种情况,我们只为它们中的每一个选择一行。我假设他们的体重和身高在不同的项目之间不会有太大的差异,而且也没有太多的运动员每次都尝试不同的运动。为了挑选出独特的运动员,我们将使用我们的数据框架的 groupby 方法,并将称为独特的方法。
我们看到,现在我们的数据集中有近 10 万名独特的运动员,他们从事 55 种不同的运动。
分类列的一键编码
具有 55 个不同分类值的列对于机器学习模型来说是难以消化的。正因为如此,我们将对它使用一次性编码。这意味着我们将把一个有 55 个可能不同值的向量,变成 55 个二进制向量。听起来很复杂?手工编码会有点麻烦。幸运的是,熊猫有一个内置的方法来保护我们。这是一个热门的编码片段。
就像这样, df_one_hot_encode 是一个 54×100k 的矩阵,每行只有一个非零值,这个值总是 1。 drop first 参数使其丢弃其中一个类别,因为“所有列都是 0”本身可能就是一个类别。
转换为 NumPy 数组
编码完成后,我们向其中添加身高和体重列,当然还有我们的标签。
最后,我们将完全放弃数据帧,转而使用 NumPy 数组,因为 TensorFlow 接受矩阵作为输入。我马上承认我不像对熊猫那样精通数字。如果以下任何一行太难看,请告诉我,我会修改它们。
这是我们将数据帧转换成矩阵的方法:
我的热心读者可能想知道为什么我真的放弃了体育专栏。老实说,我尝试了几种不同的方法,但运动只会给模型增加噪声。如果有人能想出巧妙使用它们的方法(可能通过相关性将它们分组为几个集群,但我今天没有尝试),请分叉该项目并这样做。我很想看到有趣的结果。
我正在做的另一件有争议的事情是使用两列,一列用于男性(二进制),一列用于女性(1-男性)。为了对多个列进行回归,我们将使用 softmax 转换,这是针对多类分类问题的 sigmoid 的推广。它以依赖的方式给每个类分配一个概率,所以它们加起来都是 1。这可能有些矫枉过正,但这将使修改这段代码来预测更广泛的类别变得非常容易(比如,预测体育…?)以后。
实际机器学习:Tensorflow 中的逻辑回归。
定义我们的模型
任何不导入配置文件的好 TensorFlow 程序都是从官僚主义开始的。我保证会好起来的。
在这里,我们定义模型的输入数量(每个特征一个)和输出数量(2 个,一个男性,一个女性)。我们还设置了学习率(每次下降时梯度将“跳跃”多远),定义了模型并初始化了权重变量。
值得注意的一件有趣的事情是 TensorFlow 变量是延迟求值的:它们不会有任何值,直到我们在一个会话中运行它们。打印它们只会显示它们是 tf 变量,而不会实际得到值。这允许许多优化,例如许多加法和减法可以压缩成一个。
在下面的片段中,我们将讨论如何训练和评估机器学习模型。
我们定义精确度,并设置一个优化器(梯度下降)。我们还添加了成本函数(所有输入的交叉熵的平均值)。训练我们的模型
最后,这个美丽的片段实际上开始了训练,我们可以看到我们的逻辑回归在起作用。
注意我们如何简单地在每个时期迭代输入,并运行优化器。由于 TensorFlow 函数是惰性的,我们必须通过从 *tf 调用 run 来初始化它们。Session,*并在一个 feed_dict term 中传递它们的变量值(在起床遇到一些麻烦后,它们最终被初始化)。
在每个时期结束时,我们打印精确度,这是我们一直试图优化的指标。
请注意,我们在与训练数据集完全不同的数据集上测量准确性。这样做是为了避免过度拟合:机器学习模型可能会开始简单地记住它的输入,并在被问及时重复给你,而不是实际学习从数据中进行归纳。我想象的方式是用三次多项式拟合一条线上的几个点:当然它会拟合它们,但是问它另一个点可能在哪里,它可以指向线外的任何地方。
结论和见解
这是整个代码介绍,但现在让我们做一些实际的数据科学。
我首先运行训练,用所有 56 个输入输入模型。结果相当糟糕,准确率低于 60%。这个模型基本上只是猜测每个人都是男性。因此,它的表现只能达到允许的等级不平衡(70%的运动员是男性)的水平。不仅如此,在预测女运动员的少数情况下,它通常是错误的。我的理论是,过于稀疏的体育投入只会增加噪音。
我去掉了它们,尝试了一个非常简单的模型,它只关注身高和体重。它过拟合数据的速度如此之快,以至于在一个时期内就预测了 100%的雄性。你自己试试,你会发现这是真的。
起初我认为我一定是初始化变量错误或什么的,所以我传递给它一个全女性的训练集。然后它开始预测 100%是雌性,所以很明显它实际上是在学习。
我试着将数据标准化,我终于看到了一些结果。然而,这比再次预测所有男性好不了多少。
最后,我求助于一个老把戏。我给模型添加了新的非线性特征:不仅包括体重和身高,还包括它们的比例、乘积、正方形和立方体,所有这些都是标准化的。
模型达到了 76%的准确率。这意味着在某些情况下必须正确地猜测两性(比我今天所做的任何事情都要好),实际上比随机猜测要好很多。
为了生成这些特性,我使用了下面的代码片段:
我希望你喜欢这个对机器学习这个巨大世界的小小介绍。将来,我们可能会用一个完全不同的模型来解决这个问题(提示:深入思考*),也许会用一种更直观的方式来观察模型的表现。*
像往常一样,代码可以在 GitHub 项目的上获得。如果你想改进它,或者添加任何其他功能,请随意。我的准则就是你的准则。
如果你觉得这篇文章的任何部分不够清楚,或者有更好的解释方法,请告诉我。你的反馈对我很有帮助,意义重大。
如果你是机器学习的新手,我希望你觉得这篇介绍有用,或者至少有趣。我也希望很快能再见到你。
关注我获取更多数据科学和机器学习教程。如果你还没有这样做,请在 twitter 上关注我,看看我什么时候写一篇新文章。
原载于 2018 年 9 月 18 日www . dataden . tech*。*
每个数据科学家都应该阅读的五本与数据科学无关的书
我在 2010 年为华盛顿大学(UW)的一个班级写了第一行 R 代码。当我意识到编码比电子表格强大得多时,我就着了迷。在过去的十年里,我见证了“数据科学”一词的广泛使用,也见证了大数据、商业智能、分析以及现在的人工智能等术语的兴衰。
我在 UW 大学上的课是“计算金融”,就像今天的深度学习课一样,很容易就挤满了一个相当大的演讲厅。当时,金融危机对每个人都记忆犹新。对于工程师来说,这是一个不太微妙的信息;如果你想得到一份高薪工作,那就进入金融行业,成为一名定量分析师,就像今天的数据科学一样。在商业运作中直接使用数学的概念非常有趣,不仅用于决策支持,还用于实时决策。然而,金融危机也暴露出,即便是最复杂的模型,也不足以应对现实世界的混乱局面。
许多人认为,金融危机的核心是一个获得诺贝尔奖的微分方程;布莱克-斯科尔斯期权定价模型。这个模型被用来衡量巨额投资的风险,却没有理解其内在的局限性和隐含的假设。这种技术上的盲目为灾难性的经济损失创造了条件。
今天,有抱负的数据科学家被鼓励学习一系列令人难以置信的建模技术。每一种方法,比如线性回归,都有自己的一套哲学,你通过它的使用内在地认同它(知道或不知道)。这就产生了一批准备部署模型的新员工,他们并不了解实际发生了什么。年轻的社区没有解决技术盲问题,而是参与了关于工具的代理争论(R vs. Python!).
为了帮助解决这个问题(我也深受其害),我提供了一份简短的阅读书目,从哲学上帮助数据科学家做好准备。此外,在部署模型之前,他们会激发关于模型的技术假设的问题。这个列表并不详尽,书中的主题从有趣到激烈。金融工程的影响力很大,因为它比其他任何学科都更能培养出通用数据科学家。
- Incerto: 这本书是纳西姆·塔勒布的作品集,其中最著名的是《黑天鹅》,在我看来最好的是《反脆弱》。塔勒布是现代最伟大的风险、不确定性和定量建模问题的思想家。他也是一个推特巨魔,因为他叫出了那些“聪明但白痴”的 IYI 人。从背景来看,他是一名移民衍生品交易员,后来成为了数学哲学家。你要么爱他,要么恨他,因为他会在他所有的作品中不断挑战你的假设。如果他写了什么,你应该马上把它放在你的阅读清单上。
- 《财富》公式:麻省理工学院早期诞生的一个公式(凯利标准)的故事,该公式被认为是大量金融成功的背后原因。你将了解信息论之父(克劳德·香农)以及后来在埃德·索普的《击败庄家》中出名的算牌骗局的开端。索普现在被认为是量化对冲基金的教父。最重要的是,这本书展示了如何一个好的模型不能永远被忽视,但坏的模型可以烧伤你。这个故事也是历史上第一次计算机科学和数学合作解决现实世界的问题(只是碰巧是为了赌博)。这个故事是数据科学行业创建 60 年前的一个伏笔。
- 混沌——造就一门新科学:最年轻的科学的详细历史。既是混沌的历史,也是对这一主题的通俗易懂的回顾。这本书将让读者了解我们模拟现实世界的能力的局限性。由于非线性过程的性质,今天开发和部署的许多深度学习模型无法真正理解。这本书将帮助你理解这些局限性。此外,对伯努瓦·曼德尔布罗个人生活和工作的全面回顾使其成为任何数据科学家的必读之作。詹姆斯·格雷克是一位了不起的作家,他还有许多其他优秀的书籍可以添加到你的阅读清单中。
- 暗池:一个程序员永远改变了股市交易的故事。如今,预测模型被部署在高频交易领域,决策以纳秒级的速度做出。这本书讲述了这个隐藏但强大的生态系统的创建过程。这个故事的奇妙之处在于,它阐明了当你知道一些代码时,许多问题是如何解决的。它还表明,创造真正的价值是做真正创新的事情,而不是依赖于现有的假设。有时候你必须有点疯狂才能解决难题。
- 不会消亡的理论:贝叶斯公式和贝叶斯统计的历史以及它的竞争对手,频率主义者。统计的历史和关键技术主题的简单语言评论使这本书至关重要。您将了解历史上一些最伟大的人物,如 Pierre Laplace 和 R.A. Fischer,以及他们的哲学如何在几个世纪内塑造了世界的数据方法。
这五本书虽然不详尽,但将有助于为研究现实世界问题的数据科学家建立哲学基础。不要重蹈 10 年前宽客们的覆辙。寻求从哲学上理解技术和模型,而不仅仅是机械地理解,我们的职业将变得无价
我在联合国数据科学实习的五个教训
当我听说联合国开发计划署全球脉动的工作时,我认为这简直是电影里的情节。社会影响数据科学听起来是我能用数学做的最酷的事情。
我在人生的不同阶段培养了对数学、经济学和计算机科学的热情。在加州大学洛杉矶分校,我不得不整天戴着不同的帽子,在撰写数学证明、研究经济理论和编写计算机程序之间转换。直到今年夏天,我一直在分别追求这三个令人兴奋的领域。
以下是我在联合国全球脉动实验室(PLJ)工作期间,从研究、数据、经济和我自己身上学到的一些经验。
1.你几乎可以把每个问题都归结为一个数学问题
我不得不在一周内对数亿个数据点实现聚类算法,对机器学习一无所知。幸运的是,我是一名数学专业的学生——我的数学背景确实有助于我从头开始理解所使用的算法。
some of the 345678938241861414201280 plots I had to look at
例如,理解主成分分析(PCA)背后的线性代数在我解释 R 中漂亮的可视化以决定特征选择时是有回报的。当 PCA 的概念被描述为**“通过代数方法识别几何相似性的机制”(Jauregui,2012)** ,或者,我认为它是映射数据指向由协方差的特征向量确定的最重要的‘方向’(相关性?)数据集独立变量的矩阵。这些概念对我来说是有意义的,因为它们背后的数学是有意义的。
我对数学有了更多的欣赏,因为我已经将它们应用到了现实生活的项目中。这就像我上个季度的‘为什么’时刻(为什么我需要正交化特征向量?为什么会有一百万个特征值定理?等等。)都得到了回答——这些都是无价的启示。
但是现实生活中的问题不仅仅是数学问题。还有许多其他层次的活动部件需要考虑。
2.使(表面上的)对立面相交
我从未见过像 PLJ 这样多元化的团队。我在 quant 研究团队工作,但我经常参加社会系统团队的研讨会和讲座,内容涉及城市规划、海洋生物学和社会经济调查以及许多其他主题。
PLJ 的研究展示了公共部门数据科学研究的两个领域是如何深深交织在一起的。这场名为“机器学习评估贫困”的黑客马拉松式活动聚集了全国各地备受尊敬的研究人员,进行了为期 3 天的数据探索和分析,以了解更多关于印度尼西亚贫困的信息。看着统计学家和计算机科学家与社会科学家和政府官员在同一个研究项目上工作,并见证他们的专业知识相互借鉴,令人深思。
让看似不相关的领域的专家参与进来,对我来说是一种富有洞察力的实践。在向实验室提交我的项目时,我在社会系统项目经理的建议下定性地定义了我的分析的目标和影响。他们的建议指导我完善我的研究目标,并考虑我的发现对政策制定者的影响——一些我戴着数学家帽子也不会想到的事情。
这是我实习期间最喜欢的经历之一,甚至可能是整个领域的经历:将不可能的点连接起来,并赋予它们一些概率。
3.开放数据,开放创新,开放政府…
我们生活在一个分享就是关爱的世界。分享知识创造协同效应和市场效率。当我们将创新和数据交给合适的人时,它们最为重要。
我是通过 quant 研究团队的其他成员的工作了解到开放政府的概念的,他们为印度尼西亚开放政府工作,并在印度尼西亚城市进行数据开放的测量。我对印度尼西亚作为一个新兴经济体成为一个更加开放的经济体所取得的进步感到惊讶。像 Satu Data Indonesia、BappenasRI、Jakarta Smart City 等组织和许多其他组织都是该实验室的密切合作者,他们的工作也极大地启发了我关于机构层面“开放”的想法。
how cool is this!??
我了解到,这种开放性需要通过内部和外部各种利益相关者之间的合作和沟通对话来培养。由于分享知识(尤其是关于分享什么、如何分享、为什么我们应该分享的对话)往往被低估,因此还有许多工作要做。为了高效和多产地实施大数据工具,需要一个强大的大数据基础设施,并且理想情况下应将其视为一种公共产品。
4.握手和交接
也就是说,“强大的授权实体(解读:公共部门)之间的握手,允许将权力移交给那些有希望、雄心、灵感和想法的人(解读:私营部门),让我们的国家变得更好”。我是在阅读安尼什·乔普拉的《创新的国度》时产生这个想法的,这本书是我一直以来最喜欢的书之一。书中讨论的观点帮助我理解了技术在公共部门的潜力,以及政府作为推动技术发展的工具所扮演的角色。如上所述,拥有一个开放的政府是一种方法。
我开始明白这句话在实验室的实际含义。虽然 UN Global Pulse 不是一家私营公司,但该组织采用了相关技术和与大多数初创公司类似的好奇心态。然而,该团队有责任倡导技术,并将其与现有的政府/社会结构相结合。PLJ 与政府密切合作,为决策建立数据驱动的平台。这项任务需要多种多样的技能,以始终如一地应对各种激励措施,并委派不同学科领域的任务,所有这些都建立在相互信任的基础上。不容易。这需要承诺和尊重,以及高水平的专业技术。这在技术上和社会上都具有挑战性。
5.战胜你的恐惧和不安全感(冒名顶替综合症太真实了!)
我是实验室里最年轻、经验最少、技术最差的人,最初让我感到恐惧和不安全。与此同时,我感到非常幸运和谦卑,每天都能从如此优秀和热情的同龄人那里学习,我选择拥抱这种感觉。
我转向生产力和乐观来减少我的冒名顶替综合症。我孜孜不倦地倾听、提问、超前研究并坚持不懈,直到找到合适的答案并解决问题。谷歌搜索东西,不怕问,永不放弃让我找到了正确的地方。
我个人发现,持续改进的最好习惯之一就是让自己走出舒适区。关键是在这个过程中保持坚强和集中。
这篇文章只是对我的经历的简单回顾,这些经验只是我在数据科学之旅的起点。我一直热爱数学和创造性的问题解决方法,但我知道我渴望在我的职业生涯中坚持一个目标,为社会公益和/或经济发展做出贡献。当我的个人价值观与团队的使命一致时,我每天早上去上班都会感觉很好。
参考资料:
杰夫,你好。"线性代数中的主成分分析."Math.union.edu,2012 年 8 月 31 日,www.math.union.edu/~jaureguj/PCA.pdf.
我在 HARA 大学数据科学实习的五个教训
对于社会影响来说,还有什么比数据科学更酷的呢?不多,但通过基于区块链的数据交换的数据授权,将印度尼西亚农业置于聚光灯下,已经足够接近了。介绍 HARA。
Okay the screen capture doesn’t do justice for all the coolness here: https://haratoken.io, or read HARA Token’s medium here: https://medium.com/@HARAToken
给我印象最深的是 HARA 是如何以创业的心态和精力应对经济发展的宏伟使命的:
HARA 的使命是创造一个繁荣的农业经济,让数据成为农业的新商品。通过智能合约使用区块链,HARA 透明和可追踪的数据交换确保每个参与者都有动力提供可靠的数据。
实习是我第一次接触到与其他数据科学家和软件工程师一起在初创公司工作。我有了一个最酷的机会,在 Dattabot 的 HARA 数据科学团队工作了六周,从事一个计算机视觉项目。以下是我在研究数据、区块链科技对社会的影响以及新兴经济体中的初创企业生态系统时学到的一些经验。
1.各种景点
计算机视觉和数字图像处理对我来说是新的领域——我以前从来没有把图像当作数据。我们怎么可能使用面向对象编程来分析一幅图像呢?我们如何在分解数据后综合洞察?什么样的数据会被编码并对我们人类有用?
我被存储在数字图像处理基础中的数学优雅和严谨惊呆了。直方图表示图像强度,矩阵表示过滤器,梯度向量表示边缘。一个非常有趣的概念是边缘和轮廓,这对我们人类的视觉系统非常重要。其主要思想是,人类可以通过其轮廓明确地分辨出一个物体:我们可以通过一阶导数的概念(梯度),通过沿特定方向的局部强度变化来描述边缘,一阶导数是相对于空间距离的变化量。
Gradient based image detection, a fundamental concept to HOG-based algorithm I implemented for my custom object detector
另一个令人兴奋的时刻是当我看到关于线性卷积的一节时,它是图像处理中线性滤波器的基础。我在概率论中彻底研究过卷积,在信号处理中也听说过,但从没听说过它在数字图像处理中的应用。我在独立随机变量和的上下文中理解卷积,从两个或多个简单的求和/积分中梳理出一个更困难的求和/积分,或者更一般地说,是两个函数在一个扫过另一个时有多少重叠的度量。
Watch here: https://www.youtube.com/watch?v=N-zd-T17uiE
我一点也不知道卷积可以用来消除“噪声”像素,并为图片创建平滑效果。
From convolving random variables to convolving image pixels
正如首席数据科学家马斯·维斯努(Mas Wisnu)用他自己的话说:“数学主义”。
我花了几个小时来分析数字图像处理中的微积分和线性代数,这真的给了“一张图片胜过千言万语”这句话另一层含义。我现在看数字图像,我看到数据。
2.学习如何学习
HARA 数据科学团队中的每个人都有数学背景,但背景非常多样化。所以我们有很多关于数学的辩论,但更多的时候,我是从失败的一方开始。我有一些同事的行业经验和数学知识,我想迎头赶上。我需要找到一种在工作中融入主动学习的方法。
作为一名数学专业的学生,我通过经典的教科书路线学习数学:指定阅读、习题集、讨论。在我的整个实习期间,我接受了挑战,要采取一种不同的学习方法,一种更加以问题为导向和好奇心驱动而不是理论驱动的方法。我同时阅读了几本不同的教科书,搜索了 Stack Overflow、Math StackExchange、YouTube 教程……我的任务要求我研究新的、前沿的方法和算法,并从那时起解构其背后的数学。我的重点是从里到外研究相关的主题——基础和微妙之处——尽可能高效地解决我遇到的问题。理解工具背后的数学原理与调整或定制它们以适应我的项目是相关的。
此外,通过我们随意的交谈和辩论,我遇到了许多其他感兴趣的话题。这真的很有趣——我没有机会谈论频率主义者与贝叶斯统计、股票市场和金融工程、天体物理学、数据科学的高尚应用(以及许多其他有趣的话题!)日常。这些讨论让我保持头脑清醒,缩短了工作时间。
3.数据民主化
当我读到 Dattabot 和 HARA 时,给我留下最深印象的是该公司民主化数据的愿景:“通过一次一个字节的数据赋予数十亿人权力”。
我支持开放数据,开源项目,让每个人都可以访问数据。今天,在你的个人电脑上设置 Python、R、C++和用几行代码编写机器学习程序很容易。随着物联网的兴起,生成数据、用云存储存储数据以及其他许多简化数据收集的技术进步也变得更加容易。
然而,数据项目始于我们人类为解决问题或学习洞察力而强加的问题。人们将数据和工具转化为信息和知识。像 HARA 这样的平台激励人们(数据提供者、数据鉴定者、数据购买者……)接受以数据为中心的决策和操作,是引领数据民主化革命的关键。
帮助每个人访问和理解数据的想法被称为数据民主化。数据民主化意味着打破孤岛,随时随地提供所需的数据访问。
-创新企业
今天,数据民主化的想法听起来可能是乌托邦和理想主义的,但我认为 HARA 及其平台可以通过迎合相关利益攸关方的激励,推动印度尼西亚食品和农业产业向正确的方向发展。
4.弄脏你的手和脚。一路。
在夏初,我告诉自己,我想在数据科学方面有所建树。夏末,我感觉自己一头扎进了数据科学的流沙中。从好的方面来说。
我带着 2 个小时的 Python 经验来到我的办公桌前,我立即被分配了一个项目,为印度尼西亚国民身份证创建自定义对象检测器。然后,该探测器将用于帮助验证农民从 HARA 移动应用程序提交给数据交换的照片。
第一周,我一头扎进了数字成像和机器学习的教科书和论文中,在我的浏览器上一直有至少一百个标签。我专注于逐步解决 bug 和问题,并快速获得正确的答案,以跟上其他团队成员(参见第 2 课!),到最终独立推进项目。
对我来说,被我周围的人才吓倒太容易了,但是我已经学会了接受一种对我的工作不自私的心态。最重要的是,我希望项目和我的团队取得成功,为此我不怕弄脏自己的手。
5.STEM 中的女性(不存在)
Haha, I do two kinds of modeling for HARA
HARA 工程团队主要是男性。我是数据科学团队中唯一的女性。在决定从事 STEM 职业后,我已经熟悉了女性在该领域的代表性不足。我从事的每一项数据科学工作,对我来说这个问题都变得更加真实。我参与的每一项任务都成为我争取 STEM 平等机会的机会。我的个人使命是通过我的个人工作倡导科学、技术、工程和数学领域的女性,并帮助其他女性在科学、技术、工程和数学领域增强自身能力。更多关于这个话题的内容,期待另一篇中型文章!
今年夏天,我非常幸运地参加了两次实习,每次实习都让我学到了关于数据科学对社会影响的有意义的课程。这很困难;有些日子,我不得不在周末或在家工作,不得不牺牲闲暇时间,一天中的大部分时间我都在学习等等。然而,每一次奋斗都证明是值得的,我也越来越喜欢我所做的事情。
参考资料:
"介绍卷积:直觉+卷积定理."介绍卷积:直觉+卷积定理,YouTube,2018 年 4 月 21 日,【www.youtube.com/watch?v=N-zd-T17uiE.
麦凯、伊恩等人数字图像处理的原理:基本技术。斯普林格伦敦,2009 年。
潘纳曼,埃利奥特。"初学者指南:数据民主化|文章|首席数据官."文章|创新|创新企业,2016 年 9 月 1 日,channels . the Innovation Enterprise . com/Articles/初学者-数据民主化指南。
PT Mediatrac 系统。"基于区块链的全球透明数据交换."haratoken.io/. HARA 令牌
五分钟到你自己的网站
(Source)
如何使用 GitHub Pages 和 Jekyll 开始创建自己的完全免费的博客
建立自己的网站在几个层面上都是有益的。有机会向朋友、家人和潜在的雇主展示你的作品,有机会为制作某样东西而自豪,有机会根据自己的喜好设计(非常小的)一部分网页。
虽然 Medium 是开始写博客的一个很好的选择,因为有限的功能让专注于写作,但最终,像我一样,你会希望自己的网站成为你工作的中心位置。幸运的是,我们生活在一个充满创造力的伟大时代,你可以使用免费工具在几分钟内建立一个网站。
在这篇文章中,我们将看到如何使用 Jekyll 站点生成器和 GitHub 页面来构建和发布一个简单的博客,而不需要编码。如果你想了解最终产品,你可以看看我的(工作进展)网站。
Jekyll 和 GitHub 页面
Jekyll 是一个简单的静态站点生成器。这意味着它获取纯文本文件,并将其呈现为一个网站,然后可以通过 web 托管服务提供给 web。这项服务的一个选项是 GitHub Pages,免费的“通过 GitHub 托管和发布的网站”
使用 Jekyll + GitHub Pages,您网站的源文件位于 GitHub 存储库中,该存储库会自动发布到 web 上。基本上,Jekyll 将存储库中的文本文档转换成一个网站,然后该网站由 GitHub 托管。你唯一要担心的是写文章和编辑一些文本文件,让事情看起来像你想要的那样。正如杰基尔设计理念所述:
Jekyll 不会妨碍你,让你专注于真正重要的事情:你的内容。
你可以按照 GitHub 上的这个指南建立一个新的空白网站。然而,如果你想尽快制作一个简单的博客,一个更好的选择是 fork(GitHub 术语,意思是复制)Jekyll Now 资源库,它已经构建了一个博客布局并准备发布。
分叉后,进入你的账户下的存储库设置,把名字改成username.github.io
。
Fork the Jekyll Now repository and change the name to username.github.io
几分钟后,您就可以在浏览器中导航到 username.github.io,并看到您的新网站发布在网络上!它还不是真正属于你的,但是你可以通过几个步骤来修复它。
Default Jekyll Now website
通过克隆存储库并在您喜欢的文本编辑器中打开它们,您可以在本地编辑任何网站文件。然后,当你提交并推送你的更改到 GitHub 时,网站会自动更新。然而,我强烈推荐在线散文编辑器,而不是本地编辑。
散文编辑
散文让你更容易看到你所有的文件,快速做出修改,并在你保存后提交和推送到 GitHub。你必须向 GitHub 认证散文,然后才能开始改进你的博客。例如,要开始个性化网站,请编辑_config.yaml
文件:
Editing _config.yaml in Prose editor.
点击保存后,可以在线看到这些更改。
Website after making changes to config file.
写博客文章
Jekyll 中的所有博客帖子都是用 Markdown 编写的,这是一种轻量级语言,可以转换成 HTML 或许多其他格式。它非常容易学习,在网络上无处不在,并且提供了很多机会来定制你的文章,这是你在媒体上做不到的。
你网站上的文章位于_posts/
文件夹中,当你编辑并保存散文文件时,你可以看到它们出现在你的博客上。遵循命名惯例:date-title.md
,你的帖子将自动出现在你的网站上,并正确命名和标注日期。
Editing Markdown document in Prose (left) and post as is appears on website (right).
如果你已经在 Medium 上发布了文章,你可以使用这个 Chrome 扩展或者这个命令行工具将它们转换成 Markdown。转换并不完美,但稍加编辑,你就可以将你的中型作品快速导出到你的博客中。这是我写的一篇关于从现有的媒体文章到降价的文章,解决了我发现的几个问题。
更进一步
你自己的网站的好处是你可以控制事物外观的每个方面,并添加任何你想要的功能。首先在存储库中挖掘文件,并查看 Jekyll 文档。例如,要更改字体和样式,请编辑style.scss
文件,要启用帖子评论等功能,请编辑_config.yaml
。你甚至可以通过像 Hover 这样的网站域名注册商购买一个自定义域名,并遵循这个指南。
Jekyll 的好处是,如果你只想专注于写作,你可以保留默认设置,这样你就会有一个干净、像样的博客。如果你想做出改变,那么你想走多远就走多远。例如,我在我的关于页面的中添加了一个动态代码编辑器,让它更有趣:
Live coding editing on my about page.
结论
如果你因为担心时间和成本而迟迟不写博客,那么现在是时候开始了。使用 GitHub Pages 和 Jekyll,你可以在五分钟内免费拥有自己的博客!
提醒一下,这些步骤是:
- 将 Jekyll Now 存储库转到您的 GitHub 帐户。
- 将回购更名为
username.github.io
。您的网站现已发布。 - 在散文在线编辑器中对网站文件进行更改,并保存以更新网站。从改变
_config.yaml
开始,在_posts/
添加你的降价帖子。 - 通过阅读文档、查看其他网站或尝试,尽可能地扩展/定制网站
对于那些已经拥有中型文章的人来说,这里有一个将它们转移到 Markdown 的指南。如果你不知道,那么这里有一些关于写数据科学项目的帮助。最后,走出去,建立一个属于你自己的网站!
一如既往,我欢迎评论和反馈。可以通过 Twitter @koehrsen_will 或我的个人 GitHub pages 网站 willk.online 找到我。
NPS 客户情感分析的五个实际应用案例
玛娅·安杰洛曾经说过:
“人们会忘记你说过的话,会忘记你做过的事,但人们永远不会忘记你带给他们的感受。”
麦肯锡最近的一项研究结果表明这对企业意味着什么:在积极的客户体验之后,超过 85%的客户购买了更多。在一次消极的经历之后,超过 70%的人减少了购买。因此,弄错这一点可能会被证明是一项代价高昂的工作。
与其依赖假设,企业如何确切地知道是什么让客户感觉他们正在接受优质服务?
答案在于对客户情绪的深度分析。如果客户关于如何提高指标的反馈没有被战略性地用来做出积极的改变,那么跟踪 NPS ( 净推广者得分)这样的简单指标是毫无意义的,即使与收入有直接的联系。在这篇文章中,我们揭示了客户情绪分析不仅仅是分配一个积极/消极的标签。此外,我们解释了如何深化这一分析,并从结果中实际受益。
NPS 还不够吗?
NPS 等原始指标提供了某种程度的客户情绪意识。然而,研究表明NPS 过于宽泛,遗漏了许多关于顾客感受的有用细节。甚至在调查客户不高兴的具体原因之前,许多诋毁者仍然可以积极地谈论他们所接受的服务的要素。推销者可以详述他们不喜欢的元素,尽管他们整体上喜欢这项服务。
通过更准确地分析情绪,特别是发现人们真正不高兴的事情,你可以更专注于什么会有所不同。一个贬低他人但积极表达的人不太可能告诉全世界他们的问题。热情的人会。
什么是情感分析?
最常见的情感分析指的是给一段文本分配一个度量,该度量详细描述了所述文本是积极的还是消极的。这个度量也被称为极性,因为它返回一个范围从+1(极正)到-1(极负)的一维值。通过使用阈值,可以将评论分成定义好的类别:正面、负面或中性。无论情绪是否受到抑制,分数都需要标准化,以消除人们表达自己的方式的特殊性。
一个算法是如何做到这一点的?最简单的算法使用字典来查找哪个单词或短语表示哪个情感。如果一条短信说“你所需要的是爱”,它会将其标记为积极的。如果一条短信说“我仍然没有找到我要找的东西”,它就标记为否定。这种字典或基于知识的方法在某种程度上是有效的。然而,使用机器学习的高级算法可以捕捉细微差别。例如,“血腥的”如果用在短语“血腥的优秀”中,实际上可能是一个积极的指示。这些算法从大型数据集学习,这些数据集通常已经由人们根据什么构成积极和消极进行了分级。
使用机器学习的高级算法可以捕捉细微差别,例如“血腥”实际上可能是一个积极的指标,如果用在短语“血腥的优秀”中
使用相同的原理,基于字典和机器学习的方法也可以确定更具体的情绪,如沮丧、愤怒或快乐。
准确性取决于测试数据集与用于开发字典或机器学习模型的数据集的相似程度。如果数据集之间没有什么共同点,那么两者的表现都会很差。
客户情绪分析为什么不一样?
将情感分析应用到客户所说的话上有点困难,原因有两个:他们说了多少,以及他们如何说话。
第一个区别很容易理解:评论和 NPS 评论通常是简短的文本片段。这意味着每段文本在决定其分类时只提供了很少的信息。大多数算法被设计成处理像新闻文章这样的大块文本。他们可能不做顾客评论。
第二,客户写支持票的方式与他们回复调查或给朋友写脸书帖子的方式不同。在支持票的情况下,它们将(希望)更真实,而脸书邮报将是非正式的,不太具体。如果使用相同的分析,那么分配给每个人的情感将会不太准确。重要的是使分析适合于介质。
为什么顾客情绪的各个方面很重要?
客户情绪本身并不总是有用的,因为它并没有描述为什么客户会有这种感觉。客户对什么特别满意或不满意?为了找到答案,企业需要识别顾客评论的方面。例如,在酒店中,这些方面可能是“客户服务”、“房间大小”或“清洁度”。
如何在代码框架中使用方面和情感分析类别的示例
更深入的分析也能发现具体的反复出现的主题。比如‘早餐面包不够’或者‘客房服务太慢’。这些很重要,因为它们更容易理解和执行。确定这些主题是可操作的洞察力的圣杯。它将有针对性地有效改善客户服务。
方面和主题提取的困难在于识别人们可能引用同一事物的许多不同方式。例如,当谈到“酒店房间的清洁度”时,顾客可能会使用“干净”、“整洁”、“肮脏”、“满是灰尘”等词语,以及“看起来像垃圾场”、“可以在地板上吃东西”等短语。一个有效的客户情绪分析练习不仅要捕捉情绪,还要捕捉企业收到的每条客户反馈的各个方面和主题。
客户情绪分析有哪些用例?
你对收集情感感兴趣,你能用它做什么?这里有 5 个用例,将增强您的客户体验战略。
Google Shopping 使用的一个示例界面,用于显示客户评论中各方面的观点。
1.以个人为目标来改善他们的服务
通过抓住对你的产品或服务有强烈负面感觉的客户,客户服务可以有针对性地处理他们的问题。想象一下一个顾客留下了一个负面评价 -0.95 的愤怒。无论是通过个人接触还是通过优先处理他们的票证,行动都有助于缓和局势。如果 Dick 's Sporting Goods 能够识别那些在退货过程中真正有问题的人,他们就能确保客户服务优先考虑他们。
2.随着时间的推移跟踪客户情绪
跟踪与业务特定方面相关的客户情绪比只跟踪 NPS 更有效。分析可以解释为什么 NPS 评分发生了变化;或者如果分数没变,可能在哪些方面发生了变化。在上面的迪克体育用品的例子中,值得跟踪的具体方面是“客户服务”和“退货政策”。
3.确定特定的客户群是否对你的公司有更强烈的感觉
当与人口统计和其他定量数据配对时,就有可能细分客户群并孤立地观察他们的情绪。例如,消费较少的顾客感觉更消极(因此这是他们增加消费的障碍)还是退货政策问题来自迈阿密的顾客而不是纽约的顾客?
4.跟踪产品或服务的变化如何影响客户的感受
随着业务的变化,客户情绪也在变化。发布营销活动或新闻稿,改变产品的界面或价格结构都会产生影响。跟踪客户情绪可以衡量这一点。
分数的变化可以表明变化是否在情感上引起了客户的共鸣并且是成功的。跟踪情绪会帮助你迅速改正任何错误。
如果你知道每个回应的方面和主题,你也可以回答这样的问题:人们对产品价格上涨的负面反应持续了多久,或者他们真的喜欢增加的新功能吗?如果迪克体育用品公司推出一项以竞争性价格为重点的活动,他们会清楚地看到人们是否反应良好。
5.确定你的关键推动者和诋毁者
客户可能会对你业务的许多方面发表评论,但是哪些方面会影响你的 NPS 分数呢?一点点数据科学会帮你回答这个问题。通过将方面与促进者和贬低者相关联,可以显示哪一个对原始 NPS 分数的影响更大。
深信不疑?以下是你可以开始的方法
希望现在,你已经在问如何将情感分析应用到你自己的客户反馈中。第一件也是最重要的事情是收集数据。虽然有很多公司专门收集客户反馈,但即使是像通过调查猴子进行调查或使用 Zendesk 等客户服务软件的内置功能这样简单的事情也能产生大量有趣的数据。
接下来是分析:为每个评论分配情感分数并确定关键方面。您可以通过手动阅读和编码评论,或者通过使用专注于客户情绪分析的软件或产品来实现这一点。
最后,使用分析结果来实施我们关于如何改善客户体验的五条建议。仪表板和报告可用于将这些新信息呈现给需要查看的人。
今天你需要知道的五个 Python 技巧
无论你是高级人工智能工程师还是一年级生物学生,你都会在某个时候碰到 Python 编程语言。Python 于 1991 年首次发布,很快成为程序员和技术人员最喜欢使用的语言。根据高收入国家的堆栈溢出问题视图,Python 正迅速成为最受欢迎的语言选择。
The Incredible Growth of Python- David Robinson
作为一种语法相对简单的高级解释语言,Python 对于那些没有编程经验的人来说是完美的。流行的 Python 库被很好地集成并用于不同的领域,如生物信息学( biopython )、数据科学(熊猫)、机器学习( keras / tensorflow )甚至天文学( astropy )。在学习了 C 和 Java 作为我的第一门编程语言后,我能够在谷歌搜索的几周内自学 Python。尽管执行速度比 Java 和其他语言慢得多,但 Python 实际上通过良好构建的流程集成特性提高了生产率。
在我们开始之前,我强烈推荐你去看看 Dan Bader 的 Python 技巧书。在他的书中,Dan 分享了一些非常有用的技巧和窍门,告诉我们如何用 Python 更有效地编码。如果你对 Python 一无所知,我强烈建议你开始学习 Code Academy 的 Learn Python 互动课程。
招数№1:强大的俏皮话
您是否厌倦了通读一行行代码并迷失在条件语句中?Python 一行程序可能正是您正在寻找的。例如,条件语句
**>>> if** alpha > 7:
**>>>** beta = 999
**>>> elif** alpha == 7:
**>>>** beta = 99
**>>> else**:
**>>>** beta = 0
真的可以简化为:
**>>>** beta = 999 **if** alpha > 7 **else** 99 **if** alpha == 7 **else** 0
这太荒谬了!如果您对自己编写的代码多加注意,您总会发现可以简化为一行程序的地方。除了条件语句,for
循环也可以简化。例如,在四行中加倍一个整数列表
**>>>** lst = [1, 3, 5]
**>>>** doubled = []
**>>>** **for** num **in** lst:
**>>>** doubled.append(num*2)
可以简化为一行:
**>>>** doubled = [num * 2 for num in lst]
当然,如果您将所有内容都链接到一行程序中,可能会有点混乱。确保不要在代码中过度使用一行程序,因为有人可能会认为大量使用一行程序是“不符合 Pythonic 规范的”。
**>>> import** pprint; pprint.pprint(zip(('Byte', 'KByte', 'MByte', 'GByte', 'TByte'), (1 << 10*i for i in xrange(5))))
诀窍№2:快速字符串操作
字符串操作可能很棘手(没有双关的意思),但是 Python 隐藏了一些捷径,使您的生活变得非常容易。要反转一个字符串,我们只需添加::-1
作为列表索引
**>>>** a = "ilovepython"
**>>> print** a[::-1]
nohtypevoli
同样的技巧也适用于整数列表。在 Python 中,字符串操作非常容易。例如,如果您想使用以下预定义变量str1
、str2
和lst3
输出一个句子
**>>>** str1 = "Totally"
**>>>** str2 = "Awesome"
**>>>** lst3 = ["Omg", "You", "Are"]
简单地使用.join()
方法和算术运算符来创建想要的句子。
**>>> print** ' '.join(lst3)
Omg You Are
**>>> print** ' '.join(lst3)+' '+str1+' '+str2
Omg You Are Totally Awesome
除了字符串操作,我还推荐阅读更多关于 regex(正则表达式)的内容,以便有效地搜索字符串和过滤模式。
招数№3:嵌套列表组合
itertools
可能是我最喜欢的 Python 库之一。假设您的代码有十几个列表,经过一些操作后,您得到了一个深度嵌套的列表。这正是你解决这种语法混乱所需要的。
**>>> import** itertools
**>>>** flatten = lambda x: list(itertools.chain.from_iterable(x))
**>>>** s = [['"', 'An', 'investment'], ['in'], ['knowledge'], ['pays'], ['the', 'best'], ['interest."', '--'], ['Benjamin'], ['Franklin']]
**>>> print**(' '.join(flatten(s)))
" An investment in knowledge pays the best interest." -- Benjamin Franklin
从上面的例子可以看出,我们可以使用。join()
和itertools
。itertools
中的.combinations()
方法也是从输入 iterable 返回元素长度子序列的强大工具。点击此处阅读更多关于itertools
的信息。
绝招№4:简单的数据结构
回到招数№1 ,在 Python 中使用一行程序初始化数据结构也是非常容易的。Harold Cooper 使用以下代码实现了一个单行树结构:
**>>> def** tree(): **return** defaultdict(tree)
上面显示的代码简单地定义了一个树,它是一个字典,默认值是 trees。其他一行函数,如质数生成器
**>>>** **reduce**( (**lambda** r,x: r-**set**(**range**(x**2,N,x)) **if** (x **in** r) **else** r),
**range**(2,N), **set**(**range**(2,N)))
可以在 Github 和堆栈溢出中找到。Python 也有强大的库,比如Collections
,它将帮助您解决各种现实生活中的问题,而无需编写冗长的代码。
**>>>** **from** collections **import** Counter
**>>>** myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]
**>>> print**(Counter(myList))
Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})
绝招№5:打印变得容易
最后一个技巧是我希望早点知道的。原来打印一个字符串数组作为一个逗号分隔的字符串,我们不需要使用.join()
和循环。
**>>>** row = ["1", "bob", "developer", "python"]
**>>>** **print**(','.join(str(x) **for** x **in** row))
1,bob,developer,python
这个简单的一行程序就可以了:
**>>> print**(*row, sep=',')
1,bob,developer,python
另一个巧妙的打印技巧是利用enumerate
。enumerate
是 Python 的内置函数,非常有用。所以不用写四行代码来打印
**>>>** iterable = ['a','b','c']
**>>>** c = 0
**>>>** for item in iterable:
**>>> ** print c, item
**>>> ** c+= 1
0 a
1 b
2 c
同样的事情只需要两行代码就可以完成
**>>>** for c, item in enumerate(iterable):
**>>> ** print c, item
Python 中有几十万种打印技巧,如漂亮打印pprint
。如果你知道一个巧妙的 Python 技巧,请在下面评论!
感谢您阅读我的文章。
机器学习工具箱的 5 种回归类型
机器学习领域发展迅速。然而,一些经验丰富的技术仍然存在。最重要的是回归技术。2017 年,60%的 KDNuggets 调查受访者将它们列为他们前一年使用的技术:
最新的 KDnuggets 民意调查询问:在过去 12 个月中,您使用了哪些数据科学/机器学习方法和工具…
www.kdnuggets.com](https://www.kdnuggets.com/2017/12/top-data-science-machine-learning-methods.html)
只要这个数字一样高,你在机器学习生涯中就会遇到退步。即使你自己不使用它们,了解不同的味道和它们解决的问题也是很重要的。
在这篇文章中,我为你提供了五个不同回归的快速概述。我还添加了一些链接和提示来帮助您迈出第一步。
1.逻辑回归
逻辑回归对二元目标进行分类。如果您想将它应用于您的分类问题,请花些时间仔细看看 sklearn 中的实现。基本的想法很简单,但是有很多方法可以微调这个方法。
**提示:**默认情况下,逻辑回归——和许多其他变量一样——假设所有特征对结果变量都有独立的(也称为加性的)线性影响。如果这个假设在你的用例中不成立,考虑交互效果或者其他方法来包含特性之间的复杂关系。
2.有序逻辑回归
如果你有一个排序目标变量的机器学习问题,使用有序逻辑回归。例如星级评定或小规模调查。通常的做法是将这些情况建模为度量或多类问题。然而,这些替代方案淡化了目标的序数特征。只是用有序逻辑回归代替。这种回归技术不太为人所知,但却非常强大。如果你想试试的话,可以看看 Python 中的mord 包。
**提示:**与逻辑回归相比,有序逻辑回归的输出看起来相似。然而,对结果的解释更加困难。特别是优势比在这里可能会产生很大的误导。
3.普通最小二乘法
对度量变量使用普通最小二乘法(OLS)。该模型以及对结果的解释都很简单。Python 的实现在 sklearn 和 statsmodels 中都可用。
提示: OLS 依赖于几个真实数据经常违反的假设。结果的后果可能是巨大的。查看这里对最重要的假设的详细解释。
4.计数数据回归
计数数据回归是一组处理目标变量的方法,这些变量的值总是正数和整数。由此产生的数据通常是非常不准确的。参见这篇关于各种选项的精彩文章:
选择适当的盘点模型来分析离散盘点结果的关键标准之一是相对值…
www.theanalysisfactor.com](https://www.theanalysisfactor.com/poisson-or-negative-binomial-using-count-model-diagnostics-to-select-a-model/)
提示:底层发行版的选择至关重要。确保您使用了可用的测试来选择正确的测试。
5.正则化技术
正则化是防止过度拟合的一种方法。在回归技术的背景下,有两种正则化:L1 和 L2。如果你使用 L1,你是在应用所谓的套索回归。如果你使用 L2,你是在使用岭回归。在第一种情况下,模型倾向于将系数设置为零。在第二种情况下,它试图在整个范围内保持较小的系数。在弹性网中还实现了两种技术的组合。
正则化本身是一个话题,但是由于 sklearn 中的实现,它们很容易使用。关于 L1 和 L2 的详细解释,请看这里:
[## L1 和 L2 正则化方法
机器学习
towardsdatascience.com](/l1-and-l2-regularization-methods-ce25e7fc831c)
提示:了解每种方法会产生什么类型的输出是至关重要的。例如,如果你有两个相关的特征,套索随机选择其中一个,而弹性网选择两个。
你用什么回归,为什么?请在评论中或在 Twitter 上告诉我。我也很乐意在 LinkedIn 上联系。感谢阅读,留点👏🏻如果这对你有帮助,让我们继续学习吧!
使用法律数据改进起草工作的五个步骤
法律数据非常有价值。在保险领域,关于保单条款平均相似性得分的数据(衡量一个条款相对于一组旨在实现相同功能的其他类似条款的相对相似性或差异)可用于即时显示一个保单与另一个保单的对比情况。关于网络政策构成的数据可以用来揭示某项政策可能遗漏了哪些条款或信息。
然而,为了释放这些数据的价值,法律专业人士需要了解如何正确利用这些数据。这样做的一个最直接的背景是起草法律语言。我认为,这里的关键是让数据在基本层面上易于消化。
几个月前,我有幸有机会在 KC Cyber 的一个小组上发言,这是一个当地的网络安全会议,讨论管理网络风险的经济有效的策略。我们的小组特别寻求回答有关信息安全和网络责任保险之间的相互作用的问题。然而,活动结束后,一位观众提出的一个问题一直困扰着我,也是这篇文章的灵感来源。问题是,“*网络责任保险政策的基本组成部分是什么?”*这个问题之所以一直困扰着我,是因为它有助于将我长期以来一直纠结的一个问题联系起来——如何有效地使用政策数据,使起草法律文件的过程更有效、更容易理解。
photo credit: Heather Otto
我对这个问题的直接回答是参考了伍德夫、索耶和他的公司在网络风险核心组成部分上的一些发现。在概念层面上,网络政策应该涵盖四种常见的网络风险:隐私、网络安全、错误&遗漏和媒体责任。学法律的我会说,这是一个实质多于形式的问题;这些一般风险概念的管理方式因组而异,但作为参考点,这些一般概念可作为数据驱动分析的一个步骤。在对需要管理的风险有了大致的了解之后,可以使用同一组数据来帮助确定更具体的政策语言,从而为组织提供更可靠的风险管理框架。
然而,这些策略并不局限于网络责任保险。事实上,数据的使用——将众多政策、合同或文件与机器学习算法、自然语言处理和其他计算机科学技术相结合的最终结果——可以帮助识别任何一组文件中的缺失和分歧区域。
从更普遍的角度来看,我想提出一个策略,使用政策数据来识别不同的政策语言、缺失的覆盖部分,并为识别和理解网络风险的流程带来更高的透明度。
为了起草更全面的网络责任政策,承保人、律师和其他风险管理专业人员应该 1)列出需要管理的风险类型,2)列出政策的语言(列出存在的条款、不存在的条款、相似性得分和要管理的风险类型),3)使用关于缺失条款和风险类型的数据将缺失条款添加到政策中,4)使用关于低相似性得分和要管理的风险类型的数据改进政策的薄弱环节,以及 5)根据政策的变化评估新的政策数据。
使用数据改进起草工作的 5 个步骤
1)风险清单
2)政策语言清单
3)使用缺失条款的数据匹配风险类型
4)使用得分较高条款的数据全面提高相似性得分
5)重新评估更新的政策
继续使用网络责任政策语言作为一个用例,让我们通过分析下面用红色圈出的政策来浏览这些步骤并解释这在实践中是什么样子,Aviva 的工程产品“网络”扩展语言。在整个过程中需要注意的一个重要事实是,与其他法律文本一样,某些网络政策措辞可能是为了狭隘的目的而构建的,并被整合到一个更大的政策或一套文件中。
风险清单
从基础知识开始,让我们假设要涵盖的风险类型是 Woodruff、Sawyer 和 Co .概述的网络风险类型——隐私、网络安全、错误&遗漏和媒体责任。可以预见的是,根据风险清单的细微差别,这一步会更加稳健。
保险单语言清单 为了了解保险单所涵盖的风险类型,查看保险单的保险协议部分是有帮助的。保险协议部分是真正的核心政策。保单中的其他内容用于解释如何解释这些条款,定义保险协议条款中的词语,显示适用保险协议必须满足的条件,确定保险范围的除外责任,建立保险范围的限制,以及起草人可能决定添加或排除的任何其他内容。
查看前面提到的 Aviva 文档(网络扩展措辞),可以清楚地看到,这一特殊政策仅旨在确保与数据安全漏洞相关的事件管理,以及因某些个人数据丢失、被盗或意外泄露而导致的其他义务。例如,本文档中的保险协议部分涵盖了与“因保险期间发现的数据安全漏洞而产生的费用”相关的赔偿
识别缺失条款
在粒度级别上,有许多类型的条款可能在策略中缺失,并导致其成为异常值。不需要大量的统计知识就可以看出,平均的子句簇在 75 到 125 个子句之间,平均相似性分数在 85 左右。
然后,通过获取关于哪些政策得分较高、哪些条款对于得分较高的政策最常见以及哪些条款是异常值或出现频率较低的数据,起草者可以获得关于此类政策中通常会发现的其他条款的实时反馈。
作为一个购买政策的组织,了解这份具体的文件实际上可以作为英杰华网络电子媒体核心政策的延伸会有所帮助。通过合并两份文件的条款数量,并对英杰华电子媒体核心政策及其工程产品“网络”扩展词的新评分集进行平均,结果(上图中的红圈)是新政策在长度方面更符合行业内的其他政策,但与我们的网络指数的其余部分的平均相似度仍低于 80%。
考虑到上下文的其余部分,即该组合政策中确实没有完全涵盖隐私或媒体责任的内容,浏览条款库、找到这些部分的条款并继续构建涵盖我们通过风险清单确定的所有风险的更全面的政策并不困难。
审查和修改低评分条款
在简要查看文件中的低评分条款时,我确定了与网络责任市场的其他条款相比最薄弱的政策领域(排除—先前行为、排除—故意行为、排除—费用、罚款和罚金以及限额—可扣除),并对其进行了更新,以包括不同政策中得分较高的政策语言。结果是整个策略的平均相似性得分从 76%上升到 78%。让我对这一分析感到兴奋的是,这一增长仅仅是通过改变 71 个条款中的 5 个来实现的。如果对其他 66 个条款进行审查和修改,那么与现有的其他政策相比,gains 可能会提高其排名。
重新评估更新后的政策
看看我在这个练习中所做的,在尝试创建一个强大的、通用的网络责任政策之前,我还想改变一些事情。例如,我想添加有关隐私、错误和遗漏的条款,并用其他得分较低的条款替换得分较高的条款。通过这样做,将相似性分数提高到 90%以上并拥有对许多人有价值和有用的东西并不是不可想象的。
在整个起草过程中持续使用和创建数据,将有助于以更加迭代、透明和开放的流程来审查和管理不同类型的风险。对于那些起草这类政策的人来说,它可以减少花在研究上的时间,并为缺乏经验的起草者提供一个衡量标准。对于那些希望了解实际应该有什么政策的人来说,数据可以成为一种工具,教人们什么时候适用某些条款或规定,以及在什么情况下其他条款或规定应该适用。
度过周四的五种方式
令我有些惊讶的是,我的 之前的 对美国时间使用调查的分析最终强调了我们的相似之处,而不是我们的不同之处。事实证明,我们并没有太大的不同。我认为这是有希望的。
不过,到目前为止,我主要着眼于更高层次的行为,比较了大约五个、十个或二十个不同的活动。还有更多的东西需要挖掘。在最细的层面上,ATUS 提供了 13 年来大约 170,000 天的报告和 400 项活动。其中一些活动是无处不在的(睡觉、吃东西、看电视、洗碗和工作),而另一些活动则很少见(击剑和观看举重/力量训练各只出现一次,如果你正在寻找一种新的爱好让自己与众不同的话)。
偏斜、稀疏、中等维度的数据。这将描述一组推文,就像它描述手头的数据一样。为什么不把每一个活动都当成一个词,把每一个报道的日子都当成一个文档,并对其应用一些文本挖掘技术呢?
采矿偏见— tf-idf
tf-idf 是一种挑选表示文本的单词的算法。通过查找在一个文档中比在其他文档中出现得更频繁的单词,它给出了该文档是关于什么的想法。单词“”在大多数文本中频繁出现,因此意义不大,而多次包含“选举”的文档可能与政治或时事有关。
应用于我们数据的 tf-idf 假设将睡眠视为睡眠*:每个人都做的事情,因此在强调差异方面没有什么价值。另一方面,打篮球在青少年经常做但 70 岁老人很少做的事情中不会让我们感到惊讶。*
大家试一试吧,挑出十大活动。
你瞧,不同年龄组之间肯定有明显的差异。对我们的年轻人来说,学校和体育运动会出现。当孩子们到来时,我们的细节围绕着他们。过了 50 岁,孙子出现了,然后房子周围就有了静物。
尽管如此,这些发现似乎很老套,几乎就像一幅漫画。请记住:在解释这些结果时,我们需要精确。长条的长度并不能说明我们做每件事花了多少时间。相反,它向每个年龄段的人展示了每样东西的独特性。并不是所有 75-84 岁的老人都要照顾家里的其他成年人——大概是他们的老年配偶——而是那些照顾家里成年人的人更有可能是老年人。
这份名单有一种怪异的人情味。从某种意义上来说,这是一份刻板印象甚至偏见的清单,它不一定列出了许多人做了什么,而是列出了那些通常做这些事的人是谁。
父母对非父母
让我们尝试另一个维度:父母与非父母。在这里,我将简单地把那些有孩子住在家里的人称为“父母”,把那些没有孩子住在家里的人称为“非父母”。
同样,我们必须精确地解释结果。不是花时间的问题,而是独特性的问题。不言而喻,照看孩子的人就是父母。结果的后半部分更有趣一点。没有母亲的人的特别活动是瑜伽、有氧运动、跳舞和照顾宠物,而没有父亲的人则拿着枪或棍子回到他们的根源,或拿着棍子追球。
现在,这对于刻板印象来说怎么样?
但稍后会详细介绍。
度过周四的五种方式
让我们尝试第二种文本挖掘技术:主题建模。在文本分析中,主题建模意味着基于属于一起但使桶不同的单词将文档聚集在一组桶中。然后我可以用这些单词来找出有哪些不同的主题。例如,我将 LDA 应用于 2017 年 4 月下旬的一组新闻论文。我可能会以一个包含“朝鲜”和“导弹发射”等词的主题结束,而另一个包含“特朗普”、“100 天”、“天”等词。LDA 不仅把我的东西放在桶里,还很方便地告诉我为什么。
不过,要应用 LDA,我首先必须决定我希望看到的桶的数量。因为我追求可读性,所以我的目标是少数几个。我只是尝试了 3 到 7 之间的值,并坚持使用 5,因为这给出了有趣且主观上不太重叠的结果。此外,我选择只将周四作为一周工作中的任意一天进行分析。
Five ways to spend a Thursday
LDA 把东西放在桶里,并告诉我们为什么,但要由我们来解释这些原因。我在图表中添加了一些人口统计数据,以帮助理解每个群体。这些人口统计数据没有用于分析或分类,而是在之后添加的。
看看 LDA 认为重要的词,我们每天做的五组事情似乎是,从上到下:
- 不折不扣的老年生活
- 学习(“孩子”指生活在家庭中的孩子,大概包括兄弟姐妹)
- 呆在家里,家庭主妇和丈夫:ing,育儿
- 正常的一天工作
- 居家老人生活
结论
我确信盒子里有更强大的工具来进行这些分析。如果没有别的,我会通过将数据视为一个简单的“活动包”来丢弃一些信息。尽管如此,结果比我预期的要好,而且多亏了 tidytext 包,完成这件事变得非常简单。
一路走来,我意识到文字和这个有一些重要的区别。其中最重要的可能是这样一个事实,即在文本中很少出现的事件是高信息事件,但在其他数据中却经常是异常值。比如 tf-idf 原来就是一个相当性别歧视的小刺头。
话又说回来,也许这里有对我们所有人有价值的一课?也许这正是当我们太关注使我们不同的东西,而太少关注使我们相同的东西时发生的事情。因为,事实证明,我们并没有什么不同。
github 上的完整代码。
在 NLP 任务之前,修正你的文本思想注意
“two white planes flying” by Alicia Steels on Unsplash
语法纠错(GEC)是纠正文本错误的方法之一。它可以是全局误差或局部误差。纪等人提出了纠正用词和拼写的注意机制。
看完这篇帖子,你会明白:
- 嵌套注意神经混合模型设计
- 体系结构
- 拿走
嵌套注意神经混合模型设计
纪等人将纠错问题归结为机器翻译问题,采用序列对序列模型来解决这一问题。与使用基于短语的机器翻译不同,S2S 方法具有学习长距离,甚至全局单词依赖性的能力。
作者扩展了基于 S2S 的模型来处理极大的词汇量和捕获句子结构。S2S 模型的输入是一个单词序列,并将其转换为向量序列。然而,传统的单词嵌入无法处理词汇外(OOV)问题。传统的解决方式有:
- 用一个单一的向量来代表整个 OOV
- 如果是 OOV,跳过这个词
作者使用第三种方法,即按字符计算单词向量。例如,“爱德华”是一个 OOV,它使用“E”、“d”、“w”、“a”、“r”和“d”来计算“爱德华”的嵌入,而不是使用静态的“未知”向量。对于角色嵌入,你可以访问这个故事来获得更多信息。
第二部分是学习处理拼写错误和屈折形式。例如,“aple”是一个拼写错误,而“apple”是预期的单词,而“invisions”后面应该是 he 而不是“invision”。
体系结构
该模型使用单词级和字符级嵌入来解决纠错问题。虽然它们用于不同的目的:
- 单词水平:纠正全局语法和流利性错误
- 字符级:拼写或变形形式
Architecture of Nested Attention Hybrid Model (Ji et al., 2017)
基于单词的序列对序列模型
首先,文本序列将被转换为向量序列。字编码器使用门控递归单元(GRU)来构建向量隐藏状态序列。GRU 也被用在解码器中,它输出基于单词注意力输入的向量序列。
混合编码器
字嵌入的一个限制是 OOV,混合编码器就是为了解决这个问题而设计的。当有 OOV 时,向量将由字符编码器计算,而不是查找嵌入。
嵌套注意混合解码器
解码器通过两个解码器输出目标字。如果字是由字编码器构建的,将使用字解码器。否则,将使用字符解码器。
拿走
- 需要大量的词汇,包括大量的单词和拼写错误。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。你可以通过媒体博客、 LinkedIn 或 Github 联系我。
参考
季军,王庆,图塔诺瓦,龚 y,张 s,高 J…2017.用于语法错误纠正的嵌套式注意力神经混合模型
人工智能的最后一英里问题
三种类型的问题和五种战术解决方案
Photo by Alberto Frías on Unsplash
TLDR: 最后一英里的问题是实现人工智能承诺的价值的最后障碍。获得人工智能系统的好处需要的不仅仅是坚实的商业案例、执行良好的人工智能实现和强大的技术栈。它通常需要人工智能和人的协作,才能为客户提供正确的体验。但是,公司通常很难做到这一点。
许多分析从高管和数据科学家的角度强调了如何构建 AI 系统。相反,本案例研究使用个人轶事和新的视角来看待问题:通过一线员工和客户的视角。我讨论了各种实际的解决方案,例如人工智能中的 80-20 规则和机器与人类之间的平滑交接,以帮助团队克服现实世界中人工智能交付的最后一英里障碍。
**喜欢你读的书吗?**在媒体、 LinkedIn 或 Twitter 上关注我。还有,作为数据科学家要不要发展商业影响力?查看我的“对机器学习的影响”PDF 指南(2019 年 9 月 30 日提供)。订阅以便在它准备好的时候得到通知。
首先,让我分享一个故事……
最近,我和妻子 ess 去多伦多市中心的伊顿中心购物。Jess 心情非常好,因为她刚从公司组织的黑客马拉松(为期 3 天的构思和原型制作竞赛)回来。杰斯是多伦多一家银行的财务顾问。当我们在一个供应商摊位前停下来更新我的手机计划时,她正在描述所有的人工智能(AI)想法和原型是多么神奇(和不真实)。
一位名叫乔安妮的女士,大概 20 出头,欢迎我们并提出了几个不错的选择;我同意了她的一个建议。乔安妮在处理交易时,她转向杰斯说:“看起来有一个针对你的特别优惠,你想听听吗?”。
“当然!”杰斯说。
乔安妮看了屏幕两秒钟说:“我们愿意为你提供 10G 的数据,每月 75 美元。这是一笔了不起的交易!”
杰斯看上去很困惑,说道:“这说不通啊。我只需为同样数量的数据和服务支付 65 美元。”
我们都笑着化解尴尬。乔安妮回去完成我的交易。我们五分钟后离开。
在我们回家的路上,Jess 提到了人工智能是多么令人失望,并开玩笑说大公司是如何不能把它做好并错过销售机会的。她说,她在黑客马拉松上看到的人工智能原型要有能力得多。
我说:“嗯,这就是现实世界的 AI 和实验室的区别”。她最终对我说的话印象深刻。
在分解我们的经验来强调人工智能系统的几个常见问题之前,让我们先了解一下人工智能系统的背景和定义。如果你熟悉这个概念,可以跳过这个。
**杰斯的报价是怎么产生的?**在这个故事中,Joanne 提出的要约是由一个推荐系统(RS) 生成的。RS 通过分析客户行为和提供个性化的产品和服务来帮助推动销售。一些 RS 依靠一种叫做协同过滤的机器学习算法来决定对客户的最佳报价;一些 RS 依赖于更简单的算法,如逻辑回归或基于规则的方法,而一些 RS 使用更高级的算法,如深度强化学习。亚马逊和许多电子商务和数字公司是 rs 的早期采用者。许多传统企业(如电信和银行)紧随其后,开始了定义自己方式的旅程。
什么是 AI 系统?RS 是人工智能系统的一个例子。更具体地说,人工智能系统是全栈解决方案(例如前端和后端),通过使用大数据技术处理大量数据,并基于自主机器学习算法选择适当的交互,为用户提供上下文感知体验。
人工智能系统和传统的软件解决方案有一些明显的区别。这是最重要的一点:人工智能系统基于自主和持续的学习和决策与用户互动,而不是遵循一套静态的和由设计师和工程师预先设计的规则。
Source: Author’s Analysis
L 在故事中,RS 意识到 Joanne (最终用户)正在与 Jess 和我讨论产品变更(情境感知);它提供了一个 Joanne 可以分享的提议*(基于大数据和机器学习的交互)。考虑到另一个客户和环境(例如,打电话投诉服务,而不是考虑产品变更),报价可能会有所不同。RS 是一个全栈*解决方案,因为它有一个与 Joanne 交互的前端接口和一个支持数据存储、机器学习和系统集成的后端。
还有许多其他人工智能系统的例子,如自动驾驶汽车、robo-advisor、Alpha-Go、Siri、波士顿动力公司的机器人、Roomba 等。
现在,怎么了?这个故事强调了人工智能系统在现实世界中失败的一些常见方式。我们来分解一下。
- 错误的互动:让顾客为同样的服务额外支付 10 美元根本没有意义。我不相信任何营销和客户行为理论会支持这一提议。
- 糟糕的执行:虽然乔安妮训练有素、能力出众、风度翩翩,但她显然不明白为什么这个提议是由人工智能系统提出的,因此无法正确执行这个提议(即使这意味着而不是执行)。
- **缺乏反馈循环:**在我们都意识到报价没有意义之后,Joanne 只是简单地完成了我的交易,没有向 AI 系统提供任何反馈来帮助它学习。质量反馈对于任何人工智能系统的长期成功都是至关重要的。
这个例子凸显了一个基本而普遍的问题:人类和人工智能系统之间的脱节。人-AI 协作是 AI 系统的最后一公里问题。
UX 的设计师可能会争辩说,这只是一个设计糟糕的典型解决方案。应用设计思维和界面设计的最佳实践应该可以解决这个问题。正确,但只是在某种程度上。自主交互的独特性要求我们进行更深入的思考。如果我们不能完全控制和理解人工智能系统的反应,我们如何预先设计用户交互的关键方面,如果不是全部的话?
**那么,有哪些解决办法呢?**在这里,我提出了一些战术解决方案,以帮助公司最大限度地实现人工智能系统的承诺。
Author’s Analysis, Updated on Feb. 23, 2020
1.从错误到正确(或更好)的互动
要求人工智能系统在 100%的时间里提供正确的答案是不可能的,无论是在数学上还是在实践中。所以,我们最好的目标是用合理的投资获得足够正确的答案。为此,我建议探索以下方法:
- 确定一个 80-20 人工智能救援计划。80–20 是一个众所周知的概念和商业公理;它强调了一个普遍的观察结果,即大约 20%的工作产生了 80%的结果。使用 80-20 思维来简化解决方案至关重要;这样做可以帮助避免推出一个有缺陷的人工智能系统,并损害客户体验(Jess 的例子)。显然,当人工智能系统提供不合理的建议时,一些技术问题就被打破了。过于复杂的设计是一个常见的问题。一组数据科学家可以问:1)要达到 80%的准确率,最简单的设计是什么?2)结果是否足以交付承诺的商业价值?3)有哪些更先进的技术可以抓住下一个 2%、5%和 10%的市场份额?尽管围绕复杂的人工智能技术进行了大肆宣传,如深度和强化学习,但并不是每个人都需要在第一天使用它们。简单的数据挖掘技术,如关联规则,可能能够捕捉大多数客户动态,并在早期提供足够好的结果。
Image Source: link
- 应用业务规则进行保护。由于机器学习模型肯定会有错误,因此拥有一个额外的业务规则层对于质量保证来说是必不可少的。例如,基于业务领域知识的简单规则可以是这样的:1)不提供没有额外的有意义的服务的更昂贵的套餐,2)抑制可能导致收入损失的过度打折的报价。避免复杂的规则很重要。它们可能会破坏人工智能系统的目的,并最终影响性能。要确定这些规则,与经验丰富的业务经理和一线员工合作是关键。这就引出了下一个建议。
- 使用合适的专家进行健全性检查。商业高管和数据科学家经常设想人工智能系统。拥有拥有足够技术马力的顶级支持对于推出成功的人工智能系统至关重要。然而,当谈到使用旨在提供更好的客户互动的系统时,一线专家知道得最多,也有最深刻的观察。因此,尽管一线员工可能不是技术专家,但将他们包括在流程中是非常重要的。
2。从差到好的执行
大多数人工智能系统依赖于人类员工在某些时候采取行动,良好的执行是实现承诺的商业价值的关键。良好的执行归结为一个要素:机器和人类之间的顺利交接。为了实现顺利移交,人工智能系统和人类都需要协同工作…
- 提供侧重于“是什么”、“为什么”和“如何”的说明。数据科学家花费大量时间微调算法,但往往忽略了提供必要的信息来帮助人类员工取得成功。关键是使人工智能系统能够解释为什么提供特定的建议,并分享简单的指令供人类员工遵循。一个简单的什么-为什么-如何模板可以做到这一点,见下面的例子;这个想法最初是由西蒙·西内克在领导力激励演讲中提出的。
- 高技能员工与人工智能系统合作。能够使用技术是许多入职培训的重要组成部分。但是今天这还不够。例如,人工智能系统不同于传统的客户关系管理(CRM)应用程序。基于他们的学习和见解,人工智能系统可能会提供对员工来说不明显的建议。也就是说,人类员工需要在更高的认知水平上参与理解、消化和挑战(如果需要的话);工作人员不能也不应该盲目听从指示。员工应该将人工智能系统视为合作伙伴,他们应该与之合作、挑战和培养。
想象一下:RS 提供了三行简单的语句,Joanne 可以在不到 10 秒(甚至更短)的时间内理解并理解…
- 做什么:建议升级 10GB 的数据套餐,每月 70 美元的新手机返现
- 为什么你应该这么做:客户(Jess)使用我们的服务已经超过 10 年了;根据与她相似的客户资料,她可能会感兴趣,并且对每月储蓄反应良好
- 如何接近:告诉 Jess 你很欣赏她 10 多年来的生意,你想提供一个其他忠实客户也欣赏的好交易;每月节省 25%(或者这可以是一个预先填充的脚本,但根据 Jess 的个人资料进行定制修改)
与人工智能系统一起工作更复杂,但回报——物质商业利益和更投入、更受重视的员工——可能是值得的。
3。从麻烦到参与反馈机制
最后,人工智能系统的真正力量来自它们学习和改进的能力。然而,如果没有来自环境的有意义的反馈,他们就做不到,在这种情况下,他们是一线员工。*有意义的反馈是指描述客户行为原因的信息。*由于笨拙的用户界面和缺乏激励,许多一线员工忽略了获取和分享这些信息的机会。以下是一些简单的注意事项…
- 开发一个简单有趣的反馈用户界面。有两个关键的考虑因素。首先,用户界面需要简单,这样员工就可以轻松准确地输入信息,这样他们就不会抗拒这样做。要获取的最重要的信息是为什么客户没有对建议做出回应。其次,游戏化,如使用徽章和健康的同行竞争,有助于鼓励和推动员工提供高质量的反馈,而无需硬性强化。这就是 CRM 管理中的传统技巧仍然有效的地方。
- 鼓励输入质量反馈。现实地说,很难期望员工做出更多努力,因为许多人已经被日常工作的任务和目标压得喘不过气来。因此,制定具体的激励措施是推动行为改变的最佳解决方案。例如,团队可以为“本月人工智能培训师”设立排行榜和奖项,或者在年度绩效评估中正式确定一个目标。
一旦反馈被捕获,数据科学团队需要将其与人工智能系统的学习机制联系起来。从技术角度来看,这很棘手,有很多关于处理时间的考虑。然而,一旦实施,人工智能系统可以从客户的独特信息中学习,修复系统学习中的缺陷,并持续自主地改进。更有意义的反馈导致更智能的人工智能系统,可以提供指数级的商业利益。
通过探索和实现这些考虑,好处是增加 AI 系统的成功概率,尤其是当它们在现实世界中与人类交互时。
让我们总结一下……
他的例子只是揭示了人工智能系统的一些有代表性的问题。随着人工智能的投资转化为现实世界的解决方案——许多人将与一线员工和客户密切互动——公司应该停下来,理智地检查他们对人-人工智能协作体验的想法。这里是断线经常发生的地方。此外,请记住,技术开发中的许多最佳实践仍然适用,例如“从小处着手,不断重复”和“以用户为中心”。
克服最后一英里的问题对于实现人工智能的温暖人心的承诺至关重要。有一个全面的诊断和手术修复是至关重要的。改善交互、执行和反馈机制的早期和轻量级解决方案可以帮助公司在现实世界中部署人工智能系统时避免重大挫折。
思想的果实
- 在使用人工智能系统时,你的团队面临哪些独特的运营挑战(例如,时间、技能和/或信任)?
- 人工智能系统如何通过简化流程(尤其是以前难以自动化的流程)来帮助您的企业削减成本?
- 人工智能系统如何让你的企业创造新的方式来提供产品和吸引客户?
喜欢你读的书吗?在中、 LinkedIn ,或者 Twitter 上关注我。还有,作为数据科学家要不要发展商业影响力?查看我的“对机器学习的影响”PDF 指南(2019 年 9 月 30 日提供)。订阅以便在它准备好的时候得到通知。
免责声明 :文中观点不代表作者雇主赞同。
你可能也会喜欢这些…
如何使用 Streamlit 和 DevOps 工具构建和部署 ML 应用程序
towardsdatascience.com](/build-full-stack-ml-12-hours-50c310fedd51) [## 越狱
我们应该如何设计推荐系统
towardsdatascience.com](/how-to-design-search-engines-24e9e2e7b7d0) [## 我们创造了一个懒惰的人工智能
如何为现实世界设计和实现强化学习
towardsdatascience.com](/we-created-a-lazy-ai-5cea59a2a749) [## ML 和敏捷注定的联姻
Udacity 的创始人巴斯蒂安·特龙毁了我的 ML 项目和婚礼
towardsdatascience.com](/a-doomed-marriage-of-ml-and-agile-b91b95b37e35) [## 抵御另一个人工智能冬天的最后一道防线
数字,五个战术解决方案,和一个快速调查
towardsdatascience.com](/the-last-defense-against-another-ai-winter-c589b48c561) [## 人工智能的最后一英里问题
许多数据科学家没有充分考虑的一件事是
towardsdatascience.com](/fixing-the-last-mile-problems-of-deploying-ai-systems-in-the-real-world-4f1aab0ea10)