TowardsDataScience 博客中文翻译 2020(六百四十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

实现分类问题径向基函数神经网络的最有效方法

原文:https://towardsdatascience.com/most-effective-way-to-implement-radial-basis-function-neural-network-for-classification-problem-33c467803319?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高斯径向基函数的三维可视化

如何使用 K-均值聚类和线性回归对图像进行分类

介绍

径向基函数神经网络(RBFNN)是一种不同寻常但非常快速、有效和直观的机器学习算法。三层网络可用于解决分类和回归问题。本文描述了对 MNIST 手写数字数据集分类的实现,其中获得了约 94% 的准确率。此外,为了方便来自不同编程语言背景的人,C++和 Python 项目代码都被添加进来[3]。

先决条件

  • k-均值聚类算法
  • 线性回归

如果您对上述任何一个主题都不熟悉,可以参考文章末尾的参考资料和参考文献[1][2] 部分给出的链接。

径向基函数

首先,让我们从一个简单的例子开始。想象一下,下面 2D 绘制的数据是给你的。你的任务是找到一个最接近集群位置的模式。因此,当引入未知点时,该模型可以预测它属于第一还是第二数据聚类。使用 K-Means 聚类算法可以很容易地解决这个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://haosutopia.github.io/2018/04/K-Means-01/

然而,RBFNN 使用不同的方法。它使用圆形对数据平面(在 2D)建模。因此,可以通过考虑聚类质心和它们的半径来预测数据所属的聚类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是根据上面描述的理论,如果一个点离所有质心半径足够远,则该点有可能不属于任何一个聚类。因此,这导致了数据点类别的模糊性。

为了解决这个理论上的差距,使用径向基函数,这是 RBFNN 的最重要的部分。径向基函数(RBF)的实现使我们能够知道质心和任何数据点之间的接近率,而不管距离的范围。RBF 使用平滑过渡的圆形而不是锐截止圆来模拟数据。此外,RBF 给出了 K-means 聚类算法所不能提供的关于预测置信度的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从上面的图中可以观察到,随着我们远离星团的质心,颜色的强度逐渐降低。为了具有这样的平滑过渡,可以使用距离的负幂的指数函数。通过将距离乘以标量系数*,我们可以控制函数衰减的速度。所以更高的贝塔意味着更剧烈的下跌。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

值得注意的是 Beta 是一个应该微调的超参数。但是,出于测试目的,可以尝试两种选择。

  1. 使用集群的标准偏差*😗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.使用下面的等式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • K —质心的数量
  • Dmax — 任意两个质心之间的最大距离

欧几里得距离 D 可以通过使用勾股定理容易地找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从径向基函数获取输出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的图表显示了 RBFNN 层是如何组成的。在图中,第一层代表输入数据。第二层也称为隐藏层,是存储所有输入数据的 RBF 的地方。例如,节点 RBF1 是长度为 n 的向量,其中描述了 X ([x1,x2,…,xn])C1 (第一质心向量)的 RBF。径向基 F1 矢量是对第一质心数据 X* 之间的距离如何相互关联的度量。*

现在我们有了聚类圆和数据点与聚类质心之间的距离度量。如果我们认为每个数字只有一个聚类,通过找到聚类和给定点之间的最高 RBF,我们可以预测其类别。但是,如果任何一个类有多个集群,会发生什么情况呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在下面的场景中,虽然答案是 2,但分类器得出的结果是 3。为了解决这个问题,相同类别的不同聚类以及其他聚类的效果可以线性组合。因此,生成的输出将基于所有 RBF。这里出现的困难是找到最接近 RBF 和输出之间的线性关系的W(【w1,w2,w3】)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优化:使用最小二乘线性回归寻找权重

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

径向基函数神经网络的主要优点之一是利用最小二乘线性回归方程,其中获得成本函数的全局最小值相对较快且有保证。另一方面,也可以应用诸如批量梯度下降的其他优化算法来更新权重。

在数字分类问题中:

  • x 是径向基函数的二维矩阵
  • y 是一个热编码的二维矩阵。

最后,通过使用上面解释的理论,未知点的类别的预测可以如下获得:

  1. 得到关于所有质心的未知数据点 xRBF
  2. 计算 RBFW 的点积,选择最大值的指标

用 Python 实现理论

  1. 首先,我们必须定义将在 RBFNN 中使用的所需函数。修改后的“kmeans”函数返回聚类中心以及聚类的标准差。

2.为了使实现更有益,我们可以将 RBFNN 编码为一个类。

3.拟合函数:First lines 执行 k-means 来获得聚类的质心和标准偏差。然后,我们可以通过使用提到的等式,使算法对所有聚类质心使用相同的β。在接下来的几行中,我们获得输入 X 的 RBF,并应用最小二乘优化来获得适当的权重矩阵 W 。此外,为了测量模型的准确性,在最后几行中使用了测试数据。

4.将 MNIST 数据集分成训练和测试两部分,让 RBFNN 完成自己的工作。

结论

总之,RBFNN 是分类和回归任务的强大模型之一。RBF 网络可以学习使用许多 RBF 曲线来逼近底层模式。与 MLP 结构化网络相比,用于优化过程的统计方程的实践使得算法更有益且更快。但是,微调超参数,如 K — 簇数和β需要工作、时间和实践。

资源和参考资料

[1] T. Ahadli,回归简介:用 Python 进行线性回归(2018)

[2] T. Ahadli,K-Means 聚类算法的友好介绍(2020)

[3] T. Ahadli,C++/Python 使用径向基函数神经网络(2020)对 MNIST 数字数据集进行分类的代码

[4]g . Vachkov 教授,使用 RBF 网络模型进行近似和分类的多步建模(2016),智能系统中的创新问题

一个数据科学家需要多少技术技能?

原文:https://towardsdatascience.com/most-essential-set-of-skills-for-the-type-of-data-scientist-job-youre-looking-for-44d5f6d23ca3?source=collection_archive---------24-----------------------

使用 LDA 主题建模分析数据科学家职位列表

随着数据科学家的就业市场不断扩大,许多数据科学家的工作清单实际上是在寻找不同的技术技能。对于 2019 年 Indeed.com 上所有与数据科学相关的职位发布,有 464 种不同的技能被提及。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显然,我们没有办法掌握所有这些技能,所以了解你将寻找的数据科学家工作需要哪些特定的技术技能非常重要。

为了以数据科学的方式解决这个问题,我们对实际上每个数据科学相关工作清单中提到的技术技能进行了 LDA 主题建模,以找出哪些技术技能最有可能在工作清单中一起被提到。我们的数据集来自这个 Kaggle 数据。

# Data Preprocessing on the skill column
df=pd.read_csv('indeed_job_dataset.csv')
text_data=[]
for skills in df.Skill.dropna():
    lst=skills[1:-1].split(', ')
    words=[]
    for item in lst:
        words.append(item[1:-1])
    text_data.append(words)# Topic Modelling
from gensim import corpora
dictionary = corpora.Dictionary(text_data)
corpus = [dictionary.doc2bow(text) for text in text_data]
import pickle
pickle.dump(corpus, open(‘corpus.pkl’, ‘wb’))
dictionary.save(‘dictionary.gensim’)# Setting the total number of topics to be 3 here
NUM_TOPICS = 3
ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics = NUM_TOPICS, id2word=dictionary, passes=15)
ldamodel.save(‘model5.gensim’)
topics = ldamodel.print_topics(num_words=4)

可视化我们的主题建模结果

dictionary = gensim.corpora.Dictionary.load(‘dictionary.gensim’)
corpus = pickle.load(open(‘corpus.pkl’, ‘rb’))
lda = gensim.models.ldamodel.LdaModel.load(‘model5.gensim’)
import pyLDAvis.gensim
lda_display = pyLDAvis.gensim.prepare(lda, corpus, dictionary, sort_topics=False)
pyLDAvis.display(lda_display)

我们可以看到,当我们将主题数量设置为 3 时,第一种工作类型是更传统的数据科学家角色,雇主正在寻找 R、Python、SQL 和机器学习方面的技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题 1:更传统的数据科学家角色

与此同时,第二种工作类型所需的技能略有不同——Spark、Hadoop、AWS、Scala——这显然是一个更侧重于大数据和云的数据科学家角色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题 2:大数据和专注于云的数据科学家

最后,对于第三种工作类型,这显然是一个更为的数据分析师角色,专注于使用 SQL、Tableau 和 SQL Server。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主题 3:精通 SQL 和 Tableau 的数据分析师

那么,我们到底需要多少技能才能获得更高的薪水呢?越多越好!嗯,也许除了如果你进入更多的管理角色,这可能是为什么这里的最高工资等级实际上看到所需技能数量的减少。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在执行了主题建模之后,有趣的是,尽管 Python 似乎是这个行业中更占主导地位的语言,但在最近的许多数据科学家职位发布中,仍然非常需要 R。我们怀疑这可能是因为许多清单将 R 和 Python 都放在技能部分,但实际上需要 R/Python。

尽管如此,我们认为在 R 和 Python 之间做一个比较可能会很有趣,看看了解 Python 而不是 R 是否会给你带来任何薪水提升。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,相比于懂 R,懂 Python 确实让你在落地更高工资上更有优势。

希望这可以帮助你的求职过程一路走来更容易一点,愿我们所有的数据梦想成真✨

这是三藩市大学 MSDS 593 的一个小组项目,小组成员是刘品言和刘旭。请随意查看 GitHub repo 中我们的预处理和可视化代码。

参考:

[1]李,苏珊,Python 中的主题建模与潜在狄利克雷分配(LDA)(2018),https://towardsdatascience . com/Topic-Modeling-and-Latent-Dirichlet-Allocation-in-Python-9bf 156893 c24

最重要的 IT 辅助技能,正则表达式

原文:https://towardsdatascience.com/most-important-it-side-skill-regex-2226789d16d0?source=collection_archive---------44-----------------------

正则表达式是众所周知的 IT 技能,它可以极大地提高你在计算机上做任何事情的效率!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

当我第一次学习如何使用 Regex 搜索文本并以我以前无法想象的方式处理文本数据时,我感到非常震惊。今天,我们可以在 Python 中利用它的能力,但它在所有其他编程语言、文本编辑器和 ide 中都是一样的。我们学习基础知识的速度会比特朗普发推特还快!

那么什么是 Regex 呢?

Regex 是正则表达式的缩写。含义:它是一个短的字符序列,用于搜索或替换长文本中的单词。它是一种编程语言的次要形式,你可以用它来立即找到你需要的东西。我们将使用一条奇怪的小特朗普推文来学习基础知识。

我们将使用的示例推文

基础

让我们加载 Python,一起浏览一下基础知识。首先,我们必须加载模块 re,它处理 python 内部所有与 regex 相关的事情。让我们把文字删减一点

import re
text='When you see the Drug Companies taking massive  television ads against me, forget what they say (which is false), YOU KNOW THAT DRUG'

让我们练习一些魔法吧!我们现在可以要求 Regex 查找所有内容,直到一个单词第一次出现。

regex_pattern = r'.*Drug'
res = re.findall(regex_pattern,text)
print(res)

这将打印“‘当您看到药物时’”。

那么这是怎么回事呢?

首先,你可能会注意到我们是如何用前缀***r’***定义字符串的,这个 r 向 python 表明我们将要使用 Regex。也称为原始字符串,这不会改变字符串的类型。它主要改变了字符串的解释方式。这并不总是必要的,但它是最佳实践。

接下来的事情就是**’。*药物’*部分。这包括两个想法。首先,我们有零件。 '这向 Regex 表明,我们需要所有可能的字母或符号…… 直到我们看到药物。

所以基本上。* ‘就是所谓的通配符通配符。其中’ * '表示我们要将星号之前的所有内容重复 0 次或更多次。在哪里?是超级特殊的符号,告诉星星我们想要一切,包括字母、数字和空格。

我们再试一次

regex_pattern = r'W.*ss'
res = re.findall(regex_pattern,text)
print(res)

这将打印“‘当你看到制药公司服用大众’”。从第一次出现的“W”到第一次出现的“ss”

贪婪

regex_pattern = r' .*? '
res = re.findall(regex_pattern,text)
print(res)

会打印“‘你’,‘那个’,‘公司’,‘大规模’…”。正如我们所看到的,这次我们想找到两个空间之间的所有东西。我希望你的头上现在有一个大大的问号。我们把它放在那里是为了确保正则表达式以所谓的贪婪方式匹配。贪婪在这里意味着我们只匹配绝对最小值,直到下一个空格。没有了“?只有使用’ *,'我们才能匹配所有内容,包括空格,因此结果将是整个 tweet(没有最后一个和第一个单词)

取代邪恶

regex_pattern = r'drug'
res = re.sub(regex_pattern,'COVID-19',text, flags=re.IGNORECASE)
print(res)

我将刊登“当你看到新冠肺炎公司在电视上做大量广告反对我时,忘记他们说了什么(这是假的),你知道新冠肺炎”。

这是 Regex 最有用的部分之一,你可以用任何东西替换任何东西!呼叫响应(…)采用我们想要替换的模式,并用更合适的单词替换它。我们必须添加’ flags=re。“IGNORECASE”以确保我们符合特朗普不区分大小写的推文风格;)

释放北海巨妖

regex_pattern = r'D(.*),'
res = re.sub(regex_pattern,'Kraken',text, flags=re.IGNORECASE)
print(res)

会印上“当你看到北海巨妖时,你就知道那是毒品。”再次说明我们所学到的。

匹配我们所知道的

regex_pattern = r'see( .*? )*?THAT'
res = re.sub(regex_pattern,'\\1',text)
print(res+"S")

上面印着“当你知道毒品”好了,现在我们进入了严肃的正则表达式领域。方括号“()”构成一个匹配组。这是一种引用后来在 replace 语句中发现的内容的方式。我们还嵌套了“?”围绕着它。所以第一个”(。?)“获取单词将” * “放在匹配**的单词周围会获取” see “和” THAT "之间的所有单词。**我们为什么要这样做?因此,我们可以在以后引用它,正如我们在 replace 语句中看到的那样’ \1 '获取第一个单词并将其放入找到的字符串中。这个例子中的第一个词是“你”这让我们“当你知道毒品。”

结论

这些是正则表达式的基本构建块,在你精通正则表达式的过程中,你会发现更多。这些基本技术帮助你理解什么是可能的。我希望你现在能更多地考虑正则表达式。首先,你可能需要投入一些时间。一旦你知道了,一个全新的字符串操作世界将会开启。

如果你喜欢这篇文章,我会很高兴在 TwitterLinkedIn 上联系你。

一定要看看我的 YouTube 频道,我每周都会在那里发布新视频。

数据分析师最需要的技术技能

原文:https://towardsdatascience.com/most-in-demand-tech-skills-for-data-analysts-26d4ea4450f8?source=collection_archive---------2-----------------------

雇主在数据分析师中寻找哪些技术技能?它们与数据工程师和数据科学家所需的技能相比如何?📊

我分析了 2020 年 1 月以来的在线工作清单,以寻找答案。在本文中,我将分享答案,并为有志成为数据分析师的人提供一条建议的学习路径。🚀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我的第三篇文章,着眼于数据密集型岗位的技术技能。参见之前关于数据科学家这里和数据工程师这里的文章。😀

话不多说,以下是截至 2020 年 1 月数据分析师职位列表中的 10 大技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据分析师角色

数据分析师将数据转化为信息。它们通过为决策者提供可操作的数据来发挥重要作用。👍

数据分析师通常获取数据工程师提供的数据,对其进行分析,并提出建议。他们创建可视化效果,在仪表板和演示中显示他们的发现。📈

与数据科学家不同,数据分析师通常不会基于机器学习算法创建预测模型。

方法

我从简单雇佣事实上怪物那里搜集信息,看看在美国的工作列表中哪些关键词出现了“数据分析师”。我使用了请求美汤 Python 库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我使用了从我对数据科学家数据工程师工作列表的分析中收集到的相同关键词。LinkedIn 没有被搜索到,因为它之前在抓取了它的网站后将我锁定在我的账户之外。☹️

对于每个求职网站,我计算了每个关键词出现在该网站上的数据分析师职位列表总数的百分比。然后我计算了三个网站上每个关键词的平均百分比。

结果

这是一张展开的图表,展示了 30 种最常见的技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是表格形式的相同数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

搜索了许多其他技术关键词;这是 30 个最高分。让我们看看最常见的技术。

讨论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SQL 是结构化查询语言的简称。它出现在超过一半的列表中。SQL 用于处理关系数据库。SQL 有多种风格,包括 MySQL、Oracle、SQL Server、PostgreSQL 和 SQLite。每个版本共享大部分相同的核心 API。有高质量的免费产品。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Excel 几乎和 SQL 一样普遍。这是占主导地位的电子表格程序。它是微软 Office 365 软件工具套件的一部分。尽管 Excel 不能像 SQL 数据库那样处理大量数据,但它非常适合快速进行分析。 Google Sheets 是一个拥有免费版本和相似核心功能的竞争对手。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tableau 出现在大约四分之一的列表中。拖放式商业智能软件使创建可视化和仪表板变得容易。Tableau 的可视化能力远胜于 Excel。Tableau 有一个免费的公开版本,但如果你想让数据保密,你需要支付一些钱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 出现在大约四分之一的列表中。它是一种非常流行的免费开源编程语言,用于处理数据、网站和脚本。它是机器学习的主要语言。🐍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

超过 20%的列表中有 R字样。这是一种流行的免费开源统计语言,尤其是在学术界。

与数据工程师和数据科学家的比较

在之前的文章中,我研究了数据科学家数据工程师最需要的技术技能。数据分析师的结果如何比较?

数据分析师的列表总数为 16,325,数据工程师的列表总数为 12,013,数据科学家的列表总数为 9,396。所以数据分析师的工作相对来说很常见。😀

下图显示了 10 种最常见的数据分析列表技术。数据科学家和数据工程师列表的分数也会针对每个关键字显示出来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

几个亮点:

  • SQL 对于这三个工作岗位都很受欢迎。
  • Excel 在数据分析师列表中的常见程度是数据科学家和数据工程师列表的四倍多。
  • Python 虽然出现在大约四分之一的数据分析师列表中,但在数据科学家和数据工程师工作列表中的受欢迎程度大约是它的三倍。
  • r 在数据分析师和数据工程师职位中比在数据科学家职位列表中更不常见。
  • PowerPoint 在数据分析师列表中更常见。

就趋势而言,我对数据科学家工作清单的分析显示,从 2018 年到 2019 年,R 和 sa 的受欢迎程度都大幅下降。

值得注意的是,数据工程师职位列表中提到的技术比数据分析师职位列表中提到的多得多。

建议

如果你想成为一名数据分析师,或者让自己更有市场,我建议你学习以下技术,按优先顺序排列。

学习 Excel 。拿起来比 SQL 快。我从学校和工作中知道了 Excel,但我通过学习 Microsoft Excel 认证考试更好地了解了它。如果你是一名自学者,官方认证或 MOOC 课程可能值得你花时间。

学习 SQL 。如果你不知道一种编程语言,这是一个很好的第一次学习。我那本令人难忘的 SQL 书籍在预发布版中有售,请点击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学习 Tableau 。Tableau 允许你用一个拖放界面快速的制作出很棒的可视化效果。点击这里查看我的文章来学习基础知识

展示你可以制作一个 PowerPoint 演示。有很多 MOOCs 是教微软 PowerPoint 的。

如果你已经证明你可以使用上述技术来分析和沟通,你应该是许多入门级职位的体面候选人。👍

如果你知道以上技能,又想学习新的技能或者获得更多职位的资格,建议你学习 Python 。如果你想进入数据工程和数据科学领域,Python 是很棒的。😀

我的令人难忘的 Python 书是为初学者设计的。这本书有 Kindle 版本,也有来自亚马逊和亚马逊的印刷版。epub 和。pdf 格式此处

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦你知道了基本的 Python,学习 熊猫 。Pandas 是一个处理数据的 Python 库。如果你正在寻找一份需要 Python 的数据工作,你可能也会被期望拥有熊猫技能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我正在完成一本介绍熊猫的书,所以加入我的数据令人敬畏的时事通讯来确保你不会错过它。🚀

这听起来可能是一个很长的清单,但是一步一步来。🦶认识到这需要时间,而且会有起伏。你能做到——只要坚持!😀

我建议你学习和展示你的技能,做一些你可以放在个人文件夹里的项目。然后你就可以通过做自己喜欢的事情来学习了!你也将有一份工作向潜在雇主展示你的技能。关于建立作品集网站的快速指南,请参见本文

包装

我希望这篇数据分析师最需要的技术指南对你有用。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。👍

我撰写关于 Python、数据科学和其他技术主题的文章。如果你对此感兴趣,在 Medium 上关注我,在这里阅读更多。📊

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

快乐分析!📈

数据工程师最需要的技术技能

原文:https://towardsdatascience.com/most-in-demand-tech-skills-for-data-engineers-58f4c1ca25ab?source=collection_archive---------1-----------------------

他们与数据科学家的技术技能相比如何?

根据 2019 年的一项分析,数据工程师是增长最快的职位。数据工程师通过创建和维护用于注入、转换和存储数据的管道和数据库,在组织中扮演着至关重要的角色。

数据工程师最需要哪些技术技能?它们与数据科学家最需要的技术技能相比如何?请继续阅读,寻找答案!😀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我分析了 2020 年 1 月数据工程师的工作清单,以了解哪些技术技能最受欢迎。我将结果与数据科学家的工作列表进行了比较,发现了一些有趣的差异。🔍

事不宜迟,以下是截至 2020 年 1 月数据工程师工作清单中的 10 大技术。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们跳进来吧!🚀

数据工程师角色

数据工程师在当今的组织中扮演着重要的角色。他们负责存储数据并使数据可供他人使用。

数据工程师建立管道从许多来源注入流和批处理数据。然后,管道执行提取、转换和加载(ETL)过程,以使数据更加可用。然后,这些数据可供数据科学家和数据分析师进行进一步处理。最终,数据会进入仪表盘、报告和机器学习模型。📊

我搜索数据来确定 2020 年数据工程师最需要哪些技术。

方法

我从简单雇佣事实上怪物那里搜集信息,看看在美国的工作列表中哪些关键词出现了“数据工程师”。我使用了请求美汤 Python 库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我在分析数据科学家职位列表和阅读数据工程师职位列表时加入了关键词。LinkedIn 没有被搜索到,因为之前在抓取后我被锁定在我的帐户之外。☹️

对于每个求职网站,我计算了每个关键词出现在该网站上的数据工程师职位列表的百分比。然后我计算了三个网站上每个关键词的平均百分比。

结果

以下是工作列表搜索结果中得分最高的 30 个数据工程师技术术语。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下是表格形式的相同百分比数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们来分析一下。🎸

讨论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SQL 和 Python 都出现在超过三分之二的工作列表中。它们是最值得了解的两项技术。💡

Python 是一种非常流行的处理数据、网站和脚本的编程语言。🐍

SQL 代表结构化查询语言。SQL 是由一系列语言实现的标准,用于从关系数据库中获取数据。它已经存在了很长时间,并显示出它的弹性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spark 出现在大约一半的列表中。 Apache Spark 是“一个用于大数据处理的统一分析引擎,内置流、SQL、机器学习和图形处理模块”。它在非常大的数据集上特别受欢迎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AWS 出现在大约 45%的列表中。AWS 是亚马逊的云计算平台。它拥有所有云平台中最大的市场份额。

接下来是 Java 和 Hadoop,各占 40%多一点。

Java 是一种常用的、久经考验的语言,在 Stack Overflow 的 2019 年开发者调查中排名第十。相比之下,Python 是第二受欢迎的语言。甲骨文控制着 Java,从 2020 年 1 月起,这个网站的主页会告诉你所有你需要了解的东西。😉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就像时光机一样。

Apache Hadoop 使用 MapReduce 编程模型和服务器集群来处理大数据。MapReduce 模型正在失宠。

接下来是 Hive、Scala、Kafka 和 NoSQL,它们都出现在大约四分之一的数据工程师列表中。

Apache Hive 是一个数据仓库软件,它“使用 SQL 来方便读取、写入和管理驻留在分布式存储中的大型数据集”。

Scala 是大数据流行的编程语言。Spark 是用 Scala 构建的。在 Stack Overflow 的 2019 年开发者调查结果中,Scala 是第 11 个最可怕的语言。

Apache Kafka 是一个分布式流媒体平台。它在注入流数据方面非常流行。

NoSQL 数据库站在 SQL 的对立面。NoSQL 数据库是非关系的、非结构化的,并且是水平可伸缩的。NoSQL 非常受欢迎,但是之前关于它将取代 SQL 成为主流存储模式的宣传似乎言过其实了。

与数据科学家术语的比较

以下是 30 大数据科学家工作列表技术术语,通过与数据工程师术语相同的方法得出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就总列表而言,数据科学家列表比数据工程师列表多约 28%(12,013 对 9,396)。

让我们看看哪些术语在数据工程师列表中比在数据科学家列表中更常见。

对数据工程师来说更常见

下图显示了平均差异大于 10%且小于-10%的关键词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AWS 的增幅最大,数据工程师的数量比数据科学家多 25%。它出现在大约 45%的数据工程师列表和大约 20%的数据科学家列表中。那是相当不同的!

这是同一数据的另一个视图,并列显示了数据工程师和数据科学家的工作列表结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spark 显示了第二大增长。数据工程师经常和大数据打交道。

卡夫卡也增长了 20%。这大约是数据科学家列表百分比的四倍。注入数据是数据工程师的核心工作。

Java、NoSQL、Redshift、SQL 和 Hadoop 出现在数据工程师列表中的次数增加了 15%。

对数据工程师来说不太常见

现在让我们看看哪些技能在数据工程师工作清单中不太受欢迎。

从数据科学家到数据工程师的下降幅度最大。它出现在大约 17%的列表中,而不是大约 56%。哇哦。r 是一种受学者和统计学家欢迎的编程语言。这是堆栈溢出调查受访者的第八个最可怕的语言。

SAS 在数据工程师列表中也很少出现,大约有 14%的差异。SAS 是统计和数据的专有语言。有趣的是,我最近对数据科学家工作列表的分析显示,SAS 比任何其他技术都下降得多。

对数据工程师和数据科学家都很重要

值得注意的是,十大技术中有八项是在数据科学家和数据工程师职位列表中共享的。SQL、Python、Spark、AWS、Java、Hadoop、Hive 和 Scala 都在前 10 名之列。

以下是 15 个最常见的数据工程师术语,以及它们在数据科学家列表中的流行程度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

建议

如果你想成为一名数据工程师,我建议你学习以下技术,大致按优先顺序排列。

学习 SQL。我建议你学习 PostgreSQL,因为它是开源的,受欢迎的,并且还在增长。我那本令人难忘的 SQL 书向您展示了如何使用 PostgreSQL,在预发布版这里有售。

学习香草 Python。我的令人难忘的 Python 书籍是为 Python 新手设计的。该书有 Kindle 版本,也有来自亚马逊和亚马逊网站的印刷版。epub 和。pdf 格式此处

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一旦你了解了基本的 Python,学习 pandas,一个用于清理和操作数据的 Python 库。如果你正在寻找一份需要 Python 的数据工作,而且大多数人都是这样,你可以期待公司也希望你有熊猫技能。我正在完成一本介绍熊猫的书,所以加入我的数据令人敬畏的时事通讯来确保你不会错过它。👍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

熊猫零食

学习 AWS。如果你想成为一名数据工程师,你需要一个云平台,而 AWS 是最受欢迎的。我发现 Linux Academy 在线课程在学习Google Cloud Data Engineering技能时很有帮助,并期待它们对 AWS 有所帮助。

如果你知道所有这些技术,并希望成为更受欢迎的数据工程师,我建议你学习 Apache Spark for big data。尽管我对数据科学家职位列表的研究显示它的受欢迎程度正在下降,但它仍然占据了所有数据工程师职位列表的近一半。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

火花

包装

我希望这篇数据工程师最需要的技术指南对你有用。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。👍

如果您想了解这些术语与数据分析师术语相比有何不同,请点击此处查看我的文章。

我为 Python、Docker、数据科学和其他技术主题创建学习资源。如果你对此感兴趣,请关注我,在这里阅读更多。😀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据工程快乐!🏗

数据专业人员最赚钱的国家

原文:https://towardsdatascience.com/most-lucrative-country-to-work-in-as-a-data-professional-b2077f696ccb?source=collection_archive---------5-----------------------

为什么理解标准误差对避免犯影响职业生涯的错误至关重要

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简·戈特维斯在 Unsplash 上的照片

数据世界也在以指数速度不断膨胀。每天都有新的工作广告,各行各业都在创造新的角色。随着越来越多的企业熟悉这个领域,对数据专业人员的需求也在不断增加。

在完成我的数据科学学位后(像许多人一样),我问自己下一步该去哪里?我很幸运处在一个全世界都需要工作的领域。在进行职业转移时,定性原因(如工作与生活的平衡)是必不可少的,但有一个定量原因也是决定性因素,即 工资 。这篇文章试图揭示是什么因素导致了更高的薪水,以及哪个国家为数据专业人员支付了更高的薪水。

然而,本文的技术目标是让读者了解 忽略样本量 的危险,以及它如何影响统计变异。

数据专业人员是在数据分析、工程和科学领域工作的员工。本文中使用的数据收集了以下职位的专业人士的薪资信息:

  1. 数据库管理员
  2. 数据分析师
  3. 数据科学家
  4. 软件工程师/开发人员
  5. 数据架构师
  6. 经理
  7. 系统管理员

在分析了三年来(2017、2018 和 2019 年)在 85 个不同国家超过6500 名数据专业人员的调查结果后,数据中有归因于个人工资的具体特征。

1.教育

“学习不是强制性的;生存也不是”

爱德华兹·戴明博士

拥有学位并不一定意味着高薪。我个人的信念是,学习是你在大学/工作之外学习时发生的事情。下面给出的是从数据中得出的图表,可以说它没有显示出资格和工资之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工资与资格的关系。按作者分类的图表

色标表示具有该资格的个人的平均经验年限。如图所示,拥有博士学位的数据专业人员平均薪酬最高,但需要注意的是,他们的经验也最多。在职学习对提高你的技术专长至关重要。因此,没有任何资格证书的人在平均工资方面仍然更好,因为他们倾向于积累更多的工作经验。人们可以得出这样的结论:学士学位可能会带来更高的报酬。然而,重要的是要意识到特征之间的其他几个相互作用(如公司规模、行业、位置等。).

2.经验

“经验是万物之师。”

—朱利叶斯·凯撒

人们几乎很自然地认为工作经验与薪水有着积极的关系。专业人士在工作中花的时间越多,员工就会变得越熟练。随着他们与同事建立工作关系,他们可能会变得更有效率,工作质量也会提高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工资随经验变化的箱线图。按作者分类的图表

该图进一步支持了先前提出的假设。正如你所观察到的,平均工资随着工作年限的增加而单调增加。

**注意:**所有工资都以美元给出,由于极端异常值,数据集仅限于 20 万美元以下的工资

3.曝光度(职位)

作为一名数据专业人员,我们期望每个人都能帮助他们的组织使用数据来解决三个关键挑战中的至少一个:

  1. 统计模型——利用您的专业知识构建/开发和测试算法和数学模型
  2. 开发管道——作为开发人员/程序员/工程师,你的工作是扩展这些模型并将其部署到生产中。
  3. 业务事务专家—您的角色是了解来自 it 的数据和信息如何应用于运营。

管道的所有方面就像机器中的齿轮。每个齿轮必须彼此同步工作,系统才能正常工作。理想情况下,这个结构中的每一个成员都应该有相同的薪酬水平,因为一个人并不比另一个人更重要。不幸的是,我们的现实与理想相去甚远,取决于需求;特定的角色有额外的好处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同职位的平均工资,偏差以误差线表示。按作者分类的图表

平均工资显示数据架构师和经理是最富有的。跨数据集的分析师之间的差异是最大的。这种显著的偏差可能是因为分析师的职称定义不严格,并且适用于多个角色。色标代表了多年的经验,为我们解读结果提供了额外的视角。毫不奇怪,要成为数据架构师,您需要丰富的经验,上面的数据也表明了这一点。

不久前,数据科学家还被贴上了 21 世纪“最性感”工作的标签。从上面的结果可以明显看出这样做的好处。尽管经验较少,但他们往往比开发人员、工程师和数据库管理员做得更好。

4.位置

最后,分析引出了本文的主要目标— 试图揭示数据专业人员的最佳机会。

这个问题的答案看起来很简单,类似于不同变量(教育、经验、曝光度)的薪资总和;可以对国家进行同样的分析。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按国家显示数据专业人员平均工资的表格

上表总结了收集数据最多的前 10 个国家的信息。美国的样本量最大,为 4509 人,然后是英国的 667 人(很快就会明白为什么这一点很重要)。

从平均工资信息中,我们可以看到美国是数据专业人员薪酬最高的国家,其次是新西兰。对我来说,在澳大利亚为我的跨塔斯曼邻居工作可能会给自己带来伤害。

德莫维尔方程

人口的真实统计数字永远不会为人所知。从人口中的每个人那里获得准确的信息几乎是不可能的(太昂贵了)。直觉上,您收集的人口数据点越多,其结果的可信度就越高。重要的是要认识到样本大小如何影响这个置信区间,以及有时我们是如何危险地无知。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说明人口和样本大小之间的差异

当观察值回归到群体的平均值时,群体的真实值估计得最好。德·莫维尔方程为我们提供了均值的抽样分布的标准差。

简单来说,随着样本量的增加,样本内的变异性开始向真实均值收敛。为了说明这种影响,我随机对数据集进行了抽样,以计算每次观察的平均工资。美国和澳大利亚的结果如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过平均多个实现观察到的漏斗效应(美国)。按作者分类的图表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过平均多个实现(AUS)观察到的漏斗效应。按作者分类的图表

随着样本量的增加,观察值开始回归平均值。当估计人口的统计数字时,我们必须考虑标准误差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

德莫维尔方程

平均值的标准误差通过将样本的标准偏差除以样本的大小来给出。

对这一等式的无知导致盖茨基金会在选定的学区花费了超过 10 亿美元来提高学术和有效的领导能力,而不是打破教室规模——实际上,这只是增加了差异。

说明平均值的标准误差

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

考虑标准误差的平均工资。按作者分类的图表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此表按国家/地区显示数据专业人员平均薪金的标准误差

有了标准误差的额外视角,判断就变得不那么明显了。

  1. 例如,我可以说在美国一名数据专家的平均工资是107,517 美元。尽管如此,我相信人口的真实平均值会在106,665 美元108,369 美元之间(即在其标准误差范围内)。
  2. 标准误差与样本的标准偏差成正比,因此德国、新西兰和印度等国家的标准误差非常高。然而,像瑞典和加拿大这样的国家尽管样本量小,但标准误差却较低。
  3. 尽管瑞典和荷兰的样本量相似,但由于数据的可变性,荷兰的标准误差要高得多。
  4. 该误差与样本量成反比,因此即使美国和英国在样本中具有高标准偏差,由于样本量大,它们的标准误差相对较低。

人类没有完全理解变异的影响,尤其是差异变异,这并不是一个新的发现。回到这个问题,我问自己在澳大利亚工作比在新西兰工作好。我更愿意根据澳大利亚相对较低的标准误差做出决定,而不是新西兰较高的平均工资。从 2017 年到 2019 年收集的数据可能会显示新西兰的表现更好,但在接下来的几年里却下滑到平均水平。

多少数据就够了

这个问题的答案就像分析学中很多问题的答案;它取决于。你越想确定你的均值,你的样本就需要越大。它完全与你试图解决的问题的背景相关。

通过计算不同样本大小的标准误差,可以生成一个图来建议需要收集多少数据点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为美国和德国生成的信心图。按作者分类的图表

很明显,对于均值 90%的置信度,30 的样本量对于美国就足够了,然而,由于德国的高度可变性,我们需要将近 90 个数据点。

结论

个人认为,从数据中得出的最终推论并没有改变,“对数据专业人士来说,美国是最赚钱的国家”。然而,应用我对标准误差的理解,我并不是不知道数据集中潜在的可变性。这种见解与当前的分析环境相一致,美国在分析之旅中远远领先于大多数其他国家。它拥有资金最高的大学,大多数科技巨头都位于此。由于市场和需求如此之大,数据专业人员在那里的价值是最高的,这是显而易见的。**

GitHub 链接,谢谢

谢谢你一直读到最后。我希望这篇文章能让你在下一次统计数据呈现给你的时候质疑样本量。对于所有在这个领域寻找工作机会的人,我祝你们一切顺利!

请随时在 LinkedIn上与我联系,一如既往,对此的任何反馈都将不胜感激。

所有的图表和代码都可以在我的 GitHub 资源库中找到,请随意下载并分析您的用例信息。

** [## 有线服务/数据科学

说明 2019,2018,& 2017 数据专业薪资调查结果汇总数据库管理员有多少…

github.com](https://github.com/wiredtoserve/datascience/tree/master/DataProfessionals)** 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由普里西拉·杜·普里兹Unsplash 上拍摄

最受欢迎的数据科学和机器学习课程— 2020 年

原文:https://towardsdatascience.com/most-popular-data-science-and-machine-learning-courses-july-2020-45e297d77987?source=collection_archive---------61-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的 SkillScouter 拍摄的照片

该列表最后一次更新是在 2020 年,并将定期更新以保持其相关性

有很多关于数据科学和机器学习的在线资源和网站,人们可以利用它们来学习新的东西或学习现有的技能。正如他们所说,互联网时代使得在旅途中获取信息变得极其容易。

在科技领域,最难做的事情之一就是颠覆自己

马特·莫楞威格

我在 LinkedIn 上无数次收到关于同一个问题的信息和连接请求。它总是像这样,

"学数据科学和机器学习到底要怎么做……要学哪些课程……基本上如何开始?”。

这篇文章的目的是回答这个问题,同时给读者一个目前在这个领域最受欢迎的课程列表。
下面您将看到在线课程,这些课程将帮助您加快在数据科学领域的发展。但是要知道,看视频只是给你一个 ML 理事会的席位,如果你明白我的意思,它不会授予你 ML 大师的等级,因为你将不得不处理实际的现实世界的问题,并接触数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片来自 SWU

不过我可以说的是,这些课程将带你到那个水平,从那里你将有足够的能力去弄清楚你下一步应该做什么。现在只是开始的问题!

这时你会发现这张表很有帮助。这些课程向您教授从基础到高级主题的所有内容,建议您在开始编写代码之前,不要着急,至少要正确理解基本概念——我相信这是您一开始就想做的事情!

最受欢迎的课程— 2020 年

按照我自己的想法,这些课程按照复杂程度排列。别担心,这不是任何形式的付费广告。我与任何课程提供者都没有关系!

完成以上列表中的每一门课程并不是强制性的,因为列表涵盖了最受欢迎的课程,而不是最必要的课程。我上大多数课程的方式是从一门课程开始,如果我被困在某个话题上,或者如果我想更好地理解某个东西,我会转向另一门课程,或者一些博客帖子,或者 YouTube 视频,甚至图书馆!

这些课程更侧重于获取机器学习、数据科学和 Python 编程方面的知识,而不是一个更全面的画面,该画面更加结构化,还包含软件开发和 SQL 基础知识。

如果您需要完整的数据科学学习路径,我很乐意帮助您——请访问数据科学门户网站,在那里您可以找到最全面的数据科学学习路径。从线性代数开始,到数据预处理,一直到机器学习和人工智能专业主题的核心概念。

[## 最全面的数据科学学习路径- 2020 年

让我首先说明为什么有这样一个学习途径是必要的,为什么它将被证明是非常…

thedatascienceportal.com](https://thedatascienceportal.com/tools-and-more/the-most-comprehensive-data-science-learning-path-2020/)

最初发表于T5【https://thedatascienceportal.com】。欲了解更多此类内容,请访问数据科学门户网站

** [## 数据科学门户

大家好,欢迎来到数据科学门户。这个空间致力于学习和理解所有令人兴奋的…

thedatascienceportal.com](https://thedatascienceportal.com/)**

作为数据科学家,最常用的词是“洞察力”!

原文:https://towardsdatascience.com/most-used-word-as-a-data-scientist-insights-b84b5a2966a2?source=collection_archive---------68-----------------------

是什么让你的数据富有洞察力?你如何给自己的见解排名?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

听到 洞察 这个词,你脑海中浮现的第一个词是什么?作为一名数据科学家,当我从我的数据中收集一些有用的信息时,我会提到 insight 这个词。我相信数据、信息和洞察力是有秩序可循的。

将这三个词放在一起看,脑海中浮现出一个著名的层次结构:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

导致洞察力的等级制度

数据是关于特定主题的原始上下文。信息是关注该主题的一种更加结构化的方式,它已经使用数据进行了过滤和聚合。洞察力基本上是在你对数据进行充分分析并得出特定结论后获得的。可操作的见解通常是那些你的团队准备好采取一些行动来帮助公司的透彻的见解。

我密切关注的步骤,以充分利用我的数据—

了解你的数据—

获得可操作洞察的主要步骤是您正在处理的数据的 质量 。它可以是结构化的,也可以是非结构化的。您应该经常密切关注您的目标和您正在处理的数据的一致性。您的数据应该是真实世界场景的良好近似。在开始你的数据探索之前,做一个 清单 列出你期望在你的特定问题表述中看到的所有东西。

例如:寻找不完整的数据、缺失的值、数据的分布、您期望在特征之间看到的明显和直观的相关性、数据的结构等。

了解你的目标—

必须有一个理由来解释为什么你必须处理你的数据。没有明确的目标,就不会得到明确的答案。密切关注你想要的结果,不要因此失去注意力。可能还有许多其他功能对其他任务更重要,但你需要关注的是你的 期望任务 。了解你的冲突池中的核心冲突,并计划解决它。采取额外措施解决冲突。

例如:如果你的主要关注点是基于当前形势和他们如何处理的各种州长的推文,那么更多地关注州长们基于#Covid19、#Coronavirus 的标签,而忽略其他消费者的个人推文,即使他们基于相同的标签追随特定的趋势。

如果你没有目标怎么办?如果你只是被分配了一项任务,并被要求拿出一些重要的东西来讨论呢?

有时你有数据,但你不知道如何使用它。你心中没有特定的目标。你没有想要解决的特定问题。你是如何进行的?

I 通过关联各种特征、使用热图、收集关于各种特征的信息、将它们分解成片段、直观地假设目标变量列表并继续数据探索,特别注意数据中的某些趋势。如果说不通呢?我会用其他的目标变量重复这个过程。

知道哪些洞见已经被处理过了—

当你面前有数百万个数据点时,很容易迷失方向。因此,最好记下您的团队成员已经处理过或正在发现的其他有见地的数据。还有,不要忘记[第二点](#Know your Target Variable)到 避免处理不那么重要的见解

了解数据的背景——

如果你熟悉上下文,那么处理想要的结果会变得容易一些。凭借 直觉判断 ,你可能会在数据上占据上风,而且通常情况下,你的结果会与预期结果一致。

例如:如果你根据宏观经济参数预测贷款结果,如果你知道宏观经济参数如何与贷款违约率相关联,这将是有帮助的。

知道如何传达这种洞察力—

如何让你的数据易于解读?大多数时候,你需要向没有数据科学/统计知识的不同团队传达你的洞察力。视觉是解读数据的最佳方式。它遵循透明性、可解释性和简单性。有一个很好的机会,你试图收集的洞察力是基于其他团队提出的问题,以帮助公司赢得客户,实现利润最大化,营销活动等。有时候,我们给出更多的信息,而不是见解。我们需要对我们最关键的观点进行排序,并传达出来。

最后一点,这一切都归结于你对你试图解决的问题的 知识 。它提高了你的工作质量。我想说,即使你从你的数据中发现了一个关键的见解,它也会让你的数据变得有见地。

所有机器学习之母(MoAML)

原文:https://towardsdatascience.com/mother-of-all-machine-learning-moaml-f16116248c18?source=collection_archive---------34-----------------------

帮助机器智能成长为与企业高度相关的产品

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

弗兰·霍根在 Unsplash 上的照片

阿.跋

  • 本帖中使用的“ 【分析】 AI ”与“ 机器智能 ”有重叠。“分析”指的是“大数据”前的分析,与“人工智能”或“人工智能”相比,后者在更一般的意义上使用。“机器智能”被用来代替曾经流行但令人困惑的“ML/AI”缩写。
  • 数据科学 ”不能与“人工智能”互换使用,而是作为研究计算来交付新的人工智能方法或用途。
  • 本帖表达的所有观点 均为 个人

B.背景

如果我们把费希尔 1922 年对回归领域的贡献看作是分析学的一个随意但方便的诞生,我们就站在几乎连续的分析学创新的世纪标记前(参见,例如, 费希尔关于回归)。这一创新极大地改变了企业利用自身数据以及外部市场数据的方式,以尝试并推动改善业务成果和竞争地位。

最近的“大数据”革命通过 3 个相关事件的完美风暴,进一步加快了分析创新的步伐:(1) 智能 quants anywhere 的 web 访问;(2)容易可用性有用有用数量真实数据*;(3) 基于云的 存储和计算能力以 低成本。***

不幸的是,这场革命并没有让各种类型的“分析”(为了清楚起见,从这里开始称为“人工智能”)均匀受益。它给反射式人工智能交互式人工智能(定义如下)带来了创新,这主要是由于多产的“数字原生”研究公司的敏锐关注,如苹果谷歌脸书亚马逊易贝等。

这些聪明、精力充沛、掌握数据的公司在正确的时间和地点迅速推进了这场革命。他们擅长利用其数据环境的特殊性质。他们能够利用从少量自动化一致流程中获得的数字专有集中式数据;对于传统的实体公司来说,这是一种奢侈,也是一个梦想。

这种不平衡革命的结果是,通过扩展人工智能计划的类型,推动企业价值增长的绿地机会仍然存在。企业可以利用人工智能计划的完整补充,通过声称的估计以及对预期增值的热烈讨论,了解每种类型的投资和优先级。

C.企业中的机器智能

有四(4)种主要的人工智能类型,我称之为自反互动深思熟虑战略。前三(3)个是面向事务的和直观的,而战略 人工智能支持完全不同的愿望。它帮助总经理们(从这里开始称为“GM”)平衡增长盈利能力客户满意度,同时与公司目标、理念、风险偏好和其他紧急情况保持一致。

企业人工智能程序过度利用反射式人工智能( RPA +人工智能用于后台办公自动化*)和交互式人工智能(聊天机器人+ Q & A 机器 实现自助服务)计划。他们无法从深思熟虑的或战略性的人工智能中收获全部价值,即使这些有时更容易执行。我们不应该指望人工智能在这些解决方案中“冷静”,但它们肯定可以提高决策质量买入以交付更好的业务成果。*

今天,企业战略和政策继续主要由“直觉”和可怕的非正式过程驱动。现有流程松散地执行问责制,并且未能一致地传播关于糟糕决策及其连锁效应的知识。由于战略人工智能对战略流程的广泛影响,与其他类型相比,战略人工智能可能对推动企业价值产生最大的影响

下面的插图提供了各种人工智能类型预期的相对贡献的概念,每美元投资的(单个方框的大小反映了交付的相对价值,但我承认这可能不适用于所有企业)。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

各种人工智能类型的预期相对贡献(Rajesh Iyer 的原始插图)

在这篇文章的剩余部分,我们将关注战略人工智能。使能技术很容易获得,短期的前期投资足以激活战略性人工智能计划。这一举措将帮助 GMs 研究各种战略方案和相关的财务影响,同时决定的最佳战略策略**,以推动利润增长并主导其市场。**

D.与战略机器智能竞争

在我最近的文章机器智能和企业中,我写了关于销售关于 ML 驱动的洞察力的价值的 GMs 的挑战。我提到了这个问题的解决方案,它基于将定制的 ML 模型捆绑到一个统一且有说服力的业务(“所有 ML 之母”)视图中。我提议建立一个“通用工作台”,作为一个平台,提供这样一个统一的视角来分析和选择制胜策略。

在这个 GM 工作台中,所有模型在事务级别同时运行,结果汇总为投资组合视图收入利润**。此外,他们可以跟踪当前和各种提议的场景,以便于比较业务成果。我们现在回到我之前文章中的例子,使这里提出的想法更加具体。**

我之前提到过来自营销RFM 模型、来自定价LTM需求模型以及来自运营留存模型**。如果我们想一想,我们会看到每个模型都是由一些独特的变量驱动的,以及与其他模型共享的其他公共变量。**

例如,在金融服务领域中,年龄性别地点信用评分**、以及其他变量对于 RFMLTV需求保留模型是常见的。这很有用,因为它向我们展示了我们可以从一个地方为所有模型提供输入。在幕后,GM 工作台同时将变量的输入值适当地级联到每个模型。**

我们可以稍后深入研究这种方法的分析价值。首先,我们应该停下来,认识到 GM 工作台不太明显但意义深远的好处。这将为 GMs 节省寻找和说服所有者发布其数据和相关模型的工作,以便进行例行分析和洞察,从而为数据驱动的战略和路线修正提供信息。

从分析的角度来看,GM 工作台的输入界面最好被认为反映了特定产品的设计相关的** 定价。在这个隐喻下,可变输入“激活”特定的产品特征,并提供客户风险属性。这些数据与收入、成本和利润负载数据以及内部计算结合使用,以推动 LTV 和基于需求的定价。这种定价反过来在交易层面推动 RFM 和保留模型的输出。**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模型的可变输入(Rajesh Iyer 的原始插图)

默认情况下,将向 GMs 提供投资组合视图利润增长**,这是从交易级别上升到投资组合和/或部门级别的**ML 驱动结果的汇总。****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拟议战略和行动的效果(Rajesh Iyer 原创插图)

"全球机制工作台"之所以得名,是因为全球机制可以利用它来尝试和比较各种可能的战略和政策情景的财务和非财务影响。更具体地说,工作台允许总经理轻松地对其职权范围内的投资组合执行“What-if模拟优化分析。

我们希望 GMs 创建情景,研究改变当前客户组合、细分市场特定增长焦点等的影响。,以达成将实施的“当前正确的”策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在有效边界上选择一个点(Rajesh Iyer 原创插图)

这些类型的练习允许总经理做出正确的选择和策略,以反映他们公司平衡利润与增长的哲学。例如,上图显示总经理优先考虑投资组合的增长而不是盈利。

我的团队在实现上述类型的 GM 工作台的愿景方面已经取得了很大的进步,但是我们并不孤单。我要感谢来自 EarnixDataRobot 的金融服务领域和工程专家,前者是一家成熟的优化平台销售商,后者是一家受欢迎的汽车 ML 平台销售商,他们为制定通用工作台概念提供了大量帮助。

在我们的工作中,我们依靠 DataRobot 的 ML 模型构建能力,并利用 Earnix 在一个平台上将各种模型联系在一起,使用我团队的专业知识为金融服务公司制定实施蓝图和 GSI 服务产品。

E.结论

我相信是时候认真投资建立像 GM Workbench 这样的战略人工智能解决方案了。我们与 EarnixDataRobot 的合作表明,随着时间的推移,我们可以构建 GM 工作台并根据个人客户的需求对其进行定制,以便他们可以利用它来主导其市场竞争。

F. Nota Bene

我想以明确阐述这篇文章的动机来结束这篇文章。我对推动人工智能工作感兴趣,而不是专注于任何一种类型。具体来说,我正在寻找方法,说服企业赞助严肃的人工智能投资,这些投资有可能带来巨大的企业价值。

如果承诺的价值,然后一些,可以交付,我们可以期待看到公司充满信心地深化他们在所有类型的人工智能的参与和投资。

使用服务主体和秘密范围在 Azure 数据块中挂载和访问 ADLS Gen2

原文:https://towardsdatascience.com/mounting-accessing-adls-gen2-in-azure-databricks-using-service-principal-and-secret-scopes-96e5c3d6008b?source=collection_archive---------0-----------------------

关于使用 Azure 密钥库支持的秘密范围和服务主体从 Python 中的数据块访问 Azure 数据湖存储 Gen2 的指南。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·温克勒在 Unsplash 上的照片

Azure 数据湖存储和 Azure 数据块无疑是 Azure 基于云的数据分析系统的支柱。Azure 数据湖存储提供了可扩展且经济高效的存储,而 Azure Databricks 提供了在该存储上构建分析的方法。

分析过程从将存储装载到 Databricks 分布式文件系统(DBFS)开始。有几种方法可以将 Azure 数据湖存储 Gen2 挂载到 Databricks。也许最安全的方法之一是将身份和访问管理任务委托给 Azure AD。

本文着眼于如何将 Azure 数据湖存储挂载到由服务主体和 OAuth 2.0 使用 Azure Key Vault 支持的秘密范围认证的数据块。

警告: Microsoft Azure 是一项付费服务,遵循本文可能会导致您或您的组织承担财务责任。

在撰写本文时,Azure Key Vault 支持的 Secret Scopes 处于“公开预览”状态建议不要在生产或关键系统中使用任何“预览”功能。

在继续阅读本文之前,请阅读我们的使用条款:https://dhyanintech . medium . com/disclaimer-disclosure-disclosure-terms-of-use-fb3 BF BD 1e 0e 5

先决条件

  1. 有效的 Microsoft Azure 订阅
  2. Azure 数据湖存储第二代客户
  3. Azure Databricks 工作区(高级定价层)
  4. 蓝色钥匙保险库

如果您还没有设置先决条件,请参考我们之前的文章开始:

[## 使用 Azure 将 CSV 文件转换为 Power BI 视觉效果的权威指南

使用 Microsoft Azure 产品将新冠肺炎数据转化为惊人的 Power BI 视觉效果的分步指南。

medium.com](https://medium.com/@dhyanintech/a-definitive-guide-to-turn-csv-files-into-power-bi-visuals-using-azure-4483cf406eab)

要访问由 Azure AD 租户保护的资源(例如,存储帐户),安全主体必须代表需要访问的实体。安全主体为 Azure AD 租户中的用户或应用程序定义访问策略和权限。当应用被允许访问租户中的资源时(例如,在注册时),服务主体对象被自动创建。

关于服务原则的进一步阅读:

[## Azure AD 中的应用和服务原则—微软身份平台

本文描述了 Azure Active Directory 中的应用程序注册、应用程序对象和服务主体…

docs.microsoft.com](https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals)

让我们首先注册一个 Azure AD 应用程序来创建一个服务主体,并将我们的应用程序身份验证密钥存储在 Azure Key Vault 实例中。

注册 Azure 广告应用程序

在 Azure 门户主页上找到并选择 Azure Active Directory 。选择应用注册,点击 +新注册

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure 活动目录:注册一个新的应用程序(图片由作者提供)

注册应用页面,输入名称ADL access,表示应用的用途,点击注册

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure 活动目录:命名和注册应用程序(图片由作者提供)

ADL access屏幕中,将应用(客户端)ID目录(租户)ID 复制到记事本中。应用 ID 是指我们刚刚注册的 app(即 ADL access),我们的 app ADLSAccess 注册到的 Azure AD 租户是目录 ID。

接下来,我们需要生成一个认证密钥(也称为应用程序密码或客户端密码或应用程序密码)来认证 ADLSAccess 应用程序。点击证书和密码,然后点击 +新客户端密码。在上添加一个客户端秘密刀片,输入描述,一年期满,完成后点击添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Active Directory:创建客户端机密(图片由作者提供)

当您点击添加时,将出现客户端密码(认证密钥),如下图所示。您只有一次机会将这个键值复制到记事本中。如果您执行另一个操作或离开此刀片,您将无法取回它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure 活动目录:客户端机密(图片由作者提供)

授予服务主体对 ADLS 帐户的访问权限

接下来,我们需要为我们的服务主体分配一个访问角色(回想一下,服务主体是在注册应用程序时自动创建的),以访问我们的存储帐户中的数据。转到 Azure 门户主页,打开您的存储帐户所在的资源组。点击访问控制(IAM) ,在访问控制(IAM) 页面,选择 +添加,点击添加角色分配。在添加角色分配刀片上,将存储 Blob 数据贡献者角色分配给我们的服务主体(即 ADLSAccess),如下所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资源组:将角色分配给服务主体(按作者排序的图像)

将应用程序机密添加到 Azure 密钥库

转到 Azure 门户主页并打开您的密钥库。点击秘密添加新的秘密;选择 +生成/导入。在上创造一个秘密刃;给定一个名称,输入客户端机密(即,我们在上一步中复制的 ADLS 访问密钥)作为内容类型,以便于以后阅读和识别机密。重复前面复制的应用程序(客户机)ID目录(租户)ID 的创建过程。你的金库现在应该有三个秘密了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Key Vault:添加新秘密(图片由作者提供)

选择属性,将金库 URI资源 ID 复制到记事本中;下一步我们将需要它们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure 密钥库:属性(图片由作者提供)

在 Azure Databricks 中创建 Azure 密钥库支持的机密范围

如果你已经阅读了我们的另一篇关于为 Azure SQL Server 凭证创建秘密范围的文章,只要你的密钥库和数据块实例保持不变,你就不必执行这个步骤。

转到https://<DATABRICKS-INSTANCE>#secrets/createScope,用您实际的数据块实例 URL 替换<数据块实例>。创建一个秘密范围,如下所示。

此 URL 区分大小写。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Databricks:创建一个秘密范围(图片由作者提供)

使用秘密范围将 ADLS 安装到数据块

最后,是时候将我们的存储帐户安装到我们的 Databricks 集群上了。回到您的 Databricks 集群,打开我们之前创建的笔记本(或者任何笔记本,如果您没有遵循我们的整个系列)。

我们将定义一些变量来生成我们的连接字符串,并使用 Databricks 实用程序获取秘密。您可以将下面的代码复制粘贴到您的笔记本上,或者自己键入。我们在这个笔记本上使用 Python。使用单元格右上角给出的控件运行代码。不要忘记用你的存储细节和秘密名称替换变量赋值

关于数据块工具(dbutils)和访问机密的进一步阅读:

[## 数据块工具

Databricks 实用程序(DBUtils)使执行强大的任务组合变得容易。您可以使用这些实用程序来…

docs.databricks.com](https://docs.databricks.com/dev-tools/databricks-utils.html#secrets-utilities) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Databricks:在 Python 中安装 ADLS Gen2(图片由作者提供)

如何高效使用笔记本的进一步阅读:

[## 使用笔记本

笔记本是可运行单元(命令)的集合。当您使用笔记本电脑时,您主要是在开发和…

docs.databricks.com](https://docs.databricks.com/notebooks/notebooks-use.html)

我们可以通过在单元格的开头指定 language magic 命令来覆盖笔记本的默认语言。支持的魔法命令有%python%r%scala%sql。笔记本也支持一些额外的魔法命令,如%fs%sh%md。我们可以使用%fs ls来列出我们挂载的存储的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Databricks:魔法命令(图片由作者提供)

当您不再需要存储时,不要忘记卸载它。

# Unmount only if directory is mounted
if any(mount.mountPoint == mountPoint for mount in dbutils.fs.mounts()):
  dbutils.fs.unmount(mountPoint)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Azure Databricks:卸载 Python 中的 ADLS Gen2(图片由作者提供)

恭喜你!您已经成功地将您的存储帐户安装到 Databricks,而没有泄露和存储您的应用程序机密和访问密钥。

结论

我们看了如何注册一个新的 Azure AD 应用程序来创建一个服务主体,为服务主体分配访问角色,并将我们的秘密存储到 Azure Key Vault。我们在 Azure Dataricks 中创建了一个 Azure Key Vault 支持的 Secret 范围,并在 Dataricks 中安全地挂载和列出了存储在我们的 ADLS Gen2 帐户中的文件。

后续步骤

如果你想知道我们是如何在存储中获得这些 CSV 文件的,请阅读我们的另一篇文章,建立一个创新的 Azure 数据工厂管道,通过 HTTP 从 GitHub 存储库中复制文件。

[## 使用 Azure Data Factory 基于 HTTP 上的 URL 模式增量复制文件

一个创新的 Azure 数据工厂管道,通过 HTTP 从第三方网站增量复制多个文件…

medium.com](https://medium.com/@dhyanintech/using-azure-data-factory-to-incrementally-copy-files-based-on-url-pattern-over-http-569476b625fc)

我们还有另一篇关于连接和访问来自 Datarbricks 的 Azure Synapse 分析数据仓库的激动人心的文章。看一看:

[## 在 Azure Databricks 中连接和访问 Azure Synapse Analytics 的凭据安全方式

关于如何在 PySpark 中使用秘密作用域设置 SQL Server 防火墙和从数据块连接的指南

medium.com](https://medium.com/@dhyanintech/a-credential-safe-way-to-connect-and-access-azure-synapse-analytics-in-azure-databricks-1b008839590a)

喜欢这个帖子?与 Dhyan 联系

让我们做朋友吧!你可以在 LinkedIn 上找到我或者在 Medium加入我。

安装 SSH 连接,这样您就可以像处理本地文件一样处理远程文件。

原文:https://towardsdatascience.com/mounting-an-ssh-connection-so-you-can-treat-its-files-as-if-they-were-local-8c3ed0acbb49?source=collection_archive---------42-----------------------

您想在本地编辑远程文件吗?尝试这种简单、安全的方法,用 SSHFS 挂载您的远程驱动器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这可能是你。只要打破你所有的灯泡,拿出连帽衫。凯文·霍尔瓦特在 Unsplash 上的照片

场景:你在 GPU 服务器上有 Pytorch 或 Tensorflow 机器学习指令,或者你的 Raspberry Pi 上有连接到 GPIO 引脚的硬件项目,或者你的安全气隙网络上有远程 docker 容器,你真的想深入了解一个高级 IDE。

在某些情况下,您可以运行一个远程开发环境,但是如果您连接到一个轻量级系统,或者您没有完全访问权限,您可能会发现自己面临着使用远程系统命令行上可用的东西——通常是 nanovim 。很好,如果你想快速进出的话,但是他们在用户体验方面并不是很好。

SSHFS—安全外壳文件系统

随之而来的是 SSHFS 。发音就像忍者明星飞过你的头时发出的声音(或者如果发音让你觉得奇怪,你可以大声说出这些字母)。SSHFS 是一种安全地挂载远程文件夹的方式,就像它是本地机器上的一个文件夹一样,而且非常简单。

那是什么意思?

这意味着你可以像在本地机器上一样浏览和操作你挂载的远程文件!

这意味着您可以避免来回传输文件,推和拉提交,在小而笨重的命令行编辑器中编辑,这是安全的。还有,我说过容易吗?

macOS:

在您的本地工作站上,从 FUSE 站点或用自制软件安装 FUSE 和 SSHFS:

brew cask install osxfuse
brew install sshfs

安装完成后,确保在您的远程系统上启用了 ssh,并使用您的终端连接到它。

这里有一个例子:

  1. 假设您有一台本地地址为 192.168.68.55 的远程机器,您连接到端口9876。你的用户名是ubuntu,你的文件存储在~/Documents/MyDir/
  2. 在本地工作站上创建一个 sshfs 将挂载到的文件夹,或者一个挂载点。例如,您可以在您的 local: ~/Documents/projects/remote上创建这个。

3.键入以下内容:

ssh ubuntu@192.168.68.55:/home/ubuntu/Documents/MyDir ~/Documents/projects/remote -p 9876

以下是基本规则:

ssh <user>@<address>:</remote/dir/> </local/mountdir> <options>

如果工作正常,系统会提示您输入密码(或者您可以使用键设置无密码 SSH 登录)。当您现在导航到您的项目文件夹时,您将看到一个挂载的驱动器,可以访问您的本地文件系统。很简单,柠檬榨汁机。

卸载

要卸载本地驱动器上的文件夹,请使用:

umount -f /local/mountpoint

Linux 操作系统

运行和在 macOS 上是一样的,只是安装有点不同。另请参见下面的卸载。

Ubuntu/Debian

sudo apt update
sudo apt install sshfs

红帽,CentOS

sudo yum install sshfs

卸载

fusermount -u /local/mountpoint

Windows 操作系统

有几种适用于 windows 的解决方案:

它们都有稍微不同的方法,所以我建议遵循它们文档中给出的说明,但是基本上,您将使用 Windows Explorer 来映射远程 SSH 机器上的网络驱动器。

利润!

你有它!这种方法不需要在你连接的机器上做任何繁重的工作,而且它真的让你选择的机器上的事情变得更容易。如果你想多走一英里(我知道你想),那么看看如何自动安装你的驱动器,让它一直在那里!

快乐嘘!

基于 MovieLens 的电影推荐系统

原文:https://towardsdatascience.com/movie-recommendation-system-based-on-movielens-ef0df580cd0e?source=collection_archive---------8-----------------------

利用自然语言处理(NLP)和计算机视觉(CV)

今年夏天,我有幸与 ML 制作的合作,体验了一次有意义的数据科学孵化。我选择了令人敬畏的 MovieLens 数据集,并设法创建了一个电影推荐系统,该系统以某种方式模拟了一些最成功的推荐引擎产品,如抖音、YouTube 和网飞。

这篇文章将解释我是如何在这个项目的整个生命周期中工作的,并提供我对一些技术问题的解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 PixabayGerd Altmann

主意

乍一看数据集,总共有三个表:

  • movies.csv :这是包含电影所有信息的表格,包括标题、标语、描述等。总共有 21 个功能/专栏,所以我们候选人可以只关注其中的一些,或者尝试利用所有的功能/专栏。
  • 收视率 _ 小。csv:记录所有用户评分行为的表格,包括他们的评分和他们发布评分时的时间戳。
  • links.csv :记录每部电影在 IMDB 和 TMDB 两个电影数据库中唯一 ID 的表格。

有两种常见的推荐过滤技术:协同过滤和内容过滤。协同过滤要求模型学习用户之间的联系/相似性,以便它可以根据用户以前的选择、偏好或品味生成最佳推荐选项。内容过滤需要用户和项目的特征,这样系统就可以根据用户和项目的共同属性来确定推荐。

现在,我将一步一步地尝试这两种方法。

协同过滤

协同过滤只需要我记录用户以前的行为,比如说,他们过去有多喜欢一部电影。幸运的是,我们已经获得了这类信息,因为表 ratings_small.csv 中的数据准确地反映了这个*。为了实现这一技术,我应用了奇妙的 Python 库 Surprise 。它提供了一套推荐系统开发中常用的内置算法。我选择了 5 种方法来比较它们的准确性,以 RMSE 作为衡量标准,结果如下:*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推荐系统算法的准确性(图片由作者提供)

SVD 优于任何其他同类产品,以下是针对每个用户的最终推荐(当然,配置了 SVD)列表片段,如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

协同过滤最明显的优点是易于实现。它不需要关于用户和项目的太详细的信息,理想情况下,它可以用 5 行代码实现。

内容过滤

尽管协同过滤技术有其突出的优点,但它的另一面也很明显:它不能解决“冷启动”问题。这个问题指的是这样一种情况,即一个新的商品或一个新的用户被添加到系统中,而系统无法向消费者推销该商品或向用户建议任何可用的选项。这是因为系统没有跟踪用户和项目的属性。除非用户开始对新项目进行评级,否则它不会被推广;同样,在用户开始评价之前,系统也不知道该推荐什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

想象一下,如果乔安娜不是一个女人,系统推荐一件比基尼,仅仅是因为 Funmi 也买了一件带比基尼的人字拖……这也是内容过滤可以解决的一个问题。(图片来源:链接)

内容过滤是解决这个问题的方法。当提供用户/项目简档时,它使系统能够理解用户的偏好。例如,如果用户的播放列表包含正义联盟复仇者联盟、水行侠、闪灵,那么他/她很可能更喜欢动作和恐怖类型。如果使用协同过滤,该用户将被推荐一些喜剧,因为其他观看正义联盟复仇者联盟、水行侠、闪灵的观众观看了喜剧。如果某个用户根本不喜欢喜剧,这有时是没有意义的。但是通过内容过滤,可以避免这样的问题,因为系统已经确认了该用户的偏好是什么。

为了实现一个内容过滤推荐系统,我利用 TFIDF 来反映每种类型在任何电影中的重要性(在这个阶段我只考虑类型)。然后,我计算了重要性权重和用户对不同流派的偏好(在用户资料中给出)的乘积。基于和积,我们可以简单地对电影进行排序,并向用户推荐前 N 名候选人。

我是新来的怎么办?

如前面的代码片段所示,我根据现有用户的历史评分记录创建了用户/电影档案。然而,它还没有完全解决冷启动问题,因为系统仍然不知道对新用户或新电影做什么。我将在本文的剩余部分告诉你我如何从电影海报中提取类型信息,现在我将展示系统应该如何响应新用户。

我假设新用户有两种心态:他们要么明白自己想要什么类型的电影,要么什么都不懂。对于第一种类型的客户,我允许他们按照自己的意愿选择任何流派,并简单地让系统根据他们自己提供的偏好返回。

对于那些还不知道该做什么的人,我实现了 Tobias dorsch、Andreas Lommatzsch 和 Christian Rakow 的部分工作。我让系统在新用户没有任何偏好请求的情况下,尽快抓取最受欢迎的专注于电影的 twitter 账户。然后,我将最常提到的命名实体与电影进行了匹配,这些实体是由 spaCy 识别的。匹配的电影被认为是最可能受欢迎的,因为它们与当前时间的人/电影非常相似。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Tobias Dö rsch、Andreas Lommatzsch 和 Christian Rakow 基于事件检测的热门视频点播推荐(来源:http://dl . IC dst . org/pdf/files/1 CD 028 f 7a 702 b 291 a 00984 c 192 f 687 db . pdf)

如何发布新电影?

一个成熟的电影流媒体平台会不断推出新电影。我想模拟这种行为,我的想法是,无论何时有新电影开始播放,他们都可以在内容过滤推荐系统中获得推荐,即使他们的制作公司不提供他们的类型信息。我开发了一个应用 CV 自动生成流派的方法,关于它的细节,请访问这篇文章

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

类型预测示例(作者图片)

部署

我总结了我在前面章节中研究的内容,并设法使用 Streamlit 开发了一个 web 应用程序。在https://recommendation-sys.herokuapp.com/尽情享受吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推荐系统截图(图片作者提供)

结论

这是我第一次模拟一些最先进的推荐引擎。我利用了我在 NLP 和 CV 方面的知识,尤其是内容/协同过滤推荐和多标签分类。

我应该承认,这个项目还有很大的改进空间,以下是我未来的一些关注点:

  1. 利用给定数据集的更多信息。你可能还记得我曾经提到过在表 movies.csv 中有 21 列。但是我只是用流派来做一个简单的演示。有了更多的信息输入,相信推荐会更加个性化和有针对性。
  2. 使用更高级的推荐技术。很多一些大牌开发的推荐引擎越来越精良,背后的逻辑也越来越深入。基于模型的过滤、混合过滤是最近出现的一些技术。
  3. 消除“过滤气泡”。用户可能只能观看系统推荐的电影,而推荐是基于他/她以前的观看历史。在这种情况下,不符合他们偏好的其他电影对用户来说是不可用的,这使得用户看起来像被困在“气泡”中。尽管如此,一些用户仍然欢迎其他类型的电影,因此推荐系统应该在推荐相似电影和其他电影之间找到一个平衡点。
  4. 根据近期事件推荐电影。这听起来很像我对新用户所做的,当他们不提供他们的偏好时。不同的是,我所做的只是向他们推荐最近热门的电影(演员、电影制作人等)。)涉及,而我们可以让推荐系统更智能,这意味着理解正在发生的事情,即使它与电影无关,并推荐相关的电影。这将是一个有趣的发现,考虑到数百万人,如果不是数十亿人,这些天被新冠肺炎困在家里,他们可能愿意在电影中体验人类如何最终战胜病毒攻击。

如果您对我的项目感兴趣并愿意为此做出贡献,请随时访问此处:

[## MemphisMeng/精彩推荐系统

精彩推荐系统是用 ML 数据科学孵化器 2020 夏季项目做出来的。这是一个推荐…

github.com](https://github.com/MemphisMeng/Brilliant-Recommendation-System)

基于知识图和 Neo4j 的电影推荐

原文:https://towardsdatascience.com/movie-recommendations-powered-by-knowledge-graphs-and-neo4j-33603a212ad0?source=collection_archive---------7-----------------------

直接从数据库中快速获得高质量的推荐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Lissandrini 等人的插图。艾尔

当你游览网飞时,你会看到几个可供你观看的电影列表。一些新版本,一些受其他用户欢迎,最有趣的是,一些为你挑选的。网飞使用一个强大的推荐系统来生成这份名单。根据你所观看和评价的内容,它会从类型、情节、演员等方面建立你的品味档案,并使用这个档案来推荐符合你品味的电影

推荐系统或推荐器被大量平台使用,包括亚马逊、网飞、脸书和许多其他电子商务和服务提供平台。他们的目的很简单:推荐特定用户最有可能购买/观看/成为朋友的物品/电影/人物。

在本文中,我们将介绍如何仅使用 Neo4j 来构建有效的推荐系统。

虽然许多推荐系统依赖于几个相互交互的子系统(例如,机器学习集群训练和从中央数据库提取数据),但我们将通过利用知识图的表达能力,实现一个直接在数据库本身上运行的推荐器,并且非常高效。

我们还展示了我们如何使用这项技术来构建 MindReader ,这是一个使用图形技术的推荐系统(将在本文后面解释),允许用户协作构建一个数据集,这不同于个性化推荐研究领域中使用的任何其他数据集。

推荐系统——概述

如果你是一个狂热的恐怖电影观众,网飞会发现这一点,并向你推荐更多的恐怖电影,而不是,例如,喜剧表演和儿童电影。不管一个人的业务性质如何,这都是一个期望的特征。当然,问题在于如何以简单、高效和有效的方式推断用户偏好。

一般来说,我们谈论三种实现方式:通过协作基于内容的过滤,或者两者的组合(混合)。协同过滤推荐器将使用与你相似的用户的交互来确定你想要什么。

想象一下两个假设的用户,迈克和德鲁,他们都是科幻电影的粉丝,都喜欢星球大战。迈克也喜欢星际,但德鲁没看过。协同过滤推荐器会向德鲁推荐《星际穿越》,因为和德鲁有相同爱好的迈克也喜欢《星际穿越》。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

协作过滤可以是一种有效的策略,因为两个用户喜欢和不喜欢某组项目的事实可以有效地编码一些相当复杂的偏好,而我们不必担心那些偏好实际上是什么。

另一方面,基于内容的过滤推荐器将查看两部电影的内容,并确定内容的相似性是否值得推荐。也就是说,相似的商品会吸引相似偏好的用户。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

这也是一种有效的策略,并且比协同过滤更透明,因为我们通过更有形的属性如类型、演员等来理解相似性。注意,在我们的例子中,即使没有人给《星际穿越》评分,我们仍然可以推断出用户的偏好。在协同过滤中,这是不可能的。的确,基于内容的过滤在 项冷启动 项设置中确实能大放异彩。这是指没有用户评级的新项目被引入系统。

我们将构建一个基于内容的推荐器,使用用户信息和知识图(由 Neo4j graph 数据库提供支持)向用户推荐产品。然而,首先值得讨论的是为什么知识图和图数据库首先是必要的。

为什么是图表?

直观地说,为了实现基于内容的推荐器,我们应该能够将所有电影建模为 SQL 数据库中带有一系列属性(例如,类型、演员和主题)的简单对象。事实上,通过适当的关系将几个表连接起来就可以很容易地实现这一点。

一旦我们开始考虑除了Movie→HasProperty→Property之外的连接,图数据库的力量就变得很明显。事实上,我们想要表达一个更加丰富的模型,在这个模型中,我们表示属性之间的相互关系——有效地允许属性拥有属性。这也允许我们明确地对每种关系的性质进行建模。在这种情况下,图形模型的表达变得更加清晰:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

以上是一个示例知识图 表示电影和书籍以及演员、流派和它们之间的复杂关系。在知识图中,我们不仅知道什么项目与什么属性相关,还知道它们如何相关,并且对什么可以相关以及如何相关没有任何限制。

有了这样的图形结构,我们突然有了很多新的方式来描述我们想要推荐的商品。当我们比较两个项目时,这转化为关于给定用户可能欣赏什么以及为什么欣赏的更复杂的推理。例如,如果用户喜欢《云图》(电影),他们可能会喜欢《如果你能抓住我》,因为汤姆·汉克斯在这两部电影中都有出演。另一方面,他们可能在寻找不同于小说的东西。如果他们想买一本书,他们可能会喜欢“云图”(这本书),如果他们也喜欢“如果你能抓住我”,他们可能会喜欢“我是马拉拉”这本书,因为它也是一本传记,并获得了与云图书类似的奖项。

虽然用标准的 SQL 技术对此建模肯定是可能的,但由于结构复杂,这通常非常困难。相反,在图形数据库中,对这种结构建模更简单。此外,像这样在 SQL 数据库中查询大量关系是而不是 非常高效的 操作。更重要的是,在图形数据库中,我们可以随意扩展数据库图形的结构,并表示一个不断发展的领域。

提出建议

为了向用户建议物品,通常部署非常复杂的机器学习模型。在这里,我们将通过使用 PageRank 算法的变体来为我们的用户提供推荐,从而充分利用图的力量。PageRank 算法是谷歌网页排名算法的核心。它用于根据网页的连接方式对互联网上最相关和最重要的网页进行排名。这意味着它被用来评估一个页面的重要性。

该算法模拟了一个随机的网上冲浪者,通过跟踪各个网页之间的链接来浏览网页。网页以节点的形式呈现,当一个页面包含到另一个页面的链接时,就创建了连接(边)。给定网站(即网络图中的节点)的 PageRank 是由用户在漫无目的地浏览网页时有多大可能最终到达特定网页来给出的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

在图中,最重要的网页是 Wikipedia,其次是 Neo4j 和 Dev.to,然后是 Google 和 Reddit,依此类推。

在 PageRank 模型中,我们假设随机上网者可以在任何时间传送到整个网络中的任何页面。这类似于冲浪者只是在浏览器中键入不同的 URL,而不是跟随页面上的链接。在一个名为个性化页面排名的变体中,我们将冲浪者可以传送的目标页面限制为一组特定的图节点(这被称为偏好集或个性化集,因为它们代表了特定用户最喜欢的页面)。例如,如果我们通过只允许冲浪者传送到中等来“个性化”页面排名,我们会得到以下排名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

请注意,随机冲浪者模型对图表建模的内容没有要求。最后,我们得到的是根据相关性和重要性对图中的节点进行排序,而不管这些节点代表什么。

所以,我们应该可以用我们的电影图像数据库做类似的事情,对吗?是啊!之前知识图谱的全球 PageRank 给了我们以下排名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

这将是我们用来向新访问的用户展示产品的排名,产生前三名(1)“我是马拉拉”,“2”“云图(电影)”,和(3)“如果你能抓住我”。因此,我们建议用户阅读“我是马拉拉”。

让我们想象一下,用户接受了我们的推荐,读到了“我是马拉拉”,并且乐在其中。这给了我们什么信息?此外,建议应该如何根据这些信息进行更改?如果没有什么变化,我们会建议用户接下来观看“云图”电影,但也许他们喜欢“我是马拉拉”的事实可以得到更好的利用。一个想法可以是简单地将页面排序个性化为“我是马拉拉”。这将通过等级向上推动与“我是马拉拉”密切相关的节点。额外的好处是,这允许我们将计算限制在局部受影响的节点。

个性化 PageRank 的另一个显著优势是,我们可以通过分配用户特定的关系权重来进一步个性化排名*。例如,如果用户喜欢在不同的电影中看到相同的演员,我们可以为该用户高度权衡StarsCo-stars关系。*

使用“我是马拉拉”作为唯一的源节点,在相同的图上运行个性化的 PageRank,我们得到以下排名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

有了这个小小的改变,我们现在会建议用户要么看《如果你能抓住我》,要么读《云图(书)》,而不是看《云图》。

为了进一步证明个性化 PageRank 适应用户偏好的能力,让我们假设我们有一个用户已经阅读并喜欢“云图”这本书。在这种情况下,我们只需将个性化集合更改为仅包含“云图(书籍)”的集合,并获得以下排名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者插图

因此,在我们这边没有进一步干预的情况下,我们现在有了这个用户的个性化前三名:(1)“我是马拉拉(书)”、(2)“云图”,(3)“如果你能抓住我”。

个性化页面排名已经被证明是个性化推荐背景下非常有效的排名工具( Shams et。al 2016 ),甚至被 Twitter 用来向用户提供他们可能想要关注的账户(古普塔等人)。al 2013 。不幸的是,在其最基本的形式中,PageRank 不是一个可伸缩的算法,因为它需要在一个潜在的巨大的图上进行多次遍历。幸运的是,盖洛等人。al 2020 提出了一种使用粒子滤波在知识图上非常有效地近似 PageRank 的方法。我们将在后面的实现中使用这种方法。

读心术

如前所述,我们已经使用这种推荐方法在 https://mindreader.tech 上构建了一个推荐系统。在幕后,MindReader 的用户正在合作建立一个数据集,它不同于任何其他数据集,甚至在推荐系统的最新研究中也使用过——你可以看看并在这里下载数据集。如果你今晚需要一些东西来看,想要并帮助研究人员提出更新更好的模型来推荐,试试看 MindReader 是否能猜出你的电影思维

在下文中,我们将介绍我们是如何构建 MindReader 的。但首先,一些背景:

MindReader 首先是一个用于协作构建数据集的推荐系统。让 MindReader 数据集从研究社区中其他成熟的数据集脱颖而出的是,我们不仅知道用户如何评价,例如,马特·达蒙主演的恐怖和动作电影,我们还特别知道用户对类型和演员的看法。研究人员第一次能够看到在偏好引发过程中做出的假设(例如,“德鲁喜欢科幻和喜剧,因为他喜欢《银河系漫游指南》”)是否实际成立,因为我们现在知道德鲁如何评价这些实体。此外,我们将能够尝试从更广泛的实体(如流派或主题)中正确推断用户的电影偏好——这在冷启动设置中非常有用,因为我们最初对用户一无所知。

该游戏首先从用户那里收集一些评级,范围从对电影、流派、演员和导演的评级:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MindReader 上的反馈页面

请注意,在 Neo4j 中,“相关电影”部分的实现非常简单——只需在图中显示恰好是电影的 1 跳邻居,我们将在后面展示。在传统的 SQL 数据库中设计和要求更复杂的查询不太直观。

在收集了足够多的评分后,我们会给出两个列表:我们认为用户会喜欢不喜欢。生成这些列表的路径出奇地短——只需运行个性化的 PageRank,将用户喜欢和不喜欢的节点分别作为源节点,按照指定的等级对节点进行排序,并选择前 10 名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

读心术上生成的建议

查询图形数据库

我们发现将 Neo4j 与我们选择的 API 语言 Python 一起使用非常简单。通过简单地安装 Neo4j 螺栓驱动程序并用数据库凭证初始化它,我们就可以查询数据库了。然而,在直接进入 Python 查询之前,我们大量使用了 Neo4j 浏览器,它允许我们查询图表并可视化结果。这使我们能够试验查询,并更好地理解我们的图形结构和 Cypher 查询语言。

例如,我们可以使用以下查询来可视化与电影《云图》相关的人(示例来自Cypher 基础知识指南):

MATCH (people: Person)-[relatedTo]-(movie: Movie {name: "Cloud
   Atlas"}) 
RETURN people, movie

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Neo4j 浏览器客户端中与云图相关的人

我们只使用两个 Cypher 查询:一个用于获取节点进行查询(例如,流派、演员和导演),另一个用于推荐电影。两者都使用 PageRank 分数,如前所述,我们使用粒子过滤,一个 Neo4j 插件,比默认实现更快地逼近(个性化)PageRank。

首先,我们将当前用户喜欢的节点的 URIs 存储在$uris中。这些组成了我们的个性化设置-随机冲浪运动员可以传送到的源节点。我们收集对应于这些 URIs 的节点,并将它们传递给particlefiltering算法:

MATCH (n) WHERE n.uri IN $uris WITH COLLECT(n) AS nLst
CALL particlefiltering(nLst, 0, 100) YIELD nodeId, score

这给了我们节点的标识符nodeId和它们的个性化页面排名分数score

当然,我们不希望返回用户已经看到的节点。一个简单的解决方法是在$seen变量中有一个用户看到的所有实体 URIs 的列表,我们用命令过滤掉它:

MATCH (n) WHERE id(n) = nodeId AND NOT n.uri IN $seen
WITH DISTINCT id(n) AS id, score, n.name AS name

原则上,我们可以返回这里的所有内容,但是我们注意到,如果没有相关信息,用户很难识别演员或理解主题。因此我们找到所有与实体相关的电影。在我们的图表中,只有有续集或前传的电影是相连的。因此,如果我们简单地使用MATCH关键字,我们将删除所有没有电影边缘的电影。为了解决这个问题,我们执行了一个OPTIONAL MATCH并使用collect()将相关电影限制为具有最高全球页面排名的 5 部电影。

OPTIONAL MATCH (r)<--(m: Movie) WHERE id(r) = id
WITH algo.asNode(id) AS r, m, score

ORDER BY m.pagerank DESC
WITH r, COLLECT(DISTINCT m)[..5] as movies, score

就是这样!我们现在可以返回,提取我们需要的信息:

RETURN r:Director AS director, r:Actor AS actor, 
       r.imdb AS imdb, r:Subject AS subject, 
       r:Movie AS movie, r:Company AS company, 
       r:Decade AS decade, r.uri AS uri, 
       r.name AS name, r:Genre AS genre,
       r:Person AS person, r:Category AS category, 
       r.image AS image, r.year AS year, 
       movies, score

因此,使用 Neo4j,我们能够找到相关节点并轻松提取高度相关的数据,而无需实施复杂的推荐系统。

如果我们要用更传统的 SQL 技术来做这件事,我们需要对表中的节点和边进行建模,为每个查询提取节点,包括几个连接,在一个单独的图形工具中构建一个图形,并从那里计算排名。然而,由于图形数据库的强大功能,这一切都直接发生在数据库上。

摘要

在本文中,我们已经描述了如何有效地利用知识图和 图数据库来生成 产品 推荐,而不考虑应用的领域。我们还展示了我们如何使用 Neo4j 构建 MindReader ,我们在此过程中的考虑以及我们选择的数据库管理系统如何为我们带来益处。

我们强烈鼓励读者思考如何用图形建模一个问题,从而提供新的强大工具来非常容易地解决复杂问题。Neo4j 允许我们非常容易地实现一个推荐系统,允许用户协作建立一个不同于任何其他的数据集。在我们的例子中,即使考虑到我们对 SQL 的高度熟悉,用传统的数据库技术实现相同的结果也要复杂得多,并且可能不会执行得那么好。我们现在分享这个新数据集,以推进个性化推荐方面的研究,这将开辟一系列新的研究途径。

如果你今晚需要一些东西看,你应该在我们的网站上试试 MindReader。这样做有助于推进研究,扩展个性化推荐研究社区中最激动人心的数据集。如果你是一名研究人员或数据科学家,完整的 MindReader 数据集可供任何感兴趣的人下载。

(合著 安德斯·兰巴莱 泰斯·詹达尔 马泰奥·利桑德里尼 T43【彼得·多洛格 卡佳软管【

电影推荐系统(二)

原文:https://towardsdatascience.com/movie-recommender-system-52e4651f3ae7?source=collection_archive---------14-----------------------

了解如何找到推荐给用户的最佳商品数量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Unsplash 上的乔治亚·瓦格姆拍摄

’ k '建议

当在推荐系统中推荐项目时,我们非常感兴趣的是仅向用户推荐前 K 个项目,并且发现使用了最佳的数量召回和精确度。

K 时的召回率和精确度

Precision: 尝试回答**“从字面上看,模型的肯定识别的比例是多少?”**

真阳性/(真阳性+假阳性)。

回忆:尝试回答“模型正确知道实际阳性的比例是多少?”

真阳性/(真阳性+假阴性)

在某些情况下,我们可能会意识到我们需要关注回忆或**精确度。**例如,在筛查一个人是否感染了某种疾病时,召回将是可选择的。

查全率和查准率是经典的评估指标,用于评估二进制指标,因此我们必须将我们的评级(从(1–5)转换为二进制问题,其中 0 表示与相关的,1 表示与无关的 相关的项目。

转换为二进制

为了进行转换,我们必须选择一个任意的****值**,根据该值,我们可以说上面的任何评级都被认为是相关的。有许多选择该值的方法,但现在,我们将选择 3.5 作为阈值,这意味着任何高于 3.5 的真实评级将被视为相关,低于 3.5 的将被视为不相关。**

相关和推荐的定义

****相关:真实等级> = 3.5

****无关:真实评级< 3.5

****推荐项目:预测评分> = 3.5

****不推荐项目:预测等级> = 3.5

在我们想要获得两者混合的情况下,我们可以使用 F1 分数,它基本上是精确度和召回率的调和平均值。

F1 得分= 2 (精度 召回)/(精度+召回)*

下面的函数计算精度和召回和 F1 分数,如上所述。

*#Calculate TP,FP,TN,FN at every threshold level (0.0 - 5.0)*final = []**for** threshold **in** np.arange(0, 5.5, 0.5):
  tp=0
  fn=0
  fp=0
  tn=0
  temp = [] **for** uid, _, true_r, est, _ **in** predictions:
    **if**(true_r>=threshold):
      **if**(est>=threshold):
        tp = tp+1
      **else**:
        fn = fn+1
    **else**:
      **if**(est>=threshold):
        fp = fp+1
      **else**:
        tn = tn+1    **if** tp == 0:
      precision = 0
      recall = 0
      f1 = 0
    **else**:
      precision = tp / (tp + fp)
      recall = tp / (tp + fn)
      f1 = 2 * (precision * recall) / (precision + recall)    temp = [threshold, tp,fp,tn ,fn, precision, recall, f1]
  final.append(temp)results = pd.DataFrame(final)
results.rename(columns={0:'threshold', 1:'tp', 2: 'fp', 3: 'tn', 4:'fn', 5: 'Precision', 6:'Recall', 7:'F1'}, inplace=**True**)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果表的屏幕截图

根据上述结果,阈值的最佳值为 2.5

决定‘K’

在推荐系统中,我们感兴趣的是向用户显示前 N 个项目,因此最好是计算前 N 个值的精确度和召回率,而不是计算所有项目。

下一步是找到最佳 K 值,为了找到它,我们必须首先计算阈值为 2.5 的所有 K 值(2–10)的精度和召回率。

下面是计算精度和召回@ K.** 的函数**

*'''Return precision and recall at k metrics for each user.'''* *# First map the predictions to each user.*
    user_est_true = defaultdict(list)
    **for** uid, _, true_r, est, _ **in** predictions:
        user_est_true[uid].append((est, true_r)) precisions = dict()
    recalls = dict()
    **for** uid, user_ratings **in** user_est_true.items(): *# Sort user ratings by estimated value*
        user_ratings.sort(key=**lambda** x: x[0], reverse=**True**) *# Number of relevant items*
        n_rel = sum((true_r >= threshold) **for** (_, true_r) **in** user_ratings) *# Number of recommended items in top k*
        n_rec_k = sum((est >= threshold) **for** (est, _) **in** user_ratings[:k]) *# Number of relevant and recommended items in top k*
        n_rel_and_rec_k = sum(((true_r >= threshold) **and** (est >= threshold))
                              **for** (est, true_r) **in** user_ratings[:k]) *# Precision@K: Proportion of recommended items that are relevant*
        precisions[uid] = n_rel_and_rec_k / n_rec_k **if** n_rec_k != 0 **else** 1 *# Recall@K: Proportion of relevant items that are recommended*
        recalls[uid] = n_rel_and_rec_k / n_rel **if** n_rel != 0 **else** 1 *#tp = n_rel_and_rec_k*
    *#fn =  n_rel - tp*
    *#fp = n_rec_k - tp*
    **return** precisions, recalls

现在,让我们调用上面定义的函数,并对所有用户进行平均。

results=[] **for** i **in** range(2, 11):  
   precisions, recalls = precision_recall_at_k(predictions, k=i, threshold=2.5)*# Precision and recall can then be averaged over all users* 
   prec = sum(prec **for** prec **in** precisions.values()) / len(precisions)rec = sum(rec **for** rec **in** recalls.values()) / len(recalls)           
   results.append({'K': i, 'Precision': prec, 'Recall': rec})         
   results

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们画出这个:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1

如图所示,精度在‘4’,之后显著下降,因此我们将 K 的值视为 4

瞧,完成了!!

是时候给用户推荐电影了

现在我们知道了要提供的最佳推荐数量,是时候向用户提供推荐了。为此,我们必须预测用户尚未观看的电影的收视率。

首先,我们将在电影镜头数据集上训练一个 SVD 算法。

*data = Dataset.load_builtin('ml-100k')*
trainset = data.build_full_trainset()   *#Build on entire data set*
algo = SVD(n_factors=factors, n_epochs=epochs, lr_all=lr_value, reg_all=reg_value)
algo.fit(trainset)

然后预测不在训练集中的所有对(u,I)的评级。

testset = trainset.build_anti_testset()*#Predicting the ratings for testset*
predictions = algo.test(testset)

现在让我们对所有评级进行排序

**def** get_all_predictions(predictions):

    *# First map the predictions to each user.*
    top_n = defaultdict(list)    
    **for** uid, iid, true_r, est, _ **in** predictions:
        top_n[uid].append((iid, est)) *# Then sort the predictions for each user*
    **for** uid, user_ratings **in** top_n.items():
        user_ratings.sort(key=**lambda** x: x[1], reverse=**True**) **return** top_nall_pred = get_all_predictions(predictions)

因为我们有所有预测的评级,所以我们将数据集子集化为每个用户的仅前 K 部电影(K = 4)。

n = 4
**for** uid, user_ratings **in** all_pred.items():
    user_ratings.sort(key=**lambda** x: x[1], reverse=**True**)
    all_pred[uid] = user_ratings[:n]tmp = pd.DataFrame.from_dict(all_pred)
tmp_transpose = tmp.transpose()

现在我们有了一个数据框,其中包含了推荐给每个用户的前 4 部电影。

让我们创建一个为给定用户返回推荐电影的函数:

**def** get_predictions(user_id):
    results = tmp_transpose.loc[user_id]
    **return** results

让我们尝试一个例子,并为用户 67 找到建议

user_id=67
results = get_predictions(user_id)
results

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对用户的建议 _id-67

上图显示了用户 67 的前“4”个推荐,“电影 id 预测评级”。但是我们只需要电影而不需要收视率,所以让我们从结果中提取电影 id,然后从电影表中获取电影细节

recommended_movie_ids=[]
**for** x **in** range(0, n):
    recommended_movie_ids.append(results[x][0])movies = pd.read_csv('data/movies.csv')
recommended_movies = movies[movies['movieId'].isin(recommended_movie_ids)]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

推荐电影 id 的电影详情

现在,我们可以将结果与用户历史进行比较,看看这些推荐有多相关。

以下是用户 67 评价最高的电影

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用户评分最高的电影

由于用户的历史告诉我们,用户大多喜欢剧情电影,而我们正在推荐所有的剧情电影,这意味着我们正在向用户推荐合适的电影。

看起来你很喜欢这篇文章!

  • 你刚刚学会了在 K 计算精度和召回,然后推荐 K 部电影,推荐给用户多少部电影。
  • 在这里你可以阅读如何使用 Surprise 库在显式数据上构建模型。
  • 完整的代码,你可以在这里找到 Jupyter 笔记本。

编码快乐!

如果你有任何想法或建议,请不吝赐教。你也可以通过 LinkedIn 联系我。

参考资料:

[1]https://medium . com/@ m _ n _ malaeb/recall-and-precision-at-k-for-recommender-systems-618483226 c54

[2]https://towards data science . com/beyond-accuracy-precision-and-recall-3da 06 bea 9 f6c

[3]https://developers . Google . com/machine-learning/crash-course/classification/precision-and-recall?hl=ru

https://surprise.readthedocs.io/en/stable/

电影推荐系统

原文:https://towardsdatascience.com/movie-recommender-system-a5dbfdb2585d?source=collection_archive---------21-----------------------

基于(1)基于记忆的协同过滤,(2)矩阵分解协同过滤和(3)基于神经的协同过滤的电影推荐系统的比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

互联网的发展给我们带来了大量的在线数据和信息。像推荐系统这样的工具允许我们过滤我们想要或需要的信息。推荐系统可以在许多环境中使用,其中之一是用于视频或音乐服务的播放列表生成器。

在这个项目中,我选择了基于 K-近邻(k-NN)、矩阵分解(MF)以及基于神经网络的方法来构建电影推荐系统。我选择研究的数据是由 GroupLens Research 收集的 MovieLens 数据集。这个数据集有 943 个用户对 1682 部电影给出的 100,000 个评价,每个用户至少评价了 20 部电影。等级是基于从 1 到 5 的范围。

评级构成了来自用户的显式响应,这将用于随后构建基于协作的过滤系统。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查尔斯·德鲁维奥在 Unsplash 上拍摄的照片

该项目分为三个阶段:

  1. 数据预处理
  2. 模型结构
  3. 结果分析和结论

基于 k-NN 和基于 MF 的协同过滤—数据预处理

对于基于 k-NN 和基于 MF 的模型,使用了来自 Surprise Python sci-kit 的内置数据集 ml-100k。惊奇是一个很好的选择,开始了解推荐系统。它适用于构建和分析处理显式评级数据的推荐系统。

基于 k-NN 的协同过滤——建模

数据分为 75%的训练测试样本和 25%的维持样本。GridSearchCV 执行 5 次以上,用于为预测算法寻找相似性度量配置(sim_options)的最佳集合。它使用准确性度量作为基础,通过交叉验证过程找到 sim_options 的各种组合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

在 k-NN 模型中,我选择使用余弦相似度作为相似性度量。这将计算所有用户对(或项目)之间的余弦相似性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

上图是基于协作的过滤(基于用户)的简单说明。

它显示了三个用户 Maria、Sally 和 Kim,以及他们对电影 A 和 b 的评级。k-NN 模型试图预测 Sally 对电影 C 的评级(Sally 尚未对电影 C 进行评级)。

然而,它首先需要找到一个与 Sally 相似的用户。从电影 A 和 B 的评级来看,基于余弦相似度,玛丽亚与莎莉的相似度大于金与莎莉的相似度。

然后,该模型将根据玛丽亚对电影 C 的评级来预测莎莉对电影 C 的评级。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者照片

上图是基于协作的过滤(基于项目)的简单说明。

它显示了用户 Maria 和 Kim 对三部电影 A、B 和 C 的评级。当 Sally 已经对电影 A 和 b 进行了分级时,k-NN 模型试图预测 Sally 对电影 C 的分级(尚未分级)

从玛丽亚和金对电影 A、B 和 C 的评级来看,基于余弦相似度,电影 A 与电影 C 的相似度大于电影 B 与电影 C 的相似度。

然后,该模型将根据 Sally 对电影 a 的评价来预测 Sally 对电影 C 的评价。

GridSearchCV 将根据均方根误差(RMSE)找出基于用户还是基于项目的结果精度最高。

这个模型使用的算法是 KNNWithMeans。这是一个基本的协同过滤算法,考虑了每个用户的平均评级。通过这种算法消除他们的偏见,个人用户偏好被考虑在内。

基于 GridSearch CV,RMSE 值为 0.9551。维持样本的 RMSE 值为 0.9402。MSE 和 MAE 值分别为 0.884 和 0.742。

基于 MF 的协同过滤——建模

矩阵分解根据潜在因素将用户项目矩阵压缩成低维表示。这些潜在因素提供了关于用户和项目的隐藏特征。用户与项目的交互被建模为他们潜在向量的乘积。

使用的基于 MF 的算法是奇异向量分解(SVD)。GridSearchCV 用于寻找随机梯度下降过程的迭代次数、学习速率和正则化项的最佳配置。

基于 GridSearch CV,RMSE 值为 0.9530。维持样本的 RMSE 值为 0.9430。MSE 和 MAE 值分别为 0.889 和 0.754。

基于神经的协同过滤—数据预处理

由用户、电影、收视率和时间戳组成的数据文件被读入 pandas 数据帧进行数据预处理。

需要枚举电影和用户来用于建模。创建包含数据中唯一用户和电影总数的变量,然后映射回电影 id 和用户 id。

找到数据中存在的最小和最大额定值。然后将评级标准化,以便于训练模型。

基于神经的协同过滤—建模

嵌入用于在数据中表示每个用户和每部电影。这些嵌入将具有由模型拟合的向量大小 n,以捕捉每个用户/电影的交互。

用户和电影都被嵌入到 50 维(n = 50)数组向量中,用于训练和测试数据。对 75%的数据进行训练,对 25%的数据进行测试。

为了捕捉用户-电影交互,计算用户向量和电影向量之间的点积,以获得预测的评级。

Adam 优化器用于最小化预测值和实际测试值之间的精度损失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从训练和验证损失图可以看出,基于神经网络的模型具有很好的拟合性。训练损失曲线已经下降到一个稳定点。验证(测试)损失曲线也下降到一个稳定点,与训练损失有一个小的差距。

来自基于神经的模型的 MSE 和 MAE 值是 0.075 和 0.224。

结果和结论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与基于记忆的 k-NN 模型和基于矩阵分解的 SVD 模型相比,基于神经的协同过滤模型显示出最高的准确度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的图像显示了用户 838 在过去评价很高的电影以及基于神经的模型推荐的电影。

这里有一个链接到我的 GitHub,在那里你可以找到我的代码和演示幻灯片。也可以通过 LinkedIn 联系我。

电影推荐系统:第一部分

原文:https://towardsdatascience.com/movie-recommender-system-part-1-7f126d2f90e2?source=collection_archive---------10-----------------------

了解如何使用惊喜库构建推荐系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查尔斯·德鲁维奥在 Unsplash 上拍摄的照片

简介:

所有的娱乐网站或网店都有几百万/几十亿的商品。对于客户来说,选择正确的产品变得非常困难。在这种情况下,推荐系统进入画面,并通过减少选项来帮助用户找到正确的项目。

什么是推荐系统?

它通过建议一个可能的项目列表来帮助用户选择正确的项目,因此它已经成为电子商务、电影和音乐呈现网站的一个不可或缺的部分,并且这个列表还在继续。它们正在成为近年来变得越来越重要的机器学习的最流行的应用之一。两种最受欢迎的方法是:

1- 基于内容的过滤

2- 协同过滤

在这篇文章中,我们将关注矩阵分解,这是一种协同过滤的方法。

矩阵分解

在协同过滤中,矩阵分解是解决稀疏数据问题的最先进的解决方案,尽管它是从 Netflix 奖挑战赛 开始广为人知的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自本网站

在协同过滤的情况下,矩阵分解算法通过用户-项目交互矩阵分解成两个低维度矩形矩阵的乘积来工作。一个矩阵可以被视为用户矩阵,其中行代表用户,列是潜在因素。另一个矩阵是项目矩阵,其中行是潜在因素,列代表项目。”——维基百科

我们将与电影分级数据集 MoiveLens 数据集合作,使用Surprise库“用于推荐系统的 Python scikit”开发一个推荐系统。我们开始吧!

数据

ratings = pd.read_csv('data/ratings.csv')ratings.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评分表的屏幕截图

为了从上面的 pandas 数据框加载数据集,我们将使用 load_from_df() 方法,我们还需要一个 Reader 对象,并且必须指定 rating_scale 参数。

数据框必须有三列,依次对应于用户 id、项目 id 和等级。

reader = Reader(rating_scale=(0.5, 5.0))data = Dataset.load_from_df(df[['userID', 'itemID', 'rating']], reader)

评级分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1

项目评级分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2

按用户的评分分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3

惊喜——型号选择

Surprise 是一个 Python scikit,用于构建和分析处理显式评级数据的推荐系统。由 Nicolas Hug 维护。

使用 pip(你需要 NumPy 和一个 C 编译器。Windows 用户可能更喜欢使用 conda):

!pip install numpy!pip install scikit-surprise#For Windows users
conda install -c conda-forge scikit-surprise

我们将使用作为我们预测的准确性度量。

我们将比较奇异值分解、NMF、正常预测值、KNN 基本值,并将使用具有最小 RMSE 值的一个。

在我们开始应用之前对算法有一些了解。

****1:正态预测器:它根据训练集的分布预测一个随机的评级,假设它是正态的。这是一个基本的算法,不需要做太多的工作,但对于比较精度仍然很有用。

2: SVD: 它是由西蒙·芬克在网飞奖期间推广的,是一种矩阵分解算法。如果不使用基线,它相当于 PMF。

3: NMF: 基于非负矩阵分解,类似于 SVD。

****4: KNN 基本:这是一种基本的协同过滤算法方法。

**benchmark = []# Iterate over all algorithms
for algorithm in [SVD(), NMF(), NormalPredictor(), KNNBasic()]:# Perform cross validation
results = cross_validate(algorithm, data, measures=['RMSE'], cv=3, verbose=False)# Get results & append algorithm name
tmp = pd.DataFrame.from_dict(results).mean(axis=0)tmp = tmp.append(pd.Series([str(algorithm).split(' ')[0].split('.')[-1]],index=['Algorithm']))benchmark.append(tmp)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果截图

由于奇异值分解具有最小的 RMSE 值,我们将调整奇异值分解的超参数。

使用 GridSearchCV 调整算法参数,找到算法的最佳参数。

SVD 的默认值为:

n _ factors—100 |n _ epochs—20 |lr _ all—0.005 |reg _ all—0.02

**param_grid = {'n_factors': [25, 30, 35, 40, 100], 'n_epochs': [15, 20, 25], 'lr_all': [0.001, 0.003, 0.005, 0.008],               'reg_all': [0.08, 0.1, 0.15, 0.02]}gs = GridSearchCV(SVD, param_grid, measures=['rmse', 'mae'], cv=3)
gs.fit(data) algo = gs.best_estimator['rmse']print(gs.best_score['rmse']) 
print(gs.best_params['rmse'])*#Assigning values* t = gs.best_params factors = t['rmse']['n_factors']
epochs = t['rmse']['n_epochs'] 
lr_value = t['rmse']['lr_all']
reg_value = t['rmse']['reg_all']**

输出 : 0.8682 {‘n_factors’: 35,’ n_epochs’: 25,’ lr_all’: 0.008,’ reg_all’: 0.08}

现在,我们有了一组正确的超参数值,让我们将数据分成训练:测试和拟合模型。

**trainset, testset = train_test_split(data, test_size=0.25)algo = SVD(n_factors=factors, n_epochs=epochs, lr_all=lr_value, reg_all=reg_value)predictions = algo.fit(trainset).test(testset)
accuracy.rmse(predictions)**

产量: RMSE: 0.8662

让我们来看看我们的预测是好是坏:

以下函数将创建一个包含以下列的 pandas 数据框:

UID: 用户标识

iid: 项目 id

****芮:用户给出的评分

****预计:由模型估计的评级

Iu: 用户评分的项目数

UI: 对此项目评分的用户数

err: abs 预测评级与实际评级之间的差异。

**def get_Iu(uid):"""
args: 
uid: the id of the userreturns:
the number of items rated by the user
"""try:
    return len(trainset.ur[trainset.to_inner_uid(uid)])
except ValueError: # user was not part of the trainset
    return 0def get_Ui(iid):"""
args:
iid: the raw id of the itemreturns:
the number of users that have rated the item.
"""try:
   return len(trainset.ir[trainset.to_inner_iid(iid)])
except ValueError:
   return 0df_predictions = pd.DataFrame(predictions, columns=['uid', 'iid', 'rui', 'est', 'details'])df_predictions['Iu'] = df_predictions.uid.apply(get_Iu)df_predictions['Ui'] = df_predictions.iid.apply(get_Ui)df_predictions['err'] = abs(df_predictions.est - df_predictions.rui)**

最佳预测:

**best_predictions = df_predictions.sort_values(by='err')[:10]**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最佳预测的屏幕截图

最坏的预测:

**worst_predictions = df_predictions.sort_values(by='err')[-10:]**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最差预测截图

最糟糕的预测看起来相当令人惊讶。让我们来看看“3996”项的更多细节,它的评分为 0.5,我们的 SVD 算法预测为 4.4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**df.loc[df['itemID'] == 3996]['rating'].describe()temp = df.loc[df['itemID'] == 3996]['rating']# Create trace
trace = go.Histogram(x = temp.values, name = 'Ratings', xbins = dict(start = 0, end = 5, size=.3))# Create layout
layout = go.Layout(title = 'Number of ratings item 3996 has received', xaxis = dict(title = 'Number of Ratings Per Item'), yaxis = dict(title = 'Count'), bargap = 0.2)# Create plot
fig = go.Figure(data=[trace], layout=layout)
iplot(fig)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4

事实证明,该商品获得的大多数评级都在“3 到 5”之间,只有 1% 的用户评级为“0.5”,有一个用户的评级低于 3。似乎对于每一个预测,用户都是某种离群值并且这个项目被评价的次数很少。

看起来你很喜欢这篇文章!

  • 您刚刚阅读了第 1 部分,其中介绍了如何使用 Surprise library 在显式数据上构建模型。
  • Part 2 将通过计算 K 处的精度和召回率,然后推荐 K 部电影,来涵盖我们应该推荐多少部电影。

完整的代码,你可以在这里找到 Jupyter 笔记本。

如果你有任何想法或建议,请不吝赐教。你也可以通过 LinkedIn 联系我

编码快乐!

参考资料:

[1]https://surprise.readthedocs.io/en/stable/

[2]https://towards data science . com/prototyping-a-recommender-system-step-by-step-part-2-alternating-least-square-als-matrix-4a 76 c 58714 a 1

[3]https://medium . com/@ connectwithgosh/simple-matrix-factorization-example-on-the-movie lens-dataset-using-py spark-9b 7 E3 f 567536

[4]https://en . Wikipedia . org/wiki/Matrix _ factorization _(recommender _ systems)

电影观众——通过让他们看电影来教授人工智能情感的案例

原文:https://towardsdatascience.com/moviegoer-the-case-for-teaching-emotion-to-ai-by-having-them-watch-movies-b2a7682edb1d?source=collection_archive---------55-----------------------

电影观众

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每一帧都有戏剧性(图片由作者提供)

在不久的将来,我们将被行为和人类一样的人工智能实体所包围。他们将能够用完美的犹豫、俚语和抑扬顿挫来保持对话,与人区别开来。他们将能够与我们互动,准确地知道我们的感受,分析我们的面部表情、肢体语言、用词、语调和眼球运动。这就是今天存在的所有技术,但它缺乏给他们这种个人联系的关键组件。幸运的是,我们已经找到了缺失的部分。我们将通过让机器人看电影来教会它们情感。

电影观众项目的目标是释放电影院内巨大的情感数据财富,以推进情感计算(情感人工智能)。然而,电影对于机器来说难以置信地难以理解。不管我们是否意识到,有许多电影制作惯例是我们认为理所当然的(例如,场景之间的时间推移,对话中的戏剧音乐,蒙太奇)。我们人类可以理解这些如何影响一部电影,但机器人能吗?

Moviegoer(以及任何数据科学项目)的第一步是将电影及其所有的艺术细微差别和潜规则转化为结构化数据。我已经建立了一个原型,它将电影分解成机器可以理解的组件。然后,它可以使用这些结构化数据来定位特定类型的场景,跟踪电影中角色的情绪,并识别重要的对话节奏。我稍后将进入更多细节,但让我们更多地讨论为什么电影是训练情感人工智能模型的理想选择。

作为情感资料的电影

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每一帧都有戏剧性(图片由作者提供)

所有机器学习和人工智能模型都是通过在大量数据上接受训练来“学习”的。给一个图像识别模型展示一百万张猫的图像,和一百万张非猫的图像,它将能够看到一张新的图像并告诉你这是不是一只猫。模型准确性在很大程度上依赖于拥有大量高质量的训练数据。为了训练一个情感人工智能模型,我们需要大量的情感数据。

电影是 20 世纪最伟大的艺术形式,它通过使用情节和人物来传达心理体验和情感转化。人物是建立起来的,那些人物出了事,那些人物就变了。电影在时间上是线性的:我们可以看到情绪前因(或行为刺激)的直接因果关系。例如,如果我们看到一个角色微笑,然后两秒钟后我们看到他们皱眉,我们想知道在那两秒钟里发生了什么让他们皱眉。我们看对话,看到有人对这个角色说,“我恨你”。我们刚刚了解到这个短语对情绪有负面影响。

但是我们可以更进一步:如果我们看几十万部电影,寻找我们遇到“我恨你”的所有时间,会怎么样?该模型可以分析面部表情的变化,以了解典型人类对这句话的反应。通常是负面的,但如果角色乐在其中呢?也许接下来我们会看到台词是如何传达的,说话者微笑着,大笑着,并保持着愉快的语调?我们刚刚了解了这个短语的表达方式,它并不总是在生气的时候说出来。然后我们可以看看周围的环境,也许这是为了回应一个老掉牙的爸爸笑话。情感模型知道这些都是对“我恨你”这句话的有效应用和反应。

人文拟态

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每一帧都有戏剧性(图片由作者提供)

如果这个论题看起来太专业了,让我们试试一个更抽象的例子。假设我们有一个拥有人类身体的机器人,它想要融入社会。要做到这一点,它可以看一堆电影,学习基本的人类习惯。走,不要跑。在交谈中进行眼神交流。别忘了眨眼。电影,即使没有情节或人物发展,也是人类习性的镜头。机器人只需要观察这些就能模仿人类的行为。

在某种程度上,这难道不是我们学会做人和参与社会的一部分吗?想想电影对你自己童年发展的影响。你有没有假装自己是电影中的某个角色,重复他们的俏皮话?想象自己从恐怖分子手中拯救世界,或者在雪花飘落时爱上一个完全陌生的人?当然,电影有助于我们对世界的理解(尽管可能没有我们希望的那么激动人心)。

四类理解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每一帧都有戏剧性(图片由作者提供)

电影是为人类制作的。它们不是设计来被机器观看的。也就是说,要“看电影”,计算机必须理解四种理解。

  • 结构——尽管观众完全认为电影是理所当然的,但电影是由称为“场景”的精细、独立的单元组成的,这些单元通常发生在固定的地点,涉及一个或多个角色。机器必须能够识别单个场景的开始和结束。这种类型的分析可以扩展到其他单元,从形成整部电影的三个行为,一直到单个镜头。
  • 角色——每个角色都有一张独特的脸和声音,可以在整部电影中追踪。这些有助于预测角色的人口统计数据(年龄、种族、性别)。为了理解角色的动机,口语对话必须归因于单个角色,以确定对他们来说什么是重要的。
  • 情节和事件——一部电影由许多不同的事件和事件组成。机器人必须理解特定事件的重要性(例如,恋爱对象得到了另一半,竞争对手得到了升职,女儿受伤)以及它们如何影响角色目标。
  • 风格特征——这些是艺术选择,如镜头长度或配色方案,用来引发观众的特定情绪。乐谱是最突出的例子——虽然我们知道这种音乐实际上并不存在于场景中,但它被分层放在它的上面,以使观众感到悲伤、兴奋、紧张或其他多种情绪。这使我想到…

董事决定

现在,你明白我在寻找非常细微的线索,知道它们对情绪反应很重要。但这些细节并不是偶然进入最终剪辑的。它们是导演最大化其电影情感反应的结果。虽然观众几乎看不到,但导演有意识地决定加入这些细节。

识别这些线索(并将它们编码到项目中)在很大程度上依赖于电影制作领域的知识。这些经验法则是从一个多世纪的风格和技术进步中发展而来的,需要对这门手艺有深刻的理解。

这篇文章中的所有电影画面都来自我制作和导演的一部完整长度的电影——10 点开始(一部 90 分钟的喜剧,你可以免费观看)。这个项目本质上是对电影进行逆向工程的一次尝试,了解电影是如何制作的对这项工作有很大帮助。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

现在我们已经回顾了这个项目背后的动机和方法,我们可以看看电影观众原型的运行情况。使用下面的链接浏览原型发布的三篇文章。

电影观众原型发布

  1. 通过让人工智能看电影来教授其情感的案例
  2. 原型在行动:将电影转化为情感数据
  3. 电影是情感和人类学知识完美数据集的 5 个理由

将人工智能移至现实世界

原文:https://towardsdatascience.com/moving-ai-to-the-real-world-e5f9d4d0f8e8?source=collection_archive---------35-----------------------

了解人工智能应用的整个生命周期,从构思到部署。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

罗伯特·北原惠子·桑塔纳在 Unsplash 上拍摄的照片

如果你符合这些条件之一,这篇文章就是为你准备的:

● **你是一名数据科学经理。**你想通过一些最佳实践来提高团队的工作效率。

你是数据科学家。你想知道下游发生了什么:你的模型如何变成产品。

● **你是一名软件架构师。**您正在设计或扩展一个支持数据科学用例的平台。

我最近完成了一个在线课程,我想你应该看看。叫做全栈深度学习。它涵盖了人工智能应用的整个生命周期,从构思到部署,但不包括理论或模型拟合。如果你是一名中级数据科学家,想要从你的领域“缩小范围”,本课程将向你展示香肠是如何制作的,从一个站点到下一个站点进行跟踪。

该课程最初是 2018 年基于旧金山的昂贵训练营,但现在免费提供。一些业界重量级人物也在其中,包括特斯拉的安德烈·卡尔帕希(Andrej Karpahy)和 fast.ai 的杰瑞米·霍华德。我拿它是因为我想把我自己的做法和名人的做法进行比较。作为背景介绍,我是咨询公司 Genpact 的合伙人。我帮助客户使用人工智能改造他们的流程,有时甚至改造他们的业务。在实践中,这意味着我创建一个概念证明(POC)来展示潜在价值,然后运行实施该解决方案的团队来获取该价值。

“全栈深度学习”超出了我的预期。它分为六个内容领域,以及人工智能名人的实践实验室和客座讲座。以下是我发现的最新颖、最有用的内容:

1.设置 ML 项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

斯文·米克在 Unsplash 上拍摄的照片

这是一个“执行”模块,讨论人工智能项目的规划、优先排序、人员配备和时间安排。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我在这里没有发现太多新的东西,但这是一个很好的、简明的执行概述。由于该课程侧重于深度学习,而不是传统的 ML,因此它提出了三个要点:

●深度学习(DL)与更传统的机器学习不同,“仍在研究中”。你不应该计划 100%的成功率

●如果你正从“经典”ML“毕业”到 DL,计划在标签上花费比你习惯的更多的时间和金钱…

●…但是不要扔掉你的剧本。在这两种情况下,你都在寻找廉价预测将产生巨大商业影响的环境

2.基础设施和工具

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由凯尔海德Unsplash 上拍摄

这是我发现最有帮助的模块。它为开发 AI/ML 应用程序建立了一个全面的框架,从实验室到生产。在每一层或每一类别中,它都涵盖了关键功能、它如何与其他层相适应以及主要的工具选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我强调一下:这门课的不同之处在于框架的全面程度。大多数公开的 AI/ML 内容都集中在模型开发上。有些资料只涉及数据管理或部署。商业供应商经常低估过程的复杂性并跳过一些步骤。如果你试图理解从阿尔法到欧米茄的 AI/ML 管道,这是我见过的最“全景”的图片。

这个课程是“自以为是的”——它有时称之为“类别赢家”,这在你下注时很有帮助。例如,它将 Kubernetes 称为“资源管理”类别的获胜者。我同意这些呼吁中的大部分,但不是全部。例如,在云提供商中,它认为 AWS 和 pans Azure 有“糟糕的用户体验”。虽然 AWS 很优秀,但我们的一些客户(正确地)选择了 Azure,尤其是那些已经拥有微软堆栈(Excel、MS SQL 等)的客户。)

在建立了总体框架之后,本模块将深入探讨发展和培训/评估。我发现三个领域特别有趣:

原型制作:我一直在寻找快速简单的方法为客户创建概念证明(POCs)。我需要制作一个视觉上有吸引力的,交互式的概念验证,易于通过公共或半公共的网址访问。我的理想解决方案是给我对模型的代码级控制,而不是让我编写大量的 HTML 或 Javascript 代码。一键式部署是一个优势。我一直在使用 Shiny,但想用 Python 做类似的事情。该课程向我介绍了 streamlit ,我将进一步研究它。同样有意思的还有破折号,奇怪的是没有盖。

实验管理是一个有趣的类别:它跟踪你的模型在各种配置选项(实验)下的表现。我为在 Kaggle 上的比赛编写了自己的版本。我不知道这是一个有名字的类别。我将检查本课程推荐的一些工具,包括权重和偏差

● **一体机:**在所有可用的一体机平台之间进行了一次很好的信息比较。AWS SageMaker 和 GCP AI 看起来是目前最好的选择。如果被追问,我敢打赌其他人将被云提供商收购或抄袭。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.数据管理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文斯·维拉斯在 Unsplash 上的照片

本模块讨论如何存储和管理与管道相关的数据集。我在这里没发现多少新东西。关于数据增强的材料很有趣,但主要应用于计算机视觉,这方面我做得不多。

4.机器学习团队

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Matteo VistoccoUnsplash 上拍摄

本模块讨论项目的人力资源部分:角色、团队结构、管理项目等。在我看来,这些内容属于上面的模块 1——建立 ML 项目。

对于招聘经理和应聘者来说,如何在这个领域找到工作有一些有趣的地方。对于 ML 项目中的典型角色也有一个很好的总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.培训和调试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

史蒂文·勒勒姆在 Unsplash 拍摄的照片

本模块讨论让模型在实验室中工作的过程。它应该是每个数据科学家的必读之作,类似于我用来赢得几场 Kaggle 竞赛的工作流。您还可以在许多其他地方获得此内容,但这是一个组织良好且简洁的演示文稿:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

围绕调试 DL 模型的讨论尤其精彩:让您的模型运行起来,对单个批处理进行过度拟合,并与已知结果进行比较。为了说明深度,下面是关于单批过量灌装的小节:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于过度拟合的更多提示在文章末尾。

6.测试和部署

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由路易斯·里德拍摄的照片

本模块讨论如何将您的模型从实验室带到现实世界。这是我上课时最初寻找的模块。我在这里找到了几个有用的金块:

测试 ML 系统与测试传统软件非常不同,因为它的行为是由数据和算法驱动的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您需要相应地调整您的测试套件。这门课程提供了一个很好的清单,摘自现在很有名的论文机器学习系统中隐藏的技术债务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本课程建议您检查培训时间和生产时间变量是否具有近似一致的分布(上面的监控测试 3)。这是一次关键的考验。它可以帮助您检测运行时错误,例如数据馈送中的空白。它还可以告诉您,可能是时候重新训练模型了,因为输入与您预期的不同。实现这一点的一个简单方法是逐个变量地绘制培训数据与生产时间数据。Domino 数据实验室工具可以做到这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个更好的方法是使用 对抗验证 :训练一个辅助模型(在生产中),该模型试图将一个观察分类为属于训练或生产数据。如果这个模型成功地区分了这两者,你就有了一个显著的分布转移。然后,您可以检查模型,找出推动这种转变的最重要的变量。

对 Kubernetes 和 Docker 以及基于 GPU 的模型服务的介绍很好地涵盖了部署。

客座演讲

该课程包括来自行业重量级人物的客座演讲。质量变化很大。有些演讲者是经过打磨和准备的,其他的……就没那么多了。我印象最深的是两位客人:

fast . ai的杰瑞米·霍华德 :这个演讲在提高模型性能方面提供了很多“你可以利用的消息”。

Fast.ai 库旨在使用更少的资源(人力和机器)来获得良好的结果。例如,花 25 美元在 3 小时内训练 ImageNet。这种对效率的关注非常符合我们客户的需求。

o Howard 问道“为什么人们试图让机器学习自动化?”我们的想法是一起工作可以得到更好的结果。他称之为“AugmentML”对“AutoML” Platform.ai 就是一个例子。它是一种标签产品,允许贴标机与神经网络进行交互式“对话”。每次迭代都会改进标签和模型。我从来没见过这样的,而且好像很管用,至少在他分享的视频上是这样的。

o Howard 分享了一些提高模型性能的技巧,尤其是对于计算机视觉任务。我发现测试时间增加 (TTA)特别令人大开眼界。我将不得不在我的下一个项目中尝试它。

特斯拉的安德烈·卡帕西:这个演讲也很有趣,尽管音频不是很好。卡帕西讨论了他的软件 2.0 概念,即我们将越来越多地使用梯度下降等优化方法来概率地解决问题,而不是设计固定的软件规则或启发式方法来解决问题。像许多其他人一样,我发现这个心理模型很有吸引力。

离别的思绪

课程并不完美。很多这种材料是在 2018 年创作的,开始显示出它的年龄。三个例子:

●Salesforce.com 大学的首席科学家 Richard Socher 主张建立一个统一的 NLP 模型,叫做 decaNLP。 BERT 已经接管了这个利基市场,而 GPT3 是一个令人兴奋的最新发展。

模型可解释性在过去的几年中发展迅速,但是没有得到很好的体现

●如上所述,微软 Azure 一直在大步前进,在我看来并没有得到公平的对待

尽管有这些小问题,我认为这门课程在一个紧凑和组织良好的框架中包含了很多价值。价格合适,我推荐给任何有兴趣了解 AI/ML 应用程序是如何构建的人。

最后,没有特别的原因,我希望你会喜欢这个激动人心的结论:

用 Python 进行移动平均线技术分析

原文:https://towardsdatascience.com/moving-average-technical-analysis-with-python-2e77633929cb?source=collection_archive---------18-----------------------

使用 Python 计算和绘制移动平均值

移动平均线通常用于技术分析,以预测未来的价格趋势。在本帖中,我们将使用 Python 构建一个脚本来执行移动平均线技术分析。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯·利维拉尼在 Unsplash 上的照片

什么是均线?

移动平均线是 n 最后收盘价的平均值。要选择的最后收盘价 n 的数量取决于进行分析的投资者或分析师。一种常见的方法是取 20 天,这基本上是一个月的交易天数。

天数越短,移动平均线对价格变化越敏感。也就是说,如果我们选择更大的天数,短期波动将不会反映在指标中。然而,通过选择大量的日期,我们可能会由于忽略短期波动而错过一些即将到来的价格变化。

下面我们可以看到简单移动平均线是如何计算的 (source Investopedia )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

移动平均公式

如何解读均线和交叉

金融分析师和投资者可以使用移动平均线来分析价格趋势,并预测未来的趋势变化。在价格上升趋势中,价格高于移动平均线。在价格下降趋势中,价格低于移动平均线。当收盘价穿过移动平均线时,投资者可以将其视为价格趋势的潜在变化。

我们可以在不同的时间段使用多个移动平均线。例如,我们可能有 20 天的短期移动平均线和 250 天的长期移动平均线。当短期移动平均线穿过长期移动平均线时,可能是价格趋势变化的标志:

  • 短期移动平均线穿越长期移动平均线上方时,这可能表明一个 买入 信号。这就是所谓的黄金交叉。
  • 相反,当**短期移动平均线低于长期移动平均线时,**可能是卖出的好时机。这就是所谓的死叉。

使用 Python 进行移动平均线技术分析

现在我们已经了解了如何计算和解释移动平均线,我们准备用 Python 构建这个技术分析工具。我们的目标是有一个脚本,我们将通过任何公司,我们想分析和我们的功能将:

  • 首先,从名为financialmodeliongprep免费 API 金融源下载股票价格信息
  • 第二,我们将解析来自 API 的结果,并将其转换为包含最近 1200 个交易日的日期和收盘价的 Pandas DataFrame
  • 第三,我们将计算 20 和 250 日移动平均线。
  • 最后,我们将通过 matplotlib 图中将收盘价和均线绘制在一起,来结束我们的均线技术分析

我们需要做的第一件事是导入所有需要的包,创建我们的 stockpriceanalysis 函数,并向 API 端点发出 http 请求,以获取过去几年的收盘价

我们就以苹果为例。请注意,API 端点 url 将我们想要获取数据的公司的股票代码作为参数。在我们的例子中,它将是我们传递给函数的参数(例如 Apple 的 aapl)。

然后,我们可以解析响应,只保留最近 1200 天的价格如果您想更详细地了解如何解析和处理 API 响应,请查看下面的文章。

现在,我们在 stockprices 变量中有一个字典,包含 1200 个数据点以及日期和收盘价。我们使用 pd 将其转换成熊猫数据帧。data frame . from _ dict()方法,并将日期设置为索引。

*import requests
import pandas as pd
import matplotlib.pyplot as plt

def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')*

如果现在我们打印我们的股票价格数据帧,我们得到下面的响应:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

苹果股票价格

很好,我们现在可以计算 20 天和 250 天的移动平均线了。我选择 20 天作为短期移动平均线,因为 20 个交易日或多或少代表一个月。而 250 个交易日大约代表一年。您可以随意更改分析的天数。

使用滚动方法并通过窗口(即天数)作为参数,使用 Pandas 很容易计算移动平均值:

*import requests
import pandas as pd
import matplotlib.pyplot as plt

def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')
    #20 days to represent the 22 trading days in a month
    stockprices['20d'] = stockprices['close'].rolling(20).mean()
    stockprices['250d'] = stockprices['close'].rolling(250).mean()*

绘制移动平均线

*现在我们已经计算了收盘价、 **20 日和 250 日移动平均线、*我们可以使用 matplotlib 将它们绘制在一个图表中。然后,我们添加一个标题,并使轴紧密,以加强情节布局。

*import requests
import pandas as pd
import matplotlib.pyplot as plt

def stockpriceanalysis(stock):
    stockprices = requests.get(f"https://financialmodelingprep.com/api/v3/historical-price-full/{stock}?serietype=line")
    stockprices = stockprices.json()

#Parse the API response and select only last 1200 days of prices
    stockprices = stockprices['historical'][-1200:]

#Convert from dict to pandas datafram

    stockprices = pd.DataFrame.from_dict(stockprices)
    stockprices = stockprices.set_index('date')
    #20 days to represent the 22 trading days in a month
    stockprices['20d'] = stockprices['close'].rolling(20).mean()
    stockprices['250d'] = stockprices['close'].rolling(250).mean()

    stockprices[['close','20d','250d']].plot(figsize=(10,4))
    plt.grid(True)
    plt.title(stock + ' Moving Averages')
    plt.axis('tight')
    plt.ylabel('Price')*

如果我们运行股票价格分析函数并传递 苹果 股票报价作为参数,我们将得到一个图表,其中显示了苹果过去几个月的移动平均价格和收盘价:

*stockpriceanalysis('aapl')*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过观察图表,我们可以看到我们对苹果的移动平均线技术分析的结果。

我们可以观察到 20 天移动平均线和最新收盘价之间的交叉。这是一个很好的迹象,表明上升趋势已经结束,价格下降趋势正在开始。

应使用基本工具进行进一步分析,以证实这种潜在的价格趋势变化。在我以前的一些帖子中,你可以找到一些使用 Python 的基本金融分析工具。

包扎

我们构建了一个非常强大的工具,使用 20 天和 250 天的移动平均线用 Python 执行简单的技术分析。该脚本可以用于为其他公司执行分析,只需将公司股票作为我们函数的参数进行传递。

很高兴通过我的 Twitter 账户获得您的反馈。

你也可以看看下面的视频教程,我一步一步地解释代码:

原载于 2020 年 2 月 29 日 https://codingandfun.com**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值