触及机器学习的本质:CLT 简介
作为机器学习的实践者,了解计算学习理论的基础可以极大地增强你的能力。
介绍
假设,这是一个阳光明媚的日子,你有朋友来访,你最喜欢的餐馆在 12 英里外开了一家分店。一般来说,你会避免长途驾驶,但是今天你会出去吃午饭吗?你是否有这种情况的过去的例子(一些因素是积极的,一些是消极的),从中你制定了一个规则?
这就是我们如何从过去的经验和行为中学习,形成规则,并将其应用于当前的情况。机器也没有什么不同。但是这种机器学习背后也有一个理论。
C 计算 L 收入 T 理论( CLT )是统计学/机器学习/人工智能(总的来说)的一个分支,它处理关于分析我们(人和机器)从数据中学习规则和模式的能力的基本界限和定理。
它超越了我们经常听到的特定算法的领域——回归、决策树、支持向量机或深度神经网络——并试图回答关于整个机器学习企业的限制和可能性的根本问题。
这就是我们如何从过去的经验和行为中学习,形成规则,并将其应用于当前的情况。机器也没有什么不同
听起来很刺激?请继续阅读,快速浏览这个领域…
有哪些基本问题?
当研究机器学习时,很自然会想知道什么一般规律可以支配机器(和非机器)学习者。举个例子,
- 是否有可能独立于学习算法,识别出天生困难或容易的学习问题类别?
- 你能描述出确保成功学习所需的或足够的培训示例的数量吗?
- 如果允许学习者向培训师提问,而不是观察随机抽样的培训示例,这个数字会受到什么影响?
- 在学习目标函数之前,你能描述一个学习者会犯的错误的数量吗?
- 有人能描述学习问题类固有的计算复杂性(T21)吗?
下面是令人失望的答案:所有这些问题的一般答案还不知道。
但是我们可以专注于任何实际机器学习任务中最常出现的特定设置,****—归纳学习 一个未知的目标函数,只给定这个目标函数的训练示例和一组候选假设。
在这种情况下,我们主要关心的问题是,
- 多少个训练示例足以成功学习目标函数,以及
- 学习者会犯多少错误才能成功?
正如我们将看到的,根据学习问题的属性,为这些度量设置数量界限是可能的,
- 学习者考虑的假设空间的大小或复杂性
- 目标概念必须达到的近似精度
- 学习者输出成功假设的概率
- 向学习者展示培训示例的方式
CLT 试图回答关于整个机器学习事业的限制和可能性的基本问题。
关键词的图示
为了进行全面的讨论,我在这里尝试定义一下在 CLT 普遍使用的基本关键词。
数据:一组给定的例子,我们试图从中学习目标概念。
目标概念(又名规则)**:这是我们试图从数据中学习的隐藏模式例如,“我们出去吃午饭 如果 天气晴朗我们有朋友 或 如果 最喜欢的美食餐馆就在附近 和 我们有朋友
这种规则是根据属于命题逻辑的陈述编写的,即用 AND、OR、NOT 表达的真值。
假设空间:这是一组假设,我们希望从中发现目标概念。在这个例子中,假设的“智能”选择应该看起来像我们上面写的作为目标概念的逻辑连接短语。但是它们可以更简单或者看起来不同,
- 如果天气晴朗
- 如果我们有朋友或者天气晴朗
注意上面两个假设和目标概念之间的细微差别。这两个假设不够丰富,不足以抓住真正的目标概念,如果应用于给定的数据,它们会有误差。
为什么?
因为它们不属于“析取陈述的连词”形式,即(X1 & X2)|(X3 & X4)|(X5 & amp!X6)。它们过于简单和笼统,无法捕捉所呈现数据的所有细微差别。
因此,这个故事的寓意是,你在机器学习(这里是分类)任务中搜索目标概念是否会成功,很大程度上取决于你选择工作的假设空间的丰富性和复杂性。
预测器和响应变量:这些是不言自明的。“晴?”、‘最喜欢的餐厅距离、‘有朋友吗?“T9”是预测变量,“出去吃午饭”是响应变量。
感觉抽象?需要具体例子吗?
还记得分类的决策树吗?这里有两个这样的树,以及它们在关于上述学习问题的假设空间方面的丰富性。
如果你阅读从根开始向下到一片叶子的树的边所满足的条件,你会自动得到和上面一样的命题逻辑陈述。试试看。
Rich and ‘poor’ hypothesis space illustrations
因此,这个故事的寓意是,你在机器学习(这里是分类)任务中搜索目标概念是否会成功,很大程度上取决于你选择工作的假设空间的丰富性和复杂性。
假设空间的大小?那里有个陷阱!
那么,这里假设空间的大小是多少呢?
如果你用所有三个预测变量构建树,你可以从其中的任何一个开始,然后你可以在深度)处有 n 的叶子,如果你使用所有的预测变量。但是你可以选择在所有的叶子上写“是”和“不是”。所以,大小可以和 O(n2(2n)).一样大对于这个例子,有 3 个变量,我们可以得到 32(2(3–1)= 48 棵树!这 48 棵树分别代表一种不同的假设。很多都是多余的,用简单的思考就能消除,但那是题外话。
那么,如果我们考虑一个足够丰富、足够大的假设空间,是否保证能找到目标概念(给定足够的数据)?
没有。
考虑一个简单线性回归问题。
有多少预测值? 1 。那么,什么是假设空间大小呢?2?4?
答案是——无限。
你能在一个平面上画多少条直线?
你对无害的最小二乘误差最小化回归算法的尊重是不是越来越大了?毕竟,能够从那些无限的可能性中找到最优的路线【T3:-)
但问题是——即使假设空间无限大,我们也不能指望在这个回归任务中找到真正的目标概念。
这是因为真正的概念存在于另一个空间,其大小是一个‘更大的无限’。在这个例子中, y 和 x 之间的真实函数关系可能是二次函数关系。这意味着二次项的无限可能性+线性项的无限可能性+截距的无限可能性。****
除非我们决定在我们的假设空间中包含一个二次项,否则我们将永远无法找到真正的函数,即使在只有线性项(和截距)的无限大的空间中。
****所以,很多时候,我们需要更丰富的空间,而不一定是更大的。而且,像灭霸一样,我们需要不断担心和寻找哪个无限大小的空间最适合我们必须学习的特定数据集!
那么,CLT 试图估算的关键量是什么呢?
在很大程度上,CLT 关注的不是个别的学习算法,而是以他们考虑的假设空间、训练样本的呈现等为特征的学习算法的大类。它试图推理的关键量是,
- 样本复杂度 :一个学习者
需要多少训练样本才能收敛(大概率)到一个成功的假设? - 计算复杂度 :一个学习者需要多大的计算努力才能收敛(大概率)到一个成功的假设?
- 错误界限 :在收敛到一个成功的假设之前,学习者会错误分类
多少训练样本?
Model complexity and learning curve show how much data and what class of hypothesis space we need
有各种各样的方法来说明对学习者来说“成功”意味着什么我们可以指定,为了成功,学习者必须输出一个与目标概念相同的
假设。或者,我们可以简单地要求它输出一个大多数时候与目标概念一致的假设,或者它通常输出这样一个假设。
同样,我们必须指定学习者如何获得训练样本。训练示例有可能是由一位乐于助人的老师提供的,或者是由学习者执行精心计划的实验获得的(想一想 A/B 测试或科学实验),或者是根据学习者控制之外的一些自然过程随机生成的(想一想随机点击流,癌细胞与药物的相互作用)。正如我们所料,上述问题的答案取决于我们心目中的特定环境或学习模式。
“大概近似正确”(PAC)的神奇世界
在这种理论设置下,我们假设所有观察到的数据都是从一个未知但固定(非时变)的分布过程中产生的,该分布过程的参数不会受到我们从中抽取样本的过程的影响。此外,不失一般性,我们可以假设无噪声测量过程。
设 H 为假设空间, D 为未知真分布, c 为目标概念。假设在观察了一些数据d* 后,学习算法 L 输出一个它认为是***【c的最佳逼近的假设。****
这里衡量错误/成功的标准是什么?误差在哪里 c 和 h 的预测不一致。
Image credit: “Machine Learning”, by Tom Mitchell
我们的目的是描述目标概念的类别,这些目标概念可以从合理数量的随机抽取的训练样本和合理数量的计算中可靠地学习**。******
我们没有无限的时间、计算能力、存储或传感器带宽。因此,我们并不试图使误差为零。为此,我们需要看到由生成的每一个可能的实例。出于同样的原因,我们限制自己检查有限的训练样本,并使用多项式时间算法。**
此外,假设训练样本是随机抽取的,
学习者遇到的训练样本
总会有一些非零概率是误导的。
因此,我们将只要求它的误差被某个常数
限制,该常数可以任意变小。此外,我们不会要求学习者对随机抽取的训练样本的每个序列都成功,相反,我们的要求只是它的失败概率由某个常数限制,该常数可以任意变小。****
简而言之,我们只要求学习者 大概学习 一个 近似正确 的假设。
有了这些设置,我们说我们的概念类 C ,目标概念 c 所属的, PAC-learnable如果学习算法在用数据【d】进行训练后能够输出假设 h 具有一定高的 概率 和一定低的 误差 并且计算量是 1/ 误差
样本复杂性界限
这里我们不讨论形式上的证明,但是根据上一节中讨论的概念,可以推导出一个非常简单和优雅的数学界限来回答下面的问题。
“当假设空间具有一定大小时,以一定概率学习近似正确的假设所需的最小训练样本数是多少?”
界限由下式给出,
这叫做 豪斯勒束缚 。这个不等式很容易证明我们在任何机器学习任务的实践中所经历的以下事实,
- 我们需要更多的训练数据来减少测试/泛化错误
- 该算法需要“看到”更多的训练样本,以增加其学习的信心,即减少出错的可能性
- 更丰富、更大的假设空间意味着在寻找正确假设时要搜索更大的维度,这就需要更多的训练样本
我们短暂的旅行到此结束,但更多的“学习”还在前面
对这种类型的复杂性界限有一种普遍的批评,认为它们过于悲观,不能代表实际的学习问题。关于这个话题有很多争论,你可以从我在本文末尾提供的参考资料中读到一些。
一个关于无限假设空间的自然问题出现了。样本界是否趋于无穷大?原来有一个概念叫做’ VC-dimension ’ (V 在这里代表 Vladimir Vapnik ,支持向量机的发明者),它有助于保持许多实际学习问题的样本复杂度有限,即使是线性回归或核机器这样的无限假设空间。但是我们可以在另一篇文章中讨论这些高级概念。
我希望这篇文章能够引发一些关于基本机器学习理论的有趣概念,并有助于激发您学习这些主题的兴趣。
要获得关于这些主题的优秀教程,请观看此视频,
可供参考的资料
- 《机器学习》,汤姆·米切尔(1997)。
- CMU PAC 学习教程
- PAC 学习、VC 维度和基于边界的边界
- " PAC 学习是不可判定的"
- “学习算法的效率和计算限制”
如果您有任何问题或想法要分享,请联系作者在tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。如果你像我一样对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
如何在命令行上探索美国大学 2017 排名?(第一部分—数据预览)
Keep exploring data @ Bash shell, image adopted with thanks from unsplash.com
大学排名已经成为许多机构的共同任务,每个机构都根据几个加权类别提出不同的排名。这些排名的例子有:世界大学网络计量学排名、QS 世界大学排名、世界大学学术排名等等。第一个排名衡量了大学的知名度及其在网络上的全球表现。最后两项试图根据会员获得的奖项、引用和出版物等类别来衡量大学的表现。雇主,尤其是跨国公司的雇主,使用排名来寻找大学来招聘毕业生,因此进入一所排名靠前的大学有助于在竞争激烈的就业市场中找到工作。
在这个项目中,我们将使用一个从 data.world 获得的简单(公开可用)数据集,名为:美国新闻大学排名 2017 版。从这些数据中,使用 Bash 我们将探索不同的特性,并最终发现一个关于学费和大学排名相关性的有趣事实。
学习目标
通过完成这些,您将学会使用以下 Bash 命令:
head
—输出文件的第一部分
tail
—与头cat
相对—连接并打印文件
sort
—整理文件内容
uniq
—删除重复条目
在我们继续之前,让我们通过在桌面上创建一个文件夹来设置我们的工作环境。为此,假设我们的计算机上有一个基于 Linux 的操作系统(例如 Ubuntu ),让我们首先启动一个命令行并导航到我们的分析文件夹:
cd ~/Desktop
mkdir unirankingdata
cd unirankingdata
这将在你的桌面上创建一个文件夹unirankdata
。接下来,我们下载数据。
您应该从下面的网页下载数据,因为我们已经稍微简化了数据,让我们将数据保存为:unirank.csv
wget https://www.scientificprogramming.io/datasets/unirank.csv
数据集预览
这个数据集很小(玩具),原则上我们可以在文本编辑器或 Excel 中打开它。然而,真实世界的数据集通常更大,而且整体打开起来很麻烦。让我们假设它是一个大数据(和非结构化数据),我们希望得到数据的一个潜在峰值。当你接触到新数据时,这通常是你要做的第一件事——预览;首先,了解数据包含的内容、组织方式以及数据是否有意义是非常重要的。
为了帮助我们预览数据,我们可以使用命令“head ”,顾名思义,它显示文件的前几行。
head unirank.csv
然而,您会发现最初的输出并不是很有趣,因此我们安装了一个名为csvkit
的工具,这是一套用于转换和使用 CSV 的命令行工具(install: sudo pip install csvkit
)。
这将极大地帮助我们未来的分析。在我们安装了csvkit
之后,我们重新运行head
命令,但是通过csvkit
套装的csvlook
命令输出管道|
:
head unirank.csv | csvlook
您应该会看到输出到屏幕上的文件的前10
行,要看到比前10
行更多的行,例如第25
,请使用-n
选项:
head -n 25 unirank.csv | csvlook
这里,数据集名称unirank.csv
是一个命令行参数,它被赋予命令head
而-n
是一个选项,它允许我们覆盖10
行的默认设置。这种命令行选项通常用破折号后跟字符串、空格和选项值来指定(例如-n 25
)。看下面最后的结局(想不想看直播?):
The unirank.csv data set preview (head -n 25 unirank.csv)
从文件的前 25 行,我们可以推断出数据被格式化为具有分隔值的文件。从第一行(通常称为标题行)和前几行数据可以推断出列内容:Name
、City
、State
、Tuition and fees
、Undergrad Enrollment
、Rank
。 见第二部 🚀!
[该项目是’学习在 Bash Shell 和 Linux 中分析数据课程的一部分。]
相关作品
[## 学习在 Bash Shell 和 Linux 中分析数据——学习科学编程
一个简单的课程演示了 Bash shell 在处理真实数据集时的使用
www . scientific 编程. io](https://www.scientificprogramming.io/learn-bash/)
如何提出数据科学可以解决的问题?
我的学生经常很难找到好的数据科学问题。
通常,这是因为他们还没有弄清楚问题如何映射到数据解决方案。我发现将布鲁姆的分类法与数据技术结合起来描绘一幅更清晰的画面是很有见地的。
数据科学工具初看起来可能非常有限,但是我们可以用工具的语言重新表述大多数现实世界的问题。
我们可以问什么样的问题?
布鲁姆的分类法对教育者用来引导学生的学习目标进行了分类。我发现对洞察力进行分类也很有用。毕竟,如果我们提供适用的洞察力,我们就扮演了教育者的角色。
布鲁姆的分类学也提出了我们可以问的问题来测试学生。这些相同的问题带来了卓越的见解。
我们将学习过程分为 6 个目标,每个目标都有相关的问题。作为数据科学家,我们可以提出、解决和分享这些问题来获得洞察力。
布鲁姆分类法中的认知目标
- 记得吗——什么人,什么事,什么地方,什么时候发生了什么事?
- 了解— 你能总结一下发生了什么吗?
- 应用— 当……发生时会发生什么?
- 分析— 什么是……的关键部分和关系?
- 评估— 这是最好的方法吗?
- 创造——你能预测在新的条件下……会发生什么吗?
可用工具
(从业者可能想跳过这个概述)
这个行业有很多工具,但是你可以把它们分成几个部分。
R/Python/SQL/Etc
用 SQL,R,Python 等进行数据操作。允许我们搜索和汇总数据。
这些工具回答与记忆和理解相关的问题。“我的最大用户最后一次购买是什么时候?”
假设检验
仅仅因为我们按组划分数据并不意味着我们找到了关系。 假设检验 告诉我们我们的数据是否适用于新的情况。“猫的图片比狗的图片带来更多的流量吗?”
场景分析
情景分析 分析各种条件下未来可能出现的多种结果。我们创造许多可能的场景,然后预测会发生什么。“如果我们提高产品价格,会发生什么?”
优化
优化 是一个巨大的领域,但它一般会问简单却难以回答的,最大化和最小化问题。“什么样的供应路线能最大限度地降低递送包裹的成本?”
强化学习
强化学习实时观察数据并优化结果。“在游戏 Flappy Bird 中,我应该什么时候点击才能生存?”
统计建模与机器学习
这变得很棘手,因为这些是巨大的领域。让我们来看几个主要任务:
分类回归
分类和回归回答诸如“我的数据和一个或多个结果之间有关系吗?”分类重点预测群体“这是 A 还是 B?”。回归关注数量“多少—或—多少?”
特征选择
特征选择确定数据中的哪些特征与特定结果相关。假设我们想要识别一种水果是苹果还是橘子。我们在数据中使用颜色和甜度作为水果的特征。一个特征选择算法将缩小颜色作为一个有用的鉴别器,因为苹果和橘子都是甜的。
降维
降维获取数据并将其降维至核心成分。这就像图像压缩,我们用较少的信息显示相同的图像。假设我们有一次性刀叉和餐盘的销售数据。一个维度缩减可能显示一次性用具销售的一列。我们大概会问“我的销售数据中的关键模式是什么?”
聚类
聚类试图获取数据,并自动将相似的观察结果组合在一起。我们可以把我们的数据组织和处理成几种类型的观察结果的集合。我们问“我是否有任何不同类型的客户,或者他们都是完全独特的?”
异常检测
异常检测回答一个观测值是否属于数据集。我们大概会问“这个温度读数正常吗,还是很奇怪?”需要注意的是,我们通常可以简化这个问题。一个分类问题,询问“这是不是很奇怪?”就像是的异常探测。
它们是如何组合在一起的?
我在下面列出了常见的数据科学问题,按照布鲁姆的分类法整理。每个问题都被重新表述,以使用一种常见的数据科学技术。问题按照从最容易回答到最难回答的顺序排列。
记住— 什么人,什么事,什么地方,什么时候发生了什么事?
我们用 SQL、R、Python 等来回答关于数据收集和操作的记忆问题。
特定用户使用什么浏览器浏览本网站?
我们使用 SQL、R 或 Python 在数据中找到用户,以及他们使用的浏览器。
特定用户是如何找到这个网站的?
我们使用 SQL、R 或 Python 以及记录的流量源在我们的数据中找到用户。
明白— 你能总结一下发生了什么吗?
我们通过汇总或总结数据来回答理解性问题。
我的用户倾向于使用什么浏览器?
同样,使用 SQL、R 或 Python,我们可以在数据中按浏览器统计用户数量。
应用— 当…,会发生什么?
我们通过要求我们的结果一般化来回答应用问题。 假设检验 , 交叉验证 , 实验方法 是保证通用性的技术。
晒太阳的时间和植物的高度有关系吗?
这是一个 回归 的问题,Y = f(X)。Y =植物高度。f 代表捕捉关系的任何模型。X =植物在阳光下度过的时间。
这款空调在未来 3 年会出现故障吗:会还是不会?
这是一个 分类 的问题,Y = f(X)。Y = {失败,不要失败}。f 代表捕捉关系的任何模型。x 是记录空调故障历史和相关特征的数据。
哪种动物出现在给定的图片中?
这也是一个 分类 问题,Y = f(x),有时也叫多类分类。Y = {狗猫马其他}。f 代表捕捉关系的任何模型。数据 X 是编码成表格形式的图像。
该客户购买产品的可能性是多少?
这是一个 分类 问题,Y=f(X),Y = {买,不买}。x 是与客户购买习惯相关的数据。许多算法将能够给你落入特定类别的概率。
这笔银行交易是否属于欺诈?
这是一个 分类 的问题,Y=f(x)。Y = {欺诈,不欺诈}。x 是银行交易数据。异常检测也可以处理这个问题。异常检测即使你没有贴上欺诈标签的过往数据,也可能行得通,但这是个更难的问题。
分析—……的关键部分和关系是什么?
要回答分析问题,你需要将数据分解开来,寻找模式。 特征选择 、 降维 、 聚类 是关键工具。
哪些因素最能预测电力需求?
这是一个回归与 特征选择 , Y=f(X)的问题。Y =所需电量。f 代表任何能捕捉你的数据和电力需求之间关系的模型。x 可能具有价格、温度、季节、地区和许多其他特性。为了找到最重要的因素,我们使用 特征选择 来去除不预测电力需求的因素。
苹果和橘子的主要区别是什么?
这是一个 分类 与 特征选择 的问题,Y=f(X)。Y = {苹果,橘子}。f 代表捕捉数据中关系的任何模型。x 有很多特征,比如身高,体重,颜色,味道,和韧性。 特征选择 找到最能区分苹果和橙子的特征。
在我的 HVAC 系统中,哪组传感器倾向于相互变化(或相反)?
这是一个 聚类 问题,因为我们将相似的传感器彼此分组。我们将传感器数据组织为行,将读数的时间组织为列。**
在我的暖通空调系统中,哪种传感器组合最能显示系统的整体健康状况?
这是一个 降维 的问题。我们获取大量数据,并将其转化为几个关键绩效指标。在这种情况下,我们将不同传感器的数据组织为不同的列。
哪些观众喜欢同类电影?
****这很奇怪,因为我们试图将相似的用户和相似的电影分组。这是典型的 推荐引擎 。我们还可以写一个更简单的应用程序为“这个用户喜欢这组电影吗?”或者甚至简单到“这个用户会喜欢这部电影吗?”
成功的 CEO 有哪些共同的领导实践?
这乍一看像是一个分组问题。一旦你读懂了字里行间的意思,就会回到关键的区别上来。所有成功的 CEO 都要吃饭,所有不成功的 CEO 也一样。我们对预测成功的因素更感兴趣。
评估— 这是最好的方法吗?
要回答评估问题,您需要将您的数据推断到复杂的假设案例中。
我们能否通过更好地为不同产品定价来节省资金?
这就归结为 场景分析 。我们提出了几种定价方案,然后用模型预测它们的效果。这就很可能涉及到回归 ,以及批判性思维。
创造— 你能预测在新的条件下……会发生什么吗?
创造问题要求你创造新的最优解。
我的送货车应该走什么路线?
这是一个众所周知的 优化 问题。主要标准是在按时交货的同时,尽量减少燃料费用。
我们应该在哪里设立新的办公地点?
这里我们需要优化到一个特定的标准。一个简单的就是利润最大化,但实际上考虑的更多。为了编写一个优化,我们需要能够评估位置。这将我们带回到应用、分析和评估阶段。
我应该把这个广告放在网页的什么位置,这样浏览者最有可能点击它?
你可以把它写成一个优化,但是还有更好的选择。移动一个广告并观察它的表现并不昂贵。这意味着我们可以实验,而不是提前决定。尝试定位广告并测试其效果。你甚至可以通过 A/B 测试 或者 强化学习 来自动化这个过程。
我的自动冷却和加热系统应该将温度调高、调低还是保持不变?
这是 强化学习 的好区域。您的冷却系统会根据输入数据进行调整,如电价、时间和您的偏好。
有了锤子,一切都成了钉子
我们应该先提问。很容易陷入我们的数据和工具中。我们忘记了还有更广泛的问题可以解决。
数据问题遵循从容易到困难的连续体。问许多小问题会带来进步,让你获得意想不到的真知灼见。
如果您觉得这很有帮助,请推荐并分享,点击💚这样其他人就能看到了。
作为数据科学家,如何提出正确的问题
要定义问题陈述
在我们作为数据科学家讨论如何通过提出正确的问题来定义问题陈述之前,让我们试着理解一下为什么提出正确的问题如此重要。
长话短说,当我第一次开始我的第一个数据科学家实习时,我对这个项目非常兴奋,只想尽快动手,对大局没有清晰的认识。
我明白我试图解决的问题。但是我没有深入细节来定义目标和目的。更糟糕的是,我没有质疑给我的用于分析和预测的数据集。经过两个星期的数据清理和分析,我才意识到我对数据做了错误的假设——这一切都是因为我对问题和数据缺乏了解。
这是我的小故事。
我相信提出正确的问题和定义问题陈述是许多数据科学初学者(包括我)面临的一些挑战。
你看。提问很简单。每个人都能做到。但是问正确的问题有些微妙,因为我们不知道什么正确的问题被认为是正确的**。**
在这篇文章中,我将与你分享一些关于如何提出正确的问题并随后定义问题陈述的要点和指南。我希望这将重新定义或在某些方面帮助你的方法来应对这些挑战。
我们开始吧!
如何通过提出正确的问题来定义问题陈述?
(Source)
不管承认与否,定义问题陈述(或数据科学问题)是数据科学管道中最重要的步骤之一。
一个定义明确的问题已经解决了一半
—查尔斯·凯特林
在接下来的部分中,我们将通过四个阶段来定义问题陈述。
所有的问题都应该朝着这个方向发展,以便在形成问题陈述之前更好地理解项目。
1.了解需要解决的问题
需要确定的机会是什么?您的利益相关者面临的痛点是什么?
通常情况下, Kaggle 竞赛上的问题陈述都是定义明确的,我们被给予数据集来处理,而不必担心问题陈述如何对他人有益,或者如何获得数据等。
太好了。
现在的问题是,在真实的工作环境中,问题是没有定义的。他们看起来模棱两可。他们含糊不清。
**而且大多数时候(如果不是全部的话),利益相关者只会给我们一个问题:**我有这个“问题”,你能帮我解决这个吗?句号。
短而不甜。
我们的任务是帮助他们将问题框定为数据科学问题陈述,真正设身处地地为他们着想,从他们的角度看待事物和问题。
换句话说,我们需要有同理心。
提问可以帮助你更好、更深入地理解问题的问题,因为利益相关者拥有问题的领域知识。我们的任务是从他们那里学习领域知识,并将我们的技术知识与数据结合起来,提出一个推动商业价值的解决方案。
2.根据问题评估形势
一旦我们确定了一个数据科学问题,接下来要做的事情就是评估与该问题相关的情况。
这意味着我们需要谨慎分析风险、成本、收益、意外情况、法规、资源和情况要求。
为了进一步说明,这通常可以分解为以下几个问题:
- 问题的要求是什么?
- 有哪些假设和约束?
- 有哪些资源可用?这是在人员和资金方面,如计算机系统(GPU、CPU 可用)、仪器等。
3.了解项目的潜在风险和收益
这一步是可选的,取决于项目的大小和规模。
一些项目可能只是处于探索阶段,因此,如果项目投入生产,潜在的风险可能会更低,将来会有更大的收益。
- 与这个项目相关的主要成本是什么?
- 潜在的好处是什么?
- 追求项目有什么风险?
- 潜在风险的偶然性是什么?
回答这些问题有助于您更好地了解情况,以及更好地理解项目所涉及的内容。深入了解项目有助于我们评估之前定义的问题陈述的有效性。
4.定义评估项目的成功标准(或衡量标准)
这很重要。
你不希望有一个雄心勃勃的项目,有一个问题陈述要解决,最后才意识到你没有任何度量来衡量和评估项目的成功。
这可以归结为一个简单的问题:你希望在项目结束时实现什么?
成就应该是可衡量的,而不是无法量化的抽象事物。一些指标可能不会立即可用,因此需要数据收集和预处理。
当问正确的问题时,您必须与利益相关者讨论要使用的度量标准,这种讨论应该总是在早期进行。
定义成功标准非常重要,因为这将帮助您在项目的整个生命周期中评估项目。
最后的想法
最终,我们的最终目标是制定更好的问题和定义明确的问题陈述,以使用数据科学方法解决问题,并生成业务见解和推动可行的计划。
感谢您的阅读。我希望这篇文章能让你了解提出正确问题的重要性,以及如何构建问题陈述。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)**
如何使用购买数据和几行 Python 代码自动细分客户
用简单的数据分析技术学习“客户细分”的小型教育项目
Automatic Customer Segmentation using Recency/Monetary Matrix — Right: Photo by Michael on Unsplash
**您为什么应该关注客户细分?**要向客户提供个性化体验,细分是关键。它可以洞察客户的行为、习惯和偏好,使您能够提供量身定制的营销活动,增加您的成功几率,并通过量身定制的内容改善客户体验。
Customer Segmentation
**我们要建造什么?**使用交易购买数据,我们将能够创建一个 2 x 2 价值矩阵来创建 4 个客户群。每一组都将根据两个维度来区分其他组:(1)当前客户价值,和(2)潜在客户价值。
**我们要用什么技巧?**我们将使用 RFM 模型从交易型采购数据中创建所需的功能。RFM 模式代表着:
- 最近:他们最后一次购买是什么时候?
- 频率:他们购买的频率和持续时间?
- 货币价值/销售额:他们购买了多少?
它通常用于在每三个问题的交叉点识别最高价值的客户。为了构建 2 x 2 矩阵,我们将只使用 RFM 的 R &。
RFM Model
我们使用的是什么数据?我们将使用 Tableau(也称为“全球超市”)提供的购买样本数据集。它通常用于预测和时间序列分析。它包含 1500 多个不同的客户和 4 年的购买数据。因为我们做的是行为细分,而不是人口统计细分,我们将通过只过滤 B2C 细分市场(消费者)和美国国家来消除一些潜在的人口统计偏见。
我们采取什么方法?
- 步骤 0: 在客户级别加载、过滤、清理和聚合数据,
- **第一步:**为每个客户创建 RFM 功能,
- **第 2 步:**为了实现细分自动化,我们将使用 80%的分位数来表示近期和货币(我们也可以使用 k-mean 聚类或杠杆业务知识来创建存储桶,例如,全球超市企业用户将活跃客户视为最近订单不到 100 天的人)。
- **第三步:**计算 RM 评分,对客户进行排序,
- **第四步:**可视化价值矩阵,探究一些关键数字。
蟒蛇道:
- 步骤 0: 在客户级别加载、过滤、清理和聚集数据
import matplotlib as plt
import numpy as np
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
url = '[https://github.com/tristanga/Data-Analysis/raw/master/Global%20Superstore.xls'](https://github.com/tristanga/Data-Analysis/raw/master/Global%20Superstore.xls')
df = pd.read_excel(url)
df = df[(df.Segment == 'Consumer') & (df.Country == 'United States')]
df.head()
- 步骤 1: 为每个客户创建 RFM 功能
df_RFM = df.groupby('Customer ID').agg({'Order Date': lambda y: (df['Order Date'].max().date() - y.max().date()).days,
'Order ID': lambda y: len(y.unique()),
'Sales': lambda y: round(y.sum(),2)})
df_RFM.columns = ['Recency', 'Frequency', 'Monetary']
df_RFM = df_RFM.sort_values('Monetary', ascending=False)
df_RFM.head()
- **第 2 步:**为了实现自动分割,我们将使用 80%的分位数来表示近期和货币
# We will use the 80% quantile for each feature
quantiles = df_RFM.quantile(q=[0.8])
print(quantiles)
df_RFM['R']=np.where(df_RFM['Recency']<=int(quantiles.Recency.values), 2, 1)
df_RFM['F']=np.where(df_RFM['Frequency']>=int(quantiles.Frequency.values), 2, 1)
df_RFM['M']=np.where(df_RFM['Monetary']>=int(quantiles.Monetary.values), 2, 1)
df_RFM.head()
- **第三步:**计算 RFM 分数,对客户进行排序
# To do the 2 x 2 matrix we will only use Recency & Monetary
df_RFM['RMScore'] = df_RFM.M.map(str)+df_RFM.R.map(str)
df_RFM = df_RFM.reset_index()
df_RFM_SUM = df_RFM.groupby('RMScore').agg({'Customer ID': lambda y: len(y.unique()),
'Frequency': lambda y: round(y.mean(),0),
'Recency': lambda y: round(y.mean(),0),
'R': lambda y: round(y.mean(),0),
'M': lambda y: round(y.mean(),0),
'Monetary': lambda y: round(y.mean(),0)})
df_RFM_SUM = df_RFM_SUM.sort_values('RMScore', ascending=False)
df_RFM_SUM.head()
- **第四步:**形象化价值矩阵,探索一些关键数字
# 1) Average Monetary Matrix
df_RFM_M = df_RFM_SUM.pivot(index='M', columns='R', values='Monetary')
df_RFM_M= df_RFM_M.reset_index().sort_values(['M'], ascending = False).set_index(['M'])
df_RFM_M# 2) Number of Customer Matrix
df_RFM_C = df_RFM_SUM.pivot(index='M', columns='R', values='Customer ID')
df_RFM_C= df_RFM_C.reset_index().sort_values(['M'], ascending = False).set_index(['M'])
df_RFM_C# 3) Recency Matrix
Final Matrix
一些简单销售的外卖/速赢&营销策略示例?
- 处于“空闲”阶段的客户很少,他们的平均收入高于“明星”阶段。因为它们很少,所以应该很容易与业务合作,以了解在客户级别发生了什么。根据分析,可能会有一个简单的快速获胜方法:通过电话或会议重新激活他们中的一些人,希望他们回到“明星”行列(例如,参与的客户)。
- **“轻量级”客户的平均最后订单时间非常长(超过 1 年,而“参与型”客户为 60-70 天)。**利用优惠券发起简单的重新激活活动可能会带来一些新订单,并帮助其中一些客户转向“新”类别(例如,已参与的客户)。
Simple Tactics Examples
该笔记本在 Github 上有售。感谢你阅读我的帖子,如果你喜欢,请鼓掌。如果您想在您的组织内进行简单或更复杂的 RFM 细分,请随时联系我。
通过 Python k-means 了解 RFM 更多信息的其他有趣读物:
客户细分是一个听起来似乎很简单的概念。概括地说,目标是将客户分为…
www.kimberlycoffey.com](http://www.kimberlycoffey.com/blog/2016/8/k-means-clustering-for-customer-segmentation)
如何用 SHAP 避开机器学习黑箱
Kazimir Malevich’s 1915 “Black Square”
我相信我们都同意这样的观点,机器学习给科技产品带来了巨大的进步,因此也给我们所有人的福祉带来了巨大的进步。然而,从事机器学习的公司和研究人员面临一个巨大的挑战:“黑盒算法”。
黑盒算法可以被宽泛地定义为其输出不容易解释或者完全不可解释的算法。意思是你从一个输入得到一个输出,但是你不明白为什么。更不用说 GDPR 对“解释权”的强化,避免黑盒算法事关透明度和问责制——这是任何公司都应该努力追求的两个价值观。
考虑到这一点,我最近开始探索的一个非常好的工具是 SHAP,它代表沙普利附加解释。
什么是 SHAP?
这个框架通过提供直观和交互式的可视化,旨在显示哪些特征与某个预测和模型整体更相关,从而使任何机器学习算法本质上都变得“可解释”。
我不会过多地钻研理论部分——SHAP 背后的 UWashington 的研究团队在他们的 NIPS 论文中解释了这一点——但基本想法是在最初训练的模型之上训练一个更简单和可解释的模型(即线性回归或决策树),以便它接近最初的预测。这样,这些预测现在可以用更简单的模型来解释了。
我想和你们分享我在一个开放数据集上的框架实现,以及我们能从它那里得到什么类型的解释。
SHAP 教了我们什么?
我从波士顿数据集开始(查看功能首字母缩略词含义的链接)。该数据集包含由美国人口普查局收集的有关波士顿地区住房的信息,其中的目标变量是中值房价。我在这个数据集上训练了一个 XGBoost 学习者,使用 GridSearch 进行了超参数优化。
现在,让我们看看 SHAP 的输出。
预测解释器
第一张图表旨在解释个人预测。在这种情况下,我选择了测试集的第一个样本。我们可以看到,该模型预测的中值房价为 16.51 英镑(16 510 美元)。此外,我们可以看到哪些功能有助于提高(红色)或降低(蓝色)该值。在这种情况下,LSTAT 等于 4.98 是证实目标变量的最明确的特征,这意味着它提高了预测值。另一方面,RM、NOX 和 DIS 的值会降低预测值。
模型解释器
这张图表的目的是从整体上解释这个模型。它将所有样本绘制在 x 轴上(在本例中,按照相似性排序,但可以在组合框中更改),并将它们的预测值绘制在 y 轴上。此外,基于特征值,它还具有每个样本的每个特征的单独贡献。
在本例中,我选择了样本号 60 (x 轴),其预测值为 10.01 (y 轴),其中 RM 和 LSTAT 是最相关的要素,但它们会降低预测值。但是,只要将鼠标悬停在其他样本上,就可以看到特征值及其影响如何变化,以及预测结果如何变化。
依赖图
在这个图表中,我们可以看到两个特征是如何根据它们在模型中的影响而相互关联的,通过 SHAP 值(模型中特征相关性的度量)来衡量。SHAP 值也可以被视为一个几率——值为-2 意味着观察到该特征会将你获胜的对数几率降低 2,这里的“获胜”只是意味着拥有一栋更昂贵的房子。
在这种情况下,我们可以看到,对于低于 7 (x 轴)的 RM 值,SHAP 值(y 轴)实际上总是负的,这意味着该特征的较低值会将预测值向下推。此外,如果 RM 等于 6,则 SHAP 值可以在-2.5 和 0 之间,具体取决于 RAD 的值。这意味着,如果你也有一个良好的高速公路(RAD)的可达性,那么拥有更少的房间(RM)就不那么糟糕。请注意,RM 低于 5 和高于 7 时,这种垂直分布变窄了很多,这证明其他功能(如 RAD)失去了很多影响。
汇总图
这两个图表显示了相同输出的不同可视化,这是对模型作为一个整体的特性相关性的一般评估。第一个图表有一些附加信息,因为它考虑了每个单独预测的特征相关性(描述为一个点)。此外,对于每个特征,它显示了该特征的较高或较低值如何影响它同意或不同意预测的事实。
作为一个例子,我们可以看到 LSTAT 是迄今为止最有影响力的特征,无论是积极的还是消极的。在这种情况下,较低的 LSTAT 值似乎会对预测产生积极影响。我们还可以看到,RM 具有相反的行为—更高的值导致更高的预测值。
当我们考虑缩略语的含义时,这一切都是有意义的。预计较低的人口比例(LSTAT)和较高的房间数量(RM)都会导致更贵的房子。
正在总结…
没有什么比尝试更好的了,对吧?我的建议是:从一个开放的数据集开始,也许是一个分类数据集,如虹膜数据集,训练一个适当的模型并运行框架。
提示:另外,看看斯科特·伦德伯格在 TDS 上的帖子,他是《SHAP》的原创者之一😉
荟萃分析中的三个常见错误
元分析已经成为一种流行的工具,用来综合研究一个普通研究问题的大量工作的数据。由于这提供了一种假定的客观方法来总结大量数据,它已经成为制定健康指南时证据的黄金标准。
然而,荟萃分析中有几个问题会导致不准确。由于这些限制,元分析——或者借用早期批评者的一个术语“超级愚蠢”——几乎自该方法问世以来就一直受到批评。
有几个工具有助于确保元分析的质量,这将在本文稍后概述。但是首先,让我们考虑一下这个(虚构的)摘录,它来自一个荟萃分析的结果部分,我将用它来简要说明荟萃分析中的三个常见问题:
“正如假设的那样,综合七项研究的八个效应大小的荟萃分析表明,社交媒体的使用与自我报告的焦虑水平正相关[r = .073,95% CI ( .004,0.142];p = .038 图 1A】。Egger 的回归测试表明没有发表偏倚的证据(p = .19 图 1B)。”
Figure 1. The relationship between social media usage and self-reported anxiety. The forest plot (a) visualises point estimates for a set of hypothetical studies with filled squares. The diamond reflects the estimated summary effect size. The funnel plot (b) illustrates each effect size against its standard error
当这位虚构的作者——他恰好也在发行一本关于社交媒体危险的书——最初搜索研究时,他们实际上找到了 9 项符合入选标准的研究。然而,九项研究的荟萃分析的汇总效应大小[r= . 062,95%可信区间(- .004,0.127)]与. 061 的p值相关(图 2)。
Figure 2. The original set of studies for the assessment of the relationship between social media usage and self-reported anxiety. Upon realising that the removal of study six would result in a statistically significant result, our fictitious researcher removed this study using a post hoc justification. Meta-analysis pre-registration would have prevented a post hoc adjustment of exclusion criteria dressed up as being a priori
由于这一结果会阻碍出版(和图书销售)的机会,他们进一步研究了研究六,该研究报告称社交媒体使用和焦虑水平之间存在负相关。这项研究恰好是纳入荟萃分析的最早研究。
研究六没有包括 Instagram 的使用(在 2012 年开始流行),所以他们调整了资格标准,只包括 2013 年以来发表的研究,这是由(事后)假设证明的,即 Instagram 的使用与焦虑最相关。
Is Instagram usage associated with anxiety? Probably not, but our fictitious author used this idea as a post hoc justification for removing a study from their meta-analysis
随着研究的删除,荟萃分析变得具有统计学意义。虽然这个虚构的场景乍一看似乎很极端,但在 2000 多名接受调查的心理学家中,近 40%的人承认,在考虑了这样做的影响后,他们已经排除了数据。
预注册您的分析计划
荟萃分析预注册为分析灵活性提供了一种补救措施,因为它提供了研究者分析意图的先验记录。在上面的例子中,排除标准在分析之前就已经指定了。
对预注册分析的一个常见批评是它们没有提供分析的灵活性。然而,这是不正确的,因为预先登记并没有将研究人员锁定在特定的计划中,而是有助于清楚地描述预先计划的和探索性的分析。
在上面的例子中,研究者可以自由地报告他们的分析,但是他们必须陈述他们的推理,这充其量是站不住脚的。作为指导,系统评价和荟萃分析方案的首选报告项目( PRISMA-P )文件提供了荟萃分析方案中应解决的项目列表。
荟萃分析预注册有多种选择。首先,遵循 PRISMA-P 指南的带时间戳的荟萃分析协议可以上传到开放科学框架。
第二,如果荟萃分析调查了一个健康相关的结果,它可以在 PROSPERO 预先注册。PROSPERO 网站通过一步一步的登记表来指导研究人员,该登记表用于生成预注册记录。这些记录可以修改,但任何更改都有时间戳。
第三,元分析方案可以提交给许多期刊进行同行评议,如系统综述。虽然同行评审过程显然比上传方案花费更多的时间,但它可以提供重要的反馈,从而改善荟萃分析。
第四,可以使用注册报告格式提交荟萃分析,其中荟萃分析分两个阶段进行审查。在第一阶段,荟萃分析介绍和方法部分在数据收集前进行同行评议。如果研究原理和方法被认为是合适的,杂志将提供最终论文的临时验收。
An overview of the Registered Reports format (Source: Center for Open Science)
一旦收集和分析了数据,论文再次提交给第二阶段审查,第二阶段审查包括与第一阶段相同的导言和方法,但增加了结果和结论。在第二阶段的审查中,重点是结果和解释是否符合预先批准的方法。
重要的是,论文的接受不取决于结果的统计学意义。截至 2018 年 8 月,有 42 种期刊提供注册报告荟萃分析,其中大多数期刊发表生物行为科学的研究。
出版偏差
在荟萃分析中,发表偏倚是一个公认的问题。由于有统计学意义的研究更有可能被发表,对于任何给定的研究领域,很可能有几个不重要的研究被搁置在研究者的文件抽屉里,这对荟萃分析没有帮助。
How much data is left to be forgotten in file drawers or lab archives?
因此,荟萃分析汇总效应大小可能不能最好地代表“真实”效应大小。评估发表风险的一种常见方法是构建漏斗图,根据方差(例如,标准误差)的测量值绘制影响大小。对称的漏斗图表明发表偏倚的风险较低。尽管目测漏斗图来评估不对称的证据存在固有的主观性,但许多研究人员仍然依赖这一工具。
现在让我们回到我们想象中的书房。由于我们虚构的研究人员意识到主观漏斗图评估的问题,他们通过构建漏斗图客观地评估了不对称性。由于研究人员不擅长从漏斗图中识别不对称,他们遵循建议,进行了艾格回归测试来补充漏斗图(图 1A)。
It can be hard to subjectively decide whether a funnel plot looks asymmetrical, especially if there’s a conflict of interest
统计显著性检验表明漏斗图不对称。在这种情况下,测试没有统计学意义( p = .19)。因此,我们的研究人员得出结论,不存在发表偏倚的风险。然而,仔细观察这些数据会发现,这个结论很可能是不正确的。
对漏斗图及其相关测试的一个常见误解是,它们测量的是发表偏倚,而实际上它们测量的是 小研究偏倚。这种类型的偏倚可能包括发表偏倚,但也包括通常与小型研究相关的其他类型的偏倚,如研究质量。
一个相对简单的漏斗图修改,称为轮廓增强漏斗图,可以帮助更好地理解与小研究偏倚相比的发表偏倚的风险。对于给定范围的效应大小和方差,可以计算出每一点的统计显著性水平。因此,可以在漏斗图上显示统计显著性的范围(例如, p = .05 至. 01)。
将我们的原始漏斗图(图 3A)与轮廓增强漏斗图(图 3B)进行比较,发现尽管没有漏斗图不对称的明显证据,但一半包含的效应大小的p-值非常接近. 05。可用的 p 值的一半如此接近 0.05 是非常不可能的。要么这些重要的研究也是选择性分析的结果,要么存在一些未发表的研究。
Figure 3. A comparison of conventional meta-analysis funnel plots vs. contour-enhanced funnel plots. Compared to the original funnel plot (a), which is also presented in Fig 1B, a contour enhanced funnel plot (b) visualises ranges of statistical significance. The gray-shaded region corresponds to p-values between .10 and .05, whereas the dark gray-shaded region corresponds to p-values between .05 and .01
已经开发了几种措施来纠正荟萃分析中的偏差,如 p 曲线、 p 均匀和三参数选择模型,后者展示了优越的性能。但是如果没有未发表的研究,这些方法充其量只能是估计。这种情况的一个合理的解决方案是进行元分析,只包括预先注册的实证研究,如 Gronau 及其同事最近关于“权力姿态”的元分析。
The idea that adopting an ‘expansive’ body posture makes people feel more powerful makes for a nice story (and TED talk) but the evidence supporting this effect is shaky
现在我们来看看荟萃分析中的最后一个常见问题:效应大小依赖性。请注意,在之前的荟萃分析例子中,有八个效应量,但只有七项研究?这是因为从研究四中提取了两个效应大小(图 1A)。这是一个常见的现象,因为论文有时会报告几个结果指标。
然而,由于这些效应大小来自相同的研究人群,它们在统计上是相关的。由于典型的荟萃分析程序假设效应大小在统计上是独立的,合并相关的荟萃分析会导致有偏的结果。
有几种方法可以解决荟萃分析中的统计相关性问题。首先,您可以简单地为每个研究选择一个效应大小。虽然简单明了,但需要一个预先指定的系统来帮助选择所选的效果大小,否则很容易选择最大的效果。此外,这种方法从您的分析中排除了潜在的有价值的效应大小。要包括一项研究中的多种效应,可以对效应进行统计汇总。但要做到这一点,你需要包括一个研究内相关性的测量,这几乎从来没有在论文中报道过。
如果论文包含原始数据,可以计算出几乎同样罕见的研究内相关性。因此,如果采用这种方法,研究人员几乎总是需要估计研究内的相关性。或者,稳健方差估计可用于说明效应大小依赖性,无需了解研究内相关性。
元分析是更好地理解不同研究领域的重要工具。这种方法可以提供一个研究领域的更客观的总结,而不是简单地“计票”重要和不重要结果的数量。
但是就像几乎所有的统计工具一样,如果使用不当,元分析会导致不准确的推论。通过这篇文章,我希望已经提供了一个简要的概述,强调了元分析中的一些常见问题和这些问题的实际解决方案。
这是一篇文章的编辑版本,这篇文章将发表在由挪威科技大学的学生创办的心理学杂志《NTNU 》上。这里的是一篇可引用的文章的预印本,执行本文所述分析的 R 脚本和数据可从这里的获得。我感谢 Psykologisk Tidsskrift 的编辑好心地允许我以博客的形式转贴这篇文章。
如何成为一个糟糕的数据科学家!
所以,你想成为一名数据科学家,或者更好地说,你认为你现在是一名数据科学家,并且你已经为你的第一份工作做好了准备…我们要确保你不是我下面列出的“想成为数据科学家”的刻板印象之一,否则你很可能会在面试中遭到无数次拒绝。我不认为这是所有刻板印象的完整列表。其实如果你还能想到其他的刻板印象,请在评论里分享吧!这只是我随着时间的推移见过或见过的一些人的刻板印象,可悲的是,这些人似乎一遍又一遍地重复着。
我想成为一名数据科学家【因为钱】我该从哪里开始?
这种类型的人听说数据科学可以赚大钱,并想从中分一杯羹…这种类型的人很少知道学习完成工作所需的知识和技能需要付出大量努力。这类人也很少知道数据科学是一项持续的研究工作。很少有一条清晰的解决之道摆在你面前。对于深度学习来说更是如此,每天都有新的技术和想法涌现,你必须提出新的想法。如果你需要在社交媒体上发布问题“我从哪里开始?”你不具备成为一个人的条件。获得一种学习一切的态度,建立一种创新精神,然后再回来。
我会做数据科学,请给我“干净”的数据。
如果你刚刚学完一门数据科学课程,或者希望学完几门。如果你进行了一个或几个类似 Kaggle 的比赛,你可能会有这样的印象:数据都是经过清理的(或基本上准备好了),通过几条语句或命令,就可以很好地为机器学习做好准备了。事情是那些课程和竞赛为你准备了数据,让你更快的去了解问题的核心,学习机器学习的题材。在现实生活中,数据无处不在。它是不受控制的,你必须自己准备。你可能要自己去收集。大多数数据科学家的工作很大一部分是处理数据、准备数据、清理数据等。如果你还没有这样做,找出一个你自己的问题,端到端地解决它,然后再回来。
我不懂数学或者我不擅长数学,但是人们说我可以做数据科学。
不,这是一个谬论。如果你没有数学头脑,总有一天你会陷入无法再进步的境地。好的是可以学数学。首先,走出“这太难了”的综合症。反正数据科学比较难,最好从数学这种简单的开始。学点微积分,学点统计学,学说话,学数学思考然后以后再回来。
给我一个“很好”定义的问题。
有些人只是希望他们的小盒子有明确定义的接口,什么进来,什么应该出去。再一次,一个刚刚在这个领域做了一些很好的课程的人的综合征…在现实中,不仅数据是混乱的,而且你必须解决的问题是混乱的,不明确的,模糊的…你必须弄清楚它。有时候你可以自己定义,自己提炼,有时候你要接受这种杂乱,自己摆弄。如果你不能得到模糊和近似的目标,并通过思考、研究和与利益相关者的讨论来完善它们,直到找到解决方案,就不要指望成为数据科学家。这里有一个很大的误解是,如果你有一个博士学位,你就可以对这个问题免疫…嗯,没那么快,我见过博士和其他人一样在这个问题上挣扎。所以,长点骨气,接受挑战,然后再回来。
我学过数据科学,我有一个博客/作品集/…我可以做任何事情。
没那么快。这种人学习数据科学,更加以营销为导向,知道它可以帮助建立个人品牌,建立自己的投资组合或写博客、文章等。但是从来没有在现实生活中亲自尝试过。那个人认为他什么都知道,他能解决任何问题。这种类型的人很可能独自对数据科学和机器学习可以实现的东西的过度宣传负责,并且对专业人员来说是一个问题,而不是任何帮助。做些真正的工作,变得诚实些,然后再回来。
如果你想成为一名数据科学家,这可以归结为一个简单的秘诀。努力学习,努力工作。你必须走自己的路,并投入热情。沿着你的兴趣寻找增长知识,了解它,尝试事情。不断学习新的东西,不仅仅是相关的科目。不要把自己局限在课程上,找真实世界的例子来练习,对你能做什么,对你知道什么和不知道什么保持诚实。做个善良的人类!
原载于 2018 年 2 月 27 日【thelonenutblog.wordpress.com。
封面图片由Pixabay组成。
如何成为一名数据科学家
几周前,我编写并发布了我的第二个 Kaggle 内核。我被他们的“ML 和数据科学的状态”调查所吸引,并认为我将能够提取一些有趣的见解。考虑到大多数编写内核的人很可能是已经建立的数据科学家,我想大多数编写内核的人会对如何开始之外的事情感兴趣。
令我惊讶的是,我赢得了他们每周一次的内核奖,我的内核最终得到了比我写它时想象的更多的关注。
无论如何,我写这篇文章是为了分享我通过编写内核所学到的东西。让我们开始吧。
程序设计语言
据我所知,有两种语言在数据科学社区中使用得最多,它们是 Python 和 R。我个人更喜欢 R,但我很好奇这在现实世界中是如何进行的。
在这里,我根据职位比较了在工作中选择 Python 或 R 作为主要编程语言的受访者人数。事实证明,除了统计学家和运筹学之外,Python 几乎在每一个角色中都胜出。然而,在这两个角色中,尤其是对于运筹学来说,样本量很小,结果可能不太显著。
专业和可能的职位
我还在上高中,所以当然还没到必须申报专业的时候。我很想知道什么专业倾向于扮演什么角色,所以我制作了一个图表来比较大学专业和职位。
当然,计算机科学专业的学生会成为计算机科学家、程序员和软件工程师。数学专业进入预测建模,数据科学和统计学,物理专业倾向于研究。
我个人喜欢这张图的地方是,我仔细检查了这张图,以确保每个职位至少有一个人来自曾经的专业。对我来说,这说明只要激情还在,你在学校学的东西不应该束缚你去做你想做的事情。
学习资源
学习数据科学的在线资源永远不会短缺。有时候,这些资源的数量可能会让人不知所措,所以我很好奇,想看看调查的受访者认为哪些是最有用的。
事实证明,人们发现创建项目、参加课程和参加 Kaggle 挑战是学习数据科学最有用的方式。这确实反映了我所认为的真实情况;我喜欢做兼职项目,亲眼目睹了它们如何帮助我成长为一名工程师。
重要的工作技能
调查中的另一个问题是问受访者他们认为什么技能在工作中最有用。我用这个问题的数据重新创建了上一个问题的图表,来看看这些技能是如何相互叠加的。
Python 和统计学知识无疑被认为是最有用的工作技能。r 在这里有点落后于 Python,这反映了我们在第一张图中看到的情况。让我感到有趣的一件事是,MOOCs(大规模开放在线课程)在有用性方面得分最低,而在最后一张图中,课程被认为是学习数据科学最有用的资源之一。可能受访者没觉得 MOOCs 应该作为求职时的一个认证?我不能肯定地说,但是那是我最好的猜测。
现实世界中的傻瓜
受访者还被问及他们认为哪些技术在工作中最有用。我创建了一个表格,对所有受访者以及特定角色进行了分析。
与我们到目前为止所看到的一样,Python 被评为整个行业的头号技术,在这里展示的每个角色中都是如此。r 紧随其后,在业界排名第三,SQL、Jupyter、Unix 和 TensorFlow 在每个角色中都有出现。这向我表明,这些可能是在不久的将来要掌握的最重要的技术。
现实世界中的方法
与上一个问题类似,受访者被问及他们在工作中最常用的数据科学方法。
在这里,我们可以看到数据可视化、交叉验证、逻辑回归和决策树被用于每个角色。自然语言处理和神经网络被机器学习工程师更频繁地使用是可以理解的,而其他角色则有其他特定于他们的方法。
结论
我喜欢处理这么大的数据集,它最终非常适用于我将来可能要做的事情。如果你是一名数据科学家新手,并且正在寻找着手点,我的图表强烈支持几条建议:
- **学习 Python。**Python 和 R 已经存在了几十年,但正如我们在第一张图中看到的,Python 在基本场景中胜出。我们也可以在第四个和第五个显示中看到这一点。老实说,我相信你很难找到一家完全不使用 Python 的公司,所以你应该准备好了。
- **主修计算机科学或数学。**正如我在创建第二个图表后提到的,每个专业在每个职位上都有一定的影响力。但是从柱状图上可见的比例来看,几乎每个角色中,CS 专业和数学专业都是最丰富的。虽然这不是必须的,但是这两个专业中的一个或两个可能会给你一点优势。
- **做项目,上课程,参加 Kaggle 挑战。**正如我们在第三张图中看到的,在学习数据科学的有用方法方面,有几个明显的赢家,这三个赢家赢了很多。我个人同意他们所有人的观点,并且将来肯定会继续这样做。
- **了解最广泛使用的工具。**我们似乎有无限多的工具可用,但这项调查让我们看到了被认为是最重要的工具。这里列出的工具太多了,所以如果您想知道从哪里开始,一定要进一步分析上面的表格。
我希望这能帮助你弄清楚从哪里开始!如果你有兴趣看看我是如何使用调查的数据集创建这些图表的,你可以在这里查看我的内核。如果你有任何问题要问我,我很乐意回答。祝你好运!
如何成为数据科学家(第 1/3 部分)
需要数据科学培训? 浏览哈佛创新实验室行业思想领袖和专家开发的课程 。
我是专门从事数据科学领域的招聘人员。产生这个项目的想法是因为我最常被问到的一个问题是:“我如何获得数据科学家的职位?”引起我注意的不仅仅是这个问题的规律性,还有这个问题的不同背景。仅举几个例子,我曾与以下人士进行过这样的对话:软件工程师、数据库开发人员、数据架构师、精算师、数学家、学者(不同学科)、生物学家、天文学家、理论物理学家——我还可以继续下去。通过这些对话,很明显,有大量的错误信息存在,这使得人们不知道他们需要做什么,才能进入这个领域。
因此,我决定调查这个主题,以突破废话,并为任何希望进入商业数据科学的人提供有用的资源——无论你是刚刚起步,还是已经拥有所有必要的技能,但没有行业经验。所以我开始着手回答两个非常宽泛的问题:
- 数据科学需要哪些技能,你应该如何去掌握这些技能?(第一、第二和第三章)
- 从就业市场的角度来看,你可以采取哪些措施来最大化你在数据科学领域获得就业的机会?(第四章)
为什么我有资格写这个?嗯,我每天都和数据科学家交谈,要成为一名有效的招聘人员,我需要了解职业道路,如何成为一名优秀的数据科学家,以及雇主在招聘时需要什么。所以我对这件事已经有了一些了解。但我也想直接从走过这条路的人那里找到答案,所以我开始与不同背景的数据科学家交谈,看看我能挖掘出什么。这让我开始了一段旅程,经历了前软件工程师、前天体物理学家甚至前粒子物理学家,让我兴奋的是,他们都参与了 21 世纪最大的科学突破之一。
第一章:什么是数据科学?
不同类型的数据科学
所以你决定成为一名数据科学家。太好了,你上路了。但是现在你又多了一个选择,那就是:你想成为什么样的数据科学家?因为——承认这一点很重要——虽然数据科学作为一种职业已经被认可了很多年,但对于它到底是什么还没有一个普遍接受的定义。
事实上,“数据科学家”一词被视为一个宽泛的职位,因此它有多种形式,具体需求取决于行业、业务和相关角色的目的/产出。因此,某些技能组合比其他技能组合更适合某些职位,这就是为什么通往数据科学的道路并不统一,而是可以通过一系列不同的领域,如统计学、计算机科学和其他科学学科。
目的是决定数据科学采取何种形式的最大因素,这与已经出现的 A 型-B 型分类有关(参见此处,作者 Michael Hochster: 什么是数据科学?)。概括地说,分类可以概括为:
- 面向人的数据科学(A 类),即支持循证决策的分析
- 例如,软件数据科学(B 类):我们在网飞和 Spotify 看到的推荐系统
随着该领域的成熟,我们可能会看到这些定义的进一步演变,这就是我们将引入第一位专家的地方:亚尼尔·塞鲁西*(记住这些名字,因为我们将从头到尾回到它们)。* Yanir 目前是 Car Next Door(一家支持汽车共享的初创公司)的数据科学主管,他在博客中写了这个话题:数据科学家是一个无用的职位吗?如果你喜欢这篇文章,可以看看 Yanir 的其他文章——他是一位经常发表关于数据科学各种主题的雄辩的作家。
承认这个头衔
在我们深入研究之前,有必要花点时间思考一下“数据科学”中的“科学”,因为从某种意义上说,所有科学家都是数据科学家,因为他们都以这样或那样的形式处理数据。但是,以工业界普遍认为的数据科学为例,究竟是什么使它成为一门科学呢?很棒的问题!答案应该是:‘科学方法’。鉴于科学的多学科性质,科学方法是将这些领域结合在一起的唯一方法。如果你答对了,给你满分。
然而,职称在行业中的应用往往非常松散,因此并非所有的数据科学家都是真正的科学家。但是问问你自己:如果你的角色不涉及实际的科学,你能证明称自己为科学家是正确的吗?就我个人而言,我看不出像“分析师”这样的替代职位有什么问题,或者任何最适合这个职位的职位。但也许这只是我,也许我称自己为招聘科学家会更好。
对于这方面的精彩讨论,我强烈推荐肖恩·麦克卢尔的这篇文章:数据科学家:无愧于标题 ( 是的,我承认——我剽窃了标题)。
这样一来,我们将通过考虑你需要掌握哪些领域的专业知识(如果你还没有掌握)来继续这一探索。
1.问题解决
如果这不是你的首要任务,那就修改它。立刻。所有科学学科的核心是解决问题:伟大的数据科学家是伟大的问题解决者;就这么简单。需要进一步证明吗?我在这个项目中遇到的每一个人,无论背景或当前的工作情况如何,都提到这是数据科学中最重要的因素。
显然,你需要拥有解决问题的工具,但它们仅仅是:工具。从这个意义上说,甚至统计/机器学习技术也可以被认为是你解决问题的工具。新技术出现,技术进化;唯一不变的是解决问题。
在某种程度上,你解决问题的能力是由你的本性决定的,但同时,只有一种方法可以提高:经验,经验,经验。我们将在第三章再次讨论这一点,所以在这一点上,只要记住这重要的一课:你只能通过做来掌握一些东西。
在我们继续之前,我想把你引向 Sean McClure 的另一个伟大的帖子:你应该关心的唯一技能 (只是澄清一下,我不会因为这些指点而收到任何报酬,但我完全接受它。肖恩——如果你正在读这篇文章,你可以随时给我寄钱。
2.统计学/机器学习
好吧,看了上面的内容,看起来我似乎轻视了统计学和机器学习。但是我们在这里谈论的不是一个电动工具;这些都是复杂的(在某种程度上)深奥的领域,如果您不具备专业知识,您将无法很快解决数据科学问题。
为了对这些术语提供一些急需的澄清,机器学习可以被视为一个多学科领域,它是从人工智能/计算机科学和统计学发展而来的。它通常被视为人工智能的一个子领域,尽管这是真的,但重要的是要认识到,没有统计就没有机器学习(ML 严重依赖统计算法才能工作)。长期以来,统计学家不相信机器学习,这两个领域之间的合作是一个相对较新的发展(参见统计学习理论),有趣的是,只有当统计学家接受 ML 结果时,高维统计学习才会发生(感谢 Bhavani Rascutti,Teradata 高级分析领域负责人)。
对于那些对更详细的描述感兴趣的技术读者来说,可以看看 Leo Breiman 在 2001 年发表的这篇经典论文:统计建模:两种文化。
3.计算
- 编程**—我们只需要简单地谈一下编程,因为显而易见:这是绝对必须的。如果你不能编写一个独特的算法或者建立一个统计模型,你如何应用这个理论呢?**
- 分布式计算 —并非所有企业都拥有海量数据集,但考虑到当今世界,培养使用大数据的能力是明智的。).简而言之:单个计算机的主内存是不够的,如果你想在数百个虚拟机上同时训练模型,你需要掌握分布式计算和并行算法。
为什么标感叹号?就我个人而言,我觉得“大数据”这个用词不当很可笑。这个术语经常被混淆,经常被用作所有分析的总括术语。此外,海量数据(以及存储和管理这些数据的技术)不再像以前那样新鲜,因此它从我们的词典中消失只是时间问题。关于这一点的更广泛的讨论,Sean McClure 还有一个明智的帖子: 数据科学和大数据:两个非常不同的野兽 (这现在变得越来越荒谬了——我发誓我从来没有和那个人说过话)。
- 软件工程 —对于 A 类数据科学,让我明确一点:工程是一门独立的学科。因此,如果这是你想成为的数据科学家类型,你不需要成为一名工程师。但是,如果你想将机器学习算法投入生产(即 B 型),你将需要在软件工程方面有很强的基础。
4.数据争论
数据清理/准备是数据科学至关重要的固有部分。这会占用你大部分的时间。如果您未能从数据集中移除噪声(例如,错误/缺失值、非标准化类别等)。),那么模型的准确性就会受到影响,最终会得出不正确的结论。因此,如果你不准备花时间和精力在这一步上,你的高级技术知识就变得无关紧要了。
同样值得注意的是,数据质量是商业组织中的一个长期问题,许多企业在数据存储方面都有复杂的基础架构。因此,如果你还没有准备好面对这种环境,并且想要使用干净的数据集,那么很不幸,商业数据科学不适合你。
5.工具和技术
你现在应该已经意识到,发展你作为解决问题的数据科学家的能力应该优先于其他一切:技术不断变化,最终可以在相对较短的时间内学会。但是我们不应该完全忽略它们,所以了解当今使用最广泛的工具是很有用的。
从编程语言开始,R 和 Python 是最常见的;所以如果你有选择的话,也许在你做实验的时候可以使用其中的一个。
特别是在 A 类数据科学中,在直观的仪表板中可视化数据的能力对于与非技术业务利益相关者进行交流非常强大。你可能有最好的模型和最好的见解,但是如果你不能有效地展示/解释这些发现,那还有什么用呢?你用什么工具来观想真的不重要——可以是 R,或者 Tableau(这似乎是目前最流行的),但老实说——工具并不重要。
最后,SQL 很重要,因为它是工业中与数据库交互最常用的语言;无论我们谈论的是关系数据库,还是结合大数据技术使用的 SQL 衍生产品。这是数据争论的主要原因——至少在大规模工作时(即不在内存中)。总之:这真的值得你花时间去做。
6.沟通/商业敏锐度
这不应该被低估。除非你进入非常具体的领域,也许是纯研究领域(尽管我们不得不承认,工业界没有很多这样的职位),绝大多数数据科学职位都涉及业务互动,通常是与不具备分析能力的个人打交道。
有能力将业务问题及其发生的环境概念化是至关重要的。将统计见解转化为建议的行动和对外行观众的影响是绝对重要的,特别是对于 A 型数据科学。我和 Yanir 聊到这个,他是这么说的:
“我发现有些技术人员不注意非技术人员在开始使用行话时眼神变得呆滞,这很奇怪。设身处地为听众/读者着想真的很重要”
摇滚明星
可能还不清楚:我讽刺性地使用了这个标题。不——数据科学家不是摇滚明星、忍者、独角兽或任何其他神话生物。如果你打算这样称呼自己,也许你应该好好照照镜子。但是我跑题了。我想在这里指出的一点是:有一些数据科学家在以上所有方面拥有专家级的能力,也许更多。它们很稀有,非常珍贵。如果你有成为其中一员的天赋和愿望,那就太好了——你会成为炙手可热的财富。但如果不是,请记住:你可以专攻数据科学的某些领域,而且通常情况下,优秀的团队由具有不同专长的数据科学家组成。决定关注什么可以追溯到你的兴趣和能力,这很好地引导我们进入旅程的下一章。
第二章:向内看
现在我们正在取得进展。成功消化了第一章的信息后,你就差不多准备好开始制定你的个人目标了。但是首先——需要一些自省——所以喝杯咖啡,找个安静的地方,好好思考一下:
- 你为什么想成为一名数据科学家?
- 你对什么类型的数据科学感兴趣?
- 你已经拥有哪些天生的能力或相关技能?
为什么这很重要?简而言之:数据科学是一个专家领域,所以除非你已经掌握了我们在第一章中介绍的很多内容,否则这不是一个容易(或快速)的旅程。这里有一个重要的信息,它回答了第一个和第二个问题:你需要有正确的理由去走这条路,否则——很有可能——当事情变得艰难时,你会放弃(它会的)。
**要详细说明这一信息,输入迪伦霍格。迪伦之前是一名软件工程师,现在是 Search Party 的数据科学主管,这是一家初创公司,它建立了一个利用机器学习(NLP)将雇主和相关候选人联系起来的平台(招聘的未来!).考虑到他已经完成了从软件工程到数据科学的转变(他仍在继续这一旅程),我们讨论了需要什么,他说:
“不管教育或经历如何,有一些更基本的东西,那就是你的好奇心、决心和坚韧。当你遇到一个问题的时候有很多次:也许算法没有按照它需要的方式执行,或者也许技术是一个难题。无论哪种方式,你都可以学习机器学习算法或软件工程最佳实践,但如果你没有真正下定决心,你就会放弃,无法完成它”
这就对了:当你学习的时候,你不会只是面对问题;在你的职业生涯中,你会不断地面对它们,所以你最好确保你有正确的动机,而不仅仅是因为你认为你的头衔中有“科学家”很酷。
但是第三个问题呢?为什么你的相关技能很重要?嗯,你从哪里开始会影响你最适合哪种类型的数据科学,以及你需要为你感兴趣的领域学习什么。因此,为了充分回答这个问题,有必要从更广泛的科学领域开始,探索数据科学的典型路径。
注意:在许多定量学科中,你会发现有能力过渡到数据科学的人。我不会在这里一一介绍,但重点是:如果你花时间真正理解数据科学的不同细微差别,无论你的背景如何,你都应该能够弄清楚你当前的技能组合有多相关。
其他科学学科
这不是通向数据科学的最常见途径;统计学和计算机科学是,我们将考虑下一步。但是随着许多领域的科学家拥有高度相关的技能组合(尤其是在物理领域),许多人已经实现了这一飞跃。
要解释原因,请允许我介绍我在引言中提到的那个人:Will Hanninger,澳大利亚联邦银行的数据科学家。在前世,威尔是欧洲粒子物理研究所的粒子物理学家,在那里他致力于希格斯玻色子的发现(非常酷),这是他不得不说的:
“在物理学中,你自然会学到很多你在数据科学中需要的东西:编程、操纵数据、获取原始数据并以一种有用的方式对其进行转换。你学统计学,这很重要。最重要的是:你学会了如何解决问题。这些是数据科学家所需的基本技能”
因此,这些技能是高度可转移的,主要选项是:解决问题。差异往往出现在工具和技术上;例如,虽然机器学习是数据科学的同义词,但它在更广泛的科学中不太常见。无论如何,我们在这里谈论的是非常聪明的人;他们有能力在短时间内学习工具和技术。
为了这个项目,我还见到了肖恩·法雷尔;Sean 的背景是天体物理学,他进入了 Teradata Australia 的商业数据科学领域,在那里他写了一篇关于这个主题的精彩博文:为什么科学的损失是数据科学的收获。下面这段话特别相关:
“直到最近,还没有任何成为数据科学家的正式培训途径。大多数数据科学家都有统计学或计算机科学的背景。然而,虽然这些其他的职业道路发展了上面列出的一些技能,但它们通常不能涵盖所有的技能。统计学家在数学和统计方面很强,但通常编程技能较弱。计算机科学家在编程领域很强,但通常对统计学没有很强的理解。两人都有很好的(但不同的)数据分析技能,但都难以创造性地解决问题,这可能是最难教授的技能”
为了避免误解,请记住这里的上下文。肖恩并不是说所有来自统计学或计算机科学的数据科学家都缺乏创造性的解决问题的能力;他的论点是,科学对于解决问题非常有效,可以说比统计学/计算机科学更有效。
统计数字
根据你的观点,统计学可以被看作是一种促进科学进程的数学工具,或者说:它本身就是一门科学。鉴于这种模糊性,如果你是统计学出身,你准备好数据科学了吗?抛开语义不谈,它取决于几个因素:
- 首先,你有机器学习技术的经验吗?正如我们在第一章中所学的,统计建模和机器学习是相关的,它们在许多方面有重叠。然而,后者在应用于大规模数据集时具有显著的优势,并且随着机器学习在所有行业领域的采用不断增加,它实际上是所有类型的数据科学的同义词
- 其次,冒着重复我自己的风险:你对数据科学的哪个领域感兴趣?显然,统计学背景更适合 A 类职位,所以如果你的目标是 B 类工作,你需要学习
- 最后,你有处理数据的实践经验吗?数据争论通常是统计领域的相对弱点,正如我们所知,它是商业数据科学的重要组成部分
计算机科学/软件工程
如果你已经学习了高水平的人工智能/计算机科学,那么你很可能已经处于 B 型数据科学的有利位置。但是还有另一条常走的路要考虑:有经验的软件工程师想进入数据科学。
软件工程师可能有,也可能没有机器学习的经验——这要看情况。但无论如何,这种背景显然更适合 B 型数据科学,这需要在软件工程原则方面有坚实的基础。我与澳大利亚联邦银行的高级数据科学家 James Petterson(之前是一名软件工程师)讨论了这个问题,以下是他对此事的看法:
“很多数据科学工作都是软件工程。不总是指设计健壮的系统,而是简单地写软件。许多任务你可以自动化,如果你想运行实验,你必须写代码,如果你能快速完成,它会产生巨大的差异。当我读博士的时候,我每天必须运行数万个实验,在这种规模下,手动操作是不可能的。拥有工程背景意味着我可以快速完成这项工作,而许多来自其他背景的学生却在基本的软件问题上苦苦挣扎:他们确实擅长数学,但实现他们的想法需要很长时间”
迪伦补充道:
“当你想在生产环境中创建一个机器学习算法的健壮实现时,良好的软件工程实践是非常有价值的。它是各种各样的东西,比如可维护的代码,共享的代码库,这样多人就可以在上面工作,比如日志记录,能够调试生产中的问题,可伸缩性,要知道一旦事情增加,你已经以这样的方式设计了它,这样你就可以并行化它,或者在需要时添加更多的 CPU。因此,如果你在寻找需要将这些东西放到一个平台上的角色类型,而不是做探索性研究或回答特定的业务问题,软件工程是非常有价值的。”
我认为这说明了一切,但总结一下:如果你是一名软件工程师,有良好的数学倾向,你就有很好的条件成为(B 型)数据科学家,前提是你准备好投入工作以掌握统计学/机器学习。
数学
做一个明显的声明:数学支撑着数据科学的所有领域。因此,期待许多数学家现在从事数据科学家的工作似乎是合理的。然而,直接来自数学的相对较少,这种特殊性使我的兴趣达到顶峰。
一种解释是,与其他相关研究领域相比,数学专业(纯数学和应用数学)的毕业生较少,但这并不能说明全部情况。因此,为了更深入地挖掘,我向 BuildingIQ(一家使用先进算法优化商业建筑能源使用的初创公司)的首席数据科学家鲍里斯·萨夫科维奇求助。Boris 拥有电气工程和应用数学背景,并在当时与许多数学家合作,他提供了以下见解:
“许多数学家热爱理论问题、漂亮的方程以及在定理中看到深刻的含义,而商业数据科学是经验性的、混乱的和肮脏的。虽然一些数学家喜欢这一点,但许多人讨厌它。现实世界是复杂的,你不能用沙箱保护一切,你必须分清轻重缓急,欣赏他人的激励,权衡短期、中期和长期的数学和技术,担心收益递减(80/20 法则),处理深层理论和深层实践,以及两者之间的一切。简而言之:你必须灵活应变,才能应对现实世界。这也是商业数据科学的最终目的:找到更快更好的赚钱的实用解决方案。对于那些拥有深厚数学/理论背景、希望彻底了解一切的人来说,这可能非常困难,我已经看到许多数学博士在从研究/学术界过渡到商业数据科学时非常挣扎。”
值得注意的是,Boris 指的更多的是纯数学家,他补充说,在他的职业生涯中,他也与许多优秀的应用数学家合作过。这似乎合乎逻辑,因为纯数学可能会吸引那些热爱理论的人,而不是现实世界的问题。理论工作不会涉及太多与数据的互动,这对于数据科学来说非常重要。
当然也有例外,这最终取决于个人性格,而不仅仅是某人所学的。很明显:数学毕业生学到的很多东西都是高度可转移的,所以掌握特定的统计/机器学习技术应该不会太难(如果还不知道的话)。
就适用性而言,大多数数学家可能最适合学习 A 类数据科学的工具和理论。然而,有研究计算机科学的数学家(理论计算机科学本质上是数学的一个分支),因此有背景的人可能更适合 B 型数据科学。
从所有这些中可以吸取一个重要的教训,那就是理解商业数据科学所涉及的现实。如果你真正理解挑战,并且那是你正在寻找的,那么就去争取吧。但是如果你对理论的热爱超过了对实际应用的热爱,你可能需要重新评估你的想法。
空白画布
如果你刚刚开始,也许你在上学,你喜欢数学、科学和计算,你喜欢数据科学这个东西的声音,那么好消息是:你可以选择你的道路,而不受现有背景的约束。现在有许多特定的数据科学相关课程,涵盖了计算机科学和数学/统计。做好长期的准备;你不会在一夜之间成为数据科学家,我们将在第二部分看到,我们将研究:如何学习。
原载于www.experfy.com。**
如何成为数据科学家,第 2 部分:尝试解决问题
一旦你开始尝试解决你的问题,事情终于有了进展。
- 获取数据。
- 清理数据。
- 看数据。
- 汇总数据。
获取数据
“80%的时间花在准备数据上,20%的时间抱怨需要准备数据。”— 一个随机的博客
为什么这是如此昂贵值得自己的职位。相反,这里是给初露头角的数据科学家的快速建议。
Credit: Nick Rosener (twitter).
**对数据的含义要精确。**这通常意味着询问他人、阅读代码、阅读文档以及查看数据的分布。例如,字段有值的频率。过度信任的一个常见例子是,看到一个名为“年龄”的用户字段,说“啊,用户的年龄”,然后立即将其插入另一个系统(比如,一个模型构建器)。但也许这个领域在一年前才开始被填充,或者只在某些平台上,并且经常是空白的。更糟糕的是,以偏概全的空白(老用户没有价值,某些平台的用户没有价值)。或者也许“年龄”是他们成为用户的时间,也就是说,不是你想的那样。要发现这些东西,就要和人交谈,看数据。你必须和人们交谈,因为有时他们知道。但是,你必须看数据,因为有时他们会说谎(有意或无意)。
学习 SQL 。大量数据存储在关系数据库中,可通过 SQL 访问。还有很多在 Hive 中,可以通过 HiveQL 访问,Hive QL 是经过扩展和修改的 SQL。即使对于文本文件,您也将使用表的概念(固定命名的列和行)。
对于文本,使用 制表符分隔值(TSV)文件 **。**它们易于读写,可以从许多地方导出,可以轻松粘贴到 google 电子表格或 Excel 中进行共享。
对于简单的任务, 用 UNIX 命令行 进行处理。大约从 1990 年开始,UNIX 成为我的朋友的时间比大多数人都长。我仍然一直这样做,以获得十大最常见的事情:
cut-F5-d “” foo . tsv | sort | uniq-c | sort-rn | head-10
**不要刮。**有时候你想要的数据在公共网站上。人们写着铲运机去抢它。这个实用有用,但是我不爱。可能是偷。这很常见。如果你能找到一个许可的来源就更好了。
清理数据
在分析过程中,我所有的清洗都是手动的。这可能很糟糕。我很诚实。
我查看数据记录的示例,并总结数据。如果有些东西看起来不可思议(例如,字段数量错误的行,混乱的文本),我会删除它们。但是,不要去除太多或者以偏概全。
作为偏差的一个例子,如果 20%的记录有一个字段“type”为空,这些可能不是随机的,它们是某种类型的数据。也许是最重要的数据。你不能只是推销他们。对于具有未知字段值的记录(例如,键入 empty,键入“NULL”),我通常将它们留在(标记为“NULL”或“empty”)中,以便向任何观看的人展示其中的奥秘。
另一个例子是一个格式良好的异常数据记录。推销它,让你的结果更容易用图表表示,更容易理解,多么令人满意。例如,这里的是职业冰球运动员的职业积分和比赛的帖子:
National Hockey League (NHL) career scoring. Credit: beerleaguetips.com.
顶部有一个巨大的异常值。我们应该推销它吗?
那是韦恩·格雷兹基,10 岁时被昵称为【伟大的那个】。他太有名了,我的浏览器知道把格雷特斯基改成格雷茨基。Reddit 说“韦恩和他的兄弟布伦特保持着一对兄弟得分最多的 NHL 记录。韦恩 2857,布伦特 4。”我对曲棍球一无所知,但他的故事鼓舞人心:他不高,不强壮,也不快;他通过创造力、练习和团队合作打破了每一项记录。
丢掉一分是多么容易,但我们可能会丢掉格雷茨基。从这一点上我们可以学到很多东西。
看数据
人们是惊人的视觉模式匹配者。
下面是一个示例数据集:X 均值 54.26 标准差,Y 均值 47.83 标准差 26.93,X 和 Y 的相关性为-0.06。
不知道那个?
以下是完整数据(142 行):
)(那)(就)(是)(我)(们)(的)(一)(个)(小)(人)(,)(我)(们)(都)(没)(想)(到)(这)(些)(事)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(,)(只)(是)(这)(个)(小)(人)(。 )(那)(就)(是)(我)(们)(的)(一)(年)(里)(,)(我)(们)(都)(不)(知)(道)(了)(,)(我)(们)(还)(不)(知)(道)(,)(我)(们)(还)(有)(些)(不)(知)(道)(吗)(,)(我)(们)(还)(不)(知)(道)(,)(我)(们)(还)(是)(不)(知)(道)(,)(我)(们)(们)(还)(不)(知)(道)(,)(我)(们)(们)(还)(不)(知)(道)(,)(我)(们)(还)(有)(些)(不)(知)(道)(理)(,)(我)(们)(还)(不)(能)(不)(知)(道)(理)(。 )(我)(们)(都)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(就)(没)(想)(到)(这)(些)(事)(了)(。 )(我)(们)(都)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(,)(我)(就)(没)(想)(到)(这)(些)(事)(,)(我)(们)(还)(没)(想)(到)(这)(些)(事)(。
仍然不承认吗?
这里有一个图表:
Datasaurus says: don’t trust summary statistics, always look at the data.
是的,这是阿尔贝托·开罗的 Datasaurus ,他一直在互联网上转来转去,告诉我们看看这些数据。(这是安斯科姆的四重奏的异想天开的版本,创作于 1973 年,目的相同:相同的统计数据,不同的数据。)
计算机研究人员(我想说是数据科学家)进一步发展了这个概念,向展示了如何使用模拟退火将几乎相同的汇总统计数据突变成不同的形状。
重点是,看数据。
在 Datasaurus 的例子中,我们完成了。它是一只恐龙。在我看来,霸王龙可以用 8000 磅的压力咬人,让骨头“爆炸”我们需要更多的分析吗?
总结数据
从数据中获得洞察力或价值。这包括以一种有用的方式总结它:要么是描述性的(“这是一只霸王龙”)要么是*预测性的(*给定一个输入,预测它是不是一只霸王龙,或者可能是什么)。两者都有用。两者都是数据科学任务。
(最后,人们所认为的数据科学,这一节既太长又不够详细!我很同情,但我的目标是快速游览。)
描述性分析
**一种常见的技术是概率。**一个概率往往是
(有趣事物的数量)/(事物的数量)
很多数据科学都是计数,学习如何处理计数。
善于精确定义“事物的数量”。数数从思考开始。当考虑解决一个问题时,试着定义一个概率。
一个很大的优势是,人们对思考概率相当放心:“80%的是”,“80%的的几率在上升”,以及“我们的目标至少是 75% ”
事实上,它们太舒服了。他们对不确定性几乎完全不感兴趣(即“80%正负 10%”),但这很重要。
在实际应用中,您必须处理低计数,即缺少数据。当你除以一个低计数,你得到一个嘈杂的概率。即使是“大数据”,你通常也只对其中的一部分感兴趣。示例:推荐内容的一种方法是预测每个项目有人会参与的概率(特写,购买,…)看完后,并把大概率项目排序到最上面。如果只有一个人看了那个东西,他们参与了,概率是 100%。所以,如果你按这个概率排序,大量不受欢迎的东西会排在最前面。但是这个概率并不是精确地说 100%,存在不确定性。在这种情况下(单个视图),很多。怎么办?
最简单的方法是在没有足够数据的情况下(在这个例子中,没有足够的视图)得出任何结论。判断“够不够”是艺术,不是科学。多少个视图就够了?我很想看到更多关于这门艺术的实际讨论。我认为大多数从业者只是挑选一些东西。有些人变得更正式,这很复杂。
你可以保留数据,但用置信区间陈述不确定性,而不是抛出数据。对于二项分布的随机变量:1.96 * sqrt(p *(1-p)/n),我已经使用了一千次(a 的正态近似)置信区间,其中 p 是概率,n 是观察次数,1.96 是一个乘数,它给出了 95%的置信区间。(也就是说,粗略地说,如果你将一个类似的实验运行 100 次,其中 95 次的概率在你计算的区间内。)这个工具有很多假设,这意味着它可能会被误用。实际上,在我提到的例子中,p=1,所以区间会是 0,这显然是错误的。事实上,我认为贝叶斯主义者会声称这个公式总是错的,因为你对概率有一个先验的信念,而这个信念没有被恰当地使用。我要跳过一个完整的讨论,太长了。简而言之,学习概率、二项分布的随机变量及其置信区间。
陈述不确定性的另一种方式是使用假设测试,即假设(断言)的统计测试,例如,“某人在看到该内容后参与其中的概率高于平均水平。”进行这种测试的一种方法是计算一个 T2 p 值 T3、罗纳德·费雪推广的 T4 T5。统计学家可能会对我的过度简化感到愤怒,但 p 值大致是“一个结果随机出现的概率”。因此,你可以说,“有人在看到这些内容后参与其中的概率高于平均水平,p=0.01”,意思是“有 1%的可能性,这个结论实际上是随机噪声。”统计学家称之为“第一类错误”(我从来不记得是第一类还是第二类,我更喜欢“假阳性”),并进一步用短语“不正确地拒绝真零假设”为自己披上了一件隐形斗篷关键是,如果你想得出一个结论,给它加上一个 p 值是处理不确定性的第一步。越小越好,因为这样你的结论就不太可能是随机噪声。费希尔提出 p < 0.05 被认为是显著的,从那以后人们就一直使用它,尽管不清楚他是否对这个想法的实现感到满意。
一个大问题是 p 值黑客攻击:人们进行不同的研究,以不同的方式分析,查看不同的数据,每当 p 值为 0.05 时,他们就使用(或发布)结果。我的朋友 John Riedl 曾经开玩笑说,科学论文中 20 个结论(使用 p 值)中有 1 个是随机噪声。呵呵,只有认真。如果你让人类来解决这个问题,情况会变得更糟,因为他们有强烈的动机发表结果,或者得出他们已经相信的结论。关于 p 值有很多争议。
几个想法。首先,至少一个置信区间或 p 值代表一个健全性检查。它有助于快速抛弃人们从没有不确定性或大量数据的图表中得出的大量垃圾结论。其次,任何单一的定量结论都是一个更大故事的一部分。如果你想更确定,随着时间的推移收集多条证据。如果你根据一个证据做出一个非常重要的决定,要有一个好的理由。第三,选择你的战斗。有时候你需要高度的确定性,往往不是。不到万不得已不要抓狂。
(处理不确定性的另一种方法是贝叶斯方法:先有一个信念,然后根据数据调整这个信念。例如,加法平滑,它有很多花哨的术语,但却是一个简单而美丽的想法:在分子和分母上加一些东西,这样如果没有数据,你仍然可以得到一个合理的数字。比如说,参与我们例子的总体概率。但是,分子和分母加什么更有艺术)
其他聚合
有时你的解决方案不是一个概率,但它几乎总是一个集合:数据的总结。
最常见的后一种概率是平均值。关于平均值有很多需要了解的。同样的处理低计数,你可以推销他们,把他们的置信区间,使用假设检验,或使用先验。一个最重要也是最美丽的数学思想,中心极限定理说,将不同的事物加在一起(技术上独立的、同分布的随机变量,具有有限的非零方差)趋向于一个钟形曲线。因为平均值是将事物相加(然后除以事物的数量),所以平均值的集合趋向于一个钟形曲线。关于钟形曲线有很多要了解的,由于篇幅原因,我将再次跳过。
The central limit theorem explains why bell curves show up everywhere.
预言
我谈到了描述。现在我们来谈谈预测。
“很难做出预测,尤其是对未来的预测。”— 丹麦谚语
这是软件极客们兴奋的地方:回归、聚类、神经网络、决策树、深度学习等等。我不能在这里面面俱到。预测(“监督学习”)的最短故事是:
- 给你的数据贴上真实的标签(好的或坏的例子)
- 定义一个总结预测数据的模型
- 定义一个误差(或损失)函数,将测试集上的实际值与预测值进行比较(不用于计算模型!!)
- 尽量使误差变小
这里有值得兴奋的美丽,但它通常只是整个任务的一小部分。那种美诱使人们关注这一部分。其余的(挑选正确的问题,获取和清理数据,…)可能对结果的影响更大,往往事倍功半。别人说的这个好。
xkcd on machine learning.
又一个集合,这次更有趣:一个神经网络。在一种常见的算法中,你将网络中的“神经元”与输入和输出连接起来,将训练样本作为输入,查看输出,当网络出错时,你会在下一次将其调整为更正确的(例如使用反向传播)。在给出大量示例后,该网络是训练数据的汇总,能够在给定输入的情况下准确预测输出。当网络是“深”的,即具有许多层时,这也被称为“深度学习”。
我过去常常对神经网络和深度学习感到烦躁。它产生预测,但不是理解。我认为我们应该寻求理解。然而,当你想要预测时,对于像图像或声音识别这样的模糊任务,这些技术比其他任何技术都好得多,以至于我不得不忽略我的偏执。
深度学习是我们这个时代的戏剧性故事之一。最近几年,深度学习系统赢得了 ImageNet 挑战赛,这是一项年度竞赛,旨在检测和标记图像中的对象,将其标记为来自某个类别(例如,将图像标记为其中有一只“狗”)。2012 年,分类错误率开始大幅下降:
ImageNet Large Scale Visual Recognition Challenge error rates. 0.1 is a 10% error rate.
事实上,Andrej Karpathy 估计他自己(人类!)2014 年误差为 5.1%,2015 年被电脑“打败”。(注意 Karpathy 说 5.1%只是权衡曲线上的点估计。他知道不确定性。然而,一个惊人的故事。)
这里的其他技术工具是逻辑回归(产生可解释的模型系数)和梯度增强决策树(比线性方法更好地处理数据中的非线性和交叉特征)。
这里还有很多要说的,但是当图片和文字的比例仍然很高的时候,我要停下来,继续第 3 部分的工作。
这是一个系列的一部分。0 部分是 这里的 。
如何成为一名优秀的数据科学家
在对如何成为一名糟糕的数据科学家大谈特谈之后,我想我应该就如何成为一名优秀的数据科学家给出一些提示,以此来平衡竞争环境。奖牌的另一面。
我强烈的感觉是,如果你只是因为就业或薪水的原因而进入这个领域,你的起步就错了。你应该先看看你的激情。有趣的是,我们花了几秒钟时间在 Dictionary.com上查找激情这个词的定义:
热情
[ 帕什–呃 n]
名词
- 任何强烈的或引人注目的情感或感觉,如爱或恨。
2.强烈的感情或欲望;爱情;热情。
3.性欲强;欲望。
4.强烈的爱或性欲的例子或经历。
5.一个对其有强烈的爱或性欲的人。
6.对任何事物强烈或过分的喜爱、热情或渴望:对音乐的热情。
7.这种喜爱或渴望的对象:准确性成了他的一种爱好。
希望你对数据科学的热情范围不涉及定义 2、3、4 或 5。而是受到对数据科学的强烈喜爱和热情的驱使!如果是这样的话,你就在正确的轨道上,我的第一个建议是:不要试图一口吞下大海。放大激情的一个方面,首先激起你的兴趣。看看如何将它应用到现实世界的问题中,并在过程中学习。例如,就我而言,我很久以前就对人工生命充满热情。这在 2012 年左右演变成一种强化学习、遗传算法和遗传编程的形式。随着时间的推移,我对机器学习和深度学习的兴趣越来越大,通过阅读书籍,参加在线课程和在攻读硕士学位期间参加研究生课程来了解它。当时,我希望将它应用到我的硕士论文项目中,但有时计划会发生变化。所以,简而言之,你需要跟随你的心。
如果你采用这种方法,你将会避免我在第一篇文章中提到的许多陷阱。您不会期望一个“干净”的数据集作为您的输入,因为您已经将它应用到您所学的一些真实案例中。你将一路学习如何收集数据、如何清理数据、如何解读数据……这将在两个方面让你受益。首先,您将学习一项基本技能,即数据清理。但最重要的是,它会增长你的好奇心。这是我从未见过任何一门课程能做到的。再说一次,我不认为这是一项你可以在几周内获得的技能,它需要你通过反复练习获得的思维转变。
沿着你的激情前进的另一个好处是,如果你还没有必要的数学背景,你会在前进的道路上抓住它。如果你觉得数学很难,当你通过自己充满激情的实验扩展你的知识时,根据需要抓住它们可能更容易!我也要重申,不管你怎么想或者被告知,数学并不那么难。此外,如果你以积极的态度开始,告诉自己你能做到,那么你就更容易得到它们。
这种方法的下一个好处是你必须定义和提炼你的问题。你将决定什么对你来说是重要的,你的“研究”问题是什么,以及它与你正在进行的活动有什么关系。我在读硕士的时候,看到两种类型的学生。那些已经有一个研究议程,一个他们想探索的问题,或者至少早些时候和他们的导师坐下来,根据他们的兴趣和热情设置这样一个研究问题的人。这些学生通常做高质量的报告,学习与回答他们的研究问题高度相关的课程,并在他们的研究领域变得非常精通。第二种类型的学生等待他们的导师给他们一个研究项目,从来没有真正参与其中,做了一般或很差的陈述,参加了任何课程,但没有真正看到它们与他们的研究课题有什么关系:嗯,在大多数情况下,他们没有……最终可能仍然毕业,但有一个课题要忘记……你想像第一种类型的学生一样,即使你自己做,你也想控制它并获得好处。
最后,写或谈论你的发现和学习对你有好处。我发现它有助于理清我的想法,并(有时)从其他志同道合的同行那里获得一些反馈。总而言之,学术论文不是交流你的发现的唯一方式,如果你有热情,博客、视频、报告都可以帮助你。学术论文的优势当然在于同行评议系统,它能为你的研究提供反馈,但如果它不适合你的实际情况,你就不应该把自己局限于单一的交流媒介。坦率地揭露你所发现的,不要宣称你是你不是或还不是的东西。到时候,其他人会承认你是一名数据科学家,那一天你会知道你肯定是一名数据科学家!
和我之前的文章一样,努力学习:当你遵循个人研究/兴趣目标时,学习会更容易。努力工作:同样,当你追随一种激情时,事情会变得更容易(不一定容易)。在任何时候都要对自己(也对他人)诚实,告诉他们你知道或发现了什么。如果你在第一天就认为自己是一名成熟的数据科学家,你可能不会为成为一名数据科学家付出必要的努力。另一方面,如果你追随自己的兴趣和激情,你可能会在认为自己是数据科学家之前成为一名数据科学家。
原载于 2018 年 3 月 5 日【thelonenutblog.wordpress.com】。
如何成为一名机器学习工程师?
source : engadget
最近我在我的团队中发布了一个机器学习工程师的职位。我收到了很多人的问题,他们很好奇,想了解这个职位本身,如何准备这个职位,以及它面临什么样的问题?
数据科学 vs 机器学习工程
让我们从定义职位本身开始。什么是机器学习工程?是新事物吗?它与所谓的 21 世纪最性感的工作数据科学家有什么不同吗?
当人们发明数据科学家这一术语时,他们在寻找擅长以下方面的超级英雄:
via Big Data [sorry] & Data Science: What Does a Data Scientist Do
1-获取数据、清理数据、发现问题、提出正确的问题以及为不同的 KPI 设定正确的衡量标准。
2-进行必要的统计分析,提出关于解决方案的不同假设
3-使用统计方法验证不同的建议解决方案。
4-在某些时候,解决方案可能不仅仅是一个数学模型(方程),它可能包括一些需要使用机器学习的复杂性。因此,通过不同的迭代开发一个合适的 ML 模型变得很有必要。
5-一旦这个模型准备好了,你需要设计一个工程系统,除了其他方面需要仔细的工程设计以确保这个模型的持续有效性之外,还要为这个模型服务。
6-对模型结果进行必要的连续分析和调查,以及必要的监控。
它们确实存在于我们的星球上,但非常罕见;)
Photo by Franki Chamaki / Unsplash
由于人类获取知识和跟上各个不同子领域不断变化的能力有限,专业化就成了必须。我们开始看到不同的职位描述在前面提到的工作流程的不同区域工作。
例如,一些对基础设施更感兴趣的数据工程师/科学家专门从事数据工程。这给了他们更多的带宽来吸收不同分布式处理系统的内部(例如:Apache Spark,Apache Hadoop,…因此能够扩展这些系统来处理非常定制的用例,这些用例可能不容易用标准 API 来处理
我们可以列出 6 个概况,它们共同组成了一个有能力的数据团队,能够推动其组织成为数据驱动的,然后在稍后阶段成为人工智能驱动的。
- 数据分析师和数据即
- 数据科学家
- 数据工程师
- 机器学习工程师
- 数据基础设施工程师
- 数据操作
然而,很难将这一点推广到每一个组织,因为在考虑数据团队保护伞下的每个配置文件之间的界限时,每个组织的需求和规模是决定性因素。
那么什么是机器学习工程师呢?
Photo by Wes Hicks on Unsplash
我将引用 Oreilly 的优秀文章对他们的描述如下:
- 他们比典型的数据科学家拥有更强的软件工程技能。
- 机器学习工程师能够与维护生产系统的工程师一起工作。他们还编写干净的代码。
- 他们了解软件开发方法、敏捷实践和现代软件开发人员使用的所有工具:从 Eclipse 和 IntelliJ 等 ide 到持续部署管道的组件。
- 他们参与软件架构和设计
- 因为他们的重点是让数据产品在生产中发挥作用,所以他们从整体上考虑问题,并考虑日志记录或 A/B 测试基础设施等组件。
- 他们了解生产中监控数据产品的具体问题。有许多关于应用程序监控的资源,但机器学习有更进一步的要求。数据管道和模型可能会过时,需要重新培训,或者它们可能会受到对手的攻击,而这些攻击对于传统的 web 应用程序来说毫无意义。
如何获得体验?
Photo by Ali Yahya on Unsplash
- 做一个扎实的软件工程师
- 获得 ML 经验
- 理论部分,你可以在 Coursera、Edx 或 Udacity 上选修任何一门现有的 MOOCs。一个选择是 Udacity 机器学习工程师 Nanodegree 。
- 通过在真实数据上做真实项目获得实践经验。如果你还没有问题的话,Kaggle 是最好的来源:)
- 读,听,看。互联网上有许多精彩的文章、播客和视频会议。
为了前任。这里是一个博客,讨论我的经验,建立我们的内部 ML 基础设施平台,这将让你先睹为快真实世界的 ML 工程经验。
我们如何构建我们的内部 ML 平台?
medium.com](https://medium.com/careem-tech/yoda-scaling-machine-learning-careem-d4bc8b1be195)
推荐资源
博客
播客
理论背景:
面试是什么样的?
似乎大多数公司会像面试其他软件工程师一样面试你。另外,可能会就你的机器学习理论知识、数据工程、ML 产品设计进行面试。
更多详情可以阅读小寒曾作为机器学习工程师的面试经历。
[## 我在五天内面试了硅谷的五家顶级公司,幸运的是获得了五份工作邀请
以下是我的做法和我的想法
medium.com](https://medium.com/@XiaohanZeng/i-interviewed-at-five-top-companies-in-silicon-valley-in-five-days-and-luckily-got-five-job-offers-25178cf74e0f)
哪里可以找到合适的机会?
包括五大在内的大公司大多都有自己的机器学习和数据团队。如果你有合适的经验,应该很容易找到合适的机会。你随时可以从 Linkedin 开始。
包裹
对于机器学习工程岗位的什么、哪里、怎么做的问题,我尝试给出了一些答案。如果能分享一下进入该领域的经验就好了。一如既往地感谢阅读!
你喜欢你读到的东西吗?
在 Twitter @_ahmdkamal _ 上关注我,获取关于#AI 和#tech 的有趣更新。
你知道你最多可以放弃 50 个👏到本帖** 😉 ?!
鼓掌让其他人看到&鼓励我在 medium 上发布更多高质量的内容!
如何开始自己的数据科学之旅!
嘿,你好,
不久以前,商人们常常去找这些占星家预测他们的下一个财政年度会如何。尽管这是毫无根据和不确定的,但人们习惯于根据这一点或该领域某个专家的建议来做决定。但是现在我们在前进,已经前进到这样一个程度,我们接受一切基于事实和数字的东西。
我们生活在一个数据丰富的世界,你去达美乐点披萨,他们问的第一件事就是你的号码,通过这个手机号码,他们获取了从地址到过去订单的所有信息,但数据仅限于此吗?或者我们能从这些数据中做些别的什么吗?这就是数据科学家发挥作用的地方。
现在,让我们谈谈用于分析数据的工具。
- SAS——统计分析系统的缩写,用于高级分析、数据管理和商业智能。这是一个由 NCSU 从 1966 年到 1976 年开发的授权软件。SAS 仍然被广泛使用,大多数财富 500 强公司都使用 SAS。
- R-R 语言是一种用于分析和统计模型的开源语言。许多开源库是为 R 语言创建的。主要用于命令行界面
- Python——我个人最喜欢的,Python 是革命性的,今天在这篇文章中我们将使用 Python。这是一种高级编程语言,由 Guido Van Rossum 创建。它是开源的,因此每天都有很多库被创建。事实上,如果你想在机器学习和人工智能领域做出一番事业,Python 是最理想的语言。
今天我们将研究用于数据科学的 Python。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
这里我们导入了三个基本的依赖项,大约 90%的项目需要您导入这三个依赖项。那么这些依赖是什么呢?
- numpy——这是一个内置的 python 库,有助于执行数学函数,如矩阵乘法、转换等
- Pandas 最重要的库,该库用于导入数据集和创建数据框。这可以进一步用于分析或预测,无论你想做什么!
- matplotlib——这是一个用于数据可视化和表示的工具。
- % matplotlib inline—因为我要使用 jupyter(Ipython notebook)笔记本,所以我希望我的输出(图形)在笔记本内部。
train = pd.read_csv('train.csv')
现在我们已经准备好了,我们使用上面的命令导入数据。pd 是上面提到的熊猫的简称(进口熊猫为 pd)。read_csv 是熊猫图书馆内部的一个函数。train.csv 文件位于 anaconda 目录中。我们已经成功地将该文件上传到我们的 python 生态系统中,并创建了一个数据框,并且准备好执行功能了!
train.head()
什么是头?人体的上部,不是吗?类似地,pandas 使用 head 函数给我们一个关于数据帧顶部的概述。默认情况下,head()会返回数据帧的前 5 行。
同样,如果我们输入 head(20 ),它将返回前 20 行!有趣不是吗?
类似地,我们可以使用 tail()来查看数据帧的最后 5 个(默认情况下)。
head()的输出将是:-
output for the head() command
现在,我们已经获得了数据框的前 5 行和前 5 列。
最重要的是首先要知道你在处理什么样的数据集,像大小、形状和描述这样的问题是非常重要的,而且随着我们的进一步发展也非常有用,那么关于数据集,我们需要知道哪些关键的事情呢?由于很少有数据集是巨大的,并且处理起来会很痛苦,我们需要找到有用的信息并消除不需要的信息,这听起来很容易,但识别这些信息可能很难。据说研究数据集的形状是一种很好的做法。
shape and size of the data
这里我们可以看到数据有 891 行和 12 列,总数据大小为 10692。
让我们来看一些关于我们现在拥有的数据的基本统计数据
Basic statistics about the data
在这里可以看到数据的统计数据,如计数、平均值、百分位数、标准偏差。当我们处理一些财务数据或绩效相关数据时,这些数据非常重要。
接下来,我们将进行一些数据可视化,这是数据科学必须掌握的最重要的技能之一。正如在导入数据集的过程中所讨论的,我们使用 matplotlib,尽管如果你在 google 上搜索它,还有各种其他的库,但是 matplotlib 在这里服务于我们的目的。
对于数据科学家来说,知道使用哪种表示是非常重要的,我们将首先讨论这一点,然后讨论代码。
表现类型
当我们将数据可视化时,我们头脑中必须有一些东西,
- 一张图上要显示多少个变量?
- 一个数据点有几个项目还是很多?
- 我们是否显示一段时间的数据?还是我们在分组?
这些因素影响图表的选择。
Which chart ?
上图有助于我们确定何时使用哪种图表类型。
但是强烈建议学习一下数据可视化,掌握它。因为许多公司想要数据来告诉我们这个故事。
可视化工具,如 Tableau,PowerBI 可以通过创建一个非常有用的仪表板来告诉我们关于整个数据的故事。
现在,我们看看如何使用 matplotlib 在 python 中可视化数据
Age vs number of passengers (Age distribution of passengers)
我们已经将 matplotlib 作为 plt 导入,这里我们首先从定义 figsize 开始,这意味着图形大小。通常,如果我们没有定义 figsize,它会被设置为默认值,然后我们使用我们的数据并绘制年龄。
我们可以设置标签,xlabel 表示 x 轴标签,ylabel 表示 y 轴标签,title 用于定义图形的标题。
看到图表后,我们可以从数据中推断出一些东西,所有的事情都可以推断出什么呢?
- 年轻人更加积极。
- 老年人真的很少。
- 22 岁的人最高。
- 最老的旅行者是 79 岁。
通过观察图表,我们可以推断出更多信息。
类似地,我们也可以从数据集制作许多其他图表,
Survival of people by age
数据集通过使用二进制来告诉我们一个人是否幸存,这很有趣,不是吗?这就是我们如何为我们的需求争论数据,我们将在以后使用统计模型预测更多的事情。
让我们继续,训练我们的计算机根据现有的数据来预测是否有乘客幸存。
机器学习算法
到目前为止,我们已经了解了如何导入数据、可视化数据以及如何从数据中进行推断,现在我们将了解要使用哪些算法以及何时使用?
有两种机器学习算法
- 监督学习:-当我们有标签数据时,我们使用监督。机器在数据点的值标签中寻找模式。
- 无监督学习:-当我们没有标记的数据时,我们使用它。该机器将数据组织成组并进行比较以找到关系。
监督学习的例子是回归,非监督学习是朴素贝叶斯。
顶级机器学习算法正在数据科学领域取得进展。这里解释的是其中的 10 大…
www.dezyre.com](https://www.dezyre.com/article/top-10-machine-learning-algorithms/202)
此链接将帮助您了解哪种算法是最适合的,以及要使用哪种算法。
但是对于这些数据,我们将使用逻辑回归,我们如何做呢?
逻辑回归帮助我们预测数据的真假。基本上,将一组数据提供给机器,机器使用回归公式进行计算,并以二进制格式给出答案
根据维基百科,在统计、逻辑回归,或者逻辑回归,或者逻辑回归模型、、是回归模型,其中因变量(DV) 是分类。本文涵盖了一个二元因变量的情况——也就是说,它只能取两个值,“0”和“1”,分别代表通过/失败、赢/输、活着/死了或健康/生病等结果。因变量有两个以上结果类别的情况可以在多项逻辑回归中进行分析,或者,如果多个类别是有序的,则在有序逻辑回归中进行分析。在经济学术语中,逻辑回归是定性反应/离散选择模型的一个例子。
那么逻辑回归在这方面如何帮助我们呢?
我们保留了二进制格式的列。所以这不是问题,但我们需要将性别列更改为 1 和 0,这样我们就可以预测是否将性别作为变量之一。
要求我们再次导入 python 库中内置的 sklearn,用于统计工具。Sklearn 服务于所有目的,是一个非常强大的工具。
我们如何做到这一点?
from sklearn.linear_model import LogisticRegression
我们导入 sklearn 库中的逻辑回归。
逻辑回归的先决条件是有两组数据
- 训练数据—该数据用于训练计算机
- 测试—测试数据通常很小,用于检查机器对数据的准确性
Converting genders into binary format
在将它们转换成二进制格式后,我们现在可以使用 LogisticRegression 函数来预测我们的结果。
首先,我们将来自训练幸存列设置为逻辑回归模型的输出,以便理解。
因为我们有一个单独的训练和测试数据集,我们可以很容易地使用它,而不需要使用训练和测试分割功能。
Prediction using logistic regression
让我们一步一步来,
- 我们将幸存列标记为我们的标签(输出),并使用 data_train(变量)作为我们的训练输入,而不使用幸存列
- 然后我们导入 sklearn,并定义模型(变量)以使用逻辑回归函数。
- 然后我们拟合我们的模型,这是我们的计算机试图识别模式的地方。这使得我们的计算机能够在类似的数据传入时给出预测。
- 我们有一个单独的数据叫做测试,在那里幸存下来的不存在。我们使用 predict 函数根据训练数据集预测结果。
这就是计算机如何通过学习进行预测。下次我们将其他模型,也将看到什么是准确性得分和矩阵得分。
希望你喜欢它并从中得到一些东西,如果有,请分享,下次再见。
如何在 30 分钟或更短时间内建立贝叶斯模型
你有一个问题,你认为可能需要一些贝叶斯模型
我被问到的一个常见问题是你如何启动?
在本教程中,我将带您了解一个新的数据集,这个数据集是一个教育数据集。我对数据一窍不通,也没有具体的领域知识。我改编了来自 PyMC3 文档的模型。
然后,我使用诸如 Arviz 之类的工具来评估模型,解释和评估你的建模决策。我用这个来通知一个更好的模型,我们从对模型的评估中看到,第二个模型要好得多。您可以在Github—census_data
笔记本中查看活页夹链接。
我们的第一步是建立一个模型。我们在上面的截图中描述过。
[gallery ids="2034,2033,2032 " type = " rectangle "]
我们做观想阶段。
我们看到我们的第一个模型很差,看看plot_ppc
图,我们的模型根本不符合观察到的数据。这是穷人。
如何改进模型?
我们可以利用我们在建模过程中获得的知识来认识到,Beta 分布是一个差的分布,而且过于紧密,我们还可以看到各种模型指标都很差。(这些都在笔记本里)。让我们从贝塔分布转换到伽玛分布,看看会发生什么。
我们看到第二种模式要好得多。查看红色后验预测图如何更好地拟合黑色观察数据。这是一个更好的模型。
关键要点是什么?
从一个例子的模型开始,然后看看它在你的建模用例中的表现,这是一个好主意。关键是完善和批评你的模型。你可以在上面看到我是如何使用像样本后验预测这样的工具来批评和改进模型的。
将这种形象内在化是很好的——盒子循环,这是你在建立贝叶斯模型时需要的工作流程。
关键的事情是,你将你对你试图建模的领域的了解整合到模型中。当我从贝塔分布转到伽玛分布时,你会看到上面的情况。这与您可能习惯的一些机器学习工作流不同。
想了解更多?
如果这满足了你的胃口,你可能想了解更多。你可以在这里注册一个为期 5 天的免费贝叶斯统计电子邮件课程,或者如果你已经确信你可以购买概率编程初级课程。在我的课程中,我给出了近 4 个小时的视频来解释贝叶斯建模的概念。我涵盖了诸如“自动驾驶汽车安全吗”的例子,我介绍了一系列新的概率编程工具,我还在 Arviz 上做了独家截屏。如果你能跟随这篇博文并理解它,那么这个课程就是为你而设的。
如何构建个性化推荐的协同过滤模型
基于张量流和张量流变换的推荐模型
2020 年 4 月更新:请注意,现在有一种更简单的方法可以做到这一点。阅读本文关于构建 模型的建议使用 BigQuery ML 。
在本文中,我将带您逐步了解如何使用 TensorFlow 的 Estimator API 来构建用于产品推荐的 WALS 协同过滤模型。最近,我的同事 Lukman Ramsey 发布了一系列解决方案,详细介绍了如何构建推荐模型— 阅读这些解决方案,了解什么是推荐以及如何建立端到端系统。
Recommending chocolates to users is a collaborative filtering problem
在本文中,我将用 Apache Beam 替换原始解决方案中对 Pandas 的使用——这将允许解决方案更容易地扩展到更大的数据集。因为上下文存在于解决方案中,所以我将在这里简单地深入技术细节。完整的源代码在 GitHub 上。
步骤 1:提取原始数据
对于协同过滤,我们不需要知道任何关于用户或内容的属性。本质上,我们需要知道的只是 userId、itemId 和特定用户对特定项目的评价。在这种情况下,我们可以用花在页面上的时间作为评级的代理。Google Analytics 360 将 web 流量信息导出到 BigQuery,我就是从 BigQuery 中提取数据的:
#standardSQL
WITH visitor_page_content AS (
SELECT
fullVisitorID,
(SELECT MAX(IF(index=10, value, NULL)) FROM UNNEST(hits.customDimensions)) AS latestContentId,
(LEAD(hits.time, 1) OVER (PARTITION BY fullVisitorId ORDER BY hits.time ASC) - hits.time) AS session_duration
FROM `cloud-training-demos.GA360_test.ga_sessions_sample`,
UNNEST(hits) AS hits
WHERE
# only include hits on pages
hits.type = "PAGE"
GROUP BY
fullVisitorId, latestContentId, hits.time
)
# aggregate web stats
SELECT
fullVisitorID as visitorId,
latestContentId as contentId,
SUM(session_duration) AS session_duration
FROM visitor_page_content
WHERE latestContentId IS NOT NULL
GROUP BY fullVisitorID, latestContentId
HAVING session_duration > 0
ORDER BY latestContentId
查询本身特定于报纸设置 Google Analytics 的方式,特别是他们设置自定义维度的方式,您可能需要使用不同的查询来提取数据,如下表所示:
这是进行协同过滤所需的原始数据集。显然,你将使用什么样的 visitorId、contentId 和 ratings 取决于你的问题。除此之外,其他一切都很标准,您应该能够照原样使用它。
步骤 2:创建枚举的用户和项目 id
WALS 算法要求枚举用户 id 和项目 id,也就是说,它们应该只是交互矩阵中的行号和列号。因此,我们需要获取上面的 visitorId,它是一个字符串,并将它们映射到 0,1,2,…我们需要对项目 id 做同样的事情。此外,评级必须是小数字,通常为 0-1。因此,我们必须调整 session_duration。
为了进行这种映射,我们将使用TensorFlow Transform(TFT)——这是一个允许您使用 Apache Beam 创建预处理数据集进行训练的库,然后在推理期间将该预处理作为 tensor flow 图的一部分来应用!
下面是我使用 TFT 的预处理功能的关键:
**def** preprocess_tft(rowdict):
median = 57937
result = {
'userId' : tft.string_to_int(rowdict['visitorId'], vocab_filename='vocab_users'),
'itemId' : tft.string_to_int(rowdict['contentId'], vocab_filename='vocab_items'),
'rating' : 0.3 * (1 + (rowdict['session_duration'] - median)/median)
}
*# cap the rating at 1.0*
result['rating'] = tf.where(tf.less(result['rating'], tf.ones(tf.shape(result['rating']))),
result['rating'], tf.ones(tf.shape(result['rating'])))
**return** result
预处理 BigQuery 中由 visitorId、contentId 和 session_duration 组成的行的结果是一个名为 result 的 Python 字典,它包含三列:userId、itemId 和 rating。
tft.string_to_int 查看整个训练数据集,并创建一个映射来枚举访问者,并将该映射(“词汇表”)写入文件 vocab_users。我对 contentId 做了同样的事情,创建了 itemId。通过将 session_duration 调整到 0–1 之间来获得评级。我的缩放基本上去掉了极长会话持续时间的长尾,这可能代表了在阅读报纸文章时关闭笔记本电脑的人。需要注意的关键点是,我使用纯张量流函数(如 tf.less 和 tf.ones)来进行这种裁剪。这很重要,因为这种预处理函数必须在推理(预测)过程中作为张量流服务图的一部分来应用。
使用 Apache Beam 将预处理功能应用于训练数据集:
transformed_dataset, transform_fn = (
raw_dataset | beam_impl.AnalyzeAndTransformDataset(preprocess_tft))
步骤 3:写出 WALS 训练数据集
WALS 的训练集由两个文件组成,一个文件提供特定用户评定的所有项目(按行排列的交互矩阵),另一个文件提供评定了特定项目的所有用户(按列排列的交互矩阵)。显然,这两个文件包含相同的数据,但是有必要分割数据集,以便可以并行处理它们。我们也可以在进行枚举的同一个 Apache Beam 管道中这样做:
users_for_item = (transformed_data
| 'map_items' >> beam.Map(**lambda** x : (x['itemId'], x))
| 'group_items' >> beam.GroupByKey()
| 'totfr_items' >> beam.Map(**lambda** item_userlist : to_tfrecord(item_userlist, 'userId')))
然后,我们可以在云数据流上执行 Apache Beam 管道。这是一个完全托管的服务,所以我们不必到处设置基础设施和安装软件(完整代码见 GitHub 中的笔记本)。
此时,我们将拥有以下文件:
items_for_user-00000-of-00003
...
users_for_item-00000-of-00004
...transform_fn/transform_fn/saved_model.pb
transform_fn/transform_fn/assets/
transform_fn/transform_fn/assets/vocab_items
transform_fn/transform_fn/assets/vocab_users
- ` '‘项目的用户’'以 TFExample 格式包含每个项目的所有用户/评级。这里的项目和用户是整数(不是字符串),即 itemId 不是 contentId,userId 不是 visitorId。等级被缩放。
- saved_model.pb 包含我们在预处理过程中进行的所有张量流变换,因此它们也可以在预测过程中应用。
步骤 4:编写张量流代码
TensorFlow 中有一个基于估算器 API 的 WALS 实现。我们使用它的方式与使用任何其他估计器一样——参见 GitHub repo 中的函数 read_dataset()和 train_and_evaluate()。
更有趣的是我们如何使用训练好的估计量进行批量预测。对于特定用户,我们希望找到前 K 项。这可以在 TensorFlow 中通过以下方式实现:
**def** find_top_k(user, item_factors, k):
all_items = tf.matmul(tf.expand_dims(user, 0), tf.transpose(item_factors))
topk = tf.nn.top_k(all_items, k=k)
**return** tf.cast(topk.indices, dtype=tf.int64)
批量预测包括为每个用户调用上述函数,但是要确保当我们写出输出时,我们写出的是字符串 visitorId,而不是数字 userId(contentId/userId 也是如此):
**def** batch_predict(args):
**import** **numpy** **as** **np**
*# read vocabulary into Python list for quick index-ed lookup*
**def** create_lookup(filename):
**from** **tensorflow.python.lib.io** **import** file_io
dirname = os.path.join(args['input_path'], 'transform_fn/transform_fn/assets/')
**with** file_io.FileIO(os.path.join(dirname, filename), mode='r') **as** ifp:
**return** [x.rstrip() **for** x **in** ifp]
originalItemIds = create_lookup('vocab_items')
originalUserIds = create_lookup('vocab_users')
**with** tf.Session() **as** sess:
estimator = tf.contrib.factorization.WALSMatrixFactorization(
num_rows=args['nusers'], num_cols=args['nitems'],
embedding_dimension=args['n_embeds'],
model_dir=args['output_dir'])
*# but for in-vocab data, the row factors are already in the checkpoint*
user_factors = tf.convert_to_tensor(estimator.get_row_factors()[0]) *# (nusers, nembeds)*
*# in either case, we have to assume catalog doesn't change, so col_factors are read in*
item_factors = tf.convert_to_tensor(estimator.get_col_factors()[0])*# (nitems, nembeds)*
*# for each user, find the top K items*
topk = tf.squeeze(tf.map_fn(**lambda** user: find_top_k(user, item_factors, args['topk']),
user_factors, dtype=tf.int64))
**with** file_io.FileIO(os.path.join(args['output_dir'], 'batch_pred.txt'), mode='w') **as** f:
**for** userId, best_items_for_user **in** enumerate(topk.eval()):
f.write(originalUserIds[userId] + '**\t**') *# write userId \t item1,item2,item3...*
f.write(','.join(originalItemIds[itemId] **for** itemId **in** best_items_for_user) + '**\n**')
为了进行训练和批量预测,我们可以在 Cloud ML Engine 上运行 TensorFlow 模型,同样不需要任何基础设施:
gcloud ml-engine jobs submit training $JOBNAME \
--region=$REGION \
--module-name=trainer.task \
--package-path=${PWD}/wals_tft/trainer \
--job-dir=$OUTDIR \
--staging-bucket=gs://$BUCKET \
--scale-tier=BASIC_GPU \
--runtime-version=1.5 \
-- \
--output_dir=$OUTDIR \
--input_path=gs://${BUCKET}/wals/preproc_tft \
--num_epochs=10 --nitems=5668 --nusers=82802
像这样硬编码 nitems 和 nusers 有点难看。因此,我们可以回到我们的 Beam 管道,让它将 nitems 和 nusers 也写入文件,然后简单地执行“gsutil cat”来获得适当的值 GitHub 上的完整代码可以做到这一点。
以下是输出结果的一个示例:
6167894456739729438 298997422,262707977,263058146
3795498541234027150 296993188,97034003,298989783
实际上,每个 visitorId 有 3 个项目。
第 5 步:行和列因子
虽然进行产品推荐是 WALS 的主要用例,但另一个用例是寻找表示产品和用户的低维方法,例如,通过对项目因子和列因子进行聚类来进行产品或客户细分。因此,我们实现了一个服务函数来将这些返回给调用者(同样,完整代码请参见 GitHub):
**def** for_user_embeddings(originalUserId):
*# convert the userId that the end-user provided to integer*
originalUserIds = tf.contrib.lookup.index_table_from_file(
os.path.join(args['input_path'], 'transform_fn/transform_fn/assets/vocab_users'))
userId = originalUserIds.lookup(originalUserId)
*# all items for this user (for user_embeddings)*
items = tf.range(args['nitems'], dtype=tf.int64)
users = userId * tf.ones([args['nitems']], dtype=tf.int64)
ratings = 0.1 * tf.ones_like(users, dtype=tf.float32)
**return** items, users, ratings, tf.constant(True)
管弦乐编曲
注意,本文只是关于替换原解决方案中的机器学习训练和批量预测部分。原始解决方案还解释了如何进行编排和过滤。它们在哪里?
此时,我们现在有了一个 BigQuery 查询、一个 Beam/Dataflow 管道和一个潜在的 AppEngine 应用程序(见下文)。你如何一个接一个地定期运行它们?按照解决方案中的建议,使用 Apache Airflow 来执行此流程编排。
过滤
如果你向顾客推荐巧克力,那么推荐一种他们已经尝试过的巧克力是可以的,但是如果你向用户推荐报纸文章,那么避免推荐他们已经读过的文章是很重要的。
与原始解决方案不同,我的批量预测代码不会过滤掉用户已经阅读过的文章。如果重要的是推荐不包括已经阅读/购买的项目,那么有两种方法可以做到这一点。
更简单的方法是在找到 top_k 之前,将对应于已经读取的项目(这里是评级< 0.01 的项目)的条目清零:
**def** find_top_k(user, item_factors, read_items, k):
all_items = tf.matmul(tf.expand_dims(user, 0),
tf.transpose(item_factors))
all_items = tf.where(tf.less(read_items,
0.01*tf.ones(tf.shape(read_items))),
all_items,
tf.zeros(tf.shape(all_items)))
topk = tf.nn.top_k(all_items, k=k)
**return** tf.cast(topk.indices, dtype=tf.int64)
这样做的问题是滞后-您可能不会推荐用户昨天阅读的项目(因为它在您的训练数据集中),但批量预测代码确实可以实时访问阅读的文章流,因此您将推荐他们几分钟前阅读的文章。
如果这种滞后是您想要避免的问题,那么您应该使批量预测中的 k 更高(例如,即使您打算只推荐其中的 5 篇,您也会从推荐者那里获得 20 篇文章),然后在 AppEngine 中进行第二级过滤,如原始解决方案中所建议的那样。
摘要
您现在可以进行批量预测、在线预测和训练,而无需设置任何集群!另外,TensorFlow Transform 允许我们简化元数据的计算和项目/用户的映射,以适应 WALS 范式。
感谢我的同事 Lukman Ramsey 和 Yiliang Zhao 对本文提出的有益意见和建议。
Python:如何构建卷积网络分类器:耐克 vs 阿迪达斯鞋子
Nike Basketball Shoes
我为#100DaysOfMLCode 做的一个实验是建立一个图像分类器,用来区分耐克和阿迪达斯的篮球鞋。我的数据集中目前有 140 张图片。我正致力于增加这个数字,以提高分类器的准确性,并开始使用生成式对抗性网络来创建独特的篮球鞋设计。
通过 140 张图像,我能够使用 4 层卷积网络在耐克和阿迪达斯的鞋子之间实现 91%的准确性。我通过 sentdex 提供的教程学会了如何做到这一点,下面的链接是开始使用 tflearn API 构建图像识别模型的一个很好的资源。
从初级到高级的 Python 编程教程,涵盖了各种各样的主题。所有视频和文本教程都是…
pythonprogramming.net](https://pythonprogramming.net/convolutional-neural-network-kats-vs-dogs-machine-learning-tutorial/)
我将这段代码修改成适合我的自定义数据集。为了从 sentdex 的示例到我自己的示例提高性能,我增加了图像大小,并添加了更多的卷积层。另外,我使用 PIL 库代替 opencv 进行图像预处理。
所有代码和数据都可以在 github 上找到:
NIKE _ vs _ ADIDAS 耐克和阿迪达斯篮球鞋之间的图像识别分类器。数据集可在…
github.com](https://github.com/CShorten/NIKE_vs_ADIDAS)
随着将来添加更多数据,我将更新这个存储库。请在 twitter @ CShorten30 上关注我,以获得关于此数据集的更新。
在第一个代码块中,我们导入了除 tensorflow 和 tflearn 之外所需的所有依赖项。PIL 用于预处理和加载图像,numpy 用于将我们的图像数据存储在数组中并将其提供给我们的模型,os 用于与我们的文件系统接口,random 用于混洗数据,这样我们就不会有一个由 20 个连续的 nike 图像和 20 个连续的 adidas 图像组成的数据集,tqdm 用于在您加载数据时提供加载栏,matplotlib.pyplot 用于可视化我们的错误和图像。
TRAIN_DIR/TEST_DIR 变量用于存储数据的相对路径。在本例中,我调整了所有图像的大小,使其具有正方形的尺寸,如 sentdex 示例所示。IMG 大小为 120 会产生(120,120)大小的图像。在未来的实验中,我可能会尝试调整图像的大小,使其高度/宽度更好地代表原始数据,例如(80,140)。
LR = 1e-3 表示学习率。我还没有尝试用学习率参数进行实验,因为我相信 adam 优化算法会对这些简单的实验进行相应的调整。
这个函数将为我们的图像分配标签。从这个函数中有两点要注意。
I .数据集中的每个图像都被标记为类似“阿迪达斯 _1”或“耐克 3”的东西,因此 img . split(“”)可以将其分成[“阿迪达斯”、“1”],并且我们可以比较[0]元素,即耐克或阿迪达斯来分配类别标签。
二。一键编码,我第一次尝试的时候用[0]或[1]来编码类标签。然而,这将不如在诸如[1 0]或[0 1]的向量中编码类那样有效。一键编码也可以很容易地扩展为拥有多个类。例如,如果我们想包含锐步鞋,我们可以将锐步编码为[0 0 1],耐克编码为[1 0 0],阿迪达斯编码为[0 1 0]。
该函数用于从磁盘加载训练数据,并将其带入我们的程序。如果您正在跟随 sentdex 教程,我已经留下了大量的注释块来指示如何使用 PIL 而不是 opencv。这段代码的另一个有趣之处是 train_data 中结果张量的格式。我们看到我们有一个包含矩阵和向量的数组。这些张量的格式化是 numpy 库提供给我们的令人难以置信的特性之一。另外,我不知道您可以使用。np.save('train_data.npy ',train_data)函数中的 npy 扩展。
该函数用于加载没有类别标签的测试数据。这个函数的大部分和上面的一模一样。
接下来,我们运行 create_train_data()函数,您可以看到我们从 tqdm 库中获得的黑色加载栏。接下来,我想要绘制一个图像,以确保数据集被正确加载,并查看新调整的尺寸如何使图像看起来更好。正如我们在上面的图像中看到的,120 x 120 的分辨率产生了一个明显失真的图像,这个图像太高了。但是,你仍然可以清楚地看到阿迪达斯的三条条纹。我认为这个数据集中最重要的视觉特征是区分阿迪达斯条纹和耐克标志。
这是美国有线电视新闻网的代码,如果你想刷新自己的工作原理,我强烈推荐这个视频:
我仍在熟悉这些内核参数,如高度、宽度、步幅、填充等。所以我决定从 sentdex 导入这段代码,并将其视为一个黑盒示例。
尽管有上面的评论,我最终决定使用 90%的训练数据来训练模型,因为我真的没有那么多数据来开始。当我们使用 model.fit 函数来评估模型运行情况时,这段代码用于留出一些数据进行验证。
当我浏览 sentdex 的例子时,我不确定这段代码是否有必要,因为看起来我们已经在 create_train_set()函数中格式化了数据,尽管如此。
这是我们用来实际拟合模型的代码。我在加载 tensorboard 来可视化参数更新时仍然有些问题。然而,这个控制台输出仍然非常有趣,因为您可以试验您的模型参数,例如图像的大小、训练数据量、卷积层数、卷积核维数和历元数。根据这一评估,我们有大约 92–93%的准确率,我对此非常满意。
最后,我们使用这个代码块加载我们的测试数据,并了解模型的执行情况。正如我们在上面的例子中看到的,只有一只勒布朗鞋被误归类为阿迪达斯的。图像上方的概率列表显示了模型对每只鞋属于每个类别的置信度。例如,在第一张图片中,我们看到模型认为只有 0.2%的可能性是耐克鞋,而 99.7%的可能性是阿迪达斯鞋。
总之,当我第一次加载数据并运行模型时,我得到的结果非常糟糕。然而,一旦我开始调整卷积层数,调整图像大小,使用学习率值和历元数,我开始得到一个令人敬畏的结果。
如果您使用自己的数据集尝试 sentdex 的教程,如果一开始它似乎不起作用,请不要气馁。在放弃之前,尝试调整模型的超参数。此外,如果你想链接到本教程的视频演练,这里是:
感谢您的阅读,如果您自己做这件事有困难,请联系我们!
https://github.com/CShorten/NIKE_vs_ADIDAS
CShorten
Connor Shorten 是佛罗里达大西洋大学计算机科学专业的学生。对软件经济学、深度学习和软件工程感兴趣。
这是从哪里来的
这个故事发表在值得关注的杂志上,每天都有成千上万的人前来了解塑造我们喜爱的产品的人们的想法。
关注我们的出版物,查看更多由 Journal 团队报道的产品和设计故事。
如何建立数据科学管道
从 y 开始。专注于形式化预测问题,建立工作流程,并将其转化为生产,而不是优化您的预测模型。一旦前者做到了,后者就好办了。
如果你喜欢这个博客,看看这个关于同一话题的 播客 。
当一个运行良好的预测工作流最终投入生产时,它是如何工作的,这一点没有争议。数据源被转换成一组特征或指标 X ,描述预测将作用的每个实例(客户、设备、资产)。然后,预测器将 X 转化为可操作的信息 y_pred (客户端会流失吗?,设备会失效吗?,资产价格会涨吗?).在某些不稳定的市场中(例如,广告定位),预测然后通过完全自动化的流程货币化,在其他情况下,它被用作决策支持,并有一个人在循环中。
The data flow in a data science pipeline in production.
这听起来很简单,但有效且盈利良好的预测工作流的例子很少。公司在建造过程中苦苦挣扎。他们需要问的问题是:
- 谁构建这个工作流?我需要涵盖哪些角色和专业知识?
- 构建过程是怎样的?步骤是什么,每一步我需要什么专业知识?
- 这些步骤的成本和风险是什么,我如何控制它们?
围绕数据挑战的炒作给人一种错误的印象,即数据科学家和预测分数是这一过程的主要驱动力。即使是自 90 年代以来就存在的工业流程(例如 CRISP-DM 和 Dataiku )也通常将数据科学家放在中心位置,并在流程的最后进行部署。虽然他们没有错,但他们大多是不相关的。构建和优化预测器很容易。困难的是找到业务问题和它将改进的 KPI,搜寻数据并将其转换为可消化的实例,定义工作流的步骤,将其投入生产,并组织模型维护和定期更新。
公司通常从一个看似显而易见的事情开始:要求他们的 IT 部门建立大数据基础设施并构建一个数据湖。然后他们雇佣了第一批数据科学家。这些刚从学校毕业的专家和一些 Kaggle challenges,带着数据科学工具包,渴望将他们的手放在数据上。他们可以预测任何事情,他们做到了!他们与业务部门交谈,找到已经存在标签的合理预测目标,尝试十几个模型,对它们进行超测,并选择最佳的。他们建立 POC 并向业务部门发送报告。然后重新开始。
The usual way to construct a data science workflow.
大多数概念验证从未投入生产。业务部门不知道该拿他们怎么办。他们无法解读分数。这个预测目标似乎很合理,但是他们不知道如何用他们的 y_pred 赚钱。如果是这样的话,将 POC 投入生产似乎是不可逾越的。代码必须重写。实时数据必须被导入工作流程。需要满足操作约束。决策支持系统需要与用户的现有工作工具集成。模型维护、用户反馈、回滚需要到位。与数据科学家从事的安全 POC 相比,这些操作通常成本更高、风险更大,而且 POC 根本无法推动这一过程。
我下面描述的过程不会解决这些问题,但是它给你一个顺序,在这个顺序中你至少可以处理和控制成本和风险。首先,不惜任何代价找到一位首席数据官(或者更确切地说是一位数据价值架构师),他已经将一个预测性的工作流程投入生产。你的 CDO 不需要知道最新的深度学习架构,但她应该对公司的业务和数据科学流程都有广泛的了解。她应该发挥核心作用,推动这一进程。
尽早让它上船是很重要的。您需要您的数据湖,但更重要的是,您需要数据工程师从第一天起就考虑生产。但这并不是第一步。第一步是弄清楚你是否需要一个预测**。**
所以,从 y 开始,预测目标。
你的 CDO 应该与业务部门密切合作,找出他们想知道的东西。是什么推动了他们的决策?对 y 的更好预测将如何提高底线(成本下降,利润上升,生产率上升)?一旦你有了你的 y ,试着尽可能地将预测误差货币化。没有什么比良好的货币化指标更能让你的(未来)数据科学家高兴的了。他们会知道,提高 2%的分数会让你成为百万富翁;更重要的是 你将知道你可以在你的数据科学团队上花费多少。
一旦你巩固了 y 和度量标准,
去寻找数据,
在你的数据湖和其他地方找到指标,这些指标可能与你的预测目标相关。原则上,您仍然不需要数据科学家来做这件事,这个过程应该由 CDO 和业务部门来推动(毕竟,他们知道他们使用什么信息来做决策,这通常是一个很好的基线)。但是,如果有人知道公开的和可购买的数据,这可能会有所帮助。在这里,您绝对需要与 IT 部门交流,以便了解当这些指标需要实时收集时的运营成本。数据科学家需要这些信息。如果在每个客户端上存储一个新功能每天要花费 4TB,那么这个事实就决定了预测器的外观。
现在雇佣一名数据科学家,最好是能开发生产质量软件的。让他
构建实验设置和基线工作流
用简单的预测来检验它是否能投入生产。此时,您已经为数据科学家知道如何处理的全面实验数据科学循环做好了准备。你可能需要一个深度学习专家,但很可能你可以外包和众包你的第一个模型,例如,通过与我们一起做 RAMP 。
如果你喜欢你读的东西,就在中、 LinkedIn 、&、 Twitter 上关注我吧。
如何构建数据科学产品组合
A portfolio is one way to show people you are that data science unicorn.
如何在数据科学领域找到工作?了解足够多的统计学、机器学习、编程等知识以便能够找到工作是很困难的。我最近发现的一件事是,相当多的人****可能拥有找到工作所需的技能,但没有作品集。虽然简历很重要,但拥有一份公开证明你数据科学技能的作品集可以为你的工作前景创造奇迹。即使你有推荐人,向潜在雇主展示你能做什么而不是仅仅告诉他们你能做什么也是很重要的。这篇文章将包含各种数据科学专业人士(数据科学经理、数据科学家、社交媒体图标或其组合)和其他人讨论投资组合中应该包含什么以及如何引起注意的链接。就这样,让我们开始吧!
投资组合的重要性
除了通过制作文件夹来学习的好处,文件夹也很重要,因为它可以帮助你找到工作。出于本文的目的,让我们将投资组合定义为您的数据科学技能的公开证据。我是从数据营的首席数据科学家大卫·罗宾逊那里得到这个定义的,当时他在模式分析博客上接受了玛丽莎·杰玛的采访。当他被问到他在工业界的第一份工作时,他说,
对我来说,最有效的策略是做公共工作。在博士后期,我写了很多博客,做了很多开源开发,这些都有助于向公众证明我的数据科学技能。但我获得第一份行业工作的方式是公共工作中一个特别值得注意的例子。在我读博士期间,我是编程网站 Stack Overflow 的活跃回答者,该公司的一名工程师偶然发现了我的一个答案(一个解释 beta 分布背后的直觉的答案)。这个回答给他留下了深刻的印象,他(通过 Twitter)联系了我,几场面试后我被录用了。
你可能会认为这是一个奇怪的现象,但是你会发现你越活跃,发生这种事情的机会就越大。来自大卫的博客文章,
你做的公开工作越多,发生这种意外的可能性就越大:有人注意到你的工作并给你指出一个工作机会,或者有人在面试你时听说过你做过的工作。
人们经常忘记软件工程师和数据科学家也在谷歌上搜索他们的问题。如果这些人通过阅读你的公共作品解决了他们的问题,他们可能会对你有更好的看法,并向你伸出援手。
绕过经验要求的投资组合
即使是初级职位,大多数公司都希望员工至少有一点点实际生活经验。你可能见过像下面这样的迷因。
问题是,如果你需要经验来获得第一份工作,你如何获得经验?如果有答案,答案是项目**。项目也许是工作经验的最佳替代品,或者如威尔·斯坦顿所说,**
如果你没有任何数据科学家的经验,那么你绝对必须做独立项目。
事实上,当杰奎琳·诺利斯 面试候选人时,她想听的是对你最近面临的一个问题/项目的描述。
我想听听他们最近参与的一个项目。我问他们这个项目是如何开始的,他们如何确定它值得花时间和精力,他们的过程和他们的结果。我还问他们从这个项目中学到了什么。我从这个问题的答案中获益匪浅:如果他们能讲述一个故事,这个问题如何与更大的图景联系起来,以及他们如何解决做某事的困难。
如果你没有一些数据科学相关的工作经验,这里最好的选择是谈谈你曾经从事过的一个数据科学项目。
投资组合中包含的项目类型
数据科学是一个如此广阔的领域,以至于很难知道招聘经理希望看到什么样的项目。Quora 的数据科学经理 William Chen 在 Kaggle 的 CareerCon 2018 ( 视频)上分享了他对这个主题的想法。
我喜欢那些人们表现出他们对数据感兴趣的项目,而不仅仅是家庭作业。任何种类的期末项目,你探索一个有趣的数据集,发现有趣的结果…努力写下…我真的很喜欢看到真正好的写下人们发现有趣和新奇的事情…有一些可视化和分享他们的工作。
很多人认识到创建项目的价值,但很多人想知道的一个问题是,你从哪里获得有趣的数据集,你用它做什么?Airbnb 的数据科学家杰森·古德曼(Jason Goodman)有一个关于建立数据组合项目的帖子建议,他谈到了许多不同的项目想法,并对你应该使用什么样的数据集提出了很好的建议。他还附和了威廉关于使用有趣数据的观点。
我发现最好的项目组合与其说是做花哨的建模,不如说是处理有趣的数据。很多人用金融信息或 Twitter 数据做事情;这些可以工作,但是数据本身并不那么有趣,所以你要努力工作。
他在文章中的另一个观点是,网络抓取是获取有趣数据的一个很好的方式。如果你有兴趣学习如何用 Python 通过 webscraping 构建自己的数据集,你可以在这里看到我的帖子。如果你来自学术界,需要注意的是,你的论文可以算作一个项目(一个非常大的项目)。你可以在这里听到威廉陈谈论它。
Traffic Cruising Data Science for Social Good Project (https://github.com/uwescience/TrafficCruising-DSSG2017). This is an example of a project I personally find interesting, but there are so many interesting projects out there. Credit (Orysya Stus, Brett Bejcek, Michael Vlah, Anamol Pundle)
不包括在投资组合中的项目类型
我发现,在很多投资组合/简历建议中,有一件事非常普遍(在这篇博文中多次出现),那就是不要在你的投资组合中有共同的项目。
Jeremie Harris 在中提到了不被聘用为数据科学家的 4 种最快方法,
很难想出一个比在你突出的个人项目中突出你在琐碎的概念证明数据集上所做的工作更快的方式来让你的简历被扔进“肯定没有”的一堆。
当你有疑问时,这里有一些对你伤害大于帮助的项目:
*在泰坦尼克号数据集上的生存分类。
*在 MNIST 数据集上的手写数字分类。
*使用 iris 数据集进行花卉种类分类。
下图显示了泰坦尼克号(A)、MNIST 号(B)和虹膜号©数据集的部分分类示例。没有太多的方法可以使用这些数据集来区分你和其他申请人。确保列出新颖的项目。
Titanic (A), MNIST (B), and iris © classification
投资组合是迭代的
法维奥·瓦兹奎有一篇的优秀文章,他在文章中讲述了自己是如何获得数据科学家这份工作的。当然,他的建议之一是要有一个投资组合。
T4 有一个投资组合。如果你正在寻找一份严肃的数据科学的有偿工作,做一些有真实数据的项目。如果你能把它们发布在 GitHub 上。除了 Kaggle 比赛,找一些你喜欢的事情或者你想解决的问题,用你的知识去做。
另一个有趣的发现是,在求职过程中,你必须不断进步。
我申请了将近 125 份工作(真的,也许你申请了更多),我只收到了 25-30 份回复。有些人只是说:谢谢,但是不用了。我接受了将近 15 次采访。我从每一个人身上学到了东西。变好了。我不得不面对许多拒绝。一些我实际上没准备好的事情。但我喜欢接受采访的过程(说实话,并不是所有人)。我学习了很多,每天编程,看了很多文章和帖子。他们帮了大忙。
随着你了解更多,提高自己,你的作品集也应该更新。这一观点在许多其他建议文章中得到了回应。正如杰森·古德曼所说,
当你公开发布的时候,这个项目还没有完成。发布后,不要害怕继续添加或编辑您的项目!
这个建议在你找工作的时候尤其正确。有很多像 Airbnb 的数据科学家 Kelly Peng 这样的成功人士的故事,他们真的坚持不懈,不断工作和改进。在她的一篇博客文章中,她回顾了她申请和面试了多少个职位。
应用:475
电话采访:50 次
完成数据科学带回家的挑战:9
现场面试:8 次
优惠:2
花费的时间:6 个月
她明明申请了很多工作,还一直在坚持。在她的文章中,她甚至提到你需要从面试经历中不断学习。
记下你被问到的所有面试问题,尤其是那些你没有回答的问题。你可以再次失败,但不要在同一个地方失败。你应该一直学习和提高。
*If you aren’t getting interviews yet, apply for more jobs and keep on finding ways to learn and improve.
将作品集整合到一页简历中
有人发现你的作品集的方法之一通常是通过你的简历,所以这是值得一提的。数据科学简历是关注你的技术技能的地方。你的简历是一个简洁地展示你的资格和适合那个特定角色的机会。招聘人员和招聘经理浏览简历的速度非常快,你只有很短的时间来留下印象。改进你的简历可以增加你获得面试的机会。你必须确保简历中的每一行和每一部分都有价值。
Quora 的数据科学经理 William Chen(T1)给了 9 个让你的数据科学简历变得更好的技巧。注意在下面他的要点的简要总结中,项目和投资组合是要点 6、7、8,甚至可以说是要点 9 。
- 长度:保持简单,最多一页。这给你快速浏览带来最大的影响。推荐一份简单的单栏简历,因为它很容易浏览。
Sample Resume used in Video (latex: https://github.com/sb2nov/resume)
2。目标:不包括一个。他们不会帮你把自己和其他人区分开来。他们从更重要的东西(技能、项目、经验等)那里拿走了空间。求职信是非常有选择性的,除非你真的个性化它。
Objectives don’t help you distinguish yourself from other people. A lot of them say very similar things.
3。课程:列出适用于职位描述的相关课程。
Examples of relevant coursework displayed on various resumes.
4。技能:不要给你的技能打分。如果你想对自己的技能进行评分,使用诸如熟练或熟悉之类的词语。你甚至可以完全排除评估。
Don’t give numerical ratings for your skills
5。技能:一定要列出工作描述中提到的技术技能。你列出技能的顺序可以暗示你最擅长什么。
Examples of how you can list your skills on your resume
6。项目:不要列出常见的项目或作业。它们对区分你和其他申请人没什么帮助。列出新颖的项目。
7。项目 : 显示结果并包含链接。如果你参加了 Kaggle 竞赛,请填写百分比排名,因为这有助于阅读你简历的人了解你在竞赛中的位置。在项目部分,总会有链接到评论和论文的空间,因为它们可以让招聘经理或招聘人员更深入地挖掘(偏向于现实世界中的棘手问题,在那里你可以学到新东西)。
Good example project sections
请注意,在上面的一个项目部分,一个人有一个额外的博客链接,可以让招聘人员或招聘经理了解更多信息。这是从你的简历中链接到你的投资组合的不同部分的一种方法。
****8。投资组合:填充我们您的在线状态。最基本的是 LinkedIn 个人资料。这有点像一份扩展的简历。Github 和 Kaggle 简介可以帮助展示你的作品。填写每个个人资料,并包括其他网站的链接。填写 GitHub 存储库的描述。包括你的知识分享简介/博客(medium,quora)的链接。数据科学特别是关于知识共享和交流数据对其他人的意义。你不需要做所有的事情,但是选择一些去做(稍后会有更多的介绍)。
9。经验:让你的经验适合这份工作。经验是你简历的核心,但是如果你没有工作经验你会怎么做?把你的简历集中在独立的项目上,比如顶点项目、独立研究、论文工作或 Kaggle 竞赛。如果你没有工作经验可以写进简历,这些都是工作经验的替代品。避免把不相关的经历写进简历。
如果你想知道听到数据科学经理审阅投资组合和简历,这里有 Kaggle 的 CareerCon 2018 的链接(视频,简历审阅)。
社交媒体的重要性
这与投资组合部分的重要性非常相似,只是分成了子部分。拥有一个 Github 页面、一个 Kaggle 简介、一个 Stack Overflow 等可以为你的简历提供支持。对招聘经理来说,在网上填写个人资料是一个好信号。
正如大卫·罗宾逊所说,
一般来说,当我评估一个候选人时,看到他们公开分享的东西,我会很兴奋,即使这些东西还没有润色或完成。分享任何东西总比什么都不分享好。
数据科学家之所以喜欢看公共作品,是因为正如 威尔·斯坦顿 所说,
数据科学家使用这些工具来分享他们自己的工作,并找到问题的答案。如果你使用这些工具,那么你就是在向数据科学家发出信号,表明你是他们中的一员,即使你从未做过数据科学家。
很多数据科学都是关于交流和呈现数据的,所以拥有这些在线资料是很好的。除了这些平台有助于提供宝贵的经验之外,它们还能帮助你获得关注,让人们看到你的简历。人们可以通过各种渠道在网上找到你的简历(LinkedIn、GitHub、Twitter、Kaggle、Medium、Stack Overflow、Tableau Public、Quora、Youtube 等)。你甚至会发现不同类型的社交媒体可以互相交流。
Github
Github profiles of Jennifer Bryan and Yuan (Terry) Tang
Github 档案是一个强有力的信号,表明你是一个有能力的数据科学家。在简历的项目部分,人们通常会留下 GitHub 的链接,那里存储着他们项目的代码。你也可以在那里写文章和减价。GitHub 让人们看到你构建了什么,以及你是如何构建的。在一些公司,招聘经理会看应聘者的 GitHub。这是向雇主展示你不是假阳性的另一种方式。如果你花时间建立你的 GitHub 档案,你会比其他人得到更好的评价。
值得一提的是,你需要有一些 README.md 的项目描述,因为很多数据科学是关于交流结果的**。确保 README.md 文件清楚地描述了您的项目是什么、它做什么以及如何运行您的代码。**
卡格尔
参加 Kaggle 竞赛、创建内核以及参与讨论都是展示数据科学家能力的方式。需要强调的是,Kaggle 并不像 Colleen Farrelly 在 quora 问题中提到的那样是一个工业项目。Kaggle 竞赛负责提出一项任务,为您获取数据,并将其整理成某种可用的形式。它的作用是让你练习分析数据和提出模型。注意, Kaggle 特级大师继续参加 Kaggle 比赛是有充分理由的。热沙玛·谢赫有一篇关于 Kaggle 与否的文章,她在文中谈到了 Kaggle 比赛的价值。从她的岗位上,
没错,参加一场 Kaggle 比赛并不能证明一个人有资格成为数据科学家。上一堂课或参加一个会议辅导或分析一个数据集或阅读一本数据科学方面的书也是如此。参加竞赛可以增加你的经验,扩大你的投资组合。它是对您其他项目的补充,而不是对您的数据科学技能的唯一试金石。
我完全同意热沙玛对此的看法。特别是,参加某方面的课程并不能让你成为某方面的专家,也不能给你一份工作。我实际上已经为数据可视化制作了一门名为 Python 的课程,并且我深入研究了关于 Pandas、Matplotlib 和 Seaborn 的内容。它不会马上给你一份工作,也不会让你马上成为 Matplotlib 或 Seaborn 方面的专家,但它会让你的知识更丰富,教会你图书馆如何工作,并帮助你建立自己的作品集。你做的每一件事都能让你更有竞争力。
领英
与受长度限制的简历不同,LinkedIn 简介允许你更深入地描述你的项目和工作经历。Udacity 有一个关于在 LinkedIn 上建立良好个人资料的指南。LinkedIn 的一个重要部分是他们的搜索工具,为了让你出现,你必须在你的个人资料中有 相关关键词 。招聘人员经常在 LinkedIn 上搜索人员。LinkedIn 可以让你看到哪些公司搜索过你,哪些人浏览过你的个人资料。
Checking where your searchers work and how many times people have viewed your profile.
除了公司找到你并向你发送信息,LinkedIn 还有许多功能,如请求推荐。 Jason Goodman 在他的文章中对申请数据科学工作的建议使用 LinkedIn 来间接请求推荐。
我从来没有,从来没有,从来没有在没有工作人员介绍的情况下申请过任何公司…一旦我对一家公司感兴趣,我会使用 LinkedIn 在该公司找到第一或第二级关系。我会写信给那个联系人,询问他们在公司的经历,如果可能的话,他们是否能帮我联系到数据科学团队的某个人。只要有可能,我就亲自开会(喝咖啡或吃午饭),而不是打电话。顺便说一句,特雷·考西最近写了一篇很棒的文章,讲述了如何要求这类会面。我从来不会直接找工作,但他们通常会要我的简历,并提出让我做内部推荐人,或者让我联系招聘经理。如果他们觉得这样做不舒服…我只是感谢他们的时间,然后继续前进。
请注意,他没有马上要求推荐。虽然申请公司时常见的工作建议是获得推荐,但非常重要的是要注意,你仍然需要一份投资组合、经验或某种证明你可以做一份工作。Jason 甚至在他写的和其他文章中提到了投资组合的重要性。
阿曼·达尔米亚通过在多家人工智能公司和初创公司的面试,也学到了类似的东西。
人际关系网是而不是给人们发信息让他们给你推荐。当我刚开始的时候,我经常犯这样的错误,直到我偶然发现一篇文章,它讲述了通过主动提供帮助来与人建立真正联系的重要性。**
他的另一个观点是,LinkedIn 非常适合让你的内容/投资组合公开。
人际交往的另一个重要步骤是让你的内容传播出去。例如,如果你擅长某件事,写博客并在脸书和 LinkedIn 上分享。这不仅能帮助别人,也能帮助你。
媒体和/或其他博客平台
拥有某种形式的博客是非常有益的。很多数据科学都是关于交流和呈现数据的。写博客是实践这一点并展示你能做到这一点的一种方式。撰写关于项目或数据科学主题的文章可以让您与社区分享,并鼓励您写出您的工作流程和想法。这是面试时很有用的技巧。
正如大卫·罗宾逊所说,
博客是你练习相关技能的机会。
-
数据清理 :使用各种数据集的一个好处是,你学会了“随取随用”,无论是以期刊文章 的 补充文件的形式,还是以电影剧本 的
-
统计学 :处理不熟悉的数据可以让你将统计方法付诸实践,写一些交流和教授概念的帖子有助于建立你自己的理解
-
沟通 :你获得了写作的经验,也获得了构建数据驱动论点的练习。这可能是博客发展的最相关的技能,因为很难在其他地方实践,而且这是任何数据科学职业的基本部分
通过写博客,你可以练习与他人交流发现。这也是宣传自己的另一种形式。关于使用 Scrapy 构建自己的数据集的博客,讽刺的是使用 Conda 的 Python 环境管理教会了我很多,也让我获得了很多平时不会得到的机会。最近,我的 boxplot 博客给我带来了为数据可视化课程创建自己的 Python 的机会。我发现的一个主要好处是,在人们批评我的项目并提出改进建议的整个过程中(尽管博客的评论部分),面试官不会第一个指出这些相同的缺陷。更明显的好处是,通过写博客,你倾向于阅读更多的数据科学/机器学习博客帖子,从而学到更多。
至于在什么平台上写博客,我推荐用 Medium。 Manali Shinde 在她的博客文章如何从零开始构建数据科学作品集中有一个关于她为什么选择 Medium 作为博客的非常好的观点。
我想到在 WordPress 或 Squarespace 等平台上创建自己的网站。虽然这些平台可以托管你自己的投资组合,但我希望有一个地方可以让我获得一些知名度,并有一个很好的标签系统来吸引更多的观众。幸运的是,正如我们所知,Medium 有这些选项(而且也是免费的)。
如果你不知道该写些什么,我建议你看看大卫·罗宾逊的建议。
推特
活跃在 Twitter 上是一种很好的方式来识别你所在领域的人,并与他们互动。你也可以在 Twitter 上推广你的博客,这样你的作品集就能更加引人注目。在 twitter 上有很多与人互动的机会。其中一个人在她著名的博客文章“中说: Reshama Shaikh 我如何获得我的第一份数据科学工作?“是,
大卫·罗宾逊慷慨地提出转发你的第一篇数据科学帖子。拥有 2 万多名粉丝,这是一个无法拒绝的提议。
除了自我推销,Twitter 还可以用于其他方面。数据科学 Renee 有一个帖子“如何使用 Twitter 学习数据科学(或任何东西)”,对使用 Twitter 学习技能颇有见地。她文章中的另一个要点是,她的 Twitter 对她的社交网络和获得机会有多大帮助。
我被播客和博客邀请接受采访(其中一些应该很快就会出现),提供合同工作,并免费参加一个会议,可惜我不能去,但很高兴被考虑参加。业内“有名”的人现在都以某种方式来找我合作。
Tableau 公共
并非每个数据科学工作都使用 Tableau 或其他 BI 工具。但是,如果你申请的是使用这些工具的工作,需要注意的是,有一些网站可以让你把仪表盘放在那里供公众使用。例如,如果你说你正在学习或了解 Tableau,在 Tableau Public 上放几个仪表盘。虽然许多公司可能不介意你在工作中学习 Tableau,但公开证明你的 Tableau 技能会有所帮助。如果你想看 Tableau 公开简介的好例子,请参见Orysya Stus’和 Brit Cava 的简介。
结论
Remember a portfolio is a process. Keep on improving.
拥有一份出色的简历一直是求职者向潜在雇主传递技能的主要工具。如今,有不止一种方法可以展示你的技能并得到一份工作。公开证据组合是获得你通常不会得到的机会的一种方式。强调投资组合是一个迭代的过程是很重要的。随着你知识的增长,你的投资组合应该随着时间的推移而更新。永远不要停止学习或成长。甚至这篇博文也会随着反馈和知识的增长而更新。如果你想要面试建议/指南/课程,现在就来看看 Brandon Rohrer 关于如何在数据科学面试中生存的建议、Sadat、面试指南,或者我的关于获得数据科学工作课程的 15 条建议。如果你想要一些通用的数据科学职业建议,我在这里写了一篇关于它的文章。如果你对教程有任何问题或想法,欢迎在下面的评论中或通过 Twitter 联系。
如何使用机器学习构建动态花园
PIcture by jjekafluf
让我们建造一个虚拟花园吧!
这是未来,我们已经在构建大脑接口方面取得了重大进展。我们用它来扩大我们的视野,有时,改变我们对世界的看法。
一个有事业心的园丁决定打造终极花园体验。一片空白的土地。一块空白的画布,等待着被园林设计师的眼光填满。花园的元素可以由花园的设计师来控制。它是动态的,对用户来说是个性化的。设计师如何利用机器学习来建造这样的花园?
让我们训练一个模型,它将挑选一个花园配置显示给用户。这个模型为一个目标而优化。一般的方法是:
1.选择一个目标。让我们选择“回访的高概率”也就是留存率。
2.对影响目标的因素形成一个假设。这些成为 ML 模型中的特征。例如:花园的配置,参观时花园中的总人数,您是否独自一人,您的年龄,天气,您是否带着孩子参观等。就本文的目的而言,让我们假设我们拥有任何我们想象出来的数据,比如一个人当前的情绪。
3.由于存在大量的配置,可能无法从单个配置中高精度地预测目标。为了让用户满意,找到配置的中间表示。因为我们可以了解用户的心情,所以当用户在花园里散步时,我们就可以测量快乐程度。我们建立了一个“幸福旅程”,并以某种方式量化它。然后,我们将这一幸福之旅作为模型中的一个特征来预测目标
4.当一个用户进入花园,你就知道为了目标优化需要给用户的幸福旅程。
5.使用类似近似动态规划的方法来决定使用什么样的花园配置来实现幸福之旅
使用这样的配置可以完整地描述一个花园。
一个神气的 MBA 学生出现了。
“有没有想过加一家奶茶店?
你会赚更多的钱
“好主意。让我开始试验那个"
我们现在有了一个新目标——最大化奶茶店的收入。我们重复这一过程,现在有两个模型——一个是为了留住客户而优化,另一个是为了最大化奶茶店的收入。
试验不同的模型
一起运行这些模型可能会导致配置冲突。例如,如果天气很热,茶叶店的收入模式可能会导致一种配置,即到处摆放香草植物,让你对海绵蛋糕产生饥饿感。保留模式可能会在花园里留下一块空地来晒太阳(这在伦敦很常见),同时被芒果树包围。一个人如何分清轻重缓急?这里有三种可能的方法。
按照优先级顺序堆叠排名目标
可以使用目标的基本排序。如果有冲突,选择保留而不是货币化。但是现实生活更复杂。在免费游戏中,留存率和盈利率通常成反比。如果你在游戏中引入更多的货币化触发和货币紧缩,你可能会增加货币化,但你会减少保留。我经常与其他项目经理进行激烈的辩论——“ARPDAU(每日活跃用户平均收入)的增加是因为人们离开游戏,还是因为更多的人在游戏中消费。到底是哪个,哪个更好?”
一切事物的度量
平衡相互冲突的目标的一种方法是找到一个总括性的度量标准,它包含了您所关心的所有其他度量标准。这可能是收入或终身价值(LTV)。一组用户的 LTV 方程是(%仍在游戏中的用户)x(每个用户在游戏中花费的钱),随时间积分,即留存 x 货币化。这在理论上听起来是一个很棒的主意——让我们在游戏中尽一切努力最大化 LTV,我们就完成了!
如果我们以 LTV 为目标训练一个模型,我们依靠这个模型来学习留存和货币化之间的关系。这是一种危险的情况,因为很难做出产品体验的改变,也很难在更细粒度的度量上测试它们的有效性。例如:与花园中的桉树接触。
这种模式将强化过去一直行之有效的留存和货币化之间的权衡,但这种权衡可能不符合产品的战略重点。“我们需要达到本月的收入目标,尽一切努力”或“让我们专注于让我们的早期用户漏斗正确”。
型号重量
这是堆栈排序方法的一个细微版本。假设我们有一个留存模型(模型 A)和一个货币化模型(模型 B),这些模型预测的概率在 0 到 1 之间。如果我们将留存率排在货币化之前,我们给模型 A 的权重为 1,给模型 B 的权重为 0。这个产品决策可以封装成 1 x 模型 A + 0 x 模型 b。
模型权重可以概括为:
产品决策
得出正确的重量是一个主观的产品决策。“对于第一次来花园的用户,我们不要试图在他们第一次访问时让他们进入茶叶店”或“每次用户访问时增加 5%的货币化模型权重,这样我们每次访问都会增加货币化的可能性”。
最棒的是,没人知道什么会奏效。“工作”的定义到底是什么——在一个目标相互竞争的机器学习环境中,你如何定义成功?事先不可能知道,因为用户的体验与产品决策只差一步。我们为模型设定权重,这些权重的组合会产生特定类型的用户行为。这个用户行为充当模型的训练数据。这就形成了一个非常紧密的学习循环。
这种学习循环的美妙之处在于,现在可以通过提供个性化的用户体验来进行实验。
机器学习模型中的实验通常与尝试不同的算法、调整参数、改变训练特征等相关联,以优化目标。当使用机器学习来改变核心产品体验时,学习循环允许产品经理和数据科学家对用户体验本身进行实验。这是非常有益的,因为产品一直在变化——新的功能被构建,新的内容被发布,不同类型的用户出现来使用你的产品。
“产品变了,车型需要跟上”
持续实验的文化对于使用 ML 进行产品体验至关重要。可以通过尝试不同的模型权重来试验产品决策。新的模型是用不同的特性组合构建的,新的目标是添加的,产品其他方面的变化将改变模型的行为。实验是 ML 产品管理的关键。
接下来:E 探索难度空间 (链接下周五)