原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
Python 如何帮助我选择新家——第 3 部分
原文:https://towardsdatascience.com/how-python-helped-select-my-new-home-part-3-220cd5af592b?source=collection_archive---------37-----------------------
照片由克里斯蒂安·陈在 Unsplash
如果你是这个系列的新手,我建议你先看看《T4》第一部和第二部。否则,欢迎回来!像每一集《网飞》一样,这里有一个对之前发生的事情的快速回顾。
提示闪回
在我的按单生产(BTO)申请中,我想方设法得到了一个排队号来选择一个单。在等待赴约的漫长过程中,我发现整个单位监控过程令人惊讶地疲惫和低效。因此,我创建了 BTO 巴迪,作为一个基本的电报机器人,它能为我自动进行搜集和监控。
它很快在其他申请人中流行起来,这促使我开发了更多的功能,如识别受欢迎的单、计算辍学率,甚至网站规划分析。
BTO 好友现在可以在 Telegram 和 Web 上找到。
截至 2020 年 11 月 11 日,BTO Buddy 已经拥有超过 7,000 名用户,日活跃用户(DAU)约为 1,000 名。🥳,我真心感谢迄今为止我所得到的所有支持!
在本文中,我将介绍我在开发预测约会日期的新功能时所面临的挑战之一。
背景故事
“对于开发的每个功能,都必须有一些过去的痛苦”
一旦申请人成功收到一个排队号,他们必须等待的下一条信息就是他们的预约日期。他们的排队人数越多,等待的时间就越长。在这次约会中,他们将选择他们永远的家。
平均而言,申请人将在实际日期前两周收到预约日期。
BTO 是一个等待的游戏——图片由 imgflip 提供
在申请人收到他们的预约日期之前,没有官方途径了解现在发生了什么,也没有当前的排队号。因此,精明的申请人决定众包并在项目特定的电报组中分享他们的排队号和预约日期。
众包预约日期和排队号示例—图片由作者提供
这个巧妙的变通方法帮助许多其他人了解了每天的约会次数,并估计了他们可能收到约会日期的时间。然而,这种方法有两个问题😗*
- 不是每个人都愿意贡献,因为排队号是个人的事情。
- 聊天会收到垃圾邮件,其中包含复制粘贴消息来“更新”列表。
你也许能明白我的意思…
构建问题
希望你现在能想象他们被蒙在鼓里有多不舒服。鉴于 BTO 好友的用户注册过程收集了两个主要数据点:队列号和预约日期,我们可以解决这个问题并将其打包成一个特性。
目标
#1 —提供可信、清晰的预约日期和排队号视图。
#2 —给定一个没有预约日期的队列号,预测预约日期。
考虑
- 与众包方法不同,为了达到最佳效果,我们必须利用每个用户的数据,而不是在自愿的基础上。
- 确保用户的匿名性,这样队列编号就不会识别用户。在众包方法中,用户必须复制并粘贴信息来添加他们的详细信息。鉴于电报鼓励匿名,这可能会暴露他们自己的身份。
挑战
每当我们处理用户贡献的数据时,很可能会有噪音。在我们的例子中,用户在注册过程中提供了队列号和预约日期。因此,很容易出现恶作剧行为。
以下是它在日历视图中的突出显示:
BTO 好友网站上的日历视图带有误导性数据—图片由作者提供
这阻碍了我们的两个目标,因为它不仅看起来不可靠,而且当我们试图预测约会日期时,它可能会扰乱我们的模型。因此,我们必须首先清理数据,使其可用。
建立联系
为了使数据可用,我们需要删除不符合增长趋势的数据。在我们的例子中,我们需要检测并删除队列号 214 和 253。
表格视图:移除不流动的数字—图片由作者提供
如果你曾经在诸如黑客排名或 Leetcode 的平台上练习算法问题(我很少这样做😬),你可能会意识到这是现实生活中最长增长序列 (LIS)问题的一种表现🤯不知道是不是只有我,但当我知道这种联系时,我感到疯狂 满足。我一直想知道在课堂上获得的理论知识如何应用到我们的日常生活中。
如果您仍然看不到链接,这里有一个关于 LIS 问题如何很好地适合我的上下文的简单解释:
图片由作者
给定用蓝色划分的 16 个队列号,我想识别出不属于增长趋势中的哪些队列号,并删除它们。在这种情况下,通过删除 214 和 253,我的数据现在按顺序运行。这在假设大部分数据都正确输入的情况下效果很好。
求解 LIS 的算法可以用动态规划来完成。为了保持这篇文章的简单,我将不讨论这个算法。如果你感兴趣,网上有很多解释和代码(例如 GeeksForGeeks )。
预测
利用我们新清理的数据,我们对数据进行转换,以使我们将队列号作为独立变量(我们想要用来预测的变量),将 X 和预约天数作为因变量(我们想要预测的变量)。
为此,我们使用当前日期作为基线。例如,如果我们在 2020 年 10 月 15 日进行预测,我们从日期字段中减去2020–10–15,以获得距约会还有 N 天,即剩余天。
图片作者作者
最后,我们剩下的就是将数据拟合到一个简单的线性回归模型中,并将预测的剩余天数添加到当前日期。
BTO 好友现在有了一个新功能✨
正在运行的功能
电报应用
用户可以“*Appt Dates”*按钮,查看与每天第一个和最后一个队列号配对的匿名预约日期列表。
目标 1 的解决方案—图片由作者提供
Web 应用程序
没有预约日期的用户可以在 BTO 好友网站的日历界面上看到他们的计划预约日期。为了鼓励高级用户注册,这个特性只对高级用户可用😂
目标 2 的解决方案。(注:周六没有预约,因为 HDB 是休息日)——图片由作者提供
在上面的例子中,用户的队列号是 300,模型预测约会是在 2020 年 11 月 29 日。听起来差不多!
包扎
您可能想知道预测是否准确,因为我使用的回归只有一个特征。令人惊讶的是,我收到了几个用户的反馈,说预计的日期是 HDB 安排的确切日期。由于数据很少,这可能是我能采用的最好的方法之一。毕竟简单是关键!
现在,我可以自豪地说,BTO 巴迪是由计算机视觉和…
线性回归仍然是一个 ML 算法好吧—Image Bymeme generator
对于第 4 部分(可能是最后一部分),我将探索预测单被占用的顺序和理想地解释这些因素的主题。
敬请期待!
免责声明:我基于上下文知识对预测结果做了进一步的后处理,以提高其可靠性。因此,如果你打算复制这项工作,它可能对你有用,也可能没用。
大喊到 丹尼斯 为李斯提示!
Python 如何在机器学习方面超越 R
原文:https://towardsdatascience.com/how-python-overtook-r-for-machine-learning-46be67fc19af?source=collection_archive---------19-----------------------
意见
Python 如何超越 R 并成为数据科学的标准。
(python logo src =http://python.org,R logo src =https://www.r-project.org/,tensor flow logo src =https://www.tensorflow.org/,Numpy logo src =http://numpy.org)
介绍
大约十年前,Pythonic 机器学习的想法在许多数据科学家眼中只是一闪而过。当时用于统计的最流行的语言之一是 R,它在机器学习的前沿也显示出了希望。然而,正如你很可能意识到的那样,这不再是事实,Python 不仅是机器学习最流行的语言,也是最流行的语言。
虽然 Python 和 R 都是平易近人的高级语言,但它们当然也有不同之处。其中一些差异可能归因于 Python 作为未来数据科学语言的崛起。
可用性
对于数据科学来说,从 R 到 Python 的转变有一个决定性的因素,那就是这两种语言的可用性。r 是一种主要的函数式语言,几乎完全是为科学计算而创建的。虽然在某种程度上它在许多方面都有能力,但 R 肯定不是一种通用的编程语言。
另一方面,Python 主要是一种面向对象的编程语言。这归功于 Python 相对于 R 的友好性,因为在很多方面,程序员可能会发现使用具有简单功能的对象比使用多态的系统化功能要容易得多。最重要的是,Python 最初并没有考虑统计计算,因此更适合通用编程。
虽然这些差异对于那些只做统计计算的人来说可能意义不大,但对于那些希望从更具技术性而非科学性的角度来研究机器学习的人来说可能意义重大。换句话说,Python 当然是一种更适合每一个程序员而不仅仅是统计学家的语言。
可用性的差异也不会因为使用和范例而停止。面对现实吧,
Pip 优于 R 的“包管理器”
在 R 的辩护中,包管理器肯定不是它那个时代的特色。尽管如此,即使 R 现在推出了一个出色的软件包管理器,它也很可能无法与 Pip 的便利性相竞争。Pip 使得管理所有的 Python 库变得非常容易,这反过来也使得学习如何使用 Python 中的包变得更加简单。有人试图为 R 创建一个更好的包管理器,比如 pack rat——如果你喜欢用 R 编程的话,这是一个很好的工具。
[ 个人信息管理程序
你还需要确保你的机器…
rstudio.github.io](https://rstudio.github.io/packrat/)
在某种程度上,Packrat 就像 R 包管理器的 QuickLisp。当然,在这方面,R 成为了发布时间的牺牲品。
表演
谈论机器学习而不讨论性能是非常困难的。毕竟,深度学习计算机通常配备多个显卡和服务器处理器是有原因的。Python 可能没有世界上最好的性能,但肯定比 r 更上一层楼。下面是 Julia computing 完成的一些微基准测试,显示了这些语言在许多操作中的差异有多大:
(src =https://julialang.org/benchmarks/
尽管确实存在 R 超过 Python 的情况,但在大多数情况下,Python 肯定是两者中表现更好的。当然,这归因于 R 编程语言内部机器学习的生存能力较低。虽然 R 和 Python 一样,肯定可以从调用其他语言(如 C 和 C++)中获益,但 Python 与 Python.h 头文件的紧密集成和易于访问性,使它成为那些希望用 C 创建高级接口的人的明确选择。
生态系统
如前所述,Python 当然是一种更有可能吸引普通程序员的语言。这可能就是为什么 Python 是开发 Scikit-Learn 和 Tensorflow 等包时使用的语言。用于机器学习的 Pythonic 生态系统绝对是一流的,无与伦比!
在 R 的另一边,虽然肯定有一些出色的包,但是当它们与 Python 拥有的所有通用选项相比时,毫无疑问。部分原因是,许多已经了解 Python 并希望进入机器学习领域的开发人员决定只使用该语言,而不是转换到 r 语言。由于 Python 与 C 语言的合作关系,很容易理解为什么这些包是为 Python 而不是 r 开发的。
两者都用
尽管 R 在这一点上已经完全让位于 Python,但 R 仍然被广泛用于统计分析、生物信息学,甚至机器学习。然而,似乎 R 更受科学和医学团体的欢迎,而 Python 更受技术影响。
这是我觉得很有意思的事情。为什么 R 在生物学家、医生和其他学科中的应用比普通开发人员、数据科学家和尝试机器学习的计算机科学家更广泛?对此一个合理的解释是,R 已经在这些行业立足了很长一段时间,以至于很难被取代。正如我之前谈到的,计算机科学家和来自编程世界而不是普通科学世界的人可能更喜欢使用 Python,而不是使用 70 年代的统计语言。当然,在 70 年代创造的不是 R 而是 S,但是 S 被广泛认为是 R 的前身——所以请记住这一点。
结论
我认为统计计算从使用 R 和 MATLAB 到 Python 的转变肯定是合理的。使用 Python 有很多优势,这些优势是你在其他地方无法获得的。Python 具有优越的性能,对于新开发人员来说更容易理解,也是世界上最流行的编程语言。所有这些因素无疑促成了 Python 的崛起,以及它现在在分析、统计以及最重要的机器学习领域的奇妙立足点。
虽然 R 肯定没有 Python 受欢迎,但它似乎已经在更科学、更少以计算机为中心的人群中找到了自己的家。看到某些语言如何在短短几年内被淘汰,以及一种新语言的能力如何在如此短的时间内被实现和利用,这是非常令人惊讶的。
流感疫情增长有多快?
原文:https://towardsdatascience.com/how-quickly-does-an-influenza-epidemic-grow-7eb3?source=collection_archive---------17-----------------------
病毒生长的数学模型
疾控中心在 Unsplash 拍摄的照片
对冠状病毒的担忧现在无处不在。我经常坐飞机,在美国和欧洲的旅客身上几乎从来没有看到过呼吸面罩,然而在我们这里,看到飞往中国的航班被取消,面罩在机场四处扩散。因此,流行病学——研究疾病的传播和传播——受到了越来越多的关注,并让我思考用来更好地理解疾病如何在人群中传播的模型。我将查看该领域的一个经典模型,并向您展示如何用 Python 实现它。
TL;速度三角形定位法(dead reckoning)
我们看看 Kermack-McKendrick 流行病学模型,并展示如何用 Python 实现它;一个被设计用来描述 1905-06 年孟买爆发的流感传播的模型。
免责声明:我不是流行病学家或病毒学家,所以如果我有任何错误,请告诉我!
模拟流感爆发
Kermack-McKendrick 模型 (KM)是早期的房室模型,这意味着它将人群分为三组:易感(S)、感染(I)和去除®。这些通常被称为 SIR 模型,其中 R 可以被移除,因为个体要么因为已经康复而现在免疫,要么因为已经死于感染而从群体中移除。
Kermack 和 McKendrick 建立了他们的模型,以加深他们对流行病的理解,即受感染的个体进入人群,突然开始传播疾病。他们假设人口保持不变(除了模型中由 R 项表示的死亡),因此忽略出生、非疾病相关死亡、进出目标区域的迁移的任何影响。此外,所有的人都同样易感,所以在这个模型中,那些更健康或有更好卫生习惯的人没有加分。所有这些都是该模型的局限性,但也使它成为流行病学研究的一个很好的起点。按照这种思路,许多现代模型是建立在 Kermack 和 McKendrick 奠定的基础上的,所以理解这一点肯定会帮助你前进到更复杂的工作。
克马克-麦肯德里克模型
KM 模型是一组三个微分方程。我们可以将模型写成如下形式:
在这个公式中,𝑥代表我们的易感人群,𝑦代表受感染人群,𝑧代表我们的不再受感染(如死亡/康复)人群。
我们在模型中有两个常数,𝑙和𝑘,它们都是正的(𝑙,𝑘>0).这些常数分别代表平均恢复/死亡率和平均感染率。因此,如果我们看到𝑘疫情上升,那么我们预计疾病会传播得更快,而如果𝑙疫情上升
更高的话,这种疾病会很快传播并导致流行病。
Kermack 和 McKendrick 使用了这个比率:
定义临界阈值,超过该阈值将发生流行病并在整个人群中传播。
如上述假设所述,人口 N 是常数,所以在任何时候我们都应保持如下关系:
让我们转向模型的实现,然后我们可以进一步评论一些属性。
在 Python 中模拟模型
像这样模拟微分方程相当简单。它是以一阶形式写的,所以我们不需要太担心重写方程。如果你不熟悉如何对微分方程进行数值积分,看一看我写的一篇初学者文章,其中我展示了两个主要的方法和详细的推导。否则,让我们继续并导入我们的包。
import numpy as np import matplotlib.pyplot as plt
我们将使用半隐式欧拉方法进行积分(在我的文章中解释了),这种方法实现和计算都很快。要做到这一点,我们需要找到 𝑥 、 𝑦 和 𝑧 的值,我们可以使用泰勒级数进行近似。我们将只讨论前两项,它们给出了合理的近似值。
前两项的形式如下:
把它应用到我们的方程组中(用δ𝑡代替𝑡−𝑡_0 ),我们得到:
因为我们使用半隐式欧拉方法来获得更精确的结果,所以我们将更新后的值(𝑦(𝑡)代入𝑧,为我们提供以下模拟方程组:
这是一个微妙的变化,但它通常会导致更好的近似。
在 Python 中,我们将所有这些打包到一个函数中,该函数将我们的初始值 𝑥 、 𝑦 和 𝑧 、我们的常数和时域作为参数。该函数将实现如上所示的半隐式欧拉方法,并返回三个变量的结果。
def km_model(init_vals, params, t): x_0, y_0, z_0 = init_vals x, y, z = [x_0], [y_0], [z_0] l, k = params dt = t[2] - t[1] # Assumes constant time steps for t_ in t[:-1]: next_x = x[-1] - (k * x[-1] * y[-1]) * dt next_y = y[-1] + (k * x[-1] * y[-1] - l * y[-1]) * dt next_z = z[-1] + (l * next_y) * dt x.append(next_x) y.append(next_y) z.append(next_z) return np.stack([x, y, z]).T
对于初始值,我们设置 𝑥 _0=999、 𝑦 _0=1、 𝑧 _0=0。参数 𝑙 和 𝑘 分别为 0.1 和 0.001。
init_vals = [999, 1, 0] params = [1e-1, 1e-3]t_max = 100 dt = 0.1 t = np.linspace(0, t_max, int(t_max/dt))km_results = km_model(init_vals, params, t)# Plot results plt.figure(figsize=(12,8)) plt.plot(km_results) plt.legend(['Susceptible', 'Sick', 'Recovered']) plt.xlabel('Time Steps') plt.show()
在这里,我们看到患病人数迅速上升,在恶化前最高为 675 人。请注意,这远远超过了人口的一半,并且发生在我们通过临界阈值之后的时间步长上,此时𝑥=𝑙/𝑘
从此,受感染的人数稳步下降。
我们也可以通过玩我们的参数𝑙和𝑘.来研究这一点让我们以更高的𝑙值重新运行它(回想一下,这是我们模型中的恢复率)。
params = [5e-1, 1e-3] km_results = km_model(init_vals, params, t)plt.figure(figsize=(12,8)) plt.plot(km_results) plt.legend(['Susceptible', 'Sick', 'Recovered']) plt.xlabel('Time Steps') plt.title(r'KM Model with $l={}$'.format(params[0])) plt.show()
在这个修改的版本中,人们恢复得太快,以至于无法感染整个人群。在这种情况下,我们的临界阈值是 500,当𝑥达到这一点,疾病逆转。
让我们看另一个例子,我们将𝑙设置回原始值,然后将𝑘增加一个数量级到 0.01。
params = [1e-1, 1e-2] km_results = km_model(init_vals, params, t)plt.figure(figsize=(12,8)) plt.plot(km_results) plt.legend(['Susceptible', 'Sick', 'Recovered']) plt.xlabel('Time Steps') plt.title(r'KM Model with $k={}$'.format(params[1])) plt.show()
在这种情况下,感染会迅速传播并超过整个人口。
最好事先知道这种疾病是会导致流行病,还是只会导致少数孤立的病例。我们可以通过计算生殖率来做到这一点,𝑅_0.这是我们之前观察到的阈值密度值的人口调整值。其给出如下:
如果是𝑅_0>1,那么我们手上就有一种传染病,会感染很多人。小于 0,意味着疾病在有机会广泛传播之前就会逐渐消失。
到目前为止,我们研究的三种场景中每一种场景的𝑅_0 值是:
- 10
- 2
- 100
在每种情况下,我们都有不同程度的严重程度。我们可以调整我们的参数来显示当我们的生殖率下降到 1 或更低时会发生什么,方法是将𝑘减少到 0.0001。
params = [1e-1, 1e-4] km_results = km_model(init_vals, params, t)plt.figure(figsize=(12,8)) plt.plot(km_results) plt.legend(['Susceptible', 'Sick', 'Recovered']) plt.xlabel('Time Steps') plt.title(r'KM Model with $k={}$'.format(params[1])) plt.show()print('R0 = {}'.format(sum(init_vals) * params[1] / params[0]))
R0 = 1.0
在这种情况下,疾病传播速度太慢,无法感染许多人,从而使患病者在疾病传播之前得以康复。
疾病建模
知识管理模型是捕捉流行病动态的早期数学模型之一。它最初发表于 1927 年,但今天仍然具有相关性,构成了许多现代流行病学模型的基线。这个简单的模型能够将额外的复杂性包括在内,例如疫苗、干预措施和其他效应的影响,以更好地了解病毒是如何在人群中传播的。
文艺复兴如何用机器学习战胜市场
原文:https://towardsdatascience.com/how-renaissance-beat-the-markets-with-machine-learning-606b?source=collection_archive---------3-----------------------
一群聪明的数学家和计算机科学家使用机器学习来模拟金融市场,并押注于短期…
TLDR:一群才华横溢的数学家和计算机科学家应用机器学习来模拟金融市场,押注于短期策略,自 1988 年以来每年回报率为 66%。
解决市场问题的人 [1]展示了吉姆·西蒙斯和他由科学家和数学家组成的杂牌军如何建立了历史上最赚钱的量化基金——文艺复兴科技。说实话,我希望能有更多有趣的细节来说明他们在市场中的优势,但这是一厢情愿的想法,因为这个领域通常是保密的,尤其是在文艺复兴时期。
我没有在我通常的文章中实现机器学习模型,而是决定从书中写出我的学习要点,这样任何想跳过美世-资助-特朗普戏剧和超级富豪员工的副作用的人仍然可以了解到自 1988 年以来 Medallion 基金如何实现 66.1%平均年回报率的宝贵经验。
来自解决市场问题的人的见解
1。金融知识是可选的 Renaissance 和其他量化基金的一个很大的区别是,他们的团队由科学家组成,而不是华尔街的人。由于没有金融背景,他们对待金融数据就像对待他们用来实验的科学/文本数据一样。当鲍勃·默瑟被问及他们是如何用自己的模特赚到这么多钱时,发生了一个尴尬而有趣的场景。他回答说“有时候它告诉我们买克莱斯勒,有时候它告诉我们卖。”这是克莱斯勒被收购后不再交易的时候——这表明 Renaissance 几乎不需要了解这些公司的基本原理,甚至是它们的名称!
2。合理解释模型的预测并不是当务之急——雇佣研究人员而不是经济学家的另一个可能的副作用是,他们更关心交易异常在统计上有多重要,而不是如何解释它们。因此,他们敢于交易难以解释/理解的非直觉异常。我喜欢这一点,因为通常在深度学习和模型的情况下,很难合理解释我们模型的预测。一个缺点是很难知道何时停止交易这个想法。例如,由于政府限制而存在异常,当故事不再成立时,我们可以停止交易。没有这个故事,我们不得不依靠统计测试来确认一个信号不再存在。
3。研究论文很可能是错误的— 为了寻找思路,西蒙斯成立了一个读书俱乐部,阅读和讨论声称发现了阿尔法的论文。可悲的是,当他们试图回测这些论文时,他们从来没有成功过。如果研究人员真的发现了阿尔法,他们可能不会在第一时间发表它们,但我确实发现阅读论文是灵感/想法的来源。
4。拥有单一的交易模型—亨利·劳弗认为,一个适用于所有资产类别的大模型将让他们利用他们收集的大量数据,并建立不同资产类别之间的相关性模型,而不是为每个资产类别创建一个独特的交易模型。这使得未来的想法很容易被加入,因为模型已经隐含了对市场和价格变动的理解。即使对于历史较短的资产类别,如果它们与历史更悠久的投资相似,也可以进行交易。这让我想起了神经网络中的迁移学习,首先训练一个通用模型来学习一个巨大的图像/文本数据集的良好表示,然后你可以非常成功地附加任何下游任务。这比一个模型用于一个下游任务更有效,在下游任务中,你通常没有那么多标记数据,这限制了模型的学习能力。
5。工业级编码至关重要——Robert Frey完成的最初统计套利模型在理论上非常有效,但它们是以零敲碎打的方式编码的,无法处理异常情况。默瑟和彼得·布朗用他们多年在 IBM 编写大系统的经验,建立了一个单一的动态交易系统。随着我们进入一个“任何人都可以用 4 行代码进行机器学习”的时代,记住工业级编码技能对于确保生产中一切顺利运行至关重要。尤其是在金融业,一个错误的决定可能会损失数百万美。
6。将你的优势转化为它的最大能力 —人们想知道为什么竞争对手没有赶上或复制 Renaissance 的成功,一个可能的原因是,一旦他们找到了优势,他们就将其转化为最大能力,这样异常现象就不再出现了。这实质上使市场变得有效,因为异常现象已经被套利消除了。竞争对手被留下来寻找剩下的异常。
7 .。垃圾输入,垃圾输出——团队最初的模型并不成功,主要是因为他们手动收集的数据充满了错误。在 Sandor Straus 清理、估算和收集日内数据后,他们能够改进他们的模型,并在大多数投资者使用开盘价/收盘价进行交易决策时利用日内数据。在我们从事数据科学项目时,确保输入正确非常重要。而且正如美世所说,“没有比更多数据更好的数据”。
8。不要 100%相信你的模型——1998 年,一家当时规模大得多的量化基金——长期资本管理公司(Long Term Capital Management)破产了,原因是它们对自己的模型信心坚定不移,导致它们在面临几乎不可能出现的亏损时仍双倍下注。在 Renaissance,当信号不起作用时,他们的系统会保守地削减头寸。这对量化基金来说至关重要,尤其是当我们不知道为什么模型会给出预测时,适当的风险管理/下注规模就更加重要了。
9。宽客也是人——故事的很多部分描述了吉姆·西蒙斯对市场波动和新闻的情绪反应,这真的不是我们对他的期望。这表明,即使你是最优秀的量化分析师,保持冷静也有多难,同时也表明,我们应该尽量不要因为自己的情绪而干预或推翻算法的建议,因为这只会影响表现。
10。长期异常更难从中获利——大奖章基金交易的大多是短期异常(可能来自临近预报),并把他们开放的基金的长期策略留给外人。外部基金 RIEF 一直在努力达到大奖章的回报。
11。简单模型有效…只要你掌握了基本原理——他们使用核回归来模拟市场,这是一种简单的算法,对于实现来说微不足道——这让我开始想知道为什么在那里工作需要博士学位。然而,模型的简单性意味着我们需要做好每一件事——数据质量、变量/目标选择,最后是战略执行(下面是专利截图)。
来源:https://patents.google.com/patent/US
12。用机器学习战胜市场是很困难的— 有很多次,团队被为什么他们的模型不起作用而困惑,我最喜欢的是他们许多行代码中的一行代码中的静态标准普尔 500 指数值,打乱了模型的预测。然而,该团队坚持不懈,克服了每一个障碍,成为有史以来最成功的量化基金。创新不会停止——随着竞争对手学习并试图模仿他们的成功,Renaissance 必须不断寻找新的方法来超越市场。考虑到他们是最好的,并且只有大约 51%的时间是正确的,我们其余的人有我们的工作要做。
格雷戈里·朱克曼(Gregory Zuckerman)编织了一个伟大的故事,讲述了建立文艺复兴的各色人物,这是任何有抱负的量化分析师或任何想在量化金融领域寻找刺激的人的必读之作。
号外:Jim Simons 谈论 Ren Tec 机器学习的视频。
来源:数学投资人
参考
[1]朱克曼,g .解决市场的人。纽约:企鹅兰登书屋,2019 年。
偏见如何扭曲你的预测
原文:https://towardsdatascience.com/how-sampling-biases-might-be-ruining-your-predictions-f9e021d79723?source=collection_archive---------30-----------------------
理解数据及其分布是精确模型的关键。
图像通过 Unsplash
抽样偏倚 是一种 偏倚 的术语,其中样本的采集方式使得预期人群中的某些成员比其他人具有更低的 抽样概率 。这在社会科学或临床研究中最为人所知,例如,当某些人比其他人更喜欢参与研究时。假设你正在做一个心理学或市场研究问题的调查。一些具有特定属性的个人可能对参与本次调查更感兴趣,因为他们可能会直接受到治疗或产品成功的影响。在提供资金的情况下,有需要的个人可能更愿意参与。这两种情况都会将偏态带入到收集的数据中,并可能导致错误的结论( 选择偏差 )。需要注意的是统计建模是关于描述 概率分布;机器学习 是将内容数据压缩为规则的工具箱。由于采样偏差,收集的数据集中的概率分布偏离了人们在野外实际观察到的真实自然分布,并且当从这些数据中开发模型时,由于提取的规则不正确,预计预测性能会很差。
重要的是要意识到统计建模就是描述概率分布。
一个遇到的例子来自一份旨在预测慢性肾病和透析患者死亡率的临床研究出版物。数据的一个主要问题是,许多患者因为接受移植而退出研究。结果是病人丢失,他们的结果是未知的;这个过程叫做 审查 。如果审查系统地发生,即只有特定的受试者丢失( 流失 ),审查会带来偏倚。最后,最终的模型声称,12 岁后死亡的概率显著增加。然而,在这项研究中,老年患者比年轻患者多,因此有理由认为,随着老年人在人口中的数量增加,更多的老年人死亡将被记录在案。在数据科学场景中,大量数据被放入一个罐中进行提取,跟踪所有这些情况变得非常困难。这只有通过使用模型检验技术、相关矩阵和直方图来探索数据和模型才能发现,这也是为什么 可解释的人工智能 备受期待的原因之一,即模型以与发生在 决策树 、中的方式解释它们的预测然而,许多高性能的语音和图像识别模型都是基于神经网络的黑盒。
机器学习是把数据的内容压缩成规则的工具箱。
偏见甚至可能发生在自然科学领域,但是自然科学家对此并不太了解,因为他们习惯于在严格控制的条件下进行实验,例如在实验室里。有一次,研究人员试图开发化学传感器的校准功能。他们从一个特定的地方(一个汽车交通繁忙的意大利城市的主要街道)收集数据,并开发了一个模型,该模型将几个化学传感器测量的数据作为电压和环境因素(温度和湿度)作为输入映射到参考浓度。然而,他们没有意识到所有的化合物都是相关的(ρ0.8),因为它们源于同一个化学过程——发动机中的燃烧。现在,在重新定位这样的传感器时,预测性能可能会急剧下降,因为分子之间可能存在具有不同关系的其他化学过程,这相当于说它们的分布在其他一些地方可能是不同的( 光谱偏差 )。每当一个模型被训练的分布发生变化时,例如由于空间或时间效应,这个模型的有效性显然就失效了。
由于采样偏差,收集的数据集中的概率分布偏离了人们在野外实际观察到的真实自然分布。
然而,即使采样已经正确执行,也可能存在偏差,这仅仅是因为人类存在偏差。这种偏差是用于模型建立的数据的一部分,越来越多的人意识到人工智能中数据诱导的偏差。例如,尽管是一个真诚的人,但仅仅是一个社会团体的成员就可能增加犯罪的可能性;仅仅因为一个子群体(如按种族分层)的登记犯罪频率增加,这个子群体中的一个人就已经可疑了。即使这样一个变量不是模型的一部分,一个相关的变量(如工资/财富)可以作为一个替代品。人力资源部的另一个例子会影响招聘过程;由于更多的高管是男性,与女性相比,他们中的更多人可能会被贴上“有资格”担任管理角色的标签,而女性可能会发现自己受到一个自动系统的歧视,该系统只是因为在模型开发期间使用了扭曲/有偏见的数据,就为公开的领导职位汇集候选人。此外,大多数产品由男性开发这一事实可能会对女性产生影响。正在开发嵌入人工智能(如自动决策)的解决方案的研究人员和机构,应该负责保证没有人受到歧视——但目前根本没有监管。
每个模型的好坏取决于它所接受的训练数据。
总之,偏见可能在你意识不到的情况下随时发生,每个模型的好坏取决于训练数据的好坏。意识到这种持续存在的风险并理解正在处理的数据的分布,是建立具有有意义预测的良好模型的关键。
卢克·切瑟在 Unsplash 上拍摄的照片
Scikit-Learn 如何永远改变了机器学习
原文:https://towardsdatascience.com/how-scikit-learn-changed-machine-learning-forever-90c1eebe3484?source=collection_archive---------24-----------------------
社区开发的软件包如何定义机器学习
(src = http://scikit-learn.org)
Sk learn,或 Scikit-Learn 是一个无需介绍的 Python 模块。Sklearn 不仅改变了 Python 的整个语言和生态系统,也改变了整个机器学习。根据 HugoVk 的说法,他引用他的消息来源
- PyPi 本身
- 蟒蛇车轮
- 谷歌大查询
- Pypinfo,
(你可以在这里查看他的网站)
[ 顶级 PyPI 包
从 PyPI 下载最多的 4000 个包的两周转储
hugovk.github.io](https://hugovk.github.io/top-pypi-packages/)
Scikit-Learn 是通过 Pip 下载第 62 多的 Python 包。这听起来可能没有那么重要,除非你首先考虑到 Python 肯定不是为机器学习而构建的,而这正是 Sklearn 的构建目的。相比之下,通常与 Python 中的线性代数相关联的 Python 包 Numpy 排名第 23。Pandas 是管理数据帧中大量数据的首选软件包,编号为 38。IPython 落后于 Sklearn,排在第 76 位。这实际上意味着下载 Sklearn 的人比使用 Python 的 Jupyter 笔记本的人多。然而,只要考虑到一件事,这种说法就可能被推翻:
服务器
简史
Sklearn 最初是由 David Cournapeau 在 2007 年 6 月根据新的伯克利软件分发许可证创建的“谷歌代码之夏”项目。Scikit 这个名字来源于两个术语的组合,
西皮和基特。
Scipy 工具包是不言自明的,但很明显,Sklearn 已经远远超出了 Scipy 工具包的范畴。这是由 2010 年的一大批开发人员完成的,他们是 Fabian Pedregosa、Gael Varoquaux、Alexandre Gramfort 和 Vincent Michel,他们都来自法国计算机科学和自动化研究所。
改变 Python
(src = http://python.org)
众所周知,近年来 Python 生态系统中受欢迎的部分发生了巨大的变化,而这一切部分归功于 Cournapeau 的“代码之夏”项目。Sklearn 奇妙的代码库对 Python 编程语言整体的影响是不可估量的。Sklearn 和谷歌的开源机器学习库 Tensorflow 共同努力,在 Python 语言内部创建了一个占主导地位的强大生态系统,自那以来还没有受到重大挑战。即使在更新的语言 Julia 中,包也经常 PyCall Sklearn 来完成某些工作。
机器学习是目前 Python 以及全世界最热门的技术。随着世界向自动化发展,Python 已经成为推动这一新扩展的主导力量,这既令人兴奋又令人震惊。Python 编程语言本身已经进行了大量更新,以平息机器学习工程师的建议。很难对机器学习既增强又塑造整个语言以适应其需求的前景提出异议。
改变机器学习
如果你已经在数据科学领域工作了一段时间,你必须没有眼睛和耳朵才能注意到其他模块直接从 Sklearn 获得灵感。事实上,在编写 Python 机器学习模块时有一个完整的概念,叫做
SkLearn 一致性
大多数机器学习模块,甚至包括 Tensorflow,都是按照这种方法创建的。模特“试衣”本身已经成为一个完整的定义,这都要归功于 SkLearn 上所做的出色工作。整个数据科学生态系统都围绕着 SkLearn 中包含的成熟而古老的工具。不仅如此,越来越多部署在 HTTP 协议上的机器学习算法也依赖于 SkLearn。
改变生态系统
在通过 Pip 的用户下载方面,SkLearn 远不如 Numpy 受欢迎,但另一个远在 SkLearn 之上的是 Scipy。Scipy 可能是 Sklearn 最大的依赖项,这也是这个名字的由来。SkLearn 让这些工具在数据科学领域变得更加家喻户晓。
(src = http://scipy.org/)
熊猫和 Numpy 的受欢迎程度可能非常相关,或者用数据科学家的行话来说;
“将返回非常低的 P 值”
而 SkLearn 和 Scipy 就是这两个包的直接类比。SkLearn 的设计理念是 Scipy,正如熊猫的设计理念是 Numpy。SkLearn 通过使 Scipy 成为一个更受欢迎的包,完全改变了 Python 生态系统。
结论
不用说,SkLearn 无疑已经在机器学习、Python、计算机科学以及自动化方面留下了自己的印记,而且它不太可能在短期内走向任何地方。SkLearn 是排名前 100 的 Python 包中唯一一个机器学习包,从数字上看排名相当靠前。
SkLearn 不仅影响了模型的编写方式,还覆盖了 Python 中机器学习的新领域,塑造了语言以及围绕它的生态系统,至少在某种程度上是这样。所有这些都使得 SkLearn 对科学、机器学习和自动化的影响极其微妙和重大。SkLearn 是一个模块,它最初是由 Google 组织的一个项目。
和许多开源软件包一样,开源程序员和 GNU 狂热者的精彩社区能够让它成为一个专利解决方案。维护人员多年来付出的所有努力都得到了回报,并使 Python 机器学习成为 Python 编程语言的主要内容,我真诚地希望这一点永远不会改变。
如何刮 NBA 的统计数据比迈克尔乔丹更酷
原文:https://towardsdatascience.com/how-scraping-nba-stats-is-cooler-than-michael-jordan-49d7562ce3ef?source=collection_archive---------19-----------------------
寻找 API 端点和客户端 web 抓取
瓦列里·塞索耶夫在 Unsplash 上的照片
介绍
今年夏天,我有了一个跟踪 NBA 的新爱好,作为一个数据爱好者,我想了解这个赛季的 NBA 在理论上与前几个赛季有什么不同,因为这是在没有任何球迷的泡沫中进行的。
为了获取相关数据,我开始使用 python 库 beautiful soup。然而,令我惊讶的是,数据并没有存储在 HTML 源页面上。经过一番挖掘,我发现 NBA stats 网站是用 AngularJS 构建的,这意味着该网站是在客户端而不是服务器端呈现的。
什么是客户端渲染
呈现的 HTML 只是一个模板,它不包含任何数据,服务器响应中的 Javascript 从 API 获取数据,并使用它来创建客户端页面。
基本上,当你查看网页源代码时,你不会发现数据,而只是网页的一个模板。
NBA 各州网站
Ctrl + U 带您到页面源
我们开始吧
在本文中,我们将从 NBA 统计网站上搜集联盟球员的统计数据。经过几个小时的研究,我决定采用一种比美丽的汤更简单的方法。
从网站查找 API 端点
第一步,在你的网页浏览器(最好是谷歌 chrome 或者火狐)上打开你想要抓取的网页,打开开发者工具。为此,只需右键单击选择检查。
右键单击,然后检查
这将在页面的右侧或底部打开一个面板,选择网络和 XHR,然后重新加载页面。
检查面板
一旦我们重新加载页面,页面中的所有请求都将可见。此时,您应该做一些挖掘工作来找到您想要的请求。最有可能的是,端点会以你正在浏览的网页命名。
由于我们正在查看联盟球员的统计页面,端点可能会被命名为类似的名称。选择每个选项并预览结果以找到正确的端点。
选择并预览
一旦你找到了正确的终点,你就可以进入下一步了。
调用 API 端点来获取数据
为了调用 API,我们将利用请求 python 包。为此,我们需要 3 个组件作为下面请求语法的一部分。
第一部分是 URL,在我们的例子中,因为我们正在访问联赛球员统计数据,所以我们可以从上一步获得它。
在 Header 选项卡下,选择 general 并复制请求 URL 的第一部分。
请求 URL
接下来,我们需要请求标题,它也可以在同一个标题选项卡下找到,但是在“请求标题”子部分下。
请求标题
作为字典的页眉
我们需要的最后一个组件是参数,可以在 Header 选项卡下的“查询字符串参数”小节中找到。
因素
因素
现在我们有了所有的三个部分,调用 API 就很简单了。然后,可以将响应处理到数据框架中进行分析。
获取请求
最终的请求看起来像这样,
数据帧
谢谢大家!!
恭喜👏!!我们成功地抓取了 NBA 统计数据网站。
PS:这个过程对 stats.nba.com 的绝对管用。这可能也适用于任何其他使用 AngularJS 等语言构建的客户端 web 框架的网站。如果你的目标网站是用服务器端框架和像 Django 或 Ruby on Rails 这样的语言构建的,那么我们的朋友 Beautiful Soup 会帮你一把。
祝你的网络抓取之旅好运!希望这个帖子有帮助。
如果你有任何问题,请随时通过 Twitter 或 Linkedin 联系我。
数据科学家应该如何处理运营任务?
原文:https://towardsdatascience.com/how-should-data-scientists-handle-operational-tasks-a762fd49379f?source=collection_archive---------32-----------------------
在 Unsplash 上由 Franck V. 拍摄的照片
处理短期和长期的权衡
介绍
作为数据科学家,我们看到许多文章解释人工智能,机器学习或强化学习的先进方法。然而,在现实生活中,我们经常不得不处理较小的操作任务,这些任务不一定处于科学的边缘,例如构建简单的 SQL 查询来生成电子邮件地址列表,以作为 CRM 活动的目标。理论上,这些任务会分配给更合适的人,比如业务分析师或数据分析师,但公司并不总是有专门负责这些任务的人,特别是如果是较小的公司。
在某些情况下,这些活动可能会消耗我们太多的时间,以至于我们没有太多的时间去做重要的事情,最终可能会在这两方面都做得不够好。也就是说,我们应该如何处理这些任务?一方面,不仅我们通常不喜欢做操作任务,而且他们也是一个昂贵的专业人员的糟糕使用。另一方面,必须有人去做,而且不是每个人都具备必要的 SQL 知识。在这篇文章中,我将向你展示一些处理这些问题的方法,以优化你的时间。
减少
第一个也是最明显的减少操作性任务的方法是简单地拒绝去做。我知道这听起来有点苛刻,根据你的公司和它的等级制度,这可能不切实际,但在某些情况下值得一试。通过“拒绝”,我的意思是质疑这项任务是否真的有必要,并试图找到最好的方法去完成它。比方说,每个月你必须为不同的领域准备三份不同的报告,包含相似的信息。您已经成功地实现了 SQL 查询的自动化,但是您仍然需要仔细检查结果,并最终根据用户的请求添加/删除一些信息,或者更改图表布局中的一些内容。在本例中,您可以查看 3 个不同的报告是否都是必要的,或者您是否可以调整它们,使它们成为一个报告,发送给 3 个不同的用户。不管怎样,想办法减少完成这些任务的必要时间,或者,理想的情况是,完全停止执行这些任务。
授权
有时,花时间让用户自己执行这些任务是值得的。当 CRM 要求你生成无止境的电子邮件地址列表时,也许教或鼓励他们学习 SQL 的基础知识(或雇佣一些已经知道的人),这样他们可以更加自主,从长远来看会有回报。如果这听起来过于雄心勃勃,那么为他们提供工具,使他们不用编码,只使用拖放功能就能生成这些列表,这可能是您的解决方案。您可以使用现有的解决方案,如 Adobe Campaign,也可以自行开发(作为一名数据科学家,这可能是培养您的应用程序构建技能的绝佳学习机会)。
使自动化
如果你注意到这是一项你无法摆脱又无法委派的任务,那么就尽可能地让它自动化。对于报告,尝试将它们迁移到 dataviz 工具,如 Tableau 或 Google Data Studio。您可以将这些工具与您的数据库同步,它们将始终保持最新,因此您不必再更新报告。如果它与 CRM 电子邮件列表相关,请尽量使您的 SQL 查询灵活,使用可变的日期和名称,这样您就不必每次都修改它们。
此外,试着写下你对数据做了什么样的检查,并用编程逻辑将它们形式化。这使您甚至可以自动执行手动检查,因此您不必再做这些工作。老实说,这一步无论如何都是一个很好的实践,但是它肯定会帮助你完成操作任务。
组织
特别是当你是一名经理时,你必须分清主次,这样你和你的团队才不会淹没在无休止的运营任务中。为了做到这一点,在你的一周中留出一两天来做这类工作,在剩下的 3-4 天里不要去看它。要做到这一点,你必须按照前面的步骤来调整你的工作负荷,并且在设定截止日期时通过减少工作时间来管理期望。这也意味着向你的内部客户解释范式的转变,以便他们能够适应这些新的截止日期。这一步可能意味着做一些内部政治,与你的上级和其他部门协商。你必须证明你的团队的时间可以更好地用于高价值的任务,而不是操作性的任务。
另一个可能有所帮助的组织变革是聘用一名数据分析师或业务分析师,全职处理这些需求,以减轻高级分析师或数据科学家的负担。请记住,该解决方案还需要管理层的认可。
结论
一旦你绘制了所有的操作活动,你就要开始尽可能地从你的管道中删除,首先永久地删除不必要的活动,然后将它们委派给请求它们的团队。然后,无论剩下你要做什么,你都要最大限度地自动化(无论如何,自动化应该是任何重复性任务的优先事项),并组织自己,以确保你有时间做你必须做的相关工作。这样,你不仅能从工作中获得更多乐趣,还能确保你昂贵的时间得到合理利用,最大化公司的利益。
学生应该如何利用时间来提高自己的幸福感?
原文:https://towardsdatascience.com/how-should-students-spend-their-time-to-improve-their-happiness-a8bab76fb3c4?source=collection_archive---------55-----------------------
变更数据
用 Jupyter 笔记本分析调查数据。
学生们在校园里度过时光,由 katemangostar 在 www.freepik.co 的 T2 创作
关于睡眠、锻炼、休闲、学习和幸福之间的关系,已经有很多研究了。尽管人们对睡眠和幸福之间的关系存在争议,但结果往往与我们的预期十分相似。然而,我想知道我们是否可以从我们一般如何度过时间的角度来看待这个问题,看看在我们生活的不同方面花费时间的平衡是否会影响我们的幸福水平。
与其追求更多的睡眠或更多的锻炼,我们应该如何全面地利用时间来增加我们的幸福感呢?
作为一名新加坡的大学生,我决定对我的同龄人做一个简单的调查。
数据描述:
回应数量 =45
变量,记住我是在问大学生:
—学习年限
—性别
—周围人的舒适程度(考虑到可能的性格差异)
—满意度(衡量幸福的一个好方法,因为它趋于稳定)
—睡眠时间(每天)
—学习时间(每天)
—锻炼时间(每周)
—休闲时间(每周)
接下来,我将通过 Jupyter Notebook 使用 Python 来做一些数据清理。从导入必要的包和查看数据开始。
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import statsmodels.api as sm import numpy as np import math#loading the data data=pd.read_csv("Happiness and how we spend our time (Responses) - Form Responses 1.csv") data.head()
数据清理:
1)为简单起见,重命名列标题
data.columns=['Year','Gender','Being around others','Happiness score','Sleep','Study','Exercise','Leisure']
2)通过以下方式从分类转换为数字:
- 取数值范围的平均值,每个选项之间的间隔不变(注意:下次让回答者输入整数)。
- 将“男性”和“女性”替换为 1 和 0,将“第 1 年”到“第 5 年”替换为“1”到“5”。
data=data.replace({'Year 5':5, 'Year 4':4,'Year 3':3,'Year 2':2,'Year 1':1,'Male':0,'Female':1,'0 to 1 hour':0.5,'0 to 2 hours':1,'1 to 2 hours':1.5,'3 to 4 hours':3.5,'4 to 5 hours':4.5,'5 to 6 hours':5.5,'7 to 8 hours':7.5,'0 to 4 hours':2,'5 to 9 hours':7,'9 to 10 hours':9.5,'10 to 14 hours':12,'15 to 19 hours':17,'20 to 24 hours':22,'25 to 29 hours':27,'9 or more hours a week':9.5,'More than 30 hours a week':32})
3)删除“时间戳”列,并将“锻炼”和“休闲”值除以 7,得到每天的值
data=data.drop('Timestamp',axis=1)#make weekly hours to daily data['Exercise']=data['Exercise']/7 data['Leisure']=data['Leisure']/7 data.head()
4)将睡眠、学习、运动、休闲换算成百分比。
#get the hours variables dv=data dv=dv.drop(['Year','Gender','Being around others','Happiness score'],axis=1)#sum of rows sumv=dv.sum(axis=1)#making it into percentages dv['Sleep']=100*dv['Sleep']/sumv dv['Study']=100*dv['Study']/sumv dv['Exercise']=100*dv['Exercise']/sumv dv['Leisure']=100*dv['Leisure']/sumv#replacing the values data['Sleep']=dv['Sleep'] data['Study']=dv['Study'] data['Exercise']=dv['Exercise'] data['Leisure']=dv['Leisure']#looking at data data.head()
现在我们已经有了我们想要的形式的数据,我们可以开始创建数据可视化。我决定关注性格、时间百分比(睡眠、学习、锻炼和休闲)和幸福指数。
分析:
性格与快乐:
以下是那些认为自己在别人身边不太舒服的人的关联热图(‘在别人身边’<=5).
#set size plt.rcParams['figure.figsize'] = (8, 6)#plot data desired d = data.loc[lambda data: data['Being around others'] <= 5] sns.heatmap(d.corr(), cmap = 'Blues', annot = True) plt.show()
Correlation heat map for “Being around others” ≤ 5
Mean for sleep=42.11%, mean for leisure=13.98%, mean happiness score=4.92. Notice that the correlation between happiness and sleep was the highest at 0.52),快乐和休闲的关联度为 -0.37。
相比之下,那些认为自己在别人身边更自在的人(“在别人身边”5 分)。
“与他人相处”的关联热图> 5
睡眠平均得分=45.64%,休闲平均得分=15.21%,幸福平均得分=6.81。幸福与睡眠的相关性在 0.24 时最高,幸福与闲暇的相关性为 -0.0028 。
其他所有的相关性都是惊人的负相关!虽然我认为睡眠与幸福有很大的关联,因为人们可能更喜欢独处,但休闲之类的活动与幸福有负相关是相当出乎意料的。这似乎表明,对于那些在别人身边不太舒服的人来说,他们更可能受到睡眠时间的影响,而其他因素似乎不是影响他们幸福的重要因素。与此同时,在休闲上花更多时间似乎与他们的幸福感呈负相关,尽管这一点在那些认为自己与他人相处更舒适的人身上可能并不突出。
如果我们看看锻炼和休闲的平均值,似乎花更多的时间在睡眠上可能对那些在周围不太舒服的人有好处。也许对人格的进一步剖析和检验会让我们对什么让我们快乐有更深入的了解。尽管如此,似乎幸福和个性似乎有某种关联。
与同龄人相比,对于那些在别人身边不太自在的人来说,睡眠是一个更重要的因素。
平衡的时间和快乐:
接下来,让我们看看如何花费不同比例的时间与幸福分数相关。
平衡:所有组件< 50%
平衡时间的关联热图
幸福得分:均值=6.80,标准差=2.00 。在别人身边和快乐的相关性= 0.44 。
不平衡:任一分量≥ 50%
幸福指数:均值=5.60,标准差=2.80。睡眠与幸福的相关性= 0.7 ,学习与幸福的相关性= -0.4。
*进入不平衡组者因学习或睡眠≥ 50%
从平均值来看,确保我们在 4 个因素上有一个平衡的时间分配似乎与更高的幸福水平相关。但是,我们来看看 0.7 相关性的不均衡时间的快乐和睡眠回归线!
#nbal is the data with only rows that are not balanced x = nbal['Sleep'] y = nbal['Happiness score'] plt.plot(x, y, 'o') m, b = np.polyfit(x, y, 1) plt.plot(x, m*x + b)
幸福和睡眠的回归线(不平衡时间)
如果我只看那些“睡眠”时间≥ 50%的人的数据:
幸福度均值=7.17,标准差=1.22
也许我们都只是需要更高百分比的睡眠时间。当我把标准放宽到≥ 40%时,平均幸福分就降到了 6.49。此外,似乎是我们花了 50%的时间在学习上降低了平均值(学习时间≥ 50%的人的平均值= 3.4285,标准差=2.88)。
那些在“睡眠”、“学习”、“锻炼”、“休闲”中睡眠时间≥50%的人的幸福指数平均为 7.17。
结论:
是的,它是!在各种活动中花费时间比例更均衡的学生似乎与幸福水平呈正相关。
调查结果:
- 睡眠和快乐之间的正相关贯穿整个
- 性格对与我们的快乐相关的活动类型有影响(例如睡眠和休闲)
3)那些拥有更平衡的时间分布的人似乎比那些拥有不平衡时间的人更快乐
4)那些拥有 ≥50% 时间的人,在所有变量中, 花在睡觉上的时间比花在学习上的时间多比花在幸福上的时间
多 ≥50% 的人,幸福的平均分数比花在学习上的时间低。
与其追求更多的睡眠或更多的锻炼,我们应该如何全面地利用时间来增加我们的幸福感呢?
- 花更多的时间睡觉。在竞争激烈/以工作为中心的环境中,听起来简单却很难。
- 或者,试着平衡我们花在不同活动上的时间(不要在一个活动上花太多时间!)
尽管如此,很高兴从这个迷你项目中学到了很多 python 和数据可视化知识,并试图从它试图告诉我的所有信息中汲取营养!请务必让我知道我是否可以关注其他领域或您对结果的看法!下次会尝试获取更大的数据集。
我们应该如何聚集分类预测?
原文:https://towardsdatascience.com/how-should-we-aggregate-classification-predictions-2f204e64ede9?source=collection_archive---------29-----------------------
如果你必须预测有多少乘客会在泰坦尼克号沉船事故中幸存下来呢?为分类而优化的方法仍然合适吗?
如果你正在读这篇文章,那么你可能正在试图预测谁将在泰坦尼克号沉船事故中幸存。这场 Kaggle 竞赛是机器学习的典型例子,也是任何有抱负的数据科学家的通行权。如果不用预测谁会活下来,你只需要预测会活下来多少会怎么样?或者,如果你不得不预测幸存者的平均年龄,或者幸存者支付的车费总和会怎么样?
我们应该如何聚集分类预测?
在许多应用中,需要对分类预测进行汇总。例如,客户流失模型可能会生成客户流失的概率,但企业可能会对预计有多少客户流失感兴趣,或者对预计会损失多少收入感兴趣。同样,一个模型可能会给出一个航班延误的概率,但是我们可能想知道有多少航班会延误,或者有多少乘客会受到影响。洪(2013) 列举了从精算评估到保修索赔的多个其他例子。
大多数二分类算法估计样本属于正类的概率。如果我们将这些概率视为已知值(而不是估计值),那么阳性病例的数量就是一个具有泊松二项式概率分布的随机变量。(如果概率都相同,分布将是二项式的。)类似地,两个值的随机变量之和(其中一个值为零,另一个值为其他数字,如年龄、收入)分布为广义泊松二项式。在这些假设下,我们可以报告平均值以及预测区间。总之,如果我们有了真实的分类概率,那么我们就可以构建任何总体结果的概率分布(幸存者人数、年龄、收入等)。).
当然,我们从机器学习模型中获得的分类概率只是估计值。因此,将概率视为已知值可能不合适。(本质上,我们在估算这些概率时会忽略抽样误差。)然而,如果我们只对幸存者的总体特征感兴趣,也许我们应该专注于估计描述这些总体特征的概率分布的参数。换句话说,我们应该认识到我们有一个数值预测的问题,而不是一个分类的问题。
我比较了两种获得泰坦尼克号幸存者总体特征的方法。首先是分类,然后汇总。我估计了三种流行的分类模型,然后合计了所得的概率。第二种方法是一种回归模型来估计一群乘客的总体特征如何影响幸存的份额。我使用测试和训练数据的许多随机分割来评估每种方法。结论是,当分类概率被聚集时,许多分类模型表现不佳。
1.分类和汇总方法
让我们用泰坦尼克号的数据来估计三个不同的分类器。逻辑模型将仅使用年龄和乘客等级作为预测值;随机森林和 XGBoost 也会用性。我在 Kaggle 的训练数据中的 891 名乘客上训练模型。我评估了测试数据中对 418 的预测。(我获得了测试集的标签,以便能够评估我的模型。)
分类算法在总量预测中的性能。
只有年龄和乘客级别作为预测因子的逻辑模型的 AUC 为 0.67。同样使用性别的 Random Forest 和 XGBoost 达到了非常可观的 0.8 左右的 AUC。然而,我们的任务是预测有多少乘客能够生还。我们可以通过合计一名乘客生还的概率来估计这一点。有趣的是,在三个分类器中,尽管 AUC 最低,但 logistic 模型最接近实际存活人数。同样值得注意的是,基于训练数据中幸存者比例的天真估计做得最好。
给定测试集中每个乘客的幸存概率,幸存乘客的数量是一个随机变量分布泊松二项式。这个随机变量的平均值是各个概率的总和。该分布的百分位数可使用由 Hong (2013)) 开发的‘poi bin’R 软件包获得。一个类似的针对 Python 的包正在开发中。百分位数也可以通过对测试集中的 418 名乘客模拟 10,000 组不同的结果来获得。百分位数可以解释为预测区间,告诉我们幸存者的实际人数将在 95%的概率范围内。
使用泊松二项式和广义泊松二项式百分位数的预测区间。
基于随机森林概率的时间间隔与幸存者的实际人数相差甚远。值得注意的是,区间的宽度不一定基于个体概率的准确性。相反,它取决于那些个体概率离 0.5 有多远。概率接近 0.9 或 0.1,而不是 0.5,这意味着有多少乘客将幸存下来的不确定性要小得多。这里有一个关于预测可靠性和清晰度的很好的讨论。
虽然幸存者的数量是零/一个随机变量的总和(伯努利试验),但我们也可能对预测幸存者的其他总体特征感兴趣,例如幸存者支付的总费用。该度量是两个值随机变量的和,其中一个值为零(乘客没有幸存),另一个值是乘客支付的票价。张,洪,Balakrishnan (2018) 称此和的概率分布为广义泊松二项式。与泊松二项式一样,洪与人合写了一个 R 包,,使得计算概率分布变得简单明了。同样,模拟分布是使用包来计算百分位数的一种替代方法。
2.总体回归方法
如果我们只关心幸存者的聚合特征,那么我们真的有一个数值预测的问题。对测试集中存活者份额的最简单估计是训练集中存活者的份额——这是上一节中的天真估计。如果测试组和训练组中乘客的特征相同,这种估计可能是无偏的和有效的。如果不是,那么我们需要根据乘客的特征来估计幸存者的比例。
问题是,我们没有数据来估计一群乘客的总体特征如何影响幸存的份额。毕竟泰坦尼克号只撞过一次冰山。也许在客户流失等其他应用中,我们可能每个月都会有新的数据。
在 Titanic 案例中,我通过重新采样原始训练数据集来模拟许多不同的训练数据集。我计算每个模拟数据集的平均特征,以估计这些特征如何影响幸存的份额。然后,我取测试集中乘客的平均特征,并预测有多少人会在测试集中存活下来。有许多不同的方法可以总结总体特征。我用头等舱乘客份额,10 岁以下乘客份额,女性乘客份额。毫不奇怪,有更多妇女、儿童和头等舱乘客的乘客样本有更高的幸存者比例。
使用 500 个模拟训练集对总体乘客特征的幸存份额进行回归的结果。
应用上面的等式来聚合测试数据的特征,我预测 162 幸存者相对于实际的 158,预测区间为 151 到 173。因此,回归方法非常有效。
3.这两种方法相比如何?
到目前为止,我们只使用一个测试集来评估这两种方法。为了更系统地比较这两种方法,我从原始训练和测试数据集的联合中重新采样,以创建 500 个新的训练和测试数据集。然后,我将这两种方法应用了 500 次,并计算了这 500 个样本中每种方法的均方误差。下图显示了每种方法的相对性能。
使用 500 个随机训练和测试分割对各种聚集预测方法的评估。
在分类模型中,逻辑模型做得最好(具有最低的 MSE)。XGBoost 是比较接近的第二名。兰登森林差远了。总体预测的准确性主要取决于估计概率的准确性。逻辑回归直接估计生存概率。类似地,XGBoost 优化了逻辑损失函数。因此,两者都提供了对概率的合理估计。相比之下,随机森林将概率估计为将示例分类为成功的树的份额。正如 Olson 和 Wyner (2018) 所指出的,将该示例归类为成功的树的份额与该示例成功的概率无关。(出于同样的原因,随机森林的校准图往往很差。)虽然随机森林可以提供较高的 AUC,但估计的概率不适合聚合。
在所有方法中,聚合回归模型的 MSE 最低,甚至超过了分类逻辑模型。天真的预测在这个评估中是有缺陷的,因为在测试数据中幸存者的份额并不独立于在训练数据中幸存者的份额。如果我们刚好火车里有很多幸存者,那么测试中的幸存者自然会少一些。即使有这个障碍,天真的预测还是轻松击败了 XGBoost 和 Random Forest。
4.结论
如果我们只需要聚集特征,估计和聚集个体分类概率似乎比需要的更麻烦。在许多情况下,训练集中幸存者的比例是测试集中幸存者比例的一个很好的估计。这个月的客户流失率可能是下个月流失率的一个很好的估计。如果我们想理解是什么驱动生存或流失,更复杂的模型是值得建立的。当我们的训练数据与测试数据具有非常不同的特征时,以及当这些特征影响生存或流失时,也值得建立更复杂的模型。然而,即使在这些情况下,很明显,当需要数值预测时,使用针对单个分类优化的方法可能不如针对数值预测优化的方法。
你可以在这里找到这张纸条背后的 R 代码。
新冠肺炎与之前发现的冠状病毒有多相似
原文:https://towardsdatascience.com/how-similar-is-covid-19-to-previously-discovered-coronaviruses-c3d9f25840f7?source=collection_archive---------18-----------------------
不同冠状病毒基因组组成谱的简单比较
随着新冠肺炎的基因组数据在国家生物技术信息中心( NCBI )公开,我想看看 2019 年的新型冠状病毒与其他冠状病毒相比有多相似。在这篇文章中,我将比较新冠肺炎的参考基因组和以前发现的两种不同冠状病毒的参考基因组;一种人类冠状病毒和一种蝙蝠冠状病毒。
免责声明 : 本文基于我对 NCBI 上可获得的参考基因组的分析,旨在适应、学习和理解宏基因组组成的概念。这不是任何官方研究的一部分,研究结果也不适合任何形式的决策。
对于这种分析,我考虑了以下三种冠状病毒基因组。
- SARS 冠状病毒 ZJ0301
- 蝙蝠 SARS 样冠状病毒分离株 bat-SL-CoVZC45
- 新冠肺炎(新型冠状病毒)
图片来自 Pixabay 的 Olga Lionart
考虑的标准
我考虑了一些标准来比较所选冠状病毒的组成。
- 寡核苷酸组成
- GC 含量
寡核苷酸组成
寡核苷酸被认为是少量核苷酸的连续串。在计算术语中,我们将寡核苷酸定义为 k-mers (大小为 k 的单词)。在这个比较中,我考虑了三聚体(又称三核苷酸的三聚体)及其组成(三核苷酸组成)。有 32 (4 /2)个不同的三聚体。我们通过计算三核苷酸出现的次数并除以三核苷酸的总数来获得每种不同三核苷酸的标准化频率。我们将这些计数标准化,以避免由于序列长度不同而导致的任何不均匀性。
Normalised freqeuncy of kᵢ = Number of occurrences of kᵢ / total number of k-mers (where kᵢ is the iᵗʰ k-mer)
寡核苷酸组成被认为在微生物物种中是保守的,并且在物种之间是变化的[1][2]。
GC 含量
GC 含量(或鸟嘌呤-胞嘧啶含量)是序列中不是鸟嘌呤就是胞嘧啶的核苷酸的百分比。
GC content = (G + C) / (A + G + C + T) * 100
GC 含量也因物种不同而不同[2]。
冠状病毒基因组的个体分析
让我们首先单独分析冠状病毒基因组。
1.SARS 冠状病毒 ZJ0301
图一。SARS 冠状病毒 ZJ0301 的三核苷酸组成
这是 2003 年发表的中国报道的 SARS 冠状病毒 ZJ0301 的参考基因组[3]。
出版 : 严重急性呼吸综合征相关冠状病毒基因型及其表征和严重急性呼吸综合征相关冠状病毒基因分型和系统发育的分子生物学分析
图 1 显示了 SARS 冠状病毒 ZJ0301 的三核苷酸组成。
2.蝙蝠 SARS 样冠状病毒分离株 bat-SL-CoVZC45
图二。蝙蝠 SARS 样冠状病毒分离株 bat-SL-CoVZC45 的三核苷酸组成
这是蝙蝠 SARS 样冠状病毒[4]的参考基因组,该病毒被认为与新冠肺炎病毒非常接近[5]。
出版物 : 一种新型 SARS 样冠状病毒的基因组特征及其在中国蝙蝠体内的传染性
图 2 表示蝙蝠 SARS 样冠状病毒的三核苷酸组成。
3.新冠肺炎(新型冠状病毒)
图三。新冠肺炎的三核苷酸组成
这是 NCBI 公布的 2019 年新型冠状病毒的最新参考基因组[5]。
- 生物项目编号 : PRJNA
- SRA 数据 : SRX
- 出版 : 中国一种与人类呼吸道疾病有关的新型冠状病毒
图 3 显示了新冠肺炎的三核苷酸组成。
不同冠状病毒的比较
三核苷酸组成
图 1、图 2 和图 3 似乎显示了确切的模式,并且在相同的范围内有所不同,但是如果我们如图 4 所示将它们绘制在一起,我们可以看到一些差异。我们可以观察到,与 SARS-CoV 相比,新冠肺炎和 bat-SL-CoV 显示出非常相似的三核苷酸组成模式(特别是对于三聚体,如 AGG、ATC、ATG、CTA、CTC、GAA 和 GTA)。
图 4。不同冠状病毒的三核苷酸组成
四核苷酸组合物
图 5 显示了不同冠状病毒基因组的四核苷酸(四聚体或四聚体)组成模式。可以看到类似于三聚体的趋势(尤其是 ACAA、AGAA、ATAA、CTAA 和 CATC 等四聚体)。
图五。不同冠状病毒的四核苷酸组成
GC 成分
GC content of SARS-CoV: 40.23% GC content of bat-SL-CoVZC45: 38.35% GC content of COVID-19: 37.44%
根据上面列出的 GC 含量值,我们可以说 bat-SL-CoVZC45 和新冠肺炎的 GC 含量非常相似,约为 37-38%。
图六。不同冠状病毒的 GC 组成
主成分分析和 t-SNE 分析
图 7 和图 8 显示了三种冠状病毒基因组中每一种的 100 个长度为 5000 bp 的模拟读数的三核苷酸组成载体的二维 PCA 图和 TSNE 图。您可以看到,在图中,与新冠肺炎(绿点)和 bat-SL-CoV(红点)相对应的一些点比它们与 SARS-CoV(蓝点)的距离更近。
图 7。三种冠状病毒基因组中每一种的 100 个长度为 5000 bp 的读数的三核苷酸组成载体的 PCA 图
图 8。三种冠状病毒基因组中每一种的 100 个长度为 5000 bp 的读数的三核苷酸组成载体的 TSNE 图
最后的想法
这篇文章中的发现支持了最近发表的题为一种与中国人类呼吸系统疾病相关的新型冠状病毒的论文中的说法,作者在论文中表示,他们组装的基因组与蝙蝠 SARS 样冠状病毒分离株蝙蝠 SL-CoVZC45 非常接近。自从 2003 年 SARS-CoV 被发现以来,这种新的毒株确实发生了变化。
我添加了一个 jupyter 笔记本,其中包含了本文使用的代码,您可以通过下面的链接随意试用。
为了方便起见,我在笔记本中直接添加了标准化的 3-mer 和 4-mer 计数。如果你想自己算数,可以用一个软件,比如高棉或者 DSK 。
你可以从我以前的文章中读到更多关于人们对新冠肺炎、基因组组装和宏基因组学的看法。
使用 Twitter 对 2019 年新型冠状病毒爆发进行简单的情感分析
towardsdatascience.com](/2019-novel-coronavirus-peoples-thoughts-8c06c3caf20e) [ 基因组组装——基因组分析的圣杯
组装 2019 新型冠状病毒基因组
towardsdatascience.com](/genome-assembly-the-holy-grail-of-genome-analysis-fae8fc9ef09c) [ 宏基因组学——谁在那里,他们在做什么?
深入了解微生物群落的数据
towardsdatascience.com](/metagenomics-who-is-there-and-what-are-they-doing-9feed9)
我希望你觉得这篇文章很有趣。我很想听听你的想法。
感谢您的阅读!
干杯,大家注意安全!
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以 这里 。
参考
[1]卡林,S. 等。细菌基因组的组成偏差和进化含义。细菌学杂志,179(12),3899–3913(1997)。
[2] Dick,G. J. 等微生物基因组序列签名的社区范围分析。基因组生物学,10(8),R85 (2009)。
[3] L .李等等严重急性呼吸综合征相关冠状病毒基因型及其表征。中国医学杂志。116(9):1288–92 (2003).
[4] D. Hu 等一种新型 SARS 样冠状病毒的基因组特征及其对中国蝙蝠的感染性。新兴微生物&感染。第 7 卷第 1 期(2018 年)
[5]吴,赵,俞等一种在中国发现的与人类呼吸系统疾病相关的新型冠状病毒。性质 (2020)。
模拟社交网络揭示了为什么我没有朋友,也没有空闲时间
原文:https://towardsdatascience.com/how-simulating-social-networks-revealed-why-i-have-no-friends-and-also-no-free-time-a61dec4d677a?source=collection_archive---------50-----------------------
友情悖论什么时候真的是悖论?
艾莉娜·格鲁布尼亚克在 Unsplash 上的照片
友谊悖论是一个观察到的社会现象,平均而言,大多数人的朋友比他们的朋友少。有时人们更强烈地表示,大多数人的朋友比他们的大多数朋友少。从有关该话题的热门文章中,不清楚后一种说法是否普遍属实。我们来调查一下!
我本以为这很难确定,也许这就是为什么直到 1991 年才有人发现它。在斯科特·费尔德的原始论文《为什么你的朋友比你拥有更多的朋友》中,他提出这可能是不满足感的一个来源。但是,我的意思是,它不像人们保持他们的朋友的每个朋友的记录,更不用说他们自己的朋友的列表,不是吗?这在 1991 年可能是真的,但现在在脸书时代,我们可以轻松做到这一点——可能很多人都这样做。
我的书里有多少张脸
事实上,为什么不呢,我要试一试。我在脸书有 374 个朋友。我不确定为什么。不管怎样,让我们随机抽取 10 个朋友,然后数一数他们有多少个朋友。统计如下:
Friend 1 - 522 Friend 2 - 451 Friend 3 - 735 Friend 4 - 397 Friend 5 - 2074 Friend 6 - 534 Friend 7 - 3607 Friend 8 - 237 Friend 9 - 1171 Friend 10 - 690
这些朋友的平均好友数量是 1042 。所以平均来说,我的朋友比我的朋友少。此外,在这 10 个朋友中,我的朋友比其他人都少,除了其中一个——第 8 个可怜的朋友。
好吧,但这不是一个悖论——尤其是如果你了解我的话。我们看看我网络中的其他人怎么样,比如朋友 2。朋友 2 有 451 个朋友,因为脸书是一个非常安全的网站,自然会保护用户的隐私,所以我们可以朋友 2 的朋友的个人资料,看看他们有多少朋友。朋友 2 的 10 个随机好友拥有的好友数量为: 790 、 928 、 383 、 73 、 827 、 1633 、 202 、 457 、 860 和121朋友 2 的朋友平均有 627 个好友,比 451 个多。此外,这些朋友中的六个有超过 451 个朋友,所以朋友 2 的朋友也比他们的大多数朋友少。如果我们对我所有的朋友重复这个练习,我们仍然会发现大多数人的朋友比他们的朋友少,尽管大多数人已经比我有更多的朋友了!
你可能有一种直觉,这是自相矛盾的。我对为什么感觉矛盾的直觉来自下面的类比。考虑你的身高。也许你比一般人矮。也许你有一些朋友也比一般人矮。但是,你期望发现至少一半的人实际上比平均水平高。那毕竟是一种“平均”的直觉。那么,为什么朋友之间不是这样呢?也就是说,尽管我和朋友 2 的朋友比我们的朋友少,但是那些有很多朋友的人的朋友肯定比他们的朋友多。这是真的,但是这些受欢迎的人极其罕见,那就是比如好友数和身高的区别。
在一个典型的社交网络中,有很多朋友很少的人,也有少数朋友很多的人。很红的人,在很多人的朋友圈都算。而且,冷门的人在很多朋友圈都不算。再以我的脸书友谊为例。显然,我没有几个脸书朋友。所以,看起来很多人比我有更多的朋友。但是——这里是最重要的一点——那些人不太可能把我和我为数不多的朋友算在他们的朋友圈里。朋友 2 和我只有 2 个共同的朋友就证明了这一点。所以朋友 2 的所有朋友,当他们去数他们自己朋友的朋友数量时,不会让我和我的低朋友数使分布偏向他们。
这就是“空手道小子”如此不合群的原因吗?
让我们看一些更小的例子,在这些例子中,我们可以计算网络中的每个人和他们的朋友。最著名的社交网络(至少对网络理论家来说)是扎卡里的空手道俱乐部。看起来是这样的。
*扎卡里的空手道俱乐部。节点颜色引导视线,并根据每个人的朋友数量进行标记。*图片作者| 来源。
这张照片展示了一个空手道俱乐部中的 34 个人(大约 1970 年)以及他们在课外与谁互动。颜色只是引导眼睛去判断每个成员有多少朋友。你可以看到一个人只有一个朋友,而另一个人却有 17 个!这个图已经太大了,无法手工计算,但是计算机可以遍历网络中的每个节点,计算朋友和朋友的朋友。在扎卡里的空手道俱乐部,我们有,
*The fraction of people with fewer friends than their friends have* *on average* *is 85.29%.The fraction of people with fewer friends than* *most* *of their friends is 70.59%.*
*扎卡里空手道俱乐部的朋友和朋友的朋友直方图。通过查看网络中每个人的每个朋友的朋友来收集数据。那些朋友的分布可以用均值和中位数来概括。对于每个人的每个朋友,这些数字被列表并绘制在下一行。*图片作者| 来源。
上面的直方图详细显示了数据。你可以再次看到有很多朋友的少数人的关键特征。显然,那些少数人会比他们的朋友拥有更多的朋友。但这就是重点——这样的人很少!一旦我们查看“朋友的朋友”的完整分布,我们会发现它明显变平,并且更有可能找到大量的朋友。下面的两个直方图显示了网络中每个人的朋友数量的平均值和中间值。请注意,在这两种情况下,每个人都有大约 9 个朋友。这比网络中的绝大多数人多得多!事实上,34 个人中只有 4 个人有 9 个以上的朋友。
去大还是去…实际上我们去多大似乎并不重要
现在让我们回到脸书。这一次,我们将使用从 10 个人那里收集的数据,这些数据将被匿名化并公开。它包括大约 4000 人,这些人在不同的社会圈子里与这 10 个人有联系。社交网络是这样的。
*脸书自我图,显示围绕受欢迎的个人的社区结构和聚类。*图片作者| 来源。
我们也可以计算这个网络的朋友和朋友的朋友。细节是这样的。
*脸书自我图中朋友和朋友的朋友的直方图。通过查看网络中每个人的每个朋友的朋友来收集数据。那些朋友的分布可以用均值和中位数来概括。对于每个人的每个朋友,这些数字被列表并绘制在下一行。*图片作者| 来源。
总之,我们发现,
*The fraction of people with fewer friends than their friends have* *on average* *is 87.47%.The fraction of people with fewer friends than* *most* *of their friends is 71.92%.*
很像!但也许这只是一个巧合。毕竟只是两个数据点。我们如何为任何社交网络测试这个想法?模拟!
假装直到你成功
模拟是通过研究事物的比例模型来理解事物的一种工具。风洞中的飞机机翼模型就是一个典型的例子。今天,许多模拟完全是在计算机上完成的。在社交网络的背景下,有许多模型,但出于纯粹的懒惰,我们将选择所谓的barabási–Albert 模型,因为它已经在我正在使用的计算机包 NetworkX 中实现。如果我们创建一个 34 人的模拟社交网络(与空手道俱乐部的人数相同),它看起来会像这样。
*的一个实例巴拉巴希-艾伯特模型 *上有 34 个节点。它是逐节点构建的,将每个新节点连接到两个先前的节点,并优先选择高度连接的节点。这是一个社交网络的例子。图片作者| 来源。
它看起来和空手道俱乐部没什么不同,是吗?数字数据也很相似。
上例 barabási–Albert 模型图中朋友和朋友的朋友的直方图。通过查看网络中每个人的每个朋友的朋友来收集数据。那些朋友的分布可以用均值和中位数来概括。对于每个人的每个朋友,这些数字被列表并绘制在下一行。图片作者| 来源。
在这个例子中,感兴趣的数字是,
The fraction of people with fewer friends than their friends have* *on average* *is 79.41%.The fraction of people with fewer friends than* *most* *of their friends is 70.59%.
这很好,但是模拟的真正魅力在于快速测试多个例子的能力。以上只是一个模拟的社交网络。为了对我们的结论有充分的信心(当然是相对于模型的假设),我们需要在随机生成的社会网络上进行许多模拟。
模拟所有的图形!
如果我们在 34 个人的 10,000 个随机社交网络上重复上述练习,我们发现,
The fraction of people with fewer friends than their friends have* *on average* *is 79.31%.The fraction of people with fewer friends than* *most* *of their friends is 65.31%.
因此,现在我们可以有把握地说,朋友悖论在任何社交网络中都存在——至少有一个社交网络与有 34 个人的 barabási-Albert 模型具有相同的特征。另一件我们很容易做的事情是改变网络中的人数,看看这种趋势是否会在大型网络中继续。的确,如果我们增加人口,情况会变得更糟。随着社交网络中的人数增加,朋友数量少于朋友数量的人的比例(大多数或平均)也增加了。
*《友谊悖论》展示了 100 多个随机选择的社交网络,它们是用 巴拉巴希-阿尔伯特模型 *创建的,用于增加网络规模。图片作者| 来源。
酷,酷。有什么不那么令人沮丧的事情要告诉我们吗?
已经表明这种矛盾也不仅限于朋友。当你和你的朋友比较时,你也可能在收入、推特粉丝和你的快乐程度方面有所欠缺——这个事实可能没有帮助。但是,好吧,废话说够了——我们现在都感觉很糟糕!我们肯定能从这一切中收集到一些积极的东西,对吗?是啊!
因为你的朋友比你接触的人多,他们很可能会比你先感染病毒——或者通过社区传播的任何东西。事实上,研究人员表明,与其跟踪随机选择的人来判断疾病的传播,不如让这些随机选择的人说出一个朋友的名字,然后跟踪那个朋友,这样效率会高得多!在研究中,这组朋友比最初选择的人平均提前两周生病。可能还有很多其他的应用等待着被发现来解释友谊悖论。
在我们结束之前,我想问最后一个问题:友谊悖论一定会发生在任何社交网络中吗?这个问题的答案是肯定的,也是否定的。对于使用平均值的悖论陈述,答案是肯定的,这可以从数学上得到证明。也就是说,平均而言,人们的朋友数量少于或等于他们朋友的朋友数量的说法对于你能想到的任何社交网络都是成立的。对于使用多数(你的大多数朋友比你有更多的朋友)的说法,答案是否定的。关键因素是受欢迎的个人的存在或不存在。我们甚至可以创建完全随机的社会网络,这种悖论并不成立。考虑以下网络,同样超过 34 人。
*这个网络(来自erdős–rényi 模型 *)是通过考虑每个人都是其他每个人的朋友而构建的,具有某种固定的概率(在这种情况下为 75%)。图片作者| 来源。
对于我们拥有的这个社交网络,
The fraction of people with fewer friends than their friends have* *on average* *is 44.12%.The fraction of people with fewer friends than* *most of* *their friends is 44.12%.
从好友的详细分布可以更清楚的看出区别。朋友的数量是平均分布的。这和看人的身高差不多。所以,大约一半人的朋友比他们的朋友少,另一半人的朋友比他们的朋友多,剩下的人的朋友数量和他们朋友的平均数量完全一样。
上例 erdős–rényi 模型图中的朋友和朋友的朋友的直方图。通过查看网络中每个人的每个朋友的朋友来收集数据。那些朋友的分布可以用均值和中位数来概括。对于每个人的每个朋友,这些数字被列表并绘制在下一行。图片作者| 来源。
结论
当然,有一点应该是显而易见的,如果每个人都有完全相同数量的朋友,那么他们也会有和他们的朋友一样多的朋友!但当朋友的分布更加均匀时,情况也是如此。这说明了什么?我想这让平等主义团体的主张更加可信。但事实似乎是,更多的等级网络(无论是友谊、公司、Twitter 追随者等等。)自然增长,以适应维护大量连接所带来的复杂性。但这是另一篇博文的主题。与此同时,
请勿分享这个。而是告诉一个朋友来分享。
(本文的所有模拟和数据都可以在下面的 GitHub 上找到。)
“Sklearn 的 TF-IDF”与“标准 TF-IDF”
原文:https://towardsdatascience.com/how-sklearns-tf-idf-is-different-from-the-standard-tf-idf-275fa582e73d?source=collection_archive---------14-----------------------
让我们来看看与传统的 TF-IDF 相比,Sklearn 的 TF-IDF 的计算方法有何不同,并一步一步地进行分析。
亚历克斯·钱伯斯在 Unsplash 上的照片
这篇文章是在我试图使用标准公式手工计算 TF-IDF 矩阵时受到启发的,在首先计算 TF 和 IDF,然后将两者相乘之后,我意识到,与我在我的样本语料库上用 Scikit-learn 获得的结果相比,有一些不同,在那里我意识到 Scikit-learn 版本与大多数标准和传统版本之间的差异。事不宜迟,我们来了解一下区别。
TF-IDF 的标准定义是什么?
TF-IDF 定义:“词频-逆文档频率”,是一种数字统计,旨在反映一个词对集合或语料库中的文档有多重要。【2】
目的:使用 TF-IDF 而不是给定文档中记号出现的原始频率的目的是按比例缩小记号的影响,这些记号在给定语料库中非常频繁地出现,因此在经验上比在一小部分训练语料库中出现的特征信息少。【1】
如何计算到它?
它只是两个重量的乘积,TF 和 IDF 重量:
- TF: Term Frequency 衡量一个术语在一个文档中出现的频率,因为每个文档的长度不同,所以一个术语在长文档中出现的次数可能比短文档多得多。因此,TF 为:
- IDF:逆文档频率衡量一个术语的重要性。在 TF 中,所有术语都被认为是同等重要的。因此,我们需要通过计算以下各项来降低常用术语的权重,同时提高稀有术语的权重:
注意:在 Scikit-learn 中,log 不是以 10 为底的,尽管它是自然对数(它有一个底 e,e 是一个无理数和超越数,大约等于 2.718),
这里,有一个 IDF 实际含义的小例子:这个例子有 4 个术语:(a,船,移动和 mobilegeddon)。
来源:Moz 作者埃里克·恩格
可以看到,IDF 最高的是最稀有的词(Mobilegeddon),而词的频率越低,IDF 值就越小。
Scikit-learn TF-IDF
现在,Scikit-learn 的 [*TfidfTransformer*](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer)
和 [*TfidfVectorizer*](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer)
中计算出的 TF-IDF 与标准教科书符号有何细微差别?
不同之处如下:TF 保持不变,而 IDF 不同:IDF 的分子和分母中添加了“某个常数 1”,就好像看到一个额外的文档恰好包含集合中的每个术语一次,这防止了零除法“这是一种更具经验性的方法,而大多数教科书中的标准符号没有常数 1。
现在,让我们尝试将 Scikit learn TF-IDF 一步步应用到下面三个句子组成的语料库中,看看结果:
在文本语料库中,一些单词(例如,英语中的“some”、“a”、“h as”等)如果直接输入到分类器,这些非常频繁的术语将掩盖更罕见但更有趣的术语的频率。因此,使用停用字词删除来删除它们是最好且有效的方法,因为它们携带的关于文档实际内容的信息非常少。
形成来自语料库的所有独特单词的词汇将由这 5 个单词组成:“John”、“Cat”、“Eat”、“Fish”和“Big”。
词汇频率计数
术语频率(TF)
让我们从计算 Tf('John ',句子 1)开始
- 分子:“约翰”在句子 1 中只出现一次
- 分母:句子 1 中的总字数为:{John,cat}=2
TF(‘约翰’,句子 1) = 1/2
类似地,整个词汇表的 TF 值如下表所示:
结果 TF 表
反向文档频率(IDF)
如上所述,IDF 是一个衡量术语重要性的指标。IDF 值是必不可少的,因为仅计算 TF 本身不足以理解单词的重要性。
让我们来计算 IDF(“约翰”):
- 分子:句子总数=3
- 分母:包含“John”的句子数=1
IDF(’ John ')= log((3+1)/(1+1))+1 = 1.69
同样,整个词汇表的 IDF 值如下表所示:
生成的 IDF 表
应用(TF X IDF)产品
为第一个向量句子计算的标准化示例
最终的 Tf-IDF 向量表
相同语料库的 Sklearn_TF-IDF 输出
标准化步骤
在 Scikit-Learn 中,产生的 TF-IDF 向量然后通过欧几里德范数归一化。这最初是为信息检索(作为搜索引擎结果的排序函数)开发的术语加权方案,在文档分类和聚类中也有很好的用途。[1]
摘要
传统的 TF-IDF 和 Scikit-learn 的 TF-IDF 之间的主要区别在于分母和分子中存在酉常数。
标准与 Sklearn TF-idf 结果矩阵
总的来说,这不会改变 TF-IDF 矩阵的向量表示,与标准的相比,词汇将由更高的权重来表示,而在标准的 TF-IDF 表中,相应的值反而被设置得更小。
然而,TF-IDF 的核心原则将保持不变: TF-IDF 为不太频繁的词给出更大的值,并且当 IDF 和 TF 值都高时为高 ,正如我们可以在 cor 中为我们的不太频繁的词确认的那样:{John 和 Big}:对于它们两者,TF-IDF 实现了比 TF-IDF 表中剩余的更高频率的词更大的值。
总的来说,直到 2015 年,与同等重视每个单词的传统单词包方法相比,TF-IDF 一直是为表示文档相关性的单词分配权重的传统方法。t 仍然被积极用于有效地解决 NLP 问题。下面是 Sklearn 实现的代码。
参考
[1]https://sci kit-learn . org/stable/modules/feature _ extraction . html # text-feature-extraction
[2]https://en.wikipedia.org/wiki/Tf%E2%80%93idf
[3]墨子。2020.逆文档频率和唯一性的重要性。[在线]可从以下网址获得:https://moz . com/blog/inverse-document-frequency-and-the-importance-of-unique
小小的修改可以改变故事的视角
原文:https://towardsdatascience.com/how-small-modifications-can-change-the-perspective-of-a-story-eeed?source=collection_archive---------32-----------------------
保持图表和图形的简单性对于向更广泛的受众提供正确的视角至关重要。
艾萨克·斯密特在 T2 的照片
我想以一个简短的介绍开始这篇文章,因为这是我在 Medium 上的第一篇文章。我叫 Renee,从事数据工作已超过 11 年。我的主要精力一直放在讲故事和可视化数据上,所以如果我看到一些不能让故事发生的东西,我会忽略它或改进它。正如我们所知,数据是强大的,如果你歪曲了它,你可以创造一个全新的故事,而不是正确的故事。
昨天我在读一篇文章,这篇文章可视化了关于冠状病毒 2019-nCoV 的新闻数据。吸引我眼球的是文章中的以下两张图表:
图表 1 —全球感染(累计)
来自 Delfi Forte 的图表和数据
图表 2 —死亡人数(累计)
来自 Delfi Forte 的图表和数据
从本质上来说,它们看起来还不错。他们倾向于讲述不正确的故事。首先是安讯士的。在图 1 上,轴从 0–40000 运行,而在图 2 上,轴从 0–800 运行。这是一个 50 倍的差异。因此,如果我们比较这样的数字,我们应该总是使用相同的轴值。
为了让这张图表发挥作用,并向读者提供更多信息,我们可以做哪些改进或改变?本质上,有多种方法可以解决这个问题。
选项 1 —对两个图表使用相同的轴值
选项 2 —将这些图表合并成一个。你不会浪费宝贵的空间,而且你会对实际发生的事情有更好的了解。
方案三 — 死亡率。虽然病毒感染的传播及其死亡人数是有价值的,但它们的比率有更高的影响。这显示了威胁是增加还是减少,以及其行为是否确实发生了变化。在这种情况下,传播信息最有力的图表将包含 3 个指标:感染人数、死亡人数&死亡率。
所以让我们创建选项 3 。请注意,我使用的数据与创建上述图表时使用的数据相同,数据截止到 2 月 6 日。
我们取得了什么成就?
如果我们看看这个故事,它并不像记者最初在图表中展示的那样糟糕。虽然我们确实看到感染人数增加,特别是自 2 月 1 日以来,死亡率实际上自跟踪开始以来有所下降,从 2.8% 下降到 2.0% 。像往常一样,我们必须对这些数字持保留态度,因为数字会继续增加,事情会随着时间的推移而改变。作为参考,2019 年非传染性非典型肺炎死亡率低于非典或中东呼吸综合征死亡率(非典9.6%;MERS 34.5% )。
虽然分析部分确实发挥了作用,但本文的主要焦点是视觉视角。我从记者的角度出发,制作了一个图表,展示了更多的信息,每个人都可以根据这些信息做出自己的假设。以前,如果你没有注意到轴的,你会得到一个完全不同的故事,你错过了一个关键组成部分——死亡率。
因此,我们清理了图表和数据,添加了额外的信息,只用一张图表来讲述完整的故事。
亲爱的记者们,当你们向更广泛的公众传达信息时,请仔细阅读和使用你们的数据。这些图表可能看起来很酷,但是这些图表很容易误导你的读者,而且不是所有的读者都懂数据。
来源:
数据&图形—Delfi Forte—https://Forte . Delfi . ee/news/varia/uuenev-kaart-ja-graa fik-米兔-haigusjuhtu-lah tub-uuest-murettekitavast-allikast?id=
非典—https://www.who.int/csr/sars/country/table2004_04_21/en/世界卫生组织(世卫组织)
MERS —世界卫生组织(世卫组织)—http://applications . emro . who . int/docs/EMROPub-MERS-SEP-2019-en . pdf?ua=1 & ua=1
社交媒体公司如何知道向你展示什么:你好,逻辑回归!
原文:https://towardsdatascience.com/how-social-media-companies-know-what-to-show-you-hello-logistic-regressions-6f8cf19eaf17?source=collection_archive---------32-----------------------
检验为什么逻辑回归比线性回归更适合分类问题
图片作者:特里斯特·约瑟夫
数据科学是否已经接管了世界,这已经不再是一个问题。数据已经成为世界上最有价值的资源之一,以至于大公司内部几乎每一个决策都是由数据严格驱动的。这种对数据的极端使用在有广告和推荐的社交媒体公司或大型平台中尤为明显。这是有道理的,因为该平台的转换率是其业务的支柱。因此,用户看到的每一条内容都应该进行优化,以实现其最大潜力。
例如,当浏览 Instagram 时,有非常强大的机器学习算法在后台运行,以确定用户是否会对某个内容感兴趣。这些算法可以接受各种输入来确定兴趣,这些输入可以包括用户的年龄、用户通常与之交互的内容,甚至用户在 Instagram 上活跃的频率等特征。机器学习算法能够预测这一点的原因是因为这些算法可以找到模式并将其应用于大型数据集。因此,基于在平台庞大的用户群中检测到的各种模式,可以对各种用户子集进行预测。
图片作者:特里斯特·约瑟夫
现在,这种确定用户是否对内容感兴趣的行为被称为分类问题。分类问题指的是根据模型开发的标准将观察值分组到离散的类别中。更广泛地说,这个场景可以被认为是一个回归分析。这是一种寻找因变量与一个或多个自变量之间关系的技术。例如,人们可能会注意到天气越热,冰淇淋融化得越快。在这种情况下,温度是独立变量,冰淇淋融化的速度是因变量。除了温度之外,还有其他因素影响冰淇淋的融化速度。也许由于温度的剧烈变化,冰淇淋最初会融化得更快,但随着一切的液化,最终会融化得更慢。在这种情况下,吃冰淇淋的时间也是一个独立变量。
可以进行不同类型的回归分析,第一种是线性回归。顾名思义,它决定了因变量和自变量之间存在线性关系的程度。如果将线性回归应用于冰淇淋的例子,它将被称为多线性回归,因为有一个以上的独立变量预测冰淇淋的融化速度。线性回归是一个强大的工具,公司可以使用它来确定用户是否对推广的内容感兴趣。这里,回归的工作是预测用户对内容感兴趣的概率,例如,如果概率超过 70%,则判定规则是用户感兴趣。
图片作者:特里斯特·约瑟夫
然而,使用线性回归来预测这种概率有一个很大的潜在问题。事件的概率是对事件发生的可能性的一种度量,这种度量被限制在 0 和 1 之间(或 0%和 100%)。这意味着,即使整个世界完全确定某个事件将会发生,它现在也不会将该事件的概率增加到 112%。同样,负概率也不存在。但在线性回归下,情况并非如此。由于线性回归的性质,如果使用线性回归,它可能会预测出超出概率范围的值。此外,由于线性回归将“最佳拟合”线应用于数据,大得多(和小得多)的观察值将改变线的斜率;因此,当给定固定的决策规则时,改变分类。
正因为如此,逻辑回归更合适。这是一种回归,其中输出变量是具有两个或更多互斥级别的分类变量。也就是说,输出可以是“感兴趣”对“不感兴趣”,或者“类型 A”对“类型 B”对“类型 C”(其中 A 和 B 与作为基本类型的 C 进行比较)。逻辑回归预测概率,并根据适当的决策规则集分配分类。与线性回归相比,逻辑回归的优势在于其概率输出在概率范围内。这是因为逻辑回归遵循逻辑增长的数学概念。让我们回到冰淇淋问题上来,以便更好地理解这个概念。假设冰淇淋从冰箱里拿出来,放在一个更暖和、温度稳定的环境里。由于温度升高,冰淇淋开始迅速融化,但冰淇淋不会永远融化。相反,它会融化,直到所有的东西都液化,融化的速度将为零(因为它已经停止融化)。根据线性回归,即使冰淇淋已经停止融化,也可能预测到负融化率。
图片作者:特里斯特·约瑟夫
逻辑回归使用连续和离散测量来提供概率和分类观察值的能力使其成为机器学习中非常流行的方法。正如可以预期的,逻辑回归不仅可用于确定用户是否对特定内容感兴趣,也可用于模拟冰淇淋的融化速度。该方法在金融行业用于确定信用卡欺诈,在医疗领域用于识别恶性和良性肿瘤,甚至被电子邮件服务用于检测垃圾邮件。必须注意的是,由于逻辑回归的数学结构,变量的系数不能像线性回归那样直观地解释,它不能直接输出概率。相反,它输出一个事件的对数概率,这个输出可以通过数学变换转换成概率。
回归分析是强大的,但是考虑到手头的问题,利用最合适的分析类型是最重要的。逻辑回归最适用于因变量为二分变量或分类变量的分类问题。所以,下次你在 Instagram 上看到一些推广内容时,想想是什么变量让 Instagram 算法认为你更有可能对它感兴趣,这将是一件有趣的事情。
参考文献:
machinelingmastery . com/logistic-regression-for-machine-learning
career foundry . com/en/blog/data-analytics/what-is-logistic-regression
towards data science . com/regression-or-class ification-linear-or-logistic-f093e 8757 b9c
statistically significant consulting . com/regression analysis . htm
其他有用的素材:
saedsayad.com/logistic_regression.htm
stats.idre.ucla.edu/stata/dae/logistic-regression/
machine learning plus . com/machine-learning/logistic-regression-tutorial-examples-r/
你的城市有多恐怖?绘制和预测可怕的东西
原文:https://towardsdatascience.com/how-spooky-is-your-city-mapping-and-predicting-scary-stuff-26b7dea892bd?source=collection_archive---------41-----------------------
互动地图和令人毛骨悚然的现象预测建模…为什么不呢?让我们享受一下数据科学的万圣节乐趣。
照片由 加里·穆利曼 上 下 。
不管你是不是那种寻找幽灵的人,你猜怎么着:你可能住在一些令人毛骨悚然的东西附近。
为了纪念这个季节,我们认为做一些可怕的地图和怪异现象的石化预测会很有趣。数据科学不一定只是针对严肃的学科!我将向您展示我是如何使用 Alteryx Designer、Python 和映射包 follow 来分析和映射这些数据的。
美国最诡异的地方(也是最不诡异的地方)
为了了解美国大都市地区有多恐怖,我根据每个大都市地区的墓地和闹鬼地点的密度,以及人均 UFO 目击事件和大脚怪遭遇,为每个地区创建了一个(愚蠢的)恐怖评分。(更多关于下面的数据来源。)
下面的地图显示了 352 个都会区,并在弹出窗口中显示了每个都会区的数据点。(互动版请访问本网站。)下面我就告诉你我是怎么用叶子搭建的。
作者图片
探索地图,找到你的城市!发微博你的小镇有多恐怖。
你的城市进入前 10 名了吗?
🏆十大最恐怖的都会区🏆
- 马萨诸塞州伍斯特
- 马萨诸塞州普罗维登斯-沃里克
- 华盛顿-阿灵顿-亚历山大,DC-弗吉尼亚州-马里兰州-西弗吉尼亚州
- 马萨诸塞州波士顿-剑桥-牛顿
- 宾夕法尼亚州费城-卡姆登-威尔明顿
- 纽约-纽瓦克-泽西城,纽约州-新泽西州-宾夕法尼亚州
- 马萨诸塞州巴恩斯特布尔镇
- 金斯波特-布里斯托尔-布里斯托尔,田纳西州-弗吉尼亚州
- 宾夕法尼亚州阿伦敦-伯利恒-伊斯顿
- 俄亥俄州辛辛那提市
作为一名西海岸居民,看到前 10 名名单明显集中在东部,我有点失望!(俄勒冈州所有的大脚怪目击事件肯定都有意义吧?!)但当你深入研究数据时,这些排名是有意义的。排名前十的地方往往有大量的墓地分布在小的地理区域内。他们有悠久的历史和许多闹鬼的地方,他们有许多 UFO 目击事件(尤其是纽约)。
你有没有从地图上发现你正处于一个可怕的超自然活动的温床?想远离食尸鬼、外星人、大脚怪和幽灵吗?让我们看看在美国什么地方你可以远离令人毛骨悚然的爬行动物。下面的热图——也是用 lyum 构建的——是基于所有怪异的东西的纬度/经度:墓地、闹鬼的地方、大脚怪遭遇和 UFO 目击——所以热图上更强烈的区域有更多这些东西。(互动版请访问本网站。)
作者图片
虽然热图最初可能会让你觉得到处都是不祥之兆,但放大后,你会发现一个和平宁静的绿洲供你逃离!
你会选择地图上的哪个安静的地方来躲避幽灵、妖精和其他可怕的生物?发布推文并分享您的目的地。
寻找可怕的地方来绘制地图
首先,当然,我需要找到令人毛骨悚然的东西:墓地的位置和细节、闹鬼的地方、 UFO 目击事件和全国各地的大脚遭遇。令人惊讶的是,后三者,包括纬度/经度数据,都是由数据科学家 Timothy Renner 汇编并公开共享的。然而,墓地的位置有点难以找到。我用这些美国人口普查文件中每个州的著名地标进行过滤,只识别出墓地,并提取出它们的纬度和经度。
在 Alteryx Designer 中组合这些数据后,我使用其空间工具为每个“鬼地方”创建带纬度/经度的点,包括所有四类令人毛骨悚然的东西。Designer 的 Allocate Input 工具为美国主要大都市地区引入了有用的人口和地理信息,包括表示每个城市物理区域的空间对象。
最终,我想把每个怪异的地方分配到正确的大都市区域。将幽灵点和大都市地区的空间对象插入 Designer 的空间匹配工具,为我完成了所有的工作,并使人口数据加入到这些地方成为可能。
图片来自 GIPHY
构建地图
我使用 Alteryx Designer 中的 Python 工具和包follow构建了这些地图,这是一种将每个城市区域的纬度/经度点放置到地图上并生成热图的超级简单的方法。follow 使用leafle . js进行交互,但是所有的 JavaScript 都在幕后进行。各种各样的定制选项都是可能的,包括八种不同的免费背景地图,让你的地图有些风格,以及使用工具提示,小地图和表情符号标记的选项。
follow 还允许您使用 HTML 为您的标记制作格式良好的弹出窗口,在这里使用非常有趣。这个例子展示了一种格式化 HTML 的方法,你可以在下面看到我是如何使用这个选项的。
然后,我将地图设置为从特定位置(美国大陆的中心)开始,使用深色主题,并包含地图比例。此外,因为地图上的 352 个标记会让浏览者不知所措,所以我决定将这些标记聚集起来;当用户放大时,每个聚类扩展成单独的标记。for 循环遍历 dataframe 并生成地图上的点,在我提供的 HTML 中格式化,并将它们添加到要放置在地图上的标记簇中。
我在一个单独的数据文件中也有所有幽灵遭遇和地点的纬度和经度,这就是我用来生成上面的热图的。使用“叶子”创建热图甚至比制作上述基于标记的地图更简单:
您完成的地图可以保存到您指定的文件路径的 HTML 文件中。在 Alteryx Designer 中,我只是将我创建的两个文件路径保存到一个 dataframe 中,并为了方便起见将其写出 Python 工具。无论你用什么方法,只要在浏览器中打开文件就可以享受你的创作了。
根据我在这一点上收集的信息,制作地图既简单又有趣。但是,除了找出美国哪里出现了幽灵,我还想知道:我们能否预测什么会让某个特定的大都市地区变得更加幽灵?
图片来自 GIPHY
添加令人恐惧的功能
还有什么能让一个地区变得更加阴森恐怖?我想到了一些可以在合理的时间内找到公开可用数据的可能因素:
- 可能与超自然“活动”感知有关的恶劣天气现象
- 当地人对超自然现象的看法(如果更多的人相信,也许会有更多的事情发生)?)
- 人口密度(幽灵般的遭遇倾向于发生在人们或多或少分散的区域吗?)
- 当地人的年龄(也许年长或年轻的人口更倾向于看到/报告超自然现象?)
- 房价(也许在或多或少富裕的州,人们倾向于经历更怪异的事情?)
对于恶劣天气数据,我从 NOAA 获取了龙卷风、冰雹和破坏性大风事件的 2018 年记录,并在将它们与我更大的数据集匹配之前按州进行了汇编(尽管如果有更多的时间,我可以用 Alteryx Designer 的空间匹配工具将它们都匹配到特定的地铁区域)。
关于美国人对超自然现象的信念的公开数据更难找到;肯定有可用的数据,但大多数需要购买。我最后用了 2018 年的社会综合调查,其中包含了问题:“你相信人死后还有生命吗?”在公开的数据中,参与者的回答只标记了九个地理区域中的一个,而不是他们的具体位置,但我至少能够将每个灵异事件与该区域相信来世的人的百分比联系起来。
使用我之前引入的人口普查数据,人口密度很容易计算并作为一个新变量添加进来。该数据还包括大都市地区的平均年龄。对于房价,我使用了 Zillow 公开的单户住宅销售价格中值数据,并计算了每个州的平均值。
我没有找到每一个都很理想的数据,但是当然,用不太理想的数据前进是正常的。因此,我们将看看我们是否真的可以用这些数据做任何关于惊吓的预测。
图片来自 GIPHY
塑造恐怖
诚然,这不是数据科学任务中最“科学”的。但是让我们看看我们能想出什么,只是为了它的愚蠢的惊吓。
预测模型的目标是预测大都市地区的幽灵分数。我选择使用大都会地区的人口密度、该地区对来世的信仰、平均房价、所有单独的天气变量以及大都会地区人口的中位年龄作为预测指标。总的来说,令人毛骨悚然的分数与任何单一变量都没有很强的相关性;与种群密度的最高相关系数为 0.37。
我还在探索性分析中注意到,在幽灵分数中存在强烈的右偏,因此在继续建模之前,我对幽灵分数进行了对数转换,以实现分数的更正态分布。利用 Alteryx 社区上@ DavidM的提示,我还标准化了其他预测因子,因为它们的范围变化很大。
我尝试了线性回归、样条和随机森林模型。使用 80/20 训练/测试分割和模型比较工具,我发现随机森林模型表现最好,解释了分数中 58%的差异。该模型提供了 0.56 的 RMSE,以及其预测和实际怪异分数之间 0.79 的相关性。下图显示了模型中特征的相对重要性。
作者图片
我还让 Alteryx Designer 的智能套件的辅助建模功能尝试预测怪异的分数。它使用相同的训练/测试数据,表现最好的模型也是随机森林回归器,RMSE 为 0.72,其预测和实际幽灵得分之间的相关性约为 0.78。但是辅助建模也通知我调整后的 R 平方为 0.48;调整后的 R 平方是另一种相关性度量,它考虑了模型中使用的变量数量,对包含更多变量的模型进行惩罚。
以上三张图片由作者提供
为了加强这种分析,我很想获得更多关于超自然信仰的城市地区级数据,我会花更多时间微调天气和房价数据,而不是使用州汇总。此外,包含以下数据会很酷:1)一个城市建立的年份,以解决随着时间积累的墓地数量(正如在这篇博客文章/可视化中所讨论的);以及 2)到最近的军事基地和/或机场的距离,以帮助解释 UFO 目击事件(或者会吗?!👽 👽 👽).
因此,这两个建模结果都不是很壮观,但考虑到我们正在建模的内容和数据的不精确程度——嗯,它们还不错,想想这些模型告诉我们关于幽灵的事情很有趣。人口密度较高的地区今天有更多的人,但他们所有的墓地里也有更多的尸体。恶劣的天气事件似乎与灵异事件没有很强的联系(我认为某种天气至少会与 UFO 目击事件相关联,但是没有!).
也许幽灵般的东西终究不是那么容易预测的…它们只是幽灵般的,这就是它们有趣和迷人的地方。神秘继续!👻
原载于 Alteryx 社区 并精选于 Alteryx 数据科学门户 。
Spotify 如何理解您的音乐多样性
原文:https://towardsdatascience.com/how-spotify-understands-your-music-diversity-d3bed2cc3767?source=collection_archive---------34-----------------------
推荐系统
在 Spotify 测量用户消费多样性,以量化推荐系统的影响
照片由斯潘塞·因布罗克在 Unsplash 上拍摄
T4:如今,几乎所有的软件产品都缺乏某种形式的个性化。众所周知,这些都是由引擎盖下的推荐算法驱动的,像网飞和 YouTube 这样的服务每年都投入大量资金来优化这些系统。一些应用程序,如抖音将推荐系统放在中心位置,以推动应用程序的浏览量和病毒式传播。
Spotify 也不例外。
Spotify 于 2006 年由丹尼尔·埃克(Daniel Ek)和马丁·洛伦佐(Martin Lorentzon)在瑞典创立,目标是创建一个合法的数字音乐平台。目前,Spotify 拥有超过 5000 万首歌曲,来自 1500 多个流派。除此之外,每天还有大约 40,000 首歌曲添加到它的平台上!
截至 2020 年 3 月 31 日,Spotify 每月有 2 . 86 亿活跃用户,其中 1 . 3 亿是全球 79 个市场的付费用户。事实上,Spotify 预计,到 2020 年底,每月活跃用户数量将达到 3.28 亿至 3.48 亿。
鉴于大量的内容和庞大的用户群,Spotify 依靠推荐算法向其用户群推广内容并不奇怪。推荐算法推动了他们的顶级功能之一,每周发现,它允许用户通过找到与其他用户播放列表的相似性来尝试与他们喜欢的音乐类型相似的音乐。该公司目前正在测试一个赞助推荐功能,让艺术家团队通过推荐付费来赞助他们的内容。
显然,推荐系统在 Spotify 的内容消费中扮演着非常重要的角色。
然而,这篇文章并不是为 Spotify 唱赞歌。
相反,鉴于大量的内容和用户群,预计用户会有不同的口味。所以问题是:
Spotify 如何衡量其用户群中的内容多样性?
我们在这篇文章中回答了这个问题!这篇文章中的代码是在这里找到的。
什么是用户消费多样性?
如果你是 Spotify 用户,你可以通过 spotify.me 找到你音乐消费的一些有趣趋势。例如,你一天中最活跃的收听时间是什么,最喜欢的音乐类型和平均音乐节奏。或者你是否有一个烹饪爱好者的播放列表。
有趣的是,有一个横幅展示了你听过的音乐的多样性。
来源:作者的 spotify.me
当然,收集流行度和使用统计数据是非常简单的,这些数据可以作为推荐系统的数据。然而,假设我们想要确保给用户的推荐是多样化的。如何衡量多样性?
衡量多样性的两个标准指标是基尼系数和香农熵。
基尼系数图解(来源:维基百科)
基尼系数源于对社会不平等的经济衡量。通常参照洛伦兹曲线来定义。从图中可以看出,洛伦兹曲线绘制了人口总收入的比例( y- 轴),该比例是由人口中最底层的 x 累积所得。45 度线表示收入完全平等。从图中可以看出,基尼系数等于A/(A+B)。由于轴在 0 和 1(包括两端)之间测量,系数也等于 2 A 或 1–2B,因为等式 A + B = 0.5(三角形的总面积)成立。在上图中,对于推荐系统,我们可以用“人”来交换用户,用“收入”来交换量或其他可取的指标。
香农熵测度是以信息论之父克劳德·香农命名的经典测度。它在 1948 年的开创性论文《沟通的数学理论》中首次提出。它被定义为
其中 pᵢ 是随机变量 X 实现 xᵢ 的概率。注意,它是为离散随机变量定义的。对数底数通常设置为 b =2,以位为度量单位。熵将最大化当且仅当每个项目的流行度是独立的,并且按照均匀分布同分布。
这两种方法都有一个主要缺点:它们没有考虑项目之间的相似性。
任何做过销售的人都会告诉你,在任何一个系列中,只有一小部分商品是受欢迎的。一个典型的受欢迎程度排名会产生一个类似 Zipfian 的分布,有一个短头、一个长尾和一个远尾。
推荐系统面临的项目流行度的典型分布(来源:论文
大多数数据集中的项目不是独立的,正如这些度量所假设的那样。相反,一个项目和另一个项目之间往往存在关系,因为它们可能属于同一种音乐类型,就像 Spotify 的情况一样。
有什么更好的办法?
Spotify 衡量多样性的方法来自于通过使用歌曲嵌入来考虑歌曲之间的相似性。
Spotify 使用 Word2Vec ,这是一个众所周知的语言模型,它从语料库中学习单词的分布式表示。特别是,Word2Vec 应用于用户播放列表(超过 40 亿个!)来学习用户口味,帮助用户发现适合自己口味的音乐。
还有一些其他优秀的文章,以及使用 Word2Vec 进行播放列表 推荐的实现。下面是使用 t-SNE 将 Spotify 收藏的 10 万首歌曲投影到二维空间时,从 Word2Vec 获得的嵌入图。聚类的存在表明各组歌曲之间存在相似性,主要是由于音乐流派的存在。
为 Spotify 收藏中的 10 万首歌曲嵌入 t-SNE(来源:图 1
我们的参考来自一篇研究 Spotify 推荐系统对内容消费的影响的论文。他们将用户 uᵢ 在预定义时间段 T 内的多面手-专家(GS)得分定义为
加权中心在哪里
权重 wⱼ 是用户在时间段 T. 内收听歌曲 j 的次数
直觉上,如果用户听非常相似的歌曲,gs 分数将倾向于 1,因为选择更接近加权中心。相反,如果用户是多面手,那么根据余弦相似性的性质,分数将趋向于-1。
MovieLens 数据集上的多样性
让我们将 GS 分数应用于实际数据集。
我们使用 Movielens 数据集,这是一个公开可用的数据集,通常用作推荐系统的基准。这是 Jupyter 笔记本的链接。运行时,笔记本应该下载数据集。
计算 GS 分数的步骤如下:
- 在用户-电影评级对的预定义时间段上训练 Word2Vec 模型,以获得一组电影嵌入。
- 对于每个用户,计算中心电影嵌入。
- 最后,对于用户在该时间段内看过并评级的每部电影,计算用户的多面手-专家得分。
关于电影镜头的 Word2Vec 培训
我们首先在 MovieLens 数据集中的所有用户-电影交互上训练我们的 Word2Vec 模型。MovieLens 数据集具有从 1995 年到 2018 年的评级。它拥有 283,228 个独立用户。由于数据集只有少量唯一用户,我们将使用整个数据集。因此,时间段 T 从 1995 年跨越到 2018 年。
现在,Word2Vec 是一个半监督语言模型,因此定量确定项目(单词)向量的质量可能很困难。通常,Word2Vec 的输出用于另一个任务,比如分类任务,在这个任务中可以很容易地量化模型的质量。在 Spotify 的情况下,这可以通过模型测量推荐歌曲的量来实现。度量模型的 困惑度 是量化模型质量的常用方式,但也有其局限性。
注意,我们没有试图优化 Word2Vec 模型的许多超参数。
因为我们的目标是测量多样性,粗略地看一下有助于理解结果。在这里,我们展示了与经典喜剧窈窕奶爸最相似和最不相似的 5 部电影,结果来自训练过的模型。
与窈窕奶爸最相似的五部电影
与窈窕奶爸最不相似的五部电影
有趣的是,即使没有向 Word2Vec 提供类型信息,我们也可以看到《窈窕奶爸》与其他喜剧相似,而与戏剧不同。其他电影可以类似地评分,这表明该模型正在隐含地学习电影类型的概念。
我们可以在 Tensorboard 中使用 t-SNE 来可视化模型中的电影嵌入。我们可以看到电影组,尽管它们不像 Spotify 例子中的歌曲那样紧密聚集。
来自训练的 Word2Vec 模型的电影嵌入的 t-SNE
有了训练好的模型,我们进入下一阶段。
计算通才-专家分数
在数据集中,每个用户对一部电影的评价值在 1 到 5 之间。所以在我们对 GS 评分的定义中,我们把每个用户对每部电影的评分作为权重;这与 Spotify 最初定义中用户听一首歌的次数形成对比。
我们计算 MovieLens 数据集中所有用户的 GS 分数。为了比较,我们还计算了香农熵(使用基数为 2)。
MovieLens 数据集中所有用户的 Shannon 熵
香农熵衡量多样性,但更难解释它的意义。我们可以直截了当地说,有一些用户的熵为零,这意味着他们根本没有多样性,这些用户主要是只观看和评价了一部电影的用户。有许多用户如何观看和评价各种电影,但除此之外没有太多可说的。
MovieLens 数据集中所有用户的通才-专家分数
这里显示了整个 MovieLens 数据集的 GS 分数。从上面的直方图来看,大多数用户观看和评级的电影范围很广。1.0 bin 的峰值主要是由于只观看和评价了一部电影的用户。使用我们训练的 Word2Vec 模型,有 857 个用户观看并评价了一部以上 GS 得分在 0.90 以上的电影。
这两种方法有明显的不同。数据集中的一个例子是一个观看并评价了 140 部电影的用户。用户的香农熵和 GS 分数分别是 7.13 比特和 0.49。这种差异来自于香农熵平等地对待所有电影,而 GS 分数考虑了电影的相似性。它隐含地说明了电影类型,因为一个典型的用户只观看少数类型。
在该论文中,随着活动水平的增加,GS 分数趋向于以 0.5 为中心的稳定分布。有趣的是,对于 MovieLens,似乎有来自两个分布的两组用户,导致了图中所示的双峰分布。对此的调查将取决于未来的工作。
把一切都绑起来
所有这些背后都有一个简单的原则:
项目通常彼此具有相似性。
这是一个基本的假设,如果推荐系统首先要工作的话,这个假设必须成立。Spotify 衡量多样性的方法旨在利用学习模型来挖掘推荐项目本身之间的潜在关系。
如果我们从实施上退一步,步骤是清楚的:
- 对项目之间的关系建模,以及
- 将这些关系包括在你的多化评估中。
通过归纳这些概念,我们可以看到,没有必要使用 Word2Vec 来学习项目之间的关系。Spotify 使用 Word2Vec 的原因是该公司一直在为其推荐系统部署该模型。可以使用替代的无监督语言模型,例如 GloVe 和 WordRank 。通常最好使用具有较少超参数的模型,因为 Word2Vec 有许多超参数需要优化。
此外,*“*相似性”将由数据科学家根据应用和产品自行决定。例如,如果项目之间存在潜在的图结构关系,那么无论如何,都要使用图模型。如果矩阵分解模型被用于推荐,那么度量可以是从项目子空间获得的向量之间的余弦相似性。
这里一个微妙的假设是,Word2Vec 模型假设用户消费的顺序很重要。这对 Spotify 来说当然很重要,因为播放列表是根据用户的心情和一天中的时间来组织的。在您的应用中可能是也可能不是,因此假设数据集的排列不变性 即顺序并不重要的模型反而更合适。
最后
我们以一个更哲学的注解结束:
推荐系统会将我们的媒体消费从“率的世界转移到利基的世界”吗,或者是一个率变得更高的世界吗?
我们希望多样性的措施将有助于我们开发系统,为我们所有人提供更丰富、更新奇的体验。
此作品与黄楚欣合著。你可以查看她的个人主页!
[1]双关。
[2] Ashton Anderson,Lucas Maystre,Risabh Mehrota,Ian Anderson,Mounia Lalmas,“算法对 Spotify 上消费多样性的影响”,WWW '20,2020 年 4 月 20-24 日,台湾台北,第 2155-2165 页。
德州到底有多容易摇摆?
原文:https://towardsdatascience.com/how-swing-able-is-texas-anyways-83623f0911f3?source=collection_archive---------53-----------------------
从统计学上来说,你的投票很重要
在对过去的选举进行了大量的统计反思后,我努力思考“我的选票真的重要吗”这个概念,我想我并不孤单。
图片来源:亚当·托马斯[1]
我知道我不是唯一一个惊讶地看到德克萨斯州被列为谷歌宏中的“摇摆州”的人。怎么可能呢?某种错误?我在德克萨斯上学,让我告诉你,那个地方是一个红色的州。至少感觉是红色的…
然而,我们看到佐治亚州今年摇摆不定,这确实引出了一个问题:还有哪些州会摇摆不定?
让我们以德克萨斯州为例,我希望证明为什么,事实上,你的投票真的很重要,你应该认真对待它(不管我们的政治倾向)。
选举到底是什么?
当我写关于弗吉尼亚州的 T2 和宾夕法尼亚州的 T4 时,我指出新闻报道是来自有偏见的样本。现在,当我说“有偏见”时,我并不是说他们错了或者故意误导。我的意思是,由于收集结果的方式(例如,“亲自”投票自然计数更快),它给出了潜在人口(所有选票的总和)所讲述的故事的不完整画面。
此外,自从我开始写这个小系列以来,我一直在考虑将每个州的选票作为我统计分析的“目标”。从统计学的角度来说,我把“所有的选票”当作“总体”,我们可以从中“取样”来推断最终的结果。
这在数学上是合理的……除了当你提到选票本身实际上是该州人民代表的有偏见的样本。
选票计数可能是一种有偏差的抽样技术
民主运作的方式是,我们不假设我们知道人民的意愿是什么。我们问他们。大多数人的意见是我们(某种程度上)赞同的。所以我们建立了整个过程,你可以去投票,告诉政府应该通过什么法律,哪些官员应该任职。但事实是:
不是所有人都投票!!!
投票是一个有偏见的抽样过程,因为不是每个人都参与。我们不能假设,既然 75%的民主党人选择不投票,那么正好 75%的共和党人也会这样做。有时一个群体的更多人会出现在投票站。那么这对选举(和民主)会有什么影响呢?
德克萨斯摇摆舞?
在本文撰写期间,德克萨斯州已经统计了 98%的选票,唐纳德·特朗普以 60 万张选票的优势赢得了该州(52%对拜登的 46%)。但我很好奇,人们对他们想象中的必然结果的感知会不会真的表现出这种结果?我的意思是:假设这个州在 2020 年计票后会变成红色,这在它最终的“红色”中起了作用吗?
有没有一个宇宙存在于德克萨斯实际上转向了…民主党?让我们来看看…
按县划分
让我们做一个类似的分析,我们对弗吉尼亚州进行了分析,我们将该州按县进行了划分,以了解德克萨斯在空间上是如何分布的(即每个县是如何投票的?)。首先,我们再次看到,大约 50%的选票来自最大的 5 个县。
作者图片
在弗吉尼亚州,这种分布确保了拜登的胜利(尽管他一度落后 20%)。然而,我们可以看到,最大的县哈里斯不像弗吉尼亚州的费尔法克斯县那样不平衡(支持拜登)。我想知道…
拜登的支持者在这些大城市出现的人数不像在弗吉尼亚那样多,是因为他们认为这是一个注定失败的事业吗?德克萨斯州真的会是一个“蓝色州”吗?
德克萨斯会是一个蓝色的州吗?
正如我们在伊利诺伊州的例子中看到的,我们真的不需要超过 1 万张选票就能了解潜在人口的行为。让我们假设人们在这些县的投票方式反映了潜在人口对该县每个候选人的情绪(即哈里斯县倾向于 55%的蓝色)。然后,让我们以实际人口为例,假设 75%的人处于投票年龄(2016 年的一个相当不错的猜测)。
我们可以利用这两条信息来推断,如果每个达到投票年龄的人都去投票,结果会是怎样。更大的“蓝色”城市人口会像他们在弗吉尼亚做的那样吗?
不幸的是,结果并不像我希望的那样戏剧性。拜登从 46%降至 47%,特朗普从 52%降至 51%。德克萨斯州真的是一个红色州。(也就是说,如果这次选举显示的比例具有代表性,那么很难从这些数据中得知)。
但是我不满意。我想知道德克萨斯的摇摆程度 …不仅仅是它是红色还是蓝色。首先说一下我之前做的一个假设。
创纪录的投票率?
我们都在庆祝这次选举 66%的投票率,因为它打破了几十年来的记录。但是,这仍然意味着 33%的人没有投票。实际上,有 33%的人登记投票后选择不投票。
有多少人有资格投票,只是没有登记?因为我有的人口数据,我选择通过这个镜头而不是“注册选民”的镜头来看这些数字。结果是,如果你假设 75%的人到了投票年龄,这个数字会下降到 51%的投票率。现在,当然,有些差异是由移民或其他没有资格投票的成年人造成的…但我只想指出,66%这个数字已经被夸大了,总的来说,不足以成为“破纪录”。
德克萨斯州的民主党人会让我们所有人感到惊讶吗?
好的,回到德克萨斯……我们已经伪确立了(我意识到我们在这里做了很多手势)德克萨斯是一个红色的州。但是请记住,投票是一种有偏差的抽样机制。
是否存在一个有更多民主党人出现在投票站的世界?
我们记得蓝军需要弥补的赤字是 60 万英镑。占德州人口的百分之几?结果只有 3%左右。
好吧,但我们已经确定大多数德州人是共和党人。那么还有多少百分比的民主党人会出现。嗯,从上面玩具模型的数字来看,如果今年有 6.3%的民主党人参加投票,德克萨斯州就会转向蓝色。这将意味着 57%的德克萨斯州民主党人可能会在投票中让 52%的德克萨斯州共和党人(假设他们的人数没有变化)感到惊讶,德克萨斯州会人为地将其选举人团的全部 38 张选举人票给拜登。我们现在甚至不会谈论宾夕法尼亚州…
你的投票很重要
好吧,这只是一个玩具例子,但我觉得它说明了一点:选民投票率有很大的增长空间,如果一个群体在另一个群体之前发现了这一点,即使他们不是大多数,他们也可以真正改变政策的制定。
当然,如果有一个人没有去投票,可能只会稍微改变最终计票结果显示的投票比例。但是,如果它以一种不平衡的方式发生,它仍然会使我们的样本产生偏差。
考虑群体思维的概念。漫不经心或听天由命的态度可能会导致你周围的人也有同样的态度,反过来,这种态度会进一步传播给他们的朋友。如果可以假设人们会像他们的朋友或至少是身边的人一样投票,那么你的网络中的一大群人不投票可能会导致选举日的样本有偏差。想象一下,如果类似的事情发生在弗吉尼亚州费尔法克斯县的民主党人身上会怎样?由于有偏见的抽样调查,这可能会不自然地将拜登可预测的压倒性胜利变成势均力敌的胜利。德州也是如此(嗯,事实上正好相反)。
避免这种情况的最好方法就是养成投票的习惯。一定要让你的朋友和家人知道这有多重要。
这是你的权利。这是件大事。
如果你喜欢这篇文章
考虑鼓掌(或者 10?)所以 TDS 会更容易与他人分享
看看我关于选举的其他案例研究:
形象
[1]托马斯。https://unsplash.com/photos/lobgrHEL1GU
Tableau 如何帮助我获得数据分析专业的研究生工作
原文:https://towardsdatascience.com/how-tableau-helped-me-get-a-graduate-job-in-data-analytics-76dc448e2ad4?source=collection_archive---------43-----------------------
使用 Tableau 实现更有用、更吸引人的数据可视化
活动发起人在 Unsplash 上的照片
背景
工作面试和评估中心完全数字化,公司减少招聘或推迟研究生课程的日期,工作变得更具竞争力,这些都是在这些时期更难获得研究生工作的部分原因。
我自豪、欣慰和感激地宣布,我终于收到了加入分析和数据科学研究生项目的工作邀请。这是一个超过 1 年的漫长而艰难的旅程,申请研究生角色和项目,最终获得一份工作。
那么,在我没有完成求职申请的时候,我都做了些什么呢?另一个重要的技能是热情,想不断学习。在此期间,我完成了许多与数据科学和分析相关的在线学习计划、认证和竞赛。
一些显著的成绩是 Tableau 桌面、SAS 基础编程、微软 Azure/Power 平台和 IBM 数据科学专业证书的认证。通过在线学习和证书获得成就感可以提高你的动力,让自己忙起来。
我强烈建议学生和学习者查看 Coursera 、 DataCamp 、 Udemy 和 LinkedIn Learning 来发展数据科学技能,也可以改善你的简历,因为你可以展示你对学习的渴望(大多数大学免费提供 LinkedIn Learning,Udemy 对课程有定期折扣)。对于学生来说,在知名公司进行跨领域的虚拟实习也是很好的选择。
我如何利用 Tableau 获得竞争优势
Tableau 是一个数据可视化工具,用于以仪表板和工作表的形式创建可视化效果。它使用简单的拖放功能进行快速数据分析和更具吸引力的交互式数据可视化。
来源: Tableau
我的 Tableau 桌面专家考试成绩和徽章
数据分析工作应用程序中的一个常见阶段是“分析和演示任务。虽然这些阶段可能有所不同,但这是一个可以带回家的任务,因此申请人可以准备和创建一个 PowerPoint 演示文稿,以提交给招聘人员。他们给你一个场景和数据,供你分析,并提供见解和建议。
当我不得不从给定的数据中计算新的统计数据时,Excel 非常有用,在这种情况下,您可以使用简单的公式和函数,如 AVERAGE 和 SUM。然而,Excel 可以制作的图形可能非常简单,需要更多的努力才能在视觉上吸引人,这就是我使用 Tableau 的原因。
通过简单地将我的 Excel 电子表格导入 Tableau,我能够轻松地开始创建我的数字,以便在我的演示中使用。Tableau 允许连接到文本、JSON、PDF、Microsoft Access 等文件以及包括 Microsoft SQL Server、Oracle 和 MySQL 在内的服务器。
我创建的主要数据可视化是柱形图和高亮表,它允许你用颜色比较分类数据。下面显示了一个不带标签的突出显示表格示例:
来源:从 Tableau 构建一个高亮显示的表
突出显示带有示例超市数据集的表格截图
在收到我的评估中心的反馈后,我发现在数百个演示中,我是少数几个使用 Tableau 进行数据可视化的人之一,大多数申请人都使用 Excel 和 PowerPoint 的内置数据可视化工具。这给招聘团队留下了深刻的印象,使我脱颖而出。我在评估中心的演示部分获得了高分,迎接我的是一个激动人心的消息:在完成安全检查后,我将获得一个职位。
原来如此!
感谢阅读关于我职业旅程的开始!
教师如何利用数据科学分析学生成绩
原文:https://towardsdatascience.com/how-teachers-can-use-data-science-to-analyse-students-scores-26d0b2ec5694?source=collection_archive---------33-----------------------
教师更好地了解学生分数的无代码方式
Unsplash 上的科学高清照片
教师和教育机构处理大量与学生成绩相关的数据。在这个故事中,他们如何使用数据科学和高级分析来深入了解学生成绩数据。
语境
对于本教程,我们假设一个有 26 名学生的英语教师想要
- 更好地了解学生成绩
- 看看一个科目的表现是否会影响其他科目
- 按性别比较分数
- 按学生比较分数
获取数据
第一步是获取数据。老师在 excel 中收集所有学生的分数。分数分为以下几类:讲故事、写故事、参与、陈述、测验、听力
这是 excel 的样子
关于学生成绩的数据
尽管这是一个 26 人的小班,但你突然会觉得光是看数据就不知所措。现在让我们看看可以从这些数据中获得什么样的见解
最常见标志范围
以下是一些见解,有助于更好地理解学生的分数。
调查显示,大多数演示分数在 78 到 95 之间,而大多数测验分数在 74 到 92 之间。
了解学生分数最常见的范围可以让老师更好更快地理解学生的分数
演示标记的最常见范围
测验分数最常见的范围
相关性——看看一个科目的表现是否会影响其他科目
了解一个主题是否会影响其他主题是非常有用的。这有助于了解应该关注哪个科目来提高学生的成绩。这种见解可以通过关联获得
从数据中可以看出一个相关矩阵。您可以观察到演示分数和参与分数之间存在相关性。这意味着如果学生被要求做更多的陈述,也可以提高他们的参与分数
相关矩阵
展示分数与参与分数的相关性
聚类——根据数据对学生进行分组
根据数据对学生进行分组非常有用,因为这有助于管理和决定特定群体的具体行动。分组也称为集群。以下是基于学生分数的聚类结果
观察集群编号,您会看到
聚类 0——除了一个科目之外总体分数良好的学生
聚类 1 —总体得分较低的学生
聚类 2——总体得分高的学生
使聚集
学生比较
根据各种标准比较学生总是有用的。在这里,您将使用性别进行比较,然后在学生级别进行比较
如你所见,在这个例子中,女生比男生成绩好。此外,你对学生层次的低水平和高水平有一个概念
性别比较
学生明智的比较
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站进行零编码分析。https://experiencedatascience.com
请订阅每当我发布一个新的故事时,请及时通知我。
[ 每当 Pranay Dave 发表文章时,您都会收到电子邮件。
每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)
你也可以通过我的推荐链接加入 Medium。
[ 通过我的推荐链接加入 Medium—Pranay Dave
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)
https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接
技术如何塑造社会
原文:https://towardsdatascience.com/how-technology-shapes-society-df6204d9d81b?source=collection_archive---------10-----------------------
纳吉·阿诺在 Unsplash 上的照片
以及为什么计算机科学需要人文学科的帮助
大约九个月前,我申请了 GRFP——美国国家科学基金会(NSF)的博士奖学金。
在申请中,我提议研究计算机科学家如何将伦理和价值观编码到机器学习算法中,以及 ML 设计师如何更好地理解他们的设计选择的社会影响。
例如,如果一个 ML 工程师设计一个决策系统更加公平,他们用的是什么定义的公平?他们选择优化哪些评估指标?选择一个标准或定义而不是另一个标准或定义的社会后果是什么?
我提议研究算法嵌入的社会问题的潜在危害,如价值权衡,以及在设计 ML 系统时发生价值冲突时该怎么做。
我的申请被拒绝了。
昨天,我收到了审查我的提案的三位学者的评论。他们所有的反馈都是积极的;除了一句话:
“与其说这是一个 CS 项目,不如说是一个社会研究.”—审查者#2
当我读到这个评论时,我立即质疑,如果在人文学科领域而不是计算机科学领域申请这项资助,是否会更好;我很快意识到这象征着计算领域的一个历史性的基本缺陷——假设社会科学和计算机科学是分开的。
当我一遍又一遍地阅读评论者的评论时,我开始思考他们的话的含义。几个问题闪过我的脑海:
- 社会科学和计算机科学是什么关系?
- 计算机科学应该在社会中扮演什么角色?
- 如果我们继续将社会科学和计算机科学分开,会发生什么?
在探索这些问题时,我开始深入研究技术的真正目的是什么。随着技术故事的展开,我对技术在我生活中扮演的角色有了更深的理解,以及我作为计算机科学家在塑造社会中的角色。
1.社会科学和计算机科学是什么关系?
技术已经融入社会。从算法决策到隔离诱导的缩放呼叫,我们比以往任何时候都更多地将技术融入我们的生活。
我们的社会目前通过网络世界运行。关系被波动的带宽拴在一起。社区通过 0 和 1 联系在一起,形成了我们未来的基础和根源。
那么,社会科学和计算机科学是什么关系呢?
“技术不仅是人类活动的辅助工具,也是重塑人类活动及其意义的强大力量。”—兰登·温纳
几十万年来,人类利用科技上升到食物链的顶端。当发现问题时(例如,我们需要我们的食物保存更长时间),技术解决方案就形成了(例如,火!).
当然,随着这些技术工具越来越多地被引入社会,他们开始以意想不到的方式改变和重塑它(例如,火作为农业工具的使用在农业革命中发挥了很大作用)。
现在快进到 21 世纪,我们已经采用了一种新的技术形式,即计算技术,来帮助解决社会问题,包括:
互联网:帮助我们获取更多信息。
智能手机:让我们的生活更加移动。
社交媒体:以一种前所未有的方式连接世界。
随着互联网、智能手机和社交媒体作为问题的解决方案被引入我们的生活,它们永久性地改变了社会话语。
故事是这样的:
社会问题→技术解决方案→大规模社会变革
我们的全球社区目前由计算技术维系在一起。互联网、智能手机和社交媒体只是从根本上改变了文化景观的众多新技术中的一小部分。
社会科学是科学的一个分支,致力于研究人类社会以及这些社会中个人之间的关系。
那么,计算机科学和社会科学是什么关系呢?我很难想象这两个学科没有内在联系的世界。技术被创造出来,作为改变我们周围世界的一种手段,以适应当前社会的需要。随着计算技术继续发展到机器学习和人工智能等领域,社会变革的潜力简直无法想象。
2.计算机科学应该在社会中扮演什么角色?
具有讽刺意味的是,昨天下午我被安排在我的一门研究生课程上做一个 75 分钟的演讲,讲的是计算技术在解决社会问题中应该扮演的角色。我的班级,*以人为中心的机器学习,*由大多数计算机科学博士生组成。
我促成了一场基于论文计算在社会变革中的作用的讨论。我问研究生们,他们是否认为计算技术有助于修复社会。他们有一些有趣的见解:
一名学生提到,技术本身不对积极的社会变革负责,但人类有责任。他解释说,既然人类有责任创造技术,他们就应该总是怀着促进社会福利的目的来创造技术。
另一名学生质疑科技是否应该在解决社会问题中发挥作用。他表示,虽然他认为技术不应该延续歧视和不公正等社会问题,但它本身并不负责解决这些潜在的问题。
正如引发我们对话的那篇论文中所解释的,我们一致认为计算技术不应该试图解决社会问题。相反,它应该把自己看作整体的一部分。正如计算机科学可以延续社会问题一样,它也可以成为解决方案的一部分。
我们讨论了计算技术,尤其是机器学习系统,如何在设计过程的每一步改变社会。从选择用来训练模型的数据到定义用来衡量成功的指标,ML 设计决策是植根于社会科学的选择。
在阅读我被拒绝的 NSF 提案的评论后不到一天,我决定问问这些新兴的计算机科学专家,他们对社会科学和计算机科学之间的关系有什么看法。
他们一致认为这两者有着内在的联系。
“对社会技术系统的整体分析必须借鉴广泛的学科,以便全面识别利害攸关的问题。”— 计算在社会变革中的作用
3.如果我们继续将社会科学和计算机科学分开,会发生什么?
当我获得软件工程学士学位时,我被要求学习一门计算机伦理课程。这门课叫做职业责任。多亏了这堂课,我第一次开始理解技术在帮助或伤害社会中扮演的角色。
这门必修课改变了我对技术在我生活中的作用的基本理解,也改变了我职业生涯的轨迹。
在我选修这门课之前,我从来没有想过像道德、公平、正义和不平等这样的社会问题会与计算机科学交织在一起。我选了几十门计算机科学课程,但没有一门提到伦理这个词。我花了数百个小时设计算法,却从未质疑它们更广泛的含义。社会科学不是我的计算机科学课程中出现的话题。
尽管我生活在一个越来越受算法决策影响的世界,但多年来我一直被教导计算机科学和社会科学是分开的。当我决定开始攻读机器学习伦理学的博士学位时,我发誓要证明这两个学科并不是分开的,而是紧密相连的,以至于教授其中一个而不教授另一个是危险的。
因此,我的担心是:如果计算机科学和社会科学领域仍然被视为独立的实体,“伦理”将仍然是技术系统中的事后想法,计算机科学课程将继续只包括一门或零门“伦理/职业责任”课程,技术将继续以负面方式塑造社会。
这就是为什么必须认识到,计算机科学家必须接受教育,以社会责任感编写代码,并配备正确的工具来这样做。
考虑到这一点,我向拒绝了我的 NSF 申请的计算机科学家表示感谢。你的话单枪匹马地重新点燃了我的热情,去证明为什么没有人文学科的指导,计算机科学不应该,也不能存在。
你提醒了我为什么我的工作很重要。
你激励我继续做我正在做的事情。
我最初的推特帖子是关于对 GRFP 评论的最初反应
80/20 法则如何帮助决定在数据科学领域开始职业生涯所需的技能
原文:https://towardsdatascience.com/how-the-80-20-rule-can-help-decide-which-skills-you-need-to-start-a-career-in-data-science-fd60766eba05?source=collection_archive---------5-----------------------
使用帕累托原则增强你作为数据科学家的信心
在 Unsplash 上由 Austin Distel 拍摄的照片
1.学习数据科学的艰巨任务
数据科学是一个令人兴奋的领域,对熟练和有经验的专业人员的需求不断增加。传统的数据科学家拥有计算机科学、数学、工程或物理相关领域的背景。但我们也发现其他专业人士来自广泛的领域,不具备强大的数学背景,如语言学和基因组学,仅举几例。
但不管你的背景如何,当人们对数据科学产生兴趣时,我们都会问的问题是:
“要成为一名数据科学家,我需要具备哪些技能/知识?”。
许多作者都写过这个话题,基本技能的清单通常是铺天盖地的。一般来说,它涵盖以下主题:
- 数学(线性代数与微积分)
- 统计数据
- 编程(Python、R、Julia、Scala 等)
- SQL
- 数据角力和预处理
- 数据可视化
- 监督学习
- 无监督学习
- 深度学习
- 大数据平台(Spark 或 Hadoop)
- 云计算
- 沟通技巧
在滚动列表后,你通常会发现你没有掌握大多数被定义为“必不可少”的技能。你感到沮丧,你的冒名顶替综合症开始发作,你意识到你需要数千小时的学习,仅仅是为了覆盖成为初级数据科学家的基础知识。
嗯,坏消息是:
“你可能需要数千小时的学习和努力,才能掌握成为一名有经验的数据科学家所需的所有技能”。
但是好消息是:
“你可以开始你的职业生涯,专注于学习一些对任何数据科学项目都至关重要的技能”。
为了使用这种实用的方法,我们首先需要了解一个重要的概念,以帮助我们在成为数据科学家的过程中确定我们的优先事项。
2.进入帕累托原理
维尔弗雷多·帕累托是十九世纪的意大利工程师、社会学家、经济学家、政治学家和哲学家,他首先描述了现在被称为 80/20 法则或帕累托法则的东西。
帕累托原理背后的思想是,一些可观察的现象遵循不均匀的分布,80%的结果(或效果)来自 20%的原因。
这一原则在不同的领域都可以观察到,如经济学、流行病、计算、体育、工程等等,有时会取 90%/10%、95%/5%甚至 99%/1%这样的极端值。
这个想法是在 Richards Kock 的伟大著作《80/20 原则:少花钱多办事的秘密》中综合出来的,作者在书中描述了许多使用这个原则的策略,以优化我们的生活,把时间和精力花在真正重要的事情上。
因此,将这个想法带回我们的数据科学学习路径,如果我们可以确定一个遵循帕累托分布的模式,也许我们可以利用它来为我们造福。
3.那么,数据科学家的传统日常工作由什么组成呢?
你可能已经从至少有一点数据科学经验的人那里听说过,你至少有四分之三(有时超过 80%)的时间花在收集、争论和预处理数据上。换句话说,你必须花费大量的时间来组织你的数据集。我知道一些数据科学家可能很幸运地在一个数据被很好地编目和管理的环境中工作,这意味着他们可以花更多的时间在数据可视化和生成模型上,而不是在上述的初始步骤上,但这通常是一个例外。
在大多数公司中,数据存储在不同的数据库中,您通常必须使用 SQL 查询来组合表,或者使用 API 从不同的源获取数据。然后使用 Pandas(或 R)来组织和探索数据。在此阶段,您将处理缺失值、异常值并生成可用于后续分析步骤(数据可视化和模型训练)的数据集。如果您确切地知道数据库和 API 请求的结构,并且如果您的所有数据都是一致的,没有丢失值或异常值,那么这将是一个完美的场景。
事实上,这一过程比你预期的要长得多,因为你要反复多次地收集数据和争论,直到你最终准备好你的数据集。
4.将帕累托原则应用于您的数据科学学习之旅
基于数据科学家 80%的时间都花在数据收集和组织数据集上,我对你开始职业生涯的建议是,不管你的背景如何,都要专注于掌握编程、数据争论和数据提取的技能。
如果你学习 Python、Pandas 和 SQL,你可能至少可以完成一名数据科学家 80%的日常工作。
回到我们最初列出的成为数据科学家所需的技能,在总共 12 项技能中,你首先需要关注其中的 3 项:编程、SQL 和数据争论/预处理。如果考虑到所需的其他技术和软技能,这个列表还可以进一步扩展,80/20 法则也可以用来描述数据科学家的一天。
在开始数据科学学习之路时,你需要关注的三个主要技能是:Python、Pandas 和 SQL。
关于为什么应该选择 Python 而不是 R、Julia 或 Scala 等其他语言,我有一个简单的看法。我提到 Python 的原因是因为它是当今数据科学最流行的语言,也是任何试图学习如何编程的人的第一语言,因为它的学习曲线可能是最容易的之一。
5.逐渐增加你的信心
大多数关于机器学习的入门课程都向你展示了回归和分类(监督学习)或聚类(非监督学习)的可用算法。试图理解和掌握这些方法中的每一种,以及何时使用它们可能会很累,而且没有真正的回报。放心吧!知道存在哪些方法以及每种方法的主要应用是很好的,但是只有当您开始在自己的项目中使用它时,您才能完全理解每种方法。
随着您收集和预处理数据的技能的提高,您可以更加自信地执行以下步骤(可视化和模型选择)。从实践的角度来看,你可能会从一个与你的公司或研究项目相关的特定问题开始工作。随着你深入数据集并定义你的假设,你将有时间研究可以为你提供最佳解决方案的方法和机器学习算法。这是关于为什么你应该首先关注学习收集和组织数据所需的技能的又一个论点。
6.作为一名数据科学家,从更广阔的角度看待你的整体
我想重申的是,这篇文章的目的不是向你推销你只需要上述 3 种技能就可以从事数据科学的想法。
如果你先集中精力学习 Python、Pandas 和 SQL,你可以更快地看到实际效果,甚至执行通常由数据工程师和数据分析师执行的任务。
由于你已经看到了你所学知识的实际效果,你可以继续学习清单上的其他技能。
从经典的“数据科学需求层次”(图 2) 中可以看出,金字塔的底部由数据收集组成,接下来是移动/存储和探索/转换数据。这些技能通常与数据工程师工作相关,显示了该职位在当前数据科学项目中的重要性。
图二。数据科学需求层次( Monica Rogati — Hackernoon )
因此,如果没有扎实的数据处理和辩论相关技能的基础知识,您(和您的团队)可能无法成功地执行数据科学项目。
6.结束语
正如文章标题中提到的,我的主要目标是帮助你决定在开始学习数据科学时需要优先考虑哪些技能。我知道这个话题可能会有争议,因为我们观察到许多成为数据科学家的不同途径。从我个人的经验来看,你肯定有一个漫长的旅程,优化你的学习可以更快地为你提供工作机会。我相信,文章中提到的技能的坚实基础以及相对的自律和奉献精神会比你预期的更快给你带来不可思议的结果。
非常感谢你阅读我的文章!
- 你可以在我的个人资料页面 找到我的其他文章🔬
- 如果你喜欢它并且想成为中级会员你可以使用我的 推荐链接 来支持我👍
资源
一个故事和一些见解
towardsdatascience.com](/can-you-become-a-data-scientist-without-a-quantitative-degree-8046e254fa48) [ 数据科学最低要求:开始从事数据科学时你需要知道的 10 项基本技能
入门级数据科学职位所需的 10 个要素
towardsdatascience.com](/data-science-minimum-10-essential-skills-you-need-to-know-to-start-doing-data-science-e5a5a9be5991) [ 成为 3.0 级数据科学家
想成为大三,大四,还是首席数据科学家?了解您需要做些什么来驾驭数据科学…
towardsdatascience.com](/becoming-a-level-3-0-data-scientist-52641ff73cb3) [ 成为一名成功的数据科学家需要知道什么?
备注:这是我非常主观的观点,是作为一名成功的数据科学家你需要知道的。所有…
tech.olx.com](https://tech.olx.com/what-do-you-need-to-know-to-be-a-successful-data-scientist-c) [ 使用帕累托原则来简化你的生活
并非所有的任务都是平等的。
medium.com](https://medium.com/swlh/use-the-pareto-principle-to-simplify-your-life-b9da4c49f3e9) [ 数据科学家的一天
您对数据科学家一天的工作感兴趣吗?每个数据科学角色可能不同,但是…
www.kdnuggets.com](https://www.kdnuggets.com/2017/11/day-life-data-scientist.html) [ 人工智能的需求层次
正如快速发展的技术通常的情况一样,人工智能激发了大规模的 FOMO,FUD 和世仇。有些是…
hackernoon.com](https://hackernoon.com/the-ai-hierarchy-of-needs-18f111fcc007)
贝尔曼方程在深度 RL 中是如何工作的?
原文:https://towardsdatascience.com/how-the-bellman-equation-works-in-deep-reinforcement-learning-5301fe41b25a?source=collection_archive---------11-----------------------
贝尔曼方程和神经网络之间的联系,有公式、例子和 Python 代码
资料来源:123rf.com
在贝尔曼方程中,价值函数φ(t)取决于价值函数φ(t+1)。尽管如此,在状态达到时间 t +1 之前,还是可以得到φ(t)的值。我们可以通过神经网络、T21、来实现,因为、、、它们可以在任何时间近似函数φ(t)T33t。我们将看到它在 Python 中的外观。在最后两节中,我们介绍了深度 Q 学习算法的实现以及使用 PyTorch 软件包进行张量计算的一些细节。
状态、动作和政策图
状态空间和行动空间
马尔可夫决策过程 ( MDP )为深层强化学习 ( RL 或深层 RL )提供了数学框架。对于现实问题,我们在 MDP 中定义了以下参数:{ S 、T63【a64】、、、T68R、、、T75P、 T93T97是动作空间* 、 R 、T105是设定奖励、PT111 是设定概率、T115*γ
而在计算机视觉中,代理从大量的图像中学习,在深层 RL 中的代理从大量的发作中学习,其中对于任何状态*、*代理探究几个动作并从 MDP 环境接收不同的回复(奖励)。
如果每个状态只有一个动作,并且所有奖励都相同,那么 MDP 就是简化为马尔可夫链。对于大量的 MDP 环境,参见 OpenAI/gym 的环境表。
翻筋斗 或倒立摆
MDP 环境的一个例子是*cart pole(*a . k . a .an倒立摆 *),*一个重心在支点上方的钟摆。不稳定,但是可以通过移动重心下的支点来控制。对于环境 CartPole-v0 ,状态和动作如下:
钢管混凝土柱的状态空间和动作空间
对于这种环境,状态空间的维度=4,类型为 Box(4)。动作空间的维度=2,类型为离散(2)。
健身房的类型空间:
gym.spaces.Discrete(n)
:从 0 到 n-1 的离散值。gym.spaces.Box
:数值的多维向量,每一维的上下界由Box.low
和Box.high
定义。
政策地图𝜋,确定性 和 随机政策
策略图 𝜋 定义为𝜋(a | s)=pr{ at = a|ST = s}意思是策略 𝜋 是在状态下执行的动作的概率
举例。考虑配备手臂来抓取罐子的回收机器人。状态空间 S =[ 低,高 ],其中“低”和“高”是机器人充电的状态,动作空间 A = [ 搜索、充电、等待。我们考虑两种政策类型:确定性和随机性。
确定性和随机性策略的示例
状态值函数和贝尔曼方程
返回值
假设状态空间是离散的,这意味着代理以离散的时间步长与其环境进行交互。在每次时,代理接收到一个状态 状态 包括奖励rt .累积奖励命名为返回 , 我们将其表示为 Gt 【T6未来累计折现奖励计算如下:
未来累计折扣奖励
这里, γ 是贴现因子,0<γ<1。这样,returnat time就可以用return at time+1,即
返回值的递归关系
这是返回值 Gt 的递归关系。
状态值函数和贝尔曼方程
策略 𝜋 的状态值函数定义如下:
状态值函数
在这里, 𝜋 是的预期 为 Gt ,和*𝔼𝜋命名为预期收益。通过(1)和(2)我们推导出等式。(3).这就是 贝尔曼方程 。*
贝尔曼方程
这样,状态值*【v _s)为状态在时间t可以使用当前奖励r _ { t+1}找到*
行动价值函数与最优策略
动作值功能
现在,我们将定义与策略 𝜋 : 相关联的动作值函数
动作值功能
我们可以介绍两种政策的比较如下:
两种政策的比较
在这种情况下,我们说政策𝜋’比政策𝜋.好
最佳状态值函数
没有必要让任何两个政策具有可比性,但是,总有一个政策优于所有其他政策。这样的政策被说成是最优政策,它由 𝜋.表示一个最优策略肯定存在,但可能不是唯一的。*
代理的目标是找到最优策略。寻找最优策略是 Deep RL 的主要目标。
不同的最优策略具有相同的价值函数,我们用 v表示。 事实上,我们有 v = v( 𝜋).函数v it据说是最优状态值函数。最佳状态值函数可定义如下:
最优状态值函数
最佳动作值函数
对于任何确定性策略【𝜋】a都是由当前状态s唯一确定的,即a=𝜋(s。然后,对于(4)中的确定性策略 𝜋 ,动作可以被丢弃,即,我们得到等式。(2).换句话说,对于确定性策略 𝜋,我们在状态值函数和动作值函数之间有如下关系:
确定性策略的状态值函数和动作值函数之间的关系
对于随机政策来说,情况并非如此
类似于最佳动作值函数v (s),参见(5),我们将最佳动作值函数 q ( s, ) 定义如下:
最佳行动价值函数
*假设,我们有一个最优动作值函数 q ( s,a )。那么最优策略可以确定如下:
最优策略
这里, A(s) 是状态 s 可能的动作集合。
*对于确定性策略 𝜋,我们通过关系a=𝜋(s)找到当前状态的新动作。对于随机策略 𝜋,*我们可以通过关系式 a = 𝜋(s 找到新的行动),其中𝜋是最优策略,见(7)。
下面是一个代理应该做的事情:首先找到最优行动值函数,然后使用公式(7)找到最优策略。最后一种说法是正确的,但有一些限制。例外是可能的,例如,由于ε-贪婪机制。
Q-table 和 时态差异学习
Q-table
一个 Q 表是形状【状态,动作】的矩阵。我们将这个矩阵的所有槽初始化为零。合适的 Python 代码如下:
import numpy as np Q = np.zeros((state_size, action_size))
我们会在每一步或每一个动作之后,在 Q ( s , a ) 中对每一对( s , a )进行更新。
时间差
Q-tableT5是如何单步更新的?更新 Q-table 最常用的方法是时间差学习或TD-学习。我们在每集结束前都会添加更新。
TD-learning
回归 Gt 情商。(8)一种叫做的替代估计参见(1)。该值又名TD-目标。(8)中的值 Q (s_ t,a_t ) 称为电流估计值*。使用(1),我们可以重写等式。(8)如下:*
TD-learning:备选方案和当前估计值
算法 Sarsa
Sarsa 是的缩写为 状态-行动-奖励-状态-行动 的序列。该序列的这五个素如下:
Sarsa 序列
代理处于当前状态 s_t ,然后代理选择动作 a_t ,获得奖励 r_t ,之后代理进入对所有剧集执行该循环,直到值 num_episodes ,参见下面的算法 Sarsa 的伪代码。在每一步中, Q- 值Q(s,a ) 由(9)更新,参见 Sarsa 伪代码中的黄线。
Sarsa 算法
学习率α
学习率 α 决定了算法 Sarsa 的行为。太大的值 α 将使我们的算法远离收敛到最优策略。如果 α= 1 那么 Q(s_t,a_t) ← Gt,即Q-值总是将是最近的返回,没有任何学习。值 α 太小导致学习太慢。如果 α= 0 那么 Q (s_ t,a_t ) ← Q (s_ t,a_t ),永不更新。
算法Q-学习
Q-学习
*算法 Q-learning (又名 Sarsamax )在 eq 上与 Sarsa 不同。(9)如下:代替 Q(s,a) 在 t 的值,我们使用 Q(s,a) 的最大值,其中贯穿了此刻*的所有可能动作
算法Q-学习
贪婪的行动
在任何时间步 t ,对于状态 s_t ,至少存在一个动作,其估计值 Q ( s_t,a )为最大值。这个动作 一个 叫做贪婪动作。相关联的政策 𝜋( s ) 叫做贪政策,参见 eq。(7).当我们选择一个贪婪的行为时,我们正在利用我们当前对这些行为的知识。相反,如果我们选择了非贪婪动作中的一个,那么我们就是探索,因为这能够提高我们对非贪婪动作的价值的估计。*
Sarsa vs. Q-learning
一个偏离策略 智能体独立于智能体的动作学习最优策略。一个策略上的代理学习该代理正在执行的策略。 Q-learning 是anoff-policy算法因为最优策略是通过贪婪动作学习a _ gr中的公式求最大值,见(10) ,然而,下一个动作Sarsa*是一个 on-policy 算法,因为在(9)中,代理学习最优策略并使用相同的策略表现 Q(s_t,a_t)。*
Q-learning 可能每一集的表现都比 Sarsa 差,然而 Q-learning 学习最优策略。
Python 中的神经网络
问题
我怎么算?
答案:通过一个神经网络。我们将看到它在 Python 中的样子。
函数逼近
神经网络受到如此多关注的原因是因为它们可以逼近任何连续数学函数的输出。这是可能的,因为 Kolmogorov 定理指出多函数可以通过一函数的和与合成的组合来表达。
我们的Q-值函数,两个向量参数的函数 Q(s,a) 可以表示成我们想要的某个人工神经网络( nn )一样精确。
用深度学习技术,即用神经网络实现 Q 学习算法,称为深度 Q-网络或 DQN 。
项目DQN
Python 包 PyTorch 是由脸书人工智能研究实验室开发的开源深度学习库。我们提供了几个使用 PyTorch 实现的 DQN 片段。这段代码摘自我在’ Banana '环境中训练一个代理的实现。代理人被训练在某个方形世界中导航和收集香蕉。然而,这段代码相当通用,可以用于许多具有离散状态空间的环境。
片段
我们给出几个片段,帮助理解如何使用神经网络,我们可以优雅地实现 DQN 算法。
Function Agent.__init__
:两个神经网络(q_local
q_target
)由模型Qnetwork.
构成,每个模型Qnetwork
包含两个隐层。
Method
Agent.learn()
:
Q_expected
和Q_targets
之间的差异应使用 PyTorch 方法最小化,参见方法learn()
。
In class ReplayBuffer:
*s_t*
(state
)*s_*{*t+1*}
(next_state
)的值由函数sample()
、 采样,数据由函数add()
存储。
In method dqn():
按剧集和时间步长双循环;这里,生成值’状态’、'下一个状态’、'动作’、'奖励’和’完成’。
py torch 相关提示
下面是一些与 PyTorch 方法相关的小技巧,见下图“三张量”。
分离()
方法detach()
表示对于Q_targets_next.
不会执行张量loss
梯度的反向传播,这是可能的,因为张量loss
仅依赖于Q_targets
和Q_expected,
见方法learn()
。
最大值(1)
这里每个网络的形状是[64,4]其中 64 是批中的状态数(BATCH_SIZE
=64),4 是可能的动作数(move forward, move backward, turn left, turn right
)。表达式max(1)
表示获得 64 个状态中每个状态的最大值。最大值是通过运行所有 4 个动作获得的。回想一下 Q-Learning 在所有动作中寻找最大值,见(10)。下图中,我们给出了一个 64×4 张量self.q_target(next_states).detach()
的数值例子。
与神经网络相关的张量
三个张量
max (1)[0]
事实是max(1)
返回两个张量的列表:max(1)[0],
包含最大值的张量;max(1)[1],
包含找到最大值的值“列号”的张量。我们只需要max(1)[0]
,见上图。
unsqueeze①
现在,我们希望将形状为[64]的行向量放在形式为[64,1]的列中。这是使用unsqueeze(1)
方法完成的,见上图中的张量Q_targets_next
。
Q_targets
我们如何计算 Q_targets
?对于批量中的任何一个’状态 ’ ,如果一集结束,则’完成为 1,否则’完成为 0。然后Q_targets
的线由等式计算。(10)当且仅当相关联的情节没有结束时。
聚(1,行动)
该方法沿 dim = 1 指定的轴收集值。请注意,dim=0 表示行,dim=1 表示列。self.q_local(states)
中的每一行都由与四个动作相关的四个 Q 值组成。因此,对于每一行,沿着列,方法gather
取与张量actions
中的动作号相关联的Q-值,见下图。
结论
结合贝尔曼方程,神经网络,柯尔莫哥洛夫定理,我们得到了一个惊人的技术,深度 RL。这项技术提供了新的方法和新的算法,可以解决以前无法解决的问题。
贝尔曼方程和 Deep RL 实际上允许哪些「不可解的问题」?让我们以 AlphaZero 项目为例,这是一个精通国际象棋、日本象棋和围棋的计算机程序。AlphaZero 在 24 小时的训练中击败了世界冠军程序 Stockfish,达到了超人的下棋水平。
我们研究了深度 RL 的一个特例,即深度 Q 学习算法。在最后两节中,我们介绍了这种算法的实现和使用 PyTorch 软件包进行张量计算的一些细节。
参考文献
[1] M. Tavora,神经网络的逼近能力(带 Python 代码) (2019),走向数据科学
[2] X .郑,强化学习简介 (2019),领英
[3] H. van Hasselt,A. Guez,D. Silver,双 Q 学习的深度强化学习 (2015),arXiv:1509.06461
[4] A .辛格,强化学习:贝尔曼方程与最优性(第二部分) (2019),走向数据科学
[5] J. Hui, RL — DQN 深 Q 网 (2018),中
[6] D. Silver,T. Hubert,J. Schrittwieser,D. Hassabis, AlphaZero:为国际象棋、松木棋和围棋带来新的启示 (2018),DeepMind
今天的文章 TowardsDataScience 博客中文翻译 2020(四百五十)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/100527.html