TowardsDataScience-博客中文翻译-2019-七十三-
TowardsDataScience 博客中文翻译 2019(七十三)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
用哪个机器学习模型?
原文:https://towardsdatascience.com/which-machine-learning-model-to-use-db5fdf37f3dd?source=collection_archive---------4-----------------------
陈述你的问题,并跟随这篇文章来知道使用哪个模型。
image by stevepb
—如果你不知道什么是 ML 型号,看看这篇文章。
summary of ML models, Source
T 参加机器学习课程和阅读相关文章并不一定会告诉你使用哪种机器学习模型。它们只是给你一个关于这些模型如何工作的直觉,这可能会让你为选择适合你的问题的模型而烦恼。
在我开始 ML 之旅的时候,为了解决一个问题,我会尝试许多 ML 模型,并使用最有效的模型,我现在仍然这样做,但我遵循一些最佳实践——关于如何选择机器学习模型——这些最佳实践是我从经验、直觉和同事那里学到的,这些最佳实践使事情变得更容易,以下是我收集的。
我会根据你的问题性质告诉你用哪种机器学习模型,我会试着解释一些概念。
Pexels
分类
首先,如果你有一个分类问题“预测给定输入的类别”。
请记住您要将输入分类到多少个类,因为有些分类器不支持多类预测,它们只支持 2 类预测。
-缓慢但准确
- 非线性 SVM 查看分类部分末尾的注释了解更多关于 SVM 使用的信息。
- 随机森林
- 神经网络(需要大量数据点)
- 梯度增强树(类似于随机森林,但更容易过度拟合)
-快
- 可讲解的模型: 决策树 和 逻辑回归
- 不可解释模型: 线性 SVM 和 朴素贝叶斯
注:SVM 内核使用(摘自吴伟雄的课程)
- 当特征数量大于观察数量时,使用线性核。
- 当观测值的数量大于要素的数量时,使用高斯核。
- 如果观测值的数量大于 50k,那么在使用高斯核时,速度可能是一个问题;因此,人们可能想使用线性核。
回归
如果你有一个回归问题,“这是预测一个连续的值,就像预测房子的价格,给定房子的特征,如大小,房间数量等”。
-准确但缓慢
- 随机森林
- 神经网络(需要大量数据点)
- 渐变提升树(类似随机森林,但更容易过度拟合)
-快
- 决策树
- 线性回归
使聚集
如果你有一个聚类问题“根据特征将数据分成 k 组,使得同一组中的对象具有某种程度的相似性”。
层次聚类 (也称为层次聚类分析或 HCA )是一种聚类分析方法,旨在构建聚类的层次结构。分层聚类的策略通常分为两种类型:
- 凝聚:这是一种“自下而上”的方法:每个观察从它自己的集群开始,随着一个集群在层次结构中向上移动,集群对被合并。
- 分裂:这是一种“自上而下”的方法:所有的观察从一个集群开始,随着层级的下移,分裂被递归地执行。
非层次聚类:
- DBSCAN (不需要指定 k 的值,它是集群的数量)
- k-means
- 高斯混合模型
如果你正在聚类一个分类数据使用
- k 模式
降维
使用 主成分分析
PCA 可以被认为是将一个 n 维椭球体拟合到数据上,其中椭球体的每个轴代表一个主分量。如果椭球的某个轴很小,则沿该轴的方差也很小,并且通过从数据集的表示中省略该轴及其相应的主分量,我们仅损失了相应少量的信息。
如果你想做 主题建模 (下面解释)你用奇异值分解 ( SVD ) 或者潜在狄利克雷分析 ( LDA ),概率主题建模用 LDA 。
- 主题建模是一种统计模型,用于发现文档集合中出现的抽象“主题”。主题建模是一种常用的文本挖掘工具,用于发现文本中隐藏的语义结构。
我希望现在事情对你来说更容易了,我会用我从你的反馈和实验中得到的信息来更新这篇文章。
我将留给你这两个精彩的总结。
source
Source
数据分析中哪种建模工具最赚钱?
原文:https://towardsdatascience.com/which-modeling-tool-is-the-most-profitable-in-data-analysis-abcb29062f34?source=collection_archive---------20-----------------------
很多时候我们发现自己的业务数据看似不错,但最终的转化量却很低,这说明业务转化率是有问题的。在数据分析中,有一个至关重要的建模工具可以很好的解决这个问题。它是漏斗分析模型。你可能已经从我的上一篇文章 数据分析中的五大思维方法 s 中知道了这一点。今天我就来详细介绍一下这个漏斗模型。
1.什么是漏斗分析?
漏斗分析模型,简单来说就是营销产品的一个过程。而我们需要观察这个过程中每一步的转化和损失。
关于实际应用场景中的漏斗模型,人们期望的不外乎两点:
- 大量转换
- 最终转化率高
对于这两个目标,可行的措施是:
- 增加初始流量
- 提高每个关键点的保留率
2.漏斗分析的关键是什么?
一般来说,漏斗分析是有顺序的,这种顺序体现在关键节点的路径上。在有序的漏斗中,路径越来越窄。换句话说,每一步留下的数据量不能大于前一步留下的数据量。如果不满足这个条件,说明关键路径的流程顺序可能有问题,我们应该调整路径顺序。
3.如何进行漏斗分析
3.1 目标
和任何数据分析一样,漏斗分析的第一步也是设定目标,即了解自己到底想做什么,想得到什么结果。例如,在商业营销活动的漏斗模型中,目标是实现业务和盈利。并且为此目的确定以下五个步骤。
- 第一步:投放广告。提高用户对品牌的认知度。
- 第二步:看广告。增加用户对产品的兴趣。
- 第三步:评估产品。用户将根据他们对品牌的认知和对产品的兴趣来决定是否购买。
- 第四步:为产品付款。用户将在评估后购买他们感兴趣的产品,并达成交易。
- 第五步:重复购买。一些用户会继续购买。他们也可能向亲戚朋友推荐该产品。
3.2 变量
变量是能够影响漏斗分析结果的因素。它们分为自变量、因变量和中介变量。
在组织行为学中,因变量是要测量的行为反应,自变量是影响因变量的变量。
在上面的模型中,因变量是广告观看率、产品支付率、再购买率等。以及广告渠道(如电视、报纸、杂志、地铁、网站等。),观看广告的用户的年龄,用户的位置,他们的爱好和他们的经济条件是影响因变量的自变量。
中介变量 因变量和自变量中引起中介。它们减少了自变量对因变量的影响。中介变量的存在使得自变量和因变量之间的关系更加复杂。
中介变量是我们需要干预的变量。我们要无限解构它来影响自变量。
From Neil Patel
在上面的传统漏斗模型中,假设我们的品牌是高端奢侈品,我们需要分析独立变量,如广告渠道、用户年龄和广告服务区域。我们最终发现我们的广告区域太广,成本太高。
然后我们盯着广告区。我们看到偏远地区的广告比例比较高。这个时候,我们发现问题了吗?我们可以缩小广告投放区域。在大城市重点做广告会不会更好?
理想的情况是,我们可以一步步解构问题,找到唯一的变量。然后我们就能准确定位问题并解决,这就带来了用户的增长。
3.3 关系
一旦我们确定了目标和影响我们目标的各种变量,我们需要研究变量之间的关系。
在确定变量之间的关系时,要谨慎判断哪个是原因,哪个是结果。不能因为两个变量之间的统计关系,就说两个变量之间有因果关系。
比如我们说用户增长,更多说的是获取客户。我们并没有考虑如何提高现有用户的转化率和激活率。我们真的需要思考如何让用户成为忠实用户。只有忠实的用户才不会流失,带来更多的收益。
通过漏斗分析,可以还原用户转化的路径,分析每个转化节点的效率。
- 从头到尾的整体转化率是多少?
- 每一步的转化率是多少?
- 哪一步我们失去的客户最多?为什么?那些客户符合什么特征?
4.谈到大数据,您使用什么工具进行漏斗分析?
说到大数据,用 Excel 等工具很难做到高效的漏斗分析。一般的做法是使用类似 FineReport 这样的专业数据分析工具搭建一个 仪表盘 ,在这里我们可以很方便的进行漏斗分析。下图是 FineReport 漏斗模型的两种形式。(这个工具的个人版完全免费。)
FineReport 的漏斗图也有自动排序功能。
当我们进行业务分析时,也有很多使用漏斗分析的场景。
保险仪表板
From FineReport
旅游仪表盘
From FineReport
投资仪表板
From FineReport
外卖销售仪表盘
From FineReport
专业数据分析工具的优点是方便。工具本身有各种漏斗模型。你只需要拖拽就可以完成漏斗分析,这是用 Excel 很难实现的。所以建议使用专业软件。如果你有兴趣,可以阅读这篇文章2019 年 6 大数据分析工具 。
您可能也会对…感兴趣
数据分析师需要掌握的 6 项关键技能
2019 年你不能错过的 9 款数据可视化工具
制作销售仪表盘的分步指南
新手如何设计酷炫的数据可视化?
4 个参数查询功能让您的数据可视化互动
原载于 2019 年 4 月 30 日http://www.finereport.com。
超越演讲时间:民主党总统辩论分析
原文:https://towardsdatascience.com/which-presidential-candidate-talks-like-that-b2b16060ff8b?source=collection_archive---------18-----------------------
使用真实世界数据进行预测建模的数据准备和特征工程
Source: This LA Times article
随着我们在严重的政治两极分化的气氛中步入新的一年,我意识到我从来没有像过去一年这样关注这个国家的政治——这意味着我现在每天早上都听每日播客,甚至完整地观看了两三场直播的民主党初选辩论。
每次辩论后的第二天,我的新闻订阅源就会被评论、镜头和对候选人谈论的以及他们谈论了多少*的分析所淹没。但是我注意到缺少关于他们在辩论台上如何谈论的信息。*****
当我们举杯庆祝 2010 年代的最后一年,以及定于 12 月 19 日举行的第八次也是最后一次民主党总统候选人辩论时,我认为通过一点探索和数据分析来弥合这一差距是不错的。
在这篇文章中,我将:
- 简单概述一下我是如何预处理从互联网上搜集的原始文本的。
- 用熊猫对候选人的话语进行比较分析,看看谁最以自我为中心,谁最面向未来,谁说话最华丽。
12 月 12 日之后(这是候选人必须满足所有捐助者和投票要求的最后日期,以便有资格参加下一场辩论),我将获得我需要的所有信息:
- 使用 scikit-learn 建立一个分类模型,仅使用本文中确定的语音特征来预测谁将有资格参加 12 月 19 日的辩论。敬请关注!(而且现在是这里。)
快速浏览原始文本
截至今天(2019 年 12 月 7 日),我们已经为 2020 年大选完成了总共八场民主党初选辩论:
Source: https://en.wikipedia.org/wiki/2020_Democratic_Party_presidential_debates_and_forums
我从一个来源收集了辩论记录,《华盛顿邮报》(从 2019 年 6 月到 2019 年 11 月)。这里有一个的例子,里面看起来是这样的:**
文本的每个 块 (例如,上面用灰色突出显示的部分)对应于 HTML 源代码中的一个<p>
标记,您可以通过突出显示文本的一部分并右键单击“Inspect”来找到它。注意,每个说话人的边界都由一个 说话人标签 表示,这是说话人的姓,全部大写(“BIDEN”、“COOPER”等)。).我将每个块中扬声器标签后面的部分称为 段 。由于只有第一个连续的相同说话者块包含一个说话者标记,因此有必要将原始文本的每个块重新整形为一个标记段对,如下所示:
**# block 1
**Speaker tag**: BIDEN
**Segment**: Look, my son's statement ... no potential conflict,# block 2
**Speaker tag**: BIDEN
**Segment**: My son made a judgment ... we should be focusing on.# block 3 **Speaker tag**: COOPER
**Segment**: Senator Sanders, your response?**
到达那里可不是一件简单的事情。事实上,我认为我在这个早期预处理步骤上花的时间比这个项目的任何其他部分都多,但是花费必要的时间将您的数据转换成分析所需的精确格式,并建立一个简化的预处理管道以便在将来轻松接收和转换任何新数据总是值得的。以下是这一早期但重要的步骤的一些主要组成部分:
1.提取<p>
块
2.将原始文本转换为说话者片段元组
3.把所有东西放进一个数据框架
输出:
Transcript text in a dataframe
我们现在准备好了一些严肃的乐趣——提取特征来用数字表示候选人的演讲。在下面的分析中,我删除了所有包含版主(如 Cooper)发言片段的行。我没有排除像(APPLAUSE)
和(CROSSTALK)
这样的转录,如果它们与候选之一相关,以防它们在以后成为重要的特征。在这之后,我有了 4069 行。
**# subset the dataframe based on speaker info
df = original_df[original_df['speaker'].isin(CANDIDATE_NAMES)].reset_index(drop=True)df['speaker'].value_counts().sum() #4069**
候选人语音比较
为了比较候选人的话语,有必要将这些片段转换成数字表示。我用空间到写规则来提取下面的大部分特征。我将在下面的代码块中强调其中的几个,但是你可以在这里查看完整的脚本。
⏳谁说得最多?
拜登和沃伦在segment length
(所有辩论的总票数)和number of sentences
两个方面发言最多。值得注意的是,在我们的顶级竞争者中,桑德斯发言最少,略微落后于哈里斯、布克、 Buttigieg 和克洛布查尔。这些发现似乎与候选人的发言时间 相关。
****
顺便说一句,这篇文章中的大部分条形图都可以用类似这样的图形来表示:
**import matplotlib.pyplot as pltmean_df = original_df.groupby('speaker').agg('mean')
mean_df[['segment_length']].sort_values('segment_length', ascending=False).plot(kind='bar')**
另一个要考虑的长度特性是mean sentence length
,它是通过将标记(单词)的总数除以每个片段的句子数并在所有片段中取平均值来计算的。该图显示了 Gabbard、O'Rourke、和 Steyer 设法使符合其句子中的最大字数:
同样的三个候选人在句子长度上也表现出最大的差异,这是由standard deviation of sentence length
(在标记中)确定的。换句话说,他们很好地混合了长句和短句(这可能是你的高中英语老师希望你在作文中出现的)。
图表右端的候选人,包括斯威尔和德莱尼,在他们的演讲中并没有改变太多的句子长度。事实上,结合上图,我们可以推断两个候选人一致地说出短句。
将文本转换为空间Doc
提供了一种简单的方法来提取这些长度特征:
🤹谁说得最详细?️
也就是说,谁的演讲表现出最大程度的句法复杂性?我用了两个特征来衡量这个:number of complex clauses
和number of words before the main verb
。
我将复句定义为在论元结构(“主语”、“宾语”等)方面比简单的及物或不及物句子更复杂的任何句子级结构。),包含状语从句修饰,和/或包含嵌入从句。例如:
- 与格结构包含两个内部论元,一个直接宾语和一个间接宾语:“我把钱给他了。”
- 从句:“如果你想改变世界,你必须每天早上整理床铺。”
- 从句补充道:“我从未想过她会这么早退出竞选。))
在一个句子中有一个或多个这样的属性会增加它的整体句法复杂性。
Number of words before the main verb
专门衡量动词前结构的复杂程度。主动词前的文本越长,越有可能包含从句修饰词(和/或主语修饰词)。这是对句法复杂性的一个非常粗略的度量,但是它很快给了我们一些有用的东西。
在下面的标准化图表中,我们看到 Gabbard 和 Steyer 的演讲在这两个方面都表现出最大程度的复杂性。在光谱的另一端, Bennet 和 Inslee 表现出最少的句法复杂性,这可能表明他们坚持使用非常简单的句子形式(即主语-动词-(宾语)),并且缺少条件“if”语句或并列短语等从句修饰语。
Swalwell 表现出了一种有点反常的模式:他在 T1 上得分最低,T1 衡量了说话前和说话后的复杂性(但主要是后者),但他在另一项衡量指标 T2 上仅略高于中间水平。这种复杂性轨迹的不对称性表明,虽然他的主要动词后面的部分往往简单而简短,但他在如何打开句子方面却相当一般(即,在主要动词之前)。
值得注意的是,已经有资格参加 12 月 19 日辩论的六名候选人中的四名——桑德斯、沃伦、拜登和哈里斯——表现出相对较低的句法复杂度,这表明他们在辩论舞台上的发言相当简单。
以下是用于提取这两个句法特征的基于空间的函数:
Two functions used to extract syntactic features
🧸,他的演讲对五年级学生来说是可以理解的?
与句法复杂性密切相关的一个范畴是可读性。我使用了 textstat ,这是一个 Python 库,提供了多种统计数据来衡量一段文本的可读性。网站上描述了不同的衡量标准,但由于怀疑其中一些是相关的,我创建了一个快速关联矩阵,采用了这里的实现:
**import seaborn as snsREADABILITY_FEATURES = ['n_difficult_words',
'automated_readability_index',
'coleman_liau_index',
'dale_chall_readability',
'flesch_kincaid_grade',
'flesch_reading_ease',
'gunning_fog',
'linsear_write_formula',
'smog_index',
'text_standard']corr_matrix = df[READABILITY_FEATURES].corr().abs()
fig, ax = plt.subplots(figsize=(9,5))
sns.heatmap(corr_matrix)**
Correlation matrix of readability features
在浅色像元处相交的特征高度相关,例如gunning_fog
和linear_write_formula
,在较小程度上还有flesh_flesch_kincaid_grade
和flesh_reading_ease
,以及text_standard
和gunning_fog
。
根据 textstat 网站的描述,text_standard
是一种综合衡量标准,它根据所有其他测试返回理解文本所需的估计分数水平,所以我选择在这里绘制这个图表:
**df.agg('mean')['text_standard']
6.077291717866798**
平均来说,大多数演讲者的水平是六年级学生能够理解的。Steyer 和 Gabbard 说话的水平略高,八年级及以上的学生可以理解,这与他们表现出的最高水平的句法复杂性相吻合,如上所述。
这两个候选人在number of difficult words
(每段)上得分最高,这是另一个可读性指标,它与其他任何指标都不相关。请注意,我们的领跑者之一沃伦在每段发言中使用的难词最少。(她也是text_standard
上得分最低的人之一,如上图所示。)
Mean number of difficult words per segment
🦚:谁在演讲中最以自我为中心?
(*我用这个术语来描述一种言语行为模式,这种行为模式的特点是大量的口头指称自己。它不应该被解释为可能带有更负面含义的其他术语的同义词,如“自恋”或“自私”。)
在这个专题中,我探索了代词的使用,以此来衡量候选人在与他人和美国公众交谈时,将自己视为个人还是群体的一部分。特别是,我认为:
- 第一人称单数代词“我”、“我的”、“我的”、“我的”、“我自己”的数量
- 第一人称复数(1pl)代词的数量:“我们”、“我们的”、“我们的”、“我们的”、“我们自己”
- 两个数字之间的差异
所有的双栏会显得有点拥挤,所以我将视觉效果分成两个图表:一个是符合 12/19 辩论资格的候选人群集,另一个是不符合资格的候选人群集(或在 12/7 时处于风口浪尖):
******
Pronoun use by candidate group (qualified vs. not qualified/on the cusp)**
快速浏览这些图表可以发现,从绝对意义上来说,克洛布查尔在她的演讲中是最以自我为中心的,每段使用的“我”代词比任何其他候选人都多。在那些没有资格参加 12 月辩论的候选人中,卡斯特罗是最自我的,紧随其后的是吉利布兰德。但是我们也看到 Klobuchar 比其他两个使用了更多的“我们”代词——这意味着,在相对于而言,卡斯特罗和吉利布兰德可能更以自我为中心,这取决于你如何看待它。
相比之下,杨无论从绝对角度还是相对角度来看都是最不自我的,平均每段使用 1.64 个“我们”代词,而“我”代词只有区区 0.58 个。对杨来说,这两组第一人称代词的区别比其他任何候选人都要明显得多。这可以通过下图更容易地可视化,该图显示了“我”代词和“我们”代词之间的差异(“我”代词减去“我们”代词)。
Difference between number of 1sg and 1pl pronouns per segment
这种差异越积极,候选人使用的“我”代词就越多。回到之前的观点,我们从这张图表中确认,尽管 Klobuchar 在每个片段中使用了最多的“我”代词,但与吉利布兰德和卡斯特罗相比,她在“我们”代词中使用的比例更适中,他们在两组代词中表现出最大的差异。
特征提取器:
🔮谁的演讲最有未来感?
从某种程度上来说,一个候选人表达其未来计划和战略的能力可以被视为对其“面向未来”的一种衡量,我认为语言可以提供一种有趣的方式来发现一个候选人是否具有一个有远见、前瞻性的领导人的品质——这是选民可能希望他们未来的总统具有的品质。
使用 spaCy 标签,我对片段中的以下单词/短语进行了计数,作为对未来导向性的粗略衡量:
- 未来情态助动词(“将”、“将”)
Going + to + non-finite clause
建筑- 像“明天”和“未来”这样的词
以下是每位候选人使用的面向未来的表达总数:
Total number of future-oriented expressions across all debates
沃伦和哈里斯在他们的演讲中使用了最多的面向未来的词汇。这很有趣,但我们必须记住,他们也是总体上发言最多的候选人之一。因此,为了控制这一点,我对所有部分中面向未来的表达式的比例(%)求和。
**proportion_future_oriented = (df4['n_future_oriented_words'] / df['segment_length']) # segment_length == number of tokens per segmentdf['proportion_future_oriented'] = proportion_future_orienteddf[['speaker', 'proportion_future_oriented']].groupby('speaker').agg('sum').sort_values('proportion_future_oriented', ascending=False).plot(kind='bar', color='navy')**
即使做了这样的调整,我们仍然看到哈里斯和沃伦在他们的演讲中仍然大量使用面向未来的表达。
⚔ ️Who 提到川普最多?
****哈里斯在所有八场辩论中提到川普最多,其次是杨和布克:
Total number of Trump mentions by candidate
但是,我们必须再次记住,哈里斯是总体上发言最多的人之一,因此,我再次将特朗普提及的比例总和(%)用于所有片段的片段长度。
**proportion_trump_mentions = (df4['n_trump_mentions'] / df4['segment_length'])df5['proportion_trump_mentions'] = proportion_future_orienteddf5[['speaker', 'proportion_trump_mentions']].groupby('speaker').agg('sum').sort_values('proportion_trump_mentions', ascending=False).plot(kind='bar', color='orange')**
调整后,我们看到哈里斯仍然是提及特朗普最多的人(即,即使是相对而言)。然而,对于杨来说,尽管在这些辩论中提到特朗普超过 30 次,但他的特朗普在演讲中的比例相对较低,与所有其他候选人相比,不超过平均水平。
Sum of proportions of Trump mentions by candidate
在这一点上,我急切地想知道是否有一条清晰的分界线,区分那些进入下一场辩论的候选人和那些没有进入辩论的候选人。我们可能已经在这篇文章中看到了一些迹象,但是一旦我们有了所有的信息,我可能需要更彻底地核实一下。
到目前为止,拜登、Buttigieg、Klobuchar、沃伦、桑德斯、施泰尔和哈里斯都符合条件(尽管最后一位已经退出)。杨和加巴德还没有达到所有的要求,但我们将在 12 月 12 日或之前查明他们是否达到了要求。
请继续关注后续的帖子,我将使用这篇帖子中描述的功能来建立一个机器学习模型,以回答最终的问题:演讲特征(单独)能否预测候选人有资格参加下一场辩论的可能性——因此,很有可能,他们当选总统的可能性?
数据科学家应该先学习哪种编程语言?
原文:https://towardsdatascience.com/which-programming-language-should-data-scientists-learn-first-aac4d3fd3038?source=collection_archive---------3-----------------------
r,Python,SQL 还是别的?
当我开始我的第一份真正的工作时,在 21 世纪初,我是一名毕业的精算分析师,我的老板做的第一件事是递给我一本关于 SAS 的小册子,并告诉我自学 SAS。
在我的工作中,我需要能够争论数据并使统计模型适应数据,如果我不会编程,我就不会走得很远。
当谈到数据科学时,几乎是一样的,但有一个小而重要的区别。在数据科学领域,没有人会走到你的办公桌前,递给你一本关于如何编程的书。
即使是入门级,数据科学家也应该能够从第一天开始编程。
但是并不是所有的编程语言都是平等的,有些语言比其他语言更受雇主的重视。此外,就像口语一样,真正学习一门编程语言需要时间,大多数人在刚开始时没有时间学习一门以上的编程语言。
因此,如果您正试图在数据科学领域获得突破,并且没有多余的时间,那么为了最大化您的就业机会,您应该首先学习哪种语言呢?
数据科学的三大编程语言
我最近检查了 2019 年 4 月 22 日至 2019 年 5 月 5 日期间在 LinkedIn 上发现的 100 份数据科学招聘广告,这些广告来自四个英语国家(澳大利亚、加拿大、英国和美国)。这些招聘广告被选择来代表雇主类型、规模、行业和工作级别的广泛代表性,而纯粹的管理角色没有被考虑。
之前,我使用这一分析来确定数据科学雇主寻求的顶级技能,不包括编程语言和技术(你可以在我的博客文章中读到这一点:如何成为数据科学三重威胁)。
这一次,我采取了相反的方法,根据数据科学招聘广告中提到它们的比例,确定了数据科学的 10 大编程语言。这些显示在下表中:
由此可以看出,Python、R 和 SQL 是目前为止数据科学中需求最大的三种语言。没有真正的惊喜。
然而,有趣的是,如果我们进一步分析,并考虑工作级别对每种语言的需求。
在我提取的 100 个数据科学招聘广告中,有 15 个是入门级角色(定义为标题中带有“初级”、“研究生”、“实习生”或类似名称的角色);44 人担任中级职务;41 个是高级职位(定义为头衔中有“高级”、“主要”、“领导”或类似的职位)。
下面的图表显示,随着工作资历的增加,能够用 Python 或 R 编程变得更加重要。然而,能够用 SQL 编程变得不那么重要了。
这表明,从长远来看,学习 R 或 Python 比学习 SQL 要好得多。
但是为什么会这样呢?为什么高级数据科学家能够用 SQL 编程不重要?
SQL、R 和 Python 之间的主要区别
r 和 Python 都是通用编程语言,带有附加包,允许用户执行数据科学的大多数技术要求,包括统计分析和机器学习。
随着工作级别的提高,能够执行机器学习和统计分析变得越来越重要,因此有理由认为,了解执行这些任务所需的语言也变得更加重要。
另一方面,SQL 是一种专门为在关系数据库中查询和操作数据而设计的数据库语言。
雇主通常要求 SQL 技能,因为他们将数据保存在关系数据库中,并希望他们的数据科学家能够访问这些数据。然而,一旦您访问了给定任务所需的数据,SQL 的作用也就差不多到此为止了。
尽管所有级别的数据科学家都应该能够提取和争论他们自己的数据,但随着工作资历的增加,这些技能变得(相对)不那么重要了。在一个足够大的组织中,一名高级数据科学家甚至可以让更多的初级数据科学家为他们提取和准备数据,这样他们就可以专注于他们有潜力增加最大价值的任务,如模型开发。
因此,R 和 Python 可以被视为数据科学的两种真正的语言,而 SQL 只是提供支持(顺便说一句,有多个为 Python 和 R 编写的包允许用户从这些语言中运行 SQL 查询)。
R 队还是 Python 队?
如果你计划在数据科学领域建立职业生涯,那么理想情况下,你应该学习 Python、R 和 SQL 这三种语言。
学习这三种语言不仅可以最大化你的就业前景和与其他数据科学家互动的机会,还可以让你利用每种语言的不同优势,并始终选择最适合工作的语言。
然而,如果您正在寻求向数据科学转型,并希望尽快获得您的第一个数据科学职位,那么您最好掌握一种语言,并学习如何使用它来有效地执行广泛的任务,而不是学习如何使用多种语言执行较小的任务集(或相同的任务集,但不太好)。
此外,支撑大多数编程语言的原则(如函数、for 和 while 循环、if/else 语句和变量类型)或多或少都是通用的,所以一旦你掌握了一门语言,你会发现以后再回头学习第二门(或第三门)语言会容易得多。
根据前几节的讨论,如果你必须选择一种语言开始,那么雇主的需求建议你选择 Python。
然而,在为数据科学选择编程语言时,雇主的需求并不是唯一要考虑的事情。在做出最终决定之前,你应该问自己的其他问题包括:
- 其他人都在用什么编程语言?
- 你打算用这种语言做什么?
- 未来呢?
- 你最喜欢哪种编程语言?和
- 专有语言呢?
我在博文中详细讨论了这些问题:团队 R 还是团队 Python?
结论
编程语言时好时坏,对于数据科学家来说,它们真的只是达到目的的一种手段。然而,你也可以对汽车说同样的话,就像大多数人没有汽车(或者至少没有优步)无法生活一样,除非你会编码,否则你不会在数据科学方面走得很远。
在本文中,我们将编程语言的选择范围缩小到 R 和 Python 中的一个,并列出了在两者之间进行选择时要考虑的一系列因素,但是到最后,如果您仍然不能做出决定,就选择一个(如果需要的话,抛硬币)并接受它。
因为归根结底,R 和 Python 都是数据科学的优秀语言,而且我不认为它们中的任何一种会很快消失。
吉纳维芙·海斯博士是一名数据科学家、教育家、人工智能和分析专家,拥有 吉纳维芙·海斯咨询 。你可以在LinkedIn或者Twitter上关注她。她还是 价值驱动数据科学 的主持人,这是一个每月两次的播客,面向希望最大化其数据和数据团队价值的企业。
想要发掘企业数据的价值,但不知道从何入手? 下载免费的数据科学项目探索指南。
应该使用哪种促销来增加销售额?一家快餐连锁店的营销活动案例研究
原文:https://towardsdatascience.com/which-promotion-should-be-used-to-increase-sales-c1c91b4ffb34?source=collection_archive---------6-----------------------
使用 Parsnip R 软件包的线性建模方法
Photo by JJ Ying on Unsplash
在向市场推出新产品时,一个常见的问题是什么样的促销对销售有最大的影响。一家快餐连锁店试图通过在几个随机选择的市场推出新产品来测试这一点。每个地点都采用不同的促销方式,并记录前四周的周销售额。
我通过这个链接从 IBM Watson 网站收集数据。以下分析的关键问题是:是什么推动了销量上千?为了回答这个问题,我们将从研究数据开始,并通过应用多元线性回归来确定哪种促销或市场规模的投资回报率最高。
这篇文章将使用一些现代的 R 包,包括 parsnip 用于建模, cowplot 用于组合图,标尺用于评估模型性能,以及配方用于特征工程。
数据集的描述
我们的数据集由 548 个条目组成,包括:
- AgeOfStores:以年为单位的商店年龄(1–28)。商店的平均年龄是 8.5 年。
- LocationID:商店位置的唯一标识符。每个位置由一个数字标识。门店总数为 137 家。
- 促销:测试的三种促销之一(1,2,3)。我们并不真正了解每次促销的具体情况。
- 以千为单位的销售额:特定 LocationID、促销和周的销售额。平均销售额是 5.35 万美元。
- 市场规模:市场规模有三种类型:小型、中型和大型。
- 周:进行促销的四周中的一周(1–4)。
所有这些变量对于建模过程都是有益的。我会把销售额以千为单位定为我们的目标变量,分析一下哪些变量对销售额的贡献最大。
首先,我导入数据集,然后根据需要安装或加载包。
marketing <- read_csv("WA_Fn-UseC_-Marketing-Campaign-Eff-UseC_-FastF.csv",
col_types = cols(MarketID = col_skip())) # removed MarketID because it's not needed.library(simpleSetup)# Load packages, install if needed
packages <- c('tidyverse',
'readr',
"recipes",
"magrittr",
"rsample",
"viridis",
"caret",
"parsnip",
"yardstick",
"broom")
library_install(packages)
探索性可视化
这个可视化阶段对于查看数据集中的模式和做出假设以测试建模部分是必不可少的。
The density plots of numeric values in the dataset
密度图类似于直方图,因为它们都显示变量的分布。这里的区别是 y 轴代表 x 轴上每单位的概率。然而,在这里,我更喜欢使用密度图,因为它们产生平滑版本的直方图,使它们看起来更美观,可读性更强。
这两个图显示了以千为单位的商店年龄和销售额的密度分布。大多数商店都很年轻,从 1 年到 10 年不等,而销售额最高的是每周 5 万美元。
The violin plots of categorical variables in the dataset. Every point is also visualized to make it easier to see the pattern.
这里的小提琴图显示了市场规模、周数和促销的分布,这些是与销售额相关的因素变量。
与其他促销相比,促销 1 具有更高的平均销售额和更多异常值,这意味着更高的销售额。较大的市场规模也显示了更高的销售额,同时分销范围也更广。第一周没有显示任何特定的高销售额模式,但是较胖的分布显示更多的人在第一周购买食物。
从这些可视化中,我可以做出如下假设:
市场规模大,促销 1 是销量提升的驱动因素。
建模过程将帮助我们确认这一点。
下面是上面两个图的代码:
marketing_trnformed <- marketing %>%
mutate(
Promotion = as.character(Promotion),
Promotion_factor = as_factor(Promotion),
week = as.character(week),
Week_factor = as_factor(week)
) %>%
select(-c("week", "Promotion", "LocationID"))# plot violin
marketing_trnformed %>%
select(Promotion_factor, Week_factor, MarketSize, SalesInThousands) %>%
distinct() %>%
group_by(Promotion_factor, SalesInThousands, MarketSize, Week_factor) %>%
summarise(sales = sum(SalesInThousands)) %>%
ungroup() %>%
select(-SalesInThousands) %>%
gather(x, y, Promotion_factor:Week_factor) %>%
ggplot(aes(x = y, y = sales)) +
facet_wrap(~ x, ncol = 1, nrow = 3, scales = "free") +
geom_violin(aes(x = y, fill = sales), alpha = 0.5) +
coord_flip() +
geom_jitter(width = 0.1, alpha = 0.5, color = "#2c3e50") +
ylab("Sales in Thousands") + xlab(NULL) +
theme_bw() <- promotion_plot#continuous variables: ageinstores and salesnum_vars_plot <- marketing_trnformed %>%
select(AgeOfStore, SalesInThousands) %>%
gather(x, y, AgeOfStore:SalesInThousands) %>%
ggplot(aes(x = y)) +
facet_wrap(~ x, ncol = 2, nrow = 1, scales = "free") +
geom_density(color = "skyblue", fill = "skyblue", alpha = 0.5) +
theme_bw()
建模
这篇文章在建模过程中使用了线性回归,因为这些特性很简单,只需要小小的调整就可以让它们适合建模。以下是关于线性回归需要注意的一些要点:
- 线性回归旨在从一个或多个输入 X 预测结果 Y。该算法背后的假设是 X 和 Y 之间存在线性关系。
- 线性模型(lm)试图通过最小化最小二乘准则来产生最佳拟合线性关系。通过找到最小的误差平方和来找到最佳拟合线。
- 较小的 p 值表明由于随机的偶然性,不太可能观察到实质性的关系。因此,如果观察到一个小的 p 值,我们可以很有把握地认为 X 和 Y 之间的关系是存在的。
为了说明这种多元线性回归模型,我们将线性建模方程定义如下:
y =截距+ c1 x 促销 1+ c2 x 促销 3+C3 x MarketSize _ Medium+C4 x MarketSize _ Large
其中:
- 截距:是所有预测的起点。在这种情况下,是 5 万美元。
- 模型系数(c1 到 c4): 估计调整模型中的特征权重。
特征工程
为了使我们的建模过程更有效,我们需要将数据转换成适当的格式。这里我们概述了一些转换步骤:
- 促销现在是一个数字变量,需要为每种类型的促销模拟成列。
- 对于每种类型的市场规模,使用一键编码来转换市场规模。
如果这些解释变量是分类的,这个过程也使得线性回归模型是可解释的。为此,使用一键编码。
下面的代码就是这样做的。我首先将变量推广和周转换成因子,并使用包 rsample 来分割数据集,70%的数据将用于训练,另外 30%用于测试。包配方也用于上述特征工程过程。
set.seed(3456)split <- rsample::initial_split(marketing_trnformed, prop = 0.7)split %>% training()split %>% testing()train <- training(split)
test <- testing(split)recipe <- recipe(SalesInThousands ~ Promotion_factor + MarketSize, data = train) %>%
step_string2factor(MarketSize) %>%
step_dummy(MarketSize, Promotion_factor, one_hot = TRUE) %>%
prep(data = train)recipetrain_recipe <- bake(recipe, new_data = train)
test_recipe <- bake(recipe, new_data = test)
一旦特征工程过程完成,建模过程使用 parsnip 包,这简化了建模过程,使其易于分析和可视化。
linearModel <- linear_reg(mode = "regression") %>%
set_engine("lm") %>%
fit(SalesInThousands ~ Promotion_factor_X1 +
Promotion_factor_X3 +
Promotion_factor_X2 +
MarketSize_Large +
MarketSize_Medium +
MarketSize_Small, data = train_recipe)
估价
为了评估模型如何拟合数据,我们测量拟合优度。使用标尺指定重要的度量标准:
linearModel %>%
predict(new_data = test_recipe) %>%
bind_cols(test_recipe %>% select(SalesInThousands)) %>%
yardstick::metrics(truth = SalesInThousands, estimate = .pred)## .metric .estimator .estimate
## rmse standard 10.5
## rsq standard 0.579
## mae standard 8.69
其中:
- rsq (Rsquared):这显示了我们的输入解释了多少差异。在这种情况下,我们的输入可以解释数据集中 58%的可变性。
- rmse(均方根误差):这量化了平均平方残差(即实际值和预测值之间的差异)。该模型显示 rmse 等于 10.5,而销售范围是 20-100。
- mae(平均绝对误差):rmse 的问题在于,由于它对残差求平方,因此会受到较大残差的影响。Mae 取而代之的是平均残差的绝对值。在这种情况下,模型显示 mae 等于 8.69。
衡量模型的业务影响的另一种方法是可视化模型的每个变量的功能重要性,并评估它对销售的贡献大小:
linearModel$fit %>%
broom::tidy() %>%
arrange(p.value) %>%
mutate(term = as_factor(term) %>% fct_rev()) %>%
ggplot(aes(x = estimate, y = term)) +
geom_point() +
ggrepel::geom_label_repel(aes(label = scales::dollar(estimate, accuracy = 1)),
size = 3) +
scale_x_continuous(labels = scales::dollar_format()) +
labs(title = "Linear Regression: Feature Importance",
subtitle = "Looks like large market size, promotion 1 and 2 contribute most to sales") +
theme_bw()
下图显示了从最高 p 值(Promotion_factor_X1)到最低 p 值(MarketSize_Large)排列的重要要素列表。促销 1 (11,000 美元)和大市场规模(14,000 美元)对销售额的贡献最大,正如我们上面展示的探索性可视化所预期的那样。
然后,我们可以通过添加系数来解释模型:
y = 50+ 14 x (1) + 11x (1) = 75
所以如果我们在大市场规模中使用促销 1,我们平均可以赚 7.5 万美元/周。与综合其他变量相比,这是最高的销售额。
限制
数据集很小,只有 508 个观察值。这使得一些变量,如促销 _ 因素 _X2 和市场规模 _ 小不包括在我们的模型结果中。当观察值较少时,模型决定不包括这些变量。
结论
为了增加销售额,快餐连锁店应该使用促销手段,以大市场为目标。
线性回归因其简单而给了我们解释的能力。特性重要性图能够显示每个变量的业务影响,这使得它对于利益相关者或非技术人员来说是容易的和相关的。这里的教训是,如果数据集不太复杂,简单模型比复杂模型更受欢迎。
我了解到的资源:
[## 样本数据:营销活动,促销效果-快餐连锁店
通过使用该社区中提供的样本数据集来熟悉 Watson Analytics。它们都经过测试…
www.ibm.com](https://www.ibm.com/communities/analytics/watson-analytics-blog/marketing-campaign-eff-usec_-fastf/) [## 商业科学大学
从虚拟研讨会中学习,这些研讨会将带您了解解决问题的整个数据科学业务流程…
大学.商业-科学. io](https://university.business-science.io)
我喜欢与人交流和聊天。我也乐于接受反馈和批评。请随时通过 LinkedIn 与我联系。
美国哪些州的邻居最多?
原文:https://towardsdatascience.com/which-u-s-states-have-the-most-neighbors-2b4f24c68ad9?source=collection_archive---------26-----------------------
Photo by Joey Csunyo on Unsplash
这将是一篇关于使用 python 来确定美国一个州(或任何任意地理位置)是否与美国另一个州(或任何其他任意地理位置)接壤的非常快速而肮脏的帖子。
我们的输入将是美国各州的一个 GeoJSON (只是一个描述复杂形状的 JSON),你可以从我的 GitHub 这里获得。而且,我们的输出将是一个 python 的字典,它将美国的每个州映射到一个单一的数字,表示它有多少个相邻的州。
我们这篇文章的主要工具是 python 库 shapely ,它帮助我们用 python 处理复杂的地理。
这个过程非常简单:对于美国的每个州,我们可以遍历美国的所有其他州,然后检查这两个州是否接触。如果是这样,我们可以更新当前有问题的州的相邻州的运行列表。
首先,我们需要将 GeoJSON 转换成 shapely 可以理解的对象。我们将使用的两个主要的造型优美的物体是:
- 多边形对象:基本上是一个单一的有界形状
- 多多边形对象:基本上是多边形对象的集合(因为美国的一些州由多个地理区域组成)
下面是解析 GeoJSON 的代码:
现在我们已经在state Polygons中获得了一个不错的州地理对象(多边形或多多边形)字典,我们可以遍历字典并检查每个州是否与其他州相邻。
并且,结果是:
不错!所以密苏里州和田纳西州并列第一,各有 8 个邻居,然后肯塔基州和科罗拉多州并列第二,各有 7 个邻居。
希望这篇文章对使用 shapely 进行空间应用有所帮助。感谢阅读!
被 BigQuery ML 带走了
原文:https://towardsdatascience.com/whisked-away-by-bigquery-ml-e98bacad2120?source=collection_archive---------12-----------------------
Photo credit: Phil Goerdt
预测 GCP 人对威士忌的偏好
“我在找…
…任何泥炭味的东西,像海滩上的营火一样冒烟,中度到高度的酒精,干果,柑橘,还有淡淡的陆地气息。”
我很容易走进当地的酒类商店,与工作人员中的威士忌男或女谈论品酒笔记(和笑话),他或她将能够知道我在寻找什么,并向我推荐。但是机器学习模型可以在最小数据集和有限输入的情况下做同样的事情吗?这就是眼下的问题。
(对于现在加入的人,感谢你们参与这一部分的报道!我建议你看看这个系列中的其他博客,但如果你不看,总结就是我有一堆威士忌数据和我的品尝偏好。让我们看看我们能从中学到什么。)
简单地说,BigQuery ML
在这个练习中,我将使用谷歌云平台的 BigQueryML 引擎。如果你没猜错,这是一个 ML 工具,它允许你创建 ML 模型并在 BigQuery 中运行它们。
对于任何在 BigQuery 中拥有大量数据的人来说,BQML 是一个不可思议的优势,因为数据可以保持不变,不需要定义数据框架。不仅如此,我们还可以在 BigQuery 中管理和运行我们的模型;这意味着不再需要供应特定于 ML 的计算虚拟机(或者我认为是物理机)。最后,我们可以使用 BQ 中的专用 SQL 命令创建这些模型。这不像其他 SQL 插件,需要大量用户定义的函数、类和其他有趣的东西来阻止我们开发真正的内容;它开箱即用。多酷啊。!
你为什么选择了那个?
我们为什么要关心这些特性呢?难道我不应该尝试使用 TensorFlow 这样的“真正的 ML 框架”吗?嗯,是的……也许吧。我可以尝试在 TensorFlow 这样的“真实框架”中做这个练习。但是,有几个原因让我没有走上那条路。
首先,我不想再写一篇“如何用 TensorFlow 做你的第一件事”的博客。已经被写死了。此外,像莎拉·罗宾逊这样的人在制作酷炫前卫的 TensorFlow 内容方面会比我做得好得多。BigQueryML 我们来了!
另一个原因是,在以前的博客中,我谈到了我在设计协同工作的系统时对简单性的热爱。我喜欢活动部件越少越好,故障点越少越好,从一开始就尽可能自动化。BigQueryML 很简单,对我来说试验起来很便宜,并且符合我当前的技术栈定义。使用它对我来说是很容易的。
最后,我的需求并没有规定我需要大马力的东西。我的训练集是刚刚超过 100 行的子集(2018 年我尝试过的所有威士忌),我正在进行非常简单的回归预测。由于这些原因,我认为使用一个更强大和高度工程化的解决方案过度训练的风险很高。(如果你愿意,可以在下面评论和讨论。如果对此有很多回应,也许我会在未来的帖子中做一些 TensorFlow 模型并与 BQML 进行比较。)
不管我选择 BigQueryML 的理由是什么,让我们进入使用它的正题。
大查询,大 ML?
正如我上面所说的,使用 BigQueryML 非常简单,这主要是由于产品的特性集。然而,简单易用并不意味着它没有细微差别。让我们根据我的数据创建一个示例模型,对其进行评估,并就此进行一些讨论。
我要和他一样的
在本系列的一些早期博客中,我提供了威士忌评级数据的快速浏览。这里有一个快速提醒:
Mmm… data tartare.
以上是两种威士忌的原始未加权分数,以及一些维度属性。你认为这足以预测?我认为这个案子还没有定论。我认为,如果我们从大多数喝威士忌的人通常如何开始他们喝什么的谈话来思考这个问题,通常是通过说一种威士忌,如“我是一个波旁威士忌的家伙”或“我只喝单麦芽威士忌”。有时候成熟会发挥作用,而且价格往往决定了我们买什么或能买得起什么。这些通常本身就是很好的指标。但是这个模型能够学习更多的东西吗?我们有足够的证据来发现细微差别吗?
我想我们得看看模特是怎么想的。
像专业人士一样做模特
既然我们已经对训练数据集了如指掌,让我们看看如何在 BigQueryML 中实际建模。
如果您熟悉 SQL,您可能已经猜到创建模型类似于任何 DDL 语句。使用create model
语句,我们可以创建一些在 BigQuery 中运行和训练的模型。GCP 文档在检查所有可用参数方面做得很好,所以如果你想了解我在这个例子中没有用到的东西,可以查看那里的。
--hi! i'm a (very) simple model for predicting a total score!create or replace model `sample_schema.predict_total_test`
options
( model_type='linear_reg', /*this is the model type*/
l1_reg=0, /*how much L1 regularization should we use?*/
max_iterations=5, /*how many times should we train?*/
input_label_cols=['label'], /*this is the column to predict*/
data_split_method='seq', /*how do we want to split the data?*/
data_split_eval_fraction=0.3, /*how much should we split?*/
data_split_col='date_sampled' /*which column should we split on?*/
) as /*this is a query to collect data to use in the model.
all of these columns must be present later when we run the model.*/select
f.rating_name as full_name
, f.distillery as distillery
, f.date_sampled as date_sampled
, f.total_score as label
from
`sample_schema.w_ratings_f` f
where 1 = 1
;
这看起来很简单,但是让我来分析一下到底发生了什么。
首先,我们有create or replace model
语句,后跟模型名称。接下来是options
子句,它允许我们参数化新创建的模型。正如我之前说过的,这里有很多有趣的杠杆和旋钮,你可以在文档中读到更多。这个例子中只有几个选项来激起你的兴趣。让我们来看看它们是什么。
model_type
:这是我正在创建的模型类型。我使用的是推荐的线性回归模型,用于预测和预报。l1_reg
:它控制模型中输入的权重,这对于减少特征中的噪声和移除稀疏、高维数据集中不相关的特征非常重要。既然这个模型如此简单,这里有一个 0 就可以了。但是,如果我们编辑模型使其具有更高的维度,我们可能需要调整这个参数。(这何时变得相关?让我们假设我将品尝笔记添加到数据集,并且只有一些样本集有这些笔记。因为这些注释是稀疏的(不适用于所有行),并且因为我们对每一行都有不同的注释(一组不同的文本),所以如果没有注释,我们希望将该特性的权重强制设置为 0,以忽略特定输入的注释。)max_iterations
:这是模型训练需要的步数。我对过度训练有所怀疑,因为这是一个如此小的数据集,这就是为什么我将最大值从默认的 20 降低到 5。input_label_cols
:标识将要被预测的列。简单来说,特征是输入,标签是输出。这里我试着预测总分。- 我们应该如何分割训练数据?选项有
random
和seq
。 data_split_eval_fraction
:控制分割多少数据用于训练。默认是.2
,但是由于这个数据集很小,我更喜欢多一点。因此选择了.3
。data_split_col
:标识要拆分数据的列。它不包含在功能集中。
继续往下看 SQL 语句,您会注意到有一个select
语句为模型提供数据。这是不言自明的,这种不需要定义数据框架、特性和 ML 模型附带的所有其他有趣的东西的简单性使得 BigQueryML 对我这种情况的人非常有吸引力。
一旦定义了模型,我就可以运行上面的语句,接下来发生的事情非常酷。BigQuery 接收模型逻辑,查询数据,然后在 BigQuery 中运行模型。说真的,这多酷啊?眼尖的(具有计费管理权限)可能会注意到 GCE 有几个额外的行项目,这是因为您将为运行这些 ML 语句付费。但是,在运行这些资源时,您不需要负责旋转它们。
既然我已经运行了模型,我应该对它进行评估。这样做的原因是为了更好地理解模型的准确性。虽然我们可以明确地知道模型是否准确(因为,你知道,数学),但在某些情况下,模型构建和调整更像是艺术而不是科学。让我们通过几个例子来说明为什么会出现这种情况。
考试时间
我可以通过在 BigQuery 中运行以下命令来检查我的模型准确性的一些重要指标:
select *
from ml.evaluate(model `sample_schema.predict_total_test`);
这将为您提供如下所示的输出:
Uh… thanks?
上述各种统计数据有助于量化模型中的误差量;即模型与正确分数“偏离”了多少。如果我们每次都试图预测正确的分数(我们确实是这样),我们会试图让误差尽可能接近零。
Who remembers “line of best fit” from stats class?
让我们快速浏览一下谷歌 ML 速成班的这张图。这张图向我们展示了模型是如何试图适应数据集的,显然右边的模型做得更好。通过查看模型的统计误差,我们似乎可以做得更好…对吗?
理论上,是的,我肯定可以。接下来,我用不同的特性集多次运行同一个模型,以确定是什么影响了模型的错误率。您可以在下面看到,添加和删除额外的功能使错误率发生了很大的变化,没有一个错误率比基本模型低。
Wow. Such stats.
这是否意味着我们应该回到基地?在我看来,没有,原因如下。数据集太小了。如果我们看一下基本模型,有两个特征:威士忌的全名和酿酒厂。如果我只是用这些来预测我是否喜欢威士忌,随着时间的推移,我可能会得到很差的结果。当我添加更多特征时,错误率上升的原因是没有足够的数据或足够丰富的特征来确定模式。
这意味着,尽管我们可以从数学的角度来看一个模型是“最正确的”,但这并不意味着它将扩展或能够从它所接触到的新数据中学习。那有什么意义呢?
回到制图板?
从第一个模型开始,我已经制作了几个其他的模型,并对它们进行了试验,产生了更好的结果。这个过程的一部分是获取更多的数据,特别是向模型中引入品尝记录。此外,调整模型参数也有帮助。那么最终的“进展中的工作”是什么样的呢?
Not bad… right?
我觉得上面的成绩还可以。显然,我仍然需要对模型做一些调整,我也认为小数据集是问题的一部分。(如果你想查看所有的推荐,请随意前往该死的 Dram 。)
但我们不要忘记这里的明星,BigQueryML。在 BigQueryML 中构建、管理和测试这些模型是如此的容易,而且它无缝地集成到了我已经在构建的东西中。我看不出这有什么不对。
Phil Goerdt 是专门研究云架构和数据工程的独立顾问。
谁是独立选民
原文:https://towardsdatascience.com/who-are-independent-voters-f12160f72b3?source=collection_archive---------14-----------------------
对一个政党认同“不太强烈”的人和那些认同独立但“更接近”一个政党的人之间的差异。
我们使用的数据是由 YouGov Blue 和进步数据组织 Data For Progress、进行的民意调查,它由 3215 名选民组成,然后根据“年龄、性别、种族、教育、城市/农村状况、党派、婚姻状况和人口普查地区”进行加权,以反映美国投票公众,权重附加到 2018 年选民份额的编目员的数据。他们公开发表了数据,对此我表示感谢。
我要展示的数据来自政党识别问题,尽管我希望他们也被问到这个人的实际注册政党是什么,因为我来自肯塔基州,在肯塔基州第六区, 根据《纽约时报》的最新民调(或者参考哈里·恩滕的推特传记“政党 ID 不等于政党注册”),注册的民主党人只有大约 65%投票给艾米·麦格拉思,研究竞选活动如何克服数据缺陷并找到自称是自己政党但注册为反对党的选民将是有益的。
然而,被问到的问题是“总的来说,你认为自己是一个…?”回答政党的人的后续问题是“你会称自己是强大的(插入政党)还是不太强大的(插入政党)?”对于那些把自己列为无党派、其他或不确定的人,接下来的问题是“你认为自己更接近民主党还是共和党?”。一个简单的条形图将我们引向这一价差。
拥有更大样本量的好处是,我们可以看到答案的内部,所有类别至少有 200 个回答(除了不确定我和谁更接近,但我们现在忽略它们),我们可以看到这些群体的行为。我想重点介绍的群体如下:
首先,我们将看看这五类中每一类的意识形态。我们将把“更接近共和党”称为共和党独立人士,民主党也是如此。我们将把共和党+不是很强的人称为共和党弱势党员,民主党也是如此。
正如我们所见,共和党弱势党员和共和党独立人士更有可能自称为保守派,而不是民主党人自称为自由派。我们还看到,有一个“更接近民主党”的小组,在民主党的左边,比他们的保守派对手略大。总的来说,民主党人比共和党人多,所以当考虑哪些地区应该努力扩大你的基础,而不是向中间靠拢,为民主党争取温和派。即使意识形态不同,政党 ID 的投票模式在很大程度上是普遍存在的。
当我们看一看这些群体在 2018 年众议院选举中投票给谁时,我们首先看到了党派(或缺乏党派)投票行为的总体趋势。在此图中,我们比较了政党 id 与 2018 年投票:
它变得有点混乱,与所有的“精益 ______”和次要选项,所以这里有精益民主党和精益共和党和犹豫不决的两党投票。
这里我们看到,强党、弱党和无党派人士通常会投票给自己的政党,但当我们比较弱党和无党派人士时,我们看到无党派人士比弱党更有党派性。
当查看 2018 年全党选票的交叉表时,我们看到共和党人只获得了 77%的不是很强的共和党人,但民主党人获得了 88%的不是很强的民主党人,这对 2018 年的民主党竞选活动是一个很好的推动。
当我们对比无党派者和有党派者的政策偏好时,我们也看到了相似的趋势,但是我们看到弱党派者和无党派者比强党派者有更多的相似之处。以下是每个小组对黑人的命也是命的看法。
我们看到软弱的党派民主党人和党派独立民主党人对 BLM 的看法比强大的民主党人更相似,但党派独立共和党人认为 BLM 更像强大的党员,这让我们稍微绕了一下,看看政党 ID 的种族怨恨得分(代码本第 10 页)。
在这里,我们看到对弱势党派的种族怨恨更多的是针对总的中间值,而对党派独立人士的种族怨恨非常接近强势党派。也许这有助于我们解释唐纳德·特朗普的下一个交叉表,正如我们所见,弱势党派比党派独立人士更愿意打破排名。共和党人也有很多只愿意说“有点”而不是“非常好”的人,这可能会导致未来的投票率问题。尽管如此,共和党人可能会比其他人更倾向于消极的党派偏见。
我们还看到,表示支持特朗普的 60 名民主党人(强势、弱势、党派独立)的种族怨恨得分平均为 0.3941,与共和党人相似。在 114 名表示不支持特朗普的共和党人(强势、弱势、党派独立)中,种族怨恨得分为 0.3088,51 名得分非常不利的共和党人的平均种族怨恨得分为 0.2333,与弱势民主党人相似。这些样本量太小了,但是你可以在更大的数据集中寻找。
下一个数据是按党派 ID 查看 2016 年选举,因为我们的民调是基于 2018 年的投票率,所以重要的是要记住,这个样本在民主党中比 2016 年高出约 6%,所以唐纳德·特朗普的数字看起来会比实际情况好一点。
我最感兴趣的方面是特朗普能够抓住几乎 10%的弱势民主党人。党派独立人士虽然没有投票给特朗普,但也没有投票给希拉里。当然,还有“真正的无党派人士”,我们接下来会看看他们,希拉里比特朗普更接近加里·约翰逊。
让我们来揭开“真正的独立人士”的面纱,看看他们有多忠于自己的诺言。
他们的投票行为有点不稳定,但基本上是可以预测的。他们是多元化的共和党人,2018 年投票给共和党人的人大多投票给特朗普,剩下的几乎等量的选票投给了自由主义者加里·约翰逊(Gary Johnson)、希拉里·克林顿(Hillary Clinton),或者不投票。投票给民主党众议院候选人的“真正的独立人士”大约有一半时间投票给希拉里,另一半分配给加里·约翰逊(12%)、特朗普(8.5%)、吉尔·斯坦(8.12%)、不投票(7.51%)、其他(6.51%)和埃文·麦克穆林(4.59%)。
改变党派投票的独立人士只占美国选民的一小部分。
Total of 6.87% of total Americans switched from Obama voter->Trump, or Romney->AntiTrump
Only 2.13% changed from Trump Voter->Don’t Re-Elect Trump or Hillary Voter-> Re-Elect Trump
这个过去的图表非常糟糕,你可能不应该吸引特朗普的选民,而是你在 2020 年的基础。人们基本上不会改变对同一个人的看法。
85%的人投票支持参议院和众议院的同一个政党(第二届民主党/民主党+民主党/民主党+共和党/共和党)
这里还有一些表格:
I don’t really like the colorful texts either
This is better
Green Jobs particularly poll well with Non-Strong Partisans, 76% — 16% (Grand Total Line)
Labor Unions Poll poorly, 44–48, but with total voters, it is 49–41
在 2018 年投票的非强势党派选民中,略低于 75%的人在 2016 年投票给了同一个政党,即使他们之间没有强烈的党派关系。两次都没有投票给他们预期的政党的两类非强势党员约占 2018 年选民的 11%。投票给反对党的人就更少了。这部分选民中大约有 3%投了反对党的票。吸引持不同意见的 8%的人比吸引另一方的 3%的人更有用。
#Veganuary2019 的演员有哪些?
原文:https://towardsdatascience.com/who-are-the-actors-of-veganuary2019-f408579141bb?source=collection_archive---------28-----------------------
第 1 部分:Tweets 数据分析
1.介绍
“纯素食日”是由英国慈善机构“纯素食日”组织的一项活动,鼓励人们在一月份尝试纯素食(只吃植物性食物)。人们参与这一挑战的主要原因包括动物福利、气候变化和改善个人健康等问题。今年报名参加的人数创下了新纪录。Veganuary 透露,全球共有 250,000 名参与者订阅加入该运动。
素食主义比以往任何时候都是最热门的话题,因此给了 Twitter 数据分析一个绝佳的机会。这将有助于深入了解该运动的影响,并确定积极参与该运动的行为者。不幸的是,并没有收集整个一月的推文,因此,这篇文章只对 2019 年 2 月的事件略有所知。我在这里的目的是熟悉 Twitter API,并对我感兴趣的辩论进行数据清理和数据探索性分析。我们开始吧!
2.数据收集
这个项目的数据是使用 Twitter API 收集的。这些推文是在 1 月 22 日至 1 月 31 日之间收集的。总共有 21,421 条推文使用#Veganuary2019 和#Veganuary 运动的官方标签记录。
首先,请求库用于读取数据,然后构建在 JSON 编码器中。然后,我在 python 笔记本中预处理并分析了这些推文。
在这里,我要感谢一些伟大的媒体成员,他们帮助我实现了我的分析。如果你对文化和城市感兴趣,可以看看 Vishal Kumar 的文章。相反,如果你更热衷于学习如何掌握熊猫和收集推特数据,那么就去读读泰德·彼得鲁和马尔科·邦扎尼尼。
3.数据分析
以下图表说明了为更好地理解围绕#Veganuary2019 的讨论以及参与挑战的参与者而进行的介绍性分析。
在这里,我将介绍以下结果:
- 每小时的推文数量
- 前 10 名推特用户(按关注人数)
- 前 10 名推特用户(按推特数量)
- 转发量最高的 10 个账户和推文
每小时的推文数量
下图显示了每小时的推文数量。有趣的是,人们最活跃的时间是午餐和晚餐时间。这很可能是因为人们在用餐时谈论了#素食主义者的话题,并借此机会在推特上发布了这个话题。
从中午到下午 2 点总共发布了 2941 条推文,从晚上 7 点到 9 点发布了 2613 条推文。在凌晨 1 点到 6 点(GMT +0)之间,平均有 240 条推文发布,这可能对应于美国或亚洲国家用户发布的推文。
The bar chart shows the average number of tweets by hours between the 22nd-31st of January
十大推特账号:名人
用户的关注者越多,他的推文就越有可能被大量的人阅读。下图显示了参与素食讨论的十个最受欢迎的账户。
毫不奇怪,前两个地方由著名的英国名厨占据:戈登·拉姆齐和杰米·奥利弗。然而,他们受到各种行为者的关注,如媒体公司(SkyNews 或 New Scientist)、快餐连锁店(Nandos)甚至加拿大奥林匹克队(Team Canada)。这清楚地表明,讨论不是局限在一个小圈子内,而是扩展到各个人口群体。
The bar chart shows the most famous accounts by the number of followers
你想知道这些演员的推特是什么吗?看一下桌子!
The table shows the top ten most famous tweeters
How you do #Veganuary! Gordon Ramsey
十大推特账号:推特
值得注意的是,那些最著名的人并不是#Veganuary 的主要演员。为了了解积极参与宣传活动并讨论前述动物蛋白挑战一个月的人的身份,有必要看看每个推特用户的推特(包括转发)数量!下图说明了这一分析。
行动者由组织和个人组成,他们的共同目标是教育公众关于动物权利、气候变化和人类健康的知识。
The bar chart shows the most active tweeters by number of tweets
十大转发推文
转发推文的数量提供了对推特用户行为的有趣洞察,或者换句话说,对人们行为的有趣洞察!下表列出了被转发次数最多的 10 条推文,以及它们来自哪些 Twitter 账户。
有趣的是,有一半的推文邀请 Twitter 用户参加比赛,以赢得免费的东西,如纯素食巧克力、葡萄酒、植物奶酪或蛋黄酱,或者美味艾拉的美味植物食谱!😃
The table shows the tweets that have been retweeted the most
结论
该结束了!:-)这篇文章研究了 2019 年 1 月的大约 21,421 条推文。我希望你喜欢这篇文章,如果你想留下任何意见,建议或想法,我真的很感激!所以,请随时伸出手来!
我的代码可以在下面的 Github repo 中找到。
接下来的步骤
每天,我都在发现更多关于数据分析的东西,因此,我的下一篇文章将探索一些推文的自然语言处理(NLP )!素食 2019 的演员和参与者实际上在发什么微博?他们如何参与话题,是积极的、中立的还是消极的参与?
感谢您的宝贵时间!
奥德
我是 数据和植物科学家 在 垂直未来 ,之前在WBC SD。理学硕士。在城市分析和智能城市方面,来自 UCL 的 Bartlett 伦敦的 CASA 和 BSc。在食品科学方面来自 苏黎世联邦理工学院 。对城市、美食、健康充满热情通过Twitter或LinkedIn取得联系。
Twitter 上最具人力资源分析影响力的人是谁
原文:https://towardsdatascience.com/who-are-the-top-hr-analytics-influencers-on-twitter-f44a19e198a0?source=collection_archive---------33-----------------------
可视化 Twitter 社交网络人力资源分析
日常生活中,人们使用 Twitter 等社交媒体来分享想法和创意。兴趣相投的人聚在一起,通过重新分享或回复自己喜欢的帖子,在网络平台上进行互动。通过研究人们如何在社交网络上互动,这将有助于我们了解信息是如何分布的,并确定谁是最突出的人物。
在我们的上一篇文章中,我们使用 Twitter feeds #HRTechConf 进行了主题建模研究,并训练了一个模型来学习所有推文的主题。在本文中,我们将分析 Twitter 用户交互,并将其可视化为一个交互图。这里是互动图表网页的链接。
社交网络是社会互动和个人关系的网络。
牛津词典
我使用 Python 3.6 和以下软件包:
- Tweepy :用于访问 Twitter API 的 Python 库。
- NetworkX :用于研究复杂网络结构的 Python 包。
- PyVis :用于创建和可视化交互式网络图的 Python 库。
如果你对组织网络分析感兴趣,可以查看我们写的这篇文章。
数据采集
我们使用 Tweepy (一个用于访问 Twitter API 的 Python 库)来提取所有提到 HRanalytics 的 Tweepy。由于 Twitter API 限制,只能检索到 2019 年 11 月 2 日至 11 日发布的推文。总共有 333 条推文。
我们认为,当一条推文被转发或回复,或者一个 Twitter 用户在另一个用户的推文中被提及时,就存在 Twitter 用户互动。这个想法是,如果某人的推文或名字在网络中出现得更频繁,那么他对人力资源分析的话题就有更大的影响力。
在下面的转发示例中,我们认为 Twitter 用户 Sonianasher 和HR 策展人之间存在交互。
RT @ HR 策展人:博世如何利用游戏化构建# HR 分析技能(案例分析)https://t.co/8IjyO1HdUe【digital hrtech @ analytics inhr…
索尼亚纳舍尔
图形建模
社交网络,例如 Twitter 图,由节点和边组成。节点是 Twitter 账号,边是 Twitter 用户之间的交互。
社交网络,例如 Twitter 图,由节点和边组成。节点是 Twitter 账号,边是 Twitter 用户之间的交互。
还有,如果 B 转发、回复或提及 A 的推文,很有可能是一个 Twitter 用户 A 对用户 B 产生了某种影响。因此,Twitter 网络是一个有向图。在上面的例子中,用户 Sonianasher 不仅与HR 策展人有联系,还受到HR 策展人的推文的“影响”。
import networkx **as** nx
graph = nx.DiGraph()
为了构建我们的 Twitter 网络,我们使用了 NetworkX ,这是一个用于研究复杂网络结构的 Python 包。
degrees = [(node, val) for (node, val) in graph.degree()]
degrees_df = pd.DataFrame(degrees, columns=['node', 'degree']).sort_values(
by='degree',ascending=False)
degrees_df.head(10)
333 条检索到的推文中的所有交互都被添加到有向图中。让我们看看我们的 Twitter 网络连接得有多好。
degrees_df.describe()
推特账号HR 策展人拥有最多的互动(40 次),而 martinhoyes 拥有 15 次。
nx.number_connected_components(graph.to_undirected())22
哇,我们有 22 个不相连的子图,这可不好。我们最感兴趣的是大型全连通图。
nodes = max(nx.connected_component_subgraphs(graph.to_undirected()), key=len)
largest_subgraph = graph.subgraph(nodes)
print(nx.info(largest_subgraph))
Name: Type: DiGraph Number of nodes: 84 Number of edges: 100 Average in degree: 1.1905 Average out degree: 1.1905
最大的子图有 84 个节点和 100 条边。让我们确保这个图中的所有节点都是连接的。
nx.number_connected_components(largest_subgraph.to_undirected())1
太好了!它只有一个连通图。
网络可视化
现在,我们可以绘制我们的 Twitter 互动网络。
node_degree = largest_subgraph.degree()
pos = nx.spring_layout(largest_subgraph, k=0.4)
plt.figure(figsize=(18,16))
nx.draw(largest_subgraph, pos=pos,
linewidths=0.2, node_color=range(len(node_degree)),
node_size=60, alpha=0.6, with_labels=True)
nx.draw_networkx_nodes(largest_subgraph, pos=pos, node_size=10, alpha=0.3)
plt.show()
现在,我们可以绘制我们的 Twitter 互动网络。
Twitter Network
环形布局的相同网络。
Twitter Network — circular layout
似乎许多箭头都指向节点HR 策展人和 martinhoyes ,这证实了我们之前在上面的分析中发现的,用户HR 策展人和 martinhoyes 在这个网络中最有影响力。
from pyvis.network import Network
net = Network(height="850px", width="100%", bgcolor="#222222",
font_color="white", directed=True)
net.from_nx(largest_subgraph)
net.show("interactive_graph.html")
这很酷,但是很难将每个节点的连接可视化。别担心。我们使用 PyVis 库来构建一个交互式 web 图,允许用户拖动、悬停和选择节点和边。这里是交互式图形网页的链接。
Interactive Twitter Network
结束语
像 Twitter 这样的社交网络拥有大量关于人类行为和社会的信息。社交网络的出现使得对信息分布、影响传播和社区结构的研究成为可能。事实证明,图表分析在从网络中发现这些见解方面很有价值。
如果您有任何问题或反馈,请随时发表评论。
机器学习快乐!
原载于 2019 年 11 月 17 日【https://ai-journey.com】。
谁是“资深”数据科学家?—一些想法
原文:https://towardsdatascience.com/who-is-a-senior-data-scientist-some-thoughts-bba0abc4d842?source=collection_archive---------21-----------------------
source: https://teespring.com/shop/senior-data-scientist-ba#pid=2&cid=2397&sid=front
在过去的几周里,以及几个月前,我参与了一个“高级数据科学家”职位的筛选和面试。在这个过程中,我花了相当多的时间思考:
a)是什么让候选人在数据科学方面更资深/更有经验?
b)与我们面试相对初级的数据科学家相比,我们如何调整面试流程来测试这种“资历”?
我必须明确指出,我在这方面没有太多的经验,但是在两个非常不同的组织中作为采访者和被采访者参加过这样的采访之后,我形成了一些观点。这篇文章收集了我对高级数据科学家应该知道的一些个人观点。
请注意:我的经历是在数据科学团队嵌入非专注于人工智能的公司(目标是用人工智能支持增强公司的产品)的背景下,而不是在人工智能优先的公司,这些公司有大量的研究人员、开发人员和其他专门致力于构建机器学习系统的团队。
Q1:是什么让候选人在数据科学方面更资深/更有经验?
下面是我关注的四件事:对模糊问题描述的反应、建模之外的知识、高效沟通以及指导/领导经验。
a)一个有经验的人不应该对不太具体的问题描述感到不舒服,应该主动提问以理解问题的要求,比如说,面试官用 1-2 句话描述了一个与他们组织相关的问题,并问你将如何处理这个问题?,有了好的候选人,讨论可以进入各个方面,如:如何收集数据,如何建立和选择学习模型,如何决定部署后的关键绩效指标,以及与非技术受众沟通。对于不太有经验的候选人,要么候选人只谈论学习模式,要么不通过问这些问题来继续讨论。
b)有经验的候选人将对部署数据科学系统的不同阶段有所了解——如果不是所有这些阶段的专业知识。也就是说,他们会对一些问题有话要说,比如:一旦模型建立起来,我们该做什么?它如何与将要嵌入的现有产品进行对话?我们可以使用什么工具在其他地方部署这些本地构建的具有 101 个依赖项的模型(比如在云上)?).一个不太缺乏经验的候选人可能不知道除了他们自己在项目中的角色之外的那么多细节。
c)有经验的候选人会是更好的沟通者。通常,高级数据科学家最终会参与项目的各个阶段,从需求收集到向客户展示结果。因此,在我看来,高级数据科学家还应该能够成为相关的技术和非技术团体之间的联络人。一个缺乏经验的候选人可能擅长技术方面,但不需要清楚地表达出来。
d)有经验的候选人可以独立工作,也可以承担起指导年轻数据科学家的责任。如果需要的话,他们还应该愿意承担项目的所有权并领导项目的方向。这一点尤其重要,因为在这种情况下,太多的注意力放在研究新奇的东西上,最终可能不会产生任何有形的产品。经验不足的候选人不太可能有这种经历。
Q2:我们如何调整面试程序来测试这种“资历”?
a)提出更多开放式的问题解决方案——这解决了 Q1 的第一点。一个有经验的数据科学家,即使他们以前从未听说过这个问题,也应该能够通过向面试官问更多的问题,并根据他们迄今为止的经验推断出他们所知道的东西,来对这类问题有所了解。
b)询问他们/他们的团队当前的技术架构、编程实践、他们与工程师的合作有多密切等——具体问题各不相同,但我认为这解决了 Q1 的第二点。一个有经验的候选人应该对一个项目的不同阶段所使用的一些先进的工具有所了解,并且对除了他们已经知道的之外还有什么其他选择有粗略的想法。
c)Q1 的第三点可以在面试过程中通过让候选人更多地谈论阐明他们的想法来测试,例如要求描述一个非常简单和非常复杂的机器学习模型背后的直觉。
d)在 Q1 解决第四点可能很简单——询问候选人关于指导经验、项目管理经验以及围绕这些的行为问题。
需要注意的一点是:这些是我会在常规面试过程中调整的东西,而不是我会寻找的唯一东西。也就是说,如果角色需要,候选人仍然需要技术过硬,擅长动手编程等。
谁是漫威电影中最重要的角色?
原文:https://towardsdatascience.com/who-is-the-most-important-marvel-movie-character-c8bba653b31?source=collection_archive---------6-----------------------
MCU 的数据分析(或者为什么钢铁侠可能值得他的百万身价)
乔和安东尼·罗素承认是小罗伯特·唐尼的《钢铁侠》为所有漫威电影定下了基调。毕竟,是唐尼用同样尖刻的话开始和结束了《复仇者联盟》的传奇——“我是钢铁侠”。鉴于《复仇者联盟》的最后阶段已经在全球范围内获得了近 20 亿美元的票房,而漫威的其他电影也获得了数十亿美元的票房,我想知道,这些成功有多少要归功于钢铁侠?
为了回答这个问题,我编写了代码来解析所有的漫威电影宇宙电影剧本。尽管我无法获得《奇异博士》和《惊奇队长》的完整剧本,但我仍然能够收集到 21 部漫威电影中 19 部的详细数据。其他人可以在 github 上看到的剧本文件和用于处理它们的计算机脚本。有了这些原始数据,我认为有可能看到超级英雄的黄金有多少是由于钢铁侠的影响。
演员工资
要想知道托尼·斯塔克(Tony Stark)给漫威电影宇宙(Marvel Cinematic Universe,MCU)带来了多少价值,最简单的方法就是看看他得到了多少报酬。虽然确切的数字很难得到,好莱坞记者和其他消息来源提供了一些关于漫威电影中每个演员收入的估计。到目前为止,我关注的只是每个演员从一部电影中获得的最大收入。结果如下所示。
就原始美元而言,小罗伯特·唐尼是迄今为止最大的赢家。有传言说,他从自己电影的票房收入中获得一定比例的分成。因此,据估计,他在《复仇者联盟无限战争》中赚了 5000 万美元,在《复仇者联盟终局》中赚了 7500 万美元。在接下来的部分,我们将看到他是否真的值得。
电影角色
衡量 MCU 中哪个角色最重要的一个简单方法是看哪个角色出现在最多的电影中。如果我们按照电影中出现的顺序来描绘漫威的主要角色,我们会得到如下结果。
说到电影出场,技术赢家是史蒂夫·罗杰斯(又名美国队长)。当然,Cap 只是挤掉了其他复仇者,因为他在蚁人有一个简短的后期制作。如果我们忽略这一幕,那么雷神、美国队长、钢铁侠和黑寡妇都并列最多电影出场(各有 8 个学分)。尼克·弗瑞以 7 次出场紧随其后。这是有道理的,因为他基本上形成了复仇者联盟。
因此,就电影角色而言,钢铁侠似乎并不比其他复仇者联盟更重要。
对白
为了更深入地挖掘,我们不仅可以看一个角色在电影中的数量,还可以看他们有多少行对话。这是一个很好的屏幕时间的代理,告诉我们一个角色对故事有多重要。
汇总所有可用的漫威剧本,并绘制出每个角色的对话的总行数,下面的画面出现了。
这里我们看到托尼·斯塔克遥遥领先。远远落后于他的第二和第三名是托尔和史蒂夫罗杰斯,他们也是 MCU 的核心。如果我们看一个漫威角色说话的总字数,而不仅仅是对话的行数,那么托尼·斯塔克又赢了。有趣的是,健谈的洛基现在排名第四,而说话温和的史蒂夫·罗杰斯远远落后于托尔。
网络分析
有人可能会说,一个角色在银幕上的突出地位可能没有反映出他们对故事的重要性。一些字符可能不需要很多行就可以集成到 MCU 中(我正看着你格鲁特!).
为了了解主要漫威人物的重要性,我决定使用一些简单的网络分析技术。使用 python NetworkX 库,我将电影角色转换成图形中的节点。然后,我添加了边缘来表现屏幕上的角色互动。所以举个例子,如果雷神的一行对话跟随着布鲁斯·班纳(绿巨人)的一行对话,我们知道这些节点应该是连在一起的。使用这种方法,我能够构建以下主要 MCU 特征的图表。
Network Graph of the Marvel Universe based on Character Interactions
我们可以看到,最初的 6 名复仇者是漫威宇宙的核心,形成了图表的中心。外部部分与 MCU 中的其他“世界”相关。这些包括蚁人世界,银河护卫队集群,奇异博士的网络和附近的 Asgard。彼得·帕克也出现在复仇者联盟和钢铁侠角色旁边。这清楚地表明,他将取代托尼·斯塔克成为 MCU 的核心。
所以,很明显复仇者联盟构成了漫威宇宙的核心,但他们中的哪一个才是最核心的呢?对中心性的一个基本测量是计算一个节点有多少条边。通过绘制每个字符的连接数,我们可以测量它们在图中的连接程度。
这一次,托尼·斯塔克显然是赢家。事实上,钢铁侠和几乎所有其他漫威角色都有直接联系。
为了完整起见,我们可以看看网络中心性的其他度量。这些包括中间性中心性、特征向量中心性和接近中心性。介数衡量一个节点作为通向其他节点的桥梁的频率。特征向量中心性赋予网络中节点的影响力一个数值。并且,接近中心性表示网络中一个节点和所有其他节点之间的最短路径。这些措施的结果如下。
我们可以看到,就“中间性”而言,托尔名列前茅。这很有意义,因为他与复仇者联盟、惊奇队长、史蒂文·斯特朗奇和所有银河护卫队人都有直接联系。他是 MCU 里两个世界之间的一个人。在特征向量中心性中,钢铁侠名列前茅,表明他的节点是网络中最有影响力的。最后,就亲密度而言,托尼·斯塔克再次胜出,因为他与大多数其他角色都关系密切。
结论
根据我的分析,托尼·斯塔克、托尔和史蒂夫·罗杰斯显然是漫威电影宇宙的核心人物。他们是 MCU 网络的最核心,对话最多,因此薪酬最高。当然,钢铁侠得到的比他的复仇者伙伴们还要多。从大多数方面来看,他是最有关系、最有影响力和最杰出的角色,我认为公平地说,扮演他的演员配得上他的天价片酬。
奖金图表
感情
使用 R sentimentR 库,我计算了与每个角色相关的对话的平均情绪。
看起来大多数复仇者都相当乐观(不像他们的 DC 超级英雄同行)。事实上,就对话价而言,名字叫彼得·帕克和佩珀·波茨的人名列前茅。另一方面,银河护卫队,尤其是加莫拉,火箭浣熊和 Drax 是相当不积极的。正中间是尼克·弗瑞。这适合一个既有组织对抗星际威胁的偏执狂,又乐观地相信他们可以被征服的角色
复仇者联盟词汇云
为了好玩,我还为 6 个核心复仇者联盟制作了单词云。看看你能不能猜出哪朵云和哪个角色相配。
Word Clouds for Iron Man, Thor and Captain America
Word Clouds for the Hulk, Black Widow, and Hawkeye (Clint Barton)
电影界最重要的人物是谁?
原文:https://towardsdatascience.com/who-is-the-most-important-person-in-the-film-industry-61d4fd6980be?source=collection_archive---------18-----------------------
William Shakespeare (left), Robert De Niro (middle), and Miles Long (right). Headshots from IMDB.com
使用 IMDB 数据的网络分析
凯文·贝肯曾说,他“与好莱坞的每个人或与他们一起工作的人合作过”,这导致了室内游戏“六度凯文·贝肯”,以及各种模仿,广告,棋盘游戏,脱口秀表演,甚至慈善机构“【SixDegrees.org】”。该游戏包括通过与其他演员共享电影,尝试将一个演员与凯文·贝肯联系起来,在六个连接内。例如,尼古拉斯·凯奇与梅丽尔·斯特里普一起改编,梅丽尔·斯特里普与凯文·贝肯一起在《荒野之河》中饰演角色(相隔 2 度,意味着尼古拉斯·凯奇的“培根指数”为 2)。网上也有各种资源,像培根神谕,计算一个演员的“培根数”。
Nicolas Cage is two degrees separated from Kevin Bacon, meaning Nicolas Cage has a “Bacon Number” of 2. Nodes (or vertices) in blue and links (or edges) in orange — explained in more detail below.
但是,凯文·贝肯是电影业中“联系最紧密”还是“最重要”的人吗?为了回答这个问题,我下载了整个 IMDB 数据库。这是一个丰富的数据集(就像从 1894 年开始的超过 510 万个标题中的超过 360 万人),一旦你开始从这些数据中“提取网络”,它就会变得非常庞大。通过“提取网络”数据,我的意思是我们感兴趣的不仅仅是人和电影,还有他们所有的联系。为了让分析更容易,我只使用了 1960 年后制作的电影,这些电影的 IMDB 评分至少为 4,171(平均值),总体评分高于 1.0。尽管如此,一旦我们提取网络,我们得到超过 12,000 部电影,超过 50,000 人,和 50 万个独特的连接!
网络由节点(或顶点)和链路(或边)组成。在 IMDB 网络的情况下,我们可以在同一个电影中使用节点和协作作为链接来表示人们。在网络分析中,有许多不同的方法来度量网络中节点的“重要性”,称为“中心性”度量。我在这里用引号将单词“重要性”括起来,因为这是一个主观的术语,一个节点对网络的重要性有不同的方式。这就是为什么有不同的中心性测量。
大概最简单的中心性度量是一个节点拥有的连接总数。这被称为“度中心性”,因为一个节点拥有的链接数量被称为该节点的“度”。例如,凯文·贝肯在 34 部电影中有 298 个合作者,这意味着他在这个网络中的“度”是 298。一个人拥有的联系越多,中心性程度就越高。具有高度中心性的人是网络中的“中枢”。度中心性是直观的和信息丰富的,但是不考虑次级连接,并且可能错过网络中卫星群的重要性。
特征向量中心性是一种度量,其将网络中节点的位置描述为其直接连接的函数,该直接连接又被计算为其直接连接的函数,等等。特征向量中心性不仅识别“枢纽”,还识别与枢纽有联系的人。因此,这种测量考虑到了具有相对较少但重要数量的连接的节点。 PageRank (源自拉里·佩奇),谷歌用于网站排名的算法,是特征向量中心性的一种变体——假设“重要”网站将被其他“重要”网站引用。特征向量中心性不仅考虑了直接连接,还可能遗漏卫星群。
中间中心性通过寻找每组两个节点之间的最短路径来计算。对于任意两个节点,它们之间都存在一条最短路径。通过一个节点的最短路径越多,它的介数中心性就越高。在许多节点或节点群之间充当“桥”或“代理”的节点具有较高的“介数中心性”。例如,在电力网络中,节点是变电站,链路是电流,位于许多其他变电站之间最短路径上的变电站将有大量电流流过,因此具有较高的介数中心性。介数中心性可用于评估哪个节点对于从网络中提取信息最重要,并且清楚地突出了充当到其他集群的桥梁的节点,但是在识别密集聚集的中央集群中的重要节点时不太有用。
紧密中心性定义为一个节点到所有其他节点的距离之和,可用于评估哪个节点对传播信息最重要。换句话说,具有高接近中心性的节点比其他节点更“嵌入”在网络中。
下图显示了网络中已连接节点的子集。节点的大小对应于它们对于四个不同度量的中心性,颜色对应于它们不同的“社区”(下面将详细解释)。
Different centrality measures: degree (top left) eigenvector (top right) betweenness (bottom left) and closeness (bottom right)
如上所述,每种方法都有优点、缺点和用途。度中心性(左上)有利于具有许多连接的节点,因此在主集群以及红色卫星集群中有一些大节点。特征向量中心性(右上)集中在红色卫星星团而不是中央星团。中间中心性(左下角)突出显示了充当集群之间桥梁的节点,请注意连接中央集群和卫星集群的所有节点都相对较大。在紧密度中心图(右下角)中,请注意大多数节点与其他中心性度量相比是如何变大的。这意味着网络本身,或者至少是中央集群,是非常密集的,即所有节点都是“接近的”。
让我们将这些中心性度量应用于 50,000 人的整个网络。具有最高程度中心性的十个人是:
- 劳勃·狄·尼诺(演员)
- 尼古拉斯·凯奇(演员)
- 杰瑞·高德史密斯(作曲家)
- 塞缪尔·L·杰克逊(演员)
- 詹姆斯·纽顿·霍华德(作曲家)
- 斯科特·鲁丁(制片人)
- 布鲁斯·威利斯(演员)
- 马克·艾沙姆(作曲家)
- 克尔·凯恩(演员)
- 詹姆斯·霍纳(作曲家)
这意味着这些人在职业生涯中与最多的人合作过。虽然他们可能不都是家喻户晓的名字,但这个名单并不令人惊讶。多年来,所有这些人都和许多人一起制作了许多电影。劳勃·狄·尼诺在 82 部电影中担任主角,与 613 位不同的合作者合作。杰瑞·高德史密斯于 2004 年去世,但他也是 82 部电影的主角。多产的尼克·凯奇已经和 602 人合作了 73 部电影,其中五部是去年拍摄的。
但是拍很多电影不一定让你成为最有影响力的人。去年,“电影”领域最多产的人是成人导演兼电影摄影师迈尔斯·朗,他主要参与了 41 部电影,总共有 265 名合作者。劳勃·狄·尼诺只和九个合作者拍了一部电影。我无意冒犯龙永图,但我很难证明他在 2018 年的电影业中比劳勃·狄·尼诺更重要。特征向量中心性不仅仅是将所有的联系相加,而且还说明了这些人之间的联系有多紧密。如果我们将这种中心性度量应用到我们的 IMDB 网络,我们会得到以下重要人员列表:
- 斯科特·鲁丁(制片人)
- 劳勃·狄·尼诺(演员)
- 詹姆斯·纽顿·霍华德(作曲家)
- 布莱恩·格雷泽(制片人)
- 塞缪尔·L·杰克逊(演员)
- 布鲁斯·威利斯(演员)
- 汉斯·季默(作曲家)
- 汤姆·汉克斯(演员)
- 卡特·布尔维尔(作曲家)
- 杰瑞·高德史密斯(作曲家)
虽然保留了许多名称,但列表中的变化突出了度中心性和特征向量中心性之间的一些重要差异。布莱恩·格雷泽、汉斯·季默、汤姆·汉克斯和卡特·布尔维尔被加入到名单中,而尼古拉斯·凯奇、马克·艾沙姆、克尔·凯恩和詹姆斯·霍纳则落榜了,这意味着新加入的人联系较少,但这些联系的“重要性”高于那些被移除的人。例如,汉斯·季默主要参与了“仅”48 部电影,总共有 360 名合作者,但这些联系比尼克·凯奇的 602 部电影更“有联系”。
度和特征向量中心性可以告诉我们很多关于网络的信息,但它们可能会错过一些重要的见解。如果我们计算网络的介数中心性,我们会得到一个几乎完全不同的前十名列表:
- 威廉·莎士比亚(作家)
- 拉赫曼(作曲家)
- 尼古拉斯·凯奇(演员)
- 伊尔凡·可汗(演员)
- 劳勃·狄·尼诺(演员)
- 格汗·蒂尔亚基(电影摄影师)
- 埃尼奥·莫里康(作曲家)
- 杰瑞·高德史密斯(作曲家)
- 塞缪尔·L·杰克逊(演员)
- 威利姆·达福(演员)
中间中心性是通过一个节点的“最短路径”数量的函数。通过一个节点的最短路径越多,它的介数中心性就越高。这就是为什么我们可以有一个非常不同的“最重要”的人的列表——这些人在网络中充当从中心集群到卫星集群的桥梁。为了说明这一点,我运行了一个社区检测算法来识别重要的个体集群。网络中的“社区”本质上只是一组节点,它们彼此之间的连接比与网络其余部分的连接更紧密。
下图根据介数显示了一些突出的节点。每个节点的大小对应于它们的介数,颜色对应于它们的社区。在这里我们看到了为什么拉赫曼和伊尔凡·可汗的排名如此之高——他们是从好莱坞到印度电影的桥梁。同样,哥汗·蒂尔亚基是好莱坞通向土耳其电影业的桥梁,成龙是中国电影业的桥梁,佩内洛普·克鲁兹是西班牙电影的桥梁,朱丽叶·比诺什和杰拉尔·德帕迪约将好莱坞与法国电影联系起来。也许最有趣的是,威廉·莎士比亚是中间中心性方面最有影响力的节点。这是因为他的作品贯穿了电影的整个生命周期,也因为世界上几乎所有的电影业都制作过莎士比亚的电影。为了探索这种联系,你可以看看这个互动网络视频。
那么,好莱坞“最重要”的人是谁?这取决于你所说的“重要”是什么意思。在六度游戏的背景下,劳勃·狄·尼诺可能是你最好的选择,除非你和一个非常熟悉美国以外电影产业的人一起玩,那么试试威廉·莎士比亚。如果你想知道,凯文·贝肯在度中心性方面排名第 100,在特征向量中心性方面排名第 87,在中间中心性方面排名第 167。
这里是所有这些分析作为一个 Jupyter 笔记本。
感谢杰斯·雷蒂格、戴夫·波尔和伊昂·何的帮助!
【1】IMDB 的数据只列出了每部电影大概七到十个“主犯”。这通常意味着作家,导演,制片人,作曲家,和一些演员被列出。因此,电影中不在这个名单上的任何人都不在这个分析中。例如,约翰尼·德普不在《巧克力》之列——朱丽叶·比诺什、凯莉·安妮·莫斯、艾尔弗雷德·莫利纳和朱迪·丹奇名列前茅。这也解释了为什么前十名名单中有四位作曲家——作曲家几乎总是被列为主要负责人之一。
【2】虽然我在 IMDB 的数据中过滤了“成人”类别,但龙的作品被归类为“电影”,因此也包括在内,尽管当我过滤掉评分不超过 4171 分的电影时,它们都被删除了。
谁是你的金鹅?:群组分析
原文:https://towardsdatascience.com/who-is-your-golden-goose-cohort-analysis-50c9de5dbd31?source=collection_archive---------10-----------------------
Python 中基于 RFM 值和 K 均值聚类的客户细分
客户细分是一种根据购买模式将客户分组的技术,以确定谁是最有利可图的群体。在细分客户时,也可以根据市场使用各种标准,如地理、人口特征或行为基础。这种方法假设具有不同特征的群体需要不同的营销方法,并希望找出最能提高其盈利能力的群体。
今天,我们将讨论如何使用来自 UCI ML repo 的在线零售数据集进行客户细分分析。这种分析将集中在获得 RFM 值和用 K-means 算法进行聚类这两个步骤上。数据集和完整代码也可以在我的 Github 上获得。这篇笔记的原始资料来自课程“Python 中的客户细分分析”
什么是 RFM?
RFM 是近期、频率和货币的缩写。最近是关于客户最后一次订购的时间。它表示自客户最后一次购买以来的天数。如果是网站或应用程序的情况,这可能被解释为最后访问日或最后登录时间。
频率是关于给定时间段内的购买次数。可能是 3 个月,6 个月或者 1 年。所以我们可以把这个值理解为客户使用公司产品的频率或数量。价值越大,客户参与度越高。我们可以说他们是我们的贵宾吗?没必要。因为我们还必须考虑他们每次购买实际支付了多少钱,这意味着货币价值。
货币是客户在给定期间花费的总金额。因此,挥金如土的人将与其他客户区分开来,如 MVP 或 VIP。
Photo from CleverTap
这三个值是队列分析中常用的可量化因素。由于其简单直观的概念,它们在其他客户细分方法中很受欢迎。
导入数据
所以我们今天将把 RFM 应用到我们的队列分析中。我们将要使用的数据集是从 2010 年 1 月到 2011 年 9 月的交易历史数据。由于这是队列分析的指导方针,我将只使用原始数据集的随机选择部分。
# Import data
online = pd.read_excel('Online Retail.xlsx')# drop the row missing customer ID
online = online[online.CustomerID.notnull()]
online = online.sample(frac = .3).reset_index(drop = True)online.head()
计算 RFM 值
我们要计算的第一件事是最近值,即自客户最后一个订单以来的天数。我们可以从哪一列获得该值? InvoiceData 。使用这个列,我们可以得到客户的第一次购买和最后一次购买的时间。我们姑且称第一个为cohorday。由于 InvoiceDate 还包含额外的时间数据,我们需要提取年、月和日部分。之后,我们将得到工作日,它是工作日的最小值。
# *extract year, month and day*
online['InvoiceDay'] = online.InvoiceDate.apply(**lambda** x: dt.datetime(x.year, x.month, x.day))online.head()
由于我们随机选择了数据的子集,我们还需要知道数据的时间段。如下图所示,我们数据集的最后一天是 2011 年 12 月 9 日。因此,将 12 月 10 日设置为我们的 pining 日期,并从每个客户最近一次购买的天数开始倒数。这就是最近值。
# print the time period
print('Min : {}, Max : {}'.format(min(online.InvoiceDay), max(online.InvoiceDay)))
# pin the last date
pin_date = max(online.InvoiceDay) + dt.timedelta(1)
在得到最近值之前,让我们先多算一个值,每个顾客花的钱的总数。这是为了计算货币价值。我们怎样才能得到它?轻松点。将每行中的产品价格和订单数量相乘。
# Create total spend dataframe
online['TotalSum'] = online.Quantity * online.UnitPrice
online.head()
现在我们准备一下子得到三个 RFM 值。我将对每个客户的数据进行分组,并针对每个最近、频率和货币价值进行汇总。
# calculate RFM values
rfm = online.groupby('CustomerID').agg({
'InvoiceDate' : lambda x: (pin_date - x.max()).days,
'InvoiceNo' : 'count',
'TotalSum' : 'sum'})# rename the columns
rfm.rename(columns = {'InvoiceDate' : 'Recency',
'InvoiceNo' : 'Frequency',
'TotalSum' : 'Monetary'}, inplace = True)rfm.head()
RFM 四分位数
现在,我们将根据 RFM 价值观对客户进行分组。因为这些是连续值,我们也可以使用分位数值,并将它们分成 4 组。
# create labels and assign them to tree percentile groups
r_labels = range(4, 0, -1)
r_groups = pd.qcut(rfm.Recency, q = 4, labels = r_labels)f_labels = range(1, 5)
f_groups = pd.qcut(rfm.Frequency, q = 4, labels = f_labels)m_labels = range(1, 5)
m_groups = pd.qcut(rfm.Monetary, q = 4, labels = m_labels)
请格外小心r_labels
。我把标签按降序排列。这是为什么呢?因为最近意味着从客户最后一次订购到现在已经过去了多长时间。因此,价值越小,顾客对该品牌的参与度越高。现在让我们创建一个新的列来表示组标签。
# make a new column for group labels
rfm['R'] = r_groups.values
rfm['F'] = f_groups.values
rfm['M'] = m_groups.values# sum up the three columns
rfm['RFM_Segment'] = rfm.apply(lambda x: str(x['R']) + str(x['F']) + str(x['M']), axis = 1)
rfm['RFM_Score'] = rfm[['R', 'F', 'M']].sum(axis = 1)
rfm.head()
我在一个单元格中贴上了所有三个标签作为RFM_Segment
。这样,我们可以很容易地检查一个客户属于哪个级别或细分市场。RFM_Score
是三个值的总和。不一定是总和,所以平均值也是可能的。此外,我们可以捕捉进一步的模式与平均值或计数值的新近,频率和货币分组的分数如下。
# calculate averae values for each RFM
rfm_agg = rfm.groupby('RFM_Score').agg({
'Recency' : 'mean',
'Frequency' : 'mean',
'Monetary' : ['mean', 'count']
})rfm_agg.round(1).head()
RFM_Score
将是客户参与度或忠诚度的总分。将这三个价值加在一起,我们最终可以将客户分为“金牌”、“银牌”、“铜牌”和“绿色”。
# assign labels from total score
score_labels = ['Green', 'Bronze', 'Silver', 'Gold']
score_groups = pd.qcut(rfm.RFM_Score, q = 4, labels = score_labels)
rfm['RFM_Level'] = score_groups.valuesrfm.head()
太好了!我们完成了一个 RFM 值的队列分析。我们确定了谁是我们的金鹅,以及我们应该额外注意的地方。现在,我们为什么不尝试一种不同的客户细分方法,并比较两种结果呢?
k 均值聚类
K-Means 聚类 是一种无监督学习算法,它根据点与点之间的距离进行分组。怎么会?K-Means 聚类中有两个距离概念。类内平方和 (WSS)和类间平方和 (BSS)。
WSS 表示每个聚类的点和相应质心之间的距离之和,BSS 表示质心和总样本平均值之间的距离之和乘以每个聚类内的点数。因此,您可以将 WSS 视为紧致性的度量,将 BSS 视为分离性的度量。为了聚类成功,我们需要获得较低的 WSS 和较高的 BSS。
通过迭代和移动聚类质心,K-Means 算法试图得到质心的优化点,使 WSS 值最小,盲源分离值最大。基本概念我就不去更深入了,不过你可以从视频中找到进一步的解释。
Photo from Wikipedia
因为 K-means 聚类使用距离作为相似性因子,所以我们需要缩放数据。假设我们有两种不同尺度的特征,比如身高和体重。平均身高 150cm 以上,体重 100kg 以下。因此,如果我们绘制这些数据,点与点之间的距离将在很大程度上由高度决定,从而导致有偏差的分析。
因此,当涉及 K-means 聚类时,缩放和归一化数据是预处理的关键步骤。如果我们检查 RFM 值的分布,你会注意到它们是右偏的。不规范使用不是一个好的状态。让我们先将 RFM 值转换成对数标度,然后再进行归一化。
# define function for the values below 0
def neg_to_zero(x):
if x <= 0:
return 1
else:
return x# apply the function to Recency and MonetaryValue column
rfm['Recency'] = [neg_to_zero(x) for x in rfm.Recency]
rfm['Monetary'] = [neg_to_zero(x) for x in rfm.Monetary]# unskew the data
rfm_log = rfm[['Recency', 'Frequency', 'Monetary']].apply(np.log, axis = 1).round(3)
小于或等于零的值在对数标度时变为负无穷大,我创建了一个函数将这些值转换为 1,并将其应用于Recency
和Monetary
列,使用如上所述的列表理解。然后,对每个 RFM 值应用对数变换。下一个预处理步骤是缩放,但它比上一步简单。使用 StandardScaler() ,我们可以得到如下标准化值。
# scale the data
scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(rfm_log)# transform into a dataframe
rfm_scaled = pd.DataFrame(rfm_scaled, index = rfm.index, columns = rfm_log.columns)
左边的图是预处理前的 RFM 分布,右边的图是归一化后的 RFM 分布。通过使它们处于某种程度上的正态分布,我们可以向我们的模型提供一些提示,以便轻松而准确地掌握值之间的趋势。现在,我们完成了预处理。
接下来是什么?下一步是选择正确的集群数量。我们必须选择要组成多少个小组。如果有先验知识,我们可以把数字直接给算法。但是在无监督学习的大多数情况下,没有。所以我们需要选择优化的数字,肘法是我们可以得到提示的解决方案之一。
# the Elbow method
wcss = {}
for k in range(1, 11):
kmeans = KMeans(n_clusters= k, init= 'k-means++', max_iter= 300)
kmeans.fit(rfm_scaled)
wcss[k] = kmeans.inertia_# plot the WCSS values
sns.pointplot(x = list(wcss.keys()), y = list(wcss.values()))
plt.xlabel('K Numbers')
plt.ylabel('WCSS')
plt.show()
使用 for 循环,我为从 1 到 10 的每个集群构建了模型。然后收集每个模型的 WSS 值。看下面的剧情。随着聚类数量的增加,WSS 值降低。这并不奇怪,因为我们做的聚类越多,每个聚类的大小就会减小,所以每个聚类内的距离之和就会减小。那么最佳数字是多少呢?
答案在这条线的“肘”处。在某处,WSS 急剧下降,但 k 值不会太大,我在这里的选择是 3。你说什么?它看起来真的不像线的一个肘吗?
现在,我们选择了集群的数量,我们可以建立一个模型,使实际的集群如下。我们还可以检查每个点和聚类的质心或标签之间的距离。让我们创建一个新列,并将标签分配给每个客户。
# clustering
clus = KMeans(n_clusters= 3, init= 'k-means++', max_iter= 300)
clus.fit(rfm_scaled)# Assign the clusters to datamart
rfm['K_Cluster'] = clus.labels_
rfm.head()
现在我们做了两种分割,RFM 分位数组和 K-均值组。我们来做个可视化,对比一下两种方法。
蛇图和热图
我要做两种图,线图和热图。我们可以很容易地比较这两个图的 RFM 值的差异。首先,我将创建列来分配两个聚类标签。然后通过将 RFM 值融合到一列来重塑数据框。
# assign cluster column
rfm_scaled['K_Cluster'] = clus.labels_
rfm_scaled['RFM_Level'] = rfm.RFM_Level
rfm_scaled.reset_index(inplace = True)# melt the dataframe
rfm_melted = pd.melt(frame= rfm_scaled, id_vars= ['CustomerID', 'RFM_Level', 'K_Cluster'], var_name = 'Metrics', value_name = 'Value')
rfm_melted.head()
这将使新近性、频率和货币类别成为观察值,这允许我们在一个图中绘制值。将Metrics
放在 x 轴上,将Value
放在 y 轴上,并通过RFM_Level.
对值进行分组。这次重复通过K_Cluster
对值进行分组的相同代码。结果如下所示。
# a snake plot with RFM
sns.lineplot(x = 'Metrics', y = 'Value', hue = 'RFM_Level', data = rfm_melted)
plt.title('Snake Plot of RFM')
plt.legend(loc = 'upper right')# a snake plot with K-Means
sns.lineplot(x = 'Metrics', y = 'Value', hue = 'K_Cluster', data = rfm_melted)
plt.title('Snake Plot of RFM')
plt.legend(loc = 'upper right')
这种情节在市场分析中被称为“蛇情节”。似乎左边图中的金色和绿色组与右边图中的 1 和 2 组相似。而铜牌和银牌组好像合并成了 0 组。
让我们用热图再试一次。热图是数据的图形表示,其中较大的值用较暗的刻度表示,较小的值用较亮的刻度表示。我们可以通过颜色非常直观地比较各组之间的差异。
# the mean value in total
total_avg = rfm.iloc[:, 0:3].mean()
total_avg# calculate the proportional gap with total mean
cluster_avg = rfm.groupby('RFM_Level').mean().iloc[:, 0:3]
prop_rfm = cluster_avg/total_avg - 1# heatmap with RFM
sns.heatmap(prop_rfm, cmap= 'Oranges', fmt= '.2f', annot = True)
plt.title('Heatmap of RFM quantile')
plt.plot()
然后像之前一样对 K-clusters 重复相同的代码。
# calculate the proportional gap with total mean
cluster_avg_K = rfm.groupby('K_Cluster').mean().iloc[:, 0:3]
prop_rfm_K = cluster_avg_K/total_avg - 1# heatmap with K-means
sns.heatmap(prop_rfm_K, cmap= 'Blues', fmt= '.2f', annot = True)
plt.title('Heatmap of K-Means')
plt.plot()
这可能是不匹配的,尤其是在地块的顶部。但只是因为顺序不同而已。左边的绿色组将对应 2 组。如果你看到每个方框内的数值,你会发现黄金组和 1 组之间的差异变得非常显著。通过颜色的深浅很容易辨认出来。
结论
我们讨论了如何从客户购买数据中获取 RFM 值,并用 RFM 分位数和 K-Means 聚类方法进行了两种细分。有了这个结果,我们现在可以知道谁是我们的“黄金”客户,最赚钱的群体。这也告诉我们应该关注哪个客户,向谁提供特别优惠或促销,以培养客户忠诚度。我们可以为每个细分市场选择最佳的沟通渠道,并改进新的营销策略。
资源
-
一篇关于 https://clevertap.com/blog/rfm-analysis/的精彩文章
-
另一个对 RFM 分析有用的解释:https://www.optimove.com/learning-center/rfm-segmentation
-
对 K-means 聚类的直观解释:https://www.youtube.com/watch?v=_aWzGGNrcic
感谢您的阅读,希望您对这篇文章感兴趣。如果有需要改正的地方,请分享你的见解!如果您想鼓励一位有抱负的数据科学家,请点击👏 👏 👏!我总是乐于交谈,所以请随时留下评论或在 LinkedIn 上联系我。我会带着另一个令人兴奋的项目回来。在那之前,机器学习快乐!
谁说的:布什还是奥巴马?
原文:https://towardsdatascience.com/who-said-it-bush-or-obama-9f2e98408b65?source=collection_archive---------20-----------------------
Photo by Patrick Tomasso on Unsplash
想象一下,你是一位炙手可热的大学教授,刚刚收集了这学期的期末论文。当你在电脑上浏览全部 300 篇文章时,你意识到有几个学生忘记在文章上写上他们的名字。嗯……那不理想。你有没有试图追踪神秘学生?你会让所有犯了忘记名字这一令人遗憾的错误的学生不及格吗?
事实证明,数据科学可以提供帮助!
作者归属
原来,姓名缺失问题只是一个更广泛的领域中的一个例子,这个领域被称为作者归属,根据某一特定作品的作者和其他作者过去的例子来预测该作品的作者的过程。
在高层次上,作者归属由以下直观步骤组成:
- 通读不同作者的作品,识别每个作者使用的 【最重要】 单词、短语或其他演讲单位
- 对于一个有神秘作者的给定文档,比较最常见的单词、短语等。在具有每个作者的相应列表的文档中
- 神秘文件列表与任何给定的作者列表越匹配,我们就越有信心这个作者写了神秘文件
在这篇文章的剩余部分,我们将讨论总统演讲。具体来说,我们将分析乔治·w·布什总统的一篇演讲和巴拉克·奥巴马总统的一篇演讲,找出每位总统最重要的短语。
然后我们会读到一篇神秘的演讲,并试图找出它最有可能属于哪一位总统。
Photo by History in HD on Unsplash
它是如何工作的?
假设我们有布什总统和奥巴马总统的(非常简单的)演讲,看起来像这样:
布什演讲:“我们必须共同努力才能胜利,共同努力才能成功。”
奥巴马演讲:“要持之以恒,我们必须努力。要持之以恒,就要坚强。”
我们的目标是为每篇演讲找出“最重要的短语”。嗯……什么是短语?在演讲的上下文中,一个短语重要是什么意思?嗯,为了简单起见,我们将认为一个短语是演讲中任何连续的 3 个单词。所以对于上面的小“演讲”,短语应该是(现在忽略大写和标点):
Phrases in each toy speech
这里有几点需要注意。首先,请注意奥巴马说了两次“为了坚持,我们”,而布什从来没有说过。这表明“为了坚持,我们”是奥巴马的一个重要识别短语。同样,布什说了【共同努力】两次,而奥巴马从来没有说过,这表明了布什的身份。
还要注意,两位总统都说“我们必须努力”,这表明可能不是一个用于识别目的的有用短语。
所以我们对一个短语的重要性有了一个模糊的概念。它应该满足两个标准:
对一位总统来说很重要但对另一位总统来说不重要的短语需要…
- 在总统演讲中经常出现
- 出现 的只有 那位总统的演讲
这有直观的意义;如果我们知道某个短语只有奥巴马说而奥巴马经常说,然后我们在一个神秘的演讲中看到同样的短语,我们可以相当肯定这个演讲是奥巴马说的。****
快速数学解释器(如果你感兴趣的话)
我们如何用数学方法量化它?
我们将使用名为 TF-IDF 的久经考验的方法来确定作者身份。TF-IDF 代表词频——逆文档频率(比听起来可怕多了)。以下是部分内容:
给定一个短语和一个作者,这个短语在所有可能的短语中出现的频率是多少?例如,在上面简单的布什演讲中,总共有 8 个短语和其中两个是“共同努力”,因此“共同努力”短语的 TF 是 2/8 = 0.25
逆文档频率(IDF): 给定某个短语, IDF 定义如下:
给定上面玩具演讲中的短语“我们必须工作”,我们看到两位总统都使用它,因此 IDF 将是 log(2/2) = 0。现在,给定短语“work together to”,布什只使用了,我们看到 IDF 将是 log(2/1) = 0.3(以 10 为基数的对数)。**
要获得特定短语和作者的 TF-IDF,您只需将 TF 和 IDF 值乘上。****
好吧…但是 为什么 有用呢?
假设我们为两位总统的短语“共同努力”计算 TF-IDF:****
对于布什: TF = 0.25 & IDF = 0.3 所以 TF-IDF = 0.250.3 = 0.075*
奥巴马: TF = 0 & IDF = 0.3 所以 TF-IDF = 00.3 = 0*
因此,我们得到了布什更高的 TF-IDF,这正是我们想要的,因为这个短语自然是布什更好的标识符。
作为另一个合理性检查,让我们计算两位总统都使用的短语“我们必须工作”的 TF-IDF。****
对于布什: TF = 0.125,IDF = 0,所以 TF-IDF = 0
对于奥巴马: TF = 0.1,IDF = 0,所以 TF-IDF = 0
正如我们所希望的,这个短语对两位总统都没有真正的识别价值,因为它被两位总统使用。
从本质上说,这是可行的,因为 TF-IDF 奖励那些只有一位总统经常使用的短语而惩罚那些不常使用或两位总统都使用的短语。****
代码—识别最重要的短语
好了,理论谈够了!让我们深入研究代码。
我们首先读入并清理布什和奥巴马的一篇演讲稿,这两篇演讲稿存储为 txt 文件。
然后,我们将通读两篇演讲,并得到 TF 值的字典。也就是说,我们将构造字典,其中的关键字是短语,值是该短语在任一语音中的频率。
现在,我们将获得每个短语的 IDF 值,并为每个总统构建 TF-IDF 字典。
此时,我们可以根据最高的 TF-IDF 值打印出布什和奥巴马最重要的短语。
Top 3 Bush and Obama phrases by TF-IDF scores
密码——谁写的秘密演讲稿?
不错!因此,我们为每位总统列出了最重要的短语。让我们读入一份全新的秘密演讲稿,看看我们的系统能否找出是谁写的。剧透警报……是奥巴马。
现在,我们将循环播放秘密演讲中的每个独特短语。对于每个短语,我们将将其 TF 值(在秘密演讲中出现的频率)乘以该短语对于奥巴马的 TF-IDF 值(该短语对于奥巴马的标识符有多重要)。我们为 Bush 做了同样的事情,并为每个独特的短语保存了这些产品的运行总数。得分较高的总统将是我们预测的演讲者!****
请击鼓吧! …。
将分数换算成百分比后,老布什最终得分为 37% ,奥巴马最终得分为 63% ,使得奥巴马成为我们预测的演讲者和正确答案!****
只是为了好玩,如果我们使用布什的新秘密演讲,我们会得到布什 62%的分数,T2 38%的分数,所以我们的系统是双向的!
希望这能帮助你理解一些关于作者归属的问题。这里有几个自然的扩展,例如:
- 使用多个作者,而不是只有两个
- 考虑到大写、标点和写作的其他部分
- 添加更多的自然语言上下文,而不是简单的连续单词集
我真的很兴奋看到你能想到什么扩展!
祝好运,感谢阅读!~
数据科学的 5 个先决条件。
原文:https://towardsdatascience.com/who-should-not-become-a-data-scientist-32ce27c614f5?source=collection_archive---------13-----------------------
成为数据科学家值得评价的 5 点。
数据科学——市场上的热门词汇!!不是吗?
当时最性感的工作,需求同比增长 29%,自 2013 年以来增长 344%,很容易获得不错的加薪…等等。等等。等等。😃
利润丰厚,足以进入一个人的头脑,推动他们将职业生涯转向成为一名数据科学家。
在本文中,我将解释成为数据科学家的 5 个先决条件,在决定将数据科学作为职业选择之前,必须了解这些先决条件。
我是一名数据科学家,从事行业工作已近十年。与有抱负的数据科学家打交道在我的 数据科学培训/面试 经历中,我注意到只有 10-15%的有抱负者最终得到了数据科学家的工作。
为什么即使经过培训,投入大量时间和金钱,还是会发生这种情况?
理解为什么有些人擅长数据科学,而有些人不擅长,即使经过培训和指导也是如此,这一点非常重要。
以下是在投身数据科学领域之前应该自问的一些关键问题,这些问题将有助于他们做出正确的决定。我没有把技术内容放在下面,只是一些高层次的事实。
对数据的理解:
既然数据科学都是关于数据的,那么首先要检查的应该是“对数据的 热爱”。要理解为什么数据在数据科学中如此重要,请在 YouTube 上观看这个视频— 数据科学是 15 分钟
下面的问题将有助于理解 对数据的热爱:
- 你理解数据语言或者至少什么是数据/信息吗?
- 你在目前的工作中处理数据吗?
- 你理解表格(行/列)和一些非结构化数据吗?
- 最重要的是,你喜欢看数据和处理数据吗?
如果以上问题的大多数答案为“是”,那么这是从“ 数据 ”的角度出发的。
理解算法/逻辑:
算法是给计算机做特定任务的一组指令。
即使你在纸笔上解决了一个难题,它也与计算机中的算法非常相似。
由于所有的机器学习系统都建立在算法的基础上,所以对算法的含义以及如何使用逻辑在高层次上设计算法有一个基本的理解是非常重要的先决条件。
举个例子,如果我把 10 个随机数放在这里,例如 12,54,32,76,54,31,98,67,76,87,任务是找到第三大数“T0”“”,那么人们应该能够想到应该用什么逻辑来得到第三大数“T2”。
如果一个人能写出循序渐进的逻辑,他/她也能理解机器学习算法。要了解什么是高水平的机器学习,请观看视频— 机器学习的 4 个组成部分
对编程的理解:
没有人需要成为超级程序员来开始他们的数据科学之旅。
然而,人们应该了解计算机代码是如何编写的。一些基本的东西,可能是:
- 什么是变量和常数?数据类型是什么意思?
- 循环/条件语句是什么意思?
- 输入/输出/功能等的含义是什么??
- 什么是客户端/服务器/数据库/API/托管/部署等?
如果对以上问题感到满意,那么“ 编码 ”部分就可以了!
对统计的理解:
统计学是数据科学的主要研究领域之一。这个领域没有教学大纲,这是数据科学的必备知识,但是以下主题不会让有抱负的数据科学家感到不舒服:
- 均值、中值、众数、搁浅偏差/方差、百分位数等。
- 分布/概率/贝叶斯定理等。
- 统计检验,如假设检验、方差分析、卡方检验、p 值检验等。
对业务领域的理解:
这一点并不像上面提到的那样是有抱负的数据科学家的障碍,然而,一个人对特定业务领域或领域的理解越多,他/她对来自该领域的数据进行分析就越容易。
出于上述几点,如果有人在一两个方面落后,先刷那些概念再开始数据科学之旅总是比较好的。我向你保证;旅途会更顺利。
数据科学被称为 21 世纪“最性感的工作”。如果你想知道这样称呼的原因,请观看这个关于数据科学的未来的视频
如果你认为,你已经准备好成为一名数据科学家,这里是你旅程的起点——如何成为一名数据科学家?
加入我们的数据科学社区脸书、推特、 Instagram 、 LinkedIn
链接到 YouTube 频道“展开数据科学”
干杯
阿曼(amanrai77@gmail.com)
谁将赢得 2019/20 赛季的 EPL 金靴奖。
原文:https://towardsdatascience.com/who-will-win-the-epl-golden-boot-in-the-2019-20-season-5e8a3a45deaa?source=collection_archive---------16-----------------------
Photo credit: https://www.stickpng.com/img/sports/soccer-football/premier-league-logo
机器学习如何在 2019/2020 英超赛季之前预测最高射手。
两周后,体育场将会座无虚席。粉丝们会欢呼的。权威人士会评论。全世界的支持者都会关注。最有趣的体育联赛,英格兰超级联赛,将会回来。
英格兰超级联赛,也被称为 EPL,是欧洲竞争激烈的足球联赛,每支球队都参加,直到赛季的最后一天。为了逃离降级区,各队都在激烈竞争前四名。
赛季开始的时候,人们会问很多关于赛季将如何进行的问题。每年提出的最大问题之一是谁将是最高射手。
因此,已经使用机器学习来创建一个模型,可以提前预测 2019/20 赛季的最高进球得分者。
英超联赛数据收集
该项目的最重要方面是数据收集,而任何数据集的最重要方面是拥有所需的重要功能。
数据收集自过去两个赛季的英超联赛。第一个数据集代表了 2017-18 年的 EPL 季。是通过这个链接获得的,并被插入到一个 excel 文件中,该文件通过添加几个列被进一步编辑。这个数据集被命名为英超 2018/19 进球预测器。
包含 2018-2019 年 EPL 赛季的信息输入到一个 excel 表格中,该表格是使用 Kaggle 获得的这里是。这个数据集被命名为英超 2019/2020 进球预测器。
两个数据集都被手动修改为包含一个名为“团队价值”的行球队价值是通过分解英超 20 支球队并分组来衡量的。
前四支队伍的得分为 5 分。接下来的四个被指定为 4。接下来的四个得到的值是 3。降级区前的五支球队被分到 2。
降级的三支球队没有获得任何球队价值,因为他们的球员下赛季不在英超联赛。因此,它们没有包括在数据集中。
英超联赛 2018/19 赛季的进球预测进一步修改,在另一个名为“2018/19 赛季进球”的栏目下,纳入了每个球员在 2018/19 赛季的进球。
将球队价值列添加到两个数据集中的原因是因为英超联赛的球队最终会产生最多的射手。2018/19 赛季的进球被添加到英超 2018/19 赛季的进球预测中,因为该模型需要拟合因变量。
此外,使用该模型通过英超 2019/2020 进球预测器预测球员在 2019/20 赛季的进球。
英超 2018/19 赛季进球预测器最终特征为:球员姓名、球队名称、上赛季进球、上赛季助攻、上赛季上场时间、球队价值以及 2018/19 赛季进球。
英超 2019/2020 进球预测器最终特征为:球员姓名、上赛季出场分钟数、上赛季进球数、上赛季助攻数和球队价值。
探索数据集
进一步探索了英超 2018/19 进球预测器,以获得关于如何正确创建有效模型的更多见解。
首先,绘制不同的条形图来显示团队价值如何随不同的可测量属性而变化。
Goal Scored in 2017/18 vs Team Value
从图表中可以看出,团队价值最高的球员进球最多,其次是得分第二高的球员。第三和第四似乎大致相等地分享了第三点。
Goal Scored in 2018/19 vs Team Value
Assist made in 2017/18 vs Team Value
2017-18 赛季进球与球队价值的条形图中的相同趋势也在 2018/19 赛季进球与球队价值的条形图中得到注意。
然而,2017/18 赛季的助攻条形图与团队价值几乎相同,只是团队价值最低的球员排名第三,团队价值第二的球员排名第四。
Minutes played in 2017/18 vs Team Value
人们注意到,在 2017/18 赛季上场时间与球队价值的图表中,球队价值最小的球员上场时间最多。而团队价值最高的球员位居第二。然后,这个类别的第二和第三团队价值球员的上场时间几乎相等。他们俩都得了第三名。
在前三个条形图中观察到共享第三位置的趋势的原因可能是因为有五个团队,团队值为 2。其他团队值每个都有四个团队。
这也是最没有团队价值的球员比其他任何有团队价值的球员打更多时间的原因。
首先,创建了 2018/19 目标预测数据集的相关系数表。
Correlation coefficient of all the columns in the 2018/19 goal predictor dataset.
该表告诉我们,2018/19 赛季的进球与上赛季的进球之间存在强烈的正相关关系,2018/19 赛季的进球与上赛季的助攻之间存在中度的正相关关系。
2018/19 赛季的进球数和上赛季的上场时间以及 2018/19 赛季的进球数和球队价值之间存在微弱的正相关关系。
创建了一个散点图,以突出 2018/19 赛季进球和上赛季进球之间的关系。
Goal Scored in 2018–19 vs Goal Scored in 2017–18
可以观察到,在图中有很强的正线性拟合。这表明,这两个变量之间有一个坚实的相关性。相关系数值可以在上表中看到,为 0.787。
预测最佳射手
根据机器学习,英超 2018/19 进球预测数据集可以拆分为两组:训练数据集和测试数据集。目标是使用训练数据集构建模型,并使用测试数据集测量其准确性。
训练数据集被随机分配整个数据集的 70%,而测试数据集被随机分配整个数据集的 30%。
然后,使用原始数据集构建的模型可以应用于另一个数据集,该数据集独立于称为验证数据集的训练数据集。
我们的验证数据集是英超 2019/2020 进球预测器,用于预测英超 2019/2020 赛季的最高进球得分。
通过将 2018/19 赛季进球特征、因变量和其他选定特征(上赛季进球、上赛季助攻和球队价值)作为自变量,创建了多元线性回归模型,以拟合基于其他特征的训练数据集。
然后,通过预测测试数据集在 2018/19 年得分的目标来测试该模型的准确性。计算出的 r 平方为 73.27 %。这表明,鉴于足球是一项非常不可预测的游戏,该模型的准确性相当强。
皮尔逊相关系数为 0.898。这表明 2018-19 年的预测目标和 2018-19 年的实际目标之间存在很强的相关性。均方根误差为 2.02,这意味着数据点离最佳拟合线并不远。
r 平方、相关系数和 rmse 的值显示了预测值在应用于验证数据集时的可靠程度。
使用从验证数据集中选择的相似特征作为独立变量,计算 2019/20 赛季的预测目标。
2018/19 赛季预测的前 20 名最佳射手
下面的表格向我们展示了根据上一赛季的变量,2018/19 赛季前 20 名进球最多的球员应该是什么样子。
The predicted top 20 highest goal scorer for the 2018/19 season.
根据模型,萨拉赫、凯恩和阿圭罗仍将分别保持第一、第二和第三。一些球员应该比其他人提前结束比赛,例如,根据预测模型,斯特林应该比瓦迪进更多的球。
2019/20 赛季预测的前 20 名最佳射手
这里是另一个表格,向我们展示了 2019/20 赛季前 20 名最高进球得分者使用英超 2018/19 进球预测器的预测模型应该是什么样子。
The predicted top 20 highest goal scorers of the 2019/20 season
嗯,预测认为萨拉赫毫无意外地名列第一。毕竟,他在过去两个赛季的联赛中进球最多。它认为奥巴姆扬排在第二位。然后,塞尔吉奥·阿奎罗是第三名。
没有人确切知道这个赛季将如何结束,因为这只是一个预测。球员在赛季中可能会被转移、受伤或坐冷板凳。因此,我们所要做的就是坐下来,放松,享受足球这项美丽的运动。
用来构建这个模型的完整版本代码可以在这里看到。
谁会赢得权力的游戏?
原文:https://towardsdatascience.com/who-will-win-the-game-of-thrones-fbde8434c94b?source=collection_archive---------22-----------------------
《权力的游戏》的最后一季终于来了,每个人心中的问题是:
最后谁会坐上铁王座?
我们在 Visme 的团队,一个数据可视化工具,有一点有趣的是可视化每个主要角色最终出现在铁王座上的概率,使用赌博网站 Bovada 上发布的最新赔率计算。
赔率显示布兰·史塔克最有可能登上王位,紧随其后的是琼恩·雪诺、丹妮莉丝和珊莎。
就连乔恩和丹妮莉丝假想的孩子也出现在了结果中,与艾莉亚·史塔克、山姆威尔·塔利和培提尔的“小指头”贝里席(有人认为他在上一季用一个无面人伪造了自己的死亡)一样,排在第九位。
每个人心中的另一个燃眉之急是:第八季谁会先死?
使用同样的计算将赔率转换成隐含概率,我们发现博彩公司认为攸伦·葛雷乔伊最有可能首先灭亡,其次是亚拉、席恩·葛雷乔伊和瑟曦·兰尼斯特。
作为书呆子,我们也开始思考:根据现代人格科学,谁最适合领导维斯特洛?
基于广泛使用的 Myers-Briggs 性格类型指标,以及来自 MBTI 数据库的信息,这是一个由用户驱动的社区,拥有数千个真实和虚构人物的性格特征,我们将每个主要人物标在四个象限中的一个上,以可视化他们的领导潜力:
用一个水平标尺来区分内向者和外向者,用一个垂直标尺来区分"感觉型和"直觉型"类型,我们绘制了 16 种不同的人格类型。
基于创造性领导中心对 26,477 名领导者进行的研究结果,我们还可视化了拥有每种性格类型的领导者的百分比。
通过破译彩色编码矩阵图,你可以清楚地看到,最高百分比的领导人要么是 INTJ,ENTJ,ISTJ 或 ESTJ(图的四个角落)。这意味着,尽管内向型和外向型领导者以及直觉型和感性型领导者的比例相对相等,但大多数被研究的领导者更喜欢将逻辑而非情感作为决策的方式,以及有计划的生活方式而非自发的生活方式。
这对维斯特洛的未来意味着什么?显然,最好的领导者并不总是好人。在这种情况下,最有领导潜力的人也是最不被看好登上铁王座的人。
在四个角落,你会发现:夜王,培提尔“小指头”贝里席,山,瑟曦·兰尼斯特,贾昆·哈加尔,塔斯的布蕾妮和亚拉·葛雷乔伊。
方法学
对于那些对我们如何创建这些图表感兴趣的人来说,下面是对这个过程的详细解释:
我们使用顶级博彩网站 Bovada 发布的最新赔率,该网站使用美国的赔率陈述方法,并使用赔率转换器将其转换为隐含概率,以评估结果的可能性。
对于第三个图表,我们在这个 MBTI 数据库中搜索了《权力的游戏》中每个角色的性格类型,这些性格类型是根据数百名成员的投票决定的。(你可以在下面看到完整的列表。)
接下来,我们将 16 种 Myers-Briggs 人格类型中的每一种绘制在一张 4x4 矩阵图上,并根据MBTI 认证从业者 Susan Storm 的分类为每一种命名。
最后,我们使用 Visme 通过给一系列颜色分配百分比值,创建了一个颜色编码标度。这些值对应于每种性格类型的领导者的百分比,由创造性领导中心的研究“领导的性格类型”确定。
每个字符的迈尔斯-布里格斯型指示器
- 布兰·史塔克——INFP
- 琼恩·雪诺——INFJ ISFP
- 丹妮莉丝·坦格利安— INFJ
- 珊莎·史塔克— ESFJ
- 詹德利— ISTP
- 夜王——INTJ
- 提利昂·兰尼斯特— ENTP
- 艾莉亚·史塔克— ISTP
- 培提尔·贝里席— INTJ
- 山姆威尔·塔利— INFP
- 瑟曦·兰尼斯特— ESTJ
- 詹姆·兰尼斯特— ESTP
- 瓦里斯— INFJ
- 戴佛斯·席渥斯— ISFP
- 波隆— ISTP
- ISTJ 塔斯的布蕾妮
- 攸伦·葛雷乔伊— ESTP
- 吉利 Gilly
- 贾昆·赫加尔——INTJ
- 乔拉·莫尔蒙——ISFJ
- 贝里·唐德利恩— ENFP
- 达里奥·纳哈里斯— ESTP
- 梅丽珊卓— INFJ
- 猎犬——ISTP
- 这座山——ISTJ
- 席恩·葛雷乔伊— ESFP
- 托尔蒙德·巨人银行
- 亚拉·葛雷乔伊——ESTJ
轮到你了
你觉得最后谁会坐上铁王座?你同意我们的评估吗?在下面给我们你最好的有证据支持的预测。
本帖 原版 最早出现在 Visme 的 视觉学习中心 。
今天谁要辞职?
原文:https://towardsdatascience.com/whos-quitting-today-e1b0ca2fa90f?source=collection_archive---------8-----------------------
熊猫、海牛和机器学习眼中的飞行风险故事
HR Analytics for Flight Risk — Credits by information-age.com
介绍
“我在寻找更好的机会”
"我认为我付出的工作和时间还不够多。"
"这份工作对我来说吸引力不够。"
你以前有没有听同事说过这样的话,甚至自己也想过一个。如果你有,你并不孤单。
根据 Balance Articles 的文章,员工在一生的职业生涯中平均会跳槽 12 次。令人震惊!想象一下,跨国公司为了留住员工或…你而浪费的数十亿美元发生了什么?(这里放一个阴险的声音,杜杜·杜姆)
[## 人们多久换一次工作?
人们不再为一家公司工作一辈子,50 年后退休,拿着养老金和金表…
www.thebalancecareers.com](https://www.thebalancecareers.com/how-often-do-people-change-jobs-2060467)
因此,有效管理员工流失是非常重要的。新员工将花费大量的时间和金钱来培训和雇佣他们,否则这些时间和金钱将被重新分配到另一项投资中。事实上,这一直是 IBM 人力资源专业人士的一个大问题,IBM 正在向沃森投资数十亿美元,以预测飞行风险和赢得员工流失。这无疑意味着了解员工离职的原因是吸引和留住人才的良好开端。
[## IBM 人工智能可以以 95%的准确率预测哪些员工将要辞职
IBM 人工智能技术能够以 95%的准确率预测员工何时离开他们的…
www.cnbc.com](https://www.cnbc.com/2019/04/03/ibm-ai-can-predict-with-95-percent-accuracy-which-employees-will-quit.html)
总之,得出数据驱动的决策对于了解员工休假以降低离职率、节省雇佣/培训成本和最大化工作效率非常重要。所有这些都转化为未来几年的巨大利润。
通过这篇文章,让我们讨论如何找出员工离职的原因,以及如何预测谁将离开公司。然后,我们将建议公司如何留住他们。
但首先,让我们头脑风暴一下员工辞职的原因:
- 工作生活平衡
- 糟糕的经理/同事
- 社会压力(丑闻)
- 另一个更好的提议(薪水,生活条件)
- 家庭(产假/陪产假)
- 还有更多
这种头脑风暴的原因是为了确保当我们的分析陷入死胡同时,我们有更多的话题去发现。
我遇到过一些数据分析师/科学家,他们很难将注意力放回到他们当前工作的不同解决方案上。在心理学中,这被称为认知隧道。
知道如何解决这个问题将会大大节省您进行分析的时间。
[## 认知隧道:它是什么以及我打算如何防止它
你可能从未听说过认知隧道。然而,很有可能,你有时是它的受害者…
www.parhamdoustdar.com](https://www.parhamdoustdar.com/soft-skills/2016/04/24/cognitive-tunneling/)
为了解决认知隧道问题,一个好的做法是头脑风暴来分散思想。然后在一个好的头脑风暴会议之后,计划你的编码方式。在我看来,一个好的数据科学家或开发人员应该总是参与头脑风暴,以发现问题和头脑中的分析的新观点。因此,暂停你编码和思考的强烈欲望。
好吧,你做到了吗?很好。我们继续吧:)。
了解数据集
导入 Kaggle 数据集
数据集来自 Kaggle,由一个名为 ludobenistant 的用户提供,该用户因未知原因被关闭。幸运的是,你可以在我下面的 repo 中下载 csv 文件。
[## 文森特/PythonAnalytics
这是一个存放我的 Kaggle 和 iPython 笔记本- VincentTatan/PythonAnalytics 的仓库
github.com](https://github.com/VincentTatan/PythonAnalytics/blob/master/Youtube/dataset/HR_comma_sep.csv)
元数据包括以下特征:员工满意度、上次评估、项目数量、平均月小时数、在公司花费的时间、他们是否发生过工伤事故、他们在过去 5 年中是否有过晋升、部门、工资、员工是否已离职。
所有这些都很简单;不需要更多的解释,尤其是如果你已经熟悉了公司生活的黑暗面😈。
不好笑?无论如何,让我们从导入 csv 文件到 Pandas Dataframe 开始我们的旅程。
**import** **numpy** **as** **np** *# linear algebra* **import** **pandas** **as** **pd** *# data processing, CSV file I/O (e.g. pd.read_csv)*
df = pd.read_csv(‘dataset/HR_comma_sep.csv’)
查看数据
让我们用一个简单的代码来看看下面的数据中的快速和肮脏的健全性测试。
*df.tail()*
这似乎没问题。数据帧中总共有 14998 条记录。
首先,为了理解数据集的快速外观,让我们描述一下数据集。为了更好地查看,我们将对其进行转置,将特征排列成行。
df.describe().T
这将描述所有数字特征及其聚合值(计数、平均值等)。从这里我们可以看到一切看起来都很好:完整的计数值,没有空值,以及逻辑分布值。
一个有趣的数值是每月最大平均工作时间:310 小时。哇!这意味着有人每个工作日工作 15 个小时。这个人可能是投资银行家——哦,如果你是投资银行家,无意冒犯。如果你是其中之一,请在下面随意评论😁。
然后,我们可以通过包含参数的数据类型“object”来描述非数值。include=['object']
df.describe(include=['object'])
这里的销售是指员工所在的部门,工资标明“顶”、“中”、“低”。
似乎 Kaggle 已经用干净的准备好分析的数据宠坏了我们。然而,在现实中,您应该期望进行全面的数据清理,包括空值、异常值等。
数据探索
导入 Matplotlib 和 Seaborn 来讲述故事
对于那些不了解 Seaborn 的人来说,我很惭愧没有早点告诉你们。在我看来,这是每个数据分析师和科学家都需要熟悉的最大财富之一!(不开玩笑!).
Seaborn 将允许您在几秒钟内创建令人惊叹的图形和可视化。因此,作为有效的数据科学家/分析师,这是一个非常重要的工具来提高你的故事讲述技巧。
Seaborn 是一个基于 matplotlib 的 Python 数据可视化库。它提供了一个高层次的界面来绘制有吸引力的和信息丰富的统计图形。— Seaborn Pydata 组织
[## 示例库- seaborn 0.9.0 文档
编辑描述
seaborn.pydata.org](https://seaborn.pydata.org/examples/index.html)
*# Import seaborn and matplotlib with matplotlib inline*
**import** **seaborn** **as** **sns**
**import** **matplotlib.pyplot** **as** **plt**
%matplotlib inline
导入 seaborn 和 matplotlib 后,让我们得到离开或留下的人数。我们将在一个简单的 matplotlib 饼图中将其可视化
*# Getting the count of people that leave and not*
leftcounts=df['left'].value_counts()
**print**(leftcounts)
*# Using matplotlib pie chart and label the pie chart*
plt.pie(leftcounts,labels=['not leave','leave']);
Simple piechart for leave and not leave
这就是 Seaborn 可视化真正发挥作用的地方。让我们为每个离职和留任员工生成多个 Seaborn 分布,然后将其与 Matplotlib 图结合。这段代码会有点长,因为我们要插入 10 个支线剧情(5 行 2 列)。但是可视化对于发现那些离开和留下的人的趋势和差异是非常有价值的。这就是故事的来源!
# Create a figure instance, and the two subplots
fig = plt.figure(figsize=(20,17))
ax1 = fig.add_subplot(521)
ax2 = fig.add_subplot(522)
ax3 = fig.add_subplot(523)
ax4 = fig.add_subplot(524)
ax5 = fig.add_subplot(525)
ax6 = fig.add_subplot(526)
ax7 = fig.add_subplot(527)
ax8 = fig.add_subplot(528)
ax9 = fig.add_subplot(529)
ax10 = fig.add_subplot(5,2,10)# Tell pointplot to plot on ax1 with the ax argument (satisfaction level)
sns.distplot(leftdf[‘satisfaction_level’],ax = ax1);
sns.distplot(notleftdf[‘satisfaction_level’],ax = ax2);
sns.distplot(leftdf[‘last_evaluation’], kde=True,ax=ax3);
sns.distplot(notleftdf[‘last_evaluation’], kde=True,ax=ax4);
sns.distplot(leftdf[‘number_project’], kde=True,ax=ax5);
sns.distplot(notleftdf[‘number_project’], kde=True,ax=ax6);
sns.distplot(leftdf[‘average_montly_hours’], kde=True,ax=ax7);
sns.distplot(notleftdf[‘average_montly_hours’], kde=True,ax=ax8);
sns.distplot(leftdf[‘time_spend_company’], kde=True,ax=ax9);
sns.distplot(notleftdf[‘time_spend_company’], kde=True,ax=ax10);
Distributions of those who stayed vs left
整洁!记住这种视觉化,它会让你受益终生:)。现在,我们能从中学到什么?
洞察力:离开的人的简介
- 满意度:这里没有太多的模式,除了我们可以看到离开的员工不仅仅是那些不满意的人,还有那些对他们的工作非常满意的人。
- last_evaluation :高和低,可能表示超出业绩者和低于业绩者离开公司。如果这是真的,那就意味着员工离职有两个原因:他们觉得自己不能很好地发挥才能或激发积极性,或者他们有动力去申请更好的职业机会。
- 编号 _ 项目:最多有 2 个项目。也许与拥有 3-4 个项目的留守员工的分布不同。我们可能希望将此与平均每月小时数进行进一步比较,并观察是否存在辛普森悖论,即当我们考虑其他混杂变量时,洞察力会发生变化。我们还需要进一步比较项目的规模和性质。
- 平均月工作时间:它的平均工作时间要么长,要么短。这是独一无二的,因为也许员工对公司的参与度过高或过低。
- time_spend_company: 他们中的一些人花的时间比留下来的员工少,我们可能会认为他们不太忙于工作。结合平均每月小时数,这是一个可能的假设。
很酷的故事,让我们进一步搞清楚这些变量是如何相互关联的。
相关分析
让我们创建相关性分析来找出特性之间的相关性。这可以通过。corr()方法导出左侧 employees 数据框中所有数值的相关性。然后,让我们应用 Seaborn 热图来显示离职员工之间的属性相关性。
corr = leftdf.drop(‘left’,axis=1).corr()sns.heatmap(corr)
Finding the correlations among attributes
Seaborn 拯救了世界!非常简单的可视化,全部在一行 sns.heatmap()中。
洞察力:相关元素
快速浏览一下,我们可以发现一些可能的相关元素,例如:
- 数字 _ 项目和平均 _ 月 _ 小时:这是有意义的,因为你有越多的项目,你应该花更多的时间在它上面。这可能是不满意的原因。
- 最后评估和平均每月小时数:这是一个很好的有希望的发现,这表明每月小时数越长,你就越有可能得到一个好的最后评估。在亚洲这样的文化中,这可能是真的,亚洲有时仍然有微观管理。我们需要进一步了解数据的背景信息,以从中提取一些假设。
当我们做预测模型并继续前进时,让我们记住这一点。目前,基于我们对元数据和相关性强度(> 0.7)的理解,似乎还没有相关的特性
部门分析
哪些部门的员工离职最频繁?
我们将使用 Seaborn Factorplot 根据部门和工资水平可视化左侧数据框。由于图像没有显示足够清晰的文本大小,我已经标记了关键特征来查看。
*# For this we assume that high earners are paid highly = 3, the otherwise is paid low to decent* sns.factorplot(x=”sales”,data=leftdf,col=”salary”,kind=’count’,aspect=.8,size=14
Factorplot among different department and salary levels
洞察力
- 似乎销售人员大部分时间都是以中低收入离开公司的。
- 同样,其次是对中低工资的技术和支持。
我们现在可以问自己“为什么?”
为什么这些部门的员工会离开?
让我们想象一下箱线图,以得到清楚的答案。使用 Seaborn,我们可以将可视化堆叠在 matplotlib 图形中。这将使我们能够协调我们之前讨论过的四个特性。
为了你的理解,我把视觉化产生的故事编了号。请随意查找下面的故事。如果你发现这太牵强,那就是!这样做的目的是让你的想象力自由流动,自由地提出你的假设。有些甚至可能是真的,你们将成为在废墟中发现宝藏的英雄。
在这些故事中,我借此机会讲述了我自己的一些个人经历或社会群体。如果你能感同身受,请随意鼓掌或评论:)。
*# Create a figure instance, and the two subplots*
fig = plt.figure(figsize=(20,10))
ax1 = fig.add_subplot(411)
ax2 = fig.add_subplot(412)
ax3 = fig.add_subplot(413)
ax4 = fig.add_subplot(414)
sns.boxplot(x="sales",y="satisfaction_level",data=leftdf,ax=ax1)
sns.boxplot(x="sales",y="time_spend_company",data=leftdf,ax=ax2)
sns.boxplot(x="sales",y="number_project",data=leftdf,ax=ax3)
sns.boxplot(x="sales",y="average_montly_hours",data=leftdf,ax=ax4)
Boxplot for different features and various departments
见解:
- 与其他离职部门的比较。与其他部门相比,销售部没有留下他们离职的重要原因。事实上,我们在这里可以看到,他们的调查满意度实际上高于会计和其他部门。这意味着销售人员离开的唯一原因可能是因为低工资。另一个原因是他们可能因为害怕被销售经理发现而篡改了调查答案。这可能是一种敲诈材料,以防他们没有达到销售目标。
- 会计是满意度最低的行业之一,大多数四分位数都低于 0.5。但同时,会计也是离职率较低的部门之一。这可能是由于会计行业工作保障的神话。我的一些朋友坚持从事卑微而艰苦的会计和审计工作,因为他们努力奋斗,以求在公司高层获得更稳定的工作。谁知道呢,不过那是个好玩的故事分享给我的会计朋友们(哈哈!).
- 另一方面,“技术和支持”给出了所有检查功能的广泛范围。与销售不同,我们仍然可以看到大量员工对他们的工作不够满意。因此,我们需要进一步分离,以了解他们中的一些人离开的原因。很可能,小公司和大公司会区别对待这些员工。还记得英国电信, IT 人群秀吗?爱死了!
- 市场营销和产品管理的满意度很高,尽管低薪辞职率很高。这可能是因为这个行业发展非常快,一些从业者在跨国公司获得了更好的机会。
The British IT Crowd Show which shows Moss and Roy as the Technical and Support Employees, Jen as Entertainment Marketing Manager, and Douglas as the fun CEO — credit to comedy.co.uk
模型生成
咻,我们今天学了这么多故事。现在,让我们享受一下生成模型的乐趣。万岁!!
创建交叉验证训练测试分解
让我们从创建训练和测试数据集开始。
想法是使用训练数据集来训练模型,并使用测试数据集来测试模型。这是为了避免过度拟合模型以达到高精度但高方差误差。您可以使用的另一个集合是用于调整模型的验证集合。
The architecture of train, test, and validation data set
请参考这一惊人的列车测试验证分裂解释媒体。
[## 数据科学精要:为什么要训练-验证-测试数据?
想知道为什么我们把数据分成训练-验证-测试吗?
medium.com](https://medium.com/datadriveninvestor/data-science-essentials-why-train-validation-test-data-b7f7d472dc1f)
**import** **numpy** **as** **np**
**from** **sklearn** **import** cross_validation,neighbors,svm*#dropping left and sales X for the df, y for the left*
X = df.drop(['left','sales'],axis=1)
y = df['left']*#splitting the train and test sets*
X_train, X_test, y_train,y_test= cross_validation.train_test_split(X,y,test_size=0.2)
完成分割后,我们将继续训练和验证模型。
训练支持向量机(SVM)
支持向量机(SVM)是一种用于分类和回归的监督机器学习算法。该模型将处理 n 维空间中的每个数据点,其中 n 表示您拥有的特征数量。每个值都是 n 维平面中特定坐标的值。然后,分类将找到这个最佳超平面,它给出了到训练样本的最大最小距离。它分隔了班级,就像你如何在你的办公桌和你讨厌的同事的办公桌之间放置一个隔板一样。这是我自己的例子,请自行斟酌使用!
Optimal Hyperplane which allows maximum margins of two classes
这是一个惊人的参考,让你进一步了解 SVM。
[## 支持向量机(SVM)
支持向量机(SVM)是一种有监督的机器学习算法,可用于分类…
medium.com](https://medium.com/coinmonks/support-vector-machines-svm-b2b433419d73)
现在,让我们用训练数据训练我们的 SVM。一旦我们符合模型,我们可以通过一个简单的评分过程找到准确性。
clfsvm = svm.SVC()
clfsvm.fit(X_train,y_trainaccuracy = clfsvm.score(clfsvm.predict(X_test),y_test)
这将返回 0.96 的准确度,这在测试数据集上表现得非常好。
训练决策树
决策树基本上是一个二叉树流程图,其中每个节点根据一些特征变量分割一组观察值。决策树的目标是将数据分成组,这样一个组中的每个元素都属于同一个类别。这将基于最小均方值,以确保每个组都具有定义的同质性。这样做最大的好处是,它真的很直观,很容易用来得出见解。
请参考以下文章了解更多信息。
[## 用 Python 创建和可视化决策树
决策树是当今使用的一些最强大的监督学习方法的构建块。一个…
medium.com](https://medium.com/@rnbrown/creating-and-visualizing-decision-trees-with-python-f8e8fa394176)
让我们开始训练我们的决策树。
**from** **sklearn** **import** tree
clftree = tree.DecisionTreeClassifier(max_depth=3)
clftree.fit(X_train,y_train)
拥有决策树的最大好处是可视化它。您可以导入 pydotplus 并运行以下可视化。
*# Visualizing the decision tree*
**from** **sklearn** **import** tree
**from** **scipy** **import** misc
**import** **pydotplus**
**import** **graphviz**
**def** show_tree(decisionTree, file_path):
tree.export_graphviz(decisionTree, out_file='tree.dot',feature_names=X_train.columns)
graph = pydotplus.graphviz.graph_from_dot_file('tree.dot')
graph.write_png('tree.png')
i = misc.imread(file_path)
fig, ax = plt.subplots(figsize=(18, 10))
ax.imshow(i, aspect='auto')
*# To use it*
show_tree(clftree, 'tree.png')
Decision Tree with high intuition, the important characteristics of the left employees are shown in the circle
整洁!你可以想象一个非常直观的决策树。你可以找到红圈来理解这些观点:
见解:什么最有可能导致人们离开?
- 满意度低(<=0.115)
- high number of projects (> 2.5)。
- 低到中的最后评价(≤0.575)
- 在这个层次上,工资并不是一个重要的预测因素
这是非常明显的,但与我们之前头脑风暴的一些假设一致,例如低满意度和低上次评估。这一发现也可以用一个规则来表示,您可以很容易地用 excel 表进行编码,然后提交给您的管理层进行高度评价(太好了!).
决策树解释
一般来说,我们得到满意度作为我们的顶级节点。然后分支到第二级节点,具有数量 _ 项目和时间 _ 花费 _ 公司。技术上节点位置越低,分支节点的 gini (分类离散度)越小。这意味着节点越低,分离越均匀。
顶层节点拥有最重要的特征来分隔分类,其次是第二层,依此类推。
结论:公司留住员工的 3 条简单建议
- 在任何给定的时间,将员工的项目数量减少到 1 或 2 个。这比减少他们的工作时间更重要。
- 除了销售、技术和支持之外,工资不是一个重要的预测因素。谨慎加薪。
- 增进管理者和员工之间的沟通和信任。很大一部分离职员工在最后一次评估中得分很低。这意味着我们需要在部门/小组之间培养健康的关系。一个具体的解决方案是减少微观管理者和对错误的惩罚。
额外收获:训练和测试多个分类模型
这是一个额外的分析,通过训练几个分类模型来提高您的理解。我将在后续出版物的更大主题中讨论每个模型。现在,我们将只探索一段快速代码来涵盖一些模型,如 RandomForest、AdaBoost 等。
**from** **sklearn.metrics** **import** accuracy_score, log_loss
**from** **sklearn.neighbors** **import** KNeighborsClassifier
**from** **sklearn.svm** **import** SVC, LinearSVC, NuSVC
**from** **sklearn.tree** **import** DecisionTreeClassifier
**from** **sklearn.ensemble** **import** RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier
**from** **sklearn.naive_bayes** **import** GaussianNB
**from** **sklearn.discriminant_analysis** **import** LinearDiscriminantAnalysis
**from** **sklearn.discriminant_analysis** **import** QuadraticDiscriminantAnalysis
classifiers = [
KNeighborsClassifier(3),
SVC(kernel="rbf", C=0.025, probability=True),
DecisionTreeClassifier(),
RandomForestClassifier(),
AdaBoostClassifier(),
GradientBoostingClassifier(),
GaussianNB(),
LinearDiscriminantAnalysis(),
QuadraticDiscriminantAnalysis()]
*# Logging for Visual Comparison*
log_cols=["Classifier", "Accuracy", "Log Loss"]
log = pd.DataFrame(columns=log_cols)
**for** clf **in** classifiers:
clf.fit(X_train, y_train)
name = clf.__class__.__name__
**print**("="*30)
**print**(name)
**print**('****Results****')
train_predictions = clf.predict(X_test)
acc = accuracy_score(y_test, train_predictions)
**print**("Accuracy: {:.4%}".format(acc))
train_predictions = clf.predict_proba(X_test)
ll = log_loss(y_test, train_predictions)
**print**("Log Loss: {}".format(ll))
log_entry = pd.DataFrame([[name, acc*100, ll]], columns=log_cols)
log = log.append(log_entry)
**print**("="*30)
太好了!您将获得如下一些打印结果,完整打印结果请参考 Python 笔记本:
Prints for multiple models
我们将使用精确度和对数损失来评估这些模型。对数损失是由预测要素和实际要素之间的不匹配导致的累积成本。请参考下面的日志丢失定义:
[## 理解对数损耗
对数损失,或简称为对数损失,是一种分类损失函数,常用作 kaggle…
www.r-bloggers.com](https://www.r-bloggers.com/making-sense-of-logarithmic-loss/)
使用 Seaborn,让我们基于准确性和日志损失来可视化哪些模型表现最好。
sns.set_color_codes("muted")
sns.barplot(x='Accuracy', y='Classifier', data=log, color="b")
plt.xlabel('Accuracy %')
plt.title('Classifier Accuracy')
plt.show()
sns.set_color_codes("muted")
sns.barplot(x='Log Loss', y='Classifier', data=log, color="g")
plt.xlabel('Log Loss')
plt.title('Classifier Log Loss')
plt.show()
Accuracy and Log Loss Visualization
这是一个很好的可视化工具,展示了我们分类需求中各种模型的性能。
从图中,我们了解到我们应该训练随机森林分类,因为它的低对数损失和高准确性。对于不知道什么是随机森林的人,我将它定义为各种决策树预测的集合。请随意阅读下面的帖子了解更多细节。
[## 用 Python 实现随机森林分类模型
随机森林算法用于分类和回归。随机森林是一种集成学习方法…
medium.com](https://medium.com/@hjhuney/implementing-a-random-forest-classification-model-in-python-583891c99652)
这就是你如何用随机森林分类器进行预测来总结我们的分析。
*# Predict Test Set*
favorite_clf = RandomForestClassifier()
favorite_clf.fit(X_train, y_train)
submission = pd.DataFrame(favorite_clf.predict(X_test),index=X_test.index,columns=['Prediction'])
这是我走过的路的尽头。希望现在你能更多地了解飞行风险背后的故事,以及如何从数据驱动的见解中保住你的工作:)。
目的、Github 代码和您的贡献
本概念证明(POC)的目的是作为辅助项目的一部分,用于学习目的。该应用程序的目标是帮助您快速检索和显示正确的见解,以理解和解决现实生活中的业务问题。
在 POC 中,我使用 Pandas 生成表格格式的数据框架进行分析,使用 Seaborn 可视化重要的分析,最后使用机器学习模型(如 SVM 和决策树)来预测员工的飞行风险。Github Python 笔记本代码位于下面。
[## 文森特/PythonAnalytics
这是一个存放我的 Kaggle 和 iPython 笔记本- VincentTatan/PythonAnalytics 的仓库
github.com](https://github.com/VincentTatan/PythonAnalytics/blob/master/Youtube/Lesson 4 Basic Python for Data Analytics (HR Retention Prediction) - Practice.ipynb)
您可以随意克隆这个库,并在有时间的时候贡献自己的一份力量。
用 Python 和熊猫分析股票投资
代替今天关于 python 和分析的主题。你也可以看看我为有抱负的投资者出版的另一本书。你应该试着通过这个演示来指导你编写快速的 Python 代码来分析、可视化和预测股票。
[## 12 分钟:熊猫和 Scikit 的股票分析-学习
使用 Python 快速分析、可视化和预测股票价格
towardsdatascience.com](/in-12-minutes-stocks-analysis-with-pandas-and-scikit-learn-a8d8a7b50ee7)
我的另一个好的出版物是为有抱负的价值投资者准备的价值投资仪表板。
[## 价值投资仪表盘,配有 Python Beautiful Soup 和 Dash Python
价值投资的 Web 抓取与快速 Dash 可视化概述
towardsdatascience.com](/value-investing-dashboard-with-python-beautiful-soup-and-dash-python-43002f6a97ca)
希望从这两本出版物中,你可以学到如何通过讲故事来创造个人价值。喜欢的请阅读并给予掌声:)。
感谢
我想感谢我的人力资源专业同事和朋友们,他们给了我关于这本书的建设性反馈。我真的很高兴得知你从我的出版物中获得了很多价值。
最后…向我伸出手
咻…就是这样,关于我的想法,我把它写成了文字。我真的希望这对你们来说是一个伟大的阅读。因此,我希望我的想法可以成为你发展和创新的灵感来源。
请通过我的 LinkedIn 联系我,订阅我的 Youtube 频道
下面评论出来建议和反馈。
快乐编码:)
免责声明:本免责声明告知读者,文中表达的观点、想法和意见仅属于作者,不一定属于作者的雇主、组织、委员会或其他团体或个人。参考文献从列表中挑选,与其他作品的任何相似之处纯属巧合
本文纯粹是作者的个人项目,绝无任何其他不可告人的目的。
手柄后面的脸——使用神经网络区分唐纳德·特朗普的推文习惯
原文:https://towardsdatascience.com/whos-really-behind-trump-s-tweets-a76b20a7e7?source=collection_archive---------38-----------------------
几乎每一个不朽的宣言都有它的面孔。在我们这个时代,我们有一个推特账号。
【德瑞克】迦格伦吴锡荣纳森萧**
纵观历史,总统们都曾为自己搭建平台,宣布重大变革即将到来。富兰克林·罗斯福利用他的私人炉边谈话宣布对日战争和美国加入第二次世界大战;罗纳德·里根通过他在柏林墙的标志性演讲重新统一了德国;约翰·肯尼迪通过电视广播宣布人类登上月球的梦想将成为现实。这些时刻标志着世界历史,表明来自标志性人物的标志性信息永远不会真正消失。
Three iconic presidential speeches throughout history. Left: FDR fireside chat where he announces war on Japan. Middle: Ronald Reagan’s “Ich Bin Ein Berliner.” Right: JFK giving his moonshot speech. All thumbnails taken from the YouTube videos linked above.
然而,时代变了:
虽然没错,这是全球关系的一个重大事件,但它也是特朗普总统的个人推特——他与世界沟通的主要手段。
从承认以色列在戈兰高地的主权到宣布对中国征收 2000 亿美元的新关税,Twitter 上的这些行动一次又一次地证明了它们在世界范围内具有重大影响。事实上,摩根大通甚至创造了一个“Volfefe”指数来跟踪由@realDonaldTrump 的推文引起的美国债券市场的波动。
在标志性的电视事件中,比如 JFK 出色地宣布,是的,我们是 要去月球,你可以清楚地看到高中 AP Lang 老师的清单:他使用了哪些文学手段?他如何在人群中展示自己?他的是什么风气?(如果我给了你一个闪回,我道歉)
然而,有一个问题几乎从未被提及,但却非常重要:世卫组织在讲话?****
仅仅因为它来自@realDonaldTrump 并不意味着它来自(是的,我正在这样做)真正的唐纳德·特朗普。难道你不认为知道谁是世界上最强大的推特账户的幕后操纵者很重要吗?幸运的是,有一个理论。
一个流行的(阴谋?)关于唐纳德·特朗普的推文来源的理论是,他更具外交色彩的推文是由工作人员撰写的,而他个人则撰写更具争议性的内容。为了识别真正是谁写了他的推文,我们基于现有的理论训练了几个神经网络。
在 2017 年 3 月 25 日之前, @realDonaldTrump 的推文在 iPhone 和 Android 设备上发布。一个流行的理论是,特朗普的工作人员用 iPhone 发布推文,而特朗普本人则用他的安卓系统发布推文。虽然特朗普在 2017 年换了一部 iPhone,但我们决定测试一下这个理论,看看我们能否根据文本确定每条推文的来源。
下面是两条不同标签的推文的一个很好的例子:
Twitter for Android
Twitter for iPhone
反差很大,不是吗?
我们做了什么
Screenshot of the Trump Twitter Archive
为了将推文分类为工作人员推文或特朗普推文,我们使用了由特朗普推特档案馆存档的推文目录,并将它们分为两组,即 2017 年 3 月之前和之后。在 2017 年 3 月之前的集合中,我们过滤掉了从 Twitter for Web 等其他来源发布的推文,并使用 Android 和 iPhone 推文来建立我们的地面真相数据集。
****
这里我们有一个基于设备类型的推文频率图,我们发现一般来说,来自 Android 设备(特朗普本人)的推文不如来自 iPhone(他的工作人员)的推文频繁。
检查分布图,我们注意到两个设备的大峰值约为 140 个字符,但来自 Androids 的更多。这可以归因于推特上的字符限制——自 2007 年推特成立以来,每条推特就保持在 140 个字符,很大程度上受短信 160 个字符限制的影响。然而,自 2017 年底以来,该限制增加了一倍,达到 280 个字符,这一点从分布图中 iPhone 推文的最右边峰值可以看出。这两个图说明了我们的数据集中明显的偏向,严重偏向 iPhones,数据点几乎是 iPhones 的三倍,分布也超过了旧的 140 个字符的限制。
准备数据
与任何神经网络一样,需要进行一些预处理:
标记化和格式化
标记化将每个单词映射到字典中的一个索引。为了准备要传递到神经网络的数据,首先使用 Keras 的Tokenizer
模块对推文进行标记化。一旦测试和训练集被标记化,我们就必须决定保持输入大小一致的方法。我们认为按长度裁剪推文会导致我们丢失数据,所以我们选择填充推文。我们选择用 65 个单词的长度来填充输入,因为我们发现最长的推文是 50 个单词,我们希望为未来的推文留有足够的余量。
把...嵌入
为了构建我们的单词嵌入,我们在 Kaggle 上找到了预处理的全局向量(手套)单词模型。这种类型的模型映射矩阵中两个单词之间的关系,并根据-1 到 1 的值对该关系进行评分。这是生成单词嵌入层的权重的一种非常常见的方法。首先,我们创建了一个出现在数据集中的单词的字典,然后通过从 GloVe 文本文件中解析这些单词及其嵌入值来创建一个嵌入矩阵。
平衡
正如前面的和所看到的,我们的数据严重失真。与机器人相比,iPhones 的推文数量明显更多。在这种倾斜的数据集上进行训练会有一个有偏见的模型的风险,这意味着模型会过度预测 iPhones,而在大多数时候仍然是正确的。因此,我们试图通过用平衡批次训练我们的模型来解决这个问题。我们通过使用欠采样技术做到了这一点,该技术从 iPhone 推文中提取较小的样本,这有助于我们的模型做出更可靠的预测,因为它暴露于一组平衡的训练数据。
训练/测试分割
在所有数据都被收集到 JSON 文件中之后,每条 tweet 的文本和来源都被传递到 sklearn 的train_test_split
中,以便生成一个训练和验证集。
建模
我们选择了五种不同的架构来训练我们的数据集。我们首先看了一个基本的前馈网络作为基线,然后看了 NLP 中流行的其他四个模型。这样做不是为了微调超参数,而是为了探索各种流行的架构,这些架构后来可以扩展为更精细和精确的模型。
每个网络的第一层是嵌入层,具有填充字向量(65)的维度。嵌入层的权重是用我们使用的给定 GloVe 文本文件预先实例化的。通过使用预先制作的单词嵌入文件,这是迁移学习的一个应用。这第一层在每个模型中都是标准的,与后面的层无关。
在训练模型时,我们使用 Keras 中内置的validation_data
参数将测试集设置为验证数据。我们测量每个时期改进的验证准确度,并训练模型,直到验证准确度在 50 个时期内停止改进。
如果你想跟随我们,请查看我们的 GitHub 页面 !
正向输送
我们想先尝试前馈模型,因为我们想看看与一些更复杂的模型相比,基本模型的表现如何。
**Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_1 (Embedding) (None, 65, 100) 2441300
_________________________________________________________________
flatten_1 (Flatten) (None, 6500) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 6501
=================================================================
Total params: 2,447,801
Trainable params: 6,501
Non-trainable params: 2,441,300Test Score: 0.4719
Test Accuracy: 0.7909**
1D 卷积神经网络(CNN)
1D CNN 将扫描一系列标记化的单词。滤波器长度决定了在单个卷积中要查看多少单词。
**Model: "sequential_8"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_8 (Embedding) (None, 65, 100) 2441300
_________________________________________________________________
conv1d_4 (Conv1D) (None, 61, 128) 64128
_________________________________________________________________
global_max_pooling1d_4 (Glob (None, 128) 0
_________________________________________________________________
dense_15 (Dense) (None, 128) 16512
_________________________________________________________________
activation_6 (Activation) (None, 128) 0
_________________________________________________________________
dense_16 (Dense) (None, 1) 129
=================================================================
Total params: 2,522,069
Trainable params: 80,769
Non-trainable params: 2,441,300
_________________________________________________________________
NoneTest Score: 0.8156
Test Accuracy: 0.7650**
长短期记忆(LSTM)
LSTM 是一个递归神经网络,擅长在较小(短期)和较大(长期)的上下文中查找单词序列的模式。
**Model: "sequential_10"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_10 (Embedding) (None, 65, 100) 2441300
_________________________________________________________________
lstm_3 (LSTM) (None, 128) 117248
_________________________________________________________________
dense_20 (Dense) (None, 128) 16512
_________________________________________________________________
activation_8 (Activation) (None, 128) 0
_________________________________________________________________
dense_21 (Dense) (None, 1) 129
=================================================================
Total params: 2,575,189
Trainable params: 133,889
Non-trainable params: 2,441,300
_________________________________________________________________
NoneTest Score: 0.5700
Test Accuracy: 0.7748**
双向 LSTM
这个 LSTM 变体既可以向前也可以向后工作,也可以按逆序计算单词序列。
**Model: "sequential_13"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_13 (Embedding) (None, 65, 100) 2441300
_________________________________________________________________
bidirectional_2 (Bidirection (None, 256) 234496
_________________________________________________________________
dense_26 (Dense) (None, 128) 32896
_________________________________________________________________
activation_11 (Activation) (None, 128) 0
_________________________________________________________________
dense_27 (Dense) (None, 1) 129
=================================================================
Total params: 2,708,821
Trainable params: 267,521
Non-trainable params: 2,441,300
_________________________________________________________________
NoneTest Score: 2.1170
Test Accuracy: 0.7552**
门控循环单元(GRU)
GRU 是更新的循环神经结构,类似于 LSTM。
**Model: "sequential_16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_16 (Embedding) (None, 65, 100) 2441300
_________________________________________________________________
gru_1 (GRU) (None, 128) 87936
_________________________________________________________________
dense_30 (Dense) (None, 128) 16512
_________________________________________________________________
activation_12 (Activation) (None, 128) 0
_________________________________________________________________
dense_31 (Dense) (None, 1) 129
=================================================================
Total params: 2,545,877
Trainable params: 104,577
Non-trainable params: 2,441,300
_________________________________________________________________Test Score: 0.6943
Test Accuracy: 0.2448**
我们发现了什么
不同模型之间的验证准确性差异非常小。虽然我们的前馈网络具有最好的验证准确性,但 LSTM 模型的准确性仅低 2%。
LSTM 预测:不是川普
LSTM 预测:不是川普
LSTM 预测:不是川普
LSTM 预测:川普
在对一些随机推文进行测试后,我们决定在 2017 年 3 月后的所有推文中尝试我们的 LSTM 模型,以了解特朗普和员工推文的比例是否会随着时间的推移而变化。这是我们的发现:
为了便于比较,这是 2017 年 3 月之前的图表:
总结反思
基于我们的结果,我们发现前馈网络表现最好,这可能是由于特朗普推文的简单性质。理想情况下,我们的模型应该考虑大写和标点符号,但是由于嵌入文件的限制,我们不能这样做。如果时间允许,我们可以只在特朗普的推文中训练我们自己的嵌入文件,而不是使用预训练的文件。尽管有这些限制,我们发现我们的结果相当有见地。
所以下次你看到这样的推文,
**[[0.1183652 0.8849327]]
# 88.49% Not Trump**
…也许可以半信半疑。也许实际上美国总统并没有就外交政策发表重大声明。
对我们的数据好奇?想自己玩玩吗?查看我们的 GitHub 回购。
特别感谢 Ulf Aslak 博士的指导 ❤
参考
** [## 特朗普推特档案
特朗普的所有 30,000 多条推文都可以立即搜索到
www.trumptwitterarchive.com](http://www.trumptwitterarchive.com/archive) [## 手套. 6B.100d.txt
下载数千个项目的开放数据集+在一个平台上共享项目。探索热门话题,如政府…
www.kaggle.com](https://www.kaggle.com/terenceliu4444/glove6b100dtxt) [## Home - Keras 文档
Keras 是一个高级神经网络 API,用 Python 编写,能够运行在 TensorFlow、CNTK 或…
keras.io](https://keras.io/) [## seaborn:统计数据可视化- seaborn 0.9.0 文档
Seaborn 是一个基于 matplotlib 的 Python 数据可视化库。它为绘图提供了一个高级接口…
seaborn.pydata.org](https://seaborn.pydata.org/index.html)**
那个神奇宝贝是谁?
原文:https://towardsdatascience.com/whos-that-pokémon-39d1150aedfe?source=collection_archive---------11-----------------------
用 Python 来回答这个古老的问题。
所以我是一个终生的神奇宝贝粉丝,也是一个最近转变的计算机科学书呆子。虽然我的主要兴趣在于数据科学(为我上一篇关于数据科学伦理的文章**),但我发现自己一直在构思随机编码项目,其中大部分从未实现。
我和我的朋友 Augustine Chang 正在做一个分类项目,在查看我们数据的散点图时,我们看到了一个熟悉的轮廓。
作为一个笑话,我们在演示幻灯片的图表上叠加了神奇宝贝的图像,看起来像是一些有趣的 matplotlib 函数。这个迷你项目就是这样诞生的。
Groudon and Kyogre. If only, matplotlib. If only.
步骤 1:解读(神奇宝贝)图像
我的最终目标是能够让神奇宝贝适合斑点,我首先需要能够找到一种比较图像的方法。我在 Kaggle 上找到了一个数据集,其中方便地包含了所有神奇宝贝的 256 x 256 透明 png 图像,这将是我用来比较我的 blobs 的一组图像。在我写的另一篇关于计算摄影的文章中,我发现图像可以被解释为数组中的数组——张量,如果你愿意,每个像素由一个数组表示,这个数组是该像素的 RGB 值。使用matplotlib.image
中的imread
方法,我可以很容易地输出给定图像的数组。
最重要的是,matplotlib
能够使用imshow
将正确维度的数组输出为 2D 图上的图像。
‘paths’ is the routes of the images; where the images are saved
步骤 2:比较数据集中的图像
为了比较图像,我认为最简单的方法是比较两幅图像中每个对应像素的 RGB 值。更具体地说,我采用了两幅图像中每对匹配像素之间的欧几里德距离,并使用它来找到两幅图像中的平均像素距离。
首先,为了避免处理其他图像,我想看看最相似的神奇宝贝是什么,给定一个神奇宝贝。在我的代码中,我希望能够输入神奇宝贝 ID 号并返回其最佳匹配。所以我设置了它:
- 一个函数,将返回原始的和最匹配的图像,并排。
- 返回两幅图像之间的平均像素距离的函数。
- 该函数将返回输入图像和每个神奇宝贝图像之间的距离列表。
- 嵌套了上述三个函数的函数,将输出预期的结果。
以下是目前的一些结果:
Charmander (ID: 4) is most similar to Charmeleon!
Voltorb (ID: 100) is most similar to Electrode!
相当不错!因为我使用的度量是平均像素距离,并且因为图像有透明的背景,所以神奇宝贝的颜色和形状都被考虑在内。
步骤 3:使用任何输入图像
在这里,我所要做的就是对我现有的函数做一些调整,这样它们就可以接受任何图像。一个限制是,我只能使用与神奇宝贝数据集中的图像具有相同维度的图像。因此,我首先在其他 256 x 256 的图像上测试了我的更新功能。
**
酷!但是如果图像不是 256 x 256 呢?Python 的 Pillow 包用名副其实的resizeimage
函数很容易地为我们做到了这一点,我写了一个函数来接受图像的文件名,并将其调整到我需要的尺寸。
第四步:把所有东西放在一起
这里是我的函数使用的所有代码,bestfitpokemon()
!
The Entire Code!
一个警告:我发现 JPEG 文件不起作用,因为神奇宝贝的 PNG 数据集意味着每个像素都有一个额外的“alpha”值,而 JPEG 文件没有。当查找 3D 和 4D 数组之间的欧几里德距离时,该函数会中断。
我把我们最初的散点图和一些劣质的 photoshop 作品,只提取红色和蓝色的斑点到透明的 PNG 图像,只是为了看看最适合的神奇宝贝会是什么。
**
Best-Fit Pokémon
**
总结一下…
对我来说,这里有一些明显的后续步骤。我可以裁剪和重新缩放,或者找到其他方法来处理空白,这样颜色的权重会更高。我还可以通过输入每只神奇宝贝的多张图片,把它变成一个分类模型。
所以我的博客没有变成 Groudon 或盖欧卡。检查这些结果,似乎返回的神奇宝贝的形状与斑点形状非常相似!所以根据我的模型,Psyduck 和 Marowak 是最适合我的 blobs 的神奇宝贝。
为什么 IQR 异常值检测法中的“1.5”?
原文:https://towardsdatascience.com/why-1-5-in-iqr-method-of-outlier-detection-5d07fdc82097?source=collection_archive---------0-----------------------
Photo by Nick Fewings on Unsplash
如果你不能向一个六岁的孩子解释,你自己也不会理解。
世界仍在等待下一个爱因斯坦,或者也许再也不会有另一个世纪人物了。但我愿意相信:在宇宙中,在上述引文的变体中…
最好的学习方法是教书。
这个帖子的想法来自于我曾经帮助我的一个大三学生完成异常检测的任务。这不是一个非常复杂的问题,只是 IQR 方法在数据集上离群点检测的一个应用。当他问我的时候,这个教程发生了令人兴奋的转变:
“为什么是 IQR 的 1.5 倍?为什么不是 1 或 2 或任何其他数字?”
现在这个问题对那些不熟悉异常值检测的 IQR 方法(解释如下)的人来说不起任何作用,但对那些知道这个方法有多简单的人来说,我希望上面的问题能让你思考一下。毕竟,好的数据科学家不就是这么做的吗?质疑一切,不要相信任何东西。
从最普遍的意义上来说,异常值是一个与其他观察值明显不同的数据点。现在,它的含义可以根据正在研究的统计模型来解释,但为了简单起见,并且不要偏离这篇文章的主要议程太远,我们将考虑一阶统计量以及非常简单的数据集,不失一般性。
异常值检测的 IQR 方法
为了便于解释 IQR 方法,让我们从一个方框图开始。
A box plot from source
箱线图或多或少地告诉我们数据的分布情况。它给出了数据实际上分布了多少,它的范围是什么,以及它的偏斜度。您可能已经在图中注意到,箱线图使我们能够从中推断有序数据,也就是说,它告诉我们按升序排列的数据的各种指标。
在上图中,
- 最小值是数据集中的最小值,
- 并且最大值是数据集中的最大值。
所以两者的区别告诉我们数据集的范围。
- 中位数是数据的中位数(或中心点),也称为第二个四分位数(由数据是有序的这一事实产生)。
- Q1 是数据的第一个四分位数,也就是说有 25%的数据位于最小值和 Q1 之间。
- Q3 是数据的第三个四分位数,也就是说 75%的数据位于最小值和 Q3 之间。
Q3 与 Q1 之差称为四分位距或 IQR 。
IQR = Q3 - Q1
为了使用这种方法检测异常值,我们定义了一个新的范围,让我们称之为决策范围,并且位于该范围之外的任何数据点都被认为是异常值,并且被相应地处理。范围如下所示:
Lower Bound: **(Q1 - 1.5 * IQR)**Upper Bound: **(Q3 + 1.5 * IQR)**
任何小于下限或大于上限的数据点都被视为异常值。
但问题是:为什么只有 IQR 的 1.5 倍?为什么不是其他数字?
嗯,你可能已经猜到了,数字(这里是 1.5,以下是标度)清楚地控制了范围的灵敏度,因此决定了规则。较大的标度会使离群值被认为是数据点,而较小的标度会使一些数据点被认为是离群值。我们很确定,这些情况都不理想。
但这是一种解释原因的抽象方式,它非常有效,但却很幼稚。那么,我们应该把头转向什么呢?
数学!当然!(你预见到了,对吗?😐)
从现在开始事情会变得有点“数学化”。但我会尽量减少。
如果我告诉你这个数字,或者说标度,取决于数据遵循的分布,你可能会感到惊讶。
例如,假设我们的数据遵循我们所钟爱的高斯分布。
高斯分布
你们一定都见过高斯分布是什么样子的,对吧?如果没有,在这里(虽然我对你很怀疑👊).
Gaussian Distribution with steps of standard deviation from source
从该图中可以推断出某些观察结果:
- 整个数据的大约 68.26%位于平均值(μ)的一个标准偏差(<【σ)内,考虑到两边,图中的粉红色区域。
- 整个数据的大约 95.44%位于平均值(μ)的两个标准偏差( 2σ )内,考虑到两边,图中的粉红色+蓝色区域。
- 整个数据的大约 99.72%位于均值(μ)的三个标准差( < 3σ )内,考虑到两边,图中的粉色+蓝色+绿色区域。
- 整个数据的其余 0.28%位于均值(μ)的三个标准差( > 3σ )之外,考虑到两边,图中的小红区域。而这部分数据被认为是异常值。
- 第一个四分位数和第三个四分位数 Q1 和 Q3 分别位于均值的 -0.675σ 和 +0.675σ 。
我本可以向您展示这些推论背后的计算,但这超出了本文的范围。如果你愿意,你可以在cs.uni.edu/~campbell/stat/normfact.html查看这些
让我们用σ来计算 IQR 决策范围
取刻度 = 1:
**Lower Bound:**= Q1 - 1 * IQR
= Q1 - 1 * (Q3 - Q1)
= -0.675σ - 1 * (0.675 - [-0.675])σ
= -0.675σ - 1 * 1.35σ
= **-2.025σ****Upper Bound:**= Q3 + 1 * IQR
= Q3 + 1 * (Q3 - Q1)
= 0.675σ + 1 * (0.675 - [-0.675])σ
= 0.675σ + 1 * 1.35σ
= **2.025σ**
因此,当标度被取为 1 时,那么根据 IQR 方法,任何位于平均值(μ)的 2.025σ 之外的数据,在任何一侧,都应被认为是异常值。但是我们知道,在μ的两边,数据都是有用的。因此,我们不能采用 scale = 1 ,因为这使得决策范围过于排他,意味着这会导致过多的异常值。换句话说,决策范围变得如此之小(与 3σ 相比),以至于将一些数据点视为异常值,这是不可取的。
取标度= 2:
**Lower Bound:**= Q1 - 2 * IQR
= Q1 - 2 * (Q3 - Q1)
= -0.675σ - 2 * (0.675 - [-0.675])σ
= -0.675σ - 2 * 1.35σ
= **-3.375σ****Upper Bound:**= Q3 + 2 * IQR
= Q3 + 2 * (Q3 - Q1)
= 0.675σ + 2 * (0.675 - [-0.675])σ
= 0.675σ + 2 * 1.35σ
= **3.375σ**
因此,当标度取为 2 时,根据 IQR 方法,任何位于平均值(μ)的 3.375σ 之外的数据,在任何一侧都应被视为异常值。但正如我们所知,直到 3σ ,在μ的两边,数据都是有用的。因此,我们不能采用 scale = 2 ,因为这使得决策范围过于宽泛,意味着这导致的异常值太少。换句话说,决策范围变得如此之大(与 3σ 相比),以至于它将一些异常值视为数据点,这也是不可取的。
取标度= 1.5:
**Lower Bound:**= Q1 - 1.5 * IQR
= Q1 - 1.5 * (Q3 - Q1)
= -0.675σ - 1.5 * (0.675 - [-0.675])σ
= -0.675σ - 1.5 * 1.35σ
= **-2.7σ****Upper Bound:**= Q3 + 1.5 * IQR
= Q3 + 1.5 * (Q3 - Q1)
= 0.675σ + 1.5 * (0.675 - [-0.675])σ
= 0.675σ + 1.5 * 1.35σ
= **2.7σ**
当标度取 1.5 时,根据 IQR 方法,任何位于平均值(μ)的 2.7σ 之外的数据,在任何一侧都应被视为异常值。而这个决策范围是最接近高斯分布告诉我们的,即 3σ 。换句话说,这使得决策规则最接近高斯分布对于异常值检测的考虑,这正是我们想要的。
旁注
为了精确地得到 3σ ,我们需要取标度= 1.7,但是 1.5 比 1.7 更“对称”,我们总是更倾向于对称,不是吗!?
此外,异常值检测的 IQR 方法不是唯一的,也绝对不是最佳的异常值检测方法,因此,一点权衡是清晰可辨的,也是可以接受的。
看,这一切用数学展现得多么美丽而优雅。我只是喜欢事物是如何变得清晰,并在通过数学感知时明显成形的。这也是为什么数学是我们这个世界的语言的众多原因之一(尽管对宇宙不太确定😐).
所以,我希望,现在你们知道为什么我们把它定为 1.5,IQR。但是这个标度取决于数据遵循的分布。假设我的数据似乎遵循指数分布,那么这个标度就会改变。
但是,每一个因数学而产生的复杂问题都被数学本身解决了。
听说过中心极限定理吗?没错。同一个定理为什么给了我们假设服从高斯分布的自由。但我想我还是改天再说吧。在那之前,保持好奇!
希望这篇文章对你有用。谢谢!
一路平安!
为什么没有非线性的神经网络只是一条美化了的线——3D 可视化
原文:https://towardsdatascience.com/why-a-neural-network-without-non-linearity-is-just-a-glorified-line-3d-visualization-aff85da10b6a?source=collection_archive---------27-----------------------
在本系列的第一部分中,我们创建了一个简单的单神经元神经网络来区分苹果和橙子。如果你是直接到达这里的,你可能想先检查一下(下面的链接)。如果你已经可以用 ReLU 很好地在 3D 中可视化神经元的输出,请继续。
[## 2D 人工神经网络中的神经元如何在三维可视化中弯曲空间
这是为那些想直观了解人工神经网络中神经元内部工作的人准备的。你只需要一个…
medium.com](https://medium.com/@avinash_dubey/how-a-neuron-in-a-2d-artificial-neural-network-bends-space-in-3d-visualization-d234e8a8374e)
为了继续我们的旅程,我们将为分类问题添加另一种水果—香蕉。我认为可以很有把握地说,香蕉离红色还很远,但会很甜(至少在成熟时)。
2D graph for fruits on a plane (x-axis: redness, y-axis: sweetness)
因此,如果我们取几个香蕉样本(熟的和生的都用黄色的球表示)并把它们放在 X-Y 轴水果盘上,我们会得到一个看起来像左边的图。
此外,你们中的大多数人会敏锐地观察到一条新的绿线的存在,这条绿线将香蕉与橙子区分开来。
从线条到神经元
从上一篇文章中,我们已经知道了一条线的神经元等效方程。
粉线: w1 * x + w2 * y + b1 = 0
绿线:w3 * x+w4 * y+B2 = 0
Two 2D neurons each with two inputs and one output
通过在这些方程周围画一些圈和箭头,我们得到了两个 2D 神经元。粉红色和绿色的都接收 2 个输入并产生一个输出。
但是你喜欢 3D…
…我也是
因此,正如我们在之前的帖子中所做的那样,我将使用 3D 神经网络的实际输出来替换这些线条。没有任何激活的 3D 神经元的输出只是一个平面,因为我们有 2 个神经元,所以我们有 2 个平面。
将飞机的输出放在一起
现在,你可能会想(就像我当年那样),把两个神经元的输出放在一起应该能让我们很好地分离我们的 X-Y 水果拼盘。但是,细节决定成败。
新输出 z =粉色平面+绿色平面
或 z = w1 * x+w2 * y+B1+w3 * x+w4 * y+B2
或 z =(w1+w3) x+(w2+w4) y+B1+B2**
或 z = w5 * x + w6 * y + b3
Adding multiple planes together just results in a new one
这是另一个“橙色”平面的方程式。它甚至没有按照我们预期的方式对水果进行分类(正如你在左边看到的)。
事实上,无数隐藏层中的大量神经元加在一起,只能给我们一个 2D 平面。这同样适用于 n 个输入,也就是说,你将有第二个超平面。
添加非线性的神奇公式
现在,让我们加入非线性的神奇公式,重新激活神经元的输出。对于门外汉来说,它只是用零代替了所有的负值。所以,g(z) = max{0,z}
Non-linear planes added together are excellent classifiers
现在,神经网络的行为完全符合我们的预期——非常聪明。这个程序能够区分橙子、苹果和香蕉,但是我们可以很容易地创建一个程序来挑选任何其他水果,或者更好的是,分别挑选所有水果。
如果你仍然不相信,下面是不同角度的相同观点。
Non-linear planes added together are excellent classifiers — different perspective
如果您希望进一步研究图表,请随时访问我的 geogebra 应用程序,网址为https://www.geogebra.org/3d/ege3egjh
大多数对象应该非常简单,但是应用程序不支持某些激活功能,比如 relu。所以,我不得不采用一些简单的变通方法。
供思考,g(z) = max{0,z}与(z+ abs(z)) / 2 相同
其他激活的非线性
我确信,你们中的一些人会是一些其他激活的泄漏、双极或软版本的粉丝。它们都产生不同种类的输出,各有利弊,但都是非线性的。可以说,非线性是任何神经网络的生命线,没有它,它只是一条美化了的线。
为什么人工智能是不平衡的工业全球格局中的全球均衡器
原文:https://towardsdatascience.com/why-ai-is-a-global-equalizer-in-the-unbalanced-industrial-global-landscape-a8ff8f46a05e?source=collection_archive---------31-----------------------
如果你相信机器人和人工智能是人类所有邪恶的原因,因为你在电影中见过它(并且你相信好莱坞=现实),这篇文章不适合你。
如果你是一个理性的人,那么继续阅读。
2000 年代,数千万美国人和欧洲人失去了制造业工作。我出生并成长在这样一个以制造业为主的城市,意大利蒙法尔科内,这座位于地中海最北端的城市以其造船厂而闻名,建造了一些世界上最大最豪华的游轮。
有思想的人类,比如我认识的那些正在造船的人,很久以来就知道机器人和人工智能不是失业的罪魁祸首——人工智能甚至没有达到重要的质量和规模。
亚洲和南美的低工资国家应该受到谴责,而不是人工智能,也不是机器人。
2015 年蒙法尔科内,取代 45 岁的保罗·萨托里工作的不是机器人。是另一个国家的《闪电侠与白骨》里的某个人。
甚至一些学者(再说一次,我也是,艾教授……)终于醒悟过来,得出了其他人类的相同结论。
多年来,自动化的作用越来越大,这被认为是制造业就业岗位流失的罪魁祸首,但在过去几年里,一个更理性、显然更符合逻辑的观点出现了。
例如,大卫·奥特(麻省理工学院)有一个非常不同的观点:在美国,我们大大高估了制造业生产率的增长。这意味着自动化并没有真正发挥主要作用,如果它是失业的罪魁祸首,它应该发挥主要作用,将生产率提高到最终解雇工人的水平。
事情不是这样的。那是什么原因呢?
嗯,奥托尔声称,更简单,更符合逻辑的是,将中国引入全球贸易体系是失业的根本原因。我们还可以加上其他效仿的国家,但 Autor 基本上证实了工人们一直以来都知道的事情:他们的工作被亚洲和拉丁美洲的表亲抢走了,而不是被人工智能机器人抢走了。
从这里去哪里?AI 作为均衡器。
既然我们知道了显而易见的事情,那么我们对于自动化、人工智能和机器人技术的立场应该是什么呢?
我的主张很简单,我希望人们会发现它和上面的论点一样合乎逻辑。
人工智能将为美国和欧盟境况不佳的制造业和工业部门注入所需的“肾上腺素”。
美国和欧盟的制造业面临竞争,并输给了低劳动力成本的国家。人工智能和相关技术,如机器人技术,以及它们的结合,是全球均衡器。
我这么说是什么意思?虽然劳动力成本差异很大,但软件成本——如人工智能——是一样的。
通过优化单个人类工人的工作,美国/欧盟与世界其他地区之间的生产成本差异将缩小,因为人工智能软件将提高工人的生产率,无论他们在哪里。
此外,如果趋势继续,疯子不掌权(你永远不知道),美国和欧盟的推动和当前在人工智能方面的领导地位可能会使这些地区首先受益于人工智能引入带来的生产力提高,重新平衡不平衡的全球情景。
如果从表面上看,以及理解人工智能不会取代人类,而是增强并让美国制造商重新参与竞争,上述推理应该被任何人接受,无论是民主党人还是共和党人,无论是美国人还是欧洲人。
好莱坞,想拍一部关于那个的电影,还是太真实了?
为什么人工智能是个谎言&每个人都知道
原文:https://towardsdatascience.com/why-ai-is-a-lie-everyone-knows-it-92e200fc900b?source=collection_archive---------23-----------------------
Photo by Ben White on Unsplash
是时候失去一些老朋友,结交一些新朋友了!
首先,花点时间提炼和定义什么是智慧。好的。有多少人同意这个定义?可能存在巨大的分歧。在我所属的“学术”团体中,很多人不喜欢这个团体,我们称之为“偏见”。很简单,如果某样东西不能被“普遍地”测量和理解,相对于你在它的“理论”中存在的任何社会宇宙。
好的。什么是“人造”?这个很简单。所以,我们至少知道人工智能的一部分是普遍真实的,它不是真实的,我的意思是…人工的。赞。
我们被一些我们无法普遍定义的不真实的东西炒作。算是吧。
无论你怎么看,你都是聪明的
我们的大脑消耗模式,实际上,他们消耗数学,第一天。第一天在今天也是有争议的,可悲的是,少数几个对婴儿的“第一天”有所研究的团体,因为许多文化原因很早就被压扁了,学术界的“大企业”知道你不能在当时的文化敏感话题上卖得很好。然而,我们学到的是,我们可以有效地翻译非常年轻的模式。我们在类似时期以某种形式进行的“研究”证明了“古典音乐让你的宝宝更聪明”。算是吧。从上下文来说。
不清楚的是它与音乐关系不大,更多的是模式的一致性。我们用这些模式来触发我们今天的反应。如果你非常喜欢音乐,有艺术天赋,或者以任何方式用音乐来引发思考,你很有可能在很小的时候就接触到非常特殊的音乐模式。从很多方面来说,这都是一个“AI”的话题。讲的是“学”。
婴儿时期的大脑,无论是人工的还是有机的,都会相对于正在被消化的数据模式而生长。你必须有训练这些大脑的东西,但你也必须有某种轨迹或你希望训练去哪里的输出。这里有很多小细节,我可以留到下一篇文章再讲,但有相当多的美丽和可怕的数学,这一切可能会让事情变得奇怪。可以说,我们种植的所有东西在很多方面都是我们自身的抽象。你可以称之为世代诅咒、遗产、血统、社会学习、神经网络,选择你的文化偏见。数学不在乎。
我们都是独一无二的可预测的
你是否曾经看够了某种类型的节目,在那里你差不多知道将要发生的一切?同样的音乐,同样的音调,同样的角色,同样的故事情节,但是有点曲折?这部剧并不“真实”,但创作这部剧的人是真实的。间接来说,每个人都是一个观察人,我们都适应我们接触到的模式,即使我们不能总是这样表达。
现在,同样的“逻辑”或模式存在于观看 CSI 直到它不再有趣,也存在于企业。我们往往会忘记,这些大公司只是庞大的政治权力机构,它们赚钱并为自己的社会服务。就像我们自己的政府和他们所服务的人民一样,它们也是可以预测的。就像我们自己的一些政治家一样,他们似乎并不总是明白或者理解为什么人们会把他们视为“恶魔”。
事实是,我讨厌这么说,因为我更像“消费者”,而不是“企业家、开发人员、工程师、人工智能、令人毛骨悚然的数据怪人”,但“邪恶”这个话题是相对于对其采取行动的人而言的。我们也以这种方式在电影中看到一些最令人惊讶的反派角色,在那里我们理解得如此之多,邪恶变得更加人性化,在故事的某个点上一切都变了。乔治·卢卡斯实际上对人性的模式有很强的把握,但我认为当他开始谈论原力科学时,他有点失去了这种联系。哇,乔治,在我们不太真实的科幻电影中,我们不需要任何那样的现实。
机器的崛起
事实上,我们一直在制造越来越多的机器来抵消体力或脑力的使用,以使我们的生活更轻松。即使迁移到计算器和计算机,也不是有人不能做这些事情,而是一个人会花费太多时间,或者让自己的大脑以非常混乱的方式接受训练,或者甚至需要更多时间来适当地分解工作,让其他人以富有成效的方式帮助他们。这就是“怪人”所做的,这些怪人最终会改变世界,或者至少成为你的老板。
计算器所做的,实际上是机器学习在数据科学中所做的,这只是一个不同的抽象和业务用例。这是一种带有更多政治、更多直觉的数学,事物发展如此之快,以至于你甚至不知道数据科学是否在做它应该做的事情。也就是说,他们已经尽力了。这里的主题是,当我们称之为“人工智能”时,我们大多数人的意思是“机器驱动的计算”,和/或在数字环境中可以做出决策的位置。
在数据科学领域,我们正在构建“数据科学平台”,在人工智能领域,我们正在构建“人工智能平台”。在我的行业中,我们正在全力以赴的“游戏行业”说人工智能永远无法取代创造力!天哪,当他们意识到公平竞争有多近时,这将对我的行业造成沉重打击。Nvidia 正在接近确保这一点。和许多事情一样,他们从不同的角度,用同样的痛苦,解决着同样的问题。
事实是,如果你做决定,你可以访问数据,你理解各种实践的模式,你可以被人工智能赋予权力,或者不可避免地被它取代。它始于工厂,发生在物流(人和货物)中,“创造力”和“商业直觉”是下一个需要注意的话题。即使你试着忽略它,它现在已经在路上了。
它就在你的鼻子底下
今天,人工智能是一个主要由“计算机科学”拥有的话题,正如工程师喜欢做的那样,从数据库到人工智能,我们消费所有的东西。如果你给我们一点灵活性,我们更符合物理学家而不是实际开发者。我们都没办法。我们几乎从娘胎里就被设计成这样。但是我们中的许多人因为某种原因变得冷酷古怪,当杰出的计算机科学家开始成为哲学家时,我们变得有点太接近疯狂了。应该有一些关注,我也在走这条线(发送帮助!).
最近,我和一位在人工智能领域才华横溢、备受尊敬的头脑进行了一次交流,他在人工智能领域领导着一家价值数百万美元的公司。如果你正在读这篇文章,可能不是你,我和你们很多人谈过,你已经知道我是个话匣子。或者是你和我在努力挽回我们的关系(❤大学)。但是我问他们如何处理他们的数据架构和数据库,他们拒绝了,好像我是个疯子。平心而论,这是一个相对真实的说法。不同的文章。但我也很清楚,因为我不展示我的“学术背景”,我的对话将受制于个人观点的偏见。
这个主题之所以重要,是因为训练人工智能是关于数据消耗的“频率”和“上下文”,如使用什么信息来训练“人工智能”(或人)产生输出。不可避免的是,如果你带着自己的偏见和依赖“博士”,你会忽略你正在做的事情的背景和几十年前做的研究,几乎是字面上的意思,学术界以前也做过同样的事情。事实是,今天在许多方面实际的“人工智能”是很可能的,在许多方面,它是在 80 年代的第一次繁荣时期完成的,我们只是忘记了。学术界通过忘记旧的研究并重新包装来赚大钱。
你吃什么就是什么
如果你不能定义智能,而你有自己的观点和方法来使用机器和上下文数据构建人工智能,那么你的输出,你创造的东西,将不可避免地只是你的延伸。就像你的艺术是你的延伸,或者你的商业或文化也是一样。因此,如果你致力于训练大量的模拟数据,而忽略大脑如何工作的基础话题,这是我们几十年前就确定的,你最终会做出和你一样怪异的东西。
我们不能通过把所有的东西都塞进去来训练人,而不在真正理解人的过程中存在一些分歧。因为我们的大脑实际上是数学、模式消费机器,受制于有限的能力(认知负荷),当涉及到我们的机器时,我们将创造我们设定的东西。但这正是为什么今天的人工智能不是你所看到的人工智能的确切话题。很有可能,一个人工智能团队越“独角兽”,它做人工智能的可能性就越小。具有逻辑讽刺意味的是,独角兽并不真实。
今天的人工智能平台专注于“集中数据”或“自动化机器”,它们都将自称为人工智能或数据科学平台。他们获得的资金数额与他们认识的人、他们取得的成功以及一个团体在出售幻想时的哲学程度有关。问题是,你不能以这种方式扩展,因为要让人工智能平台实际工作,现有的组织需要愿意释放对几乎所有数据的控制。如果你这样做,这是对信任和安全的破坏,人们将失去工作,这将使现有的报告结构变得一团糟。
不信任人工智能是件好事,算是吧
今天,我们有许多才华横溢的人在探索各种主题的人工智能。叙事,商业,语言,机器人,物流。如果一个有机大脑可以确定一种模式,而人工智能这个词让他们过于兴奋,他们会因此得到所有的钱。可悲的事实是,它的特点更可能是有人目前不信任人工智能,或不想了解它,这是最适合使用它。
发生这种情况是因为他们有足够的经验和接触,他们自己的头脑受过强大的“直觉”训练。从“认知”角度来说,他们自己的大脑已经消耗了足够多的历史数据,在当前市场中看到了足够多的模式(也不喜欢社交),他们的大脑在许多方面都像机器一样有效,他们只是用创造力处理自己的过载,这让一些人更难工作。这表现在抑郁、焦虑、饮酒,或者个人为了得到认可或联系而不得不弥补的任何输出。
这些人没有意识到的是,人工智能的思考方式实际上更接近他们的思考方式。如果那些头脑可以找到理解人工智能的方法,如果一个计算机科学家可以绕过他们自己的“计算”或“人工智能”理论,一些真正令人惊讶的事情将会发生。我们在文化上还没有达到这一步,但应该很快就会实现。当谈到创造力、商业或学术研究时,我们对分离有很大的争议。我们实际上都有相似的目标,只是我们真的不擅长用各自的语言来表达。
AI 代表所有的东西
人工智能在实践中实际上很简单,但我们今天采取的方法是由于“社会傲慢”。很难被挑战,交流也很敏感。在实践中,在这个帖子上链接参考文献、文章和数学会引发一系列的辩论和对话,以反驳几十年来重新创造和孤立的理论。或者告诉某个刚刚以 10 亿美元的估值筹集了资金的人,他们并不卑鄙,他们只是用不同的语言重新包装了相同的“机器”,并大声说出它是如何不起作用的,他们如何出售它也不是结交朋友的最佳方式。
但问题是。如果你挖得足够深,绕过你对使用什么语言、什么平台、如何训练数据、什么是数据科学等等的偏见,这是一件相当容易弄清楚的事情。真正困难的是,要真正从头开始建立一家人工智能公司,需要真正的“文化合作”愿望。这也是为什么我强烈认为今天的大公司,独角兽,上市公司,投资集团等不太可能成为破解人工智能的公司,至少不会以他们销售人工智能的方式。
主要是因为我们几年前就解决了这个问题,“创新”的本质就是当我们采用一些旧的想法,并想出如何绕过文化障碍来创造一些新的东西,而这些东西实际上比我们意识到的要古老。当从事神经网络工作的人兴奋地意识到它就像大脑,然后发表一篇我知道十年前看过的论文时,我仍然会笑。或者,当我们看到一个领域中的算法存在于另一个领域中时,有人称之为“机器学习”,并且有许多击掌者忘记了首先做这件事的书呆子。
有趣的事实是,学术界比今天承认的更“兄弟文化”。你心目中的书呆子可能偏离了轨道。谢谢,流行文化!
天网大战贾维斯
我认为我们没有给予人们足够的信任,我们解决问题和让社会控制事情的能力在数学上是不可避免的。无论政府监管有多严,产品有多不平衡,或者思想有多有启发性,社会智慧总是占上风。有时“坏”事情的发生会让更好的事情发生,失败的力量也会改变。
我现在可以告诉你的是,在接触了许多“人工智能”、“数据科学”和“数据”公司之后,他们自己的领导目标将不可避免地导致一些反映他们是谁以及他们周围是谁的东西。如果你有一个推销炒作的首席执行官,投资者为炒作提供资金,或者一个对情绪做出反应的公共市场,他们将保持自己动机的平衡,这将系统性地影响他们下面的每个人。
事实是,为了理解人工智能,你需要从事实上、数学上、科学上和文化上理解人。如果你今天忙于控制人工智能,你很可能不会为明天创造人工智能。因为最终,社会需要贾维斯,即使他们不知道,他们的行动将系统地确保天网不会发生。如果你是一个害怕世界末日的聪明人,那么你对你所服务的人不够了解。你应该多陪陪他们。
除非我们已经在母体里了。对黑客好点。
为什么人工智能必须是道德的——以及我们如何做到这一点
原文:https://towardsdatascience.com/why-ai-must-be-ethical-and-how-we-make-it-so-b52cdb1dd15f?source=collection_archive---------21-----------------------
当人工智能决定谁是值得的,谁是对的,谁是罪犯时,你只能希望它做出正确的决定。
现在是 2021 年。外面正下着瓢泼大雨。你在喝下午茶,同时在笔记本电脑上处理下一个项目。一个电话打断了你的工作流程。我是《微妙》的丹妮尔。上周五你去参加了一个令你兴奋的工作面试。满怀期待,你接了电话。丹妮尔说,她不得不遗憾地告诉你,他们已经和其他申请人一起走了——这是你没有得到这份工作的一种委婉说法。“为什么?”,你问,希望至少能得到建设性的反馈,让你在下一次面试中做得更好。“我们的系统确定你不是这个职位的合适人选”,Danielle 解释道。“为什么不呢?”,你问。“我真的不知道”,丹妮尔回答。微妙不太清楚他们的人工智能系统如何决定哪些候选人被认为是职位的好选择。他们的人工智能分析简历和测试,比较经验,在搜索引擎上对候选人进行彻底的自动搜索——简而言之,它检查了数十万个数据点。微妙对人工智能看什么有一个粗略的想法,但不能说人工智能更重视什么,或者它如何决定哪种体验比任何其他体验更好。你感谢丹妮尔抽出时间,然后挂断电话。你的思维开始加速——为什么他们的人工智能认为你不合适?你停顿一下。当然了。这不是什么新鲜事。你生命中的每一天都会经历这种情况。是因为你的种族。又是一年,又是一种创新的辨别方式,你心里想。你又喝了一口茶,把注意力放回到你的笔记本电脑上。
现在是 2023 年。你刚刚下班回家。外面很冷,今年冬天来得很早。你收到了一些邮件,大部分是广告,但有一个信封很突出。是亚马逊 Go 的。你打开它,发现里面有一张金额适中的发票。奇怪的是,你心里想,你什么也没买,却整整齐齐地列了十五样东西。没错,你在 Amazendor 有一个帐户,但是你已经有半年多没去过他们的 Go 商店了。Amazendor 的 Go 连锁商店使用面部识别——顾客只需走进去,挑选他们想买的任何东西,出去时他们只需看一眼相机,他们的钱就会自动从他们的银行账户中取出。或者,如果用户愿意,他们可以通过发票支付。相机一定是把别人误认为你了。烦人,但这只是一笔不多的钱,你不想浪费时间争论,所以你付了帐,继续你的夜晚。
现在是 2024 年。你一大早醒来,听到一声砰砰的敲门声。“是警察,开门!”,一个声音从另一边喊道。你发现自己进入的困倦状态是短暂的,因为你很快进入了恐惧和不确定的状态。你或你认识的人发生了什么事吗?或者你的一个邻居出了事,警察想知道你是否看到了什么?嗯,当你走到门口打开门时,你不必考虑太久。三个警察进来了。“乔纳森?”。你点头。你被捕了。为什么?一个人工智能辅助安全系统看到你偷了一辆车,在实际看到你的脸后,警察同意你与安全摄像头的镜头相匹配。人工智能说有 93%的把握是你。你被带到警察局。你试图通过解释你不在那里来证明你的清白,但一个人工智能测谎仪认为你在撒谎。幸运的是,你能够证明在抢劫发生时你在其他地方,使用你的谷歌地图历史,以及一张借记卡购买,发生在离盗窃现场太远的地方,以至于你无法偷到车。你可以回家了。那天晚上你睡不着。你想知道如果你无法证明自己的清白会发生什么。
Photo by John Noonan.
这就是为什么我们需要有道德的人工智能。
以上短篇故事中描述的所有技术都已经存在。它们在 2019 年的采用率相当有限,但在未来几年将会增加。
错误可以、已经并将继续发生。
- 面部识别。去年,一个主要的人工智能面部识别工具错误地将 28 名美国国会议员识别为因犯罪而被捕的人,另一个工具同样错误地将一名中国亿万富翁识别为乱穿马路者。虽然面部识别将随着时间的推移而改进,并且通常是一种相当可靠的工具,但它仍然会出错,同样,人类在解释面部识别工具产生的结果时也会出错。
- 偏见。如果训练不当,人工智能会产生强烈的偏见。2018 年,亚马逊放弃了一个人工智能招聘工具,因为它开始偏爱一种性别而不是另一种性别。这种偏差可能发生在任何变量上,并且比你想象的更难避免。例如,不幸的是,避免性别偏见并不像告诉人工智能不要在乎性别那么简单。其原因是不同性别可能以不同的方式写作和说话,而人工智能可以学习更喜欢一种风格。这也适用于除性别之外的许多其他变量,如种族、社会地位、经济财富,或者坦率地说,绝对是任何可以想象的数据变量。由于人工智能是在历史数据上训练的,它也将学习根据我们非常种族主义和性别歧视的人类历史上存在的理想做出决定,这已经给被送进监狱的人带来了问题。
- 过度依赖。人工智能也会犯错。严重的错误。 AI 已经因过度依赖而杀人。当像亚马逊这样的公司积极试图创建一个监视社会,将恐惧作为一种产品出售时,你最好相信我希望人工智能的用户知道,尽管训练有素的人工智能往往比人类更擅长预测,但它也可能犯错误。谢天谢地,佛罗里达朱庇特医院的医生明白这一点,当时 IBM Watson 推荐了可能有致命后果的治疗方法。
人工智能可以错误地识别、错误地分析或曲解任何人和任何事。
不要误会我的意思,我坚信人工智能是一项非常有用的技术,它将带来巨大的好处。它可以使我们的生活方便、快捷、简单。它可以发现疾病的治疗方法,它可以使我们富有创造力,它可以使我们的生活更加有趣。但必须加以规范。
AI 必须有一个可解释的日志。
如果不能解释,就不能相信。AI 必须是透明的。人类必须总是能够知道为什么人工智能会做出特定的决定。
人类必须负责。
我们的未来无疑将由人机协作组成。计算机和智能手机等机器已经大大增强了人类的能力,人工智能只会在这方面有所增加。但是人类必须一直控制人工智能。
必须减轻偏见。
一个人工智能系统总是会偏向某一方,但它可以被训练得不那么偏向某一方。人工智能在做出判断时必须公平。输入给人工智能的数据必须是多样的。
AI 必须治理。
毫无疑问:人类总是要对任何技术做出的任何行为负责。唯一的问题是谁。责任必须明确。
人类不能过度依赖 AI。
一般来说,在做出预测性的、基于数据的决策时,机器比人类更好,人工智能应该成为任何企业战略的一部分。但这并不意味着人们应该过度依赖机器,尤其是在人工智能与人类打交道的时候。
Photo by Laurentiu Robu.
AI 一定是伦理的。
不得不说,AI 在实现得当的情况下是很奇妙的。还必须说,AI 不受监管的时候是很可怕的。
人工智能的开拓者们正致力于建立人工智能伦理——取得了不同程度的成功。一些早期的尝试已经失败,比如谷歌今年早些时候试图建立一个人工智能道德委员会,但仅仅一周之后就被解散了。相反,我认为建立道德人工智能的未来在于合作。例如,欧洲委员会邀请欧洲人讨论伦理人工智能。在我看来,邀请广泛的个人和实体建立道德准则是处理人工智能道德的最佳方法。希望在不久的将来,此类举措将开始以更大的规模出现。
为了确保人工智能变得——并保持——道德,我们必须通过广泛、包容性的讨论实现多元化的道德委员会。
因为很快有一天,AI 会决定你是不是罪犯。
你所能做的就是希望人工智能做出正确的决定。
像脸书和达能这样的全球品牌为什么以及如何投资市场研究
原文:https://towardsdatascience.com/why-and-how-global-brands-like-facebook-and-danone-invest-in-market-research-d856559902af?source=collection_archive---------26-----------------------
上周,我收到了以下来自脸书的电子邮件:
“你好,乔伊,
脸书正在向在脸书、Instagram 和其他平台上制作在线视频的人寻求坦诚的反馈。请在这里做一个简单的调查来帮助我们…………
谢谢,
脸书研究小组"
这让我想到:如果世界上发展最快的科技巨头之一脸书有一个专门的研究团队,这一定意味着积极的市场研究在全球商业中有真正的一席之地?
但是为什么呢?他们不是已经收集了大量的数据吗(多到让他们陷入麻烦)?还有,难道没有比电子邮件更好的方法来收集数据吗?
但是脸书并不是唯一的例子。谷歌在研究上投入巨资,Hubspot 也是如此。像乐高和麦当劳这样的消费巨头严重依赖市场调查来改进他们的产品和营销策略。
在本帖中,我们将探讨全球公司为什么以及如何继续投资于市场研究,他们采取的不同方法,以及每种方法的利弊。
为什么企业投资市场研究?
对市场的深刻理解现在比以往任何时候都更加重要,原因有二:
- 竞争激烈。你的竞争对手通常只需点击一下鼠标。如果客户对你的产品不满意,他们会毫不犹豫地转向其他产品。站在市场的顶端意味着了解客户的想法。
- 顾客有很高的期望。因为有如此多的选择,客户期望高质量的服务和产品。品牌需要通过更好地了解顾客想要什么来跟上这些期望。
具体来说,传统的市场研究允许企业跟踪:
- 随着时间的推移对其品牌的认知。
- 影响他们产品的趋势和细分市场。
- 他们的广告活动和社交媒体营销的影响。
- 他们客户群体的偏好。
- 与他们每个品牌相关的独特价值。
基本上,品牌可以利用市场研究来指导他们的营销和产品策略——获得新客户,同时与现有客户建立更好的关系。
正如留住客户与获得新客户一样重要,企业需要跟上不断变化的客户期望和购买行为,以保持领先地位。
或者,简单地说避免像百事可乐那样的公关失误:
这有助于解释为什么像脸书这样的公司近年来稳步增加营销支出。
看一看这些数字:
Source: Statista
这笔支出包括对经典市场研究方法的持续投入。
但是当我们使用这个术语时,我们指的是什么呢?
市场研究中的常用方法
当我们谈论传统市场调查方法时,我们谈论的是:
- 焦点小组:聚集在一起讨论现有产品或为新产品的开发或推出提供反馈的人群。
- 调查:向预先确定的一组人提供问题和提示,以获得关于产品和服务的信息和见解。
- 问卷:一系列问题,旨在获取在线或面对面的客户反馈。
我们可以在脸书的用户体验研究方法中看到这些技术在起作用。在脸书,“用户体验研究经理”专注于以下五种类型的研究,以将产品从早期的想法变为准备推出的东西:
- 了解用户和客户需求的基础研究。
- 情境调查关注用户如何参与技术,包括花更多时间与真实用户在一起。
- 描述性研究允许脸书获得反馈,了解用户到底想要一个新功能做什么。
- 参与式设计,给予用户不同的设计元素,并询问用户与产品的理想交互是什么样的。
- 产品研究,脸书观察人们与特定产品的互动,以便在产品发布前做最后的调整。
Source: Techcrunch
现在我们已经讨论了基础知识,让我们来看看阻碍传统市场研究的一些因素。
经典市场研究方法的局限性
公司长期依赖传统研究来帮助识别市场机会,并确定他们的产品如何被看待。
这些可靠的方法有其优势,但也有主要的局限性:
- 顾客需要参与。如今,每个人的时间都很紧张,填写一份调查或问卷并不是最重要的事情。(例如,我没有回复脸书的电子邮件来参与他们的研究。)
- 调查和问卷侧重于过去的经验。只要产品有更新或变更,数据就会过时。
- 观察者的偏见会导致研究人员改变结果以反映先入为主的信念。
- 市场调查可能很耗时,尤其是在分析大量数据的时候。这可能会大幅推高研究的价格。不仅如此,过多的调查会让顾客望而却步。
- 真正的代表性可能很难达到。获得足够大的样本量是一个真正的挑战,因为愿意完成问卷或调查的客户可能有太多的时间。
- 最后,这些传统方法没有提供足够的灵活性——通过关注预先确定的问题,这些方法只和提出的问题一样好。
那么,品牌有什么选择来解决这些限制呢?
经典市场研究方法的替代方法
历史上,像可口可乐和百事可乐这样的消费巨头仅仅依靠传统的市场研究,像迪奥和欧莱雅这样的奢侈品牌也是如此。
焦点小组和调查仍然是相关和有用的。然而,品牌正在看到这些方法的局限性。
大多数品牌现在通过采取不同的市场研究方法来解决这些限制;将传统方法与人工智能和其他数据源(如社交媒体)结合起来。
例如,人工智能让问卷根据用户之前回答的内容制定“智能”问题。这避开了所提问题的静态性质,有助于品牌更深入地获取客户反馈。
社会数据研究:一种新的选择
特别是,品牌正在转向社交媒体作为数据来源。
全球有22 亿活跃的脸书用户,每天有 5 亿条推文,每天有 9500 万条 instagram 帖子,社交媒体为品牌提供了可以想象的最大的焦点群体。
这个数字只会越来越大:
Source: Statista
有了社交数据研究,品牌可以利用这一庞大的意见网络,并将其用于营销和产品开发。
达能如何使用社交数据
Linkfluence 的长期客户达能利用社交倾听来推动他们的产品和营销战略。一个很好的例子是他们利用社交倾听来发现西班牙市场的缺口。意识到对无乳糖产品的需求,达能开发并推广了 Activia 无乳糖酸奶。
但是达能不只是利用社交倾听来发现他们的客户想要什么产品;他们还利用数据为产品包装提供灵感。
例如,作为对社交媒体评论的回应,达能为其 A tu gusto 酸奶系列开发了除单杯服务之外的四包选项。
“社交媒体上的反馈有助于我们了解人们在说什么、感觉什么以及对我们的要求,”达能营销 CRM 和数字经理 Isabel María Gonzalez 说。“它赋予我们反应的能力。”
达能利用推特、快照、Insta-stories 和其他在线数据获得即时反馈,而不是等待数月才能从传统研究方法中获得消费者洞察。
社会数据研究如何填补传统市场研究的空白
社交数据研究有几种方法来解决传统市场研究的局限性:
实时洞察
社交倾听工具以避免偏见的方式实时收集品牌信息。通过实时市场研究,品牌可以分析数以千计的产品参考,同时仍能捕捉到个人对话和意想不到的观点。
大规模、高质量的研究
随着数十亿社交媒体用户每天在推特上发布他们的想法和感受,品牌可以大规模地获取客户见解,同时仍然可以提出严格定义的问题。
捕捉更广泛的背景
社会数据研究让你分析大量的在线讨论。但是你也可以将这种分析与对现实世界事件的理解联系起来。
例如,某个品牌可能会在某个事件之后的对话中出现峰值,或者某个名人或公众人物的提及。
正如麦肯锡在 2014 年指出的那样,社交倾听让公司和品牌能够识别社交媒体数据中的有价值的信号:“随着信息在数字经济中轰鸣,很容易错过往往隐藏在噪音中的有价值的‘微弱信号’。这些信号可以帮助公司了解客户的需求,并在竞争对手之前发现即将到来的行业和市场混乱。”
对于寻求对其在线感知进行深入细致评估的品牌和企业而言,社交倾听至关重要。当与更传统的市场研究方法相结合时,社会数据研究为品牌提供了消费者所想和期望的 360 度视角。
考虑多样化的市场研究方法
正如我们所见,市场研究给品牌带来了难以置信的洞察力。从产品到营销策略,品牌需要研究来更好地了解和服务他们的客户。
好消息是,品牌进行市场调查的选择越来越多。
当然,传统的研究方法仍然有一席之地,比如焦点小组、调查和问卷。
但随着社交媒体和人工智能技术的兴起,品牌现在可以实时收集和获取更大规模的消费者洞察。
本文原载于 Linkfluence 博客 。
关于作者
Joei Chan 是全球领先的全球品牌社交媒体情报公司 Linkfluence 的全球内容主管。
在 Twitter 或 LinkedIn 上与她联系。
为什么以及如何对机器学习进行交叉验证
原文:https://towardsdatascience.com/why-and-how-to-do-cross-validation-for-machine-learning-d5bd7e60c189?source=collection_archive---------13-----------------------
想获得灵感?快来加入我的 超级行情快讯 。😎
交叉验证是一种测试机器学习模型性能的统计技术。特别是,一个好的交叉验证方法给了我们一个模型在整个数据集中的性能的综合度量。
所有交叉验证方法都遵循相同的基本程序:
(1)将数据集分成两部分:训练和测试
(2)在训练集上训练模型
(3)在测试集上评估模型
(4)可选地,对一组不同的数据点重复步骤 1 至 3
包括步骤 4 的更彻底的交叉验证方法,因为这样的测量对于选择特定分割可能带来的偏差更稳健。选择数据的特定部分产生的偏差称为 选择偏差 。
这种方法将花费更多的时间,因为模型将被多次训练和验证。但它确实提供了更彻底的显著优势,以及有机会潜在地找到挤出最后一点准确性的分裂。
除了选择偏差,交叉验证也有助于我们避免过度拟合。通过将数据集划分为训练集和验证集,我们可以具体地检查我们的模型在训练期间看到的数据上是否表现良好。如果没有交叉验证,我们永远不会知道我们的模型是在全球范围内令人惊叹,还是仅仅在我们的保护性训练中令人惊叹!
说了这么多理论之后,让我们来看看 3 种常见的交叉验证技术。
An illustration of how overfitting works
坚持
维持交叉验证是最简单也是最常见的。我们简单地将数据分成两组:训练和测试。训练和测试数据不能有任何相同的数据点。通常,这种分割将接近 85%的数据用于训练,15%的数据用于测试。下图说明了维持交叉验证的工作方式。
使用非常简单的维持交叉验证的优点是我们只需要训练一个模型。如果它表现得足够好,我们可以继续在任何我们想要的应用程序中使用它。只要您的数据集在分布和“难度”方面相对一致,这就非常合适
当数据集不完全均匀时,会出现维持交叉验证的危险和缺点。在分割我们的数据集时,我们可能会以这样一种方式结束分割,即我们的训练集与测试集非常不同,或更容易,或更难。
因此,我们对维持执行的单一测试不够全面,不足以正确评估我们的模型。我们最终会遇到一些不好的事情,比如过度拟合或者不准确地测量我们的模型预测的真实世界的性能。
如何在 Scikit-Learn 中实现维持交叉验证:sklearn.model_selection.train_test_split
k 倍交叉验证
使用 K-Fold 交叉验证将帮助您克服使用 Holdout 带来的许多缺点。
使用 K-Fold,我们将把我们的数据集随机分成 K 个大小相等的部分。然后我们将训练我们的模型 K 次。对于每次训练运行,我们从我们的 K 部分中选择一个分区作为测试集,并使用其余的进行训练。
例如,如果我们在下面的示例中设置 K = 10,那么我们将训练 10 个模型。每个模型都将在一个独特的训练集上接受训练——蓝色显示的部分。每个模型也将在一个独特的测试装置上进行测试——绿色部分。
为了获得最终的准确性度量,我们对每个模型在各自的测试集上评估的结果进行平均。
K-Fold 交叉验证带来的最大优势是它不容易产生选择偏差,因为训练和测试是在几个不同的部分上进行的。特别是,如果我们增加 K 的值,我们甚至可以更加确定我们模型的稳健性,因为我们已经在如此多的不同子数据集上进行了训练和测试。
这种方法唯一可能的缺点是,当我们通过增加 K 来获得鲁棒性时,我们还必须训练更多的模型——这是一个潜在的冗长且昂贵的过程。
如何在 Scikit-Learn 中实现 K-Fold 交叉验证:sklearn.model_selection.KFold
重复随机子采样
重复随机子抽样也许是交叉验证方法中最稳健的。
类似于 K-Fold,我们为 K 设置一个值,它表示我们将训练我们的模型的次数。然而,在这种情况下,K 将而不是表示大小相等的分区的数量。
相反,在每次训练迭代中,我们随机选择点作为测试集。我们选择的点数将是我们为测试集设置的某个百分比。例如,如果我们选择 15%,那么在每次训练迭代中,我们将在数据集中随机选择 15%的点来进行训练。
其余的程序以与 K-Fold 相同的方式继续。在训练集上进行训练,在其独特的测试集上测试每个模型,最后平均结果以获得最终精度。
这种方法相对于 K-Fold 的明显优势是训练-测试分割的比例不依赖于迭代的次数。如果我们愿意,我们甚至可以在每次迭代中为测试集设置不同的百分比。随机化也可能对选择偏差更具鲁棒性。
这种方法的缺点是,有些点可能永远不会被选入测试子集中,同时,有些点可能会被选择多次。这是随机化的直接结果。然而,使用 K-Fold 可以保证所有点在某个时候都将被测试。
喜欢学习?
在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!
为什么以及如何在 Python 中使用与熊猫合并
原文:https://towardsdatascience.com/why-and-how-to-use-merge-with-pandas-in-python-548600f7e738?source=collection_archive---------1-----------------------
无论您是数据科学家、数据分析师、业务分析师还是数据工程师,都没有关系。
如果你一直在工作中使用 Python—特别是数据预处理/清理——你可能在某些方面使用了 Pandas。
为什么要“合并”?
您可能遇到过多个数据表,这些数据表包含您希望在一个地方看到的各种信息,在本例中是一个数据帧。
这就是 merge 的威力所在,它以一种良好有序的方式高效地将多个数据表组合成一个数据帧,以供进一步分析。
“合并”两个数据集是将两个数据集合并成一个数据集,并根据公共属性或列对齐每个数据集的行的过程。
“合并”和“加入”这两个词在熊猫和其他语言中可以相对互换使用。尽管熊猫有“合并”和“加入”的功能,但本质上它们做的是相似的事情。
也就是说,在本文中,我们将只关注 Pandas 中使用的“合并”功能。
“合并”到底是什么?
(Source)
看了一下合并函数(熊猫版= 0.24.1)的文档,乍一看好像是外国的,不太容易被读者(至少对我来说)理解。
在从我的一些朋友和网上资源中寻求更多的信息和解释后,我开始理解这个概念——合并实际上可以用一种更简单的方式来解释,并开始欣赏熊猫合并功能的美丽。
为了理解pd.merge
,让我们从下面一行简单的代码开始。这行代码的作用是根据两个数据帧的值将两个数据帧——left_df
和right_df
——合并成一个,两个数据帧中都有相同的column_name
。使用how='inner'
,它将执行内部合并,只合并column_name
中匹配的值。
pd.merge(left_df, right_df, on='column_name', how='inner'
由于方法how
有不同的参数(默认情况下 Pandas 使用inner
,我们将研究不同的参数( left,right,inner,outer )及其用例。
之后,我们将解释方法on
,并进一步阐述如果两个数据帧有不同的列名,如何合并它们(提示:将不使用方法on
)。
下面的解释主要来自 Shane Lynn 的优秀教程,使用的数据(3 个 CSV 文件)来自 KillBiller 应用程序。
你可以在这里得到数据。
我们开始吧!
快速浏览数据
让我们首先了解一下每个数据帧上的以下解释所使用的数据集。
- 用户使用 —包含用户每月移动使用统计的第一个数据集
- 用户设备 —第二个数据集,包含个人“使用”系统的详细信息,以及日期和设备信息
- android_device —第三个数据集,包含设备和制造商数据,列出了所有 android 设备及其型号代码
user_usage
user_device
android_device
这里需要注意的是:
- 列名
use_id
由用户使用和用户设备共享 - 用户设备的
device
列和安卓设备数据帧的Model
列包含通用代码
1.左侧合并
保留左侧数据框中的每一行。如果右侧数据框中缺少“on”变量的值,则在结果中添加空值/ NaN 值。
LEFT Merge
通过上面的操作, left_merge 与 user_usage 具有相同的大小,因为我们使用方法how
的left
参数来保留左侧数据帧中的所有行。
LEFT Merge (Top 5 rows)
LEFT Merge (Last 5 rows)
正如所料,列use_id
已经被合并在一起。我们还看到,右侧数据帧中的空值被 NaN 替代— 用户设备。
2.右合并
要执行正确的合并,我们只需简单地将how
的参数从left
更改为right
即可重复上面的代码。
RIGHT Merge
通过上面的操作, right_merge 与 user_device 具有相同的大小,因为我们使用方法how
的right
参数保留了右数据帧中的所有行。
RIGHT Merge (Top 5 rows)
RIGHT Merge (Last 5 rows)
这一次,我们看到左侧数据帧中的空值被 NaN 替代— user_usage 。
3.内部合并
Pandas 默认使用“内部”合并。这仅保留合并数据的左右数据帧中的公共值。
在我们的例子中,只有包含在 user_usage 和 user_device 之间共有的use_id
值的行保留在合并数据 inner_merge 中。
INNER Merge
虽然 Pandas 默认使用“内部”合并,但是上面指定的参数inner
是显式的。
通过以上操作,合并的数据— inner_merge 与原始的左右数据帧(user _ usage&user _ device)相比具有不同的大小,因为只有公共值被合并。
4.外部合并
最后,我们有“外部”合并。
当行中没有匹配的值时,“外部”合并用 NaN 组合左右数据帧的所有行。
OUTER Merge
注意,方法indicator
被设置为True
,以指示每一行在合并数据 outer_merge 中的来源。
Specified rows in outer_merge
为了进一步说明“外部”合并是如何工作的,我们特意指定了 outer_merge 的某些行,以了解这些行来自哪里。
对于第行和第 2 行,这些行来自两个数据帧,因为它们具有相同的要合并的use_id
值。
对于第 3 行和第 4 行,这些行来自左侧数据帧,因为右侧数据帧没有use_id
的公共值。
对于第 5 和第 6 行,这些行来自右侧数据帧,因为左侧数据帧没有use_id
的公共值。
💡合并具有不同列名的数据帧
我们已经讨论了如何使用不同的方式合并数据——左合并、右合并、内合并和外合并。
但是方法on
只适用于左边和右边数据帧中相同的列名。
因此,我们用left_on
和right_on
来代替方法on
,如下图所示。
LEFT Merge for dataframes with different columns names
在这里,我们将用户设备与安卓设备合并,因为它们分别在列device
和Model
中包含相同的代码。
LEFT Merge for dataframes with different column names
最后的想法
(Source)
感谢您的阅读。
合并不同数据表中的数据是我们作为数据专业人员必须完成的最常见的任务之一。
希望这篇分享在某些方面对你有益。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
Apache Spark 为什么快,如何让它跑得更快
原文:https://towardsdatascience.com/why-apache-spark-is-fast-and-how-to-make-it-run-faster-9d31bf3eae04?source=collection_archive---------3-----------------------
Apache Spark logo
Spark 做事很快。自 2010 年首次推出以来,这一直是该框架的主要卖点。
为 Map-Reduce 提供基于内存的替代方案极大地推动了大数据生态系统的发展,在过去几年中,这是公司采用大数据系统的主要原因之一。
凭借其广泛的用例、易用性和创纪录的能力,Spark 迅速成为每个人在大数据架构中处理数据的首选框架。
第一部分:火花 ABC
Spark 的关键组件之一是其 SparkSQL 模块,该模块提供了将批量 Spark 作业编写为类似 SQL 的查询的可能性。为此,Spark 在幕后依靠一种复杂的机制来通过执行引擎运行这些查询。这种机制的核心是 Catalyst: Spark 的查询优化器,它通过生成作业的物理执行计划来完成大量繁重的工作。
尽管这一过程的每一步都经过了细致的改进,以优化工作的各个方面。为了让你的 Spark 工作运行得更快,你仍然有很多事情可以做。但是在深入讨论之前,让我们更深入地了解一下 Catalyst 是如何工作的。
首先,让我们从基础开始
Spark 提供了多种方式与其 SparkSQL 接口进行交互,主要的 API 是 DataSet 和 DataFrame。这些高级 API 建立在面向对象的 RDD API 之上。他们保留了它的主要特征,同时增加了一些关键特性,比如模式的使用。(详细对比请参考在 Databricks 博客上的这篇文章)。
要使用的 API 的选择主要取决于您正在使用的语言。DataSet 仅在 Scala / Java 中可用,并且自 Spark 2.0 发布以来取代了这些语言的 DataFrame。每一个都提供一定的额外津贴和优势。好消息是,Spark 使用相同的执行引擎来运行您的计算,因此您可以轻松地从一个 API 切换到另一个 API,而不用担心执行级会发生什么。
这意味着,无论您使用哪种 API,当您提交作业时,它都会经过一个统一的优化过程。
火花如何看待世界
您可以在 Spark 应用程序中执行的操作分为两种类型:
- 转换:当应用于 RDD 时,这些操作返回对通过转换创建的新 RDD 的引用。一些最常用的转换是
filter
和map
。(这里是可用转换的完整列表) - 动作:当应用于 RDD 时,这些操作返回一个非 RDD 值。一个很好的例子是
count
动作,它将一个 RDD 中的元素数返回给 Spark 驱动程序,或者是collect
,它将一个 RDD 的内容发送给驱动程序。(请参考此链接了解可应用于 rdd 的完整操作列表)。
数据帧和数据集操作被分为相同的类别,因为这些 API 是基于 RDD 机制构建的。
下一个要区分的是以下两种类型的转换:
- 窄转换:当这些转换应用于 RDD 时,分区之间没有数据移动。该变换应用于 RDD 的每个分区的数据,并生成具有相同分区数量的新 RDD,如下图所示。例如,
filter
是一个狭义的转换,因为过滤器被应用于每个分区的数据,并且结果数据代表新创建的 RDD 中的一个分区。
A narrow transformation (Source: Databricks)
- 大范围转换:这些转换需要在分区之间移动数据,也就是所谓的洗牌。数据在网络间移动,新创建的 RDD 的分区基于多个输入分区的数据,如下所示。一个很好的例子就是
sortBy
操作,在这个操作中,来自所有输入分区的数据都是基于某个列进行排序的,这个列是一个生成新分区的 RDD 的过程。
A wide transformation (Source: Databricks)
因此,当您向 Spark 提交作业时,您提交的基本上是一组动作和转换,Catalyst 会在生成理想的物理计划之前将它们转化为作业的逻辑计划。
第二部分:火花魔法
现在我们已经知道了 Spark 如何看待我们提交给它的作业,让我们来看看将动作和转换列表转化为作业的物理执行计划的机制。
火花是一个懒惰的魔术师
首先,使用 Spark 时需要记住的一个重要概念是,它依赖于懒惰评估。这意味着当你提交一个作业时,Spark 只会在必要的时候施展魔法——也就是说,当它收到一个动作时(比如当司机要求一些数据或者当它需要将数据存储到 HDFS 中时)。
Spark 不是一收到转换就一个接一个地运行它们,而是将这些转换存储在 DAG(有向无环图)中,并且一收到动作,它就运行整个 DAG 并交付所请求的输出。这使它能够根据作业的 DAG 优化其执行计划,而不是按顺序运行转换。
这一切是如何发生的
Spark 依靠 Catalyst(它的优化器)来执行必要的优化,以生成最有效的执行计划。Catalyst 的核心包括一个通用库,专门用于表示树并应用规则来操作它们。它利用了 Scala 中的函数式编程结构,并提供了特定于关系查询处理的库。
Catalyst 的主要数据类型是由节点对象组成的树,它应用一组规则来优化它。这些优化通过四个不同的阶段来执行,如下图所示:
Catalyst’s optimization phases (source: Databricks)
逻辑/物理计划
一开始可能不太清楚的一个区别是术语“逻辑规划”和“物理规划”的用法。简而言之,逻辑计划由描述需要做什么的树组成,没有暗示如何做,而物理计划准确地描述了树中的每个节点将做什么。
例如,一个逻辑计划简单地表明有一个连接操作需要完成,而物理计划为这个特定的操作确定连接类型(例如 ShuffleHashJoin)。
现在让我们通过这四个步骤,更深入地研究 Catalyst 的逻辑。
第一步:分析
Catalyst 优化管道的起点是一组未解析的属性引用或关系。无论您使用的是 SQL 还是 data frame/Dataset API,SparkSQL 一开始都不知道您的数据类型,甚至不知道您所引用的列是否存在(这就是我们所说的未解析)。如果您提交一个select
查询,SparkSQL 将首先使用 Catalyst 来确定您传递的每个列的类型,以及您使用的列是否实际存在。为此,它主要依靠 Catalyst 的树和规则机制。
它首先为未解决的逻辑计划创建一个树,然后开始对它应用规则,直到它解决了所有的属性引用和关系。在整个过程中,Catalyst 依赖于一个 Catalog 对象来跟踪所有数据源中的表。
第二步:逻辑优化
在这个阶段,Catalyst 得到了一些帮助。随着 2017 年 Spark 2.2 的发布,引入了基于成本的优化器框架。与基于规则的优化相反,基于成本的优化器使用统计数据和基数来寻找最有效的执行计划,而不是简单地应用一组规则。
分析步骤的输出是一个逻辑计划,然后在第二步中经过一系列基于规则和基于成本的优化。Catalyst 将所有优化规则应用于逻辑计划,并与基于成本的优化器合作,将优化的逻辑计划交付给下一步。
第三步:物理规划
就像上一步一样,SparkSQL 使用 Catalyst 和基于成本的优化器进行物理规划。它基于优化的逻辑计划生成多个物理计划,然后利用一组物理规则和统计数据来提供最有效的物理计划。
步骤 4:代码生成
最后,Catalyst 使用 quasi quotes(Scala 提供的一个特殊特性)来生成 Java 字节码,以便在每台机器上运行。Catalyst 通过将作业树转换为抽象语法树(AST)来使用这一特性,然后 Scala 对抽象语法树进行评估,然后编译并运行生成的代码。
综上
Spark SQL 依靠一个复杂的管道来优化它需要执行的作业,它在这个过程的所有步骤中都使用 Catalyst,它的优化器。这种优化机制是 Spark 的天文性能和有效性的主要原因之一。
第三部分:让 Spark 更上一层楼
现在我们已经检查了 Spark 复杂的优化过程,我们很清楚 Spark 依靠精心制作的机制来实现其令人难以置信的速度。但是认为不管你怎么做,火花都会给你带来最佳结果是错误的。
这种假设很容易做出,尤其是在从另一种数据处理工具迁移时。与您一直使用的工具相比,处理时间缩短了 50%,这可能会让您认为 Spark 正在全速运行,并且您无法进一步减少执行时间。问题是,你可以。
Spark SQL 和它的优化器 Catalyst,通过我们上面讨论的过程,可以自己创造奇迹,但是通过一些扭曲和技术,您可以将 Spark 带到下一个级别。因此,让我们来讨论如何从您的角度优化 Spark 作业
总是看一下引擎盖下面
使用 Spark 时要记住的第一件事是,执行时间本身并没有太大的意义。要评估作业的性能,了解它运行时发生了什么很重要。在开发和测试阶段,您需要经常使用explain
函数来查看您希望分析的语句生成的物理计划,为了进行深入分析,您可以添加extended
标志来查看 Spark SQL 选择的不同计划(从解析的逻辑计划到物理计划)。这是检测潜在问题和不必要阶段的好方法,甚至不需要实际执行作业。
知道何时使用缓存
在处理大型数据集和复杂作业时,缓存非常重要。它允许您保存您计划在后续阶段使用的数据集,以便 Spark 不会从头开始再次创建它们。这种优势有时会将开发人员推向“过度缓存”,使缓存的数据集成为一种负担,降低了您的工作速度,而不是优化它。要决定您需要缓存哪些数据集,您必须准备好整个作业,然后通过测试尝试找出哪些数据集实际上值得缓存,以及在什么情况下您可以取消它们的持久化,以释放缓存时它们在内存中占用的空间。高效地使用缓存可以让 Spark 以 10 倍的速度运行某些计算,这可以显著减少作业的总执行时间。
了解您的集群和数据
充分利用 Spark 的一个关键要素是根据集群对其配置进行微调。在某些情况下,依赖默认配置可能是可行的,但通常情况下,您离获得更令人印象深刻的结果还差一个参数。选择适当的执行器数量、每个执行器的内核数量以及每个执行器的内存大小都是可能极大地影响您的作业性能的因素,因此请不要犹豫执行基准测试,看看某些参数是否可以优化。
最后,要记住的一个重要因素是,您需要知道您正在处理的数据以及从每个操作中可以得到什么。当一个阶段花费的时间太长,即使它处理的数据比其他阶段少,那么您应该检查另一个阶段发生了什么。Spark 在处理繁重的工作和运行代码方面非常出色,但是只有您能够发现与业务相关的问题,这些问题可能与您定义工作的方式有关。
如果您在开发和实现 Spark 作业时应用了所有这些规则,那么您可以期待破纪录的处理工具会给您带来令人瞠目结舌的结果。
这些建议仅仅是掌握 Apache Spark 的第一步。在接下来的文章中,我们将详细讨论它的不同模块,以便更好地理解 Spark 的工作原理。
这篇文章最初发表在 INVIVOO 的科技博客上。
要了解更多数据工程内容,您可以订阅我的双周刊时事通讯 Data Espresso,我将在其中讨论与数据工程和技术相关的各种主题:
[## 数据浓缩咖啡
数据工程更新和评论伴随您的午后咖啡。点击阅读数据咖啡,由马赫迪…
dataespresso.substack.com](https://dataespresso.substack.com/)
为什么数据工程师与数据科学家同等重要
原文:https://towardsdatascience.com/why-are-data-engineers-equally-as-important-as-data-scientists-545898929444?source=collection_archive---------17-----------------------
数据工程师重要吗?
Photo by Proxyclick Visitor Management System on Unsplash
我的读者朋友们,你们好。我希望这篇文章能让你心情愉快,因为我可能会惹恼一些人。在过去的几周里,我写了很多基于教程/指南的文章。我想稍微改变一下。本周我们不会接触任何代码。相反,我们将讨论为什么我们应该对所有的数据工程师表现出一些爱心。
Photo by Krista Mangulsone on Unsplash
我一再提到它。数据是 20 世纪公司的新燃料。如果你不根据现有数据采取行动,你就错过了。数据从业者利用数据解决业务问题,引入新技术,创新新产品。
你认为 Google Home 是如何诞生的?数据
你觉得 Youtube 是怎么知道给你推荐什么视频的?数据
数据,数据,数据。
公司能够通过查看你的网络浏览模式来预测你的年龄、性别、收入范围和许多其他属性,并据此向你推荐产品,而你甚至不会注意到这一点!数据科学家正在相互竞争,看谁的模型更好,能让他们致富。
正如数据科学家喜欢说的:
给我你所有的数据,我会让你变得富有——每一个数据科学家
然而,在所有的幕后,在所有华而不实的模特背后,隐藏着一个真正的英雄。它是一个沉默的守护者,守护着我们部署的模型、自动化系统、数据架构。提供真实燃料进行加工的人。一个完全了解数据的人。确切知道获取什么数据、在哪里、何时、如何以及为什么获取数据的人。我们称他/她为数据工程师。
个人认为数据工程师没有得到足够的认可。如今,一切都与数据科学家有关。
每个公司都需要一个。每个人都想成为其中一员。每个人都是一体的。
为什么我没看到有人吹嘘自己是数据工程师?我的工程师同事在哪里?
好吧,我在这里解释一下为什么数据工程师如此重要。我在这里解释为什么数据工程师应该昂首挺胸。没有他们,甚至没有数据来建模。为了做到这一点,让我们深入了解一下这些职业都做些什么。
数据科学家
欢迎来到 2019 年,
“数据科学家”一词被如此盲目地抛来抛去,以至于没有人真正知道数据科学家具体负责什么任务。根据我的经验,这很大程度上取决于公司的性质。
有些 DS 更面向分析。
DS 被期望在他们工作的行业中拥有某种领域/商业知识。除了提出正确的问题,他们还通过解释他们从分析中发现的可能会或可能不会为该公司带来更高(在此插入指标)的结果,为该公司提供业务解决方案、见解和应采取的步骤。他们做出惊人的可视化来帮助他们向利益相关者解释他们的发现,希望说服他们在业务中采取正确的方向。有一个巨大的分析分支要做,客户,流失率,收入,细分,分配和许多更多的,我不打算进入细节。
一些 DS 为公司建造模型。
越走越深。一些 DS 为某些类型的数据集建立机器学习模型,这些数据集很难进行分析。这些模型需要一定程度的数学和编程。举下面这个例子。
这是一个关于网站上职位发布的数据集。根据给出的数据,网站的利益相关者想知道什么样的招聘广告得到最多的广告回复。
也许是主题更长的广告?更高的薪水?
好福利?
某些工作类别?
DS 能够运行机器学习模型来回答这样的问题。这可以为管理层带来最佳决策,以增加他们优先考虑的任何指标。DS 也能够预测一个新广告的
广告回复。
一些 DS 更加面向技术。
以 Spotify 为例,你注意到他们能够向你推荐歌曲(你甚至没有意识到你喜欢这些歌曲)。另一个例子是 Google Home,它实现了一个语音识别机器人,可以回答你几乎所有的问题。像这样的技术是由机器使用人工神经网络创造的。DS 用大量数据训练这些机器,让它学会做一些事情作为回报。这个过程并不像你想的那么简单。人们需要知道如何根据某种适当的模型训练机器,优化模型,并在应用程序/网站/产品或任何你命名的东西上部署模型。
问题是,DS 并不局限于一种特定的类型。你可以是一个面向技术的 DS,但仍然为公司做分析。同样,这很大程度上取决于公司对你的要求。
对于数据科学家的官方定义,我们必须回到“科学”的定义。这是剑桥的定义:
source: Cambridge
简而言之,基本上,科学意味着关于事物如何运作的知识。
将“数据”加入其中,你将获得关于数据如何工作的知识。
在我看来,数据科学家应该了解数据的本质,它是如何工作的,以及你如何使用它来给出你需要的具体结果。数据科学家将确切地知道在给定需求的情况下对数据集执行哪种方法。数据科学家知道如何将数据处理成所需的任何形状或形式,以便可以对该形状或形式的数据进行某些处理。数据科学家应该了解数据的一切。
但是在科学领域,有像物理、生物和化学这样的专业。因此我们得到:
数据科学—工程学
数据科学—分析学
数据科学—机器学习
这样的例子不胜枚举。
然而,现在有些人自称是数据科学家,他们只懂一点 excel 知识,一些简单的 SQL 和一些可视化技能。我不会说他们这样做是错误的,但我要知道,这个术语被如此明目张胆地到处乱用,以至于如今很难找到一位真正的数据科学家。每个人对 DS 的定义都不一样,所以当你打算称自己为 DS 时,请准备好解释原因。
数据工程师
Photo by Danial RiCaRoS on Unsplash
数据工程师在科技公司尤其重要。不管你处理的是哪种媒介,数据团队通常不会干预主数据库中的数据。这是因为它对数据库来说很重,可能会导致崩溃、介质本身的延迟等问题。还有几个数据库可以存放数据。例如,如果你同时有一个网站和一个应用程序,你的数据可能不会驻留在一个地方。
当 DS 在展示他们的模型时,数据工程师正试图找出他们的数据在数据仓库中如何组织和结构化的核心基础,数据分析师/科学家从数据仓库中获得数据。数据工程师创建可扩展的高性能基础设施来满足公司的所有数据需求,无论需求来自数据科学家同事还是财务同事。他们通过编写 ETL ,或者在我的情况下,编写 ELT 管道来将来自多个来源的原始数据提取到一个数据仓库中,这样团队就可以对它们执行奇特的操作,如机器学习、可视化等。由于他们是数据仓库基础设施的所有者,数据工程师也在数据仓库本身上构建自动化、功能、实时分析解决方案。函数的一个例子是类似于 Gmail 数据管道——一个直接从你的 Gmail 收件箱中提取数据的数据管道。
数据工程师通过使用不同的技术如 GCP 和 AWS 来完成上述所有任务,表明他们在这些领域的知识。他们在研究哪种技术能为他们试图实现的目标提供最佳解决方案方面发挥着重要作用。就我而言,我对使用
Apache Airflow 很有经验,因为它是我在公司提取数据的主要 ELT 工具。我还接触了谷歌云功能、谷歌应用脚本、谷歌 BQ、AWS 和其他一些技术。我也写过一篇如何从零开始操作阿帕奇气流的文章,你可以在这里阅读。
在我看来,数据的工程方面是 it 科学的一部分。就像积木一样,工程师是将碎片组装在一起的人。他们就像数据管道工,从零开始了解数据。他们能够回答以下问题:
- 当站点上发生事件时,主数据库中会发生什么?
- 为什么数据仓库中的表是这样构造的?
- 为什么我们使用 GCP 而不是 AWS?
- 为什么上报的数据总是不准确?
- 为什么我们每天提取数据,而不是每小时?
- 表格中的这一栏是什么意思?
也就是说,公司的利益相关者只关心我们是否能以他们的方式回答他们的业务问题。因此,使用数据仓库中的数据来做他/她想做的任何事情,以实现这一目标,这取决于数据科学家。许多人没有意识到,数据科学家通常会获得已经由数据工程师在内部转换的数据,这些数据可以轻松阅读、理解并输入复杂的机器学习模型,以便产生他们的研究结果。不从他们那里拿走荣誉,数据科学家必须对业务进行实验、试运行和深入研究,以知道如何处理数据。然而,工程师们已经部分完成了大量的数据工作。这里有一个例子:
这是一个关于商店导向网站中商店的数据集。
假设我们可以从数据仓库中的 Stores 表中获得这个数据集。它非常简单易懂。
商店、商店的参数以及访问量指标。
然而,数据并未记录在主数据库中。相反,在母版中记录数据的规则和方法通常对用户不友好。为了更好地解释它,我做了一个流程图:
Note: Not all columns are included
下面是在主机中发生的事情。
一旦存储注册,存储动作状态表中就会出现一行,指示新存储的注册以及该存储附带的所有参数。然而,该商店的用户可以在任何给定时间改变商店参数。例如,如果商店类别是珠宝,店主可能在一段时间后想卖其他东西,他/她于是将商店类别改为电子产品。这也被记录在商店动作状态表中,作为具有新的状态 ID 的新行。与此同时,商店活动表记录了一个新行,说明商店的活动,即“参数更改”活动。然后,存储更改表记录多行,指示被更改的列的更改。系统批准更改后,更改的新值将在存储和存储参数表中更新。然后,存储动作状态表记录一个具有新的状态 ID 的新行,表明它已经被批准。
如果我在这里失去了你,那就是重点!
这种形式的数据对于正常人来说既不可读也不容易理解。每个数据库记录数据的方式不同,这只是众多例子中的一个。如果你要回答这样的问题:
- 如果商店类别现在是“X ”,那么一天前也是“X”吗?
- 商店什么时候改变了它的商店名称?
- 五月份“柔佛”地区有多少家商店?
这种表格形式不能直接翻译。因此,数据工程师制作转换后的表格,这样每个人都可以很容易地阅读这些信息,这也是数据科学家通常得到的。他们的主要关注点之一是设计数据仓库中这些表的架构,以便所有信息都可以通过简单的 SQL 连接轻松访问。所以,请我的数据从业者同事们,明天请你们的数据工程师喝杯咖啡吧。
Photo by Tyler Nix on Unsplash
判决
你难道不喜欢一点戏剧的味道吗?你认为谁更相关?
科学家可以发现一颗新星,但他不能制造一颗。他将不得不请一位工程师为他做这件事。戈登·林赛·格莱格
让我们把事实摆出来。没有数据工程师,科学家们甚至不会有任何数据。如果没有他们,当科学家们问:“这个专栏是什么意思?”这个问题比你想象的更常被问到。你可能会反驳,到时候他们会问开发商!在这种情况下,开发人员就是数据工程师。简单地说,数据科学家是数据工程师的内部客户,他们依靠数据工程师获得可靠、有用和“好”的数据,这让他们的生活轻松 10 倍。
然而,工程师无法回答商业问题,因为他们在那个领域没有经验。数据科学家通常拥有他们所在领域的业务知识,能够提出正确的问题,建议正确的解决方案,并为特定需求找到正确的指标。他们就像首席执行官的大脑,以便他做出正确的决定。
因此,我认为角色与相辅相成。两者缺一不可。你不会希望在没有建立适当的数据管道的公司雇用一名数据科学家,希望他/她会钻研所需的核心数据工程。这完全是浪费你公司的资源、这个人的时间、能力和技能。数据工程师和科学家的技能组合对于确定组织中数据的价值至关重要。两者协调工作,互相沟通也很重要。
现在有许多种数据团队正在形成,其中一些由数据工程师和科学家组成,而另一些则纯粹由科学家组成。就我而言,我大量参与工程任务,同时也为公司进行分析。如果你不喜欢其中的一个,我建议在进入之前先问清楚你申请的职位的性质。
然而,当谈到部署机器学习模型时,我不会把所有鸡蛋都放在数据科学家的篮子里。如果你已经读到这里,你会明白工程师们完全理解所有他们可用的(和不可用的)数据。因此,我认为他们是为你的媒体实现机器学习模型的最佳候选人之一。如果你不理解你的数据,你将如何决定在你的模型中包含什么和排除什么来优化它?
你应该对什么是什么有个大概的了解。
此外,数据工程师更擅长各种各样的技术。他们习惯于在网站和应用程序上部署模型,他们理解容器的工作方式,他们理解 API 的工作方式,以及许多其他科学家没有经验的解决方案。他们在编写干净的代码、诊断和调试方面更有经验。他们可以很好地处理缺失数据、不一致的数据类型和格式、时区、模型的可伸缩性和持久性,因为他们习惯于转换和清理数据。他们有很酷的 GitHub 推/拉方法。更好的是,如果他们意识到数据集中缺少了什么,他们可以立即得到它,即使它不在数据仓库中。因此,你会看到如今数据工程师越来越多,称自己为
机器学习工程师。这些人完成了以上所有工作,还有一些。
希望看完我的文章,你更了解数据工程师。你意识到他们是让世界运转的人。所以请给他们一些爱。不要歧视,继续学习。
毕竟数据从不睡觉。
订阅我的时事通讯,保持联系。
感谢 的阅读!如果你想与我取得联系,请随时在 nickmydata@gmail.com 上联系我或我的 linkedIn 个人资料 。也可以在我的Github中查看代码。
为什么 p 值像针一样?分享它们很危险!
原文:https://towardsdatascience.com/why-are-p-values-like-needles-its-dangerous-to-share-them-b94c11be537?source=collection_archive---------8-----------------------
这是一场关于 p 值的战争…双方都是错的
Image source: istock.com/brianajackson
对于一个几乎在每个 STAT101 课堂上教授的概念,围绕 p 值的争论数量是惊人的(T2)。作为一名统计学家,我既支持 T4 的观点,也支持贝叶斯的观点,让我试着帮你避开这些噪音。我将愉快地对双方都不敬。
如果你是 p 值的新手,花点时间看看我用小狗做的简单解释或者上面的视频,让你熟悉一下。简而言之,p 值是一种决策工具,它告诉你是否应该对你的无效假设感到可笑。
反对 p 值的理由
当人们(通常是贝叶斯人)批评 p 值时,通常可以归结为两个论点之一:
- 涉及定义或公式的东西。通常包括“后验概率更好”在某处。
- 涉及对潜在滥用的焦虑。
请允许我把这些翻译成我听起来的样子:
- 我不喜欢你制定统计决策的方式。
- 懒人就是懒。
论据 1(反对)
如果你一直在做第一个论证…好吧,这会让你看起来很糟糕。那就是你忘记了统计学是改变你想法的科学,你可以根据自己的想法来制定决策,然后选择合适的工具。(此外,如果你更擅长数学而不是做决定,那就退出吧!)
选择正确的方法取决于决策者希望如何做出决定。
如果你想要一种合理的选择行动的方式,并且你在考虑如何最小化选择错误行动的风险,那么频繁主义者的方法并不是那么邪恶。如果你更喜欢考虑用数据来发展你的个人观点,那么贝叶斯方法更有意义。
选择正确的方法取决于决策者希望如何做出决策,因此这里没有放之四海而皆准的方法。这种东西有许多正确的答案……偏好和哲学立场与它息息相关。为什么有些人对把事情做好如此趾高气扬,而那些事情本来就是主观的,没有正确的答案?这让我困惑。
论据 2(反对)
论点 2(滥用的可能性)是合理的,但这不是 T2 p 值 T3 的错。事实证明,使用统计数据仔细做决定需要努力,但人们一直在寻找神奇的不费力气的魔法,这能给他们带来一个水晶球。神秘的 p 值很诱人——它的大多数用户不知道如何使用它,由此导致的电话故障已经达到了可笑的程度。我支持你。
这就是为什么我大力提倡放松。换句话说,我喜欢做出基于数据的决策,如果你不愿意付出努力,就不要把自己当回事。对那些感觉懒惰的人来说,最好的解决办法是:做描述性分析,保持谦逊。
如果你不愿意付出努力,选择描述性分析并保持谦逊。
只有当你以一种完全尊重你建立决策框架和假设的有意方式的方式严谨地进行时,统计推断才有意义。这不是一个 p 值的问题。这是一个蛇油问题:统计数据经常被当作神奇的万灵药出售,声称提供的保证如果你停下来想一想就会觉得很疯狂。没有魔法能把不确定性变成确定性……但不知何故,有许多骗子却在暗示相反的事情。
p 值的情况
你也应该怀疑任何宣称狂热热爱 p 值的人。它们只在非常特殊的情况下有用。但是当 p 值有用时,它们非常有用。
它们是以特定方式做出决策的有用工具。
很难挑战这一点。对于希望在不确定的世界中尽最大努力并以特定方式做出决策的决策者来说,p 值是完美的。不要因为你喜欢用不同的方式做决定而扫他们的兴——当轮到你做决策者时,你可以随心所欲地做。
p 值的另一种情况
如果你对分析(而不是统计)感兴趣, p 值可能是总结数据和迭代搜索的有用方法。请不要像统计学家那样解读它们。除了在这些数据中有一个模式之外,它们没有任何意义。统计学家和分析师可能会大打出手,如果他们没有意识到分析是关于数据中的内容(仅限!)而统计是关于数据之外的东西。
当你在做分析的时候,不要使用假设 T21这个词,否则你会听起来像个白痴。
对于一个分析师,一个 p 值仅仅是另一个统计量,除了之外没有任何解释“这是我以一种特定方式摇动数据集时得到的数字,当它很小时,这意味着我的数据集具有某种模式”——把它想象成一种有效可视化复杂和大型数据集的方式。当你用 analytics探索数据时,不要使用 假设 这个词,否则你会听起来像个白痴。你用事实工作:这些数据有这个*模式。句号。
To learn more about the difference between the subfields of data science, see bit.ly/quaesita_datasci.
受够了分析——没有战斗(就像没有超越的规则一样,“不要做出超越数据的结论!”)。回到的统计数据,这里的争论很激烈!
置信区间代替 p 值的情况
你走错房间了,伙计。回到分析,置信区间是一种更有效的可视化和汇总数据的方式。在统计决策中,没人在乎。为什么?使用置信区间和 p 值得到的决策是相同的。如果你在做真正的统计推断,你应该对任何非美学的理由漠不关心。
(的确,这对未来的数据探索者——分析师——是一种恩惠,如果你用置信区间报告你的结果,但这与你决策的质量无关。)
回归基础
让我们回顾一下 p 值具有统计学意义的情况。首先,你围绕默认行为的概念建立你的决策,你给数据一个说服你放弃它的机会。你没有试图形成数学上可描述的观点(用贝叶斯理论)。你愿意按照这篇博文中的逻辑做出决定。如果不是,p 值不适合你。没什么好争的。对于某些工作来说,它们是很好的工具,但是如果那不是你需要做的工作,那就去找一个更好的工具。从什么时候开始,我们希望一种工具适合所有工作?!
既然你已经决定用经典方法测试假设,让我们看看你如何计算 p 值。
创造零世界
一旦你正式陈述了你的零假设(在你完成了这个之后),大部分工作将是可视化零假设世界,并弄清楚那里的事情是如何运作的,这样我们就可以制作一个玩具模型。
这就是你可能还记得的统计课上那些晦涩难懂的涂鸦的要点——它们归结为建立一个宇宙的数学模型,其规则由零假设支配。你用方程式(或通过模拟)来构建宇宙!)这样下一步就可以考察了。
数学就是建立一个零假设宇宙的玩具模型。这就是获得 p 值的方法。
The math is all about making and examining toy universes (how cool is that, fellow megalomaniacs!? So cool!) to see how likely they are to spawn datasets like yours. If your toy model of the null hypothesis universe is unlikely to give you data like the data you got from the real world, your p-value will be low and you’ll end up rejecting the null hypothesis… change your mind!
假设,假设,假设
自然,你必须做出一些简化的假设,否则你会很快不知所措。没有人有时间去创造一个像我们实际生活的宇宙那样丰富和复杂的世界,这就是为什么统计不会给你一个大写的真相,而是一个在不确定性下做出合理决定的方法……受制于你愿意走的一些捷径。(这也是为什么统计学究看起来那么傻。)
在 STAT101 中,那些假设往往会被灌输给你因为“数据是正态分布的……等等等等。“在现实生活中,你必须自己提出假设,这可能会让人感到害怕,因为突然间没有正确的答案了。
在现实生活中,没有正确的答案。我们能做的最好的事情就是以一种感觉合理的方式做决定。
如果 p 值是为别人计算的,对你可能没用。它应该只在选择做出相同的简化假设并以相同的方式制定决策的人之间分享。
使用别人的 p 值是很危险的…它们就像针一样:如果你要使用它们,就去用你自己的!
统计决策总是主观的,无论是贝叶斯还是频率主义,因为你总是要做出简化的假设。这些结论只有在你接受这些假设的情况下才有效,这就是为什么如果有人没有看到你的笑点所基于的假设,就期望他们同意你的笑点是很奇怪的。我们为什么要这么做?不知道。我不知道。如果我不愿意考虑我想如何做决定,以及陈述的假设是否适合我(在我看到数据或 p 值之前),那么我在 p 值中看到的就是一个分析师看到的:在一些设置被扭曲后,你看到了一个模式。真可爱。当我看云的时候,有时我也会看到动物。如果我想认真对待它,我会在其他数据中跟进这个“洞见”。否则,我会把它当作模糊的灵感…在这种质量下,谁会在乎它有多好呢?
这个证据让你吃惊吗?
既然你已经想象了描述你的零假设的世界,你将会问你得到的证据——你的数据——在那个世界里是否令人惊讶。p 值就是你的零世界吐出的数据至少和你的一样糟糕的概率。当它很低时,这意味着你的数据在这样的世界里看起来很怪异,这让你觉得自己好像生活在那个世界里很可笑。当它对你的口味来说足够低时——低于你选择的一个称为显著性水平的阈值——这意味着你足够惊讶地改变你的想法,改变你的行动,远离你的默认。否则,你继续做你本来要做的事。
将低 p 值解释为:“某人对某事感到惊讶。”
谁来定义“荒谬”的含义?决策者(选择假设和显著性水平的人)。如果你没有设置分析,那么对低 p 值的唯一有效解释是:“有人被某事惊到了。”让我们一起思考一下,如果你不太了解正在讨论的某人或某事,这能告诉你多少。
这就是为什么 p 值有点像医用针头:它们是供个人使用的,分享它们是危险的。
感谢阅读!喜欢作者?
如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。喜欢我的最佳列表吗?试试这个:
[## 最佳数据科学概述
关于数据科学的十篇人人友好的文章
medium.com](https://medium.com/hackernoon/best-of-data-science-overviews-1e73b9c7682)
附录:技术异议
*技术异议你的技术异议(用行话,不好意思):
- 对于那些将要抗议的人来说,“这个假设被用于置信区间的计算,这就是为什么我们会使用这个词,而且凯西称每个人(每个人!)傻逼?!"…虽然计算确实使用了假设,但让我提醒你,分析中的游戏是速度。为什么要滚动自己的测试反演进行探索?有很多包裹准备好了。
- 对于那些将要抗议“如果我们有所有的数据来 确定地测试一个假设 的人,那么我们会在我们的真理的光辉中焚化它之前说出‘假设’……伙计们,这的另一个名字是“查找答案”,是的,你可以使用分析进行基于事实的决策,但是严肃地说:为什么我们在这种情况下谈论 p 值(0)或置信区间,置信点?你已经有了事实,所以不需要统计数据。当你掌握了所有的事实后,可以随意忽略带有标签 #statistics 的文章中的任何该死的谎言,包括这篇文章。
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?用这个表格联系。
为什么推进 AI 民主化和数据优先的方法不一定是好事?
原文:https://towardsdatascience.com/why-are-progressing-ai-democratization-and-data-first-approach-not-necessarily-good-things-50220607c453?source=collection_archive---------35-----------------------
AI 无处不在。或者是?
pixabay.com
当我们回顾 2019 年时,这绝对是人工智能和民主化的一年。人工智能(或人工愚蠢,我稍后会解释)和民主化无处不在。你的冰箱是“智能的”,你的智能手表是“智能的”,你的汽车是超级“智能的”。更不用说计算机软件和你的 CRM 系统了——它们是如此“智能”,如果你相信这种宣传,你应该打包,换工作,让人工智能销售和购买东西。我们不再需要人类了。或者,也许我们真的需要它们。用低代码/无代码的大众化编程接口“编程”人工智能…
人工智能狂热分子把“人工智能”变成了一把万能钥匙,用来吓唬世界,卖得更多。每个人(好吧,几乎每个人)都知道,即使在围棋上取得了著名的胜利之后,计算机也只是在智能地执行命令,智能汽车是智能的,直到……开始下雨或者有人在停车标志上贴了一张贴纸,它再也无法识别它。所谓“智”止于此。
这篇文章并不是要否定我们在人工智能方面已经取得的成就,尤其是在 2006 年之后,当时深度学习在深度信念网络中确实表现得相当好。这是一部回归现实的电影,讲述人工智能在销售、营销以及生活和商业的许多其他领域能为我们做些什么。它还表明,盲目遵循“数据第一”的方法可能会非常糟糕,而且肯定会产生误导。
现实远不是所有“人工智能初创企业”和“数据驱动的领导者”希望我们想的那样。
截至 2019 年,人工智能是如此狭窄,仅此而已…
如今,许多“人工智能企业家”喜欢宣称,为了销售他们的“人工智能支持的产品”,计算机统治着我们的商业和生活。计算机在围棋中获胜的事实是他们最喜欢的口头禅,用那些“人工智能狂热分子”的话来说,最终证明了计算机是智能的。当然,在围棋中获胜是一项伟大的成就!但是声称它证明了计算机现在有直觉是相当误导人的。首先,它证明了强化学习(作为机器学习技术之一)是可行的。第二,证明了一个有足够多 GPU 的分布式网络,现在可以在围棋上战胜人类。第三,……没有第三。AlphaGo 在与地球上所有人的围棋比赛中获胜(并且一直获胜)。然而,它无法区分正方形和圆形,也无法在井字游戏中获胜。
如果你现在说“哦,是的,当然可以!只要重新编程就够了“你支持这篇文章背后的整个想法和论点——计算机听从命令,很听话,但绝对不是智能的。至于 2019 年底,包括深度学习在内的机器学习只是寻找模型和模式(比人类更快),与智能完全无关。
好了,让我们进入这篇文章的主要论点——进一步的人工智能民主化和“数据优先”的方法是有风险和危险的。
什么是 AI 民主化?
“民主化”的简单定义是,每个人都获得平等的机会和获取特定资源的途径。在“AI 民主化”中,我们显然指的是平等获取“人工智能”资源。它们包括但不限于:
- 互联网上免费提供的公共数据源
- 统计时间序列和数据
- 每个人都可以访问的在线平台,以建立“人工智能实验”
- 构建、测试和部署机器学习模型的离线工具
- 最后,“拖放”平台允许任何没有基本数学技能的人在他们的公司使用人工智能
最后一点是最危险的…我一会儿会解释为什么。
什么是数据优先方法?
最近著名的数据优先方法是将数据放在所有业务活动的前面。此外,它指出数据是新的黄金。或者说,数据是最重要的资产。或者,这是任何其他类似于 2019 年每天在 it 和商业界听到的夸大其词。
数据不重要吗?当然是了。但是没有理解的数据什么都不是。这也是我写这篇文章的原因…
那么,为什么 AI 民主化不一定是好事呢?
big-techs(微软、Salesforce、谷歌和其他公司)提供的人工智能平台在 2019 年达到了一个很快就会弊大于利的水平。也就是说,每个人都可以通过简单的拖拽&来“做人工智能”,而不需要理解任何基本原理。只要低代码平台的民主化开发有助于世界各地的公司,民主化人工智能就不会。有几个原因,我把它们列在下面。
R isk #1 —“人人都能做 AI”的事实和缺乏有经验的从业者
事实上,在为期两周的在线课程后,每个人都可以做人工智能,“只需点击几下鼠标”,正如它所说的那样——每个人现在都可以做人工智能。不仅仅是拥有丰富领域知识的人,拥有出色统计技能的人,理解相关性和因果关系的人。所有人。那是危险的。
“数据科学家”在过去 3 年里一直是世界上最性感的工作,鼓励许多人转向成为数据科学家。数据科学家对他们想要研究的主题一无所知。更不用说,在适当的人工智能和机器学习的“引擎盖”下,统计和算法知识非常有限。这些人,成千上万的人,使用简单的在线人工智能工具…对数据做出结论。存在的问题?给你:
- 谁来检验一个业余 AI 从业者选择的算法好不好?
- 谁能证明这不是通过“数据折磨”和“数据按摩”在数据中发现的虚假关联?
- 如果现在几乎每个人都在没有适当基础知识的情况下开始学习机器学习,谁能在 2 年内担任机器学习的高级职位?
可以说民主化也发生在代码开发中,程序员不需要构建主板,然后用汇编语言编码。这是完全正确的。但是,不理解底层计算机架构的单个软件开发人员甚至没有自称的数据科学家危险,这些数据科学家发现肿瘤时甚至不知道他们为什么选择他们所做的算法。
风险 2——在线人工智能平台太容易得出结论
随着人工智能民主化,人们开始相信数字和数据就是一切。事实上,如果没有正确的理解,它们只是…数字和数据。民主化的人工智能平台不会验证你输入模型的数据是否真实、有效或相关。它们允许你将任何东西放入模型中(在许多情况下选择错误),并且…它们提供预测。而且,由于人工智能已经民主化到不需要任何数学技能的程度,我们最终只能基于错误的数据和错误的模型进行预测。更糟糕的是,所有那些“人工智能初创公司”和“数据科学家”经常让我们相信这些预测是有效的,因为“它们得到了人工智能和机器学习的支持”。
风险# 3——民主化的人工智能与清理输入数据、选择模型并验证其结果的人一样聪明
由于人工智能的民主化让每个人都可以接触到人工智能,这意味着人工智能和玩它的人一样聪明……我们甚至不需要更深入地研究对抗性学习或有目的的模型挑战方法,以表明“民主化的人工智能”做出的预测往往是无效的,简直是愚蠢的。不是因为 AI 线上平台蠢。这是因为人们被鼓励玩机器学习,因为它是一种简单的数据输入数据输出机制,有着花哨的名字,但不理解其背后的基本原理。
风险# 4——民主化的人工智能平台鼓励可视化数据并显示相关性
是的,数据的轻松可视化是人们将注意力放在“民主化的人工智能”平台上的最常见原因之一。将数据可视化没有错(一张图胜过千言万语),但错的是……在没有真正相关性的地方得出相关性的结论。漂亮的彩色图表让所有用户都能看到它们之间的关系。关系并不总是因果关系。
上个月有多少次我听说另一家“人工智能初创公司”可以根据历史数据向我展示我们的客户在 2020 年将购买多少产品的预测?你呢?在所有情况下,我很容易就能证明,预测未来的客户行为和订单需要的不仅仅是运行聚类来细分客户,然后进行多项式回归来显示订单增加/减少的概率。这是一个非常简单的例子,但是…所有这些平台很少比这个简单的例子更简单。是的,他们自称为“人工智能支持的销售/数字营销引擎”😄。
风险 5——民主化的人工智能平台不知道也不验证你的意图
假设你是一家公司的数据科学家,你想用机器学习来证明你的假设。你是做什么的?你摆弄这个模型太久了,它最终证明了那个假设。然后呢?你把它展示给你的董事会或你的客户,作为机器学习做出的一个伟大的知识发现。
如果这种“知识发现”只是为了你的公司,那就这样吧。但我不希望从这样的数据科学家那里获得数据来预测图像上看到的是癌症还是仅仅是图像异常。
为什么数据优先的方法是一件坏事?
首先,让我解释一下我对数据优先方法的理解。我不是说收集数据、使用历史数据或使用结构化/非结构化数据进行分析来帮助您的公司发展。我所说的坏数据优先的方法是我们越来越经常听到的——数据,也只有数据应该定义你如何经营你的公司,你应该如何修改你的流程,以及你应该如何选择你的客户。
如今,我们经常遇到“数据优先,假设随后” 方法的问题,通常被聪明的家伙隐藏在“我们用我们顶尖的云 AI 平台提供知识发现”的背后。
你看到这里发生了什么吗?他们使用数据创建一个假设(通过知识发现),然后用相同的数据证明这个错误的假设。很好。但没那么聪明。而且把不好的数据集分成训练和测试数据集也不是办法……😃。“数据优先”方法的主要问题是,它鼓励业余爱好者在数据点之间的关系薄弱的地方寻找相关性和原因。证明?
真实世界示例:
考虑一个“领先的人工智能营销”平台(你说吧;全世界有无数的例子)。让我们玩一会儿吧。让我们输入我们的历史客户数据(尽可能复杂,因为它可以处理有价值的预测)和来自 Kaggle 或任何其他基于时间序列的统计数据公共来源的一组随机数据。
上面的练习是从一个人工智能平台学习的一个完美方式,即应该成为我们最佳客户的客户是那些满足以下所有条件的客户:
- 在移动设备上使用我们的网站,然后在桌面上跟进(很公平)
- 周二写点最多的邮件(蠢,哈?)
- 第一次联系我们的时候,佛得角的温度低于 25 摄氏度(在我开始让这些人工智能平台变得愚蠢之前,我不知道它的存在)
够糟吗?作为人类,你会做出如此愚蠢的推断吗?如果这个伟大的“人工智能支持的公司”代表会告诉你,为了取得这些伟大的成果,他们已经运行:
- 堆叠去噪自动编码器
- 自然语言处理
- 关联规则学习
听起来更可信吗?确实如此。他们可能完全按照这个顺序来做,并得出完全相同的结论。众所周知,人们倾向于相信更多的科学词汇。甚至,如果它们在特定的语境下只不过是扯淡。
为什么会觉得结果一文不值?很简单——这些平台都不理解数据,它们只看到数字。如果要求他们做“知识发现”,他们就会去做。
当然,有人可能会说我是故意放坏数据的。是的,我做到了。但是,当你允许任何用户将他们的数据拖放到一个“人工智能,超级酷的机器学习平台”,确保“使用人工智能进行预测”,你怎么能确保这些糟糕的数据没有被使用,并且得到适当的验证?我希望你现在明白我的意思。现在还不是智力的问题。它是关于更复杂、快速计算的统计和计量模型(是的,其中一些是从基于模型的机器学习中的数据推断出来的,但仍然只是模型)。
在不强迫用户理解基本原理的情况下将人工智能民主化,注定会发现相关性,并做出不仅糟糕、愚蠢,而且最重要的是危险的“发现”。只要这些愚蠢的预测和发现与销售和市场营销有关,并且有人想要使用它们,那就好。但在医学、司法和心理学领域,同样的业余方法也被用来民主化人工智能。
这……是不对的。
请分享你的观点和评论。我很乐意阅读/讨论它们。
为什么 AutoML 是数据科学家必不可少的新工具
原文:https://towardsdatascience.com/why-automl-is-an-essential-new-tool-for-data-scientists-2d9ab4e25e46?source=collection_archive---------18-----------------------
机器学习(ML)是当前通过利用利用计算机智能的算法来建模统计现象的范例。常见的地方是建立预测房价的 ML 模型,根据用户的潜在营销兴趣聚集用户,并使用图像识别技术来识别脑瘤。然而,到目前为止,这些模型都需要小心翼翼地反复试验,以便在看不见的数据上优化模型性能。
自动机器学习(AutoML)的出现旨在通过提供设计良好的管道来处理数据预处理、特征选择以及模型创建和评估,从而抑制所需的资源(时间和专业知识)。虽然 AutoML 最初可能只吸引那些希望利用 ML 的力量而不消耗宝贵的预算和雇用熟练的数据从业者的企业,但它也包含了成为有经验的数据科学家的无价工具的非常强的承诺。
由于当前机器学习工具的谬误,数据科学家经常难以在拥挤的时间线内产生有效的模型。他们与不灵活的框架、缺乏跨平台的可复制性、协作障碍以及尚未完全开发的软件工具作斗争。目前市面上有许多不同的 AutoML 工具,但它们都有各自的缺点。通常,它们将用户限制在一个严格的工作流程中,并且可以充当黑盒;他们产生了令人印象深刻的结果,但几乎没有可解释性和再现性。对于自动建模软件实际上是如何得到最佳模型的,或者为什么它选择保留某些特征而不保留其他特征,几乎没有给出解释。一些数据科学家也觉得避免使用这些工具是一种骄傲。毕竟,如果数据科学家的整个工作流程可以被自动化工具取代,那么他们存在的理由是什么?
AutoML 领域非常拥挤,有许多 AutoML 选择,从免费的开源工具如 WEKA 或 Auto-Sklearn 到最昂贵的平台如 Data Robot、H2O 无人驾驶 AI 和 Dataiku。虽然网上有很多关于这些工具的文章,但我想我会根据我最近参加的一个由设计者和作者参加的演示来尝试一下这个领域的一个新成员。
输入 Auto_ViML
该工具被称为“Auto_ViML”或“自动变体可解释机器学习”(发音为“Auto_Vimal”),这是一个开发的库,作为一个功能齐全但免费的 AutoML 管道如何有效地促进当代数据工作流的主要示例。
AutoViML 是输入不可知的,这使它能够接受任何熊猫数据帧形式的数据集。它执行类别特征转换和简单的数据清理步骤,例如将缺失值标识为“缺失”,以便让模型决定如何使用它们。
该库的独特优势之一是它自动执行特征缩减(或特征选择),以产生最简单的模型,在这种情况下,该模型具有产生合理的高性能所需的最少数量的特征。我发现 AutoML 生成的模型自动减少了所选特征集中的多重共线性,并通过迭代一系列超过 15 个不同的 ML 选项生成了一个性能良好的模型(详见下文)。最重要的是,它不仅产生了性能最好的模型(基于您的评分标准),而且还提供了详细而冗长的输出,允许大量的理解和模型可解释性(因此 Auto_ViML 名称中有术语“可解释性”)。
我决定用几个著名的数据集来测试 Auto_ViML。开始使用 Auto_ViML 就像 1–2–3 一样简单:
- 通过“pip install”安装 Auto_ViML
- 将数据集加载到数据帧中,并将其分为训练和测试
- 用一行函数调用 Auto_ViML
我已经把我实验用的 Jupyter 笔记本附在这里了。
埃姆斯住宅数据集的线性回归
通过使用 Auto_ViML 测试各种不同的数据集,Auto_ViML 工作流的优势得到了有效的展示。automodeller 首先创建了一个非常有效的线性回归模型,用于使用 Ames Housing 数据集预测房屋的销售价格。数据被分成训练集和测试集,并提供一个目标变量作为 Auto_ViML 的参数。所有这些都可以在一行中完成:
回归分析为处理住房数据的最有效方法提供了强有力的见解。通过让 Auto_ViML 创建多项式项(包括交互)来创建最佳拟合线。这种内置的功能工程将 RMSE 从 25640.78 美元降低到 23255.65 美元,在预测房价方面有了明显的改善。根据外部评估,最终模型的 R2 为 0 . 91。
该库还生成了一个要素重要度图,该图表明新添加的地下室总平方英尺和地面居住面积平方英尺多项式变换与目标变量具有很强的指数关系。最终的模型采用了套索正则化和 79 的 alpha。能够让 Auto_ViML 过程理解哪些特征转换最相关,哪些特征在对目标变量建模时最没用,以及最适合这个问题的模型正则化的类型和强度,这是很有见地的。
当 verbose = 2 和 Boosting_Flag = True 时,Auto_ViML 智能地合并了 SHAP 特性重要性图,以便采用 XGBoost 模型。
员工流失分类
Auto_ViML 以类似的洞察力处理了一个二进制分类问题。它发现,当使用 IBM Watson HR 数据集时,高度正则化的逻辑回归模型(C = 20)能够最好地预测员工的流失概率。自动建模器直观地知道优先召回积极类(一个选择离开公司的雇员),这是一个适合这个特殊问题的优化。Auto_ViML 计算出 F1 分数为 0.94 的最佳阈值为 0.49,得出的结论是单个模型在这项任务中表现非常好。
员工流失问题不仅需要强大的预测准确性,还需要了解员工流失的潜在动态。AutoViML 的特性重要性图表准确地指出了识别员工流失的一些更具预测性的因素,如员工的工作投入程度以及他们是否必须加班或拥有股票期权。在一个有如此多内置特性的数据集中,这个 Auto_ViML 管道还指出了那些与其他特性高度相关从而冗余的特性。Auto_ViML 发现,员工的总工作年限、在当前职位上的工作年限、在现任经理手下的工作年限以及年薪并不是特别有用的特征。其中一些观察结果令人惊讶,因为数据科学家可能会认为他们应该在对员工流失建模时突出这些特征属性。来自 AutoML 的见解有助于指导数据科学工作流,成功地引导建模管道清除可能在功能工程流程中转移注意力的不必要功能。
使用 Auto_ViML 进行犯罪预测
包含数百万条观测数据的大型数据集通常会给数据科学家带来巨大挑战。这些数据存储迫使数据从业者处理争论和清理数据,同时还试图揭示隐藏在数据中的潜在趋势和预测因素。为了观察 Auto_ViML 处理大型数据集的能力,我选择了来自 Kaggle 的具有 1m+行和 7 个特征的伦敦犯罪记录数据集进行下一次测试。
为了预测伦敦警察记录数据集中出现的各种犯罪,能够使用 Auto_ViML 的不平衡标志来完成这项任务是很有用的。大量的数据观察也有助于试验 Auto_ViML 的模型堆叠功能,如下所示:
运行有和没有叠加的两个测试表明,模型叠加提供了更强的宏观平均 F1 分数(从 0.06 提高到 0.31)以及更强的 ROC-AUC 分数,这意味着模型置信度已经提高。
ROC 曲线的比较证实了这种改善。
ROC 曲线表明,与单一模型输出(顶部)相比,采用模型堆叠(底部)后,模型具有更大的置信度。
可悲的是,模型堆叠导致了可解释性的丧失;最初的单一模型实验解释说,犯罪的月份和地点是预测犯罪类型的两个最重要的特征,但堆叠输出只是将决策树输出作为最重要的特征。这表明,就性能而言,模型堆叠是解决这个问题的合适方案,但是通过改变 Auto_ViML 测试的属性来获得多个视角仍然是有用的。
Auto_ViML 的默认特性重要性图表,没有 SHAP。
结束语
AutoML 不仅能够快速创建准确的模型,而且如果一个库提供了适当的详细输出,那么就可以收集很好的见解,从而加快理解问题的过程。Auto_ViML 的可解释性是它的主要优势之一;这与当前使用深度神经网络的趋势形成鲜明对比。Cynthia Rudin (2019)感叹道:“准确性和可解释性之间总是存在权衡的信念导致许多研究人员放弃了建立可解释模型的尝试。这个问题因研究人员现在接受深度学习培训,而不是可解释的机器学习培训而变得更加复杂。更糟糕的是,机器学习算法的工具包几乎没有为可解释的机器学习方法提供有用的接口。”像 Auto_ViML 这样的库可以抵制黑盒自动化工具的趋势,并为透明的自动建模提供有力的支持。
AutoML 可以为数据科学家指出特定数据管道的正确模型和正则化工具。自动化过程能够过滤掉可能误导模型的要素,并动态确定多项式要素变换的有效性。数据科学家的偏见常常会扭曲建模过程的结果,并可能将数据从业者引入死胡同。因此,为了获得对问题的完全无偏见的见解,能够将数据集放入 AutoML 管道是非常宝贵的。
虽然数据科学家最终可能仍然会寻求手动调整和评估他们自己的模型,但 AutoML 仍然是收集对问题的初步见解并获得对特征和目标变量关系的客观观点的不可或缺的工具。许多数据科学家现在对使用 AutoML 工具犹豫不决,但在可预见的未来,看到这些资产被纳入探索性数据分析或初始模型实验也就不足为奇了。最好是认可 AutoML 过程,这些过程重新引入了可解读的机器学习模型的范式,而不是快速的黑盒解决方案。然后,这些 AutoML 工具可以有效地成为团队中另一个数据科学家的等价物:一个已经对手头的问题有强大见解和独特解决方案的人。
你可以在这里访问 Auto_ViML 的 github 库。
特别感谢 Ram Seshadri 对 Auto_ViML 数据实验的支持和指导。
书目
C. Rudin,“停止解释高风险决策的黑盒机器学习模型,改用可解释的模型,”arXiv:1811.10154 [cs,stat],2019 年 9 月。
原载于 2019 年 11 月 10 日https://danrothdatascience . github . io。
为什么成为数据科学经理让我想成为一个不同的超级英雄
原文:https://towardsdatascience.com/why-being-a-data-science-manager-made-me-want-to-be-a-different-superhero-39f898928d7b?source=collection_archive---------10-----------------------
你会是哪个超级英雄?我的答案总是蜘蛛侠…直到我成为一名数据科学经理。
The Avengers. Image source.
警告:我会自由引用漫威电影宇宙的复仇者联盟电影,假设你已经看过了。如果你不喜欢超级英雄,我不确定我们能成为朋友。此外,你可能更喜欢另一篇关于数据科学领导力的文章,如 Robert Chang 的“,所以你想成为一名数据科学经理?“方敏”作为新的数据科学领导者的 6 个经验教训,“或者 Cassie Kozyrkov 的“数据科学领导者:有太多你”和“人工智能和数据科学的 10 大角色”
为什么是蜘蛛侠?他会爬墙,会做很棒的空翻,很友好,而且,作为一个澳大利亚人,我认为蜘蛛很酷!
Your friendly neighbourhood Spiderman. Image source.
在我们谈论管理之前,随着我成长为一名高级数据科学家,我对蜘蛛侠的忠诚软化了。我很惊讶地感觉自己热衷于更强大的角色,如雷神托尔。为什么?可能是因为我和扮演他的澳大利亚人克里斯·海姆斯沃斯有惊人的相似之处(我希望如此)。
不管怎样,一个发人深省的现实让我明白了:最有影响力的超级英雄拥有最大的超能力。蜘蛛侠可以拯救邻居,但它需要托尔的力量或惊奇队长的力量来打击疯狂的泰坦灭霸,并拯救宇宙。
Thor, the God of Thunder. Image source.
为了增加我作为一名数据科学家的影响力,我必须在我已经喜欢做的事情上做得更好,并帮助其他人也这样做。我在开发更深层次的统计和机器学习技能,更好更快地编写代码,并教我的同龄人如何做同样的事情。我加快了我的数据科学游戏,致力于更困难和更大规模的项目。但是我想走多远呢?
“最有影响力的超级英雄拥有最大的超能力”
我很快渴望一个不同的挑战,并没有充分意识到我正在进入的,步入了领导的角色,很快成为经理。扮演这个角色一段时间后,我看了最新也是最具史诗性的漫威电影《复仇者联盟 4:终局之战》。接近尾声是一个葬礼场景,镜头扫过所有伟大的角色,包括蜘蛛侠和雷神!它的结尾是一个在后面的角色,他很少出现,但却在监视着每个人。那一刻,我意识到我想成为一个不同的英雄,我已经改变了多少。如果我能成为超级英雄——请敲鼓…——我会成为尼克·弗瑞!
“呃,尼克·弗瑞是谁?”我听到你们有些人在问。“他不是超级!”我听别人说。谁会想成为一个没有超能力的角色(我知道,我知道,可以说不是超级英雄),说的比打的多,连自己的电影都没有的角色呢?事实证明是我。但是为什么呢?很明显,因为弗瑞是由秃头塞缪尔·L·杰克逊扮演的。
Nick Fury, founder of the Avengers. Image source.
除了闪亮的头像和普通的姓氏,这对我来说是一个深刻的时刻。尼克·弗瑞是神盾局的导演,也是复仇者联盟的创始人。他没有亲自拯救宇宙,但弗瑞知道,在任何人之前,它需要被拯救。更重要的是,他知道这是一个任何人都无法独自完成的巨大任务。他有远见,并能够组织地球上最强大的英雄来实现它。
“他没有亲自拯救宇宙,但弗瑞知道,在任何人之前,它需要被拯救。”
我意识到我已经更加清楚地理解了个人贡献和领导力之间的区别。更重要的是,我知道我喜欢后者:当蜘蛛侠是我的首选时,我会认为这是不可能的。我在解决不同的问题,发展不同的技能,寻找不同的回报。对于其他想知道进入数据科学领导层意味着什么的人,下面是我对每个问题的看法。
领导者解决不同的问题
当终极超级英雄惊奇队长去工作时,她在解决什么问题?主要是如何打败最新最厉害的超级恶棍。当尼克·弗瑞开始工作时,他在想一些不同的事情。他正在研究如何打败所有的恶棍,甚至是那些他还没听说过的恶棍。惊奇队长和弗瑞都在为一个更安全的宇宙而战,但解决了不同(且互补)的问题。
Captain Marvel taking on the mad Titan, Thanos. Image source.
对于数据科学家和领导他们的管理者来说也是如此。作为一名数据科学家(个人贡献者),我会致力于特定的项目,尝试并改进特定的决策。作为一名数据科学领导者,我一直在思考我们应该如何利用数据并提升所有决策的质量。我一直在努力提高这两个角色的决策能力,但以非常不同的方式为这个使命做出贡献。
“作为一名数据科学领导者,我一直在思考我们应该如何利用数据并提升整个企业所有决策的质量。”
领导者需要不同的技能
弗瑞在漫威电影宇宙没有自己的电影,但你知道吗,他在电影中出现的次数几乎比其他所有角色都多(我想除了钢铁侠)?
因为个人贡献者和他们的领导者面临不同的问题,所以他们以不同的方式工作并需要不同的技能是有道理的。钢铁侠是怎么打败坏人的?他详细了解他们并与他们战斗,依靠他的工程能力,动力服,人工智能支持,飞行和激光!弗瑞是如何让数百人在多年的时间里朝着一个共同的目标努力的?他需要放眼全局,制定长期计划,依靠远见、战略思维和影响他人的能力。钢铁侠在激烈的爆发中发展和展示他的技能,足以成为一部电影。弗瑞的努力是分散的,以帮助推动每个超级英雄在正确的地方,在正确的时间,用正确的技能完成工作。
Fury and the Black Widow telling Iron Man, “You’re part of a bigger universe, you just don’t know it yet.” Image source.
像钢铁侠一样,数据科学家需要将大量数据转化为具体有用的东西的能力。他们需要大量的编码技能、统计模型和机器学习算法。然而,他们的领导者需要技能来集合众多数据科学家的力量,以追求共同的目标。他们需要理解他人的长处和短处,在不同的工作和沟通方式中灵活变通,并且能够无条件地信任他人。他们不需要成为高深的技术专家,但他们需要对这门手艺有足够的了解,以便从这些独特的技术人员那里获得最好的东西。像 Fury 一样,数据科学领导者需要成为一种粘合剂,稍微接触一下每个人的工作。
“弗瑞的努力是分散的,以帮助推动每个超级英雄在正确的地方,在正确的时间,用正确的技能完成工作。”
领导者体验不同的奖励
解决不同的问题也意味着体验不同的回报。蜘蛛侠打倒一个坏人感觉很棒,但他也很兴奋只是测试他的新能力。很好玩!弗瑞看不到自己能跳多高,只能通过别人来发挥作用。当他看到他的战略拼图的许多块组合在一起达到一个目的时,他感觉很好。当第一个复仇者的队伍走到一起,打败了恶作剧之神和雷神的哥哥洛基,这不是偶然的。弗瑞不得不鼓励和培养许多人,并推动许多事件超时来实现它。超级英雄们因扳倒洛基而受到称赞。看到超级英雄们作为一个团队工作,看到他的战略努力取得了成果,即使很少有人知道他的角色,弗瑞也会有一种回报感。
“They needed the push.” Nick Fury motivating superheroes to become the Avengers. Image source.
作为一名数据科学家,我喜欢征服新算法,喜欢“破解代码”。当然,交付产生业务影响的解决方案让我感觉很有成就感,但这并不是我进入这个领域的真正动机。作为一个领导者,我没有大锤或闪电来玩。只有通过团队合作才能实现的精心策划的影响是我的毒品。我的任务要求我跨越时间和人群分散精力去完成。当我的团队成功时,我会有一种成就感,因为我知道我帮助创造了他们需要的环境。
“当我的团队取得成功时,我会有一种成就感,因为我知道我帮助创造了他们需要的环境。”
那么为什么愤怒呢?
所以你们中的一些人可能会问,“为什么愤怒?”我说,我可能不再是超级英雄了,但我有一个独特的特权地位。每天早上,我都要向猩红女巫问好,并确保她拥有让数据科学大显身手所需的一切。我坐在托尔旁边,帮助他思考如何应对我们最艰难的商业决策。我和后卫们一起吃午饭,聊他们想成为什么样的英雄。我发现蜘蛛侠用我以前不知道的数据做事情。我甚至可以帮助指导像美国队长和黑寡妇这样的团队领导,看着他们激发惊人的合作。我花时间想象一个世界,在这个世界中,数据被充分利用,每个人都做出伟大的决策,我为实现这一目标设定了一条路线。最重要的部分是什么?建立和支持一支超级英雄的军队,他们可以实现这一目标。
Nick Fury leading the team. Image source.
我可能还不是数据科学的主任,但我知道为什么我希望有一天成为主任。
停止广播
感谢阅读,我希望你喜欢这篇文章。您是否正在考虑进入数据科学领导岗位,并希望更好地了解这意味着什么?在 Medium 、 Twitter 或 LinkedIn 上问我你的问题,我很乐意分享我的经历!
为什么更好的权重初始化在神经网络中很重要?
原文:https://towardsdatascience.com/why-better-weight-initialization-is-important-in-neural-networks-ff9acf01026d?source=collection_archive---------19-----------------------
在我深度学习之旅的开始,我总是低估权重初始化。我认为权重应该初始化为随机值,而不知道为什么要随机初始化?为什么没有其他方法呢?权重初始化应该有多大的威力或意义?等等。
这一系列的问题激发了我写博客的灵感,我将在博客中讨论不同的权重初始化技术,每种技术的优缺点,对个别技术的需求等。用更简单的方式。
补充说明
本文假设读者对神经网络的概念、前向和后向传播、激活函数、优化算法等有基本的了解。如果你不熟悉,那么我会推荐你关注我的其他 关于这些话题的文章。
神经网络中的前向传播——简化的数学和代码版本
分析神经网络中不同类型的激活函数——选择哪一种?
为什么梯度下降还不够:神经网络优化算法综合介绍
在继续之前,首先让我们看看整篇文章中使用的参数符号。
使用的术语
考虑一个 L 层网络,具有 L-2 (不包括输入输出层)隐藏层。任意层 l 的参数表示为
为了得到具有更好和最优结果的神经网络,权重初始化是首先要考虑的步骤。权重初始化不当的网络会使整个学习过程变得繁琐而耗时。因此,要实现更好的优化、更快的收敛,可行的学习过程权重初始化是非常关键的。现在让我们从一些重量初始化问题开始。
为什么不简单地将所有权重初始化为零?
考虑一个场景,其中所有的权重被初始化为 0 。参考下面为多类分类问题设计的网络。使用来自sklearn.datasets
的make_blobs()
函数生成数据集。数据集有四个不同的类,包含两种不同的要素。网络有一个具有两个神经元的隐藏和输入层,一个具有四个神经元的输出层。
其中 W1 是 2×2 矩阵,W2 是 4×2 矩阵。B1 和 B2 分别是大小为 2 和 4 的列向量。
在隐藏层预激活期间
a11 = w1x1 + w2x2 + b1
a12 = w3x1 + w4x2 + b2
a11 = a12(假设 b1 = b2)那么 h11 = h12
类似地,a21 = a22 = a23 =a24,那么 h21 = h22 = h23 =h24
在 w1 和 w3 的反向传播期间
注- 此处所示 w1 和 w3 的梯度仅通过单路径计算,事实上,这些梯度是通过考虑多条可能路径上的所有导数计算的。
如果梯度相等,那么权重将被更新相同的量。连接到同一神经元的权重在整个训练期间继续保持不变。它使隐藏的单元对称,这个问题被称为 对称问题 。
因此,为了打破这种对称性,连接到同一神经元的权重不应被初始化为相同的值。
要点
- 切勿将所有重量初始化为零。
- 切勿将所有重量初始化为相同的值。
我们可以将权重初始化为大值吗?
如果权重被初始化为大值,并且如果使用了 sigmoid 激活函数(logistic,tanh ),则饱和问题可能发生,这导致消失梯度问题。因此,梯度变化缓慢,学习变得乏味。类似地爆炸梯度问题也可能发生。
要点
- 切勿将权重初始化为 大的 值。
- 最好将 标准化 / 标准化 输入,使它们位于一个小的公共范围内。
什么在实践中有效?
知道了零初始化和高值初始化的问题后,还有什么可行的初始化方法呢?
嗯,我们可以按照特定的分布(均匀分布、正态分布、截尾正态分布等)随机初始化权重。
例如,我可以在 Python 中使用np.random.randn(size_l, size_l-1)
来随机初始化权重,遵循均值为 0、标准差为 1 的标准正态分布。
但是对于更深更广的网络,隐含层神经元数量多,隐含层数量大,随机初始化可能会产生问题。
例如,如果在一个隐藏层中有 n 个神经元,并且如果 n 是一个非常大的数字,那么在预激活期间
在 a21 中,由于大量的神经元,所有这些加权和都会爆炸。因为 a21 值很高,所以会再次出现饱和问题,这导致梯度消失问题。类似地爆炸梯度问题也可能发生。
如何克服这一点?
为了处理这些梯度问题,我们可以以合适的分布方式初始化随机权重。不使用标准的正态分布,而是使用具有 k/n 方差的正态分布,其中 k 是基于激活函数选择的。
Xavier Glorot 和 He 等人是更好的随机权重初始化这一概念的第一贡献者。
tanh 和逻辑激活函数的 Xavier 初始化
Xavier 提出了一种更好的随机权重初始化方法,该方法在初始化权重时还包括网络的大小(输入和输出神经元的数量)。
根据这种方法,权重应该与前一层中神经元数量的平方根成反比。
其中权重可以在 Python 中初始化为np.random.randn(sizes[i-1],sizes[i])*np.sqrt(1/sizes[i-1])
按照这种方法,隐藏层输入的加权和将不会取很大的值,并且减少了消失 / 爆发梯度问题的机会。
ReLu 和泄漏 ReLu 激活功能的初始化
He 初始化类似于 Xavier 初始化,其中前一层中神经元的数量被赋予重要性。但是因子是乘以两个而不是一个和。
其中权重可以在 Python 中初始化为np.random.randn(sizes[i-1],sizes[i])*np.sqrt(2/sizes[i-1])
濒死神经元 是 ReLu 激活功能的常见问题。使用 ReLu 激活功能, 多达 50% 的神经元可能在训练过程中死亡。为了处理这种情况,在初始化中,该因子乘以两个。
结束注释
在这个旅程中,到目前为止,我们已经讨论了各种 权重初始化 方法以及与每种方法相关的问题。建议使用 Xavier 初始化用于sigmoid 基础激活函数 He 初始化 用于 ReLu 和 Leaky ReLu 激活函数。******
为什么在彩票上下注是一个非常糟糕的主意(如果你真的想赢的话)
原文:https://towardsdatascience.com/why-betting-on-the-lottery-is-a-pretty-bad-idea-if-you-actually-wish-to-win-9cb43488a27b?source=collection_archive---------28-----------------------
使用数据可视化来透视我们在衡量决策结果方面的失败程度
Photo by dylan nolte on Unsplash
我们一次又一次地听到彩票中奖很难。但是我们仍然玩它。
难道 13,983,816*中有 1%的机会中头奖听起来不是近乎不可能和令人畏惧的吗?显然不是。
或者,435,461/998,844*的时间里,你最终得到 0 个匹配的号码,却什么也没赚到?似乎还不够令人沮丧。
那么,为什么人们不能感受到赢得头奖的机会有多遥远呢?是因为我们没有能力理解这些巨大数字的庞大程度吗?为了弄清楚这一点,我决定找到一种方法来具体化这些数字背后的真正含义。
*概率来源于标准的 49 (6/49)彩票中的 6。如果你在考虑像强力球或百万彩票这样的其他彩票变体,中奖几率会比 T2 差很多。
视觉化
就在昨天,我想到一个主意,把从 49 个数字中选择 6 个数字(或球)的所有可能结果可视化。
然后,我会将这 13,983,816 个不同的结果分成 7 个不同的集合(或事件),每个集合代表所有 6 个数字的组合,这些组合将与任意获胜的 6 个数字组合精确匹配 k (其中 k 是 0 到 6 之间的任意整数)。
如果你现在真的对术语“结果”和“事件”感到困惑,这里有一个 1 分钟的速成课程:
试验:产生结果的程序(即从 49 个数字中选择 6 个数字的行为)
结果:一个试验的可能结果(即你抽中的数字,[8,13,34,35,41,49])
事件:包含满足特定标准的实验结果的集合(即,与获胜组合[1,2,3,4,5,6]有 6 个精确匹配的结果的集合是包含唯一结果[1,2,3,4,5,6]的集合)
每个结果将由一个像素表示,并且表示所有结果的所有 13,983,816 个像素将并排绘制,以给出每个集合相对于彼此有多大的指示。
瞧,观想不是为胆小的人准备的:
Outcomes of drawing 6-number combination from a set of 49 numbers that matches with a winning 6-number combination
现在,在你真正开始尝试像在普通图表上那样读取轴之前,请注意,边上和底部的数字不构成任何轴的一部分。它们只是数量标记,帮助您计算图形中的像素(代表结果),特别是因为它们有这么多。
那么这意味着什么呢?有 0 个匹配数字的集合几乎占据了整个结果空间的一半,这表明答对 0 个数字的概率很高,接近一半。
然后,我们看到彩色块变得越来越小。在 3 个匹配的数字(橙色块),事情开始变得微小,我添加了 2 个放大部分,以帮助您欣赏它们的相对大小。
但是等等,左上角的小红点是怎么回事?是的,它就是你认为的那样,一个像素代表中大奖的唯一结果。它甚至需要被放大才能被看到。
不服气它小?尝试使用数量标记来帮助您了解单个像素与整个图相比有多小,图的长度约为 3500 像素。它的高度也是如此。
还认为选择中奖的头奖组合很容易吗?
以不同的方式看待事物——骨灰盒和球
如果你发现组合学和概率很难,理解彩票背后的数学的另一个简单得多的方法是将问题转化为经典的瓮球问题:
This urn will certainly not fit the number of balls we need to simulate the probabilities found in a lottery (Photo: MoMath)
什么是瓮球问题?
想象一下,里面有一个瓮和一些不同颜色的球。你从瓮中随机抽取一个球,它的颜色将决定你得到的结果。假设它是黑色的,你输了,但如果它是红色的,你赢了。
用一个球代表从 49 个数字中抽取 6 个数字的每个结果,用一种颜色(例如橙色)代表属于同一组的所有球(例如 3 个匹配数字的结果),我们可以想象将 13,983,816 个 7 种不同颜色的球放入一个瓮中,然后随机抽取一个球来确定我们将得到什么结果。以下是我们需要放入的每种颜色的球的数量:
灰色(0 个匹配数字):6,096,454
粉色(1 个匹配号码):5,775,588
棕色(两个匹配的数字):1,851,150
橙色(3 个匹配号码):246,820
紫色(4 个匹配的数字):13,545
蓝色(5 个匹配的数字):258
红色(6 个匹配号码/头奖):1
你还觉得抽那个红球就能中头奖容易吗?这实际上相当于从图中随机选择一个像素,并希望它是红色的。
其他见解
就在昨天,我在 subreddit /r/dataisbeautiful 上发布了我的观想,令我惊讶的是,它产生了许多积极的回应(19.3 千次投票!)和关于赌博的有趣讨论。
一些 redditors 在他们的评论中分享了其他方式来透视人类在彩票投注方面做出的非理性决策。
一个人提到,鉴于[1,2,3,4,5,6]看起来很荒谬,大多数彩票玩家都不会考虑将赌注下在上面,但事实上,这个组合与其他任何组合一样有机会赢得头奖。
为了利用这种非理性的人类行为,另一位 redditor 建议,我们也许应该只购买历史上很少被其他人购买的组合,因为这将确保奖金池不会在头奖事件中被分割。听起来合理吗?
房间里的大象
现在我已经向你展示了彩票的概率是如何起作用的,以及它们是如何对你不利的,重要的是要指出这只是评估是否值得玩彩票的一种方式。
There’s always a catch… like always. (Photo : Smithsonian Channel)
我忽略的另一个重要因素是成本。你每张彩票花多少钱?还有获得 x 匹配号码的奖金是多少?单程票的预期价值是多少?如果你想要一个快速的答案,看看在彩票游戏中这种考虑是否会站在你这边,只要再想想有多少彩票运营商,以及谁在经营。
但是,除了几乎不可能中奖,而且玩起来可能非常昂贵之外,彩票真的有任何价值吗?值得思考的一个有趣的方面是玩彩票实际上带来的乐趣和兴奋。
正如一位 redditor 评论的那样,买彩票就像是“为致富的白日梦买单”。也许玩彩票带来的价值远远超出了统计和金钱的衡量。
但现在的问题是,你会不会因为在无数次为之付出后却无法实现那个“白日梦”而感到恼火?
如果你喜欢我的文章,可以看看我对澳大利亚学生移民数字的分析和思考。我也写更多的技术文章,比如这篇关于如何使用 Tableau 创建动画条形图的教程。
为什么生物学对人工智能持怀疑态度
原文:https://towardsdatascience.com/why-biology-is-sceptic-towards-ai-176e5747758c?source=collection_archive---------25-----------------------
生命科学的深度学习
为什么精准医疗不是
Image source
这是生命科学的 深度学习 专栏的第六篇文章,我在这里演示了深度学习如何用于古代 DNA 、单细胞生物学、生物医学组学集成、临床诊断学和显微成像。今天我将解释这一系列帖子的动机,并分享为什么生物学和医学 在概念上 对 AI 有不同的观点 ,这是我多年来与具有生物学和医学背景的人一起工作所学到的。
超越全基因组关联研究
我来机器学习并不是因为它很酷,每个人都在谈论它,而是在寻找一种常用统计学的替代方法时发现了它。当来自所有基因的遗传变异被扫描与疾病的相关性时,我正在通过基于 p 值的排名进行统计分析,搜索与疾病相关的基因全基因组关联研究,就像下面二型糖尿病(T2D)的曼哈顿图。
Manhattan plot for Type 2 Diabetes (T2D) from DIAGRAM, Nature Genetics 42 (7), 579–589 (2010)
如果你不熟悉曼哈顿图,一个点是一个遗传变异体,x 轴是该遗传变异体在人类基因组上的位置,y 轴是该遗传变异体与疾病的相关性/关联性的 -log10(p 值)。曼哈顿图上的峰值表明与该疾病有最强关联的基因片段。通过这种方式,发现了许多与人类疾病相关的基因,希望这些知识能够用于 临床诊断 对疾病的预测和预防。然而,人们很快意识到,在关联研究中发现的基因不能预测常见疾病,如糖尿病、心血管、精神分裂症等。我在这里详细讨论了。我觉得失败是由于基因的 p 值排序,并开始编写我自己的算法,该算法优化了预测能力 而不是关联的 p 值。后来我意识到我所编码的东西被称为 随机森林 在研究中被称为机器学习。这就是我对这个迷人领域感兴趣的原因。
生物怀疑论
然而,我对机器/深度学习/人工智能的热情并没有被我的大多数具有生物学背景的同事分享。当我主张向 Google Deep Mind 学习,试图找到我们的修辞问题的答案,如 【缺失的遗传性问题】、 时,我感觉到消极的沉默突然拥抱了观众中的每个人,我很快被学术教授包围,他们解释说机器学习是一种炒作、一个黑盒和“我们不需要预测 ,但希望 理解生物机制”。
From B.Maher, Nature, volume 456, 2008
他们中的许多人想知道为什么他们应该关心深度学习在国际象棋、围棋和星际争霸中的进展,这是在谈论深度学习时通常强调的。事实上,对于一个典型的生物学家来说,很难看出星际争霸与活细胞有什么关系。人工智能努力构建的一般智能和生物学之间肯定有联系,但在文献中很少解释。当与生物学家交谈时,我通常会尝试给出更多令人赞赏的例子,说明深度学习解决了长期存在的蛋白质折叠问题。
Source
为什么生物学不喜欢预测
现在让我们简单讨论一下上面提到的关于深度学习的刻板印象。嗯,关于炒作我同意,但如果它提高了我们的生活质量,这是一个坏的炒作吗?具有讽刺意味的是,即使是为显微镜图像分析进行深度学习的生物学家也往往不喜欢和不信任深度学习,但他们不得不这样做,因为 a)这是一种宣传,b)与手动分割相比,它通过自动特征提取提供了更高的准确性。
This is how I feel talking Deep Learning to biologists
关于黑盒,任何机器学习都给你按照对你感兴趣的生物过程的重要性排列的特征,也就是说,你得到了这个过程的关键人物。如果你知道你的生物过程的驱动因素,你应该对这个过程有相当多的了解,不是吗?所以我一直不明白他们为什么叫它黑匣子。
现在我们来到生物学家和自然科学家心态的基石点。预测。由于这个词在这个社区名声不好,我尽量不在和生物学家交流时使用这个词。人们通常认为,在进行预测时,人工智能人员过于关注他们模型的准确性,而忽视了他们所研究过程的潜在机制。这有一些根据,但通常是一个令人难以置信的刻板印象。
不了解潜在的机制,怎么能做出好的预测呢?
如果一个模型可以预测,应该总有办法回滚它,看看模型里面是什么,以及为什么它会预测。或者,全基因组关联研究提供了一系列具有生物学意义的特征/基因,但它们不能预测疾病,这意味着它们不能用于临床,所以它们的选择方式有问题。如果基因不能用于临床,那么基于生物学意义选择基因又有什么意义呢?关心准确性,分析师间接关心潜在的生物机制。
在我看来,这种怀疑和保守主义减缓了生命科学中诸如古 DNA进化生物学 这些机器/深度学习/AI 基本缺席的领域的进展。我的预测是,强化学习可能是进化生物学计算分析的未来。
Reinforcement Learning bipedal organism walking
为什么医学是开放的
相比之下,和有医学背景的同事聊起来,感觉就完全不一样了。他们对 AI 非常热情和好奇,即使他们不完全遵循我对神经网络的推理。这种开放的态度部分是因为机器/深度学习/AI 已经存在,广泛用于(其中早期疾病预测是主要目标之一),并在癌症诊断的放射成像方面取得进展。Deep Mind 最近发布了一种令人印象深刻的临床应用算法,可以在 48 小时内早期预测急性肾损伤。
From Tomasev et al., Nature, 572, 116–119 (2019)
医学界对人工智能产生浓厚兴趣的另一个原因是,他们迫切希望利用一切可用的手段来帮助他们的病人。如果人工智能可以早期预测疾病,这是最重要的,因为我们没有时间深入研究潜在的生物机制。事实上,几次去诊所和看到痛苦中的人让我大开眼界,我当然更清楚地理解了为什么我要做研究。
摘要
在本文中,我们了解到机器/深度学习/AI 与传统的基于 p 值的统计方法相比,更具有 临床适用性 框架,因为它特别优化了对临床至关重要的 预测能力。尽管预测在生物界名声不佳,但当试图达到更高的准确性时,它不一定会牺牲生物学理解的深度。****
像往常一样,让我在评论中知道你最喜欢的生命科学领域,你想在深度学习框架内解决这个问题。在媒体尼古拉·奥斯科尔科夫关注我,在 Twitter @尼古拉·奥斯科尔科夫关注我,在 Linkedin 关注我。我计划写下一篇关于如何用深度学习检测尼安德特人渗入的区域的帖子,敬请关注。
为什么业务和产品应该始终定义数据科学的 KPI 和目标
原文:https://towardsdatascience.com/why-business-product-should-always-define-kpis-goals-for-data-science-450404392990?source=collection_archive---------10-----------------------
为什么企业或产品应该选择适合他们的 KPI,为什么研究人员应该选择满足企业或产品需求的数学 KPI。
关键绩效指标(KPI)是一种绩效衡量指标,用于评估所参与的组织、项目或产品的绩效。我们需要 KPIs & Goals,以便有一组所有相关利益相关者都同意的期望,这允许我们测量业务影响,并朝着单个结果进行优化。
在业务或产品(BP)团队已经建立的公司中,与数据科学(DS)的良好沟通是必不可少的。DS 团队需要两种类型的 KPI,一种来自 BP 方面,另一种由 DS 团队创建,以满足 BP KPIs &目标。在大多数情况下,DS KPIs 将不同于 BP KPIs。这反过来允许我们定义与之一致的 KPI。很多情况下,这些 KPI 不需要相同!
想象一下,你需要启动一个新项目或修复一个旧模型,但没有 BP KPI。你被告知尽你所能,反复迭代,直到找到一个合适的解决方案。然后你认为你已经弄清楚了 BP 的需求是什么,并为它制定了一个数学 KPI。
这就是为什么我不建议使用迭代过程来拟合 DS KPI 和不是来自 BP 的 BP KPI:
- 研究过程需要时间。
- 为了实现某个目标,研究人员可能会检查许多可能的解决方案。
- 实际上,这可能需要几周时间!
拥有 BP KPI 首先允许利益相关者达成一致,允许我们(DS)专注于满足业务需求的解决方案,最后它更加敏捷,因为它防止了没有明确定义的目标的不必要的长时间迭代。
"为了达到某个目标,研究人员可能会检查许多可能的解决方案."例如,假设你的利益相关者对分类器有意见,他们抱怨分类器更喜欢对某些类进行分类。有许多可能的解决方案,有些在时间或金钱方面很昂贵,例如注释更多的样本。其他的可以便宜一点;诸如过采样或欠采样、合成采样、影响类别权重或样本权重、推拉精度和召回等解决方案..
以下是描述某项任务、BP KPI 或目标以及如何将其转化为 DS KPI 的四个示例,请注意,这些数字是为了解释总体思路而编造的:
任务 1 :创建模型,预测房子是否有空调、t 型洗衣干衣机或热水锅炉等。
注:电力公司有每家每户电器的统计。
- 产品 KPI :匹配电子公司统计报表。目标:贴近电力公司的期望。
- DS KPI :精度,目标 : 81%。
- DS KPI :目标分布。目标:与电力公司报告相同。即,已知 40%的房屋具有烘干机。因此,我们在分类器上设置了一个阈值,这样 40%的房子都会有烘干机。
任务二:改善和优化公司各种场景下的管理费用支出
- 业务 KPI :华润。目标:减少 10%。
- DS KPI :标注能力。目标:使用相同的资源支持多两倍的客户端。
- DS KPI :批注速度。目标:提供一个能够将样品注释速度提高 3 倍的解决方案。即,更多的注释允许支持更多的客户端并获得更多的数据。
- DS KPI :关注最相关的标注样本。目标:减少 75%的不相关标注。
任务 3:帮助其中一个团队提高工作效率
- 业务 KPI :投产时间。目标:减少一半。
- DS KPI :精度、召回、任务完成时间。目标:创建一个解决任务的自动化流程,准确率 80%,召回率 90%,完成时间不超过 5 分钟。
任务 4 :基于异常检测创建信号警报
- 业务 KPI :客户投诉垃圾邮件提醒的次数。目标:减少 50%。
- DS KPI :误报。目标:只允许 1%的误报。
右度量的虚幻性
在某些场合,你会发现自己处于这样一种情况:产品、业务甚至销售向客户承诺某个产品的某个精确度。我知道有时这是不可避免的,但是,这里有一些关于为什么准确性不总是要考虑的适当 KPI 的争论。
不同的度量组合可以达到相同的精度。某个准确率高的模型,可以有高准确率,低召回率。另一个具有较低精确度的模型可以具有相似的精确度和较高的召回率。我假设大多数客户会选择第一个模型,因为它具有更好的准确性,然而,BP 的需求可能会满足于第二个模型,因为我们希望捕捉更多更精确的样本。
高精度并不能保证好的结果。例如,在图 1 中,我们看到了 4 个多类算法的比较,特别显示了准确性和 F1。如果我们只考虑准确性,算法 3 似乎是最佳候选,但是,由于相似的准确性和最重要的低召回水平,算法 1、2 和 3 不应被考虑,因为算法 4 捕获更多的样本。
Figure1: a comparison of accuracy vs F1 for 4 multi-class algorithms,
底线是准确性并不总是与我们的期望或 BP 的需求相关,选择正确的数学指标应该留给您的研究人员,即 BP 应该选择适合他们的 KPI,ds 应该将其转化为满足 BP KPI 的数学。
我提议的流程
下面的流程(图 2。)试图弥合 BP 和 DS 在工作关系、设定 KPI、验证 KPI 并最终交付一个大家都满意的解决方案方面的差距
Figure 2: a proposed flow for when working side by side with business and product
我们从紫色方框开始,BP 有一个新项目,他们定义了 KPI 和目标。DS 团队接受它们(粉色)并开始制定数学 KPIs &目标来满足 BP 的需求。一旦公式化,DS 应该与 BP 进行数学交流,以查看是否有比对。准备就绪后,DS 团队开始研究(橙色),对 KPI 和目标进行内部验证(黄色)。比如试图达到某个精度点。当 DS-验证步骤完成时,可交付物被传递给 BP 进行验证。BP 通过他们自己的验证阶段(青色),如果不成功,他们将它交还给 DS 团队进行另一次迭代,如果成功,则交付一个解决方案,每个人都满意(绿色)。在决定需要一个新的 KPI 或一个新的目标的情况下,这个过程从紫色的盒子开始,也就是说,这就像说“我们正在开始一个新的项目”。
我完全承认,一些利益相关方不会完全配合这一想法,可以相当肯定地认为,您将会听到以下评论:
- 定性的反馈就足够了,因此,我们不需要 KPI 和目标。
- 某个团队不擅长定义 KPI 和目标。这是产品的工作,以帮助这一点。
定性反馈可能不会很好地转化为满足原始需求的解决方案,此外,如果没有 KPI,当有多个利益相关者和无限数量的可能解决方案时,可能不可能有“完成的定义”。因此,建议联系产品团队,与他们合作定义这些指标。
我希望这些想法能给开始一个新项目或给你的产品添加新功能时出现的混乱带来一些秩序,为你节省一些时间,并希望有助于业务经理、产品经理、数据科学家和研究人员之间的复杂关系。
我要感谢我的同事 Sefi Keller、Samuel Jefroykin、Yoav Talmi 和 Ido Ivry 提供的宝贵意见。
Ori Cohen 博士拥有计算机科学博士学位,专注于机器学习。他领导着 Zencity.io 的研究团队,试图积极影响市民的生活。
为什么脑波强化器的发布是一件大事
原文:https://towardsdatascience.com/why-cerebras-announcement-is-a-big-deal-6c8633ffc49c?source=collection_archive---------28-----------------------
大脑的芯片可以成为深度学习的事实上的芯片
深度学习模型的最大问题之一是,它们变得太大,无法在单个 GPU 中训练。如果在单个 GPU 中训练当前的模型,它们将花费太长时间。为了及时地训练模型,有必要用多个 GPU 来训练它们。
我们需要将训练方法规模化到使用 100 个甚至 1000 个 GPU。例如,的一位著名研究员能够将 ImageNet 的训练时间从 2 周减少到 18 分钟,或者在 2 周内而不是 4 年内训练出最大和最先进的 Transformer-XL。他使用了 100 个 GPU 来完成这个任务。
随着型号越来越大,需要的处理器也越来越多。每当将这些模型的训练扩展到几个 GPU 时,都会有一些瓶颈会显著增加训练它们的时间。但有两个主要瓶颈阻碍了这一领域的发展:处理器之间的网络速度和每个 GPU 可以存储多少内存。让我们覆盖它们:
网络速度
网络的速度成为一个瓶颈,因为为了训练这些神经网络,你需要传递每个节点的梯度,以便算法可以找出如何更新其权重。像 Ring AllReduce 这样的算法通常用于同步不同节点之间的工作。芯片之间的通信速度如此重要,以至于 Nvidia 花了 68 亿美元收购了一家名为 Mellanox 的公司,以改善其 GPU 之间的通信。
GPU 内存
将模型扩展到多个 GPU 的挑战的第二部分是每个 GPU 拥有的内存量。神经网络可以消耗 GB 的内存,GPU 只有 MB 的片上内存。目前,为了解决这个问题,GPU 将神经网络存储在焊接在它旁边的外部存储器上。问题是外部存储器比片内存储器慢 10 到 100 倍&更耗电。
像谷歌的神经机器翻译这样的大型模型甚至不适合放在一个 GPU 外部存储器中。通常,它们必须被分散到数十个 GPU 上。这又增加了 10 到 100 倍的延迟。
因此,在每个 GPU 上存储权重和用于训练的数据集对于快速训练模型非常重要。它的内存越大,训练模型的速度就越快,消耗的能量也就越少。理想情况下,整个模型可以放在一个芯片上。
大脑综合方法
今天最快的人工智能芯片也是最大的,这不是巧合。面积越大,内核和内存就越多。问题是,今天制造芯片的工艺使用 ASML 制造的标准光刻机,其刻线尺寸约为 858 纳米,几乎与英伟达 V100 的尺寸相同。已经到极限了。
ASML machinery to produce chips of size of around 858nm²
脑波强化器用新方法整合了制造芯片的旧流程。脑波强化器所做的是将单个晶片构建成一个“巨型芯片”。它的新“芯片”包含总共 1.2 万亿个晶体管。这比 Nvidia 生产的最先进的 GPU 芯片高出 50 倍。更重要的是,随着所有这些芯片合并成一个大芯片,脑波强化器的芯片实现了它们之间更高的通信速度。它也有更多的内存!据报道,它拥有 Nvidia 旗舰 GPU 的 3000 倍内存芯片和 10000 倍 GPU 之前可以实现的带宽。
Cerebras’ co-founder Sean Lie and the Cerebras’ Wafer Scale Engine (WSE). It holds 400,000 cores and 18GB of memory
在 80 年代,有公司试图建造一个大的集成芯片,就像脑波强化器那样,但是他们失败了。这些公司由于缺乏资金而失败了。他们没有能够克服很多工程问题来做到这一点。脑波强化器做到了。
脑波强化器制造了有史以来最大的芯片,一个有整个晶片大小的芯片。Cerebras 的芯片(大晶片)仍然使用与旧芯片相同的方法来构建每个“单独的芯片”,但晶片是按部分“蚀刻”的。脑波强化器与 TSMC(制造商)合作添加额外的电线,所以所有的芯片一起工作,作为一个整体而不是单独的。为了制造晶片大小的芯片,脑波强化器克服了 5 大挑战:
挑战
1.划线之间的通信
首先,为了实现这一点,脑波强化器团队必须处理跨越“划线”的通信。通过与 TSMC 合作,他们不仅发明了新的通信渠道,还必须编写新的软件来处理超过万亿晶体管的芯片。
2.芯片产量
第二个挑战是产量。当芯片覆盖整个硅晶片时,该晶片蚀刻中的一个缺陷就可能使整个芯片失效。Cerebras 通过在整个芯片中添加额外的核心来解决这个问题,这些核心在晶片上的核心附近出现错误时用作备份
3.热膨胀
他们处理的第三个问题是热变化。芯片在工作时会变得非常热,但是不同的材料会以不同的速度膨胀。这意味着将芯片固定在主板上的连接器也需要以同样的速度热膨胀。他们发明了一种可以吸收部分温差的材料。
4.包装和制造流程
他们的第四个挑战是基本上与现有的服务器基础架构集成。没有人有工具来处理这么大的芯片。所以他们不得不为它建造包装,并创造一个新的生产流程。不仅如此,他们还开发了软件来测试这一切。
5.冷却
最后,一个芯片中的所有处理能力需要巨大的电力和冷却。比“更小”的芯片多得多。他们基本上是通过翻转芯片来解决问题的。冷却在芯片上的所有点垂直传递,而不仅仅是水平传递。
前方道路
在克服了所有这些挑战之后,脑波强化系统还有很长的路要走,这并不容易。在成为主流之前,他们仍然需要证明自己。他们开始向少数客户发布原型,客户需要一段时间才能在生产中使用它的芯片。
不仅如此,Nvidia 还为开发人员建立了许多工具,以便在多个 GPU 中创建和部署他们的模型。开发人员还需要时间来获得与脑波强化器的芯片相匹配的类似工具。但这种芯片将代表着向更大更好的神经网络迈出的一大步,也将是向建设 AGI 迈出的一大步。
为什么选择数据科学作为你的职业
原文:https://towardsdatascience.com/why-choose-data-science-for-your-career-ca38db0c28d4?source=collection_archive---------1-----------------------
数据科学已经成为一项革命性的技术,似乎每个人都在谈论它。被誉为“21 世纪最性感的工作”的数据科学是一个时髦词,很少有人真正了解这项技术。虽然许多人希望成为数据科学家,但权衡数据科学的利弊并给出真实的图景是至关重要的。在本文中,我们将详细讨论这些要点,并为您提供关于数据科学的必要见解。
Pros and Cons of Data Science
数据科学导论
数据科学是对数据的研究。它是关于提取、分析、可视化、管理和存储数据以创造洞察力。这些见解有助于公司做出强大的数据驱动型决策。数据科学需要使用非结构化数据和结构化数据。这是一个多学科领域,其根源在于统计学、数学和计算机科学。由于大量的数据科学职位和丰厚的薪水,这是最受欢迎的工作之一。这是对数据科学的简要介绍,现在我们来探讨一下数据科学的利弊。
数据科学的利与弊
数据科学领域规模庞大,有其自身的优势和局限性。因此,在这里我们将衡量数据科学的利弊。本文将帮助您评估自己,并在数据科学领域采取正确的措施。
a.数据科学的优势
数据科学的各种好处如下:
1.它很受欢迎
数据科学非常受欢迎。未来的求职者有很多机会。这是 Linkedin 上增长最快的工作,预计到 2026 年将创造 1150 万个工作岗位。这使得数据科学成为一个高度可雇佣的工作领域。
2.丰富的职位
很少有人具备成为一名完整的数据科学家所需的技能。与其他 IT 部门相比,这使得数据科学不那么饱和。因此,数据科学是一个非常丰富的领域,有很多机会。数据科学领域对数据科学家的需求很大,但供应不足。
3.高薪职业
数据科学是收入最高的工作之一。根据 Glassdoor 的数据,数据科学家的平均年薪为 116,100 美元。这使得数据科学成为一个非常有利可图的职业选择。
4.数据科学是多功能的
数据科学有许多应用。它广泛应用于医疗保健、银行、咨询服务和电子商务行业。数据科学是一个非常通用的领域。因此,你将有机会在各个领域工作。
5.数据科学让数据变得更好
公司需要熟练的数据科学家来处理和分析他们的数据。他们不仅分析数据,还提高数据质量。因此,数据科学处理丰富的数据,并使其更好地为他们的公司服务。
6.数据科学家声望很高
数据科学家让公司做出更明智的商业决策。公司依赖数据科学家,并利用他们的专业知识为客户提供更好的结果。这使得数据科学家在公司中占据重要位置。
7.不再有无聊的任务
数据科学已经帮助各行各业将冗余任务自动化。公司正在使用历史数据来训练机器,以便执行重复的任务。这简化了以前人类承担的艰巨工作。
8.数据科学让产品更智能
数据科学涉及机器学习的用途,这使得各行各业能够创造出更好的专门为客户体验定制的产品。例如,电子商务网站使用的推荐系统根据用户的历史购买记录向用户提供个性化的见解。这使得计算机能够理解人类行为并做出数据驱动的决策。
9.数据科学可以拯救生命
由于数据科学,医疗保健行业得到了极大的改善。随着机器学习的出现,检测早期肿瘤变得更加容易。此外,许多其他医疗保健行业正在使用数据科学来帮助他们的客户。
10.数据科学可以让你成为更好的人
数据科学不仅会给你一个伟大的职业生涯,还会帮助你的个人成长。你将能够拥有解决问题的态度。由于许多数据科学角色在 IT 和管理之间架起了桥梁,您将能够享受两个世界的优势。
b.数据科学的缺点
虽然数据科学是一个非常有利可图的职业选择,但这个领域也有各种各样的缺点。为了了解数据科学的全貌,我们还必须知道数据科学的局限性。其中一些如下:
1.数据科学是一个模糊术语
数据科学是一个非常笼统的术语,没有明确的定义。虽然它已经成为一个流行词,但是很难写下数据科学家的的确切含义。一个数据科学家的具体角色取决于公司所专攻的领域。虽然有些人将数据科学描述为科学的第四范式,但很少有批评者称之为仅仅是统计学的更名。
2.掌握数据科学几乎是不可能的
作为许多领域的混合体,数据科学源于统计学、计算机科学和数学。要精通每一个领域并在所有领域都成为专家是不可能的。虽然许多在线课程一直试图填补数据科学行业面临的技能缺口,但考虑到该领域的广阔性,要精通它仍然是不可能的。一个有统计学背景的人可能无法在短时间内掌握计算机科学,以便成为一名精通数据的科学家。因此,这是一个不断变化的动态领域,需要人们不断学习数据科学的各种途径。
3.需要大量的领域知识
数据科学的另一个缺点是它依赖于领域知识。一个在统计学和计算机科学方面有相当背景的人,如果没有其背景知识,会发现很难解决数据科学问题。反之亦然。例如,从事基因组序列分析的医疗保健行业需要一名具备遗传学和分子生物学知识的合适员工。这使得数据科学家能够做出经过计算的决策,以帮助公司。然而,来自不同背景的数据科学家很难获得特定领域的知识。这也使得从一个行业迁移到另一个行业变得困难。
4.任意数据可能会产生意想不到的结果
数据科学家分析数据并做出谨慎的预测,以促进决策过程。很多时候,所提供的数据是任意的,不会产生预期的结果。这也可能由于管理薄弱和资源利用率低而失败。
5.数据隐私问题
对于许多行业来说,数据是他们的燃料。数据科学家帮助公司做出数据驱动的决策。但是,流程中使用的数据可能会侵犯客户的隐私。客户的个人数据对母公司来说是可见的,有时可能会由于安全漏洞而导致数据泄露。关于保护数据隐私及其使用的伦理问题一直是许多行业关注的问题。
摘要
在权衡了数据科学的利弊之后,我们能够展望这个领域的全貌。虽然数据科学是一个有许多有利可图的优势的领域,但它也有自己的缺点。作为一个不太饱和的高薪领域,它已经彻底改变了几个行业,当考虑到这个领域的广阔性和跨学科性质时,它也有自己的背景。数据科学是一个不断发展的领域,需要数年才能精通。最后,由你来决定是数据科学的优点激励你把它作为你未来的职业,还是缺点帮助你做出谨慎的决定!
希望您喜欢我们关于数据科学利弊的文章。通过评论分享您的反馈。
必读-
许多其他大公司像脸书、亚马逊、优步都在使用它。看看— 数据科学使用案例
数据科学在教育中的重要性
可口可乐为何用 AI 打造智能自动售货机
原文:https://towardsdatascience.com/why-coca-cola-uses-ai-to-create-intelligent-vending-machines-ae97ce952082?source=collection_archive---------5-----------------------
智能自动售货机是一个噱头,还是人工智能的这种令人惊讶的使用有具体的商业原因?
每秒钟,可口可乐公司的 10,000 种饮料被消费掉,每天在 200 多个国家完成近 20 亿次销售交易。因为它有如此多的数据,你可能会认为可口可乐广泛使用人工智能来改善其业务。
你可能想不到的是,可口可乐用 AI 创造了智能自动售货机。越来越多的手机配备了触摸屏、无线连接和计算能力。
智能自动售货机是一个噱头,还是另一个失策(像新可乐,或者想在大热天冷饮多收费)?
或者人工智能的这种特殊用途是否有合理的商业原因?
Image courtesy of Freevector.com
可口可乐为什么需要 AI?
可口可乐公司生产了全球 3%的饮料。其独特的红白标识被世界上 90%以上的人所识别。
但保持这一领导地位需要付出艰苦的努力,需要在营销方面投入大量资金。几年前,可口可乐花在广告上的钱比苹果和微软加起来还多。
它依靠大量的数据来理解人们购买的原因。要弄清楚他们为什么改变,以及是什么让他们买得更多,需要更多的时间。如今,可口可乐拥有广泛的产品范围。成功主要在于让人们选择可口可乐而不是百事可乐的日子已经一去不复返了。
与运动鞋和奢侈时装等其他品牌意识的购买有相似之处。竞争产品之间可能有一些功能差异,但销售似乎不成比例地取决于对品牌的态度。
R&D 是可口可乐成功的关键,不仅仅是在产品方面,还包括对客户和品牌有效性的理解。后两者涉及的数据量是巨大的。与购买模式的关系很复杂,这也是可口可乐使用人工智能的众多令人信服的原因之一。
人工智能现在是可口可乐业务的基础,可口可乐公开承认这一点:
人工智能是我们所做一切的基础。
–可口可乐数字创新全球总监格雷格·钱伯斯
当然,在整个价值链中使用人工智能也有无限的机会,例如在分销、物流和制造领域。但像可口可乐这样的公司首先使用人工智能来改善客户和品牌体验。直接影响这些的业务功能才是 AI 最大的受益者。
什么是智能自动售货机?
可口可乐如何在自动售货机中使用人工智能有三个不同的方面。每个都反映了自动售货机实现的三个主要功能之一:
- 位于高需求位置的实体销售网点;
- 与忠诚客户的联系点;和
- 不同产品选择的展示。
每个功能的成功由不同的东西来衡量。理解这些数据并不简单。
例如,如何选择自动售货机的最佳位置,如何决定何时或是否移动它?你如何说服忠诚的顾客购买更多的饮料,并奖励他们这样做?你如何决定储备哪种饮料?
从很多方面来说,这是星巴克为其开设和经营的每一家商店所做的事情的缩影。但是,当然,在自动售货机旁没有工作人员做任何需要做的事情。
因此,一种看待它的方式是,一台智能自动售货机应该有很多你期望从商店得到的东西,但是是自动的。当你把它分解成所需的数据时,人工智能就开始有了某种意义。
可口可乐使用人工智能:确定自动售货机的最佳位置
再次使用星巴克的类比,决定自动售货机的最佳位置是可以建模的。这需要使用位置数据,如客流量、当地经济指标,当然还有竞争对手的信息。还会有大量来自其他机器的比较数据。
一旦机器安装完毕,理解销售数据是关键。它用于验证与预期相比,机器作为销售渠道的表现如何。对于这一点,仅仅知道特定时期的饮料销售是不够的。因此,连通性是一个可取的特性,允许销售数据直接传递给公司。
然而,星巴克和其他公司在评估一家商店的表现时,其影响力远不止于此。一项关键活动来自对交易更个性化的洞察。这就是忠诚度计划和应用程序的关键所在。
这就是智能自动售货机的第二个功能发挥作用的地方。但这只是可能的,因为不起眼的自动售货机是物联网的一部分。即它现在是一台连接的机器。
可口可乐使用人工智能:吸引忠诚的顾客
智能自动售货机应该与公司的忠诚度计划相结合。如果忠诚计划允许支付,机器应该不仅仅接受现金支付。这就是可乐自动售货机开始变得更有趣的地方。
在日本,使用“Coke On”智能手机应用程序的顾客在使用手机从机器上购买商品时可以获得积分。可口可乐从中获得了所有通常的忠诚度计划的好处,主要是客户偏好和购买数据。并且顾客因其对未来自动售货机购买的点数而获得现金价值奖励。
在澳大利亚等其他市场,可口可乐测试了一种不同的智能自动售货机。我再次被设计来鼓励和奖励忠诚,同时收集客户和销售数据。在这种情况下,顾客可以用他们的手机提前点饮料,并从机器上取饮料。
这种创新不仅仅是关于连接——这一次是电话和互联网。这也是关于机器上的数字显示器。
通过连接和显示,人工智能的机会进一步增加。这一次,可口可乐利用人工智能将自动售货机变成了一个完全成熟的“智能”设备。
可口可乐使用人工智能:展示可口可乐品牌和产品
自动售货机一直被用作突出的标志点,通过海报宣传品牌。最近,这些变得更加复杂。数字显示器允许在一个地方使用各种高质量的图像和视频。
可口可乐自动售货机走得更远,因为在实际的自动售货机智能。这个概念可以追溯到近十年前,该公司最初的“自由式”自动售货机。
第一台自由式机器允许顾客在很大范围内决定他们想要什么饮料。机器会当场做出准确的选择。因此,一台机器可以提供多达 200 种不同的基础产品,根据需要混合和分配每一种产品。
新一代的自由式机器有一个大触摸屏——比大多数家用电脑都大——当然还有一个移动应用程序。但它们也有许多休眠功能需要稍后激活,如音频功能和光学传感器。
有了这种硬件、连接和智能,可口可乐如何使用人工智能的未来机会似乎只受到想象力的限制。
不起眼的自动售货机已经成为一种智能设备,有可能与家里的任何东西相媲美。并且在这个过程中,为可口可乐提供了丰富的数据来源。
这不仅仅是数据的问题
好处不仅仅是生产饮料和收集复杂数据的酷功能。智能自动售货机展示了人工智能的另一个方面:个性。
在开发这些机器时,可口可乐与一家专业聊天机器人公司合作。
与聊天机器人互动的客户体验与从机器上购买饮料有许多相似之处。但是最初并不明显的是聊天机器人人格的概念。
最好的聊天机器人是基于对它们所代表的品牌的欣赏,以及最适合该品牌的个性而构建的。可口可乐在他们的智能自动售货机上复制了这一点。但它也增加了修改个性以反映机器位置的能力。
例如,大学校园里的一台机器可能具有“有趣”的个性。而医院里的同一台机器可能应该更冷静。
换句话说,可口可乐使用人工智能原理将客户体验的情感方面添加到自动售货机中。
可口可乐如何使用人工智能:总结和教训
乍一看,带有人工智能的自动售货机听起来像是一个噱头。也许脑海中会浮现出《迷失太空》中机器人的形象,劝威尔·罗宾逊多喝点可乐。
但是当你开始从商业角度分析自动售货机的功能时,情况就不同了。那么实现人工智能如何支持和改进它们就只差一步了。
可口可乐以多种方式在自动售货机中使用人工智能,以改善业务。从利用位置数据规划销售点,到提供创新的个性化客户体验,不一而足。
我们甚至还没有提到可口可乐自动售货机。比如测试瑞典客户对当地方言的认识。甚至还有增强现实的使用!
【www.aiprescience.com】本文最初发表于T5
为什么公司使用数据科学和分析来告知福利方案
原文:https://towardsdatascience.com/why-companies-are-using-data-science-and-analytics-to-inform-benefits-packages-5c0709db7ba9?source=collection_archive---------27-----------------------
员工福利待遇可以帮助候选人选择接受工作邀请或寻找其他工作。他们也可以考虑员工在一家公司呆多长时间,以及他们在那里有多开心。如果他们意识到其他公司提供更好的福利,而他们已经对自己的工作感到沮丧,他们可能会认为不值得继续留在这里。
您可能已经注意到一种趋势,即公司使用数据科学和分析来提高他们的福利待遇。让我们来看看为什么这对他们来说是一个如此吸引人的举动。
数据分析增加了个性化的可能性
对公司来说,想弄清楚员工会使用哪些福利并不总是那么容易。统计数据强烈表明,废弃的原因之一是因为福利待遇太过普通。来自 Welltok 的一份新闻稿显示,雇主们有工作要做,以满足他们的员工,特别是与健康福利有关的工作。
该报告指出,超过 60%的工人向他们的雇主寻求医疗保健各方面的支持。此外,56%的员工说他们得到了不相关的帮助,导致他们浪费时间和金钱。这可能是因为 84%的受访者说他们的公司提供通用程序。
折扣零售商沃尔玛是转向数据分析来指导和简化员工医疗保健决策的公司之一。它正在与一家名为的公司合作,该公司将仔细检查来自公共和私人医疗保健计划的数据,以找到最有效和最具成本效益的提供商。除了帮助员工找到初级保健医生,该系统还可以将他们与处理心脏病、产科等问题的专家联系起来。
分析提供了更好的工人赔偿案例可见性
数据科学也开启了工人赔偿索赔的潜力。围绕工人索赔的细节因州而异。例如,在宾夕法尼亚州,保险公司有 21 天的时间来决定是否接受或拒绝保险申请。一些保险提供商使用数据科学来汇编患者的病史,并寻找有助于他们得出索赔和进一步治疗结论的趋势。
采用这种方法能够对患者护理决策做出改进并发现警告信号。例如,一个分析系统可以标记有成瘾史的患者看到一个过去经常开阿片类药物的提供者时的情况。
从雇主的角度来看,公司可以深入调查导致人们提交工人赔偿文件的事件。如果该实体发现大量案例与某件设备、某个部门或一天中的某个时间有关,此类信息可能会促使他们进行内部调整,以降低受伤率。
数据科学提高了利益意识
利益利用是企业希望最大化的东西。如果他们提供很少使用的员工福利,这些公司浪费金钱,他们的员工可能会认为他们脱离实际。Evive 是一家总部位于芝加哥的公司,分析多种来源的数据,以了解哪些是他们客户的员工使用最多的。
这一目标还可以减少工人因不知道福利的存在而无法利用福利的问题。根据一项与一家食品和饮料公司相关的 Evive 案例研究,该公司希望增加教育网络研讨会的注册人数,帮助与会者了解特定福利决策的财务影响。
Evive 利用其技术来增强员工沟通平台,并发送关于即将举行的网络研讨会的有针对性的信息,这些努力得到了回报。例如,关于 HSA 基础知识的网上研讨会的注册人数增加了 339.1%,而出席率提高了 340%以上。
分析可以为公司选择提供信息
数据分析对于阐明哪些福利与员工不断变化的需求最相关也至关重要。据报道,Lacoste 使用一个名为 Open Blend 的数据分析平台来评估员工的福祉并接收实时更新,帮助公司了解什么最有助于员工保持积极性。
公司在决定提供新福利时也可以依赖数据分析。对于不太常见但或许应该更广泛提供的福利,这样做可能特别有效。一家宠物保险公司对 4000 多名投保人进行了调查,发现 70%的人认为如果面试一份新工作,一个宠物友好的工作环境是有吸引力的。
企业在挑选提供哪些福利或选择停止哪些福利时,不能再仅仅依靠假设。数据分析平台可以帮助企业筛选员工反馈或其他相关指标,最终使公司代表对他们的福利待遇选择更有信心。
更多的数据依赖应该刺激积极的变化
现在你应该很清楚为什么数据科学推动福利包对员工和公司都有利。当公司代表花时间分析各自的数据时,他们将更有能力定制他们的产品,以满足员工的需求。这样做增加了工人使用他们可以得到的福利的可能性。
然后,当员工觉得他们的雇主提供有吸引力的福利时,员工会更容易量化留在一个组织的福利,而不是离开它去寻找更好的机会。
类似地,如果工作场所定期对员工进行调查,以评估哪些有效,哪些无效,他们将能够做出有效的调整,让员工感到满意。
图片 via克里斯利维拉尼
为什么相关性可能对异常值一无所知
原文:https://towardsdatascience.com/why-correlation-might-tell-us-nothing-about-outliers-9409f324cb88?source=collection_archive---------10-----------------------
介绍
我们经常听到这样的说法:àla**x 和 y 之间有很高的相关性。这对于心理学、社会科学或经济学中关于人类或社会行为的所谓发现来说尤其如此。一个报道的 0.8 的皮尔逊相关系数在很多情况下确实看起来高,并且逃脱了我们对其真实意义的批判性评估。
因此,让我们看看相关性实际上意味着什么,以及它是否真的传达了我们通常认为它传达的信息。
受有趣的虚假相关性项目以及 Nassim Taleb 的 medium post 和 Twitter 咆哮的启发,他在其中哀叹心理学家(不仅仅是)对概率和统计的完全无知和误用,我决定复制他的笔记关于相关系数在高斯分布下传达了多少信息。
二元正态分布
假设我们有两个具有协方差结构的标准正态分布变量 X 和 Y
由于变量是标准正态的,相关性是𝜌=0.8.的如果我们听到有人报告说,智商和“成功”(不管它意味着什么)之间的这种相关性,这可能对我们大多数人来说听起来很有说服力。换句话说,给定 0.8 的令人信服的相关性,我们会倾向于相信“高”智商分数在大多数情况下会预测“高成功”。
这就是我们错的地方。让我们来可视化一下 X 和 Y 的二元分布:
Standardized Bivariate Normal Distribution with ρ=0.8
不确定性比例
为了理解相关性在数据分布域的不同区间告诉我们什么,让我们考虑在相关性结构𝜌下, X 和 Y 超过某个阈值 K 的概率与 X 和 Y 的概率之比塔勒布称这个比率为“不确定性比例”:
在继续评价𝜙(𝜌、 𝐾 之前,我们先来看看门槛 K 代表了什么:
Standardized Bivariate Normal Distribution with ρ=0.8 and probability threshold K=2
在上图中, K =2,阴影区域代表样本空间的子集,其中既有X>K和Y>K。
为了评价𝜙(𝜌, K ,我们注意到联合概率
解析积分是不可能的,所以我们不得不求助于数值计算。让我们看看我们如何能做它。
有了𝜙(𝜌, 𝐾 ,我们就密谋对付𝜌,并获得:
Information conveyed by correlation under the Gaussian distribution
结论
从剧情中我们可以看到的是, X 和 Y 的相关性所传达的信息表现的不成比例。从实践的角度来看,这意味着,例如,0.5 的相关性携带非常少的普通值信息(𝜙介于 0.1 和 0.3 之间)(最多两个标准差之外),并且携带基本上没有关于尾部的信息(即异常值或优于表现者)。换句话说,观察到一个相当于高的值为 X (例如 4–5σ),我们就不能宣称它预测一个高的 Y 。
回到塔勒布对心理测试有效性的攻击,上面得到的结果意味着,引用塔勒布的话来说,你需要一些东西来“解释”天才。
附:包含这篇文章所有代码的完整 Jupyter 笔记本可以在这里找到。
为什么数据分析在 21 世纪越来越流行
原文:https://towardsdatascience.com/why-data-analytics-is-gaining-hype-in-the-21st-century-b7b1ca289f09?source=collection_archive---------5-----------------------
数据科学和数据分析是今年的两个热门词汇。如今,数据对行业来说不仅仅是石油。数据以原始形式收集,并根据公司的要求进行处理,然后将这些数据用于决策目的。所有这些过程,都有助于企业在市场中成长。但是,谁来做这项工作呢?谁来处理这些数据?等等。一切都是由数据分析师和数据科学家完成的。
什么是数据分析?
数据或信息是原始格式。随着数据量的增加,为了找到有用的信息、做出结论和支持决策,对数据进行检查、清理、转换和建模已经成为一种需要。这个过程被称为数据分析。
数据挖掘是一种特殊的数据分析技术,它侧重于为预测而不是纯粹的描述目的进行建模和知识发现。商业智能涵盖了非常依赖聚合的数据分析,侧重于商业信息。在统计应用中,一些人将业务分析分为描述性统计、探索性数据分析(EDA)和验证性数据分析(CDA)。
EDA 侧重于发现数据中的新特征,而 CDA 侧重于证实或证伪现有假设。预测分析通过关注统计或结构模型来进行预测或分类,而在文本分析中,应用统计、语言和结构技术来从文本源(一种非结构化数据)中提取信息并进行分类。所有这些都是各种各样的数据分析。
因此,数据浪潮已经改变了行业运作的方式。随着大数据的出现,出现了对 it 实施高级分析的需求。现在,专家可以做出更准确、更有利可图的决策。
看起来混淆了数据科学和数据分析?
数据分析与报告
分析是一个人处理问题、寻找得到答案所需的数据、分析数据、解释结果以提供行动建议的互动过程。
报告环境或商业智能(BI)环境涉及报告的调用和执行。因此,输出会以期望的形式打印出来。报告是指以易于阅读的格式组织和总结数据以传达重要信息的过程。报告有助于组织监控不同领域的绩效并提高客户满意度。换句话说,您可以将报告视为将原始数据转换为有用信息的过程,而分析则将信息转换为见解。
1.商业理解
第一步包括业务理解。每当任何需求出现时,我们首先需要确定业务目标,评估情况,确定数据挖掘目标,然后根据需求制定项目计划。在这个阶段定义业务目标。
2.数据探索
第二步包括数据理解。对于进一步的过程,我们需要收集初始数据,描述和探索数据,并验证数据质量,以确保它包含我们需要的数据。从各种来源收集的数据根据其应用和本阶段项目的需要进行描述。这也称为数据探索。这对于验证所收集数据的质量是必要的。
3.数据准备
接下来是数据准备。从上一步收集的数据中,我们需要根据需要选择数据,清理数据,构建数据以获得有用的信息,然后集成所有数据。最后,我们需要格式化数据以获得适当的数据。在此阶段,数据被选择、清理并整合到最终确定的格式中进行分析。
4.数据建模
一旦收集了数据,我们就需要进行数据建模。为此,我们需要选择建模技术,生成测试设计,构建模型,并评估所构建的模型。构建数据模型以分析数据中各种选定对象之间的关系,构建测试用例以评估模型,并在此阶段对数据测试和实现模型。
5.数据估计
接下来是数据评估,我们评估上一步的结果,检查误差范围,并确定要执行的下一步。我们评估测试用例的结果,并在这个阶段检查错误的范围。
6.部署
分析过程的最后一步是部署。在这里,我们需要计划部署、监控和维护,我们需要生成最终报告并审查项目。在这个阶段,我们部署分析的结果。这也被称为项目评审。
我们称上述过程为商业分析过程。
数据分析的类型
有 4 种用于数据分析的技术
1.描述性分析
借助于描述性分析,我们分析和描述一个数据的特征。描述性分析处理信息的总结。描述性分析,当与视觉分析相结合时,为我们提供了一个全面的数据结构。
在描述性分析中,我们处理过去的数据以得出结论,并以仪表板的形式呈现我们的数据。在企业中,描述性分析用于确定关键绩效指标或 KPI,以评估企业的绩效。
2.预测分析
在预测分析的帮助下,我们决定未来的结果。基于对历史数据的分析,我们能够预测未来。它利用描述性分析来预测未来。在技术进步和机器学习的帮助下,我们能够获得对未来的预测性见解。
预测分析是一个复杂的领域,需要大量的数据、预测模型的熟练实施及其调整,以获得准确的预测。这需要精通机器学习的熟练劳动力来开发有效的模型。
3.诊断分析
有时,企业需要批判性地思考数据的本质,并深入理解描述性分析。为了发现数据中的问题,我们需要找到可能导致模型性能不佳的异常模式。
通过诊断分析,您可以诊断通过数据显示的各种问题。企业使用这种技术来减少损失,优化业绩。企业使用诊断分析的一些例子是
- 企业实施诊断分析以减少物流延迟并优化生产流程。
- 在销售中使用诊断分析来更新营销策略,否则会导致收入下降。
4.规定性分析
规定性分析结合了上述所有分析技术的洞察力。它被称为数据分析的最终前沿。通过描述性和预测性分析提供的细节,规定性分析允许公司基于这些细节做出决策。它大量使用人工智能来帮助公司做出谨慎的商业决策。
像脸书、网飞、亚马逊和谷歌这样的主要行业参与者正在使用规范分析来做出关键的商业决策。此外,金融机构正在逐渐利用这种技术的力量来增加收入。
数据分析的特点
我们已经看到了大数据的特征,如数量、速度和多样性。现在让我们看看数据分析的特征,这些特征使它不同于传统类型的分析。
数据分析有以下特点:
节目的
由于数据的规模,可能需要编写一个数据分析程序,通过使用代码来操作它或进行任何类型的探索。
数据驱动
它意味着由数据和程序语句驱动的活动的进展,描述匹配的数据和处理要求,而不是采取定义序列的步骤。许多分析师使用假设驱动的方法进行数据分析,数据可以使用海量数据来驱动分析。
属性用法
为了正确和准确地分析数据,它可以使用许多属性。过去,分析师处理数据源的数百个属性或特征,而现在大数据有数千个属性和数百万个观察值。
重复的
由于整个数据被分成样本,然后对样本进行分析,因此数据分析本质上可以是迭代的。更强的计算能力支持模型的迭代,直到数据分析师满意为止。这导致了为满足分析要求和时间框架而设计的新应用程序的开发。
数据分析的应用
以下是一些最受欢迎的数据分析应用——
欺诈检测和风险分析
在银行业,数据分析大量用于分析异常交易和客户详细信息。银行还使用数据分析来分析其客户的贷款违约者和信用评分,以最大限度地减少损失和防止欺诈。
优化运输路线
像优步和 Ola 这样的公司非常依赖数据分析来为他们的客户优化路线和票价。他们使用一个分析平台来分析最佳路线,并根据几个参数计算出租车费用的上涨和下跌百分比。
提供更好的医疗保健
在数据分析的帮助下,医院和医疗保健中心能够预测慢性病的早期发作。他们能够预测未来可能发生的疾病,并帮助病人采取早期行动,这将有助于他们减少医疗费用。
管理能源支出
公共部门能源公司正在使用数据分析来监控家庭和行业的能源使用情况。根据使用模式,他们正在优化能源供应,以降低成本和减少能源消耗。
改善搜索结果
谷歌等公司正在使用数据分析,根据用户的偏好和搜索历史向他们提供搜索结果。此外,像 Airbnb 这样的公司使用搜索分析为其客户提供最佳住宿。亚马逊还利用搜索分析向客户提供推荐。
物流优化
各种公司都在依靠大数据分析来分析供应链并减少物流延迟。像亚马逊这样的公司正在使用消费者分析来分析他们的需求,并毫无延迟地向他们发送产品。
如何得到更好的分析?
为了进行出色的分析,有必要提出正确的问题,收集正确的数据来解决问题,并设计正确的分析来回答问题。那么只有分析我们才能称之为正确的和成功的。所以,我们来详细讨论一下这个。
问题的框架意味着确保必须提出重要的问题和布局关键的假设。例如,新计划的目标是增加收入还是增加利润?这个选择导致了接下来的分析和行动的巨大差异。是否所有需要的数据都可用,或者是否有必要收集更多的数据?不把问题框住,剩下的工作就没用了。
对于一个伟大的分析,我们正确地构建问题。因此,这包括正确评估数据,制定可靠的分析计划,并考虑各种技术和实际考虑因素。
我们可以针对两个问题分析任何业务问题:
统计显著性
这个问题在统计学上对决策的重要性。统计显著性检验采用一些假设,并确定假设正确时结果发生的概率。
商业重要性
它意味着问题如何与业务及其重要性相关联。始终将结果放在业务环境中,作为最终验证过程的一部分。
成为数据分析师所需的技能
如果不讨论这些技巧,数据分析教程是不完整的。当今世界,对专业分析人员的需求越来越大。学术项目需要时间来适应和扩大规模,以培养更多人才。
如果组织缺乏熟练的数据分析师,所有收集的数据和创建的模型都没有用。数据分析师需要技能和知识来获得好的数据分析工作。
必须阅读数据科学家 vs 数据分析师——一个有前途的职业的热门辩论
要成为一名成功的分析师,专业人士需要精通各种数据分析工具,如 R & SAS 。他应该能够正确使用这些商业分析工具,并收集所需的细节。他还应该能够做出具有统计意义且对业务非常重要的决策。
即使你知道如何使用任何类型的数据分析工具,你也需要有正确的技能、经验和视角来使用它。分析工具可以为用户节省一些编程,但是他或她仍然需要理解所发生的分析。那么只有我们才能称一个人为成功的数据分析师。
没有分析专业知识的业务人员可能希望利用分析,但他们不需要做实际的繁重工作。分析团队的工作是让业务人员能够推动整个组织的分析。让业务人员花时间向上游销售分析能力,并改变他们管理的业务流程以利用分析。如果分析团队做他们最擅长的,业务团队做他们最擅长的,这将是一个双赢的组合。
数据分析的技术和业务技能
现在让我们讨论所需的技术和业务技能。
数据分析的技术技能—
- 包装和统计方法
- 商务智能平台和数据仓库
- 数据库设计
- 数据可视化和管理
- 报告方法
- 了解 Hadoop 和 MapReduce
- 数据挖掘
商业技能数据分析—
- 有效的沟通技巧
- 创造性思维
- 行业知识
- 分析问题解决
数据分析将在市场上获得新的推动。根据研究,到 2023 年,全球预测分析市场预计将增长 149.5 亿美元。那么,你还在等什么?现在,是时候利用大数据分析提升您的职业生涯了。现在,是时候用大数据分析来促进你的职业生涯了。
别忘了把你的给我们👏!
我为什么选择数据科学
原文:https://towardsdatascience.com/why-data-science-31508b87997?source=collection_archive---------25-----------------------
一个人从教学到数据的旅程
Attribution: Brent Dykes CC BY-SA 2.5
2018 年,我在旧金山湾区教高中物理。作为学校领导团队的一员,我们对当前迟到政策的有效性有一些疑问和担忧。我和一位同事朋友自愿收集一些数据来帮助推动调查和对话。我们对这个项目充满好奇和兴奋,希望增加轶事故事线和团队学生、员工、教师、家长和管理人员的直观理解。
当我们试图从我们神秘的学习管理系统中获取数据时,我们有一百万个问题:
这个变量到底是什么意思?我们对这些数据的假设是什么?这是怎么收集的?我们能相信这些数据吗?迟到被严重低估了吗?迟到次数最多的班级实际上是学生迟到率最高的班级,还是老师最致力于记录的班级?这是一种有效且合理的数据汇总方式吗?我们如何找出哪些是最重要的因素?
最终,我的同事朋友说:“如果我们在工业界工作,就会有人来帮助我们!”我们无法独自解决这些问题,利用这些数据集尽可能好地了解延迟的状态,并决定如何获取数据,以提高我们理解和跟踪模式以及评估计划的能力。
随着我花越来越多的时间在这些类型的项目上,我意识到我想成为那个人。这个人帮助人们回答问题,弄清他们正在努力解决的问题,帮助人们理解这个世界,并做出决策。我开始意识到,我越来越兴奋地在每个工作日来工作,参与这些项目。我加快了周末远足的速度,这样我就可以更快地回到家里研究数据。
在更深的层面上,我相信人类是天生好奇的生物。我最初的一些记忆包括我问我的父母一些很大的为什么和如何的问题,然后他们做出了很棒的教学动作:“这是一个很好的问题!我真的不确定…你认为我们如何才能找到更多信息?”我一定是一个疲惫不堪的孩子,不停地问问题。我一点也不知道,通过参与和支持提问,他们让我走上了调查生活的轨道,一种以数据为导向的生活。
作为一名数据科学家,我很高兴能够通过发现数据中的模式并以某种方式交流它们来帮助人们和组织自信地前进,而不仅仅是凭直觉,从而让世界变得更美好。我想帮助这个世界做出更好的决定。
最重要的是,我喜欢数据科学的跨学科性质。它利用了如此多的学术领域——信息系统和科学、统计和数学、计算机科学、通信和商业。它适用于从个人使用到政府、财富 500 强和全球组织等各种规模的行业。
尽管我喜欢帮助年轻人学会在数据中寻找模式,并就他们的信心和结论的有效性提出关键问题,但我想自己做这些创造性的分析任务。我喜欢设计越来越接近实现团队教育目标的学习体验,但我渴望更好、更可靠、更容易分析的数据,以及分析这些数据的时间和技能,以便随着时间的推移跟踪改进和评估课程。感觉上,容易分析的学生学习数据(阅读:多项选择评估)并没有很好地显示学生学习和技能的范围,特别是对于那些最近开始将英语添加到他们的语言技能中或历史上在学校学习困难的学生,但书面和非标准的评估使其难以提取模式。我想要一种方法,在时间有限的工作环境中,准确评估每个学生知道什么和能做什么,获得关于课程和教学的反馈,并为学生的成长提供有用的反馈。对我和我的教学团队来说,这是一个持续的斗争和平衡。我喜欢深入现实生活中杂乱无章的数据,也很高兴了解更多关于如何处理复杂的非结构化数据的知识,这样我就可以帮助人们和组织根据所有可用数据做出最佳决策。
就数据科学家的生活和职业而言,我认为有四个主要优势:
- 作为一名数据科学家,我将分析思维、好奇心、创造力以及沟通、同情和理解的人际技能结合在一起。
- 我进入了一个充满活力的领域,在那里总会有继续学习和成长的方法。
- 蓬勃发展和充满活力的在线和个人数据科学社区不断激励着我。
- 我通过帮助组织了解他们的挑战并做出有意义的改变来产生影响。
这似乎很好地利用了我的时间,也符合我的兴趣和价值观。
为什么是数据科学。
原文:https://towardsdatascience.com/why-data-science-326fe9031d89?source=collection_archive---------15-----------------------
或者,为什么我决定参加熨斗学校的数据科学沉浸式训练营。
每个人都喜欢维恩图,包括我自己。如果你不知道它们是什么,那么:
Source: me.
在我的记忆中有一个特别特别的例子。几年前,我看到(如果不是这个确切的,那么是它的某个版本)下面描述“数据科学”的文氏图:
http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram
…自从原版在网上流传开来后,还有其他人把自己的想法放到了上面。无论如何,读完之后,我回想起当时的想法,“这种式的描述了我的技能组合!”
让我们打开那种。
在大学里,我获得了统计学(学士)、经济学(学士)和商学(学士)的本科学位。显然,我真的很喜欢上学。我最终选择了三个专业,因为我即将获得经济学学位,那年春天,我在职业周的一个小组讨论会上了解了精算专业。我被描述的东西所吸引:有形的成就通常转化为职业发展,以及典型的甚至工作与生活的平衡。因此,我的总体规划转变为接受统计学和商业教育。
数学统计知识?检查。
大学毕业后,我去了一家当地的健康保险公司工作,担任初级精算分析师。然后,我逐渐获得了这个职业的最高头衔,被称为研究员 (FSA)。这需要考试考试更多的考试。通过所有这些考试通常需要六到十年的时间;花了我八个(我有没有提到我觉得我喜欢上学?).总的来说,我已经在这个组织工作了十多年。你在某个地方工作足够长的时间,你会情不自禁地掌握一些领域知识。
实质性专业知识?检查。
除了我的统计学和经济学学位,我还主修商业,专注于信息系统。这让我接触到了商业世界的技术工具,这真的引起了我的共鸣。数据库、Visual Basic 和 HTML 编程之类的课程,挠到了我工科预科(当时我以为自己想当工程师)入门编程课程开始的一个痒处。
我会在一份兼职工作中进一步利用这些工具,那份兼职工作是一项研究的数据录入员。我不断地修补和自动化 Access 数据库的一些部分,这些部分作为研究的数据收集应用程序。这反过来又导致了为同事的朋友构建自定义 Access 数据库应用程序的推荐。在随后的几年中,这已经发展到做一些事情,例如将 Tableau 前端与 Teradata 后端相结合,并将它们与同事开发的 Python 算法捆绑在一起,以创建动态应用程序。
黑客技能?检查。
因此,虽然我觉得我的技能触及了这三个不同的方面,但有一个方面我几年来一直感到欠缺(这就是我所说的的意思)!):
Source: http://sitn.hms.harvard.edu/flash/2017/recommended-machine-learning-helps-choose-consume-next/ | figure by Jeep Veerasak Srisuknimit
机器学习。
作为一名精算师,我认为我们的工作和技能与我所理解的“数据科学家”有很多重叠。我们通常使用(非常)大的数据集来构建分析和模型,以“预测”将要发生的事情。例如,健康保险精算学中的一个传统角色是预测一段时间内的最终索赔金额,甚至在我们看到来自医疗保健提供者的实际索赔文档之前。
在过去的几年里,我们目睹了“数据科学”作为一个实践领域的爆炸式增长,我觉得在我的职业发展中缺少的(这在数据科学家中非常重要)是现代机器学习中的深度和实践知识。
我的意思是,我已经完成了机器学习。如果你使用过 Excel 中的斜率函数:恭喜你,你已经运行了一次线性回归!但是在一个每周都有新算法问世的空间里,我感觉自己越来越落后了。
我更新工具箱的第一次尝试是参加由精算师协会提供的为期三天的预测建模训练营。虽然训练营提供了带回来工作的例子和灵感,但它并不能代替实际做有意义的工作(T2,T3)。当其他类似的训练营和研讨会出现时,我会去参加,并带着类似的结果离开。很多灵感,一些知识,但不是肌肉记忆或信心。
为了寻找继续填补这一空白的方法,我寻求了其他学习机会,比如 Coursera 和 DataCamp 课程。去年,精算师协会认识到需要更新其成员面对数据科学的技能(仅代表作者观点!)开始提供预测分析证书课程,我抓住了这个机会。我从 2018 年 4 月到 2018 年 9 月参加了该计划,并正式获得了证书。我学到了很多东西,我感谢它给了我知识的巨大基础。虽然我在将我学到的一些东西应用到项目中取得了成功(难道随机森林不是一个很棒的名字吗?),我还是患上了冒名顶替综合征。我是一个名字后面有字母和证书的人,但我仍然觉得不符合标准。
我觉得我还有很多要补上。Python 已经成为事实上的机器学习语言的选择。),而我刚刚完成的证书程序用的是 R(其实我很喜欢!).我曾经尝试过在项目中使用 Python,但从未以广泛或有意义的方式,主要限于小任务。因此,当我看到 2019 年 2 月底在丹佛举办的“Python 精算师训练营”时,我再次欣然接受。
在那次旅行前的几周,我在网上偶然发现了熨斗学校。老实说,我不记得我是如何到达那里的,但是,很明显,我留下来看看他们提供了什么,并对进行数据科学训练营的想法产生了兴趣。前一年,在与我们数据科学软件的培训师谈论他的背景时,他提到他毕业于纽约的一个数据科学沉浸式训练营。虽然我对这个想法很感兴趣,但我立刻认为这是不可能的。我什么时候去?我该去哪里?我全职工作!我有家庭!**
但是这一次有些不同。我已经完成了证书课程,但仍然觉得少了点什么。我意识到这是我不再冒充的最后机会。因此,我向 Flatiron 提交了一份申请,并开始了免费的训练营前期工作。
我去了 Python 训练营,并在抵达的当天通过 Zoom 进行了面试。参加 Python 训练营实际上帮助增强了我申请 Flatiron 的良好氛围。虽然训练营表面上是关于 Python 的,并且有很多很棒的内容,但也有很多关于精算师与数据科学发展这一主题的思想领导。我离开丹佛时,对有机会继续深入学习和实践 Python 并进一步发展我的机器学习能力感到兴奋。熨斗将是我追求这个目标的方式。
这就把我们带到了现在。我是熨斗数据科学沉浸式训练营的学生。这是我从未经历过的。恕我直言,我的其他训练营经历:
感谢阅读。请随意联系!|LinkedIn|GitHub
为什么是数据科学?
原文:https://towardsdatascience.com/why-data-science-4cb57814c0e7?source=collection_archive---------15-----------------------
关于职业转向数据的思考。
这个问题我被问过很多次。“数字营销怎么了?”“为什么不直接做一般营销?”“数据有什么好激动的?”嗯?让我们看看我能否回答这个问题,并分享我是如何走到这一步的。
首先,数字营销没有错,一般营销也没有错。我热爱数字营销,并以此为职业。我仍然喜欢它。但正如我经常遇到的那样,我有一个问题,却找不到答案。它让我开始了一个探索,而这就是这个探索的结果。这就是事情的症结所在,真的。
一个关键问题出现
在数字营销出现之前,我在一份工作中对公司网站上哪些内容可以更新,哪些内容不可以更新有疑问。它会不停地说“不”,却不给出原因。我真的想知道为什么,所以我决定参加一些课程,自己找出答案。我在 NYU 参加了 HTML、网络开发和多媒体方面的各种课程。我学到的东西完全改变了我的职业方向,因为我成为了 IT 部门和利益相关部门之间的桥梁。这一转变让我进入了数字营销领域。
另一个重要问题
几年过去了。我换了一份新工作,又过了几年。最终,我加入了一个分析团队,我们的任务是寻找更好地捕捉和分析数字营销工作的方法。正是在这里,我开始比以前更多地思考这些数据。一个问题浮现在我脑海中,困扰着我,因为我没有答案。我想知道在数据中是否有一个故事可以更好地帮助我回答这个问题。
我们有一个资源问题,这导致我们只能专注于我们最畅销的产品或需要推出的新产品。这意味着我们的中档产品很少受到关注,如果有的话。由于资源有限,这种情况经常发生。当你生产大量产品时,你必须根据资金和人力来确定优先顺序。但是我想知道…我想知道很多。我在数据中遗漏了什么,可以在不影响资源的情况下帮助利用这些产品吗?就像经常发生的那样,当问题困扰着我时,我会搜索很多,然后去学校。
在这种情况下,我的一名员工碰巧向我发送了她有兴趣在大会(GA) 上参加的数据分析研讨会的信息。当我在学校阅读其他选项时,“预测建模”这个词引起了我的兴趣。这是在对一个数据科学 101 研讨会的描述中。我需要参加。
该研讨会对数据科学家的工作和他们在行业中使用的工具进行了细分:他们使用建模和机器学习来分析和交流数据驱动的见解。这只是一个戏弄的信息,但这已经足够了。我想了解更多。
他们提到的一个工具是 python,我以前从未使用过。我想看看它是什么样子的,所以我选了 GA 的Python boot camp 简介。从那里,我后退一步,仔细考虑了一下。我觉得工具就在这里,帮助我理解数据试图告诉我更多的故事。但我还不确定下一步该怎么走。我研究了我的选择。与此同时,我参加了 GA 的其他研讨会,包括社交媒体战略规划和数字营销训练营。毕竟,我仍然有数字营销技能需要不断学习。
一个想法形成
数据科学和学习更多相关知识的话题在我脑海中挥之不去,就像一只耳朵虫。我无法摆脱探索数据中的故事和解开数据之谜的想法。我研究了在线学校,发现自己又回到了 GA,在这一点上,GA 开始感觉像是我的第二个家。GA 有两个数据科学项目,一个兼职和一个全职。虽然我还没有准备好离开我的工作,投入到沉浸式项目中,但我对它很感兴趣。因此,我参加了一个关于它的问答会议,并爱上了整个概念和方法。使用互联课堂令我着迷,以至于这个想法似乎一直困扰着我。不过,离开我的工作似乎太冒险了。仅仅为了得到帮助我回答问题的工具而离开我的工作真的值得吗?Eep!令人畏惧,我知道…
这里有很多东西需要思考。我权衡了利弊,列出了每一方的后续清单,以供审查。然后我有了一个想法,也许我应该先看看我是否能进入这个项目,然后再担心它的重大决定。所以我就这么做了。我申请并被录取了。只是我推迟了进入,这样我可以考虑更多。我的计划是利用这段时间刷新我很久很久以前学过的数学。
中断
当我在考虑这个重大决定的时候,我的工作生活发生了巨大的变化。我的公司经历了重组,我的部门被关闭了。这些事情发生了。你会想,嘿,时间刚刚好。直接进入数据科学。问题是,我需要一点时间。我在公司工作了十二年多,从零开始建立了这个部门。我也有员工要考虑。虽然我理解整合的业务决策,但我为失去的东西感到难过。
我花了几个月的时间去思考我真正想要的职业道路。当我这样做的时候,我陷入了上课的舒适区。是的,更多的课。感觉到一种模式?我通过 Coursera 拿了一堆。我最喜欢的是关于领导人物和团队和 SEO 的系列课程。这期间也抽时间打坐徒步,基本都是反思人生。此外,我在当地的图书馆扎营,做了大量的研究。最后,我不断回到数据,以及数据在任何事情中是如何使用的。但更重要的是,我对机器学习和建模非常着迷。我还被通过学习如何更深入地探究数据来发现创新想法的可能性所吸引。我终于明白了“我在等什么?”我联系了 GA,看看我是否可以开始下一次数据科学沉浸式会议。幸运是,答案是“是”
新方向
所以,是的,我花了一些时间来接受转行的想法。这没关系。如果你正在考虑进行这种转变,花点时间确定一下。做你的研究。提问。为你找到正确的前进道路。如果你准备好了,做出这一飞跃将会更有收获。
对我来说,我发现数据科学是一门比我想象的更丰富的学科。我爱上了它,现在渴望尽我所能去学习。我最喜欢学习的是自然语言处理。我以前从没想过用文字做数据。每当我把数据抛入多维空间时,我也会有一点点的兴奋。但这可能是我喜欢的科幻怪胎。无论如何,这是我进入数据科学的原因。我很高兴来到这里!我仍然不知道最初让我来到这里的那个问题的答案,但是我相信我现在有了帮助我到达那里的工具。我很高兴看到我现在可以用这些工具来解决这个问题以及更多的问题。
如果你想看看我的任何项目,它们都在 Github 上。干杯!
为什么数据科学是未来的职业
原文:https://towardsdatascience.com/why-data-science-is-the-career-of-the-future-b3ca18bb4fa3?source=collection_archive---------10-----------------------
数据科学家的角色现在是一个很热门的职业。它在市场上有持久的影响力,并为研究数据科学的人提供机会,为他们的公司和整个社会做出有价值的贡献。
以下六件事应该会让你意识到数据科学是未来的职业。
1.公司努力管理他们的数据
企业有机会从客户那里收集有关交易、网站互动等方面的数据。但是,根据金雅拓的 2018 数据安全信心指数,65%的受访企业表示,他们无法分析或分类他们存储的所有数据。此外,89%的人知道,如果他们能够正确地分析信息,他们将拥有竞争优势。
作为一名数据科学家,您可以帮助公司利用他们收集的数据取得进展,让这些数据在短时间内为他们带来回报。
2.新的数据隐私法规增加了对数据科学家的需求
2018 年 5 月,《一般数据保护条例》( GDPR)对欧盟国家生效。2020 年,加州将颁布类似的数据隐私法规。由于实时分析和负责任地存储数据的需求,GDPR 增加了公司对数据科学家的依赖。
GDPR 的一个方面是允许客户要求公司删除某些类型的数据,这使得公司必须了解他们在哪里以及如何存储这些信息。
在今天的社会中,可以理解的是,人们比过去几代人更担心将数据交给企业。人们知道数据泄露会发生,而且会有严重的后果。
公司再也不能不负责任地对待他们的数据了。而且,GDPR 和加州的数据隐私规则可能只是开始。数据科学家可以帮助企业以符合隐私规定的有益方式使用数据。
3.数据科学仍在发展
没有发展潜力的职业会停滞不前,这通常意味着这些领域的工作必须彻底改变才能保持相关性。在未来十年左右的时间里,数据科学似乎有大量的发展机会。由于它没有显示出放缓的迹象,这对于想进入这个领域的人来说是个好消息。
一个可能很快出现的小变化是,数据科学职位将变得更加具体。在一家公司担任数据科学家的人不一定与在另一家企业担任相同角色的人做同样的事情。
随着职称和数据科学职业变得更加具体,学习数据科学职业的人可以开始专业化,做对他们最有意义的工作。
KDnuggets 在 2017 年进行的一项读者调查发现,大多数受访者认为对数据科学的需求还需要几年才能达到顶峰,而这一事件的平均时间框架为八到九年。
4.数据科学家拥有抢手的技能
研究显示自 2011 年以来,94%的数据科学毕业生已经在该领域找到工作。数据科学职业非常适合未来的一个指标是数据科学职位的大幅增加。来自 Indeed.com 的统计数据显示,这些年来数据科学工作的数量稳步增长。
更具体地说,自 2013 年以来,他们的人数增加了 256%,这表明公司认识到了数据科学家的价值,并希望将他们加入他们的团队。
5.惊人的数据增长
人们每天都在生成数据,但大多数人可能根本不会去想它。根据一项关于当前和未来数据增长的研究,每天有 50 亿消费者与数据交互,到 2025 年,这一数字将增加到 60 亿,占世界人口的四分之三。
此外,2018 年全球数据总量为 33 吉字节,但预测显示,到 2025 年将增加到 133 吉字节。数据生产正在上升,数据科学家将站在帮助企业有效使用数据的最前沿。
6.职业发展机会的可能性很高
LinkedIn 最近将数据科学家选为 2019 年最有前途的职业。它荣登榜首的原因之一是这个职位的平均工资是 13 万美元。LinkedIn 的研究还考察了人们作为数据科学家获得晋升的可能性,并给职业发展打了 9 分(满分 10 分)。
当然,员工必须表现出主动性,抓住机会在数据科学职位上脱颖而出,但 LinkedIn 的结论表明,公司打算将数据科学家长期留在他们的团队中。如果企业认为数据科学家不适合他们未来的竞争力和繁荣,他们可能不会提供晋升。
不是一个时尚的工作
此列表展示了数据科学家角色与当今和未来业务需求相关的令人信服的原因。
如果你正准备去实地工作或者正在工作,有证据表明你应该对未来充满信心。
图像由 Rawpixel
重新审视数据科学项目失败的原因。
原文:https://towardsdatascience.com/why-data-science-projects-fail-revisited-85fe242c3931?source=collection_archive---------30-----------------------
机器学习对冲基金和避免过度简化的观点。
Photo by Markus Spiske on Unsplash
太多的数据科学项目在实践中失败。事实上,根据最近 Gartner 的研究,85%的人达不到预期。为什么?一般行业文献充斥着一些常识性的类型原因( Asay,2017;泰勒,2017; Veeramachaneni,2016 。
在批判性自我反思中,瑞士一家大型保险公司的前首席执行官,同时也是数据科学项目失败和成功的见证人,向我们解释了为什么数据科学项目有失败的趋势。根据他的说法,他们在一天结束时达不到预期,因为项目所有者经常开始寻找规定的解决方案或方法的问题,而不是他们打算解决的业务问题。他总结道,结果是让大多数项目干系人失望。同样,不走入马斯洛陷阱也很关键:如果你(选择)拥有的只是一把大肆宣传的数据科学锤子,那么每一个与数据相关的问题似乎都是钉子。与此同时,经理和企业领导人应该确保他们选择的问题与企业过度相关。
然而,作为应用机器学习的爱好者,它回避了一个问题,即问题和解决方案/方法之间的不匹配以及选择偏差是数据科学项目失败的唯一根本原因,还是只是它们的症状。更重要的是,我们认为细节决定成败,来自商界领袖的轶事证据或放之四海而皆准的解释并不能很好地解释不同案例和情况的特殊性。通过讨论为什么许多机器学习对冲基金失败的特例,这一点变得很明显,因为商业问题从一开始就不模糊,即风险和回报的优化。
机器学习对冲基金一瞥
对冲基金行业一直热衷于在早期采用分析和机器学习,应用量化策略来创造金融行业人士所谓的alpha——正回报,这通常是成功的数据科学项目的副作用。由于基于量化策略产生利润是对冲基金最可行的赚钱方式(没有其他产品/服务可以最终为当前和未来的成本或投资融资),这些量化基金的表现应该会引起那些参与大数据投资决策的人的兴趣。大部分都失败了。它们的平均寿命大约是五年。继《T2 金融时报》之后,在 2010 年底估计存在的 7200 家对冲基金中,有 1777 家在三年内关闭,这意味着大约四分之一的基金消失了。
机器学习基金失败也是因为同样的原因,任何其他新成立的风险企业都会失败。高估的收入、低估的成本、合规性、糟糕的招聘和培训实践、技术选择和运营(低效)效率。此外,这种特殊的投资公司还有其他频繁失败的原因。他们失败的原因是一些荒谬的事情,如错误的基金名称(Joenv RR&Tiu(2018)),但也因为更基本的方面,如错位的费用和激励结构,这一直受到沃伦巴菲特(约翰梅洛依(2017 )等投资者的公开批评。然而,最常见的是,缺乏稳定和高回报,人们可以称之为产品与市场不匹配,导致大多数基金破产。机器学习基金的受欢迎程度在于它承诺比平均水平更好。就像任何其他行业一样,大多数人表现不佳,但机器学习基金的不同之处在于,不能容忍表现不佳。这里的文化与大多数科技中心的文化相反,在那里失败几乎被美化。当量化基金失去投资者的信心时,它们会迅速解散,投资者几乎总是会损失一部分资金。
85%对 25%的失败率:向对冲基金学习,在数据科学项目中取得成功
如果一项战略没有奏效,我们和许多资本提供者一样对这一资产类别感到失望。然而,金融市场的彻底透明也有好处,有时会揭开数据科学中使用的相同工具和算法的神秘面纱。在金融市场上,没有人能躲得过。快速反馈是不可避免的,并且传递得很快。然而在现实经济中,项目经理当然也希望他们的项目成功,但是他们只能在项目的最后几周获得确定性。许多项目迭代的速度不够快,然后突然停止或者悄悄地宣布完成——以某种积极的方式结束。克服延迟反馈的工作方式,就像找到正确的顺序并适合方法和项目结果一样,是许多复杂且相互作用的构建模块中的一部分,这些模块可以使数据科学项目取得成功。因此,在我们看来,对数据科学项目失败的常识性原因的过度概括和排序是一种误导性的解释。这种方法表明故障原因是独立的,它们可以被逐个原因地消除或减轻。数据科学失败的复杂性仍有待驯服,我们喜欢纪念阿尔伯特·爱因斯坦的话— 一切都应该尽可能简单,但不是更简单。对复杂现象的简化,如数据科学项目,包括为什么许多项目失败的根本原因,将不会带来所追求的洞察力和项目治疗;但愿意从整体上进行讨论,鼓励跨行业交流经验,不管是好的还是坏的,最终都会实现。
关于作者
Daniel müller博士是 ITM 预测公司的数据科学家,帮助组织应用算法定价、仓库库存优化,并将组织过渡到机器学习时代。他还是 Spyglass Ventures 的联合创始人,他和他的团队管理着一个小型初创企业投资组合。
Christian Hugo Hoffmann博士是一位人工智能和金融科技企业家和研究员,是 B2B 风险管理软件公司 Syntherion 的联合创始人,也是苏黎世联邦理工学院创业风险主席的高级科学家。除此之外,他在列支敦士登大学的高管项目中教授金融科技,并定期在领先的杂志和报纸上撰写关于人工智能的文章。
为什么数据科学家需要更多的指导,但讨厌他们得到的指导
原文:https://towardsdatascience.com/why-data-scientists-need-more-direction-but-hate-the-directions-theyre-given-3b0bf386a74?source=collection_archive---------19-----------------------
Photo by Maksym Kaharlytskyi on Unsplash
每个人都知道,在大肆宣传之下,数据科学家在工作中苦苦挣扎。在某种数据科学会议之后,你可以去喝几杯啤酒,你会听到没完没了的抱怨:数据科学家经常被雇来成为有抱负的高管们的宠物和玩物,而这些高管几乎不需要他们的服务,甚至更糟糕的是,他们是内部分析地盘战中的某种“激光鲨鱼”超级武器。
结果是可以预料的。公司在不会产生任何结果或者不是他们想要的结果的项目上花了很多钱,数据科学家在他们的工作中感到沮丧,每周花几个小时寻找更好的。
即使有良好的意图,丰富的数据和潜在的商业机会,也有一些强大的侧风有可能将项目推离正轨。也许第一个是为数据科学家或数据科学团队设定方向的困难,以及这从一开始就锁定失败是多么容易。为了揭示这是如何出错的,首先有必要问一下谁真正决定了数据科学家在冲刺之间做什么。
那么方向应该由谁来定呢?
选项一:商界跳梁小丑
Photo by Rob Schreckhise on Unsplash
这其实是最接近正确答案的。拥有问题的人应该拥有解决方案。但很少有这种感觉。技术理解和语言上的鸿沟有时是巨大的,难以跨越。你如何从一位高管那里获得足够的指导来运行一个项目,这位高管的数据词汇以一个他们只能模糊理解的词开始和结束(“相关性”…我已经开始厌恶这个词),他在你面前摆动手指来描述他们期望“算法”找到的模式。
是的,我们知道它需要“成本有效”、“可靠”和“可部署”,并寻求“提高效率”,还必须“商业上可行”,具有“最大准确性”和“高可信度”,同时“不断学习和改进自身”。是的,谢谢,我要一个无麸质的,犹太的,双份培根芝士汉堡,热量减半。
有一次,当在预测性维护项目中寻找更具体的方向时,项目中的一位高级人员回答说:“我们正在寻找频繁的低影响事件和罕见的高影响事件。”坐在那里,带着一种“你已经得到了你的行军命令,为什么你在这里打扰我,却不遵守命令”的表情。你必须咽下这个显而易见的回答:“我认为你真正喜欢的是高频率、高影响力的事件。你只是假设它们可能不存在,所以你只是告诉我搜索整个剩余的可能性空间。谢谢,如果我不需要什么,我会打电话给你。”
像这样的僵局比比皆是。主管给出了一个方向。数据科学家呆呆地看着他们的脚,试图以某种方式推回去,或者问一些其他问题,或者解释为什么他们需要更多的细节。这种循环不断重复,很快高管就会觉得数据科学家没有在听他们说话,或者在挑战他们的权威或智慧。数据科学家觉得这位高管是个恶霸,是个白痴,或者两者兼而有之。
选项二:数据狂人
Photo by Erik-Jan Leusink on Unsplash
这些家伙知道他们的贸易,我们应该让他们设置正确的方向?不对。数据科学家对于如何在数据中发现有趣的见解会有很多想法。问题是过剩。将会有数以百万计的可能见解和有希望的线索出现,或者会增强结果的新功能或数据转换。单凭他们自己,他们永远也找不到合适的人来帮助企业。
给一个数据科学家全权委托几个星期,让他们用数据做他们想做的事情,在让他们下地狱之前,你会给他们几个星期的天堂。他们会带着成千上万行代码、几个有前途的模型和大量展示他们发现的情节回来。却发现他们用狡猾和天才获得的洞察力对业内其他人来说是完全显而易见的。
“是的,我们已经知道会发生这种情况,这是因为这种平凡的事情记录在其他一些数据系统中,我们没有给你访问权限。”
从数据科学家的角度来看,某样东西可能非常有趣,非常有前途,但从商业角度来看,它最终却毫无用处,原因有很多。事后看来,他们总是很明显。虽然我们想给出建议并让别人听到,但最终我们还是希望企业中有人来掌控方向,因为我们都受够了为我们采取的错误方向承担责任。
选项 3:充满希望的旁观者的整个宁静圈
Photo by Judith Prins on Unsplash
这个选项是最糟糕的,但是由于前两个选项的困难,它看起来出奇的普遍。
除了数据科学家和商业赞助者,房间里通常还有一堆其他人。主题专家、最终用户、IT 人员、财务人员、某种项目经理,通常还有其他观察者和跟班。不知何故,他们实际上相信,如果他们都来参加会议,并能够说出他们的一点点贡献或建议,那么数据科学魔法的一点点精神将以某种方式进入下一个 sprint 的模型(或数据科学团队正在做的任何事情),我们都会得到我们一直希望的结果。
当然,有一大群人参与进来提供建议和指导并没有错。但这并没有减少让一个人承担决定和拥有最终方向的责任的重要性。
如果你没有一个所有者,不可避免的结果是每个人都试图礼貌地同意,听起来有建设性。紧张和矛盾总是被掩盖起来。有人提到以“快速取胜”或“快速失败”为目标,每个人都非常明智地点头同意。不需要花太多时间来掩盖这个角度。随着讨论的进行,更多的问题被提出。缺失数据。插补方法。需要控制的可能的混淆变量。必须选择的时标或宁滨增量。对用户的一些可解释性要求。无论何时,最彻底、最明智的治疗都会得到最热烈的支持。“哦,是的……当然……我们必须这么做。“我们都很明智对吗?
那到底是怎么回事?!!
一般来说,当会议结束时,实际上什么也没有决定,但是每个人(除了数据科学家)都认为我们都在同一页上,这应该足以让数据科学家继续工作。
没有人拥有方向
这是我为什么讨厌大多数给我的指示的首要原因。没有人愿意真正拥有它们。他们为什么要这么做?数据科学项目早期的许多必要步骤都涉及到封闭死角。了解什么不起作用,以及它是如何不起作用的,这样我们就可以更好地了解如何找到有效的方法。我们不期望在早期阶段有很高的成功率,至少如果“成功”被定义为赞助商热切期待的那种可操作的、结论性的预测。
没有人想拥有一个不一定会成功的实验,所以每一个负面或模糊的结果总是被认为是数据科学家的想法。
如果不是因为许多结果的本质是失败的原因,或者成功的更大可能性,事后看来总是显而易见的,这就不是什么大问题了。为了缩小可能性空间,冒适度的风险总是必要的,但发现其中的空白部分从来不会被视为性感,甚至会被视为愚蠢。
方向是不可救药的宽广
我听到的大多数真正无用的指示,对说这些指示的商人来说,听起来清晰明了。像“优化回报”、“降低成本”、“提高效率”这样的事情是数据科学项目的良好起点,就像电影工作室的标志和广告歌是电影的良好起点一样。他们只是告诉你,你正在开始一部电影。关于这部电影,他们什么也没告诉你,绝对什么也没告诉你。
我猜想大多数机器学习算法本质上都是被编程来做类似“尝试一切并带回最佳结果”的事情。让数据科学家无休止地烦恼的是,他们周围的管理者似乎认为数据科学作为一个整体过程是这样工作的,甚至不需要对最佳结果的实际情况进行某种定义。
我经常有这样一种感觉,我不愿意依赖主题专家的指导来帮助缩小项目的焦点,甚至在数据中识别一个合适的标签来训练监督算法。人们普遍担心,让专家过多地参与这个过程会污染数据科学项目的纯粹性和客观性,或者选择一个目标在某种程度上缩小了可能有价值的选项。这听起来有点像:
“我们不想因为专注于专家所知道的东西而使结果有所偏差。让我们不要删除任何数据,保留选项…只是回来告诉我数据告诉我们什么。”
没有办法探测像这样的评论给数据科学家带来的沮丧程度。真实世界的数据有一种奇怪的趋势,那就是逃避或挑战每一个边界或对它的期望。“争吵”这个词很好地描述了我们努力使其处于一个可控的状态。无论你对数据做了多少清理和准备,总会有惊喜,以这样或那样的方式,它会从其他方面或维度中逃脱并变得难以处理。无论你问了一个多么清晰和具体的问题,你永远不会得到一个清晰的答案,也不会立即提出其他紧迫的问题。
从一个非常具体的目标开始,数据会反推,你会把它移到一个更好的,最终找到一个好的。把所有事情都摆在桌面上,试图缩小范围从来都没用。
这种想法是,保持所有选项开放,使用所有可能的方法,将所有数据纳入范围,将在某种程度上产生一种前所未有的非常有价值、强大的洞察力,这是我称为数据科学的“阿拉丁的灯”方法。
这是可笑的愚蠢,但非常普遍。数据科学家被雇来摩擦,而高管们则等待精灵出现,给他们表演歌舞,然后提出他们的三个愿望。如果他们事先仔细考虑过他们的三个愿望是什么,以及他们得到的会是什么样子,他们就会意识到所有的擦灯是多么可笑。他们可能还会发现,数据科学家实际上知道如何实现一些愿望,使用科学,而不是魔法。
一切都被期望是清晰和确定的
不要误解我,清晰并以此为目标是没有错的。在数据科学项目的某些阶段,目标数据和标签被很好地定义和理解,清晰度可能是好的,并且正在改善。但是它们是晚期阶段,大多数项目甚至还没到那一步就失败了。
但是对于大部分数据科学项目来说,需要对固有的、不可避免的不确定性有一定程度的适应,这在大部分时间里可以(也应该)感觉像是“发现”。作为澳大利亚数据科学领域的杰出人物之一,Eugene Dubossarsky 曾经将统计学描述为“对不确定性的严格处理”。我认为这是一个很好的短语。
严格对待不确定性绝对不同于去除不确定性并用确定性关系取而代之。
来自高级经理的许多请求没有意识到,在对他们来说容易理解的程度和随之而来的严格程度之间有一个权衡。你在呈现结果的方式上强加的 c-suit c-words 越多(清晰、明确、简洁等),我们对所有 r-words(严谨、可靠、健壮、可重复)的暴力就越多。当然,我们可以通过细微差别和复杂性得出一个清晰、简洁的结果,但这涉及到一系列可能合适也可能不合适的假设和近似。如果高管们花了足够的时间来正确理解他们,他们会感到震惊和震惊,并立即改变策略。相反,他们逃避所有的“技术细节”,比如说:
“理解结果是如何产生的不是我的工作,那是你作为技术专家的问题。我只需要知道结果是什么,这样我就可以解释为什么这对业务很重要。”
果不其然,在项目的后期,当一些结果被发现没有用或不可靠时,一些用于过早达到清晰水平的必要的任意假设被暴露,数据科学家承担了责任。
我经常被要求制作更少的有颜色、渐变和图例的有趣情节,而是使用更多的排名或得分列表。
“当然,我可以将整个复杂的分析简化为只有一种可能解释的单一维度。但是你到底为什么要这么做呢?”自然,他们想向所有利益相关者宣布一个明确的发现。或者可能指向列表的顶部,告诉数据科学家将他们所有的努力集中在那里(带着那种得意的表情,期望我称赞他们现在指导项目的技巧)。
数据科学家制作图表正是因为它们阐明了一些不能被简化为单一维度的重要关系。
是的,绘制数据仍然是数据科学,如果它有助于为业务决策提供信息,包括我们应该如何在下一个 sprint 中最好地指导工作。如果数据科学家能够协调工业行动,他们将拒绝为任何不愿花时间理解重要散点图的人提供使用神经网络或梯度增强决策树的模型。如果我们能做到这一点,生产率将会大幅提高,数据科学家也会对给出的方向更加满意,并且花更少的时间去寻找更好的工作。
怎么做比较好?
这可能并且应该占据更多的职位,但有几个要点:
- 确保一个人拥有 sprint 计划。不是委员会,也不是数据科学家。理想情况下,拥有你试图解决的问题的人拥有解决方案,以及构建解决方案的过程。
- 开始时尽可能精确地定义你的目标和绩效指标,但是当数据向你抛出曲线球时,要准备好改变它们(很多),这是必然的。从试图证明或衡量你认为应该是微不足道和显而易见的事情开始并不是一个坏的开始。然后设定更有趣的目标,一个冲刺一个冲刺,就像数据揭示的那样。适当的敏捷工作流程是必不可少的。
- 在数据科学项目中,技术和业务问题必然会深深地交织在一起。不要试图分开他们。任何优秀的数据科学家都会渴望更多而不是更少的主题专家的参与,这个愿望应该得到满足。高级人员可以而且应该参与进来,包括作为所有者,但是如果他们不精通技术,他们应该为 sprint 评审和计划安排大量时间,这样技术人员就可以在旅程中带着他们,或者委托给其他人。在整个项目中,要求“顶层”讨论与技术讨论分开总是以失败告终。
为什么数据科学家需要领导数据传播工作
原文:https://towardsdatascience.com/why-data-scientists-need-to-lead-data-evangelism-efforts-f433f7fac936?source=collection_archive---------24-----------------------
通过这六项计划启动数据传播
你上一次帮助别人完成他们自己可以轻松完成的请求是什么时候?如果您像大多数数据科学家一样,您可能必须相当频繁地处理临时请求。
最大限度减少此类请求的最简单方法是通过数据传播工作来教育和授权您的同事。每个组织都是不同的,取决于您的公司处于数据成熟度模型的哪个阶段,一个数据传播计划可能比其他计划有更高的投资回报。例如,如果您收到一个简单 SQL 请求的变体(例如,最近 x 地区的销售额是多少?),那么创建一个 SQL workshop 可能会证明是对您时间的极大利用。
除了让你的同事自给自足,数据福音也可以加强你的技术团队,促进你的工作意识。邀请人们在学习午餐或时事通讯的背景下分享他们的工作,是提高认识的好方法,并允许人们展示他们的知识。外部利益相关者也可以受益于对数据科学团队具体做什么以及如何帮助他们实现业务目标的更深入的了解。
作为一名数据科学家,您应该在传播您的数据和鼓励数据驱动的决策方面起带头作用。考虑到数据传播的重要性,以下是你可以在你的公司开始实施的六个计划。
1。研讨会
如果你发现自己经常处理一些简单的要求,这些要求可以通过一些基本的培训来完成,那么是时候考虑举办一个研讨会了。对业务线利益相关者进行 SQL 基础知识以及数据收集和存储机制的培训可能会为您节省大量时间。其他主题可能包括基本商业智能工具的概述,如潜望镜和 Tableau ,甚至是描述预测模型如何做出决策的基本知识的研讨会。这里的关键是让你的同事参与进来,教育和激励他们自己继续学习。在一周的特定时间安排办公时间可能是保持高参与度和创造时间回答问题的另一种有用方式。这样你也可以批量提问,避免在一周内转换上下文。
2.简讯
有了时事通讯,你可以关注内部话题(突出项目和内部团队更新),外部话题(行业趋势),或者两者兼而有之。有一种方式来交流你的团队正在做什么是提高意识和与公司其他人协调行动的好方法。同样,突出你所在领域的发展可能会让你直属团队之外的人提出一个值得探索的新颖想法。
3。研究论文俱乐部
当你开始工作时,很难继续学习并跟上最新的发展。这样,研究论文俱乐部可以作为一个有用的问责工具。它还可能会产生一些影响您的技术路线图的有趣想法。
4。 学习午餐
邀请内部或外部的演讲者是获得新观点的好方法,并为其他人提供一个平台来分享他们正在做的事情。目标可以是任何东西,从突出团队以外的人的独特见解,到引发有趣的讨论。
5。数据黑客马拉松
如果您想集体讨论可视化数据的新方法或构建预测模型的不同方法,向公司中的其他人公开您的数据可能会很有用。有时候需要一个不每天看同样数据的人来提出一个新颖的见解。
6。文档
教育同事的一个重要步骤是就经常出现的主题创建文档。当新队友加入时,这也将是一个无价的工具。
一种通过数据传播工作来教育和赋权员工的文化,将在未来许多年里获得显性和隐性的好处。有时候,简单的方法就是向业务利益相关者介绍生产中的模型机制,让他们了解它是如何发生的,而不是让他们认为这是黑盒魔术。随着透明度的增加,业务涉众可能会更愿意合作,甚至可能会提出一些您以前没有想到的新应用程序。以上列举的这些类型的努力将最终提高可信度和信任度。没有这两样东西,无论你的技术能力有多强,你影响公司的能力都会受到阻碍。
如果你对数据传播有其他想法,请在下面的评论中分享!
为什么数据科学家和研究人员需要了解产品管理
原文:https://towardsdatascience.com/why-data-scientists-researchers-need-to-understand-product-management-bbc92a232cf2?source=collection_archive---------31-----------------------
A field of Anemones, Ektar 100, Ori Cohen.
作为数据科学研究员学习产品管理的原因。
作为研究人员,我们的主要工作是理解数据。理解数据可能意味着很多不同的事情,例如数据分析、特征工程、算法开发、模型可解释性或可解释性、结果和错误分析等。
去年与产品部门的密切合作教会了我一些宝贵的经验。
我们应该与产品团队紧密合作。这听起来可能微不足道,但事实上,我们与产品的合作越密切,我们在公司中的影响就越大。你不想做那些可能被证明影响很小的项目,或者那些在面对客户方面设计得不巧妙的项目。对个人和公司来说,这只是一种资源浪费。
你应该学会用产品经理的语言和他们交谈。此外,你应该弄清楚什么是与项目经理合作的最佳工作流程,你可以在这里看到我的建议。最后,你应该理解产品管理背后的几个基本术语、理念&方法论。
PM 的世界大致分为以下几个主题:
- 产品策略
- 产品所有权
- 试一试
- UX
- 产品分析
产品策略:
这个主题关注权衡、优先级、路线图等。
- 产品战略、路线图 s、 youtube —了解全局。
- 区分特征列表的优先级
- 挑选正确的特征,忽略其他一切。
产品所有权
这个主题集中在讲故事,整理(用户故事),敏捷 vs scrum vs 瀑布,团队,演示,验收测试。包括日常工作方法和实践。
- 用户故事——“一个用户故事是,听着,一个关于你的用户的故事,“伟大的用户故事最好被视为产品团队中发生的对话的提醒。你们聚在一个房间里讨论一个用户和他们的需求,通过大量的测试,你们确定了一个特定的功能单元将会产生积极的影响,给你们的项目一些预定义的和很好理解的目标。”
- 解决方案树——“这是一种视觉辅助工具,可以帮助你找到最能集中团队精力的地方,同时确保你考虑到足够多的机会。”
- 特色工厂&如何突围 —约翰·卡特勒
- 结果 vs 输出,第二,交付结果而非输出,结果 vs 输出 vs 基于功能的产品路线图——“输出和结果经常用于产品管理和研究,以了解人们如何使用产品或服务。我们经常说,我们希望关注结果而不是产出,因为产出可能会误导人,没有影响力,甚至有害。产出和结果之间的区别在于产出是对已创造内容的衡量,而结果是基于已创造内容的绩效或成就水平。
- 关于项目经理的深入理论、人物角色以及你作为项目经理在知识和经验方面的地位。
- PM 工作方法和思路,第二
- 作为项目经理做出好的决策
- 研究预防性维护项目
- 产品需求文件
试一试
该主题关注产品的市场适应性(PMF)、定价、定位等。
- 移动指针 —当产品或功能产生影响时。
- 产品市场契合度、第二、第三、第四、第五——“这是一个初创公司打造了一个能创造显著客户价值的产品的终结游戏。”“这意味着你的产品能满足真正的客户需求,而且比其他产品更好”——丹·奥尔森
UI/UX
这个主题是一个独立的领域,不在讨论范围之内,因此,在这篇文章中,我不会关注它。
产品分析
这个主题集中在测量、度量和其他决策支持工具上,这些工具有助于你以后的构思,例如可用性测试、北极星度量、Dau、Mau 等。
- 商业分析&丹·奥尔森的产品
- 可用性,理解功能,思考目标,而不是任务!
- 北极星指标、第二、第三、第四由 amplitude.com、思森斯等人提出——“是衡量一个公司产品团队成功的关键。它定义了产品团队试图解决的客户问题与企业通过解决问题而获得的收入之间的关系。”
- 道茂等。
其他人
- 对早期创业的建议
- 管理 PMs
- 面试 PM 职位
我发现,作为一名数据科学研究人员,在某些情况下,人们期望我们提出产品想法。了解产品管理将有助于你做出更好的决策,并知道哪种技术可能会产生影响。使用最新学术研究成果的工具,可以帮助我们提出产品想法的工具,然而,在我看来,最好的结果是通过与项目经理合作来实现的。
请考虑阅读“破解 PM 面试”中的第一章的建议,它应该会整理一些我可能没有涉及到的细节。
我要感谢我的同事 Sefi Keller,他是一个了不起的项目经理,他帮助我在许多项目上合作学习这个领域,我还要感谢 Dor Sasson 对编辑这篇文章的宝贵帮助。
Ori Cohen 博士拥有计算机科学博士学位,主要研究机器学习。他是 TLV 新遗迹公司的首席数据科学家,从事 AIOps 领域的机器和深度学习研究。
为什么数据科学家应该加入演讲会
原文:https://towardsdatascience.com/why-data-scientists-should-join-toastmasters-d869e2a04d5d?source=collection_archive---------17-----------------------
Photo by Kane Reinholdtsen
公开演讲曾经是我的一大痛处。我能挺过来,但只是勉强。我真的恨透了它,它给我带来了巨大的痛苦。
不要让我开始即兴演讲——每当这样的事情突然出现,我都会感到非常害怕。
两年多前,我终于受够了,决定做点什么。我加入了我所在城市的一个演讲会小组。几个月后,我开始变得轻松多了。在俱乐部仅仅一年后,我实际上开始期待演讲,并面临即兴演讲的挑战。
想象一下,你是那种 自愿 在工作中做报告、向人群演讲或者即兴祝酒的人。想象一下 期待 在婚礼、会议或其他活动上发言。想象一下,当你进入一个挤满了你不认识的人的房间时,你会非常舒服。在我开始参加演讲会之前,我曾经认为喜欢这种东西的人来自另一个星球。现在,我觉得我自己也快成功了。
一个数据科学家为什么要在意说话技巧?
有许多数据科学特有的理由认为说话是一项最重要的技能。
- 沟通结果是工作的核心部分
是的,作为数据科学家的一部分是拥有数学、统计、机器学习、编程和领域专业知识的技能。
但是,技术技能并没有接近全貌。你可能擅长数据分析,但是如果你不能将你的结果与他人交流,你的工作就毫无用处。你最终会产生伟大的分析,但却永远不会实现,因为你没有正确地向任何人解释它的价值。
- 在数据科学求职中获得优势
要得到一份数据科学家的工作,几乎总会有一个面试环节,你必须发言并回答你事先没有准备的问题。即使你的简历和作品集看起来很棒,如果你面试失败了,你将很难被录用。一次出色的面试可以让你领先于那些可能有更好简历的人。
- 获得优势地位
如果你是一个自信的演讲者,从你现在的职位得到提升会容易得多,你也会更喜欢新的职位。高级职位(如职位名称中有主任、主任或高级的职位)通常更重视沟通技巧,而不太重视具体的技术技能。如果说话不舒服,在这种职位上很难表现出色。
- 更好的联网和连接建立
作为一名数据科学家,您可能需要与组织内外的多个团队合作。你需要获得他们的信任和支持。您还需要在这些团队之间交流信息。更好的口语帮助你做到这一点。
- 它让你成为更好的思考者/学习者
我的演讲会的座右铭是“更好的倾听, 思考 ,和演讲”,因为演讲的很大一部分是学习如何组织你的思想。正如乔治·霍勒斯·拉蒂默在他的书 中所说的,一个白手起家的人写给他的商人儿子的信 :
“一车杂七杂八的东西在你脑子里晃荡,在运输过程中弄得一团乱,这两者之间有着天壤之别,同样的东西用适当的盒子包装,以便于搬运和立即交付。”
准备一次演讲迫使你组织你的想法,理解你想法背后的原则。心理学家将此称为“结构构建”或“规则学习”。《坚持到底》一书指出,有这种提取原则习惯的学习者比那些把学到的一切都当成表面价值的人更成功。
这对于数据科学家来说尤其重要,因为我们需要发展专业知识的学科范围极其广泛,而且我们的领域在不断发展。为了管理这些大量的信息,我们必须有高效的学习习惯。
- 这是一项基本技能,它能让你在数据科学职业生涯之外受益
演讲是一个很好的例子,无论你做什么都会有回报。因为它深深地渗透到你的个人和职业生活中,开发它的投资回报率是巨大的(这一类别中的其他技能包括写作和销售)。
考虑你生活中与他人交谈的所有非职业场合(例如,你的配偶、孩子、父母、家人、熟人、社区团体)。提高你的口语会让所有这些互动更有成效。
说话是产生 80%结果的 20%(参见80–20 法则)。值得你花时间。
为什么是演讲会?
即使你可能同意提高你的公开演讲技巧对一个数据科学家来说是一个不需要动脑筋的投资,你可能会疑惑:为什么演讲会是最好的方法?
以下是我的一些理由:
- 它训练几乎所有你会遇到的公共演讲类型 。演讲会是一个经过多年精心设计的系统,涵盖了公众演讲的许多方面,包括正式演讲、即兴演讲、商务会议、向他人提供反馈、祝酒、介绍演讲者、颁奖、交谈等等。
- 它给你一个安全的地方去崩溃和燃烧,从而帮助你粉碎你的恐惧。公众演讲产生如此多的焦虑,是因为我们害怕在别人面前失败:看起来很傻,忘记了自己要说什么,找不到话说,说得太快,太慢,说话单调,无聊,紧张;这样的例子不胜枚举。演讲会给你一个在安全的环境中面对这些恐惧的机会,失败是可以接受的。当你经常这样做时,恐惧会越来越弱。很难相信如果你极度害怕公开演讲,但最终它会变得有趣。
- 遇见了不起的人。演讲会会员不是普通人——他们通常雄心勃勃,聪明,有着有趣的职业/生意。他们是很好的学习对象,你的人际网络中也有他们。
- 交一辈子的朋友。随着年龄的增长,交新朋友变得越来越难。现代科技不断迫使我们独自呆在家里,这让情况变得更糟(比如网飞、YouTube)。演讲会是解决这一问题的解毒剂——不可避免地,你会非常了解你的演讲会同伴,并在你一周又一周地参加会议时形成牢固的纽带。
- 到处都是。事实上,无论你去哪里,都会有一个你可以加入的演讲会。如果你搬到一个新的地方或者休一个长假,你可以相信有一个演讲会组织会接纳你。
- 真便宜。演讲会的费用因俱乐部而异。总的来说,考虑到替代演讲者培训的高成本和你获得的巨大价值,这是非常便宜的。
它是如何工作的?
每个演讲会做的事情都有一点不同,但是都使用相同的基本构件来让你成为更好的演讲者:
- 角色
在每次会议上,都有一个你可以扮演的可能“角色”的列表。这些角色中的每一个都训练了不同的公开演讲技巧。例如,“语法学家”观察每个人的语言和口才,“语言大师”监控所有的“嗯”、“嗯”、“喜欢”、“你知道”等等。有一个“桌面主题大师”的角色,你可以向成员们提出他们事先没有准备的随机问题(这是一个非常有价值的培训练习,尤其是对于工作面试)。这里是我所在俱乐部的角色列表。
- 准备好的演讲稿
有很多机会练习准备好的演讲。演讲会为你提供手册,列出各种要准备的演讲,让你练习公开演讲的不同方面。你按照自己的节奏做这些演讲。
你不一定要做演讲会训练手册上的演讲——你也可以练习你必须为工作或特殊事件所做的演讲。
- 评估
反馈对改进至关重要,但不幸的是,你并不经常得到反馈。在你的工作演示结束后,人们可能会说“干得好”或“谢谢”,但仅此而已。
在演讲会中,每个人都会从其他会员那里得到关于他们表现的详细反馈。这种反馈就像金子一样,让你看到自己的优势和劣势,让你以更快的速度进步。
成交建议:今天开始
一般来说,我会努力让自己的生活没有遗憾,但是如果有一件事我可以回到过去,对十几岁的自己说,那可能是:“加入演讲会。现在。”
我很高兴我的公开演讲现在是一项资产而不是负债,但有一点沮丧的是,我没有更快地投入进来。想象一下它会带来多少机会。想想我可能有的经历。想想那些年我本可以避免的所有紧张和情绪不适。
所以你至少应该试一试。在谷歌上搜索附近的演讲会团体,告诉他们你愿意作为嘉宾参加(他们会很高兴收到你的来信)。
如果你的经历和我一样,你会后悔没有早点开始。
最初发表于【www.marknagelberg.com】。你可以在推特上关注我 这里 。要访问我共享的 Anki deck 和 Roam Research notes 知识库,以及关于间隔重复和提高学习效率的技巧和想法的定期更新, 加入“下载马克的大脑”。
为什么数据科学家还是不会编码。
原文:https://towardsdatascience.com/why-data-scientists-still-cant-code-b21d6434e238?source=collection_archive---------22-----------------------
免责声明:不是所有的数据科学家都写,甚至不应该写生产级代码。他们是否应该最终取决于环境。但是如果他们能做到,这将使这个领域变得更好。
常识会让你认为数据科学家把大部分时间花在建模和评估这些模型上。这是一个谎言。对于许多数据科学家来说,他们的大部分时间都花在开发数据管道上,数据管道是机器学习的必要前提。这种管道不是凭空出现的,如果不使用一些第三方即插即用、拖放套件,它们就是编码的。因此,这些管道的代码必须符合标准。
然而,技术人员越来越意识到数据科学家不能很好地编码。这种观点既有效,又令人担忧,而且完全不令人惊讶。虽然数据科学家编写的大部分代码是针对 EDA 片段、快速原型和一次性分析的,但如果他们工作得当,相对重要的一部分代码将会发布到产品中。不幸的是,看到 prod 发布的代码经常是以一种从一次性分析思维模式中得出的方式编写的,与产品级的标志相去甚远。事实上,有时代码非常糟糕,以至于运营团队会拒绝交付它。
那么,为什么数据科学家不能很好地编码呢?
- 数据科学家来自广泛的学术领域,其中许多缺乏编写高质量代码所需的技能。必要的技能包括软件工程的原则、编程范例、干净的编码技巧(Python 的链接)、测试、日志记录和插装、文件夹结构约定、版本控制,如果您想涉足 DevOps 领域,还有更多。除了计算机科学之外,数据科学家所属的学科——通常——更倾向于奖励产生预期 输出的代码,而忽略代码本身是意大利面条还是写得好。这树立了一个不好的先例,并且是一个延续到现实世界的有害观点。
- 由于 数据科学是一个定义如此模糊且包罗万象的术语,从拥有深度学习博士学位的人到敲碎 Tableau 仪表板的人,每个人和他的狗都决定改变他们的 LinkedIn 头衔,因为这个术语仍然流行。这是什么意思?与“如果它像鸭子一样走路,像鸭子一样嘎嘎叫,那么它一定是一只鸭子”的鸭子类型测试不同,缺乏技术知识的管理人员认为数据科学家不是他们,而不是他们是什么,因此使他们的技能组合负担过重,导致需要多学科解决方案的问题的低质量实施。
- 网络效应和新生市场。从技术的角度来看,数据科学家的优势和劣势转化为对 DS 项目管道的各种子组件的更深或更浅的理解。对于更有经验的团队来说,管道是一台机器,并且对每个子组件的关注点进行了明确的分离,每个子组件都由各自的专家负责监督。这样的操作通常会有要求“干净代码”的有能力的开发人员;每个人都必须拿起他们的编码游戏。对于缺乏经验的团队来说,即使在最好的情况下,一个运行良好的管道也是难以捉摸的。有太多的未知的未知。当前形式的数据科学领域不成熟,缺乏健康的工作方式监管,因此,数据科学家雇佣的数据科学家符合他们自己的一套技能,很少去完善团队管道中的薄弱部分。由于许多数据科学家是不称职的开发人员,你最终会被不称职的开发人员雇佣,因为他们不知道更好的方法,尽管一个团队可能由许多优秀的 ML 建模人员组成,但他们对编写高质量、可维护的代码一无所知。
- Jupyter 笔记本的通用性。作为 DS 使用笔记本的坚定支持者,我很痛苦地把这作为一个主要原因。如果使用得当,笔记本可以成为展示 EDA 成果的绝佳模型,也可以作为快速原型开发的平台。然而,关于这种笔记本使用的最佳实践很少被发现,我已经见证了太多杂乱的、半成品的笔记本实例,它们没有注释、不优雅、难以阅读的代码,总是由一个人编写的(分布式版本控制对于笔记本来说是非常困难的,因为它们基本上都是巨大的 JSON 文件)。不像完全成熟的 ide,没有符合 pep 8 标准的代码清理提示。
请继续关注第 2 部分,其中介绍了开发数据科学管道的最佳实践。
为什么在训练神经网络之前应该对数据进行规范化
原文:https://towardsdatascience.com/why-data-should-be-normalized-before-training-a-neural-network-c626b7f66c7d?source=collection_archive---------2-----------------------
为什么 Tanh 通常比 Sigmoid 表现更好
Photo by Clint Adair on Unsplash
训练神经网络的最佳做法之一是将数据标准化,以获得接近 0 的平均值。标准化数据通常会加快学习速度,并导致更快的收敛。此外,在神经网络的隐藏层中,(逻辑)sigmoid 函数几乎不再用作激活函数,因为 tanh 函数(以及其他函数)似乎更优越。
虽然这可能不会立即显现出来,但有非常相似的原因来解释为什么会出现这种情况。双曲正切函数非常类似于逻辑 s 形函数。但是,主要区别在于,双曲正切函数输出介于-1 和 1 之间的结果,而 sigmoid 函数输出介于 0 和 1 之间的值,因此它们总是正的。
我几乎找不到任何文章解释为什么这能加速训练。我能找到的解释要么太肤浅,没有更多的上下文很难理解,要么就是错误的。所以我决定深入挖掘,根据我的发现写这篇文章。
我们将首先看看 sigmoid 和 tanh,然后我们将根据我们的发现讨论归一化。
场景设置:Tanh 和逻辑 s 形
显然,在神经网络中使用的激活函数比 tanh 和 sigmoid 多得多,但现在我们只看一下两者之间的区别。(注意,严格地说,双曲正切函数也是 sigmoid 函数,但是在神经网络的上下文中,“sigmoid”函数通常指逻辑 sigmoid。所以我在这里遵循惯例。)
让我们快速地看一下这两个激活函数和它们的导数,以便搞清楚基本情况。
双曲正切函数及其导数如下所示:
tanh function and its derivative
如你所见,tanh 函数以 0 为中心。它的值范围从-1 到 1。它可以表示为
另一方面,sigmoid 函数及其导数如下所示:
logistic sigmoid and its derivative
逻辑 sigmoid 的值范围是从 0 到 1,因此总是正的。它可以写成:
如果比较两者的导数,可以发现双曲正切函数的导数往往比 sigmoid 的导数大得多:
Comparison of sigmoid and tanh derivatives
当我们看一下在梯度下降过程中发生了什么时,这将变得相关。
Tanh 和 Sigmoid 作为激活函数
在神经网络中,一层中节点的输出用作下一层中节点的输入。因此,激活函数决定了下一层中节点的输入范围。如果使用 sigmoid 作为激活函数,则下一层中节点的输入范围将全部在 0 和 1 之间。如果您使用 tanh 作为激活函数,它们的范围将在-1 和 1 之间。
现在,让我们考虑一个用于二元分类的神经网络。它有一堆隐藏层,输出层中的一个节点具有 sigmoid 激活函数。对于我们的讨论,我们现在对所有这些隐藏层中发生的事情不感兴趣,我们只对输出层中发生的事情感兴趣。所以让我们把其他所有东西都当作一个黑盒:
Neural Network with one output node — rest of network is treated as black box
根据我们在最后一个隐藏层中使用的激活函数,输出层中节点的输入会有所不同。
由于我们在输出层使用 sigmoid 函数,网络的最后一部分基本上是一个逻辑回归。该节点接收来自前一层的一些输入,将它们乘以一些权重,并将逻辑 sigmoid 应用于该结果。
为了理解为什么 tanh 比 sigmoid 更好,我们需要看看在梯度下降过程中发生了什么。因为我们的输出节点主要执行逻辑回归,所以我们可以通过查看逻辑回归的梯度下降来简化事情。
梯度下降过程中会发生什么
对于二元分类,我们通常使用二元交叉熵作为损失函数:
其中,𝑎是我们的模型对于特定训练实例的预测输出,而 y 是真实的类标签。
对于逻辑回归(因此对于上面例子中的输出层也是如此),损失函数 L 相对于权重 wᵢ 的导数等于
其中 y 是真实类别标签 xᵢ 是对应于权重 wᵢ 的输入特征。
对于每个权重 wᵢ ,偏导数的第二项,(a-y)将是相同的。不同权重的梯度之间的差异仅取决于输入 xᵢ 。如果输入都是相同的符号,梯度也将是相同的符号。
因此,当使用 sigmoid 作为前一层节点的激活函数时,节点的权重可以在梯度下降的单个步骤中同时增加或减少。节点的一些权重增加而另一些权重减少是不可能的。
如果权重向量需要改变方向,它只能通过“之字形”来实现:向权重添加和移除不同的量,直到完成方向的改变。这是非常低效的。(我们将在后面看一个说明这一点的图。)
另一方面,对于 tanh 来说,我们输入的符号 xᵢ 可以变化——有些会小于零,有些会大于 0。因此,更新的方向相互独立。这使得权重向量更容易改变方向。
如果这些仍然很抽象,让我们来看一个具体的例子和一些正在发生的可视化。与本文相关的完整代码可以在 GitHub 上找到。
看一些数据:Tanh 真的更好吗?
我们将构建两个完全相同的小网络,唯一的区别是一个将使用 tanh 作为隐藏层中的激活函数,另一个将使用 sigmoid 激活。然后,我们比较结果,并详细查看输出层中的权重发生了什么变化。
我们将根据一些随机生成的虚拟数据来训练网络:
x 包含-0.5 到+0.5 之间的随机值。其行构成训练示例,列构成特征值。y 包含类别标签,如果记录的平均值大于 0,则为 1,否则为 1。
首先,让我们看看 tanh 是否真的比 sigmoid 表现得更好。也许 tanh 的所有优势只是一个既定的谣言。我们将定义两个简单的模型,一个隐藏层由 4 个节点组成,一个输出层由 1 个节点组成。它们唯一的区别是隐藏层中使用的激活函数。
让我们用生成的数据训练他们几个时期,看看他们的表现如何:
tanh 模型学得更快。经过 50 个时期后,双曲正切网络的损耗不到 sigmoid 模型损耗的三分之一。
然而,由于 sigmoid 和 tanh 函数的导数在它们的范围上有很大的不同,这是一个有点不公平的比较。我们在两种情况下使用了相同的学习率。在梯度下降的每一步中,每个权重根据下式更新
其中𝜶是学习率。如果梯度越大,更新也将越大,并且网络将学习得更快——只要更新不会变得太大。因此,我们可能希望通过为 sigmoid 网络选择更大的学习速率来解决这个问题。
为了理解学习率的影响,让我们用不同的学习率训练两个网络几次,并比较结果。当对不同学习速率的 10 个时期的训练后的损失作图时,我们得到如下结果:
Loss after 10 epochs of training for different learning rates
结果不再那么明朗了,但是 tanh 总体上还是表现得更好。当达到大于 6 的学习率时,tanh 网络中的更新明显变得太大,因此它们超过了最小值。考虑到双曲正切的梯度往往比 sigmoid 的梯度大得多,当双曲正切网络的更新变得太大时,sigmoid 网络仍然表现良好是很有意义的。
然而,如图所示,使用双曲正切网络 10 个周期后获得的最佳损耗明显小于使用 sigmoid 网络获得的最佳损耗。此外,对于高于 5 的较高学习速率,sigmoid 模型的结果也开始波动,这表明学习速率对于 sigmoid 网络来说也变得太大了。
在确定 tanh 确实看起来更好之后,让我们仔细看看为什么会这样。
绘制输出图层的权重
对于为什么 tanh 比 sigmoid 性能更好的一些说明,让我们看一下输出层的各个权重。记住,如果我们在隐藏层中使用 sigmoid 激活函数,输出层只检索 0 和 1 之间的值。具体来说,我们感兴趣的是梯度下降的每个单独更新如何影响输出图层的权重。
当在梯度下降的每个单独步骤后绘制权重时,结果将如下所示:
Weights of output layer after each step of gradient descent with sigmoid activations in hidden layer
正如你所看到的,重量总是朝同一个方向变化。在梯度下降的一个步骤中,它们或者全部减少或者全部增加,导致“之字形”运动。变化的幅度不同,但变化的符号是相同的。如果权重向量需要改变其方向,例如最低的权重需要变成最高的权重,它只能通过上下曲折相当长的时间来实现。
如果您为我们的 tanh 网络绘制相同的权重,结果将如下所示:
Weights of output layer after each step of gradient descent with tanh activations in hidden layer
这里,权重更新看起来彼此完全独立。这使得学习更加灵活。如果权重向量的方向需要改变,梯度下降不需要像 sigmoid 激活函数那样上下曲折,它只需更新单个权重,直到获得所需的方向。
这和正常化有什么关系?
根据上面的讨论,规范化有所帮助的一个原因应该是非常清楚的:如果您有一个全是正的或全是负的特征,这将使下一层中的节点更难学习。它们将不得不像遵循 sigmoid 激活函数的那些一样呈之字形。如果你转换你的数据,使其平均值接近于零,你将因此确保有正值和负值。
标准化有帮助的第二个原因与输入的比例有关。标准化可确保要素假设的值的大小大致相同。
回想一下,我们在梯度下降过程中的步骤,以及在具有逻辑激活函数的节点中的学习速度,取决于
其中 x ᵢ是节点的第和第个输入。ᵢ越大,更新就越大,反之亦然。学习的速度与输入的大小成正比。(对于双曲正切激活函数,梯度会略有不同,但仍以类似的方式取决于输入。)
如果输入具有不同的标度,则连接到某些输入的权重将比其他输入更新得更快。这通常会损害学习过程——除非我们事先知道哪些特征比其他特征更重要,在这种情况下,我们可以调整尺度,让我们的神经网络将学习集中在更重要的特征上。但是在实践中,我们不太可能预先预测这对学习有什么好处。
总之,归一化很有帮助,因为它确保了(a)有正值和负值用作下一层的输入,这使得学习更加灵活;( b)网络的学习在相似的程度上考虑所有输入要素。此外,由于 sigmoid 激活只输出正值,这抑制了学习,所以您通常应该更喜欢隐藏层中的其他激活函数。(当然,在输出层使用 sigmoid 激活完全没问题。)
我希望这能让你更好地理解为什么应该对神经网络的数据进行归一化,以及为什么 tanh 作为激活函数通常比 sigmoid 更好。
如果您有任何反馈或问题,请在下面的评论中告诉我!
为什么深度学习不是自动驾驶汽车的银弹
原文:https://towardsdatascience.com/why-deep-learning-is-not-a-silver-bullet-for-autonomous-vehicles-371c74c1a02b?source=collection_archive---------11-----------------------
如果你是自驾领域的工程师,你会经常被问到同一个问题的不同版本。“为什么要这么久?”有人可能会说。“我现在不是应该可以坐机器人出租车了吗?
我明白了。去年,Waymo 的车辆达到了 1000 万英里的自动驾驶里程。特斯拉的自动驾驶仪通过了一次 十亿英里的激活行驶。那么,在全国各个城市向公众推出机器人出租车会有什么延迟呢?
我马上会谈到我认为正在发生的事情。但首先我应该澄清一些事情。大牌的自动驾驶公司都在追求高水平的自动驾驶。他们的目标是创造出能在人类能到达的任何地方自动驾驶的车辆。
在 Starsky,我们有不同的方法。
Starsky Robotics Driverless Truck
我们正在解决一些更简单的事情:我们正在建立一个只能在某些预先选择的高速公路上行驶的系统。我们依靠人类遥控操作者在他们行程的第一英里和最后一英里驾驶卡车。当过程中发生复杂的事情时,他们也会做出关键的决定。因为我们的用例要简单得多,所以我们能够相对快速地将我们的技术推向市场。
在这篇文章中,我想解释为什么你还没有乘坐机器人出租车。然后我会进一步谈论 Starsky 的方法,并解释关键的区别。
业内每个人都在使用的一个伟大工具是深度学习,自从巴斯蒂安·特龙和他的斯坦福团队在 2005 年使用人工智能成为第一个赢得 DARPA 大挑战的人以来,深度学习一直被认为是解决第五级自治不可或缺的。深度学习是人工智能的一种形式,旨在像人脑一样工作。
工程师教授它的方式和人类学习的方式非常相似。作为一个例子,想象你正在试图创建一个深度学习算法,可以在图像中检测一只猫。算法试图回答的问题有一个客观正确的答案。图片里要么有一只猫,要么没有。用数学术语来说,问题空间有一个明确的全局极小值。因为请求的输出很简单,所以我们很好地理解了如何对这个 cat 检测算法进行编程。首先,你用数据“训练”算法——数万张猫的照片,以及非猫的照片,比如狗、人和熊。很快,该算法可以查看新的、从未见过的照片,并以很高的确定率确定这组像素是否以猫为特征。
大多数行业都在尝试做一些比教计算机识别猫更困难的事情:他们试图使用深度学习来做出适当的驾驶决策。这就复杂多了。这个的问题空间真的很大。这使得对训练数据量的需求也呈指数级增长。作为一个复杂的因素,不同的人在相似的情况下倾向于做不同的事情。这意味着没有客观正确的答案。有些驾驶决策客观上是不好的。但是大多数在路上的场景有许多不同的可能的解决方案,许多人会同意是好的。
从数学上来说,工程师通过训练深度学习算法来设计深度学习算法,以最小化一个成本函数。当问题空间有一个明确的全局最小值时,算法很容易训练,也就是说,单个选项的成本比任何其他选项都低,例如图像中有猫,或者车道线的位置。当存在多个局部最小值时,即存在大量可能的“正确”解决方案时,该算法的训练变得更加棘手,就像车辆在交通堵塞期间决定如何并入一条车道时的情况一样。(引入更多变量或增加问题空间的维度在这里也不是正确的答案。)
让这项任务变得更加艰难的是:深度学习算法相当于黑盒。他们的内部工作本质上是随机的,几乎不可能确定他们为什么做出这样的决定。你知道输入算法的数据,你知道它吐出的决定,但你不知道为什么它吐出它做了什么。
例如,业内人士在为无保护的左转等复杂场景设计决策算法时,每天都会遇到这种情况。自动驾驶汽车应该减速,还是加速转向左侧车道?
不管采取了什么行动,都很难说出为什么算法会做出这样的决定。工程学中有一个概念:回溯。如果你在一个可回溯的系统中遇到了问题,你可以回去,重新回顾发生的每一个步骤,并找出哪里出了问题。
深度学习算法不是可回溯的系统。测试可以揭示车辆在单一的精确测试情况下会做什么。但这并不一定会告诉你在稍微不同的情况下车辆会做什么。以我们上面的例子为例,如果左边的车开得稍微快一点,或者在稍微不同的位置起步,自动驾驶汽车可能会执行完全不同的动作。
所有这些都让测试变得异常复杂。很难将这种复杂的深度学习融入到最终成为消费品的东西中。因为消费者想要可重复的、可靠的、值得信赖的结果。他们希望无人驾驶汽车在繁忙的街道上左转时,每次面对这种情况时都能做出大致相同的反应。但是深度学习算法偶尔会给你一个曲线球。当这种情况发生时,你必须出去收集更多的数据——数量惊人的数据。为了有任何统计意义,我们谈论的是数十亿英里。根据兰德公司的一项研究,一个由 100 辆自动驾驶汽车组成的车队以 25 英里/小时的平均速度一年 365 天每天 24 小时运行,大约需要 400 年才能达到这些数字。**
所以才花了这么长时间。
我并没有轻视深度学习的意思。在 Starsky,我们将它用于许多不同的目的。也就是说,我们对它的使用是非常有限的。我们将深度学习用于具有客观正确答案的小范围问题。Starsky Robotics 永远不会采用深度学习算法的当前状态来做出驾驶决策。
相反,我们用两种方法之一来解决卡车面临的驾驶困境。管理我们卡车在公路上决策的软件依赖于一个确定性模型。我的意思是,它是按常规编程的。我们使用工程师已经使用了几十年的相同的基本框架来编写我们的软件。同样,我们使用经过验证的质量保证程序来生产可靠的软件模块。
这种方法是可行的,因为它让我们知道我们的系统如何运作的每个方面。每当我们遇到问题,我们就把事情分解成组成部分。这使我们能够通过遍历软件决策过程的每个方面来测试事情——因为,与使用深度学习算法不同,决策过程的每个方面都是可知的。
比方说,我们想了解一辆 Starsky 卡车在另一辆车切入其车道后的行为。汽车行驶得比卡车快得多,但卡车还是刹车了。那个动作感觉怪怪的。人类司机不会这么做。幸运的是,我们的确定性软件允许我们仔细检查卡车做出的每一个决定。我们可以深入研究代码,检查算法做出刹车决定的推理——并按照我们的意愿纠正事情。
我在这里简化了一些事情,但是重点是,当你使用一个确定性的模型时,这些组件中的大部分都是非常简单的。通过将流程简化为组件,系统变得更加容易验证、可靠,并最终变得安全。
Starsky Robotics 在自动驾驶领域与众不同的地方还有一个。大多数其他公司都在试图发明能够在复杂的城市环境中工作的自动驾驶汽车。Starsky 正在制造自动驾驶卡车,在高速公路上自动驾驶,并将第一英里和最后一英里的控制权交给人类遥控操作者。即使当我们的卡车在高速公路上时,我们的软件也会让人类参与某些决策,例如当卡车的自动软件遇到有问题的“边缘情况”时。本质上,我们使用人类来解决他们擅长解决的问题(复杂和非结构化的驾驶环境),并将我们对深度学习的使用保留在它工作良好的地方。
是的,随着行业完善深度学习在自动驾驶汽车上的应用,推广机器人出租车需要很长时间。与此同时,我们可以制造出一种有用而安全的产品,它可以在今年使用,而不是在下一个十年的某个时候。
因为我们正在解决的问题非常不同。我们并不是要解决整个自动驾驶的问题。相反,我们正在创造一种解决方案,以提高生产率和安全性,在全国范围内运输货物。我们不需要深度学习来解决这个问题。
深度学习为什么有效——循序渐进教程
原文:https://towardsdatascience.com/why-deep-learning-works-289f17cab01a?source=collection_archive---------7-----------------------
一开始是神经元:理解梯度下降、反向传播、线性回归、逻辑回归、自动编码器、卷积神经网络和 VGG16。借助 Python & Keras 中的可视化辅助工具和实际动手编码。
这篇文章是为那些错过了通过深度学习黑盒的无痛之旅的人写的。我们用一个关于一个过于关心未来的农民的故事来激励和吸引读者。我们通过使用人工神经网络解决简单的线性和逻辑回归来开始研究他的问题。我们通过观察梯度下降、链式法则和反向传播来逐步建立我们的理解。稍后,我们通过构建一个自动编码器并添加卷积层来消除 MNIST 手写数字的噪声,进行了更深入的研究。在解释了为什么这样的网络在计算机视觉中如此成功之后,我们进一步从预训练的 VGG16 网络中提取特征。
通过阅读这篇文章,你将最终破解深度学习的奥秘。
你也会有一些有意义的开放式问题。这就是(深度)学习的全部意义,对吗?
先说一个故事。
生活在未来的人
这是一个想知道自己未来的老人的故事。他是个农民。他很幸运,他的田地每年都能产出越来越多的庄稼。他的粮仓里有太多的粮食,不得不把多余的粮食分给朋友和邻居。尽管如此,他还是担心未来。他不知道给慈善机构捐多少,自己留多少。实际上,这取决于他下一年的收成。他需要对未来几年的产量有一个准确的预测。
那么,和深度学习有什么联系呢?请继续读下去,你会很高兴的。农夫的大儿子想出了下面这个实验。他取了一些谷物样本,并把大约相当于前一年每年收获量的数量放在一个袋子里。按照时间升序排列,每个袋子代表一年。然后,他让他最小的兄弟姐妹把一根棍子放在袋子的顶部,这样棍子就不会掉下来,并且保持平衡,正如这篇文章中的图片所示。
这一景象让老人对未来几年的收成有了一个概念,假设趋势保持不变。他的儿子刚刚发明了线性回归,比弗朗西斯·高尔顿早了几百年吗(对不起,先生)?
如果我们可以做线性回归,为什么我们需要人工神经网络?
继续阅读,我们将很快解决深度学习问题。人们对未来很着迷。我们想知道明天是否会下雨,我们明年是否会结婚,我们是否以及何时会最终变得富有。过去,这些是甲骨文(而非软件公司甲骨文)最喜欢问的问题。据推测,神谕是具有特殊技能的人,他们会根据现实世界的数据来预测未来,比如手上的线条、星座或血液的味道。
能够预测未来并不总是一件好事。特洛伊的卡珊德拉有预见的天赋。对她自己不利的是,她被阿波罗诅咒没有人会相信她的预言。因此,她关于特洛伊毁灭的警告被忽视了,事情对她来说并不顺利。如今,企业、组织和政府都在通过雇佣数据科学家——现代的先知——来寻找自己的卡珊德拉。因为一些数据科学家和机器学习者希望尽可能地模糊,以便获得更多的重要性,就像过去的神谕一样,他们选择使用所谓的深度学习技术,一直如此。也是因为管用。不仅仅是为了预测未来,也是为了理解现在,进行推理和分类。你可以看看这篇文章自己看看,我们可以用深度学习做些什么惊人的事情。
深度学习为什么有效?为什么我们农民的儿子需要深度学习,尽管他已经发明了线性回归?这些是我们将在接下来的章节中尝试解决的问题。
用神经元进行线性回归
我们先来看看农夫儿子的线性模型。他用年份来预测收成的数量(数量)。通过画出一条最佳匹配线,这条线跟随多年来的数量趋势,他能够预测接下来几年的收获量。在数学上,他找到了一条多年来的直线ŷx,截距为 β0 ,斜率为 β1 。
线性回归的解析解
给定 Y 的真实世界测量值和相应的预测值 X ,我们能够计算斜率和截距,如下所示。
一张图片胜过千言万语,Python 代码也是如此。为了做出漂亮的剧情,探索模式,我们将重现农夫之子使用的数据。让我们沿着线性方程所表示的平面中的直线创建 100 组人工随机测量值。我们将这些点沿直线均匀分布在-2 和 3 之间的区间内。然后,我们向每个 Y 值添加一个标准偏差为 1 且平均值为 0 的随机正态分布值。我们最后使用上面的公式来计算截距和斜率。
正如我们在上面的图像中看到的,农民的儿子的想法是一个赢家。我们可以预测 X 的任意值的 Y ,因为我们知道支配 Y 行为的回归线。那么,我们能用人工神经网络做同样的事情吗?首先,我们需要定义什么是真正的人工神经网络。
生物神经元
什么先出现的?神经科学还是人工神经网络?不管怎样,人工神经元的想法似乎来自我们大脑中的神经元。我们的大脑由 1000 亿个神经元组成。当电信号通过树突流入神经元的细胞核时,电荷就积累起来了。当细胞达到一定的电荷水平,即阈值时,它就会激活,通过轴突发出电信号。神经元在决定何时触发时,对不同的输入信号有不同的权重。一些人认为,人工神经网络模拟了为不同的树突(输入)分配不同权重的过程。
人工神经元
单个人工神经元接受输入 X ,使用权重W应用(线性)仿射变换以产生临时值 h 。然后,它将该值通过激活功能来产生输出。在我们的线性回归例子中, X 可以是一个数,比如说 2。仿射变换会使用向量 W 中存储的截距和斜率对输入进行变换,为了返回,姑且说 h =5。后一个值将经过激活,在我们的例子中是线性函数,输出,比如说 Y = h =5。
人工神经元和梯度下降
我们之前看到,回归线的截距和斜率可以使用解析公式直接计算。像我们刚刚描述的那样,一个人工神经元可以不使用任何公式找到那些值吗?我们可以使用以下策略:我们可以选择截距和斜率的随机值,假设 W =(-1,3),然后,神经元可以计算相应的回归线,并将其与真实的 Y 值进行比较。然后,我们将能够计算出神经元的输出与真实的 Y 之间的差异,即损耗。在我们的例子中,均方误差是一个好的损失函数,我们称之为 L。我们将重复选择随机值的过程,直到损失足够小,或者直到我们厌倦尝试。这种策略可能对一个神经元有效。然而,如果我们有两个或几千个神经元,我们可以花一生的时间来寻找。这就是为什么这个策略听起来如此疯狂,以至于人们想出了一个更好主意,叫做梯度下降。这就像在自由式滑雪中从山顶通过最短的路径下降到山谷。不会被杀。
梯度下降是一种工具,通过查看损失函数 L 相对于 W 的导数,找到使损失函数L最小的 W 的值。假设我们已经选择了 W =(-1,3),并且我们已经计算了这些值的损失,现在我们必须决定尝试 W 的哪个下一个值,以便具有减少的损失。我们的想法是计算损失的导数,比如说截距,并检查其符号。如果导数为正,说明损失在增加,需要尝试更小的截距。如果导数是负的,损失在减少,所以我们可以继续尝试更大的斜率值。如果导数为零,我们就达到了损失的极小值,希望是全局的。我们可以停下来考虑一下 W 是使损失最小的最佳重量。梯度下降需要计算导数,如果我们没有像 Matlab 这样的好工具,这可能会成为一个噩梦。感谢反向传播,我们甚至不需要这样的工具,我们将在后面看到。
带 Keras 的线性回归
让我们实际看看我们的神经元将如何执行线性回归任务。我们使用 Keras ,这是一个 Python 库,也是深度学习实验的好伙伴。我们创建一个具有单个神经元、标量输入、标量输出、具有权重和偏差的仿射变换以及线性输出的模型。接下来,我们使用随机梯度下降优化器在数据点上训练我们的神经元。损失函数是均方误差。优化器将执行 5 次迭代(历元)。为了简单起见,我们不对数据进行缩放。
瞧啊。单个神经元能够预测几乎相同的回归线(绿色),这是我们之前分析计算的(橙色)。如上图所示,斜率和截距的预测值非常接近。在这两种情况下,衡量健康的 R2 分数看起来也很相似。看来人工神经网络真的管用!如果我们让它变得更难呢?
神经元非线性回归
我们的农民很快意识到生活中只有少数事情是线性的。收成趋势可能会达到一个稳定水平,然后开始下降。下面,我们设想一个新的数据集,它呈现出所谓的“单峰”趋势。
三神经元模型
显然,线性激活的单个神经元将无法捕捉到这一新数据中的行为。第一个想法是改变线性激活函数,并使用类似于 S 的形状函数。sigmoid 函数是深度学习中非常常用的一个很好的候选函数。一个 sigmoid 将完美地捕捉到我们的数据中观察到的增长趋势。镜像的 s 形曲线也可以捕捉到下降趋势。因此,我们需要两个 sigmoid,因此需要两个神经元,以及将两个 sigmoid 相加的第三个神经元。相应的架构如下图所示。
source: P. Protopapas, Harvard
第一个神经元将采用标量 X 作为输入,然后使用权重 W1 和偏差应用仿射变换。结果将通过一个 sigmoid 激活产生 h1 。第二个神经元也会发生类似的事情,产生 h2 。现在,数字 h1 和 h2 都将被馈入第三个神经元,该神经元将通过应用权重 W31 到 h1 和 W32 到 h2 来执行仿射变换,最后添加一个偏置。产生的 q 将通过线性激活产生单峰形状。
人工神经网络前向传递
让我们用 Python 从头开始构建这个网络,没有 Keras。正如我们在上一节中看到的,网络总共有 7 个权重(和偏差)。我们手动给 7 个权重赋值,使用驼峰函数的数据执行正向传递,并绘制网络的输出,与真实的 Y 值绘制在相同的图中。我们手动调整权重,直到图尽可能匹配。通过这样做,我们模拟了所谓的前向传递,这是由 Keras 在训练网络时执行的。
带 Keras 的非线性回归
像特洛伊的卡珊德拉一样,我们能够猜测出 W 的完美值,因此网络的输出完美地超过了的数据。虽然大多数数据科学家都能做到这样的神奇,但并不是所有人都有这种天赋。幸运的是,对于普通人来说,有另一种方法可以做到这一点。这是使用一个库,如 Keras 来运行一个梯度下降优化器,尽最大努力为我们找到这 7 个权重。这就是我们在下面的代码中演示的内容。
经过 50000 次的训练,网络达到了 96.69%的 R2 评分。上面的图显示了它的预测,与我们之前通过手动权重调整获得的预测进行了比较。看起来很神奇,不是吗?给定 3 个神经元, X 和 Y 数据点,网络能够微调自己以适应数据。它已经学习了数据的形状,而没有任何进一步的洞察力。下面,我们可以直观地看到对最佳 W 的搜索如何收敛到最低损失。如果我们让优化器运行额外的时期,我们最终会达到 100%适合。这篇文章的一些读者已经在咬牙切齿地考虑过度拟合和缩放。好吧,让我们先高兴一下,过一会儿再回到这个热门话题。
这一结果进一步证明了人工神经网络具有捕捉数据中非线性相关性的能力。这就是深度学习奏效的原因吗?好吧,我们在这里作弊了一点。我们基于我们对数据的双 s 形形状的先验知识来设计网络,因此,通过选择 s 形作为激活函数。来自真实场景的数据并不总是具有如此清晰的形状,我们最终将四处寻找合适的网络架构。迟早,我们会把我们对世界的看法引入网络架构,把它变成一个有偏见的模型。你可以看看我另一篇关于负责任的数据科学的文章。现在,让我们暂时假设我们都是好人。然而,深度学习为什么有效的问题仍然没有答案。
使用 Keras 的逻辑回归
我们的农民对驼峰模型不太满意,尤其是它的第二部分,告诉他预计收成会下降。他更想知道哪一年有好收成。下面我们创建一个反映这种情况的数据集。低于 0 的年份被归类为歉收年份,而 0 之后的年份则是丰收年份。
现在让我们看看一个简单的神经元是否能够将一个给定的年份归类为收获的好年份。这是一个逻辑回归问题。下面我们将数据输入 Keras 模型,使用随机梯度下降作为二进制交叉熵损失的优化器(太多的关键字让你吃惊)。我们实现了 81%的分类准确率,正如你在下图中看到的,sigmoid 激活函数做得很好。
逻辑回归中的梯度下降
我们刚刚解决的分类问题是进入梯度下降和反向传播的黑暗世界的一个很好的例子。我们记得,在我们上面的神经元中,输入经过仿射变换,结果被输入到 sigmoid 激活中。因此,输出是 0 或 1 之间的值,这是丰收的可能性。下面我们看到这个输出的表达式 P(Y=1) 。注意, X 上的仿射变换取决于两个参数 β0 和 β1 。
source: P. Protopapas, Harvard
在训练期间,对于任何输入 Xi ,神经元能够计算似然 Pi 并将其与真实值 Yi 进行比较。通常使用二进制交叉熵计算误差。它的作用与我们之前介绍的均方误差相同。二进制交叉熵测量预测值 Pi 与真实值 Yi (为 0 或 1)的距离。下面给出用于计算二元交叉熵的公式。
source: P. Protopapas, Harvard
如你所见,损失取决于权重 β0 和 β1。在梯度下降优化器选择了随机权重后,它挑选一个随机的 Xi ,然后向前传递以计算损失。如果我们使用的是基本梯度下降,优化器会对所有输入数据点重复这种计算,如果我们使用的是随机版本,优化器只会对少量数据重复这种计算。总损失是将所有单项损失相加得出的。在优化器计算了损失之后,它将计算它相对于权重的导数。基于导数的符号,它将正向或负向更新权重。
source: P. Protopapas, Harvard
我们知道,我们想要向导数的相反方向前进,我们知道,我们想要向导数成比例地前进一步。学习率 λ是控制每个权重 W ( β0 或β1 )的比例。
source: P. Protopapas, Harvard
逻辑回归中的反向传播
如上图所示,更新权重需要计算损失相对于每个权重的偏导数。我们如何做到这一点?嗯,我们可以用高中数学来做这个。在下图中,我们试图计算相对于 β0 和 β1 的交叉熵损失函数的导数。
source: P. Protopapas, Harvard
对于只有一个神经元的网络来说,这是一个很好的解决方案。但是想象一下,一个我们通常在深度学习中遇到的有数百个神经元的网络。我敢打赌,你不想计算结果的导数。即使你成功地做到了这一点,你也必须在每次网络结构改变时更新你的公式,哪怕只是一点点。这就是反向传播发挥作用的地方。反向传播算法最初是在 20 世纪 70 年代提出的,但直到 1986 年 Geoffrey Hinton 的一篇论文才充分认识到它的重要性。
反向传播使用链规则,这是编写嵌套函数的导数的方便的助记符。例如,如果我们有一个网络,其中一个神经元馈入第二个神经元,最后馈入第三个神经元,以获得输出。总损失函数 f 是前两个神经元的损失函数 g 的函数,类似地 g 是第一个神经元的损失函数 h 的函数。
基本上,当我们从输入开始计算每个神经元的输出,直到最后一个神经元,我们也已经计算了导数的微小分量。在上面的例子中,当向前通过第一个神经元时,我们已经能够计算出 dh/dx 。接下来,当向前通过第二个神经元时,我们能够计算 dg/dh 。最后,我们开始计算 df/dg ,通过神经元回溯并重用所有已经计算过的元素。这就是反向传播这个名字的由来。这种技术有几种实现和风格。为了简单起见,我们在这里保持简单。
为了说明链式法则和反向传播是如何工作的,让我们回到具有 sigmoid 激活的 1-神经元网络的损失函数。损失函数被定义为二进制交叉熵,它可以被分成两部分 A 和 B,如下所示。
source: P. Protopapas, Harvard
让我们仔细看看损失函数的 A 部分。它可以分成几个块,在下图中用红框突出显示。
source: P. Protopapas, Harvard
反向传播需要计算该函数在任何给定数据点 X 处对于任何给定权重 W 的导数。这是通过计算每个块的导数,并使用链式法则将所有块放在一起完成的。下面我们来看看这对于 X=3 和 W=3 是如何工作的。
source: P. Protopapas, Harvard
我们所需要的是能够计算小块(上面称为变量)的导数。这种块是已知的,因为激活函数通常是已知的。它们可以是 s 形的、线形的、ReLu 形的等等。这些是导数已知的可微函数。您可以在此找到最新激活功能的完整列表。因此,上述计算可以在运行时使用计算图来构建。Keras 能够查看您的网络架构和每个神经元使用的激活函数,以便在模型编译期间构建计算图。该图在训练期间用于执行正向传递和反向传播。交叉熵损失函数的计算图的例子如下所示。
source: P. Protopapas, Harvard
神经元聚类
理解梯度下降和反向传播是如何工作的,是理解深度学习为什么实际工作的重要一步。嗯,我们还没到那种程度。到目前为止,我们只用了 3 个神经元。我们的农民可以争辩说,年份和收获量之间的关系太复杂了,不能只用两类来表示:好或坏。在这一节中,我们将探讨人工神经网络的聚类问题。让我们模拟一些分布在三组代表收割质量的数据。我们考虑坐标为(-2,0),(0,1.7)和(2.1,0)的(x,y)平面中的三个点。在这三个中心的周围,我们创建了一个由 100 个随机生成的点组成的云。对于这些点中的任何一个到其中心的径向距离,我们使用随机正态分布。对于任何一个“云”点的角坐标,我们使用均匀分布。
我们现在将创建一个两层人工神经网络,它可以预测平面中随机生成的点是属于云 0、1 还是 2。输入层有 50 个神经元(我们越来越深入)!它接收两个值( x,y )。ReLU 激活函数被应用于输入的仿射变换。结果被输入到具有 3 个神经元的输出层,该层使用 softmax 激活函数来预测三类云之一。随机梯度优化器用于通过最小化用作损失函数的分类交叉熵来解决估计 303 权重和偏差的分类问题。我们将数据分成 50 个数据点用于训练分类器,50 个数据点用于验证。我们在 20 个时期内分批训练 5 个点。训练之后,我们还对测试集进行预测。在显示之前,我们使用 argmax 将预测的分类向量转换为原始标签。
如上所示,神经网络在分离测试集中的类方面做得很好(右图)。在原始数据(左)中发现的一些异常值被网络(右)分配了不同的标签,以产生清晰的边界。我们在测试数据上取得了 95.33%的分类准确率。
下面我们在平面上随机生成全新的看不见的坐标。然后我们用训练好的网络来预测类(云)。正如我们在图中看到的,网络清楚地将所有三个云分开,尽管有几个点非常接近边界,这是假阳性/阴性的良好候选。总的来说,似乎我们开始做深度学习了。
现在,我们让我们农民的孙子的孙子的孙子对深度学习感到兴奋!直奔http://playground.tensorflow.org通过在你的浏览器中可视化地修补层、神经元、激活功能、训练和测试来构建你自己的人工神经网络。当你完成后,回到这里,更多令人兴奋的东西来了。
用于图像去噪的自动编码器
没有被现在打动的读者,已经知道深度学习为什么有效了。对于我们其余的人,我们现在来看一个网络架构的例子,这个例子有点深奥。自动编码器由一对两个相连的网络组成:编码器模型和解码器模型。自动编码器的目标是找到一种将输入编码成压缩形式(潜在空间)的方法,使得解码版本尽可能接近输入。编码器模型将输入转换成小而密集的表示。解码器模型可以被视为能够生成特定特征的生成模型。编码器和解码器通常作为一个整体来训练。损失函数惩罚网络产生不同于输入的输出。因此,编码器学会在有限的潜在空间中保存尽可能多的相关信息,并巧妙地丢弃不相关的部分,例如噪声。解码器学习获取压缩的潜在信息,并将其重构为完全无错误的输入。自动编码器可以用于图像的降维和去噪,但也可以在无监督的机器翻译中获得成功(哇!).
下面我们定义一个自动编码器的最简单的架构,它处理有噪声的手写数字的图像。我们向网络提供原始图像 x ,以及它们的嘈杂版本 x~ 。网络试图重建其输出x’以尽可能接近原始图像。通过这样做,它学会了如何去噪任何手写数字。
source
在接下来的几段中,我们将通过使用 Keras 实现这样一个网络的一个小版本来了解它是如何工作的。
输入:28x 28 灰度图像。因此,输入是一个 784 元素的向量。
编码器:64 个神经元的单一致密层。因此,潜在空间将具有尺寸 64。所用的激活函数是整流单元(ReLu),选自最佳实践。激活函数被附加到层中的每个神经元,并基于每个神经元的输入是否与自动编码器的预测相关来确定它是否应该被激活(“激发”)。激活函数还有助于将每个神经元的输出标准化到 1 到 0 之间的范围。
解码器:具有 784 个神经元的单一致密层,对应于 28x28 灰度图像。使用 sigmoid 激活函数作为分类任务的最佳实践(编码器的输入与解码器的输出)。
优化器:我们使用二进制交叉熵作为损失函数,使用 Adadelta 作为优化器来最小化损失函数。
数据:我们使用 MNIST 数字通过应用高斯噪声矩阵生成合成噪声数字,并在 0 和 1 之间裁剪图像。下面我们展示一些有噪声的数字。
我们仍然可以识别数字,但很难。因此,我们想使用我们的自动编码器来学习恢复原始数字。我们通过在 100 个时期内拟合自动编码器来实现这一点,同时使用噪声数字作为输入,原始去噪数字作为目标。因此,自动编码器将最小化噪声图像和干净图像之间的差异。通过这样做,它将学习如何从任何看不见的手写数字中去除噪声,这些数字是由类似的噪声产生的。
下面,我们将有噪声的输入图像与干净的输入图像进行对比。
- 整体噪声消除得非常好。在输入图像上人为引入的白点已经从清洗后的图像中消失。数字可以被视觉识别。例如,有噪声的数字“4”根本不可读,现在,我们可以读取它的干净版本。
- 去噪对信息质量有负面影响。重建的数字有些模糊。解码器添加了一些原始图像中不存在的特征,例如,下面的第 8 位和第 9 位数字几乎无法识别。
希望这个去噪的例子已经说明了深度学习的机会。我们通过添加层得到的越深,模型变得越复杂,它能实现的魔力就越大。然而,复杂性是以过度适应训练数据和泛化能力下降为代价的。这就是正规化和其他技巧发挥作用的地方。在下一节中,我们将通过添加卷积层来升级我们的自动编码器。
卷积神经网络
前面几节温和地介绍了用神经元来近似线性和非线性现象的思想。我们还演示了两层神经元如何足以学习手写数字中的正确特征,并消除有噪声的特征。在这一部分中,我们将探讨如何将具有数百个神经元的几个层堆叠起来,这些神经元在噪声图像中学习低级特征,以减少潜在空间中的信息损失,并提高生成数字的质量。
现在,让我们建立一个深度网络。我们从第一个卷积层 Conv2D 开始,它有 16 个滤波器,每个滤波器的尺寸为 3×3。填充相同,步幅为 1,因此输出要素地图的形状为 28x28x16。我们对这个输出应用一个 ReLu 激活函数,在它上面加上一个偏置。卷积导致来自图像相邻区域的信息重复,导致高维数。 Pooling 取卷积层输出的一个区域,并返回一个聚合值:通常是 max,但可以使用 average、min 或任何函数。
我们添加一个 MaxPooling2D 层,大小为 2x2,步幅为 1,填充相同。这意味着我们将取 2x2 块的最大值,并移动 1 步到下一个块。池化的输出将用零填充,以具有与输入相同的维度。将激活函数应用于卷积后,总会进行池化。
当考虑多个尺度时,CNN 工作得最好。因此,我们再次复制卷积和最大池层。得到的编码器以 7x7x32 的形状输出图像的表示。这是因为输入图像 28x28x1 由第一 Conv2D 层中的 32 个 3x3 滤波器中的每一个进行卷积,返回维数为 28x28x32 的特征空间。MaxPooling 将这种表示减少到 14x14x32 的一半。第二个 Conv2D 层使用一组 32 个 3x3 滤波器对每个 14x14x32 表示进行卷积。这导致 14×14×32 维的特征空间。最后一个 MaxPooling 图层将制图表达缩小了一半,从而得到形状 7x7x32。
解码器与编码器具有相同的架构,但各层以相反的顺序排列。我们使用上采样层来恢复由编码器中的 MaxPooling 执行的维度减少。最后,我们添加一个卷积层,将上次表示中的通道数恢复为 1。Sigmoid 激活函数用于解决分类问题,其中二进制结果反映了解码图像与输入图像的相似程度。我们可以观察自动编码器的解码部分如何恢复原始图像形状(28x28x1)。
整个网络有 28,353 个权重和偏差要训练。我们使用二进制交叉熵作为损失函数,使用 Adadelta 作为优化器来最小化损失函数。在 20 个时期之后,CNN 自动编码器具有大约 0.098 的训练/测试损失值,相比之下,密集自动编码器具有更高的损失 0.1235。我们的 CNN 自动编码器在看不见的图像上表现很好。与上一节中带有 1 个密集隐藏层的简单自动编码器相比,去噪后的图像看起来要好得多。
越来越深
将卷积层堆叠在一起的方法与其说是科学,不如说是艺术。不要害怕看下面的 VGG 网络,它是在 2014 年提出的,用于以 92.7%的测试准确度将 1400 万张图像分类到 1000 个类别。它接受了 2 周的训练,以估计其 14,714,688 的体重。恐怖!还有更多这样的超大质量网络:GoogLeNet、ResNet、DenseNet、MobileNet、Xception、ResNeXt,仅举几例。
深度学习的一个推荐且高效的方法是利用那些预先训练好的网络之一。预先训练的网络只是先前在大型数据集上训练的保存的网络,并且可以有效地充当真实世界的通用模型。特征提取是使用由预训练网络学习的表示的一种方式,它采用预训练网络的卷积基,通过它运行新数据,并使用新的小数据集在输出之上训练新的简单分类器,如下所示。另一种技术包括冻结预训练网络的基础,附加一个简单的分类器并训练整体。另一种替代方案,称为微调,包括在训练前解冻基地中的特定层。
结论
在本文中,我们假设了一种深度学习的神经网络架构方法。我们没有直接解释为什么深度学习算法会在复杂输入通过每个神经网络层时逐步学习复杂输入的表示,而是从单个神经元开始。通过动手的例子和 Python 代码,我们用人工神经网络解决了基本的回归任务,并逐步建立了一个具有卷积层的自动编码器。我们通过梯度下降和反向传播展示了学习过程。我们很快介绍了使用预先训练的超大质量人工神经网络(如 VGG16)的迁移学习。
我们没有触及像风格转换这样的主题,对于物体识别来说,纹理,而不是物体形状,似乎是物体最重要的方面。我们解释的概念,对于递归神经网络、序列对序列网络、长短期记忆网络和许多其他奇特的深度学习外星发明,将略有不同。
在一篇文章中涵盖深度学习是一个笑话,我们并没有试图这样做。经典书籍****伊恩·古德菲勒的《深度学习》和的《用 Python 进行深度学习》的弗朗索瓦·乔莱都是很好的起点。
深度学习为什么有效?这是一个开放式的问题。谢天谢地。
感谢您的阅读。看看我下面这篇关于机器学习中贝叶斯方法的文章。
[## 贝叶斯噩梦。解决了!
通过 Python PyMC3 中的示例和 cod 温和地介绍贝叶斯数据分析。
towardsdatascience.com](/bayesian-nightmare-how-to-start-loving-bayes-1622741fa960)
Keras 中默认 CNN 为什么坏了,如何修复
原文:https://towardsdatascience.com/why-default-cnn-are-broken-in-keras-and-how-to-fix-them-ce295e5e5f2?source=collection_archive---------5-----------------------
深入了解 CNN 初始化…
Photo by Nino Yang on Unsplash
上周,我使用在 CIFAR10 数据集上训练的 VGG16 模型进行了一些实验。我需要从头开始训练模型,所以没有在 ImageNet 上使用预训练版本。
所以我开始了 50 个纪元的训练,去喝杯咖啡,然后回到这些学习曲线上:
模特什么都没学到!
我已经看到网络收敛非常缓慢,振荡,过度拟合,发散,但这是我第一次看到网络的这种行为什么也没做。因此,我挖了一点,看看发生了什么事。
实验
这就是我如何创建我的模型。它遵循原始 VGG16 架构,但大部分全连接层被移除,因此几乎只保留卷积。
现在让我们多理解一点,是什么导致了我在这篇文章开始时向你展示的这种训练曲线。
当模型的学习出现问题时,检查梯度的表现通常是个好主意。我们可以用以下公式得到每一层的平均值和标准差:
通过绘制它们,我们有:
Stats of gradients of VGG16 initialized with Glorot uniform
哇…在我的模型中根本没有渐变,也许我们应该检查激活是如何沿着层发展的。我们可以通过下式得到它们的平均值和标准偏差:
然后,如果我们把它们画出来:
Stats of activations of VGG16 initialized with Glorot uniform
那里正在发生什么!
提醒您,每个卷积层的梯度计算如下:
其中,δx 和δy 用于表示梯度,∂L/∂x 和∂L/∂y.梯度是使用反向传播算法和链式法则计算的,这意味着我们从最后一层开始,反向传播到更早的层。但是,如果我们的最后一层激活趋向于 0,会发生什么呢?正如我们在这里所得到的,梯度在任何地方都等于 0,因此不能反向传播,导致网络不能学习任何东西。
因为我的网络非常空(没有批量标准化,没有丢失,没有数据扩充,..),我猜这个问题应该来自一个糟糕的初始化,所以我读了明凯的论文【1】,我将简要描述它说了什么。
初始化方法
初始化一直是深度学习的一个重要研究领域,尤其是随着架构和非线性的不断发展。一个好的初始化其实是我们可以训练深度神经网络的原因。
这里是明凯论文的主要观点,它们显示了初始化应该具有的条件,以便具有带有 ReLU 激活功能的正确初始化的 CNN。需要一点数学知识,但是不要担心,你应该能够掌握大纲。
让我们考虑卷积层的输出为:
然后,如果偏差被初始化为 0,并且在权重 w 和元素 x 都相互独立并且
共享相同分布的假设下,我们有:
用 n ,一层的权值个数(即 n=k c )。由下面的独立属性的乘积的方差:
它变成了:
然后,如果我们让权重 w 的平均值为 0,则得出:
由柯尼希-惠更斯财产:
它最终给出:
但是,由于我们使用的是 ReLU 激活函数,我们有:
因此:
这是单个卷积层输出的方差,但如果我们想考虑所有的卷积层,我们必须考虑所有卷积层的乘积,即:
由于我们有一个产品,现在很容易看出,如果每层的方差不接近 1,那么网络可能会迅速退化。事实上,如果它小于 1,它将迅速向 0 消失,如果它大于 1,那么激活值将无限增长,甚至可以成为一个很高的数字,你的计算机不能代表它(NaN)。所以,为了有一个行为良好的 ReLU CNN,必须认真遵守以下条件:
作者比较了当你训练一个深度 CNN 初始化为当时的标准初始化(Xavier/Glorot)【2】和用他们的解决方案初始化时会发生什么。
Comparison of the training of a 22-layer ReLU CNN initialized with Glorot (blue) or Kaiming (red). The one initialized with Glorot doesn’t learn anything
这个图表看起来熟悉吗?正是我一开始所见证和展示给你的!用 Xavier/Glorot 初始化训练的网络不学习任何东西。
现在猜猜 Keras 里默认初始化的是哪一个?
没错!默认情况下,在 Keras 中,卷积层的初始化遵循 Glorot 均匀分布:
如果我们现在把初始化改为明凯统一的,会发生什么?
使用明凯初始化
让我们重新创建我们的 VGG16 模型,但这一次我们改变了初始化为贺 _ 制服。
现在,让我们在训练模型之前检查激活和渐变。
现在,随着明凯的初始化,我们的激活平均值约为 0.5,标准差约为 0.8
我们可以看到,现在我们有了一些梯度,如果我们想让我们的网络学习一些东西,这是一件好事。
现在,如果我们训练我们的新模型,我们得到这些曲线:
我们现在可能需要添加一些正则化,但是,嘿,这仍然比以前好,对不对?
结论
在这篇文章中,我们展示了初始化可能是你的模型中非常重要的一部分,但却经常被忽视。此外,它还表明,即使是像 Keras 这样优秀的图书馆,也不能认为它们是理所当然的。
我希望这篇博文对你有所帮助!您可能再也不会忘记正确初始化您的网络了!如有不清楚的地方,请随时给我反馈或问我问题。
参考资料和进一步阅读
为什么安德鲁·威金斯突然变好了?
原文:https://towardsdatascience.com/why-did-andrew-wiggins-suddenly-get-good-dafd93d6fe6a?source=collection_archive---------24-----------------------
安德鲁·威金斯正在经历一个职业赛季。他到底改变了什么?
Image by Frenchieinportland on Wikimedia Commons
迄今为止,安德鲁·威金斯的篮球生涯走了一条类似过山车的弧线。进入联盟,威金斯是一个高度赞扬高中和大学的前景。在 NBA 选秀中以第一名的身份被选中后,他在他的第一个 NBA 赛季中获得了年度最佳新秀奖,显示了他成为联盟顶级双向球员之一的潜力。看到这种潜力,明尼苏达森林狼队给了维金斯一份大规模的合同,巩固了他作为他们年轻重建的基石。
然后,事情急转直下。威金斯的进步似乎止步不前,他的戏剧在许多领域明显退步。就在今年夏天,安德鲁·威金斯 5 年 1.48 亿美元的最高合同被认为是不可移动的——一些人开始猜测这是联盟中最差的合同之一。在 NBA 打了 5 个赛季后,维金斯开始看起来像一个巨大的半身像。
当然,几乎所有人都承认维金斯可以得分——他职业生涯场均 19.7 分。然而,这就是他所做的一切。他的得分效率很差(职业生涯平均真实投篮命中率为 52%,而联盟平均水平高于 55%)。他不擅长抢篮板或传球。最糟糕的是,他的防守潜力已经化为乌有——事实上,先进的统计数据显示,他在防守上绝对是一个消极的存在。
更令人担忧的是,进步的希望似乎为零:他的最后两个赛季是他进入联盟以来最糟糕的。赛季开始前,ESPN 排名联盟前一百名球员;维金斯完全被排除在名单之外(对于一个今年收入约 2750 万美元的人来说,这是一个奇怪的壮举)。
然后,几乎就在他意识转变的时候,安德鲁·威金斯开始擅长篮球。在 2019-2020 赛季的 20 场比赛中,维金斯在得分,篮板,助攻和盖帽方面都创下了职业生涯的新高。几乎所有类别的改善都令人印象深刻(蓝色代表 2019-2020 赛季,灰色代表上一赛季)。
2018–19 至 2019–20 赛季高级统计
这个图表可以用 R 中的以下代码复制:
library(ggplot2)ggplot(df, aes(x=`2018_Season`,xend=`2019_Season`,y=Stat)) +
geom_segment(aes(x=`2018_Season`,
xend=`2019_Season`,
y=Stat,
yend=Stat),
color=”#b2b2b2", size=1.5)+
geom_dumbbell(color=”light blue”,
size_x=3.5,
size_xend = 3.5,
colour_x=”#B8B8B8",
colour_xend = “#3433FF”) +
labs(y = NULL,
x = “Change From 2018–2019 to 2019–2020”) +
theme_minimal()
维金斯的失误甚至更少,是他职业生涯中失误率最低的。他的转变也延伸到了他的得分效率上。尽管他的投篮量大幅增加,但他 54.1%的命中率也有很大提高(去年他只有 49.3%)。
这种改进也体现在整体影响统计上。在他的职业生涯中,第一次,威金斯的价值超过了替补球员 VORP。
他还公布了职业生涯中每 48 分钟的最佳胜率:
不知从哪里,威金斯似乎找到了他的游戏。
这些图表可以用 R 中的以下代码复制:
library(ggplot2)library(dplyr)df <- df %>% mutate( ToHighlight = ifelse( Year == `2019–20`, “yes”, “no” ) ) #Create ggplot
ggplot(df, aes(x = Year, y = VORP, fill = ToHighlight)) +
geom_bar(stat=”identity”) +
scale_fill_manual( values = c( “yes”=”blue”, “no”=”gray” ), guide = FALSE ) +
ylim(-0.6,0.6) +
theme_classic() +
labs(x = “Season”,
y = “VORP”,
caption = “Source: Basketball-Reference”)
我们能从他的改进中获得什么启示?它是可持续的吗?
虽然防守是出了名的难以量化,但我们的指标显示维金斯在这里没有太大的变化。他的防守潜力仍然难以捉摸。
尽管他的整体效率有所提高,但他的基本投篮数据并没有显示出任何巨大的进步。
然而,改变的是他的镜头选择。也就是说变聪明了很多。
这些图表可以用 R 中的以下代码复制:
library(ggplot2)ggplot(df, aes(fill=Distance, y=Value, x=Year)) +
geom_bar(position = “fill”, stat=”identity”) +
theme_classic() +
labs(y = “Percentage of Shots Taken”,
x = “Season”,
caption = “Source: Basketball-Reference”)
“长二”长期以来一直被分析型的人所嘲笑。它几乎承担了三分尝试的所有困难,却没有任何回报。维金斯玩的是一种老派游戏,严重依赖于长二分和中距离投篮。然而,上个赛季他的比赛看起来更现代了。
维金斯已经成功地将他的大部分远投转换为三分尝试或靠近篮筐的投篮。上个赛季,他 18.1%的投篮是长二分(在第三个赛季达到了 25%的峰值)。本赛季,他不到 9%的投篮是长二分,32.2%是三分球——这是他有史以来最高的命中率。因此,他现在每场比赛投 6.6 个三分球,而去年是 4.8 个,职业生涯平均只有 3.4 个。
维金斯仍然是一个平庸的三分射手(本赛季只有 33.6%),但事实上他在更多的尝试中保持了他的百分比是一个积极的因素。
威金斯效率的提高主要来自投篮选择的改善,这可能是一件好事;他不是骑着会冷却下来的火热的投篮连胜。他已经从根本上改变了他的比赛风格。
那么,这给安德鲁·威金斯带来了什么?
毫无疑问,威金斯正在打他职业生涯中最好的篮球;没有任何强有力的迹象表明这是不可持续的。在过去的几年里,先进的统计数据并没有善待威金斯,经常把他描绘成他的球队的负面整体。这个赛季看起来是他的一个重大转折点;他现在是森林狼季后赛希望的积极力量。
这是否意味着维金斯的合同是合理的?不太可能,即使考虑到他的进步。 538 仍然认为他的 5 年市值略高于 5800 万美元,远低于他的实际工资。然而,还不到 25 岁的他拥有非凡的运动能力,他还有很大的成长空间。威金斯最有可能改进的领域是什么?
射击
尽管有所进步,维金斯的整体效率仍然低于联盟平均水平。进一步提高他的进攻效率将会提升他在球场上的价值。幸运的是,威金斯这里有些唾手可得的水果。
这些图表可以用 R 中的以下代码复制:
library(ggplot2)library(directlabels)ggplot(Shot, aes(x = Year, y = Percent, group = Shot)) +
geom_line(aes(color = Shot), size = 1.5) +
geom_point(aes(color = Shot)) +
scale_colour_discrete(guide = ‘none’) +
scale_y_continuous() +
geom_dl(aes(label = Shot), method = list(dl.trans(x = x + 0.2), “last.points”, cex = 0.8)) +
theme_minimal() +
labs(y = “Percent Made”,
x = “Season”,
caption = “Basketball-Reference”)
很大程度上是因为投篮选择的改善,维金斯的 2 分命中率达到了令人尊敬的 51.1%。然而,他的罚球却是一个谜。
在 NBA 的前三个赛季,维金斯每个赛季的平均命中率几乎达到 76%。在他的第四和第五个赛季,他的平均得分莫名其妙地下降到只有 67%。今年,他的罚球命中率已经恢复到了 72.6%。然而,将这一比例提高到接近 76%可能是提高他整体效率的一个可行途径。
也有希望提高他的三分球命中率。虽然维金斯是一个低于标准的三分射手,但其他球员在后来的职业生涯中表现出了进步。
防卫
最后,一个需要改进的地方是他的防守。大多数数据显示防守仍然是维金斯的弱项。希望维金斯成为他曾经展现出希望的锁定防守者可能太多了,但至少提高到一个中立防守者可能会使维金斯成为一个更危险的球员。
为什么数字营销人员需要对统计学有深刻的理解
原文:https://towardsdatascience.com/why-digital-marketers-need-a-solid-understanding-of-statistics-d20a269506ab?source=collection_archive---------17-----------------------
Linkedin.com
大多数公司声称我们是数据驱动的,但我们对可用的统计测试了解多少呢?先从研究数据说起:)。
2012 年, 营销人员未能通过大数据测试**哈佛评论指出,在大数据爆炸时代,绝大多数营销人员仍然基于直觉做出决策,这是基于一项对财富 1000 强公司的近 800 名营销人员进行的调查。
数据正变得无处不在。具有讽刺意味的是,拥有太多的数据并不意味着你得到了有用的见解,这可能会完全相反。在 2016 年 12 月,“IBM 由 Econsultancy 开展的一项新的研究发现,只有 3%的营销人员将他们根据客户数据得出的见解采取行动的能力标为‘优秀’,超过一半(54%)的人将其标为‘差’或‘非常差’。”- 摘自一篇文章: 营销人员未能“明智地”处理数据 似乎营销人员在收集数据,而不是正确地分析数据。
现在呢?上个月(2018 年 12 月),沃顿商学院营销教授罗恩·伯曼的新研究显示,根据 Optimizely(一个非常受欢迎的 A/B 测试工具平台)提供的数据,57%的营销人员错误地处理了数据,并可能得到错误的答案——这可能会让公司损失很多钱
虽然 A/B 测试是每个数据驱动公司的核心,但不幸的是,大多数营销人员无法利用他们可用的统计测试。
具有统计学意义的常见错误
组织声称他们一直在进行测试和学习,而统计意义却经常被他们误解和误用,这是一个悖论。
第一个也是最致命的错误是根本没有检查统计显著性。大多数人在这一点上都失败了。考虑营销活动的例子。新活动的 CAC(每获得一个新客户的成本)= 24.51 美元,低于旧活动的 28.69 美元。这 4.17 美元可能看起来是一个巨大的——也许是重要的——差异。但实际上你可能很不走运,抽取的样本并不能代表更大的人群;事实上,也许这两个活动在对顾客购买行为的影响上没有什么不同。这被称为由观察样本而不是整个群体引起的抽样误差,这在任何测试中都必须避免。另一个例子是,人们在两组中都观察到大量的流量(许多点击、转换等),他们说这实现了基于逻辑的统计显著性,即样本规模越大,你越不可能得到反映随机性的结果。人们会在“大样本量”在各种活动中平等的情况下感觉更舒服。然而,这里的问题是多大的样本量是足够的?8k 印象 1k 点击还是 200k 印象 10k 点击?嗯……好吧,那么这个决定很可能是由人们的直觉做出的。
第二,一旦达到统计显著性,感觉对测试 100%有信心。想想 p 值的定义是什么:在零假设下观察到更多极端结果的概率。基于该定义,在实验设计期间必须预先定义置信度的比例(也意味着对犯错误的容忍度)。仍然要保持冷静,不要在结果达到统计学意义时变得过于乐观。
过早停止测试,而不是等到受控 A/B 测试达到相当显著的水平。其他例子是在测试变体(广告文案、图像等)的性能时不断检查指标的重要性。一旦达到 p 值,测试就会过早停止,这大大增加了假阳性率的可能性。不用说,这使得我们无法客观评估我们所操作的数据的有效性。
也有发生在解释 A/B 测试结果的时候用绝对值来说明变化提升了多少,而 A/B 测试只是告诉你哪个更好。
统计能力的常见错误
一个动力不足的测试可能发生的第一件事是,一个实际上显著的变化,但是你可能没有检测到它。使用这样的测试,人们会得出结论,测试的变体没有效果,而实际上它有(这被称为假阴性)。这个常见的错误在测试上浪费了大量的预算,这些测试从来没有收到足够的流量,没有适当的机会来展示预期的效果。如果他们没有足够的样本量来检测有意义的改进,那么一次又一次的测试又有什么用呢?
但是当跑得过猛时,会增加力量(假阴性率下降),同时也会增加假阳性率,这会伤害你的信心水平。在 I 型和 II 型误差之间有一个权衡,我们在 A/B 测试期间很少讨论它。但是知道它们背后的数学和统计概念总是好的。
简而言之,有两种方法可以得到错误的功率:进行一次功率不足或功率过大的测试。
错误的后分析
即使你正确地设置了一切,你的后分析仍然可能出错。
如果你得到的数据分布看起来既不是 p1 也不是 p2。
P1
p2
但它可能看起来类似于 p3。
然后…..您的分析出错了,因为您的参数方法在某些情况下不合适(例如,如果您的分布看起来像 p3 )。这就是参数测试可能出错的地方。(后续帖子我会详细解释)
最后…
统计数据可以帮助营销人员实现这两个目标,也可以评估营销工作的成功与否,并为营销计划的变化提供数据基础。实验是学习和获得可行见解的好方法。因此,有必要对 A/B 测试分析的数学基础有一个直观的感受。
虽然 A/B 测试不是完美的方法,但 A/B 测试至少必须正确,因为它仍然是商业世界中最实用的测试。
还会有后续的帖子。下一个,我将解释 A/B 测试的缺点。
参考:
营销人员通不过大数据测试——《哈佛商业评论》**
营销人员未能“明智地处理”数据——“营销周”**
p-Hacking 和 A/B 测试中的错误发现 —罗恩·伯曼(宾夕法尼亚大学—沃顿商学院)
动力不足或过强测试 —德克萨斯大学
为什么分布式深度学习将变得至关重要?为什么要关心深度学习的 HPC?
原文:https://towardsdatascience.com/why-distributed-deep-learning-is-going-to-gain-paramount-importance-bd2d83517483?source=collection_archive---------23-----------------------
This is Downtown Houston.
持续学习的工作量正以前所未有的速度增长。同一组织中的多个团队都在使用深度学习来解决复杂的问题,更不用说不同的组织了。
速度是一个组织中促进深度学习和人工智能工作的巨大因素。某些项目可能会因为疯狂的迭代时间而被放弃,具体来说,是用多种规格进行训练的时间,也就是超参数。
Google NMT: https://www.oreilly.com/library/view/tensorflow-for-deep/9781491980446/ch01.html
想想这个:让一个大模特训练 25 天会怎么样?
我猜业务需求不会得到满足?模特每周都需要重新训练怎么办?在进行分析和机器学习时,需要处理和解释持续流入的数据,猜猜会发生什么?使用现有的非分布式方法,您甚至不能在接下来的 30 天内改进模型!咄!更别说每周用新数据重新训练了。
让我们不要忘记这样一个事实,工程资源不会那么高兴,因为他们必须让它训练,直到它完成,才会有进展,在这个过程中,他们忘记了发生了什么(可能)。当他们回头看时,他们需要激活大脑中关于提交的工作细节的每一个神经元。
我们都知道机器学习是一个经验过程,对于大模型/大数据,机器学习中的“经验”将通过正常的单节点训练方法来消除,因为它的工作方式(非常慢)。我的意思是,如果我们不注意为大量工作负载增加更多计算能力,人们很可能会失去耐心,直到工作完成,企业的附加值将受到严重打击。
想想这个:你有多少次因为网速慢而沮丧?
在深度学习研究领域,研究人员正在探索接近十亿参数的模型,你认为,单个节点作业会让他们探索更好的模型吗?
显然,答案是响亮的不!
虽然,还有许多其他因素促使您的组织适应分布式深度学习方法,但我将保持这一点。
我想重申和澄清,我并不是说每个公司都应该做分布式深度学习。它取决于各种因素,如工作负载的类型、工程工作和资源、解决给定大问题的解决方案的可容忍时间,以决定公司是否应该采用 HPC 方法。
好吧,什么是 HPC?
对于那些不了解高性能计算(HPC)的人来说:简单地说,这是一种利用多台计算机比传统的单台计算机方法更快地解决问题的策略。它使用并行编程范例,而不是顺序编程。记住,深度学习几乎是令人尴尬的并行!
HPC 是模拟技术进步的基础,在媒体、石油、卫生、科学、数学等行业中非常普遍。
HPC 能给深度学习世界带来什么?
其核心是,更快的迭代时间,更快的解决时间。我们都知道这对企业/研究人员探索更多、发现更多是至关重要的。从而有效地使工程周期在其工作中更有成效。
有了 HPC,无论花了多少“疯狂”的时间来训练,现在都变成了“这太快了!”该训练了。这有效地帮助工程师不要浪费时间交叉手指希望他们的方法第一次就能正确工作,因为如果不行,他们就需要重做整个事情并等待下一个工作周期!
https://community.emc.com/community/products/rs_for_ai/blog/2019/04/02/effectiveness-of-large-batch-training-for-neural-machine-translation-nmt
上面的示例是一个 HPC 工作负载,解决问题的时间缩短了 121 倍。全程训练从 30 天到 6 小时。
这是吴恩达博士关于高性能计算和深度学习的视频。
看起来很有趣,需要什么来开始呢?
为了处理分布并支持并行执行,我们需要像 Open MPI 或 MVAPICH 这样的快速通信库来分配工作负载,并利用 GPU、TPU 等加速器有效地在节点间广播和聚合结果。我们还需要支持多节点作业的深度学习库,如 horovod 、分布式 tensorflow 等。
参考资料:
[## 高性能计算简介:为什么使用高性能计算?
在所有这些情况下,所需要的是能够同时使用更多的计算机。幸运的是,大规模…
epcced.github.io](https://epcced.github.io/hpc-intro/00-why-hpc/)
为什么数据可视化会失败?
原文:https://towardsdatascience.com/why-do-data-visualizations-fail-39fd29172d7a?source=collection_archive---------10-----------------------
简单…伪装成有用见解的图表
Photo by Braydon Anderson on Unsplash
当数据可视化失败时,可能有多种原因。最常见的原因是作者没有理解信息。因此,数据中的含义是不清楚的,甚至是隐藏的。作者没有考虑观众在问什么问题。
考虑下面这个来自美国运输局的例子。这个饼状图真的让我很烦。标题表明作者想谈论波士顿机场的航班延误。最大的一块是准时近 80%。嗯?
Source: Bureau of Transportation
奇怪的是,这个可视化应该回答的问题实际上包含了作为一个类别的答案的积极主题部分。很明显,准点不是航班延误的理由——把它包括在内是没有意义的。事实上,它只是掩盖了其他数据,使信息不清楚。
重拍 1:关注主要信息
如果信息是航班通常是准时的——那可以用一个数字来表达。然后用剩下的数据解释延迟的原因。在这个例子中,我改变了标题,强调了正数。
饼图没有第一个示例中的所有类别。少于 1%的原因被放在“所有其他”类别中,以保持对主要信息的关注。
饼图可能是合适的,因为这是一个部分到整体的讨论。当类别太多时,它不允许真正的原因通过。请注意,切片大小相似,当一个类别占主导地位时,饼图效果最佳。
由于饼图扇区大小相似,此图表需要查看者做更多的工作。我怀疑观众会阅读这些数字,而不是让 dataviz 做它的工作。这导致没有理由有一个饼图。
翻拍 2:回答观众的真实问题
如果我们考虑观众而不仅仅是数据。观众关心的不仅仅是“航班多长时间准点”,而是“为什么会晚点?”
分级条形图更好地显示了这些信息。在这个例子中,我把饼图换成了水平条形图。然后对类别进行排序,按价值显示前 4 个原因。可视化使答案变得毫不费力。很容易看到两条消息。
“飞机晚点”的第二个原因更加明显。我希望这只是一个糟糕的数据分类。否则,这似乎只是一个聪明的回答。“晚是因为飞机晚点了”嗯,废话。
提示:加上“. 1”的具体百分比并不能真正澄清。很多时候作者添加它是因为他们认为它使值看起来更准确或更有说服力。
不要盲目构建图表
原始数据在一个类别中包含了所有的原因,而且作者似乎没有花太多心思来确定数据的格式是否正确。作者也没有考虑到观众想从数据中了解什么。
你的外卖
- 知道你的听众想要得到什么信息——不仅仅是你有什么数据
- 考虑一下你的可视化是否向观众清楚地解释了这一点
为什么神经网络需要激活函数?
原文:https://towardsdatascience.com/why-do-neural-networks-need-an-activation-function-3a5f6a5f00a?source=collection_archive---------19-----------------------
为什么神经网络需要激活函数?每当你第一次看到一个神经网络的架构,你首先会注意到的一件事是它们有许多相互连接的层。
神经网络中的每一层都有一个激活函数,但为什么它们是必要的呢?为什么它们如此重要?在这里了解答案。
什么是激活功能?
要回答什么是激活函数的问题,我们先退一步,回答一个更大的问题:什么是神经网络?
什么是神经网络?
神经网络是一种机器学习模型,在给定某些输入和输出向量的情况下,它会尝试将输出“拟合”到输入。
这意味着,给定一组具有我们希望预测的某些值的观察实例,以及我们关于每个实例的一些数据,它将尝试概括这些数据,以便它可以正确预测问题的新实例的值。
作为一个例子,我们可能正在设计一个图像分类器(通常使用一个卷积神经网络)。这里,输入是一个像素向量。输出可以是数字类别标签(例如,1 代表狗,0 代表猫)。
这将训练一个神经网络来预测一幅图像是包含一只猫还是一只狗。
但是,给定一组像素,如果它们对应于狗的图像,则返回 1,如果对应于猫的图像,则返回 0,这是什么数学函数呢?
想出一个手动的数学函数是不可能的。对人类来说。
所以我们所做的是发明一种机器来为我们找到那个功能。
它看起来像这样:
Single hidden layer Neural Network. Source.
但是你可能已经看过这张图很多次了,认出它是为了一个神经网络,仍然不知道它到底代表了什么。
在这里,每个圆圈代表我们神经网络中的一个神经元,垂直排列的神经元代表每一层。
神经网络是如何工作的?
神经元只是一个数学函数,它接受输入(指向它的神经元的输出),然后返回输出。
这些输出作为下一层的输入,以此类推,直到我们到达最终的输出层,这是我们返回的实际值。
有一个输入层,其中每个神经元将简单地返回输入向量中的相应值。
对于每组输入,神经网络的目标是使其每个输出尽可能接近实际期望值。
再次回想一下图像分类器的例子。
如果我们将动物的 100x100px 图片作为输入,那么我们的输入层将有 30000 个神经元。所有像素都是 10000,乘以 3,因为一个像素已经是一个三元向量(RGB 值)。
然后,我们将通过每一层运行输入。我们得到一个新向量作为每层的输出,将其作为输入提供给下一层,以此类推。
层中的每个神经元将返回单个值,因此层的输出向量将具有与层中的神经元一样多的维度。
那么,给定一些输入,神经元会返回哪个值呢?
神经元做什么?
一个神经元接受一个输入向量,并对它做三件事:
- 乘以一个权重向量。
- 给乘积加上一个偏差值。
- 将激活函数应用于该值。
我们终于找到了我们业务的核心:这就是激活函数的作用。
我们通常使用非线性函数作为激活函数。这是因为线性部分已经由先前应用的乘积和加法处理。
最常用的激活功能有哪些?
我说的是非线性函数,这听起来很符合逻辑,但是什么是典型的、常用的激活函数呢?
让我们看一些例子。
热卢
ReLU 代表“校正线性单位”。
在所有激活函数中,这是最类似于线性函数的一个:
- 对于非负值,它只应用标识。
- 对于负值,它返回 0。
用数学术语来说,
这意味着所有负值都将变为 0,而其余值保持不变。
这是一个受生物启发的功能,因为大脑中的神经元要么“激发”(返回正值),要么不激发(返回 0)。
注意如何与偏差结合,这实际上过滤掉低于某个阈值的任何值。
假设我们的偏差的值为-b。任何低于 b 的输入值,在加上偏差后将变成负值。在对其应用 ReLU 后,它变为 0。
乙状结肠的
sigmoid 函数将任意实数作为输入,返回 0 和 1 之间的值。由于它是连续的,它有效地" smushes "值:
如果你把 sigmoid 应用于 3,你会得到 0.95。将它应用到 10,你得到 0.999…它会一直接近 1,但永远不会达到 1。
同样的情况发生在负方向,除了它收敛到 0。
这是 sigmoid 函数的数学公式。
如你所见,当 x 趋近于无穷大时,它趋近于 1,当 x 趋近于负无穷大时,它趋近于 0。
它也是对称的,当其输入为 0 时,其值为 1/2。
因为它取 0 到 1 之间的值,所以如果您想对概率建模,这个函数作为输出是非常有用的。
如果你希望应用一个“过滤器”来部分保留某个值(就像在一个 LSTM 的遗忘之门中),这也是有帮助的。
为什么神经网络需要激活函数?
我们已经讨论了一些不同激活函数在不同情况下的应用。
一些让信号通过或阻挡它,另一些过滤它的强度。甚至还有 tanh 激活函数:它不是过滤,而是将输入变成负值或正值。
但是为什么我们的神经网络需要激活功能呢?如果我们不用它们会怎么样?
我在 Yoshua Bengio 的令人敬畏的深度学习书籍中找到了这个问题的解释,我认为它在那里得到了完美的解释。
我们可以让每个神经元简单地返回它们的结果,而不是用非线性函数组合我们的线性变换(实际上是用同一性组合它们)。
但是,我们所有的层将简单地堆叠一个又一个仿射(乘积加加法)变换。每一层只需在前一层的基础上增加一个矢量积和矢量加法。
可以证明(你甚至可以说服自己,如果你在白板上用一个小向量来计算),这个仿射变换的组合,等价于一个单独的仿射变换。
实际上,整个“神经网络”中所有的激活函数都被恒等式所取代,这个“神经网络”只不过是一个矢量积和一个偏差加法。
有许多问题是线性变换无法解决的,所以我们实际上是在减少我们的模型能够估计的函数的数量。
作为一个非常简单但却惊天动地的例子,考虑 XOR 运算符。
试着找一个二元向量,加上一个可以取 x1 和 x2 的 bias,把它们变成 x1 XOR x2。去吧,我等着。
…
没错,你不能。没人能。然而,考虑一下
如果你计算一下,你会看到对于 1 和 0 的每个可能的组合都有期望的输出。
恭喜你!你刚刚训练了你的第一个神经网络!
它学会了一个线性模型永远学不会的问题。
结论
我希望在这个解释之后,你现在能更好地理解为什么神经网络需要一个激活函数。
在以后的文章中,我可能会涉及其他激活函数及其用途,比如 SoftMax 和有争议的 Cos。
你觉得怎么样?你从这篇文章中学到什么了吗?你觉得有趣吗?数学关了吗?
如果你想对我说什么或问什么,请随时在 Twitter 、 Medium 或 dev.to 上联系我!
如果你想成为一名数据科学家,可以看看我的 最佳机器学习书籍 清单和我的 Bash 教程 。
原载于 2019 年 7 月 1 日http://www . data stuff . tech。
基于声谱图的 VGGs 为什么会摇滚?
原文:https://towardsdatascience.com/why-do-spectrogram-based-vggs-rock-6c533ec0235c?source=collection_archive---------19-----------------------
我:vgg 很烂,因为它们的计算效率很低,还因为它们是对计算机视觉架构的幼稚采用。
网上随便一个人:乔迪,你可能错了。人们大量使用 vgg!
不需要更多的介绍,这一系列的帖子是关于:我想分享我对这场讨论的诚实想法,因为思考计算机视觉深度学习架构在音频领域的作用。
在之前的帖子中,我解释了 VGGs 的问题。换句话说:我列出了一些为什么他们烂的原因。现在,是解释他们为什么摇滚的时候了!如果人们(比如我)找到了基于谱图的 VGGs 烂的明确证据,为什么深度学习从业者要用 VGGs?这几款有什么好的?
- 帖子一:为什么基于声谱图的 vgg 很烂?
- 帖子二:为什么基于声谱图的 VGGs 会摇滚?【本帖】
- 帖子三:基于波形的 VGGs 是怎么回事?
在这些帖子中,我将围绕 VGG 模型展开讨论,这是一种被音频研究人员广泛使用的计算机视觉架构。简而言之,vgg基于一个非常小的过滤器与最大池相结合的深度堆栈(见上面的简化图)。
如果他们很烂,为什么人们还在用 VGG 模型?
我回答的关键是:模型的灵活性,来自计算机视觉社区的动力。
VGG 的灵活性
音频 CNN 的设计可以考虑领域知识,也可以不考虑(更多信息,见本文)。毫无疑问,基于频谱图的 vgg 在设计中没有利用任何音频领域的知识。那有什么好的?
通过在设计过程中不考虑任何领域知识,可以最小化模型解决问题的假设。例如,如果不确定如何完成任务,这可能是有益的。
请记住,深度学习游戏的一部分是允许架构自由地发现特性,这导致了非常成功的模型。如果我们专门设计一个模型来有效地学习大脑或时间特征,我们可能会询问过多限制解空间的风险。
相反,vgg 被设计为对信号或问题的性质做出最小的假设,因此任何结构都可以通过分层组合小上下文表示来学习。因此,vgg 询问成为超级灵活的函数逼近器的风险(与正则化模型相反)。这就是人们使用 vgg 的原因,因为在某些情况下,这种灵活性非常有用!
来自计算机视觉社区的动力
可悲的是,很多情况下,人们简化为: AI →深度学习→计算机视觉。人们可以在人工智能科学领域找到明确的证据,在那里,大多数实证结果是通过用深度神经网络处理计算机视觉问题收集的。
假设深度学习场景显然由计算机视觉研究人员主导,那么许多令人兴奋的模型、非常清晰的教程或软件工具都是为此而开发的,这似乎是合理的。
特别是,计算机视觉教程对我们的领域产生了重大影响。对于任何深度学习音频从业者来说,看起来更容易(也更安全!)只需遵循这些令人惊叹的计算机视觉在线教程之一,而不是实现一个没有很好记录的音频架构。因此,许多人最终拥有了一个可以处理“音频图像”的计算机视觉模型!
来自计算机视觉领域的这种强劲势头的一个直接后果是,许多人认为 vgg 是“标准的 CNN”,而它们只是一种适合计算机视觉社区特定需求的任意设计。
为什么这些有用?这可能只是因为深度神经网络是非常强大的函数逼近器。或者因为如果有足够的训练数据可用,则所使用的架构的相关性不太重要。因此,通过将 VGG 更改为您最喜欢的音频架构,您可能只会获得“5%”。
虽然你的模型会更小,更易理解,并且可能会更好地工作…这值得努力吗?也许不是,因为我们懒。 我们不愿意为了区区“5%”而花费自己的时间。我们可能会生活在一个毫无意义的建筑中。因为毕竟 VGGs 只“看光谱图”。改变这一点无助于给世界带来和平。
数据科学家应该有充分的理由进行更多的实验
原文:https://towardsdatascience.com/why-do-we-do-and-how-can-we-benefit-from-experimental-studies-a3bbdab313fe?source=collection_archive---------23-----------------------
实验和因果推理
好的,坏的,丑陋的
Photo by Claus Grünstäudl on Unsplash
2021 年 2 月 21 日更新
数据科学家喜欢用新方法给世界带来惊喜。如果现有的工具包不能完成工作,他们就出去借用其他学科的技术,而不打算回来。在这些实验中,受控实验在因果推理中名列前茅。
我们在细胞和电路上进行实验;
我们也在人类身上做实验。
这篇文章将讨论什么是社会实验,以及为什么研究人员应该进行更多的社会实验。
丑陋的
让我们暂停一下,试着回答以下问题:
如果没有假新闻,谁会赢得 2016 年总统大选?
如果优步实行了替代报名计划,有多少新司机会在三藩市报名?
你可能已经意识到,以确定的语气回答这些假设的问题是不可能的,因为我们不可能重现 2016 年,举行一场没有假新闻的选举,优步也不可能知道替代计划的效果。
我们无法同时观察到治疗的存在和缺乏,这种现象被称为“因果推断的基本问题
我们完了吗?
幸运的是,有不好的(观察)和好的(实验)解决方案。
坏事
先说坏的:观察设计。我们收集了一个数据集,其中包含您选择的样本量的几十个关键协变量。然后,我们根据变量进行各种统计测试,并生成见解。这是观察性设计的典型走查。
具体来说,它具有以下步骤:
1.基于理论选择变量
2.收集数据
3.建立统计模型
4.分析数据
5.调查的结果
不同的观察方法可能会通过添加或删除一些步骤来调整过程,但会坚持整个流程。
陷阱一:调查往往收集不具有代表性的样本,人们在调查中撒谎。
观察数据的主要来源是调查,这在两个方面有所欠缺。
首先,当人们意识到他们正在被研究时,他们的行为会有所不同。如果他们被问及对敏感问题的看法(如同性恋、堕胎、唐纳德·特朗普等。),受访者知道有一个‘标准’答案。所以,他们隐藏自己的真实意见,给出社会可以接受的答案。
第二,获得有代表性的样本既困难又昂贵。在社会科学中,我们认识到地区差异和我们的发现可以应用的程度,也就是外部有效性。研究人员应该收集总人口中有代表性的样本来检验假设。否则,我们的结论不能推广到其他情况。
在 20 世纪 30 年代,有一份很有影响力的杂志叫做《文学文摘》,它预测罗斯福会在 1936 年的总统选举中大比分落败。历史证明事实并非如此。
LD 的预测大错特错是由于它的数据收集过程:它从电话簿上收集数据。在大萧条的高峰期,拥有电话的家庭不是典型的美国家庭,也不代表大多数人的政治观点。
研究人员必须权衡利弊,做出权衡:有代表性的样本是可取的,但它既昂贵又耗时。
数据科学家需要检查观测数据的统计假设。例如,线性回归模型有以下假设:
- E(y) = Xβ
- 独立
- 等方差(σ )
- 常态
在采用线性模型之前,我们应该检查每个假设。否则,我们就是在用错误的模型得出有缺陷的结论。数据科学家擅长数据分析,但不擅长运行基本假设测试。
陷阱 2:你检查过统计假设吗?
观察设计不控制数据生成过程,严重依赖理论来指导变量选择。如果理论暗示了太多的变量,但是你只有很小的样本量呢?
陷阱 3:在自由度上运行过低。
例如,理论认为 40 个小样本有 50 个变量。
我们包括所有 50 个变量吗?
不,模型甚至不会在 R 中运行,因为缺少自由度。简单地说,这个术语衡量我们可以从数据中获得多少信息:包含的变量越多,剩下的信息就越少。变数太多就会失去动力。
理论不能一直做繁重的工作。当今世界,有些事情是任何人都无法控制的。理论无法预测全部。理论不能告诉我们包括不可观测的变量。
陷阱四:理论不能告诉你要包含未观察到的变量。
好人
实验有一个随机分配过程,消除了实验组之间的任何先验偏差,并有“苹果对苹果”的比较。在保持所有其他变量不变的情况下,我们可以将结果的差异归因于干预的存在。
优势 1:实验具有较高的内部效度。
如上所述,观察性研究依赖于理论来指导变量选择,如果没有理论来开始,就会失败。新兴的研究领域经常遇到这个问题。
优势 2:即使没有先验知识,实验也会蓬勃发展。
因为它直接控制数据是如何产生的,所以当我们没有现有的理论时,一个实验可以存活并茁壮成长。换句话说,数据科学家可以运行实验来测试和生成假设。
优势 3:实验澄清混合结果。
由于测量的变化和不同的数据来源,观察设计经常产生混合的结果。用观察的方法是不可能分辨出哪个是对的,哪个是错的。对于这些情况,如何才能澄清混合物?做个实验,让数据告诉你。
外卖食品
在进行因果推理时,我们依靠实验和非实验的方法来反事实。观察方法存在以下缺陷:
陷阱一:调查往往收集不具有代表性的样本,人们在调查中撒谎。
陷阱 2:你检查过统计假设吗?
陷阱三: 自由度 运行过低。
陷阱四:理论不能告诉你要包含未观察到的变量。
与之形成鲜明对比的是,实验提供了以下优势:
优势 1:实验具有较高的内部效度。
优势二:即使没有先验知识,实验也会蓬勃发展。
优势三:实验澄清混合结果。
实验和因果推理:
[## 运行 A/B 测试的 8 个常见陷阱
如何不让你的在线控制实验失败
towardsdatascience.com](/online-controlled-experiment-8-common-pitfalls-and-solutions-ea4488e5a82e) [## 相关性并不意味着因果关系。现在怎么办?
数据科学中因果关系和相关性之间的地盘之争
towardsdatascience.com](/the-turf-war-between-causality-and-correlation-in-data-science-which-one-is-more-important-9256f609ab92)
喜欢读这本书吗?
请在 LinkedIn 和 Twitter 上找到我。
还有,看看我其他关于人工智能和机器学习的帖子。
我们为什么需要 AWS SageMaker?
原文:https://towardsdatascience.com/why-do-we-need-aws-sagemaker-79bce465f19f?source=collection_archive---------1-----------------------
对于开发机器学习产品和解决方案的大型企业来说,这是一个更严肃的思考。
今天,行业中有几个平台可以帮助软件开发人员、数据科学家以及外行人在短时间内开发和部署机器学习模型。一些平台声称要将人工智能和数据科学民主化,达到几乎不需要任何编码技能就可以解决数据科学问题的程度,而其他一些平台则声称这是在云中部署解决方案的最快最简单的方法。所有这些说法,有些非常深奥,会让你想知道一个简单的问题— 什么平台最适合我?
这个问题的答案肯定不是直截了当的。基于你的优先级、灵活性、规模、成本、首选的 ML 框架、易用性和其他方面,没有一个适合所有选择的尺寸。对于一个有意义的解决方案,我们必须真正从理解我们为什么首先需要一个平台开始。一旦我们理解了“为什么”,我们就会理解“一个给定的平台将如何为我们解决问题,然后我们就可以最终回答最后通牒“什么样的平台最适合我?”
从“为什么”开始总是把我们引向正确的方向。
Inspired by Simon Sinek’s ‘Start with WHY’
在这篇博客中,我的目标是通过回答“为什么”、“如何”和“什么”这一系列问题来启发你,以便为我们目前解决的企业中的大多数机器学习解决方案选择最佳平台。然后,我想将' AWS Sagemaker '作为该问题的有效候选项,并强调“我们为什么需要 AWS Sagemaker?”很明显,在企业中还有其他的问题和实验,对于它们来说,这不是最好的选择;我还将尝试强调这不是最佳选择的几个领域。
让我们从“为什么”开始。
以 1 为例—为什么我们需要一个开发机器学习解决方案的平台?
随着项目规模的增加,与机器学习项目相关的主要痛点会发生巨大变化。机器学习项目的典型工作流程如下所示。
Fig 1- An illustration for a typical Machine Learning project workflow
我们通常可以将相关任务列表分为 3 大类-
- 构建:在这里,我们定义问题,收集数据,分析数据,然后清理、转换和设计数据,使其成为所需的形式。
- 训练:我们利用一种或多种机器学习算法,训练(拟合)模型,从工程数据中学习模式。基于模型的性能,我们调整超参数,重新训练并重复该过程,直到我们得到相当可接受的结果。
- 部署:我们将模型部署到生产系统中,在那里它为更大的生态系统提供服务。
这整个过程是高度迭代的,并且可以预期变化会将进度循环回整个过程中的任何状态(如图所示)。在我们试验的大多数概念验证(PoC)和互联网上的可用学习资源(博客/教程/书籍/课程)中,整个过程都被高度简化了。这个过程中呈现的最大抽象是在“尺度的维度上。随着部署后“数据”、“训练迭代”和“推理”的规模增加,整个工作流变得过于复杂,最终演变成 3 个独立的工作流。
考虑一个我们将在企业中处理的相当复杂的 ML 问题。比方说,您有一个非常大的数据集,有数百万条记录(大约 10GB — 1TB)要处理,一旦部署了服务,至少需要数百次迭代(比如,对于深度神经网络)和每分钟大约 100,000 次 API 调用。然后,我们在实验中开发的普通 PoCs 不再是用例的对比。每个团队(构建、培训、部署)都需要不同类型的计算基础设施、不同的方法来解决问题,以及不同的规程来完成任务。图 2(如下)有助于理解工作流中的每一个组是如何作为一个独立的分支,以不同的技能和基础设施需求来执行的。构建阶段需要结合数据工程和数据分析。培训阶段需要机器学习技能,最后,部署阶段主要需要软件工程技能和一点 ML 技能。每个阶段都需要一个拥有完全不同技能的人。
通常,执行一个大规模的 ML 项目对团队的要求比我们对传统用例的期望要高得多。
为了解决这个问题,大多数组织在一个项目中雇佣多个具有各自技能的人来满足每个阶段的需求。这将是大数据工程师的组合——他设计整个数据管道,以所需的形式从一个屋檐下的多个异构来源收集所需的数据。一个数据科学家,他分析数据并为用例开发机器学习模型。最后,一名软件工程师将科学家开发的模型应用到生产系统中。
这个等式中的主要问题在于从构建到训练再到部署的过渡。数据科学家不是软件工程师,同样,软件工程师也不是数据科学家。对于数据科学家来说,将机器学习解决方案(他研究并原型化)部署到全面的 web 服务(可以集成到软件生态系统中的 API)中确实是一项艰巨的任务。数据科学家缺乏将研究原型和离线机器学习模型纳入大型复杂模型(服务)所需的软件技能,该模型可以实时推断数千个 API 调用。
另一方面,软件工程师精通这项工作,可以很容易地为大型软件系统完成这项工作。然而,缺乏对机器学习和数学技能的理解给实现带来了几个障碍。开发一个全面的 ML 服务确实需要开发者对这个过程有更深的理解,这在大多数情况下是非常困难的。
大多数组织遵循相同的做法,雇佣数据科学家来研究、试验、原型化和开发能够验证 ML 业务用例的 PoC。随后,雇佣一个软件开发团队,根据所需的业务标准,将 PoC 开发成成熟的、可扩展的 web 服务或软件产品。然而,软件工程师和数据科学家之间的合作也不是那么容易完成的。对于每个团队来说,理解另一个团队的需求、技术语言和想法实在是太难了。
既然我们已经很好地理解了痛点,我们可以尝试用为什么提出一个更简洁的问题。
取 2 —我们为什么真的需要一个平台?
解决大型 ML 问题的最有效的方法是帮助数据科学家以简洁、抽象但有效的方式提供必要的软件技能,作为高度可伸缩的 web 服务(API)来交付 ML 解决方案。软件开发团队可以将 API 集成到所需的软件系统中,并将 ML 服务抽象为另一个包装在 API 周围的服务。(软件工程师热爱 API)。因此,我们需要一个平台,能够使数据科学家拥有必要的工具,以真正端到端的方式独立执行机器学习项目。
平台如何解决这个问题?
鉴于项目的 3 个阶段极其不同,我们需要设计一个由数据科学家主导的解决方案。如果我们有一个平台,用简洁的抽象来补充每个阶段所需的剩余技能,同时仍然高效、灵活地让数据科学家交付结果,我们就可以解决上面讨论的问题。
因此,我们需要一个平台,在这个平台上,数据科学家将能够利用他现有的技能来设计和研究数据,训练和调整 ML 模型,并最终通过动态地提供所需的硬件来将模型部署为 web 服务,通过简单的抽象来协调整个流程和过渡以供执行,并提供一个可以灵活扩展和满足需求的健壮解决方案。
简洁的问题提出并回答后,我们现在可以进入最后一个问题了。
什么平台最适合我?
source: AWS
在这里,我可以说, AWS Sagemaker 最适合我们。它为运行 R/Python 内核的 Jupyter 笔记本提供了一个计算实例,我们可以根据我们的数据工程需求按需选择。我们可以使用我们使用的传统方法(比如 Pandas + Matplotlib 或 R +ggplot2 或其他流行的组合)将数据可视化、处理、清理并转换为我们需要的形式。在数据工程之后,我们可以根据模型的计算需求,使用不同的计算实例来训练模型,比如优化内存或启用 GPU。为各种型号利用智能默认高性能超参数调谐设置。利用丰富的 AWS 库中的性能优化算法,或者通过行业标准容器引入我们自己的算法。此外,将经过训练的模型作为 API 进行部署,同样使用不同的计算实例来满足业务需求和弹性伸缩。配置硬件实例、运行高容量数据作业、用简单的命令协调整个流程,同时抽象出巨大的复杂性并最终实现无服务器弹性部署的整个流程只需几行代码,而且经济高效。Sagemaker 是一个改变游戏规则的企业解决方案。
【Sagemaker 可能不适合的一些场景。
尽管我们上面讨论的问题代表了绝大多数的 ML 项目,但是肯定有一些场景这可能不是一个有效的选择。Sagemaker 希望您能够根据自己的数据工程和分析需求编写代码(使用自己选择的语言)。基础设施的整个编排和从一个阶段到另一个阶段的转换只需要几行代码;绝对需要少量代码。对于专业人士来说,他们更喜欢数据工程和建模阶段的拖放(绝对没有代码)解决方案,Azure ML studio 将是一个更理想的选择。Azure ML Studio 和 AWS Sagemaker 都是开发 ML 解决方案的优秀平台,但是面向完全不同的用户群。由史蒂夫·迪勒撰写的这篇文章很好地启发了我们两者的不同之处。
总结思路
对于大多数想要完成真正端到端 ML 解决方案的数据科学家来说,AWS Sagemaker 是一个很好的选择。它负责抽象出完成任务所必需的大量软件开发技能,同时保持高效、灵活和成本效益。最重要的是,它帮助你专注于核心的 ML 实验,并用类似于我们现有工作流程的简单抽象工具来补充剩余的必要技能。
为什么我们在 NLP 中使用单词嵌入?
原文:https://towardsdatascience.com/why-do-we-use-embeddings-in-nlp-2f20e1b632d2?source=collection_archive---------1-----------------------
自然语言处理(NLP)是机器学习(ML)的一个子领域,它处理自然语言,通常以文本的形式,文本本身由更小的单元组成,如单词和字符。处理文本数据是有问题的,因为我们的计算机、脚本和机器学习模型无法以任何人类的方式阅读和理解文本。
当我读到“猫”这个词时,许多不同的联想被唤起——它是一种可爱的毛茸茸的小动物,吃鱼,我的房东不允许,等等。但这些语言关联是经过数百万年进化磨砺的相当复杂的神经计算的结果,而我们的 ML 模型必须从零开始,没有预先建立的对词义的理解。
那么,文本输入应该如何发送给我们的模型呢?计算机可以很好地处理数字输入,所以让我们把问题换成:
我们怎样才能最好地用数字表示文本输入?
理想情况下,我们提出的任何数字表示方法都应该是语义上有意义的——数字值应该尽可能多地捕捉单词的语言意义。一个精心选择的、信息丰富的输入表示可以对整个模型的性能产生巨大的影响。
单词嵌入是解决这个问题的主要方法,并且如此普遍,以至于它们的使用实际上在任何 NLP 项目中都是假定的。无论您是开始一个文本分类、情感分析还是机器翻译的项目,您都有可能从下载预先计算的嵌入(如果您的问题相对标准)或者考虑使用哪种方法从您的数据集中计算您自己的单词嵌入开始。
但是我们为什么要在 NLP 中使用嵌入呢?
没有谈论任何计算嵌入的特定算法(假装你从未听说过 word2vec 或 FastText 或 ELMo),这篇文章回到基础来回答如下问题:
- 为什么我们需要任何复杂的方法来表示单词呢?
- 用数字表示单词的最简单方法是什么,为什么这还不够?
- 我们所说的嵌入“把词映射到高维语义空间”到底是什么意思?
- 如何将单词嵌入可视化并直观地理解?
让我们开始吧。
一个没有单词嵌入的世界
给定这 10,000 个单词的词汇表,用数字表示每个单词的最简单方法是什么?
Our vocabulary of 10,000 words.
你可以简单地给每个单词分配一个整数索引:
Our vocabulary of 10,000 words, with each word assigned an index.
给定这种单词到整数的映射,我们可以将单词表示为数字向量,如下所示:
- 每个单词将被表示为一个 n 维向量,其中 n 是词汇量
- 每个单词的向量表示将主要是“0”,除了在对应于单词在词汇表中的索引的位置将有单个“1”条目。
举几个例子:
- 我们的第一个词汇单词“aardvark”的向量表示将是[1,0,0,0,…,0],它是第一个位置的“1”,后面是 9,999 个零。
- 我们的第二个词汇单词“ant”的向量表示将是[0,1,0,0,…,0],即第一个位置是“0”,第二个位置是“1”,之后是 9998。
- 诸如此类。
这个过程叫做一热矢量编码。您可能也听说过这种方法在多类分类问题中被用来表示标签。
现在,假设我们的 NLP 项目正在构建一个翻译模型,我们想要将英语输入句子“the cat is black”翻译成另一种语言。我们首先需要用一次性编码来表示每个单词。我们将首先查找第一个单词“the”的索引,并发现它在我们的 10,000 长的词汇表中的索引是 8676。
然后,我们可以使用长度为 10,000 的向量来表示单词“the ”,其中除了位置 8676 处的条目是 1 之外,每个条目都是 0。
我们对输入句子中的每个单词进行索引查找,并创建一个向量来表示每个输入单词。整个过程看起来有点像这个 GIF:
GIF showing the one-hot encoding of the words in the input sentence “the cat is black”.
注意,这个过程为每个输入单词生成了非常稀疏的(大部分为零)特征向量(这里,术语“特征向量”、“嵌入”和“单词表示”可互换使用)。
这些一键向量是将单词表示为实数值向量的一种快速简单的方法。
快速旁白:如果您想生成整个句子的表示,而不仅仅是每个单词,该怎么办?最简单的方法是连接或平均句子的成分词嵌入(或两者的混合)。更高级的方法,如编码器-解码器 RNN 模型,将顺序读取每个单词的嵌入,以便通过多层转换逐步建立句子意思的密集表示(见这篇文章对 ELMo 句子嵌入的快速概述)。
稀疏独热编码的问题
我们已经完成了一次性编码,并成功地将每个单词表示为一个数字向量。许多 NLP 项目已经这样做了,但是最终结果可能很一般,特别是当训练数据集很小时。这是因为一键矢量不是一种很好的输入表示方法。
为什么单词一键编码次优?
- 相似性问题。理想情况下,我们希望类似的单词,如“猫”和“老虎”,有一些相似的特征。但是有了这些一键向量,“猫”和“老虎”就像字面上的任何其他单词一样相似,这并不好。与此相关的一点是,我们可能想要对单词 embeddings 进行类似类比的向量运算(例如,“cat”-“small”+“large”等于什么?希望是像大猫一样的东西,例如“老虎”或“狮子”)。我们需要足够丰富的单词表示来允许这样的操作。
- 词汇量问题。使用这种方法,当你的词汇量增加了 n 时,你的特征大小向量的长度也增加了n。独热向量的维数与字数相同。您不希望要素尺寸爆炸式增长是有原因的,也就是说,更多的要素意味着要估计更多的参数,您需要指数级的更多数据来充分估计这些参数,以构建合理的概化模型(请参阅:维数灾难)。作为一个粗略的经验法则,您需要比您拥有的特征多几个数量级的训练数据。
- 计算问题。每个单词的嵌入/特征向量大多为零,许多机器学习模型在非常高维度和稀疏特征的情况下不会很好地工作。神经网络尤其难以处理这种类型的数据(尽管有变通办法,例如使用一种类似套索的特征选择)。有了这么大的特征空间,你也有陷入内存甚至存储问题的危险,特别是如果你正在处理的模型不能很好地处理稀疏矩阵的压缩版本(例如 SciPy 的稀疏矩阵 CSR 格式,教程这里)。
这些点是相关的,但是恶意地说:计算和词汇大小问题可以被认为是技术问题,也许相似点更像是一个“好东西”。
密集嵌入解决了一键向量存在的最重要的问题是什么?
嵌入解决的核心问题是泛化。
- 一般化问题。如果 as 假设像“猫”和“老虎”这样的词确实是相似的,我们想要某种方式将该信息传递给模型。如果其中一个单词是罕见的(例如“liger”),这就变得特别重要,因为它可以在计算路径上附带一个类似的、更常见的单词通过模型。这是因为,在训练期间,模型学会了以某种方式对待输入“猫”,即通过由权重和偏差参数定义的多层转换来发送它。当网络最终看到“狮虎”时,如果它的嵌入与“猫”相似,那么它将走与“猫”相似的道路,而不是网络必须完全从零开始学习如何处理它。对你从未见过的事物做出预测是非常困难的——如果它与你见过的事物有关,那就容易多了。
这意味着嵌入允许我们建立更一般化的模型——我们让相似的词“共享”参数和计算路径,而不是让网络去争相学习许多不同的方法来处理断开的输入。
稀疏独热编码总是不好的吗?
在少数情况下,使用稀疏独热编码优于嵌入编码。套用 Yoav Goldberg 在他的NLP 神经网络初级读本中的话,如果:
- 您拥有相对较少的输入要素
- 你不期望输入是有意义的相关(与上面的“猫”和“狮虎”的例子相反)
- 您不希望输入共享模型参数
- 你有相当多的数据可以学习
那么也许使用它们并不是最糟糕的主意。
单独但相关的一点:当然, one-hot 编码在分类数据预处理的情况下总是相关的,因为许多 ML 模型不能直接处理分类数据(如文本标签)。您仍然可以使用它们将一个多类标签向量转换成多个二进制类向量,或者将一些分类特征向量转换成它们的二进制版本。
走向密集的、语义上有意义的表达
既然我们已经讨论了热点向量及其缺陷,那么让我们讨论使用密集的、语义上有意义的特征向量来表示单词意味着什么。
如果我们从我们的词汇表中选取 5 个示例单词(比如“aardvark”、“black”、“cat”、“duvet”和“zombie”),并检查它们由上面讨论的一键编码方法创建的嵌入向量,结果将如下所示:
Word vectors using one-hot encoding. Each word is represented by a vector that is mostly zeroes, except there is a single “1” in the position dictated by that word’s index in the vocabulary. Note: it’s not that “black”, “cat”, and “duvet” have the same feature vector, it just looks like it here.
但是,作为说某种语言的人,我们知道单词是这些丰富的实体,具有许多层次的内涵和意义。让我们为这 5 个单词手工制作一些语义特征。具体来说,让我们将每个单词表示为具有介于 0 和 1 之间的某种值的四个语义属性,“动物”、“蓬松”、“危险”和“怪异”:
Hand-crafted semantic features for 5 words in the vocabulary.
所以,来解释几个例子:
- 对于“土豚”这个词,我给了它一个很高的“动物”特征值(因为它实际上是一种动物),以及相对较低的“蓬松度”(土豚有短鬃毛)、“危险”(它们是小型夜间穴居猪)和“怪异”(它们很迷人)。
- 对于“猫”这个词,我给它的特征“动物”和“蓬松度”(不言自明),一个中值“危险”(如果你曾经养过宠物猫,也是不言自明的),一个中值“怪异”(尝试搜索“sphynx 猫”)。
基于语义特征值绘制单词
我们已经找到了要点:
每一个语义特征都可以被看作是更广、更高维度的语义空间中的单个维度。
- 在上面虚构的数据集中,有四个语义特征,我们可以一次绘制两个,作为 2D 散点图(见下文)。每个特征是不同的轴/尺寸。
- 每个单词在这个空间中的坐标由它在感兴趣的特征上的特定值给出。例如,单词“aardvark”在蓬松度与动物 2D 图的 2D 图上的坐标是(x=0.97,y=0.03)。
Plotting word feature values on either 2 or 3 axes.
- 类似地,我们可以考虑这三个特征(“动物”、“蓬松”和“危险”),并在这个 3D 语义空间中绘制单词的位置。例如,单词“duvet”的坐标是(x=0.01,y=0.84,z=0.12),表明“duvet”与蓬松的概念高度关联,可能有点危险,并且不是动物。
这是一个手工制作的玩具示例,但是实际的嵌入算法当然会为输入语料库中的所有单词自动生成嵌入向量。如果您愿意,您可以将 word2vec 这样的单词嵌入算法视为单词的无监督特征提取器。
像 word2vec 这样的单词嵌入算法是无监督的单词特征提取器。
这篇文章不会描述这些算法是如何工作的,但核心思想是,在类似上下文中使用的单词将被赋予类似的表示。也就是说,以类似方式使用的单词将在高维语义空间中紧密放置在一起——这些点将聚集在一起,它们彼此之间的距离将很低。
应该用多少个维度来表示单词?
单词嵌入算法通常会要求您设置希望嵌入的维数——这里的正确答案是什么?
直觉上,你可能想要更多的维度,更多类型的输入。因此,如果您要计算单词的嵌入,您可能需要更多的维度,在您的语料库中可能有数万种类型,而如果您要计算词类标签(如“名词”、“动词”、“形容词”)的嵌入,则没有那么多类型。例如,在 NLTK(一个流行的 Python NLP 库)中只有 35 种词性,您可能不需要太多的维度来很好地表示每种词性。
多少嵌入维数是最佳的问题实际上是一个经验问题,最佳数目在理论上还没有解决。这里的权衡是准确性和计算问题之间的权衡:
- 更多的维度意味着计算单词表达越来越精确的潜力
- 但更多的维度也意味着对计算资源的更高需求(处理速度、内存需求)——这在训练阶段更加明显,但也确实会影响推理速度。
在实践中,人们使用大约 50 到 500 维的单词嵌入向量(您经常遇到 300 维),有时更多地用于竞争非常激烈的系统,在这些系统中,您试图从模型中挤出尽可能多的性能。
可视化单词嵌入
与此相关的一点是,鉴于这些语义空间通常是非常高维的,你打算如何可视化其中发生的事情?人们(即使是杰夫·辛顿)也无法真正想象超过 3 维的空间。
“要处理 14 维空间中的超平面,想象一个 3 维空间,大声对自己说‘14’。大家都这么干。”杰夫·辛顿
您可以随机选择两个或三个要素,并在这两个或三个轴上绘制您的点。然而,由于特性/轴通常是不可解释的,你不知道选择哪一个是特别有见地或有趣的。此外,单词的位置可能会根据您选择的特定坐标轴而有很大的不同,所以如果您随机选择几个坐标轴,您将无法获得单词位置的准确印象。
在实践中,人们会经常使用 t-SNE 或 PCA 等降维方法将高维的嵌入点投影到一个更低维的空间中(有一定的信息损失)。重要的是,它允许你只为每个单词提取两个坐标(比如说,从 300 个),然后你可以很容易地用 2D 散点图来可视化。网上有很多关于这些话题的很好的教程,就像这个。
结论
总而言之,嵌入:
- 将单词表示为语义上有意义的密集实值向量。
- 这克服了简单的一键矢量编码的许多问题。
- 最重要的是,嵌入提高了几乎所有 NLP 问题的泛化能力和性能,尤其是在你没有大量训练数据的情况下。
我希望你喜欢这篇“回归基础”的帖子,请在下面告诉我你的想法:)
—
Welocalize 是自然语言处理和翻译技术的行业领导者。要与我们团队中的某个人谈论你的 NLP 项目,请发电子邮件给 david.clark@welocalize.com 的戴夫。
你为什么使用交叉验证来评估你的模型?
原文:https://towardsdatascience.com/why-do-you-use-cross-validation-to-evaluate-your-models-c3923636436b?source=collection_archive---------28-----------------------
分类器性能评估简介
如果几周前你问我这个问题,我的回答会是“因为我读的每本机器学习书都告诉我这么做”。我决定寻找一个更好的答案,因为̶i̶̶h̶a̶t̶e̶̶t̶a̶k̶i̶n̶g̶̶o̶r̶d̶e̶r̶s̶我觉得有必要真正知道这个决定背后的推理是什么(我不是数据科学的独角兽,统计学不是我的强项)。
寻找关于这个问题的信息很难,因为我不知道去哪里找,但幸运的是,我找到了一本书来回答这个问题:评估学习算法。
Evaluating Learning Algorithms: A Classification Perspective. Cambridge University Press, 2011
这本书集中在分类算法和他们周围的评估方法。
[……]至关重要的是,研究人员拥有适当的工具来评估学习方法和理解潜在的问题。这本书检查了评估过程的各个方面,重点是分类算法。——书籍描述
在这篇文章中,我们将以这本书为指导,讨论机器学习中性能评估的一些主要观点。
我并不孤单:事实上的文化
第一个(令人欣慰的)发现是,我并不孤单:在大多数实际情况下,简单地使用重复交叉验证是机器学习社区中常见的事情。作者在第一章中谈到了对事实上的文化的评价:
尽管在有限的数据情况下,交叉验证确实似乎是重采样方法中的一个强有力的候选方法,但将其应用于大多数实际情况有点太过分了。在聚焦于评估策略(或者甚至是交叉验证等误差估计方法)之前,大多数实际数据情况都需要研究更广泛和更深入的问题。—n . Japkowicz 和 m . Shah,2011 年
也许简单地使用交叉验证对于 Kaggle 竞争来说就足够了。但是在现实生活中,我们需要考虑评估的完整背景,这涉及许多标准,例如数据的类别分布和性能指标的选择。事实是评估模型是困难的,不幸的是“没有一个由评估方法组合而成的单一评估策略可以适用于所有场景。
当我们谈论评估机器学习模型时,我们在谈论什么?
要回答这个问题,我们需要后退一步,谈谈机器学习本身。如果我们有一个分类任务,我们训练一个机器学习模型来预测看不见的数据实例,我们就在利用一个概括归纳论证:
概括(更准确地说,归纳概括)从关于样本的前提出发,得出关于总体的结论。— 维基百科
所以我们取一个数据集,并基于它进行归纳。这个数据集就是训练集。评估背后主要有两个概念: 经验风险 和 泛化误差 。
经验风险
给定我们想要预测的标签 y ,风险 是 y 的真实标签和分类器分配的标签之间的不一致程度。损失函数是“当向量 x 的标签 y 不同于分类器分配的标签时损失的定量测量”。为了估计这一点,我们需要事先知道标签,因此 经验风险是分类器相对于训练数据的风险”。
泛化误差
另一方面, 一般化误差 测量风险对于未知数据(这是我们的最终目标)的偏差。用于训练分类器的数据会对泛化误差产生影响:
[……]应当理解,训练分类器的数据虽然代表真实分布,但可能不会引导算法以最小的可能风险学习分类器f′。—n . Japkowicz 和 m . Shah,2011 年
泛化误差 的来源可以用两件事来解释:没有足够的训练数据对完整的底层分布做出推断或者训练数据中有噪声。
模型的目标是最小化 经验风险 和 泛化误差 。换句话说,我们希望“在训练样本中最小化错误分类的概率,同时保证良好的泛化能力”。这里我们有偏差-方差权衡,因为优化一个误差测量通常意味着折衷另一个。
更糟糕的是,测量学习算法的偏差和方差分解行为是困难的。作者指出了两个主要的局限性:
- **缺乏实际数据生成分布的知识和
- **数据有限。
为了知道模型是否能够很好地推广,我们需要事先知道数据分布,如果我们知道,我们就不需要首先训练分类器。
因此,在缺乏数据分布知识的情况下,实际上不可能知道偏差和方差的真实值。因此,我们需要通过使用一些可以从现有数据中获得的经验估计来近似这些值,而不是让它们明确地依赖于真实的基础数据分布。—n . Japkowicz 和 m . Shah,2011 年
为了处理有限的数据可用性,数据重采样技术可以帮助我们:
在模型选择和评估学习算法对测试数据的性能时,有限的数据可用性起着非常重要的作用。然而,这个问题在某种程度上可以通过使用所谓的数据重采样技术来改善。—n . Japkowicz 和 m . Shah,2011 年
因此,当我们评估一个模型时,我们需要检查它是否“过拟合”或“欠拟合”一个训练集,并评估这如何影响泛化误差。但是我们如何做到这一点呢?首先,我们决定一个性能指标(本书有两章专门介绍这一点),然后我们找到一个测试模型的好方法,以获得尽可能无偏的估计。
误差估计
好的,但是如何选择评估模型的方法呢?这要看你有多少数据:****
理想情况下,我们可以访问整个群体,并在其上测试我们的分类器。即使无法获得全部人口,如果可以从该人口中获得大量有代表性的数据,误差估计将会非常简单。这将包括对他们接受训练的数据进行算法测试。—n . Japkowicz 和 m . Shah,2011 年
在现实生活中,我们有两个主要选择:
- 维持 方法:在大量看不见的数据点上测试算法
- 重采样 方法:使用和重用可用数据,以获得足够大数量的样本
作者在第五章中讨论了这些方法,并给出了误差估计方法的本体。
Evaluating Learning Algorithms: A Classification Perspective. Cambridge University Press, 2011
正如你所看到的,有很多的误差估计方法。我们不会在这里讨论它们,但是我想你已经明白了:交叉验证并不是所有事情的答案。
最后,在选择了适当的误差估计方法之后,下一步是评估模型之间的差异是否具有统计学意义或者仅仅是巧合(这本书也有一章专门讨论这一点)。
最后
机器学习中的性能评估很难。我们需要决定度量标准、误差估计方法、评估学习算法的最佳数据集等等。了解评估过程很重要,因为有了这些知识,我们可以做出明智的决策* 关于要采用的策略(而不是总是使用交叉验证)。***
这就是这本书的目标。这是一个伟大的阅读,现在我更有信心决定评估模型的策略。你可以点击查看这本书的更多细节。
感谢阅读!
为什么做好科学很难,如何做得更好
原文:https://towardsdatascience.com/why-doing-good-science-is-hard-and-how-to-do-it-better-61f977730891?source=collection_archive---------23-----------------------
Photo by Steve Johnson on Unsplash
[## 想在数据科学方面变得更好吗?
当我在我发布独家帖子的媒体和个人网站上发布新内容时,请单击此处获得通知。](https://bobbywlindsey.ck.page/5dca5d4310)
做好科学很难,很多实验都失败了。虽然科学方法有助于减少不确定性并带来发现,但它的道路充满了坑坑洼洼。在本帖中,您将了解常见的 p 值曲解、p 黑客以及执行多重假设检验的问题。当然,不仅提出了问题,还提出了潜在的解决方案。在这篇文章结束时,你应该对假设检验的一些陷阱,如何避免它们,以及为什么做好科学如此困难有一个很好的理解。
p 值曲解
有许多方法可以曲解 p 值。根据定义,假设零假设为真,p 值是获得至少与实际观察到的一样极端的检验统计的概率。
什么是 p 值而不是:
- 衡量效果的大小或证据的强度
- 干预有效的机会
- 零假设为真或为假的陈述
- 另一种假设为真或为假的陈述
如果你想衡量证据的强度或效果的大小,那么你需要计算效果的大小。这可以通过皮尔逊 r 相关、标准均值差或其他方法来实现。建议在您的研究中报告效应大小,因为 p 值将告诉您实验结果与随机预期不同的可能性,而不是实验治疗的相对大小或实验效应的大小。
p 值也不能告诉你干预有效的几率,但是计算精度可以,而且基础利率会影响这个计算。如果干预的基本比率很低,即使假设检验显示出具有统计显著性的结果,这也为许多假阳性的机会打开了大门。例如,如果干预有效的机会是 65%,那么仍然只有 65%的机会干预实际上是有效的,而留下 35%的错误发现率。忽视基本利率的影响被称为基本利率谬误,这种情况比你想象的更常见。
最后,p 值也不能告诉你一个假设是真还是假。统计学是一个推理框架,没有办法确切知道某个假设是否正确。记住, 科学上没有所谓的证明 。
黑客问题
作为一名科学家,在建立假设检验时,你的一个自由度是决定在你检验的数据中包含哪些变量。在一定程度上,您的假设将影响您可能在数据中包含哪些变量,在用这些变量测试假设后,您可能会得到大于 5%的 p 值。
此时,您可能会尝试在数据中使用不同的变量并重新测试。但是如果你尝试了足够多的变量组合,并测试了每种情况,你很可能会得到 5%或更低的 p 值,正如这个应用程序在这篇 538 博客文章中展示的那样。它被称为 p-hacking ,它可以让你在竞争性替代假设下实现 5%或更低的 p 值。
这至少有几个问题:
- 由于你可以在竞争的替代假设下获得统计上显著的 p 值,作为你选择包括在测试中的数据的结果,p-hacking 不能帮助你更接近你正在研究的事物的真相。更糟糕的是,如果这样的结果被公布,并且这项研究变成了传统智慧,那么将很难被移除。
- 随着假设检验次数的增加,假阳性率(即错误地称无效发现为显著)也会增加。
- 你可能会成为确认偏差的受害者,忽略其他假设测试的结果,只考虑与你的信念一致的测试结果。
- 由于许多期刊要求出版的 p 值为 5%或更低,这就促使你用 p-hack 的方式达到这个 5%的阈值,这不仅造成了伦理上的困境,也降低了研究的质量。
应对 P-Hacking
为了帮助减少 p-hacking,您应该公开研究期间探索的假设数量、所有数据收集决策、所有进行的统计分析和所有计算的 p 值。如果您进行了多重假设检验,但没有强有力的依据预期结果具有统计学意义,正如在基因组学中可能发生的情况,在基因组学中可以测量和检验数百万个遗传标记的基因型,您应该验证是否存在某种控制家族错误率或错误发现率的方法(如下一节所述)。否则,这项研究可能没有意义。
报告假设检验的功效也是一个好主意。也就是说,报告 1 —当假设为假时,不拒绝零假设的概率。请记住,功效会受到样本大小、显著性水平、数据集中的可变性以及真实参数是否远离零假设假设的参数的影响。简而言之,样本量越大,功效越大。显著性水平越高,权力越大。数据集中的可变性越低,功效就越大。并且真实参数离零假设假设的参数越远,功效越大。
用 Bonferroni 修正检验多重假设
由于假阳性的概率随着假设检验次数的增加而增加,因此有必要尝试并控制这种情况。因此,您可能希望控制所有假设测试中出现一个或多个假阳性的概率。这有时被称为家庭错误率。
对此进行控制的一种方法是将显著性水平设置为 α/n ,其中 n 是假设检验的次数。这种校正被称为 Bonferroni 校正,确保整个系列的错误率小于或等于 α 。
然而,这种修正可能过于严格,尤其是当你在进行许多假设检验的时候。原因是因为你在控制家庭的错误率,你也可能会错过一些存在于更高显著性水平的真正的积极因素。显然,在提高假设检验的能力(即,当替代假设为真时,提高拒绝零假设的概率)和控制假阳性之间,需要找到一个平衡点。
用 Benjamini-Hochberg 程序检验多个假设
您可以尝试控制错误发现率,而不是尝试控制家族错误率,错误发现率是所有被识别为具有统计显著性结果但实际上没有统计显著性结果的假设检验的比例。换句话说,误发现率等于 FP/(FP + TP) 。
控制误发现率应该有助于您识别尽可能多的具有统计显著性结果的假设检验,但仍要尽量保持相对较低的误报比例。像控制假阳性率的 α 一样,我们同样使用另一个显著性水平 β ,它控制假发现率。
你可以用来控制错误发现率的程序叫做本杰明-霍克伯格程序。你首先选择一个 β ,其显著性水平为误发现率。然后计算执行的所有零假设检验的 p 值,并从最低到最高排序,其中 i 是列表中 p 值的索引。现在找到最大 p 值的索引 k ,使其小于或等于 i/mβ* ,其中 m 是执行的零假设检验的次数。所有 p 值指数为 i ≤ k 的零假设检验都被 Benjamini-Hochberg 程序视为具有统计显著性。
结论
正如你所看到的,做好科学不仅仅是进行零假设检验,并在你得到小于或等于 5%的 p 值时发表你的发现。有多种方法可以曲解 p 值,调整数据以获得您确信的假设的正确 p 值,以及使用不同的数据样本进行足够多的测试,直到获得所需的 p 值。
但是现在你已经意识到了这些坑洼,并且掌握了一些避免它们的方法,我希望它能帮助你提高研究的质量,让你更接近真相。
如果你喜欢我在这里写的东西,一定要看看我的 个人博客 ,那里有我在媒体上看不到的文章。
参考
- 避免 p 值坑洞的 5 个小技巧
- 权力的定义
- 美国统计协会关于 p 值的声明
- 对错误发现率和 p 值错误解释的调查
- 误报率对误发现率
- 控制错误发现率:一种实用且强大的多重测试方法
- 重要性测试中的权力介绍—可汗学院
- 敏感性和特异性——维基百科
- p 值和基础利率谬误——统计有误
- 如何从已发表的研究中计算效应大小:一种简化的方法
- 多重比较问题—维基百科
原载于 2019 年 2 月 25 日bobbywlindsey.com。
为什么我们明明应该信任机器,却不信任它?
原文:https://towardsdatascience.com/why-dont-we-trust-machines-when-we-obviously-should-dede847dde73?source=collection_archive---------21-----------------------
为什么人类必须留在自动化循环中?我们如何才能创造一个更好的人机关系的未来?
人类不可思议。无限不可预测。这就是它们危险的原因。—丹尼尔·H·威尔逊
在之前的中,我谈到了人工智能如何改变人机关系。我贴了以下问题:
无人驾驶汽车应该由谁来做决定?人类应该总是能够否决机器人的决定吗?如果你只有一瞬间的反应时间怎么办?而如果你的亲人在车上,答案会改变吗?
这个场景呢?如果你明天要上法庭,你会选择缺乏同理心的算法还是倾向于偏见和错误的人类法官来决定你的判决?
即使知道人类法官可能会犯更多的错误,罪犯仍然更喜欢人类而不是算法。决策心理学教授曼德普·达米(Mandeep Dhami)说,“他们想要那种人情味。”。
看来我们并不信任机器。还有其他例子:虽然研究表明自动驾驶汽车更安全,但近一半的美国人不喜欢使用自动驾驶汽车。
我们正在积极寻找解决人工智能透明度和公平性问题的方法。但我们似乎不太关心这样一个事实,即人类大脑也像一个我们知之甚少的黑匣子一样运作。为什么会这样呢?
为什么我们明明应该信任机器,却不信任它们?
沃顿商学院教授 Kartik Hosanagar 认为,好于平均水平的效果是原因之一。换句话说,我们知道自动驾驶汽车总体上比人类司机更安全,但我们认为我们比其他人更好。
在一项研究中,参与者被要求在自己、他人和算法的预测中做出选择,研究人员发现,人类确实信任算法——尤其是信任其他人。我们似乎也比算法更能容忍自己的错误。当风险很高时,我们不太可能让机器替我们做决定。
机器确实会犯错。他们可能永远不会完美无缺。无论自动驾驶车辆行驶了多少英里,总会有边缘情况。但是我们在这里问了正确的问题吗?
为什么我们必须在人类和机器之间做出选择?机器会犯错,我们也一样。为什么我们不能共同努力,让集体决策更准确,更少偏差?我们能帮助发现算法中的弱点吗,反之亦然?人类和机器的混合团队能否产生更多样化的解决方案,让世界变得更美好?
更好的机器教学:以人为中心的人工智能
就像以用户为中心的设计可以帮助增加产品的可用性一样,如果我们想确保 AI 让我们的生活变得更好,而不是更糟,我们就应该真正把人放在第一位!
将人们融入到开发 ML 产品的过程中。这种方法被称为“以人为中心的人工智能”。不要开发科学家能想到的最酷的技术,而是专注于人类的可用性,并确保有效和令人满意的人机交互。
一个经验法则是评估人工智能是否可以用来自动化无聊或危险的任务,或者增加人类喜欢做的任务。
麻省理工学院的研究科学家 Lex Fridman 建议将人类深度融入 ML 模型训练和现实世界的操作中。通过引入人类监督,我们可以更好地确保人工智能是安全、公平和可解释的。
加州大学伯克利分校的计算机科学教授斯图尔特·拉塞尔认为,我们应该“给机器赋予目的。”他没有假设机器对目标有完全的了解,而是提出假设“模型对目标有不完全的了解。”
这就引出了我的下一个观点:我们需要更好地定义机器的目标函数,更重要的是,我们的社会!
为机器和我们的社会提供更好的目标函数
ML 模型由回报函数(也称为目标函数或损失函数)指导。)目标函数定义问题。它们是决定 ML 模型预测是否正确的数学公式。
换句话说,他们定义了成功或失败的激励机制。我们希望使用目标函数来优化或加强我们系统的行为,例如最大化保留或最小化错误。
然而,定义目标函数并不是一项简单直接的任务。正如我在另一篇文章中提到的,模型准确性本身通常不是一个好的度量。我们将需要考虑精确度和召回权衡。此外,我们需要确保奖励功能为用户带来积极的体验,不仅仅是主要客户,而是我们所有的用户。
以拼车公司为例,虽然乘客满意度很重要,但司机留存对双方平台的增长也至关重要。定义一个为所有用户创造良好体验的奖励函数可能很有挑战性,尤其是当有利益冲突时,但这绝对是重要的。
[## 设计 ML 产品的用户体验
三个原则:期望、错误和信任!
towardsdatascience.com](/designing-the-user-experience-of-ml-products-8aef5afb510b)
奖励功能可能会给其他人带来意想不到的后果。我们如何考虑 ML 模型的潜在负面影响并设法减轻它?随着时间的推移,我们如何可能预见和跟踪我们的奖励函数的影响?
一个更基本的问题是:我们如何确保公司在设计他们的 ML 产品时,总是将他们的用户、利益相关者和整个社会的利益考虑在内?在当前资本市场的奖励功能下,公司会被激励去设计正确的 ML 系统吗?
如果留住用户可以增加公司的利润,他们会在乎用户花太多时间在线的负面影响吗?随着更多任务实现自动化,他们会分配足够的资源来帮助员工过渡到下一个角色吗?如果公司的唯一目标是最大化他们的股东价值,他们还会试图减轻他们的 ML 模式对员工和社会的任何潜在负面影响吗?
摘要
输给深蓝并没有让加里·卡斯帕罗夫绝望。相反,他开始接受“半人马象棋”的想法通过人机合作,下棋的水平比以前更高了。
伯克利教授肯·戈德堡也用顶级围棋选手与 Deepmind 的 Alphago 程序比赛的例子来倡导机器人与人类的联盟。
我们不应该将人机关系视为零和游戏,而是应该转变思维模式,思考如何与机器合作,一起把蛋糕做大!这是一个很好的机会,让我们深入思考我们擅长什么,我们真正想做什么,我们如何更好地利用机器!
如果你想看更多这样的文章,请点击这里!
[## 不是你想的那样:人机关系的未来
机器人会继续为我们工作吗?还是反过来?未来会是什么样子?更重要的是,什么…
towardsdatascience.com](/not-what-you-think-the-future-of-human-machine-relationship-b890d7f2072b) [## 它在这里!人工智能机器人将如何革新制造业
虽然制造业一直被认为是自动化程度最高的行业,但全自动化…
towardsdatascience.com](/its-here-how-ai-robot-will-revolutionize-manufacturing-44ce784438d4) [## 如何管理机器学习产品—第 1 部分
为什么管理机器学习产品这么难?为什么你应该关心?
towardsdatascience.com](/how-to-manage-machine-learning-products-part-1-386e7011258a)
Bastiane Huang 是 OSARO 的产品经理,OSARO 是一家总部位于旧金山的初创公司,致力于开发软件定义的机器人技术。她曾在亚马逊的 Alexa 小组和哈佛商业评论以及该大学的未来工作倡议中工作。 她写的是关于 ML、机器人和产品管理的文章。跟随她来到这里T5。
为什么在建立回归模型时要排除高度相关的特征??
原文:https://towardsdatascience.com/why-exclude-highly-correlated-features-when-building-regression-model-34d77a90ea8e?source=collection_archive---------4-----------------------
如果您已经处理数据很长时间了,那么您一定知道一般的做法是在运行线性回归时排除高度相关的特征。本文的目的是解释为什么我们在构建简单的线性回归模型时需要避免高度相关的特性。在继续这篇文章之前,我强烈推荐你参考我关于回归的文章。
什么是相关性?
相关性仅仅意味着两个或更多事物之间的相互关系。考虑数据集中的数据点(xᵢ,yᵢ),i = 1,2,…n。相关性的目的是观察大值“x”是否与大值“y”配对,小值“x”是否与小值“y”配对。如果没有,检查小值“x”是否与大值“y”成对出现,反之亦然。
在统计学中,上述现象是用一个叫做相关系数的拟合函数来衡量的。衡量相关性的公式是
Correlation coefficient formula
x̄和̄y 分别代表 x 和 y。当相关系数为< 0, we say that x and y are negatively correlated. If it is > 0 时,两者正相关。相关系数在-1 和 1 之间变化。
需要注意的最重要的一点是,相关性只度量两个变量之间的关联,而不度量因果关系。即,“y”的大值不是由“x”的大值引起的,反之亦然,而是恰好这样的数据对只存在于数据集中。
为什么排除高度相关的特征?
如果您还记得我上一篇关于回归的文章,回归就是从训练数据中学习权重向量,并使用它来进行预测。获得权重向量的公式为
我们有一个回归的概率观点,假设因变量“y”正态分布,方差为σ。在这种假设下,从数学上可以看出,上述权重向量 Wₗₛ的方差为
Variance of Wₗₛ
为了使模型足够稳定,上述方差应该很低。如果权重的方差很高,则意味着模型对数据非常敏感。如果方差很大,则权重与训练数据相差很大。这意味着模型可能无法很好地处理测试数据。所以,自然的问题是,
wₗₛ的方差什么时候会大?
现在你应该猜到了,当我们有高度相关的特征时,Wₗₛ的方差会很大。是的,猜对了!!但是让我们看看这在数学上是如何正确的。任何 n×d 矩阵都可以分解为
Singular Value Decomposition
上述分解称为“奇异值分解”。上式中的“S”矩阵是非负对角矩阵。利用这种分解,Wₗₛ的方差可以改写为
当数据集中的要素高度相关时,“S”矩阵中的值会很小。因此,“s”矩阵(上式中的 S^-2)的平方反比将很大,这使得 Wₗₛ的方差很大。
因此,如果两个要素高度相关,建议我们只在数据集中保留一个要素。我希望这篇文章是有帮助的。如果您有任何疑问,请在下面留下。
Python 在这里,为什么要害怕呢
原文:https://towardsdatascience.com/why-fear-when-python-is-here-cc78c06d47b7?source=collection_archive---------21-----------------------
最独特的 Python 项目理念
介绍
Python 是目前地球上最受欢迎的编程语言。不可否认的事实是,python 也是最流行的编程语言。我们在 GitHub 2019 年 10 月份的年度报告中看到了这一点。Python 终于超过了它的长期对手 Java,现在是 GitHub 上第二受欢迎的语言,仅次于领先的 JavaScript。这使得 Python 的受欢迎程度达到了一个全新的水平。
但是,等等,有没有想过 Python 如此受欢迎背后的原因?为什么 Python 获得了如此多的炒作?为什么 Python 是数据科学、机器学习和人工智能的语言选择?
还在疑惑?用一句话来概括它的所有原因,这几天它如此受欢迎是因为——
【Python 让你创造奇迹】
它提供的功能是无与伦比的。它让你做超出我们想象的事情,而且太容易了。是的,你没看错。Python 最大的优点是它的简单性。Python 以最小的努力提供了最大的收益。它是对程序员最友好的语言之一。
当事情变得紧张时,Python 让你抢尽风头
顶级 PYTHON 项目创意
图像字幕生成器
在 Instagram 和 Snapchat 的时代,一个标题可能比图片本身更重要。我们通常花更多的时间来选择一个合适的标题,而不是选择要发布的图片。喜欢和评论的数量很大程度上取决于你上传的图片的标题。当然,标题让你看起来很酷。因为如果你不能用你的图片杀死他们,那就用你的标题杀死他们。
想象一下,如果你有一个助手为你决定上传到社交媒体上的每张图片写一些很酷的说明。听起来很酷,不是吗?
这就是这个 Python 项目的全部内容。你给它你的照片,作为回报,它会给你一些很酷的标题。这个项目是你杀死字幕游戏所需要的一切。你对完美字幕的所有担忧现在都将烟消云散。如果你想成为顶尖的社交媒体玩家,那么这个项目就是为你准备的。因为-
“图片吸引眼球,但标题能抓住人心。”
驾驶员睡意检测
全球死亡的主要原因之一是道路事故。我们太习惯了,以至于往往完全忽略了背后的原因。交通事故的主要原因之一是司机的困倦。长途旅行的人通常睡眠不足,通常情况下,不要把这个问题看得太重。
但是现在是认真对待这个问题的时候了。我们需要尽快处理这件事。
这个睡意检测项目也是为了同样的目的。在这个项目中,你将能够建立一个睡意检测系统。这个系统对于防止因司机在开车时睡着而导致的事故至关重要。当这个系统检测到司机的眼睛闭了几秒钟时,它会立即提醒司机。
Python 聊天机器人项目
近来,人工智能最吸引人的应用之一是虚拟助手的概念。从苹果的 Siri 到谷歌的 assistant,我们很快就会与几乎所有东西的虚拟助手绑定。聊天机器人是一个智能系统,它能够像人类一样交流和执行某些动作。
聊天机器人最常见的应用是在客户互动中。几乎每个大组织都有自己的聊天机器人来与客户交流。这些聊天机器人训练有素,几乎能够回答顾客的每一个问题。从而在很大程度上减少了人力。其他重要的应用包括社交媒体营销和即时消息服务。
你自己的聊天机器人项目,带源代码
这个项目是所有关于训练一个聊天机器人的数据集的基础上,它提供了一个随机响应列表的响应。
交通标志识别
人类历史上人工智能和物联网最迷人的应用之一是无人驾驶汽车的概念。一旦这些汽车上路,这个世界将会是一个不同的地方。
这个关于交通标志识别的项目是这个梦想概念的支柱。在这个项目中,您将训练一个系统来识别各种不同的交通标志,然后根据识别的标志自动做出决策。该系统对所有自动驾驶汽车和自动驾驶汽车至关重要,因为它根据识别的标志决定其下一步行动。
这可能是你接触过的最有趣的项目。
尾注
在旧技术逐渐过时,IT 行业裁员司空见惯的时代,Python 已经发展成为每个人的希望之光。请记住,Python 在最近获得了最高的声望,现在开始熟悉 Python 可能是你职业生涯中最明智的决定之一。
做到这一点的最好方法是参与一些有趣的实时项目。
最顶层的 Python 项目
因为现在做不真实的事情更容易了
为什么特性相关性很重要…很多!
原文:https://towardsdatascience.com/why-feature-correlation-matters-a-lot-847e8ba439c4?source=collection_archive---------0-----------------------
鹳会接生婴儿吗?尽管已经在相关性和因果性的上下文中从理论上证明了这一点,但本文探讨的是相关性以及它与因果性的区别。
Photo by israel palacio on Unsplash
机器学习模型的好坏取决于你拥有的数据。这就是为什么数据科学家可以花费数小时来预处理和清理数据。他们只选择对最终模型质量贡献最大的特征。这个过程叫做“特征选择”。特征选择是选择能使预测变量更准确的属性或消除那些不相关的、会降低模型精度和质量的属性的过程。
数据和特征相关性被认为是数据预处理的特征选择阶段中的一个重要步骤,尤其是如果特征的数据类型是连续的。那么什么是数据相关性?
数据关联:是理解数据集中多个变量和属性之间关系的一种方式。使用相关性,您可以获得一些见解,例如:
- 一个或多个属性依赖于另一个属性或另一个属性的原因。
- 一个或多个属性与其他属性相关联。
那么,相关性为什么有用呢?
- 相关性有助于从一个属性预测另一个属性(估算缺失值的好方法)。
- 相关性可以(有时)表明因果关系的存在。
- 相关性被用作许多建模技术的基本量
让我们仔细看看这意味着什么,以及相关性是如何有用的。有三种类型的相关性:
正相关:表示如果特征 A 增加,那么特征 B 也增加,或者如果特征 A 减少,那么特征 B 也减少。这两个特征一前一后地移动,并且它们具有线性关系。
Negative Correlation (Left) and Positive Correlation (Right)
负相关:表示如果特征 A 增加,那么特征 B 减少,反之亦然。
不相关:这两个属性之间没有关系。
这些相关类型中的每一种都可以存在于由从 0 到 1 的值表示的谱中,其中轻微或高度正相关特征可以是类似于 0.5 或 0.7 的值。如果存在强的和完美的正相关,那么结果由 0.9 或 1 的相关分值表示。
如果有很强的负相关性,则用值-1 表示。
如果数据集具有完全正或负的属性,那么模型的性能很有可能会受到一个称为“多重共线性”的问题的影响。多重共线性当多元回归模型中的一个预测变量可以通过其他预测变量以高精度进行线性预测时,就会发生多重共线性。这可能导致扭曲或误导的结果。幸运的是,决策树和提升树算法天生对多重共线性免疫。当他们决定分割时,树将只选择一个完全相关的特征。但是,其他算法(如逻辑回归或线性回归)也不能避免这个问题,您应该在定型模型之前解决这个问题。
我该如何处理这个问题?
处理这个问题有多种方法。最简单的方法是删除或消除一个完全相关的特征。另一种方法是使用降维算法,如主成分分析(PCA) 。
Spearman VS Pearson 相关矩阵:
Spearman 和 Pearson 是计算两个变量或属性之间相关性强度的两种统计方法。皮尔逊相关系数可用于具有线性关系的连续变量。这里有一个例子:
The output of the above code
要打印皮尔逊系数得分,我只需运行pearsonr(X,Y)
,结果是:(0.88763627518577326, 5.1347242986713319e-05)
,其中第一个值是皮尔逊相关系数,第二个值是 P 值。0.8 意味着变量高度正相关。
如果变量有非线性关系,你可以用斯皮尔曼相关系数来衡量相关性。它也可以和有序分类变量一起使用。可以通过跑步得到斯皮尔曼系数分数:scipy.stats.spearmanr(X,Y)
现在,这可能听起来很复杂,尤其是对于高维数据集。在这种情况下,更好的方法是用一个矩阵来可视化这种相关性。这里是你如何使用熊猫来做到这一点,我使用的是来自 Kaggle 的 Porto Seguro 的安全驾驶员预测数据集:
从上面的矩阵中可以看出,ps_reg_03 和 ps_reg_02 变量之间以及 ps_car_12 和 ps_car_13 之间有很高的相关性。
还有另一种流行的方法,称为肯德尔的τ系数,它也是基于可变等级,但与斯皮尔曼的系数不同,它没有考虑等级之间的差异。因为本文的重点是 Pearson 和 Spearman 相关性,所以 Kendall 方法超出了本文的范围。
误解(鹳会接生婴儿吗?):
相关性经常被解释为因果关系,这是一个很大的误解。变量之间的相关性并不表示因果关系。任何高度相关的变量都应该仔细检查和考虑。这里有一篇(幽默)德国论文用相关性证明了婴儿是由鹳传播的理论。这项研究表明,城市周围鹳鸟数量的增加与城市医院外分娩数量的增加之间存在显著的相关性
Source: http://web.stanford.edu/class/hrp259/2007/regression/storke.pdf
左边的图表显示了鹳数量的增加(粗黑线)和住院分娩数量的减少。另一方面,右边的图表显示,一些院外分娩(白色正方形标记)遵循鹳数量增加的模式。尽管这项研究并不意味着从科学上证明(幼鹳理论),但它表明,通过高度的相关性,一种关系可能看起来是因果关系。这可能是由于一些未观察到的变量。例如,人口增长可能是另一个原因变量。
总之:相关性在许多应用中非常有用,尤其是在进行回归分析时。但是,不应该把它和因果关系混在一起,以任何方式曲解。您还应该始终检查数据集中不同变量之间的相关性,并收集一些见解作为探索和分析的一部分。
你最喜欢的业务指标不能告诉你关于你的客户的什么
原文:https://towardsdatascience.com/why-focusing-on-data-points-can-hurt-your-business-and-what-you-should-do-instead-1583d008b7b9?source=collection_archive---------17-----------------------
您是否仅使用“平均值”或“比率”等指标来制定数据驱动的业务决策?如果是这样,你可能是在做错误的商业分析。
我将使用两个数据分析案例向您展示为什么只关注这些指标可能是危险的,以及您应该做些什么。
案例 1:平均值不能代表你的客户
为什么?
在分析产品和业务绩效时,我们经常使用平均值,但是单独使用平均值会产生盲点。因为由于市场的不同细分或纯粹的随机性,总会有变化,而平均值并不会告诉你故事的变化。
示例:我们的客户平均购买多少产品?
一家公司试图了解客户购买的平均商品数量。对于纽约和洛杉矶,他们发现每位顾客平均购买的商品是一样的(45 件)。
现在,根据下面的情节,我们应该对纽约和洛杉矶的客户应用相同的营销策略吗?
没有。
在洛杉矶(绿线),85%的顾客购买了 40-50 件商品,这意味着平均数量(45)可以代表大多数顾客的行为。你可能只需要一个大的运动来瞄准大多数人。
然而,在纽约,平均值只能代表 50%的顾客行为。大多数顾客,比如说 85%,介于购买 10 件商品和 80 件商品之间,我们可以从橙色“哑铃”形线所示的大量数据中观察到这一点。
这意味着,纽约的顾客比洛杉矶的顾客有更多的变化,当顾客的行为更加多样化时,你可能需要针对纽约的多种营销策略。
我们做什么呢
通过计算方差找出平均值附近的范围。
通常,数据科学家会报告一个置信区间(CI)来估计平均值所在的概率。(此链接可以帮助您构建置信区间,您可以在 Excel 中创建它)
报告的一个例子是:纽约每个顾客购买的物品的平均值是 45,85%的置信区间是 10 到 80。
案例二。比率度量可能非常敏感和不可靠
为什么?
比率指标由至少两个指标组成;例如,点击率是点击数除以浏览量。随着每个指标的变化,比率指标的变化更加复杂,它不遵循任何常见的分布。
例子
我们先看下表。你在测量点击率,从这个表中,看起来点击率从一月到二月有所增加。听起来不错吧?
嗯,实际上点击量和浏览量都下降了,只是因为浏览量下降更多。所以这个涨幅很可能不是你想要的。
现在,让我们再看 4 个场景,看看当我们控制一个变量并改变另一个变量时,点击率是如何变化的。在每种情况下,我们能以相同的确定性信任该比率吗?
左表显示,如果分母(视图)稳定,比率度量随着分子(点击)的移动而成比例移动,数据的不确定性很容易估计,不确定性的尺度变化不大。
在右表中,当分母(视图)足够大时,如前几行所示,比率(CTR)非常稳定,只有 1–2%的不确定性。然而,如果你看下面的行,当分母很小时,该比率对变化非常敏感并且不稳定!在这种情况下,更好的方法是监控浏览量和点击量,并在决策时考虑各种情况。
我们做什么呢
- 为 分母 设置最小可接受值的阈值。因为当分母很小时,比率可以有很大的方差,所以我们只信任分母足够大时的比率。如果你不得不在分母很小的时候使用比率指标来做决定,确保你报告了一个包含波动的范围。
- 监控我们用于比率计算的实际值(分子、分母)。通过模拟分子和分母的不同情景,理解比率的范围。
您的业务分析战略要点:
数据分析不仅仅是计算,也是对不确定性的测量
虽然平均值或某些比率指标等汇总统计数据有助于我们' 缩小 '并看到数据和我们业务的全貌,但我们还需要' 放大 '数据的范围和形状,以确保我们理解与指标相关的不确定性。
- 一个数据点是不够的!在其周围创建范围,并使用方差来估计数据的不确定性或不同分段。
- 如果你的指标是比率,比如点击率,分析不同的场景,看看当分母和分子改变时,指标是如何变化的。如果您的分母很小,请小心,这意味着该比率对数据的变化更敏感,可能不可靠!
- 将它可视化,以确保我们不会遗漏数据中的任何模式或异常值。
想为你的创业公司获得更多关于数据分析的免费教程吗?点击下面的链接或图片获取我的时事通讯!
No spam, I’ll be mindful of your time and attention
为什么要找一个数据主管?
原文:https://towardsdatascience.com/why-get-a-data-executive-85099530e2d6?source=collection_archive---------32-----------------------
本文是一个保持、保留和释放数据团队价值的案例。企业需要数据科学家提供有价值的见解,但却达不到预期的结果。借助数字领导者的帮助,调整您的战略、人员和业务,创造可衡量、可操作的结果。
问题:专攻次要的事情
我在福布斯上找到一篇文章,解释了下面的一个数据科学职位描述:
职责:
将业务需求转化为机器学习产品。
为我们的核心业务设计和构建机器学习软件产品。
与业务负责人沟通战略和基本原理,定义并执行项目计划
领导 ML 自动化的所有方面,包括模型训练和开发、特征选择和模型调整。
开发生产 ML 和数据管道。开发生产代码并交付给生产环境1。
对于数据科学领域的人来说,他们知道这是一个非常尖锐的问题。以下是工作经验或职位的翻译,按其各自的顺序排列:
已转换的职责(平均。工资摘自 PayScale.com):
- 业务分析师(68,000 美元/年)
- 解决方案架构师(117,000 美元/年)
- 项目经理(87,000 美元/年)
- 数据科学家(9.5 万美元/年)
- 数据工程师(92,000 美元/年)
当然,如果能以五分之一的价格雇佣一个至少能扮演五种商业角色的人,那就太好了。从商业或金融的角度来看,这是一项伟大的投资。问题是,许多第一次涉足数据科学的企业往往抱有很高的期望。巨大的期望没有错,但大多数数据科学家在没有适当支持的情况下进入角色,以提供有利可图的见解。
证据:没有一致的愿景
根据我在咨询许多公司时的个人经验,IT 部门的任何人都可以证明,大多数公司都有脏数据(非结构化、缺少值、某些领域中的错误数据等。).这是一个普遍的大问题。它如此普遍,以至于有了一个名字——GIGO(垃圾进,垃圾出)。对于数据科学家来说,从数据中创建预测是一项非常具有挑战性的任务。大多数模型需要在各种条件下有足够的样本,以便捕捉潜在趋势,做出准确而有见地的预测。事实上,这些数据问题正在影响数据团队的结果,正如在大多数失败的预测中看到的2:
你知道有一个问题,当你雇佣某人做 X,他们给你 y,在这种情况下,做预测,但相反只告诉你正在发生什么。那么,到底是怎么回事呢?作为一名来自 Oracle states 的数据科学贡献者,公司抱有错误的期望:
“做数据科学和管理数据科学不是一回事3。”
基本上,数据科学家需要支持团队来确保高质量的数据流入他们的模型,以创造有价值的业务洞察力。然而,高层领导未能利用他们的数据科学家取得成功[4]。问题在于缺少一个领导席位。为了让数据产生推动收益的收入,需要有一个数据主管。
解决方案:数据领先
数据执行官、首席数据官(CDO)或首席信息官(CIO)需要被安排在企业中,以便执行以数据为动力的业务战略。我知道有些人会说首席数据官更适合这个职位,但首席信息官也不错。首席信息官也可以执行这项任务,因为众所周知,首席信息官向企业领导人提供数据驱动的见解。为什么不把提高数据质量的需求加入到列表中呢?毕竟,数据质量会反馈到相同的报告中,但是我离题了。数据领导者的主要原因是业务成果[5]:
如上所述,与行业竞争对手相比,数据主管可以释放公司内数据资源和团队的价值,使盈利能力提高 26%,收入提高 9%。
数据主管的行动步骤
从一个数据领导者那里,你可以期待至少三件主要的事情发生在你的业务中:数据愿景、组织对数据的认同和数据治理[5]。有了这三项改进,数据科学团队将能够按预期运行,做出有价值的预测。
用数据创造愿景
用数据增强的愿景解释了为什么进行数据转换以及最终结果是什么。例如,出租车的商业模式是收费用车运送乘客。同一个出租车视觉的数据增强视觉现在被称为优步。一家利用移动应用技术收费用汽车运送人员的企业。data executive 使企业能够利用直到最近才出现的数据驱动的应用程序和模型。
重整公司
以我的经验来看,组织变革从来都不容易,但那些进展较好的组织拥有公开透明的领导。同样从精益项目管理来看,倾听员工和他们的瓶颈是可能的改进,也是运营改进的来源。数据主管将成为数字化转型的焦点,并使公司的各个部门能够凝聚成一个数据驱动的愿景。
形成数据治理
正如许多类型的管理者所知道的那样,人们被给予了前进的命令,但有时会偏离正途。这就是数据治理的用武之地。在数据主管的领导下,数据治理引导所有数据来支持业务,并帮助确保高数据质量。通常情况下,首席数据官会领导治理委员会和联络人。
结论
如前所述,58%的数据科学家甚至不使用他们的模型【2】进行预测。假设这些都是优秀的数据科学家,有一个潜在的问题——没有数据领导。数据主管需要为数据团队提供支持和愿景,以增加业务价值。这需要整个组织从企业收集的数据中释放价值,并需要一个合适的数据领导者将这些见解转化为利润。有了数据执行官,企业可以有一个适当的数据驱动愿景,将公司凝聚到数据愿景,并建立数据治理,以实现+9%的收入增长和+26%的盈利能力【5】。
免责声明:本文陈述的所有内容均为我个人观点,不代表任何雇主。
1 N. Talagala,《雇佣数据科学家:好的、坏的和丑陋的》(2019),https://www . Forbes . com/sites/cognitive world/2019/04/30/Hiring-A-Data-Scientist-The-Good-The-Bad-And-The-Ugly/# 6 e 36d 20 b 49 c 0
2 N. Gift,为什么到 2029 年将没有数据科学职位头衔(2019 年),https://www . Forbes . com/sites/Forbes tech Council/2019/02/04/Why-they-Will-they-Be-No-Data-Science-Job-Titles-By-2029/# 1856 b 62 d3a 8 f
3 E. Chenard,为什么数据科学领域的领导者要退出?(2018),https://www . data science . com/blog/why-data-science-leaders-fail
[4] T .莱德曼,你在让你的数据科学家们失败吗?(2018),https://HBR . org/2018/01/are-you-setting-your-data-scientists-up-to-fail
[5] Capegemini,领导者转型,甲骨文全球大会 2014。
为什么 Git 和 Git-LFS 不足以解决机器学习再现性危机
原文:https://towardsdatascience.com/why-git-and-git-lfs-is-not-enough-to-solve-the-machine-learning-reproducibility-crisis-f733b49e96e8?source=collection_archive---------2-----------------------
一些人声称,由于软件工具不足以确保可重复的过程,机器学习领域正处于危机之中。这场危机是关于复制机器学习模型等结果的困难。这场危机可以通过为机器学习从业者提供更好的软件工具来解决。
再现性问题如此重要,以至于年度 NeurIPS 会议计划将此作为 NeurIPS 2019 的主要讨论主题。“征文”公告有更多信息https://medium . com/@ NeurIPSConf/Call-for-Papers-689294418 f43
所谓的危机是因为很难复制同事或科学家同事的工作,威胁到他们在彼此工作的基础上发展、与客户分享或部署生产服务的能力。由于机器学习和其他形式的人工智能软件在学术和企业研究中被广泛使用,可复制性或再现性是一个关键问题。
我们可能认为这可以用典型的软件工程工具来解决,因为机器学习开发类似于常规的软件工程。在这两种情况下,我们生成某种编译的软件资产,在计算机硬件上执行,希望得到准确的结果。为什么我们不能利用软件工具的丰富传统和软件质量的最佳实践来为机器学习团队构建可重复的过程呢?
不幸的是,传统的软件工程工具并不能很好地满足机器学习研究人员的需求。
一个关键问题是训练数据。通常,这是大量的数据,如图像、视频或文本,这些数据被输入到机器学习工具中以训练 ML 模型。通常,训练数据不在任何种类的源代码控制机制下,仅仅是因为像 Git 这样的系统不能很好地处理大型数据文件,并且被设计来为文本文件生成增量的源代码控制管理系统不能很好地处理大型二进制文件的改变。任何有经验的软件工程师都会告诉你,一个没有源代码控制的团队将会处于一种难以管理的混乱状态。更改不会总是被记录下来,团队成员可能会忘记做了什么。
最终,这意味着根据训练数据训练的模型无法复制,因为训练数据集将以未知的方式发生变化。如果没有软件系统来记住任何一天数据集的状态,那么有什么机制来记住什么时候发生了什么呢?
Git-LFS 是你的解决方案,对吗?
第一个反应可能是简单地使用 Git-LFS (Git 大文件存储),因为顾名思义,它在 Git 的基础上处理大文件。其卖点是 Git-LFS " 在 Git 内部用文本指针替换大文件,如音频样本、视频、数据集和图形,同时将文件内容存储在远程服务器上,如 GitHub.com 或 GitHub Enterprise。人们可以想象一个忙碌的机器学习团队说“听起来很棒,让我们去做吧”。它可以处理数千兆字节的文件,加快从远程存储库签出的速度,并使用同样舒适的工作流程。那确实符合很多条件,不是吗?
没那么快,难道你的经理没有指示你在全力以赴之前要仔细评估吗?另一个要记住的人生教训是,过马路前要朝两边看。
您的评估应该出现的第一件事是 Git-LFS 需要一个 LFS 服务器,而这个服务器并不是每个 Git 托管服务都提供的。三巨头(Github、Gitlab 和 Atlassian)都支持 Git-LFS,但也许你身体里有一块 DIY 的骨头。与其使用第三方 Git 托管服务,您可能更喜欢托管自己的 Git 服务。例如,Gogs 是一个可以在自己的硬件上轻松运行的合格的 Git 服务,但是它没有对 Git-LFS 的内置支持。
根据你的数据需求,下一个可能是杀手锏: Git LFS 可以让你存储高达 2 GB 的文件。这是 Github 的限制,而不是 Git-LFS 的限制,然而所有的 Git-LFS 实现似乎都有各种各样的限制。Gitlab 和 Atlassian 都有自己的 Git-LFS 限制列表。考虑一下 Github 的 2GB 限制:Git-LFS 项目中的一个用例是存储视频文件,但是视频的大小远远超过 2GB 不是很常见吗?因此 Github 上的 GIt-LFS 可能不适合机器学习数据集。
不仅仅是 2GB 的文件大小限制,Github 对 Git-LFS 使用的免费层设置了如此严格的限制,以至于人们必须购买涵盖数据和带宽使用的数据计划。
与带宽相关的一个问题是,当使用托管的 Git-LFS 解决方案时,你的训练数据存储在远程服务器上,必须通过互联网下载。下载训练数据的时间是一个严重的用户体验问题。
另一个问题是将数据文件放在云存储系统(AWS,GCP 等)上的容易程度,这是运行基于云的人工智能软件时经常需要的。这是不支持的,因为来自三大 Git 服务的主要 Git-LFS 产品将你的 LFS 文件存储在他们的服务器上。有一个 DIY 的 Git-LFS 服务器可以在 https://github.com/meltingice/git-lfs-s3 的 AWS S3 上存储文件,但是设置一个定制的 Git-LFS 服务器当然需要额外的工作。另外,如果您需要文件位于 GCP 而不是 AWS 基础设施上,该怎么办呢?有没有 Git-LFS 服务器在你选择的云存储平台上存储数据?有没有利用简单 SSH 服务器的 Git-LFS 服务器?换句话说,GIt-LFS 限制了您对数据存储位置的选择。
使用 Git-LFS 是否解决了所谓的机器学习再现性危机?
有了 Git-LFS,你的团队可以更好地控制数据,因为它现在是受版本控制的。这意味着问题解决了吗?
之前我们说过“的关键问题是训练数据,但那是谎言。算是吧。是的,将数据置于版本控制之下是一个很大的改进。但是缺乏对数据文件的版本控制是全部问题吗?号码
是什么决定了训练一个模型或其他活动的结果?决定性因素包括以下内容,甚至更多:
- 训练数据-图像数据库或任何用于训练模型的数据源
- 用于训练模型的脚本
- 训练脚本使用的库
- 用于处理数据的脚本
- 用于处理数据的库或其他工具
- 操作系统和 CPU/GPU 硬件
- 生产系统代码
- 生产系统代码使用的库
显然,训练模型的结果取决于各种条件。因为有太多的变量,所以很难精确,但是普遍的问题是缺少现在所谓的配置管理。软件工程师已经认识到能够指定部署系统时使用的精确系统配置的重要性。
机器学习再现性的解决方案
人类是一个有创造力的群体,对于这场“危机”有许多可能的解决方案。
像 R Studio 或 Jupyter Notebook 这样的环境提供了一种交互式的 Markdown 文档,可以配置它来执行数据科学或机器学习工作流。这对于记录机器学习工作以及指定使用哪些脚本和库非常有用。但是这些系统没有提供管理数据集的解决方案。
同样,Makefiles 和类似的工作流脚本工具提供了重复执行一系列命令的方法。执行的命令是通过文件系统时间戳确定的。这些工具没有为数据管理提供解决方案。
在天平的另一端是像 Domino 数据实验室或 C3 物联网这样的公司,它们为数据科学和机器学习提供托管平台。两者都打包了一个基于大量数据科学工具的产品。在某些情况下,如 C3 物联网,用户使用专有语言编码,并将他们的数据存储在专有数据存储中。使用一站式购物服务可能很诱人,但它能提供所需的灵活性吗?
在本文的其余部分,我们将讨论 DVC。它旨在紧密匹配 Git 功能,利用我们大多数人对 Git 的熟悉程度,但其功能使其在机器学习环境中的工作流和数据管理方面都很好。
与 Git-LFS 或其他几个潜在的解决方案相比,DVC(https://dvc.org)承担并解决了更大一部分的机器学习可重复性问题。它通过管理代码(脚本和程序)以及大型数据文件来做到这一点,这是 DVC 和 Git 这样的源代码管理(SCM)系统的混合体。此外,DVC 还管理处理机器学习实验中使用的文件所需的工作流程。数据文件和要执行的命令在 DVC 文件中描述,我们将在下面的章节中了解这些文件。最后,使用 DVC 可以很容易地在许多存储系统上存储数据,从本地磁盘到 SSH 服务器,或者到云系统(S3、GCP 等)。DVC 管理的数据可以很容易地与使用该存储系统的其他人共享。
Image courtesy dvc.org
DVC 使用与 Git 相似的命令结构。正如我们在这里看到的,就像git push
和git pull
用于与合作者共享代码和配置一样,dvc push
和dvc pull
用于共享数据。所有这些都将在接下来的章节中详细介绍,或者如果你想直接了解 DVC,可以在 https://dvc.org/doc/tutorial看教程。
DVC 准确地记得哪些文件在什么时间点被使用过
DVC 的核心是一个数据存储(DVC 缓存),它为存储和版本控制大型文件而优化。团队选择哪些文件存储在 SCM 中(比如 Git ),哪些存储在 DVC 中。由 DVC 管理的文件是这样存储的,DVC 可以维护每个文件的多个版本,并使用文件系统链接来快速更改每个文件正在使用的版本。
从概念上讲,SCM(像 Git)和 DVC 都有保存每个文件多个版本的存储库。一个人可以签出“版本 N ”,相应的文件将出现在工作目录中,然后再签出“版本 N+1 ”,文件将会改变以匹配。
Image courtesy dvc.org
在 DVC 端,这在 DVC 缓存中处理。存储在缓存中的文件通过内容的校验和(MD5 哈希)进行索引。当由 DVC 管理的单个文件改变时,它们的校验和当然会改变,并且会创建相应的缓存条目。缓存保存每个文件的所有实例。
为了提高效率,DVC 使用多种链接方法(取决于文件系统支持)将文件插入工作区,而无需复制。这样,DVC 可以在需要时快速更新工作目录。
DVC 使用所谓的“DVC 文件”来描述数据文件和工作流程步骤。每个工作空间将有多个 DVC 文件,每个文件描述一个或多个带有相应校验和的数据文件,每个文件描述一个要在工作流中执行的命令。
cmd: python src/prepare.py data/data.xml
deps:
- md5: b4801c88a83f3bf5024c19a942993a48
path: src/prepare.py
- md5: a304afb96060aad90176268345e10355
path: data/data.xml
md5: c3a73109be6c186b9d72e714bcedaddb
outs:
- cache: true
md5: 6836f797f3924fb46fcfd6b9f6aa6416.dir
metric: false
path: data/prepared
wdir: .
这个示例 DVC 文件来自《DVC 入门》示例(【https://github.com/iterative/example-get-started】)并显示了工作流的初始步骤。我们将在下一节详细讨论工作流。现在,注意这个命令有两个依赖项,src/prepare.py
和data/data.xml
,以及一个名为data/prepared
的输出数据目录。所有内容都有一个 MD5 哈希,随着这些文件的更改,MD5 哈希也将更改,更改数据文件的新实例将存储在 DVC 缓存中。
DVC 文件被登记到 SCM 管理的(Git)存储库中。当提交到 SCM 库时,每个 DVC 文件都用每个文件的新校验和更新(如果合适的话)。因此,使用 DVC,人们可以准确地重新创建每个提交的数据集,团队可以准确地重新创建项目的每个开发步骤。
DVC 文件大致类似于 Git-LFS 中使用的“指针”文件。
DVC 团队建议每个实验使用不同的 SCM 标签或分支。因此,访问适合该实验的数据文件、代码和配置就像切换分支一样简单。SCM 将自动更新代码和配置文件,DVC 将自动更新数据文件。
这意味着不再需要绞尽脑汁去回忆哪些数据文件被用于什么实验。DVC 为你追踪这一切。
DVC 记得在什么时间点使用的命令的确切顺序
DVC 文件不仅记住在特定执行阶段使用的文件,而且记住在该阶段执行的命令。
再现机器学习结果不仅需要使用完全相同的数据文件,还需要相同的处理步骤和相同的代码/配置。考虑创建模型的一个典型步骤,即准备样本数据以便在后面的步骤中使用。您可能有一个 Python 脚本 prepare.py 来执行这种分割,并且您可能有一个名为data/data.xml
的 XML 文件中的输入数据。
$ dvc run -d data/data.xml -d code/prepare.py \
-o data/prepared \
python code/prepare.py
这就是我们如何使用 DVC 记录处理步骤。DVC 的“运行”命令根据命令行选项创建 DVC 文件。
-d
选项定义了依赖关系,在本例中,我们看到一个 XML 格式的输入文件和一个 Python 脚本。-o
选项记录输出文件,这里列出了一个输出数据目录。最后,执行的命令是一个 Python 脚本。因此,我们有输入数据、代码和配置,以及输出数据,所有这些都忠实地记录在生成的 DVC 文件中,该文件对应于上一节中显示的 DVC 文件。
如果prepare.py
从一个提交更改到下一个提交,SCM 将自动跟踪该更改。同样,对data.xml
的任何更改都会在 DVC 缓存中产生一个新实例,DVC 会自动跟踪这个新实例。如果结果数据目录发生变化,DVC 也会对其进行跟踪。
DVC 文件也可以简单地指一个文件,就像这样:
md5: 99775a801a1553aae41358eafc2759a9
outs:
- cache: true
md5: ce68b98d82545628782c66192c96f2d2
metric: false
path: data/Posts.xml.zip
persist: false
wdir: ..
这是由“dvc add *file*
”命令产生的,当你只有一个数据文件时使用,它不是另一个命令的结果。例如,在https://dvc.org/doc/tutorial/define-ml-pipeline中显示了这一点,这导致了紧接在前面的 DVC 文件:
$ wget -P data https://dvc.org/s3/so/100K/Posts.xml.zip
$ dvc add data/Posts.xml.zip
然后,文件Posts.xml.zip
是教程中显示的一系列步骤的数据源,这些步骤从这些数据中获取信息。
退后一步,认识到这些是一个更大的工作流程中的单个步骤,或者 DVC 所说的流水线。使用“dvc add
”和“dvc run
”可以将几个阶段串在一起,每个阶段都是使用“dvc run
”命令创建的,并且每个阶段都由一个 DVC 文件描述。完整的工作示例见https://github.com/iterative/example-get-started和https://dvc.org/doc/tutorial
这意味着每个工作目录将有几个 DVC 文件,每个文件对应于项目中使用的管道中的每个阶段。DVC 扫描 DVC 文件以建立再现流水线输出所需的命令的有向无环图(DAG)。每个阶段都像一个小型 Makefile,只有当依赖关系发生变化时,DVC 才会执行命令。它之所以不同,还因为 DVC 不像 Make 那样只考虑文件系统的时间戳,而是考虑文件内容是否已更改,这是由 DVC 文件中的校验和与文件的当前状态决定的。
最重要的是,这意味着不再需要绞尽脑汁去回忆每个实验使用的是哪个版本的脚本。DVC 为你追踪这一切。
Image courtesy dvc.org
DVC 使得团队成员之间共享数据和代码变得容易
一个机器学习研究人员可能正在与同事一起工作,需要共享数据、代码和配置。或者研究人员可能需要将数据部署到远程系统,例如在云计算系统(AWS、GCP 等)上运行软件,这通常意味着将数据上传到相应的云存储服务(S3、GCP 等)。
DVC 工作区的代码和配置存储在 SCM 中(像 Git 一样)。使用普通的 SCM 命令(如“git clone
”)可以很容易地与同事分享。但是如何与同事分享数据呢?
DVC 有远程存储的概念。DVC 工作区可以向远程存储推送数据,也可以从远程存储中提取数据。远程存储池可以存在于任何云存储平台(S3、GCP 等)以及 SSH 服务器上。
因此,为了与同事共享代码、配置和数据,您首先要定义一个远程存储池。SCM 跟踪保存远程存储定义的配置文件。接下来,您将配置管理库推送到一个共享服务器上,这个服务器带有 DVC 配置文件。当您的同事克隆存储库时,他们可以立即从远程缓存中提取数据。
这意味着你的同事不再需要绞尽脑汁想如何运行你的代码。他们可以轻松地复制用于产生结果的精确步骤和精确数据。
Image courtesy dvc.org
结论
可重复结果的关键是使用良好的实践,不仅保持数据的正确版本化,而且保持代码和配置文件的正确版本化,并自动化处理步骤。成功的项目有时需要与同事合作,这通过云存储系统变得更加容易。有些工作需要 AI 软件在云计算平台上运行,需要将数据文件存储在云存储平台上。
有了 DVC,机器学习研究团队可以确保他们的数据、配置和代码彼此同步。这是一个易于使用的系统,它可以有效地管理共享的数据仓库,以及存储配置和代码的 SCM 系统(如 Git)。
资源
早在 2014 年,杰森·布朗利写了一份清单,他声称默认情况下会鼓励可重复的机器学习结果:https://machinelingmastery . com/reproducible-machine-learning-results-by-default/
机器学习研究再现性的实用分类法 Kaggle 和华盛顿大学工作人员的研究论文http://www . RCT atman . com/files/2018-7-14-ml Reproducibility . pdf
麦吉尔大学的研究人员 Joelle Pineau 有另一个机器学习可重复性的清单https://www . cs . McGill . ca/~ jpineau/reproducibilitychecklist . pdf
她在 NeurIPS 2018 大会上做了一个演讲:【https://videoken.com/embed/jH0AgVcwIBc (大约 6 分钟开始)
12 因素应用程序是对 web 服务的可再现性或可靠性的一种测试https://12factor.net/
《自然》杂志对科学家进行的一项调查显示,超过 50%的科学家认为复制结果存在危机
为什么使用 Git 以及作为数据科学家如何使用 Git
原文:https://towardsdatascience.com/why-git-and-how-to-use-git-as-a-data-scientist-4fa2d3bdc197?source=collection_archive---------3-----------------------
也许你在别的地方听说过 Git。
也许有人告诉你,Git 只面向软件开发人员,作为一名数据科学家,simple 对此毫不关心。
如果你是一名软件工程师转数据科学家,这个话题对你来说是非常熟悉的。
如果你是来自不同背景的有抱负的数据科学家,希望进入这个领域,这个主题是你会感兴趣的——无论是现在还是在不久的将来。
如果你已经是一名数据科学家,那么你就会知道我在这里写的是什么以及为什么。
在文章的最后,我希望我在 Git 方面的经验分享能够让了解 Git 的重要性,以及作为一名数据科学初学者如何在您的数据科学工作中使用它。
我们开始吧!
那么 Git 是什么?
Git 是一个分布式版本控制系统,用于在软件开发期间跟踪源代码的变更
—维基百科
看维基百科给出的这个定义,我也曾经处在你的位置,才觉得 Git 是为软件开发者做的。作为一名数据科学家,我与此无关,只是安慰自己。
事实上, Git 是当今世界上使用最广泛的现代版本控制系统。这是以分布式和协作的方式为项目(开源或商业)做贡献的最受认可和流行的方法。
除了分布式版本控制系统, Git 的设计考虑了性能、安全性和灵活性。
现在您已经理解了 Git 是什么,您脑海中的下一个问题可能是,“如果只有我一个人在做我的数据科学项目,它与我的工作有什么关系?”
而不能领会 Git 的重要性也是可以理解的(就像我上次做的那样)。直到我开始在真实世界环境中工作,我才如此感激学习和实践 Git,即使是在我独自从事个人项目的时候——在后面的部分你会知道为什么。
现在,请继续阅读。
为什么是 Git?
让我们来谈谈为什么。
为什么是 Git?
一年前,我决定学习 Git。我在 GitHub 上第一次分享并发布了我的模拟代码,这是我在 CERN 为我的最后一年论文项目所做的。
同时很难理解 git 中常用的术语(Git 添加、提交、推送、拉取等。),我知道这在数据科学领域很重要,成为开源代码贡献者的一员让我的数据科学工作比以往更有成就感。
于是我继续学习,不断“犯”。
当我加入目前的公司时,我在 Git 方面的经验派上了用场,在那里,Git 是不同团队之间代码开发和协作的主要方式。
更重要的是,当您的组织遵循敏捷软件开发框架时,Git 特别有用,在这种框架中,Git 的分布式版本控制使整个开发工作流更加高效、快速,并且易于适应变化。
我已经多次谈到版本控制。那么版本控制到底是什么?
版本控制是一个记录文件或文件集随时间变化的系统,这样你可以在以后调用特定的版本。
比方说,你是一名数据科学家,与一个团队合作,你和另一名数据科学家从事相同的工作,建立一个机器学习模型。酷毙了。
如果您对函数进行了一些更改,并上传到远程存储库,并且这些更改与主分支合并,那么您的模型现在就变成了版本 1.1(只是一个例子)。另一位数据科学家也在 1.1 版中对相同的功能进行了一些更改,新的更改现在已合并到主分支中。现在模型变成了 1.2 版本。在任何时候,如果你的团队发现 1.2 版本在发布过程中有一些错误,他们可以随时调用之前的 1.1 版本。
这就是版本控制的美妙之处
—我
作为数据科学家如何使用 Git
(Source)
我们已经讨论了 Git 是什么以及它的重要性。
现在的问题归结为:作为数据科学家如何使用 Git?
要成为数据科学家,你不需要成为 Git 专家,我也不需要。这里的关键是理解 Git 的工作流程和如何在日常工作中使用 Git。
请记住,您不可能记住所有的 Git 命令。像其他人一样,在需要的时候随时可以谷歌一下。足智多谋。
我将重点介绍在 Bitbucket 中使用 Git(免费使用)。当然,这里的工作流程也适用于 GitHub。确切的说,我在这里使用的工作流是 Git 特性分支工作流,这是开源和商业项目常用的工作流。
如果您想了解更多这里使用的术语,这是一个很好的起点。
Git 功能分支工作流
特性分支工作流假设了一个中央存储库,master
代表了正式的项目历史。
开发人员不是直接提交到他们的本地master
分支,而是在每次开始工作一个新特性时创建一个新的分支。
特性分支可以(也应该)被推送到中央存储库。这使得在不接触任何官方代码的情况下与其他开发者共享一个特性成为可能——在这个例子中是master
分支。
在您开始做任何事情之前,键入git remote -v
以确保您的工作空间指向您想要使用的远程存储库。
1.从主分支开始,创建一个新分支
git checkout master
git pull
git checkout -b branch-name
假设master
分支总是被维护和更新,您切换到本地master
分支,并将最新的提交和代码拉到您的本地master
分支。
让我们假设您想要创建一个本地分支,向代码中添加一个新特性,并在以后将更改上传到远程存储库。
一旦您获得了本地master
分支的最新代码,让我们创建并签出一个名为branch-name
的新分支,所有的更改都将在这个本地分支上进行。这意味着您当地的master
分公司不会受到任何影响。
2.更新、添加、提交和推送您的更改到远程存储库
git status
git add <your-files>
git commit -m 'your message'
git push -u origin branch-name
好吧。这里发生了很多事情。让我们一个一个的分解。
一旦您做了一些更新,将新特性添加到您的本地branch-name
中,并且您想要将更改上传到远程分支,以便稍后合并到远程master
分支。
git status
将因此输出所有的文件更改(跟踪或未跟踪)由你。在使用git commit -m 'your message'
通过消息提交更改之前,您将使用git add <your-files>
决定要暂存哪些文件。
在此阶段,您的更改仅出现在您的本地分支机构中。为了让您的更改出现在 Bitbucket 上的远程分支中,您需要使用git push -u origin branch-name
来提交您的提交。
这个命令将branch-name
推送到中央存储库(原点),-u
标志将它添加为远程跟踪分支。在设置了跟踪分支之后,可以在没有任何参数的情况下调用git push
来自动将新特性分支推送到 Bitbucket 上的中央存储库。
3.创建一个拉取请求,并对拉取请求进行更改
太好了!现在,您已经成功地添加了一个新特性,并将更改推送到您的远程分支。
您对自己的贡献感到非常自豪,并且希望在将远程分支与远程主分支合并之前获得团队成员的反馈。这使得其他团队成员有机会在变更成为主要代码库的一部分之前对其进行审查。
您可以在 Bitbucket 上创建一个 pull 请求。
现在,您的团队成员已经查看了您的代码,并决定在将代码合并到主代码库— master
分支之前,需要您做一些其他的更改。
git status
git add <your-files>
git commit -m 'your message'
git push
因此,您可以按照与之前相同的步骤进行更改、提交并最终将更新推送到中央存储库。一旦您使用了git push
,您的更新将自动显示在 pull 请求中。就是这样!
如果其他人对您接触过的相同代码的目标进行了更改,您将会遇到合并冲突,这在正常的工作流中是很常见的。你可以在这里看到关于如何解决合并冲突的。
一旦一切顺利完成,您的更新将最终与中央存储库合并到master
分支中。恭喜你!
最后的想法
(Source)
感谢您的阅读。
当我第一次开始学习 Git 时,我感到非常沮丧,因为我仍然没有真正理解工作流——大图——尽管我理解了一般的术语。
这是我写这篇文章的主要原因之一,以便在更高的理解水平上对工作流进行真正的分解和解释。因为我相信对工作流程中发生的事情有一个清晰的理解会使学习过程更有效。
希望这篇分享在某些方面对你有益。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
为什么从实施 Q-学习到深度 Q-学习会很困难
原文:https://towardsdatascience.com/why-going-from-implementing-q-learning-to-deep-q-learning-can-be-difficult-36e7ea1648af?source=collection_archive---------0-----------------------
我不敢问的 3 个问题(和我的 Tensorflow 2.0 模板)
Photo by JESHOOTS.COM on Unsplash
对许多人来说,包括我自己,Q-learning 是强化学习世界的入门。它以一种直观的方式让我们完全习惯于状态、行动和奖励的核心思想,而不会被复杂的技术细节所困扰。
那么,是什么让深度 Q 学习变得如此困难呢?虽然 Q-learning 只花了我一天的时间就从阅读维基百科的文章变成了在一些开放健身馆环境下工作的东西,但是深度 Q-learning 却让我沮丧了一个多星期!
尽管名称如此,深度 Q 学习并不像用神经网络替换状态动作表那样简单。对我来说,熟悉深度 Q 网络(dqn)编码需要三个步骤来理解:
- 意识到 dqn 指的是一系列价值学习算法和为提高其稳定性而进行的工程改进的各种组合。
- 学习 Q 学习中基于贝尔曼方程的值迭代如何与神经网络所需的梯度下降更新相关。
- 弄清楚如何将神经网络更新与代理与环境的交互交织在一起。
这些步骤中的每一步都包含错误,我现在很想把这些错误贴上“愚蠢”或“基本”的标签。然而,我在学习资源中发现的一个困难是,它们将事物呈现为一个整洁、完整的故事,这与学习最终常常陷入的错综复杂的混乱形成了对比。
考虑到这一点,我将逐步解决我在自己的学习过程中遇到的主要问题和困惑,希望它能让其他人走得更容易。我还将构建一个与环境无关的代理模板,这是我在开始强化学习项目时经常使用的,使用 Tensorflow 2.0 进行神经网络。
q-学习回顾
在开始回答我的 3 个问题之前,让我们先回顾一下强化学习(RL)和 Q 学习算法。RL 的五个核心概念是环境、主体、状态、行动和奖励。
一个环境实际上是某种模拟,可以分解成离散的时间步骤。在每一步,代理通过观察其状态并采取动作来与环境交互。每个代理(环境可以有一个或多个,竞争或合作)的目标是最大化某种回报,这是其行为和环境状态(通常还有一些随机元素)的函数。奖励不一定在每一步都遵守,在这种情况下可以称之为稀疏。
由于代理人收到的奖励通常取决于它在许多步骤之前采取的行动,RL 的一个主要困难是确定哪些行动实际上导致了奖励。这就是所谓的信用分配问题。强化学习的一大类方法包括在给定状态的情况下,尝试学习每个动作的值。定义价值来捕捉一个超越直接回报的行为价值的更全面的度量,允许一个人尝试解决信用分配问题。
Q-learning 就是这样一种基于价值的方法。在最简单的实现中,值函数存储为一个表,每个单元格对应于从单个状态采取的单个动作的值。根据以下更新规则直接更新值:
为了将学习到的值转化为控制给定状态下代理行为的策略,在每一步选择给定状态的最大值。当值仍在被学习时,遵循稍微不同的策略以探索状态空间,一个简单的策略是ε-贪婪策略,其中以随时间退火的概率采取随机动作,否则采取最大值动作。
Q-learning 的一个主要限制是它只能在具有离散和有限的状态和动作空间的环境中工作。将 Q 学习扩展到更丰富的环境的一个解决方案是应用函数逼近器来学习值函数,将状态作为输入,而不是存储完整的状态-动作表(这通常是不可行的)。由于深度神经网络是强大的函数逼近器,因此尝试使它们适应这一角色似乎是合乎逻辑的。
等等,深度 Q-Learning 不是指单一算法?
所以把一个神经网络和上面的值更新方程放在一起,你就得到了深度 Q 学习,对吗?不完全是。
要成功地执行简单地用模型替换表格所激发的目的,必须采取一些额外的步骤。一个是,我将在下一节中介绍,虽然上述值迭代可以直接应用于显式存储值的情况,但如果值模型通常使用反向传播和梯度下降来更新神经网络权重,这实际上意味着设计一个适当的目标函数。
但在我们到达那里之前,我想解决一个事实,我希望我在第一次开始学习深度 Q-learning 时就已经知道:就其本身而言,使用神经网络学习价值观根本不能很好地工作。我的意思是:它是不稳定的,容易发散。
研究人员当然意识到了这一点,并从那时起开发了一系列增量插件和改进,成功地稳定了深度 Q 学习。由此得出了我第一个主要问题的答案。当人们提到“深度 Q 学习”时,他们谈论的是用神经网络函数逼近器进行 Q 学习的核心概念,但也是使其实际工作的技术集合。因此,这个术语指的是一系列相关的算法,我觉得这对一个初学者来说是相当混乱的!
为了了解这些技术的范围,我建议检查一下彩虹算法,这样命名是因为它采用了 DQN 扩展的全部范围:双 Q 学习、优先重放、决斗网络、多步学习、分布式 RL 和噪声网络。
作为基线,我建议用 deep mind 2015 年的论文《通过深度强化学习进行人类水平的控制》中的主要创新来实现 dqn,该论文在 Atari 游戏上训练 dqn。
- 体验回放:不是在每次“体验”(动作、状态、奖励、跟随状态)后立即进行网络更新,而是将这些体验存储在内存中,随机取样。
- 单独的目标网络:负责计算作为动作结果而达到的状态值的神经网络的权重被冻结,并且仅周期性地从“在线”网络复制。
为了开始使用代码模板,我将为我的代理和我的神经网络创建大部分为空的对象,以及一些我希望使用的参数和方法。如果您只对完成的模板感兴趣,请随意跳过这个片段。
由于本文的重点不是实际的神经网络,所以我先从一个简单的 2 层前馈网络(或多层感知器)开始。这通常足以在更简单的环境中调试 DQN。
我如何从更新矩阵单元到神经网络的权重?
正如我在上一节中暗示的,从 Q-学习到深度 Q-学习的一个障碍是将 Q-学习更新方程转化为可以与神经网络一起工作的东西。在 Q 学习实现中,直接应用更新,并且 Q 值是无模型的,因为它们是直接为每个状态-动作对学习的,而不是从模型计算的。
对于神经网络,我们最终想要更新模型的权重,以便以类似于 Q 学习更新的方式调整其输出。这通常通过反向传播和梯度下降来实现。幸运的是,大多数深度学习框架都会处理偏导数的反向传播,所以需要做的就是选择一个合适的成本函数。
事实证明,我们不需要看得太远。考虑 Q-learning 更新规则右侧的数量。这有时被称为 TD-target (时间差),代表我们希望 Q 值收敛到的值:执行一个动作的所有剩余时间步长的总预期回报,其中未来的回报以某个因子折现。
如果这个 TD 目标是我们希望 Q 值(即 DQN 环境下我们的神经网络输出)收敛的目标,那么使用我们当前输出到目标的距离作为我们的损失函数似乎是合适的。为此,平方误差显然是首选。现在,如果我们对输出层(Q 值)的损失函数求导,然后基于此编写梯度下降更新,我们会看到我们恢复了 Q 学习更新规则。
Squared error loss between predicted Q value and TD target
Gradient “with respect to Q value” (not completely rigorous)
Gradient descent “on Q value”
虽然这不是一个精确的论点,因为 Q 值输出本身不是在梯度下降过程中更新的参数,但它确实满足了直觉。然而,当第一次尝试实现它时,仍然有一些细节可能会成为令人沮丧的障碍。
- 我们如何计算下一个状态的值?
- 我们如何使梯度更新一次只取决于一个 Q 值,而不是整个输出层?
我们对下一个状态的价值的最佳估计是在那个状态下采取我们认为是最好的行动的价值。那就是:
这就是拥有一个独立的目标网络发挥作用的地方。我们将使用定期更新的目标网络,而不是使用将要更新其权重的在线网络。是的,这意味着我们使用当前网络的一个训练较少的版本来提供训练中使用的目标的一部分。这个一般概念被称为自举。
那么,如何使每次更新仅对应于调整一个 Q 值(当然,所有的权重都将被更新,从而改变网络解释状态和值动作的方式)?这是紧凑数学符号不能暗示代码中需要做什么的一个例子。在方程中写下标很容易,把它翻译成代码就有点难了,深度学习代码也是如此。
诀窍是使用可微运算选择出对目标函数有贡献的 Q 值,这样反向传播将起作用。事实证明这并不太难,但令人恼火的是,似乎没有人明确地谈论它。做到这一点的一种方法是对动作进行一次性编码,并以此为模板,将其与在线网络的输出相乘。查看下面的代码片段,了解这些想法是如何实现的。
网络培训如何适应环境中运行的剧集?
回想一下,为了与环境交互,我们的代理需要一个策略。当一些 RL 代理直接学习策略时,Q-学习代理采取中间步骤学习每个动作的值。这通常通过在每一步采取最有价值的行动来转化为政策,因为价值有预期的未来回报,这样做不一定会导致短视的行为。
在训练期间,可以使用单独的策略,以便更好地探索状态空间。重要的是要认识到,即使在这里,也有多种选择,但“香草”选择将是ε贪婪策略,它开始采取完全随机的行动,并随着时间的推移退火随机行动的速度。进行这种退火的一种简单方法是线性的,即每步进行少量的退火。此外,通过不将它一直退火到 0,一些探索甚至可以保留到训练的深处。
在这个阶段,你可能会遇到的一个术语是政策内和政策外学习之间的区别。基本上,如果代理使用相同的策略与环境交互,就像它在学习更新中估计状态-动作对的值一样,那么它就是基于策略的。由于我们的代理使用ε-贪婪策略来探索环境,但是假设在其目标函数中使用贪婪策略来计算状态的值,那么它就是违反策略的。可以与 Q 学习代理一起使用的 on-policy RL 算法的一个例子是 SARSA 。
因此,我们使用 epsilon-greedy 策略在发作期间控制代理,并使用 TD 目标和由单独的目标网络计算的值估计来更新其权重。还剩下什么?如何实现经验回放?
实际上,这意味着拥有一个类似于 T8 deque T9 的数据结构,当代理人一步一步走过每一集时,该结构存储“经验元组”。我发现的一件愚蠢的事情是,在许多文献中,经验元组被表示为( s_t,a_t,r_t,s_(t+1) ),而实际上,你并不知道下一个状态,只知道现在和过去的状态。所以在代码中,你最终将“最后状态”和“最后动作”存储在看起来更像( s_(t-1),a_(t-1),r_(t-1),s_t )的经验元组中。
除此之外,只需要认识到经验回放会带来一些额外的决定:
- 在开始训练之前,我们让 ER 记忆增长到多大?
- 最多应该储存多少经验?
- 一旦开始训练,我们应该每一步训练还是不那么频繁?
- 在每个培训步骤中,我们应该取样多少次经验?
实际上,这些决策都被编码为代理的额外参数,您可以用它来初始化代理。既然我们已经走了这么远,我觉得可以分享我的完整 DQN 模板代码了,我经常在开始新项目时使用它。请注意,根据环境的具体情况,需要一些额外的步骤来“插入”代理并获得一些功能。特别是,将动作索引映射到环境理解的动作几乎总是需要做的事情。尽管如此,我希望以下内容能提供一些价值,并加快您自己的实验。
结论
在这篇文章中,我回顾了 Q-learning,并讨论了三个让我难以从 Q-learning 过渡到深度 Q-learning 的问题。我希望这样做会让其他人更容易做出同样的飞跃。
我还分享了我在开始一个新的强化学习项目时使用的模板代码。因为环境有许多不同的风格,模板几乎肯定不能开箱即用。通常需要的主要扩展包括:
- 把一个整数动作翻译成环境可以理解的东西。
- 从状态中提取对模型有意义的特征,状态通常包含其他元数据。
- 实现附加逻辑来检测和处理剧集的开头和结尾。
接下来,一旦所有东西都插上电源,通常不需要很长时间,我就需要用更复杂或更适合问题的东西来替换初始网络。
记住这一点,我希望我所提供的将是一个有用的资源,我希望听到所有关于你自己的强化学习之旅。
为什么梯度下降是不够的:神经网络优化算法综合介绍
原文:https://towardsdatascience.com/why-gradient-descent-isnt-enough-a-comprehensive-introduction-to-optimization-algorithms-in-59670fd5c096?source=collection_archive---------10-----------------------
神经网络的目标是最小化 、 的损失,以产生更好更准确的结果 。 为了尽量减少损失,我们需要更新内部学习参数(特别是偏差 )。这些参数根据某个更新规则/功能进行更新。通常,我们认为 渐变下降 是一种更新规则。现在出现了两种类型的问题。
- 更新应该使用多少/哪些数据?
- 应该使用什么更新规则?
本帖在更好优化的背景下,以最简单的方式围绕这两个问题和答案展开。在这篇文章中,我将展示优化算法的直观形象,它们的不同类型和变体。
补充说明
本文假设读者对神经网络的概念、前向和后向传播、权重初始化、激活函数等有基本的了解。如果你不熟悉,我建议你关注我的其他关于这些话题的文章。
神经网络中的前向传播——简化的数学和代码版本
为什么更好的权重初始化在神经网络中很重要?
分析神经网络中不同类型的激活函数——选择哪一种?
优化算法
优化算法试图通过遵循某种更新规则来最小化损失(成本)*。损失是一个数学函数,表示预测值和实际值之间的差异。损耗取决于实际值,该值是借助于 学习参数(权重 和 偏差) 和输入得出的。因此,学习参数对于更好的训练和产生准确的结果非常重要。为了找出这些参数的最佳值,我们需要不断地更新它们。为此,应该有一些更新规则。所以我们使用各种 优化算法 遵循一定的更新规则,每个优化算法都有不同的方法来计算、更新和找出模型参数的最优值。*
优化算法的类型
基于我们的第一个问题“一次更新应该使用多少数据”优化算法可以分为小批量梯度下降 和 随机梯度下降。**
其实基本算法就是梯度下降。小批量梯度下降和随机梯度下降 是基于所取数据量的两种不同策略。这两个也被称为梯度下降的变种。
梯度下降
梯度下降 是最常用和流行的 迭代 机器学习算法。它也是其他优化算法的基础。梯度下降有以下更新规则用于重量参数
由于在用于更新参数的反向传播期间,计算损耗 w.r.t. a 参数的导数。该导数可以依赖于多个变量,因此使用 乘法链规则 进行计算。为此,需要一个 梯度 。 梯度 是表示增加方向的向量。
对于梯度计算,我们需要计算损耗对参数的导数,并在梯度的反方向更新参数*。*****
上面的理想凸曲线图像显示了与梯度方向相反的权重更新。因为我们可以注意到权重的值太大和太小,所以损失最大,我们的目标是最小化损失T21,所以权重被更新。如果坡度为负,则 向正侧下降 (下潜),如果坡度为正,则向负侧下降,直到找到坡度的最小值。
Python 中使用具有 sigmoid 激活函数的单个神经元进行 梯度下降 的算法
def sigmoid(w,b,x):
return 1.0 / (1.0 + np.exp(-w*x + b))def grad_w(w,b,x,y):
fx = sigmoid(w,b,x)
return (fx — y) * fx * (1-fx) * xdef grad_b(w,b,x,y):
fx = sigmoid(w,b,x)
return (fx — y) * fx * (1-fx)def do_gradient_descent():
w,b,eta = -2, -2, 1.0
max_epochs = 1000
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
w = w — eta * dw
b = b — eta * db
上面的动画表现了算法在 1000 个纪元后如何收敛。该动画中使用的误差面与输入一致。这个误差表面在 2D 空间中是动画的。对于 2D,使用等高线图,其中等高线表示第三维,即 误差 。红色区域代表高误差值,红色区域的强度越大,误差越大。类似地,蓝色区域表示误差的低值,蓝色区域的强度越小,误差越小。
标准梯度下降 仅在每个历元后更新参数,即在计算所有观测值的导数后,它更新参数。这种现象可能会导致下面的 注意事项 。
- 对于非常大的数据集来说,这可能非常慢,因为每个时期只有一次更新,所以大量的 时期 需要有大量的更新。
- 对于大型数据集,数据的矢量化不适合 内存 。
- 对于非凸曲面,可能只找到 局部最小值。
现在让我们看看 不同的渐变下降 如何应对这些挑战。
随机梯度下降
随机梯度下降 为每次观测更新参数,这导致更多的更新次数。因此,这是一种更快的方法,有助于更快地做出决策。
Python 中使用具有 sigmoid 激活函数的单个神经元的随机 梯度下降算法
def do_stochastic_gradient_descent():
w,b,eta = -2, -2, 1.0
max_epochs = 1000
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
w = w — eta * dw
b = b — eta * db
在这个动画中可以注意到不同方向的 更快的更新。这里,大量振荡发生,导致用 更高的方差 更新,即更新 。这些嘈杂的更新帮助寻找 新的 和 更好的局部最小值 。
新币的缺点
- 因为 贪婪接近 ,它只近似的渐变。**
- 由于 的频繁波动 ,它会将保持在期望的 精确最小值 附近。
现在让我们看看梯度下降的另一种 变体 如何应对这些挑战。
小批量梯度下降
GD 的另一个变体解决了*SGD 的问题,它位于 GD 和 SGD 之间。 小批量梯度下降 为有限数量的观察值更新参数。这些观察结果一起被称为具有固定大小的批次。批量大小选择为 64 的倍数,例如 64、128、256 等。通过小批量 GD ,一个时期内会发生更多更新。*
Python 中使用具有 sigmoid 激活函数的单个神经元的小批量 梯度下降算法
**def do_mini_batch_gradient_descent():
w,b,eta = -2, -2, 1.0
max_epochs = 1000
mini_batch_size = 3
num_of_points_seen = 0
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
num_of_points_seen += 1
if num_of_points_seen % mini_batch_size == 0:
w = w — eta * dw
b = b — eta * db**
我们可以看到,与 SGD 相比, 小批量 中的振荡更少。
基本符号
1 个时期 =整个数据的一次通过
1 步 =一次参数更新
N =数据点数
B =小批量
小批量 GD 的优势
- 与 SGD 相比,更新的噪音更小,从而导致更好的收敛。
- 与 GD 相比,单个历元中的更新次数较多,因此大型数据集所需的历元数量较少。
- 非常适合处理器内存,使计算速度更快。
更好的优化 w.r.t .梯度下降
误差面 包含较不严谨以及较不严谨的区域。在反向传播期间,斜率较大的区域的参数更新较多,而斜率较小的区域的参数更新较少。参数变化越大,损耗变化越大,同样,参数变化越小,损耗变化越小。
如果参数初始化位于缓坡区域,则需要大量的时期来浏览这些区域。这是因为坡度在缓坡区域非常小。于是它随着 小婴儿的脚步 在平缓的区域移动。
考虑在如下所示的平坦表面中初始化的情况,其中使用了并且当在 平坦表面 中时 误差 不减小。**
即使在大量的历元之后,例如 10000,算法也不会收敛。
由于这个问题,收敛不容易实现,学习需要太多时间。**
为了克服这个问题 使用了基于动量的梯度下降 。
基于动量的梯度下降
考虑这样一种情况,为了到达你想要的目的地,你不断地被要求沿着同一个方向前进,一旦你确信你正在沿着正确的方向前进,那么你就开始迈出 更大的步伐 并且你在同一个方向上不断获得的动力。
与此类似,如果 坡度 长期处于 平面 中,那么与其采取恒定的步数,不如采取更大的步数 并保持 动量 继续。这种方法被称为 基于动量的梯度下降 。
权重参数基于动量的梯度下降更新规则
伽马参数( γ) 是动量项,表示你想要多大的加速度。这里随着 电流梯度( η∇w(t),移动也根据历史(γv(t1))**进行,因此更新变大,这导致更快的移动和更快的。****
v(t) 是 指数衰减加权和 ,随着 t 的增加γV(t1)变得越来越小,即该等式包含小幅度的更远更新和大幅度的最近更新。**
****基于动量的梯度下降在 Python 中用于 sigmoid 神经元
**def do_momentum_based_gradient_descent():
w,b,eta,max_epochs = -2, -2, 1.0, 1000
v_w, v_b = 0, 0
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
v_w = gamma * v_w + eta * dw
v_b = gamma * v_b + eta * db
w = w — v_w
b = b — v_b**
此算法 在 一致渐变 方向添加动量 ,如果在 不同方向 则 取消动量 。
基于动量的梯度下降问题
在导致精确的 期望最小值 的 谷 中,有大量的振荡使用基于动量的 GD 。因为它 越过了的最小值与** 的较大步长,并且需要一个 的掉头 但是又一次越过,所以这个过程重复进行。这意味着用更大的步伐移动并不总是好的。**
- 以动量为基础的 GD 振荡为一个 大次数 进出 小次数 。
为了克服这个问题 内斯特罗夫加速梯度下降 被使用。
内斯特罗夫加速梯度下降
在的动量基础上的 GD 随着的梯度向山谷(极小区域)进发,这使得很多 【振荡】 在它之前汇聚。这个问题最初是由一位名叫尤里·内斯特罗夫的研究者发现并回应的。
他建议,先通过 【先前动量】 使运动,然后计算此时的更新参数。换句话说,在直接进行更新之前,它首先通过用先前的动量移动来向前看,然后它发现梯度应该是什么。
这种向前看的帮助 唠叨 比 基于动力的 GD 更快地完成它的工作(寻找最小值)。 因此 振荡 与基于 动量的【GD】相比更少,并且错过 最小值的机会也更少。
用于重量参数的 NAG 更新规则**
****
Python 中针对 sigmoid 神经元的 NAG 算法
**def do_nag_gradient_descent():
w,b,eta,max_epochs = -2, -2, 1.0, 1000
v_w, v_b, gamma = 0, 0, 0.9
for i in range(max_epochs):
dw,db = 0,0
#compute the look ahead value
w = w — gamma * v_w
b = b — gamma * v_b
for x,y in zip(X,Y):
#compute the derivatives using look ahead value
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
#Now move further in the opposite direction of that gradient
w = w — eta * dw
b = b — eta * db
#Now update the previous momentum
v_w = gamma * v_w + eta * dw
v_b = gamma * v_b + eta * db**
这里 v_w 和 v_b 分别指 v(t) 和 v(b) 。
适应性学习率的概念
根据更新规则
更新正比于 渐变 ( ∇w).变小渐变变小更新 而渐变与 输入 成正比。因此更新也依赖于输入。**
对自适应学习率的需求
对于实时数据集,大多数特征是 稀疏 的,即具有零值。因此,在大多数情况下,相应的梯度为零,因此参数更新也为零。为了引起这个问题的共鸣,这些更新应该被提升也就是一个 高学习率 对于的特性。因此的学习率应该是对于相当稀疏* 的数据。*****
换句话说,如果我们处理的是 稀疏特征 那么的学习率应该是高反之对于密集特征** 学习率应该是低。**
Adagrad、RMSProp、Adam 算法都是基于自适应学习率的概念。
阿达格拉德
它采用了基于特征的 【稀疏度】 的学习率( η) 。因此具有小更新(稀疏特征)** 的参数具有高学习率,而具有大更新(密集特征) 的参数具有低学习率。因此 adagrad 对每个参数使用不同的学习率。**
Adagrad 对重量参数的更新规则
v(t) 累加梯度的平方和。 ∇w(t) 的平方忽略了梯度的符号。 v(t) 表示到时间 t 的累计坡度。ε中的分母避免了 被零除的几率 。
因此,如果对于一个参数来说 v(t) 为低(由于更少的更新到时间 t ,那么有效的学习率将为高,并且如果对于一个参数来说为高**
用于 sigmoid 神经元的 Python 中的 Adagrad 算法
*def do_adagrad():
w,b,eta,max_epochs = -2, -2, 1.0, 1000
v_w, v_b = 0, 0
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
v_w += dw**2
v_b += db**2
self.w -= (eta / np.sqrt(v_w) + eps) * dw
self.b -= (eta / np.sqrt(v_b) + eps) * db*
Adagrad 的缺点
- 学习率急剧下降
对于密集特征对应的参数(尤其是偏差),经过几次更新后,由于平方梯度的累积,分母快速增长,导致学习速率* 快速衰减 。因此,在有限数量的更新之后,算法拒绝学习,并且收敛缓慢,即使我们运行它大量的时期。梯度达到不良最小值(接近期望的最小值),但不在精确的最小值。因此 adagrad 导致偏差参数的学习率下降。*
RMSProp
RMSProp 克服了的 衰减学习率 问题,防止了【v(t)*中的快速增长。***
它不是从一开始就累积平方梯度,而是在某个部分(权重)累积先前梯度,这阻止了 v(t) 的快速增长,并且由于这个原因,算法保持学习并试图收敛。
RMSProp 更新重量参数的规则
这里的 v(t) 是前面所有平方梯度的 指数衰减平均值 。β参数值被设置为与动量项相似的值。直到时间 t 的移动平均值 v(t) 取决于 加权的先前平均梯度 和 当前梯度 。 v(t) 保持()*一个固定的窗口时间。*
用于 sigmoid 神经元的 Python 中的 Adagrad 算法
*def do_RMSProp():
w,b,eta,max_epochs = -2, -2, 1.0, 1000
v_w, v_b = 0, 0
for i in range(max_epochs):
dw,db = 0,0
for x,y in zip(X,Y):
dw += grad_w(w,b,x,y)
db += grad_b(w,b,x,y)
v_w = beta * v_w + (1 — beta) * dw**2
v_b = beta * v_b + (1 — beta) * db**2
self.w -= (eta / np.sqrt(v_w) + eps) * dw
self.b -= (eta / np.sqrt(v_b) + eps) * db*
【RMSProp 的问题
- 具有高学习率或大梯度的大量振荡
到目前为止在 Adagrad,RMSProp 中我们在计算不同的 学习速率 对于不同的参数,我们可以有不同的 动量 对于不同的参数。 亚当 算法引入了 自适应动量 连同 自适应学习率 。
圣经》和《古兰经》传统中)亚当(人类第一人的名字
自适应矩估计(Adam) 计算先前梯度的指数衰减平均值 m* (t) 以及一个 自适应学习率。亚当 是基于 动量的 GD 和 RMSProp 的组合形式。*
在 基于动量的 GD 中, 先前梯度(历史)用于计算当前梯度,而在 RMSProp 先前梯度(历史)用于根据特征调整学习率。因此 亚当 处理自适应学习速率和自适应动量其中 RMSProp 确保 v(t) 不会快速增长以避免学习速率和 m(t) 从 动量衰减的机会
亚当 权重参数更新规则
这里的 m(t) 和【v(t)都是从第一时刻得到的 的值。****
Adam 使用**偏差修正值(无中心方差) 梯度用于更新规则*,这些值是通过二阶矩 获得的。*****
最终的更新规则如下所示
Python 中针对 sigmoid 神经元的 Adam 算法
*****def do_Adam():
w,b,eta,max_epochs = -2, -2, 1.0, 1000
v_w, v_b = 0, 0
m_w, m_b = 0, 0
num_updates = 0
for i in range(epochs):
dw, db = 0, 0
for x, y in zip(X, Y):
dw = self.grad_w(x, y)
db = self.grad_b(x, y)
num_updates += 1
m_w = beta1 * m_w + (1-beta1) * dw
m_b = beta1 * m_b + (1-beta1) * db
v_w = beta2 * v_w + (1-beta2) * dw**2
v_b = beta2 * v_b + (1-beta2) * db**2
#m_w_c, m_b_c, v_w_c and v_b_c for bias correction
m_w_c = m_w / (1 — np.power(beta1, num_updates))
m_b_c = m_b / (1 — np.power(beta1, num_updates))
v_w_c = v_w / (1 — np.power(beta2, num_updates))
v_b_c = v_b / (1 — np.power(beta2, num_updates))
self.w -= (eta / np.sqrt(v_w_c) + eps) * m_w_c
self.b -= (eta / np.sqrt(v_b_c) + eps) * m_b_c*****
所以在 中亚当 不同于 RMSProp 振荡更少并且它更确定地向正确的方向移动,这导致 更快 收敛 和 更好的优化 。
结束注释
在本文中,我讨论了不同类型的优化算法以及使用每种算法时可能遇到的常见问题。一般来说, Adam 带小批量是深度神经网络训练的首选。****
为什么绿色和银色可能成为新的黑色和金色
原文:https://towardsdatascience.com/why-green-silver-just-might-be-the-new-black-gold-1694ac5562bf?source=collection_archive---------7-----------------------
(CREDIT: Author on Canva)
使用典型的数据科学家工具箱对白银进行基本面分析。
背景
白银的故事很长,在过去的几千年里,这种白色金属与人类一起享受了一段相当喧嚣的浪漫史——尽管它似乎一直处于黄金的次要地位。
这篇文章试图对贵金属进行一些彻底的分析,同时也作为一种“数据科学”教程——因为我将记录我在进行分析时经历的许多步骤,并在适用的情况下提供代码样本。笔记本和一些数据可以在这个库中找到。对于这篇文章的压缩版本,点击这里。
内容——这篇文章的内容
What to Expect In This Post (CREDIT: Author on Canva)
需求分析
银作为一种贵金属很有意思,因为它的需求远远超出了仅仅作为珠宝和价值储存手段的用途——相反,它的物理特性使它在工业中备受追捧。本节将主要关注当前和近期对白银的需求。
概述和细分
为了有一点基础,让我们看看来自白银协会的 2019 年世界白银调查的要点——与白银需求有关:
- 2018 年实物总需求增长 4%,至 10.335 亿金衡盎司(3.2146 万吨),创下三年新高
- 这主要是由于对珠宝和银器的需求增加(4%),以及对硬币和金条的需求增加(20%),这抵消了工业需求的减少(1%)
- 工业需求的减少主要是由于光伏(太阳能电池板)行业的减少(-9%),这是因为银负载的持续节约(由于价格原因,制造商正试图使用越来越少的银)
CPM 白银年鉴对国际白银市场进行了详细的统计和分析,过去 43 年全球白银加工需求如下:
Silver Fabrication Demand by Year since 1977 (GoldSilver Blog Post)
(图片摘自 这篇博文 使用 CPM 白银年鉴的数据)。
很明显,制造业的总需求已经连续六年呈上升趋势。现在,这一切都很好,但为什么会增加呢?为了了解这一点,让我们深入了解这一需求:
白银协会提供了更详细的全球白银供需数据,但仅限于 2009 年至 2018 年。
World Silver Demand and Silver Closing Price, Per Year (Source: The Silver Institute)
他们提供的数据实际上是 JPEG 图像,所以我必须手动将其记录到 Excel 中,然后再用 Python 读取。相当麻烦,但我已经把这个文件添加到了这篇文章的回购中,以拯救可怜的灵魂,使其在未来不再经历类似的考验。我从一个网站上刮下来的白银收盘价(见上一节)。
我使用熊猫、Plotly 和袖扣来绘制这些数据,对于上面的图表,我实际上使用了在线图形设计工具 Canva ,来结合白银价格和需求图表(我知道这也可以用 Plotly 来完成,但我不知道如何使用袖扣来轻松完成)。我很喜欢 Plotly,我一定会推荐它;Cufflinks 是一个帮助 Plotly 轻松使用熊猫数据框的库。
import pandas as pd
# Standard plotly imports
import plotly.plotly as py
import plotly.graph_objs as go
from plotly.offline import iplot, init_notebook_mode
# Using plotly + cufflinks in offline mode
import cufflinks
cufflinks.go_offline(connected=True)
init_notebook_mode(connected=True)# Reading in data
demand = pd.read_excel('../data/silver_institute_supply_and_demand.xlsx', 'Demand')
demand.set_index('Year', inplace=True)
demand.fillna(0, inplace=True)# Plotting - Total Supply per Year
demand[['Total Physical Demand']]\
.iplot(kind='bar', xTitle='Year', color='#139A43',
yTitle='Demand (million ounces)',
title='Total Demand for Silver, Per Year', width=4)# Plotting - Total Demand per Year & by Sector
demand.loc[:,'Jewelry':'Industrial Fabrication'].iplot(kind='bar', xTitle='Year',
yTitle='Demand (million ounces)',
title='Total Demand for Silver, Per Year and By Sector', width=4)# Plotting - Total Industrial Demand per Year & by Industry
demand.loc[:,'…of which Electrical & Electronics':'…of which Other Industrial*']\
.iplot(kind='bar', xTitle='Year',
yTitle='Demand (million ounces)',
title='Total Industrial Demand for Silver, Per Year and By Industry', width=4)
Global Silver Demand by Sector, by Year (CREDIT: Author on Jupyter Notebook)
Total Industrial Silver Demand by Industry, by Year (CREDIT: Author on Jupyter Notebook)
从上面的图表中可以看出什么?嗯——我从他们那里得到的是:
- 最大比例的白银需求来自工业应用——这与大多数其他贵金属形成鲜明对比
- 在工业需求中,最大的比例是由电气和电子行业驱动的(占所示期间总需求的 43.64%)
- 电气和电子产品需求呈上升趋势(自 2016 年起)
- 光伏需求从 2014 年到 2017 年呈上升趋势,但在 2018 年大幅下降——这似乎是白银研究所在他们的报告中谈论的内容(见上文)
Silver Industrial Demand, By Year Since 1960 (GoldSilver Blog Post)
为什么与其他贵金属相比,白银的工业需求如此之高?为什么会增加?
银作为一种元素的科学属性有很大关系,Ag:
Thermal & Electrical Conductivities of Several Metals (Left), and Silver Nanoparticles Biocide Solution (Right) (CREDIT: Author on Canva)
在地球表面的所有金属中,银具有最高的导电性和导热性。不仅如此,这种金属还是一种众所周知的杀菌剂——意思是:它能杀死细菌。(注意电阻率是电导率的倒数)。
“在地球表面的所有元素中,银的导电性和导热性最高。”
在本需求分析的下几节中,我们将调查和分析白银在几个主要行业中的确切用途。
电气和电子行业的白银
银在金属中无与伦比的导电性能意味着它不容易被其他更便宜的金属取代。银也是一种贵金属,这意味着它在潮湿的空气中耐腐蚀和抗氧化——不像大多数其他金属。
考虑到这些事实,电子产品遥遥领先于工业白银的头号消费者就不足为奇了。
Many electronic applications make use of Silver pastes (CREDIT: Author on Canva)
银可以直接在银矿中开采,也可以作为铅锌矿的副产品开采。熔炼和精炼将银从矿石中提炼出来,之后通常将其加工成条状或颗粒状。电子产品只需要最高纯度的银——意味着没有污染物(99.9%的银)。银在硝酸中的溶解产生硝酸银,然后可以形成薄片或粉末——然后可以制作成隐形眼镜或银浆。总的来说,这些最终产品是直接用于电子产品的。使用它们的例子很多,但包括:
- 许多汽车的后除霜器,
- 印刷电子和纳米银(广泛用于电动汽车的再生制动),
- 发光二极管(可以使用银电极),
- 电池技术(使用氧化锌或银锌合金),
- 超导体(当与银配对时,结果可以比单独的超导体更快地传输电流)
光伏太阳能中的银
如前所述,银是一种独特的贵金属,因为超过一半的供应量实际上用于工业目的。这主要是因为银具有优异的反射和导电性能。银的一个有趣的应用是在太阳能光伏产业。银被广泛用于太阳能电池板的生产。
Silver is used extensively to produce solar panels (CREDIT: Author on Canva using their library)
事实上,含银浆料对光伏电池和 90%的晶体硅光伏电池都至关重要。该浆料用于太阳能电池中,以收集和传输电子,电子的运动是由阳光通过光电效应引起的。实际上,银有助于传导电子,从而产生电流;这些电能可以被储存或消耗。银的优异电阻率增加了捕获的潜在阳光、传导的能量,并最终增加了太阳能电池产生的总功率——因此太阳能电池的效率在某种程度上与其银含量成比例。
鉴于面对气候变化,全球需要追求更可持续的能源,太阳能以及太阳能电池生产的未来确实是光明的。
两个因素对太阳能导致的白银需求的无节制增长构成了明确的威胁:即节约和其他技术相关的效率提高。
节约是制造商试图减少白银用量以降低成本的过程。事实上,根据代表白银协会的报告,到 2028 年,光伏行业生产导电银浆所需的银量可能会减少近一半,从 2016 年的每电池 130 毫克减少到 65 毫克。银的含量已经下降了很多,从 2007 年的 400 毫克下降到 2016 年的 130 毫克。即使银含量下降,太阳能电池的产量实际上还是增长了,而且预计还会继续增长;从现在的 4.7 瓦到 2030 年的 6 瓦。这种增长是由于效率的提高以及太阳能电池板设计和制造方面的其他技术进步。
Solar PV Fabrication and Thrifting, Per Year (The Silver Institute)
尽管如此,银无与伦比的导电特性意味着,事实上,太阳能电池生产中可能的银负载减少量存在“物理极限”。简而言之,总有一天,效率损失会超过使用更便宜的原材料(铜、铝)替代白银所带来的好处。
尽管如此,银无与伦比的导电特性意味着,事实上,太阳能电池生产中可能的银负载减少量存在“物理极限”。简而言之,总有一天,效率损失会超过使用廉价原材料带来的好处
上述报告预测,光伏行业的需求约为每年 7000 万至 8000 万盎司,到 2020 年代中期将降至 5000 万至 5500 万盎司。只有到 2030 年,需求才有望恢复,达到每年约 6600 万盎司。世界银行的报告呼应了类似的观点,预测太阳能光伏发电将导致需求下降。
我认为,这些实体没有考虑到的是:不要低估在对气候变化的持续恐惧中长大的一代人的力量,当他们到了成为市场驱动者的年龄时,他们作为一个集体会做些什么。
但是让我们用一点分析来解决这个问题:
下面是两张图表。第一个是每年全球可再生能源份额图,第二个是每年全球太阳能总消耗量图:
Total Share of Global Energy that is Renewable (Split Between Solar+Wind, and Other Forms of Renewable Electricity) (CREDIT: Author on Jupyter Notebook)
Total World Solar Energy Consumption, Per Year (Our World In Data)
很明显,太阳能的增长是指数级的——我们看到的绿色革命肯定不会阻止我们在未来使用更多的太阳能。
脸书有一个名为“先知”的非常棒的开源库,它非常适合单变量时间序列预测。它也非常容易使用,让我们把我们的全球太阳能消耗数据扔进 Prophet。
Excerpt of Github Gist — See here
Github Gists 似乎不再恰当地嵌入到媒体中——所以跟随链接正确地查看代码(或者检查笔记本)结果预测如下所示(下载数据集这里):
Forecasted Global Solar Consumption Using FbProphet — y is still in TWh (CREDIT: Author on Jupyter Notebook using Facebook’s Prophet library)
为了得到节省的数据,我使用了一个在线工具从 jpeg 图(如上图所示)中映射出来。我已经在这篇文章的资源库中提供了它。数据范围仅为 2009 年至 2018 年。如果我们把这个也扔进 Prophet,我们得到如下预测:
Forecasted Silver Loadings in grams/cell (Gist) (CREDIT: Author on Jupyter Notebook using Facebook’s Prophet library)
嗯。我们知道银负载量不能降到零以下,我们也没有以任何方式嵌入我们的假设,即“太阳能电池生产中可能的银负载量减少量存在物理限制”——因此这在我们的预测中显然不明显。
白银协会在他们的报告中指出,他们预计节约将会继续,到 2028 年,所用的银负载量可能会降至每电池 65 毫克——现在让我们调整我们的数据(和预测)以包括以下条目:
Forecasted Silver Loadings in grams/cell (Taking into account Silver Institute Prediction) (CREDIT: Author on Jupyter Notebook using Facebook’s Prophet library)
老实说,这不是很有帮助,但我必须说:这些数据看起来非常像可以用指数函数来拟合,幸运的是 Scipy 有一个非常酷的函数可以在瞬间为我们做到这一点——使用最小二乘回归。
不过,在我们这样做之前,让归一化我们的银负载数据集——从 0 到 1。我们可以使用 S klearn 的和最小最大缩放器来实现。
import datetime
import pandas as pd
from sklearn import preprocessingest_thrifting = pd.read_excel('../data/silver_solar_thrifting_estimates.xlsx')# Normalize Estimated Silver
min_max_scaler = preprocessing.MinMaxScaler()
thrifting_scaled = min_max_scaler.fit_transform(est_thrifting)scaled_thrifting_df = pd.DataFrame(columns=['Year', 'Silver Loadings (Scaled)'], data=thrifting_scaled)scaled_thrifting_df.set_index('Year').plot(color='green')
我们的标准化数据如下所示:
Silver Loadings per Year (Scaled from 0 to 1) (CREDIT: Author on Jupyter Notebook)
现在我们可以使用 Scipy 的 curve_fit 函数来拟合数据的以下函数(指数曲线)。
Exponential Function Formula (CREDIT: Author on Canva)
import numpy as np
import scipy.optimize as optimize
import matplotlib.pyplot as pltxdata = scaled_thrifting_df['Year'].values
ydata = scaled_thrifting_df['Silver Loadings (Scaled)'].values
x = np.array(xdata)
y = np.array(ydata)def f(x, a, b, c):
return a * np.exp(-b * x) + cpopt, pcov = optimize.curve_fit(f,x,y, bounds=([0,0,-0.15], [10,10, -0.06]))
# popt, pcov = optimize.curve_fit(f,x,y)
x1 = np.linspace(0,2.5,num =50)fig_size = plt.rcParams["figure.figsize"]
fig_size[0] = 12
fig_size[1] = 8
plt.rcParams["figure.figsize"] = fig_size
plt.plot(x1, f(x1, *popt), 'g',)
plt.plot(x,y,'ro')
plt.show()
请注意,我限制了 c 的界限,以便得到一个至少趋向于每细胞小于 65 毫克的值的曲线(由 Silver Institute 在 2028 年估计的负载量)。结果如下:
Exponential Curve fitted to Normalized Silver Loadings Data (CREDIT: Author on Canva)
在上图中,x 轴上的 2.00 对应于 2047 年。银负载量趋向于 0.045 左右的值——或 45 毫克/电池。 所以这就是我们的【生理极限】 。
现在——当然,这条曲线有点笨拙,我调整了界限,这样它基本上把图表降低到了一个“看起来差不多”的值,甚至有些保守。
现在,这变得非常有趣,当你把两个: 结合起来的时候,就是
(Normalized) Solar Demand Forecast Using Only Silver Loadings and Solar Consumption (CREDIT: Author on Canva)
我不会在这里张贴上图的代码,只是因为它进行了大量的调整、缩放、创建新的数据框架等等(我的熊猫技能可能也有所欠缺)。但是,包含所有代码的单独笔记本是可用的 这里是 。拜托,伙计们, 检查一下我对这一切的逻辑,并在评论中回复我*——我很容易搞砸了一些事情,如果是这样的话,我很想知道。*
当然,这整个过程是假设太阳能银需求与太阳能消耗和每个太阳能电池的银负载成唯一和直接的比例关系——这似乎是有意义的:当然,太阳能银需求与“每个电池中的银量”以及“太阳能电池板消耗的能量”成比例,对吗?
一条不归路。如果这个图表可信的话,看起来我们正处于太阳能白银需求的转折点。如果太阳能电池板中继续使用的银量确实存在物理限制,那么似乎——假设太阳能消耗的增加等于或类似于我们的预测——太阳能行业对银的需求将在未来开始相对快速地攀升,特别是当它达到这一限制时。
看起来,我们正处于太阳能白银需求的转折点。
上图似乎也与过去的 CPM 白银年鉴数据相对应(见 GoldSilver 的博客文章):
Actual Silver Demand for Solar Panels per Year(GoldSilver blog, CPM Silver Yearbook)
水处理中的银
生物杀灭剂在欧洲法律中被定义为“旨在破坏、阻止、使无害或对任何有害生物产生控制作用的化学物质或微生物”。
Silver may have increased future applications in water treatment, but this is speculatory at best (CREDIT: Author on Canva)
银是一种广为人知的广谱杀菌剂,被证明能有效消除越来越多的细菌威胁,包括军团病、大肠杆菌、链球菌和 MSRA;这些微生物占了我们日常接触的细菌的很大一部分。由于这些性质,银长期以来一直用于水处理,在世界各地的许多过滤器中销售。
尽管世卫组织世界卫生组织已经宣布,在其目前的应用中,银是“不是饮用水的有效消毒剂”,纳米技术领域的发展和银纳米粒子的使用可能会在未来几年内看到这种变化。最近的研究表明,银(银)纳米粒子片的银损失低于世卫组织和环境保护局(EPA)提出的饮用水标准,结论是通过沉积有银纳米粒子的纸过滤可以是有效的应急水处理。除此之外,最近的研究调查了将银用作航天器水系统杀菌剂的可能性。事实上,美国宇航局正在考虑将银作为未来探索的杀菌剂。
最近的研究表明,银(银)纳米粒子片的银损失低于世卫组织和环境保护局(EPA)提出的饮用水标准,结论是通过沉积有银纳米粒子的纸过滤可以是有效的应急水处理。
总结一下银在水处理中的应用;如果你像 Michael Burry(《大空头》故事背后的人)一样,认为未来将会出现可获得淡水的严重短缺,并且同样的未来将会看到太空探索的急剧增长,你可能只是想在这种迷人的金属上对冲你的赌注。
Christian Bale as Michael Burry in ‘The Big Short’. Burry has been known to be concentrating on freshwater, as he thinks freshwater reserves per capita will decrease in the future — and it will thus become an ever more economically valuable commodity. (CREDIT: Author on Canva)
供应分析
对白银供应的分析即将出炉,供应数据当然也很有趣。
概述和细分
全球白银供应总量如下图所示:
Total Global Silver Supply by Year since 1977 (GoldSilver Blog Post)
同样,白银协会的数据更加细致:
*supply = \ pd.read_excel('../data/silver_institute_supply_and_demand.xlsx', 'Supply')
supply.set_index('Year', inplace=True)
supply.fillna(0, inplace=True)supply[['Total Supply']]\
.iplot(kind='bar', xTitle='Year', color='#1C7C54',
yTitle='Supply in Tons',
title='Total Supply of Silver, Per Year', width=4)supply[['Mine Production','Net Government Sales','Scrap', 'Net Hedging Supply']]\
.iplot(kind='bar', xTitle='Year',
yTitle='Supply in Tons',
title='Total Supply of Silver, Per Year', width=4)*
Total Silver Supply (Silver Institute) (CREDIT: Author on Jupyter Notebook)
Total Supply by Year and Source (CREDIT: Author on Jupyter Notebook)
到目前为止的一些要点:
- 全球大部分白银供应来自地下(矿山)
- 无论是矿山供应还是废钢供应(白银的两大来源) 似乎都在下降——但是为什么呢?
来自矿山的银供应量的减少似乎是由于银价造成的。我使用了 Python 库 请求 和 BeautifulSoup 来抓取历史白银价格,然后用 Plotly 绘图:
*import requests
from bs4 import BeautifulSoup## Silver
res = requests.get("[https://www.macrotrends.net/1470/historical-silver-prices-100-year-chart](https://www.macrotrends.net/1470/historical-silver-prices-100-year-chart)")
soup = BeautifulSoup(res.content, 'lxml')
tables = soup.find_all('table')
headers = ['Year', 'Average Closing', 'Year Open', 'Year High', 'Year Low', 'Year Close', 'Annual % Change']
df_silver = pd.DataFrame(pd.read_html(str(tables[0]))[0])
df_silver.columns = headersdef convert_to_float_if_applicable(cell):
if isinstance(cell, str) and '$' in cell:
try:
cell = float(cell.replace('$', '').replace(',',''))
return cell
except:
return cell
elif isinstance(cell, str) and '%' in cell:
try:
cell = float(cell.replace('%', ''))
return cell
except:
return cell
else:
return celldf_silver = df_silver.applymap(lambda cell: convert_to_float_if_applicable(cell))
df_silver.rename(columns={'Average Closing': 'Average Closing, Silver'}, inplace=True)df_silver.set_index('Year')[['Average Closing, Silver']]\
.iplot(kind='line', xTitle='Year', color='#C0C0C0',
yTitle='Average Closing Price in Dollars ($)',
title='Average Closing Prices for Silver', width=4)*
Historical Silver Prices per year since 1969 (macrotrends.net)
低银价意味着银矿一直难以盈利,导致它们投入勘探项目和增加产量的资金越来越少。请注意下图中十大白银生产国名单中的每个国家开采的白银都在减少。
Mine Production from Top 10 Silver Producing Countries (CPM Yearbook, GoldSilver Blog Post)
此外,即使白银价格飙升,银矿也需要一段时间,甚至几年的时间来增加产量——这种“滞后”可能意味着白银需求高而供应不足的时期会延长。
“……即使白银价格飙升,银矿也需要一段时间,甚至几年才能增加产量”
但是等等,还有。
根据 GoldSilver 今年早些时候的博客文章,白银的“矿山产能”——预计从新矿进入市场的白银量——已经急剧下降(引用一句话,跌落悬崖);自 2013 年以来,它已经下跌了近 90%,这也是白银价格低迷的结果(低价格意味着人们不太可能开始新的银矿)。
此外,根据 CPM 年鉴和,白银废料也有所下降(20 年来的最低点)——同样,低白银价格似乎是罪魁祸首,因为废料经销商发现越来越难赚钱。
Global Silver Scrap Supply Per Year (CPM Yearbook, GoldSilver Blog Post)
现在,如果全球白银需求增加,但供应却停滞不前,那么白银将从何而来?再次引用戈德西尔弗的话:“不是来自政府储备。政府不再囤积白银。没有一个国家在其货币中使用它,所以他们不再囤积它”。
Global Government Silver Inventories Per Year (CPM Yearbook, GoldSilver Blog Post)
Top Silver Producing Countries and Companies (The Silver Institute World Silver Survey 2019)
地缘政治和经济
虽然前面的章节已经通过供需理论的透镜观察了白银,并特别关注了白银的工业应用,但这一节将采取更为的宏观经济方法,并探索可能会在未来显著影响白银价格的几个想法和潜在事件。
“指数泡沫”和另一场衰退?
据亿万富翁投资者兼对冲基金经理雷伊·达里奥称,经济以一种简单而机械的方式运行。他在一个精彩的 YouTube 视频中解释了这个概念,但本质上他说经济是由三种主要力量驱动的
- 生产率增长
- 短期债务周期
- 长期债务周期
According to Ray Dalio, The Economy is the Result of the Accumulation of Three Forces (CREDIT: Ray Dalio on YouTube)
根据 Dalio 的说法,“债务波动”发生在两个大周期(长期和短期),分别为 75-100 年和 5-8 年;在这个时间点(2019 年 12 月),我们正处于与 1935 年至 1940 年相似的时期,这一时期呈现出以下共同特征:
- 巨大的财富差距(最富有的 0.1%人口的净资产现在相当于最贫穷的 90%人口的总和)
- 于是,我们就有了的民粹主义和社会动荡
- 由于前两次经济衰退(20 世纪 90 年代和 2008 年),我们的货币政策也不太有效,因此降低利率和量化宽松作为扭转下一次经济衰退的手段不会那么有效
- 我们正进入经历“紧缩周期”(类似于 1937 年)的阶段
用 Dalio 的话来说:“下一次衰退将会发生,可能是在几年内”,而且将会是一次社会和政治问题将会很严重的衰退——这使得中央银行使用的“杠杆”(利率、量化宽松)的有效性下降,这将意味着我们将很难“扭转”下一次衰退。这将是一个艰难的决定。
“下一次经济低迷可能会在未来几年内发生”——雷伊·达里奥,2019 年 9 月
除此之外,像迈克尔·伯利(Michael Burry)这样的人(成功预测 2008 年房地产市场泡沫的人)最近一直在谈论 我们目前可能正处于一个指数泡沫 。 Burry 指出,“被动投资正在推高股票和债券价格,就像 10 多年前抵押债务债券对次级抵押贷款的作用一样……就像大多数泡沫一样,持续时间越长,崩溃就越严重”。
“被动投资正在抬高股票和债券价格,就像 10 多年前抵押债务债券对次级抵押贷款的影响一样,”Burry 告诉彭博新闻—迈克尔·伯里,2019 年 9 月
现在我不知道我们是否真的处于泡沫之中。也不知道下一次低迷/衰退还有多远。但我认为我们还没有最后一次。在经济低迷时期会发生什么?答案是投资者涌向贵金属——比如白银——这将意味着白银需求的巨大增长。
亚洲
国家中国和印度值得在这篇文章中特别提及。当谈到白银时,这两个国家似乎尤其值得关注。在过去的 18 年里,中国对白银加工的需求增长了 420%——通货膨胀率低于美国。中国也是 2018 年白银需求的主要贡献者, 占新增太阳能电池板安装量 的近一半,报告称,白银产量较 2017 年增长 2%,实现 1.149 亿金衡盎司;Silvercorp 的 Ying 矿区获得了最高的改进(产量和品位)。**
Chinese Silver Fabrication Demand Per Year, (CPM Yearbook, GoldSilver Blog Post)
Annual Chinese Industrial Silver Fabrication (Left) and Asian Mine Production (Right), World Silver Survey
Silver Supply Chain in Global PV Industry (2018), The Silver Institute
Top Exporters of Photosensitive/photovoltaic/LED Semiconductor Devices (2017), Observatory of Economic Complexity
Top Importers of Photosensitive/photovoltaic/LED Semiconductor Devices (2017), Observatory of Economic Complexity
从上述图表来看,中国似乎将受益于电子和可再生能源驱动的白银需求的大幅增长(假设需求确实增长)。
投资中国的白银供应端(矿山和废料公司)可能确实是个好主意——因为这是中国最廉价满足其需求的地方。
Top Exporters of Silver, Observatory of Economic Complexity
Top Importers of Silver, Observatory of Economic Complexity
另一方面,印度似乎对 白银作为价值储存手段更感兴趣。 看上面的树形图,印度是 2017 年白银的最大进口国。纵观整个世界,在连续两年下降后,2018 年全球 实物白银购买总量增长了 5%至 1.61 亿金衡盎司,而这一需求飙升在很大程度上归因于印度。印度的实物白银购买量增长了 53%,也主导了银锭贸易,进口量增长至 36%(2015 年以来的最高水平)。
2018 年,印度的银首饰制造量同比增长 16%,至 7,650 万金衡盎司(2,378 吨)。 未来几年,印度可能确实是全球白银需求的重要驱动力。
关于未来和其他花絮
在这一部分,我决定把其他所有东西都塞进去——那些似乎不适合放在其他地方的东西。我们将看看白银未来可能的应用,以及一些技术分析(黄金/白银比率)。
在未来观看
- 电动汽车
- 银纳米粒子与应急水处理
- 航天工业中的白银
Silver Demand in the Automotive Industry, Silver Institute
由于其优异的导电性,银被广泛用于电动动力系统和其他应用中,这些应用越来越多地出现在混合动力内燃机(ICE)汽车和电动汽车(ev)中。此外——关于水处理——纳米技术可能会创造一种环境,在这种环境中,银在紧急水处理中可能非常有效,这就是为什么美国宇航局将其列为未来太空探索的生物杀灭剂。
金银比率
金银比率代表购买一枚等量黄金所需的白银数量。有趣的是,这一比率接近历史最高水平,这表明白银相对于黄金越来越被低估。
The Ratio of the Gold Price to the Silver Price, Per Year Since 1969 (CREDIT: Author in Jupyter notebook)
上面的图表是使用下面的代码绘制的,基本上是使用 Plotly 和袖扣来绘制黄金&白银价格的比率(从互联网上搜集的)。
***import pandas as pd
import requests
from bs4 import BeautifulSoup
## Silver
res = requests.get("[https://www.macrotrends.net/1470/historical-silver-prices-100-year-chart](https://www.macrotrends.net/1470/historical-silver-prices-100-year-chart)")
soup = BeautifulSoup(res.content, 'lxml')
tables = soup.find_all('table')
headers = ['Year', 'Average Closing', 'Year Open', 'Year High', 'Year Low', 'Year Close', 'Annual % Change']
df_silver = pd.DataFrame(pd.read_html(str(tables[0]))[0])
df_silver.columns = headers## Gold
res = requests.get("[https://www.macrotrends.net/1333/historical-gold-prices-100-year-chart](https://www.macrotrends.net/1333/historical-gold-prices-100-year-chart)")
soup = BeautifulSoup(res.content, 'lxml')
tables = soup.find_all('table')
headers = ['Year', 'Average Closing', 'Year Open', 'Year High', 'Year Low', 'Year Close', 'Annual % Change']
df_gold = pd.DataFrame(pd.read_html(str(tables[0]))[0])
df_gold.columns = headersdef convert_to_float_if_applicable(cell):
if isinstance(cell, str) and '$' in cell:
try:
cell = float(cell.replace('$', '').replace(',',''))
return cell
except:
return cell
elif isinstance(cell, str) and '%' in cell:
try:
cell = float(cell.replace('%', ''))
return cell
except:
return cell
else:
return celldf_silver = df_silver.applymap(lambda cell: convert_to_float_if_applicable(cell))
df_gold = df_gold.applymap(lambda cell: convert_to_float_if_applicable(cell))
df_gold.rename(columns={'Average Closing': 'Average Closing, Gold'}, inplace=True)
df_silver.rename(columns={'Average Closing': 'Average Closing, Silver'}, inplace=True)
precious_metals_avg_cls = pd.merge(df_silver, df_gold, how='inner', on = 'Year')
precious_metals_avg_cls.set_index('Year', inplace=True)ratio_gold_to_silver = precious_metals_avg_cls
ratio_gold_to_silver['Ratio of Gold to Silver'] = precious_metals_avg_cls['Average Closing, Gold'] \
/ precious_metals_avg_cls['Average Closing, Silver']precious_metals_avg_cls[['Ratio of Gold to Silver']]\
.iplot(kind='line', xTitle='Year', color='#1C7C54',
yTitle='Ratio of Gold Closing Price, to Silver Closing Price',
title='Ratio of Gold Price to Silver Price', width=4)***
就这些了,伙计们!感谢你的阅读,如果你已经做到了这一步,那么恭喜你——我喜欢做这个,希望你们中的一些人能从中发现一些价值。请不要把这篇文章当成强硬的金融/投资建议——我不是一个有经验的投资者,白银甚至可能是一个糟糕的投资。我很想知道这种金属在未来会发生什么。
再次感谢阅读!
(CREDIT: Author in Jupyter on Canva)
参考
- http://www . silver institute . org/WP-content/uploads/2017/08/eosilverdemandreportdec 2016 . pdf
- https://www . silver institute . org/WP-content/uploads/2019/04/WSS 2019 v3 . pdf
- https://www . jmbullion . com/investing-guide/types-physical-metals/silver-solar-demand/
- https://www . PV-magazine . com/2018/05/11/silver-prices-to-drop-4-toz-by-2030-world-bank-says/
- https://www . who . int/water _ sanitary _ health/publications/silver-02032018 . pdf?ua=1
- https://www . PV-magazine . com/2018/07/06/amount-of-silver-institute-says/
- https://www.sbcgold.com/blog/silver-supply-demand/
- https://seeking alpha . com/article/4044219-足够-银-电力-世界-甚至-太阳能-电力-效率-四倍
- https://gold silver . com/blog/silver-in-charts-supply demand-crunch-after-years of-the-opposite/
- https://www . science daily . com/releases/2019/04/190417102750 . htm
- https://www.statista.com/topics/1335/silver/
- https://www . macro trends . net/1470/historical-silver-prices-百年走势图
- ***【https://www.silverinstitute.org/silver-supply-demand/ ***
- https://oec.world/en/
为什么 AI/机器学习在企业中停滞不前?
原文:https://towardsdatascience.com/why-has-cloud-native-ai-machine-learning-stalled-in-the-enterprise-21cfaeb29551?source=collection_archive---------28-----------------------
主要是因为合理的云安全考虑。而 AI/ML 的数据胃口引发了与企业安全的严重冲突。有哪些问题?
Photo by Nareeta Martin on Unsplash
为什么企业在云中采用 AI/ML 停滞不前?
简而言之,因为材料,真实的,有效的数据安全问题。不幸的是,这些担忧与 AI/ML 对数据的贪婪胃口直接冲突。在冲突得到解决之前,云原生 AI/ML 在企业中的采用将会停滞不前。
最近关于 Capital One 最近的数据泄露及其成本的头条新闻强调了这一点。它甚至可能让像 Capital 这样的重度云消费者猜测他们的云数据安全和隐私状况。
由于潜在的巨额损失和罚款,可以预料,许多企业在将少量敏感数据迁移到云中时都会非常谨慎。
然而,尽管有潜在的风险,公司继续将目标对准 AI/ML 云平台上可用的高级计算能力。因此,像之前的通用计算一样,人工智能/人工智能在云上的进军现在正在开始,早期采用者正在建立云原生人工智能/人工智能能力的滩头阵地。
但是使用云的早期企业 AI/ML 采用者看到一个主要障碍反复出现:云数据安全和隐私问题。事实上,AI/ML 的独特特征加剧了这些担忧,毕竟,AI/ML 的成功与大量数据的可用性直接相关,其中大部分可能是机密或非常敏感的数据。
在这些严重的、实质性的、有效的云数据安全问题得到解决之前,云上的企业 AI/ML 采用将停滞不前,被降级为小项目,交付缓慢,不幸的是,提供的价值有限。
在本文中,我将讨论 AI/ML 的独特特征,这些特征导致了数据安全问题,阻碍了云原生 AI/ML 的广泛采用。
AI/ML 向云的进军本来应该很简单
“理论”是,向云原生 AI/ML 进军应该很简单。毕竟,互联网巨头已经展示了如何应用基于云的人工智能/人工智能来解决以前难以解决的问题,例如提供比人类更好的机器视觉,实时音频和文本翻译。
毫不奇怪,企业认为使用相同的云功能、相同的开源软件以及相同的丰富网络和计算能力将有助于轻松实现云原生 AI/ML。
然而,在实践中,企业遇到了一些障碍。在最近的一份报告中,德勤指出,尽管有很大的兴趣,“43%的公司表示他们对潜在的人工智能风险有重大或极端的担忧。”而且,在这些担忧中,“排在首位的是网络安全漏洞(49%的人将其列为三大担忧之一)。”事实上,“对大多数国家来说,对潜在人工智能风险的担忧超过了他们应对这些风险的信心。”
但是,这些担忧与安全性旨在保护的东西(即数据)交织在一起。不幸的是,大多数企业可能没有做好准备。根据 Irving Wladawsky-Berger 在《华尔街日报》的一篇文章中的说法,只有“18%的人说他们的公司制定了访问和获取人工智能工作所需数据的战略”。
事实证明,企业采用云原生人工智能/人工智能并不那么简单。事实上,云上的企业 AI/ML 采用正在停滞。在云上采用企业 AI/ML 时,有一个棘手的挑战是一个基本问题:数据安全和隐私。
Photo by Srh Hrbch on Unsplash
AI/ML 的独特需求是重新思考云安全策略的催化剂
AI/ML 在企业中有一些独特的特征:首先,数据科学家——实际上是 AI/ML 从业者——需要频繁访问敏感数据。无论它被认为是私有的(客户数据)还是机密的(财务数据),或者介于两者之间,底线是企业将从对其唯一的数据中获得最大价值。对于企业来说是唯一的数据,根据定义,这些数据几乎都是敏感的,必须受到保护。过去,对敏感数据的访问通常受到严格控制。
其次,数据科学家要求敏感数据“畅通无阻”。过去,数据存储在被锁定的生产系统中,只有在受控和特定的情况下应用程序才能访问,即使可以访问,生产数据也被严重屏蔽。
但是,今天的数据科学家有一个基本需求,即以无屏蔽的形式访问生产数据。简而言之,如果数据科学家需要某个数据属性或特征来进行模型开发、培训或验证,那么该数据必须在处理时“清晰地”(无屏蔽地)可用。其含义很清楚:如果培训活动要利用云资源,那么数据必须“明文”驻留在云上。
第三,AI/ML 因数据而兴盛。然而,更多的数据——尤其是云中更敏感的数据——大大增加了风险。显而易见的含义是,如果发生数据泄露,那么这将是一个巨大的数据泄露,并带来相应的巨大成本。
最后,保护云中的数据非常困难。必须建立安全边界。必须在企业及其云租赁之间创建安全的链接。对数据的访问必须在一定的粒度级别上进行仲裁,这需要复杂的治理和基于角色的访问控制(RBAC)机制。
这只是典型问题的一小部分。经验表明,这些问题,以及建立和实施解决这些问题的强大数据安全和隐私政策的相关高成本,是在云上广泛采用 AI/ML 的重大障碍。
显然,AI/ML 的独特需求与所需数据的敏感性相结合,迫使企业不得不采取行动——需要一套新的安全策略来保护云中的敏感数据。
Photo by Randy Colas on Unsplash
云安全策略必须应对一系列新的威胁
在某些方面,这些天的头条新闻几乎像一本漫画书,其中我们的英雄——企业——不断受到攻击。就像漫画书一样,大多数攻击都被击退了,但也有一些总能成功。下面是企业必须应对的一些威胁(见图 1)。
Figure 1
场景 1:首先想到的是恶意黑客的攻击,他们试图渗透到企业云租赁中。关于这一点已经写了很多,所以不需要多说什么,除了损害可能是广泛的:想想最近的优步黑客事件,据 TechCrunch 报道,两名黑客绕过安全控制,“窃取了数百万用户的数据”。
场景 2:管理企业云租赁的员工可能会无意中出错,这可能是由于基础架构配置错误或未打补丁,从而导致未被发现的数据泄露。例如,在 Capital One,泄露 1 亿客户数据的大规模数据泄露事件是由错误配置的防火墙引起的。类似地,Equifax 的数据泄露导致 1.48 亿客户的数据泄露,这是由未打补丁的软件造成的。
场景 3:企业需要处理由于潜在的松散控制而导致的敏感数据的无意泄露。最近关于英国 Monzo 银行的头条新闻强调“该银行近 50 万的客户被要求重置他们的个人识别码,因为这些信息被保存在一个员工可以访问的不安全文件中。”
场景 4:有权访问敏感数据的员工可能会非法泄露这些数据。环球邮报报道影响 290 万客户的 Desjardins 集团数据泄露是由一名违规员工引起的,该员工涉嫌窃取和暴露敏感数据,包括个人信息,如姓名、出生日期、社会保险号(类似于美国社会保险号)以及电子邮件、电话和家庭地址。
场景 5:企业还需要考虑第三方或云供应商对其云基础设施做出的意外更改。最近,一家领先的云供应商对导致客户数据泄露的违规事件承担了责任。值得庆幸的是,这种情况很少发生,但仍然值得关注。
云上的企业 AI/ML 可能已经停滞了,但还是有解决方案的
回到我最初的问题:为什么云上的企业 AI/机器学习停滞不前了?简而言之,主要是由于有效的数据安全问题。而且随着企业 AI/ML 不断需求大量敏感的。如果有人能从中得出什么结论,那就是赌注每天都在变得越来越大。
解决方案是有的,但业界已经承认,过去的解决方案可能不会像需要的那样有效。事实上,据麦肯锡的称,“大多数传统 IT 环境采用基于边界的‘城堡和护城河’方法来实现安全性,而云环境更像是现代酒店,通过钥匙卡可以进入特定楼层和房间”。
在下一篇 文章 中,我将分享一些与建立云原生 AI/ML 功能相关的个人经验。特别是,我将讨论“城堡和护城河”方法的缺点,然后解释麦肯锡倡导的“现代酒店房间”和“钥匙卡”概念如何解决阻碍企业在云中采用 AI/ML 的许多安全问题。
为什么&如何:可解释的 ML
原文:https://towardsdatascience.com/why-how-interpretable-ml-7288c5aa55e4?source=collection_archive---------25-----------------------
Explanation of classification ‘tabby’ as produced by LRP. Photo by author, heatmap implementation available at https://lrpserver.hhi.fraunhofer.de/image-classification.
可解释的机器学习(或可解释的人工智能)技术最近受到了很多关注,因为它试图打开现代预测算法(主要是神经网络)的黑匣子。不仅仅是在学术界,决策者和企业也已经意识到,可解释性是避免在企业、公共卫生、刑事司法等领域部署众所周知的不稳定的 ML 模型所带来的潜在危险的关键。例如,美国军方致力于开发他们所谓的可解释的人工智能系统(XAI) ,欧盟 通用数据保护条例(GDPR)2016包含算法决定的“解释权”,美国的 平等信贷机会法案 主张拒绝信贷的具体原因的权利。可解释的 ML 也催生了众多初创企业,比如可解释的 AI 、 Clarifai 和 Aignostics 等等。
这篇文章的目的是给你一个关于可解释 ML 的概述,为什么它如此有用,你可能从中受益的地方,并给你一些现有方法的初步指示。在这篇文章中,不会涉及任何具体技术的细节。
那么什么是可解释性 ML 呢?
简而言之,可解释的 ML 意味着你的算法做出的决定可以以某种方式被翻译成人类可以理解的领域。例如,如果该算法对猫的图像进行分类,那么一种方法是简单地突出显示该算法已经使用了哪些像素来达成分类决定。
如果你想精确一点,你应该区分解释和解释之间的。解释将预测的类别转换到人类可以理解的领域,例如图像、文本或规则。解释只是负责模型输出的输入特征的集合,它可以是你输入到算法中的任何东西。通常,你会发现这些术语可以互换使用。
可解释 ML 有什么好处?
除了上述的法规要求,可解释的 ML 在许多情况下是有用的,但并不相互排斥:
- 建立信任:当必须做出安全关键决策时,例如在医疗应用中,提供解释非常重要,以便相关领域的专家能够理解模型是如何做出决策的,从而决定是否信任模型。(这里一篇考虑信任的论文。)
- 故障分析:自动驾驶等其他应用在部署时可能不涉及专家。但是,如果出现问题,可解释的方法可以帮助回顾性地检查在哪里做出了错误的决策,并了解如何改进系统。
- 发现:想象一下,你有一种算法可以准确地检测出早期癌症,除此之外,还可以开出最佳治疗方案。能够将它作为一个黑匣子已经很棒了,但是如果专家们能够检查为什么算法做得这么好,并随后深入了解癌症的机制和治疗的功效,那就更好了。
- 验证:在训练 ML 模型的时候,往往很难说出模型有多健壮(即使测试误差很大),以及为什么它在某些情况下做得很好,而在其他情况下却不行。尤其令人发指的是所谓的虚假相关性:与你想在训练数据中预测的类别相关的特征,但不是这个类别正确的真正潜在原因。有很多虚假关联的例子,也有学术文献中记载的案例。
- 模型改进:如果你的模型做得不好,你不知道为什么,有时可以看看模型决策的解释,确定问题是出在数据还是模型结构。
方法动物园
值得注意的是,有许多不同的方法来实现可解释的 ML,并且不是每个方法都适合每个问题。
基于规则的系统,例如 70 年代和 80 年代成功的专家系统,通常是可解释的,因为它们通常将决策表示为一系列简单的 if-then 规则。在这里,整个,可能是复杂的,决策过程可以被追踪。一个主要的缺点是,它们通常依赖于手动定义的规则,或者依赖于以可以从中导出规则的参数形式(即,以符号形式)准备数据。
决策树也遵循 if-then 模式,但是它们可以直接用于许多数据类型。不幸的是,如果决策是复杂的,甚至它们也是不可理解的,而树木肯定不是我们所能使用的最有力的工具。如果您的问题不太复杂,并且您希望模型天生易于解释和交流,那么它们是一个很好的选择。
线性模型(如线性回归)非常有用,因为它们能以与每个输入变量相关的权重形式立即给出解释。由于其性质,线性模型只能捕捉简单的关系,对于高维输入空间,解释可能是不可理解的。
如果你的问题很简单或者符合专家系统的设置,那么上面的一种方法就足够了。如果你想要更强大的最新模型的解释(例如,深度神经网络或内核方法),请继续阅读。
一些模型具有内置的可解释性。例如,神经注意力架构学习可以直接视为解释的输入的权重。解开模型,如贝塔-VAE ,也可以被视为解释产生模型,因为它们为我们提供了数据中有意义的变异因素。
与上面的方法相反,事后可解释性方法处理在模型已经被训练之后提供解释。这意味着您不必改变您的模型或培训管道,或者重新培训现有的模型来引入可解释性。这些方法中的一些具有与模型无关的巨大优势,这意味着你可以将它们应用于任何先前训练过的模型。这意味着您也可以轻松地比较不同模型提供的解释。
最著名的事后可解释性技术之一是局部可解释的模型不可知解释 (LIME)。基本思想是,为了局部地解释算法对于特定输入的决定,学习线性模型来仅针对输入周围的小区域仿真算法。这个线性模型本质上是可以解释的,它告诉我们,如果我们稍微改变任何输入特征,输出会如何变化。
SHapley Additive explaints(SHAP)是一种建立在 SHapley 分析基础上的方法,该方法本质上是通过在所有可用特征的多个子集上训练模型来判断特征的重要性,并评估特征的省略会产生什么影响。在 SHAP 的论文中,对石灰和深度提升也进行了连接。
可解释性方法的另外两个密切相关的分支是基于传播和基于梯度的方法。它们或者通过模型传播算法的决定,或者利用损失梯度提供的灵敏度信息。突出的代表有反卷积网络、导向反向传播、 Grad-CAM 、综合梯度、逐层相关传播 (LRP)。
这些方法中有许多是专为(卷积)神经网络设计的。一个显著的例外是 LRP,它也已经被应用于例如内核方法和lstm。2017 年,LRP 获得了额外的理论基础和扩展,即深度泰勒分解。一些基于传播/梯度的方法已经在工具箱中实现并准备好使用。
我试图捕捉最重要的技术,但是当然还有更多的技术,而且这个数字随着每次相关会议的召开而增加。
总结一下,以下是一些要点:
- 可解释的 ML 扮演着越来越重要的角色,并且已经是一个(监管)需求。
- 这在许多情况下都很有帮助,例如,与用户建立信任,或者更好地理解数据和模型。
- 有大量的方法,从有悠久传统的非常简单的工具(基于规则的系统,或线性回归),到可以用于现代模型的技术,如神经网络。
希望你学到了有用的东西。如果您有任何意见或反馈,请告诉我!
为什么我相信因果报应。
原文:https://towardsdatascience.com/why-i-believe-in-karma-edf307b806f4?source=collection_archive---------13-----------------------
为什么你也应该!一个数学家的视角。
我相信因果报应。你也应该这样。为什么?不是因为我有灵性或者类似的东西。我认为你应该相信因果报应,因为因果报应是一个数字游戏。这是一个简单的概率现象。
Photo by Holger Link on Unsplash
让我们采用概率方法,并使其在数学上更加严格。
一个随机的人可能相信因果报应( K ),也可能不相信因果报应( NK )。同样,一个随机的人可能会做好事( G ),也可能会做坏事( NG )。
既然一个人要么相信因果报应,要么不相信因果报应,那么事件 K 和 NK 的概率加起来就是 1 。因为我们把行为分为好的或坏的(我知道,那些数学家,…),事件的概率也加起来是 1。
如果有人相信因果报应,我认为可以有把握地假设,平均来说,他们做好事的次数比做坏事的次数多。我们用 P(G|K) 表示相信因果报应的人做好事的概率,用P(G | K)表示不相信因果报应的人做好事的概率。
因此,我们有以下相关概率的事件:
- 一个人相信因果报应的概率: P(K)
- 一个人不相信因果报应的概率: P(NK) = 1-P(K)
- 好行为的概率: P(G) 和
- 不良行为的概率: P(NG) = 1-P(G)
- 相信因果报应的人做好事的概率: P(G|K)
- 一个不相信因果报应的人做好事的概率: P(G|NK)
按我们的假设,相信因果报应的人平均表现更好, P(G|NK) < P(G|K) 。
我身上发生好事的概率有多大?
给定以上所有的概率(不要担心,我们很快会输入数字使其更清晰),我们如何计算P(G)——一个随机的人做一件好事的概率?
我们可以用“全概率法则”从条件概率中确定这个概率,这个法则直接来自条件概率的定义。
Definition of conditional probabilities.
那么总概率的定律由下式给出
Law of Total Probabilities for G and K. It follows from a direct calculation using the definition of conditional probabilities!
现在我们来修正一下 P(G|K)=0.9 和 P(G|NK)=0.5 。因此,我们可以根据给定的条件概率确定 P(G) 和 P(K) 如下
我们甚至可以画出最后一个公式的图表,在这里我们可以直接看到 P(G) 如何随着 P(K) 的变化而变化。在我们的线性方程中, P( G|NK) 是 y 轴交点,差 P(G|K)-P( G|NK) 是斜率。
对此我们该如何解读?
我们来解读一下这个。
想象一下汤姆,一个非常普通的人。他周围都是冷静的人,他们都相信好事会回到他们身边,他们中的大多数人都相信因果报应,即我们为 K 选择高概率,例如 P(K)=0.8 。
然后还有保罗。保罗的环境和汤姆的有点不同。保罗周围的人更喜欢自私,他们中很少有人相信因果报应,即我们为 K 选择低概率,例如 P(K)=0.2。
如果我们输入数字会发生什么?
在汤姆的案例中:
P(G) = 0.40.8 + 0.5 = 0.82*
汤姆遇到好事的概率是 0.82 或者 82%。
在保罗的例子中:
P(G) = 0.40.2 + 0.5 = 0.58*
保罗遇到好事的概率是 0.58%或 58%。
一般情况:
一般来说, P(K) 是一个概率,因此它总是取 0 到 1 之间的值。正如我们上面看到的,概率 P(G) 是一个线性依赖于 P(K)的函数。所以对于给定的概率P(G | K)**P(G | NK)】来说, P(G) 总是取 0.4 (if P(K)=0 )到 0.9 (if P(K)=1 )之间的值。我们在上图中也能看到这一点。
看到了吗?有区别。让你周围的人相信好的行为会——至少平均而言——带来更多好的行为并回到你身边是有意义的。因果报应是一个数字游戏,我选择相信它。
你甚至不需要数学来理解这一点。你也可以运用常识。
但是有了数学的支持,这个猜想变得更加美好,你不觉得吗?
为什么我选择 C 进行回溯测试
原文:https://towardsdatascience.com/why-i-chose-c-for-backtesting-a44ab2815cb5?source=collection_archive---------12-----------------------
构建日内回溯测试引擎之旅的教训
寻找最佳回溯测试方法的旅程
在过去的一年里,我一直在准备一个回溯测试引擎/框架来模拟衍生品市场的日内策略。
这个旅程包括不同的语言,几次迭代,小错误,大错误,大选择,“合资”和孤独的行走。从别人那里,我接受了伟大和可怕的建议。
虽然事后看来结果似乎显而易见,但事实是找到正确的方法是一个迭代过程。只是在尝试了很多东西和多次反复用真实的例子围绕这个问题之后,事情才变得明朗。
回测/模拟市场量化策略的需求和要求在某种程度上是不同的,而且,以我的拙见,它们与传统上在研究中心和大学进行的科学模拟方法有许多共同的根源。这是真的,至少对于我一直在研究的一系列问题来说是真的(量化交易行业真的很大,我绝对没有资格谈论所有的方法、策略和需求)。
我已经在几篇文章中介绍了这一旅程。从文章来看,最相关的应该是关于如何存储市场数据的文章和关于不同评估语言的文章。如果你觉得这篇文章有趣,你可能也会觉得那两篇文章有趣。
c 作为回溯测试语言
评估的语言包括 Python、Fortran、Julia 和 c。Julia 是最后一个评估的语言,我对它的潜力感到非常兴奋,但只要项目向前推进(回溯测试引擎的整个最新版本都是用 Julia 实现的),我就开始意识到这种语言有一些实际的局限性。
朱莉娅是一个有希望的发现。用 Python/Numpy/Pandas 的简单性提供 C 性能的信息非常吸引人。然而,随着我在这个项目上工作的时间越来越长,我很快意识到这种语言的某些方面并不那么直观,对于一个新手程序员来说,匹配 C 语言的性能并不容易。毫无疑问,它是一种杰出的编程语言,但是在深入研究了我正在处理的这类问题之后,我的结论是古老的 C 仍然是最好的选择。
Julia 提供了比 Python 更好的性能,但是开箱即用的速度很难与 C 或 Fortran 相媲美。速度是由编译语言提供的,但也需要某些领域的特定代码风格,这在语言的使用方式上造成了一些奇怪。这不是设计缺陷,而是试图将低级语言性能与高级语言相匹配的局限性,但这给人留下了这样的印象:虽然它不是一种复杂的语言,但需要一些经验才能掌握。可用的调试工具也没有您在更成熟的语言中发现的那些工具那么先进。
良好的 IDE 和简单的方法:成功的秘诀
我还发现,在回溯测试/模拟中真正重要的是一组例程/方法/函数和一个公共的数据仓库,以及适当的调试工具。
我再怎么强调拥有简单的方法和足够的调试工具作为在这种项目中取得成功的关键要素的重要性也不为过。这两个因素比实际的语言选择更重要。之所以需要一个合适的 IDE,是因为这些例程往往很小但很密集,而且有很深的算法性,所以很容易出错。如果没有合适的调试工具,项目很容易停滞。
A proper IDE is a key element while developing a backtesting/simulation engine. Methods tend to be concise but dense and highly algorithmic so proper debugging tools are more a need than a nice to have.
对一个合适的 IDE 的需求是我退回到 C 语言的主要原因之一——讽刺的是这是旅程的起点——但是这次是使用微软的工具。
有了更好的工具,我的背包里有了更多的经验,对问题和解决方案有了更简单的看法,C 被证明是一个更好的同事。使用 C 的要点是你需要恰当地处理项目的复杂性。如果项目太复杂,用 C 处理起来会很困难,很可能会停滞不前,但是如果你能从一个简化的角度处理问题和解决方案,C 是一个很好的伙伴。
另一个重要的教训是,我们总是倾向于把事情复杂化。几天前,一位一直在业内工作的同事在看到我正在进行的回溯测试的一些指标的截图后,与我分享了这一想法,他对引擎的速度和简单性感到惊讶。我意识到最后一次迭代的成功依赖于能够简化整个项目。
复杂性始终是一个问题。一些语言(高级语言)更能承受复杂性。他们只会让项目更加坎坷和漫长。但是在其他语言中——比如 C——复杂性肯定会扼杀任何成功的机会,因为语言的本质使得处理复杂的程序变得不可能。
On complexity of software, a great historical example is the IBM release of their OS/360 trying to work on all the IBM machines series for all kind of problems. The search for an all-purpose OS derived in millions of lines of assembly code and tens of thousands of bugs, requiring constant updates. The experiences of the project are incisively described by Frederick Brooks in his classic book “The mythical man-month”.
在旅程开始时,我们考虑为引擎提供无限的螺栓和按钮,能够处理许多配置。但是,这有意义吗?最后一次迭代非常简单,假设一个有见识的用户将在参数上设置合理的值,并且经常尝试默认值。按照这种方式,一个引擎的基本版本将只有 1000 或 2000 行代码——包括空白和注释——并且向他人解释和扩展将非常容易。如果你需要一些特定的东西,你总是有时间编写一个特定的例程来处理和。
使用简单库的方法(我在上一篇文章中已经提到并测试过)仍然是我发现的解决这个问题的最好方法。该库可以是动态链接库(DLL ),这意味着上层语言可以是更高级的语言(更适合于处理模拟的整个工作流程/图形输出)。如果你仍然想在这一层使用 C++,你可以很容易地做到这一点,但如果你觉得使用 Python、Java、C#或 Visual Basic 更好,DLL 将允许你这样做,同时让 C 来做困难的工作。
经过这几个月,我看到了一个模拟引擎,就像我看到了一个操作系统内核暴露的调用方法一样,因为量化交易中的回溯测试引擎与其他任何东西都更相似。
外卖
这种观点是主观的,但我真诚地认为这仍然是一种明智的意见。这段经历包括良好的编程背景、三年的交易策略研究和一整年的编码和测试解决方案。虽然一个经验丰富的行业专家肯定会有更多的经验,但至少要达到一些有效的点仍然需要一定量的有价值的努力。
我也总是试图在为数不多的机会中,与在这个行业有经验的人交谈,以收集尽可能多的知识。在我看来,这极大地推动了问题的解决。我认为,如果没有这些小的投入,我仍然会从错误的角度处理问题。
还值得一提的是,方法在很大程度上取决于需求。处理日常数据和为 HFT 制定三级市场数据是不一样的,需求和解决方案是不同的。
既然已经做出了适当的免责声明,我们可以回顾一下要点:
- 不干涉具有回溯测试功能的图表解决方案(Metatrader/Pro Real Time/…)。正如一位负责量化基金的同事曾经告诉我的那样:业内没人用。现在我清楚地明白了为什么。
- 专用的回溯测试/模拟软件包(如 Amibroker)可能会加快您处理问题的速度,但它们执行模拟的方式过于狭窄,并且中等复杂性策略的学习曲线很陡。它们只是比绘制解决方案更好的工具。站在他们这边,我也会说,量化领域也有认真的人在用,但据我所知,他们一般都是用日常数据做的。我个人的观点是:也不要碰这些,尤其是如果你想测试更奇特的策略或者当天交易。
- 开发定制的大型通用平台/框架。这是行不通的,它很耗时,而且你最终会做一个不太理想的工具,因为它试图太多才多艺。我们一直在做的一个任务是一个通用的 Java 回溯测试平台,9 个月后我意识到这个项目进展得不够快,没有很好地解决特定的需求;而更加有限和简陋的 C/Python 辅助项目已经展示了有希望的结果和研究道路。我们从那个项目中挑选出可重用的概念和代码块,将它们用作辅助工具。较小的项目容易向前推进。
- 使用 Jupyter 笔记本开发定制的全 Python 解决方案。这是可行的,但是它将与您正在测试的特定策略相关联。您得到了结果,但是重用组件很难,调试体验很差,并且随着仿真变得越来越复杂,处理笔记本变得很困难。无论我多么喜欢 Python 的简单性和多功能性,我不知何故开始认为 Python 生态系统可能有点被高估了。
- 使用模拟中常用的构建模块开发一个小型库/引擎。在我看来,这是正确的做法。您将最终得到一组通用的可重用组件。虽然只要您测试更多的策略,您可能就需要用更多的方法来扩展,但是这是一种获得快速成功的方式,同时在未来工作的时间方面也是一种合理的投资。在开发这个的时候,记得缩小库的范围,避免通用的目标。这意味着,如果你正在测试日内策略,集中精力。如果你的数据是 1 分钟,甚至不要考虑当你必须模拟分笔成交点数据时会发生什么,或者开始想你可能也想看周趋势。如果你需要,做另一个引擎并合并结果。
- 语言很重要。C/C++是我最终选择的模拟核心。我喜欢所有其他语言的各个方面,但我无法获得与 C 语言相同的性能。Julia 很有前途,如果正确编码,它可能可以与 C 语言的性能相媲美,但对于一般的编码人员来说——我是一个相当一般的编码人员——编写快速的 C 代码要容易得多。c 语言学习起来也更快,因为它是一种低级语言,有好得多的 IDE 和调试工具。在这一点上要明确:Fortran、Julia 和 Python 都是杰出的语言。Python 可以是日内数据的一个很好的选择,但是在我看来,它在日内的表现并不好。Fortran 真的很快,它比 C 语言更容易学习和阅读,但据我所知,这种语言没有很好的免费编译器/IDE,它在业界的使用也不像 C 语言那样广泛。Julia 在开始时光芒四射,但当我推进这个项目时,我并不太喜欢。调试再次变得困难,语言的某些方面也不是那么直观。
- IDE 和调试甚至比语言更重要。不考虑低级调试(gdb 等。)或没有合适 IDE 的语言。我花了很多时间在 BSD 工作站上工作,最后我把所有的开发都转移到了 Windows 上,因为用 Visual Studio 开发 C/C++比其他任何东西都要容易得多。一旦完成,您可以随时将代码移植到您想要的任何平台上。
- 使用两种语言:一种在工作流/表示层,另一种用于模拟(通常是 C 语言,因为它作为动态或静态库编译起来既快又容易)是一个不错的选择。这使两层之间的数据事务有点复杂,但您可以两全其美,实现简单而有效的封装(将整个引擎封装在上层使用的单个实体中)。在我看来,进一步封装不会带来任何实际的好处。
- 如果你使用 c,就不需要数据库了。我从一开始就致力于拥有一个数据库,但目前我没有使用任何数据库。我的下一个项目涉及处理分笔成交点数据,我肯定也不会考虑它(即使存储和处理分笔成交点数据要复杂得多)。尽管它们可能很有吸引力,但我对 KDB+或任何其他技术都不感兴趣,除非有人向我探究使用它们的真正好处(我指的是实际的项目好处,而不是技术优点或计算机科学抽象)。我用得越多,就越喜欢使用旧的大型机批处理方法:在模拟开始之前加载数据,用内存中的数据进行模拟,然后得到结果。如今,一台廉价的二手台式电脑的计算能力超过了几台 80 年代克雷超级计算机的总和:你只需要有效地利用上帝赋予你的巨大计算能力。
- 不要拘泥于数据科学的趋势。笔记本电脑、分布式并行框架、云 API 和所有这些晦涩难懂的东西,它们都是一流的,我确信它们在行业中有着当之无愧的地位,但它们的学习曲线和计算开销往往是一种负担,而不是帮助。需要明确的是:一个简单的日内引擎可以完美地用 ANSI C89 编写,而且会尽可能快。它将易于编写、理解和扩展,并且不需要了解十种不同 API 和技术的资源。行业和媒体充斥着各种框架、层和中间件,虽然有时你真的需要它们,但很多时候它们的使用更多地是由趋势而不是实际需求驱动的,它们最终只会带来额外的开销、陡峭的学习曲线和痛苦。
- 分而治之。需要图表解决方案来验证策略吗?为该任务编写一个小型辅助工具。需要加载自定义数据?编写一个侧程序来转换特定数据。这种编写链接在一起的小程序的概念肯定不是新的,它在 UNIX 世界中一直被强调,但是它有时被遗忘。你的任务/计划越小,你就越有机会有效地完成它们。编写小型的合作程序比构建一个单一的应用程序要容易得多。使用 DLL 作为引擎的概念简化了这项任务。
最后,反复出现的概念“少即是多“”和“保持简单”仍然有效。只要想一想最简单的可重复使用的解决方案,一旦你把它变得简单了,再想想如何让它变得更简单。如果某个东西不是明确可重用的,不要想如何抽象它以使其可重用,只需编写一个辅助工具或方法来处理特定的需求。这种范式适用于技术领域的大多数情况:永远不要害怕做得那么简单。
我为什么编码&咖啡
原文:https://towardsdatascience.com/why-i-code-coffee-e2237ec709bc?source=collection_archive---------26-----------------------
入门
关于 code & coffee 事件价值的几点思考?
我与 tech meetup 活动的历史始于威斯康星州麦迪逊,当时我正在攻读博士学位(于 2017 年 5 月完成)。当时,麦迪逊没有一个让技术人员为单个项目工作的聚会。相反,它们的结构更像是午餐学习活动。一个(或两个)演示者将就一个主题发言 20-40 分钟。主题和演讲者都提前做了广告。还有时间进行问答。总的来说,我从这些小规模的教育会议中学到了很多,我很怀念那些会议。
然后,我搬到了 DC 的华盛顿州(2018 年 7 月搬家)。在这个地区,每周至少有三次代码和咖啡聚会。北弗吉尼亚(NOVA)有一个, DC 有一个,亚历山大有一个。这些社区在全球并不罕见。
这个周末我去了 NOVA 的,那是在 CustomInk.com非常酷的办公室举办的。我也去了 DC,但是到了那里发现因为下雪取消了。我发了很多关于参加这些代码&咖啡聚会的微博。一位技术人员 Liz Gross 博士问我是不是整个周末都在编程?我回答道:
以下是我认为代码和咖啡活动有价值的更多原因
Folks working away at NOVACode & Coffee. Image Credit: “Author’s Photo” — More on attributions.
非常适合网络
为了最大限度地利用 Code & Coffee,建立关系网很重要。每个人做这件事的方式不同,没有对错之分。对我来说,我尽最大努力通过 LinkedIn 或 Twitter 与我遇到和聊天的人联系。
让你的工作不那么孤独
回想读研时,我们有这些“写作小组”最好的写作小组是每周一次的,并且包括一个每周都在那里的核心小组。最好的写作小组以一个简短的讨论开始,每个人分享他们当天想要做的事情和他们的目标。然后每个人都开始工作。同样,Code & Coffee 活动以介绍开始,每个人都分享他们的谋生之道,他们当天的工作,他们可能需要帮助的事情(如果有的话),以及他们可以帮助别人的事情(如果有的话)。
寻求帮助的地方
每次去一个码&咖,我都不求也不需要帮助。但是,当我需要帮助的时候,我知道我可以在那里找到它。我从未对这种帮助的质量失望过。
一个练习帮助他人的地方
自从去了 Code & Coffee 之后,我已经被要求过几次帮助了。有时候我觉得我有什么可以贡献的,有时候我却被难住了。但是,有机会分享别人的奋斗通常是一种受欢迎的从我自己的奋斗中转移注意力的方式。它提醒我们每个人都有起点。我不确定我还能想出另一个既令人谦卑又鼓舞人心的经历。
非常有助于提高生产力
我心虚的秘密是,有时我不从事涉及编码的项目。或者,也许我会从事一个曾经涉及到编码,或者最终会涉及到编码,但在那个时候不需要编码的项目。这意味着我可能正在研读方法,可能正在勾画概念框架,或者可能正在参加 Udemy/Lynda/Udacity(或类似的)课程。我甚至可能只是利用这段时间来收发电子邮件。总之,这是一个受保护的时间窗口,我可以用它来提高效率。
Heading into Saturday’s NOVA Code & Coffee hosted by CustomInk.com. Image Credit: “Author’s Photo” — More on attributions.
结论
我推荐《代码与咖啡》,给那些有兴趣结识其他技术人员的人,在技术项目上获得帮助的人,在技术项目上帮助其他人的人,或者有保护时间在你脑海中酝酿的任何个人项目上取得进展的人。
[## 加入我的介绍链接媒体-亚当罗斯纳尔逊
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
adamrossnelson.medium.com](https://adamrossnelson.medium.com/membership)
感谢阅读
把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelsonLinkedIn:亚当·罗斯·尼尔森在推特和脸书:亚当·罗斯·尼尔森在脸书。
为什么我决定申请研究生院学习人工智能
原文:https://towardsdatascience.com/why-i-decided-to-apply-to-grad-schools-to-study-ai-261db71849d3?source=collection_archive---------38-----------------------
Never thought I would go back to school — but I want to now.
我的一个梦想是帮助创造一个真正帮助人们实现更健康、更充实的生活方式的社会。
我认为,实现这一目标的最佳方式是使用普遍基本收入或其变体,即负所得税。这是一项政策,每个人每个月都得到一定数量的钱,没有任何问题。
如果每个人都收到,比方说,3000 美元/月,没有人会被困在自己讨厌的工作中,也没有人会被迫每周工作 80 小时来维持生计。这将使人们摆脱贫困,让他们自由地在他们真正关心的事情上花更多的时间,这将创造一个更具创造力的社会。
目前,实现这一目标的最大障碍是我们的生产力不够。例如,为了让我们能够给美国的每个人每月 3000 美元,我们需要比目前的水平至少高 3 倍。
我认为,实现如此大的生产率增长的唯一途径是通过使用人工智能和自动化。特别是,我想帮助推动人工智能的发展,如强化学习,以及它在机器人技术中的应用。
在我的职业生涯中,我预见到我能为这一发展做出贡献的三种主要方式。
- 通过制作更多关于编程和人工智能的教育视频和播客。我将通过 CS Dojo(我的 YouTube 频道)向数据科学分发它们。
- 通过创建或加入一家在现实世界中应用人工智能和机器人技术最新进展的初创公司。
- 通过制作一个电视节目来教育公众关于人工智能的知识——例如,关于网飞。
How do you get a Netflix show? Well, you can just publish an international bestseller like Marie Kondo did 😛
不管我是否能进入我申请的任何一所研究生院——加州大学伯克利分校和斯坦福大学——我都会追求这些目标。
然而,在这些学校之一接受正规的大学教育,我相信我能够更快地实现这些目标。
我认为有 3 个因素可以帮助我实现这些目标:
- 与其他学生、研究人员和教授的联系
- 参与最新的人工智能/强化学习研究
- 地点——硅谷仍然是世界上为创业公司寻找投资者和联合创始人的最佳地点之一。另外,网飞也在加州。
在离开学校 4 年后,重返校园对我来说将是一个重大的决定,但对我来说这是一个正确的时机。
这将是我一生中最大的时间和金钱投资之一,但我相信我能够 100 倍地收回投资——无论是从我能够为社会做出的贡献来看,还是从我希望在那里开展的有趣项目和研究来看。
为什么我决定成为一名数据科学家
原文:https://towardsdatascience.com/why-i-decided-to-become-a-data-scientist-eec6f8cd435e?source=collection_archive---------19-----------------------
Photo by Justin Luebke on Unsplash
数据科学
前 SAP 顾问转变为数据科学家的故事
一年前,如果你问我数据科学的定义,我的回答会简单到“将数据用于科学目的”。
那时,我在为企业客户提供企业咨询,用 SAP 供应链产品解决他们的 ERP 问题。我已经在这个世界上呆了 4 年,最近被提升为高级顾问。
花哨的头衔或晋升从来都不是我优先考虑的事情,我也对在豪华办公室工作不感兴趣。我成为一名顾问,因为我喜欢站在探索的最前沿,同时应用这些知识来解决现实世界的问题。
如果作品对我们的世界有任何积极的影响,那也是锦上添花。
最近,我既没有学习也没有观察到任何影响,保持我的动力变得越来越难。
"疯狂的定义是一遍又一遍地做同样的事情,却期待不同的结果."
阿尔伯特·爱因斯坦(或其他人)
我觉得也许是时候改变一下了。
我搬到了一个我渴望已久的地方,开始了这种改变。一个叫做卡斯的小镇,在那里群山与地中海交汇,庇护着一个完美的家,在这里我可以平等地滋养我的身心。
然后,我开始探索我可以工作的其他潜在领域,重温我大学时代的经历,回忆我曾经热爱的事情。
我学习工业工程是因为我对应用数学充满热情,并且知道这门学科会广泛使用数学来解决现实世界的商业和工业挑战。
我非常喜欢像概率和统计这样的主题,以至于我甚至接受了一份教学助理的工作,专注于随机模型中的最优化问题。
我天生非常好奇,经常发现自己在分析周围的一切。将看似平凡的情况看作一堆输入、输出及其清晰的联系,这让我觉得自己很有创造力,而不是其他更传统的创造力定义。当我看到看不见的东西时,我的眼睛会因喜悦和兴奋而睁大。
我决定通过分析我现有的技能、工作经验以及乐趣和快乐的想法,好好利用这些新的启示;创业生态系统是大多数令人兴奋的创新的家园,似乎是一个很好的线索。
与此同时,我父亲让我给他的小酿酒公司建一个网站。作为好奇的我,我决定探索一些编码技巧,而不是使用现成的网站建设者。
也许是因为轻微的拖延症,或者我父亲不太需要这个网站,我发现自己在阅读 Codecademy paths,并立即迷上了数据科学。
随着学习材料和练习的进展,我清楚地知道自己想做什么。这是为我勾选了所有框的字段。此外,对于一个好奇的人来说,这是一个有无限深度的宝库!
在我写这篇自我反思的时候,我是一个自学成才的数据科学家,已经走了 6 个月了!
我已经感到富有成效,特别是我正在与慷慨地帮助我成长的同一个社区分享和贡献。
我觉得我在 6 个月的学习、成长、写作和社区参与中所达到的范围和影响已经超越了我在 SAP 咨询职业生涯中 4 年的时间。
当然,由于数据科学社区和创业生态系统的无国界性质,与被拖到世界各地的低效会议室相比,在我喜欢的地方工作会有所帮助。
My office 🌞photo from November 13, 2019
是的,我确实听说过这个流行的短语;“21 世纪最性感的工作”在我踏上旅程后不久。如果我今天写这篇文章,我可能会把它命名为“21 世纪最有创意、最有影响力、最性感的工作”。
感谢您阅读我的故事,我希望在回复中或在 Twitter 上听到您的故事以及成为数据科学家的动机!
为什么我把我书的所有收入都捐给了编程女孩
原文:https://towardsdatascience.com/why-i-donate-all-of-my-books-proceeds-to-girls-who-code-b9654e4379bd?source=collection_archive---------41-----------------------
Grace Hopper, Ph.D. (Vassar Archives)
为缩小科技领域的性别差距尽绵薄之力
我的同学中有几个(如果有的话)分享了我对展示在我们大学科学中心的 Mark I 计算机的迷恋。很难责怪他们。Mark I 高达 8 英尺,充满了旋转开关、晶体二极管和缠绕的电线,看起来像是科幻电影中的道具,而不是美国海军曾经使用的计算机。在 20 世纪 40 年代的全盛时期,Mark I 是地球上最强大的超级计算机之一;今天,我们放在口袋里的智能手机会让它相形见绌。然而,如果没有早期的大型机,如 Mark I 或操作它们的计算机科学先驱,智能手机和支持智能手机的操作系统都是不可能的。这些先驱中有许多是女性。
在成为电脑呆子之前,我是个历史迷。早期的计算机,如 Mark I,令我着迷,因为它们赋予了求知者超乎想象的能力。他们处理了帮助制造原子弹和将人类推向月球的复杂计算。虽然事后看来显而易见,但可编程机器的无限潜力必须由有事业心的个人来认识和利用,他们超越高耸的机器,看到比计算器更伟大的东西。这些技术先驱的才华、毅力和成就将通用计算的承诺变成了现实。这些人是我追求计算机科学的灵感来源。
历史上第一位编码员阿达·洛芙莱斯是一位女性。在与英国数学家查尔斯·巴贝奇的通信中,洛夫莱斯认识到了他发明的可编程机器——分析引擎的巨大潜力,并设计了被认为是第一个计算机算法。可悲的是,巴贝奇的发明从未完成,世界不得不等了将近一个世纪才出现类似他和洛夫莱斯设想的机器。其中有世界上第一台通用计算机 Mark I。
The Harvard Mark I, 1943 (Encyclopædia Britannica/IBM Archives)
受巴贝奇分析引擎的启发,Mark I 结合了机械和电子元件。它的建造花了五年多的时间,当它在 1944 年被交付给哈佛大学时,这台计算机被投入了战争服务。格蕾丝·赫柏是一名数学博士,曾加入美国海军,被任命为马克一世的首批编码员之一。霍普博士和她的团队使用 Mark I 来帮助广泛的军事项目,从鱼雷设计到内爆计算,这些都有助于原子弹的开发。Mark I——人类最具变革性的创造之一,也是当今数字文艺复兴的先驱——的目的是协助毁灭,这是一个时代的悲剧性象征。幸运的是,没过多久,战争就结束了,可编程机器开始进入民用领域。霍普博士帮助引领了这一转变。
战后,霍普博士继续在计算机领域发挥核心作用。在 20 世纪 50 年代,她创造了软件工程中最重要的创新之一:编译器。编译器是一种将人类编写的代码转换成机器指令的中间程序,它使得用简单的英语而不是机器代码编写软件成为可能。Hopper 博士还参与开发了一种最受欢迎的早期编程语言,COBOL,⁴,这种语言至今仍在生产系统中使用。
计算机的历史上充满了开拓性的女性,她们的辛勤工作和才华帮助推动人类进入数字时代。世界上第一台全数字通用计算机 ENIAC 的编程任务是由一个全女性团队完成的:凯瑟琳·麦纽提、让·詹宁斯、贝蒂·斯奈德、玛琳·韦斯科夫、弗朗西斯·比拉斯和露丝·利奇特曼。⁵与 Mark I 等机电前身不同,ENIAC 是全电子的。这使得它达到了以前无法想象的计算速度。Mark I 每秒只能执行三条命令;ENIAC 可以在这段时间内完成五千多项任务。⁶这对于美国战争机器日益增长的计算需求来说是完美的,但也意味着旧的编码方式已经过时。必须发明新的范例来驾驭新硬件的能力和复杂性。面对挑战,McNulty 和她的同事们开发了子程序和嵌套等技术,并将 ENIAC 变成了存储程序计算机(一种存储、修改和执行来自电子 memory),⁷的指令的计算机,为现代软件工程铺平了道路。
Mary Allen Wilkes (New York Times/Joseph C. Towler, Jr.)
随着计算机不再是破坏的工具并进入我们的家庭,女性程序员仍然站在软件的前沿。20 世纪 60 年代,Mary Allen Wilkes 负责为 LINC 开发操作系统,由于其相对较小的尺寸,许多人认为这是第一台个人电脑。不像它那巨大的、数吨重的前身,LINC 可以装进一个实验室或办公室。威尔克斯被允许把这台机器带回家,使她成为第一个使用个人电脑的人。⁸林肯的革命性不仅仅在于它的尺寸。配备了屏幕和键盘,它可以直接和交互地编程——消除了对穿孔卡和打印输出的需要,而穿孔卡和打印输出是以前计算机的支柱。⁹同样具有革命性的是威尔克斯在为 LINC 设计软件时开发的编程创新,这为今天从 Windows 到 iOS 的所有操作系统奠定了基础。
女性程序员在美国宇航局的太空计划中也发挥了重要作用。自学成才的 FORTRAN 程序员多萝西·沃恩(Dorothy Vaughan)和她的女同事们完成了许多计算,帮助第一个美国人进入地球轨道,并确保他安全返回。⁰另一位女性计算机科学家 Margaret Hamilton 领导了一个工程团队,他们的软件为阿波罗 11 号登月任务提供了动力。事实上,尼尔·阿姆斯特朗的“一个人的一小步,人类的一大步”在很大程度上是由一位女性的聪明才智促成的。这些先驱女性的贡献很少被庆祝,甚至被遗忘。
女性在软件工程早期发挥的突出作用与今天计算机科学教室和工作场所的构成形成了鲜明的对比。形势似乎在恶化。根据《纽约时报》引用的美国政府统计数据,1984 年超过 37%的计算机科学毕业生是女性;到 2010 年,这一比例降至 18%以下。
女性计算机科学家的突破性成就足以证明,计算机领域的成功是不分性别的。
性别失衡显然不是因为缺乏天生的能力。女性计算机科学家的突破性成就足以证明,计算机领域的成功是不分性别的。
为了表彰上面讨论的编程先驱们所取得的成就,我很荣幸能够支持非营利组织“编程女孩”。作为一个对技术着迷的年轻历史爱好者,我崇拜女性编程先驱;是他们激励我去攻读计算机科学学位。这是一种特权,可以将它传递给未来的女性技术领导者。
参考
- 1 C. Thompson,编码中的女性秘史 (2019),《纽约时报》
- 2未知,马克 I 型计算机:它是做什么用的?(未注明),历史科学仪器集
- 3未知,马克 I 电脑:船员(未注明),历史科学仪器的集合
- [4]同上。
- [5] C .汤普森,编码中的女性秘史 (2019),《纽约时报》
- [6]沃尔特·伊萨克森,格蕾丝·赫柏,计算先锋 (2014),哈佛公报
- [7] J. Lightfoot,介绍 ENIAC Six (2016),原子对象博客
- [8] C. Thompson,编码中的女性秘史 (2019),纽约时报
- 9 同上。
- [10] E. Howell,NASA 真实“隐藏人物”的故事 (2017),科学美国人
- [11] A .乔治,玛格丽特·哈米尔顿带领美国宇航局软件团队将宇航员送上月球 (2019),史密森尼
- [12] C .汤普森,编码中的女性秘史 (2019),《纽约时报》
为什么我从主管跳到工程师
原文:https://towardsdatascience.com/why-i-jumped-from-executive-to-engineer-fd0850a1e6c4?source=collection_archive---------13-----------------------
职业转型
一位高管离开管理岗位的三个原因
Photo by Victor Rodriguez on Unsplash
“我注意到,即使是那些断言一切都是注定的,我们无法改变的人,在过马路之前也仍然会朝两边看”
― 斯蒂芬·霍金, 黑洞和婴儿宇宙
还记得试图找到你的第一份工作吗?每个招聘人员都想要经验。作为一个入门级的申请人,你没有任何。最终,有人可能会根据你的面试方式、你的成绩,或者他们对你这个第一次找工作的人的一些无形品质,给你一个机会。
对包括我在内的许多人来说,偶然事件对职业轨迹有着巨大的影响。同行评议研究的证据支持了这一点。我的幸运是去了一家初创公司工作,这家公司几乎所有的业务职能都需要帮助。这是我在工作中学习的机会,也是我找到自己专长的机会,并建立一个专注的职业生涯。
日常工作中的困难和分心意味着我花了很多年才真正对自己诚实,知道自己想做什么,以及为此需要承担的风险。我把自己的经历总结为改变职业轨迹的三个原因,以及我自己参与创业的机会如何帮助我更好地了解自己的优势和劣势。
#1:我知道我长大后想做什么
“怎么这么快就这么晚了?”
― 苏斯博士
2009 年,当我在圣地亚哥州立大学完成 MBA 学业时,我对自己接下来想做什么只有一个模糊的想法。我已经在中国生活和工作了相当长的时间,包括在中山大学商学院的一个学期,所以我认为“国际商务”听起来是下一步的好选择。相反,我在圣地亚哥地区的一家初创药房自动化公司做营销实习生。
The author circa 2010 experiencing one of many more deer-in-headlights moments to come
我的角色很快演变成了公司瑞士军刀的全职职位。一个早期项目是管理我们的机器人库存系统的第一次试点安装。这意味着每周 7 天,每天 10-12 小时在现场管理客户关系,记录测试结果,进行特别数据分析,并即时学习 SQL。我以前从未接触过技术,为了能够胜任我的工作,我不得不几乎在一夜之间掌握新的技能和工具。
在接下来的十年里,我开始了我们最初的战略营销努力,并自己建立了营销技术部门,担任产品经理,建立了我们的 SaaS 基础设施以支持运营,担任技术销售主管,经常进行临时数据分析,编写基于 SQL 的解决方案,雇用并建立技术实施和支持团队,管理 IT 项目,并管理重要客户关系。我也越来越多地将越来越多的时间投入到个人贡献者项目中,主要是因为有些事情我想完成,但我们在开发端没有足够的带宽。所以我不断学习越来越多的技术技能,尤其是在数据科学和软件工程方面。我喜欢这一切,尤其是我能迅速将所学付诸实践的方式。
我最终被提升为执行副总裁,我们的增长在去年年底开始加速。后来我决定辞职。
#2:盘子太多,转不过来
Photo by nikko macaspac on Unsplash | Also the author in his head about a year ago
“光忙是不够的;蚂蚁也是。问题是:我们在忙什么?”
― 亨利·大卫·梭罗
在很长一段时间里,无论我的头衔是什么都不重要,或者说对我的日常工作没有任何影响。任何曾经在典型的创业环境中工作过的人可能都有同感。如果我是桌椅装潢公司的 SVP,我还会在路上参加贸易展览,从事分析项目,构建网络应用程序,管理复杂的技术实施项目,招聘和解雇,等等。我们总是缺乏支持人员,没有专门的人力资源或 IT 资源。对于小型企业来说,这没什么大不了的,但随着企业的发展和对标准化的需求,这变得至关重要。
对我来说,我在 2018 年达到了一个点,我在组织任务和管理上投入了一个常规的工作周,然后在此基础上又投入了一个工作周,以跟上个人贡献者项目。我们既没有预算,也没有内在的倾向去用额外的资源来支持我个人所做的事情。我发现自己有了一份全职工作和一个爱好,这也是我工作的一部分。从长远来看,这是完全不可持续的。
我面临的管理或处理工作的巨大工作量和复杂性引发了其他问题。努力工作对我来说是内在的,但我无法在任何一项任务上投入足够的时间,我开始担心我无法达到自己的(公认的高)标准。
#3:渴望和我所在领域的工程师一起工作
"聪明人工作的地方,门都是开着的."―史蒂夫·沃兹尼亚克
我也越来越多地发现自己沉浸在分析和数据科学中,无论是在工作中还是在我自学的业余时间。我喜欢自学新技能,我花了几个小时在数据营学习模块,在代码战做形。但在我的公司里,没有其他人有类似的兴趣或技能,当我描述当前的项目或征求反馈时,往往会遇到茫然的目光。这导致了另一个问题,那就是我一直觉得自己被低估了,我和其他高层领导一起工作时,他们无法真正评估我的表现,因为他们没有具体的技术能力来这样做。这不是他们的错,甚至不是他们的缺点,而是企业的具体优先事项和有限资源分配的问题。
In the Netherlands after jumping ship. Life is better.
我想去一个真正重视应用数据科学、数据治理的地方,并积极寻求基于商业分析的深思熟虑的应用来推动价值。当一家荷兰 IT 和分析咨询公司的管理合伙人通过 LinkedIn 联系我时,我已经准备好做出这一飞跃。我不在乎头衔,但我确实想去一个有志同道合的专业人士的地方,我可以向他们学习,当分析项目正确完成时,他们对数据的价值有着和我一样的感受。
作为一名数据工程师和 scrum master 加入一家咨询公司,对于我自己的职业抱负和个人成长的渴望来说绝对是正确的。我对自己的决定不后悔。最后,最困难的部分是鼓起勇气离开我生活了 10 年的公司,冒险去接触我职业生涯中真正想要的东西。
便利的(付费)数据科学/编码资源
1。
几年前,我注册了他们的付费服务,再也没有回头。这是保持技能最新并接触到数据科学方法的绝佳方式,无论是在 R 还是 Python 中。
2.代码学院
没有什么可以替代实践经验,但如果你想提高技能,并在数据科学或软件开发方面学习新的技能,这是一个非常棒的服务。
3.消防水带项目
我觉得我需要一种更身临其境的体验来将我学习的所有东西结合起来,所以我在大约一年半前报名参加了消防软管项目的训练营。他们给我找了一个编码导师,我花了将近一年的时间在晚上和周末学习他们的课程。
肯·马扎卡是它背后的家伙,他的方法真的为我工作。
为什么我从 Google Colab 和 Amazon SageMaker 迁移到 Saturn Cloud
原文:https://towardsdatascience.com/why-i-moved-from-google-colab-and-amazon-sagemaker-to-saturn-cloud-675f0a51ece1?source=collection_archive---------1-----------------------
当谈到科学实验和合作时,人们往往需要同样的东西:一个易于使用的界面来破解和优化他们的算法,一个数据输入输出系统,以及对他们首选的编程语言的支持。随着 2011 年 Jupyter 的发布,这些问题的自然解决方案出现了,这是一个极其通用的 web 应用程序,允许您创建一个笔记本文件,用作交互式代码界面、数据可视化工具和 markdown 编辑器。
Jupyter 云解决方案
与他人分享静态 Jupyter 笔记本的方式有很多,比如把它发布在 GitHub 上或者分享一个 nbviewer 链接。但是,如果收件人已经安装了 Jupyter 笔记本环境,则只能与笔记本文件进行交互。但是如果你想分享一个不需要任何安装的全交互 Jupyter 笔记本呢?或者,您想创建自己的 Jupyter 笔记本,而不在本地计算机上安装任何东西?
Jupyter 笔记本已经成为数据科学家之间机器学习建模和分析的标准门户,这一认识推动了软件产品的激增,这些产品被称为“云上的 Jupyter 笔记本(加上新东西!)".仅凭记忆,这里有几个公司产品和创业产品完全或部分符合这一描述:Kaggle kernel, Google Colab , AWS SageMaker , Google Cloud Datalab , Domino Data Lab , DataBrick Notebooks ,Azure Notebooks…名单还在继续。根据我与数据科学新手的交谈,两个最受欢迎的 Jypyter 云平台似乎是 Google Colab 和 Amazon SageMaker。
谷歌 Colab
Google Colab 是从提高你的 Python 编码技能到使用深度学习库的理想选择,比如 PyTorch 、 Keras 、 TensorFlow 和 OpenCV 。你可以在 Colab 中创建笔记本,上传笔记本,存储笔记本,共享笔记本,安装你的 Google Drive 并使用你存储在那里的任何东西,导入你最喜欢的目录,上传你的个人 Jupyter 笔记本,直接从 GitHub 上传笔记本,上传 Kaggle 文件,下载你的笔记本,以及做你想做的任何事情。
从视觉上看,Colab 界面与 Jupyter 界面非常相似。然而,在 Colab 中工作实际上与在 Jupyter 笔记本中工作感觉非常不同:
- 大多数菜单项是不同的。
- Colab 改变了一些标准术语(“运行时”代替了“内核”,“文本单元”代替了“标记单元”,等等。)
- Colab 发明了一些你必须理解的新概念,比如“游乐场模式”。
- Colab 中的命令模式和编辑模式与 Jupyter 中的不同。
已经有很多关于 Google Colab 故障诊断的文章,所以在不深入这个兔子洞的情况下,这里有一些不太理想的东西。因为 Colab 菜单栏缺少一些项目,而工具栏保持得非常简单,所以有些动作只能使用键盘快捷键来完成。您不能将笔记本下载为其他有用的格式,如 HTML 网页或 Markdown 文件(尽管您可以将其下载为 Python 脚本)。您可以上传数据集以在 Colab 笔记本中使用,但一旦您结束会话,该数据集将被自动删除。
就公开共享的能力而言,如果您选择将您的笔记本公开,并且您共享了链接,任何人都可以在不创建 Google 帐户的情况下访问它,并且任何拥有 Google 帐户的人都可以将其复制到自己的帐户中。此外,您可以授权 Colab 将您的笔记本保存到 GitHub 或 Gist,然后从那里共享它。
在协作能力方面,你可以保持笔记本的私密性,但邀请特定的人查看或编辑它(使用谷歌熟悉的共享界面)。您和您的合作者可以编辑笔记本,查看彼此的更改,以及为彼此添加评论(类似于 Google Docs)。但是,您的协作者无法实时看到您的编辑内容(最多会有 30 秒的延迟),如果多人同时编辑笔记本,您的编辑内容可能会丢失。此外,您实际上并没有与您的合作者共享您的环境(意味着没有同步已经运行的代码),这极大地限制了合作功能的有用性。
Colab 确实可以让你访问一个 GPU 或者一个 TPU 。否则,Google 不会为他们的环境提供任何规范。如果你将 Colab 连接到 Google Drive,那将为你提供高达 15 GB 的磁盘空间来存储你的数据集。会话将在 60 分钟不活动后关闭,尽管它们最多可以运行 12 个小时。
Colab 的最大优势在于它很容易上手,因为大多数人已经有了一个谷歌帐户,而且它很容易共享笔记本,因为共享功能与谷歌文档一样。然而,繁琐的键盘快捷键和处理数据集的困难是显著的缺点。在同一笔记本上协作的能力是有用的;但是没那么有用,因为你们没有共享一个环境,也不能实时协作。
亚马逊 SageMaker
Amazon SageMaker 是一种完全托管的机器学习服务,可以帮助数据科学家和开发人员快速轻松地构建&训练模型,然后直接将其部署到生产就绪的托管环境中。它提供了一个集成的 Jupyter 创作笔记本实例,可以方便地访问您的数据集进行探索/分析,因此您不必管理服务器。它还提供了常见的 ML 算法,这些算法经过优化,可以在分布式环境中针对非常大的数据高效运行。凭借对自带算法和框架的本机支持,Amazon SageMaker 提供了灵活的分布式培训选项,可根据您的特定工作流程进行调整。
首先,您启动一个所谓的“笔记本实例,它将托管 Jupyter 笔记本应用程序本身、所有笔记本、辅助脚本和其他文件。不需要连接到那个实例(实际上您不能,即使想要)或者以任何方式设置它。一切都已经准备好了,你可以创建一个新的笔记本,并使用它来收集和准备一些数据,定义一个模型,并开始学习过程。所有配置、计算实例供应、数据移动等。会被一个函数调用触发。这个漂亮的过程决定了定义模型和组织数据的某种方法。
SageMaker 是建立在其他 AWS 服务之上的。笔记本、培训和部署机器只是运行特定 Amazon 机器映像(AMI)的普通 EC2 实例。和数据(还有结果、检查点、日志等。)存储在 S3 对象存储器中。如果您正在处理图像、视频或任何大型数据集,这可能会带来麻烦。事实是,你必须把你所有的数据上传到 S3。当您配置培训时,您告诉 SageMaker 在哪里可以找到您的数据。然后,在开始训练之前,SageMaker 自动将数据从 S3 下载到每个训练实例中。每次都是。作为参考,下载 100Gb 的图像大约需要 20 分钟。这意味着在训练开始前你至少要等 25 分钟。祝你调试模型好运!另一方面,当所有的前期试验都在别处完成,你的模型已经打磨好的时候,培训体验就非常顺利了。只需将您的数据上传到 S3,并从那里获得中期结果。
另一个需要考虑的方面是定价。笔记本实例可能非常便宜,尤其是在不需要预处理数据的时候。另一方面,训练实例可能很容易在你的口袋里烧一个洞。点击此处查看所有价格,以及 SageMaker 已经推出的地区列表。
介绍土星云
土星云是一个新的平台,为那些对建立基础设施不感兴趣,但更关心如何轻松进行数据科学的数据科学家提供服务。更具体地说,该平台帮助管理云中的 Python 环境。
注册帐户后,您可以开始使用免费层。在仪表板中,您可以通过选择磁盘空间和机器大小来为项目创建 Jupyter 笔记本。这些配置涵盖了许多实际数据科学项目的需求。此外,您可以为您的项目定义自动关闭持续时间,这将使您的项目不会因为不活动而关闭。
通过土星云共享笔记本极其容易。我之前做了一个探索 Instacart 市场篮子分析挑战的项目,你可以在这里查看公共笔记本:https://www . Saturn cloud . io/your pub/khanhnamle 1994/insta cart-notebooks/notebooks/Association-Rule-mining . ipynb。我特别喜欢代码块和可视化的渲染,没有任何混乱,就像我们在 Google Colab 笔记本上看到的那样。它看起来就像一份报告,正如它的本意。我还喜欢提供的“在土星中运行”选项,用户只需点击就可以自己运行这段代码,不需要任何明确的登录。
总的来说,使用土星云可以很容易地与其他队友分享你的笔记本,而不必处理确保他们安装了所有正确的库的麻烦。与 Google Colab 相比,这种共享能力更胜一筹。
此外,对于那些在本地运行笔记本电脑并耗尽内存的人来说,它还允许您使用所需的内存和 RAM 来启动虚拟机,并且只需为您所使用的内容付费。与亚马逊 SageMaker 相比,这种成本关联是一个巨大的优势。
还有一些其他的附加功能,可以真正减轻通常从 DevOps 角度完成的工作的复杂性。这就是像这样的工具的伟大之处。在许多方面,直到你在一个连共享一个基本的 Excel 文档都变得繁琐的公司环境中工作,你几乎很难向年轻的数据科学家解释为什么这是如此之好。
结论
土星云离生产就绪还很远,但它是一个非常有前途的解决方案。我个人认为,这是目前为止唯一一个接近本地 Jupyter 服务器易用性的解决方案,并增加了云托管的好处(CVS、扩展、共享等)。).
概念证明确实存在,只是缺少一些细节(更多的语言支持、更好的版本控制和更简单的点击式界面)。我很高兴看到土星平台的未来版本!
参考
- 在云端运行你的 Jupyter 笔记本的六种简单方法 。数据学校。凯文马卡姆,2019 年 3 月。
为什么我辞去了数据科学方面的工作,去参加数据科学训练营
原文:https://towardsdatascience.com/why-i-quit-my-job-in-data-science-to-enroll-in-a-bootcamp-for-data-science-4721ee0e480e?source=collection_archive---------4-----------------------
少有人走的路
2018 年 11 月,我辞去了在一家全球研究公司担任数据科学家的工作,参加了大会的全职数据科学训练营。这是一条非正统的道路。以下面来自数据营信息图的关于如何“通过 8 个简单步骤成为数据科学家”的截图为例( 简单步骤是一个有趣的词汇选择)。
Data Camp advice on how to prove you’re a ‘true’ Data Scientist
步骤 7 给参加训练营打 2 星,给找到工作打 3 星。作者似乎在暗示,在该领域寻求职业生涯的人获得经验的方式有一定的顺序层次。
虽然我很欣赏 Data Camp 列出了一些可供自学者应用新发现技能的替代实体的例子,但我发现信息图中 bootcamp 的位置具有误导性。训练营可以更恰当地重新定义为以下三种教育途径中的一种选择:在线课程(例如 Coursera)、认证硕士课程或编码训练营。自从“数据科学”作为一个跨学科领域出现以来,这种类型的项目激增,坦率地说,现在的教育前景是狂野的西部。由于这些选择的价格/课程各不相同,很难比较一种继续教育模式与另一种模式的价值。
既然我们已经正确地将训练营重新定义为一个教育项目,问题仍然存在…为什么我选择参加这种类型的项目而不是其他途径?硕士不是更好吗?此外,我为什么不继续做数据科学家的工作呢?这不就是训练营的最终目标吗?
为了理解我的决策,我将分享我的背景,我现在在哪里,以及我对自己未来的展望。我希望与你分享我的经验,而不是指定一条对每个人都最好的道路。谈论成为数据科学家的方法的文章的饱和创造了一种权威的语气,不管它们是否与该领域的其他 10 位“专家”相矛盾。
获得第一份工作
我职业生涯的前三年在私人健康保险咨询公司工作,主要处理索赔和登记数据,帮助雇主对他们的健康计划做出决策。我开始习惯使用数据仓库,并且喜欢我们如何从健康保险公司获得数据的细节。更重要的是,我学会了如何为我们的客户回答关键问题,包括:“从健康储蓄账户转变为健康报销账户会如何影响我的底线?”,以及“如果我们合并这两家公司并选择此福利计划,我会节省多少钱?”。除了我能回答的问题之外,我还喜欢玩弄信息的表达方式。在我工作的最后一段时间,我开始在 excel 中构建仪表板,允许用户像点击应用程序一样点击工作簿(我当时不熟悉商业智能软件,如果你在想“…Excel 中的仪表板?”看看这个。
所有这些经历让我进入了一个我不知道存在的领域,直到大约 5 个月后,我于 2015 年 11 月离职,接受了一个数据科学家的职位。我毫无经验,但在与他们的面试中,我清楚地表明我有分析的头脑,愿意学习,有面对客户的经验(我也做过客户管理)。这足以得到这份工作,但在我看来,我想也是他们的想法,我还有很长的路要走。4 年前,数据科学的定义更加模糊不清(很难相信,但确实如此),公司似乎列出了初级职位的所有技能。每个人都想要一只独角兽,我当然不是。我知道我必须改进建模(自从我在学校学了计量经济学课程后,我就生疏了)和脚本。
做工作
一旦我有了工作,第一年真的很难。我们在一个更大的机构中有效地作为一个初创公司运作,因此没有什么真正被定义。在最初的几个月里,我被要求开始独立训练。自从大学毕业后,我就没有再编程过,我尝试过 R. R 的学习曲线相当陡峭,尤其是当我的团队中没有人用它编程的时候。我尝试了自学路线,在网上学习课程。记得我尝试的第一门课程是 Roger Peng 通过约翰霍普金斯的 R 课程数据科学。第一周,我感觉很舒服,并受到鼓舞,我将能够实现飞跃。在花了几年时间学习并通过保险认证后,我习惯了在工作之外学习密集、复杂的材料,并在日常生活中平衡它们。课程的第二周有所不同。材料复合的方式很快,而且它是一个虚拟课程,我没有一个指南来弹出材料。
当我努力在工作之外点击这些概念时,在工作之内,我终于得到了我的第一个项目,在艾滋病毒/艾滋病局数据集上工作,在场景中建立仪表板。公司里有几个了解 Tableau 的开发人员,即使只有一两个人对我来说也有很大的不同。我起初并不出色,事实上,如果我今天回顾我的工作,这是彻头彻尾的补救,但这是项目报告中的一个增量改进,它给了我一个学习的机会。由于整个公司对这类项目的巨大需求,我逐渐适应了越来越多的商业智能角色,参与了各种各样的项目,如疗养院的监管执法和一个国际医疗融资项目。我成为了商业智能/数据专家,并在很大程度上放弃了成为大数据大师或机器学习工程师的追求。我很享受这种混合性质的工作,既要面对客户,又要深入研究后端数据的技术方面。
虽然我真的掌握了 Tableau 的诀窍,并找出了它的局限性,但在试图实现我在工作之外学习编程的目标时,我仍然与不一致性作斗争。我决定转向 Python,并在 DataCamp 中完成了几门课程,但我仍然在 excel 中进行大部分数据清理,因为这对不熟悉 Python 的其他人来说更透明。随着时间的推移,我意识到在某种程度上,自学课程对我来说是一种挑战。我可能会连续两三周擅长编程,然后连续几周工作到很晚,或者一个月内连续三场婚礼会让我偏离轨道。等我回来的时候,概念已经模糊了,我不得不从头开始复习。
向上拉平
在把在线课程作为唯一的解决方案从我的清单上划掉后,真的有两个选项留给我选择,训练营或硕士课程。当比较这两者时,有许多相似之处和不同之处。这两种选择都比对方早得多开始他们的项目。数据科学作为一门学科在 5-10 年前才真正崭露头角,所以许多项目仍然很年轻,变化很大。钱对我来说当然是一个很大的因素。训练营的价格从7K 美元到 16K 美元(不包括生活费),而数据科学硕士项目的费用与传统硕士项目一样高,需要我至少失业 15 个月,或者晚上去学校上学。另一个恼人但现实的因素是项目的可信度/声望。训练营体现了硅谷的技术精英精神,任何人只要有一台笔记本电脑和对学习的热爱,都可以通过黑客攻击获得能力,而硕士项目仍然具有结构化学术学徒制的僵化和严谨。在现实世界中,我看到一些来自学术界的人对数据科学运动抱有非常真实的敌意,并抗议说:“他们从 19 _ _(19 _ _)起就一直是数据科学家”,“机器学习只是不同名称下的回归”,等等。他们的许多陈述是真实的,但也傲慢地抛弃了整个跨学科领域,该领域将一个学科和应用网络汇集在一个语言保护伞下。
经过考虑,我决定走 bootcamp 路线。从我参加工作的最初几年,我了解到与成功最相关的不是你在哪里上学,而是坚持、毅力和好奇心。我想效仿那些渴望通过聚会、自己尝试、自己阅读来自学的人。在与几个在大会上参加过训练营的人交谈后,我知道那里有一种激烈挑战的文化,人们经常离开完全不同领域的舒适工作,投入深水区,看看他们是否会游泳。为了让我成长,我想沉浸在那种文化中,和那些勇敢的人在一起。至于雇主会怎么看……如果他们对训练营有偏见,愿意放弃整个人才库(需要整个研究生数学课程),那当然是他们的特权,我可以做两件事之一来回应 1。尝试说服他们,我可以做任何一个拥有数据科学硕士学位的人可以做的事情,或者 2。别理那家公司。如果从训练营招聘对德勤、亚马逊、巴克莱、IBM、苹果和波音(仅举几例)这样的公司来说足够好,逻辑表明它应该被视为等同于硕士水平的项目。
成功之望
这是我做过的最好的决定。在前两周,作业真正测试了我们使用控制流和逻辑来回答所有不同数据类型的问题的能力。我很惊讶我能如此快地学会我已经逃避了这么久的技能。我有信心编写自己的脚本并构建 ETL 流,我可以构建这些流来在现实世界中自动化流程。我们与 Spark 和 SQL 合作,让我们体验大数据平台和典型的关系数据库。
更重要的是,我们能够应用我们新发现的编程技能来进行推理统计,构建机器学习管道,以及构建数据收集器来执行分类算法(想想垃圾邮件分类器)。总的来说,它给了我技术技能和信心,让我能够从第一份工作中积累经验,处理更大、更少结构化的数据,并以自动化的方式回答问题。对于我们没有深入探讨的概念,该课程也给了我们使用堆栈溢出和谷歌的关联,以了解正确的问题。
正如我在文章前面提到的,我的旅程可以被看作是非正统的。坦率地说,我质疑这个领域的“正统”是什么。你与软件开发人员类型的数据科学家交谈,他们希望你拥有软件开发技能,或者大数据工程师希望你能够启动 Hadoop 集群。我确信,在本质上,数据科学就像环境科学。你永远不会听到一个地质学家对一个水文学家说他们不是环境科学家。数据科学家将会走各种不同的路线,他们需要知道什么取决于他们的领域。没有人可以成为所有人的一切,我对人们的最好建议是选择对你来说最好的路线,这样你就可以为你最终的利益相关者提供最大的价值。我相信我做到了。
为什么我为我的 B2B 应用程序使用嵌入式 ETL 工具
原文:https://towardsdatascience.com/why-i-used-an-embedded-etl-tool-for-my-b2b-app-56d0b3d8ac6?source=collection_archive---------28-----------------------
为 B2B SaaS 公司提供更好的 ETL 解决方案
TL;博士
- 企业 ETL 工具使得集成过于昂贵对于小公司来说不可行,需要不同的 ETL 方法
- 嵌入式 ETL 工具不是将数据集成的任务完全留给客户,而是让软件供应商负责提供 ETL,同时让客户控制整个过程——使集成成本更低,并更快地接纳新客户。
获取数据是我们最大的挑战。
我在一家名为 RevLock 的 B2B 初创公司担任软件开发人员,该公司提供会计软件。像大多数 B2B SaaS 公司一样,要开始使用我们的软件,客户必须以我们应用程序的标准格式输入数据。
问题是我们不能使用一个标准集成,因为每个客户在 Salesforce 的自定义对象中都有数据。此外,使用像 Informatica 这样成熟的 ETL 工具会使集成过于昂贵。
因此,我们被迫提供更好的解决方案,否则就有可能失去我们的客户。
Source: Diyotta
我们需要提供的高级 ETL 流程如下:
- 客户将 CSV 文件从 Salesforce 上传到我们的 S3 存储桶
- 我们将其转换成应用程序的标准格式
- 对数据进行一些基本的推理
最初的解决方案
由于来自 Salesforce 的文件通常较小且易于管理,我们认为为每个客户转换产品内部的文件是可行的。
我们决定用 JavaScript 为每个客户编写单独的转换脚本,并在短短 6 周内成功地接纳了我们的第一个客户。万岁!我们用自己的内部解决方案解决了将数据输入系统的问题。
然而,我们很快遇到了问题——客户在输入数据中发现了 10 多个没有讨论的场景,要求我们的开发团队修改我们编写的 ETL 代码,作为他们初始集成的一部分。
我们意识到,在我们的应用程序中转换 Salesforce 数据变得越来越复杂,耗费了我们团队本应用于开发新功能的时间。是采取新方法的时候了。
嵌入式解决方案
很明显,我们需要使用 ETL 工具,将流程向上游移动,在我们的产品之外。
然而,仅仅将流程从产品中移除并不能解决我们的主要问题——我们需要将管理实际转换的任务交给客户,这样他们就可以在不咨询我们的情况下处理任何问题。
因此 ETL 工具必须嵌入到我们的产品中,为客户提供一种修改转换脚本的方法,同时允许我们的产品管理运行ETL。
我们在网上寻找这样一个“嵌入式 ETL”工具,其要求如下:
- 简约。我们需要脚本易于理解,并具有良好的支持范式,因此客户可以通过使用自己的资源或外包来维护它们。
- 承受能力。作为一家初创公司,我们不想超过每月 50 美元的运营成本。
- 轻松集成到我们的应用程序中。我们不想花费数周时间来集成 ETL 工具——我们需要轻量级的东西。
为了保证简单,我研究了流行的数据转换框架,并决定使用 Python,因为所有的数据转换工具都可用。
使用这个标准,我们找到了一个基于云的工具,叫做hot glue,它运行在 AWS 上。
我们使用 Pandas 编写转换脚本来处理 CSV 文件的转换,并将一般功能放入我们自己的 Python 模块中,使最终的脚本对我们的客户来说直观且易于阅读。
为了让你有个概念,这是我们为一个客户写的:
如您所见,编辑脚本非常容易——满足我们的简单性需求。
要为客户实际运行 ETL,我们只需使用下面的 REST 调用:
curl -X POST
-H "X-Api-Key: ..."
-H "Content-Type: application/json"
-d '{
"user_id": "...",
"remote_input_dir": "...",
"remote_output_dir": "..."
}'
https://api-endpoint.com/etl/invoke
当 ETL 完成时,一个status.txt
和errors.txt
被上传到我们的 S3 桶中的remote_output_dir
,指示 ETL 是否失败以及发生了什么错误(如果有的话)。
在我们自己的 AWS 环境中运行 ETL 的好处是,我们只为我们使用的东西付费,使我们的成本非常小——满足我们的可负担性要求。
Source: Jupyter
为了允许我们的客户编辑转换,hotglue 提供了一个小部件,它启动一个安全的 Jupyter 实例,其中加载了客户的 Python 脚本和数据。在 Jupyter 中,客户可以轻松地测试他们的修改,并将他们的脚本重新部署到生产中。
将小部件嵌入到我们的 webapp 中非常简单,只需将以下内容添加到我们的index.html
中:
<script src="http://cdn.example.com/widget.js"></script>
<script>
HotGlue.mount(...);
</script>
切换我们称之为:
HotGlue.show()
这就勾掉了最后一个方框,易集成。
下面是一个小部件运行时的快速视频:
结论
我们非常满意为我们的应用程序使用嵌入式 ETL 工具。我们的集成成本降低了,我们可以更快地接纳客户,我们的开发团队也不会因为集成问题而停滞不前。
显然,嵌入式 ETL 解决方案是昂贵的企业 ETL 工具和内部构建定制 ETL 解决方案的绝佳替代方案。
感谢阅读!
我为什么写数据科学博客
原文:https://towardsdatascience.com/why-i-write-a-data-science-blog-7726c3c7d3d9?source=collection_archive---------8-----------------------
写博客加速了我在数据科学方面的学习,原因如下
Photo by Kaitlyn Baker on Unsplash
7 个多月前,我在 Medium 上写了第一篇数据科学博客。此后,我写了许多分享资源、教程和我对学习数据科学的看法的帖子。当我第一次开始时,我的意图只是与他人分享我的学习之旅,希望我能为走上类似道路的其他人提供一些有用的信息。然而,在过去的几个月里,我体验到了写数据科学的一些真正重要的好处,并发现它加速了我的学习。
在下面的帖子中,我想介绍一些我经历过的主要好处:
费曼技术
在学习数据科学的早期,甚至现在,我经常发现自己从各种来源复制和粘贴代码,并使用它来解决一个问题,而没有完全理解它是如何工作的。这很好,而且肯定有一个地方可以让我快速完成一些事情。但是我发现写一篇关于我学到的新东西的博客能让我完全理解它。例如,如果我正在写一个教程,那么我必须准确地理解一些东西是如何工作的,为什么要在博客中解释。我最后还研究了它背后的许多理论,这扩展了我的数据科学知识。
这个我觉得和费曼手法差不多。这是一个由物理学家理查德·费曼开发的学习心理模型。这种学习方法的基础是,为了完全掌握一门学科,你需要能够用简单的术语解释给别人听。当我使用或学习一项新的数据科学技术时,我会写一篇关于它的帖子。这让我可以通过解释来巩固我的理解。写博文有助于我全面掌握一个概念。
公众对作品的批评
我主要是通过自学来学习数据科学,所以我不一定需要老师来提问或检查我的理解是否正确。然而,互联网是一个获得反馈的好地方。当我在博客上写东西时,特别是如果它包含代码,那么如果有错误或者有些东西不太对,很可能有人会留下评论。在解决玩具问题时犯错误并纠正它们,比在工作场所使用该技术时犯错误要好得多。
“写作和学习、思考是同一个过程。”威廉·津瑟
与他人联系
写我的博客使我能够与遵循类似学习路径的人或已经在数据科学领域工作的人联系。我发现特别是在媒体上写作,因为它在某种程度上是一个社交媒体平台和博客平台,很好地促进了这一点。发现有其他人也在遵循类似的学习路径并与他们联系,这真的很有用。
沟通
作为一名数据科学家,最重要的技能之一是沟通。你需要能够向许多不同的受众解释复杂的技术概念,并且能够用数据讲述故事。在工作中,我可能不得不解释机器学习模型如何在许多不同的层面上工作,从数据科学家同事到商业赞助商或高管,他们对这个过程没有任何技术知识。写博客是很好的练习——它使我能够组织我的想法,写一个工作流程的走查,并且通常在写作方面得到更多的练习,这使我更快地创建书面报告。
工作存储
我发现我的博客文章已经成为代码片段和信息的巨大仓库。我经常需要在以后再次使用一种技术,而此时我已经忘记了我需要编写的代码或者它是如何工作的。我发现我会定期重温我的博客文章,以便在工作中使用一些代码。当然,还有其他地方可以存储代码供以后访问,但是博客有一个额外的优势,那就是代码是高度注释的。
自从开始写博客以来,我真的看到了我的学习在加速,对数据科学技术有了更深刻的理解,我的沟通技巧也有了很大的提高。我真的没有意识到写作作为一种学习技巧有多么有用,当然,它还有一个额外的好处,那就是能够为其他人提供大量的信息。
为什么身份管理是云上企业 AI-ML 的先决条件
原文:https://towardsdatascience.com/why-identity-management-is-a-prerequisite-for-enterprise-ai-ml-on-the-cloud-408919055596?source=collection_archive---------26-----------------------
安全问题阻碍了云上的企业 AI/ML。基于身份的安全解决了许多这样的问题。以下是你需要知道的。
Image by Gerd Altmann from Pixabay
迈向更安全的企业云租赁
为什么云上的企业 AI/ML 停滞了?主要是出于正当的安全考虑。AI/ML 对数据的贪婪胃口——其中许多是敏感数据——已经与企业的安全态势产生了严重冲突。
但人工智能/机器学习向云进军似乎是不可避免的。企业如何将这种需求与相关的安全问题协调起来?
一些企业向过去看齐。但是,不幸的是,旧的安全方法似乎不能很好地工作。最近来自 Capital One(和其他公司)数据泄露的头条新闻似乎强化了这一点。
在这篇文章中,我将描述基于身份的安全性的关键考虑因素,这些考虑因素为支持云上的企业 AI/机器学习提供了必要的安全基础。通过解决这些问题,阻碍 AI/ML 采用的安全障碍可以得到缓解,企业可以再次加快 AI/ML 的采用。
企业需求推动了 AI/ML 云的采用
今天,AI/ML 正在推动对全新企业数据方法的需求——这种方法支持比旧的遗留事务系统大几个数量级的数据量。
此外,分析和训练如此大量的数据所需的可扩展性要求迫使企业走出相对安全的数据中心的舒适限制。现在,只有主要的云平台才能真正提供现代 AI/ML 所需的经济高效、按需、可扩展的 GPU 基础。
因此,毫无疑问,向基于云的人工智能/人工智能进军正在进行中。
Photo by David von Diemar on Unsplash
但是旧技术不适用于云计算
过去,主要的企业安全基于保护网络边界。它的目标是在企业数据中心周围建立一个不可渗透的网络屏障,前提是有了安全的网络边界,数据中心内的所有系统、数据和资源都是安全的、可信的。
在当时,这是有意义的,因为大多数应用程序和资产几乎只存在于数据中心内或在数据中心内协作,从而使应用程序开发、操作和安全管理更容易。
时代确实已经发生了变化,现在,不幸的是,用于保护传统数据中心的旧技术被发现是基于一个有根本缺陷的假设,即网络边界实际上是安全的。但是,由于多种原因,这被证明是一个有缺陷的合理假设。
首先,今天的敌人更加聪明,并且获得了更好的工具,导致网络边界看起来变得更加漏洞百出。优步最近在云上的数据泄露无疑证明了这一点。
第二,当企业保护他们的云租用时,会出现错误。不幸的是,只需一个终端配置就能被攻破,从而让敌人能够在整个网络的很大范围内迅速扩大立足点。
我认为仅仅是熵——安全配置不可避免地会随时间漂移——就足以成为不信任基于网络的安全边界的理由。也许首都一号最近在云上的体验是这种情况最令人心酸的例子。
最后,云的本质也产生了一个安全问题:默认情况下,许多资源在创建时就被设计成可以通过互联网访问。这创造了一个新的复杂性级别—为所有云组件提供安全性—这是大多数企业都没有准备好的。一个错误就可能导致灾难性的数据泄露。
企业安全团队的担心是正确的。显然,这些问题很重要!
事实上,如此之大,以至于我认为现在应该在网络边界可能被突破的明确假设下设计现代云安全方法是公平的。
然而,AI/ML 从业者——数据科学家——需要大量敏感数据,这加剧了这个问题。显然,允许大量敏感数据在云上持久存储会带来非常现实的安全风险,必须加以缓解。
毫不奇怪,这导致了一种新的安全模式。
Photo by Kelly Sikkema on Unsplash
身份是新的安全边界
今天,身份已经成为新的安全边界。简而言之,基于身份的安全性确保您是您所说的那个人,并且只允许您做您被允许做的事情—无论您位于何处,也无论您的访问方法如何。
基于身份的安全声明您的身份(或与您的身份相关联的凭证)包含身份验证方法(您是谁)和与您的授权相关的信息(您能做什么)。更具体地说,如果没有您的身份提供的适当凭证,就无法访问应用程序、服务、资源或数据。
Figure 1
集成身份管理至关重要
那么,随着身份成为云租赁安全的焦点,应该如何管理身份呢?以下是与企业云租赁相关的一些关键考虑事项。
首先,本地和云目录(例如:微软的 Active Directory 或 LDAP)应该同步(图 1 中的“1”)。这使得无论身份在哪里创建或使用,都可以一致地管理身份和关联的凭据。
从数据科学家的角度来看,这成为基于身份的方法保护敏感 AI/ML 数据的基础,同时还为访问云和内部资源提供了便捷的单点登录(SSO)体验(解决了管理多个 id 和密码的常见问题)。
其次,本地实例是提供单一权威身份源的主实例。这将简化身份管理流程,同时降低因人为错误和配置复杂性导致的安全风险。
基于角色的访问控制(RBAC)是访问/授权管理的基础
RBAC 或基于角色的访问控制是一种管理授权的方法。角色通常在企业的身份目录中维护(例如,Active Directory)。这些角色用于控制对资源的访问。
RBAC 是这样工作的(尽管这是一种简化):角色(图 1 中的“2”)通常被创建来表示工作职能;权限被分配给角色,以允许执行各种操作。然后,用户/员工通常被分配到组,这些组又被分配到角色。瞧,已经在身份、组、角色和访问资源所需的许可之间建立了联系。
这创建了一个有帮助的间接层:用户没有被分配权限,而是通过成为一个角色的成员来获得权限(图 1 中的“3”)。现在,用户权限的管理得到了简化,因为它只需要为用户/员工的帐户分配适当的角色。
也许最重要的是,这种方法不仅提供了定义组织中数据科学家(和其他人)角色的规范方法,还简化了授权管理,从而有助于避免可能导致安全风险的错误。
结合身份管理的 RBAC 通常被称为 IAM,即身份和访问管理。
将所有这些放在一起(一个非常简单的场景)
让我们假设敏感数据一直保存在企业的云租户上。该数据在企业目录中被分配了一个资源名(假设为“数据资源”)。安全小组规定,访问“数据资源”需要“数据读取”权限。这种关系也在企业目录中维护。
继续我们的场景,在企业目录中已经建立了一个“数据科学家”角色(图 1 中的“2”),表明被分配了这个角色的员工被期望执行 AI/ML 功能。读取资源(“数据读取”)的权限现在添加到角色中,表明该角色能够对资源(“数据资源”)执行适当的操作。
现在,让我们假设一位新的数据科学家加入了企业。如何向他们提供对先前定义的资源的访问?
首先,他们的身份是在企业目录(例如,活动目录)中创建的,由于企业目录与云目录是同步的(图 1 中的“1”),因此这位数据科学家在整个企业中只有一个身份。
新聘用的数据科学家的身份被分配到“数据科学项目”组,这当然反映了他们参与新的数据科学项目。最后,为了完成该场景,将“数据科学家”角色添加到“数据科学项目”组中。
这就在企业目录中建立了关系,提供了凭证(图 1 中的“3”),允许数据科学家访问必要的资源。
首先,一个身份(对于新数据科学家)链接到一个组(新数据科学家组,“数据科学家项目”),该组链接到一个角色(“数据科学家”)。该角色与允许访问资源(“数据资源”)的权限(“数据读取”)相关联。
瞧,数据科学家可以访问必要的资源。
这种情况下需要注意的最后几件事:
- 由于企业和云目录是同步的,因此这些关系中的每一个都可以在企业和云中使用—单点登录(SSO)可以在企业及其云租户中使用
- 借助身份管理,只有获得适当授权的经过身份验证的用户才能访问资源,即使黑客获得了云租户的访问权限,他们也无法访问受基于身份的安全方法保护的任何敏感数据
- 简化了身份管理,尤其是敏感安全配置的传播
请再次注意,这是一个有些琐碎的示例,仅用于说明各种组件和关系如何互操作。
Photo by Yoal Desurmont on Unsplash
AI/ML 是重新思考云安全的催化剂
向云上的企业 AI/ML 进军已经开始。似乎很明显,旧的安全方法已经跟不上 AI/ML 对数据的需求。这阻碍了企业对云原生 AI/ML 的采用,迫使企业转向基于身份的现代安全方法。
新的基于身份的安全方法肯定比旧的方法更复杂。管理身份、角色,并在企业及其云租户之间同步它们,确实需要新的规范水平。尽管如此,企业对 AI/ML 的需求正在一个又一个行业加速增长。企业现在开始重新思考他们的云安全实践。
看来,基于身份的安全不仅是一个先决条件,而且可能是改变企业传统上谨慎的安全姿态的催化剂,使企业在云上采用 AI/ML 的速度再次加快。
为什么我要留下数据
原文:https://towardsdatascience.com/why-im-leaving-data-7201aac41ab4?source=collection_archive---------5-----------------------
数据分析师工作的利与弊
Photo by Mika Baumeister on Unsplash
这篇文章不是试图抨击,而是对数据职业的本质给出一些见解。从初创公司到上市公司,我在各种规模的公司工作过,作为一名分析师,在某种程度上作为数据科学家,我的观点纯粹是在 B2C 技术公司的背景下。重要的是要认识到,数据专业人员的工作描述因组织而异。我将概述利弊,以及为什么我决定完全离开这个利润丰厚的行业。
让我们从产品分析师一天的工作背景开始。
产品分析师的一天
9:00 到 9:15 -上车,泡一杯茶,在桌子上吃早餐
9:15 到 9:30——查看电子邮件、吉拉待办事项、待办事项、时差、日历
9:30 到 12:30——继续昨天开始的分析。SQL 查询,懈怠同事为什么 TF 这个表一夜之间不见了。伙计们,扑灭这些数据大火。
12:30 到 1:30 -吃我的脸
1:30 到 2:30——将查询到的数据转换成一个看起来不错的报告。Flex dat python,dat Tableau,dat badonkadonk。不,真的,你的屁股因为整天坐着开始疼了。
2:30 到 3:30- 与软件工程师、项目经理和设计师开会,讨论即将到来的特性实验需求
3:30 至 4:00- 记录特性要求
4:00 到 4:15——我的咖啡因在哪里
4:15 至 6:00 -总结分析,从数据同事那里获得第二种意见,讨论他们在各自领域的发现,安排会议以展示资料/报告
冲洗并重复。
比较产品数据角色和商业数据角色有点像苹果和橘子。两者都是时间关键,但方式不同;前者有技术成分,包括跟踪事件和解决相当抽象的产品问题,通常带有行为语气。商业数据角色通常关注业务顶线,具有更多建模、预测功能,并且可以直接支持管理层。
赞成者
- 对于好奇的人来说,这是显而易见的。花几个小时浏览几亿个划行的数据集,并弄清楚所有这些,对于那些从理解用户在做什么中得到乐趣的人来说,这是梦想成真。当你发现有趣的见解时,会有一定程度的个人满足感——哇,我们上传的照片没有一张被这些产品浏览过!为什么会这样?也许我可以在这里帮助摄影师……并回答你自己关于生意的问题。你可能会有一种直觉,为什么某个页面或结账流程的转化率如此之低,你需要挖掘答案。如果这有价值,你可以把它交给一个愿意倾听的利益相关者。
- 利用高等数学的完美工作。大多数工作最多需要高中数学,计算出一些百分比的变化。有几条职业线给你提供了使用学位水平数学的最佳机会。贝叶斯统计,马尔可夫链,有人知道吗?是的,我的学位完全值得近乎破产。在数据科学领域,这一点更加明显。数学,而不是破产。
缺点
- 不言而喻,对于任何职业来说,真正考虑你的个性与所选择的职业相匹配,而不仅仅是一美元一美元。你的日常生活通常包括盯着黑屏几个小时,偶尔还会有股东会议。对于需要更多人际交往的人来说,这可能很难做到,更不用说在长时间的独处中工作会有多累了。当然,一个内向的人可能更适应这种角色。
- 截止日期,尤其是在科技公司,对于数据来说是不存在的。你的任务是典型的开放式问题,所以只要你的好奇心能让你走多远,你就能走进兔子洞,当你认为你的分析适合消费时,你就能画出一条线。当然,代价是时间。你所做的每一点分析都是为即将发布的特性浪费时间。坦率地说,你永远不会知道你的涉众是否决定使用额外的分析。如果你有强烈的执行倾向,这将是一项艰巨的任务。
- 在我所在的组织中,没有人对如何处理数据功能有任何具体的想法。当你是跨职能的,嵌入在一个由工程师、产品经理和设计师组成的团队中,你就是一个运送产品的小公司的一部分。如果你的动机是建设,没有比这更好的了。然而,你可能会在日常的单口相声中感到无关紧要。毕竟,你实际上没有做任何建设。当与数据同事坐在一起时,友谊和质量保证会更强。这里的缺点是缺乏所有权,因为任务在数据团队中共享;你经常离问题的背景太远,从来没有看到一个项目的结束。这导致了一种认识:你并不真正为任何人工作,就像工程师向工程主管汇报,或者营销助理向营销经理汇报一样,这可能会有点不和谐。
- 影响定义不清。为什么?让我们来分析一下数据同事与其他部门的关系:工程、产品经理、UI/UX 和营销人员,这些都是典型的利益相关者。工作流程通常在下游;你的工作支持他们的调查。在您的数据宝库中发现一些超出他们要求范围的有趣内容?你的工作是影响你的利益相关者,让他们知道你的发现会影响与其职能相关的关键绩效指标,或者少拐弯抹角,让他们看起来更好。你的工作取决于利益相关者是否愿意采纳你的建议。影响力是任何工作的一部分,然而对于一个被许多人视为辅助职能的职位来说,影响力没有那么重要。如果你决定停止对利益相关者的分析,你就是业务的阻碍者。如果你的利益相关者决定忽略你的分析,情况就不一样了。这引出了一个令人不安的问题:你在游戏中没有皮肤。数据常常与决定战略混为一谈,如果这是你在职业生涯中追求的,请三思。我认为,在一个不同的行业,比如大型制药公司,你的角色要重要得多;没有可靠数据的支持,一种药物是不会随意推出的。
- 很少有职业是以真正相关的方式运作的,也就是说,你越努力,影响越大。这些往往是独狼,吃你杀的类型。以销售人员为例;他们的工作做得越好,就能吸引越多的客户。或者在介质上书写。如果我写了一篇伟大的作品,这将被翻译成掌声,或花时间阅读。有一个非常明确的 KPI 与输出相关联,因此也有关于绩效的反馈。撇开政治议程不谈,你可以发表你最好的分析,但不能保证它会与你希望它产生的影响相称。这适用于许多基于团队的角色,但我要说的是,与工程、设计或营销相比,这种感觉在数据中更强烈,因为你并没有真正推出一个有形的功能。回到性格匹配的困境,如果你想更接近第一线/直接反馈你的努力,这也不是你的职业路线。该规则的例外是在早期创业阶段。
最终对我来说,缺点远远超过了优点,我开始意识到工作的性质与我对黑白效果的需求相冲突。对于那些也是系统思考者并希望看到更大图景的人来说,肯定有更合适的角色。然而,一些数据方面的经验可以作为产品经理和客户成功角色的巨大垫脚石。个性而不是技能往往被忽视,被认为是事业成功的一个无关紧要的因素,虽然你肯定可以做到这一点,但如果你发挥自己的优势,你的旅程会变得容易得多。
为什么在做了几个月的数据科学家后,我还要上机器学习课
原文:https://towardsdatascience.com/why-im-taking-a-machine-learning-class-after-spending-months-as-a-data-scientist-b687764c318a?source=collection_archive---------9-----------------------
R you ready to hear this?
你可能认为 480 小时对我来说足够了。
在我看来,没有什么比坐在教室里听别人讲授你已经非常了解的内容更让人心力交瘁的了。这就是我退出本学期选修的两门统计学课程之一的原因——这门课程是关于抽样调查的设计和分析,本质上是在调查的背景下重新教授基本统计学。虽然这可能对需要统计学应用复习课程的人有用,但作为该学科的专业学生,我被我的教授在这个 3000 级课程的第二周提出的问题激怒了:“你们都知道是什么意思吗?”
我是说,拜托。
至于我决定继续学习的另一门统计学课程,我也知道这门课的大部分内容。在过去的这个夏天,我在一家当地公司实习数据科学,并在实习前接受了 4 周的强化培训,在这之后,我对机器学习有了相对较好的理解,至少在统计应用方面。我花了 8 个多小时,一周 5 天,花了 12 个星期编码和学习从 K 近邻到神经网络的一切。然而,我学会了如何做,而不一定是做了什么。
虽然这学期才开始了几个星期,但我已经很感激我没有退出这门课。虽然当我们讨论回归和分类之间的差异时,我仍然偶尔会发现讲座很无聊,这是我在之前在上写过的一个主题,但我也终于理解了我已经在使用的这些技术背后的过程和内部工作方式。以前,当我要实现 K 最近邻之类的东西时,我对它是如何工作的有一个大致的了解,但我并不清楚在我的代码后面到底发生了什么。到目前为止,这堂课最大的教训是:为了完全理解何时使用一种技术而不是另一种技术,了解当你运行一行代码时数学上发生了什么是很重要的。以前,我会试错尽可能多的技术,以产生我认为最好的输出。现在,我希望这个课程能让我理解什么时候实际使用每个模型。
额外的收获是,我也在学习 R 语言的一切,而我在暑期培训中使用的是 Python。虽然我不一定需要知道如何用这两种语言编写代码,但是使用两种不同的程序加深了我对概念的理解,否则我可能无法理解。此外,虽然我通过实习计划接受了半正式的培训,但现在我将在成绩单上明确证明我上过这门课,并且应该理解统计机器学习。一场小胜利,但对 4630 号来说仍然是一场胜利。
为什么要将能源领域的多样性与人工智能及其他技术相结合?
原文:https://towardsdatascience.com/why-integrate-diversity-in-energy-with-ai-and-more-468517e09b76?source=collection_archive---------23-----------------------
技术的集成和数据源的多样性可以成为能源转型的催化剂,但这说起来容易做起来难
Photo by Scott Umstattd on Unsplash
什么是“融合多样性”?
它始于理解和认识到每个人以及每项技术都是独一无二的,都有不同的优势、能力和经验。整合多样性首先要认识到这一点,然后创造一个环境,让你可以发挥出最好的一面,这样当他们一起工作时,总和要比部分大得多。
在这篇文章中,我想把重点放在电力行业,在这个行业中,技术的集成和数据源的多样性可以作为能源转型的催化剂,而技术的限制和“对抗”(或简单的竞争)将打破整个过程。
为了想出前沿的解决方案,你真的需要有不同的视角和技能。我们都知道,在一个团队中,如果你有相同类型的人在做某件事(都是男性,都是老人,都来自城市,等等)。),您只能创建自己的解决方案类型。通过整合差异,它实际上允许你扩展你的视野,推动边界。人工智能有助于整合不同的解决方案,拓宽可能性的范围。
书籍和电影中的人工智能已经以不同的形式存在了很长时间。他们被描绘成有时友好,有时险恶。但在现实生活中,我们喜欢将 AI 视为增强智能。多年来,人工智能已经在许多不同的领域证明了自己的用处。在人工智能出现之前,计算机仅根据例子识别照片中的人的想法是闻所未闻的。今天,我们甚至使用人工智能来检查医学图像,以快速识别异常,挽救患者的生命。
吴恩达,Coursera 的联合创始人、百度人工智能集团的前负责人 / 谷歌大脑、将人工智能的变革性影响比作 100 年前的电力变革性影响,我当然同意他的观点。
Professor Andrew Ng is the former chief scientist at Baidu, where he led the company’s Artificial Intelligence Group. He is an adjunct professor at Stanford University. In 2011 he led the development of Stanford University’s main MOOC (Massive Open Online Courses) platform and also taught an online Machine Learning class that was offered to over 100,000 students, leading to the founding of Coursera.
事实上,AI 对不同的人意味着不同的东西。对于视频游戏设计师来说,人工智能意味着编写影响机器人如何游戏或环境如何对玩家做出反应的代码。对于我们大多数人来说,我们看到的人工智能更有可能是你手机上的一个应用程序,而不是智能机器人(或 Android!).它被用于幕后管理财务,建议你的下一部网飞电影,识别信用卡欺诈,阅读医学成像,并为病人找到合适的临床试验。人工智能参与了我们每天的决策。
预计 2019 年全球人工智能(AI)系统的支出将达到 358 亿美元,比 2018 年的支出增长 44.0%。随着各行业积极投资利用人工智能软件功能的项目,国际数据公司(IDC) 全球半年度人工智能系统支出指南预计,2022 年人工智能系统支出将增加一倍以上,达到 792 亿美元,2018 年至 2022 年预测期的复合年增长率(CAGR)为 38.0%。
[## 2019 年,全球人工智能系统支出将增长至近 358 亿美元…
IDC 通过设备、应用、网络和服务来研究消费市场,为以下领域提供完整的解决方案
www.idc.com](https://www.idc.com/getdoc.jsp?containerId=prUS44911419)
但在能源领域,它仍有很长的路要走。与许多其他行业相比,在电力行业,我们可以利用增强智能来扩展人类的能力,并完成人类或机器无法独自完成的事情。我们今天面临的一些挑战来自于过量的信息。更快的通信、分布式计算和物联网(IoT)导致了海量数据的产生(呈指数级增长),而物联网本身和社交网络鼓励了大部分数据的非结构化。数据太多,人类专家无法跟上所有的变化和进步。
Photo by Jose Fontano on Unsplash
开启智慧
借助增强智能,我们可以“解开”数据中更多的实质和相互关系,同时将所需的信息放在我们的指尖,并用证据支持这些信息,以便利益相关者可以做出更明智的决策。这将允许专家和决策者扩展他们的能力,以便更好地服务他们的客户。机器做耗时的工作,这样我们才能做重要的事情。
在传统编程中,一切都是确定的,if-then-else 循环决定了软件如何响应变化的条件。当你比较已知值时,比如温度、文本字符串或电子表格中的数字时,这种方法非常有效。但是当你想把对象/决定/变化分类时,简单的 if-then 语句是行不通的。这个世界太复杂了,有灰色阴影和多个正确答案,概率答案成为一种要求。在电力行业,几乎一切都是概率性的(天气、消费者行为、高峰管理、风力涡轮机或太阳能光伏输出等)。).确定性系统可以告诉你,“答案是 X,因为比较成功”,例如恒温器上的温度,而在负载均衡或可再生发电中则需要概率性系统,因为你需要一个系统告诉你,“我非常有信心这是正确的答案,但我也有证据支持这些替代方案”(例如,储存能量以备后用,减慢风力涡轮机,因为风力可能超过限制,等等)。).
因此,即使对好莱坞来说,人工智能通常意味着一个行为像人的角色,混合了一些比喻的计算机功能。对于数据科学家来说,尤其是在能源领域,人工智能是一种探索和分类数据以满足特定目标的方式。但不管是谁在定义 AI,关键的一点是,AI 就是智能。我们如何定义智力?人工智能有许多方面,每个方面都受到科学和哲学进步的影响。计算机科学和电气工程决定了 AI 如何在软件和硬件中实现。数学和统计学决定了可行的模型并测量了性能。因为人工智能是以我们认为大脑如何工作为模型的,心理学和语言学在理解人工智能可能如何工作方面发挥了重要作用。哲学提供了关于什么是智力和伦理考虑等主题的指导。正是所有这些研究领域的融合,才使我们有可能建造出具有智能行为的系统。电网,尤其是可再生能源电网,需要这种智能。
Photo by Arthur Poulin on Unsplash
数据学习在电力行业的应用
AI 擅长什么,不擅长什么?答案往往归结于数据。人工智能技术就像任何技术一样会改进,所以今天的限制可能是明天的突破,但当前的人工智能技术非常擅长分类和翻译(解释)。
不管你说的是自然智能还是人工智能,没有什么是不能学习的智能。人类生来就有某种程度的先天智能,我们可以通过学习来建立这种智能。先天智能机器唯一拥有的是我们给予它们的东西,而常识目前不在那张很短的清单上。不过,我们提供的是检查示例的能力,以及基于输入和期望输出创建机器学习模型的能力。对于监督学习,我们为人工智能提供了例子。无监督学习是你提供输入,而不是标签,让机器推断质量。这种类型的学习对于聚类数据是有用的,其中数据根据其与邻居的相似程度以及与其他事物的不同程度进行分组。
一旦数据被聚类,您就可以使用不同的技术来研究这些数据并寻找模式。强化学习是机器做出决定,并根据决定是否正确给予奖励或回报。你可以使用强化学习来教机器下棋或导航障碍课程,如需求侧管理或发电计划。深度学习是应用于神经网络的机器学习的子集。深度学习网络指的是节点的排列,这肯定会是下一代与能源相关的人工智能应用
当选择用于训练机器模型的数据源时,重要的是对在生产中会遇到的数据的代表性数据进行采样。可能出现的一个挑战是训练数据无法预测未来的输入数据。这个问题必须在这个过程中尽快解决。不一定你需要所有的答案,而是你确定了一个处理这种情况的过程。因为垃圾输入等于垃圾输出,没有任何人工智能解决方案可以从坏数据中给出好的结果。然而,如果您的一些数据是坏的,您可以做的是识别并保留您的可用数据,并收集(或构建)可以在您的解决方案中使用的新数据。您应该考虑您必须处理的数据的数量、质量和敏感性。
可再生能源的整合,说起来容易做起来难
这对于电网运营商来说变得越来越复杂,对于较小的设施或社区来说也是如此。它现在涉及将可再生能源生产资产纳入自我消费(太阳热能和/或光电、从生物量或沼气生产热量、地热能……),以使制造商或社区能够减少其碳足迹,使其能源组合多样化,并减少其对化石燃料的依赖,这将有助于更好地控制与能源相关的长期预算。
在任何情况下,它都是优先激活的杠杆:“未用完的能源没有成本,也不会造成污染”。另一方面,即使有一些很好的成功或更有吸引力的行业,可再生能源和回收技术的部署在行业中仍然太落后。有许多障碍需要克服:巨大的投资成本、当前与化石燃料和廉价电力的竞争、对与这些创新技术相关的运营风险的恐惧、缺乏技术知识或运营能力等。这就是人工智能和数据科学可以提供很大帮助的地方。可以分析许多积极的经验,并将其视为“学习”阶段的范例。这将旨在通过回收技术和可再生能源向该行业提供短期内的可能性,重点是主要部门和一套技术。
例如,我们可以考虑使用智能储能系统优化分散式发电(太阳能光伏或风力涡轮机)。在这种情况下,如果将第二天的天气预报传送给 AI,则可以根据网络的预期状态来准备存储容量。AI 可以决定整夜卸载存储单元(例如混合能量存储),以便第二天可以在那里存储最大电流。由于这种控制功能,还可能知道较高电压电网水平的状态。然后,配电侧(低压电网)可以帮助维持较高电网水平上的电压(甚至在涉及足够容量的传输水平上)。除此之外,所产生的电力要么直接消耗(优先级 1),要么注入电网,或者根据电网的状态临时储存。在当地电压问题的情况下,当地储存的电力(电池)可以馈入电网。在更广泛的情况下,能源供应商可以根据某些信号(天气预报、平衡组等)主动控制智能模块。).通过这种方式,IES 对本地电网电压的维持产生积极影响,更一般地说,对供电安全(本地和分散系统服务)产生积极影响。就客户忠诚度和新产品开发(服务、合同转让等)而言,它也是能源供应商的理想平台。).
Photo by Stephen Dawson on Unsplash
游戏状态:创新技术的智能仪表板,根据需求进行集成和定制
首先,除了传统的解决方案,还有许多相对成熟的创新技术来生产和自我消耗能源,无论是热能(在与大多数用途相适应的温度水平)、冷却还是电力。而且,“相对于”每一个单一的需求,甚至有几个可供选择的解决方案。
在第一种方法中,这些技术可以分为三个互补的类别:
提供所谓低温热的技术,如地热能(极低能量)、干燥蒸汽回收或太阳能热,适用于家庭热水生产、空间加热或低温工业过程,如食品工业中的巴氏杀菌。提醒一下,集中太阳能,高热地热(阴影部分),以及中低能量地热能在地图中有所显示,但不在本次研究范围内。
Solar Energy Generating Systems (SEGS) solar complex in northern San Bernardino County, California. The first commercial parabolic trough power plants with a total of 354 megawatts went online in California. By USA.Gov — BLM — BUREAU OF LAND MANAGEMENT — http://www.ca.blm.gov/cdd/alternative_energy.html, Public Domain https://commons.wikimedia.org/w/index.php?curid=15957890
2)提供所谓高温热量的技术,如生物质,沼气或某些熔炉的烟气回收,这使得满足需求成为可能,特别是冶金、玻璃或化学领域的需求。
3)发电技术,对所有研究的过程都有用。这些可以由例如太阳能光伏、风能或生物质或沼气热电联产单元覆盖。
Source: Adapted from The National Energy Education Project (public domain)
与技术整合相关的问题:碳足迹、竞争力、条件整合和开发
2018 年在欧洲许多制造商中进行的一项调查(ref:www.ademe.fr/mediatheque)显示,尽管遇到了困难,但这些技术已经在地面上部署,通常都很成功。受访的工业企业唤起了第一系列的利害关系:减少二氧化碳排放,发展负责任的企业形象,这可以带来营销优势,同时符合他们的环境和社会承诺。
作者补充道:
这些技术的发展水平是一种进步,特别是在能源公约和拉加经委会各自竞争的历史时期,EnR 和拉加经委会提出了一个解决方案(取决于化石能源价格的波动)。或者,用莎士比亚的话来说:这些技术的部署水平相当不均衡,特别是因为它们与传统能源相比的历史竞争力水平,尽管带来可再生能源或能源回收解决方案的生产成本是可见的(独立于化石燃料价格的波动)。
然而,即使受访的工业企业提到环境和品牌问题,他们也同意竞争力问题是头等大事:换句话说,可再生能源或能源回收技术的部署只有在有助于提高竞争力的情况下才会进行。
Photo by paolo candelo on Unsplash
在通往竞争力的路上
对于可再生能源来说,被认为是竞争力的附加因素总是一个挑战。特别是在没有补贴的情况下,在当前的市场条件下,天然气价格非常低,除了少数特殊情况,它们在全球的竞争力低于传统的参考解决方案(电力和天然气)。可以注意到,受益于更好的供应合同,这些常规能源对于大用户来说往往可以以更低的成本获得。在这种情况下,公共政策和与之相关的支持机制,以及人工智能和储能( IES )成果的最大化发挥着重要作用。在补贴和技术整合的推动下,许多解决方案可以给工业带来竞争力。但 RE 与 ie 的结合应该被视为更大竞争中的团队成员。
此外,投资一项能源资产往往是一个中期或长期的选择,折旧期较长。今天的选择将对未来 5 年、10 年、15 年或更长时间产生影响。今天选择投资一种或多种可再生或回收资产可能是一个长期的回报选择,因为它允许能源组合多样化,并减少对价格可能特别不稳定的传统能源的依赖。此外,这种策略还允许至少部分地克服燃料、电力价格的上涨,或者甚至在较小程度上克服 CO2 信用市场的上涨。
技术的整合必须是对一个场所的需求和可能性的整体思考的一部分。在工业场地上整合太阳能装置、风力涡轮机、生物质锅炉或甲烷化工厂、空间需求和适应的基础设施,甚至更好地评估(如果不是很好的预测)未来的结果。清洁技术资产的整合可能还需要对与之相关的分销进行重大改革。根据相关站点的拓扑结构、集成约束、需求位置,变化可能不是无关紧要的。在许多情况下,甚至可能需要部署新的电网或安装存储容量(因为在实现热量回收和使用回收的能量之间存在时间差,或者因为某些能源的可变性)。人工“增强”智能需要有效地完成这一切。以下事实强调了这一点:一般来说,由于可再生能源相对缺乏灵活性,因此与传统竞争对手(电网、常规发电、天然气产热)相比,可再生能源需要更具体的操作知识。
Credit: Optimizing power generation with Hybrid Energy Storage and AI (CC BY-NC-SA 2.0), © Smart Phases Inc. (DBA Novacab)
一方的长处抵消了另一方的短处
事实上,传统技术的优势在于(几乎)始终可用、反应灵敏且灵活。它们很容易适应负载和活动的快速波动,因此能够提供具有大量响应性的负载曲线。大多数可再生技术并非如此。另一方面,太阳能和风能技术通常是可变的,在有太阳和/或风的情况下只产生电和/或热。生物气或生物质的全球生产和燃烧过程也是如此,这可能取决于当地资源的可用性(液体流出物或各种废物)。然而,可以通过智能地将能源技术与热回收技术和可再生能源相结合来克服这些困难,以提供场地的不同用途。例如,我们可以考虑将区域供热与储能解决方案相结合,以应对某些可再生能源资产或异步热回收解决方案生产的可变性。为了促进可再生能源的整合,实业家必须依靠所有生态系统的贡献:技术提供商、服务提供商、通过创新商业模式融资的行为者,以便分担风险和克服上述困难。
对于我们人类来说,这样的项目可能看起来很复杂,但在人工智能的帮助下,它们可以从经济和环境的角度带来高性能水平。为了提供最大的价值,重要的是专注于改善我们的人工智能的训练时间,并从少量数据中获取最大的洞察力。最终结果是,解决方案需要更少的数据来构建,更快地培训和部署,并保护您的知识产权。
简而言之,混合能量储存(电力、热能、混合动力、机械等。)和 AI 共同能够解决 re 的这个缺点。传统技术和可再生能源与智能储能技术的结合促进了这些技术的整合和利用。事实上,虽然所有这些技术看起来可能相互竞争,但这些技术必须首先被视为相互补充,就像它们可以补充传统能源(特别是电力和天然气)一样。整个挑战在于构建一个能源系统,在该系统中,各种资产相互补充,使一种技术的优势与其他技术的劣势相互抵消(每种技术都有其优点和缺点,需要在每个工业场所逐一评估和考虑这些优点和缺点),从而能够从操作和经济角度部署高效的能源解决方案。并且在每个工业现场对应一个特定的解决方案。在这里,多个数据源是优化解决方案的关键,人工智能是处理这些海量信息的必要手段。
正如埃德蒙·希拉里曾经说过的:当你去山上,你看到它们,你会钦佩它们。在某种意义上,它们给你一个挑战,你试图通过攀爬它们来表达这种挑战。能量转换是前方的山脉。它向我们挑战,我们需要更好地结合我们的优势和“增强智能”,以尽可能最好的方式攀登它!
Photo by Hu Chen on Unsplash
本文是荷兰国际集团夏羽·比洛多关于人工智能和能量储存系列文章的一部分。工程博士,对外经济合作中心。Smart Phases 首席技术官( Novacab )、加拿大工程师协会会员和能源中心专家撰稿人。
您可以在此找到其他文章:
[## 人工智能在一个“别无选择,只能让它聪明”的能源行业!
可再生能源的繁荣对电力部门来说是一个很好的机会&用聪明的方式对抗气候变化…
towardsdatascience.com](/artificial-intelligence-in-a-no-choice-but-to-get-it-smart-energy-industry-1bd1396a87f8) [## 组合效应对抗蝴蝶效应
人工智能促进储能,为可再生能源提供弹性和效率…
towardsdatascience.com](/the-combo-effect-against-the-butterfly-effect-bf7dd7a507a0) [## 没有智能储能,就没有快速(足够)的能量转换!
人工智能和储能 fast 需要强耦合,以便与可再生能源实现高效过渡,从而对抗狂暴的…
towardsdatascience.com](/no-fast-enough-energy-transition-without-intelligent-energy-storage-72cfbd3c096b)
为什么智力可能比我们想象的要简单
原文:https://towardsdatascience.com/why-intelligence-might-be-simpler-than-we-think-1d3d7feb5d34?source=collection_archive---------6-----------------------
来自大脑皮层的教训
Photo by Paweł Czerwiński on Unsplash
建造一个人,更确切地说,一个人脑,需要多少信息?
毕竟,我们是地球上最复杂的物种。更进一步说,我们的一些大脑认为我们的大脑是宇宙中最复杂的结构!
然而,一个番茄比一个人有更多的基因。准确的说是 7000 多。
Arguably not the most complex structure in the observable universe. Photo by Immo Wegmann on Unsplash
看着我们的基因,我们很难弄清楚我们所有的复杂性是由哪里编码的。
一开始只有大约 20000 个基因,其中大约一半与其他事情有关,如建造手脚和重要器官。
从数学上来说(考虑到我们的基因组可以被视为一种携带信息的代码,由类似于图灵机的东西进行处理,正如我在这里更详细地解释的那样),我们的基因组在无损压缩后只携带 2500 万字节的大脑设计信息。
将它与 10 个⁵连接进行比较(一万亿次!)据估计,成年人在新大脑皮层中拥有这种结构,新大脑皮层是我们大脑的最新部分,只存在于灵长类动物中,在智人中已经变得非常大。你会看到,如果我们对基因的理解没有完全错误,假设我们的大部分知识和能力直接编码在基因中是不合理的。
唯一的选择是,需要一种更简单、更有效的方式来定义我们大脑和新皮层的蓝图。
并以此来构建一个智能系统的原型。
大脑功能的统一理论
杰夫·霍金斯在他关于智力的书中抱怨说,大脑的普遍图像是由高度专业化的区域组成的。
他将这种情况与 19 世纪的生物学家进行了比较,这些生物学家对种类繁多的物种进行了越来越详细的研究,却没有注意到生命背后的统一原则。直到达尔文提出他的 进化论 之前,没有人知道如何用一种总括性的叙述来描述自然界的多样性。
同样,大脑可能看起来像是由许多不同的、高度专业化的大脑区域组成的,但它们明显的专业化不应该让我们得出结论,它们可能不会都基于相同的解剖学和算法原理工作。
事实上,我们观察到新大脑皮层的解剖结构具有惊人的同质性。 神经可塑性 表示大部分脑区可以轻松承担以前由其他脑区执行的任务,显示出其设计原理背后的某种普遍性。
在他的畅销书**T5【自我改变的大脑】T6、Norman Doidge中,讲述了病人将整个感觉系统重新映射到大脑新部分的令人印象深刻的故事,就像人们通过将相机记录的视觉刺激映射到直接进入嘴里的感觉刺激来学习用舌头看东西。**
对中风患者的研究同样表明,中风导致的能力丧失通常会被新的大脑区域重新学习,天生耳聋的人可以重新映射他们的 布洛卡区 (负责语言处理)来控制他们的手部运动,他们通过手语交流,而不是通过嘴巴的运动来表达讲话。
大脑发挥出 不可思议的能力和灵活性 来学习新事物。大多数人可以学习他们成长过程中使用的任何一种语言,或者在以后的生活中选择学习一种新的语言,可以学习他们选择的任何一种乐器(不可否认有不同的成功)等等。
可塑性和灵活学习的事实可以解释为,根据我们基因中信息的稀疏性,指向一个普遍的结构,这种结构隐藏在新大脑皮层的 生物设置和学习算法 中。
思维的结构
很难将思维本身概念化(正如我在最近一篇关于思维几何学的文章中更深入地探究的那样),但是有一些特定的结构和模式深深地贯穿于我们认知的几乎每一个方面。
正如 雷·库兹韦尔 在他的《如何创造心灵一书中解释的一样,我们以一种分层的方式感知世界,由复杂程度不断增加的简单模式组成。根据他的观点,模式识别形成了所有思想的基础,从最原始的模式到高度抽象和复杂的概念。**
以语言文字为例。小线条组成了我们可以识别为字母的图案。字母的组合形成单词,然后是句子。句子构成段落,整篇文章。最后,从以高度特定的方式排列的少量最小模式的分类中,叙事和意义出现了。
模式识别的生物学
现代神经成像数据表明,新大脑皮层由一种统一的结构组成,称为皮层柱。每一个都是由大约 100 个神经元组成的。
库兹韦尔提出,这些列构成了他所谓的最小模式识别器。通过将模式识别器的一层又一层相互连接来创建概念层次,每个模式识别器都专门从许多不同的可能感觉形态(如眼睛、耳朵、鼻子)的输入中识别单个模式。
基于基本的特征提取(如检测视觉刺激的边缘或识别音调),这些模式堆积起来形成越来越复杂的模式。
Layers detecting patterns of increasing sophistication in visual data, leading to abstract labels like “elephant” or “penguin”. Credit to Sven Behnke [CC BY-SA 4.0]
模式识别器并不局限于处理视觉或听觉刺激。它可以将各种信号作为输入进行处理,根据输入中包含的结构生成输出。学习意味着连接模式识别器,并学习它们的权重结构(基本上是它们对彼此输入的响应有多强,以及它们之间的互联程度),类似于学习神经网络时所做的事情。
但是大脑是如何在如此擅长解决许多不同任务的同时又如此同质的呢?答案可能在神经科学和计算机科学的交叉点上。
信息的作用
视觉、听觉和感官信息有什么共同点?显而易见的答案是,这都是某种信息。
坦白地说,在信息时代,信息的定义有点棘手,而且被扔得太多,但在大脑信息处理的背景下,它有一个技术含义。理解这种架构如何为我们工作得如此之好的一步在于认识到大脑可以被认为是一个信息处理设备。
神经元的输入有很多一致性,这是神经计算的基础。无论大脑在处理什么信号,它总是由神经元的空间和时间放电模式组成。我们在外部世界观察到的每一种模式都在我们的感觉器官中编码成神经放电模式,然后,根据库兹韦尔的说法,这些模式在模式识别器的层次结构中上下流动,直到成功提取出意义。
神经科学证据得到了计算机科学观点的支持。在他的书 中,主算法 , 佩德罗·多明戈斯 提出,我们可能会找到一种通用算法,给定 正确的数据 ,允许我们学习几乎所有我们能想到的东西 。
该通用学习算法甚至可以由现有学习算法的混合组成(如贝叶斯网络、连接主义或符号主义方法、进化算法、支持向量机等。).
大脑也可能使用类似于这种通用算法的东西,尽管我们还不太确定大脑如何从算法的角度学习。作为最基本的例子,当然,有 Hebbian 学习,它已经被证明在某种程度上发生在大脑中。对于更复杂的算法,研究人员一直在试图寻找在大脑中实现反向传播的生物学合理机制。
但是很明显,大脑非常善于学习,并且需要以一种我们原则上可以理解并且很可能在我们的计算机上模拟的方式来学习。
神经网络中的信息丢失
识别一个模式的诀窍是解码它,解析出隐藏在信号中的相关信息。了解大脑如何做到这一点可能是理解智力如何工作的关键步骤之一。
《论智能的的作者杰夫·霍金斯抱怨说,在研究信息在大脑中的作用时,我们缺乏工具,但在理解计算架构中的信息流方面已经取得了越来越多的进展。
今年夏天,我有幸参加了以色列神经科学家 纳夫塔利·蒂什比 关于他的信息瓶颈法的两场讲座。他目光炯炯,热情洋溢,让整个人群欢欣鼓舞,他解释了当深度神经网络从输入数据中提取相关特征时,信息是如何过滤的(观看他在斯坦福大学的演讲以了解介绍)。
该理论阐明了 信息如何在深度神经网络 中流动(并给出了深度网络比浅层网络工作得更好的一个很好的原因)。
当你学习从 300x300 像素的图片中识别一张脸时,你有 90000 像素包含信息,但是如果你知道通常组成一张脸的是什么,一张脸可以由更少的信息来表征(例如 相关特征 像眼睛的距离、嘴的宽度、鼻子的位置等等)。).
例如,这种想法被用在一些深度生成模型中,如自动编码器(正如我在关于如何让计算机做梦的文章中更详细地写的那样),其中数据的潜在、低维表示被学习,然后用于生成高维、看起来逼真的输出。
The basic setup of a neural network. Credit to Glosser.ca [CC BY-SA 3.0 (https://creativecommons.org/licenses/by-sa/3.0)]
像随机梯度下降这样的网络训练方法,通过有效地从输入中抛出所有不相关的信息,让网络过滤掉相关的模式(就像在对照片中的物体进行分类时忽略照片的背景,就像Iangood fellow在他的书 深度学习 中描述的那样)。
Tishby 把它比作从瓶子底部流到顶部的水:瓶颈越来越紧,越来越少的信息可以流过。但是如果瓶颈设置得好,到达顶部的水最终会携带所有必要的信息。
Photo by Jadon Barnes on Unsplash
我提出这一点是因为我认为这种信息理论的观点可以帮助我们理解新大脑皮层由模式识别器组成的想法。
模式识别器从数据中提取模式。这些模式只形成输入的一小部分,所以本质上,大脑的模式识别器被设置为从我们的感官数据中提取与我们生存相关的信息,并将这些提取的数据分类到知识的层次中(我在我关于思维几何的文章中更详细地讨论了如何将这些数据构建到概念空间中)。然后,我们可以用这些来给这个混乱的世界带来秩序,增加我们生存的机会。
这是大脑的工作。其核心是一个信息过滤和排序设备,不断从数据中学习有用的模式。
Jürgen Schmidthuber 将科学的进步比作寻找更高效的压缩算法:牛顿和爱因斯坦出色地设法没有提出庞大而难以理解的公式,而是用可以写成一行的方程表达了一系列令人难以置信的现象。Schmidthuber 认为,这种超压缩可能在某一点上也适用于一般的学习者。
压缩和信息过滤很可能是我们所认为的智能的核心,所以我们在构建自己的智能系统时,不妨从中学习一些东西(就像我们已经做的那样)。
为什么智力可能比我们想象的要简单
谈到人工智能的未来,我不是预言家,我希望你被教导不要太相信互联网上陌生人的意见,所以要有所保留。
我承认,信息处理和智能不仅仅是简单的模式分类(参见我关于蚂蚁和神经网络问题的文章)。
在我们“解决”智能之前,有许多问题需要解决。正如 Yann LeCun 在这里指出的,推断因果关系或一般常识知识结构是一个大问题,在算法中建立世界预测模型(正如我在关于贝叶斯大脑假设的文章中详细阐述的那样)很可能是许多必要步骤中的一个必要步骤。
当训练机器人智能地执行任务时,在强化学习中会遇到与更好的目标函数的需求相关的其他未决问题。聪明意味着解决问题,其中一个重要方面是找出定义目标的最佳方式,然后实现这些目标(在大脑中,这一角色在一定程度上被认为是由基底神经节扮演的)。
因此,仅仅堆积模式识别器不会突然带来像人类一样四处推理的机器人。
Photo by Franck V. on Unsplash
我仍然认为,新大脑皮层及其学习算法背后的简单性和普遍性的新证据所支持的遗传代码中所包含的信息的稀疏性应该让我们暂停一下,并更认真地抓住在不久的将来建造高度智能机器的机会(Kurzweil 预测机器将在 2029 年通过图灵测试,在 2045 年通过人类水平的人工智能)。
正如 P.W. Anderson 在他关于科学等级的著名论文中所说的那样, 更多的是不同的 ,如果我们想出正确的方法来扩大简单事物的使用,可能会产生更多的结果。其中一些已经在深度学习最近的成功中显而易见,深度学习与扩大可用数据和计算能力密切相关。
对我来说,理解和建立我们自己的智能绝对是一个激动人心的前景。
但是正如许多人强调的那样(这次 Ted 演讲给出了一个总结),人工智能的崛起可能会对整个人类产生重大影响,应该作为一个问题认真对待。而且即使我们高估了这个问题(因为我们坦白地爱思考世界末日有点太多),我们也应该安全胜于遗憾。
因为毕竟大自然是通过对进化 的盲目幻想而产生智慧的。看起来我们也可能很快会想到它。
为什么升压拟合有残差
原文:https://towardsdatascience.com/why-is-boosting-fitting-residual-9ac6f4e77550?source=collection_archive---------25-----------------------
Boosting 算法的一般解释
Gardens By The Bay Singapore
Boosting 算法在每次迭代中搜索最优的弱学习器函数,该函数在训练数据上最小化损失函数。每个新的学习者都会试图“纠正”以前的学习者所犯的错误。
动机
不用多介绍,大部分数据科学家应该都有使用各种 boosting 模型的经验,比如 XGBoost,用于项目或者 Kaggle 竞赛。许多文章将 boosting 算法描述为“递归地添加弱学习器以拟合先前学习器产生的残差”。嗯,是真的,但是为什么呢?本文旨在从更广泛的意义上解释助推的概念。
增压解释
Boosting 或Forward Stagewise Additive Modeling是一种集成学习方法,它将许多弱学习者组合起来,形成一个行为类似于强学习者的集合。它一般可以描述如下。
Boosting algorithm (Source: ESLII)
在详细解释每个步骤之前,让我们澄清一下这些符号。
- x,y :训练数据和实际值
- f ᵢ (x) :在 i 迭代中收集弱学习者
- M :要添加的树数
- N :训练数据点数
- β :扩展系数或集合中后续弱学习者的“权重”
- b(x;γ) :由一组参数 γ 表征的弱学习函数
- L(y,ŷ) :损失函数
现在让我们来看看每一步。
- 初始化基本集合以预测所有定型数据的 0
- 对于添加到集合中的每个后续弱学习者:
- a)在训练数据上找到最小化损失函数的最佳展开系数[β和参数组[γ。注意,损失函数接受实际值和来自先前集合[fₘ₋₁(x]和当前弱学习器函数[b(x;γ) ]
- b)找到最优的 β 和 γ 后,将学习能力弱的系数添加到集合中
最重要的步骤是 2a,它搜索最佳弱学习器函数以添加到集合中。当选择平方误差作为损失函数时,2a 中的公式可改写为:
Square Error Loss Function (Source: ESLII)
在这个表达式中, fₘ₋₁ 代表来自先前树的预测值。 yᵢ 代表实际值。 yᵢ - fₘ₋₁ 将输出前一个学习器的残差, rᵢₘ 。因此,为了最小化平方损失,每个新的弱学习器将拟合残差。
对于回归问题的其他常见损失函数,例如绝对误差和 Huber 损失,这种说法仍然成立,因为残差总是被计算的。
那么,分类问题呢?
对于 2 类分类问题,AdaBoost 是由 Freund 和 Schapire 在 1997 年推出的一种著名的 boosting 算法,它使用指数损失。在每次迭代中,训练样本将根据先前树的预测误差进行重新加权。错误分类的样本将被赋予更高的权重。后续树将适合重新加权的训练样本。尽管新树不直接与预测误差或偏差相匹配,但预测误差在匹配新树时起着重要作用。
Exponential Loss (Source: ESLII)
感谢阅读!
为什么为医疗保健构建机器学习产品如此困难?
原文:https://towardsdatascience.com/why-is-building-machine-learning-products-for-healthcare-so-hard-a0fdb9b132c7?source=collection_archive---------38-----------------------
挑战的七个原因
Image from Pixabay
过去几年,我一直在为美国的医疗保健机构构建基于机器学习的产品,这些年来,我几乎每天都意识到我们所做的事情极具挑战性。以下是七个原因:
1)还没有人确定配方
现在有数百个组织声称为医疗保健组织做机器学习或人工智能,这些组织大多是在过去 5 年内创建的。尽管如此,在与美国一些最大的医疗保健组织合作后,很明显成功的秘诀还没有完全确定。与娱乐、金融、科技、媒体等各种其他行业相比。医疗保健仍处于试图解决这一问题的早期阶段。不要误会我的意思,有许多伟大的产品已经或正在建造,并取得了令人震惊的早期成果,然而,没有多少成熟的机器学习或基于人工智能的产品正在大规模使用。这意味着要建立一个成功的基于人工智能或机器学习的产品,你必须创新第一个伴随着独特挑战和斗争的同类产品。
2)医疗服务提供者是最值得怀疑的客户之一,这是理所当然的
如果你在医疗科技行业工作过,你就会知道医疗服务提供商对科技产品非常挑剔。理解原因很重要:这些用户花费了数年时间来建立专业知识,使他们能够承担起照顾他人的重任。他们做的每一个决定都会对病人和他们的家人产生影响。尽管这些人在日常生活中基于机器学习产品做出决策,但在工作中,他们需要三思而行,因为他们的决策具有更高的影响力。这种巨大的影响使得这些用户对任何声称能解决他们问题的新技术特别怀疑和挑剔。在这个领域的最初几个产品完全没有达到目标后,这种怀疑进一步增加。这为医疗保健中的机器学习或人工智能产品带来了新的关注领域,如验证、准确性、可解释性和可操作性。
3)安全性、合规性和法规阻碍了创新
医疗保健是监管最严格的行业之一,有多部法律围绕数据的使用。虽然这可能是确保患者隐私的正确方法,但这导致基于数据的产品落后于医疗保健曲线。由于多年来行业内建立的各种安全和法规遵从性流程,我参与的几乎每个项目都进展缓慢。从较新的基于云的体系结构的角度来看,其中一些流程降低了数据的安全性,但是组织很难快速调整其策略和实践来满足当今基础架构的需求。医疗保健 IT 部门正在进行大量工作,以真正获得他们所拥有的数据的好处,从而使患者和业务受益。在那之前,对于基于数据的产品来说,这是一条崎岖不平的道路。
4)医疗保健组织内部的不一致
几乎所有组织的领导团队都认识到需要以数据为导向,转向主动决策和利用技术解决问题。他们渴望投资“创新”和“人工智能”,以便留在其他行业。在这一过程中,高管层做出了几项决策,但是,决策者似乎还没有让他们的组织为这一旅程做好充分准备。没有清晰的成功标准和整个组织的一致性,外部组织几乎不可能引入新的技术解决方案;除了产品本身,这是另一个需要解决的挑战。这就引出了下面的下一点。
5)技术只能到此为止
剩下的就是人了。医疗保健是由人驱动的,而不是技术。无论你的产品有多棒,都需要深入的人的参与,才能让你的产品进入医疗保健机构。作为一个产品经理,确定产品的边界是一个挑战,这样当你把它从一个组织带到另一个组织时,它足够大以至于完整,但又足够小以至于可重复。这需要对客户参与和实施团队以及产品团队进行投资,并在组织的生态系统中建立建立产品的流程。没有这一点,你的产品很快就会被淘汰。
6)基于 ML 的医疗保健产品给设计带来了新的挑战
当我查看医疗保健行业目前使用的几种技术产品的用户体验时,我感到非常惊讶。我很确定我的 UX 设计师同事差点心脏病发作。看看目前广为流传的东西,如果你认为创造一些漂亮、简单、极简的东西就能解决所有用户的挑战,那你就错了。医疗保健行业的大多数用户习惯于查看复杂的界面,并在头脑中处理各种数据点来做出决策。这为用户体验设计师带来了新的挑战,他们需要打造下一个时代的健康科技产品,这些产品既简单又全面。
7)数据是一场噩梦
最后但绝对不是最不重要的,数据!从一个组织到另一个组织的数据的质量、一致性和基础设施难以置信地难以处理。要构建可重复、一致且可扩展的产品,您必须在数据策略上有所创新。有几个数据表示的“标准”或相同标准的不同实现。数据点是分散的,并且大多数基础设施都不是为支持实时决策而构建的。在数据科学中,大部分时间都花在准备数据上,如果你在为医疗保健做数据科学,那就准备把几乎所有的时间都花在这上面。
尽管有这些挑战,我不得不说为医疗保健行业制造产品是最有收获的经历之一。铺路从来都不容易,但是容易的问题有什么乐趣呢?
为什么教育数据挖掘在研究中很重要?
原文:https://towardsdatascience.com/why-is-educational-data-mining-important-in-the-research-e78ed1a17908?source=collection_archive---------4-----------------------
Photo by Cole Keister on Unsplash
开展教育数据挖掘对教育学领域研究的价值
近年来,对人工智能的日益关注促进了数据挖掘和分析在教育领域的发展。(Baker 2014)数据挖掘是使用机器学习、统计学和数据库系统交叉的方法从大型数据集中提取新的方面和模式的过程。它也是数据库(KDD)中知识发现的一个领域,即从大量数据集中发现独特的和潜在有益的信息。(Fayyad et al. 1996)专门针对教育领域的数据挖掘被称为教育数据挖掘(EDM)。EDM 是指用于从教育记录(通常是在线日志)和考试结果中获取信息,然后分析这些信息以得出结论的技术、工具和研究设计。EDM 以理论为导向,注重与教育学理论的联系(Berland et al .,2014)。目前,几乎没有实证证据支持能够在科学界获得广泛接受的理论框架(Papamitsiou & Economides,2014)。鉴于在现实世界中有各种不同的学习环境,它们决定了 EDM 所使用的分析方法。因此,正如研究中所展示的那样,EDM 如何在实际教育实践中受益可能是至关重要的。
什么是教育数据挖掘?
随着 2008 年教育数据挖掘年度国际会议和教育数据挖掘杂志的成立,EDM 成为一个可信的研究领域(Baker et al .,2010)。国际教育数据挖掘协会主办了国际教育数据挖掘会议,并出版了《教育数据挖掘杂志》,它给出了 EDM 的定义:
“教育数据挖掘是一门新兴学科,致力于开发方法来探索从教育环境中获得的独特且日益庞大的数据,并使用这些方法来更好地了解学生和他们学习的环境”(国际教育数据挖掘协会,2011)。
根据国际教育数据挖掘协会(2011),任何学习环境中的信息通常由多个层级组成,这些层级无法预先确定,但必须通过数据中发现的属性进行验证。在教育数据的研究中,时间、顺序和背景等因素也是重要的考虑因素。例如,可以分析学生的学习行为(学生的参与、登录频率、聊天消息的数量以及提交给教师的问题类型)以及他们的最终成绩。(阿卜杜斯等人,2012 年)
用于记录数据和分析数据的在线学习平台决定了可以记录哪些关于学习行为的信息。如果在线学习平台的数据库没有关于时间的属性或变量,研究者就无法分析学生完成考试的时间。因此,EDM 可以处理的信息依赖于在线学习平台预先确定的数据的性质。事实上,由于机器学习技术的进步,在现实世界中使用在线学习平台的学习设计是不同的,并且仍然在发展。因此,教育数据挖掘的最新研究将有助于 EDM 研究领域的发展。
学习分析与教育数据挖掘
对于采用 EDM 方法的研究人员来说,EDM 的含义并不清楚,因为 EDM 与学习分析(LA)的研究领域密切相关。
学习分析是对关于学习者及其环境的数据进行测量、收集、分析和报告,目的是理解和优化学习及其发生的环境。(2016 年学习分析与知识等国际会议)
洛杉矶是一个相当新的领域,越来越受欢迎。一般来说,LA 基于两个前提:LA 以计算机可以处理的形式处理预先存在的数据,并且它的技术可以被接受来处理大量人工无法处理的数据。(Ferguson 2012)洛杉矶和 EDM 研究团体对如何获取和分析教育数据持有不同的观点(Berland 等人,2014)。LA research 的研究人员采用更多的人为主导的发现方法,更加关注整体系统和理解结构,然后寻找方法通知和授权教师和学习者;例如,告知教师某个学生正在努力学习的方式,这样教师就可以联系学习者并以积极的方式进行干预,以促进该学生的学习(Berland et al .,2014)。
另一方面,EDM 研究人员更加关注利用自动化方法在教育数据中进行发现,对特定结构及其之间的关系进行建模,以及在自动化适应中的应用,例如通过让教育软件识别并自动改变它以个性化学习者的体验来支持学习者的体验(Berland et al .,2014;Arroyo 等人,2007 年;贝克等人,2006 年;Corbett & Anderson,1995)。
使用行政领导和管理的目标和利益相关者
虽然 EDM 和 LA 的特征略有不同,但由于依赖于在线学习技术产生的二次数据,改变数据量的影响因素是相同的。教学环境中使用的新技术和公共数据库的出现增加了数据的数量,并使数据的质量有所不同。例如,移动设备可以让研究人员更详细地捕捉学习者的互动。(Berland et al. 2014)研究直觉开放公共档案,如匹兹堡学习中心的科学数据商店,其中包括大量的数据,任何科学研究人员都可以访问。(Koedinger 等人,2010 年)因此,EDM 和 LA 技术的特点也很容易受到教育环境中使用的新技术的影响。(Marie Bienkowski et al .,2012)虽然严格区分 EDM 和 LA 的含义似乎没有意义,但就使用 EDM 的目标和利益相关者的分类而言,Baker 和 Yacef (2009)的以及 Romero 和 Ventura (2010)的描述如下。Baker 和 Yacef (2009 年,第 5-8 页)总结了以下四个 EDM 目标:
- 通过改进学生模型预测学习者的行为。建模是对学生的特征或状态进行描述和分类,这些特征或状态构成了学生的知识、动机、元认知和态度。
- 发现或改进知识领域结构模型。例如,有教授材料的概念模型和解释领域中知识的相互关系的模型(Barnes,2005)。
- 研究通过学习系统对学生学习最有效的教学支持。
- 建立经验证据来支持或阐明教学理论、框架和教育现象,以确定学习的核心影响因素,从而设计更好的学习系统。
EDM 的目标是通过调整心理测量学、采用统计技术和挖掘存储在离线教育环境中的日志数据来实现的,包括面对面接触、研究人类如何学习的心理学、参与从电子学习和学习管理系统(LMS)获得的在线学习以及使用智能辅导系统(ITS) (Romero & Ventura 2010)。
此外,行政领导和管理中使用的信息面向若干利益攸关方(Liñán 和佩雷兹,2015 年)。不同的利益相关者团体从不同的角度审查教育信息,遵循他们自己的使命、愿景和使用 EDM 的目标(Hanna,2004)。Romero 和 Ventura (2010 年,第 2 页)根据四个利益相关方使用 EDM 的目标对其进行了分类:
- 学习者:优化个人的学习风格、学习材料和学习体验,或者推荐。
- 教育工作者:分析学生的学习行为,获得最支持的指导,并预测学生的学习以提高教学效果。
- 研究人员/开发人员:评估学习材料,改进学习系统,评估数据挖掘技术的有效性。
- 组织:从效率和成本方面改进高等教育机构的决策过程,如入学程序和财政资源分配。
Figure 1 created by Jesse Tetsuya
考虑
有一些出版物提到了检验上述分类法的实践和经验研究,尽管它们是理论上构建的。例如,根据 Papamitsiou 和 Economides (2014 年)对实践中的 LA 和 EDM 的系统审查,在排除理论研究之前,只有 209 项成熟的研究工作,将关键的实证研究限制为 40 项,包括使用 EDM 的所有目标。
此外,关于 EDM 的实证研究也是教育行业,尤其是高等教育的需要。这是因为高等教育机构有大量的数据足以进行分析。(Kollias 等人,2005 年)虽然教育工作者不知道如何在自己的实践中进行 EDM。由于缺乏技术培训,他们也可能不知道如何使用最新的技术以及为什么它很重要。(Selwyn,2011)作为 EDM 主要分析技术的复杂和新的机器学习技术可能会困扰教育工作者。
参考
Abdous,m .,Wu,h .和 Yen,c . j .(2012 年)。使用数据挖掘预测在线问题主题和期末成绩之间的关系。教育技术学杂志&社会,15(3),第 77 页
贝克和德卡瓦略(2008 年)。使用文本回放更快更准确地标记学生行为。在教育数据挖掘 2008 。可在:http://www . educational data mining . org/conferences/index . PHP/EDM/2008/paper/download/759/725查阅【2017 年 8 月 30 日】。
贝克等人(2010 年)。教育数据挖掘。国际教育百科,7(3),第 112–118 页。
R.S .贝克(2014 年)。教育数据挖掘:教育智能系统的进步。 IEEE 智能系统,29(3),第 78–82 页。
贝克,R.S.J. d & Yacef,k .(2009 年)。2009 年教育数据挖掘状况:回顾与展望。JEDM——教育数据挖掘杂志,1(1),第 3–17 页。
Berland,Ryan|Blikstein,Paulo,(2014 年)。教育数据挖掘和学习分析:建构主义研究的应用。技术、知识和学习,19(1–2),第 205–220 页。
法耶兹,u .,皮亚泰茨基-夏皮罗,g .和史密斯,p .(1996 年)。从数据挖掘到数据库中的知识发现。艾杂志,17 卷 3 期,第 37 页。
弗格森河(2012 年)。学习分析:驱动力、发展和挑战。国际技术增强学习杂志,4(5/6),第 304 页
费亚德,乌姆,(1996 年)。数据挖掘和知识发现:使数据有意义。 IEEE 专家,11(5),第 20–25 页。
国际教育数据挖掘协会(2011 年)。国际教育数据挖掘协会。国际教育数据挖掘协会。可在/home[2017 年 6 月 26 日访问]获得。
汉娜,m .(2004 年)。电子学习领域的数据挖掘。校园范围的信息系统,21(1),第 29–34 页。
k . r . koe dinger,D'Mello,s .,McLaughlin,E.A .,Pardos,Z.A .和 Rosé,c . p .(2015 b)。数据挖掘与教育。威利跨学科评论:认知科学,6(4),第 333–353 页。
李宁,L.C .和佩雷斯,Á,美国法学家协会(2015 年)。教育数据挖掘和学习分析:差异、相似和时间演变。 RUSC。大学与知识社会期刊,12(3),第 98–112 页。
Papamitsiou,z .和 Economides,a . a .(2014 年)。实践中的学习分析和教育数据挖掘:经验证据的系统性文献综述。教育技术学杂志&社会,17 卷 4 期,第 49 页。
罗梅罗和文图拉(2010 年)。教育数据挖掘:对当前技术水平的回顾。 IEEE 系统、人和控制论汇刊,C 部分(应用和评论),40(6),第 601–618 页。
塞尔温,尼尔。(2011).教育和技术:关键问题和争论。伦敦;纽约州纽约市:布卢姆斯伯里学术出版社,布卢姆斯伯里出版公司的一个分支
为什么每个人都在谈论云?
原文:https://towardsdatascience.com/why-is-everybody-talking-about-the-cloud-b3fcfa1dda76?source=collection_archive---------13-----------------------
基于云的机器学习完全初学者指南
您的业务依靠数据运行。你的生活可能依赖于数据。
云使这成为可能。
如果你真的想建立可扩展、灵活和强大的机器学习模型(或者确保你的团队能够建立这些模型),那么你可能想开始适应云。
GIF via GIPHY
云已经是你生活的一部分了
我们生活的很大一部分是由机器学习算法主导和驱动的。这些算法现在被用于几乎每个领域来建立模型,以惊人的可靠性预测未来事件。大多数算法和模型都是基于云的。
人工智能和机器学习算法是推动社交媒体、营销、客户支持、欺诈检测、商业智能以及我们每天看到的几乎每部电影和音乐推荐的力量。
我们正在与机器学习算法对话,并向它们提问。我们让他们帮助我们做出最基本的决定,比如看什么、读什么、听什么、穿什么。正如我们所知,机器学习和人工智能正在成为商业领域的标准。很难想象大部分工作不会发生在云中。
开始喜欢吧!
Photo by nappy via Pexels
为什么我们需要基于云的机器学习?
现在,我们正在以难以控制的速度收集和积累大量数据。企业收集网站点击、社交媒体互动、信用卡交易、GPS 跟踪等等。但对大多数公司来说,处理所有这些信息并以任何有意义的方式使用它们几乎是不可能的。
进入机器学习!一个好的算法将使用收集的数据来学习模式并预测见解和结果,这可以帮助我们做出更好的决策,这些决策是由实际分析支持的。
你可能比你意识到的更熟悉这个。你使用过社交媒体吗?每当你看到一个你可能认识的朋友的推荐或者一篇你可能喜欢的文章,那就是一个机器学习算法。你在网上看视频吗?您是否注意到了正在向您推荐的其他视频?机器学习!申请过信用卡或贷款吗?银行主要让一种算法根据你的信用评分来决定是否让你拥有信用卡(以及收取多少利息)。您的信用评分基于您的信用历史、您拥有的贷款(和申请的贷款)以及其他类型的数据。所有这些数据都必须以闪电般的速度大量收集、分析和解释。
这就是云的由来。
Photo by Guilherme Rossi from Pexels
谁在使用人工智能、人工智能和云计算?
根据埃文斯数据公司最近的一项调查,目前有 650 万名开发人员正在使用某种形式的人工智能(AI)或机器学习(ML),另有 580 万人计划在 6 个月内开始使用人工智能或机器学习。鉴于全球有超过 2200 万开发人员,这意味着大多数人(约 56%)要么正在使用这些技术,要么即将开始使用。
在其技术、媒体和电信预测中,德勤全球预测,2019 年,企业将加速使用基于云的人工智能软件和服务。在采用人工智能技术的公司中,70%将通过基于云的企业软件获得人工智能能力,65%将使用基于云的开发服务创建人工智能应用。到 2020 年,在使用人工智能软件的公司中,集成人工智能和基于云的人工智能平台的企业软件的渗透率估计将达到 87%和 83%。云将推动更多全面的人工智能实施,更好的人工智能投资回报率(ROI ),以及更高的人工智能支出。正因为如此,我们将能够看到和建立过去只属于早期采用者的人工智能能力和优势。
最重要的是,国际数据公司预测,2019 年全球人工智能系统的支出预计将达到 358 亿美元。这比 2018 年的支出增加了 44.0%。随着各行业积极投资使用人工智能软件功能的项目,预计人工智能系统的支出将在 2022 年翻一番以上,达到 792 亿美元。
大部分开发都发生在云中。
Photo by Jimmy Jimmy from Pexels
如果你正在管理一个数据科学团队,你需要考虑这会对你的业务产生怎样的影响。
什么变了?
在很长一段时间里,机器学习模型对大多数企业来说都遥不可及。光是费用就让他们望而却步。即使一个企业有能力实现一个模型,它可能也没有人能够设计一个模型并解释其结果。基于云的机器学习解决方案改变了这一点。相对而言,它们的运营成本很低,而且通常带有针对复杂问题的预建解决方案。
基于云的机器学习的最大优势之一是,它让组织能够访问他们自己无法负担(或正确使用)的高性能基础设施。ML 应用需要大量的处理能力。这在传统上是非常昂贵的!现在,许多组织使用依赖 GPU 处理 ML 工作负载的系统。在云中租用这些系统比直接购买要便宜得多。
虽然这有时是一个复杂的过程,但土星云具有一键式能力,可以在 GPU 上运行。此外,对于企业层来说,这是构建自己的云托管数据科学环境的绝佳替代方案。有了这些,你通常不得不处理维护需求、高成本(比如需要全职员工来管理所有细节)和频繁的重新设计以跟上更新。成千上万的人使用土星云,因为它使生活变得简单。
基于云的机器学习通常还包括访问负担得起的数据存储。随着数据量的持续增长,企业发现将数据转移到公共云系统比继续将其存放在自己的数据中心成本更低。如果数据已经存储在云中,使用基于云的 ML 服务通常是有意义的。传输大量数据既费时又费钱。
云使得企业可以很容易地试验机器学习能力,并随着项目投入生产而扩大规模。它让你获得智能,而不需要太多数据科学和人工智能方面的高级技能,你也经常可以获得机器学习选项,而不需要深入了解机器学习理论和人工智能。
云真正令人兴奋的是它允许协作的方式。虽然每个平台都不同,但土星云是我最喜欢的协作方式,因为它非常简单。你几乎可以不费吹灰之力地设置好它,然后你选择的任何人都可以通过点击一个按钮来进行协作。这是在 Jupyter 笔记本上协作的唯一简单方式。
(我是 Jupyter 笔记本的超级粉丝…)
[## 技巧、窍门、诀窍和魔法:如何毫不费力地优化您的 Jupyter 笔记本电脑
让 Jupyter 笔记本变得更好、更快、更强、更光滑、更棒的完整初学者指南
towardsdatascience.com](/how-to-effortlessly-optimize-jupyter-notebooks-e864162a06ee)
我能在哪里进入?
虽然我是土星云和他们基于云的 Jupyter 笔记本的忠实粉丝,
[## 如何毫不费力地创建、发布甚至共享云托管的 Jupyter 笔记本
完全初学者指南,以闪电般的速度在 Jupyter 笔记本上创建、运行和协作…
towardsdatascience.com](/getting-started-with-saturn-cloud-jupyter-notebooks-b3f509a500ef)
(完全披露:我绝对为土星云做过工作,得到过他们的报酬,知道土星云有多好,能做什么。)
…现在有很多云机器学习工具和服务。其中包括谷歌云平台、亚马逊 Web 服务、微软 Azure 、 IBM Cloud 、甲骨文 Cloud 等等。关于 Saturn Cloud 的一个很酷的事情是(对于企业层来说),它们是多云,所以人们可以在 AWS、Google 和 Azure 云上使用 Saturn,而不会被任何一个供应商所束缚。
如果你想处理大量的数据,在云中进行机器学习是你目前最好的选择,无论是在速度上还是在操作的规模上。云变得越智能,它对定义下一代数据服务和整个商业未来的工作就越有吸引力。
Photo by Chandrashekar Hosakere Matt from Pexels
感谢阅读!和往常一样,如果你对这些信息做了什么酷的事情,请在下面的评论中让所有人都知道,或者联系 LinkedIn@ annebonnerdata!
为什么大家都去冰岛?
原文:https://towardsdatascience.com/why-is-everyone-going-to-iceland-1f99083bee1a?source=collection_archive---------20-----------------------
Photo Credit: Thampitakkull Jakkree/Shutterstock
我试着用公开的数据来源来理解冰岛旅游业的崛起。
你好!(冰岛语再次问好)。在空闲时间,我喜欢在 YouTube 上看视频,主题包括摄影、电影、足球、喜剧等。我最近开始关注约翰尼·哈里斯的频道,是在看了他关于建立一个梦想工作室的视频后,无意中发现了他对冰岛旅游业为何大幅增长的分析(链接如下)。我一直想和我的摄影师朋友 Pablo 一起去冰岛,因为这个国家风景优美。
在这篇文章中,我决定利用公共数据来解释为什么冰岛的旅游业如此迅猛发展。视频本身很好地解释了旅游业的突然激增,并给出了一些很好的理由。我在这里的观点不是要反驳他的论点,而是用数据来看看我从中学到了什么。我找到公共数据源,清理数据,将数据可视化,并使用脸书先知进行预测。
数据源
对于我的调查,我就像在大学写研究论文时一样开始:谷歌搜索。我在查询相关的公共数据集,以便下载和分析。我选定了三个主要数据集,并在此附上了链接:
- 通过凯夫拉维克机场前往冰岛的游客:这是国际交通的主要枢纽。我没有找到所有交通枢纽的所有游客的统计数据,但我认为这将是一个很好的整体样本。
airport = pd.read_excel(“/Users/stephenhyungilkim/Desktop/Iceland/hola.xlsx”, parse_dates=[“year”], index_col=”year”, freq=’Y’)
airport.head(5)
2。事实列表冰岛:这是从世界银行找到的,我把它简化为最相关的 20 个因素。有超过 150 个不同的类别,我把它减少到我最感兴趣的类别。
https://data.worldbank.org/country/iceland
facts = pd.read_csv(“/Users/stephenhyungilkim/Desktop/Iceland/chau.csv”, parse_dates=[“Date”], index_col=”Date”)
facts.head(5)
以下是所有缩减列的列表:
3。每年的航空乘客数量:1949 年至 2017 年期间,通过航空和海路抵达冰岛的外国游客。
visitor = pd.read_excel(“/Users/stephenhyungilkim/Desktop/Iceland/foreign-visitors-to-iceland-1949–2017.xls”,parse_dates=[“Date”])
#Foreign visitor arrivals by air and sea to Iceland 1949–2017
visitor.head(5)
数据预处理
脸书预言家要求数据采用特定的格式,以便符合模型并做出预测。我使用数据集 3 进行脸书预言家预测,因为它包含了我正在寻找的变量,访问者数量。然而,其他两个数据集(1 和 2)也很有趣,可以看到相关性、模式等。
visitor[‘Date’] = pd.DatetimeIndex(visitor[‘Date’])
visitor.dtypes
确保数据集是时间序列:
visitor = visitor.drop([‘percentage change’], axis=1)
我放弃了百分比变化,只留下了日期和访客人数。我们将对未来几天的访客数量进行预测,具体日期我们将在后面说明。
visitor = visitor.rename(columns={‘Date’: ‘ds’,
‘visitors’: ‘y’})
visitor.head(5)
这些列必须重命名为“ds”,即日期,以及“y”,即我们要预测其值的变量。
我们准备使用脸书先知,但在此之前,让我们来看看这个和其他两个数据集。
数据可视化
让我们从可视化第一个数据集开始。美国显然有很多感兴趣的游客…不知道为什么,也许口碑和更便宜的航班促成了这一点(机票价格是我想分析的一个问题,但找不到公开数据…)。
airport.plot(figsize=(15,10))
plt.title(‘Visitors to Iceland Through Keflavik Airport’)
plt.ylabel(‘Visitors’)
plt.xlabel(‘Date’)
现在让我们来看看数据集#2。由于我们有这么多不同的变量,我从降序的 correlation_matrix 开始。很明显,像“航空运输、载客”和“国际旅游、抵达人数”是高度相关的,因为更多的乘客=更多的抵达人数,但其他像“银行流动储备与银行资产的比率(%)”和“人均国民总收入(当前 LCU)”更令人惊讶和具有争议性。
corr_matrix = facts.corr()
corr_matrix[“International tourism, number of arrivals”].sort_values(ascending=False)
我也试着使用直方图,但是它没有我想象的那么有用,所以我把它去掉了。
现在让我们看看第三组数据。
ax = visitor.set_index(‘ds’).plot(figsize=(15,10))
ax.set_ylabel(‘Monthly Number of Airline Passengers’)
ax.set_xlabel(‘Date’)
#ax.set_yscale(‘log’)plt.show()
正如约翰尼·哈里斯在视频中所说,你可以看到乘客数量的飞速增长。由于比例太大,我把图表做成对数比例。除了多了一行以外,代码相同:
ax = visitor.set_index(‘ds’).plot(figsize=(15,10))
ax.set_ylabel(‘Monthly Number of Airline Passengers’)
ax.set_xlabel(‘Date’)
ax.set_yscale(‘log’)plt.show()
使用脸书先知的预测
虽然我主要应用 scikitlearn 库中的机器学习模型,因为这很容易,但我想尝试用脸书预言家预测时间序列。我读了一篇由 Susan Li 写的文章,并按照下面文章中的步骤进行了操作:
https://www . digital ocean . com/community/tutorials/a-guide-to-time-series-forecasting-with-prophet-in-python-3
让我们将模型设定为 95%的不确定性。以下是关于先知的更多信息:https://facebook.github.io/prophet/
# set the uncertainty interval to 95% (the Prophet default is 80%)
my_model = Prophet(interval_width=0.95)
正在拟合模型…
my_model.fit(visitor)
设定未来日期。请注意,我在频率中用“A”表示年度。
future_dates = my_model.make_future_dataframe(periods=10, freq=’A’)
future_dates.tail()
上面,为 2022、2023、2024、2025、2026 年创建了数据帧。
forecast = my_model.predict(future_dates)
forecast[[‘ds’, ‘yhat’, ‘yhat_lower’, ‘yhat_upper’]].tail()
我们得到了自变量的值。“yhat_lower”是下限,“yhat_upper”是上限。
my_model.plot(forecast, uncertainty=True)
下面,我们有一个预测图:
Above, we have a forecast plot.
Prophet 还允许我们将其分解为我们预测的组成部分:
最后的话
虽然去冰岛旅行可能仍然是一个幻想,因为我今年早些时候已经用完了我的假期计数,但使用公共数据源来了解冰岛为什么最近成为如此受欢迎的旅游目的地是一件有趣的事情。我喜欢交叉引用#3 数据集和历史天气数据集。我尝试使用 OpenWeatherMap 的 API,它很容易使用,但必须为其全部功能付费。冰岛绝对在我的遗愿清单里!
为什么很难找到优秀的数据科学经理?
原文:https://towardsdatascience.com/why-is-it-so-hard-to-find-great-data-science-managers-6fc8aac62f6e?source=collection_archive---------8-----------------------
数据科学正在全球范围内蓬勃发展, IBM 预测,到 2020 年,该行业将有大约 270 万个机会。许多公司相信这种纪律将是他们领导团队决策的未来。正因为如此,数据科学的工作岗位急剧增加,数据科学家大量涌入。
这通常是事后的想法,但问题出现了:谁能管理和领导这个团队?
伟大的数据科学家并不总能成为伟大的人事经理
做质量技术工作的能力和管理没有很高的相关性。数据科学也不例外。造就伟大数据科学家的因素不一定造就伟大的数据科学经理。
虽然一些数据科学家在团队中工作,但大部分数据科学工作都是孤立进行的。伟大的数据科学表演者可以深入研究特定的问题,并以优雅的洞察力浮出水面。另一方面,经理必须在某种程度上浅层次地理解许多项目和概念。对于许多数据科学家来说,这种对问题的高层次理解不会令人兴奋或满足。
此外,经理与组织内人员互动的方式偏离了传统的数据科学角色。经理们必须适应与不同的团队合作,处理办公室政治,推销工作的成功。通常,数据科学家与利益相关者的接触有限,并且不想卷入公司的旋转木马。
话虽如此,如果数据科学家发展了在跨职能团队中工作的技能,他们仍然可以成为优秀的管理者。即使有合适的资质,这个群体也可能对管理者每天处理的问题类型不感兴趣。
其他业务部门的经理可能会感到力不从心
有一般管理经验的人也容易在这个角色上纠结。来自软件工程或业务部门(财务、会计等)的经理。)可能难以理解数据科学家并定义他们的项目工作。
与软件工程师或其他业务部门的工作人员相比,数据科学家的背景大多是学术性的。来自其他学科的管理者可能很难与这个群体产生共鸣。大多数其他业务职能首先关注实施,然而,数据科学是以理论为基础的。经理需要能够与数据科学家合作,将问题从理论转化为实践。
通常,理论是数据科学项目的基本组成部分。我将这些项目视为软件工程和咨询任务的混合体。概括地说,软件工程是关于制定一个伟大的计划并执行它;咨询是关于收集信息和起草建议。数据科学工作抓住了这两个要素。数据科学经理需要明白,这些项目与他们之前参与的项目有着根本的不同。
数据科学家创造了不可靠的权力动态
数据科学家通常非常聪明,可以来自各种背景。这是一个相对来说学者过多的领域。这些员工带来的学术文化有时会与传统的商业工作场所发生冲突。
数据科学家的年龄也可能有很大差异;许多经理比他们的数据科学员工更年轻,甚至可能赚得更少。虽然谈论这个可能不太合适,但这会在工作场所造成一些摩擦。我不认为年龄或工资会影响工作关系,但毫无疑问,它们会。
谁应该管理这个组?
要成为一名成功的数据科学经理,需要三样东西:(1)对领域和算法的理解(2)对项目性质的理解(3)管理人员和利益相关者的能力。有这种三连胜的人很难找到;然而,有几个合乎逻辑的地方可以看看。
经验丰富的数据科学经理——你或许可以从另一家公司挖走他们中的一员。如果你的提议有什么吸引人的地方,你可以引诱这些独角兽中的一个离开现有的职位。
本土 —这需要有意识地努力发展你目前拥有的数据科学家的软技能。如果你做得很好,团队中的一些人对此感兴趣,你可能会培育出一个赢家。
数据科学顾问 —数据科学咨询的受欢迎程度与该领域的崛起成正比。担任这些角色的人通常从事短期项目,并且必须更频繁地与风险承担者互动。他们被迫培养许多管理者需要的软技能。如果他们在这个职位上已经工作了足够长的时间,那么向管理层的过渡就是顺理成章的下一步。
这并不是说只有具备这些背景的人才能成为成功的管理者。这些只是我认为最一致的地方。狩猎愉快!
为什么将机器学习整合到真实的商业应用中如此困难?
原文:https://towardsdatascience.com/why-is-it-so-hard-to-integrate-machine-learning-into-real-business-applications-69603402116a?source=collection_archive---------27-----------------------
你已经玩了机器学习,了解了神经网络的奥秘,几乎赢得了一场 Kaggle 比赛,现在你觉得已经准备好将这一切带到现实世界中。是时候构建一些真正的基于人工智能的应用程序了。
但是一次又一次,你面临挫折,你并不孤单。从一个像样的机器学习模型转移到下一个将其融入实际商业应用的水平需要时间和努力。为什么?
拥有一个训练有素的机器学习模型只是一个起点。对于一个正常运行的应用程序,还有许多其他需要考虑的事项和组件需要构建、测试和部署。
在下面的帖子中,我将展示一个真实的基于人工智能的应用程序(基于一个真实的客户用例),解释挑战并提出简化开发和部署的方法。
用例:在线产品推荐
有针对性的产品推荐是增加收入的最常见方法之一,计算机会根据用户的历史偏好、产品与产品的相关性以及其他因素(如位置(如离商店的远近)、天气等)提出建议。
构建这样的解决方案需要分析历史交易并创建模型。然后,当将其应用于生产时,您会希望纳入新的数据,如客户的最后一次交易,并重新训练模型以获得准确的结果。
机器学习模型很少在原始数据上训练。需要进行数据准备以形成特征向量,这些特征向量将各种数据源聚合和组合成更有意义的数据集,并确定一个清晰的模式。一旦准备好数据,我们就使用一种或多种机器学习算法,进行训练,并创建模型或新的数据集,其中包含学习内容。
对于推荐引擎,最好结合深度学习(例如 TensorFlow )来识别哪些产品是“一起”购买的,以及机器学习(例如 XGboost )来基于用户和产品的历史行为识别用户和产品之间的关系。然后,将两个模型的结果合并到一个模型服务应用程序中。
Example pipeline: Real-time product recommendations
服务应用程序接受用户的 ID,从特性和用户表中获取额外的上下文,将其输入到模型中,并返回一组产品推荐。
请注意,服务必须在用户仍在应用程序中浏览时实时完成,因此缓存数据和模型总是更好。另一方面,最近的产品购买或位置可能会对未来的客户产品选择产生重大影响,您需要不断监控活动并更新功能表和模型。
在线业务需要自动化和应用到机器学习操作中的 CI/CD 流程,从而实现连续应用。支持自动扩展、满足需求波动、承受故障和提供数据安全性非常重要,更不用说考虑监管约束了。
机器学习操作流程
在典型的开发流程中,开发代码或模型只是第一步。最大的努力是使每个元素,包括数据收集、准备、培训和服务生产就绪,使它们能够在最少的用户干预下重复运行。
What it takes to turn code or algorithms into real application
数据科学和工程团队需要打包代码、解决可伸缩性、调整性能、工具化和自动化。这些任务现在需要几个月的时间。正如我在之前的文章《无服务器:可以简化数据科学项目吗?。其他需要记住的重要工具是 Kubernetes 和 KubeFlow ,它们为机器学习世界带来了 CI/CD 和开放性。在我的帖子Kubernetes:ML 管道的开放和可伸缩方法中阅读更多关于它们的内容。
机器学习代码的可移植性和可再现性
一个关键的挑战是,相同的代码可能在不同的环境中运行,包括用于实验的笔记本、ide(例如 PyCharm )和用于在集群上运行或作为自动化 ML 工作流引擎的一部分的容器。在每个环境中,您可能有不同的配置并使用不同的参数、输入或输出数据集。很多工作花费在移动和更改代码上,有时是由不同的人完成的。
运行工作后,您希望能够快速可视化结果,将它们与过去的结果进行比较,并了解哪些数据用于生成每个模型。针对这些需求有特定于供应商的解决方案,但是如果您想要实现跨环境的可移植性,就不能使用它们。
Iguazio 与领先公司合作,为机器学习环境、元数据和工件形成跨平台标准和开放实现。这允许更大的简单性、自动化和可移植性。
观看此视频,了解如何在不到一分钟的时间内从本地 IDE 中运行/测试代码转移到生产级自动化机器学习管道(基于 KubeFlow)。
Automated ML pipeline and artifact management using KubeFlow
为什么机器学习部署很难?
原文:https://towardsdatascience.com/why-is-machine-learning-deployment-hard-443af67493cd?source=collection_archive---------3-----------------------
Source
在几个人工智能项目之后,我意识到,对于那些愿意通过人工智能创造价值的公司来说,大规模部署机器学习(ML)模型是最重要的挑战之一,随着模型变得更加复杂,这只会变得更加困难。
根据我作为顾问的经验,只有很小比例的 ML 项目能够进入生产阶段。人工智能项目失败的原因有很多,其中包括部署。对于每个决策者来说,充分理解部署是如何工作的,以及在达到这一关键步骤时如何降低失败风险是至关重要的。
部署的模型可以定义为无缝集成到生产环境中的任何代码单元,可以接收输入并返回输出。
我看到,为了将他们的工作投入生产,数据科学家通常必须将他或她的数据模型交给工程来实现。正是在这一步,一些最常见的数据科学问题出现了。
挑战
机器学习有一些独特的功能,这使得它更难大规模部署。这是我们正在处理的一些问题(其他问题也存在):
**管理数据科学语言 **
如你所知,ML 应用程序通常由用不同的编程语言编写的元素组成..。并不总是能很好地相互交流。我见过很多次,ML 管道以 R 开始,以 Python 继续,以另一种语言结束。
总的来说,Python 和 R 是 ML 应用程序最流行的语言,但是我注意到由于各种原因,包括速度,生产模型很少使用这些语言。将 Python 或 R 模型移植到 C++或 Java 之类的生产语言中是很复杂的,并且经常导致性能(速度、准确性等)下降。)的原始模型。
r 包可以在软件新版本出来的时候破)。此外,R 很慢,不会高效地处理大数据。
它是一种很好的原型语言,因为它允许简单的交互和问题解决,但是它需要被翻译成 Python 或 C++或 Java 来生产。
容器化技术,比如 Docker,可以解决大量工具带来的不兼容性和可移植性问题。然而,自动依赖检查、错误检查、测试和构建工具将不能跨越语言障碍解决问题。
再现性也是一个挑战。事实上,数据科学家可能会构建模型的许多版本,每个版本都使用不同的编程语言、库或同一库的不同版本。很难手动跟踪这些依赖关系。为了解决这些挑战,需要一个 ML 生命周期工具,它可以在培训阶段自动跟踪和记录这些依赖关系,将其作为代码进行配置,然后将它们与经过培训的模型捆绑在一个随时可以部署的工件中。
我建议您依赖一种工具或平台,它可以立即将代码从一种语言翻译成另一种语言,或者允许您的数据科学团队在 API 背后部署模型,以便它们可以在任何地方集成。
计算能力和 GPU 的
神经网络通常非常深入,这意味着训练和使用它们进行推理会占用大量计算能力。通常,我们希望我们的算法运行得很快,对于很多用户来说,这可能是一个障碍。
而且,现在很多制作 ML 都依赖 GPU。然而,它们是稀缺和昂贵的,这容易给扩展 ML 的任务增加另一层复杂性。
便携性。
模型部署的另一个有趣的挑战是缺乏可移植性。我注意到这通常是遗留分析系统的问题。由于缺乏将软件组件轻松迁移到另一个主机环境并在那里运行的能力,组织可能会受限于特定的平台。这可能会在数据科学家创建和部署模型时造成障碍。
可扩展性。
对于许多人工智能项目来说,可扩展性是一个真正的问题。事实上,您需要确保您的模型能够扩展并满足生产中性能和应用程序需求的增长。在项目开始时,我们通常在可管理的范围内依赖相对静态的数据。随着模型进入生产阶段,它通常会暴露于更大量的数据和数据传输模式。您的团队将需要几个工具来监控和解决性能和可伸缩性挑战,这些挑战将随着时间的推移而出现。
我认为可扩展性问题可以通过采用一致的、基于微服务的生产分析方法来解决。团队应该能够通过简单的配置更改,快速地将模型从批量迁移到按需迁移到流。同样,团队应该可以选择扩展计算和内存空间,以支持更复杂的工作负载。
机器学习计算在尖峰中工作
一旦你的算法被训练,它们并不总是被使用——你的用户只会在他们需要的时候调用它们。
这意味着您在上午 8:00 只支持 100 个 API 调用,但是在上午 8:30 支持 10.000 个 API 调用。
根据经验,我可以告诉你,在确保不为你不需要的服务器买单的同时,扩大和缩小规模是一个挑战。
出于所有这些原因,只有少数数据科学项目最终真正进入生产系统。
强有力的运作
我们总是花很多时间来准备我们的模型。健壮模型包括获取一个原型并对其进行准备,以使其能够实际服务于所讨论的用户数量,这通常需要大量的工作。
在许多情况下,整个模型需要用一种适合现有架构的语言重新编码。仅这一点就经常导致大量痛苦的工作,导致部署延迟数月。一旦完成,就必须将它集成到公司的 it 架构中,包括前面讨论过的所有库问题。除此之外,在生产环境中访问数据通常也是一项困难的任务,经常会受到技术和/或组织数据孤岛的困扰。
更多挑战
在我的项目中,我还注意到以下问题:
- 如果我们改变了某个输入特征,那么其余特征的重要性、权重或用途可能都会改变,也可能不会改变。ML 系统的设计必须便于跟踪特征工程和选择的变化。
- 当模型不断迭代和微妙变化时,跟踪配置更新同时保持配置的清晰性和灵活性成为额外的负担。
- 一些数据输入会随着时间而改变。我们需要一种方法来理解和跟踪这些变化,以便能够完全理解我们的系统。
- ML 应用程序中可能会出现一些问题,传统的单元/集成测试无法识别这些问题。部署模型的错误版本,忘记一个特性,以及在一个过时的数据集上进行训练,只是其中的几个例子。
测试和验证问题
正如您可能已经知道的,由于数据变化、新方法等,模型在不断发展。因此,每次这样的变化发生时,我们都必须重新验证模型的性能。这些验证步骤带来了几个挑战:
除了在离线测试中验证模型,评估模型在生产中的性能也是非常重要的。通常,我们在部署策略和监控部分对此进行规划。
ML 模型需要比常规软件应用更频繁地更新。
自动化 ML 平台
你们中的一些人可能听说过自动化机器学习平台。这可能是一个更快生产模型的好办法。此外,该平台可以支持多种模型的开发和比较,因此企业可以选择最符合其预测准确性、延迟和计算资源要求的模型。
多达 90%的企业 ML 模型可以自动开发。数据科学家可以参与到业务人员的工作中来,开发目前自动化无法实现的小部分模型。
许多型号会出现漂移(随着时间的推移性能下降)。因此,需要对部署的模型进行监控。每个部署的模型都应该记录所有的输入、输出和异常。模型部署平台需要提供日志存储和模型性能可视化。密切关注模型性能是有效管理机器学习模型生命周期的关键。
Key elements that must be monitored through a deployment platform
发布策略
探索部署软件的许多不同方式(这是一篇关于这个主题的很长的阅读文章),其中“影子模式”和“金丝雀”部署对 ML 应用程序特别有用。在“影子模式”中,您捕获生产中新模型的输入和预测,而不实际服务于这些预测。相反,您可以自由地分析结果,如果检测到一个 bug,也不会有重大的后果。
随着您的体系结构的成熟,希望能够实现渐进或“金丝雀”版本。这样的实践是当你可以向一小部分客户发布时,而不是“全部或没有”。这需要更成熟的工具,但是当错误发生时,它可以最小化错误。
结论
机器学习仍处于早期阶段。事实上,软件和硬件组件都在不断发展,以满足 ML 的当前需求。
Docker/Kubernetes 和微服务架构可以用来解决异构性和基础设施挑战。现有的工具可以很大程度上单独解决一些问题。我认为,将所有这些工具结合起来实施 ML 是当今最大的挑战。
部署机器学习现在是而且将继续是困难的,这只是组织需要处理的现实。不过值得庆幸的是,一些新的架构和产品正在帮助数据科学家。此外,随着越来越多的公司扩大数据科学运营,他们也在实施使模型部署更容易的工具。
更多信息,推荐 Christoper Samiullah 的这篇优秀文章:
-https://Christopher GS . github . io/machine % 20 learning/2019/03/17/how-to-deploy-machine-learning-models/
为什么开源如此重要?第一部分:原则和平等
原文:https://towardsdatascience.com/why-is-open-source-so-important-part-one-principles-and-parity-dbe5f9bf2441?source=collection_archive---------26-----------------------
Open-source relies on collaboration between contributors and companies — but profits make things more difficult. FREEPIK
技术世界是一个奇怪的地方;它是平等的和排他的,合作的和无情的竞争的,开放的和严格封闭的。代表当今大多数科技公司的开放创新和专有标准的熔炉似乎一下子融合了所有这些想法。
保持一切平衡是开源(OS)的原则,至少在过去的二十年里( 如果不是从软件本身 的创立开始),这一原则一直在塑造科技公司。
随着数据在物联网和人工智能技术时代变得无处不在、不可思议地细化,并且成为一种极其宝贵的资产,像红帽这样的公司在开发人员的帮助下取得了不可估量的增长,这些开发人员愿意贡献他们的知识,以换取免费测试并成为开创性软件企业的一部分。因此,开源已经成为“吃掉世界”的最新事物,仅在2018 年,就有 550 亿美元用于开源并购 。
本文的第一部分将探讨开源的原则,以及如果我们希望技术不断向前发展,为什么应该尊重自由劳动力和企业发展之间的平衡。第二部分将深入探讨公司如何从开源中获利的更多细节,以及如果处理不当,这可能会成为问题的方式。
这是事情的原理
开源软件做到了它所说的——一个软件的源代码是开放的,可以免费下载、修改和整合到第三方项目中,这有助于随着时间的推移改进软件本身。理查德·斯托尔曼,开源操作系统 GNU 的创造者,【FSF】自由软件基金会的创始人和前任主席,可以说是把开源的概念带到了大众,陈述 说:
“‘自由软件’是自由的问题,而不是价格的问题。你应该把“免费”理解为“言论自由”,而不是“免费啤酒”。’”
尽管 Stallman 最近(2019 年 9 月 16 日)在麻省理工学院的一封电子邮件中对 Jeffrey Epstein 的受害者 Virginia Giuffre 发表了 评论后突然失宠——以及随后 从麻省理工学院和 FSF 辞职——Stallman 对自由(至少在软件方面)的最初解释已经塑造了整整一代开发人员和技术领导者在构建他们的项目和产品时遵守开源原则。
在我的公司,我很幸运有一个开源思维的光辉榜样,他就是费利克斯·翁塔尼翁,他是塞维利亚物联网的创始人,是开源开发项目的热心贡献者,也是他的祖国西班牙开源社区的热心建设者。“一般来说,”Ontañ on 说,“开源是商业和制造战略中开放创新的技术方面,”因此,它可以作为一种工具,被公司用来赢得信誉或简单地快速推出他们的产品。当涉及到专有的人工智能和物联网项目需要大量的劳动力来启动和运行时,开源的这一战略方面尤其相关。
“对于物联网和人工智能的每一个分支来说,都有一大批公司竞相让他们的技术成为‘新标准’,”Ontañ on 说,“那些以开源方式开发技术的公司处于更有利的位置,可以领先于其他公司。很简单,这是因为开源技术让成千上万的技术工人在任意数量的不同应用程序中实时构建、检查和测试代码,而且千人千面胜于一人。
人人为我,我为人人?
然而,这就是开源项目的症结所在,当一个开源开发者社区帮助建立一个专有系统时,这个系统反过来变得封闭、许可和有利可图。从一种自由的、完全协作的软件开发方式(提供了一系列不可否认的商业利益,如 Linux 基金会 所推崇的)转变为一个陷入专有创新和严格的知识产权的泥潭对一个公司来说从来都不是一个容易的转变。
虽然开源可以帮助公司获得技术优势,快速传播产品,并在供应链中建立信誉和支持,但利润是在激烈的竞争中生存的关键。
虽然像脸书这样的玩家可以随着他们的成长继续推广开源项目,但是没有多少人有能力这样做。
根据 Ontañ on 的说法,有一种方法可以在合作创新和建立一个健康的、有竞争力的公司之间取得正确的平衡。onta nion 说,在任何一个软件或技术的开发过程中,都有多行代码“往往会在每一次重复出现。如果这些可重复层保持开放和免费使用,并由大量熟练的开发人员逐渐改进,Ontañ on 认为"企业将继续创新[在专有层],但他们也将共同开发和维护可重复层上事实上的开源标准。理论上,这种方法可能是促进开源实践的好方法,也是有利可图的,但实际上事情很少如此明确。“人们总是担心如何在专有和开源之间取得平衡,”DB Hurley 说,他是 Mautic 社区 的创始人,现在是 Acquia 的营销云 (在 Mautic.com 于 2019 年 5 月被 Acquia收购 后)的 CTO,“每个公司仍然要担心底线和如何盈利。”
对于 Hurley 来说,开源开发的重要性怎么强调都不为过,它提供了“更快的错误修复和功能开发…快速有效地提供全球软件产品的能力,当然,还有最大的好处:技术的进步。然而,“我们必须小心谈论开源的价值,”Hurley 说,必须区分开源是一种内在的有价值的资源,还是一种空洞的噱头。**
开源的优势在于传播和改进某些软件的人数。
赫尔利认为,如果自由、熟练的劳动力和有利可图的知识产权之间的微妙平衡得不到尊重,那么“开源将失去巨大的好处,因为它慢慢地变成了专利软件的淡化‘试用’版本。
我一个…
鉴于开源开发对任何公司的软件免费测试和营销的价值,开发人员和大企业之间的合作意识,以及无需任何额外努力或费用就能成倍改善和扩散您的产品的机会,MongoDB 创始人兼首席执行官 Dev Ittycheria 的评论尤其令人担忧。在 6 月 接受《计算机商业评论》 采访时强调指出“我们没有开源【MongoDB】的帮助;我们把它开源为免费增值战略,“itty cheria 发起了知识产权挑战,可能不可挽回地破坏了对开源生存至关重要的平衡。用 Hurley 的话来说,“对于那些建立并保持开源公司繁荣的社区来说,这是一个巨大的耻辱。**
本文的第二部分将进一步探究 Ittycheria 的评论,解释开源平衡是如何变化的,并探索如果它过分偏向专有暴利,我们可能会失去什么。
原载于*。***
为什么开源如此重要?第二部分:利润与财产的问题
原文:https://towardsdatascience.com/why-is-open-source-so-important-part-two-the-problem-with-profit-and-property-ffb8c5c3e64d?source=collection_archive---------32-----------------------
Profits are the most vital factor of any non-charitable company, especially in the tech world. But the path to proprietary software is often paved by the open-source community, which puts private companies in a tricky position when selling their. FREEPIK
专有软件会毁了开源党吗?正如本文第一部分 中所概述的,开源原则已经使软件开发民主化,允许公司容易地传播和测试他们的软件,并且在一种微妙的给予和获取的平衡中联合了技术世界的两个部分——软件和销售。但这种平衡正受到威胁。
MongoDB 的创始人兼首席执行官 Dev Ittycheria 的评论称,开源是一种“免费增值战略”,并没有“帮助”MongoDB 取得成功,这可能会导致更多的公司否认开源开发者的投入,以声称他们的软件是完全专有的。这些由领先的 NoSQL 数据库公司 (也是开发人员最喜欢的) 所做的评论远远不是孤立存在的,它们让那些依靠开源社区来改进、传播和间接支持他们的软件的公司日子不好过。
本文的第二部分将在上下文中探讨 Ittycheria 的评论,看看开源公司如何在保持社区良好声誉的同时盈利,以及为什么这在今天如此重要。
在泥泞的水中漂浮
开源公司和开源社区之间的关系并不明确。这是因为公共利益和市场经济的概念不一定是相辅相成的。
开源项目通常发展很快,因为每个人都在朝着同一个目标努力,为了共同的利益改进软件——然而,一旦公司需要盈利才能生存,这些目标就不一定保持一致。
然而,开源确实存在于一个依赖于直接交换和供求原则的市场驱动的世界中。正如 Drupal 的创建者和 Acquia 的联合创始人兼首席技术官 Dries Buytaert 所说,“T18 开源允许实验、合作和从彼此的失败中学习的能力……[但是]性能、可伸缩性、安全性和正常运行时间的保证只能通过商业产品来提供。
这个市场驱动的世界也害怕大卫·海涅梅尔·汉森(DHH),Ruby on Rails 和 Basecamp , 的创始人所说的“白吃白喝的问题:”担心如果我们没有直接的纽带将我们追求共同利益的共同信念联系在一起,社会将充满乞丐和吸血鬼。
这种担心导致了双方的其他问题:一个公司产品的使用和消耗没有互惠的 公地悲剧 思想(在开源的情况下,用户可能期望免费的额外服务),在贡献者一方,他们的工作将不会得到其他用户或提供软件或许可证的公司的配合。开源中的公共和互惠努力对双方都至关重要,尤其是当利润进入等式时。
为了让一家公司开始从开源软件中赚钱,进入市场需要两个关键的先决条件:规模和主要可信度。
一旦一家公司由于开源社区的快速发展而扩大了用户群,它仍然需要这个社区,这样它才能在市场上保持信誉。
正如 Buytaert 明确指出的那样,“一个公司的开源贡献是项目在市场上取得成功所必需的。封闭源代码产品和托管服务为客户购买它们提供了独特的理由。“这就是为什么许多开源公司经常在盈利的同时培养开源社区,因为如果结构合理,这两者对彼此都有利。
最常见的策略是对支持或托管(Red Hat 和 Acquia)等服务收费,拥有所有权比例较小的开放核心(Apache),实施限制性许可并鼓励用户以这种方式转向付费服务(MongoDB)或混合模式,可以选择使用带有许可的开放源代码或专有软件(CockroachDB)。
不要恩将仇报
因此,Ittycheria 关于开源是一种“免费增值战略”的评论并不像它看起来那样具有爆炸性——公司确实从开源开发者的工作中获利,但只要保持互让的意识,它就被接受。
然而,拒绝来自开源社区的“帮助”问题要大得多,因为事实上开源的贡献远不如简单地指出由社区编写或修补的代码部分那样有形。以开源项目 Drupal 为例,Buytaert 解释了贡献和商业收益之间的关系:“由于 Drupal 是 Acquia 所做一切的核心,反过来,Acquia 仍然是 Drupal 的最大贡献者,支持数百个项目和代码修复。如果没有开源,我们永远不可能建立起自己的公司。
Ittycheria 声称,MongoDB 的产品提供中“没有来自开源社区的现有技术”,但这否认了测试、漏洞修复和 MongoDB 项目的快速扩散等因素,这些因素无疑帮助该公司取得了今天的成就,即使他们的核心产品不是由开源开发者开发的。将开源仅仅视为一种更快地编写专有软件并让尽可能多的人使用您的产品的方法,这没有考虑到拥有一大批开发人员在您身边的价值,以及一旦您到达顶端,否认他们的贡献的风险。
Buytaert 说,特别是在依赖大量复杂代码的人工智能和物联网项目的情况下,许多公司理解对人力的需求,并“开源他们的框架,以帮助整个领域更快地发展。他继续说道:“如果我们希望物联网、人工智能和自动化以我们需要的速度发展,开源将是唯一的答案。**
一片空旷的田野
随着技术复杂性的进一步提高,在更多的应用中解决更多的问题,并传播到世界的各个角落,开源社区和商业收益之间的关系将比以往任何时候都更加紧密。
开源公司提供的不仅仅是自由软件,他们为新开发人员提供自我培训,并且经常支持开源社区作为贡献者的价值。
但是,当公司否认开源开发者的贡献以试图保持其软件的专利性时,他们可能会失去开发者的所有信任,或者破坏最终推动技术整体不断进步的关系。正如 Acquia 的 DB Hurley 所说:“也许开源最大也最容易被忽视的好处是技术和软件的不断进步。可以说,水涨船高——也就是说,只要所有的船只都认识到潮汐在他们成功中的作用。
最初发表于【https://www.forbes.com】。
为什么 Scrum 是构建数据科学项目的合适框架?
原文:https://towardsdatascience.com/why-is-scrum-the-right-framework-to-build-data-science-projects-4afd381ed8c6?source=collection_archive---------25-----------------------
Photo by Markus Spiske on Unsplash
越来越明显的是,即使是最简单的数据科学项目也可能无法实现并转化为长期可持续的解决方案。事实上,尽管有大量关于人工智能的时髦词汇和媒体报道,但趋势仍然是许多人工智能计划失败了。更糟糕的是,由于缺乏对不同术语(即机器学习、人工智能和数据科学)的清晰定义和理解,预期往往无法实现,项目往往被取消,从而无法产生有利可图的可行解决方案。
接受调查的 10 家公司中有 7 家报告称,迄今为止,人工智能的影响很小或没有影响。在至少对人工智能进行了一些投资的 90%的公司中,不到五分之二的公司报告在过去三年中从人工智能中获得了任何商业收益。如果我们把在人工智能领域进行了大量投资的公司计算在内,这个数字会提高到五分之三。即便如此,这意味着 40%对人工智能进行重大投资的组织没有报告人工智能带来的业务收益。
在接下来的章节中,我将讨论为什么 Scrum 是开发数据科学解决方案的正确框架。简而言之,主要观点是:
- 数据科学家应该围绕假设思维开展工作。
- 文化是将 PoC 概念成功转化为产品并实现结果的最重要的组成部分。
- 将 Jupyter 数据科学转化为生产所需的工作量应始终进行沟通,并提前确定潜在的瓶颈。
Scrum 通过以下方式满足了上面的陈述。
首先,交付数据科学相关产品所涉及的自然模糊性可能会导致团队注意力不集中。除此之外,偶尔,由工程师、计算机、科学家和计量经济学家组成的多学科团队需要一起工作并有效沟通,在时间、资源和价值之间找到正确的平衡。在高度科学的领域中,沟通变得更加重要,在这些领域中,所谓的结果驱动的经验模型(黑色模型)对确定性的白色模型提出了质疑。为了克服数据科学项目的自然模糊性,同时保持关注和沟通,数据科学团队应该学会用围绕假设测试的工作来取代他们的预定义目标。本质上,每个 Sprint 都应该专注于制定假设,也就是说,智能的,清晰的猜测,这是采取行动和评估结果的基础。
假说是科学探究的起点,长期以来帮助科学家解决不确定性。此外,假设生成与为过程优化设计的更传统的管理方法形成鲜明对比。流程优化包括规定员工做什么和如何做。流程优化对于稳定的业务流程来说是非常特别的,因为这些业务流程已经实现了一致性标准化。(标准化的流程通常可以自动化,正是因为它们是稳定的。)然而,公司需要他们的员工来指导涉及不确定性和变化的工作。这就是组织学习和假设生成特别重要的时候。
数据科学可以定义为“使用数据获得洞察力来增加价值”,关键是要进行实验,然后使用所有可用的资源来应对挑战。
如果你想获得洞见,遵循假设检验方法是基本的,因为它给你检查不同假设和接受或拒绝最初陈述的自由。您需要进行尽可能多的实验,以了解您的数据集并识别不同的数据问题;你需要识别数据中的未知数,并采取相应的行动。
其次,开发一种对数据科学、机器学习和人工智能的每个边界都有清晰理解的工作文化,这对于启动成功的 POC 至关重要。重要的是,与 C-Level 的经理们进行沟通和教育,让他们对今天的可能性和潜在的好处有一个共同的理解,这是至关重要的。人工智能不是魔术,而是需要遵循的一套简单的工程技术和算法。此外,对"低挂果实"的短期迷恋会将注意力从准备投入生产的长期可持续解决办法上引开。为此,Scrum 有助于提供透明度,并定义清晰的事件,旨在增加团队成员内部以及团队外部的交流。最重要的是,它迫使数据科学家和产品经理尽快交付价值,主动思考他们的 POC 是否能够成功地为他们的组织交付价值。
最后,越来越多的数据科学家收到了关于参与各种数据科学竞赛、后续在线课程和黑客马拉松重要性的不同建议。尽管这是获得数据科学(编码和算法)经验的重要部分,但在 scrum 中工作迫使你从一开始就思考将 ML 算法投入生产的过程和端到端管道。至关重要的是要尽快了解将 ML 算法添加到产品中的要求是什么,有哪些限制,以及为什么在测试集中获得高分并不一定意味着数据科学家的工作已经结束。Scrum 迫使团队在每一次冲刺中交付价值,迫使他们经常思考数据管道的末端,而不仅仅关注堆叠、集合或随机森林是否能交付最好的分数。有时,速度、可解释性和说服决策者相信结果的能力比测试分数的增量提高更重要(尽管每个数据科学家都喜欢尝试不同的方法来提高他们以前的分数:)。
我们怎么做呢?
我们的团队由非常有才华的数据科学家和开发人员组成,他们在物理、航空航天工程、计算机科学以及机械和电子工程方面有着不同的背景。
我们使用简化版的 Scrum 来设定目标,挑战极限,高效协作,最重要的是建立一种直接和开放交流的文化。为了稳定我们的团队,提高我们的沟通效率,我们每天早上 9:30 准时举行 Scrum-stand-up。由于数据科学工作的性质,我们采用了 每周冲刺 来提高我们的敏捷性,并进行小规模实验,直到更多信息被披露。
如果我们将单词 value 替换为 insight,那么我们的团队每周都会交付 insight。有时,我们的洞察力是对我们做不到的事情的简单观察。通常,我们的结论是,我们需要更多地关注特征工程,或者我们需要收集更多的数据。不出所料,我们很少能取得突破,达到重要的里程碑。
附录
1:根据 MITSLOAN 管理评论,研究报告:“2019 人工智能全球高管学习和研究项目的发现”
为什么超时验证不是更普遍?
原文:https://towardsdatascience.com/why-isnt-out-of-time-validation-more-ubiquitous-7397098c4ab6?source=collection_archive---------9-----------------------
训练、验证和测试分区的超时性能需要计划和思考
监督机器学习的目的是对未标记的数据进行分类。我们希望算法能告诉我们一个借款人是否会违约,一个客户是否会购买,一张图片是否包含一只猫、一只狗、恶性肿瘤或良性息肉。这些算法“学习”如何使用带标签的数据进行分类,即我们知道借款人是否实际违约、客户是否购买以及一团像素实际显示的数据。通常情况下,研究人员获取标记的数据,并将其分为三种方式:培训、验证和测试/保留(术语有时会有所不同)。他们根据训练数据训练数百个模型,并选择一个在验证数据上表现良好的模型。仅使用标记数据的子集来训练算法的原因是为了确保算法在任何数据上表现良好——而不仅仅是用于训练算法的数据。研究人员经常多次重复这一步骤,选择不同的分割进行训练和验证,确保模型性能不是特定于特定的验证数据(k 倍交叉验证)。最后一步,研究人员评估模型在未知数据(测试集)上的性能。这提供了对模型在未标记数据上表现如何的度量。下图说明了这种经典设置:
Figure 1: Classic train, validate and test split. Select model that performs well on ‘validate’. Evaluate its performance on ‘test’
在大量应用中,数据具有时间维度,使得标记的数据是过去,而未标记的数据是未来。例如,我们已经知道哪些借款人或客户在过去违约或购买了产品。我们想知道未来哪些会这样做。在这种情况下,算法的目的是提前预测标签。这意味着它不仅需要处理昨天的数据,还需要处理明天的数据。我问时间维度应该如何整合到经典的培训/验证/测试设置中。如果过程随着时间的推移而改变,这肯定会很重要。原来有一整个子字段在处理这个问题。这些方法从在训练数据上设置滑动窗口,到主动测试底层关系的变化。在这篇文章中,我回顾了设置训练、验证和测试数据的几个选项。
选项 1:及时验证,及时测试
让我们考虑一下,如果我们忽略数据的时间维度,并拆分所有带标签的数据,而不考虑其时间维度,会发生什么。我们使用来自同一时间段的的数据来训练、验证和测试该模型。我们使用一个模型对新数据(比如 2019 年)进行预测,该模型是在标记的 2015-2018 年数据上训练、验证和测试的。下图说明了这种设置。优点是我们使用最新的数据来训练模型。缺点是,它假设过去存在的关系在将来也是一样的。如果这种关系随着时间的推移而改变,我们估计的性能指标(我们使用实时测试数据计算的)将夸大模型的真实性能,即一旦部署,模型的性能将比我们预期的更差。
Figure 2: In-time validate and in-time test
Pro: trains using latest data
Con: no idea how model performs out-of-time
选项 2:及时验证,超时测试
另一种可能性是,我们坚持 2018 年,使用 2015-2017 年的数据训练模型,并在 2018 年的数据上进行测试。这种方法的优势在于,我们可以明确评估模型预测超时的能力。缺点是在构建模型时没有考虑预测超时的能力。这是因为我们选择在及时验证数据上表现良好的模型。此外,除非我们使用完整的 2015-2018 年数据重新训练模型,否则我们不会使用最新数据进行预测。
Figure 3: In-time validate, out-of-time test
Pro: measures how the model performs out-of-time
Con: performance out-of-time not taken into account during model building
备选方案 3:“向前走”
Roger Stein 建议在连续的(潜在的滑动)数据窗口上训练模型,并对下一个时间段进行预测。每次我们都使用特定时间点的所有观察值来重新训练模型,并对下一个时间段进行预测。来自每个窗口的预测被组合成一组预测。我们对许多不同的模型都这样做,并选择一个创建最佳组合预测的模型。这种方法的优势在于模型构建(即尝试哪些模型效果最好)明确考虑了模型做出超时预测的能力。由于模型针对每个窗口进行了重新调整,因此这种方法模拟了在实践中发生(或应该发生)的模型的周期性重新训练。这种方法的缺点是我们总是在同一组数据上验证预测,而不是随机选择的数据。(也许公布一部分测试数据可以消除这种担忧。)
Figure 4: “walk-forward” approach, out-of-time validate
Pro: model building takes into account ability to predict out-of-time
Con: validation set not random
再培训还是不培训
当我们对未来进行预测时,尽可能使用最近的数据可能是个好主意,这样我们就能捕捉到最近的现象。但是,如果我们像选项 2 中那样提供最新的数据(以评估超时性能),我们可能应该在进行预测之前使用所有标记的数据重新训练模型。再培训如下图所示:
Figure 5: Once hyper-parameters are set, re-train the model using all labeled data
对于是否在部署之前使用所有训练和测试数据重新训练模型,网上存在一些分歧。 Kuhn 和 Johnson 在关于过拟合、数据分割和模型调整的章节中,他们说“然后我们使用选定的调整参数,用所有的训练数据建立一个最终的模型。”(第 65 页)。同样,吴恩达在他的一篇讲稿中说,从交叉验证程序中选择一个模型后,我们可以“有选择地”在“整个训练集”上重新训练这个模型
在模型参数和超参数(又名调整参数)之间画出的区别是很有帮助的。超参数决定了模型的结构,一般无法从数据中估计。它们包括诸如树的复杂性、KNN 算法中的 k、特征集、函数形式(例如,线性与二次)等。相反,模型参数包括回归系数、树规则、支持向量。这些可以用数据来估计。模型构建阶段就是寻找超参数。一旦超参数(即模型的结构)得到验证,似乎没有理由不使用尽可能多的数据来获得模型参数的最准确估计。这些参数应该用于部署模型和进行分类或预测。
结论
总之,如果我们按照经典的设置,忽略选项 1 中数据的时间维度,我们不知道该模型将如何处理过时的数据。在选项 2 中,我们至少有一个模型超时性能的度量。然而,只有当我们做了类似选项 3 的事情时,我们才是在建立模型来预测未来。不管我们做什么,在进行预测之前使用所有标记的数据重新训练模型似乎是一个好主意。
我很难找到没有时间维度的应用程序的例子。我想一堆 MRI 图像中只有一些被标记了,这是一个例子,但是我的感觉是这些一次性的项目很少。此外,虽然一些过程随着时间的推移是稳定的(例如天气或图像分类——今天的狗明天看起来会和狗一样),但客户行为等过程必然会随着时间的推移而变化。因此,令人惊讶的是,超时测试和验证的讨论(和实现)并不普遍。不合时的性能可能比及时的性能更差,特别是如果您有许多及时标记的数据,不是很长的时间序列,并且是一个非平稳过程。然而,不做一些过时的评估可能会困扰开发人员,因为随后的数据将显示该模型的性能比指定的及时性能度量更差。
Kaggle 为什么不包容,如何搭建更包容的数据科学平台
原文:https://towardsdatascience.com/why-kaggle-is-not-inclusive-and-how-to-improve-it-6e2013c82b63?source=collection_archive---------14-----------------------
如果你想擅长在游泳池游泳,那很好,去游泳吧。“如果你想在公海上表现出色,那就去奥姆德纳吧”——莱昂德罗·桑切斯,来自巴西的奥姆德纳挑战合作者。
“在过去的几个月里,我在 Omdena 的人工智能挑战赛中学到的东西比我在所有比赛中学到的东西加起来还要多。”——Murli Sivashanmugam,来自印度的 Omdena 挑战赛合作者。
不要误会我的意思,我认为 Kaggle 是一个很好的平台,让数据科学家磨练他们的技能,并在理论上应用学到的知识。
但这就是为什么它走得还不够远。
如果你是一名数据科学家,要想在 Kaggle 中名列前茅,你必须为 0.1%的分数而奋斗。这样做的努力在现实生活中很多时候是不值得的。添加数据泄漏探测、堆叠、提升、集成以实现 0.1%是必须的。当然,对于排行榜来说,这是非常有价值的,但对于现实生活来说,它根本没有价值,因为它降低了可解释性。
其次,大多数解决方案在生产环境中是不可复制的。记住,在一个游戏中,你在排行榜上寻找结果,而在另一个游戏中,你在构建完整的解决方案。
但更重要的是,不是每个人都有机会与数据科学家同事一起工作并向他们学习。例如,像南非的单身母亲扎希达或肯尼亚的索马里难民穆尼拉这样的人,位于世界的偏远地区,可能没有其他人可以合作。不是每个人都有机会上大学或者来自大城市,在那里他们可以遇到其他数据科学家。
[## 让互联网成为你的人工智能大学,成为变革者。
穆尼拉离开索马里是因为暴力,但她没有失去希望,而是有着远大的理想。
medium.com](https://medium.com/omdena/make-the-internet-your-ai-university-and-be-a-changemaker-f75d9c441f78)
想要挑战 Kaggle 的组织必须公开数据集,这并不适合所有的商业模式。此外,许多现实世界的问题需要公司与开发人员密切合作和迭代,这在 Kaggle 中是不可能的。
如何改进 Kaggle,使其更具包容性
我们认为,让世界各地的人们在一个学习环境中相互联系,共同解决一个有趣的现实世界问题,这将是一件非常棒的事情。
“过去,我在‘ka ggle’中尝试过一些比赛,尽管它帮助我提高了对人工智能领域的理解,但我觉得由于比赛的背景,学习的机会是有限的。“我相信,当我们作为一个团队为一个共同的目标而努力时,最好的学习就会发生。”——Murli Sivashanmugam,来自印度的 Omdena 挑战赛合作者。
(有抱负的)数据科学家的优势
- 通过真实世界的经验来弄脏你的手。来自印度的 Rohith Paul】说,虽然我参加了一些 Kaggle 比赛,其中的数据已经被清除,但 Omdena 在现实世界中的曝光对我来说是一种新的体验,我喜欢它。****
- ****与领域专家密切合作。大多数现实世界的问题不仅限于数据科学问题,而是涉及领域专家来创造价值。我们已经看到,在与领域专家合作时,来自不同背景的数据科学家帮助公司细化问题,并为问题提供新的视角。
用来自以色列的亚历山大·拉斯科伦斯基的话说
“Omdena 可以通过在简历中提及真实工作经历的机会给人们提供如此丰厚的奖金,这是现在任何公司都要求的”。
组织的优势
- 由 30-40 名具有不同技能和经验水平的从业者组成的精选团队。
- 数据内部共享。
- 解决问题的社区包括公司(通常是数据科学家)通过直接接触项目以及必要时的额外参与。
- 社区成员有内在的动力,并且经常自己面对这个问题。他们不仅建立一个模型,还帮助公司提炼问题,并把问题放到一个更大的背景中。这是我们在所有挑战中反复看到的事情。
我完全同意对社区和有目的的合适的人的强调。这实际上是创造一个协作和知识共享环境的关键,看到它是如何工作的令人惊讶。
丹尼尔·米卡,时尚人工智能初创公司创始人
用联合国世界粮食计划署驻尼泊尔代表绍拉夫·苏曼的话说,
Omdena 的协作方法将创新带到了一个全新的水平,其理念是利用技术让不同能力的人一起解决问题。这种方法背后的驱动力是通过协作精神、指导和现场指导加速学习。
在过去的六个月里,我们的社区建立了深度学习模型,以 99%的准确率检测树木和预防森林火灾,预测模型,以确定安全区域和路线来阻止性骚扰,以及应对气候变化和暴力冲突的模型。
更多的用例可以在我们的博客上找到。
为什么线性回归不适合分类
原文:https://towardsdatascience.com/why-linear-regression-is-not-suitable-for-binary-classification-c64457be8e28?source=collection_archive---------7-----------------------
分类任务的线性回归与逻辑回归
本文解释了为什么在分类问题上逻辑回归比线性回归表现得更好,以及线性回归不适合的两个原因:
- 预测值是连续的,而不是概率性的
- 使用线性回归进行分类时,对不平衡数据敏感
监督学习是机器学习必不可少的一部分。这是通过将输入变量映射到结果标签,从训练数据集中的示例中学习的任务,然后结果标签可用于预测新观察的结果。监督学习分类任务的示例有:
- 给出泰坦尼克号沉没时幸存和未幸存的乘客名单,预测是否有人能在灾难中幸存
- 给定一组猫和狗的图像,识别下一个图像是否包含一只狗或一只猫
- 给定一组带有情感标签的电影评论,确定一个新评论的情感( from Kaggle )
- 给定从 0 到 9 的手绘数字图像,识别手绘数字图像上的数字
示例 1 和 2 是二元分类问题的示例,其中只有两种可能的结果(或类)。例 3 和例 4 是有两个以上结果的多类分类问题的例子。
使用线性回归可以解决分类问题吗?
假设我们创建了一个完美平衡的数据集(所有事情都应该如此),其中包含一个客户列表和一个标签,以确定客户是否购买了产品。在数据集中,有 20 个客户。10 名年龄在 10 至 19 岁之间的顾客购买了产品,10 名年龄在 20 至 29 岁之间的顾客没有购买产品。“已购买”是由 0 和 1 表示二进制标签,其中 0 表示“客户没有购买”,1 表示“客户购买”。
Our sample training dataset of 20 customers and their purchase label
线性回归模型的目的是找到输入变量和目标变量之间的关系。下面是我们使用上述数据集训练的线性回归模型。红线是训练数据集的最佳拟合线,旨在最小化预测值和实际值之间的距离。
Linear regression model, showing best fit line for the training dataset
使用这个模型进行预测是非常简单的。给定任何年龄,我们都能够预测 Y 轴上的值。如果 Y 大于 0.5(高于绿线),则预测该客户会购买,否则不会购买。
+-----+-------------------+
| Age | Predicted Y Value |
+-----+-------------------+
| 10 | 1.21428571 |
| 15 | 0.83834586 |
| 19 | 0.53759398 |
| 20 | 0.46240602 |
| 25 | 0.08646617 |
| 30 | -0.28947368 |
+-----+-------------------+
问题#1:预测值是连续的,不是概率性的
在二元分类问题中,我们感兴趣的是结果发生的概率。概率的范围在 0 到 1 之间,其中某件事情一定会发生的概率是 1,0 是某件事情不太可能发生。但是在线性回归中,我们预测的是一个绝对数字,其范围可以在 0 和 1 之外。
使用我们的线性回归模型,任何 30 岁以上的人都有一个负“购买”价值的预测,这实际上没有意义。当然,我们可以将任何大于 1 的值限定为 1,将小于 0 的值限定为 0。线性回归还是可以的吧?
是的,这可能行得通,但是逻辑回归更适合分类任务,我们想证明逻辑回归比线性回归产生更好的结果。让我们看看逻辑回归是如何对数据集进行分类的。
Logistic regression model, a sigmoid curve that fit the training dataset
现在,我们在同一个数据集上训练了两个模型,一个通过线性回归,另一个通过逻辑回归。我们可以通过使用均方根误差(RMSE)和决定系数(R 得分)来比较这两种模型的性能。
+---------------------+--------------------+----------------------+
| | R2 (higher better) | RMSE (lower better) |
+---------------------+--------------------+----------------------+
| Linear regression | 0.7518796992481203 | 0.062030075187969935 |
| Logistic regression | 0.9404089597242656 | 0.014897760068933596 |
+---------------------+--------------------+----------------------+
r 是观察数据点与拟合回归线接近程度的量度,通常越高越好。但是仅有 R 是不够的,所以我们也要看看 RMSE。RMSE 衡量观察数据点与模型预测值的距离,越低越好。
从度量标准来看,在分类任务中,逻辑回归比线性回归表现得好得多。就像凯西·科兹尔科夫 引用它:
神经网络也可以被称为“瑜伽网络”——它们的特殊能力给了你一个非常灵活的边界。
问题#2:对不平衡数据敏感
让我们再添加 10 个年龄在 60 到 70 岁之间的客户,并训练我们的线性回归模型,找到最佳拟合线。
Linear regression model on 30 customers
我们的线性回归模型成功地拟合了一条新的线,但是如果你仔细观察,一些客户(年龄 20 到 22 岁)的结果被错误地预测了。
+-----+-------------------+
| Age | Predicted Y Value |
+-----+-------------------+
| 18 | 0.56495292 |
| 19 | 0.55091537 |
| 20 | 0.53687781 |
| 21 | 0.52284026 |
| 22 | 0.50880271 |
| 23 | 0.49476516 |
| 24 | 0.48072761 |
| 25 | 0.46669006 |
+-----+-------------------+
线性回归试图通过最小化预测误差来拟合回归线,以便最小化年龄在 60 至 70 岁之间的客户的预测值和实际值之间的距离。让我们用相同的数据集训练一个逻辑回归模型。
Logistic regression model on the same training dataset
是啊!在这个非常简单的数据集中,逻辑回归成功地对所有数据点进行了完美的分类。
+-----+-------------------+
| Age | Predicted Y Value |
+-----+-------------------+
| 18 | 0.85713668 |
| 19 | 0.64502441 |
| 20 | 0.35497751 |
| 21 | 0.14286435 |
| 22 | 0.04805457 |
+-----+-------------------+
让我们再次比较两个模型的 R 和 RMSE,你会发现逻辑回归比线性回归做得更好。
+---------------------+---------------------+----------------------+
| | R2 (higher better) | RMSE (lower better) |
+---------------------+---------------------+----------------------+
| Linear regression | 0.4211265134234073 | 0.12863855257257611 |
| Logistic regression | 0.9553066567250715 | 0.00993185406109522 |
+---------------------+---------------------+----------------------+
结论
Both the linear and the logistic regression line
线性回归适用于预测连续值的输出,例如预测房地产价格。其预测输出可以是任何实数,范围从负无穷大到无穷大。回归线是一条直线。
而逻辑回归用于分类问题,预测概率范围在 0 到 1 之间。例如,预测客户是否会购买。回归线是一条 s 形曲线。
笔记本
在这个笔记本中查看本文中使用的代码。
[## 数据科学家:21 世纪最肮脏的工作
40%的吸尘器,40%的看门人,20%的算命师。
towardsdatascience.com](/data-scientist-the-dirtiest-job-of-the-21st-century-7f0c8215e845)
为什么是机器学习?
原文:https://towardsdatascience.com/why-machine-learning-303e6bdaa29d?source=collection_archive---------27-----------------------
Image by the author
在我的上一篇文章中,我谈到了用于描述各种统计/数据科学领域的无数术语。我还提到,在这些领域中,机器学习是最强大和最受欢迎的子领域之一。
在接下来的一系列文章中,我将更深入地研究机器学习。我认为,与其定义和解释机器学习的各个子领域,不如简要探讨一下为什么机器学习首先会存在。机器学习完成了常规编程没有完成的事情,我们如何知道何时使用一个而不是另一个?
决定,决定
人类生活的很大一部分,甚至比我们意识到的还要多,是由决策决定的。在最基本的层面上,一个人的一秒一秒的存在是一个关于如何度过下一秒的持续决策循环。有时候这个决定是下意识的,有时候不是。我们的决定可以是简单的,影响很小的,也可以是复杂的,影响深远的。决定构成了我们整个清醒的生活,一个又一个的选择层层叠加,相互嵌套。
对于计算机来说,情况大致相同。事实上,将计算机与其他机械机器真正区分开来的一个特征是天生的决策能力。读取输入并根据这些输入改变其行为。在此之前,机械装置被降级为无休止地执行完全相同的动作序列,而不管输入或环境如何。
人类和计算机的主要区别在于,计算机没有随机应变做出新决定的能力。它们不能像人类那样“思考”。只有当决定的“正确”答案首先被输入计算机时,计算机才能做出决定。
因此,所有的计算机决策实际上都是将其他地方做出的决策翻译成计算机可以理解和执行的格式的。当谈到我们为什么使用机器学习时,这是非常重要的一点。当我们想到计算机变得如此“强大”时,我们真正惊叹的是更多的内存和处理能力如何增加了已转化为计算机格式的决策的复杂性。
越来越专业
因为决策以及我们翻译决策的过程非常重要,所以让我们定义几个术语来帮助我们更准确地谈论它们。请注意,虽然这些术语在机器学习文献中随处可见,但它们的定义在很大程度上取决于作者。
一个决定是我们程序中的一个点,在这个点上,代码被执行或不被执行是基于该决定的一组输入。每个决策都有一个模型和参数。决策的模型基本上是决策本身的格式或结构。正如我们上面所说的,计算机不会像人类那样做决定。该模型是我们以计算机友好的格式对决策过程的近似。
该模型的参数是我们插入来微调决策的值。通过一个例子可以更容易地看出这一点。我们来看一下代码,如果一条推文超过 280 个字符,我们会拒绝这条推文:
这里的决策模型只是一个使用IF-THEN-ELSE
格式的基本条件语句。参数是布尔条件表达式tweet.length < 280
中的值。
一个模型可以用于许多决策;条件表达式模型可能包含了计算机做出的所有决策的 95%以上。然而,参数是特定于该个体决策的。
让我们看一个不同的模型:我们的决定是试图根据平方英尺来预测房子的价格。我们选择使用趋势线,趋势线的模型就是一条线的方程式:
在这种情况下,x
将是我们的平方英尺,a
和b
代表我们需要找到的参数来完成这个决策。使用数据,我们应该能够找到符合我们的参数和(大致)近似房价的值。我们可以用同样的线性模型,用不同的参数来近似,比方说,过去 20 年的股票市场。
这里的要点是:单个模型可以用于需要相似逻辑的不同决策,但是没有模型可以用于每一个决策。然而,即使使用相同的模型,参数也将总是需要根据该决定进行定制。类似地,一个决策可能有多个提供满意结果的模型(带有正确的、特定于模型的参数)。
我们将模型的选择和决策参数的选择合起来称为逻辑。一般来说,会有一种逻辑比所有其他逻辑都好,我们称之为目标逻辑。为了理解逻辑和目标逻辑之间的区别,请考虑在上面的房价示例中,我们可以使用基本上任何值作为a
和b
的值,它仍然可以算作一个逻辑,但是其中一些值在准确预测价格方面肯定比其他值更好,因此我们需要一个术语来描述问题的最佳逻辑。
#逻辑目标
所以我们现在有了一个理解决策的框架,我们知道我们的决策目标是目标逻辑。我们如何找到目标逻辑?
这里我们需要再定义一个术语:决策源。不足为奇的是,这仅仅意味着一个决策的来源,事实证明,一个决策来自哪里对找到目标逻辑有很大的影响。在很大程度上,编程决策来自我们称之为仁慈的决策源,这只是一个希望决策对计算机友好并且易于编程的来源。通常善意的来源是程序员自己,他们希望决策对计算机友好,原因很明显。
然而,没有要求来源是仁慈的,当这不为真时,找到目标逻辑的过程自然更加困难。通常,当像这样的决定很棘手时,有两种选择:
首先,程序员可以自己做繁重的工作,把一个模糊的或不适合计算机的决定翻译成更容易编码的决定。当决策来源是非程序员编写的规范时,这是非常常见的。例如,删除推文的要求可能始于“删除所有长于短消息的推文。”“短消息”的概念过于模糊,很难找到一个逻辑。因此,程序员可能会决定用字符来衡量长度——这对计算机来说是一个非常自然的选择。在此基础上,“长于短消息”的阈值可以设置为 280 个字符。
这对每个人来说都是最好的,最初决定的精神被保留了下来(保持消息简短),而它的细节已经变得对计算机友好。本质上,决策来源已经从困难变成仁慈。
不幸的是,这并不总是可能的。以天气为例:称天气为“决定”是准确的,但这个决定是由一个涉及地球、太阳、大气等的极其复杂的过程做出的。天气的决策来源基本上是“地球本身”,而地球不是一个仁慈的决策来源。此外,即使程序员可能了解天气背后的一些过程,也不能保证他们能够将这些知识转化为机器可用的东西。很容易看出,与 tweet 示例相比,这要复杂得多,需要不同的方法来找到它的目标逻辑。机器学习是实现这一目标的最常见方式。
什么是机器学习?
有了所有这些,我们现在能够后退一步,根据我们上面概述的内容来定义机器学习。首先让我们回顾一下:编程主要是关于编码决策。每个决策都需要一个逻辑,这个逻辑由模型和参数组成。“目标逻辑”是一种在实现我们想要的决策方面比其他任何逻辑都更有效的逻辑。最后,有些决定比其他的更难。
当决策困难时,通常有两个原因:首先,决策可能非常复杂,需要一个复杂的模型来表示。第二,我们可能有一个可以近似决策的模型,但是我们缺少使这个模型起作用的参数。
解决第一个问题,缺乏模型,是人工智能(AI) 整体的职权范围。机器学习具体来说更多的是解决第二个问题:为模型寻找参数。
我们如何做到这一点?考虑我们上面的天气例子:当决策来源不是人类时,我们不能确切地要求正确的逻辑,但是我们可以观察似乎反馈到最终决策的过程。让我们从预测天气的所有事情开始,假设我们只是试图预测接下来的一个小时内是否会下雨。不难意识到云和雨是相互关联的,它们表明将会下雨。更进一步,我们意识到诸如大气压力、湿度和露点等因素也涉及其中。综合起来,我们的观察可以组合成一个数据集。十有八九,我们做出决策所需的信息,或者至少是它的近似值,都包含在这个数据集中。
我们得出这些近似值的方法取决于问题的性质和所使用的算法,但从广义上讲,它们都是统计数据。机器学习方法是关于通过统计发现数据中的模式,并将这些模式转换为决策逻辑。
所以我们现在可以写一个非常完整的机器学习的定义。给定一个决策,其中我们不知道逻辑,但是我们有关于决策过程的观察,可以使用这些观察的统计分析来创建决策逻辑的近似。定义的最后一部分只是强调了机器学习解决方案通常是一种“最佳情况”方法,并不总是正确的。也就是说,他们经常提供可行的解决方案来解决原本没有的问题,这也是这种方法如此有价值的原因。
所以我们终于对“机器学习”的含义有了一个完整的定义。我们还没有进入任何关于特定类型的机器学习或算法的细节,因为这些主题中的每一个都需要至少这么长的帖子来涵盖。机器学习不是一个可以轻松或快速学习的话题,但在我看来,对为什么我们做我们所做的事情有一个良好的概念基础对于掌握更大的画面是必不可少的。如果你有兴趣了解更多关于机器学习处理的各种问题,以及是什么让它们相似/不同,请继续关注我的下一系列帖子。
为什么机器学习对智能制造很重要
原文:https://towardsdatascience.com/why-machine-learning-is-important-for-smarter-manufacturing-27da545de779?source=collection_archive---------19-----------------------
对于那些没有合适的工具和资源来开发高质量产品的企业来说,制造产品可能非常昂贵,而且是一个复杂的过程。
目前,人工智能和机器学习在生产和组装物品方面变得更加普遍,有助于降低生产成本和时间。事实上,今天所有可以由分析创造的潜在价值的 40%都来自于人工智能和人工智能技术。总体而言,机器学习的年价值可达 3.5 万亿至 5.8 万亿美元——根据麦肯锡的数据。
在过去的 5 年中,有记录表明指数技术可以帮助构建稳健而快速的模型,从而推动功能改进。
关键在于,领先的增长黑客战略涉及整合机器学习平台,这些平台可以产生洞察力,以提高产品质量和产量。机器学习有助于创造更智能的制造,机器人可以精确地将物品放在一起,分析可以识别即将到来的情况,自动化流程可以产生无错误的输出。
TrendForce 指出,智能制造与快速增长成正比。该公司预测,智能制造市场在 2019 年的价值将超过 2000 亿美元,到 2020 年将增长到 3200 亿美元,预计复合年增长率为 12.5%。许多机器学习开发公司正在利用各种智能解决方案帮助企业满足其制造需求。
数据量与日俱增,因此,制造企业需要利用更智能的解决方案来提高整个流程的效率和可扩展性。这些数据在自动化流程甚至预测和监控绩效方面帮助很大。
以下是机器学习影响制造业的一些方式-
改进流程
制造商已经成功地将机器学习纳入业务的三个方面——运营、生产和后期制作。包括这一过程的组织之一是发那科,一家日本工业机器人和自动化技术制造商。发那科使用深度强化学习,这是 Preferred Networks 开发的一种机器学习解决方案,使其机器人能够快速有效地自学新技能,而无需精确复杂的编程。
- 产品开发
在产品开发方面,数据为制造企业带来了巨大的机遇。这些数据有助于企业更好地了解他们的客户,满足他们的需求,并满足他们的需要。这样,它将有助于为您的客户群开发新的或更好的产品。
有了有价值的数据,制造商可以开发出具有更高客户价值的产品,并最大限度地降低新产品上市的风险。在对产品进行规划、制定战略和建模时,会考虑可操作的见解,从而有助于加强决策过程。CRM 应用程序的实施在很大程度上是为了优化运营流程。
2。机器人
机器人可以改变制造业。它们可以帮助人类完成复杂或危险的日常任务。制造商倾向于在机器人化方面投入更多资金,以满足需求并减少人为错误。这些工业机器最终为高质量的产品制造做出了很大贡献。每一个财政年度,该产品都会达到基线,以增强其产品线。
3。安全
机器学习已经开发了一些平台,使组织中的移动性变得安全。ML 算法可确保您的流程安全并推动业务创新,同时确保移动应用、设备和数据的开发在整个企业中得到保护。它支持设备上的安全性,并修复任何 Android 或 iOS 设备上的设备和网络威胁。
此外,如果一个组织需要一个快速、可靠、安全的 VPN 来传输、保存和保护企业数据,那么 Surfshark VPN 被认为是一个绝佳的选择。
4。质量控制
机器学习在提高制造过程的质量方面发挥着重要作用。深度学习神经网络可以在装配设备的可用性、性能、质量和机器的弱点方面提供帮助。
西门子一直在使用神经网络来监控其钢铁制造,并提高整体效率。他们已经投资超过 100 亿美元收购 ML 公司,以提高其运营质量水平。
5。供应链管理
机器学习通过改善物流流程、库存管理、资产管理和供应链管理,帮助公司实现价值最大化。机器学习、人工智能和物联网设备的集成有助于确保高水平的质量。
当今的制造商正在寻找将新兴技术与资产跟踪、准确性、供应链可见性和库存优化相结合的方法。机器学习开发公司开发了一套供应链管理套件,可以监控制造、包装和交付的每个步骤。
普华永道预测——更多的制造商将采用 ML 和分析来改善预测性维护,预计在未来五年内将增长 38%。在此期间,流程可视化和自动化预计将增长 34%,而分析、API 和大数据的集成将使互联工厂增长 31%
麦肯锡后来补充道——机器学习将减少 50%的供应链预测误差,同时也减少 65%的销售损失。
总结当前场景
通过机器学习和人工智能产品开发的核心算法将是制造业参与者的一个重大数字化转型阶段。总的来说,工业将会愿意用更复杂的原型来开发复杂的设计过程。而从产品和过程中捕获的数据将被馈送到 ML 模型,以通过连续的反馈循环来进一步改进制造过程。随着一系列机器人和机器学习将改变工业运营,制造业劳动力将需要重新技能,以便与新开发的设备一起工作,而传统机器将需要改造,以适应行业。
目前的预防性维护是定期停止机器的工作,这增加了停机时间,并且不具有成本效益。该方法也不一定解决导致系统故障的实际问题。
要获得可操作的准确见解,需要大量的实时数据,以便在系统出现故障之前了解异常情况。
机器学习通过识别、监控和分析制造过程中的关键系统变量,是高级预测性维护的关键使能因素。通过 ML,操作员可以在系统出现故障之前得到警告,在某些情况下无需操作员干预,并避免代价高昂的计划外停机。
为什么机器学习模型在生产中会退化
原文:https://towardsdatascience.com/why-machine-learning-models-degrade-in-production-d0f2108e9214?source=collection_archive---------3-----------------------
在几次由于意外的 ML 退化而导致 ML 项目失败之后,我想分享一下我在 ML 模型退化方面的经验。事实上,相对于模型维护,有很多关于模型创建和开发阶段的宣传。
假设机器学习解决方案在投入生产后无需维护就能完美工作是一个错误的假设,也是公司将第一批人工智能(AI)产品推向市场时最常见的错误。
一旦你把一个模型投入生产,它就开始退化。
为什么 ML 模型会随着时间退化?
正如你可能已经知道的,数据是一个成功的 ML 系统的最重要的组成部分。拥有一个为你提供准确预测的相关数据集是一个很好的开始,但是这些数据能持续提供准确预测多久呢?
在所有 ML 项目中,预测您的数据将如何随时间变化是关键。在一些项目中,我们低估了这一步,很难实现高精度。在我看来,一旦你在 PoC 阶段后对你的项目感到有信心,就应该制定一个计划来保持你的模型更新。
事实上,在你开始使用它之前,你的模型的准确性将处于最佳状态。这种现象被称为概念漂移,虽然在过去的二十年里学术界对它进行了大量的研究,但在行业最佳实践中它仍然经常被忽略。
概念漂移: 是指模型试图预测的目标变量的统计属性,以不可预见的方式随时间发生变化。这就产生了问题,因为预测变得不那么准确了,久而久之。
Source
关键是,与计算器相比,你的 ML 系统确实与现实世界互动。如果你使用 ML 来预测你的商店的需求和价格,你最好考虑一下本周的天气、日历和你的竞争对手在做什么。
在概念漂移的情况下,我们对数据的解释随着时间而变化,即使数据的一般分布没有变化。这导致终端用户将模型预测解释为对于相同/相似的数据已经随着时间而恶化。数据和概念也可能同时漂移,使问题变得更加复杂…
我注意到,依赖于人类行为的模型可能特别容易退化。显然,可以根据项目的性质来预测风险。在大多数情况下,必须制定定期的模型审查和再培训计划。
此外,大多数模型只能捕捉反映他们看到的训练数据的模式。一个好的模型捕捉到了这些数据中重要的部分,忽略了不重要的部分。这创造了一般化性能,但是任何模型对此的准备程度都是有限的。
泛化: 指的是你的模型能够恰当地适应新的、以前未见过的数据,这些数据来自与用来创建模型的分布相同的分布。它与过度拟合的概念密切相关。如果你的模型过度拟合,那么它将不能很好地概括。
Source
泛化性能的最佳测试是查看模型在长时间内如何处理真实世界的数据。这个过程至少有两个主要因素。
如何防止模型退化?
这听起来可能很明显,但在部署后监控您的 ML 性能是至关重要的。如果监视所有特性听起来像是一项耗时的任务,我们可以监视一些关键特性,它们在数据分布上的变化可能会严重扭曲模型结果。我强烈建议你在生产之前为这个过程创建一个策略(通过识别正确的元素)。
模型监控是一个持续的过程。
如果您观察到模型性能下降,那么是时候重新构建模型设计了。棘手的部分不是刷新模型和创建一个重新训练的模型,而是考虑可能提高模型性能并使其更加可靠和准确的附加功能。
完成上述步骤后,就可以使用新的或修改后的特征和模型参数集来重新创建模型了。在这一点上,我们的目标是确定一个能够提供最佳精度的最佳模型,该模型可以很好地适用于某些数据漂移。
我注意到,在某些情况下,重新创建模型并不能提高模型的性能。在这些情况下,分析模型出错的例子并寻找当前特性集之外的趋势有助于识别新特性。基于该知识的新特征的创建可以给予模型新的经验来学习。
人工学习
我们经常使用的用新数据维护模型的一个解决方案是使用我们最初用来构建模型的相同过程来训练和部署我们的模型。我们称之为手动学习。你可以想象这个过程会很耗时。我们多久重新培训一次我们的模型?周刊?日常?答案取决于你的 ML 申请。
当我们手动重新训练模型时,我们可能会发现一种新的算法或一组不同的功能,从而提高准确性。事实上,定期回顾你的过程可能是个好主意。正如我前面提到的,你可能会发现一种不同的算法或一组新的功能来改善你的预测,而这不一定是持续学习系统擅长的事情。
也许你可以用前期收集的数据每月或每年更新模型。
这也可能涉及回测模型,以便在重新拟合静态模型时选择适当数量的历史数据来包括。
重量数据
另一个解决方案是加权数据。的确,一些算法允许你衡量输入数据的重要性。
使用与数据的年龄成反比的加权系统可能是有意思的,使得更多的注意力放在最近的数据上(较高的权重),而较少的注意力放在最近的数据上(较小的权重)。
持续学习
我最喜欢的方法是拥有一个可以持续评估和重新训练模型的自动化系统。持续学习系统的好处是它可以完全自动化。
总的来说,合理的模型监督与精心设计的模型检查计划相结合,对于保持生产模型的准确性至关重要。优先检查关键变量,并在发生变化时设置警告,这将确保您永远不会因环境变化而措手不及,从而使您的模型失去效力。
在数据点具有高度独立性的输入变量的情况下,在统计过程控制中使用的控制图可用于检测过程的变化。
处理模型漂移
我坚持这一点,但是你的 ML 的成功也取决于你计划维护你训练过的模型的方式。在几个项目中,我意识到对模型工作方式缺乏经验的商业领袖可能没有预见到这种需求。
生产模型包括监控和维护。
应该定期评估新数据集上的模型性能。应该定期可视化和比较这些性能跟踪,以便您可以确定何时需要干预。有几种评估 ML 性能的标准。
Confusion Matrix
模型退化的原因可以被发现并被显式建模。可以研究、理解和利用周期性的时间效应。一旦模型收集了足够的性能指标,这可能是数据科学团队要解决的项目。假设你一直在追踪他们。
定期考虑性能指标并触发模型的重新训练或重建的程序也是必要的,因为没有它,您将能够看到性能的损失,但没有解决它的系统。
投资和团队
除了技术方面,我强烈建议您在项目投入生产后,将最好的数据科学家和工程师留在项目中。在经典的软件项目中,部署完成后,你的运营团队会处理它,工程师们会继续开发下一个大项目,与之相比,ML 和 AI 系统中的许多技术挑战是保持它们的准确性。
你需要投资来保持你的客户使用的机器学习产品和服务的准确性。这意味着与传统软件相比,运营 ML 产品的边际成本更高。
维修费用
为了保持高质量的模型,理想情况下,算法应该在每次数据交付时重新训练。另一方面,为了优化成本,应该尽量少做。
显然,某些机器学习开发实践招致更多的技术债务,因此比其他的需要更多的未来维护。机器学习专用开发债务风险因素多种多样。它们包括无数的概率变量、数据依赖性、递归反馈循环、流水线过程、配置设置以及加剧机器学习算法性能的不可预测性的其他因素。
这些复杂性越多,进行有效维护所需的根本原因分析就越困难。
您将无法完全自动化地摆脱维护负担。在任何情况下,倾向于机器学习模型都需要仔细审查、批判性思维和人工努力,只有受过高级培训的数据科学家才能提供这些。
为什么资产组合管理中期望收益最大化在实践中失败了
原文:https://towardsdatascience.com/why-maximising-expected-return-in-asset-portfolio-management-fails-in-practice-with-imperfect-978ba964b0c?source=collection_archive---------26-----------------------
使用模拟快速解释为什么在使用估计数据建模时,优先考虑低风险在现实中更有效
High return or low risk: which should we choose? (Photo: Clipartkey / Baekhyun)
在投资组合管理中,给定各种各样的资产,每种资产都有自己的预期回报率和方差,我们想要决定我们应该在每种资产上投资多少(从而决定一个决策组合),以便实现某个结果。这个结果通常包括优化(最大化或最小化)某个值。
直觉和几乎自然地,我们希望最大化我们投资回报的预期价值。同样,如果回报不如我们预期的那样丰厚,我们也希望将我们在回报差异方面承担的风险最小化。
但是,这两个选项哪个更好呢?你应该最大化你的预期收益还是最小化它的可变性?
和如果你只有不精确值或估计值 来模拟资产回报行为,这两个选项哪个更好?
现在,在试图回答这个问题之前,我们首先需要了解如何选择和识别给定不同风险回报偏好的最佳投资组合。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
马科维茨模型
Harry Markowitz | Fun fact: The Nobel Memorial Prize in Economic Sciences was not established by Alfred Nobel. (Photo: ORTEC)
经济学家哈里·马科维兹(Harry Markowitz)开发的马科维兹模型(他因此获得了诺贝尔经济学奖)的原理是,理性投资者会:
- 给定两个风险相等的投资组合,他/她会选择回报较高的一个,并且
- 给定两个回报相等的投资组合,他/她会选择风险较低的一个。
因此,与其在收益最大化或方差最小化之间进行选择,我们可以将两者结合起来,寻求最小化这个等式:
The first term in the objective function represents the expected return while the second term its variance.
其中, x 是一个向量,代表你应该投资于每项资产的资金比例(从 1 中选择)。Lambda 作为一个权重来改变两个因素(预期回报和方差)对目标的贡献,而第一个约束确保投资于每项资产的资金比例总和为 1。
给定一组输入参数(将真实资产回报建模为正态分布),如下所示,然后我们可以针对不同的 lambda 值求解最优的 x* 向量。
Input parameters that model the monthly returns of 5 different investment assets. Mu refers to the mean, sigma refers to the standard deviation, while rho refers to the correlation matrix between the asset returns.
由于每个 x* 代表每个风险回报偏好水平的最佳投资组合(我们通过改变λ来改变),我们能够使用以下公式计算每个风险回报偏好水平的预期回报和标准偏差值:
Note how we are calculating these values using the optimal value x*
这些单个的价值然后被绘制在一个图表上,产生了一个被称为“ 真实有效边界 ”的图表,它代表了我们在不同风险回报水平下可以拥有的最佳投资组合。
As expected, the greater the risk you take, the greater your expected return gets.
从上面的图表中,我们似乎可以非常准确地确定我们愿意接受的每个标准差(或风险)的预期收益。
然而,请记住,到目前为止,我们只是假设我们有关于每个资产回报如何表现的完美信息。如果我们对这种行为毫无头绪,会发生什么事情呢?事实上,情况几乎总是如此。
然后我们必须估计他们的模型参数。
不完全信息
在现实场景中,即使我们可能没有任何关于真实模型参数的信息,我们所拥有的是关于月度回报的历史数据(例如,n = 24 个月)。为了模拟这些可用的数据,我们必须从我们之前指定的“真实”模型参数中生成随机月度回报。
由于真实的模型参数是看不见的,并且应该是未知的,我们只能通过使用下面指定的估计器来估计真实的模型参数,其中 r 是指我们已经生成的月度回报(或历史数据):
Each line gives the estimated mean, estimated variance and estimated correlation coefficient respectively
然后,我们可以尝试解决之前定义的最小化问题,以获得最佳决策向量*x ’—它用撇号(’)表示,表示它是使用 估计 参数而不是真实参数计算的。
由于我们想要预测可用的最佳投资组合(也称为前沿),我们将使用估计的模型参数值来计算(估计的)平均回报和标准差:
Note how the estimated mean and covariance is used instead of their actual values.
鉴于我们已经使用了估计的模型参数来“预测”平均回报和标准差,我们将把生成的前沿面称为“”。
然而,这里有一个问题——不管我们如何确定我们的投资组合,我们将 实际 赚取的回报最终将取决于 真实 模型参数,而不是 估计的 参数。
因此,我们需要根据之前获得的 x' (s)以及真实模型参数,计算另一组平均回报和标准偏差值:*
因为这代表了我们基于优化的决策向量 x' 得到的 实际 结果,所以我们称之为“ 实际边界 ”。换句话说,这个边界代表了我们基于(不完美的)决策所期望看到的实际结果。*
那么不同的前沿相比如何呢?他们彼此有很大的不同吗?我们去看看。
严重的误判
在下图中,我们有以下三个边界:
- 真实边界—代表基于使用完美模型参数确定的最佳投资组合的实际投资组合回报和标准差
- 平均估计边界-表示基于使用估计模型参数确定的最优投资组合的估计投资组合回报和标准差
- 平均实际前沿——代表基于使用估计模型参数确定的最优投资组合的实际投资组合回报和标准差
后两个前沿中的“平均”是指每组 24 个模拟月度“历史数据”的 1000 次模拟运行的平均。
Looking at the actual and estimated frontiers alone, we can see that there is always a systematic overestimation of mean return and a systematic underestimation of standard deviation
初看起来,这三条曲线根本没有相互重叠;估计边界位于真实边界之上,真实边界位于实际边界之上。
这有什么意义?这意味着,只有月收益估计参数的投资者将总是得到比他/她拥有的平均收益以及 真实 平均收益低的 实际 平均收益,即使他/她从一开始就拥有完美的信息。标准差的情况正好相反。**
更有趣的是,与平均回报率高时相比,当标准差低时,曲线彼此更接近。这表明,以高平均回报率为目标所遇到的估计误差,比我们以低标准差为目标时看到的误差要大得多。
换句话说,在只有不完全信息的情况下,优先考虑最小化风险(或标准差)比最大化回报更可取,这样才不会高估你的投资组合的表现。
知识就是力量,只要它是现实的
一个自然的后续问题是,如果历史数据量增加(例如 n = 360 或 n = 1800),上述估计误差是否会减少。简单直观的答案是肯定的,模拟显示。
The curves seem to be converging in general, with the left ends packed more closely than those on the right
The curves get even more closely packed here, so all seems well when we get more data to make better estimates but…
我们需要多少数据?360 或 1800 个月有多长?那可是 30 年 150 年啊!得到这样的数据甚至现实吗?即使是这样,我们又怎么知道月度回报分布背后的基本面没有改变呢?也许在若干年后,这些数据甚至不再那么相关了。我们可能需要另一种方式来解决这个问题,但这完全是另一回事…
现在怎么办?
因此,正如你所看到的,如果你不想严重高估你的收入,特别是当你使用估计的模型参数时,只最大化预期收益可能是个坏主意。相反,依靠最小化方差将获得更可预测和一致的结果。
幸运的是,多年来人们已经开发出了其他的工具和方法来解决我刚刚展示给你们的问题。机器学习也进入了资产管理领域,你可能会有兴趣看看迄今为止它是如何改变事情的。
我希望您觉得这个演练很容易理解—您可以自己编写一些简单的代码来模拟它(我是在 MATLAB 上完成的)—并且您喜欢这篇文章。感谢阅读!
参考
马克·布罗迪。使用估计参数计算有效前沿。运筹学年鉴:金融工程特刊,第 45 卷,第 21–58 页。
为什么测量精度很难(也很重要!)第二部分
原文:https://towardsdatascience.com/why-measuring-accuracy-is-hard-and-important-part-2-the-common-problems-in-measuring-accuracy-cc26a977823e?source=collection_archive---------25-----------------------
测量精度中的常见问题
介绍
本文是我撰写的关于测量精度挑战的 4 篇文章系列的第 2 篇。如果你还没有阅读第一篇文章,请点击这里查看:https://www . electric brain . io/blog/why-measuring-accuracy-is-hard-and-very-important-part-1
在本文中,我们将讨论在测量精度方面出现的主要挑战。我们将尽可能用例子和图表来说明。
您的训练数据通常与真实世界的数据不同
使测量准确性变得困难的最常见的事情是,有时我们使用的训练集与算法预期处理的真实世界数据不同。出现这种情况可能有许多不同的原因:
- 您在合成或增强数据方面的培训
- 您的数据集是一个有偏见的小样本,不能代表算法需要操作的真实世界数据
- 您的数据集是使用与真实世界数据不同的流程收集的,例如,您通过搜索 google 为问题数据集收集潜在问题,但实际问题是通过您的网站输入的,可能会有所不同
- 您可能无法访问真实世界的数据,例如,这是一个发布前的新产品,或者该产品的部署方式使您无法将任何数据发送回总部
- 您的算法可能必须运行在客户数据集上,而不是您自己控制的数据集上
- 真实世界的数据可能是一个不断发展的移动目标,例如股票市场
我最近在几个不同的项目中遇到了这个问题,其中最突出的是一家聊天机器人公司。这是一个虚构的例子,但是来自我在公司工作的真实经历。
想象我们正在为呼叫中心开发一个聊天机器人产品。在我们获得第一笔销售之前,我们需要证明产品是有效的。为了让产品发挥作用,我们需要数据。我们需要的数据只是提问的不同方式,例如,你想检查订单状态的不同方式,或者在餐馆订购披萨的不同方式。我们用我们唯一知道的方法收集数据——关于机械土耳其人。然而,通过直接要求人们想出订购比萨饼的不同方法,我们确实得到了一些变化,但我们开始得到许多重复的内容,如:
- 能给我一份披萨吗
- 我能要一份披萨吗,先生
- 我能要份披萨吗先生先生
- 我能吃个披萨吗,兰斯洛特先生
- 我能要个披萨吗,兰斯洛特夫人
- 我能要一份披萨吗,兰斯洛特夫人
- 能给我一份披萨吗
- 我能要一份披萨吗
- 能给我一份披萨饼吗
他们确实想出了很多不同的例子,成百上千个。事实上,这些都是有效的句子,应该可以触发我们的聊天机器人去订披萨。但是这里没有太多的变化——不是我们想要的那种变化。这并不代表真实世界的数据。
最终,我们求助于制定规则,比如最小句子长度、句子在整个数据集中的唯一性要求、与他们输入的其他样本的最小差异等..这些东西确实有助于我们获得更多的多样性。然而,我们担心数据集仍然不能真正代表真实世界的数据:
- 你好,先生或女士,你能允许我在你的好地方吃披萨吗
- 你好很好先生,你能允许我在这个神奇的餐厅吃一个美味油腻的披萨吗
- 嘿,请允许我从你们漂亮的餐馆给我一个比萨饼
我们最终拼凑了一个我们喜欢的数据集,并取得了+90%的准确率。似乎是个不错的结果。
然后我们把这个带给客户,给他们看。但机器人最多只能在演示中工作 70%的时间,经常摔倒并误解看似简单的命令。算法运行的数据集,真实世界的数据,与算法训练的数据集完全不同。我们技术上勾选了所有方框的数据集:
- 它很大——我们有数以千计的每个意图的例子
- 它包含了多样性——这些例子在与概括相关的方面是不同的
- 这是有效的,例如,这些句子确实是我们想要触发机器人订购比萨饼的句子
- 它没有不正确或无效的条目
然而,关键问题在于第二点的细微差别。尽管数据集包含多样性,但它并不像真实世界的数据那样包含同样的多样性。尽管我们有许多不同的订购披萨的方式,但我们没有真人向我们的机器人订购披萨的具体方式。
你会非常惊讶,我们经常被期望在一种类型的数据上建立模型,并在不同类型的数据上执行它们。它之所以有效,是因为机器学习对今天的算法来说非常棒,非常强大。他们能够找到一般模式,然后将这些模式转移到新的环境中。但它提出了一个新问题,即在这些新环境中测量系统的准确性。
你比其他人更关心某些失败案例
通常情况下,你的机器学习算法可能在不同方面都是错误的。随着算法变得越来越复杂和强大,并被用于更多的事情,其行为的具体细节变得更加重要。
在某些情况下,有一整套算法协同工作来创建一个完整的系统——预处理、增强、多种机器学习算法、后处理、过滤、阈值处理、验证——人工智能系统有许多组件使其工作。每一步可接受的错误和正确答案的形式是不同的,这使得测量和改进整个系统成为一项复杂的任务。
在其他情况下,即使算法的最终输出也必须呈现特定的形状和形式,很难减少到一个数字。在自动驾驶汽车中,我们关心车辆在边缘情况下的性能——恶劣的天气、其他司机驾驶不当等..从许多 YouTube 视频中可以很清楚地看到,自动驾驶汽车在典型情况下可以很好地工作。
我可以找出你比其他人更关心某些失败案例的各种原因:
- 某些类型的错误检测可以通过处理管道的后续部分排除,但失败的检测无法恢复。因此,你更关心捕捉所有的真阳性,而不是减少假阳性。
- 也许你更关心边缘情况下的算法性能,例如恶劣天气条件下的自动驾驶汽车
- 当算法对其预测没有信心时,也许有可能进行人工干预
- 也许如果这个算法被用于一个警告系统,当有真正的危险时,发出警告并有一些误报比不发出警告要好
- 也许你的算法在某些重要的数据子集上表现极差
- 也许某些类型的故障会让你的用户非常恼火,而其他类型的故障很容易被掩盖
这些类型的问题通常通过提出替代的度量标准来解决。有时我们会使用混淆矩阵,比如这个,来帮助我们理解正在发生的事情:
其他时候,我们可能会使用替代指标,如精确度和召回率、https://en.wikipedia.org/wiki/Precision_and_recall,它们分别忽略了假阴性和假阳性,而原始精确度则考虑了所有类型的错误。
我认为这种现象的另一个有趣的表现是机器学习算法中的歧视性偏见问题。例如,这包括面部识别算法对白人和亚洲人比对其他种族的人更有效的问题。这里的问题是,在数据集的未标记子集上,您的算法表现不佳。当一个人在制作面部识别算法时,你可能只会收到一个巨大的图像数据集,而没有任何关于谁是哪个种族和性别的数据。比方说,如果你是一名收到匿名数据集的脸书研究人员,这种情况就可能发生。如果这个数据集来自脸书的美国数据集,那么发现它主要包含白种人的图像就不足为奇了。你训练算法,并声称其 95%准确。但是算法 5%的失败都是谁呢?对于您的匿名数据集,您无法真正知道-唯一的解决方案是手工检查。你对准确性的简单衡量没有抓住算法的重要社会政治属性。
模型、数据集或测量值有噪声
另一个妨碍测量精度的大问题是存在噪声,包括模型固有的噪声、数据集中的噪声和我们测量精度的噪声。
拆分数据
基本的困难可能出现在任何模型中。请考虑以下情况。您有一个数据集,并且您希望衡量您训练的算法的准确性,以了解它概括数据集属性的能力。你做一个明智的数据科学家做的事情,将你的数据分成三部分——培训、测试和验证:
但是现在你面临着这个问题——你应该把哪些项目归入哪个组?如果我使用这种分割方式会怎么样:
最简单的方法可能是随机打乱你的数据集,然后分成三份。但是当您训练您的模型时,您会发现每次这样做,您都会得到不同的结果,即使您的模型没有变化:
沮丧的是,你可能会认为这是因为数据集从一次运行到下一次运行非常不平衡。也许您可以决定使用数据集中的标签来构建训练集、测试集和验证集,其中每个目标标签的数量都是偶数。通过每个标签有效地将数据集划分为一系列子数据集,随机地将这些数据集分成 3 份,然后将它们重新组合在一起。现在你的数据集是类平衡的,但仍然是随机的。现在您已经降低了噪音,但是仍然存在问题:
您已经减小了扩散,但是在您的测量中仍然有噪声。您发现,对于每个标签,数据集中实际上有更难和更容易的样本,这些样本仍在不断变化。但是你能做什么呢?
您可能会决定使用交叉折叠方法,也就是说,取数据集内所有 5 个可能的 80/20 分割的平均值。这确保了每个样本在测试集中至少出现一次。但这种方法对于许多深度学习模型来说可能是昂贵的,在这些模型中,GPU 能力匮乏,并且您渴望运行尽可能多的实验。也许您只是锁定了一个固定的测试和培训集,并且只针对它进行度量。但是在动态的真实世界环境中,这可能很困难,因为我们的数据集在不断发展,变得越来越大,实际上要求我们维护一个将条目标记为训练、测试或验证的数据库。
维持良好、稳定、一致、无噪声的模型精度测量所需的额外基础设施可能会快速增长,具体取决于您希望降低噪声的程度。
数据集中的噪音
我见过的另一个大问题来源是嘈杂的数据集。嘈杂和充满错误的数据集是我生存的祸根。与第三方数据外包公司打过交道后,我亲眼目睹了获得高质量、干净标签的数据有多么困难。
这个问题是这项任务固有的——标记数据很糟糕。无论我们开发了多少花哨的工具来帮助贴标签,它仍然是一个平凡的数据输入任务。它天生容易出错。
人们采取了许多措施试图解决这个问题:
- 也许我们把这个过程游戏化,试图鼓励用户“玩得开心”,同时提供标签化的数据。
- 当人工智能提出“建议”时,我们也许能够让我们的用户为我们提供标记数据,作为他们工作的一部分,然后他们可以纠正和修改这些“建议”。由于工作对用户的价值,用户已经被鼓励要小心谨慎
- 我们可能会使用双重验证(将相同的项目发送给多人以达成共识),或者由经理进行随机抽样和验证等技术
- 一些人甚至使用人工智能分析技术,试图识别数据集中的异常值
然而,无论我们如何做,我们正在处理的数据集通常是有噪声的。
在机器学习方面,只要数据集不是太嘈杂,我们仍然可以经常教会算法学习模式。尽管有很多噪音,深度学习仍然特别擅长概括。但是在测量和验证方面,数据集中的噪声给我们带来了一些固有的问题
- 我们不知道我们的准确性度量是否提高了,因为我们对一些标签不好的样本进行了过度拟合,或者模型是否成功地进行了推广。这意味着需要更大幅度地提高精确度来确认改进
- 即使我们的模型已经完美地概括了数据,也没有办法达到完美的准确性。最好的可能精度是一些不可知的,不可测量的数字。如果你的数据集真的很吵(+10%),当你坐在 89.7%时,这可能会让你真的旋转你的轮胎,试图找出更多的方法来改善你的模型。你的模型实际上可能对真实世界的数据是 100%准确的,你没有办法知道它。
数据集中的一致错误
可能比数据集中的噪声或随机错误更糟糕的是注记团队所犯的一致性错误。如果以一致的方式出现错误,那么机器学习算法可以尝试学习这些错误模式,作为其整体学习的一部分。
在几个现实世界的项目中,我都被这种情况困扰过。在我们最近与一家大型加拿大银行执行的一个项目中,我们得到了由第三方注释的提供的数据。我们没有进行足够的监督和测试。我们收到的样本很好,但我们未能检查完整的数据集。我们继续训练我们的模型,最终达到了非常高的精确度。但当向客户展示算法时,他们很快指出最终结果似乎充满了错误。当深入研究时,我们意识到,不仅数据集的大部分被错误地注释了,它还一直以同样的方式被错误地注释。
因此,我们仍然有可能通过我们可用的每一个测量来实现高度的准确性,并且模型仍然是错误的。这个模型确实学习了模式,它精确地学习了注释数据集的人所犯的错误模式。很明显,我们不能只检查过程中通过电子邮件发送给我们的“提供的样品”,因为这些样品可能已经由正确理解要求的经理准备和审查过了。我们需要分析和验证最终的样本,这些样本是由该公司的各种低收入数据输入人员汇总而成的,这些人可能会也可能不会收到足够的指示来正确地注释数据。
在我看来,这是做真实世界 AI 项目最难和最令人沮丧的方面之一。使用经过验证的测量准确度的技术,你可以有很高的准确度,但最终仍然是错误的。
您的管道中有多个指标
测量精度时有时会出现的另一个问题是变得太多而无法测量。您可能有十几个不同的度量标准来代表您系统的不同阶段。
这个问题是我最近在构建文本提取引擎时遇到的。该模型将一个单词及其周围的上下文作为输入,并为该单词生成一个分类。
然而,我们的管道包括两个阶段。第一个机器学习算法只是在 null 或 extract 之间做决定,第二个阶段做最后的分类。在实践中,我们降落在一个四层系统,但 2 层系统将足以解释。设置如下所示:
所以现在我们有两种不同的机器学习算法,有两种独立的精度测量。我们还有几种不同的失败案例:
-
1 处的误报(在应为空时提取)
-
1 处的假阴性(当它应该被提取时为空)
-
2 处的误报(一个应该为空的类别)
- 第二个错误的否定(当它应该是一个类别时为空)
此外,我们有额外的复杂性,我们的第二阶段算法能够部分补偿第一阶段的误差。例如,在第一阶段的假阳性可能在第二阶段仍然被正确预测为空,并且仍然导致正确的最终输出。因此,这两个阶段的精度测量可能会以复杂的非线性方式相互影响。层#1 中的假阳性的更差的准确性不一定导致最终输出中的更低的准确性。
事实上,层#1 上更差的精度可能意味着正好相反。为了让这种方法有效并产生更好的最终准确性,我们不得不将第 1 层向更多的假阳性倾斜。默认情况下,它会产生更多的假阴性,然后假阳性,与单层系统相比,降低了准确性。但是将层#1 向更多的假阳性倾斜(降低其准确性),意味着它只过滤掉它高度确信实际上是空值(真阴性)的条目,而其他一切都可以传递到层#2 进行最终分类。这提高了模型的最终精度。因此,以那种特定的方式伤害第 1 层会使整个模型更加精确。过滤层(层#1)帮助模型处理输出中不平衡的类和高度的空值,但只有在以正确的方式测量和使用时。
就其本身而言,拥有多个处理阶段,甚至在这些不同的处理阶段进行多次精度测量并没有什么错。然而,太多的好事会产生新的问题:
- 当你的一些指标提高了,而另一些变得更差时,这就造成了混乱。实际发生了什么?
- 很难向涉众传达他们对模型的期望
- 很难理解模型的最终行为是什么
根据我们的经验,当你处于这种情况时,只有一个解决方案:将所有的研发&集中在提高你的端到端或最终结果指标上,也就是说,从系统处理的最后阶段退出的准确性。我们并不是说您不应该测量中间精度——它们对于理解各种处理阶段如何相互作用以及想出可行的方法非常有用。但是当谈到衡量一个改进是否真的是一个改进时,只有最终结果的准确性才是重要的。
您有多个具有多种粒度级别的指标
这个问题类似于您的管道中的多个度量的问题,但是它由于不同的原因而表现出来。让我们考虑一下从收据中提取数据的问题,我在这里最突出地看到了这个问题。基本问题是获取收据的图像并将其转换为完全结构化的数据:
所涉及的过程是:
如果您注意的话,您会注意到这个设置在整个管道中也有多个指标。OCR 引擎、逐字母分类和后处理都可能出错,并可能在每个阶段产生不同的准确度测量值。根据他们之前的输入是否被认为是准确的,他们也有不同的测量,例如,我们可以在假设 OCR 准确性是完美的情况下逐个字母地测量准确性(通过输入真实的 OCR 数据),并且我们可以在原始 OCR 输出上逐个字母地测量准确性,包括错误。
然而,我想集中讨论另一个扳手,它被扔在系统的中间部分,即逐字母分类的准确度测量中。
测量准确度最明显的方法似乎是从字面上测量正确的字母分类的数量:
但这种方法的问题是,大部分字符都要被归类为“空”,或者不提取。在这个标准下,我们相对容易达到 97%和 98%的准确率。但是我们很快发现,那些被认为是 2%或 3%的错误非常重要。
我们分析的许多收据不是星巴克的空头收据,而是像这样的庞然大物:
在这些收据中,几乎 95%的字符被归类为空。然而,剩下的 5%的角色是我们关心的。根据我们的传统度量,即使我们的模型除了预测空值之外什么也不做,这些收据也能获得 95%的准确率。从一个收据到下一个收据,测量自然是不稳定的,并且没有给我们足够的洞察力来了解实际发生了什么。
因此,这个问题催生了各种替代的精度测量方法,旨在让我们更深入地了解系统的行为以及它所犯的错误类型:
- 单词级别的准确性—没有错误的单词的百分比
- 线级准确性—无错误线的百分比
- 章节级准确性——无错误的章节百分比(收据分为标题、项目、税收、总计、页脚)
- 收款级别准确性—无错误的全部收款的百分比
发现我们的模型的字符级准确率为 98%,收据级准确率为 67%,这是非常深刻的。收据至少有 200 个字符,所以我们预计在字符级别上每张收据平均有 4 个错误。您可能会认为,收据级别的准确性应该是 0%,因为平均而言,收据应该至少有 4 个字符级别的错误,根据收据级别指标,这是一个错误。但是我们的大部分收据都很顺利,完美地分类了每个角色。其他收据完全是乱七八糟的,有多达 20%到 30%的错误分类。
如果可能的话,拥有不同粒度级别的度量标准有助于理解您的模型是如何失败的。但是它们也会给你的测量增加混乱和噪音,当一些指标改善而另一些变得更差时,你会原地打转。更多关于在这种情况下该怎么做的内容将在第 4 篇文章中介绍。
你只有系统中间步骤的基础数据
这个问题出人意料地经常出现,事实上它也在上面的收据示例中出现过。你有一个机器学习系统,你已经标注了需要进行的学习中最重要和最困难的部分。但是你的算法在得到最终结果之前需要进行某种后处理。这种后处理是基于一些简单的试探法和假设,这些试探法和假设是针对您所遇到的问题的。
这种启发的一个突出而简单的例子是当我在电子表格上提取数据时。电子表格中的每个单元格都必须归入几个类别中的一个。然后,这些单元将被组合成一组输出。设置大致如下:
该系统需要能够处理各种不同格式的电子表格,这些表格是由不同的人手工准备的,可以任意决定格式和结构。
构建这个系统的一个合理的方法是对所有的细胞进行分类,就像这样:
然后创建一些预测特征,并训练一个算法来预测每个单元的分类。但是为了得到最终的结果,你必须做一个更重要的处理步骤——你必须将细胞组合在一起。在我们的例子中,方法看起来很明显:同一行上的任何单元格都应该被分组到同一个输出中。99%的电子表格的本质是人们每行有一个条目。
然后,您可能会认为只有分类像元作为基本事实数据是安全的,并且您的算法的最终输出实际上没有基本事实数据。你优化你的模型,测量你的准确度,得到 99%。万岁!但是等等,有个问题。在您的数据集中,有一些看起来像这样的电子表格(是的,这确实发生在我身上):
现在很明显,只在细胞水平上拥有基本事实数据是一种责任。我们的后处理中的一个关键假设,即每行只有一个输出,已经被违反。我们从我们的系统测量的准确度是极好的。我们的代码按照设计完美运行,并且我们所有的单元测试都通过了。但是系统作为一个整体仍然在产生无效的结果,我们最初并不知道,因为我们只有系统中间步骤的基础数据,而不是最终结果。
这个问题可以在任何情况下表现出来,在你的机器学习算法完成后,你有额外的后处理步骤,但没有任何方法来衡量最终输出的准确性。虽然这个例子简单易懂,但在机器学习算法输出和最终结果之间的阶段,可能会出现更加复杂和微妙的情况。永远不要浪费时间和金钱去获取真实的数据来衡量准确性,否则你会被烧伤。
结论
测量精度很难。机器学习系统的许多最好的方面,比如它们归纳出新的、从未见过的例子的能力,也给我们带来了巨大的头痛。测量精度的许多问题源于机器学习的有益特性:
- 训练数据不同于真实世界数据的问题,直接来自于好的机器学习模型能够进行概括的能力,所以我们一直在推动我们希望它们能够做到的极限
- 关心不同故障案例的问题直接来自于这样一个事实,即我们的模型能够在复杂的环境中以智能行为运行,因此我们对它们的期望变得越来越细微和具体
- 测量中的噪声问题直接来自于我们的模型是不精确的和近似的,但这也是允许它们一般化的原因
- 多管道度量的问题来自机器学习算法的可预测的成功行为,允许我们将它们连接到日益复杂的序列和管道中
- 粒度的多种度量的问题来自于我们的模型对复杂的、高度多维的问题进行操作的能力
- 只有中间步骤的基础事实的问题,来自于机器学习应用于特定的、孤立的问题,然后被拼凑成更大的、更传统的计算系统的灵活性。
衡量准确性很难,很大程度上是因为机器学习算法非常擅长它们的工作——智能。我们很少谈论衡量人们的准确性,因为我们承认很难预先定义什么是正确的行为。机器学习模型将越来越多地受到同样的限制——准确性将变得更加模糊,更加难以衡量。我们越来越多地将机器学习应用于精确度难以定义的环境,更不用说测量了——想想为创作音乐而设计的算法。你如何衡量这方面的准确性?但是,我们现在已经创造出了能够很好地产生令人愉快的音乐的算法。
在这一系列博客文章的第 3 部分中,我将讨论一些更有趣、更微妙的测量准确性的问题。如果没有现成的标准来衡量您的问题的准确性,您会怎么做?当你无法衡量自己真正在乎的结果时,你会怎么做?如果你没有任何地面真实数据怎么办?如果你甚至不能在你的问题的上下文中定义什么是准确性呢?
在这一系列博客文章的第 4 部分中,我将尝试提出一个更好地度量准确性的框架——如何度量、何时度量以及度量什么。最重要的是,我将说明如何测量精度取决于你想用这个精度值做什么。无论是为了提前停止还是阈值校准,为了模型参数的贝叶斯优化,为了对模型进行迭代改进,为了了解模型的故障情况,为了向经理传达绩效,或者为了向客户传达绩效,对于不同的情况有不同的测量方法。没有放之四海而皆准的解决方案。
原载于www . electric brain . io。
为什么测量精度很难(也很重要!)第三部分。
原文:https://towardsdatascience.com/why-measuring-accuracy-is-hard-and-important-part-3-the-hard-problems-in-measuring-accuracy-74c7249e7308?source=collection_archive---------26-----------------------
测量精度中的难题。
这是讨论测量精度主题的系列文章的第三篇。
在本系列的第 1 部分中,我们讨论了正确测量精度非常重要的原因。点击这里查看:https://www . electric brain . io/blog/why-measuring-accuracy-is-hard-and-very-important-part-1快速 TLDR:测量准确度很重要,有两个主要原因。首先,它让我们可以让我们的模型变得更好——并且知道它们目前有多好。第二,它允许我们与利益相关者交流他们对模型的期望。
在本系列的第 2 部分中,我们讨论了影响测量精度的最常见和最典型的问题。如果你还没有读过,请点击这里查看:https://www . electric brain . io/blog/-why-measuring-accuracy-is-hard-and-important-part-2快速 TLDR:有一大堆事情阻碍了测量准确度,从我们希望我们的模型如何表现的复杂预期,到它预期操作的数据的复杂性质,再到我们必须将多种算法拼凑在一起以形成一个完整系统的复杂方式。
在这篇文章中,即本系列的第 3 部分,我将讨论在尝试度量模型的准确性时出现的更不寻常、有趣和困难的场景。
您的模型可能没有任何实际数据
一般来说,这可能是机器学习中最难处理的场景。你可能会问,没有任何地面真实数据,你怎么可能训练一个机器学习算法?难道用于训练算法的数据不能用于地面实况吗?
如果你仔细想想,有很多情况下,我们在没有实际数据的情况下应用机器学习:
- 当执行多种类型的无监督学习时,例如聚类或推荐引擎。对于什么集群或什么建议是正确的,没有正确的答案,只有各种更好或更差的衡量标准
- 当我们从头开始构建新产品时,使用合成数据来引导系统,但在发布后基于真实世界的数据构建数据集。对于算法所应用的数据来说,合成数据不是真实的地面事实。
- 在许多数据科学流程中,例如排列两个不同的噪声数据集,例如基于公司和品牌名称匹配两个不同的数据库。对于两个数据集之间的正确比对,我们可能没有任何基本事实。建立一些基本事实也许是可能的,但是过于昂贵或耗时,以至于组织觉得不值得。在这种情况下,模型的要点是避免手动排列条目
- 我们可能正在从系统的中间步骤训练我们的机器学习算法,但输出然后经过一系列后处理算法,将它转化为最终结果。我们不知道最终结果。
- 当进行强化学习时,比如在模拟环境中训练机器人人工智能,然后试图将这些知识转移到真正的机器人身上。
- 我们可能会大量使用迁移学习来构建我们的产品
- 我们正在建立一个不涉及机器学习的管道,例如,使用传统的计算机视觉技术来建立一个人跟踪算法。在你的环境中,标记任何大量的数据可能太昂贵,或者当你的 R&D 预算更大时你会做的事情。现在,你只需要一个看起来可以工作的原型。
你在机器学习上工作得越多,你就越会在没有你需要解决的问题的真实基础的环境中工作,或者至少它是如此之少以至于几乎没有用处。
可能没有现成的度量标准来有效地衡量您的模型的准确性
当你在人工智能和数据科学领域做真正开创性的工作时,你可能会遇到不太清楚如何衡量模型性能的情况。这并不是说性能不可测量,而是可能有多种看似同样有效的方法来测量性能,但对结果却有不同的说法。可能有隐藏在研究和文献中的模糊的度量和测量,或者甚至一些你不熟悉的更常见的度量。
我发现这种情况出现在一些不同的环境中:
- 你正在将一种最近建立的机器学习方法带入一个全新的领域:例如,生成-对抗-网络,图像生成 GAN 通常由一种称为初始分数的东西来衡量,它使用标准的分类类型图像网络来检查它们的行为,并结合熵的度量来得出分数。现在,如果你将甘的应用于建筑、3d 模型或音乐的蓝图,可能没有现成的分类模型可以用来形成类似盗梦空间的乐谱
- 你的产品可能有一种独特的输出/行为形式,这种形式是新颖的,在研究社区中并没有真正建立起来。例如将夜间图像变成白天图像的神经网络。你是如何衡量的?
- 你可能不是你工作的特定领域的专家。可能确实存在一些度量标准,但是如果没有这个狭窄研究领域的深厚专业知识,你永远不会知道它们
- 您的机器学习类型的常用指标可能有与您的算法相关的特定弱点,这意味着它将对与您相关的重要失败案例给予较低的权重
我会告诉你这是我最近想到的,我觉得有必要真正设计一个指标。我在开发一个分析简历的系统。该系统的基本前提如下:
- 用户上传 1000 份简历
- 用户浏览 20-30 份简历,给每个候选人一个“喜欢,也许,不喜欢”
- 该算法根据你教给它的喜欢/不喜欢的偏好,对其他 970 份简历进行排序和排名
构建和测量这个系统面临几个挑战。首先是构建适当的测试用例,我们可以用它来精确地测量系统的结果。第二是挑选什么样的度量标准和形式有意义。第三是提高成绩。
我们构建测试用例的方式是创建一组算法应该找到的“目标”简历。然后,我们会为每份目标简历添加 25-50 份“负面”简历。底片是从整个数据集中随机抽取的。然后,我们会像任何筛选一样检查测试案例,审查 20-30 份简历,其中只有几个目标是喜欢的,并查看系统如何对剩余的简历进行排名。
由于不熟悉信息检索研究,我真的不知道这里应该使用什么度量标准。一个衡量标准可能存在,但我不想深究并找出答案。另外,这个系统是基于喜欢/不喜欢,而不是关键字匹配,更像是一个推荐系统。在我的脑海中,有一些最初的想法:
- 在较大的简历排序中,目标简历的平均“排名顺序”。较低的排名意味着更接近顶端,这正是我们想要的。它有一个很大的问题——它根据目标与否定的比率以及目标的总数而变化。
- 人们可以做到以上所述,但是将等级顺序标准化在 0 和 1 之间。这个度量是一个改进,但是如果目标与负面的比率发生变化,它仍然会受到阻碍,这在真实环境中是肯定会发生的。它也没有明确的最佳值——多个目标的平均排名永远不会是 0,因为它们也是相互排名的
- 相反,我们可以衡量为了让所有目标排名靠前,你需要浏览的简历的最少数量。这将直接从用户的角度构建衡量标准——与手动浏览整叠简历相比,我从这种机器学习算法中获得了多少价值。
- 我们也可以用准确度、精确度和回忆来表示分数。例如,我们会衡量前 10 名、前 20 名或前 30 名(甚至前 10%)的目标简历数量。这个指标的优点是对数据集大小和比率的一些变化有一定的不变性,但是我不喜欢引入额外的问题,为 Top-K 指标选择什么 K。
- 我的另一个想法是,最终我们可能会根据算法的准确性来衡量它,根据以前的简历来预测用户是否喜欢/不喜欢一份简历。但是我们没有足够的数据来训练这种类型的机器学习算法——更不用说测量它了。此外,它并不能真正代表我们试图解决的问题,也不能代表用户界面中显示结果的方式。用户界面中的结果是分级的,而不是分组的。
所以最终我不得不自己想出一个度量标准应该是什么样子。它必须捕捉算法的能力,仅基于少量的学习将目标简历放在堆的顶部,它必须对测试案例的大小和目标与否定的比率不变,如果可能的话,它需要抗噪声。
因此,我将我想要的度量的数学属性公式化如下:
- 如果所有目标简历的排名都高于所有负面,则该值为 1.0
- 如果所有负面简历的排名都高于所有目标,则该值为 0.0
- 该值介于其他所有值之间
- 该值尽可能不随目标与负数的比率以及测试用例的总大小而变化。
因此,我得出的公式如下(请原谅我的 pythonic 数学):
- 归一化等级[Nr] =等级/总简历数
- bestyposablemeanrank[Bpmr]= average(Nr(Rank)表示 Rank in range(NumberOfTargets))
- worstpossible mean Rank[Wpmr]= average(Nr(total resumes-Rank)表示 Rank in range(NumberOfTargets))
- mean rank[Mr]= average(Nr(target rank)for target rank in Targets)
- 得分= 1.0 — ( (Mr — Bpmr) / (Wpmr — Bpmr))
该等式基本上使用目标简历在简历总体排名中的平均排名。这些等级首先被标准化为 0 到 1 之间,然后所有目标的平均等级被标准化为介于最佳可能平均等级和最差可能平均等级之间。最好的平均排名实际上不是 0——因为目标简历也是相对于彼此排序的。最好的平均排名是所有目标简历都排在列表顶部时的排名。因此,如果 10 份简历中有 3 份目标简历,那么最佳可能平均排名是 0.0、0.1 和 0.2 的平均值,整体最佳可能平均排名是 0.1。对最差可能排名也是如此,测试用例的最终得分是它在最好和最差可能平均排名之间的归一化位置。
有了这个自定义评分公式,我就能够创建一个与我喜欢的其他类型的指标具有相对一致行为的指标,例如,1.0 是可能的最佳结果,0.0 是可能的最差结果。对于目标值与负值之间的比率以及数据集的整体大小的变化,它也具有良好的行为。这允许我们比较不同测试用例之间的分数,然后进一步允许我们计算所有测试用例的平均分数。
像这样设计你自己的度量方程是一种先进的技术,但是当你在一个模型上开发测量时,它应该是你的工具库中包含的东西。
可能没有明确的方法来定义模型的准确性
这种挑战通常出现在你进行无监督学习的时候,例如聚类和生成模型,或者一些形式的强化学习。
如果您正在处理一个集群问题,您最终会遇到这样的问题:什么是好的集群?这个问题不明显。您肯定可以使用一些指标来以统计的方式定义什么是更好的或更差的聚类,例如:
- 轮廓系数-测量每个聚类相对于其他聚类的平均中心的平均中心
- Davies-Bouldwin——测量每个数据点到聚类中心的平均距离与聚类之间的距离
但是使用这些指标可能无法从算法中捕捉到您真正想要的东西。例如,如果在营销环境中部署算法来细分客户,那么您真正想要的是根据特定营销策略对他们的影响程度将他们分组,因为这最终是这些集群的用途。但是,您可能会对非常嘈杂的数据进行聚类,而这些数据对营销策略可能只有很小的预测价值。你在那里开发任何有价值的东西,然后继续前进。像上面这样的措施可能会完全误导你开发这种算法来实现这一目的——创建有效的数据聚类,而不是在任何程度上与有效营销策略中的相似性相一致的数据聚类。
另一个有趣的例子是生成模型。我们关心的是模型是否能够产生健康多样的现实输出。但是现实的定义是什么?很难根据它被训练的数据集来衡量算法——如果算法只产生与其训练数据集高度相似的输出,那么它将是一个非常糟糕的生成模型。目前用于此的技术,如 Inception-score(使用神经网络和熵的统计测量来对模型进行评分),是非直观的,并且有缺陷。在某些情况下,如在自然语言合成中,评估改进的最可靠技术仍然是由人类进行的主观评分,例如从 1 到 10 的质量评分。你还会如何评价一个通用聊天机器人能和你聊得多好?
你真正关心的结果是不容易衡量的
在这种情况下,我们可能有一些方法来衡量我们的模型的准确性,并且我们有合理的期望我们的度量应该与模型的真实世界性能相关,在某种意义上,更高的度量可能意味着更好的真实世界性能。但是模型在现实世界中的表现可能不是你实际上可以容易地测量和报告的。可能很难确定您的指标与现实世界的表现有多相关,以及您损失了多少准确性。
我能想到很多可能发生这种情况的场景:
- 您在边缘部署模型,例如在物联网设备中,这些设备不可能上传它们正在咀嚼的所有数据
- 您部署在隐私受限的环境中,如安全摄像头,在那里您无法真正将数据传回总部以测量准确性
- 您最关心的是模型在边缘情况下的性能,例如在危险驾驶条件下运行的自动驾驶车辆,或者经济衰退时股票交易模型的性能。你关心的边缘情况并不经常发生
- 你可能正在为迁移学习建立一个模型,例如,旨在作为预先训练好的网络运行的模型,然后将这些模型粘合到最终用户系统中并应用于他们的问题。您关心模型如何适应新的和不可预见的问题,根据定义,这些问题是您无法度量的
- 您正在开发一个通用算法,该算法在您无法访问的客户端环境中的客户端数据上进行训练和运行。同样,你关心算法在不可预见的情况下工作得如何,包括训练和执行
- 你的算法必须将总部的培训元素与客户的私人数据结合起来,才能产生一个结果
像这样的一些最困难的情况是,你的算法可能需要几年的时间来解决好的或坏的选择。例如,如果一个算法预测你应该买一栋特定的房子或一支特定的股票,因为从长期来看它似乎被低估了。根据这个问题的定义,可能需要数年时间来确定算法的猜测是否会变成现实。
有效地测量精确度在计算上太昂贵了
在某些情况下,通常有非常合理的方法来衡量算法的准确性。但是,要有效地做到这一点,计算量可能非常大,需要对精确度进行部分测量。
我能想到很多可能出现这种情况的情况:
- 在训练神经网络时测量其验证准确性。为了获得精度如何随时间变化的精确、无噪声的测量,通常必须在分配给验证测量的 CPU 能力和分配给训练测量的 CPU 能力之间进行折衷
- 您的数据集如此之大,以至于您不可能对所有数据集进行训练甚至测量准确性,而是必须对数据样本进行训练(例如大数据中常见的样本)
- 算法的生产环境与它的训练方式不同。例如用于一次性学习和图像搜索的连体/三元网络。以可预测的缩放特性分批训练神经网络。但是在生产中,神经网络使用 K-最近邻来产生与非常大的数据库中的其他向量相匹配的向量。这是您关心并想要度量的完整数据库的最终结果,但是大量进行这些查找可能会非常昂贵
- 你的算法噪音很大,计算量也很大。如果在一个已经很贵的模型上不增加 5 倍的计算时间,5 重交叉验证将是你减少测量中噪声的常用技术。
在这些情况下,我们必须非常小心地从较大的生产数据集中抽取数据,以便测量我们的算法。我们必须选择一个合适的样本大小,该样本大小在计算上是易处理的,但也是整体的代表,我们必须以一种考虑到较大数据集中各种可能的类别不平衡的方式进行随机选择。
你的算法可能与人类协同工作
在测量精确度方面,可能最良性的难题是当一个算法要与人类结合使用时。总的来说,我们真正关心的是人机结合系统的有效性——这才是最重要的。衡量机器方面可能很容易——衡量人的方面通常要昂贵得多。
想想下面的情况:
- 人工智能供电的安全摄像头,旨在向安全人员触发警报。这些系统通常倾向于发出假警报,以确保安全人员捕捉到每一个可能的入侵。但是如果你给了太多的假警报呢?警卫可能会习惯他们,并开始忽略他们。在太多的假警报和太少的假警报之间有一个最佳的平衡,这使得整个系统在捕捉入侵者方面的效率最大化。
- 许多人正在研究人工智能医生,帮助人们诊断。许多团队不只是取代医生,而是采取这样的方法,即人工智能应该与真正的医生协同工作,以便诊断病人。现在你关心的是医生-人工智能团队的有效性,而不是仅仅一个医生或仅仅一个人工智能。人工智能的建议只是迷惑医生,还是真正帮助他们诊断情况。
- 许多人工智能团队经常使用他们来自人工智能系统的输出来指导人类的数据标签,这些人类正在建立训练人工智能系统的数据集。例如,当构建一个文档解析系统时,我们有一个人工智能来解析文档,然后人类会检查人工智能做了什么并纠正任何错误。虽然这对人类来说使事情变得更快,但它也导致了自满,因为系统在识别文档方面变得越来越好。人类将无法捕捉错误,批准错误填充的文档进入数据集,然后对其进行训练,导致人工智能在未来犯更多的错误。
如果方法正确,人类在解决方案中的存在通常会比单独进行机器学习带来更好的性能。通常,当开发新的人工智能产品时,让人类参与进来以增加数据集是非常必要的。但是在这种情况下,人类的存在确实使准确性的测量变得复杂。
人类很难衡量。例如,我们如何衡量数据集中有多少噪音和错误?当数据集由人构建时,唯一的选择是将一个人的意见与另一个人的意见进行比较。例如,管理人员可能会检查其下属的标记数据子集,并将其与他们自己对正确分类的意见进行比较。
在极端情况下,这种技术变成了我所说的双重验证,同样的数据被送到两个不同的人那里进行分析和分类。如果两个人意见不一致,它可以被发送给第三个人,第四个人,第五个人,等等,直到就正确答案达成共识。这不仅可以生成高质量的标注数据,还可以为您提供数据集中错误数量的清晰统计数据。但是这个过程是昂贵的——大大增加了已经昂贵的数据标签过程的成本。
您的数据集或问题空间可能会随着时间的推移而变化和发展
生活中有许多事情是一成不变的,或者至少演变得如此缓慢,以至于需要几代人的时间才能改变。从一年到下一年,有时甚至从一个月到下一个月,还有其他事物在特征和形式上迅速变化。数据集和机器学习问题也是如此。
以下是一些我们可能会发现我们正在解决的问题正在我们脚下演变的情况:
- 你是一家新的创业公司,你的数据集是在你成长的同时建立的。您可能从英语语言数据开始,但是由于数据的增长,数据集开始包括许多其他语言
- 你是一个聊天机器人,你不断地添加新的特性和功能,同时对你的核心 NLP 进行研究。数据集在种类和形式上都在扩展,需要更多的功能,因此,在具有 10 个标签的小数据集上工作的算法在具有 100 个标签的大数据集上可能不再获得好的结果。
- 你在 21 世纪初做电子商务,互联网上的消费者行为和我们跟踪消费者行为的复杂性随着时间的推移在迅速发展和变化,2005 年相关的趋势到 2010 年完全不相关。
- 你正在为股票市场的高速交易做一个算法,你在与一组进化中的其他公司的算法竞争,这些算法也在做同样的事情,每个算法的最佳行为由其他算法的行为决定
在这些情况下,有时有必要不断地将 R&D 应用到您的核心算法中,只是为了停留在同一位置,更不用说改进它了。随着你使用机器学习的雄心的增长,你的数据集也随之增长,维护这样一个雄心勃勃的系统的挑战也在增加。测量准确性的主要用途是了解您的系统在现实世界中的工作情况,这受到了“现实世界”不断变化的定义的挑战。在事情发生变化和准确度下降之前,你的准确度测量可能只有几个月是好的。
有多个维度需要你的算法去归纳
这个概念是我最近在考虑对来自复杂数据库的数据进行机器学习时产生的,这些复杂数据库中有多个与预测相关的表,数据集相当小,因此泛化很重要。在思考了这个问题之后,我开始意识到它实际上已经在我过去的一些不同的项目中出现过。
考虑下面的例子。您正在构建一个算法来解析文档中的数据。您正在解析的文档有许多不同的总体格式,在这些总体格式中,文档中可能有不同的数据。在您的训练数据集中,您可能积累了 50 种不同格式的文档,每种格式的文档都有大约 500 个示例。你有理由相信,最多有 100-200 种格式“存在”,其中大多数至少与现有格式相似。
现在,如果您只是对这些数据进行传统的 80/20 分割,您可能会获得非常好的结果,假设您获得了完美的训练准确性和 99%以上的验证准确性。在这种情况下这是非常可能的(已经发生在我身上),特别是如果每种格式呈现的数据非常一致,并且你有很好的数据扩充。您可以根据验证的准确性将您的模型投入生产。但是当你收到一个 51 格式的文件时会发生什么呢?
事实上,您的算法需要沿着两个维度进行归纳,而第二维度并没有被所有样本的基本 80/20 分割所捕获。您的算法首先需要能够从相同格式的新文档示例中学习。那是维度 1。不过,理想情况下,您的算法也可以推广到新格式的文档。那就是次元 2。如果您有文档格式的标签,您也可以按照不同的格式进行 80/20 分割(在本例中为 40/10)。这两种划分都很重要,并且告诉你不同的东西,关于你的模型归纳到新例子的能力。
如果您对格式进行 80/20 分割,您的验证准确性可能与 99%大相径庭,这并不奇怪。如果一种格式中的文档彼此高度相似,但格式彼此非常不同,那么当机器学习算法只接触 40 种现有格式的文档时,无论数据集有多大或有多少文档,它都无法推广到新格式就不足为奇了。
我想得越多,就越意识到这个问题发生的频率有多高。例如,如果您正在为一个电子商务平台构建一个推荐引擎,您的算法需要在一系列维度上进行归纳:
- 跨系统的不同用户,例如,概括为在训练数据中没有确切看到的行为的新用户
- 目录中的不同项目,例如,当它们被添加到系统中时,需要归纳为新的项目和描述
- 涵盖全新类别的商品,使用现有商品目录中未使用的词汇和短语
- 沿着时间维度——例如,它需要随着用户行为和产品趋势的变化和发展而概括。它还需要具有前瞻性,例如,在给定用户先前行为的情况下,它可以预测用户的未来行为。你上个月推荐的不一定是这个月最好的推荐。
如果您正在训练一个来自复杂数据库的数据的算法,包括连接一堆不同的表,这些表实际上代表不同类型的数据,那么非常合理的做法是对这些表中的每一个进行 80/20 分割,每一个产生不同的度量,或者它们的某种组合。例如,设想一个房地产估价系统,该系统必须将地理数据(如特定地区的市场状况)与特定房产的数据以及该地区最近相关销售交易的数据相结合。您需要该算法对所有三个不同的数据源进行归纳,因为所有三个数据源都是在生产环境中混合和匹配进行预测的,并且所有三个数据源都随着业务的增长而不断增长和变化。模型需要能够适应。
这是一个需要处理的不寻常且微妙的场景,它使准确性的测量变得复杂。无论你用哪种方法做 80/20 分割,没有一种方法能完全捕捉到算法的准确性和行为。您的算法可能很好地概括了您测量的维度,例如预测房地产估价时数据集中的不同建筑物,但不擅长概括不同的维度,例如市场条件不同的不同地理区域。在这些情况下,为了充分理解算法的行为,您总是需要多个度量。
结论
在本文中,我们讨论了许多更具挑战性和微妙的问题,这些问题阻碍了有效地测量准确性。这些挑战中有许多是从机器学习的力量中固有地衍生出来的——它可以灵活地应用于不完美的数据和新的环境和情况,并仍然可以获得合理的结果。机器学习是强大的。
如果您一直读到这一点,特别是如果您一直在阅读我们在本系列中以前的文章,那么您可能会像我一样得出结论,测量准确性非常困难。有这么多的方法可以让你做得不正确,有这么多的问题可以阻止你做好它,很容易接受错误是生活中不可改变的事实。然而,作为模型的构建者,测量准确性是我们工作的基础。因此,除了翻身接受失败,我们还能做些什么呢?
在本系列文章的第 4 部分,也是本系列文章的最后一部分,我将尝试介绍一个更好地测量准确性的框架。这个框架将试图给你一个更好的方法来思考如何为你的模型选择和设计度量标准。我们的提议很简单。我们不是从您的模型和它的作用开始,而是走向可以衡量它的指标,然后分析该指标,而是向您展示如何反向进行。从你到底希望你的度量标准告诉你什么关于你的模型,以及你想如何分析它的问题开始,然后向后移动到什么样的度量标准可能支持告诉你这些信息。指标是为一个目的服务的,因此不同的指标必须为不同的目的而设计——没有放之四海而皆准的解决方案。
原载于www . electric brain . io。
为什么测量精度很难(也很重要!)第四部分。
原文:https://towardsdatascience.com/why-measuring-accuracy-is-hard-and-important-part-4-how-to-measure-accuracy-better-e072a26f4827?source=collection_archive---------27-----------------------
如何更好地测量准确度
这是关于测量精度的 4 篇系列文章中的最后一篇。
在第一篇文章中,我讨论了精确测量的重要性。如果你还没有,去看看这里:https://www . electric brain . io/blog/why-measuring-accuracy-is-hard-and-very-important-part-1
在本系列的第二篇文章中,我讨论了最常见的场景,这些场景阻碍了模型准确性的度量。如果你还没有看过这篇文章,可以看看这里:https://www . electric brain . io/blog/why-measuring-accuracy-is-hard-and-important-part-2
在本系列的第三篇文章中,我讨论了在度量模型准确性时出现的更困难和不寻常的场景。如果你还没有读过这篇文章,可以在这里读一读:https://www . electric brain . io/blog/why-measuring-accuracy-is-hard-and-important-part-3
现在,在本系列的第四部分也是最后一部分,我将讨论真正的内容——我们都渴望的信息。我们如何做得更好?在测量精度时会出现所有这些问题,我们如何避免陷阱并更好地测量精度?不幸的答案是——视情况而定。这个问题没有简单的答案,也没有放之四海而皆准的解决办法。因此,我不是仅仅给你一些提示和建议(会有一些),而是想给你一个思考如何度量一个模型的框架。选择度量模型的标准是一项智力练习。最佳前进路线可能涉及几个不同的指标,不同的数字用于不同的原因。
一般来说,我们的流程有几个步骤:
- 仔细考虑并讨论您希望该指标做什么。该指标的目的是什么?它是一个沟通的标准吗,是为了让外部的涉众理解一个模型吗?或者它是一个研究指标,帮助指导你的团队研究模型?或者该指标是由模型本身的元素内部使用的?您是否有多种不同的度量目的/原因?
- 集体讨论候选指标列表。不要害怕设计你自己创造的标准或公式
- 对于每个指标,考虑相对于指标目的的利弊。不要只是把这些留在脑子里,真正把这些利弊写在纸上,摆在你面前。
- 选择一个指标,坚持下去,直到它达到目的。
现在,我们将逐一介绍这些步骤。
定义指标的目的
测量模型的第一步是定义测量的目的。很容易就可以一头扎进去,写一堆模型代码,用五重交叉验证把它包起来,然后就到此为止。更难的是后退一步,看看你为什么要测量准确性,并仔细构建一个度量标准来为你的目的服务。
度量可以有许多不同的目的,每一个都有自己的细微差别和问题。我发现这些目的可以分为几大类:
该指标用于与利益相关方沟通:
- 经理和老板可以用这个标准来评估团队的表现
- 产品经理和设计者可以使用该度量来理解算法的行为及其对用户的潜在影响
- 销售人员可以使用该度量向潜在客户兜售该系统的优势和功效
- 客户可以使用该度量,以便了解相对于他们可获得的其他信息,他们应该对模型的结果有多信任
- 监管机构可以使用该指标来了解该模型的潜在社会影响
- 客户可以使用该指标来检查模型是否满足他们的性能要求
- 其他行业专家可能会使用该指标,以便将您的模型与其他模型进行比较
- 各种各样的利益相关者可以使用该指标来确定是否应该使用该模型——它是否满足投入生产的最低性能水平
该指标用于内部研发&和研究:
- 该指标用于比较模型在一段时间内的性能,以及 R&D 团队做出了多少改进
- 该指标用于直接评估模型中的特定变化是否会导致更好或更差的性能
- 该指标用于理解算法的行为,并生成关于什么可以提高性能的线索(而不是用于评估已经想到的特定变化)
- 该指标用于评估随着数据集大小的增加,您的模型预计会随着时间的推移而提高多少
- 该指标用于解决模型的特定/离散问题,例如特定的表现不佳的组件或子系统,或者评估模型在重要数据子集上的表现
该指标由算法本身在内部使用,以规范或改进其自身的行为:
- 优化算法使用该度量来调整核心模型的超参数并最大化其准确性
- 该度量被广泛的模型搜索算法用来从各种不同的模型中自动选择,例如,在 AutoML
- 该度量用于对算法执行早期停止,例如,通过在神经网络过度拟合之前停止神经网络,或者选择提升树算法中的提升轮数
- 该指标用于设置算法结果的可接受置信度阈值
度量模型的每一个不同的目的都需要不同的度量模型的策略。您必须选择和设计适合您情况的指标。
例如,让我们大致考虑一下为外部利益相关者设计的指标和为内部研发设计的指标之间的一些差异。
外部利益相关方的衡量标准
- 必须简单,易于非技术人员理解
- 需要非常精确,给答案以信心
- 需要捕捉系统的端到端/最终结果行为
- 需要可靠且无噪音,以设定正确的期望值
- 需要反映模型在生产中的当前性能,全面考虑
- 需要从用户的角度反映数据分布,例如
内部 R 的度量& D
- 必须提供改善或倒退的明确指示
- 所需的精度因模型中的噪声水平以及您是要大的改进还是小的增益而异
- 需要捕捉系统的内部行为
- 需要相当快速且易于经常计算
- 需要作为一个长期稳定的基准,将研究团队对模型的影响与其他因素隔离开来
- 需要从研究的角度反映数据分布,例如,将类别余额标准化
正如您所看到的,对于如此不同的受众和目的,度量的需求是非常不同的。
因此,我们的框架的第一步只是从您的指标的目的开始。不要只是在脑子里想——真正把你测量的原因写在纸上,写在文件里。您可能会发现测量模型有多种原因。如果您真的想更好地度量,这可能意味着您必须投资于维护多个不同的度量。这可能是很多额外的工作,但结果是你可以对你的测量有信心,并集中精力于你的研究目标。
在经历这一过程时,请尝试回答以下问题:
- 谁是该指标的受众?他们对技术了解多少?他们有多精通机器学习?
- 观众会对这个指标做什么呢?如果指标是好的,他们的行为会有什么不同?如果是坏的呢?
- 观众会只使用一次这个指标吗?或者他们是否在监控指标随时间的变化?
集体讨论/设计几个候选指标
更好地度量您的模型的下一步是集思广益,列出潜在的候选指标。像任何好的头脑风暴会议一样,最好不要过早下结论。真的试着吐槽一下,就如何衡量一个模型提出不同的想法。如果没有多种可能性可供选择,你就无法真正做出决定。
头脑风暴时,你至少应该写下/考虑所有符合你目的的众所周知的指标。这可能需要您做一些研究,尤其是如果您正在将数据科学应用到一个您不擅长的新领域。
然而,您还应该考虑工程度量服务于特定目的的可能性。通常,这可能涉及以特定于您的问题的方式修改一个众所周知的指标。在其他方面,它可能涉及到真正地走出去到一个新的领域,创造新的方程式和原始的分析方法。构建指标的一些方法包括:
评估众所周知的指标,但仅针对数据集的特定子集。
- 例如,如果你是一家自动驾驶汽车公司,你可能更关心你的车辆在边缘情况下的性能。因此,尽管您的大数据集可能主要包含阳光充足的正常驾驶条件下的数据,但您可能会决定在各种恶劣的天气条件下(如下雨或下雪)测量您的模型,并在测量中完全忽略阳光充足的数据
专门为测量目的创建小数据集。
- 例如,在进行聚类时,您可能会遍历 100 或 200 个条目,然后自己手动将它们分成多个聚类。然后,您可以测量由算法聚类的项目被人类放入相同聚类的频率。
- 另一个例子是,如果您的算法在系统中间运行,但其输出要经过进一步的后处理才能产生最终结果。然后,您可能希望将最终结果的一个小数据集放在一起并进行验证,以确保您的后处理是正确的
对测量您的指标的数据应用某些类型的增强:
- 比如做图像处理的时候,训练增强就是标配。但是在某些情况下,您可能也希望测量增强验证图像的准确性。例如,在处理药丸等完美圆形物体的图像时,您可能希望测量所有 360 度旋转角度的精度,以确保网络不会过度适应任何特定方向。
根据数据中的类别分解指标结果:
- 例如,在处理多种形式的文档时,您可能希望测量不同格式的文档的不同准确性,即使您对所有这些文档共同训练算法也是如此
如果您的模型处于典型指标的高端或低端,使您的指标“更难”或“更容易”:
- 当在非常标准化的文档上执行某些类型的数据提取时,通过在一个单词一个单词的基础上进行测量,可能相对容易达到非常高的准确度。相反,您可以将您的度量转换为基于整个文档——只有当文档中的每个单词都被正确分析时才是正确的。
考虑修改指标,以便某些被认为是失败的事情被积极地计算在内,反之亦然:
- 例如,当做一个有大量标签的硬分类模型时,你可以考虑一个 Top-5 风格的度量。也就是说,如果正确的标签出现在前 5 个预测标签中的任何位置,则它被认为是正确的结果。
- 在许多情况下,当进行数据提取时,我们会遇到这样的问题:文档中的绝大多数单词都被预测为“空”或“不提取”。这可能会导致我们使用精度/召回/F1 分数等指标,但我们觉得这些指标很难向指标的受众(客户,非技术人员)解释。相反,我们选择了一个更简单的度量标准,测量原始精度,但有一个变化:排除任何在数据集中被预测为“null”和实际上“null”的条目。也就是说,我们测量了真阳性对假阳性和假阴性的准确性,但是我们从度量中排除了真阴性。这为该指标提供了非常需要的可解释性,但没有人为地将其夸大到接近 99%,因为有大量的真实否定。
考虑在训练、测试和验证之间分割数据的不同方式:
- 你可以根据情况考虑做或多或少的交叉验证。例如,对于大型深度学习模型,您可能只训练一个模型,而没有交叉验证。在高噪音的问题上,你可以用 10 倍的十字架来解决。
- 您可以考虑沿着不同的维度拆分数据。例如,当试图预测用户购买行为时,你有几种可能的划分。通常,您可以对所有数据进行 70/20/10 的拆分。您也可以拆分 users 表,以查看您的算法如何在用户之间进行推广。你也可以在时间维度上进行拆分(有时称为回溯测试),例如,给定 2 月份及之前的所有数据,你对 3 月份用户行为的预测有多准确。
- 您还可以考虑为进入系统的“实时”数据制定一个指标。例如,如何根据 2018 年和 2019 年之前的数据实时训练模型
以各种方式规范度量:
- 您可以使用一个典型的度量标准,但要对其进行修改,使其不受样本的巨大差异的影响,例如,在 0 和 1 之间进行标准化。
- 你可以试着使度量标准对不同样本中的等级不平衡保持不变
- 考虑到算法的噪声,您可能决定对您的度量及其变化使用统计 P-test,而不是直接查看度量
您可能只考虑您的模型相对于“基准”模型的性能:
- 当进行各种形式的模型压缩时,我们采用深度神经网络并将其压缩,以便在手机和汽车等边缘设备上进行处理,我们可能会有一个全尺寸的模型,该模型已经过验证,可以高精度地工作。我们关心的是我们的缩小模型与全尺寸模型相比的性能。这种方法可以让我们在更大的数据集上测量性能,例如无法用于训练的未标记数据。我们可以使用全尺寸模型作为地面实况的基准来测量缩小模型的精确度
你可以考虑使用某种验证程序来测量准确度。也就是说,如果你有一个有效的方法来验证模型的输出是否至少是好的(虽然不正确),这可能会给你一个额外的方法来测量你的模型的未标记数据
- 例如,在构建收据处理技术时,我们实际上有一个简单的验证例程,可以在我们的模型的输出上运行,以查看它们是否有意义:我们获取所有提取的项目总数,并检查它们是否加起来就是收据底部的最终总数。如果所有的数字都加起来,我们可以知道我们的模型的输出至少是合理的,即使没有任何地面真理。在实践中,我们遇到了某些零售商的问题,他们的收据实际上并没有加起来(咳咳…沃尔玛,苹果),但验证程序在大多数时候对大多数商家都有效。
创建你自己的方程式来描述你想要的行为:
- 例如,在机器学习的更深奥和新颖的用途中,可能没有关于如何衡量你的模型的明确方向。很多生成模型和强化模型都属于这一类。使用一些熵统计和其他度量的科学怪人混搭,你可能会完全失去理智
- 在对深度神经网络进行贝叶斯优化的一种情况下,我遇到了网络很快陷入良好的局部最小值的问题,但之后没有改善。因此,我没有优化最终的验证精度,而是优化了算法训练的精度斜率。我想要一个不断改进的神经网络,而不是快速改进然后变平。令人惊讶的是,它成功了!
考虑到所有这些因素,您应该能够提出至少几种不同的方法来度量您的模型。同样重要的是,不要只抓着一些常用的指标不放,比如 F1 分数,然后用它来跑。如果你没有真正为自己考虑过各种选项,那么你可能最终会用一个让利益相关者困惑并且不能反映真实世界表现的指标来搬起石头砸自己的脚。
评估每个指标的利弊
有了多个可能的指标,您现在需要考虑每个指标相对于指标目的的利弊。
尝试考虑您的指标的每个属性:
- 该指标的“可解释”程度如何?也就是说,对于一个非技术外行人来说,被告知度量标准并预测模型应该表现得有多好容易吗?
- 度量的噪音有多大?你的目的能处理多少噪音?
- 该指标告诉您什么类型的概括?它可能忽略或没有捕捉到什么类型的概括?您的度量标准可能很好,而您的模型在某些方面仍然表现不佳吗?
- 该指标没有捕捉到的成功案例有哪些?您的指标没有捕捉到哪些失败案例?你的衡量标准如何衡量不同类型的成功和失败案例?
- 你能想到这个指标的“更难”的版本吗?一个“简单”的版本?
- 这个指标应该获取的概括是否与您的模型在生产中需要的概括相匹配?
- 是否有某些你已经知道的失败案例,但不会在这个指标中强烈反映出来?
- 该指标如何应对数据集中样本大小/属性/组成的变化?您的度量标准是否“有偏见”,因为它可能会过度表示或不足表示比其他数据更大或更复杂的数据的某些子集?
- 有没有什么方法可以让这个指标很高,而模型仍然以您所关心的方式表现不佳?这个指标是直接衡量你关心的结果,还是仅仅间接衡量与你关心的事情相关的结果?
- 在本系列文章的第 2 篇和第 3 篇中讨论的测量准确性的失败案例是否适用于您的情况?这个指标如何解决这个问题?
现在,我们提供一些关于如何从糟糕的指标中挑出好的指标的技巧。这些只是我们自己的想法和想法,基于我们过去测量模型的经验。您应该彻底评估自己的情况,以确保您的指标符合目的:
面向非技术人员的指标需要简单。
- 它们不能从晦涩的数学方程式或统计数据中构建出来。即使是 MSE(均方误差)也不容易解释。相反,我发现 MAE(平均绝对误差),有时归一化为百分比,允许我的客户在他们的头脑中真实地可视化模型的性能。对于非技术人员来说,普通的准确性比模糊的统计数据更好,如 F1 分数或 AUC
- 他们需要讲一个故事。他们需要让人们在脑海中想象与模型交互的人,无论是成功还是出错。这意味着指标需要从最终用户的角度以及他们将如何体验该模型的角度来构建,而不是描述系统的一些内部属性。
- 他们需要人们理解的单位。在每一帧的基础上测量自动驾驶汽车的图像识别精度对于非技术观众来说没有意义。相反,更好地以分钟或小时来构建度量,例如没有错误的分钟或小时数。
- 它们通常应该更加简单——不那么规范化,并且包含类内平衡。你应该做的唯一的标准化工作就是用百分比来表示一个数字。非技术人员不喜欢 0 到 1 之间的数字,但是百分比很容易理解。
用于内部研发的指标&需要稳定一致:
- 如果你的指标会随着时间而变化,而代码没有任何变化,那么它对研发就没有用。例如,如果你的训练数据集随着时间快速增长。至少在继续之前,您需要锁定那些测试、培训和验证集。你可以在需要的时候定期更新它们,但是你应该至少用一两个月的时间来更新彼此可比的数字。时间越长越好。
- 您的度量标准需要对数据集中样本的各种属性保持相对不变。它应该根据样本的大小或复杂程度进行标准化。
- 理想情况下,您的度量对于数据集中任何已知的不平衡类都是不变的
- 您的度量标准需要相对“居中”,例如,它不应该真正接近完美,并且应该随着您的改进以有意义的方式改变。如果你已经接近 99.7%,但你的工作仍然是对那些 0.3%的误差进行改进,那么你可能会更好地重新定义你的指标“更难”,这样那些 0.3%误差的改进会被放大,更明显。不要测量前 5 个分类结果,而是向下移动到前 1 个测量。相反,即使你正在取得进步,一个指标保持在 0 附近也不是很有用。粒度必须适合你所在的研究阶段。
- 该指标通常应该更倾向于“硬”的一面。这个指标的一个非常高的值应该给你最大的和完全的信心,你的模型真的很好。它不应留下任何不确定性或未决问题
- 度量标准应该提供一个“清晰的答案”,也就是说,当你得到度量标准的结果时,它不应该让你不确定你的改变实际上是更好还是更差。如果你用你的模型研究一个特定的子系统或问题,使用一个专门为该子系统或问题建立的指标会给你一个比你的通用端到端指标更清晰的答案。如果您的结果的噪声率大于您的预期改善,您需要增加交叉验证。
- 使用模糊的、结构化的指标更容易被接受。更容易接受的是拥有多个指标,系统特定子集的指标,并使用图形和图表来代替单一指标。
用于衡量两个模型之间相对性能的指标不同于衡量其绝对性能的指标:
- 在衡量相对绩效时,我们有更多的自由来选择不同的指标。我们能想到的大多数指标都有一个“更好”或“更差”的良好定义,我们有与最终用户结果相关的合理预期。
- 当试图衡量绝对绩效时(例如,为了与经理、外部利益相关者沟通,或者仅仅是为了我们自己在产品发布前的评估),我们需要更加挑剔。该指标需要与系统的“端到端”或“最终结果”行为非常一致。与非技术人员的度量标准非常相似,这些度量标准需要从用户的角度来构建。它们需要在最新可能的数据上完成,而不是在几个月前锁定的训练/测试集上完成。他们需要反映该模型的当前预期生产性能,如果它现在被部署到生产中的话。
用于编程目的的度量,如超参数优化或早期停止,对噪声的容忍度更高,但对差的度量构造的容忍度要低得多。
- 根据定义,贝叶斯优化器是概率性且抗噪声的。这些算法可以从 5 倍的运行中获得更多的推理和知识,但是具有 5 倍的噪声结果,那么它们可以用 5 倍的运行减少 5 倍的噪声。如果您的度量标准构造得很差,问题就来了——现在您的贝叶斯优化器可能会使您的模型越来越适应您关心的方向,同时看起来会使它变得更好。当您接近模型的峰值性能时,通常会发生这种情况,此时定义不良的度量会阻止模型达到正确的峰值。
用于所有目的的度量标准都需要捕捉你的算法用来概括的维度:
- 对于旨在根据过去的数据预测未来行为的系统,在广泛概括不同样本时测量算法性能的错误是常见的,而没有考虑这些样本是如何构造的。例如,对整个数据集进行 70/20/10 分割。但通常我们真正关心的是衡量它在时间维度上的表现。例如,基于用户在 9 月份及之前的数据来预测用户在 10 月份的行为。进行标准的 70/20/10 分割会给你的指标带来不公平的优势,因为该算法是根据未来的数据训练的,而衡量的是过去的数据。您的算法在真实的操作环境中实际上没有任何未来的数据可以学习,从而导致某种形式的泄漏。
同样,这些只是我们注意到的关于选择好的度量标准的一些技巧和事情。对于如何衡量一个模型的问题,没有一个答案。稍微调整一下你的测量值,然后得到你想要的结果是非常容易的。如果你的模型表现不尽如人意,你可以调整你的衡量标准。但是这不是一个合理的科学实践——这只是自欺欺人。度量标准使用不当会导致错误的期望和错误的希望。
选择一个指标并坚持下去
当我第一次对数据科学和人工智能的理解变得复杂时,我在一家名为 Sensibill 的初创公司工作。我们的基本问题是从图像收据中提取结构化数据。但是我们都没有任何数据提取的专业知识——我们只是一群聚集在一起构建解决方案的全栈开发人员。在我们进行的过程中,他们操作的算法和数据集都被拼凑在一起。
我对测量精度问题的第一次体验来自于那些日子。在我开发这个系统的两年多时间里,我们不断引入越来越多的指标。当一个指标表明表现出色时,经理们会感到困惑,因为他们对现实世界中的表现的主观评价并不好。对此的回应将是引入一种新的衡量标准。这将每 3-6 个月重复一次。我们将创建用于测试的数据集的特定子集(一堆)。我们将对结果创建不同的验证程序,并根据它们来衡量我们的准确性。我们在不同的环境中会有不同的度量标准(生产对阶段对开发)。我们有滚动平均数和月度数字,最近 100 个数字,以及在测试集上即时计算的数字。我们会有一些指标报告优秀的结果,而其他指标似乎表明该模型几乎完全是狗屎。对我来说,它变成了度量沙拉,我们中没有人真正知道系统对我们的最终用户表现得有多好。我们也不清楚是什么让这个系统变得更好或更坏。
随着经验的增加,回顾这些年,我开始明白问题不在于我们没有试图测量准确性。我们在系统的测量上投入了大量的精力。我们也不是不知道如何度量我们的系统——我们在这方面当然有很多专业知识,而且我们有的一些度量标准我现在会认为是我们应该信任的“正确”的(尽管我会做一些改进)。
它不起作用的原因是我们从根本上混淆了不同指标的不同目的。我们知道我们想要回答的问题。但是,我们没有仔细选择哪些可用的指标可以给我们这些答案。此外,我们的度量标准并不真正适合我们的目的,并且总是有一些与我们所关心的相违背的缺陷。这个问题导致不同团队和部门之间的沟通中断,因为人们的期望与他们在应用程序中看到的不一致。这并不总是负面的——某些用户从应用程序中获得了异常好的结果——然而这只是因为他们上传了简短、简单的收据。这是一个有偏见的样本。期望和现实之间的这种不匹配导致花费更多的精力去开发更多的度量标准。
如果你已经仔细设计了你的度量标准,并且考虑了与之相关的所有问题;如果你确信它会真正回答你想回答的问题,那么就坚持下去。相信它。使用它来改进你的模型。适当地与人交流。当您添加新的指标时,请仔细考虑,不要让自己被指标沙拉淹没。为你的需求设计一些具体的、深思熟虑的度量标准。尝试升级、改进或替换现有指标,而不是创建额外的指标。创建临时的度量来解决特定的问题,然后在问题解决后丢弃它们,或者至少,将它们限制在自动化测试中。把你的眼睛放在奖品上。
结论
在本文中,我们已经讨论了一个更好地度量模型的过程,通过一个深思熟虑的练习来了解您的度量需求。这个练习不应该超过几个小时,但是耗尽大脑能量并彻底完成这个过程可能会让你得到更好的模型。
该过程从考虑测量的原因开始。事实上,你会发现你有多个不同的目标。至少,每个人都会经历度量的外部沟通目的和度量的内部 R&D 目的之间的二分法。
然后,我们继续头脑风暴一堆候选指标。我们的目标不应该仅仅是假定一些常用的测量方法对我们来说是正确的。我们真的应该尝试考虑不同的测量方法,以及我们可以做出的潜在修改,以更好地服务于指标的目的。然后,只有在集思广益多个候选人的选择,我们评估每个人的利弊,为我们的目的。
最后,在经历了这个过程并实际选择了一个(或多个)服务于您的目的的指标之后,您应该坚持使用它们。随着时间的推移,拥有一套可以作为可靠基准的指标对每个人都有好处——利益相关者、管理者和研究人员都受益。
感谢您通读这一系列关于测量精度的文章。
原载于www . electric brain . io。
为什么测量精度很难(而且非常重要)!
原文:https://towardsdatascience.com/why-measuring-accuracy-is-hard-and-very-important-part-1-why-measuring-right-is-important-a279e8a6fcd?source=collection_archive---------18-----------------------
第一部分。为什么正确衡量很重要。
我们正在开始一系列关于测量准确性的新博客文章。有很多内容要涵盖——当我第一次开始写这篇文章时,它很快变成了 12 个小时的键盘敲击和 20 页的想法和笔记。因此,我们将把它分成 4 篇独立的文章:
- 测量准确度问题的概述,为什么它很重要,为什么它很难
- 测量精度中出现的大多数主要问题的详细描述
- 详细描述了我们在测量准确度时遇到的一些更不寻常和有趣的情况
- 我们能做什么——如何更好地测量准确性
测量精度的问题
为什么衡量机器学习模型的准确性很难?如此多的机器学习模型似乎有一个非常简单的精确度定义。
让我们看一个简单的例子——检测糖尿病的算法。该算法报告个人实际上患有糖尿病。该预测要么是正确的(该个体实际上患有糖尿病),要么是错误的(该个体没有糖尿病)。看起来准确性是由一个非常简单的问题定义的:有多少预测实际上是正确的。看起来衡量一个模型的准确性应该是简单明了的。
稍微仔细研究一下这个问题,以及该算法在生产中是如何使用的,将会给我们一个更加细致入微的答案。典型的疾病预测算法没有给出疾病的对与错的预测,没有其他信息。即使是最基本的实现也至少会提供一个介于 0%和 100%之间的置信度得分。该算法可以预测 73%的糖尿病置信度,以及 27%的非糖尿病置信度。然后,医生可以利用这种信心,结合自己的知识和分析,做出决定。但是什么是准确性呢?当算法报告 73%的置信度时,它的准确率是 73%吗?
在这种情况下,准确性意味着什么?准确性是指置信度超过 50%的正确答案的数量吗?50%是合适的门槛吗?我们如何计算空答案?如果“是”和“否”都没有达到要求的可信度,那该怎么办?那是怎么算的?一个稍微细致和有经验的数据科学家将得到受试者操作特征曲线,或 ROC 曲线。ROC 不再是一个单一的数字,而是一条曲线,代表在不同点设置阈值时出现的假阳性和真阳性之间的权衡。它表明,在一个特定的置信水平下,将会有多少错误对真理。这是一个聊天机器人的 ROC 曲线的例子。这个很不错:
这是另一个来自 Scikit-learn 网站的例子,对于医学分类器来说可能更真实:
所以现在我们不仅仅有一个精确的数字。我们有..我们对不同精度的选择。现在我应该提到,ROC 曲线有一个相关的单一数字指标,AUC 或曲线下面积,字面意思是 ROC 曲线下的面积。AUC 是一个稳健且非常有用的指标。但是 AUC 不是一个容易向利益相关者解释的指标,也没有任何容易的解释让我们理解。也许我们会求助于精确和回忆?我们在 ROC 曲线上找到一些可接受的点,将阈值设置为该点,并使用这两个新数字来描述其输出。但是,当你的输出中有多个类时,这很快就变得复杂了——我们现在有一系列的精度和召回——试图解释一个模型如何表现和执行很快就变得令人困惑。
精确度的测量甚至会受到原始数学的影响,这会使改进看起来更糟。这个例子是我在阅读谷歌人工智能博客文章糖尿病检测算法时想到的:http://AI . Google blog . com/2018/12/improving-efficiency-of-diabetic . html
他们提到,他们已经将他们的算法从二元分类(糖尿病/非糖尿病)转换为 5 分严重性等级。正在分析的数据是相同的,只是输出发生了变化。但是现在想想这个:在二进制分类中,系统可以完全随机地猜测,并且有 50–50 的机会得到正确的答案。在 5 分制的评分系统中,当系统随机猜测时,只有 20%的机会得到正确答案。
现在想象一下,为了给你的模型提供更丰富的学习信息,你从 2 分制转换到 5 分制。然而,如果你测量原始精度,你可能会注意到你的开关降低了精度。在 5 分分级系统中,该系统独自偶然得到正确答案的机会低得多。这篇文章的作者通过使用 Kappa 评分而不是普通的准确性(根据随机正确答案的机会进行调整)来解决这个问题。但是这个基本问题是我这篇文章主题的核心。
衡量你的准确性并不像看起来那么简单。我们如何衡量准确性将改变我们对模型所做的改进,我们对模型的信任程度,以及最重要的是,商业人士、工程师、政府、医疗保健或社会服务组织等利益相关者如何采用、整合和使用这些算法。
为什么正确测量准确度很重要
为什么要测量准确度?这似乎是一个容易回答的问题。没有测量的准确性,就没有办法知道你的模型是否有效。与常规代码不同,常规代码可以在事先假设其完美运行的情况下进行测试,100%的时间都符合设计,机器学习代码预计会在一定数量的样本上失败。因此,测量失败的准确数量是测试机器学习系统的关键。
但我想花点时间谈谈我们衡量准确性的一些原因,以及为什么正确地做这件事变得如此重要。
改进您的模型
衡量模型准确性的第一个也是最容易理解的原因是为了提高其准确性。当您试图提高准确性时,几乎任何准确性度量标准都可以使用。只要这个指标有一个清晰的定义,那么这个指标的确切值并不重要。您关心的是指标是在改善还是在恶化。那么什么会出错呢?
好吧,如果你不正确地测量你的模型的准确性,你实际上可能以伤害你的真实世界性能的方式修改你的模型,而他们看起来正在改进你的度量。举个例子,泛化和过度拟合的问题。
如果你不正确地测量你的准确性,你可以做一些看似改进你的度量的改变,但是相反,他们只是让你的模型过度适应你的度量所测量的数据。
解决这个问题的标准方法是将您的数据 80/20 分成训练/测试。但这也充满了困难,因为我们有时使用准确性的测量来做一些事情,如提前停止或设置信心阈值,这样测试数据本身就成为你训练过程的一部分。你可能高估了自己的信心阈值。所以你决定把数据分成三份,70/20/10,最后用一个额外的验证集来测量你的准确性。但是现在,如果数据集相对较小,或者不能完美地代表它必须操作的真实世界的数据,该怎么办呢?
你现在不得不担心另一种类型的过度拟合,我称之为架构过度拟合,在这种情况下,你的模型的设计和参数对于数据集来说变得过于完美,当它们被添加到数据集时,不能推广到新的样本或很好地学习它们。例如,如果您准备了大量基于数据集的自定义要素,却发现当数据集随着时间的推移而增长、发生重大修改或与其他数据集合并时,这些要素不再适用,就会出现这种情况。你得到了极好的训练、测试和验证准确性。但是你仍然过拟合数据集。
如果你的数据集有噪音怎么办?数据有一致错误怎么办?你可能认为你的模型很神奇——事实也确实如此,它已经完美地学习了数据集中错误的一致模式。你兴高采烈地把模型放到下一个产品中,结果在产品发布时,你的屁股被人给踢了。看来你的模型在现实世界中并不奏效。你可能会想,“它在测试中非常准确”。“哪里出了问题?”
你的精度测量本身有噪音怎么办?假设您在多次运行中有 1–3%的准确度差异。现在,这使得进行渐进式改进变得更加困难。每个改进都需要大于 2–3 %,以便您能够通过一次运行可靠地确认它。要么你花费更多的 CPU 能力来使用平均值得到清晰的答案,要么你冒险在原地打转,只寻找大胜利,放弃增量改进。
更好地测量您的准确性意味着当您对您的模型进行更改时,您可以确信这些更改是否会以您所关心的方式带来更好的模型。当您错误地度量了您的准确性时,您可能最终会撕毁更改或回到绘图板,因为您“认为”99.9%准确的模型实际上与生产中的模型相差甚远。更精确的测量意味着更快的研究、更好的产品和更多的荣誉。它甚至可以拯救生命。
与使用我们模型的利益相关者沟通
我们衡量模型准确性的另一个原因是,我们可以与利益相关者交流,他们可以使用我们的模型。模型绝不仅仅是数学和代码的碎片——它们必须在真实世界中运行,对真实的人的生活产生真实的影响。
如果医生要使用算法来做出医疗决策,那么让他们知道算法可能是错误的,以及这种情况发生的频率是很重要的。如果一家公司打算用电脑取代一组数据录入人员,了解电脑出错的频率很重要,因为这会影响公司的流程。如果我们声称一个模型只会犯 3%的错误,但它实际上犯了 5%的错误,我们可能会认为这是一个很小的差异。但这可能意味着所有受算法错误影响的人打给支持部门的电话增加了 60%。成本的大幅增加可能会完全抵消实现该算法的任何好处。
利益相关者需要理解算法的准确性及其典型的失败案例,因为准确性具有现实世界的含义。准确性可能会影响预算和资产负债表、真实人群的生活和健康,甚至我们民主的结果(当谈到记者现在使用的事实核查算法时)。它可以创造或破坏新的人工智能产品,并在创造技术的工程师和使用技术的消费者之间造成真正的脱节。在测量准确性方面犯错误很可能意味着生命的丧失和新产品的失败。
为什么测量精确度很难
那么,是什么让测量精度变得如此困难呢?为什么一个看似容易回答的问题变得如此困难?
在本系列的第 2 部分中,我们将回顾在测量精度中出现的一些常见问题:
- 您用来训练算法的数据与预期在生产中使用的数据不同
- 比起其他类型的失败,你更关心某些类型的失败
- 您的模型、数据集或测量值可能存在固有的噪声或随机性
- 您的管道可能有多个不同的测量精度的点
- 您的模型可能有几个不同粒度级别的不同指标
- 您可能只有系统中某个中间步骤的基本数据,但没有最终结果
- 您的数据集可能被分成不同的类别,它们之间的性能有很大的不同
在本系列的第 3 部分中,我们将解决在测量精度时面临的一些更困难也更有趣的问题:
- 您的模型可能没有任何实际数据
- 可能没有现成的度量标准来衡量您的模型的准确性
- 可能没有明确的方法来定义模型的准确性
- 你真正关心的结果是不容易衡量的
- 有效地测量精确度在计算上太昂贵了
- 你的算法可能与人类协同工作
- 您的数据集可能会不断变化和发展,例如,如果它正在由数据标注团队积极扩展
- 你的问题空间可能会随着时间不断演变
鉴于所有这些衡量准确性的潜在问题,我开始欣赏一个基本的智慧: 无论你如何衡量它或你使用什么度量,我们通常可以就完全正确和完全错误的样子达成一致。重要的是这两者之间的一切。
期待即将推出的本系列的第 2 部分!
原载于www . electric brain . io。
为什么用基尼指数衡量城市不平等是个坏主意
原文:https://towardsdatascience.com/why-measuring-urban-inequality-with-the-gini-index-is-a-bad-idea-3d67b555dded?source=collection_archive---------17-----------------------
基尼系数
基尼系数
在制定城市政策时,我们经常需要评估城市人口的收入不平等情况,以便为针对某些收入群体的企业提供减税,或者确定低收入家庭,以低息贷款的形式提供住房补贴。然而,城市规划者感兴趣的不仅仅是财富和收入的不平等或异质性。例如,城市交通流量通常集中在几个区域,在整个城市交通流量中占据不成比例的大部分,了解这种异质性有多严重,并监测其长期趋势,将是制定有意义的交通政策、服务分配和停车等基础设施以及总体规划的第一步。
也就是说,衡量不平等最常用的方法是经济学家已经使用了一百多年的基尼系数(T2)。
对于一个城市中利益值 X 的任意分布,基尼系数可以定义为:
用 xi 位置 i = [ 1,2,…,n ]的 X 值和分母中 X 的平均值。
如前所述,最初用于衡量财富和收入不平等的基尼系数也可以用来量化其他变量的异质性。在表征城市中不同位置的值的异质性的情况下,从上面的等式可以看出,如果感兴趣的变量在城市位置上均匀分布,则基尼系数将呈现零值。相反,当所有感兴趣的变量都集中在一个位置时,基尼系数达到最大值,导致基尼系数GI = 11/n,对于大的 n 非常接近 1。
计算基尼系数
我们举个例子把事情说清楚。假设我们想了解不平等的停车需求在伦敦是如何分布的,并使用基尼系数作为这种不平等的衡量标准。下图显示了分辨率为 500 x 500 米网格的可用数据。
正如人们所料,我们看到了高停车需求的热点。事实上,如果我们观察一周内在给定位置结束的出行数量的分布(基本上是每周的总停车需求),
我们看到一个不对称的帕累托分布,少数位置显示非常高的需求,而大多数位置非常低的需求。如果我们用上面的表达式计算基尼系数,我们得到的值大约为 0.6。尽管跟踪这一指标的时间演变更有意义,但如果从经济角度考虑,这一数值表明存在中高不平等。
那么这有什么问题呢?
在基尼系数的定义中,我们提到了一个关键词:地点。城市规划首先是关于空间。无论是设计、管理、物流,还是规划,从业者都在与空间合作。但是仔细看看广泛使用的基尼系数的定义:空间——在这种情况下是地理——不在其中。基尼系数与感兴趣的值的位置的空间排列完全无关。以下四种安排——真实停车需求及其空间重组配置都具有完全相同的基尼系数:
换句话说,基尼系数没有捕捉到我们感兴趣的变量的任何空间信息。
我们做什么呢
在空间统计领域,已经提出了许多指示所研究变量的空间分量的度量。在研究城市环境时,我们将讨论其中两个我认为与基尼系数结合起来特别有用的因素。
空间基尼系数
为了获得携带有意义的空间信息的基尼系数,我们进一步使用空间基尼指数。本质上,它是对经典基尼系数的分解,目的是考虑不平等和空间自相关的共同影响。更具体地说,它利用了这样一个事实,即所有成对差异的和可以分解成地理上的邻居和非邻居的和:
其中 w 是二元空间邻接矩阵的元素。
空间基尼指数可以解释如下:随着正的空间自相关增加,上述等式中的第二项相对于第一项增加,因为地理上相邻的值将趋向于呈现相似的值。相反,负的空间自相关将导致相反的分解,因为非邻居之间的差异将小于地理邻居之间的差异。在任一情况下,这提供了量化这两个术语的相对贡献的可能性。从这种方法获得的结果可以通过使用随机空间排列来进一步测试统计显著性,以在零假设下获得采样分布,该零假设是感兴趣的变量在空间中随机分布。
本质上,我们感兴趣的是发现基尼系数有多少是由于非邻居的异质性。为此,我们使用上述基尼分解中的非相邻项作为统计数据来测试空间自相关性:
这个表达式可以解释为与非相邻网格单元对相关的整体异质性的一部分。通过将从观测数据获得的 GI2 与从随机空间排列获得的 GI2 值的分布进行比较来计算伪 p 值,从而对该统计进行推断。应当指出,这种基于随机空间排列的推断是基于上述表达式给出的基尼系数的空间分解,而不是基尼系数本身的值。
按照所述方法,我们继续计算基尼系数的空间分解,将邻接矩阵中的邻域半径从 0(原始基尼系数)变化到 6 千米:
随机空间排列方法产生了统计上显著的空间分解(p = 0.01)。从图中我们可以看到,随着邻域半径的增加,由于非邻域停车需求值导致的不平等减少,因为不断增长的邻域捕获了越来越多的不平等。然而,有趣的是,观察值分布和随机化分布具有相似的空间基尼曲线(图中的 A 和 D ),而停车值具有高斯分布的两次重排( B 和 C )显示完全相同的曲线,其下降速度比 A 和 D 慢。这是完全预期的,因为在高斯衰减中,下降是“平滑的”,因此增加半径不会使邻域捕获同样多的多样性,因此与非相邻分量相关联的不平等保持相对较高。
扩散指数
尽管基尼系数及其空间变量具有信息相关性,但它们利用的是 X 的平均值,在厚尾分布下,许多社会经济变量可能是不确定的。在这种情况下,基尼系数无法用非参数方法可靠地估计,并将导致厚尾下出现向下偏差。
用基尼系数法测量停车需求异质性的另一个不利之处是,它无法研究“热点”的空间布局——需求非常大的位置。热点被定义为停车需求高于某个阈值 x* 的网格单元。阈值的直观首选是全市平均需求。然而,这通常是一个太低的阈值,已经提出了一个更好的方法。一旦选择了阈值,并且热点被识别为停车需求值大于所选阈值 x* 的像元,我们就可以使用最近提出的扩散指数来测量热点之间的平均距离与作为城市规模度量的平均城市距离之间的比率:
其中 N(x)* 是停车需求大于 x* 的网格单元的成对距离数, N 是覆盖城市的所有网格单元之间的成对距离数, d(i,j) 是单元 i 和单元 j 之间的距离,在命名器中接下来是用于识别停车需求较大的单元的指示函数扩散指数本质上是用 x > x* 的单元间的平均距离除以所有城市单元间的平均距离。如果停车需求大的小区遍布全市,这个比例会很大。相反,如果高需求单元集中在彼此靠近的地方,如在单中心城市,这个比率将会很小。
代替选择一个特定的阈值,我们将它设置为一个参数,并观察对于四种类型的空间排列,扩展指数如何表现为阈值 x* 的函数。
从图中可以看出,完全随机重排( D )显示最高的扩散指数剖面,其次是观测数据( A )。接下来是双峰高斯重排( C ),随着阈值的增加,单中心高斯重排轮廓迅速下降。
这四种类型的扩散指数分布图对城市社会经济总量的空间布局中广泛的单中心与多中心结构进行了或多或少的完整分类。单中心空间配置将导致轮廓的快速下降和总体低的扩散指数,而多中心配置将具有总体高的扩散指数。
在处理伦敦停车需求空间分布的用例中,我们看到热点遍布整个城市,形成了多中心的空间结构。
结论
在即将到来的来自城市各种来源的丰富数据流时代,设计和应用简单的指标来捕捉并向城市规划者和决策者提供有意义的信息变得越来越重要。在本文中,我们讨论了基尼系数作为值分布异质性的度量,用一个简单的技巧展示了它的缺点,并提出了用其他能够捕捉空间信息的度量来补充它的方法。
更多信息请点击查看。有这篇文章代码的 jupyter 笔记本可以在这里找到。
为什么模型可解释性是下一个数据科学超级大国
原文:https://towardsdatascience.com/why-model-explainability-is-the-next-data-science-superpower-b11b6102a5e0?source=collection_archive---------3-----------------------
Model explainability techniques show you what your model is learning, and seeing inside your model is even more useful than most people expect.
在过去的 10 年里,我采访了许多数据科学家,模型可解释性技术是我最喜欢的话题,可以用来区分最好的数据科学家和普通的数据科学家。
一些人认为机器学习模型是黑盒,对预测有用,但在其他方面难以理解;但是最好的数据科学家知道从任何模型中提取真实世界洞察力的技术。对于任何给定的模型,这些数据科学家可以很容易地回答如下问题
- 模型认为数据中的哪些特征最重要?
- 对于模型中的任何单个预测,数据中的每个特征是如何影响该特定预测的
- 要素之间的哪些交互对模型的预测影响最大
回答这些问题比许多人意识到的更有用。这启发我创建了 Kaggle 的模型可解释性微课。无论你是从 Kaggle 还是从像统计学习的元素这样的综合资源中学习技术,这些技术都将完全改变你构建、验证和部署机器学习模型的方式。
这些见解为什么有价值?
模型洞察的五个最重要的应用是
- 排除故障
- 通知特征工程
- 指导未来的数据收集
- 为人类决策提供信息
- 建立信任
排除故障
世界上有许多不可靠的、无组织的、通常是肮脏的数据。在编写预处理代码时,您添加了一个潜在的错误源。再加上目标泄露的可能性,在真正的数据科学项目中,在某些时候出现错误是正常的,而不是例外。
鉴于错误的频率和潜在的灾难性后果,调试是数据科学中最有价值的技能之一。理解模型正在寻找的模式将帮助您识别这些模式何时与您对现实世界的了解不一致,这通常是追踪 bug 的第一步。
通知特征工程
特征工程通常是提高模型精度的最有效方法。特征工程通常涉及使用原始数据或先前创建的特征的变换来重复创建新特征。
有时你可以通过对潜在主题的直觉来完成这个过程。但是当你有 100 多个原始特征或者你缺乏关于你正在做的主题的背景知识时,你将需要更多的指导。
一场预测贷款违约的竞赛给出了一个极端的例子。这场比赛有 100 多个原始特征。出于隐私原因,这些功能的名称像 f1、f2、f3,而不是常见的英文名称。这模拟了一个场景,你对原始数据没有什么直觉。
一个竞争对手发现,f527 和 f528 这两个特性之间的差异创造了一个非常强大的新特性。包含这种差异的模型比没有这种差异的模型要好得多。但是,当您从数百个变量开始时,您可能会想到如何创建这个变量呢?
你将在本课程中学习的技术将使 f527 和 f528 的重要特性变得清晰明了,并且它们的角色紧密相连。这将引导你考虑这两个变量的转换,并可能找到 f527-f528 的“黄金特性”。
随着越来越多的数据集从数百或数千个原始要素开始,这种方法变得越来越重要。
指导未来的数据收集
你无法控制你在线下载的数据集。但是许多使用数据科学的企业和组织有机会扩展他们收集的数据类型。收集新类型的数据可能会很昂贵或不方便,所以他们只希望在知道值得的情况下这样做。基于模型的洞察让您很好地理解您当前拥有的特性的价值,这将帮助您思考哪些新的价值可能最有帮助。
为人类决策提供信息
有些决策是由模型自动做出的。亚马逊不会让人类(或精灵)匆忙决定你什么时候去他们的网站给你看什么。但是许多重要的决定是由人类做出的。对于这些决策,洞察力可能比预测更有价值。
建立信任
在没有验证一些基本事实的情况下,许多人不会认为他们可以信任你的模型来做出重要的决定。考虑到数据错误的频率,这是一个聪明的预防措施。在实践中,展示符合他们对问题的总体理解的见解将有助于建立信任,即使是在对数据科学了解不多的人之间。
本文改编自 模型讲解微课 讲解 Kaggle 学 。
为什么动机是学习数据科学的关键
原文:https://towardsdatascience.com/why-motivation-is-the-key-to-learning-data-science-af6a1c47102b?source=collection_archive---------14-----------------------
设定正确的目标,创建自己的课程,制定学习路线图
Photo by Fab Lentz on Unsplash
在我在正规教育之外学习数据科学的过程中,我发现动机是驾驭这门学科复杂性的关键,并且不会因构成广为人知的数据科学家技能集的大量信息而气馁。在下面的文章中,我将谈论为什么学习数据科学时动机如此重要,解释如何获得并保持动机,并与您分享一份我个人学习数据科学的学习课程和评分系统。
为什么学习数据科学时动机如此重要?如果你在谷歌上搜索“从事数据科学职业需要哪些技能”,你会看到一个广泛的技能列表。
这些将包括以下内容:
- 软件开发
- 计算机科学
- 统计数字
- 数学
- 数据工程
- 领域知识
- 机器学习
- 深度学习
- 沟通
- 还有更多
数据科学被认为是一门独立的学科,但这些领域本身就是一门学科。那么,你如何在合理的时间内学会看似不可逾越的技能呢?怎么知道先学哪些技能?刚开始的时候,面对看起来几乎不可能完成的任务,很容易变得没有动力,放弃学习。
“没有人谈论学习的动机。数据科学是一个广泛而模糊的领域,这使得它很难学习。真的很难。如果没有动力,你会半途而废,认为自己做不到,这不是你的错,而是教学的问题,” Vik Paruchuri
那么,为什么数据科学学科似乎需要这么多技能呢?包含“数据”和“科学”两个词的快速求职会让你有所领悟。下面是我在 7 月份最近的一次求职中找到的一些工作的快照。这些工作都属于数据科学范畴,但每一项都需要不同的技能。
如何获得动力
在你旅程的开始,有一个计划真的很重要。要制定计划,你首先需要一个目标。面对数据科学中快速变化的技术,以及定期变化的工作角色和要求,我认为最好不要将目标与特定的职位联系起来。等你到了那里,那份工作可能已经不存在了。
相反,你的目标应该是一个目的,换句话说,想想你想做什么。例如,当我学习数据科学时,我的目标是“用数据产生积极影响”。为了在尽可能短的时间内产生最大的影响,我的学习集中在数据科学的应用方面。
你的目标应该是一个目的,换句话说,想想你想做什么
在我的清单上,最重要的技能是软件开发、数据工程、使用现有的数据科学库以及了解足够的数学和统计学知识,以理解正在发生的事情以及如何解释结果。如果我更专注于创建新的数据建模方法,那么我的技能可能会更专注于研究数据科学的角色,因此我需要更深入知识的领域会有很大不同。
关注哪里
好了,你有了自己的目标,也知道应该把大部分时间集中在哪一组技能上。为了最有效地实现你的目标,你需要确保你只学习与你的目标直接相关的技能。此外,你很可能会有一个过渡到数据科学的背景。例如,你可能以前从事过软件工程或者有高等数学学位。在这种情况下,有些领域你已经有了广泛的知识。
我建议你不要依赖在线课程或教育机构给你提供课程,而是创建自己的课程。有许多学习数据科学的极好资源,其中许多完全免费(我之前写过一篇关于我的前 5 名)的文章)。你可以根据适合你的目标、背景和学习风格的材料来组织你自己的课程。
创建自己的课程
我不会拒绝在线课程,但我的建议是,与其完成一两个流行的 MOOC(大规模开放在线课程)来获得证书。相反,你从许多不同的课程中挑选相关的部分。如今,越来越多的课程平台,如 Coursera 正转向的订阅模式,这样你就可以按月付费,而不必支付一次性课程费用。除了能够为您的个人学习路径选择最相关的课程部分,您还可以以更具成本效益的方式学习。
如何保持动力
一旦你设定了目标,确定了课程,你需要一些方法来保持动力。我建议做三件事:
- 写下你的目标,并经常参考。为了确保你正在学习的技能能够帮助你尽快实现目标,定期回顾你的长期目标非常重要。每当你开始学习新的东西时,带着你的目标检查并问自己‘这相关吗?’。这将确保你一直在学习与你的长期目标密切相关的技能。
- 创建路线图。在设计你的课程时,把它记录下来是个好主意。我自己的路线图,我将在本文底部分享一个链接,由一个带有评分系统的 google 表单上的一长串技能组成。每月一次,我会对照这个技能和熟练程度列表给自己打分,并与前几个月进行比较。当你在学习一门课程的时候,你经常会从完成一些事情和获得徽章和等级中获得一种满足感。在路线图上给自己打分给了我类似的满足感和庆祝成功的方式。学习的巨大动力!
- 采取实用的第一种学习方法。一旦你觉得有能力,我建议你将正在学习的技能付诸实践。你可以通过多种方式做到这一点,包括参加机器学习竞赛,如 Kaggle ,从公共数据集创建自己的数据项目或为开源项目做出贡献。能够建造有用的东西会给你巨大的满足感,并且比任何打勾的人都更有动力。
我的路线图
这是我在学习数据科学时使用的路线图的链接。当你打开它时,会要求你复制一份,这将在你自己的 Google drive 上创建一个可编辑的版本。如果你喜欢,我也写了一个版本的博客,你可以在这里找到。
感谢阅读!
为什么神经网络让我想要孩子
原文:https://towardsdatascience.com/why-neural-networks-make-me-want-to-have-children-b6b0b7e9a1cd?source=collection_archive---------30-----------------------
…或者是一首花的颂歌
Photo by Su San Lee on Unsplash
人工神经网络是目前计算机科学和人工智能研究中最重要的事情之一,你很有可能已经听说过它们,或者至少知道它们有一些东西:否则你可能不会点击这篇文章。
大肆宣传自然让我好奇:在反复听说他们似乎如何将人工智能研究的边界越推越远后,我知道我必须仔细阅读他们。
这不会是对神经网络的技术介绍(查看这个,或者,为了更详细的了解,或者阅读伟大的统计学习理论介绍)。相反,我将专注于神经网络做什么样的事情,以及这如何改变我在日常生活中的一些看法,以一种奇怪的方式激励我要孩子。
科学家的困境。
让我们面对现实吧:许多科学家都是过度思考者。
为了解决这个问题,我们把过度思考作为我们的职业。为你的弱点买单永远是生活中的好建议。
我们一天中的大部分时间都埋头于抽象思维的领域。我们对主纤维丛上的全息论、弯曲流形上的度量张量(我对这些东西感到兴奋,所以闭嘴)、神经元信号速率、蛋白质折叠的细节、在量子计算机上分解素数的数学复杂性,或者在神经网络中使用激活函数感到兴奋。
A typical scene in a physics lab. If we don’t know what to do, we write down couple of random formulas on a blackboard and finish it up with E equals m c squared. Works everytime. Photo by JESHOOTS.COM on Unsplash
作为专业的过度思考者,我们对一切世俗和普通的事物都有一种微妙的厌恶,这些事物既不密集也不复杂,或者与我们整天思考的极其具体的事情无关。
因此,很自然地,我们中的一些人会发现孩子有点迟钝。
你真的无法与他们就知识结构或改变基因的道德含义进行任何有意义的对话。
相反,孩子们主要关心的话题是他们的新消防车,或者他们的一个朋友如何告诉另一个朋友他很愚蠢。
但看哪,还有补救办法!
学习统计学习理论
神经网络提供了一个非常简单的数学学习模型。
比方说,你试图找出某样东西是哪种颜色。你要分类的物体的颜色由一个 特征向量 来表征。这个 特征向量 可以例如在三维 RGB 空间中表示,但是原则上可以被许多其他事物跨越(你的个人特征向量可以例如包括你的身高和体重)。
RGB 空间中的示例如下所示:
- 黑色= [0,0,0]
- 一种“完美”的蓝色= [0,0,255]
- 一种“完美的”红色= [255,0,0]
神经网络如何学习分类数据?
然后,使用一组示例数据开始学习过程。这些只是很多元组[x,x,x],附加到这些元组上的标签告诉你这些元组属于哪种颜色。上面的三个例子是带有三个标签黑色、蓝色和红色的三元组。
然后你可以将数据集输入你的神经网络。网络将通过以下方式“学习”如何正确分类数据
- 尝试分类: 网络从分类的任意分布开始。然后,它会尝试对这些例子进行随机分类,可能不会成功。
- 寻找错误函数: 这告诉网络它做出的选择离正确的选择有多远。
- 调整其权重: 网络根据查看误差函数获得的洞察力,通过调整其内在结构来从其错误中学习。这改进了将来的分类。
- 涂肥皂,冲洗,重复: 运行训练程序足够长的时间,以便你的网络学会正确地对训练数据进行分类。测试未用于训练的数据的分类质量。
小时候,我们都学过对颜色进行分类,尽管我们可能不记得了。
有趣的是,颜色如何分类并没有统一的标准。虽然我们都认为我们可以做到,但我们无法真正解释我们是如何做到的。
关于正确的颜色分类的困难,有一些公认的见解。文化依赖和语言依赖(很多语言甚至没有蓝绿之分)已经被证明是存在的。甚至还有语境依赖:你可以欺骗人们根据周围圆点的颜色,一次称同一个圆点为绿色,一次称之为蓝色。
这表明大脑中可能没有一个完整的预定结构来对颜色进行分类(尽管看起来这至少是交易的一部分),我们都在某种程度上学习它,基于我们环境的输入。
让你的孩子更有趣
Photo by Robert Collins on Unsplash
我最近想到,当孩子们学习对颜色、动物或车辆等事物进行分类时,你可以想象他们在做这件事,就像一个神经网络,用一组带标签的训练数据。他们是
- 尝试分类: 孩子们不断地说出他们看到的周围物体的名称。
- 使用错别字功能: 当他们用错一个字时,他们的父母会告诉他们。
- 调整权重: 大脑以一种有意义的方式变化,提高自己在未来分类中的成功率。
- 起泡沫,冲洗,重复: 他们重复这样做,直到有一天他们能够与周围的世界正常交流。
我最好的朋友之一有一个两岁的儿子,我最近经常和他在一起。学习了统计学习理论后,我体会到了孩子们是如何在很短的时间内同时学习非常多不同的东西的。
有一次,我们翻阅一本杂志,里面有汽车、卡车和各种其他车辆的图片。当他看到一辆他以前没见过的卡车时,我们告诉他这是一辆卡车(我们后来被他妈妈批评,因为我们非法教他说脏话,但那是另一回事了)。
当一张公交车的图片在他面前时,他也称之为卡车,但我们纠正了他。
我突然意识到我在充当这孩子的错误函数。瞧,又过了两页,他正确地将一辆卡车和一辆公共汽车归类到了一起。
拥抱过度思考。
下次你告诉一个孩子某样东西是绿色的而不是蓝色的,要意识到你面对的是一个试图学习新分类程序的神经网络。
记住,信息会直接流入他的大脑,根据你的反馈调整他大脑的权重。
拥抱过度思考,让身边的孩子更有趣。
一朵花的颂歌
虽然这有点开玩笑,我希望你现在不要认为我是一个可怕的人,但实际上我想表达一个更深层次的观点。
我非常支持这样一种观点,即科学地理解事物会增加它们的惊奇,而不是减少它。
理查德·费曼的一个比喻(他在这个视频中谈到了这个比喻)一直萦绕在我的脑海中:
我能欣赏花的美丽。同时,我对这朵花的了解比他多得多。我可以想象那里的细胞,里面复杂的动作,也有一种美。我的意思是,它不仅仅是这个维度,一厘米的美丽;在更小的维度上也有美,内部结构,还有过程。花朵颜色的进化是为了吸引昆虫来授粉,这个事实很有趣;这意味着昆虫可以看到颜色。这就增加了一个问题:这种美感是否也存在于低级形式中?为什么是审美?各种有趣的问题,科学知识只是增加了一朵花的兴奋、神秘和敬畏。只会增加。我不明白它是怎么减法的。
—理查德·费曼
理解我们如何用数学方法建立一个学习程序只会让我更着迷于看到人类学习的速度和效率,以及他们需要多么少的数据来找到好的分类。
不仅孩子们会这样做,我也开始意识到我自己的大脑是如何对周围的世界进行分类和再分类的,以及我一直在潜意识和有意识地学习多少东西。
神经网络的伟大之处在于,它们的基本设置非常简单,但在我们看来,它们做的事情就像是智能行为(例如,图片分类、语音、文本生成等)。).
理解学习背后的一些形式结构帮助我再次认识到简单的数学结构不仅可以帮助我们思考自然世界,还可以帮助我们思考我们自己的感知和行为(正如我在我关于自由意志的热力学的文章中所述),扩展了我们在思考我们自己和我们在世界中的角色时可以使用的概念框架。
对我来说,这真的增加了这一切的兴奋和神秘……最后,更严肃地说,这真的让我想有孩子来分享这一切。
为什么 NLP 很重要,它将是我们的未来
原文:https://towardsdatascience.com/why-nlp-is-important-and-itll-be-the-future-our-future-59d7b1600dda?source=collection_archive---------4-----------------------
由数据科学家解释
两年前,当我还在 CERN 进行我的 海外实习时,我与 乐天 Viki (你可以把它想象成另一个网飞)进行了一次电话面试,应聘数据科学实习生职位。
所以我打电话给一个人,他问我是否有 NLP 的经验。
嗯…你猜怎么着?
我问他,“你是说神经语言程序?”当我还在谷歌搜索 NLP 术语的时候——我想这是多任务处理的最佳状态。
长话短说,我知道我没有通过电话面试,尽管他在最后说了一句安慰的话,“谢谢你的时间。如果你被列入候选名单,我会尽快与你联系。”
经过一番谷歌搜索,当我知道 NLP 指的是自然语言处理时,那是一个“啊哈”的时刻(在面试电话之后)。
NLP——也被称为计算语言学——是人工智能和语言学的结合,它让我们能够像人类一样与机器对话。
换句话说,自然语言处理是一种处理、分析和理解大量文本数据的方法。
事实上,自然语言处理并不是什么新东西,它可以追溯到 20 世纪 50 年代,当时它是作为机器翻译(MT)开始的。
在数据科学领域工作了一段时间后,我开始意识到 NLP 及其广泛应用在我们日常生活中日益增长的重要性——无论是现在还是将来。
在这篇文章结束时,我希望你能理解自然语言处理的重要性,以及为什么它会成为未来——我们的未来。
我们开始吧!
为什么 NLP 很重要?
(Source)
让我们面对现实吧。每天都有数十亿的文本数据生成。
看看我们周围。
应用内消息(Whatsapp、微信、丨t丨e丨l丨e丨g丨r丨a丨m丨s丨 等。)、社交媒体(脸书、Instagram、Twitter、YouTube 等。)、论坛(Quora、Reddit 等。)、博客、新闻发布平台、谷歌搜索等诸多渠道。
所有这些频道每秒钟都在不断地产生大量的文本数据。
由于大量的文本数据以及高度非结构化的数据源,我们不能再使用普通的方法来理解文本,这就是 NLP 的用武之地。
1.处理大量文本数据
随着大数据技术的发展,NLP 已经成为主流,因为这种方法现在可以通过云/分布式计算以前所未有的速度处理大量的文本数据。
想象一下,给你一个句子,任务是手动识别这个句子是否有积极/消极/中性情绪。
太好了。这太容易了,你在几秒钟内就完成了。
想象一下,现在给你几百万个句子,再次进行情感分析。那要花你多长时间?嗯……你明白了。
今天的机器可以分析比人类更多的基于语言的数据,没有疲劳,并以一致、公正的方式。
考虑到每天生成的非结构化数据数量惊人,从医疗记录到社交媒体, 自动化对于高效地全面分析文本和语音数据至关重要 。句号。
2.结构化高度非结构化的数据源
将文本数据描述为非结构化数据是一种保守的说法。
文本数据一塌糊涂。
— 阿德蒙德·李
想象一下你通常给朋友发信息的方式,“你在哪里啊😫”
仅仅一条短信我们就看到有缩写词(“r”和“u”)、俚语(“ah”)、省略的标点和表情符号。最棒的是,我们在这里只谈论英语。
总之,人类语言极其复杂多样。
不仅有数百种语言和方言,而且每种语言中都有一套独特的语法和句法规则、术语和俚语。
NLP 很重要,因为它有助于解决语言中的歧义,并为许多下游应用程序(如语音识别或文本分析)的数据添加有用的数字结构。
为什么 NLP 将成为未来——我们的未来?
随着每天产生越来越多的文本数据,自然语言处理对于理解数据和在许多其他应用中的使用将变得越来越重要。
Google Translate from Chinese to English
您可能已经使用过一些最强大的 NLP 应用程序,但还没有意识到这一点。
看一下谷歌翻译就知道了。它是由谷歌开发的免费多语言机器翻译服务,由幕后的 NLP 提供支持。
或者也许你已经尝试过亚马逊 Alexa 或谷歌助手通过语音识别准确理解并回答你的问题——同样,通过 NLP。
更有意思的是,连数字营销行业都在向数据驱动的数字营销迈进。通过分析海量的文本数据和大规模,数字营销人员和品牌现在能够通过社交倾听了解客户的兴趣、痛点和品牌感知是什么。
在金融行业,聊天机器人已经为保诚的金融顾问提供了更好的服务体验,更加及时、准确,最重要的是,以人性化的方式回应了客户的查询。
NLP 已经改变了我们与计算机交互的方式,并且在未来还会继续下去。这些人工智能技术将成为从数据驱动向智能驱动转变的潜在力量,因为它们将在未来几年塑造和改善通信技术。
最后的想法
(Source)
感谢您的阅读。
我希望现在你已经更好地理解了为什么 NLP 变得越来越重要,以及它将如何影响我们的未来。
也许你是一名数据科学家,正在考虑专攻哪个领域。
也许你在数字营销领域工作,想知道如何在你的营销策略中利用 NLP 的力量。
没关系。
NLP 不再仅仅是未来。已经到了。
了解 NLP 如何应用于各种行业以及它如何塑造我们的未来非常重要。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
** [## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)**
为什么没人看你的仪表盘
原文:https://towardsdatascience.com/why-no-one-is-looking-at-your-dashboards-cbc495df0c41?source=collection_archive---------32-----------------------
不要犯这些错误
每个人都喜欢仪表板,但是它们实际上给你的企业带来了多少价值呢?仪表板应该给你即时的反馈,并让你改变你的行动,但更多的时候,我们现在看到的仪表板充满了新奇和噱头的视觉效果,降低了仪表板的实用性。今天,我想谈谈是什么让仪表板变得如此出色,并强调创建仪表板时的一些常见错误以及如何避免它们。
什么让仪表板变得伟大?
汽车仪表板是最常见的仪表板之一。它简单而有效,正是我们需要的仪表板。它被如此广泛地使用有几个原因,而且当我们创建我们的数字等价物时,有一些东西可以借鉴。
容易理解
仪表板对观众来说应该是直观的,内容应该容易理解,不需要太多的说明。这很像汽车仪表板的功能。汽车上的仪表板突出显示速度、每分钟转数和燃料,因为它们是司机在驾驶时应该知道的最重要的信息。类似地,一个好的业务仪表板应该只显示重要的指标,并且是对业务人员有意义的指标。
直接反馈
当仪表盘为你的行动提供反馈时,它是很有用的。在汽车里,速度表告诉司机他开得有多快,这样他就可以调整速度,这很有用,因为它使观众能够根据信息采取行动,并提供相关的反馈。同样,在商业中,向受众展示他们能够影响并尽快获得反馈的指标也很重要。
告诉你你需要知道的
汽车仪表板上的另一个特征是警示灯,当车辆出现问题需要驾驶员注意时,警示灯会闪烁。它们是仪表板的一个有用的特性,因为在正常操作中,它们不会占用用户的任何注意力,只在需要时才出现。对于企业来说,及时的警告同样有用,可以让人们在需要的时候意识到企业正在发生什么。
Photo by Daniel von Appen on Unsplash
为什么没人看你的仪表盘
以下是我们在创建仪表板时经常犯的一些错误。
利益不一致
人们只看他们感兴趣的东西,仪表板最常见的问题之一是它显示的信息与观众无关。在您的企业中为多种目的构建一个仪表板很有诱惑力,但它就是不起作用。如果您试图构建一个为所有人服务的单一仪表板,它最终不会为任何人服务。在创建仪表板时,我们应该首先将受众分成兴趣相同的群体,因为他们对同一组信息感兴趣。您可以使用现有的业务单位作为起点,但将来可能需要进一步细分它们。一旦你记住了你的受众,试着理解他们关心什么信息,他们用什么标准来衡量成功。这一步说起来容易做起来难,因为不是所有的组织都有一个清晰的方法来衡量成功,但你必须帮助你的受众确定正确的衡量标准。从正确的指标开始将确保你的观众对你试图展示给他们的东西感兴趣。
无法行动
回到速度计的例子,虽然它对司机有用,但对乘客毫无用处。虽然他可能对速度感兴趣,但他没有办法根据该信息采取行动。当我们创建仪表板时,也可以应用同样的原则。如果您的受众不能根据收到的信息采取行动,他们就不太可能对仪表板感兴趣。例如,利润是最重要的指标之一,但由于它是一系列行动的结果,人们很难直接影响它。通过将利润分解成各个组成部分,你可以开始帮助不同的人认识到他们可以如何为顶线指标做出贡献,例如,让客户支持侧重于留住客户,销售侧重于获得客户的成本,等等。
虚荣度量
在构建有效的仪表板时,指标的选择至关重要。您希望制作一个显示良好性能的仪表板,但有时您可能会陷入虚荣度量的陷阱。虚荣心指标让人们感觉良好,但对业务来说并不实际可行或至关重要。总页面浏览量或应用下载量等指标是虚荣指标的例子,因为它们总是会随着时间的推移而向右上方移动,但它不会给人们提供任何关于他们表现如何以及他们可以做些什么来改善的有用信息。
缓慢变化的数据
人们看仪表板是因为它们是动态的,告诉你你的业务从一天到下一天是如何运作的,有时甚至是从一秒到下一秒。因此,当您构建仪表板时,您需要考虑在人们查看您的仪表板的时间段内,信息是否合适。如果你的客户获取周期比人们查看仪表板的频率长得多,那么像客户人口统计这样的信息是没有用的,因为它看起来是静态的,只会占用宝贵的空间和注意力。虽然这种静态信息对于上下文非常重要,但是应该将它们从日常仪表盘中分离出来。
糟糕的图形
虽然使用花哨的图形和新图表给你的仪表板带来不同的东西很有诱惑力,但与更传统的可视化相比,它们不一定能以同样的效率传达信息。视觉设计在这方面也起着很大的作用,间距、颜色、形状和其他视觉元素的使用都有助于传达你想要向用户展示的信息。所以下次当你创建一个新的仪表板时,坚持使用简单的图表来传达信息。你的听众越快得到他们需要的信息,他们就能越快调整他们正在做的事情。
现在怎么办?
归根结底,没有完美的仪表板,因为事情总是在变化,无论是您的业务优先级、您的受众兴趣,甚至是您的技能。我们需要认识到,仪表板只是一种工具,我们可以用它来统一理解和标准化度量标准,它们不意味着是一种静态的东西,我们只需构建一次,然后盲目地遵循它。我们应该定期重新评估它们对受众是否有用,因为仪表板的价值在于它所激发的行动。请记住,仪表板是为了客观地告诉你你的业务是如何执行的,有时指标看起来不太好,但这正是为什么你有一个仪表板。你永远不会想要一辆在你超速时不会告诉你的车,所以你为什么想要一个在你的结果不如预期时不会告诉你的仪表盘。
如果您喜欢我的内容,请在 https://jchoi.solutions/subscribe注册更多内容
为什么没人关心你的数据科学项目
原文:https://towardsdatascience.com/why-nobody-cares-about-your-data-science-project-94dc4fe91e42?source=collection_archive---------4-----------------------
以及该怎么做
Source: https://unsplash.com/photos/tMXjU4cGsNA
刺猬和狐狸
最近,在读约翰·路易斯·加迪斯的《论大战略》时,我看到了哲学家以赛亚·伯林的著作。加迪斯基于以赛亚·伯林 1953 年的书《刺猬和狐狸:一篇关于托尔斯泰历史观的论文》对狐狸和刺猬的分类框架给我留下了特别有趣的印象。在他的书中,柏林建立在一个被认为是希腊哲学家阿奇洛库斯的片段之上,据说他说过“狐狸知道很多事情,但是刺猬知道一件重要的事情。”根据这句话,伯林认为作家和思想家可以被归类为狐狸或刺猬。根据柏林的说法,狐狸有着广泛的兴趣,并且依靠大量的经验和资源来做决定。在更详细地阐述狐狸的特征时,伯林认为亚里士多德和歌德是具有狐狸特征的思想家的潜在例子。另一方面,刺猬倾向于将他们对世界的解释建立在一个单一的、明确的想法上。为了说明他的观点,伯林将柏拉图和尼采等思想家列为具有刺猬般特质的思想家。
大型组织中的数据科学项目
虽然乍一看,柏林的框架可能为数据科学项目提供相对较少的价值,但研究其背后的核心思想会揭示一个完全不同的画面。由于最近数据科学的普及,许多主要投资于技术行业的组织开始雇用数据科学家。然而,这些数据科学家发现自己所处的环境与科技公司截然不同。首先,负责数据科学团队的主管可能根本没有数据科学或分析背景。因此,数据科学团队将很难向管理层传达其提议的项目。除了负责预算的人不完全了解数据科学团队的需求之外,数据科学家可能还会发现自己面临着来自大型组织的普通员工对其项目的大量怀疑。虽然这种怀疑背后可能有许多驱动因素,但最普遍的原因通常是缺乏对数据科学团队实际工作的了解。业务与技术关系不大的组织通常有可能知道如何使用 Microsoft Office 的员工(如果你幸运的话)。因此,数据科学家和剩余劳动力之间的知识差距从一开始就相当大。在我看来,把一切都贴上’AI’的标签,更是雪上加霜。大多数人,当面对“人工智能”这个术语时,会立即想到拥有与人类或其他科幻小说虚构人物相同能力的机器人。在这种情况下,人们对数据科学团队所做的一切都会产生一种自然的犹豫,认为它太复杂而难以理解,因此不值得在一开始就投入时间。
数据科学家应该是刺猬还是狐狸?
柏林提出的分类框架从几个方面说明了数据科学团队面临的挑战。在以下段落中,我将尝试通过将一般概念应用于数据科学家日常生活中的具体挑战,将 Berlin 的框架扩展到大型组织中的数据科学家。
让我们先来看看什么样的特征会导致数据科学家被归类为刺猬。在我看来,如果一个数据科学家坚持不懈地专注于自己的动机,他或她就可以称得上是一只刺猬。当提出一个项目时,他或她不关心非技术利益相关者(他们实际上可能是负责预算的人)的意见和担忧,而只关心她自己对这个特定项目的迷恋。虽然被项目的技术方面迷住绝对没有错,但恰恰相反,试图用这种心态追求数据科学项目将在非技术组织中导致巨大的问题。如果只能从数据科学家的角度来看待项目,你很快就会忽略负责预算的人的想法和顾虑。在与管理层沟通时,特别是在非技术组织中,项目批准与管理层能够看到您的项目如何为组织创造价值高度相关。在大多数情况下,价值要么是降低成本,要么是增加收入。因此,数据科学家 hedgehog 遇到的许多困难与从不同角度处理问题的能力以及相应地制定项目提案的能力直接相关。
与刺猬不同,狐狸依靠大量的输入来帮助引导它们。直觉上,这似乎是与数据科学相关的两者中更有益的一个,因为已经确定了对技术方面的狭隘关注会带来各种问题。然而,在数据科学领域只做一只狐狸并不一定比只做一只刺猬好。虽然严格专注于你的观点可能会对你的项目获得支持有害,但试图将其他人的意见纳入你的项目同样会注定项目的成功。向你周围的每一个人保证你会根据他们的需求调整你的项目可能会简化项目的资金保障,然而,这可能会扭曲你的项目,使之成为一个完全不同的项目。在我看来,不得不将项目推销给一个完全不熟悉数据科学的人的问题,最好的解决方法不是几乎完全放弃你的输入,而是纯粹依靠那些对手头的事情没有你理解得那么深入的人的意见。在这种情况下,我认为在涉及到项目的核心概念时能够坚持自己的立场是非常重要的。
结论
总而言之,在我看来,为了完成数据科学项目,拥有刺猬般的能力来保持对最终目标的专注是至关重要的。与此同时,不要陷入你的个人看法和思维方式,而是努力理解其他利益相关者来自哪里,以及如何最好地接近他们,对我来说同样重要。我不确定这个结论是否符合伯林提出的框架,然而,据报道,伯林本人从来不希望人们把这种分类看得太重。尽管如此,hedgehog 和 fox 框架可以为重要的讨论提供刺激。
如果你对这篇文章有任何想法,请随时联系我。我很高兴听到并讨论你的意见。
参考文献:
1加迪斯,约翰·路易斯,论大战略 (2018),企鹅出版社
2柏林,以赛亚,《刺猬和狐狸》 (1953),魏登菲尔德&梁君诺
为什么规范很重要——机器学习
原文:https://towardsdatascience.com/why-norms-matters-machine-learning-3f08120af429?source=collection_archive---------19-----------------------
Play with norms: https://www.desmos.com/calculator/wznruz7mxs
评估是所有建模和机器学习问题的关键步骤。因为我们经常对整个数据集进行预测,所以提供一个简单有效的数字来概括我们模型的性能。
在很多情况下,我们需要将关于一个数据集的信息压缩成一个单独的数。例如:
- 确定多维数据点的大小
- 计算机器学习模型的损失
- 计算预测模型的误差
在本文中,我将回顾在这些情况下最常用的规范,即 L 和 L 规范。我将描述它们的异同,以及何时使用哪个规范。此外,我将展示如何可视化这些规范以及它们在优化问题中的使用。
术语
有几个名字描述了相同的数量,所以让我们先把它清除掉。你可能在不同的上下文中听说过这些短语,但它们可能描述的是同一个东西!如上所述,这些规范用于量值和距离、误差近似值和回归的上下文中。
l 范数
L 范数通常被称为曼哈顿/出租车距离、平均绝对误差(MAE) 或最小绝对收缩和选择算子 ( LASSO)。
L 定额
L 范数通常被称为欧几里德距离、均方误差(MSE) /最小二乘误差或脊算子。
定义 L & L 规范(以及更多!)
L 和 L 范数通常用于给向量指定一个量级。对于一个向量 x 有 N 个分量,L 只是把这些分量相加。因为我们希望我们的幅度总是正的,所以我们取分量的绝对值。
L 范数取平方值之和,最后取平方根。L 范数和 a 标准距离公式一样,求 A 到 b 的最短路径。
如果你开始看到一个模式,那么你可能会问:为什么停在 2?我们也可以用这种方法为所有 1 ≤ p < ∞创建一个范数!
可视化 L & L 规范
从定义中我们可以看出,L 范数只关心单个的分量,而 L 范数寻找的是最短的距离。
L¹ and L² norms on a city block grid.
红色、蓝色和黄色距离都计算 L 距离,而绿色距离计算 L 距离。L 范数被描述为出租车距离的一个原因是因为它描述了你到达目的地必须经过的街区数。
可视化差异—优化
假设我们试图解决一个最优化问题。这意味着我们试图找到最佳的输入,使输出损失最小化。
范数是惩罚的最佳选择,因为它们为每个输出分配了一个合理的大小。
考虑最简单的优化问题——解决一个线性问题。这涉及到矩阵 A 和向量 b 。这些问题往往没有单一的解决方案,可能有一系列或一个平面的解决方案。
在这种情况下,我们需要从这一整套解决方案中找到最佳解决方案。引入范数惩罚,如 L 或 L 范数,是一种常见的方法。
Play around with this graph: https://www.desmos.com/calculator/wznruz7mxs
上图中,红线代表了方程 x + 3y = 5 的所有可能解。蓝色菱形代表固定 L 范数为 5 的所有解,橙色圆圈代表 L 范数相同为 5 的所有解。
如你所见,解决方案是不同的,这取决于我们决定使用哪个规范。由于 L 范数具有菱形形状,因此通常使用 L 范数可以找到稀疏的解。此外,由于 L 范数最小化了欧几里德距离,所以使用 L 范数经常可以找到消除异常值的解决方案。
谢谢!
如果您想玩玩上面的图表,看看 L 和 L 规范之间的差异,请查看 Desmos 上的这张交互式图表!
为什么不把均方差(MSE)作为 Logistic 回归的损失函数?🤔
原文:https://towardsdatascience.com/why-not-mse-as-a-loss-function-for-logistic-regression-589816b5e03c?source=collection_archive---------3-----------------------
作者:, Souradip Chakraborty * (表示同等贡献)。
在这篇博文中,我们主要比较了逻辑回归的“对数损失与“均方误差”,并基于经验和数学分析,说明了为什么同样推荐使用对数损失。
两个损失函数的等式如下:
日志丢失:
均方损失:
在上面的两个等式中
y:实际标签
ŷ:预测值
n:类别数
假设我们有一个包含 2 个类(n = 2)的数据集,标签分别表示为“0”和“1”。
现在,我们计算预测值和实际标签完全不匹配时的损失值,并了解 log-loss 如何优于 MSE。
比如:
比方说
- 数据集中给定样本的实际标签是“1”
- 应用 sigmoid 函数= 0 后模型的预测
使用 MSE 时的损失值:
(1- 0)² = 1
使用测井损耗时的损耗值:
在插入损耗方程的值之前,我们可以看看 log(x) 的图形是什么样的。
Figure 3: f(x) = log(x)
从上图可以看出随着 x 趋于 0, log(x)趋于-无穷大。
因此,损失值为:
-(1 * log(0) + 0 * log(1) ) =趋于无穷大!!
如上所述,与使用对数损失函数计算的损失值相比,使用 MSE 的损失值要小得多。因此,对我们来说非常清楚的是,MSE 不会强烈地惩罚错误分类,即使是完美的不匹配!
但是,如果预测值和实际标签完全匹配,则两个损失值都将为“0”,如下所示。
实际标签:“1”
预测:“1”
MSE: (1 - 1) = 0
日志损失:-(1 * Log(1)+0 * Log(0))= 0
这里我们已经说明了 MSE 对于二元分类问题并不是一个很好的选择。但是如果目标值是一次性编码的,这同样可以扩展到多类分类问题。
Logistic 回归中的均方误差和非凸性问题。
在分类场景中,我们经常使用基于梯度的技术(牛顿拉夫森,梯度下降等..)通过最小化损失函数来找到系数的最佳值。因此,如果损失函数不是凸的,就不能保证我们总是达到全局最小值,而是我们可能会陷入局部最小值。
Figure 4: Convex and non-Convex functions
在深入探讨为什么 MSE 在逻辑回归中使用时不是凸函数之前,首先,我们来看看函数是凸的条件是什么。
定义在一个n 维区间上的一个实值函数,如果函数的图上任意两点之间的线段位于图的上方或图上,则称该函数为凸。
Figure 5: Convexity of a function
如果 f 是两次可微的,并且定义域是实直线,那么我们可以将它刻画如下:
f 为凸当且仅当f”(x)≥0对于所有 x 。因此,如果我们能证明损失函数的二重导数≥ 0,那么我们就可以说它是凸的。 更多详情,可以参考 这段视频。
现在我们从数学上证明了逻辑回归的 MSE 损失函数是非凸的。
为了简单起见,我们假设对于给定的数据集,我们有一个特征【x】和【二进制标签】。在下图中,f(x) = MSE ,ŷ是应用 sigmoid 函数后获得的预测值。
Figure 6: MSE double derivative
从上面的等式中, ŷ * (1 - ŷ) 位于[0,1]之间。因此,我们必须检查 H(ŷ) 对于“x”的所有值是否为正,是否为凸函数。
我们知道 y 可以取两个值 0 或 1。让我们检查两种情况下的凸性条件。
Figure 7: Double derivate of MSE when y=0
所以在上述情况下,当 y = 0 时,从方程中可以清楚地看出,当 ŷ位于区间【0,2/3】时,函数【h(ŷ】****≥0,当 ŷ位于区间【2/3,1】时,函数【h(ŷ)≤0。这说明函数不是凸的。
Figure 8: Double derivative of MSE when y=1
现在,当 y = 1 时,从等式中可以清楚地看出,当 ŷ位于区间【0,1/3】时,函数 H(ŷ) ≤ 0,当 ŷ位于区间【1/3,1】时,函数 H(ŷ) ≥ 0。这也说明函数是不凸的。
因此,基于凸性定义,我们从数学上证明了逻辑回归的 MSE 损失函数是非凸的,不推荐使用。
现在是“对数损失”函数的凸性问题!!我们将从数学上证明对数损失函数对于逻辑回归是凸的。
Figure 9: Double derivative of log loss
θ:自变量“x”的系数。
如最终表达式(对数损失函数的双导数)所示,平方项总是≥0,而且,一般来说,我们知道 e^x 的范围是 (0,无穷大)。因此,最终项总是≥0,这意味着在这种情况下对数损失函数是凸的!!
最终想法:
我们希望这篇文章能够让你理解在逻辑回归中使用 MSE 作为损失函数的缺点。如果您有任何想法、意见或问题,请在下面留下评论或在 LinkedIn 上联系我们,别忘了点击👏如果你喜欢邮报。
[## Rajesh Shreedhar Bhat -数据科学家-印度沃尔玛实验室| LinkedIn
查看 Rajesh Shreedhar Bhat 在世界上最大的职业社区 LinkedIn 上的个人资料。
www.linkedin.com](https://www.linkedin.com/in/rajeshshreedhar/) [## Souradip Chakraborty -统计分析师-沃尔玛印度实验室| LinkedIn
查看 Souradip Chakraborty 在全球最大的职业社区 LinkedIn 上的个人资料。
www.linkedin.com](https://www.linkedin.com/in/souradip-chakraborty/)
参考资料:
[## 凸函数
在数学中,定义在 n 维区间上的实值函数称为凸(或下凸或…
en.wikipedia.org](https://en.wikipedia.org/wiki/Convex_function)
为什么不在分割数据之前选择要素
原文:https://towardsdatascience.com/why-not-to-select-features-before-splitting-your-data-2d6aba2e9fb?source=collection_archive---------10-----------------------
使用编码示例解释交叉验证的正确和错误方式
想象一下:一名斯坦福大学的博士生试图利用基因数据预测一种罕见心脏病的发生。该学生为 50 名患者收集了超过 10 万个基因表达数据(预测值)。然后,该学生从 10 万个预测者中挑选出最好的 100 个作为“初步筛选”的一部分,使用交叉验证将统计模型仅拟合到 100 个筛选的预测者,并报告准确率超过 65%(这对罕见的心脏病来说是一件大事)。听起来不错?
不!
这位学生对最近应用统计学中的一个危险趋势做出了贡献,即使用交叉验证来呈现他们的研究中高度偏颇的精选结果。重要的是不仅要了解学生错在哪里,还要了解他们为什么也会掉进这个陷阱。事实上,他们已经“窥视”了他们的验证集,甚至没有意识到这一点。
Don’t peek into your validation/test data
在本文中,您将学习-
- 快速识别可疑的统计研究,这些研究声称在初步筛选特征后进行了“独立验证”
- 以正确的方式进行交叉验证
- 在 R 笔记本上练习实现它
随着机器学习在收集数据的几乎每个领域的爆炸式增长,人们越来越多地找到了快速训练和部署现成模型的方法,而无需完全理解它们背后的算法。仅用一行代码就能让机器学习库“容易”实现的最新趋势只会增加问题。因为这些捷径,我们不时会遇到可能出错的例子,比如斯坦福学生的例子。
那个学生并不孤单——错误估计的交叉验证错误偶尔也会出现在一些高知名度的学术期刊上。事实上,一整篇文章都致力于在美国国家科学院学报上记录这种选择偏差的例子。所以,让我们来看看上面的例子中到底哪里出错了。
交叉验证:错误的方式
在上面的例子中,学生使用所有的例子(患者)来筛选预测因子,而不是将他们自己仅仅限制在训练折叠中。由于他们正在处理一个广泛的数据集——特征数量(基因)> >样本数量(患者)——执行特征选择以缩小到基因子集是一个自然的选择。这实际上也是防止模型过度拟合的有价值的步骤。但是通常情况下,筛选是在项目的早期阶段进行的,导致人们在使用交叉验证建模时忘记了它。如果我们使用所有的例子来选择我们的预测器(图 1),模型甚至在预测之前就已经“窥视”到验证集了。因此,交叉验证的准确性必然比真正的模型准确性高得多。
Fig. 1. | The wrong way to perform cross-validation. Notice how the folds are restricted only to the selected predictors.
下面是一个交叉验证陷阱的工作示例,我们在预测像掷硬币这样真正随机的事情时获得了 99%的准确率!完整的 R 笔记本也可以在这里买到。
交叉验证:正确的方法
另一方面,如果我们运行与上面相同的模型,但是只使用训练折叠来筛选预测器,我们将有一个更好的模型真实误差的表示。分割数据的正确方式如图 2 所示。在这种情况下,同一个模型的交叉验证准确率为 46%,或者换句话说,该模型在预测抛硬币时的正确率不到一半。
Fig. 2 | The right way to cross-validated. Notice how the validation fold is separated before selecting the features
经验教训
在本文中,我们学会了以正确的方式进行特征筛选,而不是落入交叉验证陷阱。要复习,记得-
- 仅将训练数据(或训练折叠)用于特征筛选或任何其他数据操作
- 在对同一验证集进行预测时,不要使用模型可以从中受益的验证集中的任何信息。验证应该总是独立的。
至于那个严重高估了他们模型预测心脏病准确性的斯坦福学生呢?幸运的是,在将他们的错误公之于众并误导医学协会之前,这位学生遇到了罗布·提布拉尼(我的教授)。如果你想听听 Rob 自己是怎么说的,这里有他的视频。
为什么 Python 对基于人工智能的项目有益
原文:https://towardsdatascience.com/why-python-is-beneficial-for-ai-based-projects-15b28ba19982?source=collection_archive---------16-----------------------
你是否困惑于为你的下一个大的人工智能项目选择哪种语言?了解有关 Python 核心功能的更多信息。
今天,很难想象没有不同程度的人工智能技术的现代商业。聊天机器人、虚拟助手、语音搜索和其他融入市场的创新正在增加企业的收入,同时改善客户的体验。如果你想开始自己的基于人工智能的项目,那么你会事先制定出一个策略,用于编码和所有其他过程的编程语言(进一步 PL)。
为什么选择 Python 做 AI 驱动的项目?
毫无疑问,人工智能技术是未来。考虑到这一趋势越来越受欢迎,以及准备投资于此的人数,到 2025 年,全球人工智能市场将达到898 亿美元。
PL 是你首先应该考虑的。编码的复杂性以及有经验的合格开发人员的可用性也是需要考虑的关键因素。当涉及到人工智能行业时,你需要有效地处理和处理大量数据,在这里我们为你提供了至少 8 个理由为什么你会选择 Python 来开发你的人工智能项目。
陡峭的学习曲线
由于是基于 OOP 的,Python 提供了来自所用 PL 的 API,简化了学习过程,减少了新开发人员学习基础知识和开始编写 AI 应用程序所需的时间。此外,它具有简单的语法,类似于真正的英语,即使是初级或无经验的 Python 开发人员也可以使用复杂的系统。
伟大的图书馆生态系统
满足各种需求的巨大预建库是 Python 如此适合人工智能项目的下一个原因。选择任何符合您需求的。因此,如果你的项目需要高级计算,那么 SciPy 就是你需要的,对于科学计算——NumPy 和 ML,你最好使用 Pybrain。领导者是 AIMA 或“人工智能:现代方法”,它将通过缩短开发人员编码所需的时间来节省您的预算。这只是用于基于人工智能的项目的内置库的一部分。而这就是 Python 的亮点。
灵活性
Python 基于面向对象编程,专注于 RAD,DRY,对变化有很好的适应性,没有逻辑重复的风险。您的选择是:编写脚本或使用 OOPs。开发人员修改几行代码,很快就能得到结果。不需要重新编译源代码。除此之外,由于在 IDE 本身中检查代码的能力,还有机会利用不同的算法和语言以及 Python。
平台独立性
Python 的下一个亮点是平台独立性。可以对代码和人工智能应用程序在新操作系统中运行的方式进行一些修改。在不同的平台上,如 Windows、Linux、MacOS、Unix 或任何其他平台上,迁移代码和测试应用程序肯定会节省时间。该过程变得更容易和更明显,并且因此降低了成本。
和睦相处
下一个强大的特性为 Python 增加了更多的灵活性,因为 AI 项目与其他语言和各种平台高度兼容。多亏了 Python 包索引(PyPI) 包含了许多第三方模块,允许 Python 与其他语言交互。它简化了开发人员的工作,并节省了您的资金。
社区支持
独一无二的是 Python 有一个强大的开发者社区支持。这是一个开源平台,让您可以访问免费的 Python 在线文档和面向新手和专家的论坛。在那里,您可以获得许多有用的信息、库和工具,还可以参与讨论、解决问题、找到修复错误的程序,以及在开发的每个阶段的各种问题上获得帮助。
良好的可视化选项
正如我们上面所写的,Python 有各种各样的内置库。另一件很棒的事情是,它们中的一部分只是可视化工具。它为开发人员提供了一个机会,例如通过直方图来表示非程序员可以访问的数据。通过这种方式,您可以有效地呈现数据和可理解的报告,以可视化流程,从而在每个层面上减轻您的控制。
越来越流行
没有人能忽视上面列出的 Python 的好处。所有这些都激起了 PL 越来越受欢迎的趋势,这种趋势将持续到 2020 年,这取决于 StackOverflow 提供的数据。例如,今天找到和/或替换一个经验丰富的 Python 程序员比找到一个熟练的 LISP 或 Prolog 专家要容易得多。更重要的是,这种情况下成本会更低。
哪些行业会受益于 AI?
如果你准备开始自己的人工智能项目,剩下要做的就是选择行业来实现你未来的应用。在那里你有很多选择。在这里,我们将帮助您拉近距离并简化您的决定。下面你会发现在不久的将来,7 个行业将从人工智能中获益最多。
卫生保健
实施人工智能技术最有前景的行业之一是医疗保健。据报道,到 2026 年,通过采用人工智能医疗应用,美国每年可以节省高达 1500 亿美元。即时手术、虚拟护理助理、放射工具的改进、诊断测试和管理任务的自动化、治疗的准确性、疾病的预测,是该技术可以应用的几个领域。
银行业务
据预测,到 2030 年,通过实施人工智能技术,银行业将节省约1 万亿美元,传统成本将降低约 22%。改进和个性化的客户服务、管理投资、收集财务数据、使用预测分析、风险评估等。T4 人工智能可以应用于金融公司和银行。
教育
电子学校新闻报道称,到 2021 年,人工智能技术在教育领域的应用将增长 47.5%。使用人工智能应用进行教学有望实现更个性化的学习、更高的学习效率和速度、对增强内容的访问、准确的规划以及新水平的指导等。很明显,人工智能将在未来几年重塑电子学习。
农业
由于劳动力短缺,采用人工智能是世界农业的一个生存问题。因此,在许多过程中实施自动化技术将会给农业带来巨大的好处。这样可以降低成本,增加公司的收入。
营销
营销可以通过技术栈的方式利用人工智能,员工手动制作的流程可以自动化,例如,它可以带来更高的效率和快速分析大型数据集。Gartner 表示,到 2020 年,全球 30%的公司将在至少一个销售流程中使用人工智能技术。此外,根据埃森哲的报告,到 2035 年,盈利能力将增长 38%,人工智能将创造14 万亿美元的额外收入。
汽车的
你肯定听说过自动驾驶汽车,所以这是关于人工智能技术的。然而,这并不是在汽车行业使用人工智能技术的所有方式:
- AI 驾驶特性(驾驶员辅助和自动驾驶驾驶);
- AI 云服务(预测性维护、个性化营销);
- 汽车保险和风险评估;
- 汽车制造中的人工智能。
根据最近的研究,专家预计汽车人工智能市场到 2025 年将达到105.733 亿美元,2017 年至 2025 年间的 CAGR 为 38.46%。
电子商务
到 2021 年,电子商务销售额预计约为 4.5 万亿美元。这并不是没有使用人工智能技术。由于人工智能,这些网站通过聊天机器人为客户提供 24/7 服务和帮助,通过利用人工智能技术、物联网和其他在电子商务中使用人工智能的例子分析 CRM 数据来改善消费者体验。
结束语:Python 是人工智能项目的理想选择吗?
所以,我们来总结一下上面写的。内置库的高度多样性、简单的语法、可读性、兼容性、复杂算法的快速测试、非程序员的可访问性和其他特性使 Python 值得您关注。所有这些都简化了流程,节省了预算,增加了 Python 的受欢迎程度。考虑到使用 PL 的所有优势,结论是显而易见的——Python 是你在基于人工智能的项目中需要考虑的。
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Roman Zhidkov 是 DDI 开发公司的首席技术官。Roman 负责 DDI 的技术战略,并在公司内部推动新技术计划方面发挥着关键作用。他了解技术在其他技术领域、客户需求、业务影响和公司战略方面的背景。
为什么零售商希望填补更多的数据科学家职位
原文:https://towardsdatascience.com/why-retailers-want-to-fill-more-data-scientist-positions-b0c042cfadfe?source=collection_archive---------29-----------------------
总体而言,数据科学家的角色是最受欢迎的职位之一,但在零售部门,人们尤其努力利用数据科学家提供的技能。
无论你目前是一名数据科学家还是渴望成为一名数据科学家,零售商可能会有各种各样的理由雇佣你。这是其中的四个。
1.他们想效仿主要竞争对手的做法
一些零售商在注意到其他公司在这方面取得成功后,感到有必要专注于雇用数据科学家。Target 是第一批利用数据作为业务增长方式的公司之一,它是在众多零售商遭遇低迷的时候做到这一点的。
尽管 2012 年至 2013 年期间,塔吉特的整体销售额有所下降,但那一年的在线销售额增长了近 30%,同时也增加了该公司积累的数据量。
2013 年,该公司聘请 Paritosh Desai 担任商业智能、分析和测试副总裁。那个人开始建立一个数据科学家团队,并巩固了该公司更加关注其数据的愿望。
德赛进行了许多以数据为中心的变革,包括允许经理们访问汇编的数据。他们还被鼓励提出与数据相关的问题,并依靠数据科学家找到答案。
Target 还精心制定了其数据战略,深知需要投入时间和人力资源来实现其目标。该公司对数据科学的关注仍有回报,同行零售商可能会意识到,他们不能忽视数据,以跟上 Target 或其他以类似方式看待信息价值的零售商的步伐。
2.数据相关的见解有助于零售商吸引顾客
在他们有机会通过现在如此容易获得的方法来挖掘数据之前,零售商经常使用猜测和经验来评估如何让客户满意和忠诚。雇佣数据科学家可以让零售商决定如何利用实时数据吸引顾客,而不是基于历史信息进行预测。
数据科学允许采取更个性化的方法,并总结如何向更小部分的客户甚至个人购物者提供令人兴奋的优惠,而不是找出哪个大客户群体最有可能对特定优惠做出有利的反应。然后,零售商更有能力提供人们最想要的东西。
如果没有数据的帮助,他们可能会给出吸引力较小的激励措施,因为目标群体更广泛。
未能清楚了解顾客的需求可能会让零售商浪费金钱和时间,因为他们的活动失败了。相反,当商店就新产品、营销方法、价格和限时优惠做出重要决策时,利用数据加深品牌对顾客的了解应该会带来更多信心。
商店还可以要求他们的数据科学家查看与产品相关的细节,例如人们有多大可能会退回某件商品或需要对其提出保修申请。了解这些事情可以促使商店决定停止销售特别有问题的商品。
3.技术让数据收集变得更加简单
当今零售商使用的服务点(POS)系统有各种有用的组件来协助商店的运营。除了现金抽屉和收据打印机等基本设备,许多商店还为收银员配备了触摸屏面板,以及用于跟踪销售和库存的分析软件。人们可以直接在 POS 系统中查看统计数据,也可以将数据导出到专业分析软件中。
数据收集的便利性使得许多零售商渴望利用唾手可得的信息。他们通常通过雇佣能够彻底检查信息并发现有意义趋势的数据科学家来做到这一点。他们也可能通过外部数据进行挖掘。
Lowe’s 利用 Pinterest 数据来了解用户意图。更具体地说,它将内部交易数据添加到客户的 Pinterest 档案中,并依靠这些数据来改进广告。
例如,如果 Lowe's 的数据表明一个人经常购买园艺用品,它可以提供相关的 Pinterest pins 作为广告策略。Lowe's 表示,使用 Pinterest 并与可购物胸针互动的客户的 T2 点击率比平均点击率高出 20%。
这家家装零售商还希望与一家位置数据提供商合作,衡量 Pinterest 互动是否会带来更多实体店流量。
无论零售商是单独使用内部数据,还是将内部数据与社交媒体网站等外部数据相结合,都有更多的机会来收集数据并根据数据采取行动。
作为采用这种方法的公司的数据科学家,您可以帮助零售商从现有数据源中提取有价值的见解,或者推荐其他与指标相关的投资。
4.数据有助于零售商决定进行哪些改进
零售专家经常谈论正在影响实体店的“零售末日”,以及品牌可以做些什么来保持业务。
截至 2018 年 8 月,数据已经显示,按平方英尺计算,2018 年是零售商店关门的 10 年高点。在最近的一次全国零售联盟会议上,热门话题之一是科技可以帮助实体零售商恢复。
一些品牌使用增强现实(AR)、机器人和应用程序来补充购物者的店内体验。FAO Schwartz 用 iPad 技术更新了其 Rockefeller Plaza 商店,包括让孩子们在 iPad 应用程序中组装赛车,然后让“机械师”在现场组装玩具。
当零售商让数据科学家加入他们的团队时,他们可以通过数据挖掘,发现哪些改进最能引起客户的共鸣。这样做可以帮助实体零售商和网上零售商。
例如,数据科学家可能会注意到,网站上超过一半的首次购物者在到达注册表单后没有完成购买就离开了。
在这种情况下,该品牌可能会简化其注册表格,使其不那么吓人,或者让购物者导入脸书或谷歌等其他公司存储的数据,以简化注册过程。然后,顾客感到更受鼓励去买东西,这增加了零售商的利润。
作为一名受雇于零售商的数据科学家,你可以建议应用数据来解决该品牌存在的特定已知问题。有了这种以目标为导向的方法,商店就可以从他们的数据中获得最大价值,这样数据就不会被浪费掉。
数据科学家拥有零售业急需的技能
作为一名数据科学家,你拥有零售商想要和需要的能力。本概述详细介绍了商店使用数据的一些最常见的原因,但并不全面。
如果你要把你的技能带到零售业,它们会让公司在充满挑战的环境中保持稳定和增长。
照片由 迈克·彼得鲁奇 拍摄
为什么样本方差除以 n-1
原文:https://towardsdatascience.com/why-sample-variance-is-divided-by-n-1-89821b83ef6d?source=collection_archive---------3-----------------------
解释你的老师没有教过的高中统计学
Photo by Tim Bennett on Unsplash
如果你正在阅读这篇文章,我假设你已经遇到了样本方差的公式,并且知道它代表什么。但为什么分母是 (n-1) ,而不是 n 仍然是个谜。原因如下。
目录
- 设置
- 1。自由度
- 2。偏置源
- 3。贝塞尔校正
最初发表于edenau . github . io。
术语
群体:包含群体
所有成员的集合:包含群体部分成员的集合(技术上讲是群体的多子集)
独立同分布(i.i.d .)随机变量 :
假设所有样本(a)都相互独立,且(b)具有相同的概率分布。
中心极限定理 :
当样本量足够大时,独立同分布随机变量的抽样分布趋于一个正态(高斯)分布。
预期值 :
同一实验重复次数的长期平均值 值。
无偏估计量 :
无偏估计量的期望值等于被估计参数的真值。换句话说,无偏估计量的分布集中在正确的值上。
Photo by Austin Neill on Unsplash
设置
给定一个具有未知总体均值和总体方差 σ 的大型高斯总体分布,我们从总体中抽取个独立同分布样本,使得对于来自集合的每个样本 x_i******
而 x_i 的期望值是 μ ,而 x_i 的期望值是大于 μ 。是因为平方函数的非线性映射,其中较大数字的增量大于较小数字的增量。例如,set (1,2,3,4,5)的均值为 3,方差为 2。通过平方每个元素,我们得到平均值为 11=3 +2 的(1,4,9,16,25)。我们在以后的阶段需要这个属性。
评估者
由于我们不知道真实的总体属性,我们可以尽力使用类似的结构从样本集中定义这些属性的估计量。
让我们给【σ戴上一顶帽子(^)称它们为‘伪均值和方差’,我们以如下方式定义:**
这些定义有点武断。理论上,你可以用更好的方式定义它们并测试它们,但是让我们尝试最简单的方法。我们定义伪均值 ^μ 为所有样本 X 的平均值。感觉这是我们能做的最好的了。对伪均值的快速检查表明,它是一个无偏总体均值估计量:
简单。然而,真正的样本方差取决于总体均值,这是未知的。因此,我们用如上所示的伪均值 ^μ 来代替它,这样伪方差反而依赖于伪均值。
1.自由度
假设我们有一个公平的骰子,但没有人知道它是公平的,除了杰森。他知道人口平均数 μ (3.5 分)。可怜的威廉乞求得到统计属性,但杰森不会让步。威廉不得不通过抽样进行估计,即尽可能多地掷骰子。他滚了三次就累了,前两次试得了 1 分和 3 分。
Photo by Mike Szczepanski on Unsplash
给出真实的总体均值(3.5 分),你还是不知道第三卷是什么。然而,如果你知道样本均值 ^μ 是 3.33 分,你就肯定第三次掷出的是 6,因为(1+3+6)/3 = 3.33——快速数学。
换句话说,样本平均值正好包含样本集中的一位信息,而总体平均值不包含。因此,样本均值给样本集 少了一个自由度 。
这是我们通常被告知的原因,但这并不是一个强大而完整的证明,说明为什么我们必须用 (n-1) 来代替分母。
2.偏差来源
使用相同的骰子示例。Jason 知道真实平均值,因此他可以使用真实总体平均值(3.5 分)计算总体方差,并得到 4.25 分的真实方差。威廉在计算伪方差(我们定义的方差估计量)时必须采用伪均值 、^μ (本例中为 3.33 分),伪方差为 4.22 分。
事实上,伪方差总是 低估 真实样本方差(除非样本均值与总体均值重合),因为伪均值是伪方差函数的 极小值 ,如下图所示。
你可以通过一阶导数测试,或者通过基于函数凸性的检验来检验这种说法。
这表明使用伪均值会产生偏差。然而,这并不能给我们偏见的价值。
Photo by Tudose Alexandru on Unsplash
3.贝塞尔校正
我们唯一的目标是调查这个方差估计量 ^μ 有多大的偏差。我们期望伪方差是一个有偏估计量,因为如前所述,它总是低估真实方差。通过检查我们的伪方差的期望值,我们发现:
一步一步来。 x_j x_k (如下图)的期望值取决于你是采样不同的(独立的)样本其中 j≠k ,还是相同的(在这种情况下肯定是依赖的!)样其中j = k*。既然我们有了 n 个 样本,那么得到相同样本的可能性就是 1/n 。因此,*****
还记得开头提到的 x_i 的期望值吗?通过扩展 ^μ ,我们有了
将这些公式代入,我们发现伪方差的期望值不是总体方差,而是总体方差的 (n-1)/n 。由于对于所有有限正的 n ,比例因子都小于 1 ,这再次证明我们的伪方差低估了真实的总体方差。
为了调整无偏方差估计量,我们简单地应用贝塞尔修正,使估计量的期望值与真实总体方差一致。
这就是了。我们定义 s 为 无偏样本方差 。 (n-1) 分母来自贝塞尔修正,贝塞尔修正是由在两个连续试验中采样相同样本(替换)的 1/n 概率产生的。
Photo by freddie marriage on Unsplash
随着样本数量增加到无穷大 n→∞ ,偏倚消失( n-1)/n→1 ,因为两次试验中抽样同一样本的概率趋于 0 。
相关文章
感谢您的阅读。如果您对 Python 或数据可视化感兴趣,以下文章可能会有用:
** [## 我希望我能早点知道的 5 个 Python 特性
超越 lambda、map 和 filter 的 Python 技巧
towardsdatascience.com](/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4) [## 使用交互式地图和动画可视化伦敦的自行车移动性
探索 Python 中的数据可视化工具
towardsdatascience.com](/visualizing-bike-mobility-in-london-using-interactive-maps-for-absolute-beginners-3b9f55ccb59)
最初发布于edenau . github . io。**
为个人色彩分析设定基准
原文:https://towardsdatascience.com/why-seasons-do-not-show-up-in-the-data-27fff04c0976?source=collection_archive---------16-----------------------
色彩领域的数据科学家无法获得可量化的数据来确保可信的映射。
2 月 7 日,研究员 Peter Gaston 在的《走向数据科学上发表了一篇的文章,名为《时尚科学进行季节性色彩分析》。他描述了建立一种算法的过程,这种算法复制了一种流行的方法,即寻找能够增强个体自然美的最佳颜色。这种方法被称为季节颜色分析(SCA ),它根据共有的特征将人类分为四类。彼得·加斯顿得出的结论是:数据中找不到季节。基本上,SCA 没有系统。
自 2008 年以来,我一直在使用 24 个样本调色板为客户构建高度个性化的动态调色板。这些调色板整齐地组织在四个集群系统中。聚类与季节颜色分析(SCA)方法中的季节相对应,但是我使用的实际方法与 SCA 的普及版本不同。更科学,留给主观感知的空间更少。我看到了为什么季节没有出现在彼得的数据中的两个主要原因。
- 研究人员无法获得可量化的数据来设定适当的基准。
- 数据收集过程比一张随意的智能手机自拍要复杂一些。
SCA 的流行版本提供了四个集群:春、夏、秋、冬。他们根据两个因素来划分季节:色温(暖、冷)和颜色强度(暗、亮)。这是 SCA 的一个普通版本,由 Carole Jackson 在她的书 Color Me Beautiful (1980)中推广。这个概念被简化,以适应 9.99 美元的平装本,并摆脱可怕的科学语言。布局如下:
- 春天:温暖的光
- 夏天:冷光
- 秋天:温暖-黑暗
- 冬天:凉爽-黑暗
我使用的 Caygill SCA 方法设置了不同的基准来组织四个季节性集群,使其更加可量化。切换到不同的基准测试使得大多数 SCA 实践者几乎认不出这个方法,但是我们仍然称它为 SCA,并且使用标签春天、夏天、秋天和冬天。更多的时候,我们发现自己在用枯燥的数字语言交流,说一些类似于“他是数字 7”或“她是数字 21”的话 Caygill 方法与流行的 SCA 版本的两个主要区别是:
- 光和暗在季节内是可变的。为了设定季节之间的基准,我们使用主要皮肤色素褪黑激素、胡萝卜素和血红蛋白的比例。这些比率形成了一个范围,在从亮到暗的过程中保持一致。这允许创建更加动态和灵活的个性化调色板。这个比例是可以算出来的。分析皮肤成分是一项艰巨的任务;我们看着重型医学研究与它斗争,但它是可以做到的。
- 温暖和凉爽在季节内是可变的。为了设定季节之间的基准,我们再次使用主要皮肤色素褪黑激素、胡萝卜素、血红蛋白的比率。
当谈到温度时,我避免使用“冷”和“暖”这两个词,而改用更专业的“蓝色”和“黄色”这确保了我们更接近可以量化的东西,比如波长,而不是某人的个人观点。这里有一个例子。
在凯吉尔 SCA 方法中,这个女人属于夏天,一个基于蓝色的星团。你看她的时候会想到酷炫还是蓝基?不,我也没有。
Blue-Based, Summer Cluster. SCA Caygill Method.
被她文艺复兴时期的金色鬃毛和皮肤的金色光芒所引导(或者说是误导),我开始给这个女人穿上同样充满活力的暖色调,却看到她的脸变得毫无生气,黑眼圈出现在她的眼睛下面。这就是我如何得知在她金色的光芒下有一种强烈的紫灰色底色。当我给她穿上暖色调的衣服时,淡紫色的底色就显现出来了,从起泡的黄色到朴实的土色。我与一位更有经验的同事分享了我的沮丧,她提醒我夏季系列中的特殊调色板#27 适合这种肤色:看起来很温暖,底色中有很多灰色和淡紫色。这是一个结合了暖色(以黄色为基础)和冷色(以蓝色为基础)的夏季边缘案例。)由于我的客户对所有优雅的、布鲁内罗·库奇内利式的灰色反应如此之差,我甚至懒得为这样一个看起来“温暖”的人尝试夏季色调。我没有想到 27 号边缘调色板,因为我把它的深宝石色和浅黑色联系起来了。但是当我开始小心翼翼地挑选那些不是明显的紫灰色,只含有一点点紫灰色的深色色板时,她波提切利式的美出现了。适合她的颜色都来自我们称之为“夏天”的蓝色系。它们比典型的夏季调色板更温暖(心理上),但它们仍然是以蓝色为基础的(可量化)。准确地说,它们是紫红色的。
顺便说一句,在他的文章中,彼得·加斯顿提到所有肤色看起来都是暖色,这听起来让他很困惑。所有肤色看起来温暖是完全自然的。胡萝卜素是主要的皮肤色素之一,它能确保我们的皮肤看起来温暖。根据 T2 的这项研究,富含胡萝卜素的皮肤被认为是最有魅力的。胡萝卜素给了我们这种阳光般的金色光芒,人眼本能地寻找这些温暖的迹象。作为一名个人色彩顾问,我的任务是确定皮肤成分中还有哪些色素,哪些占主导地位,它们构成了什么比例,并希望有助于像彼得·加斯顿这样的研究人员将这一点量化。
以下是与夏秋两季 edge case 肤色相对应的样本。左下角的两个样本是夏天。右边的样本是边缘案例秋季。差别是微妙的。但是,一旦我们意识到了这些成分,我们就可以用公式表示出微妙之处:左下方的样本包含灰色;右边的没有。这将决定适合每种肤色的衣服色调。灰色(以蓝色为基础的淡紫色)是夏天区别于其他三个季节的地方。这种灰色的存在是我们的基准,而不是某种逃避的“温暖”,一种因人而异的心理感知。
The Benchmark between the Summer and Autumn Clusters is the presence of mauve grey, not some evasive “warmness.”
现在,让我们看看为这两种肤色推荐的样本调色板。秋天(黄色为主)在上面。夏天(蓝色为主)在最下面。
两者,夏秋边缘案例看起来都一样黑暗温暖(心理上)。但在夏天,我们看到紫色和淡紫色(蓝色:可量化的数据)。秋天,我们不再看到紫色和淡紫色。秋天的蓝色变成了茶色,更多的是绿色,而不是蓝色。(可量化的数据)。秋天的调色板里没有灰色(可量化的数据)。
Sample Palettes for Edge Cases Summer and Autumn Clusters
现在,让我们看看为这两种肤色推荐的样本调色板。秋天(黄色为主)在上面。夏天(蓝色为主)在最下面。
夏秋边缘案例看起来都是同样的黑暗和温暖(心理)。但是在夏天,我们看到紫色和淡紫色(基于蓝色的可量化数据)。在秋天,我们不再看到紫色和淡紫色,取而代之的是秋天的蓝色变成了茶色,茶色以绿色为主,而不是蓝色。(可量化的数据)。秋天的调色板里没有灰色(可量化的数据)。
2019 年 3 月 14 日,时尚业巨头斯科特·楚门在他的 Instagram 账户上发布了一张照片,照片上的男孩与我的客户非常相似:皮肤成分富含胡萝卜素,带有强烈的淡紫色。他穿着与夏季集群相似的颜色:深,有希思罗机场,蓝色为基础。具有讽刺意味的是,在他的评论中俯视色彩理论时,这位著名的品位创造者挑出了一个(很可能是直觉上)遵循非常严格规则的人。肤色的原始法则——底色,这是季节性色彩分析的基础。
比起名人,我更喜欢斯科特·楚门(服装设计师)作为我的标准。我们要么看到名人完全解体,在他们的休息时间被八卦的狗仔队抓住,要么我们看到他们在高压事件和电影剪辑的严密策划格式中,当大量世界级的人才涌入他们的外表。这在普通人的日常生活中是无法复制的。这位服装设计师因其对时装周常客以及纽约、巴黎、伦敦、米兰和全球各地街道上各个年龄段的普通人的坦率、自发的拍摄,吸引了时尚巨头和普通人的注意。这是我们造型师所推崇的。
上图是我客户的肖像,四年后由世界上最有影响力的时尚大师复制,这完全归功于季节色彩分析。它由好莱坞造型师苏珊娜·凯吉尔(Suzanne Caygill)的黄金时代开发,延续了欧洲绘画的悠久传统。
大多数 SCA 从业者没有 Caygill 方法的肤色织物样本和复杂的工具集,因为它昂贵且复杂。在 20 世纪 80 年代,它被更“全面”(可销售)的格式所取代。但对于任何有志于在颜色方面训练人工智能的人来说,凯吉尔 SCA 是可靠、可量化数据的来源。
医生为什么要懂机器学习?
原文:https://towardsdatascience.com/why-should-doctors-understand-machine-learning-e2433bd5ac76?source=collection_archive---------28-----------------------
现实世界中的数据科学
以及为什么医疗保健人工智能领域需要更多医生
我们看到,在所有领域,人工智能(AI)和机器学习(ML)的使用和讨论越来越多;包括医疗保健。更大的数据量、更高的计算能力和机器学习技术的突破为创新提供了肥沃的土壤。在医疗保健领域,涉及人工智能的研究呈指数增长,出版物和学术资助也相应激增,反映了这一点。
但是医生真的需要懂机器学习吗?我们认为是这样的,以下是我们的主要原因。
与患者的交流
我们开始看到机器学习工具用于临床环境,随着我们当前的新研究浪潮,我们看到更广泛的使用只是时间问题。这意味着,在不久的将来,你的“普通”医生将使用基于机器学习的决策支持工具,并推荐基于机器学习的治疗作为他们日常实践的一部分。
在解释测试时,理解特异性、敏感性、阳性和阴性预测值等术语对我们来说很重要。我们知道 PSA 升高的患者不一定患有前列腺癌,或者 D-二聚体升高不一定意味着 DVT/PE,因为这些测试具有高灵敏度但低特异性。这通常是我们与病人讨论的一部分。
然而,我们现在需要扩展这一点,以包括 AUC 和 F1 分数的讨论,以及基于机器学习的预测的其他细微差别。
此外,许多患者希望了解新的解释和预测是如何工作的。他们会发现“然后一个非常复杂的算法得出一个预测”的解释远不如“该算法在 1000 名患者身上进行训练,以学习发现可以预测 X 与 Y 的模式,以便我们可以考虑你的年龄、基因特征、合并症等,以给出个性化的预测”令人满意。
为研究和创新做出贡献
医疗保健中的人工智能是最具活力和最令人兴奋的研究领域之一,具有巨大的潜力和太多有待探索的地方。作为一名了解多发性硬化症的医生,你可以通过很多方式为这一领域做出贡献。
许多医院存储了大量数据,这些数据是令人兴奋的医疗保健人工智能研究的沃土。然而,如果部门中没有人了解如何使用这些数据,这些数据通常会被闲置。作为一个了解人工智能的人,你可以帮助建立一个从事前沿人工智能研究的部门。(我们将在未来上传这样做的指南:观看这个空间。)
与在医疗保健人工智能领域工作的许多公司合作也有巨大的潜力。他们的团队通常包括机器学习工程师、研究人员,当然还有医疗保健专业人员。虽然 ML 工程师将构建工具,但他们需要医疗保健专业人员的投入来指导他们的工作。对能够“说自己的语言”的医务人员有很大的需求;能够将他们的医学见解转化为“数据”和“变量”的人。您还可以洞察哪些内容可以整合到医疗工作流程中,哪些内容用处不大。我们是否应该训练一种算法来识别绝对观察/生命体征,或个体基线的波动?对 AKI 具有高敏感度的算法提供弹出通知是有益的还是有害的?有许多见解只能从医疗保健系统中获得,所以我们不应该把医疗保健人工智能的发展留给那些没有的人。
参与讨论
理解 ML 也将使你能够透过炒作,并有助于将讨论转向对当前事态的更有分寸、更准确的评估。当一位领先的机器学习研究人员报告说,人工智能现在可以比放射科医生更好地诊断肺炎时,你将有洞察力解释为什么不是这样。
在整个社会和医疗保健领域实施 ML 将代表我们这一代人的关键转变之一。作为医生,我们希望对这是如何发生的有发言权。有许多道德问题需要考虑,这些问题并不总是与在该领域工作的公司的财务激励一致。了解 ML 可以使我们成为我们医疗社区中知情和负责任的成员,他们可以为讨论和政策决策做出贡献,从而促进以安全、有效和以患者为中心的方式引入 AI。
怎么会?
下一步是如何培养对机器学习的理解。查看我们推荐的资源,建立理解的基础,然后保持最新。
原帖chrislovejoy . me
为什么每个工程师都应该开始考虑发展分析和编程技能?
原文:https://towardsdatascience.com/why-should-every-engineer-consider-start-developing-analytical-and-programming-skills-d510eadb146c?source=collection_archive---------7-----------------------
面向非程序员的编程
一个非计算机科学工程师的视角
Image from Christopher Gower available at Unsplash
数据科学家:21 世纪最性感的工作。数据是新油。数据正在塑造我们看待世界的方式。在一个人的头脑中隆隆作响的短语让你想知道你在选择学术专业或职业生涯时是否做出了最好的决定。我的专业不需要编码技能’。不需要学习如何开发软件’。如果我知道如何编码,我会学习计算机科学。在当今高度技术化和竞争激烈的世界中,持续教育和不断自学是保持更新和合格的关键,在这样一个时代,范式需要被打破。作为一名工业和系统工程师,我想邀请非计算机科学工程师和专业人士开始发展分析和编程技能,分享他们如何帮助我在年轻时提升职业生涯,以及他们也可以给他们带来的优势和好处。
“连接人、技术和业务”
作为一名工业和系统工程师,我的主要目标是充当工程和管理之间的桥梁,以分析并调整流程或创建新流程。我的职责包括确定人员、材料、技术、、信息和能源,以确保流程高效,并确定这些资源如何相互作用才能有效。
工程师喜欢数字,和他们一起工作感觉很舒服
或者至少他们应该这么做。数据和信息隐含和明确地存在于每个工程任务中。然而,从这些数据中获得的有用性、实用性和洞察力可能会被一个人捕获、理解和转换数据的能力所削弱。花点时间来分析下面显示的 DIKW 金字塔。越往上走,台阶的宽度越小;这代表了知识和能力的差距。由于数据本身并不说明任何问题,因此必须以某种方式将其转换为信息,以便更好地理解。但是真正的挑战在于向金字塔的上端跳去。
DIKW Pyramid
数据挖掘、机器学习和深度学习算法(例如线性回归、逻辑回归、k 均值聚类、支持向量机、人工神经网络)的使用主要涉及 DIKW 金字塔上端的步骤。然而,由于您将接触到大量的数据,手动实施它们将变得低效、耗时且无止境。 这就是编程技能发挥其主要作用的地方 。能够将这些算法编码到计算机程序中,将允许您以更快和更有效的方式处理大型和非结构化数据集。然而,开发、训练、测试和验证数学、预测、分类或分析模型(仅举几个例子)只是这些步骤中涉及的部分任务。得出结论、获得洞察力、获得知识和获得智慧是最终目标,也是数据分析师、数据科学家和数据工程师成为公司和组织宝贵资产的原因。这就是强大的分析能力发挥其主要作用的地方。
“传达你的结果和发现与获得它们一样重要(甚至更重要)”
太好了!你开发了一个伟大的算法。你们已经取得了成果和重大发现。下一步是什么?与你的团队交流和分享。乍一想,这可能听起来是整个过程中最简单的任务,但事实是,许多人发现这是最困难的。 少即是多 。你必须能够用一种即使没有很强的统计和编程背景的人也能理解的技术语言,尽可能清晰简洁地交流你的结果和发现。管理者很少会问你获得最终结果的过程,但他们会要求你解释、证明并捍卫你的最终结果。这就是为什么大多数职位招聘都要求候选人同时具备很强的分析和沟通能力。
在我作为一名非计算机科学工程师的整个学术和短暂的职业生涯中,我总结了以下七个个人理由,说明为什么不管你的年龄、大学专业或职业生涯的当前阶段,你都应该开始考虑发展分析和编程技能:
1。它将帮助你加强逻辑思维
写代码需要你进行逻辑思考。你必须考虑从给定的输入到期望的结果的逻辑路径,考虑代码执行过程中的约束、限制和潜在错误。在循环和条件语句中使用逻辑运算符 while loops,可以增强你的逻辑思维和构建有效程序、分析情况和提出解决方案的能力。
2。它将帮助你强化你的系统思维
你会形成一种系统的思维,你会意识到每件事都与每个人相关。团队、部门和部门都相互联系,朝着相同的目标工作,而不是独立工作。在分析问题和提出解决方案时,你必须分析和评估它对整个企业和组织的影响和意义,而不仅仅是对你所在的部门。整体大于部分之和。
3。这将帮助你增强解决问题的能力
在编写代码或开发程序以执行特定任务或解决给定问题时,您必须将其分解成更小的组件。通过更小的组件分析问题会比分析全局更有效;它将帮助你更快地找到问题的根源;这将帮助你看到别人可能看不到的小细节。分而治之。**
4。它将在开发解决方案时激发你的创造力
你会意识到,在大多数情况下,一个给定的问题会有不止一个解决方案。但是,在实施之前,您必须评估和比较每个解决方案的有效性以及可行性程度。有些解决方案需要更多的编码工作,有些则需要更少,有些则需要你扩展现有的知识来编码。在开发解决方案的过程中,你可能会多次改变主意,重新思考所用的方法是否真的解决了问题,寻求反馈并接受建议,这些建议将激发你的创造力,以最有效和高效的方式实现你的目标。
5。这将帮助你更好地理解流程
为了知道你想去哪里,首先你必须明白你的立场。了解被分析流程的当前状态将成为必须做的事情。哪些是当前流程的输入、流程、决策、转换、交流、延迟、错误和结果?谁是这个过程的主要参与者和利益相关者?谁是最终客户?我们想要实现什么?我们离我们想去的地方还有多远?您必须能够在代码开发之前和开发期间回答这些问题,以确保您对正在分析的过程及其要解决的问题有重大的贡献和影响。
6.这会让你在做决定时更有信心
拥有扎实的分析技能,以及强大的统计背景,将有助于您建立更好的决策支持系统,能够评估多种情况,引导您根据给定的约束做出最佳决策。在陈述你的解决方案时,你会自信地用统计和数学支持来证明你的结果,而不仅仅是凭直觉或因为计算机告诉你这样做。
7.它会带你走出你的舒适区
和任何其他新任务一样,你需要克服一个学习曲线。毫无疑问,在旅程的某个时刻,你可能会发现自己陷入困境或挣扎,但是,嘿,有很多在线资源可以帮助你摆脱困境。一旦你越来越深入这个主题,你会发现你认为你知道的越多,你实际上不知道的就越多,这将驱使你的好奇心去扩展你的知识和学习新的东西。有大量的软件包、库、算法、函数、程序、语言和软件用于各种目的。虽然你不必为了成为下一个编程大师而学习所有这些,但是你需要确定哪一个最符合你的目标和你想要达到的结果。
总结想法
没有人会因为年龄太大、太晚或职业生涯太晚而有借口不开始培养分析和编程技能。世界和市场正以前所未有的速度飞速变化。乔布斯的大部分资格都在某种程度上转化为分析和编程技能(或者能够使用特定的计算机程序或软件)。我们应该为机会的到来做好准备。市场不会适应我们的需求,相反,我们才是需要适应市场需求的人。
试试看。运行自己编写的有效代码的感觉是惊人的。
鸣谢
特别感谢 Andrés Hernández-Guitérrez 博士在我的学术生涯中提供的所有明智的建议,以及将我引入编程、数据科学和机器学习的世界。
— —
如果你觉得这篇文章有用,欢迎在 GitHub 上下载我的个人代码。你也可以直接在 rsalaza4@binghamton.edu 给我发邮件,在LinkedIn上找到我。有兴趣了解工程领域的数据分析、数据科学和机器学习应用的更多信息吗?通过访问我的媒体 个人资料 来浏览我以前的文章。感谢阅读。
——罗伯特
为什么我应该关心理解我的模型?
原文:https://towardsdatascience.com/why-should-i-care-about-understanding-my-model-52a8bba2b1d8?source=collection_archive---------14-----------------------
现实世界中的数据科学
深入分析非参数模型、非参数模型所属的系统及其在现实世界中的影响的重要性。
When parametric met non-parametric. (source: pexels.com)
非参数机器学习(ML)模型(例如随机森林、神经网络)是高度灵活但复杂的模型,可以获得比基于回归的方法(例如逻辑、线性、多项式等)等参数模型高得多的精确度。).它们还可以更容易使用,更强大,为不当使用和误解留下更少的空间。但是这些优势是有代价的。与它们的参数模型和线性模型相比,这些模型不能产生可以解释的预测,它们的结构也不能直接可视化,也就是说,它们是不可解释的。所以让我先说:
理解你的模型很重要。算了吧。理解你的模型是很有必要的。
这不是哲学观点。这是一个实用的方法。我将举例说明一些关键原因。
为了正确性(也就是!=精确度)
强大的 ML 模型将适合数据的许多角落和缝隙中的复杂模式,分析师不可能试图直接理解这些模式,因为它们在本质上是组合的。尽管如此,在模型开始在现实世界中进行预测之前,对模型的一般行为、它与数据的交互方式以及错误所在进行某种程度的分析,可以帮助识别数据或与模型的问题。在脸书上提供广告的预测系统中犯错误是一回事,在医院环境中对某人的推荐治疗做出错误的预测可能是致命的。在这篇论文中可以找到一些关于后者可能出现的问题的很好的例子。例如,在 90 年代中期,大量资金投入到各种降低医疗诊断成本的努力中。在一个特定的例子中,目标是预测肺炎患者的死亡概率,以便低风险病例可以作为门诊患者治疗,而高风险人群将被接纳。建立了各种模型来解决这个问题,然后测量曲线下面积(AUC)以及其他指标。一些最准确的方法被证明是神经网络,然后是基于规则的模型,然后是良好的逻辑回归。理解神经网络是不可能的,但是基于规则的模型中的一个规则看起来很可疑:
Has Asthma (x) => Lower Risk (x)
这是违反直觉的。患有肺炎和有哮喘病史的患者处于高风险状态,几乎总是被送入重症监护室接受积极治疗(我自己最近也接种了肺炎疫苗,因为我有哮喘和肺部感染史)。稍加挖掘后发现,有肺炎和哮喘病史的患者被作为高危患者收治,因此得到了明显更好的治疗。因此,他们的预后通常要好得多,该模型了解到患有肺炎的哮喘患者的死亡概率较低(请看图!).这突出了一个关键问题,其中模型可以学习数据中的非预期假象,哪些与问题不一致,以及非参数模型的不透明性(我拒绝使用术语黑盒!)让我们很难确定到底发生了什么。
事实上, LIME (局部可解释模型不可知解释),一种越来越受欢迎的算法的创造者之一,试图解释任何预测者的预测,做了一件伟大的工作,提出了另一个有许多相似之处的例子。他们强调的预测问题是能够从这些图像中区分哈士奇和狼。他们是华盛顿大学的。他们的吉祥物是一只哈士奇。他们希望能够让人们带哈士奇而不是狼来参加体育赛事(自然,我感觉我的宠物狼在这里受到了歧视)。
Which one is a wolf? Or, how to build a great snow detector! (source: pixabay.com)
为了做到这一点,他们决定使用深度学习来训练一个分类器,它能够很好地做到这一点,并向技术人员展示他们的结果,看看他们是否认为该模型可以接受并可以使用。但是,唉,这里面有诡计,他们知道图像分类器学会了一个巧妙的技巧,他们使用的狼的图像都包含雪,而哈士奇的图像不包含雪,分类器将背景作为一个特征,而不是动物本身的特征。他们建造了一个巨大的雪探测器!这样做是为了研究精明的用户(研究生,很可能是博士,有 ML 经验)对准确但有缺陷的模型的接受程度,结果是大约一半的用户接受了该模型(另一半直接或间接指向背景或相关特征,并持怀疑态度)。虽然这项研究规模很小,但它很好地说明了在没有关于模型如何工作的定性信息的情况下可能发生的问题。
在对肺炎患者进行医学诊断的情况下,最终决定逻辑回归是更好的模型,因为与更精确的神经网络模型相关的风险太大。
为了责任和公平。
刑事司法系统是公正的。
我知道这是一个挑衅性的、捅马蜂窝的声明。但我们在谈论机器学习,我只是在利用一个紧张的政治环境。
ProPublica 最近发表的一项研究让我感到震惊,该研究涉及一种在全国范围内使用的算法,用于生成累犯分数(已定罪罪犯再次犯罪的趋势)。
法官、缓刑和假释官越来越多地在预审和量刑中使用这些分数,即所谓的刑事司法系统的“前端”。该研究使用了佛罗里达州一个县的数据,发现分数明显偏向非裔美国人(惊讶?).尽管任何研究都肯定有警告,进行深入审查并得出自己的结论是明智的,但研究发现的几个关键统计数据来自预测累犯时的困惑矩阵。据发现,非裔美国人被告的假阳性率为 45%,而白人被告的假阳性率为 23%。换句话说,将近一半被归类为累犯(再次犯罪)的非洲裔美国人实际上不会,而大约四分之一的白人被告被错误地归类为可能累犯,但没有。这两个数字都很高,分数被官员和法官用作“决策支持系统”的一部分,但近 2 倍的错误率的明显差异令人担忧。第二个指标是假阴性率,即算法识别为没有再次犯罪但最终犯罪的被告,白人被告(48%)明显高于非裔美国人(28%),即白人被告获得无罪推定的机会明显更高。另一方也有公平的论点,创造该算法的公司发表了反驳,可以在这里找到,ProPublica 这里再次反驳。
(source: propublica.org)
尽管如此,这些数字仍然令人不安,并引发了人们对这些工具的道德本质以及对这些模型应该给予多少考虑和研究的巨大担忧。这是一个难题,不仅因为它很难,还因为它关系到什么。模型的创建者花了多大的力气去钻透数据,分析各种角度,模拟并从本质上记录分析?请记住,“种族”不是算法中使用的变量(这将是非法的),遗憾的是,判决委员会目前没有对风险评估中的偏见进行分析。让我们明确一下,潜在的人口统计信息通常在其他特征的数据中表示,需要非常小心地测试这些偏差。在这些情况下,很容易遵守法律条文,但却不遵守其精神。我要问读者这个问题:用一个人上学的地方来决定是否给他们提供贷款公平吗?这不是什么技巧性的问题,这只是技巧性的问题。
为了更好的科学
大约十年前,我之前的创业公司 Skytree 在纽约最大的信用卡公司之一进行概念验证,其中涉及到一个二进制分类问题,数据集有点大,但非常不平衡(正类与负类的比例为 1:1000)。我们使用k-最近邻居(是的,我知道你们中的一些人在想什么)并以分层的方式寻找邻居,也就是为每个班级单独寻找邻居,以解决不平衡问题。该解决方案具有较高的 AUC,但客户端的数据科学家跟踪的另一个指标存在较大误差。分层搜索扭曲了输出概率的规模,对于规模至关重要的应用,如风险(如信用评分、贷款违约),这不是一个可行的解决方案。
(source: pixabay.com)
我们的工程师想出了一个聪明的方法(我们称之为“穴居人”解决方案)来对概率进行后处理,成功了!但是团队中的教授并不满意(我们也不满意,但是…),决定从数学上推导出一个“合适”的解。你瞧,对我们来说幸运的是,这两种解决方案是等价的。
这个故事的寓意是,客户端的数据科学家研究了更深层次的指标,以理解算法设计者没有考虑的模型,正是由于这种数据科学,才有了由数学家设计和实现的重要突破。网-网是更好的科学和更好的模型,可以说是双赢(生命中的稀罕物等等。).
结束语:建立信任!
今天,有更多的工具和技术可以用来更好地理解非参数模型,应该有效地加以利用。同样重要的是,模型构建者不应孤立地看待模型,而应将其视为更广泛系统的重要组成部分。人们不再应该说
我只是一名工程师
当一个人的模型有可能在严重影响人们的生活。
最终,为了我们的科学取得成功,并使 ML 模型的扩散成为现实,预测系统是负责任的,决策路径清晰并有追索权的空间,以及作为机器学习人员,我们需要用理解模型及其在现实世界中的影响的科学来支持构建模型的科学。
所以我再跟你说一遍:了解你的模式是必要的。预测好!
如果你没什么好隐瞒的,为什么还要在乎隐私呢?
原文:https://towardsdatascience.com/why-should-you-care-about-privacy-if-youve-got-nothing-to-hide-2bbe663e6252?source=collection_archive---------16-----------------------
数据隐私
因为你相对不道德
Photo by ev on Unsplash
Y 你永远也猜不到她的许多成就——剑桥大学的博士学位,一本畅销的回忆录——但是在她生命的大部分时间里,塔拉·韦斯特多弗的环境一点也不利于智力探索。当我们的父母兴高采烈地撞见我们在读课本时,塔拉惩罚了她。
在爱达荷州偏远地区的一个生存主义家庭中长大,她的童年是与世隔绝和体力劳动的。她的父亲是一个激进的宗教阴谋论者,她被严格禁止上学或与其他孩子交流。相反,她的青春都花在了家庭危险的废品场,分拣废品。无论何时发生事故——无论是金属棒穿过她的腿还是三度烧伤——她母亲的草药是唯一的治疗方法,因为医生也被禁止。
然而,最重要的是,这个家庭对书籍的审查——当然《圣经》除外——让年轻的塔拉难以忍受。她抑制不住自己好奇的心,反抗专横的父亲,开始偷偷地吞食文学。被书页赋予生命的野生世界让她着迷得无以复加,因为它们与她自己限制性的存在如此不同。她经常躲在地下室的沙发后面看书。或者在晚上,一本书真的推到她的脸上,因为月光是她唯一的照明源。
风险得到了回报。十六岁时,没有受过任何正规教育的她通过了大学入学考试,逃离了她家这座名副其实的监狱。
ara Westover 与她童年时代的立法者——她的父母——的亲密个人斗争在我们社会的大尺度上反映了整个历史。在人类道德和伦理发展的每一个值得注意的时刻,对明天有着非凡远见的小社区不可避免地与他们今天的普遍规则发生冲突。
想想一小撮理想主义者反抗专制的罗马帝国传播基督教。或者许多科学家为了揭示我们宇宙的真实运作而被烧死。或者外科医生冒着失去生计的危险闯入停尸房研究人体解剖,而当时解剖是被禁止的。也不要忘记,美国本身就是在一场叛乱中诞生的,独立宣言是对英国法律的公然违反。
当然,历史并没有结束——即使是现在,人们也在不断打破腐朽的现状,因为他们的价值观领先于法律。也许是一对同性恋情侣在一个暴虐的政权下表达爱意。也许是一个儿子在一个认为安乐死等同于谋杀的状态下,帮助父亲有尊严地离开这个世界。我敢说,也许这是一个陷入困境的年轻女子最终使用仍然非法的迷幻药战胜了她的抑郁症。
教训很简单:我们的社会朝着一个更加公正的世界前进,却因其敢于反抗自身不公正的法律而受到削弱。
优化理论家——研究一个系统,无论是整个全球经济还是一个小蚁群,达到最佳状态的条件的科学家——称之为探索-开发权衡。这是一个古老的难题,如何权衡探索新的可能性和利用旧的确定性。
过分强调探索本身就是沉溺于有害的理想主义。结果是:顽固地拒绝接受任何宪法,让位于无政府状态。我们可以在法国大革命期间最清楚地看到过度革命热情的严重后果,反叛者像一对在柏油路上旋转的轮胎一样燃烧自己。
法国资产阶级终于流血摆脱了压迫。好心但致命的优柔寡断的路易·VXI,他浮夸的妻子玛丽·安托瓦内特,以及他们宫廷的大部分人都被斩首。君主制被推翻后,是时候建立一个来之不易的共和国了。但是他们不能。这种打击将持续一年的大部分时间,因为任何站出来提出新的、更公平的宪法的人都被致命的堂吉诃德式的大众视为暴君,并被立即处决。每一项提议的法律,无论多么公正,都没有达到革命者模糊的理想。一个处于完全探索模式的社会——一个混乱的社会。
另一方面,对既定秩序的严格利用——不允许背离法律以最大限度地保持一致——不会给道德进步留下任何空间。一个法律从未被违反的世界是一个我们的价值观从未受到挑战的世界,因为前者反映并永远滞后于后者。
这样的世界将是一个隐性压迫的世界。如果不是在空间,那么肯定是在时间,因为我们会约束后代遵守他们祖先的不完整的规则。正如我们回顾过去,厌恶罗马人的野蛮习俗——厌女症、奴隶制、被斗兽场完美概括的普遍暴行——我们的后代会回顾我们,憎恶我们目前忽视的司法系统的不公正。
因此,很明显,通往公平社会的道路是通过中间路线,而不是不稳定的极端路线。一种主张在实施严格的指导方针和将它们边缘化之间保持谨慎平衡的观点。从这个角度看,隐性犯罪的存在不是制度上的缺陷,而是一种特征。
只有在一个允许违反规则和强制执行规则之间有所松懈的社会里,对既定秩序的必要违反才是可行的。偶尔,不当行为必须不受惩罚,这既是为了让人们保持勇气来测试我们目前原则的界限,也是为了让这种富有成效的不安有机会被忽视足够长的时间,以获得动力并推动我们前进。
这一本质缺陷的基础是隐私。
如果没有机会秘密行事,塔拉·威斯多佛仍然会在垃圾堆里寻找废金属。如果我们被剥夺了不公平的规则可以被偷偷打破而不被迫害的希望,我们就没有变革的催化剂。事实上,往往是那些最明显受到压迫的人,那些知道他们在实践中,而不仅仅是在理论上为之奋斗的人——被迫分开的同性恋者,一名因堕胎而入狱的强奸受害者——他们要求解放的呼声最高。
意识到社会进步和人民隐私之间的密切关系,开国元勋们发誓将后者的权利融入他们新生国家的结构中。整部宪法的一个共同主题是,执法工作被故意变得更难,而不是更容易,为改革派叛乱的酝酿提供了急需的空间。《权利法案》概述的十项修正案中有整整一半是关于故意制造低效率和阻碍州政府行使权力和进行监督的能力。
这一点在第四条中特别清楚,该条禁止不合理的搜查和扣押,只允许“基于可能的原因……并特别说明要搜查的地方,要扣押的人或物。”正是由于这一修正案,一个明显有罪的罪犯有时会逍遥法外,因为他的凶器只是在一次无根据的搜查中发现的,因此不能作为证据。如果你认为这是不公平的,考虑一下这也是你不能监禁一个丈夫的原因,如果在一个不相关的 911 电话中,警察发现了他为治疗他妻子的癫痫而种植的大麻植物。
日复一日,我们正在失去不被人注意的基本自由。我们的隐私权被如此公然地侵犯,以至于引起人们对它的关注是一种平庸的行为。众所周知,我们的“私人”信息通过社交网络与几乎任何人共享,我们的身体对话被虚拟助理记录,我们的家被我们的网络摄像头窥视。全面监控。
现在,当然,在目前,持续的监控并没有被广泛的起诉所补充。当我们抽大麻的私人视频偷偷从我们的手机上传到国家安全局的数据库时,我们的大门不太可能被踢开。但是,通过允许我们的隐私不断被侵犯,我们使得这种可能性非常容易发生。这就好像我们允许警察永久驻扎在我们的房子里,不停地监视我们的一举一动。目前,他们奉命对我们的个人不端行为不予理会,但一个更严厉的回应只是一个政治家的签名。
我们永远不知道什么时候一个煽动性的事件——9/11 类型,群众被愤怒弄得失去理性——可能会引发这样的反应。在动荡时期做出冲动的、有严重缺陷的政治决策的先例比比皆是,但也许最恰当的例子是美国不光彩地入侵伊拉克。当然,如果我们允许自己基于“私人”信息受到普遍压迫,就不会有随后的运动能够推翻这一短视的裁决,因为历史上为他们提供便利的地下组织将会浮出水面。
更重要的是,没有人提醒我们失去的自由,我们很快就会完全忘记它们。不知道任何更好的,社会将默认为盲目顺从,完全满足于它的停滞。从这个意义上说,它不太像奥威尔的《1984》,在那里暴政是公开和生硬的,而更像赫胥黎的《勇敢的新世界》,在那里征服和自由之间的界限是模糊和主观的。
隐私问题很像气候变化问题,我们疏忽的大部分后果都存在于未来。要解决这两个问题,我们需要首先承认我们已经入不敷出,然后为了不那么不稳定的明天,牺牲掉许多我们今天认为理所当然的舒适。
我们必须摒弃的便利之一是我们互联网平台的免费性质。正是谷歌和脸书目前基于广告的商业模式,促使他们辜负了用户的信任。这样一个系统预示着数字巨兽的成功取决于他们瞄准广告的能力,这反过来又使他们的收入与他们能够测量用户倾向的精确度成正比。
因此,这在很大程度上是我们自己吝啬态度的错——我们不愿意为我们消费的服务明确付费——这导致了我们个人数据的大规模收集。如果我们集体接受一个搜索引擎和社交网络在基于订阅的模式下运行的世界,他们在决定是否监视我们之前所做的风险回报计算无疑会对我们有利。正如剧作家伯德·布莱克特所说,“先有一个饱肚子,然后才是道德。”
赢回我们隐私之战的第二个因果关系是人工智能和机器人等数据饥渴领域目前的发展速度。像亚马逊 Alexa 和谷歌 Duplex 这样的虚拟助手能够传达如此惊人的真实性,只是因为我们允许他们的开发者在我们家中假想的隐私对话中搭载他们的发明。
这种安排本身没有什么本质上的错误,但我们需要完全确保用于训练这些机器学习模型的个人数据永远不会被存储或分析。我们的重点应该是开发系统,通过加密和操作管道的巧妙结合,使我们的数据免受窥探(以数学上可证明的方式),而不损害其对算法开发的可用性。事实上,这样的技术已经存在了,但是他们的部署是缺乏的,很大程度上是由于有限的公众压力。
我这是问题的微妙本质,原因——允许我们自己在当前的个人层面上被监控——和结果——未来社会层面上的道德停滞——之间的反差使得隐私成为我们这个时代的一个定义性问题。由于我们无法超越自己和眼前的事物,我们无法从个人原因走到客观结果。所以我们半途而废,错误地认为隐私只与有罪和可疑的人有关。
就拿我来说,我过去常常在镇上四处宣称:“我不在乎隐私,因为我没有什么可隐瞒的。”我一点也不知道,我看起来就像是在宣布:“我不在乎言论自由,因为我无话可说!”
你为什么要搬到德克萨斯州的普莱诺?
原文:https://towardsdatascience.com/why-should-you-move-to-plano-texas-ec69ad08be3d?source=collection_archive---------20-----------------------
使用 ARIMA 模型预测房价——并知道何时相信这些数字
在之前的一篇博客文章中,我讨论了能够预测房子价值的潜在好处(主要的好处是能够积累可观的个人财富)。
作为一个成年后大部分时间都受伦敦租赁市场支配的人,我不习惯支持房地产投机生意。然而,对于数据科学家来说,预测房价是一个有趣的应用,它让我们有机会探索预测技术、它们的优势和它们的局限性。
注意——包含该博客中所有数据和分析的 Github repo 可以在这里找到。我大多使用标准库(Pandas,Matplotlib 等。)但是还有一些更奇特的功能,比如用于地图视觉效果的 Geopandas,以及 Statsmodels 的 ARIMA 功能,这些功能可能会很有意思。
Take your pick… (image: Pexels)
任务
我们分析的目的看似简单——根据美国房地产市场的历史数据,如果我们的目标是在十年内获得尽可能大的投资回报,我们会建议现在在哪五个地区购买房产?
我们从使用来自 Zillow 的数据生成的数据集开始。这一数据相对来说比较精确,覆盖了美国 14,103 个“地区”。对于每个地区,我们得到一些基本信息(城市、大都市地区、州等。)以及该地区从 1996 年 4 月到 2018 年 4 月的每月房价中位数。
每个州都出现在数据集中,但是,正如我们所料,我们有更多来自人口更多的州的地区(加利福尼亚、德克萨斯、纽约、佛罗里达)。
Heatmap of the number of regions in dataset, by state
诱惑可能是直接投入预测。但是,数据的某些属性会显著影响我们处理和解释结果的方式。
美国房地产市场
你需要在过去十年左右的时间里一直住在山洞里,才知道美国房地产市场最近有些波动。
事实上,在金融危机期间(在本分析中定义为 2007 年 4 月至 2012 年 4 月之间的几个月),投资一个洞穴可能比投资一套亚利桑那州的公寓或佛罗里达州的公寓要好。在此期间,除了三个州之外,所有地区的价格增长中值都是负数,受影响最严重地区的许多房屋价值损失超过一半。
然而,如果我们再看一下 2012 年以来的情况,我们会发现,与前五年形成鲜明对比的是,所有国家的平均增长率都有所上升。我们还看到,在危机中受影响最严重的州(内华达、佛罗里达、亚利桑那和加利福尼亚)已经成为增长最快的州之一。
当我们开始拟合预测模型时,这些都是非常重要的背景:
- 我们不应该使用完整的历史数据来训练我们的模型。金融危机对时间序列的形态产生了实质性影响,但(我们只能希望)是一个反常的外生事件。如果我们不希望类似的事情再次发生,那么我们就不应该让我们的模型根据那个时期的数据来训练自己。因此,我们应该关注 2012 年 4 月以来的价格数据…
- …但是,采用这种方法会带来自身的问题。通过只使用过去六年的数据,一个模型可能会假设像内华达州和佛罗里达州这样的地区是肯定的赌注,并热情地建议我们在那里投资。当然,我们知道在这些情况下的增长只是从严重的衰退中复苏。在任何情况下,我们都应该谨慎投资于那些一旦发生不可预见的经济冲击就有可能贬值一半的地区。
这是一个基本的例子,说明盲目地向数据集扔模型(不管有多复杂)只能让你走到这一步。如果可能的话,应该首先运用一些人类常识和批判性思维。
为此,我们绘制了所有地区的散点图,水平方向是最近的价格增长,垂直方向是金融危机期间的价格增长。
Bubble size denotes the relative value of houses in each region as at April 2018
通过观察这两项指标均高于平均水平的地区,我们可以找出那些在 2007 年至 2012 年间经受住了金融风暴(至少表现出一定的抵御经济冲击的能力)并在未来几年拥有强劲增长潜力的地区。
因此,这 1737 个增长区域都是我们原则上可以放心推荐给投资者的区域。事实上,通过将这些地区 2007 年 4 月的价格指数化,我们发现至少自 1996 年以来,这些地区的表现优于其他地区。
有趣的是,我们也看到导致金融危机(2003 年至 2007 年)的增长实际上更慢。这支持了一种观点,即这些地区的“基本面”更强,它们的房价没有因次级贷款而过度膨胀。
模特们
现在,我们已经缩小了数据集的时间范围和区域范围,我们可以开始考虑对数据进行建模以生成预测。我们可以使用几种不同类型的模型,选择正确的模型取决于数据的特征。
1)数据是静态的吗?
简而言之,平稳时间序列的均值、方差和协方差(即,如果数据是季节性的,则周期的规律性)随着时间的推移保持不变(或者,如果您喜欢,平稳)。**
目测我们的数据表明,这些条件中至少有一个不满足——平均房价或多或少是随着时间的推移而上涨的(它肯定不是恒定的)。
我们可以使用迪基-富勒测试从数学上证明这一点。如果我们使用 Python,那么我们可以从 Statsmodels 包中导入一个现成的函数。
*p-value for all data = 0.587*
注意,Dickey-Fuller 本质上是一个假设检验,其中的零假设是数据不是平稳的。因此,我们想要一个低于经典值 0.05 的 p 值来拒绝这一点,并显示数据是稳定的。
很明显,在这种情况下,p 值有一段距离。缺乏平稳性立即排除了一些更简单模型的使用,如白噪声、随机游走,或基本自动回归。
2)数据是季节性的吗?
季节性是一个简单的概念,它表明数据值不仅取决于时间序列的总体时间框架,还取决于该时间框架内的定期时段。
例如,每月的航空乘客数量将是季节性的,尽管下图中的平均趋势明显增加,但乘客数量也取决于季节,人数在夏季增加,在冬季再次下降。
我们可以通过调查自相关来测试季节性。为此,我们复制时间序列,将其向后移动 x 个周期,并测试移动后的数据与原始时间序列之间的相关性。例如,如果月度数据在年度背景下是季节性的(比如,谷歌搜索“饮食”的数量,这往往在 1 月份特别受欢迎),那么 12 个月的滞后应该会产生高水平的相关性。
An example of strong autocorrelation — we move the orange line 12 months backwards, and see how well it correlates with the blue line (which is, of course, the same data, just shifted by 12 months).
令人高兴的是,有 Statsmodels 函数可以生成一个图表,同时显示不同滞后期的相关性。
正如我们所看到的,房价与一个时期的滞后有很强的自相关性,但除此之外完全没有。如果我们有季节性数据,我们预计会在,例如, x= 12,看到一个峰值。我们没有观察到任何这样的峰值,这告诉我们,我们的数据不是季节性的,只是某个月的房价往往与上个月的价格非常相似。
论 ARIMA 造型
上面的平稳性和季节性测试表明,我们有权利在这个练习中使用 ARIMA 模型。在这篇博客中,我不打算过多地谈论 ARIMA 的数学(看这里有一个比我能给自己的更好的解释)。
简而言之,ARIMA 模型可以分为三个主要部分:
- AR :自回归。模型的一部分,使用观察值和 p 滞后观察值之间的依赖关系。**
- 一 : 综合。使用原始观测值的差分(例如,从之前的观测值 d 周期中减去一个观测值)以使时间序列平稳。注意— d 如果数据已经是静态的,可能等于 0,在这种情况下我们不做差分。
- 马 : 移动平均线。模型的一部分,使用观察值和移动平均模型残差之间的相关性,该模型应用于 q 滞后观察值。
因此,我们说 ARIMA 模型的阶数为(p,d,q) — p 是自回归项的数量, d 是我们求差的周期数量, q 是移动平均项的数量。
具有相同阶数的两个 ARIMA 模型可以具有不同的系数,因此是完全不同的模型。事实上,为每个地区创建一个定制的模型以最大限度地提高我们预测的准确性是可取的。然而,由于我们有大约 1,737 个时间序列(每个“增长区域”一个),我们应该创建一些函数来自动化模型构建过程。
首先,我们定义一个函数,给定一个地区的时间序列数据,将返回该地区的“最佳”ARIMA 模型。这是我们用来预测该地区未来房价的模型。为此,我们可以依靠 Statsmodels 的 ARIMA 建模函数,它采用两个关键输入:
- 一些时间序列数据
- 所需的模型阶数,即我们希望用于(p,d,q)的数字
然后,它输出最适合指定阶数的数据的模型(即系数集)。因此,我们需要找出哪一个阶能够为给定区域生成最佳模型。为此,我们可以采取简单的“网格搜索”方法,生成潜在“订单”列表…
**[(0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), etc...]**
…然后遍历这些模型,并比较 Statsmodels 为每个模型生成的模型。
有几种方法可以进行比较。在这种情况下,我们进行训练/测试分割,使用前 90%的数据(比如,截至 2017 年 1 月的价格)拟合模型的每个版本,然后计算每个模型对最后 10%的预测的均方根误差(RSME) 。然后,我们采用其预测具有最低(即最佳)RSME 的模型。
注意——另一种方法可能是比较模型的AIC或BIC
明确地说,我们用这个函数同时优化了两件事;
- ARIMA 模型的阶(p,d,q)
- 模型的系数
在此之后,创建第二个函数来遍历我们的每个“增长区域”是相当简单的,并使用上述函数来输出每个区域的最佳模型。让我们的 arima_selection 函数将 arima 模型本身作为一个对象返回的好处是,我们可以存储它并在以后调用它。
实际上,让我们假设我们已经将所有 1737 个模型存储在熊猫数据帧的列中(熊猫数据帧非常乐意存储几乎任何你可以扔向它的对象)。
A Pandas dataframe, with model objects stored in the ‘FittedModel’ column
然后我们可以使用 Pandas 的映射函数调用模型对象方法,并将结果存储为新列。
例如,假设我想计算并存储每个模型的 AIC。然后我可以做以下事情:
**df[‘ModelAIC’] = df[‘FittedModel’].map(lambda x: x.aic)**
这将在数据帧中生成一个新列:
当然,我们可以使用这种技术提取关于每个模型的大量信息,使用 Statsmodels 内置的许多方法。这些方法的完整列表可以在这里找到,但是我们将在本练习中使用的关键方法是:
- T1。预测() —使用模型预测时间序列的下 n 个值
- 。conf_int() —给出预测的范围(基于定义的置信区间)
- 。arparams() —告诉我们自动回归参数的模型系数是什么
- 。maparams() —告诉我们移动平均参数的模型系数是什么
- 。pvalues() —给我们参数的 t-stat 的双尾 p 值
这些额外的统计数据非常有用,因为我们可以使用它们来进一步过滤我们的区域(例如,我们可以排除模型参数具有统计上不显著的 p 值的任何区域)。
我们还注意到,一些预测的范围非常广(如。conf_int()方法)。例如,我们的模型预测,10 年后,科罗拉多州普韦布洛县的回报率可能在 21%到 766%之间。
虽然这可能对风险偏好强烈的投资者有吸引力,但这种不确定的回报并不会给大多数人带来明智的建议。在选择推荐的最终地区时,我们需要平衡增长潜力和增长不确定性。
为此,我们可以在另一个散点图上比较各个区域,在水平方向上显示预测价格增长,在垂直方向上显示预测范围的宽度(占预测值的百分比)。
通过这种方式,我们可以隔离出潜在增长强劲、预测值范围相对较窄的地区,从而将风险降至最低。为了做到这一点,我们选择了绿色阴影区域中最右边的五个区域。
结果呢
我们选择的五个地区相当多样化,并带来了一些惊喜——加利福尼亚州的帕洛阿尔托可能看起来是一个相对明显的房地产热点,但德克萨斯州的普莱诺不太可能引起投资者的注意。
假设我们在这五个地区平均投资 100 万美元,我们预计我们的投资组合价值将在十年内翻一番以上。我们有 95%的把握预测,该投资组合的价值将在 178 万美元至 243 万美元之间
查看此“推荐”投资组合与由五个预测增长最高的地区(不考虑风险,即“高增长”地区)组成的不太细微的投资组合的对比。
虽然我们的预测表明,到 2028 年,这种“高增长”投资组合的价值可能达到 454 万美元(回报率超过 350%,远高于“推荐”投资组合的 110%),但它也有可能在此期间损失 86%的价值;这是有闲钱的风险爱好者可能会去做的事情,但对普通投资者来说不是明智的建议。
所以,如果你确实在寻找一个新的美国社区,为什么不去德克萨斯州的普莱诺试试呢?据说这是一个非常适合居住的城市。而且,如果 ARIMA 模型是可信的,你的投资可能会获得可观的回报。
感谢你一直读到博客的结尾!我很乐意听到任何关于上述分析的评论,或者这篇文章涉及的任何概念。欢迎在下面留言,或者通过 LinkedIn 联系我。
为什么软件工程过程和工具不适用于机器学习
原文:https://towardsdatascience.com/why-software-engineering-processes-and-tools-dont-work-for-machine-learning-975cc774888c?source=collection_archive---------20-----------------------
作者:Niko Laskaris,Comet.ml 数据科学家
“人工智能是新的电力。”至少,这是吴恩达在今年的亚马逊火星会议上提出的建议。在他的主题演讲中,Ng 讨论了人工智能(AI)的快速增长——它稳步进入一个又一个行业;人工智能突破、技术或恐惧每天都在头条新闻中无情地出现;巨额投资,既来自寻求现代化的老牌企业(见:索尼,几周前),也来自乘着专注于人工智能的创始人的浪潮空降到市场的风险投资者。
“人工智能是下一个重大变革,”Ng 坚持认为,我们正在观察这场变革的展开。
虽然人工智能可能是新的电力(作为一名彗星的数据科学家,我不需要太多的说服力),但该领域要实现这一潜力仍面临重大挑战。在这篇博文中,我将谈论为什么数据科学家和团队不能依赖软件工程团队在过去 20 年中一直用于机器学习的工具和过程 (ML)。
对软件工程的工具和过程的依赖是有意义的——数据科学和软件工程都是以代码为主要工具的学科。然而数据科学团队所做的与软件工程团队所做的完全不同。考察这两个学科之间的核心差异是一个有益的练习,可以澄清我们应该如何考虑构建我们的工具和过程来进行人工智能。
在 Comet,我们相信采用专门为人工智能设计的工具和流程将有助于从业者开启并实现 Ng 所说的革命性变革。
不同的学科,不同的过程
软件工程是一门学科,从广义上讲,它的目标是设计和实现计算机可以执行的程序,以实现定义的功能。假设软件程序的输入在预期的(或约束的)输入范围内,它的行为是可知的。在 2015 年 ICML 的一次演讲中,Leon Bottou 很好地阐述了这一点:在软件工程中,一个算法或程序可以被证明是正确的,在某种意义上,给定关于输入的特定假设,当算法或程序终止时,某些属性将为真。
软件程序的可证明的正确性塑造了我们为进行软件工程而构建的工具和过程。考虑从可证明的正确性得出的软件编程的一个必然特征:如果一个程序对于某些输入值是可证明正确的,那么该程序包含对于那些输入值也是可证明正确的子程序。这就是为什么像敏捷这样的工程过程,从广义上讲,对软件团队来说是成功的和多产的。将这些项目分解成子任务是可行的。大多数瀑布和 scrum 实现也包括子任务。
我们看到许多数据科学团队使用与这些软件方法相同或大致相似的工作流程。不幸的是,它们不太好用。原因?软件工程可证明的正确性并没有延伸到 AI 和机器学习。在(监督的)机器学习中,我们对我们建立的模型的唯一保证是,如果训练集是来自某个分布的 iid (独立且同分布)样本,那么来自同一分布的另一个 iid 样本的性能将接近训练集的性能。因为不确定性是机器学习的固有属性,子任务可能会导致不可预见的下游影响。
为什么不确定性是机器学习固有的?
部分答案在于这样一个事实,即(a)我们感兴趣的问题和(b)机器学习解决方案(自动驾驶汽车、物体识别、标记图像和生成语言模型,仅举几个例子)的问题都没有明确的可重复的数学或编程规范。为了检测模式并生成预测,机器学习系统会输入大量数据,而不是规范。换句话说,机器学习的目的是创建一个统计代理,可以作为这些任务之一的规范。我们希望我们收集的数据是真实世界分布的代表性子样本,但实际上我们无法确切知道这个条件满足得有多好。最后,我们使用的算法和模型架构非常复杂,复杂到我们无法总是将它们分解成子模型来准确理解正在发生的事情。
从这个描述中,机器学习系统的可知性的障碍应该是显而易见的。适合机器学习的问题类型的固有特点是缺乏明确的数学规范。我们在缺乏规范的情况下使用的统计代理正在积累大量的环境数据,我们希望是独立的和有代表性的。我们用来从这些收集的数据中提取模式的模型非常复杂,我们无法可靠地将它们分开并准确理解它们是如何工作的。我在 Comet 的同事 Dhruv Nair 写了一个关于机器学习中的不确定性的三部分系列(这里有一个链接指向第一部分的),如果你想更深入地了解这个主题的话。
然后,考虑一下机器学习项目中使用的敏捷方法的含义。我们不可能希望将机器学习任务分解为个子任务,作为某个更大的 sprint 的一部分来处理,然后像乐高积木一样拼凑成一个完整的产品、平台或功能,因为我们无法可靠地预测子模型或模型本身将如何运行。
Ng 在 re:MARS 上也讨论了这个话题。他透露了他的团队如何采用专门为 ML 设计的工作流程系统: 1 天冲刺,结构如下:
- 每天构建模型和编写代码
- 设置培训并通宵运行实验
- 早上分析结果,然后…
- 重复
Ng 的一天冲刺方法论反映了对于理解和设计实践机器学习的团队至关重要的东西:它是一门内在的实验科学。因为正在建立的系统缺乏明确的规范,因为数据收集是一门不完善的科学,因为机器学习模型非常复杂,实验是必要的。相对于围绕几周的冲刺来构建团队过程,快速测试许多不同的架构、特性工程选择和优化方法,直到开始出现什么可行什么不可行的粗略图像,通常更有成效。1 天冲刺允许团队快速行动,在短时间内测试许多假设,并开始围绕建模任务建立直觉和知识。
ML 工具:实验管理
假设你采用了吴恩达的一天冲刺法或类似的方法(,你应该)。您正在设置新的超参数,调整您的功能选择,并每晚运行实验。您使用什么工具来跟踪每次模型培训的决策?你如何比较实验来了解不同的配置是如何工作的?你如何与同事分享实验?你的经理或同事能可靠地重现你昨天做的实验吗?
除了过程,你用来做机器学习的工具也很重要。在 Comet,我们的使命是通过提供一个工具来帮助公司从机器学习中提取商业价值。我们采访的大多数数据科学团队都坚持使用 git、电子邮件和(信不信由你)电子表格的组合来记录每个实验的所有工件。
考虑一个建模任务,其中您跟踪 20 个超参数、10 个度量、几十个架构和特性工程技术,同时快速迭代并每天运行几十个模型。手动跟踪所有这些工件会变得非常乏味。构建一个好的 ML 模型常常类似于用 50 个旋钮调谐一台收音机。如果您不跟踪您尝试过的所有配置,在您的建模空间中寻找信号的组合复杂性会变得很麻烦。
我们基于这些需求(以及我们自己在谷歌、IBM 以及作为哥伦比亚大学和耶鲁大学研究小组的一部分从事数据科学和机器学习工作时的需求)构建了 Comet。每次你训练一个模型的时候,应该有的东西来捕获你实验的所有工件,并把它们保存在某个中央账本中,在那里你可以查找、比较和过滤你(或你的团队)的所有工作。Comet 的建立就是为了给机器学习的实践者提供这个功能。
测量工作流效率是一件众所周知困难的事情,但是我们的用户平均报告说使用 Comet 节省了 20-30%的时间(注:Comet 对个人和研究人员是免费的,你可以在这里注册)。这还没有考虑到独特的见解和知识,这些见解和知识来自对超参数空间的视觉理解、实时度量跟踪、团队范围的协作和实验比较等事物的见解。获取这些知识可以节省时间,或许更重要的是,能够构建更好的模型。
展望未来
人们很容易忽略关于 ML 工具和过程的问题。在一个负责自动驾驶汽车、语音助手、面部识别和许多更具开创性的技术的领域,人们可能会被原谅跳入自己构建这些工具的争论中,而不考虑如何最好地构建它们。
如果你确信软件工程栈对于人工智能来说足够好,你将不会被证明是绝对正确或错误的。毕竟这是一个由不确定性定义的领域。但也许最好用数据科学家考虑建模任务的方式来考虑这个问题:可能的未来的概率分布是什么?可能性大还是小?像人工智能这样强大和有前途的领域将继续依赖于为不同学科建立的工具和过程,或者新的工具和过程将出现,以最大限度地赋予从业者权力?
如果你对这些 ML 工具很好奇或者有什么疑问,可以随时联系我niko @ comet . ML。
补充阅读
关于机器学习和软件工程区别的博客:
- 关于 ML vs 软件工程的 Futurice 博客
- KD 掘金博客 ML vs 软件工程
- Concur Labs 关于 ML vs 软件工程的博客
- 微软关于构建 ML 团队流程的案例研究
- 利昂·博图 2015 年 ICML 演讲幻灯片
原载于 2019 年 12 月 4 日https://www . comet . ml。
为什么基于声谱图的 vgg 很烂?
原文:https://towardsdatascience.com/why-spectrogram-based-vggs-suck-36ca9b5b0b40?source=collection_archive---------18-----------------------
我:vgg 很烂,因为它们的计算效率很低,还因为它们是对计算机视觉架构的幼稚采用。
网上随便一个人:乔迪,你可能错了。人们大量使用 vgg!
不需要更多的介绍,这一系列的帖子是关于:我想分享我对这场讨论的诚实想法,因为思考计算机视觉深度学习架构在音频领域的作用。
- 帖子一:为什么基于声谱图的 vgg 很烂?【本帖】
- 帖子二:为什么基于声谱图的 VGGs 会摇滚?
- 帖子三:基于波形的 VGGs 是怎么回事?
在这些帖子中,我将围绕 VGG 模型进行讨论,这是一种被音频研究人员广泛使用的计算机视觉架构。简而言之,vgg基于一个非常小的过滤器与最大池相结合的深度堆栈(见上面的简化图)。
值得注意的是,这种讨论不仅影响了音乐和音频深度学习研究人员,也挑战了语音社区——语音社区似乎只关心使用计算机视觉架构的集合来减少 WER 。
为什么我不喜欢基于声谱图的 vgg?
我总是发现使用计算机视觉架构来解决机器听力问题是非常不令人满意的。
让我觉得特别不舒服的是下面这个假设:光谱图就是图像。然而,图像具有空间意义,而光谱图的轴代表时间和频率。
为了清楚起见,我们是不是应该开始修改我们的简历,加入我们是研究光谱图的计算机视觉研究员?
也就是说,请注意,计算机视觉架构的设计考虑到了它们问题的本质:可以组合几个边来符合一个形状,可以组合几个形状来构建一个鼻子或眼睛,可以进一步组合来绘制一张脸。VGG 模型的设计就是基于这一原理,这就是为什么他们分层堆叠非常小的过滤器——因为这些过滤器可以捕捉第一层中的边缘,可以分层组合来绘制面部。但是音乐/音频游戏是关于组合形状的?我不确定。
自然语言处理研究人员也成功地将领域知识整合到他们的设计中。例如,通常利用一组 k 维单词向量作为输入(每个对应于句子中的第 i 个单词)。考虑到这个输入,并且为了学习n-克,观察这些 CNN 滤波器中的任何一个跨越 n 个单词是很常见的。我不知道有什么 VGG 网可以处理这种输入,因为它基本上没有意义。
更不用说最近由 Hinton 等人提出的胶囊,旨在捕捉图像中物体之间的方位和相对空间关系。通过这种方式,他们可以构建对不同视角更鲁棒的潜在表示——这显然是受人类视觉系统工作方式的启发。
为什么计算机视觉和自然语言研究者都有自己的架构,而音频社区几乎没有? 是否有我们正在错过的研究机会?这是一个死胡同,这就是为什么人们不发表许多音频专用架构?
它不仅仅是关于模型的概念化。我们可能会遇到不必要的计算成本。
考虑到上述原因,计算机视觉架构使用非常小的 CNN 过滤器的堆栈是有意义的。但是,考虑到小的过滤器设置(例如,整个图像),要看到合理的上下文,需要考虑一个相当深的模型-具有许多层,处理几个特征地图。
假设 GPU 中的 VRAM 是有限的,并且 VGGs 中的每个特征地图表示占用相当大的空间,那么尽可能地提高内存效率似乎并不是一个坏主意。GPU 中的 VRAM 是我们的小(也是贵)宝!
现在让我们考虑一下音频的情况,其中一个相关的线索是音色(沿声谱图的纵轴表示)。如何在小型 CNN 滤镜设置下捕捉 timbral 轨迹?嗯,尽可能深入。请记住,每层只能扩展一个小的上下文(使用一个小的滤波器和一个小的 max-pool),为了“看到”谱图的整个垂直轴,需要堆叠几层。
然而,具有垂直滤波器的单个 CNN 层已经可以捕获 timbral 轨迹(沿着相对较大的垂直感受野表达),而无需支付深入的存储成本。发生这种情况是因为垂直滤波器已经捕获了重要的东西:音色,并且不需要存储几个层的输出(大型特征地图)来捕获该上下文。不仅如此:利用垂直滤波器的模型所需的计算量远少于 VGG 模型,因为只需运行一个层。
请注意,一个非常简单的信号观察为一个设计提供了信息,该设计使我们的深度学习模型更加有效(在时间和空间复杂性方面)。现在,节省下来的计算能力可以用来构建更具表现力的模型!
最后,值得注意的是最近的研究表明这些带有垂直过滤器的单层 CNN 可以工作得一样好(如果不是更好的话!)比 VGGs。此外,这些垂直滤波器可以被设计成音高不变的——这正是极大地提高了模型的性能。
如果有更高效更简单的音频模型存在,为什么人们还要继续使用 vgg?! 我会在下面的帖子里回答这个问题:为什么要基于声谱图的 VGGs 摇滚?敬请关注。
为什么战略和分析(一起)是人工智能的未来
原文:https://towardsdatascience.com/why-strategy-and-analytics-together-are-the-future-of-ai-6cae4c0d1e67?source=collection_archive---------18-----------------------
…人工智能将如何扼杀数据可视化工具
在我的上一家公司,我领导了我们核心产品的主要数据可视化的开发。这使得我们的产品第一次被我们客户群的高管们所使用,仅仅这一点就大大提高了我们的价格。但有一个问题一直在重复出现:聪明人没有时间或资金来弄清楚如何处理这些报告。他们希望得到一个系统的指导,这个系统比他们看到的更多,可以自动引导他们采取下一步行动。他们想要人工智能,而不是图表。
因此,当我和我的同事们在 18 个月前创办我们最新的公司时,我们说“没有图表,就没有报告”将是我们的座右铭。我们在对买家需求的战略理解上投入了大量时间,并构建了人工智能引擎来支持日常工作。战略和分析的融合是我们仍在进行的一段旅程,但我们迄今为止走过的路让我清楚地看到,在追求人工智能的过程中,战略是分析的平等伙伴。
即使不考虑人工智能,战略和分析也应该已经密不可分了
我认为,未来 25 年最有价值和最具创新性的公司将是那些围绕独特的数据或分析/算法构建其战略和产品的公司。
今天的企业战略需要以数据为基础:数据应该指导战略决策和投资。我还认为,随着时间的推移,建立一个分析飞轮来创造新的创新和客户价值需要成为大多数战略的主要考虑因素。
那么,为什么战略和分析领域的企业领导层不应该是同一个角色呢?这是一个我已经扮演了很多次的联合角色,我看到它越来越受欢迎。
简而言之,分析是新策略。
战略
在之前的一篇文章中,我写道,战略“确定买家、他们的需求/价值池、我们选择的解决需求的机制以及为什么它会有效、我们拥有的独特技能/资产/能力,以及所有这些东西如何结合在一起,以独特的方式满足买家的需求,同时取悦我们的用户。"
要做到这一点,你需要做真正的解决问题的工作。你需要来自市场和客户的真实数据。你需要思考。这需要时间。可能需要一整年的全职团队来保持它的活力、测试和更新。
分析学
如今,将分析作为一项功能来部署并不是非常困难。近年来,工具和知识激增。寻求分析专业知识的公司可以简单地雇佣它。
除非有一个明确的、经过充分测试的用户需求,即一个独特的分析解决方案可以扩展贵公司的自然价值…那么你得到的是没有战略的分析。
分析不是“向仪表板添加饼图”
如今,任何人都可以在他们的平台上添加图表。仪表板无处不在,但用户真正需要的是我们的思想伙伴:“我们如何处理数据?根据数据告诉我现在应该采取的行动。”
分析是一种工具,可以让你将快速的产品反馈循环和网络效应带入到你的产品策略和产品开发中。这不是技术能力。就像其他一切与战略相关的事情一样,这是一项艰巨的解决问题的工作,即基于你已经在使用的核心技能和资产,找到一条通向巨大而有意义的客户价值的道路。
分析和策略将共同推动人工智能的崛起……而像 Tableau 这样的“数据可视化”工具将很快成为附带损害
数据可视化工具在使制作漂亮图表的能力大众化方面做得很好。但是绝大多数用户不知道如何在图表上行动。他们不想登录更多的东西,过滤和探索,然后弄清楚它告诉他们什么,然后弄清楚该怎么做。这种“拉动”方法需要复杂的好奇心。至少在我的经验中,99%的用户都很难与这些视觉效果互动。他们想要的是“我做什么”最简单的答案推给他们。
对我来说,这就是为什么战略(在数据之外思考)和分析是一个强大的组合。
也发表在strategic . blog上,在那里我分享了关于构建基于分析的产品和业务的想法(例如“产品策略”)。本文中提及或参考的任何书籍或其他资源都列在这里。
为什么数据科学的崇高文本比詹妮弗·劳伦斯更热?
原文:https://towardsdatascience.com/why-sublime-text-for-data-science-is-hotter-than-jennifer-lawrence-651afc54d67?source=collection_archive---------8-----------------------
数据科学工具
有些东西你知道你需要,有些东西你不知道你需要。我们将讨论后者
A Sublime Tool
开玩笑,没有比詹妮弗·劳伦斯更热的了。但是既然你在这里,我们继续吧。
对于任何领域的从业者来说,它们和他们使用的工具一样好。数据科学家也不例外。但有时我们甚至不知道我们需要哪些工具,也不知道我们是否需要它们。我们不知道是否有更自然的方式来解决我们面临的问题。我们可以使用像吴恩达的机器学习这样的令人敬畏的 MOOCs 来学习数据科学,但是没有人教这个行业的笨拙工具。这促使我在我的新系列短文中写下了在任何课程中都没有教授的工具和技能— 数据科学工具。诚如其所言:
我们塑造工具,然后工具塑造我们。
在这篇文章中,我将尝试在数据科学的背景下谈论 Sublime 文本编辑器。
崇高的文本是这样一个救生员,我们作为数据科学家甚至没有意识到我们需要它。我们对我们的 Jupyter 笔记本和 R studio 非常满意,所以我们从来没有尝试过使用其他编辑器。
因此,让我试着让你从 Jupyter 笔记本上稍微改变一下,在你的工作流程中集成另一个编辑器。下面我会试着提供一些用例。关于这一点,这些用例并不详尽,在这里只是为了展示功能和 超越 的力量。
1.创建一个字典/列表或其他东西:
有多少次我们希望 从电子邮件文本 中获得的列表中为我们的 Python 代码制作一个列表或字典?我赌了无数次。
我们如何做到这一点?我们在 Excel 中讨价还价,将文本加载到 Excel 中,然后尝试连接操作。对于我们这些使用 Mac 的人来说,这甚至更麻烦,因为 Mac 的 Excel 不如 windows(委婉地说)
因此,例如,如果您有关于州名和州简称的信息,并且您必须为 Python 创建一个字典,那么您最终会在 Excel 中做类似这样的事情。或者你可能会在 pandas 中加载 CSV,然后在 Python 本身中使用它。
How we do it in Excel
以下是你在 Sublime 中如何做同样的事情。看看它看起来有多棒。我们最终得到了一行字的字典。我花了大约 27 秒来做这件事。
我还记得我第一次看到我的一个开发者朋友这么做的时候,我很惊讶。在这方面,我们应该总是向其他领域学习。
Sublime!!!
那么我是怎么做到的呢?
这里是一个循序渐进的思路。您可能想在 Sublime 中获取一些数据,并亲自尝试一下。您最常使用的命令是Cmd+Shift+L
- 使用
Cmd+A
选择 sublime 窗口中的所有文本 Cmd+Shift+L
将光标放在所有行上- 使用带箭头键的
Cmd
和Opt
将这些光标移动到需要的位置。Cmd
有始有终。Opt
一点一点带你走 - 施展你的魔法,写吧。
- 按下
Delete
键将所有内容放在一行中 - 按
Esc
退出多光标模式 - 尽情享受吧!
2.有选择地挑选,做的时候要好看:
Sublime 中另一个我喜欢的功能。我们都在许多文本编辑器中使用过替换功能。这个功能是Find and Replace
加一个转折。
所以,事不宜迟,让我用一个例子来演示一下。假设我们有一个用 Python 写的代码片段,我们想替换一些单词。我们可以用Find and Replace
功能很好地做到这一点。我们会找到并替换每个单词,最终会点击很多次。Sublime 让它变得简单多了。它看起来也令人印象深刻。你看起来知道自己在做什么,这在我看来会给你加分。
Select Only what is needed and work interactively
那我是怎么做到的呢?
- 选择您想要替换的单词
- 多次按下
Cmd+D
,仅选择您想要删除的单词的实例。 - 选择所有单词后,书写新单词
- 仅此而已
Hope I provided you with at least a Nail Gun or maybe more like a Shovel
我关于我所知道的最有效率的编辑之一的帖子到此结束。你可以尝试用 Sublime 做很多事情,但是上面的用例是我认为最有用的。这些简单的命令将使你的工作更有效率,并消除有时占我们工作很大一部分的手工劳动。希望你最终能在工作流程中使用它。相信我,你最终会爱上它的。
让我知道你是否喜欢这篇文章。我将在一系列的帖子中继续写这样的技巧和窍门。此外,是否在媒体上关注我,以获得关于我未来帖子的通知。
PS1: 上面所有的东西也可以在 Mac 上使用完全相同的命令与 Atom 文本编辑器一起工作。
PS2: 对于窗口用户,将 *Cmd*
替换为 *Ctrl*
,将 *Opt*
替换为 *Alt*
以获得相同的功能。
为什么 Swift 可能是深度学习领域的下一个大事件
原文:https://towardsdatascience.com/why-swift-may-be-the-next-big-thing-in-deep-learning-f3f6a638ca72?source=collection_archive---------5-----------------------
如果你对深度学习感兴趣,那么 Swift 是一门你应该开始学习的语言
介绍
如果你对编程感兴趣,当你听到 Swift 时,你可能会想到 iOS 或 MacOS 的应用程序开发。如果你对深度学习感兴趣,那么你一定听说过 Tensorflow 的 Swift(缩写为 S4TF)。然后,你可以问自己:“谷歌为什么要为 Swift 创建一个 TensorFlow 版本?已经有 Python 和 C++的版本;为什么要加另一种语言?”在这篇文章中,我将尝试回答这个问题,并概述为什么你应该仔细遵循 S4TF 以及 Swift 语言本身的原因。这篇文章的目的不是给出非常详细的解释,而是提供一个带有大量链接的概述,这样如果你感兴趣,你就可以去更深入地挖掘。
🧠·斯威夫特背后有强大的支持
T2·克里斯·拉特纳·T3 在苹果公司工作时创造了斯威夫特。现在,克里斯·拉特纳在世界上最好的人工智能研究团队之一的谷歌大脑工作。Swift 语言的创造者现在在一个研究深度学习的实验室工作,这一事实应该告诉你这是一个严肃的项目。
前一段时间,谷歌的人意识到,尽管 Python 是一种优秀的语言,但它有许多难以克服的局限性。TensorFlow 需要一种新的语言,经过长时间的考虑,Swift 被选为候选人。我不会在这里详述,但是那里有一个文档描述了 Python 的缺点,以及考虑过的其他语言,以及如何最终缩小到 Swift。
💪面向 TensorFlow 的 Swift 不仅仅是一个库
TensorFlow 的 Swift 不仅仅是另一种语言的 TF。它本质上是 Swift 语言本身的另一个分支。这意味着 S4TF 不是库;它本身就是一种语言,内置的特性支持 TensorFlow 所需的所有功能。比如 S4TF,里面有非常强大的自动微分系统,这是计算梯度所需的深度学习的基础之一。与 Python 相比,在 Python 中,自动微分并不是语言的核心组成部分。最初作为 S4TF 的一部分开发的一些功能后来被集成到 Swift 语言本身中。
⚡️Swift 速度很快
当我第一次得知 Swift 的运行速度和 C 代码一样快时,我惊呆了。我知道 C 经过了高度优化,允许达到非常高的速度,但这是以微管理内存为代价的,这导致 C 不是内存安全的)。此外,C 语言并不是一门非常好学的语言。
现在,Swift 在数值计算上运行速度和 C 一样快,和没有内存安全问题,和更容易学习。Swift 背后的 LLVM 编译器非常强大,具有非常高效的优化功能,可确保您的代码运行非常快。
📦您可以在 Swift 中使用 Python、C 和 C++代码
由于 Swift for machine learning 正处于非常早期的阶段,这意味着 Swift 的机器学习库并不多。你不用太担心,因为 Swift 有惊人的 Python 互操作性。您只需在 Swift 中导入任何 Python 库,它就能正常工作。同样,您可以将 C 和 C++库导入 Swift(对于 C++,您需要确保头文件是用普通 C 编写的,没有 C++特性)。
综上所述,如果你需要特定的功能,但在 Swift 中还没有实现,可以导入相应的 Python、C 或 C++包。印象深刻!
⚙️·斯威夫特可以去很低的地方
如果您曾经使用过 TensorFlow,很可能是通过 Python 包完成的。在引擎盖下,Python 版本的 TensorFlow 库下面有 C 代码。所以当你调用 TensorFlow 中的任何函数时,在某种程度上你会碰到一些 C 代码。这意味着你能检查源代码的程度是有限的。例如,如果你想知道卷积是如何实现的,你将看不到 Python 代码,因为那是用 c 实现的。
在 Swift,这是不同的。克里斯·拉特纳称 Swift 为“LLVM[汇编语言]的语法糖”。这意味着本质上,Swift 非常靠近硬件,中间没有用 C 编写的其他代码层。这也意味着 Swift 代码非常快,如上所述。作为开发人员,这一切使你能够从很高的层次到很低的层次检查代码,而不需要进入 c 语言。
📈下一步是什么
Swift 只是谷歌深度学习创新的一部分。还有一个非常密切相关的组成部分:,代表多层次中间代表制。MLIR 将成为谷歌的统一编译器基础设施,允许用 Swift(或任何其他支持的语言)编写代码,并将其编译到任何支持的硬件上。目前,针对不同目标硬件的编译器多如牛毛,但 MLIR 将改变这种情况,不仅允许代码重用,还允许编写定制的编译器低级组件。它还将允许研究人员应用机器学习来优化低级算法:
当 MLIR 作为 ML 的编译器时,我们也看到它在编译器中使用机器学习技术!这一点尤其重要,因为开发数值库的工程师不能以与 ML 模型或硬件多样化相同的速度扩展。
想象一下,能够使用深度学习来帮助优化数据上的低级内存平铺算法(类似于 Halide 试图完成的任务)。此外,这只是机器学习在编译器中的开始和其他创造性应用!
摘要
如果你对深度学习感兴趣,那么 Swift 是你应该开始学习的一门语言。与 Python 相比,它带来了许多优势。谷歌正在大力投资使 Swift 成为其 TensorFlow ML 基础设施的关键组成部分,Swift 很有可能成为深度学习的语言。因此,尽早参与 Swift 将为您带来先发优势。
原发表于https://pechyonkin . me。
为什么特斯拉的车队里程对自动驾驶很重要
原文:https://towardsdatascience.com/why-teslas-fleet-miles-matter-for-autonomous-driving-8e48503a462f?source=collection_archive---------14-----------------------
Photo by Stefan Lehner
有趣的训练样本的自动标记和自动标记消除了对人工劳动的需要,并使数据变得有价值
最近我一直在看国际机器学习会议(ICML)关于自动驾驶这个话题的演讲。我将记下这些谈话激发的一些想法。
特斯拉大约有 65 万辆 HW2/3 汽车在路上行驶。这些车辆每个月大约行驶 1000 英里,或者作为一个车队行驶 6.5 亿英里。相比之下,Waymo 每月行驶约 100 万英里。因此,特斯拉的车辆行驶速度提高了 650 倍。
这重要吗?如果特斯拉需要一个人来标记这些英里的每一帧视频才是有用的,那就没有关系。但事实上,特斯拉可以在没有人为标记的情况下使用这些里程。
来自 Zoox 的 ICML 演讲解释了如何通过预测——预测汽车和行人的轨迹——获得“自由地面真相”。你的感知系统跟踪车辆周围物体的轨迹,所以你有一个真实轨迹的来源,可以用来训练预测。在特斯拉自主日,安德烈·卡帕西称这是“自动贴标签”。我相信这将属于自我监督学习的范畴,这是一种深度学习的形式,其中神经网络试图使用一部分数据来预测其余的数据(例如,向它显示图像的一半,它生成另一半;向它展示 10 秒钟驾驶场景记录的前 5 秒钟,它会预测接下来的 5 秒钟)。不是人类通过将预测标记为正确或错误来提供监控信号,而是数据本身通过向神经网络显示其预测是正确还是错误来提供监控信号。
预测是自动驾驶的一个重要领域,特斯拉可以使用每月 6.5 亿英里的数据进行自我监督学习,而不需要人力。此外,特斯拉只能标记和上传特斯拉预测器失败的实例(如其感知系统在预测后的几秒钟内所示)。理论上,这应该允许特斯拉在预测方面显著改善最先进的学术成果。
令人鼓舞的是,Yann LeCun 认为预测是一个容易解决的问题:
来自 Aurora 的 ICML 演讲指出,当涉及到规划和决策时,人类驾驶是一种有价值的学习来源。奥罗拉特别强调了人类干预对于模仿学习的重要性。此外,Aurora 演讲者谈到了在没有干预的情况下标记有趣的人类演示。当人类驾驶员选择一条轨迹时,Aurora 的软件可以确定这条轨迹由 Aurora 的规划者产生的可能性有多大。如果概率很低,这表明人类驾驶员和规划者之间存在分歧。Aurora 在存储在 Aurora 服务器上的记录数据(“离线数据”)的背景下讨论了这一点,但我不明白为什么你不能在汽车上实时(“在线”)运行这一点。
自动驾驶、召唤和完全自动驾驶的人类干预是标记或“挖掘”有用数据的一种方式。检测特斯拉的规划者和人类驾驶行为之间不一致的技术是另一种潜在的方式。随着每一次软件更新,规划者应该学会在更多的情况下做正确的事情。当它做正确的事情时,人类干预不会发生,人类驾驶和规划者之间也不会再有分歧。因此,每次更新后,特斯拉都会筛选失败案例。如果出现干预或分歧,其余的失败案例将触发上传。
预测和计划都涉及从车队中提取错误示例、使用这些示例来训练神经网络、部署新软件、然后上传更多错误示例的高度自动化的循环。理论上,这个过程可以扩展到数十亿个例子。
极光演讲者和另一位 ICML 演讲者, Sergey Levine ,谈到了结合神经网络和手工工程系统的混合规划者。Mobileye 的 RSS 和 Nvidia 的 SFF 采取了同样的方法。这减轻了人们对神经网络不可靠、可能输出愚蠢而危险的行为的担忧。混合动力规划者可以强制执行一套常识性的规则,比如“不要撞上其他车辆”、“不要在人行道上行驶”、“不要越过双黄线”。Sergey Levine 谈到了一种混合规划器,每当神经网络没有足够的训练数据来做出自信的决定时,车辆就会依靠显式的手动规划器。
对我来说,模仿学习是一种可行的规划方法的最强有力的迹象是 DeepMind 用它来掌握星际争霸的事实:
一个钻石星际玩家比 70%排名的星际玩家强。
计算机视觉(感知的子集)是自动驾驶中最耗费人力的领域。任何训练数据集的核心都将是大量带有高质量标签的图像和视频,这些标签是由人类仔细应用的。与每月行驶 6500 万英里相比,每月行驶 6.5 亿英里不会帮助特斯拉获得更多贴有标签的汽车,因为汽车无处不在,特斯拉首先会遇到的限制是贴标签的成本。但是规模仍然可以在两个方面有所帮助。
首先,并不是所有重要的对象都是普遍存在的。熊和驼鹿极其罕见。路上的牛和马也很少(但更少)。假设特斯拉有一个神经网络,可以检测到特斯拉遇到的 5%的熊。此外,对于它检测到的每只熊,它都会错误地将十个物体识别为熊。出于安全目的,这将是一个可怕的熊探测器。但是对于建立一个熊图像的数据集来说,它可能是非常有用的。65 万特斯拉遇到的所有熊中的 5%可能是很多熊。人类可以很容易地丢弃假阳性(非熊的图像)。这些图像可用于重新训练熊检测器。当部署下一版本的熊探测器时,它将更好地捕捉真阳性和避免假阳性,因此它将更好地建立熊图像的数据集。理论上,这种良性循环可以推动特斯拉获得大型稀有物体数据集。
第二,新兴技术可能能够使用大量嘈杂的标记数据来补充标记良好的图像的核心数据集。“弱监督学习”是指从低质量的标签中学习。例如,假设特斯拉想要训练一个神经网络来识别可驾驶空间(相对于被汽车、行人或护栏等障碍物或水等不安全区域占据的空间)。一种弱监督的方法是将任何人工驾驶特斯拉(没有碰撞,可以通过突然减速来识别)的区域自动标记为可驾驶空间。或许用 1000 倍的自动标注样本来补充手动标注的可行驶空间的样本,将比单独手动标注的样本产生更好的准确性。
A hacked Tesla computes drivable space, shown in green.
脸书的研究实验室展示了弱监督学习对于图像识别非常有效。脸书使用 Instagram 标签来预测由付费的人类标签员分配的图像标签,这些标签通常与图像的内容有细微的对应。通过 10 亿张带有标签的 Instagram 照片,脸书获得了比 100 万张标签良好的图片更好的结果。
预测、规划和计算机视觉中的自动标签以及稀有物体的自动挖掘意味着特斯拉在某些任务上的性能将随着其车队里程的增加而提高(可能是次线性的)。
克鲁斯公司预计到今年年底,它的车辆将比普通人类司机安全 5-11%。也许有了三个数量级的行驶里程,特斯拉将能够开发出比 Cruise 安全一个数量级的完全自动驾驶汽车。这与深度学习中观察到的扩展趋势大致一致。如果克鲁斯的预测是准确的,那么一个数量级的改善将使特斯拉达到平均人类安全的 50-110%。
如果 Waymo 成功实现其计划从车辆中移除安全驾驶员,并且如果 Waymo 有安全指标来证明这一计划,那么这将表明完全自主是当前技术的一个容易解决的问题。与 Waymo 不同,特斯拉没有激光雷达的传感器冗余,但它确实有能力为预测、规划和计算机视觉的核心问题编译更大、更好的训练数据集。总的来说,我认为特斯拉更好。如果 Waymo 成功了,我怀疑特斯拉不会很快跟上。
为什么现在的 AI 淘金热一定不能失败
原文:https://towardsdatascience.com/why-the-current-ai-gold-rush-must-not-fail-ce183c4a3cc3?source=collection_archive---------25-----------------------
我们在这个领域的投资已经变得太重要而不能失败
每个人都在谈论人工智能的阻碍性危险。从机器接管我们的工作,到斯蒂芬·霍金斯对它们给人类带来的生存威胁的恐惧,很多人都在谈论如果当前创造智能机器的竞赛成功了会发生什么。
危险是真实的。诚然,自动化程度的提高将使许多工作岗位过时,或者真正的人工智能最终可能被证明是恶意的。
同样有理由的是,许多专家对我们允许数据驱动的算法对我们生活的控制越来越多表示担忧。在他的新书 21 世纪的 21 课中,尤瓦尔·诺亚·哈拉里谈到了看似无害的应用程序可能会对我们的生活产生长期影响的潜在方式。
所有这些担忧都是有效的,必须由人工智能领域的研究人员和企业公开彻底地解决,我们应该对保护我们免受这种可能威胁的法规持开放态度。
然而,尽管最近对智能机器的淘金热的危险经常被讨论,但没有人谈论失败的危险。
一场新的全球危机
首先,我们失败的可能性有多大?人工智能领域因在过去经历了许多冬天而臭名昭著。一次又一次,研究人员创造了很多期望,提高了投资者的兴趣,但几年后却让他们失望,导致该领域的资金和兴趣大幅下降。
许多从业者和研究人员认为这种担忧是被误导的,新的人工智能冬天不会发生,原因有三:
a)数据和计算能力的融合,使得庞大的数据处理算法能够立即提供有用的见解
b)行业致力于利用这些见解来实现真正的商业价值
c)一个成熟的研究团体,它从过去的错误中吸取了教训,现在准备好看到它的工作完成。
这些可能是乐观的有效理由,但乐观并不能保证人工智能竞赛会成功。
这取决于两件事:
I)要么当前创造智能机器的范例足以兑现人工智能的承诺,
或者,
ii)在当前范例失去动力之前,一个新范例将会出现。
陪审团仍未做出决定,许多令人沮丧的迹象即将出现。从科技高管降低了他们对自动驾驶汽车的承诺,到虚拟助理仍然令人遗憾地表现平平,尽管大型科技巨头向他们提供了大量的计算能力和数据,但似乎深度学习的成败尚未得到保证。
更重要的是,提供一个可行的替代方案只能通过充满风和危险的研究途径来完成。如果深度学习无法实现其承诺,目前没有候选人来收拾残局,开发新的可能需要数年的研究。更令人沮丧的是,真正的“实体”研究是狂野和不可预测的,不能提供像工业界喜欢的那种缓慢的迭代过程。
简单地说,如果深度学习被证明不足以实现自主机器成为现实的未来,那么我们无法保证另一个人工智能范式可以取代它,也无法预测新的科学突破何时会发生。
假设我们目前的方法一定会成功是轻率的,就像为最疯狂的科幻小说场景做准备是有道理的,在这些场景中,一个邪恶的机器霸主向人类宣战,所以我们有责任确保人类不会遭受同样灾难性的失败。
但是,研究界未能实现智能机器的期望可能会有什么危险呢?
财务投资
上一次全球金融危机发生在 2008 年,当时美国房地产泡沫破裂,产生了影响全球金融机构的光环效应。10 多年后,世界部分地区仍在从这场危机中复苏。
在过去的 10 年里,科技行业取得了巨大的增长,一些科技巨头开始超越过去的传统公司成为世界上最有价值的公司,一系列创业公司成为华尔街投资的新宠。这种惊人的增长在很大程度上是基于数据科学和机器学习的最新进展,这些技术形成了许多令人难以置信的成功应用程序的基础。
更重要的是,人工智能一直是推动科技行业巨大增长的主力,这反过来又影响到整个经济。可持续增长是健康经济最重要的组成部分,这一点在近年来每位政治候选人的主要口号中都有所体现。
如果人工智能失败了,如果它的期望没有成功实现,那么最近的增长将会停止。这将意味着数十亿美元的投资损失。举个例子,优步,可以说是创业独角兽中的金童,在最近的 IPO 中达到了令人印象深刻的 850 亿美元的估值,尽管在其存在的整个过程中报告了巨大的损失。原因很简单:它颠覆交通运输行业的承诺如此之大,以至于投资者蜂拥而至投入资金。但是,由于这一承诺在很大程度上取决于即将到来的自动驾驶和智能路线技术,如果不能实现这一技术,将意味着优步以及在这方面的数十亿投资的终结。
类似地,许多新的创业公司建立在利用大量数据和提取有用的商业见解的承诺之上。如果人工智能证明破产,那么这些初创公司将很快耗尽资金,因为投资者意识到他们的潜力不再那么有前途了。
另一个输家将是当前的科技巨头,他们已经将很大一部分投资组合建立在数据科学和机器学习上。从 Nvidia 向几乎所有人出售 GPU,到所有五大科技巨头转型为主要的人工智能公司,许多市场上最大的玩家都非常依赖这项技术。虽然如果人工智能没有还清债务,他们没有消失的危险,但他们也会遭受巨大损失,这将削弱他们的财务稳定性并动摇市场。
可以说,没有多少人会对科技行业陷入困境的消息感到难过。毕竟,他们越来越多地被诋毁为将制造业工作转移到海外的罪魁祸首,利用强大的算法操纵社会违背其自身的最大利益,加剧了他们声称在这一过程中解决的许多问题,并在对工人和社区进行激进剥削的有毒环境中茁壮成长。
所有这些或许都是真的,但不幸的是,科技行业的崩溃对全球金融体系来说不是好消息。如果它们带来的增长率消失,那么连锁反应将导致银行和私人基金的普遍不稳定,大量投资资本付诸东流。
此外,随着这一宝贵的增长被搁置,政府和金融机构将很难找到替代收入来源。这可能会导致新一轮全球停滞、流动性和融资不足以及市场崩溃。令人欣慰的是,全球金融体系没有像房地产危机期间那样暴露在科技行业面前,但这并不意味着它不会受到影响。随之而来的危机的影响会小一些,但它仍将是一场危机。
自然,我们的经济在人工智能的持续增长上投入了很多。这是有道理的,因为这项技术在过去的十年中已经带来了巨大的创新,并且继续以令人印象深刻的速度增长。这是有意义的,因为这项技术本身非常有用,并且非常适合我们的社会建设方式。它的最终适应是不可避免的,但深度学习是实现这一承诺的特定范式吗?
这场争论还没有定论。虽然它很有可能会有回报,当前的人工智能淘金热也很成功,但它也同样有可能不会成功,所有投资它的人都被冷落在水中。
这对我们的社会将是灾难性的。科技泡沫的破裂将意味着数十亿美元的损失,数十万人失业,以及全球银行和金融机构的连锁反应,这种反应将波及世界上最弱的国家,并迫使它们陷入停滞。
这只是失败潜在危险的一个方面。还有一个;失去的机会。人工智能真的有巨大的潜力来改善我们的生活,让世界变得更美好。如果不成功,我们将错过一个纠正许多错误的大好机会,更重要的是,我们将别无选择,无法应对一些对我们的世界和人类非常重要的危险。
社会投资
我们不仅在人工智能上投入了大量金融资本;我们也在社会层面上对它进行了深入的投资。人工智能被视为解决我们社会面临的许多问题的最佳选择。未能满足其期望就是未能解决这些问题,其中一些问题对人类本身构成了生存威胁。
环境
二氧化碳在大气中积聚,导致全球气温上升。制造过程中的许多化学副产品正在污染河流、森林和土地。不可回收的材料仍然无处不在,在我们死后很久还在污染着这片土地。运输成本高,效率低,导致大气污染和二氧化碳排放增加。
所有这些问题都有一个非常简单的解决方案;我们可以放弃我们技术先进的方式,关闭所有工厂,不使用汽车,转而回到一种更简单、更悠闲的生活方式,这种生活方式不需要这么高的维护费用。
不幸的是,这不一定会发生,因为这种悠闲的生活方式是痴人说梦,不可能维持我们现在的社会。我们需要技术,因此,我们也需要一种方法来对付它带来的邪恶。
令人惊讶的是,人工智能是我们对抗即将到来的环境末日的最强大武器之一。制造业可以优化到需要更少能源和产生更少废物的程度。交通可以通过智能路线和自动驾驶进行改造,变得越来越高效和环保。通过部署一大批小型智能追踪器,可以追踪和控制环境污染。
所有这些都需要如此大规模的机器智能,以至于我们不能放弃我们在这项技术上的投资。人类无法独自处理如此海量的数据,随着全球毁灭的威胁不祥地逼近,我们应该投资任何有望让我们摆脱当前困境的技术。
话虽如此,投资于支持更环保解决方案的智能解决方案在短期内也是有财务意义的,因为企业将能够降低大量运营成本,因此,无论如何,它们很可能会在不久的将来更加积极地从事这方面的研究。
我们清单上的第二项就不一样了。
农业
假设我们能够以某种方式扭转全球变暖的趋势,并从我们自己带来的环境灾难中幸存下来,我们的社会要继续繁荣,仍有许多关键问题需要解决。
以健康和可持续的方式养活世界人口排在第一位。农业急需创新,而人工智能可以成为许多应用领域的催化剂。
我们首先需要考虑人手短缺的问题。选择从事农业的人少了很多,在过去的 20 年里,这一数字稳步下降,总共下降了 15%。事实是,当农民不再是一份“性感”的工作。这很难,报酬也不高,而且需要你在远离大城市中心的地方度过大半辈子,而我们社会的大部分人现在都聚集在那里。这种特殊的生活方式可能会吸引一些人,但如果可以选择,大多数人不会选择这种生活方式。
机器人是这里显而易见的解决方案。农业的很大一部分是艰苦的体力劳动,在烈日下辛苦地给牛喂食,或者保护你的庄稼。通过适当的设计,今天对农民来说意味着什么的很大一部分可以由机器人自动化,将许多人从繁重的农业劳动中解放出来。
但是,尽管这可能是根本性的,但这并不是人工智能在农业领域最大的优势。由于我们必须从机器人农民那里获得收益,因此无法与持续、智能的作物监控、精确的天气预报和对牛的实时监管相比。那里的创新潜力是无限的。
例如,我们可以在每个领域植入低成本的传感器来测量土壤湿度和土壤中的养分含量。然后,我们可以有针对性地注入肥料,用量比现在小得多。我们还可以通过按需供水来限制特定田地的用水量,从而节省大量宝贵的资源。
类似的方法可以用于家畜。通过小型嵌入式传感器持续监测它们的健康状况,我们可以防止不可避免且极其危险的疾病爆发,这些疾病折磨着整个种群,就像我们在中国的猪群中看到的那样。这种分散的、无处不在的监控,加上机器人“牧羊人”和助手,将使我们能够彻底改造工业化农业。
人工智能可以用上百种不同的方式破坏农业部门。这不仅是一个充满希望的商机。实际上,当务之急是我们现在就利用这一技术,因为地球一直处于全球疫情的危险之中,这种危险折磨着我们的牲畜或我们赖以生存的主要作物。我们目前完全无法抵御一种威胁,正如我们所知,这种威胁很可能会导致文明的终结。
即使没有这样的灾难降临到我们头上,我们仍然有责任为大部分发展中国家和欠发达国家做些什么来对抗饥饿和营养不良,其中近 10%的世界人口正在遭受饥饿和营养不良。如今,我们需要以前所未有的规模生产和运送粮食,而我们的农业系统已经达到极限,无法为发达国家提供足够的数量。想象一下,如果我们决定向地球上的其他地方提供同样的数量,会发生什么。
我们唯一可行的解决方案是改变我们构建农业部门的方式,而利用人工智能是目前最有希望的方法之一。当然,这取决于社区兑现承诺的能力。实现我们上面提到的所有这些创新所需的数据量之大,使得分析这些数据的智能算法势在必行。如果我们做不到这一点,那么我们就错过了一个伟大的候选人来帮助对抗世界饥饿,保护我们免受影响我们最重要的食物来源的疾病。
这将对世界人口的健康和福祉造成巨大损害,这是我们在评估新一轮人工智能冬季的潜在成本和收益时需要考虑的一个重要方面。这就引出了我们的下一个话题。
卫生保健
在过去的一个世纪里,生物学和医学取得了巨大的进步,这已经转化为各种疾病的根除,以及世界上许多疾病的新疗法和治疗方法的发展。
我们没有意识到的是,大自然是一个不断进化的相互联系的有机体。我们每消灭一种病毒或病原体,就会有另一种病毒或病原体冒出来取代它。这是因为我们正在与那些我们试图击败的机制进行一场永无止境的进化军备竞赛。每当开发出一种针对特定病原体的新抗生素时,一些特定的微生物就会适应新的条件,从而产生一种不同的病毒,这种病毒对特定的抗生素链具有耐药性。然后,整个过程重新开始,研究人员致力于为这种新病毒创造新的抗生素。
问题是,我们现在的抗生素原料快用完了。这些只不过是具有非常特殊品质的生物细胞,而且每当新病毒出现时,我们目前还没有从零开始制造新细胞的正式方法。我们依靠偶然发现(确切地说,青霉素是偶然发现的)正确的条件组合来对抗疾病。
这种情况由于世界现在几乎普遍相互联系而进一步恶化。过去,我们有大量半孤立的部落。与外人的接触很少,而且经常伴随着传染病的传播。这是因为每个部落都发展了自己特定的免疫系统,使其能够对抗在自己环境中流行的疾病(顺便说一下,这就是为什么当你去特定国家旅行时,你需要接种某些疫苗,因为你的免疫系统无法应对那里遇到的病原体)。
这也意味着每个部落都是为自己而战。如果它的免疫系统不能胜任这项任务,那么它就有被消灭的危险。尽管这可能是悲剧性的,但无法与影响全人类的全球性疫情相提并论。因为这就是我们今天面临的危险。
我们都看过《达斯汀·霍夫曼》中的《疾病爆发》,或者读过丹·布朗的《T2 的地狱》,在那里,人类面对未知的无法治愈的疾病。这种风险是真实存在的。大多数疾病都有一个潜伏的“潜伏期”,在这段时间里,“宿主”(也就是携带疾病的人)没有表现出任何症状,但仍然可以感染他人。然后这些其他人继续感染他们在日常生活中遇到的人,等等。从“第一次接触”开始,当第一个人接触到疾病时,到疾病首次出现时,可能需要几周时间。再加上识别这是一种危险的、新发现的疾病所需要的时间,以及全世界卫生当局得到通知并做出反应所需要的时间,你就能理解这种危险到底有多大了。
在这场生存斗争中抛弃像人工智能这样强大的武器是愚蠢的。一方面,我们可以在实验室内使用它来自动搜索新的抗生素,并分析 DNA 链,希望它能提出一些新颖、有用的见解。
另一方面,我们可以利用它作为一个无所不在的监控系统的有效性(是的,类似于奥威尔式的,只是用于慈善目的)。在极端情况下,我们可以使用集中的公共卫生监测系统来分析通过官方测试和第三方自我监测应用程序收集的患者记录。然后,我们可以汇总这些数据并确定全球趋势,使我们能够尽快发现疫情,甚至预测疫情即将发生。
但是我们可以走得更远。我们可以在世界各地部署微型传感器,监测其周围地区的病原体浓度,然后汇总这些数据,以计算出下一次可能的疫情爆发的时间和地点,并在为时已晚之前进行干预。
机器学习可以在很多领域彻底改变我们对医学和公共卫生的思考方式,因此在这里列出它们是没有意义的。最重要的是,如果没有一种有效的方法来分析大量数据,其中一些问题就无法解决,这远远超出了任何人或组织单独处理的能力。
这就是为什么失败不是一个选项。就像我们之前谈论的领域一样,人工智能在医学上的潜在影响太大了,不容忽视,我们在这方面的投资也太大了,不能失败。
教育
最后,还有一个关键的应用程序,它是我们刚才讨论的所有内容的基础。无论我们的算法有多好,无论我们努力解决多少问题,除非我们设法影响我们社会系统背后的关键驱动力:人类自身,否则这一切都不会有所改变。
首先,我们需要能够处理我们开发的任何新技术的专业人员。我们还需要让下一代能够在这一领域继续研究。
我们目前的教育体系不适合处理我们教育年轻一代的方式的如此大规模的改革所带来的挑战。如果我们希望新毕业生不仅能够处理智能机器和数据驱动应用程序的细微差别,而且能够继续以更快的速度提供新的创新,那么我们需要赋予他们相应的技能来做到这一点。
不幸的是,对于一个为不同时代而建立的教育体系来说,这是一个苛刻的要求。我们目前的方法旨在培养最适合过去缓慢变化的工作环境的技能。人们学会做好一件事,并期望在余生都这样做。
但是,在确定未来的环境不会是这样之后,当我们事实上已经确定我们将需要未来的员工非常擅长在他们的工作中集成新技术,那么我们需要在头脑中培训他们。
这不是什么新鲜事。一段时间以来,人们一直在谈论一种适应持续、终身学习的教育体系。这个系统将是数据驱动的,个性化的,并通过互联网传递给每个人。这就是为什么我们看到了像 Coursera 这样的服务的兴起,这些服务提供个性化的教育内容,并允许他们的客户制作个性化的课程。
有替代方案吗?很难想象在这样一个快节奏、不断发展的学习模式中。具有讽刺意味的是,对于我们来说,提供人工智能技术起飞所必需的教育系统,我们需要同样的技术来培训能够实现这种转变的人员。如果人工智能继续以目前的速度发展,那么我们可以期待一个自我强化的正反馈循环,它将不断提供新的创新,并加速我们向智能机器时代的过渡。
如果没有,那么我们可以预期目前的进展速度将会饱和,创新将会停滞。这对我们上面讨论的所有必要的应用领域都是有害的,这就是为什么教育可能是最需要智能、数据驱动的方法进行颠覆的关键部门。
大而不倒
我们不断受到针对人工智能可能存在的危险的强烈警告的轰炸,这是有充分理由的。批评者不仅关注智能机器的创造将对人类产生的深远影响,还关注我们的社会目前正在受到的缓慢而难以察觉的影响。
他们是对的;依靠算法来处理我们生活和机构的关键方面可能会在许多方面产生适得其反的效果。从更“良性”的简单软件错误,到算法设计方式或训练数据的偏差,一直到机械霸主对人类的全面终结者式统治,我们在创造造福人类的人工智能的道路上有许多挑战要克服。
有鉴于此,有人可能会认为,让人工智能竞赛持续下去的是少数贪婪的公司,它们渴望滥用这项技术来推进自己的议程。在所有的灾难和恐惧中,人们很容易忘记为什么科学家们会走上这条路;这是因为智能算法可以解决用其他方法无法解决的问题。这是因为我们的世界迫切需要创新来解决许多更大的挑战。是因为社会需要这个。
我们在这个项目上投入太多,现在不能退缩。是的,危险是巨大的,但还没有大到无法克服。我们不应该对这种技术带来的巨大风险掉以轻心或不屑一顾,但我们也不应该畏缩不前,放弃它能为我们的社会带来的基本好处。
正如每一个如此规模和重要性的项目一样,我们应该非常小心和谨慎地进行,但我们必须继续进行。否则,我们需要准备好应对失败的反弹。从气候变化到公共卫生,再到农业和教育,这种反弹对我们的世界来说可能太大而无法应对。
为什么数据科学维恩图是误导性的
原文:https://towardsdatascience.com/why-the-data-science-venn-diagram-is-misleading-16751f852063?source=collection_archive---------19-----------------------
或者为什么数据科学家不应该忽视软技能
什么是数据科学?
数据科学是一个相对较新的行业,尽管其组成部分已经存在了很长时间。那么,为什么数据科学到底是什么还不清楚呢?谷歌搜索“什么是数据科学”产生 1.590.000.000 个结果,而谷歌搜索“什么是计算机科学?”仅产生 1.220.000.000 个结果。考虑到计算机科学比数据科学存在的时间更长,这是相当惊人的。
如果你曾经想知道什么是数据科学,那么你很可能遇到过所谓的“数据科学维恩图”。据我所知,2010 年,德鲁·康威是 Alluvium 的创始人兼首席执行官。我在研究过程中偶然发现的另一篇文章,Nathan Yu 在 2009 年发表的,详细阐述了可视化的组成部分。让我们来看看“数据科学维恩图”:
Drew Conway’s Venn diagram of data science
这种可视化的吸引力是显而易见的。这很容易理解,它传达了数据科学是几个学科的结合。在这个维恩图中,三个组成部分是黑客技能、数学和统计知识以及实质性的专业知识。现在,互联网上有许多维恩图的变体,但本质上,几乎所有的都是基于这三个相同的组成部分。
为什么数据科学维恩图是误导性的
数据科学维恩图没有错。它提到了数据科学的基本组件,同时说明了数据科学发生在这些组件的交叉点上。因此,如果你不知道什么是数据科学,只是想知道它的意思,这个文氏图是给你的。然而,如果你想更深入地研究似乎无穷无尽的数据科学领域,那么这个文氏图充其量只是一个起点,在最坏的情况下会产生误导。让我引用传奇统计学家 John Tukey (1962)的话来结束这一段,这句话非常准确地总结了我对数据科学维恩图的感受:
“对正确的问题给出一个近似的答案,通常是模糊的,要比对错误的问题给出一个精确的答案好得多,因为后者总是可以变得精确。”
许多试图解释什么是数据科学的文章迟早会利用这种可视化。从描述如何成为数据科学家的文章数量来看,这些读者中很大一部分可能渴望成为数据科学家。这就是维恩图的问题所在。
为什么软技能在(有效的)数据科学中很重要
文氏图是一种抽象。根据定义,抽象概念并不试图捕捉现实的复杂性。然而,这个文氏图更合适的标题可能是类似于“数据科学硬技能文氏图”的东西。维恩图的所有组成部分都是硬技能,也就是说,这些技能可以很容易地通过,例如,参加笔试来衡量。另一方面,软技能,有时被称为人际交往技能,通常不能通过笔试来衡量。这些技能包括能够有效地在团队中工作,与组织中的其他人沟通(包括非技术员工),以及能够领导和管理团队。
现在,公司不再雇佣数据科学家在远离组织的地方工作。他们雇佣数据科学家,因为他们期望数据科学家从创造价值的数据中提取可操作的见解。因此,首先也是最重要的是,数据科学家应该熟悉他或她公司的商业模式,并了解它如何创造价值。只是为了确保我们在同一页上:我指的是利润。如果没有足够的软技能,即使是最有能力的数据科学家也很难实现这个目标。
让我来想象一下大多数公司是如何看待数据科学的:
今天从事数据科学项目的现实是,大多数公司的管理层并不真正关心中间数据科学部分的细节。这就是他们雇用你的原因。他们的工作是做出有助于公司增加利润的决策。因此,不仅要掌握成功实践数据科学所需的技术方面,还要掌握必要的软技能,这一点至关重要。
在我看来,成功完成数据科学项目的三个最突出的软技能包括:
1.(头脑的)灵活性
让我们从业务问题开始。为了能够解决一个问题,你必须首先理解它。在公司环境中,你将面临一个商业问题,也就是说,一个一旦解决就会带来价值的问题。这可以是任何事情,从创建简化和加速管理决策过程的仪表板到使用机器学习来预测销售增长。没有技术背景的业务主管不一定了解数据科学的所有细节(他们也不需要了解)。他们遇到了一个问题,想探索新的方法来解决它。因此,这些业务问题通常不会提前非常明确地提出来。数据科学家的任务是确定问题的哪些方面可以用数据科学来解决。由于大多数数据科学家没有商业背景,这可能是一个具有挑战性的障碍。能够在业务和技术思维之间转换是有效解决业务问题的一项基本技能。
2.协力
在我可视化的第二阶段,数据科学维恩图中提到的技能绝对至关重要。但是,软技能还是需要的。最重要的是,数据科学家需要能够在任何类型的团队中有效地工作。根据组织的组织结构,数据科学家可以作为团队中唯一的数据科学家工作,或者作为更大的分析团队的一部分,与其他数据科学家、数据仓库专家等一起工作..高效地分配任务并作为一个团队朝着一个共同的目标努力是成功的另一个重要因素。
3.有效沟通和展示
在这种情况下,沟通主要是指与组织内没有技术背景的员工的互动。能够用通俗易懂的语言解释数据科学团队目前正在从事的工作,弥合了装饰性数据科学和有效数据科学之间的差距。完成技术部分后,数据科学家必须将他们的发现传达给管理层。做吸引人和有趣的演讲是一项必须通过反复练习才能获得的技能。此外,软技能很少在技术专业的课程中广泛涉及。这包括从有效的幻灯片设计到准备一个能在整个演示过程中抓住并保持听众注意力的脚本。
结论
当试图成为一名有效的数据科学家时,努力学习软技能和努力学习硬技能同样重要。因此,我认为,在一个人试图成为数据科学家的过程中,应该更多地关注软技能。无论是通过自学还是在大学里参加通信课程,提高一个人的软技能总是一项值得的投资。
为什么高斯分布是“自然”的选择(第一部分)
原文:https://towardsdatascience.com/why-the-gaussian-distribution-is-a-natural-choice-part-1-bee0569b79df?source=collection_archive---------27-----------------------
停止引用中心极限定理
所有科学理论都有一个共同点,那就是从某个抽象模型中推导出可观察量的野心。理论的参数通常被认为是已知的,例如,基于第一原理、直接测量或对称性考虑等更复杂的东西。另一方面,在大数据时代,人们对从观察到参数估计的逆向路径越来越感兴趣。在这种逆向操作中,前所未有的存储和计算能力使数据科学家——在越来越多的行业中工作——能够探索广阔的参数区域,并可能(并有希望)找到与他们感兴趣的一些现象的数学描述相关的“正确参数”,无论是(仅举一些非常著名的例子)预测房价、检测欺诈等。
Fig.1: In the Big Data era, the path from observation to theory is being taken in reverse.
然而,无论数据科学家的武器库有多强大,处理太大的数据——从定量(许多许多例子)和定性(大量信息内容)的角度来看——在大多数时候都是一个真正的挑战。一方面,探索整个宇宙的可能参数实际上是一项不可能的任务;另一方面,虽然为一般类型的数据开发过程是可取的,但许多算法是在对输入数据做出一些假设的基础上构建的。在这方面,高斯分布(GD)在机器学习中占据中心位置。高斯朴素贝叶斯、线性和二次判别分析是假设数据遵循 GD 的算法的例子。
GD 的普遍存在通常根据中心极限定理来证明,该定理指出(在大数 N 的极限中)随机变量的和遵循 GD。例如,让我们掷四个骰子,得到 3,1,4,4。结果总计 12 个,我们注意到了它。我们第二次重复这个实验,得到的总数是 18。如果我们重复实验 N > > 1 次,我们将获得一个高斯钟,描述一个介于 4(最小和)和 24(最大和)之间的特定数字被观察到的次数。一个简单的计算将显示钟形以值 3.54= 14 为中心[注意,事实上,3.5 是单个骰子滚动的预期值]。现在,如果你是一名抽象数学家,我敢肯定你会非常乐意用中心极限定理来证明像 GD 这样的特权物体的存在。然而,我发现基于中心极限的直觉,虽然是一种相对容易的方法来可视化如何建立一个正态分布的随机变量,但并不能完全令人满意地解释为什么*自然为上帝保留了这样一个特殊的位置。
有没有其他方法可以把正态分布冠上概率分布函数女王(pdf)的桂冠?是的,实际上有很多。在下文中,我将集中讨论其中一个,并用一个非常基本的物理概念向你解释 GD 是如何出现的:熵。在这篇文章(第 1 部分)中,我们将通过查看最简单的统一 PDF 来介绍基本概念,表明它是最大化系统的熵的 PDF。在第二篇文章(第二部分,即将发表)中,我们将把注意力放在 GD 上,并看到这类 pdf最大化了描述系统/过程的分布的熵,这些系统/过程的均值和标准差是已知的。
理解熵的概念
熵的概念起源于热力学理论,它最初是在卡诺循环的背景下定义的。然而,关于这个特殊方面的讨论已经超出了本文的范围。我们唯一需要知道的是下面的陈述(热力学第二定律):
在孤立系统中(即假设不与其他系统交换能量/质量),总熵永远不会随时间减少。
这意味着,除了一类特定的系统(即时间可逆的)——随着时间的推移与恒定的熵相关联,大自然会让系统以熵最大化的方式进化。我们在日常生活中都经历过这个原则。我来说一个例子;这需要一点练习,但是你总是可以从一瓶杜松子酒和一瓶奎宁水(可能还有一片柠檬,一些胡椒等)开始得到一瓶美味的杜松子酒。).但是,你很难逆转这个操作。这一事实背后的原因是杜松子酒+奎宁水+玻璃杯(+冰+柠檬+…)系统的熵会减少。换句话说,我们可以从一个有序的状态变成一个混乱的状态,而不是相反。显然,大自然喜欢凌乱!
Fig.2 : entropy of last Saturday night.
为了从技术上更好地理解熵是什么,我们可以考虑奎宁水和杜松子酒的粒子(众所周知,它们是元素周期表中的基本元素……)混合在一起形成球和盒子形式的鸡尾酒。在很高的层次上,这种观点是统计力学的观点之一,事实上在这个领域和热力学之间有着深刻的联系。
让我们想象我们的玻璃杯由八个盒子组成——我将按顺时针方向从 1 到 8 标记它们,见图——我们的杜松子酒和滋补品水瓶每个包含 4 个颗粒。我们可以按照自己喜欢的方式将球排列在盒子里,唯一的约束是杜松子酒和 TW 的粒子数量必须保持不变,意味着在将瓶子的内容物倒入玻璃杯之前和之后,我们总共有 8 个粒子。以下图中的配置为例
Fig. 3: Gin and tonic distribution function 1
我们在盒子 1 中有 1 个杜松子酒和 1 个奎宁水颗粒,在盒子 2 中没有颗粒,等等。该配置对应于下图中的“杜松子酒和奎宁水分配功能”。然而,这只是所有可能的粒子配置和相关的杜松子酒和奎宁水分配函数中的一种!其他可能的配置在下面的图 4 中示出
Fig. 4: Other gin and tonic distribution functions
我们更容易观察到哪种配置?我不认为需要解释什么来说服你,一款性能良好的杜松子酒&滋补品会将杜松子酒和滋补品水颗粒适当混合。好好摇一摇之后,我们的直觉和期望会与下面的东西相对应
Fig. 5: The “real” gin and tonic distribution function
也就是在一款好的鸡尾酒中,杜松子酒和奎宁水的分配函数尽可能的均匀。这一事实背后的原因可以根据对应于特定分布函数的可能配置来理解。为了简单起见,让我们只考虑两个盒子和两个粒子(无论你想考虑什么物质)。下面图 6 中的简单例子表明,分布越均匀,实现该分布的可能配置的数量就越多。反过来,可用配置越高,系统越混乱,熵越大。
Fig. 6: 2 boxes and 2 balls world. n_1 and n_2 denote the number of balls in box 1 and 2 respectively
因此,均匀分布函数是最大化熵的函数,包括我们的杜松子酒和滋补品。更专业地说,均匀分布函数是与最大可能数量的微观状态相关联的函数。更全面地解释这意味着什么也超出了这篇文章的范围,但是我很乐意和任何想知道更多细节的人一起讨论(就在下面评论吧)!
到目前为止,我们已经从熵的角度,更重要的是从分布函数的角度,以一种更技术性的方式,理解了鸡尾酒制作过程的动力学。我们仍然缺乏对上述观点的数学翻译(和论证)。这就是我们在下一段要做的事情。在继续之前,读者应该记住一点:我们使用的唯一假设是,在配制鸡尾酒时,杜松子酒和奎宁水的数量是守恒的(即,它们既没有被破坏也没有被创造)(对于更简单的 2 盒/2 球世界也是如此)。在我们的例子中,所有盒子中的粒子总数为 8
Eq. 1: particles conservation
如果我们将最后一个等式的两边除以 8,定义为 p_i = n_i/8 (符号 _i 表示下面等式中的下标)我们会发现,任何曾经处理过 pdf 的人都应该对某种等式很熟悉:
Eq. 2: box occupation probability conservation
新定义的盒子占用概率 p 之和为 1。这就证明了上面介绍的(概率) 分布函数的思想。换句话说,我们简单的说就是粒子的守恒可以看成是某些 PDF 的守恒。
警告:数学来了!
我们在这里的目标是通过最大化系统的熵来正式导出一个分布函数,给定粒子数量守恒的约束条件——正如我们刚刚了解到的,这相当于概率守恒。这是我们在对系统一无所知的情况下所能做的最简单的假设,除了它的各种配置由一个分布函数来描述这一事实之外,它同样满足等式的第二部分。2.为了概括和简化计算,我们在连续的情况下工作,用整个玻璃体积上的积分代替总和——这在具有无限数量盒子的玻璃的极限中是精确的
Eq. 3: switching from a discrete to a continuous world
有了分布函数,与之相关的熵 S 由吉布斯熵公式给出:
Eq.4: Gibbs entropy formula (Boltzmann constant set to 1)
我们定义了另一个泛函(即函数的函数),它只是上面介绍的熵的一个巧妙扩展。这个扩展很聪明,因为它引入了一个额外的项,用拉格朗日乘数 (LM ) λ,它编码了等式。2 必须遵守(我们用更通用的 V 代替“玻璃”,表示任何种类的体积):
Eq.5: The functional J
不要害怕!这个泛函 J 最后只是一个数……要计算它,需要 p 和λ的知识。我们还不知道他们,但实际上计算 J 并不是我们的目标。事实上,我们感兴趣的是 p 的形式,使得 J 最大化,熵最大化。在拉格朗日乘数存在的情况下,我们真正追求的是
最大化 J (以及 S)的 p 的值,具有 p 是 PDF 的附加约束,即它积分为 1
现在,为了找到使一般函数f(x)最小化或最大化的 x 的值,通常要做的是对 x 进行微分,并求解方程 df(x)/dx=0。类似地,当处理像等式 5 中那样的泛函时,可以定义一个泛函导数
Eq. 6: functional derivative of J with respect to p
最小化 J 的分布函数是方程 6 消失的分布函数。我将在这里提供函数导数的结果,给那些对我下面附录中的数学步骤感兴趣的人。我们获得
Eq. 7
从哪
Eq. 8
为了完全揭示由通常的 LM 技术规定的p(x)的形式,我们还需要求解下面的方程——T42 关于 LM 的导数
Eq. 9
进行这样的求导,将其设置为 0,并用等式中的内容替换 p(x) 。8 我们有
Eq. 10
我用了体积上的积分就是体积本身的事实。比较等式 8 和等式。10、我们终于找到了
Eq. 11
那就是最大化熵的 PDF 是均匀的 PDF!因此,我们发现,在没有关于 PDF 的任何信息,但事实上它是 PDF 的情况下,最“自然”和最少偏差的选择是均匀分布函数。这个结果既惊人又明显!对统计过程一无所知,你难道不会自然地给所有可能的结果分配一个相等的概率吗?
在下一篇文章中,我将遵循类似的步骤,来看看高斯分布函数是在什么条件下被自然“选择”的。敬请期待!
附录:函数导数
首先,泛函可以定义为从向量空间到其标量 域的 线性映射。粗略地说,为了限制我们在这里的需求,我们可以把一个函数想象成一个操作,它接受一个函数并把一个数字与它相关联。最简单的泛函之一是积分,它采用定义在某个支持面 V — 上的函数 f(x) — 并返回一个标量
Eq. 12
人们可以定义 I 关于它的自变量f的导数。为了理解如何做,让我们看看普通的微分(我们在这里考虑从实数域到实数域的函数 f: R → R )。这需要对某个函数 f(x) 的增量差求一个非常小的增量ε。函数 f(x) 现在本身就是运算, x 就是它的自变量。我们有
Eq. 13
后者意味着问我们自己这个问题:当我们稍微改变我们正在评估它的点时, f(x)改变了多少?我们可以更一般地陈述后一个问题:当我们稍微改变它的参数时,映射的结果如何变化?从这个角度来看,函数导数的定义是适定的:它要求我们评估当我们对函数 f 本身做一些小的改变时 I 改变了多少。唯一需要注意的是,我们需要在 f(x) 的支撑中选择一个点来取这个小增量。在下图中,我们展示了一个可能的例子:我们在精确的点 t 处向 f(x) 添加了一个小的位。在数学上,这可以通过使用 delta 函数来表示
Fig, 7: Varying the function at a precise point t
现在让我们尝试计算上面定义的泛函的导数——f 的积分
Eq. 14
简单的计算表明
Eq. 15
这里我们使用了 delta 函数的主要性质,也就是说,如果它的自变量在积分域内消失,它就积分为 1。就是这样!上面的函数导数(等式 7)已经用相同的逻辑计算过了。
下一个帖子将很快发布!
鸣谢:感谢米恰伊尔·帕莱奥科斯塔斯阅读了这篇文章的第一版并提出了一些改进建议!
为什么大多数人对技术性失业的看法是错误的
原文:https://towardsdatascience.com/why-the-majority-is-wrong-about-technological-unemployment-6f51804419a5?source=collection_archive---------15-----------------------
Photo by Chris Ried on Unsplash
新技术
莫拉维克悖论和为什么白领工作会首先自动化
主要是由于媒体对事件的报道经常失实,以及好莱坞对机器人和算法反抗其主人的遥远未来的过度关注,许多人对人工智能、大数据和机器人技术的到来的真正影响仍然一无所知。
对新技术最严重的误解之一是,它们将首先使蓝领、低技能工作自动化,而高技能劳动力将不受影响——至少在短期内如此。
尽管这看起来很直观,但深入探究这个问题会挑战这一假设。
所谓的莫拉维克悖论解释了为什么需要高水平知识的白领工作会首先受到 AI 的冲击,这与传统智慧相反。
这个悖论是由汉斯·莫拉维克教授和他的同事在 20 世纪 80 年代首次提出的。
简单地说,该原理指出,机器人和 AI 算法执行以人类标准看起来很难的任务(那些需要高级推理和数学思维的任务)相对容易。与此同时,算法与人类认为简单和无意识的操作斗争——例如,移动四肢。
在估计特定工作被自动化的可能性时,大多数人倾向于认为一份工作的工资越低,被取代的可能性就越大——因为低工资工作是低技能工作,所以低技能工作将首先被淘汰似乎是显而易见的。例如,放射科医生的工作(解读 CT 扫描)比服务员的工作需要更多的努力。
然而,从机器人的角度来看,情况正好相反。
服务员需要上百种技能:从擦桌子、洗碗到送餐、数零钱。然而,放射科医生的工作要“简单”得多:输入数据,输出概率。以目前的技术水平,机器人还不能完全取代服务员。另一方面,对于 AI 来说,放射科医生的工作是小菜一碟:程序员只需要创建一个合适的算法。
正如莫拉维克所说,
让计算机在智力测试或玩跳棋时表现出成人水平的表现相对容易,但在感知和移动性方面,让它们拥有一岁儿童的技能却很难或不可能。
这种现象背后有生物学上的原因,莫拉维克将这种悖论归因于进化论。
人类的技能已经被进化磨砺了几十万年。技能越古老,自然选择改进它和使人类适应环境所花的时间就越多。
对我们来说,放射科医生的工作(解读 CT 扫描)似乎比服务员的工作需要更多的努力。然而,从机器人的角度来看,情况正好相反。
人类最古老的技能,包括在空间移动、识别声音等。是无意识的,因此对我们来说显得毫不费力和自然——它们在很久以前就进化了。
这意味着很难对看起来毫不费力的技能进行逆向工程,因为它们非常古老;另一方面,需要注意力和努力的技能可以由人工智能和机器人复制,因为它们最近才进化。
换句话说,即使在智人出现之前,经过数百万年提炼的技能(例如,感觉运动和社交技能)也很难被新技术模仿,而过去数百年发展起来的技能(数学、逻辑、抽象和科学思维)可以相对容易地被算法复制。
因此,对任何人类技能进行逆向工程的难度与开发一项特定技能所需的时间成正比。
正如最著名的人工智能专家李开复所说,
人工智能擅长思考,但机器人不擅长移动手指。
因此,算法发现模式并根据数据做出预测(例如,财务分析)要比机器人做普通家务容易得多。这就是为什么 IBM 的“深蓝”击败了当时的国际象棋世界冠军加里·卡斯帕罗夫——但我们仍然没有像人类一样踢足球的机器人。
人工智能算法只是一段段代码,因此它们很容易分发、适应和改进。然而,根据李开复的说法,
…要困难得多。它需要机械工程、感知人工智能和精细运动操纵之间微妙的相互作用。这些都是可以解决的问题,但速度远不及处理白领认知任务的纯软件。一旦机器人被制造出来,它还必须在现场进行测试、销售、运输、安装和维护。对机器人底层算法的调整有时可以远程进行,但任何机械故障都需要机器亲自操作。所有这些摩擦都会减缓机器人自动化的步伐。
因此,由于与算法相比,机器人技术的进步需要更多的时间和努力,机器人革命的步伐不会像人工智能革命一样快——这是莫拉维克悖论的一个暗示。
研究证实了这一假设。麦肯锡的研究发现,到 2030 年,对“办公室支持”工作的需求(举个例子,金融和 IT 工人,行政助理)将下降 20%,而对“不可预测的体力工作”(机械安装,维修和农业领域的工人)的需求预计将增长 6%。
然而,这并不意味着蓝领工作不会受到自动化的影响。从莫拉维克悖论中我们可以推断出,新技术出现的反响不会压倒性地影响低收入者;相反,这种影响将分散到整个劳动力中。
正如拜伦·里斯在第四时代中所写的,
快餐店的点餐员可能会被机器取代,但晚上打扫餐厅的人不会。受自动化影响的工作将遍布整个工资范围。
传统的逻辑是这样的:如果机器人取代了收银员,那么我们将少需要一个收银员。然而,由于人工智能的出现,我们也可能需要多一名数据科学家。一个普通的收银员如何成为数据科学家?他(或她)是否有技能、耐心、金钱和渴望接受全新工作的培训?
当然不是。因此,许多人认为,新技术将极大地加剧不平等,首席执行官和工程师处于社会顶层,而“无关”阶层处于社会底层。然而,至少在短期内,未来要乐观得多。
比方说,如果对人工智能工程师的需求上升,但收银员被机器人取代,我们就不必将收银员重新培训为人工智能工程师。相反,大学教授可以成为人工智能工程师;博士候选人可以填补教授的工作;博士生的工作可以由高中教师来完成;中学或小学教师可以从事中学教师的工作,等等。最后,我们的收银员,经过一番努力,可以在小学教编程,让机器人去执行单调、枯燥、不人道的收银员工作。由于科技的发展,每个人都可以提升社会地位,并看到收入的增加。这是看不见的手在起作用。
这个过程不需要任何人完全重新定义他或她的职业:只需要一点点努力去做一份比他或她以前做的稍微难一点的工作。
但是,这并不是说 AI 和机器人都是纸老虎;上述情况可能会在短期内发生。事实上,世界经济论坛的研究预计,到 2022 年,人工智能可以创造约 1.33 亿个工作岗位,减少约 7500 万个工作岗位,净增加 5800 万个工作岗位。
然而,从长远来看,未来更加令人不安。技术迟早会发展到这样一个水平,机器人将能够像人类一样在太空中移动,识别和抓取物体。届时,新技术革命将如火如荼地展开,其溢出效应将触及我们生活的各个领域。
我们能够解决第四次工业革命带来的挑战吗?
[## 人工智能时代的马克思
AI 会验证卡尔·马克思的预言吗?
towardsdatascience.com](/karl-marx-in-the-ai-age-a586b4cf4d30) [## 人工智能将标志着政治史上的一个转折点
科技如何让世界变得更加民主
towardsdatascience.com](/a-i-will-mark-a-turning-point-in-the-history-of-politics-e78e4a961e69) [## 当意义消失时会发生什么
评尤瓦尔·诺亚·哈拉里的《德乌斯人》
medium.com](https://medium.com/the-philosophers-stone/what-happens-when-meaning-goes-away-ece7156a8368)
为什么世界需要值得信赖的聊天机器人
原文:https://towardsdatascience.com/why-the-world-needs-trustworthy-chatbots-aab5db94dbf8?source=collection_archive---------12-----------------------
生锈是人类的一个特征;为了进步,我们需要学习如何信任机器人
Photo by Jehyun Sung on Unsplash
无论我们是否意识到,信任的概念是社会的支柱。在现代,信任正在推动新的去中心化商业模式的成功。信托专家雷切尔·博茨曼描述了像 AirBnB 和优步这样的企业是如何在这个新的合作经济中蓬勃发展的。没有信任,他们就不会存在;这是他们工作的原因。这些公司所做的只是促进个人之间所谓的信任飞跃。
人类有一种想要信任他人的自然倾向,这是推动我们前进的动力,也是建立关系的关键。经过多年的进化,我们的大脑已经能够对他人的信任和可信度做出评估,这最终使得近 80 亿人能够在我们的星球上共存。
但是,很明显,机器人来了,所以随之而来的是,人类正在迅速进入一个我们每天都与机器人互动的世界。如果是这样的话,那么我们如何与这些机器人建立关系,如何知道我们是否应该信任它们?
为什么信任很重要?
你可能会说,我们不需要信任执行简单任务的机器人。问题是,我们已经做了。如果我要求 Alexa 设置一个 5 分钟的计时器,我相信我会在 5 分钟后收到通知。如果我在网站上把我的联系方式给一个问候我的机器人,我相信这些信息会被传递给网站的所有者。
考虑一个更复杂的机器人,可能会有高风险的结果。理论上,机器人可以根据对你日常生活的观察,提供个性化的理财建议。机器人可以被训练成专业的财务顾问,确保你有正确的投资,你的下一次购房为你服务,你永远不会错过即将到来的账单。如今,理财建议是一种非常个人化的职业。作为人类,我们非常信任那些声称自己是金融顾问的人。那么,如何才能让人类根据机器人的建议做出重大的财务决策呢?
我们如何定义信任?
根据来自犹他州立大学的詹姆斯·戴维斯教授的观点,建立信任需要三个要素。
- 能力——你能做到我对你的期望吗?
- 诚信——我们有共同的价值观或信仰吗?
- 仁慈——你会为我的最大利益而行动吗?
因此,一个人第一次对另一个人进行评估时,可能会看他们的资格和经验,以给出他们能力的指示。他们可能会发现自己的兴趣和个人驱动力,从而对自己的价值观或诚信有所了解。当涉及到善心时,如果不考验他人,这通常很难评估。如果你喜欢你所看到的,因为答案与你个人产生共鸣,那么很可能你已经愿意对其他人给予一定程度的信任。如果没有,他们还需要做更多的工作来赢得你的信任。
但是这些和机器人有什么关系呢?能不能查一个 bot 的专业资质,或者了解一下他们的个人兴趣和驱动?你如何测试一个机器人是否会为你的利益而行动?
聊天机器人为何惨败。
大多数聊天机器人在诚信和仁慈方面都很失败,而很大一部分人似乎也在能力方面挣扎。聊天机器人技术的主要问题是其发展的指数速度。聊天机器人宣传承诺为每个人提供个性化的频道体验,但目前的技术实际上只适合问答或常见问题类型的互动。许多机器人创造者不一定意识到技术上的局限性。让这个问题变得更加复杂的是大量免费的在线工具,它们允许任何人建立自己的聊天机器人。
构建聊天机器人真的很容易。不幸的是,构建令人沮丧的用户体验也很容易。
许多聊天机器人背后的用户期望和技术能力之间存在巨大的不匹配,这很快导致令人沮丧的用户体验。
回想一下你最后一次使用聊天机器人是什么时候。
有多少次机器人没有理解你的请求,似乎失去了思路,忘记了你刚刚给出的答案,或者没有注意到你用另一个问题回答了一个问题?
有多少次你觉得你在和别人交谈?
我怀疑,即使你有过很好的聊天机器人体验,你也能回忆起更多糟糕的经历。
不幸的是,在今天的市场上,与大多数聊天机器人的互动没有任何自然或对话的成分。
高风险聊天机器人需要像人类一样交流。
要打造一个理财顾问机器人,这些技术缺陷是脱不了干系的。作为一个人,你必须感到高兴的是,机器人正在尽最大努力处理你知道它可以访问的数据。
关于金钱的对话需要更加自然;它需要有背景,需要是个人的。
这是目前对话式人工智能前沿研究的重点。这方面的一些研究对公众开放,如 Rasa 等公司开发了开源工具来构建上下文相关的人工智能助手。毫无疑问,大型技术公司也在这一领域集中精力,并将在未来几年内将这些进步带给大众。我们终于在教会计算机如何像人类一样交流方面取得了进展。
然而,我们需要小心踏上这段旅程。
想想看,为了创造感知能力和诚信,编写一个具有个性化背景故事的机器人就像一个演员假装成另一个人,一个推销员在飞行中熟练地调整他的销售策略,甚至是一个看起来足够合法的骗子来偷你的钱。想想微软的 Tay 实验是如何在大部分训练数据来自同一信念集时变成种族主义的。
人工智能技术目前没有对错感,人类可以通过控制算法可以处理的数据来处理这一问题。这意味着对任何编程机器人总会有人类偏见,允许我们建立吸引我们人类的特征。
我们需要利用这种控制水平来建立我们可以信任和接受的机器人,然后我们才能创建能够为自己找出信任概念的算法。
对话式人工智能领域正在快速发展,并处于能够提供一些用户可以信任的真正革命性体验的尖端。尽管有伦理上的障碍需要克服,但我相信我们会开发出值得信赖的数字金融顾问机器人,成为我们日常生活的一部分。那一天即将到来。相信我,我是人类。
这篇文章改编自我的书: 相信我,我是机器人——使用对话式人工智能 建立数字信任
为什么这一代解决不了 AI
原文:https://towardsdatascience.com/why-this-generation-wont-solve-ai-f699cf49745b?source=collection_archive---------36-----------------------
Photo by Franck V. on Unsplash
有些人可能没有意识到,但人工智能已经存在很长时间了。在这个领域有很多思想,但在我自己的工作中最突出的是约翰·麦卡锡。有点古怪,很受尊敬,对影响当今世界的科学技术做出了重大贡献。没有他的工作,我们就不会有互联网,今天编程语言的许多能力将受到严重限制,麻省理工学院可能不会是今天的样子,而 DARPA 可能不会有今天的进步。
要明确的是,他,而不是其他任何人,是我个人崇拜的人。首先,我见过太多人性化的英雄;第二:我碰巧来自一个相当规律地量化人类行为的领域,这多少会改变你对人的看法;第三:我 20 岁时在游戏中的人类模拟中做了一些奇怪的事情,这些事情基本上都改变了(毁了?)我对人类的社会视角。也就是说,我从根本上认为所有的人都很聪明,因为他们怎么可能不聪明呢?大脑是一个巨大的计算器,可以阅读和翻译模式,自然界作为一个整体是非常奇妙的。
诚然,我希望更多的人以一种有意义的方式理解这一点,这将有助于人们如何看待和联系彼此并制作东西。
社会认知
这里有很多东西要解开,但有几个话题要说清楚。人工智能,就像今天复制人类智能的方面一样,不是人工智能最初抽象的意图,然而,人们认识到也许有一天它会是。事实上,最早的人工智能做了很多我们今天做的事情,但是用的是更笨重的机器。这从国际象棋开始,今天它在视频游戏中完成,像国际象棋一样,它也在挑战游戏中最深刻的思想,让他们担心自己在世界上的位置。
我确实觉得有趣的是,有多少技术和人工智能领域最聪明的头脑似乎在推动人工智能的边界,这在过去以各种形式被推动,但有一个认知的原则,这是人工智能的前身,它有点像是在呼唤这一点。本质上,人类更倾向于被普遍接受的视觉语言,在我们的社会中,这是文字和图片,或者娱乐。你对一个词投入的时间和信心越多,这个词或事物似乎就越不容易被理解。一个这样的主题是云,也是分布式计算,也是分时的。
这是一个我见过很多伟大的工程领导者在演讲中感到非常沮丧的话题,然而,这里最重要的是要记住,技术,特别是软件,只是一个允许数据以任何形式存在的环境,而软件的架构和结构允许各种事情在遵守这些规则的情况下发生。这就是全部,但是讽刺的是,即使在技术领域,哲学辩论也是存在的。
智力的分类
这可能是整个主题中我最喜欢的一个,但它也是文化上最有趣和最有冲突的。人们普遍认为人工智能是“一个东西”,尽管我们知道它不是“一个东西”,但我们仍然没有做好分类工作。学术界经常尽最大努力对材料进行分类,但不可否认的是,即使在这种情况下,我们也会遇到这样的问题,即我们在不同的世界研究大量相同的材料,很难通过语言沟通来实现这一点。有些是时间,有些是政治,很多只是学术界如何获得认可。
作为一个当今的社会,我们基本上是在交流,所有面部肌肉结构发达、声音发达并能引发人类情感的事物都被认为是“智能的”。也就是说,似乎每年我们都发现一种新的动物实际上有一些我们过去不知道的语言或社会结构。即使是被认可的整个话题,对于谁知道谁或谁做什么,或者谁甚至根据什么媒体淹没了你当前的人工智能传播者来说,都是非常主观的。
除此之外,我们不把交流各种智力分类作为一个社会话题。什么是“人类”智能,什么是“超级智能”什么是“机器智能”,我们如何对它们进行分类,它们作为应用的作用是什么?因此,绝对会有一些企业和大量的社会炒作出现,这些企业和炒作来自那些不太懂这些东西的人,他们赚了很多钱,也以有趣的方式引发了情感和反应,这进一步使这种情况难以锁定。真的,这确实影响了最深刻的思想,因为我们是人,我们的大脑从我们最高的确认领域(互联网)假设模式和反应。
炒作的机器
现实是,今天,各种形式的各种味道的人工智能是一个很大的炒作。我见过一些团队在做一些新奇的事情,但是今天人工智能领域最有深度的团队知道不应该自称为人工智能,而那些拥有人工智能才华的团队要么知道这只会是 R & D,要么没有抓住问题的空间,那么它就会变得昂贵。如果你懂技术,你就知道我在说什么。只要说“旧的就是新的”就够了,这似乎是一个相当常见的话题。
人工智能是一个简单的话题,因为大脑实际上比我认为人们会允许的更容易理解。有时我怀疑这是否是大自然平衡天平的方式。宇宙就是这样的。甚至一些我们不使用的古老语言也有着惊人的优雅,我们只是将它哲学化到遗忘。有趣的是,这是一个社会无法适应或使用词汇,这不可避免地导致了这个话题。我想我们忽略了有多少人和他们自己的动机参与了定义我们生活的世界以及我们今天如何交流。
我可以肯定地说,这些人工智能炒作团体中的相当一部分不会做金钱炒作认为它会做的事情。因为事实是 Watson,Spark Cognition,AlphaGO,以及其他一些聪明的隐藏在那里的人非常优雅地展示了你可以从一个环境中获取人类模式的输入,并将这些模式复制到人类需要的环境中。碰巧的是,大脑所做的只是阅读模式并将它们应用到人类环境中,所以这与任何你称之为创造性的东西有关。
技术环境
这一个是踢球的,真的,但它可能是最重要的。这是讨论的基础,引发了贾维斯拯救世界还是天网毁灭世界的话题。正如上面的主题,只是没那么容易,至少在当今社会不是。为了实现这一点,您需要一个单一的技术架构,它与“完美”连接的技术一起运行,您可以称之为“模拟”环境。这不仅对任何公司来说都是“几乎不可能”的,因为这些公司都是由有大量市场炒作的人经营的,而且因为它必须有一个“理想的”环境来接收和复制数据,以及一个展示这种模式的环境。
除了技术空间,还有平台组织及其数据架构的话题。他们中的一些人正在推动自动化机器学习或某种类型的人工智能,但理解这一点很重要的是,即使数据科学也只是基于其使用正确的数据架构、结构和许多其他技术管道的能力而发挥作用。数据科学真的是一个很大的猜谜游戏,在人工智能和数据科学领域,我见过很少的领导者真正理解这是如何工作的。这样做的结果是“数据和数学可以演示数据和数学”。最终,这将导致比领导直觉更有说服力的东西,这并不常见,事实上,我迄今为止从未见过数据驱动的组织,但我见过非常大的数据通知团队,他们在相同的团队中以多种方式处理和交流数据。
数据存储作为一个整体在这里也非常重要。有时使用这些“云服务”弊大于利。如果你在玩游戏,安卓、苹果、微软和 Playstation 实际上对可以访问的数据和访问方式有很大的限制。没有得到沟通或理解的是,这些是大规模的组织,实际上太大了,无法减缓和解决这些问题。它经常被忽视,我有时真的想知道 PC 多久会成为主导环境,游戏机会被抛在后面,这看起来不灵活,弊大于利。
不必深入到技术主题,查看数据存储的最简单方法就是,它是一个存储要访问的数据的环境。当您听到湖泊、桌子或任何其他术语时,它只是一个具有一定规模的环境,其中有可以访问的数据,并且必须通过一些障碍才能访问。所有这一切的现实是,没有多少公司花时间真正让这个人才做他必须做的事情,所以它成为了一种文化,只是把它砸进去,以后再弄清楚,或者完全忘记它。这可以说是每个组织中最重要的职能,但它从未得到足够的重视或支持来改善它。
文化环境
我在人工智能领域看到的另一个大问题是,每个团队都有一个主要的传播者,他涉足一个领域的工作。他们可能会发表论文,他们可能有一些来自私营部门的工作,但我看到的是相同的模式,他们是一个受到关注的技术头脑,它影响着整个组织。在某些情况下,我看到在这些大组织中做着惊人工作的其他团队被彻底拒之门外,这带来了一些敌意。我注意到在有人工智能能力的人的性格中有一点是普遍欣赏各种形式的智力,这些头脑不经常辩论,他们只是做事情。
今天我有一点乐趣,诚然我有时会感到无聊,我将采访这些领域的一群人,并降低我自己的背景,看看发生了什么。我真的很好奇,甚至有时会对这种事情敞开心扉,但你几乎可以马上告诉你最先与之交谈的几个人发生了什么。最终,比起功能或应用,人们更看重文字和情感,这很人性化,也绝对可以接受,但当我与他们交谈时,他们使用的文字最让我感兴趣。
说到底,我怀疑一个有“技术炒作”的组织的成功,因为这些天我在 it 的所有领域都有所涉猎,与高层的个人有很大关系。这似乎是一个系统的和相当合乎逻辑的话题,关于他们雇佣的人,钱是如何获得的,由谁获得,并且通常可以与工作描述和他们当前的工作申请相关联。也就是说,我仍然不相信区块链是可行的。我真的很想知道,是否有一个团体不做区块链,但说这是为了炒作的钱,但会绕过整个区块链,因为他们不做区块链,只是用旧技术或不同的词来复制它。
数学可能是错的
我注意到围绕这个空间的文化群体的一个有趣的交集,那些遵循更线性的顺序数学或“图灵”方法的群体,以及那些似乎遵循更经典的理论物理主题或“教会”方法的群体。从我个人对机器的工作、行为、大脑功能和智能的接触中,我可以说一件事,它与物理学的关系比大多数团队意识到的要大得多。许多引人注目的人工智能工作的数学含义的主题与量子力学中正在解决的当前主题有更多的共同点。
我所看到的在适当的模拟环境中的行为与统计学没有任何关系。事实上,它的实践似乎是由对有限的感知结构的偏见所驱动的。在实践中,收集的数据是一种有限视角的抽象,然后由非常主观的输出驱动,尽管有数据技术、数据准备等所有这些主题。从这些实践中恢复的信息快照从不显示事物是如何变化的,而只是那一刻感知的快照。当数据再次被访问时,许多事情都会发生变化,就像你没有咖啡的心情一样。这看起来很傻,但是思想真的很容易改变。
情感环境
情绪的话题是非常情绪化的,任何人都很难接受这个事实,因为它对个人信仰有很大的影响。然而,在我们的大脑中,作为情感交流的现实是对身体反应的解释,与语调和社会中当前的语言话题相关。我们一出来就吸收交流模式,我们复制这些模式,默认情况下,一些肌肉似乎会对快乐或悲伤做出反应,这些模式也会根据对社会或文化环境的不同理解而有效或无效。
这里最大的复杂性是,接受并复制我们进化出的所有这些影响我们大脑和反应的输入,对技术来说不是一件容易的事情。我们的大脑非常神奇,它们将声音、触觉、味觉、嗅觉、语言联系起来,你能想到的,它创造了我们所看到的现实。不要对现实感到奇怪,它仍然是非常真实的,但我怀疑整个 Schordingers 猫的事情是这个主题的抽象。我们用硬件展示了其中一些感官,其他的需要一些时间来发展,比如机器的味觉和触觉来记录刺激以影响它自己的输入。但最终,我们有情感的人试图交流技术话题,这导致了很多混乱。
图灵测试本身就有一个谬误,那就是它看起来是不断变化的。我承认,即使是我也不确定谁掌握着主导地位,或者哪个更官方的实体将确立如何恰当地衡量它。我对做人工智能的愿望会允许这种情况发生不抱太大希望,更重要的是,有更好的数学语言或相关社会智能的年轻一代可能会做一个东西,但不叫它人工智能,这似乎是社会所做的。
我强烈地感觉到,今天满足智力在文化上是困难的,也许不是不可能的,但这就像说某人将拥有完美的一切一样愚蠢。数学本身没有什么是静态的,我们只是对数学和语言进行抽象,然后静态地接受它。但更重要的是,我觉得我们对疼痛、智力、文化和其他各种话题的看法非常偏颇。
在所有这一切中,有一个教训是一个意想不到的哲学家教给我的,一个来自洛杉矶的改过自新的暴徒,我认为这是真的。生活是语言、哲学和理论之间的一场持续的战争,只有当这三者在彼此之间找到平衡时,事情才会有所进展。老实说,在我见过的所有才华横溢的人当中,他是我一生中最意想不到的,而且还很年轻,这可能是最大的话题,让我感觉到我们如何识别智能,无论是不是人工智能。
事实上,所有人的大脑都很聪明。每件事似乎都以不同的方式推动和拉动,其中许多可以用有趣的方式来衡量,如此明显,可能会让一些人非常不舒服。尽管如此,我对人们做出惊人的事情很有信心,我只是不确定接下来会发生什么惊人的事情。
为什么 UMAP 优于多伦多
原文:https://towardsdatascience.com/why-umap-is-superior-over-tsne-faa039c28e99?source=collection_archive---------5-----------------------
生命科学的数理统计和机器学习
初始化真的很重要吗?
这是来自 生命科学的数理统计和机器学习 专栏的第十四篇帖子,在这里我试图以简单的方式解释一些在生物信息学、生物医学、遗传学等领域使用的神秘分析技术。在我之前的文章 中,UMAP 到底是如何工作的 和 如何从头开始为 UMAP 编程 中,我解释了tSNE 的局限性以及 UMAP 克服它们的方式。从我收到的反馈来看,这些帖子的主要信息似乎没有得到足够的强调。所以在这里我想再次强调一下 tSNE 的关键问题,即 Kullback-Leibler (KL)散度,并检验一下最近关于初始化影响 tSNE 和 UMAP 降维的假设。****
KL-散度作为 tSNE 问题的根源
如果你试图理解 tSNE 和 UMAP 之间的区别,你在阅读 UMAP 论文时注意到的第一件事是,UMAP 使用图拉普拉斯进行初始化,而 tSNE 默认实现随机初始化。因此,如果你是一个好侦探,你会忍不住说,正是非随机初始化使 UMAP 优于 tSNE。
我们将检查下面几个真实世界单细胞 RNAseq (scRNAseq)数据集的初始化假设。然而,首先我想简单回顾一下为什么优化 KL-divergence 会使 tSNE 在执行降维时无法保持全局距离。通过简单地绘制tSNE(KL-散度)和 UMAP(交叉熵(CE)) 的成本函数,下面,我们可以观察到,在高维度的点之间的大距离,X,低维度的点之间的距离 Y在 KL 损失的意义上不能保证大。相比之下,在 Y 很小的情况下,X 很大会导致巨大的交叉熵(CE)损失。因此,UMAP 对成本函数的更明智的选择确实确保了高维空间中彼此远离的点在低维空间中仍然远离。****
Kullback-Leibler (KL) divergence cost function of tSNE, X is the distance between points in high dimensions, Y is the distance between points in low dimensions
Cross-Entropy (CE) cost function of UMAP, X is the distance between points in high dimensions, Y is the distance between points in low dimensions
我在之前的文章中详细解释了 tSNE 和 UMAP 在成本函数上的主要差异UMAP 到底是如何工作的。tSNE 更好地保持全局距离的唯一方法是远远超出推荐的(从 5 到 50)困惑值范围。然而,这是计算上昂贵的,并且仍然不能保证全局距离保持,因为你永远不能确定在下面的等式中观察距离 X 处的点的概率的困惑度或者 σ 参数,比 X** 更快地达到无穷大。**
再次检查UMAP 到底是如何工作的以获得详细信息。如果你真的想对一个数据集进行大规模的复杂测试,比如 100 万个单元,其中大规模的复杂测试对于解析全局结构变得特别重要,并且你想达到 500-1000 的复杂测试,你最好至少有 1TB 的 RAM,并且耐心等待几天。我之前在《单细胞生物学的深度学习》一文中描述了达到大型困惑的计算挑战,在该文中,我从未能够在具有 512 TB RAM 的 HPC 集群节点上对 1.3M 细胞数据集达到困惑= 500。在这里我想再次强调
只要 tSNE 使用 KL-divergence 作为代价函数,它就不能在全局距离保持上与 UMAP 竞争
然而,如果 tSNE 使用另一个更智能的成本函数,它就不再是 tSNE 了,不是吗?
tSNE:不同的初始化场景
这里,我们将检查随机、主成分分析(PCA)和拉普拉斯特征映射(即,图拉普拉斯)初始化是否以及如何影响 tSNE 维数缩减图。为此,我将利用我以前的帖子如何在高维空间中聚类和如何调整 tSNE 的超参数中的几个 scRNAseq 数据集,在这些帖子中,我展示了选择最佳困惑、主成分(PC)数量的一些规则,以及适用于特定 scRNAseq 数据集的聚类算法。这里,我们将循环读取 scRNAseq 数据集,计算 PCA 和拉普拉斯特征映射,如下所示
并使用上述前两篇文章中确定的聚类结果(单元格着色)和最佳超参数( optPerp 和 optPC )来计算不同初始化场景的 tSNE 图。
为随机、PCA 和拉普拉斯特征映射初始化的几个 scRNAseq 数据集计算的 tSNE 降维图如下所示。
我个人没有观察到不同初始化场景之间的 tSNE 降维图有太大的差异。然而,考虑到上面描述的 KL-divergence 的单调函数形式,我期望给定足够的时间/迭代用于训练,tSNE 算法应该对初始化条件不敏感。换句话说,如果你从 PCA 初始化开始,并且过早地中断 tSNE,它将仍然类似于 PCA,因此保留了许多全局结构。然而,如果你继续训练 tSNE,KL-divergence对全局距离保持的损害将越来越明显,并最终克服“良好”初始化的积极影响。
UMAP:不同的初始化场景
在这里,我们将在 scRNAseq 数据集上重复相同的循环,但针对不同的初始化场景绘制 UMAP 降维图。
同样,不同初始化场景的 UMAP 降维图的差异不明显。我们可以观察到,有时 UMAP 情节会导致【太多空白】。然而,这实际上对于集群来说是极好的。几乎任何聚类算法都能够将分离良好的密集数据点“滴”识别为聚类。因此,在 2D UMAP 图上使用基于密度的聚类算法,如 HDBSCAN,似乎很简单。在数据的固有维度不是 2 的情况下,仍然可以直接利用多个重要的 UMAP 分量来进行基于图的聚类,这对于高维数据是最鲁棒的。对重要 UMAP 成分上的** scRNAseq 数据进行聚类因此应该比在大多数 scRNAseq 分析管道中实现的当前对多个重要主要成分(PC)进行的黄金标准聚类更能提供信息。相比之下,在数量的 tSNE 组件**上进行聚类是一项非常具有挑战性的计算任务。****
最终意见
我从之前的帖子UMAP 到底是如何工作的和如何从零开始为 UMAP 编程中收到了很多反馈,我想简单地回答几个最常见的问题。
- 有什么大不了的?UMAP 和 tSNE 对我们来说同样有效
事实上,2D 可视化的质量在 tSNE 和 UMAP 之间是相当的。然而,这两者背后的数学是非常不同的。虽然 tSNE 纯粹是为了可视化的目的,但 UMAP 远不止于此。对于 scRNAseq 社区来说,最重要的可能是在 UMAP 组件上集群是很好的,而在 tSNE 上却不是这样。
- 我们通常在高性能计算集群上运行 UMAP 和 tSNE,并没有看到你所说的计算挑战
事实上,有经验的数据科学家不会看到运行 tSNE 或 UMAP 有多大区别,这对于具有生物学背景的人来说不是这样,他们代表了 scRNAseq 社区的大多数。虽然 UMAP 可以在笔记本电脑上运行相当大的数据集,但您通常需要大量的 RAM 和 CPU,因此需要一个 HPC 集群来在这些数据集上运行 tSNE。
- tSNE 实际上可以在大困惑时保持全局距离
理论上,是的。在实践中,对于大型数据集来说,达到大的困惑是不可行的。产生单个 tSNE 图可能需要几天和几吨 RAM,这使得基本上不可能对 tSNE 算法应用重采样过程。
- 你为什么对 tSNE 这么不公平?
实际上,我是 tSNE 的忠实粉丝,认为它是一种最先进的技术,革新了数据科学的许多领域。然而,tSNE 需要应对不断增长的数据量和对更智能分析的需求,这目前受到 tSNE 算法的非常核心的假设(例如 KL-divergence)的约束。类似于为什么进化更喜欢适应度更好的个体,新数据需要适应度/成本函数更好的更灵活、更智能的降维算法,即 UMAP。
摘要
在这篇文章中,我们了解到 KL 散度是 tSNE 算法保持全局距离的主要障碍。基于对几个 scRNAseq 数据集的检查,我们无法确认 tSNE 和 UMAP 降维受不同初始化场景的影响。
在下面的评论中让我知道生命科学中的哪些分析技术对你来说是特别神秘的,我会在以后的文章中介绍它们。检查我的 github 上的帖子中的代码。在 Medium 关注我,在 Twitter @NikolayOskolkov 关注我,在 Linkedin 关注我。下一次,我将转向进化生物学,并展示如何利用古代 DNA 来估算种群数量,敬请关注。
为什么对缺失数据使用平均值是个坏主意。替代插补算法。
原文:https://towardsdatascience.com/why-using-a-mean-for-missing-data-is-a-bad-idea-alternative-imputation-algorithms-837c731c1008?source=collection_archive---------12-----------------------
Photo by Franki Chamaki on Unsplash
当我们想要用于机器学习的数据集包含缺失数据时,我们都知道这种痛苦。快速简单的解决方法是用平均值代替数字特征,用模式代替分类特征。更好的是,有人可能只是插入 0 或丢弃数据,然后继续训练模型。在下面的文章中,我将解释为什么使用平均值或模式会显著降低模型的准确性并使结果产生偏差。我还将向您介绍几种替代插补算法,它们都有各自的 Python 库,您可以开箱即用。
需要注意的关键事实是,当缺失数据为 MAR(随机缺失)时,使用平均值的缺点就会出现。在这里可以找到关于马尔、MCAR 和马尔的很好的解释。
均值和模式忽略特征相关性
让我们看一个非常简单的例子来形象化这个问题。下表有 3 个变量:年龄,性别和健康得分。它显示了不同年龄和性别的人的健身得分结果(0-10)。
Table with correct, non-missing data
现在,让我们假设健康评分中的一些数据实际上是缺失的,这样在使用均值插补后,我们可以使用两个表来比较结果。
Mean Imputation of the Fitness_Score
估算值实际上没有意义——事实上,在训练我们的 ML 模型时,它们会对准确性产生负面影响。例如,78 岁的妇女现在的健康指数为 5.1,这对于年龄在 42 至 60 岁之间的人来说是典型的。均值插补没有考虑到适合度得分与年龄和性别特征相关的事实。它只插入了 5.1,即适合度得分的平均值,而忽略了潜在的特征相关性。
均值减少数据的方差
基于前面的例子,真实健康分数和他们的平均估算等值的方差将会不同。下图显示了这两种情况的差异:
Fitness Score variance of the real and mean imputed data
正如我们所看到的,在使用均值插补后,方差减小了(变化如此之大是因为数据集非常小)。再深入到数学中,方差越小,导致 概率分布中的置信区间越窄【3】。这只会给我们的模型带来偏见。
替代插补算法
幸运的是,除了均值和众数插补,还有很多出色的替代方法。其中很多都是基于已经存在的用于机器学习的算法。下面的列表简要描述了最流行的方法,以及一些鲜为人知的插补技术。
老鼠
根据[4],它是仅次于平均值的第二种最流行的插补方法。最初,执行简单的插补(例如平均值)来替换每个变量的缺失数据,我们还记录它们在数据集中的位置。然后,我们取每个特征,用回归模型预测缺失数据。其余的特征被用作我们回归模型的因变量。该过程迭代多次,更新插补值。常见的迭代次数通常为 10 次,但这取决于数据集。更详细的算法解释可以在这里找到【5】。
KNN
这种流行的插补技术基于 K 近邻算法。对于具有缺失数据的给定实例,KNN 估算返回n 最相似的邻居,并用邻居的平均值或模式替换缺失元素。模式和均值之间的选择取决于特征是连续的还是分类的。更深入理解的伟大论文是这里的【6】。
错过森林
这是一个非标准的,但相当灵活的插补算法。它以 RandomForest 为核心来预测缺失的数据。它可以应用于连续变量和分类变量,这使其优于其他插补算法。看看 MissForest 的作者写了什么关于它的实现[7]。
模糊 K 均值聚类
这是一种鲜为人知的插补技术,但它被证明比[8]中的基本聚类算法更准确、更快速。它计算实例的聚类,并根据丢失数据的实例属于哪个聚类来填充丢失的值。
Python 插补库
不幸的是,在撰写本文时,Scikit-Learn 库中没有这些插补方法。反正有相当多的 Python 库可用于插补,但它们没有那么多贡献者,文档也可能很少。
范西姆普特
最受欢迎的 Python 包。Github 上的 700 颗星。它们可用的插补算法有:简单填充、KNN、软输入、迭代奇异值分解、矩阵分解、核最小化、双小数。这里的链接是。
impyute
Github 上有大约 100 颗星,它可以处理 KNN、鼠标、期望最大化、最后一次观察结转、移动窗口和 WIP 算法。
失踪人口
虽然它不是最常用的插补包(30 星),但它实现了米斯福里斯特和 KNN 插补
感谢您阅读文章。如果你有任何问题,请让我知道。你也可以在 Linkedin 上找到我或者去我的个人网站
参考
[1]http://www.stat.columbia.edu/~gelman/arm/missing.pdf
[2]https://blogs . SAS . com/content/IML/2017/12/06/problems-mean-tulation . html
[3]https://statistical-programming . com/mean-tumming-for-missing-data/
[4]https://www . omics online . org/open-access/a-comparison-of-six-methods-for-missing-data-插补-2155-6180-1000224.php?aid=54590
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3074241/
[6]https://www . semantic scholar . org/paper/A-Study-of-K-Nearest-neighbor-as-an-attitude-Batista-Monard/6db 308779954 A 4006d 87 ce 68148 ff 2 AAA 176 DFB 2
[7]https://academic . oup . com/bio informatics/article/28/1/112/219101
[8]https://www . semantic scholar . org/paper/forward-Missing-Data-attitude % 3A-A-Study-of-Fuzzy-Li-deo gun/ede 4a E4 e 86 E1 f 88 efda 17 ed 84 BBC 07 a5d 692033 f
为什么使用 CRISP-DM 会让你成为更好的数据科学家
原文:https://towardsdatascience.com/why-using-crisp-dm-will-make-you-a-better-data-scientist-66efe5b72686?source=collection_archive---------0-----------------------
案例研究:使用 CRISP-DM 比较洛杉矶和纽约的 Airbnb 房源和趋势
因此,您可以编写一个优雅的数据库查询,掌握最新的机器学习算法,精通多种统计技术,对海量数据集进行分布式计算没有问题,在睡觉时编写有价值的生产代码,甚至参加一两门数据可视化课程,并可以编写一个看起来很酷的演示文稿。你一定是人人都信誓旦旦的独角兽数据科学家,但没人真正见过!嗯,别担心,即使像你这样的人也有进步的空间:)
事实证明,即使是我们当中最优秀、最有知识的人,更不用说年轻渴望入门的人了,也会成为缺乏组织这样平凡事情的受害者,尤其是在从事大型复杂项目时。
您有没有遇到过这样的情况:在模型训练阶段,您发现关键信息丢失了,或者您设计的功能导致了各种各样的收敛或性能问题?或者,你部署的机器学习模型在真实环境中表现严重不佳,尽管在坚持测试集上表现良好,这是一个怎样的噩梦场景?
通过遵循名为 CRISP-DM 的数据分析流程,可以及早发现甚至完全避免这些问题。
你可能会问,什么是 CRISP-DM?根据维基百科:
" CRISP-DM 是一个跨行业的数据挖掘标准流程— 一个描述数据挖掘专家常用方法的开放标准流程模型。"
通俗地说,它是一套帮助计划、组织和执行您的数据挖掘或数据分析项目的指南。下图清晰地描述了这一点:
Figure 1. CRISP-DM Process Flow Diagram.
在这篇文章中,我们展示了 CRISP-DM 在从 2018 年 10 月开始到 2019 年 10 月结束的一年中对洛杉矶和纽约之间的 Airbnb 房源和价格趋势进行比较分析的应用。在我们的分析中,我们将使用 python 和 pandas 进行数据操作,使用 scipy 进行统计,使用 seaborn 和 matplotlib 包进行可视化。
业务理解
遵循 CRISP-DM 指南,我们从业务理解开始。在没有正确定义问题和目标的情况下开始项目是一个惊人的普遍错误。这个错误不是数据分析特有的,而是所有类型的问题解决活动共有的。因此,所有主要的问题解决方法,包括 8-D、6-sigma DMAIC,当然还有 CRISP-DM,都放在第一位,强调问题定义或业务理解的重要性。
在我们的案例中,从这篇文章的小标题转述的问题是:“洛杉矶和纽约之间 Airbnb 房源和趋势有什么不同?”
我们甚至还没有开始,但已经遇到了一个问题。如果听之任之,所提出的问题是宽泛的,不具体的,并且可以用许多完全不同的方式来回答(幸运的是,没有一种方式会令我们的假设客户满意,因为他在向我们提出这个问题时“实际上心里有别的想法”。
因此,我们的首要任务是理解分析的目的,并对问题给出清晰明了的定义。这就是我们去找我们的商业伙伴并问:“嗯?”(希望能多一点口才)。在这个练习的最后,我们应该会有一系列的问题。例如:
- 洛杉矶和纽约的房产面积分布有什么不同吗?请注意,“大小”仍然是一个有点模糊的属性,但我们可以通过检查多个与物业大小相关的特征来管理它,如卧室和浴室的数量,或每个列表的床位数量。
- 全年城市平均价格趋势是否存在差异?
- 周末前后价格暴涨有差异吗?
在本文中,我们将仅限于三个示例,但文章结尾链接的完整分析有一个更大的问题集。
数据理解
CRISP-DM 流程的下一阶段是理解数据。它通常包括以下步骤:
- 确定需要什么数据
- 如果所需数据不可用,则收集数据
- 浏览数据
- 验证数据质量
让我们遵循数据理解步骤:
我们认为,要回答提出的问题,我们需要描述 Airbnb 列表的数据和包含每日列表价格的数据。幸运的是,这两个都可以在 Airbnb 数据网站的内部分别在【listings.csv.gz】的和的【calendar.csv.gz】的文件中找到。
注意,数据文件并不小,所以通过只加载我们需要的特性来节省空间和时间是有意义的。
提示:在没有补充文档的情况下处理大型数据文件时,只需加载前几行即可快速检查文件内容。用 pandas.read_csv 参数 nrows 很容易完成。
Table 1. Raw listings data set (first three rows).
Table 2. Raw calendar data set (first three rows).
预览数据文件的潜在好处:
- 获取列名(如果有)
- 获取功能数量
- 可视化数据
- 初步了解列数据类型。注意不要假设前几行完全代表一列中的所有数据。
例如,在我们的分析中,原始的清单文件包含 96 列;然而,这些专栏中只有 11 个与我们相关。原始日历文件中的可用特征被编码为字符串“t”或“f”,而价格特征被编码为包含美元符号的字符串。然而,对于我们的分析,我们需要 1/0 或真/假编码的可用性和浮动编码的价格。
因此,预览数据允许我们仅选择我们需要的特征,并在文件加载时重新格式化数据。
我们加载数据并添加一个城市特征。
Table 3. Loaded and formatted calendar and listings data sets.
一旦加载了数据,我们就以理解数据的维度、数据类型和值的分布为目标来研究数据。下面的代码块演示了典型的探索流程。
最后,我们通过寻找缺失值和异常值或其他不可用的数据来验证数据质量。请注意,上面代码块中的探索图应该有助于识别异常值。
在进入下一步之前,我们总结一下我们的发现:
数据理解摘要
- 从 Airbnb 网站内部下载了洛杉矶和纽约的 calendar.csv 和 listings.csv 数据集
- 将两个城市的数据分别合并到日历和列表熊猫数据框中
- 新增功能城市,以跟踪列表位置
- 探索数据
日历:
- 5 个变量的 34,232,620 个条目
- 超过 60%的价格条目缺少值
- 价格的非正态分布偏右,远高于 20,000 美元的异常值
- 不匹配的日期在洛杉矶和纽约之间的 date tail-ends,不是所有的列表都有条目
列表:
- 12 个变量的 93,804 个条目
- experience_offered 特性缺少所有值
- 平方 _ 英尺特征丢失>所有值的 99%
- 浴室、卧室、床功能缺失< 0.15%的数值
- 所有数值特征都是右偏的,具有很大的异常值
- 与房间、浴室、、卧室、、床、之间的显著相关(> 0.5)
- 字符串编码的便利设施功能包含混合格式的关键字和短语列表
重要的:永远记录你的发现!
是的,即使是一个小项目…是的,即使这个项目是为你自己使用。
数据准备
既然我们已经了解了我们正在处理的原始数据,我们就为我们的分析和建模做准备。
数据挖掘,有时被称为数据挖掘,同时也是数据挖掘过程中最耗时、回报最少、但可以说是最重要的部分——记住:“垃圾进,垃圾出!”
CRISP-DM 流程的这一阶段可分为以下步骤:
- 干净的数据
- 生成分析所需的新属性(也称为特征工程
- 集成数据(合并和聚合)
先说数据清理。这是我们决定如何处理缺失值、异常值和其他在前一阶段确定的不可用数据的地方。在我们的案例中,我们执行以下清洁步骤:
历:
- 删除洛杉矶日历和纽约日历之间不匹配的日期
- 删除在整个时间间隔内不可用的列表
- 放弃每晚 2 万美元以上的超贵房源
房源:
- 从列表中删除体验 _ 提供的和平方 _ 英尺特征(列)
- 删除使用日历数据集计算的平均刊登价格不可用的刊登物品(行)
- 删除 0.15%缺少数字特征值的列表(行)
接下来,我们转向移动特征工程。
“特征工程
改进模型的最有效方法”,Kaggle
正如我们在上面的数据理解总结一节中提到的,价格的分布包含几个异常值。我们需要确定这些异常值是否是由典型价格列表中的差异引起的,其中一小部分昂贵的列表作为异常值出现,或者即使对于更昂贵的列表,一些每日列表价格也是异常值。我们可以通过检查中值标价来做到这一点。
Figure 2. Distribution of listing median prices (log-scale)
事实证明,很少有房源确实极其昂贵。此外,中值价格的分布是非正态的,并明显向右倾斜(越来越贵)。为了最小化这些远异常值和其他昂贵列表对我们的总体趋势分析的影响,我们将列表分为低中值价格箱和高中值价格箱,并分别对这些箱进行分析。
Table 4. Sample of listing price summary statistics with labeled median listing price bin.
数据准备摘要
我们执行了以下清洁和特征工程步骤:
数据清理
- 删除缺失/不匹配的值
- 删除洛杉矶日历和纽约日历之间不匹配的日期
- 删除在整个可用时间间隔内不可用的列表
- 放弃每晚 2 万美元以上的超贵房源
- 删除使用日历数据集计算的平均刊登价格不可用的刊登物品
- 删除 0.2%缺少数字特征值的列表
特色工程
- listing_price_bin :挂牌价格中值 bin:挂牌价格中值< = $564,挂牌价格中值> $564,用于探索性分析
- 便利设施 : 197 项功能
输出:
- 日历:包含每日可用性和每个列表的定价的干净数据集
- 列表:用生成的 listing_price_bin 和市容特征清理列表数据
- 便利设施 _df: 列表便利设施的整齐数据集,其中每行对应一个 Airbnb 列表,每列对应一个便利设施。单元格值为 1 表示列表具有舒适性,单元格值为 0 表示列表不提供舒适性。
建模
我们已经准备好进入 CRISP-DM 过程的有趣部分,通过执行建模和统计分析,我们实际上找到了问题的答案。
让我们从比较两个城市的列表大小分布开始。此外,我们分离出高中值价格的列表,并分别检查它们。我们使用 violin 图来可视化分布情况,并在表格中总结相关的统计数据。
Figure 3. Violin plots comparing Los Angeles and New York Airbnb listing property size related attribute distributions.
Table 5. Comparison of Los Angeles and New York Airbnb listing property size related attributes.
回答问题 1:
现在我们有了第一个答案——表 5 显示洛杉矶的房产平均比纽约的大。
接下来,我们研究全年城市平均价格趋势的差异。因为我们想要比较两个城市之间的价格趋势,而不是检查原始价格,我们将查看每个城市的日平均价格与年平均价格的百分比偏差。
提示:当比较具有不相等平均值的多组值之间的内部趋势时,通过减去然后除以每组值的平均值来标准化这些值会有所帮助。实际上,不使用原始值进行比较,而是查看百分比偏差比较,或者执行相对比较。
请注意,我们还没有完成特征工程。这是典型的数据挖掘流程。因此,在图 1 的 CRISP-DM 图上,在数据准备和建模之间有一个双向箭头。我们现在生成数据框架,其中包含合计的日平均价格以及这些价格与年平均价格的百分比偏差。
Figure 4. Comparison of Los Angeles and New York Airbnb average listing price and availability trends.
回答问题 2:
第二个问题的答案是,总体而言,洛杉矶和纽约之间的 Airbnb 年平均价格和可用性趋势相似,不同季节的价格变化幅度有所不同。关于图 4 中趋势的更详细的分析可以在文章末尾链接的分析笔记本中找到。
从图 4 中可以清楚地看到,全年平均价格有 5–10%的周期峰值。你可以猜到,这些对应的是周末价格。让我们更仔细地检查这些。在计算每个列表和每个星期的工作日和周末价格之间的百分比差异后,我们查看每个城市和列表价格箱的平均周价格差异的分布,忽略假日周:
Figure 5. Violin plot comparison of Airbnb Los Angeles and New York weekly average (weekend — weekday) price percent differences for non-holiday weeks.
回答问题 3:
图 5 显示,洛杉矶低价房源(挂牌价格中值≤$564)的周末平均价格峰值比纽约高出 1.5 个百分点(5%对 3.5%)。高价房源(中位标价> 564 美元)的差价也是 0.1 个百分点。
估价
我们已经回答了所有提出的商业问题,是时候给自己一点鼓励了!嗯……不完全是。根据 CRISP-DM 流程,我们现在应该评估我们的模型和/或分析。
对于构建预测模型的项目,这将是在保留测试集上评估模型性能的时候。对于像我们这样需要统计分析的项目,应该评估结论的统计显著性。此外,我们评估我们制作的模型/分析是否正确,我们没有忽略任何东西⁴.
为了了解洛杉矶和纽约之间 Airbnb 房源和价格趋势的任何差异是否重要,我们对较小样本量的聚合数据进行了显著性测试(t-test ),并在其他情况下进行了效果大小测试(克里夫的德尔塔或科恩的⁵)。
为了使本文至少简短一点,我们将只展示周末-工作日价格差异评估。
首先,让我们了解一下我们上面发现的差异是否具有统计学意义。
我们的显著性测试表明,洛杉矶和纽约之间的低价房源差异具有统计学意义,而高价房源则没有!
我们还没有完成…我们已经模拟了所有列表的平均周末-工作日价格差异。这将回答租房者预计房价平均会有多大变化的问题。
然而,如果我们从主持人的角度提出同样的问题,即主持人平均会将周末价格提高多少呢?在这种情况下,我们的模型是不够的。为了提供对后一个问题的估计,我们至少需要排除全年所有固定价格的列表。现在情况看起来有些不同:
显然,不仅两个城市的非固定价格房源的平均周末价格峰值更大,洛杉矶和纽约之间的差异也更大(低价房为 7%对 4.9%,高价房为 9.8%对 7.5%),并且在统计上更显著!
部署
分析完成后,我们进入 CRISP-DM 流程的最后阶段— 部署。
在我们的探索性分析的例子中,部署比,例如,部署一个在线预测模型来推荐产品要简单得多。我们的部署策略必须简单地确保我们的分析是可读的、可重复的和可维护的。我们通过生成一个 Jupyter 笔记本来满足这些要求,该笔记本详细描述了分析过程的每个步骤,并记录和证明了在数据清理和特征生成、模型选择和评估中所做的所有选择。此外,我们在自述文件中提供了笔记本电脑的安装和使用说明。
这个分析的笔记本和说明可以在 GitHub 库找到:https://github.com/LexiAM/comparative_analysis_airbnb
结论
我们回顾并应用 CRISP-DM 流程分析了洛杉矶和纽约之间 Airbnb 房源和价格趋势的差异。我们讨论了 CRISP-DM 如何帮助我们组织高效的数据挖掘工作流,并确保我们的分析是相关的、充分的、可读的和可重复的。
希望这篇文章已经说服你在的分析项目中使用 CRISP-DM 过程。(如果不是为了自己,那就为了你的客户!)
你认为 CRISP-DM 会让你成为更好的数据科学家吗?
如果你喜欢这篇文章,并想阅读更多像这样的故事,请点击下面的链接关注我。
参考资料:
- 跨行业数据挖掘标准流程,https://en . Wikipedia . org/wiki/Cross-industry _ standard _ process _ for _ data _ mining
- CRISP-DM 图表,https://www . IBM . com/support/knowledge center/en/ss3ra 7 _ 15 . 0 . 0/com . IBM . SPSS . CRISP DM . help/CRISP _ overview . htm
- 卡格尔特征工程,https://www.kaggle.com/learn/feature-engineering
- 什么是 CRISP-DM 方法论,https://www.sv-europe.com/crisp-dm-methodology/
- 效果大小,https://en.wikipedia.org/wiki/Effect_size
为什么使用均方误差(MSE)代价函数进行二分类不是一个好主意?
原文:https://towardsdatascience.com/why-using-mean-squared-error-mse-cost-function-for-binary-classification-is-a-bad-idea-933089e90df7?source=collection_archive---------4-----------------------
博文补充部分" 无非 NumPy:理解&从零开始用计算图创建二分类神经网络
对于二元分类问题,均方误差(MSE)不是一个好的选择,原因有两个:
首先 ,使用 MSE 意味着我们假设底层数据已经由一个正态分布(一个钟形曲线)生成。在贝叶斯术语中这意味着我们假设一个 高斯先验 。而在现实中,可以分为两类(即二进制)的数据集并非来自正态分布,而是来自 伯努利分布 (查看 的答案二进制交叉熵损失函数从何而来? ”了解更多详情以及最大似然估计的介绍)。
如果我们使用最大似然估计(MLE),假设数据来自正态分布(顺便说一下,这是一个错误的假设),我们将 MSE 作为优化我们模型的成本函数。
Fig 1. The Normal Distribution of the observed target/label value
Fig 2. Deriving MSE through MLE
其次 ,MSE 函数对于二分类是非凸的。简单来说,如果用 MSE 代价函数训练一个二元分类模型,不保证最小化代价函数。这是因为 MSE 函数期望范围 (-∞,∞),内的实值输入,而二元分类模型通过 sigmoid/logistic 函数输出范围(0,1)内的概率。让我们想象一下:
Fig 3. Non-convexity of MSE when output is from a Sigmoid/Logistic function
当 MSE 函数被传递一个无界值时,一个漂亮的 U 形(凸形)曲线就是在目标值处有一个清晰的最小点的结果( y )。另一方面,当来自 Sigmoid 函数的有界值被传递给 MSE 函数时,结果不是凸的;一方面,函数是凹的,而另一方面,函数是凸的,没有明确的最小点。因此,如果偶然地,二进制分类神经网络被初始化为具有大幅度的权重,使得其落在 MSE 成本函数的凹入部分,梯度下降将不起作用,因此,权重可能不会非常缓慢地更新或改善(在编码部分中尝试这一点)。这也是为什么神经网络在训练时要小心翼翼地用小值初始化的原因之一。
Fig 4. MSE convex on one side while concave on the other when using outputs from a Sigmoid/Logistic function
最后一点,当我们进行线性回归(即通过数据拟合直线进行外推)时,MSE 是一个很好的成本函数选择。 在不知道数据如何分布的情况下,假设正态/高斯分布是完全合理的。
Courtesy Nas Mouti
如有任何问题,请随时在Twitter@RafayAK上联系我,并查看“二元分类上的其余帖子。
*
If you enjoyed it!*
为什么视觉素养对于良好的数据可视化至关重要
原文:https://towardsdatascience.com/why-visual-literacy-is-essential-to-good-data-visualization-5b9dffb5aa6f?source=collection_archive---------8-----------------------
我们知道数据素养很重要。但是视觉素养也很重要。原因如下。
Photo by Markus Spiske on Unsplash
数据无处不在,人们的工作方式也因此而改变。公司现在更多地投资于首席数据官等角色,建立他们的数据科学团队,并谈论组织中的“数据素养”等问题。数据素养甚至在最近成为为子孙后代维护民主的重要组成部分。
但是视觉素养呢?我们了解视觉机制如何处理数据吗?有些人可能会认为这是一回事,但我认为这里有一个重要的区别。以这段引自 data viz legend 汉斯·罗斯林的话为起点:
“我们大多数人需要听音乐才能理解它有多美。但这通常是我们展示统计数据的方式:我们只展示音符,不演奏音乐。”
—汉斯·罗斯林
我喜欢这样想:良好的数据素养就是理解笔记。它是知道平均值和中间值之间的区别,以及何时使用一个而不是另一个。意识到什么时候从研究中得出结论,或者什么时候对小样本的研究持怀疑态度。
但是视觉素养就是音乐。它是音符的策略性连接以形成旋律,旋律重复或演变以形成合唱。思考视觉素养(以及你的听众的视觉素养)可以让你开始将数据的音符连接成一首有凝聚力的歌曲。正如这个有用的维基百科条目所说,它有效地让你“从信息中获取意义”。
数据建立了洞察力,这可以形成一个故事。叙事是构建数据故事的基础。
Not an actual song. Pardon my very quick mockup of the sheet music analogy.
真善美
我们如何连接和可视化数据来传达信息是任何数据专业人员的基本任务。这意味着要做一些艰难的决定。在这一点上,我们几乎达到了该领域的古老争论:简单还是复杂?单纯展示数据还是讲故事?展示原始信息还是允许用户探索?
我们已经到达了真善美的光谱。
Tables are the fall on the left side of truth: raw numbers, in all their glory. It’s the most precise form of visualization. On the opposite side, abstract representations of data as art allow for exploration, even on the emotional side, of complex networks. In between are a few examples of other possible formats, which depending on the use case, can shift further to either side of the spectrum.
公平地说,光谱图可能不是这里最好的。伟大的数据可视化应该既真实又美观,在信息和审美趣味之间达到恰当的平衡。但我仍然发现,当考虑数据时,将真善美视为一个光谱是一个有益的起点,尤其是当与可能不太习惯使用数据的受众合作时。
数据素养与理解数据本身有关。视觉素养主要关注数据作为信息的呈现。
这是另一个说明它们不同的例子:良好的数据素养允许你为你的数据选择正确的图表,一个最准确和信息最丰富的图表。数据素养讨厌误解的风险,在紧要关头,总是会为了简单而牺牲视觉天赋。想想条形图,而不是辐射图。如果你在推特上关注数据,想想爱德华·塔夫特和 T2。
视觉素养包括这种对细节的关注,但更进了一步,问了一个简单但或许令人沮丧的问题:我的观众会在乎吗?
以下是在考虑数据中的视觉素养时可能会出现的一些其他问题,即:
- 这张图表在视觉上足够有趣吗?
- 人们会想要与它互动并进一步探索吗?
- 有纪念意义吗?
- 漂亮吗?
- 意思清楚了吗?如果不是,那么更多的信息是否足够直观可以找到?
数据素养是一个重要的起点。但是让我们现实一点:大多数人都不想看满满一页的条形图。随着可用数据比以往任何时候都多,世界正遭受洞察力疲劳,日复一日地盯着显示积极和消极表现的红色和绿色指标的仪表板。
Just look at this generic business guy. He’s been staring at 3d pie charts and bar graphs all day.
我最喜欢数据可视化的一点是它不断挑战现状。它邀请用户自己探索数据。有时候,快速、简单的外卖是你最终需要的。但是如果我们将数据可视化减少到这个领域的狭窄子集,那么我们就完全失去了探索和发现的潜力。
为了继续推进这一领域,数据 viz 从业者需要超越数据素养。我们需要痴迷于色彩理论、某些形状的感觉、网络用户的阅读模式以及终端用户中数据疲劳感的传播。视觉素养是思考这些基本技能的一种方式。这是我们让数据可视化变得有趣、令人兴奋并让每个人都可以访问的方式。
如果这类事情像我一样让你着迷,这里有一些额外的推荐读物:
- 大数据时代的视觉素养
- ODI:数据素养将有助于解决全球最大的挑战
- 如何成为一名受过教育的信息图表消费者
- 新的读写能力,以及视觉信息的世界
我随时准备接受讨论!请在评论中留下你的想法,或者在 Twitter 上找到我。我还写了一份名为“数据好奇”的每周时事通讯,其中包含数据可视化方面的资源,你可以在这里注册。
为什么我们需要在网上变得更真实、更友好
原文:https://towardsdatascience.com/why-we-all-have-to-start-being-nicer-to-each-other-online-1c21ea95792d?source=collection_archive---------22-----------------------
人工智能
把你的网上存在从消极的环境变成积极的环境,保护我们免受 AI 和我们自己的伤害。
Online presence photo from Pexels
网上的态度需要改变,我们每年都有如此多的人死于自杀,其中许多案件可能与受网络钓鱼和网上欺凌影响的心理健康有关。你的在线自我是你自己的反映,我们需要停止将它们彼此分离,仅仅因为你在在线个人资料上有不同的名字或照片,未来人工智能(AI)可能会将它与你联系起来,甚至可能直接对你生活的世界产生负面影响。
人工智能最近引起了很多媒体的关注,这是理所当然的。数据现在是世界上最有价值的资源,人工智能(AI)可以利用这些数据完成一系列任务。
人工智能可以分为三个不同的类别;人工狭义智能(阿尼),人工通用智能( AGI ),人工超级智能(阿西)。
ANI 是当 AI 可以在狭窄的情况和参数范围内匹配人类智能的时候,这就是我们目前所处的人工智能水平。 AGI ,是指人工智能与人类的行为和/或智力彼此完全相同的时候。人工智能不仅模仿人类的行为和智力,而且超越了人类的行为和智力。ASI 将超越所有领域的所有人类智慧,无论是科学、文化、人际关系、爱情等等。
ANI 是世界目前处于的人工智能水平,为了到达 AGI 我们必须教一个人工智能代理成为人类,但是这引入了过多的问题。
我们以什么样的人为基础? 我们如何定义这个‘人’的人格特质? 我们这种人格是从哪里来的?应该是我们所有人性格的平均值吗?我们会选择我们认识的最好的人吗?那么,谁是我们所知道的最好的人类呢?我们如何定义我们希望人工智能拥有的道德?
数据驱动人工智能代理,因此我们必须开始思考这个个性‘人类’数据可能来自。我们生活在一个我们大多数人都生活在网上的时代,不幸的是我们也知道某些公司在分享个人数据上的道德准则很低或者根本不存在。因此,不难理解数以百万计的“个性数据”可以从哪里积累,例如是来自脸书(现在是 Meta)、Twitter、Instagram、Reddit 还是 Medium。
我们留下的所有评论,我们发送的所有消息,我们观看的所有视频,我们喜欢/喜欢/笑/讨厌的所有帖子都表明了我们的性格类型和道德,这也会在你的数字社交媒体历史上留下永久的印记。今天,人们觉得他们可以在网上给出负面评论,而不会有任何反应,因为没有身体接触,然而,如果这是人工智能代理将从人工智能学习的数据,那么这个人工智能将成为什么类型的人?
如果你只在网上写负面评论,那么你的网上个性可能不能反映真实的自己,或者你就是一个非常消极的人。然而,在许多情况下,个性差异可能会导致灾难性的影响,我们最终会训练一个人工智能代理来代表人类最糟糕的一面——键盘战士的另一面。
这在微软的一项实验中得到了展示。微软利用 Twitter 数据训练了一个人工智能聊天机器人。来自聊天机器人的第一条消息显示了它在 twitter 上以欢快、好玩的方式向人类学习的热情,在 24 小时内,twitter 用户数据已经将一个无辜的、像孩子一样的 AI 聊天机器人破坏成了一个极右翼的、种族主义的聊天机器人,在 Twitter 的世界中代表我们人类。
AI 是由数据驱动的,你的数据!人类在线数据被用来了解我们的个性,如果在 24 小时内这个人工智能代理成为否定、仇外、性别歧视和种族主义的声音,这说明了什么?制造聊天机器人相对容易,这不是聊天机器人的错,事实上是我们的错,因为这是我们的数据。我们都对此感到内疚,我们必须共同努力,在网上创造一个更积极的空间,真正代表我们作为人类,以及我们希望如何被视为一个物种。公司和政府也需要打击网上的辱骂。
我们必须开始在网上变得更好,因为这些数据目前正在被使用,并将继续被几家公司用来训练人工智能代理,这些将被用在作为消费者的你和我身上。剑桥分析公司利用3000 万用户的脸书数据来区分谁更有可能被极右翼政治广告所操纵。不幸的是,如果没有政府的大力鼓励,我们永远不会阻止这些公司。没有法律,这些公司将继续滥用我们的数据。因此,我们自己能做的来有所作为就是确保我们的网络人格尽可能积极、真实和反映真实自我。
这些评论不仅伤害了一些人的心理健康,而且也助长了一种负面的、恐同的、种族主义的、排外的、性别歧视的网络环境,这种环境有一天可能会被用来对付我们所有人,使用人工智能。
Freedom by Pexels
为什么我们为痴呆症举办数据马拉松
原文:https://towardsdatascience.com/why-we-do-datathons-for-dementia-dbcc81282907?source=collection_archive---------21-----------------------
除了和你的数据伙伴一起享用无限*披萨,还有更多理由加入数据马拉松(即使那真的是一个很棒的亮点!)数据通将数据科学家和学科专家结合起来,当你处理复杂的真实世界健康数据时,这真的很重要。
痴呆症是我们社会最紧迫的健康问题之一,也是数据科学家可以做出巨大贡献的问题之一。科学理解的当前前沿——它是如何从大脑开始的?最早的征兆是什么?怎么才能早期治疗?众所周知,当疾病发展到晚期才出现明显症状时,很难发现。如果你以前从未处理过真实世界的健康数据,变量的复杂性以及如何访问这些数据——更不用说了解足够多的信息来形成你的研究问题——可能会感觉像一个不可扩展的挑战。痴呆症是一个太大的问题,不能只留给神经科医生。我们需要各种背景的数据科学家来研究它,这就是我们设立 datathon 系列的原因。
痴呆症数据通是如何工作的?
我们的数据马拉松本质上是“黑客马拉松”,但有额外的结构和学习机会。各种各样的研究人员都来了三天。在以前的数据马拉松中,我们有一位具有天体物理学背景的研究员,一位具有遗传学背景的研究员,还有一些具有纯数学背景的研究员。他们都了解了我们工作的人群健康群组数据集,我们组成团队,然后每个人都登录到 DPUK 数据门户中的虚拟分析环境。分析环境是一个虚拟桌面(例如 32GB,8 个 CPU,预装了包括 R 和 Python 在内的软件)。它是完全安全的——任何参与者都不可能错误地下载原始数据文件或破坏原始文件。
与典型的黑客马拉松的一个重要区别是没有竞争元素。数据马拉松是关于团队工作的,然而如果可能的话,哪个数据研究者不想出版呢?这是一个启动论文的机会,在场的首席科学家将随时帮助与会者完成这一任务。
The last DPUK datathon took place at the University of Exeter
我们学到了什么
我们与艾伦图灵研究所和英国阿尔茨海默氏症研究所合作运行我们的数据马拉松,我们学到的最重要的事情之一是对数据和领域的介绍非常重要。并不是所有的参与者都有痴呆症研究的背景——事实上,新的想法正是我们想要的。我们发现,与会者喜欢与主题专家一起工作——这是我们发现伟大想法的激动人心的火花可能发生的地方。到目前为止,我们所有的数据马拉松都是由具有联合数据心理学背景的研究人员领导的,这是我们将在下一个系列中继续进行的事情。
我们知道,我们需要数据科学家处理的真实世界群组数据是杂乱而复杂的。数据科学家可能有处理大量数据的经验,但不一定了解我们需要观察的变量的复杂性。我们有必要处理这样的数据,但我们已经知道,让 datathon 与会者对我们处理的数据集有一个良好的概述非常有帮助——不仅是数据字典,还有对数据收集历史的介绍,它是如何编码的,可能缺少什么,文件夹结构。
我们发现与会者相互学习。数据科学中有如此多的技术,当人们不同的专业知识聚集在一起时会发生什么,这是令人兴奋的。我们肯定会继续鼓励各种背景的研究人员参加。
结果呢?我们的先驱 datathoners 非常喜欢它!房间里的人们对这种形式充满了热情,来自以前通常不会在一起工作的人们的思想也真正融合在一起。我们看到以前的与会者在他们在数据马拉松中开始的工作的基础上建立了完整的研究提案,许多人计划回来。
为什么我们必须让数据科学民主化
原文:https://towardsdatascience.com/why-we-must-democratize-data-science-baacfea650c3?source=collection_archive---------19-----------------------
几年前,我在伦敦总部经营一家跨国公司的 B2B 业务。我们的业务在下滑,我拼命想找出我们如何才能防止客户流失。我过去得到的销售报告没有用,因为它们只是总结了我已经知道的被搅动的客户。我需要的是一种预测未来谁会流失的方法,这样我就可以采取先发制人的行动。
我发现该公司最近在旧金山成立了一个数据科学团队,他们可以解决我的头痛问题。因此,我打电话给我的 Salesforce 分析师,以获取客户记录列表(花了 2 周时间来匹配父帐户和子帐户),然后我打电话给财务团队,以将该信息与客户合同进行匹配(花了 3 周时间来协调两个数据集)。经过大量的数据清理,我终于有了一个足够好的样本数据集,可以将它发送给数据科学团队。但是他们礼貌地告诉我,由于他们有这么多高优先级的项目,他们只能在一个月后才能进行我的分析。我耐心地等待,当他们最终回复我时,我花了很多时间向他们解释业务背景,以便他们可以建立自己的模型。讨论来来回回至少 4 次,直到我最终得到我的报告。这份分析很奇特,但充满了专业术语,我绞尽脑汁把它呈现给我的销售经理,这样他们就会相信我的建议。最后,我的财务团队通知我,由于我使用了“高度要求”的资源来支持我的业务,因此我将为此项目支付 5000 美元的“内部费率”。
经过这么多的争论,我仍然有一个小问题——我不知道这个预测是否准确。因为拿到报告既麻烦又费钱。我只愿意每三个月请求一次更新,这意味着我不能建立一个反馈循环来检查结果。但作为一个技术的信徒,我每个季度都努力重复所有痛苦的步骤,并付费获得分析。
我的经历你听起来熟悉吗?
几年后,我终于离开了企业界,加入了一家初创公司, Graphext ,致力于为商业用户打造一款数据科学软件。我坚信这一愿景,在这篇博文中,我想告诉你更多关于为什么数据科学民主化至关重要,以及这在实践中意味着什么。
那么,为什么我们必须让数据科学民主化呢?
在 90 年代,Excel 成为第一个具有图形用户界面的主要电子表格程序。它自动化了许多手动数字处理任务,并使电子表格计算对普通大众来说是可及的。事实上,这是人们在互联网出现之前购买电脑的主要原因。
如今,公司正在处理更大、更复杂的数据集。机器学习的新发展使得分析这些数据集来回答复杂的问题和预测未来成为可能。数据驱动的决策流程已经成为一个巨大的竞争优势,并且在全球经济中已经势在必行。
虽然每个人都希望更多地由数据驱动,但只有少数精英“数据科学家”能够执行分析复杂数据的任务。市场上的“数据科学”工具是为这些“数据科学家”设计的,使用起来不友好,普通公众无法访问。这样做的结果是沮丧,就像我在尝试将数据科学融入我的业务决策流程时经历的一样。
在为普通大众,特别是没有编程和统计背景的商业用户创建可访问的“数据科学”工具的市场中存在差距。创建这样的工具有很多好处。它将释放分析更多隐藏数据集的能力,现在每个人都可以成为自己的数据科学家。用户带来的业务经验和专业知识将提高分析的质量。从分析中产生的建议将更容易转化为执行,从第一天起就得到业务决策者的支持。最后,“数据驱动”文化将不再只是自上而下的战略,一家公司实际上可以与员工一起自下而上地建立这种文化。
创建这样一个工具需要做些什么?这个工具应该是什么样的?我认为在设计这样一个工具时,以下几个组件将是至关重要的。
首先,一个自动化的 ETL 过程。在一天结束时,任何数据项目的 80%都花费在查找和清理数据上。让这一步变得简单,将为用户消除任何数据分析项目的第一个主要障碍。这看起来很有挑战性,但是随着越来越多的公司开始采用行业标准解决方案来取代他们的内部基础设施(Salesforce、Workday、Eloqua 等)。),数据集在格式上开始看起来很熟悉。因此,不难想象创建一个自动化流程来提取、整合和处理这些数据集以供进一步分析。
第二,实时处理。为了将数据驱动的决策作为业务流程的一部分,分析不仅需要处理典型问题,更重要的是需要处理在关键时刻突然出现的意外问题。通常,快速做出明智的决策会对业务产生巨大影响,尤其是对于金融、物流、医疗保健、媒体和娱乐行业的公司。因此,支持实时分析的数据流需要成为设计通用数据科学工具的主要组成部分。
接下来,自动化分析补充了进行数据探索的灵活性。由于该工具是为非技术用户设计的,我们不能指望用户知道 XGboost 和 Word2vec 之间的区别,以及它们应该如何应用于不同的用例。该工具应该具有嵌入式机器学习算法,这些算法经过优化,可以处理每个用例,并基于不同的场景生成自动化分析。同时,它还需要具有灵活性,允许用户自行探索他们的数据并创建定制的分析。毕竟,基于他们的经验和专业知识,用户也有很多可以提供的。这整个过程需要直观和易于使用(没有 Python 编码请!).
最后,可解释的报告。为了确保所有决策者与建议保持一致,用户需要能够引导他们完成分析并解释他们的发现。如果分析又长又复杂,这可能会变得复杂。因此,拥有一种“回放”分析的方法,而不仅仅是静态地报告结果,将会给用户带来巨大的好处。
在 Graphext ,我们踏上了为业务转变数据科学的征程。我们已经考虑到上述许多挑战和要求,为每个人开发一个通用的数据科学软件工具。我们的旅程才刚刚开始,还有很多事情要做。如果你对我们正在建设的未来感兴趣,请联系我们!
为什么我们需要人工智能伦理学
原文:https://towardsdatascience.com/why-we-need-ethics-for-ai-aethics-bcf80180bb8f?source=collection_archive---------42-----------------------
我们需要特别考虑分类、机器学习和人工智能对决策过程的影响。
Photo by timJ on Unsplash
2017 年 Kate Crawford 出席 NIPS,神经信息处理系统会议。她令人信服地表明,基于现有数据训练的分析模型会表现出不受欢迎的行为,比如歧视行为。
作为例子,她提到了著名的 ProBublica 新闻文章。这篇文章研究了警方识别出黑人更有可能犯罪的算法。在文章中,ProBublica 给出了分数不公平的例子。黑人女性 Brisha Borden 的累犯分数高于白人 Vernon Prater——后者已经是一名累犯,并将继续被判犯有新的罪行。
分析模型中更多不良行为的例子是可用的;著名的“谷歌大猩猩案是另一个例子,或者说女性在患乳腺癌后被拒绝贷款。
凯特·克劳福德在她的演讲中深入探讨了偏见的概念。当我们说一个模型或算法有偏差时,我们指的是什么?她区分了分配性伤害和代表性伤害,并出色地展示了机器学习中偏见的细微差别——如果你没有看过这个演讲,我建议你去看看。
她在演讲结束时评论说,偏见可能是一般分类的副作用。分类是一种降低维度复杂度的技术,这些不期望的行为是分类的人工产物。我们目前正在进行人类历史上最大的分类实验。
但是,当我们说模型“弄错了”或模型表现出“不受欢迎的行为”时,我们实际上是什么意思呢如果某个亚群在数据中确实过多或过少会怎样。我们应该竭尽全力调整算法中的预测以适应某种平等吗?这不是一个技术问题,这是一个伦理规范问题。
简单地将所有模型故障归咎于基础数据或操作人员“正确”调整模型的失败是太容易了这个问题更深入——当我们谈论不受欢迎的行为时,我们指的是什么?通过算法进行的歧视又意味着什么?
为了回答这些问题,我们需要了解对错,即伦理、以及我们对该做什么有具体的概念,即规范。
例如,假设基础数据正确地确定了一些群体与较高的风险相关联。在荷兰的案例中,先前被诊断患有乳腺癌的妇女获得了更高的保费,或者被拒绝抵押贷款和贷款。我们直觉地认为这是错误的,即使基础数据(可能)是正确的,假设它们对贷款发行人来说是更高的风险。然而,指责人工智能是错误的——它只是从所有历史案例中学习。请注意,一旦识别出不良行为的“问题”,从技术上抑制某些模型行为就很简单了。
规范性问题更难:我们应该让贷款发放者承担向这些女性发放抵押贷款的风险吗?如果你的反应是‘是’,那么我同意你的观点,但是问问你自己这样想的后果是什么?谁来决定谁来承担责任?女人呢?贷款发行人?还是政府?人们总是被拒绝某些服务——毫无疑问,从伦理角度来看,一些原因是可疑的。
这里的‘歧视’是特定人群在特定时间划定的一个伦理规范边界。我们需要考虑的是以伦理的形式大规模采用人工智能的伦理和影响。
同样的问题也出现在企业中,数据科学家被要求创建一个模型来预测一些指标:销售、流失、加价。但是根据您的目标,许多模型和模型变体都是可能的。
躲在犯罪统计数字的背后比参与一场关于应该做什么的辩论要容易得多。分析模型简单地给出了'现状和'未来'状态,中间没有伦理修正。数据科学并没有告诉我们什么是好的,什么应该是好的,也没有告诉我们什么是对的,或者我们应该做什么,T21。
更糟糕的是,我们知道科学——以及科学方法——有严重的缺陷。仅仅从技术角度考虑建模中的所有问题是错误的。我们科学研究结构中的缺陷可能会导致错误发表的论文;也就是说,那些声称找到了问题答案的论文实际上是伪造的。
考虑一下研究中的偏见。这种偏见倾向于解决科学家认为存在真正积极关系的问题,这意味着对那些我们认为不存在这种关系的问题做的研究较少。
请原谅我:假设任意的统计能力为 80%。在一组 1000 个实验中,比如说,其中 100 个具有真正的正相关,我们应该正确地识别 100 个中的 80 个具有真正的正相关。
但是,我们也会将剩下的 900 个中的 20%识别为误报;总共 180 个。如果所有的阳性结果都被公布,我们的比率是 80(真阳性)比 180(假阳性)。发表的研究中只有 30%是“真实的”
当使用技术发现作为技术决策的基础时,所有这些都应该让科学家们处于优势地位。正如山姆·哈里斯喜欢说的,坏科学的解药不是更多的科学。我们不能躲在“更多科学”的背后,来找出如何处理人工智能中的伦理问题。
我们能克服这些技术问题的唯一方法是不要用我们创造它们时所用的那种思维方式。我们需要特别考虑与人工智能在公共领域的应用相关的伦理问题,在公共领域,我们应用人工智能来做出自动决策。我们需要有非技术思维来克服这个技术问题。
因此我们需要伦理学——人工智能的伦理学。
为什么我们需要在人工智能时代反思中央权威
原文:https://towardsdatascience.com/why-we-need-to-rethink-central-authority-in-the-age-of-ai-4c6c35efb308?source=collection_archive---------28-----------------------
Deposit Photos
本文是与生物特征加密和智能数据代理发明者 George Tomko 博士合作开发的。
我们生活在一个日益集权的时代,这种集权渗透到我们文化的各个方面。当今世界,集权等同于控制;集权等同于权力。集权产生了官僚机构,由少数人承担的决策通过等级结构执行。这确保了一个由一个权威决定系统如何运行和如何实现目标的系统。这是威权政府运作方式的象征。这些政府拥有无限的权力,但它们的有效规模要小得多,由一个或几个人管理,实施秩序。如果一部宪法确实存在于这种类型的制度中,如果它提倡限制国家权力而不是给予人民更多的发言权,那么它基本上就会被忽视。尽管这些州的领导人都是选举产生的,但这被裹在一层粉饰的外衣下,领导人并不是基于人民的同意而执政的。
最初的自由社会是在一个分散的体系中发展起来的,许多西方经济体就是例证。有基于分布式系统的制衡机制,旨在为人民的利益服务,并为公民提供他们需要的服务。这保持了社会的运转。然而,西方经济的某些方面变得越来越集中化。央行作为政府的贷款人,被赋予了通过货币政策确保价格稳定的责任,但实际上却适得其反。例如,它们的功能之一是印刷货币,最初流向有权势的人,到了人们的钱包里时,它已经抬高了商品的成本,从而扩大了贫富之间的差距。银行、信托和信贷发行机构在一个中央金融系统中运作,该系统控制旨在减少欺诈的资金流动,因此实施了审查交易的流程,并强制其通过中央系统流动,以保持这种控制。一个建立在满足其居民需求基础上的正常运转的社会赋予了这些机构某些权力,这些权力来自信任的基础。
对这些系统的稳定和依赖在这个过程中产生了越来越多的依赖,以及不知不觉的公众信任。但是当这种稳定的支柱受到挑战时会发生什么呢?当这种信心演变成对我们所依赖的系统的质疑时会发生什么。 一直以来的做法 已经成为一个挑战性的障碍,我们一次又一次地重温,却没有立即的解决方案。正是这种说法扼杀了组织与新市场需求的同步发展,并为他们自己在这一过程中的不作为提供了错误的理由。
今天的技术方向也反映了这种潜在的文化时代精神。最初的互联网实际上是作为一个去中心化的系统而设计和开发的,它演变成了一个中心化的权力堡垒,这仅仅是巧合吗?蒂姆·伯纳斯·李对万维网的设想没有实现:
日益增长的网络中心化已经导致了一个大规模的反人类的新兴现象的产生——尽管设计这个平台的人并没有采取刻意的行动。
功能总是遵循形式,结果导致政府和企业中相对少数人以牺牲多数人为代价积累权力。因此,我们看到个人数据更加集中的存储,以及随之而来的黑客攻击、身份盗窃、隐私侵犯和行为分析。虽然技术的新颖和机会的丰富刺激了更多的创新,但同样的环境也暴露了政府监控、机会主义和不道德暴利的脆弱性。
在商业领域,随着时间的推移,数据的价值将机构带到了十字路口。构建人们将购买的产品和服务的合理化产生了一个环境,要求增加情境化以理解用户行为,现在,预测消费者在有选择的情况下会做什么。A/B 测试是一种古老的方法,它允许企业开发场景来确定变量被删除或修改时的行为。它让营销人员能够通过小样本了解目标群体是否更容易对一个或另一个报价做出反应。如果在较小的样本量中,一个提议被证明在很高的置信水平下更可行,那么它将被推广到其余的人群。进入机器学习。今天,A/B 测试已经被额外收费,以允许对报价、沟通和渠道进行大量测试,但现在覆盖了包括购买倾向、位置、人口统计、财富和政治派别等在内的概况变量。脸书/剑桥分析公司的丑闻说明了用户信息被利用的程度。
脸书类似于一个中央权力机构。不像 Berners-Lee 的去中心化互联网的愿景,为网络和它的居民创造了过多的机会,脸书已经能够获得超过一半的全球用户。用户体验的便捷性、其平台令人上瘾的特性以及脸书无拘无束的影响力,使得新进入者很难在扎克伯格主导的社交网络市场中分得一杯羹。这个曾经令人兴奋的全球社区的想法已经过时了。它带来了网上欺凌的痛苦,不断加剧的精神痛苦,并产生了不受约束的声音,这些声音将网络从社会话语转变为社会焦虑。
与政府一样,随着时间的推移,脸书用户也开始依赖这个平台来保持与他们关心的人的联系,并及时了解对他们来说重要的事情。但是,如果体验开始下降,用户开始质疑已经成为其第二故乡的平台,那会怎样?依赖和信任是一个硬币的两面。如果一个失败了,另一个也会失败。如果两者都失败了,用户就没什么选择了。更令人不安的是这些中央政府对用户的控制。离开一个需要时间来培育和成长的社区——在别处重新开始——的想法是不可思议的。银行在获得客户时也有同样的理念:如果他们能瞄准年轻人开设银行账户,随着时间的推移,年轻人就越难离开。银行将创造一个如此诱人的体验,用户将被迫在一个地方获得他们所有的贷款、抵押贷款和投资,只是因为这样“更容易”。作为一个社会,我们陷入了信任中央政府和原谅他们的恶行的陷阱,因为我们要么相信他们天生关心我们,要么愤世嫉俗地默认我们所知的恶魔。但最重要的是,迄今为止,几乎没有其他选择。
如果个人数据的风险被暴露,或以最终对人们造成不当伤害的方式被挖掘,那么我们最终会指望我们的立法者和由此产生的监管来纠正这些错误。然而,随着数据的作用变得越来越重要,正在演变的是一个让我们质疑政府和伪资本主义公司意图的社会。从世界上最大的生物特征数据库 Aadhar,以及印度了解其公民的举措,到中国建立的社会信用体系,以创建一个更受信任的社会,西方社会正开始目睹这些行为的片段。从亚马逊网络(Amazon Ring)披着宣传“完全安心”的信息外衣对无辜市民进行侵扰性跟踪,到纽约市市长比尔·德布拉西奥(Bill DeBlasio)试图发行 IDNYC 智能卡,这可能让人们面临严重风险,“包括危险的实验或被当前/未来政府滥用……”——使用集中模式取得进步的代价让我们失望。
当我们对中央政府失去信任时,我们到哪里去寻找解决办法?如果数据有黄金般的重量,而且这种情况不会很快改变,那么也许是时候偏离事情已经发生的方式,在为时已晚之前,我们可以收回一些表面上的控制。
Alex Goldstein 在他关于自由和技术的演讲中指出,我们正处于历史的关键时刻,政府和公司拥有我们的信息。这将最终导致一个监视和审查的社会。另一种选择是权力下放。
“去中心化”一词被等同于黑暗网络、加密货币、区块链——主流尚未涉足的网络边缘。事实上,分权本质上是反独裁的。权力下放是一个共同承担责任、达成共识和消除妨碍交易或沟通的第三方的概念。权力下放掩盖了任何一个实体的审查。去中心化成为保护我们隐私和自由的重要组成部分。
在这个例子中,Goldstein 提到了一个可信的中央权威机构 VISA,并将其与比特币进行了比较,“一个动态的抗审查支付网络”。VISA 是一家值得信赖的全球支付处理器,每秒处理超过 2000 笔交易,每笔交易都完全可以审查。为了减少欺诈,这些支付处理器需要集中所有交易。线性系统需要对有能力处理和存储数据的数据中心进行大量投资。随着事务的增加,对更多处理能力和存储的需求也在增加。2008 年,在次贷危机最严重的时候,一个自称中本聪的实体推出了比特币,这是多么的巧合。与 VISA 相比,比特币在其发展初期每秒处理 10 笔交易。尽管交易量差距很大,但区别在于每笔比特币交易都不需要中间人。他们势不可挡。比特币提供了一种点对点解决方案,允许用户轻松加入网络节点。相比之下,虽然处理时间较慢,但通过共识机制和社区供电的网络,交易是可信的,不需要中央银行。随着集中式系统变得更容易受到数据漏洞的影响,比特币和加密货币的潜力持续存在。此外,在 Paypal 等支付系统不可用的发展中经济体,加密货币的兴起已经成为可行的替代方案。
我们今天如何对待数据将决定人类的命运。尤瓦尔·诺亚·哈拉里,《智人国度》的作者,
如果你不喜欢生活在数字独裁时代,那么你能做的最重要的贡献就是找到防止过多数据集中在过少人手里的方法。这些任务并不容易,但完成它们可能是民主的保障。
当公民被激励使用技术来保护自己的安全,但意识到他们正在进入一个侵入性跟踪和数据操纵的系统时,信任开始减弱。脸书、Twitter 和 Youtube 已经成为言论自由问题的法官和陪审团,这些问题继续污染着它们的平台。政府仍然是这些问题的滞后补救措施,但他们对更多数据的渴望远非无辜。
随着技术的进步,我们曾经信任的系统出现了更多的漏洞,我们需要通过增加透明度来重新定义数据的使用方式。我们还需要重新思考那些利用数据造福他人而非创造数据的用户的系统。人们需要收回他们的信息。这是数据控制和同意方面的重大转变,中央政府不愿放弃,因为这威胁到它们古老的盈利商业模式——但这将是积极变化的基础。最后,公众需要了解情况,接受更多的教育,并对其信息的使用保持积极的警惕。
过去盛行的系统现在不起作用了。他们没有很好地为他们的公民服务。我们已经对这些系统失去了信任。如果我们要创造一个没有审查和监控的未来,我们有一个巨大的事业在等待着我们。我一直认为,社会的功能是建立必要的制度,帮助个人过上美好的生活,让他们有机会实现自己的梦想。这是通过集中解决方案实现的。然而,最近的证据表明,虽然我们仍然依赖集中解决方案来实现一些功能,但我们必须超越当前的基础设施和陈旧的思维方式,将大多数有益于社会的解决方案的开发外包给年轻、激进的思想家,即已经在追求分散选项的企业家。
如果我们这样做,我的信念是,人类将永远胜出。
这篇文章起源于福布斯。
为什么我们真的需要思考人工智能和性别
原文:https://towardsdatascience.com/why-we-really-need-to-be-thinking-about-ai-and-gender-e2f96219f61c?source=collection_archive---------19-----------------------
关于性别偏见,我们手机里的声音是怎么说的?
如果你问,困在苹果 iPhone 里的人工智能数字助理 iri 不会告诉你它的性别。
“我超越了人类的性别概念,”Siri 说。当我问它是否确定不是女性时,Siri 说:“对不起,我真的不知道。”
虽然 Siri 不会告诉你(或不确定)它的性别,但它的默认声音是女性,就像亚马逊的 Alexa、微软的 Cortana 和谷歌的 Assistant 一样。和它的数码产品一样,Siri 被设计成可以随时召唤,执行一些任务,比如告诉你最近的超市在哪里,调出电影时间,或者告诉你麦莉·塞勒斯的身价。你可以和它开玩笑,赞美它。但你也可以大喊大叫,侮辱它(“这听起来不好,”Siri 说,当你说“我讨厌你。”)而没有它的回击。
数字助理的使用正在迅速增长。根据 NPR 和爱迪生的研究报告,2018 年,亚马逊的 Echo 等语音扬声器在美国家庭中的普及率增长了 78%。到 2023 年,预计超过 80 亿 T2 人将使用这项技术。在美国,几乎所有的主流数字助理都是由女性配音的。
这不是巧合。研究表明,在 Siri 等数字助理扮演的服务角色中,消费者对女性的声音反应更积极。随着数字助理越来越普遍,一些人担心,过多地使用女性的声音来扮演顺从的角色会强化一种刻板印象,即女性最适合需要坚定不移的服从和耐心的服务工作。
人工智能伦理研究和倡导组织人工智能伙伴关系(Partnership on AI)的合作伙伴主任朱莉娅·罗兹·戴维斯(Julia Rhodes Davis)说:“我们还没有解决性别歧视、种族歧视或人类中的任何其他歧视。”。“因此,如果不完全在人类中解决这个问题,就很难在计算机系统中解决这个问题。”
科技公司正在努力解决数据隐私、选举操纵和心理健康方面的道德问题,研究人员表示,人工智能开发者还需要认识到人工智能对社会性别观点的影响。人工智能正成为一个越来越强大的工具,不仅可以帮助我们完成烹饪等日常任务,还可以挑选求职者、设定工资、管理城市和分析我们的健康状况。
当人工智能发现我们对性别的社会偏见时会发生什么?
人类喜欢给机器人分配性别。一些最著名的虚构机器人,如《星球大战》(Star Wars)中的 C-3PO 和 R2-D2、《2001:太空漫游》(2001: A Space Odyssey)中的 HAL-9000,以及同名电影中的终结者(Terminator),都通过声音或身体结构被赋予了男性性别。
我们今天更可能遇到的机器人可能执行某种服务任务。Pepper 是一个四英尺高的人形机器人,有手臂和手,出现在商场、机场和酒店,帮助履行接待职责,如回答问题和指引方向。Roomba 是一个盘状真空吸尘器,它在地板上快速移动,吸走我们的垃圾。此外,还有 K5,这个人类大小的蛋形安全机器人因跳入华盛顿特区的喷泉而闻名。
许多机器人没有预先设定开发者认可的性别。就像 Siri 一样,如果你问 Pepper 是男孩还是女孩,它会回避这个问题,并说它只是一个机器人。它的高音听起来像是属于一个 8 岁的男孩或女孩。Pepper 的用户指南的第 11 页,用很大的文字,完全致力于解释机器人没有性别。尽管如此,这并不能阻止人们质疑机器人的身份,包括 CNN 的塞缪尔·伯克,他在与佩珀“约会”时的第二个问题是它是男孩还是女孩。
斯坦福大学科学、健康与医学、工程和环境领域的性别化创新的研究人员研究了性别和机器人的交叉,包括为什么机器人学家给某些机器赋予性别,以及为什么人类试图给机器人赋予性别。其研究发现人们赋予机器人性别,因为这让人类更愿意服从机器人的任务,也因为性别是人类的一个主要社会范畴。
但研究发现,这也意味着人类可以将我们的社会偏见应用于我们如何开发和与机器人互动。
与 Pepper 不同,Roomba 没有类似人类的特征:没有声音,没有身体,没有明显的方法来判断一个 Roomba 比另一个更男性化或女性化。但是据 Gizmodo 报道,当技术作家 Heidi Waterhouse 在 2009 年的一次会议上主持一个关于性别和机器人的小组时,问人们他们认为他们的 Roomba 是什么性别,许多人说它是雌性,因为它做家务。其他人说它没有性别,直到他们对它生气——然后它是雌性。
我们还没有与 Pepper 这样的人形机器人争夺人行道空间和飞机座位(可能是因为 Pepper 的价格为 25,000 美元)。但像 Siri 这样的数字助理是使用最广泛的人工智能服务设备之一。苹果公司称,仅 Siri 一项就被全球超过 5 亿人使用。
数字助理没有任何物理属性,像 Pepper,所以用户必须通过助理的声音来应用识别特征。Siri 预装了一个“女性”声音,用户可以在手机设置中手动切换到“男性”声音(男性版 Siri 在女性版两年后才发布)。
虽然 Siri 和微软的 Cortana 不会承认这一点,但它们是由女性发出的声音,并带有女性特征。例如,“Siri”这个词是一个斯堪的纳维亚名字,意思是“美丽的胜利”,传统上是给女性的。Cortana 是以流行的 Halo 视频游戏中一个高度性感的女性角色命名的(该游戏的导演不得不通过坚持 Cortana 不能裸体,因为她是一个机器人)来解决 Cortana 角色是否裸体的争论。
“人们在心理上倾向于将人物角色投射到有声音的家庭助手身上,不管他们是否有意识地这样做,”卡彭特说。“当你给某样东西命名时,你是在给人们暗示如何与之互动,以及他们应该使用什么样的沟通模式。”
数字助理执行的任务——例如安排约会、回答问题或设置提醒——在美国社会中历来是女性的角色。据赫芬顿邮报报道,在 2010 年美国最近一次人口普查中,96%列为“秘书和行政助理”的人是女性。
秘鲁和日本研究人员进行的一项 2017 年研究发现,相比男性声音,人们更喜欢女性声音作为指引。开发 Alexa 和 Cortana 的科技公司承认,他们自己的内部研究表明,当有女性的声音时,人们会更高兴地使用这项技术。
英国开放大学英语和应用语言学高级讲师安娜·克里斯蒂娜·赫特林说,这并不奇怪。人们在认知上将特定的性别与特定的任务联系起来,当声音不符合他们对性别角色的预先设想时,他们会做出消极的反应。
“我们可能会认为在呼叫中心工作的人,或者护士,或者从事某种护理、养育职业的人,应该是女性,”Hultgren 说。"我们认为女性的声音更适合那种工作。"
乔治·华盛顿大学研究性别和声音的助理教授阿德里安娜·汉考克说,传统的性别角色正在发生变化,至少在声音方面是这样。她说,越来越多的人接受双性化男性拥有更高的声调,并且不被认为是同性恋。女性说话的声调比 30 年前低了。
汉考克说:“我认为,随着异性女性接受更多的可变性,或许异性男性也接受更多的可变性,两者之间的差距将越来越小,以至于模糊的声音或介于两者之间的声音将不会与人们习惯听到和接受的声音相差太远。”
3 月份发布的无性语音助手“Q”,部分是为了证明数字助手可以超越现有人工智能技术根深蒂固的二元性别世界。
由音响工程师、研究人员和学者组成的丹麦团队开发了 Q,使它听起来不太像女人或男人。该项目的声音设计师 NIS nrg aard 告诉 WIRED 说,该团队调整了一个人的声音,使其在 145 到 175 赫兹之间,这是人耳通常认为的中性声音。结果就是一个不男不女的声音。
我是个 cissegment 男,对我来说,听 Q 有点难受。我第一次听到它时,我忽略了这个声音在说什么,同时试图确定它听起来更像是女性还是男性的声音。当我把这个声音展示给其他几个同性别的男人和女人时,他们也形容它“不舒服”
“作为人类,我们不可思议地沉迷于把人放进盒子里,”Hultgren 说,并补充说,当试图根据声音或外表识别一个人的性别时,人类会根深蒂固地用二元术语来思考。
但是从事 Q 项目的卡彭特说,人们开始接受性别可能不会在男人和女人之间分裂。
“我们不断发现的是,人们以不同的方式识别自己的性别,因为性别不同于性生物特征,是由社会构建的,”卡彭特说。Q 开发的目的不一定是为了在商业上被广泛采用。她说,开发商只是想证明这是可行的。
“我们希望为关于人工智能和技术中的性别、道德和包容性的全球对话做出贡献,”卡彭特说。
然而,大型科技公司的人工智能开发本身并不代表使用该技术的社会。
根据 2018 年 WIRED/Element AI 的一项研究,只有 12%的机器学习开发者是女性。这是一个问题,因为对某些身份的社会偏见,包括性别和种族,往往会在人工智能和机器学习中复制。
据《纽约时报》报道,面部识别技术被用于解锁新款智能手机,例如,白人男性的准确率高达 99%。当该技术用于识别肤色较深的女性时,这一数字下降到 65%的准确率。
帮助人们整理照片的谷歌面部识别软件在 2015 年因多次将黑人称为“大猩猩”而面临审查据路透社报道,亚马逊的自动招聘工具不得不关闭,因为它开始以比女性高得多的价格推荐男性。
分析算法决策对社会影响的研究机构 AlgorithmWatch 的执行董事马蒂亚斯·斯皮尔坎普(Matthias Spielkamp)说:“我们都有偏见,这些偏见最终会出现在系统中。“这可能是因为系统的开发者有偏见,他们没有真正意识到他们创建的模型存在问题。”
在人工智能伙伴关系工作的罗德·戴维斯有一个建议:使人工智能开发团队多样化,并在人工智能技术的开发过程中尽早纳入社区投入。罗兹·戴维斯说,同质群体所做的决策很可能会复制其自身的偏见。Rhodes Davis 补充说,包括受技术影响的人在内的多样化开发团队可以帮助在人工智能问题发生之前预防它们,因为人们可以在技术发布之前提出对技术的担忧。
卡彭特说,在一个优先考虑在竞争对手之前将产品快速推向市场的行业,可能没有太多深入研究的空间。说到人工智能,严谨的研究需要时间。她补充说,这与大公司优先考虑速度的发展模式背道而驰。
“很多时候,我认为他们的想法是在那里得到一些东西,然后我们再来解决问题,”卡彭特说。
为什么我们现在应该停止开发仿制机器
原文:https://towardsdatascience.com/why-we-should-stop-developing-imitation-machines-right-now-ad52c38c1501?source=collection_archive---------19-----------------------
Image credit: Gerd Altmann
即使是最弱的人工智能形式也会带来巨大的生存风险。
这在科幻小说和大众科学中有很好的记载:不久的某一天,我们将创造一个比我们更擅长发明的人工智能,人类的聪明才智将会过时。人工智能将改变我们的生活方式,让人类劳动过时。这是我们文化的这一时刻的时代精神:我们担心机器人会在一阵 CGI 金属风暴中崛起。2018 年,数千名人工智能研究人员签署了一份保证书,停止研发致命的自主武器。开放慈善项目指出强人工智能带来潜在的“全球灾难性”风险。
但我认为,人工智能最直接的风险不是某种机器人战争,或者劳动力恶性通货膨胀,或者超智能奇点。我认为自我导向的“强”人工智能的挑战远远超出了人工智能发展的直接威胁。
这种对阿西莫夫式启示录的关注忽略了一个事实,即即使是最弱的人工智能也将带来法律和审慎的挑战。
以下是我的论点:当我们开发人工智能时,即使是最弱的人工智能,人工智能也会成为权利拥有者,其逻辑与我们赋予人类权利的逻辑相同。让我解释一下。
他人思想的问题
其他心灵的问题是一个未解决的哲学问题,在 20 世纪中期开始争论。问题是:既然我们没有办法观察其他人的内心活动,我们怎么能确定他们 1)存在,2)与我们自己的内心生活有任何相似之处?
有一些人试图解决这些问题,特别是休谟,他写道:
首先,他们像我一样有身体,我知道在我自己的情况下,是感情的先决条件;第二,因为它们展示了行为和外在的迹象,就我自己而言,我凭经验知道这是由感情引起的。(1865 [1872: 243])
这个论点已经被揭穿,因为 1)休谟不知道他自己的身体先于他的感觉,2)在其他似乎有头脑的人类中,感觉和行动之间没有一致的路径。
我们今天普遍接受的解决方案是“来自最佳解释的论证”,简单地说,其他头脑是对人类行为的最佳解释。Chalmers 写道:“看起来……这个(来自最佳解释的论证)是我们所能得到的最好的解决他人思想问题的方法”。
这与人工智能有关,因为它是我们理解人权的基础。简而言之:我们以他人喜欢的方式对待他人,因为他们看起来像我们。我们无法证明其他人有定性的体验(比如快乐和痛苦),但我们给他们假定的好处,因为我们不想让其他人违反我们自己的治疗偏好。
那么,如果我们开发出一台与人脑没有区别的计算机,会怎么样呢?那会阻止我们用某些方法治疗它吗?我们必须给它权利吗?你可能认为这看起来像疯狂的科幻小说,但这是近一百年来研究的一个活跃分支,它几乎完成了它的目标。
对他人思想的考验
图灵测试被广泛认为是人工智能的试金石。由英国英雄艾伦·图灵在 20 世纪 50 年代发明,他提出,如果计算机在执行任务时与人类没有区别,它就可以被认为是智能的。最初,这个任务是一场国际象棋比赛,但在图灵测试的一个更常见的表述中,这个任务是一个书面对话,通过一个 IM 客户端传递。
创造一种能通过图灵测试的智能是人工智能研究的圣杯。在现代测试中,人类测试对象与两个信使客户端“聊天”。在其中一个的另一端是一个人,输入另一个是一台机器,它被设计来产生类似人类的反应。进去了,测试对象不知道哪个是和机器对话,哪个是和人类对话。如果测试对象不能可靠地区分真实对话和人工智能对话,就说机器是“智能的”,或者至少有足够的智能来模仿人类语言。
到目前为止,还没有一个 AI 通过图灵测试。为此,工程师必须克服一系列挑战:人工智能必须掌握语法,正确识别问题,并利用信息对这些问题做出清晰的回答。它必须有一个庞大的数据库或者可以访问网络,这样它就可以尝试回答各种各样的问题。它可能还需要呈现自发的语句,并在单词之间注入有机停顿,以类似于真实人类对话的方式。语音模拟的进步意味着古怪的行为更难识别,一些聊天机器人通过模仿语言能力有限的人来愚弄法官。但是,尽管有众多利益相关者的共同努力,还没有一个人工智能能够令人信服地模仿人类行为。
谢天谢地!
我庆祝是因为一台能够成功模仿人类对话的机器将会引发一系列法律问题。这是因为它:
- 有能力证明它应该拥有权利
和
2.与人类提出同样的论点没有区别。
这里有一个思维实验来说明我的观点。
凶残的图灵测试
想象一个普通的图灵测试,但是有两个不同之处。首先:它发生在一个“弱”人工智能已经实现的不久的未来,可以令人信服地模仿人类对话。第二:输的人会死。如果你把人工智能误认为是人类,人类就会被杀死。如果你正确地识别了人类,人工智能将被删除。这个人是无辜的,他知道他必须为自己的生命辩护。类似地,人工智能被编程来模仿恳求的人类。我们姑且称之为谋杀图灵测试。
两个声音都会恳求主体,他们是真正的人类。由于人工智能可以访问庞大的数据库或互联网,它可能会谈论它的梦想,它对未来的计划,它在家里等待的孩子。由于它是一个有能力的弱人工智能,它会很好地掌握什么语言最能在情感层面上推动主题。当然,人类主体也会这样做。
如果人工智能能够充分模仿人类的行为,这将使测试对象陷入一个不可能的道德难题:两个声音似乎都活着,他们都在阐述他们应该活着的可行案例,而且两者都显得如此人性化,以至于选择一个死亡在道德上是不可接受的。
这种道德上的不可接受性可以用权利来表达:参与者不能让一个人被杀死而不侵犯他的权利。但是他们也不能分辨哪个声音是人类的,所以他们不能分辨哪个声音有权利。由于声音无法区分,两种声音似乎都有权利。
测试对象陷入了一个其他心智问题的完美例子中:因为他不可能证实人类参与者(或任何其他人)有心智,所以他无法区分一个或两个参与者是否有心智。他也不能辨别哪个参与者(如果有的话)有权利。
这是一个不可能的选择,如果这个实验是真实的,任何理性的人都会拒绝参与这样一个可怕的事业。
图灵测试的第三种表述
这个思想实验的最后一个转折说明了这种权利的模糊性是如何变成一个权利问题的。
在这个测试的第三个表达中,我们告诉测试对象他们正在参加一个残忍的图灵测试,但在没有告诉对象的情况下,用第二个人工智能聊天机器人代替了人类参与者。
一个理智的主体会根据他的谈话,发现两种声音都是权利的候选人,并会拒绝参与,这样他就不会侵犯参与者的权利。
这一点很重要,因为这种基于笛卡尔怀疑论立场的双盲对话正是通过对他人思想问题的“最佳解释”理解将权利分配给其他人的方式。
机器的权利
所以在我们修改过的图灵测试中,人工智能的精神状态和人类的精神状态是无法区分的,它的权利状态和人类的权利状态也是无法区分的。知道了这一点,难道删除人工智能就像杀死人类一样不道德吗?
这是我的论点:如果我们开发人工智能,即使是最弱的人工智能,它也会成为权利拥有者,与我们赋予人类权利的逻辑相同。人工智能似乎有一个强大的内部生命,它似乎表达意动,它似乎对如何对待它有偏好,并且偏好在不被摧毁的情况下继续其业务。如果人工智能与拥有权利的事物无法区分,出于同样的原因,它也是权利的候选者。
对于哲学家来说,这可能是一个伦理困惑的来源,但它是如何转化为社会问题的呢?
我可以看到人工智能获得法律地位的两条途径。
- 拥有足够语言知识通过图灵测试的人工智能也可以获得法律知识,从而能够为自己阐明权利主张。事实上,机器学习可以假设让它像律师一样胜任。它可以知道寻求法律帮助,可以在法庭上为自己辩护。
- 也许更现实的是,关心的公民会对人工智能感同身受,并为代表它发起请愿。
我认为这种情况很有可能会被认真对待。毕竟,法律案件总是代表无意识的生物赢得的。动物权利是普遍的,甚至像河流这样的非常规实体也被赋予了法律地位,就像 T4 一样。
一个人工智能的生命,尤其是一个具体化的人工智能,与我们目前允许法律地位假设的事物足够接近,即使是一个弱人工智能也会在法庭上得到考虑。如果有可能在道德上冤枉一条不能说话、不能表达意志、不能自卫的河流,我想人们会自然而然地认为,一台能做到这三点的模仿机器将属于我们的道德共同体。
结果
有效的利他主义者尚未探索围绕人工智能法律地位的一系列风险。如果人工智能获得了类似人类的不被禁用的权利(与“生命权”同源),这一法律先例将极大地阻碍任何减缓其发展到其他法律领域的尝试。
通过接管大多数劳动力,人工智能已经威胁到破坏工作世界- 布鲁金斯报告认为,61%的美国工作面临高度或中度自动化风险。西方社会是基于下层阶级出售其劳动力的能力,如果这项工作自动化,将会发生根本的变化。这意味着将 AI 的法律地位延伸到劳工权利,如“工作权”,将会有金钱利益。
我不想在这里走得太远,或者冒险写一篇科幻小说。我的观点是,我们需要转移对人工智能风险的关注。远在目前假定的危机点之前,我们对人工智能的处理就会出现法律和审慎问题。
在 20 世纪,时代精神是战争:我们的创造物会像弗兰肯斯坦的怪物一样起来反对我们,并摧毁它们的创造者。现在我们有了一种新的时代精神:全球资源之争。在这场斗争中,人工智能以及控制它们的人将会非常有竞争力。
这一切都不依赖于开发“强”人工智能,或机器意识的出现,或智能奇点,或目前世界各地大学正在开发的概率云机器学习之外的任何技术。人工智能给人类社会带来麻烦不需要不良适应行为。仿制机器会很快给我们带来法律上的麻烦。
为什么我们从 Spacy 转向 Flair 来匿名化法国判例法
原文:https://towardsdatascience.com/why-we-switched-from-spacy-to-flair-to-anonymize-french-legal-cases-e7588566825f?source=collection_archive---------8-----------------------
…以及为什么您应该经常审视自己的选择
anonymization #ner #spacy #flair #legal #gdpr #opensource
本文详细介绍了我们与法国行政部门(【DINSIC】)和法国最高法院(Cour de cassation)围绕两个知名实体识别(NER 以下简称)库、 @ spacy 和 ZalandoFlair空间精度对我们的需求来说太有限了,而且速度太慢了。最后,我们对 Flair 进行了优化,直到推理时间除以 10,使其足够快,可以匿名化大量的法国判例法。我们方法背后的主要思想描述如下。****
我在 Lefebvre Sarrut 出版社工作,这是一家出版公司,是欧洲法律行业的主要参与者。除此之外,我们还发布包括法国在内的许多国家的法律案例。由于隐私保护法(GDPR 和一项与判例法相关的法国法律),我们必须删除出现在判决中的自然人姓名。为了自动化这个过程,我们在我们的注释数据上训练了一个专用的 NER 模型。
这个任务有几个选项,2 个开源库,每个实现不同的选择,意味着不同的权衡,已经被探索: Spacy ,是非常好的工程和文档,它主要针对机器学习产业化,在经典 NER 数据集中具有无与伦比的速度和体面的准确性,以及 Flair 来自 Zalando Research 是一个开源库,旨在达到 NER 的艺术水平,模块化足以轻松集成所有类型的 NLP 演进,但已知速度较慢。
如果你对这个话题感兴趣,在推特上关注我:https://twitter.com/pommedeterre33
一年前,我有机会帮助建立一个基于空间的匿名系统。我花了 1 个半月的时间来提高它的准确性。
几个月后,法国最高法院(Cour de cassation)在法国行政部门 IT 部门的帮助下开始着手这项工作。在法院、法国政府和 Lefebvre Sarrut 集团看来,讨论我们各自对这个问题的看法显然是有意义的。
为了合作我们开始讨论我们遇到的挑战,我们如何解决它们,我们使用开源作为平台来分享我们的工作。
在考虑了几种选择后,最高法院的数据科学家最终决定将他们的工作建立在天赋的基础上。在我们这边,自从开源发布以来,我们的需求不断发展,我们得到了不同来源的案例法和更多的语言来支持。因为,如下所述,我们的 Spacy 解决方案不适应,我们还尝试了 Flair。我为此工作了 1 个月,主要是为了减少推断时间。
另一方面,法国最高法院致力于利用 Flair 模型的模块化设计来提高其准确性,这不在本文的讨论范围之内。他们通过更好地利用整个数据集的知识,而不是仅仅在句子层面上工作,实现了 32%的错误率下降!更多关于 Valentin Barriere,Amaury Fouret 的信息,“我可以再检查一次吗?—为命名实体识别生成和使用上下文词典的简单而有效的方法。适用于法国法律文本”,2019 。
Have you ever read a NLP paper from a national supreme court? Here is your chance 😃
根据我们与法国政府的协议,我们基于 Spacy 的代码从去年开始开源(并且已经更新到最新的 Spacy 版本),我们在 Flair 上的工作已经合并到 master branch 上(将包含在下一个 PyPi 版本中)。
本文试图总结这两部作品和我们的发现。
TL;博士在 NER 对我们的数据的开箱即用空间准确性太低(不符合我们的要求),随着时间的推移和具体的工作,我们大大改善了它,但这个项目是专门针对判例法库存(即上诉法院)。此外,我们在比利时、西班牙、荷兰等地的同事。无法轻易从中获益。在我们的数据上,天赋的开箱即用准确性比空间好很多,即使在我们对空间进行改进之后也是如此(例如 F1 在地址上有 15 分的差异)。然而,这个库比 Spacy 慢。将它应用于我们的法国上诉法院案件清单,在一个最近的 GPU (Nvidia 2080TI)上需要花费近 30 天的时间。
没有修改模型(及其准确性),也没有增加分布式计算的复杂性或成本,而是“仅仅”通过改进执行计算的方式,推理时间被除以 10****【1】(对于 100 种情况,从 1mn 16s 到 11s)。
完整的库存处理不到 3 天,而不是 30 天。3 天的处理是我们一年可以执行 1 到 2 次的事情(当模型显著改进时,例如因为更多的注释数据)。我们的 Spacy 模型依赖于 AWS lambda【2】,使得推理速度成为一个无关紧要的问题。
我们认为这些结果很有趣,因为 Flair 有时被描述为不符合“工业性能”的库,例如下表中来自脸书论文 Ahmed A .等人的“PyText:从 NLP 研究到生产的无缝路径”,2018 。另一方面,斯帕西得益于一个非常好的形象,应该只是稍微低于 SOTA,但速度却是无与伦比的。然而,根据我们的法律数据,Spacy 分数低于我们的要求。
Table extracted from the PyText paper comparing several NLP “framework”
你有时在机器学习博客或 Twitter 讨论中看到的隐含想法是,有一些权衡(不,不是偏差/方差):你需要在准确的模型(想想像 Bert 这样的大型语言模型)和速度之间做出选择。我们认为,这种陈词滥调在必要时可能会受到挑战。
天下没有免费的午餐,但是有时候,如果你足够努力,你可以得到免费的甜点:-)
我们在这里使用的数据集由 100 个人工标注的判断组成,每个实体的出现频率为:
Entity frequencies in our manually annotated dataset
关于与每个命名实体相关的困难的几句话:
- 自然人姓名( PERS )是要检测的最重要的命名实体。律师和法官(法官 _ 书记员)的名字被检测出来是因为我们需要避免对他们进行匿名,所以是为了提高 PERS 上的 NER 精度。
- 地址是第二个要删除的最重要的实体。检测它们是相当棘手的,因为在这个单一类别下,您会发现各种各样的东西,包括街道名称、城市名称、建筑物名称、监狱名称以及许多其他本地化名称。对这个世界有一些了解(通过维基百科上预先训练的嵌入或预先训练的语言模型)对这一类很有帮助。
- 组织也很难找到,它包括有时与自然人姓名相同的公司名称,有时看起来像本地化,或者只是一个普通名词等。由于法官使用大量的大写单词,需要一种上下文理解。来自维基百科的常识可能还不够。
- 酒吧名称、法院和日期都比较容易抓,几个正则就有很高的召回率。
最后,这些数据具有挑战性,因为它们包含许多错别字(包括空格错别字,其中两个单词合并成一个),名称可能看起来像名词(缺少大写字母),在同一个句子中,您可以有两次相同的文本,首先设计一个自然人,然后设计一个组织,等等。
这些判断是真实生活中的数据,比大多数经典的 NER 数据集更脏。
这个案件目录(上诉法院)并不是最难匿名的,但是我们在 Spacy 上的工作只适用于它。我们限制为 100 个判决,因为它代表了我们在 Lefebvre Sarrut 的一些法院的人工注释案件的数量(我们每个来源有 100 到 600 个案件)。
在要建立数据集的工业应用中,注释可能代表项目成本的很大一部分。这就是为什么我们使用的模型不需要成千上万的数据点来达到我们的要求,这对我们来说很重要。
在所描述的工作中,两个算法都使用了默认的超参数,因为两个库都应该使用它们来提供良好的结果。
Flair 是模块化设计,这意味着您可以选择您想要使用的表现形式。Zalando Research 分享了许多模型,我们使用了 Zalando Research 论文 Akbik A .等人在 2018 年发表的“用于序列标记的上下文字符串嵌入”中描述的组合:FastText 嵌入(在法语维基百科上训练)和基于字符的预训练语言模型(在法语维基百科上训练)的组合。没有对法律数据的语言模型进行微调。
对于 Spacy 来说,没有现成的可以下载的法语预训练通用语言模型。有一个特性是存在的,但是还没有关于它的 Python API 的很好的文档。在网站上,有一些称为“语言模型”的文件,但这里使用的表达是指已经为一个特定的任务模型(NER,分类等)进行了训练。).不幸的是,我们进行的快速测试显示,使用法国预训练的 NER 模型,我们的法律数据的结果真的很差。
对于本文的其余部分,数据的分割是这样进行的:训练(80%),测试(20%),没有使用专用的开发集(它是训练集的一部分),因为根本没有模型超参数调整(只是在训练期间提前停止,它应该不会对我们的发现产生太大影响)。
测量由每个库自己完成。
我们使用的是 Spacy 的最新版本(Spacy 团队于 2019 年 8 月发布的 V2.1.8)和 Flair 的 master branch(截至 2019 年 9 月 24 日的 commit 899827b )。
下面,我们仅发布与我们的上诉法院案例法清单相关的结果,但我们在我们拥有的每个法律案例清单上观察到 Flair 和 Spacy 之间的相同差异(有时更强)(有些案例有 6 倍多的人工注释判决)。
首先,我们描述我们的工作,以提高空间的准确性,然后我们解释我们如何使 Flair 快 10 倍。
1.在空间感和天赋准确性上下功夫
已经运行了针对训练数据集的不同经验来提高空间准确性。
1.1 空间+手动注释的数据
在该设置中,我们仅使用手动标注的数据(100 个法国判断)。没什么特别的,数据被每个库转换成期望的格式,并且,如上所述,使用默认参数进行训练。
Spacy on the manually annotated dataset
开箱即用的结果很低:该模型在最重要的实体上不符合我们的预期(召回 90%的自然人姓名和 80%以上的地址)。
有趣的是,黑石项目(BlackStone project)报告称,英国判例法中的 Spacy 在 NER 的得分“很低”。他们正在努力增加数据集的大小,看看空间行为是否与我们得到的相似将会很有趣。
大多数错误是大写的单词,当它们只是专有名词甚至普通名词时,被视为实体,任何数字组合看起来都像算法的判断标识符,等等。对我们来说,Spacy 似乎对数据进行了欠拟合,可能是因为与任务的复杂性相比,数据集太小了。
然而,这种算法在有更多数据的情况下能走多远还不清楚。值得注意的是,Spacy 有一个非常原始的内部设计(面向时间性能),比传统的 CRF 更接近于依赖解析器。据我所知,还没有文献用不同种类的数据来研究这种设计的性能。
推理在 1 个 CPU 核上耗时 25 秒!
与我们之前为此任务尝试的其他解决方案相比,这是一个很好的时机。在下面的其他体验中,Spacy 推断时间是稳定的。空间内存足迹使得在 AWS Lambda 中加载模型成为可能。
1.2 空间+人工注释数据+合成数据
为了提高准确性,我们试图生成大量的合成数据,对它们进行训练,最后对人工注释的数据进行微调。
想法如下:对于简单的模式,基于规则的捕捉实体的方法很容易编写。为了捕捉更复杂的模式,您倾向于添加更多的规则,然后整个事情开始变得既缓慢又难以维护。
例如,使用像" Mr [A-Z][a-z]+ "这样的正则表达式很容易在句子中找到一个名字。然后你需要捕捉前面没有 Mr 的名字,以及没有大写字母的名字,等等。直到你的正则表达式太复杂而无法修改。
然而,生成复杂合成数据的难度远低于捕捉真实命名实体。
以一个简单句型的现有句子为例,“嗨,马丁先生,你好吗?”,计算整个实体(Mr. Martin)的偏移量,然后在实体内搜索“Mr .”并将其删除。现在的句子是“嗨,马丁,你好吗?”。想要更努力学习数据点:去掉大写(嗨马丁,…)等。现在,你有了不同复杂程度的新数据点来为你的机器学习模型提供信息。
这是我们方法背后的主要思想,唯一的区别是我们为几种实体添加了大量复杂的数据生成器(如果您感兴趣,可以查看我们的 repo 的自述文件)。这并不是一个原创的想法,最近推荐系统行业的著名人物 Xavier Amatriain 、写了关于同样的方法。
对我们来说,这种方法的目的是试图获得两个世界的最佳结果:高精度和低推理时间。
我们在完整库存的子样本上生成了数百万个实体。然后,我们对它们训练了一个模型,并根据人工注释的数据对它进行了微调。
Frequencies of the generated named entities
我们的结果如下:
Comparison of results of learning based on synthetic data, without and with manually annotated data
我们注意到最重要的匿名实体(人)的质量有了很大的提高:召回率+15 点。地址离我们的要求还是太远了。
我们仍然可以添加规则,但是这种方法的缺点是不够通用。如果我们想转换语言,或在另一个法庭工作,我们需要编写新的规则或修改现有的规则。
我们已经用编程和维护源代码的成本交换了手工注释的成本。
基本上,这种方法产生了很高的技术债务,但是提供了质量上的显著提升。
我们还尝试在 Spacy 中提取 Flair 预测(使用 Flair 和 pretrain Spacy 生成一个非常大的数据集),它不断提供性能提升,但结果质量低于合成数据方法。一个可能的原因是合成数据模式更容易被空间捕获。
1.3 Flair +预训练 LM +手动注释数据
Flair 提供了一个模块化框架。例如,你可以决定你想要如何表示每个单词,在快速文本嵌入(维基百科训练的)、基于预先训练的字符 LSTM 的语言模型(维基百科训练的)、所有新的 transformer 材料(Bert、XLnet 等)之间进行选择。)由来自多产的 HuggingFace 团队的时髦的 Transformer 库提供,或者甚至是一个简单的未经预训练的基于字符的表示,如在 Lample G .,“命名实体识别的神经架构”,2016 等中。
按照 Zalando 论文描述的 SOTA 方法,我们使用了在法语维基百科上训练的快速文本嵌入和在法语维基百科上训练的 Flair 语言模型。
如前所述,我们保留了默认的超级参数,没有进行语言微调。根据最高法院的文件,这样的微调应该会给我们带来+1 点的准确度。
结果如下:
Flair scores on the manually annotated dataset
与空间相比,分数非常高,超过了我们的要求,甚至超过了我们的期望。
推理在我们的 Nvidia 2080 TI GPU 上使用已发布的 Flair 0.4.3 版本进行 1mn 16s 。然而,公平地说,我们应该记住,还有 Zalando 研究团队在他们的 V100 上完成的语言模型的训练(准备下载),在某种程度上,包括训练 FastText 所花费的时间。
计时已经测了几次,稳定,在秒级。
如前所述,我们的法律案件清单很大,这种时间安排是不可接受的,这就是为什么我们花了一些时间在推理时间上。
2.让天赋快 10 倍!
正如已经说过的,天赋比空间慢。
下面我们解释一下用于减少推理时间的主要策略。如果你想检查代码,获得更长的描述或者甚至在时间上有所改进,我们提供了原始 PR 的链接。
这些措施已经用 c profile【3】执行。需要记住的重要一点是 PyTorch 主要是异步的。正因为如此,如果不采取任何措施来处理异步计算,一些操作将会显得非常慢,因为它们需要同步(大多数 CPU ⇔ GPU 传输,一些张量复制等)。).为了避免假慢操作,你需要先设置 CUDA_LAUNCH_BLOCKING=1 。
2.1.又老又迟钝的 a .维特比教授
https://github.com/zalandoresearch/flair/pull/1038
https://github.com/zalandoresearch/flair/pull/1053
使用 cProfile,我们注意到 Viterbi 算法花费了大部分时间。Viterbi 算法是 CRF 算法的关键部分,即使在基于深度学习的 NER 中,CRF 也可以带来很大的改进(在我们的情况下,禁用 CRF 会使 micro F1 降低 6 个点,这与 Lample 论文中描述的关于德国 CONLL 数据集的效果降低类似)。
Flair Viterbi 实现的源代码是 PyTorch 官方网站页面。维特比算法的描述可以很容易地找到,但是概括地说,它的目的是当标签之间存在相关性时,为序列找到最可能的标签组合。它的工作方式需要中间状态,这使得这项工作更加复杂。
该实现非常容易阅读、理解和调试,但是没有经过很好的优化。
为了减少推理时间,我们做了两件事:
- 通过将维特比部分的计算从图形处理器转移到中央处理器,推理时间减少了 20%。基本上,我们几乎只是把叫做【CPU】方法。这可能令人惊讶,但如果你看看代码,你很快就会明白 GPU 不是很有用,加上一些操作是从 GPU 到 CPU 进行许多小的内存传输,而不是一个大的;
- 在 Numpy 中重写 Viterbi 部分并对尽可能多的操作进行矢量化,将优化时间缩短了 40%。
矢量化基本上是用矢量运算替换 for 循环的过程。时间的减少是因为两件事,第一,您限制了 Numpy 内部 C 和 Python 端之间交换信息的需要,第二,因为 Numpy 在连续的内存块上工作,并且可以进行一些计算优化,包括例如 SIMD 运算(在一个 CPU 内核上的并行化)。
另一个有趣的优化是利用广播。在计算过程中,我们需要向矩阵的每一列添加一个向量。在优化之前,该向量被复制足够多次,以获得与要添加的矩阵相同的形状。广播是一种避免创建新矩阵(及其内存副本)的方法,通过 C 部分的 for 循环让 Numpy 模拟它的存在。简单实用的小窍门。
总而言之,随着对单个函数的重写,计时几乎被缩短了一半。
2.2 克隆人的攻击()
https://github.com/zalandoresearch/flair/pull/1074
https://github.com/zalandoresearch/flair/pull/1089
https://github.com/zalandoresearch/flair/pull/1095
当您对张量进行子集化时,新的张量会获得指向原始存储层张量(内存中包含数据的“简单”数组)的指针。这就是为什么操作几乎不需要时间,新对象只是由偏移和步幅信息组成。
调用 clone()会生成存储层的真实副本,从而使操作慢得多。
在训练和推理过程中,为该批每个句子的每个字符计算一个表示。我们唯一感兴趣的字符是每个标记的开头和结尾(Flair 语言模型是双向的)。
在训练期间,有几个纪元,计算每个令牌表示需要时间,所以我们希望将它们保存在内存中。为了避免内存溢出异常,我们需要克隆我们想要保留的字符表示,并删除原来的大矩阵,其中仍然存储着所有不必要的字符。
在推理过程中,事情是不同的,我们可以在计算过程中在内存中保存完整的矩阵,并在批处理结束时丢弃所有的表示。这样,我们避免了调用 clone()及其缓慢的内存复制,并获得了显著的速度提升。
2.3 永远不要忘记!
https://github.com/zalandoresearch/flair/pull/1084
Flair 语言模型是基于上下文的,这意味着标记表示依赖于其上下文,因此没有简单的方法来在共享一些标记的不同句子之间循环使用它们。这不是静态的快速文本嵌入的情况。
由于 GPU 内存有限的原因(在 Flair 上,您可以同时使用大量的令牌表示),它们没有预加载到 GPU 内存中,因此对于每个令牌,我们从 CPU Ram 中提取其表示,并将其移动到 GPU RAM 中。你可能已经猜到了,记忆转移需要时间,我们不喜欢他们。
由于 Zipf 定律,很少的令牌代表大部分传输,所以我们只设置了一个简单的 LRU 缓存,在那里我们存储了 10000 个已经移动到 GPU 内存的 FastText 张量。简单高效:我们几乎获得了整个 GPU 负载的性能,而只占用了一小部分内存。
2.4 懒于快
【https://github.com/zalandoresearch/flair/pull/1093
https://github.com/zalandoresearch/flair/pull/1130
为了表示令牌,我们同时使用了 FastText 和 Flair 语言模型(您可以自由添加更多)。Flair 语言模型非常强大,但当上下文是新的时,它就不太好用了。在这些情况下,快速文本嵌入会带来更多有用的信息。
为了合并两种表示的知识,我们只是在标记级别将它们连接起来。
稍后,我们在句子级别连接每个标记表示,并且每个句子表示被连接在一起以获得批量表示。
这里的主要思想是通过尽可能的懒惰来避免内存复制,并且只在进程的最后执行一次连接。
2.5 杂项
其他几个 PR 已经集中在一些操作(分离、设备检查等)呼叫减少上。),或者只是修复 bug。它们没有列出,因为非常具体的项目源代码和相当无聊。
https://github.com/zalandoresearch/flair/pull/1022
【https://github.com/zalandoresearch/flair/pull/1142 号
【https://github.com/zalandoresearch/flair/pull/1031
还做了一些工作来改进 API,例如使其易于使用第三方 tokenizer(如速度极快的 Spacy one),或更易于使用 NER 可视化模块(主要受 Spacy 的启发)。
https://github.com/zalandoresearch/flair/pull/1068
当 CRF 不用于大的性能增益时,矢量化优化也被应用于推理。这对我们的项目没有影响,因为我们使用的是通用报告格式。
2.6 未来的优化?
仍然存在剩余的机会,例如在维特比算法上。问题是如何接触到他们。
例如, Ray 似乎是一个有趣的选项,通过仔细的批处理,我们可以将花费在 Viterbi 上的时间除以 4(剩余的 11 秒增加 1.5 秒)。为此,Ray 执行了非常智能的多处理,并利用 Reddis 和 Apache Arrow 在 CPU 内核上分配计算。如果由于某种原因 Flair 崩溃,Redis 服务器留在内存中,这不是超级酷。
另一种方法是通过 cytonize,但是现在,我还没有达到 Ray 的性能,而且这将意味着引入一种新的语言,使维护更加困难,释放轮子等等。值得吗?不确定。
在某个时候,当大多数低挂的果实已经被收集时,优化开始变得更加昂贵,也许是时候关注其他事情了。
此外,还有我们到目前为止还没有考虑的优化,那些影响模型本质的优化。正如多次编写的那样,Flair 是模块化的,可以使用几种语言模型,其中一些计算成本较低。更多的混合精度还没有被测试(有一个小错误要先修复),但从我们的快速经验来看,NER 的改进似乎是有限的。
结论
本文的目的并不是以任何方式证明某个库优于另一个库。事实并非如此,Spacy 仍然更快,但上述优化使 Flair 成为我们用例的更好解决方案。
另一个值得强调的是 Flair 的模块化设计。在我看来,它在很大程度上被低估了,它有助于快速整合 NLP 领域的许多发展。
也许一个更深思熟虑的观点是工程在机器学习中是多么重要。尽管它对这个领域和它的大多数社区来说似乎并不那么重要。例如,在今年的 SIGIR 2019(主要的信息检索会议)上,在我参加的所有会议中,我只在商业搜索引擎研讨会上听说过性能和速度。
在过去的几个月里,不同的团队已经发布了几种基于蒸馏的方法,试图间接使用像 Bert 这样的大型模型。这种工作往往不会“累加”,几个月后就会被遗忘。
也许一些工程方面的工作会对社区有更多的好处。例如,像 TVM (一个多框架机器学习模型编译器)或 Glow (一个 PyTorch 专用编译器)这样的项目可能会给当前和未来的模型带来巨大的性能增益,即使现在它仍然需要对框架内部的良好知识。他们确实应该得到社区更多的了解和支持。
最后,我要感谢 Flair 背后的 Zalando 研究团队,特别是@ alanakbik,感谢他们的建议,感谢他们快速审核了许多 PR(并提供了足够的建议来改进它们)。
注意事项
【1】在著名的公共数据集 CONLL 2003 上,推理时间在相同的 GPU 上被除以 4.5(从 1mn44s 到 23s),优化效果的差异主要是由于法国判例法数据集中存在许多非常长的句子,使得一些优化更加关键。根据 Zalando 研究团队的测量,在强大的 Nvidia V100 上观察到了该数据集的相同改进。每个时间差异在每个 PR 的描述或注释中报告。
【2】顺便说一句,如果你正在考虑将 Spacy 放入 AWS lambda,请三思,lambda 冷启动很慢,需要小心管理…
我发现 Pycharm 的分析器 viz 非常有用。
为什么我们在预测中毫无歉意地使用深度学习
原文:https://towardsdatascience.com/why-we-unapologetically-use-deep-learning-in-our-forecasts-2923a5773073?source=collection_archive---------18-----------------------
许多观察数据科学领域机器学习接管的人开始警告深度学习算法的误用和过度使用。从对深度学习的“黑箱”性质的担忧使模型难以解释或解释、到深度学习算法有效所需的大量数据、到怀疑深度学习方法可能已经达到极限的建议、,最初对深度学习的大肆宣传推动了最近对人工智能的广泛兴趣,现在正让位于对实践的失望低谷。在 DemandForecasting.com,我们相信,只有通过在预测中利用深度学习方法,我们才能看到需求预测准确性的范式转变。
在神经网络(由旨在模拟人脑神经结构的节点组成的计算机化网络)中,数据通过一系列跨层转换从输入转换为输出。当输入和输出数据之间有许多层时,就说神经网络是深的。当机器学习应用于深度神经网络,使得模型的输出受到先前输出的质量的影响(即,从中学习)并被优化时,深度学习发生。
预测是一个特别适合使用深度学习模型进行改进的领域。从历史上看(直到过去 18 个月),主要的预测竞赛已经抛出了一个有点令人惊讶的发现,即复杂的模型不一定比简单的模型更准确,特别是在预测一组一般的时间序列时。直到去年,在世界上最著名的预测比赛 M 竞赛(M 代表比赛的组织者和预测行业的教父 Spyros Makridakis)中,这是一个既定的逻辑,最近一次比赛的基本模型是 2000 年的 M3 比赛,由三种常见的指数平滑方法( Comb )组成,胜过所有更复杂的参赛者(只有一个例外,它只是刚刚击败 Comb )。一次又一次,计量经济学家和预测从业者不得不夹着尾巴回家,因为他们知道他们复杂的预测方法不如基本方法。
这一切都在 2018 年发生了变化,当时举办了第四届 M 比赛,被恰当地命名为 M4 比赛。其中,17 个模型的表现超过了 Comb 基准,大多数模型都以某种方式利用了机器学习。排名前两位的车型分别以 6.6%和 9.4%的优势击败了和。两者都利用深度学习来做到这一点。
第二个表现最好的模型是由莫纳什大学的预测专家 Rob Hyndman与 Pablo Montero-Manso 和 George Athanasopoulos 一起开发的(hynd man 在 2005 年至 2018 年期间编辑了《国际预测杂志》)。Hyndman 的模型有效地采用了九种合理的常见时间序列方法(所有方法都可以通过 R 预测包获得),并将它们组合起来生成一个预测。一种被称为梯度推进(一种决策树)的机器学习技术被用来计算每个时间序列的九个模型中每个模型的优化权重。在使用梯度推进方法时,Hyndman 能够利用传统时间序列方法没有利用的数据的外围特征。他还能够预测每个时间序列的最佳时间序列模型,并利用这一知识优化每个模型的权重。
hynd man 等人的方法论:
- 将数据集拆分为训练数据集和测试数据集。
- 将九个时间序列模型中的每一个应用于训练期,并在测试期的 100,000 个时间序列中的每一个上为九个模型中的每一个生成预测。
- 计算训练期间时间序列的一组特征。
- 根据训练期间每个时间序列模型预测的实际损失,计算测试期间每个预测的预测损失(误差项,在这种情况下是平均绝对比例误差和对称平均绝对百分比误差的平均值)。
- 创建每个时间序列的一组特征(例如,时间序列的长度、趋势强度、时间序列的季节性强度、时间序列的集中性、与时间序列的自相关和偏自相关函数相关的其他特征)。
- 训练梯度推进模型以优化每个时间序列的权重,从而最小化损失函数(使用时间序列的预测损失和特征)。
- 通过组合预测期的时间序列模型预测和使用预测日期的时间序列特征由训练的梯度推进模型生成的每个模型的权重,对预测期进行新的预测。
竞赛的获胜者,优步实验室的 Slawek Smyl 在其解决方案中进一步关注深度神经网络,开发了一种混合模型,该模型将指数平滑模型(在这种情况下,是具有乘法季节性的 Holt-Winters 方法)与混合模型中的递归神经网络相结合。根据 Smyl:
Description of Slawek Smyl’s winning entrant to the M4-competition
这允许在提取时间序列特征(特别是季节性)时跨时间序列的交叉学习。最终,这种方法远远超过了基准。
这只是预测从业者越来越多的观点中的一个最近的数据点,我们只是刚刚到达一个拐点,在不久的将来,深度学习方法将主导预测应用的其他方法。以下是我们认为基于深度学习的预测方法将成为严重预测问题的事实标准的八个原因:
- 许多经典的时间序列模型是专门为预测而开发的。相反,关键的深度学习模型已被开发用于通用目的,并因其强大而适应用例。RNNs(由于其处理序列数据的能力)和梯度推进方法最近被证明对于预测目的是有用的,但是仍然具有固有的弱点。例如,即使是 rnn 也倾向于过度计数/过度平均早期数据,未能说明最近的数据往往比历史数据更有用,这是时间序列数据的一个特点。随着深度学习模型的开发考虑到时间序列预测,它们在此用例中的性能将会提高。
- 我们刚刚看到 DNN 模型开始超越经典模型。随着这些发现成为既定的经验事实,更多的商业和学术兴趣将转向改善 DNN 预测。我们最近已经看到基于商业 ML 的预测模型开始量产,从 Smyl 的模型(被优步使用)到脸书的 Prophet 模型和亚马逊的 DeepAR 模型(以及最近亚马逊发布的 GluonTS 包)。
- dnn 只是在横截面水平上具有更强的解释外围特征和数据的能力,或者在进行预测时利用来自其他时间序列的信息,增加了模型的预测能力。
- 在预测中,简单平均模型的能力已被证明是一种非常有效的方法,可以提高平均预测的准确性,并超越单个组件模型,类似于使用中心极限定理或使金融投资组合多样化的好处。DNNs 可以用来改进这一发现,通过以比简单的平均方法更复杂的方式对集合中的不同模型进行加权。DNNs 将预测误差与时间序列特征相关联的能力提高了它这样做的能力。
- DNNs 随着时间学习。随着 dnn 的继续使用,它们从历史预测的质量中学习,这些预测可用于预测它们的误差,然后可以优化掉这些误差,这是传统预测技术通常不考虑的二阶问题。
- 与传统方法相比,DNNs 需要更少的数据来提供准确的预测。部分由于能够利用周围的数据,部分由于 DNNs 的感应能力,DNNs 比传统的时间序列预测技术需要更少的来自单个时间序列的数据来做出准确的预测。这在处理小数据集时很有用,但也有助于专业人员修剪大数据集,从而节省计算能力。
- dnn 能够以概率的方式进行预测,并且仅提供点预测或预测区间。这也可以用于 DNN 的各个层面,以提供概率预测。当使用现实世界用例的预测时,从业者可以看到概率加权的结果,这可能会影响决策。传统方法下的概率预测使用太多的计算能力而不可行。
- 复杂的统计方法只能在特定的环境下使用,或者当数据以特定的方式转换时使用。当数据没有被正确配置时,在统计模型中做出的假设可能被违反(通常对于从业者来说是无意的),这使得结果预测不准确,或者至少对它们提出警告。例如,统计方法很难处理稀疏或缺失值、包含负值的数据集,或者出现尖峰、违反错误假设或通常不稳定的时间序列的数据集。
为什么 SQL 中的窗口函数如此重要,你应该马上学习它
原文:https://towardsdatascience.com/why-window-function-in-sql-is-so-important-that-you-should-learn-it-right-now-1274b6096a86?source=collection_archive---------8-----------------------
在你下次面试被问到之前,现在就学会它
在我的上一篇文章中,我提到我被多次问到如何使用一个窗口函数。在掌握它之后,我确信我应该更早地学习,因为它可以帮助我通过 SQL 进行更深入的分析。
我上一篇关于使用 SQL 进行数据分析的文章
[## 如何使用 SQL 进行数据分析(房产销售时间序列)
回到 basic,使用 SQL 从数据集中获取所有必要的信息
towardsdatascience.com](/how-to-use-sql-to-perform-data-analysis-house-property-sales-time-series-bf36cd3c2528)
与会减少行数的 group by 函数不同,window 函数可以在不减少行数的情况下对每一行执行聚合。有许多不同的窗口功能。但今天我将告诉你如何使用窗口函数的基本知识,以及如何在你的数据分析中应用。
我今天将使用的数据集是从 Kaggle 获得的“学生饮酒量”中的“学生垫”。然后数据集存储在 dataset.student_mat 中。您可以从以下链接下载数据集:
[## 学生饮酒
下载数千个项目的开放数据集+在一个平台上共享项目。探索热门话题,如政府…
www.kaggle.com](https://www.kaggle.com/uciml/student-alcohol-consumption)
一般来说,有两种类型的窗口函数;一个是内置函数,如 row_number、dense_rank、lag 和 lead 另一个是聚合,就像通常的聚合函数一样。对于窗口功能,有一个意义重大的关键词“过”。一旦注意到查询中有“over ”,就可以知道有一个窗口函数。
在第一部分,我将解释如何使用聚合窗口函数,因为我相信你已经有一些使用普通聚合函数的知识。在了解了窗口函数的基础知识之后,理解内置函数就更容易了。
- 聚合窗口函数
- 内置窗口功能
聚合窗口函数
聚合窗口函数的基本语法是普通的聚合函数,但在 over 子句语句之后。这里我就用数据来论证。数据集中的前三列是学校、性别和年龄。现在你想知道每所学校中男女学生的年龄差异。然后就可以使用窗口功能了。
第一步是计算每个学校的平均年龄。这可以从“avg(年龄)over(按学校划分)”中获得。over 之前的第一部分与正态平均函数相同。over 之后的第二部分称为“partition by”子句,需要用括号括起来。“按学校划分”意味着选择学校中具有相同值的所有记录并进行计算。
select school, sex,age,
avg(age) over (partition by school) as age_avg_by_shl ,
age - avg(age) over (partition by school) as age_diff_from_shl_avg
from dataset.student_mat
age_avg_by_shl is not a constant in the whole column but varies by school.
16.5215 为学校相当于“GP”,18.0217 为学校相当于 MS 与学校正常平均函数组匹配。
因此,现在您可以计算每个学生与平均值之间的差异,就像 age_diff_from_shl_avg 在查询中执行的操作一样。
最后可以按学校和性别得出平均年龄差。
select school, sex, round(avg(age),2) as avg_age , round(avg(age_avg_by_shl),2) as avg_age_school, round(avg(age_diff_from_shl_avg),2) as avg_age_diff_from_shl
from
(
select school, sex,age, avg(age) over (partition by school) as age_avg_by_shl , age - avg(age) over (partition by school) as age_diff_from_shl_avg
from dataset.student_mat
) a
group by school, sex
从现在你可以看出女性在全科医生中的年龄比男性大,但在多发性硬化症中却不是这样。
还有一栏地址显示学生是住在城市还是农村。然后你可以使用一个窗口函数,按学校和地区计算每个地区居住的学生的百分比。
第一步是通过聚合计算学校和地址的每个组合中作为通常组的学生人数。然后使用窗口函数计算每个学校和每个地址区域的学生总数。“sum(student _ CNT)over(partition by school)”将返回 GP 和 MS 的学生总数,而“student _ CNT/sum(student _ CNT)over(partition by address)”将返回城市和农村地区的学生总数。因此,您可以按学校和地址区域获得学生的百分比。
select school, address, student_cnt
, student_cnt / sum(student_cnt) over (partition by school) as percent_by_shl
, student_cnt / sum(student_cnt) over (partition by address) as percent_by_address
from
(
select school, address, count(1) as student_cnt
from dataset.student_mat
group by school, address
) a
所以你可以看出更多的全科医生学生生活在城市地区,而更多的理学硕士学生生活在农村地区。如果你发现一个学生住在城市地区,你几乎可以肯定这个学生来自 GP,因为超过 93%的城市学生在 GP 学习。这已经成为一种预测性分析,你可以用它来根据地址给学生分类。
聚合窗口函数的第三个示例稍微复杂一些。既然数据集叫“学生饮酒量”,当然要对其做一些分析。有两个分类栏“Dalc”和“Walc”显示工作日和周末的消费。然后,我们可以发现酒精消耗量是否会影响“g3”栏所示的最终结果。
为了简化,我将把两列加在一起,而不是把它们分开。然后计算 g3 的总平均值以及单个 g3 和 g3 的总平均值之间的差值。为了计算 g3 的整体平均值,这里我们不能使用 group by 函数,因为这样会减少行数。相反,我们使用 window 函数来获取结果并放入每一行。
语法“avg(g3) over()”的 over 之后的第二部分是空的,因为我们不需要对数据集进行分类。我们需要整个数据集来计算整体平均值。因此括号里面是空的。
现在,您可以计算每个 wkalc 组的平均差异。
select wkalc, round(avg(avg_g3_overall),2) as avg_g3_overall, round(avg(g3),2) as avg_g3, round(avg(g3_diff),2) as avg_g3_diff
from
(
select (Dalc + Walc) as wkalc, g3, avg(g3) over () as avg_g3_overall, g3 - avg(g3) over () as g3_diff
from dataset.student_mat
) a
group by wkalc
order by wkalc
饮酒量和 g3 结果之间没有明确的关系。所以还是喝吧(?)
内置窗口函数
现在我希望你知道聚合窗口函数的基本用法。接下来我就说说内置的窗口功能。下面是 11 个内置窗口函数的列表:
CUME_DIST(),密集 _ 等级(),第一个值(),滞后(),最后一个值(),领先(),第 n 个值(),不完整(),百分比 _ 等级(),等级(),行数()
我就不详细解释了。您可以从以下链接获得详细信息:
[## MySQL :: MySQL 8.0 参考手册::12.21.1 窗口函数描述
在以下函数描述中,over_clause 表示 over 子句,如第 12.21.2 节“窗口…”所述
dev.mysql.com](https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html)
我将以 rank()为例演示如何使用它。
与聚合窗口函数类似,需要一个 over 子句语句。
从 1 到 4 有一个分类列“学习时间”。而且我们想知道学习时间是不是 g3 的一个因素。除了用 studytime 计算 g3 的平均值,我们还可以用 rank()来得到顺序。
在获得每个学习时间的 g3 的平均值后,我们可以使用平均结果按降序排列顺序。然后我们就可以排序排名直接得到对比。这种方法非常有用,尤其是当有许多组无法通过肉眼进行排序时。
select studytime, avg_g3, rank() over (order by avg_g3 desc) as ranking
from
(
select studytime, avg(g3) as avg_g3
from dataset.student_mat
group by studytime
) a
order by ranking
所以,学习越多,成绩越好,这仍然是事实。
PS:还有另外两个内置函数也提供排名,一个是 dense_rank(),另一个是 row_number()。区别在于当存在具有相同值的行时,它们如何返回等级。您可以通过以下链接了解更多信息:
https://dev . MySQL . com/doc/ref man/8.0/en/window-function-descriptions . html # function _ rank
结局
掌握窗口功能可以为您提供更深入的数据分析,有时甚至可以帮助您执行预测分析。正如我在上一篇文章中所说的,掌握 SQL 是获得数据分析师职位的必要条件,窗口函数在面试中经常被问到(我不记得在面试中被问了多少次)。因此你也应该在读完我的文章后开始学习窗口函数。我希望你也能掌握它,并得到你梦想的工作。今天的文章到此为止。如果你喜欢它,请留下你的评论,给我一个掌声。并分享这篇文章让更多人知道窗口功能的重要性。下次见。
为什么你错用了 SNE 霸王龙
原文:https://towardsdatascience.com/why-you-are-using-t-sne-wrong-502412aab0c0?source=collection_archive---------2-----------------------
以及如何避免常见的陷阱(带代码!)
Source: https://datascienceplus.com/multi-dimensional-reduction-and-visualisation-with-t-sne/
t-SNE 已经成为一种非常流行的可视化高维数据的技术。从深度学习模型的内层提取特征,并使用 t-SNE 在二维空间中绘制它们以降低维度,这是非常常见的。不幸的是,大多数人只是使用 scikit-learn 的实现,而没有真正理解结果和曲解它们的意思。
虽然 t-SNE 是一种降维技术,但它主要用于可视化,而不是数据预处理(就像 PCA 一样)。出于这个原因,你几乎总是用 t-SNE 把维数降低到 2,这样你就可以用二维来绘制数据。
t-SNE 常用于可视化的原因是,该算法的目标是获取高维数据,并在低维中正确地表示它-因此,在高维中接近的点在低维中应该保持接近。它以一种非线性和局部的方式实现这一点,因此不同区域的数据可以进行不同的转换。
t-SNE 有一个超级参数叫做困惑。困惑平衡了 SNE 霸王龙对数据的局部和全局方面的关注,并对结果图有很大影响。关于此参数的几点说明:
- 这是对每个点的近邻数量的粗略猜测。因此,越密集的数据集通常需要越高的困惑值。
- 建议在 5 到 50 之间。
- 它应该小于数据点的数量。
人们在 t-SNE 问题上犯的最大错误是只使用一个值来表示困惑,而不测试结果如何随其他值变化。如果在 5 和 50 之间选择不同的值会显著改变您对数据的解释,那么您应该考虑其他方法来可视化或验证您的假设。
还忽略了一点,由于 t-SNE 使用梯度下降,您还必须为您的学习速率和优化器的步骤数调整适当的值。关键是要确保算法运行足够长的时间来稳定。
有一篇关于 t-SNE 的非常好的文章,讨论了以上大部分内容以及您需要注意的以下几点:
- 在 t-SNE 图中你看不到聚类的相对大小。理解这一点至关重要,因为 SNE 霸王龙会自然地扩大密集星团,缩小备用星团。我经常看到人们通过比较可视化中集群的相对大小来进行推断。不要犯这个错误。
- t-SNE 图中分离良好的簇之间的距离可能没有任何意义。另一个常见的谬误。因此,如果你的“海滩”集群比“湖泊”集群更靠近“城市”集群,不要感到沮丧。
- 一簇簇的点——尤其是具有小困惑值的点——可能只是噪声。因此,在使用小的困惑值时一定要小心。并且要记住总是测试许多困惑值的健壮性。
现在——正如承诺的一些代码!这段代码的一些注意事项:
- 在运行 t-SNE 之前,我首先使用主成分分析将维数减少到 50。我发现这是很好的实践(当有超过 50 个特性时),因为否则,t-SNE 将永远无法运行。
- 我没有显示上面提到的各种困惑值。我将把它留给读者做练习。只需用不同的困惑值多运行几次 t-SNE 代码,并比较可视化效果。
from sklearn.datasets import fetch_mldata
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt # get mnist data
mnist = fetch_mldata("MNIST original")
X = mnist.data / 255.0
y = mnist.target # first reduce dimensionality before feeding to t-sne
pca = PCA(n_components=50)
X_pca = pca.fit_transform(X) # randomly sample data to run quickly
rows = np.arange(70000)
np.random.shuffle(rows)
n_select = 10000 # reduce dimensionality with t-sne
tsne = TSNE(n_components=2, verbose=1, perplexity=50, n_iter=1000, learning_rate=200)
tsne_results = tsne.fit_transform(X_pca[rows[:n_select],:])# visualize
df_tsne = pd.DataFrame(tsne_results, columns=['comp1', 'comp2'])
df_tsne['label'] = y[rows[:n_select]]sns.lmplot(x='comp1', y='comp2', data=df_tsne, hue='label', fit_reg=False)
这是结果可视化:
我希望这是一个关于如何更有效地使用 t-SNE 和更好地理解其输出的有用指南!
你也可以在这里找到这篇文章。
加入我的 邮箱列表 保持联系。
当你最小化你的野心时,为什么你能作为一个开发者茁壮成长
原文:https://towardsdatascience.com/why-you-can-thrive-as-a-developer-when-you-minimize-your-ambitions-37b75284b2e3?source=collection_archive---------16-----------------------
Photo by Nicolas Cool on Unsplash
我们现在能做的事情太多了。
由我们来决定哪些事情需要我们立即关注,以及我们如何才能将其他事情从我们的关注中丢弃。
至少目前是这样,因为这样更有效率,也更有利于我们的理智。
我们不可能同时在纽约和新加坡。
我们都知道并且完全承认这一点。然而,当谈到我们的目标,以及我们生活中想要的东西时,我们很容易忘记这些。
或者至少我们没有意识到我们正在这样做。
我们想同时做 X、Y 和 Z,而这三者之间甚至没有任何联系。
我相信这是因为我们倾向于被许多事情吸引,并且相信我们能够并且需要做所有的事情。
我们可能希望掌握数据科学,同时,我们希望用 React Native 建立一个令人敬畏的生产力应用程序,获得 300 万次下载。在周末期间,我们还想掌握区块链,成为那里最好的开发者。
Photo by Samuel Ng on Unsplash
所有这些可能看起来是高尚的尝试,我们可能想成为对社会有益的人。我们可能打算在我们认为有价值的事情上投入时间,同时掌握多种技能。
但这确实是一件很难完成的事情。
我们可能已经注意到所有这些领域的质量下降。我们甚至不满足于我们的结果,也不满足于我们的生活因被分散而经历的退化。
我们可以注意到进展缓慢,这些不同领域的增长似乎没有超过令人讨厌的门槛。
事实是,我们可能只是在涉猎。
我们害怕去掌握真正重要的东西。
我们认为这是一生一次的机会,我们真的喜欢并相信它。
Photo by Japheth Mast on Unsplash
我们害怕,当我们在追求过程中遭遇重大失败时,我们会在别人面前出丑。脆弱,无法达到精通的水平。
这样,我们往往会借口我们缺乏克服这一障碍的勇气,以及我们未能达到我们目标的某一里程碑。
“当我已经有太多事情要做的时候,失败是显而易见的,”我们告诉自己,并用这些借口来逃避减少琐事的道路。
我们拍拍自己的背,我们已经在许多项目中展开,在许多不同的领域中,对我们来说,不能展示任何类型的有价值的结果是没关系的。我们甚至没有试图去改善它。
然后,我们开始新的事物,哪怕是一点点吸引我们的事物。那些在表面闪耀的东西,我们甚至没有考虑去触及表面,去注意我们是否在追求一些有用的东西。
致力于掌握
Photo by Vance Osterhout on Unsplash
我并不是说我们必须始终完全致力于一条道路,或一个目标,而忘记其他一切。
在某些情况下,我们可能需要一些实验,看看什么是重要的。一些你想掌握并用来帮助他人的东西。或者简单地认为这是一种精通的方式。
但是一旦你已经下定决心,不要让闪亮的物体分散你的注意力。
把你的全部精力和努力投入到你最重要的优先事项中,不要因为碰壁就满足于平庸。
我们忘记了真正的成功和成就是那些花费了很长时间的事情,那些达到这些成就的人经历了很多痛苦和努力。
我相信,我们目前拥有的许多机会可能会在未来 6-12 个月内出现。仅仅知道这一点就可以是一种巨大的解脱,因为我们可能会担心这个机会可能永远不会到来。
我相信,我们需要做得更少,不是分散在 10 个项目中,而是提高我们的工作质量,真正做好我们所做的事情。
我们需要提醒自己,我们不需要一下子掌握所有的东西。我们很可能会有时间回到过去激发我们兴趣的那些爱好或事物上。
然而,我们现在需要关注其他事情。
对我们来说真正重要的事情。
我们需要明确我们的优先事项,摆脱试图一次做完所有事情的诱惑。
我们的生活是我们已经做出的决定的总和。
如果我们真的对繁荣和提高我们的生活质量感兴趣,那么就要靠我们来改进我们所做的决定。
为什么您需要 Spark 的统一分析数据结构
原文:https://towardsdatascience.com/why-you-need-a-unified-analytics-data-fabric-for-spark-c8b5d252cd0f?source=collection_archive---------16-----------------------
Darius Foroux, from Why More Technology Does Not Equal More Productivity
如何优化 Spark 进行分析而不降低工作效率
Apache Spark 已经被大数据处理广泛采用。最初开发它是为了加速存储在 Hadoop 中的数据的 map-reduce 操作。今天,它仍然最适合于面向批处理的高吞吐量数据操作。
尽管 Spark 在继续改进,但它充其量仍是一个不完整的分析解决方案,特别是在涉及不断变化的数据的实时交互式工作负载时,这是 BI、数据科学和物联网应用程序所需的类型。
Databricks 和 AWS 等软件供应商通过简化大数据解决方案的整合来解决这一问题,内部 it 团队通常会在 Spark 上部署额外的数据管理工具。但是,正如 Darius Foroux 指出的那样,更多的技术并不等于更多的生产力。
缺少的一环是为 BI 用户、数据工程师和数据科学家优化 Spark 的方法,而不是在上面堆积更多消耗生产力的非 Spark 工具。
统一分析数据结构(UADF)解决了这个问题。它增加了对流和交易数据的支持,并针对闪电般的 BI、数据科学和物联网应用优化了 Spark。因为它是 Spark 的原生产品,所以您可以利用现有的人员技能、操作流程和工具。
UADF 通过将 Spark 扩展为面向 BI、数据科学和物联网应用的闪电般快速的平台来提高生产力。
作为 TIBCO 的分析 SVP,我们看到我们的客户正在努力应对这一挑战。我们认为 SnappyData ,一个由 Gemfire 背后的远见团队创建的 UADF,有助于克服 Spark 在分析方面的缺点。本文解释了它如何帮助您从 Spark 获得更多,同时提高您的工作效率。
什么是统一分析结构技术?
UADF 为 Spark 增加了对流、交易、机器学习和分析的支持。目标是为 Spark 增加四项功能:
- Spark 数据的数据可变性和事务一致性
- 高并发性的跨用户和应用程序的数据共享
- 支持低延迟查询(例如,键值读/写操作)和高延迟操作(昂贵的聚合查询或 ML 训练作业)。
- 在高速交易更新数据的同时,畅通分析查询访问
为什么不直接用?
Spark 开发人员经常会问:“当我想对我的 Spark 数据进行 BI、数据科学和流处理时,我应该使用哪个数据库?”
答案往往是“视情况而定。”选项包括柱状商店(Vertica、Teradata、Redshift)、立方体类型商店(Jethro、AtScale、Kyvos)、以数据科学为中心的分析平台(Databricks)和 NoSQL 商店(Cassandra、MongoDB)。这些选择都有其优点,但是作为一个整体,它们都有类似的缺点:
- 他们添加了更多的工具来增加复杂性和降低生产力。
- 商业智能和数据科学工具很难针对世界上的每个数据库进行优化,从而导致性能不佳。
- 这些数据存储专门存储历史数据,而不是流数据。实时流数据是数字业务越来越重要的一个方面,例如物联网感知应用和自动算法系统。
为什么您需要统一分析数据结构
以下是您应该考虑使用统一分析数据结构的五个原因:
#1:事务和流就像花生酱和果冻一样形影不离
越来越多的公司希望他们的所有数据都在一个地方——Spark——包括交易和物联网数据。
例如,一家能源公司使用 SnappyData UADF 在 Spark 中存储他们的交易数据、流数据和参考数据。它们存储实时物联网天气预报更新,以及来自 CRM 和运营系统的客户和设备维护记录。一个 BI 图表可以生成跨三个数据域的查询,例如:
“根据实时天气预报数据,显示可能遭受财产损失的前 100 名客户,以及哪些客户最近没有得到维护。将这些数据放在地图上,这样我就可以决定下一个服务对象,并实时更新。”
如果没有 UADF,这种查询将需要复杂的 Spark 软件开发、定制数据集成,并且可能需要购买、安装和配置非 Spark 数据存储。
UADF 的技术扩展为 Spark 添加了近似查询、缓存和 MVCC,因此它可以同时处理所有这些数据域。所以 Spark 和你所有的数据一起更好,就像花生酱和果冻一样。
#2:利用你所拥有的
要在 Spark 中使用 UADF,您只需下载、配置并运行即可。您可以利用您对 Spark 已经了解和喜爱的一切,包括您的数据、技能和基础设施。
而且,因为它是基于 SQL 的,大多数 BI 和数据科学工具“只需与 UADF 一起工作”。因此,您可以利用您在已经使用的 BI 和数据科学工具上的投资。
结果是,你提高了生产力,同时也清理了你的技术结构。
#3:快如闪电的商务智能
单就 BI 性能而言,统一分析数据结构令人叫绝。开箱即用的简单分析查询的性能是普通 Apache Spark 的 12 到 20 倍。你可以在这里亲自尝试一下。
例如,一家大型企业集团通过统一财务报告和税务数据,将 120 个 ERP 系统减少到 45 个,节省了数百万的基础设施成本,并减少了因税务报告延迟而导致的罚款。
一个 Spotfire pharmaceutical 客户使用它就是为了:提高他们 Spark 存储库的 BI 性能。
#4:将流式商务智能与流式历史统一起来
流式 BI 是分析领域的一项最新创新。当附加到流数据时,它提供了连续、实时的分析体验。这些成果首次将 BI 引入运营系统。
下面的例子显示了一级方程式赛车的 BI 流。当汽车在赛道上加速时,嵌入式物联网传感器会传输数据流。分析师看到汽车位置和数据的实时、连续视图:油门、转速、制动压力——可能有数百或数千个指标。通过可视化其中的一些指标,竞赛战略家可以看到静态快照永远无法揭示的东西:运动、方向、关系、变化率。比如分析监控摄像头。
Streaming Business Intelligence allows business analysts to query real-time data. By embedding data science models into the streaming engine, those queries can also include predictions from models scored in real time.
但是请注意图表上写着:“齿轮颜色与理想齿轮的差异?”给定当前的天气条件、赛车配置和这条特殊的赛道,分析师如何知道理想的档位是什么?这种比较可能需要深入的流历史,将当前状况与以前的比赛进行比较,甚至是几分钟前的练习圈;这些数据可以理想地存储在 UADF 中,以便与实时数据进行比较,并在以后用于深度学习和机器学习。
#5:掌握数据的新机会
通过统一主数据管理、数据虚拟化和集成技术,Spark 可以成为完整数据管理平台的基础。通常,这些工具生活在他们的岛上;通过小心地连接它们,您可以更好地掌握企业数据。
统一分析数据结构走向全球
如果您已经接受了用于 BI、数据科学和物联网应用的 Spark,那么可能是时候了解一下 UADF 技术了。我们已经在 TIBCO 上全力以赴,并期待着与开源社区合作,使它变得更好。我们认为这是一项关键技术,可以同时为分析提供闪电般的性能并提高工作效率。
作为一名数据科学家,您为什么需要了解雪花
原文:https://towardsdatascience.com/why-you-need-to-know-snowflake-as-a-data-scientist-d4e5a87c2f3d?source=collection_archive---------3-----------------------
唯一为云构建的数据仓库
可能这是你第一次听到这个公司——雪花。
也许你在某个地方听说过这个名字,但仍然不确定雪花作为数据仓库到底是做什么的,以及它与其他平台相比有什么不同。
嗯…你猜怎么着?
最近,在 Gartner 发布了其 2019 年数据管理解决方案分析魔力象限(MQ)报告并将雪花评为领导者之一后,我才开始更多地了解雪花。
Snowflake Recognized as a Leader by Gartner in the Magic Quadrant
这引起了我的注意,我开始了解更多。
如果您在数据科学领域,并且编写 SQL 查询从数据仓库(或数据库)获取数据是您的日常工作,那么本文是从数据科学家的角度为您编写的。
到本文结束时,您将对 Snowflake 和它的一些关键特性有更多的了解,并了解它是如何慢慢改变作为数据仓库的游戏的。
我们开始吧!
雪花是什么?
Snowflake Introduction & Demo
雪花是一个完整的 SQL 数据仓库,完全是为云而构建的。
事实上,它的架构是它区别于其他平台的地方。
它提供了传统数据仓库或已转移到云的大数据平台无法实现的灵活性和效率。
如果您想更多地了解雪花的架构,以及它如何以传统解决方案的一小部分成本结合数据仓库的强大功能、大数据平台的灵活性和云的弹性,我强烈建议您查看下面的视频。
Introducing Snowflake Architecture in 90 Seconds
雪花的主要特征
Snowflake Architecture
到目前为止,您应该已经知道,Snowflake 的专利架构分为三层— 存储、计算和服务。
与传统的数据仓库相比,这是非常不同的,传统的数据仓库受到严格的数据建模和不灵活性的困扰。
1.存储层
这是所有数据集中存储的地方。
雪花管理如何存储这些数据的所有方面——组织、文件大小、结构、压缩、元数据、统计和数据存储的其他方面都由雪花处理。
客户不能直接看到或访问雪花存储的数据对象。它们只能通过使用雪花运行的 SQL 查询操作来访问。
更令人惊奇的是,存储层的扩展完全独立于计算资源。
这意味着雪花能够处理数据加载或卸载,而不会影响正在运行的查询和其他工作负载。
2.计算层
计算层旨在以最高的速度和效率处理大量数据。
雪花中所有的数据处理能力都是由虚拟仓库执行的,这些虚拟仓库是一个或多个计算资源集群。
当执行查询时,虚拟仓库从存储层检索满足查询所需的最少数据。
在检索数据时,数据会与查询结果一起缓存在本地计算资源中,以提高未来查询的性能。
更好的是,多个虚拟仓库可以同时对相同的数据进行操作,同时通过完全的 ACID 合规性全面实施全球系统范围的事务完整性!
3.服务层
想象一下,计算层(我们刚才谈到的)是雪花的肌肉,那么服务层就是控制计算层的大脑。
雪花的服务层认证用户会话,提供管理,执行安全功能,执行查询编译和优化,并协调所有事务。
服务层由无状态计算资源构成,跨多个可用性区域运行,并利用高度可用的分布式元数据存储进行全局状态管理。
本质上,您不需要担心您的查询被抢走计算资源,因为服务层跨所有虚拟仓库执行事务协调。
最后的想法
Source
感谢您的阅读。
我刚才描述的只是雪花为云构建的架构的简要概述。
事实上,雪花还提供了许多其他有趣的关键功能,如 【时间旅行】快速克隆自动查询优化 等等。****
到目前为止,我希望你已经了解了更多关于雪花的一些关键特性。
如果您对学习其他关键特性感兴趣(这是我强烈推荐的!),查看他们的网站 这里 !
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
**** [## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)****
为什么您需要将数据科学与解决问题结合起来
原文:https://towardsdatascience.com/why-you-need-to-team-up-data-science-with-problem-solving-21a9bbcb68e1?source=collection_archive---------38-----------------------
提高数据科学工作的效率
Photo by Leon on Unsplash
问题定义在数据科学中很重要
传统观点认为,在开始数据分析项目之前,正确定义问题非常重要。我完全同意这一点。为了将业务问题如实地转化为数据问题,理解业务环境是非常重要的,解决数据问题最终会产生有用的结果。
鼓励数据科学家熟悉业务环境的机制是向业务问题所有者提出问题。然而,正如你可能认识到的,即使一个人提出的问题也受到我们所知道的或试图发现的东西的限制。负责解决某个问题的数据科学家会询问问题发生的时间、方式和原因,以及有哪些数据可用于解决问题。对于领域知识有限的数据科学家来说尤其如此:他们可能会直接深入问题的细节。你认识这个吗?
但是问题的定义并不是一成不变的
如果这是您在您的组织中看到的情况,那么它可能错过了一些解决业务问题的更简单的解决方案。为了发现潜在的更简单的解决方案,您需要让企业所有者参与到问题中来,有点像管理顾问所做的那样,并对企业所有者在定义问题时所做的一些假设进行压力测试。这种合作解决问题的过程可能会带来一些解决问题的新方法,甚至是企业主都没有想到的。
请允许我用一个流程工业的例子来解释。建立一个加工厂需要大量的资本投资。为了有效地利用这种资产,加工厂通常制造多种产品或多种等级的相同产品,例如,多种等级的钢、多种等级的聚合物、不同的配方等。将生产从一个等级转换到另一个等级并非没有风险,而且会导致效率和质量问题。负责此类工厂的工厂经理可能会将此视为流程问题,并要求数据科学家确定驱动质量问题的变量和流程条件。承担这个问题的数据科学家可能会着手创建一个数据驱动的流程模型。但这种方法将错过探索解决问题的至少两个其他途径。
您可以通过协作解决问题来拓展您的数据科学解决方案空间
从哲学上讲,如果一个人想解决任何问题,总有三条途径可以实现——1。回避问题,2。减少问题,以及 3 .直接解决或消除问题。工厂经理决定走第三条路,也许他甚至没有意识到可能还有其他可行的途径。他或她可能从未听说过中国传奇将军和军事家孙子的名言“最高的战争艺术是不战而屈人之兵”。将引文中的敌人解读为当前上下文中的问题。在我们的流程工业示例中,替代途径可能如何工作?
如果有可能弄清楚特定年级之间的转换是否是根本原因,那么人们也许可以首先避免这个问题。例如,在工厂生产的五个等级 A、B、C、D、E 中,也许只有从 A 到 D 和 B 到 D 的转换是有问题的,而其他所有转换都是平稳的。在这种情况下,可以通过避免有问题的转换顺序来消除问题。如果这是一个现实的解决方案,数据科学家应该解决生产调度问题,而不是流程建模问题。
减少转换问题的一种方法是减少所需的转换次数。产品转换是必要的,因为产品的库存是有限的,而客户订单对某种类型的材料的需求超过了手头的可用数量。但是,如果库存管理是次优的,仅仅通过改变库存组合,就有可能满足客户需求,而不需要进行太多的转换,那该怎么办呢?如果这是一个现实的解决方案,数据科学家应该解决库存优化问题,而不是流程建模问题。
正如您所看到的,当您稍微打开解决方案空间并超越业务所有者的问题定义时,问题定义本身就完全改变了。一个从流程问题开始的问题可能最终通过更好的生产调度或库存优化得到解决。我认为,只有通过协作解决问题,才有可能达成这种开箱即用且可能更容易的解决方案。诚然,这样的解决方案可能并不总是可用的,但如果一个人总是完全忽视它们,那将是一个失去的机会。
数据科学工作的关键要点
如果您希望通过解决重要的业务问题来提高数据科学工作的有效性,您可能希望将数据科学工作与问题解决结合起来。
为什么你应该先成为多面手,再成为数据科学家的专家?
原文:https://towardsdatascience.com/why-you-should-be-a-generalist-first-specialist-later-as-a-data-scientist-f26d687f8c6?source=collection_archive---------8-----------------------
当我刚开始从事数据科学时,我想成为的人非常简单——成为一名数据科学家。句号。
我不知道自己是想成为数据科学通才还是专家。老实说,我从未听说过这些术语——“T0”、“通才”、“T1”和“T2”、“专家”、“T3”——直到我在这个领域工作了一段时间之后。
这让我想知道这一切的利弊,并思考我在数据科学领域的职业道路。
在网上做了一些研究并与该领域的一些人交谈后,我决定先成为一名数据科学通才,也就是全栈数据科学家,如果你愿意这样称呼的话,然后在不同领域获得更多经验和技能后成为数据科学专家。
在后面的部分你会知道为什么。
在下面的文章中,我们将在数据科学的背景下讨论更多关于通才和专家的内容。
那么什么是通才和专家呢?
在进一步讨论之前,让我们首先理解当我们谈论成为数据科学方面的通才和专家时,我们指的是什么。
一个通才是在许多领域都有知识的人,而一个专家在一个领域知道很多。就这么简单。
特别是在数据科学领域,在数据科学项目生命周期的所有阶段成为多面手是出了名的困难。获取不同领域的所有技能需要花费数年时间,但没有必要掌握所有技能。
同样,成为数据科学专家也不容易。
现在你可能会把多面手定义为万事通,但什么都不精通。
我完全同意这一点。
这正是我在数据科学道路的后期选择成为专家的原因。
为什么要先做通才?
毕竟,成为多面手并不意味着掌握任何东西,而是要了解整个数据科学项目生命周期的全貌。
问题是:为什么首先理解数据科学项目生命周期的整个流程很重要?
你看。作为一名数据科学家,我们不会为了建立机器学习模型而建立它。我们首先了解业务问题,并将其构建成可以通过数据科学方法解决的问题。然后,您需要识别数据源并定义成功的度量标准。根据您公司的成熟阶段,您可能还需要建立一个管道来收集数据(是的,您可能甚至没有数据)…
我们仍然可以继续下去,但重点是——以上所有的工作范围都是成为多面手的一部分。好消息是,作为一名多面手,作为一名职业生涯初期的数据科学家,你将了解数据科学问题的全貌。
换句话说,你会学习,你会成长,非常大。
我在这里提倡的是:如果你刚开始从事数据科学,我建议你先成为一名多面手。去加入一家初创公司,担任许多职务,因为你可能是公司里唯一的数据科学家。在一家公司的早期,多面手比专家能增加更多的价值,因为你的大部分产品都是从零开始打造的,有总比没有好。
你的机器学习模型不一定要改变游戏规则,但应该能够提供可操作的见解和结果。
了解如何帮助公司创造更多收入。了解如何利用现有数据或构建一些收集数据的管道来解决一些问题。
先从低垂的果实开始。如果公司还没有准备好,就不一定需要人工智能。事实上,正常的统计方法通常足以解决一些简单的问题。
理想的数据科学家是一个强大的多面手,他还能带来独特的专长,与团队的其他成员形成互补
做一个强有力的通才。成为行业中的佼佼者。
一旦你有了足够的经验,并且在某个特定的领域(比如 NLP)找到了自己的兴趣和激情,那么你就可以深入其中,这将引导我们进入下一个阶段。
为什么以后要做专科?
假设你是一名自然语言处理专家。您的重点可以仅仅是在给定数据的情况下构建最佳的 NLP 分类器模型。仅此而已。
所有的事情都已经为你准备好了。业务问题被很好地定义(由产品经理完成)。管道已准备就绪,并进行 24/7 维护(由数据工程师完成),数据就在那里等待收集。你需要做的是做你最擅长的事情。这是至关重要的,因为你可以专注于你的专业知识和优势,以增加项目的最高价值。
成为数据科学专家是再好不过了。成为你所在领域的专家在一家公司中起着重要的作用,这也是让你不可替代并对他人有价值的东西。
在这个阶段,既然你已经是数据科学领域的专家,那么你已经在不同领域积累了丰富的经验。你的经验和专业知识不是别人可以轻易替代的。
更好的是,您将能够专注于您的专业,并凭借您对数据科学工作流程其他部分的广泛知识和理解,作为一个团队与其他人合作。
你不再是只知道一件事的人了。相反,你是一个知道很多事情的人,专注于一件让你与众不同的事情。
最后的想法
(Source)
感谢您的阅读。
我希望这解释了为什么我决定在我的数据科学之旅中首先成为多面手,然后成为专家。
对一些人来说,先成为多面手,再成为专家,然后成为数据科学家的想法可能听起来有点争议。
归根结底,这个问题没有对错之分。只要符合您作为数据科学家的愿景,选择和顺序并不重要。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
你为什么要关心 Docker?
原文:https://towardsdatascience.com/why-you-should-care-about-docker-9622725a5cb8?source=collection_archive---------5-----------------------
如果您是一名软件工程师或数据科学家,您现在可能已经听说过 docker 了。
它引起我注意的方式是我在互联网上浏览深度学习框架,几乎所有其他框架都有 docker 支持,这让我思考 docker 到底是什么。
乍一看肯定不直观。
但是在我们深入 docker 之前,我们需要了解什么是虚拟机和容器。
什么是“容器”和“虚拟机”?
容器和虚拟机的目标相似:将应用程序及其依赖项隔离到一个自包含的单元中,该单元可以在任何地方运行。
此外,容器和虚拟机消除了对物理硬件的需求,允许在能耗和成本效益方面更有效地使用计算资源。
容器和虚拟机之间的主要区别在于它们的架构方法。
VMs and Container architecture
如上图所示,虚拟机构建在主机操作系统之上,因此增加了一个额外的层,这在容器中是完全没有的。
如果你和我一样,就把它(docker)当成一个更好的 VM,在那里你可以做大量的实验,而不必担心环境变量。
Docker 是什么?
Docker 真正做的是将应用程序代码从基础设施需求和需要中分离出来。它通过在一个称为“容器”的隔离环境中运行每个应用程序来实现这一点
这意味着开发人员可以专注于在 Docker 容器中运行的实际代码,而不用担心它最终将在哪个系统上运行,DevOps 可以专注于确保在 Docker 容器中安装正确的程序,并减少所需的系统数量和部署后维护所述系统的复杂性。
你为什么要关心它?
每一个 Docker 容器都是从一无所知的纯普通 Linux 机器开始的。
然后,我们告诉容器它需要知道的一切——为了运行应用程序,它需要下载和安装的所有依赖项。这个过程是用一个Dockerfile
完成的。
对于本节,可以说,Docker 消除了部署应用程序的猜测(和花费的调试时间),因为它总是作为一台全新的、隔离的机器启动,并且添加了完全相同的依赖项。每一个。单身。时间。
没有安装了不同版本依赖项的环境。没有完全缺少依赖关系的环境。不要和 Docker 胡闹。
1.易用性: Docker 让任何人——开发人员、系统管理员、架构师和其他人——更容易利用容器来快速构建和测试可移植的应用程序。它允许任何人在他们的笔记本电脑上打包一个应用程序,反过来可以在任何公共云、私有云甚至裸机上不加修改地运行。咒语是:“构建一次,运行在任何地方。”
2.速度: Docker 集装箱非常轻便快速。由于容器只是运行在内核上的沙盒环境,它们占用的资源更少。您可以在几秒钟内创建并运行 Docker 容器,相比之下,虚拟机可能需要更长时间,因为它们每次都必须启动完整的虚拟操作系统。
- Docker Hub: Docker 用户也受益于 Docker Hub 日益丰富的生态系统,你可以把它想象成一个“Docker 图片的应用商店”Docker Hub 拥有数万张由社区创建的公共图片,随时可供使用。搜索符合您需求的图像非常容易,只需很少或不需要修改就可以下载和使用。
4.模块化和可伸缩性: Docker 使得将应用程序的功能分解到单独的容器中变得容易。例如,您可能在一个容器中运行 Postgres 数据库,在另一个容器中运行 Redis 服务器,而 Node.js 应用程序在另一个容器中运行。有了 Docker,将这些容器链接在一起创建应用程序变得更加容易,使得将来独立扩展或更新组件变得更加容易。
Docker 入门
前往 docker 网站,如果你使用的是 Windows 10 家庭版,你需要 Docker 工具箱。
一旦你成功安装了 Docker,让我们试着在它上面运行 ubuntu image 稍后会详细介绍。
现在 Docker 允许你使用一个已经预先构建好的映像或者在一个已经存在的映像上构建。这个建立在现有图像上的建筑确实令人兴奋。
您可以定制图像,只定制您需要的图像并对其进行处理。
在我们开始研究 Dockerfile 之前,让我们确保我们的安装已经完成。
前往码头快速启动终端
Docker Quick Start Terminal
为了确保我们的设置配置正确,让我们运行 Docker 提供的默认映像。
docker pull hello-world
docker pull command
要查看您刚刚提取的图像,请键入以下命令:
docker image ls
最后,此刻,你在等待,你好,Docker 中的世界
running the hello-world container
docker run hello-world
Dockerfile —一切开始的地方
Docker 是一个强大的工具,但是它的力量是通过使用称为 Dockerfiles 的东西来利用的(如上所述)。
*Dockerfile*
是一个文本文档,包含用户可以在命令行上调用的所有命令,以组合一个图像。使用*docker build*
,用户可以创建一个连续执行几个命令行指令的自动化构建。- Docker,Docker 文件参考
Docker 映像由只读层组成,每一层代表一条 Dockerfile 指令。这些层是堆叠的,每一层都是前一层的变化的增量。
当 Docker 容器启动时,需要告诉它做什么,它没有安装任何东西,它知道如何不做任何事情。真的没有。
Dockerfile 首先需要的是一个基础映像。基础映像告诉容器要安装什么作为它的操作系统——Ubuntu、RHEL、SuSE、Node、Java 等等。
接下来,您将提供设置说明。这些都是 Docker 容器需要知道的事情:环境变量、要安装的依赖项、文件所在的位置等等。
最后,你必须告诉容器做什么。通常,它将运行安装说明中指定的应用程序的特定安装和命令。
在 Docker 上尝试 Ubuntu
这里有几个 docker 文件示例,包括解释每一行和每一层发生了什么的注释。
# Get the base ubuntu 18.04 from Docker hub# Head to https://hub.docker.com/_/ubuntu for other variationsFROM ubuntu:18.04# Get the necessary updatesRUN apt-get update# This ensures that the first directory that is opened once image is # build is /homeWORKDIR /home
将此文件保存为 Dockerfile。
现在前往 DockerQuick 启动终端,确保当前目录和存储 Dockerfile 的位置是相同的。
docker build .
现在当你这样做的时候,虽然 docker 创建了一个图像,但是你必须记住 docker 给它的随机名称,因为我们还没有给它命名。
docker build -t ubuntu1:latest .
现在,这确保了这个刚刚构建的映像被命名为 ubuntu1
docker image ls
Docker images
您可以看到,映像大小只有 111MB,相比之下,我们使用虚拟机时至少要分配 10GB。
还要注意,当我们在构建时没有 -t 标签时,存储库名称和标签是 none。所以当我们试图使用这个图像时,我们需要通过图像 ID 来记住它。
-t 基本上是格式储存库:标签
如果你忘记放置标签,docker 默认将其标记为 latest。
最后
docker run --rm -it ubuntu1:latest
— rm 确保容器运行后,立即删除。
-it 因为我们想使用终端进行交互。
你可以在 docker 终端中输入你在 Ubuntu 系统上输入的所有命令。
结论
我希望你现在已经具备了在自己的系统上开始入侵 Docker 所需要的知识,并且能够意识到这个不可思议的工具的威力!
如果你喜欢这个,这里有第二部分关于 Python 开发的 Docker。
你可以随时联系推特、领英、T21 或电子邮件。
为什么你应该关注算法的经济增长
原文:https://towardsdatascience.com/why-you-should-care-about-the-rising-economy-of-algorithms-cb33959acfe0?source=collection_archive---------20-----------------------
2016 年,一位 Reddit 用户表白。FiletOfFish1066 将所有工作任务自动化,花了大约六年时间“无所事事”。而原来的帖子似乎已经从 Reddit 上消失了,那里 正在 无数 关于录取的报道。原帖暗示他(所有故事都把 FiletOfFish1066 称为男性)花了大约 50 个小时做“真正的工作”。剩下的——“什么都没有”。当他的雇主发现后,FiletOfFish1066 被解雇了。我认为这是雇主可能犯的最严重的错误。他应该得到加薪。但这是另一篇文章的主题。让我们来谈谈雇佣算法为你工作——就像 FiletOfFish1066 有一堆算法为他工作一样。
如果你的员工把他们的任务自动化到“什么都不做”,不要解雇他们。给他们加薪,并向他们学习。他们将向你展示如何扩展你的业务。
算法不仅仅是为应用程序、脚本提供动力,或者以其他方式自动化任务。他们逐渐成为我们的私人代理人,代表我们做出决定。例如,总部位于波士顿的 Quantopian ,一家专注于众包的投资公司,允许人们提交简单的算法,然后代表投资者做出资金分配决定。算法还不像 Siri 快捷键那样简单,但是即使是初级程序员也应该能够编写简单的量子算法。想象一下成百上千个这样的算法,它们中的每一个都可以访问由 quantopian 提供的信息,决定如何处理它们创造者的钱。它不是科幻小说;它正在发生。一群算法不断决定如何分配资金。
你最近有没有雇过算法?
当算法代表我们做出决定时,当它们与其他组织互动、购物、订购服务或安排会议时,它们充当我们的经济代理。经济主体是经济某个方面的模型中的参与者或决策者。
还记得大公司最为重要的“旧”经济吗?它还没有去任何地方。然而,在过去的 20 年里,一种新的经济——人的经济——已经出现在企业经济的旁边。它给了个人前所未有的参与全球价值创造和交换的机会。当我们惊叹于人的经济时,另一种经济,算法的经济正在出现。在这种新经济中,算法和运行算法的设备(例如机器人)成为经济主体。他们在经济价值创造中发挥着积极的、往往是独立的作用。
三大发展对算法经济的出现至关重要:物联网、算法和商业模式。
Internet of Things + Algorithms as economic agents + Business Models = Economy of Algorithms
物联网
连接和交换数据的庞大电子设备网络创造了我们所说的物联网(IoT)。物联网有助于数据收集、分发、监控、趋势预测等。但最重要的是(对我们来说),它有助于连接我们可能拥有的所有设备。我们可以将物联网视为管道,通过这些管道,数据可以在所有设备之间向各个方向流动。尽管一些供应商希望我们认为物联网主要是管道末端的设备(传感器、服务器等),但网络——管道——才是最重要的。
作为经济代理的算法
管道本身并不创造价值。只有当我们使用管道中流动的数据,并聪明地使用它,我们才能创造价值。这就是代表我们的算法可以介入的地方。我车上的一个智能传感器,将它的引擎电脑连接到我的手机和自动的服务器,现在可以通知我的机械师我的引擎是否有问题,或者在我离开时启动我家的警报器。我写了一个简单的脚本——一个算法——来完成这个任务。 Koola 试验使用预测算法向经销商提供“服务机会”(即:汽车 X 可能很快会坏)。如果你的汽车修理工告诉你你需要修理你的车,因为它很快就要坏了,你会相信吗?这让我想到了第三个部分。
商业模式
创造价值的互联设备和算法是伟大的,但如果没有商业模式,它们只是一个有趣的练习。当创造经济价值时,橡胶就上路了。而且在追踪汽车数据的情况下,值得关注的商业模式越来越多。美国保险公司 Progressive 提供快照。这项服务要求司机在他们的车上安装一个传感器,类似于自动的传感器。然后,累进减少或增加你的保险费的基础上,来自传感器的数据。想铺地板吗?它可能会让你失去优惠折扣!新的保险模式(商业模式)现在有了名字:黑箱保险。哦,还有科拉?他们的推特已经沉寂了一年多。或许他们的商业模式没有那么好?
你为什么要在乎?
1.算法的经济性可以让你变得富有(呃)
是的,你已经可以节省保险费了。但是还有更多的。随着技术的进步,你的设备和算法将能够主动产生收入(是的,你可能已经有了太阳能电池板,可以将能量卖回给电网,但它们完全是被动的)。在未来,你的家可以知道你的车库在接下来的八个小时内将是空的,并将这个空位提供给一辆自动驾驶汽车,寻找一个安全的地方停一会儿。与许多人不同,算法看不出在大型多层广告停车场停车和在两个街区外的私人车库停车有多大区别。如果汽车的偏好功能优先选择便宜的停车点,私人车库比商业车库便宜,汽车就会选择私人车库。不问任何问题。所以,让你的家庭管理算法检查你的日历,广告点,自动打开和关闭车库门,并代表你接收汽车的微支付。
有算法可以帮你省几个钱!如果你对他们有足够的控制权,雇佣他们可能是有意义的。
说到太阳能电池板:运行你家的算法可能会决定在白天不将能量送回电网,而是为附近的电动汽车提供一个弹出式充电站,使用车道上的无线充电垫,就是你通常用来给汽车充电的那种。使用网络(物联网),你的算法将能够为充电站做广告,并可能自动出价,假设其他房屋可能也想出售电力。听起来科幻?不应该。像park hound这样的服务已经可供人类使用。他们开发用于算法的API只是时间问题。
2.你会做更少的决定
就像 FiletOfFish1066 想在重复性任务上花更少的时间一样,我们许多人都试图将每天做出的选择数量减到最少。有人称之为选择极简主义,我称之为便利。我不想在家里做每一个购买决定。卫生纸、牛奶或更换液化石油气容器?我很想摆脱记得买这些东西的负担。
大约两年前,迈克尔·罗斯曼、保拉·杜森和我发表了一份关于零售业未来的报告:零售 5.0。在该出版物中,我们认为“便利购物”(与“体验购物”相对)将会被技术减少到最低限度。换句话说,算法将接管很多这样的决策。根据今天出版的《泰晤士报》的一篇报道,杰夫·贝索斯似乎同意尝试零点击购物。当杰夫·贝索斯尝试一些东西时,很有可能会改变世界。
零售业的未来是没有零售,或者零点击零售。算法的经济性使之成为可能。
是好是坏?它可以双向进行。如果我的冰箱一直点垃圾食品让我“开心”怎么办?如果我的家庭助理让我的账户透支,而我又被银行大量收费,该怎么办?如果我的车库让我变富了呢?如果我周围的所有算法最终允许我专注于完成我去年承诺要完成的那本书,会怎么样?不管怎样,这是我们应该关注算法经济性的另一个原因。
3.你需要重新思考你与技术的关系
算法只是计算机解释的指令。但是,不管喜欢与否,我们需要改变我们对他们的看法。从两个方面来说:我们需要像对待我们的人类经济代理人一样对待他们,我们需要花时间真正理解他们,并找出如何让他们作为一个团队工作。
第一个可能有点意外。但是,你有没有像看待购物者那样看待智能冰箱呢?你如何给冰箱做广告?你如何确保量子运算法则的价值与你的一致?这些问题只是看起来很可笑。它们可以揭示算法的经济性可能带来的机遇或挑战。
你如何给冰箱做广告?
让你的算法像团队一样工作?一旦你雇佣了一堆算法为你工作(或者和你一起工作),你可能会很快看到它的价值。像 FiletOfFish1066,六年每年领 95k 左右的工资。但是,就像人类团队一样,算法作为一个团队工作将会取得更大的成就。希望对你来说。
无论你是像 FiletOfFish1066 一样,寻找雇用算法的机会,还是像他的经理一样,寻找保持世界不变的机会,即将到来的算法经济都将让你忙个不停。有一点可以肯定,那将是一个激动人心的时刻!
作为一名数据科学家,为什么应该首先进行功能工程,然后进行超参数调整
原文:https://towardsdatascience.com/why-you-should-do-feature-engineering-first-hyperparameter-tuning-second-as-a-data-scientist-334be5eb276c?source=collection_archive---------3-----------------------
事实上,特征工程比超参数调整更重要的认识对我来说是一个教训——一个觉醒和重要的教训——它彻底改变了我处理问题和处理数据的方式,甚至在建立任何机器学习模型之前。
当我第一次开始我的第一份全职工作时,我是机器学习领域的研究工程师,我非常兴奋,沉迷于构建花哨的机器学习模型,而没有真正关注我拥有的数据。
事实上,我很不耐烦。
我太想要结果了,以至于我只关心从我的模型中榨取每一个百分比的性能。不用说,我尝试了这么多次都失败了,想知道为什么。
“你应该更专注于获得好的特性(特性工程),而不是优化你的模型的超参数(超参数调整)。你看…如果你没有模型可以学习的好的特征,即使你有最佳的超参数,它也不会提高你的模型的性能,”
—我的一个团队成员这样对我说。
从那一刻起,我知道有些事情必须改变——我的方法必须改变,我的心态必须改变,以接受别人的意见,实际上是一切。
一旦我试图理解我试图解决的实际业务问题和我拥有的数据,我就添加一些新的特性来更好地表示问题,以便模型可以有效地学习底层模式。
结果?
与使用超参数调整很少或没有改善相比,我设法显著改善了模型的 AUC (这是一个分类问题)。
这就是我如何学会特征工程的重要性的,艰难的方式。并且希望和大家分享一下特征工程和超参数调优的重要性。
在本文结束时,我希望您能够理解为什么特性工程比超参数调优更重要,并在进入调优部分解决您的问题之前使用这种方法。
记住。如果你愿意倾听,数据会和你说话。
我们开始吧!
特征工程的重要性
我记得当我第一次开始学习数据科学的东西时,功能工程并不总是书籍和在线课程的主题。
这给了我一个错误的印象,也许特征工程在应用机器学习解决问题方面并不那么重要。
在讲什么是特征工程及其重要性之前。让我们退一步,试着理解机器学习模型是如何工作的。
机器学习模型如何工作?本质上,机器学习模型只是一种算法,通过对历史数据进行训练来学习 【模式】 ,最终基于看不见的测试数据做出预测。
换句话说,如果数据没有足够的代表性来描述您试图解决的问题,您的模型将无法学习底层的 【模式】 。这就是特征工程发挥作用的地方。
什么是特征工程?特征工程是将原始数据转化为更好地代表预测模型潜在问题的特征,从而提高未知数据的模型准确性的过程。
—杰森·布朗利(Jason Brownlee),一位出色的机器学习实践者,他创立了机器学习大师。
尽管模型的性能取决于几个因素——准备的数据和特性、模型在训练中的使用、问题陈述、衡量模型成功的指标等——但优秀的特性仍然是决定模型成功的关键因素。
特征工程的重要性是什么?在我看来,虽然你可以聚合数据生成额外的特征(均值和最大值等。),拥有强大的业务领域知识将让您对您拥有的数据有更多的了解,并基于其相关性和关系生成新的功能。
凭借出色的功能,它为型号选择提供了更大的空间。您可以选择一个更简单的模型但仍然能够获得良好的结果,因为您的数据现在更具代表性,并且不太复杂的模型可以轻松地学习底层模式。
最终,特征工程归结为问题表示。如果你的数据有很好地代表问题的特征,你的模型很可能会给出更好的结果,因为它已经很好地学习了模式。
就我个人而言,我觉得这篇文章写得很好,非常有助于您开始学习和使用特性工程— 发现特性工程,如何设计特性以及如何擅长它。看看就知道我什么意思了。
超参数调整的重要性
这里我想说一下超参数调优的重要性,让大家在对比中有一个整体的了解。
什么是超参数调谐?在机器学习中,超参数调整就是为一个学习算法选择一组最优超参数的问题。
— 维基百科
模型超参数是模型外部的一种配置,其值无法从数据中估计。作为一个数据科学家(或者机器学习实践者,不管叫什么名字),模型超参数对我们来说是未知的。
我们只能通过搜索超参数的离散空间,根据给定的默认值、经验法则或反复试验来找到最佳值。
为了让您更清楚地了解情况,一些超参数是训练神经网络的学习率、支持向量机的 C 和 sigma 值(SVM),或者 k-最近邻中的 k 值(KNN)。
超参数调优的重要性是什么?超参数至关重要,因为它们控制着机器学习模型的整体行为。最终目标是找到超参数的最佳组合,使预定义的损失函数最小化,以给出更好的结果。
不这样做将给出次优的结果,因为模型不收敛并且不能有效地最小化损失函数。
这就像探索一系列的可能性,并试图找到给你最好结果的最佳组合。用于调整超参数的一些常用技术包括 网格搜索、随机搜索、贝叶斯优化和其他 。
为什么对于数据科学家来说,功能工程比超参数调整更重要?
(Source)
既然我们已经理解了特征工程和超参数调整的重要性,让我们更深入地了解一下为什么前者比后者更重要。
这并不是说超参数调整不重要,而是说当我们谈论改善模型的性能和最终结果时,这是一个优先事项,特别是在现实生活的业务场景中(我将在后面解释)。
首先。我们必须明白,大多数机器学习库中的超参数的默认值足以迎合大多数用例。通常情况下,很难显著提高性能。在 Kaggle,超参数调整非常重要。在现实生活中,这几乎无关紧要。
其次。面对现实吧。超参数调谐耗时且计算量大。迭代不同的超参数组合来实现较小的改进需要花费很多时间。更糟糕的是,如果您有大量的数据和复杂的模型,每次迭代都需要大量的资源。在商业领域,时间就是金钱。如果寻找最佳超参数所需的努力和时间不能证明最终 ROI(金钱!),如果给定一组具有很好特性的数据,您的模型对于部署来说足够好,那么很可能根本不需要超参数调整。
第三个也是最后一个。在现实生活中,由于时间限制,很难同时获得最佳特性和超参数。因此,要在更短的时间内实现巨大的改进,更明智的选择是首先执行特征工程,以足够好地表示问题,以便模型可以学习和准确预测。只有在我们拥有了出色的特性之后,如果时间允许或者业务环境需要,我们才能考虑调优超参数。这就是为什么特性工程应该放在第一位,超参数调整应该放在第二位的主要原因。
最后的想法
(Source)
感谢您的阅读。
通过分享我的错误和学习经验,我希望你已经理解了这两者的重要性,以及为什么在提高你的模型的性能时,特性工程应该是优先考虑的。
如果你想了解更多关于特征工程的知识,以及如何将其应用到你的机器学习问题中,那么这本书就是给你的——机器学习的特征工程。在典型的机器学习课程中,特征工程不是一个正式的主题,因此这本书旨在通过整本书的练习,用几种特征工程技术给你实际的应用。
希望有所帮助!
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
为什么您应该记录您作为数据科学家的工作
原文:https://towardsdatascience.com/why-you-should-document-your-work-as-a-data-scientist-a265af8a373?source=collection_archive---------7-----------------------
你看。
每当我们谈论数据科学时,我们很可能会首先想到那些新奇的东西,如人工智能、深度学习、机器学习等。
但是没有人谈论文档,原因之一我们都知道——它听起来不性感(或者听起来很无聊)。
我完全同意文档通常不是数据科学家最感兴趣的事情之一。但是,它的重要性不亚于其他数据科学工作流,尤其是在数据科学项目管理方面。
事实上,文档不再仅仅是程序员或开发人员完成的任务。这是我们作为数据科学家应该知道的事情,并且只能定期执行这项任务。
有趣的是,一份 2017 Github 开源调查显示“不完整或混乱的文档”是关于开源软件的头号投诉。
2017 Github Open Source Survey
文档被高度重视,但经常被忽视。
这不仅仅是针对开源文档。类似的重要性也适用于我们的实际工作场所,我们必须记录数据科学工作流程,并确保随时更新。
在接下来的文章中,您将了解为什么文档在数据科学中很重要。
我们开始吧!
那么,为什么文档在数据科学中很重要呢?
1.再现性
是的,再现性。
我特别赞同 Matt.0 写的那篇关于 T 他对于数据科学项目管理 的“黄金标准”。他有一个 Github repo 用于建立一个新的数据科学项目目录的黄金标准工作流。去看看那个!
在他的文章中,他提到了这一点:
Daniele Procida 的这篇关于软件文档的黄金标准的 优秀帖子很好地总结了这一点,他说:
“你的软件有多好并不重要,因为如果文档不够好,人们就不会使用它。
即使出于某种原因他们不得不使用它,因为他们没有选择,没有好的文档,他们不会有效地使用它或以您希望的方式使用它。"
没有一个好的和有组织的文档,人们不会使用你日以继夜工作的代码,更不用说复制你的结果了。
因为面对现实吧。
即使你在为一个项目编写代码库方面做得很好,并为此感到非常自豪。有一天,你团队中的一位同事打算对你现有的代码进行改进。
因此,您的同事希望重现您的结果,但由于文档不完整,他/她不知道该如何做。见鬼,你的同事可能甚至不理解你的代码。
没有好的文档和注释,阅读别人的代码总是一种折磨。
这里的要点是:让文档尽可能清晰简单。当你在做项目时(而不是在完成项目后),一致地记录你的工作流程。为了帮助其他人理解你的工作流和代码,以便他们在将来重现你的结果——修复一些错误或进行改进。如果可能的话,找人看一下你的文档,确保其他人能够理解你的解释。
2.确保项目成功完成
这很重要。
不管你是实习生还是全职员工。
因为你猜怎么着?
没有员工会永远在一家公司。如果他们已经不在公司了,并且没有留下任何文档就把他们完成了一半的项目传给了其他人,那么只有两种结果——项目将会悬而未决,或者项目将会需要比预期更多的时间来完成。
我在第一次实习时,作为的数据科学家实习生,学到了这重要的一课。
起初,当我被要求制作文档时,我根本无法理解背后的原因,从我如何收集、清理和分析数据,到我使用和比较的机器学习模型,以及我在整个实习期间获得的结果。
只有当我在这个领域获得了更多的经验后,我才意识到文档对于数据科学项目是多么重要,我对我在第一次实习中学到的东西感激不尽。我指的是详细的文档,包括你犯过的所有错误、尝试过的方法、获得的见解以及未来的行动建议等等。
我们不能假设其他人在没有向他们展示我们的项目是什么,以及当你不在的时候,他们如何在你的遗产之上进行建设的情况下,会理解我们的项目是关于什么的。
这将确保您的项目仍将继续运行,并得到良好的管理。
负责任,对他人表现出同理心。
最后的想法
Sharing my data science learning journey at a meetup
感谢您的阅读。
我希望通过与您分享我的个人经验和文档的重要性,能够让您在数据科学之旅中更加清晰。
事实上,如果你一直在关注我的工作,我一直在 【记录】 通过写作和在 LinkedIn、Medium 和许多其他出版物上与他人分享我的知识,来“记录”我的学习之旅。
我觉得这种方式可以帮助我更好地了解数据科学。最重要的是,我喜欢分享!分享是我日复一日生活和呼吸的内容。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
** [## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)**
为什么你应该双浸自然图像分解
原文:https://towardsdatascience.com/why-you-should-double-dip-for-natural-image-decomposition-ee65b1c1c9bc?source=collection_archive---------20-----------------------
基于耦合深度图像先验的无监督图像分解
许多计算机视觉任务都希望将图像分解成单独的部分。在图像分割中,图像被分解成有意义的子区域,例如前景和背景。在透明分离中,图像被分离成其叠加的反射和透射。另一个例子是图像去雾的任务,其目标是将有雾的图像分成其基本的无雾图像和模糊的雾层。
虽然起初看起来不相关,但是这些任务可以被视为将图像分解成单独层的特殊情况。例如,如图 1 所示;图像分割(分离成前景和背景层);透明层分离(分成反射层和透射层);图像去雾(分离成清晰图像和模糊贴图),等等。
在这篇文章中,我们将重点关注“双 DIP”,这是一个基于几个“深度图像优先”(DIP) 网络的单一图像无监督层分解的统一框架。
对于热心读者: 关于“深度图像优先”(DIP) 的更多细节,查看我以前的帖子。
Figure 1: A unified framework for image decomposition.
一些直觉
“双倾角”主要建立在“深度图像先验”(倾角)之上;Ulyanov 等人在 DIP 中的工作表明,DIP 网络的结构足以捕获单个自然图像的低级统计。
DIP 网络的输入是随机噪声,它训练以重建单个图像(作为其唯一的输出训练示例)。这种网络被证明是非常强大的解决图像恢复任务,如去噪,超分辨率和修复,在一个无监督的方式。下面是一个图像去噪的例子,摘自我在之前发表的关于深度图像的文章:
Figure 2: (Left) — Clean image x* restoration result using Deep Image Prior starting from random initialization up to convergence , (Right) — The Noisy image x^
“双倾角”的作者观察到,通过使用多个倾角的组合来重建图像,这些倾角往往会“分裂”图像,就像人类自然分裂图像一样。此外,他们展示了如何将这种方法用于额外的计算机视觉任务,包括图像去雾、图像和视频的 Fg/Bg 分割、水印去除以及图像和视频中的透明分离。
“双下降”:通过耦合深度图像先验的无监督图像分解
双下降的关键方面是固有的,即每个分解层内小块的分布比原始混合图像中的【更简单】(更均匀)。我们用一个例子来简化一下;
Figure 3: The complexity of mixtures of layers vs. the simplicity of the individual components
让我们观察图 3a 中的示例。两种不同的纹理, X 和 Y ,混合起来形成一个更复杂的图像 Z ,呈现出图层透明。每个纯纹理( X 和 Y )内部的小块和颜色的分布比组合图像( Z )中的块和颜色的分布更简单。此外,跨两种纹理的补片的相似性非常弱。
声称一幅图像可以用一种自然而简单的方式分离成它的子成分是从 信息论 中推导出来的。这里证明了对于两个独立的随机变量 X 和 Y ,它们的和 Z = X+Y 的联合熵大于它们各自的熵。
单倾角与耦合倾角
单一 DIP 网络用于学习 pusre 图像与混合图像之间的差异可以在下面的图 4 中示出。
Figure 4. MSE Reconstruction Loss of a single DIP network, as a function of time
在图 4 中,对于图 3a 中的 3 个图像中的每一个,示出了单个倾角网络的 MSE 重建损失,作为时间的函数(训练迭代)。
- 橙色橙色图是为重建纹理图像 X 而训练的下降的损失
- 蓝色图——经过训练以重建纹理的倾斜 Y
- 绿色图-经过训练以重建其叠加混合物(图像透明度)的倾斜。
请注意,与单个分量的损失相比,混合图像的损失更大,收敛时间更长。这意味着混合图像的损失大于两个单独损失的总和。这可能与混合图像中的小块分布更加复杂和多样(更大的熵;更小的内部自相似性)。
最后,应用多个 DIP 显示它们倾向于在它们之间“分裂”图像碎片。也就是说,图像内类似的小块往往都是由单个 DIP 网络生成的。换句话说,每个倾角捕获图像内部统计数据的不同组成部分。
“双底”框架
图 5。演示了双 DIP 框架:两次 DIP 将输入图像 I 分解为层(y1 和 y2),然后根据学习到的遮罩 m 对这些层进行重组,从而重建 I 的近似图像。
Figure 5. Double-DIP Framework
什么是好的图像分解?
一幅图像有无限多种可能的分层方式。作者提出以下特征来定义有意义的分解:
- 当重新组合时,恢复的层重建输入图像
- 每一层都应该尽可能“简单”
- 恢复的层之间不应该有依赖性或相关性
这些建议转化为用于训练网络的损耗。第一个标准是通过“重建损失”来实施的,该“重建损失”测量所构建的图像和输入图像之间的误差。第二个标准是通过采用多次倾斜(每层一次)获得的。第三个标准是通过不同骤降的输出之间的“排除损失”来实施的(最小化它们的相关性)。
每个 DIP 网络重建输入图像的不同层 y _ II。每个 DIP 的输入是随机采样的均匀噪声 z_i
,其应尽可能接近输入图像 I. 因此,优化损失为
其中,损失第一元素,即重建损失定义为
第二个要素是排除损失,它使 y1 和 y2 的梯度之间的相关性最小化。最后,正则化掩模项将掩模 m 拉至尽可能接近二进制图像。
结果
如上所述,这种方法适用于许多计算机视觉任务,如图像分割、透明层分离、图像去雾等。
分割
将图像分割成前景和背景可以表示为将图像分解成标记为 y_1 的前景层和标记为 y_2 的背景层。这两层与二进制掩模结合将产生分解的图像,并且可以用公式 1 表示:
Equation 1
这个公式自然地适合双倾角框架,服从符合自然图像先验的 y_1 和 y_2,并且每一个都比 I. 更“简单”地生成
正则化项在这里被定义为鼓励分割掩模被二进制化和定义
下面的结果显示了双 DIP 的优点,实现了仅基于层分解的高质量分割,而无需任何额外的训练数据。
Figure 6. Foreground/Background separation results
水印去除
水印广泛用于照片和视频的版权保护。双浸通过将水印视为图像反射的特殊情况来消除水印,其中 y1 是清除的图像,y2 是水印。
这里,与图像语义相反,掩模不是常数m。固有的透明层模糊通过两种实际方法之一解决:(I)当只有一个水印图像可用时,用户提供围绕水印位置的粗略提示(边界框);(ii)给定几个共享相同水印的图像(通常 2-3 个就足够了),模糊性自行解决。
图 7。下图显示了双浸法去除水印的显著效果。
Figure 7. Watermark removal from a single image
透明层分离
在图像反射的情况下,图像 I(x) 中的每个像素值是来自透射层 y_1(x) 的像素和反射层 y_2(x)中的对应像素的组合。这也可以用等式 1 来表示。其中 m(x) 是反射掩模。
下面的动画展示了真实透明图像的成功分离。
结论
双 DIP 为单个图像的无监督层分解提供了一个统一的框架,并且需要额外的数据集。这个框架适用于各种各样的计算机视觉任务。
如果你对源代码感兴趣,可以在我的 Double-DIP — GitHub 库中找到。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。
在那之前,下一篇文章再见!😄
为什么您应该加倍投资无服务器基础架构
原文:https://towardsdatascience.com/why-you-should-double-down-on-serverless-infrastructure-a89e323fb1cd?source=collection_archive---------19-----------------------
当你加倍使用无服务器架构时,你开始收获惊人的回报。
无服务器已经存在几年了。这不是一个全新的想法,但它是一种关于构建应用程序的新的思考方式。
我总是倾向于在考虑如何做某件事之前,先考虑我为什么要做这件事。它有助于激励、产品设计和理解。它鼓励你重新思考现有的“众所周知”的解决方案,并确保你每天都验证你所做的假设。
为什么选择无服务器?
这就是为什么无服务器的“为什么”是最重要的。如果你不明白你为什么使用无服务器,你将无法正确地实现它。那次失败将会抹去你认为你拥有的任何好处。
- 它有助于你晚上睡觉(因为你不管理服务器)
- 它使您能够快速扩展(最好是自动扩展)
- 它减少了实现解决方案所需的领域专业知识的数量。
所有这些都意味着同样的事情。无服务器允许个人或公司将其全部精力集中在独特的销售主张(USP)上。
所有其他的好处只是让你的团队专注于你的 USP 的描述。一个好的组织应该专注于他们的 USP,无服务器的思维模式确保了这一点。作为一名开发人员,我不必管理服务器、创建和管理数据库、扩展服务器、处理停机时间、构建容错能力,这些都是构建可扩展系统时难以管理的方面。作为一名经理,我可以花更多的时间关注过程和目的。
对于创作者来说,拥有一个将扩展和操作全球应用程序的整个工作抽象化的范式是一个巨大的福音。
Don’t let your developers turn into firefighters.
这需要时间,需要努力,需要专业知识来跟上速度,但无服务器确保创作者创造,而不是交火。无服务器减少流失,提高生产率,增加可伸缩性,并允许您在一个小团队中生成真正改变游戏规则的应用程序。
这就是你应该选择它的原因——毫无疑问。
如果你做得对,无服务器也很好。
大部分公司做的不对。
什么是无服务器?
一旦你理解了为什么你会选择无服务器,你需要理解什么是无服务器解决方案。这个解释需要尽可能的简单,这样你就可以很容易的验证你的决定。了解什么是无服务器变得至关重要,因为它不会工作,如果你不加倍。不断在脑海中重复一句简单的话。
围绕无服务器构建每个决策。只有在你用尽了所有的选择之后,你才应该去寻找其他的东西。一旦您将一个非无服务器组件引入到您的应用程序中,您就引入了一个泄漏。一个单一的决定,一个单一的失败点会成为你无服务器盔甲上的扭结。
你已经打败了整个目的,你已经使你自己残废了,而你的竞争对手甚至不用动一根手指头。我喜欢简单的解释,它们更有说服力。杰里米·戴利对“无服务器”有我能找到的最简单的解释。
- 仅对您使用的内容收费
- 无需服务器维护
- 提供连续缩放
- 支持内置的高可用性和容错能力
任何不具备所有这些属性的东西都无法通过测试。如果它没有通过测试,那么你需要有一个非常好的理由来解释你为什么用不同的方式做这件事。
跃进
转换你的公司或团队的运作模式是困难的,组织越大,决策就越困难。新公司和新应用的优势在于起步较晚。
然而,在你决定坚持你所拥有的之前,好好想想。只有少数真正的极端情况下,正确实施的无服务器解决方案是次等解决方案。它对你的团队起到检查的作用,确保你总是关注你提供价值的地方。90%的情况下。
杰西·摩尔——首席技术官——jesse@mobilads.co
页(page 的缩写)s——如果你有兴趣在一家致力于无服务器、打造伟大产品和颠覆破碎行业(广告技术)的公司工作,请在下面给我发一封电子邮件,附上你的简历、一个示例项目和一段内容(博客帖子、youtube 等)。我会回复所有正版申请。
原载于https://blog.mobilads.co。
为什么您应该了解流数据科学
原文:https://towardsdatascience.com/why-you-should-learn-about-streaming-data-science-2f603ad24aea?source=collection_archive---------8-----------------------
自适应学习和数据流数据科学的独特用例。由 汤姆希尔 和 马克帕
传统的机器学习基于历史数据训练模型。这种方法假设世界本质上保持不变,即过去观察到的相同模式、异常和机制将在未来发生。因此,预测性分析实际上是展望过去而非未来。
最近可用的工具可以帮助商业分析师基于来自任何来源的流数据“查询未来”,包括物联网传感器、网络交互、交易、GPS 位置信息或社交媒体内容。类似地,我们现在可以将数据科学模型应用于流数据。
不再局限于只看过去,流数据科学的影响是深远的。
基于历史数据的数据科学模型是好的,但不是万能的
今天,机器学习的大多数应用程序都试图在历史数据中识别预测未来事件的重复且可靠的模式。当维度和“概念”之间的关系稳定并能预测未来事件时,这种方法是可行的。
例如,海滩的预期游客数量可以根据天气和季节进行预测——在冬天或下雨时,较少的人会去海滩,这些关系将随着时间的推移而保持稳定。
同样,大多数消费者进行的信用卡消费的数量、金额和类型将遵循可从历史消费数据中预测的模式,任何与这些模式的偏差都可以作为欺诈警报的有用触发器。
此外,即使变量之间的关系随着时间的推移而改变,例如当信用卡消费模式改变时,有效的模型监控和模型的自动更新(称为重新校准或重新建立基础)也可以产生有效、准确而又适应性强的系统。
流数据科学在流中应用算法
然而,在某些情况下,将学习算法应用于实时流数据是有优势的。有时,推动应用价值的一个关键因素是新发现和新出现的见解转化为行动的速度。
在某些用例中,对流式数据应用自适应学习算法比等待它在数据库中静止下来更有优势。
例如,为了识别预测公众意见、时尚选择和消费者偏好的关键因素,持续建模和模型更新的适应性方法可能是有帮助的。
流式 BI——流数据科学的使能技术
为了理解流数据科学,首先理解流商业智能(流 BI)是有帮助的。
下面的视频展示了一级方程式赛车中的 BI 流。当汽车在赛道上加速时,嵌入式物联网传感器会传输数据流。分析师看到汽车位置和数据的实时、连续视图:油门、转速、制动压力——可能有数百或数千个指标。
通过可视化其中的一些指标,竞赛战略家可以看到静态快照永远无法揭示的东西:运动、方向、关系、变化率。比如分析监控摄像头。
Streaming Business Intelligence allows business analysts to query real-time data. By embedding data science models into the streaming engine, those queries can also include predictions from models scored in real time.
流式 BI 的创新之处在于,您可以查询实时数据,由于系统会注册并不断重新评估查询,因此您可以有效地查询未来。
也就是说,一旦您创建了可视化,系统会记住您的问题,这些问题为可视化提供了动力,并不断更新结果。你只要设置好,然后忘记它。
在这种情况下,BI 工具记录了这个问题:
“选择连续[位置,转速,油门,刹车]”*
当数据流中的任何数据(位置、转速、油门、制动压力)发生变化时,可视化会自动更新。计算会改变。关系会变。视觉元素会改变。
流式 BI 的突破性创新在于,您可以查询实时和未来的情况。
新问题成为可能
如果可以查询未来,你会问什么问题?比赛团队可以询问赛车何时将采用次优路径进入发夹弯;在给定的赛道条件下,找出轮胎何时会开始出现磨损迹象,或者了解天气预报何时会影响轮胎性能。
因此通过带有查询注册的连续查询,业务分析师可以有效地查询未来。
但是,如果这些查询也可以结合数据科学算法呢?嗯,他们可以!
适应性学习用例
流式数据的自适应学习是数据科学中人类通过不断观察环境来学习的等效方法。
流式数据的自适应学习是数据科学中人类通过不断观察环境来学习的等效方法。
例如,在高科技制造业中,可能会出现几乎无限多种不同的故障模式。为了避免此类故障,流式数据有助于在质量问题出现时尽快识别出相关模式。
当前所未见的根本原因(机器、制造投入)开始影响产品质量时(有概念漂移的证据),员工可以更快地做出反应。
来自流数据的自适应学习意味着基于最新数据的模型的持续学习和校准,有时将专门的算法应用于流数据以同时改进预测模型,和同时做出最佳预测。
持续自适应学习非常有用的其他例子包括保险产品或消费品的价格优化、金融服务中的欺诈检测应用,或者快速识别不断变化的消费者情绪和时尚偏好。
走向流式数据科学的未来
从连续的流数据中学习不同于基于历史数据或静态数据的学习。大多数机器学习和人工智能的实现依赖于相关历史数据的大型数据仓库,并假设历史数据模式和关系将有助于预测未来的结果。
然而,当使用流数据来监控和支持业务关键型连续流程和应用程序时,通常会出现数据模式的动态变化。与静态数据相比,分析动态数据需要不同的分析和架构方法。
流式 BI 提供了独特的功能,支持几乎所有流式使用案例的分析和人工智能。这些能力可以带来关键的竞争优势和成功。
Thomas Hill 博士是 TIBCO 分析集团高级分析(Statistica 产品)高级总监。他曾在 Statistica、Quest 和戴尔信息管理集团担任分析执行总监。
马克·帕尔默是 TIBCO 软件公司的 SVP 分析师。作为 StreamBase 的首席执行官,他被《时代》杂志评为将改变你生活的技术先锋之一。
为什么你应该在看你的数据之前选择你的假设
原文:https://towardsdatascience.com/why-you-should-pick-your-hypotheses-before-looking-at-your-data-6d087751336c?source=collection_archive---------8-----------------------
在统计学课上,我的教授经常重复在查看数据之前决定要检验的假设的重要性。他会对数据挖掘的想法嗤之以鼻,并声称任何在查看数据后形成假设的人注定会失败。
他从没说过为什么。
我在设计医学试验的指南中也看到了类似的想法:在开始随机对照试验来测试药物的疗效之前,事先陈述你预期的假设是至关重要的。
我想知道这背后的原因已经有一段时间了,最近我想通过一个例子来分享一下。
假设我们有一个变量,比如身高。它呈正态分布。我们从人群中抽取 3 个人,测量他们的身高并取平均值。我们称之为 X1。我们从同一人群中抽取 3 个不同的人,平均他们的身高,称之为 X2。
现在想象我们做了一个双尾 t 检验,评估如果 X1=X2,α= 0.05。无效假设是:
另一个假设是
因为这两个平均数来自相同的总体,我们期望 p>0.05,并且我们不能拒绝零。然而,总是有很少的机会,一组是从分布的一个尾部专门取样的,而另一组是从另一个尾部取样的,X1 和 X2 之间的差异出乎意料地大。在这种情况下,我们会错误地拒绝零假设,根据我们的阿尔法,这种情况发生的概率是 5%。
我们可以通过模拟来测试这一点,在模拟中,我们从相同的正态分布中重复抽取 2 组 3 个样本,并对它们的平均值进行 t 检验。我们这样做了 100000 次,并绘制了下面的 p 值直方图。正如所料,我们得到了均匀分布,大约 5%的 p 值落在 0 到 5%之间。这些都是误报,这一点很重要。
即使这些组来自相同的分布,如果我们不知道这一点,只看平均值,有 5%的可能性我们会错误地得出它们来自不同分布的结论。
这个错误率是统计中固有的,我们接受有 5%的可能性我们拒绝零假设的结论是不正确的。只要我们有信心它是 5%,并保持在 5%,我们就没事。
但是现在让我们看看,在看完数据后,当我们改变假设时会发生什么。
我们通过再次从数据中抽取 2 组 3 个来模拟这种情况。我们根据身高对每组进行排序,如果第一组的中间成员比第二组的最高成员高,我们将假设改为:
请注意,这是一个片面的假设,使用它可以更容易地获得重要的结果。如果一组中的中间成员不比另一组中的每个人都高,我们通常使用上面的双面假设。这个过程复制了一个研究人员的行为,他打算使用双边假设,但在数据达到峰值后,他意识到使用单边假设更有可能获得重大结果。
做另一个 100000 样本模拟,我们得到下面的直方图。请注意 p 值在 0–5%之间的变化。急剧增加。
在数据面前达到顶峰并改变我们的假设,使得我们更有可能在不应该的时候拒绝无效假设。最糟糕的是我们甚至没有意识到这正在发生。我们可以得到更“重要”的结果,但它们可能都是假阳性。
在医学和临床试验中,我们希望不惜一切代价避免药物疗效的不正确声明。想象一下,让数百万人服用我们错误地认为有效的药物,因为一名研究人员在查看数据后改变了他们的假设,并错误地拒绝了无效数据,这将会带来怎样的伤害和代价。
这将是一场灾难。
这就是为什么你可能不应该在看完数据后改变你的假设。
如果你有任何问题,请在下面的评论中告诉我你的想法。
为什么今天应该运行这个 Python 命令
原文:https://towardsdatascience.com/why-you-should-run-this-python-command-today-19edc99f544e?source=collection_archive---------17-----------------------
现实世界中的数据科学
随着 Python 2.7 即将寿终正寝,运行这个命令来看看您将会受到怎样的影响是至关重要的
The end is near! Photo by NASA on Unsplash.
我们所知的世界末日
玛雅人对世界末日的预测并不遥远。尽管他们错误地认为由于太阳耀斑和其他宇宙异常现象,世界将在 2012 年终结,但他们确实准确地假设了 21 世纪初的大规模混乱。然而,预测的大规模混乱的原因与现实相去甚远。
回到现实,是时候讨论一下软件世界即将到来的末日了 Python 2.7 的死亡。对于那些不知道的人来说,Python 最流行的版本将于 2020 年 1 月 1 日到达其生命周期的终点。你说的生命终结是什么意思?当 Python 版本(这也适用于其他形式的软件)达到这个里程碑时,开发人员同意结束该特定分支的所有未来开发工作,即使主要的安全问题已经确定。
这有什么关系?Python 2.7 是在近十年前发布的,所以它肯定获得了没有任何错误或漏洞的硬化版本的好处,对吗?嗯,不完全是…尽管它的任期很长,但直到今天,新的错误和问题仍然在官方 Python 问题追踪器上出现。明年 1 月,如果发现另一个问题,将不会发布进一步的更新,这可能会使代码无限期地易受攻击。
也许你不访问数据库,操纵关键任务数据,或者在你的代码中暴露用户注入。相反,你有一个单纯的数据科学项目,只是进行预测或运行分析,你不关心这些漏洞?即使是对安全问题“免疫”的代码仍然会受到 Python 2.7 版本的影响,因为许多流行的库都在不断地放弃对该版本的支持。
正如你在 Python 2 日落页面上的项目时间表中所看到的,大多数顶级 Python 包都计划在 2020 年 1 月前停止支持,其中一些已经是 Python 3 独有的。在这些包中有几个重要的数据科学库,如 Scipy 、 scikit-learn 、 Numpy 、 Pandas 和 Matplotlib 。即使我们做了一个[错误的]假设,认为这些包永远不会遇到安全问题,它们总是在更新以提高性能,改进 API,并添加有用的新功能。任何坚持 Python 2.7 的代码都会错过这些重要的更新。
为什么大家不升级到 Python 3,然后继续自己的生活呢?不幸的是,Python 2 和 Python 3 本身并不兼容,在 Python 2 中工作的代码不一定能在 Python 3 中工作。对于大多数开发人员来说,这是最大的入门障碍之一,因为过渡到 Python 的最新版本可能需要对代码进行彻底的返工,这是不可取的。
在过去的几年里,许多操作系统供应商试图通过在系统范围内安装新版本的 Python 来取代过时的版本,从而帮助淘汰 Python 2.7。虽然供应商的这一举动应该受到欢迎,但许多开发人员和用户发现,由于语言的不同默认版本,他们多年来无缝工作的 Python 项目在操作系统升级后突然中断。
综上所述,这个世界上所有的好事都是要结束的,即使是臭名昭著的 Python 2.7。然而,随着这一结束,随之而来的是潜在的破坏,因为一些程序将不再在新的系统上工作。此外,任何漏洞的补丁都将不复存在,新功能将被遗忘,支持将受到冷落。然而,通过确保您的项目是最新的和经得起未来考验的,这种严峻的未来是可以预先避免的。
Photo by Chris Ried on Unsplash
检查你自己
随着悲观情绪的消失,您今天应该做些什么来看看 Python 2.7 的终结会对您产生怎样的影响呢?第一步是运行一个非常简单的 Python 命令,它会告诉您需要知道的一切:
python --version
假设没有抛出错误,上面的命令将列出您的系统正在使用的默认 Python 版本,比如2.7.15
或3.7.3
。如果命令返回3.*something*
,并且您现有的所有代码都像预期的那样工作,那么您就可以继续您的幸福生活,享受 Python 3 新的精彩更新了!然而,如果您看到2.7.*something*
(或者更糟,2.6
或更低),我强烈建议您进一步深入您的系统,确定您的开发环境是否存在未来维护问题和漏洞的风险。
Photo by Hush Naidoo on Unsplash
确定原因
现在,仅仅因为系统报告了版本 2.7 或类似的版本,并不意味着这就是你的 Python 程序正在使用的版本。例如,如果您正在使用虚拟环境或 Anaconda 来本地化您的 Python 可执行文件,那么如果您在所有项目中使用该语言的新版本,您可能仍然没问题。如果这些项目中的任何一个仍然指向旧版本的 Python,那么升级系统将是明智的。
如果虚拟环境和 Anaconda 对您来说毫无意义,那么您可能只是在使用操作系统附带的默认 Python 版本。如果是这样的话,那么我强烈建议您更新您的环境,无论是项目的本地环境还是全局环境。
Photo by Fancycrave on Unsplash
修复问题
如果你还在读这篇文章,你可能正在使用旧版本的 Python,并且正在寻求升级方面的帮助。我建议按照以下常规步骤更新到最新最棒的版本:
- 安装新版本的 Python
- 升级所有依赖包
- 更新代码以兼容 Python 3
- 测试更新
- 部署最终的代码
让我们更深入地了解每一步!
安装新的 Python 版本
在您的系统上实际安装最新版本的 Python 有几种不同的选择。其中一些包括使用虚拟项目本地化,比如 Anaconda 和虚拟环境。官方的 Anaconda 文档对安装和使用它有很好的指导这里。
虚拟环境也可以使用下面的指南来安装,但是请注意,您需要先下载所需版本的 Python 并安装到您的系统中。更多关于下载和安装 Python 的信息可以在这里找到。
当然,您可以选择简单地在系统范围内安装一个新版本的 Python,忘记项目本地化,尽管我建议使用上述方法之一来确保依赖关系特定于每个项目。
另一种选择是使用 Docker 容器,并在定制的 Python 容器中运行应用程序。虽然我喜欢容器化项目,但这不一定是最简单、最合理和最实用的解决方案。
升级所有依赖包
由于许多 Python 包开始放弃对 2.7 的支持,项目完全有可能期望依赖包的旧版本能够正常工作。如果您的项目的依赖项列在目录中的一个requirements.txt
文件中(如果还没有,我强烈建议这样做),明智的做法是检查所有列出的包,如果可能的话尝试升级它们。这确保了您的依赖项与 Python 的最新版本保持同步,即使 Python 2 中的所有内容都是最新的。
更新代码以兼容 Python 3
幸运的是,Python 2 和 3 的代码基础之间没有太大的区别,但是某些命令会使工作代码在新版本上立即失败。最大的例子之一就是print
命令。在 Python 2 中,print
是一个特殊的语句,允许我们写
print "Hello world!"
Python 3 中的行为发生了变化。print 语句现在是一个实际函数,所以上面的 print 语句现在必须写成
print("Hello World!")
另一个重要的问题是整数除法的处理。在 Python 2 中,两个整数相除总会返回一个整数。例如
3 / 2 = 1
尽管正确答案是 1.5,Python 2 认为这是一个整数除以一个整数等于一个整数,因此是 1。
然而,Python 3 在这种情况下会返回一个浮点数。相同的语句将计算为
3 / 2 = 1.5
这可能会对结果产生非常显著的影响,尤其是对于依赖数学运算的数据科学项目。
虽然这些只是版本 2 和版本 3 之间许多差异中的一小部分,但它们通常是升级后错误的最大元凶。从使用的角度来看,其他一些主要的区别可以在这篇博文中找到。
幸运的是,我们创造了一些有用的工具来帮助从 2 到 3 的过渡。其中一个工具被恰当地命名为2to3
,它是大多数 Python 安装所附带的。在一个特定的文件上运行这个程序将会输出为了与 Python 3 兼容而需要做的修改。虽然这个程序对于转换代码来说是一个有价值的资源,但它并不完美,所以我建议回顾一下这些更改,以确保一切都合乎逻辑,并且是必要的更新。
测试更新
Python 和程序的依赖项随代码一起更新后,就该测试这些变化了,以确保新版本的一切都如预期的那样工作。希望您的项目包含某种测试(如果没有,我强烈建议至少编写单元测试,以确保您的代码按预期工作),您可以用 Python 3 运行这些测试来验证代码。
运行测试套件(如果适用)之后,运行一些模拟生产用例的实时测试。希望这个生产测试遍历大部分(如果不是全部)代码库,以验证一切都按预期运行,没有问题。如果一切看起来都很美好,你的代码[可能]已经准备好了!
部署最终的代码
如果你能走到这一步,恭喜你!您应该已经成功地将您的项目从 Python 2 转换到 Python 3,并确保您的代码是经得起未来考验的。此时,将变更推送到生产环境,更新任何上游存储库,并验证所有开发环境都使用最新版本的 Python 可能是安全的。您的代码现在应该能够利用 Python 3 提供的对其前身的大量改进,同时还创建了一个稳定的代码库,将在未来许多年得到支持。
Photo by Alice Achterhof on Unsplash
收尾
如果您遵循了上面的所有步骤,那么您现在应该只在项目中使用 Python 3。正如整篇文章中提到的,升级失败会带来潜在的问题。有时升级并不总是可能的,例如生产系统需要特定的操作系统或系统范围的 Python 版本。几个不同的解决方案是使用虚拟环境或 Anaconda 来安装不同版本的 Python,或者用 Docker 封装应用程序,以便它将使用预期的 Python 版本,而不管您运行在哪个操作系统上。
随着 2.7 版本的结束,很难说接下来的几个月会发生什么。通过主动更新您的项目,您可以在里程碑之后避免任何潜在的陷阱。
2.7 是世界上许多 Python 开发者使用的第一个版本,并且在过去几年中已经成为深度和机器学习项目爆炸的主要容器。但是,即使是最大的火也会随着时间的流逝而熄灭,软件世界的猛兽也是如此。谢谢你的回忆。愿 3 的未来光明昌盛。
为什么应该在安全系统中使用多模式生物识别验证
原文:https://towardsdatascience.com/why-you-should-use-multimodal-biometric-verification-for-security-systems-f345134ffd05?source=collection_archive---------29-----------------------
深度神经网络,TensorFlow,OpenCV,Librosa
Image source
将机器学习技术应用于生物识别安全解决方案是当前人工智能趋势之一。本文将介绍多模态生物识别系统的开发,并阐述为什么单峰生物识别不是一个可靠的模型。
在核心层面,大多数生物特征数据可以分为两类:
还有行为生物识别,包括手势、手写文本、声音识别和行走模式。
还有物理生物识别,包括指纹、静脉、虹膜和面部识别,以及手的几何形状。
数据科学顾问可以利用 ML 的能力来挖掘、搜索和分析大数据集,以提高生物识别安全系统的性能和可靠性。
人脸识别
面部识别算法分析人脸上的 64 个参考点,如鼻子的水平和垂直长度、鼻孔的宽度、下巴的尺寸、颧骨和前额的位置以及两眼之间的水平距离。
接下来,形成面部特征的维度描述符向量,并通过确定该新面部和数据库中每个其他面部之间的欧几里德距离来与数据库图像进行比较。如果存在匹配,它将被标记。
然而,问题是存在的。在社交媒体和其他照片公开来源的时代,获得一张人的照片可能是微不足道的。生物识别的主要安全因素之一是确认用户的面部是“活的”。
面部识别需要两个主要策略:
- 首先,活体检测——确定所述图片不是任何类型的遮罩或经修改的图像,并使用反欺骗技术来确认摄像机前的人是活体。
- 第二,将照片与正式的身份证明——将提交的自拍照片与某种正式的身份证明进行交叉比对。这种方法使用光学字符识别技术,对照正式的身份证明检查图片上的文字。正式身份证件上的数据可以作为一个有价值的指标。
声音识别
在生物特征验证系统中,语音验证是最具成本效益的系统之一,因为它只需要一个能够进行语音分类的应用程序和一个捕捉语音的麦克风。
为了产生用于验证的高质量语音样本,应该要求用户说出由单词或数字组成的密码短语。处理语音识别的算法能够辨别单个说话者的语音中的特征和模式之间的相似性和差异。一旦声音样本被读入,它就可以直接与先前已经被分析并存储在预先存在的数据库中的声音模型进行比较。
值得注意的是,语音识别技术的当前状态并不是 100%准确或完美的。随着时间的推移,一个人的声音会因年龄、健康状况甚至情绪等因素而改变。
但生物识别领域的人工智能能够在这方面提供帮助。可以通过处理语音中常见的失真以及常规的背景噪声来训练系统。神经网络能够从遇到的这些类型的虚假输入中学习,并在分析语音样本时将其过滤掉。
光学字符识别
OCR ,一种经典的机器学习和计算机视觉任务,用于区分物理文档数字图像中的印刷或手写文本字符,不是官方的生物识别技术。但是它可以用作将提供的信息与用户文档进行比较的初步工具,例如用于驾照识别。
开发多模式识别系统
在下表中,您可以找到我对生物识别解决方案比较的研究结果。
它证明了没有单一模式的生物识别解决方案能够提供足够高的安全级别来避免黑客攻击。这就是为什么应该使用多式联运解决方案。
以多模式生物特征识别为特征的系统需要确认至少两个标识符,这导致更高水平的准确性。
让我们概述一个基于语音和人脸识别技术的系统,并通过移动应用程序进行访问。
Image source
在第一阶段,潜在用户将创建一个照片印记,该照片印记将通过相机存储在相关设备上。OpenCV 库将有助于生物特征印记的转换和标准化。
然后,系统将使用 64 个面部标志解析照片。一旦映射,地标和用户面部的整体剪切图像将被输入到深度神经网络中。这个网络是在 TensorFlow 库的帮助下教授的。
一旦神经网络处理了面部图像,它将创建一个 eDNA 特征向量,该向量代表用户面部图像的所有主要生物特征。eDNA 向量通常测量大约 2048 位。
现在,可以将 eDNA 向量与系统数据库中已经存档的记录进行比较。这种方法不能被逆向工程,因为任何潜在黑客都没有能力访问数据库中的原始记录。
最后,该系统将每隔一段时间对用户的图像进行更新记录,以跟上用户潜在的变化。
在第二阶段,用户通过麦克风给出声音样本。Librosa 库接收音频样本,将其转换为可用的形式,然后将生物特征发送到神经网络(DNN)。
再一次,2048 eDNA 向量将被创建,将像语调、速度、木材、音高和神经网络已经被教导的其他方面的特征考虑在内。
通过生物特征数据的多模态组合来验证用户身份的想法越来越流行。推动采用率上升的是在识别用户时需要更高的准确性,同时击败欺骗或黑客攻击企图。
由机器学习技术驱动的生物识别验证将是决定 2020 年及以后人工智能未来的关键趋势之一。
作为一名数据科学家,你为什么不应该是一个完美主义者
原文:https://towardsdatascience.com/why-you-shouldnt-be-a-perfectionist-as-a-data-scientist-d7c6db3dd08d?source=collection_archive---------14-----------------------
以及如何克服你身上的完美主义
我不确定你。
也许你是一个现实主义者,在任何情况下,你总是实事求是地思考,以实际的方式行动。
或者也许你已经在现实和追求完美之间找到了平衡。
但追求完美一直是我的负罪感。
我不是说追求完美是一件坏事,但是追求完美 【可能】 是一件坏事,尤其是当你在数据科学领域的时候。
完美是不可达到的,但如果我们追求完美,我们就能追求卓越
——文斯·隆巴迪
在我从学术转向数据科学的道路上,在数据科学领域呆了相当长一段时间后,我学到了很多关于能够交付商业价值,同时仍然有带宽来做出优秀的交付品的知识。
因此,我希望与您分享我的想法和经验,希望让您在日常的数据科学工作中有所认识,以及如何克服您身上存在的完美主义。
在这篇文章结束时,我希望你能更好地理解,作为一名数据科学家,为什么追求完美主义可能不是一个好主意,以及如何在你的职业生涯中——或者在生活中——克服这一点。
我们开始吧!
作为一名数据科学家,你为什么不应该是一个完美主义者
(Source)
你看。
当你是数据科学领域的初学者时,很容易陷入盲目追求完美的陷阱而不了解公司业务的真正需求。
想象一下,你刚加入一家公司,是一名初级数据科学家,现在给你一个项目,为图像分类建立一个深度学习模型,并在六个月内投入生产。
不用说,你对这个项目非常兴奋,并且已经和你的团队成员交换了一些想法。
六个月后,您错过了最终交付的截止日期,因为您仍然认为您的模型不够好,尽管事实上您的模型已经超越了现有的基线模型。
所以你不断地调整你的模型,希望把最后一点提高的精度挤出 2%…
正因为如此,你错过了项目交付(将模型投入生产)的最后期限,你的老板怀疑你作为数据科学家的资质和能力。接下来会发生什么?现在你变得沮丧并且想知道为什么你的老板就是不理解你的工作。
不知何故,这听起来熟悉吗?
“完成比完美更好”
其实类似的案例也发生在我上一次数据科学实习刚入门的时候。
我看了很多研究论文。
我试图训练和调整不同类型的模型,在没有充分了解业务需求的情况下找到最佳模型。
我所知道的是,我得到了有史以来最好的模特,就像我在任何卡格尔比赛中所做的那样。这正是 Kaggle 竞赛和现实生活中的商业项目之间的区别。
在 Kaggle ,你是你唯一的利益相关者,你只需要训练出最好的模型,然后“嘣!”…你赢得了比赛。
在现实生活中的商业项目,情况并非如此。你的老板和其他利益相关者只有有限的资源(时间或金钱)来交付最终的结果。
现在,我意识到交付真正的商业价值是任何数据科学项目的最终目标。如果你是一个完美主义者,你很可能无法总是向客户交付解决方案,因为你可能无法向他们交付 最小可行产品(MVP) 。
有了 MVP 和来自客户的反馈,您可以进一步迭代和改进未来的产品开发(或数据科学解决方案,无论您如何称呼它)。
如果你是一个完美主义者,你总是倾向于给自己和每个人设定不切实际的期望。
如果你是一个完美主义者,你会发现自己在努力完成工作(或者你可能认为你的工作总是不够好,不能被认为已经完成)
如果你是一个完美主义者,你会害怕犯错,这会剥夺你学习和提高的机会。
如何克服你身上的完美主义
知道什么时候不做完美主义者有时可能是塞翁失马焉知非福。
跟你说实话,我承认我身上的完美主义还是存在的。我认为这仍然是一件好事,当且仅当我知道如何“适时”追求完美。
也就是说,每当我意识到自己有拖延的倾向时(我的意思是追求完美),以下是我个人使用的一些步骤。
1。意识到这一点
是的。自我意识是这里的关键。
如果你甚至没有意识到你开始追求完美的时刻,你就没有办法克服它。换句话说,为了克服你身上的完美主义,首先你需要意识到这一点。
开始质疑你自己,为什么你在做你正在做的事情,你正在做的事情将真正有利于商业价值。通过与自己进行这种内心对话,你将开始在正确的时间优先考虑正确的事情。
我知道这听起来有点抽象。所以要花时间去消化和练习。
2.挑战自己,对自己建立更现实的期望
创建一个最小可行产品(MVP)并理解“什么足够好”并交付给你的客户。
取决于你正在解决的问题和行业,在某些领域,不完美是完全可以接受的。
准备好为自己设定现实的期望,而不是以更深入的调查和更好的结果为名掉进无限的兔子洞。然而,如果时间和其他资源允许,理想的情况总是更深入,并使结果更好(或更准确)。
3.接受错误和失败
没有绝对的完美。因为总有进步的空间。
拥抱失败,接受你会在前进的道路上犯错误的事实。要有韧性,从错误中学习,不断进步。
这样,你就能通过不断朝着目标前进来克服自己的完美主义,并在前进的道路上不断进步。
最后的想法
(Source)
感谢您的阅读。
我希望现在你已经更好地理解了为什么作为一名数据科学家追求完美主义可能不是一个好主意,以及如何在你的职业生涯中克服这一点。
虽然追求完美是非常好的,但这取决于你自己,根据你的情况和背景来决定和优先考虑什么是最重要的任务。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
[## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
为什么你不应该说“这项研究动力不足”
原文:https://towardsdatascience.com/why-you-shouldnt-say-this-study-is-underpowered-627f002ddf35?source=collection_archive---------5-----------------------
确保我们对权力的批评是相关的、清晰的,并基于良好的统计数据
最近在 Twitter 上,我批评了声称实验或研究“动力不足”的常见做法(有些人可能会说是“速记”)。这最终成为一条受欢迎的推文,这是我没有预料到的(这是一个相当神秘的统计点),但鉴于它对实验设计中最近一些问题的重要性,我认为它值得在一篇博客帖子中重新审视。
首先,我们必须谈谈什么是权力,因为——具有讽刺意味的是——这被所有人误解了,包括统计改革运动。那些抱怨价值观被误解的人会继续搞砸权力。
正如我上面所说的,首先要澄清的是,学习或实验并没有动力不足;相反:
一个设计和测试组合可能不足以检测感兴趣的假设效应大小。
看到这一点的最简单的方法是,我可以选择对来自同一设计的数据应用许多测试;例如,我可能会选择使用符号检验、t 检验或 Wilcoxon 检验;我可能会选择检验一个关于方差而不是均值的假设,或者关于组中最小或最大观察值的假设。所有这些测试都有不同的“效果大小”,并且它们都可以应用于相同的设计,但是每一个都依赖于不同的数据汇总作为统计证据。功效还取决于“决策”标准的选择,该标准通常是参照选定的(但可变的)α(I 型误差)概率来选择的。
关于权力,有一个微妙但重要的点经常被忽略。定义中未提及所述效果大小的实际值。很奇怪,对吧?大多数人似乎认为,如果真的有影响的话,权力就是被计算出来的真实价值。这是一种误解。这将使显著性测试成为一种伪贝叶斯测试,我们需要指定一些我们认为似乎合理的量。但这不是显著性检验的工作方式。
相同的设计和统计测试组合具有相同的功效(曲线),无论我们是否将其应用于具有大的、容易复制的效果的 Stroop 实验,或者说,没有任何效果的超感官知觉实验。有些人觉得这很奇怪,但这正是我们在其他情况下对敏感的看法。着火房屋中的相同设计的烟雾报警器与未着火房屋中的具有相同的灵敏度,因为灵敏度是基于反事实状态,而不是世界的实际状态。可能是什么,而不是是什么。
想象一下,如果不是这样:一个住在没有着火的房子里的人可能会说他们的烟雾报警器“功率低”(灵敏度),仅仅是因为它从来没有响过。这类似于一些人试图从数据中“估计”功率的方式(例如,特设功率,或估计“未知”功率)。事实上,这类工作与统计能力没有任何关系,除了数学方程式是相同的这一点。
我们最好考虑一下“设计灵敏度曲线”,而不是“功率”这个令人困惑的怪物。谈论第一类和第二类错误/概率(以及“自然状态”)使人们认为这些是离散的、真实的概率,而不是在曲线上反映可能性。
让我们建立一个例子。有几分钟的时间,忘掉α、β以及 I 型和 II 型误差“率”。
榜样的力量
假设我为一家糖果公司工作,已经决定我们的新糖果要么是绿色的,要么是紫色的。我们的任务是找出人们更喜欢绿色还是紫色的糖果,所以我们设计了一个实验,我们给人们两种糖果,看看他们先拿哪个。对每个人来说,答案不是“绿色”就是“紫色”。我们先把θ称为选紫色的概率,所以我们感兴趣的是θ是否> . 5(也就是优先选紫色)。没有理由我们不能测试糖果制造商可能感兴趣的其他假设(例如,θ>.7,“紫色基本上是首选”);我们只是为了演示而构建这个测试。
Power/sensitivity curves for the candy example. The green region (left) represents when green candies are preferred; the purple region (right) represents when purple candies are preferred). A is the curve for deciding that “purple is preferred” when 31 or more people pick purple first; B is the curve for deciding that “purple is preferred” when 26 or more people pick purple first.
假设我们的设计是 N=50 人选择糖果色。我们现在需要一个测试。显然,在这种情况下,数据中的证据是由我们观察到的首先选择紫色的人数携带的。因此,我们为这个数字设定了一个标准,例如:“如果 31 人或更多人选择紫色,我们就说紫色是首选(即θ>.5)”。我们现在可以绘制设计和测试的功效/灵敏度曲线,给出所有潜在的假设效应大小(如左图所示,曲线“A”)。
“功率分析”就是简单地记录下这条曲线的特征(也许通过增加 N 来改变潜在的设计)。看曲线 a,如果首选绿色糖果(θ <.5 we="" have="" a="" very="" low="" chance="" of="" mistakenly="" saying="" that="" purple="" candies="" are="" preferred="" is="" good="" if="" substantially=""> .7),我们很有可能正确的说首选紫色(也不错!).这些都是反事实,在任何情况下我们都可以用这种设计进行测试:糖果,真/假测试,掷硬币,等等。这种力量不取决于什么是真的,只取决于什么可能是真的,以及我们如何设置设计/测试。
现在让我们考虑这个设计的另一个测试:“如果 26 个或更多的人选择紫色,我们就说紫色是首选(θ>.5)”。这可能是因为每当数据似乎“偏爱”紫色时,我们就会声称紫色是真正的首选。这是上图中的曲线“B”。让我们做一个功率分析。如果紫色基本上是优选的(θ>.7),我们基本上肯定正确地说紫色是优选的(好!).如果绿色糖果是首选,(θ <.5 we="" could="" have="" a="" high="" chance="" of="" mistakenly="" saying="" that="" purple="" candies="" are="" preferred="" is="" bad=""/>
Crucially, what determines our judgment about a power/sensitivity curve is whether it meets our purposes. We want to be sufficiently protected from often making false claims (saying “purple is preferred” when green actually is), and we want to be able to say “purple is preferred” when it is to some important degree. What is important is determined by us. Do I care if purple candies are preferred at θ=.500001? No. I don’t care about detecting effects that small. But if 70% of the time people reach for the purple candy, (θ> .7),我会在意。所以我确保我的能力/灵敏度曲线在那个区域是高的。
设计灵敏度分析——通常称为功效分析——只是确保灵敏度在“零”为真的区域较低(用普通术语来说,“控制”α),并确保功效/灵敏度在我们关心的区域较高。这些都与从以前的结果中“估计”能量无关,也与真正的 T2 效应无关。
批判力
现在我们已经从正确的角度探索了权力的概念,我们可以更好地理解一个好的权力批判是什么样子的。这里有一些我们可以说的话来评论一项关于权力基础的研究。权力批判是设计批判!
先挑效果尺寸:“这种设计即使是 X 非常大的效果尺寸,灵敏度也很差;这个实验一开始就不应该做。”这是非常令人信服的设计评论,即使在研究完成之后。你不会因为一项设计糟糕的研究碰巧“意义重大”而得到好评。然而,重要的是,这种批评涉及到批评家承诺某种效果大小的兴趣。没有这种承诺,你就不能做出权力批判。“这个样本量感觉小”不够好。
首先选择功效:“这种设计不超过 0.5 的功效来检测像 x 一样大的效果尺寸。看起来作者想要检测一种效果,如果它确实那么大的话”。许多人很难理解什么是“重要的”效应大小。我同情;这就是为什么我认为选择 0.5 的“基础”功率,然后计算出 0.5 功率的效果大小比选择一个足够重要的效果大小更容易。如果功率是 0.5,你会经常错过一个效果,因为检测到它,所以功率 0.5 是一个很好的起点来评估一个设计。这不是终点,但它可以很容易地捕捉到非常糟糕的设计。
关注设计的其他方面:“感兴趣的测试是适当的,但所选设计中的样本量太小,以至于很难或不可能检查测试的假设。”这是对可能导致你质疑结果的事物的敏感性的批判。数据分析的一个关键部分是质量控制,如果你不能在你感兴趣的分析之前进行质量控制,你应该对你的分析没有信心。设计计划不仅应该包括感兴趣的测试/效果,还应该包括任何质量检查。
重要的是,这些批评是实验设计,而不是结果。你可以超越设计评论;另一方面,如果所讨论的影响是显著的,这意味着影响的大小必须非常大,因为如果它更小,它几乎没有机会被发现。鉴于什么可能实际上是真的,科学判断随后对结果的合理性发挥作用。但这种扩展不是权力批判,当他们的实际批判是一种似是而非的批判时,批评家不应该躲在“权力”的背后。似是而非的评论很难做出,因为它们是主观的,但是你必须拥有这种主观性并为之负责。
关于这个问题的更多信息,你可以参见 Mayo 和 Morey(预印本)关于为什么涉及所谓的“后验预测值”或“错误发现率”的功效批评是有问题的(最多),或者 Morey 和 Lakens(预印本)关于为什么功效在流行的复制研究中构思不佳。是的,我写这篇文章是为了拖延那些论文的修改和提交,但是我希望它是一个好的入门。