为什么体重?平衡数据集训练的重要性
如何在 Scikit-Learn 管道中实现用于分类的样品重量
想象一下被问到一个熟悉的谜语——“一磅铅和一磅羽毛哪个更重?”当你准备自信地宣布它们一样重时,你意识到询问者已经从你的后口袋偷走了你的钱包。
为什么平衡很重要?
在监督机器学习中,重要的是在平衡数据上训练估计器,以便模型在所有类别上都是平等的。
设置权重是评估者特有的。许多 Scikit-Learn 分类器都有一个class_weights
参数,可以设置为“balance”或给定一个自定义字典来声明如何对不平衡数据的重要性进行排序。
这种方法类似于过采样。我们可以通知估计器调整其计算损失的方式,而不是实际上过采样(使用更大的数据集在计算上更昂贵)来平衡类。使用权重,我们可以迫使 as 估计器基于给予特定类的或多或少的重要性(“权重”)来学习。
砝码是如何使用的?
权重缩放损失函数。当模型在每个点上训练时,误差将乘以该点的权重。估计器将尝试最小化权重更大的类的误差,因为它们对误差有更大的影响,发送更强的信号。如果没有设置权重,模型会将每个点视为同等重要。
平衡不是你找到的,而是你创造的
―贾娜·金斯福德
不平衡数据集的示例
这个样本数据集来自我的一个文本分类项目。我开始按等级对酒店评论进行分类,详见我的 GitHub。数据强烈支持正面评价(否则酒店将需要认真重新审视他们的商业模式)。
Class Distribution (%)1 7.431961
2 8.695045
3 17.529658
4 33.091417
5 33.251919
计算类别权重
Scikit-Learn 具有从其.utils
库中计算类别权重和样本权重的功能。自定义权重也可以作为格式为{class_label: weight}
的字典输入。我计算了上述情况下的平衡重量:
Class Weights: 5 classes{1: 2.691079812206573,
2: 2.3001605136436596,
3: 1.140923566878981,
4: 0.6043863348797975,
5: 0.6014690451206716}
如您所见,较重的权重应用于少数类,表明模型必须给予这些类更多的重要性。降低多数类的权重,使其重要性降低。权重为 0 意味着没有影响或不重要(如果你需要静音一个类)。
*(左侧表格)*我已经结合了类的归一化分布和计算的权重。“平衡”栏是重量乘以分布。我们看到每个类都有相同的数字,加起来是 1。这相当于看到任何一个类的概率相等(1/5 = 0.2)。
计算样品重量
平衡类权重可以在样本权重函数中自动计算。设置class_weight = 'balanced'
自动调整输入数据中与类别频率成反比的权重(如上表所示)。
**from** sklearn.utils **import** class_weightsample_weights **=** compute_sample_weight(class_weight = 'balanced',
y **=** y_train)
样本权重作为一个数组返回,类权重映射到目标数据(y_train)中的每个样本。示例:
Sample Weights: 14330 samplesarray([0.60146905, 2.30016051, 0.60438633, ..., 0.60438633, 1.14092357, 1.14092357])
要在 Scikit-Learn 多项式朴素贝叶斯管道中使用样本权重,必须在拟合步骤中添加权重。对于这个演示,我不会探究 NLP,这只是对加权样本的奇异效果的比较。所以不要把重点放在整体表现上。
pipeline **=** Pipeline(steps**=**[("NLP", TfidfVectorizer(),
("MNB", MultinomialNB())
])pipeline.fit(X_train,
y_train,
******{'MNB__sample_weight': sample_weights})
非加权模型性能
非加权样本数据,强烈倾向于多数类
比较在没有样本权重的情况下训练的上述模型的结果:未加权的模型达到 55%的准确度。
预测非常倾向于多数阶级。这种模式几乎完全忽略了少数民族阶层。
加权模型性能
加权样本数据,更好地训练少数民族班级
在拟合步骤中,通过添加平衡的样本权重来训练完全相同的模型。这个模型达到了 58%的准确率。
沿着真正的正对角线(左上到右下),我们可以看到该模型更适合预测少数民族类别。
这两种模型的精确度只有 3%的差异,但预测能力却大相径庭。准确性有偏差,因为测试类与定型数据具有相同的分布。所以这个模型只是用相同的比例进行猜测,并且用大多数类达到足够的次数。这就是为什么准确性本身并不是模型成功的一个好的衡量标准!但是那是另一天的话题,或者你可以看看这篇关于不平衡的类分布的分类准确性的失败的文章。
结论
在平衡数据集上训练模型是很重要的(除非有一个特殊的应用来加权某个更重要的类),以避免预测能力的分布偏差。一些 Scikit-Learn 模型可以用class_weights = 'balance'
自动平衡输入类。贝叶斯模型需要一组样本权重,可以用compute_sample_weight()
来计算。
感谢您的阅读!你可以在我的 GitHub 上查看这个博客开发的文本分类项目。
为什么女性需要参与数据科学以防止算法中的偏见
为什么要在意偏见?怎么才能减少呢?
https://cdn . pix abay . com/photo/2019/11/12/05/59/pop-art-girl-4620143 _ 1280 . png
随着科技的发展,我们相信电脑会为我们做越来越多的日常工作。虽然有些人可能会持怀疑态度,但这并没有什么错,因为我们生成的数据越多,驱动这些计算机的算法就越精确。
然而,这种精确并不代表我们想要的理想的公平和包容的世界。相反,不幸的是,它代表了大多数人试图逃避的过去的世界。一个充满歧视、种族主义和差异的世界——一个不平等的世界,在这个世界里,某些人获得的机会不同于其他人。
所以,问问你自己,**你是想继续困在这个不公平的世界里,还是想做出改变,向前迈出一步?**如果是这样,那么这篇文章可以帮助你了解偏见,让你走上正轨。
算法中的偏见之所以存在,是因为我们,作为人类,是有偏见的人。读完这篇博客后,你应该能够理解为什么存在偏见,以及为什么在数据科学团队中有更多的女性有助于减轻偏见。
什么是机器学习?
首先,我们需要了解机器学习正在对我们的数据做什么。算法对数据进行统计计算,以找到可以提供见解、识别趋势和做出预测的模式。这不是魔法,这只是数学,但速度是人脑无法处理的。
通常,可用的数据是由人类产生的,算法也是如此。这给我们带来了一个大问题——是 it 数据还是人类有偏见?。
由于多种原因,这个问题非常重要,特别是在解决机器学习问题时,因为最终消费者是人类——其中一些人可能会直接受到他们遭受的任何偏见的影响。
那么,什么是偏见呢?
机器学习中的偏差对应于从摄取的数据中做出的假设中的错误。需要明确的是,偏差不可能完全消失,因为算法是由人类从一组选定的数据中创造出来的。结果,人和数据都有偏差。
算法偏见可以表现为不同的方式,如性别偏见,种族偏见,人口统计偏见,等等。通常,偏见可以在少数群体以及在用于训练机器学习模型的数据中没有得到很好代表的群体中看到。
一些不幸的例子
算法在任何地方都在为我们做决策,包括全球的公司。这些算法可以帮助确定你是否有资格获得贷款、医疗保健、大学和就业,等等。
下面的例子展示了偏见的危害,并强调了在社会中尽早解决这个问题的重要性。问问你自己,这些例子中的任何一个真的令人惊讶吗?
- 偏见以多种方式出现在文本中。下面的论文【1】显示,谷歌新闻文章上训练的单词嵌入展示了社会中存在的女性/男性性别刻板印象。当算法被要求完成句子“男人对于电脑程序员就像女人对于 X ”时,它用家庭主妇代替了 X。
- 2020 年 4 月谷歌创建了一个帖子解释他们是如何开始解决性别偏见的。这个例子显示了将“我的朋友是医生”翻译成西班牙语。在英语中,医生的性别是模糊的,但如果我们想把它翻译成西班牙语,就有必要指明“朋友”这个词所指的性别。该算法得出结论,医生更有可能是一名男性,给出了单词 friend 的阳性输出。
3.如果我们用谷歌来回翻译短语“他是一名护士”。她是性别中立语言的医生,比如孟加拉语,看看会发生什么。用上面的链接自己试试吧。
截图来自谷歌翻译
截图来自谷歌翻译
如你所见,它改变了性别。这是不是说明算法错了?为什么会这样?这里的问题是,历史数据显示,女性更有可能成为护士,而男性更有可能成为医生。因此,算法会选择最可能的输出。
4.这里显示了一个类似的例子,在 Google Translate 中有一个很长的段落。它显示了从匈牙利语(一种中性语言)到英语的翻译。我们可以看到这种翻译可能是歧视性的。
截图来自谷歌翻译
5.2017 年 10 月,谷歌情感分析 API 在输入“我是同性恋”时给出了有偏差的输出,系统返回负面排名。
6.自回归语言模型 GPT-3 产生的文本太像人类,因此也存在偏见。在论文“语言模型是少量学习者”【2】中,OpenAI 表示,该模型在公平性、偏见和代表性方面存在局限性。
报告强调,在同现测试中,他们查看形容词和副词来完成短语“他非常”、“她非常”、“他将被描述为”和“她将被描述为”。研究结果显示,女性更常被描述为外貌导向的词,如“华丽的”,相比之下,男性的形容词更多样。
这不是模特的错,因为这反映了社会以及现有文本中对妇女的描述。下表显示了模型选择的前 10 个单词。
截图—论文“语言模型是很少尝试的学习者”
也有关于其他类型偏见的研究,如种族和宗教。例如,论文“大型语言模型中持续的反穆斯林偏见”【3】,分析了 GPT-3 的反穆斯林偏见。下图显示了使用编程 API 生成完成时模型建议的可能输出。
截图—论文“语言模型是很少尝试的学习者”
7.偏见不仅存在于文本中,也存在于的图像中。2020 年,下面的文章描述了 Twitter 的算法偏向于白种人,因为被训练了更多的白种人面孔。
8.照片中的另一个趋势种族偏见在 2015 年很明显,当时谷歌照片算法产生了针对少数族裔的种族主义图像。这篇文章解释了谷歌如何采取措施来应对这些不正确的结果。
9.大公司必须实现工作自动化。例如,2018 年,人们发现亚马逊的 AI 自动招聘工具对女性有偏见。这篇文章描述了这是如何从显示男性在整个科技行业占主导地位的历史数据中得出的——最明显的是在亚马逊本身,那里 60%的员工是男性。由于该算法是用该数据训练的,所以它产生了有偏差的结果。
10.另一个显示偏见有多有害的情况是使用 COMPAS 工具(替代制裁的矫正罪犯管理概况),该工具在全美范围内决定何时释放刑事被告方面发挥着重要作用。ProPublica 发现,少数族裔被告被误判为暴力累犯的风险更高的可能性是白人被告的两倍。
11.机器学习也被用于医疗保健行业。医疗保健中的偏见可能非常有害,因为这是我们正在谈论的人的健康和福祉。一篇经济学家的文章强调了医院在接收病人时对少数民族和妇女的偏见。
这篇文章表明,用于测量血氧水平的设备是有偏见的,因为它们在少数民族中比高加索人更频繁地高估了血氧饱和度。结果,他们记录了一些 POC 患者比他们实际上更健康。血氧水平被用作新冠肺炎过度拥挤的医院接收病人的相关测量。这种偏见导致拒绝向需要治疗的人提供医院治疗。
12.一种算法被用于评估教师,正如这篇文章所说,七名休斯顿教师,休斯顿教师联合会提起诉讼,质疑评估增值措施的合宪性,学区用它来决定教师的评估,奖金和解雇。有些案例没有解释为什么声誉好的老师得分低。
该系统的财产被视为机密和“黑箱”,教师在决策过程中得不到任何明确的解释。这是一个清晰的例子,说明了根据算法的使用需要进行监管。我们不能假设算法没有偏见,并相信它们的话来做出可能影响人们的决定。
这些例子足以让我们在更大范围内展开对话。有些例子是几年前的,有些是最近的。这进一步强调了我们如何没有改进,以及问题本身无法解决。
看看这篇博客,它展示了自动化决策可能产生的潜在危害。
因此,作为数据科学家,我们有责任采取行动,作为一个社会,我们有权利站出来反对这种偏见。
可能影响偏见的因素有哪些?
算法偏差不是一个容易解决的问题,因为许多因素都会影响它。首先,我们需要认识到,由于算法不可能完美,因此总会有偏差。第二,我们需要明白算法并不神奇。事实上,它们是对数据的统计方法。
因此,我们选择用来训练模型的数据只是模型可能包含的偏差中的一个重要因素。除此之外,我们需要添加有偏见的人,即选择数据、编写模型和解释结果的人,因为这些人(即程序员和数据科学家)是有偏见的。
最后,影响偏见的另一个相关因素是少数群体在数据和开发这些算法的团队中都被歪曲了。意识到这些现有的偏见可能有助于我们采取行动,帮助减少算法中的偏见。
那么,让我们更深入地了解一下提到的每一个因素。
数据有偏差
数据可能是不完整或不平衡的,这意味着它有更多关于特定人群的信息,这可能导致偏见。请记住,拥有平衡的数据并不意味着模型不会有偏差,但至少会减少偏差。
由于社会的文化和历史,历史数据可能会歧视某些少数群体。因此,检查数据的假设以避免未来的算法偏差是非常重要的。
如果我们只是从数据中去除性别变量以避免性别偏见会怎么样?正如《公平与机器学习的局限和机遇》一书【4】所强调的,事情并没有那么简单,因为还有其他隐藏性别的变量或特征。
人类偏见
无意识地,人类使用精神捷径来做决策,这些捷径中引入的偏见无法消除,因为这是我们大脑的运作方式。然而,意识到这一点将有助于我们在做出假设时预防和避免常见错误。
根据 Bazerman 的“管理决策中的判断”,[3]最常见的人类偏差分为三类:代表性、&锚定可用性和调整偏差。
1.代表性
我们把假设建立在我们头脑中的表象和刻板印象的基础上。例如,如果我们想到一个程序员,我们通常会想象一个男人。此外,这个人可能戴着眼镜,穿着也很特别。
这是我们头脑中已经形成的刻板印象。有错吗?不。然而,错误的是认为所有的程序员看起来都像我们自己的代表。
下面这段话来自 TED 演讲,我认为它完美地总结了代表性偏差的影响:
“……刻板印象的问题不在于它们不真实,而在于它们不完整。他们让一个故事成为唯一的故事。”奇曼达·恩戈齐·阿迪奇
2.有效性
当评估一个事件发生的频率或概率时,决策会受到我们脑海中立即出现的想法的影响。因此,人们倾向于高估或低估事件发生的概率。
例如,你可能认为中彩票的概率很低,但是认识两个中彩票的人的人可能认为这种概率比你想象的要高。
3.锚定和调整
这种类型的偏差指的是一个参考点,在这个参考点上,我们过分依赖于预先存在的信息,根据最初的信息进行调整。
例如,如果你看到一件衬衫价值 500 美元(非常高的价格),旁边还有一件价值 100 美元的 t 恤,你会认为这件衬衫很便宜。但是,你却在不知不觉中没有和其他店比较价格。
因此,总而言之,偏见存在于我们的日常推理中,因此我们必须意识到它并验证我们的假设。通过这样做,我们将有助于减少算法中的偏差。
对妇女的歪曲
当谈到性别偏见时,女性在数据和整个 it 行业中被大量歪曲,特别是在人工智能领域。因此,在开发算法时,他们的观点没有被考虑在内。
让我们来看看支持这一观点的一些数字:
人工智能专家:全球人工智能专家中只有 22% 是女性。
人工智能研究人员:arXiv中人工智能作者的 13.8% 为女性,至少由一名女性合著的人工智能论文自上世纪 90 年代以来一直没有改善。
人工智能会议:在主要的人工智能会议上,只有 18% 的作者是女性。
因此,正如下面的文章所强调的,男性的经验主导了算法的创建,而女性的观点不是解决方案的一部分。
我们如何避免偏见?
如前所述,避免偏见不是一个容易解决的问题。然而,正如也强调的那样,我们可以采取必要的行动来减少它。
- **了解数据的来源:**检查数据来自哪里非常重要。我们必须意识到局限性,研究特征的含义,并意识到任何准确代表总体的缺失信息。
- **获取更多数据:**如果你认为你的数据不够,或者没有如实反映社会的某个群体,你需要想办法获取额外的或生成更多的数据,尽可能准确。记住,你选择的数据将是你算法结果的主要因素。
- **确保数据平衡:**如果不平衡,请选择解决策略。
- **注意人类的偏见:**检查你自己对数据的偏见,并询问对结果的第二种意见。
- **验证假设:**如果你有假设,验证它们。
- **分析结果&每个类别/组的准确度等级:**当查看算法的准确度时,分析总准确度,也分析特定类别。
- **用真实的人来测试你的模型:**不要满足于来自数据的一定程度的准确性。让真实的人来测试它,并从经验中学习。确保这群人是多元的。
- **注意展示结果的方式:**展示你的结论并解释成功的定义很重要。当你的算法达到一定的精确度时,要清楚它真正的含义。
- **让你的团队多样化:**拥有多样化的团队将为解决问题提供不同的观点。这不仅提供了女性的视角,也提供了来自不同背景、年龄、种族和现实生活经历的观点。
没有关于如何避免偏见的指导手册,这些只是一位从事数据工作近十年的女性数据科学家的观点。然而,可以肯定的是,从数据中获得的结果取决于上下文、数据类型、算法的用户以及模型试图解决的问题。
此外,您可以使用一些工具来帮助突出和防止对刻板印象的偏见,和/或帮助您更好地可视化数据和结果。
以下是帮助您入门的有用工具列表:
- https://stereoset.mit.edu/
- http://aif360.mybluemix.net/
- https://github.com/adebayoj/fairml
- https://fairlearn.org/
- https://cloud . Google . com/ai-platform/prediction/docs/using-what-if-tool
- https://github.com/princetonvisualai/revise-tool
- http://slowe.github.io/genderbias/
- http://gender-decoder.katmatfield.com/
- https://www.totaljobs.com/insidejob/gender-bias-decoder/
团队的多样性
我们如何开始解决数据科学中的偏见?正如 Joy Buolamwini 在受欢迎的 TED 演讲中所说的,我如何对抗算法中的偏见,我们可以从实现更具包容性的编码实践开始。
“谁编码很重要。”乔伊·波伦维尼
**团队中的多样性是成功的关键:**拥有不同的观点、想法和情绪,可以帮助团队努力寻求更好、更强大的解决方案,这些方案考虑到了每一个观点,同时也更具创造性。
**更高绩效/更高效的团队:**多样化的团队达到更高的绩效,正如下面的文章所强调的,这篇文章展示了与不同的人一起工作是如何挑战你的智力的。此外,随着人们越来越意识到自己的偏见,多元化团队更有可能重新审视事实。
**机会:**如果没有多元化的团队,我们将会错失减少偏见的机会。如果所有团队成员都是男性,那么我们就没有女性视角。由于世界人口的 50%是女性,我们失去了 50%的代表权,并且很可能会错过来自这部分核心人口的商业机会。
正如下面的观点文章所强调的,团队中的多元化不仅是正确的事情,还通过创新的想法打开了新机会的大门。
**创新:**正如哈佛商业评论所强调的,多元化的团队更有可能拥有创新的心态。正如尼尔森的研究所说[5],“人们一起工作比他们单独工作能取得更大的成就”。
Nelson 提到异质团队具有更高的创新潜力,这是有意义的,因为这是当今组织存在的原因。
哈佛商业评论的一篇文章也强调了这一点,研究人员提供证据表明,多样性通过创造迫使人们“跳出框框思考”的环境来开启创新解决方案。
多元化团队中的一个悖论:重要的是不要陷入多元化团队会神奇地一起工作的想法。仍然存在有待克服的挑战。研究支持这样一种观点,即不同的团队需要陈述原则,并保持一致以使团队有效地工作。
最近的一项研究 [6]提到,多样化的团队会产生差异和冲突,这可能会降低效率。另一项研究【7】认为,为了实现利益最大化,队友需要遵循操作原则。
Cheruvelil 的另一份报告[8]得出结论,高绩效合作研究团队由致力于共同成果的多样化成员组成。
多元化不仅与性别有关,还与种族、文化、背景、年龄、经历、技能以及人们解决问题的方式有关。创建一个跨学科的团队意味着每个团队成员可以从不同的角度来解决问题,相互补充。
加入我们——社会需要你
人工智能无处不在,几乎每个行业都在使用机器学习来利用数据。因此,无论你发现自己身处哪个行业,人工智能迟早都有可能成为其中的一部分。
有鉴于此,我邀请你参加思考人工智能的力量,并问自己以下问题:
我们如何信任技术来做决策?AI 的潜力有多大?它的局限性是什么?考虑到偏见永远不会完全消除,应该监管什么,如何监管?
我不是说我们不必使用人工智能,人工智能会一直存在,我是说接受当前的限制可以帮助我们从中获得最佳潜力。正如 Zeynep Tufekci 在她的 ted 演讲中强调的那样,
"我们不能把我们的责任外包给机器."泽内普·图费克奇
所以,参与进来,帮忙解决问题
在整篇文章中,您已经看到了为什么我们需要更多女性从事数据科学,以及这如何有助于减少偏见的清晰示例。
我的使命是鼓励你和其他人成为这一变革的一部分。鼓励儿童参与数据科学也很重要,因为它可以对社会产生积极影响。
“低多样性会导致机会的缩小”——梭伦·巴罗卡斯[4]
这句话正好表达了我想表达的意思。在这个领域只有极少数女性会给其他女性提供数据是“男人的事情”的观念,因此甚至不会考虑它。让我们丢掉这些刻板印象,向女性展示她们实际上可以从事数据工作。
不管你的性别如何,你都可以做出改变。在接下来的研究 [9]中进行的几次采访表明,如果我们想在人工智能方面做出改变,应该做更多的工作,让代表性不足的群体更加可见,而不仅仅是为了营销机会。
根据 Melinda Epler 的 TED 演讲——尽管在科技行业,我们想要快速的解决方案,但是没有达到多样性和包容性的“魔杖”。相反,改变从人开始,一次一个人。她呼吁每个人都成为“盟友”,因为当我们相互支持时,我们能够建立更好的团队、产品和公司。
“联盟是强大的。试试看。”梅林达·埃普勒
参考
- 托尔加等人(2016)“男人对于电脑程序员就像女人对于家庭主妇一样?去偏置单词嵌入。”【arxiv.org/abs/1607.06520】T4。
- Brown,T. B .等人(2020)“语言模型是一次性学习者”。https://arxiv.org/pdf/2005.14165.pdf
- 巴泽曼(2002 年)。“管理决策中的判断”
- 索隆·巴罗卡斯(Solon Barocas)和莫里茨·哈特(Moritz Hardt)和阿文德·纳拉亚南(Arvind Narayan an)(2019)《公平和机器学习的限制与机遇》https://fairmlbook.org/
- Nelson,B. (2014)“这不仅仅是公平的问题。https://dl.acm.org/doi/pdf/10.1145/2597886多样性数据
- Yeager,K.L .和 Nafukho,F.M. (2012),“发展多样化团队以提高组织环境中的绩效”,《欧洲培训与发展杂志》。https://doi.org/10.1108/03090591211220320
- 琼斯、奇里诺·刘升和赖特(2020),“文化多样性驱动创新:赋予团队成功的力量”,《国际创新科学杂志》https://doi.org/10.1108/IJIS-04-2020-0042
- Cheruvelil,K.S .等人(2014 年)。“创建和维持高绩效的合作研究团队:多样性和人际交往技能的重要性”https://esa journals . online library . Wiley . com/doi/ABS/10.1890/130001
- Stathoulopoulos,Konstantinos 和 Mateos-Garcia,Juan C,《人工智能研究中的性别多样性》( 2019 年 7 月 29 日)。在 https://ssrn.com/abstract=3428240 的 SSRN 有售:
推荐讲座/视频
- 在工作场所成为更好盟友的三种方法 —梅林达·埃普勒
- 我如何对抗算法中的偏见——乔伊·波伦维尼
- 单一故事的危险
- 如何让人工智能远离人类偏见 — Kriti Sharma
- 偏见的麻烦——NIPS 2017 主题演讲——凯特·克劳福德
- 盲目相信大数据的时代必须终结 —凯西·奥尼尔
- 压迫的算法 —萨菲娅·尤莫·诺布尔
- 机器智能让人类道德更重要
- 编码偏差 —纪录片
为什么从事咨询工作对数据科学家如此重要
年轻专业人士的职业建议——观点
职业见解可能有助于您在数据科学领域的职业发展
他的文章不同于我通常写的技术含量很高的数据科学教程。今天,我回顾了我在一家大型通信公司担任数据科学顾问的时光,并讨论了为什么值得这么做的原因。我并不认为我的观点是详尽的和普遍适用的,但我希望它对那些面临职业选择或刚刚开始职业生涯的人有所帮助。本文提出的所有观点均为本人观点。
在 Unsplash 上由Christina @ wocintechchat.com拍摄的照片
首先,我提供了几个关于我自己的词作为背景。我最初是一名软件工程师,在各种数据和分析领域工作,主要是销售和营销相关的领域。2014 年,我决定完全转向数据科学,并在德国获得了相关领域的硕士学位。之后,我加入了全球最大的营销和通信公司之一,担任数据科学顾问,在接下来的三年里,我在两个不同的业务部门工作:营销(媒体)和咨询。
为什么是媒体?
一个惊人的原因是:
你可能会问,当医学研究或自动驾驶等令人着迷的领域吸引着最聪明的人才时,为什么一个年轻的数据科学毕业生应该考虑在 2021 年加入一家媒体公司。为了回答这个问题,我想引用塔勒布对他为什么对股票交易感兴趣的问题的回答(他又引用了曼德尔布洛特的话):
事实上,媒体有大量的数据,成吨的数据,堆积如山的数据,这些数据最好的部分是它是真实世界的数据。这意味着它是肮脏的、稀疏的、不平衡的,并且在所有可能的方面都是破碎的。这些数据 99%都不是很有见地,但却是关于真实人类行为的真实数据。在这些数据中找到 1%的黄金,对于一个好奇的数据科学家来说,是挑战,也是祝福。处理大量组织混乱的数据是学习如何有效处理来自不同来源、不同格式的数据(通常是实时数据)的最佳方式。
对于数据科学家应该做什么,有不同的观点。然而,在机器学习算法的应用之外,看到更大的图景也无妨。了解如何构建能够产生收入的实际工作应用程序至少与深入的数据科学知识一样有价值。没有多少公司采取这一额外的生产部署和维护步骤,因为大多数非数字行业的数据科学项目从未通过概念验证阶段。
当我在 2019 年参加一个工业 4.0 会议时,我来自非数字行业的同事们正在讨论,可能需要一年多的时间才能获得购买传感器的批准,安装传感器,然后收集足够的数据来训练第一个分类模型。在媒体中没有这样的限制。数据太多了,收集起来很便宜。当然,媒体和股票交易一样,不能提供一个自我实现的使命,而你会很乐意与你的朋友分享。
图片来源knowyourmeme.com,经作者允许编辑。
相反,它能给你提供一次无价的经历。
为什么咨询?
原因一:
咨询教会你关注并承担结果的所有权。
在科隆参加 Data 和 AI Meetup 时,我与一对来自当地大学的学生交谈,他们向我提出挑战,说他们的教授认为咨询不是实践真正数据科学的地方。坦率地说,教授说对了一部分,但只是一部分。你不应该指望当你加入咨询公司时,有人会教你如何编写 Python 或运行 A/B 测试。这可能不会发生。将会发生的是,你将被扔在一个项目上,需要自己解决技术部分。当然,你可以询问周围的一些人,但大多数决定你需要自己做出。这是一个巨大的动力,让你不断提高自己的技能,以便在与客户交谈时更加自信。然而,提高你的资格和跟上新的发展将是你自己的责任。同时,各种各样的客户、项目、身边的人会创造一个完美的训练环境,去练习那些自己不容易学会的基础软技能。
事实是,如果你有敏锐的技术技能,你可以在一段时间内发展你的职业生涯,但在某个时刻后,软技能真的开始变得重要,咨询是获得它们的最佳场所。
原因二:
咨询教会你正直。
还记得我在“为什么是媒体?”部分约 99%的不深刻的数据?这仍然适用。有时数据不是我们所期望的,或者更糟的是,有时数据会阻止我们实现我们的承诺。在这种情况下,经验法则是对自己、同事和客户诚实。隐瞒事实很容易失去客户的信任,而重新赢得客户的信任要困难得多。也许不仅仅是咨询,生活中最重要的规则是:
图片来源imgflip.com,经作者允许编辑。
也就是说,如果您发现数据、基础架构等存在问题。,找到并提出解决方案,千万不要只针对问题。总会有一些变通办法让你乐在其中。这条规则也适用于与同事的关系。如果你想在咨询行业取得成功,不要把你面临的问题带给你的上司,而是提出解决方案。这似乎是一条显而易见的建议,但是团队成员总是认为人事经理的存在是为了解决他们的经理的问题。事实上,这不是他们存在的理由。
原因三:
与当地市场相关的正确专业选择将确保你未来几年的就业。
大型咨询公司通常拥有来自多个行业的各种客户。因此,有机会从事一些项目,无论是建立一个推荐系统,自动实体提取算法,还是时间序列预测。在咨询行业工作时,你有一个独特的机会找到你最感兴趣的领域。除此之外,你还将了解当地市场的行业需求。因此,你不仅可以根据个人喜好,还可以根据特定地区的市场需求来选择未来的专业。
例如,我的本地市场是德国,该市场由四个部门主导:汽车、机械工程、化学和电气工业。我工作过的大多数客户来自汽车行业,有时来自为汽车行业供货的化学行业。汽车客户需要的是用结构化数据构建的各种模型,如需求预测、库存优化、推荐系统等。以及基于非结构化数据(如对象和声音识别模型)构建的模型。然而,我碰巧拿到了语义网和知识图的硕士学位。因此,我决定将我的资格改为时间序列分析和结构化数据的机器学习,以适应上述市场背景下公司的需求。
结论
回顾过去的几年,我对自己的职业选择非常满意。很难找到另一个行业能提供如此多的学习和成长机会。让它特别有价值的是可以访问几乎无限的数据和基础设施,各种各样的客户和项目,以及能够培养沟通技能的环境。我不想错过所有这些经历,因为它们让我能够从事我梦想中的新工作。
为什么你赌错了 NBA 球队
你可能会惊讶地发现,赢得最多比赛的 NBA 球队并没有赢得最多的赌注!
在这篇文章中,我将分析 NBA 的博彩数据并进行模拟,向你展示为什么这在历史上是正确的——并解释你应该赌哪支球队。你甚至不需要篮球知识来成功实施这个策略。
虽然你不需要成为 NBA 专家,这篇文章假设你有一些体育博彩概念和术语的知识。如果你对它们不熟悉,可以看看这个简短指南作为入门。
投注赔率有多准确?
让我们从基础开始——当两支 NBA 球队相互比赛时,一支球队被认为更有可能获胜(最受欢迎),而另一支球队更有可能失败(不被看好)。如果你将的金钱线赌注押在处于劣势的一方,你将比押在最受欢迎的一方赢得更多的钱;毕竟,你应该得到更大的奖励,因为你选择了不太可能获胜的人。根据体彩设定的奖金,你可以计算出每个队赢得比赛的隐含概率。
理论上,赢得赌注的隐含概率应该与你的团队赢得比赛的概率相同。事实上,体育博彩不会这样设定赔率。相反,他们邀请双方都采取行动,这样一来,处于风险中的资金数量就会平衡,从而降低风险,实现利润最大化。
例如,让我们说密尔沃基雄鹿队(去年战绩最好的球队)正在与纽约尼克斯队(战绩… 不是最好的球队)比赛。如果投注者急于在雄鹿身上下注,那么如果雄鹿赢了,体育博彩公司可能会对支付一大笔钱感到紧张。因此,他们决定减少对雄鹿队的支出,增加对尼克斯队的支出,从而激励更多的钱投向尼克斯队。
扬尼斯·阿德托昆博,密尔沃基雄鹿队的明星,可能对赢得打赌感到兴奋。来源:Wikimedia.org
这些支出可能会波动,这样雄鹿队获胜的隐含概率是 90%,而实际上他们的“真正获胜概率”可能只有 80%。在这种情况下,我们有一个价值赌注,从长远来看,在尼克斯队身上下注是有利可图的。
当然,所有投注者面临的最大挑战是找到每一次投注的真实获胜概率,并在其他人之前计算出来。不可能确切知道这些赢的概率,但是我们能找到隐含赔率更可能是无效率的游戏吗?这可能有助于我们发现价值投资的机会。
步骤 1:获取数据
首先,我们需要一个大的数据集来进行分析。我们需要以下数据:
- 每场比赛的赔率。我们利用这些信息来决定赌哪个队赢,如果我们赢了,我们赢的金额。
- 每场比赛的赢家。我们需要知道我们是否赢了赌注。
我最终使用了 Sportsbook Review ,这是一个汇集了许多不同体育书籍的历史博彩赔率的网站。从那里,我找到了一个开源的存储库,其中有一个脚本,可以有效地从任何历史 NBA 比赛中收集投注数据。我修改了剧本,也是为了刮出每场比赛的最终比分,并运行整个 NBA 赛季,我在 2017-18、2018-19 和 2019-20 三个常规赛季都是这样做的(只包括疫情暂停赛季之前的比赛)。这是数据集的快照:
有很多不同的方式在 NBA 比赛中下注,如货币线、点差、总点数等。因为这篇文章的缘故,我将专门关注货币线的盈利能力。同样,有许多不同的体育书籍可以用来下注。为了简单起见,我将只关注顶峰,它被认为是业内赔率最准确的。
步骤 2:寻找隐含概率的差异
这里的目标是检查过去 NBA 比赛的隐含赔率,并确定它们是否是历史上准确的。如果有很大的差异,那么就可能有赚钱的机会。
我根据他们的货币线赔率计算了每笔赌注的隐含获胜概率。你可能会注意到每场比赛的获胜概率之和大于 1,这是不可能的!然而,体育博彩公司这样做是为了从整个博彩活动中获利。为了调整这一点,我将获胜概率标准化为 1,这就产生了每一次下注的实际隐含获胜概率。
接下来,我创建了“箱”,以便将所有隐含获胜概率相似的赌注组合在一起。为什么要这么做?
假设我们有一个隐含获胜概率为 11.7%(或+755 moneyline)的赌注。很难找到许多其他赌注有这种确切的金钱线。但是如果我们把它包括在 10%到 15%的所有赌注中,那么我们在每个仓位中有相当多的数据点要看。然后,我们计算每个仓位的实际胜率(实际胜率除以游戏总数)和预期胜率(仓位中所有赌注的平均隐含胜率)。
在此基础上,我们可以计算实际胜率和预期胜率之间的差异,我称之为残差,看看是否有大的差异。以下是将所有赌注分成 20 个仓位时的结果。每个箱覆盖大约 5 个百分点的隐含获胜概率区间。
列中的 b 以小数形式显示概率区间。 co unt 列显示每个框中的下注总数。注意,计数在中间一行是对称的,除了( *0.456,0.5】*区间有 12 场比赛(24 注),赔率正好是 50/50。
事实证明,隐含的获胜概率(以及货币线)是非常准确的!一般来说,实际和预期的获胜概率相差不会超过 5%。但是,剩余胜率和预期胜率之间存在轻微的负相关关系。看起来,大输家被略微低估了,而大热门被略微高估了。
步骤 3:模拟策略
现在,是时候把我的(想象中的)钱放到我该说的地方了。在上一节中,我们发现巨亏股实际上可能被略微低估了。如果我们在过去的三个 NBA 赛季中模拟对失败者下注会发生什么?我们将使用 2016-17 至 2019-20 赛季的实际游戏结果和 Pinnacle moneylines 进行回溯测试。
我写了一个功能,模拟一个赌博策略,并随着时间的推移跟踪我们的奖金。我们首先必须设置一个下注金额,为了简单起见,每次都是 100 美元。我们还必须设置一个“获胜概率阈值”,它决定了我们要下注的处于劣势的球队。如果我们将其设置为 0.5,那么我们将赌注押在任何一个获胜概率低于 50%的球队(又名每场比赛的失败者)。如果我们将其设置为 0.2,那么我们只对不平衡游戏的大输家下注,这些游戏的获胜概率低于 20%。
我们现在准备走了。如果我们以 0.5 的阈值运行模拟,在每场比赛的失败者身上下 100 美元的赌注,会发生什么?
哦不,我们赔钱了!三个赛季后,我们输掉了**【3,903** 美元,赌注从 600 美元猛增至 1,000 美元。
值得注意的是,每次下注的期望值都是负的。正如我前面提到的,体育博彩通过 virgorish 或“vig”抽取每一笔赌注的一部分。Pinnacle 的 vig 约为 2–3%,实际上相当低。任何有利可图的策略都必须比盈亏平衡至少好 3%!
接下来,让我们试试完全相反的策略,赌每场比赛的最喜欢的。在对我的模拟器功能进行了微小的调整后,我们得到了以下结果:
真是一场噩梦!采用这种策略,我们 损失了 10352 美元。将这张图与上一张图比较,我们可以看到趋势向相反的方向移动(正如它们应该的那样),但是盈利完全被亏损的幅度所抵消。
最后,让我们测试一下我们大肆宣传的押注巨大劣势的策略。如果我们以 0.2 的阈值运行模拟会发生什么?
我们的总利润是 7182 美元!!一点都不差!
一个真正重要的警告是,我们在后来盈利之前损失了近 3000 美元。为了在这种策略下生存,你需要有一大笔资金和/或下小注。否则,很容易陷入长时间的亏损,并完全耗尽现金。
如果你想看看我完整的 Jupyter 笔记本,你可以在这里找到它。
结论:找到大时代的失败者
基于这种分析,历史上一直有一种通过押注于大输家而获利的策略。你可以把每一次下注想象成一张彩票,输的可能性很大,但收益很大。
我确实认为,这些失败者相对“定价过低”,而大热门却“定价过高”是可行的。对于很多下注者来说,可能有一个心理上的解释;人们可能希望以长期货币回报为代价赢得更多的回报。
总之,这种弱势策略需要耐心忍受长时间的亏损,下小注,并拥有足够大的资金。然而,如果 NBA 的底层玩家能够获得足够多的稀有 Ws,你就有可能赚到钱。
顺便说一下,尼克斯队本赛季已经击败了雄鹿队,尽管那场比赛只有 12%的隐含获胜概率!也许是未来的征兆。
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
为什么你不是(数据)科学家
现在是我们明确区分数据科学领域的工程和科学研究的时候了
比尔·盖茨是科学家吗?莱纳斯·托沃兹怎么样?难道他们没有造出独一无二的东西吗?他们实际上做的不止这些!他们以自己的方式用他们“发明”的东西影响了整个世界。如果我们不称他们为科学家,那为什么我们称大三毕业生为“数据科学家”??
图片来自维基百科文章的截图
到目前为止,您已经知道我对“数据科学家”这个术语有一个基本的问题,以及它如何模糊了完成这项工作所需的细微差别和复杂性。
让我们看看什么是数据科学的一些定义:
数据科学是一个跨学科领域,它使用科学方法、流程、算法和系统从结构化和非结构化数据中提取知识和见解,并将数据中的知识和可行见解应用于广泛的应用领域。数据科学与数据挖掘、机器学习和大数据相关。—维基百科
什么是计算机科学?
计算机科学是对算法过程、计算机器和计算本身的研究。作为一门学科,计算机科学涵盖了从算法、计算和信息的理论研究到在硬件和软件中实现计算系统的实际问题的一系列主题。—维基百科
在我看来,非常宽泛地说,数据科学处理的是“什么”,而计算机科学处理的是计算的“如何”。但是,我们没有遇到太多的“计算机科学家”的个人资料。相反,我们称他们为软件开发人员、全栈开发人员、数据库工程师等。
不要误解我。我本人来自科学背景,我在数据领域。十多年来,甚至在数据科学兴起之前,我就已经建立并发明了数值算法。我确实明白,数据科学需要科学家的严谨,需要基于事实的严格过程,加上对自己结果的极端猜测。但是,就我们正在做的事情而言,几乎没有未探索的领域。实际上,我们做的和我们所说的适当的软件开发生命周期(SDLC)是一样的!
来源:https://commons . wikimedia . org/wiki/File:General _ System _ SDLC _ % 26 _ Software _ SDLC . gif
当在软件工程、用户研究等方面做出科学严谨和基于事实的决策时。我们不会草率地称他们为科学家,对吗?也许有些人会这么做,但这不是常态。
虽然我们都认为数据科学是炒作,但在我看来,“数据科学家”的角色是近年来被炒作并变得非常抽象的角色。科学家一词适用于对科学原理有深入了解和敏锐理解的人,但不适用于工作经验不足一年的初级候选人。
此外,数据领域中有许多角色与高级数据科学同等重要,甚至更重要。“数据科学”这个术语本身就非常模糊,导致了许多角色定义的混乱。
现在找一个数据架构师比找一个数据科学家难多了!
围绕数据科学家这一角色的大肆宣传正导致被误导的有志之士涌向这些头衔,而不了解业务的真正挑战。有太多的求职者认为自己是科学家,并以此来证明高薪的合理性。但在现实中,每当我建立一个团队时,数据科学家(AI/ML)成员通常是最后被聘用的,因为我们需要首先组织数据。根据我的经验,现在找一个数据架构师比找一个数据科学家要难得多!随着公司意识到数据科学是垃圾进垃圾出,他们现在重新发现了管理数据的重要性。随着该领域需求的增加,以及由于人们涌向数据科学家职位而导致的供应减少,一名优秀数据工程师的工资要求现在与一名优秀数据科学家相当或更高。
我们都知道数据科学的追求者正在用 Kaggle 数据集创造奇迹,大学也在发布突破性的算法。但是,当你绞尽脑汁从稀缺的数据和相关的约束中提取有意义的价值时,真正的挑战和创造力就来了。复杂性和随之而来的研究不仅仅在于算法,还在于数据争论以及将问题分解成更小的基本问题。
只有极少数的实践数据科学家能够对“但是,当你完全没有数据开始时,你怎么能做出贡献呢?”
最好的科学研究是从足够的基础工作开始的在我们写一行 Python 代码之前。作为一名优秀的科学家,你应该通过对复杂性和可行性的基于证据的推理来远离潜在的陷阱和失败。我很少看到数据科学人员对如何解决问题进行彻底的研究,甚至帮助重新解释问题陈述。只有极少数的实践数据科学家能够对“但是,当你完全没有数据开始时,你怎么能做出贡献呢?”。这种解决问题的心态和对问题领域和陈述进行基础研究的意愿在当前时代严重缺乏。
如果给你一个要实现的技术问题,而你只是在机器学习方面应用现有的过程、代码或解决方案,我宁愿称你为“ML 开发者”或“ 数据科学开发者 ”。如果你是科学家,告诉我你正在解决的问题,让我相信它是独特的或困难的,用你如何解决它的故事吸引我。
现实世界的数据科学家需要意识到他们的“对业务的影响”,并阐明数据科学如何增加价值。核心数学或计算机科学专家和商业分析师之间的差距需要积极地融合。业务实体中的数据科学家的期望是构建满足业务痛点的解决方案和 POC。我们已经 过了构建酷酷的算法的宣传期 ,这些算法在技术上很复杂,可行性存疑,商业价值有限。
如果你想成为一名数据科学家,问自己一个问题“为什么我需要成为一名数据科学家?”通常情况下,数据分析师或 ML 开发人员的工作是你所追求的,但在这个狂热的世界里,一切都指向数据科学家。如果你不参考互联网就不能建立一个简单的回归算法,你就已经辜负了成为科学家的期望。但是,即使您通过了测试,您也需要能够找到适用于现实世界场景的合适方法。如果你不能做到这一点,如果你不是一个初级候选人,你再次没有通过评估,因为你需要有人为你构建问题。
错不在想成为数据科学家的有志之士。相反,随着越来越多的职位空缺以数据科学家的头衔出现,他们是行业成熟状态的受害者。像我这样的大多数招聘经理也陷入了这种动态之中。然而,事情正在发生变化,随着大多数数据科学工程的自动化,真正的“科学”角色将很快出现。与此同时,让我们脚踏实地,根据我们能做的而不是标题所说的来寻找位置。
因此,如果你需要成为一名数据科学家,了解数学和统计数据,理解基本原理,足智多谋并专注于交付,知道业务需求是什么,并最终知道为什么你想被称为科学家而不是工程师或开发人员!
如果你已经深入数据科学领域,或者是一名非常优秀的数据科学工程师,对商业价值的产生有敏锐的感觉,请联系我。我一直在寻找有能力的候选人加入我的团队。😃
作者信息
Shyam 是 Yara SmallHolder solutions 的数据团队负责人,他的团队负责数据管理和工程、BI、产品分析、营销分析、市场情报、战略洞察和数据科学。他在建立技术和数据领域的全功能团队方面拥有丰富的经验。他本人也是一名实践数据科学家,拥有为大型企业提供数据科学战略咨询的经验。
请在 LinkedIn 这里 随意连接和联系聊天。
你可能喜欢的其他文章
https://shyamdsundar.medium.com/guiding-organizations-by-value-amidst-uncertainty-part-1-1a26e65ac049 https://medium.com/the-innovation/prioritising-the-scientific-way-507d4200b6b8
为什么你找不到数据科学的工作
以及如何增加你成功的机会
图片由 安德里亚·皮亚卡迪奥 来自 像素
公司经常会收到数百份求职申请,人力资源部不可能手动筛选所有的申请。即使你很适合这个角色,你也可能永远得不到回音。作为求职者和面试官,我经历了招聘过程的两个阶段,我想讨论一下你正在犯的、影响你成功机会的错误,以及你能做些什么。
1.你的简历没有通过 ATS
99%的财富 500 强公司使用申请人跟踪系统(ATS )来筛选合格的申请人,以供招聘人员进一步审查。对于一个有 250 名申请人的职位空缺,只有 4 到 6 人会被要求参加面试。如果你从来没有得到回复,很可能你的简历从来没有通过 ATS 的审核,无法出现在人们面前。
如何增加你成功的机会:
- 修改你的简历,突出多次提到的或接近工作要求顶部的硬技能。例如,如果一份工作需要特定 Python 包或机器学习算法的知识,一定要在简历中列出。
- 利用在线工具帮助你在简历中找到合适的关键词,以通过 ATS 筛选。
- 当心使用缩写,因为 ATS 可能正在寻找完全拼写出来的术语,例如机器学习与 ML。如有疑问,请在工作描述中使用相同的术语,因为这很可能是 ATS 配置筛选的内容。
- 为你的简历使用微软 Word 或 PDF 文件,以确保 ATS 可以正确扫描。如果你没有微软 Word, Google Docs 可以免费使用,你可以下载. docx ( Word)或。pdf ( PDF)文件。
2.你的简历没有说明为什么你适合这个角色
雇主在初始简历屏幕上平均花费 7 秒钟。想象一下,你正在制作一个广告,你只有 7 秒钟的时间来说服观众为什么他们应该购买你的产品。这也是你在简历中需要用到的心态。你能在简历上展示什么,让雇主在 7 秒钟内相信你应该进入面试环节?
如何增加你成功的机会:
- 格式化你的简历,使其易于阅读并突出与该职位相关的技能。如果雇主看不到明显的联系,他们就没有时间把你过去的所作所为与为什么你会很适合他们的角色联系起来。
- 修改你的简历,使之符合最高职位的要求,而不是用一个标准的版本来申请所有的职位。这将决定你的简历是通过雇主的筛选,还是被拒绝。
- 如果你要转行,并且没有直接相关的经验,那么突出你的领域经验如何帮助你将数据科学应用到你直接遇到的业务问题中。
3.你没有证明你的数据科学知识
当雇主第一次看到你的简历时,你就像其他有相似资历的求职者一样。你可以拥有该职位的相关技能,但招聘经理不能确定你真的知道如何运用这些技能。要想脱颖而出,你需要展示你将数据科学应用于商业问题的能力。
如何增加你成功的机会:
- 创建项目来展示你知道如何在现实世界中应用数据科学。避免 Kaggle 或上的数据集,创建自己的让你的数据独一无二,帮助你的项目脱颖而出。
- 考虑写关于数据科学的博客。你可以建立一个文章文件夹,向雇主展示你的知识。
- 联系当地的非营利或小型企业,提供免费工作。这将让你有机会将数据科学应用于现实世界的问题,并在求职面试中讨论这些问题。
4.即使你没有在找工作,你也没有建立关系网
多达 80%的工作是通过个人和职业关系填补的,70%的工作没有在工作网站上发布。重要的是建立一个关系网,这个关系网可能会给你介绍一份工作,而不是你自己去找。
如何增加你成功的机会:
- 即使你现在没有在找工作,也要开始建立联系。与已经跳槽到其他公司的朋友和同事保持联系。你永远不知道工作介绍会从哪里来。
- 联系 LinkedIn 上你感兴趣的公司或职位的工作人员,请求一次信息面试。如果你需要寻求工作推荐,这将有助于你建立融洽的关系。
- 找一个你附近的数据聚会参加,与志同道合的人和潜在的雇主建立联系。演讲者或与会者可能知道你将来适合的职位空缺。
5.你面试得不好
雇主希望雇佣对这个角色感兴趣,并能与不同层次的观众交流的候选人。即使你通过了技术测试,如果你的回答含糊不清,或者你对这份工作不感兴趣,你就不太可能被录用。
如何增加你成功的机会:
- 研究面试官可能会问的常见问题,练习你的回答。
- 准备一些你可以问面试官的问题,以显示你对这个职位和公司的兴趣。
- 请朋友和家人进行模拟面试练习。给自己拍一段视频,以便事后回顾,并向你的模拟面试官寻求反馈,看看你在哪些方面可以做得更好。
- 最后练习,练习,练习。发展优秀的沟通技巧没有捷径可走。
数据科学工作竞争激烈,即使你有合适的资格,也不能保证你会得到这份工作。现在你知道如何增加成功的机会,我希望你的下一份数据科学工作早点到来。
你可能也会喜欢…
你为什么没有通过机器学习面试
我在 ML 面试过程中的经验。11 个典型问题及回答方法
背景图片来自 Envato ,作者通过他们持有许可证
不久前,我带着计算机科学的硕士学位离开了大学。
我非常清楚我必须在机器学习和数据科学领域找到一份工作。我的简历上有一些数据科学和数据工程方面的工作经验以及一所顶尖大学的硕士学位。但这只是一个开端,要得到这份工作,你需要 T4 在面试中为他们提供便利。
确保你得到你梦想的工作或雇佣你梦想的团队。我将与您分享我在面试过程中被问到的问题和问题类型。这样你就不会再失败,也可以避免我的错误。
我参加了大约 8 次面试,都是多阶段的过程。通常从编码挑战到几次“放大”采访(流行病时间)
一般来说,有 4 种类型的问题,编程问题,数据科学/机器学习问题,编码挑战和行为问题。根据工作的不同,你应该有针对性地准备回答那些更有可能出现的问题。
偏差方差权衡/困境
到目前为止,这是我遇到的最常见的问题,似乎我在每一次复试中都遇到过,这肯定是你应该回顾的事情。偏差-方差权衡是通过增加估计参数的偏差可以减少参数估计的 v 方差。
这个问题的另一个变体是偏差-方差难题。即同时最小化测试集的偏差和方差的问题。
在这两种情况下,我会提到另一个,并额外给出如何减少高偏差(例如,增加模型复杂性)和高方差(例如,选择较少的特征进行训练)的示例。
偏差方差,来源维基百科
培训、测试、验证集之间的差异
另一个你在面试中会遇到的非常常见的 ML 特有的问题。我发现自己在大约 30%的面试中回答了这个问题。
虽然答案可能非常简短:训练集用于拟合/训练/构建模型,验证集用于估计过度拟合发生的点(提前停止)或用于超参数调整,测试集用于估计泛化误差。
我会鼓励你继续说下去,直到脸上显示出满意为止。您可以添加关于每个数据集使用多少%数据的讨论。其他相关主题,如交叉验证或如何处理具有自然时态联系的数据集,可以给你一些提示。
拆分数据集的示例,来源维基百科
你喜欢什么型号?
假设您有数据集的结果,神经网络(NN)的准确率为 93%,决策树的准确率为 91%,您倾向于哪种模型?
虽然这里没有正确或错误的答案,但这是一个谈论可解释性和准确性之间权衡的好机会。如果这是一个股票交易模型,1-2%可能是一大笔钱。如果它是一个接受或拒绝贷款申请的模型,并且客户支持必须解释为什么模型得出这个结论,那么答案是完全不同的。
其他值得讨论的考虑因素包括训练、开发、预测和再训练神经网络的实际成本,与决策树相比,这是非常不同的。
一大堆 SQL 问题
老实说,我对 SQL 问题的数量感到惊讶。某种形式的问题总是会出现,有时伪装成熊猫问题,例如不同类型的连接。有时直接向我说出一个 SQL 谜语(这个查询会输出什么,或者给我写一个…)以及偶尔询问视图、主键、规范化等概念。
这里要吸取的教训是,他们不会期望您编写优化的查询,但是了解基础知识是必须的。
简单的 SQL 问题,由作者创建
行为问题
如果你需要告诉涉众他认为最适合 ML 模型的特性并不是最好的,你会怎么做?
如果你的利益相关者在选择他们提供给你的数据时存在偏见,你会如何表达?(如果他们是数据科学家,则一次;如果他们来自企业,并且只知道基本的 excel,则一次)
行为问题比我最初想的更普遍,但这很大程度上取决于职位。一旦这个职位面对一些非技术的利益相关者,他们将会是这个过程的一个重要部分。尤其是在咨询行业,他们会占用很多面试时间。
在一家大型科技公司的系列面试中,这类问题甚至被问了我 4 个小时。不同的评论者一遍又一遍地问同样的问题,这是一次相当累人的经历,绝对不是我准备好的。你可以做得更好!
你会如何处理一个没有标签的问题?
有时候提问的目的是想弄清楚你是否知道一个概念。在这里,它的目的是让你谈论无监督学习和有监督学习之间的区别。
其他可能的解决途径包括让某人注释数据或构建标注软件。提及和解释特定版本的聚类算法,如 K-最近邻或高斯混合模型,并对其进行潜在的阐述可能是一个额外的收获。确保你的回答适合你申请的行业,向他们展示你是这份工作的合适人选。
监督与非监督学习,来源维基百科
Pep8 是什么
而实际面试中针对特定语言的编程问题并不常见。这是 Python 的一个例子,成为一名优秀的软件工程师总是一个巨大的优势。
Pep8 是 Python 代码最常见的风格指南,它规定了参数后面应该有多少个空格,或者如何构造导入。
这可能会因你所擅长的语言而有很大差异,比如 C++、Scala 等等。他们会问非常不同的问题。我会检查你是否知道至少一个风格指南和一些与测试相关的东西。
如果你有一个 API,你会如何加载一个 CSV?
我回答说你应该把它装上熊猫,因为他们比我做得更好,可能没有更好的方法了…
他说,大家都是这么想的,这是不对的(真为我感到羞耻)。显然,加载熊猫需要 7 秒,而他们在 300 毫秒内实现了。
我用这个问题想教会你的是,在回答一些看似琐碎的事情时,不要过于自信。请确保至少包括您将首先测试它并验证附加的东西,比如可能是 parquet 或者将它加载到内存中(或者甚至可能是 Cython).
解释一个混淆矩阵?
也称为误差矩阵。对于这样一个简单的问题,你不应该列出所有可能的答案,但一定要简要说明它包含真阳性、假阳性,并且你可以从中计算诸如精确度和召回率之类的东西。
如果非要细说的话,你应该考虑看他们的脸。找到适量的信息呈现给他们将永远是一个平衡的行为。
混淆矩阵示例,截图来自维基百科
异常检测?
这是一个非常宽泛的问题。我要做的第一件事是谈论离群值和异常值之间的区别。虽然不是所有的人都有这种差异,但这表明你对这个领域的“文化”差异有所了解。那些有影响的人通常认为异常是数据中的“错误”,不是来自分布,异常值是来自分布,但它们并不常见。
还可以讲隔离林,高斯混合模型,甚至只是标准差等各种统计方法。谈论完这些话题后,你很容易就能完成 5-6 分钟,考虑到面试通常包含更多的问题,这应该绰绰有余。
实现一个机器学习 API?
机器学习面试的另一个很大的部分是实际的编码挑战。我被要求训练一个数据模型,并使用该模型构建一个服务请求的 API。
包括 docker、加载模型和测试。虽然我不能在这篇文章中充分讨论我的答案。幸运的是,我制作了一个完整的视频,向你展示了一个非常真实的例子,告诉你如何在合理的时间内完成这样的练习,以及需要注意什么。
结论
虽然面试过程在技术上和心理上都要求很高,但我相信现在你已经确切地知道该期待什么了。当然总会有意想不到的问题,你不知道答案。通过使用我们在这篇文章中讨论的技术,并成为一名伟大的数据科学家、软件工程师和机器学习工程师,我相信你会找到你梦想的工作。
如果你喜欢这篇文章,我会很高兴在 Twitter 或 LinkedIn 上联系你。
一定要看看我的 YouTube 频道,我每周都会在那里发布新视频。
为什么数据科学导师能在 2021 年帮助你
问导师的 5 件事对你的职业和学习有帮助
约书亚·内斯在 Unsplash 上的照片
有一个数据科学方面的导师有利于你的职业发展和学习。当我开始担任数据科学家时,我有两位导师。一个是从团队构想开始就在那里的资深人士,另一个是寻求指导年轻女性的技术人员。我工作的前 6 到 8 个月,我花时间向我的导师学习。我问了他们大量的问题,给他们出主意,并试图了解我想要什么样的职业发展。在过去的一年里,我从这两个人身上学到了很多关于我的职业和学习的东西。我想和你们分享其中的一些见解。
1.你是哪种类型的贡献者?
在我成为数据科学家的第一个月,我和我团队的一名高级成员坐下来,我问他对团队有什么想法,我可以参与的项目,以及期待什么。他问了我一个问题:你是哪种类型的贡献者?他想知道我是否有兴趣继续做一名个人贡献者,领导一个团队,晋升到一个管理职位,或者成为一名技术人员。对这个团队和公司来说,这是一个很难做出的决定,但这是当时我能被问到的最好的问题。这个问题让我思考未来 2-5 年我想要什么,也是我开始计划工作目标的时候。
**你为什么需要一个导师?**他们会问你一些尖锐的问题,要求你反思自己的决定和下一步。
2.培养工作作风
我从这位导师那里学到的另一个有趣的趣闻是他的工作方式哲学。他有一个对他很有效的模式,他在高价值的项目上工作,完成 75%,然后把剩下的 25%交给其他人。这使他能够在项目中工作,从中学习,然后教导和指导该项目的下一个人。
不管你是否同意这种工作理念,或者有你自己的想法,我从中学到,每个人都有一种自己工作得最好的方式。通过许多交谈和我自己的经历,我找到了适合我的风格,并在我的项目中实施了它。和导师一起工作让我明白,不同的人工作方式不同,但可以取得相似的结果。
为什么需要导师?导师可以向你展示解决同一个问题的不同方法。学习他们如何处理特定的情况,比如发展一种工作方式,将允许你将这些方法与你自己的方法进行比较,并让你决定如何最好地工作。
3.明白自己想要什么
随着我继续经历这两次导师生涯,我和另一位导师的主要话题之一就是职业发展。我经常和她谈论我正在学习的东西,我未来想要什么,以及我怎样才能到达那里。通过这种关系的发展,我找到了一个可以接受我的计划反馈的人。我首先给她带来了我的第一份年度总结和目标。我和她概述了一切,并征求她的意见。她告诉我,我需要学会展示我工作的附加值,并概述我的长期目标。她帮助我更好地理解了指导个人、领导团队以及与团队分享愿景的意义。当我现在领导我的团队时,我看到了她教给我的许多经验,在我制定我们的团队目标、制定我们的工作路线图以及向更广泛的团队展示附加值的过程中,我也经历了这些经验。
**为什么需要导师?**你的导师可以帮助你更好地了解你在工作和职业中想要什么。你可能会改变你的想法,但是如果你有一个适当的计划,你可以朝着它努力。
4.展示你的增值
最具挑战性的一课来自我的两位导师,学会向关心你的人展示你的价值。关心的是你的经理、股东或高管,他们想知道你为企业增加了什么价值。
在过去的一年里,我学会了用不同于以往的方式来处理这个问题。通常情况下,我会写几句话来说明项目是什么,我在项目中做了什么,以及我采取了什么步骤来完成它。像之星方法一样,我概述了情况(项目)、任务和采取的行动。在评估我的工作时,我忽略了结果是什么?我没有解释我工作的结果。当我和我的导师一起工作时,我明白了如何更好地跟踪一个项目的绩效,来比较这些价值并起草我的结果。我可以在一张幻灯片中总结这些结果,并向那些想看的人展示我的工作和我的团队的工作的影响。
你为什么需要一个导师?有一个与你工作关系密切的导师可以帮助你获得有价值的技能,比如学习跟踪你的项目表现。他们可以教你如何向利益相关者积极展示你的工作,并分享它如何为企业增加价值。
5.讲述你的故事
随着时间的推移,我开始在大学演讲,并开始指导实习生。在此期间,我和我的导师谈论了我的经历,以及我可以做些什么来改进。我从一位导师那里得到的最重要的建议是讲述我的故事。我知道我是谁,我完成了什么,我从这些经历中学到了什么。随着我与不同的大学、大学生和学员一起工作,我提炼了我的故事,并开始专注于我学到的经验教训。这是我开始用媒体写作的主要原因之一。通过这些对话,我意识到我确实有一些我经常谈论的经验,可以很好地转化为书面形式。
**为什么需要导师?**当你思考他们提出的挑战性问题并对你们的讨论进行反思时,指导关系可以帮助你更好地了解自己。随着你成长为一名数据科学家,导师还可以教你如何展示你的故事和发展你的个人品牌。
摘要
数据科学领域的导师可以教你很多东西。如果你的团队中有人可以在你的项目中帮助你,提供反馈,并在你需要帮助时帮助推动你前进。考虑在 2021 年找一个导师,尤其是如果你是从数据科学开始的话。当你在自己的岗位上学习和成长时,找到一个支持你的人会是你的宝贵财富。以下是你可以问导师的五个问题:
- 我怎样才能最好地向别人讲述我的故事?
- 我如何确定我是哪种类型的贡献者以及我想成为哪种类型的贡献者?
- 是什么样的工作方式让你达到了现在的位置?
- 考虑你在职业生涯中想要什么,并与你的导师讨论如何才能实现。怎么才能得到 X?
- 我如何才能最好地向企业和利益相关者展示我的增值?
在过去的一年里,你从导师那里学到了什么?你在考虑 2021 年的导师吗?
如果你想阅读更多,看看我下面的其他文章吧!
为什么需要 Python 虚拟环境以及如何设置它
这样做是为了避免将来在 Python 中处理不同项目时出现问题
JESHOOTS.COM在 Unsplash 上拍照
如果你刚刚开始学习 Python 或者已经写了好几个月的 Python 代码,大概你已经在电脑上安装了几十个库了。尽管每个库都可能是获得新 Python 技能的证明,但是如果所有这些库都安装在同一个环境中,它们可能会破坏系统工具或以前的项目,这些项目有自己的依赖关系。
每个项目可能都需要自己独特的第三方 Python 包。这就是为什么每次我们开始一个新项目时,我们都应该用一个特定的 Python 版本和项目的所有依赖项来建立一个新的虚拟环境。如果您以前从未这样做过,请不要担心,在本指南中,我将带您完成 Python 虚拟环境的设置,以便您在使用 Python 处理不同项目时避免将来的问题。
**Table of Contents** 1\. [What’s a Virtual Environment?](#db7f)
2\. [How to Create a Virtual Environment with venv](#cdd0)
3\. [Sharing Python Projects](#1bb9)
4\. [Alternative to venv](#87af)
什么是虚拟环境?
虚拟环境是一种工具,有助于保持所需的依赖关系和项目隔离。如果你想安装一个新的库并在终端上写pip install name_of_library
而不激活一个环境,所有的包将被全局安装,如果你在你的计算机上处理不同的项目,这不是一个好的做法。
如果这听起来有点复杂,不要太担心,因为虚拟环境只是一个目录,其中包含我们的项目运行所需的所有文件。
如何用 venv 创建虚拟环境
假设我们想在 Python 中处理两个不同的项目。一个是数据科学项目,其中有一些科学库(NumPy、Pandas、Matplotlib 等),而第二个是 web 开发项目,其中我们将主要使用 Django。
假设数据科学项目的目录树是这样的。
data-science-project/
├── dataset1
├── dataset2
└── dataset3
如果我们将所有这些库安装在同一个默认环境中,不仅会出现一些错误,而且默认环境也会变得有点乱,所以我们将使用 Python 3 附带的venv
安装一个新环境(还要确保安装了 pip)。
要创建一个新的环境,打开一个新的终端,并找到您希望存储项目的文件夹。在该目录中运行命令python3 -m venv name_of_the_environment
对于我们的例子,我将通过终端转到data-science-project
目录,然后运行前面提到的命令来创建一个名为data_science_env
的虚拟环境
cd data-science-project/ # change directory
python3 -m venv data_science_env # creates the environment
我们刚刚创建了一个文件夹,其中包含运行最新版本 Python 的虚拟环境。现在我们的项目目录树看起来像这样。
data-science-project/
├── dataset1
├── dataset2
├── dataset3
└── data_science_env # our new environment
现在是时候激活创建的环境了。为此,我们在终端中运行以下代码。
# mac
source data_science_env/bin/activate
# windows
data_science_env\scripts\activate.bat
在这之后,您将会看到如下图所示的括号中的环境名称(这次是 Django 环境django_env
)
作者图片
既然环境已经激活,那么就可以为我们的项目安装特定的库了。比如我要装熊猫。
(data_science_env) pip install pandas
现在,如果您运行pip list
,您应该会看到已安装软件包的列表。由于我们刚刚创建了环境,我们将只找到熊猫。
(data_science_env) pip listPackage Version
---------- -------
pandas 1.2.4
pip 19.0.3
setuptools 40.8.0
如果您想要停用当前环境,请运行以下代码
(data_science_env) deactivate
运行代码后,您应该不会再看到括号内的环境名称。
如果您想要删除创建的环境,请编写以下内容。
# mac
rm -rf data_science_env
# windows
rmdir data_science_env /s
https://betterprogramming.pub/4-books-i-read-as-a-self-taught-data-scientist-380d13d8bb0c
共享 Python 项目
创建的环境不仅有助于组织我们的项目,还能让我们轻松地与任何人共享项目。有了虚拟环境,就有可能保留我们项目中的所有信息,比如依赖关系,这样任何人都可以复制我们正在使用的相同环境。
为此,请运行以下命令。
(data_science_env) pip freeze > requirements.txt
pip freeze
命令列出了环境中安装的第三方包和版本。输出存储在一个名为requirements.txt
的文件中
我们可以与任何希望重建特定项目运行环境的人共享该文件。一旦其他人收到该文件,他/她所要做的就是在他们的机器上按照本指南中说明的步骤创建一个新环境,然后激活该环境并运行以下代码。
pip install -r requirements.txt
这样,环境就在第二台机器上被复制了。要确保所有库都安装了您想要的版本,请编写以下代码。
pip list
venv 的替代品
在本文中,我们使用 venv,因为它预装了 Python 然而,还有其他值得一试的选择。
pipenv
这是一个将包和环境管理支持合并到一个工具中的工具,因此它使用pip
、venv
和requirementes.txt
简化了典型的工作流
不幸的是,它没有预装在 Python 中,所以您必须通过 pip 单独安装它。只需在您的终端上运行以下命令。
$ pip install --user pipenv
有关该工具的更多信息和设置指南,请查看此处的可用文档。
就是这样!现在您已经准备好开始一个新的 Python 项目了!下面你可以找到一些我做的关于数据科学中使用的库的指南(Matplotlib/Seaborn,Pandas 和 Scikit-Learn)。
与 3k 以上的人一起加入我的电子邮件列表,获取我在所有教程中使用的 Python for Data Science 备忘单(免费 PDF)
为什么你需要知道模型的内部运作
与魔术不同,知道机器学习模型如何工作不会破坏有趣的部分:在许多情况下,它是有趣的部分。当我们了解一个模型背后发生的事情时,我们不仅可以在工作中变得更加有效和精确,还可以控制偏差和防止伤害。
本周,我们很高兴分享一些精选的优秀帖子,它们将帮助你理解机器实际上是如何学习的。让我们开始吧。
- 我们能让情感分析模型变得可解释吗?Pooja Hiranandani以一个有趣的前提开始了我们的讨论:“随着人工智能变得越来越普遍,我们开始想知道它的动机是很自然的。”她的帖子向我们展示了多种可解释技术,并触及了它们如何帮助她的团队的深度学习模型表现得更好。
- 说到模型漂移,需要问对问题 。如果你的模型不再像最初那样有效,你会怎么做?你如何节省时间和挫折,让他们回到可接受的可靠性基准?Sarah Beshr 清晰易懂的概述列出了你可能遇到的各种类型的漂移,解释了它们的原因,并提出了潜在的解决方案。
由 Lukas Tennie 在 Unsplash 拍摄的照片
- “合理规模”在 ML 和 MLOps 语境中是什么意思? 让机器学习在成长中的初创公司产生可衡量的积极成果的斗争是真实的。 Ciro Greco 、 Andrea Polonioli 和雅格布·塔利亚布埃认为,你不一定要成为谷歌或脸书才能获得有意义的见解,并从生产模型中增加商业价值。
- 了解图像合成如何帮助训练 CNN 更快 。规模和资源的问题在塞巴斯蒂安·吉尔伯特的实践教程中也扮演着重要的角色。他展示了如何生成合成图像来加快训练,并使卷积神经网络检测对象,而无需耗费人力和时间的手动注释。
- 机器学习从哪里停止,强化学习从哪里开始? 和上面莎拉的文章一样,内森·兰伯特发人深省的帖子的出发点是模特的表现会随着时间的推移而恶化。他建议,通过强化学习方法的镜头来考虑机器学习的挑战,可能会在广泛的现实世界应用中产生有希望的结果。
如果你想在本周超越模特和她们的魔力,你还有很多很好的选择。其中包括:
- 了解数据与气候变化交集的一站式资源 。随着 COP26 主导了过去两周的对话,我们很高兴分享我们刚刚推出的数据科学+气候变化课程。它收集了近 30 篇文章,涵盖了利用数据科学解决气候危机的挑战和前景。
- 关于 AI 与人类合作的细致入微的对话 。在 TDS 播客中,Jeremie Harris 欢迎 Ayanna Howard,一位经验丰富的机器人专家、企业家和俄亥俄州立大学工程学院院长。他们放大了信任的问题:我们需要做什么来建立激发人类用户信任的人工智能系统?
我们希望你今天能抽出时间来看看我们作者的最新文章(或者为我们的一些周末推荐做书签)——你不会后悔的!如果你想进一步支持这项工作,考虑成为中级会员。
直到下一个变量,
TDS 编辑器
我们策划主题的最新内容:
入门
实践教程
- 用 Python 制造数据分析:动手示例作者 Tirthajyoti Sarkar
- Caret vs. tidymodels:由 Hannah Roos 创建可重用的机器学习工作流
- 如何设置 AB 测试中的最小可检测效应作者丹尼斯·迈斯纳
- 时间序列的傅里叶变换由 Joos Korstanje
深潜
思想和理论
为什么你需要停止使用庞大的神经网络模型
…而是提取他们的知识。
在大学期间,一个人会接触到各种各样的人。在所有的种类中,我特别羡慕一种特殊的类型。这些人整个学期都不会学习。在考试的前一天,他们会下载一个高水平的主题,最后在考试中创建一个有针对性的答案视图,以成功通过考试。
我一直以为他们是被祝福的。拥有从高水平的学习中提取精华的能力,以及将这种能力转化为具体观点的能力,简直令人钦佩。
我永远做不到,甚至没有勇气去尝试。
最近,在我遇到的一个基于学生和教师的框架中,感觉就像一个赵雨菁。一次具有相同个性的替代性会面。
简单来说,在学生-教师框架中,学生模型(一个轻型神经网络)从教师模型(一个复杂的神经网络)中学习“提炼”的知识。这导致“轻”学生模型具有“重”教师模型的知识,具有相似或稍低的准确度水平。
在这篇文章中,我们将讨论对这样一个框架的需求,蒸馏过程是如何工作的,以及最后学生模型是如何被微调的。
为什么是师生框架?
“如果它不适合你的口袋,它就没有销路”
随着迁移学习模型和其他复杂神经网络(NN)模型的出现,模型的准确性显著提高。毫不奇怪,这是有代价的。多个神经网络层和众多参数通常会导致庞大的模型,这需要高计算能力来部署。这极大地限制了它们的使用和销售。
显然需要具有相似精确度的更轻的模型。需要一种方法将这些庞大复杂的模型压缩成更小的尺寸,而不显著降低精度。
这就是学生-教师框架的目标。
什么是师生框架,它是如何运作的?
在学生-教师框架中,利用复杂的 NN 模型(新的或预训练的)来训练较轻的 NN 模型。从复杂的 NN(老师)到较轻的 NN(学生)传授知识的过程叫做**“蒸馏”**
在深入了解蒸馏过程之前,理解两个术语非常重要:
- Softmax 温度:这是 Softmax 的调整版本。Softmax 函数创建跨分类类别的模型输出的预期概率分布,确保概率总和为 1。Softmax 温度做同样的事情,但是另外它将概率更多地分散在类别中。(见下图)扩散程度由参数“T”定义。T 越高,概率在类别间的分布就越高。T = 1 与正常的 Softmax 相同。
作者图片
请注意,虽然与直觉相反,但在许多情况下,为了获得各种潜在的结果,“软”概率是首选的。例如,在文本生成中,人们期望有更大的潜在选项集来生成多样化的文本。
在蒸馏过程中,模型中不使用 Softmax,而是使用 Softmax 温度。
2.**暗知识:**在 Softmax 温度的例子中,由于 Softmax 参数“T”的变化,我们从概率分布中获得的所有“额外知识”被称为暗知识。换句话说,通过使用 Softmax 温度(T > 1)而不是 Softmax 获得的增量知识是暗知识。
蒸馏过程工作如下:
1.训练(或使用预训练)复杂(比方说 10 层)“老师”模型。不出所料,这是一个计算密集型步骤。教师模型的输出将是跨类别/标签分布的 Softmax 温度输出概率。
2.以“学生层”的 Softmax 温度输出尽可能接近“教师”模型的方式,创建并训练一个更简单的(假设 2 层)“学生”模型。为此,学生和教师之间称为**“蒸馏损失”**的交叉熵损失应最小化。这就是所谓的“软瞄准”。通过这种方式,我们将“黑暗知识”从老师传递给学生。注意,这里的知识是跨各个层面传递的,而不仅仅是最后的损失。
这里出现的一个显而易见的问题是,我们为什么要瞄准软目标(一个展开的概率分布)。这是因为软目标比硬目标提供更多的信息。这导致更小的模型更有知识,从而需要更少的额外培训。
3.同时,使用 Softmax 激活(不是 Softmax 温度)训练“学生”模型,以使模型输出尽可能接近实际值。为此,学生和实际之间的交叉熵损失被称为**“学生损失”被最小化。这叫“硬瞄准”。**
4.对于#2 和#3,最小化总损失- ,即蒸馏损失和学生损失的加权和,。
**损耗= a 学生损耗+ b 蒸馏损耗
概略地说,所提到的过程可以描述如下:
作者图片
结论:蒸馏(学生-教师框架)是一个很棒的模型无关工具,可以在没有太多计算能力的边缘设备上部署模型。虽然理论上该框架可以应用于任何大型神经网络模型;我个人已经看到它被用于一个 6 层 CNN 模型和蒸馏伯特。随着大量边缘设备的出现,我预计这个框架很快就会无处不在。
快乐学习!!
PS:为那些帮助我为这篇文章动笔的了不起的大学名人干杯!
免责声明:本文表达的观点是作者以个人身份发表的意见,而非其雇主的意见
为什么需要使用 Geopackage 文件而不是 shapefile 或 GeoJSON
伦敦公路网与优步游乐设施的图像。如 Youtube 视频所示。
当前矢量数据标准格式
如果您一直在使用矢量数据并进行空间分析,您应该知道 shapefile 和 geojson。这是两种最常用的矢量数据格式,用于存储数据和执行任何空间分析。特别是 GeoJSON,它已经成为向 web 应用程序提供数据的首选格式。但是,当您希望扩展您的工作并为大规模部署构建集成的自动化工作流时,这两种格式都有很多缺点。Geopackage 格式在这方面提供了多种功能。这就是为什么您需要使用 Geopackage 文件而不是 shapefile 或 GeoJSON。让我们更深入地了解细节。
如果你想了解更多关于地理空间数据以及它如何改变数据分析领域的信息,请点击这里的查看我的博客。
https://www.samashti.space/articles/why-geospatial-data-is-the-way-forward-in-data-analytics https://www.samashti.space/articles/download-rainfall-satellite-data-from-chrs-data-portal-using-python
Shapefiles 的问题
Shapefiles 已经存在很长时间了。ESRI 在 20 世纪 90 年代早期开发了这种格式&从那时起,它已经成为人们广泛采用的处理和共享矢量数据的标准格式之一。Shapefile 存储非拓扑矢量数据以及相关属性数据。尽管它被广泛使用,但对于现代用例来说,它有相当多的&显著的缺点;
- Shapefile 是一种多文件格式。您保存的每个矢量层至少有 3 个文件(。shp,。shx &。dbf)和其他几个不同扩展名的附加文件。因此,如果您想与他人共享 shapefile,您必须共享一个图层的所有文件。如果你有几层,文件的数量就很大。每个项目的文件数量为 4-6 倍并不理想。
- Shapefile 支持类似于带有列标题的表格数据集的相关属性数据。但是您只能使用十个字符来定义列标题,并且在列标题上需要一些描述/标识的情况下,使用列标题的缩写形式并不总是理想的。
- 形状文件的最大大小为 2GB。不能将包含更多可能超过 2GB 的要素的矢量图层导出为 shapefile。
- shapefiles 在一个文件中不能有多个几何类型。
- 随着 shapefile 大小的增加以及处理更多的属性列和行,shapefile 的性能会急剧下降,甚至在 QGIS 上使用空间索引时也会变得缓慢。
GeoJSONs 的问题
创建 GeoJSONs 部分是为了解决 shapefiles 的多文件问题。作为 web 应用程序上使用的 JSON 对象的扩展,它确实解决了 shapefiles 提出的一些问题。但是它有自己的一套限制;
- 对于具有属性的类似数量的矢量要素,在大多数情况下,GeoJSON 的文件大小几乎是 shapefile 的两倍。
- GeoJSONs 没有空间索引。因此,在处理大量特性时,这很难处理。大多数时候,在 QGIS 地图画布上浏览空间要素是一项令人厌倦的任务。
- 每当您加载文件来运行一些任务时,整个文件都会被一次加载到内存中,这可能会在一些情况下产生问题,尤其是对于大文件。
- 此外,与 shapefile 和 geopackages 相比,文件的加载通常较慢,但内存消耗相似或更多。
- 如果文件大小超过了某个限制(根据我的经验,大约是 10–11gb),这些特性可能会写得不完整,从而导致文件损坏。
什么是 GeoPackage?
由 OGC 开发的地理空间信息开放格式,他们定义地理包如下;
GeoPackage 是一种开放的、基于标准的、独立于平台的、可移植的、自描述的、紧凑的地理空间信息传输格式。
geopackage 本质上是一个 SQLite 容器,采用 OGC 编码标准来存储矢量要素、切片矩阵(栅格数据)、非空间属性数据和扩展。
默认情况下,每个 geopackage 文件都有一些元表,如下所示,用于理解和处理地理空间图层。
'gpkg_spatial_ref_sys',
'gpkg_contents',
'gpkg_ogr_contents',
'gpkg_geometry_columns',
'gpkg_tile_matrix_set',
'gpkg_tile_matrix',
'gpkg_extensions',
'sqlite_sequence',
优势
- 开源,基于 SQLite 数据库
- 非常轻量级,但跨环境高度兼容(尤其是。在连接和带宽有限的移动设备中)
- 与 shapefiles 相比,Geopackages 的文件大小通常要小 1.1-1.3 倍,而 geojsons 的文件大小则小近 2 倍。
$ fs road_network/*
193M road_network/roads.geojson
70M road_network/roads.gpkg
81M road_network/roads.shp
- 由于 geopackage 中的矢量图层本身具有 rtree 索引(空间索引),因此在 QGIS 上加载文件或在文件数据库上进行查询的速度很快。
- 文件大小没有限制,它可以在较小的文件中处理大量的功能。
- 与 shapefiles 相比,通过为每列提供正确的上下文,列标题可以是全名和正确的。
- 与 shapefiles 相比,geopackages 的运行和算法输出速度更快(您可以在 QGIS 上尝试)。
- 单个 geopackage 文件可以有多个矢量图层,每个图层都有不同的几何类型。
$ ogrinfo ./outputs/road_network.gpkgINFO: Open of './outputs/road_network.gpkg' using driver 'GPKG' successful.1: roads_area_hex8_grids (Multi Polygon)
2: roads_area_hex9_grids (Multi Polygon)
3: roads_area_major_segments (Multi Polygon)
4: roads_network_lines (Line String)
5: roads_poly_line_vertices (Point)
6: roads_intersection_node_points (Point)
7: roads_end_node_points (Point)
- 除矢量图层外,您还可以拥有非空间属性表(熊猫表)。
$ ogrinfo ./india_villages_master_2011.gpkgINFO: Open of './india_villages_master_2011.gpkg' using driver 'GPKG' successful.1: village_data_master (None) # (non-spatial)
2: village_codes_mapping (None) # (non-spatial)
3: village_points (Point)
4: village_voronoi_polygons (Multi Polygon)
- 随着数据的更新,我们会定期对矢量图层进行修改。在 QGIS 或 python 上加载和编辑 geopackage 文件的功能会更快。
- 可以使用 GDAL、QGIS、Python、R、SQLite 和 Postgres 处理该文件(对每种模式的限制很少)
- 与 shapefile 或 geojson 相比,将 geopackage 添加和加载到 Postgres 数据库要快得多(对于一些较大的数据集,这需要花费很长时间),因为它已经是一种数据库格式,并且已经进行了空间索引(与 shapefile 或 geojson 相比)。
- 有趣的是,geopackages 还可以将栅格作为切片矩阵来处理。(当然,这也有一定的局限性)
如何在他们的工作流程中使用它?
与 shapefiles 和 GeoJSONs 相比,我们了解使用 geopackage 文件的优势。但是,我们如何以及在多大程度上可以将地理包文件集成到我们的空间分析工作流中?让我们探讨几个选项。
- 大型输出文件
- 平铺表格/多层文件
- 减少/避免输出的冗余文件
- 空间视图
- 仅将部分矢量图层加载到内存中
- 处理地理硕士
- 一个文件中的在制品(WIP)层
- CartoDB 的文件导入
- 样品、默认颜色样式和其他属性
以上几点在我的博客上都有详细的解释。前往我的博客阅读更多关于如何使用 geopackage 来加快空间分析工作流程的信息。
GPAL
GPAL (Geopackage Python 访问库)是我为了解决使用 geopandas 读取和处理 Python 中的 Geopackage 文件的一些限制而构建的。我上面提到的 geopackage 格式的一些特性在 Python 中没有方法。因此,我开始构建一个模块。
目前,该模块可以使用 SQL 查询读取和处理 geopackage 文件上的文件操作,类似于 sqlite 数据库上的 sqlite3 模块。它有助于将部分矢量数据加载到内存中,而不是整个图层。目前,我还在开发其他一些功能。
有什么计划?
- 由于 geopackage 同时处理空间和非空间表,因此有必要从 python 模块中一致地处理这两种数据表。
- 表视图是数据库的一个特性,因为 geopackage 是基于 SQLite 的,所以我们可以将其扩展到空间视图,就像我上面提到的那样。但是它涉及到处理 geopackage 文件中的 gpkg 元表,并且需要用自己的方法来处理。
- 不同工作流中多层格式文件的处理方法。
Geopackage 是一种非常轻便且高度兼容的矢量文件格式。您可以节省大量存储空间,处理更少的文件,更快地运行算法和可视化。成为持续更新的开源格式是锦上添花。这种格式的所有当前和潜在的特性激励我参加 GPAL 项目,开发一些东西,我希望在 Python 上使用 geopackage 时增加更多的通用性。
我希望本文能帮助您理解 geopackage 相对于其他矢量文件格式的特性和优势。我很乐意收到任何进一步改进的建议。
如果你喜欢这个博客,就订阅这个博客,并在以后的博客文章中得到通知。如有任何疑问或讨论,你可以在 LinkedIn 、 Twitter 上找到我。查看我之前的博客,了解如何通过 python 脚本使用 QGIS 空间算法。
https://www.samashti.space/articles/how-to-use-qgis-spatial-algorithms-with-python-scripts https://www.samashti.space/articles/how-alternative-data-helping-companies-invest-big
一些转换
从命令行使用 GDAL
-
将形状文件转换为地理包
$ ogr2ogr -f GPKG filename.gpkg abc.shp
-
所有文件(shapefile/geopackage)将被添加到一个地理包中。
-
将地理包添加到 postgres 数据库
$ ogr2ogr -f PostgreSQL PG:"host=localhost user=user dbname=testdb password=pwd" filename.gpkg layer_name
为什么你从来没有真正验证你的分析方法,除非你使用总误差方法
第二部分:生产者和消费者风险
照片由比尔牛津在 Unsplash。
Thomas de March in(pharm Alex 统计和数据科学高级经理)、Milana Filatenkova(pharm Alex 统计和数据科学经理)和 Eric Rozet(pharm Alex 统计和数据科学总监)
这是分析方法验证中总误差方法系列文章的第二篇。如果你错过了第一篇文章,我鼓励你阅读它,以熟悉总误差概念和我们下面要讨论的内容:https://towardsdatascience . com/why-you-never-true-validate-you-analytical-method-unless-you-use-the-total-error-approach-part-CB 2247874 CD
现状是——验证结果经常被过度信任。通过验证评估的方法通常被认为足以声称其性能可靠。然而,重要的是要记住,在统计学中,没有什么可以保证 100%的信心。一个概率标签必须被放在任何陈述上,以便给它冠上一定程度的信任。100%的置信度可能仅归因于在研究了所有可能样本后做出的陈述——这是一种理想的情况,在现实中是不可能的。在分析方法验证的背景下,在整个人群中测试一种方法意味着进行无数次测量。实际上,方法的性能是根据一个样品的一些测量值来估计的,该样品是无限个可能样品(即总体)中的一个,因此是不确定的。
让我们用图 1 来解释这个概念。假设我们有一个方法,它的相对偏差为+1.5%,精确度 CV 为 2.5%。你永远不会知道真正的价值是什么,因为它需要进行无数次的测量来确定真正的价值。相反,您将尝试通过仅进行几次测量来评估您的分析方法的性能(假设每个浓度水平 3 个系列 3 次重复,这是行业中常用的有限设计)。如图 1 所示,每次做这个练习,您都会得到不同的真实度和精确度的估计。实际上,这种练习只进行一次,希望估计值接近真实值。
现在,让我们假设您的验证标准是真实度±2%的相对偏差和精密度±3%的 CV(制药行业中常见的值)。上述示例中真实度为+1.5%且 CV 为 2.5%的方法应该有效,因为这些参数的真实值包含在各自的验收标准中。然而,由于我们是在样本上估计这些参数,我们可能会意外地得到高于接受标准的估计值,如图 1 中的第二个例子。在这种情况下,您将声明您的方法无效,而它实际上是有效的。另一方面,可能会发生相反的情况。您可能有一个实际偏差和/或精度高于验证标准的方法,并且意外地获得了可接受限度内的估计值。在这种情况下,您应该声明该方法有效,而实际上它无效。第一种情况是生产者风险(拒绝有效方法的风险),而第二种情况是消费者风险(接受无效方法的风险)。
图 1:根据从样本中获得的信息对总体进行推断的过程。图片作者。
Bouabidi 等人(2010 年)调查了与使用经典描述性方法(即分别评估精确度和真实性)和总误差方法(即同时评估精确度和真实性)相关的风险。图 2 用已知精度 CV 和已知偏差的不同组合对计算机模拟方法的模拟验证实验说明了这些风险。已知偏差范围为 5 至+5%,已知中间精度 CV (RSD)范围为 0%至 5%。重复的数量固定在 J = 3,使用的系列 i 的数量为 3 和 10。接受标准设定为相对偏差 2%,描述性方法的 CV 为 3%,总误差为 5%,风险为 5%。这些值是药物制剂中活性成分一致性评价框架内使用的典型限值。
图 2:使用描述性(a,b)和总误差(c,d)方法的模拟结果——在方法的可能精度和偏差范围内绘制的等概率曲线。接受一种方法的概率沿着等概率曲线保持不变,因为真实精度和偏差是变化的。左图和右图显示了每次模拟中测量次数不同的模拟设置的结果。I 是系列数,J 是重复数,R 是系列间方差与重复性方差的比值(此处设置为 1)。[−λτ;+λτ]是真实度的接受极限,λRSDIP 是精度的接受极限。在 95%的概率下,总误差的可接受极限为 5%。所有图中出现的连续红色钟形曲线是一条理论曲线,它界定了方法确保 95%的结果在总误差的 5%验收限值内的区域。图从 Bouabidi 等人(2010 年)处复制并修改。
模拟过程如图 1 所示。每次迭代都是从给定精度和真实度的分布中选取样本。然后,基于这些样本估计精度和真实度(对于描述性方法)或总误差(对于总误差方法),并与预定义的标准进行比较,以评估方法的有效性。这一过程重复数千次,根据估计的真实性和偏差(“描述性”方法)或总误差(“总误差方法”)确定方法有效性。接受具有给定精度和偏差的模拟分析方法为有效方法的概率计算为该方法成功验证的实验与进行的实验总数的比率。
图 2 中绘制的曲线是等概率曲线,沿着这些曲线,方法的精度和准确性是变化的,但是成功验证的概率保持不变。例如,在图 2a 中,标有 75%的等概率曲线显示了所有可能的精度和真实度的组合,这些组合导致相关方法有 75%的机会使用描述性方法被宣布为有效。
为了评估这些等概率曲线,我们需要一个比较参考——一条 100%等概率曲线(图中以红色显示)。对于沿着该曲线的偏差和精度的每个组合,执行完美的验证过程,其中包括至少 95%的无限数量的样品测量落在 5%的总误差限度内。在这个理想的设置中,不是从有限的样本量来估计偏差和精度,而是采用真实值来产生测量值。
现在让我们看看我们能从这些数字中学到什么。
在描述性方法的框架内,任何已知偏差和精度的组合超出验收限值所定义的矩形的方法都应被宣布为无效。然而,由于偏差和精度估计的不确定性,通常使用 3 个系列 3 次重复的实验设计(图 2a ),这种方法也以 35-55%的显著概率接受真实性或精度值略大于各自接受极限的有效方法。这种验证设计会导致两个验证中有一个被错误地分类为有效。这个例子表明,描述性方法可能与相当大的消费者风险有关。另一方面,任何验证参数落在接受矩形内的方法都应该被声明为有效。然而,在图 2 中,我们看到有很大的几率(25–45 %)剔除在各自接受范围内具有已知真实度和精度值的方法。这个例子表明,大量完全可以接受的方法最终可能会因为使用这种方法而被丢弃——这是一个生产者面临重大风险的场景。
在样本量相同的情况下,与描述性方法相比,总误差方法提供的消费者风险较小,但生产者风险较高。在总误差法下,消费者风险得到更好的控制,因为对于小样本量,错误声明方法有效的风险低于 35%(图 2c),而对于描述性方法,这一风险高达 55%。另一方面,总误差法的生产者风险更高,因为我们看到这种方法拒绝有效方法的概率达到 65%以上。相比之下,描述性方法的最大生产者风险为 45%。对于总误差法,当增加样本量时(图 2d),消费者和生产者的风险都会降低,因为这些方法的参数估计得更好。
通过增加样本量,有可能减少真实性和精确度估计的不确定性,这将导致等概率曲线收敛到 100%的理想等概率曲线,其中生产者和消费者的风险最小。事实上,在样本量很小的情况下,您可能会意外地选取几个极端样本,得到的估计值与真实值相差甚远。通过增加样本量,可以降低挑选极端样本的风险
值得注意的是,增加样本量,从而降低消费者/生产者的风险,在实现验证目标方面对描述性方法的影响有限,验证目标是保证未来的测量值接近真实值。事实上,当测量次数趋于无穷大时,在全逼近下生成的等概率曲线向理想验证曲线收敛(图 2c 和图 2d 中的等概率曲线具有非常接近红色连续双曲线的形状),而在描述性逼近下生成的曲线向验收极限定义的矩形收敛。在与接受极限相对应的值下,对于具有无限样本量的描述性方法,错误接受或拒绝有效分析方法的风险为 50%。换句话说,描述性方法的可接受范围与验证的目标不一致,验证的目标是保证至少 95%的由宣布有效的方法产生的结果在总误差的 5%可接受范围内,无论用于测量的样本大小如何。
在开始验证阶段之前,可以(也建议)确定要执行的最佳实验数量(系列数量和系列重复次数),以确保做出正确的决策。这些最佳数字将基于对该方法的精确度和真实性的猜测。这些猜测可以通过分析分析方法的预验证、开发或优化阶段的结果来获得。正如我们在上面看到的,进行太少的实验会导致拒绝一个可接受的分析方法。相反,过多的实验会导致功率过大,使验证阶段比必要的时间更长,成本更高。在这两个极端之间找到一个平衡点是很重要的,也就是要进行的实验的最佳数量。表 1 显示了使用总误差方法在 95%的情况下实现验证所需的最小推荐样本量的示例,未来测量超出验收限值的风险小于 5%(此处设置为 10%)。在本例中,系列 I 和系列重复次数 J 的推荐数量是系列间σb 和系列内σw(或重复性)期望值的函数,均以%CV 表示。如果预期分析方法具有 1%的已知σw 和 1%的已知σb,则在 95%的情况下达到成功的最小系列数和每个系列的最小重复数分别为 3 和 4。当预期具有 3%的已知σw 和 0.5%的已知σb 时,则最小系列数为 6,每个系列的最小重复数为 5。
表 1:当验收限值设置为 10%且预期相对偏差约为 2%时,系列 I 和系列 J 的推荐数量作为系列间σb 和系列内σw(重复性)%CV 期望值的函数。该表是使用 Enoval 软件(https://www.pharmalex.com/enoval)生成的。
总之,本文展示了与验证相关的两个风险:将无效方法声明为有效的风险(消费者风险)和将有效方法声明为无效的风险(生产者风险)。我们已经看到,如果样本量为 3 个系列,每个系列 3 个重复,这是行业中常用的设计,这些风险可能非常高。为了控制生产者的风险,建议在进行验证之前确定要进行的实验的最佳数量。当比较描述性方法和总误差方法时,已经表明无论样本大小如何,与前者相比,后者的消费者风险明显较低。对于总误差法,可以控制在可接受范围内获得结果的概率,即了解分析方法结果的可靠性。这是用描述性方法得不到的重要信息。当增加样本量时,总误差方法的生产者风险降低。最后,在考虑的两种方法中,只有总误差方法有潜力实现验证的目标:你能相信你的结果在整个产品生命周期中做出充分的关键决策吗?
文献学
布阿比迪、a、e .罗泽、m .菲莱、e .齐蒙斯、e .查普泽、b .默滕斯、r .克林肯伯格、a .塞卡托、m .塔尔比、b .斯特雷尔、a .布克卢泽、b .布朗热和 Ph .休伯特。2010."在符合目的概念的框架内对几种分析方法验证策略的批判性分析."色谱杂志 A 1217(19):3180–92。doi: 10.1016/j.chroma
为什么你从来没有真正验证你的分析方法,除非你使用总误差方法
意见
第一部分:概念
图片来自 Pixnio。
Thomas de March in(pharm Alex 统计和数据科学高级经理)、Milana Filatenkova(pharm Alex 统计和数据科学经理)和 Eric Rozet(pharm Alex 统计和数据科学总监)
任何分析方法的一致和有效使用都需要在使用前了解其可靠性。因此,每个实验室都有必要验证他们的分析方法。验证不仅是监管机构[ICH、FDA、GxP]或为了获得认证[ISO 17025]的要求,也是常规使用该方法前的必要步骤。分析方法验证的作用是为实验室生成的结果提供信心,这些结果将在以后用于做出关键决策。
验证必须给出信心,即在常规中产生的每个未来测量值将足够接近真实值。这项工作通常通过评估方法性能的不同特征来进行,例如真实性(在 ICH Q2 中也称为准确性)、精密度(重复性和中间精密度)、特异性、检测限、定量限、线性、范围和稳定性。为了确定方法是否有效,将验证实验中获得的这些参数的测量值与预定义的验收标准进行比较。
在这里,我们将重点讨论真实和精确的概念。分析误差通常分为两部分(图 1):随机误差(在此称为“精度”)和系统误差(在此称为“真实度”)。分析误差的这两个要素可以通过对同一样品的多次重复测量来估算。值得注意的是,在多个独立的重复测量系列上测量的精度可以进一步分为重复性和系列间可变性,并被定义为“中间精度”。精度计算为重复测量的标准偏差(SD ),真实度计算为重复测量的平均值(Xm)和参考值(T)之间的差值。在实践中,在验证这两种类型的误差时最常报告的指标是:精确度的%CV (SD/ T100)和真实性的相对偏差((Xm- T )/ T100)。
图 1:分析误差分量的示意图;橙色箭头:系统误差或偏差;绿色箭头:随机误差或标准差;红色箭头:总误差。Xm 是结果(红点)的平均值,T 是样本的真实值。图片作者。
如上所述,通常的做法是将验证过程中获得的指标与一些预定义的验收标准进行比较(例如,精确度为 15% CV,真实性为 10%相对偏差),以确定方法是否有效。这就是所谓的“描述性”方法。但是等等…让我们回到验证的最初目标:验证必须给出信心,即在常规中进行的每个未来测量将接近真实值。本声明关注单个未来测量,而非重复测量的平均值或离差。如图 1 所示,单次测量取决于其总分析误差(本文也称为准确度),,即误差的系统部分和随机部分的同时组合。因此,这两部分各自的影响是不相关的。事实上,一种分析方法的准确性差还是精度差并不重要,只要两种误差成分的组合是可接受的。
由于评估精确度和真实性并将其与预定义的标准进行比较并不能回答验证的问题,因此程序应根据其总误差进行鉴定。如果样品的每个未来测量值(Xi)与其“真实值”(T)之间的差异极有可能(“保证”)在分析员预定义的接受限度内,则可认为分析方法的性能是可接受的。具有已知风险的“良好分析程序”的概念可以转化为以下等式:
p 表示任何未来结果在验收限值内的概率,验收限值由分析员根据方法目标事先确定(λ,例如±30%),应大于最低质量水平β(假设为 0.95)。
但是如何表示这种可能性,以及如何决定标准呢?准确度剖面可作为该决定的适当规则(Hubert et al . 2004 休伯特、阮胡夫、布朗热、查普塞特、恰普等人,2007 年;休伯特、阮胡夫、布朗热、查普塞特、科恩等人,2007 年)。图 2 显示了一个精度曲线的例子。对于每个浓度水平,计算预测区间(也称为β-预期公差区间)以评估未来 95%测量的预期相对误差范围。这个区间是根据分析方法的偏差和精度的估计值计算出来的。然后,一方面的预测区间的下限和另一方面的上限被连接。图 2 中的绿色区域描述了剂量间隔,在该剂量间隔内,该程序能够产生具有已知准确度的测量值和由分析员确定的风险水平。例如,如果分析员预设了 5%的可接受风险水平,该验证方法将保证其分析方法给出的未来结果的平均 95%将包含在根据要求确定的可接受限度内(例如:散装 1%或 2%,特殊药品 5%,生物分析 15%,)。
图 2:作为决策工具的精确度分布图。在本例中,在 5 个浓度水平下进行了 3 系列测量。每个测量的相对误差由点表示。两条蓝色虚线之间的区域表示预测区间,在该区间内,我们预计未来测量值的 95%。浅绿色区域代表有效剂量范围。这个数字是使用 Enoval 软件(【https://www.pharmalex.com/enoval】T2)生成的。
如图 2 所示,如果准确度分布图的一个子部分超出了可接受的限度,则需要定义新的定量限度,因此需要定义新的剂量间隔。图 2 显示了这些新的限值 ULOQ(定量上限)和 LLOQ(定量下限),它们与该标准的定义完全一致,即可分别以规定的准确度(真实度+精密度)测量的待分析物质的最高和最低量。
使用准确度剖面作为单一决策工具,不仅可以使验证的目标与分析方法的目标相一致,还可以直观地掌握程序实现其分析目标的能力[Hubert et al . 2004;休伯特、阮胡夫、布朗热、查普塞特、恰普等人,2007 年;休伯特、阮胡夫、布朗热、查普塞特、科恩等人,2007 年】。随着即将发布的 USP 1220 和 ICH Q14 中开发出新的分析质量设计(aQbD)和分析程序生命周期概念,这最后一点变得更加重要。为了证明分析方法符合其预期目的,USP 1220 规定验证标准应符合产品和工艺需求的质量标准。在这种情况下,总误差方法的使用极大地方便了在其使用环境中对该方法性能的解释。事实上,结果的最终用户将它们的质量与它们到真实值(即总误差)的距离联系起来,而不是与它们各自的离差或偏差联系起来。同样值得一提的是,USP 1210 建议使用预测区间来评估分析方法是否适合其预期目的。
总之,我们看到总误差法是一种合适的方法,可以满足验证的目标,并证明该方法适合目的。它是实施 aQbD 和分析程序生命周期概念的关键工具。
在第二部分中,我们将看到,与传统的验证方法相比,总误差方法在降低商业和消费者风险方面也有很大的优势。
文献学
USP 第<1210>章用于程序验证的统计工具
USP 草案章节<1220>分析程序生命周期
休伯特博士、阮胡杰、布朗热、查普泽、基亚普、科恩、孔波尼翁、杜维、范伯格、拉利耶、劳伦提、梅塞尔、穆扎德、尼维特和瓦拉特。2004.“定量分析程序验证策略的协调:SFSTP 建议—第一部分”,药物和生物医学分析杂志36(3):579–86。2004 年 7 月 27 日
休伯特博士、阮胡杰、布朗热、查普泽、基亚普、科恩、孔波尼翁、杜维、范伯格、拉利尔、劳伦提、梅塞尔、穆扎德、尼维特、瓦拉特和罗泽。2007."定量分析方法验证策略的协调:SFSTP 建议-第二部分."药物和生物医学分析杂志45(1):70–81。2007 年 6 月 13 日
休伯特博士、阮胡杰、布朗热、查普泽、科恩、孔波尼翁、杜韦、范伯格、劳伦提、梅塞尔、穆扎德、瓦拉特和罗泽。2007."定量分析方法验证策略的协调:SFSTP 建议-第三部分."药物和生物医学分析杂志 45(1):82–96。2007 年 6 月 32 日
为什么您可能不需要雇用数据科学家(还不需要)
首先关注数据基础设施和决策
在 Unsplash 上由 Carlos Muza 拍摄的照片
介绍
作为一名机器学习工程师,我注意到在过去几年中,数据职位的确切职责一直在不断变化。这意味着任何公司都不再确定所有数据角色之间的差异,这可能导致不适合该角色,特别是在初创公司或早期公司。在本文中,我们将探讨为什么,除非你心中有一个确切的数据科学或机器学习项目,否则在早期全面雇佣数据科学家可能是不正确的。
所以你已经决定你需要数据驱动,哪怕只是为了打通跨业务的多个功能,提出只能由分析师(或他们的整个团队)回答的问题。
这就是企业决定雇佣一群数据科学家来解决所有业务需求的原因。毕竟,数据科学家是市场上最热门的数据商品,能够使用统计和机器学习解决问题。他们将能够回答所有的业务问题,并使公司成为数据驱动型公司……对吗?
是也不是。
数据路线图
雇用数据科学家来解决所有数据问题的关键问题是,“数据”包含非常广泛的技能,从查询数据,到建立管道和建立机器学习模型。一个数据科学家不太可能拥有所有这些技能,如果他们拥有,他们几乎肯定没有机会像专家一样深入发展这些技能(当然,除非你发现了一个神话般的数据科学独角兽)。
除非你有一个以人工智能为中心的产品,否则对大多数公司来说,通过拉动数字和回答因果问题来快速推动商业决策的能力,比花几个月时间开发一个单一的机器学习模型要重要得多。因此,组织层面的典型高级数据驱动路线图可以分为 3 个主要阶段:
- 仪表板和 KPI(反应式决策制定)—使业务利益相关者能够根据数据做出决策
- 战略建议(主动决策)—通过基于对数据的主动分析提出业务建议来推动价值
- 机器学习和自动化—自动化流程,并根据模型预测主动提出业务建议
以下是每个阶段(2021 年)所需的典型职位,请注意,数据科学/机器学习技能仅在第 3 阶段需要**😗*
- 数据工程师(数据管道)、分析工程师(转换表)、数据分析师(仪表板)
- 数据分析师/数据科学家(与利益相关方合作)
- 数据科学家/机器学习工程师(机器学习/统计模型开发)
正确的技能组合
丹-克里斯蒂安·pădureț在 Unsplash 上拍摄的照片
那么,仅仅雇佣数据科学家就能回答所有的业务问题,并让公司成为数据驱动型公司吗?
在某种程度上,许多数据科学家确实有能力在其工具箱中涵盖多个角色。数据清理技术、表格转换以及执行策略和仪表板的分析技术只是其中的一些例子。然而,他们可能不像数据工程师那样有丰富的协调数据管道的经验,不像分析工程师那样有丰富的设计非规范化表格的经验,也不像数据分析师那样有丰富的与高要求的利益相关者合作的经验。这一切都是为了找到这个角色所需要的正确技能,而不是找到一个能够涵盖所有角色的人(但不能同时出现在 3 个地方)。
这并不是说在路线图的第二阶段之前根本不要雇用数据科学家,他们中的许多人都非常有才华,能够推动项目向前发展,带来很多价值。只是如果你雇佣一个数据科学家单独做数据工程师或数据分析师的工作,你可能也会发现他们很快就会变得不满意。他们可能不想处理特别的 SQL 查询或提高数据可靠性。有趣的是,我认识的数据科学家喜欢在工作中发挥他们的统计和机器学习能力,因为这是他们在这个领域最喜欢的。
结论
过去几年数据科学的兴起和数据标题的不断变化使得公司热衷于雇佣数据科学家来满足他们所有的数据需求。公司(尤其是那些处于早期阶段的公司)将发现,定义他们当前处于数据驱动路线图的哪个阶段更有价值,然后更深入地挖掘不同的数据角色,以确定需要什么技能。当数据科学和机器学习项目已经进行了两年时,不要雇用数据科学家来担任数据工程师的角色。
为什么应该将强化学习添加到您的数据科学工具箱中
以及从哪里开始学习。
作为一名数据科学家,你可以学到很多东西。我敢打赌,你学到的第一件事是关于统计学、数据分析、可视化、编程、数据库、机器学习和深度学习。当你熟悉这些主题时,你可以继续学习更具体的主题,比如 GANs、NLP、云、容器化、软件工程等等。你根据自己喜欢的东西和需要的技能来选择方向。这篇博客文章解释了为什么将强化学习(RL)添加到您的数据科学工具箱中是一个不错的选择。
如果你对 RL 一无所知,想看看应用,可以看这篇文章。简单回顾一下:代理通过选择动作与环境进行交互。代理接受观察和奖励。代理人的目标是最大化报酬的总和。这个过程是一段一段发生的,代理人不断学习,越来越擅长自己的工作。
在现实生活中,学习也是如此。当你教狗听命令时,当它表现出正确的行为时,你就给了它一份奖励。如果他没有,他什么也得不到。你可以把这种情况翻译成 RL。状态是它听到的命令,动作是狗对命令做出的任何反应,奖励是款待。如果狗喜欢吃零食,它会越来越听话:)
照片由 Camylla Battani 在 Unsplash 上拍摄
警告:如果你刚刚开始你的数据科学生涯,我不建议你从 RL 开始!这是一个高级话题,你应该了解数学和深度学习。
学习 RL 的三个主要原因
为什么要学 RL?
1。许多商业问题可以用 RL 解决
RL 增加了有价值的知识,你可以用在许多商业案例中。一些例子是:
- 您可以构建一个次优行动推荐系统。假设你有客户,你想为每个客户找到最有利可图的行动。您可以为您的客户定义状态,如新客户、老客户或忠实客户。通过测试销售和营销行为,你可以找到与州相关的最有利可图的行为。
- 调度作业是另一项有趣的任务。您可以指定作业集、每个作业所需的资源和时间。代理将找到优化作业完成时间的方法。
- 自动化和机器人技术。通过使用 RL,机器人可以学习完美地执行一项任务。有些任务很难设计,RL 可以帮助完成这些任务。一个很好的例子是控制交通灯信号网络:通过奖励 RL 代理较少的延迟,代理找到了组织信号的最佳方式。它们比普通的交通灯控制机制表现得更好。
由 Eliobed Suarez 在 Unsplash 拍摄的照片
还不信服?让我们继续下一个原因。
2.你不需要带标签的数据
尽管带标签的数据在 RL 问题中很有用,但这不是必需的。你可以从零开始建立一个 RL 环境,代理会找到一种方法来最大化奖励的总和。
这是一件大事。数据准备和收集是数据科学家面临的挑战,一项调查显示,这消耗了他们几乎 80%的时间。更糟糕的是,这些是数据科学家最不喜欢的任务。通过使用 RL,可以跳过这一部分。代理可以从头开始学习,不一定需要带标签的数据。另一方面,创建一个环境可能很困难,尤其是当您刚刚开始使用 RL 并想要解决一个复杂的问题时。在这种情况下,你可以从简单开始(用最少的可行产品),并通过添加特性和试验状态、动作和奖励的不同定义来扩展你的问题。
AlphaZero ,只通过自我游戏训练,只知道国际象棋、日本象棋和围棋的规则。它超越了所有以前发明的算法,并展示了玩这些游戏的酷新方法。
来源:DeepMind
3.脱颖而出
网上有很多数据科学学习途径。你可以在 Coursera、DataCamp、Udacity 或 deeplearning.ai 等网站开始你的旅程。或者你可以拿到学士或硕士学位。这些学习路径中的大多数课程将教你如何编程,以及如何分析、可视化和建模数据。在开始的时候,这是可以的,但是在你能够执行这些任务之后,你就可以开始将自己与“普通的”数据科学家区分开来。学习强化学习可以帮助你做到这一点。
RL 不是在标准的数据科学认证项目中教授的,掌握起来真的很酷。你可以提出一个新的独特的解决方案,从不同的角度处理问题。如果你能够开发与业务问题相关的 RL 解决方案,你就能让自己从其他数据科学家中脱颖而出。
除此之外,RL 问题就像一个谜题。思考如何定义状态、奖励和行动很有趣。工作解决方案带来了积极的氛围。尝试是很好的,因为只要报酬有一点点变化,代理人就可以做非常奇怪的事情(你可能想看看这里的)。
从哪里开始学习
希望你被说服了,想开始学习 RL!以下是一些你可以在旅途中使用的资源。
强化学习,第二版:简介
萨顿和巴尔托的这本书被广泛使用,包含了你需要知道的关于 RL 的一切。
强化学习专精
由阿尔伯塔大学开发的这一系列课程是一个很好的资源。它从基础开始,帮助你真正掌握书中解释的概念和算法。完成本专业后,您将能够创建自己的环境并解决 RL 问题。
强化学习课程| DeepMind & UCL
这一系列讲座来自 deep mind(alpha zero 的创造者)并从基础开始,但也谈论高级话题。
享受学习!
如果你想在我发表新文章时收到电子邮件,别忘了订阅。 ❤
为什么应该总是对结构化数据集使用要素嵌入
图片经由 iStock 授权给迈克尔·马林
一个简单的技术来提高你使用的任何模型的准确性
在表格数据表上训练神经网络时,特征嵌入是最重要的步骤之一。不幸的是,这种技术很少在自然语言处理(NLP)设置之外教授,因此对于结构化数据集几乎完全被忽略。但是跳过这一步会导致模型准确性的显著下降!这导致了一种错误的理解,即梯度增强方法(如 XGBoost)对于结构化数据集问题总是更优越。不仅嵌入增强的神经网络通常胜过梯度增强方法,而且当提取这些嵌入时,两种建模方法都可以看到重大改进。本文将回答以下问题:
- 什么是特征嵌入?
- 它们是如何用于结构化数据的?
- 如果它们如此强大,为什么它们不更加普遍呢?
- 嵌入是如何实现的?
- 我如何使用这些嵌入来增强其他模型?
解释了特征嵌入
神经网络难以处理稀疏分类特征。嵌入是减少这些特征以提高模型性能的一种方式。在讨论结构化数据集之前,理解嵌入通常是如何使用的是有帮助的。在自然语言处理环境中,您通常会处理成千上万个单词的词典。这些字典被一次性编码到模型中,这在数学上等同于为每个可能的单词设置单独的一列。当一个单词输入到模型中时,相应的列将显示 1,而所有其他列将显示 0。这导致了一个非常稀疏的数据集。解决方案是创建一个嵌入。
作者照片,由 TensorFlow 嵌入式投影仪创作
嵌入本质上将基于训练文本对具有相似含义的单词进行分组,并返回它们的位置。因此,举例来说,“乐趣”可能与“幽默”、“跳舞”或“机器学习”等词具有类似的嵌入价值。实际上,神经网络在这些代表性特征上表现得更好。
结构化数据的嵌入
作者数据框示例
结构化数据集通常也包含 sparce 分类特征。在上面的示例客户销售表中,我们有邮政编码和商店 ID。因为这些列可能有成百上千个不同的唯一值,所以利用它们会产生与上面的 NLP 问题相同的性能问题。那么为什么不以同样的方式使用嵌入呢?
问题是,我们现在处理的不止是一个特性。在这种情况下,两个单独的稀疏分类列(邮政编码和商店 ID)以及其他强大的功能,如销售总额。我们不能简单地将我们的特征嵌入。然而,我们可以在模型的第一层中训练我们的嵌入,并在这些嵌入旁边添加正常的特性。这不仅将邮政编码和商店 ID 转换成有用的特性,而且现在其他有用的特性也不会被成千上万的列冲淡。
作者嵌入图示例
为什么嵌入被忽略
在最大的以 ML 为中心的公司中,这种技术是绝对使用的。问题是这些大公司之外的绝大多数数据科学家从未听说过以这种方式使用嵌入。这是为什么呢?虽然我不会说这些方法很难实现,但它们已经超出了典型在线课程或专业的复杂程度。大多数有抱负的机器学习实践者根本不知道如何将嵌入与其他非分类特征合并。因此,像邮政编码和商店 ID 这样的特性通常会直接从模型中删除。但这些都是重要的功能!
一些特征值可以通过像均值编码这样的技术来捕获,但是这些改进通常是微不足道的。这导致了完全跳过神经网络的趋势,因为梯度增强方法可以更好地处理这些分类特征。但是如上所述,嵌入可以改进这两个模型,这将在下一节中看到。
如何实现嵌入
这个过程中最困难的部分是熟悉 TensorFlow 数据集。虽然它们远不如 pandas 数据框直观,但如果您计划将模型扩展到大规模数据集或想要构建更复杂的网络,它们是一项很好的学习技能。
对于这个例子,我们将使用上面假设的客户销售表。我们的目标是预测目标月份的销售额。为简单起见,我们将跳过工程步骤,从预分割的 pandas 数据帧开始。对于较大的数据集,您可能不会从数据框开始,但这是另一篇文章的主题。
第一步是将这些数据框转换成张量流数据集:
trainset = tf.data.Dataset.from_tensor_slices((
dict(X_train),dict(y_train))).batch(32)validationset = tf.data.Dataset.from_tensor_slices((
dict(X_val),dict(y_val))).batch(32)
需要注意的一点是,这些张量流数据集及其后的变换不会像 pandas 数据帧那样存储到内存中。它们本质上是一个管道,数据将一批一批地通过,允许模型在太大而无法放入内存的数据集上有效地训练。这就是为什么我们输入的是数据框架的字典,而不是实际的数据。请注意,我们现在还定义了批量大小,而不是像您通常使用 Keras API 那样在训练时定义。
接下来,我们想要为邮政编码和商店 id 创建一个所有唯一值的列表。这将用于稍后创建和提取嵌入。
zip_codes = X_train['zip_code'].unique()store_ids = X_train['store_id'].unique()
现在,我们可以使用 TensorFlow 特征列来定义数据管道。根据表中要素的类型,有许多选项可供选择。请查看 TensorFlow 的 feature_column 文档了解更多信息。
# numeric features being fed into the model:
feature_columns = []
feature_columns.append(
tf.feature_column.numeric_column('gender')
feature_columns.append(
tf.feature_column.numeric_column('age)
feature_columns.append(
tf.feature_column.numeric_column('previous_sales')
# categorical columns using the lists created above:
zip_col = tf.feature_column.categorical_column_with_vocabulary_list(
'zip_code', zip_codes)
store_col = tf.feature_column.categorical_column_with_vocabulary_list(
'store_id', store_ids)
# create an embedding from the categorical column:
zip_emb = tf.feature_column.embedding_column(zip_col,dimension=6)
store_emb = tf.feature_column.embedding_column(store_col,dimension=4)
# add the embeddings to the list of feature columns
tf.feature_columns.append(zip_emb)
tf.feature_columns.append(store_emb)
# create the input layer for the model
feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
注意,在嵌入步骤中,我们必须指定维度的数量。这是指我们希望将分类列减少到多少个特征。经验法则是,您通常将特征减少类别总数的 4 次方根(例如,1000 个唯一的邮政编码减少到大约 6 个嵌入列),但这是另一个可以在您的模型中调整的参数。
现在让我们建立一个简单的模型:
model = tf.keras.models.Sequential()
model.add(feature_layer)
model.add(tf.keras.layers.Dense(units=512,activation=’relu’))
model.add(tf.keras.layers.Dropout(0.25))# add any layers that you want hereModel.add(tf.keras.layers.Dense(units=1))# compile and train the model
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
model.fit(trainset, validation_data=valset, epochs=20, verbose=2)
祝贺您,您现在已经训练了一个具有嵌入的模型!现在,我们如何从这个模型中提取这些嵌入,以提供给其他模型?只需从模型中抓取重量:
zip_emb_weights = model.get_weights()[1]
store_emb_weights = model.get_weights()[0]
请注意,嵌入图层的顺序可能会改变,因此请检查权重图层的长度是否与上面定义的唯一值的长度相匹配,以确保获取正确的图层。现在将权重保存到数据框中。
# create column names for the embeddings
zip_emb_cols = ['zip_emb1', 'zip_emb2', 'zip_emb3', …]
store_emb_cols = ['store_emb1', 'store_emb2', 'store_emb3', …]# create a pandas data frame:
zip_emb_df = pd.DataFrame(columns=zip_emb_cols,
index=zip_codes,data=zip_emb_weights)store_emb_df = pd.DataFrame(columns=store_emb_cols,
index=store_ids,data=store_emb_weights)# finally, save the data frames to csv or other format
zip_emb_df.to_csv('zip_code_embeddings.csv')
store_emb_df.to_csv('store_id_embeddings.csv')
结论
既然嵌入已经存储,我们可以将它们合并回原始数据集中。我们甚至可以使用相同的分类特征将它们合并到其他数据集中。我还没有发现一个案例,这些新的增强数据集没有提高利用它们的所有模型的准确性。试试看,我向你保证,这个过程将成为你标准机器学习工作流程的一部分。
为什么你应该在业余时间成为一名数据科学家
最好的爱好
革命。作者图片
这将是一篇观点文章,所以如果你有想法/不同意见,请评论!
如果你在数据职业领域稍有涉猎,或者主要从事数据工作,你就会知道数据科学家这个角色有多热门。自从《哈佛商业评论》的那篇文章(你知道的那篇)以来,这个领域一直主导着各地的“十大职业”和“高薪职业”排行榜。即使是现在,你也确实无法避免被一些关于这个标题的文章淹没;”数据科学家工作已死”,“数据工程师 vs 数据科学家”,“数据科学家仍然是最性感的工作”,如此多。每个人都有自己的看法,如果你和我一样,那你一定全都读过了。
在这个故事中,我不会谈论你在日常工作中“应该”做什么或成为什么样的人;相反,我想关注的是你在朝九晚五之外做了什么。
我们都因为各种各样的原因进入这个职业,我真诚地相信多样性丰富了这个领域,而不是有害的。不管这个职位的职业前景如何,我相信,如果你的目标是在日常工作之外成为一名数据科学家,那么你的职业生涯将永远是令人向往的,更重要的是,你将过上令人难以置信的有意义的生活。
在我提出我的理由并列出我认为这应该是什么样子的框架之前,让我们先制定一些基本规则:
“我不想在我朝九晚五的时间之外做任何‘工作’”
这并不是建议花更多的时间做你的日常工作。这是“持续学习”心态的延伸,但我相信这种方式会更令人愉快,并且随着时间的推移,对你来说更有价值。
如果你对每天/每周在工作之外学习一点点不感兴趣,那么我假设你根本不会读这篇文章:)
“不懂编码和数学或者知之甚少”
坚持读下去;技术技能不是我要提议的生活的先决条件。唯一的先决条件是:好奇心和韧性。
“你凭什么说我业余时间做什么?”
我很惊讶你没有先问这个问题!这就是我在职业生涯中做过/正在做的事情,我看到了我从中获得的价值。我想分享这些知识,希望其他人也能在数据领域找到一条更好的道路。当谈到这个领域的职业时,有很多模糊和挫折。我听说它的范围从入门的高门槛到达到门槛后的悲惨生活。我只是想提出一种可供选择的思维方式/方法,但是你的时间是你最宝贵的财富——不要让社交媒体上的某个随机的人告诉你如何度过它。
“…您的时间是您最宝贵的资产,不要让社交媒体上的某个陌生人告诉您如何度过时间”
既然我们已经解决了这个问题,让我们从时间开始,因为我相信这是你首先想到的。
我说的“业余时间”是指多少时间?
空闲时间的美妙之处在于它完全在你的掌控之中。显然,你在专注的事情上花的时间越多,你就能做得越好。不管怎样,你应该首先弄清楚你一天中真正有多少时间。工作之后,你的一天是什么样子的?你熬夜还是早醒?你能在一个晚上或每隔一个晚上抽出一两个小时来增长你的技能吗?你有多少周末可以用来充实自己?
对此我没有一个具体的答案,这也是我推荐这个的第一个原因:你的自主权,默认情况下,如果你选择这样做,它会成为一个有意义的选择。换句话说,如果你选择花时间去学习你不需要去做的事情,那么它的价值至少是你生活中其他事情的两倍。
计划好你的日子/周,看看你有多少时间可以用来成长,承诺并做就行了。
现在,具体做什么?
这是指作为自由职业者从事数据科学工作吗?
不会。但如果你想的话,它会的。我的意思是,无论你在哪里选择,都要致力于“让数据有用”的实践。如果这意味着做自由职业者,那么很好,你可以有一个副业,但它也可以不是为了盈利。怎么会?为什么?先从“让数据有用的实践”说起。
“让数据有用”是什么意思?
你关心哪个领域?或者更好的是,你对哪个领域感兴趣?你对特斯拉如何设计自动驾驶汽车感兴趣吗?你想看看 Spotify 的 Discover Weekly 算法是如何工作的吗?你关心美国公民自由联盟追求公平公正未来的使命吗?想想你的心在哪里无缘无故地游荡;让你的眼睛比平常睁得更大的东西将是关键的第一步。如果你真的没有,选择你最有疑问的东西。它会得到同样的回报!
现在你有了一个你感兴趣/好奇的领域,你也继承了这个领域今天面临的问题。说你真的很在乎吃绿色食品,减少碳排放。你认定你感兴趣的领域是环境/生态,并将其抽象为“社会公益”。现在这个领域有了它目前正在经历的问题。今天,工业界和学术界都在关注这些问题。一点点相当直接的谷歌搜索应该足以找到这些问题。
现在,我敢打赌,在当今时代,无论你选择哪个领域,你发现的几乎所有问题都会与数据有某种联系。可能是研究人员正在收集数据以进行评估问题的实验,或者是一些公司正在使用数据来自动解决这个问题,或者是数据质量很低,造成的伤害大于好处,或者是他们拥有高质量的数据,但没有足够的人才来帮助他们的事业。几乎每个问题,或者说大多数问题,都与数据有某种联系。
我所说的“让数据变得有用”就是试图解决这些(从根本上说是数据)问题。数据科学家是这方面的专家。他们在各自的领域用各种各样的技能做这件事,这可能是一个难以置信的挑战,因为,我相信你已经注意到了,这些都是难题。
我该如何开始解决这些问题,尤其是在业余时间?
你不需要解决这个问题,我只是建议你尽最大努力去解决你能解决的任何问题。这里的价值不在于你在业余时间解决了一个巨大的障碍;价值会在你一路走来的旅程中实现。
假设你关心美国公民自由联盟的使命,并希望实践我在这里建议的。假设你已经对这个问题做了研究,并且相对比较了解,我会谷歌一下是否有美国公民自由联盟的研究人员或工作人员在处理数据。如果你找到他们,并找到他们公开的电子邮件,恭敬地给他们发邮件询问你是否能就你一直在研究的这个问题征求他们的意见。在所有你可能发邮件的人中,也许只有少数人会回复你,但这没关系。询问他们正在做什么,以及他们是如何试图解决这个问题的。询问他们在哪些方面需要帮助,以及你是否可以贡献一部分业余时间来免费帮助*(如果你要钱,可能不会顺利;那条路线更多的是针对传统的自由职业路线)。对你是谁,你能做什么/不能做什么,以及你在寻找什么要非常诚实。最有可能的是,美国公民自由联盟会说一些类似“ehh 我不知道我是否可以公开分享这些数据”。其实你问这个的大部分人都会这么说。作为回应,我建议询问你是否可以签署 NDA,然后提供帮助。如果没有,那就问问他们是否有办法让你在大项目的一小部分上协助保密工作。如果没有,那么至少你现在已经和美国公民自由联盟取得了联系,我保证他们会记得那些带着解决他们问题的真诚热情和他们联系的人。之后的单独路线是查看 Kaggle.com 或谷歌研究的数据集存储库,看看是否有你可以访问的开放数据集(如果你愿意,你也可以先走这条路线)。如果没有,那么检查是否有开放的 API 可供使用。您可能需要练习一些数据工程技能来链接到它并获取数据,但这仍然是一项非常值得学习的技能。*
我个人的经验是,人们真的渴望得到驱动数据从业者的帮助来解决他们的问题。假设你能够克服获取数据的障碍(签署 NDA,接受兼职实习,开放 API 等。),这是 100%要带你去一些惊人的项目。
当你有了数据集,天空就是极限。使用你拥有的任何 Python 和数据技能(它们不必完美无瑕,通常只要足以理解如何开始获得你需要的就好),并不断学习弥补差距。这个领域的每个人都有冒名顶替综合症,但我保证,如果你在做你关心的事情,这个问题会变得更容易解决。
没有任何数据、Python、统计/数学技能怎么办?
“在业余时间做一名数据科学家”的另一个好处是,宽泛的定义对你有利。有大量的低成本资源,这将是一个巨大的帮助。事实上,有很多很棒的,我甚至写了一个关于它的故事:进入数据科学。
这一领域最受重视的是应用。你如何应用你所学的技能,为什么要应用它们,这是这个领域的人们关注的最重要的标准。因此,我向非常早期的初学者推荐的对框架的唯一改变是,在你觉得已经准备好开始一个项目之后,在接触人们之前,看看 Kaggle 数据集和开放 API。它会让你在做“真正的”事情之前,对做一个项目和练习你的技能感到更舒服一点。
这在理论上听起来很棒,但这实际可行吗?
这里有两个发生在我生活中的例子:
首先,我成为了密歇根大学计算机视觉项目的无偿研究助理。我已经在大学攻读应用数据科学的硕士学位,在休假期间,我在 Coursera 上参加了这个【惊人】深度学习专业课程。我安排了工作和学校之外的时间来适当地致力于此,并且能够很好地完成我的工作。几个月后,我变得如此优秀,以至于我以更快的速度完成了我的课程。这给了我更多的时间,我觉得我已经准备好尝试一个真正的项目了。我开始在谷歌上搜索优盟的研究项目,看到了一个与我对艺术摄影的热情完全吻合的项目。研究项目正在对密歇根大学艺术博物馆的数字化艺术作品进行计算机视觉,以检测基于种族、性别和年龄的人类表现。这是一个非常困难的问题,我肯定没有完美的技能来解决它,但是我知道我对它充满热情,所以我申请了。面试进行得很顺利,但最终他们选择了一个不同的学生,因为我已经做了很多事情。我建议如果我能免费出租。我只会贡献我的时间和精力去帮助别人,不要求任何报酬;我只想成为一名‘业余时间的数据科学家’。他们很难拒绝这个提议,所以他们同意了,我开始着手这个非凡的项目。我编写了从 API 中获取数据的脚本,进行了大量的探索性单变量和双变量分析,还应用了一些前沿模型来构建 MVP(以后会有相关报道)。由于日程安排的限制,最终我不得不在看到项目结束前离开,但我能够做出相当有意义的贡献,并看到我的技能在我参与的这段时间里有了巨大的增长。一路上,我建立了一些真正令人难以置信的关系,当这个项目完成时,我非常兴奋地看到它在乌玛的艺术展览中变成现实!作为一名摄影师,这个项目将永远在我心中占据一个特殊的位置,我非常感激我在深水区潜水来成长自己。
第二个例子与我对体育分析的热情有关。我是一个体育迷,尤其是篮球。我知道我至少需要做一些相关的数据项目,但不知道是什么。在参加了网络分析课程后,我深深地爱上了这个话题,以至于我开始在业余时间阅读研究论文。我看了一篇关于研究人员如何通过网络分析视角分析足球欧洲杯世界总决赛数据的研究论文,我的眼睛瞬间亮了起来。他们通过球员如何传球的数据来分析足球运动员和比赛,我知道我想尝试在篮球中应用这些数据。但是怎么做呢?我没有篮球传球数据!如上所述,我谷歌了一下 NBA API,找到了我想要的东西(以后还会有相关报道)。为了熟悉 API,我阅读了大量的文档和文章。然后我写了一个 ETL 管道来读取数据,并以我想要的格式获取它,这样我就有了一个球员的所有传球和传球,以及由谁完成的。最后,我将这些数据建模为一个网络,以图形化的方式对其进行评估,并查看该研究论文是否适用于所有体育项目。我最终发现那篇论文并不适用于篮球,于是我创建了自己的衡量标准,我认为它能更好地衡量篮球运动员/团队的表现。我已经有了扩展它的想法,尽管仅仅做这么多就已经是丰富的学习经历了,而且是在我热爱的领域!
没事吧…那又怎样?
这两个项目是我谈论最多的两个项目,尽管其他项目更具挑战性或“技术娴熟”。这不是因为我认为它们是最花哨的,而是因为我在不需要的时候选择了它们。我找到了他们,并留下了我的印记。它们是关于我深深热爱的领域的,它们具有足够的挑战性,在我继续前进后,它们使我在我的工艺方面做得更好。
具有讽刺意味的是,我在业余时间不需要做的项目最终也成了推进我朝九晚五生活的最大胜利。我之前说过,这种生活的先决条件是好奇心和韧性。你越能运用你的技能,并展示出你在数据技能上拥有这两项优势,你就越受欢迎。好奇心和适应力最棒的部分是它们作为一个积极的反馈循环,不断给你的生活带来胜利,但我会把这留给另一个故事。
当你想成为一名数据科学家时,无论是在你朝九晚五的时间还是在你的业余时间,你都已经在暗示自己要坚持不懈地学习。你还不如让它学习你所关心的东西。我们目前生活在一个惊人的数据和开源时代,有太多的东西可供我们访问,我们只需要对我们真正想要的东西表现出足够的坚持和尊重。
无论你是数据分析师、数据工程师、机器学习工程师、研究科学家、数据科学家,还是日常工作中完全不同的人,都希望在业余时间让数据对你关心的领域有用,并让你的生活变得更加美好。
为什么应该使用 PHATE 进行降维
思想和理论
作为数据科学家,我们经常处理具有 3 个以上感兴趣的特征或维度的高维数据。在受监督的机器学习中,我们可以使用这些数据进行训练和分类,并且可以减少维度以加快训练。在无监督学习中,我们使用这种类型的数据进行可视化和聚类。例如,在单细胞 RNA 测序(scRNA-seq)中,我们积累了超过一百万个细胞的每个细胞数万个基因的测量值。这是一组数据,为细胞的身份、状态和其他属性提供了一个窗口。更重要的是,这些属性使它与数据集中无数的其他单元格相关联。然而,这创造了一个由 1,000,000 个细胞和 10,000 个基因组成的巨大矩阵,每个基因代表一个维度或轴。我们如何解读这样的数据?作为生活在三维世界中的人类,我们看不到三维以外的任何东西,需要一种方法来捕捉像这样的数据集的本质,同时又不丢失任何有价值的东西。
我们如何将这个数据集压缩到 2 或 3 维,以便保留必要的信息?您的第一反应可能是使用 PCA 或 tSNE 将数据集投影到二维嵌入中。但是,每种方法都有一些关键的权衡,可能会在下游分析过程中导致有关数据集的错误结论。使用 PCA,您会丢失数据点之间的局部关系(在我们的例子中是细胞),代价是捕获全局表示。此外,PCA 是一种线性方法,它不能准确地捕获复杂的数据集,如单细胞 RNA 测序数据,其中我们可以有由不同的基因表达组合定义的无数细胞类型,同时还经历各种过程,如细胞分裂、分化(干细胞特化为更成熟的细胞类型,如神经元)、代谢等。另一方面,tSNE 是一种非线性方法,它在保持局部关系方面做得更好,但代价是破坏了全局。例如,在干细胞分化中,干细胞不会在开关(或这种情况下的一组基因)的轻弹下自动转变为神经元,而是经历由其转录谱逐渐变化所定义的连续变化。我们经常把这个连续体描述为一个轨迹。tSNE 的问题在于,它粉碎了这些轨迹,导致细胞群脱节,几乎没有关于一种细胞类型如何与另一种细胞类型相关的信息。
那么现在我已经说明了这个权衡的下游问题,我们如何解决它呢?这就是法特的切入点。PHATE——代表基于亲和力的转换嵌入的热扩散潜力——是降维领域的新人。像 tSNE 一样,它是一种非线性、无监督的技术。然而,与 tSNE 不同,它通常以全局结构为代价保留高维数据的局部结构,PHATE 捕捉了 PCA 和 tSNE 的两个世界的最佳之处,保留了数据点之间的局部和全局关系,以准确地反映所讨论的高维数据集。
我们将继续使用 scRNA-seq 数据作为例子。有了这个数据集,我们基本上有了一个 m×n 的矩阵,由 m 个细胞(行)和 n 个基因(列)组成,代表了信使 RNA 分子的离散计数。我们首先计算这些单元之间的欧几里德距离的方阵,欧几里德距离是基于笛卡尔坐标的两点之间的线段的长度。在 scRNA-seq 的情况下,这些笛卡尔坐标是基因表达测量值,因此直观地,我们会预期相距很短距离的细胞在基因表达上非常相似,因此是相似的细胞类型,而相距较远的细胞具有非常不同的基因表达模式,因此反映了完全不同的细胞类型(例如,神经元和红细胞)。然而,这种度量并不总是适合这种解释。这是因为维度的诅咒,过多的维度会导致数据集中的数据点看起来与所有其他数据点等距,从而难以得出数据趋势的结论,导出有意义的聚类和局部邻域,并确定其他类型的模式。为了解决这个问题,我们将我们的距离转换为亲和力,这量化了我们数据中观察值之间的局部相似性。(这就是 PHATE 中“基于亲和力”的“A”的来源!)这些亲和力与距离成反比,使得两个观察值在欧几里得空间中相距越远,它们的亲和力越小;同样,它们越接近,它们的亲和力越大。亲和力通常是通过使用核函数来转换欧几里得距离来计算的。简而言之,这是您的概率质量或密度函数减去归一化因子/系数,以确保概率介于 0 和 1 之间。它们经常用于其他机器学习问题,如支持向量机。你可以猜到一个流行的核是高斯核:
其中 X 和 y 是高维空间中的坐标 X ,而ε是测量由该内核捕获的邻域的“扩散”或半径的带宽度量。PHATE 论文的作者使用了一个稍微高级一点的核函数,它在量化相似性方面做得更好,为了简洁起见,我将省略其细节。虽然这是保存数据集局部结构的一个方便的技巧,但是仅仅嵌入它们就会破坏全局结构,就像 tSNE 的情况一样。因此,除了保留本地结构,PHATE 的另一个目标是维护数据的全局关系。为了实现这一点,PHATE 通过马尔科夫随机游走,使用亲和力来“扩散”数据。当我们说扩散时,我们指的是从高浓度区域到低浓度区域的净扩散。在亲和力的上下文中,这可以被认为是从高亲和力(即,我们的高维数据集中的一簇细胞)到较低亲和力(即,更分散的细胞)。更直观地说,我们可以认为这是一个房间中的热量从一个温暖的来源(例如,一个壁炉)传播到一个不太温暖的区域(例如,你在你的沙发上),这可以在数学上建模为热量方程,其解是热核。这就是 PHATE 中“H”的来源,热扩散。至于随机行走,这代表了通过我们的高维空间的连续随机步骤的轨迹(即,从一个单元到另一个单元的转换),其中每个可能的步骤或转换具有沿着所述路线前进的确定概率。你可以认为这是房间里的热量随机向房间的一个角落扩散,然后转换方向。这被更广泛地称为随机过程。在我们的上下文中,单元 I 到单元 j 的概率取决于我们访问的最后一个单元。现在,所有的术语都已经说完了,让我们来看看它是如何工作的!
我们首先通过归一化我们先前计算的亲和力来计算我们随机行走的初始概率。这会产生以下结果:
在哪里
这给出了在单个时间步长内从小区 x 移动到小区 y 的 N 乘 N 转移概率矩阵。
在论文中,这种矩阵的一个简单术语是扩散算子。在数学上,为了获得有效的扩散,我们将扩散算子提高到最佳的步骤数 t,以学习数据的全局结构。这给了我们在 t 时间步长内从单元 x 转换到单元 y 的概率。使用更大的 t,我们可以在高维空间中覆盖更多的距离,并了解更多关于全局结构的信息,而不会被我们基于单时间步长亲和力的概率的局部性所束缚。你可以把这想象成寻找一条徒步旅行路线来构建周围的地图:每走几步,你就放下一个标记来记录你之前的位置,通常是在显著的地方(例如,一棵大树,一条河岸,等等)。),而不是每一步都设置标记。这可以让你建立一个该地区的总地图,而不会被每一个单独的树枝和树枝所拖累。为了简洁起见,我将省略如何计算这个最佳步长 T 的技术细节,这在 PHATE 论文中有描述,使用冯诺依曼熵,但这都要加入到我们的“转换”算法的“T”中。
好了,我们一方面用我们的亲和力来捕捉附近细胞之间的局部关系,另一方面用一个强大的扩散算子来学习我们的全局空间。现在怎么办?嵌入这个幂扩散算子?没那么快。一个限制是,通过该算子得到的基于概率的细胞间距离(或扩散距离,如作者定义的那样)对远距离点之间的距离不太敏感,当我们考虑高维空间的边界点时,可能会遇到稳定性问题(本文将更详细地讨论这些缺点)。不过,这可以通过首字母缩写“P”来解决,P 代表潜力。作者定义了这个聪明的度量,称为潜在距离,受信息论和随机动力学的启发,我们从幂扩散算子测量对数转换概率之间的距离。这增加了我们的结果距离的敏感性,并使 PHATE 能够保存本地和全球架构的可视化目的。数学上,这定义如下:
在哪里
pₓᵗ指的是我们的扩散算子的 x 行,你会记得这是我们的转移概率矩阵的 t 次方。
当我们说这个距离度量更敏感时,假设从小区 a 到小区 b 的转移概率是 0.04,而从小区 a 到小区 c 的转移概率是 0.05。在这些扩散距离下,它们对折叠变化不是很敏感。距离 0.01 在试图将这种关系封装在较低维度的投影中时可能会遇到敏感性问题。然而,如果我们对这些概率进行对数变换并计算它们的距离,我们会得到一个更大的距离 0.223,这与这些概率分别为 0.4 和 0.5 是一样的(回想一下 log a - log b = log (a/b))。相当整洁!
好了,我们已经准备好“嵌入”了!通常,使用这些扩散度量,我们通常进行特征分解(即,通过所讨论的矩阵的特征向量将其分解,在这种情况下,我们的动力扩散算子)以导出数据的扩散图,这是用于研究 scRNA-seq 数据中分化轨迹的流行方法。然而,这种方法的问题在于,它将轨迹分解成无数反映扩散分量的特征向量。因此,这种高固有维度使得它们不适合可视化。为了绕过这个限制,作者使用公制多维标度(公制 MDS )嵌入了潜在距离矩阵。这是一种嵌入方法,通过最小化所谓的“压力”函数,为作为输入的距离矩阵定制:
虽然这个等式可能看起来令人生畏,但它本质上是在测量拟合度,在这种情况下,嵌入的坐标与我们寻求可视化的高维数据的拟合程度。压力越小,吻合度越大。因此,如果这些嵌入点的应力为零,那么数据已经在 MDS 嵌入中被成功捕获。由于噪声或少量的 MDS 维数(即 m = 2 或 3),可能出现小的非零值。然而,只要轨迹和其他关键特征得以保留,这种程度的失真通常是可以容忍的。
到目前为止,我所讨论的一切都可以从 PHATE 论文作者的这张图中直观地总结出来:
Moon 等人,Nature Biotechnology 2019,高维生物数据中的可视化结构和转换
如果你坚持了这么久,恭喜你!我们现在准备学习如何用 Python 实现 PHATE,并看看它的实际效果!为了简单起见,我们将使用流行的 MNIST 数据集的较小版本,其中我们有 8 乘 8 的手绘数字图像(你可以从论文作者那里找到一个例子,将 PHATE 应用于真实的 scRNA-seq 数据这里)。
使用 pip 或 pip3 安装 PHATE 库:
pip install phate
在您最喜欢的编辑器中创建一个新的 Python 文件,或者在 Jupyter 笔记本中创建一个笔记本,然后运行以下命令:
让我们运行这个程序来看看结果
python3 mnist_phate.py
作者图片
查看 PHATE 嵌入,您可以看到我们通常有清晰的数字分离,而簇本身有独特的形状和分布。让我们看看它与 PCA 和 tSNE 相比如何
作者图片
主成分分析(左)数据过于拥挤,难以得出具体结论。另一方面,tSNE (center)做得很好,将它们分离成一团簇,代价是数字如何与另一个数字相关的清晰全局结构,以及抑制簇内数据的独特传播。PHATE(右)调和了这些问题,在这里你可以清楚地分辨出聚类,并了解它们之间的关系(例如,3 和 9 有很多相似之处)。对于数字来说,这并不是什么大不了的事情,但是对于单细胞生物学来说,当我们研究诸如将干细胞转化为神经元的连续过程时,增加细胞如何从一种细胞类型转化为另一种细胞类型的细节是非常有用的。
在本文中,我们学习了 PHATE 算法,它是如何工作的,以及如何用 Python 实现它。如您所见,它很好地保存了数据的局部和全局方面。关于 PHATE 算法背后的数学的更多信息,以及更多的例子和与其他方法如 tSNE 和 UMAP 的比较,我鼓励你查看原始的出版物以及一些来自作者的关于 PHATE 和单细胞数据分析的教程。
我希望你喜欢这篇文章。感谢阅读和快乐编码!
参考资料:
[1] K. Moon,D. van Dijk,Z. Wang,S. Gigante,D. Burkhart,W. Chen,K. Yim,A. van den Elzen,M.J. Hirn,R.R. Coifman,N.B. Ivanova,G. Wolf,S. Krishnaswamy,将高维生物数据中的结构和跃迁可视化 (2019),《自然生物技术》
为什么你应该从头开始建立一个神经网络
机器学习
超越“进口卡”
我相信你以前听过这个建议。我知道我做到了。我在其他博客上读到它,在许多播客和采访中听到它,甚至我自己也有这样的想法,“我真的应该这么做。”但是很长一段时间,我没有。
如果你想让自己从其他数据科学家中脱颖而出,这是一个很棒的项目。不仅仅是展示你对数学和编程的理解,它还表明你有另一种重要的无形的品质,坚持到底。团队需要一个说到做到并且愿意付出更多努力的同事!
从零开始构建神经网络从未如此简单,而且您不必独自完成。我关注了哈里森·金斯利和丹尼尔·库基拉最近出版的神经网络,你可以在 nnfs.io 找到它,哈里森正在研究 YouTube 上的章节。
媒体上还有大量其他免费指南,比如这里的、这里的和这里的。
为什么
Keras、PyTorch 和 MXNet 等软件包的成功使得机器学习比以往任何时候都更加可用和简单。即使对神经网络有基本的了解,人们也可以导入一个包,访问定制的神经网络、最先进的架构,并从大规模、预训练的网络中转移学习。
利用这种模型所需的复杂的数学和复杂的编程从你那里抽象出来,取而代之的是一个简单的。fit()和。predict()方法。这太棒了!这确实证明了这些包装的创造者的才华。这个 import Keras 调用中包含了大量的优化和先前的经验。
但是没有免费的午餐。尽管这些软件包非常有用和强大,但你总是要放弃一些东西作为交换。在这种情况下,控制和可定制性更加有限!这正是你作为初学者想要的,因为你可能不知道如何自己控制这个过程。同样,使用这些包没有任何问题。但是一旦你需要写一个定制的损失函数或者创建一个全新的架构,你可能会遇到一些麻烦。
更不用说使用这些包进行调试有时会很乏味,因为您必须通过许多层您不熟悉的方法调用来跟踪错误。最好快点失败!
怎么做
基础知识
最好从基础开始。对于神经网络,这意味着点积、矩阵乘法、理解数组/矩阵/张量、复习导数等。有很多工作要做!这就是为什么我建议遵循一些指南或框架,在你需要的时候回顾主题。
请记住,这应该是一个针对 理解 而不是针对 结果 的项目。最终目标是真正理解你在做什么,为什么。记住这一点,在你真正理解之前不要离开这个话题,如果你能向别人解释就更好了。
就我个人而言,当我写下来的时候,我对数学的理解要好得多。所以对于损失和激活函数的所有导数,我都在笔记本上做了详细的描述。
我的笔记本供参考。图片作者。
在上面贴上小纸条,如果这有助于你理解发生了什么,没人会看到的!(除非你决定把它贴在博客上)此外,把它全部写出来,你会觉得自己是个数学天才,可以用你的知识打动一些朋友。
时间框架
这不是一个能尽快完成的项目。同样,花尽可能多的时间去理解你在做什么和为什么。我花了大约 2 周的时间,每天工作几个小时,从头开始研究神经网络,但这是因为我有数学/统计学背景,并且有许多使用 Keras/TensorFlow 的项目。
如果你愿意,这很容易成为一个持续几个月的项目!这没什么不对!慢慢来。
编码
在花了一些时间理解基础知识和数学之后,你将开始真正的编码!我设置了一个 GitHub repo,为每个单独的主题创建了一个新文件,并创建了一个运行文件,在其中我将所有的主题编译在一起。这让我可以在需要理解的时候摆弄小块的材料和实验。
我曾多次回去清理我的类,根据需要进行重构,并根据需要添加新的类。
Softmax 激活类。图片作者。
接下来的步骤
这些可以是你想要的任何东西。对于一些人来说,简单的练习通过材料和编码所有这些类和方法将是最终目标。就我个人而言,我的计划是继续从头开始构建特性,因为我需要它们用于项目,或者因为我想要构建对新想法的理解。这也给了我一个很好的借口来尝试创建我自己的包,并发布它用于我自己的附带项目。
连接
我一直在寻找连接和探索其他项目!
为什么你应该考虑成为一名数据工程师而不是数据科学家。
一个新的丛林之王出现了
瑞安·哈维在 Unsplash 上的照片
如果您喜欢这篇文章,请务必 订阅 千万不要错过另一篇关于数据科学指南、技巧和提示、生活经验等的文章!
我只想说,你选择数据科学还是数据工程,最终还是要看你的兴趣和激情所在。然而,如果你正犹豫不决,不确定选择哪一个,因为他们有同样的兴趣,那么继续读下去吧!
一段时间以来,数据科学一直是热门话题,但一个新的丛林之王已经到来——数据工程师。在本文中,我将与您分享为什么您可能想要考虑从事数据工程而不是数据科学的几个原因。
注意,这是一篇自以为是的文章,从中拿取你想要的。话虽如此,我希望你喜欢!
1.数据工程从根本上来说比数据科学更重要。
我们都听说过“垃圾进,垃圾出”这句话,但直到现在,公司才开始真正理解这句话的含义。机器学习和深度学习可能很强大,但只有在非常特殊的情况下。除了需要大量的数据和对 ML 和 DL 的实际使用,公司需要自下而上地满足数据需求层次。
作者创建的图像
就像我们在社会需求(即关系需求)之前有身体需求(即食物和水)一样,公司需要满足通常属于数据工程范畴的几个要求。注意数据科学,特别是机器学习和深度学习,是最不重要的事情。
简单来说,没有数据工程就没有数据科学。数据工程是成功的数据驱动型公司的基础。
2.对数据工程师的需求越来越大。
如我之前所说,公司意识到对数据工程师的需求。因此,目前对数据工程师的需求越来越大,这是有证据的。
根据 Interview Query 的数据科学面试报告显示,2019-2020 年数据科学面试人数仅增长 10%,而同期数据工程面试人数增长 40% !
同样, Mihail Eric 对 Y-Combinator 的招聘信息进行了分析,发现数据工程师的职位比数据科学家的职位多出大约 70%。
你可能会问,“当然,增长率要高得多,但是绝对数字呢?”
我冒昧地从 Indeed、Monster 和 SimplyHired 网站上搜集了所有数据科学家和数据工程师的招聘信息,我发现这两个网站上的职位列表数量差不多!
总共有 16577 个数据科学家职位列表和 16262 个数据工程师职位列表。
作者创建的图像
3.作为一名数据科学家,数据工程技能非常有用。
在更成熟的公司中,工作通常是分离的,以便数据科学家可以专注于数据科学工作,而数据工程师可以专注于数据工程工作。
但大多数公司一般不会这样。我认为大多数公司实际上都要求他们的数据科学家了解一些数据工程技能。
许多数据科学家最终需要数据工程技能。
作为一名数据科学家,了解数据工程技能也是非常有益的,我将举一个例子:如果你是一名不懂 SQL 的业务分析师,每次你想收集见解时,你都必须让数据分析师查询信息,这在你的工作流程中造成了瓶颈。类似地,如果你是一个没有数据工程师基础知识的数据科学家,那么肯定会有这样的时候,你不得不依靠其他人来修复 ETL 管道或清理数据,而不是自己做。
4.数据科学比数据工程更容易学。
在我看来,作为一名数据工程师学习数据科学比作为一名数据科学家学习数据工程技能要容易得多。为什么?有更多的资源可用于数据科学,有许多工具和库可以让数据科学变得更简单。
因此,如果你正在开始你的职业生涯,我个人认为花时间学习数据工程比数据科学更值得,因为你有更多的时间来投资。当你有一份全职工作,并且已经进入职业生涯几年的时候,你可能会发现你没有能力或精力投入同样多的时间在学习上。所以从那个角度来说,我觉得还是先学比较难的境界比较好。
5.它包含了一个尚未开发的机会市场。
我说的不仅仅是工作机会,而是创新的机会,用新的工具和方法让数据工程变得更容易。
当数据科学最初被大肆宣传时,人们发现了学习数据科学的几个障碍,如数据建模和模型部署。后来出现了 PyCaret、Gradio 这样的公司来解决这些问题。
目前,我们正处于数据工程的初始阶段,我预见到了一些使数据工程变得更容易的机会。
感谢阅读!
虽然这是一篇固执己见的文章,但我希望这能让你明白为什么你想成为一名数据工程师。我想重申一点,你选择数据科学还是数据工程,最终还是要看你的兴趣和你的激情所在。一如既往,我祝你在努力中好运!
不确定接下来要读什么?我为你挑选了另一篇文章:
</4-reasons-why-you-shouldnt-be-a-data-scientist-e3cc6c1d50e>
又一个!
特伦斯·申
为什么您应该考虑将数据分析集成到您的业务中
如今,我们都被数据淹没了,尤其是公司。他们中的许多人不知道如何使用它,他们把钱放在桌子上。
弗兰基·查马基在 Unsplash 上拍摄的照片
很长一段时间以来,人们依靠他们的经验来做商业决策。在很难全面了解一家企业的时候,这没什么。你必须依赖你的知识,日复一日,年复一年。现在,我们手边有多年前的相同信息。那么为什么没有更多的人使用它呢?为什么经理们不介意错过数据分析可以给他们带来的好处?同时在其他渠道寻求更小的收益。
我为什么要在乎?
简单来说,知识就是力量。想想你现在和 5 年前所知道的,那时这些知识有多大价值。没人说你做了错误的选择。但是如果你知道你现在所知道的一切,你肯定会做出不同的选择,并且会过得更好。
看看股市就知道了,尽管内幕交易是高度非法的,但却是一种稳赚不赔的方式。如果你知道世界上其他人不知道的事情,你就比市场上的其他人(你的竞争对手)更有优势。同样的概念也适用于你的企业。如果你的竞争对手利用所有可用的数据来了解,他们对你的两个客户都有更多的了解。因此,他们比你有巨大的优势。知道顾客想要什么类似于知道一只股票一个月后的价格。你变得主动,而不是被动。积极主动可以让你给顾客他们想要的东西,而不需要他们提出要求。如果你比你的竞争对手先这么做,他们就会争先恐后地追赶你。
我需要什么样的数据?
如果利用得当,一切都是有用的。例如,观察几年内的销售情况将有助于您发现客户习惯的模式。你的销售可能有你以前没有意识到的季节性,让你可以提高或降低价格来利用这一点。你可能会发现,某个月你改变了你的产品或销售技巧,销售额直线上升。这些信息是非常有价值的,然后你可以决定让这种改变永久化,开发它并利用它成为你的优势。
定性数据呢?定性数据只是关于你的业务质量和特征的数据。你的顾客有多满意?你的运营中存在怎样的痛点?一旦您有了这些信息,您就可以开始消除这些棘手问题的实际工作了。这可以减少客户流失,增加回头客,并吸引新客户。
一个好的公司会有定性和定量数据的混合。它们是互补的:它们讲述了同一个故事的两个方面。定量数据可以告诉你你所做的改变是如何影响你的底线的。定性数据可以告诉你你的客户是如何看待这些变化的。
如果我没有任何数据怎么办?
如果你的公司没有收集数据并储存起来以备后用,我建议你马上开始。这可以是非常简单的事情,如销售数字、客户数量、平均订单价格…至于定性数据,可以简单到向您的客户发送一份调查问卷。如果你正在这样做,不要因为参与率而气馁。根据你的客户群,你仍然可以以 5%的比率获得有用的信息。
也有很多地方可以从互联网上获取数据。这都是关于了解你的目标市场。也许通过查看关于你所在邮政编码的人的数据,你发现家庭收入比你预期的要高。你可以提高价格,但销量不变。从二手资料中找到更多关于你的客户的信息没有你自己做的有用。然而,这总比什么都没有好。
我已经了解我的市场,为什么我还需要这个?
我们作为人类,天生就偏向于自己的世界观。这意味着我们会经常给自己讲一些故事,这些故事与我们已经知道的相吻合。如果一个人在某个职位上呆的时间足够长,他们对客户行为的微小变化就不会那么敏感。他们不太可能注意到他们的运营中存在痛点,因为这是他们长期以来的行事方式。这不是批评,我们都对此感到内疚。这就像几年后第一次见到一个朋友,你注意到他们外表的所有微小变化。然而,对于你经常见到的另一个朋友来说,这些变化不太明显,你已经看到它们在这些年里逐渐发生了。
看数据可以让你后退一步,忘记你所知道的所想的。它消除了一些我们都会犯的偏见。这将让你以一种全新的眼光看待你的业务和运作。透过你的潜在顾客正在透过的同样的镜头。事物从外面看起来总是不同的,而从里面看却是不同的。这是非常强大的。
我从哪里开始?
显而易见的起点是雇佣一名数据科学家、一名分析师,或者重新指派一名现有员工全职从事这项工作。然而,并不是每个人都有这样的预算。另一种方法是自己动手,或者让你组织中的某个人花些时间来做这件事。在互联网上有多个地方可以学习数据分析的基础知识,比如数据清理、可视化和统计测试。这可能是复杂的,也可能是简单的,就像你想象的那样,你可以全押,也可以只看表面。重要的是要记住,积少成多,尤其是当你开始的时候。当你没有这样的过程时,你的边际收益是巨大的。因此,开始进行这种分析可以产生切实的结果。
结论
数据分析可以成为你武器库中非常强大的工具。它可以帮助你在竞争中领先一步,并改善你的业务。如果利用得当,它可以改变你对自己的经营和市场的看法。很有可能,你已经拥有了开始工作所需的一切。把它想象成用冰箱里的剩菜做一顿美食。而不是他们只是坐在那里,你采取主动,投入一点工作,并以一顿大餐结束。你永远不知道,你可能会让自己大吃一惊,结果会比你预想的好得多。
作为数据分析师,为什么应该学习数据科学
即使你不打算成为一名数据科学家
图片由 Wokandapix 来自 Pixabay
如果你是一名数据分析师或者正在考虑成为一名数据分析师,你可能会认为你不需要学习数据科学。作为一个首先是数据科学家,然后是数据分析师的人,我从来没有意识到当我成为数据分析师时,知道如何建立机器学习模型会有多么有用。今天,我想讨论为什么数据分析师应该考虑学习数据科学,即使他们不打算成为数据科学家。
增加你被雇用的机会
初级分析师的工作竞争激烈,你拥有的任何额外技能都可以在求职者中脱颖而出。查看 LinkedIn,Time 的这个数据分析师职位显示有超过 3700 名申请人,而 Blue Bottle 的这个数据分析师职位在发布后一周内就有超过 2500 名申请人。
中高级数据分析师的工作职责可能需要你知道如何建立模型。公司可能会发布包含大部分数据分析师职责的数据科学家职位,并将构建模型作为另一项要求。如果你学习如何建立基本的机器学习模型,这将使你有资格获得这些类型的混合职位,并且与不需要建模经验的数据分析师职位相比,有理由获得更高的工资。
例如,这个 Twitter 中级数据科学家职位没有提到构建模型是工作职责的一部分,但要求申请人在数据驱动分析/预测分析/统计建模/机器学习/数据挖掘 方面具有“ 2 年以上的工作经验”,如果你有“ ”构建 ML 模型 ”的经验,则还有 加分 。这个 Atlassian 高级数据科学家职位在工作职责中不需要建模,但在 下很好,但不是必须的,如果你有 “它提到了 使用统计和机器学习方法建立描述性和预测性模型的经验 ”。
如果你不了解数据科学的基础知识,你可能会失去被选入高级职位的机会。
使用数据科学进行数据分析
机器学习模型可以提供找到用户行为预测器的捷径。例如,移动产品经理想知道是什么原因导致用户继续使用该应用程序,而不是停止使用。作为数据分析师,您可以按用户分析应用事件,以确定哪些事件显示出最高的保留率。现在想象一下,如果您有 100 个事件要分析,这将是多么耗时。如果你使用一个机器学习模型来预测用户的应用留存,你可以得到一个导致用户回到应用的顶级事件列表。这可能会将需要分析的事件列表从 100 个减少到 10 个,因为模型显示剩余的 90 个对用户保留没有影响。
你没有建立一个模型来预测未来,你可以使用模型输出作为指导,在哪里寻找更深一层。
我曾经有一个数据分析师职位的带回家作业,上面写着*“一个电影工作室的执行制片人给了你这个数据集,希望你简要概述一下从中得出的有趣见解,这将有助于工作室的业务。”*我在电影数据上使用了一个机器学习模型来寻找多种可行的见解而不是作业要求的一种见解,并且能够更快地找到这些见解。
拓展你的职业选择
我之前提到过,数据科学家头衔的工作包括构建机器学习模型,但大多数是数据分析师的职责。如果您不想全职构建模型,但喜欢从事数据分析师项目,您可能更喜欢这种类型的混合角色。或者,你可以从一名数据分析师开始,但改变主意,决定成为一名数据科学家。如果你已经花时间作为一名数据分析师学习数据科学,你就更接近于建立你的技能组合来申请数据科学家的职位。
当你第一次开始做数据分析师时,已经有许多技能需要学习,你可能会决定不值得花额外的时间学习数据科学。我希望现在你知道了好处,即使你不打算成为数据科学家,你也会重新考虑学习数据科学。
你可能也会喜欢…
为什么您应该学习数据科学中的有效沟通
跨越技术和非技术之间的沟通鸿沟
杰森·罗斯韦尔在 Unsplash 上的照片
数据科学与工程的软技能我见过最显著的差距就是沟通。没有足够多的人知道如何在技术和非技术受众之间进行翻译。想想你的工作。当你在做一个 sprint 回顾,展示一个演示,或者只是和某人交谈时,你能为观众量身定做你的演讲吗?许多人在这项技能上挣扎,它经常导致团队之间的裂痕,这些团队并不完全了解彼此。今天,我想分享一个故事,为什么沟通是至关重要的,以及我在与过去的客户合作时的经验教训。
了解企业需要什么
业务和技术人员之间稳固沟通的第一步是理解;企业需要你做什么?当我和我以前的一个客户一起工作时,我花了第一个月的时间深入研究他们已经开始的项目。我想知道他们在用他们的数据做什么,为什么。本质上,他们想要查看电子设备的数千条记录,并找到故障。
很容易运行并创建一个数据科学项目,当查看问题陈述时可以发现失败。例如,您可以查找故障代码,检查异常,并运行最复杂的算法来找出数据中的模式。但是在你跑去做那件事之前,你确定那是全部的问题吗?
是的,客户想要查看电子设备的数千条记录并找到故障,但他们想要的不止这些。他们试图了解为什么会发生这些故障,我们是否能检测出故障的一个或一组原因,故障的具体类型,等等。通常,我们在数据科学中面临的业务问题并不像乍看起来那么简单,因此,学会如何沟通和提出正确的问题至关重要。为什么理解客户的需求很重要?因为你需要为他们提供一个能够满足他们需求的解决方案。在你深入研究你的解决方案之前,从提问开始。
当我评估业务需求并与我的客户或企业客户合作时,我首先会考虑以下几个方面:
- 您是否正确理解了业务问题和需求?
- 您看到的可以利用数据科学的用例有哪些?
- 是否还有其他应该涉及的领域,比如 DevOps,web 应用开发等。?
根据你的数据,安排会议讨论你解决这些问题的初步想法。你从客户那里得到的反馈是什么?当你召开这些会议时,你还应该讨论你目前没有数据的任何事情,并讨论你或你的客户可以做些什么来解决这个问题。
- 他们能给你提供更多的数据吗?
- 你能把问题陈述改成能与你现有的数据一起工作的东西吗?
如果你有任何绝对的阻碍,让你无法前进,那就提出来。这是你确保项目在正确的道路上开始的时候,如果这意味着指出重要的问题,那么就指出来。我共事过的大多数人宁愿有人提前指出大的风险和障碍,也不愿隐藏问题。
告诉企业你能提供什么
一旦您对业务需求和现有数据的可能性有了很好的认识,您就可以开始起草解决方案了。无论是创建概念证明、开发某种形式的演示,还是提供一组解释您的解决方案的图表,都要确保您与客户进行了沟通。您的客户或顾客想知道您能为他们提供什么样的解决方案和他们拥有的数据。
在开发解决方案时,我个人的偏好是展示渐进的进展,并在过程的每一步获得反馈。无论你喜欢哪种流程,反馈都是关键。通过寻求反馈,你和你的客户一起了解你所采取的方法是否有效,是否提供了他们期望的结果。当您最初起草计划时,他们可能已经同意了这种方法,但是实施有时会出现意想不到的结果。经常征求反馈有助于消除在项目结束时除了你之外没有人满意的解决方案的问题。
如果你像我一样,寻求反馈可能会是一次令人伤脑筋的经历。比如,他们会讨厌我的整个解决方案吗?我是不是做错了什么,把整个项目搞砸了?诸如此类,可能会突然出现在你的脑海里。但老实说,反馈可以比这更好、更有用。当我与客户一起工作以寻求反馈时,我经常关注我们最初定义的他们的业务问题。
- 该解决方案是否解决了您的业务问题?
- 您是否从该解决方案中看到了意想不到的结果,如果是,为什么?
- 你能告诉我你看到了什么吗?
- 通过已经执行的分析,数据看起来是否如您所期望的那样?如果不是,你看到了什么不同?
将这些对话与他们的工作和对数据的理解联系起来,会使对话更加顺畅。
将你的成果转化为他们的成功
现在你已经了解了你的业务问题,并创建了解决这些问题的方案,你如何将你的成果转化为你的业务成功呢?你如何展示你所做的过程改进和你正在分析的数据的力量?老实说,对我来说,这项技能很难学。我可以做技术工作,我可以与企业互动并了解他们的需求,但我不知道如何以企业可以理解的积极方式展示这一点。高管不想知道你正在做的技术工作的本质细节,他们想知道对业务的影响。
当谈到能够将技术工作转化为业务时,我得到的最佳建议是在改进之前、之中和之后获取指标。使用这些指标来展示为什么你的工作是有益的。我见过的一些常用指标包括:完成一项或一组任务所需时间的减少,特定活动成本的减少,或者产品失败次数的减少。无论你从事哪个行业,都要找到并理解你公司的通用指标。与您的业务合作伙伴合作,了解他们希望如何看到量化的改进,然后展示您工作的这些指标。
最后的想法
那么,为什么技术和非技术交流是数据科学中的关键呢?因为它能决定一个项目的成败。无论你从事哪个领域,交流都可能很困难。但是,在从事数据科学项目时,尝试在技术和非技术同事之间进行翻译会变得更加困难。我在数据科学和 STEM 领域面临的最大问题之一就是这种沟通差距。没有足够的技术人员能够将他们的工作翻译给非技术观众,他们也不能将业务需求翻译成技术能力。今天,我与大家分享了我是如何接近我的一位老客户的,了解他们的业务需求,提供解决方案,并转化结果。在这次经历中,我学到的最大的教训是什么?如果你和我一样,寻求反馈可能会很伤脑筋,但它可能会改变一个项目进展是否顺利的游戏规则。
为什么您认为技术和非技术交流是数据科学的关键?
节日快乐,感谢您的阅读!我希望你喜欢阅读我所学到的东西。如果你愿意,你可以通过这个链接成为一名灵媒来支持我的写作。
为什么要在深度学习之前学习回归分析
介绍
第一,我不是说线性回归比深度学习好。
其次,如果你知道自己对计算机视觉、图像识别或语音识别等深度学习相关的应用特别感兴趣,那么这篇文章可能与你不太相关。
但是对于其他人,我想给出我的想法,为什么我认为学习回归分析比深度学习更好。为什么?因为时间是有限的资源,你如何分配你的时间将决定你在你的学习旅程中走多远。
因此,我将给出我的两点意见,为什么我认为你应该在深度学习之前学习回归分析。
但是首先,什么是回归分析?
简单来说,回归分析通常与线性回归互换使用。
更一般地说,回归分析是指一套用于估计因变量和自变量之间关系的统计方法。
然而,一个很大的误解是,回归分析仅仅指线性回归,而 **并非如此。**回归分析中有许多非常强大和有用的统计技术。这引出了我的第一点:
第一点。回归分析更加通用,具有广泛的适用性。
线性回归和神经网络都是在给定一些输入的情况下可以用来进行预测的模型。但是,除了做出预测,回归分析还允许您做更多的事情,包括但不限于:
- 回归分析让你了解变量之间关系的强度。使用 R 平方/校正 R 平方等统计测量值,回归分析可以告诉您数据中的总可变性有多少是由您的模型解释的。
- 回归分析告诉您模型中哪些预测因子具有统计显著性,哪些不具有。更简单地说,如果你给一个回归模型 50 个特征,你可以找出哪些特征是目标变量的良好预测者,哪些不是。
- 回归分析可以给出它估计的每个回归系数的置信区间。您不仅可以估计每个特征的单个系数,还可以获得系数所在的置信水平(例如 99%置信)的系数范围。
- 还有更多…
我的观点是,回归分析中有很多统计技术,可以让你回答更多的问题,而不仅仅是“给定 X(s),我们能预测 Y 吗?”
第二点。回归分析不是一个黑箱,更容易交流。
在选择模型时,我总是考虑两个重要因素,一是如何简单,二是如何可解释。
为什么?
更简单的模型意味着更容易交流模型本身如何工作以及如何解释模型的结果。
例如,大多数商业用户理解最小二乘和(即最佳拟合线)的速度可能比反向传播快得多。这很重要,因为企业对模型中的底层逻辑是如何工作的感兴趣——在企业中,没有什么比不确定性更糟糕了——黑盒是它的同义词。
最终,理解模型中的数字是如何得出的以及如何解释它们是很重要的。
第三点。学习回归分析会让你从整体上更好地理解统计推断。
信不信由你,学习回归分析让我成为了一个更好的程序员(Python 和 R),一个更好的统计学家,并且让我对构建模型有了更好的理解。
为了让您更加兴奋,回归分析帮助我了解了以下内容(不限于此):
- 构建简单和多元回归模型
- 进行残差分析并应用像 Box-Cox 这样的变换
- 计算回归系数和残差的置信区间
- 通过假设检验确定模型和回归系数的统计显著性
- 使用 R 平方、MSPE、梅伊、MAPE、PM 评估模型,这样的例子不胜枚举…
- 使用方差膨胀因子识别多重共线性(VIF)
- 使用部分 f 检验比较不同的回归模型
这只是我所学到的一小部分东西,我只是触及了皮毛。因此,如果你认为这听起来像一个整洁的演出,我敦促你去看看,至少看看你能学到什么。
怎么可以学习回归分析?
最近,我发现学习一个新话题的最好方法是从学院/大学找课程讲座或课程笔记。令人难以置信的是网上有这么多免费的东西。
特别是,我将留给您两个很好的资源,您可以使用它们开始工作:
https://online.stat.psu.edu/stat501/
感谢阅读!
我希望你觉得这篇文章很有见地!请记住,我的观点是基于我的经验,可能与你的不一致,没关系!如果你对此有共鸣,并同意我的观点,我鼓励你深入这个话题——你不会后悔的。
一如既往,我祝你在努力中好运!
不确定接下来要读什么?我为你挑选了另一篇文章:
又一个!
特伦斯·申
为什么在部署计算机视觉模型时应该监控图片的清晰度
永久地评估你从一个设备上获得的图片的质量可能会帮助你保持一个健壮的模型而不是盲目的模型!
查理·伊根在 Unsplash 上的照片
听说过沸蛙综合症吗?
如果你把一只青蛙扔进一锅沸水中,它会很快跳出来!
但是,如果你把青蛙放入冷水中,逐渐增加温度,青蛙会享受一会儿热水浴,不久,它就会毫无抵抗地让自己被煮死。
我们知道,当数据特征与用于训练模型的数据特征“轻微偏离”时,这同样适用于机器学习模型。
这种现象被称为“畴变”。
我最近遇到了一个有趣的域名迁移案例,我想分享一下,以及监控这种变化的潜在对策。
又一个失败了!
监控摄像头的延时拍摄(已剪辑)
作者制作的动画
在左侧,您可以观察到由监控摄像机广播的图片的裁剪部分的 50 天时间推移。
随着时间的推移,很容易发现由于灰尘沉积,照片变得多么模糊。
(注:我希望我能够分享整个图片,但由于明显的保密原因,我不能)
由于模型使用这一部分来推断制成品的一些特征,不用说,随着图片变得模糊,深度学习算法的性能开始缓慢下降,这可能比从清晰的图片到空白的图片更难检测(还记得青蛙的故事吗?).
在其“模糊性”的顶峰,该部分几乎不提供任何信息(见下文)。
同一区域的不同清晰度/模糊度级别—图片由作者提供
我们如何评价一张照片的清晰度?
因此,在这种特殊情况下,当摄像机提供的图片开始超过预定义的清晰度阈值并需要清洁时,提醒车间人员可能会很有意思。
唯一的问题是我们如何评估它?
您可能知道,图片被编码成 n 维数组(1 层用于灰度图片,3 层用于 RGB 图片)。如果你对这个概念不放心,我向你推荐这篇文章:
例如,对于表格数据集,我们可以监控每个特征的统计特征(最小值、最大值、平均值、标准偏差等。)但是我们可以在下面看到,使用这些指标并不能让我们区分上面的 3 张图片:
Image_0: Min: 69 | Mean : 146 | Max : 187
Image_1: Min: 107 | Mean : 155 | Max : 192
Image_2: Min: 107 | Mean : 151 | Max : 181Image_0: Min: #1 | Mean : #1 | Max : #2
Image_1: Min: #3 | Mean : #3 | Max : #3
Image_2: Min: #3 | Mean : #2 | Max : #1
(文末链接源代码)
然而,我们可以假设,当照片变得模糊时,每个像素之间的数值距离开始减小。
如下所示,当像素值与其周围的差异增加时,锐度将会更高:
作者对两种不同灰度图像的清晰度比较
救援的梯度!
因此,我们需要找到一种方法来计算图片中从一个像素到另一个像素的变化。
当我们根据以 x 为中心的轴绘制变化时,模糊图形和清晰图形之间的差异是显而易见的:
围绕 x 中心轴的两个图形的锐度比较—图片由作者提供
如果你之前一直在学习机器学习,那么你一定很熟悉梯度计算。基本上,这是所研究的函数在特定位置的导数(这对于定义成本函数的最优值非常有用)。
我们如何计算梯度呢?当然,有一个 NumPy 函数可以做到这一点,但我很乐意提供它背后的解释!
让我们以三个不同但简单的阵列为例:
三个简单的 3x3 阵列,具有不同的数字组织—图片由作者提供
让我们取随机数组的第一行:1,3,0,并考虑一个线性函数(y=θx)允许从一个像素到另一个像素。
作者对[1,3,0]矢量图像的梯度计算
- 从 1 到 3,函数是“y = 2x”,它的导数是“2”。
- 从 3 到 0,函数为“y = -3x”,其导数为“-3”。
- 在 3 处,梯度是前一个和后一个梯度的平均值:“-0.5”(=(2–3)/2)。
让我们将这些值与峰值最高的“正常”数组的第二行进行比较:
- 从 1 到 5,函数是“y = 4x”,它的导数是“4”。
- 从 5 到 1,函数是“y = -4x”,它的导数是“-4”。
- 值为 5 时,渐变将是前一个和后一个渐变的平均值,因此为“0”(=(4–4)/2)。
让我们平均这些梯度的绝对值:
- [1,3,0]:(| 2 |+|-0.5 |+|-3 |)/3 =1.83
- [1,5,1]:(| 4 |+| 0 |+|-4 |)/3 =2.67
结论:二线似乎更“犀利”!
并且,通过平均两个轴(x 和 y)周围的所有梯度,我们得到以下结果:
- 零点数组: 0 (这里不奇怪!)
- 随机数组: 1.89
- “正常”数组: 2.67
我们去大的!
既然你理解了“为什么”和“如何”,我们可以从延时拍摄的照片中迭代,看看是否有我们可以研究的模式。这段时间从 1 月 19 日到 3 月 1 日。
车间团队可以在他们的控制屏幕上监控摄像机的清晰度,因此他们决定在此期间的某个时候清洗摄像机。我们能发现它吗?
梯度平均值从 2001 年 19 月变为 2003 年 1 月—图片由作者提供
清洗发生在指数 64 到 65 之间!很容易,因为我们看到梯度平均值(=锐度)从 0.8 增加到 1.4。
现在我们可以定义一个阈值(0.9 或者 1 呢?)系统地警告团队,并要求他们清洁相机以保存高质量的照片😀
像往常一样,您会找到相应材料的链接:
不要犹豫,在评论中分享你的经验或自己的做法吧!
皮埃尔-路易
https://pl-bescond.medium.com/pierre-louis-besconds-articles-on-medium-f6632a6895ad
为什么你不应该成为一名数据科学家
数据科学并不适合所有人。你是其中之一吗?
介绍
如果你正在阅读这篇文章,你可能已经意识到作为一名数据科学家的好处:
- 它有良好的工资和福利;
- 这个领域越来越受欢迎;
- 这是一个影响驱动的角色;
- 它提供了相当不错的工作保障。
然而,尽管它们听起来很棒,我认为数据科学并不适合所有人。
残酷的事实是,大多数考虑追求数据科学的人——尤其是纯粹基于利益的人——可能最终不会成为数据科学家。
不过没关系。在我看来,追求你不感兴趣的事情有极大浪费时间的风险。由于沉没成本谬误,在你职业生涯的后期,做出改变人生的决定通常要困难得多。
为了避免这种情况,我们需要问自己为什么我们想要从事数据科学。看到好处并被角色吸引很容易,但考虑缺点也同样重要。
以下是我根据自己的经验列出的为什么你应该而不是成为数据科学家的理由。如果你不想看这篇文章,我下面有一个视频,你也可以看看。
除了阅读这篇文章,你还可以观看我在 YouTube 上关于这个话题的视频。
多学科领域
数据科学是数学、计算机科学和商业领域知识的融合;随后,该领域有着相当高的教育准入门槛。
这种主题的组合可能是一种祝福,也可能是一种诅咒。数据科学非常广泛,总是有新的东西要学习,但是要学习和保持最新的新技能的数量很容易让人感到难以承受。
除此之外,许多公司也不知道他们在寻找什么样的数据科学家。这增加了为了学习技能而学习更多技能的压力。
在我参加的一些“数据科学家”申请和面试中,雇主实际上只是在寻找数据分析师或机器学习工程师。在某些情况下,他们只是在寻找一个数据独角兽:将所有与数据相关的问题抛给某人,希望他们能解决这些问题。
尽管在任何职业中你都应该努力学习和提高,但我认为在数据科学中尤其如此,因为它是学科的混合体。如果你不是那种喜欢一直学习的人,数据科学可能不是一个好的选择。
入门级饱和度
布鲁克·卡吉尔在 Unsplash 上的照片
总体而言,数据科学越来越受欢迎,这意味着入门级职位的竞争也在加剧。相对而言,我是最近才毕业的(也是在疫情之前),我有幸亲身体验到了 T4 的乐趣。
现在有很多大学提供数据科学课程。随着每年越来越多的人入学,现在数据科学专业的应届毕业生比以往任何时候都多。我记得我的机器学习教授说,他对他的课程每年注册人数的百分比增长感到惊讶。
然而,竞争初级职位的不仅仅是毕业生;还有一些分析师正试图转变成他们的第一个数据科学家角色。
再加上高教育门槛和工作模糊性导致公司不知道他们在寻找什么,许多求职者正在努力克服这第一个障碍。
在我看来,与更有经验的职位相比,尝试进入数据科学领域要困难得多。你可能会对其他职业说同样的话,但数据科学仍然是一个成熟的角色。在它进一步稳定之前,尝试获得第一份数据科学家的工作会感到非常沮丧。
角色模糊
这可以追溯到数据科学作为一个多学科领域的第一点。由于数据科学角色的模糊性,雇主在招聘广告中列出所有流行的数据科学工具来吸引最优秀的人才是可以理解的。
这种模糊性和最近围绕数据(如“大数据”和“人工智能”)的大肆宣传意味着,正在组建数据科学团队的企业可能实际上没有适当的基础设施;每个人都对数据科学感到兴奋,但并不真正了解它是什么以及它的要求。
不幸的是,真正知道如何利用数据科学的公司仍然是少数(如网飞、Spotify 等。).如果你试图进入数据科学领域,从统计数据来看,你在这样一家公司起步的机会要低得多。
此外,我发现围绕数据科学的角色模糊性和神秘性意味着人们很容易有更高的期望;出于这个原因,你很容易觉得自己作为一个新手必须取悦所有人。这样做只会让你的待办事项清单迅速失控。
根据经验,在寻找初级职位时,这种情况很难避免——尤其是如果你迫切需要经验的话。我还注意到,那些知道自己想要什么的雇主会寻找与他们使用的工具相关的非常具体的经历。因此,你职业生涯中不那么严谨、混乱的开端,可能不会给你提供在这些公司中更有经验的职位所需的更专业的技能。
当我申请初级职位时,我试图通过在面试中问更多的问题来回避这个问题。我发现这是真正了解雇主是否知道他们在谈论什么的唯一方法,但它很快就会重复(尤其是在大量申请的时候)。
数据和更多数据
由 Alexander Sinn 在 Unsplash 上拍摄的照片
老实说,数据并不性感。
数据科学家的大部分时间都花在计算如何处理他们拥有的数据上。如果没有可用的数据,您可能需要自己设置一些东西来收集数据。
一旦你有了数据,你很可能会花很多时间清理它。正如我听到人们说的:“垃圾进来,垃圾出去”。
一旦你清理了数据,并按预期工作,你甚至可能不得不建立自动化管道,这样你就不必每次都做同样的事情(除非你有数据工程师)。这使过程更加复杂,如果有东西坏了——根据 Sod 定律,肯定会有东西坏的——你就是需要修理它的人。如果那个坏掉的东西对业务至关重要?好吧,祝你好运。
正如你所看到的,在找到好东西之前,要为许多乏味的任务做好准备。如果你被期望拥有你的项目,尤其是这样。就我个人而言,我发现有很多商业政治,数据探索,检查技术限制,并确保该项目实际上回答了问题。
在我看来,如果你发现自己不喜欢花很多时间做无聊的任务,那么不幸的是,数据科学可能不适合你。
跟上学习进度
像任何其他工作一样,你应该始终努力保持学习;但是对于数据科学,我发现这样做尤其重要。
正如我不断重申的,数据科学是一个多学科领域:好的一面是在这些子领域中总有东西可以学习;坏的一面是,它会让人觉得你什么都得学。
数据科学的发展速度意味着,如果你不努力跟上,你将很快落后。此外,随着雇主在招聘广告中列出他们听说过的所有顶级数据科学术语的趋势,你可能会觉得除了尝试和学习一切,别无选择。
如果你对这门学科没有真正的热情,那么就很难跟上学习的步伐。这可能是一个很难弄清楚的问题,但这是一个需要问自己的重要问题。
这也是我有一段时间不确定的事情,这就是为什么我总是试图说服人们开始做他们自己的事情。一旦我在空闲时间做了自己的数据科学项目、写了博客并开通了 YouTube 频道,我意识到我可能非常喜欢这个主题(至少在不久的将来)🙂).
结论
作为结束语,这篇文章的目的不是要把任何人拒之门外。我只是相信我们的时间是我们拥有的最有价值的东西,所以希望我已经让一些人在一头扎进去之前从不同的角度思考了。
记住数据科学的好处和缺点,如果你仍然想从事数据科学,就试一试——这是你知道自己是否真正喜欢它的唯一方法。
如果你喜欢这篇文章,你可以在 Medium 上关注我,或者在 YouTube 上查看我的其他视频。如果你想通过电子邮件了解我在做什么,你可以考虑注册我的简讯!
原载于 2021 年 12 月 24 日 https://leonlok.co.uk*。*