TowardsDataScience 博客中文翻译 2020(一百九十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

通过群组分析计算你每月的回头客

原文:https://towardsdatascience.com/calculate-your-monthly-recurring-customer-by-cohort-analysis-3d39473482b7?source=collection_archive---------15-----------------------

解释如何使用 python 数据分析计算您企业的重复客户。

想象你已经开了一家企业,你的生意进展顺利。但这可能会更好。你的一些顾客可能会问你,“嘿,伙计,我经常从你这里买东西,难道我不应该得到一些优惠吗?”。现在你认为“好吧,我应该看看谁是我的老顾客!我应该给他们提供更多,这样他们就会经常来。”。你可以通过群组分析来实现。今天我将讨论使用 python 进行群组分析。让我们深入数据分析的海洋。

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

卢克·切瑟在 Unsplash 上的照片

为了这个分析,我使用了来自 Kaggle 的在线零售数据集。转到链接并下载它。好的,让我们看看我们的数据集中有什么!

首先,导入必要的库。

import pandas as pd
import seaborn as sns
import datetime as dt
import matplotlib.pyplot as plt
import plotly.express as px

现在加载数据集并观察其中的内容。

df = pd.read_excel('Online Retail.xlsx')
df.head()

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

这是我们数据集的前五行,

InvoiceNo:采购的发票号码。

库存代码:可能的产品代码

描述:产品是什么

数量:多少个产品

发票日期:购买日期

单价:单个产品的价格

CustomerID:标识每个客户的唯一字符串

国家:来自哪个地区

好吧,我们再深入一点。现在我们将创建一个函数来获取每个发票号的月份号,这样我们就可以知道产品是在哪个月购买的。

def get_month(x):
    return dt.datetime(x.year, x.month, 1)df['InvoiceMonth'] = df['InvoiceDate'].apply(get_month)
df.head()

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

看最后一栏我标记中间部分的地方,是‘月’。我们以后会用到它。现在让我们看看哪些客户在哪些月份访问过。为此,我们将使用熊猫“分组”。别担心。很简单。

grouping = df.groupby('CustomerID')['InvoiceMonth']
grouping.head()

现在,让我们来看看每位顾客是在哪一个月第一次购买的。

df['CohortMonth'] = grouping.transform('min')
df.head()

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

这个“共生月”是顾客第一次购买的时间。现在,我们将再次创建一个函数来提取客户在哪个月来访,这样我们就可以获得我们的回头客。

def get_date_int(df, column):
    year = df[column].dt.year
    month = df[column].dt.month
    date = df[column].dt.date
    return year, month, dateInvoice_Year, Invoice_Month, _ = get_date_int(df, 'InvoiceMonth')
Cohort_Year, Cohort_Month , _ = get_date_int(df, 'CohortMonth')Year_Diff = Invoice_Year - Cohort_Year
Month_Diff = Invoice_Month - Cohort_Monthdf['CohortIndex'] = Year_Diff*12 + Month_Diff +1
df.head()

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

因此,标记为“CohortIndex”的列是我们获得第一次购买和客户后来所有购买之间的差异的列。因此,这里第一个是“1.0”,这意味着他在第一次购买的同一个月进行了购买。

现在,让我们按“同月”和“同指数”对客户进行“分组”,这样我们就可以识别出在同一个月以相同的时间间隔购买的客户。

grouping = df.groupby(['CohortMonth', 'CohortIndex'])
grouping.head()

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

现在,我们将只取每个客户的第一个月来计算数据透视表,以便我们可以在以后计算经常性客户。

cohort_data = grouping['CustomerID'].apply(pd.Series.nunique)
cohort_data = cohort_data.reset_index()
cohort_data.head()

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

print(df.shape) #output: 91, 3
print(cohort_data.shape)#output: 541909, 11

因此,我们可以看到,在此期间,只有 91 个不同的客户进行了 541909 次购买。让我们制作数据透视表。

cohort_counts = cohort_data.pivot(index="CohortMonth",
                                  columns="CohortIndex",
                                  values="CustomerID")
retention = cohort_counts
retention

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

现在我们可以看到一些 NaN 值,这意味着从 2010 年 12 月 1 日到 2011 年 12 月 1 日总共是 13 个月。因此,第一个指数值包含每 13 个月的经常性客户,但下一个指数 2011–01–01 与 2011–12–01 只有 12 个月的差异。这就是为什么最后一行值是 NaN。因此,在第一个月,948 名顾客前来购买,其中 362 名顾客在第二个月再次购买,如此循环。

现在我们要统计每个月的顾客数量。因为我们想把他们作为基础,以后来的顾客会成为追随者。

cohort_sizes = cohort_counts.iloc[:,0]
cohort_sizes.head()

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

现在,我们将在 1–0 的区间内对数据进行整形,以便显示回头客的百分比。

retention = cohort_counts.divide(cohort_sizes, axis=0)
retention.head()

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

retention.round(3)*100

因此,我们将保留率转换为百分比。现在,让我们用热图来观察我们每月的重复客户百分比。

plt.figure(figsize=(10,8))
plt.title("Retention Rate")
sns.heatmap(data=retention,
           annot=True,
           fmt='.0%',
           vmin=0.0,
           vmax=0.5,
           cmap="BuGn")
plt.show()

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

仅此而已。我们已经完成了我们的队列。这对你的业务增长非常重要。你必须留意你的老顾客。谢谢你一直陪着我。成为数据科学海洋的冲浪者!

使用连体神经网络计算音频歌曲相似度

原文:https://towardsdatascience.com/calculating-audio-song-similarity-using-siamese-neural-networks-62730e8f3e3d?source=collection_archive---------14-----------------------

介绍

在 AI Music,我们的内容目录每天都在增长,我们越来越有必要创建更智能的系统来搜索和查询音乐。这样做的一个系统可以由定义和量化歌曲之间的相似度的能力来决定。这里描述的核心方法处理声学相似性的概念。

使用描述性标签搜索歌曲通常会引入语义不一致的问题。标签可以是高度主观的,取决于听众的年龄组、文化和个人偏好。例如,像“明亮”或“寒冷”这样的描述对不同的人来说可能意味着完全不同的东西。当谈到流派时,音乐也可能处于模糊的区域。像野兽男孩破坏这样的歌曲主要被称为嘻哈/说唱歌曲,然而它包含了许多我们传统上认为属于摇滚歌曲的声音品质。使用示例参考轨道从大型目录中检索相似歌曲或相似歌曲的排序列表的能力避免了这样的问题。

然而,当我们认为两首或更多的歌曲彼此相似时,这实际上意味着什么呢?这种感觉上的相似性通常很难定义,因为它包括许多不同的方面,如流派、乐器、情绪、节奏等等。使问题进一步复杂化的是,相似性往往是由这些特征的无限制组合构成的。歌曲相似性是一个如此主观的概念,我们如何解决定义一个基本事实的问题?

我们是如何解决这个问题的?

确定歌曲之间相似性的传统方法需要您从音频中选择和提取音乐特征。这些特征在一个空间内彼此有多近或多远被假定为各个轨迹的感知相似性。采用这种方法的一个问题是如何确定哪些特征最好地映射到感知的相似性。在 AI Music,我们通过采用基于暹罗神经网络(SNN)的方法来解决这个问题。

SNN 架构基于卷积神经网络架构,这意味着我们需要将音频转换为图像。音频最常见的图像表示是波形,其中信号幅度相对于时间绘制。对于我们的应用程序,我们使用一种称为声谱图的音频视觉表示,特别是 mel 声谱图。

  • 频谱图 使用傅立叶变换产生信号相对于时间的频率分布。
  • 一个 梅尔频谱图 是一个频谱图,其中频率被映射到梅尔标度。
  • 梅尔标度 是对数间隔的,从而产生与人类听觉更密切相关的表示。

我们选择了梅尔频谱图,因为已经发现它们很好地代表了声音的音色,因此更好地代表了歌曲的声学特征。

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

图 1:波形、谱图和 mel 谱图对比

从上图中我们可以看到,相关的音乐信息在 mel 声谱图中展现得更加清晰。

数据对

暹罗网络基于 2 个“分支”,这些分支在结构上完全相同,并具有相同的权重。基本功能是一个分支接受*‘参考’轨道 mel 谱图作为输入,而另一个分支接受‘差异’*轨道 mel 谱图作为输入。通过计算每个数据点之间的相似性,为该输入创建数据对。每个数据点都被用作“参考”来产生 5 个正的和 5 个负的“差异”对。通过采用基于 2 个数据点共享的描述性标签和音乐成分的数量的相似性系数来生成数据集的相似性矩阵。然后可以使用该矩阵选择相似和不相似的轨迹。

我们使用以下规则生成配对:

5 个正对:

  • 参考轨道本身
  • 从 10 个最相似的音轨中随机选择 4 个阳性匹配

5 个负对:

  • 从 10 个最不相似的音轨中随机选择 5 个负匹配

这些图像对被传递到模型中,在模型中为每个图像对生成一个特征向量(嵌入)。欧几里德距离被用作这些特征向量之间的距离度量。计算这两个特征向量之间的欧几里德距离,得到相似性得分。对比损失用于指示如何更新模型权重。对比损失旨在最小化相似对之间提取的特征向量之间的距离,并根据基于元数据计算的距离余量来分离不相似对。

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

图 1:连体神经网络流程图

我们如何使用训练过的暹罗模型

一旦我们剩下一个训练有素的模型,我们分裂暹罗网络。这给我们留下了一个没有计算欧几里德距离的最终层的单个分支。在这种形式中,模型本质上是一个特征提取器。然后可以处理我们希望能够从中搜索的音乐的整个后备目录,给我们留下相应特征向量的数据库。然后,可以通过这个相同的模型发送一首新的“未听过的歌曲”,并且可以计算得到的特征向量和数据库中所有特征向量之间的欧几里德距离。得分最低的结果表示最相似的歌曲。

音频示例 1 —嘻哈音乐

音频示例 2—流行音乐

音频示例 3—国家

结论&进一步工作

使用暹罗网络来计算歌曲相似性意味着我们允许系统确定准确表示我们希望量化的感知相似性的特征。这给我们留下了一个仅依赖于音频信号的歌曲推荐系统。话虽如此,创造地面真相的局限性依然存在。提出更智能的方法来构建数据对数据集是我们在深度学习领域需要克服的更大挑战之一,在深度学习领域,大型数据集并不容易获得。

为了在训练网络时不需要计算和提供数据对的数字相似性分数,我们尝试使用三元组损失函数。这里我们在网络中有 3 个分支,一个用于参考歌曲,一个用于肯定匹配,另一个用于否定匹配。这意味着在训练期间,参考和正例的特征向量将被推得彼此更近,而参考轨迹和负匹配的特征向量将被推得更远。

歌曲相似性的固有感知估计也可能因人而异或因用例而异。使用条件相似性网络可以允许用户选择他们认为最重要的音乐特征或特性。

在 AI Music 注册我们的时事通讯,了解我们在这里所做的最新研究,并发现更多关于该公司探索人工智能如何帮助塑造音乐制作和交付的信息

参考

Pranay Manocha,Rohan Badlani,Anurag Kumar,Ankit Shah,Benjamin Elizalde 和 Bhiksha Raj。“使用连体神经网络的基于内容的音频表示.”(2018) IEEE 声学、语音和信号处理国际会议(ICASSP)。

梁浩庭、曾东火、、小山圭三《三胞胎网络个性化音乐推荐》( 2019)

李宗弼,尼古拉斯 j .布莱恩,贾斯汀萨拉蒙,金泽宇,朱汉南。“解开音乐相似性的多维度量学习.”(2020) IEEE 声学、语音和信号处理国际会议(ICASSP)。

使用 Keras 对暹罗网络进行一次性学习

利用人员流动数据计算集水区

原文:https://towardsdatascience.com/calculating-catchment-with-human-mobility-data-efd08e2d20f6?source=collection_archive---------24-----------------------

利用人员流动数据识别潜在客户

集水区(即贸易区)是零售商、批发商和其他商业场所开展大部分业务的地理区域。正确计算它们对于零售和房地产等行业至关重要,因为它们使组织能够更好地了解客户并制定适当的业务战略。

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

计算集水区的技术有很多,从环形贸易区、等时线、重力模型,到包含特定位置变量的更复杂的技术。所选择的技术通常取决于可用的信息和数据,以及不同技术中可用的专业知识。

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

图 1。不同的集水区取决于技术:左边是环形贸易区(15 公里缓冲区),中间是 20 分钟车程等时线,右边是基于流动性数据的集水区。

当一家新店开业时,由于缺乏可用数据,很难知道哪些顾客会来这家店,或者他们来自哪里。在没有这些数据的情况下,最常见的方法是计算目标位置周围的缓冲区或等时线,但这种方法缺乏精度,可能导致不可靠的结果。

例如,对两个位置采用相同的时间等时线,而不考虑它们周围的人口密度,这肯定会导致不可靠的结果。这是因为居住在低密度地区的人们通常比居住在高密度地区的人们走更长的距离去购物。在这里,我们旨在使用人员流动数据作为潜在客户的代理,计算可靠的潜在集水区。

获得的结果表明,传统的方法,如等时线或缓冲区,无法捕捉到访问特定位置的人实际上来自哪里。它们不能像使用人员流动数据那样灵活地建立目标集水区;例如,能够计算工作日和周末游客的不同集水区。

人类移动数据

我们方法的基础是使用来自沃达丰分析的人员流动数据。该数据提供了对访问覆盖整个研究区域的任何 250m x 250m 网格单元的人数的洞察。沃达丰对网络中测量的数据进行匿名化、聚合和外推,以提供代表整个国家和国际人口的见解。

此外,该数据还提供了根据到目标像元的距离在不同级别聚集的访问者的来源。对于来自同一个城市的游客,也在 250m x 250m 像元级别提供起点;对于来自同一省其他城市的访问者,访问在城市一级进行汇总;对于来自其他省份的访问者,访问是在省一级进行汇总的。虽然它也提供了,鉴于这项研究的特点,我们不打算考虑来自不同国家的游客的来源。

此外,这些数据可以按活动类型(家庭/工作)、星期几和一天中的时间(上午/下午/晚上)进行分类。数据也可以按社会人口变量分类:年龄范围、性别和经济状况。

为了这个用例的目的,我们在西班牙的塞维利亚市选择了一个目标位置来展示这个方法。下面的地图显示了游客的来源地。

图二。这张 choropleth 地图显示了按来源地划分的游客数量,并按该来源地的总人口进行了标准化。

我们还使用 Unica360 的人口统计数据来标准化访客数据。Unica360 的数据是在 100m x 100m 的网格中聚合提供的,除其他变量外,还包括人口、按年龄范围划分的人口以及家庭数量。数据聚合被升级以适应沃达丰的 250m x 250m 单元网格,应用面积插值。

定义我们的集水方法

计算集水区的第一个想法是为每个起点-目的地对计算一个指数,该指数衡量目的地相对于起点的游客吸引力潜力。这里,目的地被理解为包含新商店位置的网格单元。

该指数将被定义为:

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

基于该指数,我们将通过选择具有最高指数值的源来计算每个目标像元的集水区,该值占该目标像元总访问量的 70%。

然而,由于来自其他城市和省份的游客数量在小区一级无法获得,因此需要采用一种新的方法来调整第一个想法,以便在不同的汇总级别(小区、城市和省份)比较游客数量。

这种新方法有两个主要步骤:

  1. 查找覆盖至少 80%目标像元访问者的起点的最小等时线(基于乘车旅行时间)。
  2. 通过在先前的源中选择索引值最高的源(占该目标像元总访问者的 70%)来缩小集水区的大小。

寻找最小等时线

如前所述,来自同一省其他直辖市和其他省份的访问者分别在直辖市和省一级进行汇总。等时线允许我们只考虑在一个直辖市/省内那些(在时间上)更接近目标像元的区域。所开发的方法计算越来越大的等时线,直到覆盖 80%的目标像元的总访问者。

为了计算来自一个等时线与一个省(或直辖市)的交叉点nvisitorsection的游客数量,以下步骤如下:

  1. 首先,使用 250x250m 网格单元的人口统计数据计算居住在交叉点的省人口比例,pctpupulationintersection
  2. 其次,从路口过来的游客数量用下面的公式计算。这个公式是基于托布勒地理定律和使用经验数据找到一个粗略的拟合。

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

图 3。转换功能分配更多的游客到更近的地方。

函数√将更多的访问者分配为来自该省内距离目标小区较近的区域(因此,较少的访问者分配到较远的区域)。从图 3 中可以看出,该函数如何将来自一个省/市的 70%的访问者分配到一个仅包含 40%人口的区域,但该区域更靠近目的地小区。同样,我们应用这个公式是基于这样一个假设,即住得离目标小区越近的人越有可能访问它。更复杂的模型可以给出更好的预测。

游客来源的选择

一旦有了最小等时线,下一步就是计算最小等时线内每个原点的索引值,定义如下:

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

该指数是使用来自每个起点的标准化访客数量norm _ nvisitorsection计算的。归一化是通过除以交叉点内人口像元的数量来完成的, npopcellsIntersection ,即访问者的数量均匀分布在交叉点多边形内的所有人口像元中。

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

这种标准化允许对来自同一城市牢房的来访者与来自其他城市和省份的来访者进行比较。通过选择占目标像元总访问者 70%的具有最高指数值的起点,我们可以获得其估计的集水区。

处理和可视化结果

下图显示了计算最小等时线所需的三次迭代,该最小等时线包含塞维利亚市目标像元中至少 80%的总访问者。

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

图 4。这个可视化展示了达到一个单元的总访问者的 80%所需的三次迭代。颜色显示了作为归一化访问和质心之间距离的函数定义的索引值。

一旦找到最小等时线,并为每个原点计算指数,我们就可以构建集水区。最后,集水区的凹壳(又名阿尔法形状)被计算为具有可管理的连接区域。为了计算凸包,我们使用了 Python 库 alphashape

下图显示了塞维利亚的目标像元的原始集水区及其凹形船体。

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

图 5。该可视化显示了单元的原始集水区及其凹面外壳。

如果我们将刚刚获得的集水区与 15 公里缓冲区和 20 分钟车程等时线进行比较,我们可以看到它们看起来非常不同。下图显示了三个集水区以及每个集水区包含的人口像元。

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

图 6。该可视化显示了整个博客帖子中比较的三个集水区及其包含的群体单元。

从这个比较中,我们可以看到等时线是如何向北和向西扩展的,错过了城市南部的一个非常重要的城区,事实上,该城区是目的地单元的一个非常重要的游客来源,如图 4 所示。在最小等时线过程的每一次迭代中,可以看到在城市的南部有一个多边形,对应于这个城区的游客数量非常高。该区域仅部分包含在缓冲集水区中,完全包含在我们刚刚使用人员移动数据构建的集水区中。

使用移动性数据定制集水区

如上所述,Vodafone Analytics 数据可以按活动类型(在家/工作)、星期几和一天中的时间(上午/下午/晚上)等变量进行分类。这提供了很大的灵活性,根据业务部门甚至用例,使用这些信息来构建定制的汇水区可能会很有趣。一个例子是为工作日和周末建立不同的集水区。

在下图中,对于同一个目标位置,我们使用所有访问构建的集水区(左),仅使用周一至周四的访问(中),以及仅使用周五至周日的访问(右)。非常有趣的是,人们在周末会比平时走更远的路。

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

图 7。该图显示了目标位置的集水区,从左至右考虑了所有访问、周一至周四的访问以及周五至周日的访问。原始集水区在最上面一行,其对应的 alpha 图形在最下面一行,就在它们的正下方。

这种粒度级别允许更强大的业务洞察力。使用这种方法的房地产公司可以向潜在的投资者提供更多的细节。对于零售商来说,这种更准确的收集可以为员工和位置管理、库存等决策提供信息。

例如,如果我们更深入地分析这最后一个层次的洞察力,我们可以看到使用工作日访问构建的集水区非常符合 20 分钟车程等时线,而基于周末访问构建的集水区则不符合(见下图)。这些信息可以用来确定投放广告的正确位置,或者根据一周中的不同日子制定不同的营销策略,因为客户来自不同的地方。

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

图八。该图用橙色显示了工作日访问(左)和周末访问(右)的集水区,并与 20 分钟车程等时线(紫色)进行了对比。

沃达丰分析数据也可以按社会人口统计变量分类:年龄范围、性别和经济地位。这允许集中于目标客户简档的集水区的构建。这可以在决定商店形式和零售类别时提供更深入的见解。

更深入地了解集水区的人员流动情况

了解和理解一家公司的大部分业务来自的领域的特征对他们的成功至关重要。当开始一项新业务或扩大现有业务时,历史数据的缺乏使得知道客户将来自哪里非常具有挑战性。

人类移动数据,加上其他位置数据流,可以在应对这一挑战时发挥作用,帮助企业从竞争对手中脱颖而出。

本文原载于 CARTO 博客 。这项工作是与Á·阿尔瓦罗·阿雷东多一起完成的。

特别感谢Mamata Akella,CARTO 的制图主管,对她在本帖地图创作中的支持。

用自举法计算置信区间

原文:https://towardsdatascience.com/calculating-confidence-interval-with-bootstrapping-872c657c058d?source=collection_archive---------4-----------------------

如何用 bootstrapping 计算置信区间?

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

故事横幅,作者图片

大家好,

在这篇文章中,我将尝试解释如何通过使用 Bootstrap 方法找到一个置信区间。 统计Python 知识需要更好的理解。

在深入研究该方法之前,让我们记住一些统计学概念。

方差: 它是由一个数据点与每个数据点的均值之间的距离平方之和除以数据点的个数得到的。

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

采样离散

标准差: 它是一个向我们展示我们的数据点如何从均值向外扩散的度量。它是通过求方差的平方根得到的

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

样品标准偏差

累积分布函数 :可用于任何一种变量 X(离散、连续等。).它向我们展示了变量的概率分布。因此允许我们从给定的概率分布中解释小于或等于 x 的值的概率

经验累积分布函数: 又称经验分布函数。CDF 和 ECDF 之间的唯一区别是,前者向我们展示了任何给定人口的假设分布,而后者是基于我们观察到的数据。

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

例如,我们如何解释上图所示数据的 ECDF?我们可以说,40%的身高小于或等于 160cm。同样,身高低于或等于 180 厘米的人口比例为 99.3%

概率密度函数: 它向我们展示了连续变量的分布。曲线下的面积给出了概率,所以面积必须总是等于 1

正态分布: 又称高斯分布。它是统计学中最重要的概率分布函数,呈钟形对称。

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

正态(高斯)分布

置信区间: 是数值在总体中可能存在的范围。它是根据原始样本估计的,通常定义为 95%的置信度,但也可能不同。您可以考虑下图,该图显示了 95%的置信区间。由对应于第一个和最后 2.5 个百分点的值定义的置信区间的下限和上限。

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

95%置信区间,作者图片

什么是自举法?

Bootstrap 方法是数据科学中常用的一种重采样方法。布拉德利·埃夫隆在 1979 年提出了这种方法。主要包括用替换( Bootstrap 样本 )重新采样我们的原始样本,以及使用汇总统计生成 Bootstrap 复制

人高的置信区间

在本文中,我们将使用ka ggle中的一个数据集。这是体重-身高数据集。它包含 10,000 人的身高(英寸)和体重(磅)信息,按性别分类。

如果你想看完整的代码,你可以通过 链接 找到 IPython 笔记本*。*

我们将只使用随机选择的 500 个人的身高,并通过使用 Bootstrap 方法计算 95%的置信区间

让我们从导入我们将需要的库开始。

数据帧的前五行如下

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

显然,高度是以英寸表示的,让我们将高度从英寸转换为厘米并存储在新的列 Height(cm) 中。

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

从上面我们可以看到,数据集中的最大和最小身高分别是 137.8 cm 和 200.6 cm。

我们可以用熊猫。DataFrame 的 采样 方法选择 500 个随机选择的高度。之后,我们将打印汇总统计数据。

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

根据输出,我们的样本最小高度为 145 cm,最大高度为 198 cm。

让我们看看 ECDF 和 PDF 是什么样子的?

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

ECDF,作者图片

经验 CDF 表明我们样本中 50%的人身高不超过 162 cm。

PDF 呢?

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

PDF,作者图片

PDF 向我们展示了高度的分布过于接近正态分布。不要忘记曲线 下的 区域给出了概率。

现在,花点时间想想。我们的样本中只有 500 个观察值,但世界上有几十亿人我们无法测量他们的身高。因此,我们的样本不能对总体做出推断。如果我们一次又一次地对不同的样品进行同样的测量,那么高度的平均值是多少?

例如,假设我们对相同数量的人(500)进行了 1000 次相同的测量,并以覆盖第一次观察的 ECDF 的方式绘制了每个人的 ECDF。它看起来会像下面这样。

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

ECDF,作者图片

正如我们在上面看到的,我们得到了不同的高度,但是我们可以很容易地发现这些点在一个特定的范围内扩散。这就是我们想要了解的置信区间

你可能会说实验不可能重复这么多次,你没有错。我们使用自举方法的确切原因。它帮助我们将同一个实验模拟数千甚至数十亿次。

怎么会?

事实上,Bootstrap 方法非常简单易懂。首先,它通过在原始样本中随机选择,从原始样本中生成引导样本。之后,它会应用一个汇总统计数据(如变异、标准偏差、平均值等)来获取重复数据。我们将使用“mean”来生成我们的引导复制。

为了理解该方法,让我们将它应用于一个仅包含 5 个高度的小样本。我们可以像下面这样生成我们的引导样本。不要忘记这样一个事实,我们可以多次选择任何观测值(替换重采样)

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

重采样,作者图像

正如我们在上面看到的,我们创建了 4 个 bootstrap 样本,然后计算它们的平均值。我们将这些方法称为我们的引导复制。我们可以选择方差、标准差、中位数或其他任何值,而不是“均值”。

回到我们的项目。下一步,我们将从我们的原始样本生成我们的引导样本,我们将应用均值来获得引导复制。我们将在一个 for 循环中重复这个过程 15.000 次(drawing ),并将副本存储在一个数组中。为此,我们可以定义如下函数

通过调用函数得到 15.000 个复制后,我们可以比较原始样本和引导复制的平均值

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

他们的手段太接近了。

那么,我们要怎么计算 95%的置信区间呢?

获得 bootstrap 复制后,剩下的就是这么简单了。众所周知,我们的下限和上限是对应于 2.5 和 97.5 百分位的值。

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

百分位数,作者图片

我们可以用下面简单的 Python 代码找到边界

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

我们的边界在 167.7 和 169.5。因此,我们可以说,如果对整个人群做同样的实验。身高的平均值将在 167.7 厘米和 169.5 厘米之间,有 95%的可能性

摘要

让我们总结一下我们所做的。我们随机选择了 500 个高度并生成了引导样本。我们从这些样本中计算“平均值”,并得到平均值的 bootstrap 复制。最终我们计算出 95%的置信区间。

祝你数据之旅好运:)

参考

[## 用一个例子介绍统计学中的 Bootstrapping——Jim 的统计学

Bootstrapping 是一种统计过程,它对单个数据集进行重新采样,以创建许多模拟样本。这个过程…

statisticsbyjim.com](https://statisticsbyjim.com/hypothesis-testing/bootstrapping/) [## Python 中的统计思维(第 2 部分)

做统计推断的时候,我们说的是概率的语言。描述您的…的概率分布

www.datacamp.com](https://www.datacamp.com/courses/statistical-thinking-in-python-part-2) [## 自助法简介

关于 bootstrap 方法、动机及其工作原理的探讨

towardsdatascience.com](/an-introduction-to-the-bootstrap-method-58bcb51b4d60)

用 Python 计算两个地理位置之间的距离

原文:https://towardsdatascience.com/calculating-distance-between-two-geolocations-in-python-26ad3afe287b?source=collection_archive---------5-----------------------

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

照片由捕捉人心。 on Unsplash

几个月前,我在从事一个可视化地理位置数据(即纬度和经度)的自由职业项目,在这个项目中,我必须在地图上可视化中心设施和客户位置。根据一个客户的要求,我必须找到距离不同设施 3 公里范围内的所有客户位置。为此,我必须计算所有位置之间的距离。这是我第一次使用原始坐标,所以我尝试了一个天真的尝试,使用欧几里德距离来计算距离,但很快意识到这种方法是错误的。

欧几里得距离适用于平面,就像笛卡尔平面一样,然而,地球不是平的。所以我们必须使用一种特殊类型的公式,称为哈弗辛距离。

哈弗线距离可以定义为地球表面两个位置之间的角距离。

哈弗线距离可以计算为:

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

来源:https://en.wikipedia.org/wiki/Haversine_formula

看起来令人生畏,是的,如果你必须使用原始的 python 代码来应用它,这将是令人生畏的,但是感谢 python 充满活力的开发者社区,我们有一个专门的库来计算称为 haversine 的 Haversine 距离(使用 python 的好处之一)。

介绍完毕,让我们开始实施吧:

步骤 1:安装“哈弗辛”

在 jupyter 笔记本上安装以下命令的 haversine 类型。

!pip install haversine

如果您通过 anaconda 提示符安装,请删除“!”从上面的命令中标记。

步骤 2:导入库

安装完库后,导入它

import haversine as hs

步骤 3:计算两个位置之间的距离

loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)

产量:5.229712941541709

默认情况下,哈弗辛函数返回以千米为单位的距离。如果要将距离的单位改为英里或米,可以使用如下所示的哈弗辛函数的单位参数:

from haversine import Unit
#To calculate distance in meters 
hs.haversine(loc1,loc2,unit=Unit.METERS)

输出:58660 . 68868686861

#To calculate distance in miles 
hs.haversine(loc1,loc2,unit=Unit.MILES)

产量:3.245363636765

同样,你也可以用英寸来计算距离。

如果使用原始位置数据,计算两个位置之间的距离是一项基本要求。它不仅能帮助你更好地可视化,还能为你的机器学习算法提供优势。它可能会给你的模型增加一个优势,并通过增加一个新的维度“距离”来提高它的整体效率。

这是我在本文前面提到的项目的输出:

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

作者图片

如果你想看完整的代码,你可以访问我的 github 页面:https://github.com/ashutoshb418/Foodies-Visualization

使用 BERT、word2vec 和其他模型计算文档相似度

原文:https://towardsdatascience.com/calculating-document-similarities-using-bert-and-other-models-b2c1a29c9630?source=collection_archive---------1-----------------------

入门

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

维克多·塔拉舒克Unsplash 上拍摄的照片

简介

文档相似性是自然语言处理中最关键的问题之一。寻找文档间的相似性被用于几个领域,例如推荐相似的书籍和文章、识别剽窃的文档、法律文档等。

如果两个文档在语义上相似,并且定义了相同的概念,或者它们是重复的,我们可以称之为相似的。

为了让机器找出文档之间的相似性,我们需要定义一种方法来数学地测量相似性,并且它应该是可比较的,以便机器可以告诉我们哪些文档最相似,哪些最不相似。我们还需要以可量化的形式(或数学对象,通常是向量形式)表示文档中的文本,以便我们可以在此基础上执行相似性计算。

因此,将文档转换成数学对象和定义相似性度量主要是让机器执行这项工作所需的两个步骤。我们将研究做这件事的不同方法。

相似度函数

计算相似性的一些最常见和最有效的方法是,

余弦距离/相似度——是两个向量之间角度的余弦,它给了我们向量之间的角距离。计算两个向量 A 和 B 之间余弦相似性公式为:

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

在二维空间中,它看起来像这样,

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

二维空间中两个向量 A 和 B 之间的角度(图片由作者提供)

你可以很容易地计算出数学公式,并使用余弦定律来证明这个公式。

余弦在θ= 0°时为 1,在θ= 180°时为-1,这意味着对于两个重叠的矢量,余弦在两个完全相反的矢量中最高和最低。正因如此,所以称之为相似。你可以把 1 余弦当作距离。

欧氏距离——这是 p=2 时闵可夫斯基距离的形式之一。其定义如下:

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

在二维空间中,欧几里德距离会是这样的,

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

二维空间中两个向量 A 和 B 之间的欧氏距离(图片由作者提供)

Jaccard 距离- Jaccard 指数用于计算两个有限集之间的相似度。Jaccard 距离可以认为是 1 - Jaccard 指数。

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

如果我们可以在向量空间中表示文档,我们可以使用余弦或欧几里德距离。如果我们认为我们的文档只是没有任何语义意义的单词集或集合,则可以使用 Jaccard 距离。

余弦和欧几里德距离是最广泛使用的度量,我们将在下面的例子中使用这两个。

嵌入

嵌入是文本的向量表示,其中具有相似含义或上下文的单词或句子具有相似的表示。

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

单词的三维矢量表示(图片由作者提供)

下面是一些计算文档嵌入的算法和例子,

Tf-idf - Tf-idf 是词频和逆文档频的组合。它为文档中的每个单词分配一个权重,该权重是使用该单词在文档中的频率以及该单词在整个文档语料库中的文档频率来计算的。关于 tf-idf 的更多细节请参考这个故事

让我们将以下定义为我们想要计算相似性的文档的语料库(集合),

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

文档语料库(图片由作者提供)

我们将执行基本的文本清理,删除特殊字符,删除停用词,并将所有内容转换为小写。然后,我们将把文档转换成它们的 tf-idf 向量,并使用余弦和欧几里德距离计算成对的相似度。

成对余弦相似度将只是 tf-idf 向量的点积,因为来自 sklearn 的 tf-idf 向量已经被归一化,并且这些向量的 L2 范数是 1。所以在这种情况下,余弦相似性公式的分母是 1。

print (tfidf_vectors[0].toarray())print (pairwise_similarities.shape)print (pairwise_similarities[0][:])

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

# documents similar to the first document in the corpus
most_similar(0,pairwise_similarities,'Cosine Similarity')

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

基于余弦相似性和欧几里德距离与第一个文档相似的文档(图片由作者提供)

Word2vec - 顾名思义 Word2vec 将单词嵌入向量空间。Word2vec 将文本语料库作为输入,并将单词嵌入作为输出。word2vec 主要有两种学习算法:连续单词包和连续跳格。

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

连续单词袋(CBOW)和跳格模型(图片由https://arxiv.org/pdf/1301.3781.pdf提供)

如果有足够的数据和计算可用,我们可以训练我们自己的嵌入,或者我们可以使用预训练的嵌入。我们将使用由 Google 提供的预训练嵌入。

我们将从标记和填充每个文档开始,使它们都具有相同的大小。

# tokenize and pad every document to make them of the same size
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequencestokenizer=Tokenizer()
tokenizer.fit_on_texts(documents_df.documents_cleaned)
tokenized_documents=tokenizer.texts_to_sequences(documents_df.documents_cleaned)
tokenized_paded_documents=pad_sequences(tokenized_documents,maxlen=64,padding='post')
vocab_size=len(tokenizer.word_index)+1print (tokenized_paded_documents[0])

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

标记化文档(作者图片)

让我们加载预训练的嵌入。每个单词都被表示为一个 300 维的向量。

# loading pre-trained embeddings, each word is represented as a 300 dimensional vectorimport gensimW2V_PATH="GoogleNews-vectors-negative300.bin.gz"
model_w2v = gensim.models.KeyedVectors.load_word2vec_format(W2V_PATH, binary=True)

使用这种嵌入,我们可以将文档语料库中的每个单词转换成 300 维向量。因为我们有 6 个文档,并且我们已经将每个文档填充为最大大小 64,所以语料库的向量表示将是 6X64X300 的形状。

# creating embedding matrix, every row is a vector representation from the vocabulary indexed by the tokenizer index. 
embedding_matrix=np.zeros((vocab_size,300))
for word,i in tokenizer.word_index.items():
    if word in model_w2v:
        embedding_matrix[i]=model_w2v[word]# creating document-word embeddings
document_word_embeddings=np.zeros((len(tokenized_paded_documents),64,300))for i in range(len(tokenized_paded_documents)):
    for j in range(len(tokenized_paded_documents[0])):
        document_word_embeddings[i][j]=embedding_matrix[tokenized_paded_documents[i][j]]document_word_embeddings.shape

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

文档-单词嵌入形状(图片由作者提供)

现在我们必须将每个文档表示为一个向量。我们可以对每个单词向量进行平均或求和,并将每个 64X300 表示转换为 300 维表示。但是对所有单词进行平均或求和将会失去文档的语义和上下文含义。文件的长度不同也会对此类行动产生不利影响。

一种更好的方法是使用 tf-idf 权重对单词向量进行加权平均。这可以在一定程度上处理可变长度问题,但是不能保持单词的语义和上下文含义。之后,我们可以使用成对距离来计算类似的文档,就像我们在 tf-idf 模型中所做的那样。

# calculating average of word vectors of a document weighted by tf-idfdocument_embeddings=np.zeros((len(tokenized_paded_documents),300))
words=tfidfvectoriser.get_feature_names()for i in range(len(document_word_embeddings)):
    for j in range(len(words)):
        document_embeddings[i]+=embedding_matrix[tokenizer.word_index[words[j]]]*tfidf_vectors[i][j]print (document_embeddings.shape)pairwise_similarities=cosine_similarity(document_embeddings)
pairwise_differences=euclidean_distances(document_embeddings)most_similar(0,pairwise_similarities,'Cosine Similarity')
most_similar(0,pairwise_differences,'Euclidean Distance')

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

基于余弦相似性和欧几里德距离与第一个文档相似的文档(图片由作者提供)

***GloVe-***Global Vectors for word Embedding(GloVe)是一种无监督学习算法,用于产生单词的向量表示。在来自语料库的聚集的全局单词-单词共现统计上执行训练,并且所得的表示展示了单词向量空间的有趣的线性子结构。

我们将使用来自斯坦福的预训练手套嵌入。所有步骤都与 word2vec 嵌入相同,只是在这种情况下,我们将使用手套预训练模型。我们使用 100 维的手套嵌入,因为嵌入文件很大。你也可以使用更高的维度。

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

基于余弦相似性和欧几里德距离与第一个文档相似的文档(图片由作者提供)

doc 2 vec-doc 2 vec是一种无监督学习算法,产生句子/段落/文档的向量表示。这是 word2vec 的改编版。Doc2vec 可以把一个完整的文档表示成一个向量。因此,我们不必取单词向量的平均值来创建文档向量。

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

段落向量分布式单词包版本(PVDOBW)和段落向量分布式内存版本(PVDM)(图片来自https://arxiv.org/pdf/1405.4053.pdf)

我们将使用 gensim 在我们的语料库上训练 Doc2vec 模型,并创建文档的向量表示。

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

基于余弦相似性和欧几里德距离与第一个文档相似的文档(图片由作者提供)

BERT- 来自变形金刚的双向编码器表示(BERT) 是 Google 开发的自然语言处理预训练的最新技术。BERT 在包括维基百科和书籍语料库在内的未标记文本上接受训练。BERT 使用 transformer architecture,一种注意力模型来学习单词的嵌入。

BERT 包括两个预训练步骤:掩蔽语言建模(MLM)和下一句预测(NSP)。在 BERT 中,使用三种嵌入来表示训练文本,即标记嵌入+片段嵌入+位置嵌入。

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

伯特训练建筑(图片来自https://arxiv.org/pdf/1810.04805.pdf)

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

伯特输入表示(图片来自https://arxiv.org/pdf/1810.04805.pdf)

我们将使用来自 Huggingface 的预训练 BERT 模型来嵌入我们的语料库。我们正在加载 BERT 基本模型,它有 12 层(变压器块),12 个注意头,1.1 亿个参数,隐藏大小为 768。

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

基于余弦相似性和欧几里德距离与第一个文档相似的文档(图片由作者提供)

您已经看到了用向量形式表示文档和度量相似性的多种方法。您可以针对自己的问题定制它们,看看哪种最适合您。

这里有这个故事的完整代码-https://github . com/varun 21290/medium/blob/master/Document % 20 similarities/Document _ similarities . ipynb

参考文献:

[## 余弦定律

在三角学中,余弦定律(也称为余弦公式、余弦法则或阿尔-卡希定理)与…

en.wikipedia.org](https://en.wikipedia.org/wiki/Law_of_cosines) [## 密码

编辑描述

code.google.com](https://code.google.com/archive/p/word2vec/) [## 向量空间中单词表示的有效估计

我们提出了两种新的模型架构,用于从非常大的数据中计算单词的连续向量表示…

arxiv.org](https://arxiv.org/abs/1301.3781) [## GloVe:单词表示的全局向量

GloVe 是一种无监督学习算法,用于获取单词的矢量表示。培训在…进行

nlp.stanford.edu](https://nlp.stanford.edu/projects/glove/) [## 句子和文档的分布式表示

许多机器学习算法要求将输入表示为固定长度的特征向量。当谈到…

arxiv.org](https://arxiv.org/abs/1405.4053) [## BERT:用于语言理解的深度双向转换器的预训练

我们介绍了一种新的语言表示模型,称为 BERT,代表双向编码器表示…

arxiv.org](https://arxiv.org/abs/1810.04805) [## 句子变形/bert-base-nli-mean-tokens 拥抱脸

这是句子变形库的 bert-base-nli-mean-tokens 模型。句子-变形金刚…

huggingface.co](https://huggingface.co/sentence-transformers/bert-base-nli-mean-tokens) [## 文本、tf-idf 等的量化价值…

定义、计算和变化

medium.com](https://medium.com/analytics-vidhya/the-quantitative-value-of-text-tf-idf-and-more-e3c7883f1df3)

根据死亡人数计算活跃的新冠肺炎病例

原文:https://towardsdatascience.com/calculating-live-covid-19-cases-from-deaths-e70e5df45f60?source=collection_archive---------13-----------------------

通过统计数据预测数字

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

Unsplash 上由 Aron 视觉拍摄的照片

昨天,我和我的家人通了电话,他们受过足够的教育,知道现在出门的风险。但是,令我震惊的是,他说了一句让我吃惊的话:“人们不必要地害怕。我们是一个有 13 亿人口的国家,到目前为止只有 250 例报告病例。没什么好怕的。”即使在他的城市已经报道了病毒的时候,他还是这样说。

我感到困惑、沮丧和愤怒。

我感觉如果能算出‘真实活跃案例’,人们会更认真对待事情。

目前,我们对我们的情况—全球、国家和城市—有不正确的信息。我们真的没有对活跃病例的正确概念。

活动案例不同于报告的案例。

问题

目前不可能有正确的真实活动案例,因为:

  • 我们没有足够的测试设备
  • 人们不知道他们是否有正确的症状
  • 有症状的人在接受检测之前,正等着情况变得更糟

250 不吓人。但是如果这个数字是 2500 呢?

方法

让我们用简单的数学和我们从其他国家学到的知识。我现在在印度的孟买,想计算一下当天的死亡人数。

为了计算真实的活动案例,计算需要非常具体的国家,并且还需要足够的案例才能在统计上正确。如果到目前为止只有一人死亡,下面的计算可能是不正确的。如果有 1000 人死亡,计算将接近真实值。

因此,我们将尝试计算真实值的下限和上限。

假设

让我们来看一些大概的数字。

死亡率→1%至 5 %

死亡所需天数→ 15 到 20 天

案件翻倍所需时间→ 5 至 7 天

我们想计算第 x 天的活动病例,给出第 x 天的死亡人数,而不是第 x 天的累计病例总数。

公式

让我们假设大数定律已经生效了,尽管它还没有生效,因为印度还处于萌芽阶段。

人要死,肯定有过死亡/(病死率)人。

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

由于死亡发生在感染疾病的几天后,病例以双倍的速度增长。

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

因此,鉴于当天的死亡人数,当天的活跃病例为

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

下界

让我们计算一下印度目前的情况。

一天只有 1 人死亡的情况下有哪些活跃的案例?

为了计算下限,让我们取最保守的数字。

死亡率→ 1%

我们会选择 1%,因为最初的死亡率很低,这是因为有现成的医疗保健。当医疗保健失败时,情况会变得更糟。我们看到更多的老年人死亡,他们的死亡率更高,但我们需要平均死亡率。

死亡所需天数→ 15 天

案件翻倍所需时间→ 7 天

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

我们有 441 个病例。这在某种程度上与印度目前报告的病例相吻合。我们有 304 个案子。

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

https://www.worldometers.info/coronavirus/

注意:这里要理解的一点是,我们使用了非常保守的数字,如果我们的假设是正确的,441 是一个下限。

上界

为了计算上限,让我们取较高的数字。

死亡率→ 1%

我们会选择 1%,因为最初的死亡率很低,这是因为有现成的医疗保健。当医疗保健失败时,情况会变得更糟。我们看到更多的老年人死亡,他们的死亡率更高,但我们需要平均死亡率。

死亡所需天数→ 20 天

案件翻倍所需时间→ 5 天

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

注意:这里需要理解的一点是,我们使用了较高的数字,如果我们的假设是正确的,1600 是一个上限。真实病例不能超过 1600 例,除非死亡报告不正确。

结论

如果你想做更好的计算,请把前一天的天数增加一倍,因为在一个国家疫情的不同阶段,天数会有所不同。此外,随着医疗保健变得不堪重负,死亡率也会发生变化。

我希望这是有意义的,有助于我们更仔细地了解情况。

保重,注意安全,✌️

用 Python 计算股本回报率

原文:https://towardsdatascience.com/calculating-return-on-equity-with-python-1ea583cd53bd?source=collection_archive---------27-----------------------

构建一个 Python 脚本来逐步计算股本回报率

沃伦巴菲特最喜欢的指标之一是净资产收益率(ROE)。他将净资产收益率作为投资决策过程的一部分。

股本回报率表明公司用股东投入的资金产生了多少净收入。在这个故事中,我们将使用 Python 计算您感兴趣的任何股票的股本回报率。

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

NeONBRANDUnsplash 上的照片

如何计算净资产收益率?

股本回报率的计算方法是:普通股股东可获得的净利润除以一段时间内(如一个季度、一年等)普通股的平均账面价值。).

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

净收益代表普通股股东可获得的净收益。而权益账面价值是企业资产减去负债的价值。除了在分母中使用普通股的平均账面价值,我们还可以使用期初的账面价值。

如果普通股权益的账面价值在不同时期变化很大,那么一个时期的平均账面价值是最合适的。对于我们的计算,我们将使用权益的平均账面价值

如何解读 ROE?

在投资界,较高的净资产收益率被视为一个积极的信号。然而,我们需要对公司如何增加净资产收益率保持谨慎。如果一家公司承担更多的债务,ROE 将会增加,因为该公司可能会通过发行债务来减少自己的权益(即购买自己的权益)。这将导致更高的风险,因此,净资产收益率将增加。

另一方面,如果一家公司增加净收入而不增加债务,那么净资产收益率的增加将是一个非常好的迹象。

用 Python 计算股本回报率

既然我们理解了为什么 ROE 如此重要,那么让我们构建一个 Python 脚本来自动计算我们感兴趣的任何公司的 ROE。

这超级简单。我们将使用一个免费的 API, Financialmodelingprep ,来检索财务报表和股票数据。我们将向 API 端点发出 get 请求来检索财务报表,我们将解析计算 ROE 所需的值。

首先,我们需要导入构建 Python 脚本所需的唯一库。

由于我们想重用代码来计算不同公司的 ROE,我们将构建一个函数调用 getROEgetROE 将把公司股票作为一个参数,该参数将作为 url 的一个参数传递:

Python ROE 函数

如果我们现在打印我们的损益表,我们将有一个很好的易于解析的格式字典。请注意,在 url 中,股票将被作为参数传递的公司股票代码替换,例如“ AAPL ”。

print(income_statement)

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

Python 损益表

计算净收入

现在,我们可以通过解析字典轻松提取出苹果的净收入。关键的财务包含所有季度损益表数据。因为我们对最近一个季度感兴趣,所以我们提取列表的第一个元素。在第一个元素中,我们需要提取关键字 Net Income Com 的值:

net_inc_common1 = float(income_statement['financials'][0]['Net Income Com'])

检索权益的账面价值

太好了,我们有了我们的 ROE 的分子。**接下来,**我们需要计算 股权的账面价值 。股权的账面价值可以通过查看财务报告中的资产负债表来提取。

幸运的是,Python 将完成这项工作,并为我们提取价值。我们将向 Financialmodelingprep API 端点发出 get 请求,以提取资产负债表季度数据:

BS = requests.get(f"https://financialmodelingprep.com/api/v3/financials/balance-sheet-statement/{stock}?period=quarter")BS = BS.json()

我们的回应如下所示。

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

资产负债表苹果公司

和以前一样,我们的响应包含一个字典列表。最新季度是列表中的第一个元素。我们现在可以解析字典来提取股东权益总额 值:

tot_equity_now = float(BS['financials'][0]['Total shareholders equity'])

因为我们需要计算该期间的平均值,所以我们还需要检索去年的权益账面价值。这将是列表中的第四个元素,即四个季度前:

tot_equity_previous = float(BS['financials'][4]['Total shareholders equity'])

很好,我们现在可以计算平均股本,并将其用作分母来获得 ROE 值。

Average_equity = (tot_equity_now + tot_equity_previous)/2ROE = net_inc_common1/Average_equity

将我们的 Python 金融脚本放在一起

我们构建了一个非常有用的 Python 脚本,用任何公司的 Python 来 计算股本回报率。它非常容易使用,我们只需要调用函数并传递一个公司股票作为参数。然后,我们的函数将提取所需的财务数据,并为我们计算 ROE。

参见下面的最终代码。

Python 计算 ROE

如果我们现在传递 AAPLMSFT 作为我们 getROE 函数的参数,Python 将计算苹果和微软的 ROE:

Apple = getROE('AAPL')#Format number as percentage 
Apple = "{:.2%}".format(Apple) MSFT = getROE('MSFT') 
MSFT = "{:.2%}".format(MSFT) print('MSFT:', MSFT ) print('AAPL:', Apple )

这将使微软的净资产收益率为 11.5%,苹果的净资产收益率为 21.44%。苹果的净资产收益率高于微软。这是因为更高的债务水平还是更高的净收入?我会让你自己分析这个。下面随意提供这个问题的答案!

感谢您阅读文章。希望你喜欢它!

原载于 2020 年 2 月 10 日 https://codingandfun.com

使用贝叶斯概率计算销售转换

原文:https://towardsdatascience.com/calculating-sales-conversion-using-bayesian-probability-b08f9fb262f2?source=collection_archive---------14-----------------------

计算销售转换率的直观方法,无需历史数据进行比较

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

图像来源

下面发表的这篇文章从的拉斯穆斯贝斯贝叶斯统计教程中获得了灵感和参考。下面,我试图解释贝叶斯统计如何应用于回答任何公司分析部门的人可能面临的问题。

背景

一个成功的企业通常希望通过各种营销策略获得新客户,从而扩大其客户基础。根据公司的商业模式,他们可能会选择各种营销策略方法。因此,当务之急是了解哪种策略最能产生有证据支持的成功,而不是直觉。

渗透新市场

Seeder 是一家在加州销售电动滑板车的公司,是该国最成功的电动滑板车生产商之一。他们试图通过在德克萨斯州销售电动滑板车来开发德克萨斯州地区。

播种机的营销团队利用印刷媒体并设计宣传册来吸引新客户。他们将小册子分发给 23 名德州人,最终卖出了 9 本。

问题

管理层想知道的是,印刷媒体在推广新型电动滑板车方面有多好?如果公司继续生产大量的小册子,比如说几十万册,他们期望看到的转化率是多少?

这个问题的答案初看起来很简单。使用营销团队收集的数据,通过将销售数量除以分发的手册总数来计算成功的概率。

brochures_distributed = 23
new_sales = 9
conversion_rate = new_sales/brochures_distributed
conversion_rate

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

汇率

我们可以看到,达成销售的概率约为 39%。这意味着,每分发 100 份宣传册, Seeder 应该能卖出 39 辆电动滑板车。

考虑到我们现有的数据,这似乎是一个不错的估计,但它有很大的不确定性。我们不知道哪些人看到了宣传册,他们决定购买电动滑板车的动机是什么,也不知道可能会严重影响他们购买电动滑板车决定的过多信息。小样本量也对转换估算的准确性提出了警告。

使用贝叶斯概率来量化不确定性

贝叶斯概率允许我们使用概率分布来量化未知信息。为了能够量化我们研究中的不确定性,我们需要三样东西。

  1. 数据
  2. 生成模型
  3. 传道者

数据

我们案例中的数据将来自我们进行的试点研究。我们知道,在 23 个看过宣传册的德州人中,有 9 个已经转变为客户。

生成模型

生成模型可以被定义为我们传递给一些参数的一组指令,比如潜在的转换百分比,以便模型基于参数模拟数据。例如,我们可以假设有 40%的潜在转化率,我们向随机选择的 50 名德州人展示宣传册。基于我们假设的转换率,生成模型将估计要进行 20 次销售。

基于上面假设的生成模型,我们有关于我们可能进行的销售数量的信息,但是我们感兴趣的是可能进行的销售的百分比。我们的生成模型是模拟数据,但我们已经知道我们的数据是什么。我们需要逆向求解生成模型,使其输出转化率。为了实现这一点,我们需要的是第三项先验

前科

先验是模型在看到任何数据之前所拥有的信息。在贝叶斯术语中,先验是一种概率分布,用于表示模型中的不确定性。为了给我们的模型创建先验,我们将使用均匀概率分布。通过使用从 0 到 1 的均匀概率分布,我们声明在看到任何数据之前,模型假设 0 和 1 之间的任何转换率 (0%到 100%) 都是同等可能的。

拟合模型

下面是模型工作的基本流程。

  • 根据我们的先验分布,我们为参数值抽取一个随机样本。在我们的例子中,参数值是转换率。
# number of samples to draw from the prior distribution
n_size <- 100000# drawing sample from the prior distribution - which in our case is uniform distribution
prior_dist <- runif(n_size, 0, 1)# peeking at the histogram to verify the random sample was generated correctly.
hist(prior_dist, main = "Histogram of Prior Distribution", xlab = "Prior on the Conversion Rate", ylab = "Frequency")

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

我们先前均匀分布的直方图

  • 我们从步骤 1 中获取参数值,将其插入到我们的生成模型中,以便模型模拟一些数据。我们使用 for 循环多次重复这个过程。
# defining the generative model - a model or set of rules that we feed to parameters so that it simulates data based on those set of rules
generative_model <- function(rate) {
  sales <- rbinom(1, size = 23, prob = rate)
  sales
}# simulating the data through our generative model
sales <- rep(NA, n_size)
for(i in 1:n_size) {
  sales[i] <- generative_model(prior_dist[i])
}
  • 筛选出与我们的数据一致的所有抽样,即转化率为 0.3913 或总销售额等于 9。
# filtering out values from the model that do not match our observed results
post_rate <- prior_dist[sales == 9]

我们在这里做的是多次重复采样过程,并在每次迭代后生成一个随机转换率。过滤掉样本图的原因是我们希望保留我们在现实中观察到的数据。也就是说,当营销团队做这个过程时,他们通过进行 9 销售产生了 0.3913 的转化率。

真实转化率是多少?

这个问题的答案不是一个数字。它是可能转化率的概率分布。这些可能的转换率分布如下。

#plotting the posterior distribution
post_rate_hist = hist(post_rate, xlim = c(0,1), main = "Histogram of Posterior Distribution")
post_rate_hist

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

转化率的概率分布

从观察到的可能转化率的分布可以看出,最有可能的转化率应该存在于 35 & 45 百分比之间。我们也可以看到,转化率超过 60% 或低于 20% 的可能性极小。

我们可以通过计算每根棒线的频率并除以总抽取次数来计算可能的转换率的概率。

为了计算 40%和 45%之间的转换率的概率,我们做如下数学计算

# sum of frequency of draws between 0.40 and 0.45 divided by total draws
post_rate_hist$counts[8]/length(post_rate)

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

转换概率在 40%-45%之间

在这里,我们有 20%的可能性,转化率会落在 40-45%之间。

回答更多问题

哪种策略比较好?

我们可以使用我们创建的模型来回答关于营销策略的比较问题。例如,我们可以比较两种营销策略的转换率。

比方说,营销团队告诉我们,当他们部署电子邮件营销时,转化率为 20%。管理层现在想知道印刷媒体营销优于电子邮件营销的可能性。

从我们的概率分布中,我们可以计算出转化率大于 20%的频率,除以总吸引次数,得到平面媒体营销实现转化率大于 20%的概率。

sum(post_rate > 0.20) / length(post_rate)

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

转化概率大于 20%

在这里,我们可以说印刷媒体有 98%的可能性实现超过 20% 的转化率

使用置信区间

我们可以使用置信区间来计算覆盖总体分布 95%的转换率。

quantile(post_rate, c(0.025, 0.975))

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

95%置信区间

在这里,它意味着我们有 95%的信心,真实的转化率落在 22%60% 之间。

结论

贝叶斯概率允许我们通过在运行测试之前考虑我们所拥有的所有信息来区分真实和噪音。这正是我们在这里所做的。我们考虑了这样一个事实,即从 0 到 1 的转换发生的概率是相等的。然后我们进行了一次模拟,结果与我们分发宣传册时观察到的数据一致。最终结果不是一个单一的数字,而是概率的分布。

这种分布允许涉众输入他们的领域知识,并尝试估计在不确定性的影响下他们的问题的正确答案是什么。

使用 VC 维计算样本量;一种机器学习的方式。

原文:https://towardsdatascience.com/calculating-sample-size-using-vc-dimensions-a-machine-learning-way-748abbe1b1e4?source=collection_archive---------55-----------------------

我们如何以及为什么需要知道最佳样本量??

数据收集过程本身就是一项冗长乏味的任务,需要花费数十年的时间。在医疗保健等领域,这一过程涉及大量成本,通常需要数年时间。例如,要获得某一特定疾病的信息,比如说 100 个数据点,就需要筛选两倍或三倍于所需样本量的患者。获取患者数据不仅是一项耗时的工作,而且代价高昂。虽然在无所事事的情况下收集大量数据是一项非常徒劳的任务,但类似地,当机器学习算法应用于数据时,无法满足数据要求也不会产生好的结果。最终,估算最佳样本量是一项决定性的任务,也是在对数据进行任何分析之前需要考虑的事情。

在这里,我将讨论一个有趣的技术,使用 VC 维度的概念来近似样本大小,通过调整它来使我们更容易和舒适。在继续之前,我想先介绍一种统计方法或近似样本大小的方法,然后进一步说明其局限性,并向您展示 VC 维方法的必要性。

统计样本量估计

为了解释估计样本量的统计方法,我引用了波士顿大学的 Lisa Sullivan 教授在这里所做的工作。我建议所有读者在继续阅读之前先浏览给定的链接,因为我会准确地解释其中提出的方法。所提出的方法提出了一种估计最佳样本大小的方法,该方法可以减少由于数据中存在的方差而由输入特征引起的误差容限 E 。为了确定最佳的样本大小,必须首先选择期望的误差范围,这通常是领域专家的工作,并且根据问题而变化。以上述方式计算样本量的公式如下

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

该公式生成样本大小’ n’ ,确保误差范围 E 不超过规定值。为了求解 n ,我们必须输入“ Z 、“ σ”、“T19”和“ E

‘σ’是样本方差

‘E’是期望的误差率

‘Z’是给定置信水平的 Z 分布值

从上面的公式中可以看出,样本大小“n”取决于所选的误差容限“ E”,这一点很重要。

确定样本量的统计方法虽然在逻辑上听起来很棒,但有一个非常明显的先天限制。

统计样本大小估计没有给出选择样本大小的方法,该方法可以减少误差或增加应用于数据的预测机器学习模型的准确性。

事实上,以这种方式估计的样本大小没有以任何方式考虑应用于它的任何机器学习模型或算法。因此,这使得统计方法非常幼稚,帮助不大。

有没有一种选择样本大小的方法可以减少应用于数据的机器学习模型的误差??或者有没有办法确定一个机器学习模型对于特定样本量的预期误差是多少?这些问题的答案与风险资本维度的概念紧密相连。

VC 维方法给出了一种确定样本大小的方法,这种方法可以减少应用于其上的任何机器学习模型的误差。

VC 尺寸

VC 维的概念为基于机器学习算法确定测试误差铺平了道路,该算法被选择应用于数据和与其相关联的训练误差。

让我先简单介绍一下VAP Nik–Chervonenkis(VC)维度的概念及其工作原理。

注意:我对 VC 维概念的解释非常简略,因为本文的主要焦点是使用它计算样本大小,而不是概念本身

Vc 维测量统计分类算法学习一组函数的能力。简单地说,它衡量分类模型的能力。

统计分类算法的 VC 维的典型定义是:算法可以粉碎的最大点集的基数。

粉碎

这里我直接从维基百科借用粉碎的清晰定义。

“具有某个参数向量‘θ’的分类模型’ f ’ 被认为粉碎了一组数据点{X1,X2…,Xn},如果对于这些点的所有标签分配,存在一个‘θ’,使得模型’ f ’ 在评估该组数据点时不会出错。”

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

打碎

因此,一个算法可以粉碎的点数定义了它的 VC 维数。

现在转到本文的中心主题,即 VC- dimensions 如何方便地识别正确的样本大小,让我介绍一个公式,它给出了算法产生的测试误差量的概率上限。

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

虽然乍一看可能很吓人,但让我一部分一部分地揭示它。此处的公式考虑了模型的训练误差、应用算法的 VC 维“D”、应用模型的样本大小“N”以及 0≤η≤1 的“η”。

因此,简而言之,上述公式考虑了模型的 Vc 维、样本的大小以及由此获得的训练误差,然后生成在给定所有上述因素的情况下可以获得的测试误差的概率上界。到目前为止,除了解释 Vc-dimension 的一般概念和工作方式之外,我还没有提出任何新的东西。好吧,实际上我们已经走到了尽头,却并不知道。稍微调整一下上面的公式,我们就可以得到预期的样本大小的近似值。

我们用这样一种方法破解上面的公式,得到样本大小。因为我们现在的目标不是得到测试误差的上界,而是可以减少测试误差的样本大小,所以我们现在选择一个测试误差,我们可以根据我们正在处理的问题来考虑这个测试误差,并且扫过‘N’的值的范围,直到我们达到期望的测试误差。因此,我们不再像之前那样求解测试误差,而是求解样本大小。

一般来说,当我们选择一个更严格的测试误差时,“N”的值会增加。因此,我们想要的测试误差越大,我们的样本量就应该越大。因此,我们得到的样本大小近似值可以减少测试误差。

这种近似的方式非常简单,并且对于我们应用于数据的机器学习算法也非常灵活。近似样本大小因型号而异。

希望这是有益的!!

*一些定义和数字来自维基百科和互联网。

计算 10 个点击率最高的迷因

原文:https://towardsdatascience.com/calculating-the-10-most-viewed-memes-dc8e1e24caf3?source=collection_archive---------41-----------------------

以及实现这一目标所需的 5 项数据科学原则

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

作者图。根据合理使用原则的规定,出于评论的目的,在此复制模因的缩略图是允许的

尼尔森收视率估计广播电视节目的观众人数,但我们没有独立估计迷因(一种在过去十年中流行起来的艺术形式)的观众人数。所以我创造了一些!

我将描述上面图表中显示的视图计数是如何使用大约 43k 张图像的数据集和 5 个数据科学原则得出的(这些原则是我多年来在许多项目中应用的)。

1)明确定义您想要评估的内容

文字是可以解释的。我已经记不清有多少次两个人会在谈话中就一个项目的目标达成一致…只是后来发现他们对一个关键词有不同的解释。如果你在项目开始时就彻底辩论每个单词的定义,你将会节省时间。

例如,假设您想要估计“2019 年英国人口”。这是指 2019 年开始、结束或中期的人口吗?还是三者的平均值?人口是指永久居民,还是包括游客和临时居民在内的每个人?没有正确答案!

所以回到迷因。需要澄清的是,我说的不是模因的学术定义,而是互联网图像模因(在网上分享的图像和文本的组合)。更确切地说,我感兴趣的是找出最流行的 模因模板 (用于模因的底层图像)。所以当我说“点击率最高的迷因”时,我实际上是指:

被浏览次数最多的模因模板*(我们通过使用该模因模板将所有互联网图片模因的浏览次数相加得出)***

因此,现在是时候开始收集数据了。

2)以最小化偏差的方式采样数据

尼尔森系统不可能监控每一台电视机,就像我无法下载网上分享的每一个 meme 一样。在这两种情况下,采样都是必要的。

如果一个数据样本真正代表了更广泛的人群,我们说它是无偏的,但在许多情况下这是不可能的。通常,我们必须以尽可能合理地减少偏差的方式对数据进行采样。然后在以后分析数据时尽最大努力纠正偏差。

在这个项目中,迷因是从世界上最大的图片分享网站之一 Reddit 上采集的。一天中有几次,一个网页抓取器会查看网站上几个以迷因为中心的部分,并收集 100 个最受欢迎的帖子。这些模因中有许多是在发布观看数据的网站 Imgur 上托管的,所以交叉引用他们的数据可以让我们推断 Reddit 帖子的观看数据。多亏了 Reddit & Imgur 的 API,用几行 python 就可以完成这个采样。为了简洁起见,我在这里就不解释了,但是所使用的代码可以在本文中找到:

*** [## 哪个分支得票最多?

结合 Reddit 和 Imgur Python APIs 来确定用户参与度在子编辑之间如何变化

towardsdatascience.com](/which-subreddit-upvotes-the-most-18ab20567e25)

现在的问题是这种采样方法能使偏差最小化吗? Reddit 只是一个网站,所以并不能真正代表整个互联网。我们可以通过对发布到其他网站的模因进行采样来减少偏见,比如 Instagram 或脸书。然而,这些网站提供的公共数据有限,不具有可比性,在网站之间进行比较的唯一方法是做出疯狂的假设,这可能会给我们的最终估计带来更大的偏差。

有时你只需要接受没有正确答案的事实,然后做出判断。我认为最好从一个最好的来源取样,而不是把许多来源结合起来,最后得到一个不可靠的数据集。我说 Reddit 是最好的来源,因为它是最大的图片分享网站,你可以从中推断出合理准确度的观看数据(通过与 Imgur 数据的交叉引用)。***

3)复杂模型只针对复杂问题

我们需要识别数据集中每个迷因所使用的迷因模板。这是一个图像分类问题,但更重要的是一个简单的图像分类问题。不要使用复杂的解决方案,简单的解决方案就可以了

最新技术水平的图像分类器,如那些赢得 Image-Net 竞赛的图像分类器,是深度神经网络,无论角度、光照或背景如何,都能够进行对象识别。观察迷因并识别潜在的迷因模板是一项简单得多的任务,因此需要比 100 层神经网络简单得多的东西。

模因模板只有这么多,它们都有独特的调色板。我们可以通过计数像素并将这些计数传递给线性支持向量机来准确地对迷因进行分类,这需要几秒钟的训练(而神经网络需要几天)。如何构建这一精确模型的有效示例可在此处找到:

*** [## 迷因视觉:对迷因进行分类的科学

图像识别并不总是需要神经网络;使用更简单的模型可以实现效率和准确性

towardsdatascience.com](/meme-vision-framework-e90a9a7a4187)***

4)验证,如果可能的话,请使用人工

很多次,一个热切的年轻数据科学家跑到我的办公桌前,骄傲地宣布一个了不起的结果,但当被问及他们做了什么来验证结果时,他们的信心消失了。在一点基本的验证发现一个主要的缺陷之后,辉煌的结果往往会消失。

当涉及到验证图像分类模型的结果时,人眼是无可替代的。你可能认为在这个数据集(大约 43000 张图像)上的图像分类器的结果需要很长时间来验证,但是有许多工具可以加快速度。使用这个标签工具,我能够在几个小时内验证结果(并标记任何不正确的分类):

*** [## 在 Jupyter 笔记本中点击鼠标来标记图像

训练图像识别模型的关键是拥有大量手动标记的图像。这需要时间,所以…

towardsdatascience.com](/one-mouse-click-to-label-an-image-within-a-jupyter-notebook-40053095333a)

我平均花费 20 秒来验证 100 张图像(在 10x10 的网格中查看),所以我最终在不到 3 小时的时间内看完了所有 43000 张图像。不是我每天都想做的事情,但是一年一次也可以。***

5)仔细考虑每一个假设

统计模型依赖于数据和假设。通常你不能改进原始数据,但是你可以改进假设。

这项工作的最后一步是获取数据集,并提取每个模因模板的观看数据。由于数据的限制,这个分析需要几个额外的假设,我将在下面解释。如果你想知道这一步的完整代码,可以在 Kaggle 笔记本中找到:

*** [## 创建 meme 模板视图时间线

使用 Kaggle 笔记本探索和运行机器学习代码|使用 2018 年最流行的 memes 模板中的数据

www.kaggle.com](https://www.kaggle.com/gmorinan/creating-meme-template-view-timeline)

第一个假设与缺失值有关。当数据集中的某个条目有缺失值时,是移除该条目(从而减少样本大小)还是推断该值(从而可能导致不准确)更好?这取决于您的数据集中有多少比例的数据缺少值;对于低比例来说,删除它们通常更好,但对于高比例来说(对于这个 meme 数据集来说),删除所有这些值会显著降低样本的代表性,因此我尽可能填充那些缺失的值更有意义。

第二个假设是关于纠正我们数据集中对 Reddit 用户的偏见。我使用下面的“传播”假设来解决这个问题。我从 Reddit 的几十个不同版块中取样,这样我就可以测量每个模因模板出现在多少个版块中。我假设一个迷因在 Reddit 内传播得越广,它在 Reddit 外传播得就越广,因此这些迷因的浏览量被夸大以反映这一点。

说到假设,从来没有一个正确的答案。你唯一能做的就是做出一个你能向他人证明的判断。***

结果;点击率最高的模因模板(2018 年)

该方法在 2018 年全年运行,共下载了 40 万张图片,其中 43,660 张被确定为使用了 250 种最常见的 meme 模板之一。

正如我们所见,德雷克·梅梅在 2018 年是迄今为止观看次数最多的,观看次数超过 1.57 亿次(根据这一分析,这很可能低估了真实数字)。

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

作者图。在合理使用原则下,出于评论的目的,在此复制模因的缩略图是允许的

并且顶部模板中总视图计数的分布大致类似于帕累托分布。

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

按作者分列的数字

介意看看吗?

您可以在此下载所有约 43k 的图像和元数据:

*** [## 2018 年最受欢迎的模因模板

43k 图像,带有元数据和估计观看次数

www.kaggle.com](https://www.kaggle.com/gmorinan/most-viewed-memes-templates-of-2018)

最后的想法

有很多事情很难准确衡量;迷因流行是其中之一。有时候我们不得不接受这一点,尽可能做到最好。我讨论了在这项工作中使用的 5 个原则,可以总结为:在采取行动之前,仔细考虑项目的每一步。***

计算两个地理空间坐标之间的方位角

原文:https://towardsdatascience.com/calculating-the-bearing-between-two-geospatial-coordinates-66203f57e4b4?source=collection_archive---------8-----------------------

当以编程方式调整相机以遵循特定路径时——无论是在谷歌街景还是地理信息系统动画上,程序员可能需要指定两点之间的方位或经纬度坐标。在这篇文章中,我解释了这是如何实现的。

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

照片由丹尼斯·詹斯Unsplash 拍摄

数学

数学上,点 a 和点 b 之间的方位角是通过取 X 和 Y 的反正切函数来计算的

bearing  = arctan(X,Y)

其中 X 和 Y 定义如下:

X = cos θb * sin ∆LY = cos θa * sin θb – sin θa * cos θb * cos ∆L

这里 ab 代表两个坐标,它们的前缀由下式给出:

L     = Longitude
theta = Latitudeand ∆L is the difference between the Longitudal values of the two points

程序上

为了将这一逻辑应用于计算机程序,我们从我们的观点开始:

a = {'lat': <some value>, 'lon': <some value>}
b = {'lat': <some value>, 'lon': <some value>}

接下来,我们通过从 b 中减去 a 的纵向值得到∆L

dL = b.lon-a.lon

现在我们可以计算我们的 X 和 Y 值:

X = cos(b.lat)* sin(dL)
Y = cos(a.lat)*sin(b.lat) - sin(a.lat)*cos(b.lat)* cos(dL)

最后,我们可以使用反正切并获得我们的方位:

bearing = **arctan2**(X,Y)

注意:该值以弧度为单位!

Python 导入

如果使用 Python,您可以在下面的 numpy 导入中重用上面的代码。

from numpy import arctan2,random,sin,cos,degrees

要将弧度转换成角度,只需在末端应用“角度”功能- degrees(bearing)。在我的例子中,我想要北方的学位,因此使用了((degrees(bearing)+360) % 360)

结论

这里我们有一个简单的方法来计算两点之间的方位。

计算向量 P-范数——数据科学中的线性代数(ⅳ)

原文:https://towardsdatascience.com/calculating-vector-p-norms-linear-algebra-for-data-science-iv-400511cffcf0?source=collection_archive---------7-----------------------

支持机器学习中正则化方法的数学原理

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

线性代数系列中,快速回顾一下,我们已经学习了什么是向量、矩阵&张量如何计算点积来解线性方程组,以及什么是单位矩阵和逆矩阵。

继续这个系列,下一个非常重要的话题是向量范数。

所以,

什么是向量范数?

向量范数是将向量映射到正值的任何函数,该正值是向量的大小或向量的长度。现在,有不同的函数,为我们提供了不同的计算向量长度的方法。

没关系,但是为什么我们要研究这个,这个向量长度代表什么…?

为什么要学习规范??

范数是机器学习和深度学习中非常重要的概念,通常用于计算 ML/DL 模型预测中的误差。

向量的长度通常表示预测和实际观察值之间的误差(标签)。

我们经常需要计算向量的长度或大小,要么直接用作 ML 中的正则化方法,要么作为更广泛的向量或矩阵运算的一部分。

那么,这些是什么功能呢?

范数函数的特征

范数是由以下性质表征的任何函数:

  1. 范数返回非负值,因为它是向量的大小或长度,不能为负。
  2. 当且仅当向量为零向量时,范数为 0。
  3. 范数遵循三角不等式,即两个(或更多)向量之和的范数小于或等于单个向量的范数之和。它只是简单地说明,从几何学上讲,任意两点之间的最短路径是一条直线。
    用方程表示:
    ∑a+b∨≤∑a ∨+∨b∨
    其中 a 和 b 是两个向量,竖线∨一般表示范数。
  4. 向量乘以标量的范数等于这个标量的绝对值乘以向量的范数。
    代表方程:∥k⋅x∥=|k|⋅∥x

计算 P-范数的步骤

P-norm 的计算基于中心公式:

x=(∑ᵢ|xᵢ|ᵖ)/ᵖ

这里有一个快速的 4 步过程来得到一个向量的 p 范数

  1. 得到向量每个元素的绝对值。
  2. 将这些绝对值提高到幂 p.
  3. 计算所有这些提高的绝对值的总和。
  4. 得到 p ₜₕ根或者根据上一步的结果将功率提高到 1/p。

现在,基于公式*、*中的 P 的值,我们得到不同类型的规范。让我们逐一讨论这些:

L⁰常模

在公式中放入 p = 0 将得到 L⁰范数。

除了 0 之外,任何 0 次幂都将返回 1。L⁰并不是一个真正的标准,因为它没有表现出特征 #4 (如上所述)。乘以一个常数会给我们这个数本身。

l 范数

p = 1 得到我们 L 范数。本质上,该公式将计算矢量绝对值的总和。

公式:|x|₁=(∑ᵢ |xᵢ|)

这用于计算平均绝对误差。

Python 代码

我们可以使用 Numpy 包的线性代数模块获得 L 范数,该模块提供了一个 norm()方法。默认情况下,范数函数被设置为计算 L2 范数,但是我们可以将 p 的值作为参数传递。因此,对于 L 范数,我们将传递 1 给它:

from numpy import linalg#creating a vector
a = np.array([1,2,3])#calculating L¹ norm
linalg.norm(a, 1)##output: 6.0

l 范数

放入 p = 2 得到 L 范数。该公式将计算矢量值的平方和的平方根。

也被称为欧几里德范数。这是机器学习中广泛使用的规范,用于计算均方根误差。

∥x∥₂ = (∑ᵢ xᵢ ) /

所以,对于向量 u, L 范数将变成:

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

Python 代码

同样,使用相同的范数函数,我们可以计算 L 范数:

norm(a) # or you can pass 2 like this: norm(a,2)## output: 3.7416573867739413

平方 L 范数

∑ᵢ|xᵢ|

平方 L2 范数是简单的 L2 范数,但没有平方根。对上面计算的 L2 范数求平方将得到 L2 范数。

这很方便,因为它去掉了平方根,我们得到的是向量的每个平方值的简单和。

平方欧几里德范数在机器学习中被广泛使用,部分是因为它可以通过向量运算xx来计算

Python 代码

让我们用 python 代码验证这一点:

x = np.array([[1], [3], [5], [7]])
euclideanNorm = x.T.dot(x)## output: array([[84]])np.linalg.norm(x)**2
##ouput: 84.0

最大范数

这是 L∞范数,它简单地返回向量最大元素的绝对值。

公式变成:

‖x‖∞=maxᵢ|xᵢ|

Python 代码

让我们用 python 代码来验证这一点,我们只需将无穷大传递给 norm 函数:

x = np.array([[1], [3], [5], [7]])
norm(x, np.inf)##output: 7.0

您可以在这里试用所有 python 代码:

[## 谷歌联合实验室

计算规范

colab.research.google.com](https://colab.research.google.com/drive/1DEqeWjD0kby5LhrShNzAIPSqWN6Wdsck?usp=sharing)

图形可视化

让我们试着用图表来分析这些情节。我在 2 维(x,y)中使用了相同的公式,第 3 维表示规范本身。

你可以看看这个表面绘图仪,我用它来得到这些图。

l 范数

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

使用https://academo.org/demos/3d-surface-plotter/创建

更像是彼此相连的飞机。x 和 Y 是这里的参数。

l 范数

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

https://academo.org/demos/3d-surface-plotter/

平方 L 范数

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

【https://academo.org/demos/3d-surface-plotter/

L2 范数的平方和 L2 范数看起来相似,但在零标记附近(中间蓝色区域)的图的陡度方面有一个重要的区别。平方 L2 范数不能很好地区分零和其他更小的值。因此,这揭示了其使用的一个问题。

摘要

在本教程中,我们研究了计算向量长度或大小的不同方法,称为向量范数。

具体来说,我们学习了如何:

  • 计算 L1 范数,该范数计算为矢量绝对值的和。
  • 计算 L2 范数,其计算方式为矢量值平方之和的平方根。
  • 计算作为最大向量值计算的最大范数。

数据科学与 Harshit

通过这个渠道,我计划推出几个覆盖整个数据科学领域的系列。以下是你应该订阅频道的原因:

线性回归背后的微积分

原文:https://towardsdatascience.com/calculus-behind-linear-regression-1396cfd0b4a9?source=collection_archive---------20-----------------------

理解线性回归的数学方面

线性回归通常是任何机器学习课程的起点。目标是预测输入变量和目标变量之间的线性关系。

最简单的例子是穿过空间原点的直线。在这里,我们被限制在二维空间,因此笛卡尔平面。让我们从头开始逐步开发,从 y=mx 格式开始,然后是 y=mx+c 回归。

y=mx 的简化场景

在这种情况下,我们知道我们要对通过原点的数据拟合一条线。这是一个简单的例子,可能是一个很好的起点。让我们发展我们的损失函数,看看它如何表现。让我们把我们的估计改写如下。

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

h(x) 是估计函数 J(θ) 是损失函数

注意,我们使用平方误差除以 2m ,其中 m 是我们拥有的数据点的数量。因此,我们可以认为这是一个平均值。准确地说,这是均方误差的一半。当我们得到损失函数的导数时,除以 2 背后的直觉将是可见的。这有助于我们得到一个更简单的损失函数的导数。让我们考虑以下几点。

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

2D 平面上的点集

我使用添加了噪声的 y=5x 图生成了这些点。因此,理想情况下,我们对 θ 的估计值应该更接近 5 的值。现在,如果我们绘制不同 θ 值的损失函数,我们将得到如下结果。

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

损失函数

注意,我们有一个更接近 θ=5 的损失函数的最小值。让我们看看如何通过计算得出这个特定的最小值。

注意橙色的切线和它的梯度。它是一个正的梯度,这给了我们一个想法,我们必须向相反的方向去寻找一个更低的值。

梯度下降

梯度下降的概念,正如通常解释的那样,是仅使用周围斜坡的知识在未知的地形中穿过下坡。因此,在本例中,目标是使用坡度找到穿过的方向,并决定移动的步长**。**

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

寻找遍历方向

很明显,我们必须向左走。步长呢?。这就是学习率发挥作用的地方。这被称为 。步长越小,速度越慢。然而,迈出更大的一步可能会让你错过最小值(想象你从θ= 7°步进到θ= 1°,没有意义)。所以我们可以把 θ 的变化公式化为**。**

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

θ计算的下一个值和损失函数的导数

由于这种线性回归的情况是独立于数据的,这可以用作计算损失和进行梯度下降的标准方程。这应该强调这样一个事实,即我们总是坚持标准损失函数,而没有建立自己的损失函数。用 python 实现这一点非常简单。我们用 len(x) 表示 m ,用 0.001 表示 ⍺.xy 是训练数据集或我们要估计的点集。

#Loss function(1/2* len(x)) * sum([(theta* x[i] - y[i])**2 for i in range(len(x))])#Change of thetatheta - 0.0001 * (1/len(x)) * sum([x[i]*(theta*x[i] - y[i]) for i in range(len(x))])

我们可以迭代地进行梯度下降,直到我们达到最小值或者直到损失函数低于某个阈值。我们也可以决定迭代的次数。因为我们保证在线性回归中有一个最小值,所以我们可以如下实现 descend。

loss = float('inf')
theta = 8

while True:
    theta = descend(theta)

    if loss > loss_function(theta, x, y):
        loss = loss_function(theta, x, y)
    else:
        break

下降函数返回下一个 θ 值,而损失 _ 函数返回 θ 值处的损失。我们可以将梯度遍历可视化如下。

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

随着损失函数的下降

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

梯度下降中每次迭代的估计变化

完整场景 y=mx+c

这是前一种情况的扩展,我们可以对估计方程和损失函数建模如下。

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

h(x) 是估计函数 J(θ1,θ2) 是损失函数

以下是我将尝试拟合的一组点。我使用函数 y=5 + 3x 生成了这个图,带有一点噪声。

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

y=5 + 3x 带噪声

现在我们有了一个包含两个变量的损失函数,我们的损失函数将是一个 3D 图,第三个轴对应于损失值。用图解法,我们可以说明如下。

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

损失函数的变化。圆圈中间是最小损失点。

我们的梯度下降可以被类似地导出以达到下面的方程组。

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

梯度下降函数的求导

请注意,梯度必须同时更新,以便一个 θ 值的更新不会影响另一个。在 python 中,该操作如下所示。

theta1_new = theta1 - 0.01 * (1/len(x)) * sum([theta1 + theta2*x[i] - y[i] for i in range(len(x))])theta2_new = theta2 - 0.01 * (1/len(x)) * sum([x[i]*(theta1 + theta2*x[i] - y[i]) for i in range(len(x))])theta1, theta2 = theta1_new, theta2_new

损失函数如下。对我们之前场景的唯一更新是,现在我们有了第二个变量 θ2

(1/2* len(x)) * sum([(theta1 + theta2* x[i] - y[i])**2 for i in range(len(x))])

我通过梯度下降更新了我的迭代,如下所示。除了前面检查下降损失的场景之外,我还考虑了下降损失的数量,以确保我不会迭代到非常接近最小值的点。

loss = float('inf')
theta1 = 10
theta2 = -1

while True:
    theta1, theta2 = descend(theta1, theta2)

    if loss > loss_function(theta1, theta2, x, y) and \
            abs(loss - loss_function(theta1, theta2, x, y)) > 0.001:
        loss = loss_function(theta1, theta2, x, y)
    else:
        break

我们可以将损失函数在梯度上的下降形象化如下。

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

随着损失地形移动

当我们的θ值变化时,我们的回归拟合与表上的值非常吻合。它看起来像下面这样。

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

梯度下降中每次迭代的估计变化

我们在最终拟合中分别得到截距和梯度的值 6.52.7 ,考虑到数据中的噪声,这是合理的。

感谢阅读。干杯!

微积分——关于“变化”的数学

原文:https://towardsdatascience.com/calculus-the-mathematics-of-change-f04f38770843?source=collection_archive---------5-----------------------

微积分如何实现机器学习和人工智能

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

来源:https://www.freepik.com/free-photos-vectors/background

数据科学和机器学习激发了人们对数学的兴趣。许多在人工智能领域提升技能的人已经意识到数学概念的实际应用,这是他们人生中的第一次。在我冒险进入 AI/ML 空间的过程中,我意识到,在学校和大学里,数学思想(如微积分和向量代数)比它们实际上是多么困难!我想很多人都有这种感觉。本文试图从根本上解释微积分及其应用,而不使用臭名昭著的术语和可怕的微积分方程。我期望这篇阅读会展现微积分和数学的美丽、简单和魔力。这个想法是为了让你会爱上它!

什么是微积分,为什么需要微积分?

人类有一个伟大的品质——“好奇心”。好奇心驱使人类去观察和了解自然。从广义上讲,科学可以称为对自然的研究,而数学是表达自然的语言。

理解或学习通常被表达为数学函数,该函数捕捉所涉及的实体或维度之间的关系。比方说,你正在开车。随着时间的流逝,你在测量汽车的速度。一些测量示例如下:

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

正如所见,速度和时间之间有关系。久而久之通过时,汽车的速度以恒定速率增加。每一分钟,车速增加 5 倍。这种关系可以表示如下:

速度是时间的函数

速度= f(时间)

S = 5 t*

从视觉上,你可以看到速度和时间之间存在线性关系

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

你可以想象这个关系实际上是代表一条线的方程:

y = mx + b

其中 m 为直线的斜率,b 为直线的截距

在我们的例子中,等式变成了 s = 5t + 0

把注意力放在这个叫做“斜坡”的东西上。它代表了什么?我们知道,随着时间的推移,汽车的速度是变化的。这种变化是由什么因素引起的?我们可以通过检查速度随时间的变化而改变了多少来找出答案。例如在 t = 1 和 t =2 之间,速度从 5 变为 10。这可以写成:

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

当事物发生变化时,一个更有用的衡量标准是“。*变化率让我们知道一个量对另一个量的依赖程度。*如果比率越大,数量之间的相关性越大,反之亦然。(现在想想你试图通过机器学习做什么。你看出其中的联系了吗?)

在我们的例子中,如果我们用“速度的变化”除以“时间的变化”,就得到变化率

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

这是速度相对于时间的变化率。在我们的例子中,这个速率是恒定的。您可以采用其他时间间隔(例如 t=2 和 t=5)来测量速度的变化(25–10)。比率是一样的——5

(25-10)/(5–2)

变化率也被称为斜率梯度。请注意,变化率越大,线的倾斜度就越大(因此,斜率也就越大)。比较下图中橙色线和蓝色线的斜率:

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

这和微积分有什么关系?其实,这就是微积分

微积分是研究变化的数学分支

微积分通过测量一个变量在另一个变量发生变化时如何变化,以及这些变化如何随着时间的推移而累积,来帮助找出两个变量(量)之间的关系。

在我们上面的例子中,汽车的速度以恒定的速率增加。如果这个变化率不是恒定的,会发生什么?如果汽车在加速,速度的变化率每分钟都不一样,那该怎么办

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

在这种情况下,如何测量变化率,因为不同的时间段变化率不同?我们不能为这种数据定义一个单一的速度变化率。

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

你可以注意到,速度的变化率沿着久而久之向上攀升。捕捉这种关系的数学函数不是一条直线,而是一条 【曲线】

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

从我们之前的例子中,我们知道一条直线的斜率或梯度给出了 Y 轴变量(速度)相对于 X 轴变量(时间)的变化率。“直”的性质意味着变化率是恒定的。

但是…

如何测量一条曲线的“斜率”或“倾斜度”?

“曲线性”的特性意味着变化率不是常数。

微积分的妙处来了……

你能做的就是把曲线想象成一个由大量的* 非常小的直线段*的集合**

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

我们现在将计算曲线的“非常小”的线段的斜率。这个斜率表示相对于时间的“非常小”的变化,速度的“非常小”的变化。

让我们将“非常小的”速度变化表示为*“ds”*

同样,一个“非常小”的时间变化为*【dt】*****

这个“非常小”的线段的斜率是

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

它可以计算如下:

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

请注意,由于“dt”已经很小了,所以下面将变得非常小,因此可以忽略不计

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

理论上,我们可以让 ds 和 dt 无穷小,这样这个“非常小”的线段“就变成了一个点。此时或瞬间的变化率或斜率实际上是曲线的切线。****

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

在我们的例子中,这个函数在特定时刻的函数和变化率是

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

在微积分术语中,找出一个变量相对于另一个变量的变化率的过程被称为【微分】。换句话说,如果

y = f(x)

那么找出 dy/dx 的过程就称为“ 微分 ”或“ 微分 ”。dy/dx 的比值称为“y 相对于 x 的微分系数”或“导数”。记住,它只不过是 y 相对于 x 的变化率

请记住—“dx”表示 x 的很小一部分

如果 y 是一个常数。这种情况下 dy/dx 会是多少?当 y 的值不变时,它将是 0。这是一个常数。

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

微分学在机器学习中的应用

微积分在机器学习中最稳健的应用是线性回归(和神经网络)中的 梯度下降 算法

线性回归涉及使用数据来计算最适合该数据的直线,然后使用该直线来预测一个变量与另一个变量的得分。预测就是根据预测变量(或独立变量)的分数来估计结果变量(或因变量)的分数的过程。为了生成回归线,我们寻找最佳拟合的线。能够更好地解释自变量和因变量之间关系的线称为最佳拟合线。观察值和实际值之间的差异给出了误差。计算该误差的公式也被称为成本函数

最佳拟合线在数学上将表示为

Y = m.x + c

其中 m 和 c 分别是直线的斜率和截距。这是梯度下降算法必须找出的两个系数。

误差将取决于线的系数。如果系数的值不是最优的,那么误差会更大。线性回归模型的成本函数或误差量取决于所选系数的值。

这就是微积分的用处。我们可以求出不同系数值的误差变化率。变化率最小的值(即 0,曲线的底部)是最佳值。

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

所以微分是用来找曲线的极小点的。这一点给出了正在寻找的系数的最佳值!

关于整合的一句话

微积分的第二部分是积分。很简单,微分的逆运算。

在微分中,我们把事物分解成越来越小的部分。

在积分中,我们把所有较小的部分累加起来。整合的符号是:

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

每当看到这个符号,就在脑海里用“全部加起来”来代替。

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

x 的所有小部分的总和会是多少?

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

(有一本由 Silvanus P. Thompson 写的非常棒的书《T4 微积分变得简单》,非常详细地解释了这些概念)

我们为什么要这么做?为什么要整合?简单的回答是——

有许多事情是无法理解的,除非你把它们分解成更小的部分,对每个更小的部分做一些运算,然后把结果累加起来。

让我们以一个长方形为例:

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

*我们知道长方形的面积是长*宽(y x)

你能证明吗?从微积分的角度思考。想象一个更小的矩形,取一点宽度(dx)。

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

整个矩形可以认为是所有宽度为 dx 的较小矩形的总和

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

所以,现在我们有 x 个小矩形,每个宽度为 dx,长度为 y。

如果你想象 dx 非常非常小,那么迷你矩形最终会缩减为一条线(宽度接近 0,长度为 y)。整个矩形只是长度为“y”的“线”的集合。多少行?— x。

总面积=线 1 的长度+线 2 的长度+ ……。+直线 X 的长度

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

面积= Y * X

关键要点

  1. 学习(人类或机器)就是寻找变量之间的关系。
  2. 如果一个变量的值的变化是由另一个变量的值的变化触发的,那么找出变化率通常是非常有用的。这个比率实际上是两个变量之间关系的度量。在数学术语中,它也被称为斜率或梯度。微积分是研究“变化”的数学分支
  3. 微分是找出一个变量相对于另一个变量的变化率的过程。比率 dy/dx 代表这个变化率。几何上,它代表函数切线的斜率。
  4. 在机器学习中,回归算法使用微分过程来测量模型中误差的变化率,其中系数的值发生变化。变化率为 0 时的系数值给出了最佳值。

一旦你开始意识到数学概念背后的直觉,整个思维方式就会改变。分化和整合让我们将世界视为一组小部分以及这些小部分的总和。

您可能也会喜欢下面的文章:

  1. 为什么数据在数据科学中被表示为向量?
  2. 发现数学思维
  3. 人类学习 vs 机器学习

校准分类器

原文:https://towardsdatascience.com/calibrating-classifiers-559abc30711a?source=collection_archive---------19-----------------------

你确定你的模型返回概率吗?🎲

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

希德·沙尔姆Unsplash 拍摄的照片

大多数用于分类的机器学习模型输出介于 0 和 1 之间的数字,我们倾向于将其解释为样本属于各个类别的概率。例如,在 scikit-learn 中,我们可以通过在模型上调用一个predict_proba()方法来获得它们。 Proba ,就像在Probaabilities 里,对吧?这些数字通常对所有类别加起来都是 1,这证实了我们的信念,即它们是概率。但是他们是吗?嗯,通常没有,下面是原因。

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

到底什么是概率?

好吧,好吧,这些数字在某种意义上是概率,但不是我们希望的那样。它们满足被如此对待的大多数条件:它们在 0 和 1 之间,总和为 1,并且具有这样的性质,即数字越高,相应样本的类成员越可能。最后一点意味着,如果你只关心硬分类,你可以通过这些伪概率对你的样本进行分类,并应用阈值处理,例如,在每一类中取 x% 个最可能的样本。

然而,如果你也关心你的分类的确定性,这些数字是没有用的。这是因为它们不是频率主义意义上的概率。这是什么意思?一个常客会告诉你

“一个事件的概率是它在许多试验中相对频率的极限”。

比如为什么骰子掷出六的概率是 1/6?因为如果你滚动它 6 00 万次,你会得到大约 1 00 万个 6。如果你滚动它无限次,那么正好 1/6 次滚动将会是 6 次。

这与分类模型有什么关系?如果您的模型会产生频率主义意义上的概率,那么在所有情况下,当模型预测第 1 类的概率为 80%时,它在大约 80%的情况下是正确的。

正如我们已经说过的,对于大多数模型来说,情况并非如此。但是为什么重要呢?让我们实际一点,试着从足球比赛的赌注中赢得一些现金。

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

赌足球比赛

我收集了一个数据集,包含过去几年英超联赛的足球比赛结果。一排就是一局。看起来是这样的:

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

结果栏写明谁赢了这场比赛: H ome 队, A way 队,或者有一个 D raw 队。我们将构建一个二元分类器,尝试预测主队是否获胜。数据集中有 18 个特征:两支球队的 ELO 评分以及许多不同的统计数据,这些数据总结了两支球队在最近的比赛中在进攻和防守方面的表现。如果我们能预测主队是否会赢,我们就赌他们会发财。

数据集中有 5588 个游戏。我已经将其中的十分之一作为测试集,并为剩余的训练集拟合了一个随机森林。由于有许多特征,我们将首先使用主成分来降低维数。

我们得了 0.63 分。不好,也不可怕。当然比总是预测主场获胜的虚拟模型要好——这样的模型将获得 0.46 的准确度(因为东道主往往会赢得几乎一半的比赛)。

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

校准曲线

在你冲向投注网站之前,查看一下校准曲线。它告诉你模型返回的概率与理想的常客概率相差多少。在这里,我们按照以下方式对测试数据进行计算:我们将所有预测的概率分成宽度为 0.1 的箱,对于每个箱,我们计算主队获胜的样本的百分比:

通过使用 scikit-learn 的calibration_curve()函数,您也可以更快地得到类似的结果,但是我们所做的手工工作会明确地告诉您发生了什么。我们现在可以绘制得到的df来得到所谓的校准曲线:

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

理想情况下,所有点都应该在对角线上。这将意味着该模型是完美校准的,其概率估计是可信的。然而,事实并非如此。

实际情况是,如果模型预测主队获胜的概率在 0%到 10%之间(水平轴上的第一个框),实际上,主队在大约 40%的情况下获胜。**如果我们只对模型确定主场获胜(> 90%概率)的游戏下注,会怎么样?我们只能在大约 30%的游戏中做对。**这是一个可怕的下注策略!

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

为什么这么没校准?

我们刚刚看到的校准曲线显示了一个 S 形图案。许多分类模型经常出现这种情况,其结果通常是高估低概率和低估高概率。(对于我们的数据来说,似乎是反过来的,可能是由于极端箱中的观察数量,但要点仍然成立:概率估计相当差。)

那么,为什么很多模型会产生这种有偏的概率估计,尤其是对于很低和很高的值?根据工作方式的不同,每个型号的原因略有不同。这里,我们使用了一个随机森林,它是决策树的集合。森林的预测是通过对单棵树的预测进行平均而得到的,并且它们之间总是存在一些差异。由于概率以[0,1]为界,在这个区间的边界上总会有一些偏差。例如,假设一个模型应该预测某个测试样本的概率为零。一些基础树将正确预测零,但一些将预测稍高的值。取平均值会使森林的预测值远离零。在[0,1]区间的另一侧,这种效应类似但相反。

许多其他分类器,如朴素贝叶斯、支持向量机或决策树,也会产生 S 形校准曲线。这种情况的一般原因是,大多数分类模型针对二进制度量进行了优化,并根据二进制度量进行评分。准确性只看我们是对是错,不考虑确定性。基尼系数——决策树用来决定分割的杂质,它优化了尽可能精确和尽可能快速的分割。例子不胜枚举。

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

校准模型

幸运的是,有一种方法可以修正,即校准概率估计值。实际上,甚至有两个!

一种是将随机森林中的概率估计值输入到逻辑回归模型中,并用原始目标对其进行训练。这行得通,因为逻辑回归是一种罕见的野兽,它实际上产生校准的概率。其背后的秘密是,它优化了对数优势,这使得概率实际上存在于模型的成本函数中。这种方法被称为普氏规模

另一个是所谓的等张回归。例如,这是一个非参数模型,它将分段常数、非递减函数与随机森林预测的概率相拟合,以便将它们映射到真实的概率空间。

使用这两种方法之间的实际差异是,普拉特标度在纠正 S 形概率估计方面更好,就像我们从我们的足球数据集获得的那样。另一方面,保序回归可以处理任何偏差形状,但代价是容易过度拟合。在实践中,我建议使用 plat-scaling,除非你发现它不太好用,而且你的数据集很大

请注意,无论您选择哪种方法,校准模型都应该基于与随机森林所适用的数据不同的数据。因此,您需要一个单独的验证集(您将随机森林与训练集相匹配,对验证目标进行概率预测,并根据随机森林对这些目标的预测来匹配预测验证目标的校准模型),或者您可以简单地使用交叉验证,就像我们现在要做的那样。

校准分类器就像将它传递给 scikit-learn 的CalibratedClassiferCV一样简单。方法参数可以是sigmoid(缺省值,用于逻辑回归,也称为 Platt-scaling)或isotonic

现在让我们在上一个模型的基础上绘制这个新的校准模型的校准曲线。

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

这里有两件有趣的事情可以看:

  • 校准的概率估计被校准。它们平均更接近对角线,因此更可靠。
  • 校准模型根本不输出极端概率。它生产的最低值在 20 年代,最高值在 70 年代。这是一种常见的模式。

最后一句话:校准模型并不能保证其类分配能力的提高。准确性、精确度或召回率等指标有时甚至会下降。在这种情况下,校准模型的精度为 62%,而原始随机森林的精度为 63%。然而,校准得到了正确的概率,我们不会输给庄家。

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

结论

  • 许多分类模型,如随机森林、决策树、支持向量机或朴素贝叶斯返回类成员的有偏概率估计。
  • 这些有偏概率可以用于阈值处理,但不能作为确定性度量。例如,如果根据这样的模型,一个样本有 70%的概率属于某个类别,而另一个样本有 50%的概率属于某个类别,那么前者确实更有可能属于该类别,但是这种情况为真的概率实际上不需要达到 70%。
  • 对于非常高和非常低的预测概率来说尤其如此:如果模型预测的是 2%,那么真实的概率很可能不止这个;如果它预测 97%,通常会更低。
  • 修正有偏概率的过程称为校准。它归结为在初始模型之上训练一个校准分类器。两种流行的校准模型是逻辑回归和保序回归。
  • 训练校准模型需要有单独的验证集或执行交叉验证,以避免过度拟合。
  • 这在 scikit-learn 中非常容易做到。

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

感谢阅读!

如果你喜欢这篇文章,为什么不在我的新文章上 订阅电子邮件更新 ?通过 成为媒介会员 ,你可以支持我的写作,并无限制地访问其他作者和我自己的所有故事。

需要咨询?你可以问我任何事情,也可以在这里 预定我 1:1

也可以试试 我的其他文章 中的一篇。不能选择?从这些中选择一个:

[## 线性分类器:综述

本文讨论了四个流行的线性函数的数学性质和 Python 的实际应用

towardsdatascience.com](/linear-classifiers-an-overview-e121135bd3bb) [## 线性回归中收缩法和选择法的比较

详细介绍 7 种流行的收缩和选择方法。

towardsdatascience.com](/a-comparison-of-shrinkage-and-selection-methods-for-linear-regression-ee4dd3a71f16) [## 增强你对助推的把握

揭秘著名的竞赛获奖算法。

towardsdatascience.com](/boost-your-grasp-on-boosting-acf239694b1)

校准数据科学面试评估

原文:https://towardsdatascience.com/calibrating-the-data-science-interview-assessment-751e2db64198?source=collection_archive---------52-----------------------

几个月前,我写了一篇关于校准数据科学面试问题的帖子,看看数据科学家与他们的同行相比得分如何。我们最终让 600 多名数据科学家参加了我们的测验,这是数据科学面试中不同主题的八个问题。

附:如果你还没做测验,不想看到结果来影响你的分数, 拿去这里,别读了!

快速总结。我们收到了 600 多份回答,其中包括六道选择题和两道简答题。我很想知道我们会得到什么样的简短回答,但一般来说,它们都不是很有描述性,有时完全是随机的。所以我把它们排除在了最后的测验得分之外。

测验中最简单的问题是关于正则化的机器学习问题,其中超过 56%的受访者答对了。

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

测验中最难的问题是算法问题。正确答案实际上是第二多的答案。一般来说,这并不奇怪,因为这需要最深入的思考和最复杂的理解。

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

当我们绘制总分时,我们发现有趣的是接近正态分布。大多数人只答对了两个问题,平均值为 2.35,标准差为 1.37。如果你答对了六个问题中的四个,你就已经是前 20%的人了!

最后一个有趣的发现是,在最后,我们问我们的用户,如果他们得分高,他们是否愿意接受公司的邀请。我们绘制了两种分布图,看看基于他们求职行为的结果是否会有差异。

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

潜在的轻微增长,但没有真正突出。在低问题样本量的情况下,很难看出其中的显著差异。

最终,这个测验是一个有趣的测试,可以了解我们的问题有多精确。但是我认为很明显,也许结果中最大的差异是基于每个用户决定在测验上多努力。虽然这意味着是相同的,但每个用户对应该花多少时间以及他们对测验的总体投入有不同的预期。

此外,在测验中得分高的用户在数据科学面试中是否表现出色?数据科学领域有如此广泛的角色和职责,可能无法通过您对技术问题的回答来衡量。但更常见的是,它们确实充当了一面旗帜,是许多招聘经理清除误报的初步尝试。例如,我非常喜欢测验中的 SQL 问题,因为它测试了两个概念;如果你了解左连接如何工作以及查询结果的分布情况。

最后,如果我们增加测验中的问题数量,是否会更好地分配和衡量每位数据科学家的熟练程度?一方面,我们不想降低问答游戏的转化率,让用户中途退出。但与此同时,更多的问题意味着更多的数据点可以信任结果,并用来单独了解用户在数据科学面试技能方面可以改进的地方。

最终,虽然数据科学面试将继续是一个黑箱,但我们将继续不时地尝试照亮那里,看看我们是否能找出更多的东西!

原载于 2020 年 4 月 1 日 https://www.interviewquery.com

加州的大赌博

原文:https://towardsdatascience.com/californias-big-gamble-1c67f282d3ac?source=collection_archive---------77-----------------------

新冠肺炎的数据可能并不像一些人认为的那样充满希望

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

蒂姆·莫斯霍尔德在 Unsplash 上的照片

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

旧金山湾区是全国第一个发起就地避难的地方。阿拉米达、康特拉科斯塔、马林、圣马特奥和圣克拉拉等县以及旧金山和伯克利市于 2020 年 3 月 17 日采取行动,敦促人们留在家中。加利福尼亚州紧随其后,州长加文·纽瑟姆于 2020 年 3 月 19 日发布了全州就地避难令。

到目前为止,加州是应对新冠肺炎最谨慎和负责任的州之一。就我个人而言,我很感激生活在一个重视这种威胁的州。在过去的几个月里,加文·纽瑟姆州长为遏制这种病毒的传播所采取的迅速而果断的措施给我留下了深刻的印象。

也就是说,我认为封锁限制的放松可能是令人担忧的原因。为了解释原因,我们需要看一下数据。

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

加州每日新新冠肺炎病例图表(来源:加州新冠肺炎仪表板

上图显示了一段时间以来每天新增的新冠肺炎病例。我强调了自 3 月 19 日以来每天新增病例的数量,这一天是纽瑟姆州长发起就地安置的日子。你可以看到那天有 177 个新病例。

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

加州每日新新冠肺炎病例图表(来源:加州新冠肺炎仪表板

现在看这张图表。这是同一个图表,但是突出显示了 5 月 23 日星期六新增病例的数量。当天新增病例 2287 例。

新冠肺炎每日新增病例比封锁开始时增加了 10 倍

177 对 2287。即使我很慷慨,将第一个数字四舍五入到 200,将第二个数字四舍五入到 2000,这仍然是 10 倍的增长。新冠肺炎每日新病例比封锁开始时增加了 10 倍。

增加测试怎么办?

是的,那是一个重要的考虑。毕竟国家一直在疯狂测试。根据该州的冠状病毒数据网页,他们现在已经进行了 150 万次测试。

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

(来源:CA 的冠状病毒数据网页)

但不幸的是,提供这些数据的图表并没有显示我们实际上需要知道什么来评估检测对确诊新病例率的影响。为了理解这一点,我们需要每天进行的测试数量。此图表显示了进行的测试总数。这意味着,对于该图表显示的每一天,与该天相关联的数字是所有时间内进行的实验室测试的总数。这意味着每个数据点是当天进行的测试数量加上前几天进行的所有测试的总和。像这样的图表实际上除了向我们显示测试总数之外并没有多大用处——这个数字已经在顶部给出了。

我觉得奇怪的是,他们没有在页面上显示每天进行的测试数量的图表。如果你有这两组数据中的一组,你几乎肯定有另一组。

幸运的是,冠状病毒数据中心确实有一个测试图表,如果你添加一个专门针对加州的过滤器的话。

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

图表显示了一段时间内加州进行的新冠肺炎测试的数量(来源: Knowi 新冠肺炎测试仪表板

从这个图表中我们可以看到,在 3 月 19 日,该州为新冠肺炎进行了大约 1100 次测试。而在 5 月 24 日,他们进行了大约 67000 次测试。这意味着该州正在进行的测试是这一切开始时的 60 倍。

等等,还有很多测试。那一定是个好兆头,对吧?

嗯,是也不是。是的,这意味着比加州第一次开始检测时,检测结果呈阳性的比例更小了。但不幸的是,它实际上并没有告诉我们事情是否正在好转。为了给我们提供可操作的信息,我们必须从一开始就进行随机抽样——这不是疫情测试的方式。

一开始,我们只测试那些表现出最严重和最明显的新冠肺炎症状的人。现在,随着我们检测能力的提高,我们能够检测越来越多的人,包括许多没有表现出症状的人。因此,随着我们测试的人越来越多,阳性测试的百分比会下降,这是我们测试程序的自然结果。

我们仍然不知道真实的数字

事实是,当我们第一次开始测试时,每天新感染的数量可能比每天 200 多,但因为我们没有做足够的测试,我们不知道实际情况有多糟糕。

在没有数据或数据不确定的情况下做决定是赌博。这就是我们正在做的,放松加州的封锁。

加利福尼亚州有 3951 万人口。这意味着,即使我们每天进行 67,000 次测试的最高测试率,我们每天也只测试 0.2%的人口。因此,我们得到的每日新病例的数字可能仍然与新病例的真实数字相差甚远。

如果每天 200 个新案例足以成为在 3 月份启动锁定的理由,那么现在这个数字的 10 倍应该足以成为继续锁定的理由

最后的想法

我们只是不知道足够的信息来确定打开它是否安全。由于人们的生命悬而未决,在我们有真正的数据表明它是安全的之前,保持限制可能是谨慎的。不仅仅是越来越好,而是它实际上是安全的。目前,没有任何数据能确切地告诉我们这一点。

在没有数据或数据不确定的情况下做出决策,是一种赌博。这就是我们正在做的,放松加州的封锁。

如果每天 200 个新案例是 3 月份启动封锁的充分理由,那么 10 倍的数字应该是现在继续封锁的充分理由。

提前选举:假新闻还是统计数据?

原文:https://towardsdatascience.com/calling-elections-early-fake-news-or-statistics-dd2e8cc196c5?source=collection_archive---------49-----------------------

调用选举背后的推理引擎的高级、可访问的演练

美国东部时间晚上 8 点 40 分,尽管州官员只报告了大约 50 万张选票,但大多数主要新闻站都呼吁伊利诺伊州支持拜登。这仅仅是估计的 6%的选票!一个候选人怎么可能这么早就赢了?这是某种假新闻/压制选民吗?

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

图片来源:保罗·花冈

嗯…事实证明他们是对的,所以让我们看看我们是否能解开统计数据背后的魔力,他们在最终投票数天前用来推断这些结果(在撰写本文时,他们仍在计算)。

我想象这里发生的是一个简单的风险分析,再加上全美争先的驱动力。

一方面,在某一点上,我们几乎“知道”谁赢了,这似乎是合理的,对吗?另一方面,你也不想在这种事情上犯错。这些新闻来源不断争夺我们的眼球(和信任)。先下手为强和不犯错成为一种平衡行为。想象一下第一篇 10 句话的文章在密歇根被调用的时候得到了多少点击量(翻译:$$$)。

最好把那些喜欢做数学的怪人叫来。看看他们能否解决这个问题…

可访问性说明:

这是系列其余部分的基础。下面有一些数字和图表…如果没有的话,就很难用统计学来解释了。然而,我意识到我是为普通读者写的,所以我尽我所能保持通俗易懂,并希望展示统计学的基本原理实际上是多么简单和强大。

1 .大理石

我不知道他们打这些电话所用的信息,但我可以给你看一些我觉得很酷的东西,可以作为我认为幕后发生的事情的一阶近似。

像任何自尊的统计学家一样,我首先假设选票实际上不是选票,而是弹珠。但不是普通的弹珠。这些是特殊的投票弹珠,它们的颜色代表一个人的投票(让我们疯狂一点,说蓝色代表拜登,红色代表特朗普)。在选举日,人们不用去各个投票站、邮箱等地方,而是把他们特殊的弹珠放在一个位于州府的大弹珠袋里投票。现在,一旦这样做了,这个州就有了一个巨大的弹珠袋,它有效地代表了这个州的人民希望谁成为他们的下一任人类自毁按钮的管理者。

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

作者图片

好了,现在好戏开始了。我们首先摇动袋子以确保它完全混合。然后我们开始画弹珠并记录结果。当我们画每一个新的弹珠时,我们对袋子的红/蓝成分有了更好的理解。我们知道,如果袋子的成分有 50%以上是红色,那么川普就赢了。否则,拜登会赢。

因此,让我们这样表述这个问题:需要抽取多少个这样的弹珠,才能有信心指定一个获胜者(例如,假设袋子中有多于或少于 50%的单一颜色)。

扮演上帝

好吧,让我们量化一下。假设伊利诺伊州 55%的人投票给拜登。这意味着这个魔法包的成分是 55%蓝色和 45%红色。很简单。但是还没有人知道!

有那么一会儿,让我们假装我们知道它…也许我们就是上帝。所以我们观察人类从画 100 个弹珠开始,他们看到只有 49 个是蓝色的。作为理性生物的人类得出结论,就他们所知,袋子的成分有 49%是蓝色的,因此特朗普赢了(红色人种万岁)。

作为上帝,我们在这里可能会感到困惑…他们怎么会弄错呢?如果袋子本身是 55%蓝色的,人类画出少于 50%蓝色的几率有多大?为了回答这个问题,我们决定将同一个实验(从袋子里取出 100 个,然后放回原处)运行一百万次,并绘制出每个观察结果的数字(如下所示)。啊,现在我们看到,在 30%的情况下,人类可能画了少于 50 个蓝色弹珠(见红线),并错误地得出袋子里有更多红色弹珠的结论。好的,都检查过了。

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

作者图片

幸运的是,人类很聪明。他们也意识到,如果他们只抓住 100 个弹珠,他们有很高的概率得到错误的答案。所以他们很快增加到 1000 颗弹珠。在告诉你他们看到了什么之前,让我们先猜一猜。一种直观的方法是制作与上面相同的图表(从袋子中抽取 n = 1000 个弹珠一百万次,并绘制结果),看看它能告诉我们什么。

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

作者图片

现在你可以看到,在绝大多数情况下,超过了人类获得正确答案(拜登获胜)所需的 501 个蓝色弹珠(见红色)。事实上,这些愚蠢的人类现在回答错误的几率不到 0.1%(或者说答对的几率是 99.9%)。好了,我们现在感觉好多了。让人类继续数吧。我们和世界上的其他人坐在一起,打开 CNN/FOX 新闻,让戏剧展开。

但是等等,我们不是上帝(至少我不是……尽管我非常尊重我的读者)。因此,虽然上帝可能对上述练习感到满意,但我们不能仅仅为了看看我们的 1000 个大理石样本有多精确而画 1000 万次。这意味着我们已经画了 10 亿颗弹珠,只是为了表达我们对这 1000 颗弹珠有多自信!在这种情况下,我们应该放弃,数一数他们…对吗?

第三步:贝叶斯推理拯救

如上所述,我们想要回答的问题是:袋子里的弹珠是由什么组成的?换句话说,多少百分比的弹珠是蓝色的,多少百分比的弹珠是红色的?

既然拜登赢了伊利诺伊州,我们姑且称蓝色弹珠的比例为" p "这就允许我们说,如果 p > 50%(也写成 p > 0.5),那么拜登赢了。我们已经确定,我们将使用一个 n 弹珠的样本来估计这个 p 。我们的猜测将是我们在图画中观察到的蓝色大理石的比例(自然)。既然这个猜测不一定是包里面的真值 p ,那我们就称它为其他类似但不相同的东西吧。在统计中,我们给 p 一个可爱的小帽子,就像这样, p^ 说:“这实际上不是 p ,但它是我们基于一些数据的最佳猜测。”好了,让我们来回顾一下:

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

作者图片

如果有一种方法可以说,我 99.99%确信 p 在两个数字之间。然后我们可以评估我们猜测中的不确定性,如果我们错了,就掩盖我们的错误。

我很高兴你这么问,因为这正是我们发明置信区间的目的。它们给了我们一种方法来获取一些观察到的数据,并用它来推断产生这些数据的世界。它们告诉我们,我们对数字在一个范围(“区间”)内有多“自信”。

在我们的例子中,我们想知道我们认为大理石袋中蓝色大理石的比例 p 将落入的范围(记住如果我们知道 p 我们就知道谁赢了)。那么我们如何做到这一点呢?这就是统计推断的用武之地。为了让大家更容易理解,我打算简单讲一下,然后我们再跳回来。

{深呼吸}

原来画大理石的情况叫做超几何过程。对于那些不关心这是什么的人来说,重要的是它有一个名字,意思是有人聪明的想出了用它做什么。事实上,到目前为止,我就是这样模拟所有的情节的(如果你告诉 python 发行版的名称,python 会自动完成)。深入研究发现,当袋子里的弹珠数量增加时,它接近一种不同的(更容易处理的)情况,称为二项式过程。我提出这些的唯一原因是,二项式过程有一个重要的参数,你可能已经猜到了,它叫做 p ,我们可以很容易地估算出它的置信区间。我不打算进入近似置信区间的方法,但我会说,如果你感兴趣,查找这些术语:二项分布,置信区间,贝叶斯推断,共轭先验。(这感觉像是我在逃避,所以我可能会就此写另一篇博客,敬请关注。)

{大呼气}

第四步:少错多对

对于我们其余的人,让我们只看图片,好吗?假设我们是之前的那些人,他们从一个只有上帝知道有多少个蓝球的袋子里抽取了 49/100 个红球。所以我们的 p ^由此估计是……你猜是 0.49(统计学家就是这么写 49%)。给定 n=100,关于 p 我们能说什么?嗯,使用前面提到的,不要再提了,贝叶斯推理方法,我们可以在选择 49/100 个蓝色弹珠( n =100)后,猜测(袋子的)值 p 。当然,这是一个概率分布。

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

作者图片

红线位于决策阈值处,如果 p 向左,特朗普获胜,如果向右,拜登获胜。我们看到很有可能 p 在 0.35 到 0.65 之间。因此,由于 p 的可能值有很大的“差异”,我们仍然不知道谁会赢。当然,大部分概率集中在 0.49 的 p 附近(由于一次不吉利的抽签,我们知道这是错误的)。

所以我们继续画,增加 n = 1000。现在,结果可能反映了一些更现实的东西,比如说,541 个蓝色球(即 p^ ~ 0.541),这更接近于包的蓝色球的真实比例( p = 0.55)。我在下面的图上画的洋红色的线显示了它们之间 99.99%概率的边界。因为我们有 99.99%的信心认为 p 在这两条线之间,任何超出这两个界限的值都代表一个不可想象的、不可能的事件。当我们这样做时,分布的扩散大大减小(即分布变得更薄)。这意味着,即使我们没有统计所有样本,我们也只有很小的窗口来猜测,没有一个样本预示着特朗普的胜利。

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

作者图片

如果我们再增加 n(T27 ),现在计数到 10,000 个弹珠,我们可以看到价差继续缩小到几乎为零。事实上,它收缩得如此之大,以至于我们看到 p 小于 0.5(川普获胜)的概率实质上是不存在的。因此,当我们在计数过程中达到这一点时,我们已经 99.99%确信 p 在 0.53 和 0.57 之间。换句话说,甚至在数一万颗弹珠之前,我们就知道拜登会赢。

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

作者图片

但是…好像没那么多票?还有… 弗吉尼亚怎么样?

在创造这个假的挑选大理石的世界时,我对你做了两个假设(并有点隐瞒),这两个假设在现实生活中肯定不成立。这些是:

1.弹珠被很好地混合在一起(以便任何人都有平等的机会被选中)。只有一个包

但是主要的要点仍然是:在一袋混合良好的弹珠的情况下,你不需要选择那么多弹珠来确定袋子其余部分的成分。我发现这很吸引人,有时很难相信。

进一步阅读

如果这让你对打电话给摇摆州需要多长时间或你的投票是否重要感到失望…我用以下州作为案例研究写了几篇文章:

如果你喜欢这篇文章,考虑鼓掌(或 10?)所以 TDS 会更容易与他人分享

电脑会画画吗?

原文:https://towardsdatascience.com/can-a-computer-draw-6a3c397a16d7?source=collection_archive---------37-----------------------

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

乔安娜·科辛斯卡在 Unsplash 上的照片

教计算机使用 GANs 绘制物体草图

上周,我的小弟弟向我介绍了 skribbl.io,这是一个在线猜字游戏。一个人画一个选定的单词,其他人必须猜出来。在一些激烈的战斗和欢笑之后,我想知道计算机在猜词方面是否比人更有效。这时候我碰到了快,画!由谷歌创意实验室开发的一款游戏,一个神经网络试图猜测你在画什么。超过 1500 万玩家创作的涂鸦是开源的,任何人都可以玩。我们来探究一下数据。

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

来源:谷歌

获取数据

快,拔枪!数据集在谷歌云存储上公开,在那里你可以找到 345 个类别的 5000 多万张图纸。使用 gsutil ,您可以本地下载并浏览图纸。数据集的简化版本仅包含必要的信息。每个类别是一个ndjson文件,其中每一行是一个包含单个图形信息的json。让我们看看这幅画是如何表现的:

[ 
  [  // First stroke 
    [x0, x1, x2, x3, ...],
    [y0, y1, y2, y3, ...]
  ],
  [  // Second stroke
    [x0, x1, x2, x3, ...],
    [y0, y1, y2, y3, ...]
  ],
  ... // Additional strokes
]

在该格式中,xy是草图的实值像素坐标。为了得到草图,我们需要在所有这些像素坐标之间“画一条线”。我们可以使用 Bresenham 的直线算法来做到这一点,该算法逼近我们在空白画布上绘制的笔画中每两点之间的直线所包含的点。

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

来源:维基百科

此时,我们能够显示一些草图。这里有一对来自airplanecat类别的夫妇。

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

这些绘图包含在一个256 x 256画布中,但是我们将它们作为一个28 x 28画布输入到我们的模型中。784像素足以捕捉我们绘画的意义,它们让我们在计算上更有效率。

教计算机画画

我给大家介绍一下生成对抗网络(GANs),这是一类机器学习框架,用来学习生成与训练集统计数据相同的新数据。

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

来源:斯坦福大学 [ arXiv:1707.02392 ]

生成模型 G 捕捉训练数据的数据分布,试图欺骗判别模型 D 来估计样本来自训练数据而不是 G 的概率。

你现在可以想象我们如何应用这个框架来解决我们的问题。生成器将生成图纸,而鉴别器将尝试从图纸中识别出。这是一个零和游戏,其中 D 和 G 相互竞争优化他们各自的效用函数。结果是神经网络(G)能够产生努力与训练数据相似的绘图。

我们将要使用的模型的架构可在此处获得,并在 Ian Goodfellow 及其同事于 2014 年撰写的本文中介绍。

让我们画素描

此时,我们创建一个脚本来加载我们的绘图数据集,并准备好训练我们的模型。

首发简单:画一个 的圆

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

0–500–5000–30000 个纪元

首先,模型是无线索的,输出基本上是随机的。经过 500 个时代,我们可以看到形状是模糊可见的,一旦我们达到 5000 个时代,我们可以清楚地认识到一个圆。经过 30,000 个纪元后,形状看起来非常独特,噪音也在消失。

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

升级:画一架 飞机

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

0–5–10–15–30–40–50 个纪元(千)

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

终极挑战:画一只

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

0–1–5–10–20–30–40–50 个纪元(千)

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

轮到你了

这就结束了我们的创造性实验,其源代码可在这里获得。我鼓励你探索这个数据集,并提出你自己的创意项目。你也可以从谷歌创意实验室的其他人工智能实验的集合中寻找更多灵感。您需要的一切只需点击一下鼠标。

如有任何问题或想法,欢迎直接联系我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值