救命啊!我如何选择特征?
很多时候,我们不确定如何选择我们的特征。这只是一个帮助选择的小指南。(免责声明:现在我将谈论二进制分类。)
很多时候,当我们非常兴奋地使用一种奇特的机器学习算法进行预测,并且几乎准备好应用我们的模型对测试数据集进行分析和分类时——我们不知道应该选择什么特征。通常情况下,功能的数量可以从几十个到几千个不等,并且不太清楚如何选择与相关的功能,以及我们应该如何选择许多功能。有时将的特性组合在一起也不失为一个好主意,这也被称为特性工程。这方面的一个常见例子,你可能在机器学习中听说过——是主成分分析(PCA)* ,其中数据矩阵 X 被分解为其奇异值分解(SVD) U∑V ,其中∑是具有奇异值的对角矩阵,你选择的奇异值数量决定了多少个主成分。你可以把主成分看作是减少数据集维度的一种方式。PCA 的惊人之处在于,新的工程特征或“主成分”是原始特征的线性组合。这太棒了!我们喜欢线性组合,因为它只涉及加法和标量乘法,并且它们不难理解。例如,如果你对一个关于房价回归的数据集进行主成分分析,假设你只选择了 2 个主成分。那么第一个组件 PC1 可以是: c1* (卧室数量)+ c2* (#平方英尺)。PC2 可能是类似的东西。*
主成分的限制是,你创造的新的特征仅仅是一些旧特征的线性组合。这意味着你不能利用非线性的特征组合。这是神经网络所擅长的;他们可以创建大量的非线性特征组合/功能。但是他们有一个更大的问题:新功能的可解释性。工程特征基本上隐藏在网络不同层之间的权重矩阵乘法中(这只是非线性函数的组合)。具有额外非线性的神经网络在敌对攻击下往往会变得脆弱和崩溃,例如对卷积神经网络的几个像素攻击,或者欺骗神经网络将一只熊猫和一个黑色方块错误地分类为秃鹫——诸如此类怪异、无意义的事情。
那么,该如何处理特性呢??好吧,如果我们设计新功能的方式有点有限,我们可以总是只选择我们已经拥有的功能的子集!但是你需要小心。有许多方法可以做到这一点,但并不是所有的都是可靠和一致的。比如随机森林。诚然,在使用分类器的最后,Python 会用随机森林的 feature_importances 方法输出相关特征。但是让我们想一想:随机森林是通过训练一组决策树来工作的,每一个决策树都基于训练数据的随机子集。因此,如果你一直重复 RF 模型,你可能每次都得到不同的特性重要性,这是不健壮的或者不一致的。作为一名数据科学家或 ML 工程师,看到每次都弹出不同的相关特性集,不会感到困惑吗?你显然没有改变数据集!那么,你为什么要相信不同的“重要性”特征呢?这样做的问题是,你选择的“重要性”特征取决于随机森林模型本身——即使 RF 具有很高的精度,选择仅基于数据集*、*的特征也比首先包括重型模型更有意义。
选择一致的、不混乱的、健壮的特性的关键可能是这样的:独立于你的模型选择特性*。无论是否使用神经网络、RF、逻辑回归或任何其他监督学习模型,您选择的相关特征都应该是相关的*。这样,当你试图同时选择不可靠的特征时,你就不必担心你的机器学习模型的预测能力。**
那么,如何挑选独立于模型的特征呢?Scikit-Learn 有几个选项。其中我最喜欢的一个叫做互信息*。这是概率论中的一个重要概念。基本上,它计算你的特征变量和你的标签变量相对于的相关性,假设它们是独立的。一种更简单的说法是测量你的类标签对某个特性的依赖程度。*
例如,假设您通过查看数据集中的一系列特征列(如几何面积、位置、色调等)来预测某人是否患有肿瘤。如果你试图选择与你的预测相关的特征,你可以使用互信息来谈论每个类别标签如何依赖于肿瘤的几何面积、位置和色调。这是从数据中直接得到的测量值;它从一开始就不涉及使用预测模型。
您还可以使用 Sci-kit Learn 的 chi-2 ,或“卡方”来确定特性的重要性。这是在特征和标签之间使用卡方检验来确定哪些特征与标签相关,哪些特征与标签无关。你可以把这种方法看作是测试一个“零假设”H0:特征独立于分类标签吗?为此,您需要基于数据表计算卡方统计量,获得 p 值,并确定哪些要素是独立的或不独立的。然后你把独立的特性扔掉(为什么?因为根据你的测试,它们独立于标签的,所以它们不提供任何信息)并保留依赖的标签。**
这个测试实际上是基于与上面讨论的互信息计算相似的原理。然而, chi2 确实做出了重要的假设,即数据集中取连续值(比如 5.3,pi,sqrt(2),诸如此类)的要素是正态分布的。通常对于大的训练数据集来说,这不是问题,但是对于小的训练数据集来说,这个假设可能会违反,所以在这些情况下计算互信息可能会更可靠。
基本点是这样的:互信息和卡方特征选择方法对预测模型是稳健的。您的预测模型可能非常不准确,但是您收集的数据是静态的,不会在表中更改,因此在没有模型的情况下计算您的要素更加一致。
其他特征选择方式包括递归特征消除(RFE),它使用预先固定的模型(比如逻辑/线性回归或随机森林),并使用预先固定的模型测试几乎所有的特征子集,并通过查看哪个特征子集给出最低精度误差来决定哪些特征是最好的。(从技术上讲,随机森林在 Scikit Learn 中使用了一个额外的方法,称为 feature_importance ,但我在这里不会深入讨论。)然而,RFE 确实需要很多时间,因为如果你有 K 个特征,那么大约有 2 到 K 个特征子集,所以需要很长时间来计算每个子集的模型并获得分数。**
我反对 RFE 和类似技术的另一个重要原因是,它基本上是一种依赖于模型的特征选择技术。如果你的模型不准确,或者过度拟合,或者两者兼而有之,并且用户无法理解——那么你选择的特性实际上不是你选择的,而是模型选择的。所以。特征重要性可能无法准确表示哪些特征实际上是基于数据集的预测。**
那么我们能从这些中学到什么呢?好吧,最后,如果你不知道如何用主成分分析来解释你的工程特征,特征选择是非常重要的。然而,当你选择特征时,同样重要的是要注意你是如何选择特征的*,以及计算时间。你的方法在计算机上花费太多时间吗?你的特征选择是基于首先使用特定的模型吗?理想情况下,不管你用什么型号的,你都会想要特征选择*,所以在你的 Jupyter 笔记本里,你会想要在型号之前做一个特征选择的单元格——就像这样:**
*from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif
# "mutual_info_classif" is the mutual-information way of selecting
# the K most dependent features based on the class-labelK = 3
selector = SelectKBest(mutual_info_classif, K)
X = new_df.iloc[:, :-1]
y = new_df.iloc[:, -1]
X_reduced = selector.fit_transform(X,y)
features_selected = selector.get_support()*
首先,我做了特征选择(如上)。
*from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X_reduced, y,
train_size=0.7)
# use logistic regression as a model
logreg = LogisticRegression(C=0.1, max_iter=1000, solver='lbfgs')
logreg.fit(X_train, y_train)*
然后我训练了模型(上图)!😃
帮助孩子们玩人工智能
杂志如何教授最先进的技能
茱莉亚·贝尔泰利在 Unsplash 上的照片
每天,我们的孩子都被算法席卷了整个世界。
YouTube 算法决定他们观看什么视频,GPS 算法绘制他们去学校的路线,Spotify 算法选择他们听到什么歌曲,Siri 和 Alexa 等个人助理为他们提供建议——所有这些都是由人工智能驱动的。
儿童(和成人!)让这些与人工智能的被动接触没有任何物理产品——只是源源不断的被动消费。
教师、父母和护理人员不应该被这些数字潮流冲昏头脑,而是应该向孩子们展示如何使用机器学习和神经网络等强大的工具进行实验。
我们必须培养能够在工作场所与人工智能并肩工作的孩子。在技术的帮助下,未来最优秀的员工将能够更好地听写、书写、聊天和做梦。
未来的工人将需要展示创造力、灵活性,以及对机器学习和算法工具的适应。通过玩耍,我们可以在不牺牲模拟创造力的情况下培养这些技能。
我们可以向孩子们展示,人工智能不是他们生活中的一个被动特征。人工智能是一种工具,就像铅笔或纸张一样。真正的诀窍是知道特定问题何时以及为什么需要特定的数字工具。
机器杂志!
我花了六个月的时间学习足够的代码,这样我就可以使用超能力的 GPT-2 语言模型来写故事。
我从我的 AI 写作伙伴那里浮现出 5 万字的奇怪而精彩的故事。我喜欢这一切,但从未找到与新读者分享的完美方式。该文本太过奇怪,无法以传统方式发布,也太过笨拙,无法以直观的 PDF 格式阅读。
我的女儿最终为我解决了这个问题,带回了安德鲁·克莱门斯的《午餐费》,这是一本经典的中级小说,讲述了一个孩子在小学开始卖杂志的故事。
你应该读完整本小说,但是这个谷歌图书链接将直接带你进入这本书的核心:用两张纸制作一个简单的 16 页杂志的食谱…
见见格雷格·肯顿,未来的亿万富翁。格雷格肯顿有两个痴迷-赚钱和他的长期…
books.google.com](https://books.google.com/books?id=4TITOhPP-gsC&lpg=PA30&vq=Write%20a%20story&pg=PA30#v=onepage&q&f=true)
假期里,我和女儿开始一起制作杂志。在这些小本子上剪、贴、涂,真是太可爱了。
每本杂志都是人工智能生成的图像和文本的组合,但它们是由人类编辑、转录和手写的。
这是人类和人工智能创造力的完美结合——我们称之为“机器杂志”
我和女儿一起创作的机器杂志中的一页。
这个简单的过程是一个启示。当我花时间手写我的 GPT-2 输出时,我成为了写作过程的参与者,而不是一个被动的家伙按下“开始”按钮,而 GPT-2 做所有的工作。
我认为杂志是迄今为止分享 GPT-2 产出的最佳媒介。你可以快速阅读杂志,读者不会陷入人工智能生成的文本有时尴尬的语法中。
如果你有自己的杂志,写信给我。我很乐意与更多的读者分享你的作品!
如何用人工智能写杂志
安迪·凯利在 Unsplash 上的照片
你不必花六个月的时间学习如何用 GPT-2 或其他人工智能语言模型编写代码。遵循这些简单的步骤,到本文结束时,您就可以编写自己的机器杂志了!
1.开始一个故事
和你生活中的孩子一起工作,写一两个句子——一个故事的开头,一首诗的前几行,或者一篇个人文章的开头。这就是你所需要的。我们是这样开始的:
A family creates small books with artificial intelligence. They are called "machine zines."
2.与变压器对话
一旦你完善了你的前几个句子,去和变形金刚对话。由 @AdamDanielKing 创建的这个网站让你可以即时访问 GPT-2,一个在 800 万个网页上训练出来的超能力语言模型。OpenAI 公司训练了 GPT-2,并逐渐向公众提供了强大的预测文本生成器。
3.输入你写的句子。
GPT-2 有一套看似简单的技能:它可以根据给定的写作样本预测接下来会发生什么。一旦你输入你写的句子,与 Transformer 对话就像智能手机上的自动完成功能一样工作。
4.点击“完成文本”
一旦你按下那个按钮,GPT-2 就会自动完成你的句子。输出的内容从几个句子到几个段落不等。继续点击“完整文本”,直到你得到足够的句子来填满你的杂志。
5.手写你的 AI 作品!
既然 GPT-2 发挥了它的魔力,是时候让你手写出文本了。这给杂志增加了人情味,给你一个机会来编辑你喜欢的故事。
删去没有意义的句子,组合句子,移动段落,添加任何你喜欢的单词。你是人类!你是这本杂志的老板!
以下是我们对文本进行剪裁和移动以帮助表达 GPT-2 关于人类和人工智能创造力的信息后的最终文本:
The first thing you need to do is stop. And think about what you want to see.Why not have the book do the talking? Why not have the machine sing? Why not have the machine write?A machine can talk to you.A machine can write you stories.They do not understand you.Sometimes a machine will do more. It will follow you from behind, writing stories for you.What will it write if you don't?What will it write if you try to stop it?Remember that it's just there to let you take the first step.What will it write?
我和女儿一起做的机器杂志的一页。
6.折叠你的机器杂志!
现在是时候做一些只有人类才能做的东西了。
根据你有多少页,选择你最喜欢的杂志风格。杂志的折叠方式有很多种,都有很惊艳的视频来说明。
例如,8 页的杂志格式真的很容易,而且一旦你正确地折叠起来,真的很令人满意…
这个 14 页的模型有点复杂…
我女儿和我用安德鲁·克莱门斯方法用了很棒的午餐钱。
这个谷歌图书链接将带你直达这本书的核心:用两张纸制作一份简单的 16 页杂志的食谱…
见见格雷格·肯顿,未来的亿万富翁。格雷格肯顿有两个痴迷-赚钱和他的长期…
books.google.com](https://books.google.com/books?id=4TITOhPP-gsC&lpg=PA30&vq=Write%20a%20story&pg=PA30#v=onepage&q&f=true)
如何用人工智能来说明你的杂志
一旦你制作了你的杂志,你就可以开始添加文字了。但是很快,你就会意识到一些事情——你需要一些插图!
我是一个糟糕的艺术家,我永远也不可能创造出一个足够引人注目的图像来配合这些计算机生成的故事。
1.运行一个比根的副本
BigGAN 是一个生成性对抗网络,是两个独立的神经网络一起工作创造新事物的强大合成。BigGAN 最擅长图像生成,创建从未存在过的动物、物体和人的图像——它们是由 AI 模型本身生成的。
*万众瞩目围绕论文,*大规模甘训练高保真自然图像合成,最近在社交网络上冒出来的。这篇论文是赫瑞瓦特大学的安德鲁·布洛克与 DeepMind 的杰夫·多纳休和卡伦·西蒙扬合作的实习项目……该模型能够生成高保真度和低变化差距的非常令人印象深刻的图像。”
你可以在家里用这台谷歌 Colab 笔记本试试,这是一种向孩子介绍人工智能的超级简单的方法。只需运行笔记本,然后使用滑块和对象列表来创建新的东西。
2.为您的机器杂志选择计算机生成的图像。
我女儿和我花了整整一个下午运行 BigGAN 代码,并生成家用物品的计算机版本,以说明我们的机器杂志。
3.打印图像
一旦我的女儿选择了杂志的图片,我们就把它们打印出来并粘贴在杂志上。
最终的产品是弯曲的,自制的,完美的人类艺术品,一种与人类同胞分享 GPT-2 作品的方式。
额外加分:让一个孩子来画插图
当然,你不需要用 AI 来说明你的机器 Zine!
另一天,我让我 4 岁的儿子给一本机器杂志画插图。我会大声朗读 GPT-2 产生的文本,然后他画了一幅画。
我喜欢他的绘画和人工智能文字的混合效果。我的孩子帮助我把这个故事从冰冷的数字环境中剥离出来,并把它重新定义为温暖、友好和人性化的东西。
这不仅仅是按下“开始”按钮。我们合作,我的家人和人工智能。
人类和人工智能关系的巨大变化是无法回避的。
变化已经开始,我们需要让我们的孩子做好准备,在一个被机器学习、神经网络和其他 21 世纪数字工具破坏的世界中茁壮成长。
我们可以增加孩子们的想象力,扩展他们梦想的一切,而不是害怕这些变化。
我的儿子讲述了一个由 GPT-2 产生的故事
帮助机器理解复杂的问题
基于手套嵌入和 Keras 的多标签文本分类
照片由 Unsplash 上的 Dmitry Ratushny 拍摄
(此项目灵感来源于Google QUEST Kaggle Challenge)
自然语言处理领域一直令我着迷。想象一台计算机能够理解人类语言并对其做出反应,这简直令人吃惊。我一直想做一个涉及 NLP 和深度学习的项目,所以我决定创建一个项目,其中一个利益相关者需要改进他的问答系统。
尽管问答系统和聊天机器人已经变得如此先进,但当面对本质上更复杂的问题时,它们仍然会陷入困境。机器可以很容易地计算出字符数或词汇等维度,但人类更擅长计算定性维度,如“这个问题是在寻找建议吗?”
一个可以预测问题的主观方面并正确识别复杂性的模型对于改进这些工具的构建和实现非常有帮助。
因此,我们有一个多类别、多标签的文本分类问题,其中一个样本可以同时被分类为多个类别,并且有 6,079 个样本要处理。我们将使用手套预训练的单词嵌入和带有 Keras 的神经网络模型。开始吧!
为了不使这篇文章太长,我们将把重点放在自然语言处理和建模方面,但你可以在 我的 Github 页面 上找到这个项目的全部内容,包括数据探索。
为了拥有更强的计算能力,我使用了 Google Colab,所以我把数据添加到了我的 google drive 中。我加载了数据,只选择了与我的项目相关的内容,并立即将数据拆分以避免任何泄漏。
此外,这个数据集上的原始目标不是二进制的,所以我做了一个快速转换,以便于我们的分类。
现在有趣的部分开始了!首先,我们创建一个小助手函数来清除文本数据中的点、数字、多余的空格等。
我们使用 apply 和 lambda 方法将函数应用于所有文本数据。
我们将加载一个普通爬行手套模型的 pickled 版本,它具有 840B 令牌、2.2M 词汇、cased 和 300d 向量。加载酸洗版比加载整个 2.03 GB 手套模型要快得多。同样,我把那个文件保存在我的 Google Drive 上,所以那就是我们获取它的地方,但是你可以在这里找到所有的手套嵌入。我们定义了一个嵌入矩阵,我们的模型将使用它作为嵌入层的一部分。
现在,我们需要将我们的文本数据标记并填充到 300 维手套嵌入的正确形状中。我选择将我的文本列作为单独的特征,而不是连接所有的文本数据。
接下来,我们还需要为神经网络准备分类列。我用 LabelEncoder 来做这个。
最后,我们将使用 Keras 建立我们的神经网络模型。下面这个函数很大程度上是从这个 Kaggle 笔记本中得到启发和改编的,它使用三个独立的输入,一个用于分类特征,两个用于文本特征,即问题标题和问题正文。
让我们走一遍那里正在发生的事情:我们通过一个 sigmoid 激活的密集层传递我们的分类特征。然后,使用两个嵌入层,用 GloVe 嵌入对我们的文本列进行编码,并将它们连接起来。然后,我们使用长短期记忆网络(LSTM)层,它通常用于自然语言处理模型,具有双向层包装器。我们将在 LSTM 层之后连接一个全局最大池和一个全局平均池,并添加两个具有 relu 和 sigmoid 激活的隐藏层。最后,我们添加文本和分类层输出,并传递一个最终的密集层,其中包含 8 个节点和一个 sigmoid 激活,它将与我们的多标签问题目标一起工作。
我们编译我们的模型,并使用我们之前构建的手套嵌入矩阵传递函数。然后,我们将它与我们的数据进行拟合,并评估我们的结果。首先,我使用评估方法,并获得模型的训练和测试数据的准确性。
Train Accuracy: 0.8713242853592384
Test Accuracy: 0.839124177631579
然而,由于我们的数据存在严重的不平衡性,我们想看看其他比准确性更能提供信息的指标。Keras 不支持分类报告方法,但我们可以通过将 Keras 的预测转换为二进制结果,然后将它们传递给 Scikit-learn 分类报告方法来轻松应对。
从我们的结果中我们可以看到,尽管我们能够使用手套嵌入的神经网络模型实现接近 84%的整体准确性,但我们根据目标具有不同的精确度、召回率和 f1 分数。
我们的数据存在严重的类别不平衡,更复杂的目标实际上也是样本更少的目标。到目前为止,这些目标的表现最差,不仅因为它们很复杂,因此机器很难解释,还因为样本数量很少。更多的数据,尤其是涵盖代表性不足的目标的数据,有助于进一步改进我们的模型。
无论如何,参与这个项目是使用自然语言处理工具和 Keras 的好方法,我希望它对你也有用。编码快乐!
用混合整数规划(MIP)帮助圣诞老人计划
关于我们如何在 Kaggle 组织的“2019 年圣诞老人工作室之旅”比赛中获得银牌的报道
今年, Bram Steenwinckel 和我作为第 28 个团队(1600 多名参与者),为圣诞老人的年度 100 天研讨会提供了最佳时间表,确保了我们的圣诞礼物。这篇博客文章包含了一个问题描述和我们为达到这个最佳解决方案所采取的不同步骤。
**免责声明:**布拉姆和我绝不是优化方面的专家。然而,我们玩得很开心,也学到了很多东西。
问题定义
每年,圣诞老人都会组织一个为期 100 天的圣诞工作坊,让 5000 个家庭参加。每个家庭(由一定数量的家庭成员组成)可以提供他们最喜欢参加的 10 天的列表。由于研讨会场地容量有限(每天必须有 125 至 300 名与会者),因此不可能让每个人都有自己的首选。因此,向没有获得第一选择权的家庭提供补偿。一个 N 口之家,没有得到他们的第一个选择会得到:
- 50 美元礼品卡,如果他们有第二选择的话
- 每位家庭成员获得 50 美元礼品卡和圣诞老人自助餐 25%的折扣(价值 9 美元),如果他们有第三个选择的话
- 第四种选择的家庭成员每人 100 美元礼品卡和圣诞老人自助餐 25%的折扣(价值 9 美元)
- 如果他们得到第五个选择,每位家庭成员可获得 200 美元礼品卡和圣诞老人自助餐 25%的折扣(价值 9 美元)
- 第六种选择对应的每位家庭成员 200 美元礼品卡和圣诞老人自助餐 50%折扣(价值 18 美元)
- 第七选择每位家庭成员 300 美元礼品卡和免费圣诞老人自助餐(价值 36 美元)
- 第八个选择的家庭成员每人 400 美元礼品卡和免费圣诞老人自助餐(价值 36 美元)
- 每位家庭成员可获得 500 美元的礼品卡、免费的圣诞老人自助餐(价值 36 美元),如果他们获得第九个选择,每位家庭成员可享受 50%的北极直升机之旅(价值 199 美元)
- 每位家庭成员可获得 500 美元的礼品卡、免费的圣诞老人自助餐(价值 36 美元),否则每位家庭成员可免费乘坐一次北极直升机(价值 398 美元)
哦,天啊,我不介意从我的十大清单中选不到一个。我已经可以想象自己坐在圣诞老人旁边,乘坐直升机飞越北极。另外,500 美元和一顿免费晚餐也不算太寒酸。
史蒂文斯家庭的未着色图像被分配到第十个选择。
但这还不是全部…如果我们不在 100 天内统一分配出席人数,还会有会计处罚:
未统一分配服务员人数的会计处罚。N_d 是第 d 天的服务员人数,N_(d+1)是第 d+1 天的服务员人数
最终目标是将这 5000 个家庭分配到 100 天中的一天,使偏好和会计成本的总和最小化。
检查数据和成本
让我们仔细看看提供的 5000 个家庭的数据。首先,让我们检查一下家庭规模:
5000 个家庭的规模遵循某种正态分布
因此,看起来家庭规模有点正态分布,规模 4 是众数。现在,让我们看看作为首选的日期:
将某一天作为首选的家庭数量。
显然,第一天是非常受欢迎的一天。实际上,日子是倒着算的,d 日是指圣诞节前 d 天。因此,第一天正好是圣诞节的前一天,这解释了为什么它如此受欢迎。此外,我们看到对应于周末的周期性峰值。让我们创建一个偏好成本(的对数)热图,作为家庭规模和指定选择的函数:
一张偏好成本的热图,它是家庭指定选择及其规模的函数
最后,让我们来看看会计成本日志的热图:
当当天的服务人员数量等于 125 时,会计成本始终为零,当当天的服务人员数量为 300 而第二天为 125 时,会计成本最大。
第一种方法:贪婪,匈牙利方法,遗传算法和模拟退火
贪婪算法
我们的第一次尝试非常幼稚。由于每天的出席人数必须至少达到 125 人,我们保留了一个没有 125 人出席的日期列表。然后,我们遍历每个系列,并将其分配给列表中的一个选项。如果这个家庭的选择都不在这个列表中,我们就把它分配给最佳选择,确保那天的服务员不超过 300 人。
匈牙利方法
比赛开始后不久,opensourc.es 发表了一篇博文,获得了比我们目前所获得的分数好得多的分数。他的策略是忽略会计成本,使用匈牙利方法最小化偏好成本。普通实现试图统一分配家庭(每天 50 个)。我们很快扩展了这种方法,将更多的家庭分配到更受欢迎的日子。我们实际上试图解决下面的优化问题有一段时间了:找到一个 100 维的向量 V ,它的元素总和为 5000(家族的数量),当提供给匈牙利算法时,它产生最小的成本。V【I】将是分配给第一天的家庭数量。不幸的是,这是一个有点“昂贵”的问题,对于每个新的 V ,我们必须重新运行匈牙利方法,这需要一些时间。使用我们的最终向量,获得了 95441 的分数,而不是原始提案获得的 144287 。下面可以找到这方面的代码片段。
匈牙利算法的代码片段
贪婪局部搜索
然后,我们实现了一些算法(或者使用了通过公共笔记本提供给我们的一些很棒的实现)来对解决方案做一些小的调整。每次适应后,我们重新计算分数,检查是否有进步。很明显,快速评分功能至关重要。我们将进一步讨论这个问题。我们使用的策略是:
- 尝试将一个族移动到它的选择之一。
- 尝试交换两个系列(取一个系列(=f1),选择其中一个(=d1),然后选择当前分配给 d1 的第二个系列(=f2),并将其分配给其中一个(=d2))。
- 与上面类似,但有三个家庭。
- 随机搜索:取若干个家族(=F),强行分配他们的前 K 个选择。这是每次迭代的 K**F 次调整。这个策略被证明是最有效的。在比赛即将结束时,这个算法的一个 C++实现已经推出。
→如果我们将匈牙利方法创建的 95441 个解决方案输入该算法,45 分钟后我们可以获得大约 75000 的分数。
遗传算法和模拟退火
我们还使用了一些元启发式方法。我们首先想到的是遗传算法会在这场竞争中胜出。比赛开始后,我们很快专注于遗传算法,但很快就放弃了,因为我们的种群总是收敛到一个非常糟糕的分数。模拟退火更成功,因为它有时能帮助我们摆脱贪婪的局部搜索无法摆脱的局部最小值。模拟退火的要点是,它允许解决方案暂时恶化,以逃避深度局部最优。
成本的快速计算
如上所述,快速成本函数非常重要,因为这允许在相同的时间框架内进行更多的局部搜索。人们很快提供了可以在几纳秒内运行的 python 中使用的 C 实现。由于本地搜索的性质,这些实现甚至可以进一步优化:由于每次迭代中的适应是最小的,我们不需要计算每天的偏好&记账成本,而只需要计算受影响的那些。
非线性优化的局部求解器
随着比赛的进行,很明显,顶尖选手实际上取得了最佳成绩(68888.04)。随着时间的推移,越来越多的人实现了最佳价值。12 月 6 日(在比利时是" Sinterklaas "),来自 LocalSolver(一个非线性求解器)的人给了我们一份礼物。他们在推特上发布了一个简化版的解决方案,使用他们的工具实现了前 50 名的位置。解决方案是一个非线性目标的公式,可以用他们的工具进行优化。我们给自己弄了一个学术许可证,运行了这个工具,结果当时的分数大概是 71000 。下面是一段代码片段:
用 LocalSolver 求解非线性整数规划
简而言之,我们创建了一个 5000x100 的二进制矩阵 x ,其中包含了各个家庭对日期的分配。如果x【f】【d】= 1,则 f 族被分配给 d 日。由此,创建一个 100 维的 N 向量,其中包含每天的入住率。然后,我们设置约束条件,即每个家庭应该被分配恰好 1 天,并且每天的入住人数不能低于 125 人,也不能超过 300 人。使用 x 和 N 我们可以直接制定我们的非线性目标,并让 LocalSolver 发挥他的魔力,找到最佳的x-矩阵。
使用 Gurobi 的混合整数规划
虽然与使用贪婪的局部搜索相比,使用 LocalSolver 是一个直接的改进,但它仍然离最优值很远。因此,我们转向求解一个(线性)混合整数规划(使用 Gurobi,一个强大的商业求解器)。为此,我们必须运用一些技巧。
使目标线性
首先,LP 或 MIP 求解器期望约束和目标至多是二次的,最好是线性的。当查看会计罚款的公式时,很明显这是一个非线性函数。但是,由于一天的占用率被限制在 125 到 300 之间,因此该记帐功能的输入数量是有限的。从公式中我们可以看到两个因变量:当天的占有率和 d + 1 天(在这个框架中是前一天)的占有率。因此,我们可以创建一个(查找)176x176 矩阵,其中包含该会计成本的所有可能值(我们通过在会计成本热图中创建网格线暗示了这一点)。总之,一个名为 occ 的 100×176×176 矩阵用于存储所有这些信息。 occ[d][k][l] 如果在 d 日入住率等于 k,在 d + 1 日入住率等于 l,则 occ[d][k][l]等于 1。这个矩阵非常庞大,但我们可以轻松地删除一些变量。我们知道最佳解决方案的会计成本大约是 6020,因为与高于此的成本相关联的二元变量可以立即被丢弃。
每个家族仅使用 10 个二元变量
在我们的 LocalSolver 公式中,我们使用一个 5000x100 的二进制矩阵来存储我们的赋值。在检查我们的解决方案时,我们很快发现,最佳解决方案绝不会让一个家庭做出糟糕的选择。因此,我们可以将二进制矩阵的大小减少到 5000x10。如果家族 f 被赋予选择 c,那么 x[f][c]将是 1。
总之,我们有以下变量:
赋值变量
占用变量
当然,我们也可以从分配矩阵中计算占用变量:
根据分配矩阵计算占用率
这里,family_size 包含每个系列的大小,choices 是一个矩阵,包含每个系列的选项。为了更具体,让我们看一个简单的例子。假设我们有 5 个家庭,选择矩阵如下:
家庭选择矩阵的一个简单例子
那么第 1 天的占用率(occupancy(1))将等于:
基于分配矩阵计算占用率的实例
然后,我们添加约束条件,即占用率应该在 125 和 300 之间,每个家庭必须准确地分配一个选择,并且二进制占用率矩阵中的 1 位必须与计算的占用率值一致。最后,我们优化以下目标:
我们的医疗保险计划的目标
PREF 和 ACC 两个矩阵包含相应的费用。可以在下面找到可以提供给 Gurobi 的代码:
我们为 Gurobi 设计的 MIP 配方
我们让它运行了 1 周。!)并最终输出最优解。可以添加一些技巧来加快收敛速度,最明显的是添加约束条件,将求解器导向 68888.04 的最优解(带有求解器的相应“最优性证明”)。如果你成功地使你的求解器在一周内收敛,请在评论中告诉我们!
可视化我们的结果
使用一个公共内核,我们可以为我们的最优解创建一个很好的可视化:
我们的最优解的可视化。在 x 轴上,您可以看到每天的护理人数(显示在 y 轴上)。每个条形中的颜色表示那天被分配了特定选择的家庭的比例。
总结词
Bram 和我是找到这个最优解的第 28 个团队。鉴于我们没有线性编程的经验,我们对最终的结果感到非常自豪。我们现在都获得了银牌,我被提升为“竞赛专家”。
养猫,或者如何不组织你的数据科学团队。
组织数据科学团队的不同方式会带来不同的问题和机遇。
想试试放牧吗?
雇佣一群聪明的人,把他们锁在某个房间里,给他们一个问题去解决,就这样!奇迹将会发生!还没发生吗?然后加披萨!什么都没有?试试豆包!把他们转移到肖尔迪奇的“数据科学实验室”!还是什么都没有?也许免费啤酒可以……【1】
亲爱的读者,我们需要谈谈。虽然我很喜欢这个免费啤酒的话题,但我需要告诉你,魔法是不存在的。把人们关在外面并希望得到最好的结果不会产生结果。组织数据科学团队没有单一的公式,只有一系列取舍不同的选择。为了成功地进行这些权衡,您需要认真思考您的数据科学团队是为了什么,以及您应该雇用什么样的人。如果不小心,您可能会经历数据科学团队悲伤的这些阶段:
第一阶段:我们将把一些聪明人放在我们称之为“实验室”的地方,做一些我们并不真正理解的模糊定义的事情。
这叫研究。你真的想要研究吗?真的吗?看,雇佣一群博士级别的前研究人员,并把他们从企业中分离出来(或者给他们“发挥创造力的空间”,如果你喜欢的话),或多或少会保证他们回到培训中来。这一培训将引导我们的数据科学研究人员以最广泛、最具技术雄心的方式构建问题。然后他们会切掉这个问题的一大块,他们会继续英勇地解决这个问题。他们这样做 是因为 学者就是这么培养的 。不幸的是,尽管在智力上令人印象深刻,但这实际上可能不会改善业务。仅靠这一大块解决方案是不够的—请记住,我们在这方面一直雄心勃勃!我们将需要解决大量的其他问题,以形成一个足够完整有用的解决方案(在学术界,证明资金流的合理性)。你会问,这需要多长时间?也许一年。或者三年。或者 20 年。但是嘿!这仍然是令人印象深刻的进步,对不对?
如果你是谷歌或者微软的人,那也没关系。甚至有一些初创企业***【3】***用这种模式取得了成功,所以我不排除这种可能性。但这是你的企业真正需要的吗?
好了,我们已经受够了这些小丑浪费公司的钱!是时候面对现实了!
事实证明,“智力上令人印象深刻”无助于底线。你或许可以用“招聘”或“软营销”的借口逃脱惩罚,但你的首席财务官不是任何人心目中的白痴。这不会永远有效——是时候变得专业了!把项目经理带来!
暂停,豆包被拿走,表情严肃的人走进来。几乎可以肯定,吉拉在某个地方牵涉其中。]
如果进展顺利,并且假设您的项目经理是称职的,从经理的角度来看,事情似乎会有所改善。项目将与业务问题相关联,数据科学家将被分配到项目中。任务会被勾掉,时间会被占***【4】***你会最终觉得一切尽在掌握!
然后……事情就会水落石出。你首先会注意到,你最优秀的人才逐渐远离了你。但也许这没什么?当然,让二流的人做一些有用的事情比让顶尖的人进行头脑风暴要好吗?不管前面有多困难。很快,您将开始收到来自其他业务部门的抱怨,说您的数据科学团队响应不够。最后,你会注意到,在那些由数据驱动的关键业务领域,你正逐渐落后于你的竞争对手。
这是个坏消息。
发生了什么事?不幸的是,你创造了一个“吉拉堡垒”。通过将数据科学家视为平庸的软件开发人员,你提高了地板,但降低了天花板。你的数据科学项目不会再变得无关紧要了。然而,您已经在早期锁定了问题定义,并将解决方案细分为容易预见的任务。通过限制问题的范围和严格定义其解决方案,你已经锁定了真正有创造性的想法。结果,你最好的人将会离开。他们将带着自己的能力,灵活而富有想象力地应对出现的商业问题。此时,你可以耸耸肩,用剩下的来应对。您可以保留严格定义的问题,并将解决方案拆分成较小的任务,然后分配给其他人。然而,你对业务其他部分的反应已经从“嘿,当然!我们可以让高智商的人 X 来看看这个!”“我们需要将它添加到项目队列中,根据业务目标对其进行分类,召开一些会议来了解问题,分解问题,然后给你一个计划,然后实际进行工作”。
因此,对响应能力的抱怨将会开始。在最后阶段,如果没有优秀的人才,而且每件事都花费这么多时间,你将会越来越落后于你的竞争对手。
【暗示哀号和咬牙切齿。]
现在,你可能知道,我真的不喜欢这种方法。然而,至少在短期内,这种方法有时是可行的。老实说,有些情况下我们并不需要创新的解决方案。例如,您可能在一个数据科学技术成熟且变化不快的行业中追赶。在这种情况下,你不需要那些极具创造力、聪明(面对现实吧,善变)的人。所有的工作都完成了!你需要能够有效实施现有解决方案的人。所以你需要问问你自己,这些情况对你的企业来说是真的吗?因为如果不是这样,而你选择了“吉拉堡垒”,你将会被快速创新的竞争对手甩在后面。
第三阶段:很好,“吉拉堡垒”最初让我感觉很好,但它并不奏效。现在怎么办?
接下来你可以尝试的是“嵌入式数据科学家”模型。在这里,你把数据科学家放到产品和营销团队中。他们将负责完成这些团队需要的数据科学工作,构建任何必要的模型以使产品上线。您的数据科学团队将具有超强的响应能力,他们将与企业的其他部门站在一起。他们肯定会致力于相关的商业问题,因为,嘿!他们就在那里和其他人一起做生意。
然而。
当然有“然而”。尽管这是我最喜欢的工作方式,但它也有不好的一面。首先,尽管你的数据科学家可能是数学天才和 python 高手,但他们将融入到产品设计师和营销创意中。如果你强迫你典型的内向型数据科学家进入一个充满外向者的环境,这对他们来说会很累。然而,通过一点思考和灵活的工作实践,这个问题是可以克服的。一个更困难的问题是,你的数据科学家现在反应灵敏,独立自主。虽然这听起来像是我们都想要的问题,但它也带来了不利的一面,那就是他们将独立地争先恐后地解决类似的,甚至是相同的问题。对他们的产品团队来说,这无关紧要。然而,当你看一看正在做的事情时,你会发现一大堆代码重复,重复工作,最终浪费金钱。最终有人会说“嘿,看,所有这些数据科学家都在做大致相同的事情!为什么我们不把一切都集中起来?”所以,回到“吉拉要塞”。直到这种响应不够,在这一点上,回到嵌入式模型!直到有人建议再次集中一切…
愤世嫉俗。但是我已经四十多岁了。这是允许的。
如果这个模型也有缺陷,我们该怎么办?好了,现在我们明白了每一个陷阱,我们可以看到我们必须在一个不完美的世界中做出选择。你是否在开发一项革命性的技术上下了大赌注?也许数据实验室适合你。做之前已经研究出来的一般的数据科学?那就试试吉拉要塞。或者你是一家快速迭代产品的初创公司?那么嵌入式数据科学家就是你要找的人。
事实上,这些模型不必是唯一的。混合和匹配是可能的,这是我们将在后面的文章中返回的主题。
脚注
***【1】***这其实发生在我职业生涯的早期。不知何故,啤酒、豆袋和比萨饼没有解决任何问题,即使是在肖尔迪奇。
***【2】***科技公司在研究上的投资规模令人难以置信。见 此处 只是在学术界发表的 NLP 论文,不用管所有停留在内部的工作。
***【3】***我有一个做风险投资的朋友,他放弃了一家神经网络公司,因为那太多关于研究的东西了,而且他不懂商业模式。从某种意义上说,他是对的,但他最终还是错了
***【4】***不用说,这往往太过分了。 我从来都不清楚,这些高薪、雄心勃勃的专业人士对自己上厕所的时间有什么想法。不过,我想我能猜到。
***【5】***这是非常真实的效果。我曾与一家公司合作,其在线运营收入比直接竞争对手少 6 倍。原来线上运营都是为了用好那个数据。
金融市场中的羊群效应模型
本文主要研究股票的羊群效应。我根据文章:
-
基于主体模型的估计:不对称羊群行为模型的案例,阿尔法拉诺等人。艾尔。(2005)
-
蚂蚁、理性和招募,科曼(1993)
在第一部分,我提出了文章中概述的理论模型。接下来,我将其应用于几只股票:苹果、通用电气和特斯拉
第一部分。型号
该模型基于两个群体的相互作用:
了解资产“真实”价格的原教旨主义者。把他们视为自助餐型投资者,他们能够把握资产的真正价值
投机交易者对“真实”价格一无所知,而是基于“非理性”情绪进行买卖。
总的来说,市场上有 N 个交易者, Ns —投机(‘吵闹’)交易者的数量, Nf —基本面分析者。
Nf+Ns = N
现在最有趣的部分来了:互动。互动意味着原教旨主义者可能会转向投机交易者,反之亦然。
为了表示转换的概率,我们使用下面的等式( n 代表“嘈杂”交易者的数量)
转向“吵闹”交易者的可能性
转向原教旨主义者的可能性
a1 和 a2 为切换趋势, b 为羊群行为参数。因此, a1 、 a2 和 b 越多,切换的概率越大。
到目前为止,一切顺利。现在我们引入z——市场中噪音交易者的比例。
该模型的最后一部分是均衡条件:过剩需求满足过剩供应,在每个时刻,我们都有一个清算市场的价格。原教旨主义者的过度需求由下式给出。
公平价格 Pf 和市场 P 之间的正差值越大,它们的过度需求就越大。另一方面,投机者的过度需求
ξ 代表情绪, r0 是均衡 EDf 和 EDc 的比例因子。
从等式 Edc+EDf=0 我们得到价格形成的结果:
有趣的是,与“公平”价格的偏离可归因于自由因素 1)r0——吵闹的交易者的力量,2)投机者相对于基本面分析者的普遍程度,3)随机情绪系数。
现在,假设 r0 是常数,我们得到的回报是两个函数的乘积:
在哪里
和
η(t) 代表情绪的演变 ξ 。
现在,我们需要了解如何处理所有这些希腊字母。但是 int 统计,估计是和分布联系在一起的,所以我们需要一个 r(t) 的分布表达式,它本身是两个分布 σ(t) 和 η(t) 的乘积。
先说 **σ(t)。**经过长时间的推导,我们一致认为这是正确的分布函数:
B(ε1,ε2)是一个β分布(链接),ε1,ε2 被定义为
现在,唯一缺少的就是随机情绪 η(t) 。在这里,我们简单地假设噪声在[-1,1]范围内是均匀的。给定**η(t)**的对称分布,我们现在可以通过取绝对值来处理正回报。
绝对退货
对派生的另一个深入研究,最终的发行版如下:
其中β是不完全β函数。r0 可以推导为
在我的研究中,我只处理均匀噪声。接下来,我们用极大似然法估计绝对收益的分布。
第二部分。判断
我用这个模型投资了几只股票:苹果(APPL)、特斯拉(TSLA)和通用电气(GE)。选择不是随机的。特斯拉被认为是最令人讨厌的股票之一,尽管有大量空头头寸,它的股价仍在上涨。苹果是 FAANG 之一,其资本总额大于整个能源行业,和通用电气— 是美国经济中倒下的巨人。
我从雅虎财经获取了 5 年的每日报价。此外,对绝对回报进行了调整,因此 E®=1。
我的最大似然估计器的实现:
为了得到ε1 和ε2 的稳健估计,我对 500 个每日收益进行了 100 次随机子采样。
葛
ε2> ε1 暗示平均而言,市场由原教旨主义者主导。对于股票来说,这是一个常见的情况。红星指向中值ε1,ε2。
当价格出现大幅波动时,例如在 2018 年底,我们可以看到嘈杂交易者的集中度出现峰值。
苹果
更大的参数绝对值意味着苹果比通用电气更倾向于在投机和原教旨主义方法之间转换。
同样,在下跌趋势中,吵闹的交易者更加集中。
特尔萨
让我感到惊讶的是,尽管最近出现了天文数字般的增长,但并没有那么多投机交易者(至少根据模型是这样的)。
结论
蚂蚁模型是在近 30 年前提出的,1993 年,Alfarano 的《应用于市场的蚂蚁模型》是在 15 年前写的,然而,我还没有看到多少例子。然而,今天在历史上最大的牛市中,特别重要的是检查你在哪里:是否从众。
如果你想和我分享一些想法,请用电报写:@ maninoffice。
这里有 5 门来自顶尖大学的免费自然语言处理课程
斯坦福、伯克利等大学的顶级课程。
由 freepik 创建的背景向量—www.freepik.com
数据科学仍然是一个热门话题,但更具体地说,自然语言处理(NLP)的需求正在增加。
广义地说,NLP 是人工智能和机器学习的子集,帮助计算机理解、解释和操纵人类语言。它有许多应用,包括语音识别、自动聊天机器人、情感分析等等。
以下是几门免费的关于自然语言处理的高质量课程:
1.从语言到信息(斯坦福大学)
如果你在寻找 NLP 的介绍,这门课就是你要找的。请记住,本课程甚至是为那些没有任何 Python 经验的人设计的,因此有了 Python 教程。就我个人而言,我觉得这在理论上肯定涵盖了很多,但肯定还有其他更适合应用的课程。
本课程涵盖文本处理、情感分析、信息检索、聊天机器人等基础知识。如果你是编程新手或者对 NLP 一无所知,我强烈推荐这门课程。
[## CS124 —从语言到信息(2020 年冬季)
欢迎来到 CS124!!一些 FAQ 等等,103,107,109 的前提条件是否严格执行?:没有。参加课程…
web.stanford.edu](https://web.stanford.edu/class/cs124/)
2.深度学习的自然语言处理(斯坦福大学)
这门课也是斯坦福大学的,但是更高级一点。你应该精通 Python,并对基础微积分、统计学和机器学习有很好的理解。这门课程更多的是数学,所以确保你对向量和矩阵有很好的理解。
请记住,课程的很大一部分集中在向量、矩阵运算和神经网络上,因为这些概念构成了许多 NLP 概念的基础。所以如果你觉得自己不具备所需的数学技能,我建议你从上面的第一门课程开始。
自然语言处理(NLP)是人工智能(AI)的重要组成部分,模拟人们如何分享…
web.stanford.edu](http://web.stanford.edu/class/cs224n/)
3.自然语言处理的深度学习(牛津大学)
引用他们的话,这是 NLP 上的高级课程。
“这将是一门应用课程,侧重于使用递归神经网络分析和生成语音和文本的最新进展。我们将介绍相关机器学习模型的数学定义,并推导出它们相关的优化算法。该课程将涵盖神经网络在自然语言处理中的一系列应用,包括分析文本中的潜在维度、将语音转换为文本、语言之间的翻译以及回答问题。
与第二门课程相似,这门课程非常强调神经网络,因此,强烈建议你理解基本的线性代数、连续数学和概率概念。这个课程也非常实用,应用性很强,所以你也应该是一个熟练的程序员。
[## 自然语言处理的深度学习
这是一门关于自然语言处理的高级课程。自动处理自然语言输入和…
www.cs.ox.ac.uk](https://www.cs.ox.ac.uk/teaching/courses/2016-2017/dl/)
4.自然语言处理(华盛顿大学)
这是一门独特的课程,最初关注的是通常不关注的东西,比如隐马尔可夫模型、概率上下文无关语法等等。课程的后半部分主要关注向量和神经网络。
就我个人而言,我觉得课程材料为某些主题提供了很好的总结,比如神经网络。然而,通过类似的作业/实践,我觉得这更像是一种资源,你可以用来浏览或刷新你的记忆。
CSE 517 —自然语言处理—2017 年冬季讲座:WF 下午 1:30–2:50,205 华氏度
courses.cs.washington.edu](https://courses.cs.washington.edu/courses/cse517/17wi/)
5.应用自然语言处理(加州大学伯克利分校)
这是一门相当广泛的研究生课程。它强调了 scikit-learn、keras、gensim 和 spacy 的使用。就原始理论而言,本课程有顶级的幻灯片和额外的阅读材料来加深你的知识。它还涵盖了上述一些课程没有涉及的几个主题。
唯一不幸的是,他们不分享他们的任何作业/实践或测验,所以没有任何机会让你测试你的知识。
引自他们,“主题包括文本驱动的预测和预报(对涉及分类或回归的问题使用文本);实验设计;文本的表示,包括从语言结构(如词类、命名实体、句法和共指)导出的特征和从单词、句子和文档的低维表示导出的特征;以聚类为目的探索文本相似性;信息提取(提取文本中提到的实体之间的关系);和人在回路中的交互式自然语言处理
[## 应用自然语言处理
本课程考察了自然语言处理作为一套探索和推理文本的方法的使用…
people.ischool.berkeley.edu](http://people.ischool.berkeley.edu/~dbamman/info256.html)
感谢阅读!
我希望你能找到适合自己需求的课程,并祝你在数据科学之旅中一切顺利。
特伦斯·申
- 查看 我的免费数据科学资源 每周都有新资料!
- 如果你喜欢这个, 在 Medium 上关注我 获取更多
- 我们来连线上 LinkedIn
以下是如何将软件开发最佳实践应用于分析管道的方法
使用数据构建工具— dbt
Alex Kotliarskyi 在 Unsplash 上的照片
我已经与数据&分析领域密切合作了近十年,已经看到了许多关于分析、大数据和数据工程的有趣趋势。作为一名铁杆软件工程师,我一直想知道如何将软件工程最佳实践的原则引入分析领域。最近我偶然发现了一个非常有趣的开源工具——dbt(数据构建工具)。
dbt 将以下软件工程原则应用于分析代码—
- 版本控制和代码审查
- 自动化测试
- 沙盒和环境
- 证明文件
- 模块性
- 包装管理
dbt 是 Apache 2.0 许可下的开源项目。
您需要注意的一点是,dbt 不能帮助您获取数据。当您的数据已经在您的数据仓库中时,dbt 的魔力就显现出来了。
dbt 目前支持(通过核心和社区贡献)以下数据库/数据仓库—
- 红移
- BigQuery
- 雪花
- 很快
- 火花
- Postgres
- Microsoft SQL Server
本文的重点是展示如何根据软件开发最佳实践构建 dbt。
dbt CLI
dbt 允许您使用简单的命令行选项来转换数据。根据您的操作系统,dbt 网站上的提供了安装说明。一旦安装了 dbt CLI,您可以通过运行一个简单的命令进行验证
$dbt
你将会看到这样的选项—
dbt 云
dbt 最初是由一家名为 Fishtown Analytics 的公司创建的。他们还提供基于云的 dbt 服务—https://cloud.getdbt.com/
您可以根据自己的选择使用 CLI 或云服务。
先决条件
在本教程中,我将转换一个加载到大查询中的非常简单的数据。我正在使用的数据集可以在我的 GitHub repo 上获得。可以下载上传到大查询。
表格方案如下所示
样本数据看起来像这样—
配置大查询凭据
您可以使用 dbt 站点上描述的方法来配置大型查询凭证。这里我使用的是服务帐户 JSON 键方法。您需要确保服务帐户拥有以下权限—
- BigQuery 数据编辑器
- BigQuery 作业用户
- BigQuery 用户
然后,您需要确保设置了 dbt 配置文件$HOME/.dbt/profile.yml
,并更新了服务帐户的详细信息,如下所示
my-bigquery-db:target: devoutputs:dev:type: bigquerymethod: service-accountproject: my-projectdataset: olympicsthreads: 1keyfile: /path/to/service-account.jsontimeout_seconds: 300priority: interactiveretries: 1
您可以分别设置dev
和prod
的配置文件,而不会影响任何代码更改。这是 dbt 的特性之一,它允许我们轻松地进行沙盒和环境管理。
创建项目
您可以使用简单的 CLI 命令创建 dbt 项目
$ dbt init [project-name]
该命令创建一个示例 dbt 项目,其中包含所有必需的文件和文件夹。典型的结构如下图所示-
查看文件夹结构,您可以看到软件开发原则的含义,其中您可以分别看到用于测试、日志、模块、数据的文件夹。这允许代码结构的整体可管理性和可读性。这是非常友好的版本控制,易于遵循。
你可以在 dbt 站点上阅读文件夹结构的细节和它们的含义。
在dbt_project.yml
中,您需要设置您在前面部分配置的概要文件。
创建模型
我正在创建两个简单的模型来处理数据并获得一些见解。
models/example/athletes.sql
看起来像这样—
{{ config(materialized='table') }}with athletes as (select * from olympics.atheletesnew)
select * from athletes
model/example/players_by_country.sql
看起来像这样—
{{ config(materialized='table') }}with athletes as (select * from {{ ref('athletes') }}),players_by_country as (select country, count(*) as totalcount from athletes group by country)select * from players_by_country
在这里您可以看到 dbt 特性,您可以在一个文件中定义一个模型,并在其他模型中引用它。这有助于重用。此外,如果您需要更改基本模型中的任何内容,您可以在一个地方完成。就像任何典型的软件工程语言一样。
模型还有其他特征,比如—
- 启用/禁用带标志的模型
- 使用别名
- 使用变量
- 使用标签
- 等等。
您可以在特定的文件夹中创建模型。这允许您实现模块化。这类似于用某些编程语言创建包/名称空间。
文件
dbt 允许您为模型自动生成文档。让团队更容易理解并更好地合作
您可以通过运行命令来生成文档
$ dbt docs generate
您将能够通过运行一个命令来查看文档—
$dbt docs serve
你甚至可以在文档网站上查看血统信息,如下所示—
测试
dbt 允许您对生成的模型进行一些测试。默认情况下,您可以配置像唯一检查、空检查、参照完整性等测试。作为模特。在这个例子中,我运行样本模式测试来验证模型的结果是否为空。我可以在schema.yml
中配置这些测试,如下所示—
您可以通过运行一个简单的命令来运行这个项目的测试,比如
$dbt test
看到这样的输出—
你甚至可以运行一些复杂的测试,如 dbt 网站上所描述的。
日志
每当您编译和运行 dbt 项目时,它都会为您生成详细的日志。如果您遇到任何问题,这些日志对于追溯错误非常有用。
与 CI/CD 管道集成
所有 dbt 命令都给出正确的退出代码,如 0、1、2。您可以在 CI/CD 管道中使用此功能,以便了解特定步骤是成功还是失败。
Hey, if you enjoyed this story, check out [Medium Membership](https://deshpandetanmay.medium.com/membership)! Just $5/month!*Your membership fee directly supports me and other writers you read. You’ll also get full access to every story on Medium.*
这是我作为数据科学家两年来学到的东西
我希望我能早点学会
从我开始我的数据科学之旅到现在已经 2 年了。男孩,那真是一次惊险的过山车之旅!
有许多高潮和低谷,当然,还有无数杯咖啡和不眠之夜。
我失败了很多,学到了很多,当然,作为一名数据科学家,在这个旅程中我也成长了很多。
在我这两年的旅程中,从在媒体上写作、在会议和研讨会上发言、在 LinkedIn 上分享我的经验、咨询数据科学项目的客户,到目前在教育中教授数据科学的阶段,我在 分享和教学中找到了快乐和成就感,以帮助数据科学领域的其他人并产生影响 。
归根结底,这一切都归结为一个简单的事实——我正在朝着我的使命前进——让数据科学为每个人所用 。
如果你感兴趣,请随时查看我之前在 LinkedIn 上的帖子为什么我决定从一名数据科学家转型成为一名数据科学讲师——也就是老师。
在这篇文章中,我将第一次整合我所学到的一切,并将所有这些浓缩成我作为数据科学家两年来学到的 5 条经验。
如果您刚刚开始学习数据科学,不知道该学些什么…
或者你想找一份数据科学方面的工作…
或者你已经在数据科学领域工作了…
作为一名数据科学家,我希望这 5 课对你有所帮助!
说够了…让我们开始吧!
作为一名数据科学家,我在两年的时间里学到了 5 个教训
1.讲故事,不是演示。
在我的数据科学职业生涯中,一位伟大的高级数据科学家向我提出过的最深刻的问题之一是:
“阿德蒙德,我们待会在会上要讲什么故事?”
第一次听到这个问题,我愣了一秒。
他没有问我准备了什么幻灯片。
他没问我要分享什么。
他没问我会告诉他什么结果。
没有。
老实说,我甚至不明白为什么他如此强调讲故事,而不是讲我们已经掌握的事实。
在我开始意识到讲故事的重要性之前,我犯了很多错误。
要么是利益相关者不明白我在说什么。或者洞察力不能说服和激励他们采取行动。
一旦我决定提高我讲故事的技巧…
一旦我开始专注于讲故事…
一切都变了,真的。
利益相关者或非技术型老板开始理解我在交付什么,而不用用技术术语和结果轰炸他们。他们采取了行动。
T4:行为能说明问题,但故事能卖出去。
如果你想成为一名优秀的数据科学家,专注于技术技能。
如果你想成为一名伟大的数据科学家,专注于讲故事的技巧。
那么…如何学习讲故事的技巧呢?
想学习讲故事的技巧?向 Vox 学习。
因为他们是讲故事的高手,喜欢认真。
他们总是能够以引人入胜和易懂的方式解释复杂的问题或想法。
如果这是你第一次听说 Vox,看看下面他们的 YouTube 视频。
只需观察他们是如何用最直观、最容易理解的方式解释社会现象和问题的。
当涉及到用高超的讲故事技巧向你的观众展示见解或传递核心信息时,这一点非常重要。
2.数据是杂乱的,拥抱它。
忘记在你真实的工作环境中有类似 Kaggle 的数据,因为大多数时候你不会有干净的数据。
或者更糟的是,有时你甚至没有开始的数据,或者也许你只是不确定从哪里获得或查询数据,因为它们分散在各处。
数据收集 和 数据完整性 是任何数据科学项目中最重要的步骤之一,然而许多初级数据科学家可能会忘记这一点。
事实是,您需要知道根据业务需求和现有的数据架构从哪里获取数据。
获得数据后,您可能会松一口气,但这是困难的部分开始——数据完整性。
你需要对收集的数据进行彻底的检查,通过问一些困难的问题和从不同的利益相关者那里了解,看看收集的数据是否有意义。
如果一开始就没有正确和准确的数据,我们所有的数据清理、 EDA 、机器学习模型构建和部署都只是一种奢侈。
3.软技能>技术技能
数据科学初学者最常见的问题之一是:
“开始从事数据科学工作时,我需要学习哪些技能?”
在我看来,我认为学习技术技能(编程、统计等)。)应该是刚开始从事数据科学时的优先考虑事项。
一旦我们在技术技能上有了坚实的基础,我们应该更加注重建立和提高我们的软技能(沟通、讲故事等)。).
虽然这可能看起来有点违背学习数据科学技能的正常方式,但我真的相信这种方法。
为什么?
你看。数据科学家是问题解决者。
我们不只是写一些代码,构建一些花哨的机器学习模型,然后就此收工。
从了解业务问题、收集和可视化数据,到原型制作、微调和将模型部署到现实世界应用程序的阶段,所有这些步骤都需要团队合作、沟通和讲故事技能与团队成员合作,管理利益相关方的期望,并最终推动业务决策和行动。
有一句名言:
“没有数据,你只是另一个有观点的人”
—爱德华兹·戴明
对我来说,获取数据只是第一步。更重要的是,你如何利用数据来推动业务决策和行动,以产生真正的影响。以下是我稍加修改的一段话:
“没有讲故事的技巧,你只是另一个拥有数据的人”
您可以执行世界上最好的数据分析。
你可以建立世界上最好的机器学习模型。
你也可以写出世界上最干净的代码。
但是如果你不能用你的结果来推动商业决策和行动,来说服人们使用你的成果,你的结果只会停留在你的 PowerPoint 幻灯片中,而不会产生任何真正的影响。
可悲,但却是事实。
4.可解释的模型非常重要。
对于大多数企业来说,除非你在一些尖端技术公司工作,否则花哨或复杂的模型通常不是分析或预测的首选。
你的老板和利益相关者想了解你的结果背后发生了什么。
因此,你需要能够解释你的结果背后发生了什么。
例如,是什么导致这种异常被检测到?为什么会这样呢?它在商业环境中有意义吗?为什么预测是这么回事?预测的促成因素是什么?我们的假设正确吗?
从上面提出的所有问题来看,本质上可以归结为一个简单的问题:
“背后观察到的模式是什么?”
能够理解我们的模型和结果背后发生了什么,对于通过说服利益相关者采取行动来推动业务决策至关重要。
大型企业根本无法在现实世界中部署黑盒模型,让它在不了解它如何工作或何时出现故障的情况下自由运行。
这正是为什么我们仍然看到简单的模型仍然在当前的行业中使用,如决策树和逻辑回归模型。
5.总是看到大局
当我刚开始从事数据科学时,我犯了一个巨大的错误。
我过于关注代码和错误,但不知何故却忽略了真正重要的全局——生产中的端到端管道集成以及解决方案在现实世界中的表现。
换句话说,我太专注于技术部分,以至于过度优化了我的代码和模型,而没有对整个项目或业务产生真正的影响。
不幸的是,我得到了这个教训。
幸运的是,我现在正在用我学到的东西来提醒自己要看到全局。
希望你能开始意识到作为一名数据科学家在日常工作中看到全局的重要性。
要做到这一点,第一步是首先了解业务领域和您正在解决的问题。
明确你或你的团队在项目中的目标,理解你的角色如何成为大局的一部分,以及不同的小部分如何作为一个整体为共同的目标而工作。
最后的想法
感谢您的阅读。
我的数据科学之旅无疑是艰难的,但我很享受这一过程,并在这一过程中学到了很多东西。
我每天都在学习。
我希望这篇文章在某些方面对您有所帮助,并将在您作为数据科学家的工作中应用这里的经验。
现在,我已经成为了一名数据科学讲师,您也可以期待我在未来提供更多的数据科学内容,以帮助您学习并进入这一领域。
如果你想了解更多关于数据科学的知识,请查看我的其他文章。
如果您对学习如何进入数据科学感兴趣,请随时查看这篇文章— 如何进入数据科学 —在这篇文章中,我整理并回答了数据科学初学者面临的一系列常见问题(或挑战),并提供了指导。
我希望您喜欢阅读这篇文章,并期待您成为数据科学社区的一员。
记住,不断学习,永不停止进步。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是Staq**—**的联合创始人/首席技术官,该平台是东南亚首屈一指的商业银行应用编程接口平台。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Twitter 、 Medium 上和他联系。
肩负着让每个人都能接触到数据科学的使命。Admond 正在通过营销归因和数据驱动的见解,帮助公司和营销人员了解和提高营销 ROI。
www.admondlee.com](https://www.admondlee.com/)
以下是我如何学习足够的数据科学编程
如何学习编程和我推荐的最佳书籍
毫无疑问,数据科学需要良好的编程技能,但是多少才够呢?你应该和一个普通的软件工程师知道一样多吗?本文旨在回答这个问题,以及更多问题。
阿尔瓦罗·雷耶斯在 Unsplash 上拍摄的照片
用一句话来总结——不,不需要了解中高级后端开发人员的编程水平。目标是比一般的统计学家知道更多,你会没事的。随着你职业生涯的进展,总会有时间去学习更多。
文章分为三个部分:
- 数据科学需要多少编程?
- 选哪种编程语言?
- 我推荐的入门资源
请记住,在本文中,您将找到推荐资源的附属链接,以便开始使用。这对你来说没什么,因为价格是一样的,但是如果你决定购买,我会得到一点佣金。此外,我只展示我自己经历过的材料,并可以保证 100%的质量。
事不宜迟,让我们从第一部分开始。
数据科学需要多少编程?
嗯,很多——但这取决于你的角色和你工作的公司。小公司不一定有开发和数据科学的结构化团队,因此需要对这两者都很熟悉。
简而言之,你在编程和数据科学方面都不会是最好的。这不一定是件坏事,因为你会更好地理解公司提供的产品/服务。
由于更正式的结构,大公司会以不同的方式对待你。你将只处理数据科学问题(作为一名数据科学家),通常看不到的全局。你是来做工作的,不是来问太多问题的。
请记住,这只是一个经验法则——从我的经验和许多其他人的经验中得出的。
选哪种编程语言?
老实说,这不是一个简单的问题。大多数网站都将 Python 和 R 作为首选语言,但这并不是唯一的选择。
一些公司需要数据科学解决方案,但没有任何数据科学家——以 web/移动开发为中心的软件开发公司。
虽然 Python 和 R 很棒,但我发现越来越多的资源是用 Java ,甚至是用 Go(lang)来解决机器学习任务的。见鬼,我甚至就这个话题写了一整篇文章:
谷歌的 Golang 能搞定数据科学吗?让我们找出答案。
towardsdatascience.com](/go-for-data-science-lets-try-46850b12a189)
我并不是说像 Java 和 Go 这样的语言非常适合原型开发,但是对于不了解 Python 或者只是不想使用它的软件开发人员来说,它们仍然是一个可行的选择。随着我深入软件开发,或者开发使用机器学习的应用程序,我可以理解为什么有人想要远离 Python。
总结一下:
- 如果你只关心数据科学和机器学习,那就学习 Python/R 吧
- 如果你是软件开发人员,不想切换语言,可以试试 Java 和 Go(以及其他语言)
我推荐的入门资源
我猜您已经选择了 Python 路线,这很好,有几个原因:
- 这种语言很容易学习——比 Java/Go 对初学者更友好
- 它是数据科学中使用最广泛的语言
- 它是一种通用语言——不限于统计任务
作为一名有抱负的数据科学家,Python 非常适合你。你没有必要去探索其他更难的语言,因为编码不应该是你主要关心的事情。
*但是如何入门呢?*我为你准备了两本很棒的书,它们帮助我学好了 Python,既有纯编程方面的,也有数据分析任务方面的。让我们从基础开始。
《学习 Python 》,作者马克·卢茨(奥莱利)
https://amzn.to/3nrnZtp
这是一本很棒的处女作——这一点毋庸置疑。请注意,这是一篇将近 1500 页的文章,所以不要期望在一天内完成。
尽管篇幅很长,我认为这是一本学习和掌握这门语言的必不可少的书。它以一种易于理解的方式涵盖了语言的各个方面。
一些主要的主题是数据类型、语句、循环、函数、函数作用域和参数、模块、类和面向对象的编程、异常、生成器、装饰器以及更多高级的主题。正如我所说的,这不是一夜之间的阅读,但你应该能够在 2-3 个月内完成。这些时间足够我们学习基础知识,并准备好进入更高级、更实用的主题。
这就是下一本书出现的地方。
用于数据分析的 Python,作者 Wes McKinney (O’Reilly)
【https://amzn.to/3fthEJu
正如您所料,对于一名有抱负的数据科学家来说,这是合乎逻辑的下一步。这一次我们有一本更短的书——大约 500 页。如果你把它作为一个优先事项,你肯定能在一个月内覆盖它。
前 100 多页是对 Python 编程语言的复习,所以可以跳过它。
之后,这本书涵盖了你期望从一本伟大的数据分析书中得到的几乎所有东西。通过基本的例子和后来更现实的数据清理和准备任务,像 Numpy 和 Pandas 这样的基础库被很好地覆盖了。
这本书还介绍了数据可视化和处理时间序列,这是一个不错的奖励,但不是你应该购买这本书的东西——因为这些主题有更好的选择。
总的来说,这是一本很好的读物,也是第一本书的后续。
在你走之前
学习编程并不是最容易的任务,但对于像数据科学这样的职业来说是必须的。你要做多少编程工作将取决于你工作的公司的类型——小公司的环境更面向开发者,大公司则相反。
总会有例外,但我发现这是一个很好的经验法则,来自我的经验和我交谈过的许多其他人的经验。如果我们谈论的是小型人工智能初创公司,这条规则没有任何意义,所以请记住这一点。
关于语言,Python 是一个很好的起点。它很容易学习,并完成工作。如果你是 web/移动开发者,不想学习 Python,Java 和 Go 有不错的机器学习选项。
对于其他人来说,学习足够的 Python 和数据分析足以轻松处理更困难的问题,所以请确保您已经掌握了基础知识。上面的两本书应该会创造奇迹。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
加入我的私人邮件列表,获取更多有用的见解。
下面是我如何制作一个 CLI 工具来与 Google Colab 配合使用。
colab + cli =💖杰克纳克科斯在 unsplash 上的照片
使用这个 CLI 工具,您可以从您的终端管理 google colab 笔记本
我建造的东西
colab-cli :一个 cli 工具,用于自动化 google colab 的工作流程,从 CLI 创建、下载或添加笔记本到 google colab,并在 google drive 中组织它们。
存在的问题及解决方案
对于每个深度学习实践者来说,google colab 是一个在 Jupyter 笔记本上工作的必去之地。但是从 GitHub 库打开项目,保存到驱动器,然后在驱动器中创建文件夹来组织所有这些笔记本的整个 UX 是非常乏味的。
要将代码保存在 git 资源库中,GitHub 只有一个选项,GitLab 或其他服务都不支持。
因此,我想出了解决所有这些问题的解决方案是 colab-cli ,使用这个工具,人们可以从终端使用以下命令轻松打开 google colab 中的任何笔记本
cola b-CLI open-nb filename . ipynb
该工具的工作原理是将笔记本上传到 google drive,文件结构与本地 git repo 中的相同。
当你完成了谷歌 colab 的工作后
cola b-CLI pull-nb filename . ipynb
以在本地获取所有这些更改。现在你可以自由地提交它,并把它推到任何地方。
如果在本地对笔记本进行了一些更改,您可以在 google colab 中使用
cola b-CLI push-nb filename . ipynb
当从头开始一个项目时,首先要在其中初始化 git repo
git init
因为需要找到项目的根目录。要创建新的 Jupyter 笔记本,请使用
cola b-CLI new-nb my _ nb . ipynb
这个命令在本地和 google drive 中创建一个新的 Jupyter 笔记本,在 colab 中打开它让你工作。
堆栈是什么?在这个过程中,我遇到了问题或发现了新的东西吗?
是用 python 写的。我用 Typer 做了这个 CLI 工具。Typer 有非常好的入门教程和文档。处理 google drive API 的部分由 PyDrive 处理。包装部分因诗而易于管理。
主要耗时的部分是编写这些实用程序来处理文件夹和文件的创建和删除。
我还使用了 gitpython 来获取当前目录的 git 根目录,但是后来我在移动了我需要的文件之后移除了它,因为它有各种其他的依赖项,这增加了包的安装时间。
我从这个项目中了解到一些有趣的事情
*文件夹实际上是带有一些元数据的文件。
*为了从 API 创建一个新的 colab 笔记本,我必须知道 google colab 笔记本的 mime 类型,这显然在任何地方都没有像官方 google drive API 页面那样的文档,为了获得这个 mime 类型,我搜索了 google drive 发出的所有 API 请求,发现
google colab 笔记本的 mime 类型是:
application/vnd . Google . co laboratory
。
这是一个非常有趣的周末项目。如果您能尝试一下并给出您的反馈或帮助进一步改进,我将不胜感激。
演示
你可以在这里观看
链接到代码
完整的项目是开源的,你可以在 https://github.com/Akshay090/colab-cli 找到它
其他资源/信息
- Typer 教程:https://typer.tiangolo.com/tutorial/
*楼包配诗:https://typer.tiangolo.com/tutorial/package/
*帖子图片来源:https://unsplash.com/photos/4SHxst61_Sg
以下是我如何使用自然语言处理预测苹果股价的
利用情绪分析预测苹果股价走势的 NLP 研究
图片作者:特里斯特·约瑟夫
股票市场预测是指试图确定在交易所交易的公司股票(或其他金融工具)的未来价值的行为。准确预测股市就像能够预见未来。如果一个人能做到这一点,那么他们无疑会从事对自己有实质好处的行动。想象一下,知道明天苹果的股票将从每股 300 美元上涨 80%,目前有能力购买 10 股。这将保证在一天内以最小的努力获得 2400 美元的回报。如果一个人能坚持这样做至少一年呢?哇哦。
然而不幸的是,准确预测股票价格并不那么简单。有许多因素需要考虑,这些因素会影响股票的价格,建立一个包含所有这些因素的模型很可能会导致对样本外数据的预测不佳。但股市也往往具有前瞻性,这意味着它反映了投资者对经济的看法。正因为如此,我使用了自然语言处理(NLP),并试图通过使用前一个交易日的市场情绪来创建一个预测苹果股价的模型。
图片作者:特里斯特·约瑟夫
NLP 通常是指软件对自然语言(如文本)的操作。NLP 的一些最常见的应用包括语音识别、聊天机器人、自动更正、虚拟助手和情感分析。对于这个项目,我使用了情感分析。这是指对文本中的情感进行解释和分类,并允许对特定事物的情感(或感觉)进行识别。使用情感分析的模型通常关注文本的极性(消极或积极)。
许多文章每天发表,提供有关市场的信息或上市公司的最新消息。提供的信息可以说服个人购买或出售他们的股票,当大规模进行时,可以影响股票的价格。文章被称为非结构化数据(或无组织数据),这使得它们难以理解、分析和排序。
情感分析特别有用,因为它通过高效处理大量数据并自动按极性标记数据,使非结构化数据变得有意义。情感分析的输出也是一致的,这很重要,因为个人对情感的解释偏向于他们的观点。事实上,在确定一段文字的情绪时,估计人们只同意大约 65%的时间。因此,情感分析的过程包括提炼文档和提取关键词,然后通过将这些词与包含极性的预定义词典进行比较来对这些关键词进行排序。
图片作者:特里斯特·约瑟夫
为了这个项目,我收集了 2020 年 2 月 20 日至 2020 年 6 月 12 日期间发表在 MarketWatch.com 上的 267 篇与苹果相关的文章。文章不仅在一周或交易日发表;一篇文章在周末或非交易日发表是很常见的,这些也需要考虑。因此,在非交易日发表的任何文章都被记录为下一个可用交易日。
通常,对极性的快速检查可以让你设定对问题的期望,或者帮助你更多地了解问题。通过这样做,我注意到文章的极性集中在略高于零的位置。一个可能的原因是作者倾向于利用负面的标题,而在文章的主体中呈现正面的信息。
我还发现,文章中的字数和文章极性的大小之间的关系在消极和积极的文章中是不同的。数据显示,消极文章的字数与消极文章的极性负相关,而积极文章的字数与积极文章的极性正相关。我认为这是有意义的,它表明了在使一篇文章更消极或更积极方面所付出的努力。考虑一个无动于衷的人写一篇关于他们遇到的负面经历的文章;他们的经历越糟糕,他们很可能会留下更长的评论。
图片来自格力软件技术有限公司
了解到这一点,我决定创建一个比较词云,以确定哪些词与消极和积极的文章最相关。我发现“亏损”、“收益”和“供给”是负面文章中的关键词,而“流”和“收益”是立场文章中的关键词。鉴于很大一部分文章是在冠状病毒封锁期发表的,所以为什么“流”会与积极的文章相关联,“供应”会与消极的文章相关联是有道理的。许多个人订阅了新的流媒体服务,包括 Apple TV+,这有可能让投资者对苹果的未来有更好的展望。然而,许多人担心封锁将影响苹果即将推出的产品的生产和现有产品的供应,这有可能给投资者带来苹果未来不太乐观的前景。
虽然极性和努力之间的关系,以及比较词云,都产生了似是而非的结果,但我相信,通过使用更合适的金融词汇,它们可以变得更好。对于这个分析,我使用了 AFINN 词典;这会给单词一个介于-5 和 5 之间的分数,负分表示负面情绪。我发现 AFINN 比 NRC 和 Bing 词典都更合适。NRC 将单词分为“愤怒”和“厌恶”等类别,而 Bing 将单词分为“积极”和“消极”。尽管 AFINN 是最合适的,但我相信,创建一个精心策划的、能够对单词进行适当分类的金融词典会产生更好的结果。
图片作者:特里斯特·约瑟夫
通过观察标准化价格和极性之间的关系,我注意到极性对苹果股价有滞后的累积效应。正因为如此,我假设股价可以用递归函数`*明天股价=(今日价格)+常数(今日价格)*(今日情绪)**来建模。该函数通过接受初始股票价格和情绪向量来运行,然后使用递归关系来预测每个后续价格。要强调的是,第 0 天的股票价格作为模型的初始价格输入,然后预测明天(第 1 天)的价格。当模型需要预测第 2 天的价格时,第 1 天的预测值将自动用作输入价格;在第 3 天,第 2 天的预测价格将自动用作输入价格,以此类推。通过选择最小化平均绝对预测误差的值来确定最佳“T2”常数。
直到 4 月份,该模型的输出遵循与苹果实际股价相似的趋势,但此后完全背离。分析了背离的点,才知道不断的负面消息的作用,造成了从正面消息到奋斗的价格上涨。因此,我更新了模型,使积极情绪从“常数”项中获得的权重高于消极情绪。然后,通过选择最小化平均绝对预测误差的常数对,再次优化该函数。这种模型的使用大大减少了预测和实际股票价格之间的差异。
最后,我研究了一个递归模型:明天的股票价格=(今天的价格)+价格常数*(今天的价格)(今天的情绪)-交易量常数(今天的交易量)*(今天的情绪)。与本项目期间创建的其他模型相比,该模型的预测误差最低,预测值如下所示。
图片作者:特里斯特·约瑟夫
我仍在从事这个项目,目前我正在对高盛和埃克森美孚的股票进行类似时期的模型框架测试,以确定我是否会看到类似的结果。到目前为止,我很喜欢对这项工作的任何反馈,如果有兴趣,我愿意让其他人和我一起工作。请随时指出我可能犯的任何错误,或者提出任何可能被忽略的问题。
参考文献:
machinelearningmastery.com/natural-language-processing/
monkey learn . com/情操-分析/#:~:text =情操% 20 分析% 20 is % 20 解读% 20,或% 20 服务% 20in %在线% 20 反馈。
netapp.com/us/info/what-is-unstructured-data.aspx
the balance . com/how-market-prices-move-through-buy-and-selling-1031049
其他有用的材料:
algorithm ia . com/blog/introduction-自然语言-处理-自然语言处理
quora . com/为什么股市如此难以预测#:~:text = It % 20 真的% 20 不可能% 20 那么,在% 20 未来% 20 会发生% 20 吗?
researchgate . net/publication/228892903 _ 使用 _ 新闻 _ 文章 _ 预测 _ 股票 _ 价格 _ 走势
NLP . Stanford . edu/courses/cs 224n/2007/FP/timmonsr-kylee 84 . pdf
以下是如何使用 Keras 用几行代码构建一个语言翻译器
AI 能让濒危语言不消失吗?
您将学习如何使用编码器-解码器 seq2seq 架构和 5 分钟的时间从头开始创建一个语言翻译器。
波尔斯基在 Pixabay 拍摄的照片
据联合国教科文组织称,约有 2500 种语言面临消失的危险。在数字化时代,少数民族社区的年轻人往往会放弃他们的母语。
在这篇文章中,我们展示了人工智能可以弥合这些语言和世界其他地方之间的翻译差距。
让我们来发现 叶姆巴 ,一种非洲语言,如今只有几千人流利地说这种语言。与几十年前记录的数十万发言者相比,这是一个巨大的下降。
我们将建立一个从英语到 Yemba 翻译句子的序列到序列模型。该代码可以适用于任何其他语言对!
本文中使用的说明性数据集由 51 个句子对组成。
鉴于单词的分类性质,应该为每种语言建立一个词汇表。通常,词汇表的大小是固定的,只有最常用的单词才被视为唯一的。所有其他单词通常被转换为“未知”标记。在我们的例子中,我们考虑所有的单词。我们定义了英语和 Yemba 的最大长度和词汇量。使用 Keras Tokenize 类,我们将单词映射到整数。
每个输入和输出序列必须编码成整数,并填充到最大短语长度。这是因为我们将对输入序列使用单词嵌入,并对输出序列进行一次性编码。输出序列需要被一次性编码,因为模型将预测词汇表中每个单词作为输出的概率。我们进一步将数据集分成 40 个句子用于训练,剩下的 11 个句子用于测试。
我们的序列到序列模型使用单层单向 LSTM 进行编码和解码。这种模型的基本机制在我们下面提到的文章中有详细介绍。
如何预测客户询问背后的意图?Seq2Seq 型号说明。在 ATIS 数据集上演示的槽填充…
towardsdatascience.com](/natural-language-understanding-with-sequence-to-sequence-models-e87d41ad258b)
编码器中的第一层是嵌入层,它将我们的英语句子向量转换成嵌入向量(word2vec)。 src_vocab 是英语词汇量的大小。 embedding_dim 是 emdedded 后的向量的维数。 source_steps 是每个句子中的标记数,即一个英语句子的最大字数。
编码器中的第二层是一个 LSTM 层,其单元数与嵌入值一样多。LSTM 图层的输出是一个矢量。在 LSTM 层的输出到达解码器之前,我们必须确保解码器的 LSTM 层将接收到 3D 输入。我们通过使用 RepeatVector 创建与目标序列中的步骤一样多的编码器 LSTM 层输出副本来实现这一点。
解码器由一个 LSTM 层制成。通过将 return_sequences 属性设置为 True,我们指示所有 LSTM 单元(在每个时间步长)返回隐藏状态输出。我们需要完整的序列,在我们的例子中,需要完整的句子。解码器还使用时间分布式包装函数将密集层应用于每个 tar_vocab 时间步长,即目标 Yemba 词汇表中的每个单词。通过应用 softmax 激活,模型将预测目标句子中的每个 Yemba 单词。
使用 Adam 优化器训练该模型,以最小化分类交叉熵损失。我们在 1000 个纪元后达到 6.9863e-04 损耗。
现在,我们可以使用训练好的模型将一个英语句子翻译成 Yemba 。 predict_sentence() 函数接受一个英语句子作为单词向量,在其上运行模型。这就产生了一个向量,通过使用 word_for_id() 函数将其转换成 Yemba 字。
我们使用函数 evaluate_model()评估整个训练集或测试集。 BLEU 算法(双语评估替角)用于通过比较候选译文和参考译文之间的 n 元语法数量来衡量译文的质量。
我们得到了 49%的 BLEU 分数,考虑到训练集的小规模,这是一个很好的结果。
在判断一种语言是否濒危时,说这种语言的人的数量不如他们的年龄分布重要。据报道,印度尼西亚现在有多达 200 万母语为英语的人,但他们都年事已高,很少或根本没有传给年轻人。
耶姆巴国王登基— 来源
结论
AI 能让濒危语言不消失吗?联合国去年宣布 2019 年为国际土著语言年,以提高人们对濒临灭绝的语言的关注。
如果你对 LSTM 被用来构建少数民族语言的词性标注器感到好奇,可以看看这篇文章。
我们如何为耶姆巴语建立世界上第一个 LSTM 分类器。
towardsdatascience.com](/lstm-based-african-language-classification-e4f644c0f29e)
有一个应用人工智能的项目吗?请在下面写下您的评论。
谢谢你。
以下是如何用 Python 计算两个地理位置之间的距离
想用 Python 按地理位置过滤?还是找一定半径内的地方?从这里开始。
地理位置数据无处不在——许多可下载的数据集都有以某种形式表示的位置数据,最常见的是以普通的纬度和经度对表示。
在 Unsplash 上由 Brett Zeck 拍照
如果你做过任何机器学习,将原始纬度和经度视为特征可能听起来不是一个好主意。想象一下,你的整个数据集位于一个城市,地理位置的差异非常小,因此机器学习算法不太可能很好地挑选差异。
要解决这个问题,有一个清晰的解决方案——你可以使用一些(可能)付费或免费的 API**。如果你对道路距离感兴趣,这可能会派上用场——但在本文中,我们将处理一个直线距离。**
我们会用一点数学来做所有这些——用哈弗线距离公式。如果您从未听说过它,请不要担心,当您第一次看到它时,也不要害怕——因为用 Python 实现它相当简单。
事不宜迟,让我们开始吧。
引入哈弗线距离
根据维基百科的官方页面,哈弗辛公式确定了给定经度和纬度的球体上两点之间的大圆距离。[1]
下面是我们将在 Python 中实现的公式,它位于维基百科文章的中间:
资料来源:https://en.wikipedia.org/wiki/Haversine_formula
我们需要的另一件事是地球的半径,这可以通过简单的谷歌搜索找到。谷歌报告说是 6471 公里。
太好了,让我们用 Python 实现这个公式吧!
下面是代码,因为我希望这篇文章尽可能实用:
def haversine_distance(lat1, lon1, lat2, lon2):
r = 6371
phi1 = np.radians(lat1)
phi2 = np.radians(lat2)
delta_phi = np.radians(lat2 — lat1)
delta_lambda = np.radians(lon2 — lon1)
a = np.sin(delta_phi / 2)**2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2)**2
res = r * (2 * np.arctan2(np.sqrt(a), np.sqrt(1 — a)))
return np.round(res, 2)
我知道这看起来很糟糕,但是只要把它粘贴到你的代码编辑器中,不要看它(如果你不想看的话)。好了,现在当这个完成后,我们可以进行更实际的部分。
让我们计算一些距离
首先,我决定在纽约宣布一个起点,坐标是:
- 纬度:40.6976637
- 经度:-74.1197643
或者在代码中:
start_lat, start_lon = 40.6976637, -74.1197643
接下来,我声明了一个 Pandas DataFrame(确保首先导入 Numpy 和 Pandas ),其中包含 3 个美国城市的名称和地理位置——丹佛、迈阿密和芝加哥。下面是代码,因此您不必手动操作:
cities = pd.DataFrame(data={
'City': ['Denver', 'Miami', 'Chicago'],
'Lat' : [39.7645187, 25.7825453, 41.8339037],
'Lon' : [-104.9951948, -80.2994985, -87.8720471]
})
太好了,现在我们有了开始计算距离所需的一切。我们可以通过一个简单的循环来实现,将距离临时存储在一个列表中:
distances_km = []for row in cities.itertuples(index=False):
distances_km.append(
haversine_distance(start_lat, start_lon, row.Lat, row.Lon)
)
完成后,我们可以将这个列表转换成 DataFrame 中的一个新的列**😗*
cities['DistanceFromNY'] = distances_km
如果您已经完成了上述所有工作,您应该会得到如下所示的数据框架:
这意味着现在你有一个专门的以千米为单位的距离栏。干得好!
在你走之前
想象一下这个公式有多有用。例如,您可以使用它来查找位于您当前位置半径范围内的感兴趣的物体。您也可以使用它来定位离兴趣点最近的。有很多可能性,主要取决于你正确构建问题的能力。****
你也可以使用像这个这样的网站来检查我们计算的距离有多准确。上次我检查(丹佛)时,我们有 7 或 8 公里的差异,这对于大多数使用情形来说并不显著。
感谢阅读,我希望你喜欢它。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
** [## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)**
参考
[1]https://en.wikipedia.org/wiki/Haversine_formula
以下是如何让熊猫的迭代速度提高 150 倍
不,这不是诱饵。
一段时间以来,我一直在质疑 Python 的快速处理能力。让我们面对现实吧,与其他语言相比,有很多关于 Python 速度的垃圾言论——比如 C 或 Go。
现在,我试着用 Go 来做数据科学——这是可能的——但是一点也不像用 Python 那样令人愉快,主要是因为语言的静态本质和数据科学主要是探索性的领域。我并不是说在 Go 中重写已完成的解决方案不能提高性能,但这是另一篇文章的主题。
到目前为止,我所忽略的,至少可以说是 Python 处理事情更快的能力。我一直患有“视野狭窄”——一种只看到一个解决方案而忽视其他解决方案的综合症。我相信我并不孤单。
这就是为什么今天我想简单介绍一下如何让熊猫更快更愉快地工作。更准确地说,这个例子将关注行的迭代,并在这个过程中进行一些数据操作。所以事不宜迟,让我们进入正题。
让我们制作一个数据集
最简单的方法是声明一个单列数据框对象,其整数值范围为 1 到 100000:
我们真的不需要更复杂的东西来解决熊猫的速度问题。为了验证一切顺利,下面是我们数据集的前几行和整体形状:
好了,准备工作已经完成,现在让我们看看如何以及如何不遍历数据框的行。首先,我们将讨论如何不选择选项。
以下是你不应该做的事情
啊,我一直为使用(和过度使用)这个方法而感到内疚。默认慢得要命,但是你懂的,我为什么要费心去寻求替代品(隧道视野)。
为了证明您不应该使用iterrows()
方法来迭代数据帧,我将做一个简单的例子——声明一个变量并在开始时将其设置为 0——然后在每次迭代时用Values
属性的当前值递增。
如果你想知道,%%time
magic function 将返回一个单元格完成所有操作所用的秒数/毫秒数。
让我们来看看实际情况:
现在您可能会想,15 秒对于遍历 100000 行并增加某个外部变量的值来说并不算多。但实际上是——让我们在下一节看看为什么。
这是你应该做的
现在出现了一种神奇的拯救方法。顾名思义,itertuples()
遍历数据帧的行并返回一个名为 tuple 的**。这就是为什么你不能用括号符号[]
访问这些值,而是需要使用点符号.
的原因。**
我现在将演示与几分钟前相同的例子,但是使用itertuples()
方法:
瞧啊。做同样的计算itertuples()
要快大约 154 倍!现在想象一下您的日常工作场景,您正在处理几百万行数据— itertuples()
可以为您节省大量时间。
在你走之前
在这个微不足道的例子中,我们看到了对代码进行一点点调整会对整体结果产生巨大的影响。
这并不意味着在每种情况下itertuples()
都将比iterrows()
快 150 倍,但它肯定意味着每次都会在某种程度上更快。
感谢阅读,我希望你喜欢它。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
下面是如何用 10 行 Python 代码读取车牌
从车牌中提取文本的最快指南,还有更多
任何类型的计算机视觉都不是一项简单的任务,车牌检测也不例外。
乔纳森·加莱戈斯在 Unsplash 上拍摄的照片
如果你花点时间想一想,对我们人类来说,对图像上的内容进行分类是非常容易的——但是当你想自动化这个过程时,问题就出现了。计算机不能像我们一样“看”,因为它们只能理解数字,并且定义数字数组的规则基本上是任何计算机视觉任务的归结点(极度简化)。
因此,在今天的文章中,我将快速演示一下 OpenALPR API 的强大功能,以完成以下任务:
- 从牌照上读取文本
- 确定汽车的品牌
- 确定汽车的颜色
再一次,我们很容易看到一辆车的图像,并且在一秒钟内我们就可以得到以上所有的信息。对于计算机来说,这个任务要复杂得多——如果你不同意我的观点,我敢打赌你会安装 OpenCV 并尝试自己实现这个逻辑。
事不宜迟,让我们看看如何正确设置,我将使用什么图像,最后是源代码。
一点小小的设置
首先,你需要一个 OpenALPR 账户,你可以在这里注册。我正在使用一个免费计划**,如果我没有错的话,它可以让你每个月提出 1000 个请求。这对于商业目的来说还不够,但对于探索来说肯定会很适合你。**
如果在某个时候你需要更多,你可以选择以下计划:
- 基本:25,000 个请求/月=$ 99/月
- 优点:125,000 个请求/月=$ 395/月
- 企业:100 万次请求/月=$ 1995/月
无论如何,这都不便宜,但如果你有一个每月能停放 100 万辆汽车的停车场,那么我想对于一个最先进的车牌读取系统来说,2000 万英镑并不算多。
无论如何,一旦注册,您将可以访问您的仪表板,在其中,您可以转到 CarCheck API 部分获取 API 密钥:
我们稍后在发出请求时会用到它,稍后会详细介绍。
很好,现在让我们来看看我们将用来测试 API 的图像。
让我们得到图像
我在网上搜索带有非商业用途免费牌照的汽车图片(实际上很难找到牌照不模糊的图片)。过了一段时间,我发现了一张相当不错的图片,你可以从这个链接下载:
https://P0 . piqsels . com/preview/82/793/156/transportation-vehicle-automobile-sports-car . jpg
很好,现在我们已经创建了帐户,并且有了图像。我们已经准备好了。让我们进入正题吧。
阅读车牌
说到导入,我们只需要两个库:
base64
requests
是的,你没看错。你不需要安装任何库就可以使用 OpenALPR,这使得以后的潜在部署更加容易。
现在我们将声明两个变量,一个保存汽车图像的路径,另一个保存由 OpenALPR 的优秀人员获得的密钥:
现在我们期待已久的部分来了。为了从给定的图像中读取牌照,我们需要采取以下步骤:
- 读入图像,用
base64
编码 - 向 API 发出 POST 请求,参数
data
是编码图像 - 挖掘 JSON 响应以获得我们关心的值
**看起来很容易吧?**下面是完整的代码:
请记住,我已经将url
变量分成两行,这样图像对您来说更易读。另外,如果您事先知道车牌属于哪个国家,请注意如何在 URL 中指定country
参数以获得更好的结果。
如您所见,仅用几行代码,我们就从图像中获得了如此多的有用信息。对于一个不熟悉计算机视觉的人来说,开发这样一个解决方案可能需要个月个月的工作,而且你对最终结果的满意程度也是值得怀疑的。
在你走之前
这就是你要做的——只用几行代码,我们就完成了最先进的计算机视觉工作(可以说,我们只是调用了 API)。
我认为汽车的颜色是黑色,而不是银灰色,但这与我们的情况无关。
免费计划很适合你去探索,但是考虑一下自己开发完整的解决方案,只是为了好玩。也许这将是另一个时间的主题,所以让我知道你是否对此感兴趣。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
以下是如何在 Jupyter 笔记本中运行 SQL
Jupyter 笔记本作为 SQL IDE?
让我们面对现实——数据库无处不在。即使在学习数据科学时,您只处理过 CSV,这也很难与现实相吻合,因为大多数公司都倾向于将数据存储到数据库中。
在今天的文章中,我想快速回顾一下将 Jupyter 笔记本或 JupyterLab 用作 SQL IDE 的概念。在此之前,我已经使用了各种 Python 库来连接数据库,但是这个漂亮的小技巧将为您节省大量的时间和输入。
阅读完本文后,您将能够直接通过笔记本执行任何 SQL 查询/过程,还可以将任何查询的结果存储到一个变量中,以便在以后的分析中使用。
我不想再纠缠于介绍,让我们直接进入正题吧。
一点设置
首先,您需要安装一个库,以确保您可以直接在笔记本上运行 SQL,因此将以下内容粘贴到任何 Jupyter 单元格中:
!pip install ipython-sql
在写这篇文章的时候,我正在处理 Oracle 数据库。如果你也是,确保安装了cx_Oracle
。如果没有,就在网上快速查找所需的库。在我看来,这些应该是:
pyodbc
—适用于 SQL Servermysql
—适用于 MySQLpsycopg2
—用于 PostgreSQL
现在我们将使用sqlalchemy
库来创建一个连接到数据库所需的引擎。每个连接字符串只需要这样做一次——这意味着在建立连接时不必每次都这样做。
以下是各种数据库的一些常见连接字符串:
- PostgreSQL :
postgresql://scott:tiger@localhost/mydatabase
- MySQL :
mysql://scott:tiger@localhost/foo
- 甲骨文 :
oracle://scott:tiger@127.0.0.1:1521/sidname
- SQL Server:
mssql+pyodbc://scott:tiger@mydsn
- SQLite:
以下是 Oracle 数据库的一个示例:
现在,我们可以加载先前安装的 SQL 模块:
并使用前面指定的连接字符串连接到数据库。注意列内容是如何以百分比符号作为前缀的:
如果你得到了和我一样的输出,这意味着一切都很顺利,你可以继续了!
我们开始吧
好了,现在你可以走了。首先,我将展示如何将一个多行 SQL 查询传递给一个 Juypter 单元格。如果没有这个神奇的命令,您将不得不导入各种库,连接到数据库,用括号将查询括起来,然后执行它,但现在只是在代码前面加上%%sql
或%sql
的问题,我将在下面演示。
将整个单元格标记为 SQL 块
让我们从这个开始,因为它允许您输入多行 SQL 语句。唯一的要求是在开头加一个%%sql
前缀。我决定从某个表中选择前五行:
是的,就是这样!如果您要执行这个单元格,您将得到以下输出:
它看起来有点像熊猫数据框,但它不是,它只是展示了桌子的样子。
单行语句—将结果存储到变量中
不限于多行语句,还可以将 SQL 查询的结果存储到变量中。这里你将只有一个百分号,而不是两个:%sql
让我们来看看实际情况——我将从一个phone_number
列中选择一个值:
您可以看到,如果我打印它,输出不是您所期望的,下面是解决这个问题的方法:
这只是一个简单的索引问题,没什么可担心的。
你还能做什么?
到目前为止都是有趣的游戏,但是你可能想知道ipython-sql
还能为我们提供什么。嗯,很多,我要讲两件事。这不会让你大吃一惊,但知道这一点是件好事。我们开始吧。
转换为熊猫数据框架
这只是ipython-sql
的一个很好的附加功能,可以节省你一点时间,这样你就不必手动转换了。我将从数据库中选择一些数据集,然后调用它的.DataFrame()
方法:
我们现在可以检查数据帧及其类型,只是为了验证一切都符合预期:
是的,数据看起来没错,类型没问题,所以我们可以继续。
测绘
假设您很着急,想要快速从数据库中获取一些数据,并制作一个条形图。为了演示,我将导入matplotlib
并使一切都变大一点,然后将某个 SQL 查询的结果存储到一个变量中。
一旦完成,就可以调用.bar()
方法来制作条形图:
相应的图应该是这样的:
就绘图而言,这对于一行代码来说已经很不错了。请注意,您也可以使用.pie()
来显示饼图——您可以自己随意寻找其他选项。
在你走之前
我不认为这篇文章中的任何内容会让您惊叹,但是我也希望您能够欣赏以这种格式执行数据库查询的简单性。
如果您只需要执行查询,并且不需要任何更高级的东西,这也可以是标准 SQL IDE 的一种替代方法。
无论如何,我希望你已经设法从这篇文章中得到了一些有用的东西。感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
这就是你一直在寻找的专家数据分析师。
目前,对数据分析师的需求很高,他们需要审查大量关于新冠肺炎及其对企业影响的信息。以下是你需要了解的关于成为或雇佣数据分析师的信息。
图片来源:弗兰基·查马基·昂斯普拉什
狮子被认为是丛林之王。这是因为狮子在他的游戏中处于领先地位。想象一下,如果您也能掌控大数据游戏,那该多好!我有消息告诉你,你可以。这一切都归结于拥有合适的数据分析师。
最近,我的一个客户试图读取他公司的数据,但我们都不知道我们在看什么。
他想确切地知道新冠肺炎·疫情对他的业务产生了怎样的影响,以及未来的发展轨迹是怎样的。
为此,我建议他聘请一名数据分析师。
我们在谷歌上搜索了优秀数据分析师应该具备的素质,可以说,我对此一无所知!
所以,我做了我最擅长的事情,开始研究。以下是我学到的一些东西。
数据分析师着眼于数据的大型基本度量,以检测隐藏的模式、统计数据和洞察力。以现在的技术,你的数据几乎可以马上被分析,可以得到答案。
数据分析师的关键品质包括创造力和好奇心等。一个伟大的分析师将会有坚实的统计方法基础,并且渴望找到更好的解释,一旦数据被分析,接下来会发生什么。
在对收集的原始数据进行优先排序时,应用正确的算法和特定的公式有助于公司做出明智的决策。
数据的概念已经存在很多年了;大多数组织现在都明白,如果他们能够捕获流入其业务的所有数据,就可以应用分析并从中获得巨大价值。
数据分析师的工作描述
数据分析师的一些基本工作职能包括:
为市场确定新材料的价格
决定是裁员还是雇佣员工
销售时机和降低运输费用,同时估算市场份额。
数据分析师将轨迹、趋势和数字转化为可访问和可消化的信息。
当一家公司正在收集其数据,如销售数字、库存、利润率和市场研究时,分析师可以对每个项目进行细分,以获得具体信息,如:
区分模式和趋势。
收集、评估和报告以满足业务需求。
确定改进数据收集、报告和分析的新方法。
确定与数据分析和收集过程以及报告设计有关的技术问题。
估计所提出的挑战,并评估这些挑战是否可以通过数据来回答。
以可重复且全面的方式报告数据。
分析师收集、处理和分析数据。这是通过使用系统和标准的方法和公式来评估必要的信息。然后,他们根据分析结果准备详细的报告。
数据分析师执行基本统计,例如特定时间段内给定项目的平均值和变化。此外,他们预测收益率,并解释一组连续数据的潜在分布频率。
他们在完成活动时使用标准的分析、收集和报告技术,并将始终保护业务数据,确保数据结果产生一致且可回收的指导。
如何成为一名数据分析师
数据分析师负责理解大型数据集中显示的见解和趋势。因此,他们受雇于公司,以改善各种商业行为,并帮助做出更好的决策。
开展数据分析师职业有三个关键步骤。
第一步
教育和学位要求。
获得统计学、计算机科学或信息技术学士学位。应用统计学研究或辅修数据科学。参加强调数据库管理和项目管理的计算机科学课程也是必要的。
第二步
获取数据分析师经验。
没有任何经验的数据分析师是不容易找到有意义的工作的。在校期间实习是获得必要知识和技能的正确途径。尽管如此,许多从事技术职业的人还是从初级职位做起,比如技术员或统计助理。这些职位提供了宝贵的在职经验和培训。接受一些内部培训是非常必要的,尤其是在大数据管理和分析软件程序方面。学习的意愿、知识和专长可以帮助一个人达到他们期望的水平。
第三步
推进你的职业发展。
有必要考虑证书课程或硕士学位,这将提供更多的就业机会,从而促进你的职业发展。雇主希望求职者拥有丰富的知识,更熟悉最新的工具和技术。因此,你应该考虑大数据管理、商业数据分析或数据科学的硕士学位。
数据分析师工资
数据分析师的平均年薪为 75,588 美元。影响薪水的因素很多,包括教育水平、在专业机构的参与度、证书和工作经验。
数据分析经理的平均薪酬为 109,954 美元。在这个职位的头三至十年,收入会有所增加;尽管如此,一些人选择继续从事其他工作,比如数据架构师、数据科学家或数据工程师,只要他们在这个行业积累了十年的经验。
直销公司会寻找有商业数据分析师或数据科学家工作经验的数据分析师。他们还将专注于与数据模型、数据挖掘、分割技术和数据库设计开发有关的技术专长。
他们将寻找一个对业务对象、编程和数据库、技术数据方法有深刻理解的人,加上对用于数据集分析的统计程序的丰富经验,如 SAS 、 SPSS 和 Excel 。
图片来源:Scott Winterroth Unsplash
数据分析师与数据科学家
数据分析师类似于数据科学家。然而,数据分析师负责开发用于数据获取和发现的算法。数据分析师将发现他们自己在使用可用的工具、数据集和系统处理特定的业务活动,而不是制定他们的数据项目。
这两种职业有一个共同的目标,那就是发现如何利用信息来解决问题和回答问题,为他们的行业或商业带来好处。
数据科学家制定统计方法,应用科学技术解释数据,并做出预测,而数据分析师收集和分析数据。
例如,数据分析师可以获得大气压力、湿度和温度,而数据科学家可以应用这些数据并预测飓风是否会在大气中聚集。
数据分析用于医疗保健、游戏、旅游、能源管理和直销等行业。
数据科学算法用于互联网搜索、数字广告和搜索推荐等行业。
为什么要为您的企业选择数据分析师?
数据分析师带来的好处是速度和效率。几年前,企业可能已经收集了信息,进行了分析,并挖掘出了可用于未来决策的信息,而现在,公司可以识别洞察力以立即做出决策。
提高工作效率和保持敏捷的能力为组织创造了前所未有的竞争优势。
在你的团队中有一个分析师还有其他一些好处。
成本降低
数据分析师使用数据技术,如 Hadoop 和基于云的分析,在存储大量数据时带来显著的成本优势,此外,他们还可以确定更高效的业务方式。
更快、更好地做出决策
凭借 Hadoop 和内存分析的速度,以及分析新数据源的能力,企业能够立即分析信息,并根据他们所了解的情况做出决策。
新产品和服务
有了通过分析来衡量客户需求和满意度的能力,就有能力满足客户的需求。
数据分析师帮助组织利用他们的数据,并使用它来识别新的机会。这反过来又会导致更聪明的商业行为、更高效的运营、更高的利润和更满意的客户。
随着各行各业的公司专注于构建数据分析战略,以在以数字为中心的全球环境中保持竞争力,他们将需要各种能够以多种方式对业务数据进行切片、切块和操作的数据科学工具。
精心规划和执行的数据策略将使您的企业能够更快地做出业务关键型决策,并更准确地预测这些决策的结果。
这种在数据科学领域的持续愿景和创新有利于现在几乎完全基于数据的商业世界,推动从最小的日常改进到最具挑衅性和前瞻性的想法的任何事情。
以下是您需要了解的关于最佳可用数据分析工具的信息,这些工具有助于收集、存储、分析和可视化您的数据,并融入机器学习能力和可能性。
每个数据策略的起点是收集可以转化为丰富分析的高质量数据。正确的数据收集工具可以减少错误和重复,提供更高的准确性,并保持所有来源的数据完整性。
以下用于收集数据的工具非常突出:
所有数据分析的核心是发现数据的意义并从中提取价值。
让您能够轻松理解数据并从中获得真正意义的工具,可以帮助您做出改变游戏规则的业务决策,从而影响收入、竞争力、创新、客户体验和运营效率。
查看这些领先的数据分析工具和平台:
数据仓库特性,如组合和集成的多源和异构数据存储库,为可用性而标准化。您可以实时和批量搜索任何业务主题的干净和稳定的数据。
像亚马逊雅典娜和 S3 这样的解决方案,在全球最大的云结构上工作,允许数据的存储、收集和执行,而不需要分析系统。
当今存储数据的一些顶级工具有:
微软 Azure
MySQL
可视化分析工具可以识别数据中的模式和趋势,并帮助最终用户理解和消化复杂的概念。
以图表、图形和地图的形式访问、理解和共享数据的可视化表示要容易得多。
以下是一些高性能的数据可视化工具:
Jinfonet 的报告
数据科学的目的和承诺是分析数据,从中学习,并对您的公司做出预测。今天的机器学习工具使用各种算法来表示、评估和优化您的数据,以便正确解释归纳和异常。
以下是一些最好的机器学习工具:
任何现代数据分析师策略的成功都依赖于对所有数据的完全访问。
数据分析师必须能够访问一套专有的 ETL 工具(提取、转换、加载),以便优化和扩展将来自任何来源的任何形式的海量数据加载到云数据仓库或基于云的存储中,如亚马逊 S3。
一旦你的信息被传输到数据仓库,你就可以实施任何你纳入的机器学习模型,以增强你对客户或其他重要举措的理解和承诺。
现在,您已经更好地了解了如何成为一名数据分析师,或者在为您的企业招聘数据分析师时需要寻找什么,您将在竞争中遥遥领先。
这是数据分析师实际做的事情
从实践经验来看,数据分析师工作的本质
我读过几篇文章,这些文章给了我一个数据分析师所做事情的清单,但从最简单的意义上来说,你正在分析和可视化数据。每个公司都有自己的数据库,你可以从中查询。这些公司也有自己的数据可视化工具,比如 Tableau,你可以用它来可视化你的见解和发现。
在商业中,有许多类型的数据,如产品数据、营销数据和运营数据,同样,也有几种类型的数据分析师,如产品分析师、营销分析师和运营分析师。这些工作的不同之处在于与每个类别相关的领域知识,但最终,它们与术语“数据分析师”同义。
数据分析师的一般工作流程
数据分析师的工作范围最终取决于你工作的公司,但一般来说,数据分析师会经历上图中的以下工作流程。让我们走一遍。
问题
每次分析都从一个问题或一项任务开始。这些任务的难度会有很大差异。一个简单任务的例子是,如果要求您编写一个查询来提供统计数据,比如昨天的销售额。更困难的任务的一个例子是当答案不清楚时,你被要求探索数据。例如,如果让你找出为什么上个月的销售额比其他月份差得多。
探索和查询
一旦您收到一个问题,您通常会编写一个或多个查询来探索和收集解决问题所需的信息。这意味着您可能需要了解 SQL 或 Python(或者两者都了解)来收集您需要的信息。
继续前面的例子,如果要求您找出为什么上个月的销售比其他月份差得多,您可能会查询上个月的平均客户评论评级,以查看产品是否有问题,或者您可能会查询上个月的营销支出与其他月份相比,以查看营销支出是否有显著减少。
收集见解
下一步是收集你的见解。有时,收集您的见解意味着将您的见解复制并粘贴到 Excel 表格中。其他时候,这意味着保存您用来查找下一步所需信息的查询。
可视化见解
一旦你收集了你的见解,你可能需要将你的发现形象化。有时,这就像在 Excel 中制作条形图一样简单。其他时候,这意味着创建一个广泛的仪表板,供高管们使用。这一步需要的技能取决于公司和项目。它包括但不限于 Powerpoint、Excel、Tableau、Matplotlib 等…
传达你的发现
最后,您需要传达您的结果,无论是通过带有几个静态图表的幻灯片还是带有几个 KPI 指标的仪表板。类似于回答行为问题的星形方法,你将走过问题、任务、你采取的方法和最终结果。
我知道我是通过简化来概括的,我知道这并没有涵盖数据分析师日常工作中的每一件事。然而,对于那些完全不知道数据分析师做什么的人来说,就像你们中的一些人不知道语言病理学家做什么一样,这为他们做什么提供了一个体面的想法。
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体T2 上关注我。
- 在推特 这里成为第一批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!目前还没有视频,但即将推出!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表上报名这里。
- 查看我的网站,terenceshin.com。
以下是首席数据科学家对于变得不可或缺的看法
精英数据科学家的心态
我打算与更多的首席数据科学家交谈,然而,如果我完全诚实的话,我为什么联系他们的原因是从来没有写博客。
事实上,我之所以决定接触我们领域的一些领导者,是因为我想更好地了解他们的心态。首席数据科学家的思维方式!非常坦率地说,在此之前,我从未有过与人交谈的经历,更不用说在人下工作了——我只是曾经是唯一的数据科学家(或机器学习工程师)。
在与前两位交谈后,我离开时感到非常受鼓舞,并思考我直接收到的信息和建议是如何改变生活的。一眨眼的功夫,我想起了我的博客……的使命,即推动不可或缺的数据科学家的成长,于是我写了这篇文章。进一步补充一下,首席数据科学家 Thom Ives 也向我重申了我最初的直觉,他委托我向社区传递信息——这是现代的安德鲁·卡内基和拿破仑·希尔(Napoleon Hill)之类的东西,只是离这还很远。
现在,我的目标和使命一致了,我开始与我在 LinkedIn 上找到的任何人交谈,他们的口号是“领导”或“高级”数据科学家。我将我的方法正式化,并添加了一些奉承,只是为了(故意地)逗逗小我,并向他们所有人传达了一个信息。
嗨[ 插入姓名,
我正在进行一项小型研究,希望借此深入了解一位精英数据科学家的心态,因此我联系了您。
我想知道是否有可能在下周(或左右)抽出 30 分钟时间,在私人讨论中问你一些问题(通过 Zoom、Google Meet、Teams 或任何最适合你的方式),以便更深入地了解数据科学领导者背后的思维模式😊
问候,
柯蒂斯
令我惊讶的是,大多数人说是的,当然是在淡化我给他们的精英地位之后。换句话说,奉承战术奏效了,因为它让他们做出了回应——这是完美的,因为它将为未来的许多对话打开大门。
初级数据科学家 vs 首席数据科学家
初级数据科学家应该具备良好的数据科学基础知识,这反过来允许他们适度独立,尽管他们可能偶尔会向高级同事寻求帮助。一般来说,由于这样或那样的原因,被视为初级的人没有太多的实际工作经验。
相比之下,首席数据科学家应该对数据科学中的主要概念和技术有深刻的理解(这也包括了解它们的优缺点)。他们被期望参与许多项目,因此发展他们在技术上的专业实践经验和领域知识(所需的领域知识水平可能因公司而异)。
初级和高级数据科学家之间不言而喻的差异作者m SRA Turp详细介绍了每个角色的基本要求和承担的任务,强烈推荐阅读!
为什么重要?
为什么重要?很棒的问题!在我看来,我相信了解到达特定目的地的标准路径是很重要的,例如,如果我们出发去海德公园。首先,清楚地知道如何到达公园对于我们到达目的地至关重要,但如果我们遇到障碍,如中央线由于某种原因没有运行,因为我们有一个明确的目的地,所以绕过障碍是一个更加无缝的过程,因为我们知道我们想要到达哪里。
我们的职业生涯也是如此。清楚地知道要走的路会让我们对未来的决策更加顺畅,因为我们做出的决定会与我们的目标一致。我们对要去的地方了解得越多,就越容易做出如何到达那里的决定——对于我博客的读者来说,我认为你已经决定成为一名不可或缺的数据科学家。
或者,我们可以决定不清楚要去我们想去的地方需要什么。在这种情况下,很多决定都是基于我们在特定时间的感受,因此我们最终会做更多的事情,比如参加 200 场 Kaggle 竞赛,或者参加 700 次编程测试。
正如你所看到的,这些事情不一定是坏事,但它们绝对可能是延迟,因为我们已经变得如此专注于做更多的事情,希望有一天能到达我们想去的地方。
“当我追逐我的目标,忙着做我认为必须做的事情来实现它们时,我有时会变得更像一个人,而不是一个人。”—蒂姆·海斯
注意:我知道成为一名不可或缺的数据科学家并不等同于成为一名首席数据科学家,也就是说,一个人可能会决定创办一家公司,并利用他们的数据科学技能帮助公司走向伟大
缺失的成分
鉴于“初级数据科学家与首席数据科学家”一节中提出的期望,人们可能会认为强大的技术能力是首席数据科学家和初级数据科学家之间的明显区别。
在某种程度上,我同意。虽然我认为初级球员可能比高级球员拥有更高的技术能力,甚至更多,但这可能是因为我的运动背景,初级足球运动员比高级球员更有天赋并不罕见——例如,看看 Kylian Mbappe。
然后我想这可能是一个人随着时间的推移而获得的经验。虽然在某种程度上也是正确的,但我很快放弃了这种想法,因为我会假设在该领域的寿命在确定一个人是否“有资格”担任首席数据科学家角色方面起着重要作用。这意味着我要等 10-20 年才能进去,是的,这可能是值得等待的,但是…
这个想法让我处于一种困惑的状态;“我如何从现在的位置(我认为自己是一名初级数据科学家)走到我想要的位置?”
正如我一再提到的。目标是不可或缺的,虽然不可或缺和首席数据科学家不是同义词(在我看来),但它是一个非常好的起点。
那么,我采访的首席数据科学家认为,要成为一名不可或缺的数据科学家,缺少什么要素呢?–在我写这篇文章的时候,我已经和 4 个人谈过了,还有更多的人在讨论中。他们用不同的方式说着同样的事情,但是有一个人用一个词很好地概括了它…
“关心!”
你必须关心公司的目标,你必须关心客户的需求,你必须关心你的同事,你必须关心你工作的影响。你必须关心!
我们渴望的许多物质和/或地位目标,例如成为一名不可或缺的数据科学家,是我们为他人增加价值的产物,这意味着我们将从我们的服务中获得这些目标,因此过于强调产品可能会导致沮丧。
这并不是说技能和经验在不可或缺的上升过程中不发挥非常重要的作用。如果你有很好的技术能力,你可以做更复杂的工作。同样,有了丰富的经验,你甚至可以在我们到达之前就发现问题。然而,如果你除了自己的个人需求之外,对这个世界一无所知,你可能会被认为是一个没人愿意与之共事的混蛋,从而阻碍你的进步。
一般来说,在这种情况下可能会发生的是,某个只有一半技能和/或经验,但却是热情的护工出现了,经过一些培训,你变得越来越可有可无。
关心他人的能力
很少听到有人说关心是一种技能,但这种技能本身会促进你的数据科学职业生涯,但当我想到这个概念时,它变得越来越有意义——例如,我们关心的东西将决定我们决定学习的技能。
如果还不太清楚,我们可以从以下 3 种方式开始关注,而无需首席数据科学家的头衔:
- 当你与他人交谈时,关心他们正在经历什么——这需要在某种程度上了解他们(我最初被告知这在工作环境中是禁忌,但我现在不敢苟同)
- 观察他人的需求,寻求用你现有的技能来满足他们,或者发展你的技能,这样你就有能力在未来解决他们。
- 与人交流——无论是团队中的其他人还是客户,定期交流以获取和/或提供最新信息表明你对正在做的工作感兴趣。你在乎!
换句话说,做一个行动多于言语的数据科学家。即使你不具备当下的技能,你也可以做些什么来关心别人!
“我们数据科学家手中握着未来的火炬,所以我们必须用我们的技能服务,而不是等待被服务。”——Kurtis Pykes
斯科特·t·克伦丹尼尔(Scott T. Clendaniel)向我推荐了一本书,这本书我以前读过,但当我带着这种新范式重读时,我立即看到了所有与我交谈的人对我说的话的更完整的画面——这本书名叫《高效人士的 7 个习惯》,或者我现在称之为“公司圣经”。
包裹
我收到的新范例对我来说是一个冲击,可能对你来说也是一个冲击。是的,发展你的技术能力很重要,是的,尽可能多地获得经验也很重要。同样,培养你的关爱与你一起工作的人以及你影响的人的能力也很重要。
非常感谢你把这个帖子看完,让我们继续 LinkedIn 上的对话…
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)
在这里你可以看到冠状病毒的实时更新和统计数据
以下是你需要了解的关于冠状病毒 Worldometer 的信息
如果这是你喜欢的那种东西,成为第一批订阅 我的新 YouTube 频道在这里 !虽然还没有任何视频,但我会以视频的形式分享很多像这样的精彩内容。感谢大家的支持:)
Worldometer 是一个由工程师和研究人员运营的令人惊叹的网站,其目标是为每个人提供实时的世界统计数据。
最近,他们在其网站上增加了一个新的组件,专门针对新型冠状病毒。这是一个令人惊叹的仪表板式网站,提供关于冠状病毒的实时统计、数据可视化和更新!
这里 可以查看网站 。
Worldometer 网站截图
以下是一些提示,可以帮助你找到我认为网站中最有趣的部分。
按国家分列的确诊病例和死亡人数
如果你点击上面的链接,向下滚动一点,你可以找到按国家分列的病例数、新增病例、死亡人数、新增死亡人数、活跃病例和已恢复病例。这是每天更新的,如果你想了解病毒是如何在全球传播的,你可能会感兴趣。
网站截图
最新更新
如果你再向下滚动一点,你可以看到实时更新,提供新病例和死亡的警报,以及新的旅行警告。如果你或你亲近的人即将旅行,你可能会对此感兴趣。
来自 Worldometer 的截图
案件详情
如果您想了解有关病例的更多信息,如每日新增病例数、增长因素或中国境外的病例分布,请点击导航栏中的“病例”或点击此处的。
来自 Worldometer 的截图
死亡详情
与“案例”类似,如果您想了解更多关于死亡的详细信息,请点击导航栏中的“死亡”或点击此处。
来自 Worldometer 的截图
还有更多。
查看导航栏,查看其他主题,如“国家”、“孵化”、“年龄”、“症状”或“观点”。
导航栏的屏幕截图
如果你错过了,该网站的链接如下:
实时统计和冠状病毒新闻,跟踪确诊病例、康复患者和死亡人数,按…
www.worldometers.info](https://www.worldometers.info/coronavirus/)
感谢阅读!
如果你喜欢我的工作,想支持我…
- 支持我的最好方式就是在媒体 这里关注我。
- 在 Twitter 这里成为首批关注我的人之一。我会在这里发布很多更新和有趣的东西!
- 此外,成为第一批订阅我的新 YouTube 频道 这里!
- 在 LinkedIn 这里关注我。
- 在我的邮箱列表上报名这里。
- 查看我的网站,terenceshin.com。
更多相关文章
新型冠状病毒 2019 数据集分析及代码
towardsdatascience.com](/coronavirus-data-visualizations-using-plotly-cfbdb8fcfc3d) [## 9 种有趣的新型冠状病毒统计和数据可视化
以下是你应该知道的关于冠状病毒的知识
towardsdatascience.com](/9-fascinating-novel-coronavirus-statistics-and-data-visualizations-710cfa039dfd)
英雄:你再也不用看长视频了
理解视频及其字幕的模型,帮助您快速浏览视频
乔伊·尼克特拉在 Unsplash 上的照片
你曾经在考试前一天晚上看了 15 节课的材料吗?或者提交一份关于你在接下来的一个小时内没有观看的 2 小时电影的报告?我知道我有。幸运的是,我的演讲视频标有内容开始和结束的地方,所以我可以快速浏览。但是如果那些标记不在那里呢?不要害怕:英雄来救你了!
“什么是英雄,它将如何拯救我?”,你可能会问。你的问题会得到回答,但首先,让我给你一些背景。如果你读过我以前的一些帖子,你可能会知道机器学习正朝着大规模预训练模型的方向发展,这些模型最初被给予大量数据,并从中学习。然后,这些模型可以将这些知识应用于特定的任务,以实现比大多数其他模型更好的性能。
像 BERT、RoBERTa 和 ALBERT 这样的预训练模型已经接管了 NLP 领域,多模态领域也开始发展它们。像 UNITER 和 Unicoder-VL 这样的模型已经在图像+文本预处理领域取得了长足的进步。
然而,还有一个空间没有被充分发掘,那就是视频+文本空间。理想情况下,这应该是一个非常自然的扩展。毕竟,视频只是一系列图像。已经有一些尝试通过 CBT 和 UniViLM 这样的模型来解决这个问题,但是他们没有抓住视频的一个关键方面:它们的顺序。相反,他们将视频及其字幕视为一堆图像和文本,而没有考虑到字幕只与某些帧相关,帧的顺序也很重要。
为了补救这一点,微软 Dynamics 365 AI Research 的研究人员提出了HI archicalEncodeR用于Om 表示学习( HERO )。与以前的视频+文本模式不同,HERO 考虑了视频的顺序以及文本如何映射到视频。
为了做到这一点,HERO 使用了一个 2 层的层次结构。第一层使用一个融合文本和图像的*“跨模态”转换器。它将字幕中的每个句子与视频的相应部分进行匹配。这个【跨模态】变换器的输出然后被【时间】*变换器用来学习视频的不同帧的顺序。这种分层次的学习是通过 4 个主要的培训前任务实现的。
英雄的模型架构。
- 蒙面语言造型(MLM)
在 MLM 中,主人公被给予一个带有一些缺失单词的字幕句子和相应的视频帧,主人公被期望生成那些缺失的单词。
2.蒙版帧建模(MFM)
MFM 类似于 MLM 的图像,除了它是以整个视频为背景完成的。输入的是所有的字幕句子和大部分的视频帧。HERO 的工作是生成丢失的帧。
3.视频字幕匹配(VSM)
VSM 在很大程度上就是它听起来的样子。给英雄一个来自字幕的句子作为查询,上下文是所有字幕句子和所有视频帧。HERO 必须学习局部对齐,即识别查询语句对应的视频帧。
但是有一个问题。提供的视频甚至可能与字幕不匹配。这有助于 HERO 了解一个句子应该是什么样子,反之亦然。
4.帧顺序建模(FOM)
MLM 、 MFM 、 FOM 都是用来训练*【跨模态】变压器的, FOM 是用来训练【时态】*变压器的。它采用前三个任务的输出和一组混乱的帧来预测帧的正确顺序。
在预训练任务发挥作用后,他们的魔法和英雄被训练出来,研究人员在几个不同的任务上测试了它的能力,包括视频字幕,视频问题回答,视频瞬间检索(根据句子检索视频的特定部分)和视频语言推理。HERO 能够在所有这些任务中击败最佳模特,甚至在【TVR】(电视检索)【TVC】**【电视字幕】排行榜上取得了第一的位置。**********
所以不要等待,让英雄救你从那些最后一分钟讲座/纪录片/电影观看!
如果你想了解更多关于英雄模型的信息,这里有一个链接到论文,一个链接到你自己训练的代码,点击这里查看更多我们的出版物和其他工作。
参考文献
- 雷、杰、余立成、塔玛拉·l·伯格和莫希特·班萨尔。 Tvr:用于视频字幕瞬间检索的大规模数据集。arXiv 预印本 arXiv:2001.09099 (2020)。
- 陈、颜春、、于立成、艾哈迈德·科利、费萨尔·艾哈迈德、甘哲洙、于成和。统一者:学习通用的图像-文本表示。 arXiv 预印本 arXiv:1909.11740 (2019)。
- 李,根,南段,,,,大新江,。Unicoder-VL:通过跨模态预训练的视觉和语言通用编码器。见 AAAI ,第 11336–11344 页。2020.
- 罗怀绍,,,史,黄浩洋,段楠,,陈锡林,。2020.unifilm:统一的视频和语言预训练模型,用于多模态理解和生成。arXiv 预印本 arXiv:2002.06353。
- 李、、颜、俞成、柘淦、俞立成、。 HERO:视频+语言全表示预训练的分层编码器。 EMNLP 2020。
异方差没有什么可怕的
(图片由作者提供)
使用 Python 的原因、影响、测试和解决方案
回归建模环境中的异方差,是指当数据中的条件方差不恒定时,数据中的异方差。条件方差是你在因变量 y 中看到的解释变量 X 的每一个值,或者时间段的每一个值的可变性(对于时间序列数据)。
条件方差表示为方差(y|X)、Var(y|×σ(y|)并且对于给定的【X】(或 t )值,读取为 y 中看到的方差。**
当您的数据是异方差的:
方差(y|X)= f(X)
其中 f 是X的某个函数。异方差的反义词是同方差**,其中方差是常数,即:**
方差(y|X)=σ…一个常数值。
下图说明了异方差数据集:
异方差(图片由作者提供)
下图说明了一个同质数据集:
同方差(图片由作者提供)
异方差时间序列
下面的黄金价格指数图说明了异方差时间序列。请注意,当指数值较高时,后期的变化会更大。
出口价格指数(最终用途):非货币黄金(来源:美国弗雷德)(图片由作者提供)
黄金价格指数的第一个差异带来了异方差:
不同的时间序列(图片由作者提供)
异方差的原因和形式
异方差的一种常见形式是波动量是值的一部分。货币数据通常会出现这种情况,例如:
- 价格(股票价格、商品价格、医疗程序成本),
- 支出(家庭支出、雇员工资、租金),
- 价格指数(上面举例说明的黄金价格指数)。
测量过程引入的异方差
创建数据集时,可能会无意中引入异方差。让我们用一个例子来说明这一点:
假设您正在测量注入抗生素的样本中的细菌生长。我们假设样本中的细菌呈线性增长,如下所示:
*Actual_Bacterial_Count = 100 + 5*Time_Period*
假设你的细胞计数器计数误差≤ 10%。可以将其操作特性建模如下:
*Observed_Bacterial_Count = 100 + 5*Time_Period +* ***ROUND( (-1.0+2*RAND(0,1))*0.1*True_Bacterial_Count,0)***
计数器引入的误差(在 MS Excel 语法中)为:
ROUND((-1.0+2 * RAND(0,1))0.1True_Bacterial_Count,0)
术语 ( -1.0+2RAND(0,1) )* 表示具有*(-1,1)* 均匀分布的随机变量,乘以真实计数的 10%。
运行计数器 150 个时间周期会产生下面的图,显示由计数器的误差特性引入的异方差:
测量误差引入的异方差(图片由作者提供)
如何解决问题:
- 对数转换 y 变量以‘抑制’一些异方差,然后为*对数(y)*建立一个 OLSR 模型。
- 使用一个 G 一般化 L 线性 M 模型( GLM ),例如负二项式回归模型,它不假设数据集是同质的。如果你的数据是离散的和非负的,NB 回归模型会特别有效。
- 使用一个 W 八个 L 东 S 方( WLS )或一个 G 一般化 L 东 S 方( GLS )模型——这两个模型不假设均方误差。 Python statsmodels 包支持stats models . API包中的两种模型。
异方差引入了季节性异常值和通货膨胀
以下酒类销售的时间序列图说明了由 12 月和 1 月的异常值以及月度价格上涨的影响引起的缓慢增长的差异:
零售:啤酒、葡萄酒和酒类商店。(图片来源:美国弗雷德)(图片由作者)
如何解决问题:
- 季节性影响可以通过对数据集进行季节性调整来抵消。
- 通货膨胀的影响可以通过对时间序列进行通货膨胀调整来消除。
**Related post:** [How to Deflate Your Time Series](/the-what-and-why-of-inflation-adjustment-5eedb496e080)
在处理诸如销售量、成本、价格指数等货币数据时,应该始终考虑这两个数据转换步骤。
缺失指定模型引入的异方差
即使在执行季节调整、紧缩和对数转换之后,如果您的模型无法充分解释经转换的数据集中的方差,无法解释的方差将会泄漏到模型的剩余误差中,潜在地使它们成为异方差的。
如何解决问题:
- 检查您的模型中是否缺少重要的解释变量,并将它们添加进来。
- 切换到 GLM、WSS 或 GLS 模式
- 接受你目前的模型。如果您的模型在其他方面表现良好,那么模型残差中的少量异方差是可以接受的。
异方差的实际后果
如果线性回归模型的残差是异方差的,例如线性回归模型的残差是异方差的,那么 OLSR 模型就不再是 T42 有效的,也就是说,它不能保证是数据的最佳无偏线性估计。有可能构造具有更好拟合优度的不同估计量。
如果您的数据包含异方差,OLSR 模型可能会低估或高估总体中的方差,这取决于它在训练样本中看到的方差类型。
这导致了一系列问题:模型参数的标准误差变得不正确,导致它们的 p 值出错,置信区间过窄或过宽。这可能会误导您相信某些参数值是重要的,而实际上它们并不重要,反之亦然。整个模型变得不可靠。
这个问题不仅限于 OLSR 车型。任何假设均方数据或均方残差的模型都容易受到这些问题的影响。
如何检测异方差
首先绘制因变量与自变量或时间的关系图,寻找因变量变化遵循某种模式的迹象。
另一种方法是根据数据训练一个合适的模型,并根据因变量绘制其残差,再次寻找可变性的模式。
第三种更好的方法是使用以下异方差统计测试之一:
我们很快就会看到如何在黄金价格数据集上运行Python中的异方差白色测试。
同时,让我们看看这些测试是如何工作的。他们中的大多数使用下面的标准方法来检测异方差:
- 根据数据训练一个合适的主回归模型。
- 接下来,在主模型的残差平方上拟合一个辅助回归模型,解释变量是主模型的解释变量,或者这些变量的某种组合。上述测试使用以下一个或多个回归表达式作为辅助模型:
ϵ*=β_ 0+β_ 1x+γx**+β_ 2x+γ
ϵ=β_ 1 √+γ
【ϵ】=β_ 0+β_ 1/x+ β_ 1是回归系数的向量,
X 是主模型的解释变量矩阵,
γ 是误差项的向量。*** - 对于拟合的辅助模型,计算合适的拟合优度统计量,例如用于回归分析的 R 或 F 统计量 ,以查看残差与主模型的解释变量的拟合程度。
- 如果检验统计量没有显示显著的拟合优度,则接受残差是同方差的零假设。否则,接受残差是异方差的替代假设,这反过来意味着 1)主要模型的 y 的条件方差是异方差的,或者 2)我们的主要模型是未指定的,或者 3)(1)和(2)都成立。
使用 Python 和 statsmodels 测试异方差性
让我们使用 Python 在黄金价格指数数据集上运行白色测试来检验异方差性(在这里找到)。
导入所有必需的包。
import pandas as pdimport numpy as npfrom matplotlib import pyplot as plt
加载数据集并绘制因变量
将数据集加载到 pandas 数据框中,并打印前 10 行:
df = pd.read_csv('monthly_gold_price_index_fred.csv', header=0, infer_datetime_format=True, parse_dates=[0], index_col=[0])print(df.head(10))
(图片由作者)
我们将向名为 Time_Period 的数据帧添加一个新列,包含从 1 到 132 的整数。
df['Time_Period'] = range(1, len(df)+1)print(df.head(10))
(图片由作者提供)
绘制数据:
**#Create a new mpyplot figure to plot into**
fig = plt.figure()**#Set the title of the plot** fig.suptitle('Export Price Index of Gold')#Set the X and Y axis labels
plt.xlabel('Time Period')
plt.ylabel('Price Index')**#plot the time series and store the plot in the *actual* variable. We'll need that later for the legend.** actual, = plt.plot(df['Time_Period'], df['Export_Price_Index_of_Gold'], 'bo-', label='Gold Price Index')**#Set up the legend. There is only one time series in the legend.** plt.legend(handles=[actual])**#Show everything** plt.show()
这是我们得到的图:
从 2001 年 1 月到 2011 年 12 月连续 132 个月的黄金出口价格指数(图片由作者提供)
**The price data appears to be both heteroscedastic and nonlinear.**
取因变量的对数变换
对因变量进行对数变换是最常用的技术之一,不仅可以使因变量*线性化,还可以抑制 y 中的异方差(如果存在)。*
让我们向名为 LOG _Export _ Price _ Index _ of _ Gold的数据框添加一个新列,其中包含。我们将使用 numpy.log() 来完成这项工作。
*df['LOG_Export_Price_Index_of_Gold'] = np.log(df['Export_Price_Index_of_Gold'])*
原始数据和对数变换数据的并排比较揭示了对数变换降低了时间序列中的非线性:
原始和对数转换价格指数数据的比较(图片由作者提供)
将 OLS 线性回归模型拟合到经对数变换的数据集
如果你还记得我们之前概述的测试配方,我们称这个模型为我们的主模型。
我们主要模型的回归表达式为:
log _ export _ price _ index _ of _ gold=β_ 0+β_ 1*time _ period+ϵ
即我们正在寻求预测log(Export _ Price _ Index _ of _ Gold)使用 Time_Period )。
导入回归包:
****import** statsmodels.api **as** sm
**import** statsmodels.formula.api **as** smf
**from** patsy **import** dmatrices**
在 patsy 语法中形成模型表达式。我们告诉 PatsyLOG _ Export _ Price _ Index _ of _ Gold依赖于 Time_Period 。Patsy 将自动包含截距 β_0 :
**expr = 'LOG_Export_Price_Index_of_Gold ~ Time_Period'**
建立和培训 OLSR 模型:
**olsr_results = smf.ols(expr, df).fit()**
相对于时间段绘制剩余误差(存储在*olsr_results.resid*
字段中):
****#Create a new pyplot figure to plot into** fig = plt.figure()**#Set the title of the plot** fig.suptitle('Residual errors against Time_Period')**#Set the X and Y axis labels** plt.xlabel('Time_Period')plt.ylabel('Residual Errors')**#plot the time series and store the plot in the *actual* variable.** actual, = plt.plot(df['Time_Period'], olsr_results.resid, 'go-', label='Residual Errors')**#Set up the legend. There is only one time series in the legend.**
plt.legend(handles=[actual])**#Show everything**
plt.show()**
剧情是这样的:
(图片由作者提供)
对残差进行异方差的怀特检验
白色测试使用辅助 OLSR 模型,其中因变量是主模型残差的平方,解释变量是主模型的解释变量、它们的平方和叉积。
在我们的例子中,我们只有一个解释变量: Time_Period 。
让我们向 pandas 数据框中添加两列,一列是主模型残差的平方,另一列是时间周期的平方。 numpy.power() 方法是一种快速的方法。
**df['SQ_RESID'] = np.power(olsr_results.resid, 2.0)df['SQ_Time_Period'] = np.power(df['Time_Period'], 2.0)**
为我们的辅助模型构建模型表达式(使用 patsy 语法):
**aux_expr = 'SQ_RESID ~ Time_Period + SQ_Time_Period'**
构建 X 和 y 矩阵。熊猫让这变得非常容易:
**y, X = dmatrices(aux_expr, df, return_type='dataframe')**
在 X 中增加一列,用于保存回归截距:
**X = sm.add_constant(X)**
在(y,X)数据集上建立和训练 OLSR 模型:
**aux_olsr_results = sm.OLS(y, X).fit()**
打印结果:
**print(aux_olsr_results.summary())**
这将打印以下输出:
辅助 OLSR 模型的输出(图片由作者提供)
分析辅助模型的结果
R-squared: 该模型只能解释残差平方中 0.8%的方差,表明拟合度相当差。
F-统计量:0.593 的极高 p 值让我们接受了 f 检验的零假设,即模型的参数值没有联合显著性。这个模型比均值模型好不了多少。
****Related Post:** [The F-test for Regression Analysis](/fisher-test-for-regression-analysis-1e1687867259)**
****回归系数的显著性:Time _ Period(0.812)和 SQ_Time_Period (0.634)的 p 值相当高,导致我们接受 t 检验的零假设,即两个系数都不显著,即基本为零。
所有可用的证据表明残差是同方差的。
所发生的是,对数变换也抑制了原始黄金价格指数的异方差性,使其达到了怀特测试无法检测的水平。
使用 statsmodels 运行白色测试
Python statsmodels 库包含怀特测试的实现。让我们看看它是如何工作的:
步骤 1: 导入测试包。
****from** statsmodels.stats.diagnostic **import** het_white**from** statsmodels.compat **import** lzip**
statsmodels 中的 het_white(resid,exog) 测试需要两个参数:
resid :主回归模型的残差数组。在我们的例子中, resid 是 olsr_results.resid
exog :主模型的解释变量 X 的矩阵(如 numpy 数组)。在我们的例子中 exog 是 Time_Period + Intercept
****第二步:根据数据建立并训练主回归模型。回想一下,我们已经这样做了,剩余误差可在olsr_results.resid
中找到。
第三步:使用 patsy ,从 pandas 数据帧中拉出包含 Time_Period 和 intercept 列的 X 矩阵:
**expr = 'LOG_Export_Price_Index_of_Gold ~ Time_Period'y, X = dmatrices(expr, df, return_type='dataframe')**
步骤 4: 执行白色测试:
**keys = ['**Lagrange Multiplier statistic:**', '**LM test\'s p-value:**', '**F-statistic:**', '**F-test\'s p-value:**']results = **het_white**(olsr_results.resid, X)lzip(keys, results)**
以下是输出结果:
**[
('**Lagrange Multiplier statistic:**', 1.0637754647238826),
("**LM test's p-value:**", 0.5874948891258364),
('**F-statistic:**', 0.5240224217417021),
("**F-test's p-value:**", 0.5933889438779911)
]**
****LM 检验:LM 检验的统计量遵循卡方分布,自由度=模型的 DF 减 1 =(3–1)= 2。它的 p 值(0.587)很高。因此,我们接受检验的零假设,即残差中没有异方差。
F-检验:F-检验的统计量服从 F-分布。同样,0.593 的高 p 值证实了检验的零假设,即残差中不存在异方差性。
总体上,我们的结论是残差是同胚的。
这与我们之前的分析一致,即残差是同胚的。
我写关于数据科学的话题,特别关注时间序列分析和预测。
如果你喜欢这篇文章,请跟我到 拜见 接受关于时间序列分析、建模和预测的提示、操作方法和编程建议。