TowardsDataScience-博客中文翻译-2020-一百三十-

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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

意大利计算机科学行业的性别差距有多大?

原文:https://towardsdatascience.com/whats-the-situation-in-italy-for-women-in-the-world-of-computer-programming-7782bbb8a54b?source=collection_archive---------66-----------------------

一种基于数据的方法,使用 Stack Overflow 2017 年至 2019 年的开发者调查数据。

照片由 Unsplash 上的 ThisisEngineering RAEng 拍摄

简介

几周前,我读了一篇关于阿达·洛芙莱斯的文章。可能你们很多人不知道她是谁,但你肯定知道英国诗人拜伦。

好吧,但是它们之间有什么联系呢?拜伦是阿达的父亲!

洛夫莱斯伯爵夫人奥古斯塔·爱达·拜伦是一位数学家,今天她被认为是第一位计算机程序员。

她出生于 1815 年,她接受了以数学和科学为基础的教育。这不是 19 世纪女性的标准。

一天,艾达决定翻译一篇关于计算机之父查尔斯·巴贝奇的文章。这篇文章描述了一种被称为分析引擎的设备,旨在处理复杂的计算。

她不仅翻译了这篇文章,还添加了一些关于机器潜力的思考。事实上,Ada 描述了如何用该设备创建代码,以便管理单词和符号以及数字。

她还为设备重复一系列指令的方法建立了理论,这一过程被称为计算机编程今天使用的循环。

第一部分:与男性相比,意大利女性在编程领域的地位如何?

从那篇关于阿达·洛芙莱斯的文章开始,我问自己,在计算机编程领域,尤其是在意大利,女性的现状如何。为了回答这个问题,我分析了 Stack Overflow 的开发者调查收集的数据。

在我分析的第一步中,我试图了解意大利和美国 2017 年至 2019 年从事编程语言工作的女性的百分比。所以,我注意到他们中的少数人在这个领域工作,尤其是在意大利。

正如你在下面的图表中所看到的,在工作中使用编程语言的总人数中,女性所占的比例非常低。意大利的情况并不好,三年来平均只有 3.5%的女性从事编程工作。

图 1:在编程界工作的意大利和美国女性的百分比(图片由作者提供)

第二部分:在义大利从事计算机编程工作的女性背景如何?他们有什么资格?

然后,我试图深入了解这种情况,以便了解这些妇女有什么资格。

我发现他们中的大多数都非常合格(例如,他们拥有学士学位、硕士学位或博士学位)。

下图显示,从 2017 年到 2019 年,拥有大学背景的计算机编程女性多于相同背景的男性。

图 2:意大利超级合格女性与超级合格男性的对比(图片由作者提供)

第三部分:相反,在美国,技术领域的超级合格女性是什么情况?

在美国,情况与意大利相似。从 2017 年到 2019 年,大多数从事编程语言工作的美国女性都超级合格,而且她们比男性更超级合格。

在下面的条形图中,可以观察到这种情况。

图 3:美国女性超级合格与男性超级合格的比较(图片由作者提供)

结论

多亏了我用 Python 分析的数据,我明白了,即使在今天,从事计算机编程的女性人数也非常少,只有非常优秀的女性才会尝试进入这个领域。这意味着由于文化偏见和排斥,有大量的女性不了解这个世界。

因此,在这个领域给女性适当的空间是很重要的,因为正如阿达·洛芙莱斯向我们展示的那样,她们有潜力改变和改善计算机编程世界的许多事情。

关于这个分析更详细的信息,你可以在这里看到我的 GitHub 的链接

可以在我的电报群 初学数据科学中联系。

纽约天气数据:探索性分析

原文:https://towardsdatascience.com/whats-the-weather-like-in-new-york-e8c1586e5c4?source=collection_archive---------35-----------------------

Giovanni Tancredi 在 Unsplash 上拍摄的照片

纽约的天气怎么样?

住在纽约,我想知道随着时间的推移天气会是什么样子。我几乎一生都住在这里,每年我都发现自己在抱怨天气比前一年热了多少。天气变暖了吗?气候真的在变化吗?也许那些夏天的热浪只是异常值。

气候变化是近年来最受争议的话题之一,尤其是在政治领域。有许多数据和研究表明,全球气温普遍上升。然而,这篇文章并不是要强加给任何人。它仅仅提供了对过去 20 年天气数据的快速探索和可视化,以调查趋势(使用 Python)。

数据

皇后区拉瓜迪亚机场的气象数据是根据 Ritvik Kharkar 的这篇文章中的方法从美国国家海洋和大气管理局(NOAA)收集的。它演示了如何轻松地利用 API 从美国任何地方收集所需的天气数据。我对他的代码做了一些调整,从 2000 年到 2020 年提取平均气温、最低气温、最高气温和总降水量的每日记录。然而,当我试图这样做时,从 2006 年到 2012 年,有一整个时期都没有平均气温。

2006 年至 2012 年缺失的数据

我最初是在试图获取曼哈顿中央公园的数据时发现这个问题的,结果只得到 2000 年到 2005 年的平均气温。考虑到这可能只是 NOAA 数据可用性的问题,我决定通过使用最低和最高日平均气温作为代理来进行简单的修复。

包括降水量、最低温度、最高温度和平均温度的最终数据帧

分析

温度

对于任何时间序列,第一件事是随着时间的推移可视化。首先查看 2000 年至 2020 年的日平均气温,我们看到冬季全年平均气温在个位数之间,夏季在 90 多度之间。随着时间的推移,它看起来不会倾向于更暖或更冷的温度。平均温度的分布略呈双峰型(约 40°F 和 70°F ),有趣的是,这与时间序列中的拐点温度相对应。

日平均气温时间序列(左)和平均气温分布(右)

虽然肯定是不正常的,但纽约市有很多次出现极端温度,最冷时达到华氏 1 度,最热时达到华氏 104 度。我想纽约市过去也有几次出现零下温度,但我想我的记忆没有我希望的那么可靠。

温度统计

我们可以从另一个角度来看这个数据,那就是月度水平。这里我汇总了一年中每个月的日平均气温。

月平均温度

在一月、七月、五月和十月等几个月,似乎有轻微的上升趋势。而在 6 月份,过去 10 年的年同比变化一直在下降,徘徊在 73 华氏度左右。

沉淀

除了温度的变化,我还对总降水量随时间的变化感兴趣。下面是 20 年来的日降雨量,单位为毫米。老实说,我很惊讶地看到有这么多天的降雨量超过 25 毫米(约 1 英寸)。

每日降水量(左)和雨天的降水量分布(右)

单日最大降雨量是 169.9 毫米(约 6.7 英寸),早在 2007 年 4 月中旬!纽约市一天的降雨量通常不会超过 10 毫米。

降水统计(包括无降水的天数)

在那张图上显示一段时间内的日降水量有点太忙了,所以我把数据汇总成了累积年降水量。

在过去的 20 年里,纽约市平均每年的降雨量为 1190 毫米。2011 年,降水量为 1659 毫米,比正常情况下多了 40%。在过去的两年里,降水量增加了 10-25%。这不重要,但肯定比平时多。

将所有有记录的降水天数加起来,2018 年的降水天数最多,为 150 天,而 2010 年的降水天数最少,为 100 天。这几乎比平均水平(122 天或一年的三分之一)多了整整一个月!

最后,我们可以看看这些年来逐月的降雨量。

平均月降水量

二月、七月和十二月似乎显示出降水增加的趋势,而六月变得越来越干燥。

结论

纽约的气温变化很大,从华氏 0 度到华氏 104 度,但通常这个季节的气温在华氏 30 度到 80 度左右。这些时间序列图显示,一些月份似乎正在变暖,但肯定需要更多的分析(可能需要一些 t 检验)。无论是下雨还是下雪,纽约一年中有四个月都有降水。最近几年甚至可能显示出年降水量和月降水量的增加。

最后,我绝不是一个气象学家或气候学家,只是一个来自纽约的发现这个数据集很有趣的人。我还意识到,湿度和露点等其他指标没有包括在这个分析中。更多的问题可能会从这个分析中产生,但最终,这只是为了教育和娱乐目的对纽约市气象数据的快速和肮脏的分析。

如果你有兴趣查看我的代码,请查看我的 GitHub

什么是整齐的数据?

原文:https://towardsdatascience.com/whats-tidy-data-how-to-organize-messy-datasets-in-python-with-melt-and-pivotable-functions-5d52daa996c9?source=collection_archive---------8-----------------------

如何用 Melt 和 pivot 函数在 Python 中组织杂乱的数据集

资料来源:R for Data Science(Hadley Wickham & Garrett grole mund)

数据科学家花费大约 80%的时间清理和组织数据。整齐的数据是一种组织数据集以促进分析的方式。

2014 年,Hadley Wickham 发表了一篇名为 Tidy Data 的精彩论文,描述了用 r 整理数据集的过程,我这篇文章的目标是总结这些步骤并展示 Python 中的代码。

整理数据:

  1. 每个变量都必须有自己的列。
  2. 每个观察必须有自己的行。
  3. 每种类型的观测单位形成一张表。

杂乱数据是数据的任何其他排列。

杂乱的数据

我们将在这里探讨 5 个杂乱数据的例子:

  • 列标题是值,不是变量名。
  • 多个变量存储在一列中。
  • 变量存储在行和列中。
  • 多种类型的观测单位存储在同一个表中。
  • 一个观察单位存储在多个表中。

当然,还有更多类型的脏乱没有在上面显示出来,但它们可以用类似的方式来整理。

列标题是值,不是变量名。

对于这个例子,我们将使用数据集“relinc.csv ”,它探索了收入和宗教之间的关系。注意,尽管很乱,这种安排在某些情况下还是有用的,所以我们将学习如何整理和不整理它。

import pandas as pddf_relinc=pd.read_csv("relinc.csv")
df_relinc.head()

这个数据集中有三个变量:宗教、收入和频率。列标题是值,而不是变量名,所以我们需要将列(income)中的变量转换为行。我们将使用熊猫的功能融化。

# Applying melt (to a long format)df_relinc=df_relinc.melt(id_vars=["religion"],var_name=["income"],value_name="frequency")df_relinc.head()

上面的输出是我们数据集的整洁版本。

为了将数据集返回到宽格式,我们将使用 Panda 的函数 pivot_table

# Applying pivot_table (to a wide format)df_relinc=(df_relinc.pivot_table(index = "religion", columns = "income", values = "frequency")
   .reset_index() 
   .rename_axis(None, axis = 1))df_relinc.head()

多个变量存储在一列中。

现在我们将研究来自世界卫生组织的结核病数据集。这些记录显示了按国家、年份和人口统计组分列的肺结核病例数。

人口统计组按性别(男,女)和年龄(0-14 岁,15-24 岁,25-34 岁,35-44 岁,45-54 岁,55-64 岁,65 岁以上,未知)细分。

df_tb=pd.read_csv('tb.csv')
df_tb.columns

df_tb.tail()

这些列包含性别和年龄值。请注意 0 和缺失值(NaN)的混合。这是由于数据收集过程造成的,这种区别对于该数据集非常重要。

首先,我们将收集非变量列,将年龄范围和性别移到一列中。为此,我们将使用熔体。

# Applying melt (to a long format)df_tb=df_tb.melt(id_vars=["iso2","year"],var_name=["demographic"],value_name="cases")df_tb.sample(5)

现在我们需要拆分人口统计列,得到两列变量性别和年龄。

# Creating new columns for sex and agedf_tb=(df_tb.assign(sex = lambda x: x.demographic.str[0].astype(str),
age = lambda x: x.demographic.str[1:].astype(str))
      .drop("demographic",axis=1))df_tb.sample(5)

现在,每个观察都有自己的行,每个变量都有自己的列。我们刚刚整理了我们的数据集!在继续之前,让我们清理数据。

# Styling the datasetdf_tb.update(pd.DataFrame({"age":[age[:2]+'-'+age[2:] if len(age) == 4 else (age) for age in df_tb["age"]]}))df_tb=(df_tb.replace(to_replace =["m","f","014","65","u"],value =["Male","Female","0-14","65+","unknown"])
            .dropna())df_tb.sample(10)

变量存储在行和列中。

我们将使用来自全球历史气候学网络的数据,这些数据代表了墨西哥 2010 年五个月的每日气象站(MX17004)。

它在单个列(id,year,month)中有变量,跨列(day,D1–d31)和跨行(tmin,tmax)(最低和最高温度)。少于 31 天的月份的最后一天有结构缺失值。为了更好的可视化,已经省略了列 d9 至 d31。

import datetimedf_weather = pd.read_csv('weather-raw.csv')df_weather.sample(5)

如上所示,数据集是杂乱的。变量存储在行(tmin,tmax)和列(days)中。让我们从 d1、d2、d3…列开始。

我们将应用 melt 为 day 变量的每个记录创建一行。

# Applying melt (to a long format)df_weather=df_weather.melt(id_vars=["id","year","month","element"],var_name=["day"],value_name="temp")
df_weather.update(pd.DataFrame({"day":[day[1:] for day in df_weather["day"]]}))df_weather.sample(5)

现在,我们将使用 pivot_table 函数为 tmin 和 tmax 创建新列,一旦它们是变量。

# applying pivot_table to create columns for tmin and tmaxdf_weather=(df_weather.pivot_table(index = ["year","month","day","id"], columns = "element", values = "temp")
       .reset_index().rename_axis(None, axis = 1))df_weather

数据集看起来更好,但我们仍然需要改进它。让我们为日期创建一个列并对其进行分组。

# Creating a date columndf_weather=(df_weather.assign(date = lambda x: x.year.astype("str") +"/"+ x.month.astype("str").str.zfill(2) +"/"+ x.day.astype("str").str.zfill(2))
            .drop(["year", "month","day"],axis=1))
df_weather['date'] =  pd.to_datetime(df_weather['date'], format='%Y/%m/%d')# Grouping by datedf_weather=(df_weather.filter(["date", "tmax","tmin"]).groupby("date").aggregate("mean").reset_index())df_weather

我们最终整理了我们的数据集。

多种类型的观测单位存储在同一个表中。

该数据集显示了 2000 年的 Billboard 热门歌曲。这个数据集记录了一首歌首次进入 Billboard Top 100 的日期。它包含艺术家、曲目、输入日期、峰值日期、流派、时间、排名和星期等变量。

import pandas as pd
import re
import numpy as np
import datetimedf_bill = pd.read_csv('billboard.csv',header=0,encoding = 'unicode_escape')df_bill.head()

进入前 100 名后的每周排名记录在 76 列中,从第 1 周到第 76 周。如果一首歌进入前 100 名的时间少于 76 周,则剩余的列用 NaN 填充。

df_bill.columns

这个数据集包含对两种类型的观察单位的观察:歌曲和它在每个星期的排名。因此,艺术家和时间会在每周的每首歌曲中重复出现。在将 Billboard 数据集一分为二之前,我们需要对其进行整理。让我们从收集所有的周专栏开始。

# Applying melt (to a long format)
df_bill=(df_bill.melt(id_vars=["year","artist.inverted","track","genre","date.entered","date.peaked","time"],var_name=["week"],value_name="rank"))# Week to number 
df_bill.update(pd.DataFrame({"week": np.ravel([list(map(int, re.findall(r'\d+', i))) for i in df_bill["week"]])}))df_bill.head()

更好看!现在我们有一个可变周的列。顺便说一下,我们可以使用输入的日期和星期中的信息来创建一个新列,它将成为日期列。

# creating a date column from date.entered and weekdf_bill['date.entered'] =  pd.to_datetime(df_bill['date.entered'], format='%Y/%m/%d')df_bill=(df_bill.assign(date= [df_bill['date.entered'][i]+datetime.timedelta(weeks = df_bill["week"][i]-1) for i in range(len(df_bill["week"]))])
         .drop(['date.entered','date.peaked','week'], axis=1)
         .sort_values('artist.inverted', ascending=True)
         .reset_index(drop=True))df_bill.head()

现在,我们将从轨道创建一个 id。每首歌曲必须有一个唯一的 id 号。为此,我们将使用熊猫的功能因式分解。

# creating an id column from tracklabels,unique=pd.factorize(list(df_bill["track"]))
df_bill["id"]=labels+1
df_bill.reset_index(drop=True)
df_bill.head()

最后,我们将把数据集分成两个数据集:歌曲数据集和排名数据集。

# creating a new dataframe for rankdf_rank=df_bill.filter(["id", "date", "rank"]).dropna()
df_rank=df_rank.sort_values(by=['id','date']).reset_index(drop=True)# creating a new dataframe for songdf_song=df_bill.filter(["id", "artist.inverted", "track","time"])
df_song=df_song.drop_duplicates('id').reset_index(drop=True)df_rank.head(10)
df_song.head()

我们刚刚解决了在同一个表中存储多种类型的观测单位的问题!

一个观察单位存储在多个表中。

这个问题过去很容易解决。我们基本上需要读取这些表,添加一个记录原始文件名的新列,最后将所有表合并成一个表。

import pandas as pddf_baby14 = pd.read_csv("2014-baby-names-illinois.csv")
df_baby15 = pd.read_csv("2015-baby-names-illinois.csv")df_baby14.head()

df_baby15.head()

让我们根据文件名在每个数据集中创建一个列 year。最后,我们将应用 Panda 的 concat 函数来连接数据帧。

# Creating a column for the year
df_baby14["year"]="2014"
df_baby15["year"]="2015"# Concatenating the datasets
df_baby = pd.concat([df_baby14, df_baby15]).sort_values(by=['rank'])(df_baby.set_index('rank', inplace=True))df_baby.head()

最终意见

本文的目标是解释整洁数据的概念,包括五种最常见的杂乱数据,以及如何用 Python 组织和清理这些数据集。

如果你发现任何错误,请不要犹豫与我联系!我最近开始在数据科学世界里冲浪,尽管我很喜欢,但我是个傻瓜。

我的代码和数据集可以在 Github 上找到:https://github.com/rodrigomf5/Tidydata。另外,这里是 Hadley Github,它提供了更多关于 Tidy Data 的信息:【https://github.com/hadley

新冠肺炎数据可视化有什么问题,如何解决

原文:https://towardsdatascience.com/whats-wrong-with-covid-19-data-visualizations-and-how-to-fix-it-3cdc9adc774d?source=collection_archive---------4-----------------------

英国《金融时报》新冠肺炎数据可视化报道示例

自从冠状病毒爆发以来,我一直对媒体甚至专家向我们展示数据的方式感到困惑。

我想现在每个人都已经看到了代表每个国家的病例数或死亡数的“轨迹”图。问题?首先,大多数不是交互式的,就像现在不是 2020 年,媒体停留在 20 世纪。你生活在一个小国家还是你的国家仍处于疫情爆发的初期?您感兴趣的数据在包中丢失了,或者更糟,甚至没有显示出来,太糟糕了。

但实际上这不是最大的问题。病例总数或死亡总数当然是制造头条新闻或给读者和观众留下印象的好方法,但它们没有给我们任何实际的洞察力。一些人使用对数标度,另一些人根据国家人口加权,或者绘制每日数字而不是绝对总数(这是一种更好的方式来感受正在发生的事情),但所有这些可视化仍然没有抓住要点。正如 Eric Ries 所说,这些不是“T0”可操作的度量标准。

关于这次爆发有什么实际的见解?我们真正想知道的是什么?嗯,我们想知道:

  1. 爆发进展率。病毒传播速度加快了吗?疫情发展速度放缓了吗?
  2. 如果正在放缓,鉴于目前的趋势,每日病例/死亡人数何时开始减少?那就是,我们什么时候会到达顶峰?我们的卫生系统何时会开始好转,而不是一天比一天糟糕?

获得这两种见解的良好指标是查看每日病例数/死亡数的进展率。用数学术语我们要看每日例数的二阶导数,或者急动度(加速度的加速率)。在你退出之前,让我解释一下。

如果每日病例数的变化率为正,也就是说,如果每日新增病例数在加速增长,这意味着疫情正处于指数阶段,尚未得到控制。这是一个实际的洞察力。如果每天的病例数仍在增长,但变化率为负,也就是说,如果每天新增病例的增长速度在放缓,这意味着疫情的爆发速度在放缓。再次,实际的洞察力。

如果我们拿汽车做类比,总例数是汽车里程,每日例数是汽车速度,每日例数变化是汽车加速度(汽车加速时为正,汽车刹车时为负),每日例数变化率是汽车加速的方式:是加速更快,还是加速变慢(速度仍在增加,但速度变慢)。在爆发的情况下,我们最感兴趣的是汽车加速的方式,对吧?那么,为什么每个人都向我们展示汽车的里程数

鉴于我们知道汽车加速的方式,我们可以知道它何时开始减速(=爆发峰值),并最终停止(爆发结束)。

让我们就这么做吧,用交互式数据可视化代替静态图像。首先,让我们看看某个特定国家的死亡和病例的详细信息(您可以使用右上方的度量菜单在两者之间切换):

如何阅读图表:4 月 1 日,美国的死亡人数比前一天增加了 37.5%。考虑到这一趋势,我们仍然可以预计 4 月中旬会有 12%的增长。

在这里,我们使用线性插值得到实际的进展率及其趋势。如果比率为正,则每日死亡人数/病例数在增长,如果比率为负,则每日死亡人数/病例数在萎缩。如果它的趋势是上升的,增长是加速的,如果它是下降的增长是减缓的。当趋势越过 0,爆发达到顶峰(如果是未来,只是一个预测)。

注意:对于一些国家来说,数据存在一些问题,扭曲了实际趋势,如 4 月 2 日法国官方数字中增加了 884 例额外死亡(在此之前,官方数字中不包括养老院),这使得死亡率飙升。应该对数据进行预处理,以便将这些问题考虑在内,但我没有时间这样做。尽管如此,一般的方法仍然有效。

现在,让我们关注一下趋势,并比较一些国家(为了更好地了解情况,您最多可以选择 5 个国家):

如何阅读图表:鉴于目前的趋势,美国的日常进展正在放缓,但比法国慢。英国的日常进步正在加速。

我们可以看到:

  • 法国、意大利、西班牙和美国的增长速度都在下降,这意味着疫情似乎得到了控制,病例仍在增长,但速度较慢
  • 英国仍在加速增长,这表明那里的疫情尚未得到控制
  • 意大利在 4 月 1 日左右达到顶峰,现在已经进入萎缩阶段
  • 法国和西班牙将在四月中旬达到顶峰,美国将在四月底达到顶峰

当然,我们可以通过查看通常的案件数量“轨迹”图来得出相同的结论,试图猜测它是否仍然具有指数形状(对于线性标度)或曲线将在哪里变平(对于对数标度),但那些只是:猜测。通过查看每日病例数/死亡进展率就简单多了,我们只看实际数据进展,没有解释的余地。升学率上升?指数爆发。正往下走?仍在增长,但速度较慢。消极?萎缩。穿越 0?达到了巅峰。一个国家的升学率比另一个国家更低?它恢复得更快了。就这么简单。

为了更进一步,我们可以观察每日病例数/死亡进展率随时间的演变,这将使我们能够比较疫情同一阶段的国家应对措施,而不仅仅是当前的情况。我还可以让图表的数据每天自动刷新,并查看国家地区而不是整个国家。但那是另一篇文章…

感谢阅读!如果你喜欢这篇文章,不要犹豫,分享它。

我每天都在学习,如果我有任何错误,请随时纠正我,并在评论区添加您的建议。另外,请注意英语不是我的母语。

来自作者的说明:我不是流行病学家,这里显示的结果仅基于应用于公开可用数据的纯数学,而非医学专业知识,本文的观点不应被解释为专业建议。收集这些数据的方式也存在偏差,当然还有数据质量问题,这些我都没有提到。最后,各国在疫情方面并不一致,数字可能会因国家内的实际地区而有很大差异,这里也没有显示。

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

酸橙有什么不好

原文:https://towardsdatascience.com/whats-wrong-with-lime-86b335f34612?source=collection_archive---------16-----------------------

众所周知,荷马·辛普森是一个头脑简单的人,时不时会做出一些愚蠢的事情。在这里,他决定用微波炉烹饪面包、熏肉和鸡蛋。我们发现看起来很有趣,但同时,我们倾向于在数据科学中做类似的事情。不要像荷马那样;使用合适的工具。辛普森一家(《荷马史诗》第七季第 17 集)中的这个镜头被认为是合理使用

本地可解释的模型不可知解释( LIME )是一个流行的 Python 包,用于解释单个模型对文本分类器或作用于表格(数字或分类数据的 NumPy 数组)或图像的分类器的预测。莱姆最初是在一篇名为《我为什么要相信你》的论文中提出来的:解释任何分类器的预测“在 2016 年,从那以后 LIME project repository 达到了几乎 8k 星的点(作为对比,scikit-learn 有 42k start)。

虽然 LIME 是解释任何分类器预测的最受欢迎的方法之一,但它在研究社区中受到了几次批评:LIME 遭受标签和数据偏移,解释取决于超参数的选择(是的,LIME 有超参数),甚至类似的点可能有不同的解释。这些问题的组合可能会给出错误的、意想不到的解释。

石灰是如何工作的

在机器学习项目中,我们经常使用复杂的模型,如随机森林或深度神经网络。对于一个人来说,理解这些黑盒是如何做出预测的是不可行的。与此同时,如果我们用更简单、更容易解释的模型,如线性回归或浅层决策树,来代替复杂的模型,我们将会在分数上失利。

LIME 背后的想法旨在从两个世界获得权利:让我们训练一个准确的黑盒模型,但该模型的解释将基于简单、易于理解的模型,如线性或逻辑回归。

也就是说,为了解释单个点 P ,让我们训练一个局部线性(或逻辑)回归模型。输入数据是通过到点 P ( l1l2、或其他)的距离加权的扰动列车数据( X )。目标是黑盒模型对 X 的预测。可以通过探索替代模型的系数来获得解释(关于 LIME 如何工作的更多信息可以在原始论文这本优秀的书中找到)。

这种方法可以处理任何数据类型:表格数据、文本和图像。石灰库有一个很好的 API,易于使用。然而,石灰有几个隐藏的问题。

问题

石灰法有几个重大问题,本节将对此进行描述。

石灰的解释并不可靠

在做预测的同时,我们期望相似的点应该有相似的预测。也就是说,如果信贷申请人的收入从 60k/年变为 61k/年,我们预计信贷评分不会下降或上升(至少经常如此)。同样的逻辑也应该适用于解释:特征输入向量的微小变化不应该显著影响解释。回到信用评分的例子:如果模型的解释表明收入=60k 是一个重要的特征,并且它将信用评分推向一个积极的方向,那么收入=61k 也应该如此。不幸的是,莱姆和 SHAP 并不总是如此。

大卫·阿尔瓦雷斯-梅利斯和汤米·s·雅克拉在他们的论文“关于可解释性方法的健壮性”中介绍了一种解释工具的健壮性的度量。局部 Lipschitz 估计的度量被定义为:

来源

其中 x_i 是输入示例, x_jx_if(x) —特征的重要性, B(x_i) —是以 x_i 为中心的半径为 ε 的球。此测量显示了由于输入要素的微小变化而导致的要素重要性的最大变化。降低测量值——更有力的解释是。

在这篇论文中,作者用 SHAP 和莱姆估计了随机森林模型解释的稳健性。对于几个数据集,他们从每个数据集中采样一百个点,并计算局部李普希茨估计。结果如下图所示:

在各种 UCI 分类数据集的 100 个测试点上计算的局部 Lipschitz 估计。图片来源

为了便于理解,这些值是低、平均还是高,我们来看一个解释示例。在这里,作者提出了波士顿数据集中的一个点和一个修改点,它最大化了局部 Lipschitz 估计:

上图:波士顿数据集中的示例 x_i 及其解释(属性)。下图:对 Lipschitz 估计 L(x_i)的最大化的解释。图来源

我们可能会看到,输入特征的一个小变化(CRIM: 0.4 → 0.3,AGE: 92.3 → 92.2,DIS: 3.0 → 3.1,TAX: 307 → 307.1,B: 395.2 → 395.3,LSTAT: 21.5 → 21.4)使得解释发生了巨大的变化:对于几乎一半的特征,特征重要性和绝对值的符号都发生了变化!作者在用石灰解释图像时也观察到了类似的行为。

对类似例子的解释可能完全不同。

LIME 遭受标签和数据移位

数据转移是指训练和测试分布不同时。这是至关重要的,但有时也是 ML 管道的一个隐藏问题,它可能会导致验证阶段的分数低估或高估,或者生产中的模型退化。数据偏移是由以下原因造成的:

  1. 样本选择偏差。使用不同的规则选择训练和测试部分的数据。例如,一个图像分类模型在使用专业相机拍摄的图像上进行训练,而在使用智能手机拍摄的照片上进行测试。
  2. 不稳定的环境。世界不是静止的,底层过程是变化的,所以算法必须更新。这在不断发展的算法交易和欺诈检测领域更为明显,而在情绪分析等更为“保守”的领域则不那么明显。

关于数据转移的更多信息可以在了解数据集转移博客文章中找到。

数据移位的例子

阿米尔·侯赛因·阿哈旺·拉赫纳马和亨里克·博斯特罗姆进行的研究——“石灰框架中数据和标签转移的研究”——解决了这个问题。他们做了几个实验,并得出结论,由 LIME 的扰动过程生成的实例与从基础分布中提取的训练实例有显著不同。基于所获得的结果,作者认为所解释的例子的特征的随机扰动不能被认为是 LIME 框架中数据生成的可靠方法。

这导致了一个严重的问题。部分由于数据转移,部分由于替代模型预测能力的限制,替代模型不能足够好地近似黑箱模型的预测。这种低保真度的解释几乎毫无用处(近似的良好程度被称为保真度)。

石灰解释保真度低。

新闻组和 ImageNet 数据集中的保真度和 MMD 散度。来源

石灰解释取决于超参数的选择

石灰有一组基本的超参数:

  1. 训练一个代理模特需要多少分?
  2. 我们应该如何权衡这些要点?我们应该使用什么距离度量?
  3. 如何选择替代模型的超参数(即正则化的类型和强度)?

希望无论我们选择哪一组超参数,解释都或多或少是相同的。我试着检查了一下。

在实验中,我训练了 LightGBM 模型,并使用一组不同的超参数对来自心脏病 UCI 数据集的样本点进行了合理的解释。对于每个点,我计算了使用不同超参数集获得的特征权重之间的成对 Spearman 等级相关性。在最好的情况下,当解释不依赖于超参数时,成对相关性应该等于 1。不幸的是,酸橙的情况并非如此。

成对相关的分布如下所示:

前五个最重要特征的成对相关性分布(使用 LightGBM“增益”重要性获得):

我们看到相关性很高,但远非完美。这意味着,对于不动点,我们可能期望不同的本质特征和它们的贡献,取决于超参数的选择。在某些情况下,基于使用什么超参数进行解释,相同的特征可以将预测“推向”积极或消极的方向。

使用不同的石灰超参数的特征权重。我们可以看到,根据超参数的选择,该特征可能对最终预测产生积极或消极的影响。

解释取决于石灰超参数的选择。

我的 GitHub 中提供了再现性代码:

[## DenisVorotyntsev/lime _ experiments

这个库包含关于超参数的选择如何影响石灰解释的实验代码。的…

github.com](https://github.com/DenisVorotyntsev/lime_experiments)

摘要

石灰框架现在被广泛使用。正如我在这篇博文中所展示的,它有几个显著的问题,这使得 LIME 成为模型解释的一个糟糕的选择:

  1. 相似例子的解释可能完全不同;
  2. 石灰解释保真度低;
  3. 解释取决于石灰超参数的选择。

有可能克服那些问题吗?我认为,可以通过使用一组不同的超参数和稍微改变的特征输入向量来计算实际的特征重要性,作为获得的时间重要性的平均值。但对我来说,它反而像一根拐杖,是一个可靠的解决方案。我想听听你对此的评论和想法。

相反,我建议使用完全可解释的模型,如线性回归或加法模型(例如,解释显示与基于树的模型相当的结果,同时是完全可解释的)或使用 SHAP 解释 ML 模型。

附加链接

如果你喜欢这个,你可能会有兴趣阅读我的另一篇关于排列重要性问题的文章:

[## 停止置换功能

排列重要性可能会给你错误的、误导的结果。但是为什么呢?

走向数据科学](/stop-permuting-features-c1412e31b63f)

你的车值多少钱?

原文:https://towardsdatascience.com/whats-your-car-worth-a-simple-tour-of-used-car-prices-using-linear-regression-eda-section-e98f89804dd6?source=collection_archive---------21-----------------------

一个简单的旅游二手车价格使用线性回归,EDA 部分。

今天,我们将从我的熨斗体验中稍作休息,投入到我在熨斗工作时参与的一个项目中。线性回归是当今数据分析领域最常用的工具之一。结果是清晰的,易于编译(通常),并且易于翻译。它所做的是绘制数据点,并尝试确定可能会或可能不会影响每个数据点沿着某个基线下降的能力的因素。它还可以用来确定几乎任何事物的趋势和预测。这绝不是一个突破性的项目,但更多的是在日常车主面临的实际问题上使用线性回归的有趣练习。我的二手车值多少钱?

那么让我们来谈谈二手车吧?我承认,这不会是一个长时间的讨论,因为我对汽车知之甚少。所以这将是一个对汽车知之甚少的人对汽车及其特征的分析。让我们开始吧!

第一步是收集数据。我和我的搭档奥玛尔去 Cars.com 凑钱买车。为了避免被屏蔽和破坏我们的项目,我们从他们的网站上搜集了 3055 个二手车列表。所有的房源都位于距离邮政编码 10004 不到 10 英里的地方,我们对所有品牌和型号都开放。车型年份限定为 2014 年至 2018 年。我们假设比那更老的车会进入真正的竞争领域,或者那些列表会进入独特或古董列表,所以我们想避免污染我们的数据。我们收集的信息分为以下几类:

现在,这似乎是很多信息。我们立即放弃了内饰颜色、库存、VIN 和装饰,因为我们觉得前三个与汽车的转售价值基本无关,最后一个有太多的 nan。很容易想象有人可能会有购买红色汽车的动机,但只要内饰不太过分,没有人真的在乎内饰是米色还是黑色。库存由一个字母数字代码组成,我们认为这是特定于品牌的,我们认为与品牌相关,但与其他汽车没有太大关系,除非特定库存有一些明显的问题。请记住,我对汽车几乎一无所知,所以如果你们中的任何人认为我错了,请尽一切办法让我知道。

现在我们有了新整理的数据,下一步是对它进行一些清理。我们从排除任何主要的数据问题开始。例如,有人列出了一辆特斯拉,其城市英里数为 102,公路英里数为 105。我们不准备评估他们每加仑汽油的具体指标,也不认为这是与我们 3000 辆其他汽油车的适当比较。接下来,我们删除了没有列出年份的条目,将年份转换为 2019 年之后的年数,并确保我们所有的数字都是整数,以便正确建模。最后,我们留下了 2677 个条目,包括 13 个特征、4 个连续特征和 9 个分类特征。

EDA

让我们看一看我们得到了什么,好吗?首先,我们检查了我们挑选的品牌,看看哪些汽车在二手市场上最常见:

对我来说,这个饼图很有意义。出于某种原因,我们看到许多以日产为首的中档汽车,但也包括其他日本制造商。有趣的是,在福特或现代之前,梅赛德斯占我们二手车市场的 6.0%。有趣的是,这是否与这些汽车的整体市场占有率有关,或者梅赛德斯或其所有者是否有什么东西鼓励在前 4 年内转售。例如,也许购买奔驰的人痴迷于形象,总是想要一辆更新更闪亮的车。或者,也许梅赛德斯经常生产升级版汽车,足以吸引人们购买最新款。其他有趣的可视化包括检查 city_mpg、highway_mpg 和 price 的分布,如下所示:

我很肯定,尽管我们的样本量很小,但这是当前行业趋势的一个非常准确的快照,当谈到 mpg 时。如果你想知道什么车是最出彩的,那些在城市和公路上都超过 40 英里的车都是混合动力车。那些在城市中低于 20 英里/加仑的主要是 SUV 和现代 Genesis。那些在公路上低于 20 英里/加仑的是 SUV,但不包括现代 Genesis。我认为这值得大笑一场。

从这个初步分析中可以挖掘出一些精华。数据的可视化有助于我们从一些谷壳中分离出小麦。我不需要滚动数据来寻找奇怪的数字,图表告诉我很多我需要关注的地方。我也知道,也许现代 Genesis 并不适合像我这样想要超值而不是奢华的人。

以下是一些更有趣的图表,显示了我们正在合作的几个品牌的价格分布:

哇,这真的给你的车的未来价值带来了有趣的启示。本田轿车的平均价格在 16-30k 左右,而当你看他们的 SUV 和卡车时,价格会接近 40k。这个分布看起来很有希望。尼桑也是如此。当我们进入豪华车的范畴时,分布开始看起来绝对热闹。以玛莎拉蒂为例。所有 5 款车型均为 2016–2017 款玛莎拉蒂 Ghibli:

现在谷歌告诉我,这些汽车在 2020 年的零售价约为 10.1 万美元。三年后,你可以用本田雅阁的价格买到这些车。在最好的转售情况下,降幅为 59%。现在让我们来看看保时捷。

保时捷卡宴 S 今天的零售价为 11.6 万美元满载。在同一时间段内,2016 款 Cayenne S 的零售价为 48,594 美元,仍超出本田的范围,降幅为 58%。让我们看看那辆奔驰!

梅赛德斯 S550 显然不再生产了,所以我们来对比一下更贵的 2020 S560 4matic。这款车的零售价约为 12 万美元。以 72,901 美元出售的条目 2031 显示在 4 年中价值仅损失了 39%!我的意思是,这不完全是苹果对苹果,但也不完全是苹果对橘子。

好了,我想我就此打住。EDA 非常有趣,我可以花几个小时来观察可视化效果和处理数据,寻找新的关系。我知道我承诺了线性回归,但我想我今天已经吸引了你们足够的注意力。此外,我们希望使用回归来预测二手车的价格,而不是计算具有最佳转售潜力的汽车。下周我们将进入线性回归和我们发现的一些有趣的系数!此外,如果了解汽车的人可以加入他们的观察,我很乐意了解更多关于这一切是如何工作的!

续在你的车值多少钱第二部分!

你的车值多少钱?—现在有了线性回归和相关!

原文:https://towardsdatascience.com/whats-your-car-worth-part-2-ee0500d5c997?source=collection_archive---------23-----------------------

埃里克·麦克林在 Unsplash 上的照片

你的车值多少钱?

相关和线性回归时间!

你好你好,欢迎回到我的线性回归价格预测。上周我们检查了一些汽车的 EDA,发现玛莎拉蒂的转售价值非常糟糕。简单回顾一下,我们从 Cars.com 搜集了数据,将我们的车型年份限制在 2014 年至 2018 年,清理了我们的数据,去掉了我们认为对我们的车型没有用的东西,并拍了一些品牌及其转售价值的快照。

下一步,建立我们的线性回归!对于那些想跳到最后看看模型运行的人,我已经把它上传到 heroku,点击这里

初始步骤

因此,在进行线性回归时,你需要做的第一件事就是确定是否有任何显而易见的关系可以用来确定你的最终结果。我们这个模型的目标变量是价格,幸好它是一个连续变量,所以我们不必转换它或做任何疯狂的事情。那么什么可能和价格有很好的关系呢?马上,我可以说我们的 years_old 列可能有很好的相关性,mileage 也是一个很好的相关性。

所以我们有一些理论,但是当然熊猫和 matplotlib 帮助我们简化了这个过程。一个简单的 df.corr()为我们提供了以下内容:

对于那些更倾向于视觉的人来说,sns.heatmap()也会给我们带来一些不错的结果:

鉴于我们正在与二手车价值市场合作,看到负相关性是有意义的。例如,汽车行驶的里程越多,价格就越低。这是有道理的。有趣的是,城市英里数和公路英里数之间有很强的负相关性。人们会认为一辆 mpg 更大的车会有更好的转售价值,但事实显然不是这样。我对此的理论是,那个时期的汽车是在人们仍受经济衰退影响的时候生产的,而且汽油更贵。但现在汽油价格下降了,人们更关心其他汽车功能,高 mpg 对 2019 年的买家来说没有那么有价值了。我想对话是这样的“哦,看,这是一辆很酷的车,低里程,而且不太旧。哦,它有一个高城市英里?我想这很酷。”请注意,city_mpg 中的相关性比 highway_mpg 中的稍弱。或许这与优步在纽约为优步出租车融资的浪潮有关?

热图很酷,但我发现 sns.pairplot 在确定相关性方面更有帮助,如下所示:

现在这绝对酷多了。我们实际上可以看到相关性的强度……它们并没有那么大。但是!他们肯定给了我们一个开始寻找的地方!让我们仔细看看。

我们最初的相关性属于茄子、辣椒和花的标准模式。开玩笑,那些并不是真正的标准模式,事实上,它们并不擅长帮助我们建立模型。有趣的是,我们看到了一些异常值,一些价格最高的汽车,例如 city_mpg 和 highway_mpg,分别在 20 和 30 mpg 线之后。里程(或花)到处都是,但你可以看到 50,000 英里线后面的高度集中。

对这些数据进行线性回归并不能真正帮助我们开发模型。看看我们用 OLS 得到了什么:

不是很有希望,我们的 R 值,或者解释数据差异的统计数据,非常低,我想看到更高的数据。更能说明问题的是,欧

肖恩·阿布·威尔逊方法

那么,当我们的数据对我们不利时,我们该怎么办呢?数据科学家、统计学家等使用各种方法来转换他们的数据,以找到隐藏的关系。但是我们肯定要做的第一件事是我的教练肖恩·阿布·威尔逊说的“让我们把他们放在一起,看看会发生什么!”

下面是我们的 OLS 总结的假人汽车品牌,以及城市 _ 英里,公路 _ 英里,里程和年龄 _ 旧:

不错吧?我们将 R 值提高到了 0.709,这意味着我们数据中几乎 71%的差异可以在我们的模型中得到解释。这很酷,但如果我们检查我们的残差,我们得到的不是超级棒。r 是一个很大的数字,但它不是决定我们的模型是否合适的全部。查看我们的残差散点图:

你可以为我们的模型画一条线,但它不会很漂亮。我们能从这些数据中学到什么呢?

值得注意的是,一旦我们纳入品牌,我们的模型有多少是可以解释的。这很有道理,宝马很可能会先获得更高的转售价格,因为车主花了这么多钱购买新车。此外,它们在市场上很受欢迎,很容易就有很强的需求,因此有一个强大而现成的转售市场。

同样有趣的是,现代汽车在转售市场上表现很差。我爸爸会说他们也是蹩脚的车,但我从来没有真正开过,所以我不能在这个小事实上权衡。

大众汽车在转售市场上也非常糟糕,但有趣的是,在我们的数据集中,它们的数量要少得多。在我们的数据集中,与现代的 144 个条目相比,只有 41 个大众。也许我们没有看到他们价值的恰当体现,也许大众是守护者。我很想知道他们在汽车市场上占据了多大的份额,以及我的数据是否真实地反映了这一点。通过这种方式,我可以对某个特定品牌的真正价值得出更多结论。

奢侈品的价格是多少?

我和我的搭档注意到的一件事是,在转售市场上,豪华车似乎拥有特殊的溢价。如前所述,这似乎是显而易见的,但我们很好奇奢侈品类别对我们的模型和转售市场有多大影响,所以我们将我们的奢侈品品牌包装成自己的类别。该奢侈品类别由以下品牌组成:

这产生了一些有趣的结果。看看下面的 OLS:

这里系数是我特别感兴趣的数字。对于豪华车类别,我们查看特定的汽车是否在我们的豪华车类别中,价格向上移动$8208.03。对于奢侈品来说,这是一个显著的提升,有趣的是,我在心里把这个数字贴上了“奢侈品价格”的标签。

让我们看看这个新模型的残差,好吗?

有趣的是,我们已经设法平滑了我们的散点图,这有一点意义,因为我们没有太多的噪音,多个类别将我们的点拉向各处。

现在,我们小小的转移似乎已经获得了一些有希望的结果,以及我们在追求适当的预测模型时可以采取的新方向。

直到下一次…

我就此打住。我想我还有 5 分钟的材料要读,这将使这个博客被阅读 15 分钟,我知道这要求很多我亲爱的读者。

在这次会议中,我们学到了很多很酷很有趣的东西,识别相关性,混合和匹配类别来构建我们的模型。我们还学习了奢侈品的价格,我认为这是俏皮的,但你可能认为是显而易见的。最重要的是,我们的系数使我们能够准确量化汽车的每个部件在总价中所占的比重。下周我会把事情分解得更多,所以期待看到更多的 OLS 和更多的残差图!

续在你的车值多少钱第三部分!

你的数据科学人格类型是什么?

原文:https://towardsdatascience.com/whats-your-data-science-personality-type-a8ff7110b664?source=collection_archive---------23-----------------------

人是不一样的。在组建数据科学团队时,明确认识到这些差异会有所帮助。

伦敦汉普斯特德的弗洛伊德沙发。你可能会想派一些数据科学家来这里。

几年前,我和一位首席工程师一起工作,他发誓软件开发人员可以分成不同的人格原型。他管理过太多的团队,在这些团队中,人们认真地、着重地谈论着彼此的过去,对其他人在说什么视而不见。似乎在它的下面,有一些深刻的情感在进行,胜过了任何理性的争论。

嗯。认真而着重地谈论对方。这听起来很熟悉。见过数据科学家这样做吗?

我猜有一两次吧。

考虑到这一点,我认为按照针对数据科学家的 Myers-Briggs【1】测试,绘制一些数据科学个性维度会很有趣。如果我是对的,那么这些维度将对数据科学团队应该如何运行产生一些实际影响。我们将在最后回到这些效果,但首先声明!这些维度都是基于我自己的亲身经历,所以充其量是一个起点。请在评论中说出你的想法!

维度 1: 首发 vs 终结者

对我们中的一些人来说,一切都是关于一张白纸,白板。从无到有创造的快感。这一次,我们将产生完美的数据科学,清楚地解释世界的一些东西!

然后现实来了。数据杂乱无章,或者根本不存在。有很多令人困惑的变量。也许我们只是草草记下一个理论上可行的方法,然后暂停。等等,还有一个问题出现了!先把旧的暂时搁置,反正基本解决了…

不理想。另一方面,还有终结者。给他们一个开放式的任务,你会得到担忧的表情和一大堆“可能”。也不理想!然而,给一个整理者一个可行的解决方案,告诉他们改进它,然后他们就离开了。浏览代码,指出对方是个白痴,他们突然就如鱼得水了。然后,当他们提出一个有他们名字的可行的、改进的解决方案时,会有一种满足感。成功!

维度 2: 科学家 vs 工程师

数据科学仍然是一个相对较新的学科,它吸引了在 2012 年之前接受过学科培训的人。人们通常带着反映他们最初训练的心态。我经常在小组讨论中看到两种心态。一个是科学家的心态,就像“我们需要找出是什么过程在驱动我们关心的事情,然后我们可以积极地影响这些过程”。从某种意义上说,他们首先发现世界是如何运转的,然后才知道如何利用这些知识。

相比之下,似乎有一种工程师的思维模式,这种思维模式始于这样一个前提,即他们在那里是为了做出改变来改善事情。通常,这归结为他们试图优化的数字(点击、销售、页面停留时间等等)以及他们可以做的一系列事情来提高这个数字。然后问题就简化为“找到最能提高数字的事情组合”。关于 为什么 会工作的问题是次要的,如果有人问的话。

当然,一个团队需要两种心态。所有的科学家和你花了这么长的时间去弄清楚为什么事情在工作,你实际上从来没有抽出时间去改善事情。所有工程师,例如在 2008 年,你注意到加州和佛罗里达州从来没有相关的房地产市场,最终损失了巨额资金,因为你从来没有想过 为什么 这些市场在历史上是不相关的,以及为什么它们现在可能是不相关的。

维度三:蛋头 vs 补锅匠

修补匠的荒谬的简化[2]

有些人喜欢理论。蛋头们喜欢从一些基本原则中得出“正确”的答案,他们喜欢知道数据科学技术“真正发生了什么”。他们的意思是,他们想了解基础数学,以及它如何与世界上所有其他基础数学相结合。

相反,有些人对这个理论毫不关心。他们只是想瞎搞,利用技术作为达到目的的手段。这可能是为了提高他们正在优化的数字(工程师),或者展示真实世界过程的效果(科学家)。数学是如何计算出来的肯定是次要的。如果你是那种喜欢夸夸其谈的人,你可以将此视为柏拉图的形式世界与亚里士多德的经验主义之间的区别,前者需要通过纯粹的理性来把握,后者需要通过观察和经验来理解世界。

很容易得出这样的结论:蛋头是无用的,你需要一队修补匠。然而生活并不是如此清晰。虽然你会每天从你的修补者那里看到大部分的进步,但是真正的大飞跃会让你到达某个地方,你通常需要一些理论。这通常会涉及一个鸡蛋头。

维度四:社交追求者 vs 结果迷恋者

这是外在动机的人和内在动机的人之间的区别。对一些人来说,同事(和直线经理)的尊重和赞扬是他们来工作的原因。相反,我的直接下属不在乎我对他们的数据科学的看法,但真的真的很在乎他们能从中获得好的结果。从某种意义上来说,他们根据自己在数据科学方面的能力来定义自己,这些数据科学对业务产生了影响。

同样,注重结果显然是一种更好的方式。没人需要在意我的想法,只要他们能做到!然而,有时社交活动也会派上用场。它可以让你不再沉迷于自己的世界,让自己相信一些在别人看来有点… 奇怪的事情。

那么,经理应该做些什么呢?

现在你看到了我的四维空间。我要重申,它们是基于经验,而不是任何正式的聚类分析。然而,如果你购买这些尺寸,我认为有一些事情会自然而然地随之而来。

首先,你有责任了解自己的性格类型,以及这可能会如何影响你对团队的反应。出于好奇,我认为自己是一个创业者、科学家、有点蛋头的人和社会追求者——我写这篇博客是有原因的,对吗?因此,我记得有些情况下,我对完成者和结果执迷者感到沮丧,而实际上他们只是在做他们自己。相反,我记得至少有一次我给了蛋头太多的回旋余地,因为,嗯,我也有点感兴趣。

其次,你必须平衡团队,这样它才能在更大的组织内完成使命。开始与结束很容易。你只是有一些开始原型的东西,和一些结束叹息,称他们为牛仔和操作原型。蛋头 vs 修补匠取决于你的团队对研究的专注程度。研究越多,你能装的蛋就越多。然而,在大多数情况下,我会建议你主要想要修补匠,只有较大的团队携带一些蛋头。把它们看作是你平衡投资组合中的风险赌注。是的,有风险,他们不会提供任何东西,但有一个小的机会,他们为你赢得大。对于社交追求者和结果执迷者,我认为团队中有谁并不重要,你只需要认识到差异并相应地工作。你必须更加努力地向社会求职者展示一些技术,并给他们机会向更广泛的团队展示他们的工作。另一方面,你必须关注结果强迫症患者,以确保在没有社会反馈的情况下,他们不会自己走开,做一些不相关的事情。

细心的读者会注意到我跳过了科学家与工程师。我自己的偏见是线索就在名字里。数据科学家应该主要从事科学研究。我对在 Kaggle 竞赛(和工作面试任务)中推行的“优化数字”世界观有很大保留。然而,这是另一天的职位。现在,让我们采取折中的办法,假设你可能需要几个人同时做这两件事。

综上所述,希望这四个维度,开始者/完成者,科学家/工程师,蛋头/修补者,社会追求者/结果强迫症对你来说听起来合理。如果他们这样做了,我认为他们可以成为运行一个和谐的数据科学团队的实用工具,提供它应该提供的东西!

脚注

对于门外汉来说,这篇维基百科的文章就是开始的地方。事实证明,迈尔斯-布里格斯测试也没有多少证据。

鲁布·戈德堡漫画——1921 年 11 月 18 日《德卢斯先驱报》

像哲学一样古老的争论不会在这里得到解决。对于那些想把自己逼疯的人,你可以从:https://plato.stanford.edu/entries/rationalism-empiricism/开始

你的脸值多少钱?

原文:https://towardsdatascience.com/whats-your-face-worth-4c55cb4ed67d?source=collection_archive---------52-----------------------

人脸识别对我们日常生活的影响

瓦伦丁·拉科斯特在 Unsplash 上的照片

虽然大多数欧洲公民仍然对人工智能和面部识别保持警惕,但马耳他公民似乎没有意识到这种技术的影响。人工智能专家,prof . Alexei Dingli(马耳他大学), 回归思考 分享他的见解。

摄像机扫过一群人,定位一个可能的嫌疑犯的脸,隔离并分析它。几秒钟内,警方通过面部识别技术和人工智能(AI)的反复无常的力量逮捕了嫌疑人。

欧盟基本权利机构最近的一项调查揭示了欧洲公民对这项技术的看法。一半的马耳他人愿意与公共实体分享他们的面部图像,这令人惊讶,因为平均只有 17%的欧洲人对这种做法感到舒服。马耳他不成比例的表现有原因吗?人工智能专家,Alexei Dingli 教授(马尔他大学),回归思考分享他的见解。

面部识别使用生物数据从照片或视频中映射出人的面部(生物数据是指纹、步态、声音和面部模式等人类特征)。然后,通过与数据库进行比较,人工智能被用来将这些数据与正确的人进行匹配。这项技术现在足够先进,可以扫描大型集会,根据警察局的记录识别嫌疑人。

数据是新的石油

克里斯·利维拉尼在 Unsplash 上拍摄的照片

面部识别和 AI 有无数的用途。他们可以帮助防止犯罪和寻找失踪人员。他们准备解锁你的手机,分析并影响我们的消费习惯,甚至跟踪学校的出勤率,以确保儿童的安全。但是不是应该有个限度吗?人们真的希望自己的脸被广告商利用吗?或者,被政府知道你和一个反对的政党调情?本质上,放弃这些信息,我们的生活会变得更好吗?

丁力指出,法律要求你知情。生物特征数据可以识别你的身份,这意味着它属于 GDPR。未经他人同意,人们不能给他们拍照;未经许可,不得使用私人数据。丁力继续解释说,当商店出于安全目的使用它(面部识别技术)时,我们不得不问这些数据是否会导致进一步的滥用。您应该被告知您的数据正在被收集,为什么被收集,以及您是否同意。每个人都有隐私权。

大公司依赖于他们的受众数据。他们根据这些数据定制广告活动,以最大限度地提高销售额。营销人员需要这些数据,从你在脸书的兴趣到跟踪网站上的 cookies 丁力笑着说,那么数据是新的石油就不足为奇了。'

欧盟的调查还发现,参与者不太倾向于与私营公司而不是政府实体分享他们的数据。丁力推测,“政府是我们选举出来的,这往往比私人公司更可信。“2018 年的脸书-剑桥分析公司数据泄露丑闻是另一个可能的变量。”

中国接受面部识别的程度远远超过西方世界。数以百万计的摄像机被用来建立一个公民个人的“社会分数”。如果有人乱扔垃圾,他们的分数就会降低。这种做法是有争议的,并提出了错误的问题。算法可以把一个公民错配成另一个。虽然个位数的错误率可能看起来不是很大的差距,但即使是微不足道的 1%的错误率对不匹配的个体来说也可能是灾难性的。在拥有超过 13 亿人口的中国,假设 1%的错误率,将意味着超过 1000 万中国公民被错配。

隐私有必要吗?

托比亚斯·图利乌斯Unsplash 上拍摄的照片

丁力教授断言,我确信我们不了解自己的权利。我们并不重视我们的隐私,我们发现分享我们的数据很容易像脸书这样的社交媒体平台进入了我们的日常生活,而人们却不知道它是如何运作的。人工智能和面部识别也是如此。它已经渗透到我们的生活中,我们中的许多人已经在使用它——完全没有意识到。但问题是,我们如何保证 AI 被负责任地设计和使用?

丁立微笑道:“你怎么能保证刀子被负责任地使用呢?”人工智能就像刀子一样,每个人都在使用。问题是我们很多人甚至不知道自己在用 AI。我们需要教育人们。目前,我们对人工智能的了解是通过好莱坞电影形成的。“人们只需要多一点意识,就能意识到他们此时此地正在使用人工智能。”

每个人都有隐私权,企业在道德上有义务尊重这一权利,个人也要对自己处理数据的方式负责。刀和数据一样,都是工具。它既可以用来行善,也可以用来作恶。我们对如何使用这些工具负责。

管制还是不管制?

约书亚·苏考夫Unsplash 上拍摄的照片

我们的数据可能不是有形的,但它是一种非常有价值的商品。对我们数据的粗心处理,无论是通过网络攻击还是我们自己的疏忽,都可能导致身份盗窃。尽管人工智能和面部识别背后的技术非常先进,但还远非完美,仍然容易出错。人工智能的滥用可以通过散布虚假信息来操纵人群,从而危及人权

调控 AI 是一种可能性;它将建立技术标准并保护消费者,然而,这可能会扼杀研究。鉴于人工智能是一个横向研究领域,建筑和医学等领域必须考虑限制使用的未来的影响。监管的替代方案是创建伦理框架,这将使研究人员能够在道德界限内继续扩展人工智能的能力。这些界限将包括尊重参与者的权利,并在可能导致身体或精神伤害或财产损失的研究中划定界限。

当关于监管的争论愈演愈烈时,我们需要更仔细地审视我们控制范围内的事情。虽然我们无法控制人工智能和面部识别技术将我们带到哪里,但我们可以控制与谁分享我们的数据。我们将把它托付给一个道德的来源,让他用它来改善人类,还是交给那些只关心利润的无耻之徒?

脸书-剑桥分析公司数据泄露事件涉及数百万脸书用户的数据在未经他们同意的情况下被剑桥分析公司收集,这些数据后来被用于政治广告;

Chan,R. (2019)。剑桥分析公司的告密者解释了该公司如何利用脸书的数据来影响选举。商业内幕。2020 年 7 月 8 日检索,来自https://www . business insider . com/Cambridge-analytic a-beoneer-Christopher-wylie-Facebook-data-2019-10

马耳他的人工智能伦理框架;金融服务、数字经济和创新议会秘书处。(2019).马尔他走向值得信赖的艾。马耳他的伦理 AI 框架。Malta . AI . 2020 年 7 月 8 日检索,来自https://Malta . AI/WP-content/uploads/2019/10/Malta _ toward _ Ethical _ and _ trust worthy _ AI _ vfinal . pdf

原载于 2020 年 7 月 9 日 THINK 杂志。请在下面留下你的想法评论。如果你喜欢这篇文章,并想与我联系,请这样做🐦推特,🔗领英,📷 Instagram 或者😊脸书

[## 如何使用人工智能提升你的业务

一本给没有人工智能背景的人的简明指南

towardsdatascience.com](/how-to-pump-up-your-business-using-ai-ff9d7edb1d77) [## 一个全新的人工智能世界

疫情之后人工智能的兴起

towardsdatascience.com](/a-whole-new-ai-world-6a5e9e49aa12) [## 如何用 10 步打造世界级人工智能国家战略

关于马耳他及其如何成为世界上人工智能排名前 10 位的国家的案例研究

towardsdatascience.com](/how-to-create-a-world-class-ai-national-strategy-in-10-steps-eec5bc1f91fd)

阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他已经出版了几本同行评审的出版物,并成为马耳他的一员。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。

Python 中的数据分析:在 WhatsApp 消息上使用正则表达式

原文:https://towardsdatascience.com/whatsapp-messages-visualizing-interjections-sent-by-users-and-other-perks-ea97bbd7f7c5?source=collection_archive---------37-----------------------

在识别消息中的感叹词的上下文中,使用 Python 和 Pandas 中的正则表达式进行数据分析的面向示例的教程

照片由AARN·GIRIUnsplash 上拍摄

大概以前也发生过:你打开你的 WhatsApp,通过很多群看了很多“早上好”、“晚上好”、“下午好”的消息。现在,假设您想要可视化该群组的消息,以便获得更多的洞察力,例如,来自某人的消息数量,或者哪一天的消息数量最多,或者在这种情况下,发现每个人在特定的 WhatsApp 群组中发送了多少个“早上好”式的感叹词。如何做到这一点?

在本帖中,我们将研究 Python 和 Pandas 的正则表达式的使用,以达到我们的目的。

数据

这些数据是从 WhatsApp 的群聊中获取的,并通过该应用程序导出。就该职位而言,该小组有 57 名成员,其语言为葡萄牙语。

对于消息,数据遵循以下格式:

DAY/MONTH/YEAR HOUR:MINUTE — USER: MESSAGE

该项目

这个项目是基于kurasaiteja/WhatsApp-Analysis。虽然这个项目遵循类似的路径,但一些核心设计选择和其他改进将被讨论。它是用 Python 写的。

进口

本项目使用熊猫NumPyMatplotlib表情符号regexPlotly

import re
import regex
import pandas as pd
import numpy as np
import emoji
import plotly
import plotly.express as px
import matplotlib.pyplot as plt
from os import path

助手功能

为了确定输入中的行是否以日期时间符号开始,starts_with_date_time 函数被定义为:

def starts_with_date_time(s):
    pattern = '^([0-9]+)(\/)([0-9]+)(\/)([0-9]+)[ ]([0-9]+):([0-9]+)[ ]-'
    result = re.match(pattern, s)
    if result:
        return True
    return False

既然我们已经完成了开始日期的验证,我们继续寻找是否有一个 author 字段(即 USER: MESSAGE 是否存在)。为此,我们要查看该行中出现的字符':'的数量。在这一步中,Whatsapp-Analysis 项目不考虑消息正文中是否有字符。如果存在,则消息没有作者,因为“:”的数量不等于 2。为了防止这种情况,需要验证“:”字符的数量是否大于 1。

def find_author(s):
  s=s.split(":")
  if len(s) > 1:
    return True
  else:
    return False

split_count 函数被定义为列出每条消息中出现的表情符号。

def split_count(text):
    emoji_list = []
    data = regex.findall(r'\X', text)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI for char in word):
            emoji_list.append(word)
    return emoji_list

既然我们的助手函数已经定义好了,现在是时候把数据解析成一个数组了,这样就可以把它转换成 Pandas DataFrame。函数 get_data_point 是一个使用 has_author 的函数,它将该行拆分为日期、时间、作者和消息字段。一旦消息被解析成大小为 4 的数组,它就被追加到解析后的变量中。

def get_data_point(line):
    split_l = line.split(' - ')
    date_time = split_l[0]
    date, time = date_time.split(' ')
    message = ' '.join(split_l[1:])
    if has_author(message):
        split_msg = message.split(': ')
        author = split_msg[0]
        message = ' '.join(split_msg[1:])
    else:
        author = None
    return date, time, author, messageparsed = []
path = './input/wpp_input.txt'
with open(path, encoding="utf-8") as fp:
    fp.readline()
    msg_buffer = []
    date, time, author = None, None, None
    while True:
        line = fp.readline()
        if not line:
            break
        line = line.strip()
        if starts_with_date_time(line):
            if len(msg_buffer) > 0:
                parsed.append([date, time, author, ' '.join(msg_buffer)])
            msg_buffer.clear()
            date, time, author, message = get_data_point(line)
            msg_buffer.append(message)
        else:
            msg_buffer.append(line)

创建数据帧

既然信息被解析成一个二维数组,我们可以把它转换成熊猫数据帧。

df = pd.DataFrame(parsed, columns=['date', 'time', 'author', 'message'])
df["date"] = pd.to_datetime(df["date"])
df.info()

作者匿名

但现在我们有一个问题:我们不想使用组中那些人的名字或电话号码,但我们更希望他们被匿名识别。为了做到这一点,我们可以使用 author 列的 unique()函数,然后根据作者在 unique()数组中的位置对其姓名进行更新,再加上 1 以获得更好的可读性。

anon = df.copy()
anon = anon.dropna() # This drops any null author messages
authors = anon.author.unique()anon.author = anon.author.apply(lambda author: 'Author ' + str(np.where(authors == author)[0][0] + 1))
authors = anon.author.unique()anon.tail()

数据过滤

既然作者的身份已经保留,我们就可以过滤数据了。在这个项目中,我们将过滤字数,表情列表,网址计数和问候的数据,但是,由于目标是找出用户发送了多少感叹词,只有问候将被使用。

为了发现消息中是否有感叹词,使用了正则表达式匹配。

media_msgs = anon[anon['message'] == '<Arquivo de mídia oculto>']
text_msgs = anon.drop(media_msgs.index)
text_msgs['word_count'] = text_msgs['message'].apply(lambda s : len(s.split(' ')))
text_msgs["emoji"] = anon["message"].apply(split_count)
text_msgs['urlcount'] = text_msgs.message.apply(lambda x: re.findall(r'(https?://\S+)', x)).str.len()
text_msgs['greetings'] = anon.message.apply(lambda msg: True if re.match('([B|b]om dia)|([B|b]oa tarde)|([B|b]oa noite)', msg) else False)text_msgs.tail()

测绘

现在我们有了 greetings 值,我们只需要绘制它。在这种情况下,条形图提供了很好的可视化效果。

author_group = text_msgs.groupby("author").sum()
author_group.reset_index(inplace=True)
fig = px.bar(author_group, y="author", x="greetings", color="author", color_discrete_sequence=["red", "green", "blue", "goldenrod", "magenta"])plotly.offline.plot(fig, filename='output/wpp_analysis.html')

结论

可以看出,作者 43 使用定义感叹词最多,作者 30 次之。他们是使用公告的最频繁的用户。通过这个可以收集更多的信息,例如用户平均说了多少感叹词,或者一周中的哪一天显示了最多的感叹词。但是,因为这篇文章的目标是正则表达式和消息解析,所以这将是以后的工作。这里有很多可能性,这确实显示了正则表达式的强大功能。

在我的 GitHub 上可以找到这个项目,以及运行它的说明。

参考

[## 熊猫

pandas 是一个快速、强大、灵活且易于使用的开源数据分析和操作工具,构建于…

pandas.pydata.org](https://pandas.pydata.org) [## NumPy

为什么是 NumPy?强大的 n 维数组。数值计算工具。可互操作。表演。开源。

numpy.org](https://numpy.org) [## Matplotlib: Python 绘图- Matplotlib 3.3.2 文档

Matplotlib 是一个全面的库,用于在 Python 中创建静态、动画和交互式可视化…

matplotlib.org](https://matplotlib.org) [## 绘文字

Python 的表情符号。这个项目的灵感来自 kyokomi。unicode 定义的整套表情代码…

pypi.org](https://pypi.org/project/emoji/) [## 正则表达式

问题编号与 Python bug tracker 相关,除了列为“Hg 问题”的地方。一个条件的测试…

pypi.org](https://pypi.org/project/regex/) [## plot ly:ML 和数据科学模型的前端

Plotly 为 ML、数据科学、工程和科学创造和管理领先的数据界面工具。语言…

plotly.com](https://plotly.com/) [## murilobnt/whatsapp-感叹词

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/murilobnt/whatsapp-interjections)

当人工智能算法出轨时

原文:https://towardsdatascience.com/when-ai-algorithms-go-off-the-rails-ace5cc8794f1?source=collection_archive---------73-----------------------

这里有一个非虚构的场景:一个运行了多年的算法警告信用卡使用中的异常行为,突然识别出不是异常值的人的行为异常(意味着假警报显著增加)。信用卡无缘无故被封;沮丧和紧张的客户打电话到客户服务中心投诉。

在客户服务中心经历了几个小时的异常压力后,服务团队意识到可能有不寻常的事件发生,并将问题传递给他们的开发团队。在一段额外的时间后,他们意识到算法出现了故障,并禁用它,直到它“回到正轨”。与此同时,其他客户也受到了信用卡异常行为警报缺失的影响,信用卡公司的财务和声誉也遭受了进一步的损害。

这是一个肯定会发生的场景。

随着人工智能越来越受欢迎,算法在我们日常生活和各种组织的关键流程中的使用越来越多,过去两年来,关于故障的报告越来越多,即人工智能算法犯了重大错误。

亚马逊的人脸识别算法为例,该算法“漏掉”了几名著名的国会议员,并将他们识别为著名的罪犯。在另一个不幸的案例中,谷歌的物体检测算法将一名女子标记为大猩猩。

这听起来可能很有趣,但图像识别中的错误可能会导致致命的结果,特别是在医疗领域——例如当另一种谷歌算法通过视网膜图像分析检测糖尿病时,未能在现实环境中准确检测。在另一起事件中,IBM 的沃森系统为癌症患者创造了错误的见解,迫使医生立即停止使用该机器。

“本品为一片 s——”

朱庇特医院的医生

不正确的算法结果的不利和破坏性影响是显而易见的。虽然人工智能还不能取代人,但它无疑可以为我们做出糟糕的决定。

这种情况肯定会继续发生。数据治理团队(如首席数据官)负责创建和防止这种风险。

但是,组织对算法日益增长的依赖可能会像回旋镖一样回来吗?答案是,当然要看情况。这取决于它们允许持续维护过程的能力,以及理想情况下算法性能随时间的改进。此外,它还依赖于实时故障检测。当疾驰的列车脱离轨道时,他们必须有效地处理损害。

来源:Johannes Plenio 在 Unsplash 上拍摄的照片

组织如何为这种情况做好准备,制定控制、预防和上报流程?在本文中,我将提出几种方法来处理这个问题。

但是在我们讨论解决方案之前,理解上述场景的起源是至关重要的。算法和人工智能的预测是基于反映特定时间点和描绘特定现实的数据训练过程。当这些算法遇到不断变化的现实并因此遇到不断变化的数据时,它们在学习过程中仍然保持静态,这正是这个问题出现的原因。

因此,首先需要的是机器学习算法运行时的监控能力。

算法的监控能力是正确和成功使用人工智能的必要条件。监控假设如果出了问题,它会随着时间的推移而发生。也就是说,如果将算法作为黑盒来监控,而输入和输出是已知的,则在时间线上,可以检测到实时异常和偏差(即,在训练阶段观察到的数据的预期分布的中断)。这种监控可以在伤害大量消费者之前被发现。

来源:斯蒂芬·道森在 Unsplash 上拍摄的照片

但这还不够。理解到算法应该保持“活性”,我们需要产生一个解决最新数据的频繁版本升级机制。需要这样的工具来实现对算法的最终用户结果的反馈。这种反馈简化了实时学习过程。在线学习使模型适应变化的现实并减少损害。算法更新过程需要将其重新部署并集成到生产系统中。与敏捷时代的任何软件更新一样,需要进行健全性和逆向测试,以确保这种部署不会造成新的二次损害。

最后,向最终用户反映和解释算法的性能和结果是非常重要的。这种经历产生了必要的信任和解释,以防出现任何不相容的情况。仅仅为了澄清结果(解释权)而将解释的倾向是不充分的。解释的额外价值在于能够监控不想要的现象并允许它们被纠正,类似于质量保证软件过程。

解释用途是直接面向最终消费者,或面向客户服务团队。除了解释结果,它还允许即时反馈,从而可以实时改进算法。

所有这些都导致了一个结论,即人工智能算法不能再被视为企业应用程序的固有组件。之所以这样,是因为这种方法离不开监控和改进那些“黑箱”算法的过程。同时,我们希望他们的结果能够反映在组织应用程序的决策过程中。

因此,正确的技术解决方案是生产可以消费、监控、维护和改进的人工智能微服务(SaaS)——不管它们与什么应用程序集成。

来源:Bill Oxford 在 Unsplash 上的照片;罗伊·梅赫雷兹编辑

让我们回到信用卡的场景。不满意的顾客打电话给服务中心。他们的问题会对照算法的解释结果进行检查,并立即进行纠正。结果被反馈到算法的实时学习过程中。与此同时,数据运营和治理团队的监控会警告正在出现的异常行为。在算法稳定之前,他们努力将对数以千计的客户的有害影响降至最低,甚至不惜以手动处理被检查为警告的查询为代价。

总之,从某个时间点的快照中学习的人工智能算法很可能随着时间的推移而不再使用。为了减轻静态使用人工智能算法的潜在损害,需要一个持续维护流程,监控异常实时事件,给出每个结果的解释,并确保算法的持续学习。我们还推荐将算法打包为服务来支持这种动态方法。

努里特·科恩·英格

产品副总裁@ BeyondMinds

BeyondMinds 是一家企业人工智能公司,它在学术研究和企业级人工智能应用的大规模采用之间架起了一座桥梁。BeyondMinds 解决方案套件使企业能够加速其人工智能转型,促进增长和降低成本。

我们开发了一种高效的技术来构建、部署和维护最大价值的人工智能应用,将价值实现时间从数年缩短到数周。

当 AI 遇上艺术——用 magenta.js 进行神经风格转移

原文:https://towardsdatascience.com/when-ai-meets-art-neural-style-transfer-with-magenta-js-ceb50e702730?source=collection_archive---------30-----------------------

将杰作与现代科技相结合,AI 能制作出多么惊艳的艺术品?

UnsplashToa Heftiba 拍摄的照片

当人类和机器合作时,我们可以生产出超乎想象的东西。艺术和人工智能的交叉是我觉得非常令人兴奋的一个领域。神经风格转移是人工智能在创造性背景下最令人惊叹的应用之一。

深度学习使得捕捉一幅图像的内容并将其与另一幅图像的风格相结合成为可能。这种技术被称为神经风格转移。

下面是我如何使用神经风格转换技术来生成人工艺术作品的演示。

来源:bensonruan.com

点击下面的链接亲自尝试一下:

[## 当 AI 遇上艺术——用 magenta.js 进行神经风格转移

当人类和机器合作时,我们可以生产出超乎想象的东西。艺术与人工智能的交集…

bensonruan.com](https://bensonruan.com/when-ai-meets-art-neural-style-transfer-with-magenta-js)

履行

你喜欢人工智能生成的新艺术品吗?你很好奇它在幕后是怎么运作的吗?好吧,让我们在这篇文章中探索更多。

它使用了一种叫做神经类型转移的技术。它是一种优化技术,用于获取两个图像,一个内容图像和一个样式参考图像(如著名画家的作品),并将它们混合在一起,使输出图像看起来像内容图像,但“绘制”为样式参考图像的样式。

这是通过优化输出图像以匹配内容图像的内容统计和样式参考图像的样式统计来实现的。这些统计数据是使用 CNN(卷积神经网络)从图像中提取的。

如果你想进一步挖掘,你可能会发现吴恩达教授的教程很有用

如果你觉得太难理解,没关系。感谢 Magenta (机器学习的开源研究项目),即使你是机器学习和 AI 的新手,你仍然可以制作由 AI 驱动的音乐和艺术。让我们一步步来看我是如何利用 Magenta.js 来实现风格转换的。

#步骤 1:包含 magentaimage.js

首先,简单的在 html 文件的<头>部分包含脚本magentaimage.js或者缩小版magentaimage.min.js

<html>
  <head>
    <script src="[https://cdn.jsdelivr.net/npm/@magenta/image@0.2.1/dist/magentaimage.min.js](https://cdn.jsdelivr.net/npm/@magenta/image@0.2.1/dist/magentaimage.min.js)"></script>
  </head>

如果您使用的是 npm,也可以通过运行下面的命令来安装它

npm i @magenta/image

#步骤 2:设置 html 元素

接下来我们需要做的是添加下面的 html 元素

  • 内容图像
  • 风格图像
  • 转移按钮
  • 组合图像的画布
<img id="contentImg" src="images/turtle.jpg"/>
<img id="styleImg" src="images/kadinsky.jpg"/>
<button  class="btn btn-transfer">
  <i class="fas fa-random"></i><span>Click to transfer</span>
</button>
<canvas id="stylized"></canvas>

#步骤 3:初始化 javascript 变量

const model = new mi.ArbitraryStyleTransferNetwork();
const canvas = document.getElementById('stylized');
const ctx = canvas.getContext('2d');
const contentImg = document.getElementById('contentImg');
const styleImg = document.getElementById('styleImg');

#步骤 4:运行风格化功能

当点击传送按钮时,调用库的initialize()stylize() API

差不多就是这样!只需 4 个简单的步骤,您就可以构建自己的风格转换应用程序。选择您自己的照片和风格,观看神奇的艺术作品像魔法一样降临!

GitHub 知识库

您可以通过下面的链接下载上述演示的完整代码:

[## 本森阮/神经类型转移

艺术神经风格转移与品红色。js 艺术神经风格转移是一种优化技术,用于采取…

github.com](https://github.com/bensonruan/Neural-Style-Transfer)

斯蒂夫·约翰森Unsplash 上拍照

结论

Magenta 是一个探索机器学习在艺术和音乐创作过程中的作用的研究项目,它建立在 TensorFlow 之上。如果你对人工智能遇见艺术感到兴奋,我强烈推荐你去看看他们的网站magenta.tensorflow.org,那里有更多你可以尝试的例子。

感谢您的阅读。如果你喜欢这篇文章,请在脸书或推特上分享。如果你有任何问题,请在评论中告诉我。在 GitHubLinkedin 上关注我。

当人工智能真正拥有优势时:在设备上学习

原文:https://towardsdatascience.com/when-ai-really-has-the-edge-learning-on-device-aa2b8b20b091?source=collection_archive---------41-----------------------

如何将学习带到芯片上是人工智能未来最重要的一次飞跃

图片由 PickPik 提供

有了无数关于 2020 年人工智能的预测,我渴望看到什么会成真,什么会半途而废。我认为,一个更能改变模式的预测将会把人工智能的学习能力推向边缘。

在人工智能的通用名称下,隐藏着各种方法,从在分布式云基础设施上处理数据的大型模型到在小型处理器上分析和挖掘数据的小型边缘友好人工智能。

从我在波士顿大学的学术研究到共同创立的 Neurala,我一直敏锐地意识到这两种类型的人工智能之间的差异——姑且称之为“重”和“轻”人工智能。重度人工智能需要巨大的计算基板来运行,而轻度人工智能可以做重度人工智能能够做的事情,但需要较小的计算能力。

GPU 等商用处理器的引入——以及后来它们的便携性——使得将人工智能/深度学习/DNN/神经网络算法带到众多行业的边缘在技术上和经济上都是可行的。

带宽、延迟、成本和简单的逻辑决定了边缘人工智能的时代,并将帮助我们实现下一个技术飞跃。但在我们这样做之前,理解这项技术的细微差别很重要,因为让人工智能算法在小型计算边缘上运行有一些问题。事实上,至少有两个过程在起作用:推理,或由边缘生成的“预测”(例如,我看到一个正常的帧与一个可能有缺陷的帧),以及边缘学习——即,使用获得的信息来改变、改进、纠正和完善边缘人工智能。这是一个很小的、经常被忽视的差异,却有着巨大的影响。

生活在边缘

我第一次意识到推断/预测和边缘学习之间的区别是在 2010 年和 NASA 一起工作的时候。我和我的同事实施了一个小型大脑仿真来控制一个类似火星漫游车的人工智能设备,该设备需要能够在边缘运行和学习。

对于美国宇航局来说,机器人能够完全独立于地球上任何可用的计算能力来学习“新事物”是非常重要的。数据瓶颈、延迟和大量其他问题意味着他们需要探索不同于当时开发的人工智能。他们需要具有消化和学习能力的算法——即,适应人工智能的行为和可用数据——而不需要大量的计算能力、数据和时间。

不幸的是,传统的深度神经网络(DNN)模型达不到标准,所以我们继续构建我们自己的人工智能来满足这些要求。被称为“终身深度神经网络”(终身-DNN ),这种新的 DNNs 方法具有在其整个生命周期中学习的能力(而传统的 DNNs 只能在部署前学习一次)。

边学边死

当谈到今天人工智能的实现时,最大的挑战之一是它的不灵活性和缺乏适应性。当可用时,人工智能算法可以在大量数据上进行训练,如果事先捕捉所有数据进行训练,人工智能算法可以相当健壮。但不幸的是,这个世界不是这样运作的。

我们人类之所以适应性如此之强,是因为我们的大脑已经搞清楚了终身学习(每天学习)是关键,我们不能只依赖于我们与生俱来的数据。这就是为什么我们在一岁生日后不会停止学习:我们不断适应我们一生中遇到的不断变化的环境和场景,并从中学习。作为人类,我们不会丢弃数据,我们会不断使用它来微调我们自己的人工智能。

人类是支持边缘学习的机器的主要例子。事实上,如果人类大脑的行为方式和 DNN 一样,我们的知识将仅限于我们的大学时代。我们过着朝九晚五的生活,每天例行公事,第二天早上醒来时却没有学到任何新东西。

具备学习能力的人工智能优势

传统的 dnn 是当今人工智能的主导范式,具有固定的模型,需要在部署前进行训练。但是,诸如终身 DNN 这样的新方法将使人工智能驱动的计算边缘不仅能够理解向它们提供的数据,而且能够适应和学习。

所以,如果你也想利用边缘的力量,这是我的建议。首先,你需要抛弃人工智能只能在部署前训练的思维模式(和限制)。由此,一个新的需求出现了:一种让用户与边缘交互并增加知识的方式。这意味着需要可视化新收集的数据,并且用户能够选择添加哪些数据。这可以由用户手动或自动完成。

例如,在制造场景中,质量控制专家可能会拒绝从机器中出来的产品,并通过这样做,向 AI 提供新的线索,即刚刚制造的产品或其部分必须被视为有缺陷。因此,更新你的人工智能培训协议,以允许集成持续的培训工作流,其中人工智能根据新的线索进行更新,是寻求利用这种新型人工智能的组织和个人所必须的。

在边缘学习的人工智能是一种范式转变技术,最终将使人工智能真正服务于其目的:将智能转移到需要的计算边缘,其速度、延迟和成本使每个设备都可以负担得起。

展望未来,在竞争日益激烈的人工智能生态系统中,学习优势将在自然选择中幸存下来。愿适者生存的 AI!

最初发表于【https://www.forbes.com】

当算法去购物时

原文:https://towardsdatascience.com/when-algorithms-go-shopping-6a98caa88fe3?source=collection_archive---------60-----------------------

在算法代表我们做出购物决定的世界里,所有的赌注都是错的。

2011 年 4 月 18 日,一本关于苍蝇生物学的书在亚马逊上以 23,698,655.93 美元的价格出售(加上 3.99 美元的运费)。这不仅仅是一个小故障——在 T1 之前的日子里,这本书的价格稳步上升。然后,第二天,价格降到了 106.23 美元(加上 3.99 美元的运费)。

发生了什么事?

高价不是人的决定。故事发生在在线平台上交易的两种算法之间的一场奇怪的竞价战中。

这本书可能拥有的算法之一是定期检查价格,并以低于最高价约 1%的价格出售其副本。另一家公司采取了不同的策略:它以比下一个最佳报价高出约 27%的价格出售同一本书,希望买家不会注意到更便宜的选择。我们可以假设第二个算法没有这本书,在收到订单后,它会购买更便宜的书并将其交付给客户,在此过程中赚取利润。

两种算法每天陷入“百分之一回,百分之二十七进”的循环,达到数百万美元的价格。大概直到某个算法的人类所有者注意到了这个循环并停止了它。

克雷格·赛伯特在 Unsplash 上的照片

对竞争的影响

在过去的几年里,我们生活在一个算法或软件购买代理代表我们“购物”的世界里。LG ThinQ 洗衣机可以在洗涤剂快用完时自动重新订购洗涤剂。通用电气、惠而浦和 LG 提供自动重新订购洗涤盒的洗碗机。有咖啡机、打印机,甚至可以重新订购咖啡盒、墨水和电池的烟雾报警器。

虽然这听起来令人兴奋,但也有令人担忧的一面。

几乎所有的“智能再订购”解决方案都绑定到一个供应商,并且总是订购相同的产品。虽然他们实现了购物过程的完全自动化,但他们让顾客只能选择一家零售商和一种产品。

这听起来非常像微软在 20 世纪 90 年代和 21 世纪初享有的准垄断地位,有效地迫使用户使用 Windows Media Player 和 Internet Explorer。美国、T2 和欧洲的政府介入进来,为比赛创造公平的环境。

将人类拒之门外

机器人不仅被用来购买咖啡,还被用来预订露营地和约会。露营者分享算法来预订约塞米蒂公园的露营点,愿意预约纽约机动车部门的顾客可以“雇佣”他们自己的自动呼叫机来预约,并不断检查是否有更好的空位。最近,机器人几乎抢走了 Nvidia 发布的所有新显卡。

算法购物者可以瞬间做出决定。

他们一天可以打几千个电话或访问几千个网站。当试图获取可能有需求的产品和服务时,人类没有机会对抗机器人。然而,阻止软件购买代理并不能解决问题。随着技术的进步,机器人找到了访问系统的新方法。

我们需要明确的规则来管理软件购买代理的行为。

这些可以包括制定机器人排除标准,类似于那些用于阻止搜索引擎访问某些网站的标准。我们还需要一种协调的方法,让软件购买代理在他们可能被人类混淆的情况下公开他们是谁。

在市场中掀起波澜

大多数股票市场交易都是完全自动化的,由算法执行。

什么可能会出错?

2017 年,道琼斯意外发布了一条关于苹果和谷歌合并的消息。大约有一秒钟的时间,苹果的股票从 2 美元涨到了 158 美元,暴露了算法在股市中的脆弱性。

作为对这一事件和类似事件的回应,韩国现在正试图加强对算法交易的控制。其他国家有望效仿。

新兴的算法经济,即软件代理代表我们的行为,有可能极大地改变我们的生活、工作和思考方式。然而,我们需要确保清晰的规则管理算法的行为。有了保护市场竞争的正确机制,监管产品和服务的准入,并强制执行代表我们购物的算法的最低质量标准,我们就有很大的机会通过购物的算法来享受我们的未来。

我何时以及为何停止收集数据科学证书

原文:https://towardsdatascience.com/when-and-why-i-stopped-collecting-data-science-certificates-cca44e99701d?source=collection_archive---------49-----------------------

而我开始做的是。

【GIPHY 的 GIF

数据科学证书无处不在。对它们的需求很高,而且还在不断增加,所以一款新的很快就推出了。有几个原因可以解释为什么在许多不同的平台上存在丰富的证书选择。

  • 数据科学领域尚未成熟,仍在不断发展。因此,它在传统教育系统中仍然没有得到很好的确立。提供数据科学本科学位的大学数量远少于任何其他 STEM 专业。
  • 高等教育是昂贵的。人们倾向于花几百美元(最多)去考证书,而不是花几万美元去获得一个学士或硕士学位。
  • 容易接近!证书适合你的时间表,而且大多是在线的,这使得它们对那些抽不出时间接受传统教育的人很有吸引力。

这种介绍似乎是收集证书的一种动力。事实上,是的,但在一定程度上。

我也从证书开始了我的数据科学之旅。我考的第一个是 IBM 数据科学专业证书。它奠定了基本原则,并提供了一个领域的一般,结构良好的概述。我又收了几个证,然后就停了。

在这篇文章中,我将写下我什么时候和为什么停止收集数据科学证书,以及我开始做什么。

下降趋势

根据我的观点,让我们从花费大量时间收集大量证书的缺点开始。

证书有助于教授基础知识,让你熟悉这个领域。由于数据科学是一个跨学科的领域,范围很广,因此从一开始就要有一个结构良好的概述。

但是,获得其中几个之后,证书就开始重复了。你从不同的角度回顾相同的原则和实践。你每次花费所学到的东西开始大幅减少。

我的证书学习曲线与知识和技能

证书通常过于笼统,不够深入。他们所覆盖的是表面的。让你与众不同的技能就在这些深层领域。

为了真正“学习”一些东西,你需要接受挑战。浏览简单的视频记录和完成相当简单的任务对你来说绝对不够有挑战性。

挑战自己的一个方法是做项目。例如,你可以尝试重新创建一个正在使用的机器学习微服务。它不必完美无缺。即使你接近了,你也会学到很多有价值的信息。另一个选择是改进一个简单的用例或项目。

我想用 Keras 创始人 Francois Chollet 的一条推文来强调我的观点,他是数据科学领域的先驱之一。

他提到了重新创造变化的重要性,我认为通过获得许多证书无法实现这一点。相反,完成项目会帮助你“学习”得更深更好。

建议

在我看来,你应该在你覆盖了基础之后停止收集证书。你可能会问,那我们该怎么办?

以下是我的建议:

很明显,第一条就是做项目。我已经提到了项目的重要性。如果你想获得更详细的概述,我写了一篇单独的文章,列出了我做项目的 5 个理由。

文档是您的财富!所有著名的库都有很好的文档记录,它们还提供了用户指南。花时间阅读这些非常有帮助。即使你在寻找一个特定的任务或操作,你学到的东西也比你寻找的要多。

Scikit-learn ,一个广泛使用的机器学习库,提供了一个有启发性的文档

阅读其他人面临的问题和困难,以及他们如何解决这些问题。 StackoverflowQuora 是两个常用的平台。当出现您无法解决的问题时,很可能是其他人以前遇到过同样的问题。你可以在这样的平台上寻找问题和解决方案。

此外,你可以浏览热门问题,并尝试提供答案,这肯定会提高你的技能。我刚刚在 stackoverflow 上快速搜索了一下关于熊猫的内容,这是一个著名的 python 数据分析库。结果如下:

截至目前,stack overflow上有超过 166,000 个关于熊猫的问题

数据科学是一个不断发展的领域。它也是一个由数学、统计学和软件组成的跨学科领域。新的技术和工具不断发布。因此,保持更新是很重要的。我有两个建议:

  1. 关注每周或每月的时事通讯。我密切关注来自 deeplearning.ai 的批处理。但是,还有其他选项。
  2. Twitter 是名副其实的最新平台。跟随先行者,业内有经验的人,学者,科学家。他们首先在推特上发布公告。他们还分享了他们对主题和一些用例的想法。

最后的想法

我分享过我在数据科学领域关于“学习”的经验和看法。当然,你的学习路径和风格可能不同。例如,有些人更喜欢在 youtube 上阅读或观看视频。

无论你走哪条路,一定要挑战自己。

尝试创造。从简单的开始,逐渐增加复杂性。

感谢您的阅读。如果您有任何反馈,请告诉我。

基于树的模型何时以及为什么(通常)优于神经网络

原文:https://towardsdatascience.com/when-and-why-tree-based-models-often-outperform-neural-networks-ceba9ecd0fd8?source=collection_archive---------2-----------------------

作者图片

以及为什么它们没有那么大的不同

神经网络通常被视为机器学习的圣杯,无所不知,解决一切问题,主要是因为它们很复杂。另一方面,基于树的方法没有受到同样的敬畏和宣传,主要是因为它们看起来简单。虽然它们看起来如此不同,但它们只是一枚硬币的两面。

基于树的方法通常优于神经网络。任何 Kaggler 都知道,XGBoost 是迄今为止最受欢迎的顶级竞赛提交选择。本质上,将基于树的方法和神经网络放在同一类别的是,它们通过逐个解构来处理问题,而不是像 SVM 或逻辑回归那样,找到一个复杂的边界来分隔整个数据集。

非常明显,基于树的方法沿着各种特征逐步分割特征空间,以优化信息增益。不太明显的是,神经网络以类似的方式完成这项任务。每个神经元监视特征空间的特定部分(具有各种重叠)。如果一个输入进入那个空间,某些神经元就会被激活。

神经网络对这种分段模型拟合采取概率观点,而树则采取确定性观点。无论如何,它们的性能都依赖于模型的深度,因为它们的组件与特征空间的部分相关。

一个有太多组件的模型——在树的情况下是节点,在网络的情况下是神经元——会过度拟合,而一个组件太少的模型根本不能给出有意义的预测。(两者都是开始记忆数据点而不是实际学习归纳。)

为了更直观地了解神经网络如何分解特征空间,请查看通用逼近定理

尽管决策树有许多强大的变体,如随机森林、梯度提升、自适应提升和深度森林,但一般来说,基于树的方法本质上是神经网络的简化版本。

  • 基于树的方法通过垂直和水平线一点一点地解决问题,以最小化(优化器&损失)。神经网络通过操纵激活函数的形状来一点一点地解决问题(参见【relu 如何工作得这么好?).
  • 基于树的方法是确定性的,而不是概率性的。这导致了一些很好的简化,比如自动特征选择。
  • 决策树中被激活的条件节点类似于被激活的神经元(信息流)。
  • 神经网络拟合参数以转换输入,并间接指导后续神经元的激活。决策树明确地拟合参数来引导信息流。(这是确定性相对于概率性的结果。)

信息在两种模型中的流动是相似的,只是在树中的方式更简单。图片作者。

当然,这是一个抽象的,甚至可能是有争议的说法。诚然,建立这种联系存在许多心理障碍。无论如何,这是理解基于树的方法何时以及为什么优于神经网络的重要部分。

表格,或以表格形式出现的结构化数据,对于决策树来说是很自然的。大多数人都认为神经网络对于表格数据回归和预测来说是多余的,所以我们做了一些简化。我们选择 1 和 0,而不是概率,这是两种算法之间差异的主要根源。因此,在概率的细微差别没有必要的情况下,比如结构化数据,树是成功的。

例如,基于树的方法在 MNIST 数据集上表现得足够好,因为每个数字都有几个定义特征。概率根本不是必要的计算。这根本不是一个非常复杂的问题,这就是为什么设计良好的树集成的性能与现代卷积神经网络相同甚至更好。

通常,人们会倾向于说‘树只是简单地记忆规则’,这是真的。神经网络也是一样,它记忆更复杂的、基于概率的规则。神经网络不会对类似于x3 的条件显式地产生真/假,而是将输入放大到一个高值,以产生一个 sigmoid 值 1 或产生一些连续的表达式。

另一方面,因为神经网络非常复杂,所以可以用它做很多事情。卷积和递归层都是神经网络的出色改编,因为它们对经常需要概率计算细微差别的数据进行操作,所以工作得很好。

很少有图像可以用 1 和 0 来建模。决策树值不能处理具有许多中间值(例如 0.5)的数据集,这就是它在 MNIST 上工作良好的原因,其中像素值几乎都是黑色或白色,而不是其他值(例如 ImageNet)。同样,文本有太多的信息和太多的例外,无法用确定性的术语来表达。

这也是为什么神经网络主要用于这些领域,以及为什么神经网络研究在没有大量图像和文本数据时停滞不前(< 2000 年代)。神经网络的其他常见用例仅限于大规模预测,如 YouTube 的视频推荐算法,其中规模如此之大,以至于必须涉及概率。

去一家公司的任何数据科学团队,他们可能会使用基于树的模型,而不是神经网络。除非他们正在构建一个重型设备,如在 Zoom 中模糊视频的背景,否则树的确定性使日常业务分类任务变得轻量级,与神经网络的一般方法相同。

在许多现实世界中,确定性建模比概率性建模更自然,这也是有争议的。例如,树将是预测用户是否从电子商务网站购买商品的好选择,因为用户自然会遵循基于规则的决策过程。它可能看起来像这样:

  1. 我以前在这个平台上有过愉快的经历吗?如果是,请继续。
  2. 我现在需要这个项目吗?例如:我应该在冬天买太阳镜和泳裤吗?如果是,请继续。
  3. 根据我的人口统计,这是我有兴趣购买的产品吗?如果是,请继续。
  4. 这个东西太贵了吗?如果没有,请继续。
  5. 是否有其他顾客对该商品的评价达到了一定的标准,让我觉得可以放心购买?如果是,请继续。

总的来说,人类遵循非常基于规则和结构化的决策过程。在这些情况下,概率建模是不必要的。

总而言之,

  • 基于树的方法最好被认为是神经网络的缩小版本,接近特征分类、优化、信息流等。简单来说。
  • 基于树的方法和神经网络在使用上的主要区别在于数据的确定性(0/1)和概率性结构。使用确定性模型对结构化(表格)数据进行建模总是更好。
  • 不要低估基于树的方法的力量。

关于何时重新训练机器学习模型的指南

原文:https://towardsdatascience.com/when-are-you-planning-to-retrain-your-machine-learning-model-5349eb0c4706?source=collection_archive---------15-----------------------

了解更多关于再培训策略的信息

照片由 Aron 视觉效果Unsplash 上拍摄

你可能会发现很多教程可以帮助你建立端到端的机器学习管道。但是一般来说,这些教程并没有太多地提到如何保持从 ML 系统生成的预测的质量。

保持已部署模型的预测能力被认为比从头构建 ML 模型更困难,因此这是我们今天讨论的主题。

但是在开始讲述“模特再培训”的细节之前,让我们先快速了解一下“模特培训”:

  • 假设有足够的可用历史数据,模型构建从学习一组独立特征和目标变量之间的依赖关系开始。
  • 基于一些评估度量来计算最佳学习相关性,以最小化验证数据集上的预测误差
  • 该最佳学习模型随后被部署到生产中,期望尽可能长时间地对的未知数据进行准确预测

现在,让我们更加强调我们所说的“尽可能长”是什么意思?

从来不会出现最终部署一次的 ML 模型就永远带走了担忧,并一直给出准确的预测。

这是为什么呢?让我们弄清楚下面的问题:

  1. 模型漂移:

为了理解这一点,让我们回忆一下 ML 建模中最关键的假设之一——训练和测试数据集应该属于相似分布。并且,如果新数据与过去观察到的数据相似,模型将是好的,其中模型是基于过去观察到的数据进行训练的。

因此,我们知道,如果测试数据的分布偏离了训练数据的分布,那么这个模型就不成立。但是这种偏离的可能原因是什么呢?根据商业案例,这可以归因于许多原因,例如,消费者偏好的变化、快速变化的竞争空间、地理位置的变化、经济状况等。

因此,漂移数据分布需要一个持续的过程来定期检查旧模型的有效性。简而言之,让你的机器学习模型保持更新是很关键的;但关键是什么时候?我们将继续讨论这一点以及更多内容,敬请关注。

2。鲁棒性

受 ML 模型结果影响的人/实体可能故意改变他们的响应,以便向模型发送虚假输入,从而逃避模型预测的影响。例如,欺诈检测、网络安全等模型接收被操纵和扭曲的输入,导致模型输出错误分类的预测。这种类型的对手也降低了模型性能。

3。当模型训练时地面实况不可用时

在大多数机器学习模型中,基础事实标签不可用于训练模型。例如,捕获最终用户响应的目标变量是未知的。在这种情况下,您的最佳选择可能是基于来自业务理解的特定规则集来模拟用户操作,或者利用开源数据集来启动模型训练。但是,该模型可能不一定代表实际数据,因此在开始挑选(也称为学习)最终用户的真实行为之前,不会表现良好。

什么都属于模特再培训的范围?

  • 更新模型参数?
  • 在超参数搜索空间上重复
  • 在候选算法池中重新运行模型选择管道
  • 如果这也不能提升模型的性能,那么我们是否需要在模型中引入新的特性,也许重新进行特性工程和选择流程?

理想情况下,再培训包括用新数据运行整个现有管道,就是这样。它不涉及任何代码更改或重新构建管道。

然而,如果您最终探索了在先前模型训练时可能不可用的新算法或特征,那么在部署重新训练的模型时合并这些将进一步提高模型准确性。

如何衡量模型性能的下降?

假设预测值与地面真实值一起存储和映射,则在连续的基础上计算下降(或不下降)以评估漂移。

但是,如果预测的地平线在更远的未来,我们不能等到地面真实标签被观察到,以评估模型的良好性。那么,在这种情况下,我们可以通过回溯测试来粗略估计再培训窗口。这包括使用历史数据中的基本事实标签和预测来估计准确性开始下降的时间范围。

实际上,寻找模型漂移的整个过程可以归结为推断两个数据集(训练和测试)是否来自同一个分布,或者性能是否低于可接受的范围。

让我们看看评估分布漂移的一些方法:

  • 直方图:可视化比较的一个快速方法是绘制直方图——两个直方图之间的重叠程度给出了相似性的度量。
  • K-S 统计:检查即将出现的新数据是否与训练数据属于同一分布。
  • 目标分布:检查 ML 模型一致性预测能力的一个快速方法是检查目标变量的分布。例如,如果您的训练数据集不平衡,99%的数据属于类 1,剩余的 1%属于类 0。并且,预测反映这种分布在 90%-10%左右,那么它应该被视为进一步调查的警报。
  • 相关性:监测单个预测因子之间的成对相关性将有助于揭示潜在的漂移

再培训策略:

固定周期间隔

  1. 动态周期性—如果传入的数据经常变化,模型重新训练甚至可以每天进行。
  2. 与上面的方法相比,自动监控性能指标以决定再训练触发点更加有效。您需要确定指定可接受的绩效差异水平的阈值,以启动再培训。在决定阈值时,需要考虑以下因素:
  • 过低的阈值将导致频繁的重新训练,这将导致计算成本方面的开销增加
  • 过高的阈值将输出“偏离预测”

再培训前应该收集多少新数据?

应该是“n 行进,n 行出”吗?或者,我们应该继续添加新数据而不删除旧数据。什么是好的搭配?对此,没有“一个解决方案适合所有人”的答案,但很大程度上取决于以下因素:

  • 如果业务经验表明新数据是高度动态的,那么通过替换旧数据来包含新数据。
  • 但是,如果数据漂移不经常发生,那么就等待收集足够的新训练数据样本。

再训练信号触发,来源:作者

参考文献:

当密码遇到 ML

原文:https://towardsdatascience.com/when-crypto-meets-ml-79ed4e2aba7d?source=collection_archive---------41-----------------------

对加密图像应用均值过滤器(使用完整的 Colab 笔记本)

杰森·黑眼在 Unsplash 上的照片

在这篇文章中,我们将看到如何使用同态加密对加密图像进行均值滤波【1】【2】。为什么会有人这么做?嗯,只要你在本地进行处理,加密就没有意义,但如果你想使用在线服务,你确定要把你的个人图像交给远程网络服务器吗?如果你的答案是否定的,请继续阅读这篇文章。

为什么是均值滤波器?

均值滤波器用于创建模糊效果。在某些情况下,这种效果有助于消除图像中的噪点。有许多 web 服务允许您对图像应用均值过滤器【3】【4】。所有这些服务都按照以下步骤工作:

  1. 你把图像上传到网络服务器上
  2. 在服务器上处理图像(应用均值滤波器)
  3. 你下载服务器返回的经过处理的图像

这种方法的主要问题是隐私:你将你的个人图像交给一个你一无所知的远程服务器!为了解决这个问题,我们在上述过程中增加了两个步骤:

  1. 您使用您的公钥加密图像
  2. 你把加密图像上传到网络服务器上
  3. 服务器处理加密的图像
  4. 你下载服务器返回的加密结果
  5. 解密你下载的东西

图像在服务器上的所有时间都是用你的公钥加密的。为了让服务器能够解密它,它需要你的私钥,只有你知道😎

幕后

为了加密图像,我们将使用 Paillier 密码系统【5】。该方案关于加法和常数乘法是同态的。这对派利尔计划意味着什么?
关于加法的同态是指,如果 c1m1 的密文 c2m2 的密文,那么 c1c2* 是 m1+m2 的密文。 关于常数乘法的同态是指,如果 cm 的密文, k 是一个大家都知道的常数,那么 c^k 就是 ck.* 的加密由于除法就是乘法我们也可以用一个常数做同态除法。如果你想了解更多关于 Paillier 加密方案的信息,请查看这个漂亮的解释。
对于本帖,我们不需要该方案的所有细节,这已经在 phe 库中实施【6】

主要思想

为了应用维度为 kxk 的均值滤波器,我们简单地用当前像素位于中心的 kxk 正方形中所有像素的均值替换每个当前像素。所以,均值滤波器的核心由一个和后面跟着一个常数值的除法组成( k ,大家都知道)。这听起来像是 Paillier 加密的完美应用😁
如果我们使用 Paillier 方案加密图像,我们可以直接计算加密像素的总和。然后,如果我们将加密的总和除以一个常数(这是滤波器的大小),我们将得到像素的加密平均值。

服务器将永远不需要知道原始图像来应用均值滤波器。

如果你正在寻找一个完整的实现和进一步的解释, 这里 ,我已经为你准备了一个 Colab 笔记本,可以在你的浏览器上运行😉

参考

[1]https://medium . com/privacy-preserving-natural-language-processing/同态-encryption-for-初学者-a-practical-guide-part-1-b 8 f 26d 03 a 98 a

[2]https://homepages.inf.ed.ac.uk/rbf/HIPR2/mean.htm

[3]https://www10.lunapic.com/editor/?action=blur

[4]https://pinetools.com/blur-image

[5]https://medium . com/coin monks/paillier-shines-a-light-on-a-new-world-of-computing-15c aceed 3 ab

https://pypi.org/project/phe/

当数据遇到汉堡——探索性数据分析

原文:https://towardsdatascience.com/when-data-meets-burgers-exploratory-data-analysis-bd1f10f3b168?source=collection_archive---------49-----------------------

麦当劳菜单的探索性数据分析。

我们将使用熊猫图书馆对麦当劳菜单进行分析。(来源— 越轨艺术中的潘杜莫尼姆

你好。你将如何完成爬山的任务?你会直接走到顶端吗?或者你会探索基地并找到到达顶端的最佳路线吗?第二个想法似乎是更好的选择。为什么我要说山?你很快就会找到答案。在此之前,请观察堆积如山的数据科学。

使用 Canva 创建

导入数据集,选择合适的算法,应用.fit() 函数,调整超参数以减少损失函数,以及 BAMM!!!!!!您将获得您的准确性指标!上述过程只是大部分 MOOCs 和在线课程上教授的机器学习范式的概述。
等待..!!!!!

如果你认为你会一直处理干净的数据,那么你就错了。现实生活中的数据是杂乱的。它包括缺失值、错误的数据类型、大量不必要的列等等。那你怎么处理这个?

这就是探索性数据分析(EDA) 的用武之地。它是清理数据并使用适当的可视化工具来提取见解和总结数据的过程。例如,假设我们正在使用线性回归模型,我们的数据集包含一些与目标变量完全不相关的特征。不移除这些功能并运行模型不会产生最佳结果。因此,在对数据应用伟大的深度学习模型之前,EDA 是必须的。(这就是为什么我一开始就用了山这个比喻!)

在现实世界中,EDA 没有固定的流程。这取决于我们正在处理的数据。我们将使用麦当劳菜单数据集执行 EDA 和 Pandas 库,以及 Matplotlib 和 Seaborn 进行数据清理和数据可视化。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

理解数据

我们可以看到数据集总共有 260 行和 24 列。类别栏表示某个项目是否属于早餐、冰沙、沙拉等。我们还可以注意到一些栏目,如总脂肪、胆固醇等。有两栏,其中一栏表示以克为单位的数量,而“每日价值百分比”可以告诉你一份食物中的营养成分是高还是低,以及一份食物对你每日饮食中每种营养成分的贡献是多还是少。(引自 fda.gov)

例如:看看一份鸡蛋松饼中的钠含量(最后一栏)。31%的%DV(%每日价值)对你的饮食贡献大还是小?该产品含有 31%的钠 DV,这表明这是一种高钠产品(如果一个项目的 DV 超过 20%,则被视为高!).如果你吃了 2 份鸡蛋松饼,那就能提供 62%的钠摄入量——接近一整天钠摄入量的 60%。因此%DV 大于 20 的物品被认为是不健康的。

数据清理

观察上面的鸡蛋松饼排。你可以注意到总脂肪是 13,饱和脂肪是 5,胆固醇是 260,钠是 750。如果我们绘制这些值的条形图,看起来钠在该项目中占主导地位,但事实并非如此,因为这些值不在同一范围内(因此我们可以删除这些列)。

使用 Canva 创建

此外,像服务大小的列可以被删除,因为缺乏他们的贡献。

为了方便起见,在删除列并重命名所有列之后,我们可以注意到我们有 260 行和 16 列。我们还可以注意到,所有的列类型都是合适的。

处理缺失值

当给定行中的某一列没有数据值时,我们称之为缺失值。处理缺失值是很重要的,因为它们可能导致弱的/有偏见的分析。让我们使用热图来直观显示每列中缺失值的数量。df.isnull()方法返回一个布尔值,说明每个单元格是否有值。通常,热图会根据数据值为每个数据单元格分配一种颜色。

sns.heatmap(df.isnull())
plt.show()

我们可以用两种方法替换缺失值:
1。删除— 处理缺失值的最简单方法。可以使用dropna()方法完成。但由于数据丢失,这不是最佳解决方案。
2。到处都遵循的标准方法。使用fillna()方法,用该列的平均值/中值替换缺失值。
3。插值— 使用线性插值来猜测缺失值并填充数据。

我们现在可以观察到所有的列都没有缺失值。

比较类别

我们可以注意到,有 9 个独特的项目类别,这意味着总共 260 个项目分为 9 个类别。饼图显示,咖啡和茶类在菜单中占主导地位,而沙拉类最少。

根据营养成分比较类别

让我们试着分析哪一类蛋白质、胆固醇、脂肪等含量更多。在可视化数据之前,理解 pivot_table()的概念很重要。让我们看一个例子。

除了钠值的np.mean(),我们还可以执行其他聚合函数,如np.max()np.sum()等。因为我们是按类别比较营养值,所以最好取平均值。

类似于上面的例子,让我们为类别和蛋白质创建一个 pivot_table,并尝试理解其分布。让我们绘制所有平均蛋白质值 wrt 的柱状图。到类别。

我们可以使用熊猫内置的plot()方法来创建情节。因为我们要创建一个柱状图,所以我们将柱状图作为参数传递给种类参数。

我们可以注意到,鸡肉和鱼肉的蛋白质含量最高。同样,让我们按类别分析所有的营养分布。

不出所料,我们可以注意到思慕雪中有更多的糖,沙拉中有更多的维生素 A 和维生素 C。鸡肉和鱼肉中的卡路里含量较高,而牛肉和猪肉中的铁含量较高。正如第一个柱状图所示,由于胆固醇含量高,最好在家吃早餐。

您认为条形图在描述离散类别之间的比较时是否正确?这里我们计算了所有项目类别的平均值,并创建了一个条形图。但是我们也知道均值对异常值非常敏感。
异常值在上面的柱状图中起作用吗?为了了解每个项目的分布,我们可以创建群体图。 在群体图中,每一列中的每一项都用一个点来表示,而不是像条形图那样取该特定类别中所有项的平均值。

让我们为维生素 C 和类别列创建一个群集图,并将其与条形图进行比较。

我们可以使用 Seaborn 的swarmplot()方法创建一个群体图。为了便于阅读,X 轴标签旋转了 90 度。

sns.set(style="whitegrid", color_codes=True)ax1= sns.swarmplot(x="Category", y="Vitamin C", data=df)
ax1.set_xticklabels(ax1.get_xticklabels(),rotation=90)

这里我们可以看到蜂群图由所有项目的维生素 C 值组成。类别。在查看群集图时,我们可能假设饮料或小吃和配菜类别的维生素 C 含量最高,但是经过仔细观察,我们可以注意到这两列中零值项目(在群集图中圈出)的数量远远多于沙拉列,后者的所有值都在 20-30 左右。与其他两列相比,这导致沙拉类别的平均值更高。同样,我们可以为其他类别创建群体图,并对其进行分析。

选择合适的情节是洞察力产生的关键部分。

相互关系

这是一种用于描述数据集的特性(不同列)之间的相互依赖性的度量。两个变量之间的强正相关(接近 1)意味着一个变量的增加会导致另一个变量的增加。负相关(更接近-1)意味着一个变量的增加导致另一个变量的减少。如果该值更接近 0,则意味着它是弱相关/无相关。

注意:相关性仅在线性关系的情况下有用。在非线性关系的情况下,相关性往往会低估相互依赖性。

correlation_matrix = df.corr()
ax = sns.heatmap(correlation_matrix, square=True, annot = True, mask=mask, fmt = ".1")
ax.set_xticklabels(ax.get_xticklabels(),rotation=90)

我们可以使用 Seaborn 的heatmap()方法创建一个热图。如果annot参数为真,则相关值显示在每个单元格中,并且fmt参数限制小数点。为了便于阅读,X 轴标签旋转了 90 度。

好吧,没有令人震惊的事实被发现!相关矩阵证实了卡路里数随总脂肪量增加的观点(0.9 表示强正相关)。糖和铁之间存在微弱的负相关性,表明这两个特征彼此成反比。我们还可以注意到,铁和维生素 C 没有相关性(几乎为零表示没有相关性!).现在让我们试着回答一个有趣的问题!

烤的还是脆的?哪个是健康的?

在浏览数据集时,我发现 13 种食物有两种不同的口味,一种是烤的,另一种是脆的。我用柱状图来了解这些食物中卡路里和脂肪的分布,从而得出结论。

我将数据按项目分类,并根据烧烤或酥脆储存热量和脂肪。现在我们可以生成水平条形图来获得更好的图片。

嗯,图说故事。如果你在节食,最好有烧烤食物!

完整代码可从 Github 这里获得。

结论

在应用机器学习和深度学习之前,我试图解释探索性数据分析的重要性。希望您已经掌握了一些概念,这些概念将有助于您实时执行 EDA。没有特定的方法,不同的数据集有不同的方法。请随时分享您的反馈和回应。如果你今天学到了新东西,请举手。

当数据科学让我们失望时

原文:https://towardsdatascience.com/when-data-science-fails-us-78599de6423c?source=collection_archive---------36-----------------------

过去的趋势与预测未来的趋势有多相关?

马修·巴黎水在 Unsplash 上的照片

2020 年是非常特殊的一年,covid 在年初风靡全球,改变了所有行业的计划。时间表已经改变,客户互动已经转变,内部沟通也不再物质化。因此,我们所有基于前几年和历史智慧的模型都受到了质疑和挑战。它们在今天的环境中有什么相关性?

“我们如何协调利用过去作为指导的需要和我们对未来可能不同的认识?”信号和噪音

史料什么时候能忽悠你?

数据科学中的一个常见做法是检查可用的历史数据,以便得出有用的结论来进行更好的规划。

研究 90 年代的欧洲市场肯定会对历史学家有很大帮助;但是,既然机构和市场的结构已经发生了如此大的变化,我们还能做出什么样的推论呢?纳西姆·塔勒布

数据集是过去发生的事情的表格表示。但是这种表示也伴随着不确定性、偏差和误差。此外,它仅代表您正在研究的现象的一个子集,可能无法反映与您的问题相关的子集(数据可用性)。

回顾历史数据时,应注意以下几点:

  • 分配可能不是固定的
  • 今天的初始条件不同
  • 行动者(贡献者)已经进化
  • 外部互动已经进化
  • 如何兼顾随机性
  • 未知的未知(你甚至没有意识到并且没有包括在内的事情)

在这种情况下,相似的输入可以导致不同的结果。

你的药真的有效吗?:数据选择步骤

在设计临床试验时,一个重要的步骤是选择患者群体。应该选择哪个人口类别?哪个年龄组,他们的状况如何,他们的起源,他们的生物标记?我们如何确保这个样本尽可能接近我们想要提供药物的目标客户,而不遗漏任何一个人?

相反,如果您的样本不能准确代表总体,您的药物可能不如您的试验显示的有效。例如,如果你为乳腺癌患者开发一种药物,但你的样本中不包括肥胖的糖尿病患者,你可能会发现这些人对治疗反应不佳,不能使用它。

国立癌症研究所Unsplash 上拍摄的照片

这同样适用于使用历史数据来建立推论,但其局限性更难以把握。如果你看看所有过去的金融贷款数据,你可能会认为它们反映了总的趋势,未来很可能也是如此。然而,这些金融贷款可能只发放给了拥有足够财富的人,并没有考虑到其他人,因为他们甚至没有包括在数据集中。

真的有因果关系吗?:协变量移位

当模式主要是方差和随机性的反映时,确定的因果关系将误导对现象的实际行为的理解。正如纳西姆·塔勒布在他的书《被随机性愚弄》中指出的,这就是一些从交易结果的差异中受益的非常成功的交易者的遭遇。[1]

“许多人是如此缺乏独创性,他们研究历史以寻找重复的错误”纳西姆·塔勒布

挑战可能更加微妙,因为最近的一项研究发现,一些经过训练可以在胸部 x 射线上检测肺炎的模型在训练集中看不到的实际数据上的结果较差。这部分是由于图像采集和处理的差异。[2]

协变量偏移是指输入的训练集不同于真实世界的数据(作者的图片)

这就是我们所说的协变量转移。与训练集相比,生产模型(真实设置)中输入变量的分布不同。

在美国黑人更容易成为警察的目标吗?:分母偏差

模型不仅是从数据中构建的,更重要的是从我们决定关注的可用(相对于不可用)数据的子集构建的。这个决定会影响模型学习的方向,并导致更多的歧视。

劳拉·布朗纳在她的文章中揭露了针对黑人社区暴力的误导性统计数据。[3]许多公布的统计数字与每次遭遇警察时的死亡人数有关。然而,这些统计数据掩盖了以前发生的歧视,当时警察有权决定在街上与谁打交道。这些措施的分母不应是遭遇,而是人口。

妮可·巴斯特在 Unsplash 上的照片

同样,唐纳德·特朗普(Donald Trump)在接受 HBO 采访时表示,以每名感染者的死亡人数衡量,美国与其他国家相比表现良好。

在采访的 14'-15 '左右,川普试图利用这一统计缺陷为美国在打击疫情方面的糟糕表现辩护。下图突出了他推理中的统计缺陷。

(图片作者)

在这个例子中,B 国在相同的人口中有更多的感染病例和更多的死亡。对于两个人口相当的相似国家,理性的思考会表明,A 国对疫情的管理比 b 国好

然而,如果你看看每个感染者的死亡比例,如测试结果所示,情况就不同了。特朗普在视频中就是这么做的。在上面的例子中,A 国的死亡率为 0.23,而 B 国的死亡率仅为 0.2。

这一指标将突出更好的检测能力或全球人口的更高感染率。这使得人们很难理解一个国家如何能够更好地控制病毒的传播及其死亡率。

少数人的智慧:网络偏见

网络偏见的发生是因为网络活动的扭曲本质。里卡多·巴埃萨-耶茨[4]的一项研究表明:

  • 亚马逊 50%的评论来自前 4%的活跃用户
  • 50%的脸书帖子来自前 7%的活跃用户

这表明,我们看到的大部分信息来自少数来源,这种模式也被称为少数人的智慧:一小群精心挑选的用户是预测活动的良好代理。然而,进一步的分析表明,许多顶级用户来自软件或发布低质量的内容。很明显,原始用户数据不能用来做出这样的推论。

当数据和机器学习不足以预测时

“在现在与过去最不相似的时刻,回顾过去寻找未来的线索是没有意义的”j·彼得·斯考布里克

如果未来看起来与过去截然不同,那么把你对未来的所有决定建立在你目前所经历的基础上就不再有效了。你正在错过机会,因为你没有看到世界是如何变化的。

在一个未来似乎与过去截然不同的世界里,这种识别模式的能力甚至可能是一种劣势,因为你会假设你知道接下来会发生什么,但你会错。你会对未来做出不正确的假设。

“历史告诉我们,以前从未发生过的事情会发生。[……]历史教导我们避免天真的经验主义,这种经验主义是从偶然的历史事实中学习而来的。”纳西姆·塔勒布

即使我以前见过类似的东西,这次可能会有所不同。因此,与其对将要发生的事情做出假设,我怎么才能快速了解新趋势,我怎么才能知道我对将要发生的事情的想法是好是坏?

根据您的需求,有些工具可能很有价值:

  • 情景思维有助于应对多变的商业环境。
  • 蒙特卡洛模拟可以揭示可能的未来及其影响。
  • 敏捷建模有助于理解可变性。

场景是一个对未来有重大影响的“如果…会怎样”的大问题

结论

大多数模型都基于我们可以预测未来的假设,但在当今复杂多变的环境中,有时我们做不到。

SeanUnsplash 上拍照

参考

[1] 纳西姆·塔勒布,被随机性愚弄:机会在市场和生活中的隐藏角色。纽约:Texere,2001 年。

[2] Zech JR,Badgeley MA,Liu M,Costa AB,Titano,Oermann EK (2018)深度学习模型检测胸片肺炎的可变泛化性能:一项横断面研究。PLoS Med 15(11): e1002683。https://doi.org/10.1371/journal.pmed.1002683

fivethirtyeight.com,劳拉·布朗纳,为什么统计数据没有反映出警察系统偏见的全部程度

[4] 里卡多·巴埃萨-耶茨。2018.卷筒纸上的偏差。Commun。ACM 61,6(2018 年 6 月),54–61。土井:https://doi.org/10.1145/3209581

当数据科学遇上足球(第 1 部分):简介

原文:https://towardsdatascience.com/when-data-science-meet-football-part-1-introduction-4cf9d0207ebd?source=collection_archive---------32-----------------------

足球数据科学导论

照片由本斯·巴拉-肖特纳Unsplash 拍摄

在足球比赛中利用数据对于发展球员技能或比赛分析已经变得非常重要。今天,我们可以比以前更深入和详细地讨论足球世界。对于刚开始在足球领域探索数据分析的你,有 WyscoutOpta 等第三方提供的公开数据集。

数据集包含足球比赛事件(例如,球员和比赛统计)。我们可以探索这些数据,努力更深入地理解足球数据。在这一节中,我们将检查进行足球分析的变量。

让我们开始吧,如果你想看这篇文章的完整代码,请访问我的 github 。在本文中,我们将使用 Jupyter 笔记本作为代码编辑器。如果你不熟悉 Jupyter 笔记本,可以看看下面这篇文章。你可以自由使用另一个代码编辑器,不必遵循我所使用的。

[## 1.Jupyter 笔记本是什么?- Jupyter/IPython 笔记本快速入门指南 0.1 文档

在这一页中,简要介绍 Jupyter 笔记本环境的主要组件。有关更完整的概述…

jupyter-笔记本-初学者指南. readthedocs.io](https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html)

首先,我们必须下载所需的数据。本文将使用 Pappalardo 等人(2019) 研究中使用的数据集。你可以在这里 下载数据集

导入包

如果您已经下载了所需的数据集,下一步就是导入将要使用的包。这里我们将使用collectionsjson包,它们是 python 和matplotlibnumpy的内置函数。

如果您还没有安装我最后提到的一个或两个软件包,请首先使用下面的命令安装它们。

$ pip install numpy
$ pip install matplotlib

安装完包之后,进入前面提到的包。

%matplotlib inline

**from** **collections** **import** defaultdict
**import** **matplotlib.pyplot** **as** **plt**
**import** **numpy** **as** **np**
**import** **json**

加载公共数据集

我们可以通过编写下面的代码来加载数据集。数据集从 figshare 存储库中导入,并以 JSON 格式存储。在这个会话中,我们导入比赛、球员、比赛和球队数据。也可以看看这个 Github 作为参考,作为我做这篇文章的灵感。

def load_dataset(tournament):
    matches, events = {}, {}
    matches = json.load(open('./data/matches/matches_{}.json'.format(tournament)))
    events = json.load(open('./data/events/events_{}.json'.format(tournament)))
    players = json.load(open('./data/players.json'))
    competitions = json.load(open('./data/competitions.json'))
    teams = json.load(open('./data/teams.json'))
    return matches, events, players, competitions, teams

之后,我们定义函数来获取我们需要的每一个数据。从比赛和事件开始。

def get_match(matches, events):
    match_id2events = defaultdict(list)
    match_id2match = defaultdict(dict)
    for event in events:
        match_id = event['matchId']
        match_id2events[match_id].append(event)

    for match in matches:
        match_id = match['wyId']
        match_id2match[match_id] = match

玩家。

def get_player(players):
    player_id2player = defaultdict(dict)
    for player in players:
        player_id = player['wyId']
        player_id2player[player_id] = player
    return player_id2player

竞赛。

def get_competitions(competitions):
    competition_id2competition = defaultdict(dict)
    for competition in competitions:
        competition_id = competition['wyId']
        competition_id2competition[competition_id] = competition
    return competition_id2competition

团队。

def get_teams(teams):
    team_id2team = defaultdict(dict)
    for team in teams:
        team_id = team['wyId']
        team_id2team[team_id] = team
    return team_id2team

现在,一切都准备好了。让我们加载数据。这里我们只使用 2018 年世界杯数据,所以输入World_Cup参数。

matches, events, players, competitions, teams = load_dataset('World_Cup')

之后,我们将数据转换成字典形式。

match_id2events, match_id2match = get_match(matches, events)
player_id2player = get_player(players)
competition_id2competition = get_competitions(competitions)
team_id2team = get_teams(teams)

探索数据结构

在这里,我们将尝试查看每个数据的结构。例如,我们可以在字典中显示索引为 32777 ( player_id2player[32777])的球员相关信息。如你所见,我们可能有很多关于球员的信息,从护照区域信息到球员在 Wyscout 系统中的标识符。

{'passportArea': {'name': 'Turkey',
  'id': '792',
  'alpha3code': 'TUR',
  'alpha2code': 'TR'},
 'weight': 78,
 'firstName': 'Harun',
 'middleName': '',
 'lastName': 'Tekin',
 'currentTeamId': 4502,
 'birthDate': '1989-06-17',
 'height': 187,
 'role': {'code2': 'GK', 'code3': 'GKP', 'name': 'Goalkeeper'},
 'birthArea': {'name': 'Turkey',
  'id': '792',
  'alpha3code': 'TUR',
  'alpha2code': 'TR'},
 'wyId': 32777,
 'foot': 'right',
 'shortName': 'H. Tekin',
 'currentNationalTeamId': 4687}

我们还可以使用下面的代码探索其他数据的结构。

match_id2events[2058017]

这就是结果。

{'status': 'Played',
 'roundId': 4165368,
 'gameweek': 0,
 'teamsData': {'9598': {'scoreET': 0,
   'coachId': 122788,
   'side': 'away',
   'teamId': 9598,
   'score': 2,
   'scoreP': 0,
   'hasFormation': 1,
   'formation': {'bench': [{'playerId': 69964,
      'assists': '0',
      'goals': 'null',
      'ownGoals': '0',
      'redCards': '0',
      'yellowCards': '0'},
...
 'seasonId': 10078,
 'dateutc': '2018-07-15 15:00:00',
 'winner': 4418,
 'venue': 'Olimpiyskiy stadion Luzhniki',
 'wyId': 2058017,
 'label': 'France - Croatia, 4 - 2',
 'date': 'July 15, 2018 at 5:00:00 PM GMT+2',
 'groupName': '',
 'referees': [{'refereeId': 378051, 'role': 'referee'},
  {'refereeId': 378038, 'role': 'firstAssistant'},
  {'refereeId': 378060, 'role': 'secondAssistant'},
  {'refereeId': 377215, 'role': 'fourthOfficial'}],
 'duration': 'Regular',
 'competitionId': 28}

其他数据可以自己试试。如果你需要例子,我已经在 Github 上提供了。

可视化数据

我们可以通过将数据绘制成更具交互性的视图来进行有趣的数据分析。例如,我们可以将所有球员的身高绘制成直方图。

heights = [player['height'] **for** player **in** player_id2player.values()   **if** player['height'] > 0]fig,ax = plt.subplots(1,1)
ax.hist(heights)
ax.set_title('histogram of height')
ax.set_xlabel('height [cm]')
ax.set_ylabel('frequency')
plt.show()

这就是结果。

高度直方图

或者你可以做这个。

重量直方图

除了分析球员统计数据,我们还可以通过在比赛数据中发现事件来进行其他有趣的分析。编写下面的代码,创建一个函数来标识匹配事件的数据结构。

event_key = []
sub_event_key = []

for events **in** match_id2events.values():
    for event **in** events:
        event_key.append(event['eventName'])
        sub_event_key.append(event['subEventName'])

event_key = list(set(event_key))
sub_event_key = list(set(sub_event_key))event_stats = []
sub_event_stats = []**for** events in match_id2events.values():
    event_stat = {key: 0 for key in event_key}
    sub_event_stat = {key: 0 for key in sub_event_key}

    for event in events:
        event_stat[event['eventName']] += 1
        sub_event_stat[event['subEventName']] += 1 event_stats.append(event_stat)
    sub_event_stats.append(sub_event_stat)

这是event_key变量的结果。

{'Duel',
 'Foul',
 'Free Kick',
 'Goalkeeper leaving line',
 'Offside',
 'Others on the ball',
 'Pass',
 'Save attempt',
 'Shot'}

而这是sub_event_key变量的结果。

{'',
 'Acceleration',
 'Air duel',
 'Clearance',
 'Corner',
 'Cross',
 'Foul',
 'Free Kick',
 'Free kick cross',
 'Free kick shot',
 'Goal kick',
 'Goalkeeper leaving line',
 'Ground attacking duel',
 'Ground defending duel',
 'Ground loose ball duel',
 'Hand foul',
 'Hand pass',
 'Head pass',
 'High pass',
 'Late card foul',
 'Launch',
 'Out of game foul',
 'Penalty',
 'Protest',
 'Reflexes',
 'Save attempt',
 'Shot',
 'Simple pass',
 'Simulation',
 'Smart pass',
 'Throw in',
 'Time lost foul',
 'Touch',
 'Violent Foul'}

我们可以看到比赛事件有一些有趣的变量。我们可以分析每个变量,以获得更有意义的匹配分析。例如,我们可以在我们的字典(event_stats[0])的第一场比赛中打印一些事件统计数据。

{'Goalkeeper leaving line': 0,
 'Duel': 468,
 'Free Kick': 105,
 'Offside': 4,
 'Others on the ball': 128,
 'Foul': 32,
 'Shot': 18,
 'Pass': 827,
 'Save attempt': 7}

就像前面一样,我们还可以为匹配事件中的每个变量创建一个直方图,以简化分析过程。我们来做一个直方图。

pass_stat = [event['Pass'] for event in event_stats if 'Pass' in event]
fig,ax = plt.subplots(1,1)
ax.hist(pass_stat)
ax.set_title("histogram of passes")
ax.set_xlabel('passes')
ax.set_yticks([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])
ax.set_ylabel('frequency')
plt.show()

这就是结果。

通道直方图

你也可以做这个。

镜头直方图

守门员离场线直方图

最后,你也可以创建目标统计。

scores = []
for match in match_id2match.values():
    score = 0
    for team in match['teamsData'].values():
        score += team['score']
    scores.append(score)

然后使用这段代码查看统计数据。

scores = np.array(scores)
fig,ax = plt.subplots(1,1)
ax.hist(scores, bins = [0, 1, 2, 3, 4, 5, 6, 7])
ax.set_title("histogram of goals")
ax.set_xticks([0, 1, 2, 3, 4, 5, 6, 7])
ax.set_xlabel('goals')
ax.set_yticks([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])
ax.set_ylabel('frequency')
plt.show()

这就是结果。

目标直方图

上面的教程是对足球分析如何工作的介绍。在下一篇文章中,我们将探索更复杂的数据。

参考

当数据科学遇到数据工程

原文:https://towardsdatascience.com/when-data-science-meets-data-engineering-48f982dfb566?source=collection_archive---------30-----------------------

如何让他们很好地合作

随着数据行业变得越来越成熟,我们现在看到越来越多的角色专业化。在整个数据科学/分析生命周期中,拥有涵盖不同需求的不同技能组合的人固然很好,但专业化的兴起意味着我们需要开始定义工作方式,使不同的角色能够有效地合作。数据团队中最常见的工作关系之一是数据科学家和数据工程师之间的关系。这种关系可能存在的时间最长,但绝不是一种很好理解的关系。我一直在与业内不同的人交谈,有趣的是,似乎没有让这两个角色相互合作的最佳方式。因此,我们将看看为什么这些角色需要一起工作,了解两者之间的差异和潜在的紧张关系。最重要的是,看看几种不同的工作方式,并强调一些利弊,以帮助您找到适合您团队的方式。

Unsplash 上拍摄的“我的镜头人生”

为什么数据科学家和数据工程师需要合作?

数据科学和数据工程是一枚硬币的两面,因为要从数据中获得价值,我们需要数据科学家创造性的问题解决方案和商业敏锐度,我们需要数据工程师稳健的实施和可扩展的架构。没有彼此,两者最终都不会有效地提供一个好的解决方案。在更实际的层面上,这两个角色需要很好地合作,因为他们的工作在解决方案开发过程中来回交织。因为一个人的工作何时结束和另一个人的工作何时开始之间没有明确的界限,这可能会在两个学科之间产生不健康的紧张关系。

数据科学和数据工程必须很好地合作,因为它们在整个开发过程中会多次交互。与我们在该流程中的其他关键关系相比,例如后端和前端开发以及应用程序开发和运营,双方只需有一个单一的界面来提供解决方案。数据科学和工程在整个过程中需要更加流畅的交互和协作,这是由于数据工作的以下特征。

数据科学不是一个简单的解决方案

实验是数据科学的核心,从数据中获取价值的很大一部分是从数据中发现见解,设计可以利用这些见解的算法。根据定义,这是一个迭代过程,它需要两端的工程,从管理和提供可靠的数据馈送到获取算法并使其可用于其他系统和过程。

数据工程建立在数据上,而不是规范上

软件工程师根据规范构建解决方案,但这对数据工程师来说还不够,因为数据系统是建立在数据之上的,而规范通常不会涵盖现实生活中数据的所有细微差别和错误。数据工程师需要不断调整和改进数据处理方式,以确保下游用户和应用获得及时准确的数据。为了有效地做到这一点,数据工程师应该利用数据科学家对业务的理解和对数据的熟悉。

这只是两个明显的例子,这两个学科需要很好地合作,但这表明这里绝对需要合作。因此,让我们探讨一下这两种角色之间的主要区别,以了解紧张感来自哪里,更重要的是如何改善两者之间的工作关系。

有什么区别?

对于那些参与这场辩论的任何一方的人来说,数据工程师将数据科学家视为不知道如何编程的牛仔编码员并不罕见,而数据科学家认为数据工程师是花费太长时间来构建数据管道并且不理解业务逻辑的开发人员。两者的区别在于他们的背景、经历和动机所形成的观点冲突。

背景

数据科学家大多来自商业背景,而数据工程师大多来自计算机科学背景。我相信学科的选择仅仅代表了他们已经是谁,所以尽管毫无疑问,这两个学科经历了不同的课程,但这不是形成两种不同观点的原因。在数据科学成为一个独立的学位之前,工作数据科学家来自统计学、经济学、精算学和其他专注于使用数学解决现实世界问题的定量领域。另一方面,在数据工程成为一个独立的主题之前,数据工程师来自软件和数据库开发,他们更关注技术解决方案而不是应用程序。这不是巧合,因为从根本上说,他们是不同的人,有不同的兴趣。然而,现在发生的变化是,随着数据和技术成为大多数公司关注的焦点,这两者紧密合作的压力增加了,从而使它们的差异受到关注。

经验

随着人们一起工作,这些差异被放大了,如果没有对彼此优势的正确理解,这两个学科之间的差距可能会扩大。考虑到学科的不成熟,这个领域的大多数人都没有很多与他人合作的经验。此外,因为这两个角色来自如此不同的背景,很容易期望对方理解你的优势,但这很少发生。

激励

了解如何根据绩效评估角色也很重要。从一个过于简单的角度来看,我们的数据科学家受到激励,最大限度地提高他们的见解或算法能够为企业带来的价值,并鼓励他们不断尝试新的方法和技术。随着时间的推移,这将不可避免地增加解决方案的复杂性,因为在大多数情况下,数据科学家不负责最终系统的可伸缩性和可操作性,所以他们没有动力确保他们的解决方案是可以构建和维护的。另一方面,数据工程师受到激励,以确保系统稳定和可管理,因为他们将确保系统长期按预期运行。这最终鼓励数据工程师降低复杂性,并阻止向系统中添加更改。在那里你可以看到两种不同的视角是如何在两个角色之间制造紧张关系的。

有效的参与模式?

认为目标是消除这种差异是错误的。我们需要这两者之间的张力来构建最佳解决方案,关键是找到一种方法来有效地利用这种张力,而不是让它在团队中引起不必要的摩擦。

清晰定义的界面

职能之间的模糊性是摩擦的来源,改善这种情况的一种方法是在数据科学家和数据工程师之间建立预定义的接口。实际的界限在哪里并不重要,重要的是它们在两个角色之间是一致的。虽然这种方式不鼓励完全协作,但它是减少模糊性的有效方法。通过设置界限,它鼓励每个团队对他们的可交付部分承担所有权和责任,无论是数据管道还是模型训练。这类似于 DevOps 的“您构建它,您运行它”原则,所有权是这里的关键主题,因为为了鼓励人们生产高质量的工作,他们需要在完成工作后负责维护他们的工作。

然而,实现这个策略最困难的部分是定义有意义的边界。数据科学和数据工程的实际界限在哪里?没有一个明确的答案,你可能会看到两个学科之间的界限。为了让这个模型工作,你需要让两个角色达成一致。还存在这样的风险,即每个团队生产出次优的工作,将责任推给另一方,这可能不利于整体的成功。也就是说,这仍然是一个被广泛采用的模式,在许多公司都行之有效。

跨职能团队

另一方面,我们有跨职能模式,在这种模式下,您有一个由学科和实现目标所需的其他职能组成的团队。这是一个更灵活的模型,因为它在团队中没有任何明确定义的角色。这种灵活性在实现新想法时表现得很好,因为需求更加模糊,变化更有可能发生。这种模式非常适合那些对彼此的能力有很好理解的团队,以及一个安全和协作的环境。您将看到这种模式运行良好,因为在没有任何指导的情况下,任务在团队内部被有效地委派。这有助于每个队友了解对方,学会欣赏自己的优势。这种模式通常需要更长的时间才能生效,并且需要团队结构和目标的稳定性,这是许多组织在数据之旅的早期阶段无法提供的。然而,如果操作得当,这种模式可以带来巨大的好处。

我们应该注意到,这只是数据科学家和数据工程师如何合作的两个例子,它们绝不是说明性的。这些参与模型的目的是通过强调每个学科对另一个学科的需求来促进两者之间的合作,并鼓励他们利用彼此的技能。随着技术让协作变得更容易,工作方式将会随着时间的推移而改变,但如果你希望你的团队一起出色地工作,你需要专注于让他们解决你需要他们解决的问题。需要一个强有力的领导者将不同背景的人团结在一起,这一点没有也不会随着时间的推移而改变。

如果您喜欢我的内容,请在 https://jchoi.solutions/subscribe注册更多内容

当每个人都成为“数据专家”时

原文:https://towardsdatascience.com/when-everyone-becomes-the-data-expert-a1c91109b4de?source=collection_archive---------57-----------------------

自助分析时代的人员和流程管理。

图片由 Unsplash 上的新数据服务提供

当我在 90 年代初开始我的开发生涯时,在互联网出现之前(是的,那是很久以前),没有像我们今天这样的数据可视化。相反,我们的“查询”基本上是黑白 DOS 屏幕上列出的信息,或者是用噪音很大的点阵打印机打印的信息,要花很长时间才能完成。只是在几年后,当我被介绍并发现“数据透视表”的力量时,我对数据可视化的兴趣才显示出第一个火花。剩下的就是历史了;如你所知,我们现在可以很舒服地看到我们的数据以我们愿意想象的任何形状或形式出现。只要我们检查数据模型、定义和集成等,就没有什么能阻止我们发现我们一直在寻找的趋势或能促进我们销售的功能/元素。

如果你没算错,你现在应该知道我在 IT 行业已经工作了 30 年,并且很高兴看到信息可视化发展到今天的样子。我很高兴越来越多的公司开始着手建立自助式数据分析。借助 PowerBI、Tableau 和 Metabase 等商业智能工具。然而,这个自我服务的新时代让我强调它伴随着责任;因此,是什么促使我写这篇文章。

通常,数据堆栈和模型、集成等等。并不总是完全符合标准。这可能来自几个原因;

  • 公司实际上经常淹没在自己生成的以及来自第三方应用和平台的数据中。
  • 数据团队缺乏更新文档的纪律和管理
  • (这很常见)我们没有给予数据治理和文档足够的重视
  • 好的数据工程师和科学家很难找到
  • 没有建立系统请求管道来给数据/商业智能团队他们迫切需要的时间来做所有必要的文档和检查。
  • 数据/商业智能团队经常人手不足
  • 最后但并非最不重要的一点是——“我需要这份报告,尽快放下你正在做的一切” 这种请求成为常态而不是例外。

时间、纪律和优先顺序是最重要的,以确保他们记录、测试和验证了他们提供给团队的表格。定期维护的数据定义、跟踪计划和验证检查是确保报告提供一致结果的关键,无论是谁创建的报告。

如果没有围绕您的数据的既定政策和治理,您最终会与使用旧的不一致的模型的人在一起,并与他们一起创建他们自己的仪表板-一场灾难即将发生。这体现在人们身上,随后引用与“官方”不同的数字。

然后事情发生了,突然之间每个人都变成了数据‘专家’,而且通常情况下,你的数据团队最终会花更多的时间来维护他们的仪表盘和数字,而不是其他任何东西。

当你知道你有问题的时候。

有几个“红灯”需要注意,我列出了几个来识别一些警示信号。

你知道你有一个问题,当:

  • 您有数百个新旧仪表板和报告,它们来自不同的数据源,不一定经过验证和确认
  • (我最喜欢的)首席执行官更喜欢“他自己”版本的收入报告,他自豪地把自己放在一起,只“相信”那份报告,因为…他自己做的🤓
  • 销售部的乔·布洛格斯引用了他自己的非官方销售数字
  • 在您的组织中,关键数据元素有不同的定义,它们各自在仪表板上的值与自制的值不一致。

有希望!

您能做些什么来确保数据质量和一致性?

  1. 给你的数据团队时间和空间来记录他们的工作。
  2. 建立“数据管道”,以便对数据请求进行优先排序和管理。
  3. 禁用尽可能多的旧报告和仪表板,当有人叫嚷要重新启用他们的报告时,只有在您对其进行了验证之后。
  4. 清理您的表并创建经过测试和验证的主表。
  5. 设置和维护您的数据定义,并确保每个人都可以访问它们,并且它们简单明了,任何人都可以理解。
  6. 建立“主仪表板,每个人都可以参与并理解这是每个人活动的焦点,测试它,验证它,并从那里开始。所有其他仪表板都应该指向并对应于主仪表板。

了解一个人需要一个人。

稍微坦白一下,因为我已经在 3 个国家管理数据和信息团队多年,所以我没有犯过这么多错误。从那些我已经指出的一些,我已经亲身经历过,也承认有时是罪魁祸首。所以,是的,这需要一个人去了解一个人,如果错误是造成一个人的原因,这可能使我有资格成为一个专家。虽然我很感激我有机会与不同的文化、人才和技能一起工作,但我直接知道事情并不总是像我们希望的那样简单。

专家是在一个狭窄的领域里犯了所有可能犯的错误的人。—尼尔斯·玻尔

总之,管理您自封的数据专家。

我希望你从这里学到的是,你的数据/BI 团队(我承认我可能有偏见,但我确实相信这一点)是你组织中最重要的部分之一。他们可以成就或摧毁一家企业,因为你的数据及其质量取决于他们,要在这个时代生存,你需要做出更多由数据驱动的决策,而不是像 Joe Blogg 所说的决策。要做到这一点,你需要你的信息准确、一致,并以一种与你的客户及其对你的产品/服务的行为相关的方式组织起来。

总而言之,要警惕自封的数据专家及其对你业务的影响。确保您的数据/商业智能团队是唯一的数据专家,支持他们,赋予他们权力,优先处理所有工作,并观察您的业务增长。

欢迎评论和反馈。

给我一行 rosi.bremec@gmail.com,DM 或评论

https://www.linkedin.com】最初发表于

当难以解释小企业如何从大数据中受益时

原文:https://towardsdatascience.com/when-its-difficult-to-explain-how-small-businesses-can-benefit-from-big-data-731a09d7dacb?source=collection_archive---------57-----------------------

小型企业| INSTAGRAM |分析

我最终创建了一个非常简单的 Instagram 分析工具供他们使用,你可以在这里试试

照片由Unsplash

You can try "a very simple Instagram analytics" [**here**](/when-its-difficult-to-explain-how-small-businesses-can-benefit-from-big-data-731a09d7dacb#66ef)**.**

一点背景为了让背景变得清晰,我在一家初创媒体公司做产品分析师,之前做过两年数据分析师。在这个疫情,我的雇主没有强迫我来办公室。我没有像他们建议的那样在家工作,而是去了我的伴侣居住的另一个城市。在那里,我的合作伙伴与独立出版商和在线书商社区的我见了面。

“你能为这个社区举行一次关于大数据的会议吗?”

我没有马上答应。之前在校园活动的时候,我是大数据实验室助理,帮助讲师给其他同学上课。我曾经为一个政府机构做过情绪分析的培训。实际上,教书对我来说并不可怕。但是,我想这一次我面对的是一个完全不同的观众:这个群体不是任何人,他们是书籍爱好者,虔诚的读者,在我的国家的知识和文化发展中发挥着重要作用。此外,他们中的许多人对数据和信息技术不太熟悉。

上课前,我会见了他们中的一些人,了解他们到底需要什么。他们对数据做了什么,以及他们的商业策略。

大多数书商在社交媒体和在线市场上做生意。营销工作在社交媒体上进行,进一步的交易通过在 WhatsApp 上聊天进行。有些人已经建立了自己的网站。然后我问他们如何存储数据,包括客户数据和交易数据。

正如我在这个对话发生之前所想象的那样,他们大多数都是用 Excel 手动完成的。而且不应该忘记,虽然不是全部,但大多数小企业只有一两个擅长使用 Excel 的人。记忆函数、旋转和可视化数据。只有一家企业使用 POS 服务,而且费用很高。

我与他们讨论了通过在线市场销售时存在的障碍。他们与同样在市场上销售的原书出版商(通常是大型出版商)展开了一场折扣战。比方说,这些朋友提供了 15%的折扣,并在社交媒体上为该页面做广告。许多人访问了这个网页。但是,交易并不多。发生这种情况是因为原始出版商给出了更高的折扣,并且原始出版商的页面作为市场推荐的产品出现在卖方的页面上。最初的出版商是吃水果的人,尽管他们不必为广告付费。

在与这个社区的独立出版商讨论时,他们会问如何利用大数据进行市场调查,寻找有能力的新作家,以及如何预测什么样的书会有需求,会卖得好。

经过漫长的讨论,我留给自己一个大问题,“当财务和技术能力有限时,是否有必要举办一次大数据介绍会?小企业的大数据 5 V 等概念?那不是太抽象不切实际了吗?”

我可能是错的,或者仍然缺乏能够为小型企业解释大数据问题的经验。但我知道的事实是,存在的数据量确实很大,可以很快获得,数据类型多种多样。但所有这些都属于其他人,尤其是大公司:很少有人能轻松、廉价地获得。

从那时起,我决定不再过多关注大数据的宏伟概念,而是更加重视如何使他们迄今为止拥有的数据更加有用,并提出了一些更好地收集、组织和分析数据的方法。

存储数据

布莱克·维斯兹在 Unsplash 上的照片

我之前跟你说过,他们大多用 Excel。社交媒体管理员必须将社交媒体聊天中出现的图书订单改写成表格。除了交易细节之外,从社交媒体获得的数据还有客户数据,如姓名、地址、电话号码,有时还有性别。奖金是关于顾客询问但缺货的书籍的数据。

关于这个问题,我的主要任务是提供一个想法,如何使这个过程更容易,并使数据存储在一个更有组织的方式。

遗憾的是,在这一点上,我无法就如何简化和自动化记录保存流程以减少人工工作提供具体答案。(如果这篇文章的读者对此有什么建议,将会很有帮助。)

但是对于数据存储的问题,我建议与其保存到几个 excel 文件中,不如用数据库。我当时能想到的最简单最便宜的方法就是使用类似开源销售点这样的产品,或者类似 WooCommerce 这样他们更熟悉的平台。这两个例子都可以很容易地托管在一台有本地网络的计算机上,如果需要,也可以托管在互联网上。这些平台适合存储订单数据、交易、客户信息、仓库中可用商品的库存或存货,甚至收入和收益。

统计思维和数据分析技术

照片由艾萨克·史密斯Unsplash 拍摄

这些年来,我明白了提出正确的问题、决定衡量什么、提取见解和建议行动是数据分析师的主要任务。一般来说,它可以归结为创建和管理仪表板,以监控业务绩效并对问题进行深入分析。我给他们举了一个好的公司月报是什么样子的例子,只是让他们简单了解一下数据分析师是做什么的。

在谈论大数据之前,我强调如何分析我们已经拥有的数据的重要性。我要求他们从统计学角度思考。

我解释了如何从多个角度查看数据。如果数据有时间维度,那么可以用折线图来直观显示趋势,例如,过去三年的销售趋势。从可视化中,可以看到三年中是否有某些时间具有类似的趋势,以便他们可以知道,例如,哪个月的销售额往往很高。在他们掌握的数据中,还有买家所在城市和省份的维度。结合时间维度,我们可以看到各地区的趋势如何。最近三年销量最高的地区实际上可能在下降,其他地区在上升。

从图书销售数据的例子中,我们还可以看到小说或非小说类图书的销售百分比。从更深的层面来说,哪些类型的非小说畅销?历史、传记、散文集还是哲学?我们可以再次看到每种类型的趋势。

他们的数据也可以通过检查,例如,五个最畅销的地区,并按性别和年龄,然后按书籍类型进行划分来进行分析。通过看年龄识别买家,他们是工人还是学生?通过这种方式,我们可以了解特定年龄段的人对什么类型的电影感兴趣。也可能是作者或出版商。或者像书的厚度和重量这样的物理东西,因为,嘿,那会影响运输成本!

我在 Allan Rossman 的博客上找到了一个关于为什么我们应该在更详细的维度上检查数据的完美参考。

销售数据也可以通过进行市场篮分析来分析。这种分析可以帮助书商确定捆绑促销。这可以用来赢得折扣战。这里有一个有用的参考

回到大数据

Icons8 团队Unsplash 上的照片

数据随处可得,但简单地检索数据需要一点技巧。

在讨论中,出版商意识到印度尼西亚东部的市场正在增长。他们想知道哪些地区的阅读兴趣高,那里的教育水平如何。这些数据由政府的 API 提供。所以这不是一个简单的。 xlsx 或者。 csv 文件。这只是大多数人无法获得数据的一个例子。

我告诉他们,我们需要一种技能来创建一个可以提取数据的程序。我还演示了如何创建一个简单的程序来获取 R 的数据并为他们可视化。

接下来是关于营销的更具体的问题:

“作为一名社交媒体管理员,我如何才能看到竞争对手在发布什么,以及他们的参与度如何?当然,如果我们不必一个个打开他们的个人资料,记录他们的关注者和他们帖子上的赞数和评论数,这也很有趣。”

有很多很好的工具可以做到这一点。但是要查看几个账户并进行比较,需要用户付费。由于财政能力有限,现有数据也不容易获取。

一个非常简单的 Instagram 分析工具

我不想破坏人们对数据有用性的想象。因此,我创建了一个简单的工具来解决关于竞争对手研究的问题。

一个非常简单的 Instagram 分析

顾名思义,它确实非常简单。但至少这个工具可以更容易地分析你的业务档案的表现,并将其与竞争对手的档案进行比较。还可以帮助了解所选配置文件的最近帖子的性能如何。

如果嵌入效果不好,你可以在这里访问它

结论

这个社区的整个过程为我举办知识分享会提供了很好的经验和教训。如果我要再做一次,下面是我应该做的一些事情:

  • 研究参与者的业务需求和技术能力。理解这一点至关重要,这样我们分享的知识和经验才能真正让他们受益。
  • 意识到参与者的局限性,无论是技术上的还是经济上的。小心很重要。对不熟悉该领域的人谈论编码,谈论小型企业昂贵的技术基础设施,会让会议变得乏味。在极端情况下,人们甚至会对数据产生反感,并不指望自己会变得伟大。
  • 使用与参与者正在做的事情相近的案例研究示例。这有助于使材料更容易消化,并使会议更具互动性。
  • 不要忘记这样一种可能性,即使不是全部,一些参与者也是主题专家。我们可能擅长处理和分析数据。正是他们可能从里到外认识到他们的业务。
  • 如果可能的话,送他们小礼物。在学习了两周 JavaScript 之后,我开始构建一个简单的 Instagram 工具。

这就把我带到了这篇文章的结尾。我在解释大数据的好处方面可能不太成功,但希望它可以为小企业提供一个数据好处的例子。

当机器学习和物理学发生碰撞时

原文:https://towardsdatascience.com/when-machine-learning-and-physics-collide-96d983f4a567?source=collection_archive---------55-----------------------

学习机

用基于图形网络的模拟器模拟真实世界的物理

彼得·巴塔格利亚的模型演示(来源)

前阵子在浏览 arXiv 最近在机器学习方面的论文投稿,偶然发现一个有趣的标题。

学习用图形网络模拟复杂物理

我决定更深入地研究它,并发现作者成功地结合并使用了几个机器学习模型来创建一个名为“基于图形网络的模拟器”(GNS)的框架。

正如你在上面的图像中看到的,预测的水粒子运动设法表现得与地面真实情况相似。对于不同的起始条件和其他颗粒,如粘性物质和沙子,它也产生了可比较的结果。

与现有的需要对起始条件的任何变化进行重新渲染的模拟相反,该模型只需要训练一次,并且可以成功地预测粒子在不同条件下的行为。

下面是我对他们如何做的一个非常简单的解释。

GNS 框架的架构(来源)

GNS 框架由三个主要模块组成:编码器、处理器和解码器。

编码器

编码器将基于每个粒子的当前位置构建初始图。粒子将作为图中的节点。同时,将在某个连接半径内的相邻节点之间构建边。

在下一个和每个时间步,将使用最近邻算法重构图的边。

输入向量由以下内容组成:

  • 粒子的位置
  • 粒子以前的速度(5 倍步)
  • 材料属性(水、沙、粘性物质等。)

处理器

处理器通过边在节点之间传递“消息”。这是模型学习的部分。有 M 个图形网络(GN)用于学习(并最终预测)粒子之间的相互作用。

在物理学中,这些相互作用应该是粒子之间能量和动量的交换。在该论文中,对这些相互作用建模的任务被交给 M GNs 栈。

解码器

解码器的任务是从图中提取信息,特别是每个节点的位置。然而,解码器并不输出每个粒子的坐标。

输出是该时间步中每个粒子的平均加速度。

一旦你有了每个粒子的平均加速度的信息,你就可以计算每个粒子的速度和最终位置。

如果我们回头看看编码器的输入,当前位置和速度以及 5 个先前的速度将用于计算下一个时间步长的平均加速度。

就像普通的神经网络一样,这个过程重复 t 时间步长。

为了可视化模拟结果,关于每个粒子位置的信息用于在每个时间步长上绘制粒子。

显然,对于所有三个模块(编码器、处理器和解码器),作者简单地使用了多层感知器(MLP ),具有 2 个隐藏层(ReLU)和 1 个输出层(无激活功能),每个都有 128 个节点。

最让我惊讶的是,看似简单的神经网络结构,由两层 MLP 和 ReLU 以及最近邻算法组成,却能捕捉看似复杂的交互。

不同材料和约束条件下 GNS 的模拟结果(来源

上图描绘了不同的起始条件(a-h)以及几个时间步后预测和地面实况的结果。

  • (a)显示了粘性颗粒的相互作用
  • (b)显示了水粒子的相互作用
  • (c)显示了沙粒的相互作用
  • (d)显示粒子与刚性障碍物的相互作用
  • (e)显示不同粒子之间的相互作用
  • (f)显示模型如何处理比训练中多得多的粒子
  • (g)显示与看不见的物体的相互作用
  • (h)显示对较大领域的概括

我们的主要发现是,我们的 GNS 模型可以学习不同流体、可变形和刚性固体的精确、高分辨率、长期模拟,它可以超越训练,推广到更长、更大和更具挑战性的环境(来源)

作者还表示,GNS 模型可以很好地处理一般化。在图(f)中,该模型可以处理多达 28k 个粒子的相互作用,这是他们在训练中使用的 2.5k 个粒子的 10 倍以上。

图(g)显示了该模型还可以处理各种材料的相互作用,同时在每个时间步中有连续的水流入。

最后但同样重要的是,图(h)显示了 5000 步后的模拟状态,比用于训练的步数多 8 倍,其中 85k 个粒子位于比模型训练区域大 32 倍的区域中。

你可以在这里看到更多由模型生成的例子。

他们还包括一些失败案例,在这些案例中,实体可能会在更长的模拟时间内变形,粘性颗粒有时会粘在墙上而不是落下。

在当前状态下,该模型可能无法 100%准确地完全取代粒子模拟的手动渲染。然而,它已经成功地正确模拟了大部分物理现象。一个可以实现近乎完美模拟的模型可能就在不远的将来。

物理模拟领域可能不像自然语言处理或计算机视觉等机器学习领域那样受欢迎。然而,想象一下如果这个模型可以取代现有的粒子模拟,它将带来的影响。

当前的粒子模拟需要很长时间来创建,因为它手动计算每个时间步长上每个粒子的状态。如果你仅仅移动了一个粒子,你就需要重新计算所有的东西。

另一方面,机器学习模型只会在训练阶段花费大量时间进行处理。一旦模型被训练,通过简单地在模型中传递信息就可以创建模拟。这个过程需要更少的计算能力,因为它比当前的粒子模拟简单得多。

这可能节省了未来粒子模拟所需的大量能量,因为该模型只需要训练一次,并且可以重新使用运行非机器学习驱动的物理模拟所需的一小部分能量。

参考

[1] Sanchez-Gonzalez 等,学习用图网络模拟复杂物理 (2020),arXiv:2002.09405【cs .LG]

学习机是一系列关于机器学习世界中发生的事情的故事,我觉得很有趣,可以分享一下。哦,有时也是关于机器学习的基础。关注我,定期获取新故事的更新。

[## 里奥纳尔迪·钱德拉塞塔—培养基

数据科学家。我写的是 DS & ML。有时候。

chandraseta.medium.com](http://chandraseta.medium.com/membership)

当机器学习训练你时

原文:https://towardsdatascience.com/when-machine-learning-trains-you-2345871c87e?source=collection_archive---------44-----------------------

从个人经历到经验教训

Unsplash 上的 Element5 数码拍摄

神经网屋

20 世纪 90 年代初,一位教授带我们几个人参观了他的房子。他专攻“神经网络”。(是的,即使那样。)他用“神经网络”控制他的房子。(是的,即使那样。)旅游期间的主要(也是唯一)话题——你猜对了——是“神经网络”。(房子只是背景。)

这次访问给我印象最深的是神经网络如何训练他的故事。事情是这样的。神经网络被训练学习的一项任务是自动设置恒温器。具体来说,既要让教授感到舒适,又要降低取暖费。更正式地,自适应地优化捕获两个竞争项的损失函数:1。(最小化)加热(或冷却)成本和 2。(最大化)教授的舒适度。

神经网络想出了一个有趣的方法来做到这一点。(故事大概是这样的。)考虑冬季。如果你不注意恒温器的设置,取暖费可能会很高。最初,神经网络学会了偏爱“舒适”。据推测,教授的反馈将它推向了这个方向。(不确定如何向一个神经网络抱怨太冷,但那些都是细节。嗯,也许这些天你向 Alexa 抱怨。)神经网络逐渐降低了温度。取暖费持续下降。教授适应了(习惯了)。

似乎神经网络已经(实际上)发现,人类可以习惯于逐渐降低不适程度(即,过一段时间后,他们会停止抱怨),而成本在这个过程中不断降低。

后来考虑到这一点,我确实思考了神经网络功能是否增加了房子的转售价值。但话说回来,你真的会为让一个智能神经网络让你习惯于逐渐增加不适程度的额外好处支付额外费用吗?

语音识别

20 世纪 90 年代中期,我决定尝试一下语音识别软件。我当时购买了一个知名商业软件的副本,安装在我的 Windows 电脑上。(是的,Windows 在那时就已经存在了。)我的意图是用它来记录和转录语音笔记,以后我会编辑这些笔记以避免偶尔的错误。有道理。原则上。

在实践中不太管用。我喜欢认为我的英语说得很好,我一生都是这样认为的。毫无疑问,还有改进的余地。没多久软件就指点了哪里!我会在下一段详细说明。

在我使用这个软件的早期阶段,它要求我训练我的口语。很公平。在这些训练中,它犯了几个错误。它建议我重新训练它说错的单词。再说一遍,很公平。然而,这一拖就是一个月。一周几个小时。虽然该软件识别我声音的准确性确实有所提高,但没有我希望的那么高,与我投入的训练努力相当。

在这个月的过程中,我开始意识到不是我在训练软件,而是软件在训练我!为了提高我的英语口语能力……(嗯,实际上我们都在学习。)

尽管如此,我还是觉得这个软件在暗示我在其中的角色很关键。你只是说得更好,它似乎在说——剩下的交给我。

什么?嗯,好吧,在某种程度上是公平的。当软件重复犯同样的错误,并不断暗示“如果我能说得更好就好了”,我觉得受够了。“它就在眼前”这种一厢情愿的想法你还能坚持多久?

那时我放弃了。我没想到会这样。这确实让我想知道,除了目前的目标市场之外,该软件是否应该以帮助人们更好地学习英语为卖点。

吸取的教训

这些仅仅是有趣的插曲吗?还是有更重要的教训需要吸取?从数据科学的角度来看,我将这两种情况下发生的事情描述为主动合作 - 学习。也就是说,人类和 ML 都学会了。(在神经恒温器的例子中,教授了解了他自己对不适的习惯。)

也就是说,学习肯定是由 ML 引导的。它控制着它希望人类关注的东西。(这在语音识别案例中最为明显,我们将在下一段中讨论。)嗯,我想这就是主动学习的意思。

让我们更深入地研究语音识别案例。最初的训练发现了 ML 出错的单词。它有理由认为我说得不够好。很公平。所以实际上,它要求我把这些单词说得更好。再说一遍,很公平。某种程度的主动学习是可以的。当它走得太远时,也就是说,当你付出了很多努力却没有得到你期望的回报时,它就开始成为一个问题。

好了,现在我们已经通过给它一个深奥的名字主动学习来使这个过程合法化,让我们思考一下这可能有助于哪些其他用例。简而言之,我的预感是,它们可能无处不在,即在监督机器学习适用的所有不同领域。

好吧,让我们挑选几个细节来检查一下。(我们已经看过两个了。下面还有两个。)

自动驾驶汽车。如果你的自动驾驶汽车可以对你说类似“我在山路上开车有困难,所以你可以带我去(练习)一下吗?”这样的话,那就太酷了。(“合作”部分如下:也许你也因此在这种环境下提高了你的驾驶技术。)

医学影像。ML 在识别特定医学图像中的病理时有困难。它会请放射科医生来看看。这可能不仅有助于医学博士,也有助于放射科医师提高他们的医学图像分析技能。

当混合效应(分层)模型失败时:汇集和不确定性

原文:https://towardsdatascience.com/when-mixed-effects-hierarchical-models-fail-pooling-and-uncertainty-77e667823ae8?source=collection_archive---------13-----------------------

一个直观和可视化的指南,介绍部分池化变得麻烦的情况,贝叶斯方法可以帮助量化不确定性

国家癌症研究所Unsplash 上拍摄的照片

在这篇文章中,我提供了一个直观的,可视化的混合效果(层次)模型的基础,以及“池”的概念和应用实例。如果您对在R/Python中实现贝叶斯层次模型感兴趣,我已经在后续文章 中发布了 分步指南。

这个世界充满了嵌套(分组)结构,我们经常强加这种结构来简化我们对世界的理解。你从小就接触过这些嵌套结构(不管你有没有意识到)。例如,在地理类中,国家嵌套在大陆或地区内,州嵌套在国家内。同样,你可以想到团队中的玩家,区域中的客户,甚至大学中的部门。

鉴于我们倾向于构建世界的本质,我们通常会在分析中遇到具有嵌套结构的数据集(即作为组成员的观察)。

混合效应模型是回归模型的简单扩展,它考虑了群体成员对感兴趣结果的影响。

就像任何广泛使用的跨学科方法一样,人们无法就一个通用名称达成一致。这些模型被称为“混合模型”、“分级模型”、“多级模型”、“随机效应模型”等。(为什么人们不能在一个名字上达成一致对我来说是个谜。🤷‍♂)

在你想“哦,太好了,另一篇关于线性模型的文章…😒“让我告诉你:是的,这涵盖了线性模型,但不要忽视一个通常被忽视的点——当模型不起作用时,以及这可能产生的后果。

为简单起见,我将重点讨论线性模型,并将在后续出版物中讨论广义混合模型。

一眼

以下是我将介绍的内容

  1. 快速直观、直观地进入线性混合效果建模( 强烈推荐,如果你在 之前没有见过混合模型,否则跳过这一部分,但确保你熟悉它们的分布形式
  2. “池化”的概念以及它如何驱动这种方法的底层机制( 以及动画和营销中的应用示例 )
  3. 一个不希望“汇集”的案例,以及对频繁主义(即非贝叶斯)方法的一些限制的讨论

什么是线性混合模型(LMM)?

以下部分基于[sleepstudy](https://rdrr.io/cran/lme4/man/sleepstudy.html) 数据集的子集。这些数据来自睡眠剥夺研究,其中的观察值是对多个受试者进行的一系列测试中每天睡眠剥夺的平均反应时间。

简单线性回归

想象一下,我们正试图评估睡眠剥夺天数对受试者平均反应时间的影响。我们可以从一个简单的线性模型开始理解这种关系,如下所示

其中对于每次观察i,睡眠剥夺的天数(Days,即独立变量)影响基于β变量的平均反应时间/延迟(react delay,即因变量)。这些 β 参数被称为固定效应,因为它们对于所有观测值(即总体)都是恒定的

请注意,给定的线性回归假设数据是正态分布的,我们也可以将其定义为分布形式。上式可以读作****观测值正态分布,均值β0+β1 天,总体方差σ (因为我们假设所有观测值i方差相同)*

现在,如下所示,睡眠剥夺对每个受试者的影响不同,因此使用一个将所有观察结果分组在一起的模型(称为完全汇集)是没有意义的。

那么,我们怎样才能模拟主体间的差异呢?嗯,我们可以使用各种风格的线性混合效果模型。

1.变截距

我们可能首先要考虑这样一种情况,即受试者有不同的基线,但他们的反应时间增加的速率(斜率)是相同的。在这种情况下,我们扩展了之前的模型,允许截距随主题subj而变化,如下所示

其中,β0 和β1 为 固定/群体效应 (在所有观察中保持不变),而b0,subj随机效应 ,允许截距因受试者而异(即偏离群体截距β0)。这就引出了我们的第一个混合效果模型变截距模型。在分布方面,每个受试者的平均值根据正态分布的b0,subj受试者特定方差 τ _0 而变化。(这就是为什么这个术语被认为是“随机的”)

下图提供了一个这种型号的例子。我们可以看到,它给出了一个确定的拟合,但没有考虑到跨对象的斜率变化。

2.变斜率

现在,如果我们认为每个受试者的反应时间增加不同,那么我们可能想让斜率变化(通过subj)并保持截距固定如下

其中β0 为固定( 群体 )截距,斜率根据β1 ( 固定斜率 ) + b1,subj ( 随机斜率 )变化。这就引出了我们的第二种混合效应模型,一个变斜率模型。在分布方面,根据正态分布的b1,subj*Days受试者特定方差 τ _1,每个受试者的均值不同。

下图提供了该模型的一个示例,我们可以看到它实际上比之前的模型更符合数据。我们能结合这两种方法吗?是的,我们可以。🙂

3.变截距、变斜率

观察上面的图,可以合理地考虑每个受试者的基线反应时间增加率与其他受试者不同的情况。

我们既有斜率和截距固定效应(β0 和β1),也有随机效应(b0,subjb1,subj)。这就引出了我们最后一种混合效应模型,一种变截距、变斜率模型。就分布而言,基于b0,subjb1,subj*Days,每个受试者的平均值不同,但现在这两个受试者特定的随机效应是相关的。因此,方差分量现在是包括斜率和截距方差(τ_22 和截距τ_11)以及它们的协方差(τ_21 和τ_12)的矩阵。

与前两个图相比,我们可以看到,该模型倾向于更紧密地拟合数据,因为它改进了如何解释受试者特定的差异。

请注意,这只是一种混合模型(线性)的直观指南。为了实现这些,您需要理解您正在回答的问题、您的数据,并能够用其他方法仔细评估模型性能/拟合,其中一些方法我将在下一节中介绍。

什么是“联营”?(一个应用实例)

本节是对 Github 中更全面的分析的总结。它使用基于以下 Kaggle 数据集模拟数据。为了简单起见,这个例子是用 R 编写的,但是你也可以在 Github 中找到 Python 的例子。

假设您的公司最近更新了网站,营销部门想知道网站的运行情况。具体来说,他们想知道年轻顾客比老顾客在网站上花多长时间。

为了回答这个问题,你收集了 8 个不同地点(county)的客户“跳出率”(bounce_time,秒)和age,跳出率衡量客户在网站上花费的时间。但是,正如您在下面看到的,您无法在所有位置获得相同数量的观察值(例如,一个位置有 150 个观察值,而另一个位置只有 7 个)。

完全汇集(或简单线性回归)

首先,假设你试图理解bounce_timeage的依赖性,你拟合一个线性模型。但是,在这样做之前,您需要对您的age变量(均值=0,方差=1)进行中心缩放,以提高模型稳定性并简化以后的解释(即截距现在是平均值age)。

该模型被视为完全汇集模型,因为它忽略了县与县之间的差异,并且将所有观察结果视为同一组或池的一部分。因此,它为所有数据估计单一斜率和截距 (β0=200,β1=4.69)。然而,考虑到模型显示缺乏拟合(评估未显示),您想看看在县一级建模差异是否会提高性能。

快速的 EDA 收益使您可以观察到平均bounce_time似乎在不同地点(county)之间有所不同,并且县内的可变性并不是所有地点都相同。因此,简单线性回归的独立性假设不成立。

无池模型(或单独的线性回归)

相反,你可以使用lme4 R 包来拟合每个县的回归线。由此产生的无池模型假设各县之间的客户没有相似之处,并独立考虑每个县。因此,我们估计了 8 个不同的截距和斜率(即每个县一个),如下所示。

这个新模型似乎更适合(未显示),比前一个模型表现更好,并且在视觉上似乎捕捉到了每个群体的趋势。

此外,斜率估计值比以前小得多,这一现象可以通过辛普森悖论来解释(即,在县或组级别估计的趋势可能与全球估计的趋势完全不同)下面的动画展示了完全池化和无池化模型估算之间的变化。

然而,基于一个看似更紧密的匹配就得出无池模式是最好的结论还为时过早。

正如 Gelman 所描述的“完全汇集忽略了[组]之间的差异,而非汇集分析夸大了它[并且]…过度拟合了每个[组]内的数据”。换句话说,这个模型夸大了各县之间的差异,使它们看起来更加不同,而事实上,各县之间的客户似乎(甚至预期)有一些相似之处。

部分汇集模型(或线性混合效应)

为了捕捉各县之间的相似性,您拟合了一个介于两个极端之间的模型(即完全模型和无池模型)。使用 R 的lmer函数,你拟合一个线性混合效应模型,再次估计 8 个不同的斜率和截距。

然而,这些是通过部分汇集估算的,简单来说,结合了来自完全汇集模型的人口(固定)效应和非汇集模型的县特定(随机)效应的信息。

查看摘要输出,您会看到一些有希望的指标。随机截距似乎解释了县与县之间的大部分差异(≈195),但仍有一些总体水平的差异(即残差)。(两者都有表明固定和随机效应都在起作用,如果剩余方差≈0,那么拟合无池模型也是一样好的。)

然而,您注意到来自函数的警告消息,指出模型拟合可能是“奇异的”(上面输出的底部)。您可能会忽略此消息,因为该模型具有良好的拟合性(未显示)并且与无池设置的性能相当。

那么,为什么不用这个模型来回答市场部关于反弹时间的问题呢?

我会告诉你为什么,但首先让我们快速绕道进入部分池

对部分池化的直观探究

部分统筹是混合效应模型强大的本质,我发现人们往往倾向于描述部分统筹的作用,而不是解释它。部分池化代表了完全模式和无池化模式之间的一种折衷。让我们探索一下这意味着什么。

首先,左边的动画(下图)提供了一个实时例子为什么部分池是一种“妥协”我们可以看到斜率和截距估计值在我们刚刚讨论的三个模型中是如何变化的。采用部分混合法时,具体县(无混合法)的估计值将用于人口(完全混合法)的估计值。但是,为什么有些估计值比其他的变化大?

我们可以用右边的一组方程式来回答这个问题,这组方程式的颜色编码与左边的动画相匹配。简单地说,部分合并估计值(蓝色)是完全合并模型(红色)和非合并模型(绿色)的加权平均值,其中权重由方差和组样本大小定义。(注意:这些等式取自一个稍微简单的例子,并不是在上述模型中计算出的精确等式。)

人们称群体为“携带”或多或少信息的群体,是基于群体样本大小和/或这个等式中方差的影响。例如,在样本量较小的县n_j(即n_j -> 0)中,我们看到左边的项权重变小。因此,估计值被拉至或【缩小】更接近总体平均值,这是有益的,因为我们通常不希望用很少的数据点来估计参数。对于样本量较大的群体来说,这种效应是相反的——我们对这些数据中群体水平效应的估计更有信心。

从本质上说,我们看到的是较小的群体从较大的群体“借用信息”,并使他们的估计值向总体值缩小。

当部分集中出现问题时

让我们回到网站跳出率的例子。

鉴于您对手头问题的深刻(或新开发的)理解,以及在这种情况下部分池化如何能够导致更好的估计,您选择混合效应模型来回答年龄如何影响跨县的跳出率。部分合并似乎已经“缩小”了预期的估计值和置信区间(见下文)。请注意斜率估计的一些有趣之处——置信区间几乎消失了!这怎么可能呢?发生了什么事?

1.消失置信区间

还记得我之前提到的“奇异适合”警告吗?好吧,那已经发生了。简单地说,这个警告告诉我们,模型太复杂,数据无法支持。在我们的案例中,在样本规模较小的县中,随机截距是大部分可变性的原因,因此当我们尝试拟合特定于县的斜率时,没有足够的信息来完成这项工作。

我们可以简化我们的模型,去掉随机斜率,但是如果我们认为特定于县的斜率可能有一些优点呢?我们可以使用贝叶斯方法包括这两个组件(见下一节)。

2.意外收缩(警示故事)

在继续之前,重要的是要记住一个重要的教训,即部分集中/收缩可能会导致意想不到的后果。2016 年 George et al. 研究表明,部分统筹会导致较小医院的预测死亡率被人为压低。如下图所示,对于床位较少的医院(x 轴),预测死亡率(y 轴)被“人为缩小”。也就是说,该模型系统地降低了小医院中观察到的(较高的)死亡率。在这种情况下,从一个标准的混合效应模型的部分汇集有潜在的噩梦般的公共卫生和法律后果。这种对观察到的死亡率的低估可能会影响以后的病人。😱

改编自乔治等人(美国统计局,2016 年)

在他们的论文中,乔治等人提供了混合效应模型的扩展,有助于限制部分统筹的不良影响。

贝氏拯救

如果你不太熟悉贝叶斯推理,我推荐 Aerin Kim惊人文章

此外,假设拟合贝叶斯模型本身就是一个对话(例如,选择先验、诊断等。)本节将只关注结果。未来的文章将更详细地讨论贝叶斯拟合。

贝叶斯混合效应方法是更常用的频率主义方法(如上)的有力替代。特别是,他们能够在估计群体水平的影响时考虑不确定性,并在弱信息先验的帮助下,为样本量较小的群体提供稳定的估计。

让我们想象一下,你最近了解到贝叶斯方法可以帮助你处理模型中的“奇异拟合”问题。另外,你从一个同事那里听说有一个很棒的 R 包(brms)包,它提供了一个易于使用的公式构建器来拟合带有stan的贝叶斯混合模型。在选择了你的先验后(在以后的文章中会涉及到),你可以像以前一样使用相同的混合效果模型。

这个新模型似乎有一个很好的拟合(未显示)和后验预测检查给你的估计和相关误差的信心。更重要的是,您会注意到埃塞克斯、肯特、伦敦和诺福克斜率的 95%可信区间包含 0(即这些斜率实际上有可能为零)。

从视觉上,你可以看到每个县的趋势线的后验图()似乎符合数据,这种新方法在 RMSE 方面对模型的性能()有微小的改进。

最重要的是,您的估计仍然利用部分池,但这次没有我们前面看到的消失误差界限。这是因为你通过你的弱信息前科引入了“信息”。这是贝叶斯推理的核心思想,它将观察到的数据中的信息与指定的先验分布(我们通常可以认为是基线估计)中的信息相结合。后验估计在理论上总是可能的(不像我们的“奇异拟合”例子),但是在数据不足的情况下,这些估计默认与我们的先验相似。

最后,我不是说贝叶斯主义者>常客,或者你应该放下一切,成为贝叶斯主义者。在任何情况下,你选择的方法都应该反映出你对手头问题的理解。在这里,我拟合了一个贝叶斯模型来帮助说明它是如何帮助处理消失误差界限的。然而,我可以简化这个模型(见上面的rintercept_only RMSE 表格)。这完全取决于你想回答什么问题。

结论

以下是一些需要考虑的最终想法

  1. 混合效应模型是帮助我们解释数据中复杂的嵌套结构的强大方法
  2. 请记住,根据具体情况/问题部分共用可能会伤害你而不是帮助你****
  3. 在适当的时候考虑使用贝叶斯框架 ( 我将在下一篇文章中详细介绍这一点)

参考

  1. 吉尔曼,安德鲁和珍妮弗·希尔。使用回归和多级/分层模型的数据分析。剑桥:剑桥大学出版社,2007。打印。**
  2. 安德鲁·吉尔曼。"多级(层次)建模:它能做什么和不能做什么."48.3(2006):432–435。
  3. 盖布里、乔纳等人,《贝叶斯工作流程中的可视化》英国皇家统计学会杂志:A 辑(社会中的统计)182.2(2019):389–402。**
  4. BRMS。https://paul-buerkner.github.io/brms/

如果你喜欢这篇文章,请随意分享!如果您有任何问题或看到任何不正确/有问题的内容,请发表评论或发表推文( @ecoronado92 )。

我要特别感谢金·罗奇不辞辛苦地帮我校对这篇文章。

本文中使用的所有代码和笔记都可以在这里找到

*** [## ecoronado 92/走向 _ 数据 _ 科学

Repo 包含实现贝叶斯和频率分层模型的基础材料和例子…

github.com](https://github.com/ecoronado92/towards_data_science/tree/master/hierarchical_models/foundations) [## R/Python 中线性混合模型(LMM)的贝叶斯方法

实现这些比你想象的要简单

towardsdatascience.com](/a-bayesian-approach-to-linear-mixed-models-lmm-in-r-python-b2f1378c3ac8) [## 在 R/Python 中评估贝叶斯混合模型

了解“后验预测检查”的含义以及如何直观地评估模型性能

towardsdatascience.com](/evaluating-bayesian-mixed-models-in-r-python-27d344a03016)***

何时不使用数据科学

原文:https://towardsdatascience.com/when-not-to-use-data-science-f2e42a3a77d3?source=collection_archive---------54-----------------------

意见

数据科学不占优势的例子。

安德里亚斯·克拉森在Unsplash【1】上拍摄的照片。

目录

  1. 介绍
  2. 例子
  3. 何时应该使用数据科学
  4. 摘要
  5. 参考

介绍

数据科学和机器学习都是有用的领域,它们应用多种工具来预测、建议、分类并最终解决常见的业务问题。您可以创建高度精确的模型,将以前的手动任务自动化。数据科学非常强大,可以为公司节省资金和时间。然而,你会发现你不一定需要数据科学来解决你遇到的每一个问题。在某些情况下,人工干预更重要,或者情况不允许通用模型。

我将描述何时不使用数据科学的四个例子。作为一名数据科学家,我发现随着时间的推移,我已经慢慢了解或体验到数据科学和机器学习不是必需的。我希望我能为你和你未来的处境提供一些启示和直觉。

例子

关于何时使用数据科学,何时不使用数据科学,有几个例子。以下是我想到的一些不需要数据科学模型的情况,这些情况可能会使情况变得更糟:

如果这个模型预测不正确,会有什么后果?

然而,数据科学、机器学习和人工智能正在不断发展,你可以期待很快看到新兴技术和模型准确性的改进。

  • 当你没有足够的数据时

这个例子比较常见。当您生成模型时,您希望确保您有足够的数据。可能会出现坏数据输入和坏模型输出,同样,如果没有足够的数据,也会产生坏模型。该模型甚至可能表现良好,但它不会很好地推广到新的情况。您可能会过度适应,或者只是没有将环境暴露给足够多的可能的训练数据实例。在你建立一个模型以及在开发和资源上花费时间之前,先检查你是否有足够的数据。

  • 一次性任务时

这个例子更依赖于具体的情况。您可能会被公司中的非技术利益相关者或领导者要求执行数据科学模型,也许您应该问问自己数据科学是否有必要。

—如果您不是每天、每周甚至每月都输出结果,您可能不想花费时间或创建一个复杂的模型来整合接收新数据的计划。

您可以应用类似的技巧来回答这个业务问题,并向利益相关者建议,例如,因为您只需要一个输出的 CSV 文件,所以您可以用一个简单的 Python 函数来回答这个问题(您可能不需要与您的利益相关者深入探讨为什么您不打算使用数据科学模型,因为一些利益相关者只是想要一个输出的结果,并不关心您是如何得到它的)。您可能只需要一个手动模仿数据科学模型主题的小函数。如果您非常了解这种情况,您可以自己创建容器或权重,并将其应用于特征或列,得出您自己的分数。以下是我描述的一个例子:

***Example:******.50*(feature_1) + .20*(feature_2) + .30(feature_3) = score (scaled)***

虽然这可能不是最准确的,但是如果你需要一种快速的方法来组织数据,像这样的函数或者类似的函数就足够了。

  • 没有标记数据时

有时,您可能会遇到这样的情况:您想要对成千上万的观察值进行分类,但是您的数据集中有太多未标记的数据。有办法解决这个问题,如标签软件或无监督技术来创建新的标签。但是,如果您发现使用人工或其他软件服务来标记花费了太多的时间和金钱,那么您可能需要重新评估这种情况。也许在实现数据科学模型之前,您需要执行更多的数据工程技术,比如访问 API。

  • 预算紧张时

根据您接收和预测的数据量,训练模型可能会很昂贵。您的公司可能还没有足够的资源,昂贵的数据科学模型也不可行。

当你没有足够的时间时,这一点也与一致。您可能有一个即将到来的截止日期,除了数据科学之外,还有一些方法是有益的,比如 Python 函数和规则。**

何时应该使用数据科学

有无数的情况下,你应该使用数据科学和机器学习。本质上,你可以翻转上面的例子,或者看看当你应该使用数据科学时,你是否有一个无监督的,监督的,时间序列等情况。

您也可以应用上面的示例,但是也可以结合数据科学技术和手动流程。人在回路作为这两种实践之间的桥梁变得越来越普遍。

何时使用数据科学的一些具体示例包括但不限于:

  • 向用户推荐电影
  • 预测一家公司的销售额
  • 分析评论的情感
  • 预测给定月份的温度
  • 等。

何时不使用数据科学的例子并不是阻止你使用数据科学,而是强调“的重要性,因为你可以,并不意味着你应该。最终,这取决于您的具体情况以及输出会影响什么。因此,在给定的特定环境下,每个示例都可以被反驳为数据科学的用例。

摘要

所有这些例子都有注意事项,在这些情况下,您可能最终会使用数据科学。数据科学正在发展,新的方面正在出现。请记住,本文是以观点为导向的,这些观点或例子可能会很快改变。当您认为在特定情况下应该或不应该使用数据科学时,请随时在下面发表评论。总而言之,这里有四个不应该使用数据科学的例子。

*When you don’t have enough dataWhen it’s a one-off taskWhen you don’t have labeled dataWhen your budget is tight*

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

参考

[1]图片由 Andreas KlassenUnsplash 上拍摄,(2017)

何时不使用机器学习或人工智能

原文:https://towardsdatascience.com/when-not-to-use-machine-learning-or-ai-8185650f6a29?source=collection_archive---------8-----------------------

一厢情愿、不稳定和寻找模式的冒险

想象一下,你刚刚设法从临床试验中得到一个数据集。激动人心!为了帮助你进入角色,我编了一些数据给你看:

假设这些数据点绘制出了治疗日 ( 输入"特征 " )和某个奇迹治愈的正确剂量(以毫克为单位)( 输出"预测 " )之间的关系,患者应该在 60 天的疗程中接受该剂量。

#The data:
(1,28)  (2,17)  (3,92)  (4,41)  (5,9)   (6,87)  (7,54) (8,3)   (9,78)  (10,67) (11,1)  (12,67) (13,78) (14,3) (15,55) (16,86) (17,8)  (18,42) (19,92) (20,17) (21,29) (22,94) (23,28) (24,18) (25,93) (26,40) (27,9)  (28,87) (29,53) (30,3)  (31,79) (32,66) (33,1)  (34,68) (35,77) (36,3)  (37,56) (38,86) (39,8)  (40,43) (41,92) (42,16) (43,30) (44,94) (45,27) (46,19) (47,93) (48,39) (49,10) (50,88) (51,53) (52,4)  (53,80) (54,65) (55,1)  (56,69) (57,77) (58,3)  (59,57) (60,86) ...

现在想象你正在治疗一个病人,这是第二天。你建议我们用多少剂量?

我真的希望你回答了【17 毫克】,因为这绝对不是一个骗人的问题。第四天怎么样? 41mg ?没错。

现在,你如何构建软件来输出第 1-5 天的正确剂量?你会尝试用机器学习 (ML)吗?换句话说,你会尝试在这些数据中找到模式,并尝试将它们转化为从输入到输出的配方( 【模型】 )。

如果你更喜欢视频版本,我来给你讲这个例子。

不,你当然不会!你可以让你的软件做你正在做的事情:在表格中查找答案。这样,你将在 60 天内 100%的时间里得到正确的答案。这里不需要模式,也不需要机器学习。

那么,什么样的情况需要机器学习呢?

现在呢?今天是第 61 天。这里的正确答案是什么?

嗯,我们从来没有见过第 61 天的数据,所以我们没有办法在这里找到答案。我们能做什么?我们运气不好吗?机器学习能帮助我们吗?

那得看情况。

如果没有连接输入和输出的模式,那就算了。在这种情况下,没有什么可以帮助我们…除了实际的魔法,它并不存在(以防你认为机器学习就是它)。现在放弃吧!

我们必须找到一个有用的模式

但是如果有就是一个模式而如果(那就是一个大如果!)我们可以找到它,然后我们可以尝试将它应用到第 61 天,尝试预测/猜测正确的答案。也许机器学习可以帮助我们。

模式必须一般化

问题是在我们的数据中仅仅有一个模式是不够的。那就太方便了。该模式还必须与 60 天后的情况相关。如果第 61 天的条件完全不同,那么模式就不能概括 T1 了,那该怎么办?据你所知,也许在第 61 天,所有的病人都完全治愈或死亡,或服用不相容的药物。那么这个模式对你没有好处。

不稳定的宇宙

让它深入人心。如果你的数据不是了解未来世界的有用窗口——也许是因为疫情改变了所有的规则——那么你昨天的信息有多好也没用。如果你生活在宇宙中一个不稳定的角落,你将很难证明我们所说的和* 平稳性 假设 这些大致可以翻译成*“我相信规则没有改变。”

我说的不是旁观者眼中的那种不稳定(就像当平均价格因为你忘了调整通货膨胀而随时间漂移)。处理轻微的非平稳性(当规则是时间的可预测函数时)是时间序列分析的全部内容。

我说的是那种你无能为力的剧烈的不稳定性,因为你的系统规则从根本上是不同的,你无法预测从一个时期到下一个时期。如果你过去的数据突然完全不适用于你的不稳定的未来,你就不能面无表情地用昨天来预测明天。

图片:来源

也许你很幸运

但是如果一种模式并且如果这种模式与我们发现自己所处的新情况相关,那么我们就成功了。我们可以去找到旧数据中的模式,根据它制定一个食谱,然后使用这个食谱在第 61 天甚至更长的时间里取得成功!

发现模式并使用它们是机器学习的全部内容。

何时使用机器学习

应用机器学习(和人工智能)中,你不需要背诵你以前看过的记忆例子——你不需要 ML 来做这个,只需要查找它们!—你是来学习的。

只是重复老答案?ML 可以做的更好!它在新的例子上成功了。

你的任务?构建一个成功推广的解决方案(或者终止你的项目)。(“成功”是什么意思?我有一篇* 全篇为你指导 关于那个话题。)*

不是猫。来源

换句话说,如果您的解决方案不能处理从未见过的示例,那么它就没有用。不是打破静止宇宙所有规则的引人注目的新例子,而是对已知主题的轻微扭曲。

我们不是来像鹦鹉一样死记硬背的。我们是来概括新情况的。这就是机器学习的力量和魅力。

如果你之前(第 61 天)没看过这个 确切的 输入值组合,那么正确的输出答案是什么?好吧,也许我们可以把旧模式变成一个能做出合理猜测的食谱。

例如,如果你从成千上万张动物照片中训练了一个猫/非猫分类器,你可以让它告诉你一张全新的照片中是否有猫,但你不应该让它告诉你一幅画是否是立体派风格的。

机器学习适合你吗?

如果你厌倦了听我称它为事物标签编写代码的替代方法,让我试着换一种说法。

机器学习是一种使重复决策自动化的方法,包括从算法上寻找数据中的模式,并使用这些模式来制定正确处理全新数据的方法。

为了知道机器学习是否适合你,我有三个指南你可能会喜欢:

那么,有什么有用的模式吗?

还在好奇第 61 天?原来在我为这个例子制作的玩具数据中有一个模式。我知道这个,因为是我放在那里的。我甚至可以向你保证,它概括了你能想到的最大数量的一天,因为在这个极度不稳定的时代,我发现用数据工作是一种奢侈的安慰。

*#The data:
(1,28)  (2,17)  (3,92)  (4,41)  (5,9)   (6,87)  (7,54) (8,3)   (9,78)  (10,67) (11,1)  (12,67) (13,78) (14,3) (15,55) (16,86) (17,8)  (18,42) (19,92) (20,17) (21,29) (22,94) (23,28) (24,18) (25,93) (26,40) (27,9)  (28,87) (29,53) (30,3)  (31,79) (32,66) (33,1)  (34,68) (35,77) (36,3)  (37,56) (38,86) (39,8)  (40,43) (41,92) (42,16) (43,30) (44,94) (45,27) (46,19) (47,93) (48,39) (49,10) (50,88) (51,53) (52,4)  (53,80) (54,65) (55,1)  (56,69) (57,77) (58,3)  (59,57) (60,86) ...*

对于那些喜欢挑战的人来说,为什么不试试看你最喜欢的机器学习算法能否找到模式,并将其转化为有用的食谱?(回答在本页底部。)

我还怀疑可能会有更多的人通过分析方法而不是使用机器学习来获得它(参见这个来了解区别,加上我刚刚给你的线索),但 GLHF 除外。愿最佳方案胜出!

如果你热衷于尝试 ML,不要忘记按照正确的顺序做事——这里有一个逐步的指南来帮助你。

感谢阅读!

如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。你也可以在这里享受音频版本和我的统计视频播放列表在这里

脚注

如果你想知道第 61 天的答案,试着运行我用来生成数据的 R 函数(你可以粘贴它并在线运行这里)。

*# Here's the R code I used to generate the data:
doseFun <- Vectorize(function(x) {r <- round(93 * cos(x) ^ 2 + sqrt(exp(x/100))); return(r)})# Output the result for day 61:
print(doseFun(61))# Plot the deterministic function:
plot(x = 1:60, y = doseFun(1:60))*

因为我的函数被证明是确定性的,你可以通过分析(绘制图表并目测它以注意重复的模式)得到正确的答案,这里你并不真正需要机器学习,尽管它可以工作。这不是最有效的做事方式。

关于确定性设置中的简单机器学习方法的示例,请参见下面我的视频:

警告!

我希望我让你接触那个玩具数据集没有弊大于利。危险在于你养成了一个非常坏的习惯:没有正确地分割你的数据和测试你的系统 T21。

你们当中那些在提交解决方案之前拆分数据并验证解决方案的人应该得到额外的表扬。你的谨慎会对你有好处的!

那些在整个数据集上绘图/训练的人可能已经逃脱了… 这次。你没有被这个卡通化的例子迷惑的唯一原因是,真正的潜在模型是一个简单的模式,可以很容易地从数据中提取出来。这些在实践中很少见,因为你的同事可能在几十年前就发现了所有这些唾手可得的果实。如果你像对待这个玩具一样对待真实世界的数据,你会受到伤害。你可以在我的文章 如何成为一个人工智能白痴 中找到更多信息。

感谢阅读!人工智能课程怎么样?

如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:

在这里欣赏整个课程播放列表:bit.ly/machinefriend

与凯西·科兹尔科夫联系

让我们做朋友吧!你可以在 TwitterYouTubeSubstackLinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。

当熊猫还不够

原文:https://towardsdatascience.com/when-pandas-is-not-enough-use-pandasql-d762b9b84b38?source=collection_archive---------17-----------------------

照片由库纳尔·卡拉Unsplash 上拍摄

蟒蛇短裤

非对等加入熊猫和 PandaSQL

Pandas 是最近最好的数据操作库之一。它可以让你切片和切块,分组,连接和做任何任意的数据转换。你可以看看这篇文章,它讲述了如何使用 Pandas 以一种简单明了的方式处理大多数数据操作。

但是即使熊猫一般来说有多棒,有时候你还是想再多要一点。假设您来自一个 SQL 背景,其中相同的操作太容易了。或者你想有更多可读的代码。或者您只想对您的数据框运行特殊的 SQL 查询。或者,也许你来自 R,想要一个sqldf.的替代品

例如,Pandas 没有替代方法的操作之一是非等价连接,这在 SQL 中非常琐碎。

在这一系列名为 Python Shorts 的帖子中,我将解释 Python 提供的一些简单但非常有用的构造,一些基本的技巧,以及我在数据科学工作中经常遇到的一些用例。

这篇文章本质上是关于对熊猫数据框架使用 SQL。

但是,什么是非等价连接,我为什么需要它们?

假设您必须连接两个数据框。一个向我们展示了我们对某些商品进行促销的时期。第二个是我们的交易数据框架。我想知道由促销推动的销售额,即在促销期间某一商品的销售额。

我们可以通过在item列上做一个连接以及一个连接条件(TransactionDt≥StartDtTransactionDt≤EndDt)来做到这一点。由于现在我们的连接条件也有大于号和小于号,这样的连接称为非等价连接。在继续前进之前,一定要想好你将如何在熊猫身上做这样的事情。

熊猫解决方案

那么在熊猫身上你会怎么做呢?是的,基于熊猫的解决方案是存在的,尽管我觉得它不够易读。

让我们从生成一些随机数据开始。

offerDf,transactionDf = generate_data(n=100000)

不需要担心上面的随机数据生成代码。只要知道我们的随机数据是什么样的:

一旦有了数据,我们就可以通过合并列item上的数据,然后根据所需的条件进行过滤,来进行非等价连接。

merged_df = pd.merge(offerDf,transactionDf,on='Item')pandas_solution = merged_df[(merged_df['TransactionDt']>=merged_df['StartDt']) & 
          (merged_df['TransactionDt']<=merged_df['EndDt'])]

正如我们所希望的,结果如下:

PandaSQL 解决方案

Pandas 解决方案很好,它做了我们想要的事情,但是我们也可以使用 PandaSQL 以一种可读性更好的方式来完成同样的事情。

什么是 PandaSQL

PandaSQL 为我们提供了一种在 Pandas 数据帧上写 SQL 的方法。因此,如果您已经编写了一些 SQL 查询,使用 pandaSQL 可能比将它们转换成 pandas 语法更有意义。要开始使用 PandaSQL,我们只需简单地安装它:

pip install -U pandasql

一旦我们安装了 pandaSQL,我们就可以通过创建一个pysqldf函数来使用它,该函数将一个查询作为输入,并运行该查询来返回一个 Pandas DF。不要担心语法;它大致保持不变。

from pandasql import sqldf
pysqldf = lambda q: sqldf(q, globals())

我们现在可以使用这个函数在我们的 Pandas 数据框上运行任何 SQL 查询。下面是非等价连接,我们希望以可读性更好的 SQL 格式进行。

q = """
    SELECT A.*,B.TransactionDt,B.Sales
        FROM
            offerDf A
        INNER JOIN
            transactionDf B
        ON 
            A.Item = B.Item AND
            A.StartDt <= B.TransactionDt AND
            A.EndDt >= B.TransactionDt;
    """
pandaSQL_solution = pysqldf(q)

结果是我们预期的熊猫数据帧。与以前不同,索引已经为我们重置。

警告:

虽然 PandaSQL 函数允许我们在 pandas 数据框上运行 SQL 查询,并且在某些情况下是一个很好的工具,但它的性能不如纯 Pandas 语法。

当我们用可读性更好的 PandaSQL 对熊猫计时时,我们发现 PandaSQL 花费的时间大约是本地熊猫的 10 倍。

结论

Python Shorts 系列的这篇文章中,我们了解了 pandaSQL,它允许我们在数据帧上使用 SQL 查询。我们还研究了如何使用本地 pandas 和 pandaSQL 进行非对等连接。

虽然 PandaSQL 库的性能不如 native pandas,但当我们想要进行特别分析时,它是我们数据分析工具箱的一个很好的补充,对于那些更喜欢使用 SQL 查询的人来说也是如此。

为了更仔细地查看这篇文章的代码,请访问我的 GitHub 库,在那里你可以找到这篇文章的代码以及我所有的文章。

继续学习

如果你想了解更多关于 Python 3 的知识,我想从密歇根大学调出一门关于学习中级 Python 的优秀课程。一定要去看看。

将来我也会写更多初学者友好的帖子。在关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。

此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。

当量子场遇到引力:Unruh 效应

原文:https://towardsdatascience.com/when-quantum-fields-meet-gravity-the-unruh-effect-69d03783d6bb?source=collection_archive---------13-----------------------

加速度和温度之间的关系

图片由 PIRO4D 来自 Pixabay

根据物理学家 Stephen FullingPaul DaviesW. G. Unruh 描述的 Unruh 效应,对于一个加速的观察者来说,真空看起来是有温度的。换句话说,如果一个观察者在一个加速的参照系中,他会探测到粒子,而在一个非加速的参照系中,他不会。

本文将密切关注 Mukhanov 和 Winitzki 的著作。

图 1 : 加拿大物理学家 W. G. Unruh,Unruh 效应的共同发现者(来源)。

匀速运动

让我们考虑一个观察者,比如宇宙飞船里的宇航员,在闵可夫斯基时空中以恒定加速度运动。度规张量η在二维中的对应矩阵表示为:

方程 1:闵可夫斯基时空的度规张量 η 的矩阵表示。

对应的线元素为:

方程 2:二维的闵可夫斯基线元素。

使用适当的时间 τ 对观察者的运动进行参数化,我们获得以下两个条件(第二个通过对第一个进行微分获得):

等式 3:根据第一个条件(顶部),2-速度被归一化。第二个条件(底部)是通过对第一个条件进行微分得到的,它表明 2-加速度和速度是正交的。

加速观察者的视界

一个加速的观察者(受到一个恒定的力)以双曲线运动(马上就要展示)。如下图所示,如果有足够的领先优势,加速的观察者可以跑得比光线更快。因此,他有一个以地平线为界的隐藏区域。这和黑洞类似,也有一个看不见的区域,以边界为视界。

图 2:草图显示,如果有足够的领先,加速的观察者可以跑得比光线快。

如下时空图所示,在 t < 0 离开原点 x =0 的光子 A 追上了观察者。然而,在t0 处穿过原点的光子 B 没有穿过原点。

图 3:显示两个光子 A 和 b 的时空图,前者追上了观察者。后者从来不会(来源)。

因为在一个瞬间移动的惯性系中(一个连接到观察者的参考系),观察者是静止的,我们有:

等式 4:在瞬时运动的惯性系中,观察者处于静止状态,2-速度等于 u =(1,0)。

请注意,从等式。3:

其中 a 是常数。这在任何惯性系中都成立,因此我们有:

等式 5:恒定加速度的条件,在任何惯性参考系中都有效。

我们在这里的目标是表明,与非加速观察者相比,加速观察者将检测到粒子的存在。为了证实这一点,选择一个新的坐标来覆盖闵可夫斯基时空是很方便的。这些坐标被称为光锥坐标

光锥坐标

这些坐标根据原始( tx )定义为:

等式 6:光锥坐标的定义。

闵可夫斯基时空中对应的度规张量的矩阵表示为 :

等式 7:在闵可夫斯基时空中光锥坐标的度量张量的矩阵表示。**

用 Eq 代替 η 。情商 7。3 和情商。5 我们得到:

等式 8:光锥坐标的一阶和二阶导数所遵循的条件。

这些都可以轻松解决。经过几次代数运算(包括重新缩放和坐标原点的移动),我们得到:

方程 9:方程 9 中方程组的解。8、描述一个加速观察者的轨迹。

来自 Eq。6 我们获得:

方程 10:描述加速观察者在(t,x)坐标中的轨迹的方程。

现在请注意:

等式 11:在坐标(t,x)中,加速观察者的世界线是一条双曲线。

因此,我们得出结论,在 t - x 坐标系中,加速观察者的世界线是一条双曲线:

  • 观察者,最初在 x → ∞,移动到静止在 x =1/ a,的方式减速。**
  • 然后他加速回到 x → ∞。

注意,当 x → ∞时,他的轨迹接近光锥。

图 4:在 t - x 坐标系中,加速观察者的世界线是一条双曲线。观察者,最初在 x → ∞,减速直到停止在 x =1/ a. 停止后,他加速回到 x → ∞(注意当 x → ∞,他的轨迹接近光锥,由虚线表示)。

移动框架

现在让我们为我们的加速观察者找到一个运动坐标系。继 Mukhanov 和 Winitzki 之后,我们将寻找一个参考框架,其中:

  • 当空间分量 ξ =0 时,观察者处于静止状态
  • 时间坐标 ξ ⁰= τ,观察者的适当时间(沿着他自己世界线的时间)

此外,共动标架中的度规保形平坦是很方便的(当我们把量子力学包括进来时,这一点就变得很清楚了)。根据定义,保形图是一种局部保持角度的数学函数,而不必保持长度。

图 5:保形图的例子。在矩形网格(左)和 f 下的图像(右)中,成对的线以 90°相交()。

在共形平坦流形中,它的每个点都有一个邻域,可以用共形变换映射到平坦空间。因此,运动框架中的线元素具有以下形式:

等式 12:运动参照系中的线元素。

其中ω仍未确定。为了找到ω(ξ⁰, ξ )的表达式,我们首先定义运动参考系的光锥坐标:

方程式 13:共动参考系的光锥坐标。

我们可以用几行文字说明(见穆哈诺夫和 Winitzki ),为了避免在 ds 上出现移动光锥坐标的二次微分,我们必须有以下变量相关性:

等式 14:原始光锥坐标和移动参照系的光锥坐标之间的关系。

在几个更简单的步骤中,方程中函数的实际形式。14 可以快速导出。他们读到:

等式 14:原始光锥坐标和共运动参考系的光锥坐标的显式表达式。

我们现在可以用上面得到的结果来明确写出方程中的线元素。12:

方程 15:运动参照系中的线元素,ω(ξ⁰, ξ )显式写出。

这被称为林德勒时空,除了它只覆盖了闵可夫斯基时空的四分之一(因此是不完整的)之外,它等价于闵可夫斯基时空(没有曲率)。下图显示了 Rindler 加速观察器的示例。

图 6:二维时空中的 Rindler 坐标。由虚线界定的区域是 Rindler 楔,并且它是共移动光锥坐标的有效域。世界线(实心双曲线)代表具有常数 ξ 的匀加速观察者,而虚线具有常数 ξ ⁰.该图还显示了坐标系未涵盖的三个事件。来自 P 和 Q 的信号永远不会到达观察者,而来自加速观察者的信息永远不会到达 R ( 来源)。

坐标 x 和 t 可以用 ξ s 变量表示:

等式 16:用 ξ s 变量表示的原始坐标 x 和 t。

量子场简介

让我们考虑 1+1 时空中的无质量纯量场。行动

方程式 17:1+1 时空中无质量纯量场的作用。

是共形不变的:

等式 18:等式中的作用的共形不变性。17

( g 这里是度量**gT5)其中解释了 S 在惯性系和加速系中的相似性:****

方程 19:共形不变性解释了惯性坐标系和加速运动坐标系中的动作之间的相似性。

写情商。6 和 Eq。13 在光锥坐标中,我们可以很容易地确定场方程并求解(详见 Mukhanov 和 Winitzki )。场方程的解是右移和左移模式的和:

等式 20:分别对应于闵可夫斯基坐标时间 t 和固有时间τ = ξ ⁰.的右移正频模式

解的这一性质与方程。14 意味着相反的运动模式不会相互影响,因此可以单独处理。继 Mukhanov 和 Winitzki 之后,为了避免混乱,我从现在开始只写右移模式。

直到现在,这种分析都是经典的,不涉及量子力学。我们现在将量子化这个理论。

在林德勒楔形体内,坐标框架重叠,我们可以遵循标准的规范程序来量子化理论,并扩展量子场算符 ϕ:

方程式 21:量子场论的标准模式展开。

其中(LM)表示左移模式。运营商

等式 22:在展开式等式 21 中使用的创建和湮灭算子

遵守标准的交换关系,为了简明起见,我将省略它。注意有两种真空状态,即:

方程式 23:林德勒真空和闵可夫斯基真空。

“正确的”真空取决于正在进行的实验。例如,从加速(或 Rindler)观测者的角度来看,闵可夫斯基真空是一种包含粒子的状态。换句话说,如果量子场处于闵可夫斯基真空状态,林德勒观测者的探测器就会记录到无质量粒子的存在。相反,如果量子场在林德勒真空中,它就不会。

a 和 b 算子之间的关系

方程中算子之间的变换。22 个被称为 Bogolyubov 变换,以苏联数学家和理论物理学家 Nikolay Bogolyubov 的名字命名。

等式 24:与 a 和 b 算子相关的 Bogolyubov 变换。

图 7:苏联数学家和物理学家 Nikolay Bogolyubov,同名变换的开发者(来源)。

堵 Eq。24 进 Eq。21 和执行一些简单的操作,一个到达方程的系数的表达式。24:

等式 25:等式中 a 和 b 算子的系数。24.

Unruh 温度

我们最终得出以下结果:

  • 由加速观测器测量的频率为ω的粒子的平均密度
  • 所谓 Unruh 温度,就是闵可夫斯基真空中加速探测器测得的无质量粒子所服从的玻色-爱因斯坦分布的温度。

平均密度由下式给出:

方程 26:加速观测器测得的频率为ω的粒子平均密度服从玻色-爱因斯坦分布。

温度等于所谓的 Unruh 温度:

等式 27:由加速观测器测量的粒子热浴的温度。

图 8:三个统计量的基态平均占有率的比较。玻色-爱因斯坦分布是红线(来源)。

物理解释

人们可以这样解释 Unruh 效应。量子真空的波动与加速观测者携带的探测器相互作用。这种相互作用激发了探测器,就好像它在一个热浴池中,温度由等式给出。27.请注意,这种波动的能量是由产生加速度的任何机制产生的,例如,加速运载加速观察者的宇宙飞船的推进引擎。

我的 Github 和个人网站 www.marcotavora.me 有一些其他有趣的材料,既有关于物理的,也有关于数学、机器学习、深度学习和金融等其他主题的。看看吧!

当卫星相撞时…

原文:https://towardsdatascience.com/when-satellites-collide-843bc45f09f1?source=collection_archive---------54-----------------------

用 Wolfram 语言编写的计算思维故事

美国宇航局在 Unsplash 拍摄的照片

空间很大,真的很大。然而,地球周围的空间变得越来越拥挤。每次发射新的宇宙飞船,都会有一些小碎片落在周围的轨道上。美国太空监视网络估计,地球上漂浮着超过 1 亿个 1 厘米以下的碎片,大约 90 万个 1-10 厘米的碎片,大约 3.4 万个大于 10 厘米的碎片。

每隔一段时间,两个更大的部分就会靠得很近。例如,目前存在一种风险,即在世界协调时 10 月 16 日 00:56,两个总质量为 2,800 千克的物体将发生碰撞:

为了获得这里发生的细节,我打开了一个新的 Wolfram 笔记本会议。为了获得有问题的卫星,我使用了自然语言界面并键入推文中给出的“ satellite 19826 ”。这参考了 Wolfram 知识库(也由例如 Wolfram|Alpha 使用)并给了我卫星实体:

(所有后续图片由作者提供)

对“卫星 36123”重复相同的过程,得到了我感兴趣的两个实体:

所有实体都有一定数量的可以查询的属性。例如,以下是“CZ-4C 火箭体”物体的一些已知特性:

使用这些属性,我们可以绘制“CZ-4C 火箭体”的当前位置和轨迹:

再多一点代码,我们就可以画出这两个物体在 2020 年 10 月 16 日的预期位置:

更新:新发布的轨迹预测碰撞概率更高。新轨迹图像:

Jeff Bryant 在 Wolfram 社区帖子中描述了如何创建该地图的细节。完整的代码也可以在这个在线笔记本中找到。

如果“宇宙 2004”和“CZ-4C 火箭体”相撞,它们将产生一大团较小的物体,增加地球附近的空间碎片数量。目前还没有经济有效的方法来清除这些碎片。目前的重点是减少新引入的碎片数量。

有关最新更新,请关注以下 Twitter 帖子:

最后更新,似乎没有碰撞:

当科学和哲学遇到随机性、决定论和混沌时

原文:https://towardsdatascience.com/when-science-and-philosophy-meet-randomness-determinism-and-chaos-abdb825c3114?source=collection_archive---------11-----------------------

随机性背后的理论是什么?那真的存在吗?

来源: Pxhere

有时是恐惧的来源,有时是梦想的来源。随机性在每个人的心中都是情绪的来源。作为一名程序员,这让我着迷。如果你曾经在赌场碰过运气,那是因为你可能会因此而兴奋不已。不幸的随机性也会让你哭泣,或者让你度过一生中最艰难的时光。

“这个世界是由机遇主宰的。随机性每天都困扰着我们。”

保罗·奥斯特。

随机性是未知、意外的同义词。然而这是真的吗?任何事情都有可能是真正随机的吗?它仅仅是一种信仰,一种想法,还是随机性只是一种幻觉?

为什么我们不把我们的知识放在一边五分钟来回答这个问题呢?

定义

让我们看看字典隐藏了什么。随机意味着:

  • 没有方法地做出、完成或发生有意识的决定
  • 不寻常的,或意想不到的****
  • 表征选择过程的过程,其中一个集合中的每个项目被选择的概率相等(统计学)****

有趣的是,“随机”这个词激发了两个主要观点。

一方面,它与是一个无法提前预测的事件同义:通过滚动骰子几次,你无法说出结果会是什么。另一方面是一个无模式序列的统计性质:掷骰子几次,两个结果之间没有逻辑。

没错,的区别是微妙的。在这一点上,你甚至可能认为这没有什么区别。然而差别是巨大的。

伪随机数发生器

有些算法可以计算随机数。他们被称为伪随机数发生器** (PRNG)。这些随机数是许多加密系统的基础,用来保护无线通信甚至你在网络应用上的密码。**

为了更好地理解什么是随机性,看看在我们的 PRNGs 中它是如何产生的是很有趣的。是的,我们要讨论算法方法。不,你不会迷失在细节中。

****

线性同余生成器— a=13,c=7,m=24,种子=0

我要给大家介绍的 PRNG 是一个老经典:线性同余发生器** [1]。让我们简单点:**

  • 我们有一个起始号码叫做种子
  • 下一个随机数是从上一个随机数计算出来的。****

假设我们有a=13c=7m=24,我们的种子是 0。很容易计算出下一个随机数。我们用 13 乘以 0。我们还有 0,然后加上 7。最后,mod m的意思是“当我们把分成m等份时,还剩下多少”。让我们想象一下,我们有 30 个硬币要在 8 个人之间分享。然后我们可以给每个人 3 个硬币。还会剩下 6 枚硬币。换句话说30 mod 8 = 6

线性同余生成器— a=13,c=7,m=24 —蓝色种子= 0,紫色种子=1

你了解这个过程。很简单。真简单。从一个种子和其他三个数字,我们可以生成一个随机序列。随机性出现在的 10 行代码中。****

"随机数不应该用随机选择的方法产生."

唐纳德·克努特。

观察者的角度来看,序列看起来完全是随机的。然而我给你们展示的线性同余发生器非常简单。当然,还有更复杂的。python 中的random.random()numpy.random.random()都是基于 PRNG·梅森图[2]。

确定性和周期性

我们看到我们生成的随机数不是随机的!它们甚至是完全确定的。如果我们知道使它工作的算法和种子,那么我们就预先知道生成的序列。****

所以让我们回到我们的字典定义,看看哪些仍然符合:

  • 没有方法或有意识的决定而做的或发生的
  • 不寻常的,或意想不到的:好的****
  • 描述一个选择过程,其中一个集合中的每个项目都有相等的被选中的概率(统计学):还不知道****

我们在生成随机数吗?从技术上讲,答案是否定的。

而且,产生的数字往往是周期性的。提出的两个 PRNGs 就是这种情况。排序后的无限重复

线性同余生成器— a=13,c=7,m=24,种子=0

prng 不产生随机数。然而,不应该自动怀疑它们。计算机是有限的空间。我们必须务实。我们可以试着量化它们的适宜性。

****Kolmogorov 的复杂度【3】因此被定义为生成伪随机序列的最短程序。因此,我们可以估计随机数生成的复杂度。

但是在现实中,一个真正的随机序列是一个无限序列,所以我们无法找到更小的程序来生成它。根据定义,随机是不可压缩的,因为它不包含模式。

"计算机只能具有某种随机性,因为计算机是有限的设备."

特里斯坦·佩里希。

这就是为什么有统计测试来测量产生的随机性与概念上的随机性有多接近。我们可以注意到,例如,顽固的测试NIST 测试【5】。

我们不会深入这些统计测试的细节。但是它们让我们对随机序列的可预测性有了一个概念。我们的线性同余发生器的例子没有通过这些测试[6]。

随机就是混乱

随机数生成器不生成随机数。他们制造混乱。

"当然,任何考虑用算术方法产生随机数的人都是有罪的."

约翰·冯·诺依曼。

混乱是元素的一般混乱。在我们的例子中,序列的普遍混乱。混沌是一个确定性系统,确定无疑,但是高度依赖于它的初始条件

让我们以双摆为例。如果我们放下同一个双摆锤,那么重力,其组件的质量,以及摆锤的起始角度将定义摆锤落下时的反应。
如果在
完全相同的条件下释放两次,那么它将具有完全相同的行为

开始时差为 1 的双摆。

然而,如果您通过将起始角度改变很小的角度来第二次放下它,那么行为将完全不同。但仍可由其初始条件决定。

"理论上,随机性是一种内在属性,但实际上,随机性是不完全信息."

纳西姆·尼古拉斯·塔勒布。

这被称为蝴蝶效应。对于初始条件的微小差异,结果是完全不同的,通常随着时间的推移,任何预测都是不可能的。

真随机数发生器

对于一些科学家和数学家来说,无疑存在着纯粹的随机性。有效果无原因的序列。他们被称为真随机数发生器 (TRNG),必须基于随机物理源。****

正是在量子物理学中,我们熟悉了真正的随机现象。太空中被认为是真空的地方实际上是由亚原子粒子组成的,它们神奇地出现又消失。这些粒子产生随机噪声。寂静之声

“自然本身也不知道电子会通过哪个孔”。

理查德·费曼。

它的不可再生方面已经被量子理论证明【7】。然后我们有一个真正的随机数发生器。直到某个物理理论可能会与量子物理相矛盾。它将再次表明,被认为是随机的东西并不是随机的。

(真)随机数生成器

在统计数学中,随机性的概念作为一个概念存在。但是随机模型的定义假设在相同的初始环境下可以观察到不同的事件。根据物理定律,这种形式的随机性不可能存在于由决定论统治的世界中。决定论可以模仿随机性。

但是量子物理学已经证明了它在今天的伟大原则失效的地方的有效性。这引入了一个新的范例。统计物理学,其中同时解释了预测的可能性和预测与观测之间的剩余差距随机性可以模仿决定论。

"真正的随机性需要无限量的信息."

特里斯坦·佩里希。

确定性物理还是统计物理才是正确的立场?这也可能是两个以上对手之间的游戏。

有可能证明一个系统是真正随机的吗?由于根据定义它是不可压缩的,它需要无限量的信息才能被认为是随机系统。

随机性存在吗?

随机性作为一个概念存在。但是作为一个的观察,我们现阶段还不能说什么。我们所说的随机可以是:

  • 混乱或者
  • 对规则作出反应的序列过于细微,无法被观察者理解,或者
  • 纯粹的随机性,其证据仍在争论中。

这是否意味着我们应该克制,不要把非随机的东西称为随机?不,不是的。我默认认为系统就是它看起来的样子。如果我不能区分随机系统实际上是确定性的,那么我会认为它是随机的。

"我们所说的随机性是并且只能是一个已知结果的未知原因."

伏尔泰。

毕竟我们不知道感情是什么。它只是一个概念。对这种感觉的观察让我们认为它们是真实的。

知识就是分享。
支持我,一键获得 中我所有文章的访问

来源和参考

[1] LEHMER,D . H .m . l . junco sa 在 BRL 高速计算机上生成随机数。数学。第 15 次修订
(1954 年),559 页

[2] Mersenne Twister :一个 623 维均匀分布的伪随机数发生器,由庆应义塾大学松本诚和庆应义塾大学马普数学研究所和西村拓治设计

[3] Kolmogorov 复杂性,M. Li,P. Vitányi,载于国际社会百科全书&行为科学,2001

[4]马萨格里亚·乔治和曾伟万。一些难以通过的随机性测试。统计学家 j。柔软。7, 3, 1–9, 2002.

[5]安德鲁·鲁欣和阿尔用于加密应用的随机和伪随机数发生器的统计测试套件。NIST 特别出版物 800–22 第 1at 版,2010 年。

【6】线性同余发生器不产生随机序列,A.M. Friezer .坎南;拉加利亚斯

[7] 《寂静之声》大受欢迎,林炳科,澳大利亚国立大学

所有的 gif 都是自制的,可以免费使用。

什么时候该买比特币?—减轻价格波动的简单方法

原文:https://towardsdatascience.com/when-should-i-buy-bitcoin-a-simple-way-to-mitigate-price-volatility-7740e537c694?source=collection_archive---------32-----------------------

关于成本平均法事后表现的数据分析

Icons8 团队Unsplash 上的照片

每天都有越来越多的人投资比特币。我们可以看到持有不少于 1 个比特币的地址数量不断上升。

但是,是什么阻止了像你这样的人购买你的第一枚比特币呢?加密货币是不稳定的资产,波动性会阻止人们购买该资产。价格会在几个小时内上下浮动 10%。不开玩笑。

那么什么时候应该购买比特币呢?这对于你我这样没有巨款的散户来说至关重要。我们输不起。

如何确定买入费的时间? 最简单的回答是— 你没有。

美元成本平均法

美元成本平均(DCA)是积累比特币的一种常见策略,并且在加密货币领域势头越来越猛。你不是去冒险,去投机比特币的价格,而是每个月(或者每周,或者每天)花同样多的美元在比特币上,不管价格如何。

例如,不管价格如何,你每天都要买价值 10 美元的比特币。当价格触底时,你可能会错过,但这减轻了波动性对一次性购买大量比特币的影响。这也会阻止你冲动购物。

nave DCA 是最容易的 避险 策略,逐步积累比特币。尽管如此,有时你可能会觉得价格太高,你会希望当天避免购买比特币。

虽然让你的情绪驱动你的投资决策通常不是一个好主意,但我们可以依靠一些技术指标来提示你买入。然后,你可以稍微调整一下策略,只在资产被认为“超卖”时,买入价值 10 美元的比特币。

照片由 NeONBRANDUnsplash 上拍摄

条件美元成本平均法

我们以相对强弱指数 (RSI)为例。它通常在 14 天的时间框架内使用,并在 0 到 100 的范围内测量。传统上,当 RSI 低于 30 时,资产被认为超卖。因此,如果你可以利用这个“买入信号”,在 RSI < 30 时只采用平均成本。

事实上,这种有条件的 DCA 策略通常比单纯的 DCA 表现得更好。上面的图显示了如果你在不同的时间开始使用原始 DCA 或各种条件 DCA 策略购买比特币,每比特币的平均成本(以美元计)。

即使你在 2017 年底‘加密货币泡沫’期间开始雇佣天真的 DCA,这可能是投资加密货币的最糟糕的时候,比特币累积的平均成本也不超过 7000 美元。在撰写本文时(2020 年 5 月),比特币的价格徘徊在 9000 美元左右。

从下面显示的另一个图中,你可以想象如果你在不同的时间用不同的策略开始积累硬币,投资的回报 (ROI)。零投资回报率意味着收支平衡事后看来,无论您何时开始采用 DCA 策略,ROI 都是正的。

条件 DCA 策略的缺点是,您提出的条件可能过于严格,因此不会经常发生。以上述 RSI 为例,RSI < 30 only happened ~10% of the time in history. This is not ideal for budgeting.

Takeaways

Price volatility should not stop you from investing in the future. Many Americans already bought Bitcoin with their stimulus cheques from the government.

Caveats: the past does not predict the future. You should do your own research before investing in cryptocurrencies.

注自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指南 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

感谢阅读!你可以注册我的时事通讯来接收我的新文章的更新。如果您对数据分析感兴趣,您可能会对以下内容感兴趣:

[## 赢得垄断的 7 个策略

一个关于 Python、统计、可视化和童年记忆的故事

towardsdatascience.com](/7-strategies-to-win-monopoly-a89ead18b062) [## 你会在泰坦尼克号上幸存吗?——对 Kaggle 的经典挑战

关于如何开始 Kaggle 之旅的 7 步指南

towardsdatascience.com](/would-you-survive-the-titanic-a-classic-challenge-on-kaggle-3efaa22bfb5e)

声明:我不是财务顾问。给出的建议不是理财建议。你自己承担交易风险。

最初发表于edenau . github . io

在我的脸书粉丝页面上预测喜欢——我能在 6 个月内达到 10 万个喜欢吗?

原文:https://towardsdatascience.com/when-should-i-reach-100k-likes-on-my-facebook-fan-page-21997db91990?source=collection_archive---------56-----------------------

作者照片

使用时间序列预测为社交媒体影响者设定数据驱动的目标。

我有一个 96k+赞的脸书粉丝页面。

[www.facebook.com/TwoHappyShibas/](http://www.facebook.com/TwoHappyShibas/)

“这个月我应该获得多少新的赞?”

"如何建立有时间限制的目标?"

“我现在有 96k 的赞,什么时候应该达到 100k?”

在我成为数据分析师之前,这些是我问自己但从未回答过的一些顶级问题。

现在,作为一名数据分析师,我可以从数据中获得有意义的见解。

我对我的脸书粉丝页面的两年历史数据进行了时间序列分析,预测了未来六个月的赞数:

预测 https://www.facebook.com/TwoHappyShibas/的总点赞数

有了预测,我可以直接回答上面提到的三个问题:

这个数据分析应用程序对我非常有帮助,因为现在我可以逐渐减少凭直觉做出的决定。

以前,我只能使用脸书分析工具来衡量我的表现,并与上一期进行比较,但从来不知道什么样的回报是足够的,什么是不够的。

但是,在我做了这个分析之后,设定目标变得更加容易实现,以数据为导向,也更加现实。该预测可以作为一个基准,帮助我创建一个数据驱动的时间表,以跟踪并继续对社交媒体施加影响。

脸书分析工具:显示定期绩效比较

分析方法

  1. 定义目标
  2. 数据收集和准备
  3. 数据探索性分析
  4. 时间序列分析
  5. 应用和见解

定义目标

问题:

在运营一个粉丝页面的时候,当我没有一个可靠的基准时,设定一个目标总是很难。例如,我不知道一个月获得多少新的喜欢会被认为是一个好的回报。

主要目标:

预测我的脸书粉丝页面上的总赞数,帮助我在未来设定可实现的、现实的数据驱动的目标。

数据收集和准备

数据是在我的 www.facebook.com/TwoHappyShibas/粉丝页面上收集的

通过脸书的 export insights 数据功能,我能够在两年内获得各种数据。

脸书允许用户在两年内导出数据(作者截图)

每日总点赞数(2018/04/27–2020/05/03)

这次我使用的是每日总点赞数据,它非常适合时间序列分析,因为它提供了每日的数字和日期。

> periodicity(like_xts)
Daily periodicity from 2018-04-27 to 2020-05-03

准备工作:

数据准备的主要部分是将数据转换成时序数据类型。

#Transform data into time series data$like  = data$Total_Likes%>%
  ts(start=c(2018,4,27) ,frequency=365)

数据探索性分析

在时间序列分析中,观察和处理数据的季节性效应趋势、平稳性(稳定性)是必不可少的。

首先,我看了一下 2018 年至 2020 年赞数增加的季节性,将数据分解为每日、每周和每月总赞数增加:

每日、每周和每月点赞

每周点赞数增加的极地季节图

根据我 5 年的社交媒体经验,图表显示数据中没有明显的季节效应。

我们可以通过分解数据来减少季节性:

#Generate seasonal-adjusted data
seasonal_adjusted = decomposedlike$x-decomposedlike$seasonal

如图所示,原始数据和季节性调整数据之间没有显著差异。

其次,我们可以通过查看自相关图来观察趋势:

ggAcf(diff(like),lag =90)

自相关图

该图表明,小滞后的自相关往往是显著的和积极的;同时,随着滞后时间的增加,这些值缓慢下降。
简而言之,这个数据是有趋势的,季节性滞后不显著。

分解图也显示了明显的增长趋势:

第三,我们使用 Dickey-Fuller 测试来检验平稳性:

> adf.test(like, alternative = "stationary")Augmented Dickey-Fuller Testdata:  like
Dickey-Fuller = -1.4016, Lag order = 9, **p-value = 0.8316**
alternative hypothesis: stationary

鉴于高 p 值,我们无法拒绝零➡ ️data 是不稳定的。

然后,我对数据进行差分,通过消除时间序列水平的变化来帮助稳定平均值:

> adf.test(diff(like), alternative = "stationary")Augmented Dickey-Fuller Testdata:  diff(like)
Dickey-Fuller = -3.4011, Lag order = 9, **p-value = 0.05326**
alternative hypothesis: stationary

p 值非常接近我们想要的值,但是仍然无法拒绝空值。

然后我取第二个差。

> adf.test(diff(diff(like)), alternative = "stationary")Augmented Dickey-Fuller Testdata:  diff(diff(like))
Dickey-Fuller = -14.821, Lag order = 9, **p-value = 0.01**
alternative hypothesis: stationary

鉴于低 p 值,我们拒绝 null➡ ️data 是静止的。✅

数据差异

在探索和更好地理解数据之后:

  1. 季节性—不明显
  2. 趋势——明显的增长趋势
  3. 平稳性—采用双重差分数据实现平稳。

我们可以去做模特了!

时间序列分析

在建模过程中,我将比较四种不同的模型:

  1. ARIMA 模型的每日数据
  2. ARIMA 模型的周数据
  3. ARIMA 模型月度数据
  4. 使用 ETS 模型的月度数据(ETS 与月度数据更吻合)

用四个模型做半年预测,我们可以看到只有《每日 ARIMA》和《每周 ARIMA》预测我的粉丝页面在 6 个月内会达到 100k。

接下来,我们要测试哪些型号更可靠。我们将使用下面的“训练和测试”方法来评估模型。

我把数据拆分成 21 个月作为训练数据,3 个月作为测试数据来测试准确性。

在我们测试了四个模型的准确性之后:

 ME        RMSE     MAE       MPE        MAPE**Daily   ARIMA**   **3.55192**   **101.0099**  **87.395**  **0.0032841335** **0.0918075**Weekly  ARIMA   219.605   287.5174  228.14  0.229669962  0.2386927Monthly ARIMA   48.6667   150.7824  149.33  0.05037247   0.1567438Monthly ETS     122.588   219.0160  207.47  0.127768354  0.2174692

结果:日 ARIMA 模型表现最好(精度)。

接下来,我们将深入探讨每日 ARIMA 模型是否可靠。如果不是,我们将测试第二好的模型。

首先,我们想看看汽车。ARIMA()函数非常适合:

> fit
Series: like 
ARIMA(0,**2**,3)> test$ttable
    Estimate     SE  t.value p.value
ma1  -0.7280 0.0374 -19.4414  **0.0000**
ma2  -0.1076 0.0434  -2.4808  **0.0133**
ma3  -0.0774 0.0370  -2.0945  **0.0366**
  1. 当选择最低的 AICc 拟合时,它还显示双重差异数据是最佳拟合。
  2. 它表明 ma1、ma2 和 ma3 都很适合(低 p 值)。

其次,我们需要检查残差:

> fit %>% residuals()%>% mean()
[1] 0.2174377
#the mean of risiduals is close to zero**✅**

  1. 残差看起来像白噪声序列。
  2. 93.6%的自相关位于蓝线之间,略低于 95%,但已经足够好了。
  3. 残差看起来像正态分布。
qqnorm(residuals(fit)); qqline(residuals(fit))

Q-Q 图显示这是一个相当好的分布。

第三,我们可以看看训练和测试数据之间的区别:

经过三个月的训练和测试,MAPE(平均绝对百分比误差)约为 9%。对我来说足够准确,可以建立数据驱动的目标!

限制

我应该多久更新一次数据?

#Cross-validation
fc_function <- function(x, h){forecast(Arima(x, order=c(0,2,3)), h=h)}
e <- tsCV(like_xts, forecastfunction=fc_function, h=180)
mse <- colMeans(e^2, na.rm = T)
data.frame(h = 1:180, MSE = mse) %>%
  ggplot(aes(x = h, y = MSE)) + 
  geom_point()+
  ggtitle("Cross-Validation")

从这个交叉验证图中,我们可以看出 60 天内的预测相当准确。因此,在使用该模型时,最好每月至少更新一次数据。

结论和见解

我们终于可以让旧的方法停留在过去,拥抱数据分析的美丽!

一个社交媒体影响者如何将分析落实到实际应用中?

根据预测,如果我保持与过去模式相似的表现,我的粉丝页面将在 2020 年 5 月增长 950 个赞。因此,当我在制定这个月的计划时,我会知道如果我想在这方面付出很多努力,增长 950 个赞是不够的。相反,我应该设立一个更高的目标,例如,获得 1500 个新的喜欢。

而且,这对于我制定季度目标也是一个极好的帮助。我可以建立一个六个月的时间表。设立不切实际的目标再也不会发生了!

以前,为社交媒体账户设定目标高度依赖直觉和经验。现在,在分析的帮助下,我们终于可以让旧的方法停留在过去,拥抱数据分析的美丽!

如果您有任何想法或反馈想与我分享,请随时在 Linkedin 上给我发消息!

https://www.linkedin.com/in/kuanchengw/➡️

什么时候不应该用机器学习做预测?

原文:https://towardsdatascience.com/when-shouldnt-you-use-machine-learning-to-make-predictions-61d25000ad88?source=collection_archive---------35-----------------------

机器学习/数据科学

极端不确定性世界中的机器学习

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

机器学习越来越好。越来越多的公司将机器学习作为其产品的一部分,因此越来越多影响我们的决策受到算法的影响。想知道在网飞看什么吗?一个非常强大的推荐引擎会提供接下来要看什么的建议。本能地,我们对由算法做出这样的决定感到舒服。但是考虑以下场景:

  1. 2007 年的高盛。法国巴黎银行暂停赎回其 3 只基金(被广泛认为是大金融危机的开始)几天后,高盛首席财务官大卫·维尼亚告诉《金融时报》我们看到连续几天出现 25 倍标准差的波动。从字面上看,这种可能性非常低,以至于宇宙存在的时间还不足以让几个这样的事件发生。
  2. 在 1977 年被美国宣布为非法之前,公司向居住在特定地区的人收取更高的服务费用(如信贷)是很常见的,而不考虑他们自己的信用历史。这被称为“红线”,对非裔美国人产生了不成比例的影响。虽然住在特定地区的人通常有不良的信用记录可能是真的,但这些地区的许多人肯定已经偿还了债务。我们大多数人会认为这种形式的“统计歧视”在道德上是可疑的。

在上述情况下,算法决策/机器学习的使用要么表现不佳,要么非常不合适。我最近读了一本很棒的书,书名是《彻底的不确定性——为不可知的未来做决策》,作者是默文·金和约翰·凯。这让我开始思考机器学习在预测中的作用。因此,给定一个具有代表性的数据样本的问题,在什么情况下应该对使用机器学习保持警惕?请继续阅读,了解广泛的高级框架…

不同种类的推理

照片由 Tachina LeeUnsplash 上拍摄

但是在我们考虑这个框架之前,考虑一下人类对世界的不同推理方式是有帮助的:

  1. 演绎推理——比如“我住在伦敦。伦敦在英国。因此我住在英国
  2. 归纳推理——如“对以往选举结果的分析表明,在有利的经济环境下,选民更倾向于执政党。2016 年美国总统大选中,他们的经济状况既不有利也不不利。因此,这次选举将是势均力敌的。这种推理利用过去发生的事件来推断未来可能的结果。
  3. 溯因推理——比如“唐纳德·特朗普赢得 2016 年总统大选,是因为某些摇摆州对经济状况和身份的担忧,也是因为他的对手普遍不受欢迎”。这种推理为一个独特的事件提供了最好的解释。人类在这方面很擅长,因为我们擅长过滤不同的、通常是相互矛盾的证据,以寻找最佳解释。

这些推理类型对应于以下机器复杂程度:

  1. 演绎推理 —传统软件很擅长这个。事实上,演绎推理是所有计算机代码的基础。例如,如果' a 等于' b ,' b 等于' c ',那么逻辑上' a 等于' c '。
  2. 归纳推理 —机器学习通过使用过去的数据来推断未来,从而使用这种推理。安德烈·卡帕西称之为“软件 2.0”也许不是巧合。
  3. 溯因推理 —如果计算机可以这样推理,这将是真正的人工通用智能(软件 3.0)吗?计算机在这方面做得很差,因为使用哪些数据往往不明显,而且可用的数据很可能不完整。

因此,预测涉及的溯因推理越多,机器学习就越没用。根据定义,历史数据只在一定程度上对独特事件的反应有用。那么这和我们上面的两个场景有什么关系呢?

平稳性

照片由亨特·哈里特Unsplash 上拍摄

机器学习模型的一个关键假设是“平稳性”——也就是说,正在建模的潜在概率分布不会改变。简而言之,这意味着系统无法对当前对其未来状态的预测做出反应。

金融危机之前,银行使用风险价值模型(VaR)计算风险。这些模型开始于 20 世纪 80 年代,有两个关键输入——特定资产的每日回报和不同资产之间回报的方差。利用这两条信息,可以构建一个概率分布,详细说明一个资产组合在某一天的最大可能损失。这两个值是怎么计算出来的?当然是历史数据!

然而,这一历史数据是从银行没有遭受严重损失的时期得出的。同样,在 2007 年之前,抵押贷款违约主要是个人不幸(如失业)的结果,因此彼此之间没有关联。然而,当贷款发放取决于房价上涨时,房价的任何下跌都可能导致许多违约。因此,在某些情况下,被认为具有低共方差的资产最终具有非常高的共方差。该系统仅在某些条件下是静止的。

当然,在许多情况下,平稳性假设是有效的。例如,考虑一种机器学习算法,该算法观察肿瘤的图像并预测肿瘤是癌性的可能性。肿瘤肯定不会对算法做出的预测做出反应,并在未来采取更好的“伪装”。

这并不是说机器学习在不稳定的环境中没有用——它们肯定有用。然而,在解释这种模型的结果时需要格外小心。防止模型故障的几种建议方法:

  1. 持续监控模型性能
  2. 良好的判断力——《彻底的不确定性》的作者建议问一个简单的问题——“这里发生了什么?”因此,就高盛而言,这意味着要意识到,大金融危机的金融环境意味着,他们的资产比他们的模型所假设的更加相关,因此他们的模型价值有限。这当然是一种溯因推理。

所以,框架的第一部分如下:模型环境越不稳定,对机器学习就越警惕。

决策重要性

拍摄的照片Unsplash

在第二种情况下,我们本能地对信贷价格的不同感到很不舒服,而不考虑个人的信用价值。走极端的话,想象一下法庭案件的判决完全由个人的总体情况决定,而不是由案件的具体情况决定。对个人来说,决定越重要,我们对以这种方式做出的决定就越不舒服。

我们的不公正感部分来自于没有考虑到每个案件的独特情况。仅仅因为他/她的背景的人通常是有罪的,有什么证据表明他/她犯了罪?如果一个事件是独特的,我们觉得似乎每个情况都需要根据它的优点来考虑。事实上,如前所述,事件越独特,机器学习在任何情况下提供合理预测的能力就越低。

我们的不公正感也部分源于错误决定对个人造成的后果。当然,我们都是独特的,但是很少有运动反对网飞建议的不公正。没被推荐好片的成本毕竟挺低的。然而,对于被自动算法筛选拒绝工作申请,我们可能会感到稍微不舒服一些。虽然我不是这个职位的典型申请人,但我肯定非常适合这个职位?为什么我被拒绝了?

越是独特的事件,我们越是以叙事的形式向对方解释事件。例如,特朗普赢得 2016 年总统大选是对希拉里·克林顿身份政治的回应。这些解释不能被有意义地描述为“最佳的”——事实上可能有许多相互竞争的解释。另一方面,机器学习根据历史相关性进行解释,因此很难解释和创建围绕某个事件的叙事。

同样,这并不是说机器学习不能用于重要的决策和独特的事件。然而,越是这样,我们越应该重视可解释性,并对我们模型的局限性做出正确的判断。

所以,框架的第二部分如下:一个决策越重要&一个事件越独特,对机器学习就越警惕。

例子

下面是几个机器学习的例子来说明这个框架的作用。

  • 一种癌症肿瘤检测算法——问题是固定的,但决策的重要性很高。可解释性是必需的,需要小心使用。
  • 数据中心优化(就像在 这个 案例中) —环境是静止的,每个决策的重要性都很低——很好地利用了机器学习。
  • 网飞推荐算法 —非平稳环境(人们的偏好随时间变化)但决策成本低——很好地利用了机器学习。
  • 临床试验预测 —不稳定的环境(新的试验设计范例、更高的护理标准)和决策成本高。可解释性是必需的,机器学习应该小心使用。

摘要

所以,总之,当你在处理机器学习的问题时,你应该问自己两个问题:

  1. 模型环境是静止的吗?
  2. 每个模型预测的重要性和独特性如何?

最后,如果这两种情况中的任何一种都适用,那么继续问《彻底的不确定性》的作者提出的问题总是值得的——“这里发生了什么”。它似乎只能以 Yogi Berra 的一句话来结束——“很难做出预测,尤其是对未来的预测”。

揭秘大数据

原文:https://towardsdatascience.com/when-someone-asks-you-what-big-data-is-5acfc28e9eaa?source=collection_archive---------72-----------------------

正确的解释

Unsplash 上由 Rohit Tandon 拍摄的照片

大数据是一个流行词,遍布文章、书籍、采访和其他地方。这是一个你可以很有哲理的术语。问每个人,每个人都有不同的说法。最常见的答案是“it-depends”和其他主要根据大数据的质量来定义大数据,因此没有太多从其他角度来定义它的内容。

在本文中,我将从不同的角度对大数据进行分解和解释,包括大数据质量的角度、有限物理资源的角度和数据分析的角度。

质量视角

数量、速度、准确性和多样性

这是定义大数据最常用的方法。有趣的是,它描述了几个以字母 V 开头的品质。一开始是四个容量、速度、准确性、多样性、,后来又引入了很多其他的。更大的容量、更高的速度、更大的准确性挑战以及超乎你想象的多样性是它们所传达的信息。这种增长对技术进步的现状提出了挑战,需要进一步的研究和开发来应对。由此得出的定义是:

大数据是指数量、速度、种类和准确性都比我们通常处理的数据更大的数据。数据可能具有所有这些品质,其中一些或只有一个。而且那还是大数据!

以这种方式定义大数据是一个很好的起点。到此结束没关系,但是你还没有标点后面的真正含义。

物理视角

大数据总是挑战技术发展的现状

大数据是一个进化术语。这是因为它与技术发展的现状紧密相连。2010 年被称为大数据的东西到 2020 年可能就不叫大数据了。或许在未来的几年里,这个术语将会消失,因为我们将拥有不再受到挑战的工具和资源。在这里,您可能会看到关于什么是大数据、什么不是大数据的不同定义,这些定义以某种方式与用于处理大数据的物理资源相关联。

如果传统工具在处理数量、速度、准确性、多样性和各种各样的数据时受到挑战,这些数据就称为大数据。

完全可以在一台普通机器上处理的数据,无论它具备什么样的品质,都不是大数据。

对于传统工具,您可能会想到我们通常安装在机器上的工具,以便轻松处理/分析数据。微软 Excel 就是其中之一。

分析视角

处理整个数据集,而不是其中的一个样本

大数据之所以存在,是因为我们希望更多地了解某些现象,而不是猜测它们可能是什么。如果我们回头看,即使没有技术支持,统计分析也是存在的。由于很难对描述一种现象的整个数据集进行分析,人们将其分析局限于数据样本。

有许多方法可以提取样本,尽可能接近地表示整个数据集。即使你能近似地做到这一点,你也永远不会达到 100%正确的表现。

从分析的角度来看,在大数据中,我们希望全面掌握正在发生的事情。我们希望在分析过程中考虑每一个数据点。从这里,衍生出另一个定义。

大数据是指在应用分析时考虑整个数据集,而不是其中的一个样本。

当然,大数据分析更多地旨在提取一般方向(即模式),而不是准确的结果,但这并不能否认这样一个事实,即考虑单个数据点比跳过更好。

云、物联网和 5G

无论何时解释什么是大数据,最后都要通过提及直接影响我们所知的大数据的技术发展来总结一切。云、物联网和最近的 5G,都是强化或放松大数据背后意义的重要因素。

一方的云是缓解大数据挑战的一大因素。由此带来的好处,尤其是资源的弹性(T2,为你的需求提供“无限”数量的资源)极大地帮助减轻了处理大数据的负担。

另一边的物联网和最近的 5G 不断提出大数据挑战。越来越多的数据以前所未有的速度生成和传输。这些技术因素相互交织,确保了大数据将长期存在。

总结

大数据是一个包含多种含义的术语。将答案分解为上述部分并加以解释,不仅有助于更好地理解大数据到底是什么,还能确保您对大数据有一个全新的思考。

当超级变大的时候。

原文:https://towardsdatascience.com/when-super-comes-big-ebcdf60a8d61?source=collection_archive---------80-----------------------

完成任何大数据项目的 8 个基本步骤

W 是“超级炒作”留下的帽子?没有人再谈论超自然最高级超级计算机。人们更喜欢谈论大企业、大数据,当然还有大王 XL。

很明显,任何大数据都有一定的炒作成分,因此大数据已经成为当今科技商业词汇的一部分。我们所说的大数据指的是我们为了特定目的想要存储或处理的大规模数据流:生成新的先前未知的见解。除了大数据,我们还发现了物联网(IoT)、机器学习(ML)或人工智能(AI)。

广义地说,当我们真的无法以传统方式(或在传统数据库中)处理时,我们会谈论一些“海量”的东西,但有一点很清楚:大数据仍然是数据。现在,我们所做的是将企业数据以及公司知道但尚未决定利用或不知道其有用性或潜力的其他信息包括在内并清除掉。

大数据仍然只是数据,然而,当许多人开始查看市场上的所有技术、在线课程、认证时,他们会迷失方向。

令人目不暇接吧?

在任何大数据项目中,我们必须遵循哪些步骤?

CláudioUnsplash 上拍摄的照片

如果你想了解更多,请访问 oscargarciaramos.com

1.了解业务。

我拒绝加入任何我不清楚或不明白其目的是什么的数据项目。 如果你不知道它,你就注定失败。

这是最重要的部分→ 了解业务。

这必须是我们在任何类型的数据或分析相关项目的第一步。

你的项目必须是公司、你的部门或你的团队的明确需求的答案。在你考虑数据之前,先和人们交谈,了解问题是什么。

2.有什么影响?

你损失了几百万美元吗?当收集或处理大量数据时,您的团队是否会损失效率或时间?这个问题如何影响您的业务?有时,没有必要开发一个非常完整的业务案例来理解我们项目的影响。有时候,理解一下就够了。

一旦明白…

3.我们如何衡量成功?

我们如何确保我们的项目成功?在我们的开发或项目过程中,将被监控和跟踪的度量标准或 KPI 是什么?

最重要的是…

4.我们增加了什么价值?

问题一旦解决,对公司意味着什么?

这一点很关键。我们是在推进这个项目还是它真的不值得?

这一点也可以作为项目成本或预算的证明。不仅仅是技术的复杂程度必须是一个项目或多或少昂贵的原因,而是它真正给公司带来的价值。

我为什么这么说?我们带来的价值不一定与解决问题所需的技术相关。我们从商业角度出发,我们会适应或寻找必要的技术来解决它。

大数据不是我们的目标,而是我们的驱动力。

如果我们不能定义和阐明这 1-4 个步骤,那么继续下一步就没有意义了。

一旦我们明确了项目的目标,就该开始考虑数据了。

5.数据要求

评估您的数据。我们在公司内部有可用的数据吗,还是必须去外面找?我们谈论的是结构化、非结构化还是半结构化数据?我们需要实时、近实时还是批量收集它们?更重要的是,我们的保留期或检索期是多长?我们说的是热数据还是冷数据?

6.云、本地或混合基础架构

是的,你没看错。有 3 种架构。

这是一个完全取决于公司的决定,做出这个决定需要分析许多方面,例如解决方案的实施、维护或所有权。

在黑色和白色之间有一个完整的灰色范围。我们是希望控制平台并由它直接控制,还是希望它由软件提供商托管?我们希望成本模型是什么样的,是在开始时通过收费(OnPrem)还是按使用付费(Cloud)进行大规模投资?我们是否确切知道解决方案的规模,或者我们是否需要一个可根据具体情况轻松扩展和适应的平台?最重要的是,数据安全性,我们是希望它掌握在我们自己手中,还是信任我们的供应商?

没有明确的解决方案,但是有很多方面可以讨论。也许,最好的解决方案是混合模式。不要忘记它,仍然考虑它。

7.找出差距

很少有公司拥有涵盖端到端完整大数据或分析项目的专家档案和完整能力。让我们不要害怕外包服务。让我们与不同的提供商或供应商交谈,不要把他们视为敌人,而是可以依靠的人。让我们找出这些差距,并确保根据这些需求来规划项目。

最后…

8.让我们变得敏捷

或者至少,一个 迭代方法 。让我们从试点、POC、MVP 开发、小用例开始……让我们不要试图从一开始就涵盖整个项目,它会以失败告终。

从大处着眼,从小处着手,快速行动。

这是关键。让我们定义可实现的和现实的里程碑。一旦我们验证了我们的试点项目,并且它们开始为公司创造价值,让我们将它投入生产。从来没有过。

那么,下一步是什么?

迭代,迭代,迭代。

数据项目令人着迷,因为它们从未停止改进。

我们可以说它是基于 持续学习 的术语,我们现在创造的东西,几个月就可以完善。

正如我之前所说的,让我们从小事做起,一些定义明确的事情,让我们看看它对公司的真正影响和价值,一旦定义好,让我们开始构建。

欢迎发表评论或分享这篇文章。关注 me 未来帖子。

如果你想了解更多,你可以在 oscargarciaramos.com找到我

当数据大潮退去,你发现谁在裸泳

原文:https://towardsdatascience.com/when-the-data-tide-goes-out-you-find-out-who-is-swimming-naked-7dae1d77ab82?source=collection_archive---------55-----------------------

为了在疫情生存,我们需要更好的数据!

像许多人一样,我试图了解冠状病毒的进展以及各组织试图如何应对它。一些社区团结得如此之好,一些领导人的透明度,前线人员的辛勤工作,以及许多其他人的共同牺牲,都让我深受鼓舞。我的总结观察是,我们不知道的压倒了我们知道的。我也没有看到收集所需数据的全面计划。

考虑以下片段:

问题:科学家们是否有他们需要的可信数据来自信地预测冠状病毒在未来三十天内会导致多少人死亡?

回答:“我们在不确定性之上还有不确定性”

问题:指导州、市、学校重新开放的人员是否具备平衡健康、经济和其他问题所需的检测和接触者追踪能力?

答案:《纽约时报》4 月 26 日周日头版头条为“各州权衡重开之际,检测依然稀缺”

问题:新型冠状病毒抗体检测有用吗?我们知道有多少人得了这种病并康复了吗?答案:否,否。研究人员认为 14 项测试中有 11 项不可靠。虽然已经进行了一些小规模的研究,但我们还远远不知道这种疾病已经发展到什么程度。

问题:我们知道冠状病毒已经导致了多少人死亡吗?

答:不同的直辖市统计死亡的方式不同,定义也在不断变化。

问题:理发、参加晚宴、和朋友握手安全吗?

回答:“看情况。”流行病学家对他们个人预计何时恢复一系列正常活动没有达成共识。

很难想象在这种情况下我们如何前进。科学模型、好的决策以及这些决策的执行都依赖于全面、及时和准确的数据。没有它,太多的事情就变成了猜测,并被突发奇想、政治和恐惧所左右。这些不完整、不可信的数据可能会被用来混淆视听、误导和分散责任。最后,每个人都受到了影响,包括仍然不知道孩子的夏令营是否会开放的家长、不知道他们何时(甚至是否)会有工作的酒店员工,以及试图让最少的人休假的企业领导人。

在这场危机中,人们很容易为缺乏好数据找借口。毕竟,这种疾病仍然是新的,所需的能力是如此复杂。但事情是这样的:在危机之前,糟糕的数据也主导了 : 它搞乱了模型,导致凭猜测做出决策,导致执行不力。沃伦·巴菲特说过,“只有当潮水退去,你才能发现谁在裸泳。”虽然数据不是巴菲特的本意,但他的观察是为当前形势量身定制的。在这里,“退潮”就是“疫情进来”,“裸泳”就是“缺乏自信前行所需的可信数据!”如果《纽约时报》最近的一篇文章是正确的,疾病控制中心一直在裸泳。不幸的是,当涉及到数据时,其他政府机构和许多公司也在裸泳。所以这个借口也已经过时了。

没有简单的解决办法。不过,我确实有一个建议,可以帮助人们理清自己知道什么和不知道什么。多年来,我已经教了数百人一个简单的四步过程,来形成一个“我们需要知道什么”的全面图景,并缩小这个图景和“我们确实知道什么”之间的差距我在这里提供它,是为了帮助政府、医疗保健和商业领袖,以及其他相关人员,应对危机,规划复苏,并超越危机。

第一步是理清“我们真正需要知道的是什么?这个问题需要仔细思考。人们常常陷入对自己所拥有的东西的索取中,甚至不想去问。从头脑风暴开始。把人们聚集在一个虚拟的房间里,向他们提出问题,并把结果记录在一个大家都能看到的大黑板上。团队通常会列出长长的清单——50 个甚至更多的需求。

练习的下一部分是筛选出大约十几个最重要的项目。您可以通过逐步消除优先级较低的项目来实现这一点。为了完成练习,请非常清楚地总结您“最重要的需求”。领导人可能会发现,对之前提出的问题的回答是最重要的,但他们可能需要更多的细节:总死亡率只能到此为止——真正需要的是按年龄和当前健康状况分列的死亡率。同样,包装商品公司的领导团队可能会发现月销售额生产能力在其列表中非常突出。**

第二步是确保与这些需求相关的语言清晰明了。对于死亡率,这意味着他们必须决定什么才算冠状病毒导致的死亡。37 岁,经历了冠状病毒样症状,然后自我隔离,死在家里,但从未接受测试,这算吗?那位已经与晚期癌症作斗争的 93 岁老人在检测呈阳性后去世了呢?这样的细节还有很多。

澄清语言通常比领导者预期的更难——毕竟,定义在他们头脑中是清楚的。问你的员工,“我们是否都同意预计销售额的含义”,你几乎肯定会得到一个热情的无条件回答:“是的,当然。”但是坚持下去:让你的人写下他们的定义。许多人会有麻烦,而那些被写出来的定义之间的差异会让你震惊!这些差异反映了缺乏一致性,这已经在很多方面阻碍了你。它们必须得到解决!

不幸的是,没有简单的方法来获得你所需要的一致。一个组织派了十几个高管去参加一个务虚会,研究调和财务和运营数据所需的定义。你不能马上撤退,但你必须做出同样的努力。

使事情复杂化的是,有时您必须在多个层次上开发所需的定义。比较全球死亡率为评估公共政策选择、治疗和检测方案的有效性提供了机会。没有一个“冠状病毒导致的死亡”的共同定义,这项任务是令人担忧的,敲定一个需要时间。因此,你必须清楚地知道你是如何统计死亡人数的,并努力达成共识。

第三步是严格比较“我们需要知道的”和“我们实际知道的”,并努力缩小差距。逐项工作,尽可能诚实。那个包货公司确实需要知道销售额(每月),但它拥有的是预计销售额。在过去的几年中,预计销售额是基于合同、销售人员的投入和历史违约率。但鉴于当前的危机,这些信息都不可信。

你可能会发现这些比较分为三大类:

我们有我们需要的东西:你可能会在这个类别中找到一些商品。

我们有一些我们需要的东西,但是太多的数据丢失或不正确。很多比较都会属于这一类。幸运的是,处方很简单(如果不熟悉的话)——从源头上改善。确保信息来源了解你的需求和第二步中的定义。然后让他们负责根据这些需求和定义创建数据

我们有很大很重要的缺口,只能通过寻找新的来源来填补。死亡率属于这一类——到目前为止,还没有足够的测试能力来开发所需的统计数据。所以,发挥创造力——建立关系网,看看其他人是如何解决这个问题的,利用你的政治影响力,寻找能填补部分空白的替代品。

第四步性质不同。那就是:将这项工作作为跳板,让更深入地理解高质量数据在构建你的未来中扮演的关键角色,并投资于你生产和使用这些数据的能力。我怎么强调这一点都不为过。尽管有“数据是新的石油”的宣传和数量上的雪崩,各种形式的坏数据是一个长期存在的问题。不懈的努力找出你真正需要知道的东西,并努力缩小差距,这是比依靠猜测更好的选择。重要的是,这与技术无关,而与人有关——这个练习只需要一个 Google Hangouts 链接和白板!

高质量的数据是我们抗击疾病、恢复和让事情走上更好的道路的最佳武器。把获得它作为第一项工作!

当中位数对平均数有利时

原文:https://towardsdatascience.com/when-the-median-is-favorable-to-the-mean-c5b01b149ec0?source=collection_archive---------35-----------------------

选择更合适的描述性统计

运动鞋订单价格

平均值中位数是描述数字数据时最常用的两个特征。这两者被称为集中趋势的度量,这意味着它们通过揭示数据的中心位置来描述一组数据。平均值是平均值——这是将所有数据相加,然后除以数据集中的点数得到的值。另一方面,中位数是一组数据中从最小到最大排序后的中间数。

*Data: 1, 8, 3* • Mean --> (1 + 8 + 3) / 3  =  **4**• Median --> 1, 3, 8 --> **3**

虽然平均值看起来像是描述数据时使用的逻辑度量,但情况并非总是如此。当谈到平均值时,它有一个关键的缺点——平均值很容易受到数据中异常值的影响。以上面图表中的数据为例。以上数据代表运动鞋订单的成本。正如我们所见,绝大多数数据都在图表的左侧。

数据的描述

当我们看一下上面的数据描述,我们看到 75%的运动鞋购买成本为 390 美元或更少。但是,如果我们取这个数据的平均值,我们的平均值将等于 3,145.13 美元。显然,这个数字不能非常准确地代表我们的数据。在这种情况下,一些严重的异常值(如果我们查看描述中的最大值,我们可以看到差异)会极大地影响平均值,因此,我们最好使用中值作为该数据集的报告指标。我们的中位数是 284 美元,利用运动鞋市场的领域知识,这更好地代表了我们的数据和运动鞋销售的总体情况。

显然,在决定使用哪种指标来表示数据之前,查看数据的分布是非常重要的。如果数据呈正态分布(均匀形状),平均值可能是一个合适的描述符。然而,如果数据像我们在这里看到的那样是倾斜的,中间值可能是更好的选择。

参考资料:

[## 集中趋势测量

集中趋势的度量是试图通过识别集中趋势来描述一组数据的单个值

statistics.laerd.com](https://statistics.laerd.com/statistical-guides/measures-central-tendency-mean-mode-median.php)

当教皇谈论 AI 的时候

原文:https://towardsdatascience.com/when-the-pope-talks-ai-3f84446050cc?source=collection_archive---------35-----------------------

你应该听。

一个自愿的承诺,罗马呼吁人工智能伦理,通过一个“算法伦理”的愿景促进“人类大家庭”,以及当梵蒂冈谈论技术时预期的畏缩。但是,这是一个巨大的新闻,这样一个缓慢的建立,教会,正在推动更多的透明度和谨慎。

照片由来自 PexelsPixabay 拍摄。

一种人工智能。世界自动化革命的总称。现在,看起来教皇已经明白了,所以我相信我们肯定达到了 99%的采纳率。最古老的学校机构天主教会正在推动对这些强大的技术进行更多的监管、理解和警告,这是一个巨大的新闻。

《人工智能罗马呼吁》将计算机视觉人脸过滤器、预测广告和互联网工具的日常机器学习模块描述为在改善社会共存和个人福祉、增强人类能力以及实现或促进许多任务方面提供了巨大的潜力。

出于某种原因,这篇文章说,结果不是定量的(嗯,机器学习是纯粹的数值决定边界),而是“它们是* 定性的 ,因为它们影响了这些任务的执行方式以及我们感知现实和人性本身的方式。”看到教会偏离科学并不奇怪,但是当它已经把自己置身于野外时,你还能期待什么呢?相反,他们认为新技术应该服务于整个人类大家庭(引用了联合国的《世界人权宣言》)。*

作为业内人士,这里所有的宣传和新术语淡化了这篇文章可能对“算法条件反射”产生的任何潜在影响,但我很高兴我们正在接近普遍承认人工智能需要争论。让我们来看看梵蒂冈是如何努力将人工智能的好处最大化的(由 IBM 和微软的副总裁发起)。在这些文章中,我喜欢关注人工智能的潜力,而不是所有已知的缺点,因为现代社会更有可能在创新上超越新问题,而不是回去修补原因。

人类大家庭。

梵蒂冈对人工智能伦理的看法充满了流行语,他们创造的试图引人注目的新短语,以及一颗完整的心。健康、公平的人工智能的新推进的范围包括三个必需的实现:

  1. 包括每一个人。这些技术需要为每个人服务。现在,技术偏向于他们的训练集,所以有用的工具为富裕的人工作(我们手机上的普通面部识别技术对白人更成功并且监视聚焦于少数民族(例如这个针对黑人的仇恨言论探测器)。
  2. 人类内心的善良。虽然这些技术需要每个人都可以使用,但平均来说,它们必须对人类有益。这是一个伟大的观点,可以推动像脸书的无处不在的技术(和重音)。研究单个人工智能的累积效应至关重要——例如设计自动驾驶汽车,使其与一起工作,而不是单独工作。
  3. 保护地球。一个大的。人工智能系统通过能源使用造成巨大的环境负荷。保护地球对于单个公司来说是极其困难的(再次强调,公司倾向于为了短期的经济利益而做出边缘决策),但却是绝对重要的。

“algor-伦理”愿景。

支持人类大家庭的未来算法的愿景分为三个部分——带有一些有用的见解。

伦理学

小册子的正文开始写道:“人人生而自由,在尊严和权利上一律平等。这一节没有什么特别新的东西,如果你想知道人工智能偏见的危险以及为什么我们应该避免它,去读一读吧。

教育

这一承诺必须体现在对教育的承诺上,开发跨越人文学科不同学科的具体课程。这篇文章最有见地的观点就在这一部分——它将老年人视为需要继续教育项目的主要群体。作为千禧一代,我几乎跟不上科技进步的速度,我们都见证了无数父母和祖父母的落后。

那些不懂技术的人将越来越无法保护自己免受操纵。

随着老龄化人口越来越落后,这种提醒需要被广泛推广。我的祖父母已经成为电话诈骗的目标——我知道他们将被粘性广告和生殖媒体的大脑偏见所操纵。

权利

“解释的义务。”许多呼吁伦理的人忽略了一个结论——理解和透明的需要。我们从业者知道深度神经网络记忆数据,并使其适合编织的非线性变换,但我们如何解释我们的数据集?我们需要将我们的系统视为集成的解决方案——这些工具会影响未来的数据。如果当前的系统有偏差,未来的系统越来越有可能是。在数据偏差失控之前,需要结束一个解释循环。

从文字到代码

我和我的同事们可以愉快地签署这一承诺,并让我们对我们的工作感觉更好,但这不会改变影响或轨迹。这篇文章关注的是在这个领域工作的人应该如何感受和计划他们的工作,而不是他们如何实施。一次又一次,人类已经表明他们会为了利益和声望做出递增的、自私的决定。

作为一个 AI 从业者,我知道这个具体的文件什么也做不了。将这些词语和理念转化为代码和产品的更好方法或下一个方法是什么?**

公司需要以大胆的行动来跟进广泛的支持。我们已经看到了大公司为了积极的媒体关系在副业项目上投资了多少(例如 GoogleX,脸书的各种公共人工智能研究,慈善事业等等。),但如果一家公司 1) 承认其产品具有操纵性,2) 采取行动减轻它们造成的问题,波动可能会更大。

来源—作者:见过一次教皇,好多相机。平安夜服务 2012。

最后,教皇公司提出以下原则:

这里的质押是这里的

  1. 透明 :原则上,AI 系统必须是可解释的;
  2. :必须考虑到所有人的需求,使每个人都能受益,并为所有个人提供尽可能好的条件来表达自己和发展;
  3. 责任 :设计和部署 AI 使用的人,必须以责任和透明为出发点;
  4. 不偏不倚 :不偏不倚地创造或行事,从而守护公平和人的尊严;
  5. 可靠性 : AI 系统必须能够可靠地工作;
  6. 安全与隐私 :人工智能系统必须安全工作,尊重用户隐私。

你可以在这里阅读全文,或者签名(或者在这里找到我的标记版本)。不要误会我的意思,我很高兴这个具有巨大影响力的机构正试图为人们指明正确的方向,只是遗憾的是,这在伦理人工智能领域是一件大事。我们需要更多的讨论方式,更重要的是 投资

我最喜欢的毛茸茸的朋友给我指出了 AI 的这个有趣的部分。

何时假设神经网络可以解决问题

原文:https://towardsdatascience.com/when-to-assume-neural-networks-can-solve-a-problem-203cf94039cb?source=collection_archive---------55-----------------------

实用指南

来源于 Wikimedia Common,最初来自 Maggie Black 的“Den medeltida kokboken”,是中世纪食谱的瑞典语翻译

问题:“我们应该假设哪些问题可以用机器学习来解决?”,甚至更狭隘,更专注于当前的发展“我们应该假设神经网络能够解决什么问题?”,是一个我没怎么见过的称呼。

有像 PAC learning 和 AIX 这样的理论,乍看起来似乎围绕着这一点,因为它一般属于机器学习,但如果实际应用于实践,不会产生任何有意义的答案。

但是,当有人就某个具体问题问我这个问题时,只要我能看一看数据,我往往能给出一个相当合理的自信回答。

因此,我认为写下产生这种答案的启发法可能是有帮助的。我绝不认为这些在科学意义上是精确的或基于证据的,但我认为它们可能是有帮助的,甚至可能是进一步讨论该主题的良好起点。

1.如果另一个最大似然算法已经成功,那么神经网络几乎肯定可以解决问题。

给定一个可以通过现有的最大似然技术解决的问题,我们可以假设一个稍微通用的神经网络,如果允许它明显更大,也可以解决它。

比如体面的下棋,也是已经解决的问题。这可以使用小型决策树和一些非常简单的定制搜索试探法来完成(例如参见https://github . com/AdnanZahid/Chess-AI-TDD)。因此,我们应该假设一个相当通用的神经网络,使用比基于 DT 的原始模型多得多的参数。

事实上,这似乎是的情况,你可以使用一个相当普通的全连接网络来下棋,而不需要任何额外的内置试探法或专门用于此目的的架构。

或者,使用任何“玩具”数据集,例如在 UCI 上的数据集,使用像 Sklearn 这样的库找到最合适的经典 ML 模型,然后尝试使用sk learn 提供的相当简单的神经网络,如果你将 _hidden_layer_sizes 设置得足够大,无论你在比较什么模型,你几乎肯定会获得匹配的性能。

这个假设并不总是成立的,因为:

  • a)取决于架构,神经网络可能很容易无法优化给定的问题。例如,对于具有大窗口和步长的卷积网络来说,下棋可能是不可能的,即使它非常大。
  • b)某些最大似然技术有许多内置的启发法,对于神经网络来说可能很难学习。现有的最大似然技术不能有任何关键的启发性,或者至少你必须能够将同样的启发性包含到你的神经网络模型中。

由于我们主要关注可推广的神经网络架构(例如,全连接网络,这是大多数人听到“神经网络”时首先想到的),a)点是非常不相关的。

考虑到大多数启发式算法同样适用于任何模型,甚至是像国际象棋这样的模型,并且这个规模有时足以让网络能够学习启发式算法,这个规则基本上每次都适用。

我实在想不出一个反例…也许是一些特定类型的数字投影?

这是一个相当无聊的第一条规则,但值得作为一个起点来阐述。

2.神经网络几乎肯定能解决与已经解决的问题非常相似的问题

假设您有一个基于几个参数来预测给定债权人风险的模型,例如当前余额、以前的信用记录、年龄、驾照状态、犯罪记录、年收入、就业时间、{关于当前经济环境的各种信息}、孩子数量、婚姻状况、过去 60 天访问的色情网站。

假设这个模型“解决”了你的问题,也就是说,它比 80%的人类分析师更好地预测了风险。

但是 GDPR 滚滚向前,你不能再合法地通过购买那些数据来窥探你的一些客户的互联网历史。你需要为这些客户建立一个新的模式。

您的输入现在被截断,客户的在线色情历史不再可用(或者说无可否认是可用的)。

假设你仍然可以建立一个合理的模型来解决这个问题,这安全吗?

答案几乎肯定是“是的;鉴于我们对这个世界的了解,我们可以有把握地假设某人的色情浏览历史与他们的信用评级没有其他参数那么相关。

另一个例子:假设你知道别人在用一个模型,但是他们的数据和你的略有不同。

你知道一家总部位于美国的专注于蛇的宠物店,它利用以前的购买来推荐产品,他们告诉你这对他们的底线来说做得很好。你是一家总部设在英国的鹦鹉宠物店。如果根据你的数据进行训练,你能相信他们的模型或类似的模型能解决你的问题吗?

同样,正确答案很可能是“是”,因为数据足够相似。这就是为什么建立一个产品推荐算法在 20 年前是一个热门话题,但现在每个人和他们的妈妈都可以为它获得一个 WordPress 插件,并接近亚马逊的水平。

或者,更严重的是,假设你有一个检测乳腺癌的给定算法,如果对 100,000 张图像进行训练,并进行后续检查以确认真正的诊断,该算法的表现比普通放射科医生更好。

你能假设,如果有能力把它变大,你能建立一个模型来检测其他类型的软组织中的癌症,也比放射科医生更好吗?

同样,答案是肯定的。这里的论证更长,因为我们不太确定,主要是因为缺乏数据。我差不多花了一整篇文章论证答案仍然是肯定的。

在 NLP 中,完全相同的神经网络架构似乎在任何语言中都能很好地进行翻译或文本生成,只要它属于印欧语系并且有针对它的大量数据(即,相当于用于训练现有英语模型的数据)。

现代的自然语言处理技术似乎能够处理所有的语系,而且他们是用越来越少的数据来处理的。然而,在某种程度上,数据的相似性和训练样本的数量与模型快速概括许多语言的能力紧密相关。

或者看看图像识别和对象检测/装箱模型,主要的瓶颈是大量良好标记的数据,而不是图像的内容。边缘情况是存在的,但是一般来说,如果足够多的例子被输入到最初为不同图像任务设计的架构中(例如,为 Imagenet 设计的卷积残差网络),所有类型的对象和图像都可以被识别和分类。

此外,给定一个在 Imagenet 上训练的网络,我们可以保留初始权重和偏差(本质上是网络“已经学习的”),而不是从头开始,并且它将能够从该起点更快地在不同的数据集上“学习”。

3.神经网络可以解决人类可以用小数据点和很少或没有上下文来解决的问题

假设我们有两个从未见过的物体的 20x20px 黑白图像;它们“明显不同”,只是不为我们所知。有理由假设,给定一堆训练例子,人类将相当擅长区分这两者。

给定一堆例子(比如说 100 个),假设几乎任何有数百万个参数的神经网络都会像人类一样面对这个问题也是合理的。

你可以把这想象成要学习的信息量。在这种情况下,我们有 400 个像素,每个像素有 255 个值,因此有理由假设每个可能的模式都可以用我们方程中的几百万个参数来解释。

但是“小数据点”在这里的意思是这个定义的关键。

简而言之,“小”是以下各项的函数:

  • 你模型的尺寸。模型越大,它能学习的模式越复杂,你可能的输入/输出就越大。
  • 答案的粒度(输出)。例如 1,000 个类别对 10 个类别,或者 0 到 1,000 的整数范围对 0 到 100,000 的整数范围。在本例中为 2。
  • 输入的大小。在本例中为 400,因为我们有一个 20x20 的图像。

以 MNIST 这样的经典图像分类任务为例。尽管已经做了一些小的改进,MNIST 的艺术水平并没有多大进步。在过去的 8 年中,已经从大约 98.5%提高到大约 99.4%,两者都在通常的“人为误差范围”内。

相比之下,在输入和输出规模方面,一些更大的公司,如 ImageNet,在过去的 8 年里,其份额从 50%跃升至近 90%

事实上,即使使用前 CNN 技术, MNIST 基本上是可以解决的

但是,即使把“小”定义为上述的函数,我们也没有实际函数的公式。我认为这要困难得多,但我们可以想出一个适用于大多数情况的“廉价”答案——事实上,这正是我们所需要的:

  • 当相同或更大输入和输出大小的其他任务已经通过机器学习在单个 GPU 上使用多个架构解决时,给定的任务可以被视为小任务

这可能听起来像一个愚蠢的启发,但它惊人地适用于大多数“简单”的机器学习问题。例如,现在许多 NLP 任务比大多数“视频”任务更先进的原因是大小,尽管在网络架构方面图像有了巨大的进步(更接近视频领域)。视频上有意义的任务的输入和输出大小要大得多;另一方面,即使 NLP 是在一个完全不同的领域,它在大小上更接近图像处理。

那么,“很少到没有上下文”是什么意思?

这是一个比较难的问题,但是我们可以依靠“大”和“小”上下文的例子。

  • 预测股市可能需要大量的背景知识。一个人必须能够更深入地挖掘要投资的公司;查看市场基本面、最近的盈利电话、高管层的历史;了解公司的产品;也许从它的雇员和顾客那里得到一些信息,如果可能的话,得到关于即将到来的销售和合并的内部消息,等等。

你可以尝试纯粹根据股市的指标来预测股市,但这不是大多数人解决问题的方式。

  • 另一方面,基于环境中的温度和湿度来预测给定印刷机的产量至少在某种程度上可以通过上下文来解决。在机器上工作的工程师可能知道某些部件在某些条件下表现不同。然而,在实践中,工程师基本上会让打印机运行,改变条件,观察产量,然后得出一个方程。因此,给定这些数据,机器学习算法也可能提出同样好的解决方案,甚至更好的解决方案。

在这种意义上,ML 算法可能会产生类似于数学家在解方程的结果,因为对于人类来说,上下文基本上是不存在的。

当然有一些限制。除非我们在 4000℃下测试我们的机器,否则算法无法知道产量将为 0,因为机器会熔化;工程师可能会怀疑这一点。

因此,我可以将第三个原则表述为:

在下列情况下,通用神经网络可能解决问题:

  • 人类可以解决它
  • 具有相似规模的输出和输入的任务已经被同等规模的网络解决了
  • 人类拥有的大部分相关上下文数据都包含在我们算法的输入数据中。

随意改变我的想法(用例子)。

然而,这仍然需要根据人的表现进行评估。但是机器学习的许多应用之所以有趣,正是因为它们可以解决人类无法解决的问题。因此,我认为我们可以更进一步。

4.当我们合理地确定神经网络是确定性的,我们提供任何相关的上下文作为输入数据的一部分,并且数据相当小时,神经网络可以解决问题

这里我将回到我最喜欢的一个例子——蛋白质折叠。科学中为数不多的几个问题之一,在这些问题中,数据很容易获得,解释和意义不会被大量的理论包袱所混淆,并且根据我们以前的定义,数据点的大小足够小。你可以把这个问题归结为:

  • 大约 2000 个输入特征(三级结构中的氨基酸),尽管这意味着我们的领域将只覆盖 99.x%的蛋白质,而不是字面上所有的蛋白质。
  • 大约 18,000 个相应的输出特征(三级结构中的原子位置数,又名形状,需要预测具有该结构)。

这是一个例子。像大多数 NLP 问题一样,“大小”变得非常主观,我们可以很容易地认为这种类型的输入需要热编码;然后大小突然变成 40000(有 20 个蛋白质氨基酸可以被 DNA 编码)或者 42000(如果你关心硒蛋白,如果你关心真核生物中不出现的小生境蛋白就变成 44000)。

也可以认为,输入和输出的大小要小得多,因为在大多数情况下,蛋白质要小得多,因此我们可以屏蔽和丢弃大多数情况下的大多数输入和输出。尽管如此,从一个 255x255 像素的图像到生成另一个 255x255 像素的图像还有许多任务(样式变换、分辨率增强、样式转换、轮廓映射等)。因此,基于这一点,我认为蛋白质折叠数据相当少,过去几年也是如此。

事实上,通过神经网络的分辨率增强和通过神经网络的蛋白质折叠几乎是同时出现的(请注意,每种架构都是相似的)。但是我跑题了;我把相关性误认为是产生它的因果过程。话又说回来,这是当今大多数自封的“科学”的基础,那么,违背科学方法又算什么呢?

根据我自己对这个问题的研究,似乎即使是一个非常简单的模型,比 VGG 之类的东西简单,也能学到一些关于蛋白质折叠的“有意义”的东西。如果给定足够的(1.35 亿)参数并在 RTX2080 上进行半天的训练,它可以比随机猜测更好,并且经常与原子的实际位置相差 1%。我不能确定准确的准确性,因为对于非领域专家的人来说,这里的准确评估标准显然很难找到和/或理解和/或实现…或者我只是愚蠢,也有很大的可能性。

据我所知,第一个广泛成功的蛋白质折叠网络 AlphaFold 虽然使用了一些特定领域的试探法,但却使用了剩余的 CNN,这是一种为图像分类而设计的架构,与蛋白质折叠没有任何关系。

这并不是说任何架构都可以解决这个问题。这意味着我们不需要建立一个全新的技术来处理这类问题。这是一种神经网络可以解决的问题,尽管它可能需要一点时间来寻找可以做到这一点的确切网络。

这里另一个重要的事情是,这个问题似乎是确定性的。即:

  • a)我们知道,在我们大多数模型假设的惰性环境中,肽可以折叠成蛋白质,因为我们一直观察到它们是这样做的。
  • b)我们知道氨基酸是能够完整描述肽的一种成分
  • c)因为我们假设环境总是相同的,并且我们假设折叠过程本身不会改变它,所以问题不是环境的函数(注意,显然在体外折叠的情况下,在体内问题变得更加困难)

问题出现在思考 b)的时候,也就是说,我们知道宇宙可以确定性地折叠肽;我们知道氨基酸足以准确描述一种肽。然而,宇宙并不与“氨基酸”一起工作,它与小得多的粒子之间的万亿次相互作用一起工作。

因此,虽然这个问题是确定性的和独立的,但不能保证学习折叠蛋白质不需要学习一个完整的粒子物理模型,这个模型能够将每个氨基酸分解成更小的功能组件。几百万个参数不足以完成这项任务。

这就是第四个最普通的定义最难应用的原因。

这里的一些其他例子是像预测维护这样的事情,机器学习模型被积极地用于解决人类无法解决的问题,至少没有数学模型是不行的。对于这些类型的问题,基于现有的数据,有充分的理由假设这些问题是部分(大部分?)确定性。

这里有更简单的例子,但是我想不出任何一个,在它们出现的时候,不属于前面的三个类别。至少,没有不属于强化学习的。

绝大多数例子都属于强化学习,一旦人们能够模拟它们,就可以解决大量的问题。

人们可以找到最佳的空气动力学形状,设计怪异的天线以提供更有效的接收/覆盖,击败像 DOT 和 Starcraft 这样比象棋或围棋复杂得多(就自由度而言)的视频游戏。

RL 的问题在于,设计实际的模拟往往比用它来寻找有意义的答案要复杂得多。RL 做起来很有趣,但通常不会产生有用的结果。然而,边缘情况确实存在,设计模拟似乎比从中提取推论更容易。除此之外,基于我们对有效模拟物理的理解,模拟的进步越多(这本身就得到 ML 的帮助),这样的问题就越多。

最后

我试图提供一些简单的启发式方法来回答“什么时候我们应该期待神经网络可以解决问题?”。给定足够的架构搜索和当前的 GPU 能力,我们的默认假设应该包括哪些问题的可解性?

概括一下,神经网络什么时候能解决你的问题?

  1. [几乎可以肯定]如果其他 ML 模型已经解决了这个问题。
  2. 【非常高的概率】如果一个类似的问题已经被一个最大似然算法解决了,而这个问题和你的问题之间的差别似乎并不显著。
  3. [高概率]如果输入和输出足够小,在大小上可以与其他工作的 ML 模型相比,并且如果我们知道除了输入和输出之外,一个人可以用很少的上下文来解决问题。
  4. [合理概率]如果输入和输出足够小,在大小上与其他工作的 ML 模型相当,并且我们对问题的确定性有很高的把握(也就是说,输入足以推断输出)。

我不确定这些规则中的任何一个,但是这回到了能够说一些有意义的事情的问题。PACL 可以给我们几乎完美的确定性,并且在数学上是有效的,但是它不能解决简单的分类问题。

提出这种规则并不能提供一个精确的确定度,它们来自于经验观察。然而,我认为它们实际上可以应用于现实世界的问题。

事实上,在某种程度上,当客户或朋友问我某个问题是否“可行”时,这些就是我应用于现实世界问题的规则。这些似乎非常接近我注意到的其他人在思考什么问题可以解决时使用的规则。

我希望这可以作为该领域新手的实际实践指南,或者对于不想过多参与 ML 本身但有一些数据集需要处理的人。

本文原载于我的博客:https://blog . cerebral ab . com/When _ to _ assume _ neural _ networks _ can _ solve _ a _ problem

如果您喜欢这篇文章,您可能也会喜欢:

根据我的经验,何时不使用 AI 或使用它

原文:https://towardsdatascience.com/when-to-not-use-ai-or-use-it-based-on-my-experience-abb58c063aba?source=collection_archive---------4-----------------------

照片由V . babi enko拍摄

我拥有机器学习博士学位,拥有 16 年在产品中部署可扩展解决方案和数据科学以实现收入和用户留存最大化的经验,包括 JustGiving 的 2600 万用户。作为初创企业和风投的导师和战略数据科学顾问,以下是我对何时应该和不应该使用 AI 的专家意见。经常有人问我如何开始使用人工智能?、如何在我的产品中集成 AI?”,或者“我怎样才能用 AI 获得研究资助?”鉴于我的上有大量关于如何根据我的经验在数据科学、人工智能或大数据领域工作的文章,我想我会在一篇新的帖子中把这些内容放在一起,特别是关于何时适合使用人工智能以及不适合使用人工智能

什么是人工智能(AI)?

首先,人工智能是一个通用术语,研究人脑和智能系统,人工智能通常是一个移动的目标,你可以说你的汽车,洗衣机和电话都内置了某种形式的人工智能。人工智能包括多学科,如数学、心理学、物理学、生物学、神经科学和计算机科学,旨在模仿计算机上的某种形式的智能。它是如何实现的是使用机器学习(ML),自然语言处理(NLP)。其中进一步细分为神经网络、深度学习、强化、集成学习等。

让我们关注机器学习。人工智能不是魔法,人工智能和传统编程的主要区别在于,模型通过训练从数据中学习,而不是编写规则。模型具有参数和权重,当它使用不同的算法学习时,这些参数和权重被调整。然后,我们使用测试数据集来检查模型的准确性或性能。

在 B2B 和 B2C 的 ML / NLP 中,数据就是一切

没有大量的数据,你的算法将无法被训练或测试。例外情况是,例如遗传算法或强化学习,它们有一个适应度函数,奖励/后悔它们正在优化。但在我看来,它们在商业领域的应用有限,除非你在运行某种形式的模拟、驾驶、玩视频游戏、天气预报、有机化学建模等。我曾经与一家高性能计算( HPC )供应商讨论过一个用例,我将在电子商务或 B2C 中使用模拟,他们很难回答我的问题。举例来说,如果我有 2600 万真实用户来运行测试,我为什么还要模拟事件或用户呢?

我没有数据,但仍然想使用人工智能

如果你没有产生、捕获或拥有历史数据,例如,你有一个新的用例或者是一个初创企业,那么仍然有可能使用 ML 和 NLP。通过寻找现有的开放数据集,如 KaggleAWS美国政府的开放数据或获得许可,为您的公司找到数据。这可以用来训练和测试你的初始模型。随着贵公司的发展和变得更加成熟,您将能够获取更多数据,并利用更好的培训/测试数据来改进模型。

数据科学家是合适的人选吗

对于那些仍然认为数据科学是 21 世纪最性感的工作的人来说,请再想一想,你将会把 80%的时间花在数据准备工作上,包括清理、标准化、规范化、塑造数据。只有这样,你才能达到人人都在谈论的 人工智能建模和可视化。如果从这个角度来看,这与数据分析师和商业智能报告创建者日复一日所做的事情有许多相似之处,只是人工智能建模除外,因为他们对业务数据进行操作,并了解关键绩效指标和业务指标。我喜欢提升现有员工的技能,让他们成为数据科学家,因为他们拥有业务和领域知识,并且已经在处理数据。

此外,成功的数据科学家很少单独工作,他们需要成为更广泛的商业智能/数据工程团队的一部分,以某种可查询的形式准备数据,集成产品变化的开发人员/开发人员,以及帮助将模型推向生产环境的机器学习工程师。

离线数据科学与产品数据科学

您可以通过两种方式在组织中使用数据科学:离线数据科学产品中的数据科学

离线数据科学可以在笔记本电脑上进行,涵盖市场研究、客户/客户分析或 A/B 测试等任务。在这里,数据科学模型不会在生产中部署,而是对历史数据进行分析。这样做有巨大的好处,因为它补充了你现有的商业智能,并有助于塑造成功的产品。

在我看来,为了充分利用数据科学,它需要直接嵌入到您的产品和服务中,而不是事后思考,即您只是在事件或行动之后分析离线数据。这需要在预算、团队、高管支持和公司战略方面做出更大的承诺。

产品中的数据科学要复杂得多,成本也高得多,你需要合适的团队。我见过或采访过的很多数据科学家都不是优秀的开发人员。他们需要考虑使用笔记本以外的东西,笔记本有利于探索,但不利于将模型部署到产品中。一些云提供商确实帮助创建批量推理引擎和推理 API。然而,重要的是他们理解和学习最佳软件工程实践,并开始像开发人员一样思考测试、部署管道和可伸缩性。我也不认为他们应该独自完成这项工作,你需要 DevOps、开发人员和数据/机器学习工程师与他们合作。如果您希望在产品中部署模型,以便在用户浏览您的网站或应用程序时,直接向他们提供匹配、建议或预测,这是非常重要的。每一个网站和应用程序都在完成屏幕时间,所以任何改进都可以在保留(B2C)或生产力(B2B)方面产生巨大的差异。然后,你当然需要衡量模型相对于随机分组和/或硬编码规则的性能,如果性能下降,就采取行动。

值得加 AI 吗?

在商业中,我们经常谈论投资回报(ROI)来建造或购买任何东西。这同样适用于 ML 和 NLP,它会花费你多少精力、时间和金钱,相对于拥有一个全栈开发人员可以在一天内部署的硬编码规则集,回报会是什么?

让我们看看人工智能炒作之外的东西:

  • 用例:会用到哪里?我发现,在商业中,这主要是在匹配、推荐、预测或向你所在领域或部门的用户或客户提出建议的领域。
  • ROI:it 是否会通过增加收入/生产率和/或减少成本/时间来增加价值。总是将这与使用人类完成任务或使用没有人工智能的正常软件开发过程进行比较。
  • 易于支持 : Netflix Prize 是一个很好的例子,当性能最好的模型由于工程成本和在产品中运行的复杂性而没有用于生产时。简单模型、预训练模型或没有人工智能更好,你可以更快地进入市场,特别是如果这些已经是解决的用例。例外情况是当你处理一个新的用例,做真正的研究开发,或者当然是你发表研究论文的大学研究。
  • 监控:您需要过程来监控模型的性能,因为任何推理的退化都可能影响 ROI。如果发生这种情况,您需要有应急措施,并快速回滚或重新培训新的模型。
  • 您是否拥有正确的数据:来自现有内部和/或外部来源的适合所选用例的充足且正确的数据。
  • 梦之队:数据科学家不能孤立工作,他们需要被开发人员、工程师、产品经理和 DevOps 团队包围。

只是让数据科学团队重聚

后续步骤

大多数具有开发人员或计算机科学背景的人应该能够理解 ML 和 NLP 的概念。不要试图只招募数据科学家的人工智能大军,他们仍然需要正确的数据用例以及 ROI梦之队,这是我认为你在制定数据科学相关的商业案例、研究提案或与投资者交谈时应该开始做的事情。如果您有任何问题/意见,或者如果您需要短期指导、战略咨询或数据科学执行顾问,请随时通过 LinkedIn 与我联系。

什么时候该说什么时候该听

原文:https://towardsdatascience.com/when-to-talk-and-when-to-listen-47ac0f13712b?source=collection_archive---------80-----------------------

来自数据工程师的教训。

来源: Unsplash

随着我目前的数字化项目一周年纪念日的临近,我回过头来看看能从这次经历中学到什么。SWIFT 项目旨在开发过程的早期向产品开发人员提供有关我们全球制造工厂的信息。输出将是 Tableau 中的数据收集工具和商业智能报告。目标很简单,但我们在微观和宏观层面不断遇到障碍。

在宏观层面,本组织发生了巨大的变化。我们的部门正在经历向云的战略转移,变得更加以数据为导向。这包括重大的组织结构调整。其中之一是一个新的数据分析团队,其定位更接近业务。这个新团队取代了我的位置。对于新的商业智能项目,如 SWIFT,我的团队在技术方面处于领先地位。以前,业务方面将驱动所有需求,而它将处理技术方面或与第三方的任何开发沟通。在 SWIFT 项目的模糊要求和设计决策方面,由谁牵头,这是一个充满不确定性的新动态。我相信这种宏观层面的变化是这个项目面临诸多挑战的基础。

在微观层面,我是围绕收集业务需求的所有讨论的中心。最终报告所需的大部分数据并不存在,因此早期的对话是关于需要捕获哪些数据以及每个项目之间的关系。最初的请求被翻译成 35 个不同的数据字段。出于多种原因,我立即开始缩减这个庞大的项目。除了这需要投入大量的时间,我们还采用了敏捷方法来尽可能快地启动这个项目。当我们就数据字段的子集达成一致并在它们的关系上取得进展时,我们遇到了一个主要的障碍。

该项目增加了新的主题专家,他们可以提供来自全球的更专业的知识。这种扩展的结果是,新的数据字段被请求,以前确定的数据关系现在受到质疑。每次随后的会议都有十个或十个以上的人参加。你必须有选择地问哪些问题,以及如何清楚地提出要求。我记得不断调整我的方法来发现哪对数据字段有多对多的关系。有时我的请求会被错误地解释,但我从来不清楚什么时候应该打断谈话。我所能做的最好的事情就是倾听,等待正确的机会来修正航向。

截至今天,我们仍在进行这个项目,但我很高兴地说,我们正在直播。虽然在改进数据收集工具和报告方面仍然存在一些挑战,但我们从一开始就取得了重大进展。项目范围最终缩小到 9 个领域,数据模型被设计成灵活的,以防我们扩大数据收集工作。如果没有数据分析团队对降低项目复杂性的不断抵制,我认为我们不会“投入使用”。

这个项目提供了许多宝贵的经验。最重要的是要理解这种模棱两可的性质,因为什么时候是我们说话的时间,什么时候是我们倾听的时间。史蒂夫·乔布斯说过这样的话:“我们的工作是在他们做之前弄清楚他们想要什么”。作为一名数据工程师,有时您需要像史蒂夫·乔布斯一样思考,以便引导各利益相关方沿着技术简单的正确道路前进,同时仍然满足他们的需求。
数据通才

Kaggle 比赛中什么时候用 CPUs vs GPUs vs TPUs?

原文:https://towardsdatascience.com/when-to-use-cpus-vs-gpus-vs-tpus-in-a-kaggle-competition-9af708a8c3eb?source=collection_archive---------2-----------------------

每一个机器学习算法的背后都是数千兆赫兹的硬件运算。在设置 Kaggle 笔记本时,您可能已经注意到了几个处理器选项,但哪一个最适合您呢?在这篇博文中,我们比较了使用 CPU(英特尔至强 *)与 GPU(英伟达特斯拉 P100 )与 TPUs ( 谷歌 TPU v3 )来训练使用 tf.keras 编写的机器学习模型的相对优缺点(图 1**)。我们希望这能帮助你理解这些选项,并为你的项目做出正确的选择。

我们如何准备考试

为了比较 CPU vs GPU vs TPUs 在完成常见数据科学任务方面的性能,我们使用 tf_flowers 数据集来训练一个卷积神经网络,然后使用三个不同的后端运行完全相同的代码三次(CPU vs GPU vs TPUs;GPU 是英伟达 P100,配有英特尔至强 2GHz(双核)CPU 和 13GB RAM。TPU 为 TPUv3 (8 核),配有英特尔至强 2GHz (4 核)CPU 和 16GB RAM。附带的教程笔记本展示了让您的 TPU 发挥最佳性能的一些最佳实践。

例如:

  1. 使用分片文件的数据集(例如。TFRecord
  2. 使用 tf.data API 将训练数据传递给 TPU
  3. 使用大批量(例如 batch_size=128)

通过在工作流中添加这些先行步骤,可以避免常见的 I/O 瓶颈,否则会阻止 TPU 充分发挥其潜力。你可以通过访问官方的 Kaggle TPU 文档找到优化你的代码在 TPUs 上运行的额外技巧。

硬件表现如何

我们测试的三种硬件类型之间最显著的差异是使用 tf.keras 训练模型所用的速度。tf.keras 库是最受欢迎的机器学习框架之一,因为 tf.keras 使快速试验新想法变得容易。如果您花更少的时间编写代码,那么您就有更多的时间来执行计算,如果您花更少的时间等待代码运行,那么您就有更多的时间来评估新的想法(图 2)。tf.keras 和 TPUs 在参加机器学习比赛时是一个强大的组合!

在我们的第一个实验中,我们对所有三种硬件类型使用了相同的代码(官方教程笔记本的修改版本*** ),这需要使用非常小的批量 16,以避免 CPU 和 GPU 的内存溢出错误。在这些条件下,我们观察到,在训练一个异常模型时,与 CPU 相比,TPU 的速度提高了约 100 倍,与 GPU 相比,速度提高了约 3.5 倍(图 3)。由于 TPU 在处理大批量时运行效率更高,我们还尝试将批量增加到 128,这导致 TPU 的速度提高了约 2 倍,并且出现了 GPU 和 CPU 的内存不足错误。在这些条件下,TPU 能够训练一个exception模型,速度比之前实验中的 GPU 快 7 倍以上****。

观察到的模型训练加速因模型类型而异,Xception 和 Vgg16 的性能优于 ResNet50(图 4)。模型训练是我们观察到 TPU 以如此大的优势胜过 GPU 的唯一任务类型。例如,我们观察到,在执行少量预测时,我们手中的 TPU 比 CPU 快大约 3 倍,比 GPU 慢大约 3 倍(TPU 在某些情况下进行预测时表现异常,例如对非常大的批次进行预测,这在本实验中不存在)。

为了补充这些结果,我们注意到等人。al 开发了一个名为 ParaDnn [1]的严格基准,可以用来比较不同硬件类型的性能,用于训练机器学习模型。王等人用的就是这种方法。al 能够得出结论,当使用 TPU 而不是 GPU 时,参数化模型的性能优势从 1 倍到 10 倍不等,真实模型的性能优势从 3 倍到 6.8 倍不等(图 5)。当与分片数据集、大批量和大模型相结合时,TPU 表现最佳。

训练车型时的价格考虑

虽然我们的比较对硬件一视同仁,但在价格上有相当大的差异。TPU 的价格大约是 GPU 的 5 倍(Nvidia Tesla P100GPU 的1.46 美元/小时对比GPU 的8.00 美元/小时谷歌 TPU v3 对比4.50 美元/小时GCP 具有“按需”访问功能的 TPUv2)。如果您试图优化成本,那么使用 TPU 是有意义的,如果它训练您的模型的速度至少是使用 GPU 训练相同模型的 5 倍。

当数据以分片格式存储在 GCS 存储桶中,然后以大批量传递给 TPU 时,我们始终观察到模型训练速度提高了约 5 倍,因此我们向熟悉 tf.data API 的注重成本的消费者推荐 TPU。

一些机器学习实践者优先考虑减少模型训练时间,而不是优先考虑减少模型训练成本。对于那些只想尽可能快的训练他们的模型的人来说,TPU 是最好的选择。如果你花更少的时间训练你的模型,那么你就有更多的时间迭代新的想法。但是不要相信我们的话——你可以通过在一个免费的 Kaggle 笔记本上运行你自己的代码来评估 CPU、GPU 和 TPU 的性能优势。Kaggle 用户已经在尝试 TPU 和文本数据方面获得了很多乐趣和成功:查看这个论坛帖子,它描述了 TPU 如何被用来训练一个 BERT transformer 模型,以在最近的 Kaggle 比赛中赢得 8000 美元(二等奖)。

您应该选择哪个硬件选项?

总之,我们推荐 CPU 是因为它们的多功能性和大内存容量。当你想加快各种数据科学工作流的速度时,GPU 是 CPU 的一个很好的替代选择,当你特别想尽可能快地训练一个机器学习模型时,TPU 是最好的选择。

通过针对您正在使用的特定硬件优化您的代码,您可以获得更好的结果,我们认为将针对 GPU 优化的代码的运行时与针对 TPU 优化的代码的运行时进行比较是非常有趣的。例如,记录使用 GPU 加速库(如 RAPIDS.ai )训练梯度增强模型所需的时间,然后将该时间与使用 TPU 加速库(如 tf.keras )训练深度学习模型所需的时间进行比较,这将非常有趣。

一个人训练一个准确的机器学习模型最少需要多少时间?你一天能评估多少不同的想法?当与 tf.keras 结合使用时,TPU 允许机器学习实践者花更少的时间编写代码,花更少的时间等待他们的代码运行——留下更多的时间来评估新想法和提高自己在 Kaggle 比赛中的表现。

引用的作品

[1] Wang Y,Wei G,Brooks D. 对深度学习的、GPU 和 CPU 平台进行基准测试。2019. arXiv: 1907.10701

[2] Kumar S,Bittorf V 等。艾尔。在谷歌 TPU-v3 吊舱上缩放 MLPerf-0.6 模型。2019. arXiv: 1909.09756

[3]茹皮·恩·扬等。艾尔。张量处理单元的数据中心内性能分析。2017. 2017 年 ACM/IEEE 第 44 届计算机体系结构国际年会(ISCA)

脚注

******* CPU 类型因可变性而异。除了英特尔至强处理器,您还可以分配到英特尔 Skylake、英特尔 Broadwell 或英特尔 Haswell 处理器。GPU 是英伟达 P100,配有英特尔至强 2GHz(双核)CPU 和 13GB RAM。TPU 为 TPUv3 (8 核),配有英特尔至强 2GHz (4 核)CPU 和 16GB RAM。**

**图 1 图片来自https://cloud . Google . com/blog/products/ai-machine-learning/cloud-TPU-breaks-scalability-records-for-ai-inference,经许可。

***修改了教程笔记本,以保持三个不同后端之间的参数(如 batch_size、learning_rate 等)一致。

****** CPU 和 GPU 实验使用了 16 的批处理大小,因为它允许 Kaggle 笔记本从上到下运行,而没有内存错误或 9 小时超时错误。当批量增加到 128 时,只有支持 TPU 的笔记本电脑能够成功运行。**

作为数据科学家何时使用 Java

原文:https://towardsdatascience.com/when-to-use-java-as-a-data-scientist-74e5f2ec8c80?source=collection_archive---------18-----------------------

图像来源

虽然 Python 和 R 为数据科学家处理广泛的问题提供了丰富的生态系统,但在某些情况下,应该探索其他编程语言,包括 Java 和 Go。我发现,随着我将注意力从批处理 ML 管道转移到实时传输数据流或具有低延迟需求的数据产品上,Java 的实践经验变得越来越有用。尽管提高 Java 编程语言可能需要付出大量的努力,但我遇到过一些情况,在这些情况下,了解 Java 是有益的。

-您负责模型生产
-您正在构建一个低延迟系统

我认为学习 Java 是获得应用科学家职位的有用途径,这比大多数数据科学职位更侧重于工程。虽然 Python 仍然是我日常任务的首选语言,无论是在 PySpark 中构建大规模批处理管道,还是使用 Flask 或 Dash 构建交互式 web 应用程序,利用 Java 意味着我可以探索构建更广泛的数据产品。在这篇文章的剩余部分,我将更详细地探讨这些话题。

你负责模型制作

在大型组织中,通常会将数据科学家从构建基础架构和管理实时数据产品的职责中分离出来。相反,数据科学家可能会使用 Databricks 等平台来运行预定的笔记本,或者使用 PMML 等格式将模型规格交给工程团队,工程团队负责基础设施和系统维护。像 AWS SageMaker 这样的工具让小团队更容易将模型部署到生产中,但它是一个专有的 AWS 工具,并不是每个数据产品的最佳选择。数据科学家发展职业生涯的一种方式是更多地参与将模型投入生产。

用于将 ML 模型产品化的最佳工具将取决于模型的服务方式,其中预测用于实际服务或产品中。例如,作为流管道
的一部分应用的模型将使用与作为 API 托管的模型不同的组件。不同类型的模型工作流的特征生成步骤也可能有很大差异。当您负责构建端到端的数据产品时,您实际上是在构建一个数据管道,从源中获取数据,根据检索到的数据计算特征,将模型应用于生成的特征向量或张量,并将模型结果存储或传输到另一个系统。虽然 Python 非常适合建模培训,并且有模型服务工具,但它只涵盖了这个流程中的一部分步骤。

这是 Java 真正闪光的地方,因为它是用来实现许多最常用的构建数据管道工具的语言,包括 Apache Hadoop、Apache Kafka、Apache Beam 和 Apache Flink。如果您负责构建数据产品的数据检索和数据聚合部分,那么 Java 提供了广泛的工具。此外,接触 Java 意味着您将积累许多大数据项目所使用的编程语言的经验。

我在数据工作流中实现这些步骤的首选工具是 Cloud Dataflow,它基于 Apache Beam。虽然许多数据管道工具支持多种运行时语言,但 Java 和 Python 选项之间可能存在显著的性能差异。例如,与使用预构建的 Java JAR 文件相比,在云数据流上运行的 Python 管道在获取和构建所需的库时可能会遇到启动时间长的问题。

您正在构建一个低延迟系统

将 Ml 模型公开为 HTTP 端点是将模型产品化的一种常见方式。Python 库(如 Flask)支持这种功能,但如果您有大吞吐量或低延迟需求,这些库的性能可能会出现问题。例如,您可能需要为用户实时构建特征向量,其中有一个事件流的消防站。这通常涉及到使用 NoSQL 数据库,因为来自关系数据库的延迟对于系统来说太大而无法有效运行。

如果你需要为模型实时构建特征向量,并将预测作为终点,那么 Java 为实现这一目标提供了丰富的生态系统。Java 可以用于流行的 NoSQL 产品,包括 Redis、MongoDB 和 Couchbase。还有各种 web 框架来支持 web 端点,包括 Spring MVC、Netty 和 Rapidoid。虽然 Python 可以提供相同的功能,但它通常不用于高吞吐量的应用程序,如 Ad Tech。

结论

虽然 Python 对于大数据生态系统中越来越多的工具变得可行,但仍然有数据科学家可以从利用 Java 中受益的用例。然而,学习 Java 是否有用取决于您组织中的工程团队是否已经在使用 Java 并计划继续用 Java 创作新系统。Zynga 的一部分团队就是这种情况,能够直接为生产代码库做出贡献对于更快地交付数据产品非常重要。随着应用科学家角色的崛起,以及在初创公司工作的数据科学家,这变得越来越普遍。

本·韦伯是 Zynga 的一名杰出的数据科学家。我们正在招聘

何时使用 Pandas transform()函数

原文:https://towardsdatascience.com/when-to-use-pandas-transform-function-df8861aa0dcf?source=collection_archive---------6-----------------------

一些最有用的熊猫把戏

照片由巨浪 926Unsplash 上拍摄

Pandas 是一个令人惊叹的库,它包含大量用于操作数据的内置函数。其中,transform()在你想要操作行或列的时候非常有用。

在本文中,我们将介绍以下最常用的熊猫transform()功能:

  1. 转变价值观
  2. 结合groupby()的成果
  3. 过滤数据
  4. 在集团层面处理缺失值

请查看我的 Github repo 获取源代码

1.转变价值观

我们来看看pd.transform(**func**, **axis=0**)

  • 第一个参数*func*是指定用于操作数据的函数。它可以是函数、字符串函数名、函数列表或轴标签字典- >函数
  • 第二个参数 是指定*func*应用于哪个轴。0用于将*func*应用于每一列,而1用于将*func*应用于每一行。

让我们借助一些例子来看看transform()是如何工作的。

一项功能

我们可以传递一个函数给func。例如

df = pd.DataFrame({'A': [1,2,3], 'B': [10,20,30] })**def plus_10(x):
    return x+10**df.transform(**plus_10**)

您也可以使用 lambda 表达式。下面是plus_10() : 的λ当量

df.transform(**lambda x: x+10**)

字符串函数

我们可以将任何有效的熊猫字符串函数传递给func,例如'sqrt':

df.transform(**'sqrt'**)

函数列表

*func*可以是功能列表。例如编号中的sqrtexp:

df.transform(**[np.sqrt, np.exp]**)

轴标签的字典->函数

*func*可以是轴标签的字典- >功能。例如

df.transform(**{
    'A': np.sqrt,
    'B': np.exp,
}**)

2.组合groupby()结果

熊猫transform()最引人注目的用途之一是结合grouby()的结果。

让我们借助一个例子来看看这是如何工作的。假设我们有一个关于连锁餐厅的数据集

df = pd.DataFrame({
  'restaurant_id': [101,102,103,104,105,106,107],
  'address': ['A','B','C','D', 'E', 'F', 'G'],
  'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'],
  'sales': [10,500,48,12,21,22,14]
})

我们可以看到每个城市都有多家餐厅有销售。我们想知道“每家餐厅在该城市的销售额占多大比例”。预期的输出是:

这个计算中棘手的部分是,我们需要得到一个city _ total _ sales并将其组合回数据中,以便得到百分比。

有两种解决方案:

  1. groupby()apply()merge()
  2. groupby()transform()

解决方案 1: groupby()apply()merge()

第一个解决方案是用groupby()分割数据,用apply()聚集每个组,然后用merge()将结果合并回原始数据帧

第一步:用 **groupby()** **apply()** 计算出城市 _ 总 _ 销售额

city_sales = df.**groupby('city')**['sales']
             .**apply(sum)**.rename('city_total_sales').reset_index()

groupby('city')通过对城市列进行分组来拆分数据。对于每个组,函数sum应用于 销售 列,以计算每个组的总和。最后,新列被重命名为city _ total _ sales,索引被重置(注意:reset_inde()需要清除groupby('city')生成的索引)。

此外,熊猫还有一个内置的[sum()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.sum.html#pandas.Series.sum)功能,下面是熊猫的sum()等价物:

city_sales = df.groupby('city')['sales']
             **.sum()**.rename('city_total_sales').reset_index()

第二步:使用 **merge()** 函数合并结果

df_new = pd.**merge**(df, **city_sales**, how='left')

对于左外连接,使用merge()how='left'将分组结果合并回原始数据帧。

第三步:计算百分比

最后,可以计算百分比并进行格式化。

df_new['pct'] = **df_new['sales'] / df_new['city_total_sales']**
df_new['pct'] = df_new['pct'].apply(**lambda x: format(x, '.2%')**)

这当然有助于我们的工作。但是这是一个多步骤的过程,需要额外的代码来获得我们需要的形式的数据。

我们可以使用transform()函数有效地解决这个问题

解决方案二:groupby()transform()

这个解决方案改变了游戏规则。一行代码就可以解决应用和合并问题。

第一步:使用 **groupby()** **transform()** 计算城市 _ 总 _ 销售额

执行转换后,转换函数会保留与原始数据集相同数量的项目。因此,使用groupby后跟transform(sum)的一行步骤返回相同的输出。

df['city_total_sales'] = df.groupby('city')['sales']
                           .**transform('sum')**

第二步:计算百分比

最后,这与求解百分比的方法相同。

df['pct'] = **df['sales'] / df['city_total_sales']**
df['pct'] = df['pct'].apply(**lambda x: format(x, '.2%')**)

3.过滤数据

transform()也可以用来过滤数据。这里我们试图获得城市总销售额大于 40 的记录

df[df.groupby('city')['sales'].transform('sum') > 40]

4.在组级别处理缺失值

Pandas transform()的另一个用途是在组级别处理缺失值。让我们通过一个例子来看看这是如何工作的。

这是一个用于演示的数据框架

df = pd.DataFrame({
    'name': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'value': [1, np.nan, np.nan, 2, 8, 2, np.nan, 3]
})

在上面的例子中,数据可以按名称分成三组,每组都有缺失值。替换缺失值的常见解决方案是用均值替换 NaN。

我们来看看各组的平均值。

df.groupby('name')['value'].mean()name
**A    1.0
B    5.0
C    2.5**
Name: value, dtype: float64

这里我们可以使用transform()用组平均值替换缺失值。

df['value'] = df.groupby('name')
                .**transform(lambda x: x.fillna(x.mean()))**

好了

感谢阅读。

请在我的 Github 上查看笔记本的源代码。

如果你对机器学习的实用方面感兴趣,请继续关注。

你可能会对我的其他一些熊猫文章感兴趣:

更多可以从我的 Github 中找到

什么时候用 PowerShell 代替 Shell 脚本?

原文:https://towardsdatascience.com/when-to-use-powershell-instead-of-shell-scripts-f71852fcb465?source=collection_archive---------62-----------------------

罗曼·辛克维奇在 Unsplash 上拍摄的照片

假设我们需要编写一段代码,负责替换现有文件中一条信息,或者只是定期清理一个目录。

要解决这些情况,您认为什么工具可以简单地完成这项工作?

在我看来,shell 脚本是这项工作的合适人选。为什么我会相信?因为它们编写简单、易于理解、易于维护。

对,那么为什么我需要使用其他工具来做同样的工作并得到同样的输出呢?其实你没有,我的想法只是换个方式来说明:)

重要的事情先来

在这里你可以找到关于 Powershell 安装的完整文档。

好了,不多说了,我们来编码吧。

使用 Powershell 将数据替换到文件中

回到我们的场景,当我们想要替换现有文件中的一条信息时。假设我们有一个 json ,它有多个层次,如下所示:

替换字符串值

假设我们想要将“文件名”替换为类似“myAwesomeApp-${shortdate}”的内容。日志”,我们的代码可能是这样的:

文件更新时间:

现在,稍微复杂一点:

从数组中移除项目

现在,我们的目标是当“minLevel”是“Info”时删除“rule”。我们的 PowerShell 脚本可以是:

输出:

全部放在一起,然后进行一些重构

现在我们可以把所有这些放在一起,做一个小的重构:

最后一个文件是:

结论

就像上面的一切一样,没有绝对的真理,你可以做任何你想做的事情,你想做的事情,你可以毫无问题地工作。

但是在我看来,当你想把“面向对象”的行为带到你的任务中时,你应该使用 PowerShell 脚本。

你怎么想?你同意吗?你不同意吗?如果有你认为重要的补充,请告诉我:)

非常感谢您的宝贵时间!

最初发布于https://devan dops . cloud/when-use-powershell-inst-of-shell-scripts/

何时使用柯尔莫哥洛夫-斯米尔诺夫检验

原文:https://towardsdatascience.com/when-to-use-the-kolmogorov-smirnov-test-dd0b2c8a8f61?source=collection_archive---------4-----------------------

理论、应用和解释

Unsplash 上由 Nerfee Mirandilla 拍摄

动机

假设检验在许多应用中被使用,而且这种方法看起来很简单。然而,很多时候,我们往往会忽略潜在的假设,并需要问:我们是在拿苹果和桔子做比较吗?当数据科学家决定放弃基于缺失特征的观察时,问题也出现了。

假设我们有特征f1, f2,… fn和一个二元目标变量y。假设许多观察结果缺少一个或多个特征的信息,我们决定删除这些观察结果(行)。通过这样做,我们可能已经改变了一个特征fk的分布。将这个问题公式化为一个问题:删除观测值会改变特征的分布吗?这个变化意义重大吗?

在这篇文章中,我们将提出一些 t 检验的假设,以及 Kolmogorov-Smirnov 检验如何验证或否定这些假设。也就是说,尽早声明 t 检验和 KS 检验测试的是不同的东西是至关重要的。

对于每一步,我们将介绍理论并用 Python 3 实现代码。如需完整示例,请随意阅读 jupyter 笔记本:https://github . com/NadimKawwa/Statistics/blob/master/KS _ test . ipynb

t 检验的局限性

有些情况下,我们应该怀疑 t 检验的结果。t-检验假设情况产生正常的数据,不同之处仅在于一种情况下的平均结果不同于另一种情况下的平均结果。

也就是说,如果我们对来自非正态分布的数据进行 t 检验,我们可能会增加出错的风险。根据中心极限定理 (CLM),随着对照组/治疗组变得足够大,t 检验变得更加稳健。

然而,在我们有足够大的样本的情况下,t 检验仍然可能失败。

具有相同平均值的小型数据集

考虑下面代码块中随机生成的两个样本:

两个样本都是从具有相同均值的正态分布中生成的,但是通过目测,很明显两个样本是不同的。t 检验可能无法发现这种差异,并自信地说两个样本是相同的。

使用 scipy.ttest.ttest_ind 对这些样本进行 t 检验,得出大于 0.05 的 p 值。因此,我们不能拒绝相同平均分的零假设。

不同均值相同分布

假设我们生成两个均值不同的小数据集,但非正态分布掩盖了差异,如下面的代码所示:

如果我们事先知道数据不是正态分布的,我们就不会一开始就使用 t 检验。考虑到这一点,我们引入一种方法来检查我们的观察值是否来自参考概率分布。

KS 测试

KS 检验是非参数和无分布的检验:它对数据的分布不做任何假设。KS 检验可以用来比较一个样本和一个参考概率分布,或者比较两个样本。

假设我们有我们认为来自分布 p 的观察值x1, x2, …xn,KS 检验用于评估:

  • 零假设:样本确实来自 P
  • 替代假设:样本不是来自 P

为了建立 KS 检验的直觉,我们后退一步,考虑描述性统计。众所周知,正态分布的平均值为 0,标准差为 1。因此,我们预计不超过 15%的数据低于平均值 1 个标准差以上。

我们将使用累积分布函数 (CDF)。更具体地说,我们将使用经验分布函数 (EDF):生成样本中点的累积分布函数的估计值。

CDF 的用处在于它唯一地表征了概率分布。我们希望将观察数据的经验分布函数 F_obs 与零假设相关的累积分布函数 F_exp 进行比较。

测试样本是否属于分配

在第一个例子中,假设我们的样本来自正态分布N(0,1)。我们希望将观察数据的经验分布函数与零假设相关的累积分布函数进行比较。

下面是设置这个实验的方法:

  • 按升序对观察值进行排序
  • 计算观测值的 CDF
  • 对于每个观测值,xi 计算 F_exp(xi) = P(Z ≤ xi)
  • 计算绝对差值
  • 记录最大差异
  • 计算临界值
  • 拒绝或接受零假设

实现相当简单:

下面的图直观地展示了我们正在做的事情。观察值F_obs由蓝色曲线表示,而理论值F_exp由橙色曲线表示。垂直的绿线是观测值和理论值之间的差异

如果我们的最大差异小于D_Crit,我们无法拒绝零假设。95%时的临界值近似为:

其中 n 是样本数。

两个样品的 KS

给定两个样本xy,我们希望测试它们是否来自同一个分布 p。首先改变的是接近 95%临界值的公式:

其中n_xn_y 是每个样本中的观察次数。

我们将从两个分布中随机生成两个随机样本:

为了比较这两者,我们实施了以下步骤:

  • 订购每个样品
  • 串联成一个排序数组
  • 计算两个样本的观测累积分布函数
  • 计算它们的最大绝对差值D_n
  • 对比D_crit

在实现代码之前,我们在下面的图中展示了我们的视觉目标。查看 CDF,我们可以直观地说,样本 a 和 b 不来自相同的分布。

在下面的代码块中,我们将实现前两步。

接下来,我们利用 scipy 的 percentileofscore 来计算 CDF,如下所示:

在我们的例子 D_crit=0.408中,不出所料,我们得到了D_n=0.6,我们拒绝了两者来自同一分布的无效假设。

结论

我们使用了 KS 检验来比较一个样本和一个参考概率分布,或者比较两个样本。在许多日常应用中,测试用于验证假设并帮助指导决策。

为了更快地实现,scipy 包提供了一个针对拟合优度两个样本的 KS 测试。

参考

维基百科:https://en . Wikipedia . org/wiki/Kolmogorov % E2 % 80% 93s mirnov _ testhttps://en . Wikipedia . org/wiki/Cumulative _ distribution _ function

圣本笃学院和圣约翰大学:http://www.physics.csbsju.edu/stats/KS-test.html

牛津大学统计系:http://www.stats.ox.ac.uk/~massa/Lecture%2013.pdf

预测新冠肺炎的顶峰

原文:https://towardsdatascience.com/when-will-covid-19-peak-96a41939ac33?source=collection_archive---------31-----------------------

流行病传播建模的简单指南

粘土银行Unsplash 拍摄的照片

全球新冠肺炎确诊病例:

  • 3 月 1 日:88585
  • 3 月 15 日:169511 人
  • 4 月 1 日:935,232

来源:https://www . worldometers . info/coronavirus/,最近一次访问时间为 2020 年 4 月 7 日

在撰写本文时,全球有超过 200 万例确诊病例。当政府采取行动使曲线变平时,统计学家和流行病学家开始预测它会蔓延多远。3 月 30 日和 31 日进行的一项专家调查估计到 4 月 5 日总病例数在 141,000 到 1,000,000 之间。但是为什么估算的差距如此之大呢?

这篇文章探索了用于预测传染病传播的模型背后的基本概念,比如新冠肺炎(不需要数学背景)。

设置

每个预测模型都有一套假设。我们称之为模型的基本设置。这里,我们将以 SIR 型号为例。规则是:

规则#1: 我们对规模为 N 的人群中的感染进行建模,其中 N 不变。

规则 2: 我们人口中的每个人一次只能处于三种状态之一:

  • 易受感染的:可能从其他感染者那里感染
  • I 感染:有感染,并能感染易感人群
  • R ecovered:免疫,不能再感染
    或再感染(注:特别针对新冠肺炎, SIS SIRS型号可能更合适。 我们还不知道 一个人是否会被再次感染)

规则#3: 人只能按顺序通过这三种状态过渡。从 S,到 I,到 r。

我们将使用这些字母作为人口中属于每个类别的人数的缩写。例如,如果我们对一个 100 人的群体进行建模,并且我们假设在第一天只有一个人被感染,我们会将其描述为:

  • N = 100(总人口规模)
  • S = 99,(易感人群的数量)
  • I = 1,(被感染的人数)
  • R = 0(康复的人数)

时代变迁

上面的简写可能是对当前形势的准确描述。然而,每组的人数随着时间的推移而变化。以下图表为例,说明一种传染病如何在我们假设的 100 人中传播:

  • 第一天: I = 1
  • 第 250 天: I = 74
  • 第 500 天: I = 51

如果不参考时间,我们之前对每个类别中人数的速记符号并不能告诉我们太多。为了更加清晰,我们做了一点小小的改进:

一般来说,我们将其记为 I(t) ,其中 t 代表时间(在本例中是天数)。我们可以用同样的方式描述易感者和康复者的数量:

通常,我们在同一个图表上绘制所有三条线,并像这样展示我们的模型:

现在我们已经有了模型的基本设置,我们如何使用它来进行预测呢?换句话说,以下两种模式的区别是什么?

答案是:

速度决定一切

这种差异可以用两个主要因素来解释:

  1. 疾病传播的速度有多快
  2. 一个人被感染后恢复的速度有多快

感染速度

决定疾病传播速度的因素有两个。

首先是这种疾病的传染性。把这想象成一个易感者接触到一个感染者后被感染的机会。这种被称为 遗传性 的感染。如果遗传率是 0.5,这意味着有 50/50 的机会。如果是 0.25,那么就有 1/4 的几率,以此类推。

第二个是人群中的人互相接触的频率。感染者和易感者相互接触越频繁,易感者被感染的可能性就越大。这被称为“平均接触率”。

感染传播的速度取决于的平均接触率* 。当我们把这些放在一起,就得到 传输率 。如果传染率高,传染病会传播得更快。*

传染率 =传染率平均接触率*

恢复速度

当一个人被感染时,他们会传染给其他人。一旦他们康复了,他们就不能再感染任何人或再次感染(还记得我们设置的规则吗?).恢复时间长有两个主要后果。首先是每个感染者会有更长的时间去传染其他人。第二是很多人同时被感染的可能性会更大。

举下面这个例子。让我们假设每个感染者每天接触 10 个易感者。如果只需要一天恢复,那就只有 10 次机会传染给另一个人。如果需要 10 天,就有 100 次传播感染的机会。现在我们假设同时感染组有 50 个人。现在每天有 5000 次传播疾病的机会。

一个人恢复需要多长时间被称为。如果恢复率较低(即,如果一个人需要更长时间恢复),传染病将传播得更快。

将所有这些放在一起

现在,我们已经有了将工作模型组合在一起的所有部分。

  • 感染开始时每组的人数
  • 传输速率
  • 回收率

有了这些信息,我们可以预测每组中有多少人会倒下,以及这将如何随时间变化。

易感

随着传染病的传播,易感人群会减少。我们使用以下公式对此进行建模:

  • 如果很大一部分人是易感人群,那么我们预计 s 的变化会更快,因为每个感染者都更容易与易感者接触。
  • 同样,如果大部分人口被感染,我们预计 s 的变化会更快,因为感染者和易感者有更高的机会进行接触。

被感染

感染人数随时间有两个变化。随着越来越多的人脱离易感人群,这一数字会上升,随着人们康复,这一数字会下降。我们需要在这里对两个部分进行建模。

  • 等式的第一部分与 s 中的变化完全相同(除了它是正的)。随着人们离开易感状态,他们进入了感染状态。
  • 等式的第二部分模拟康复人数变化的速度。恢复率仅适用于受感染的人口比例,因为只有那些受感染的人才能过渡到恢复状态。

恢复了

  • 这与 i 中变化的负部分相同(除了这里是正的)。那些离开感染状态的人,进入康复状态。

结束语

如果你已经做到了这一步,花一点时间思考一下你刚刚学过的内容。简单介绍一下数学:

控制 SIR 模型的微分方程组

您已经完成了:

  • 如何使用微分方程系统来模拟传染病的传播
  • ****隔间模型背后的概念(还有其他变体
  • 传染病传播速度背后的关键决定因素

记住,每个预测模型都有一套假设。没有完美的模式。虽然 SIR 有其优点,并形成了许多其他房室模型的基础,但它也有其局限性。这里有几个要记住:

  • 它假设人口规模不变(换句话说,不考虑出生、自然死亡或移民)
  • 它可能不适用于可能再次感染的情况(SIRS 或 SIS 模型在这种情况下可能更有用)
  • 它假设了一个“混合良好的人群”,人群中每个感染者和易感者相遇的几率足够接近模型中假设的平均接触率

更新—2020 年 5 月 25 日

传输和恢复率定义了基本再生数—** 这些房室模型中的一个关键变量。您可以在这里找到详细信息:**

** [## 基本生殖数字对新冠肺炎和医疗保健意味着什么

新冠肺炎会压垮我们的医疗系统吗?

towardsdatascience.com](/will-covid-19-overwhelm-our-healthcare-systems-f5bc49bc77a2)**

编者注: 走向数据科学 是一份以研究数据科学和机器学习为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

当您的 Docker 与 Pyspark 会面,对 10gb 以上的客户评论数据进行情感分析时——第 1 部分

原文:https://towardsdatascience.com/when-your-docker-meets-pyspark-to-do-sentiment-analysis-of-10-gb-customer-review-data-part-1-277633d39bba?source=collection_archive---------55-----------------------

来源:蒂亚戈梅洛,途经:

在这篇博客中,我将向您展示如何轻松使用 Pyspark 来处理千兆字节规模的数据集。好了,让我们开始吧:

开始!(图片来自@Pixabay 的@Pexels)

设置 Docker 引擎

现在,docker 将用于轻松下载 jupyter/pyspark docker 映像,然后使用它进行分布式处理。所以,你必须知道的第一件事就是你的 OS 是否有 Docker 引擎。

Linux 用户在这方面不会有问题,他们只需按照说明在他们的操作系统中设置 docker,链接如下:

【Linux 用户 Docker 手册:

对于 Windows 和 Mac 用户,您可以通过官方链接来设置 docker 引擎:

Docker 手册 Windows 用户:

Docker 手册 Mac 用户:

注:如果你是一名数据科学家/分析师,在阅读这篇文章时,我强烈推荐你使用 Linux 操作系统发行版,因为它真的会对你有所帮助,尤其是在将数据科学成果投入生产的时候。

现在,有了 Docker 引擎,我们必须做的下一件事是获得 pyspark 图像(如果您没有的话)。这可以通过 bash 中的以下命令轻松完成:

这是一个有点大的文件(大约 4.5GB),在提取后,我们需要使用命令行仔细检查我们的图像:

这是我们本地机器中所有图像的列表,我们可以看到jupyter/pyspark-notebook是我们将使用的图像之一:

现在,如果你的清单上有 jupyter/pyspark 笔记本,那太好了!

来源:疯狂宝贝 via: @imgflip

将本地目录连接到 Docker 容器

现在,您有了一个讨论大数据的 spark 映像。现在,由于大多数情况下,我们的大数据不在 docker 所在的目录中,我们需要将大数据集移植到容器,这样容器就可以直接访问数据,在我的例子中,以下代码进行了这种装载(我将在下面分解):

好了,我们来破解上面的代码,全面了解一下:

因此,它将流量从我们机器上的端口 8888 传递到 Docker 映像上的端口 8888,在本例中为(jupyter/pyspark-notebook)

在这里,用本地工作目录替换“~/Documents/pyspark_docker”。这个目录将被容器访问,这就是选项“-v”在代码中所做的。该目录可能是空的,您稍后将需要放一些文件。所以,如果你完成了上述步骤,现在 Jupyter 笔记本应该会出现在你的浏览器中,你将会有你的数据的确切路径。现在,如果您已经达到了这个阶段,那么恭喜您,现在您已经准备好使用大数据了:

来源:像素

在这项工作中,yelp 数据集将用于 spark 的分布式计算。此链接提供的 Yelp 数据集将被用作典型的商业大数据:

【Yelp 数据集的开源链接

对于这个特定的数据,我发现这个博客对数据的数据建模很有帮助,如下所示:

数据建模

来源:保罗·谢,via:

开始与 Spark 会话的数据争论

设置 Pyspark

通过 Spark 读取审查数据

仅从数据的规模来看,我们有大约 8000 万条评论,确实是一个大数据!:

来源:https://changhsinlee.com/pyspark-udf/,转自:张信利

number of rows:8021122
number of columns:9
root
 |-- business_id: string (nullable = true)
 |-- cool: long (nullable = true)
 |-- date: string (nullable = true)
 |-- funny: long (nullable = true)
 |-- review_id: string (nullable = true)
 |-- stars: double (nullable = true)
 |-- text: string (nullable = true)
 |-- useful: long (nullable = true)
 |-- user_id: string (nullable = true)

情感分析

在下面的代码中,我定义了 text_processing 函数,该函数将删除标点符号,使所有评论变成小写,并删除英文停用词:

在这一步中,您可能需要运行以下代码来安装 NLTK 包。

/opt/conda/lib/python3.7/site-packages/sklearn/utils/deprecation.py:144: FutureWarning: The sklearn.feature_extraction.stop_words module is  deprecated in version 0.22 and will be removed in version 0.24\. The corresponding classes / functions should instead be imported from sklearn.feature_extraction.text. Anything that cannot be imported from sklearn.feature_extraction.text is now part of the private API.
  warnings.warn(message, FutureWarning)

添加 clean_text 列

+--------------------+--------------------+
|          clean_text|                text|
+--------------------+--------------------+
|worked museum eag...|As someone who ha...|
|actually horrifie...|I am actually hor...|
|love deagans real...|I love Deagan's. ...|
|dismal lukewarm d...|Dismal, lukewarm,...|
|oh happy day fina...|Oh happy day, fin...|
+--------------------+--------------------+
only showing top 5 rows

好了,现在我们有了干净的文本,是时候做情感分析来看看每个评论的分数了

+-----+--------------------+
|score|          clean_text|
+-----+--------------------+
| 21.0|worked museum eag...|
|-11.0|actually horrifie...|
| 13.0|love deagans real...|
| -7.0|dismal lukewarm d...|
| 26.0|oh happy day fina...|
+-----+--------------------+
only showing top 5 rows
root
 |-- business_id: string (nullable = true)
 |-- cool: long (nullable = true)
 |-- date: string (nullable = true)
 |-- funny: long (nullable = true)
 |-- review_id: string (nullable = true)
 |-- stars: double (nullable = true)
 |-- text: string (nullable = true)
 |-- useful: long (nullable = true)
 |-- user_id: string (nullable = true)
 |-- clean_text: string (nullable = true)
 |-- score: float (nullable = true)

根据审查分数对业务进行分组

在这里,我对所有业务的平均分进行分组:

root
 |-- business_id: string (nullable = true)
 |-- avg(score): double (nullable = true)
209393

在 Markdown 中写入介质?试试马克迪姆

当回归模型的误差包含两个峰值时

原文:https://towardsdatascience.com/when-your-regression-models-errors-contain-two-peaks-13d835686ca?source=collection_archive---------15-----------------------

(图片由作者提供)

关于处理双峰残差的 Python 教程

原始残差是实际值和由经过训练的回归模型预测的值之间的差值。

残差=实际值-预测值(图片由作者提供)

残差的频率分布图可以很好地判断模型是否正确指定,即模型是否是数据集的正确模型,是否考虑了所有重要的回归变量,以及模型是否以无偏的方式拟合了数据。

您通常希望看到的是以零为中心的正态分布残差图,如下所示。

残差的正态分布频率图(图片由作者提供)

残差的正态分布频率图是一个精选的、合适的模型的标志。

但残差图往往是偏斜的,或者有厚尾或者薄尾,有时也不是以零为中心。有办法解决这些问题。有时人们不得不接受某种程度的不正常。

在本文中,我将向您展示当您的模型的残差变成双峰时该怎么办,即它们有两个峰值而不是一个,如下所示:

双峰频率分布(图片由作者提供)

数据集

我们将使用为期两年的租赁自行车日常使用数据集。以下是数据集的前 10 行:

租赁自行车使用计数(来源: UCI 机器学习库)(图片由作者)

数据集中的变量如下:

瞬间:行索引
dteday :以 dd-MM-yy 格式进行测量的日期
季节:当时的天气季节
:当时的年份:0=2011,1=2012
:当时的月份:1 日至 12 日
节假日:测量是否在节假日进行(T16) no=0)
weekday :星期几(0 到 6)
工作日:测量是否在工作日进行(yes=1,no=0)
weathersit :当天天气情况:1 =晴朗,少云,部分多云,部分多云。 2 =薄雾+多云,薄雾+碎云,薄雾+少云,薄雾。3 =小雪,小雨+雷雨+散云,小雨+散云。4 =暴雨+冰托盘+雷雨+薄雾,雪+雾。
temp :温度,归一化到 39C
atemp :真实手感,归一化到 50C
嗡嗡声:湿度,归一化到 100
风速:风速,归一化到 67
休闲 _ 用户 _ 计数:休闲自行车租赁者计数
注册 _ 用户 _ 计数:注册(会员)自行车计数

你可以从这里下载数据集

回归模型

我们将建立一个回归模型,其中因变量registered_user_count ,而解释变量或所谓的协变量如下:
季节、月份、假日、工作日、工作日、天气、温度、atemp、哼声、风速

由于我们正在建模计数,我们将使用 Python statsmodels 库中的泊松回归模型

让我们从导入所有必需的包开始:

**import** pandas **as** pd
**from** patsy **import** dmatrices
**import** numpy **as** np
**import** statsmodels.api **as** sm
**import** statsmodels.stats.stattools **as** st
**import** matplotlib.pyplot **as** plt

将数据集加载到 Pandas 数据框中:

df = pd.read_csv(**'bike_sharing_dataset_daywise.csv'**, header=0, parse_dates=[**'dteday'**], infer_datetime_format=True)

创建训练和测试数据集:

mask = np.random.rand(len(df)) < 0.8df_train = df[mask]df_test = df[~mask]print(**'Training data set length='**+str(len(df_train)))print(**'Testing data set length='**+str(len(df_test)))

Patsy 语法创建回归表达式。我们说 registered_user_count 是因变量,它依赖于~右侧提到的所有变量。

expr = **'registered_user_count** ~ **season** + **mnth** + **holiday** + **weekday** + **workingday** + **weathersit** + **temp** + **atemp** + **hum** + **windspeed'**

设置 X、y 矩阵:

y_train, X_train = dmatrices(expr, df_train, return_type=**'dataframe'**)y_test, X_test = dmatrices(expr, df_test, return_type=**'dataframe'**)

建立和训练泊松回归模型:

poisson_training_results = sm.GLM(y_train, X_train, family=sm.families.Poisson()).fit()

poisson_training_results 是一个类型为 GLMResults 的对象。打印模型摘要:

print(poisson_training_results.summary())

这会打印出以下内容:

拟合泊松回归模型的输出(图片由作者提供)

很高兴看到所有的模型系数在 p 值为< 0.001 i.e. at 99.999% confidence level.

As against linear regression models, models in which the dependent variable is a count, rarely produce normally distributed residual error distributions.

So we have to normalize the raw-residuals using other means. Three popular transformations are:

  • The Pearson residual
  • The Anscombe residual
  • The Deviance residual

Statsmodels makes all three kinds of residual errors available to us via GLMResults. resid_pearson 时都具有统计显著性。 resid_anscombe ,以及 GLMResults。 resid_deviance 变量

原始残差在 GLMResults 中可用。 resid_response

我们将打印出所有 4 种残差的偏度和峰度,看看哪一种是最正态分布的。完美的正态分布的偏斜度为零,峰度为 3.0。

**raw_residual_skewness** = st.**robust_skewness**(poisson_training_results.**resid_response**)[0]**pearson_residual_skewness** = st.**robust_skewness**(poisson_training_results.**resid_pearson**)[0]**anscobe_residual_skewness** = st.**robust_skewness**(poisson_training_results.**resid_anscombe**)[0]**deviance_residual_skewness** = st.**robust_skewness**(poisson_training_results.**resid_deviance**)[0]

**raw_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_response**)[0]**pearson_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_pearson**)[0]**anscobe_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_anscombe**)[0]**deviance_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_deviance**)[0]

residual_stats = [
[**'Raw residual'**, raw_residual_skewness, raw_residual_kurtosis],[**'Pearson\'s residual'**, pearson_residual_skewness, pearson_residual_kurtosis],
[**'Anscombe residual'**, anscobe_residual_skewness, anscobe_residual_kurtosis],
[**'Deviance residual'**, deviance_residual_skewness, deviance_residual_kurtosis]
                ]

residual_stats_df = pd.DataFrame(residual_stats, columns=[**'Residual'**, **'Skewness'**, **'Kurtosis'**])

print(residual_stats_df)

这会打印出下表:

我们正在寻找偏度最接近零、峰度最接近 3.0 的残差类型。考虑到该表中所有值的接近程度,很难从该表中选择合适的残差类型。我们将选择皮尔逊残差,因为它的偏斜度最接近于零。

让我们绘制皮尔逊残差的频率分布图:

poisson_training_results.resid_pearson.**hist**(bins=50)plt.show()

我们看到以下双峰分布!

回归误差(皮尔逊残差)似乎具有双峰分布(图片由作者提供)

这里发生了什么导致了双峰回归误差?

当回归误差为双峰时,可能会出现以下几种情况:

因变量是二元变量,如赢/输、死/活、涨/跌等。但是你的回归模型可能会生成预测,一个连续变化的实值。所以如果你编码了(赢=1,输=0),或者(死=0,活=1)等等。并且您的回归模型在 0.5 附近的狭窄范围内生成预测值,例如 0.55、0.58、0.6、0.61 等,那么回归误差将在零的一侧(当真实值为 0 时)或零的另一侧(当真实值为 1 时)达到峰值。

如果您没有为数据集选择正确的回归模型,和/或您缺少关键的解释变量,而没有这些变量,大多数预测都徘徊在 0.5 左右,这又会发生。

在我们的例子中,因变量是计数,我们使用了一个适合计数的模型,即泊松模型,因此可以排除上述情况。

双峰残差的另一个原因是,人们可能遗漏了一个二元回归变量,该变量以下列方式影响输出值:

当变量值为 0 时,输出范围在一定范围内。

当变量的值为 1 时,输出将呈现一个全新的值范围,这是以前的范围中所没有的。

事实证明,在我们的例子中确实如此!我们忽略了二元变量 yr(观察年份),它有两个值:0 = 2011 年,1 = 2012 年。

我们来看看 yr 是如何影响因变量 registered_user_count 的。我们将绘制注册用户数与您的年数的关系图:

df.plot.scatter(**'yr'**, **'registered_user_count'**)plt.show()

注册用户数与年份(图片由作者提供)

位于红圈的注册用户计数的所有值仅在年份=1 时出现,即 2012 年。由于我们在模型中忽略了 yr,我们的模型无法解释更高值计数的存在。每次实际值在 5000–7000 范围内时,它都会产生系统误差,导致残差图中出现第二个峰值。

如果这个理论是正确的,将 yr 加入到模型中应该可以解决残差的双峰问题。因此,让我们将 yr 添加到回归表达式中,并再次构建和训练模型:

*#Set up the regression expression. This time, include yr.* expr = **'registered_user_count ~ yr + season + mnth + holiday + weekday + workingday + weathersit + temp + atemp + hum + windspeed'** *#Set up the X and y matrices for the training and testing data sets* y_train, X_train = **dmatrices**(expr, df_train, return_type=**'dataframe'**)y_test, X_test = dmatrices(expr, df_test, return_type=**'dataframe'**)

*#Using the statsmodels GLM class, train the Poisson regression model on the training data set* **poisson_training_results** = sm.**GLM**(y_train, X_train, family=sm.families.**Poisson**()).**fit**()

*#print out the training summary* print(poisson_training_results.**summary**())

这会产生以下输出:

泊松回归模型结果(图片由作者)

这一次,请注意 yr 是回归变量之一,其系数在 99.999%的置信水平下具有统计显著性。

此外,该模型的对数似然比是-52683,这比没有 yr 的先前模型的对数似然比(-114530)大得多。对数似然是一种拟合优度的度量。在这种情况下,它表明添加 yr 大大提高了模型的拟合优度。这与我们的理论一致,yr 的缺失阻止了我们的模型解释所有这些高值计数。

到目前为止一切顺利。

让我们检查包含 yr 的修正模型的所有 4 种残差:

**deviance_residual_skewness** = st.**robust_skewness**(poisson_training_results.**resid_deviance**)[0]

**raw_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_response**)[0]**pearson_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_pearson**)[0]**anscobe_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_anscombe**)[0]**deviance_residual_kurtosis** = st.**robust_kurtosis**(poisson_training_results.**resid_deviance**)[0]

residual_stats = [
[**'Raw residual'**, raw_residual_skewness, raw_residual_kurtosis],[**'Pearson\'s residual'**, pearson_residual_skewness, pearson_residual_kurtosis],
[**'Anscombe residual'**, anscobe_residual_skewness, anscobe_residual_kurtosis],
[**'Deviance residual'**, deviance_residual_skewness, deviance_residual_kurtosis]
                ]

residual_stats_df = pd.DataFrame(residual_stats, columns=[**'Residual'**, **'Skewness'**, **'Kurtosis'**])

**print**(residual_stats_df)

(图片由作者提供)

皮尔逊残差再次以接近于零的偏斜度在所有产品中表现出色。虽然,原始残差的峰度最接近 3.0。

让我们绘制修正模型的皮尔逊残差的频率分布图:

df.plot.scatter(**'yr'**, **'registered_user_count'**)plt.show()

模型的皮尔逊残差的频率分布(图片由作者提供)

这一次,随着 yr 变量的加入,双峰现象在很大程度上消失了。

让我们并排看两个图,左边没有 yr,右边有 yr:

回归残差(左=没有 yr 的模型,右=有 yr 的模型)(图片由作者提供)

通过引入一个重要的二元回归变量,我们成功地修正了残差中的大部分双峰。添加缺失的变量也大大提高了模型的拟合优度。

让我们获取模型对测试数据集的预测,我们还将绘制预测计数与实际计数的对比图:

*#fetch the predictions* **poisson_predictions** = poisson_training_results.**get_prediction**(X_test)*#.summary_frame() returns a pandas DataFrame* predictions_summary_frame = poisson_predictions.**summary_frame**()*#print the predictions* **print**(predictions_summary_frame)*#The* ***mean*** *column contains the predicted count* predicted_counts=predictions_summary_frame[**'mean'**]*#get the actual count from y_test* actual_counts = y_test[**'registered_user_count'**]

*#Plot the predicted counts versus the actual counts for the test data.* fig = plt.figure()fig.suptitle(**'Predicted versus actual user counts'**)predicted, = plt.plot(X_test.index, predicted_counts, **'go-'**, label=**'Predicted counts'**)actual, = plt.plot(X_test.index, actual_counts, **'ro-'**, label=**'Actual counts'**)plt.legend(handles=[predicted, actual])plt.show()

我们得到如下的情节:

预测数量与实际数量的对比(图片由作者提供)

以下是本文中使用的完整源代码:

源代码

你可以从这里下载数据集。

进一步阅读的建议

[## 使用偏度和峰度检验正态性

…以及使用综合 K 平方和 Jarque–Bera 正态性检验的分步指南

towardsdatascience.com](/testing-for-normality-using-skewness-and-kurtosis-afd61be860) [## 泊松回归模型图解指南

和使用 Python 的泊松回归教程

towardsdatascience.com](/an-illustrated-guide-to-the-poisson-regression-model-50cccba15958)

数据集的引用:

Fanaee-T,Hadi 和 Gama,Joao,“结合集合检测器和背景知识的事件标记”,《人工智能进展》(2013):第 1–15 页,Springer Berlin Heidelberg,doi:10.1007/s 13748–013–0040–3。

感谢阅读!如果你喜欢这篇文章,请关注我的Sachin Date获取关于回归和时间序列分析的技巧、操作方法和编程建议。

英国哪些地方的人最脆弱?

原文:https://towardsdatascience.com/where-are-the-most-vulnerable-people-in-the-uk-227d1b44ebe?source=collection_archive---------59-----------------------

与英国和世界其他地区一样,随着疫情继续发展,病例和死亡人数持续上升,我们一直在观察新冠肺炎的影响。

鲍里斯·约翰逊(Boris Johnson)实施英国封锁后,这是政府要求志愿者的新闻头条之一:

在英国,据估计有超过 150 万人患有潜在的健康疾病。这些人被要求呆在家里 12 周以保护自己免受病毒感染。这意味着他们将需要帮助来完成他们习惯做的日常活动,如购买食品杂货和去看医生。

对此,政府发出请求,要求志愿者在隔离持续期间支持国民保健服务。几天之内就有 50 万人注册了!这被认为是一个巨大的成功,因为政府只期待其中的一半。几天后,这一数字增加到 75 万名志愿者,政府被迫暂停任何新的申请,以便他们能够处理已经收到的申请。

这个分析的目的是什么?
然而,考虑到弱势人群遍布英国,英国国民医疗服务体系如何确保他们有足够的志愿者为最需要帮助的人提供帮助?这项分析旨在确定英国哪些地方是弱势人群高度集中的地区,以及 NHS 志愿者应该把工作重点放在哪里。

数据来源和假设是什么? 本次分析使用的数据来源有:

  • 国家统计局 2018 年年中人口估计数。该数据集按性别、地区和年龄提供人口估计数。
  • ONS 2016-2018 年健康预期寿命和无残疾预期寿命。该数据集提供出生时和 65 岁时的预期寿命、健康预期寿命和无残疾预期寿命,按性别和地区分列。

两个数据源都是从国家统计局网站上以 Excel 格式下载的。数据转换和合并是通过使用 Tidyverse 库在 R 中完成的。有关源代码和代码的更多细节,请参见源代码部分

基于数据源中已经应用的假设,应用了以下定义:

  • 老年人是指居住在英国的 65 岁以上的人
  • “健康状况良好”是指健康状况“非常好或良好”,日常活动“没有”限制

这两个来源按地区和区域级别进行了组合,以便进行有意义的粒度分析。

英国最老的人口在哪里?
人口估计数据集拥有英国每个年龄、性别和地区的人口估计数。在这种情况下,通过使用特定老年人的比例,我们可以确定英国人口比例较高的地区。在这种情况下,为了与预期寿命数据集保持一致,这个阈值被设置为 65 岁。

下图显示了 65 岁以上人口比例最高的地区。

从这张图中可以看出,五个最古老的地区中有三个位于英格兰南部,另外两个位于威尔士。比例最高的地区,65 岁以上人口超过 25%。比例最低的五个地区仅占 5%多一点,全部位于伦敦。

英国最不健康的人群在哪里? 健康预期寿命数据集具有可用的预期寿命数据、健康状况良好的预期寿命和无残疾的预期寿命,以执行各项活动。这一数据是按性别、地区和出生时以及年满 65 岁的人的预期寿命计算的。该数据集可用于识别健康状况良好的预期寿命较低的群体。

要找出英国最不健康的人群,首先要做的是计算健康预期寿命和无残疾预期寿命之间的平均值,作为总体健康寿命的近似值。这个数字将代表一个人在 65 岁时健康状况良好的寿命。

下图按区域显示了最低和最高的健康预期寿命:

平均寿命最低的地区在健康状况良好的情况下不会活到 73 岁。在最低的五个地区中,有两个位于威尔士。将这些数字与下图中预期最高的地区进行比较,人们将平均多活五年

英国大多数最不健康的地区在哪里?通过结合人口百分比和健康年龄预期这两个指标,有可能确定英国许多潜在弱势人群集中的地区。

  • 每个点代表英国的一个地区;点的大小代表总体人口。
  • 每个点的蓝色阴影代表每个区域在地理上的位置。

如下图所示,英国最脆弱的地区(65 岁以上人口比例最高,健康寿命最低)位于左上角区域:

英格兰北部和南部相比如何?
可以看到,较暗的颜色倾向于聚集在右下角,表明英国南部倾向于拥有更年轻、生活状态更健康的人口。

相比之下,西北和东北地区主要集中在图表的左上方,表明它们比南方更脆弱。

与全国其他地方相比,伦敦怎么样?
伦敦的大部分地区位于右下角,其中几个地区达到了最高的健康预期寿命。

某个地区与全国其他地区相比如何?
本分析中显示的图形是使用 Tableau 生成的,允许用户与数据可视化进行交互。这一分析已上传到 Tableau Public,使每个人都可以通过网络浏览器使用任何平台来使用它,而无需使用任何特定的软件。

只能通过以下链接http://bit.ly/UKVulnerablePeople访问数据可视化。

从这个分析中我们可以总结出什么?
我们的分析表明,通过在数据可视化工具中使用来自国家统计局的数据,我们可以识别弱势人群的主要地区,即健康预期寿命低的老年人比例较高。这表明有一种趋势,即英格兰南部的健康预期寿命高于英格兰北部,而伦敦的老年人比例最低。

这种分析结合交互式可视化工具可以用来识别可能需要更多 NHS 志愿者的领域。截至 4 月 6 日,NHS 志愿者的申请仍处于暂停状态,最初收到的 750,000 份申请没有进一步的分配通知。

我从这项分析中学到了什么?做这个分析的原因之一是将我的一些“呆在家里”的时间用在一些不同于网飞的事情上!但出于玩笑,我认为使用我的数据科学技能可能是有价值的,如果在使用这个工具后会感到更受鼓励来支持他们的社区。最后,这也有助于我通过使用国家统计局的数据,更好地了解英国的社会人口状况

本分析的来源

——BBC 文章:
https://www.bbc.co.uk/news/uk-52029877

-英国、英格兰和威尔士、苏格兰和北爱尔兰的人口估计:2018 年年中,使用https://www . ons . gov . UK/peoplepulationandcommunity/populationandmigration/populationestimates/datasets/populationestimates forukenglandwalesscotland Northern Ireland

-ONS 2016–2018 年健康预期寿命和无残疾预期寿命
https://www . ONS . gov . uk/peoplepulationandcommunity/healthandssocial care/healthandlifeexpectancyattbirthandage 65 bylocalareasuk

-R 代码和 Tableau 仪表板也可以在下面的 GitHub 资源库
https://github.com/eduardo-cc/UKVulnerablePeople中找到

特别感谢来自 4most 的 Jenika Karsan 帮助我校对和编辑这篇文章!

最初发表于http://speakthedata.comhttps://www.4-most.co.uk

AI &机器人恐惧疫情去了哪里?和它的支持者一起隐藏

原文:https://towardsdatascience.com/where-did-the-ai-robot-fear-epidemic-go-hiding-with-its-proponents-fcd254a8a750?source=collection_archive---------56-----------------------

为什么机器人、自动化和人工智能的恐惧传播反对者今天躲在一块石头下面?新冠肺炎缺陷告诉你为什么。让他们呆在那块石头下面。

机器人和人工智能,世界末日错位的罪魁祸首。图片来源

自从锁定以来,我对时间的感知已经发生了很大的扭曲……感觉像是 20 年,但这是两年多一点前,当埃隆·马斯克(Elon Musk)第无数次警告人工智能和机器人时,根据他(和其他一些错误的信息)的说法,这是我们即将到来的世界末日最可能的原因。

2017 年 9 月,这对我来说终于太多了,为了与其他许多真正的人工智能科学家和企业家分享我的观点,我在美国消费者新闻与商业频道接受了采访,解释了为什么这完全是错误的和误导的。

警告总是来自那些不擅长人工智能的人:如果他们擅长,他们会意识到错误地建造天网就像我 3 岁的孩子意外地用乐高积木建造了一个功能正常的空间站一样。

马斯克和他的朋友们没有考虑到大规模部署人工智能和机器人技术所带来的巨大价值。讽刺和虚伪的是,由于特斯拉的汽车利用人工智能来避免撞到东西和人…

【2020 年 4 月:故事发生了怎样的变化

在与今天发生在我们许多人生活中的最接近世界末日的事情的斗争中,智能、自主机器人在哪里?

无处可寻。特别是在那些最需要他们的关键部门——在这些部门,员工要么处于高风险状态,如医疗保健行业,要么不能去,如制造业。

而且不要被制造业是机器人为王的地方的虚假形象误导。人类是工厂里的国王……当他们不在的时候,工厂就会关闭。

在撰写本文时,意大利已有 60 多名医生死于新冠肺炎病毒,西班牙有超过 12000 名医护人员被感染。在美国,情况没有太大的不同,明尼苏达州和俄亥俄州分别报告了 28%和 16%的案件涉及医生或护士。

智能机器人在哪里帮助医生和护士完成最重复和潜在危险的任务?哪里部署了强大的人工智能诊断工具来帮助简化和减轻医疗保健工作者的负担?哪里的工厂在人类被隔离期间基本上自主地进行生产?

虽然已经进行了一些谨慎的尝试,例如用配备紫外线灯的机器人给医院消毒,但是还没有大规模部署来改变现状。

因此,关键的医护人员独自在飞行中,工厂被关闭。

历史重演:拍 2!

人工智能机器人在危险情况下替代和增强人类?我以前在哪里听过这句话?!

2010 年,当我还在波士顿大学担任人工智能教授时,美国国家航空航天局(NASA)联系了我的实验室,设计能够驱动自主机器人在没有人类监督的情况下探索未知领域的人工智能。需求是明确的:美国国家航空航天局对冒着生命危险去探索遥远的、有潜在危险的环境不感兴趣,他们想设计具有类似人类能力和自主性的智能机器人来接管这些任务。

2020 年,新冠肺炎疫情也有同样的需求。这一次,不是为了宇航员去火星,而是为了帮助护士和医生进行日常的危险互动,这可能会使成千上万的人面临感染的风险,最好的情况是将他们隔离,最坏的情况是杀死他们。

让他们停下

在过去几年中,围绕人工智能、自动化和机器人的辩论总是不幸地集中在失业的主题上,往好了说是末日。太多的人聚集起来反对自主机器人的发展,因为害怕无所不知的邪恶人工智能接管世界……如果这些人工智能机器人被开发出来并投入使用,以帮助应对新冠肺炎等流行病,或许它们本可以挽救生命。也许我们可以部署成千上万的智能机器人和人工智能技术,在此过程中拯救许多生命。

没有一个护士或医生会因为他们而丢掉一份工作!

事实上,自动化和机器人不仅可以拯救生命,而且可信的研究表明,它们并不是许多领域失业的根本原因,比如制造业。根据麻省理工学院最近的一份报告,美国和欧盟制造业的失业是由亚洲的低工资工人造成的,而不是机器人。

当我 20 年前加入人工智能领域时,我坚信人工智能、机器人和自动化将帮助我们解决面前的巨大挑战。不幸的是,新冠肺炎在 2020 年作为这样的挑战之一出现,却发现我们完全没有准备。

我们本可以做得更好。让我们确保在下一个挑战中,我们拥有最好的技术来帮助自动化任务,简化人类的工作,并让他们摆脱你不希望他们处于的境地。

数据科学训练营将何去何从?

原文:https://towardsdatascience.com/where-do-data-science-bootcamps-go-from-here-6dd92f6cb17f?source=collection_archive---------70-----------------------

克里斯·蒙哥马利在 Unsplash 上的照片

在一个远程教育和雇佣减少的世界里,这种模式还有意义吗?

我之前写过我参加数据科学训练营的经历。我非常喜欢它,并且非常深情地回忆起我的经历。我也感谢我的幸运星,我去年完成了这个项目,而不是今年。随着公司放缓或完全冻结招聘,数据工作市场已经放缓至爬行状态(经验丰富的数据科学家和分析师的竞争使情况变得更糟,他们受到裁员的影响或寻求退出正在衰落的公司)。

数据科学训练营面临着巨大的挑战,他们需要不断发展以保持业务活力。今天的文章探讨了数据科学训练营行业面临的挑战和机遇。

如果没有工作,没有友情,价值何在?

训练营的目的一直是尽可能快地找到一份技术工作(尽可能少的时间和金钱)。与传统教育不同,这里没有学位,只有一张结业证书,老实说,这对雇主来说没什么意义。

相反,训练营试图利用(1)他们的关系(充其量也是有限的),(2)你自己对失业的绝望,以及(3)和志同道合、同样绝望的同龄人在一起的动力,作为加速求职过程的催化剂。要求你辞去以前工作的全职数据科学训练营实际上是对你自己的一种赌注,这种赌注就是你将能够学习材料,获得面试机会,并在面试中有效地传达你的新知识。

根据我的经验,我发现(2)和(3)比(1)有效得多。在完成我的队列的大约 20 名学生中,只有 4 人通过训练营的直接联系找到了工作。但是我们其余的人从频繁的学习小组、合作和纯粹的约会中找到了很多动力。是的,我们本可以免费得到那个角色——但是在紧要关头,很难找到一群志同道合的人(还有失业者!)有这种积极性的朋友(没有什么比花大价钱更能激励人们从某样东西中获取价值了)。记住,当我们都开始找工作的时候,我们已经一起学习、工作和约会了 3 个月。尽管我现在很喜欢我的工作,但我经常深情地回忆起那些充满压力但又充满乐趣的日子。

同样,一旦人们找到了工作,他们也不会突然忘记自己的伙伴。我们都努力向同伴推荐机会——最终有两个人通过训练营朋友的推荐找到了工作(还有几个人通过他们的同学获得了面试机会)。

存在的价值

对我来说,由于缺乏更好的措辞,在那里有很多价值。我发现训练营给我和我的同伴提供了一个学习、探索和找工作的物理基地,这与其他任何市场化服务(如课程和就业安置)一样多,甚至更多。

但是今天,我们学习数据科学的狭小教室将是一个巨大的新冠肺炎风险。因此,大多数训练营,包括我参加的那个训练营,现在都转向了在线形式。这意味着每个人都在家学习和工作,虽然讲座在技术上仍然是现场直播的,但他们不再有那种感觉了。理论上,这看起来没什么不同,但是相信我,亲身经历是非常重要的。我至少不会花 16000 美元购买一个在线训练营。

有了远程学习,就不再需要互相监督来比较、讨论和调试代码了(不,缩放是不一样的)。很少有像这样的课堂互动,学生机敏的问题引发了 25 分钟的讨论(最终每个人都从讨论和好奇心中受益)。没有深夜炸鸡三明治、黑客项目和乒乓球(公平地说,他们在我的同伴之后拆掉了乒乓球室)。

我想说的是,随着向在线形式的转移,许多让训练营体验变得美妙的微妙东西都消失了。你签下了经验丰富的导师和职业支持——但当你从另一边走出来时,你会发现 80%的价值实际上来自于你与其他同伴建立的亲密关系和友谊。没有这些,训练营就失去了很多价值。

那么训练营能做什么呢?

不幸的是,没有简单的解决方法。健康安全第一。在一个每个训练营都在线(至少暂时在线)并且数据科学职位空缺较少的世界里,训练营提供者将需要接受这样一个事实,即他们的服务同时价值更低,需求更少。

因此价格下跌(和整合)可能是不可避免的。与此同时,对于勇敢和勤奋的训练营提供者来说,未来一年左右是一个向更好转变的重要机会。数据行业已经不像以前那样炙手可热了——在收入下降的情况下急于削减成本的公司将保留他们的软件工程师(因为他们一直在工作),同时解雇远离业务前线的员工(如数据科学家)。

这并不意味着不再需要分析或数据驱动的洞察力;只是它被搁置了,或者被认为成本太高,目前不值得追求。

这是训练营和他们的学生介入的机会。

一方面,有些公司对数据科学感兴趣,但没有预算支付全职数据人员的市场薪酬。另一方面,数据科学学习者渴望获得实际的实践经验,他们愿意以市场价格的一小部分从事这项工作。那么,为什么不重组训练营的体验来满足这种需求呢?

当前格式

目前,大多数训练营包括 3 个月的教学(和项目工作)。有 4 到 5 个项目,形成你的项目组合,成为你简历上的数据科学子弹。最后的项目通常伴随着对雇佣伙伴的演示。训练营结束后,每周或每两周会有职业服务登记,但除此之外,能否跟上求职步伐取决于你自己。

你可能不知道的一件事是,大多数正式的指导和讲座在 2 个月内结束,最后 4 周主要是做你的期末项目和面试练习。是的,训练营的最后几周有点像自习室(尽管教官和助教会在旁边问问题)。

更好的格式

当前与提议的格式

在我的想象中,训练营将会持续 4 到 5 个月。在前两个月,重点是提高学生的技能,而后半个月则是让学生团队与实际公司一起从事数据科学咨询工作。

训练营提供者有两个缺点。首先,一个更长的训练营意味着一个给定的地点一年只能毕业 2 到 3 批,而不是现在的 4 批;因此,在其他条件相同的情况下,供应商赚的钱会更少。其次,提供者需要在报名之前做更多的跑腿工作——他们需要为即将入学的学生安排公司和项目。

尽管充满挑战,但这也是实现显著差异化的机会。目前,训练营行业变得越来越商品化(给价格带来下行压力)。因此,无所作为也会导致收入减少。但是如果一个训练营可以通过列出许多有趣的项目来展示价值,那么他们可以收取更高的价格。

这给了训练营提供者的职业服务员工一个更有针对性的目标。目前,职业服务员工扮演着一个奇怪的角色,一部分是啦啦队员,一部分是网络员(试图与公司招聘人员和招聘经理建立联系),一部分是大学就业顾问(修改简历,进行模拟行为面试,并润色学生的 LinkedIn 个人资料)。这有很多工作,很难同时做好。加剧这一挑战的是,每个训练营通常只有一名职业服务人员,他或她不仅需要管理当前队列的求职,还需要管理所有先前队列的持续求职。在我提议的结构中,职业服务员工将从一个多面手变成一个专家,专门与对数据科学咨询感兴趣的公司建立联系(以及一系列酷项目)。

如果训练营提供商及其员工能够成功做到这一点,那么它就能让学生在找工作时处于更有利的位置(因为他们有在实际公司工作的实际经验),并将其产品与只在网上销售的同行区分开来。

显然,所有这一切当面进行会更好,但数据科学咨询也可以远程进行。这与公司喜欢给候选人的带回家作业的扩展版没有太大区别(他们给候选人一个数据集和一些开放式问题,并要求他们尽最大努力)。

结论

以前我建议过某人(不是它!)为有抱负的数据科学家搭建一个匹配数据科学项目和实习的平台。在看到同行努力寻找工作后,我觉得这样一个平台是帮助训练营毕业生和其他有抱负的数据科学家(来自非传统背景)更无缝地突破进入数据科学行业的缺失环节。

我在新冠肺炎之前就写了这篇文章,当时我觉得训练营没有什么动力去修正他们的商业模式。现在情况不同了。生存危机是可怕的——但它也是变得更好的催化剂和机会。已经有大量廉价或免费的学习数据科学的资源(大部分都是高质量的)。但是有抱负的从业者获得实际经验的途径很少。如果数据科学训练营想要保持相关性,那么他们应该想出如何最好地为他们的学生建立这些途径。

为什么要用均方差(MSE)?

原文:https://towardsdatascience.com/where-does-mean-squared-error-mse-come-from-2002bbbd7806?source=collection_archive---------10-----------------------

从概率角度看均方误差

Genessa panainite 在 Unsplash 上拍摄的照片

大家好。

如果你对机器学习感兴趣,但没有深入研究它背后的概率论,你可能会想知道损失函数从何而来。他们仅仅是因为在实践中效果更好而使用吗?

一个来自knowyourmeme.com(原始网址)的常见模因模板

我想我会分享从 CS109(斯坦福大学计算机科学家的概率论)中获得的一个见解,这是我最近参加的一门课程。我们将回答以下问题:

  • MSE 到底是从哪里来的?只是有人猜测一个好的损失函数吗?
  • 为什么你想要预测和地面真相之间的差异的平方,而不是只取其绝对值,或将其提高到四次方,或六次方??换句话说,为什么 MSE 效果这么好?

快速品尝一下答案:这取决于我们对数据如何建模的合理假设的本质。

三项免责声明:

  • 这不是激励 MSE 的唯一方法,但我确实没有见过,我认为这比“因为在实践中你可以更容易地得到它的导数”更有见地
  • 我自己意识到了这一点,但我确信在我之前还有很多人意识到了这一点
  • 我假设你熟悉概率(什么是正态分布,不太清楚),但不一定是上过概率论课的水平。如果有,太好了!你可以跳过一些背景。

但首先,了解一些背景知识。

背景

你可能知道,机器学习与概率交织在一起,所以我们将在这里介绍一些相关的概念。

最大似然估计

在很多机器学习中,你的目标是为你的数据找到最佳模型(无论是找到将图像分类为包含猫或狗或其他模型的最佳 convnet)。这背后的一个核心概念是最大似然估计。

什么是最大似然估计?我们将用下面的例子来演示(改编自 Youtube 频道 StatQuest 的这个很棒的视频)。

例子

让我们假设你有一个神秘的正态分布,点被抽样,并说它代表老鼠的体重。

来源: Youtube/StatQuest

统计学家做的一件有点奇怪的事情是假设数据是从某个模型中抽取的。在这种情况下,我们可以假设这个小鼠体重数据是从正态分布中取样的。现在让我们找到它!(这可能看起来与说一些关于 MSE 的事情非常无关,但请原谅我。)

直觉上,您可能希望正态分布在样本中心附近达到峰值。你也希望正态分布根据样本分布的距离而展开。

所以,你会而不是想要这样的东西

“坏”模型;来源: Youtube/StatQuest

但是你会想要这样的东西吗

一个“好”的模型;来源: Youtube/StatQuest

原来有一种数学方法可以表达一个模型有多“好”(这一节很重要)。我们称之为给定模型的数据的可能性。它可以用函数 L 表示如下,其中θ是模型,I 是样本的指数,f 是概率密度函数(PDF)。

可能性的定义

请注意,在函数 f 中,参数包含一个竖线|。这仅仅意味着我们正在评估函数,因为我们使用的是模型θ。

似然性本质上包含所有样本的概率密度的乘积。换句话说,这是对数据集被赋予选择特定模型的可能性的综合衡量。

然后,要找到最佳模型,只需取其“argmax”即可。

最佳模特

实际上,如果足够简单,这将涉及求导,或者如果更复杂,将涉及其他一些优化方法,例如梯度上升

关于可能性的直觉

为了巩固关于可能性如何工作的一点直觉,考虑所有样本都是 x_i=5.0 的数据集。然后,假设你的模型是一个正态分布,紧紧围绕 x=15。然后,PDF f(x_i|theta)会极小,乘以许多小值会产生一个极小的似然值。

相比之下,考虑正态分布紧紧集中在 x=5.0 附近,正是样本出现的地方。直观来看,这款应该比上一款好很多。我们用似然来验证一下:PDF f(x_i|theta)会非常大,很多大值相乘会产生一个非常大的似然值。更好的模型可能性更大,这和我们的直觉不谋而合。

负对数似然

在实践中,我们实际上稍微修改了一下上面的可能性表达式。首先,我们取可能性的对数。为什么?两个主要原因:

  1. 这对于浮点运算来说要好得多(你不想因为把一堆小数字相乘而损失精度)。
  2. 求和的导数比求积更容易。

由于似然性通常位于 0 和 1 之间,因此对数似然性(表示为 L1(θ))将位于负无穷大和 0 之间。

现在考虑最大化负值是很尴尬的,所以我们取其负值,称之为(恰当地命名为)“负对数似然”,而不是最小化这个。这通常成为我们熟悉的常规损失函数(交叉熵损失只是负对数可能性的伪装,但这是另一个故事)。

MSE??

现在,我们将通过一个演示示例来展示 MSE 的来源。

为了简单起见,让我们执行线性回归;即找到最佳拟合线。

线性回归;来源:维基百科/线性回归

现在让我们写下如何对数据建模(在鼠标重量的例子中,我们假设它是通过正态分布生成的)。这正是导致 MSE 的原因。

我们的假设

让我们假设我们的数据是按照如下方式采样的:给定 X 的某个值,Y 完全由 mx+b 确定,该值受到以 0 为中心的正态分布的随机样本的扰动(其中“m”是斜率,“b”是 Y 截距)。这是有意义的,因为直觉上给定一个 X,Y 并不总是精确的 mx+b,而是在 mx+b 附近有一些噪声(现实世界会妨碍)。

从视觉上,你可以想象我们的模型真的只是一堆正态分布沿对角线方向堆叠,形成山脉般的外观。对于那些数学爱好者来说,我们的模型可以表示为

其中“X”是某个变量,参数是“m”和“b”,而“Z”是某个预先确定的具有零均值和某个方差σ的高斯函数。

推导 MSE

现在我们想计算这样一个模型的可能性(这里唯一的参数是θ= m)。首先,回想一下高斯分布的 PDF 的定义:

高斯分布的 PDF

现在,这个模型的可能性(我们可以忽略外部的正常数因子,因为它不影响我们的优化)是

此模型的可能性

我们简单地通过用高斯函数代替我们的 PDF 来获得之前的似然性定义。

在实践中,我们希望获得负对数似然。所以,经过一些代数运算后,对数似然是

此模型的对数似然

然后,负对数似然

负对数似然

瞧啊。负对数似然,我们从假设真实数据对于给定的 x 呈正态分布中获得的损失函数是非常精确的均方误差,即

一般来说,均方误差的定义

只差一个常数!还不错。

一些反思

所以这就是均方差是如此普遍和巨大的损失函数的原因;它基于极其合理的概率假设:给定一些自变量的值(也称为世界的某个状态),因变量按照高斯分布分布。现在已经非常清楚(y_i - y_pred)的来源:高斯分布 PDF 中的指数项。我认为这是一种更好的思考 MSE 的方式,而不仅仅是简单地“我们使用它是因为它很容易区分”(尽管这在某种程度上是正确的)。

如果你开始将此推广到更复杂的推理任务,你就可以开始对 MSE 如何运作有真正的直觉了。例如,考虑用多项式拟合一组(x,y)点。你可以想象在曲线周围的 y 方向上上下下,我们有突出页面的高斯 pdf。现在,您可以将使用 MSE 的梯度下降视为在 y 方向上上下调整一组高斯函数,以最大化每个单独 x 值的可能性,并且整个问题已经简化为一个迭代鼠标重量的示例,其中我们正在计算如何放置 x 的每个值的正态分布的平均值。这种直觉无缝地转化为许多 x 值(即一个 x 向量)的情况。

现在想象有多个 y 输出。然后,你试图为每个可能的 x 找到一个多元高斯分布的最佳平均向量。

总结想法

当我第一次在最大似然估计的背景下通读涵盖“线性回归精简版”(没有 y 截距的线性回归)的 CS109 课堂笔记时,我没有意识到它可以带来一些关于我已经使用和熟悉了相当长时间(MSE)的事物的直觉和见解。重温它们,再读一遍,认真思考,结果是一次颇有收获的经历。关于它的写作也填补了我理解上的一些漏洞。我建议至少为你感兴趣的课程做一些这样的事情;这会让你更加欣赏这个主题。

此外,这个小小的探索让我对人工智能和深度学习的技术有了更好的理解。许多现有的技术起初看起来像是任意构造的,但如果你深入研究概率论,就会发现它们都来自相同的核心思想。因此,我认为学习这些基本概念是必要的:它帮助你以一种更加基础的方式思考 ML,它甚至可能帮助你想出你自己的新的有趣的技术/算法!

AI 到底在哪里?

原文:https://towardsdatascience.com/where-in-the-world-is-ai-map-80c8678cc80f?source=collection_archive---------50-----------------------

人工智能校准和安全

交互式网络可视化突出了全球有益和有害的人工智能案例

艾到底在哪里?工具 —作者图片

“一种算法如何阻止黑人患者的肾移植”——《连线》杂志

“荷兰正在成为一个预测性的治安热点”——VICE

“一个月,50 万次面部扫描:中国如何利用人工智能描绘少数民族”——《纽约时报》

随着人工智能的使用在我们的社会中变得越来越普遍,这些令人震惊的标题也是如此。当我们看到一个爆炸性的标题时,我们不应该只关注人工智能系统是如何设计或开发的。相反,当我们接收数据、定义用例或开始冲刺时,负责任的人工智能应该是我们的第一个想法。在分析谷歌趋势后,AI Global 的团队发现了人工智能和负责任的人工智能之间的报告和搜索差异。

谷歌关于负责任的人工智能、道德人工智能、人工智能、坏人工智能和好人工智能的全球网络搜索趋势

我们在负责任和有道德的人工智能上看到的唯一搜索峰值与《纽约时报》等重大新闻相关:我们所知的隐私的终结2020 年 2 月 10 日。即使这样,这些山峰也不是人工智能搜索的地方。为了负责任地开发和应用人工智能,我们必须寻找和了解设计不良系统的后果。

“AI 到底在哪里?”Map 是一个交互式网络可视化工具,探索世界各地人工智能的故事,以确定趋势并开始讨论更值得信赖和负责任的系统。在地图上,你可以按照从医疗服务到执法的领域进行过滤,设置年份范围,并按照人工智能是有益还是有害的分类进行过滤。

按域名、年份、有益和有害案例过滤 —图片由作者提供

AI 在哪里有害

虽然地图上布满了彩色的点,但重要的是不要忽略单个数据点。在我们的数据集中,

在英格兰,有不公平的情况,40%的 A-level 成绩被降级,因为一种算法被用来评估学生的表现。

有一个系统的种族主义的例子,如迈克尔·奥利弗谁被错误地指控犯有盗窃罪,因为在密歇根州的面部识别系统。

有证据表明反馈回路被打破了,比如 Tik Tok 在中国制造了基于种族的过滤泡沫。

如果不以负责任的方式设计和管理,人工智能系统可能会有偏见,不安全,在某些情况下(通常是无意中)侵犯人权。

AI 在哪里帮过

我们也对 AI 充满希望。我们已经看到了人工智能如何增强和促进我们日常生活和社会的早期实例。也有例子表明,人们已经纠正或摆脱了有害的人工智能系统。我们已经看到人工智能创造了艺术、音乐,甚至检测出无症状的新冠肺炎。

我们的人工智能过程已经被贴上了有害/有益的标签

我们知道,这些案例中的许多可能会落入有益或有害的灰色地带。例如,不同的文化视角可能会给案例贴上不同的标签。我们的地图目前被工作组用来讨论这些案例如何影响负责任的系统中的信任。此外,AI Global 正在内部和外部讨论谁能决定什么是有益的和有害的。我们希望,当我们在这个生态系统中导航时,这些标签可以成为关于负责任的人工智能实践的对话的起点。

通过强调这些案例和更多案例,我们希望揭示人工智能在各个领域的分支及其在现实世界中的后果。我们邀请您通过点击一个点/星来探索我们的地图,了解每个故事的更多信息。

我们正在学习和成长,所以如果您有任何反馈或问题,请联系我们。非常感谢我的梦之队:AI Global 的 Shrivu Shankar、Ameya Deshmukh、Colin Philips、Lucinda Nguyen、Amaya Mali 和 Ashley Casovan。感谢 Doreen Lorenzo 的早期反馈,感谢 Jennifer Aue (Sukis) ,她是我的第一位人工智能设计教授,激发了我对这一领域的兴趣,并鼓励我在 Medium 上写关于人工智能伦理的文章:)

智能城市传感器预测客流量

原文:https://towardsdatascience.com/where-is-everyone-going-9b2bd487a6aa?source=collection_archive---------41-----------------------

利用空间数据分析了解和预测澳大利亚墨尔本的行人交通。

我有建筑设计和城市规划的背景,一直对应用数据来改善我们的城市和建筑环境很感兴趣。像全球许多城市一样,墨尔本的目标是在未来几十年内成为智能城市,而数据正在推动这一目标的实现。数据分析声称是智能城市的未来,因此有许多实质性的数据集可供公众免费使用。在我第一次深入研究城市数据时,我使用了墨尔本市提供的几个地理空间数据集来了解行人的行走模式。

项目目标

对于决定开店地点的企业来说,客流量和行人活动是一个需要考虑的重要因素。繁华地区的商店和餐馆可能会吸引更多的顾客和注意力。考虑到这个客户群,我使用的主要数据集是每小时统计有多少人通过城市人行道下的不同传感器。

通过查看传感器计数,可以观察到步行交通的总体趋势。然而,我也想了解是什么把更多或更少的人带到了特定的地区。是否可以根据附近的建筑物或城市特征来预测行人流量?从城市规划的角度来看,关于城市中哪些因素会增加或减少行人流量的信息将有助于预测新开发项目对附近区域的影响。

为了确定某些因素是否会影响行人数量,我在分析中加入了其他几个地理空间数据集。本文将介绍这个项目的主要步骤,但是完整的代码可以在我的 Github 库上找到。

数据收集和清理

如前所述,墨尔本市提供了许多有价值且干净的数据集。幸运的是,只需要做最少的数据清理工作,但是下面我概述了我使用的数据集以及在建模之前我是如何组织数据的。

每小时人行道传感器计数

我的主要数据集是人行道传感器计数,它具有以下特征:每个传感器的位置坐标,一个传感器 ID 号,每小时记录的日期时间,以及每小时计数值。下面是整个城市所有传感器位置的可视化 Tableau 地图。

墨尔本所有的人行道传感器,通过 Tableau 上的位置坐标映射。

数据从 2009 年至今,每月更新。当 2009 年开始收集数据时,只有 18 个传感器,现在有 65 个,所以在过去十年中增加了许多传感器。在数据清理过程中,我发现许多传感器都有错误的记录,因为计数会在几周或几个月内突然降到零。今年年中还增加了新的传感器。为了保持一致性,我创建了一个函数来生成传感器的年度列表,每次至少有 12 个月的完整记录。由于前两年(2009 年和 2010 年)的记录不太稳定,2020 年的记录还不到整整 12 个月,传感器的范围被更改为 2011 年至 2019 年。

附近城市特征

为了更好地了解不同传感器附近的城市特征,我包含了来自该城市的几个地理空间数据集。这些被包括在内,以测试传感器附近的特征与该区域接收到的客流量之间是否存在相关性。这些数据集包括年度建筑数据、 自行车码头位置&容量、地标&兴趣点以及城市街道照明。这些单独的数据集中的每一个都包括位置坐标和一些关于特征的信息。

本次分析中包含的城市特征数据集之一是墨尔本的街道设施和基础设施。

传感器趋势

为了获得传感器趋势的概述,我创建了一个热图来了解每个传感器繁忙的日子和月份。这是两个传感器的热图,它们从 2011 年到 2018 年有一致的数据。

传感器 2 的热图,它看起来在 12 月的星期五最繁忙。一周中没有太多的人流量,因此该传感器最有可能位于娱乐或休闲区。

传感器 9 的热图,它在工作日几乎完全处于繁忙状态,表明它可能位于商业区。从 2016 年到 2017 年,客流量也有明显增加。还要注意两个传感器之间的规模差异,即使在最繁忙的情况下,传感器 9 也没有传感器 2 那么多的行人流量。

绘制位置特征

产生传感器气泡

为了将所有基于位置的数据集与它们最接近的传感器结合起来,我利用 GeoPandas Python 库在每个传感器周围创建了 100 米的半径。半径保持较小,因此它只包括直接影响传感器上的脚步的元素。下面是我在 follow 中创建的地图,上面标有传感器的周围半径。要了解更多关于在 lyum 中开发地图的信息,请点击查看源代码。

每个传感器周围 100 米半径的叶子图。

绘制附近的特征

然后,再次使用 GeoPandas,我开发了一个函数来检查位置数据集中的每一项(建筑物、自行车、照明等。)来查看坐标是否在任何传感器的半径内。如果该点位于传感器的半径范围内,则坐标和要素信息会添加到传感器列表中。一旦在所有位置数据集中找到了 100 米半径内的所有要素,我就创建了一个函数来在 foylus 中绘制这些信息。

以下是传感器 2 和 9 及其附近所有要素的地图。通过这种视觉,我们可以看到传感器 100 米半径范围内的所有城市元素。街道照明是珊瑚色,地标是紫色,建筑是浅蓝色,街道基础设施是灰色。可以在深蓝色圆圈的中心看到传感器。

传感器 2 的所有位置特征都在传感器 100 米半径范围内。

传感器 9,其所有位置特征都在传感器 100 米半径内。

基于位置特征预测每日客流量的回归方法

既然我们可以看到哪些要素在每个传感器的 100 米范围内,建模就可以开始了。对于建模的第一阶段,我想做一个相对简单的线性回归,看看是否有可能仅根据附近的位置特征来预测每个传感器的每日客流量。该模型的特征是半径内每种特征的数量和传感器 ID,并预测日平均客流量。

数据框的一个片段。总共有 60 多列详细说明了传感器半径内每个邻近要素的数量。

由于位置要素的数量在一年内没有变化,因此我不期望模型能够准确预测每天的变化和趋势。然而,我认为这将是有趣的,看看哪些功能增加或减少了客流量。训练和测试数据采用随机 80/20 分割,所有年份混合到每组中。

模型结果:线性回归

-训练分数:0.7751

-测试分数:0.7749

-简历得分:0.7747

-根均方误差:224.592

所有分数都在 0.77 以上,这个模型在第一次尝试中表现得相对较好。分析特征的重要性以了解哪些特征增加和减少了客流量是很有趣的。然而,该模型在用于预测未知数据时表现不佳。例如,如果训练数据仅包含 2011 年至 2017 年的信息,而测试数据仅包含 2018 年的信息,则模型的得分会大幅下降。

特征重要性

特点是减少的客流量

令人惊讶的是,传感器半径内的零售点数量越多,实际上对客流量产生了负面影响。其他有趣的特点是减少了人流量,有更多的礼拜场所,更大的平均建筑楼层,和更多的停车位置。

特点是增加客流量

更多的座位和医院对传感器接收的客流量有积极的影响,还有一些城市基础设施,如花坛和护林。这些也许是最令人惊讶的,因为这些是我们在城市中漫步时不一定会注意的特征。

实际与预测

这种模型的主要缺点是,它每天为每个传感器预测相同的值。由于特征在一年内没有变化,该模型无法将每日趋势考虑在内。这使得该模型在预测未来客流量时表现不佳。

此图显示了线性回归模型预测的数据与实际每日客流量之间的差异。垂直线表明该模型每天预测每个传感器的相同计数,并且不针对每天的变化和趋势进行调整。

在用相同的特征调整这个模型之后,通过使用具有 GridSearchCV 的决策树回归器,CV 分数将提高到. 828。然而,用实际与预测的图表说明的相同问题仍然存在。仅使用位置特征的模型只能变得如此精确,因为它没有考虑每天的变化,也不能预测未来的交通。

预测未来客流量

为了开发一个可以预测未来客流量的模型,我将之前回归模型中使用的位置特征与更多基于日期的信息相结合。除了半径中不同位置要素的数量之外,月、日、年和星期几的信息也作为要素包含在内。此外,我还包括了一年前或两年前(如果前一年没有有效数据的话)那天的计数。通过这些功能,训练和测试数据根据年份进行拆分,因此模型是根据 2011-2017 年的数据训练的,而测试数据是 2018 年的。

在调整参数和测试几种不同的模型类型后,该模型产生了迄今为止最高的分数,并能够以 90%的准确率预测每个传感器的 2018 年每日客流量。

模型结果: Ada Boost 回归器

-训练分数:0.9994

-测试分数:0.9032

-简历得分:0.8744

-根均方误差:158.7632

特征重要性

对该模型预测影响最大的特征是基于日期的信息和过去一年的数据。这表明每个传感器都有一个有助于预测的年度趋势。还有几个基于位置的因素对预测相对重要,如篮球架、安全岛护柱的数量、平均楼层数和自行车护栏的数量。

对预测影响最大的特征

实际与预测

该模型的预测更加细致入微,能够预测每个传感器的不同日计数。因此,该模型更加准确,并且在预测值和实际值之间存在更强的线性趋势。有几个强异常值,其中模型预测值比实际值高或低得多,可以进一步调查这些点,以更好地了解是什么影响了这些变化。

从模型中生成的实际每日计数与预测每日计数

结论

那么,人们在墨尔本四处走动会产生什么影响呢?从这些模型中,我们了解了城市的哪些特征会吸引更多的行人,哪些特征会减少游客,以及哪些特征有助于预测未来的趋势。

第一个模型显示,一个有更多座位、花坛、医院和社区使用建筑的区域会有更多的人流量。有更多零售店、宗教场所和烧烤的地方会减少平均每天去那里的人数。如果商业或城市规划者的目标是预测未来趋势,他们会想使用第二种模型。该模型表明,过去一年的数据和特定日期的信息将是估计未来客流量的最强预测因素。然而,一些城市基础设施元素,如篮球架、护柱的数量以及周围建筑的平均楼层数,也可以提供更准确的预测。

这个项目是一次很好的学习经历,让我更好地理解了地理空间数据科学——这是一个我将继续探索的主题。总的来说,我对目前为止发现的结果很满意,并渴望在未来继续这个项目。我想进一步探讨一些想法来改进我的模型:

  • 返回分析每小时的行人计数数据,而不是每天的平均值,以获得更精确的趋势
  • 包括城市的更多位置特征
  • 包括季节性信息,例如城市事件、公共假日、体育赛事等。
  • 基于位置特征对传感器进行聚类,以便可以预测没有前一年数据的新传感器的客流量

感谢您的阅读,如果您有任何建议或想法,请随时通过 LinkedIn :)联系我

AI 和平战略在哪里?

原文:https://towardsdatascience.com/where-is-the-ai-strategy-for-peace-a89c1c681fe9?source=collection_archive---------38-----------------------

Photo by– 卡晨 @awmleer

对国家人工智能战略症结的简短思考

在 1 月 29 日这一天,我已经阅读了欧洲所有的国家战略,至少是那些已经出版的,以及大多数拥有人工智能计划的大国的国家战略。与此同时,我看到了各种关于人工智能主题的指数,这些指数衡量了各种因素。我发现,战略中所缺少的东西,与书面文件中所陈述的内容,或政治家们在发布后添加的内容一样有趣。

在 2020 年,我注意到大多数战略(除了中国、法国、印度和葡萄牙)中有一个重要的缺失,那就是对生态的关注,以及对 2019 年历史性变化的关注——街头抗议气候危机的儿童。

在大多数衡量人工智能进步的标准中,美元符号滚动,科学论文大量涌现,他们关注基础设施的需求。当一家公司击败另一个游戏时,我们会庆祝,无论是:危险、国际象棋、围棋、英雄联盟还是任何其他可以想象的智力活动。

尽管必须指出的是,在欧洲的大多数国家战略中(大多数由商业、贸易、数字或创新部门制定),国防并没有明确和占主导地位,但它在某种程度上隐约出现在表面之下,以及在民族国家在讨论中提出的观点中。毕竟,在所谓的“AI 双头垄断”中,主导辩论的是美国和中国——如果美国这么做,中国会怎么做,等等。然后欧洲等等。

在人工智能的讨论中,自主武器的话题引人注目。

在我的祖国挪威,当然也有军队招募网络精英的情况。由于我在这个领域的其他地方从事机器学习,我显然是促销活动的目标。

作为机器学习工程师加入挪威的“智能单位”

作为一个例子,这里也有对自动驾驶汽车的测试,以及对自动武器(或简单地说,带有机器学习组件的武器)的投资,这是我们确定无疑的。这是自主防御车辆“Tor”在高草丛中的测试之旅。

对于国防工业来说,采用新技术并探索如何利用新技术更好地保卫国家是非常明智的。人们也很容易想到生命损失会更少。

尽管如此,在我的头脑中没有任何清晰的战略,我看到过和平的谈论。

关于人工智能话题的讨论通常会转向人工智能军备竞赛,特别是当一个反乌托邦式的未来观点出现时。

圣诞节期间,我读了一本斯图尔特·拉塞尔写的书。本书人类兼容:AI 和控制的问题。这是我极力推荐的一本书。

图为上述书籍的封面,可在此处找到。

这本书提出了几个支持和反对人工智能控制方法的论点,这些论点经常被人工智能社区的不同研究人员争论,这是一个真正发人深省的阅读。

我不会通过列出清单来破坏这本书,但是我可以说,以目前的进展来控制人工智能不是一个零和游戏,而是一个合作的努力。他将此与国际上遏制人类基因组编辑风险行为的努力进行了比较(遗憾的是,随着 CRISPR 和廉价 DNA 试剂盒的出现,这种风险行为再次出现)。

人类面临的潜在生存威胁的问题当然是一个合作的问题。这一点对大多数人来说应该是显而易见的。

挪威有着试图理解和平的悠久传统,特别是与奥斯陆(PRIO)的和平研究所合作。因此,在该研究所有这样一个专注于人工智能的项目可能并不奇怪。

[## 人工智能的军事应用-伦理项目现已获得资助

人工智能(AI)在军事规划中发挥着越来越大的作用。这个项目将提供一个伦理…

www.prio.org](https://www.prio.org/News/Item/?x=2491)

这个项目处于研究阶段,也有政策倡议。

我当然希望看到这个项目取得良好的进展,因为当结果是:

  1. 它没有发生或;
  2. 我们降低了某事发生的可能性。

我想这就是为什么它如此困难和重要。

另一个很好的例子是马克斯·泰格马克(Max Tegmark)和其他人,他们成立了未来生命研究所(Future of Life Institute),专注于存在风险,特别是:人工智能、生物技术、核能和气候。

[## 家-生命的未来研究所

科技赋予生命前所未有的繁荣潜力...

futureoflife.org](https://futureoflife.org/)

然而,写在导言中的问题仍然存在。

为什么我们没有将和平视为国家人工智能战略的明确组成部分?和平实际上是缺失的。

我天真地在谷歌上搜索“欧洲人工智能和平战略”,得到了大量这样的信息。希望这只是一个糟糕的谷歌搜索案例。

在相对较短的时间范围内(也许 20-50 年,也许 100 年),可以在生存层面上威胁到我们人类的技术当然值得考虑,作为共同努力防止迫在眉睫的灾难的领域。

你会希望,我也会希望,满怀希望——随着气候危机和人工智能的出现,各国将更加致力于和平与合作,而不是军备竞赛。

我们可以将人工智能作为一种工具,在缓解、适应和恢复方面进行合作,而不是进行军备竞赛。

然而,国家人工智能战略有一个和平问题,因为它根本不存在于概述和出版的文件中。

总结

我的鼓励当然是我们应该在未来的 AI 战略中把这个话题提上日程。伦理是一个开始,然而,如果人工智能被用于好的方面,我们可以更明确地表达我们的雄心。如果人工智能是用来做好事的,至少要表达出和平的意图和适当的措施,以确保这种投资与人工智能发展的快速增长一样多,这种发展扩散了迄今为止的国家战略讨论。为什么不把和平作为政策重点?

这里是#500daysofAI,您正在阅读的是第 239 条。500 天来,我每天都在写一篇关于或与人工智能相关的新文章。我目前 100 天 200-300 的重点是人工智能的国家和国际战略。

数据在哪里?

原文:https://towardsdatascience.com/where-is-the-data-798faccb4e29?source=collection_archive---------31-----------------------

更多信息请在推特上关注我:https://twitter.com/faviovaz

或者如何丰富数据集并自动创建新要素。

插图作者:伊泽尔·巴斯克斯

O 当你在处理一个新的数据集时,最困难的事情之一是发现预测你的目标的最重要的特征,同时,在那里你可以找到新的信息来源,可以提高你对数据和模型的理解。

在本文中,我将向您展示如何在没有任何编程技能的情况下做到这一点。是的,这听起来很奇怪,但是请原谅我。在以后的文章中,我将探索可以帮助您做到这一点的其他编程库,并看看哪种方法会产生更好的结果。

我们将用一个示例数据集来做这件事。我们将使用美国西雅图金县的房屋销售数据集。您可以在此找到关于数据的所有信息:

[## 美国金县的房屋销售

用回归法预测房价

www.kaggle.com](https://www.kaggle.com/harlfoxem/housesalesprediction)

数据集的想法是根据不同的特征来预测房子的价格。在我向您展示如何进行数据丰富之前,让我们用 python 加载数据以获得一些相关信息。下面你可以看到一个简单的笔记本:

需要注意的是,我并没有为数据集做整个 EDA,这只是为了获得基本信息。我将要展示的内容并没有消除您必须遵循的数据科学流程,只是为了丰富您的数据并获得更多相关信息。

好了,现在是时候了。

我们将通过一个名为 Explorium 的系统来实现这一目标。前阵子发现这个软件,一直用到现在。他们将自己的产品描述为:

Explorium 正在推动数据科学领域的一种新范式——公司可以根据他们需要的数据,而不是他们拥有的数据来建立模型。发现唯一一个专注于机器学习的高级数据的端到端数据科学平台。

因此,这是一个端到端的平台,您可以在其中构建和部署模型,但我们将在其他文章中探讨这一点。您可以在这里要求一个演示来复制我在本文中所做的事情:

[## 请求演示探索

本网站使用 cookies 来改善您浏览网站的体验。在这些饼干中…

www.explorium.ai](https://www.explorium.ai/request-a-demo/)

我要做一个循序渐进的教程。如果你有任何问题,请在下面的评论区告诉我:)。

创建项目:

当你可以访问这个应用程序时,你要做的第一件事就是创建一个项目。

然后将项目命名为:

加载数据

下一步是将数据载入系统。有几种方法可以做到这一点,比如:

  • 当地的
  • S3
  • 神谕
  • Teradata
  • 关系型数据库
  • Mssql
  • Postgres
  • 红移
  • 储备
  • 谷歌大查询
  • 谷歌存储

我将从我的本地计算机加载它。几秒钟后,您应该会看到以下屏幕:

如您所见,底部有一个非常基本但有用的数据探索工具。您可以获得一些关于您的数据的基本统计数据。

如你所见:

我们有 21 列和 21613 行,与我们在 Python 中看到的一致。

数据引擎

现在是开始魔法的时候了。在 Explorium 中,您有一个称为“引擎”的东西,在那里软件将根据您的数据创建新的要素,并根据列及其内容获得新的数据集。

这是我们将要做的事情(摘自网站):

https://www.explorium.ai/data-enrichment/

https://www.explorium.ai/data-enrichment/

https://www.explorium.ai/feature-discovery/

系统还可以做更多的事情,正如我提到的,我们将在其他文章中对此进行探讨。我们继续。

我们现在必须设定,我们试图预测什么。这更多是针对软件的机器学习部分,但也是继续的必要条件:

我们现在必须按下播放按钮:

现在我们等着。

然后我们再等一会儿。这可能需要几分钟。系统正在使用您的信息从成千上万的数据集中提取其他数据。

如你所知,大约 5 分钟后,系统检测到 30 个有用的数据集和大约 890 个特征。如果你不想等待更多的时间,你可以停止引擎,但我建议你等到最后。

洞察力

几分钟后,您应该会看到类似这样的内容:

让我把那一页翻给你听。在顶部,我们看到内部数据(以及从数据集创建的一些新要素)的得分(R)为 87.46,相当不错,而外部数据的得分为 89.52,稍好一些。这并不奇怪,但这确实是事实。

在左侧部分,您可以看到它发现了 30 个有用的数据集,并且与您的数据相匹配。在中间,您可以看到它从内部和外部数据创建的所有不同的特征,最后,在右边部分,您可以看到一些 ML 模型的结果。您会看到最好的模型是使用 XGBoost 创建的,RMSE 为 118.5K,MAE 为 66.3K

我们现在不打算关注模型。只有数据。在中间部分,您可以获得预测价格的最佳 50 个特征:

如果您单击此处,然后单击下载所选功能:

你将下载最好的 50 个功能来预测价格。这里很重要的一点是,价格不会在那里,所以如果你想在外部使用新数据,我们将需要追加它。让我们在 pandas 中加载数据并查看它:

正如您看到的,列的名称非常明确,但是我们可以用 Python 和 Pandas 轻松地改变它,所以不要担心。现在回到 Explorium,在 Insights 选项卡中,您可以获得功能重要性:

在这里你可以看到变量对建模有多重要以及它们来自哪里。如您所见,其中一些来自原始数据集,一些来自外部数据集,此外,我们的数据中还有一些现有列的 K-Neighbors。这对离线建模非常有帮助。

对了!!您也可以直接下载外部数据集:

从他们那里得到完整的侧写。

结论

丰富和改进您的数据现在变得非常简单。正如我之前提到的,将来我会将结果与 Explorium 和一些 Python 库进行比较,请继续关注。

我们可以看到,这个过程非常简单和直观,如果您不需要建模,您可以保留新数据并自己工作。我可以向你保证,大部分工作都在发现阶段,数据清理和特性工程,建模很容易,编码也越来越简单。

如果您将这种类型的软件与对业务的良好理解和有效的数据科学方法相结合,您将更快地震撼数据科学世界。

感谢阅读!如果你想了解我的文章,请在 Medium 和 Twitter 上关注我:

[## 法维奥·巴斯克斯

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/faviovaz)

你的数据科学团队在哪里?

原文:https://towardsdatascience.com/where-is-your-data-science-team-241fb7e51094?source=collection_archive---------42-----------------------

组织结构的重要性

近年来,许多公司开始拥有数据科学团队,我们看到的数据团队从小型创业公司的几个人到大型公司的数百人团队不等。这不是一篇问“你的数据科学团队在哪里?”让你相信拥有一个是有用的(为此你可以阅读这个)。这是一篇质疑“您将数据科学团队具体安排在哪里?”以及这是否有意义。

为什么组织结构很重要?

在讨论数据科学团队的定位之前,让我们先来看看组织结构的概念。尽管扁平化和最小化的结构越来越多,但我们都知道,在实践中,一旦公司达到一定规模,无论管理层是否明确指出,我们都会在某种结构中工作。组织结构很重要,因为它通过安排汇报路线、规划沟通流程为每个人提供指导,并使人们能够组织起来。值得强调的是,虽然组织结构与等级制度有些关联,但两者并不一定相同。我逐渐认识到,当人们说他们喜欢一个扁平的结构时,他们通常意味着他们喜欢一个在决策中没有等级之分的环境。毕竟,如果没有某种适当的结构来促进这一目标的实现,很难让一大群人朝着一个公司的目标进行自我协调。

组织结构是决定一家公司能否有效实现其目标的关键。这是其运营的一个重要部分,因为它限制了人们在其角色、团队和报告关系中的行为。我们很可能会听到类似“这不是我们团队的责任”或“我们不能这样做,因为其他团队在照看它”,有时这些对于确保团队保持专注是有意义的,但有时正是这种武断的结构阻止了我们做正确的事情。即使有一个超级明星团队,你也需要一个整体结构来让他们合作并交付优秀的结果。

Esther JiaoUnsplash 上拍照

那么你应该把你的数据科学团队放在哪里呢?

谈到组织结构,有许多不同的思想流派,每一派都有自己的优点和缺点。这里的关键是,在为您的数据科学团队建立正确的结构时,要了解您正在获得哪些好处,以及需要缓解哪些问题。在高层次上,传统上我们对组织结构进行分类,一端是职能,另一端是部门。职能结构意味着团队由其专业来定义,例如,当我们有一个财务团队,一个营销团队和一个工程团队。部门结构意味着团队根据其市场和产品进行分组,例如基于地理位置的团队,或基于特定产品类别的团队,这些团队包括来自不同专业的人员。通常,职能结构有助于提高效率,因为它集中了专业知识,而部门结构可以对市场做出快速反应,因为它们更接近客户,并且拥有无需跨部门支持即可做出反应的所有人员。然而,正如英特尔管理层传奇人物安迪·格罗夫在他的著作《高产出管理》中所建议的那样,达到足够规模的组织将汇聚成一个矩阵结构,在这个矩阵结构中,团队由不同的部门组成,并有一个职能监督。尽管这可能会导致双重报告关系的开销,但这是唯一可行的结构,可以鼓励部门团队的敏捷性,同时保持总体职能团队的效率水平。最近,我们看到了跨职能团队结构的兴起,这是由于采用了敏捷交付方法,团队完全自给自足,并遵循敏捷框架处理自己的积压工作。这些是实践中常见的许多结构中的几个,它们都呈现不同的优点和挑战。

集中式数据科学团队

对于现有职能结构的组织,组建数据科学团队最合理的方式是创建一个集中化的团队。它可以是一个独立的团队,也可以放在一个更大的团队(如技术或产品团队)之下,但从本质上讲,这个团队将只由数据角色组成。该团队将充当内部职能部门,支持不同团队的数据需求。

这种方法有几个主要好处,

  • 单一团队意味着基础项目,如基础设施、治理流程和最佳实践,可以以集中的方式建立,这将提高团队的整体效率。
  • 该团队可以灵活地支持多个业务部门,尤其是当一个业务部门无法独自证明全职员工人数的合理性时。这鼓励较小的团队尽可能地利用数据。
  • 职能报告线意味着数据科学家将向同一领域的人报告,这意味着职业发展更容易管理。

然而,这种结构也存在一些挑战,

  • 严重依赖不同的团队来识别利用数据的机会,并能够有效地与集中的团队沟通他们试图解决的问题。
  • 由于人们没有长期融入团队,对于数据科学家来说,积累关于领域和数据的深入知识是一项挑战。随着人们逐个项目地工作,长期解决方案可能不会被优先考虑,因为项目时间表将简单地超出结构所能容纳的范围。
  • 资源(人员)分配成为一项重要的开销,因为不同的团队有相互竞争的优先级,并且保护人员的过程变得政治化和耗时。

嵌入式数据科学家

另一方面,使用嵌入式模型的公司会让每个业务部门雇佣自己的数据角色。这鼓励了自主性和专业化,因为每个部门团队都可以根据他们的具体要求进行招聘。通常,这种设置中的数据角色关注的范围更窄,因为与服务于业务所有不同部分的数据团队相比,单个团队的范围更小。

这种模式有一些优点,

  • 数据科学家与团队一起直接解决这个问题。这鼓励长期的解决方案和所有权,因为环境促进和鼓励这种深度。
  • 它还使数据科学家能够专注于领域内的数据问题。
  • 自主性使数据科学家能够以更敏捷的方式工作,并能够在其他团队最少监督的情况下调整他们认为合适的工作

但这也带来了以下挑战,

  • 由于不同的团队有不同的优先级和时间表,部门决策鼓励孤岛的发展。这使得任何跨部门的倡议都非常困难,因为这种结构不适应这种类型的合作,因此大规模的内部问题不太可能在这种情况下得到解决。
  • 不一致的过程和实践将会出现,因为每个团队都有他们自己的工作方式和标准。缺乏正式的沟通渠道也将使共享现有知识和最佳做法变得更加困难。
  • 由于数据科学家将向可能来自不同背景的部门领导汇报工作,因此长期职业发展可能具有挑战性,因为鉴于领导不一定熟悉数据科学领域的发展途径,长期职业发展需要个人对自己的进步承担更多责任。

《黑客帝国》(电影名)

当然,上面的两个例子与其说是实际的,不如说是原型的,因为大多数组织都介于这两个定义明确的模型之间。这就是矩阵式组织适合的地方,它提供了一个覆盖部门团队的职能结构。这种模式建立了沟通渠道,弥补了纯部门结构的不足。功能覆盖是可以共享知识和应用标准的地方。它还创建了一个可以执行大型跨部门项目的机制。虽然这在理论上是理想的,但由于双重报告关系和两个结构之间的利益冲突,额外的一层管理起来可能相当复杂。就像结合不同想法的解决方案一样,这可以很容易地将前两个模型的问题结合起来,而不是将两个世界的优点结合在一起。为了让矩阵组织为数据科学团队服务,我们需要一个强大的数据科学领导团队来推动职能部门的卓越表现,还需要了解让数据科学团队参与这些职能活动的长期价值的部门领导。他们将需要共同努力,确保他们的整体愿景保持一致,以最大限度地减少两个报告线之间的紧张关系。

跨职能团队

还有一种新的结构正迅速受到欢迎,尤其是在科技行业,这种结构专注于一个完全自给自足的小型跨职能团队。这是一个类似于部门结构的概念,但是更进一步,更加关注灵活性和独立性。这里的关键区别是授权小团队做出自己的决定,这缩短了业务提案和批准流程的通常周期,希望获得速度优势,使团队能够尽快对市场需求做出反应,而没有不必要的监督。这可能是从具有层级结构的大公司结构到现在创建尽可能多自治的小团队的矫枉过正。也有像全息照相术和其他模式的变体,试图通过将尽可能多的权力推给在现场执行的人来实现相同的目标。这是一个有趣的转变,因为它鼓励将问题分解成更小的部分,并且关注迭代测试和改进。因此,一方面,它与数据科学完美契合,因为数据科学是关于学习和实验的。但另一方面,它也带来了同样的挑战,即大规模的问题无法在这个框架下轻松解决,人们最终试图将一个大圆钉(基础问题)装进一个小方孔(部门解决方案)。公司试图解决这一问题的方法之一是,通过让不同的团队完全拥有他们共同问题的一部分,并标准化团队之间的沟通渠道,来彻底消除大规模问题。使用这种方法,我们看到团队拥有独立于其他团队的自己的基础设施,只要他们能够为其他团队提供一致的方式来与他们协作。这可以通过一组通用的预定义应用编程接口(API)或发布数据目录供其他团队利用的形式来实现。这与 DevOps 的理念和微服务架构的理念密切相关,devo PS 的理念是“您构建它,您运行它”,而微服务架构的理念是将整体问题分解为可以独立解决的小问题。技术公司在这方面有优势,因为这些是软件开发概念,而更传统的公司可能会在实践中与这种模式斗争。

在安置数据科学团队时,最重要的是什么?

没有安置数据科学团队的最佳方式,每种结构都不可避免地有其优点和缺点。很多时候,解决方案失败不是因为团队不称职,或者数据不正确,或者方法错误,而是因为环境甚至没有给团队成功的机会。我们经常认为我们正在工作的结构是理所当然的,因为它似乎太难改变,但最重要的是我们要把结构搞对。我们需要认识到数据科学团队的复杂性和独特性,并对现有结构进行调整,以确保环境有利于团队,而不是不利于团队。只要很好地理解和减轻与 are 相关的挑战,最终采用哪种结构并不重要。对于那些有能力改变环境的人来说,你有责任为团队建立正确的结构,并带领他们走向成功。所以回到最初的问题,你的数据团队在哪里?

如果您喜欢我的内容,请在 https://jchoi.solutions/subscribe注册更多内容

哪里最容易找到数据科学的工作?不是你想的那样!

原文:https://towardsdatascience.com/where-it-is-the-easiest-to-get-data-science-job-not-where-you-may-think-28e33ec652b3?source=collection_archive---------38-----------------------

照片由 Unsplash 上免费使用声音

新冠肺炎对生活的几乎所有方面都产生了影响,包括人们的工作,也包括广泛的 IT 领域(以及我们最感兴趣的领域——数据科学领域)。

为了帮助同行业的同事找工作,我决定对 LinkedIn 数据做一个小分析,并回答如下问题:

  • 哪些国家拥有最大的数据科学劳动力?
  • 哪些国家拥有最大的数据科学就业市场(空缺职位数量)?
  • 哪些国家的人均数据科学专家数量最多?

最后,在哪里最容易找到数据科学工作(根据空缺职位数量和员工数量的比例)?

这项研究是在 LinkedIn Jobs & People data 上进行的,涵盖了数据科学和类似领域(数据科学家、数据分析师、数据工程师、数据科学经理、大数据专家)至少有两个职位空缺的所有国家。

在我们对结果过于兴奋之前——让我们记住一件事:分析只在 LinkedIn 数据上进行。该网站本身在世界各地的受欢迎程度并不相同,因此在 LinkedIn 受欢迎程度较低的国家,大多数工作可以在其他网站上发布,专家注册和分享其个人资料的动力较小,因此我们可能会错过一些数据。

来源:Linkedin

然而,LinkedIn 仍然是最受欢迎的以就业为导向的在线服务,所以我们仍然可以捕捉到一些有趣的见解!

1。人均科学家数量最多

先说数据科学职业在全球的普及程度。哪些国家的人均数据科学家数量最多?每一个数据专业人员有多少人?

数据职业似乎在来自小型发达经济体(和美国)的人群中最受欢迎——爱尔兰、新加坡、瑞士、美国、卢森堡。

2。科学家总数最多

哪些国家拥有最大的数据科学劳动力?

这里没有惊喜。主要是最大的经济体(主要是英语圈)——美国、印度、英国、加拿大和法国。其中一些是大多数技术工人移居的国家。

3。最大作业量

事情越来越有趣了。

在哪些国家,该领域的空缺职位数量最多?

与上一篇相似——世界上一些最大的经济体:美国、印度、德国、英国、法国。

4。每位科学家的最大工作量

你可能最感兴趣的一个。世界上哪里(或者可能是哪里)最容易找到数据工作?不是你想的那样!

答案是欧洲&东南亚的一些国家——葡萄牙、白俄罗斯、罗马尼亚、菲律宾、德国。

在葡萄牙,每份工作只有 6 名数据专业人员。白俄罗斯和罗马尼亚有 8 起,菲律宾有 9 起,德国有 10 起。

在其他一些国家,每份工作只有 11-12 名专业人士,这些国家包括:新加坡、日本、波兰、南非和哥斯达黎加。

为什么是这些国家?

一些解释可能是,目前像葡萄牙、白俄罗斯、罗马尼亚、菲律宾或波兰这样的国家拥有蓬勃发展的 IT 部门,这是因为公司决定将分支机构外包或转移到劳动力成本更低、劳动力受教育程度更高的国家。

你有更好的解释吗?在评论中分享!🎉

这对你意味着什么?这些国家可能值得研究!

然而,请记住,即使就业市场竞争不那么激烈,也并不意味着你会更容易找到工作——可能仍然存在当地法规(工作许可证)和要求(懂当地语言)。工资也可能很低,导致对他们的需求减少。

如果你对数据或代码(Python 和 Bokeh)感兴趣,你可以在这里找到:

[## 主 m-kortas/DS-playground 的 DS-playground/datascience jobs _ analysis . ipynb

深度学习、机器学习、NLP 和可视化-DS-playground/datascience jobs _ analysis . ipynb at main…

github.com](https://github.com/m-kortas/DS-playground/blob/main/visualisation/Linkedin_analysis/DataScienceJobs_analysis.ipynb)

机器学习遇到密码学

原文:https://towardsdatascience.com/where-machine-learning-meets-cryptography-b4a23ef54c9e?source=collection_archive---------5-----------------------

通过机器学习解决带噪声的密码相关学习奇偶校验问题

当你读到这里的时候,很可能你已经知道一些关于机器学习的事情。你知道机器学习算法通常会接受一堆样本,每个样本包含固定数量的特征,并最终输出一个预测

你可能听说过(但没有深入研究)的是密码学领域。这是一个神秘的话题,涉及到安全、密码和隐藏的东西。也许你甚至听说过 AESRSA ,它们是加密数据的算法。

但是不要担心,即使您以前从未接触过密码学,您也能够理解,因为我将从入门的角度来解释一切。

在这篇文章中,我想把这两个领域结合起来。我将向您介绍一个易于理解但难以解决的用于构建密码算法的问题——所谓的带噪声的学习奇偶校验问题,简称 LPN 。LPN 中的“L”应该已经给你的机器学习敲响了警钟,因为这个问题可以被视为一个常规的机器学习问题!

但首先,让我们看看 LPN 问题在加密设置中自然出现在哪里,以及如何定义它。之后,我们将使用机器学习来解决 LPN 问题。

动机

假设您拥有一家酒店,并且您想要管理对客人房间的访问,即每个客人应该只能进入他们自己的房间。有道理,对吧?

你的酒店。照片由英治 KUnsplash 上拍摄。

现在,传统上你可以使用普通的物理钥匙。缺点是,人们有时会丢失钥匙,这意味着您的业务会有很大的成本,因为您必须更换受影响的门上的锁。

因此,您决定部署智能卡,特别是带有 RFID(射频识别)芯片的卡,以及相应的锁。由于你必须提供许多门,并且你想省钱,你选择非常弱的 RFID 芯片,即计算能力递减的芯片,甚至可能没有自己的电源。

苏珊·普兰克在皮克斯贝拍摄的照片。

你的系统应该是这样工作的:每把锁和每张卡都存储了一个密钥,一个二进制向量,比如 s= (1,0,1,0),实际上要长得多。如果你把你的卡放在一把锁旁边,这把锁就像一个阅读器一样扫描卡的密钥。在这种情况下,芯片被称为标签

线索:如果卡和门的秘密钥匙匹配,门就会打开。

完美!但是怎么做呢?嗯,一个简单的方法是把你的卡放在锁旁边,锁告诉卡上的芯片把它的密钥发送给锁。然后,锁检查两个密钥是否相等,如果相等,则开门。

这是有意义的,因为如果您没有正确的卡,即您芯片上的密钥与门锁中的密钥不同,门将无法打开。

问题是

当客人想要进入他们的房间时,这种解决方案的麻烦就开始了:一个坏人,通常在密码学中被称为攻击者,可能坐在走廊上,显然只是无辜地在他们的笔记本上打字。攻击者实际做的是 嗅探RFID 流量,即读取锁和客人芯片之间的通信。如果芯片直接发送密钥,攻击者将看到它,存储它,伪造一个包含这个密钥的卡,然后将能够进入房间。

一个典型的黑客在工作,这一次没有滑雪面具。纳赫尔·阿卜杜勒·哈迪在 Unsplash 上拍摄的照片。

所以,这是个坏主意。只有在世界上没有坏人的情况下(极不可能)才有效。相反,我们必须武装自己,为我们的客人提高安全性。想法是这样的:

芯片必须以某种方式向锁证明它拥有正确的密钥,而不泄露它。

我听到你尖叫: 这就是加密的作用! 你说的没错。攻击者只能在嗅探工具中看到垃圾,而无法重建密钥。但可悲的是,RFID 芯片对于加密任何东西来说都太弱了,因为你想省钱,记得吗?可悲的是,现实世界中的大公司也是如此。这种芯片几乎没有计算能力,存储空间也只能勉强容纳密钥。因此,我们需要另一种更轻量级的解决方案。

一种方法是使用类似于 HopperBlumHB 协议的加密协议。这个协议使得攻击者很难提取密钥。

照片由 Goh Rhy YanUnsplash 上拍摄

我要介绍的 vanilla HB 协议还有其他漏洞,不应该在实际中使用。我用它只是因为它容易解释。为了现实世界的安全,应该使用该协议或其他安全协议的更安全的扩展。

血红蛋白协议

所以,你有一个阅读器R(锁)和一个标签T(你的芯片)。 T 现在想要向 R 证明它拥有相同的密钥而不泄露它。这是通过 R 反复询问 T 只有具有正确密钥的标签才能回答的问题来实现的。到目前为止,我们已经看到单个问题“你的秘密密钥是什么?”是不安全的,因为这已经暴露了太多的信息。相反,在 HB 协议中 T 被要求一次只透露一小部分秘密,直到 R 能够确定 T 拥有正确的秘密密钥。****

假设 RT 的密钥实际上都是同一个 s =(1,0,1,0)。现在 RT 发送一个随机二进制向量 a (例如 a = (1,0,1,1)),并期望 T 用标量积 b = < a,s >,对其进行响应,即

在这个例子中。我们称这个挑战。记住,我们在这里处理的是位算术,所以“+”实际上是一个 XOR。乘法和实数乘法是一样的。或者对数学家来说:我们在域 GF(2)或𝔽₂中计算,这个域有两个元素。

异或就像整数的普通加法,只是 1+1=0。

R 可以自己计算标量积(它知道 as )并检查 T 的答案。如果 T 的答案是相同的,那么 R 可以更加确信 T 确实拥有相同的密钥。为了增加信心,这个游戏要重复几次。

例如,如果 T 没有正确的密钥,那么在足够多的回合之后,它很可能不会成功,因为单个响应的正确概率只有 0.5。因此,例如,在 10 轮之后,成功认证的机会仅为 1/1024,小于 0,1%

这听起来好多了吧?T 现在并没有一口气透露它的秘密,相反,它通过回答挑战给了 R 一些信息。但可悲的是,这也是完全没有安全感的。攻击者仍然可以写下 RT 之间的完整通信,然后轻松求解线性方程组来恢复 s 。这是通过以下方式完成的:假设攻击者已经为挑战/响应对写下了以下内容:

攻击者也知道

其中 A 是包含 aᵢ 行和bbᵢ行的矩阵。在我们的例子中:

攻击者必须解决的线性方程组。

因此,解决这个系统为产生的秘密。如果 s 大得多,即 1024 位长,这也可以通过高斯消除容易地完成。顺便说一下解决方法是 s = (1,0,1,0)。😎

噪声问题下的学习奇偶校验

有一个非常小但是非常重要的调整来防止我们的攻击者: T 只是在它的响应中添加了一些随机的伯努利噪声。它不是将 < a,s发送回 R,而是掷一枚概率为 p 为 1,否则为 0 的硬币 e,并将a,s > +e* 发送回阅读器换句话说,标签以概率 1- p< a,s > 发送回 R ,并以概率 p 将响应位从 0 翻转到 1 或从 1 翻转到 0 我们假设*p<0.5。**

这并不能而不是阻止攻击者嗅探 RT 之间的通信,并做笔记当然,但他们现在必须解决以下问题:

这个符号表示方程组的每个方程只有概率 1- p 才是正确的。更正式地说,你可以把它写成 As+e=b,其中 e 是噪声向量,每个分量(独立地)以概率 p 为 1,以概率 1-p为 0

因此,攻击者必须在 GF(2)上解一个嘈杂的方程组。对于一个恒定的错误率 p,这个问题——带噪声的学习奇偶校验(LPN)问题——被认为对于足够长的密钥长度是不可行的。如果攻击者可以获得任意多个方程,这也是正确的。

即使添加了这些错误, R 也可以完成确定 T 是否知道 s 的工作。如果 T 具有正确的 s,大约 1- p 响应的一小部分将是正确的这意味着如果 p = 0.25,HB 协议运行 1000 次迭代, T 应该给大约 750 个正确响应

如果 T 没有正确的 s ,它将给出大约 0.5 个正确答案的分数,即1000 个回合中的 500 个回合协议运行。这允许 R 决定 T 是否有正确的秘密,并且这个协议对我们的用例仍然有意义。

通过机器学习求解 LPN

现在让我们开始有趣的部分。我们已经确定,解决 LPN 问题意味着,给定一个随机二进制矩阵 A 和一个二进制向量 b=As+e ,恢复 s.

重要观察:我们可以把矩阵 A 的每一行 aᵢ 现在作为一个样本,把向量 b 中对应的值 bᵢ= < aᵢ,s > +eᵢ 作为标签。

使用秘密长度为 4 和六个捕获的通信的例子,我们可以看到矩阵 A 的每一行包括四个特征,并且 b 中的条目是相应的标签。我们的数据集大小为 6。

正如在机器学习中使用的正常数据集所发现的,标签 bᵢ 实际上类似于特征向量 aᵢ 和固定秘密向量 s(一些基本事实)的标量积,但是添加了误差项。但是,当我们抛出一个机器学习算法来预测标签时,我们如何才能获得秘密呢?

好吧,如果我们能很好地学习问题,我们就能为标签生成好的预测(标积;地面真相)为每个特征向量 aᵢ 我们喜欢。如果我们放入向量 a =(1,0,0,0),那么我们会得到一个很好的猜测

第一位的s!对向量(0,1,0,0),(0,0,1,0)和
(0,0,0,1)做同样的操作,我们就有了密钥的所有位。

因此,我们可以使用机器学习来解决 LPN 问题。

评论

LPN 问题是一个非常通用的问题,您也可以使用它来构建加密、基于身份的加密、用户认证、不经意传输、消息认证码,以及可能更多的构造。此外,与因式分解问题不同,LPN 问题无法使用量子计算机轻松解决。与它的轻量级配对,它是构建后量子安全算法的一个很好的候选者。所以,不用担心,如果 RSA,这种基于大数分解的算法,在量子计算机面前消亡了。;)

关于 LPN 问题的更多信息和更好的数学定义,请参考我的论文[2]。

实验

让我们首先定义一个 LPN oracle,即一个我们可以在实例化时用一个密钥和一个错误级别 p 来填充的类,这给了我们想要的那么多样本。

这可以使用以下代码轻松完成:

import numpy as np

class LPNOracle:
    def __init__(self, secret, error_rate):
        self.secret = secret
        self.dimension = len(secret)
        self.error_rate = error_rate

    def sample(self, n_amount):
        # Create random matrix.
        A = np.random.randint(0, 2, size=(n_amount, self.dimension))
        # Add Bernoulli errors.
        e = np.random.binomial(1, self.error_rate, n_amount)
        # Compute the labels.
        b = np.mod(A @ self.secret + e, 2)
        return A, b

我们现在可以用长度为 16 的随机秘密和 p = 0.125 来实例化这个 oracle。

p = 0.125
dim = 16
s = np.random.randint(0, 2, dim)
lpn = LPNOracle(s, p)

我们现在可以从lpn开始取样:

lpn.sample(3)

# My output:
# (array([[1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1],
#        [1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0],
#        [1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0]]),
# array([1, 1, 1], dtype=int32))

这里我们采样了 3 个数据点。现在,让我们试着用决策树找到。当然,您也可以尝试逻辑回归、伯努利朴素贝叶斯和您选择的任何其他分类器。

from sklearn.tree import DecisionTreeClassifier

dt = DecisionTreeClassifier()

# Get 100000 samples.
A, b = lpn.sample(100000)

# Fit the tree.
dt.fit(A, b)

# Predict all canonical unit vectors (1, 0, 0, ..., 0), (0, 1, 0 ,0, ..., 0), ..., (0, 0, ..., 0, 1).
s_candidate = dt.predict(np.eye(dim))

# Check if the candidate solution is correct.
if np.mod(A @ s_candidate + b, 2).sum() < 14000:
    print(s_candidate, s)
else:
    print('Wrong candidate. Try again!')

学习算法可能无法捕捉基本事实并学习另一个函数。在这种情况下,向量的所谓汉明权重相当高(对于我们长度为 100000 的向量来说大约为 50000)这对应于标签 T 具有错误密钥并且可以正确回答大约一半挑战的情况。如果 s _candidate = s,汉明重量将在 0.125 * 100000 = 12500 左右。

在这个例子中,阈值为 14000 是在识别正确的秘密和不输出错误的候选解之间的一个很好的折衷。你可以在[2,23 页]中找到如何得到这个界限。

结论

我们已经定义了 LPN 问题,并了解了当试图破解加密 HB 协议时它是如何出现的。然后我们用一个简单的决策树解决了一个小问题。

但旅程才刚刚开始:我们可以用其他/更好的算法(深度学习,有人吗?)或巧妙的花招来

  • 获得更高的成功率,
  • 使用更少的样本和
  • 能够解决更高维度的问题。

关于求解 LPN 的非机器学习算法的列表和解释,请查看我的论文[2]。还有,如果你想出名,比如试着求解一个秘密长度为 512,p=0.125 的实例。这个 LPN 实例目前未被破坏,用于一些现实世界的密码系统。祝你好运!;)

参考

[1] N. Hopper 和 M. Blum,安全人类识别协议 (2001),密码学与信息安全理论与应用国际会议,Springer

[2] R. Kübler,学习奇偶与噪声问题的时间记忆权衡 (2018),学位论文(波鸿鲁尔大学)

我希望你今天学到了新的、有趣的、有用的东西。感谢阅读!

作为最后一点,如果你

  1. 想支持我多写点机器学习和
  2. 无论如何,计划获得一个中等订阅,

为什么不做 通过这个环节 ?这将对我帮助很大!😊

说白了,给你的价格不变,但是大约一半的订阅费直接归我。

非常感谢,如果你考虑支持我的话!

有问题就在 LinkedIn 上写我!

停车点到底在哪里?

原文:https://towardsdatascience.com/where-really-are-the-parking-spots-ed6a1129035e?source=collection_archive---------63-----------------------

利用急流寻找更准确的步行距离

这个形象怎么了?

之前的故事中,我们探索了 NVIDIA RAPIDS package 的 cuSpatialcuGraph 库,并使用它们来查找到西雅图太空针附近最近停车点的步行距离。这是在融合数据科学的约翰·默里的大力帮助下才有可能实现的,他友好地提供了一张金县道路图,以十字路口列表(带有地理坐标)和连接十字路口与计算长度(以码为单位)的边列表的形式。

然而,快速浏览一下上面的地图,很快就会发现我们之前提出的相对简单的方法存在一个问题:从最近的十字路口到停车点的距离是一条直线(直线)。在这个故事中,我们将看看如何解决这个问题。

《当乌鸦飞》与《当人们工作》的对比

我们如何解决上述问题?让我们更接近真实步行距离的一种方法是在地图上(为每个停车点)找到一个停车点,该停车点的位置垂直于道路本身,如下图所示。

蓝线显示当前的解决方案。正如你所看到的,我们正在建筑物和十字路口上空飞行,这是正常人通常做不到的。然而,橙色线显示了一种更现实的方法,即一个人沿着道路走到选定的停车位置。

因此,我们需要向我们的图中添加更多的节点和边:每个停车位置一个,以使到最近道路的距离最小化,即,位于连接两个节点的线上的节点,并且当连接到停车计时器的位置时,这样的线是垂直的。

让我们做一些数学!

给定 3 个点,找出两条线的交点是小学时的一个简单问题,所以下面只是一个快速复习。

我们寻找新节点位置的方法。

给定平面上的两个点,我们可以通过获取这两个点之间的纬度差并除以它们的经度差,快速找到连接两个节点(道路交叉口)的黑线的斜率 a :

a =(lat _ pt _ 1-lat _ pt _ 2)/(lon _ pt _ 1-lon _ pt _ 2)

垂直线的斜率就是 a 的负倒数:

a _ vertical =-1/a

同样简单的是找到黑线的常数 b ,因为我们已经知道了斜率:

b=lat_pt_1-alon_pt_1*

当然,我们可以用另一个点得到同样的结果。给定垂直线的斜率和停车点的位置—我们现在可以快速地做同样的事情来找到b _ vertical

由于交叉点处的点将具有相同的纬度,无论我们使用什么等式(它毕竟是一个交叉点),我们可以将这些等式设置为彼此相等,以找到交叉点的经度:

a * lon _ intersection+b = a _ vertical * lon _ intersection+b _ vertical

快速的代数变换,我们可以清楚地看到 lon_intersection 点:

lon _ intersection =(b _ vertical-b)/(a-a _ vertical)

找到纬度现在是微不足道的,因为我们可以使用任何一个方程来得到它。

来做点编码吧!

现在我们有了方法,让我们把它转换成一个 RAPIDS 内核。

上述内核中的点 xy 是描绘道路的两点,点REF是停车点。注意:如果你不熟悉定义 RAPIDS 内核,我在之前的两篇文章中已经提到了:我应该停在哪里?我该往哪里走?所以我就不在这里讨论了。

在我们上面的计算中,我们没有解决两种特殊情况:当道路完全沿着南北或东西走向时。在前一种情况下(南北对齐),投影点的经度是任一点的经度,而纬度将是停车位置的纬度。在后一种情况下(东西走向),解决方案将是相反的:我们取任一点的纬度,经度将是停车点的纬度。

我们现在可以迭代所有的停车位置。首先,我们需要将经度和纬度添加到 road_graph_data 数据帧中;作为复习,这个数据帧只包含一对节点和它们之间的距离。我们将从道路节点数据帧中获取这些数据。

计算停车位置和 road_graph_data 中的所有点之间的距离是没有意义的,因此我们将节点列表划分为距离正在处理的停车节点大约 2000 英尺以内的节点。

现在我们可以找到交点了。

因为我们正在处理 2000 英尺以内的节点,所以我们需要检查该点是否位于两个节点之间。我们通过检查从交点到每个点的哈弗线距离之和小于或等于这两个节点之间的实际长度来做到这一点。

为了找到最佳拟合,我们选择距离停车点距离最小的点,并将该节点添加到节点列表中。

最后,我们还添加了连接停车位置和找到的交叉点的边。

处理~1500 个停车咪表位置只用了 3 分 20 秒(大王县有 12.7 万多个道路节点!)上的英伟达泰坦 RTX

成功了吗?!

使用与我们在之前的故事中提出的相同的 cuGraph 方法,我们现在可以找到更可靠的方法来遍历我们的图表并找到太空针附近最近的停车位置!

我们应该在哪里寻找可居住的行星?

原文:https://towardsdatascience.com/where-should-we-look-for-habitable-planets-9d9330275d8c?source=collection_archive---------36-----------------------

和很多人一样,我从小就迷上了天文学和太空探索。最有趣的可能性之一是其他恒星周围的世界,并且可以居住(或有人居住!)世界更是如此。在发现任何系外行星之前,我们可以推测其他恒星系统的性质,但我们只有我们的太阳系来观察和检查我们的理论。我们很自然地认为,其他拥有潜在宜居行星的恒星系统看起来会像我们的一样——大型气体巨行星在较大的轨道上,较小的岩石行星靠近恒星。然而,事实并非如此。

随着 51 Pegasi b 的发现,我们了解到在其他类似太阳的恒星周围有行星,这些恒星系统的排列方式与我们的不同。进一步的系外行星发现进一步证实了这一点,包括一些具有潜在宜居世界的恒星系统。一个这样的例子是开普勒-69(如下所示),它有一颗靠近恒星运行的大型气态行星,以及一颗在较大轨道上的较小的潜在宜居行星——这种安排与太阳系非常不同

我们如何整理这些数据来发现适合居住的星球呢?我们已经知道,可居住的行星需要主序星不太热也不太大,但即使有这些要求,许多恒星也符合要求。由于搜寻系外行星的资源有限,任何缩小搜索范围的方法都会有所帮助。也许我们可以超越恒星的要求,利用我们所知道的已经发现的恒星系统来预测可居住的行星可能在哪里。一种方法可能是使用机器学习来尝试更好地预测哪些恒星将拥有可居住的行星。

考虑到这一点,我建立了一个梯度增强模型,根据恒星和其他行星来预测恒星系统是否有可居住的行星。作为输入,我使用了每颗恒星的不可居住行星的质量、半径和轨道大小,以及恒星的温度、半径和质量。只有大约 4%的多行星恒星系统有可居住的行星,所以猜测没有恒星有可居住的行星的基线,虽然没有帮助,但确实提出了一个需要克服的挑战。当然,我们的目标是改进恒星数据,所以我也只使用这些数据构建了一个类似的模型。因此,我们可以看到行星数据是否改善了预测。

我的两个模型都是成功的(它们在准确性和 ROC-AUC 得分方面都超过了基线,精确度和召回率在下面详述)。此外,正如我所希望的,行星模型打败了只有恒星的模型。作为进一步的验证,我将太阳系包括在测试集中,去掉了地球(就像其他系统的潜在可居住行星一样),以查看模型是否可以正确预测太阳及其其他 7 颗行星中有一颗可居住的行星。令人高兴的是,行星模型预测我们的太阳有一颗可居住的行星!不幸的是,纯恒星模型认为我们的太阳只有 40%的机会拥有可居住的恒星。

评估模型

stellar 模型的召回率为 33%,正确找到了三分之一的目标系统,精确度为 50%,假阳性和真阳性的数量相等。行星模型的召回率为 50%,找到了一半的可居住系统,精确度为 75%,三次正确预测中只有一次误报。当然,基线的召回率为 0——没有识别出任何潜在的可居住的恒星系统,但也没有假阳性。

梯度推进模型给了我们概率和分类,所以我们可以看看一颗恒星有可居住世界的概率。随着检测方法的改进或更多的资源被分配给搜索,这可能是有用的。我们可以检查的候选人越多,召回就越重要,精确度就越不重要——假阳性越多,假阴性越少,这是一种可以接受的权衡。只接受 5%的可能性会让我们在两个模型中都得到 100%的回忆分数,行星模型再次比只有恒星的模型给出了更好的精确度——24%比 20%。由于潜在的宜居行星很少出现,所以在精确度和召回率之间存在权衡也就不足为奇了,但这确实向我们展示了模型的行为符合我们的意愿——不太可能的预测包括更多的假阳性,但也捕捉到了所有的目标恒星。

用 Shapley 值看引擎盖下

绘制 Shapley 值可以帮助我们了解模型使用什么特征来进行预测,以及这是否符合直觉。下面是狼 1061 的沙普利力图:

这是我们太阳系的沙普利力图

我们可以看到,虽然恒星的特征主导了预测,但行星的特征也起了作用。特别是,我们的太阳尤其受到木星和金星轨道的帮助。这与我们对恒星系统知识的预期大致相符。我们可以通过 Shapley force summary 在整个测试集上看到相同的效果:

再次,恒星特征占主导地位,但我们可以看到行星肯定也有影响。

结论

这些模型表明,在评估一颗恒星拥有可居住行星的可能性时,纳入来自已发现行星的数据是有价值的。这种模型目前面临的最大挑战是数据的不完整状态。许多团队已经使用各种方法和仪器发现了系外行星,并不是所有团队都为每个发现的行星提供相同的数据。这加剧了已经很小的样本。

同样值得考虑的是,现有的系外行星样本被我们探测它们的能力扭曲了。例如,更小、更冷的恒星可能有更靠近轨道运行的可居住行星,并且靠近轨道运行的行星更容易被探测到。因此,我们在相对较小的冷恒星周围发现更多可居住行星的事实可能并不反映它们的真实分布。

数据、方法、参考资料、链接

系外行星数据来自美国宇航局系外行星档案馆

可居住性数据来自可居住系外行星目录,这是位于阿雷西博的波多黎各大学行星可居住性实验室的一个项目

建模是用 python 和 scikit-learnXGBoost 完成的

我的 python 笔记本可以在我的 GitHub repo 中找到

您应该在哪里部署您的模型?

原文:https://towardsdatascience.com/where-should-you-deploy-your-model-8b67328b37c3?source=collection_archive---------56-----------------------

AWS 是部署的终极目标吗,或者还有更多故事?

(图片由作者提供)

您已经完成了清理数据的工作。您已经设计了功能,销毁了丢失的值,并创建了一个非常适合预测您的目标的模型。您终于准备好将这个模型投入生产了,但是您必须部署您的模型的选项数量太多了。虽然我们非常幸运地生活在一个云计算已经在机器学习市场占据了很大一个领域的时代,但这也有一个缺点,即所有的选项往往很难将你的决定缩小到哪一个最适合你的模型和你的个人情况。

另一篇关于这个主题的文章是关于部署的概述,作者是 neptune.ai ,如果你想学习更多关于部署 API 的知识,这是一个很好的资源!以下是一个链接:

[## 模型部署策略- neptune.ai

近年来,大数据和机器学习已经被大多数主要行业采用,大多数初创公司都在…

海王星. ai](https://neptune.ai/blog/model-deployment-strategies)

虽然 Amazon Web Services (AWS)对于大多数应用程序来说当然是一个很好的选择,但它也相当昂贵,并且对于许多相当基本的终端来说根本不需要。另一方面,像 Heroku 这样的自动化服务使托管模型变得非常容易,甚至是免费的,但也使端点可用性的范围相对有限。在端点部署领域中,所有这些伟大的选项相互平衡,哪一个是适用于不同情况的最佳选项?

选项 1: AWS

毫无疑问,就性价比而言,AWS 几乎完全击败了其他所有服务。这也是为什么很多工作都把 AWS 经验作为就业的要求。对于许多企业应用程序来说,AWS 是一个近乎完美的工具,因为它允许使用跨大规模不同服务器的计算和成本对实例进行分组。

虽然 AWS 对于需要大量计算能力的模型来说是一个很好的解决方案,但肯定可以说需要在性价比的某个点上划一条线。AWS 可能很快变得相当昂贵,如果您计划使用大量计算而回报很少,这可能不是最佳选择。如果你不可能在计算上赚回你的钱,那么它首先就不值得托管。对于一些长期使用强度大,但不一定需要立即供电的应用,可能需要一个更经济的选择。最重要的是,AWS 是出了名的难以使用。根据我的经验,我遇到过在 AWS 仪表板中找不到选项的情况,或者实际上被 AWS 阻止通过 SSH 做某些事情,这确实令人沮丧。

选项 2: Linode

如果你像我一样每天都使用 Linux,知道如何使用 NGINX 和 Apache,并且了解如何运行 Unix 命令行,那么 Linode 很可能是你的最佳选择。Linode 的优势不仅在于价格低廉,而且类似于 AWS,具有极强的可扩展性。在服务器上执行特定操作需要更多内存?Linode 允许你选择单独的部件用于你的服务器,这样你的内存问题就解决了。下面是我写的一篇文章,它更深入地介绍了 Linode 的优势:

[## Linode 可能是最好的部署解决方案

由 Christopher Aker 创建的虚拟私有服务器托管服务 Linode 是最健壮、最具扩展性的…

towardsdatascience.com](/linode-might-be-the-best-deployment-solution-ad8991282c32)

Linode 的伟大之处在于,它不是为做这件事或那件事而构建的。虽然这意味着 Linode 服务器是难以置信的动态和免费的,但这也意味着它可能比您可能拥有的其他一些选项要复杂一些。使用 Linode 服务器,你需要做“Docker 的事情”,设置网络服务器和类似的事情。如果您不准备这样做,那么 Linode 可能不是您个人的最佳选择,不管它是否适合您要部署的模型。幸运的是,我已经发表了很多关于如何设置 NGINX 服务器并将 Gunicorn3 部署到产品中的文章,比如这篇:

[## 用 Gunicorn 3 展开烧瓶

应用程序部署通常会带来意想不到的后果和错误。部署可以是制定或…

towardsdatascience.com](/deploying-flask-with-gunicorn-3-9eaacd0f6eea)

Linode 是介于 AWS 这样管理复杂的东西和 Heroku 这样管理极其简单的东西之间的中间地带。虽然它可能无法提供与 AWS 相同的原始性能或完美的连接,但它以简单的固定速率运行,您可以根据需要进行扩展。

选项 3: Heroku

您在哪里部署您的模型是一个问题,这个问题的答案不仅取决于您寻求用您的模型完成什么,还取决于您自己的能力。如果您是初学者,刚刚开始管理虚拟环境,Heroku 是一个很好的选择,可以让您在一定程度上熟悉部署过程。Heroku 是一项服务,它将为您的服务建立一个独特的虚拟环境,并自动部署这些服务,从所述环境中加载您的依赖项。

尽管这很方便,Heroku 在向免费用户要钱之前只给他们三次部署。Heroku 应用程序的另一个问题是,默认情况下,它是嵌入 Heroku 系统的,这给了你很小的灵活性来添加任何东西或扩展你的服务。例如,自动训练自己的模型在 Heroku 平台上很难实现。

选项№4:自己部署!

如果你有能力,或者只是真的能够应用自己,也许有一台旧电脑躺在周围,绝对没有什么可以阻止你自己托管你的端点!虽然自托管也有缺点,如降低网速和电费,但也有一些非常真实和令人信服的优点,你可能想在完全放弃这个想法之前考虑一下。托管自己的服务器的最大优势是您可以控制相关的硬件。虽然这在某种程度上是不利的,因为这可能意味着相当高的启动成本,但这也意味着您可以根据自己的意愿自由升级所有组件。

拥有对服务器做任何你需要做的事情的自由,本地访问它,甚至无头访问都是一个很大的优势。有时候,安装一个闪存驱动器来传输一个大文件可能比安全地复制它更方便。拥有自己的物理服务器的优势就像手机本身拥有更多存储空间的优势,而不是云存储;没有中间人,你是你的服务器的唯一所有者。如果运行服务器是你可能想要追求的,我在这里写了一篇关于如何做的教程:

[## 如何托管自己的 Python 模型

如何设置本地私有服务器并在其上部署端点。

towardsdatascience.com](/how-to-host-your-own-python-models-dc820081c320)

当然,除了这四个部署选项之外,还有很多其他选项,我认为这是一个通用服务器主机的很好的概述,您可能会发现它们能够全面部署端点。对我个人来说,我喜欢在尽可能少的限制下工作,而且我对 Linux 相当在行。因此,我会更多地考虑 Linode 和自部署选项。您选择的选项将完全取决于您的模型的用途、工作方式、需求以及您作为开发人员的开发操作技能。我还要感谢您阅读这篇文章。如果您碰巧在 9 月 1 日—9 月 2 日阅读这篇文章,我想演示一个自托管 HTTP 服务器,它只在那两天开放,所以我希望您喜欢我的惊喜!

这里有一个链接给那些在桌面上的人:

http://172.223.154.77:8000/desktop.html

这里有一个移动用户的链接!:

http://172.223.154.77:8000/mobile/mobile.html

从哪里开始您的数据科学项目

原文:https://towardsdatascience.com/where-to-begin-your-data-science-project-c22b1749ec1e?source=collection_archive---------44-----------------------

数据预处理解码,适合初学者。

现在,我们已经了解了一些数据科学的基础知识,重要的是,您需要将理论知识融入到初级项目中,以提高您的技能。

任何数据科学项目的第一步都是数据预处理。你从各种来源获得的原始数据并不是一种可以直接应用算法的形式。它需要被清理,丢失的数据需要被处理,数据需要被转换以便算法可以应用于它。

我将讨论只包含分类数据和数字数据的简单数据集。

米卡·鲍梅斯特在 Unsplash 上的照片

我们需要找到一个数据集来处理。我会列出一些你可以查阅的资源

除了这些可用的数据集,人们还可以通过从网上抓取数据来制作自己的数据集。python 有内置的库来帮助你完成这个过程。

手里有了数据,打开自己喜欢的工作环境(我用的是 Jupyter 笔记本),从导入库开始。

首先,我们将导入Pandas,它有助于高效地组织和操作数据,在进行数据分析时非常有用。接下来,我们导入NumPy,这有助于操作数字数据。添加matplotlib . py plot用于绘制简单图形。

使用这些库的一个简单方法是在导入时为它们保留一个快捷方式。

例如,在导入时,如果你写了“import matplotlib.pyplot as plt ”,你可以在将来简单地使用这个库作为“plt”。

现在,让我们最终将数据集放到我们的工作环境中。我们将把我们的数据作为数据帧来访问。DataFrame 是 Pandas 的一个对象,你可以将 DataFrame 可视化为一个电子表格。

假设您希望将数据帧命名为 df1,这样就可以将数据集加载到 df1 上,如下所示:

df1 = pandas . read _ CSV(<数据路径>)

这里“read_csv”就是读。csv 文件,可以用“read_excel”来读取。xls 文件。同样,熊猫为你提供了阅读工具。html,。json,。sql 文件。

所以这只是介绍性的部分,我们并没有对我们的数据做任何修改。现在我们开始有趣的部分。

当你开始观察你的数据时()运行“df1.isnull()。sum()"快速浏览数据中缺失的记录)您首先会注意到并非所有的数据属性都是完整的。你会在很多地方看到“南”。这是你丢失的数据。您处理的任何数据总是会有缺失值。有一些技巧可以解决这个问题。

最简单的方法是删除包含任何缺失值的行。您通常会处理包含数千个元组的数据集,因此删除几百个应该不会有什么不同,对吧?

" df1.dropna() "将删除包含任何缺失值的所有行。

但是,如果您删除的行代表了关于数据的一些重要信息,该怎么办呢?所以我们尽量避免删除任何条目。

仅当缺失值占数据的 1%以下时,才限制删除行。

我们采用的另一种方法是填充缺失的值。一种方法是使用 sklearn 库的估算器类。python 中的 Scikit Learn 或 sklearn 库包含许多用于机器学习和统计建模的有用工具。这允许您用现有值的平均值(众数/中值)来填充缺失值。

使用“可以实现类似的事情。fillna() "函数。“fillna()”还允许您分别通过“bfill”和“ffill”参数用之前或之后的值填充缺失值。

我提到过我们将处理分类和数字数据。

各种机器学习算法要求输入和输出是数字。

我们将从 sklearn.preprocessing 导入 LabelEncoder 类。这将非常快速地为每个分类变量分配一个数字。

假设你有 4 个不同的变量-绿色,黄色,蓝色和红色。因此,使用上述方法,您的代码将把这些变量分别映射到 0、1、2 和 3。

使用 LabelEncoder 有一个限制——当你将颜色设置为模型中的一个变量时,模型会认为黄色(1)比绿色(0)更重要。

它将根据分配给变量的数量赋予它们权重。

当我们的分类变量类似于小、中、大,因为小

因此,对于显示出一些优先级的变量,LabelEncoder 工作得很好。

为了解决属性颜色的问题,我们将引入虚拟变量。在虚拟变量中,每个分类变量都有一列。每列只有两个值- 0 或 1。

为属性“颜色”引入虚拟变量

当您创建虚拟变量并将它们输入到模型中时,您可以确保这些变量中的每一个都具有同等的重要性。这可以通过使用 sklearn.preprocessing 中的 OneHotEncoder 类来实现。

既然我们已经完成了大部分预处理,我们可以继续将数据分成训练和测试数据集。

一个一般的经验法则是保留 15-20%的数据用于测试,其余的用于训练。

测试你的最终模型以了解你的模型是好是坏是很重要的,不要在你训练它的相同数据上测试你的模型也是很重要的。我们又要拯救 sklearn 图书馆了。sklearn.cross_validation 的 train_test_split 类将生成现有数据集的两个随机子集。

在应用合适的算法之前,我们要做的最后一件事是特征缩放。大多数算法,如 K-means、SVM、线性回归、逻辑回归等,对属性的尺度非常敏感,也就是说,它们要求所有数据都在同一尺度上。许多基于距离的模型使用欧几里德距离,如果属性在不同的尺度上,那么其中一个属性将倾向于支配距离。即使适当的算法不是基于距离,缩放也有助于算法更快地收敛。我想在这里补充一点,基于树的算法受特征缩放的影响不大。

因此,有两种方法可以将所有属性归入同一等级- 规范化和标准化

归一化使用一个非常简单的公式将数据从 0 扩展到 1:

这可以通过从 sklearn.preprocessing 导入 MinMaxScalar 类来实现。

在标准化中,我们使用属性的平均值和标准差来衡量我们的数据。

缩放数据的平均值为 0,标准差为 1。结果数据没有特定的限制范围。

为了标准化,从 sklearn.preprocessing 导入 StandardScaler 类。

建议在进行要素缩放之前分割数据。您可以在训练数据上安装缩放器,并使用它来转换测试数据。

有了这个,你的数据就可以用来建立模型了。记得要彻底练习预处理,这个阶段需要很多时间。

如果您有任何建议或问题,可以在这里联系我

去哪里找机器学习的数据

原文:https://towardsdatascience.com/where-to-find-data-for-machine-learning-e375e2a515c8?source=collection_archive---------43-----------------------

高质量的数据是构建有用的机器学习模型的关键

布拉格图书馆,里面储存了大量的数据——图片来自 Pixabay

机器学习模型从数据中学习它们的行为。因此,找到正确的数据是将机器学习构建到您的产品中的一大部分工作。

你需要多少数据取决于你在做什么和你的起点。有像迁移学习这样的技术可以减少你需要的数据量。或者,对于某些任务,可以使用预先训练好的模型。尽管如此,如果您想要构建一些不仅仅是概念验证的东西,那么您最终将需要自己的数据来完成这些工作。

这些数据必须代表机器学习任务,其收集是偏见在蔓延的地方之一。构建多维平衡的数据集需要细心和关注。用于训练语音识别系统的数据必须表示不同的噪声环境、多个扬声器、口音、麦克风、谈话主题、谈话风格等方面。其中一些方面,如背景噪音,同样影响大多数用户。但是有些方面,比如口音,对特定的用户群体有着巨大的影响。不过,有时候,数据中的偏见比数据集的组成更深。例如,从网上抓取的文本会产生一个嵌入了许多社会刻板印象的数据集,因为这些刻板印象存在于网上的文本中,无法被删除。

为了构建成功的机器学习模型,获取数据是设计和构建整个系统的关键部分。除了寻找对任务有效的数据,您还必须权衡成本、上市时间和必须实施的数据处理流程。每种数据源都有自己的优缺点,最终您可能会使用以下数据源的数据组合。

公共数据集

第一个也是最容易看的地方是公开可用的数据集。有许多不同的数据集,为许多不同的任务创建,在像 KaggleUCI 数据集储存库、&、谷歌数据集搜索这样的地方进行索引和描述。对于语音技术, OpenSLRLDC 有可用数据列表。通常,公开可用的数据集拥有非商业许可,或者您需要购买数据集才能将其用于商业用途。

ImageNet ,是一个著名的计算机视觉数据集(拥有非商业许可)。这是一个由数百万张图片组成的大集合,上面标有图片所描绘的物体。这一组因成为计算机视觉中深度学习的转折点而闻名。在 ImageNet 出现之前,数据集要小得多。跨研究人员使用大型共享数据集意味着深度学习的有效性可以清楚地显示出来。

综合数据

根据您试图解决的任务,有多种方法可以创建合成数据。为了将人们对智能说话者的口头请求分类,我们可以创建一个简短的语法,让我们建议人们可能如何询问天气:

(can you)? (tell|give) me the (weather in|forecast for) CITY (please)?

这里的'表示可选单词, | 表示选择。有了城市列表来填充城市标记,我们就可以快速、轻松地生成用户可能询问天气的许多不同示例,例如:

tell me the weather in London please
can you give me the forecast for Cambridge
give me the weather in Bristol please
can you tell me the weather in Southampton please

另一种生成合成数据的流行方法是使用 GANs 。这些是生成模型,通常用于生成高质量的图像和视频。

一旦你有了一个如何生成合成数据的模型,就可以很便宜&很容易地生成大量你有基本事实的数据。这对需要大量数据的机器学习模型来说是有益的。

合成数据有它的缺点。它通常不像真实世界那样真实,也可能不符合真实用户表现出的行为。使用上面的语法,我们可以将可选的“你能不能添加到我们一半的合成生成的例子中,但是也许在现实生活中,我们的用户中没有人会说“你能不能”。

数据扩充

数据扩充是一种通过以不同方式复制和转换数据来增加数据量的方法。

建立一个对嘈杂环境具有鲁棒性的语音识别系统的一个成功方法是收集一个干净音频的数据集,然后通过添加不同种类的噪声来扩充它,以给出一个嘈杂音频的数据集。没有必要重新转录嘈杂版本的音频,因为我们知道转录是一样的干净的版本。可以添加多种类型的噪声,如多路重合噪声或汽车噪声,以创建多个不同的副本。其他用于音频的数据增强技术包括 VTLP ,它模仿使声道变长变短,在音频中给出更低和更高的频率,以及改变回放速度

数据增强也广泛应用于图像处理。这里,变换的类型是不同的——几何变换、颜色偏移、加性噪声、混合多个图像等。但是效果是一样的——创建不同于原始数据的附加训练数据,但不需要重新标记。

数据收集

另一种选择是开展有针对性的数据收集工作,并雇佣人员来创建您需要的数据。也许你让众包工人与你的对话系统对话,或者你雇佣专业翻译来翻译文本,作为机器学习系统的基础。数据收集工作可能会很昂贵,但是(假设参与者有动力正确参与并且不作弊)可以产生真实的、质量相当好的数据。

在设计您的数据收集工作时必须小心谨慎,以确保您有广泛的参与者,并且您不会通过您给出的指令影响您获得的数据。此外,付费与你的系统互动的人不会像你的最终客户一样行事。一个与你的订票系统对话并获得报酬的众包工作者不一定会像一个真正想订票的顾客那样与系统对话。

您已经拥有的数据

您的组织可能已经拥有合适的数据来用于训练机器学习模型。也许您有大量的内部文本文档可以直接用于语言建模。或者投资一些努力来标记这些文档,这意味着它们可以用作自然语言处理任务的数据集,如命名实体识别(NER),它从文本中提取实体(如名称、位置、地点等)。).你已经拥有的数据的优势在于,标注现有数据可能比收集新数据更便宜。

生产数据

也许与您的 ML 模型最匹配的数据源,一旦它被部署,就是您从与之交互的客户那里获得的数据。这些数据是最真实的,没有来自合成来源的假象。如果你的产品被广泛使用,你可以看到比有针对性的数据收集更广泛的用户范围。

然而,世界变化很快。当您能够使用生产数据时,它可能已经有点过时了。在快速发展的领域尤其如此,比如现场新闻广播的字幕。新的主题和事件来得快去得也快,以至于您无法将关于它们的数据整合到您的模型中。如果你学习了上周新闻的语言,你可能不一定擅长模仿下周的语言。

过度适应过去是过度依赖生产数据的一个风险。另一个风险是过度适应当前的用户和功能。如果你刚刚推出你的产品,而你的用户是早期采用者并且熟悉这项技术,那么他们使用它的方式可能与后来采用者的方式不同。让你的模型过于偏向于理解早期采用者如何交互,实际上可能会降低后期采用者的性能。

生产数据也是更可能来自客户的数据源,因此受数据处理法律的约束,如欧洲的 GDPR。

虽然收集和标记生产数据的成本可能很高,但它通常有助于提高系统性能。由于这个原因,它通常是生产机器学习模型的主要数据源,尽管可能与上述其他一些数据源结合使用,以提供额外的健壮性。

我在语音、语言& AI 技术做顾问,你可以雇佣我!如果你的组织使用语音技术,AI &机器学习,请 取得联系

如何开始学习强化学习(RL)

原文:https://towardsdatascience.com/where-to-start-learning-rl-e294b6879ad1?source=collection_archive---------40-----------------------

在这些工具成为行业标准之前,学会实现它们。

去追它。凯文·Ku 从派克斯拍摄的照片。

建立和反思。有很多强化学习的资源,但是它们并不总是容易融入到你自己的项目中。构建自己的项目。让代码成为你自己的,这就是知道 强化学习的的人和知道如何* 强化学习的人之间的区别。*

这篇文章展示了学习如何在学习中胜任是易处理的,它提供了足够的资源来建立一个完整的知识。

我会说我在机器人学习(机器人+强化学习)方面很有能力。我很荣幸在我的博士学位上被推到这一步,但是你也可以。主题是可重复和有效的。

实践中学习

我们学习计算机科学的新技能来制作东西。将想法编写成代码是创造价值的地方(除了少数理论教授)。这个帖子的关键在于你需要 找到你的问题空间

在本文的最后有一个长长的资源列表,可以学习 RL 理论,但是随着 AI 方法的广泛应用,你必须选择哪里。这归结为三个动机的叠加:

  1. 你喜欢解决的问题。
  2. 具有全球影响的问题。
  3. 能让你获得工作和稳定的问题。

为 RL 决定一个问题空间,在那里你喜欢你正在做的事情,它会做一些事情来帮助这个世界,希望其他人会明白并给你一个更大的平台来做出改变。

一个模拟机器人手臂任务的例子——称为 Reacher3d。使用 Mujoco健身房

我建造了什么?我和机器人一起工作。我希望机器人在任何地方都能做许多简单的工作。他们可以帮我们搬家具、开车、送箱子等等。所有这些都将在 T2 十年内实现。十年后,这看起来像学习低级运动控制器。学习机器人动力学和控制的核心库在这里找到。(大部分的研究在发表之前还在私人进行。)

通过写作或思考建立基础和深度

我已经在 Medium 上写了大约 20 篇帖子,这是对任何教育项目的惊人赞美。是时候反思你构建了什么,以及它如何融入一个更大的画面。这是确保其他人能够理解你的结果的时候。我遇到的最好的研究生都有一个共同的弱点——无法清晰地分解他们的想法。作为一名大四研究生,我专注于让我的工作持续下去,并在我完成学位后得到重用。

[## 内森·兰伯特-中等

阅读媒体上内森·兰伯特的作品。学习者、非职业运动员、瑜伽师和机器人学习研究@加州大学伯克利分校…

medium.com](https://medium.com/@natolambert)

研究论文、博客帖子等都是写作形式,是你头脑和自我的永久娱乐。很少有东西能让个人在职业生涯结束后继续发挥作用,但高质量的写作可能是我们目前最容易获得的工具。

迄今为止我在 RL 上写的帖子。这是一个奇妙的主题,永远有更多的东西需要探索。

  1. 深度 RL 算法要点。
  2. 什么是马尔可夫决策过程?
  3. RL 前要掌握的 3 个技巧
  4. 强化学习的隐藏线性代数。
  5. 强化学习的基本迭代方法。
  6. 强化学习算法的收敛性

学习 PyTorch

PyTorch 正在机器学习研究领域占据主导地位,因为强化学习很年轻,所以它主要是研究。你可以在这里找到统计数据。PyTorch 非常流畅,所以不要担心在学习它的过程中陷入困境,它可能会发生。

概念工具

课程

伯克利深度 RL 课程来自谢尔盖·莱文

  • 优势:由该地区最聪明、最有前途的人教授。非常现代,非常有技术含量,很好的项目。
  • 缺点:对新人来说,这可能是一个挑战。需要很强的 python 技能。
  • 其他点评:我是 2019 年上的这门课。会推荐。

[## CS 285

加州大学伯克利分校的 CS 285 讲座:周一/周三上午 10-11:30,苏打厅,306 室讲座将被流式传输和录制。的…

rail.eecs.berkeley.edu](http://rail.eecs.berkeley.edu/deeprlcourse/)

大卫·西尔弗在 UCL 的讲座:

  • 优势:理论背景牛逼。
  • 缺点:可能开始变得有点过时。自 2015 年以来,RL 发生了很多变化——主要是软演员评论家超级有效,而基于模型的 RL 获得了更多关注。
  • 其他评论:这些是我第一次看的讲座。我会在开始时推荐它们,因为它们非常有理论基础。没有太多的技术细节打断主题。

[## 教学-大卫·西尔弗

编辑描述

www.davidsilver.uk](https://www.davidsilver.uk/teaching/)

萨顿 & 巴尔托:强化学习

  • 优势:教科书有很大的深度,例子,和上下文。这可以补充 RL 中的任何学习路径。
  • 缺点:我不认识只看课本就能掌握一门学科的人。
  • 其他评论:下面有一个很棒的 Python 代码伴侣,我也包括在内。

[## 强化学习:导论

从亚马逊购买勘误表和注释完整的 Pdf 格式,无边距代码解决方案—发送您的解决方案一章,获得…

incompleteideas.net](http://incompleteideas.net/book/the-book-2nd.html) [## 疼痛/强化学习-介绍

如果你对代码有任何困惑或想报告一个错误,请打开一个问题,而不是直接给我发电子邮件…

github.com](https://github.com/ShangtongZhang/reinforcement-learning-an-introduction)

罗素:人工智能——一种现代方法

  • 优点:给出了使 RL 在更多自动化领域有用的背景。
  • 缺点:RL 的尖端细节范围非常有限。
  • 其他评论:它反映了我在加州大学伯克利分校教授的课程,CS 188。

[## 人工智能:现代方法

人工智能领域的顶级教科书。在超过 125 个国家的 1400 多所大学中使用。第 22 名最…

aima.cs.berkeley.edu](http://aima.cs.berkeley.edu/)

代码库

技术公司支持

OpenAI Spinning Up:这是我的最爱之一。它将彻底的理论阐述与编码教程结合在一起。它也是相当新的。这是一个研究新算法以及代码与其前身有何不同的伟大工具。

[## 欢迎来到极速旋转!-编制文件

编辑描述

spinningup.openai.com](https://spinningup.openai.com/en/latest/)

Deepmind 在 Tensorflow 中的 RL 积木:我发现的新工具。这对于构建实用的系统非常有用,因为它抽象出了 RL 代理的各个部分。它为状态空间的 q-learning 提供了可调用的 python 对象。

[## deepmind/trfl

TRFL(发音为“truffle”)是一个构建在 TensorFlow 之上的库,它为……提供了几个有用的构建块

github.com](https://github.com/deepmind/trfl/)

研究报告

有些人正在为业余项目制作惊人的工具。我用过 rlkit ,但是很难区分它们。现在入门的推荐 PyTorch,下面有些用 Tensorflow。这是一个巨大的区别因素,但这取决于你来决定。从部署机器学习系统的其他领域的经验来看,Tensorflow 也可能更适用于你。

[## vitchyr/rlkit

PyTorch 中实现的强化学习框架和算法。实现的算法:斜配合加固…

github.com](https://github.com/vitchyr/rlkit) [## Denny britz/强化学习

这个库为流行的强化学习算法提供代码、练习和解决方案。这些意味着…

github.com](https://github.com/dennybritz/reinforcement-learning) [## MorvanZhou/张量流强化学习

在这些强化学习教程中,它涵盖了从基本的强化学习算法到高级算法开发…

github.com](https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow)

如果你需要官方认证

有两个最大的 MOOCs 教授的课程:Coursera 和 Udacity。这些在申请工作和首轮筛选“相关经验”时会有所帮助不过,我绝对认为来自加州大学伯克利分校的最新材料会给你带来更令人兴奋的教育。

[## 强化学习|课程

掌握强化学习的概念。实施完整的 RL 解决方案,并了解如何将人工智能工具应用于…

www.coursera.org](https://www.coursera.org/specializations/reinforcement-learning) [## 强化学习

免费课程由佐治亚理工学院提供,编号为 CS 8803。关于本课程的免费课程,如果你需要,你应该选修本课程

www.udacity.com](https://www.udacity.com/course/reinforcement-learning--ud600) [## 自动化大众化

一个关于机器人和人工智能的博客,让它们对每个人都有益,以及即将到来的自动化浪潮…

robotic.substack.com](https://robotic.substack.com/)

像这样?请在https://robotic.substack.com/订阅我关于机器人、自动化和人工智能的直接通讯。

快去追!

柏林去哪里游泳!

原文:https://towardsdatascience.com/where-to-swim-in-berlin-4ed862633cd3?source=collection_archive---------53-----------------------

使用熊猫和 Matplotlib 探索柏林哪个区最适合户外游泳者。

照片由 亚历山大·涅普洛夫 发自 佩克斯

我喜欢游泳!尤其是户外。在柏林的夏天,没有什么比去美丽的湖泊或河流中凉快一下更让我喜欢的了。这是我特别欣赏的一件事,因为在我的家乡苏格兰,这种情况很少发生。尽管那里有许多美丽的湖泊和河流,但在一年中的大部分时间里,只有最勇敢的人才会不穿潜水服跳入水中!

考虑到这一点,我决定看看柏林的哪个地区最适合人们居住,如果户外游泳是他们的首要任务的话。由于我是一个非常酷的人,我选择在 Python 中使用流行且强大的数据分析包来研究这个问题。

我在这里的目的是提供一个初学者友好的指南,使用 pandas 和 Matplotlib 中一些基本但强大的功能——创建数据框架。groupby(),。merge()加上其他几个——帮助人们开始数据分析。希望我可以用我的代码示例来说明我是如何操作我的示例数据的,读者可以根据他们自己的需要和项目来使用它。反正就是这么计划的!感谢所有的反馈。

对于任何数据分析项目,第一步都是找到一些数据。谢天谢地,柏林政府有一个开放数据网站,在那里你可以找到各种有趣的(老实说,不太有趣的)数据集进行研究。其中,我们找到了这个的浴场列表,正是我们要找的。谢谢,柏林开放数据!

让我们开始数据分析吧!你可以在 Github 这里跟随笔记本,或者你可以在 Binder 这里运行它,不需要安装任何东西。

首先,让我们导入将要使用的库,并导入数据本身。

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltbad = pd.read_csv('badestellen.csv', sep=';')display(bad)

请注意,我使用的是 Jupyter 笔记本,所以我在这里使用的是display而不是print,这提供了一个更有吸引力、更易于导航的输出。这是给你的小费!

这给了我们这样的输出:

那是一些好看的数据!

数据框bad有 39 行(每一行代表一个不同的浴场)和 23 列(每一列都有与该浴场相关的不同属性)。这应该能给我们一些线索。

现在将是一个很好的时机来提及一些限制我们一般分析的东西。该数据集仅包括城市中的“官方”浴场。按照德国的标准,柏林人相当不守规矩,一般来说,他们也很可能找到并利用“非官方”的浴场——事实上,如果你在夏天四处看看,你会发现人们基本上在任何看起来不错的地方游泳(也有一些看起来不好的地方)。

然而,我将假设任何特定地区的官方和非官方浴场的数量将高度相关,因为它们都是由一个潜在变量驱动的。你能猜到我在想哪个变量吗?

如果你猜中了“该地区的水体数量”,那么你就中奖了(没有奖金)!我认为这是一个相当安全的假设,至少对我们的目的来说是这样,但是在进行任何数据分析时,检查您的假设是否合理,或者是否有一些隐藏的偏见或系统错误潜入您的数据,这总是至关重要的。没有一个数据集是完美的,无论如何,我们经常不得不使用它,但是如果我们能够尽可能意识到我们的数据在哪些方面是不完美的,我们的工作总是会得到改进。好了,哲学结束——回到洗澡的地方!

现在使用 Matplotlib,我们可以很容易地查看城市周围的浴场分布。

plt.hist(bad['bezirk'], rwidth=0.8, bins=np.arange(9)-0.5)plt.xticks(rotation=90)
plt.style.use('seaborn')plt.show()

这给了我们这样的输出:

每个地区浴场的绝对分布

我用了几个小技巧让它比默认的输出更加漂亮。rwidth=0.8术语将条形的宽度减少到 80%,而不是默认的 100%,这为条形之间提供了一些空间。这使得图表(至少在我看来)更具可读性。bins=np.arange(number of columns + 1) — 0.5将条形置于 x 轴刻度的中心,这也让输出看起来更好一些。请注意,您需要将(9)更改为您拥有的列数+ 1,以使其适用于您的图表。

plt.xticks(rotation=90)将标签旋转 90 度,这样它们就不只是一大堆重叠的文本了。如果你喜欢更活泼的角度,你可以尝试 45 度。最后,plt.style.use('seaborn')利用了 Matplotlib 已有的样式表(示例此处为),它允许您使用一行代码来更改绘图上的多个表示功能,并且不费吹灰之力就能获得更加个性化的外观!

Matplotlib 非常灵活,但这种灵活性意味着另一方面,如果您希望它做某件特定的事情,您通常需要明确地告诉它该做什么。它受欢迎的一个好处是,你的问题的答案通常只需要一次谷歌搜索。文档总体上是广泛而清晰的,提供了示例,堆栈溢出咳咳 溢出,有问有答。总的来说,我发现 Python 社区非常受欢迎,如果你有问题或者想做什么,很有可能其他人也想做同样的事情,并在网上的某个地方询问过。在任何级别的编程或一般的数据分析中,谷歌都是你的朋友

让我们来看看我们美丽的直方图,在我们费尽周折创建它之后。我们可以看到,柏林的 12 个区中,有 8 个区有官方的浴场。Lichtenberg,Mitte 和 Pankow 各有一个,Treptow-kpe nick 以 11 个遥遥领先。从地图上看,这是有道理的——特雷普托-科佩尼克是最大的地区,一眼望去,似乎是最蓝的。

来源:浴盆,via 维基百科 / CC BY-SA

这是我们最基本的分析。只需几个步骤,我们就从 CSV 文件中的原始数据创建了一个熊猫数据框架,并创建了一个可视化,清晰地显示了该数据中的一些有意义的信息。但是我们可以更进一步!

也许知道有多少人住在不同的地区会很有趣,这样我们就可以控制这些地区的人口。也许特雷普托-科佩尼克是人口最稠密的地区,这就是为什么它有最多的海水浴场?或者也许这就是最大的原因?在控制其他变量(如人口和面积)的情况下,对数据进行更多的处理和分析可以让我们回答这些问题。

令人高兴的是,pandas 通过其强大的数据分析功能和核心功能数据框架让这一切变得简单。

为此,我们需要创建一个数据帧,其中包含我们在直方图中显示的信息。我们可以使用来做到这一点。groupby() 还有一点想象力!

stellen_pro_bezirk = pd.DataFrame({'Number_of_Badestellen': bad['bezirk'].groupby(bad['bezirk']).count()}, columns=['Number_of_Badestellen'])display(stellen_pro_bezirk)

这给了我们:

当我们把它绘制成柱状图时,我们会得到:

与之前的图完全相同,除了格式上的变化,因为第一个是直方图,第二个是条形图。我们可能会在处理 Matplotlib 格式时分心,但是我们想要做的只是确认这个数据帧包含了它应该包含的信息。

回到创建这个数据帧的代码行。这太激烈了!事实上,这可能是我们将在这个分析中看到的最复杂的一行代码,所以让我们来分解它。

我们用的是 pd。DataFrame() 创建一个数据帧。该函数可以将 Python 字典作为输入,其中使用键作为列名,使用值作为列数据。我鼓励你通读文档,以便对此有一个坚实的理解。在我们的例子中,我们使用字典

{'Number_of_Badestellen': bad['bezirk'].groupby(bad['bezirk']).count()}

作为我们数据框架的来源。键'Number_of_Badestellen'只是列标题,这里的主要动作是字典中值端的术语:bad['bezirk'].groupby(bad['bezirk']).count()

这里,我们简单地取原始数据帧的“bezirk”列,按同一列的值分组,并应用。count() 聚合器告诉我们每个值在该列中出现了多少次。例如,“夏洛滕堡-威尔默斯多夫”在数据帧bad的列bezirk中出现了 4 次。这将为值“Charlottenburg-Wilmersdorf”创建一个具有相应值“4”的行。不错!

现在,这些数据被表示为一个数据框架,我们准备好获取并整合一些进一步的数据来回答我们的问题。这是事情真正开始的地方!

人口控制

柏林是一个不断增长的大城市,截至 2018 年 12 月,总人口为 3748148 人(我从哪里得到这个数字的?别走开——一切很快就会揭晓!).就我们的目的而言,最好能找到地区一级的人口。这些信息可以从维基百科、获得,但是我们能相信吗?虽然维基百科总的来说比它的名声让你相信的要更准确,但尽可能从原始来源获取信息总是一个好习惯。我们的数据分析技能自己动手也是很好的练习。

我们再次求助于 daten.berlin.de 获取一些数据。快速搜索发现可用的最新数据来自 2018 年 12 月——让我们看看它是否能给我们提供我们正在寻找的信息。

einwohner = pd.read_csv('EWR201812E_Matrix.csv', sep=';')
display(einwohner.head(10))

这给了我们:

这个数据帧有 447 行和 51 列,因此值得花点时间来理解这里的数据是什么,以及它与我们想要做的事情有什么关系。令人欣慰的是,柏林-勃兰登堡统计局(该数据集的创建者,柏林-勃兰登堡统计局)提供了一份补充指南来澄清问题。

我们只是想找出柏林每个区的居民总数。查阅我们的指南,我们可以确定我们主要感兴趣的列是‘BEZ’(代表 Bezirk —区,这里以数字给出)和‘E _ E’(代表 Einwohner insgesamt —总居民)。我们这里有 447 个数据点,比我们的 12 个区还多,但这是可以理解的,因为柏林-勃兰登堡统计局收集和提供的数据比这更精细。通过几行代码,我们可以从这些数据中提取我们想要的信息。

首先,我们创建一个新的 DataFrame,只包含我们感兴趣的列。我们可以在熊猫身上使用很容易地做到这一点。iloc[] :

# Let's slice our dataframe using .iloc[]
einwohner_edited = einwohner.iloc[:,[2,7]]

这给了我们一个 447 行 2 列的数据帧。我们可以使用很容易地按地区汇总数字。groupby()链接。sum() 。这将把每一行的“总居民”列E_E中的值加在一起,并且在BEZ列中具有唯一值。这将为我们提供每个地区的居民总数,这正是我们要寻找的。

einwohner_sum = einwohner_edited.groupby('BEZ').sum()
display(einwohner_sum)

可以更漂亮,但是数据摆在那里!

不错!现在我们有了各区的总人口。然而,地区只是作为数字给出的。我们怎么知道哪个区是哪个区?嗯,经过一些研究,原来柏林的每个行政区都被分配了一个号码,我们在柏林-勃兰登堡统计局的朋友们总是用这个号码,在其他官方场合也是如此。很高兴知道!

我们可以创建一个包含地区名称的 Python 列表,并将它作为一列添加到我们的新数据帧中,同时给它一些更有意义的列名,如下所示:

bezirke = ['Mitte', 'Friedrichshain-Kreuzberg', 'Pankow', 'Charlottenburg-Wilmersdorf', 'Spandau', 'Steglitz-Zehlendorf', 'Tempelhof-Schöneberg', 'Neukölln', 'Treptow-Köpenick', 'Marzahn-Hellersdorf', 'Lichtenberg', 'Reinickendorf'] einwohner_sum['Bezirk'] = bezirke
einwohner_sum.columns = ['Population', 'Bezirk']
display(einwohner_sum)

😘👌

至此,我们已经将柏林-勃兰登堡统计局的官方统计数据简化为一个简单的数据框架,其中包含了我们感兴趣的数据。现在是时候将我们的数据框架连接在一起了,这样我们就可以继续回答我们的问题了——柏林哪个区的人均洗浴场所最多?

熊猫又来了。我们可以使用 pd,只用一行代码非常简单地做到这一点。 merge(),像这样:

pop_and_badestellen = pd.merge(stellen_pro_bezirk, einwohner_sum, left_on='bezirk', right_on='Bezirk')display(pop_and_badestellen)

这产生了:

太美了

刚刚到底发生了什么?我们使用非常强大的 pd.merge() 函数将两个数据帧stellen_pro_bezirkeinwohner_sum合并成一个闪亮的新数据帧。要做到这一点,我们需要告诉熊猫合并哪些列(即在哪些列中寻找匹配),这就是这里的参数left_on='bezirk', right_on='Bezirk'所做的。如果我们的专栏有相同的名字(当我们命名它们为 tbh 时,这是一个非常聪明的做法),那么我们可以只使用on='Bezirk',但是 pandas 足够灵活,可以给我们提供选择。

pd.merge() 的默认合并被称为‘内部连接’——这意味着只有匹配的行才会被返回。这就是为什么尽管einwohner_sum有 12 行,我们最终在新的数据帧pop_and_badestellen中有 8 行。当我们使用内部连接时,“bezirk”和“Bezirk”不匹配的行将被删除。在我们的例子中,这正是我们想要的行为,但是如果我们想要一个外部连接(其中所有的行都被保留,缺失的值用空值填充(pandas 中的 NaN)),我们可以通过使用参数how='outer'很容易地实现。

好了,现在我们已经合并了我们的数据框架,让我们继续前进,并开始控制人口!我们可以用一些非常简单的数学来做这个:

pop_and_badestellen['badestellen_pro_einwohner'] = pop_and_badestellen['Number_of_Badestellen'] / pop_and_badestellen['Population']

这里,我们在 DataFrame ( badestellen_pro_einwohner)中创建了一个新列,这是将每个地区的浴场数量除以那里的人口数的简单结果。我告诉过你数学很简单!现在我们可以绘制这个新列,看看我们能学到什么。

plt.bar(data=pop_and_badestellen, x='Bezirk', height='badestellen_pro_einwohner')
plt.xticks(rotation=90)plt.show()

这给了我们:

漂亮!所以我们可以看到,当我们控制人口时,结果大致相同。trep tow-KP enick 仍然处于领先地位,人均浴场数量最多,Reinickendorf 仍然位居第二,其他排名基本符合我们之前绘制的绝对数字。

这也许不像控制人口完全颠覆了早期的结果那样令人兴奋,但是这对于我们的分析是非常有用的信息。我们可以看到,如果我们从绝对数量的角度来考虑沐浴点的数量,或者如果我们从人均沐浴点的数量来看,我们的数据显示了类似的情况。如果我们要根据我们的分析提出建议(相信我,我们会的!)那么这个加强了那些。

按区域控制

我们的下一步是考虑每个地区的面积。特雷普托-科佩尼克是该市最大的区,所以也许这就是那里有这么多海水浴场的原因。让我们做一些进一步的分析,看看我们能发现什么。

我们的第一步是获取每个地区的数据。我再次从我们在柏林-勃兰登堡的统计局的老朋友那里得到了这个消息。我们可以做一些奇特的事情,如保存为 CSV 或 Excel 文件,并使用熊猫()导入它。read_csv()。read_excel() 将是这种情况下的首选武器),如果我们的数据集更大,那么这肯定是明智的选择。然而,我们只有 12 个条目,所以我们可以简单地编写一个 Python 列表(与我们的数据帧中的数据顺序相同),并将其作为新列添加到我们的einwohner_sum数据帧的副本中,如下所示:

area = [3947, 2041, 10306, 6472, 9187, 10256, 5303, 4493, 16842, 6178, 5212, 8931][einwohner_area = einwohner_sum](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.copy.html).copy() 
einwohner_area['Fläche'] = areadisplay(einwohner_area)

有必要使用。copy() 方法,如果我们想创建一个新的 DataFrame 对象(所谓的“深度复制”)。如果我们只使用einwohner_area = einwohner_sum,任何后续的更改都会影响两个数据帧,因为它们都是对 Python 中一个对象的引用。这相当复杂,但是你可以阅读更多关于它的内容来更好地理解这在 Python 中是如何工作的。

然后,我们只需添加一个新列“flche”(在德语中是“area”的意思),这就是我们的新列表。嘣!

然后,如果您阅读了本文的前一部分,我们将遵循一个非常熟悉的过程(如果您没有,您在这里做什么?回去读吧!太棒了!).

# merge the DataFrames
area_and_badestellen = pd.merge(stellen_pro_bezirk, einwohner_area, left_on='bezirk', right_on='Bezirk')# create a new column
area_and_badestellen['badestellen_pro_km'] = area_and_badestellen['Number_of_Badestellen'] / area_and_badestellen['Fläche']display(area_and_badestellen)

是不是很可爱?

现在我们有了看到结果所需的所有信息,但是我们只需要再做一步就可以像以前一样把它变成一个漂亮的图表。

area_and_badestellen.sort_values(by='badestellen_pro_km', inplace=True) # sorting for purely aesthetic reasonsplt.bar(data=area_and_badestellen, x='Bezirk', height='badestellen_pro_km')
plt.xticks(rotation=90)plt.show()

这给了我们:

有意思!

在这里查看我们的结果,我们可以看到,如果您只是对该地区浴场的纯粹集中感兴趣,那么 Reinickendorf 就是您应该去的地方。根据这一指标,上届冠军特雷普托-科佩尼克(Treptow-kpenick)已经退居第三位——仍然表现强劲,但不再是第一名。

将它整合在一起

那么我们学到了什么?嗯,主要是说,如果你想在附近拥有最多的游泳场所,以及最少的人使用它们,那么特雷普托-科佩尼克就是你要去的地方!然而,柏林有一个非常好的公共交通系统,所以仅仅因为这个地区拥有最高的人均浴场率,并不意味着你将拥有整个地方。

如果你对纯粹的集中浴场更感兴趣(也许你想在一天内参观几个?),那么 Reinickendorf 就是适合你的地方。然而,总的来说,从这一分析中,我们可以有把握地向一个正在寻找新住处的假想的人提出建议,他最关心的是附近有许多洗澡的地方。他们应该搬到特雷普托-科普尼克。那里真好!

这说明了任何数据分析项目的关键点。你可以做出最漂亮的可视化效果,或者以最奇特、最复杂的方式操纵数据,但最终要让你的分析有意义、有用,你需要拥有你正在分析的领域的领域知识,或者与拥有这种知识的人合作。这有助于你避免尴尬的误解,也有助于你获得有益的见解,实际上为你的听众带来好处,不管他们是谁。

我希望这篇文章能帮助您了解我们如何通过 pandas 和 Matplotlib 库使用 Python 轻松而强大地操作数据。我们在这里使用的技术都是您可以在未来的数据分析项目中反复使用的。

非常感谢您抽出时间和我一起探讨这个话题。和往常一样,我非常欢迎你的反馈——你可以在 Twitter 上联系我,地址是@craigdoedata,让我知道我该如何更有效地完成这项分析。我仍然在学习,我也想知道你的秘密,所以请与我分享。

再说一遍,整个 Jupyter 笔记本和相关文件都可以在我的 Github 页面活页夹上找到,我鼓励你使用它们。

下次见!

更像这样?访问craigdoedata . de

何时应该使用约束求解器而不是机器学习

原文:https://towardsdatascience.com/where-you-should-drop-deep-learning-in-favor-of-constraint-solvers-eaab9f11ef45?source=collection_archive---------16-----------------------

约束求解器的实际应用。学习其他技术可以为您节省几天的数据清理和模型训练时间。

魔方可以被建模为约束满足问题【1】,图片由 NeONBRANDUnsplash 上发布

Machine Learning 和 Deep Learning 是业界正在流行的词汇。品牌领先于功能导致深度学习在许多人工智能应用中被过度使用。

这篇文章将提供对约束满足的快速理解,这是一种强大但未被充分利用的方法,可以解决人工智能和计算机科学其他领域的大量问题,从物流和调度到时间推理和图形问题。

解决现实世界的问题

让我们考虑一个事实性和高度话题性的问题。

一个疫情正在崛起。医院必须迅速组织起来治疗病人。

这个世界需要一种算法,在给定多种标准的情况下,如疾病的严重程度、患者年龄和位置、医院容量和设备等,该算法将感染者和医院匹配在一起。

图 1:疫情地图,简化为 3 个参数:患者和医院的位置,患者的严重程度

许多人会说,神经网络将是最适合它的:不同的配置,从广泛的参数范围,需要减少到一个独特的解决方案。

然而,有一些不利因素会破坏这种方法:

  • 模型需要训练,因此需要以前案例的历史数据,
  • 清理和整合数据集会浪费大量时间,
  • 各种各样的架构都需要通过长时间的培训来测试。

另一方面,如果用布尔可满足性问题来表述,这种情况不会有任何上述缺点,同时仍然在不确定的多项式时间内给出次优解(NP-完全问题),并且不需要任何历史数据。

免责声明:这篇文章的目的是快速浏览 CSP。理论和问题公式将被忽视。对于更严格的方法,请参考[2][3][4]。

抽象问题

这篇文章将为约束编程提供一个温和的介绍,旨在解决这个案例研究。这张疫情地图(1)展示了我们算法的输出结果,它将感染者与医院进行匹配。约束求解有几种框架。谷歌优化工具(又名,或-Tools) 是一个解决组合优化问题的开源软件套件。我们的问题将使用 Python 中的这个框架来建模。

from ortools.sat.python import cp_model

[## 查看这篇文章的互动笔记本

在一片混乱中把病人和医院联系起来

colab.research.google.com](https://colab.research.google.com/drive/1vFkt5yIQtyelqvCh2TsJ9UDeM5miXqui)

因素

现在,让我们将问题简化为 4 个参数(1):

  • 受感染者的位置
  • 感染者的严重程度
  • 医院的位置
  • 每所医院的床位数

让我们用 python 来定义这些参数:

# Number of hospitals
n_hospitals = 3
# Number of infected people
n_patients = 200
# Number of beds in every hospital
n_beds_in_hospitals = [30,50,20]
# Location of infected people -- random integer tuple (x,y)
patients_loc = [(randint(0, 100), randint(0, 100)) **for** _ **in** range(n_patients)]
# Location of hospitals -- random integer tuple (x,y)
hospitals_loc = [(randint(0, 100), randint(0, 100)) **for** _ **in** range(n_hospitals)]  
# Illness severity -- 1 = mild -> 5 = severe
patients_severity = [randint(1, 5) **for** _ **in** range(n_patients)]

变量

约束满足问题由一组变量组成,这些变量必须以满足一组约束的方式赋值。

  • I 为医院集合
  • Jᵢ 成为医院 i 的床位集合
  • K 为患者集合。

让我们将变量的索引族定义为:

如果在医院里,床 j 被人 k 那么 xᵢⱼₖ = 1 。为了将医院的每张病床与一个病人相关联,目标是找到一组满足所有约束的变量。

我们可以将这些变量添加到我们的模型中:

model = cp_model.CpModel()
x = {}
**for** i **in** range(n_hospitals):
  **for** j **in** range(n_beds_in_hospitals[i]):
    **for** k **in** range(n_patients):
      x[(i,j,k)] = model.NewBoolVar("x(%d,%d,%d)" % (i,j,k))

硬约束

硬约束定义了我们模型的目标。这些问题至关重要,如果不解决,问题就无法解决:

  • 每张床上最多只能有一个人,
  • 每个人最多只能有一张单人床。

让我们关注第一个硬约束。每个医院的每个床位jI:

  • 要么有一个独特的病人,
  • 要么床是空的。

因此,它可以用以下方式表示:

我们的求解器是一个组合优化求解器,它只能处理整数约束。因此,必须变成一个整数方程:

这个不等式可以添加到我们的模型中。

# Each bed must host at most one person
**for** i **in** range(n_hospitals):
  **for** j **in** range(n_beds_in_hospitals[i]):
    model.Add(sum(x[(i,j,k)] **for** k **in** range(n_patients)) <= 1)

接下来,第二个硬约束:对于每个患者 k :

  • 要么他在一个独特的医院的独特的病床上,
  • 要么他在家。

同样,可以转化为一个整数不等式:

最后,这个约束可以添加到模型中。

# Each person must be placed in at most one bed
**for** k **in** range(n_patients):
  inner_sum = []
  **for** i **in** range(n_hospitals):
    inner_sum.append(sum(x[(i,j,k)] **for** j **in** range(n_beds_in_hospitals[i]))) 
  model.Add(sum(inner_sum) <= 1)

软约束

接下来,还有软约束。这些都是非常需要的:我们的解决方案必须尽可能地满足它们,但是它们对于找到解决方案并不是必不可少的:

  • 每个病人都应该被放在床上,
  • 每个人都应该由最近的医院处理,
  • 在没有足够床位的情况下,病情严重的病人应优先处理。

当硬约束被建模为等式或不等式时,软约束是最小化或最大化的表达式。

ω为满足硬约束的所有解的集合。

每个病人都应该被安排到一张病床上的意思是最大限度地增加被占用的病床数量。

每个人都应由最近的医院处理是指尽量缩短每个病人与其指定医院之间的距离。

当没有足够的床位时,应首先处理病情严重的病人是指最大化所有处理病人的总严重程度。通过表示 sev(k) 患者的严重程度 k :

然后,我们可以将所有软约束简化为一个目标:

人们需要小心:这些软约束没有相同的域。

  • 患者最大化约束范围从 0n ,其中 n 为患者人数,
  • 严重性约束范围从 05n
  • 距离约束范围从 0 到所有 ik 的最大欧几里德距离。

假设所有这些约束共享相同的优先级,我们必须定义惩罚因子来平衡不同的约束。

下面是相应的代码:

# Integer distance function
idist = **lambda** xy1, xy2: **int**(((xy1[0]-xy2[0])**2 + (xy1[1]-xy2[1])**2)**0.5)# Gain factors (1/penalty factors)
gain_max_patients = 140
gain_severity = **int**(140/5)
gain_distance = -1# Maximization objective
soft_csts = []
**for** i **in** range(n_hospitals):
  **for** j **in** range(n_beds_in_hospitals[i]):
    **for** k **in** range(n_patients):
      factor = \
        gain_max_patients \
        + gain_distance * idist(hospitals_loc[i], patients_loc[k]) \
        + gain_severity * patients_severity[k]
      soft_csts.append(factor * x[(i,j,k)])model.Maximize(sum(soft_csts))

解决者

现在我们可以启动求解器了。它会尝试在指定的时间限制内找到最优解。如果它无法找到最优解,它将返回最接近的次优解。

solver = cp_model.CpSolver()
solver.parameters.max_time_in_seconds = 60.0
status = solver.Solve(model)

在我们的例子中,求解器在 2.5 秒内返回一个最优解** (2)。**

图 2:求解器返回的解

结论

要创建这个解决方案,只需要 1 小时的研究和 30 分钟的编程

对于深度学习的对手,人们可以预测几天的数据清洗,至少一天的时间来测试不同的架构,另一天用于训练。

此外,如果模型化良好,CP-SAT 模型是非常稳健的。以下是不同模拟参数的结果(3)。在许多不同的情况下,结果仍然是一致的,随着模拟参数的增加(3000 名患者,1000 张病床),解决方案推断只需不到 3 分钟。

图 3:不同的模拟参数

当然,CSP 几乎不适用于计算机视觉和 NLP 等主题,在这些主题中,深度学习有时是最好的方法。然而,在物流,调度和计划,它往往是要走的路。

深度学习炒作激发了一些人尝试一些疯狂的举动来获得认可。有时,最好是通过阅读几篇关于你正在研究的问题的调查论文来回归基础。

安托万冠军 2020 年 4 月 1 日

参考

[1]陈景超,利用 SAT 求解器求解魔方,arXiv:1105.1436,2011 .

[2] Biere,a .,Heule,m .,和 van Maaren,H. 可满足性手册,第 185 卷。IOS 出版社,2009 年 a

[3] Knuth,D. E .,计算机编程的艺术,第 4 卷,分册 6:可满足性。艾迪森-韦斯利专业公司,2015 年

[4] Vipin Kumar,约束满足问题的算法:一项调查,AI 杂志第 13 卷,第 1 期,1992 年。

我需要放在哪个垃圾桶里?用 Python 和 Selenium 抓取网站

原文:https://towardsdatascience.com/which-bin-do-i-need-to-put-out-scraping-websites-with-python-and-selenium-c59738cdb88?source=collection_archive---------39-----------------------

我如何使用 Selenium 来自动化 web 页面交互并从这些页面中抓取信息

在之前的一篇文章中,我展示了一个在英国议会议事录网站上搜集信息的例子。这是一个相对简单的例子,因为一旦网页被加载,议会议事录就提供网页提供的所有数据。所有可以出现在页面上的文本,无论是立即出现在段落中,还是隐藏起来只在按下按钮时才显示出来——所有这些都已经存在于页面源代码中,随时可以被像 BeautifulSoup 这样的包获取。

在我将要向您展示的示例中,我们需要的数据在页面的源代码中并不容易获得。一旦我在表单中输入了一些信息,它就会在服务器端动态加载。在这种情况下,我们不能只使用 BeautifulSoup (BS4 ),因为那里没有可供 BS4 抓取的内容。在信息出现供我们抓取之前,我们首先需要以某种方式与页面进行交互

这就是硒元素发挥作用的地方。Selenium 是一个 Python 包,可以在浏览器中自动执行操作。Selenium 将打开一个浏览器窗口,可以导航到一个网站,点击页面上的元素,并在输入元素中输入文本。它甚至可以与 iframes 中页面上的元素进行交互,这也是 BeautifulSoup 一直在努力解决的问题。我们可以使用 Selenium 在网页上执行操作,让新信息出现在页面上,然后抓取新信息。

对于这个例子,我将找到所有信息中最重要的信息——在给定的一周内哪个垃圾箱需要被放出来。在我的镇上,我们在一般废物和回收之间交替,我忘记了每周我需要把哪一个放出去。当银行放假时,我也完全失去了记忆。

需要的包

这些是我用过的包

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

我还必须下载一个网络驱动程序。这是一个适用于 Firefox 或 Google Chrome 的可执行文件,Selenium 可以访问并打开它。Selenium 使用 webdriver 作为浏览器来控制。我下载了谷歌 Chrome 的 webdriver,可以在这里找到

driver = webdriver.Chrome('C:\\Users\\gormanp\\chromedriver.exe')
driver.get('[https://my.gravesham.gov.uk/en/AchieveForms/?form_uri=sandbox-publish://AF-Process-22218d5c-c6d6-492f-b627-c713771126be/AF-Stage-905e87c1-144b-4a72-8932-5518ddd3e618/definition.json&redirectlink=%2Fen&cancelRedirectLink=%2Fen&consentMessage=yes#_ga=2.209993814.256753923.1580820371-471535357.1579531399'](https://my.gravesham.gov.uk/en/AchieveForms/?form_uri=sandbox-publish://AF-Process-22218d5c-c6d6-492f-b627-c713771126be/AF-Stage-905e87c1-144b-4a72-8932-5518ddd3e618/definition.json&redirectlink=%2Fen&cancelRedirectLink=%2Fen&consentMessage=yes#_ga=2.209993814.256753923.1580820371-471535357.1579531399')) 

在上面的代码中,我将 webdriver 的文件位置传递给 Selenium,这样它就可以打开一个浏览器窗口。然后,我将我想访问的网站的 URL 传递给它——在本例中,这是我的理事会的 bin 收藏网页的一个可怕的 URL。

格雷夫舍姆委员会的网页,找出斌天。

正如你从上面的图片中看到的,我们有一个带有表单字段的页面,要求输入我的地址或邮政编码。Selenium 能够点击页面上的元素,并在输入字段中输入文本。

我在使用 Selenium 抓取这个页面时遇到了一个障碍,它让我困惑了一段时间——我正在选择我想要与之交互的元素的 id,但是我得到一个错误,说找不到它。这是因为页面上的表单不是页面本身的一部分,它是作为 iframe 嵌入的。幸运的是,Selenium 可以使用“switch_to.frame()”函数与嵌入式 iframes 进行交互。

#this tripped me up a lot - the form is loaded in an iframe, so we need to tell selenium to switch to looking
#at the iframe rather than the elements that make up the main page. driver.switch_to.frame("fillform-frame-1")

现在我已经选择了页面的右框架,我需要单击文本框并键入我的地址。

#create a variable for the address I want to searchaddress = "22 Burch Road"#find the postcode search input box, using the id of that box, then wait to ensure the focus is on the boxdriver.find_element_by_id("postcode_search").click()#type the address into the box, then wait, as the form has to load its resultsdriver.find_element_by_id("postcode_search").send_keys(address)time.sleep(5)

我首先创建一个变量来保存我的地址,因为我以后还需要用到它。然后我用 Selenium 函数“find_element_by_id”找到页面上的文本输入框,点击它将光标放入框中。之后,我再次使用“find_element_by_id ”,但是我没有使用 click,而是使用“send_keys”在框中键入地址。

我已经事先手动查看了我的 bin day,我知道一旦框中有了有效的地址,地址选择器下拉框就会自动出现,所以此时我不需要再单击或与页面交互。然而,我确实需要告诉脚本在下拉框加载时等待几秒钟。

在选择下拉框中加载地址的页面

下拉框加载后,我需要从列表中选择地址。这个下拉列表中只有两个项目—我要选择的地址和默认的“选择…”值。对网页抓取没有帮助,但是很容易解决。

addresslist = driver.find_element_by_id('YourAddress')#look through the options and find the one that starts with the right address. There will be at least two options
#as there is a default "select" option, followed by actual addressesfor option in addresslist.find_elements_by_tag_name('option'):
    x = option.text
    if x.startswith(address):
        option.click() # select() in earlier versions of webdriver
        break#long wait here, because it takes a while for the form to load the bin day information 

time.sleep(10)

首先,我给下拉框列表分配一个变量名 addresslist。然后,我使用 for 循环来查看列表中每个选项的文本,并确定它是否以我在上面的框中键入的地址文本(“Burch Road 22”)开头。我使用 startswith,因为下拉列表中的地址在道路名称后面还有城镇和县。如果找到了地址,Selenium 使用“click()”命令选择地址。

然后,我使用另一个等待周期,这个时间甚至更长,因为 bin 收集表需要很长时间来加载。

慢慢来…

终于!

我们终于加载了我们的结果,所以现在我们可以用这个表来找出一周中的每一天,以及在这些天哪些箱子会被放出来。

timings = driver.find_element_by_id("table2")#we need to say .text to output the table as text, otherwise we just get an element id number and session. print(timings.text)

我找到表的元素 id,然后将该元素的文本打印到终端。

在以后的文章中,我将展示如何将从网站上收集的这类信息输出到电子邮件或电报消息中,但现在,我将把它留在这里。

这是如何使用 Selenium 的一个非常简单的例子,但是它可以很容易地扩展到抓取多个页面,抓取需要多次点击才能找到所需信息的页面,或者从由多个 iframes 组成的页面中获取信息。

一如既往,如果你认为有一种方法可以更好地执行,请在评论中告诉我。我还在学习,所以欢迎任何反馈。

你是哪位名人?使用深度学习的人脸识别

原文:https://towardsdatascience.com/which-celebrity-are-you-d8c6507f21c9?source=collection_archive---------18-----------------------

使用 ResNet-50 卷积神经网络架构在 Python 中构建影像分类模型的简单指南

图像分类器以 95.9 %的概率检测到该图像中的查宁·塔图姆( img 源

简介

T4:你有没有想过哪个名人和你长得很像?如果你在想“是的,我愿意”,那么这篇文章就是给你的。

由于机器学习,你可以扫描你的面部特征,并将其与超过 3000 名名人的 260 万张面孔的数据库进行比较。

阅读本指南后,您将了解以下内容:

  • 深度学习卷积神经网络过程背后的直觉是什么
  • 如何安装 keras_vggface 库并在实际项目中使用这些模型
  • 你如何让模型预测哪个名人与你最相似

概观

要知道哪个名人和自己最像,我们得执行以下步骤。这些步骤将在整篇文章中详细解释:

  1. 载入图像(你自己的图像或随机图像)
  2. 从图像中提取人脸
  3. 进行预处理,使人脸图像能够被识别。
  4. 将图像加载到深度神经网络“ResNet-50”中。
  5. 提取结果

人脸识别

在我们进入编码之前,我们需要对一些概念有一个高层次的介绍。
人脸识别是从图像中识别人的过程。由于机器学习领域的最新发展,我们现在能够让模型本身学习应该从图像中提取哪些特征。

卷积神经网络

深度卷积神经网络目前主导着图像分类领域。近年来的趋势是建立更深层次的神经网络来解决越来越复杂的图像分类任务。由于本文的范围相当有限,我们将只解释其背后的直觉。

过程如下,我们给网络输入一张人脸图像。这张人脸图像将被传送到多层(卷积基底)。在第一层中,检测基本特征:边缘、角、…中间层检测物体的一部分。在我们的例子中,他们可能会学会察觉:眼睛、鼻子、耳朵……在最后一层,他们学习识别不同形状和位置的完整物体。然后,基于所有这些检测到的特征,分类器进行预测。

卷积神经网络的过程

Resnet50

Resnet50 是一个深度学习卷积神经网络,在标准人脸识别数据集上取得了最先进的结果。它使用了 VGGFace2 数据集,这是一个大规模的人脸数据集,包含 9.9131 名受试者的超过 331 万张图像。与标准卷积神经网络的主要区别在于它使用残差学习。这意味着它不是试图学习特征,而是试图学习残差。更详细的解释可以在这里找到。

我们开始吧!

步骤 0:安装并加载必要的包

首先,我们需要安装必要的软件包。为了确保得到和我一样的结果,我建议你在谷歌合作环境上运行这段代码。协作笔记本在谷歌的云服务器上执行代码,这意味着无论你的机器功率如何,你都可以利用谷歌硬件的能力。最棒的是,它完全免费

  • 用于从图像中检测人脸的 mtcnn 包(来源)
  • resnet50 cnn 模型的 keras _ vgg face(来源)
  • 张量流(来源)
  • keras ( 来源)
  • opencv ( 来源)
!pip install mtcnn!pip install keras_vggface!pip install tensorflow!pip install keras!pip install opencv!pip install PIL

按如下方式导入已安装的软件包:

import mtcnnfrom mtcnn.mtcnn import MTCNNfrom keras_vggface.vggface import VGGFacefrom keras_vggface.utils import preprocess_inputfrom keras_vggface.utils import decode_predictionsimport PILimport osfrom urllib import requestimport numpy as npimport cv2# Import this one if you are working in the google colab environmentfrom google.colab.patches import cv2_imshow

步骤 1:图像加载

为了这个练习,我们导入一张查宁·塔图姆的图片。这使得每个人都可以很容易地复制它,也证明了模型的准确性。用你自己的图片链接更改 url 链接(提示:你可以使用你的 linkedin 账户的图片 url)。

# Give the image linkurl = "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/Channing_Tatum_by_Gage_Skidmore_3.jpg/330px-Channing_Tatum_by_Gage_Skidmore_3.jpg"# Open the link and save the image to resres = request.urlopen(url)# Read the res object and convert it to an arrayimg = np.asarray(bytearray(res.read()), dtype='uint8')# Add the color variableimg = cv2.imdecode(img, cv2.IMREAD_COLOR)# Show the imagecv2_imshow(img)

步骤 1 的期望输出( img 源)

第二步:人脸检测

图像现在已载入。因为我们的模型只需要人脸,所以我们需要从图像中提取人脸。为此,我们使用 mtcnn 包。MTCNN 实现了最先进的结果,并且能够检测各种面部特征(眼睛、嘴等等)。更多关于 MTCNN 的信息可以在这里找到。

# Initialize mtcnn detectordetector = MTCNN()

然后,我们确定一些面部提取参数:

  • 目标尺寸:人脸图像应该有多大?对于 ResNet50 图像,要求大小为(224,224)
  • Border_rel:这个参数决定了我们希望人脸图像放大到什么程度。我们现在把它设置为零。
# set face extraction parameterstarget_size = (224,224) # output image size
border_rel = 0 # increase or decrease zoom on image

我们调用检测器来检测给定图像中的人脸。我们看到人脸被检测到的概率为 99.8%。关键点被分配了坐标。

# detect faces in the imagedetections = detector.detect_faces(img)print(detections)

MTCNN 检测输出

通过使用 box 变量,我们可以确定面部的坐标。

x1, y1, width, height = detections[0]['box']dw = round(width * border_rel)dh = round(height * border_rel)x2, y2 = x1 + width + dw, y1 + height + dhface = img[y1:y2, x1:x2]

选择图像中的人脸后,我们将人脸的大小调整为 ResNet-50: 224,224 所需的格式。

# resize pixels to the model sizeface = PIL.Image.fromarray(face)
face = face.resize((224, 224))
face = np.asarray(face)# show facecv2_imshow(face)

查宁·塔图姆的脸( img 来源)

第三步:预处理

ResNet-50 模型期望有多个图像作为输入。目前,我们只有一个图像。为了解决这种差异,我们扩展了一维,因此我们有一个 1 x 224 x 224 x 3 的形状,而不是 224 x 224 x 3 的形状。

# convert to float32
face_pp = face.astype('float32')
face_pp = np.expand_dims(face_pp, axis = 0)

机器学习模型需要得到一致的数据。为了确保我们所有的图像是一致的,我们必须应用一个归一化函数。幸运的是,我们可以使用 Keras 的 preprocess_input 函数来归一化我们的人脸图像。该函数将对 0 到 255 范围内的像素值进行归一化,使其适合深度学习。不要忘记将 version 参数设置为“2 ”,以便对 ResNet-50 进行专门的预处理。

face_pp = preprocess_input(face_pp, version = 2)

第四步:预测

所有的准备工作现在都完成了。干得好!

这里,我们通过调用 VGGFace 实例来初始化 ResNet50 模型。我们仔细检查模型期望的输入和模型将给出的输出。

# Create the resnet50 Modelmodel = VGGFace(model= 'resnet50')# Check what the required input of the model is & outputprint('Inputs: {input}'.format(input = model.inputs))print('Output: {output}'.format(output = model.outputs))

ResNet-50 型号的输入和输出

接下来,我们让我们的模型预测预处理后的人脸。

# predict the face with the inputprediction = model.predict(face_pp)

第五步:提取结果

这张脸现在已经被预测到了。我们只需要解码我们的预测,并以可读的方式打印出来。

# convert predictions into names & probabilitiesresults = decode_predictions(prediction)# Display resultscv2_imshow(img)
for result in results[0]:
print ('%s: %.3f%%' % (result[0], result[1]*100))

查宁·塔图姆的预测结果( img 来源

这就对了。
你刚刚在卷积神经网络的帮助下进行了一次预测。如果你用查宁·塔图姆的照片做了这个,别忘了用你自己的照片试试,看看你和哪个名人有最大的相似之处。

后续步骤

下一步,我们可以应用迁移学习。迁移学习指的是重用一个问题的预训练模型,并将其应用于另一个问题的过程。我们可以使用这种最先进的 ResNet-50 模型,并在不同的人群中重新训练分类层。

来源

ResNet50 论文

keras 中的卷积神经网络

开源代码库

完整的代码可以在我的 github 上找到。我建议在执行代码时使用 google collab。

需要哪家云服务商 ML 平台?

原文:https://towardsdatascience.com/which-cloud-servicer-provider-ml-platform-do-you-need-69ff5d96b7db?source=collection_archive---------28-----------------------

入门

AWS Sagemaker,Azure ML 平台还是 GCP AI 平台?其实无所谓。不是为了工业化。

首先,我假设你已经选择了一个云服务提供商(CSP ),或者有能力为你的组织选择一个。其次,我还假设你需要能够构建、训练、调整、评估和部署机器学习模型,那么你最有可能做的第一件事就是检查你选择的 CSP 的 ML 平台。还是应该看看那些第三方厂商?怎么比较?

让我们看看什么才是真正重要的,也就是更大的图景。

改编自 https://www.cartoonstock.com/cartoonview.asp?的漫画 catref=CC123672 ,经作者许可编辑。

实验 vs 工业化

在每个 ML 甚至数据科学项目中,都有两个目标完全不同的阶段。在实验过程中,目标是找到一个能尽快回答(业务)问题的模型。而在工业化过程中,目标是可靠和自动运行。

让我们假设一个组织将卓越运营优先于商业价值。也许两年后,他们有了一个生产中的模型,这个模型带来了价值,但是运行起来却很有魅力。大多数(创新)项目在很久以前就被扼杀了,因为没有展示价值。

首先证明实验,然后工业化。(图片由作者提供)

所以有意义的轨迹就是你在上图中看到的绿色。首先使用非常基本的服务,这些服务可能不适合生产使用,但是至少已经显示了价值。这一领域的前四个项目很可能会失败,但第五个项目会大获成功。

典型挑战

ML 平台喜欢吹嘘他们如何提供与不使用这些工具相关的典型问题的解决方案。我认为他们确实有。尽管如此,他们无法解决的挑战仍然很大。

实验的典型挑战取决于组织规模。(图片由作者提供)

工业化的典型挑战取决于组织规模。(图片由作者提供)

隐性技术债务和 MLOps

当更深入地谈论 ML 项目的工业化时,有两个术语你应该记住。

第一个术语与谷歌前一段时间发表的一篇关于机器学习系统中隐藏的技术债务的论文有关。ML 模型的构建只是将模型投入生产的全部工作的一小部分。把它做好是一个复杂的过程。

改编自https://papers . nips . cc/paper/5656-hidden-technical-debt-in-machine-learning-systems . pdf

谷歌还发表了一篇关于 MLOps 应该看起来像的文章。他们定义了三个成熟度等级。这将导致生产中更高的可靠性和可观察性。

  1. m lops 0 级🐣:模型的手工构建和部署。
  2. MLOps 一级🤓:部署管道,不部署模型。
  3. MLOps 二级 😎 : CICD 整合,自动再训练,概念漂移检测。

通过查看他们对这一过程的示意图(见下图),您会立即发现这可能会变得复杂。组织需要一个坚实的战略来达到这个成熟度水平。为了长期成功,决策者需要看到价值。

改编自https://cloud . Google . com/solutions/machine-learning/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning

从小处着手,专注于实验

我们提出以下采用演进。这是有意义的。

如果您的组织没有云、ML 或 Python 方面的经验,请从以下方面入手:

它们是基本的,用于实验,但可以显示业务的快速价值。这使得企业对 IT 有了更多的认同和信心,去关注那些可以增加你的工业化模型的稳定性和可追溯性的特性。

(图片由作者提供)

一旦你准备好进一步走向工业化,你想看的第一个特性是一个注册模型。这是一个跟踪已训练模型并可用于部署的地方。它可以帮助你追踪哪个表现好,或者不好。此外,如果您想了解两个月前的 one good model 是如何实现的,那么这将非常有帮助。

其次,你通常不想只训练和部署一个模型。典型的管道包括

  1. 数据预处理,
  2. 模型调整,
  3. 模特培训,
  4. 模型评估(使用更难计算的指标),
  5. 所有数据的最终模型训练,
  6. 模型部署步骤。

从这一点开始,你不想再在笔记本上玩了,而是创建一个 Python 模块,例如 Git。

第三,到目前为止,我假设您只进行了批量推理(针对吞吐量进行了优化)。例如,每天凌晨 2 点运行批处理管道,对前一天收集的一组数据执行预测。会有那么一个时刻,你也希望能够一直这样做,以一种所谓的在线方式(也称为请求-回复)。为了实现这种能力,可以使用 API 端点。它从一个已部署的模型中返回一个对它收到的每条消息的预测。然后,针对延迟对该流进行优化。您最小化了消息发送者从 API 端点接收有效响应的时间。

最后,将您的 ML 管道集成到 CICD 流中。为再培训设置触发器。这是最后一步。根据组织在为常规 IT 系统建立流程方面的经验,采用速度可能会有所不同。建立这样的流程可以被视为经历地狱。你只希望少数人经历地狱。推动他们制作令人信服的模板,供其他经验不足的数据科学家或工程师使用。

很酷,但是我应该选择什么 ML 平台呢?

答案是:看情况。

GCP AI 平台,Azure ML 和 AWS Sagemaker 有很多共同的服务。它们都提供了下面摘要中所示的功能。

(图片由作者提供)

他们之间的差异是显著的。不采用特定平台不应该成为交易障碍。尽管我很难搞清楚👍s 或👎我总结了下面几个清晰的例子。

免责声明,这是我在使用 3 个不同平台的基础上得出的个人观点。(图片由作者提供)

该不该换 ML 平台?

如果你是一家初创公司,想要一个 ML 平台,并且你仍然有选择云提供商的奢侈,从你的需求开始。做你的研究,并以此为基础做出选择。您不需要在 Kubernetes 集群上部署昂贵的 Kubeflow 平台来部署一些模型。

如果您是一个较大的组织,并且已经选择了云提供商,我们建议继续选择。不要为了几个额外的铃铛和哨子而改变。就像社交媒体平台一样,最终它们看起来和做的都一样。谷歌可能有更好的 AutoML 工具,但我很确定他们会 Azure,AWS 会赶上来(如果他们还没有的话)。

请注意,在这些平台上部署超过 5–10 个型号会变得非常昂贵。

一般性建议

1.用于实验

关注快速迭代⚡,自助服务💁并且易于调试🐛。

选择你最擅长的工具。AWS Sagemaker、GCP AI 平台或 Azure ML 肯定有助于加速

  • 探索,
  • 模型调整,
  • 培训,
  • 树立标杆。

2.为了的工业化

关注可靠性🧘‍♂️和可追溯性🔍和避免技术碎片化🧩.

如果你是一个大型组织,可以考虑将模型工业化与云中现有的稳定数据工程链相集成(例如在 Kubernetes 上)。
如果你是一家初创公司,使用这些 ML 平台的部署选项。这对你来说是一个明显的加速器。当然,如果部署的型号数量很少(<5-10 个型号)。如果过了一段时间你注意到

  • 成本很高,
  • 数据访问问题或
  • 不稳定持续存在,

那么是时候远离那些 ML 平台了。走向稳定的数据工程链(像大公司一样)。

最后,你也可以查看我们关于这个主题的网上研讨会。

额外收获:从实验到工业化平稳过渡的技巧

科学与工程代码解耦 机器学习往往有很多样板代码需要添加。想想训练循环、数据加载、日志记录……如果你用 Pytorch,一定要看看 Pytorch Lightning

来自:https://github . com/PyTorchLightning/pytorch-lightning/blob/master/docs/source/_ images/general/fast _ 2 . gif

采用项目编码模板

组织内部的每个项目都需要一些代码来

  • 与 CICD 系统集成,
  • 与选择的 ML 平台集成,
  • 设置数据访问,
  • 设置日志记录等。

使用一种叫做 cookiecutter 的东西,在 git repo 中生成项目结构,这将使新项目摆脱所有这些麻烦。看看 https://github.com/drivendata/cookiecutter-data-science,这是一个很好的起点。

来自 https://github.com/drivendata/cookiecutter-data-science

标准化

简而言之,限制使用的技术堆栈的数量。你用得越多,你需要维护的就越多。当数据科学将他或她的模型留给数据工程师时,这也简化了转换。

承认

我要感谢 Kristof Martens、Gergely Soti、Pascal Knapen 以及来自 Data Minded 的 Kris Peeters,感谢他们的意见和反馈。而且我们的客户能够使用如此多的不同技术堆栈。

新冠肺炎:官方数字背后隐藏着什么?

原文:https://towardsdatascience.com/which-countries-are-affected-the-most-by-covid-19-4d4570852e31?source=collection_archive---------29-----------------------

变更数据

机器学习揭示洞察力:时间序列聚类分析。

engin akyurtUnsplash 上拍摄的照片

概观

2020 年初,一种新型病毒开始在 Mainland China 传播。事实证明,这是一个影响深远、改变世界的事件的开始。

在第一波病毒席卷全球之后,我想提出两个问题:

  • 哪些国家受新冠肺炎的影响最大?
  • 哪些政府采取了正确的措施来阻止病毒的传播?

要回答,我们首先要了解官方确诊病例数字背后隐藏的是什么。

然后,我们将机器学习算法应用于新冠肺炎数据。这将各国组织成具有相似流行病学行为的群体。令人惊讶的是,这些群体在世界地图上形成了局部集群。这个意外的发现帮助我们回答了上面的问题。

如何决定哪些国家最痛苦?

当我第一次接触新冠肺炎的数据时,我自然检查了确诊的新冠肺炎病例的数量。该数据由约翰·霍普斯金大学提供。

全球前 15 名新冠肺炎感染病例。所有图表均由作者创作。(数据来自 2020 年 9 月)

这个排名告诉我们什么有意义的事情吗?显然,美国的感染人数比西班牙多得多,而西班牙是一个小得多的国家。然而,这并不意味着美国比西班牙受影响更大。

因此,感染人数需要根据每个国家的人口进行标准化。现在,这将允许独立于国家大小的更公平的比较。

全球标准化新冠肺炎病例。

卡塔尔、巴林、巴拿马、智利和科威特的感染密度最高。你知道吗?

但是等一下……各国有不同的检测政策:
更多的新冠肺炎检测会产生更多的确诊病例——而完全不检测意味着零病例。 所以,我们需要一个与测试量无关的量。

新冠肺炎的死亡人数是由测试率无偏估计的。

每个国家的标准化总死亡人数。

我们将使用标准化的死亡人数来比较国家!秘鲁、比利时和安道尔是死亡人数最多的国家(按人口标准化)。你听说过这个事实吗?此外,上述前 15 个国家中有 7 个属于欧洲大陆

让我们更深入地研究一下隐藏在数据背后的东西。

照片由 Unsplash 上的九个 koepfer 拍摄

分析每天的死亡人数

太好了,我们找到了一个合适的衡量标准来判断各国在病毒下遭受了多大的痛苦。现在我们将分析这个量随时间的发展,看看我们还能从中学到什么。

意大利、德国、美国和巴西的标准化每日死亡人数(7 天平均值)。

通过检查上面的每日死亡曲线,人们可以提取 不同的流行病学行为。例如,红色曲线显示意大利 4 月份有许多人死亡。然而,他们设法阻止了病毒的传播。意大利通过几个月完全关闭社交生活达到了这个目的。

绿色曲线的德国没有受到第一波新冠肺炎浪潮的重创。国家反应迅速,从一开始就减缓了社会生活。结果,死亡人数几乎回到零。

另一方面,从四月到现在,巴西和美国不断有人死亡。他们还没有设法控制住病毒。

我们能通过观察其他国家学到一些东西吗:

所有 188 个国家的每日死亡曲线。你能认出任何模式吗?

好吧,这看起来有点乱。有 188 个国家。但是我们能找到多少不同的特征曲线呢?

为了清理混乱并找到模式,我们将应用聚类算法。这种无监督学习技术将相似的数据曲线分组在一起。

寻找跨国集群——收拾残局。

汉斯-彼得·高斯特在 Unsplash 上拍摄的照片

python 包ts learn【2】为时间序列提供机器学习算法。我们将 k 均值聚类方法应用于标准化的每日死亡曲线。

该算法将行为相似的国家分组。结果是以下三个集群:

对国家进行聚类,绿色、红色和蓝色线条给出了每个聚类的均值曲线。图表显示了一段时间内标准化的每日死亡人数。

绿色组(158 个国家)显示每日死亡人数很少,接近于零。那些国家受到新冠肺炎的轻微影响。

另一方面,红色集群(9 个国家)在第一波(4 月/5 月)中有巨大的死亡人数。但是,设法控制住了局面,死亡率几乎回到了零。

相比之下,蓝色集群包含 16 个国家,这些国家不断遭受新冠肺炎死亡。随着时间的推移,情况似乎越来越糟。

集群在世界各地是如何分布的?

快速浏览下面的地图,可以看到红色星团位于欧洲大陆。此外,蓝色集群的国家集中在北美和南美。

红色、绿色和蓝色星团在世界地图上的分布。

红色区域包括西班牙、法国、英国、意大利、比利时、瑞典、荷兰、爱尔兰和安道尔。在新冠肺炎的第一波浪潮中,这些国家经历了一段艰难的时期。但是,通过对日常生活施加限制,他们减缓了死亡的速度。现在,这些国家几乎恢复了常态。

美国、巴西、秘鲁、哥伦比亚、墨西哥、阿根廷、智利、玻利维亚、厄瓜多尔和巴拿马还没有设法阻止死亡。那些国家可能会尽快采取适当的行动

结论

我们已经讨论了新冠肺炎影响的一个合适的度量标准,它允许在不同的国家之间进行比较。

关注标准化死亡人数抵消了检测率偏差。此外,我们要注意的是,还有社会经济因素。例如获得保健系统或其质量。我们在这里没有考虑这些影响。

一种聚类算法帮助我们将国家分为三个主要的特征群。国家、

  • 只受到病毒的轻微影响,
  • 仅在 2020 年 4 月的第一次新冠肺炎浪潮中遭受了艰难的时期,
  • 和不断遭受死亡的国家。

严格的社会限制帮助大多数欧洲国家控制住了病毒。但是,在一些 北美和南美国家,人们仍然奄奄一息。 不幸!

所有的数据可视化都是用 Python、Pandas 和 leav 完成的。Github 上 完整代码的链接可以在这里 找到。数据来自 2020 年 9 月 13 日。

[1]JHU·CSSE 提供的“新型冠状病毒(新冠肺炎)病例”数据可在此下载:
https://github . com/CSSEGISandData/新冠肺炎/tree/master/csse _ covid _ 19 _ Data/csse _ covid _ 19 _ time _ series

[2] Tslearn,时间序列数据的机器学习工具包。
塔维纳德、法乌齐、范德维勒、迪沃、安德罗兹、霍尔茨、佩恩、尤尔查克、鲁尔姆、科拉尔和伍兹。
机器学习研究杂志21(2020)1–6。https://tslearn.readthedocs.io/en/stable/index.html

哪些国家关注气候变化?

原文:https://towardsdatascience.com/which-countries-are-concerned-about-climate-change-mining-bittorrent-5114edd7aeb5?source=collection_archive---------55-----------------------

尼克·邦达列夫摄于佩克斯

激流科学

分析环境和气候相关纪录片的收视率,以量化世界各国对气候变化的关注。

澳大利亚目前高度关注气候变化。

在澳大利亚野火和 2019 年亚马逊森林夷为平地之间,极地冰的持续融化,日益肆虐的全球天气,南极上空被遗忘的欧洲大小的臭氧洞和当前的百年疫情;关键问题是——我们世界的国家对气候变化有多关心?

在这篇文章中,我展示了我的实验,通过将数据科学应用于 BitTorrent 网络的挖掘来寻找这个重要问题的答案。如果你像我一样没有耐心,关键见解会在底部呈现,供你快速阅读。下面的歌词是一个很好的总结。

深色意味着对气候的高度关注。没有颜色意味着缺乏足够的数据。

所以让我们开始吧!

概观

要回答题目中的问题,我们需要数据。这个实验中使用的数据是全球气候变化和环境相关纪录片的代表性观众人数。

基本的假设是,如果我关心气候,那么我会通过观看与气候变化相关的纪录片来寻找相关信息。因此,如果一个国家的居民比其他人看更多这样的纪录片,那么我们可以推断他们的关注度更高。

但是,事情没那么简单。并非所有国家都以同样的身份使用非法下载。例如,菲律宾是一个在 torrent 网络中显示出极高流量的国家,而英国公民似乎更喜欢合法地消费越来越实惠的内容。自然,菲律宾环境相关纪录片的下载量会高得多。这样的变异需要 归一化

为了进行这种标准化,通过挖掘关于一组在世界范围内流行的商业电影的数据,例如泰坦尼克号或更近的名为 1917 的战争电影,来捕获洪流观众的一般特征。

筛选出那些数据太少的国家也很重要。这可能是由于多种原因造成的,例如,饱受战争蹂躏的阿富汗几乎没有洪流流量,可能是由于缺乏互联网连接。

更重要的是,这项调查是基于这样一个假设,即人们喜欢看英语纪录片,这并没有错,考虑到英语是一种全球语言,一个国家的人们对气候等问题表示关注,通常会拥有学习这种语言的必要手段。但是,由于这个原因,一些非洲国家甚至欧洲国家应该被排除在这个分析之外。

本质上,这个想法很简单,但很有趣。可视化工具有助于理解分析的结果。现在让我们看看我在阅读代码时用来执行这些分析的过程。

第一项任务是数据工程。我不会重复使用分布式哈希表挖掘 BitTorrent 网络的部分以及与之相关的其他任务,这在之前的一篇文章中已经介绍过了。

[## 走向激流科学:数据工程

挖掘 BitTorrent 网络

towardsdatascience.com](/towards-torrent-science-data-engineering-d79e774886cb)

数据工程

thepiratebay.org这样的 BitTorrent 网站包含大量文件,主要是盗版电影和视频。通过抓取此类网站,收集与气候变化和环境相关的种子。这些种子然后被用于挖掘 BitTorrent 网络,以提取具有它们在世界上的位置的对等体(下载者)。这样就建立了一个数据集。这个数据集代表了这些纪录片在多个国家的观众特征。

但首先,我们需要选择一套流行的气候和环境的纪录片,这些纪录片可以在种子网站上找到,并被同行们寻找。在花了一些时间在互联网上回顾这些纪录片后,以下一组纪录片最终定稿。

被考虑的气候变化纪录片列表

为了进行上述动机的标准化,考虑了以下好莱坞电影的集合。它们仍然很受欢迎,并且已经遍及全球。

被考虑的商业好莱坞电影列表

第一步是提取数据,但我跳过了关于从 BitTorrent 中提取数据的部分,因为它在我以前的文章中有所涉及。

下一步是使用 Pandas 库创建数据框,以便进行进一步的分析。实现的函数(代码如下所示)返回一个字典,其中包含与上面列出的每个视频相对应的种子集的 IP、国家和城市。这被转换成表格数据并存储在 Pandas 数据框中。

示例输出如图 1 所示。这显示了按字母顺序排列的前五个国家的 10 部好莱坞电影的同行人数。

图 1-示例输出:电影数据帧

如前所述,由于缺乏数据,阿富汗必须排除在这一分析之外。同样的逻辑适用于许多国家,例如,阿尔巴尼亚人似乎对使用 BitTorrents 观看这些好莱坞电影并不特别感兴趣。

事实上,通过过滤掉至少有十个国家的环境纪录片总同行,只有三十个国家有资格进行进一步的分析。大多数非洲国家和许多欧洲国家不得不被过滤掉。**

使用 Pandas 数据框时,代码非常简单。所以没有在这个空间展示。

现在让我们继续分析部分。

分析学

在数据工程的过程之后,我们只剩下两个表格(数据帧),分别是好莱坞电影和关注气候的纪录片的收视率数据。

为了量化对气候的关注,我们将使用一个简单的方法。一个国家的气候纪录片和好莱坞电影的观众比例应该表明它的关注。这在下面的等式中表示。

但在此之前,正如概述中所提到的,我们需要执行标准化步骤,以便进行分析。

正常化

下面来自维基百科的规范化定义适合于我们案例中的分析目的。

归一化是指创建统计数据的移位和缩放版本,其目的是这些归一化值允许以消除某些总体影响的方式比较不同数据集的相应归一化值。—维基百科

首先,针对每个数据集,分别对各个国家的每个视频的对等计数(收视率)进行归一化。然后,对视频中每个国家的结果数据进行归一化处理。必须按此顺序进行,否则,上述所需的比率将不起作用。

这在下面的代码中有解释。第 2 行和第 3 行用于沿列标准化,第 4 行和第 5 行用于跨行标准化。

上述代码的输出如下图所示。它显示了前五个国家的标准化值。请注意,之前图像中出现的阿富汗、阿尔及利亚、阿尔巴尼亚和安哥拉现在都被过滤掉了。

归一化后,对每行的值求和,然后确定两个数据集的比值。这在 Python 中也很简单,代码如下所示。

从前五个国家的产出可以推断,澳大利亚似乎比其他国家更关心气候。

现在,让我们通过图和地图将输出可视化,并得出见解。

形象化

让我们先来看看简单的条形图。这里不分享代码,因为它很简单。根据我们的分析,从这个图表中可以明显看出,澳大利亚人是世界上最有气候意识的公民。加拿大人美国人荷兰人也非常关注气候变化。

柱状图——气候问题。澳洲人还挺在意的!

根据我们的分析,印度尼西亚人、南非人、西班牙人和保加利亚人属于第二类。

现在让我们用色彩图在地图上标出这些发现。

Choropleth 图提供了一种简单的方法来可视化一个地理区域内的测量值如何变化,或显示一个区域内的可变性水平。— 维基百科

在世界地图上,每个国家都根据其与气候相关的价值进行了着色。下图是使用 geopandas 库生成的。此外,代码如下所示。

阴影越深,对该国气候的关注就越高。同样显而易见的是,由于缺乏数据,许多国家都是白色的。这项分析主要限于英语盛行的三十个国家。

似乎只有当我们的家园被摧毁时,我们才意识到气候变化,就像澳大利亚发生的那样。亚马逊也发生了大规模火灾。但是巴西人似乎对此并不关心,至少从我们的分析中可以看出。也许,因为火灾只是在经济上帮助了巴西人——不像澳大利亚。

使用开源 Python 库生成的绘图。较暗的色调意味着对气候的高度关注。白色显示的国家表示缺乏足够的数据。

虽然新西兰没有出现在地图或分析中,这是因为 BitTorrent 在那里并不流行。尽管粗略地看了一下他们有限的观众群,表明他们对这类纪录片感兴趣。

让我们讨论一下在这一分析中必须考虑的潜在警告。

警告

  1. 第一个潜在的问题是电影和视频的选择。如果不同的一组视频给出不同的结果呢?就纪录片而言,激流世界里几乎没有其他受欢迎的纪录片。但是电影的选择是可以进一步探讨的。
  2. 如果有与气候相关的地区语言的视频,没有英文版的怎么办?这当然是可能的。尽管一部好的纪录片应该被翻译成英语以吸引更多的观众,但最受欢迎的还是英语。
  3. 数据可靠吗?有大量的 VPN 服务器,很多时候地理定位是误导。这是一个问题,但我们可以预期噪声会降低,因为商业电影流和纪录片流都会导致这种系统误差,我们实际上是在取一个比率。事实上,我们观察到了一些与乌克兰有关的异常现象——也许它值得单独写一篇文章。

洞察力

  1. 澳大利亚、加拿大、荷兰和美国是对气候表现出最大关注的国家。紧随其后的是南非、西班牙、保加利亚和印度尼西亚。不幸的是,巴西似乎还没有达到这一水平,至少根据这一分析。英国的情况类似。
  2. 总的来说,发达国家对气候更加关注。英国是个例外,这有点令人惊讶,也是一种反常现象。这可能是一个错误的结论,需要调查。或许通过其他来源的数据——比如 Twitter。
  3. 虽然之前没有提到,但《甜蜜之地》是目前全世界最受欢迎的纪录片,在各大洲都有很高的收视率。这是一部关于蜜蜂的纪录片,可以在亚马逊 Prime 上看到。如果你还没有看过这部纪录片,并且希望更多地了解环境,这部纪录片可能是一个好的开始。****

代码的 Github 链接是:https://github.com/deepakkarunakaran/torrent-analytics

期待在未来进行更多的分析,可能会有更多的数据和一些更酷的 ML/DL 算法。观察电影类型偏好的分布可能会产生有趣的结果,值得深思。

你可以在 Linkedin 上联系我@https://www.linkedin.com/in/deepak-karunakaran/

哪些国家的反应与新冠肺炎相似?机器学习提供了答案

原文:https://towardsdatascience.com/which-countries-react-similar-to-covid-19-machine-learning-provides-the-answer-5971ec2f6f31?source=collection_archive---------12-----------------------

看看你的国家(或美国的州)和它的同行相比表现如何。了解聚类分析的实际应用——使用 UMAP 投影和 HDBSCAN。

【2020-2019-04 更新:添加 GitHub 库,见故事底部】

我经常想知道不同国家在冠状病毒病例统计方面有什么不同。往往只考虑绝对数字。因此,较小的国家(如瑞士、比利时)被忽略了。在这个故事中,我主要分析与人口规模相关的案例。截至今天(2020-04-16,来源 JHU)的铁的事实是:

每百万居民死于新冠肺炎的人数。人口规模至少为 100 万的所有国家、美国各州和中国各省的前 25 名。红色代表国家,灰色代表州和省。

纽约州在这份令人悲伤的名单中遥遥领先,紧随其后的是欧洲国家西班牙、比利时和意大利。在前 25 名中,中国只有一个省份。湖北(第 23 位)每百万死亡 56 人,约为纽约的十分之一。

提醒一下——将国家分成更小的区域总是会导致更多的极端值。对意大利来说,这将揭示出每百万人中有 1055 人死亡的伦巴第大区

但是动力呢?是不是有些国家反应比较早,有些国家比较晚?有没有一些模式?我们可以向其他国家学习吗?

为了回答这些问题,我采用了数据驱动的方法。 无监督学习 技术应该有助于获得一些新的洞察力。

这个故事分为以下四个部分:

  1. 数据源
    所用数据源的描述。
  2. 疫情爆发后的病例数发展
    众所周知的情节——更新并包括美国各州&中国各省。
  3. 特性工程
    关于最终分析中要使用的特性的细节。
  4. 聚类分析
    通过无监督学习进行国家间的比较。

1.数据源

案例统计

像许多其他人一样,我;)),对于案例统计,我依靠的是约翰·霍普斯金大学的 GitHub 知识库的数据。他们按国家和日期发布包括确诊病例、康复和死亡的时间序列。对于一些国家,如美国、加拿大、中国、澳大利亚,他们甚至更进一步,增加了地区甚至直辖市。

在这篇报道中,我们坚持使用国家数据。仅对于美国和中国,我还加载了单个州和省。

人口

人口规模取自三个不同的来源。国家一级的数字取自世界银行公开数据 API。还有一个 Python 包适合这个工作。

对于中国的省份,我找不到任何方便的 API。因此,我将维基百科上的表复制到一个制表符分隔的文本文件中。一个定制的导入器脚本将这些乱七八糟的东西转换成了一个漂亮的熊猫数据帧。

美国各州的人口规模已经包含在死亡人口的美国时间序列文件中(time _ series _ covid 19 _ deaths _ US . CSV’)。这个文件是 JHU 数据库的一部分。

在连接了所有这些数据集之后,我得到了一个熊猫数据框架,包括了我需要的所有数据。以下命令提取 4 月 11 日的随机样本,排除非常小的国家(< 1 million):

data[(data.date == '2020-04-11') & (data.Population >= 1000000)] \
    .sample(15)

Random sample of the imported data. 每行代表一个国家在给定日期的州(列‘date’)。对于美国和中国,也包括州/省级别的数据。彩色框代表国家数据(=红色)和地区数据(=灰色)。

2.爆发后的病例数发展

下面的图表是众所周知的。我添加这些图的主要原因是我对爆发日期的定义略有不同。在下一节描述“机器学习”特性时,我也会用到这个定义。看:

  • x 轴表示病毒爆发以来的天数。然而,我们没有将疫情定义为病例数超过 100 的那一天,而是将其定义为病例数超过每百万居民 5 例的。统计数据表明人口为 2000 万。
  • y 轴显示累计的确诊病例数,相对于对数轴上的人口规模

自新冠肺炎疫情爆发以来累计确诊病例数(百万分之五以上的一天)。仅显示人口规模至少为 1500 万的国家。

在欧洲国家中,西班牙领先。然而,所有这些国家在过去几周都放缓了脚步。就这些数字而言,美国作为一个整体,可以与欧洲相媲美。

中国和韩国在 3-4 周前拉平了曲线。与这些国家相比,日本的病例数稳步缓慢增长。

接下来,美国各州的情况完全相同。我将 x 轴的下限限定为 10,以使图的右上部分清晰:

自新冠肺炎疫情爆发以来累计确诊病例数(百万分之五以上的一天)。仅显示人口至少为 500 万的美国各州。

虽然一些州远低于全国平均水平(每百万 2000 例,如明尼苏达州为 300 例),但纽约和新泽西已经达到每百万 8000-9000 例。所有的曲线都降低了对数轴上的速度,但在这个已经很高的水平上加倍数字是不同的…

3.特征工程

考虑到有限的数量和数据的异构性,在新冠肺炎数据集上应用机器学习方法并不简单:

  • 首先,每个国家收集数据的方式非常不同。对病例有不同的定义,数据收集滞后,一些国家测试更多,等等。此外,死亡的原因也不尽相同。
  • 第二,全球只有大约 200 个国家。此外,为了执行数据驱动的方法,没有确诊病例或确诊病例很少的国家不会增加这一分析的价值。

自疫情爆发以来,我们总共有大约 60 个国家有超过 3 周的数据。因此,我不得不把更多的精力放在手工制作有用的功能上,而不是完全自动化的方法。让我先解释两个术语,然后是特性本身:

定义

  • 疫情 :
    如上所述,我将疫情定义为病例数超过每百万居民 5 例的那一天。
  • 峰值 :
    峰值定义为最近 7 天的平滑平均值达到最高值的那一天。关于平滑的更多信息。

特征

我计算并用于以下聚类分析的特征是:

  1. 早期死亡率 :
    疫情发生 14 天后每周死亡人数除以
    疫情发生一周内确诊病例数。
  2. 10x:
    从疫情爆发到确诊病例数乘以 10 所需的天数。实际上,这是从百万分之五到百万分之五十的时间段。
  3. 高峰死亡率 :
    高峰周死亡人数除以前 14 天的周确诊人数。
  4. 早期加速度 :
    如果 deltaW0W1 确诊病例从疫情爆发一周至之后一周的百分比增量,以及 deltaW1W2 疫情爆发后第 1 周至第 2 周的百分比增量,则加速度为:
    Early Accel = deltaw1w 2/deltaw0w 1。
  5. 电流加速度 :
    类似。如果 deltaWt-2Wt 从上周到本周确诊病例增加的百分比, deltaWt-4Wt-2 从当前前第 4 周到第 2 周确诊病例增加的百分比,则加速度为:
    current Accel = deltaWt-2Wt/deltaWt-4Wt-2。

加速度的定义听起来可能很复杂,但实际上它只是速度的变化。如果我们看到案例增加了 20%,然后又增加了 10%,那么加速度就是 1.10 / 1.20 = 0.92。因此,小于 1.0 的值是可以的。

为什么我用一个几何平均数来得到平滑的星期

我们的病例统计数据具有很强的周季节性,这是由周末较少进行测试这一事实造成的。因此,我们需要一个像移动平均线这样的平滑器来解释这个事实。我用的是几何平均。这背后的基本原理是,我们处理一个指数序列。每个周期都加倍的数列,例如:

[25,50, 100 ,200,400]

得出的算术平均值是 155。相反,几何平均值是 100。正是我们想要的。下面是计算的代码片段:

def geometric_mean(values):
    return np.exp(np.mean(np.log(values)))def geometric_simple_moving_average(df, len=7):
    return df.apply(np.log).rolling(len).mean().apply(np.exp)

4.聚类分析

方法

我选择 HDBSCAN 的 UMAP 投影进行聚类分析有几个原因。首先,数据不是对称的,所以基于对称距离的线性方法宁愿失败。

就非线性聚类分析而言,如今 t-SNE 非常普遍。然而,SNE 霸王龙只保留了局部结构,而不是全局结构。相反,对 UMAP 来说,全球距离也是有意义的。这使得可视化对解释更有价值。

最后,但同样重要的是,我想表演一些新的东西。不是旧的 k-means,或者标准的层次结构等等。😃

UMAP 本身并不直接生成星团。它对新空间进行非线性投影。在这个新的投影中, HDBSCAN 可以用来提取集群。

使用 UMAP 和 HDBSCAN 进行聚类分析的详细信息和 Python 代码可以在UMAP-学习页面上找到。我计算了两个不同的投影。一个用于可视化( embedding_for_plot ),另一个( embedding_for_hdbscan )作为 hdbscan 聚类的预处理器:

import umap.umap_ as umap   # !pip install 'umap-learn==0.3.10'
import hdbscanembedding_for_plot = umap.UMAP(random_state=random_state) \
    .fit_transform(features)embedding_for_hdbscan = umap.UMAP( \
    random_state=random_state, min_dist=0.0, n_neighbors=10) \
    .fit_transform(features)cluster = hdbscan.HDBSCAN(min_samples=2, min_cluster_size=5) \
    .fit_predict(embedding_for_hdbscan)

为什么要进行两次分析?

我进行了两种不同的分析。第一个聚类分析只包括三个特征,对于疫情爆发后只有 2.5 周数据的国家来说效果很好。

第二个分析也使用曲线峰值的特征。对于每日病例仍在增加的国家,高峰将会移动。因此,结果也会改变。

1.爆发相似性和聚类分析

在第一次分析中,我使用了以下三个特征:

  • DaysTo10X
  • 早期死亡率
  • 早期加速

该算法将数据集分成大小相似的四个不同的簇。使用 UMAP 嵌入,数据可以很容易地在两个轴上可视化:

请记住,对于这种聚类,仅使用爆发后 2-3 周的数据。值得注意的是,西班牙在这里并不属于橙色组,该组包括意大利、比利时、纽约、德国、加拿大等。

为了深入挖掘,我创建了小提琴图(类似于盒子图)。红色和橙色集群的早期死亡率都很高。然而,红色集群在爆发后达到快 10 倍(小“DaysTo10X”)。

2.总体相似性和聚类分析

在第二次分析中,我增加了两个特性,即:

  • 峰值死亡率
  • 电流传感器

现在 HDBSCAN 确定了 5 个集群:

在这些星团中,蓝色的那个鹤立鸡群。“蓝色等级”的国家在疫情爆发后花了更长时间才实现病例数 10 倍的增长,但它们现在在确诊病例中分享了相当高的增长速度(见“当前加速”)。

慢慢来,确定你的国家,做你自己的解释。聚类分析总是关于发现新的关系和见解

大多数方法也有随机成分。这意味着,如果我们用不同的随机种子数进行相同的分析,结果可能会有所不同。通常不是很多,但也可能不是五个,而是四个或六个。

关于预测和预报的一点注记

这个故事不是直接关于预测和未来的场景。然而,识别相似的国家或州,以及它们的集群,可以帮助应用监督学习

如果我们知道纽约和新泽西的表现与意大利和西班牙相似,但它们滞后 2 周,我们可以使用欧洲国家的最新历史来预测美国这些州的未来。

就机器学习术语而言,欧洲国家的最新数据起到了“标签”的作用。

贮藏室ˌ仓库

这个故事的所有代码都可以在 GitHub 上找到,参见:

[## ploner/冠状病毒-聚集

该资料库包括一个 Jupyter 笔记本,用于对冠状病毒病例进行聚类分析。结果和情节…

github.com](https://github.com/ploner/coronavirus-clustering)

最后的想法

除了识别一些众所周知的集群,我还能够发现一些新的、意想不到的关系。此外,特别是使用 Violin Plots 的聚类分布可视化对从提取的聚类中获得更多信息有很大帮助。

最后,我会一直建议基于周【几何】平均值而不是每日病例统计数据做出关于冠状病毒的决定。这消除了周末效应,使每一个分析和解释更加稳定。

如果你喜欢这个故事,你可能也会喜欢我在《走向数据科学》上发表的这两个中型故事中的一个。它们是关于新冠肺炎、分析数据驱动的 Web 应用开发:

[## 厌倦了被告知新冠肺炎方向每两天改变?

忘记每日统计,遵循正确的 KPI!

towardsdatascience.com](/forget-daily-statistics-of-the-coronavirus-7e9bbb7349bd) [## 使用 Python、Dash 和 Plotly 可视化新冠肺炎案例数据

立即创建您自己的仪表板 Web 应用程序!

towardsdatascience.com](/visualise-covid-19-case-data-using-python-dash-and-plotly-e58feb34f70f)

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

在机器学习回归问题中,应该使用哪种评估指标?

原文:https://towardsdatascience.com/which-evaluation-metric-should-you-use-in-machine-learning-regression-problems-20cdaef258e?source=collection_archive---------1-----------------------

r,RMSE 和梅

如果你像我一样,你可能在回归问题中使用了 R 平方(R)、均方根误差(RMSE)和平均绝对误差(MAE)评估指标,而没有仔细考虑它们。🤔

尽管它们都是通用的度量标准,但是在什么时候使用哪一个并不明显。写完这篇文章后,我有了一个新的最爱和一个新的计划来报道它们。😀

过一会儿我会和你分享这些结论。首先,我们将深入了解每个指标。您将了解每种方法在模型选择和报告方面的优缺点。我们开始吧!🚀

评估指标就像理解的桥梁。😀资料来源:pixabay.com

R 平方

r 代表你的模型解释的方差比例。

r 是一个相对指标,因此您可以使用它来与基于相同数据训练的其他模型进行比较。你可以用它来大致了解一个模型的表现。

免责声明:本文不是对机器学习方法的回顾,但请确保您使用不同的数据进行训练、验证和测试。你总是想拿出一些你的模型没见过的数据来评估它的性能。此外,查看模型预测值与实际值的对比图,以了解模型与数据的吻合程度也是一个好主意。

让我们看看 R 是如何计算的。前进!➡️

公式和代码

这里有一种表达 R 的方法。

1 - (SSE/SST)

SSE 是误差平方和;实际值和预测值之差的平方和。

SST 是平方和的总和(有时显示为 TSS);实际值和实际值平均值之间的平方差之和。

更多数学符号:

1-(∑(y-ŷ)/∑(y-y̅))

下面是代码的样子——改编自主要的 Python 机器学习库 scikit-learn

numerator = ((y_true - y_pred) ** 2).sum()
denominator = ((y_true - np.average(y_true)) ** 2).sum()r2_score = 1 - (numerator / denominator)

用语言

  1. 从实际 y 值中减去预测值
  2. 计算结果的平方
  3. 合计它们

这是分子。

  1. 从每个实际 y 值中减去实际 y 值的平均值
  2. 计算结果的平方
  3. 合计它们

这是分母。

1 -分子/分母是 R。🎉

r 是 scikit-learn 回归问题的默认度量。如果您想显式地使用它,您可以导入它,然后像这样使用它:

from sklearn.metrics import r2_scorer2_score(y_true, y_pred)

解释

一个解释不存在方差的模型的 R 为 0。R 为 1 的模型可以解释所有的差异。分数越高越好。

然而,如果你的 R 在你的测试集上是 1,你可能在泄露信息,或者这个问题对你的模型来说很简单。👍

在某些领域,如社会科学,有许多因素影响人类行为。假设你有一个只有几个自变量的模型,它的 R 接近于 0.5。你的模型能够解释数据中一半的差异,这很好。😀

有可能 R 为负。当模型对数据的预测比输出值的平均值差时,就会出现负分。每次预测平均值都是无效模型。更多见这里

例子

假设您有以下小型玩具测试数据集:

这个 Jupyter 笔记本的 GitHub 上可以获得所有代码。

这是实际和预测的 y 值的曲线图。

模型的 R 为 0.71。模型解释了数据中 71%的差异。这还不算太糟糕,尽管我们想要更多的测试数据。😀

再举一个例子,假设 y 的真值是【55,2,3】。平均数是 20。对每个 y 值预测 20 会导致 R 为 0。

预测上述真实值【1,2,2】的模型得出 R 为-0.59。底线是,你可以做得比空模型差得多!事实上,你可以预测无限差,导致无限低的 R。😲

作为一个简短的旁白,让我们看看调整后的 R 和机器学习与统计。

调整后 R

调整后的 R 考虑了更多预测变量(特征)的增加。

只有当新的预测变量对模型性能的改善程度超过偶然情况下的预期时,调整后的 R 才会随着新的预测变量而增加。调整后的 R 有助于您专注于使用尽可能最节省的模型。😉

调整后的 R 在统计推断中比在机器学习中更常见。机器学习的主要 Python 库 Scikit-learn 甚至没有调整过的 R 度量。 Statsmodels ,Python 的主统计库。如果你想了解更多关于何时使用哪个 Python 库进行数据科学,我在这里写了一个指南

知道特征列数( p )和观测数( n )就可以计算出调整后的 R2。代码如下:

adjusted_r2 = 1 — ((1 — r2) * (n — 1)) / ( n — p — 1)

n-1自由度。每当你听到这个词,你就知道你在统计领域。在机器学习中,我们通常最关心预测能力,因此 R 比调整后的 R 更受青睐。

关于统计学与机器学习的另一个注意事项:我们的重点是机器学习,所以预测而不是因果关系。r——以及我们将看到的其他指标,本身并没有说明任何因果关系。

结果

r 告诉你你的模型解释了多少方差。这很方便,因为任何回归问题的 R 将立即提供对模型执行情况的一些(有限的)理解。😀

r 是一个相对度量。现在让我们来看几个绝对指标。

资料来源:pixabay.com

均方根误差(RMSE)

RMSE 是一个非常常见的评估指标。它的范围可以是 0 到无穷大。值越低越好。为了简单起见,请记住它的名称中有 error 并且您希望错误很少。☝️

公式和代码

RMSE 可以这样表述:

平均值的平方根 SSE

我们看到了上证 中的 R 评分指标。它是误差平方和。实际值和预测值之差的平方和。

更多数学公式:

(1/n *(∑(y-))**)

在 Python 代码中:

np.sqrt(np.mean((y_true - y_pred) ** 2))

用语言

  1. 从实际 y 值中减去预测值
  2. 计算结果的平方
  3. 合计它们
  4. 取平均值
  5. 求平方根

以下是如何使用 scikit-learn 中的函数获取 RMSE 的方法:

from sklearn.model_selection import mean_squared_errormean_squared_error(y_true, y_pred, squared=False)

从 scikit-learn 版本 0.22.0 开始,您可以使用squared=False参数。在此之前,你必须像这样自己求平方根:np.sqrt(mean_squared_error(y_actual, y_predicted)。☝️

解释

如果您想要,请使用 RMSE:

  • 惩罚大错误
  • 让结果与结果变量使用相同的单位
  • 使用可以快速计算的损失函数进行验证

您可以使用没有的均方误差(MSE ),但是单位不容易理解。只要取 MSE 的平方根,你就得到 RMSE。👍

的这篇优秀文章中,JJ 指出了 RMSE 的一些问题。即“”RMSE 不一定随误差的方差而增加。RMSE 随着误差幅度的频率分布的变化而增加

同样,RMSE 也不是那么容易解释的。这些单位可能看起来很熟悉,但是您正在消除差异。你不能说 RMSE 值为 10 就意味着你平均差了 10 个单位,尽管大多数人都是这么想的。至少,我以前是这样的。😉

例子

再次回到我们的示例数据集:

RMSE 是 0.48。实际 y 值的平均值为 2.2。总之,这些信息告诉我们,这个模型可能介于伟大和可怕之间。在没有更多背景的情况下,很难对这个 RMSE 统计做太多。😐

结果

对于评估来说,RMSE 是一个不完美的统计,但它非常普遍。如果你很在意惩罚大的错误,这是一个不错的选择。当超参数调整或批量训练深度神经网络时,这是一个很好的损失度量选择。

资料来源:pixabay.com

绝对平均误差

平均绝对误差(MAE)是误差绝对值的平均值。

公式和代码

让我们直接进入数学方程式:

(1 / n) * (∑ |y - ŷ|)

在代码中:

np.average(np.abs(y_true - y_pred))

用语言

  1. 从实际 y 值中减去预测值
  2. 取每个误差的绝对值
  3. 合计它们
  4. 取平均值

以下是如何使用 scikit-learn 函数获得 MAE:

from sklearn.model_selection import mean_absolute_errormean_absolute_error(y_actual, y_predicted, squared=False)

解释

MAE 在概念上是回归问题最简单的评估标准。它回答了这样一个问题,“你的预测平均偏差了多少?”

这些单位有直观的意义。是啊!🎉

例如,假设您正在预测房屋销售价格,而测试集中的平均实际销售价格是$500,000。10,000 美元的平均误差意味着该模型的预测误差平均为 10,000 美元。那还不错!😀

与 RMSE 分数不同,糟糕的预测不会导致不成比例的高 MAE 分数。

MAE 将总是比 RMSE 更接近于 0(或相同)。

请注意,计算 RMSE 作为具有训练循环的模型的优化度量比计算 MAE 更快。

例子

最后一次转向我们的示例数据集:

平均汇率为 0.37。这些预测与平均值 2.2 相差 0.37。我能很快理解这句话。😀

RMSE 是 0.48,而 R 是 0.71。

结果

MAE 是最简单的评估指标,也最容易解释。如果你不想让一些遥远的预测压倒许多接近的预测,这是一个很好的度量标准。如果你想惩罚那些离目标很远的预测,这不是一个好的选择。

资料来源:pixabay.com

包装

那么,您应该使用哪个指标呢?总的来说,建议你三个都报!🚀

r 让评估性能的人对您的模型的性能有一目了然的了解。这绝对值得报道。

RMSE 不太直观理解,但非常普遍。它惩罚了非常糟糕的预测。它也是优化模型一个很好的损失度量,因为它可以快速计算。这值得报道。

这篇文章让我对梅产生了新的敬意。理解并按比例对待所有预测误差是很简单的。我会在大多数回归问题评估中强调这一点。

不同意?在推特上告诉我。👍

如果您想了解分类问题的度量标准,我在这里写了相关内容。

我希望你喜欢这篇流行的 Python 数据科学包指南。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。😀

我撰写关于 PythonSQLDocker 以及其他技术主题的文章。如果你对这些感兴趣,请注册我的邮件列表,那里有很棒的数据科学资源,点击这里阅读更多帮助你提高技能的内容。👍

资料来源:pixabay.com

报道愉快!⚖️

哪张脸是真的?应用 StyleGAN 来创造假的人

原文:https://towardsdatascience.com/which-face-is-real-c63ce568efd5?source=collection_archive---------60-----------------------

生成模型旨在学习和理解数据集的真实分布,并使用无监督学习从中创建新数据。这些模型(如 StyleGAN)有好有坏,因为很难理解某些概率分布的复杂性。

为了绕过这些路障,对抗性网络框架被创建,由此生成模型与对手对抗:一个学习确定样本是来自模型分布还是数据分布的判别模型。

生成模型通过使随机噪声通过多层感知器来生成样本,而判别模型也是多层感知器。我们把这种情况称为对抗性网络。

介绍这个对抗性框架的论文可以在这里找到,还有用于框架的代码。

哪张脸是真的?

哪张脸是真实的?是由华盛顿大学杰文·韦斯特卡尔·博格斯特伦开发的,作为呼叫扯淡项目的一部分。

“电脑不错,但你的视觉处理系统更好。如果你知道要找什么,你一眼就能认出这些假货——至少目前是这样。用于生成它们的硬件和软件将不断改进,人类在伪造和检测的军备竞赛中落后可能只需要几年时间。”—杰文·韦斯特和卡尔·博格斯特伦

你如何区分这些图像?

差异主要体现在 6 个方面:

水渍

  • 该算法产生的闪亮斑点看起来有点像旧照片上的水斑。

水渍

头发

  • 不连续的发束、太直的头发或太多条纹将是生成头发时的常见问题。

不对称

  • 一个常见的问题是不对称。通常框架会在左边采用一种风格,在右边采用另一种风格,或者在一边有一个旅行者风格的装饰,而在另一边没有。其他时候,框架会弯曲或参差不齐。此外,面部毛发不对称、左耳和右耳不同的耳环以及左右两侧不同形式的衣领或织物也可能存在。

不对称

背景问题

  • 图像的背景可能表现为奇怪的状态,如模糊或畸形的物体。这是因为神经网络是在人脸上训练的,对图像的背景给予的强调较少。

背景问题

荧光渗色

  • 荧光色有时会从背景渗入头发或面部。观察者可能会误认为这是有色头发。

荧光出血

牙齿(tooth 的复数)

  • 牙齿也很难渲染,可能会呈现出奇怪的形状,不对称,或者对于那些可以识别牙齿的人来说,有时图像中会出现三颗门牙。

牙齿

测试 StyleGAN 算法

StyleGAN 的所有代码都在 stylegan 库中开源。它给出了如何自己运行 styleGAN 算法的细节。因此,让我们开始分享一些基本的系统要求。

系统需求

  • Linux 和 Windows 都受支持,但是出于性能和兼容性的原因,我们强烈推荐 Linux。
  • 64 位 Python 3.6 安装。我们建议使用 numpy 1.14.3 或更新版本的 Anaconda3。
  • 支持 GPU 的 TensorFlow 1.10.0 或更新版本。
  • 一个或多个至少 11GB DRAM 的高端 NVIDIA GPUs。我们推荐 8 特斯拉 V100 GPUs 的英伟达 DGX-1。
  • NVIDIA 驱动 391.35 或更新,CUDA 工具包 9.0 或更新,cuDNN 7.3.1 或更新。

pretrained_example.py 中给出了一个尝试 styleGAN 预训练示例的最小示例。它按如下方式执行:

> python pretrained_example.py

Downloading https://drive.google.com/uc?id=1MEGjdvVpUsu1jB4zrXZN7Y4kBBOzizDQ .... done

Gs                              Params OutputShape WeightShape

---                             --- --- ---

latents_in                      - (?, 512) -

...

images_out                      - (?, 3, 1024, 1024) -

---                             --- --- ---

Total                           26219627

Once you execute ‘python pretrained_example.py’, type in ‘ls results’ to see the results.

> ls results

example.png # https://drive.google.com/uc?id=1UDLT_zb-rof9kKH0GwiJW_bS9MoZi8oP

准备用于训练的数据集

训练和评估脚本对存储为多分辨率 TFRecords 的数据集进行操作。每个数据集由一个目录表示,该目录包含不同分辨率的相同图像数据,以实现高效的流式传输。有一个单独的*。tfrecords 文件,如果数据集包含标签,它们也存储在一个单独的文件中。默认情况下,脚本期望在数据集/ / - 找到数据集。tfrecords 目录可以通过编辑 config.py 来改变:

result_dir = 'results'

data_dir = 'datasets'

cache_dir = 'cache'

要获取 FFHQ 数据集(datasets/ffhq),请参考 Flickr-Faces-HQ 库

要获取 CelebA-HQ 数据集(datasets/celebahq),请参考渐进式 GAN 库

要获得其他数据集,包括 LSUN,请查阅相应的项目页面。可以使用提供的 dataset_tool.py 将数据集转换为多分辨率 TFRecords:

> python dataset_tool.py create_lsun datasets/lsun-bedroom-full ~/lsun/bedroom_lmdb --resolution 256

> python dataset_tool.py create_lsun_wide datasets/lsun-car-512x384 ~/lsun/car_lmdb --width 512 --height 384

> python dataset_tool.py create_lsun datasets/lsun-cat-full ~/lsun/cat_lmdb --resolution 256

> python dataset_tool.py create_cifar10 datasets/cifar10 ~/cifar10

> python dataset_tool.py create_from_images datasets/custom-dataset ~/custom-images

训练 StyleGAN 网络

建立数据集后,您可以按如下方式训练自己的 StyleGAN 网络:

  1. 编辑 train.py 通过取消注释或编辑特定行来指定数据集和训练配置。
  2. 使用 python train.py 运行训练脚本。
  3. 结果被写入一个新创建的目录 results/ -
  4. 培训可能需要几天(或几周)才能完成,具体取决于配置。

默认情况下,train.py 配置为使用 8 个 GPU以 1024×1024 分辨率为 FFHQ 数据集训练最高质量的 StyleGAN(表 1 中的配置 F)。

预期 StyleGAN 培训时间

下面你会发现 NVIDIA 报告的 train.py 脚本(在 stylegan 存储库中可用)在 Tesla V100 GPU 上针对 FFHQ 数据集(在 stylegan 存储库中可用)的默认配置的预期训练时间。

斯泰勒根训练时间

StyleGAN:将所有这些结合在一起

这款令人惊叹的应用背后的算法是英伟达的 Tero Karras、Samuli Laine 和 Timo Aila 的创意,并将其命名为 StyleGAN 。该算法是基于 Ian Goodfellow 及其同事对一般敌对网络(GAN)的早期研究。

创成式模型有一个局限性,就是很难从照片上控制面部特征等特征。NVIDIA 的 StyleGAN 是对这一限制的修复。该模型允许用户调整可以控制照片差异的超参数。

StyleGAN 通过在每个卷积层向图像添加样式来解决照片的可变性。这些风格代表一个人的照片的不同特征,例如面部特征、背景颜色、头发、皱纹等。该模型生成两个图像 A 和 B,然后通过从 A 中提取低级特征并从 B 中提取其余特征来组合它们。在每个级别,使用不同的特征(样式)来生成图像:

  • 粗略风格(分辨率在 4 到 8 之间)——姿势、头发、脸、形状
  • 中等风格(分辨率在 16 到 32 之间)——五官、眼睛
  • 精细样式(分辨率在 64 到 1024 之间)- 颜色方案

英伟达的神经网络

你以前测试过 StyleGAN 吗?还是你第一次?请在下面的评论区告诉我们。对于任何技术或框架,我们总是从社区中寻找新的和创造性的方法。

GANs 和 StyleGAN 的其他有用资源

你应该使用哪种版本的 BERT 来完成你的 QA 任务?

原文:https://towardsdatascience.com/which-flavor-of-bert-should-you-use-for-your-qa-task-6d6a0897fb24?source=collection_archive---------27-----------------------

问答用 BERT 模型的选择和基准测试指南

埃文·丹尼斯在 Unsplash 上的照片

由于大量的开源自然语言处理库、精选数据集和迁移学习的力量,制作智能聊天机器人从未如此简单。用 Transformers 库构建一个基本的问答功能可以像这样简单:

from transformers import pipeline# Context: a snippet from a Wikipedia article about Stan Lee
context = """
    Stan Lee[1] (born Stanley Martin Lieber /ˈliːbər/; December 28, 1922 - November 12, 2018) was an American comic book 
    writer, editor, publisher, and producer. He rose through the ranks of a family-run business to become Marvel Comics' 
    primary creative leader for two decades, leading its expansion from a small division of a publishing house to
    multimedia corporation that dominated the comics industry.
    """nlp = pipeline('question-answering')
result = nlp(context=context, question="Who is Stan Lee?")

这是输出结果:

{'score': 0.2854291316652837,
 'start': 95,
 'end': 159,
 'answer': 'an American comic book writer, editor, publisher, and producer.'}

嘣!有用!

然而,如此低的信心分数有点令人担忧。稍后,当我们谈到 BERT 检测不可能的问题和不相关的上下文的能力时,您会看到这是如何发挥作用的。

但是,花一些时间为您的任务选择正确的模型将确保您从对话代理那里获得尽可能好的开箱即用性能。您对语言模型和基准数据集的选择将决定您的聊天机器人的性能。

BERT(变压器的双向编码表示)模型在复杂的信息提取任务中表现非常好。他们不仅能捕捉单词的意思,还能捕捉上下文。在选择模型(或满足于默认选项)之前,您可能希望评估候选模型的准确性和资源(RAM 和 CPU 周期),以确保它确实符合您的预期。在本文中,您将看到我们如何使用斯坦福问答数据集(SQuAD) 对我们的 QA 模型进行基准测试。你可能想使用许多其他好的问答数据集,包括微软的 NewsQACommonsenseQAComplexWebQA 以及许多其他数据集。为了最大限度地提高应用程序的准确性,您需要选择一个基准数据集来代表您在应用程序中预期的问题、答案和上下文。

拥抱脸变形金刚库有一个庞大的预训练模型目录,用于各种任务:情感分析、文本摘要、释义,当然还有问题回答。我们从可用的模型库中选择了几个候选问答模型。你瞧,他们中的许多人已经在阵容数据集中进行了微调。厉害!以下是我们将要评估的几个小队微调模型:

  • 蒸馏车间
  • Bert-large-uncased-whole-word-masking-fine tuned-squad
  • ktrapeznikov/Albert-xlarge-v2-squad-v2
  • MRM 8488/Bert-tiny-5-fine tuned-squad v2
  • twmkn 9/艾伯特基地 v2 小队 2

我们用我们选择的模型对两个版本的 SQuAD(版本 1 和版本 2)进行了预测。它们之间的区别在于,SQuAD-v1 只包含可回答的问题,而 SQuAD-v2 也包含不可回答的问题。为了说明这一点,让我们看看下面来自 SQuAD-v2 数据集的示例。问题 2 的答案不可能从维基百科给出的上下文中得出:

问题 1: “诺曼底位于哪个国家?”

问题 2: “谁在 1000 年和 1100 年给诺曼底命名”

上下文: 《诺曼人(Norman:Nourmands;法语:诺曼第人;拉丁语:Normanni)是在 10 世纪和 11 世纪把他们的名字给法国的诺曼底地区的人。他们是北欧海盗的后裔(“Norman”来源于“Norseman”),这些来自丹麦、冰岛和挪威的袭击者和海盗在他们的首领罗洛的带领下,同意宣誓效忠西法兰克王国国王查理三世。通过几代人的同化和与本地法兰克人和罗马-高卢人的混合,他们的后代逐渐与西法兰克王国以加洛林文化为基础的文化融合。诺曼人独特的文化和种族身份最初出现在 10 世纪上半叶,并在随后的几个世纪中继续发展

我们的理想模型应该能够很好地理解上下文,从而得出答案。

让我们开始吧!

要在 Transformers 中定义模型和标记器,我们可以使用自动类。在大多数情况下,Automodels 可以从模型名称中自动派生设置。我们只需要几行代码来设置它:

from tqdm import tqdm
from transformers import AutoTokenizer, AutoModelForQuestionAnsweringmodelname = 'bert-large-uncased-whole-word-masking-finetuned-squad'tokenizer = AutoTokenizer.from_pretrained(modelname)
model = AutoModelForQuestionAnswering.from_pretrained(modelname)

我们将使用人类水平的性能作为我们的准确性目标。小组排行榜为这项任务提供了人类水平的表现,即找到准确答案的准确率为 87%,f1 分数为 89%。

你可能会问,“他们怎么知道人类的表现是什么?”以及“他们在谈论什么人类?”那些斯坦福的研究人员很聪明。他们只是使用了标记小队数据集的相同众包人类。对于测试集中的每个问题,他们让多个人提供备选答案。对于人类评分,他们只留下其中一个答案,并使用他们用来评估机器模型的相同文本比较算法,检查它是否与其他任何答案匹配。这个“漏掉一个人”数据集的平均准确度决定了机器要争取的人类水平分数。

为了在我们的数据集上运行预测,首先我们必须将小队下载的文件转换成计算机可解释的特征。幸运的是,Transformers 库已经有了一套方便的函数来做这件事:

from transformers import squad_convert_examples_to_features
from transformers.data.processors.squad import SquadV2Processorprocessor = SquadV2Processor()
examples = processor.get_dev_examples(path)
features, dataset = squad_convert_examples_to_features(
    examples=examples,
    tokenizer=tokenizer,
    max_seq_length=512,
    doc_stride = 128,
    max_query_length=256,
    is_training=False,
    return_dataset='pt',
    threads=4, # number of CPU cores to use
)

我们将使用 PyTorch 及其 GPU 功能(可选)进行预测:

import torch
from torch.utils.data import DataLoader, SequentialSamplereval_sampler = SequentialSampler(dataset)
eval_dataloader = DataLoader(dataset, sampler=eval_sampler, batch_size=10)all_results = [] def to_list(tensor):
    return tensor.detach().cpu().tolist()for batch in tqdm(eval_dataloader):
    model.eval()
    batch = tuple(t.to(device) for t in batch) with torch.no_grad():
        inputs = {
            "input_ids": batch[0],
            "attention_mask": batch[1],
            "token_type_ids": batch[2]
        } example_indices = batch[3] outputs = model(**inputs)  # this is where the magic happens for i, example_index in enumerate(example_indices):
            eval_feature = features[example_index.item()]
            unique_id = int(eval_feature.unique_id)

重要的是,模型输入应该针对 DistilBERT 模型(如distilbert-base-cased-distilled-squad)进行调整。我们应该排除“token_type_ids”字段,因为与 BERT 或 ALBERT 相比,DistilBERT 实现有所不同,以避免脚本出错。其他一切都将保持不变。

最后,为了评估结果,我们可以应用 Transformers 库中的squad_evaluate()函数:

from transformers.data.metrics.squad_metrics import squad_evaluateresults = squad_evaluate(examples, 
                         predictions,
                         no_answer_probs=null_odds)

以下是由 squad_evaluate 生成的示例报告:

OrderedDict([('exact', 65.69527499368314),
             ('f1', 67.12954950681876),
             ('total', 11873),
             ('HasAns_exact', 62.48313090418353),
             ('HasAns_f1', 65.35579306586668),
             ('HasAns_total', 5928),
             ('NoAns_exact', 68.8982338099243),
             ('NoAns_f1', 68.8982338099243),
             ('NoAns_total', 5945),
             ('best_exact', 65.83003453213173),
             ('best_exact_thresh', -21.529870867729187),
             ('best_f1', 67.12954950681889),
             ('best_f1_thresh', -21.030719757080078)])

现在,让我们比较两个基准数据集(SQuAD-v1 和 SQuAD-v2)生成的预测的精确答案准确度分数(“精确”)和 f1 分数。所有模型在没有否定的数据集(SQuAD-v1)上都表现得更好,但我们确实有一个明显的赢家(ktrapeznikov/albert-xlarge-v2-squad-v2)。总的来说,它在两个数据集上都表现得更好。另一个好消息是,我们为这个模型生成的报告与作者发布的报告完全匹配。精确度和 f1 与人类水平的性能稍有差距,但对于像 SQuAD 这样具有挑战性的数据集来说,这仍然是一个很好的结果。

表 1:v1 和 v2 组 5 个模型的准确度分数

我们将在下表中比较 SQuAD-v2 预测的完整报告。看起来ktrapeznikov/albert-xlarge-v2-squad-v2在两个任务上做得几乎一样好:(1)识别可回答问题的正确答案,以及(2)剔除可回答问题。有趣的是,bert-large-uncased-whole-word-masking-finetuned-squad在第一项任务(可回答的问题)中提供了一个显著(大约 5%)的预测准确性提升,但在第二项任务中完全失败。

表 2:不可能的问题的单独准确度分数

我们可以通过调整最佳 f1 分数的零阈值来优化模型,以更好地识别无法回答的问题。记住,最佳 f1 阈值是由 squad_evaluate 函数(best_f1_thresh)计算的输出之一。下面是当我们应用来自 SQuAD-v2 报告的best_f1_thresh时,SQuAD-v2 的预测指标是如何变化的:

表 3:调整后的准确度分数

虽然这种调整有助于模型更准确地识别无法回答的问题,但这是以牺牲已回答问题的准确性为代价的。这种权衡应该在您的应用程序环境中仔细考虑。

让我们用变形金刚 QA 管道,带着自己的几个问题,试驾三款最好的车型。我们从维基百科一篇关于计算语言学的文章中挑选了下面这段话作为一个看不见的例子:

context = '''
Computational linguistics is often grouped within the field of artificial intelligence 
but was present before the development of artificial intelligence.
Computational linguistics originated with efforts in the United States in the 1950s to use computers to automatically translate texts from foreign languages, particularly Russian scientific journals, into English.[3] Since computers can make arithmetic (systematic) calculations much faster and more accurately than humans, it was thought to be only a short matter of time before they could also begin to process language.[4] Computational and quantitative methods are also used historically in the attempted reconstruction of earlier forms of modern languages and sub-grouping modern languages into language families.
Earlier methods, such as lexicostatistics and glottochronology, have been proven to be premature and inaccurate. 
However, recent interdisciplinary studies that borrow concepts from biological studies, especially gene mapping, have proved to produce more sophisticated analytical tools and more reliable results.[5]
'''
questions=['When was computational linguistics invented?',
          'Which problems computational linguistics is trying to solve?',
          'Which methods existed before the emergence of computational linguistics ?',
          'Who invented computational linguistics?',
          'Who invented gene mapping?']

请注意,根据给定的上下文,最后两个问题是不可能回答的。以下是我们从测试的每个模型中获得的结果:

Model: bert-large-uncased-whole-word-masking-finetuned-squad
-----------------
Question: When was computational linguistics invented?
Answer: 1950s (confidence score 0.7105585285134239)

Question: Which problems computational linguistics is trying to solve?
Answer: earlier forms of modern languages and sub-grouping modern languages into language families. (confidence score 0.034796690637104444)

Question: What methods existed before the emergence of computational linguistics?
Answer: lexicostatistics and glottochronology, (confidence score 0.8949566496998465)

Question: Who invented computational linguistics?
Answer: United States (confidence score 0.5333964470000865)

Question: Who invented gene mapping?
Answer: biological studies, (confidence score 0.02638426599066701)

Model: ktrapeznikov/albert-xlarge-v2-squad-v2
-----------------
Question: When was computational linguistics invented?
Answer: 1950s (confidence score 0.6412413898187204)

Question: Which problems computational linguistics is trying to solve?
Answer: translate texts from foreign languages, (confidence score 0.1307672173261354)

Question: What methods existed before the emergence of computational linguistics?
Answer:  (confidence score 0.6308010582306451)

Question: Who invented computational linguistics?
Answer:  (confidence score 0.9748902345310917)

Question: Who invented gene mapping?
Answer:  (confidence score 0.9988990117797236)

Model: mrm8488/bert-tiny-5-finetuned-squadv2
-----------------
Question: When was computational linguistics invented?
Answer: 1950s (confidence score 0.5100432430158293)

Question: Which problems computational linguistics is trying to solve?
Answer: artificial intelligence. (confidence score 0.03275686739784334)

Question: What methods existed before the emergence of computational linguistics?
Answer:  (confidence score 0.06689302592967117)

Question: Who invented computational linguistics?
Answer:  (confidence score 0.05630986208743849)

Question: Who invented gene mapping?
Answer:  (confidence score 0.8440988190788303)

Model: twmkn9/albert-base-v2-squad2
-----------------
Question: When was computational linguistics invented?
Answer: 1950s (confidence score 0.630521506320747)

Question: Which problems computational linguistics is trying to solve?
Answer:  (confidence score 0.5901262729978356)

Question: What methods existed before the emergence of computational linguistics?
Answer:  (confidence score 0.2787252009804586)

Question: Who invented computational linguistics?
Answer:  (confidence score 0.9395531361082305)

Question: Who invented gene mapping?
Answer:  (confidence score 0.9998772777192002)

Model: distilbert-base-cased-distilled-squad
-----------------
Question: When was computational linguistics invented?
Answer: 1950s (confidence score 0.7759537003546768)

Question: Which problems computational linguistics is trying to solve?
Answer: gene mapping, (confidence score 0.4235580072416312)

Question: What methods existed before the emergence of computational linguistics?
Answer: lexicostatistics and glottochronology, (confidence score 0.8573431178602817)

Question: Who invented computational linguistics?
Answer: computers (confidence score 0.7313878935375229)

Question: Who invented gene mapping?
Answer: biological studies, (confidence score 0.4788379586462099)

如您所见,很难根据单个数据点来评估模型,因为结果遍布整个地图。虽然每个模型都给出了第一个问题的正确答案(“计算语言学是什么时候发明的?”),其他问题被证明更难。这意味着,即使我们最好的模型也可能需要在自定义数据集上再次微调,以进一步改进。

带走:

  • 开源预训练(和微调!)模型可以启动你的自然语言处理项目。
  • 在做任何事情之前,如果可能的话,试着复制作者报告的原始结果。
  • 对你的模型进行准确性基准测试。即使是在完全相同的数据集上进行微调的模型,其性能也可能大不相同。

哪个是最好的 NLP 库?

原文:https://towardsdatascience.com/which-is-the-best-nlp-d7965c71ec5f?source=collection_archive---------27-----------------------

通用 NLP 库的实时评估(带代码片段)

艾拉·迪恩在 Unsplash 上的照片

自从我开始从事 NLP(自然语言处理)工作以来,我一直想知道哪一个是最好的 NLP 库,可以满足我们大多数常见的 NLP 需求。虽然确实不存在一刀切的做法,库的选择将取决于手头的任务,但我仍然很好奇,如果不同的库针对一个非常简单的任务进行基准测试,它们会如何进行比较。

考虑到这一点,我戴上开发人员的帽子,开始使用各种库编写 python 代码,并针对一个非常常见的任务对它们进行评估。为了简单起见,我决定使用 Twitter 文本分类问题进行评估。今天最常见的 NLP 库是 NLTK、Spacy、WordBlob、Gensim,当然还有使用 LSTM(长短期记忆)或 GRU(门控循环单元)细胞的深度神经网络架构。

问题陈述

我使用的数据集由一组 Twitter 消息组成。一些推文被贴上了种族主义的标签,而另一些则没有。这是一个经典的基于监督学习的二分类问题。我们的工作是基于不同的库创建模型,并使用它们将以前未见过的文本分类为种族主义或非种族主义。

以下是一些可用的推文:

标签 1 表示该推文是种族主义的,标签 0 表示不是。

为了简洁起见,我将只关注代码的关键部分。完整代码,请随意访问我的 GitHub 机器学习库。因为我已经清理了数据集并执行了 EDA(探索性数据分析),所以我也不会在这里讨论这些细节。

这里我将重点介绍五个不同的库— NLTKWordBlob 、CNN 的 Spacy、document vectorsSpacy,以及最后一个具有双向 LSTM 单元的深度神经网络模型。**

我将使用 ROC-AUC 得分和F1-得分作为我的评估指标。

所以让我们开始吧。

NLTK

让我们从 NLTK 包开始。在这里,我们使用 NLTK 库对 tweets 进行标记化和词条化,使用 Gensim 的 Word2Vec 模型创建单词向量。最后使用 XGBoost 分类器模型进行训练和推理。下面是包含代码相关部分的代码片段

使用这种技术,我能够获得 ROC-AUC 分数为 0.8 和 F1 分数为 0.68

文本 Blob

TextBlob 是一个初学者友好的 NLP 库,提供了很多很酷的特性。它还提供了内置的文本分类器。然而,我发现 TextBlob 比我用过的其他库要慢很多。

出于我们的目的,我们将使用 TextBlob 的内置 DecisionTreeClassifier 。下面是代码片段:

使用这种技术,我能够得到 ROC-AUC 分数为 0.68 和 F1 分数为 0.46

CNN 的空间

Spacy 是 NLP 最受欢迎和使用最广泛的库之一,提供了非常强大的特性。它提供了一个名为 textcat 的内置文本分类器,可以作为默认的管道组件使用。 textcat 组件支持 BOW (文字袋)、S imple-CNN (卷积神经网络)和 Ensemble 架构。

在我们的例子中,我们将使用简单 cnn 架构。

在这种情况下,我的 ROC-AUC 得分为 0.78 ,F1 得分为 0.66

文档向量空间

在这个例子中,我们将继续使用 Spacy,但不是使用它的内置文本分类器,而是使用 Spacy 来生成文档向量,然后将这些向量提供给 XGBoost 分类器。让我们看看这是否能提高我们的分数。

这里我们得到的 ROC-AUC 分数为 0.8 和 F1-分数为 0.64

具有 LSTM 细胞的深度神经网络

最后,我们将使用双向 LSTM 细胞创建一个神经网络模型。我们将使用 TensorFlow 的 Keras 库,并使用它的特性,如标记化和序列填充

这里我们得到 ROC-AUC 分数为 0.82 和 F1 分数为 0.41

结论

现在让我们来比较一下分数

模型的 ROC_AUC 得分非常相似。看看 F1 的分数,似乎 NLTK 和 Spacy 最适合这份工作。然而,使用各种优化技术和超参数调整,尤其是基于 LSTM 的模型,绝对有可能进一步改进模型。

以上所有例子的完整代码都可以在我的 GitHub 机器学习库中找到。

经过预先训练的模特最近引起了很大的轰动。随着最近 OpenAI 的 GPT3 的发布,兴奋程度达到了历史最高水平。我很好奇他们会如何执行我们简单的文本分类任务。

这就是我接下来要尝试的。请继续关注这个空间,了解更多信息。

我应该为我的 Python 仪表板使用哪个库?

原文:https://towardsdatascience.com/which-library-should-i-use-for-my-dashboard-c432726a52bf?source=collection_archive---------11-----------------------

从笔记本中的早期原型,到生产

谈到数据可视化,有许多可能的工具 Matplotlib、Plotly、Bokeh…哪一个适合我在笔记本电脑中的短期目标,哪一个是长期生产中的好选择?生产是什么意思?

现在你已经有了一个很好的机器学习模型,或者你已经完成了一些数据挖掘或分析,你需要呈现和推广这个惊人的工作。最初,您可能会重复使用一些笔记本来制作一些图表……但很快,同事或客户就会要求访问数据,或者要求其他视图或参数。你该怎么办?应该使用哪些工具和库?对于我工作的所有阶段,有没有一个适合所有人的解决方案?

数据可视化的范围非常广泛,从用简单的图表显示数据到包含在报告中,再到复杂的交互式仪表板。第一个是任何了解 Excel 的人都可以接触到的,而后者更像是一个软件产品,可能需要完整的软件开发周期和方法。

在这两种极端情况之间,数据科学家面临许多并非微不足道的选择。这篇文章提供了这个过程中会遇到的一些问题,以及一些提示和答案。选择的起点是 Jupiter 笔记本中的 Python,目标是生产中的 Web 仪表板。

到目标 Pixabax

我需要哪个图表类型的库?

获得正确的图表类型始终是我们考虑的第一个问题。

你对数据可视化有一个很棒的新想法,你的老板喜欢旭日图,但是这对于你正在使用的图表库可行吗?

Python 中的主流开源图表库 MatplotlibSeabornPlotlyBokeh ,或多或少支持同一组图表类型。它们还支持像素矩阵,允许像显示单词云这样的扩展。

以下是从 word cloud Python 库文档中绘制 Word Cloud 的示例:

import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud
​
text = "square"
x, y = np.ogrid[:300, :300]
​
mask = (x - 150) ** 2 + (y - 150) ** 2 > 130 ** 2
mask = 255 * mask.astype(int)
​
wc = WordCloud(background_color="white", repeat=True, mask=mask)
wc.generate(text)
​
plt.axis("off")
plt.imshow(wc, interpolation="bilinear")
plt.show()

网络图

网络图是一个特定的类别,上面列出的库本身并不处理它。用于网络的主要 Python 库是 NetworkX) 。默认情况下,NetworkX 使用 Matplotlib 作为绘图的后端。Graphviz (Pygraphviz)是事实上的标准图形绘制库,可以与 NetworkX 耦合。用相当多的几行代码,你也可以用 Plotly 来画 graph⁴.NetworkX 和散景的整合也是 documented⁵.

地理图

地理位置信息和地图也是数据可视化的一个特定子领域。绘制地图面临许多挑战,其中包括:

  • 处理大而复杂的轮廓(例如国家边界)
  • 根据缩放显示更多或更少的信息,这也称为细节层次。这种影响同时也影响了图形的可读性,以及转化为加载延迟和内存占用的复杂性
  • 地理坐标的处理,即从非欧几里得空间到 2D 欧几里得空间的单个或多个投影(例如,具有给定 UTM 区的 UTM 的经纬度)
  • 多种文件格式的信息可用性,即使存在事实上的标准,如 GeoJSON 和 Shape-file

根据所选的绘图库,您可能需要做少量或大量的预处理。处理地理坐标的常见开源库是 Proj ,以及 GDAL ,用于处理文件格式以及从格式或坐标到其他上下文的转换。

Matplotlib 不直接支持绘制地图,它依赖于像素矩阵(光栅图像),如 gallery⁶.中所述但这是一个 pis-aller ,你不希望这样做,但如果你的唯一目标是一个静态图像。

Plotly 正在演示基于 Mapbox 的 plots⁷地图。许多功能是可用的,但至少有一个功能是缺失的,即散点图中细节层次的管理。

Bokeh 对地图有一些支持,包括谷歌 maps⁸的集成,但它似乎很粗糙。

带有区域(等高线)、标记簇、悬停信息的地图,由作者用 leav 创建

leaf是包装leafJavascript 库的 Python 库。传单用于许多合作和商业网站,例如开放街道地图。Folium 在开放数据上绘制地图非常有效。

地理数据操作的开源参考是来自 OSGeo 的 QGIS 。这是一个桌面应用程序,但它包括一个 Python 控制台,也可以直接使用 Pyqgis API⁹.

数据帧

Pandas 及其数据框架是 Python 中数据科学的必备工具。对图表创建和仪表板有什么影响?

一方面,熊猫数据帧和系列有一个情节 API。默认情况下,它依赖 Matplotlib 作为后端。然而,Plotly 作为熊猫的图形后端是可用的⁰.Github 项目也支持散景。

另一方面,熊猫图可能不符合您的要求,您想知道除了使用列和系列作为向量之外,如何在图中使用数据框架。Plotly Express 具有这种支持面向列的数据的能力。

最后一招,d3.js

如果这些库和它们的扩展都不能处理你正在寻找的图表,那么你可以切换到 d3.js ,它是浏览器的基本图表库。这意味着你将离开 Python 的世界,进入 Javascript 的领域。可能性和定制是巨大的,如示例图库所示。然而,您将需要处理其他库中提供的图形的许多方面:轴、图例、交互性…

用 Matplotly 和 Seaborn 设计的散布矩阵

如何构建包含多个图表的视图?

在 dataviz 的设计中,图表的布局或组成需要多个图表来显示一些特性。你可能已经喜欢上了 Matplotlib 的支线剧情的优缺点,从奇怪的命令开始,比如“ plt.subplot(1,2,1)”或者更奇怪的等价命令“ plt.subplot(121)”。如果这足以实现您的目标,我还是建议使用替代的、更简洁的“PLT . subplots()”API,它返回一个数字和一个轴数组。无论如何,你可能会感到不仅交互性受到限制(这将在下一节中讨论),而且布局功能也受到限制。

布局的增强

Matplotlib 允许不均匀的宽度和高度,使用调用 Figure.add_subplots 方法,如"fig.add_subplot(3, 1, (1, 2))"制作一个跨越图形⁴.上 2/3 的子图 Seaborn 引入了一个增强功能,即散射矩阵⁵.

Plotly 允许类似的能力,包括不均匀的子图。然而,我发现 API 相当有限。例如,不能设置子图标题的字体大小或共享图例。Bokeh 在⁶.也有类似能力

Plotly,Express API,更进一步,用边缘概率图作为直方图或⁷,还有一个同步的概览-详细图表,称为“范围滑块⁸".”这将我们引向图形的交互性,这将在下一节中详细介绍。

前进的道路

但是如果这些布局助手不足以达到我的目的呢?可能的答案有很多,从 Plotly Dash 解决方案到完整的 HTML 布局或使用 d3.js 的 SVG 定制设计。

Plotly Dash 提出了一个中间解决方案,在这个方案中,你可以坚持使用 Python,但是可以生成一些比绘图库更复杂、更具交互性的仪表板。尽管如此,它要求你有一些基本的 HTML 知识,并且迟早会深入到层叠样式表(CSS)中。

使用 Dash、Plotly 和 Dash-Bootstrap-Components 的仪表板布局和几个绘图和 HTML 元素

我如何与我的图表互动?

你对图表非常满意,但它看起来非常静态,甚至没有缩放!

交互性是如此多不同的东西。它从缩放和平移等常见操作开始。下一步是同步图表:在共享一个轴的几个图表上同时应用缩放和平移。你也可能对两幅图上的同步选择感兴趣,也称为刷图(例如在散景⁹).)Matplolib 对所有的渲染引擎都有这样的交互性,但是在笔记本⁰.中然而,有一个基于 Matplotlib 的解决方案, mpld3 正在处理这个问题,并可能提供您需要的一切。然而,趋势是使用更新的库,如 Plotly 或 Bokeh,它们在笔记本中“开箱即用”。

然后是动态注释。它们包括从鼠标位于标记上时的悬停信息到线条图高亮显示。关于 hover,无论使用什么库(带 Mpld3 和插件的 Matplotlib,Plotly,Bokeh ),都意味着在每个标记上附加一个 HTML 文档 div,可能还有一些 CSS。

2D 特征平面图中 MNIST 数字(784 像素)的 UMAP 投影散景图,带有包含原始图像作者的悬停信息

更复杂的交互与过滤或查询数据有关。当过滤器修改范围时,它可以接近缩放功能(例如:时间序列的每日/每周/每月选择器),或者一系列方面的选择器,或者甚至更复杂的关联。选择器在 Plotly 中作为自定义控件提供,在 Bokeh 中作为小部件提供。

常见的绘图库提供了基本的交互功能,直到创建一些小部件,但是,对于高级布局,我建议直接切换到 Plotly Dash,它更加通用。

我的 dataviz 仪表盘渲染流畅吗?

仪表板越复杂或数据越大,处理的时间就越长,因此呈现的时间也就越长。等待几秒钟来查看静态图可能没问题。当图形与小部件和控件交互时,等待超过 1 秒是不允许的。

如果流动性消失了,你有四个主要的解决方案,并且越来越复杂:

  • 用更少的绘图和控件简化仪表板。这可能没问题,但是你应该首先考虑为什么需要这样的复杂性?
  • 简化数据,即显示更少的数据或更小的粒度。这可以在特征和准确性之间提供良好的折衷。这将导致下一个解决方案…
  • 离线预处理数据,以预组装仪表板中显示的数据。这可能意味着存储新的序列或新的表,最终导致与数据管理相关的其他问题。最后,您将进行更多的数据工程,并且可能会因为两个数据、太多的表而陷入死胡同。这个死胡同的解决方案是更多的数据工程和…
  • 专用服务器中的在线处理和 API 的设计。

一个带有 API 的服务器不是你首先想到的,但是你最终会比你想象的更快地处理这个软件项目。预测比拖延更好,直到没有其他解决方案,项目的最后期限快到了。

定义 API 通常涉及几个团队和技能:数据科学家定义为什么,数据工程师定义什么,基础设施工程师定义如何,包括性能、安全性、持久性和完整性。

Plotly Dash 允许初始 API,因为它是基于 Flask 框架的。参见 Dash 文档,了解与 Flask 应用程序的集成,Flask 应用程序定义了自定义 Flask 路由,可提供数据,即 API。仍然没有适当的 API 访问管理,包括身份验证。在后一方面,Dash 是非常有限的⁴.

在开发 dataviz 的过程中,我感觉自己很快/很慢/不知道

开发和发布需要你付出多少努力?

一些工具是有效的,它们提供了预期的结果,但是效率不高,要得到结果需要花费大量的时间。例如,d3.js 被认为是一个非常强大和完整的数据可视化和图表库,但同时,它需要处理许多在更高抽象的库中默认可用的东西。

生产力不仅来自于使用正确的抽象级别,还来自于一个易于使用且有良好文档记录的 API。我想说,调查的 Python 图表库没有一个是容易掌握的。

Matplotlib 的 API 在处理轴、格式(标签)时相当复杂,它并不总是一致的,而且相当多余。例如,参见上面关于“ plt.subplot()”的注释。这不是唯一的例子,例如,有一个子例程“ plt.xlabel()”相当于 Axes 对象上的方法“ ax.set_xlabel()”。

Plotly 的 API 并不是更好,首先,您必须在两个 API 集之间进行选择:Express 集,它非常简单但有限,主要针对数据帧;以及图形对象集,它更完整,是 Express 集的补充,但没有 Express 中的一些高级功能。然后你将不得不处理那些对我来说很难理解的文件。使用 Plotly 网站内部或网络搜索引擎进行搜索很少会找到您要找的 API。您可能必须处理 JSON 中底层数据模型的文档。

Bokeh API 可能更精简,文档也更好,但是有一些奇怪的东西,比如绘制折线图和相关标记的两个单独的指令。

我真的需要一个漂亮的 web 应用程序,我应该害怕它吗?

您的仪表板是成功的,将作为产品在您的组织内部部署,供客户使用,甚至直接在互联网上公开。

作为一名数据科学家,您缺少处理这些问题和获得软件专家帮助的技能。然而,你会被问到这个开发的努力和范围是什么。这在很大程度上取决于产品化的途径、在那里使用的框架,以及到目前为止您一直使用的框架。

使用(部分)当前框架投入生产

Plotly 独立图形可以导出为静态 HTML。散景提供了一些嵌入⁵.的方案带有 Mpld3 的 Matplotlib 有一个 HTML 输出⁷.然而,这个解决方案是针对插图而不是仪表板的。

Plotly Dash 在某些情况下可能会作为主要的 Web 应用程序或嵌入式小工具投入生产。如前所述,在进入在线生产之前,您需要检查系统的安全性。关于安全性,作为一名数据设计人员,您主要需要检查您只公开了想要的数据,而不是更多。

显示巴黎地铁交通的网络和地理互动图 Data-Publica

使用单页应用程序投入生产

今天,我们使用的大多数 Web 应用程序都基于一种称为单页应用程序(SPA)的模式:应用程序在 Web 浏览器中加载一次,然后通过一些异步 API 与服务器进行交互,而无需重新加载网页。这就是我们所有人现在对一个好的 Web 应用程序的期望。

SPA 有两个独立的组件:浏览器端的 Javascript 应用程序,带有 Angular 或 React.js 之类的框架;服务器端的应用程序或服务,可以用许多框架和语言编写:Java、C#、PHP、Javascript……甚至 Python。

Dash 已经做了一部分。事实上,Dash 正在使用领先的浏览器端框架 React.js,并且在服务器端基于 Flask 和 Python。但是如上所述,你可能会达到一些极限。

除了通过 Dash 的转换,Plotly 和 Bokeh 还有另一个优势:它们在 Javascript 中也可以作为 Plotly JS (和一个 React.js 包装器包装器⁶), Bokeh JS 。事实上,Python 版本的 Plotly 是 Javascript 的包装器。这意味着给定 Python 中基于 Plotly、Dash 或 Bokeh 的一些绘图或仪表板,大多数概念和图表属性可以在等效的 Javascript 实现中重用。

结论

在这篇文章中,我们已经为数据可视化仪表板铺平了道路,从笔记本中的实验,一直到生产。我们已经看到,传统的绘图库 Matplotlib 仍然具有强大的功能,并且通常是 NetworkX 和 Pandas Dataframe 等专用库的默认后端。但 Matplolib 在集成和交互性等方面也有所落后。学习另一个框架可能是一个很好的投资,会帮助你走向生产。

提出了两种可选的框架:Plotly 和 Bokeh。两者都带来了价值,因为它们比 Matplotlib 更现代。在将仪表板投入生产时,它们都有一个领先的优势:它们基于 Javascript 绘图框架,并且大部分绘图 Python 代码可以直接翻译成 Javascript 等价物。

在走向生产的道路上,Plotly 还有另一个优势:它与 Dash 集成,Dash 是一个框架,用于在坚持使用 Python 的同时将简单的仪表板开发为单页应用程序。所需的 Javascript,包括 React 组件,以及服务器 API 都由 Dash 平滑生成。

我们还看到,作为一名数据科学家或数据可视化设计者,您应该预见诸如交互性之类的需求,以及它们可能导致开发 API 来提供数据的含义。

在“ Plotly Dash 或 React.js + Plotly.js ”中,并排比较显示了将 Dash 应用程序移植到 React.js 中的 Javascript 应用程序所需的内容,其中 Plotly.js 用于 dataviz,并由 Python 中的 Web API 提供服务。

参考

你是哪个机器学习模型?

原文:https://towardsdatascience.com/which-machine-learning-model-are-you-7ac635101d3b?source=collection_archive---------24-----------------------

对一些经典模型如何工作的轻松、诙谐、非科学的描述

也许你已经(违背了你更好的判断)在网上做了一个测试,关于你最喜欢的电视节目角色中哪一个像根据你的早餐习惯你看起来有多大,或者我个人最喜欢的你是哪种类型的鸡块。这些测验可能很有趣,但可能会让你觉得自己不是一个严肃的科学专业人士。好吧。这里有一个适合数据科学学习者的有趣的中间物:一个 ML 模型类型的目录,我将其拟人化并描述为娱乐的个性类型,这在理想情况下也可以帮助您理解每种类型的优缺点。抱歉,我是说优势和需要改进的地方。

你可能是线性回归,如果…

你有一种经典的风格(也许 BuzzFeed 说,如果你是一种字体,你就会是 Times New Roman)。你是那种老师喜欢用来做榜样的人,你可能会为此感到自豪。每当工作中的人问你问题时,你总是擅长给出详细且易于理解的答案,但有时你并不正确。你会发现人们通常很善于读懂你,并弄清楚你是如何工作的——你并不复杂,但你的简单中也有美。

不幸的是,人们可能会虐待你,不给你应得的时间和关注。而你,就你而言,倾向于对别人做很多假设。

如果…你们可能是 K 个最近的邻居

你是一个自我诊断的人。你喜欢联系他人以及牵线搭桥,当你把一个新人介绍到你的社交团体中,而他们正好融入其中时,你会很开心。你在这方面很棒,但是如果你不小心的话,平衡你所有不同的社交圈子会变得很麻烦。你的另一个优势是建立和平——如果有冲突,你会采取民主的方式,并且允许每个人投票决定团队应该做什么。

有时候,你取悦他人的倾向会让你瘫痪:不断计算和挣扎以达成一个好的决定。此外,你讨厌承认这一点,但你的一些朋友会形容你懒惰。

你可能是一个随机森林,如果…

你被选为返校节国王/王后,你是一个高成就者,并且/或者你为自己总是正确的而自豪。各种各样的人都喜欢你,你经常是聚会上的焦点。人们总是钦佩你的一点是你的灵活性——你可以迅速适应几乎任何情况,甚至在艰难的环境中表现出色。你也倾向于盖过你的弟弟妹妹

有时你的朋友抱怨他们不能完全理解你,但是在亲密的关系中,你在很大程度上能够解释你自己。然而,你高度复杂的天性迫使你有时会回避他人,并且花很多时间给自己充电、计划和做出正确的决定。

你可能是 K 意思是如果…

有时候你的生活有点混乱。你快速地从一个任务转移到另一个任务。由于你的速度,你更喜欢工作或家庭中的请求以简单易懂、标准化的格式向你提出,你可以轻松地接受。像你的好友 K 最近的邻居一样,你也喜欢能够联系朋友并将他们放在合适的社交团体中。然而,你在这方面甚至比他更好,因为你通常需要更少的信息,你可能会得到更好的结果。你的终极优势:能够在混乱中创造秩序。

你最大的弱点:与非常复杂的人打交道

总之…

我写这篇文章的目的是得到这样一个问题:“如果你是一个机器学习模型,你会是哪一个?”进行趋势分析,并最终将其列入众多顶级数据科学面试问题列表之一。此外,如果你能从中学到哪怕一点有用的东西,那也是非常棒的。

如果你认真地评论一下你认为自己低于哪个模特,我会很开心的。

你戴的是哪个面具?基于张量流和树莓 Pi 的人脸类型检测

原文:https://towardsdatascience.com/which-mask-are-you-wearing-face-mask-type-detection-with-tensorflow-and-raspberry-pi-1c7004641f1?source=collection_archive---------23-----------------------

使用右下角显示的 Raspberry Pi 4 进行实时人脸检测。(图片由作者提供)

我如何使用 TensorFlow 和 Raspberry Pi 构建一个实时面罩类型检测器来判断一个人是否戴着面罩以及他们戴的是什么类型的面罩

我使用的代码和 Google Colab 笔记本在 GitHub 上有

动机

强制戴口罩的规定在世界各地的公共场合变得越来越普遍。越来越多的科学证据支持戴口罩对减少病毒传播的有效性[ 23 ]。然而,我们也看到了一些对口罩的反弹,给执行规则的人带来了危险。在美国的一些地方,他们经常是商店的雇员,和其他人一样容易受到伤害。那么我们能让 AI 派上用场吗?

这激发了这项工作,以开发一个深度学习模型,该模型可以检测一个人是否戴着面罩,以及这个人戴着什么类型的面罩。口罩的类型与口罩的有效性有关[ 4 ]。该模型有可能被部署在当地超市或学校建筑中,以控制自动门,该自动门只对戴口罩的人开放。

当我完成 Coursera 上的深度学习专业时,我认为这是一个获得一些深度学习项目实践经验的绝佳机会,人脸面具检测是一个非常相关的话题。这篇文章主要关注从数据收集到建模训练(使用 TensorFlow 对象检测 API 和 Google Colab)以及在移动设备上部署(一个 Raspberry Pi 4)的开发流程。这不是一个循序渐进的教程,但我可以给你指出有用的资源,并提供一些设计自己的项目的技巧。

数据收集

这是一个重要但经常被忽视的步骤。俗话说“垃圾进,垃圾出”,用于训练的数据应该与目标具有相似的分布,即网络摄像头捕捉到的真实生活中带面具和不带面具的人脸。来自视频源的图像通常受相机质量和不同光线设置的影响。因此,我们的数据集不仅在不同性别、年龄组、种族、戴眼镜和不戴眼镜的人脸方面,而且在图像背景方面都应该是多样化的。

我决定用自制布套、外科口罩、n95 口罩和无口罩 4 个类(口罩类型)来训练模型。相应的标签有:

  • 自制的
  • 外科的
  • n95
  • 空的

这些图片是从 Google images 和 Upslash 上收集的。我发现批量下载图片的 chrome 插件 Fatkun 非常有用。但是,应该仔细选择图像,以确保数据集的质量和多样性。对于多少张图片才算足够,没有很好答案。对于一个小模型,我试着为每个类保存大约 200 张图片,它们应该代表模型可能遇到的子类。示例如下所示:

  • 自制的

自制面具,包括布面具或覆盖物。请注意,有些口罩覆盖整个颈部。(图片来自 Upslash。从左至右依次为莎朗·麦卡琴来源洛根·韦弗来源札克血管来源

  • 外科的

不同颜色的外科口罩。(图片来自 Upslash。从左至右依次为 H 肖来源engin akyurt来源朱里安万来源

  • n95

不同形状和颜色的 N95 口罩。肖像和侧面都包括在内。(图片来自 Upslash。从左至右依次为汉德罗沙曼来源Hiep Duong来源阿什坎·弗鲁扎尼来源

  • 空的

不同性别,不同年龄段,不同种族,不同背景的裸照。(图片来自 Upslash。从左至右由大卫托德麦卡蒂来源约瑟夫·冈萨雷斯来源蒂姆·莫斯霍尔德来源

每节课我分别收集了 247,197,184,255 张图片,总共用了~5 个小时,期间我见过那么多带面具的脸。不幸的是,戴着外科口罩和 n95 口罩的人的照片很难找到,尤其是在 3 月(疫情早期),我在搜索他们的时候。这些图像大多来自东亚国家或卫生工作者的库存照片。

建模培训

我用我的 Windows 10 笔记本电脑进行了数据预处理、测试,并将模型转换为 TensorFlow lite 版本。对于模型训练,我用的是 Google Colab 配合 Google 提供的免费 GPU。

使用 TensorFlow 对象检测 API 训练对象检测模型可分为以下主要步骤:

  1. 设置 TensorFlow 环境和工作空间

这一步可能很棘手,因为对象检测 API 还不可用于最新的 TensorFlow 版本 2.x,因此需要 TensorFlow 1.x。如果您想在本地 PC 上利用 CUDA 内核进行加速,可以使用 TensorFlow 的 GPU 版本。我发现这两个教程非常有用:

[## TensorFlow 对象检测 API 教程- TensorFlow 对象检测 API 教程文档

重要说明:本教程适用于 TensorFlow 1.14,它(在撰写本教程时)是最新的…

tensor flow-object-detection-API-tutorial . readthedocs . io](https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/index.html) [## Python 编程教程

大家好,欢迎收看关于 TensorFlow 对象检测 API 的迷你系列和介绍。该 API 可用于…

pythonprogramming.net](https://pythonprogramming.net/introduction-use-tensorflow-object-detection-api-tutorial/)

Stackoverflow 上的一些搜索可以修复 bug,帮助你让 TensorFlow 运行起来。在 conda 环境中工作可以节省很多管理混乱的依赖关系的工作。另外,在安装特定版本的 Python、TensorFlow 或 CUDA 之前,不要忘记检查配置兼容性

TensorFlow GPU、Python 和 CUDA 的兼容配置(图片来自 TensorFlow )

我的笔记本电脑和 Google Drive 上的工作区都有以下目录结构:

TensorFlow
├─ models
│   ├─ official
│   ├─ research
│   ├─ samples
│   └─ tutorials
└─ workspace
    ├─ preprocessing
    ├─ annotations
    ├─ images
    │   ├─ test
    │   └─ train
    ├─ pre-trained-model
    ├─ training
    └─ trained-inference-graphs
       ├─ output_inference_graph_mobile.pb
       └─ TFLite_model

2.预处理用于训练的图像

首先,图像需要标注标签。你可能会注意到,上面的一些图像有不止一个人戴着口罩,一些图像有复杂的背景。在这些面具周围放置锚框有助于模型通过关注框内的局部区域并提取特定特征来更快地学习。这个过程相当乏味,我花了大约 4 个小时来标记大约 800 张图片,并且我使用了一个叫做 LabelImg 的 Python 包。本质上,我所做的是在人们的面具周围画出方框(如果他们没有戴面具,在他们眼睛下方和脖子上方的区域),并将每个方框与一个标签相关联。

接下来,数据集以 9 比 1 的比例分成训练集和测试集。我没有设置验证集,因为这只是一个原型模型,但在机器学习中这样做总是一个好的做法。

3.创建标注图和张量流记录

TensorFlow 读入保存在label_map.pbtxt中的标签映射,这是类标签到整数值的映射。在这种情况下,该文件类似于:

item {
    id: 1
    name: 'homemade'
}item {
    id: 2
    name: 'surgical'
}item {
    id: 3
    name: 'n95'
}item {
    id: 4
    name: 'bare'
}

注释需要转换为 TFRecord 文件,如test.recordtrain.record

4.选择模型并开始训练

深度学习模型有数百万个参数,从头开始训练它们通常需要大量数据,而我们这里没有这些数据。一种有用的技术是转移学习,它采用在其他图像集上训练的预训练模型,并在新的任务中重用它(这里显示的一个例子)。大多数参数是固定的,而顶层中的一些参数针对新任务进行了微调。

因为我想在计算能力有限的移动设备上使用该模型,所以速度是重中之重。在 TensorFlow 的检测模型 zoo 的表格中可以找到一组预先训练好的模型。我选择了一个轻量级的型号,ssd_mobilenet_v2_coco [ 5 ],来平衡速度和精度之间的权衡。

我试着在我的笔记本电脑和谷歌实验室上训练这个模型。如果你没有超快的 GPU,我肯定会推荐你使用 Colab。在我的笔记本电脑上用 GeForce MX250 GPU 训练这样一个小模型大约 20K 步需要大约 10 个小时,在 Colab 上需要大约 2 个小时。速度提高了 5 倍,同时我可以在笔记本电脑上做其他事情。用于培训的 Colab 笔记本可以在这个 GitHub 库上找到。

关于 TensorFlow 的一个很酷的事情是,你可以在训练期间使用 TensorBoard 监控指标(损失和准确性)。正如你所看到的,损失逐渐减少并趋于平稳,我决定不再等待,并在 20K 步后停止训练。另一个很酷的特点是你可以随时从你停止的地方继续训练。

TensorBoard 示例。(图片由作者提供)

5.导出模型并测试它

该模型被导出到冻结的推理图中。可以通过运行model_test_webcam.py来测试。

最初,我没有包括无面具(裸露)脸的类,因为我认为模型不会在脸上画锚框,这表明这个人没有戴面具。结果证明我错了。它没有学习裸露面部的任何特征,并将一张脸识别为自制的面具。因此,我用一个新的类和裸面数据集重新训练了模型。我从这个过程中学到的是数据集设计的重要性,模型只能学习你让它学习的东西。最初快速建立模型,然后迭代也是明智的。

没有“裸”类的初始模型的分类结果。(图片由作者提供)

我在来自互联网(不在训练/测试集中)和一个朋友的更多图片上验证了新模型。现在它可以识别裸露的面孔了!

来自 Upslash 的用于模型验证的图像。(在最上面一行,从左至右,图片由娜塔莉亚·巴罗斯来源 按下特征来源杰克逊煨来源。在最下面一行,从左到右,图片由 H Shawsource 内森·杜姆劳出处布莱恩·万根海姆来源

和一个朋友在弱光下测试。所有口罩都贴上了正确的标签!(图片由作者提供)

6.将模型导出到 Raspberry Pi

Raspberry Pi 4 和一个摄像头模块(图片由 Raspberrypi 拍摄,来源: pi 4摄像头模块 v2

Raspberry Pi 是一款信用卡大小的迷你电脑,价格非常实惠(第四代售价约 35 美元)。有了 TensorFlow 的支持,它是部署模型的完美移动设备。除了树莓派,相机模块(约 30 美元)需要单独购买。

出于计算速度和隐私的原因, TensorFlow Lite 模型需要用于移动设备,如 Raspberry Pi。本教程介绍了如何在 Window PC 上将经过训练的张量流推理图转换为精简模型,并在 Raspberry Pi 上运行:

[## edjee electronics/tensor flow-Lite-Android-and-Raspberry-Pi 上的对象检测

本指南展示了如何训练 TensorFlow Lite 对象检测模型,并在 Android、Raspberry Pi 和

github.com](https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi)

最后,是玩模型的时候了!

最后的结果显示在开始的 GIF 和下面的图片中。整体模型性能似乎很好。然而,即使我选择了轻型 SSD Mobilenet,每秒 2.5 帧(FPS)也不算太差,但也不是很快。通过选择固态硬盘或量化模型,可以进一步加速。

树莓派相机的测试图像。(图片由作者提供)

结论和要点

在我自己建立了一个对象检测模型之后,我发现构建一个深度学习项目绝对不仅仅是参数调整和设计神经网络架构。

最乏味和耗时的部分是收集和预处理数据。设置 TensorFlow 环境也很棘手,随着 TensorFlow 变得更加自动化,这一问题有望在不久的将来得到解决。主要要点是:

  • 现实生活中的数据是复杂的。我们应该选择每个班级的代表形象
  • 当我们有一个小的数据集时,迁移学习是有用的
  • 我们应该坚持快速原型化和迭代改进模型的指导方针
  • 最后,毫无疑问,在公共场所戴口罩,不管是哪种口罩

感谢阅读,保持健康!

参考

[1] 沙佩尔,B. (2020 年 5 月 28 日)。“不戴口罩——禁止入内,”科莫说,他允许商家坚持戴口罩。NPR

[2] Prather,A. K .等人(2020 年 5 月 27 日)。减少新型冠状病毒的传播。理科

[3]霍华德,j;黄;李;Tufekci,z;兹迪马尔诉;范德韦斯特休伊曾;冯·代尔夫特;价格,A 弗里德曼;唐;唐五世;沃森;Bax,C.E 谢赫河;Questier,f;埃尔南德斯博士;褚来福;拉米雷斯;《反对新冠肺炎的面具:证据回顾》。预印本 2020 ,202004 02 03(doi:10.20944/Preprints 202004.0203 . v1)。

[4] 帕克-波普等人(2020 年 4 月 17 日)。冠状病毒:你应该戴哪种口罩?。《纽约时报》

[5] 刘,w,安盖洛夫,d,尔汉,d,塞格迪,c,里德,s,傅,C. Y,&伯格,A. C. SSD:单次多盒探测器。arXiv 2016。 arXiv 预印本 arXiv:1512.02325

哪些措施对控制新冠肺炎更有效?

原文:https://towardsdatascience.com/which-measures-are-more-effective-in-controlling-covid-19-f85cf0951b2b?source=collection_archive---------47-----------------------

国际航班、隔离和面部遮盖是最有效的措施

图片来源:freepik

作者:吉塔·达斯和凯瑟琳·洛佩斯

自 2020 年 1 月以来的 8 个月里,新冠肺炎让整个世界天翻地覆;不同的国家和政府使用不同类型的措施来拉平曲线。

在我们的上一篇文章中,我们研究了确诊病例(累计)比澳大利亚多的国家,很明显,越早采取措施,它们在控制疾病传播方面的影响就越大。如下图 1 所示,截至 2020 年 8 月 28 日,有 68 个国家的确诊累积病例多于澳大利亚。

图 1: 68 个国家的确诊(累积)病例数超过澳大利亚

本研究中的数据和国家

我们在这项研究中使用了来自人道主义数据交换(HDE)的以下两个数据集。一个数据集包含全球受新冠肺炎影响的人数,另一个数据集追踪 HDE 获得的强制措施。在包括澳大利亚在内的 69 个国家中,有两个国家因缺乏测量数据而被排除在外,因此本研究中总共使用了 67 个国家的 33 项测量,测量列表如下:

'Additional health/documents requirements upon arrival', 'Amendments to funeral and burial regulations', 'Awareness campaigns', 'Border checks', 'Border closure', 'Changes in prison-related policies', 'Checkpoints within the country', 'Closure of businesses and public services', 'Curfews', 'Domestic travel restrictions', 'Economic measures', 'Emergency administrative structures activated or established', 'Full lockdown', 'General recommendations', 'Health screenings in airports and border crossings', 'Humanitarian exemptions', 'International flights suspension', 'Isolation and quarantine policies', 'Limit product imports/exports', 'Limit public gatherings', 'Lockdown of refugee/idp camps or other minorities', 'Mass population testing', 'Military deployment', 'Other public health measures enforced', 'Partial lockdown', 'Psychological assistance and medical social work', 'Requirement to wear protective gear in public', 'Schools closure', 'State of emergency declared', 'Strengthening the public health system', 'Surveillance and monitoring', 'Testing policy', 'Visa restrictions'

根据一个国家使用的每项具体措施的时间,33 项措施的比例为[0,1]。从一个国家报告第一例病例的那一天起,如果没有使用某项措施,则该措施记录为 0。一个国家越早采取一项措施,该具体措施的数值就越高(越接近 1)。

为了衡量不同国家采用的每项措施的时间效果,这些国家大致分为三类:

  • A 型国家的病例数量仍在增长,尚未达到峰值。例如,阿根廷如图 2(左)所示。
  • B 型国家已经达到顶峰,曲线正在下降。比如图 2(中)所示的阿富汗。
  • C 类国家已经经历了第一波,并达到了第二波的顶峰,第二波可能低于或高于第一波,如图 2(右)所示的澳大利亚。

图 2:说明 3 种峰值模式的国家示例

为了评估与每日病例减少相关的措施的有效性,我们使用了一个衍生变量“减少百分比”,该变量是通过基于每日曲线的 30 天滚动平均值找出峰值和谷值的差异来计算的。选择 30 天滚动范围是为了避免过多的本地最大值和本地最小值。对于 A 类国家,减少百分比为 0,因为它们在第一条曲线中尚未达到峰值。对于类型 B,减少百分比是根据从峰值到最近一天的减少来计算的,因为他们还没有开始第二条曲线。例如,对于阿富汗,计算为 90%。对于正在经历第二波的 C 类国家,下降百分比是指在第二波之前从第一个高峰到第一个低谷的下降。鉴于措施可以停止和重新实施,很难确定撤销和重新实施措施的确切日期。因此,我们仅使用与第一波相关的缩减值。澳大利亚有 95%的减排百分比,尽管它正处于平抑第二波的过程中。

衡量强制措施有效性的重要特征

我们使用三种回归算法,以线性回归为基线来衡量特征的重要性。该矩阵由本研究中列出的所有国家和 33 项措施组成,其中一个目标变量是上述减排百分比。使用的 3 种算法是:

  • 套索:
**Linear Regression** is the simplest and most widely used statistical technique for predictive modelling where we have a number of input variables and one target variable. In Lasso both 
variable selection and regularisation (L1-type) are used to achieve better prediction accuracy.
  • XGBoost(有和没有超参数调整):
**XGBoost** is a decision-tree-based ensemble machine learning algorithm that is known for its speed and performance. By tuning the hyper-parameters of the model, we can achieve better prediction accuracy.
  • LightGBM(使用默认参数):
**LightGBM** is relatively new in the market that uses similar implementation to XGBoost but with a little different tree structure. It is faster in training time.

带有超参数调整的 XGBoost 和带有缺省参数的 LightGBM)产生了非常相似的结果。数据集被分成训练(80%)和测试数据(20%),大于训练误差的测试误差表示过拟合。最小绝对误差(MAE)用于评估训练集和测试集中的模型性能。结果如下表 1 所示。

表 1: 3 三种模型的 MAE 与线性回归基线的比较

在 33 个度量中,我们根据 XGBoost 和 LightGBM 的平均值,用正 F 值来衡量特性的重要性。下面的图 3 显示了从高到低排列的特征重要性。

图 3:具有高特性重要性的排名靠前的特性

有哪些措施比其他措施更有效?

基于我们袋装模型的结果,很明显:

第一。国际航班暂停

图片来源:freepik

被列为控制感染传播的最有效措施。这与许多流行病学家的观点一致,即尽早停止国际航班,尤其是来自震中的航班,对于控制新冠肺炎至关重要。许多国家成功地有效使用了这一措施。

第二。R 要求在公共场合佩戴护具& 加强公共卫生体系

图片来源:freepik

排名第二。一个良好的公共卫生保健系统可以帮助发现和支持受感染病人的康复;在公共场合戴口罩能有效防止疾病传播。这在大多数控制了新冠肺炎病毒传播的亚洲国家是显而易见的。

三号。隔离和检疫政策&宣传活动

图片来源:freepik

在有效性方面名列第三。这证明,隔离和接触者追踪对于在社区中遏制疾病极其重要,许多国家已经在曲线抑制的结果中看到了证据。

有趣的是,诸如全面封锁、边境关闭、学校关闭&测试政策等措施并不像上面讨论的措施那样高效。用来自 67 个国家的 33 种不同衡量标准的数据总结我们的研究,我们发现:

“国际航班、戴口罩和隔离是最有效的措施”

欢迎随时访问GitHub repo,欢迎您的反馈和意见。

疫情预测使用哪些模型?

原文:https://towardsdatascience.com/which-models-to-use-for-epidemic-prediction-25b22932c4ca?source=collection_archive---------32-----------------------

比较预测流感和新冠肺炎病例的数据驱动方法和基于模型的方法

艾琳·斯塔福德伊莱·什利泽曼

来源: frankundfrei ,via pixabay (CC0)

在新冠肺炎时代,准确预测流行病的长期和短期演变的需要已经变得很明显。我们建议将传统的****方法,如易感染病恢复模型(SIR)与新兴的** 数据驱动模型进行比较,包括用于时间序列预测的递归神经网络(RNN)。我们在更稳健的流感数据上比较了这些方法,然后检验了它们在新冠肺炎数据上的应用。**

我们的研究结果表明:( I)通常使用的基于模型的方法(即,基于模型的方法)和基于数据驱动的方法(即,不提供对流感数据的准确的长期预测,需要不断更新才能更加准确。(二)我们将数据驱动** Seq2Seq RNN 模型确定为短期和长期预测最有前途的数据驱动方法。由于流行病遵循相似的模式,我们建议根据流感数据训练的 Seq2Seq 可以用作新冠肺炎模型。这种模型只需要“少量”的再训练(几个样本)来提供预测。**

右来源: frankundfrei ,via pixabay (CC0)

代码文件可从https://github.com/shlizee/Seq2SeqEpidemics获得

流感数据

疾控中心有监测系统跟踪流感的季节性传播。一个这样的网络是美国门诊流感样疾病监测网络(ILINet)。每周,ILINET 中的门诊医疗保健提供者按年龄组报告患有流感样疾病(ILI)的患者人数。** ILINet 提供国家、州和地区级别的数据,以及按人口加权和未加权的 ILI 访问量百分比。**我们将关注每周病例数的国家级数据。****

绘制数据图,我们可以看到流感流行遵循类似的模式。此外,我们可以看到,我们正在处理的时间序列显示每年的季节模式。为了使数据更容易处理,我们将格式更改为季节性的(即查看以第 14 周(4 月的第一周)为中心的每个年度周期)。

来自 ILINet 的流感数据。右图:2018-19 流感季节用于评估模型的病例数

> python3 fludata.py

使用基于模型的 SIR 进行预测

SIR 模型是一个常微分方程(ODEs)系统,传统上用于研究流行病的动力学。在这个模型中,人群被分为三组: S 易感, I 感染,和 R 未感染。该模型的流程图如下所示。

易感者以β速率感染,感染后以γ速率恢复。为了使用 SIR 模型进行预测,我们必须优化模型的参数以拟合数据。我们优化的参数包括:(I)初始易感人群的百分比(ii) β:感染率(iii) γ:恢复率。

首先,我们来看看基于上一季的预测。我们优化模型参数以适应前一季,然后使用这些参数运行下一季的模型,并将结果与下一季的真实数据进行比较。

接下来,我们看看 SIR 模型如何仅从 10 个数据点(蓝色虚线)中做出预测我们将通过两种方式做到这一点:(I)拟合上一个赛季,并使用这些参数作为优化的起点: Smart SIR。****(二)利用一个普遍的出发点:天真的先生。****

上季流感病例的 SIR 模型预测

****>** python3 SIRfludata.py**

结果告诉我们,前一季拟合 SIR 曲线的形状似乎最接近真实数据,然而,它不能很好地预测峰值,并且曲线的初始段仍然非常不同。总的来说,我们看到 SIR 模型即使根据以前的数据进行了更新,也没有捕捉到流行病演变的重要特征,并表明 数据驱动的方法可以改善预测

用香草 LSTM 做预测

对于时间序列数据(例如,我们在这里考虑的每日病例的流行病数据),一种常用的预测策略是递归神经网络(RNNs)。可以提供稳健预测的特定类型的 rnn 是 LSTMs(长短期记忆单元)。LSTMs 能够识别时间序列数据中的时间模式,然后用于预测。我们的实现遵循 PyTorch [3]中 LSTM 的时间序列预测教程。

我们执行几个预处理步骤。(I)我们将 LSTM 的数据标准化;( ii)创建输入-输出序列来训练我们创建元组的模型。这些元组将包含 52 周的数据作为输入,下一周的数据作为输出。每个输入序列中有 52 个数据点,有一个标签,是下一个数据点。

**> python3 LSTMfludata.py**

现在我们构建模型。我们在之前创建的输入/输出序列上训练模型,即,我们在整个训练数据上滑动 52 个数据点(一个季节)的窗口,一次一个步骤,并预测下一个点。然后我们计算预测值和地面真实值之间的 L1 损失。看起来模型收敛了(尽管注意损失(左图)相当高),我们检查了下一季度的预测(右图)。

左:失去 LSTM 预言。右图:LSTM 预测(橙色)与真实数据(黑色)的对比。

事实证明,香草 LSTM 的表现比 SIR 更差!此外,来自 LSTM 的预测不太可靠,经过训练后往往会产生不同的结果。然而,在某些情况下,结果和先生一样准确,值得注意的是,在许多试验中,LSTM 倾向于在季末抓住新案件的上升。

Seq2Seq 模型

Seq2Seq 型号使用 RNN 编码器和解码器将一个序列转换为另一个序列。尽管这通常用于语言处理,但它也适用于时间序列预测,参见[4]。该模型的实现改编自时间序列预测 Seq2Seq [5]和[1,2]。

**> python3 Seq2Seqfludata.py**

左:Seq2Seq 预测丢失。右图:Seq2Seq 解码器预测(红色虚线)和目标 flu 真实数据(绿色)的比较。

我们设置了 Se2Seq 来执行与“上赛季 fit SIR”和“LSTM”中类似的预测。我们将编码器的输入设置为前一季(“编码系列”52 周—黑色),并训练解码器的输出来预测当前季的 52 周(“目标系列”52 周—绿色)。我们在之前的所有赛季中训练模型,并将最后一个赛季留给测试。Seq2Seq 的预测用红色标记。

实际数据(黑色)预测中所有方法的比较。Seq2Seq(红色)提供了被检查模型中的最佳预测。

正如上面的对比图所示,Seq2Seq 预测在预测疫情峰值、峰值周和曲线的整体形状方面明显优于 SIR 和 LSTM,似乎接近真实数据曲线,几乎是真实数据曲线的平滑版本。

Seq2Seq 在新冠肺炎疫情预测中的应用

由于在流感数据上使用 Seq2Seq 的结果很有希望,我们很想看看 Seq2Seq 模型如何预测新冠肺炎。本应用程序使用的数据来自 Kaggle[6]上的新冠肺炎全球预测挑战。这些数据包括国家、州、县一级的确诊病例和死亡病例,以及每个地区的人口。我们将关注美国的数据,并通过实验解决两个主要问题:

  1. 使用 Seq2Seq 预测每个州最近 45 天的流行病数据(病例数),对其他州进行训练。这将决定新冠肺炎数据驱动预测的准确性
  2. 我们询问针对流感培训的 Seq2Seq 是否可以用作新冠肺炎的一种‘基于模型’的方法。通过这种设置,我们探索了在类似于新冠肺炎的流行病上训练 Seq2Seq 是否是用于精确预测的基于混合数据模型的方法。

1。使用 Seq2Seq 按状态预测最近 45 天的疫情

对于此应用程序,我们训练一个 Seq2Seq 神经网络,使用流行病的开始作为输入来预测流行病的最后 45 天。我们预测 3 个示例状态(并在其他 47 个状态上训练)。每日预测以红色显示,并与绿色目标进行比较。

**> python3 Seq2SeqCovid19_45days.py**

Seq2Seq 预测(红色,与洋红色的最佳对比:7 天移动平均线)新冠肺炎过去 45 天的预测,适用于 3 个州:阿拉巴马州、纽约州和得克萨斯州。

我们能够很好地把握整体趋势!我们没有捕捉到数据中的峰值,很多时候是由于数据输入系统的日期造成的。值得注意的是,我们并不期望预测这些。为了进一步测试预测的准确性,我们查看每天更新的移动平均线(比较预测-红色和品红色-7 天移动平均线目标)[7]。正如可以看到的,我们得到了所有三个检查状态令人印象深刻的准确性。

2.流感数据是否给了我们一个更好的 Seq2Seq 模型用于新冠肺炎?

对于这个应用程序,我们首先在流感上训练 Seq2Seq,然后重新训练它来预测新冠肺炎(我们将这样的模型标记为 FC-Seq2Seq) 。特别是,我们针对流感在所有州进行训练,然后根据新冠肺炎的数据只在 3 个州进行重新训练。通过遵循这样的协议,我们的目标是获得基于模型的新冠肺炎方法,该方法通过少量的重新训练提供准确的预测。

> python3 FCSeq2Seq.py

丢失重新训练的 FC-Seq2Seq。

我们观察到 FC-Seq2Seq 的丢失是所有检测模型中最小的。这表明,在我们检查的所有设置中,该设置获得了最高的精度,并且它使用最少的数据进行训练(即,只有 3 个状态的数据)。通过检查下图中 47 个状态中的其他状态(红色)的预测,并与 7 天移动平均新冠肺炎数据(品红色)进行比较,预测的准确性是显而易见的。引用的代码可用于生成剩余 44 个状态的预测。

新冠肺炎案例的 FC-Seq2Seq 预测(红色,与洋红色的最佳对比:7 天移动平均值)。

因此,我们建议,这种做法将有助于重新训练 Seq2Seq 流感模型对早期 COVID 爆发进行预测。

结论

我们对流行病预测方法的分析表明,Seq2Seq RNN 是一种可靠的流行病预测方法。在流感数据预测方面,Seq2Seq 优于 SIR 和 LSTM,并为新冠肺炎展示了有希望的结果。此外,对流感进行训练的 Seq2Seq 模型能够对新冠肺炎数据进行准确预测,几乎不需要重新训练。我们建议使用 Seq2Seq 模型,并与中的进行比较,预测新冠肺炎目前的病例数和死亡数。接下来,我们计划研究 Seq2Seq 以阐明和预测缓解策略的效果[8]。

参考

[1]苏,k .,& Shlizerman,E. (2019)。序列对序列递归神经网络可解释性的降维方法。arXiv 预印本 arXiv:1905.12176

[2]苏,k,刘,x .,,施利兹曼,E. (2020).预测和聚类:基于无监督骨架的动作识别。IEEE/CVF 计算机视觉和模式识别会议论文集(第 9631-9640 页)。

[3]https://stack abuse . com/time-series-prediction-using-lstm-with-py torch-in-python/

[4]https://blog . keras . io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras . html

[5]https://github . com/jeddy 92/time series _ seq 2 seq/blob/master/notebooks/TS _ seq 2 seq _ intro . ipynb

[6]https://www . ka ggle . com/c/covid 19-global-forecasting-week-5/data?select=test.csv

[7]https://machine learning mastery . com/moving-average-smoothing-for-time-series-forecasting-python/

[8]https://wallet hub . com/edu/冠状病毒限制最少的州/73818/

你是六大数据人物角色中的哪一个?

原文:https://towardsdatascience.com/which-of-the-six-major-data-personas-are-you-8dbf434b7c9e?source=collection_archive---------25-----------------------

引入协作方法,开始信任您公司的数据

图片来自 马文·梅耶Unsplash

在你成长的过程中,你玩过这个名字游戏吗?现代数据组织有一些类似的东西,它被称为“坏数据指责游戏”然而,与名称游戏不同,坏数据指责游戏是在 数据停机 罢工时进行的,再多的押韵和舞蹈也无法挽救局面。

数据宕机指的是数据不完整、错误、丢失或不准确的一段时间,而且十有八九,您都不知道是什么原因造成的。你只知道现在是凌晨 3 点,你的首席执行官很生气,你的仪表板出错了,你需要马上解决它。

在与 200 多个数据团队交谈后,我们已经确定了参与不良数据指责游戏的主要数据角色。也许你能认出一两个?

在本文中,我们将介绍这些角色,聚焦他们的希望、梦想和恐惧,并分享我们在贵公司攻克数据可靠性的方法。

首席数据官

图片由 哈维尔塞拉 Unsplash*。*

这是欧菲莉亚,你的首席数据官(CDO)。虽然 Ophelia 可能不在你公司的数据管道或观察仪表板上工作,但她的影响与她的团队提供的数据的一致性、准确性、相关性、可解释性和可靠性密切相关。

欧菲莉亚每天醒来都会问自己两件事。首先,不同的部门是否得到了他们需要的有效数据?第二,我们是否有效地管理了这些数据的风险?

清晰的鸟瞰图显示她的数据生态系统正在正常运行,她会睡得更安稳。在一天结束时,如果坏数据出现在首席执行官面前,向公众或任何其他数据消费者公开,她就有危险了。

商业智能分析师

图片由 克里斯蒂娜 Unsplash*。*

Betty 是商业智能主管或数据分析师,她希望有一个强大而有洞察力的仪表板,可以与营销、销售和运营部门的利益相关者共享,以回答他们关于业务职能执行情况的各种问题。当医生级别的事情出错时,贝蒂是第一个被呼叫的人。

为了确保可靠的数据,她需要回答以下问题:

  • 我们是否将数据转化为对业务有意义的指标和见解?
  • 我们是否有信心数据是可靠的,并且意味着我们认为它意味着什么?
  • 其他人是否容易获得和理解这些见解?

空值和重复条目是 Betty 的主要敌人,她热衷于任何可以防止数据停机损害其内心安宁的事情。业务利益相关者要求她调查报告中的一个有趣的值,这让她感到疲惫不堪——追踪上游数据并验证它是否正确是一个漫长的过程!

数据科学家

图片由 蒂姆·范德奎普 un splash*。*

数据科学家 Sam 在大学时学的是林业,但为了还清学生贷款,他决定跳槽到工业界。介于一行 Python 代码和数据可视化之间,他爱上了数据科学。剩下的就是历史了。

为了做好自己的工作,Sam 需要知道 1)数据来自哪里,2)数据是否可靠,因为如果不可靠,他的团队的 A/B 测试将无法工作,所有下游消费者(分析师、经理、高管和客户)都将受到影响。

Sam 的团队花费大约 80%的时间擦洗、清理和理解数据的上下文,因此他们需要可以让他们的生活更轻松的工具和解决方案。

数据治理领导

图片由 GA Unsplash*提供。*

Gerald 自豪地拥有一只七个月大的小狗,是公司的第一位数据治理专家。他开始在法律团队工作,然后,当 GDPR 和 CCPA 进入时,他最终专注于数据合规性。这是一个新颖的角色,但随着组织的发展,它变得越来越重要。

谈到数据可靠性,Gerald 关心的是 1)整个公司数据和指标的统一定义,以及 2)了解谁有权访问和查看哪些数据。

对 Gerald 来说,不良数据可能意味着昂贵的罚款、客户信任的丧失和诉讼。尽管他的角色至关重要,但他有时开玩笑说这就像会计:“如果出了问题,你只是前台和中心!”

数据工程师

图片由 克里斯蒂娜 Unsplash*。*

谈到数据可靠性,数据工程师艾默生是关键。

Emerson 最初是一家小型电子商务初创公司的全栈开发人员,但随着公司的发展,他们的数据需求也在增长。在她意识到这一点之前,她不仅负责构建他们的数据产品,还负责整合团队做出业务决策所依赖的数据源。现在,她是雪花专家、PowerBI 专家和通用数据工具专家。

艾默生和她的团队将公司的数据生态系统凝聚在一起。他们实施监控公司数据可靠性的技术,如果出现问题,分析团队会在凌晨 3 点呼叫她来解决问题。像贝蒂一样,她因此失去了无数个小时的睡眠。

为了在工作中取得成功,艾默生必须解决许多问题,包括:

  • 设计可扩展的数据平台解决方案
  • 确保数据接收的可靠性
  • 让其他团队也能使用这个平台
  • 当数据停机发生时,能够快速修复
  • 最重要的是,让整个数据组织的生活可持续

数据产品经理

图片由 埃里佐·迪亚斯 Unsplash*。*

这是彼得。他是数据产品经理。Peter 最初是一名后端开发人员,但几年前跳到了产品管理部门。和杰拉尔德一样,他也是该公司首次聘用的这一职位,这既令人兴奋又富有挑战性。

他了解所有最新的数据工程和数据分析解决方案,并经常被要求决定他的组织需要投资哪些产品才能取得成功。在交付可访问、可扩展的数据产品时,他直接了解自动化和自助工具是如何发挥作用的。

所有其他数据利益相关者,从分析师到社交媒体经理,都依赖他来构建一个平台,该平台可以吸收、统一来自各种来源的数据,并使整个企业的消费者都可以访问这些数据。哦,我们提到过这些数据必须符合 GDPR、CCPA 和其他行业法规吗?这是一个具有挑战性的角色,很难让每个人都满意——看起来他的平台总是与 BI 实际上想要的相差很远。

谁对数据可靠性负责?

那么,在您的数据组织中,谁拥有数据生态系统的可靠性?

你可以想象,答案并不简单。从公司的 CDO 到数据工程师,确保数据可靠性最终是每个人的责任。尽管几乎每个公司的每个组织的每个部门都依赖于数据,但不是每个数据团队都有相同的结构,不同的行业有不同的要求。(例如,金融机构通常会雇佣整个数据治理专家团队,但在小型初创公司中,这种情况并不多见。对于那些这样做的创业公司,我们赞扬你们!)

下面,我们将使用 RACI (负责、问责、咨询和知情)矩阵准则,概述我们在整个数据组织中映射数据责任的方法,从可访问性到可靠性:

图表由蒙特卡洛提供。

在接收和转换万亿字节数据的公司(如网飞优步),我们发现数据工程师和数据产品经理通常会处理数据可靠性问题的监控和警报责任。

除了这些庞然大物,责任往往落在数据工程师和产品经理身上。他们必须平衡组织对数据的需求和能够可靠提供的数据。值得注意的是,这里做出的任何错误选择的主要责任通常由 BI 分析师承担,他们的仪表板可能最终包含错误的信息或打破沉默的变化。在非常早期的数据组织中,这些角色通常组合成一个万能的数据人员或产品经理。

不管你的团队情况如何,你并不孤单。

幸运的是,有一个更好的方式来开始信任你的数据: 数据可观察性 。无论谁最终负责确保组织中数据的可靠性,这都是大多数创新型公司正在采用的方法。

事实上,有了正确的数据可靠性策略,糟糕的数据指责游戏将成为过去,完整的端到端可观察性指日可待。

有兴趣了解更多?伸出手去 巴尔摩西将知更鸟 ,其余的 蒙特卡洛团队

这篇文章是由 巴尔摩西 威尔罗宾斯 写的。

哪一个是你的波动率——常数、局部还是随机?

原文:https://towardsdatascience.com/which-one-is-your-volatility-constant-local-or-stochastic-61508ef560c1?source=collection_archive---------16-----------------------

利用赫斯顿模型分析欧元对美元的走势

金融学中有三种主要的波动率模型:常数波动率、局部波动率和随机波动率模型。

在 1987 年股市崩盘之前,建立在几何布朗运动(GBM)基础上的 Black-Scholes (B-S)模型是占主导地位的模型,该模型具有常数波动率和漂移。在这个模型中,股票价格是随机性的唯一来源,可以用收益分布为对数正态的标的股票进行套期保值。在 B-S 模型中,股票价格 S 由以下随机微分方程(SDE)描述,其中 W 是标准布朗运动:

其中μ(回报率、漂移或无风险率)和σ(波动率)为常数。

上述随机微分方程(SDE)具有以下解析解(根据 it0 的解释):

1987 年股灾之后,“skew”这个词过去指的是幸福或好事发生时,现在的意思完全不同了:“skew”表示非常小和非常大的回报比正态分布所暗示的更经常实现。因此,交易者开始为波动性较高的特别低的执行期权定价(查看 1987 年前后隐含的 vol 曲线)。不同期权的供给和需求也在波动曲线的形成中发挥了重要作用。

局部波动率(LV)模型实际上是 B-S 模型的简单扩展,它解决了将偏度纳入定价模型的需要,因此意味着非正态分布。在 LV 模型中,基础资产的波动率(称为“瞬时波动率”)被建模为时间 t 和基础资产的时间 t 值的确定性函数:

这是一个非常直观的公式,只要想到波动性可以被视为资产本身。例如,VIX 指数是一个实时市场指数,代表市场对 S & P 500 指数期权价格输入的 30 天前瞻性波动的预期,可以通过衍生品交易。看看 VIX 指数的不稳定性:

VIX 标准普尔 500 指数的走势及其波动性

隐含波动率曲面可以转化为 LV 曲面,这就是 Dupire LV 模型的标定。Dupire (1994 年)表明,存在一个模型可以匹配市场上的期权报价,并且有一个明确的公式来说明如何根据观察到的期权价格构建这个模型,假设它们可以在连续的执行和到期日之间进行插值。(当时,杜皮尔实际上并不认为局部波动是实际波动演化的现实模型。)

由于资产价格由单个布朗运动驱动,每个收益都是由现金和基础资产组成的独特的自我融资复制投资组合的结果,也就是说,它的价格是唯一地定义为复制投资组合的初始值(市场完整性)的。完整的好处是写在 S 上的衍生品可以完美对冲。虽然 BS 和 LV 模型是完整的,但随机波动率模型却不是。另一方面,虽然从理论角度来看,市场完全性非常方便,但它不一定是金融市场的现实属性,因为我们都可以处理衍生品,对吗?

不管怎样?如果我们比较隐含波动率表面和局部波动率表面,我们可以看到拟合相当好。实际上,与 B-S 模型不同,LV 模型在拟合隐含波动率的无套利面方面非常好,有时甚至是完美的,即通过 Dupire 公式的“微笑”。

资料来源:左图:南非指数和外汇期权的隐含和局部波动表面,风险和金融管理期刊,ISSN 1911–8074。右边的图表:彭博

然而,LV 模型有一个主要的缺陷:该模型只使用今天的价格,而没有对它们在一段时间内的行为做出假设!尽管它符合今天的微笑值,但该模型在长期到期时给出了几乎不变的微笑,导致未来微笑变平(即未来没有微笑)!多么荒谬!因此导致不合理的偏斜动态,低估了波动率的波动性。这是非常不现实的,特别是对于依赖向前微笑的奇异期权,如克利凯期权和其他向前开始期权。

此外,LV 型号在提供稳定性方面并不差,它们可能需要频繁地重新校准,例如每小时一次!!

尽管如此,通过对局部波动价格进行一些调整,特别是向模型中添加一些跳跃以捕捉股票价格过程的复杂动态,这些模型可以用于对几种障碍期权进行定价。

作为 LV 模型的升级/替代,随机波动率 (SV)模型可以产生更真实的远期波动率表面,其中微笑几乎是自相似的,相比之下,LV 模型使远期波动率曲线变平并消除微笑。LV 模型假设未来的偏斜将是我们今天在本地 vol 中看到的正向偏斜,而 SV 模型假设未来的偏斜与今天的偏斜相似。这就是为什么 SV 模型很可能高估期权,而 LV 和 BS 模型往往低估期权。

在 SV 模型中,资产价格及其波动性都被假设为随机过程,并且可以随时间而变化,因此它给出了更真实的波动微笑动态。在 20 世纪 80 年代末由 Hull 和 White 提出的 SV 模型中,基础的波动性被建模为某个辅助过程的确定性函数,该过程通常被建模为扩散。

最著名和最重要的随机波动模型是赫斯顿模型。它是一个双因素模型,并假设股票价格和瞬时波动性具有不同的动态。

作为一个超级简单的例子,下面的代码显示了一个简单的应用赫斯顿模型对欧元兑美元,以寻找货币路径在 1 米,2M 和 3 米的时间。

如果您将结果与下面的彭博远期报价进行比较,您会发现我们的结果与下面给出的报价非常吻合。

此外,现在我们有了每个模拟中的货币路径,我们可以基于这些路径为我们的奇异期权定价(下图)。

在上面的例子中,赫斯顿模型参数是通过对市场观察到的欧式期权隐含波动率微笑进行校准而确定的(下图给出了表面)。好吧,我承认我实际上没有使用繁琐的公式来计算它们,而是直接从彭博获得重新校准的参数以节省时间:)

市场观察到的欧元兑美元欧洲期权隐含波动率表面(来源:彭博)

SV 模型可以产生丰富的点-体积动态,例如大的负短期正向偏斜或大的正向微笑曲率。然而,它们也有一些缺点。它们比本地 vol 模型更难校准,这就是为什么我直接从 Bloomnberg 获取它们,它们有时可能不会对短期期权表现出足够的微笑。对于只依赖于最终分布的产品,波动率表面的拟合可能很差。SV 模型中的套期保值比率也强烈依赖于参数,因此它们对参数的变化很敏感。更简单的模型甚至可以做得更好,因为它的参数可以更有效和更稳健地校准,而对冲误差可以得到“平均”。

还有其他模型可以克服这些缺点。其中之一是局部随机波动率(LSV)模型,该模型试图获得局部和随机波动率模型的积极方面:它们将波动率建模为时间 t 和基础资产 S 与附加随机过程的函数。还有路径依赖波动率(PDV)模型,它试图结合 LV 和 SV 的优势,试图适应市场微笑,同时产生各种各样的联合现货-vol 动态。

另一种方法是使用 ARCH/GARCH 模型。尽管 ARCH/GARCH 代表股票收益的离散时间模型,而 SV 模型是连续时间模型,但股票收益的离散时间模型在计量经济学文献中吸引了相当多的注意力,并提供了稳健的结果。ARCH/GARCH 可以捕捉尾部风险、波动聚类和相关性,而不需要相关性。

总而言之,可以得出结论,没有“对”的模式,只有“合适”的模式。你对 vol 型号的选择取决于你打算用它做什么。例如,如果你想给奇异期权定价,就选择 SV 模型。对于不太复杂和奇特的产品,本地 vol 模型可以表现得更好。

我应该在我的机器学习项目中使用哪个优化器?

原文:https://towardsdatascience.com/which-optimizer-should-i-use-in-my-machine-learning-project-5f694c5fc280?source=collection_archive---------41-----------------------

图片来自pexels.com

为您的项目选择合适的优化器的指南。

这篇文章概括了计算机视觉、自然语言处理和机器学习中常用的优化器。此外,您将发现一个基于三个问题的指南,以帮助您为下一个机器学习项目选择正确的优化器。

TL;DR:
1)找一篇相关的研究论文,从使用相同的优化器开始。
2)查阅表 1 并将数据集的属性与不同优化器的优缺点进行比较。根据可用的资源调整你的选择。

简介

为您的机器学习项目选择一个好的优化器可能会非常困难。流行的深度学习库,如 PyTorchTensorFLow 提供了不同优化器的广泛选择——每一个都有自己的优点和缺点。然而, 挑选错误的优化器会对你的机器学习模型的性能产生实质性的负面影响【1】【2】。这使得优化器成为构建、测试和部署机器学习模型过程中的关键设计选择。

图摘自[2] ( 链接)。它显示了根据优化器的不同,模型性能可能会有很大的不同。

选择优化器的问题是,由于没有免费的午餐定理,没有一个优化器可以统治所有优化器;事实上,优化器的性能高度依赖于设置。因此,出现的核心问题是:

哪个优化器最适合我项目的特点?

以下文章旨在作为回答上述问题的指南。它分为两个主要段落:在第一部分,我将向您简要介绍最常用的优化器。在第二部分,我将为您提供一个为您的项目选择最佳优化器的三步计划。

常用优化器

深度学习中几乎所有流行的优化器都是基于梯度下降的。这意味着他们重复估计给定损失函数 L 的斜率,并在相反的方向上移动参数(因此朝着假定的全局最小值向下攀升)。这种优化器最简单的例子可能是自 20 世纪 50 年代以来一直使用的随机梯度下降(或 SGD)[3]。在 2010 年代,AdaGrad 或 Adam [4][1]等自适应梯度方法的使用变得越来越流行。然而,最近的趋势表明,部分研究团体倾向于使用 SGD 而不是自适应梯度方法,例如参见[2]和[5]。此外,深度学习的当前挑战带来了新的 SGD 变体,如 LARS 或 LAMB [6][7]。例如,Google Research 在他们最近的一篇论文中使用 LARS 训练了一个强大的自我监督模型[8]。

下一节将介绍最流行的优化程序。如果您已经熟悉这些概念,请前往第 节如何选择正确的优化器

我们将使用下面的符号:用 w 表示参数,用 g 表示模型的梯度。此外,让 α 为每个优化器的全局学习速率,让 t 为时间步长。

随机梯度下降(SGD)【9】

随机梯度下降(SGD)的更新规则[9]。

在 SGD 中,优化器根据小批量估计最陡下降的方向,并朝这个方向前进一步。因为步长是固定的,SGD 会很快陷入平稳状态或局部极小值。

带动量的 SGD【10】:

用动量更新 SGD 规则( PyTorch ,2020 年 7 月 20 日)。

其中T21β<1。利用动量,SGD 在恒定下降的方向上加速(这就是为什么它也被称为“重球法”)。这种加速有助于模型摆脱停滞状态,使其不易陷入局部极小值。

阿达格拉德(2011,[4])

更新 AdaGrad [4]的规则。

AdaGrad 是利用自适应学习速率的首批成功方法之一(因此得名)。AdaGrad 基于梯度平方之和的倒数的平方根来缩放每个参数的学习速率。该过程放大稀疏梯度方向,这又允许在这些方向上更大的步长。结果是:AdaGrad 在具有稀疏特征的场景中可以更快地收敛。

RMSprop (2012,[11])

更新 RMSprop [11]的规则。

RMSprop 是一个未发布的优化器,在过去几年中被过度使用。这个想法类似于 AdaGrad,但是梯度的重新缩放没有那么激进:梯度平方的总和被梯度平方的移动平均值所代替。RMSprop 通常与 momentum 一起使用,可以理解为 Rprop 对小批量设置的适应。

亚当(2014,[1])

更新 Adam [1]的规则。

Adam 将 AdaGrad、RMSprop 和 momentum 方法合二为一。步长的方向由梯度的移动平均来确定,步长大小近似为全局步长大小的上限。此外,类似于 RMSprop,梯度的每个维度被重新缩放。Adam 和 RMSprop(或 AdaGrad)之间的一个关键区别是,力矩估计值 mv 的偏差被校正为零。众所周知,Adam 通过很少的超参数调整实现了良好的性能。

AdamW (2017,[17])

AdamW [17]的更新规则。

Loshchilov 和 Hutter [17]确定了自适应梯度法中 L2 正则化和权重下降的不等价性,并假设这种不等价性限制了 Adams 的性能。然后,他们提出将权重衰减与学习速率分离。实验结果表明,AdamW 比 Adam 具有更好的泛化性能,并且 AdamW 的最优超参数范围更广。

LARS (2017,[6])

更新 LARS [6]的规则。

LARS 是 SGD 的一个扩展,它具有适应每层学习速率的动量。它最近引起了研究界的关注。原因是由于可用数据量的稳步增长,机器学习模型的分布式训练已经普及。结果是批量开始增长。然而,这导致训练期间的不稳定性。Yang 等人[6]认为,这些不稳定性源于某些层的梯度范数和重量范数之间的不平衡。因此,他们提出了一种优化器,可以根据“信任”参数η < 1 and the inverse norm of the gradient for that layer.

来调整每一层的学习速率。如何选择正确的优化器?

如上所述,为机器学习问题选择正确的优化器可能很难。更具体地说,没有万能的解决方案,必须根据手头的具体问题仔细选择优化器。在下一节中,我将提出在决定使用某个优化器之前应该问自己的三个问题。

在与您相似的数据集和任务上,有哪些最新的成果?使用了哪些优化器,为什么?

如果你正在使用新颖的机器学习方法,很可能会有一篇或多篇可靠的论文涉及类似的问题或处理类似的数据。该论文的作者经常进行广泛的交叉验证,并且只报告最成功的配置。尝试理解他们选择优化器的理由。

举例: 说你要训练一个生成性对抗网络(GAN)对一组图像进行超分辨率。经过一些研究,你偶然发现了这篇论文,在这篇论文中,研究人员使用 Adam 优化器解决了完全相同的问题。Wilson 等人[2]认为,训练 GANs 并不对应于解决优化问题,Adam 可能非常适合这种情况。因此,在这种情况下,Adam 是优化器的一个好选择。

您的数据集有哪些特征可以发挥某些优化器的优势?如果有,是哪些,怎么做?

表 1 显示了不同优化器及其优缺点的概述。尝试找到一个与您的数据集、培训设置和项目目标的特征相匹配的优化器。

某些优化器在具有稀疏特征的数据上表现得非常好[13],而其他优化器在将模型应用于之前未见过的数据时可能表现得更好[14]。一些优化器在大批量的情况下工作得很好[6],而另一些优化器会收敛到尖锐的极小值,但泛化能力很差[15]。

表 1:流行优化器的总结,突出了它们的优点和缺点。列状态内存表示优化器所需的字节数,这是梯度所需内存的补充。这里,n 是机器学习模型的参数数量。例如,没有动量的 SGD 将只需要存储器来存储梯度,但是具有动量的 SGD 也需要存储梯度的移动平均值。

例如: 对于你当前工作的一个项目,你必须将用户的书面反馈分为正面反馈和负面反馈。你考虑使用单词袋作为你的机器学习模型的输入特征。由于这些特征可能非常稀疏,您决定采用自适应梯度方法。但是你想用哪个呢?查阅 表 1 ,可以看到 AdaGrad 具有自适应梯度方法中最少的可调参数。看到项目的有限时间框架,您选择 AdaGrad 作为优化器。

你的项目资源是什么?

项目可用的资源对选择哪个优化器也有影响。计算限制或内存约束,以及项目的时间框架可以缩小可行选择的范围。再次查看表 1 ,您可以看到每个优化器的不同内存需求和可调参数数量。这些信息可以帮助您估计您的设置是否支持优化程序所需的资源。

例如: 您在业余时间从事一个项目,希望在家用计算机上的图像数据集上训练一个自我监督的模型(例如 SimCLR [16])。对于像 SimCLR 这样的模型,性能随着批量的增加而提高。所以,你要尽可能的节省内存,以便大批量的做训练。您选择一个没有动量的简单随机梯度下降作为您的优化器,因为与其他优化器相比,它需要最少的额外内存来存储状态。

结论

尝试所有可能的优化器来为一个项目找到最好的并不总是可能的。在这篇博文中,我概述了最流行的优化器的更新规则、优点、缺点和要求。此外,我列出了三个问题,以指导您做出明智的决定,为您的机器学习项目使用哪个优化器。

作为一个经验法则:如果你有资源找到一个好的学习进度计划,SGD with momentum 是一个可靠的选择。如果你需要快速的结果,而不需要大范围的过度调整,那么倾向于自适应梯度方法。

我希望这篇博客文章可以作为一个有帮助的方向,我可以帮助他们做出正确的优化选择。

我对反馈持开放态度,如果你有任何建议,请在评论中告诉我!

Philipp Wirth
机器学习工程师
lightly.ai

变更日志:

  • 2020 年 12 月 17 日:增加了 AdamW。

[1]: Kingma,D. P. & Ba,J. (2014),“亚当:一种随机优化的方法”,引用 arxiv:1412.6980 评论:在 2015 年圣地亚哥第三届国际学习表示会议上作为会议论文发表。

[2]: Wilson,Ashia C .等,“自适应梯度方法在机器学习中的边际价值。”ArXivABS/1705.08292(2017):n . PAG。

[3]:罗宾斯,赫伯特;门罗萨顿。随机近似法。安。数学。统计学家。22 (1951 年),第 3 号,第 400-407 页。doi:10.1214/aoms/1177729586。https://projecteuclid.org/euclid.aoms/1177729586

[4]:杜池,J. CHazan,e .和 Singer,Y. (2011),“在线学习和随机优化的自适应次梯度方法。”, J .马赫。学习。第号决议第 12 号决议,2121–2159 年。

[5]:凯斯卡尔、尼蒂什·希里什和理查德·索谢尔。"通过从 Adam 切换到 SGD 来提高泛化性能."ArXivABS/1712.07628(2017):n . PAG。

[6]:尤,杨等(2017)“卷积网络的大批量训练。” arXiv:计算机视觉与模式识别 (2017): n. pag。

[7]:尤,杨等《面向深度学习的大批量优化:76 分钟训练 BERT》 arXiv:学习 (2020): n. pag。

[8]: Grill,Jean-Bastien 等人,“引导你自己的潜能:自我监督学习的新方法”abs/2006.07733 (2020): n. pag。

[9]: Bharath,b .,Borkar,V.S.《随机近似算法:概述和最近趋势》。贞花 24,425–452(1999)。https://doi.org/10.1007/BF02823149

[10]戴维·鲁梅尔哈特、杰弗里·欣顿和罗纳德·威廉斯。1988.通过反向传播误差学习表征。神经计算:研究基础。麻省理工学院出版社,剑桥,马萨诸塞州,美国,696–699。

[11]:t .蒂勒曼和 g .辛顿,2012 年。第 6.5 讲-rmsprop:将梯度除以其最近大小的移动平均值。 COURSERA:机器学习的神经网络4 (2),第 26–31 页。

[12]: C .莱迪格等人。,“使用生成式对抗网络的照片级单幅图像超分辨率”, 2017 年 IEEE 计算机视觉和模式识别大会(CVPR) ,檀香山,HI,2017,PP . 105–114,doi: 10.1109/CVPR.2017.19

[13]: 约翰·杜奇、埃拉德·哈赞和约拉姆·辛格。2011.在线学习和随机优化的自适应次梯度方法。j .马赫。学习。第 12 号决议,无效(2011 年 1 月 2 日),2121 年至 2159 年。

[14]: 莫里茨·哈特、本杰明·雷希特和约拉姆·辛格。2016.训练更快,推广更好:随机梯度下降的稳定性。《第 33 届国际机器学习会议论文集——第 48 卷》(ICML'16)。JMLR.org,1225-1234 年。

[15]: Keskar,Nitish Shirish 等,“关于深度学习的大批量训练:泛化差距和尖锐极小值。”ArXivABS/1609.04836(2017):n . PAG。

[16]:陈,丁等:“视觉表征对比学习的一个简单框架”abs/2002.05709 (2020): n. pag。

[17]: Loshchilov 和 Hutter“解耦权重衰减正则化”ArXivABS/1711.05101(2017)

哪个政党增加了更多的赤字?

原文:https://towardsdatascience.com/which-party-adds-more-to-deficits-a6422c6b00d7?source=collection_archive---------3-----------------------

提示:是共和党

减税本身不会带来回报

布什和特朗普政府都认为,“减税会为自己买单”,因为他们都在上任后不久通过了大幅减税。数据表明这种逻辑是错误的,因为美国的税率不够高,不足以在减税时产生重大的行为变化,而且典型的减税幅度也不足以产生立竿见影的效果。减税并没有刺激经济增长从而增加收入,反而只是增加了预算赤字。

围绕税收和预算赤字的讨论往往会在每个选举季重新开启,因为共和党人甚至一些民主党人担心巨额赤字和不断增长的国债。

虽然共和党人经常声称他们在财政上更负责任,但我的研究表明并非如此。与民主党总统相比,共和党执政期间每年的赤字(占 GDP 的百分比)估计会增加 0.75%至 1.2%。这一结果控制了经济条件,解释了年度赤字变化的 75%。

是什么导致了赤字?

当年度收入低于支出,政府被迫通过发行债务向投资者借钱时,就出现了赤字,就像你我从银行或信用卡借钱一样。国家债务是累积赤字的结果——当我们向国家信用卡收费的速度快于我们偿还本金的速度。

下图显示了每年赤字的年度变化,也就是说,与前一年相比,赤字增加或减少了多少。蓝色部分显示的是国防和非国防支出占 GDP 百分比的变化(乘以负一),因此支出的减少将大于零。黄色显示的是收入占 GDP 百分比的变化。当棒线总和小于零时,这意味着赤字比前一年增加了。

这张图表显示了由于收入减少或支出增加,或者两者兼而有之,赤字发生了多大的变化。例如,在克林顿执政期间,随着支出减少和收入增加,赤字持续下降。

乔治·w·布什政府经历了两次衰退,一次是任期开始时的轻微衰退,另一次是从 2007 年末到 2009 年初的大衰退。请注意,2002 年收入的减少与 2009 年一样显著。这主要不是因为人们赚的钱少了,交的税也少了——这是一项重大的减税措施,减少了收入。类似地,川普减税的影响在 2018 年显而易见,因为收入下降甚至比 2008-2009 年大衰退期间还要多。

赤字和经济周期

上图中还有另一种模式——这是一种周期性模式,赤字连续几年增加,然后连续几年减少。这是因为在经济疲软和衰退期间,赤字往往会增加,而当经济好转时,赤字往往会减少。这是因为自动稳定器,当人们和企业赚钱少的时候减少他们的纳税额,当政府伸出援手的时候增加支出的政策。

经济不景气时,政府还有其他选择。例如,布什政府和奥巴马政府都通过了一揽子刺激计划,包括减税和增加支出。这两项法律都旨在通过把钱放到人们手中来刺激经济——这是一项大多数经济学家都认为是好事的反周期政策。

然而,在经济良好的时候运行赤字,正如美国目前的状况,被称为顺周期政策,许多经济学家认为这不太理想。这似乎是共和党总统比民主党总统更典型的模式。

比较共和党和民主党的赤字政策

为了对民主党和共和党的赤字政策进行公平的比较,我们必须考虑每位总统在任时的经济状况。有可能一方运气不好,在经济衰退时期有更多的条款,这将使它看起来更挥霍无度。

有一些统计方法可以让人们估算出执政的政党对赤字变化的影响,同时考虑到对赤字也有影响的其他变量。这样的分析可以在这里找到。

第一步是了解哪些变量本身与赤字有关。下图显示了这些结果的示例。红色条显示与赤字增加相关的变量(相关性越大,影响越大),蓝色条显示与赤字减少相关的变量。

不出所料,经济增长往往会减少赤字,因为增长改善了税收征管,降低了对额外政府支出的需求。令人惊讶的是,即使在很高的水平上,民主党总统也与赤字减少有关,相关性为-32%(通常,在任何方向上 0.25 或以上的相关性被认为是社会科学中的东西)。与典型的最高边际税率上调相比,这对赤字的影响更大。

也就是说,重要的是要记住,当转向更复杂的多变量分析(估计许多变量对赤字的独立影响)时,出现在像这张相关图这样的单变量分析中的变量之间的关联经常会发生变化(或完全消失)。

经过十几次反复,我开发了一个统计模型,控制了经济条件,并估计了共和党在总统任期内的独立影响。最终模型包括直观的变量:去年的赤字,去年的人均 GDP 增长,今年的人均 GDP 增长,以及总统的政党。这个模型包含了可变经济增长和总统政党之间的相互作用。例如,它可以估计今年和去年增长不佳对赤字的影响,还可以估计共和党和民主党在经济景气或不景气时期应对赤字的差异。它还估计了两党预算赤字变化的总体差异。

总体而言,该模型解释了近四分之三的预算赤字年度变化。下图显示了模型预测的赤字变化与实际情况的对比。

这项分析有两个有趣的发现。首先,即使样本量相对较小,该模型也能够发现民主党和共和党总统之间相当大的、具有统计意义的差异,共和党每年增加 0.97% (p 值<0.01%) more to deficits on average 这种效应对于异常值也是稳健的,因为中值赤字变化的差异为 1.23% (p 值为 0.01%)。

其次,民主党总统往往比共和党总统有更积极的反周期政策。这种效应很大程度上受到这样一个事实的影响,即克林顿和奥巴马在经济形势好的时候都减少赤字,而奥巴马在经济形势不好的时候大幅增加赤字。它还受到特朗普等共和党人在经济强劲时增加赤字的影响。

使用这个模型,我们可以显示民主党和共和党政策的效果,控制经济条件。我们可以让它预测每个政党的赤字变化,保持所有经济条件不变,然后找出差异。下图显示了这些差异。大于零的值表明,鉴于当年的经济状况,预计共和党人将增加赤字,小于零的值表明,鉴于当年的经济状况,预计民主党人将增加赤字。这项分析展示了这样一种情景:如果民主党人和共和党人每年都控制总统职位,他们之间的情况会有什么不同。

总体而言,预计共和党人大多数时候会增加赤字。我的解释是,共和党人热衷于减税,但他们在削减开支方面并不成功。不过,在一些情况下,预计民主党会比共和党增加更多的赤字。红色的条柱显示那一年的部分时间正式出现了衰退。总体而言,红色柱线往往低于蓝色柱线,因为民主党人倾向于通过增加赤字来更积极地应对糟糕的经济状况。这种效应受到奥巴马反周期政策的严重影响,一般来说,由于经济衰退的严重性,这一年在分析中往往是一个异常值。从分析中去除那一年并不影响总体结论,即共和党总体上增加了更多的赤字(事实上,点估计增加了),它只是减少了互动效应。

结论

最终结果很简单:共和党总统比民主党总统增加了更多的赤字。

在选举季节,人们会说很多废话,而学者们根本没有足够的时间来进行一项同行评审的研究,以便及时解决政客们的说法。该分析试图使用透明的数据和方法实时解决此类问题,这些数据和方法可以被其他人验证和复制。

你应该选择哪种 PUBG 武器组合?

原文:https://towardsdatascience.com/which-pubg-weapon-combination-should-you-pick-f58bdc262082?source=collection_archive---------44-----------------------

使用 Python,我找到了最佳的武器组合,有希望帮助你赢得令人垂涎的鸡肉晚餐。

Unsplash 上的网帖拍摄

前阵子出于好奇下载了 PUBG Mobile,想看看炒作到底是怎么回事。让我们大致了解一下这个游戏是如何运作的:你从飞机上跳伞,然后你跑进建筑物并开始寻找护具、弹药和武器,然后你要么杀死别人,要么被别人杀死,最后存活下来的队伍赢得鸡肉晚餐。这个概念听起来很简单,对吗?然后你跑进一栋大楼,发现自己正盯着五把不同的枪,它们的名字没有给出任何线索,说明它们彼此之间有什么不同。每个玩家都可以装备两把枪,但是我怎么知道该选哪两把呢?我可能没有选择正确的,因为我不断被我的对手杀死,即使我在许多情况下开始先开枪。所以我决定,为什么不借此机会温习一下我的 Python 技能(当你实际上不得不谷歌“在 Python 上运行代码的快捷键”时,你知道你真的很生疏),并希望找到一些可以给我更好的机会带回家吃鸡肉晚餐的东西呢?快速判断一下:距离我上次使用 Python 做项目已经过去将近两年了,所以关于如何以更好的方式编码的建议肯定是受欢迎的!和往常一样,我的代码存放在 GitHub 上。

网络抓取数据集

我四处搜索 PUBG 武器统计的现成数据集,但最终没有找到( Kaggle 有一个来自官方 API 的玩家统计数据集,它可以作为其他分析的有趣数据集)。然而,我确实找到了提供武器统计数据的网站,所以我继续使用 BeautifulSoup 对官方 PUBG Wiki 进行了一些网络搜集。我不会详细讨论 web 抓取过程,因为我想更多地关注数据分析部分,所以我只强调一些部分。

虽然有一个页面给出了所有武器的统计数据,但我希望能够将它们分类成各自的类型(例如,它们是突击步枪还是轻机枪),所以我最终在将 8 个数据帧合并成一个数据帧之前,从每个武器类型的相应页面中抓取。

数据清理:在这种情况下,BDMG 和 HDMG 列中的数字意味着什么?

我还清理了缺失和奇怪的数据,用其他网站的数据(参见本文末尾的致谢部分)替换它们,这些网站列出了当前数据集中不需要任何替换的其他武器的可比值。

我似乎不能对 PWR、SPD 和 TBS 列中的值执行任何算术运算

接下来,在将 dataframe 导出为 csv 文件之前,我将所有数值列转换为 float 数据类型,以便在后续的数据分析中进行算术运算。

武器特征

下面总结了每个特性的含义(信息是从 PUBG Wiki 复制粘贴的,改动很小)

  • DMG(命中伤害)

在装甲和其他减轻因素之前施加的直接伤害

  • SPD(子弹初速)

子弹离开枪口的速度,单位为米/秒。更高的数字意味着对远距离移动目标需要更少的引导。

  • PWR(车身撞击冲击力)

一个布娃娃被拍的时候受了多大的力。更高的值意味着更强的推力。

  • 弹匣(每弹匣弹药)

弹匣所能容纳的最大弹药量。

  • TBS(拍摄间隔时间)

武器再次发射前必须经过的最短时间(秒)。

  • 模式(点火模式)

这种武器可以选择的模式。在这个区域有单个自动的武器表示它可以在单次射击模式或自动射击模式之间选择。

  • BSHT(连拍)

如果适用,单次爆炸发射了多少发子弹。

  • 突发延迟

在可以再次触发另一个脉冲之前必须经过的最小时间量(秒)。

  • AMM(弹药型)

武器可接受的弹药类型。

  • 上限(容量)

也称为批量,或占用的库存空间量。

  • ATTCH(附件)

附在武器上的东西。附件的例子包括一个允许远距离狙击的瞄准镜。

  • BDMG 0,BDMG 1,BDMG 2,BDMG 3(身体伤害等级 0,身体伤害等级 1,身体伤害等级 2,身体伤害等级 3)

分别在没有装备盔甲、装备 1 级防弹衣、装备 2 级防弹衣和装备 3 级防弹衣时对身体造成的伤害量。

  • HDMG 0,HDMG 1,HDMG 2,HDMG 3(头部伤害等级 0,头部伤害等级 1,头部伤害等级 2,头部伤害等级 3)

分别在没有装备盔甲、装备 1 级盔甲、装备 2 级盔甲和装备 3 级盔甲时对头部造成的伤害量。

我创建了一个变量来反映它属于哪种武器。

根据描述,看起来更重要的武器特性是:身体和头部伤害(如果武器造成更高的伤害,你更有可能杀死你的对手),初始子弹速度(更快的子弹速度意味着你的子弹可能在他们击中你之前击中你的对手),射击间隔时间(你通常需要多次射击才能杀死你的对手,所以更短的射击间隔时间将增加你击败对手的机会), 每弹夹弹药(如果每弹夹能装更多子弹,就不用那么频繁浪费时间重装)。

探索性数据分析

既然所有的基本细节都解决了,是时候开始有趣的部分了。让我们试着通过绘制一个相关矩阵来找出不同特征之间的一些趋势。

有很多变量意味着我们会有一个看起来很吓人的相关矩阵

快速浏览一下相关矩阵可以发现,不同等级的身体伤害之间是完全相关的,不同等级的头部伤害之间也是如此。因此,我们可以选择其中一个级别来查看,让我们只使用 BDMG 1 和 HDMG 1。身体伤害和头部伤害也高度相关,这一点也不奇怪,但是现在,为了安全起见,我们将两个变量都保留在我们的相关矩阵中。令人惊讶的是损伤与身体和头部损伤之间的相关性很低。由于身体和头部的伤害是直接影响玩家健康的因素,我们将从关联矩阵中移除伤害。

“去杂乱”的相关矩阵有望帮助我们找到一些趋势

查看“去干扰”相关矩阵,似乎在伤害和射击之间的时间(较高伤害的枪具有较长的射击之间的时间)、伤害和速度(较高伤害的枪子弹速度较慢)、每弹匣的伤害和弹药(较高伤害的枪每弹匣可以携带较少的弹药)之间存在权衡。在这三个权衡中,前两个权衡对于赢得战斗更为关键,所以我们将把重点放在它们上面。此外,鉴于身体损伤和头部损伤高度相关,我将进一步简化事情,从这一点开始只看头部损伤。简而言之,我们将着眼于 3 个变量:头部损伤水平 1 (HDMG 1),子弹初速(SPD)和射击间隔时间(TBS)。

让我们先根据武器类型绘制一张热图。在展示实际的热图之前,我将快速总结一下不同武器类型的缩写。

  • 突击:突击步枪
  • 弓:弩
  • DMR:指定神枪手步枪
  • LMG:轻机枪
  • SG:散弹枪
  • SMG:冲锋枪
  • SR:狙击步枪

热图描述了每种武器类型在 3 个关键变量上的表现(遗憾的是,由于尺度不同,颜色没有用)

这进一步重申了我们之前发现的趋势——伤害更高的枪往往子弹速度更慢,射击间隔时间更长(我们可以仅以猎枪为例)。正如本文开头所提到的,每个玩家可以装备两把枪,所以我想找出在这两种权衡下哪种搭配是最有利的。

显示不同武器类型组合在 3 个关键变量上表现的热图

我首先绘制了一张热图,用来比较不同的武器组合。这似乎描绘了一幅相似的画面,在伤害和速度之间以及伤害和射击之间的时间之间有一个权衡,但它不是非常清楚,所以也许相关矩阵可能会更好地描述事情。

武器组合的相关矩阵

我们可以看到,最大的权衡是伤害和射击之间的时间,其次是伤害和速度。

帕累托效率

当涉及权衡时,最佳组合是那些帕累托有效的组合。到底什么是帕累托有效?简单地说,如果你有两个目标,一个帕累托有效组合就是你不能在一个目标上取得进步而在另一个目标上不使自己变得更糟。假设你有两个目标,X 和 Y,在这两个目标之间有一个折衷。

说明帕累托效率

点 A 不是帕累托有效的,因为存在一个点(例如,A’),在这个点上,你至少在一个目标上更好,而在另一个目标上不会更差。点 A '和 A ' '都是帕累托有效的,因为不可能在一个目标上获得更高的价值而在另一个目标上不恶化。例如,从点 A '到 A ' ',我们得到一个较高的 X,但一个较低的 y。一个帕累托前沿只是连接所有的帕累托有效点。

在我们的例子中,我们有两个权衡,所以让我们分别来看一下。我们将从伤害和射击间隔时间之间的权衡开始。

寻找损害和射击间隔时间之间的折衷的帕累托有效组合

如上所述,帕累托有效组合是:

  1. 十字弓和冲锋枪
  2. 弩和轻机枪
  3. 弩和指定神枪手步枪
  4. 猎枪和冲锋枪
  5. 弩和猎枪

我们不能说这些组合中的一个比另一个好,但是如果我想要一个在伤害和射击间隔时间上相当的组合,也许选择组合 2 或组合 3 是个好主意。

伤害和速度的权衡呢?

在伤害和速度之间寻找帕累托有效组合(PS。如果有人能快速修复稍微重叠的数据标签,请告诉我)

在这种情况下,帕累托有效组合是:

  1. 突击步枪和轻机枪
  2. 突击步枪和狙击步枪
  3. 轻机枪和狙击步枪
  4. 指定神枪手步枪和狙击步枪
  5. 突击步枪和猎枪
  6. 轻机枪和猎枪
  7. 猎枪和狙击步枪
  8. 弩和猎枪

同样,我们不能断定这些组合中的一个比另一个好,但是如果我想要一个在伤害和速度上相当的组合,选择组合 5 或 6 可能是个好主意。

说到底,这真的取决于你是想优先考虑伤害和射击时间之间的权衡,还是伤害和子弹初速之间的权衡。然后,帕累托效率分析将提供一些武器组合供你选择,这取决于你是喜欢在一个目标上比另一个目标好得多的组合,还是喜欢在两个目标上表现相当的组合。我会选择后者,因为我进行这个分析的目的是找到一对优势互补的枪。

也就是说,我希望这个分析能帮助你赢得那顿鸡肉晚餐!

数据集的信用

提供网络抓取参考码的信用

对帕累托边界代码的信任

我应该在什么时候使用哪个 Python 数据科学包?

原文:https://towardsdatascience.com/which-python-data-science-package-should-i-use-when-e98c701364c?source=collection_archive---------15-----------------------

Python 数据科学图书馆的地图

Python 是数据科学最流行的语言。不幸的是,很难知道何时使用众多数据科学库中的哪一个。☹️

了解何时使用哪个库是快速上手的关键。在本文中,我将向您介绍重要的 Python 数据科学库。😀

资料来源:pixabay.com

你将看到的每个软件包都是免费的开源软件。👍感谢所有创建、支持和维护这些项目的人们!🎉如果你有兴趣了解如何为开源项目贡献补丁,这里有一个很好的指南。如果你对支持这些项目的基金会感兴趣,我在这里写了一个概述

我们开始吧!🚀

熊猫

Pandas 是一个帮助你理解和操作数据的工具。使用 pandas 来操作表格数据(比如电子表格)。Pandas 非常适合数据清理、描述性统计和基本的可视化。

熊猫相对来说是对大脑友好的,尽管 API 是巨大的。如果你想从 API 最重要的部分开始,可以看看我关于熊猫的书。

与 SQL 数据库不同,pandas 将所有数据存储在内存中。这有点像微软 Excel 和 SQL 数据库的混合体。Pandas 使大量数据的操作快速且可重复。

您机器上的内存容量限制了 pandas 可以处理的行数和列数。作为一个粗略的指南,如果你的数据少于几千列和几亿行,pandas 应该在大多数计算机上运行良好。

像一只真正的熊猫,熊猫是温暖和毛茸茸的。🐼

资料来源:pixabay.com

当你的数据超过熊猫的处理能力时,你可能会想使用 NumPy。

NumPy

NumPy ndarrays 就像更强大的 Python 列表。它们是构建机器学习大厦的数据结构。它们拥有你需要的多维数据。

你有每个像素三个颜色通道的视频数据和很多帧吗?没问题。😀

NumPy 没有像 pandas 那样方便的方法来处理时间序列数据和字符串。事实上,每个 NumPy ndarray 只能有一种数据类型(感谢凯文·马卡姆建议我包含这个区分符)。

对于表格数据,NumPy 也比熊猫更难处理。您不能像在 pandas 中那样在表格中轻松显示列名。

NumPy 的速度/内存效率比 pandas 高一点,因为它没有额外的开销。然而,如果您拥有真正的大数据,还有其他方法可能会更好地扩展。我有一个关于这个话题的大纲,所以让我知道你是否有兴趣在推特上听到它。👍

NumPy 还有什么用?

  • n 数组的数学函数。
  • ndarrays 的基本统计函数。
  • 从普通分布产生随机变量。NumPy 有 27 个分布可以随机抽样。

NumPy 就像没有便利函数和列名的熊猫,但是有一些速度增益。🚀

Scikit-learn

scikit-learn 库是机器学习的瑞士军刀。如果你在做一个不涉及深度学习的预测任务,scikit-learn 就是你要用的。它可以毫无问题地处理 NumPy 数组和 pandas 数据结构。

Scikit-learn 管道和模型选择函数非常适合准备和操作数据,可以避免无意中偷看您的保留(测试集)数据。

scikit-learn API 对于预处理转换器和估算器非常一致。这使得搜索超过许多机器学习算法的最佳结果相对容易。这让你更容易理解图书馆。🧠

Scikit-learn 支持多线程,因此您可以加快搜索速度。然而,它不是为 GPU 构建的,所以它不能利用那里的加速。

Scikit-learn 还包含方便的基本 NLP 函数。

资料来源:pixabay.com

如果你想做机器学习,熟悉 scikit-learn 是必不可少的。

接下来的两个库主要用于深度神经网络。它们与 GPU、TPU 和 CPU 配合得很好。

张量流

TensorFlow 是最受欢迎的深度学习库。在工业上尤其常见。它是由谷歌开发的。

从版本 2.0 开始,Keras 高级 API 现在与 TensorFlow 紧密集成。

除了在 CPU 芯片上工作,TensorFlow 还可以使用 GPU 和 TPU。这些矩阵代数优化的芯片为深度学习提供了巨大的加速。

PyTorch

PyTorch 是第二受欢迎的深度学习库,现在是学术研究中最常见的。它是由脸书开发的,并且越来越受欢迎。你可以在这里看到我关于的文章。

PyTorch 和 TensorFlow 现在提供了非常相似的功能。它们都有数据结构,叫做张量,类似于 NumPy ndarrays。张量和可以很容易地转换成 n 数组。这两个软件包都包含一些基本的统计函数。

PyTorch 的 API 通常被认为比 TensorFlow 的 API 更加 pythonic 化。

SkorchFastAIPyTorch lighting是减少使用 py torch 模型所需代码量的包。 PyTorch/XLA 允许您将 PyTorch 与 TPU 一起使用。

PyTorch 和 TensorFlow 都可以让你做出顶尖的深度学习模型。👍

统计模型

Statsmodels 是统计建模库。这是做推理频率统计的地方。

想要运行统计测试并获得一些 p 值吗?Statsmodels 是您的工具。🙂

来自 R 的统计学家和科学家可以使用 statsmodels formula API 平稳过渡到 Python 领域。

除了 t 检验、ANOVA 和线性回归等常见的统计测试之外,statsmodels 还有什么好处?

  • 测试您的数据与已知分布的匹配程度。
  • 用 ARIMA、霍尔特-温特斯和其他算法做时间序列建模。

谈到线性回归等常见公式时,Scikit-learn 与 statsmodels 有一些重叠。但是,API 是不同的。此外,scikit-learn 更侧重于预测,而 statsmodels 更侧重于推理。⚠️

Statsmodels 建立在 NumPy 和 SciPy 的基础上,与熊猫玩得很好。🙂

说到 SciPy,我们来看看什么时候用。

SciPy 🔬

" SciPy 是建立在 Python 的 NumPy 扩展上的数学算法和便利函数的集合."— 文件

SciPy 就像 NumPy 的双胞胎。许多 NumPy 数组函数也可以通过 SciPy 调用。这两个软件包甚至共享同一个【T2 文档】网站。

SciPy 稀疏矩阵用于 scikit-learn。一个稀疏矩阵是一个被优化的矩阵,当大部分元素为零时,它比一个常规的密集矩阵使用更少的内存。

SciPy 包含通用常量和线性代数功能。scipy . stats子模块用于概率分布、描述性统计和统计测试。它有 125 个分布可以随机抽样,比 NumPy 多了将近 100 个。😲然而,除非您正在进行大量的统计,否则作为一名实践数据科学家,您可能会对 NumPy 中的发行版感到满意。

如果 statsmodels 或 NumPy 没有您需要的功能,那么就去 SciPy 中查找。👀

Dask

Dask 有一个模仿熊猫和 NumPy 的 API。当您想使用 pandas 或 NumPy,但数据量超过内存容量时,请使用 Dask。

Dask 还可以加快大数据集的计算速度。它在多个设备上执行多线程。您可以将 Dask 与Rapids结合使用,以获得 GPU 上分布式计算的性能优势。👍

PyMC3

PyMC3 是贝叶斯统计软件包。比如马尔可夫链蒙特卡罗(MCMC)模拟?PyMC3 是你的果酱。🎉

我发现 PyMC3 API 有点令人困惑,但它是一个强大的库。但是那可能是因为我不经常使用它。

其他流行的数据科学包

我不会深入研究可视化、NLP、梯度增强、时间序列或模型服务库,但我会重点介绍每个领域中一些流行的包。

可视化库📊

Python 中有大量可视化库。 MatplotlibseabornPlotly 是最受欢迎的三款。在这篇文章的最后,我浏览了一些选项。

NLP 库🔠

自然语言处理(NLP)是机器学习的一个巨大而重要的领域。无论是 空间 还是 NLTK 都将拥有你需要的大部分功能。两者都很受欢迎。

梯度推进回归树库🌳

LightGBM 是最流行的渐变升压包。Scikit-learn 已经克隆了它的算法。 XGBoostCatBoost 是其他类似 LightGBM 的 boosting 算法包。如果你看看 Kaggle 机器学习竞赛的排行榜,深度学习算法不是解决问题的好方法,你可能会看到获胜者使用的这些梯度提升库之一。

时间序列库📅

Pmdarima 让拟合 arima 时间序列模型不那么痛苦。它包装了 statsmodels 算法。然而,选择超参数的过程不是完全自动化的。

Sktime 目标是做一个“时间序列机器学习的统一 Python 库”。它包装了 pmdarima、statsmodels Holt-Winters 和其他库。这是最前沿的,但很有希望。此时,它仍然需要知道它所包装的底层库的 API。增加了 2020 年 12 月 14 日的 sktime 部分* * ****

Prophet 是另一个用时间序列数据做预测的包。“Prophet 是一种基于加法模型预测时间序列数据的程序,其中非线性趋势符合每年、每周和每天的季节性,加上假日影响。它最适用于具有强烈季节效应的时间序列和几个季节的历史数据。——文件。它是由脸书创造的。API 和文档都是用户友好的。如果你的数据符合上面的描述,那就值得一试。

模型服务图书馆🚀

说到模型服务, FlaskFastAPIStreamlit 是三个流行的库,它们实际上对您的模型预测做了一些事情。😉Flask 是一个基本的框架,用于制作一个 API 或者服务一个已经过实战检验的网站。FastAPI 使得设置 REST 端点变得更快更容易。Streamlit 可以在单页应用程序中快速提供模型。如果你有兴趣了解更多关于 streamlit 的知识,我在这里写了一个入门指南。

资料来源:pixabay.com

包装

以下是何时使用哪个主要 Python 数据科学库的快速回顾:

  • 熊猫进行表格数据的探索和操作。
  • NumPy 用于普通分布的随机样本,以节省内存或加快运算速度。
  • scikit-learn 用于机器学习。
  • 深度学习的 TensorFlowPyTorch
  • statsmodels 用于统计建模。
  • SciPy 用于在 NumPy 或 statsmodels 中找不到的统计测试或分布。
  • Dask 当你想要熊猫或者 NumPy 但是拥有真正的大数据的时候。
  • PyMC3 为贝叶斯统计。

我希望您喜欢这个关键的 Python 数据科学包之旅。如果你有,请在你最喜欢的社交媒体上分享,这样其他人也可以找到它。😀

现在,您有望对不同的 Python 数据科学库之间的相互关系以及它们之间的联系有一个更清晰的心理模型。

我写关于 PythonSQLDocker 和其他技术主题的文章。如果你对这些感兴趣,请注册我的邮件列表,那里有很棒的数据科学资源,点击阅读更多内容,帮助你提高技能。👍

资料来源:pixabay.com

探索愉快!😀

哪个分支得票最多?

原文:https://towardsdatascience.com/which-subreddit-upvotes-the-most-18ab20567e25?source=collection_archive---------68-----------------------

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

作者图。这些值是基于 2018 年发布到 Reddit & Imgur 的约 45,000 张图片的估计值。方法和结果详述如下。

本文将解释如何通过合并两个独立的数据集来计算上述结果;一个来自Reddit API,另一个来自Imgur API

大多数社交媒体平台不会公开透露每条帖子的浏览量。 Reddit 也是一样的,但是有一个简单的漏洞可以让我们估计浏览量:

  1. 许多 Reddit 帖子都是图片
  2. 这些图片的一个子集被托管在不同的网站上 Imgur
  3. Imgur 显示视图计数

使用这两个网站的 API,我们可以估计 Reddit 帖子的浏览量。

Reddit 上的快速背景

Reddit 被分成多个社区,称为子社区。Reddit 的货币是upvots;用户给帖子的投票越多,它的排名就越高。将这些信息与我们从 Imgur 获得的浏览量进行交叉引用,可以得到每个子编辑上投票的浏览者的百分比。

如何使用 API 收集数据

下面的代码片段演示了如何使用Python Reddit API Wrapper(PRAW)Imgur Python API 来收集每个帖子的元数据。注意,要让第 6 行& 13 起作用,您需要通过在这里注册 Reddit API 的和在这里注册 Imgur API来获得凭证。

使用 Reddit & Imgur APIs 的 web 抓取初学者指南

1 年的网页抓取结果

这是我离开一个网络搜索器(整个 2018 年)收集几十个专注于分享模因的子编辑的热门帖子数据后的发现。(这些子编辑并没有得到我的认可,甚至没有被我查看过,我只是搜索了最流行的 meme 子编辑,并将其添加到我的 web scraper 代码中)。

2018 年,这些子主题上的热门帖子的网络抓取结果

有趣的是,似乎倾向于更频繁使用 Imgur 的子街道也倾向于那些不经常投票的子街道:

作者图。这些值是基于 2018 年发布到 Reddit 的约 550,000 张图片的估计值。

警告/假设

这些结果是基于一些主要假设的估计值:

  • 我假设 Imgur 上的浏览量是查看该帖子的 Reddit 用户的数量…这并不是在所有情况下都是正确的。Reddit 用户可以发布一个链接,链接到几个月前添加到 Imgur 的一张图片,这意味着估计的% Reddit 用户投票率会比实际情况低。
  • 我假设 Imgur 和 Reddit APIs 以相同的频率更新;如果不是这种情况,它将在估计中引入一个微小的误差。
  • 我假设 Reddit 上的每个视图都被 Imgur 注册为视图;如果不是这种情况,它可能会引入一个重大的估计误差。

获取数据集和后续步骤

Imgur 上的 45,000 个 Reddit 帖子的数据集在这里:

[## reddit 和 imgur 发布数据集

Imgur 上托管的 Reddit 上的 meme 帖子的元数据

www.kaggle.com](https://www.kaggle.com/gmorinan/reddit-and-imgur-meme-metadata-combined)

现在我们有了一种估计迷因浏览量的方法,我们可以将这与迷因图像识别系统结合起来,找到最受欢迎的迷因模板。我将在下一篇文章中更详细地讨论这个问题。

在新冠肺炎疫情的纽约市,哪些地铁站对通勤有风险?

原文:https://towardsdatascience.com/which-subway-stations-are-risky-for-commute-in-new-york-city-amidst-the-covid-19-pandemic-a9c5e18dce39?source=collection_archive---------74-----------------------

冠状病毒及其对纽约市居民通勤模式的影响

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

我们与日常通勤有着独特的联系,无论是出租车、公交车、地铁,还是我们的私人汽车和自行车。在病毒爆发期间,我们不得不以不同方式改变常规。虽然疫情带来了一些挑战,但我们确实有一些方法来应对它!在这篇博客中,我们将深入探究纽约市目前正在发生的事情,并发现我们的日常通勤是否安全。

1.你在纽约的日常通勤有多安全?

超过 383,770 例冠状病毒病例和 30,244 例死亡,纽约市成为世界上冠状病毒感染最严重的城市。居住在 302 平方英里土地上的 800 多万纽约人使得公共交通在日常通勤中的作用变得非常重要。事实上,它与美国其他城市的不同之处在于其较低的个人汽车拥有率和明显较高的公共交通使用率!

图片由 Unsplash 上的 @renolaithienne 提供

纽约地铁一直是纽约人的主要交通选择。运营纽约大部分交通系统的 MTA 大都会运输署报告称,截至 2013 年,地铁客流量高达 17 亿人次!与城市公交车的 8.03 亿相比,这是一个巨大的数字。

现在来看目前的情况,由于冠状病毒,地铁使用率明显下降。但是,像医生,基本服务人员和其他人,谁仍然负担不起个人通勤和依赖地铁呢?他们面临的风险最大,但他们的选择有限。

在接下来的章节中,我们将了解如何利用数据让纽约人的日常通勤更加安全!

2.让数据说话

纽约市卫生部门每日公布邮编等级为 的 covid 病例,此处 。让我们试着在地图上画出来,看看纽约市的病例是如何随着时间的推移而增加的。

纽约市不同地区的 covid 19 例增长

以下是目前的情况:

纽约市目前的 Covid 19 病例

就阳性病例总数而言,以下是 5 个受打击最严重的地区:

五大受灾最严重的地区。

电晕(相当巧合!),有 241,940 例,似乎是目前受影响最严重的地区,其次是布朗克斯区、皇后区、布鲁克林区和东布朗克斯区。

现在,我们如何知道纽约地铁通勤者的日常运动模式?MTA 每周提供这些数据,可以在 这里 找到。这为我们提供了每个车站在 4 小时间隔内的进出总数。我们可以通过将进站和出站的人数相加得到每个车站的总人数。让我们标出一些最繁忙的车站。

纽约最繁忙的地铁站

我们还可以通过找到平均客流量来找到前 5 个最繁忙的车站。绘制一段时间内的总客流量,我们得到这样的结果:

纽约五大最繁忙的车站——客流量随时间变化

平均每天约有 66k 人出行,151-145 ST 站最繁忙,其次是 59st 站和 23st 站。

但是,在 covid 爆发后,哪些车站出现了最大的每周通勤人数增长?对于这一点,让我们将数据限制在 3 月 22 日之后,因为大约在这个时候,纽约市州长要求所有非必要的企业关闭,居民留在家中。

为了实现这一点,我们首先找到每周的总客流量。在此之后,每个车站的客流量变化可以通过简单地减去第一周和最后一周的客流量而得到。

封锁后客流量增加的车站。

结果还挺有意思的!从 3 月 23 日起,在总共 240 个站点中,有 20 个站点的每周平均流量有所增加。在这些车站,大约有 1000 多人在封锁开始后出行。

在这 20 个站点中,增长最快的 3 个站点是联合大道、贝德福德大道和长木大道

你可以用这个条形图看到这 20 个车站的客流量的增加。

锁定后客流量增加的车站的对比图

对于大多数地铁站来说,使用这些地铁的人数有所减少,这是很自然的。现在,让我们看看如何将这与冠状病毒爆发联系起来,以找出有风险的站点。

3.哪些站有风险?

结合一个地区的冠状病毒病例和地铁站的总客流量,我们可以将风险因素与每个地铁站相关联。

为了简单起见,让我们考虑在一个车站的风险与它所在的邮政编码的冠状病毒阳性病例总数和在任何给定的一天在该车站的旅客总数成比例。

对于冠状病毒病例的总数,我们考虑该站位于哪个邮政编码。虽然这不是一个很好的方法来获得一个站点的这个数字,但是我们必须使用受可用数据粒度限制的 zip。你可以在我的另一个博客中找到更多关于为什么邮政编码不好的信息。

[## 为什么您不应该使用邮政编码进行超本地和最后一英里分析

邮政编码和区域边界忽略了它们内部属性的细微差别!

towardsdatascience.com](/why-you-shouldnt-use-zip-codes-for-your-hyperlocal-last-mile-analysis-3b9f8613bcc1)

因此,我们可以说一个车站的总客流量和总阳性病例数的乘积给出了相关的风险。由于这些数字在不同的标度上,我们在乘法之前将它们归一化。

因此,我们的车站风险公式看起来像这样:

其中 NORM 是时间窗口 t 中的最小-最大标准化值

经过一些地理空间的沉重负担,我们得到了一天的站风险。我们可以在这里看到同样的形象化:

由此,我们实际上可以看到随着时间的推移,前 5 大风险站是什么。

五大风险站—随时间演变

五大风险站—比较

如果我们考虑今天,最危险的车站是 451,联合大道和 111 街的 449。

这些站点在其邻近地区有最大的病毒爆发以及最大的流量增长,自 3 月 22 日以来流量一直在增加。

你可以在这里找到上面分析的代码: 笔记本 要发现其他站的风险,看一看控制台 这里

结论

理解运动模式能以惊人的不同方式帮助我们。此外,对正在发生的事情的可见性给了我们探索未知的信心。在疫情,每天的通勤模式不仅可以更好地规划基本服务,还可以更好地了解周围发生的事情。所以,让我们收集一些数据,想想在这段困难时期我们能做些什么!

原载于 2020 年 6 月 29 日https://blog . locale . ai

哪个翻译?

原文:https://towardsdatascience.com/which-translator-870bae18f3bf?source=collection_archive---------46-----------------------

用数据科学研究村上春树译者的风格

阿尔瓦·普拉特在 Unsplash 上拍摄的照片

作为一个狂热的小说读者,我经常想知道译者的风格对翻译小说的影响。尤其是,我一直对村上春树的作品很好奇。他用日语写作,有三个主要的英语翻译:阿尔弗雷德·伯恩鲍姆、杰伊·鲁宾和菲利普·加布里埃尔。我读过的有多少是村上的,有多少是译者的?不同的译者对原作有不同的理解吗?鉴于日语和英语之间的语言鸿沟,这在我看来很有可能。这肯定是村上的主要译者之一杰伊·鲁宾在《纽约客》中给出的观点:

“当你读村上春树的时候,你在读我,至少百分之九十五的时候,”

村上的大部分作品只有一个译本,因此很难直接比较译者的风格。然而,一个例外是《发条鸟编年史》的第一章。主要翻译是杰伊·鲁宾,但它也作为短篇小说出现在《大象消失》中,这次由阿尔弗雷德·伯恩鲍姆翻译。这是两个译本。

首先是鲁宾:

电话铃响的时候,我正在厨房里煮着一锅意大利面,一边吹着口哨一边听着调频广播,播放罗西尼的《偷喜鹊》序曲,这一定是煮意大利面的完美音乐

然后由伯恩鲍姆:

“那个女人打电话来的时候,我正在厨房做意大利面。再过一会儿,意大利面就做好了;我在那里,伴随着调频收音机,吹着罗西尼的《La Gazza Ladra》的前奏曲。完美的意大利面烹饪音乐。”

总体感觉是一样的,但是有一些非常明显的差异,即使是在这个简短的摘录中。译者在选词、句子结构甚至时态上做出了不同的决定。

这些差异能让机器学习模型预测村上作品样本的译者吗?如果是这样的话,这种模式的特征是否可以用来洞察译者的风格?这就是我想要知道的。本文概述了项目期间的主要步骤和决策,但代码也可以在这里找到。

数据准备

与许多数据科学项目一样,最初的挑战是收集和准备数据。我有许多不同数字格式(epub、pdf、docx)的村上的书,第一步是用 python 将这些不同的文件读入标准化的文本文件。epub 格式是最具挑战性的,在反复试验之后,我发现这种方法在使用 EbookLib 和 BeautifulSoup 包时效果很好。

一旦书籍装载完毕,下一步可能就不那么典型了。对于给定的数据集,什么样的数据点通常是非常清楚的。预测房价时可能是一栋房子,预测推特情绪时可能是一条推特。对于这个项目,不太清楚使用什么。一种选择可能是将一个章节视为一个数据点。然而,对于一个只有七本书的数据集,我总共只有大约两百个章节。当对任何具有多种特征的数据集执行机器学习时,我们通常需要几千个数据点。

另一个考虑因素是样本的大小。在区分译者时,我们可能希望使用一些特征,如使用的副词数量或独特单词的范围。为了使这些类型的特征具有可比性,每个文本样本的大小应该相同。不幸的是,章节、句子和段落的长度可能会有很大差异,因此很难进行比较,而根据书籍的格式,即使是页面的长度也可能有所不同。因此,我决定将书中的文本分成长度约为 1000 个字符的文本块。实际的组块长度大小不一,因为它们在句号处被分开,以避免组块包含部分句子。然后,可以更有把握地将生成的任何计数特征归一化为 1000 个字符的文本块的等价物,从而可以使用该特征来比较文本块。

显示每本书文本量的条形图,由译者用颜色编码。请注意,《挪威的森林》的某些章节可以由两位译者翻译,而《大象消失》是一部短篇小说集,不同的故事由不同的译者翻译。

特征工程

设计合适的功能对项目至关重要。特色需要与翻译风格相关,而不是书籍的整体内容或主题。字符、位置或主题等特征在预测特定文本时非常有用。然而,它们很可能与潜在的故事有关,而不是在翻译过程中做出的任何决定。

我发现构建在高性能空间库之上的 textacy 库在生成合适的特性方面非常有用。每个文本块首先被转换成空间文档,然后可以生成文本的各种基本度量。这些是像句子的数量,独特的词的数量和单音节词的数量。这些特征似乎有助于区分译者。一个译者可能喜欢更长的句子,或者另一个译者可能使用更广泛的词汇。

用 textacy 做词性分析也很简单。因此,对于文本块中的每个单词,我们可以生成一个标签——动词、代词、形容词等等。不同词性的计数似乎也有助于区分译者。

译者会对某些常用词有偏好吗?我对每位译者进行了一次单词包分析,然后列出了最常用的单词,每种情况下都标准化为该译者使用的单词总数。不出所料,像“the”和“and”这样的词非常常见。像“他”、“她”和“曾经”这样的词也经常被使用,而且译者之间的使用频率也有所不同。我把这些作为特征添加进来,因为它们看起来很普通,与一本书的主题无关,但可能与译者的风格有关。稍后我会回到这个假设!

每个译者最常用的 10 个单词的相对频率。

也许一个特定的译者也可能对某些形容词或副词有偏好。我查看了每位译者最常用的副词和形容词,并再次选择了几个看起来足够通用的词,它们可能是译者的指示,而不是潜在的故事,例如像“好”或“小”这样的词。

使用情感分析来区分译者似乎有潜在的风险,因为文本的情感可能与故事本身相关联,任何译者都希望准确地翻译原文的整体情感。尽管如此,我还是使用 VADER 软件包生成了情绪得分,该软件包给出了积极、消极和中性情绪的分值,总计为 1。

每本书/译者组合的 VADER 情绪得分堆积条形图。

在这一点上,如果给我更多的时间,我会理想地建立起我的翻译风格的领域知识,或者更好的是,与专家讨论,试图产生一些更有针对性的功能。然而,我已经有了 90 个特性,我很好奇它们是否足以构建一个工作模型。

特征组合建模

现在我有了一些有趣的特性,我可以尝试预测给定文本块的译者。从仅使用 textacy 基本计数的简单逻辑回归模型开始,我添加了额外的特征组,每次都重新运行建模,以了解每种类型的特征对预测准确性的影响。

用随机改组对数据集进行训练/测试分割。模型超参数进行网格搜索,交叉验证的准确性用于衡量每个模型的预测成功,以及混淆矩阵和 ROC AUC 评分。

特征数量不断增加的模型的交叉验证准确性得分和 ROC AUC 值。

我惊喜地看到,即使功能有限,简单的逻辑回归模型的得分也远远高于 0.40 的基线准确度(即,比默认选择最常见的翻译器要好)。

我们可以看到,基本的文本计数和词性计数对准确性有很大的贡献。当我们看到 ROC-AUC 分数提高时,单个单词计数对预测 Philip Gabriel 翻译特别有益。一些特定副词和形容词的数量也略微提高了预测能力。另一方面,增加 VADER 情感分数并没有显著提高准确性,事实上,在测试集上产生了较低的准确性。因此,我放弃了对它们的进一步分析。

总的来说,这是一个非常积极的结果,意味着我可以继续第二个目标,从模型特征中获得译者风格的洞察力。然而,在此之前,我想尝试其他可能产生更准确预测的机器学习算法。

比较机器学习算法

有许多潜在的模型可以使用,一般来说,在没有测试的情况下,很难说哪种模型在给定的任务中表现更好。测试和比较了几种替代模型,从相对简单的算法(如 KNN 算法)到更复杂的集成方法和神经网络。

各种建模算法的交叉验证精度,每种算法都具有相同的输入特征。

从一开始,我的目标就是生成一个准确的预测模型并且能够解释预测是如何做出的。增压,SVM 和多层感知器神经网络都产生了比逻辑回归更高的预测精度。然而,它们通常不太容易解释。因此,使用逻辑回归模型继续进行进一步的分析和解释。

调查最有信心的预测

也许这个项目最具启发性的阶段是审查每个译者最有把握预测的文本块以及模型特征。由此我可以开始对译者风格的差异有所了解。

使用逻辑回归模型的每个译者的功能重要性条形图。

上图显示了逻辑回归模型中预测每个译者优于其他译者的最重要的特征。具有浅红色的正面特征和深红色的负面特征。由此我们可以说,一般来说,翻译风格有以下特点:

Birnbaum :单音节词多|句子短|动词少

鲁宾:更长的句子|更多的代词|更多地使用‘had’这个词

更少的代词|更多的动词|更多地使用“他”这个词

下图有助于总结每个译者最有把握预测的文本块的一些关键特征的值。

由黑点指示的每个翻译者的预测文本样本的分析。红色条带显示了每个翻译人员的这些功能的趋势。

我为每个译者选择了最有把握的预测(通常概率> 95%),以观察这些文本块的实际特征如何比较。在图中,我们可以看到一些关键预测值的完整分布为红色条带。灰色菱形表示给定翻译者的意思。黑点显示了每种情况下最有把握预测的块的值。有趣的是,我们可以看到单词“had”是 Jay Rubin 的强预测词,而单词“he”是 Philip Gabriel 的强预测词。

突出显示单词“had”和“he”的每个译者的最佳预测文本样本。

通过在上面的强预测样本中突出显示这些单词,我们可以看到加布里埃尔文本是以第三人称写的,而伯恩鲍姆和鲁宾都是以第一人称写的。鲁宾的文本主要是过去完成时,而其他两个主要是简单的过去时。这两种差异似乎更可能与原文有关,而不是译者的任何决定。

删除特征后重新建模

更深入地研究文本,我们发现加布里埃尔翻译的小说《海边的卡夫卡》是用第三人称写的,而村上的许多其他小说都是用第一人称写的。因此,该模型更有可能使用“他”这个词的频率来预测小说,而不是译者的风格选择。鲁宾翻译的《发条鸟编年史》(The Wind-Up Bird Chronicle)也是如此,该书包含大量过去完成时的文本,因此,模型很可能再次使用单词“had”的频率来预测小说,而不是译者的风格。

因此,在没有与单词“had”和“he”的频率相关的特征的情况下,重新运行逻辑回归模型。

使用逻辑回归模型的每个译者的功能重要性条形图。这次去掉了“有”和“他”的特征。

通过这个调整后的模型,我们可以更好地描述翻译风格:

Birnbaum :更短的句子|更少的动词|更多独特的单词

鲁宾:更长的句子|更多的代词|更少的副词

加百列:少用单词‘表示’|少用代词|多用动词

与故事本身相关的特征的这个问题部分是由于最初的随机训练/测试分裂而出现的,该分裂在测试模型时采用每本书的一些部分来训练模型,并且采用来自同一本书的其他部分。我们可以通过把完整的书放在一边作为测试集,并在剩余的书上进行训练来避免这个问题。

用新的训练/测试分割重新建模

因此,作为对建模方法的最终确认,我使用非随机训练/测试分割重新运行了逻辑回归建模(仍然删除了“had”和“he”计数特征)。

我有《挪威的森林》的几章和《发条鸟编年史》的一章,这本书被翻译了两次,一次是杰伊·鲁宾,另一次是阿尔弗雷德·伯恩鲍姆。这提供了一个很好的控制测试集,因为原始的日语文本是相同的,唯一的区别是翻译。

这个测试运行了两个版本。首先,在训练集中使用所有三个译者的剩余书籍,但是在测试集中仅使用上面概述的来自伯恩鲍姆和鲁宾的文本。

这次的基线精度是 0.50。在这种情况下,交叉验证的准确性不太相关,重点是测试集准确性得分 0.55。幸运的是,该模型仍然能够击败基线(尽管差距较小),并证实了使用可用特征预测译者是可能的。下面显示的区别特征包括 Gabriel,即使他不在测试集中,因为他包括在训练集中:

使用逻辑回归模型和新的训练/测试分割的每个翻译者的特征重要性条形图

现在我们有:

Birnbaum :更短的句子|更少的动词|更多独特的单词

鲁宾:较长的句子|较多的代词|较少的副词

加布里埃尔:少用单词‘表示’|少用代词|多用动词

由于测试集只有两个翻译人员,Birnbaum 和 Rubin,我运行了第二个版本,在训练集中也只有这两个翻译人员。由于不再有假阳性 Gabriel 预测,测试准确度在 0.67 处显著提高。

使用逻辑回归模型的每个翻译者的特征重要性的条形图,以及仅使用 2 个翻译者的新的训练/测试分割。

因为只有 2 个目标类别,所以模型中只有一个功能集,如上所示,那些预测 Rubin 而不是 Birnbaum 的:

如宾:较长的句子|较多的助词|较少的字|较少的独字

我们发现了什么?

首先,通过随机训练/测试分割,所有测试的模型都能够预测测试数据集的翻译者,其准确度远高于基线分数(即,优于默认选择最常见的翻译者)。然而,可能很难知道模型是在预测一本书还是它的译者。

这引出了一个重要的教训,在这种情况下,随机的训练/测试分割不是最好的方法。通过查看模型对每个类别的最有信心的预测以及模型中功能的重要性,很明显,一些功能可能会预测一本书,而不是它的译者。通过使用一个只包含相同原文重复翻译的测试集,我可以确定模型的预测只基于译者的选择。幸运的是,以这种方式生成的模型仍然能够做得很好,特别是当它只在测试集中由两位译者翻译的其他文本上进行训练时。

那么翻译风格的实际差异呢?从这个最终模型中,我们可以说鲁宾倾向于使用比伯恩鲍姆更长的句子,以及更多的助词和更少的独特词。要确定 Gabriel 的翻译与众不同还有点困难,但从早期的随机训练/测试分裂训练模型来看,他似乎比其他人使用更多的动词和副词,更少的代词。

这个项目仅仅触及了这种分析的可能性。当然可以生成更多定制的功能,甚至可以利用原始的日语文本来帮助开发基线信息,以便与译文进行比较。

我当然喜欢第一次看这个话题,我希望你也觉得有趣!使用的所有代码都可以在 GitHub 上获得。如果您有任何意见或建议,请随时联系我们。

艾是谁?数字足迹。

原文:https://towardsdatascience.com/who-am-ai-digital-footprints-8d5cc0d1dee3?source=collection_archive---------73-----------------------

当您独特的可追踪数字活动勾勒出您的轮廓时。

“你永远不会有第二次机会给人留下第一印象。”—安德鲁·高安德

我是谁?这个问题也许是人类的基本问题之一。经过不同的哲学家、心理学家、艺术家和神经科学家的讨论,由于其不同的含义或前景,它一直是一个难以定义的概念。

我们指的是心灵、存在、灵魂、意识吗?对商业领袖来说幸运的是,也许对我们来说不幸的是,没有必要释放他们内心的精神分析之父弗洛伊德来解决它,即使现在网飞试图知道所有的“真相”。

正如我所说的,在商业世界中,有一种更简单的方式来了解我们是谁,至少在职业领域是这样的:只要注意别人如何看待我们

照片由托尼廖Unsplash

如果你想了解更多,请访问oscargarciaramos.com

我这是什么意思?

几项调查证实,我们在工作中的表现通常取决于人们对我们的看法:他们如何衡量行为和行动,他们对我们的个性或动机的看法,甚至是与其他同事的比较。没有比分析我们的评价或个人品牌调查更简单的方法来了解我们是怎样的,或至少我们是如何被感知的。

认为我们可以在职业上进步而不用担心别人对我们的看法是没有意义的。在专业背景下,以巧妙和聪明的方式展示自己是进步的关键。反馈本身总是好的,然后一个人学会过滤它,并以他/她认为的方式假设它。

我给大家分享一个例子 :

上午 9 点我们从办公室的门进去。分析开始了,第一次早上握手(“嗯,这家伙很有动力”),会议室里我们的声音(“多好的合作者啊!”),以及他/她今天选择的香水(“清新敏感”)。但不仅如此,微笑,打哈欠,或一些窥探的目光,正在定义我们的个人资料。

然而,我们进入了网络世界。

这些数据会变成什么?

人工智能模型的燃料,专门用来追踪我们的 【脚印】 。我应该雇用你吗?投资你的创业公司?和你合作?或者我离你越远越好?

所有的公共信息都可以用来评估我们,决定我们的偏好和塑造我们,这要么归功于我们的人口统计位置,要么归功于我们的消费行为。什么是 主要目标 生成并对比假设,这些假设允许我们确定我们在不同提议场景中的成功概率。

我们完了!不,我们还有其他选择。我们有机会选择我们想要使用的头像,我们设计的在线档案,最重要的是,了解我们的档案是如何被使用和利用来战略性地调整它。

如何理解算法

算法的偏差误差比很多人想象的更人性化。人工智能专注于识别信号和模式,就像我们一样,但我们可以说是以一种更“公式化和规定性”的方式。钥匙在哪里? 理解公式。

在改善我们的数字档案时,需要注意哪些重要的事情?

正如我在之前的帖子中提到的, 嘿 Siri,我能帮你吗?文本和语音分析是一个快速发展的领域,它基于自然语言处理(NLP),允许在不同的个性维度(如兴趣、智力或情绪)与我们使用的词语之间进行映射。像 IBM Watson 这样的产品允许我们进行情感分析,将个人语言风格转化为完整的个性特征。

虽然没有放之四海而皆准的公式,但有一些一致的模式:

  • 积极词汇的使用,如“有趣”或“难以置信”通常与外向性有关。
  • “担心”和“恐惧”通常表明人们有悲观的倾向。
  • 使用像“编年史”或“记叙文”这样的复杂词汇来描述聪明和好奇的人。
  • 而系统地使用诸如“我”、“我”和“尤其是我”之类的自指代词可能是自恋倾向的标志。

录像

有一些应用程序可以分析我们在互联网上发布的视频。像 Hirevue 这样的公司专注于在招聘过程中自动翻译身体语言和面部表情。如果你发布视频,确保它们能很好地代表你。

声音

声音传递情感和真诚,以及其他许多东西。 韵律 是语言学的一个分支,它正式地分析和表现口语表达的那些要素,如重音、声调和语调。甚至我们的声音也允许我们给出关于我们健康的线索。

形象

让我们停止认为面部识别是危险或有害的。我们自己,有意识或无意识地,对外表产生偏见,包括性别、年龄和种族,尽管我们不应该这样。让我们在这方面取得进展。

社交网络、帖子、喜欢和分享

数量、质量和内容。

没有一家公司会公开承认在招聘或评估候选人的过程中使用了这种技巧。不要被愚弄。

您发布的任何内容或行为都可能与您的个性、信仰、消费者行为甚至政治偏好相关联。

HiredScoreHumanticAllyoCrystal Knows 都是依靠人工智能理解员工和候选人的语音、文本和视频含义的公司的例子,这样他们就可以创建一个数字档案,并以某种方式预测他们的行为。自动的。

那么,下一步是什么?

你的个人资料(“自己的数据”)视为你周围人的个人资料或参考群体是将军会算法、试图评估你的人和组织的关键。

找到合群和突出之间的平衡。

第一印象很重要。

在每一次新的互动中,你都在被评估。

欢迎发表评论或分享这篇文章。跟随 me 进行未来岗位。

如果你想了解更多,你可以在oscargarciaramos.com找到我

谁是数据科学家?

原文:https://towardsdatascience.com/who-are-data-scientists-c5a4f09fdb4c?source=collection_archive---------42-----------------------

使用 Stackoverflow 调查了解数据科学

阿达·洛芙莱斯跟随 CRISP-DM [ 公共领域

介绍

作为一个希望在我的工作中引入更多数据科学的人,我觉得观察那些已经在这个领域中的人的特征会很有趣——看看这些特征是否与其他开发人员不同。

Stackoverflow 用户调查是获取包括数据科学家在内的各种开发人员详细信息的绝佳资源。我的分析基于 2019 年的调查结果,共有 88,883 份回复。

谁是典型的程序员?

我想看看谁是典型的程序员。它们的属性是什么?我们能以任何方式概括它们吗?更进一步,我们能不能确定一个典型的数据科学家。

首先,我查看了最常见的问题和答案。对于一个问题,最常见的回答是“是”或者“你把编程作为一种爱好吗?”。大约 80%的受访者这样回答。

[图片由作者提供]

并不是所有的问题都可以进行如此简单的分析,因为许多问题允许多重答案。例如,给了回答者一长串可供选择的编程语言,外加一个输入其他语言的框。一旦我删除了这些信息,我发现 JavaScript 成了最流行的语言(几乎有 60,000 个用户)。

[图片由作者提供]

虽然这些单个响应的统计数据很有趣,但我觉得定义典型编码者的最佳方式是查看所有响应,并找到所有答案的最常见组合。

需要注意的是,虽然大多数答案是分类值或分组值,但有四个问题允许连续的数值。为了处理这些,我为四个四分位数创建了存储桶(即每个存储桶覆盖 25%的值范围)。

很明显,这种方法将反应分成许多非常小的片段。我发现,根据这个定义,最常见的一组答案只出现了 15 次……而这 15 个人只回答了 4 个问题。

典型的编码员回应—其他未显示的回答全部“(无回应)”[图片由作者提供]

也许到目前为止我们所能说的就是开发人员是独特的个体,并不都是一样的!

使用相同的方法,但只关注数据科学家,没有明确的“赢家”出现,因为所有答案的组合只出现一次。数据科学家更是独一无二!😃

是什么让数据科学家脱颖而出?

不再只看典型的反应。接下来,我想看看我们是否能确定一些明显使数据科学家不同于其他开发人员的属性。我们能根据这些属性预测哪些开发人员是数据科学家吗?

我想把这个建模成机器学习分类。首先,我需要一个目标变量来训练我们的模型。“DevType”问题似乎是这个问题的关键,但是首先我们需要从这个多答案字段中提取不同的角色。“数据科学家或机器学习工程师”是最准确描述我们目标群体的价值观。通过这种方法,我们可以说 6,460 名受访者是数据科学家。

[图片由作者提供]

下一步是准备数据,包括:

  • 删除对预测没有帮助的无关字段
  • 将分类值转换为数值
  • 删除缺少值的行
  • 缩放特征,以便它们在我们的模型中具有相同的权重

之后,是时候训练和测试我的模型了。我选取了三种分类算法进行评估:朴素贝叶斯、Ada Boost 和梯度 Boost。当我比较这三种算法的结果时,有一些有趣的结果:

  • 朴素贝叶斯通常表现不佳,除了在消除假阴性(召回)方面——不到 2%的数据科学家没有正确分类
  • Ada 增强和梯度增强彼此表现相似;两者都有 93%的准确率,同时在消除假阳性(精确度)方面做得一般,在消除假阴性(召回)方面做得很差

[图片由作者提供]

总的来说,我觉得 Ada Boost 算法给出了最令人鼓舞的结果。整体的准确性很好,并且它在精确度和召回率上达到了最小最差的平衡(由 f1 分数表示),但是这个模型当然还有很大的改进空间!

数据科学具有包容性吗?

我的最后一个问题是,数据科学是否是一个包容性的领域?或者更确切地说,它是否比其他编码学科在 it 从业者中表现出更大的多样性。少数群体在数据科学中有更好的代表性吗?

我决定关注多样性的三个主要表现——种族、性和性别——并排除任何没有回答这些问题的回答。我们可以很快看到,编码总体上是由白人异性恋男性主导的…

按种族划分的开发者数量[图片由作者提供]

按性别统计的开发人员数量[图片按作者]

按性别统计的开发者人数[图片由作者提供]

与前面的问题一样,我们使用“数据科学家或机器学习专家”的角色来划分我们的数据。创建了多样性小组来记录性别、性和种族的各种组合。多样性分数也是通过计算一个人不属于优势群体的三个维度的总数来计算的。

观察多元化团队的分布,我们可以看到数据科学家团队中有 218 个团队,而其他开发人员团队中有 550 个团队。当您考虑到数据科学家群体要小得多时,平均而言,这意味着两位数据科学家来自不同多元化群体的可能性超过四倍(24 比 109)。

现在看看多样性得分,我们发现得分每增加一分,数据科学家的比例就会增加。例如,44%的数据科学家不是白人异性恋男性,而其他所有开发人员中只有 40%不是

[图片由作者提供]

结论

  1. 编码者实际上并不完全相同。没有一组答案经常出现。事实上,如果我们只看数据科学家,我们会发现没有一组答案会出现超过一次!
  2. 数据科学家和其他开发人员没有什么不同。或者至少还不足以让我们根据他们的其他回答,自信地预测哪些开发人员是数据科学家(目前还没有!)
  3. 数据科学比其他开发角色更加多样化。不是很多,但有一个可测量的差异。

完整的代码和分析可以在这里找到https://github.com/deacona/stackoverflow2019

感谢阅读!

摩洛哥哪些人没有银行账户?

原文:https://towardsdatascience.com/who-are-the-unbanked-in-morocco-insights-from-a-2017-world-bank-survey-using-supervised-learning-d0cecc57f037?source=collection_archive---------67-----------------------

使用监督学习的 2017 年世界银行调查的见解(第一部分)

最近,摩洛哥政府向因新冠肺炎而受到经济影响的公民每月发放津贴。大规模的操作是通过手机协调的:人们输入他们的信息和他们有资格获得的援助类型,然后他们收到一个 PIN 码,他们后来用它从 ATM 机取款。

我的祖父是这个项目的受益者,他从银行取回钱后兴奋地打电话给我。他以前从未使用过自动取款机,他惊讶于机器是如何在不需要与人互动的情况下将现金交给他的。

我很困惑:为什么我 80 岁的祖父——他对互联网、智能手机和 WhatsApp 的热情早已消退——突然对一台自动取款机感到兴奋?事实是,我从来没有想到我爷爷从来没有银行账户,借记卡,贷款,或者与银行机构有任何联系!

因此,我试图了解像我祖父一样从未购买过银行产品的数百万摩洛哥人是谁。我知道截至 2017 年,“银行”人口的官方统计数据徘徊在 56%左右(来源:银行 al Maghrib ),但我想了解无银行人口的微观经济特征:他们是谁?

幸运的是,世界银行在 2017 年进行了一项详细的全球金融包容性调查,并向公众提供了数据(而且是免费的!).该调查对约 5100 名摩洛哥人进行了抽样调查,并就他们的人口统计数据和银行产品的使用情况提出了一系列问题。下面的分析是根据这些数据得出的。我确实对这些数据及其结论的质量有所怀疑,我将在这篇博文的后半部分提出。

1.描述统计学

在摩洛哥调查的 ~5100 名抽样个人中,只有 28%的人报告在 2017 年拥有银行产品。虽然官方统计的银行人口在那一年接近 56%,但这个样本——理应代表摩洛哥人口——显示的统计数据要低得多。我将在后面的段落中进一步阐述我对这项调查的怀疑。现在,让我们接受现有的采样和数据收集方法。

库存人口的比例在很大程度上取决于样本人口的人口特征。下面我展示了一组描述这些特征的图表。

第一个显著差异是在性别层面。如下图所示,男性拥有银行产品的可能性是女性的 2.5 倍以上。事实上,只有 17%的受访女性拥有银行产品,相比之下,男性的这一比例为 45%。

接下来,当我们将调查对象按相同的年龄组分组时(图中的每个年龄组包含相同的人数),我们看到不同年龄组之间只有轻微的差异,15-25 岁的除外。这表明年龄以外的因素可能更重要。

那些在工作的人拥有银行产品的可能性是那些不在工作的人的 2.5 倍(无论是失业、退休还是在校)。

当我们观察受访者的经济状况时,我们得出结论,收入最高的 20%的人拥有银行产品的可能性是收入最低的 20%的人的 3.5 倍。同样,我觉得奇怪的是,在收入最高的五分之一人口中,只有 50%的人有银行账户,但我们暂时还是接受这个数据。

最后,最显著的差异是教育解释的差异:受过高等教育或以上教育的人拥有银行账户的可能性几乎是只受过初等教育的人的 4 倍。正如你可能已经猜到的,样本中包含了大量只受过小学教育的回答者。

当然,在现实生活中,像这样的人口统计特征并不存在于真空中。事实上,她们相互影响:收入最低的 20%的失业妇女与收入最高的 40%的失业妇女是不同的。下一组图表是对上述图表的扩展,旨在说明在解释摩洛哥银行产品的获取渠道时,某些特征集合是否比其他特征集合更引人注目。

下图告诉我们,摩洛哥性别之间的"银行收入差距"随着教育水平的提高而变小:从初等教育水平的约 3 倍到高等教育水平的约 1.5 倍。

有趣的是,下图显示,受教育程度高的人,即使是收入最低的五分之一人群也有银行产品,也就是说,收入最低的 20%人群中有 67%的人有银行产品。这表明,在决定获得银行产品的过程中,教育可能比收入水平更重要。

为了理解这些特征中的每一个在确定谁可能有银行账户时的相对重要性,我将在接下来的部分中探索机器学习技术。

(随想:如果你正在勤奋地阅读这篇文章,现在是休息一下,听听这首 切布卡勒德歌曲 )

2.谁有可能在摩洛哥拥有银行账户?机器学习方法

我使用一个逻辑回归模型和一个决策树模型来理解上述每个特征的相对重要性。

A.逻辑回归

逻辑回归是一种预测结果是否会发生的分类方法(例如,你会拥有一个银行产品吗?)给定一组预测因子(例如,人口统计学特征)。有关方法的更多详细信息,请阅读这篇关于数据科学的文章

a .数据准备和选择预测值

监督学习的前提(逻辑回归只是其中的一种方法)是建立一个模型,该模型可以学习尽可能准确地预测给定的结果

为了实现这一点,我们需要一个训练数据集(模型将使用它来学习)和一个测试数据集(模型将使用它来应用它刚刚学习的东西)。因此,我将我的数据随机分为两个样本:一个训练样本(约 5100 名受访者中的 75%)和一个测试样本(约 5100 名受访者中剩余的 25%)。

下一步是选择进入模型的一组预测值。第一部分中的描述性统计给了我一个可能建立一个好模型的预测因子的想法。经过一些调整和尝试不同的预测组合,我找到了以下预测:

预测有 _ 银行 _ 产品作为函数性别+教育 _ 水平+ 性别教育 +就业 _ 地位+收入 _ 五分位数+年龄的交互作用

b .运行和评估模型

我使用标准的 glm() 函数为 R 中的逻辑回归构建了我的模型,并使用它在我的测试数据集中生成一个“预测的”列。有很多方法可以评估一个模型是否好:

(i)准确性——在我的测试数据集中,“预测的”列与“实际的”列相匹配的频率:在我的模型中为 78%。

(ii) 混淆矩阵 —这是一个显示预测结果实际结果的细目表。对于我们来说,这是一个简单的方法来查看我们预测为真的,而事实上它是假的,以及我们预测为假的,而事实上它是真的。**

你可以从这个混淆矩阵中看到,15%的时候,我的模型预测一个人拥有一个银行产品,而实际上他们没有。同样,在 7%的情况下,模型预测一个人没有银行产品,而实际上他们有。剩下的时间(78%)就是上面说的准确率。

更多关于混淆矩阵的信息,请点击

那么我们如何解释这一切呢?!好吧,以上两种方法都表明这个模型并不完美,在测试数据中有 22%的时间没有预测到。这可能是因为这些数据缺失了影响一个人是否拥有银行产品的关键特征。这些特征可以是调查中没有包括的其他人口统计数据,例如该人是住在城市还是农村,他们的工作类型,他们是否有家属,他们的收入水平等。

c .解释模型

如果我们假设上述 78%的准确率“足够好”,我们现在可以看看模型的结果,以试图了解人口统计特征在影响一个人是否会拥有银行产品方面的相对重要性。

上面的图表告诉我们的是描述性统计直观地引导我们的东西:拥有银行产品的最重要的预测因素是某人是否受过高等教育,其次是他们是否属于收入最高的 20%的人,然后是他们是否在工作。

如何更详细地解读这张图?图中的点是模型预测的概率估计值,横条是标准误差(表示每个估计值可能的最小和最大值),星号代表估计值是否(不是由于偶然)。过去帮助我解释回归估计的一个方法是考虑两个相同的人。在这个例子中,假设我们刚刚克隆了两个人。但是,其中一个有大专学历,另一个没有;所有其他特征都是一样的。上面的模型表明,受过高等教育的人比她的克隆人有 89%的概率拥有银行产品。 回归解释中至关重要的是,在考察单个变量的影响时,保持所有其他特征不变。

B.决策树模型

决策树是一种受监督的学习算法,它根据一组预测值将数据分类为一个结果(真或假)。决策树连续地将数据划分成二元子集(例如,男性或女性,是否有工作,年龄:45 岁以上或 45 岁以下),直到不可能进一步划分。这里有更多关于他们的内容

a .选择预测值

与上面类似,我选择以下预测因素,并对它们运行决策树模型(为了简单起见,我删除了连续的年龄变量以及教育和性别之间的相互作用)。

预测 has_banking_product 性别+教育水平就业状况+收入五分位数的函数

b .运行和评估模型

我使用 R 中的 rpart() 函数构建了我的模型,并使用它在我的测试数据集中生成一个“预测的”列。让我们通过查看以下指标来评估该模型有多好:

**(一)准确率:亦作 78%。

(二)混淆矩阵:**

与逻辑回归模型相比,您可以看到每个时段的比例非常相似,这表明这两个模型在预测结果方面做了相似的工作

c .解释模型

决策树模型的可视化表示是..惊喜..一棵树!

那是一棵大树!树是不容易解释的,但是我们可以试着理解它。让我们看看端点(这里用红色和绿色表示,方便地称为叶* ) —它们包含三个数字:*

  • 结果是 1(有银行产品)还是 0(没有银行产品)。结果 1 是绿色的,结果 0 是红色的。
  • 上述结果发生的概率。例如,在最左边的第一片叶子中,这个数字是 0.11。
  • 已被分类到该叶中的样本的百分比。同样,如果你看第一片叶子,这个数字是 39%(也就是说,在 5100 个回答者中,模型预测大约 1989 个属于第一片叶子)

为了确定哪组特征对某人是否拥有银行产品影响最大,让我们看看实现结果的概率最高的叶子。在上图中,让我们看看第 16 片叶子,它的概率是 0.84:

  • 在第 16 页,让我们看看**如何通过查看树的轨迹路径从树顶到达叶子。该树首先按就业状况**(右侧为劳动力中的,左侧为劳动力之外的)进行分割,然后按教育水平(右侧为第三产业,左侧为第二产业)进行分割,再次按收入水平(最富有的 20%在右侧,其余在左侧)进行分割。这告诉我们,你有 84%的机会有一个银行账户,你必须在工作,必须受过高等教育,你必须处于最富有的 20%的收入水平。**

虽然很难仔细阅读每一片叶子来理解我们是如何到达它的,但是阅读决策树的一个更简单的方法是看最初的几次分裂。通常,这些可以被解释为最重要的预测因素。在这种情况下,我们可以看到,就业状况、性别和教育程度是最强的预测因素。这也与回归模型的发现一致。

(随机想到:也许现在是听这首我很喜欢的歌的好时机)

3.结论和关于局限性的说明

这篇文章中概述的描述性和预测性方法都指出,在决定一个摩洛哥人是否会拥有一种银行产品时,某些人口统计学特征比其他特征更重要。也就是说,那些是就业状况、收入水平和教育水平(具体来说,拥有高等学位)。预测分析甚至表明性别本身可能不会产生我们最初在观察性别结果分布时所想的巨大影响。事实上,摩洛哥女性比男性更不容易获得大学学位,处于收入最高的五分之一人群中,或者在工作岗位上,这才是影响她们拥有银行产品能力的

上面介绍的模型,以及它们的结论,都有局限性,它们有一个好,但不是很准确(都在 78%左右)。我们将需要包括更多的变量或微调现有的变量,以达到更高的预测能力,这反过来可以帮助我们更好地解释事情。

最后,我想加入一个关于世界银行数据的说明,这是分析的基础。具体来说,我想验证数据集确实代表了总体。下面,我比较了数据集中的比例和宏观层面公布的比例(来源:世界银行宏观数据):

  • 女性在数据集中的比例( 59% )与总人口中的比例( 50% )
  • 数据集中高等学位持有者的比例( 7% )与总人口的比例( 35% )
  • 数据集中劳动力人口比例( 39% )与总人口比例( 48% )

如果我们认为数据集有些倾斜,没有反映摩洛哥人口的真实情况,那么结果很不幸地不能概括整个人口。这个抽样误差可以解释为什么数据集报告只有 28%的摩洛哥人拥有银行账户,而中央银行的官方统计数据显示 2017 年这一数字为 56%。我可能在我的分析中遗漏了一些东西,但是世界银行的官方报告也报告了我在这里报告的同样的数字。如果你是统计专家,并且正在阅读这篇文章,并且认为我在这里错过了一些重要的东西,请联系我:)

4.最后的想法

既然我探究了是什么让一个摩洛哥人更有可能拥有一种银行产品,我现在明白了为什么我的祖父对自动取款机给他的刺激现金如此兴奋。

接下来,我希望更仔细地研究一下这个“没有银行账户”的人群,并试图更好地理解它:我们能否使用无监督学习技术(例如,聚类)根据人口统计之外的特征对人群进行分类?敬请关注我的下一篇帖子:)

像往常一样,如果你一直读到这里:Choukran,谢谢,谢谢,谢谢。如果你是摩洛哥人,让我知道这是否值得翻译。

PS。在这里阅读第二部分。

谁是潜在客户?

原文:https://towardsdatascience.com/who-is-a-potential-customer-2d76af153f57?source=collection_archive---------26-----------------------

现实世界中的数据科学

基于机器学习和谷歌分析的在线购买意向预测

戴维·维克斯列尔在 Unsplash 上的照片

每天在线购物网站都有大量的访问量。然而,只有一小部分访问变成了购买。

如果购物网站知道哪些客户群更有可能购买,会怎么样?

他们将能够推出对网站和客户都有利的目标促销活动。今天我们将利用机器学习的力量来探索这个问题。数据集来自奥莰·萨卡尔的研究。我们将在这个项目的研究中使用不同的方法。如果你想复制这个项目,你可以在我的 Github 中找到所有的资源。

数据概述

该数据集由网站的 12,330 次在线购物访问组成。为避免任何趋势,数据在 1 年内。18 个特征用于描述每个会话,分为数字特征和分类特征。特征“收入”是我们二元分类问题的标签。我们的目标是使用以下所有其他 17 个特征来预测“收入”标签,也就是看一次访问会话是否会以交易结束。

以下是这些特性的描述,请参考本文。

数字特征

分类特征

值得注意的是 Google Analytics 指标用于数字特征:跳出率衡量客户是否离开一个页面而不再访问另一个页面;退出率告诉你一个页面多久是一个会话的最后一页;页面价值显示哪个页面对网站的收入贡献更大。

方法学

这个项目的工作流程是怎样的?

项目工作流程

我们将按照上面的工作流程来寻找客户购买意向预测的最佳模型。

我们如何做决定?

在这个项目中,我们需要在型号选择和功能选择上做出很多决定。决策是基于这些指标做出的:准确度、召回率、精确度和 F1。让我用我们的商业案例来解释一下。

在我们的数据集中,每个在线访问会话背后都有一个客户。如果我们预测“收入”为 1,这意味着发起会话的客户更有可能进行购买。然而,我们的预测并不总是正确的。下表显示了不同的场景。

假设:1。每个订单的收入为 100 美元,每个发送的优惠券的成本为 5 美元。2.有优惠券的可能顾客会购买,而有优惠券的不可能顾客不会购买。

可能和不可能顾客的混淆矩阵

从上表可以看出,我们希望更多的“真阳性(TP)”发生,并尽可能避免“假阴性(FN)”。我们如何将此应用于机器学习模型?分类指标:

召回分数:TP/(TP+FN)

在所有可能的客户中,模型能正确识别出多少。高召回率要求高 TP 和低 FN。它可以识别很大一部分潜在客户,以减少销售损失。与此同时,更多不太可能的客户(FP)也将收到优惠券。当损失的销售成本大于息票成本时,这没有问题。

精度得分:TP/(TP+ FP)

在我们的模型预测的所有“可能”客户中,有多少是正确的,而不是误报的。高精度分数需要高 TP 和低 FP。它可以确保大部分预测的潜在客户是正确的。使用的优惠券越多,浪费的优惠券越少。然而,更多的其他潜在客户将被忽略,导致销售损失。

F1 得分:2 召回率准确率/(召回率+准确率)

一个兼顾查全率和查准率的值。

准确率得分:(TP+TN)/(TP +TN+FN+FP)

预测结果正确的百分比。这个标准只在类平衡时有效。我们不用它来处理不平衡的数据。

由于上述原因,在这个项目中,我们将使用召回分数作为我们在选择型号时的主要衡量标准。当回忆分数相近时,我们也会考虑 F1 分数。

初始模型选择

维多利亚诺·伊斯基耶多在 Unsplash 上拍摄的照片

首先,让我们清理数据:

通常只有一小部分访问以交易结束,我们怀疑数据是不平衡的。经过下面的测试,我们发现交易转化率只有 18.3%。这意味着以后我们需要对建模数据进行平衡调整。

不平衡标签

分类数据需要转换成数字以便进一步分析。

数据集非常不平衡。所有模型都倾向于符合多数类,因此为了提高模型性能,我们需要首先平衡数据。我使用了 SMOTE 超尺寸技术,结果是两个类的样本数量相同。

使用 SMOTE 平衡数据

现在,我们可以使用准确性作为平衡数据集的衡量标准。我选择了 7 个分类器作为模型候选。我将数据集分成 80%的训练和 20%的测试。然后将训练集拟合到每个模型中,无需调整。这里我们得到了一个基线精度排名。我将选择前 4 个模型作为我的基线模型:随机森林、额外树、ADAboost 和逻辑回归。我们现在优先考虑回忆的准确性,因为我们需要无偏见的模型。然后在高精度模型中选择高召回模型。

特性工程和模型调整将在稍后对 4 个模型进行。代码详情请参考我的 Github 页面。

初始模型性能

第一轮特征选择

安东尼·马蒂诺在 Unsplash 上的照片

我的目标是减少特性的数量,同时增加度量值。随着特征的减少,数据收集的成本降低,计算时间和成本也降低。使用三种特征选择技术来给出综合决策:信息值、 sklearn 的 SelectFromModel()、相关值

哪些特征在预测中比其他特征能给我们更多的信息?我们试试 sklearn 的 SelectFromModel()来筛选特征的重要性权重。这给了我们三个重要的特征。我们将保留它们,并继续探索其他两种特征选择方法。

'ProductRelated_Duration', 'ExitRates', 'PageValues'

功能选择前的热图

左侧的热图显示了所有功能之间的相关性。颜色越深,相关性越高。我们希望看到的是,这些特性与“收入”这个标签非常相关,但彼此之间并不相关。但是一些特征与另一个特征高度相关。这意味着只能保留其中一个相关特征。我们怎么知道该保留哪一个?信息值(IV)将帮助我们。

现在,我们将使用信息值对所有特征进行排序,并找出具有中等至强预测能力的特征。

信息价值及其预测能力

下面的函数将计算每个特征的信息值。

通过以上所有计算,现在我们得到了以下结果:

高度相关特征对的信息值

其他不相关特征的信息值

上表显示了为进一步建模而保留的 8 个特征:

管理持续时间,信息,产品相关持续时间,展示,特殊日,月,访问者类型,页面值

特征选择的决策流程图

我是如何做决定的?

左边的流程图是我的思考过程。

  1. IV 低于 0.1 的特征被移除。
  2. 对于其他的,如果一个特性被 sklearn 过滤器选中,我们就保留它。
  3. 然后,如果剩余部分与保留的特征高度相关,则将其移除。
  4. 最后一部分,如果一个特性与另一个不相关,我们保留它。如果是,则保留具有较高信息值的那个。

现在我们的功能更少了,让我们看看它们是否能帮助改进我们的模型:

具有 8 个特征的新数据框

第一轮特征选择后的模型性能

我们取得了巨大的成果!经过特征选择后,所有的查全率都有了很大的提高,其他指标看起来也不错。

第二轮特征选择

我们有 7 个分类特征。即使它们之前被转换为数值,分类特征的所有值都在一列中。如果我们让每个值都有自己的特征呢?让我们用这个分类特征变量吧!处理完数据后,现在我们有 29 个特征和 1 个标签。

虚拟变量后的特征

为什么我们在第一轮特征选择中不使用虚拟变量?因为把低信息价值的特征虚拟化,做太多新的特征是没有效果的。这将降低模型的性能。

现在,我们将在第一轮功能选择过程中使用相同的技术来选择新功能。详情请参考我的 Github

第二轮功能选择后的功能热图

Administrative_Duration,Informational_bins_page_1_plus,ProductRelated_Duration,ExitRates,Month 11,VisitorType_bins_return,PageValues_bins_above_0

现在上面的热图显示了新一轮特征选择后的 7 个特征+ 1 个标签。请注意,没有两个功能是相关的(这很好),Pagevalues_bins_above_0 功能与收入非常相关

现在让我们来看看这些新功能在模型上的表现。

第一轮特征选择后的模型性能

我们可以看到,EXTRA trees 和 AdaBoost 提高了召回分数,而其他两个模型的性能不如以前。EXTRA trees 模型的召回率比 AdaBoost 低,但 F1 高。因此,我们将暂时保留这两个模型,以便进行下一步的模型调优。

模型调整

照片由丹尼斯·莱昂Unsplash 上拍摄

现在我们已经缩小到两个模型:EXTRA trees 和 AdaBoost。通过调整他们的超参数,我们有可能进一步提高回忆分数。对于模型调优技术,我将首先使用 RandomizedSearchCV。它将通过我们定义的超参数列表随机运行模型。一旦我们通过 RandomizedSearch 获得了最佳性能,我们将使用 GridSearch 通过运行更窄的超参数列表来进一步改进模型。详情请查看我的 Github

模型调整结果

上图显示,这两个模型都通过使用随机搜索和网格搜索得到了改进。最后的回忆分数只有 0.002 的差异。然后我们看 F1 和准确度分数。 EXTRA trees 模型在这两个指标上都有更高的分数。结果就是我们的最终型号

结论

在这个项目中,我们建立了一个二元分类机器学习模型来预测在线购物网站上客户的购买意向。经过几轮特征选择和模型选择后,我们确定我们的数据的最佳模型是 EXTRA trees,适合该模型的特征如下。

最终特征和营销建议

我们在这个项目中建立的额外树模型可以捕获 83%的潜在客户。这意味着,如果营销团队将优惠券发送给该模型预测的所有潜在客户,优惠券将覆盖市场上所有实际潜在客户的 83%。这个模型绝对可以帮助营销团队制定有效的营销策略!

感谢您花时间阅读本文。希望对你自己的项目有所启发。如果你喜欢我的文章,请为它鼓掌。随时欢迎您通过 Linkedin 与我联系!快乐学习!

是什么让科学家成为专家?

原文:https://towardsdatascience.com/who-is-an-expert-in-scientific-research-c435f106543d?source=collection_archive---------33-----------------------

来自超过 400 万作者分析的证据。

学术研究正以前所未有的速度发表。事实上,全球研究产出每十年翻一番。随着进行研究所必需的工具变得越来越普遍,数据变得越来越透明和容易获取,以及研究本身的传播速度越来越快,这一趋势肯定会继续下去。但随之而来的是低质量/掠夺性期刊和缺乏经验的作者出版的激增。所以,有必要退一步,理解我们是如何定义研究中的“专家”的。

为了进行探索性研究,我使用了的数据,包括作者的 h 指数,一个作者所有论文的总引用次数,以及 1 亿名>作者名下的科学论文数量(不考虑作者身份的顺序)。

谁是专家?所有作者中,有多少是「专家」?

图一;表 1

图 1 展示了 h 指数> 3 的 CDF,这是一个旨在衡量作者整体影响力的指标。表 1 包含 h 指数样本的精确百分位数。请注意,绝大多数(99.6%)作者的 h 指数小于 3,在本分析中没有考虑。为了得到一个 h 指数为 n,一个人必须发表≥ n 篇论文,每篇论文都有≥ n 次引用。较高的 h 指数表明作者更多产,他们的作品可能质量更高。因此,我们大概可以把他们归类为专家。

查看所有领域的汇总数据,我们可以看到绝大多数作者的 h 指数在 0 到 20 之间。第 50 百分位约为 4;第 80 百分位是~ 9;一个 h 指数为 50 的作者稳稳地站在第 99.5 百分位(所有这些都是在我排除了 h 指数平均高于社会科学和经济学的作者之后)。

虽然如果要给专家下一个宽泛的定义,最好是根据他们相对于本学科其他人的 h 指数来定义专家,但 h 指数大于 20(95.8 百分位)将是一个很好的起点。

这些作者的出版物和总引用量的分布情况如何?

图 2(左);图 3(右)

图 2 和图 3 分别显示了作者的出版物和引文的百分位数。

我们在 CDF 的引文和出版物上看到类似的正偏态分布。大多数作者发表的科学论文不到 200 篇,所有论文的引用次数不到 2500 次。这有直观的意义;大多数科学家相对来说缺乏经验,而少数异常者却非常有成就。

请注意,对于图 4 到图 9,我对每个 h 指数的所有指标进行了平均。

发表作品越多的人被引用的次数也越多吗?

图 4

图 4 分散了引用的出版物数量。不出所料,这表明作者的总引用随着他们发表的更多而增加。但是,这显然不是线性比例关系;随着人们发表的论文越来越多,他们的新论文比旧论文积累了更多的引用(图 7 进一步证明了这一点)。请注意,很少有作者撰写了超过 1000 篇出版物,从而导致离群值。

平均而言,专家的出版物更有影响力吗?

这里,让我们用每篇文章的引用次数来代表影响。如果这个指标随着 h 指数上升,那么我们可以说专家的出版物更有影响力。

图 5 显示了作者的 h 指数和他们每篇论文的平均引用次数之间的关系。在我们达到大约 50 的 h 指数之前,作者的平均引用/出版物与他们的 h 指数密切相关;他们发表了 n 篇论文,引用了 n 篇论文,差不多产生了n的 h 指数

之后,这种线性关系消失,他们的论文就更有影响力了——对于 h-index ~> 50,专家的工作平均被引用率更高。

图 5

你可以想象有多种解释可以解释这种效果:初学者随着时间的推移会成为更好的研究人员,专家经常与同样熟练的研究人员合作。但是,如果许多专家的工作水平并不比不太知名的研究人员高,那该怎么办呢?在小的、专业的或新兴的研究领域,即使是最杰出的学者也可能很少有出版物和/或引文。如果我们想得出可信的结论,这突出了根据作者的研究领域对他们进行分类的重要性。

“专家”需要发表和“业余爱好者”一样多的作品才能在他们的 h 指数中获得相同的增量收益吗?

图 6 显示了出版物与 h 指数的比率和 h 指数之间的关系。你可以把它想成一个作者为了增加一个 h 指数而必须发表的论文数量。

似乎存在一个“临界点”(在 h 指数约为 25 之后),在此之后,作者能够在每篇出版物中获得大量引用。很明显,与他们职业生涯的后期相比,作者最初需要做更多的工作来实现相同的 h 指数增量,尽管事实上需要更少的引用/论文来实现较低基础上的 h 指数增加。潜在地,这个转折点可以用来指定专业知识。

图 6

这可能是因为当他们开始时,他们产生的研究质量相对较低,与经验较少的合著者一起工作,他们的工作面临更多的审查,导致平均引用工作较少(图 5 也证明了这一点)。作者在后来的引用中经历了迅速增加的规模回报,可能是因为他们自己更有生产力,与更有经验的合著者一起工作,等等。这得到了图 7 的支持,从中我们可以推断出,随着人们发表更多的作品并获得更多的研究经验,他们的论文会得到更多的引用。

图 7

给定 h 指数,我们能预测总引用次数吗?

图 8 和图 9 显示了 h 指数和总引用量之间的关系。根据定义,我们知道 h 指数为 n 的作者发表了至少 n 篇论文,每篇论文被引用至少 n 次。因此,h-index n 的作者必须有大于等于 n 的累计引用数。

尽管如此,作者很少真正遵循这种模式;一个 h 指数为 100 的作者几乎肯定不会通过发表严格意义上的 100 篇论文,并且每篇论文都有 100 次引用而获得成功。图 8 反映了这一事实:作者积累的引用超过了足以增加其 h 指数的数量,随着 h 指数的上升,这一趋势会随着时间的推移而加剧。图 7 进一步证实了这一点,图 7 显示,拥有 h-index n 的作者几乎总是拥有超过 n 篇的出版物,其中许多当然获得了少于 n 篇的引用。

图 8(左);图 9(右)

但是我们能根据作者的 h 指数估算出他们作品的总体影响吗?在他的文章“对 Hirsch 引文索引的批判:一个组合费米问题”中,Alexander Yong 提出了这样做的经验法则:总引文数= ~3.4h,其中 h 是 h 指数。我发现~5h 可能是 h 指数< 50(图 8)的一个更好的等式,而 8h2 可能是 h 指数大于 50(图 9)的一个更合适的估计值。

外卖食品

绝大多数作者几乎没有研究经验。在大约 1 亿篇论文中,只有 400 万篇的 h 指数大于 3(表明至少有 3 篇论文和 9 次总引用)。

  • 定义专家在很大程度上取决于研究人员的领域,以及他们所在的 h 指数百分点。此外,使用经年龄调整的 h 指数可以揭示他们相对于其他同龄人的地位,而赫希的 h 指数告诉我们他们的绝对地位。
  • 作者需要在职业生涯的早期发表更多的论文,但以较慢的速度提升他们的 h 指数。专家论文的平均影响力更大这一事实支持了这一观点。
    • 我要感谢 Rob MacCoun 教授对我的工作给予的深思熟虑的反馈。

*I would like to thank Prof. Rob MacCoun for his thoughtful feedback on my work.

谁是英超最重要的球员?

原文:https://towardsdatascience.com/who-is-the-premier-leagues-most-important-player-4f184f7b39e4?source=collection_archive---------18-----------------------

按目标

以及图论如何证明这一点

照片— Pixabay

T 他的英超赛季已经完成了三分之二以上。利物浦几乎已经胜券在握(见我的早先的博客关于他们是如何获得如此优势的),通常的嫌疑人都卷入了每年一度的保级大战。

在我的“ On Target ”博客系列中,我一直在记录我对“ Moneyball ”梦幻英超(FPL)的追求。到目前为止,我们已经了解了如何使用交互式网页抓取器从英超联赛网站获取数据,以及如何使用面向对象编程以用户友好的方式组织这些数据。

[## 用 Splinter 提升你的网络抓取

通过自动化与网页的交互,从您的抓取中获得更好的数据

towardsdatascience.com](/elevate-your-webscraping-with-splinter-a926eee7f7d9) [## 使用面向对象编程改善您的数据争论

munging 和 OOP 令人惊讶的成功结合

towardsdatascience.com](/improve-your-data-wrangling-with-object-oriented-programming-914d3ebc83a9)

所有这一切的最终目的将是建立一个模型来预测哪些球员最有可能在即将到来的比赛中得分。然而,在讨论神经网络的具体细节之前,有必要后退一步,思考一下我们已经创建的丰富数据集。到目前为止,我们有英超联赛中每一次射门的逐行数据——我们可以深入整个 EDA 世界!

“射门”数据框的标题,显示英超联赛中每一次射门的细节

思考玩家的重要性

在 FPL,有一个概念被称为‘护身符理论’。由 FPL 社区“谁得到了帮助”(WGTA)推广,它概括地说,每支球队都将有一名个人“护身符”球员,无论出于什么原因,他都会提升球队的表现。塔里斯曼球员为球队进球(或者至少为其他球员进球),他们的球队在他们缺席的情况下通常会受到影响。

我们如何才能最好地识别这样的玩家?WGTA 通过研究玩家的幻想得分来解决这个问题。我的方法略有不同,因为我会考虑原始比赛数据,特别是射门和进球。

让我们从一些简单的事情开始——哪些球员参与了最多的射门,以及最多的进球。所谓“参与”,我们指的是射门的球员,或者是那些“协助”射门的球员,也就是说,把最后的传球给射门的球员。

游戏周 27 时的数据正确

这表明曼城的凯文·德布劳内在射门进球方面是最有帮助的球员。我们从他相对较小的气泡尺寸中看到,这主要是由于‘助攻’——德布鲁恩倾向于不进球,而是为其他球员提供进球。

当我们观察最佳进攻组合时,我们可以看到这种影响。这考虑了球员们在赛季迄今为止相互协助的射门次数——我们看到德布鲁因在联盟十大搭档中的三个中出现在中。

游戏周 27 时的数据正确

因此,我们可以得出结论,德布鲁恩是曼城的“护身符”球员。当然,这一发现很容易实现,因为曼城作为一个团队进了很多球(在撰写本文时,他们比联盟中的任何其他球队都进得多)。我们怎么能想到那些少产球队的护身符呢?

一个简单的方法是看一个球员参与的球队射门和进球的百分比。

德·布鲁恩仍然在剧情的右上方(这是我们所期待的‘重要’球员的位置)。然而这一次,我们看到更小球队的球员更加突出;诺维奇的提姆·普基为球队贡献了超过 60%的进球,没有球员比狼队的劳尔·吉米内兹为球队贡献了更多的进球。

网后(工作)

射门和进球的比例是一个好的开始,尽管我们可以变得更加科学。让我们把每个团队想象成自己的‘社交网络’。那么我们可以把每个玩家想象成各自团队网络中的一个节点。然后,每对节点之间的“边”的权重可以由这两个球员相互协助投篮的次数来定义。

注意——我们可以使用 NetworkX 来实现这一点,这是 Python 中一个很好的网络分析包。我不会对我的具体代码做太多的描述,因为它涉及到大量的数据准备,脱离上下文很难解释清楚。然而,实际使用 NetworkX 的部分相对简单。我推荐浏览他们的教程,其中讨论了图形的创建、编辑和可视化。

让我们以凯文·德布劳内的曼城队为例。

节点大小作为玩家参与的总镜头数给出,边宽作为两个连接的玩家相互协助的镜头数给出

不出所料,我们看到德·布鲁因在网络中人脉很广。我们注意到非常“沉重”的优势,将他与塞尔吉奥·阿奎罗、拉希姆·斯特林和里亚德·马赫雷斯等球员联系在一起。回想一下,这三名球员与德布鲁因的合作非常富有成效。

我们在“投篮命中率”分析中强调的另外两个球员呢?

诺维奇城的网络与曼城的网络相比,联系要弱得多(我们会预料到这一点——本赛季到目前为止,曼城的射门次数比诺维奇多 70%)。我们也看到诺维奇更加依赖核心球员(即普基、布恩迪亚和坎特威尔)。

在某种程度上,狼队也是如此,尽管狼队的投篮次数略多于诺维奇队,他们更广泛的团队似乎联系更好,至少有五六名球员似乎相对频繁地协助对方投篮。

当然,仅仅目测一个观想并不特别严格。令人高兴的是,网络理论有几个度量标准,试图列举一个节点在网络中的“中心”程度。

我们应该确保我们使用的任何中心性指标都考虑到了边缘权重——多次协助队友的球员比只协助一次的球员对团队更重要。做到这一点的一个方法是“加权的中间值”。

在给定的网络中,介数量化了一个节点作为两个其他节点之间最短路径上的桥的次数。换句话说,为了计算凯文·德布劳内的“中间性”,我们计算了曼城网络中每对球员之间最短的可能“旅程”。然后,我们计算通过德布鲁因节点的“旅程”的份额。

如上所述,介数度量可以说明边权重。特别是,我们可以说,两个互相帮助很多的球员之间的优势比其他优势更“短”。当然,给定节点对之间的最短路径更有可能使用这些短边,因此高目标参与度的玩家将出现在更多的这些最短路径上,并且具有更高的介数水平。

*出于这些计算的目的,我们可以说两个玩家之间的边长是他们互相帮助的次数的倒数(即 1 除以 1)。然后使用 Dijkstra 算法计算每个节点对之间的“最短路径”。

所以如果我们计算联盟中每个球员的加权介数,我们会发现什么?

我们看到,到目前为止,他们队最重要的球员是维拉的杰克·格里利什。事实上,如果我们想象维拉的网络,我们会看到格里利什在中间,在其他任何一对球员之间都没有什么优势。

正如预期的那样,我们看到球员参与的球队投篮次数和他们在球队中的“中心地位”之间存在正相关。

那么谁是每支球队的“护身符”球员呢?

让我们看看那些“护身符”的介数相对较低的团队的网络。正如预期的那样,这些球队的投篮命中率相当平均,没有一个球员(或者甚至任何一个紧密的球员群体)占据主导地位。

这是我的博客系列“目标”中的最新一篇文章,在这篇文章中,我将尝试构建一个“摇钱树”梦幻英超联赛的模型。我很乐意听到关于这个博客的任何评论,或者这篇文章涉及的任何概念。欢迎在下面留言,或者通过 LinkedIn 联系我。

谁赢了:谷歌、亚马逊、脸书还是苹果?

原文:https://towardsdatascience.com/who-is-winning-google-amazon-facebook-or-apple-45728660473?source=collection_archive---------10-----------------------

GAFA——谷歌、亚马逊、脸书或苹果。来源:宾夕法尼亚大学。

GAFA 的能力比你想象的更相似。但是谁领先了呢?

你听说过 GAFA 这个术语吗?它指的是四大科技巨头谷歌、亚马逊、脸书和苹果,这些公司改变了媒体行业、互联网、商业模式和社会。它们通过将消费者从传统的实体企业中转移出来,甚至取代传统企业,获得了消费者支出中不断增长的份额。

一方面,谷歌和脸书引领着数字和显示市场,而亚马逊和苹果主导着在线零售。尽管表面上有所不同,但这四家公司在搜索、社交、零售和广告等方面都有相似的能力。

图表 1 —四大公认的核心竞争力,以及彼此竞争对手如何通过提供类似的服务(即使是规模小得多的服务)来威胁他们的领导地位。重叠越多,越脆弱,竞争力越强。来源:作者,戴顿。

在服务提供的文氏图(见表 1)中,我们可以看到,尽管他们从非常不同的核心能力开始,他们发展了相关的多样化,现在相互重叠。所有的共同点是广告。这种竞争有助于塑造电子商务对消费者的便利性,但也产生了一些负面的外部效应,如市场集中、竞争减少、算法取代工作、隐私问题、出版商成为纯粹的内容提供商、零售商被要求支付基础设施服务费用,以及政府对这些公司实力的担忧。【1】

我认为,四大处于不断的吞噬之中,试图吞噬对方,从他们的边界开始希望达到他们的核心竞争力。通过这样做,每家企业都在增加其多元化,传递一个强有力的信息,并降低其自身的风险敞口,但也在考虑最终的收购。

在这场竞赛中,谷歌由于其搜索引擎和展示广告,比其他公司略胜一筹。脸书以强劲的利润率位居第二,但它提供的是“时尚”的核心娱乐业务,更容易受到市场变化和新来者的影响。苹果和亚马逊在各自领域依然强劲,但面临越来越多的挑战。苹果应该专注于服务业,而亚马逊需要提高利润率。

GAFA 核心竞争力

当这四家公司中的每一家成立时,它们都为特定的客户群提供非常特定的产品。谷歌提供了一种新的网络搜索方式,亚马逊在网上销售书籍,脸书点燃了社交媒体运动,而苹果,所有这些公司中历史最悠久的,销售个人电脑。随着这些公司的扩张,他们看到了相关和不相关多元化的机会。

相关多元化是一种明智的战略,它着眼于公司的资产、人员和服务,创造一种与其业务密切相关的新产品或服务,同时降低当前预算的额外成本。它利用现有的足迹为以前未开发的细分市场创造新的收入流。

另一方面,不相关多元化着眼于全新的市场,以抵御收购,重新关注公司,并降低整体风险。

随着这些公司接受越来越多的多样化,它们很快就相互交叉,尤其是在广告方面。这四家公司很快意识到,为了提供廉价或免费的服务,收入必须来自其他地方——广告。直到最近,苹果是最不关心广告销售的公司,因为它提供了被认为有价值的有形产品,而脸书和谷歌提供的是无形产品(社交和搜索)。同样,亚马逊销售实体产品,尽管它大幅降低了利润率以获得市场份额。例如,脸书尝试了几种不同的方法,直到最后发现广告是最终赚钱的途径。【3】他们的解决方案都是广告,这可以补贴他们的免费服务、低利润,或者只是带来一些额外的现金。

服务产品的主要重叠部分

GAFA 的四条腿文氏图(图表 1)揭示了竞争加剧的领域,其中至少有三家公司重叠。这些是第三方商品零售和数字内容。

除了苹果(苹果出售第三方品牌的配件,但数量可以忽略不计),商品由所有人出售,其中只有亚马逊可以履行产品,而谷歌和脸书出售商品广告和点击费。但谷歌通过与梅西百货、美国柯尔百货公司、家得宝和其他可能削弱亚马逊竞争优势的公司合作,正在获得履行专业知识。【4】基于搜索的商品是谷歌的相关多元化业务,是亚马逊的核心业务,可以说与脸书无关。

在数字内容领域,谷歌、苹果和亚马逊都有自己的“商店”,用户可以在其中购买应用、音乐和视频。在这场战斗中,苹果公司获胜,其商店每笔交易的花费几乎是其他公司的三倍。

S.W.O.T .分析和建议

图表 2 - 谷歌的 SWOT 分析表明,谷歌非常强大,有可能在四家公司中处于领先地位。来源:作者,戴顿。

图表 3— 脸书的 SWOT 分析强调了庞大的客户群和在该平台上花费的时间。来源:作者,戴顿。

图表 4— 亚马逊的 SWOT 分析显示了该公司在网上零售领域的巨大份额,但利润率却很低。来源:作者,戴顿。

图表 5— 苹果的 SWOT 重申了服务市场的巨大机遇。来源:作者,戴顿。

在分析优势、劣势、机会和威胁(SWOT)时,我发现谷歌领先于对手,因为它在数字付费搜索领域遥遥领先,拥有互联网中的大部分广告管道系统,同时几乎没有面临竞争和威胁(见附表 2)。当然,它仍然保持警惕,以捍卫自己的地位,免受必应(Bing)等其他搜索引擎的攻击,但通过对在人们的浏览器上显示的业务收费,该公司处于有利地位。

由于花在网上的时间,脸书仍然非常强大——16.4 小时的美国在线时间(见附件 3)。有了这样的连接,它可以在更长的时间内保留更多的数字空间。因此,脸书能够向用户展示越来越多的广告。脸书的利润率令人印象深刻——它是唯一一家收入达到两位数(10 亿美元)的公司,但利润仍位居第三。也是他们中最年轻的,还有成长成熟的空间。

亚马逊和苹果是成熟的老牌公司,但随着创新改变了互联网,它们变得更加脆弱。亚马逊拥有强大的云基础设施服务,但其商品销售的补贴利润占据了大部分利润(见图表 4)。从财务上来说,苹果是最强大的,拥有最高的市场价值和利润,但如果它不多元化并进入服务市场,它可能已经达到一个顶峰并开始走下坡路(见图表 5)。苹果一直面临着推出更新更好的手机的压力,新版本中任何微小的计算错误都可能导致灾难性的结果。

其他竞争对手

四大并不孤单。GAFA 还面临着有望成为互联网新时代的初创企业的竞争。随着对隐私问题的日益关注,广告业正面临着诸多挑战。

颠覆性创业的一个例子叫做勇敢浏览器。勇敢的免费和开源基于 Chromium 网络浏览器,该浏览器本身阻止广告和网站追踪器。用户可以个性化他们共享的数据,以及他们希望看到广告和获得报酬的频率。他们的引理是“你的注意力是有价值的”。

改变数字媒体系统,可以完全转移利润。

结论

四大是战场上的巨人,发展相关和不相关的多元化以保持强大,能够击败竞争对手,不愿接受失败。一个明显的例子是,在 Google+失败后,谷歌试图创建一个新的社交媒体。【5】他们还面临着小公司的竞争,并因其在数据隐私、竞争和市场势力方面的可疑行为而受到政府的审查。

在 SWOT 分析中,我发现竞争最激烈的领域是数字和商品销售,其次是普通广告——这是一个圣杯,可以通过收取相对较少的费用带来额外的收入。谷歌比其他公司处于更有利的位置,引领着数字付费搜索——可以说是最有效的广告类型,它可以显示用户当时正在寻找的精确结果。

戴顿、约翰和莉奥拉·科恩菲尔德。“亚马逊、苹果、脸书、谷歌 2018。”

丽贝卡·格林菲尔德。" 2012 年:脸书终于想赚点钱的一年."大西洋,大西洋媒体公司,2013 年 10 月 30 日,https://www . the Atlantic . com/technology/archive/2012/12/2012-year-Facebook-finally-tryed-make-some-money/320493/

【3】the guardian。“脸书到底是怎么赚钱的?”不适用,https://www . the guardian . com/technology/blog/2009/sep/16/Facebook-money

【4】托马斯·劳伦。“梅西百货与谷歌合作帮助运营其仓库”2019 年 8 月 14 日,https://www . CNBC . com/2019/08/14/macys-teams-up-with-Google-to-help-run-its-warehouses . html

【5】波特,乔恩。“谷歌用鞋带再次尝试社交网络”,2019 年 7 月 12 日https://www . the verge . com/2019/7/12/20691430/鞋带-Google-area-120-event-organizing-new-York-beta

谁学得更快——你还是我的人工智能?

原文:https://towardsdatascience.com/who-learns-faster-you-or-my-ai-681e442416b0?source=collection_archive---------49-----------------------

向我的 AI 挑战 Nim 游戏,并控制它在玩之前的练习次数。你能比人工智能学得更快吗?人工智能到底是如何学习的?这篇文章在没有任何数学公式的情况下,从高层次上解释了 Q 学习的概念。

尼迈网络应用的用户界面(图片由作者提供)

你能在玩一个简单的“尼姆”游戏上打败我的 AI 吗?来吧,我挑战你点击这里找到答案。最好的部分是:你可以决定在和你比赛之前人工智能要进行多少练习。

之后,回到这篇文章来学习人工智能是如何变得如此聪明的…

那么,你做得怎么样?我敢肯定,一旦你掌握了它的窍门,“简单”的模式对你来说并不是一个真正的挑战。然而,要击败更高级的水平,一个人必须穿得暖和(正如我们在德语中所说的)。

但是这些级别之间有什么区别呢?我是不是把更高级的代理编程得更聪明了?我有没有告诉他们玩完美的 Nim 游戏的数学公式?(Btw,这样的策略确实存在。你可以在这里阅读。)

答案是:不会!相反,我所做的是授权代理人自己去发现如何赢得 Nim 游戏。这就是 Q-learning 的神奇之处:你形式化一个问题,把它扔给你的代理,坐下来放松,而代理做大部分工作。让我在一个概念层面上向你解释——没有任何数学公式——幕后发生了什么。(注意:我到处都在谈论 Python 实现,但是你不需要理解这些来理解 Q-learning 的思想。)

人工智能需要知道什么

为了成为一个真正的 Nim 大师,代理需要被告知游戏的基本设置和规则:

最初的板子是什么样的?

来自 nimAI web 应用程序的初始板(图片由作者提供)

这是我的 nimAI 网络应用程序的初始板。理论上,你可以从任何其他数量的行和硬币开始,我们的学习算法应该能够处理所有这些选择。在 Python 中,上面的板子可以形式化为一个列表:

initial_board = [1, 3, 5, 7] 

就这么简单。

在给定的棋盘状态下,哪些操作是可用的?

考虑一下游戏快结束时的棋盘状态:

游戏快结束时的棋盘状态(图片由作者提供)

这里有三种不同的选择:从第一排拿一枚硬币,或者从第二排拿一枚硬币,或者从第二排拿两枚硬币。我们所要做的就是编写一个函数,它接受棋盘状态(例如[1,2,0,0]),并返回一些可能的动作。在 Python 中,这种表示可以是一组元组,其中每个元组由要移除的硬币的行和数量组成:

legal_actions = {(1, 1), (2, 1), (2, 2)}

一个动作如何改变当前状态?

如果我从第二排拿走一枚硬币(见上图),棋盘会是什么样子?

移动(2,1)后的棋盘状态(图片由作者提供)

你可能会说,这是显而易见的。是的,但是我们需要形式化这样一个状态转移函数。记住代理人不像你这样自作聪明!

一场比赛什么时候赢或输?

我们需要提供一个函数,告诉代理谁是赢家(“人工智能”,“人类”,“还没有人”),对于游戏的给定状态。更准确地说,我们需要考虑棋盘是否已经空了([0,0,0,0]),如果是这样,谁走了这步失败的棋。

太好了。现在,AI 知道游戏如何开始(初始状态),它可以在每个可能的棋盘状态中选择哪些动作,这些动作如何改变棋盘(状态转换函数),以及是否已经有赢家。

现在,有趣的部分开始了——真正的学习!

人工智能如何变得聪明

Q-learning 的想法其实很简单。我们懒得明确告诉代理如何掌握游戏(也许我们甚至懒得去发现)。相反,我们让人工智能和自己玩游戏很多次。我们的希望是,它将遇到许多不同的情况,并通过反复试验发现,在棋盘的特定状态下,哪一个是最佳行动。

在代理被训练之后,一个人能挑战它到一个尼姆的游戏。

“拿着这个”,人类玩家会喊。

Muahaha ”,AI 会回答。“这种情况我以前见过很多次了!”利用它的经验,它会挑一个 boss 棋来消灭这个可怜的人类。然后,它会继续下去,奴役人类……哦,对不起,我不想吓到你。

现在你已经对 Q-learning 有了一个直觉,让我们进入一些更详细的内容。

奖励和惩罚

Q-learning 是来自强化学习领域的一种技术(这又是机器学习的一个子领域)。强化学习受到行为心理学的启发——人类和许多其他动物通过奖励和惩罚来学习。(这是一个可怕的过度简化,但是,没人有时间做这个!)

触摸热炉子的孩子会受到自然的惩罚(疼痛),下次可能会更加小心。吸取教训。

同一个孩子后来可能会打扫厨房,并从她母亲那里得到奖励(巧克力饼干)。下周她很可能会高兴地再次打扫厨房。吸取教训。

Unsplash 上由 SJ 巴人制作的巧克力饼干

Q-learning(以及一般的强化学习)就是基于这个原则。我们让代理尝试一些行动,如果一个行动产生了“好”的状态,我们就奖励她。如果这个行为导致一个“坏”的状态,我们惩罚她。请注意,我们显然不会用鞭子打代理人,也不会给她糖果。而是用数字来表示奖惩(越高越好)。电脑程序喜欢数字!

在 Nim 的例子中,我们用“-1”(我知道,这很残忍)来惩罚失败的棋步(即移走最后一个硬币),用“1”来奖励对手失败棋步之前的棋步。

预期回报

其他所有不会终止游戏的动作呢?我们不会直接惩罚或奖励他们。相反,我们使用 Q-learning 的核心思想:预期回报。

代理将一点一点地了解到,某些行动——尽管不会立即赢得(或输掉)游戏——将使她处于有利(或关键)的境地。这种知识会从游戏的最后阶段慢慢“传播”到更早的位置。或许,你也经历过,在一个新游戏的开始,想出一个策略真的很难,而到了最后,看哪个动作好或者不好就变得容易了。要考虑的可能性更少了。对于一个 AI 来说也是一样:首先,她的大部分动作都是完全随机的。她没有任何策略。但是接着,她学会了哪一步棋能立即赢得游戏,接下来她学会了哪一步棋能导致立即赢得游戏,然后她学会了哪一步棋能导致立即赢得游戏的棋,等等。

如果你让代理练习这个游戏很多很多次,她会知道在任何给定的棋盘状态下,任何给定的行动最终会给带来什么样的回报。但是,如果你只让她玩几次,她没有机会体验游戏的很多另类课程。这就是为什么一些人工智能在简单模式下的移动(尤其是在游戏开始时)看起来相当随机,而更高级的智能体似乎立刻就有了计划…**

一个计划?一个策略?嗯,我想我们应该小心这种想法。人工智能不会按照某个高明的计划移动,她也不会推理哪一步可能是最好的。她只是记得在过去某个特定的董事会状态下,什么是最有效的。这一点她比任何人都做得好。

我希望这篇文章给你一个关于 Q-learning 的良好直觉,并激发你深入这个话题的兴趣!

我想提及一些有趣的细节,并以问答部分的形式向您指出更严格的来源。

问与答(Question and Answer)

问:代理的知识是如何表示的?

答:在经典 Q-learning 中,你可以想象一个简单的表格,代表所有可能的状态和动作组合,并包含各自的 Q 值。在 Python 中,这样的 Q 表可以用状态-动作对作为关键字的字典来表示。例如,假设代理人在状态 s 中有两个法律行为 a1 和 a2。她可以查找Q_table[(s, a1)]Q_table[(s, a2)]并简单地选择具有较高 Q 值的行为。

注意,Q-learning 还有更高级更高效的版本,比如深度 Q-learning 。这里,您可以使用神经网络来学习一个函数,该函数估计任何状态-动作对的 Q 值,而不是显式地将所有 Q 值存储在一个表中。

问:Q 值究竟是如何计算的?

答:首先,所有可能的移动的 Q 值都是 0——除非它们立即终止游戏(见上文)。代理根本不知道如何区分好的和坏的移动。然后,在训练期间,Q 值基于先前的信念和新的经验被更新。这两个因素需要权衡,用一个学习率来建模。查看这篇文章了解更多细节。

问:那么开发和探索呢?

答:在很多 AI 问题中,你会遇到一个根本性的困境:假设你的资源(时间、计算能力等)有限。),你应该探索尽可能多的替代方案,还是利用已经运行良好的方案?对于成功的 Q-learning,在探索和利用之间找到一个健康的平衡是至关重要的。这可以通过有时探索而不是具有最高可用 Q 值的动作来实现(而不是总是贪婪地挑选此刻看起来最好的动作)。

有 5 种数据科学家

原文:https://towardsdatascience.com/who-the-hell-is-a-rockstar-data-scientist-fe349d90df5e?source=collection_archive---------31-----------------------

你是哪一个?

在这篇文章中,我将分享在行业中存在的被称为“数据科学家”的角色,并揭露 rockstar 数据科学家的要求。

Unsplash猎人赛跑的照片

随着公司开始了解其业务流程的数据科学产品生命周期,对这些角色和职责的期望也在不断变化。

我经常听说,我也是一名数据科学家。但是,我的工作和其他拥有同样头衔的人有什么完全不同呢?

让我们揭穿角色并说出他们的名字!

Rohit FarmerUnsplash 上拍摄的照片

我非常喜欢这个职业的一点是,一个人不能仅仅是统计学家、快速程序员或实验模型师。这个角色需要多种技术和软技能,同时偏向于动作。这说起来容易做起来难——然而,这正是企业似乎在利用的东西,而且是在不知不觉中。

以下是一个人可能成为的样子:

万金油,独一无二的大师!

没有数据科学路线图的公司想要什么:

万金油,万金油!

根据我过去的经历、面试和工作机会,我将数据科学家分为五类。

  1. 黑客数据科学家
  2. 分析师数据科学家
  3. 研究科学家
  4. 机器学习工程师
  5. 客户数据科学家

而且,出于科学的仁慈,不可能一个人适合所有类型的角色。

让我们开始深入研究每一个问题。

黑客数据科学家

创业公司通常需要黑客。通常,他们会寻找以下技能:

真社Unsplash 上拍摄的照片

技能

  1. API Web 开发:Flask,RestFul,计算机网络
  2. 数据工程:SQL,MongoDB,Pandas
  3. 数据建模:Tensorflow、Pytorch、OpenCV
  4. 云:AWS、EC2、谷歌计算引擎、Docker

根据定义,你知道什么是黑客,在一个有很多头衔的创业环境中,这些技能的价值是显而易见的。他们是黑客科学家,从更特别的角度出发,致力于数据科学及其端到端的管道。相信我,他们会尽情享受的!

职业道路

数据科学家→高级数据科学家→首席数据科学家→首席数据科学家→数据科学主管

分析数据科学家

这个角色更多的是分析大数据,并从这些数据中获得洞察力,而不是专注于建模。如果你对寻找答案和探索数据分析的深度更感兴趣,这些角色是你会喜欢的。有些角色可能很少甚至没有模特。

活动发起人Unsplash 上的照片

技能

  1. 数据分析:Tableau 动力 BI;熊猫
  2. 数据工程:SQL、Postgres 蜂巢;PySpark
  3. 数据建模:Scikit-learn
  4. 数据演示:PowerPoint、仪表板、Excel

职业道路

数据分析师→高级数据分析师→分析主管→首席分析官→首席数据官

研究科学家

数据科学家更多的是一个专业角色,迎合业务解决方案和需求。但是,如果你期待将你最疯狂的人工智能算法想法带入生活,并且总的来说想要突破界限,你可能会进入研究。

万花筒Unsplash 上拍摄的照片

研究数据科学家深入研究算法,创造新的算法,发表论文,或许攻读博士学位,摆脱炒作,开始创造新的算法!

技能

  1. 数据基础:统计,概率,微积分,几何
  2. 作品集:论文、出版物和会议
  3. 研究:ML/DL 算法的深度和广度是必须的

职业道路

副研究员→研究科学家→高级研究员→研究主管

机器学习工程师

最常见的是机器学习中的软件工程。该角色更倾向于部署和提供可扩展的机器学习功能。

技能

  1. 必备基础知识:数据结构、算法
  2. 数据建模:内部 ML/DL 算法的工作
  3. 执行:能够轻松编码/优化 ML 算法

卢克·皮特斯在 Unsplash 上拍摄的照片

职业道路

机器学习工程师→ SDE 二代→ SDE 三代→数据科学经理→工程总监

客户数据科学家

客户数据科学家精通数据科学的营销艺术,能够成功地将这些能力转化为业务对话,并能够引导客户了解他们真正需要的是什么。

LinkedIn 销售导航员Unsplash 上的照片

为了将人工智能作为一种附加值来提供,人们不仅需要了解算法,还需要了解可行性和生存能力,让企业欣赏人工智能产品可以提供的东西,并了解市场适合度。

技能

  1. 数据分析:Tableau,Pandas,SQL
  2. 商业智能:软技能、谈判技巧
  3. 销售&营销:锁定目标、追踪线索和留住人才

职业道路

这个领域比较新,所以我还没有看到很多这方面的职业道路。但是,这个角色肯定倾向于商业方面。

客户数据科学家→助理顾问→高级顾问→销售/营销总监

结论

正如你所看到的,一个可以广泛归类为“数据科学家”的头衔有着更多的细微差别和复杂性。所以,对于所有那些寻找 rockstar 数据科学家的人来说——不要,因为他们不存在。

虽然有些人可能声称他们是,或者他们已经找到了,这很好! 有点妄想可以健康

[## 为什么一点点自欺欺人是件好事

人们很少看到比极端自欺欺人更痛苦的事情。想想绝望的调情者…

www.inc.com](https://www.inc.com/jessica-stillman/why-a-little-self-delusion-is-a-good-thing.html)

来自各种背景的数据科学家,他们创造了我们这个时代这个令人兴奋的行业,在专门研究他们都喜欢的东西的同时,教这些机器自己学习——已经足够摇滚明星了。

接下来呢?

希望这篇文章能帮助你理解行业的期望和科学家们公开的数据类型。

如果你是一名有抱负的数据科学家,或者希望在职业生涯中有所转变,请告诉我。请随时联系我的邮件,我会确保回复所有的邮件。继续下去。记住,

你已经是 摇滚明星 了!

给谁打电话?分类项目

原文:https://towardsdatascience.com/who-to-call-a-classification-project-with-a-twist-e2577482d176?source=collection_archive---------50-----------------------

添加业务场景,为建模赋予意义

帕万·特里库塔姆Unsplash 上拍摄的照片

“我们将在周一开始电话营销活动,并有 500 个电话的预算。我们应该联系谁来实现收入最大化?”

在这种情况下,XYZ 银行通过收购一家较小的银行吸纳了 2000 名新客户,但由于资源和预算的限制,只能联系到其中的 500 名。利用来自 XYZ 银行现有客户群的数据和针对现有客户的活动结果,我的目标是确定 500 名客户中应该联系的客户,以实现收入最大化,并为未来的活动提供建议。

商业价值

成功的订户转化为 XYZ 银行的收入。根据领域知识,我们估计订阅的价值为 100 美元。总的来说,我们知道这类营销活动的使用率很低,成功致电的比例约为 10–15%。因此,通过随机联系 500 名客户,我们预计收入在 5,000 美元到 7,500 美元之间。

但是,通过使用预测分析和仔细选择 500 个客户,我们证明了可以为 XYZ 银行创造更多收入。

剧透:通过使用 XGBoost 分类器,我们能够将收入增加到 14,500 美元。请继续阅读,找出答案。

照片由米歇尔·亨德森Unsplash 上拍摄

我选择保持高层次的解释,但是一定要检查我的 GitHub 库来查看我的 Jupyter 笔记本中的详细分析和代码。还有一个面向利益相关方的执行摘要演示

获取数据

本项目使用的数据是来自 UCI 机器学习库的著名银行营销数据集。我的第一步是做一个测试训练分割和分离 2000 个条目,它们将代表 2000 个新客户。

此后,我只剩下 39,000 多个数据点和 20 个预测特性,包括:

  • 个人属性(年龄、工作、教育水平等。)
  • 金融(住房贷款、个人贷款等。)
  • 活动(以前的活动结果、联系方式等。)
  • 经济指标(消费者信心指数、euribor3m 等。)

干净的数据

数据集基本上是干净的,所以这一步比预期的要快。分类数据中有一些用“未知”表示的缺失值。在第一个实例中,我选择用模式替换它们,然后通过使用来自sklearn的 K-最近邻估算器来改进我的工作。

浏览和可视化数据

不出所料,存在明显的阶层失衡,只有 11%的客户订阅定期存款。为了对此进行调整,我使用了 SMOTE(合成少数过采样技术。)

目标阶层失衡

我还研究了各种特性的订阅率。下面显示了一个使用 job 属性的示例。

工作类别中的订阅率

学生或退休的客户更有可能选择定期存款。

定义评估指标

在建模之前,考虑如何评估性能是很重要的。

当模型预测客户不会订阅(target = no)而事实上他们会订阅时,就会出现假阴性。这是非常有害的,因为 XYZ 银行将损失潜在收入。因此,我需要确保我们的模型预测的假阴性最小化。另一方面,当模型预测客户会订阅(target = yes)而实际上他们不会订阅时,就会出现误报。在这种情况下,我们浪费了一个电话的费用。在这种情况下,假阴性比假阳性更糟糕。

准确性是最直接的衡量标准,简单定义为观察总数中正确预测的数量。然而,考虑一个简单地预测每个客户“不”的无技能模型。基于不平衡的类别分布,该模型将实现 88%的准确度分数。因此,具有高精度的模型并不意味着有用或高性能的模型。此外,即使我们对类别不平衡进行了调整,准确性仍然将相同的权重分配给假阳性和假阴性,这不是我们想要的。

Recall 计算真实观察值(真阳性和假阴性)中准确预测值(真阳性)的数量。我的目标是高召回值,因为这样可以最小化假阴性。

最后,我定义了一个具体的利润指标,它考虑了预期收入和看涨期权的成本。如果你对此感兴趣,我再次邀请你在我的 GitHub 上查看完整的项目。

造型

我们训练了以下分类算法:逻辑回归、决策树、K-最近邻、朴素贝叶斯、支持向量分类、Adaboost、梯度推进和 XGBoost。在没有任何超参数调整的情况下,基于树的算法过度适应训练集。然后我们调整我们的模型,并使用RandomizedSearchCV.进行交叉验证

根据我们的利润指标,我们选择 XGBoost 作为我们表现最好的模型。我们使用穷举GridSearchCV进一步调优了 XGBoost 分类器,以找到最佳的超参数选择。

释义

选择模型后,我将它与整个训练集相匹配,并在测试集上生成预测。为了回答我的具体问题,我查看了类别概率,并选择了与类别 1(订阅)关联的概率最高的前 500 个数据点。)这些细节已经交给了营销团队。

事实证明,在所选的 500 名客户中,有 145 名客户实际上认购了定期存款(实际目标值),产生了 14,500 美元的收入。

我还研究了特征的重要性,看看哪些属性对预测有最大的影响。前 5 名如下:
1。雇员人数(代表经济状况的季度指标)2。消费者信心指数 3。客户是否有大学学历
4。客户的工作是否属于管理类别
5。客户是否离婚。

Austin DistelUnsplash 上拍摄的照片

现在你知道了。我希望你觉得这篇文章很有趣。我鼓励你在数据科学项目中创建假设场景,因为这会带来更有趣的体验。它还能让你看到企业如何从你的预测模型中获益。

谁赢得了意甲联赛:进攻 Vs 防守

原文:https://towardsdatascience.com/who-wins-the-serie-a-league-attack-vs-defence-a48128e71e22?source=collection_archive---------35-----------------------

赢得意甲联赛,进攻和防守哪个更重要?数据驱动的答案。

马文·朗斯多夫(左)和安东尼诺·维萨利(右)在 Unsplash 上拍摄的照片

答几天前我结束了应用绘图,在 Python 课程中绘制&数据表示,这是密歇根大学 Coursera 上应用数据科学与 Python 专业的第二个课程。

为了完成本课程,我们被要求分析一个特定的领域和国家。以下是描述:

这项作业要求你在网上找到至少两个相关的数据集,并想象这些数据集来回答一个关于意大利地区运动和田径的问题。

您必须陈述一个关于您认为感兴趣的领域类别和区域的问题。

你必须创造一个视觉效果来解决你陈述的研究问题。除了解决问题,这个视觉应该遵循开罗的真实,功能,美丽和洞察力的原则。

让我们来看一下我完成作业的步骤。

这个问题

首先,有必要提出一个有趣的问题来回答。
想到体育意大利这两个词,你会想到什么?

足球

像大多数意大利人一样,我是一个足球迷。所以我决定一劳永逸地找到这项运动中最常被问到的一个问题的答案:

赢得意甲联赛,进攻和防守哪个更重要?

现在我们有了目标(对,目标!),我们需要数据。

获取数据

我做了一些研究来寻找一个适合我的数据集,但是我没有立即找到我要找的东西。在没有进一步研究的情况下,我认为自己收集数据可能是一个很好的练习。

我需要什么?对我来说,有过去几年,比如说 20 年的联赛决赛,有进球和失球的统计数据就足够了。

所以我寻找冠军的历史档案,最后,我选择了 legaseriea.it 。他们有每年意甲的决赛表,它包含在一个 HTML <表> 中。

2018–19 意甲联赛积分榜,前 10 位。来自 legaseriea.it

在检查了网页源代码之后,我想到了这个脚本。

我不会详细解释这个刮刀的代码,但是如果你感兴趣,我在本文中做了一个类似的 web 刮刀的教程。

[## 用 Python 实现简单的 Web 抓取

黑色星期五就要到了,一如既往,你会在等待的同时不断刷新你想要的商品页面…

levelup.gitconnected.com](https://levelup.gitconnected.com/simple-web-scraping-with-python-1692c11e3b1a)

使用美汤请求,刮刀负责从网页中收集信息并将其写入 csv 文件中。

通过重复过去 20 个赛季的过程,我们得到了我们所需要的。我们的数据集诞生了。

探索性数据分析

现在,我们终于可以打开 Jupyter 笔记本,开始加载数据集了。用 20 个数据帧工作肯定不方便。最好的办法是把它们结合起来,一起工作。

首先,我们添加一个“赛季”列,以便于区分冠军的年份,我们以后会用到它。然后我们可以继续连接。

好了,现在我们的数据框架准备好了,我们可以停下来思考一下。

我们有每支球队的进球(F)和失球(S)数据。这可以让我们了解一支球队的攻防实力。足球中常用的一个在单一维度上表示这两个特征的统计量就是 净胜球 ,即这两个因素的差值。我们把它作为一个新的专栏(GD)添加进来吧。

好的,要回答这个问题,我们必须把注意力集中在联赛中获胜的球队上。让我们创建一个名为获胜者的新数据框架,只包含过去 20 年中获胜的球队。

随着时间的推移,这些团队的目标差异发生了怎样的变化?

目标差异趋势

正如我们从图表中看到的,获胜球队的净胜球随着赛季的推移而增加。这可能是由于:

  • 进球数量的增加
  • 失球减少
  • 以上两者

因此,这些因素中哪一个是决定性的?让我们看看进球和失球的趋势。

进球数(蓝色)和失球数(橙色)趋势

似乎进球数增加了,失球数减少了。有意思。这意味着各队在进攻和防守上都有所提高。

但是这两个因素哪个对最后的胜利更有决定性呢?我们还没有回答这个问题。为了找到答案,我们必须首先确定每年获胜的球队是否拥有联盟中最好的防守和/或最好的进攻。

通过按赛季对原始数据帧进行分组,我们可以创建一个新的数据帧,它具有两个布尔列 BA(最佳进攻)和 BD(最佳防守)。此时,我们只需将这个数据帧与获胜者合并,就可以得到最终的数据帧。

这个数据框架包含了我们正在寻找的答案。让我们通过创建最终视觉来直接找出答案。

形象化

这个想法是把两种情节叠加起来。

首先,一个简单的线图显示了每年获胜球队的净胜球数(如前所述)。然后,用散点图来表示球队是以联盟的最佳防守获胜,还是以联盟的最佳进攻获胜,或者两者兼而有之。

正如作业中所指定的,视觉应该遵循 Cairo 的真实、功能、美丽和深刻的原则。考虑到这一点,我做了一些调整,使视觉符合这些原则,这就是结果。

答案

图像清楚地给出了我们问题的答案。

拥有强大的防守似乎是最终胜利的关键。

从上图可以看出,在过去 20 年的75% 的时间里,获胜的球队拥有联盟中最好的防守,包括:

  • 8 次,只有最好的防守(蓝点)
  • 7 次最佳进攻和最佳防守(绿点)

在过去的 20 年中,只有 5 次(1999-00,2000-01,2003-04,2005-06,2006-07)冠军没有联盟中最好的防守。此外,在过去连续 12 年的比赛中,获胜的球队总是拥有最好的防守。

虽然肯定不是唯一的,但良好的防守似乎是赢得冠军的关键因素。如果你想更深入,寻找其他有趣的模式,你可以在 Kaggle 上找到这个数据集。

资源

谢谢你走了这么远!作为一个初学者,收到反馈对我来说很重要,所以如果你有任何反馈,请在评论中告诉我。

安吉洛

谁赢得了超级星期二的媒体报道。基于数据

原文:https://towardsdatascience.com/who-won-super-tuesdays-media-coverage-based-on-data-157221b59fcc?source=collection_archive---------33-----------------------

我们分析了从 2020 年 3 月 1 日到 2020 年 3 月 7 日所有提到美国 2020 年候选人的在线媒体文章,以检查谁最受媒体关注

安迪·菲利西奥蒂在 Unsplash 上拍摄的照片

Politwire ,我们监测并分析媒体对政治家的报道。我们帮助政治活动、企业和媒体公司了解政治家的媒体之路。

民主党超级星期二

2020 年 3 月 3 日,美国 14 个州举行初选。大约有三分之一的代表参与其中。你可能已经知道,乔·拜登比伯尼·桑德斯多获得了大约 100 张代表票,重新领先。

尽管乔·拜登最终胜出,但这是否让他在媒体报道中大幅领先?

在上图中,我们可以看到超级星期二这一周每一天每个候选人的文章数量。拜登和桑德斯很接近,即使在超级星期二的结果之后,乔·拜登的关注度也只是稍微高一点。

尽管唐纳德·特朗普主导了媒体报道,但他是美国现任总统,如果他不是第一个,那才奇怪。

没有媒体偏见?

乍一看,2020 年美国总统候选人的媒体份额似乎是公平分布的。

我们得到的主要假设是,最有可能的是乔·拜登和伯尼·桑德斯总是一起出现——这些文章中的大部分可能都是关于民主党候选人的,而唐纳德·川普有“他的新闻”。

独一无二的文章是只提到一个候选人,而没有提到另外两个人中的任何一个的文章。

唐纳德·特朗普一半的文章都没有提到民主党提名人。看看他的底线有多高。

媒体存在的独特性是最重要的跟踪指标之一。无论是对总统候选人还是对企业来说,在竞争对手不出现的地方拥有自己的媒体份额是至关重要的。

唐纳德·特朗普是媒体的宠儿吗?

也许不会,即使唐纳德·特朗普是媒体存在的领导者,这些提及可能没有那么有用。

分离数据的一种方法是调查阳性文章的比例。

正比率的计算方法是将带有肯定语气的文章数除以所有文章数。

根据所有文章,乔·拜登和伯尼·桑德斯的正比率都超过了唐纳德·川普。

此外,拜登和桑德斯是相关的,因为绝大多数文章是相同的。因此,我们应该对独特文章的语气更感兴趣。

分析独特文章的正比率,我们可能会注意到两个主要的见解:

  1. 唐纳德·特朗普——每 10 篇独特的文章中,就有 1 篇文章的整体基调是积极的
  2. 甚至在超级星期二之前,乔·拜登的成绩也比伯尼·桑德斯好

然而,唐纳德·特朗普的 10%足以在绝对值上击败民主党候选人。

获胜者是…

不是伯尼·桑德斯。不是那个星期。

尽管如此,乔·拜登在他的重要胜利(也许是最重要的一次)后并没有得到任何异常的关注。

唐纳德·特朗普不是失败者。不管是因为他的总统职位还是因为媒体“喜欢”他,事实是他的名字是最常被听到的。

关于作者

我们是政治网,我们刚刚开始写关于 2020 年总统选举的报道。

我们有仪表盘,你可以在那里看到过去七天的结果。它是实时更新的。

此外,我们在 twitter 上发布了最近 24 小时的更新:

订阅我们的时事通讯,以防你想收到媒体报道数据分析的每周摘要。

最初发表于 Politwire 博客

如果你的数据科学迷失在翻译中,你会找谁?

原文:https://towardsdatascience.com/who-you-gonna-call-if-your-data-science-is-lost-in-translation-1df9829b7b8f?source=collection_archive---------35-----------------------

随着大量数据科学家进入就业市场,分析翻译将成为新的热门角色

曾经有一位业务主管,回家时总是感到困扰和心烦意乱。一天晚上,他的搭档问他:“怎么了?你在担心什么。”。“数据太多了”,他回答道,“我无法理解,也无法理清头绪。”“你可以试着雇佣一个数据科学家”,他的合伙人建议道。所以他就这么做了。六个月后,他仍带着不安回家,当他的搭档再次询问发生了什么事时,他回答说:“有这么多数据,我不明白我的数据科学家在告诉我什么”。

毫无疑问,这是一个日益严重的问题。随着数据科学在组织和企业中变得越来越重要,以及近年来越来越多的数据科学家被聘用,人们越来越感觉到数据科学家和运营业务领导者之间的沟通存在差距。这种差距是严重的。这阻碍了数据科学家对他们的工作产生影响,也阻碍了业务领导意识到他们的数据科学家的价值。这种良性循环可能会导致双方的沮丧和消极情绪,以及对数据科学是否如其所吹捧的那样的怀疑。

这个问题的解决方案是分析翻译,这种人了解业务及其实际决策需求,但也对分析感兴趣,有很强的沟通技能,并对数据科学家做什么以及他们如何做足够了解,因此很危险。这不仅仅是我在喝最新的库尔 Aid!我是凭经验说的——我一直与分析翻译密切合作,我不知道没有他们我该怎么办。我充满信心地预测,这个角色将是分析领域的下一个重要角色。

为什么需要翻译人员?

首先,如果你是一名数据科学家,你不应该把这当成对你技能的批评。它们稀有而重要,但风险在于它们没有影响力,因此没有得到应有的重视。以下是我认为数据科学家没有发挥其在企业和组织中的潜在影响的一些常见原因。我称这些挑战为三是:

  1. 数据科学家通常不熟悉他们的工作环境,对于他们被要求解决的业务问题,他们不具备 本能——这种本能只能来自于在业务中长时间的扎根。这意味着他们不能完全理解他们的输出如何对他们的利益相关者有用,并且他们经常没有人帮助他们思考这个问题。这可能导致利益相关者实际上无法理解或实施的产出。
  2. 数据科学家通常没有太多的 兴趣 花费大量时间思考业务实现。他们的热情是方法论和技术,他们从让事情运转和产生结果中得到乐趣。如果他们不得不花一半的时间开发幻灯片和参加会议,他们中的许多人会对自己的工作非常失望,他们的进度会慢很多。
  3. 数据科学家通常没有足够的 绝缘 来应对业务的日常需求,以便有时间有效地练习他们的技能。如果没有适当的保护,他们可能会很快被任务或问题淹没,其中许多任务或问题可以由一个有能力的报告分析师来解决。他们通常是业务新手,积累的个人资本有限,在确定工作优先级方面没有支持,他们只是花时间试图阻止那些不真正了解自己工作的人的随机工作流。

是什么造就了一个伟大的翻译家?

解决三个 I 告诉我们许多关于一个伟大的分析翻译者的特征:

  1. 他们应该来自这个行业——或者非常相似的行业——这样他们就有了来自经验的 本能 。数据科学家和他们的翻译伙伴之间的大部分对话涉及讨论方法和输出的选项,数据科学家提供关于什么是可能的信息,翻译提供关于什么是有用的判断。
  2. 他们应该享受在企业中完成事情的刀光剑影和政治,以及随之而来的沟通和影响过程。他们以前可能担任过咨询或运营的角色。但是他们应该对数据及其如何推动更好的决策有兴趣,对方法论和科学有热情。
  3. 他们应该有很强的能力来制定优先事项并与利益相关者达成一致,并积极主动地确保免受其他干扰。他们应该能够快速确定其数据科学家合作伙伴的独特技能,并帮助应对没有利用这些技能的工作需求。

因此,无论您是一名不懂数据科学的高管,还是一名不懂管理的数据科学家,都只能通过引入正确的分析翻译来实现。在它们被抢购一空之前,你可能想现在就行动起来!

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn Twitter上找我。**

图片来自《迷失在翻译中》(2003)——由聚焦功能提供

星巴克应该向谁发送产品?

原文:https://towardsdatascience.com/whom-should-starbucks-send-offerings-to-a-predictive-analysis-on-customer-behaviour-ce82fc87a8a0?source=collection_archive---------48-----------------------

对客户行为的预测分析

@ Unsplash

商业理解

每隔几天,星巴克就会向手机应用程序的用户发出一次报价。优惠可以仅仅是饮料的广告,也可以是实际的优惠,如折扣BOGO(买一送一),或者仅仅是包含产品信息的信息性优惠。某些用户可能在特定的几周内收不到任何优惠。通过这种方式,星巴克很可能可以增加顾客在收到报价后打开报价并最终完成交易的可能性。星巴克希望分析客户行为,了解哪种类型的客户会打开优惠并完成交易?

问题陈述

我们有兴趣回答以下两个问题:

1.应该向特定客户发送哪种报价才能让该客户购买更多?
2。接受报价的客户有什么共同特征吗?

问题解决方法

  • 数据探索数据可视化每个投资组合、配置文件和交易数据。
  • 预处理 (清洗&转换)数据和特征工程形成一个组合的主数据集
  • 对清洗后的预处理数据应用数据分析
  • 缩放数字特征。
  • 使用监督学习模型了解哪些客户受到产品的影响。经过训练的分类模型会将客户分类为目标类别(如果客户会响应,则为 1;如果客户不会响应,则为 0)
  • 评估模型使用准确度、f-beta 分数、训练时间。准确度和精确度是分类问题中的常见度量。评估将展示准确性(正确预测占预测总数的比率)。根据指标和培训时间选择最佳性能模型。
  • 模型调优使用 GridSearchCV 寻找最佳超参数(以提高所选模型的性能)。
  • 计算训练模型的最佳估计器给出的特征重要性
  • 在测试集上计算最佳模型的性能。

数据集描述

数据包含在三个文件中:

  • portfolio.json —包含要约 id 和关于每个要约的元数据(持续时间、类型等)。)
  • profile.json —每个客户的人口统计数据
  • 抄本. json —“交易”、“收到的报价”、“查看的报价”和“完成的报价”的记录

以下是文件中每个变量的模式和解释:

portfolio.json

  • id(字符串)—优惠 id
  • offer_type (string) —优惠的类型,如 BOGO、折扣、信息
  • 难度(int)——完成一项提议所需的最低花费
  • 奖励(int) —奖励是为完成一项提议而给予的
  • duration(int)-要约开放的时间,以天为单位
  • 频道(字符串列表)

profile.json

  • 年龄(整数)—客户的年龄
  • 成为会员日期(int) —客户创建 app 帐户的日期
  • 性别(str) —客户的性别(请注意,有些条目包含“O”代表其他,而不是 M 或 F)
  • id (str) —客户 id
  • 收入(浮动)—客户的收入

转录本. json

  • 事件(str) —记录描述(即交易、收到的报价、查看的报价等。)
  • 人员(字符串)—客户 id
  • time (int) —测试开始后的时间,以小时为单位。数据开始于时间 t=0
  • value —(字符串字典)—报价 id 或交易金额,具体取决于记录

星巴克希望将优惠数据、客户数据和交易数据(运营数据)联系起来,以获得关于客户行为的见解以及优惠作为商业价值的整体有效性。

数据探索

投资组合数据描述

年龄、收入和性别分布

年龄分布图表明,客户的平均年龄为 60 岁,大多数客户属于 40 至 70 岁之间的年龄范围。顾客工资的平均值在 6 万英镑左右。性别分布表明更多的顾客是男性。

每年和每月加入星巴克的顾客人数

每年加入的客户分布表明,每年加入的客户数量随着时间的推移而增加。在寒冷季节后期,特别是在(八月、十月、十二月、一月)顾客会员增加,这可能与更多的顾客在寒冷天气喝更多的咖啡有关。

按成员年份分列的性别分布

性别:1(女性)、2(男性)和 3(其他)

上面的图表显示,与前几年相比,更多的男性成为了星巴克的会员,而前几年的会员性别分布是平等的。

客户收入分配

星巴克女性顾客的平均收入高于男性顾客。

概要数据描述

**#** *Plot distribution of ages in profile dataframe* profile[‘age’].value_counts().sort_index(ascending=**True**).plot.bar(figsize=(20,8), fontsize=12,color=’teal’); plt.xlabel(‘Age’, fontsize=18) plt.ylabel(‘Count’, fontsize=18) plt.title(‘Distribution of age counts’, fontsize=18) plt.show()

年龄为 118 岁的客户似乎是一个异常值,其中年龄为 118 岁的客户数量为 2175,这是不现实的,将从数据框架中删除。

*#Gender counts* 
profile.gender.value_counts()

成绩单数据描述

*# Calculate the percentage of unique values in event feature* round((transcript[‘event’].value_counts()/transcript[‘event’].value_counts().sum())*100,2)

数据预处理

清理投资组合数据:

  • 将 id 列名重命名为 offer_id。
  • 缩放和标准化列难度和奖励
  • 将时间功能从天转换为小时
**#** *renaming 'id' column to offer_id.* portfolio.rename(columns={'id':'offer_id'},inplace=**True**) *# Initialize a scaler, then apply it to the features* 
scaler = MinMaxScaler() *# default=(0, 1)* columns_to_scale = ['difficulty','reward'] portfolio[columns_to_scale] = scaler.fit_transform(portfolio[columns_to_scale]) *# Convert time feature from days to hours* portfolio['duration_hour'] = portfolio['duration']*24 *# Drop duration and channels* portfolio.drop(columns=['duration'],axis=1, inplace=**True**) portfolio

清理配置文件数据:

  • 将 id 列名重命名为 customer_id。
  • 将年龄值 118 编码为 NaN。
  • 在成为成员列中创建可读的日期格式。
  • 删除没有性别、收入、年龄数据的行
  • 将性别值转换为数字 1、2 和 3。
  • 将年龄和收入从 float 转换为 int
  • 添加开始年份和开始月份列
  • 添加一个新列“membership_days”,该列将显示自客户成为会员以来的天数
  • 创建新列“member_type”
#rename id col name to customer_id.
profile.rename(columns={‘id’:’customer_id’},inplace=True)#encode age value 118 to NaN
profile[‘age’] = profile[‘age’].apply(lambda x: np.nan if x == 118 else x)#create readable date format for became_member_on column.
profile.became_member_on = profile[‘became_member_on’].astype(str).astype(‘datetime64[ns]’, format = “%Y%m%d”)# dropping rows with NaNs in ‘age’, ‘gender’ and ‘income’ columns
profile.dropna(inplace=True)#encode gendr column
profile[‘gender’] = profile[‘gender’].map({‘F’: 1, ‘M’: 2, ‘O’: 3})#add start_year column
profile[‘start_year’] = profile.became_member_on.dt.year
profile[“start_month”] = profile.became_member_on.dt.month# changing the datatype of ‘age’ and ‘income’ columns to ‘int’
profile[[‘age’,’income’]] = profile[[‘age’,’income’]].astype(int)# adding a new column ‘membership_days’ ,that will present the number of days since the customer become a member
profile[‘membership_days’] = datetime.now() — profile[‘became_member_on’]# removing the ‘days’ unit
profile[‘membership_days’] = profile[‘membership_days’].dt.days# creating a new column ‘member_type’ representing the type of the member: new, regular or loyal depending on the number of his ‘membership_days’
profile[‘member_type’] = pd.cut(profile[‘membership_days’], bins=[390, 1000, 1600, 2500],labels=[‘new’, ‘regular’, ‘loyal’])# Drop channels and offertype column
profile.drop(columns=[‘became_member_on’,’membership_days’ ],axis=1, inplace=True)# Re-arranging the columns to have ‘customer_id’ column the first column in dataset
profile = profile.reindex(columns=[‘customer_id’, ‘age’, ‘gender’, ‘income’, ‘start_year’, ‘start_month’, ‘member_type’])

清理抄本数据:

迭代 value 列,用列表中的值更新 offer_id、amount、reward 列。

**def** cleaning_transcript(transcript):
    *'''*
 *data cleaning the transcript dataframe, return usable dataframe need contain offer events*

 *INPUT:*
 *transcript - the transcript dataframe to be cleaned*

 *OUTPUT:*
 *transcript - the cleaned offer dataframe*

 *'''*
    *#Change name of feature person to customer_id in transcript dataframe*
    transcript.rename(columns={'person': 'customer_id'}, inplace=**True**)

    transcript['offer_id'] = ''
    transcript['amount'] = 0
    transcript['reward'] = 0  
    *#Iterate over value column, check it and update offer_id, amount, reward columns*
    **for** idx, row **in** transcript.iterrows():
        **for** k **in** row['value']:
            **if** k == 'offer_id' **or** k == 'offer id': *# b/c 'offer_id' and 'offer id' are representing the same thing*
                transcript.at[idx, 'offer_id'] = row['value'][k]
            **if** k == 'amount':
                transcript.at[idx, 'amount'] = row['value'][k]
            **if** k == 'reward':
                transcript.at[idx, 'reward'] = row['value'][k]

    *# Drop event_transaction since they cause missing values in 'order id' column* 
    transcript = transcript[transcript['event'] != 'transaction']
    *# Drop value column*
    transcript.drop(columns=['value'], axis = 1, inplace = **True**)

    **return** transcript

主数据集的数据探索

*# merge 'cleaning_transcript' dataset with 'profile' on 'offer_id'*
master_df = cleaning_transcript_df.merge(portfolio,how='left',on='offer_id')*# join 'master_df' dataset with 'portfolio' on 'customer_id'*
master_df = master_df.merge(profile,how='left',on='customer_id')

每个年龄组最受欢迎的优惠是 BOGO(买一送一)

女性和男性顾客更喜欢 BOGO 和打折商品

女性顾客比男性顾客更容易受到产品的影响

女性完成了约 75%的所查看的报价,而男性完成了 58%的所查看的报价。

常客(3-4 年会员)在会员类型中完成了更高范围的产品

Number of offer completed by Female: 15477, 74.46% of total offers viewed.
Number of offer viewed by Female: 20786.
Number of offer completed by Males: 16461, 58.17% of total offers viewed.
Number of offer viewed by Males: 28297.

完成一个报价的平均时间是 17 天

# excluding all events of ‘offer received’, just focus on offer viewed or offer completed
copy_master_df = master_df[master_df[‘event’] != ‘offer received’]
copy_master_df = copy_master_df[copy_master_df[‘event’] != ‘transaction’]
avg_time_spent_offer = copy_master_df.groupby([‘gender’, ‘offer_id’])[‘time’].mean().reset_index()print(avg_time_spent_offer[avg_time_spent_offer[‘gender’] == 1][‘time’].values[0] / 24)
print(avg_time_spent_offer[avg_time_spent_offer[‘gender’] == 2][‘time’].values[0] / 24)16.9176908752
16.8785739814

将分类值转换为数值

# OneHotEncoding feature ‘offer type’
master_df = pd.get_dummies(master_df, columns = [‘offer_type’], prefix= ‘’, prefix_sep=’’)

# OneHotEncoding feature ‘event’
master_df = pd.get_dummies(master_df, columns = [‘event’], prefix= ‘’, prefix_sep=’’)

# Change column names
master_df.rename(columns = {‘offer received’:’offer_received’,
 ‘offer viewed’:’offer_viewed’,
 ‘offer completed’:’offer_completed’}, inplace=True)

# One-hot encode channels
master_df[‘web’] = master_df[‘channels’].apply(lambda x: int(1) if ‘web’ in x else int(0))master_df[‘email’] = master_df[‘channels’].apply(lambda x: int(1) if ‘email’ in x else int(0))master_df[‘mobile’] = master_df[‘channels’].apply(lambda x: int(1) if ‘mobile’ in x else int(0))master_df[‘social’] = master_df[‘channels’].apply(lambda x: int(1) if ‘social’ in x else int(0))# Drop channels column
master_df.drop(columns=[‘channels’], axis = 1, inplace = True)# creating a new column representing the income group to which the customer belongs master_df[‘income_range’] = pd.cut(master_df[‘income’], bins=[29999, 60000, 90000, 120001],labels=[‘average’, ‘above-average’, ‘high’])# replacing the ‘income_range’ categorical labels by numerical labelslabels_income_range = master_df[‘income_range’].astype(‘category’).cat.categories.tolist()
replace_map_comp_income_range = {‘income_range’ : {k: v for k,v in zip(labels_income_range,list(range(1,len(labels_income_range)+1)))}}
master_df.replace(replace_map_comp_income_range, inplace=True)#replacing the ‘member_type’ categorical labels by numerical labelslabels_member_type = master_df[‘member_type’].astype(‘category’).cat.categories.tolist()
replace_map_comp_member_type = {‘member_type’ : {k: v for k,v in zip(labels_member_type,list(range(1,len(labels_member_type)+1)))}}
master_df.replace(replace_map_comp_member_type, inplace=True)#replacing the ‘offer_id’ categorical labels by numerical labelslabels_member_type = master_df[‘offer_id’].astype(‘category’).cat.categories.tolist()
replace_map_comp_member_type = {‘offer_id’ : {k: v for k,v in zip(labels_member_type,list(range(1,len(labels_member_type)+1)))}}
master_df.replace(replace_map_comp_member_type, inplace=True)# replacing the ‘age_group’ categorical labels by numerical labelslabels_age_group = master_df[‘age_group’].astype(‘category’).cat.categories.tolist()
replace_map_comp_age_group = {‘age_group’ : {k: v for k,v in zip(labels_age_group,list(range(1,len(labels_age_group)+1)))}}# replace categorical labels in ‘age_group’ column with numerical labelsmaster_df.replace(replace_map_comp_age_group, inplace=True)

数据建模

六种不同的机器学习模型将预测客户是否会对报价做出反应。在建立模型之前,我们的数据集应该分为训练和测试数据集,并选择了一些功能和目标表。

特征: time_h,offer_id,金额,奖励,难度,duration_hour,age_group,bogo,折扣,资讯,性别,member_type,income_range,web,email,mobile,social。

目标标签:报价 _ 已完成

# Split the data into features and target labelX = master_df[[‘time’,’offer_id’,’amount’,’reward’,’difficulty’, ’duration_hour’,’age_group’,’bogo’,’discount’,’informational’,’gender’, ‘member_type’,’income_range’,’web’,’email’,’mobile’, ‘social’]]Y = master_df[‘offer_completed’]

创建培训和预测渠道

  • [sklearn.metrics](http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics)导入fbeta_scoreaccuracy_score
  • 使学习者适应采样的训练数据,并记录训练时间。
  • 对测试数据X_test,以及前 300 个训练点X_train[:300]进行预测。
  • 记录总预测时间。
  • 计算训练子集和测试集的准确性分数。
  • 计算训练子集和测试集的 F 值。
# Import two metrics from sklearn - fbeta_score and accuracy_score
from sklearn.metrics import fbeta_score, accuracy_scoredef train_predict(learner, sample_size, X_train, y_train, X_test, y_test): 
    '''
    inputs:
       - learner: the learning algorithm to be trained and predicted on
       - sample_size: the size of samples (number) to be drawn from training set
       - X_train: features training set
       - y_train: income training set
       - X_test: features testing set
       - y_test: income testing set
    '''

    results = {}

    # Fit the learner to the training data using slicing with 'sample_size' using .fit(training_features[:], training_labels[:])
    start = time() # Get start time
    learner.fit(X_train[:sample_size],y_train[:sample_size])
    end = time() # Get end time

    # Calculate the training time
    results['train_time'] = end-start

    # Get the predictions on the test set(X_test),
    # then get predictions on the first 300 training samples(X_train) using .predict()
    start = time() # Get start time
    predictions_test = learner.predict(X_test)
    predictions_train = learner.predict(X_train[:300])
    end = time() # Get end time

    # Calculate the total prediction time
    results['pred_time'] = start-end

    # Compute accuracy on the first 300 training samples which is y_train[:300]
    results['acc_train'] = accuracy_score(y_train[:300],predictions_train)

    # Compute accuracy on test set using accuracy_score()
    results['acc_test'] =  accuracy_score(y_test,predictions_test)

    # Compute F-score on the the first 300 training samples
    results['f_train'] = fbeta_score(y_train[:300],predictions_train,beta=0.5)

    # Compute F-score on the test set
    results['f_test'] = fbeta_score(y_test,predictions_test,beta=0.5)

    # Success
    print("{} trained on {} samples.".format(learner.__class__.__name__, sample_size))   
    # Return the results
    return results

初始模型评估

  • 初始化三个模型,并将它们存储在“clf_D”、“clf_E”和“clf_F”中。
# Initialize the three models
clf_D = LogisticRegression(random_state=42) 
clf_E = RandomForestClassifier(random_state=42)
clf_F = GradientBoostingClassifier(random_state=42)# Calculate the number of samples for 1%, 10%, and 100% of the training data
# samples_100 is the entire training set i.e. len(y_train)
# samples_10 is 10% of samples_100 (ensure to set the count of the values to be `int` and not `float`)
# samples_1 is 1% of samples_100 (ensure to set the count of the values to be `int` and not `float`)
samples_100 = len(X_train)
samples_10 = int(0.1 * samples_100)
samples_1 = int(0.01 * samples_100)# Collect results on the learners
results = {}
for clf in [clf_D, clf_E, clf_F]:
    clf_name = clf.__class__.__name__
    results[clf_name] = {}
    for i, samples in enumerate([samples_1, samples_10, samples_100]):
        results[clf_name][i] = \
        train_predict(clf, samples, X_train, y_train, X_test, y_test)# Run metrics visualization for the three supervised learning models chosen
vs.evaluate(results, accuracy, fscore)

模型调整

在这一部分,我们将选择最佳模型用于我们的数据,然后,执行网格搜索优化。

# Import 'GridSearchCV', 'make_scorer', and any other necessary libraries
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import make_scorer# Initialize the classifier
clf = RandomForestClassifier(random_state = 1)parameters = {'n_estimators': [10, 50, 80],'max_depth': [None, 2, 3, 4],'min_samples_split': [2,3,4],'min_samples_split': [3],'min_samples_leaf': [1]}# Make an fbeta_score scoring object using make_scorer()
scorer = make_scorer(fbeta_score, beta=0.5)# Perform grid search on the classifier using 'scorer' as the scoring method using GridSearchCV()
grid_obj =  GridSearchCV(estimator=clf, param_grid=parameters, scoring=scorer, cv=None)# Fit the grid search object to the training data and find the optimal parameters using fit()
grid_fit = grid_obj.fit(X_train, y_train)# Get the estimator
best_clf = grid_fit.best_estimator_# Make predictions using the unoptimized and model
predictions = (clf.fit(X_train, y_train)).predict(X_test)
best_predictions = best_clf.predict(X_test)# Report the before-and-afterscores
print("Unoptimized model\n------")
print("Accuracy score on testing data: {:.4f}".format(accuracy_score(y_test, predictions)))
print("F-score on testing data: {:.4f}".format(fbeta_score(y_test, predictions, beta = 0.5)))
print("\nOptimized Model\n------")
print("Final accuracy score on the testing data: {:.4f}".format(accuracy_score(y_test, best_predictions)))
print("Final F-score on the testing data: {:.4f}".format(fbeta_score(y_test, best_predictions, beta = 0.5)))

未优化模型
在测试数据上的准确度分数:0.8021
在测试数据上的 F 分数:0.5381

优化模型
测试数据最终精度得分:0.8031
测试数据最终 F 值:0.5415

# Import a supervised learning model that has 'feature_importances_'
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier# Train the supervised model on the training set using .fit(X_train, y_train)
model_rforest = RandomForestClassifier().fit(X_train, y_train)# Extract the feature importances
importances_rforest = model_rforest.feature_importances_# Plot
print("Random Forest")
vs.feature_plot(importances_rforest, X_train, y_train)

在很大程度上影响客户是否会完成产品的最重要因素是会员资格的期限(时间)。顾客成为星巴克会员的时间越长,就越有可能对他们收到的优惠做出反应。然后,影响顾客反应可能性的第二和第三个重要因素是年龄和收入,这很有意义。此外,他们收到的录用通知的数量也会对回应产生很大影响。

# Prepare the dataframe of feature importances given to features by best estimator of RandomForest
feat_imp_df = pd.DataFrame(model_rforest.feature_importances_,\
                           index=X_train.columns.tolist(),\
                           columns=['feat_imp']).reset_index()feat_imp_df.rename(columns={'index': 'feature'}, inplace=True)
feat_imp_df['feat_imp_perc'] = np.round((feat_imp_df['feat_imp']/feat_imp_df['feat_imp'].sum())*100,2)
feat_imp_df = feat_imp_df.sort_values(by=['feat_imp_perc'], ascending=False).reset_index(drop=True)
feat_imp_df

特征选择和新模型测试性能

# Import functionality for cloning a model
from sklearn.base import cloneimportances = importances_ada
# Reduce the feature space
X_train_reduced = X_train[X_train.columns.values[(np.argsort(importances)[::-1])[:5]]]
X_test_reduced = X_test[X_test.columns.values[(np.argsort(importances)[::-1])[:5]]]# Train on the “best” model found from grid search earlier
clf = (clone(best_clf)).fit(X_train_reduced, y_train)# Make new predictions
y_pred = clf.predict(X_test_reduced)# Report scores from the final model using both versions of data
print(“Final Model trained on full data\n — — — “)
print(“Accuracy on testing data: {:.4f}”.format(accuracy_score(y_test, best_predictions)))
print(“F-score on testing data: {:.4f}”.format(fbeta_score(y_test, best_predictions, beta = 0.5)))
print(“\nFinal Model trained on reduced data\n — — — “)
print(“Accuracy on testing data: {:.4f}”.format(accuracy_score(y_test, y_pred)))
print(“F-score on testing data: {:.4f}”.format(fbeta_score(y_test, y_pred, beta = 0.5)))

未优化模型
在测试数据上的准确度分数:0.8031
在测试数据上的 F 分数:0.5415

优化模型
测试数据最终精度得分:0.8253
测试数据最终 F 值:0.6007

结论

分析表明,随机森林模型具有最好的训练数据准确性和 F1 值。分析表明,随机森林模型的测试精度为 0.82,F1 值为 0.6。会员资格的长短、年龄和收入等主要因素确实会影响顾客对报价做出反应的可能性。

男女都喜欢 BOGO 和打折商品,最好是 BOGO(买一送一)

女性顾客比男性顾客更容易受到产品的影响——女性顾客完成了他们所查看产品的 75%,而男性顾客完成了他们所查看产品的 58%。

57%的顾客是男性,女性占 41%。

常客(3-4 年会员)在会员类型中完成了更高范围的产品。

男性和女性都花了将近 17 天的时间来完成报价。

大多数成员是在 2017 年加入的。在寒冷季节后期,特别是在(八月、十月、十二月、一月)顾客会员增加,这可能与更多的顾客在寒冷天气喝更多的咖啡有关。

机器学习模型建议向秋冬期间在星巴克成为 3-4 名会员的高收入女性发送产品。

丰富

获得额外的特征将有助于提供更好的分类结果,因为我们仅限于例如年龄、性别和收入。

还可以对特征工程步骤进行改进,以查看是否有其他新特征要引入,并执行特征缩减方法,以查看它将如何影响模型性能。然而,特征维数减少在我们的例子中并不重要,因为我们没有那么多特征。

另一个改进是探索持续时间、奖励和难度的影响,以及它们如何影响报价响应和购买,并基于这些因素创建新功能。

最后,我们可以通过使用回归算法分析每个客户的消费金额来改进模型,以回答他们对报价的回应可能性有多大的问题,假设消费金额和对报价的回应之间可能存在相关性。

代码可以在这里找到。

谁是大骗子?

原文:https://towardsdatascience.com/whos-a-big-ol-fibber-b6b1259304db?source=collection_archive---------26-----------------------

一次从多个 Politifact 配置文件中找出意义,这是实际聚类分析中的一个练习

paweczerwi ski 在 Unsplash 上的照片

乖乖女的圣诞节!没错,我们四年一次的总统选举周期开始了。每四年,里面的政党举行一次形式上的加冕仪式,而外面的政党装满一辆小丑车进行全国巡演。除非第 22 修正案生效,否则这就是一场小丑赛车。

今年只有一辆小丑车,但马戏团已经拿出一大包来装满它。我们如何区分它们?有很多标准,你需要优先考虑你自己的。这通常包括研究,观看辩论,或者只是等待别人为你做决定。我将只处理“研究”角度的一个方面。与其用更多的废话来填充这篇文章,我将切入正题。我在比较 Politifact 记分卡。你可能已经知道什么是 Politifact 记分卡。

如果你不知道,Politifact 是一家报纸运营的在线“事实核查”实体。它对各种公共实体的声明进行六分制评级。因此,它有以下限制:它是“值得注意”的偏见。声明必须由政治上认为值得注意的人做出,而且声明本身必须有值得注意的来源和值得注意的重要性。由于 Politifact 没有无限的员工和预算,这意味着声明和故事会被忽略。因为决策是由人做出的,所以存在偏见。这背后没有恶意或议程。其次,它的评级包含一些偏见因素,尤其是当评级处于区间的中间时。这是不可避免的。有时需要做出判断。“裤子着火了”和“真实”很容易判断,但是当你处于中间时,可能会有些模糊。

然而,Politifact 对某个人的评价越多,我们对这个人的整体形象就越有信心。这是由于“中心极限定理”,该定理指出,从总体(陈述)中获得的样本(评级)越多,“模糊”元素相互抵消得越多。

但是,偏见问题对于利用 Politifact 档案来说并不是什么大不了的事情。是简介问题。我什么意思?大多数人似乎以一种精心挑选的方式使用 Politifact。他们会放大他们认为合适的特定规则。如果你的目标是研究具体问题,那没什么不对。如果你的目标是对政治人物进行广泛的比较,那就大错特错了。当我们关注单个数据点时,我们让自己的情绪来驱动结论。如果政治家 A 对我们的一个个人热点问题说了一些令人讨厌的话,而那句令人讨厌的话恰好被裁定为“错误”,那么它会影响我们对政治家 A 的整体看法,而不管该政治家的其他历史。**

问题是

不幸的是,我们大多数人都不会硬连线比较个人资料,尤其是在选举前的一年,我们可能需要比较多个个人资料。看看这个:

这是特朗普先生、准民主党候选人(截至 2010 年 2 月 10 日)、彭斯先生和国会四名政党领导人的聚合 politifact 简介。误差棒是使用每个人的总裁定数作为“n”的比例的标准误差。条目按照从最多到最少的规则排序。举例来说,很容易一眼就看出特朗普先生与桑德斯先生不相似,但他们两人如何同时与沃伦女士相比较,以及如何同时与其他所有人相比较?

一个解决方案?

我们并不是天生就能通过查看多个个人资料来回答这些问题。幸运的是,有一种方法可以回答这些问题:集群。聚类有很多种类型。我不打算详细讨论所有这些问题。如果不熟悉,可以从这篇文章开始

我在本文中使用的类型称为层次聚类。我碰巧喜欢它,因为它链接了整个数据集,这使得很容易看到一个集群如何与另一个集群相关联。在我开始具体分析之前,我将切入正题,向您展示我的聚类分析的基本结果:

颜色对应于集群。有三个基本的集群,加上特朗普先生在他自己的现实世界里。共和党人的名字用下划线标出。我们得到了一些有趣的结果。南希·佩洛西和 Mssrs 是一类人。彭斯和麦卡锡。米奇·麦康奈尔和 Mssrs 是一类人。桑德斯、布蒂吉格、拜登和舒默,还有加巴德。你们中的一些人可能看着柱形图并不同意。,因为如果你把上面的聚类当成那个聚类,你就没有理解聚类的所有问题。

比宣传的还要乱!

这棵树是几种选择的结果。没有一种聚类形式是客观的。所有的聚类都要求原始信息的某些方面比其他方面更重要。结果受到这些选择的影响。我现在要脱光了。我将公开我所做的所有选择,以及它们可能如何改变输出。首先,为什么是四个集群?有各种各样令人困惑的方法来为层次聚类选择“最佳”数量的聚类。R 包" NbClust "有超过 30 个索引,它可以通过计算找到层次聚类中的“最佳”聚类数。对于给定的聚类,它们通常彼此不一致。我用了“肘法,基于“T6”聚类平方和。还有一些我没有提到的方法。

聚类通常从创建“距离矩阵”开始。这是所有数据点之间所有“距离”的集合。但什么是“距离”呢?这并不简单。通常我们说的“距离”是指“欧氏距离”。这是两点之间直线的长度。但是还有其他类型的“距离”。“城市街区”或“曼哈顿”的距离就是它听起来的样子。你也可以使用所谓的“相关距离”。我为上面的树选择的是“分数距离”。有很好的理由对超过三维的数据集使用分数距离。其他人对它们的解释比我好得多。我也做了选择来解释不确定性。档案中的规则越少,档案相对于实际人物与事实的关系就越不确定。为此,我简单地将原始距离矩阵除以标准误差。这并不复杂,但它确实意味着一个人的不确定性越大,他和其他人就越“亲近”。

如此遥远…

但是如果我们不使用分数距离呢?如果我们使用欧几里得距离、曼哈顿距离或相关距离会怎么样?这是什么:

不同距离方法的结果

他们彼此相似,但你可以看到不同之处。每种距离方法强调数据的不同方面。哪个是“真”的?这可能取决于数据。这也可能取决于您想要探索数据的哪些方面。例如,相关距离(1-相关系数)强调两个数据趋势之间的关系如何变化。

“错误”并不总是坏事。

你可能还记得,我说过我把不确定性粗略地融入了分析中。如果我没有呢?如果我简单地说“比例就是比例”,并(愚蠢地)假定 Politifact 数据的快照总是对人物的准确描述,会怎么样呢?这是如果:

不一样,不是吗?我们在这里看到了什么?我们看到了小样本对 Patrick,Steyer 和 Bennet 的影响。小样本意味着他们的原始数据是极端的。误差函数部分地照顾到了这一点,并使它们有更高的机会出现在先前树的其他聚类中。我们还看到了“垃圾聚类”效应,其中聚类算法无法清晰地分离样本,大多数样本最终聚集在一个大的聚类中。为什么我把这些树分成四簇?主要是为了与第一组树进行比较。

这些树不只是生长。

您会注意到,我谈到了距离度量,但没有提到我如何使用它们来构建树。这是因为我没有对任何一棵树使用单一的度量标准。相反,我用五种不同的方法计算了一棵共识树。为什么?在构建层次聚类树的许多不同方法中,哪种方法比其他方法更好还没有定论。所以我结合了几个互不违背对方假设的。

具体来说,我使用了“单个”、“ UPGMA ”、“完全”、“整除”、“ MiniMax ”的方法将数据链接起来(又名“链接方法”)。还有其他人,但他们有我不想处理的假设或缺点。例如,沃德的方法只有在使用平方欧几里得距离时才能正常工作。中值/中值/质心方法有可能产生负的分支长度。甚至我的思想也不去那里。

这些链接方法中的每一种都从相同的距离矩阵产生不同的树。如果我们输入用于创建第一棵树的分数距离度量,这是每个链接方法的输出:

有明显的不同,但也有相似之处。你会注意到,在大多数树中,特朗普先生是一个异数。佩洛西和彭斯在五棵树中的三棵树上成对出现。如果你看的话,你可以找到其他的相似之处。当达成共识时会发生什么?

回家了,回家了,吉吉吉吉!

打开引擎盖

虽然以上这些可能很可爱,但如果我不具体解释我是如何做到的,那就既没用也不道德。我的矩阵和树是我和 T2 一起做的。另外,我使用了protoclust代理线索包。我通过写一个脚本部分自动化了这个过程(如下)。平方和的聚类是使用旧 GMD 包中的脚本完成的。Cran 知识库不再支持 GMD。相反,你必须从 GitHub 手动添加它。

脚本的命令是Pol.Trees(ipnut, meth = "frac.dist", ErrAdj = TRUE, consensus = TRUE, frac.f = 2/3)

参数:

IP nut:count数据的数据框架或矩阵,类别为列名,主题为行名。

方法:距离矩阵生成法。可以尝试通过 base R 或 proxy 与 dist 函数一起使用的任何方法。此外,我在脚本中编写了一个名为“chi.dist”的校正“chi distance”。 警告: 慎用方法,有些零数据点的获取方式不靠谱。

ErrAdj:是否要包括误差调整。默认值为 TRUE。

共识:是否希望生成共识树。默认值为 TRUE。该树采用“phylo”格式。一个错误反而会生成树的线索集合。

frac.f:使用分数距离(frac.dist)时使用的默认分数。

我不得不承认一些事情:这个脚本不会安排和给树上色。他们会很光秃秃的。ape 中有一些命令可以处理这个问题。

这一切的意义是什么?

我为什么要写这个呢?你为什么要费心去读它?让我们面对现实吧,有很多情况下我们需要一次比较两个以上的东西,聚类是一个很好的方法。它以我们直观理解的方式直观地展示事物。也可以很好玩。当政治家的行为不符合政党路线时(如佩洛西-彭斯案),这就是一个发现。

这不会拯救世界,但它可能会帮助人们从太多的数据中找到意义。像 Politifact 这样的网站是有好处的,但是它们会把我们埋葬在数据中。聚类可以将数据转化为理解。

所以,去收集你自己的计数数据,和树一起玩吧。

Pol.Trees <- function(ipnut, meth = "frac.dist", ErrAdj = TRUE, consensus = TRUE, frac.f = 2/3){
#This computes and returns a consensus tree based on count data profiles (such as from Politifact). It presumes you are interested
#in comparing proportions, not raw counts. In addition, it automatically adjusts for uncertainty ("error") due to small counts. Even 
#then, I don't recommend having 4 or less total counts per subject.#The parameters are as follows:
    #ipnut: The count data set, wich subject names as the rownames
    #meth: Method to determine distance matrix, default is "frac.dist". WARNING: Not all methods will work properly. Recommended you
    #stick to manhattan, euclidean, frac.dist, chi.dist (both included here), or correlation. The proxy package is a little wonky with some other metrics.
        #Why manhattan distance and not euclidean? [https://bib.dbvis.de/uploadedFiles/155.pdf](https://bib.dbvis.de/uploadedFiles/155.pdf)
    #ErrAdj is whether to apply the error adjustment. Default is TRUE#Several libraries are needed for this script to function.

    library(ape)
    library(protoclust)
    library(cluster)
    library(proxy)
    library(clue)#This section creates then activates the "error adjustment" distance metric.    
    DistErrAdj <- function(x,y)
    {
        sing.err <- sqrt((x^2) + (y^2))
        sum(sing.err)
    }

    if (pr_DB$entry_exists("DistErrAdj") == TRUE)
    {
        pr_DB$delete_entry("DistErrAdj")
        pr_DB$set_entry(FUN = DistErrAdj, names = c("DistErrAdj"))
    }
    else
    {
        pr_DB$set_entry(FUN = DistErrAdj, names = c("DistErrAdj"))
    }

    #This section creates then activates the "fractional" distance metric. It uses a default f of 2/3, which can be altered with the frac.f input.
    frac.dist <- function(x, y, frac)
    {
        frac = frac.f
        sum(singfrac <- (abs(x - y) ^ frac) ^ 1/frac)
    }

    if (pr_DB$entry_exists("frac.dist") == TRUE)
    {
        pr_DB$delete_entry("frac.dist")
        pr_DB$set_entry(FUN = frac.dist, names = c("frac.dist"))
    }
    else
    {
        pr_DB$set_entry(FUN = frac.dist, names = c("frac.dist"))
    }

    #This section creates then activates a correction for the chi distance. The version in proxy generates negative distances.
    chi.dist <- function(x, y)
    {
        sqrt(sum(((x-y)^2)/(colsum/sum(colsum))))    
    }

    if (pr_DB$entry_exists("chi.dist") == TRUE)
    {
        pr_DB$delete_entry("chi.dist")
        pr_DB$set_entry(FUN = chi.dist, names = c("chi.dist"))
    }
    else
    {
        pr_DB$set_entry(FUN = chi.dist, names = c("chi.dist"))
    }

#Creating the proportions and errors for each data point.#This creates a consensus tree without bootstraps and does not automatically plot. It is the non-default. Use it if you want to have a tree
#to manipulate or annotate manually.
        x <- ipnut / rowSums(ipnut)
        q <- sqrt((x * (1 - x)) / rowSums(ipnut))
        colsum <- colSums(x)
        rawdist <- dist(x, method = meth)
        errs <- dist(q, method = "DistErrAdj") / if(ErrAdj == TRUE) {1} else {dist(q, method = "DistErrAdj")}
        findist <- rawdist / errs
        tr.ave = as.hclust(agnes(findist, diss = TRUE, method = "average"))
        tr.prot = protoclust(findist)
        tr.div = as.hclust(diana(findist, diss=TRUE))
        tr.single = as.hclust(agnes(findist, diss = TRUE, method = "single"))
        tr.comp = as.hclust(agnes(findist, diss = TRUE, method = "complete"))
        tr.ensemble <- cl_ensemble(tr.ave, tr.prot, tr.div, tr.single, tr.comp)
        tr.cons <- ladderize(as.phylo(as.hclust(cl_consensus(tr.ensemble))))if(consensus == TRUE)
        {
            tr.cons
        }

        else
        {
            tr.ensemble
        }}

谁更聪明?人工智能系统和人类的智商测试

原文:https://towardsdatascience.com/whos-smarter-an-iq-test-for-both-ai-systems-and-humans-cdf44844b612?source=collection_archive---------33-----------------------

根据谷歌人工智能研究员的说法,对人类或机器来说,掌握技能并不等同于一般的智力

平板电脑前的女孩:哈尔·盖特伍德在 Unsplash 上拍摄的照片

透过围绕人工智能的大肆宣传,谷歌人工智能研究员弗朗索瓦·乔莱提出了抽象和推理语料库(ARC),这是一种可能塑造未来人工智能研究进程的智力测试。迄今为止,人工智能还没有令人满意的定义,也没有任何有意义的评估方法,根据他最近的论文(“论智力的衡量”)。有一些基准,比如对电子游戏的掌握程度,但它们衡量的只是狭义的技能,而不是可以被称为类人智力的东西。

当然,开发人员并没有声称他们的国际象棋或围棋冠军拥有一般的智力,但该领域的所有此类工作都在朝着这个目标努力,即使只是含蓄地努力。这就是问题所在。目标和评估基准对科学来说是必不可少的,但它们需要明确——用乔莱的话来说就是“精确、量化的智力定义和测量”。如果没有一个正式的定义,人工智能研究人员就会回到不清楚的常用定义,这些定义本质上是概念性的,而不是可操作的。他们缺乏在不依赖测试的情况下被客观衡量的能力,这些测试“隐含着几十年前的定义和偏见”

Chollet 写道,这些偏见在“该领域对棋盘游戏和视频游戏的持续迷恋”中显而易见。他继续说道,不幸的是,这种思维模式“构建了今天的许多研究成果”,不利于人工通用智能取得更大的成功(AGI)。他试图指出假设和偏见,以便更好地定义和测量该领域的智力,这是一个雄心勃勃的目标。接下来的内容将只触及他论文中的几个重要论断,但首先是对 ARC,即测试本身的简要描述。

定义圆弧

首先,ARC 是一个可以构建智力测验的框架。最重要的是,这些测试可以应用于人类和人工智能系统。Chollet 论文的最后一部分是一个智力测验,它是按照他的框架中的指导原则建立的。最后,Chollet 写道,他的框架和这个特定的实例都是正在进行中的工作。

测试本身由数据集组成,其中有用于训练和评估的输入网格。每个网格都由各种形状和颜色的图案组成。对于每个单独的测试单元,考生被显示在由输入和输出网格组成的一到三个演示对之间。接下来是一个单一的输入网格,考生用它来构建一个输出网格,以匹配示范对指示的模式。如图 1 所示,这种格式类似于瑞文渐进矩阵,一种可以追溯到 20 世纪 30 年代的智商测试格式。该测试被设计成在没有训练的情况下进行,只有“接近人类先天知识的先验知识”

图 1:“隐含目标是完成对称模式的任务。任务的性质由三个输入/输出示例来说明。应试者必须生成与测试输入的输入网格相对应的输出网格(右下方)。”

做我们知道的事情

事实证明,应用于知识和理解的人类先验知识在 Chollet 的 ARC 测试中扮演着重要的角色。他非常明确地指出,“以人类为中心的参考框架不仅是合理的,而且是必要的”,这是为试图实现一般智能的人工智能系统构建的智能测试。他不同意诸如“普遍智力”或任何“用一个绝对的尺度来衡量所有智力”的想法。简而言之,他认为人工智能研究人员需要从目标范围开始。我们所知道的唯一一个范围是“与人类相关的任务空间”,在这个范围内,我们可以确定指示智力程度的指数。这并不排除其他类型的可能的普遍智能(甚至比我们更高的智能),但我们必须从我们所知道的开始。Chollet 还指出,如果我们所定义的一般智力的范围与我们自己的没有明显的重叠,那么我们完全有可能不能认为那个实体是智能的。这让我想起了路德维希·维特斯坦根的名言“如果一头狮子会说话,我们就无法理解它。”

到底什么是核心知识

如上所述,Chollet 提出“类似人类的一般智力测试”必须基于我们对周围世界的理解和感知。他将自己对这些先验的理解建立在发展科学的核心知识理论基础上,该理论是由伊丽莎白·s·斯皮克和凯瑟琳·d·金兹勒在他们的同名论文中提出的。他们确定了“构成人类认知基础的四大类先天假设。”这些类别是:

  • 客体性和基本物理学——凝聚、持续和联系。
  • 代理性和目标导向——拥有意图,朝着目标行动,并在目标导向的行动中表现出效率。
  • 自然数和初等算术——抽象数字表示。
  • 基础几何和拓扑——在 2D 和 3D 环境中定位和导航。

Chollet 说,最重要的是不仅要在智商测试中包括这些前科,而且要确定智商测试所依赖的任何其他前科。这是为了暴露测试中可能存在的任何主观性,这些主观性可能会对人类或人工智能系统的结果产生偏见。

过程 vs .神器:是歌手,不是歌

Chollet 在他的论文中提出的另一点是“过程和工件之间的混淆一直是人工智能概念化中的一个基本问题。”在他对一般智能的正式定义中,Chollet 明确区分了拥有智能的部分,即智能系统(is ),和仅仅产生技能行为的部分,即技能程序(SP)。(见图 2)前者是智能化的过程;后者才是神器。Chollet 认为,目前的人工智能研究往往侧重于后者。在他的思想中,智能的国际象棋程序是由智能过程产生的人工产物,事实上,智能过程不是程序中的机制,而是“创造国际象棋程序的研究人员所展示的智能”。

图 2:“问题的位置:一个智能系统生成一个技能程序来与任务交互。”

程序综合课程

Chollet 对过程与工件的讨论也引出了他所认为的人工通用智能发展的前景。他指出,ARC 的程序合成解决方案将能够完成“广泛的与人类相关的任务,这些任务通常需要人类水平的、人类流体的智能。”这种方法当然有其进化的因素,因此,似乎很有可能在几代人的时间里形成一种灵活的解决方案。实际上,程序合成方法会开发自己的课程来学习如何在 ARC 测试中获得高分。为了支持这种方法,Chollet 指出,在 ARC 等心理测试中得分高的人也更有可能在“所有人类认知任务”中表现出色。换句话说,通过程序合成方法开发的人工智能系统在 ARC 测试中得分很高,也可以在其他认知任务中表现出色,这些任务是具有一般智能的人类能够完成的。

此外,人工智能系统还可以使用这些一般的认知技能来推理和解决它事先不知道的情况。事实上,Chollet 说,ARC 解算器和人类一般智能都拥有相同的先验知识,因此人工智能系统“将接近人类的认知能力。”这几乎肯定是一条漫长的道路,Chollet 坦率地承认,上述 ARC 求解器是推测性的,并对其可能性的挑战持开放态度。不过,这似乎是一个智力挑战。

脚注

有趣的是,Chollet 指出,这些先验知识也是我们近亲的其他灵长类动物所固有的。因此,进化在它们的发展中起着重要的作用。

谁是本赛季 NBA 的最有价值球员?

原文:https://towardsdatascience.com/whos-the-mvp-of-nba-this-season-3e347c66a40a?source=collection_archive---------45-----------------------

机器学习

一个案例研究,展示一个机器学习项目从开始到结束的样子。

迪安·班尼特在 Unsplash 上的照片

别告诉我会是 吉安尼斯 。让我们从数据中寻找答案。

我会把这个问题框架到一个机器学习项目上,用类似于 深度学习用 Python【1】介绍的机器学习一般工作流程来完成项目。

让我们开始吧。

定义问题并获取数据。

我们想问的问题是“ 谁是 NBA 本赛季的 MVP?

或者不是,这好像是一个二元分类的问题。所以,我的第一个尝试是建立一个分类器来区分 MVP 球员和非 MVP 球员。

然而,我发现建立一个分类器是不实际的,因为我将面临样本偏差的问题。具体来说,非 MVP 球员的数量远大于 MVP 球员的数量,这就造成了模型训练和评估的难度。

因此,我把它框定为一个回归问题并且输出被定义为每年的 MVP 投票份额。

要注意 ,我在这里用我的领域知识(作为一个大粉丝我对 NBA 非常熟悉)为项目选择正确的方向。在构思一个可行的项目时,充分利用你的专业知识是非常重要的。

然后,我们来看看我们掌握的投入 X 和产出 y 方面的数据,数据的 X 部分是从1989–1990赛季到2018–2019赛季获得 MVP 票数的球员的统计。数据的 y 部分是投票份额。

然后将数据分离成训练和测试数据集。在我们得到最终模型之前,测试数据集永远不会被触及。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

选择评估指标和评估流程。

这是一个项目的重要步骤,它定义了模型的 成功 。在这个回归问题中,我用(MSE)作为评价度量。具体来说,该模型试图在训练过程中最小化 MSE。

由于样本量较小,我使用了 K 倍交叉验证 而不是一次性的训练-验证-测试分割作为我的评估过程。当样本量较小时,数据的拆分实际上会影响模型的性能。通常使用 K-fold 交叉验证来解决问题。

准备数据。

数据的准备包括缺失值插补和特征归一化

*my_imputer = SimpleImputer(strategy="median")
my_scaler = StandardScaler()*

特征归一化在回归问题中是必不可少的,如果将原始数据汇集到引擎中,不同规模的特征对于模型训练来说将是一场灾难。

开发一个比基线更好的模型。

在建模部分,无论您是初学者还是有经验的数据科学家,都很容易忘记设置基线模型。

这里我们使用一个简单的线性模型作为我们的基线模型,并将其与数据的预处理一起打包到一个 管道 中。对管道用法感兴趣的可以参考 sklearn 中的 管道功能。

*from sklearn.linear_model import LinearRegression
model_base = Pipeline([('imputer', my_imputer), ('scaler', my_scaler), ('ln_model',LinearRegression())])
model_base.fit(X_train, y_train)*

基线模型现在可以用来比较了。

接下来,我们将开发一个比简单线性回归性能更好的模型。我选择三个候选人, 弹性网随机森林回归器深度学习回归* 。*

弹性网是套索的组合,惩罚模型的复杂性。如果感兴趣,请参考下面我以前的一个帖子。

* [## 线性回归中的一个实用建议

从弹性网开始,记得调好定义 l1 范数之比的超参数。

towardsdatascience.com](/a-practical-suggestion-in-linear-regression-cb639fd5ccdb)

对于这三个候选的超参数调优过程,我编写了一个结合了预处理超参数空间定义交叉 - 验证过程的函数。

def train_hyper_tune(X,y):
    # create the pre-processing component
    my_scaler = StandardScaler()
    my_imputer = SimpleImputer(strategy="median")

    # define regressors
    ## regressors 1: Logistic Regression
    rgs_EN = ElasticNet(random_state=0)
    ## regressors 2: Random Forest regressors
    rgs_RF = RandomForestRegressor(random_state=0)
    ## regressors 3: Deep Learning 
    rgs_DL = KerasRegressor(build_fn=my_DL)

    # define pipeline for three regressors
    ## rgs_LR
    pipe1 = Pipeline([('imputer', my_imputer), ('scaler', my_scaler), ('en_model',rgs_EN)])
    ## rgs_RF
    pipe2 = Pipeline([('imputer', my_imputer), ('scaler', my_scaler), ('rf_model',rgs_RF)])
    ## rgs_DL
    pipe3 = Pipeline([('imputer', my_imputer), ('scaler', my_scaler), ('dl_model',rgs_DL)])

    # create hyperparameter space of the three models
    ## rgs_LR
    param_grid1 = {
        'en_model__alpha' : [1e-1,1,10],
        'en_model__l1_ratio' : [0,0.5,1]
    }
    ## rgs_RF
    param_grid2 = {
        'rf_model__n_estimators' : [50,100],
        'rf_model__max_features' : [0.8,"auto"],
        'rf_model__max_depth' : [4,5]
    }
    ## rgs_DL
    param_grid3 = {
        'dl_model__epochs' : [6,12,18,24],
        'dl_model__batchsize' : [256,512]
    }

    # set GridSearch via 5-fold cross-validation
    ## rgs_LR
    grid1 = GridSearchCV(pipe1, cv=5, param_grid=param_grid1)
    ## rgs_RF
    grid2 = GridSearchCV(pipe2, cv=5, param_grid=param_grid2)
    ## rgs_DL
    grid3 = GridSearchCV(pipe3, cv=5, param_grid=param_grid3)

    # run the hyperparameter tunning
    grid1.fit(X,y)
    grid2.fit(X,y)
    grid3.fit(X,y)

    # return results of the tunning process
    return grid1,grid2,grid3,pipe1,pipe2,pipe3

其中深度学习模型 my_DL 定义如下:

def my_DL(epochs=6,batchsize=512):
    model = Sequential()
    model.add(Dense(32,activation='relu'))
    model.add(Dense(16,activation='relu'))
    model.add(Dense(1))
    model.compile(loss='mse',optimizer='rmsprop', metrics=['mae'])
    return model

神经网络中的分类回归模型在最后一层通常是不同的。这里,对于回归建模,我们在最后一层不使用任何激活函数: model.add(Dense(1))

但如果是分类问题,就需要增加一个激活函数,比如最后一层的 sigmoid 。我已经写了一些类似的功能在我的其他职位如下:

[## 使用三种机器学习模型基于勒布朗数据的端到端游戏预测方案

综合指导一个二元分类问题使用三个不同的分类器,包括逻辑…

towardsdatascience.com](/end-to-end-project-of-game-prediction-based-on-lebrons-stats-using-three-machine-learning-models-38c20f49af5f)

然后,我们运行超参数调整功能。

my_grid1,my_grid2,my_grid3,my_pipe1,my_pipe2,my_pipe3 = train_hyper_tune(X_train, y_train)

现在,我们已经为这三个模型中的每一个获得了最佳的超参数集。然后我们需要使用训练好的超参数在整个训练数据集上重新调整

*def train_on_entire(X,y,pipe,grid_res):
    # fit pipeline
    pipe.set_params(**grid_res.best_params_).fit(X, y)
    # return the newly trained pipeline
    return pipemodel1 = train_on_entire(X_train,y_train,my_pipe1,my_grid1)
model2 = train_on_entire(X_train,y_train,my_pipe2,my_grid2)
model3 = train_on_entire(X_train,y_train,my_pipe3,my_grid3)*

我们不能说一个模型比基于训练数据性能的基线模型(线性回归)更好。因此,我们需要对以前从未接触过的测试数据进行多一步评估。

测试数据上的表现(裕丰

现在,我们已经得出结论,通过在测试数据集上实现 最低 MSE ,模型 3 (深度学习回归器)优于其他模型。所以, model3 是我们最终的模型。

通常,一个机器学习模型项目以拥有一个性能相当好的模型而结束。

然而,在我们的项目中,这一步还不足以回答问题,“ 谁是 MVP? “这就是我们走得更远的原因。

预测和解释。

我们将把我们训练好的模型应用到目标问题中,预测 MVP 。于是,我从本赛季(NBA 因 COVID19 停赛前)的球员统计数据中提取出与我们训练数据相同的特征空间。

我们只对有机会赢得 MVP 的顶尖球员感兴趣。分别是詹尼斯安东尼卢卡詹姆斯(哈登)勒布朗科怀

如果你是一个篮球迷,你一定知道这些人。如果不是,你不需要了解他们就能理解这个机器学习项目。不管怎样,我不会浪费时间介绍他们。

这是他们 MVP 投票份额 的预测。

虞峰预测 MVP 投票份额

我们从媒体那里得到了不同的答案,我们预测的 MVP詹姆斯·哈登 T7!没有喜欢,没有讨厌,但都来自数据。(但我个人确实认同这个结果。😀)

预测结果后,我需要更深入地挖掘数据来解释结果或支持结果。因此,我使用 花花公子图表 比较这些玩家的统计数据(我们模型的特征空间)。

6 号科怀,预测投票份额= 8.4%

科怀统计由玉凤

第五名卢卡,预测投票份额= 8.8%

卢卡统计数据由玉凤

第 4 名勒布朗,预测投票份额= 13.8%

勒布朗统计数据由虞峰

第三名安东尼,预测投票份额= 16.4%

安东尼统计由俞峰

第二名 Giannis,预测投票份额= 24.0%

詹尼斯统计由虞风

第一名詹姆斯,预测投票份额= 28.7%

詹姆斯统计数据由虞峰

我们可以清楚地看到,詹姆斯·哈登的统计数据都在最好的(打了场,场均得分,投篮命中率,抢断等等)之列。这就是为什么模型预测他是这个赛季的最有价值球员。

对生成 花梳图 感兴趣的可以参考下面的帖子。

* [## 给出了随机森林分类器的特征重要性

如何建立一个随机森林分类器,提取特征重要性,并漂亮地呈现出来。

towardsdatascience.com](/present-the-feature-importance-of-the-random-forest-classifier-99bb042be4cc)

就是这样。一个从头到尾的问题驱动的机器学习项目。*

外卖

  1. 应用领域知识对于项目设计和数据收集非常重要。
  2. 当样本量较小时,使用 K 倍交叉验证。
  3. 不要忘记在建模前标准化你的特征。
  4. 用测试数据上的表现来评估你的模型。
  5. 使用图形来解释你的预测结果。
  6. 詹姆斯·哈登是最有价值球员。

裘德·贝克在 Unsplash 上的照片

参考资料:

弗朗索瓦·乔莱用 Python 进行深度学习。*

为什么 85%的人工智能项目会失败

原文:https://towardsdatascience.com/why-85-of-ai-projects-fail-2c85cdd4bf45?source=collection_archive---------32-----------------------

从别人的错误中吸取教训。生命太短暂了,不能自己去创造。

JESHOOTS.COMUnsplash 上拍照

许多公司愿意投身于人工智能的迷人世界,并从它带来的好处中学习。通常故事是这样的:董事委员会决定他们的公司应该领导他们行业的人工智能创新生态系统。为了做到这一点,他们雇佣了一个拥有高超技能的团队,在资源上花费了大量的金钱,几个月的“PUM”之后他们发现自己在起点上的钱更少了,而且对 AI 完全没有信任。这些公司犯了哪些错误?AI 只是炒作,一点好处都没有吗?我们能从这么多失败的项目中学到什么?

1 —人工智能并不适合所有人

一旦你的公司决定尝试人工智能,就需要一个非常清晰和详细的人工智能战略。一个人工智能项目的基础是基于三根支柱,缺少任何一根都会使整个建筑颤抖。

三大支柱:

  • 技能:数据科学家是一个相当新的工作,很少有数据科学家可以说他们有超过 15-20 年的经验。数据科学家是一种非常稀缺的资源,组建一支合适的团队既困难又昂贵。
  • 技术环境:人工智能模型只是解决方案的一部分,如果你想让你的项目成功,你需要各种技能和解决方案来实现它。你需要一个软件开发人员和工程师团队来处理人工智能项目的架构复杂性。设计良好的生产环境是必须的,不应该由数据科学家来管理。
  • 数据:垃圾进,垃圾出。公司必须设计一个数据策略来管理人工智能项目的关键资源,数据。数据科学家需要随时提取、清理和分析数据。处理过时的数据、重复的数据、不正确的数据甚至缺失的信息可能会导致团队受挫,项目失败。数据治理是人工智能项目成功的最重要和被低估的支柱之一。

这三个支柱是必须的,如果缺少其中一个,AI 项目可能会失败。我不知道有哪个数据科学家团队拥有很棒的工具,在没有任何数据的情况下开发惊人的模型。或者,即使你的公司有一个很棒的团队和数据,如果你没有所需的环境,你怎么能期望转移到模型的生产呢?

最后,考虑这种战略转变对公司的文化影响也很重要。很多项目之所以会失败,是因为没有得到管理层或者公司领导的信任。人工智能是一种工具,如果管理它的人不使用它,它几乎不会对业务产生影响。

2 — AI 开始于损益表

假设我们已经建立了我们的三大支柱,我们应该如何确定我们的人工智能项目?怎么才能知道从哪个项目入手?

大多数公司一开始都以技术为导向,比如“我想成为第一家使用聊天机器人的公司!”,或者 Google 发布了一种全新的技术,让我们使用它吧!是失败项目的根源。如果你有这种倾向,这意味着你正在强行解决一个问题,你还没有确定你怎么知道什么是正确的解决方案?你不应该从解决方案出发,而应该从问题出发。

公司应该从业务导向开始,而不是技术导向。分析财务报表,找出公司成本最高的地方。继续客户获取和保留策略,有没有办法用人工智能来改善它?首先确定问题,然后决定采用哪种解决方案。

业务导向允许公司从财务角度衡量人工智能项目,我们可以通过 ROI 等 KPI 来估计成本、收入或对公司的影响。以这种方式衡量人工智能项目有两大好处,首先,它给出了一个清晰的方向。人工智能团队可能会迷失在训练模型中,尝试新技术并提高准确性。他们应该尝试多少新技术,或者应该花多少时间进行培训?他们应该继续工作,直到解决业务问题,这是唯一重要的 KPI。

其次,数据科学家团队和主管之间的沟通通常不太顺畅。经过几个月的工作和出色的表现,你最不希望缺少的就是沟通。为此,我们需要使用商业语言。通过财务 KPI,用他们能理解的语言解释你的 AI 成就

如果你是在你的第一个项目上,前面的考虑应该被考虑两次。第一个项目的失败会对团队的发展产生政治上的副作用,也会失去领导的信任。这可能会更糟,它可能会导致人工智能团队感到沮丧和沮丧。

3 —端到端解决方案

将原型模型投入生产是一个重要的里程碑。

公司未能花太多时间专注于模型创建,并且忽略了原始问题。在软件开发中,遵循敏捷方法是项目成功的关键。

与其等待几个月来交付一个最终的软件,不如致力于快速产生成果的紧凑而短暂的迭代。每次迭代之后,我们都会收到来自客户和用户的反馈,这样我们就可以改进。我们假设用户为什么不喜欢这个解决方案,通常我们会考虑模型的准确性或性能。由于采用了敏捷方法,我们不在假设的基础上工作,而是建立在客户反馈的基础上。

此外,当我们迭代并创建完整的解决方案管道时,业务领导可以提前交付,使他们能够看到进展和投资回报。它有助于管理期望和更好地理解用户需求。

4 —内部与外包

数据科学家正在寻找新的技术和解决方案来提高当前模型的性能。他们希望分析数据,设计模型,训练模型,并在每次迭代中进行微调。这项任务是高度消耗和需要非常深刻的专业知识,此外,这是非常昂贵的,需要时间来有一个可靠的模型。

另一方面,我们有像亚马逊、谷歌或微软这样的大型科技公司提供尖端模型,用如此海量的数据进行训练,以至于大多数公司甚至无法想象和发展这些熟练的团队。我们能和他们竞争吗?

大型云提供商通过 API 以极低的价格提供他们训练过的模型。您按使用付费,对于成千上万的 API 调用,您可以被收取美分(这取决于您使用的模型)。这些开箱即用的型号极大地减少了上市时间和入门成本。几天之内,你就可以以非常低的成本开发一个人工智能管道,这样你就可以收集用户的反馈。

我们可以永远使用 API 吗?当然不是,正如我们已经说过的,我们致力于短而紧凑的迭代来快速交付,这就是 API 如此有用的原因。当您的解决方案得到验证,客户正在使用它,领导愿意投入更多资金时,您就知道您的解决方案正在发挥作用,并为您的公司带来了明显的回报。一旦你能够验证所有这些,你就准备好从 API 转移到开发你自己的模型并获得对解决方案的控制。这同样适用于在线提供的预培训模型,如 ResNet、YOLO、伯特…

结论

在人工智能领域起步可能非常具有挑战性,有许多变量需要考虑,还有许多不确定性。正如我们在这篇文章中读到的,大多数问题都是由于管理和业务决策而产生的。我们必须明白,人工智能是一种工具,它不会自己解决问题。

认识问题,隔离并理解它,然后关注你的第一条管道,这是关键。在这个早期阶段,你应该抛开你的完美主义,专注于端到端的解决方案。此时,您将能够接收反馈并迭代解决方案。

参考文献

https://www . pactera edge . com/pactera-white-paper-reveals-85-percent-ai-projects-ultimate-fail-0

[## 我喜欢成为数据科学家的 3 个原因

这一切都归结于马尔科姆·格拉德威尔在他的书《局外人》中解释的“有意义的工作”的概念。

towardsdatascience.com](/3-reasons-why-i-love-to-be-a-data-scientist-90696ac0d314) [## 什么是注意机制?请大家注意一下。

解决 Seq2Seq 问题技术的演变,从 RNN 到自我关注。

towardsdatascience.com](/what-is-attention-mechanism-can-i-have-your-attention-please-3333637f2eac)

为什么 90%的机器学习模型从未投入生产

原文:https://towardsdatascience.com/why-90-percent-of-all-machine-learning-models-never-make-it-into-production-ce7e250d5a4a?source=collection_archive---------6-----------------------

意见

公司缺乏领导支持、团队间的有效沟通和可访问的数据

大多数机器学习模型从未得到部署。作者图片

C C 公司正在经历艰难时期。我不是在谈论疫情和股市波动。

时代是不确定的,必须让客户体验越来越无缝和身临其境并没有减轻公司的任何压力。从这个角度来看,可以理解他们正在投入数十亿美元开发机器学习模型来改进他们的产品。

但是有一个问题。公司不能只是向数据科学家和机器学习工程师扔钱,并希望奇迹发生。

数据不言自明。据 VentureBeat 报道,大约 90%的机器学习模型从未投入生产。换句话说,数据科学家的工作日中,只有十分之一最终能为公司做出有用的东西。

尽管 10 位科技高管中有 9 位认为人工智能将成为下一次技术革命的中心,但它的采用和部署仍有发展空间。数据科学家不是罪魁祸首。

[## 为什么开发人员会爱上函数式编程

从 Python 到 Haskell,这种趋势不会很快消失

towardsdatascience.com](/why-developers-are-falling-in-love-with-functional-programming-13514df4048e)

公司不是为机器学习而建立的

领导的支持不仅仅意味着金钱

数据科学家的就业市场非常好。公司正在招聘,他们也准备支付高薪。

当然,经理和企业领导人期望这些数据科学家为他们增加很多价值。然而,就目前而言,他们并不容易做到这一点。

GAP 数据和分析部门的 SVP 克里斯·查珀(Chris Chapo )说:“有时候人们会想,我只需要在一个问题上砸钱或者投入一项技术,成功就会从另一端出现。”。

为了帮助数据科学家在他们的角色中脱颖而出,领导者不仅需要将资源导向正确的方向,还需要了解机器学习模型是什么。一个可能的解决方案是,领导者自己接受一些数据科学的入门培训,这样他们就可以在自己的公司将这些知识付诸实践。

缺少对数据的访问

公司在收集数据方面并不差。然而,许多公司都是高度孤立的,这意味着每个部门都有自己收集数据的方式、首选格式、存储位置以及安全性和隐私偏好。

另一方面,数据科学家经常需要来自几个部门的数据。孤立使得清理和处理这些数据变得更加困难。此外,许多数据科学家抱怨他们甚至无法获得他们需要的数据。但是,如果你没有必要的数据,你应该如何开始训练一个模型呢?

孤立的公司结构和不可访问的数据在过去可能是可管理的。但是在一个技术变革飞速发展的时代,公司需要加快步伐,建立统一的数据结构。

对于数据科学家来说,访问他们需要的数据至关重要。作者图片

IT、数据科学和工程之间的脱节

如果公司的目标是减少孤立,这也意味着部门之间需要更多的沟通,并调整他们的目标。

在许多公司中,IT 和数据科学部门之间有一条基本的鸿沟。它倾向于优先考虑让事情工作并保持稳定。另一方面,数据科学家喜欢试验和打破东西。这不会导致有效的沟通。

此外,对于数据科学家来说,工程学并不总是必不可少的。这是一个问题,因为工程师可能不总是理解数据科学家设想的所有细节,或者可能由于沟通不畅而以不同的方式实现事情。因此,正如 StackOverflow 指出的那样,能够部署他们的模型的数据科学家比那些不能部署的科学家具有竞争优势。

[## 为什么机器学习部署很难?

在几个人工智能项目之后,我意识到大规模部署机器学习(ML)模型是最重要的…

towardsdatascience.com](/why-is-machine-learning-deployment-hard-443af67493cd)

机器学习模型带来了自己的一系列挑战

扩大规模比你想象的要难

如果一个模型在一个小环境中工作得很好,那并不意味着它在任何地方都可以工作。

首先,处理更大数据集的硬件或云存储空间可能不可用。此外,机器学习模型的模块化在大规模上并不总是像在小规模上一样有效。

最后,数据来源可能不容易,甚至是不可能的。如前所述,这可能是由于公司中的竖井结构,或者是由于获取更多数据的其他挑战。

这也是跨组织统一数据结构,鼓励不同部门之间交流的另一个原因。

努力得到了复制

在部署机器学习模型的漫长道路上,超过四分之一的公司面临重复努力。

例如,软件工程师可能试图实现数据科学家告诉他们的事情。后者可能会继续下去,自己做一些工作。

这不仅是浪费时间和资源。当涉众不知道使用哪个版本的代码,以及如果他们遇到任何错误该向谁求助时,这也会导致额外的混乱。

虽然如果数据科学家能够实现他们的模型,他们就有优势,但是他们应该清楚地与工程师沟通,关于谁需要做什么。这样,他们可以节省公司的时间和资源。

有效的沟通对于机器学习模型的工作至关重要。作者图片

高管并不总是买入

技术高管坚信人工智能作为一个整体的力量,但这并不意味着他们相信外面的每一个想法。据 Algorithmia 报道,三分之一的企业高管将糟糕的部署统计归咎于缺乏高层的支持。

似乎数据科学家仍然被视为有点书呆子气,缺乏商业意识。这使得数据科学家提高他们的商业技能,并尽可能地寻求与高管对话变得更加重要。

当然,这并不意味着每个数据科学家都突然需要一个 MBA 学位才能胜任他们的工作。然而,从课堂或商业经验中学到的一些关键知识可能对他们大有裨益。

[## 每个数据科学家都需要向商业领袖学习什么

因为软技能很重要。

towardsdatascience.com](/what-every-data-scientist-needs-to-learn-from-business-leaders-47dcf3204076)

缺乏跨语言和框架支持

由于机器学习模型仍处于初级阶段,当涉及到不同的语言和框架时,仍然存在相当大的差距。

一些管道以 Python 开始,以 R 继续,以 Julia 结束。其他人则反其道而行之,或者完全使用其他语言。由于每种语言都有独特的库和依赖集,项目很快就变得难以跟踪。

此外,一些管道可能会利用 Docker 和 Kubernetes 的集装箱化,其他管道可能不会。有些管道会部署特定的 API,有些则不会。这样的例子不胜枚举。

TFXMlflowKubeflow 这样的工具开始出现来填补这个空白。但是这些工具仍然处于初级阶段,到目前为止,在这方面的专业知识还很少。

数据科学家知道,他们需要不断查看自己领域的最新进展。这也应该适用于模型部署。

版本和可复制性仍然具有挑战性

与上述问题相关的是,到目前为止,还没有对机器学习模型进行版本控制的可行方法。很明显,数据科学家需要跟踪他们所做的任何更改,但现在这很麻烦。

此外,数据集可能会随时间漂移。随着公司和项目的发展,这很自然,但这使得重现过去的结果变得更加困难。

更重要的是,一旦一个项目开始,就要建立一个基准,模型现在和将来都要根据这个基准运行。结合勤奋的版本控制,数据科学家可以让他们的模型具有可重复性。

如果一个模型是不可复制的,这可能会导致以后漫长的调查。作者图片

如何停止尝试并开始部署

如果一个数据科学家 90%的努力一无所获,那不是一个好兆头。如上所示,这不是数据科学家的错,而是由于固有的和组织上的障碍。

变化不是一天就能发生的。对于刚刚开始研究机器学习模型的公司来说,从一个非常小而简单的项目开始是明智的。

一旦管理者勾勒出一个清晰简单的项目,第二步就是选择合适的团队。它应该是跨职能的,应该包括数据科学家、工程师、开发人员和任何其他对其成功似乎很重要的角色。

第三,管理者应该考虑利用第三方来帮助他们在开始时加速。 IBM 是提供这种服务的公司之一,但市场上还有其他公司。

最后一个警告是不要不惜一切代价追求复杂。如果一个便宜简单的模型满足了 80%的客户需求,并且可以在几个月内发货,那已经是一个伟大的壮举了。此外,构建简单模型的经验将推动更复杂模型的实现,有望让客户百分之百满意。

[## 再见了蟒蛇。你好朱莉娅。

随着 Python 的寿命逐渐停止,一个热门的新竞争者正在出现

towardsdatascience.com](/bye-bye-python-hello-julia-9230bff0df62)

底线是:革命需要时间

下一个十年肯定是革命性的——就像过去的十年一样。人工智能的广泛应用只是 T4 众多发展趋势之一。物联网、先进机器人和区块链技术的兴起也在此列。

不过,我故意说的是几十年,而不是几年。例如,考虑 90%的公司都在云中——数量如此之多,以至于我们甚至很难想象如果没有它我们的生活会怎样。另一方面,云花了几十年才获得广泛采用。

没有理由相信人工智能革命会有任何不同。这需要一段时间来实施,因为现状包含了许多需要克服的障碍。

但由于机器学习提供了如此多的方式来改善客户体验和公司效率,很明显,赢家将是那些快速和早期部署模型的公司。

为什么一场重大的人工智能革命即将到来,但不是你想的那样——AAAI 2020

原文:https://towardsdatascience.com/why-a-major-ai-revolution-is-coming-but-its-not-what-you-think-aaai-2020-aedbe2a3928f?source=collection_archive---------5-----------------------

来自 AAAI 2020 会议:图灵奖科学家辛顿、勒昆和本吉奥致力于让机器理性

从左至右,扬·勒昆、杰夫·辛顿、约舒阿·本吉奥、弗朗西丝卡·罗西和丹尼尔·卡内曼热烈讨论计算机是否真的会“思考”

你已经知道深度学习擅长视觉、翻译、玩游戏和其他任务。但是神经网络不像人类那样“学习”,相反,它非常擅长快速模式匹配。今天的研究主要集中在具有更大数据集和复杂损失函数的更大模型上。但是下一次革命可能会更加根本性。让我们来看看两种方法:用层叠胶囊自动编码器添加逻辑和大规模自我监督学习。

三位图灵奖获得者都同意深度学习的问题

Yann LeCun 提出了深度学习的三大挑战:

  1. 用较少的标记样本学习
  2. 学习推理
  3. 学习计划复杂的动作序列

杰夫·辛顿——“这是关于 CNN 的问题,以及为什么它们是垃圾”:

  1. CNN 不擅长处理旋转或缩放
  2. CNN 不理解图像中的物体及其组成部分
  3. 有线电视新闻网在反对的例子面前是脆弱的

Yoshua Bengio —“神经网络需要发展意识”:

  1. 应该从更少的例子中更快地概括
  2. 从世界上学习更好的模型,比如常识
  3. 更擅长“系统 2”思维(相对于快速识别,较慢的方法思维)

他的讲述总结了大多数人工智能科学家已经知道的事情:深度学习真的擅长于做狭窄的、基于模式的任务,如对象或语音识别。挑战是让人工智能 1)用更少的例子学习 2)对琐碎的对手攻击更鲁棒 3)能够推理 4)计划更复杂的动作序列。

Yann LeCun 阐述了深度学习的三个挑战

Hinton 提出了堆叠胶囊自动编码器,它将先验注入到神经网络的结构中

T 这里的关键见解是,对于卷积神经网络,我们只需向完全连接的神经网络添加一点点结构(卷积),它就能极大地帮助网络进行图像识别。

Hinton 现在将基本的神经元结构改变为“胶囊”,其包括 1)用于识别形状的逻辑单元 2)用于姿势的矩阵和 3)用于诸如变形、速度、颜色等其他属性的向量。添加的结构应该有助于神经网络识别和存储关于形状、姿势和其他属性的信息。全文 Neurips 论文此处这里是 AI 入门

如下所示,该算法在无监督训练后,在 MNIST 的 10 个数字类别中显示出清晰的分离。这意味着我们可以只使用 10 个标记样本(每个数字一个)来训练神经网络。

想象一个婴儿在玩编号为 1-10 的积木……过一会儿,婴儿应该能够将相似的数字组合在一起(不管姿势、畸形等),尽管她不知道这些数字是什么意思。这就是这里正在发生的事情。

辛顿展示了 MNIST 数字的无监督学习和使用生成的嵌入的类的清楚分离。

辛顿正试图教计算机学习关系,这导致了逻辑

Hinton 的 Stacked Capsule 自动编码器是将知识结构构建到神经网络中的一个例子,它使网络能够进行推理。在 MNIST 的例子中,它识别一个数字是如何由许多部分组成的。

更进一步,你可以想象我们可以用这种方式表示其他关系,比如能力(能走,能飞,等等)和特征(有头,有翅膀,等等)。从这里,很容易看到计算机将如何能够推理动物是鸟,因为它有翅膀,可以飞。

还有其他方法可以将逻辑与神经网络结合起来,但陪审团仍然没有找到最好的方法。

特斯拉的 autopilot 是神经网络和逻辑系统结合的又一个例子。在这种情况下,神经网络仅用于进行对象识别,然后一组手动编写的规则为汽车提供方向,例如“一名行人在汽车前面行走,踩刹车并停下来”。

最大的区别是 1)Hinton 的关系系统可以使用梯度下降来训练,但是纯符号系统不可以,以及 2)训练系统上的向量表示可以进行相似性,但是符号系统不能。例如,“人类与类人猿相似,因为他们有 4 条腿,圆脸,而且身高差不多。”

你可以想象结合逻辑和系统的其他方式,比如在神经网络或级联系统中集成符号推理,其中逻辑开始是模糊的,然后通过符号规则得到巩固。但肯定不清楚哪种方法最好。

Yann LeCun 提出大规模的自我监督学习

W hat 如果我们用胶囊跳过了这种花哨的步法,网络还能学习这些关系吗?Yann LeCun 就是这么想的。

婴儿是这样学习的。他们首先观察世界,通过观察物体下落来了解重力。因此,如果你给一个 10 个月大的婴儿看一个悬浮在空中的物体,他们会非常惊讶——婴儿学会了重力,并预计物体会下落,因为他们一直在观察这个世界。

Yann 的论点是,如果我们能够让神经网络进行视频预测,那么我们就有办法让计算机自己学习关于世界的各种关系,而无需将特定的关系注入网络结构。

但是预测未来的视频帧是很难的,因为未来实际上是不可预测的,所以网络将试图将所有可能的未来结合到一个模糊的图像中。Yann 认为基于能源的模型可能很快使这成为可能。

一场人工智能革命即将到来

今天,围绕人工智能的大部分讨论都集中在制作更大的模型和更复杂的损失函数上。但是神经网络的发明者正在领导攻击神经网络核心缺点的研究。

虽然还不清楚哪种方法会导致下一次突破,但我非常乐观地认为,一些研究将会奏效,并导致人工智能能力的大幅提高。人工智能的用户将通过密切关注和尽快整合这些突破而受益。

感谢我的朋友哈诺兹·巴瑟纳和张俭阅读本文的草稿。

获取演讲的完整视频记录

在这里学习搭建自己的深度学习计算机,开始练习 AI

为什么会计师非常适合学习编程?

原文:https://towardsdatascience.com/why-accountants-are-great-fit-for-programming-6033927047e6?source=collection_archive---------18-----------------------

编程会让你做更有意义的工作

弗兰基·查马基在 Unsplash 上拍摄的照片

我认为会计师应该学习如何编码。这么做有很多原因,快速的谷歌搜索会给你大量的结果。

但是为什么会计师首先非常适合编程呢?

当然,还有其他职业,但我们会计师更适合在工作中利用编程的优势。

以下是我认为我们非常适合学习编程的原因。

会计师处理大量的数据

照片由马库斯·斯皮斯克Unsplash 拍摄

会计师在日常工作中会接触到数据。我们操纵、转换、计算、存储和共享数据。

多年来,Excel 一直是我们会计师工作的首选工具。但是,随着今天的数据量和速度,新的工具已经出现,以处理这些。而且大部分都需要编程知识。

学习编程允许我们使用这些新工具,并为组织提供新的见解。

会计师很了解电子表格

照片由米卡·鲍梅斯特Unsplash 上拍摄

我要做一个大胆的声明。

所有的应用程序都只是超负荷的电子表格。

它们基本上是我们所知的传统电子表格局限性的变通方法。

我们如何使用电子表格?—我们通常将数据放入其中,对其进行操作,并存储结果。

但是它们有局限性——不够美观,数据可能被破坏,重复数据,无效数据,不太安全,等等。

因此,我们通过分离数据、逻辑和表示来解决这些限制。

换句话说,我们会计师离创建或理解任何应用程序只有一步之遥,因为我们知道这些应用程序通常可以解决的问题。

会计师处理大量重复性的工作

会计领域存在大量重复性任务,如在系统中输入发票、在实践管理软件中更新客户信息、计算税款等。

随着技术的进步,其中大部分现在都可以自动化,解放了我们的时间,让我们专注于更有价值的任务,从而继续在当今世界发挥作用。

会计师耐心且关注细节

乔·塞拉斯Unsplash 上的照片

会计是一个训练有素的职业。你必须得到正确的数字,否则你有可能用错误的信息误导你的利益相关者。

耐心和对细节的关注体现在会计的每个阶段——从将交易输入会计系统、进行调整,到创建财务报告。

任何会计师都会有审计电子表格的经历,因为数字没有意义——结果发现你在公式中使用了错误的单元格引用。

编程也是如此。任何有编程经验的人都可能有这样的经历:编码了几个小时,但在运行程序时发现了一个 bug 却发现在代码的某个地方使用了=而不是==

如果你考虑一下——调试就相当于审计你的电子表格——只是它现在适用于你的脚本。

会计师已经知道商业智能和数据科学——但我们不这样称呼它

卡洛斯·穆扎Unsplash 上的照片

如今,有很多关于数据科学和商业智能的宣传。

但我们会计师早在这两个术语流行之前就已经知道了。我们称之为管理会计

管理会计是会计的一个分支,主要是为管理层提供相关的决策信息。

这超出了传统的财务数据,可能涉及客户流失、库存交付周期等数据。—用于业务决策的任何数据。

不同之处在于,今天的技术允许以更快的速度收集和处理更大量的数据。

我们会计师是每个组织最初的“数据分析师”,如果我们适应并学习编程,我们将继续这样做。

会计师拥有商业领域的知识

编程是解决问题的工具。这是达到目的的手段。因此,要想编程好,你必须首先定义要解决的问题。

这就是领域知识的用武之地。会计师知道哪些地方需要改进,哪些地方编程可以提供帮助。

我们也知道如何衡量任何软件解决方案的好处及其对底线的最终影响。

Unsplash 上由 Helloquence 拍摄的照片

给我的会计师同事们

没有比现在更好的学习编程的时间了。如果你不能马上理解,不要担心——任何程序员都经历过。重要的是你开始。

“种树的最佳时间是 20 年前。第二好的时机就是现在。”

-中国谚语

我希望这篇文章能鼓励你学习编程。它是你工具箱里的必备工具。

编程是一种解放的体验——它会释放你的时间去处理更有意义的工作。

查看我的文章如果你是一名会计,我推荐你首先学习哪种编程语言 这里 。提示:不是 Python。

跟我上 领英 推特

为什么人工智能和机器学习不是一回事。

原文:https://towardsdatascience.com/why-ai-and-machine-learning-arent-the-same-thing-6f98ff7e38dd?source=collection_archive---------28-----------------------

如何在商业中使用无监督学习

围绕人工智能的许多宣传都涉及机器学习的最新发展。术语“AI”和“机器学习”经常被错误地使用,所以让我们重新定义这两个术语。AI,在之前的帖子中定义,可以理解为执行通常与人类认知相关的任务的计算机。机器学习是 AI 的六大学科之一。换句话说,机器学习是人工智能的多个类别之一,但并不是所有的人工智能都涉及机器学习。

为了澄清事情,可以将机器学习视为一种“特殊”的人工智能,它可以检测数据集内的模式,并使用这些模式来做出建议或预测。机器学习算法不是拥有人类编码的指令,而是依靠数据来获得洞察力。因此,机器学习的“学习”部分。

为简单起见,我们来想一个我们每天都依赖的算法:天气预测。比如说,我们相信明天的天气是基于今天的天气,昨天的天气,以及去年这个日期的天气。我们可以拟出一个假想的方程式。

weather tomorrow = B0+B1 today+B2 year+B3 last year

天气预报员将使用我们的方程,并向机器学习算法输入我们有数据记录以来的所有不同变量。需要记住的最重要的一点是,数据包括了直到今天的 WeatherTomorrow 变量。基于这些历史数据,包括这些方程所提问题的历史“答案”,我们的算法试图预测明天的天气。这叫做监督的机器学习。在监督机器学习中,算法是用包括输出变量或我们正在寻找的“答案”的数据来训练的。

另一个简单的例子:房价。你给计算机每月输入数据(如利率、平方英尺大小、房产位置)和每月输出数据(如房屋售价)。然后,对算法进行训练,以根据给定的输入和输出做出未来预测。

当您有一个输出可以由人类分类或收集的数据集(这称为标记数据)时,有监督的机器学习是最好的。以下是监督机器学习的几个用例:

  • 为雇佣新员工提供决策框架
  • 预测库存水平
  • 预测呼叫中心的来电量

这种算法的有效性在于所收集数据的质量。直到最近,数据收集还很困难、昂贵且耗时。如今,随着智能手机、社交媒体和对互联网的不断访问,有太多的数据可供监督机器学习算法使用。公司面临的挑战是正确收集这些数据,了解它可以提供什么样的见解,并足够敏捷地根据一致的实时见解来转变业务战略。

了解算法的功能、为其提供数据所需的数据以及可以解决的业务问题类型,是让您的公司或业务部门更加数据驱动的良好开端。

为什么人工智能黑客马拉松不会为现实世界的问题建立解决方案

原文:https://towardsdatascience.com/why-ai-hackathons-wont-build-solutions-to-real-world-problems-292421448a95?source=collection_archive---------50-----------------------

【2013 年维基媒体黑客马拉松

这里是我们应该做的,而不是成功地建立人工智能解决方案。

这些天有几十个响应新冠肺炎的黑客马拉松正在组织中,1000 多人贡献他们的时间来构建解决方案。我指导过欧洲最大的一个项目,有 1000 多名工程师参与其中。组织者为此投入了数天甚至数周的工作。因此,我真诚地赞扬他们的努力和善意。然而,在没有从组织者和参与者身上带走任何东西的情况下,我质疑黑客马拉松的有效性。

为什么黑客马拉松不会构建现实世界的解决方案

  1. 缺乏领域专业知识:像新冠肺炎这样的社会问题不能仅靠工程师来解决。为了构建现实世界的解决方案,我们需要让决策者、领域专家、用户参与进来——这是参与黑客马拉松的团队通常无法接触到的。
  2. 不同背景的缺乏导致模型中的偏见:黑客马拉松是由互相认识的团队组成的,因此最终都有相同的背景。这忽略了其他观点和背景。我们已经看到,只由工程师开发的系统最终会出现偏差。在家庭暴力事件中,男性使用 Alexa 和 Google Home 将配偶拒之门外。他们把音乐开得很大声,或者把他们锁在门外。在一个大多数男性工程师构建这些产品的环境中,可能没有人会考虑这种情况。此外,有许多例子表明人工智能和数据传感器可能带有偏见、性别歧视和种族主义[1]。
  3. 开发时间太少:三四天的时间不足以测试或构建可在生产环境中复制的解决方案。请记住,在一个项目中,你会给评委留下深刻印象,但在另一个项目中,你会构建完整的解决方案。构建一个原型很容易,但是在进入现实世界时,还有数十个其他的外部实体需要考虑。除了技术挑战之外,还有其他需要与原型集成的领域(比如营销、设计和销售)。
  4. 缺乏多样的想法。当我在指导黑客马拉松的时候,我可以说,在 100 多个想法中,我们可以将它们全部放入 10 到 15 个想法中。其中大部分是相似的——这是因为上面提到的第二点。
  5. 竞争 vs 协作:既然可以协作,为什么我们还需要 100 多个团队相互竞争?在我之前的一篇文章中,“为什么 Kaggle 不具有包容性,如何构建一个更具包容性的数据科学平台”,我认为像 Kaggle 这样基于竞争的模型并不是构建现实世界解决方案的最佳模型。在众多原因中,一个关键的问题是人们被激励去赢,而不是一起寻找问题的最佳解决方案。竞争模式的缺点也适用于黑客马拉松。

另一种选择?合作的方法

如果我们真的想以包容和有效的方式解决像 COVID-19 这样的社会挑战,我们需要确保几个机制。

  1. 利用全球协作:当今的大多数挑战本质上都是全球性的。不是一个国家或者一群人能解决的。因此,为了解决这些挑战,我们需要一种新的模式,一种全球社区可以聚集在一起解决问题、共享数据和构建解决方案的模式。在大数据、人工智能和机器学习的世界里,数据是关键。这不是复杂的算法或更好的团队,而是拥有更好(和更多)数据的团队获胜。此外,由于在线课程,教育,特别是像人工智能和人工智能这样的新兴技术,变得容易获得。现在,对于世界上任何地方的任何人来说,从像 Udemy,Coursera 这样的网站开始学习是非常容易的。这些使得有可能获得一个由高度积极的人组成的社区,他们有共同的愿景、动机和使命,并创建全球协作。
  2. 与领域专家紧密合作。大多数现实世界的问题不仅限于数据科学问题,而是涉及领域专家来创造价值。我们已经看到,在与领域专家合作的同时,来自不同背景的数据科学家帮助公司细化问题,并为问题提供新的视角。
  3. 让面临问题的人参与进来:让来自各种背景的人参与进来,尤其是那些面临问题的人。这带来了同理心和无偏见,因为面临问题的人天生不会建造对他们不利的东西。
  4. 遵循自下而上的模式:我坚信创新的未来是自下而上的,在这种模式下,社区将走到一起合作并解决他们的问题。我在同一个上写的一篇文章是关于社区将如何驱动人工智能的未来,而不是政府或公司。我认为社区有内在和外在的动机去解决问题,这对于构建未来的解决方案是至关重要的。当面对问题的人能够找到解决方案,这是多么好的一件事。

“自上而下的协作不起作用,是时候建立自下而上的模式了”

总之,我认为:

我们应该更全面地思考,尽最大努力创造良好的环境,让我们超越性别、种族和文化背景,关注我们人类如何合作建设更美好的未来。黑客马拉松没有创造这样的环境,因此不太适合构建现实世界的解决方案。

数字化和人工智能在生活的各个方面和经济的各个领域都有巨大的潜力。然而,只有人与技术的结合才能真正实现进步和更高的生产率。我们必须强调社区和有目的的合适的人。这实际上是创造未来解决方案和产品的关键。

参考资料:

[1]https://www.logically.co.uk/blog/5-examples-of-biased-ai/

为什么人工智能对于成功的客户体验战略至关重要

原文:https://towardsdatascience.com/why-ai-is-imperative-for-a-successful-customer-experience-strategy-4687d70f13a9?source=collection_archive---------51-----------------------

Unsplash 上由 Franck V. 拍摄的照片

人工智能

人工智能可以在企业向顾客提供数字客户体验的方式上做出经验性的改变。

美国经济学家西奥多·莱维特(1925 年 3 月 1 日——2006 年 6 月 28 日),哈佛商学院教授,同时也是《哈佛商业评论》的编辑,有一句名言,“人们不想买四分之一英寸的钻头。他们想要一个四分之一英寸的洞!”

人类需要一种智能的、集成的、简单的、跨设备的客户体验,更重要的是那种理解他们并个性化的体验。人工智能是发展最快和最强大的技术之一,它让用户拥有客户需要的那种用户体验

根据 Digital IQ 2020 的一份报告, 82%的表现最佳的公司 表示非常关注数字化客户体验。

因此,企业需要利用人工智能来提供主动、智能、集成的全渠道体验以及相关的个性化交互,以设计最佳的客户体验。

在这篇博客中,我将与你分享人工智能如何在企业向顾客提供数字客户体验的方式上做出经验性的改变。

1。使搜索超越文本!

iProspect 上进行语音搜索

在这个超级信息搜索的世界里,大多数东西都是在移动设备上即时搜索的,用户需要多种搜索方式是很自然的。人工智能帮助企业让他们的访问者和顾客超越传统的搜索策略。

换句话说,人工智能允许人们通过语音和图像而不仅仅是文本进行智能搜索,大大提高了他们的搜索效率,增强了他们的购物体验。

今年早些时候,电子商务巨头易贝推出了一个新的视觉驱动的人工智能平台 Krylov ,让用户在购物时拥有更好的电子商务客户体验。

易贝副总裁 Sanjeev Katariya 和产品管理总监 Ashok Ramani 表示:“通过易贝现代人工智能平台支持的计算机视觉,该技术可以帮助您根据相机或图像的点击来找到物品。用户可以进入易贝应用程序,拍下他们要找的东西的照片,几毫秒后,平台就会显示与照片匹配的商品。”

语音搜索是另一种流行的搜索方法。语音搜索增加更多。Gartner 的一项研究预测,到 2020 年, 30%的浏览会话将包含语音搜索。

此外,随着基于人工智能的辅助工具如 Google Home 和亚马逊的 Alexa 的出现,语音搜索已经帮助语音搜索的使用急剧增加。

2。全天候客服(永不枯竭的耐心)

Petr macha ekUnsplash 上拍摄的照片

人工智能相对于人工支持代理的最大优势之一是它可以提供全天候的客户支持服务。人工智能驱动的对话聊天机器人允许企业向访客和客户提供实时客户支持。

“据 IBM 称,高达 80%的常规客户服务问题 可以由聊天机器人回答。”

所有公司都需要向用户提供无缝、不间断的客户服务,但由于人力资源的限制,大多数公司负担不起,只有少数公司有。即使是最忠诚的顾客也不愿意等待商家开门来回答他们的询问和问题。聊天机器人解决了这一问题,它可以回答客户的问题和疑问,而不用考虑日期和时间。

聊天机器人是客户体验战略的一个重要方面的另一个原因是,聊天机器人不仅 24 小时回应客户的询问,并为他们提供问题的解决方案,而且还提供最佳的客户体验。

一些客户不断提出的紧迫问题可能会惹恼服务人员,或者让他们不像平时那样愉快。人工智能聊天机器人缓解了这种销售灾难。

3。推荐引擎:个人购物者/交叉销售专员

一个推荐引擎是一个人工智能驱动的系统,帮助在线企业、软件网站、电子商务商店、博客平台等。根据用户的在线行为向他们推荐产品,甚至服务和信息。推荐也可以通过用户和相似用户的偏好、兴趣和历史来获得。

这些系统使用机器学习、深度学习算法和自然语言处理(NLP)来跟踪和分析面包屑数据,并精确地实时向正确的人推荐相关内容。

例如,举一个电子商务网站的例子。推荐引擎可以帮助已经购买或正在寻找产品的消费者在电子商务商店中找到正确的路径。以某种方式做到这一点,他们将找到他们正在寻找的产品的替代品,补充他们感兴趣的产品的项目,类似的产品等。

这使得消费者的购物体验个性化,即使是在网上。因此,推荐引擎不仅为用户创造了令人满意的数字客户体验,还帮助企业销售更多产品。

另一个例子是网飞和 Youtube,这两个最受欢迎的娱乐网站消费内容。人们在这些网站上看到的推荐是由推荐引擎根据用户过去的行为进行筛选的,从而实现最佳的用户体验以及最大的屏幕时间。

媒体上的 YouTube 推荐引擎

4。在数字客户体验中找回“人情味”

许多电子商务企业主表示,他们缺乏或者他们认为他们拥有强大的客户体验战略,只是因为他们没有实体店,他们看不到他们的客户。

虽然这是可以理解的,但同样重要的是要注意到,有一些智能工具和技术可以帮助企业主实现他们的数字客户体验,即使不超过店内客户体验,也能与之媲美。

首先,在线企业不应该让他们的网站或网上商店的访问者感到孤立无援。在他们的顾客旅程中为他们提供帮助。

结论

人工智能方兴未艾,刚刚起步。AI 的惊人增长并不意味着体力工作和人类劳动的冗余。

尽管这项技术有多强,但它不会把我们推向遗忘,而是相反。人工智能是一种工具,可以让我们更好地工作,让我们更有效率,节省我们的时间,以便我们可以处理更复杂的问题。

我们有必要认识到这一点,以便更容易地接受和欢迎人工智能,实现为用户提供出色的客户体验的共同目标。

精选作者简介:

Dhruv Mehta 是一名数字营销专家,在 Acquire 工作,提供数字时代的解决方案。在空闲时间,他喜欢写关于技术营销的文章。他经常为调整你的业务做出贡献。在 TwitterLinkedIn 上与他联系。

为什么人工智能让我们思考🤔

原文:https://towardsdatascience.com/why-ai-makes-us-think-b916aec63d29?source=collection_archive---------40-----------------------

论算法的规则

我的意思并不是说“人工”这个形容词会引发哲学思考和关于智力本质以及人性本质的争论。那里没有消息。问问丹尼尔·丹尼特或者任何心灵哲学家就知道了。

我的意思是,人工智能让我们再次思考计算机化系统的伦理和政治

最近,我注意到几个声音呼吁“规范算法”。

从表面上看,这个短语毫无意义。算法是一张处方:以确定的方式解决一类问题的一系列步骤。当然,从这个意义上讲,没有必要监管任何算法。

对监管的呼吁实际上旨在针对的不是传统意义上的算法,而是最近才开始被称为算法的东西,即:采用非算法组件来做出自主决策的软件系统。

什么?

为了理解正在发生的事情,你需要知道“算法”这个词已经分两步改变了意思:

  1. 自动反义词 :“算法”这个词已经成为它自己的反义词。最初,计算机科学家用它来表示:确定性地解决问题的一组指令。在 AI 的语境中,“算法”的通俗含义已经变成了:通过实例训练的程序,高深莫测地解决一个问题。
  2. Pars pro toto :算法这个词不再是专门为以非算法方式完成任务的人工智能组件而保留的,现在也用于指代它所属的整个系统。

就像一个莫比乌斯带或一只鳄鱼颠倒着咬自己的尾巴一样,世界“算法”的意义已经从“确定性配方”转变为“具有非算法、数据驱动的决策组件的计算机化系统”。

关系

事实上,正是这种“算法”的新生概念中的“数据”和“决策”的成分,解释了为什么有理由进行伦理关注和政治辩论,并因此呼吁进行监管。

算法(在新的意义上)利用数据——我们的数据,公民消费者的数据——来做出影响我们的决定。影响我们的资产,运动,工作,自由,权利。简而言之:那会影响我们的生活。

无论何时处理个人数据,隐私都是一个问题。隐私与个人的自主性和能动性密切相关。

无论何时做出影响生活的决定,责任都是一个问题:我们审查和质疑决定原因的能力,以及它的合法性。

因此,虽然计算机化系统已经存在并影响我们的生活至少半个世纪了,但它们对我们数据的使用越来越多,决策能力越来越强,这确实证明有理由重新思考它们的道德和政治。

清楚

我对那些参与这场辩论的人的建议是,无论他们是政治家、政策制定者、公民还是(计算机)科学家,都应该思考一下他们使用的词汇。思路清晰需要语言清晰。确保你至少清楚“算法”是什么意思。

Joost Visser 是莱顿大学软件和数据科学教授。Joost 拥有代尔夫特理工大学的计算机科学学位和莱顿大学的哲学学位。

NB :有趣的是,美国国会的算法问责法案只用了两次“算法”这个词。一次是在其标题中,一次是解释这仅仅是实际法案的简称,然后继续说明其真正的监管对象是“自动化决策系统”。内容明确,标题混乱的法规。

[## Text - H.R.2231 -第 116 届国会(2019-2020):2019 年算法问责法案

指导美国联邦贸易委员会要求使用、存储或共享个人信息的实体进行…

www.congress.gov](https://www.congress.gov/bill/116th-congress/house-bill/2231/text)

为什么人工智能模型很少投入生产

原文:https://towardsdatascience.com/why-ai-models-rarely-make-it-to-production-2f3935f73e27?source=collection_archive---------27-----------------------

MLOps 思维模式如何振兴你的人工智能项目

与 NVIDIA 的 Tony Paikeday 的联合帖子。

照片由丹尼尔·奥伯格Unsplash 上拍摄

问题:ML 型号很难发货

在进行人工智能投资后,许多团队发现 ROI 难以捉摸。通常,伟大的实验无法成为伟大的产品。这条推文很好地总结了这种痛苦:

“模型债务”的痛苦,当团队拥有未发布的模型,而这些模型还没有投入生产。https://twitter.com/ginablaber

在开发具有高预测准确性的模型方面投入了大量人力物力之后,看到企业因未部署或未充分部署的模型而陷入“模型债务”是令人痛苦的。通常情况下,缺少的是一个将机器学习开发和 IT 最佳实践统一起来的“ MLOps ”策略。我们来看看为什么。

为什么将 ML 模型投入生产如此困难?

两个主要原因:

  1. 对于数据科学项目,团队不会像对更传统的开发项目那样实施同样的 DevOps 严格性。与其他生产产品一样,生产 AI 管道应该具有监控、版本控制、可扩展性、&可重复性。组织应该对 IT 团队进行预算,以便为 AI 项目实现相同级别的弹性和可重复性。
  2. 人工智能模型不像常规软件。代码发布后,模型性能会迅速下降。需要持续的监控和再培训,而相关的工具在很大程度上仍不成熟——这主要是因为最佳实践仍在不断发展。组织至少应该计划让数据科学家继续参与,即使是在模型已经投入生产之后。

进入生产的计划外步骤

如何为成功做计划

人员:将 IT 和数据科学团队聚集在一起

许多人工智能工作是不透明的——不是每个人都可以容易地检查或理解它。建造它的人基本上被认为是工匠。因此,组织通常认为这些项目的责任完全在于数据科学团队。这是短视的。

AI 项目需要整合到企业 IT 运营中。人工智能开发人员通常不是——也不应该是——如何构建健壮、可扩展平台的专家。

这是一条双行道:房子的两边都需要为对方的工作做计划。您的数据科学家是否构建了稳健的模型?他们有可扩展的推理设计吗?您的 IT 团队能否支持临时基础架构请求?他们向开发人员提供自助服务环境吗?也许你需要一个“人工智能工程师”的角色?

流程:实施 AI 项目的设计→测试→生产流程

今天,许多公司还没有为他们的人工智能项目实施生命周期管理。像任何产品一样,有一个明确的发布周期可以使过程标准化。拥有一点点过程实际上使单个项目更容易出门,因为他们不必每次都重新发明轮子。

期待这个过程的发展和成长——这是你正在使用这个系统的好迹象。但是你必须从某个地方开始。

技术:快速发展技术的计划

对于传统的软件开发工作流,现代 devops 工具在不断发展。但是对于人工智能开发来说,随着应用程序生态系统的快速发展填补了工具的空白,工具的发展更加迅速。规划不断发展的 MLOps 应用程序需要灵活的基础设施,并愿意不断研究最新的调度程序、版本控制工具、实验跟踪器等。

您的数据科学家和基础架构团队对管道组件有相同的理解吗?

优先生产而不是实验

人工智能的目标是使用模型来影响业务,而不仅仅是为了实验而实验。因此,通过将生产置于实验之上,我们并不是说不要做必要的探索工作——我们是说所有的工作,包括探索,都应该牢记最终结果。

弥合实验和生产之间差距的最快方法是弥合 AI 团队和 IT 团队之间的差距。认可模型开发之外的提升需求。致力于为数据科学项目实现与传统开发项目相同的 DevOps 严格性。

你还可以在 NVIDIA 纯存储&的这段录音中听到更多关于 MLOps 的信息。

为什么亚马逊会有 Alexa 问题,你能从中学到什么

原文:https://towardsdatascience.com/why-amazon-has-an-alexa-problem-and-what-you-can-learn-from-it-2af47bb3378c?source=collection_archive---------58-----------------------

事实证明,确实存在数据过多的问题

当亚马逊推出 Alexa 时,许多预言家和技术专家都对这种可能性感到眩晕。最后,这是一台经济实惠的机器,预示着真正的语音激活计算时代的到来,这是一个简单的设备,可以帮助你购物,开灯,烹饪时背诵食谱,等等。事实是,Alexa 开启了一个全新的时代。这并不是大多数乐观主义者所希望的。

Alexa 并没有成为一个充满数字助理、让我们生活更轻松的世界的开端,而是迎来了质疑和担忧。它会在不该打开的时候打开。当我们不想听的时候,它会听。Alexa 的底层机器学习模型并不完美——平心而论,没有人指望它们会完美——但训练这些模型需要我们在自己家里创建的数据。这些数据需要注释。这意味着,在某个地方,某个我们不认识的人在听我们和一台我们可能不知道的电脑说话,甚至一开始就在录我们的音。

照片由安德烈斯·乌雷纳Unsplash 上拍摄

我们上面链接的亚当·克拉克·埃斯蒂斯的文章非常详细地阐述了这些问题,但第二段列出了一些最令人不安的东西:

“隐私倡导者已经向美国联邦贸易委员会(FTC)提交了一份投诉,指控这些设备违反了联邦窃听法案。记者调查了永远在线的麦克风和人工智能语音助手的危险。像我这样持怀疑态度的科技博客作者认为,这些东西比人们意识到的更强大,并且侵犯了隐私。最近关于亚马逊员工如何审查某些 Alexa 命令的新闻报道表明,情况比我们想象的更糟。”

现在,我们很多从事技术工作的人都明白,数据是无数公司和解决方案的基石。收集这些数据本质上让这些公司赚钱,并使他们的解决方案更加智能。但是,消费者对他们的每一个行为都被世界上某个地方的第三方编目、存储、分析,有时还被查看和标记的想法并不感到兴奋。

抛开隐私的争论——不是驳回,只是暂时搁置——Alexa 还强调了数据科学和机器学习收集中的一个问题:数据囤积。

只要想想 Alexa 用户创造了多少数据。今天有超过 1 亿个 Alexa 设备。大约 6600 万人拥有智能音箱,亚马逊的 Echo 占其中的 60%。这是一个真正惊人的语音数据量。但现在想想我们上面提到的:有时 Alexa 设备只是打开。他们正在收集更多的数据,其中一些可能是非法的,其他的通常质量很差。

现在,当然,其中一些数据将是非常有价值、有用、信息丰富的数据,亚马逊可以利用这些数据让 Alexa 变得更加复杂。没有人否认这一点(尽管还是有一些隐私问题)。问题是并非所有数据都是平等的。事实上,有些数据非常糟糕。

收集所有的数据,嗯,这是我们这个行业的普遍习惯。但是你最终得到的是这样一个场景:很难理解什么是有用的数据,什么是无用或有害的数据。其目的可能是从大量数据中构建更好的模型,但现在留给你的是一个巨大的数据价值问题。这意味着您将需要一个高级和广泛的数据监管过程,以发现实际上会使您的模型更好的数据。

现在,亚马逊并没有因为资本而受到伤害,但是光靠钱并不能解决问题。但对我们其余的人来说,囤积太多数据并假设这些数据都是有用的或者我们可以在以后解决这些问题的后果更加可怕。尽可能地收集每一份数据会有污染基于这些数据构建的模型的风险。

这就是为什么我们认为数据收集和监管对于商业成功至关重要。了解哪些数据对你的项目有用,哪些数据无用是至关重要的。拥有一个数据监管策略意味着你可以从中形成一个数据收集过程。让我们解释一下:

比方说,你正在研究自动驾驶汽车模型。这是一个数据贪婪的问题,但也是一个有大量有害和冗余数据的问题,这些数据对你的模型没有帮助。我们可以帮助您找到哪些数据真正改善了您的模型现在的行为,以及随着时间的推移,您继续训练它。比方说,理解您的模型对乡村道路数据的需求意味着您可以派司机去收集这些数据,而不是浪费 I-80 上的宝贵资源。随着模型所需数据的发展,您的收集策略也可以随之发展。

换句话说,拥有一个数据收集和管理策略是一件好事。这会让你的公司像亚马逊一样成功吗?那是一项艰巨的任务。但是你不会发现自己浪费时间在坏数据上训练好模型。这当然是一件好事。

我们数据人为什么以及如何帮助对抗新冠肺炎

原文:https://towardsdatascience.com/why-and-how-should-we-data-people-help-fight-against-covid-19-eng-esp-a45ee5e3688a?source=collection_archive---------24-----------------------

图片来自 Tim Mossholder 在 Unsplash——免费库存图片

变更数据

英文和西班牙文

—英文版—

为什么是我们

在过去的日子里,你有多少次发现自己在谈论冠状病毒?或者在网上查看主要报纸,寻找最新消息?在不到几个月的时间里,世界的优先事项发生了巨大变化,新冠肺炎现在是世界各国政府议程上的唯一议题。有时,我们似乎生活在科幻电影中。像西班牙和意大利这样的国家关闭边境,设置封锁,以阻止已经显示出令人眩晕和暴力的爆发。尽管我们对这种病毒还有很多不了解,但我们每天遭受的新闻轰炸并没有让任何人更容易理解。假新闻、从可疑来源上传新闻的网站、过多的模因和社交网络传播,在信息至关重要的时刻只会让情况变得更糟。

很多人都在谈论著名的指数增长和平坦化曲线的必要性。然而,很少有网站和专业人士愿意用一种每个人都能理解的方式来解释这些概念。看起来我们想要过度复杂的解释来展示某种智慧,而现在重要的事情是允许普遍获取信息。

鉴于这种情况,一方面,作为数据领域的专业人士,我们很荣幸能够理解微积分,以及什么是指数曲线,它是如何表现的,拐点是什么,以及平坦曲线的概念实际上是如何工作的。然而,从逻辑上来说,并非所有人都是如此。我们不能要求孩子、老人或其他领域的专业人士从早到晚熟悉这些想法。

另一方面,一些组织提供了用于调查和报告的开源数据。例如,约翰霍普金斯大学 CSSE 分校的数据仓库给出了每天报告的、康复的和死亡的病例数。因此,没有理由不从我们的立场出发,至少用可视化和简单的解释来促进理解和普遍获取信息。

我们目前所知的

就像没有人会为了去超市而购买一级方程式赛车一样,显然,我们不能要求世界上任何卫生系统的结构、供应和组织方式能够在任何给定时间面对疫情。在正常情况下,这是不划算的。然而,即使考虑到这一点,主要问题是,根据以前的汽车类比,虽然一些国家足够幸运地拥有奔驰、奥迪或法拉利,但许多国家仍然开着 1995 年的大众帕萨特,或者更糟,80 年代的菲亚特 Uno 或 Mini。

在这种情况下,我们面对的是一种不分种族、洲或社会经济阶层的病毒。这种病毒能够像我们一样轻易地跨越国界和海洋。如果你想知道新冠肺炎是如何如此迅速地失去控制的,只要看看过去 70 年里世界各地区国际游客人数的变化就知道了:

来源:我们的数据世界 —开放存取和开源图表和主题

尽管如此,我们从未想到,在不到两个月的时间里(我在中国报告首例病例后 54 天写这篇文章),会有 157 个国家感染了冠状病毒。然而,在我们作为人类的防御中,到目前为止我们对新冠肺炎的了解帮助我们理解了理解这种快速传播的 5 个关键概念:

  1. 潜伏期:从感染到出现症状的时间。尽管存在潜伏期为 19 至 27 天的病例[1],但这些似乎是异常值。根据世界卫生组织,对新冠肺炎潜伏期的大多数估计为 1-14 天[1]。一些政府和组织已经宣布中值和/或平均潜伏期约为 3-5 天,分布的第 95 百分位为 12.5 天。这意味着 95%的人会在头 13 天出现症状[1]。
  2. 序列间隔:传输链中连续病例之间的时间【3】。新冠肺炎病毒的连续间隔估计为 5-6 天[4]。这意味着许多人在传染给其他人之前就会出现症状。事实上,尽管发病前 3-5 天的症状前传播(出现症状前的病毒传播)是流感或普通流感传播的主要驱动因素,但新冠肺炎似乎并非如此。德克萨斯大学的研究人员发现,大约 10%的患者是被携带病毒但尚未出现症状的人感染的[5]。
  3. 发病率或传染率:疾病传播的速度。它是由它的繁殖数来表示的,繁殖数代表单个感染者将病毒传播给的平均人数[1]。根据世卫组织,对新冠肺炎来说,这个数字被理解为在 2 和 2.5 之间[4]。然而,有研究表明其范围为 2.24 至 3.58 [6]。作为参考,普通流感的生殖数是 1.3,而 SARS 是 2.0 [1]。
  4. 死亡率:在 2020 年 1 月 29 日举行的世卫组织新闻发布会上,新型冠状病毒的病死率估计在 2%左右。然而,它指出,在不知道有多少人被感染的情况下,确定死亡率的百分比还为时过早。先前的估计是这个数字为 3% [1]。
  5. 它传播的难易程度:疫情爆发的规模取决于病毒在人与人之间传播的速度和难易程度。冠状病毒主要通过半径约 1.8 米内的人际接触传播,人们通过咳嗽和打喷嚏传播病毒颗粒。这些颗粒可以落在附近人的嘴或鼻子里,但也有可能通过触摸病毒最近降落的表面,然后触摸人的嘴来感染病毒[7]。然而,冠状病毒如此容易传播的原因似乎在于其生物组成。事实是,这种病毒比 SARS 更容易传播,迄今为止感染人数是 SARS 患者的十倍以上[8]。

数百万携带病毒的人跨越国界,有时甚至在不知情的情况下如此迅速地感染他人,这就是病毒诞生的地方,也是我们最近可能听说过的著名的指数增长的地方。下面的 gif 是使用由 3Blue1Brown 制作的视频的一部分完成的,它显示了人们在旅行社区之间是多么容易传染:

来源:YouTube 上的 3Blue1Brown 视频 |作者许可。参见 3Blue1Brown 网页

从被感染的人那里被感染,从其他人那里被感染,如此等等,总数是如何在几天内呈指数增长的。这意味着数量成倍增加。怎么会?鉴于攻击率或传染率大于 1,对于每个感染病毒的人,我们将看到更多的人被感染。因此,随着时间的推移,这种从被感染者那里感染到从其他人那里感染的逻辑被传播开来,这要感谢更多的人感染了这种病毒。以这样的曲线结束:

由作者绘制

如果我们看看 1 月 22 日至 3 月 6 日期间中国境外有记录的病例总数,我们可以很容易地注意到指数行为:

来源:YouTube 上的 3Blue1Brown 视频 |作者许可。参见 3Blue1Brown 网页

不幸的是,YouTube 频道 3Blue1Brown 显示的数字并非巧合。使用前面提到的约翰·霍普金斯大学 CSSE GitHub 数据库上提供的按国家分类的数据,我们可以看到,在中国以外,到目前为止受影响最大的 10 个国家在查看与前一天相比的增长率时都遵循非常相似的行为:

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

这里的主要区别是疾病爆发的实际开始时间。如果我们选取同一组国家,并从较晚的阶段开始检查它们的曲线,而不是从它们宣布第一个病例的那天开始,这些曲线实际上非常相似:

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

在过去 3 周内宣布了首例病例的国家也出现了同样的情况:

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

我知道这看起来不太乐观。事实是我们迟早都会感染病毒。大多数政府目前努力实现的目标是延缓这种大规模传染,以便世界各地的国家卫生系统能够应对需要援助的人数。

在这里,伙计们是我们了解正在发生的核心问题的地方。很多人在反对所谓的狂热和偏执时,都把注意力集中在病毒的死亡率上。然而,尽管 2——3%的死亡率已经相当高了(低于世界其他流行病和疾病,但大大高于季节性流感的 0.1%),但各国目前面临的最大风险是卫生系统的崩溃。回到汽车的类比,记住当一些国家开豪华车的时候,大量的人仍然开着 1980 年的车。或者更糟,他们甚至可能没有一辆合适的车!如果像意大利或西班牙这样的国家无法应对一场侵略性的疫情,其他国家可能会遭受更严重的后果。当医院开始耗尽呼吸器和病床时,老年人、患有其他疾病的病人以及世界上资源较少的大部分人口可能会成为最大的受害者。

这就是为什么现在的主要目标恰恰是让曲线变平的想法。最近有很多关于这方面的讨论,但是从与家人和朋友的交谈中,我注意到,不幸的是,这不是一个容易理解的概念。简而言之,政府试图做的不是永远阻止病毒的传播,而是推迟人们被感染的时间,以便他们能够治疗每个人,而不会导致卫生系统的崩溃。

由作者绘制

但是,考虑到前面提到的成倍增长,如果每个病毒携带者会感染 2 到 3 个人,我们如何才能延缓新冠肺炎病毒的传播呢?没那么简单,但是我们需要今天的新增病例数少于昨天的新增病例数,以此类推尽可能多的天数。为了实现这一目标,鉴于病毒仅在人与表面之间传播,隔离和卫生措施是实现最终目标的关键。

《华盛顿邮报》发表了一篇令人惊叹的文章,名为“为什么冠状病毒这样的疫情呈指数级传播,以及如何使曲线变平”通过一组动画清楚地显示了同时感染人数的差异,这些动画显示了有和没有社会距离的社区内的传染情况。但是,最终目标是使今天的新病例数与昨天的新病例数之比小于 1。我们目前进展如何?一些国家比其他国家做得更好,但我们仍有很长的路要走。例如,中国、韩国和台湾似乎正朝着正确的方向前进:

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

而其他一些国家则像伊朗、法国或意大利一样一直在苦苦挣扎:

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

作者使用约翰·霍普金斯大学 CSSE 分校的数据制作的图表

作为数据专业人员,我们还能做些什么?

  • 用简单的话解释:帮助其他人看到你可能在图表上看到的东西,以及所有关于病毒行为的精彩在线解释。
  • 提供可视化:事实证明,通过可视化,我们都能更好地理解。此外,好的、免费的可视化可以像病毒一样传播。就像《信息是美丽的》中的数据包一样,我之前使用的视频来自 3Blue1Brown 或者来自 Washington Post 的惊人文章。
  • 组织内部的帮助:所有公司都会受到病毒的影响。理解它现在是如何影响的是减少未来影响的第一步。
  • 参与开源项目:如果你已经是行业内的资深专业人士,考虑让自己参与任何开源项目或团队,尝试虚拟地召集有经验的人一起工作,以获得可行的见解。例如,Flixbus 的数据副总裁 Alexander Stage 正在 LinkedIn 的职位中招聘数据专业人员和研究人员。

不管是什么情况,我们的目标都是从我们每个人的立场出发做出贡献。新冠肺炎展示了人类最糟糕的和最好的一面。从人们囤积卫生纸,储备所有人甚至食物银行,到意大利人在阳台上一起唱歌。让我们为最后一组尽一份力吧!

—西班牙语版本—

什么事?

他们最近几天有多少次谈到冠状病毒?或者检查主要新闻网站是否有最新的更新?在不到两个月的时间里,世界的优先事项发生了巨大变化,coid-19 成为全球数百个国家政府议程上的唯一项目。现在我们好像在看科幻电影。像西班牙和意大利这样的世界大国关闭边界,并对其人民实施封锁,以阻止一场它已经证明是迅速和暴力的爆发。虽然我们对冠状病毒的了解还很多,但轰炸我们每天收到的信息并不一定使我们大家更容易理解。虚假新闻、从可疑来源收集笔记的网站、梅梅和过多的社交媒体出版物,在信息至关重要的时候,使媒体变得混乱不堪。

著名的指数曲线和展平这种曲线的概念得到了广泛的讨论。但是,很少门户网站和专业人员关心如何以大家都能理解的方式解释这些概念。有时,我们似乎喜欢将这些解释复杂化,以显示某种程度的智慧,而现在最重要的是普遍获得信息。

作为当今世界的专业人士,我们有幸理解计算,准确理解指数曲线是什么,它的行为方式,它的转折点是什么,以及展平曲线的概念意味着什么。但是,从逻辑上讲,并非所有人都是如此。我们不能要求儿童、老年人或只是其他专业人员熟悉这些概念。

此外,一些组织还提供了开放日期,供调查和报告使用。例如,位于 GitHub 的 Johns Hopkins CSSE 的“T0”数据存储库每天提供全球每一城市报告、检索和死亡的总人数。因此,我们没有理由不从我们的专业中至少提供能够有助于民众理解的解释和看法。

到目前为止我们知道些什么

正如任何人都不会只有一级方程式赛车去购物一样,显然,我们不能要求世界上任何卫生系统的结构、供应和组织方式使我们能够随时应对大流行病。在正常情况下,如果基础设施和人员能够在流行病最严重的时候对其提出要求,那将是不具成本效益的。但是,即使考虑到这一点,问题仍然是,按照汽车的类比,虽然一些国家有幸拥有奔驰、奥迪甚至法拉利的最新车型,但许多国家仍在使用大众汽车,但更重要的是,大多数国家仍然经营着一辆或一辆 80 年代甚至更早的小型菲亚特。

在这方面,我们作为一个星球面临着不分种族、大陆或社会阶层的病毒。像我们一样容易跨越国界和海洋的病毒。如果我们想知道为什么 coid-19 如此迅速地离开我们的手,我们只需看看过去 70 年来旅游业的发展:

资料来源:我们的世界在数据 —开放存取和开放源码图表及主题

由于国际人口流动的增加,我们从未想象过,在不到两个月的时间里(自从中国报告首例病例以来的 54 天前,我撰写了这个故事),会有 157 个国家感染了 coid-19 冠状病毒。但是,在我们作为人类的防卫中,迄今对病毒了解甚少,使我们能够了解病毒的五个关键方面,以了解这种传播:

  1. 潜伏期或潜伏期是指感染与症状发生之间的时间。虽然有 19 至 27 天[1]的情况,但这些情况似乎是例外情况。据世界卫生组织称,大多数估计数将 coid-19 的潜伏期定为 2 至 14 天[1]。一些国家政府和组织报告的平均潜伏期约为 3-5 天,而 95%的人口预计在头 13 天出现症状[1]。
  2. 序列间隔:对应于传输链中连续事例之间的时间[3]。coid-19 的序列间隔估计为 5 至 6 天[4]。也就是说,很多人会先出现症状,然后才能传染给别人。事实上,虽然疾病头 3-5 天的无症状传播(症状前传播)是常见流感的主要传染源,但 coid-19 似乎并非如此。得克萨斯大学的研究人员估计大约。10%的患者感染了病毒,但尚未表现出症状[5]。
  3. 传染率或发作率:是指疾病传播的速度,以感染者平均人数表示。[1]。据世界卫生组织称,就 coid-19 而言,这一数字为每名感染者 2 至 2.5 人。然而,研究表明,这一数字可能高达 3.58 [6]。以 SARS 为例,常见流感的相同数字分别为 1.3 和 2.0。
  4. 死亡率:虽然很难根据不同的测试策略来估计各国政府的死亡率,但世界卫生组织在 2020 年 1 月 29 日的记者招待会上表示,冠状病毒的死亡率可能约为 2%。以前的数字表明,这一数字约为 3% [1]。
  5. 传染性有多容易:爆发的规模直接取决于病毒是如何迅速和容易地以人与人之间的方式传播的。当人们打喷嚏或咳嗽时,冠状病毒主要是通过半径小于 1.8 米的接触以人与人之间的方式传播的。然而,一旦接触到这些微粒可能落在其上的表面,也可能会通过双手接触表面而感染[7]。但是,冠状病毒之所以如此容易传播,是因为它的生物组成,事实证明比 SARS 快得多,容易得多,而且感染 SARS 的人数已经超过后者的 10 倍[8]。

因此,在这几百万人跨越国界、携带病毒、有时甚至不知情、迅速传染给其他人的人群中,我们最近可能都听说过的著名指数曲线正在出现。下面的 gif 是从【3blue 1 brown】拍摄的视频中提取出来的,清楚地表明了在社区间传播是多么容易:

资料来源:3 blue 1 brown video on YouTube|作者许可。参见 3Blue1Brown 网页

受感染者的感染情况,等等,是受感染者总数如何呈指数增长的。也就是说它会成倍增长。怎么做?由于感染率高于 1,每一个感染病毒的人,我们一定会看到更多的感染者。因此,随着时间的推移,受感染者传染的逻辑分布在更多的感染者身上,最终形成了这样一个曲线:

作者画的

如果我们看看 1 月 22 日至 3 月 6 日期间在中国境外登记的病例总数,我们可以很容易地看到这种行为:

资料来源:3 blue 1 brown video on YouTube|作者许可。参见 3Blue1Brown 网页

不幸的是,YouTube 频道【3blue 1 brown】显示的数字并不匹配。使用 johns hopkins csse 提供的 GitHub 存储库按国家分列的数据,我们可以看到,在中国以外,受影响最严重的 10 个国家都在经历着非常相似的增长曲线:

作者使用约翰霍普金斯综援资料制作的图表

图中各国之间的主要区别只有在疫情真正爆发时才会出现。如果我们把同一组国家放在一个更高级别的地方,而不是从他们宣布第一个案例的那一天起,曲线就更加相似:

作者使用约翰霍普金斯综援资料制作的图表

在过去 3 周内宣布第一批病例的国家也是如此。

作者使用约翰霍普金斯综援资料制作的图表

我知道这些图表看起来并不特别乐观。事实是,我们很可能迟早都会感染病毒。大多数国家政府目前正在努力减缓感染速度,以避免大规模感染,使保健系统崩溃,从而能够处理需要医疗援助的病例数量。

而这里是发生什么事的关键所在。很多人对我们所经历的狂热者和偏执狂争论不休,从而对病毒的死亡率产生了共鸣。然而,即使 2-3%的死亡率并不是微不足道的,但目前最大的风险是保健系统的崩溃。回到汽车的类比,让我们回顾一下,虽然一些国家拥有豪华汽车,但许多国家仍在经营一辆 80 年代的汽车。更糟的是,他们连车都没有!如果像意大利或西班牙这样的国家无法应对这种侵略性爆发,其他国家可能会遭受更严重的后果。老年人、患有其他疾病的人,甚至更严重的疾病,或者仅仅是社会上处境最不利的阶层,可能受到最严重的影响。

这就是为什么现在的目标正好是使这一增长曲线平坦化的主要原因。虽然最近很多人谈到这一点,但我在与朋友和家人交谈时注意到,不幸的是,这不是一个大家都能理解的概念。简而言之,各国政府正在努力实现的目标不是永远制止这种传染,而是推迟我们感染的时间,以便卫生系统能够继续运作而不崩溃。

作者绘制的图表

但是,如果每一个感染病毒的人又会感染 2 到 3 个人,我们怎么能阻止 coid-19 的传染呢?这并不容易,但我们需要今天的新案件数量少于昨天的新案件数量等等。《华盛顿邮报》一篇名为《T2》的优秀文章“冠状病毒等突破指数传播,以及如何宣传‘T3’”(冠状病毒等哪些爆发呈指数性传播,如何缓解)清楚地表明了同时感染人数的差异通过以下途径传播的情况:一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数;一次感染一个人的人数最终目标是,今天新病例数与昨天新病例数的比率低于 1。我们怎么到现在为止?一些国家似乎比其他国家做得更好,但我们肯定还有很长的路要走。例如,中国、南科尔拉台湾似乎正朝着正确的方向前进:

作者使用约翰霍普金斯综援资料制作的图表

作者使用约翰霍普金斯综援资料制作的图表

作者使用约翰霍普金斯综援资料制作的图表

其他国家,如伊朗、西班牙和意大利,看起来不太好:

作者使用约翰霍普金斯综援资料制作的图表

图片来源:Charts created by the author using data from Johns Hopkins CSSE

图片来源:Charts created by the author using data from Johns Hopkins CSSE

作为数据科学专业人士,我们还能做些什么?

  • 用简单的词语解释:帮助其他人看到图表在说什么,以及指数曲线背后的所有喋喋不休,以及平滑它的想法。
  • 提供可视化(T3):事实证明,我们都通过可视化更好地理解。好的开源可视化甚至可以成为病毒式的,例如来自信息是美丽的的数据包,如前面提到的来自3Blue1Brown的视频或来自华盛顿邮报的迷人文章。
  • 在组织内部做出贡献(T11):所有组织都将受到冠状病毒的某种形式的打击。协作了解您现在如何影响是减少未来影响的第一步。
  • 参与开放式项目:对于行业中的高级专业人士,可以参与开源项目或加入希望将专业人士聚集在一起进行可操作见解的团体。例如,flixbus 的数据副总裁 Alexander Stage 正在招募数据专业人员和研究人员。(T15)

无论情况如何,目标是从我们每个人的立场做出贡献。COVID-19 正在展示最糟糕和最好的人类比赛。From people stockpiling toilet paper, stocking out everyone else and even food banks , to people in Italy singing all together from their balconies 。让我们为最后一组做出贡献!

无论如何,目标是从我们的标题中做出贡献。冠状病毒正在显示出人类最糟糕和最好的一面,从人在超市购买几十卷卫生纸并耗尽其余部分,到意大利的邻居在阳台上唱歌。让我们从我们的领域尝试添加到最后一组!

来源:

[1] https://www.worldometers.info/coronavirus/coronavirus-incubation-period/

[2] https://www.who.int/news-room/q-a-detail/q-a-coronaviruses

https://www.definitions.net/definition/serial+interval

[4] https://www.who.int/docs/default-source/coronaviruse/situation-reports/20200306-sitrep-46-covid-19.pdf?sfvrsn=96b04adf_2

[5] https://www.eurekalert.org/pub_releases/2020-03/uota-csq031320.php

[6] https://www.sciencedirect.com/science/article/pii/S1201971220300539

[7] https://www.livescience.com/how-coronavirus-spreads.html

[8] https://www.nature.com/articles/d41586-020-00660-x

为什么以及如何将 Dask 与大数据结合使用

原文:https://towardsdatascience.com/why-and-how-to-use-dask-with-big-data-746e34dac7c3?source=collection_archive---------19-----------------------

作为一名数据科学家

来源

如果你一直在关注我的文章,很可能你已经读过我以前的一篇关于 为什么以及如何使用拥有大数据的熊猫 的文章。

作为一名数据科学家, Pandas 是 Python 中用于数据清理和分析的最佳工具之一。

在清理、转换、操作和分析数据方面,它是真正的游戏规则改变者。

毫无疑问。

事实上,我甚至创建了自己的 工具箱,用于使用 Pandas 进行数据清理 。工具箱不过是用熊猫处理杂乱数据的常用技巧的汇编。

我对熊猫又爱又恨

不要误解我。

熊猫很棒。很强大。

堆栈溢出流量到关于所选 Python 包的问题

对于数据清理和分析,它仍然是最受欢迎的数据科学工具之一。

然而,在进入数据科学领域一段时间后,我处理的数据量从 10MB、10GB、100GB 增加到 500GB,有时甚至更多。

我的电脑要么性能低,要么运行时间长,因为大于 100GB 的数据无法有效使用本地内存。

那时我意识到熊猫最初不是为大规模数据而设计的。

那时候我才意识到大数据和大数据的鲜明区别。

丹·艾瑞里教授的一个著名笑话:

(来源)

“大”和“大”这两个词本身是“相对的”,以我的拙见,大数据是指小于 100GB 的数据集。

现在,Pandas 处理小数据(通常从 100MB 到 1GB)非常高效,性能很少成为问题。

但是当你有比你的本地 RAM (比如 100GB)大得多的数据时,你或者仍然可以使用 Pandas 在一定程度上用一些技巧来处理数据,或者选择一个更好的工具——在这种情况下是 Dask

这一次,我选择了后者。

为什么 Dask 像魔术一样工作?🌟

达斯克

对我们中的一些人来说, Dask 可能是你已经熟悉的东西。

但是对于大多数有抱负的数据科学家或刚开始接触数据科学的人来说,Dask 可能听起来有点陌生。

这完全没问题。

事实上,直到我面对熊猫的真正局限,我才开始了解达斯克。

请记住,如果您的数据量足够低,并且可以放入 PC 的内存空间,Dask 不是必需的。

所以现在的问题是…

Dask 是什么,为什么 Dask 处理大数据比熊猫好?

⚡ ⚡️ ️Dask 以 Python 并行计算库而闻名

通过它的并行计算特性, Dask 允许快速有效的扩展计算。

它提供了一种简单的方法来处理 Python 中的大数据,这比常规的 Pandas 工作流程要简单得多。

换句话说,Dask 允许我们轻松地扩展到集群来处理大数据,或者缩减到单台计算机来通过利用 CPU/GPU 的全部能力来处理大数据,所有这些都与 Python 代码完美集成。

很酷不是吗?

就性能和可伸缩性而言,可以将 Dask 视为 Pandas 的扩展。

更酷的是,你可以在 Dask dataframe 和 Pandas Dataframe 之间切换,按需进行任何数据转换和操作。

大数据怎么用 Dask?

好了,理论到此为止。

是时候把手弄脏了。

你可以安装 Dask 并在你的本地 PC 上尝试使用你的 CPU/GPU。

B 但是我们在这里谈论的是大数据,所以让我们做一些不同的

走吧

不要通过缩小到单台计算机来驯服“野兽”,让我们通过扩展到集群来发现“野兽”的全部力量,因为是免费的

是的,我是认真的。

理解设置集群(例如 AWS)并将 Jupyter notebook 连接到云对于一些数据科学家来说可能是一件痛苦的事情,特别是对于云计算的初学者来说,让我们使用 土星云

这是我最近在尝试的一个新平台。

Saturn Cloud 是一个托管的数据科学和机器学习平台,可实现 DevOps 和 ML 基础设施工程的自动化。

令我惊讶的是,它使用了 Jupyter 和 Daskscale Python 来处理大数据使用了我们熟知和喜爱的库(Numpy、Pandas、Scikit-Learn 等)。).它还利用了 Docker Kubernetes,以便您的数据科学工作可重现、可共享并可投入生产。

Dask 的用户界面主要有三种类型,即数组、包和数据帧。在下面的代码片段中,我们将主要关注 Dask Dataframe ,因为作为一名数据科学家,这是我们最常用于数据清理和分析的。

1.将 CSV 文件读取到 Dask 数据帧

import dask.dataframe as dddf = dd.read_csv('[https://e-commerce-data.s3.amazonaws.com/E-commerce+Data+(1).csv',](https://e-commerce-data.s3.amazonaws.com/E-commerce+Data+(1).csv',) encoding = 'ISO-8859-1', blocksize=32e6)

Dask dataframe 在正常文件读取和数据转换方面与 Pandas dataframe 没有什么不同,这使得它对数据科学家非常有吸引力,稍后您将会看到这一点。

这里我们只是读取了存储在 S3 中的一个 CSV 文件。因为我们只想测试 Dask 数据帧,所以文件大小很小,只有 541909 行。

读取 CSV 文件后的 Dask 数据帧

注意:我们也可以在一行代码中读取多个文件到 Dask 数据帧,而不管文件大小。

当我们从 CSV 加载数据时,Dask 将创建一个数据帧,该数据帧是按行分区的,即行按索引值分组。这就是 Dask 能够按需将数据加载到内存中并超快速处理数据的方式— 它通过分区

由 Dask 完成的分区

在我们的例子中,我们看到 Dask 数据帧有 2 个分区(这是因为在读取 CSV 时指定了blocksize),有 8 个任务。

【分区】这里简单地指在 Dask 数据帧内分割的熊猫数据帧的数量。

我们拥有的分区越多,每次计算需要的任务就越多。

Dask 数据帧结构

2.使用compute()执行操作

现在我们已经将 CSV 文件读入 Dask dataframe。

重要的是要记住,虽然 Dask 数据帧与 Pandas 数据帧非常相似,但确实存在一些差异。

我注意到的主要区别是 Dask dataframe 中的这个compute方法。

df.UnitPrice.mean().compute()

大多数 Dask 用户界面是懒惰的,这意味着它们不会评估,直到你使用compute方法明确地要求一个结果

这就是我们如何通过在mean方法后添加compute方法来计算UnitPrice的平均值。

3.检查每列缺失值的数量

*df.isnull().sum().compute()*

同样,如果我们想检查每一列的缺失值的数量,我们需要添加compute方法。

4.根据条件筛选行

*df[df.quantity < 10].compute()*

在数据清理或探索性数据分析(EDA)过程中,我们经常需要根据某些条件过滤行,以了解数据背后的“故事”。

我们只需添加compute方法,就可以做和在熊猫身上做的完全一样的操作。

然后嘣!我们得到了结果!

🚀使用 Python 创建 Dask 集群并大规模运行 Jupyter 的演示

既然我们已经大体了解了如何使用 Dask。

是时候看看如何在土星云上创建 Dask 集群并在 Jupyter 中大规模运行 Python 代码了。

我录制了一个简短的视频,向您展示如何在几分钟内在 Dask 集群中进行设置和运行 Python 代码。尽情享受吧!😊

如何创建 Dask 集群并在土星云上运行 Jupyter 笔记本

最后的想法

来源

感谢您的阅读。

从功能上来说,熊猫还是赢了。

在性能和可扩展性方面,Dask 领先于 Pandas。

在我看来,如果您的数据大于几 GB(相当于您的 RAM),出于性能和可伸缩性的目的,请使用 Dask。

如果你想在几分钟内创建一个 Dask 集群,并大规模运行你的 Python 代码,我强烈推荐你在这里免费获得土星云的 社区版

一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过我的网站LinkedIn 联系我。在那之前,下一篇文章再见!😄

关于作者

Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq的联合创始人/首席技术官。

想要获得免费的每周数据科学和创业见解吗?

你可以在 LinkedInMediumTwitter脸书上和他联系。

* [## 阿德蒙德·李

让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。

www.admondlee.com](https://www.admondlee.com/)*

为什么以及何时避免将 S3 作为数据湖的数据平台

原文:https://towardsdatascience.com/why-and-when-to-avoid-s3-as-a-data-platform-for-data-lakes-c802947664e4?source=collection_archive---------3-----------------------

如今,数据湖在大型企业中风靡一时。数据湖是源系统数据的原始副本和转换数据的单一存储,用于报告、可视化、高级分析和机器学习等任务。

图 1:数据湖生态系统

对象存储(如 S3)正成为数据湖的首选平台,这有两个主要原因:

  • 它们在云中提供廉价、耐用和几乎无限的存储
  • 它们实现了计算和存储的分离,允许其中任何一个独立扩展

在这篇博文中,我将深入探讨对象存储的一些优势,这些优势是它们作为数据湖平台受欢迎的原因。我还将研究一些经常被低估的挑战,这些挑战困扰着许多数据湖用例中对象存储的使用。

对象存储的好处:耐用、便宜、几乎无限的存储空间

像 S3 这样的对象商店提供 11 个 9 的耐用性(99.9999999999%)和 4 个 9 的可用性(99.99%),并且他们设法以几乎无限的规模做到这一点,价格低得令人难以置信,大约为每月 23 美元/TB。相比之下,本地数据仓库设备(DWA)在几年前非常流行。不包括企业支持,DWA 的成本为每 TB 数万美元。数百万美元的 DWA 合同通常只支持几百兆字节。

当 IT 领导考虑为他们的数据湖选择数据平台时,对象存储每月 23 美元的价格实在太诱人了。对于数据湖预计要容纳的大量数据(从数百 TB 到数 Pb ),使用最便宜的存储是有意义的。像 S3 这样的对象商店看起来(不正确,我们将在本文后面看到)比许多大型企业仍在使用的 DWA 具有千倍的价格优势。

对象存储的好处:存储和计算的分离

数据湖所需的存储规模使得使用像 DWA 这样将存储和计算结合在一个包中的体系结构极其昂贵。通过将存储和计算分离开来,我们可以在任何给定时间将适量的按需计算用于需要分析的数据。这大大降低了数据分析解决方案的总体成本。

图 2:存储和计算的分离

可以理解,所有这些优势对于推动 S3 和其他对象存储作为数据湖平台的流行至关重要。但是对象存储带来了许多没有得到足够重视的挑战。对于来源于 RDBMS 且经常刷新(每天/每小时)的数据来说尤其如此,这些数据构成了企业中高质量数据的主体。

对象存储的缺点:不变性

所有对象存储,包括 S3、GCS 和 Azure Blob 存储,都是不可变的。这意味着文件一旦写入对象存储,就永远无法编辑。用户只能硬删除旧文件并创建新文件,或者逻辑删除旧文件并创建新文件(版本控制)。

当使用 S3 作为来自 RDBMS 的、频繁刷新的数据的数据平台时,这导致为每个表创建大量的小文件。

图 3:来源于 RDBMS 的数据的许多小文件的问题

随着时间的推移,插入、更新和删除操作越来越多,试图获得表的当前状态变得更加耗费时间和计算。大多数数据科学家回避这项复杂的任务,而是要求直接访问源系统,这违背了使用数据湖的初衷。

图 4:在 S3 上使用原始变更集的问题

U =更新,I =插入,D =删除

解决方案,第 1 部分:数据分区

一种解除最终用户合并变更的责任的解决方案是对数据进行分区,然后重写最近插入、更新和删除所针对的分区。这在一定程度上减轻了最终用户的负担。但是,性能问题仍然存在,特别是如果表有大量的列,而分析只需要这些列的一个子集。

图 5:使用分区合并变更集

解决方案,第 2 部分:使用列存储

上述解决方案可以通过使用像 Apache ParquetApache ORC 这样的列格式来改进。列格式通过更好的数据压缩和将 I/O 限制在分析所需的列上,显著提高了性能。然而,从各种语言和工具(如 Python、R 或 Tableau)中读取 Parquet 文件仍然具有挑战性。

图 6:列存储有助于提高性能

解决方案,第 3 部分:使用 SQL 接口简化访问

为了进一步构建这个解决方案,许多工程师在原始拼花文件上添加了 SQL 接口(如 AWS AthenaPrestoSpark SQL )。这使得最终用户的数据访问更加简化,他们现在可以跨他们喜欢的编程语言和工具(如 Python、R 或 Tableau)发出 SQL 查询。

图 7: SQL 接口简化了对数据湖中数据的访问

解决方案,第 4 部分:使用 Delta Lake 增加功能

上述解决方案可以通过使用类似于 Delta Lake 的开源存储层来再次改进。Delta Lake 进一步改进了 Parquet 格式,增加了对 ACID(原子性、一致性、隔离性、持久性)事务的支持,支持流和批处理用例的 lambda 架构,以及访问上一次刷新日期/时间(时间旅行)的数据的能力。

图 8: Delta Lake 增加了事务、同步批处理和流用例,以及时间旅行

问题解决了?

没那么快!上面的架构确实代表了一个可行的解决方案,许多企业为能够设计和实施这样的解决方案而沾沾自喜。公平地说,能够大规模实现这一目标是一项不小的成就。然而,这种架构仍然受到许多问题的困扰,有很大的改进空间。将 S3 顶部的三角洲湖作为数据湖平台的关键问题包括:

  • 该架构没有解决变更集的创建问题,而创建变更集是非常具有挑战性的
  • 实现和支持企业级的弹性提取、转换和加载(ETL)解决方案非常复杂
  • 编写 Parquet 和 Delta 文件需要额外的计算和技术知识,以大规模配置和运行 Apache Spark 等集群计算平台
  • SQL 接口访问(通过 AWS AthenaPrestoSpark SQL 等技术)需要额外的计算基础设施,从而增加了解决方案的整体复杂性和成本
  • 该解决方案的复杂性使得支持成本高昂
  • S3 提供有限的元数据和标记功能
  • 在 S3 中集成对象的表级或行级安全性,特别是对于大型复杂的企业来说,可能相当具有挑战性
  • 最后但同样重要的是,这种平台的性能远远落后于它要取代的数据仓库设备的性能

G 考虑到隐藏的计算和支持成本、安全集成和性能问题,S3 作为来自 RDBMS、频繁刷新的数据的数据平台与其每月 23 美元/TB 的承诺相去甚远。一旦我们将所有成本加起来,它就会开始攀升到每月每 TB 数千美元的范围内。对于这样的钱,有更好的选择。

云规模的托管分析数据库,如雪花谷歌 BigQueryAzure Synapse Analytics 提供了两个世界的最佳选择。通过将存储和计算分开,它们提供了可与 S3 相媲美的存储成本,以及一个托管数据平台,该平台抽象出了实施云规模分析解决方案的复杂性。它们提供了与 S3 的 Parquet/ORC/Delta Lake 相似的 TCO,具有 AWS Athena/Presto/Spark SQL 接口,同时拥有更好的性能、安全集成和模式支持。他们还降低了运营开销,同时将技术&人才风险转移给第三方供应商。

图 9:托管分析数据库相对于“对象存储+ Delta Lake + SQL 接口”解决方案的优势

那么来源于 RDBMS 的大部分静态数据呢?

来源于 RDBMS 的大部分静态数据(即,它在几周或几个月内不会改变)不会像来源于 RDBMS 的频繁刷新的数据那样产生太多的 ETL 计算和支持开销。然而,我的建议是,对于此类使用情形,相比基于 S3 的 Parquet/ORC/Delta Lake 存储,更倾向于云规模的托管分析数据库,因为围绕元数据管理、安全集成和性能的所有挑战和成本仍然存在。

半结构化数据呢?

大多数进入企业的半结构化数据(通过 XML、JSON 和 CSV 之类的格式)都有一个相当稳定的模式,可以被吸收到关系表中。大企业中的大多数此类数据经常被分析数据库摄取,如 AWS Redshift 或通过基于 S3 的 Parquet/ORC/Delta Lake storage 的 SQL 接口访问,如 AWS Athena、Presto 或 Spark SQL。对于这种使用情形,我的建议是考虑将存储和计算分开的托管分析数据库。

TCO 应该是你的北极星

最后,应该根据总拥有成本(TCO)来判断解决方案,考虑它们带来的功能和解决方案中固有的风险。如果两个解决方案具有相似的 TCO,但其中一个提供了更好的功能,那么选择该解决方案应该是显而易见的。此外,应仔细考虑与内部开发的解决方案相关的技术和人才风险。一般来说,对于大型企业来说,在合理的情况下,将技术和人才风险转移给声誉良好的供应商产品更有意义。

图 10:平衡 TCO、性能、特性和风险

那么什么时候对象存储作为数据湖平台有用呢?

对象存储(如 S3)仍然是其他用例的优秀数据平台,如半结构化和非结构化数据,这些数据不能或不应该(出于成本或效用原因)被吸收到云规模的分析数据库中。例如,将图像、音频文件、视频、电子邮件、PowerPoint 演示文稿、Word 文档或 pdf 导入托管分析数据库是没有意义的。此外,许多云计算规模的分布式数据库使用对象存储(如 S3)作为数据接收接口,有些甚至使用对象存储作为后台内部管理的存储平台。

表 1:建议

在未来的帖子中,我们将深入讨论为什么将存储和计算分开的云规模托管分析数据库(如雪花谷歌 BigQueryAzure Synapse Analytics )与专门构建的 CDC 工具(如 Qlik ReplicateOracle GoldenGateHVR CDC )更适合企业数据湖中以 RDBMS 为来源、频繁刷新的数据。

免责声明:这是个人博文。这里表达的观点代表我自己的观点,不代表我现在或以前的雇主的观点。所有内容仅用于教育目的,不保证适用性。

为什么异常检测并不总能保存不平衡的数据

原文:https://towardsdatascience.com/why-anomaly-detection-wont-save-your-imbalanced-data-becb9dd71915?source=collection_archive---------19-----------------------

快速了解异常检测的失败并讨论替代解决方案

第 0 节:简介

当一个事件的两个或多个互斥结果出现的频率相差很大时,就会出现数据失衡。例如,如果你的营销活动只有 0.001%的转换率(让我们保存退出业务的另一天),那么你的转换客户与非转换流量是 0.001%比 99.999%。这是有问题的,因为如果您需要预测哪个客户可能会转换,您的模型将会错误地将所有东西都归类为多数类。让我们来看看我的客户的数据:

正如我们所见,数据严重失衡,有 60 万条“非采纳者”记录,而只有 816 行“采纳者”记录。

(TL;博士: 数据已经过清理,并应用了不同技术的特征工程/转换,如套索选择、丢弃稀疏特征、空值插补等。管理团队决定将指标作为 ROC。因为这不是我们在本文中的重点,所以让我们继续理解数据已经被清理,目标/指标已经被定义。)

第 1 部分:基线常规培训

有许多解决方案,并且已经探索了许多“主流”方法来试图解决不平衡问题。我所说的“主流”是指:

  • 对多数类进行欠采样,使其更接近稀有类(1:1、1:2、1:3、1:5、1:7…使用聚类分层重采样)
  • 用合成数据过采样稀有类( SMOTEADASYNK-means SMOTE…你说吧!)
  • 复制稀有类几次(在训练集上效果惊人,但严重过度)
  • 训练时在模型中给予稀有类更多的权重

将训练和测试分割成 80:20 的比例后,我能得到的最好结果是应用 1vs1 类比例的欠采样来训练RandomForestClassifier(),这意味着每类有大约 650 条记录用于训练,测试集中大约有 160 条 1 类和 120,000 条 0 类。该模型产生了 69.9%的 ROC 得分:

第 2 部分:异常检测

上述模型的性能不是很好,它只对大约 1300 条记录进行训练,并用于预测 120,000 条记录。当我们将训练集中的类别 0 从 480,000 条记录减少到仅 650 条记录以匹配更小的类别时,丢失了许多信息。因此,我们对数据进行了异常检测。

根据定义,异常检测将大多数类别训练为“规则事件”,并将尝试将罕见事件识别为不规则模式。对我们来说,这听起来几乎是一个完美的解决方案,让我们来看看:

首先,为了避免“维数灾难,我应用了核主成分分析 (KPCA)来浓缩数据的特征,并使用一类 SVM 来训练我们的异常检测模型。根据定义,KPCA 相对于 PCA 的最大优势在于其将非线性可分数据投射到高维空间并使数据可分的能力。

AUC_ROC = 0.5

该模型在 ROC 评分上只有 50%,这只是对二元分类器的随机猜测。我尝试了用不同的超参数进行多次迭代,例如,你可以调整“nu”参数成为真正的异常比率,在我们的例子中,它是 0.1%。但是没有什么能让 ROC 分数提高几个百分点,但是为什么…?

让我们通过在 3D 图上用前 3 个组件可视化核心主要组件来看一看:

由作者创建

黄点是转换客户(稀有类),蓝点是非转换流量(多数类),黄点与蓝点完美地融合在一起,没有区别,现在我们很清楚“稀有”并不总是意味着“异常”,它可能只是意味着数据量较小,因此,SVM 不可能在类之间绘制超平面。

根据 Heiko Hoffmann 博士的说法,KPCA 和一流的 SVM 通常会产生非常有竞争力的表现。这不适用于我们的情况,因为上面的 3D 图显示了数据的不可分辨性。如果数据可以转换到一个线性可分的空间,结果应该是这样的:

左:原创;上:PCA 下:KPCA;来源:https://rpubs.com/sandipan/197468

为了证明我的结果,我还尝试了另外两种异常检测技术:隔离森林本地异常因素。毫不奇怪,它们不起作用。虽然我对异常检测没有很好地工作感到有点失望,但我并没有就此止步——必须有更好的方法来处理不平衡的数据和信息丢失。

第三部分:平衡装袋分级机

我们在第 1 节中了解到,大多数数据点在训练中没有使用,在没有任何合成数据的情况下,0 类和 1 类的 1:1 比率效果最佳。这迫使我们仅使用来自每个类别的 650 个数据点来进行训练,并且由于仅从类别 0 中提取了 650/420,000 ≈ 0.155%的数据点,这导致了巨大的信息损失。

****我们可以通过集合多个平衡模型来解决这个问题,并且每个单独的模型取多数类的不同子样本。它的工作方式与随机森林非常相似,不同之处在于 Bagging 分类器中的每个单独模型都从多数类中选取不同的样本,因此它会根据尽可能多的数据点进行训练,以提供更好的“覆盖范围”。该算法可以用下图来解释:

由作者创建

让我们来写代码(你可以在我的 Github 上找到完整的项目代码):

****

平衡装袋模型 ROC 比随机森林覆盖面积大,精度不变,ROC 得分从 69.9%上升了 3.5%73.4% ,回忆从 76.1%上升了 8.6%84.7%太神奇了!😀

第 4 节:结论和进一步措施

总结一下,到目前为止,我们已经讨论了异常检测、KPCA 可视化以及平衡打包。我希望这篇文章能帮助你对以下主题形成一些好的想法:

  • 异常检测在概念上如何工作
  • 为什么有时异常检测不起作用,以及如何用清晰的可视化表示来检查问题
  • 异常检测不起作用时处理不平衡数据的强大替代技术

如果您的项目有足够的时间,还有一些其他重要的主题值得探索,也有一些限制值得注意:

  • 当当前数据没有产生最佳结果时,产生更好结果的最佳方式总是引入质量更好的额外数据。一个好的模型可以让你提高 3%的准确率,但是一个质量更好、设计更好的数据集可以让你提高 30%——“垃圾进垃圾出”!
  • 为您的套装模型调整超参数
  • 均衡增压叠加、混合等。
  • 主成分最优个数的网格搜索
  • 在线使用模型时,考虑时间成本以获得更好的可伸缩性

祝你黑客愉快!!💪🏻

[1] H. Hoffman,核主成分分析用于新颖性检测 (2006),HeikoHoffmann

为什么反粒子必须存在于自然界

原文:https://towardsdatascience.com/why-antiparticles-must-exist-in-nature-e9b67ac8983f?source=collection_archive---------35-----------------------

图片由来自 PixabayGerd Altmann 提供。

为什么量子力学和相对论的结合使得反粒子的存在不可避免

在下文中,我将论证(遵循费曼)反粒子在自然界存在需要两个条件:第一是粒子的能量永远是正的,第二是自然界遵守相对论原理。

时空图的鸟瞰图

为了全面掌握本文的结论,需要对时空图(或闵可夫斯基图 ) 的几何性质进行解释。时空图是时空中粒子运动的图形表示。

图 1:二维光锥(来源)。

为了更好地理解时空图中间隔的可能类型,最好只使用两个维度,一个时间维度(纵轴)和一个空间维度(横轴),如图 2 所示。观察者在图上的轨迹被称为世界线

图 2:2D·闵可夫斯基图是一种用一个空间维度和一个时间维度描述宇宙中发生的事件的图表(来源)。

在闵可夫斯基图中,速度是曲线斜率的倒数。一个光子以光速 v = c 运动,一条 45 度线描述它(为了方便我们选择 c=1)。一个观察者以介于零(一条垂直线代表一个静止的粒子)和光速之间的恒定中间速度移动,沿着一条具有中间斜率的线移动。其他类型的世界线的斜率不能小于 1,这将它们限制在图 2 中由两条 45 度线(形成一个楔形)限定的区域内。观察者不能进入楔形区之外的区域。如果在这个外部区域有两个相互影响的事件,它们之间的信息会比光更快,因果关系会被破坏,因为事件的顺序会根据参考系而改变。这将在后面更详细地讨论。

什么是反粒子?

自然界中的每一种粒子都有其关联的反粒子 反粒子与其关联粒子质量相同,但电荷相反。最著名的例子就是带正电的正电子(或反电子)。正电子是带负电的电子的反粒子。大多数标准量子场论书籍都以同样的方式定义反粒子。在这里我将遵循兰卡斯特和布伦德尔的方法,这相当令人耳目一新。

图 3:观测到的第一个正电子(向上的曲线)。正电子进入左下方的小室,被铅平面(粗水平线)减速,被外加磁场弯曲,然后向左上方弯曲。(来源)。

费曼-斯图克伯格:粒子在时间中向后运动

在 20 世纪 40 年代,理查德·费曼恩斯特·斯塔克尔伯格(独立地)引入了将具有负能量的状态视为时光倒流的粒子的想法。我们现在称这些状态为反粒子。例如,在电磁场中带电粒子的运动方程(EOM)中

等式 1:如果在电磁场中带电粒子的 EOM 中,改变时间和电荷的符号,等式保持不变。

一个人改变了时间的符号,他马上就能看到,这与电荷反转具有相同的效果。这意味着一个在时间中向后运动的粒子看起来很像一个带着相反电荷在时间中向前运动的反粒子。

图 4:正文中描述的等价性(来源)。

让我简单提一下所谓的 CPT 定理,一个所有物理现象都遵守的基本对称性。CPT 分别代表电荷 C、宇称 P、时间反转 t,根据这个定理,在电荷共轭、宇称变换、时间反转下,物理定律不变。在我们目前的情况下,我们可以忽略 P,专注于 CT。解释反粒子的另一种方式是说它是 CT 对称的。

量子力学中的微扰理论

让我们考虑一个处于某种初始状态的粒子 ψᵢ 。在量子力学中,跃迁振幅和粒子跃迁的概率

方程式 2:从空间和时间的起点到终点的转变。

分别由下式给出:

等式 3:等式 3 中的概率幅度和相应的转移概率。2.

其中 K 被称为传播器。对应于传播子的格林函数为:

方程 4:对应于方程中传播子的格林函数。3.θ函数将因果关系嵌入格林函数。

请注意,因果关系是通过θ函数内置到格林函数中的,如果θ函数的自变量为负(如果最终时间大于初始时间),则θ函数为零。

如果系统是时间平移不变的,传播器仅依赖于时间差tt’。自由格林函数 G ₀由下式给出:

等式 5:位置空间中的自由格林函数 G₀。

图 5:粒子从 ψᵢ到ψᵢ,没有任何相互作用。

上图描述了以下返回转换:

等式 6:一个非相互作用的粒子进行跃迁的跃迁振幅 ψᵢ→ ψᵢ是 1(什么也没发生)。

图 6:扰动序列(来源)。

一个粒子对另一个粒子的散射,用一个势 V ( x ,t )的相互作用来描述。在存在相互作用的情况下,跃迁振幅或格林函数不能精确计算。然后使用扰动展开(对小 a 电位 V 有效):

方程 7:微扰展开式,对 V 小有效。

现在,函数格林函数 G₀可以表示为动量空间中的积分:

等式 8:自由格林函数 G₀表示为动量空间中的积分。

两个相互作用

现在假设粒子与电势v(x,t )在点 x ₁和 x ₂.相互作用两次为了简单起见,让我们用 x. 来表示坐标对( xt ),以找到初始状态 ψᵢ 返回到 ψᵢ 的幅度。在两次相互作用之后,让我们遵循费曼并写出粒子遵循的三个步骤,即:

  • 首先,处于初始状态的粒子 ψᵢx ₁与 V 相互作用,进入中间状态 m ,能量 E ( m )。
  • 然后粒子从x₁→x₂自由演化为时间(t₂ - t ₁).与此步骤相关的自由格林函数由等式给出。5 或 Eq。8.在该步骤中,所有可能的中间(或虚拟)状态 m 被求和。
  • x ₂与 V 的第二次相互作用将状态转换回初始状态 ψᵢ.

我们获得:

等式 9:从 ψᵢ → ψᵢ 返回的振幅在势中是二次的。中间状态已经结束。

情商。9 可以写成将中间态作为平面波(注意省略了一些常数):

等式 10:等式。9 使用平面波作为中间状态。

因素 ab 读作:

等式 11:等式中使用的系数 a 和 b。10.

其中能量由等式给出。8.因此中间状态是动量 p 和能量 E ( p )的粒子(参见费曼)。下图说明了这一过程:

图 7:二次贡献跃迁振幅 ψᵢ → ψᵢ(基于 来源 )。

由于我们对粒子返回到其初始状态的概率感兴趣(在电势 V 中达到二阶),我们对等式给出的直接跃迁(没有任何 V s)的振幅求和。其中一个对应于等式给出的 V 散射。10,并将结果平方。概率(直到 V )变为:

等式 12:回归概率展开到 v 中的二次项。

傅立叶变换的一个小插曲

一个函数f(τ)的傅立叶变换等于它分解成成分频率 ω (注意傅立叶变换不仅限于变量 t 和ω)。傅立叶变换输出一个复函数 ω 。它的模表示原函数 f ( τ )中各频率的量。傅立叶变换从其频域表示合成原函数 f ( τ )(参见维基百科)。数学上,傅立叶变换及其逆变换由下式给出:**

等式 13:时频傅立叶变换及其逆的定义。

下图说明了从时间到频率的傅立叶变换。

图 8:单位脉冲函数(t 的一个函数)的傅立叶变换及其傅立叶变换( )。

反粒子的必然性

为了证明反粒子的必然性,我们假设所有的能量都是正的(见费曼)。然后,我们将动量积分转换成方程式。12 由以下给出:

情商。14:方程 12 中的动量积分

对能量进行积分 ω=E ( p )并定义一个函数 F ( ω )使得 F ( ω )=0 对于 ω < m. 注意,T25x**₁, x**

图 9:函数 F( ω)。

情商。14 变成了:

等式 15:一个仅包含正频率的傅里叶分解函数。

跟随费曼,考虑以下定理。函数 f ( t )只能分解为正频率(如等式。15),根据这个定理, f ( t )对于任何有限的时间范围t = t₂-t₁*不能为零,除非它对于所有次都相同地消失。*

现在让我们把这个定理应用于我们目前的情况。首先,固定空间坐标 x ₁和 x ₂并考虑 ω 的依赖型动量积分。

但是对于一个固定的 x 的₁来说,动量积分 Eq。当第二坐标 x ₂位于 x ₁.的光锥之外时,14 不能等于零我们的结论是。14 必须包括含有类空间隔的非零振幅(运动速度超过光速的粒子)。

图 10:具有类空间隔的光锥。

但是正如我们在引言中解释的,类空间隔具有依赖于帧的事件顺序。因此,在另一个参考系中,一些中间粒子被视为“在时间中“传播”的粒子(参见图 11)。现在,为了结束讨论,让我们给粒子加上一个* 电荷。如上所述,根据费曼-斯图克伯格的解释,这些在时间上向后移动的中间(或虚)粒子相当于在时间上向前移动的反粒子!*****

图 11:光锥内外运动的必然性。

为了使论点更清楚,让我们详细研究图 11。假设我们换到一个新的(带撇的)参考系中,其中₂让我们看看会发生什么。在新的参考系中,直到 t = t ₂只有一个运动粒子 ψᵢ 。然而,在 t ₂,电势 V 产生了两个粒子,其中一个似乎在时光倒流。然后在 t ₁,原始粒子和向后运动的粒子相遇并消失。换句话说,两个粒子在新的参考系中相互湮灭。

图 12:显示两个配对生产事件的气泡室图像。在顶部,看不见的伽马射线产生了 e⁻ e⁺对(由磁场引起的螺旋轨迹)。第二个 e⁻e⁺对,在底部,使用伽马射线的所有能量()。

因此我们得出结论,这两个条件(能量正性和相对性)意味着粒子对可以被创造和湮灭!

我的 Github 和个人网站 www.marcotavora.me 有一些其他有趣的材料,既有关于物理的,也有关于数学、数据科学和金融等其他主题的。看看他们!

为什么 Apache Airflow 是管理数据管道的最佳选择

原文:https://towardsdatascience.com/why-apache-airflow-is-a-great-choice-for-managing-data-pipelines-48effcce3e41?source=collection_archive---------8-----------------------

一瞥使气流比它的前辈更好的能力

Unsplash 上由 Seika I 拍摄的照片

Apache Airflow 是一个开源调度程序,用来管理你的日常工作。这是一个很好的工具,可以组织、执行和监控您的工作流,使它们无缝地工作。

阿帕奇气流解决了很多前人面临的问题。让我们先了解一下架构,然后我们来看看是什么让气流更好。

熟练的技艺

Dag(有向无环图)表示气流中的工作流程。DAG 中的每个节点代表一个需要运行的任务。用户提及特定 DAG 需要运行的频率。用户还可以为 DAG 中的每个任务指定触发规则。例如,您可能希望在之前的某个任务失败后立即触发警报任务。

让我们试着理解气流的各种成分。

核心组件

气流主要由以下部件组成-

  1. 调度程序
  2. 网络服务器
  3. 执行者
  4. 后端

调度程序

它负责根据提到的频率安排您的任务。它会查找所有符合条件的 Dag,然后将它们放入队列中。如果 DAG 出现故障并且启用了重试,则计划程序会自动让该 DAG 重试。可以在 DAG 级别限制重试次数。

网络服务器

网络服务器是气流的前端。用户可以从用户界面启用/禁用、重试和查看 DAG 日志。用户还可以在 DAG 中深入查看哪些任务失败了,失败的原因是什么,任务运行了多长时间,以及任务上次重试的时间。

这个 UI 让 Airflow 优于竞争对手。例如,在 Apache Oozie 中,查看非 MR (map-reduce)作业的日志是一件痛苦的事情。

执行者

它负责实际运行一个任务。执行器控制哪个工作线程运行一个任务,并行运行多少个任务,并随着任务的进展更新任务的状态。

您可以在由 Celery 或 Dask 或 Kubernetes 管理的多个工人上运行您的任务。

这些任务是从队列中提取的,队列可以是 Redis 或 RabbitMQ。

默认情况下,Airflow 使用 SerialExecutor,它在本地机器上一次只运行一个任务。不建议在生产中这样做。

后端

Airflow 使用 MySQL 或 PostgreSQL 来存储配置以及所有 DAG 和任务运行的状态。默认情况下,Airflow 默认使用 SQLite 作为后端,因此不需要外部设置。不建议将 SQLite 后端用于生产,因为可能会丢失数据。

气流部件

那么,是什么让气流成为数据管道的合适调度器呢?

监视

气流提供了多种监测方法。您可以从 UI 中看到任务的状态。它会在 DAG 失败时发送一封邮件。如果任务违反了定义的 SLA,您也可以发送电子邮件。还可以从 Airflow UI 本身查看任务的日志。

气流 DAG UI

血统

这项功能是最近在 Airflow v1.10 版中推出的。Lineage 允许您跟踪数据的来源、数据的变化以及数据随时间的移动位置,如 Hive 表或 S3/HDFS 分区。

当你在存储器中读写多个数据任务时,这非常方便。用户需要为每个任务定义输入和输出数据源,并在 Apache Atlas 中创建一个图表,描述各种数据源之间的关系。

Apache Atlas 实例图示例(来自https://atlas.apache.org/#/QuickStart))

传感器

传感器允许用户基于特定的先决条件触发任务。用户需要指定传感器的类型和检查条件的频率。例如,当特定分区(如日期)可用时,您可以使用 HDFS 分区传感器来触发任务。

用户化

Airflow 还允许用户创建自己的操作员和传感器,以防现有的丰富生态系统不能满足您的要求。我写了一个 SparkOperator,因为官方不允许我调整所有参数。所有代码都是用 Python 写的,这使得任何开发者都可以轻松集成。

除了上面提到的所有好处,Airflow 还可以与 Hadoop、Spark 等大数据生态系统中的所有服务无缝集成。由于所有代码都是用 Python 编写的,开始使用 Airflow 只需要几分钟。可以看看官方快速入门指南

您还可以探索 https://databand.ai/更强大的设置,以监控由 Apache 气流驱动的数据管道。

[## 数据带-数据管道可观察性| Dag 和 ML 的可观察性

从数据源到机器学习模型,全面了解您的数据管道。请求演示跟踪所有管道…

databand.ai](https://databand.ai/)

为什么德国和意大利的新冠肺炎统计数据如此不同?

原文:https://towardsdatascience.com/why-are-covid-19-statistics-so-different-for-germany-and-italy-ee5bf376f461?source=collection_archive---------4-----------------------

德国似乎是新冠肺炎的一个例外,因为德国的感染率相对较高,但病死率极低(0.4%),尤其是与意大利(9.5%)相比。

前言:

我在周末写了这篇文章的第一稿,因为我对这两个国家的数据似乎存在差异感到非常惊讶,并希望更好地了解是什么导致了这种差异。在完成这篇文章后,我不确定我是否应该发表它,因为我不喜欢意大利和德国非常相似但时移发展的可怕结论。所以我在周一和周二更新了数据,只是想看看情况是否有显著变化。他们没有。

我的分析表明,意大利领先德国 7 到 19 天。我认为实际数字更接近范围的高端。这一假设很大程度上基于实施的检测与报告病例的比率(德国每例 13.1 次检测;意大利为 3.9)以及人口年龄组差别不大的事实。

我的分析还表明,由于可能有许多未被发现的病例,意大利大大高估了其病死率。

第一章。当前事实

  • 当前感染
  • 当前死亡人数
  • 当前病死率

当前感染:

2020 年 3 月 24 日:

让我们先来看看两国的感染人数。在撰写本文时,报告的感染人数如下(基于来自约翰·霍普斯金大学的数据):

  • 义大利:****63927
  • 德国:29056 人

随时间发展(2020 年 2 月 24 日—2020 年 3 月 24 日):

现在让我们来看看这两个国家的发展情况。我们可以看到,随着时间的推移,这两个国家的感染人数显著增加,这一点大家都很清楚。

来源:自己可视化。来自约翰·霍普斯金大学的数据截至 2020 年 3 月 24 日

当前死亡人数:

2020 年 3 月 24 日:

在写这篇文章的时候,以下人数被报道死于该病毒(基于来自约翰·霍普斯金大学的数据)

  • 意:****6077
  • 德国:123 票

随时间发展(2020 年 3 月 1 日-2020 年 3 月 24 日):

与感染相比,新冠肺炎首例死亡病例的出现有一定的滞后性,这也是我们关注 3 月 1 日以来数据的原因。意大利已经有数千人死亡,而德国的死亡人数在下面的图表中几乎不存在。

来源:自己的可视化。数据来自约翰·霍普斯金大学截至 2020 年 3 月 24 日。与意大利相比,德国的死亡人数确实显得微不足道。

当前病死率(CFR):

为了计算病死率,我们用报告的死亡人数除以报告的感染人数。然而,我们应该意识到有两种偏见在起作用:

  • 未解决的病例:很不幸,一小部分目前被感染的人将会死亡。未解决病例的存在导致低估 CFR
  • 未确诊病例:几乎可以保证很多感染病例没有上报。因此,可能大大高估了 CFR 。虽然未检测到的病例数量因国家而异,但一项研究表明 86%的病例可能未被检测到。

让我们来看看计算出的病死率:

  • 意大利:****6077/63.927 ~ 9.5%
  • 德国:123 / 29.056 ~0.4%

第二章。假设

看着这些数字,我大吃一惊。它们对我来说没有任何意义。我开始研究并发现了几个我想研究的领域:

  • 假设 1: 意大利,平均来说,比德国要古老得多。
  • 假设 2: 在这两个国家中,考试的数量不成比例。
  • 假设三:意大利领先曲线,或者换句话说,德国落后。

意大利比德国历史更悠久

人们经常引用意大利是世界上第二老的人口。老年人口肯定可以解释这两个国家不同年龄组病例分布的差异。

来源:自己可视化。数据基于RKI-报告RKI-仪表板(德国)和ISS-报告(意大利)。意大利的病例是在 10 年队列中报道的。然而,由于德国人更为集中,我把他们作为 x 轴。为了改变意大利人的群体,我假设了一个线性分布。这意味着意大利 30-39 组报告病例的一半被分配到 15-34 组,另一半被分配到 35-59 组。

研究这个说法的时候我惊呆了。德国的中位年龄(45.9)与 2015 年的意大利(45.9)一样高,2018 年更高(德国:47.1 /意大利:45.5),现在更高(德国:47.8 /意大利:46.5)——基于当前中情局的《世界实况报道》

所以,也许年龄群组分布不同?我从经济合作与发展组织的统计数据页面中提取数据,并比较了这些群体,发现他们非常相似。意大利确实有一条稍微偏右的长尾巴。即“35-59 岁”人群比“15-34 岁”人群多 2%左右。

来源:自己的可视化。数据来自

进一步的研究当然可以花在这两个国家的社会动态方面,例如,年轻的成年人多久去看望他们的父母或者甚至和他们住在一起。然而,虽然我认为它可以解释一些差异,但它不能说明一切。

管理的测试数量不成比例

据说德国的考试率非常高。毫无疑问,德国分散的技术先进的实验室(见视频 : 2:26)有助于德国的测试能力。然而,意大利也不是没有测试过。他们已经做了很多。

来自的考试数据。对德国来说,最近一次“官方”测试是在 3 月 15 日。然而,也有人说每周有 160,000 次测试的能力,这使我们看到了绿色条。

虽然管理的测试的绝对数量很有趣,但我认为将每个检测到的案例管理的测试的数量作为测试强度的代理也是有意义的。对于 3 月 22 日,该比率大致如下:****

  • 意大利:232,222 例(总检测数)/ 59,138 例(检出病例)~ 3.9 例
  • 德国:327,000(总检测数)/ 24,873(检出病例)~ 13.1

由于测试的周转时间,这里可能有一些不准确,但总的来说,数字似乎证实了德国的测试比意大利更广泛。这使得我们有理由假设德国抓住了更多的轻微病例,而意大利可能偏向于已经表现出严重症状的更严重的病例。这一假设符合声明(3 月 10 日)的说法,即意大利只是在测试危急病例。换句话说,意大利的未确诊病例数可能远高于德国。如前所述,更多的未识别病例将高估病死率。

意大利走在了潮流的前面

虽然我认为前面的两个论点提供了一些关于严重不同的病死率的解释,但我认为现实要简单得多。

人类思维很难理解指数增长,这就是为什么有人可能会认为早期关于感染和死亡的图表看起来不太相似。

然而,如果我们从另一个有利的角度来看,我们将两国的第 0 天重新设定为不同的一天,那么发展看起来惊人地相似。

意大利在传染病方面走在了前面

让我们看一张图表,比较德国从 2020 年 3 月 1 日开始与意大利从 2020 年 2 月 23 日开始的累积感染情况。

****来源:自己的可视化。数据来自约翰·霍普斯金大学截至 2020 年 3 月 24 日

这些结果意味着,如果我们将意大利一周前(七天)的感染数据与德国的数据进行比较,模式看起来非常相似。

意大利走在了这条曲线的前面——死亡

现在让我们比较一下德国从 2020 年 3 月 9 日开始与意大利从 2020 年 2 月 20 日开始在累积死亡方面的发展。

****来源:自己的可视化。数据来自约翰·霍普斯金大学截至 2020 年 3 月 24 日

这意味着,如果我们将 19 天前意大利的死亡人数与德国的数据进行比较,模式看起来又非常相似。好消息是,最近德国曲线似乎有些变平。

结论:

1)意大利走在了潮流的前面

在我看来,意大利在比较累计死亡人数时领先 19 天,在比较感染人数时领先 7 天。我认为,鉴于在德国进行的更广泛的测试,死亡和感染的滞后不同这一事实是完全合理的(即,意大利的真实感染人数可能要高得多,因此我们必须追溯到更早的时间,以找到匹配的时期)。

因此,根据死亡人数对不同时期进行比较更有说服力,也可能更能反映现实。虽然在多重先决条件的情况下,尸检和死因归属可能会有一些差异,但我确实认为,即使考虑到这些差异,我们也不会看到非常不同的情况。

我只是希望,作为一个国家,我们可以很好地利用这个开端,并以某种方式避免最糟糕的事情发生。

2)意大利高估了他们的 CFR

对我来说,从分析中可以明显看出,意大利有许多轻微的病例过去没有、现在仍然没有被注意到和检测到。因此,在计算病死率时,它们没有记录在准确的分母中。准确的病死率将会大大降低。

如果你想知道新冠肺炎教是如何在德国传播的,看看这个图片吧:

** [## 德国新冠肺炎发展的交互式可视化

在这一点上,德国对新冠肺炎在地区层面上的发展没有很好的形象化,所以我决定…

towardsdatascience.com](/an-interactive-visualization-of-the-covid-19-development-in-germany-2b87e50a5b3e)**

数据:

** [## 德国/意大利比较

可比数据感染,百分比德国,意大利,德国,意大利 0-4,128,158,0-4,0.7%,0.3%…

docs.google.com](https://docs.google.com/spreadsheets/d/1ywbNPQXCLhU6S6xJOHZXgdwhOZc_qfBVR2z-Zn-ARk4/edit?usp=sharing) [## fbo sler/covid 19-德国-意大利-对比

回购以创建介质商品的数据。为 fbo sler/covid 19-德国-意大利-比较开发做出贡献,由…

github.com](https://github.com/FBosler/covid19-germany-italy-comparison)**

为什么眼球运动如此有趣?

原文:https://towardsdatascience.com/why-are-eye-movements-so-damned-interesting-76bf293a7bde?source=collection_archive---------38-----------------------

“扫视”是 2000 年来让科学家和哲学家着迷的古怪行为。

图 1:Reuter ophtrope,一种 19 世纪的模型,用于研究响应肌肉动作的眼球运动。克里斯蒂安·乔治·西奥多·鲁埃特,公共领域,通过维基共享

我在研究生院的第一次实习是在劳伦斯·斯塔克博士的眼球运动研究实验室。我的父亲(一个真正的医生)来访,我很兴奋地展示了实验室。他似乎被满墙的老花眼杂志迷住了。但在长时间的专注之后,他说:“老花眼?你变老了;你需要老花镜。还有什么好说的?”我发现很难不同意这一点,所以我努力解释为什么我发现眼球运动如此有趣。

然而,对眼球运动的研究在整个科学史上发挥了关键作用,并且不可避免地与视觉和知觉的研究交织在一起,成为心理学、神经科学和控制论等新兴领域的熔炉。几千年来,眼球运动吸引了一些最伟大的人物,包括亚里斯多德、托勒密、盖伦、阿尔哈曾、达芬奇、培根、笛卡尔、亥姆霍兹和谢灵顿。

也许最有影响力的古人是佩格蒙的盖伦(公元 129-200 年)。他是古代最多产的作家之一,他现存的作品超过 100 万字。(他也是罗马皇帝马可·奥勒留、路奇乌斯·维鲁斯、康茂德、塞普蒂米乌斯·塞维鲁和卡拉卡拉的私人医生。)盖伦使我们第一次详细了解了肌肉收缩。他认识到肌肉以激动剂/拮抗剂对的方式工作,并推测它们是由流经神经的“动物精神”驱动的。他解剖了恒河猴,详细描述了六块眼外肌的组织和结构,甚至还进行了矫正斜视和白内障的手术。对于公元 200 年来说还不错。

在接下来一千年的大部分时间里,数学和科学的大部分进步都可以归功于“伊斯兰黄金时代”。阿拉伯数学家ḥasan·伊本·阿尔海萨姆(拉丁化阿尔哈曾)扩展了亚里斯多德、托勒密和盖伦的思想,并且是第一个将这些理论应用于假设检验的“科学方法”的人。在接下来的一千年里,他的贡献领先或预见了许多发展。他推断,视觉是光线照射到视网膜上的结果,而不是从眼睛发出的。他计算了空间中存在的一个表面,即单眼视觉(两只眼睛看到相同的图像)。阿尔哈曾(以及托勒密)也指出,眼球运动要么是共轭的(相同),要么是分离的(相反)。在 19 世纪,这一现象被正式确立为“海林定律”,并继续成为神经科学和心理学研究和争论的重要话题。(稍后将详细介绍这一点。参见图 5。)

阿尔哈曾受埃及哈里发的委托,治理阿斯旺的尼罗河洪水。但他的计划被证明是行不通的,他被哈里发 Al-Hakin bi-Amr 阿拉逮捕。在软禁期间,阿尔哈曾写下了他的七卷本《光学之书》。这被广泛认为建立了光学作为第一个现代科学学科,阿尔哈曾经常被称为“光学之父”他的著作在 200 年后首次被翻译成拉丁文,并在 1571 年出版后对文艺复兴时期的科学家产生了广泛的影响。

西方科学最重大的进步是意大利(大约 1280 年)发明了矫正眼镜,但眼球运动在文艺复兴时期重新受到关注。列奥纳多·达·芬奇创造了数百个眼睛和大脑的解剖研究(使用牛,因为人体解剖是被禁止的)。他是第一个发现视神经穿过大脑半球的人(图 2)。约翰尼斯·开普勒在视网膜图像方面的工作扩展了阿尔哈曾的想法。就连弗朗西斯·培根也对眼球运动有所评论,尽管不可否认,这不是他最好的作品:

眼睛以同样的方式移动;因为当一只眼睛移到鼻孔时,另一只眼睛就从鼻孔移开。原因是同意的运动,在精神和部分精神是强大的。

图 2: 在没有人体解剖的情况下,莱昂纳多·达·芬奇绘制了详细的图画,描绘了眼睛、心室系统和神经的结构和功能(大约在 1508 年)。注意,他正确地识别了视神经穿过大脑半球的视交叉。图片来源:皇家收藏信托女王伊丽莎白二世陛下 2019。

眼睛和科学革命

对于历史爱好者来说,勒内·笛卡尔对这一领域产生最持久的影响可能不足为奇。通过他对视网膜光学、反射弧和眼球运动力学的开创性研究,他提供了第一个完整的神经生物学观点。笛卡尔物理学是不折不扣的机械论,将企业置于一个可测试的科学基础上,并引领了跨越生物学几个分支的科学革命。

例如,他的眼部肌肉手术的“气球理论”(1664 年),开启了一项长达 300 年的探索,以揭示肌肉收缩的机制。笛卡尔提出肌肉由来自中央储库(脑室[图 3])的液压流体提供动力。他的理论昙花一现,在 1667 年被 Jan Swammerdam 推翻,他证明肌肉收缩时体积不变。(从这一点开始,对典型肌肉的研究过渡到了更方便的蛙腿。)加尔瓦尼(1791 年)证明了电可以引发肌肉收缩,从而产生了电动理论(并激发了玛丽·雪莱的弗兰肯斯坦 ) 中的动画。蛋白质折叠和弹簧理论统治了这个领域 100 年。现代的滑动灯丝理论是由安德鲁·huxley⁴.在 1954-1969 年提出的顺便提一下,安德鲁·赫胥黎获得了诺贝尔生理学和医学奖,但不是因为他在肌肉方面的工作。他和艾伦·霍奇金在 1952 年开发了神经动作电位传播的数学模型。他同父异母的哥哥阿尔多斯·赫胥黎写了《美丽新世界》。

图 3:勒内·笛卡尔的肌肉收缩气动理论。勒内·笛卡尔的‘气球(液压)肌论’1664 年。笛卡尔假设大脑中的脑室是液体的储存库。图片:维基共享

为什么要眼球运动?

眼球运动的科学吸引力是什么?除了我们对视觉的自然迷恋,动眼系统作为一个研究系统拥有三个独特的优势。

首先,与科学中的几乎所有其他事物不同,眼球运动的目标或目的是显而易见的。它们受到有意识和无意识的控制,允许对反射、意志控制以及心理过程进行研究。

第二,动眼系统几乎是可以想象的最简单的机械系统。人的眼球几乎是球形的,眼睛不与环境进行物理交互(它不需要举起任何东西)。这大大简化了用于模拟其操作的动力学方程。眼睛由 6 块眼外肌共同控制。在很大程度上,水平眼球运动是由一对肌肉(内侧和外侧直肌)驱动的。垂直运动和回旋运动只是稍微复杂一些。例如,上斜肌使用由腱环形成的滑轮,滑车(图 4A),有效地平衡肌肉力量,同时反转其方向。另一个有趣的花絮:猫头鹰和鹰拥有完整的 6 块眼外肌,尽管事实上它们几乎不能移动它们奇怪形状的眼睛(图 4B)。猫头鹰的头部运动类似于哺乳动物的眼睛运动。

图 4:眼部肌肉的解剖。a .6 块眼肌 b .猫头鹰只能在眼窝内移动眼睛 2 度左右。图鸣谢:(A) MBBS:爱学习【https://lovetostudymbbs.wordpress.com/(B)马丁,G.R. (2017)。是什么驱动了鸟类的视觉?票据控制和掠食者探测使飞行黯然失色。神经科学前沿 11 : 619

第三,只有少数几种不同的类型的眼球运动:

1.迅速扫视:眼睛的快速“跳动”,以改变眼睛在空间中的位置,就像阅读时一样。"扫视"是法语中"混蛋"的意思。人类婴儿会迅速扫视,但不会跟踪运动。

2.追踪运动(平滑追踪、视动、全场追踪):追踪眼球运动的缺陷是精神分裂症自闭症和其他疾病的证据。

3.聚散:双眼同时向相反方向运动,以保持双眼视觉。聚散的一个极端例子是“斗鸡眼”

4.前庭眼反射:当头部转动时,眼睛反向转动以稳定凝视。三个前庭半圆管检测角加速度,充当生物陀螺仪。VOR 的紊乱会导致晕动病和眩晕。

…以及眼球运动:

5.调节:通过重塑镜片来改变焦距。

6.瞳孔:缩小瞳孔以降低光线强度。头部外伤会导致不对称的瞳孔反应。

正如我们将看到的,这 6 个运动由独立的控制系统驱动,但在功能上是集成的。简单的眼球运动动力学允许集中、渐进的研究,经常导致远远领先于生理学和神经生物学其他领域的突破。

眼球运动的规律

眼睛运动本质上是二维的,但是眼睛可以以三个自由度运动(水平、垂直和旋转)。眼部肌肉本身的解剖结构很难阻止眼睛做出一些非常怪异的事情(想想变色龙)。这一观察导致了一系列的研究来理解为什么他们。在 19 世纪,将观察结果之间的几乎任何关系都视为自然“法则”是一种时尚因此,这个时代见证了几个“眼球运动定律”的发现,逐渐形成了一种理解,即支配眼球运动的是神经生物控制,而不是机械约束。

东德尔定律(弗朗西斯库斯·科尼利厄斯·东德尔斯 1818-89)

如果眼睛运动是围绕轴的简单旋转,45 度倾斜的眼睛运动将与眼睛/视网膜旋转 10 度的相同位置的两次运动(水平,然后垂直)非常不同。唐德定律指出,对于任何一个凝视方向,眼睛的 3D 空间方位是唯一的,并且与眼睛如何到达该凝视方向无关。

上市定律(约翰·贝纳蒂克·利斯廷 1808–1882)

Listing 定律指出,通过从一个特定的“主要”参考方位开始,然后绕着位于与主要方位的凝视方向正交的平面内的轴旋转,可以达到所有实现的眼睛方位。换句话说,唐德定律告诉我们,眼睛的最终方向独立于眼球运动的路径,而列名定律告诉我们那个方向是什么。

为了将这些规律可视化,科学家们建立了复杂的物理模型来研究眼睛的旋转和眼肌的活动。第一台这样的设备的发明者克里斯蒂安·乔治·西奥多·鲁埃特称之为“眼底镜”(图 1)。唐德定律和李林定律都可以在这个模型上得到证明。肌肉收缩或伸展的程度在模型后面的标尺上测量。其他版本使用悬吊重物来制造肌肉张力。

赫尔曼·赫尔姆霍茨(1821-1894)

该领域的一个统一人物是博学的赫尔曼·赫尔姆霍茨。今天,他可能因为对电磁学、亥姆霍兹波 equation⁶和流体力学中的亥姆霍兹定理的研究而更加出名,但是他对生理光学和眼科学的全面研究可能有更大的 impact⁷.

Helmholtz 通过实验证实了 Listing 定律,将不同眼睛位置的视觉后像与 Listing 的预测进行了比较。他发明了检眼镜,医生用来检查你眼睛的熟悉设备。他也是第一个测量神经信号速度的人(在当时,神经信号被认为是瞬时的,就像电一样)。

他的学生可能更有名,包括海因里希·赫兹和诺贝尔奖获得者阿尔伯特·迈克耳孙和马克斯·普兰克。他的另一个学生是威廉·马西米兰·冯特(1832-1920)。在实验室工作期间,冯特发展了他在实验方法方面的技能,并开发了一种先进的眼底镜设计。他确立了自己作为极具影响力的神经生理学家的地位。冯特是第一个自称为“心理学家”的人,也经常被称为“实验心理学之父”。反过来,冯特在其职业生涯中培养了多达 170 名博士生,在智力上开拓了两个领域——神经科学和心理学。

赫林定律(卡尔·埃瓦尔德·康斯坦丁·赫林 1834–1918)

赫林的等神经支配定律指出,两只眼睛的眼球运动总是相等的,但方向不同。在共轭眼球运动(迅速扫视和平滑追踪)中,眼球同等地一起运动。对于分离运动(如聚散),神经支配是相等的,但相反。这意味着什么是违反直觉的,但很容易证明。考虑将双眼重新注视新目标的任务(图 5)。最简单的解决方案是独立地改变眼睛的位置。但是,眼睛根据赫林定律移动,两只眼睛移动到新的视觉方向,然后在相反的方向(聚散度)重新建立双眼视觉。这是托勒密观察的形式化,阿尔哈曾进一步证明了眼球运动受到某种神经控制逻辑的限制。也许令人惊讶的是,在快速眼动睡眠期间,海林定律被违反了,在大多数时间里,个体的眼球运动或多或少是相互独立的。这与梦通过眼球运动来想象场景的观点相矛盾,“除非每只眼睛都在体验不同的 dream⁸"(Fig.”。

图 5: 描绘了在眼睛独立运动或眼睛遵循赫林的均等神经支配定律的情况下,重新激发穆勒刺激的预测。维基共享 E4zase1vrvlo6pe (2016)

图 6:睡眠期间快速眼动(REM)不协调——违反了赫林定律。鸣谢:周伟民、金伟民(1997)。快速眼动睡眠期间双眼眼球运动不协调。Exp Brain Res1997117(1):153–60。

和许多伟大的科学家一样,海林和亥姆霍兹既是同事又是对手。亥姆霍兹认为海林定律是习得行为;赫林认为这是本能,或者说是“天生的”每个人都独立地推导出双眼单视界,即在两个视网膜上具有相同解剖差异的空间点的轨迹,或单一视觉的点(首先由阿尔哈曾描述)。赫林发展了视觉超敏锐理论,展示了一组光感受器的分辨率如何超过单个感受器的大小。他还提出了色觉的“对手理论”(亥姆霍兹提倡托马斯·杨和詹姆斯·克拉克·麦克斯韦的替代、三色受体理论)。

谢灵顿定律(查理斯·斯科特·谢灵顿 1857–1952)

19 世纪的最后一个定律是谢灵顿的相互神经支配定律,其中对抗肌的动作伴随着对抗肌的相互放松。这实质上是在现代神经生物学的背景下重申笛卡尔的气球理论。他还引入了本体感觉这个术语,来描述动觉第六感(“肌肉感觉”),从而发现了检测肌肉拉伸、张力和速度的感觉神经元,如高尔基腱器官和肌梭。谢灵顿因为在神经元功能、突触通讯和反射方面的工作获得了诺贝尔奖。

20 世纪早期:理论生物学的突破

20 世纪中期,随着生理学的两项最高成就,更多的难题迎刃而解:(1)神经传导的霍奇金-赫胥黎模型(除其他外,该模型解释了控制由亥姆霍兹测量的神经信号速度的生物化学过程)和(2)肌肉收缩的赫胥黎滑动细丝模型,该模型也解释了肌肉的力-速度和长度-张力关系。电生理记录技术的发展使得研究人员能够测量单个神经元产生的信号。

与此同时,麦卡洛克和皮茨 1943 年的论文展示了神经元网络如何像计算机一样执行逻辑和数学运算。1949 年,唐纳德·赫布(Donald Hebb)提出了突触修改的第一条规则,展示了简单的过程如何能够负责根据经验重新连接网络——从而开创了计算生物学和神经网络的新领域。

控制论

电生理学与所有组件(机械设备、肌肉和神经元)的模型相结合,提供了在“系统”水平上研究神经肌肉控制的独特机会。这使得研究人员能够更深入地研究神经回路,以了解眼球运动命令在大脑中是如何规划、协调和执行的。

1948 年,诺伯特·韦纳将这个新兴领域定义为控制论,即“动物和机器中控制和交流的科学研究”。他的见解是,为分析信号和控制系统(在电气和机械工程中)而开发的大量分析方法可以用来理解神经生物控制。

控制论中最重要的成果之一正是我的顾问拉里·斯塔克的工作。当然,这项工作与眼球运动有关。他通过应用频率分析和控制 theory⁹ ⁰.诱发振荡,测量了瞳孔反射中神经反馈的时间延迟了解延迟的持续时间和神经信号的速度有助于确定电路的位置。

图 7:快速扫视和平滑追踪运动的结合。平滑的追踪系统反应大约快 50 毫秒。猴子的扫视和平滑追踪眼球运动。 J. Physiol191 ,第 609–631 页

由于四种眼外眼运动的每一种都有不同的潜伏期,表明不同的上游神经处理和独立的控制系统(VOR 50-100 毫秒,平滑追踪 100-130 毫秒,聚散度 160-180 毫秒,迅速扫视 200 毫秒),因此还需要更多的研究。事实上,赫林定律暗示了这一点。例如,当眼睛开始跟踪一个目标时,平滑跟踪系统首先开始跟踪方向和速度,随后是矫正性(“追赶”)迅速扫视,以聚焦在目标上(图 7)。

同时代的人(特别是约翰·霍普金斯大学的大卫·罗宾逊)开始将电生理学与控制理论结合起来,研究参与计划和执行眼球运动的单个神经元。这使得控制系统的定量的、可测试的电路图的创建成为可能,这些控制系统涉及产生迅速扫视、平滑追踪、VOR 和聚散度眼球运动。

罗宾逊关于扫视反馈控制的里程碑式的工作是在猕猴身上完成的——与盖伦解剖的猕猴是同一物种。他创造的另一个模型(图 7)是一个综合平滑追踪和 VOR 控制的可能模型,尽管它绝不是唯一的。这些模型表明,眼睛运动是由反馈控制系统驱动的,其中运动神经元被驱动以最小化目标速度或位置与实际速度或位置之间的误差。要么这是使用控制理论研究眼睛的一个愉快的意外,要么是大自然效率的证明。

图 8:集成了 VOR 和平滑追踪系统的系统模型。鸣谢:罗宾逊,D.A. (1981)。控制系统分析在眼球运动神经生理学中的应用。安。修订版神经科学4:463–503

在我的实验室轮岗几年后,我与另一位电子工程教授(也是罗宾逊的同事)爱德华·凯勒一起工作,他正在研究涉及迅速扫视的规划和执行的猴子脑干神经元的群体行为。大脑的一个区域,即上丘,保持着一个不是视觉差异或几何位置的空间图,而是眼睛位置和感兴趣的目标之间的误差信号的空间图(图 9)。这里,与运动神经元不同,决定眼球运动幅度的是神经活动的位置,而不是其强度。下游的传出通路将这个空间信号转换成运动神经元所需的时间控制信号。

图 9:15 度角时上丘 2 层中的二维群体活动。斜向扫视。SC 在对数空间图中编码迅速扫视的幅度和方向。每个部分都显示了在丘运动图上的分布活动。顶部:突发神经元层中表现为恒定轮廓曲线的活动。底部:同样表示构建的神经元层。:扫视开始前 100 毫秒。中间:迅速扫视开始时的活动分布。右侧:扫视结束。鸣谢:安德森,R.W .,凯勒,E.L .,甘地,新泽西州&达斯,S. (1998)。猴子上丘二维扫视相关群体活动。神经生理学杂志,80:798–817

对较低脑干活动的电极记录似乎表明,眼球运动是在受试者意识到之前进行的,这激起了关于自由意志的辩论。一个更令人欣慰的解释是,大脑不断参与运动控制的应急计划。

那又怎样?

许多遗传、医学和心理疾病可以通过眼球运动的异常来诊断⁴.在我的母校,眼球运动是一年级验光学生的必修课,因为他们有可能诊断未知的医疗状况,如中风或脑肿瘤。因为大多数人从来不去看神经科医生,所以早期发现的唯一机会是去找验光师。简单的眼球运动测试也是普通体检的一部分。

psilocybin 的使用有效地降低了位置反馈系统的“增益”,因此受试者在观看场景时将只移动 20%的眼睛。60%的精神分裂症患者表现出不自主的眼球震颤,即眼睛的快速来回抽动。随着大量饮酒,平稳的追踪系统开始失效,眼睛会以不稳定的眼球运动进行追踪(正如标准的现场清醒测试所揭示的)。在最初的 4-5 个月,婴儿不能产生跟踪运动。

你自己试试吧,下次家里有新成员的时候。通过测试宝宝的眼球运动来逗乐你的朋友或打扰公婆。在最初的六个月里,你能引起的只是扫视性的眼球运动。但是,与清醒的婴儿相比,无论你给婴儿喝多少酒,他仍可能通过现场清醒测试。

你还觉得眼球运动没意思吗?

我放弃了。你就像我爸爸一样。

=结束=

罗素·安德森 在媒介上发表了几部科学伪史。他拥有加州大学电子工程学士学位和生物工程博士学位。他的教授中至少有 5 人研究过眼球运动(劳伦斯·斯塔克、埃德·凯勒、史蒂夫·雷曼、埃德温·刘易斯和史蒂文·海宁)。他在实验室讲授拉里·史塔克的“眼球运动”课程,担任生物控制论的编辑,并在史密斯-凯特尔维尔眼科研究所与埃德·凯勒一起进行博士后研究。离开学术界后,他在 HNC Software、J.P. Morgan、Halifax Bank of Scotland、Opera Solutions、KPMG 和 IBM 等公司工作了 20 多年,构建商业预测解决方案……脑子里总是想着眼球运动。

问题/评论:anderson.transactionanalytics@outlook.com

参考文献:

1。即使对伯克利来说,斯塔克医生也是个怪人。他是三个看似不相关的系的教员:生理光学(视光学学院)、神经科学(UCSF)和电气工程(UCB)。尽管他自己没有博士学位。作为二战加速计划的一部分,他在 21 岁时获得了医学博士学位。他在朝鲜战争中短暂行医,然后进入学术界。

2。培根,女(1561-1626)。在:弗朗西斯培根的作品。j 斯佩丁,RL 埃利斯,DD 希思,编辑。伦敦。1857 年(第 628 页)

3。科布,M. (2002 年)。《时间线:驱除动物精神:简·斯瓦默达姆论神经功能》。自然评论神经科学3(5):395–400。

4。赫胥黎和尼德格尔克(1954)。“活肌纤维的干涉显微术”。性质。(4412):971–973

5。马丁,G.R. (2017)。是什么驱动了鸟类的视觉?票据控制和掠食者探测使飞行黯然失色。神经科学前沿* 11 : 619。*

6。亥姆霍兹方程采用∇(f)=-k f,*的形式,对空间波传播和扩散等问题有广泛的应用。

7。亥姆霍兹,H. (1910)。生理光学论文。纽约:多佛

8。T49 周,王维明(1997)。快速眼动睡眠期间双眼眼球运动不协调。Exp Brain Res1997117(1):153–60。

9。斯塔克和谢尔曼,下午(1957)。合意瞳孔对光反射的伺服分析研究。 J .神经生理学 20 :17。

10。为了更好地近似,眼球运动可以被建模为二阶线性系统。这是偶然的,因为有更完整的数学理论可以用于分析。另一方面,斯塔克教授向我保证,“上帝把一切都设计得像二阶线性微分方程。”

11。富克斯,1967 年。猴子的扫视和平滑追踪眼球运动。 J .生理学191 ,第 609–631 页

12。罗宾逊,D.A. (1981)。控制系统分析在眼球运动神经生理学中的应用。安。修订版神经科学4:463–503

13。安德森,R.W .,凯勒,E.L .,甘地,新泽西州&达斯,S. (1998)。猴子上丘二维扫视相关群体活动。 J .神经生理学,80:798–817。

14。 Srivastava,a .、Ahmad,O.F .、Pacia,C.F .、Hallet,M. &伦古特区(2018)。迅速扫视和运动的关系。运动障碍杂志11(3)93–106。

为什么神经网络如此强大?

原文:https://towardsdatascience.com/why-are-neural-networks-so-powerful-bc308906696c?source=collection_archive---------16-----------------------

通用逼近定理

众所周知,神经网络非常强大,它们可以用于几乎任何统计学习问题,并取得很好的结果。但是你想过为什么会这样吗?为什么这种方法在大多数场景下比很多其他算法更强大?

和机器学习一样,这有精确的数学原因。简单来说,一个神经网络模型所描述的函数集合是非常庞大的。但是描述一组函数是什么意思呢?一组函数怎么可能很大?乍一看,这些概念似乎很难理解,但是它们可以被恰当地定义,从而解释为什么某些算法比其他算法更好。

作为函数逼近的机器学习

我们来抽象一下观点,公式化一下什么是机器学习问题。假设我们有了数据集

其中x⁽ᵏ⁾t5】为数据点, y ⁽ᵏ⁾ 为与该数据点相关的观测值。观察值y⁽ᵏ⁾t13】可以是一个实数,甚至是一个概率分布(在分类的情况下)。任务很简单,就是找到一个函数 f(x) ,其中 f(x ⁽ᵏ⁾ ) 约为 y ⁽ᵏ⁾ **

为此,我们预先确定一组参数化的函数,并选择最适合的参数配置。例如,线性回归使用函数族

作为参数函数族,以 ab 作为参数。

如果我们假设有一个真实的底层函数 g(x) 描述了 x ⁽ᵏ⁾和 y ⁽ᵏ⁾之间的关系,这个问题可以表述为一个函数逼近问题。这使我们进入了近似理论的美丽但非常技术性的领域。

近似理论入门

很可能你一生中遇到过几次指数函数。它的定义是

其中 e 是著名的欧拉数。这是一个超越函数,基本上就是说你不能用有限多次的加法和乘法来计算它的值。然而,当你把它输入计算器时,你仍然会得到一个值。这个值只是一个近似值,尽管它通常足以满足我们的目的。事实上,我们有

这是一个多项式,因此它的值可以显式计算。 n 越大,越接近真实值。

逼近论的中心问题是为这些问题提供一个数学框架。如果你有任何函数 g(x) 和一族从计算方面更容易处理的函数,你的目标是找到一个足够接近 g 的“简单”函数。本质上,近似理论寻找三个核心问题的答案。

  • 什么叫“足够近”?
  • 我可以(或应该)用哪一组函数来近似?
  • 从一个给定的近似函数族中,哪一个函数是最合适的?

如果这些听起来有点抽象,不要担心,因为接下来我们将研究神经网络的特殊情况。

作为函数逼近器的神经网络

所以,我们来重申一下问题。我们有一个函数 g(x) ,它描述了数据和观察值之间的关系。这并不确切,只是对某些值而言

其中 g(x ⁽ᵏ⁾ ) = y ⁽ᵏ⁾.我们的工作是找到一个 f(x)

  • 从数据中归纳知识,
  • 并且在计算上可行。

如果我们假设所有的数据点都在子集 X 中,也就是说

我们想要一个函数,其中数量上确界范数

越小越好。您可以通过绘制这些函数、给图形包围的区域着色并计算所述区域沿 y 轴的最大扩展来想象这个量。

即使我们不能评估任意值的 g(x) ,我们也应该始终致力于在这种更广泛的意义上近似它,而不是要求 f(x) 只适合已知的数据点 xₖ

所以,问题给出了。问题是,我们应该用哪组函数来近似?

单隐层神经网络

从数学上讲,具有单个隐藏层的神经网络被定义为

其中φ是非线性函数(称为激活函数),例如 sigmoid 函数

数值 x 对应的是数据,而 wᵢbᵢvᵢ 是参数。是函数族

足以逼近任何合理的函数?答案是响亮的是!

通用逼近定理

全盛时期的通用逼近定理:)资料来源:Cybenko,g .(1989)“sigmoid 函数叠加的逼近”控制、信号和系统的数学,2(4),303–314。

1989 年的一个著名结果,叫做普适逼近定理指出,只要激活函数是类 sigmoid 的,并且要逼近的函数是连续的,一个单隐层的神经网络就可以逼近到你想要的精度。(或者学习机器学习术语中的 it。)

不要担心确切的定理看起来很难,我会详细解释整个过程。(事实上,我故意跳过了像密集这样的概念,以使解释更清晰,尽管不那么精确。)

步骤一。假设要学习的函数是 g(x),连续。我们先固定一个小数字 ε 在函数周围画一个 ε 宽的条纹。 ε 越小,结果越好。

步骤二。(最难的部分。)找到表格的一个函数

完全在条纹内。该定理保证了这种F(x)的存在,因此这类函数被称为通用逼近器。这是神经网络令人敬畏的地方,赋予了它们真正的力量。

然而,有几个警告。例如,该定理没有提到 N,即隐藏层中神经元的数量。对于小的 ε ,这可能非常大,从计算的角度来看是不好的。我们想尽可能快地计算预测,计算一百亿项之和肯定不好玩。

第二个问题是,即使这个定理保证了一个好的逼近函数的存在,它也没有告诉我们如何找到它。虽然这可能令人惊讶,但这在数学中是非常典型的。我们有非常强大的工具来推理某些对象的存在,而不能够明确地构造它们。(有一个数学学派叫建构主义,拒绝泛逼近定理的原始证明之类的纯粹存在性证明。然而,这个问题是根深蒂固的。如果不接受非构造性的证明,我们甚至不能谈论无限集合上的函数。)

然而,最大的问题是,在实践中,我们永远不会完全知道底层功能,我们只知道我们观察到的:

有无数种可能的配置可以任意地很好地适合我们的数据。他们中的大多数都可怕地概括了新数据。你肯定知道这种现象:这是可怕的过度拟合。

权力越大,责任越大

事情是这样的。如果你有 N 个观察值,那么你可以找到一个完全符合你的观察值的 N-1 次多项式。这没什么大不了的,你甚至可以用拉格朗日插值显式写下这个多项式。然而,它不会推广到任何新的数据,事实上这将是可怕的。下图展示了当我们试图将一个大次数的多项式拟合到一个小数据集时会发生什么。

同样的现象也适用于神经网络。这是一个巨大的问题,而通用逼近定理没有给我们任何关于如何克服这个问题的提示。

一般来说,函数族越有表现力,就越容易过拟合。权力越大,责任越大。这被称为偏差-方差权衡。对于神经网络,有很多方法可以减轻这种影响,从 L1 正则化权重到减少层数。然而,由于神经网络的表达能力如此之强,这个问题总是在后台隐约出现,需要持续关注。

超越通用逼近定理

正如我所提到的,这个定理没有给出工具来为我们的神经网络找到一个参数配置。从实用的观点来看,这几乎和通用近似性质一样重要。几十年来,神经网络不受欢迎,因为缺乏有效的计算方法来拟合数据。有两个基本的进步,使它们的使用变得可行:反向传播和通用 GPU-s。有了这两个技术,训练大型神经网络就轻而易举了。你可以用你的笔记本训练最先进的模型,甚至不用流汗。自从通用逼近定理以来,我们已经走了这么远!

通常,这是标准深度学习课程的起点。由于其数学上的复杂性,神经网络的理论基础没有被涵盖。然而,通用逼近定理(及其证明中使用的工具)非常深刻地揭示了为什么神经网络如此强大,它甚至为工程新架构奠定了基础。毕竟谁说只允许我们组合 sigmoids 和线性函数?

如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!

为什么银行应该真正使用人工智能——到昨天

原文:https://towardsdatascience.com/why-banks-should-be-truly-using-ai-by-yesterday-8153e29f8b33?source=collection_archive---------47-----------------------

头埋在沙子里图像 1 归属

想象一下,你在南非好望角北部的丛林中,看着一只鸵鸟被几只老虎跟踪。鸵鸟意识到这种威胁的存在,并不担心,因为它知道该做什么:把头埋在沙子里,老虎就会离开。

这就是今天的零售银行,鸵鸟是一家零售银行,老虎是仅由移动人工智能驱动的挑战者银行(更不用说亚马逊了)。

根据商业内幕,40%的千禧一代根本不会去实体银行。大多数人实际上认为参观分行是荒谬的。零售银行业务模式显然与当今的经济、技术和消费者统计数据不同步。

已经受到累积的不良贷款(NPL)的创伤,手头不仅仅是数字化的问题,也不仅仅是在移动设备上提供包装为 Android 或 iOS 应用程序的网络银行服务。虽然面向消费者的数字银行不是什么新鲜事,包括 ATM 和传统的网络银行服务,但人工智能驱动的银行业下一步的时间已经到来,这确实是一大步。

做什么?

从本质上讲,我们现在处于一个不同的现实中,数字化与人工智能相结合,需要作为一种新范式的变革性实施工具来迫切解决。LinkedIn 上关于英国十大初创公司的帖子反映了这一现实,其中提到的 60%的公司都属于金融科技挑战者领域。

那么,该怎么办呢?不能指望银行高层领导和/或董事会成员了解人工智能以及在何处、如何以及何时利用人工智能。然而,最终他们会做出决定,不做任何事情的风险远远大于做一些事情的风险。

提议的方法

让我们概述一个可行的方法。首先,需要建立一个组织结构单位,直接向高层(首席执行官和/或董事会)报告。作为一个由技术人工智能“远见者”又名首席人工智能官(CAIO)领导的人工智能任务组,这位领导者需要是一个具有真实世界实际人工智能经验的实干家(不一定专注于银行/金融)。

CAIO 的领导者然后将创建一个小团队,每个团队成员将解决一个特定的人工智能技术,这将需要 web、移动和 IOT 实施和分发渠道(即“人工智能优先”)。这种组织结构本身将反映银行新的人工智能战略。

因此,让我们从好处、实施细节和现实世界的例子方面来看一下目标领域的初步建议组合以及相应的每个团队成员的组合。

团队成员 1

作品集:对话式人工智能

目标:打造银行的基础数字助手

描述:问题的核心,银行的数字助理将最终占据中心舞台。它将深深植根于人工智能推理和自然语言理解和生成。它需要能够处理:

*关于财务管理的复杂问题
*客户支持互动
*教授客户基础知识(比如如何幽默地开一个账户)
*在物理分支机构进行老式回访的机器人技术

一个例子是卡斯托

团队成员 2

投资组合:人工智能 CRM /个性化

目标:建议和提供定制的产品和服务,通过创建客户角色来提供个人和个人的客户体验,销售总是更接近。

描述:除了余额、投资和贷款之外,银行还持有大量的客户数据。此外,通过在线和离线购买、网站访问、通过信息亭的互动、电子邮件交流和移动应用程序,可以获得与实时客户行为相关的大数据。

这些数据是一座金矿,通过基于预测性机器学习的人工智能算法来挖掘,这些算法可以识别客户性别、收入、年龄、购买行为、首选服务位置和交互模式之间的相关性。

所有上述内容都可以输入到企业人工智能 CRM 中,然后该 CRM 将作为一个中心参考点,从该参考点还可以:

*个性化内容(关注微元素)
*根据之前的互动,使用新的高度相关的广告重新定位客户
*实时事件个性化,即如果购物车被放弃该怎么办
*将情感分析应用于产品客户评论并相应地重新定位
*客户细分以实现个性化定位

团队成员 3

投资组合:机器学习:不良贷款/风险管理

目的:评估账户的风险状况,识别潜在的不良贷款

描述:不良贷款(NPL)是一种违约贷款,即借款人没有在规定的期限内支付预定的款项。
AI/ML 算法可以自动为客户分配 NPL 风险评分,作为反映整体风险、活动异常和高风险行为的总评分的一部分,以动态预测潜在的 NPL。

识别风险后,可以采取预防措施,例如:

*增加风险评估的频率
*增加担保品
*要求提前还款

总体而言,不良贷款预测可以降低风险、降低准备金并提高盈利能力,使该团队成员的工作可以直接量化为底线利润。

团队成员 4

产品组合:生物识别

目标:人工智能驱动的认证/安全

描述:人工智能生物识别技术,如面部和语音识别,利用大量数据来微调身份验证。安全隐患是巨大的,不言而喻的,但这项技术也可以帮助客户服务。

例如, Natwest 利用自拍在几分钟内开立活期账户。新客户提交自己的照片和带照片的身份证。通过人工智能驱动的实时生物识别检查,两张图像进行比较,以验证身份。这大大提高了效率,减少了欺诈性申请。

团队成员 5

投资组合:银行即服务

目标:创建一个使用银行 IT 系统的第三方开发者和创新者社区

描述:亚马逊和谷歌大概是(!)考虑在某个时候成为银行。规避这一问题的一个方法是允许第三方安全地访问账户数据(在获得同意的情况下),以增强银行提供的服务,使小型合格的利基供应商能够进行富有想象力的创新。这可以通过建立一个平台来实现,通过该平台来开发和提供银行批准的网络、移动和 IOT 应用程序,就像 iStore(苹果)和 Play Store(谷歌)一样。通过这个数字生态系统,银行客户将能够将金融服务集成到他们的产品中,并构建他们自己的可扩展银行产品。

团队成员 6

投资组合:交易/财富管理

目标:实现算法交易

描述:根据实时更新的短期股票价格预测,实现基于机器学习的潜在股票交易选择。人工智能监控成交量峰值、移动平均线突破、趋势和支撑/阻力突破以及极端的日内波动。基于交易的实时预测。

结论

技术,尤其是人工智能,正在撼动银行业。对于任何想要在 2030 年左右生存的零售银行来说,除了规划和实施一条拥抱和最大化人工智能技术优势的前进道路,别无选择。

外卖

使用人工智能技术作为实施工具来全面改造银行可以通过创建人工智能战略任务组来完成,该任务组将开发和实施人工智能战略,包括与使用最适合的可用人工智能技术相关的具体行动。

其目标是大幅提高特定业务领域的绩效和效率,如客户互动和支持、贷款、证券和投资。

在所有实施领域,开发的软件将与其他领域相互作用,形成人工智能引擎,该引擎本身将与其他遗留银行系统相互作用,从而形成新生银行业务的主干。

关于作者

https://www.fortuitapps.com】最初发表于

BatchNorm 有效的真正原因

原文:https://towardsdatascience.com/why-batchnorm-works-518bb004bc58?source=collection_archive---------30-----------------------

了解“损失情况”如何随着批量标准化而变化

来源

归一化技术是我们在分析任何形式的数据时拥有的一些伟大的工具,调整分布的均值和方差的简单操作导致深度神经网络中各种归一化技术的灾难性成功,其中之一是著名的批量归一化 Ioffe 等人。

每个人都听说过:

Ioffe 等人的算法-1。

目前,对 BatchNorm 成功的最广泛接受的解释,以及其最初的动机,与所谓的内部协变量转移(ICS)有关。非正式地,ICS 指的是由对先前层的更新引起的层输入分布的变化。据推测,这种持续的变化会对训练产生负面影响。BatchNorm 的目标是减少 ICS,从而补救这种影响。

在易勒雅斯等人的文章中,作者提出了一个观点,即批处理范式的性能增益和内部协变量移位的减少之间似乎没有任何联系。或者说这种联系充其量也是脆弱的。事实上,他们发现在某种意义上,BatchNorm 甚至可能不会减少内部协变量偏移,并证明在自然条件下,损失和梯度的 Lipschitzness(基本上是损失表面及其梯度的平滑度)在具有 BatchNorm 的模型中得到改善,因此证明 BatchNorm 以一种基本的方式影响网络训练:它使相应的优化问题的前景明显更加平滑。

这里,我们将分析误差空间权重为二次的模型的误差表面的二阶属性,然后重新对表面进行参数化,以便根据输入协方差矩阵的特征谱进行分析,并由此使用结果来推断为什么批处理范数可能会提高收敛速度,以及为什么它会使网络在初始化时保持不变。

对于在权重空间 {W} 中搜索误差函数 E(W) 最小的最优值 W* 的各种学习算法,基于梯度下降,它们的性质由 E(W) 曲面的二阶性质控制。

对于这种分析,我将集中于神经网络的单层,其中 X(N x 1) 作为这一层的输入向量,并且 W(1 x N) 是这一层的权重,并且 Y(1 x 1) 是这一层的输出,为了方便考虑均方误差:

p 是数据集的大小

很明显,误差曲面在权重上是二次的,因此将其重写为:

其中 R 定义为:

其中 Xui 是第 u 个输入向量(Nx1)的第 I 个分量,因此 R 显然是第 N 个 x N 个输入协方差矩阵。

Q 是一个 N 维向量,定义为:

c 只是一个常数:

现在 E(W) w.r.t. W 的梯度是 J(E) = RW-Q 而二阶导数的海森矩阵显然是 H = R

最小化 E(W) 的解空间 W* 显然包含梯度为零的条目,因此该解空间是线性方程解的子空间

(来自 J(E) =0)

现在,这种 RW=Q 是线性代数( Ax=b )中常见的一类问题,工程应用中的很多问题都可以用这种格式公式化,然后分析 A 的本征谱来解决。

由于解空间 W* 是 RW=Q 的解的子空间,现在如果 R 的所有列都是独立的,因此 R 具有满秩,很明显,这个子空间塌陷到一个点(唯一解)。

现在这一切都很好,但是我们为什么要这样做?

当损失曲面的权重为二次时r的特征向量定义了 E(W) 的主轴(这可以从“噪声和振动的主动控制(Colin Hansen,Scott Snyder)】section-6.5.2)⁵
中研究,我们可以通过下式计算曲面在任一单位向量 u 方向的二阶导数:

选择H (=R)的特征向量,我们可以得到 E(W) 在主轴方向的二阶导数,从矩阵对角化可知,将是 H (= R ) 的特征值。

我们已经用 R 和我们的 Hessian = R 表示了我们的梯度,并且由于我们可以用 R 定义 E(W) 的主轴,我们将在包含我们的误差表面的空间上进行 2 个变换:

  • 通过基本平移,以解决点为中心

  • 旋转,我们要把这个 V* 旋转到 *E(W)* 的主轴上,这样就可以分析主轴方向上的黑森。现在,如果我们将一个矩阵乘以一个向量,就会产生一个空间变换(从旋转、平移到将空间压缩成一个点)。为了实现旋转,**我们将把 *V 乘以特征向量矩阵 R* ,包含相互正交的归一化特征向量 R ,将这个矩阵命名为*(通用约定),显然这个矩阵将是正交的,并且列的维数将与 W 相同,所以:**

完整的转变将是:

基于此,我们的方程 E(W) 被重新参数化为:

其中 D 正好是对角线上含有 R 特征值的对角矩阵(也叫矩阵对角化) E_o 正好是 E(W)。*

记住 V 还是一个矢量,但是VV的每一个分量都代表了误差面对应的主轴。****

然后,

λ_j 是 D 的第 j 个对角元素,也是 R(=H)的第 j 个特征向量的特征值

𝛿(j,k)=1 代表 j=k,其他地方代表 0

显然,输入协方差矩阵的特征值给出了误差表面的二阶导数。

将这两个结果放在一个矩阵中给出了作为对角特征矩阵的 HessianD,(H = D**),因此**

由于梯度下降的基本权重更新规则是:
= V(k+1)——η
J(E(V))*
V(k+1)= V(k)——η** D * V(k)***

V(k) 是第 k 个时间步长 V 的值。

VN x 1 向量,这导致 N 解耦方程(由于 V 中的每个分量都是正交的),并且由于 V=U(W-W) ,对于最优解 V 衰减到零,因此每个分量沿着主方向 as 演化*

Vj(0) 是初始化时 V 的第 j 个分量

现在,为了使 V j 在多个时间步长(k > 0)上收敛到零,具有正幂的项的幅度必须小于 1,因此

| 1-ηλ_ j|<1
0<
η<2/λ_ j***

由于这只是指数衰减的公式,V j 在特征时间内衰减到零

  • 对于 η 在(1/ λ_j ,2/λ_ j)
    1-η
    λ_ j*范围内为负,因此收敛为振荡行为,步长较大**
  • 对于范围(0,1/ λ_j )内的 η
    步长较小,收敛需要较高的 k 值(时间步长)
  • 那么,如果 η = 1/ λ_j ,如果这样的选择是可能的,那么在单次迭代中就达到了收敛。

现在,如果所有特征值相等,λ_ j =λ,对于所有 1 < =j < =N ,由于 H=D收敛在单个步骤中达到,其中:

η= 1/λ****

****但是这种高度对称的情况很少发生。从几何学上讲,如果误差曲面 E(W) 的横截面是 N 维空间 {W} 中的超球(由环绕主分量形成的超球,这些特征值相等,它们被同等地拉伸或压扁,因此是超球),就会发生这种情况,但这是非常罕见的。 E(W) 截面为椭圆形,沿不同主方向有不同的特征值。

根据上述等式,η必须在(0,1/ λ_mxλ_mx 之间选择,λ_mx 是输入协方差矩阵的最大特征值,最慢的时间常数为

最小步长η= 1/λ_ max给出:

沿非零曲率最小的主方向衰减(基本上是非零特征值最小的特征向量,即 λ_mn )。

这清楚地表明对于权重为二次的误差曲面,学习动态由 Hessian 的特征值分布控制。

既然我们知道这个,为什么停在这里,让我们在这里检查特征谱。

假设输入分量,即【Xi】对于所有 1 < =i < =N 是独立的,并且每个分量是从均值【m和方差 v 中提取的(为了方便起见,考虑一个输入的所有分量在数值上具有相同的均值和方差)。我们将 p 作为数据大小,将 N 作为向量维数,假设α*= p/N(量化训练集的比率),得到本征谱如下(本征谱的完整推导可以在 I. Kanter、Yann Lecun 和 A. Solla 1991 的联合著作中找到)*

来自 LeCun 等人的等式-13。

在哪里

**

对于 λ ∈ ( λ -, λ +),谱是连续的,那么在 pα 趋于无穷大的极限内, λ- =λ+ = v

  • 现在应该清楚的是,如果 p < N ,则 R 的独立列的数量将等于p .R 不会是满秩的,因此 N、中总共有( N-p 个特征值将为零,从而导致对于所有零特征值(基本上是谱)的权重为 1-α的δ函数贡献
  • 当输入有偏置,即 m≠0 时,会出现一个大的 N 阶孤立特征值,称为 λ _ N 。这一点可以清楚地理解,考虑
    的结构 R
    p→极限,
    1。所有非对角元素都等于 m (两者均值的乘积)
    2。所有对角线元素都等于 v+m
    **

因此,特征向量U _ N =(1…1)对应于特征值**

R * U _ N =(Nm+v) U _ N***

和其他所有 N-1 特征值等于 v ,(怎么?满足 trace(R) =特征值之和= N(m + v) 的事实),此外,谱的连续部分在λ- = λ+= v 处折叠成δ函数,作为 p - > inf,并且只有一个值(= λ_ N )大于 λ +。

如果 m =0,即无偏置的居中输入,显著降低 λ _ N ,则 λ _ N 的最大部分被消除,并且由于 λ _ N 最大(λ_ max,降低其值会影响 t_mx

因此,很明显,有偏输入会产生较大的特征值,并导致收敛缓慢,为了消除这种情况,可以将输入居中,
或者,根据我们之前的等式,另一种处理方法是使用与 N (被观察神经元的输入数量)成反比的个体学习率。

所有这一切清楚地证明了以下几点

  • 对于损失面,梯度依赖于 i/p 协方差矩阵和权重,但 Hessian 在给定主轴方向(这里是第 I 列 U )是常数,只依赖于 i/p 协方差矩阵
  • 偏置输入减缓收敛
  • 输入协方差矩阵的大特征值(与其他特征值相比很大,但不是绝对大)也会减缓收敛
  • 误差曲面的 Hessian 特征值谱受输入分量分布方差的控制
  • 通过很好地控制协方差矩阵的特征值,可以使用大的学习率

就批次而言:

  • 我们知道“相对”大的特征值(基本上,外围特征值)损害了收敛性,并且批处理范数抑制了这些异常值(基于戈尔巴尼和 al.⁴的特征谱图),指出了 BN 工作的原因之一

图 6 来自古尔巴尼等人 al.⁴,y 轴显示 λ_mx / λ_mn 其中 λ_mxλ_mn 分别是 Hessian 的最大和最小特征值。

戈尔巴尼和 al.⁴的图 7 显示了批次规范和无批次规范的损失表面的海森特征谱

  • 在这个博客的第一部分,我们有一个分析的原因,为什么“相对”大的特征值伤害,戈尔巴尼和 al.⁴显示在梯度能量方面。通过分析(图表和附录 E),他们表明,如果没有批次范数,在时间步长 t 计算的“随机”梯度的方向与朝向最优值的方向不一致,相反,它主要位于主特征向量的子空间中,并且主要与朝向最优值的方向正交。但是在批量范数之后,梯度方向几乎与主特征向量
    正交,并且更好地对准最优点的方向。因为,当梯度在主特征向量的方向上对齐时,只有那些分量得到训练,而其他分量(具有低特征值)需要时间来训练(因为梯度主要朝向其他方向,主特征向量的方向),并且梯度在具有低特征值的方向上的投影很小,因此收敛很慢。即使在上面这里,正如我们计算的
    t =(1/
    ηλ),对于给定的η,low λ 需要更多的时间,现在这个 λ 基本上是在给定特征向量方向上的二阶导数,小意味着更平坦的区域。并且,这些具有小λ的方向贡献了几乎 50%的 Hessian 特征值的 L1 能量***

基本上,这些小特征值对损耗很重要,最佳路径由这些方向组成。

图 11 来自戈尔巴尼和 al.⁴,y 轴是损失梯度在最主要特征值方向上的投影的范数与损失梯度的范数之比,显然,在非 batchnorm 模型中,损失梯度主要在最主要特征值的方向上

  • 上一点是关于 Hessian 特征值的 L1 能量(此处为 λ _i),现在讨论梯度的能量(梯度能量基本上由梯度向量的协方差的特征谱描述),因为小的特征值大约包括 Hessian 特征值的 50%的 L1 能量,几乎所有的梯度能量都集中在异常值所跨越的子空间中。所以基本上,特征值小的那些组成了梯度能量的一小部分,但是根据第二点,它们很重要,所以这使得整个收敛过程很慢。**

戈尔巴尼和 al.⁴的图 12,y 轴是损耗梯度向量与损耗向量本身的内积,很明显,在非批处理网络中,“随机”损耗梯度与实际损耗方向正交

  • 如前所述,收敛完全取决于这些特征值,相对异常值的缺失允许使用基于【λ_ MX】的微调学习速率,因此使得网络对于初始化不变。**
  • 降低协方差矩阵的特征值(通过保持协方差矩阵接近单位矩阵,例如在 BatchNorm 中)允许更高的学习速率,如上所示
  • 批处理范数据说使所有权重的训练以相等的速率发生,它的发生是因为那些特征值不具有任何离群值,如以上所述,所有参数的相同学习速率((=1/ λ_mx ))将给出相同的收敛速率。
  • 批范数也可以被视为重新参数化误差表面,使其在每个方向上更平滑

[1]:“批量归一化:通过减少内部协变量偏移加速深度网络训练”(https://arxiv.org/pdf/1502.03167.pdf)

[2]:“批处理规范化如何帮助优化?”(https://arxiv.org/pdf/1805.11604.pdf)

[3]:“协方差矩阵的特征值:在神经网络学习中的应用”(http://yann . le Cun . com/exdb/publis/pdf/le Cun-kanter-solla-91 . pdf)

[4]:“基于 Hessian 特征值密度的神经网络优化研究”(https://arxiv.org/pdf/1901.10159.pdf)

[5]:“噪声和振动的主动控制(柯林·汉森,斯科特·斯奈德)(https://books.google.co.in/books?id=COfqBgAAQBAJ&pg = pa 403&lpg = pa 403&dq = of+特征向量+of+输入+相关性+矩阵+定义+of+误差+曲面&source = bl&ots = jksc 91 oc _ 1&SIG = acfu 3u 2 xd 6 e 2 ar 4 qziymyqyxsgzwlhmd

为什么选择大数据?

原文:https://towardsdatascience.com/why-big-data-bf0d65933782?source=collection_archive---------21-----------------------

术语大数据可以描述为大量结构化和非结构化数据。大数据这个术语相当新。甚至在术语出现之前,公司已经使用电子表格、反馈表格和图表处理了几十年的大规模数据集,以跟踪客户的见解和趋势。如今唯一的不同是,我们有合适的工具和技术专家来获得大数据的好处。

是什么引发了大数据这一术语…

大约在 2005 年,当社交媒体开始流行起来并且大约在 2010 年有 50 亿部手机在使用的时候,人们意识到每天产生多少数据。我们可以肯定今天会有更多的数据产生,希望你能理解。脸书、Twitter、LinkedIn 等社交媒体平台上的数十亿社交媒体用户每天产生大约 250 万 TB 的数据。手机,我们安装在手机上的应用程序也是大数据的主要来源,这些大数据每时每刻都在为我们的核心做出贡献。谷歌现在平均每秒处理超过 40,000 次搜索(每天 35 亿次搜索)!。它是否让你想到上个月,去年你在谷歌搜索了多少次?所有这些都导致了对严重增长的预测。每年全球数据的 40%和全球 IT 支出的 5%。如此多的数据确实推动了数据科学领域开始保留其自身和当今的商业世界。

那么是什么让大数据有价值呢?

正是应用以及大数据如何服务于人类需求,让大数据变得有价值。大数据允许我们建立更好的模型,从而产生更高精度的结果。我们正在目睹公司如何营销自己和销售产品的巨大创新方法。如何管理人力资源?如何应对灾难?和许多其他应用,基于证据的数据正被用来影响决策。

举个例子,你们可能都在 YouTube 上有过这样的经历,他们保存了我们已经观看的视频的详细信息,并根据我们使用 YouTube 的兴趣和行为来展示下一个要观看的视频。这缩小了我们必须经历的巨大选择范围。因此,正如 YouTube 一样,其他企业也可以利用技术,根据实际消费者发出的信号,做出更明智的决策。大数据使商业人士能够听到每个消费者的声音,而不是普通消费者的声音。

你可能已经注意到,在使用脸书的时候,出现在你面前的广告是基于你过去通过浏览器搜索的内容,以及你在帖子上分享和评论中讨论的内容。这就是惊人的大数据的工作方式。现在,许多公司,包括沃尔玛、塔吉特百货和亚马逊,都使用这些信息来个性化他们与客户的沟通,这反过来又能更好地满足消费者的期望,让客户更满意。也就是说,大数据实现了个性化营销。消费者通过 Twitter 或脸书等社交媒体网站产生大量可公开获取的数据。通过这些数据,这些公司能够看到他们的购买历史,他们搜索了什么,他们看了什么,他们去过哪里,以及他们通过喜欢和分享对什么感兴趣。

因此,通过检查大规模和各种数据集,即所谓的大数据,可以发现隐藏模式等信息。未知的相关性、市场趋势和客户偏好,可以帮助组织做出明智的业务决策。这将导致组织更聪明的业务活动,更有效的运作,更满意的消费者和更高的利润。

Thomas H.Davenport 在他的报告“大公司的大数据”中提到,公司通过以下方式从大数据中获得价值:

大数据分析给公司带来的好处-按作者分类的图表

当存储大规模数据时,使用 Hadoop 和基于云的分析公司等大数据技术可以减少他们微不足道的成本。此外,他们可以找到更有效的方式来开展业务。借助 Hadoop 和内存分析的速度以及识别新数据源的能力,企业可以立即处理分析信息,这有助于企业根据学习结果立即做出决策。举例来说,如果客户改变了他们的偏好,服务很可能会变得不那么有效。组织可以利用大数据做的另一件事是开发基于数据的新产品和服务。大多数在线公司采用这种方法,因为他们显然需要使用基于数据的产品和服务。LinkedIn 就是一个例子,他们正在使用大数据和数据科学家开发一个庞大的产品和功能列表,包括你可能认识的人、你可能喜欢的群体、乔布斯可能感兴趣、谁查看了我的个人资料等。这些产品可以吸引数百万新客户加入 LinkedIn。最后,大数据业务决策还可能涉及其他分析领域,如供应链、风险管理或定价。让大数据决策变得更智能的原因是,使用外部数据源来改进分析。例如,在供应链决策中,公司越来越多地使用外部数据来捕捉和衡量供应链风险。

大数据的应用

大数据具有巨大的潜力,可以在许多应用领域实现更高精度的模型。这些高度精确的模型正在影响和改变商业。这里我只举几个例子。我们都熟悉的一个领域是推荐引擎。这些引擎利用用户模式和产品特性来预测最佳匹配产品,以丰富用户体验。如果你曾经在亚马逊购物,你知道你会得到基于你以前的购买和搜索的推荐。同样,网飞会根据你的收视历史推荐你观看新的节目。

公司使用的另一种技术是情绪分析,或者简单地说,分析对事件和产品的感受。举个例子,在亚马逊,我可以在购买前阅读评论,也可以写评论。通过这种方式,可以通知其他客户。最重要的是,亚马逊可以跟踪特定产品的产品评论和趋势。例如,他们可以判断一个产品评论是正面的还是负面的。由于这些评论是用英语或其他语言写的,它使用了一种叫做的自然语言处理技术,以及其他文本分析方法。同样,亚马逊可以分析个人或公众对这种产品的总体看法。这就是为什么情感分析经常被称为观点挖掘。每当重大事件发生时,比如选举,新闻频道就充斥着 Twitter feed 分析。品牌利用情感分析来了解顾客对其产品的态度,积极的、消极的、中立的。这很大程度上依赖于自然语言处理的使用。

移动设备无处不在,人们几乎总是随身携带手机。移动广告对企业来说是一个巨大的市场。平台利用移动设备中的传感器,如 GPS,并基于这种海量数据提供实时的基于位置的广告,提供折扣。这一次,让我们想象一下,我买了一栋新房子,碰巧在家得宝几英里范围内。给我发送关于油漆、货架和其他与新家相关的购买的移动优惠券会让我想起家得宝(最大的家装零售商之一)。我很有可能会去家得宝。

每个企业都想了解他们的消费者的集体行为,以捕捉不断变化的景观。一些大数据产品通过开发模型来捕捉用户行为,并允许企业为其产品锁定正确的受众,从而实现这一点。或者为未知领域开发新产品。考虑这个例子。在对他们工作日的销售进行分析后,航空公司可能会注意到他们上午的航班总是售完,而下午的航班则低于容量。该公司可能会根据这样的分析决定增加更多的早间航班。请注意,他们不是使用个人消费者的选择,而是使用所有购买的航班,而不考虑是谁购买的。然而,他们可能会决定更密切地关注这些消费者的人口统计,利用大数据在其他地理区域添加类似的航班。

随着基因组测序技术的快速发展,生命科学行业正在经历生物医学大数据的巨大吸引力。这些生物医学数据正被许多应用程序用于研究和个性化医疗。在个性化医疗之前,大多数没有特定癌症类型和阶段的患者接受相同的治疗,这种治疗对一些人来说比其他人更有效。这一领域的研究使分析大规模数据的方法得以发展,以开发适合每个人的解决方案,从而假设更有效。患有癌症的人现在仍然可以接受标准的治疗计划,例如手术切除肿瘤。然而,医生也可以推荐一些个性化的癌症治疗方法。与许多其他领域一样,生物医学大数据应用的一大挑战是我们如何整合多种类型的数据源,以进一步深入了解问题。

大数据的另一个应用来自植入智能城市的大量传感器的互联网络。通过实时分析传感器生成的数据,城市可以为居民提供更好的服务质量。它有助于改善日常生活,例如更有效地管理交通流量或最大限度地节约能源。

总结一下,大数据出现的时间并不长,但是这些属性把我们带到了一个数据时代。跨行业的大型组织正在加入这种数据经济。大多数公司不是将传统数据和大数据分开,而是将它们结合起来,形成一个新的综合体。最后,重要的是要记住,大数据的主要价值不是来自原始形式,而是来自对数据的处理和分析,以及从分析中得出的见解、产品和服务。

本文的动机来自加州大学圣地亚哥分校的 Coursera 课程系列“大数据专业化”。如果有什么要添加或修改的,欢迎在下面评论。

为什么大数据需要小数据

原文:https://towardsdatascience.com/why-big-data-needs-small-data-a312aafcdad8?source=collection_archive---------34-----------------------

我们现在可以无与伦比地访问大量自动生成和收集的数据,这些数据代表了传统调查方法几乎不可能复制的样本规模。人们兴奋地告诉我们,许多重大的股权问题,特别是代表权问题,将成为过去,因为我们可以利用这些庞大的数据集。

在 We All Count,我们同意大数据是一种宝贵的资源,但我们认为大数据无法解决一些非常重要的问题。我们认为,大数据真正令人兴奋的是能够将大数据集的效率和能力与小的精选数据样本的意图结合起来。

什么是大数据?

“大数据”这个术语有很多不同的定义。美国人口普查是大数据吗?这是一个庞大而全面的数据集。大型国际数据集是否合并自各种来源,如联合国或世界银行数据集、大数据?中型手机应用程序的实时数据是大数据吗,因为它有很多数据点?

出于我们的目的,我们将把大数据定义为:真正庞大的数据集——以兆字节而非千兆字节衡量——包含自动生成的数据点,如在线行为、购买、居住位置、“喜欢”、搜索等。想想谷歌,脸书,亚马逊。想想大通银行,万事达卡,沃尔玛。想想优步,美国电话电报公司,网飞。

这些数据集对我们的世界有着巨大的破坏性影响。它们是工业革命规模上的可能性的转变。他们也有一些重大的股权问题。

大数据力量

在数据科学中,给定分析的统计强度通常受到样本量的限制或支持。如果您想要找到关于整个人口的问题的答案,您需要获得关于该人口的统计相关百分比的数据。大样本本身就很昂贵,因此很难获得大量人群的答案。现代统计学的大部分重点是发现和改进统计方法,以实现高度的统计可靠性。这项研究还证实,样品的质量与其数量同等重要。

假设您想了解您所在城镇的人们更喜欢在沃尔玛购物还是在线购物。同样的费用,你可以在你的城镇随机抽取 100 人进行调查,或者你可以在沃尔玛停车场露营,询问 1000 名受访者。你可以清楚地看到,简单地增加样本量而不考虑公平的代表会极大地扭曲你的结果。

随着大数据的出现,我们突然有了大量的样本。大数据不是使用整个人口的一小部分,而是为我们提供人口的大量切片作为样本。例如,一项关于总统选举的全国盖洛普民意测验可能有 1500 名受访者,(请记住,这些受访者是经过精心挑选的,用于解释这些结果的统计方法非常强大),而脸书有大约 2 . 44 亿美国人的实时数据。这是一个超过 10 万倍的样本。

你可以通过如此巨大的样本量获得的统计优势,再加上大量数据的最新性质,可以让我们感觉我们可以以近乎预言的确定性来回答统计问题。较小的公司、地方政府和非政府组织非常渴望利用大数据的力量,这是理所当然的,因为它可以为政策决策、影响研究和有效性提供令人难以置信的洞察力。棘手的是,大数据总是由具有特定目的和特定授权的收集者收集的。那个任务十有八九是为了赚钱

由于大数据的规模及其对大多数股权问题的不人道的冷漠,大数据粉丝将其视为股权问题的银弹。亚马逊的数据收集算法正在进行调整,以实现利润最大化,而不是针对某个种族或性别的销售最大化。如果沃尔玛发现它的数据收集过程忽略了所有潜在的女性顾客,它会立即改变。同样,对于一个可能包括 30%的美国公民的数据集,很容易感觉样本量如此之大,以至于它必须至少包括人口中所有类型的人的一些代表。

大数据和股权的两个问题

亚马逊生成关于亚马逊客户的数据。手机应用程序会生成拥有智能手机的人的数据。优步有乘坐优步的人的数据。与精心制作的传统样本相比,大数据有一个固有的表示问题:它自动不包括它不关心的人。

此外,由于样本规模如此之大,大数据集中了最多产的数据提供商的影响。这意味着,如果你在亚马逊上购物很多,并在优步乘坐很多次,你的数据会比那些只有资源偶尔或从不做这些事情的人被计算在内。

因此表示权重是大数据需要克服的两个挑战。企业有赚钱的使命,所以这对他们来说没什么,但那些同样关心寻找解决方案的人如何利用这些数据呢?

两全其美

让我们假设你是多伦多市的地方政府。你想知道在哪里扩建你的地铁系统。对大多数多伦多人来说,什么样的新地点最有意义?你的“刷卡”输入系统有一个非常大的数据集,所以你可以看到地铁、电车和公交车上人们的各种数据。您还希望使用优步的海量数据集来补充您的信息:这将允许您查看大量的市民样本,以及他们在哪里使用除公交以外的其他交通方式。

你知道你的两个大数据集并不代表每个人,你没有关于既不乘坐公交也不乘坐优步的人的信息,比如司机、行人或负担不起这两种选择的人。您也知道这些数据集集中了最频繁用户的影响,并且必须确保您在统计上考虑到这一点。你的预算有限,你可以把它花在一项昂贵但严格的调查上,这项调查具有良好的代表性,但样本量较小,或者你可以用这笔钱访问优步的大规模和具有统计意义的数据集,即使有一些股权问题,你可能会得到一个更坚定的答案。

或者你可以利用两个的力量。大数据提供的是惊人的效率。没错,运行收集、存储和分析如此海量数据的大型系统是昂贵的,但每个数据点的成本比传统调查方法便宜许多数量级。这些节省可用于补充大型数据集,并使用其他统计方法填补代表性缺口。我们可以用省下来的钱进行一次更小规模、更有针对性的调查,专门从我们的大数据不代表的人那里获得答案。

我们可以使用交通数据,优步数据以更有针对性的方式进行我们自己的研究,以确保我们为所有利益相关者做出最公平的决定,而不忽视大型数据集的预测或权威力量。今天忽视大数据就像忽视蒸汽机而偏爱马车一样,功率和效率的差异是无可争议的。另一方面,假设大数据将自动解决公平问题,而它并没有被设计成这样,这是一厢情愿的想法。通过关注公平,并利用严格的统计方法来充实和重新衡量大数据,我们可以两全其美。

原载于 2020 年 1 月 10 日【https://weallcount.com】

“我们都算” 项目分享例子,构建工具,并提供培训和教育,旨在帮助更好地理解数据,以便我们可以使数据对每个人更加透明和公平。因为你做数学题的时候,我们都算。

为什么生日蛋糕意味着饼状图永不消亡

原文:https://towardsdatascience.com/why-birthday-cakes-mean-that-the-pie-chart-will-never-die-e128e390017?source=collection_archive---------33-----------------------

数据可视化大师强烈反对饼图,但大众永远不会被说服——也不应该被说服。

图片由露丝·布莱克在 iStockphoto 上拍摄

在那些从事数据可视化工作的人当中,表达他们对饼状图的厌恶几乎是一种通过仪式,甚至可能被视为一种职业责任,人们会看到他们发出严厉警告,要求他们不惜一切代价避免使用饼状图。我不相信。事实上,我的演示文稿和仪表盘都包含它们,我还在培训课程中教授其他人构建它们。我是一个叛逆者,一个实用主义者,还是饼状图是“邪恶的”这一信息存在根本性的错误?

为什么所有的仇恨?

《数据即圣经》“量化信息的可视化展示”的作者爱德华·塔夫特曾被《纽约时报》称为“数据的达芬奇”,他曾说:

“唯一比饼图更糟糕的是其中的几个”——爱德华·塔夫特

持这种观点的不止他一个人。由数据可视化领导者撰写的无数书籍、文章和博客文章用同样充满激情的标题宣传相同的信息。看看科尔·努斯鲍默·克纳弗里克的《死亡到饼状图》和斯蒂芬·诺的《把馅饼留到甜点》。

他们的论点是,人类的大脑并不具备测量角度的能力(这是构建饼图的基础)。

图片由 LibreTexts 数学库

我们的大脑旨在快速处理信息并赋予其意义,但它用于处理信息的属性类型是相似性、接近性和封闭性。它们被称为前注意属性或感知的格式塔法则,Elijah Meeks 写了一系列关于这些如何应用于数据可视化的文章——点击这里查看。有 7 个属性,但角度不在其中。

正是这一点促使数据记者兼 Insider 数据高级编辑 Walter Hickey 在他的一篇博客文章中这样写道:

“饼图无疑是数据可视化历史上最糟糕的信息传达方式。”—沃尔特·希基

测量角度很难。测量和比较多个角度就更难了。我不否认这一点。这就是为什么我们在学校学会了使用量角器,也是为什么我们中没有人会考虑手工制作一个饼状图。

但是…

当你出生时,你的大脑不知道如何给字母、单词和句子赋予意义——你是被教导的(我假设你在这方面已经达到了相当不错的技能水平,否则你不会读这篇文章)。饼状图也是如此,尽管背景不同。

为什么我认为饼图很棒

从我们出生的那一刻起,我们的家庭就向我们强调庆祝我们和我们亲近的人的生日的重要性。庆祝活动的中心总是生日蛋糕。我们很快了解到切片的大小是一个重要的度量。小时候,数量总是胜于质量,所以快速识别并获得最大份额提供了竞争优势。同样重要的是,如果你有兄弟姐妹,确保我们得到的任何一份至少比我们兄弟姐妹的大。或者,如果你出生在一个控制狂的家庭,像我一样(我可能是最大的罪魁祸首),你会拿出尺子或量角器来确保每个人都得到完全相同大小的一块。

当面对以饼图形式呈现的数据时,这对我们未来的业务环境非常有利。只要切片大小明显不同,并且不太多(记住,我们的大脑一次只能保留大约 5 位信息),那么我们就可以很好地解释数据。

斯蒂芬·诺曾经说过:

“数据可视化是抽象信息的图形显示,有两个目的:理解和交流。”—斯蒂芬·诺

我相信这真的是争论的关键。呈现数据是为了向观众传达信息。诚然,作为一种呈现数据的方法,饼状图是我们大脑处理起来更复杂和更困难的方法之一,但就像人类的语言一样,我们从出生就开始练习,所以我们天生就理解这种类型的可视化。正是这种熟悉超越了格式塔法则,并将饼图提升为向商业受众传达数据的最有价值的图表类型之一(与条形图并列)。

(带上网络仇恨者和网络流氓……)

我不是叛逆者,我接受饼图的内在缺陷,但我也是一个相信观察胜过理论的科学家。在我 20 年展示数据和教授数据可视化的经验中,听众更难理解认知上更简单的饼状图类型的替代品,如树状图华夫图(尽管我很喜欢它们)。条形图和饼图是所有图表类型中默认的和最多产的,这并不是偶然的。

当精度是关键时,选择条形图——它在比较数值时总是做得更好,但是当你试图制作的数据和点允许时,请随意使用饼图。

这并不是说我提倡饼状图或其表亲甜甜圈图的自由支配。让我对你的数据失去兴趣的最简单的方法就是展示一个 3D 的、爆炸式的饼状图,但那完全是另一回事了。注意良好的信息设计是至关重要的——图表的所有元素都必须支持对受众信息的有效传达。

图片由各种通过谷歌

图片由各种通过谷歌

设计你的图表,不管它是什么类型,最大限度的清晰和交流是关键。饼图不是“邪恶的”,不需要避免,实际上可以成为你的数据可视化工具箱中的一个巨大资产,因为它们很容易被你的观众消费(双关语)。

为什么黑洞会发光

原文:https://towardsdatascience.com/why-black-holes-emit-light-908cdef80153?source=collection_archive---------11-----------------------

霍金辐射背后的物理学的简单解释

图片标准普尔大卫马克皮克斯贝

根据爱因斯坦的经典引力理论,黑洞是一个具有极强引力场的时空区域,任何东西都无法逃离(甚至光也不行)。结果黑洞只能吸收物质。这个性质的结果是黑洞的大小永远不会减少。然而,当考虑到量子效应时,这种情况发生了巨大的变化。正如本文将展示的,由于其表面附近量子场的真空波动(所谓的事件视界,黑洞发射出粒子,如光子(光的粒子)、中微子等。因此,黑洞并不是完全黑的!这一突破性发现的作者是著名的英国物理学家斯蒂芬·霍金。

图 1:有史以来第一张黑洞图像。这个特殊的黑洞位于星系 M87 的中心。我们在图像中看到的是来自围绕黑洞旋转的热气的排放物(来源)。

粒子是由静态黑洞发出的预测让物理学界大吃一惊。霍金之前的工作表明旋转的黑洞产生粒子。但是与他的预期相反,在没有旋转的情况下,不会产生粒子,他发现甚至静止的黑洞也会产生粒子。

图 2:斯蒂芬·霍金和他的开创性论文(来源)。

在本文中,我将遵循 Mukhanov 和 Winitzki 对二维时空中无质量标量场的 Hawking 温度的推导(在 4 维时空中的推导可以在 Hawking 的原始论文中找到)。

霍金辐射的物理起源

霍金辐射起源的标准解释如下。一般来说,量子涨落的特点是不断产生虚粒子-反粒子对。在黑洞视界附近经常发生的是,两个粒子中的一个穿过视界,而另一个粒子作为霍金辐射逃逸。

图 3:正如文中所解释的,当一对粒子在黑洞附近产生,其中一个落入黑洞时,另一个粒子作为霍金辐射逃逸(来源)。

虽然这种解释是普遍存在的,但它并不精确地对应于实际的计算,这将在这里解释。关于这个问题更详细的讨论,见施梅尔策和贝兹

史瓦西黑洞

史瓦西黑洞是不旋转的球对称黑洞。它是最简单的黑洞,只包含一个参数,它的质量m .**2D史瓦西线元在球坐标中表示为:**

方程 1:二维的史瓦西线元素。

有关上述表达式的详细解释,请参见下面的文章。

** [## 循环虚时间和温度之间的神秘联系

一个显而易见的事故可能蕴含着物理学上的一个巨大谜团

towardsdatascience.com](/the-mysterious-connection-between-cyclic-imaginary-time-and-temperature-c8fb241628d9)

情商。1 似乎表明在史瓦西度规中有两个奇点(时空中引力场变为无穷大的位置),一个在 r =0,另一个在 r = 2 M,即所谓的史瓦西半径。更具体地说,代入 r = 2 M,线元素的两个分量变成:

等式 2:在 r=2M 时计算的(t,r)坐标中的史瓦西度规张量的分量。

然而,正如下一节将要展示的,史瓦西黑洞唯一的物理奇点位于 r =0。在 r = 2 M 处的明显奇点实际上仅仅是一个坐标奇点,可以通过转换到一个新的坐标系统来消除。为了说明这一点,我们将引入所谓的克鲁斯卡尔–塞克雷斯坐标

图 4:由史瓦西黑洞产生的引力透镜(在远程光源和观察者之间发生的物质对光的弯曲),该黑洞穿过星系的视线平面()。

克鲁斯卡尔-塞克雷斯坐标

Kruskal–sze keres 坐标如下所示。首先定义“乌龟坐标r**(r*)和对应的乌龟光锥坐标:

等式 3:乌龟坐标和乌龟光锥坐标的定义。

注意 r r = 2 M 处是单数。这意味着在 r = 2 M 处也是奇异的乌龟光锥坐标不覆盖被定义为黑洞内部的r2M*的区域。为了覆盖整个史瓦西黑洞时空,我们需要再次改变我们的坐标系。这个新坐标系将是Kruskal–Szekeres 光锥坐标解析延伸,定义如下:

等式 4:克鲁斯卡尔–塞克里斯光锥坐标。

线元素变成:

等式 5:等式中 Kruskal–Szekeres 光锥坐标中的线元素。4.我们注意到 r=2M 处的奇点不存在。

现在和 Eq 比较一下。1.我们看到,选择这种坐标系,史瓦西半径 rT21 = 2M处的奇点消失。因此,如前所述, r = 2 M坐标奇点(坐标系的一种手段)而不是物理奇点。这意味着当自由落体的观察者穿过半径 r = 2 M,他不会感觉到任何异常。

现在,请注意,Kruskal–Szekeres 光锥坐标具有以下有效域:-∞ < u < 0 和 0 < v < ∞。这些坐标不包括区域r<2M。换句话说,它们只在黑洞外有效,对于r>2m .然而注意,线元素 Eq。5 对于所有-∞ < u < ∞和-∞ < v < ∞都是定义良好的,覆盖了所有的史瓦西时空。然后我们必须解析地扩展坐标 uv 以包括值 u > 0 和 v < 0。**

Mukhanov 和 Winitzki 之后,我们可以使用等式根据原始坐标( t,r )来表示新的、克鲁斯卡尔-塞克雷斯光锥坐标( uv )。第三第四第五。我们得到以下两个关系:

等式 6:根据 tr. 的 Kruskal–Szekeres 光锥坐标

假设我们解析地继续 uv ,这些关系将对所有史瓦西黑洞时空有效。

为了获得著名的史瓦西黑洞的 Kruskal-Szekeres 图,我们引入了两个新的坐标,即

等式 7:坐标 u 和 v 的定义。

现在,为了覆盖整个图表,我们必须扩展坐标( uv )。将扩展变量( uv )用原始坐标( tr )表示,我们得到两组坐标,即:

等式 8:史瓦西黑洞几何上的两组 Kruskal–Szekeres 坐标。顶部的一对坐标覆盖了黑洞的外部( r > 2 M) ,而底部的一对坐标覆盖了其内部( r < 2 M)

Kruskal-Szekeres 图如下所示:

图 5:Kruskal–Szekeres 图,其中轴是坐标(T,R)。史瓦西黑洞时空被分成四个渐近区域 I、II、III 和 IV。常数 r 的曲线是双曲线,常数 t 的线是直线(来源)。

请注意几个重要特征:

  • 我们看到( uv )零测地线是斜率为π/4 和-π/4 的线
  • 来自 Eq。6、超曲面 r = const 对应于 T - R 平面中的以下双曲线:

等式 9:超曲面 r = const 对应于 T - R 平面中的以下双曲线。

  • 来自 Eq。6、对于r>2M,我们有uv<0,这就暗示了双曲线 r =常数由等式。9 是时间型的。对于 r < 2 M 则相反, uv > 0 和双曲线 r =来自等式的常数。9 个是类似太空的。所以只有在黑洞之外,史瓦西坐标 r 才有通常的解释。**
  • 从等式中的第二个表达式。6、我们看到曲面 t =常数用直线表示。对于 r < 2 M (黑洞内)时间 t 成为空间坐标。在外面, t 仍然解释为时间。不严格地说,在视界内部,空间和时间被有效地互换了!
  • T 的两个值处出现两个奇点:

方程 10:对应于 r=0 的两个类空奇点。

  • 超出两个 r = 0 曲面的区域不能被这些坐标覆盖。

量化

为简单起见,让我们写出二维弯曲时空中纯量无质量场的作用:

方程式 11:具有度规张量 g 的弯曲二维时空中无质量标量场的作用。

S 对应的标量场方程可以用光锥乌龟坐标或者 Kruskal–Szekeres 光锥坐标来写。在这两种情况下,它是两项的总和:

等式 12:根据光锥乌龟坐标和 Kruskal–Szekeres 光锥坐标写出的对应于上述动作 S 的标量场等式。

这是 S共形不变性的一个结果(在我之前的一篇文章中有更详细的解释)。 A s 和 B s 是行为良好的函数(有和没有“~”)。下面的解决方案就是一个简单的例子:

等式 13:这个解表示从黑洞传播出去的右移模式(相对于史瓦西时间 t)。

根据光锥乌龟坐标书写的史瓦西线元素由下式给出:

等式 14:用光锥乌龟坐标书写的史瓦西线元素。

在离黑洞很远的地方,这条线元素变成了:

等式 15:上面 r → ∞的线元素。

我们看到,在离黑洞非常远的地方,静止观测者的适当时间与等式中的 t 重合。15.因此,该观测器将具有正 ω 的模式(相对于 t 的频率)与粒子相关联(参见 Mukhanov 和 Winitzki )。

像通常在量子场论中一样,我们根据创造和湮灭算符来扩展场:

等式 16:确定相关的产生和湮灭算符的场ϕ的展开。(LM)代表向左移动的模式。

对应于 b 湮灭算符的真空被称为 Boulware 真空,根据远离黑洞的观测者的观察,它不包含任何粒子:

方程式 17:boul ware 真空。

正如我们之前看到的,光锥乌龟坐标只覆盖了史瓦西黑洞时空的一部分(在视界之外),Boulware 真空在视界上有奇异的行为,因此它在物理上是不成立的。此外,相应的能量密度将在视界处发散,量子涨落将产生强烈的逆反应,这将使弱扰动经典引力场的基本假设无效。

与光锥乌龟坐标相反,Kruskal–Szekeres 光锥坐标覆盖了所有的 Schwarzschild 黑洞时空,并且在事件视界处定义明确(非奇异)。在地平线附近,Kruskal–sze keres 坐标中的线元素为:

等式 18:地平线附近 Kruskal–sze keres 光锥坐标中的线元素。

因此,穿过视界的观察者与相对于 T 频率ω > 0 的模式相关联。再次扩大领域,如方程式。16 我们得到:

等式 19:使用 kruskal–szekeres 光锥坐标定义相应的产生和湮灭算子的场ϕ的扩展。和以前一样,( LM)和以前一样代表左移模式。

非奇异真空态现在具有有限的能量密度,导致量子波动的小逆反应,让经典引力场保持应有的微扰。克鲁斯卡尔真空,遵守

方程式 20:克鲁斯卡尔-塞克里斯真空所遵循的条件。

因此,可以用黑洞附近的“真正”真空来鉴别。

现在,对于远处的观察者来说,克鲁斯卡尔-塞克里斯真空包含了粒子!它们的数量密度可以精确地按照我以前的一篇文章结尾的步骤得到,链接如下。我们需要做的唯一修改就是将加速度 a 替换为 1/4 M 项(即所谓的表面重力)。

[## 当量子场遇到引力:Unruh 效应

加速度和温度之间的关系

towardsdatascience.com](/when-quantum-fields-meet-gravity-the-unruh-effect-69d03783d6bb)

然后,我们获得由远处观察者测得的热光谱和相应的霍金温度的以下表达式:

方程 21:远处观测者测得的热谱,以及相应的温度(所谓的霍金温度)。

霍金辐射非常暗淡,被落入我们目前识别的所有黑洞中的大量热气体发出的辐射淹没。

图 6:一颗恒星发出的炽热物质流被一个被尘埃环包围的黑洞吞噬的示意图。

这可能是它还没有被观察到的原因之一。来自 Eq。21,我们看到只有质量极小的黑洞才会发出强度可测量的霍金辐射。

我的 Github 和个人网站 www.marcotavora.me 还有一些其他有趣的材料,既有关于物理的,也有关于数学、机器学习、深度学习和金融等其他主题的。看看吧!**

小的就够了,为什么还要费心部署一个巨大的神经模型呢?

原文:https://towardsdatascience.com/why-bother-deploying-a-huge-neural-model-when-the-small-one-is-enough-47b9a2da8df1?source=collection_archive---------57-----------------------

性能优于原始技术的模型压缩技术

西蒙·米加吉在 Unsplash 上的照片

深度神经网络是一种强大的机器学习方法。它在许多任务中有着非常出色的表现,包括视觉识别、自然语言处理以及语音识别。建立一个在下游任务中表现良好的深度神经网络通常需要拥有数百万甚至数十亿个参数。Krizhevsky 的模型赢得了 ImageNet 的图像分类竞赛,它有超过 6000 万个参数,只有五个卷积层和三个全连接层[1]。

部署具有这些巨大参数的模型需要大量资源和计算开销。而有时目标设备具有有限的资源,并且计算将是繁重的,尤其是对于实时应用或具有在线学习算法的应用。那么,我们如何在减小模型尺寸的同时,实现与原来更大的模型相同的性能呢?我们能否以某种方式将知识从大模型转移到小模型?

在这篇文章中,我们将通过模型压缩技术将知识从庞大的神经模型转移到较小的神经模型,而不会显著降低性能。对神经模型进行模型压缩可以通过使用参数共享和修剪或者通过使用知识提取来完成。我们将会看到它们的区别、优点和缺点。

参数共享和修剪

参数修剪和共享的思想是通过探索模型参数的冗余。通过检查原始模型参数,我们希望去除冗余和不敏感或不重要的参数,同时仍然保证原始模型的性能。在丢弃冗余参数后,具有 50 个卷积层的 ResNet-50 具有超过 38 亿个参数,可以节省超过 75%的参数和 50%的计算时间[1]。进行参数共享和修剪的三种技术是量化和二值化、参数修剪和共享以及结构矩阵。

  • 量化和二值化。这种技术的思想是通过减少存储每个权重的位数。这种技术的极端情况是进行二进制化(使用 0-1 权重值),如 BinaryConnect、BinaryNet 等。这种技术的缺点是使用大型 CNN,如 GoogleNet,会大大降低模型的准确性。
  • 参数修剪和共享。就像名字一样,这种技术试图在一个预先训练好的 CNN 中去除冗余和无信息的权重。然而,在全连接层中使用这种技术可能会消耗大量内存。可以通过减少整个网络中的参数和操作的总数,或者通过使用哈希函数将权重分组用于参数共享,来去除权重。
  • 结构矩阵。为了修剪完全连接的层,我们可以应用具有更少参数的矩阵乘法。这将减少记忆成本,也加快了推理和训练阶段的时间。但是,加入矩阵乘法可能会给模型带来偏差;因此,它可能会影响性能。即使找到合适的结构矩阵也很困难,因为没有理论上的方法来推导它。

由于所有的技术都试图删除一些模型参数,因此很难保持性能不下降。

知识蒸馏

与试图降低权重的参数剪枝和共享不同,知识提炼试图在更紧凑的模型(学生)中再现繁琐模型(教师)的输出。以便学生模型能够以与教师模型相同的方式进行归纳。不正确答案的相对概率显示了模型的泛化倾向。比如一张汽车的图像,可能有极小的概率被误认为是公交车,但这个概率还是比误认为是食物要大。

由于概率告诉我们关于教师模型的性能,我们然后可以使用这些概率作为目标标签来训练学生模型以转移概括能力。这些概率被称为软目标。

“当软目标具有高熵时,它们为每个训练案例提供的信息比硬目标多得多,训练案例之间的梯度差异也小得多,因此小模型通常可以在比原始笨重模型少得多的数据上训练,并使用高得多的学习率。”[2]

为了训练学生模型,我们可以使用相同的训练集,或者使用与教师模型不同的训练集。图 1 显示了知识提炼是如何工作的。我们通过在训练时使用软损失来更新学生模型。但是,向学生模型提供有关硬标签的信息可以显著提高其性能。因此,我们不是使用软损失来更新学生模型,而是使用硬损失来更新它。硬损失是由带有基本事实标签的硬预测产生的熵损失。在训练学生模型时,我们使用软损失和硬损失的加权平均值。

图一。使用教师模型中的软目标传递知识插图[图片来自作者]

在 MNIST 数据集上,该模型即使在用于训练学生的训练数据缺失的情况下也能取得很好的效果。这种方法也适用于大型数据集。它表明,对于包含 1 亿张带标签图像的 15000 个类别的内部谷歌数据集 JFT 来说,进行知识提取可以更快。作者将数据集分成 61 个专家模型(具有子集训练数据的小模型),每个模型中有 300 个类别。在较小的专业型号上,培训只需要几天时间,而不是几个星期。这些专家模型所做的其他改进是,与笨重的模型相比,准确性提高了 4.4%。

看到这种知识提炼的结果可能会引发一个问题“这种方法会在每个数据集上都表现良好吗?”。通过研究浅线性和深线性分类器的特定情况[3],知识提炼的成功有三个关键因素:

  • 数据几何。第一个特征是我们用来训练模型的数据分布的几何属性,即类分离。类别分离对风险的收敛速度有直接影响。结果表明,多项式次数越高的数据越有效,学生获得的风险越低。
  • 优化偏差。不仅在知识提取阶段,优化偏差通常也会影响训练阶段的收敛速度。在这种情况下,使用梯度下降非常有利于最小化学生目标。
  • 单调性强。至于当我们增加训练数据的数量时,神经网络中的训练通常如何更好地工作,这也适用于这里。如果通过增加训练数据的数量来降低学生模型的风险,知识提炼将会起作用。

根据这些实验的结果,作者假设类似的特性也发生在非线性分类器中。尽管知识提炼取得了成功,但它也有一些缺点。其中之一是这种技术只能应用于具有 softmax 函数的分类任务,这限制了它的使用。另一个是,有时模型假设过于严格,无法使不同方法的性能具有竞争力。

参考资料:

[1]程,杨,王,周,张,2017 .深度神经网络的模型压缩和加速综述。 arXiv 预印本 arXiv:1710.09282
[2]辛顿,g .维尼亚尔斯,o .和迪安,j . 2015。从神经网络中提取知识。 arXiv 预印本 arXiv:1503.02531
[3] Phuong,m .和 Lampert,c .,2019 年 5 月。走向理解知识的升华。在机器学习国际会议上(第 5142–5151 页)。

我以为动物住在动物园里?从模型动物园中选择计算机视觉模型

原文:https://towardsdatascience.com/why-build-a-model-if-you-can-steal-one-computer-vision-without-training-models-c259a165cd90?source=collection_archive---------48-----------------------

入门

使用预先存在的计算机视觉模型进行对象检测

戴加·埃拉比Unsplash 上的照片

在我的上一篇博客中,我讨论了计算机视觉的一些基本概念,以及如何使用 OpenCV 创建面部识别过滤器。但是如果你想在图像中检测除了人脸以外的东西呢?有两种可能的前进方式:

  1. 训练你自己的模型:如果你有很多图像准备好要识别的物体,使用 OpenCV 的内置函数(如 k-Nearest-Neighbors)或更强大的机器学习库,如 PyTorchTensorFlow ,你可以建立自己的模型。然而,这意味着你需要成百上千的图片来显示你感兴趣的物体。为这些创建模型也需要时间、硬盘空间和计算机能力。你还需要已经有各种计算机视觉训练算法的知识,如区域卷积神经网络(R-CNN),更快的 R-CNN,你只看一次(YOLO)。
  2. 使用预先存在的公开可用模型:网上有许多资源可以帮助您在程序、应用或动态分析中构建对象检测。在我的上一篇博客中,我利用 OpenCV 预先训练的人脸和眼睛的 haar 级联模型快速构建了一个有趣的人脸过滤器。像脸书·艾的 Detectron2 等 Python 库有强大的预训练模型准备就绪(通常被称为模型动物园)。许多人在上下文中的公共对象(COCO) 图像数据集上接受训练。或者,你可以在网上找到预先训练好的模型,导入深度学习框架,如 PyTorch 或 TensorFlow,如ModelZoo.co等网站。

GaUnsplash 上拍照

上述选项中的后一种显然灵活性和可定制性要差得多。因此,如果你试图在一幅图像或一段视频中发现一些非常独特的东西,最好还是走自己的路线。但是,根据您项目的目标和需求,使用来自模型动物园的现有模型可能对您有利,因为它可以节省您的时间、精力和硬盘空间。例如,在我的上一篇博客中,这个项目的目标并不是真的需要训练我自己的面部识别模型。我想看看能不能造出一个很酷的滤镜戴在人们的脸上。如果我试图训练我自己的模型,我将需要找到或创建一个面部图像数据集(这本身需要时间),然后训练模型。但是,我所需要的是哈尔瀑布,然后我准备去。因为对象检测是一项如此常见的任务,所以使用我现有的工具要有效得多。更进一步说,许多模型很容易实现,根本不需要实际了解它们是如何工作的,也不需要太多关于计算机视觉的知识。这对于只需要对象检测功能并需要专注于其他任务的软件工程师来说特别好。

选择适合您的型号

有这么多模型可供选择,你如何知道在你的项目中使用哪一个?还是应该完全训练你自己的模型?以下是一些需要考虑的事项:

  1. 它有你需要的功能吗?有些模型只是帮助你在检测到的物体周围画一个方框,而其他模型可能会帮助你检测物体的更多独特特征,如人的四肢。但是可能没有一个模型是最适合你的,尤其是当你有一个特定的项目时。例如,也许你想检测狮子狗的图像,而不是其他品种的狗。Detectron2 使用 COCO 图像的基线狗检测算法可能会帮助您识别图像或视频中的狗,并丢弃猫的图像,但它不会完全让您达到目标。一种方法是从已有的模型出发,构建你自己的模型。
  2. 训练一个新模特是多余的吗?因为如此多的物体探测任务都是相似的,我是不是要重新发明轮子来创造一个全新的模型?对于像面部识别或文本检测这样的普通任务来说尤其如此。当然,用这些任务来练习训练是一个很好的编码/建模练习,但是当项目的最后期限即将到来并且已经有太多已经存在的时候,这是多余的。
  3. 够快吗?许多模型都是使用 R-CNN)、更快的 R-CNN 和 YOLO 等算法构建的。一些算法速度更快,而另一些算法在内存方面效率更高。如果你试图处理视频中的实时图像,一定要使用更快的 R-CNN 或 YOLO。许多模型动物园列出了速度和内存指标供您考虑(这里是探测器 2 的)
  4. 是否足够注重细节?使用 YOLO 算法构建的模型非常快,但有时会以牺牲特异性为代价。因此,YOLO 非常适合视频直播,但可能很难找到远处的人群。根据您试图检测的内容,确保您的模型有能力做到这一点。
  5. 是否符合你的技能水平?有些模型和 python 包很好拿。我的上一篇博客使用 OpenCV 轻松实现了 haar 级联。但是,请确保您拥有使用您的模型的技能和能力。这似乎是显而易见的,但是你很容易贪多嚼不烂。一些模型可能需要您可能不熟悉的 python 包,或者需要您理解您没有遇到过的概念。我确实遇到过这种情况,当我试图使用某个地方的一个模型时,我感到力不从心。

总的来说,选择一个模型,无论是你创建的还是你发现的,很大程度上是关于平衡效率(计算机的和你的)和任务要求你的详细程度。

为什么构建数据科学解决方案很复杂,但不是以您认为的方式

原文:https://towardsdatascience.com/why-building-a-data-science-solution-is-complex-but-not-in-the-way-you-think-4dccc31a9074?source=collection_archive---------56-----------------------

这不全是关于技术和算法

数据科学很复杂,从数据中获取价值很难,大多数数据项目都失败了。这些都是我们在尝试交付数据科学解决方案时感受到的痛苦。在与业内不同的人交谈后,数据团队在该领域面临的最常见挑战通常被认为是构建数据科学解决方案的复杂性。这种说法有些道理,但我认为,对于为什么它如此复杂,人们普遍存在误解。如果没有对复杂性来源的正确理解,我们将继续努力实现价值。

对于那些使用真实数据处理业务问题的人来说,我们知道与此相关的痛苦和复杂性。从数据中传递价值是困难的,因为数据是杂乱的,因为统计假设在实践中并不总是成立,因为有时我们甚至没有正确的数据来回答问题。然而,尽管我们喜欢认为数据科学的复杂性来自技术挑战,但我认为真正的复杂性在其他地方。

照片由吕山德·袁Unsplash

我们在解决什么问题?

我们多久会停下来问自己这个问题?不幸的是不够经常。我敢肯定,我们都有丰富的学习经验,在过去,我们花了太多的时间来构建一个解决方案,却没有解决我们想要解决的问题。不是我们不知道如何构建正确的解决方案,而是当我们专注于技术问题时,我们不善于跟踪更大的画面。我们经常花太多的时间讨论一个解决方案在技术上是否设计良好,而没有足够的时间来验证这个解决方案是否解决了我们试图解决的问题。

不管你的解决方案有多好,你的模型预测有多准确,或者你有多少测试覆盖率,如果它没有解决正确的问题,它仍然是一个无用的解决方案。最大的复杂性之一是了解您试图解决的业务问题,因为有时您没有数据科学问题,当然数据科学解决方案对您没有任何好处。

你是做数据的还是做科学的?

数据科学的普及是由捕获、处理和分析大量数据的能力引发的,机器学习的核心前提是,使用大量数据和简单的算法将比使用少量数据的复杂模型产生更好的结果。即使这些是业内广泛接受的信念,我们仍然看到公司更多地关注科学,而不是足够的数据。数据科学家获得了丰厚的报酬来测试不同的算法和调整超参数,但现实是算法并不是解决方案的复杂部分。另一方面,清理数据、理解如何捕获数据以及如何使用数据的细微差别和含义,以及从杂乱的数据中得出有意义的特征,这些任务受到了行业的反对,好像这是数据科学家应该做的事情。数据科学的复杂性在于数据,然而我们却没有在这方面花费足够的时间和精力。虽然我们通过做更好的科学获得边际效益,但如果我们使用更好的数据,我们会获得更大的改善。

你在建造正确的东西吗?

构建数据科学解决方案与构建软件解决方案没有什么不同,重要的是解决方案需要解决问题。我们不使用网飞,因为他们有一个伟大的微服务架构,我们不使用 LinkedIn,因为他们有一个分布式流媒体平台,我们当然不使用谷歌,因为他们有一个强大的容器编排系统。技术很酷,作为一个书呆子,我理解玩技术的吸引力甚至冲动,但它们只是工具,拥有更多工具并不能帮助你提供正确的解决方案。

我们需要专注于从数据中提供价值,也许我们需要一个机器学习模型,也许我们需要一个仪表盘,或者也许我们只需要一份简单的周报。找到支持您需求的技术是首要任务,只有在我们解决了核心问题后,其他一切才是重要的。我们喜欢花时间来检验我们的设计,自动化 CI/CD 管道和优化性能,虽然这些事情很重要,但如果我们的解决方案不起作用,它们就没有任何意义。想想看,如果网飞没有你想看的节目,但他们告诉你他们有一个架构良好的系统,你是否还会订阅他们的节目。

你打算怎么办?

最后的复杂性在于我们在构建解决方案后如何处理它。数据科学可能给了我们更好的工具,但归根结底,它只提供了一堆数字。这些数字可能会告诉我们有价值的信息,例如我们的客户是否会流失,他们有兴趣购买什么产品,或者我们如何才能最好地与他们沟通。但它们只是数字,除非我们用它们做一些事情,我们需要将解决方案付诸实践,以从我们的数据中获得价值。部署和使用一个普通的解决方案远比一个永远见不到天日的伟大解决方案更有价值。

构建数据科学解决方案来解决我们的问题无疑是复杂的,能够提供这些解决方案的公司比竞争对手更有优势也就不足为奇了。人们很容易认为,这些公司之所以成功,是因为它们解决了问题的所有技术复杂性,但如果我们退一步,我们也应该认识到,它们的成功不仅仅是因为技术能力。他们清楚地了解他们要解决的问题,他们了解他们正在处理的数据,他们专注于构建正确的东西,最重要的是,他们正在将解决方案付诸实践。因此,如果您想要成功地为您的问题构建数据科学解决方案,请确保您了解真正的复杂性在哪里。

如果您喜欢我的内容,请在 https://jchoi.solutions/subscribe注册更多内容

为什么建立机器学习模型就像烹饪一样

原文:https://towardsdatascience.com/why-building-a-machine-learning-model-is-like-cooking-4bed1f6115d1?source=collection_archive---------48-----------------------

逐步比较

来自 Pexels 的 Andrea Piacquadio 的照片

W 当我第一次成为数据科学家时,我意识到机器学习是一个模糊的概念,人们听说过但不太理解。我努力用一种非技术人员也能理解的方式来解释机器学习。

快进到今天,我突然意识到,建立一个机器学习模型就像烹饪——一项人人都可以参与的普遍活动,除非你对烹饪的想法是把冷冻晚餐扔进微波炉。事不宜迟,让我带你了解构建机器学习模型就像烹饪一样。

1.数据准备

建立机器学习模型的第一步是准备数据。根据数据基础设施的不同,这可能涉及从各种来源提取原始数据并加载到数据库中。在成熟的公司中,数据在数据库中,数据科学家只需要找到模型所需的数据。

同样,烹饪的第一步是获取原料(数据)。你可能需要去杂货店买家里没有的食材(从各种来源拉)。

2.探索性数据分析

接下来,数据科学家研究数据以分析趋势,删除重复和缺失值等不良数据,并将其转换为可用于建模的形式。对于可用的形式,我的意思是如果模型期望每个用户一行,那么数据需要被聚合和转置以满足这个需求。

类似地,你必须探索配方成分,以决定你是想用新鲜的还是冷冻的,或者如果你在商店找不到的话,用替代品代替。食谱可能要求配料在加入菜肴之前进行预混合或预烹饪(转化为可用的形式)。

3.选择一个模型

第三步,根据建模问题选择一个模型算法

这类似于选择烹饪方法——烤、炸、蒸等。

4.训练模型

现在,数据科学家将使用选定的算法来训练模型。为了确定模型的准确性,从训练中拿出一部分数据来评估模型使用从未见过的数据预测结果的能力。

同样,你按照食谱烹饪你的菜肴,并把它的味道与你过去做过的菜肴进行比较。

5.评估模型结果

数据科学家检查模型结果,并根据结果,使用另一种模型算法重复步骤 3 和 4。有时,数据科学家可能需要从步骤 1 重新开始,以评估是否可以引入任何新数据来改进模型结果。

根据你对菜肴味道的满意程度,你可以调整你的烹饪方法或者用不同的材料重新开始。

6.参数调整(可选)

可以调整模型参数以提高精度,但如果模型结果可以接受,这是一个可选步骤。

在烹饪中,如果你对菜肴的味道不满意,可以调整配料或调味料的比例。

7.将模型部署到生产中

使用历史数据训练模型。在模型被训练之后,它将被投入生产,在那里它被用来使用当前的数据预测未来的结果。

同样,一旦你准备好了你的菜,并且对它的味道感到满意,你就可以把它端给你的家人和朋友了。

8.模型再训练

这是很少提到的最后一步。已经投入生产的模型偶尔需要用更多的最新数据重新训练。模型使用某个时间点的数据来预测未来的用户行为。如果用户行为随时间变化,模型就不能捕捉到这一点,预测精度就会下降。由于疫情,这一点尤其如此。用户行为在 2020 年发生了巨大变化,使用一年前的数据建立的模型预测将受到影响。

我想到的最贴切的烹饪比喻是,如果你的菜需要季节性的或关键的配料,而这些配料并不容易获得。在这种情况下,你使用了一种接近的替代方法,但是这道菜没有原来的食谱好。

下次你听数据科学家谈论他们的机器学习模型时,我希望烹饪成为你的通用翻译器。

你可能也会喜欢…

[## 我如何使用机器学习模型来生成可操作的见解

将数据科学与数据分析相结合

medium.com](https://medium.com/swlh/how-i-used-a-machine-learning-model-to-generate-actionable-insights-3aa1dfe2ddfd) [## 如何将机器学习成果转化为商业影响

向高管解释模型结果

towardsdatascience.com](/how-to-translate-machine-learning-results-into-business-impact-d0b323112e87)

为什么要建立人工智能去中心化自治组织(AI DAO)

原文:https://towardsdatascience.com/why-building-an-ai-decentralized-autonomous-organization-ai-dao-85d018700e1a?source=collection_archive---------15-----------------------

为什么大多数传统商业组织都处于危险之中(商业模式,AI 代理等。)

帕特里西奥·达瓦洛斯在 Unsplash 上拍摄的照片

除了实施人工智能的复杂挑战,一些公司已经开始分析建立人工智能分散自治组织(AI DAOs)的可能好处。

在我最近的任务中,我必须帮助创建新的商业模式,确定正确的人工智能方法,并为创建几个人工智能 Dao 概念证明创建路线图。事实上,我们认为这些数据驱动的全自动化组织将在未来几年成为大多数传统组织的主要威胁。

在这篇文章中,我将帮助你理解我们所说的去中心化自治组织(Dao)的含义,从商业模式的角度看它们的战略重要性,以及人工智能在 Dao 崛起中的关键作用。

分散自治组织

让我们从定义本文的关键概念开始。

( ):通过编码为计算机程序的规则运行的组织,称为智能合约。(1)

DAO 的目标是创建一个没有“人”的层级管理也能运行的组织。

理论上,人类和组织之间的任何交互都可以表示为一个契约。基于区块链技术的智能合同(信息传输和合同执行)使我们能够基于云构建这些类型的组织。目标是能够自动化所有的管理和行政职能。一个 AI DAO 的 AI 方面可以与自主做出决定的独立代理相关。

Dao 不仅代表了一场技术革命。事实上,人工智能道可以使用人工智能代理创造自己的产品和服务并出售,而利润将归人类所有。我相信,一旦普遍收入在几个国家开始实施,DAOs 将会发挥重要作用。

三种涉道方式。

1.可以买股票/加密货币/代币
2。他们可以授予你
3。您可以让他们为 DAO 执行特定的任务

收入部分可以与主动或被动工作相关。例如,查找 bug、开发软件或 DAO 要求的任何任务。被动工作可能意味着共享某些东西,比如你的计算机处理周期、存储,甚至是你的数据。

事实上,DAO 是一种实现令牌所有权、契约义务和业务逻辑规则的计算机算法。当所有这些事情结合起来,我们就获得了一个自主的、数据驱动的、透明的公司,通过智能合约在虚拟股东之间分配价值。

智能合同: 一种自动执行的合同,买卖双方的协议条款被直接写入代码行。守则和其中包含的协议存在于一个分散的区块链网络中。 ( 2 )

根据我的经验,只有少数分散的自治组织(Dao)已经存在,但是它们的规则已经作为智能契约建立起来了。组织可以执行行动,但我没见过独立决策的系统。大多数时候,它遵循智能合约开发人员编写的规则。

我们的目标是建立一个不需要人力投入的组织,不仅能很好地运作,而且能对其结构进行独立的深思熟虑的改变。

战略重要性

出于几个原因,我们相信开发 DAO 的能力将是未来的基础。与目前的组织相比,Dao 有几个竞争优势。

由于缺乏层级结构,道安内部的创新过程与传统组织相比可能要好得多。在一个道中,每个创新的想法都可以由任何人提出,并由整个组织考虑。

从运营成本来看,让人类处于边缘,同时受益于自动化和人工智能独立代理是一个重大的游戏规则改变者

Dao 代表了商业组织发展的一个新阶段。我们认为几种技术(人工智能、区块链等)的融合。)不仅会创造新的商业模式,还会创造新的组织类型,与我们的一些业务部门展开竞争。

因此,大公司开始预测 Dao 的影响是非常关键的。我们还希望看到越来越多的小型独立 Dao,每个人都可以轻松地投资其中。出于这个原因,创建我们自己的 AI DAOs 并与我们的客户分享所有权可能是战略性的。这种转变将对客户和组织之间的互动方式产生重大影响。

由维塔利克·布特林制作

我们可能会进入一个时代,在这个时代,大多数公司都可以由人工智能(未来可能是 AGI)来运营,并相互交流。这种潜在的“人工智能对人工智能的经济”(3)对我们现有的商业模式构成了重大威胁。由于与 Dao 相比缺乏竞争力,许多公司可能会消失。我们问自己这样的问题:

  • 面对一个更好地利用数据并且运营成本更低的组织,我们如何保持竞争力?
  • 我们的客户会对销售类似产品的爱道有什么反应?
  • 能否建立“内部”艾道,将客户转化为投资人?

新的业务模式、路线图和使用案例

理论上,我认为 AI DAOs 是有史以来最具成本效益和最开放的商业模式。由于 DAOs 的性质(不需要员工或执行经理),这些组织可以在几乎不可能的利润率上生存,并且只需要覆盖现有的成本。

任何企业都可以从一个有着道一样雄心的模式中获益。

我们的路线图是逐步实现 AI DAO 概念。它可以从一小部分管理和行政角色的自动化开始,但随着公司变得更加数据驱动,智能合同处理越来越复杂的任务,这些百分比将随着时间的推移而增加。

此外,我们将 DAOs 视为一个在其实现中具有一定纯度的构造。会有这样的情况,一家公司中只有 10%的人是这样运作的.

说到具体的用例,我选择/确定了以下几个:

  • 用例# 1——营销 一种人工智能方式,其中人工智能选择最好的公司或用户来投放广告。在每个营销周期之后,人工智能会评估投资回报率,并相应地调整其营销行动。这个想法是通过反馈环创造一个良性循环,帮助组织不断适应。
  • 用例 2——Art 使用生成模型(gan ),我们可以创建 AI DAOs 来交易他们的作品,并将利润作为加密货币令牌分配给他们的股东。人工智能可以识别新趋势(社交媒体上的 NLP),创建自己的对象(3D 打印),并使用自主代理在线销售(特定网站)。利润将使用加密货币进行分配。
  • 用例#3 —自动售货机
    与自动售货机相关的 AI DAO 不仅可以用来取钱和送点心,还可以用这些钱自动重新订购商品。这台机器还将管理清洁服务,并自行支付租金。它没有管理器,所有这些流程都预先写入了代码。( 4 )

谈到商业模式,我们正处于一场大规模革命的边缘。事实上,人们将有可能同时选择数百种不同的商业模式并为之做出贡献。

我们设想在未来,人们可以搜索他们喜欢的任何类型的企业,评估不同的角色,和/或投资于它们。薪酬将基于绩效,允许每个人完全控制自己的收入。

人工智能

正如你可能已经知道的,大多数当前的人工智能解决方案在决策过程中有所帮助,但很少从他们的行动中学习并优化他们自己做出的决定。通常,解决这种情况最明显的方法是根据新的可用数据和标签重新训练模型。

可能需要适应性 ML 和理解因果关系的改进来解决从错误中学习的能力。因此,我不会说人工智能对于一个复杂的人工智能道已经成熟。

我们已经使用负责执行网络决策的人工智能代理建立了分散式组织的概念验证。这种方法提供了更多的可伸缩性。例如,投资者可以简单地将他们的偏好传达给人工智能代理,而不是为每一个行动投票。这些数以百万计的微观决策可以由网络的人工智能代理自动处理。

理想情况下,我们试图建立一个系统,其中不同的人工智能可以寻找不同的参数(例如,品牌,人力资源等。)并为员工和股东做出最佳决策。

事实上,AI DAOs 可以结合执行不同子任务的多种算法,并可以访问网络上交换的训练数据。这个想法是创建一个巨大的反馈回路,系统将不断地从行动和客户数据中学习。

人工智能对于自我管理的理念也是必不可少的。一个特别的例子是,当"一体行动"讨论与供资有关的项目时。在这种情况下,自主代理必须首先确认他们与核心价值和目标一致。

我们已经确定了两到三个与 AI 相关的可能的 AI 架构。但是,其他的也可以存在。此外,一条路径可以与其他路径组合。( 6

第一个在今天是不可能实现的,因为我们还没有成功创造出一个人工智能 (AGI)。想象一下,一个 AGI 系统利用智能合约,负责运行组织并与令牌持有者(人类)进行交互。

人工通用智能:能够像任何人一样理解世界的机器,并且具有学习如何执行大量任务的相同能力。( 7 )

截至今天,我们认为依赖人工智能代理似乎是最具可扩展性的解决方案。我们的内部项目基于这种方法。我们经常依赖强化学习算法。

人工智能代理:自主实体,通过传感器和随后的致动器对环境进行观察,采取行动,指导其活动实现目标。智能代理也可以学习或使用知识来实现他们的目标。它们可能非常简单,也可能非常复杂。

来源

劣势和障碍

在尝试构建第一个 DAO 概念验证时,我意识到有许多问题需要解决,例如技术限制、复杂性和道德问题:

首先,关键要提醒大家的是,对这项技术的了解和使用案例还很少。由于这个原因,失败的可能性很高。从法律的角度来看,Dao 还没有合法的分类,这是一个问题,因为即使我们成功了,我们也不能合法地将这个自治实体…

可以想象,开发一个 DAO 会带来许多与数据安全和特定领域知识相关的问题。由于所有的代码在区块链上都是可见的,并且很容易访问,已知的安全漏洞可能会被黑客利用,直到所有的参与者通过协商一致同意修复缺陷。我们目前正在尝试利用同态加密来解决这个问题。

同态加密:一种加密方法,允许对密文数据进行数学运算,而不是对实际数据本身进行运算。( 8 )

一把刀的制造部分还是有限的。我的意思是,在机器人变得更便宜、更容易使用之前,一个处理实体产品的组织将永远需要人力。商业案例仍然不够明显,不足以说服内部 C 级高管进行大规模投资。

另一个挑战是当今组织日益增长的复杂性。事实上,业务流程正变得越来越复杂,因此当涉及到平稳、公平的操作时,一个适当的自管理 DAO 需要考虑更多的问题。我们的目标是简化和优化治理机制。

构建 DAO 概念验证的另一个关键挑战是定义日常业务运营的所有规则。这是一项非常复杂和乏味的任务。理想情况下,您的概念验证可能需要几个月才能成为现实,因为定义和评估所有这些小任务需要时间。

总的来说,一个新刀就像一个创业公司。它需要产品/市场的匹配和可靠的商业模式。另一个问题与不同人工智能代理的协调有关,以实现整个系统的目标。即使规则明确且得到执行,问题还是会出现。

我们也质疑遗传算法在更新代码中的作用。此外,我们还想确定 Dao 是应该尝试保持其他货币的余额,还是应该只通过发行其内部令牌来奖励行为?

由于上述原因,在 AI DAOs 成为可扩展的商业机会并获得牵引力之前,我们还有很长的路要走,但权力结构分散的趋势增加了这些类型的组织很快成为可能的可能性。

我认为大公司应该已经尝试建立概念证明,以更好地理解这个新组织如何影响他们的商业模式。

要了解更多信息,我推荐以下链接:

为什么买新车可能不是最好的主意?

原文:https://towardsdatascience.com/why-buying-a-new-car-may-not-be-the-best-idea-1370f2a91bfc?source=collection_archive---------77-----------------------

web 抓取和数据可视化如何帮助您做出更明智决策的示例。

图片由亚历山德拉·布伦南提供

汽车:通勤、旅行、购物的一种方式,根据交通部的说法,是英国最主要的交通方式。2018 年,83%的总行驶公里数是通过汽车完成的。(交通运输统计 GB 2019[1])。汽车广告唤起自由、力量和独立的感觉。将它们持续下降的实际价格2与看似无限的可用金融选项结合起来,难怪 2018 年每户家庭的平均汽车数量为 1.2 辆(不包括伦敦为 1.3 辆)。似乎每个人都能看到拥有一辆车的好处,然而它确实提出了一个问题:买一辆新车在经济上是否明智,或者买一辆二手车是否是一项更合理的投资(提示:是后者)。

为了证明这一假设,使用 python 的 beautiful soup 从一个受欢迎的汽车市场收集了总共 85,000 条新车和二手车记录。搜集到的数据包括平均价格从 8700 英镑(达契亚桑德罗斯)到 101000 英镑(奥迪 RS 7s)的车型。然而,在这项研究中,新车与老款车的比较将集中在掀背车上,因为这种车型占总市场的 35%,如下图所示。使用 Tableau 将数据可视化。其余类别/型号的数据,以及其他信息,如每种型号的平均价格和市场份额,可以在 tableau public 网站上找到。

不同车型的新车/旧车市场份额。包含少于 0.1%的类型被移除以避免视觉混乱。

为了描述价值折旧的幅度,选择了六个模型,如下图所示。这些车型约占两厢车的 17.4%,新车平均价格在 16,700 英镑(雷诺 Clio)至 21,500 英镑(标致 208)之间。该图清楚地表明,一辆新车的价格在一年后平均下降了 30%。第一年内,标致 208 和沃克斯豪尔 Corsa(也称为欧宝 Corsa)的价值降幅最大,达到惊人的 50%。这种下降趋势持续到第 7 年,新车价格平均下降 65%。大众 Polo 似乎是赢家,一年后价值仅贬值 10%,七年后贬值 60%。注意数据中的异方差水平也很有趣。第一年的贬值幅度在 10%和 52%之间,七年后缩小到 60%和 70%,这表明,不管在拥有汽车的最初几年中经历的损失(例如,Polo 车主),一段时间后,它们都下降到相同的结果。

一些受欢迎的掀背车随着时间的推移汽车价值贬值(%)。大众 POLOs 相比其他车型表现更好。标致 208s 和欧宝 CORSAs 在初次购买后的第一年贬值约 50%。

另一个与拥有汽车相关的重要因素是保险费用。为了确定哪些因素对保险成本的影响最大,上图中所示的掀背车的报价是从保险比较网站上获得的,并在下图中根据其生产年份绘制出来。显示的高保险费用是由于我在英国很少开车,反映了保险公司必须承担的风险增加。然而,很明显,除了汽车的制造年份,一个很大的影响因素是汽车使用的燃料。柴油车的保险费用更高,如 208、ASTRA 和 CLIO 所示。另一个导致灰色区域内保险成本增加的因素是同一型号的高性能、大马力版本的存在。很明显,保险公司在为 200+马力的 208s 和 CORSAs 投保时会感到焦虑。

不同车型的保险成本与生产年份的函数关系。柴油汽车的保险费用更高。灰色区域对应同一型号的高性能版本。

购买新车的诱惑力显而易见:先进的安全功能、较低的维护成本、定制的机会,以及在耗尽你破旧的掀背车后你可能渴望的新鲜的零英里起步。如果一辆新车是不可转让的,考虑你购买的汽车品牌,考虑你是否想在几年内卖掉它,它的价值会下降多少。最终,数据表明购买一辆新车在经济上是不值得的。如果价值上最大的贬值是在第一年,买一辆一两年的车,把剩下的辛苦赚来的钱花在其他东西上:家里,假期,大学,家庭,不是更好吗?

参考文献

[1]交通运输统计,GB (2019)。https://assets . publishing . service . gov . uk/government/uploads/system/uploads/attachment _ data/file/870647/TSG b-2019 . pdf

[2]:剑桥计量经济学(Cambridge Econometrics),英国消费价格:解释汽车和服装鞋类的实际消费价格下降(2015)。https://assets . publishing . service . gov . UK/government/uploads/system/uploads/attachment _ data/file/416395/BIS-15-194-consumer-prices-in-the-UK-explain-the-down-in-real-consumer-prices-for-cars-and-closure-and-shoes . pdf

[3]:在线视觉供你摆弄 tableau 公共:https://public.tableau.com/profile/antonios.alexiadis#!/viz home/carvaluedepreciationandsigningfulanalytics _/story 1

为什么选择校准器?概率校准系列的第 1 部分

原文:https://towardsdatascience.com/why-calibrators-part-1-of-the-series-on-probability-calibration-9110831c6bde?source=collection_archive---------22-----------------------

概率校准

为什么以及何时应该校准分类器的概率

威廉·沃比Unsplash 上拍摄的照片

本系列的主题是在标准 ML 课程中很少出现但在行业中经常出现的东西——概率校准。在本系列的第一篇文章中,我将对分类器的概率校准做一个总体介绍,并讨论什么时候使用校准品是有意义的。

介绍

在机器学习中,有时需要概率分类器——不仅返回最可能的类别标签,还返回该类别的概率的分类器。当预测的概率与感兴趣的事件的真实概率匹配时,概率分类器被很好地校准。例如,如果欺诈分类器返回 0.1 或 10%的特定信用卡申请欺诈的可能性,如果相似类型的申请在 10 个样本中平均有 1 个是真正欺诈的,则该数字被认为是校准良好的。

当预测概率的绝对值(而不仅仅是等级顺序)对建模者很重要时,这一点很重要。体育博彩就是一个例子。

在 2018 年世界杯之前,VegasInsider.com公布了德国赢得比赛的 5/1 赔率,这意味着每一美元,如果德国赢了,你可以拿回 6 美元(原始美元加上 5 美元支出),否则就没有美元。所以如果你想赌德国赢,你最好确定德国比⅙有更大的胜算。如果您构建了一个分类器来预测每个队的获胜概率,并且其输出是德国:0.25,英格兰:0.1,您希望确保分类器告诉您德国有 25%的获胜机会,而不是仅仅说德国比英格兰有更好的机会。

下注之前,先了解自己的胜算。由 KayUnsplash 上拍摄

校准图

校准图是检查分类器在已知结果的给定数据集上的校准程度的标准方法。(只对二元分类器有效;对于多类分类器,每个类需要一个单独的校准图)为了创建校准图,遵循以下步骤。

  1. 使用分类器对数据集中的样本进行评分。
  2. 根据预测的正类概率将数据分组。
  3. 计算每个箱中实际阳性的分数。
  4. 对于每个条柱,用 y 轴上的实际阳性分数和 x 轴上的条柱中点(平均预测概率)绘制一个点

让我们使用 sklearn 的 calibration_cruve 在真实数据集上绘制一个校准图

from sklearn.datasets import make_classification, load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.calibration import calibration_curve
from matplotlib import pyplot# generate 2 class dataset
X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)# split into train/test sets
trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2)# fit a model
model = SVC()
model.fit(trainX, trainy)# predict probabilities
probs = model.decision_function(testX)# reliability diagram
fop, mpv = calibration_curve(testy, probs, n_bins=10, normalize=True)# plot perfectly calibrated
pyplot.plot([0, 1], [0, 1], linestyle=' - ', label='perfectly calibrated')# plot model reliability
pyplot.plot(mpv, fop, marker='.', label='Support Vector Classification')
pyplot.xlabel('Mean predicted value')
pyplot.ylabel('Fraction of positives')
pyplot.legend()
pyplot.show()

完美校准的分类器具有 y = x 形式的校准曲线,如图中蓝色虚线所示。将 SVC 分类器的校准曲线与完美曲线进行比较,我们可以看到,它预测的概率在低端太低,在高端太高。这是最大利润法的典型情况;彻底的解释可以在这里找到。

当开箱即用分类器的输出没有很好地校准时,正如我们上面的例子中的情况,可以训练校准器来纠正这种情况。它是从原始分类器输出到校准的概率分数的映射。如何训练这样的校准器是下一篇博文的主题,然而,在训练校准器之前,我们应该首先问自己,校准器是否是绝对必要的。同样值得注意的是,在现实生活中,我们永远无法实现一个“完美校准”的分类器,即使有校准器也不行。我们需要校准曲线与完美曲线的匹配程度在很大程度上取决于具体的使用情况。

谷歌的推荐

谷歌工程师在他们的机器学习速成班——分类:预测偏差中表达了非常强烈的反对校准器的观点:

您可能会尝试通过对学习的模型进行后处理来纠正预测偏差,也就是说,通过添加一个调整模型输出的校准层来减少预测偏差。例如,如果您的模型具有+3%的偏差,您可以添加一个将平均预测值降低 3%的校准图层。但是,添加校准层并不是一个好主意,原因如下:

你只是治标不治本。

你已经建立了一个更脆弱的系统,你现在必须保持更新。

如果可能,避免校准层。使用校准层的项目往往会变得依赖于它们——使用校准层来修复模型的所有缺陷。最终,维护校准层会变成一场噩梦。

何时使用校准品

在同一篇文章中,谷歌还列出了预测偏差的可能根源:

  • 不完整的特征集
  • 噪声数据集
  • 漏洞百出的管道
  • 有偏训练样本
  • 过度强正则化

我强烈建议在使用校准品之前,仔细阅读该列表并尝试解决这些问题。

话虽如此,尽管谷歌善意的警告,校准器还是经常被使用。这并不意味着它们都是由糟糕的工程师创造的。在实践中,事情要复杂和微妙得多,有时不可能“治标不治本”,以下是一些使用校准品的典型场景:

一些类型的分类器本质上没有被很好地校准

谷歌使用逻辑回归作为他们的例子,并声称“逻辑回归预测应该是无偏的。”然而,许多其他类型的分类器,例如随机森林或 SVM,却不是这样。特定类型的分类器是否被很好地校准取决于它的学习算法和损失函数。有关一些常见类型的分类器校准效果的详细比较以及对潜在原因的更深入解释,请查看 scikit-learn 的概率校准指南

训练期间欠采样或过采样

这些是在实践中用于处理数据集中不平衡的技术。例如,在信用卡交易数据集中,可能会有大量的虚假(非欺诈性)结果和相对较少的真实结果。在不平衡的数据集上训练标准的 ML 模型通常是具有挑战性的-少数类的实例很少意味着学习算法通常不能很好地概括少数类的行为。这通常会导致较差的预测准确性。

处理这种情况的一个典型策略是重采样,要么通过欠采样(随机移除多数类的样本),要么通过过采样(复制数据集中的少数类)。这种策略提高了预测精度,但代价是在训练集和测试集之间引入了类别分布的差异。即使分类器在训练集上校准良好,它也不再在测试集上校准,因为分布已经改变。

本文详细研究了这一问题,并介绍了一种获得更加校准的输出的方法,该方法实质上是在原始输出和最终输出之间添加一个校准层。

标签移位

标签转移是机器学习中分配转移的一种类型,在生产 ML 系统中很典型。在这种情况下,P(X|y)保持不变,但 P(y)发生变化。这将导致模型产生未校准的结果。再次使用信用卡交易的例子—也许欺诈在 2019 年是一个大问题,10%的交易是欺诈性的,但在 2020 年大多数欺诈者都走了,只有(!1%的交易是欺诈性的。把 2019 年的数据全部扔掉,往往是不可取的。更好的方法是使用更新的数据和新的基础欺诈率来校正模型的校准。这篇博文详细分析了这一现象,并提出了一个很好的解决方案。

克里斯·劳顿在 Unsplash 上的照片

部分观察数据集

在生产 ML 系统中,标签有时来自观察到的事件,例如用户是否观看了视频或偿还了贷款,这意味着我们只在具有观察到的事件的数据集上有标签。例如,在信贷承销中,我们只观察已发放贷款的支付模式。如果我们在带有观察标签的训练数据上训练一个模型,它将不会得到很好的校准,因为训练数据的贷款将比测试数据集少得多,测试数据集包括所有传入的申请(假设当前的生产模型在拒绝具有高违约概率的贷款申请方面做得很好)。

这是 ML 中众所周知的反馈循环问题,恢复测试集上正确数据分布的一种方法是使用exploration——批准一些通常被拒绝的贷款申请,并增加这些贷款的权重。然而,这是一个昂贵的策略,在大得多的训练集上是不可取的。即使钱不是问题,它也会遭受其他问题,如高方差和数据集转移。同样,在这种情况下,很难训练一个现成的校准模型,而在一个精确的测试数据集上训练校准器更有效。

摘要

在这篇博文中,我解释了为什么对分类器进行校准是重要的,并讨论了何时使用校准器来校正分类器的输出是有意义的,而不是修复算法或训练数据。在接下来的几篇文章中,我将介绍训练校准器的不同方法以及评估它们的方法。

为什么对新冠肺炎死亡率的比较具有误导性

原文:https://towardsdatascience.com/why-comparisons-of-covid-19-fatality-rates-are-meaningless-db509d21e4fc?source=collection_archive---------44-----------------------

新冠肺炎的综合死亡率是特定年龄死亡率的平均值。由于各州和国家的人口统计学差异,大多数“总死亡率”的比较是误导性的或无用的。

从最年轻的人到最年长的人,新冠肺炎的死亡率相差多达 400 倍。当计算新冠肺炎的总死亡率时,总死亡率是年轻人、老年人和介于两者之间的所有人(即整个人口)的死亡率的综合。

在我们抛开测试差异后,不同州和国家的死亡率差异主要是人口统计学差异的结果,而不是疾病本身差异的结果。

这篇文章解释了为什么新冠肺炎不同地区的明显差异主要不是生物学的作用,而主要是 T2 数学的作用。

梁杰森Unsplash 上拍照

加权平均是如何工作的:新冠肺炎的例子

综合死亡率计算为特定年龄死亡率的加权平均值。(在本文中,当我说“致死率”时,我指的是感染致死率,或 IFR 。有关加权平均值的一般描述,请参见此文章。)

让我们来看看加权平均值是如何影响疾病致死率的。

假设新冠肺炎 40 岁以下人口的死亡率为 0.022%,40 岁及以上人口的死亡率为 1.04%。我没有编造这些数字;它们是根据我在本系列第 2 部分中介绍的实际费率计算的。

再假设你有两个国家:青年的美国和老年的共和国,它们的名字暗示了人口统计数据。让我们看看这种病毒在这两个国家是如何发展的。

青年的美国

在年轻的美国,100%的人口年龄在 40 岁以下。由于 40 岁以下人口的死亡率为 0.022%,这意味着整个国家的死亡率为 0.022%。这显示在表 1 中。

表 1 —假设国家和美国的新冠肺炎死亡率,其中所有人口的年龄都在 40 岁以下。总感染死亡率为 0.022%。

总死亡率是一个加权平均值,但老年人口的权重为零,因为在这个假设的例子中,老年人口占 0%。因此,整个权重为 0.022%系数,总结果为 0.022%。

一个从美国青年广播的记者可能会报道,“新冠肺炎的风险被大大夸大了。我们看到的死亡率只有五千分之一。新冠肺炎远没有季节性流感致命。”

在我们开始谈论吸烟、重症监护室床位或合并症之前,意大利的死亡率比美国相同疾病的死亡率高 53%。这种差异并不是这种疾病在这两个国家表现不同的结果;这是因为人口统计学不同。

老年共和国

与此同时,在老龄化的 T4 共和国,100%的人口年龄在 40 岁或以上。

同样,总死亡率是一个加权平均值,其中一个权重是零,但在这种情况下,年轻人口是 0%,因此 100%的权重是基于老年人口及其 1.04%的比率。如表 2 所示。

表 2——假设国家老年共和国的新冠肺炎死亡率,其中全部人口年龄在 40 岁或以上。总病死率为 1.04%。

与《美国青年》的记者不同,《老年共和国》的记者有权做出这样的报道:“新冠肺炎令人难以置信地致命,杀死了超过 1%的感染者。它的致命性是季节性流感的十倍。”

在这两种情况下,疾病是相同的,但记者们对新冠肺炎在他们国家的致命性的不同说法都是正确的,因为这些国家的人口统计数据不同。

两国的联合

现在,假设年轻的美国和老年的 T2 共和国合并成一个国家。我们可以称这个组合为美利坚合众国、,因为图中显示的人口数死亡率实际上是美国的正确数字。

为了组合这些数字,我们计算一个加权平均值,其中两个权重都不为零。如表 3 所示。

表 3-美国新冠肺炎死亡率。总病死率为 0.51%。

来自美国的记者可以准确地报道“新冠肺炎的总死亡率为 0.5%。”

对于同样的疾病,一个国家的死亡率怎么可能是另一个国家的 50 倍?

由于基于年龄的死亡率完全相同,这三个国家的总死亡率相差 50 倍。这种疾病在这三个国家没有什么不同。一个 65 岁的人从老年共和国搬到青年美国不会神奇地将他们的风险从 1.04%降低到 0.022%。不管他们生活在哪个国家,他们的风险是完全一样的。

问题在于这些国家的人口不同,因此不同人口面临的综合风险也不同。这种死亡率上的差异不是医学现象。这是一种基于加权平均值计算方式的数学现象。

与真实国家的真实死亡率比较

到目前为止,我已经给出了一个基于年龄的体重的简化视图,使数学更容易理解。为了更现实的目的,我们需要使用更小的年龄段。表 4 显示了美国更详细的基于年龄的人口和死亡率。

表 4——美国基于年龄的详细新冠肺炎死亡率。按年龄划分的感染率(IFRs)来自本系列的第 2 部分,其中描述了 IFRs 的计算方法。

在疫情早期,意大利有大量关于死亡率的新闻报道。没有充分覆盖的是意大利人口比美国人口年长多少。意大利是世界上人口最老的国家之一。它拥有 16000 多名 100 岁以上的人。

如果我把我为美国计算的相同的基于年龄的死亡率简单地应用于意大利人口,我得到的结果如表 5 所示。意大利的总死亡率为 0.78%,而美国的总死亡率为 0.51%。

表 5 —意大利基于年龄的死亡率。意大利人口的总死亡率为 0.78%。

这使得意大利的死亡率比美国高 53%。(数学上是(0.78%-0.51%)/0.51% = 52.9%。)

在我们开始谈论意大利吸烟率上升 40%的影响,或者意大利人均重症监护室床位不到美国一半的 T2 事实之前,仅仅因为人口年龄的差异,意大利在新冠肺炎的死亡率就比美国高 53%。在意大利,一个 65 岁的不吸烟且没有并发症的人和一个 80 岁的人有着同样的风险。从比例上来说,区别在于意大利 80 岁的老人是美国的两倍。

当计算中考虑了所有相关变量时,新冠肺炎的“总死亡率”可用于特定的统计目的。出于其他目的,新冠肺炎没有一个正确的总死亡率,我们需要停止迷惑自己,以为有。

从国家到州:州死亡率

同样的现象也出现在美国的州一级。美国的平均年龄是 38.2 ,但是各州的平均年龄从犹他州的 31.0 到缅因州的 44.9 不等。

从表 6 可以看出,新冠肺炎在犹他州的总死亡率为 0.36%。请注意,基于年龄的死亡率仍然没有改变。

表 6 —犹他州的新冠肺炎总死亡率为 0.36%。

由于缅因州人口较老,其死亡率为 0.63%,如表 7 所示。

表 7–缅因州的新冠肺炎总死亡率为 0.63%。

仅仅基于人口统计学的差异,缅因州的死亡率比犹他州高 75%(或 1.75 倍)。

为了形成鲜明的对比,我们可以比较一下加拿大努纳武特地区,那里的平均年龄为 26.2 岁。如表 8 所示,如果这种病毒曾经到达那么远的北方,它将导致 0.16%的总死亡率。(努纳武特目前没有新冠肺炎病例报告。)

表 8 —努纳维特的总体新冠肺炎死亡率为 0.16%。

缅因州的死亡率比犹他州高 75%,比努勒维特高 3.9 倍,因为缅因州 70 岁和 80 岁的老人比犹他州或努勒维特多得多。疾病没有什么不同,但是人群不同。

结论

媒体报道没完没了地关注新冠肺炎的总死亡率,但“总死亡率”几乎毫无意义。从年轻人到老年人,死亡率相差 400 倍,而且由于国家和州人口统计的差异,死亡率也相差 2-4 倍。

当计算中考虑了所有相关变量时,新冠肺炎的“总死亡率”可用于特定的统计目的。

出于其他目的,新冠肺炎没有一个正确的总死亡率,我们需要停止迷惑自己,以为有。

这是关于新冠肺炎死亡率的 5 集系列报道的第 3 集:

  • 第一部分 :为美国建立一个全面的基础 IFR
  • 第二部分 :基于年龄的 IFRs
  • 第 3 部分:基于人口统计的各州和各国 IFRs 的差异
  • 第四部分 :按个别年份分列的 IFRs
  • 第 5 部分:有无共病的国际财务报告准则

更多详情请访问新冠肺炎信息网站

更多美国和州级数据,请查看我的新冠肺炎信息网站。

我的背景

20 年来,我一直专注于理解软件开发的数据分析,包括质量、生产率和评估。我从处理噪音数据、坏数据、不确定性和预测中学到的技术都适用于新冠肺炎。

为什么计算熊猫和 NumPy 的标准差会产生不同的结果?

原文:https://towardsdatascience.com/why-computing-standard-deviation-in-pandas-and-numpy-yields-different-results-5b475e02d112?source=collection_archive---------36-----------------------

好奇?让我们来谈谈统计数据、人口和样本…

图片由皮克斯拜的 Gerd Altmann 提供

有多少人注意到当你用 pandas 计算标准差并与 NumPy 函数的结果比较时,你会得到不同的数字?

我打赌你们中的一些人没有意识到这个事实。即使你知道,你也可能会问:为什么?

在这篇短文中,我们将证明:

使用两个库的标准偏差结果确实是不同的(至少乍一看是这样),

讨论为什么会这样(关注总体、样本,以及这如何影响每个库的标准偏差的计算)

最后,向您展示如何使用 pandas 和 NumPy 获得相同的结果(最后,他们应该就标准差这样一个简单的计算达成一致)

让我们开始吧。

NumPy 和 pandas 的标准差

让我们首先创建一个带有权重和高度的简单数据框,稍后我们可以使用它来计算标准差。

import pandas as pddf = pd.DataFrame({'height' : [161, 156, 172], 
                   'weight': [67, 65, 89]})
df.head()

这是一个只有两列三行的数据框。我们将只关注一个列,即 weight ,并比较这个特定列的 pandas 和 NumPy 的标准偏差结果。

先从熊猫说起吧:

df.weight.std()
13.316656236958787

现在让我们使用 NumPy 做同样的事情:

import numpy as np
np.std(df.weight)
10.873004286866728

我们得到 13.31 和 10.87。它们确实是完全不同的数字,为什么会这样呢?

人口标准差

出现上述数字差异的原因是软件包使用不同的公式来计算标准偏差。最常见的标准差公式是:

其中:

σ =总体标准差

人口数量

xi =来自总体的每个值

=人口的意思

这个等式指的是总体标准差,这是 NumPy 默认使用的。

当我们收集这些数据时,实际上很少与人群打交道。更有可能的是,我们将研究人口样本,而不是整个人口本身。

样本标准偏差

当我们研究样本而不是人群时,问题会有所改变。因此,标准差的新公式为:

其中:

σ =样本标准偏差

N =样本的大小

=来自样本的每个值

=样本意思

这个等式指的是样本标准差,这是熊猫默认使用的。

总体和样本之间的差异

正如你已经注意到的,区别在于等式的分母。当我们计算样本标准差时,我们除以 N- 1 ,而不是像我们计算总体标准差时那样只使用 N

这是因为在统计学中,当从样本中计算总体标准差时,为了得到一个无偏估计量,我们应该使用(N-1)。这就是所谓的一个自由度,我们减去 1 是为了得到一个无偏估计量。

我将不讨论为什么我们应该使用一个自由度的细节,因为这是一个相当复杂的概念。如果你愿意,你可以看这个视频来更好地理解。

那么熊猫标准差是正确的吗?

所以我告诉过你,为了得到无偏估计量,你应该用 N-1。这是通常的情况,因为大多数情况下你要处理的是样本,而不是整个群体。这就是为什么熊猫的默认标准差是使用一个自由度计算的。

然而,情况可能并不总是如此,所以在使用其中一个之前,请确定您的数据是什么。同样,如果您想使用一个特定的库来实现其中一个,您可以使用参数 ddof 来控制两个包中的自由度。

让我们看一下以前的例子,在这个例子中,我们使用 pandas 得到了 13.31σ=,使用 NumPy 得到了 10.87σ。

*df.weight.std()
13.316656236958787import numpy as np
np.std(df.weight)
10.873004286866728*

您可以通过使用 ddof 参数来更改 NumPy 中的自由度,以将其更改为无偏估计量:

*import numpy as np
np.std(df.weight, ddof=1)
13.316656236958787*

您可以看到,现在结果与熊猫计算给出的默认标准差相同。

同样,您可以更改默认的熊猫标准差计算,使其不使用自由度:

*df.weight.std(ddof=0)
10.873004286866728*

总结

在本文中,我们讨论了计算样本和总体的标准差,并触及了统计学中自由度的概念。

我们已经演示了如何在 pandas 和 NumPy 中计算标准偏差,以及如何能够控制两个包中的自由度。

我希望这解决了最初的好奇心,并解释了为什么在使用一个库或另一个库时,标准差结果最初似乎是不同的。

最初发表于 aboutdatablog.com: 为什么计算熊猫和 NumPy 的标准差会得出不同的结果?,*2020 年 4 月 29 日。*

PS:我正在 Medium 和aboutdatablog.com上撰写以简单易懂的方式解释基本数据科学概念的文章。你可以订阅我的 邮件列表 在我每次写新文章的时候得到通知。如果你还不是中等会员,你可以在这里加入**

下面还有一些你可能喜欢的帖子

** [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们

初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。

towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Jupyter 笔记本自动完成

数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…

towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c) [## 当你开始与图书馆合作时,7 个实用的熊猫提示

解释一些乍一看不那么明显的东西…

towardsdatascience.com](/7-practical-pandas-tips-when-you-start-working-with-the-library-e4a9205eb443) [## Pandas 数据操作函数:apply()、map()和 applymap()

以及如何在熊猫身上正确使用它们…

towardsdatascience.com](/pandas-data-manipulation-functions-7b3519fc1370)**

为什么 CronTab 是终极数据科学后端工具

原文:https://towardsdatascience.com/why-crontab-is-the-ultimate-data-science-back-end-tool-e3f212f2b13d?source=collection_archive---------64-----------------------

为什么 CronJobs 被低估为简单自动化的支柱。

介绍

数据科学的最终目标通常是自动化。虽然使用 Python、R 或 C 可以对传入的数据和预测做到这一点,但这些语言在运行系统操作方面做得不太好,而您可能需要运行系统操作来完成某些任务。通常可能会有一个您希望每天运行的脚本,或者一个需要在特定时间执行的简单文件移动。

幸运的是,在 Unix/GNU+Linux 中,我们又有了 Bourne Shell,简称 BASH。学习 Bash 将允许您通过 ssh、管理器或本地终端调用任何应用程序服务器端。这就是为什么今天使用的几乎所有服务器都是类 Unix 的根本原因,因为 Bash 已经成为计算开发前沿的主要工具和必需品。虽然 bash 很棒,但它并不是现成的自动化脚本,为了利用 Bash 命令自动运行脚本,我们需要使用一个名为 CronTab 的工具。

CronTab 是什么?

CronTab 是一个通常在服务器后端使用的工具,它允许用户指定运行 Bash 命令的时间。这个 Bash 命令的范围可以从移动和获取文件到运行 Python 脚本,这是非常强大的。这在哪里会派上用场?我发现 CronTab 在数据科学中的一个很好的用途是运行一个脚本,该脚本重新训练并输出一个序列化的模型供端点使用。

这可能是最容易也是最被低估的重新训练机器学习模型的方式。使用 CronTab,您可以在大约 30 秒内用一个文件设置再培训。这对于在数据库中存储数据的模型,或者可以向其中添加数据的模型(如 LSTM 模型)尤其有用。

使用 CronTab

使用 CronTab 相对简单,而且相当容易。首先,您需要从各自的包管理器安装 CronTab:

sudo dnf install crontab

为了编辑 cronjobs,您需要运行 crontab -e。

crontab -e

这应该会在 GNU Nano 或 VIM 中打开一个配置文件。为了安排 CronTab,您需要将适当的时间转换为 cron 时间戳。首先,*当然意味着列表中任何值的全部。这些值按以下顺序排列:分钟、小时、日(一个月中)、月、日(一周中),当然这些都存储为整数,例如:

4 5 * * *

翻译过来就是:

"一周中每一天的每一个月的每一天的第 4 小时的第 5 分钟。"

换句话说,这将运行在

4:05

另一个简单的例子:

* * * * 2

这将在每个星期一运行,因为 2 是一周的第二天,当然是星期一。添加时间戳后,我们还需要给 cronjob 一个命令。这可以是任何 Bash 命令,但是请记住,您需要将完整的目录放入您正在使用的任何文件中。

5 * * * * . /var/www/rebuild_endpoints.sh

现在,如果您在 Nano 中,只需按 CTRL+O,然后按 CTRL+X,您的 Cronjob 就可以工作了!如果您在 VIM 中,那么只需:wq 来写文件并关闭 VIM。这就是全部了!

结论

我想强调一下这个强大的工具,因为以我的经验来看,它真的比任何人想象的都有用。我通常使用它在特定时间将新的更新模型自动放入我的端点,这样我的模型就可以用新数据进行训练,而无需维护工作。我保证,如果您熟悉服务器、Bash 和 CronTab 作为您的数据科学武库中的一个工具,您肯定不会后悔,并且您可能会惊讶于它原来是多么有价值!

为什么要首先明确数据科学模型的目的?

原文:https://towardsdatascience.com/why-crystallise-the-purpose-of-your-data-science-model-first-48f39c68cb4e?source=collection_archive---------54-----------------------

图片由名词项目和【thebluediamondgallery.com 提供

“如果给我一个小时来拯救地球,我会用 59 分钟来定义问题,用 1 分钟来解决问题。”

阿尔伯特·爱因斯坦说过。数据科学模型开发也是如此吗?

您可能同意,模型开发过程经常会失去对要解决的问题的关注,导致未满足的期望,甚至放弃项目。在数据科学项目中,十分之八的项目失败是很常见的。但是为什么会这样呢?

通常在项目开始时,没有计划好正确的涉众的识别以及与他们的紧密合作。尽管这是项目成功的基础,但它缺乏极端的关注和判断。

首先,关键是要知道如何使用这些模型,它们的结果是什么,以及这些结果将达到什么目的。确切地说,模型的目标并没有清楚地列出来。模型将被使用的端到端过程没有被清楚地阐明和记录。模型在这些过程中的影响没有得到广泛的讨论和认可。仍然有许多不清楚的陈述和未完成的工作。流程的完整大图是不可用的或高质量的。包含模型及其真实影响的流程图没有经过彻底的探索、审查和批准。它如何影响过程之外的实体没有被充分考虑。

此外,当正确的利益相关者没有参与这些讨论时,流程细节没有得到足够的引出、验证和批准。急于进入下一步,做更令人兴奋的开发模型的工作会分散开发团队的注意力。充足的时间没有在计划中被封锁,或者没有建立适当的质量关口,它使团队双方产生分歧。

所有这些不明确的目标,对这些模型使用方式的期望差距,最终会产生许多问题,最终,您可能会发现开发该模型是为了解决一个与预期不同的问题。

因此,如何确保模型的目的是绝对明确的,并且它们是相应地构建的。所有的模型实际上都是错误的——一个模型只在目的上是正确的。因此,为了建立一个合适的模型,在项目开始的时候,就需要与合适的涉众进行接触。与利益相关者的讨论必须深入和严格,以得出关于模型的目标及其使用的绝对合理的结果。它需要完整地阐述端到端流程,模型将如何使用,以及它们将如何解决问题,并经过彻底的讨论、同意、记录和批准。最后,模型在端到端流程中的影响必须得到利益相关方的验证和批准,以确保它们符合组织的价值观、原则和行为准则。

因此,明确模型的目的、它们的目标以及它们要实现的结果是极其重要的,之后的一切都要遵循这个目标。然后开发的模型将满足所有的期望,并且也是合乎道德的。

最初发表于https://www.seemasutradhar.com

为什么削减工作签证不能解决失业问题

原文:https://towardsdatascience.com/why-cutting-work-visas-will-not-solve-covid-unemployment-7bae19d4a7fd?source=collection_archive---------77-----------------------

八分之一的美国人发现自己失业了,随着新冠肺炎案件的攀升,党派分歧使国会的反应陷入瘫痪。为了应对后果,美国参议院的一些人要求特朗普总统减少移民,本月,政府暂停发放许多新的工人签证,同时寻求开始“对一系列广泛的移民法规进行永久性修改”。尽管限制的最终形式和持续时间仍不明朗,但这些政策有帮助吗?先前的研究和分析对削减工作签证以解决 COVID 失业提出了质疑。事实上,这可能会让事情变得更糟。

首先,先前的研究表明,减少移民可能不会为公民创造就业机会。早期对专业和非专业职业的调查未能发现增加限制的好处,一项以美国为重点的研究观察到“H-1B[签证]就业的大幅下降没有被本地就业的增长抵消”6[7]。特别是对于 H-1B 劳工来说,美国可能只是缺少能胜任签证持有者工作的工人,而这些人的技能绝对需要多年的学习。事实上,研究表明,总的来说,移民实际上可能会减少长期失业。综上所述,早期的研究强调了新限制的风险和有限的好处。

与去年同期相比,COVID 期间每个主要职业群体的失业率都有所上升(2020 年 5 月对 2019 年 5 月)。左边的失业人数增加了。先前和新的失业在右边。

考虑到这些先前的发现,对最近数据的分析进一步表明,潜在的收益无法证明限制工人签证的成本是合理的。在疫情之前就有很多关于这个主题的研究,因此,尽管之前的证据已经不鼓励减少这些签证,但本分析转向最近的信息。然而,即使有可能不正确的假设,即从签证持有者手中夺走的每一份工作都将流向同一主要职业群体的公民,并且随着所有签证的完全取消,失业率仅下降了不到半个百分点(13.3%至 12.9%),只有四个主要的 BLS 职业群体的改善超过一个百分点[9[10]。鉴于这一慷慨的预测将限制发挥到了极致,来自最新订单的实际数字可能要少得多**。此外,鉴于早期的发现“减少上限导致 1B 就业下降,而没有产生本地就业的抵消性增长”和典型的不可约失业率,这些令人沮丧的预测可能高估了*收益,进一步警告这些限制[ 6 ][ 11 ]。

即使对签证工人的减少做出了慷慨的预测,大多数职业群体的失业率也下降很少。请考虑一下,失业率大幅上升的职业群体(左侧)的预期收益往往非常小(右侧)。

鉴于这一低上限,仔细观察就能解释为什么签证工人的分布削弱了改善失业率的潜力。为了更深入地理解这些发人深省的预测,数据显示,只有 1/200(0.5%)的美国就业劳动力持有受调查签证*,而 BLS 追踪的大多数(82%)主要职业群体持有客工签证的比例不到 1%。这意味着美国签发的签证数量太少,不足以对 COVID 的大规模失业产生重大影响。此外,在 COVID 期间失业率高增长的职业中,外来工人很少。具体而言,平均只有 0.2%的失业大幅增加的职业(2020 年 5 月与 2019 年 5 月相比,绝对值≥5%)持有这些签证,相比之下,相对较小(<绝对值 5%)增加的职业持有这些签证的比例为 2.2%(p<0.05)。鉴于疫情期间外来工集中在表现相对较好的职业,在最需要帮助的地方几乎没有潜在收益。

持有签证的工人比例最大的职业群体(左图)失业率的增幅往往最低(右图)。例如,“计算机和数学职业”在图表的左侧排名靠前,而在右侧排名靠后。

最后,在讨论了减少外来工人的低潜在收益后,本文转向了高潜在成本。由于签证限制,一些工作可能会流向本地工人,但经济可能会失去其他工作,这是一个难以预测的成本。然而,考虑到失业和签证集中度之间的不匹配,考虑到签证工作人员*所从事的八分之一以上(13.5%)的工作目前没有足够的公民甚至有可能担任这些职位,如果将所有签证工作人员的工作给予相同主要专业群体的失业公民。当然,公民可能会改变职业,但特别是对于 H-1B 的职位,这可能需要相当长的时间,许多角色需要多年的培训。无论如何,本地劳动力供应限制了签证减少带来的收益,并为潜在风险描绘了一幅令人担忧的画面。**

圆点代表 BLS 各主要职业群体。那些失业率大幅上升的国家,持有签证的工人相对较少。这种不匹配可能会增加潜在的失业和限制。

也就是说,上述预测可能高估了收益,低估了成本。根据之前的研究结果,外来务工人员的减少可能会导致工作转移的效率低于上述预测,尤其是 H-1B 或类似签证。从观察签证上限下降的先前研究来看,与从上述假设中可能看到的情况相比,签证减少后本地就业的有限增长可能表明“低替代性”[ 6 ]。例如,其他效率低下的情况,如并非某个主要职业群体中的所有个人都具备同一群体中所有其他工作的资格,或者地理位置不匹配,可能会进一步恶化前景。这意味着这种分析可能不仅高估了收益,而且低估了生产率的损失。由于任何危及这些工作的事情,无论是缓慢淘汰还是快速减少,都需要非常谨慎,这些预测的局限性进一步强调了不可能的失业减少无法证明风险的合理性。

已审查的临时工人签证类别汇总,以及每类签证的总数(仅限于 2020 年 5 月生效的签证)。详情请见下文*。

这项分析发现,减少外来工人带来的不太可能的收益在规模上仍然有限,这表明先前研究中充分记录的风险几乎没有上升空间。这些临时签证项目为美国提供了获得多样性、人才和未来增长的重要途径,尽管有证据表明低可替代性进一步限制了这些可能的收益,但这些项目的数量太少,不可能实现美国所需的失业改善。这些工人中的许多人从事着对国家生产力和推动国家创新至关重要的工作。总体来看,这些数据和之前的研究减少了削减这些重要签证的理由。尽管人们希望在疫情期间保护美国经济,但政策制定者将需要把目光投向别处。这些违背文献建议的减少,以及如此小的不太可能的收益,根本无法抵消高的潜在成本。

感谢 克里斯库恰尔切克 史瑞亚斯贾亚娜 对本文早期草稿的建议和评论。

想要在数据、设计和系统的交叉点上做更多的实验吗? 关注我更多

源代码、资料、作品引用

*分析在以下方面利用 OFLC 数据:H-1B、H-1B1、E-3、H-2A 和 H-2B[10]。这主要是参议员和特朗普政府讨论的项目,但 OPT(授予在美国学习的国际学生短期签证)、EB-5(外国投资者)、L1(现有员工的公司内转移签证)和 H4(家属)除外[4][5][12]。

** 请注意,这些预测使用全面淘汰签证,以获得影响的“上限”。目前的政策针对新签证[5]。也就是说,所讨论的动力仍然存在,但收益和成本都较小。然而,如果增加新的法规或扩大目前的限制,政策可以发展成为一个更大的逐步淘汰。

仪表板没有死

原文:https://towardsdatascience.com/why-dashboards-are-not-dead-cdc996e99ac6?source=collection_archive---------31-----------------------

有很多很棒的新工具。为什么仪表板还挂着?

原始数据。去那里找点理智吧!(照片由克林特·王茂林在 Unsplash 上拍摄)

我刚刚在 Medium 上读到一篇关于仪表板之死的好文章。它认为专门版本的 Jupyter 笔记本比传统的商业智能仪表盘要好得多。我必须承认,我立刻爱上了这个想法!

如果你不知道这些笔记本是什么:它们基本上是一种用嵌入的代码块编写格式化文档(想想:MS Word)的方法,这些代码块可以直接在页面上执行,并在页面上显示结果。这使您可以漂亮地记录和解释整个过程,还可以直接对代码进行更改和试验,直接在页面上看到更改后的结果。这种方法在机器学习应用程序中变得非常流行,在这些应用程序中,实验确实是获得好结果的最重要的步骤之一。

如果我认为自己是一个仪表板用户,我肯定会喜欢这种方法,原因正如文章中所述:笔记本让你清楚地看到过程,并有机会玩它。

当然,我现在可能是一名管理用户,但我有 IT 和设计背景,我喜欢数学。为了让笔记本电脑方法为你的非工厂标准 CEO 工作,我认为首先需要解决一些挑战。

实际的数据源

这个总是房间里最大的。即使在这些当前的笔记本电脑出现之前,自助报告也不是什么新鲜事。it 的主要挑战过去是,现在仍然是让最终用户可以使用正确的数据源。典型的事件链是:首先,将报告工具直接附加到日常工具的生产实例中。这为用户提供了最新状态的所有数据。显而易见的缺点是,其中一个用户会通过创建非常苛刻的(或简单错误的)数据请求而使您的生产系统瘫痪。然后,将您的报告工具附加到生产系统的每日拷贝中。不错的选择。用户试图愉快地挖掘,但有些人实际上需要接近实时的数据,并对每天的转储感到不满。这可能没问题,我们不必让每个人都开心。然而,更重要的是,许多用户会发现他们不理解源系统中的数据结构。您的后端系统的关系数据库在设计时并没有考虑到报告!用户可能需要构建复杂的连接来理解数据,在许多情况下,这可能并不明显。他们可能认为他们正在按地区汇总一个月的所有汽车销售,而实际上是在汇总销售和取消的优惠。最重要的是,我们也突然开始碰到讨厌的数据保护法,并需要确保个人数据不会被大多数报告用户接触到。因此,你开始用漂亮的 OLAP 立方体构建老式的数据仓库结构,或者开始创建业务视图,使用户更容易选择正确的数据。由于对原始数据进行操作时,性能也可能会有问题,所以您也开始对其进行一些整合。

这是一项繁重的工作,但它确实允许管理用户执行自助报告。在某种程度上,他们面临着与使用准备好的仪表板时相同的困境。他们需要信任准备好的数据源。

访问权限

当谈到数据源时,我想到的是至少知道自己在做什么以及为什么做的用户。我的经验告诉我,这些不是唯一的用户类型。

我真的要看手册才能了解这个吗?—与 RajUnsplash 的公路旅行照片

进入通常使用仪表板的职位的人可能有一些很好的资格,但数据科学通常不是其中之一。通常他们喜欢玩所有的开关,并会很快对结果形成强烈的意见。因此,通过提供所有工具的笔记本风格的方法,准备好快速找到数据科学家们调整得面目全非的工作。因此,即使您打开了处理数据的可能性,您仍然希望保持一个基本的工作流程,即有人请求一个关键绩效指标(KPI ),有人创建一个不会被实验覆盖的有效且安全的版本。

仪表板的用例

虽然许多经典的仪表板可能只是因为有人说 KPI 对于执行管理评审很重要而创建的,但是一些仪表板实际上有定义的用例。它们要么显示一些由多名经理监控和讨论的商定 KPI,因此只要小组没有就新定义达成一致,就应该始终保持不变。或者用于监控外部合同中的服务级别协议(SLA)。这些类型的仪表板应该非常简洁、清晰和简单地显示所需的信息。其中一些甚至可以提供给外部供应商,所以这里没有游乐场。

斗争是真实的

虽然所有这些都与笔记本背道而驰,但到目前为止,我仍然是这个想法的忠实粉丝。

仪表板需要做好。最重要的是,一定数量的文档必须对每个用户可用。如今,利益相关者有时交换得如此之快,以至于数据人员可能永远也不会了解每一个路人。前一天你和一位首席财务官一起定义了一个 KPI,第二天另一位首席财务官就来曲解它。在我们公司制作的仪表板上,通常每个 KPI 都有一个折线图,在每个图表的一角总是有一个小问号。如果您单击它,就会看到文档。根据您的访问权限,您甚至可以直接编辑它或发出变更请求。这已经一次又一次地被证明是有价值的。

仪表板也需要是活的。如果你的目标是了解公司的内部运作,然后迭代地做得更好,你需要不断地调整你的仪表板来反映变化。此外,每次查看您的仪表板都会让您对新的 KPI 有新的想法。因此,你需要它建立在一个灵活的平台上,你需要可用的人力来实施变革。好的仪表板需要数据探索和迭代方法。在某种程度上,注定是一个笔记本。

总之:我相信仪表板在商业环境中有它的位置,并且会一直存在下去。同时,如果它们的基础是笔记本式的技术,我会很高兴。数据科学家将使用笔记本来构建流程。然后,他会将一些结果分配给仪表板视图中的插槽。然后将这种观点与人分享。根据他们的访问权限,他们的仪表板上可能有一个详细信息按钮,将他们带到笔记本。这可以是只读访问,也可以允许编辑或衍生工作。

如果这就是未来,我爱它!谁在研究它?我想跟着去!

为什么数据在数据科学问题中被表示为‘向量’?

原文:https://towardsdatascience.com/why-data-is-represented-as-a-vector-in-data-science-problems-a195e0b17e99?source=collection_archive---------11-----------------------

向量代数在数据科学中的应用

照片由安托万·道特里Unsplash 上拍摄

科学和数学被用来描述我们周围的世界。有许多量只需要一次测量就能描述出来。例如线的长度、任何形状的面积或任何表面的温度。这样的量称为 标量 。任何可以用数字(正数或负数)表示的量都叫做标量。该值被称为大小

另一方面,有些量需要至少两次测量来描述。除了大小,它们还有一个相关的“方向”,例如速度或力。这些量被称为“矢量”。

当我们说一个人跑了 2 公里,这是一个标量,但是当我们说一个人从他的初始位置向东北跑了 2 公里,这是一个矢量。

假设您正在收集某个班级中一组学生的一些数据。您正在测量每个学生的身高和体重,为 5 名学生收集的数据如下:

这里的每一个测量都是一个标量。所以单独看身高或体重是标量。

然而,当你把每个学生作为一个整体来观察时,即每个学生的身高和体重加在一起,你可以把它看作一个向量。

在这个表示中,每个学生都是一个向量。它由两个特征描述:身高和体重。现在,根据标准定义,在这个向量中没有真正的“方向”。但是,当我们在多个维度上表示数量时(在这种情况下,是 2——身高和体重),就会有一种相对于彼此的方位感。因此,当我们观察 5 个学生(5 个向量)时,他们对彼此有一个大小和“方向”的概念。

因为大多数有用的数据集总是有不止一个属性,所以它们都可以用“向量”来表示。给定数据集中的每个观察值都可以被认为是一个向量。一个数据集的所有可能的观测值构成了一个向量空间。这是一种很奇特的说法,说外面有一个空间,每个向量在那个空间中都有自己的位置。

将数据表示为向量的好处是,我们可以利用向量代数来寻找数据中的模式或关系。

向量有什么帮助?

莎伦·麦卡琴在 Unsplash 上的照片

看向量空间中的向量,可以快速比较,检查是否有关系。例如,你推断出 相似的 向量之间的角度较小,即它们的方向彼此接近。在我们的样本数据中,学生(5.4,54)和(5,50)非常相似。

向量之间的角度表示它们之间的“相似性”。相同方向(接近 0 度角)的向量是相似的,而相反方向(接近 180 度角)的向量是不相似的。理论上。如果向量彼此成 90 度(正交),则它们之间没有关系。有没有一个数学函数可以捕捉到这种关系?

想想三角函数——余弦。

上面的描述听起来可能有点晦涩难懂。所以,不要忘记,我们在这里谈论的是数据的 【表示】 ,以这种方式帮助我们找到一种关系或模式。向量形式就是这样一种表示。

余弦相似性

余弦相似性是一种度量,它给出了向量之间角度的余弦。它可以用两个向量的“点积”来计算。数学上,

****

所以现在每当你在数据科学中听到向量,想想它们之间的点积和夹角余弦。你会看到这些向量有多相似或不相似。

文本矢量化

照片由凯尔·格伦Unsplash 上拍摄

将数据集转换或变换为一组向量的过程称为矢量化。在属性已经是数字的情况下,将数据集表示为向量更容易。文本数据呢?

“单词嵌入”是将单词或文本表示为向量的过程

有许多将文本转换/表示为向量的技术。最简单的方法之一是计数矢量器。下面是查尔斯·狄更斯的《双城记》中前几行文字的片段:

那是最好的时代,
那是最坏的时代,
那是智慧的时代,
那是愚昧的时代

如何将上述 4 个句子转换成向量:

****第一步:从你的文本集合中获取独特的单词。你所拥有的全部文本被称为“语料库”

这里唯一的单词(忽略大小写和标点)是:

****['age',
 'best',
 'foolishness',
 'it',
 'of',
 'the',
 'times',
 'was',
 'wisdom',
 'worst']****

这是来自包含 24 个单词的语料库的 10 个单词的词汇表。

****第二步:为每个句子创建一个由 10 个零组成的列表

****第三步:对于每个句子,开始一个一个的读单词。计算每个单词在句子中的总出现次数。现在确定这个单词在上面的词汇表中的位置,在那个位置用这个计数代替零。

对于我们的语料库,我们得到的向量是:

“这是最好的时代”= [0 1 0 1 1 1 1 1 0 0]

“这是最坏的时代”= [0 0 0 1 1 1 1 1 0 1]

“这是智慧的时代”= [1 0 0 1 1 1 0 1 1 0]

“那是愚蠢的时代”= [1 0 1 1 1 1 0 1 0 0]

Python 中的代码:

****from sklearn.feature_extraction.text import CountVectorizer****documents = [‘it was the best of times’, ‘it was the worst of times’,’it was the age of wisdom’,’it was the age of foolishness’]****vectorizer = CountVectorizer()
sentence_vectors = vectorizer.fit_transform(documents)****print(sentence_vectors.toarray())****

输出:

一个纯 Python 代码(不使用任何内置库)来计算两个句子之间的余弦相似度:

**import math
import re
from collections import CounterWORD = re.compile(r”\w+”)def cosine(vector1, vector2):
 intersect = set(vector1.keys()) & set(vector2.keys())
 numerator = sum([vector1[x] * vector2[x] for x in intersect])sum1 = sum([vector1[x] ** 2 for x in list(vector1.keys())])
 sum2 = sum([vector2[x] ** 2 for x in list(vector2.keys())])
 denominator = math.sqrt(sum1) * math.sqrt(sum2)if not denominator:
 return 0.0
 else:
 return float(numerator) / denominatordef text_to_vector(text):
 words = WORD.findall(text)
 return Counter(words)sentence1 = “it was the age of foolishness”
sentence2 = “it was the age of wisdom”vector1 = text_to_vector(sentence1)
vector2 = text_to_vector(sentence2)cosine = cosine(vector1, vector2)print(“Cosine Similarity:”, cosine)**

“那是智慧的时代”和“那是愚蠢的时代”之间的余弦相似性是

余弦相似度将是 0 到 1 之间的一个数。结果越接近 1,相似度越大。

0.83 的值表明这个例子中的两个句子非常相似。这是因为单词- 'it ',' was ',' the ',' age ',' of '在两个句子中重复出现。然而,最后一个词“智慧”和“愚蠢”完全改变了句子的意思,它们在这方面非常不同。有什么问题?问题在于使用的“矢量化”方法。为了捕捉句子的语义,我们需要使用更高级的单词到向量的转换技术。我将在下一篇文章中介绍处理这种情况的另一种矢量化技术。

结论

本文的目的是提供使用向量表示数据背后的直觉。数据科学或机器学习的动机是找出观察值之间的模式和关系。将数据可视化为向量并使用向量代数来操作它们,解决了很多数据问题,尤其是在自然语言处理、文本分类和文本分析领域。

以哲学的角度来结束这篇文章-

“我们都是带菌者。我们许多人仍在寻找方向”

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

  1. 微积分——变化的数学
  2. 发现数学思维
  3. 人类学习 vs 机器学习

为什么数据领导者必须在新冠肺炎期间进攻

原文:https://towardsdatascience.com/why-data-leaders-must-play-offense-during-covid-19-38759828d41a?source=collection_archive---------63-----------------------

随着疫情迫使组织进行数字化转型,首席数据和分析官必须迎接挑战

在短短几个月内,新冠肺炎取得了顶级商业领袖奋斗了几十年的成就:该病毒成为了组织数字化转型的意外催化剂。随着人与人之间的身体接触越来越有限,这个世界正在迅速接受一种各种意义上的数字生活方式。

然而,社会关闭也引发了全球经济衰退。与之前的衰退不同,这次衰退对企业造成了双重打击。在一端,市场变得脆弱,客户正在消失。另一方面,供应链中断和劳动力转移带来了内部挑战。

以下是技术领导者必须如何应对,以迅速重塑他们的业务。

数据在数字化转型中的作用

在数字化企业中,数据是连接从供应链到内部运营再到面向市场的一切的单线。从这一数据价值链中获得洞察力的组织已准备好脱颖而出,成为市场领导者。

最能从数据价值链中获得洞察力的组织会脱颖而出。

德勤研究了表现出最高分析成熟度的几家大公司。研究发现,这些公司中有近一半在过去的一年中大大超过了他们的商业目标。为了超越竞争对手,德勤建议企业领导人更广泛地部署分析,并投资于数据驱动的文化。

受益于数据驱动领导力的不仅仅是企业。疾病控制和预防中心 (CDC)在美国政府应对冠状病毒危机中发挥着关键作用。在快速上升的健康危机中,该组织感到需要一个数据领导者来确保更快的国家响应,并发出招聘首席数据官(CDO)。

随着数据和技术领导力变得越来越重要,CDO 或首席分析官(CAO)等数据领导者的职责应该是什么?

数据领袖应该打进攻还是防守?

照片由 Mpho Mojapelo 在 Unsplash 上拍摄

今年早些时候,我在 CDAO APEX 冬季活动中主持了一场由来自不同行业的首席数据和分析官(CDAO)参加的小组讨论。2020 年 1 月最大的担忧是,许多组织认为他们的领导团队不需要以数据为中心的角色。为这一角色配备人员的组织似乎没有就工作职责达成一致。

在这一片混乱中,数据领导者在幕后悄悄地扮演着配角。

疫情让人们关注 CDAOs 的作用。

公众意见分为两个责任领域,通常称为“防御”和“进攻”活动。从防御的角度来看(可以说是更广泛持有的观点),CDAOs 被期望拥有数据的收集、管理和存储。他们的任务是数据治理和实现对信息的轻松访问。他们通过数据安全和法规遵从性计划来保护信息资产。

另一方面,一些组织指望 CDAOs 发挥进攻作用——促成创收活动。在这些组织中,他们被期望在产品改进、客户参与和业务创新方面提供帮助。

数据领导者的角色发生了怎样的变化?

照片由 Fachry Zella Devandra 在 Unsplash 上拍摄

随着疫情推动数字化转型,形势在短短几周内就发生了逆转。突然之间,数据在组织中有了新的重要性,CDAOs 的角色也立即受到关注。

在当前的全球封锁中,数据可以发现业务中的瓶颈,并帮助领导者快速关注眼前的优先事项。通过揭示客户行为的转变和市场变化,数据可以在当今不确定的经济中提供更好的可见性。

今天的数据领导者正在通过利用内部和外部数据并促进从这些资产中获得洞察力来领导组织计划。

这次危机中的进攻和防守任务

在整个组织中,数据领导者正在推动战略计划,不仅要确保业务连续性,还要确保收入增长。以下是他们承担的一些主要职责:

通过监控供应链的多个层级,帮助识别原材料中断。组织正在重新审视他们生成的数据,并重新利用这些数据来远程监控机器,这项任务以前需要现场工作人员完成。

通过确定****营销的替代渠道,帮助组织的产品适应遥远的世界。随着大多数产品在网上提供,数据正在帮助塑造产品功能,并根据使用模式制定路线图。

解决客户的棘手问题并监控他们的数字化采用情况。来自 Google Trends 等公开来源的数据正在帮助组织了解消费者行为的转变,并获得需求上升的类别的早期信号。

在 CDAO 的投资组合中,这些显然是令人不快的职责。数据领导者正在通过将这一新角色与一些防御活动进行对比来平衡这一角色,这些防御活动是为社交距离时代量身定制的,例如:

  • 确保在企业范围内访问更新的客户情报源和公共数据流。
  • 扩大数据治理的范围,以支持分布式工作人员,同时确保安全性和法规合规性。
  • 通过帮助解决员工的协作和生产力挑战,简化向远程工作的过渡。
  • 通过利用来自协作工具和应用程序使用的数据流,实现高绩效的虚拟团队。
  • 根据后 COVID 时代的需求调整法规合规性。
  • 通过使用人工智能驱动的计算机视觉算法,探索数据可以帮助满足新需求的方式,例如保持社交距离。

托马斯·塞勒在 Unsplash 上的照片

数据领导者必须在前线承担进攻责任,这是当前的需要。通过平衡他们对防御任务的关注,他们可以总结他们的投资组合,并继续发挥关键的领导作用。

尽管存在诸多负面影响,但新冠肺炎危机为领导人提供了一个展示数据真正价值的黄金机会。现在是技术和数据领导者采取攻势,利用这一势头让他们的组织坚定地走上数据驱动之路的时候了

这篇文章是企业家项目中第一篇 发表的 。增加了插图。基思·约翰斯顿在 Unsplash 上拍摄的标题照片。

为什么在数据和人工智能优先的时代,数据管理仍然是一项挑战

原文:https://towardsdatascience.com/why-data-management-remains-a-challenge-in-the-data-and-ai-first-era-12c563599c1c?source=collection_archive---------37-----------------------

意见

公司在数据管理方面面临哪些挑战,以及如何着手应对这些挑战

詹姆斯·哈里逊在 Unsplash 上拍摄的照片

数据是现代组织的燃料。随着 it 在整个企业中的扩散,越来越多的人将它集成到他们的业务和运营决策中。这意味着,拥有强大的数据管理策略和基础架构对于每个数据驱动型企业的成功至关重要。

然而,即使我们正在向数据优先和人工智能驱动的组织转变,数据管理仍然是一个需要解决的基本挑战。如果公司没有考虑如何管理数据的基本原则,他们就无法在数据创新和人工智能部署方面取得进展。在这方面,下面我们将探讨什么是最普遍的挑战,以及组织如何应对这些挑战。

突出的挑战

由于遗留系统和缺乏特定领域的能力等一些持续存在的障碍,组织无法部署和扩展他们的人工智能计划。在企业组织中,使用传统数据和系统尤其是一个问题,因为数据存储在不同的孤岛系统中,很难在通用数据平台中找到和聚合数据,以加快数据驱动的决策。

谈到特定领域的能力, BARC 调查报告称,企业严重感受到外部知识的缺乏和市场上存在的技能差距。寻找合适的技能是一个普遍的挑战,因为公司的数据管理需求无法通过使用外部资源来完全满足。

此外,如果没有明确定义的数据治理政策和规则来管理数据的使用和数据操作,数据管理就无法正常进行,这是大多数组织仍在摸索的问题。在这里,我们不能忽略提到一个数据驱动型公司的首要敌人,那就是糟糕、不一致和糟糕的数据质量。随着组织收集的数据量大幅增加,由于数据源的多样性、难以集成的各种数据类型、庞大的数据量以及数据变化的快速步伐,确保数据质量变得更加困难。

蒂尔萨·范·迪克在 Unsplash 上拍摄的照片

所有这些挑战,加上数据和高级分析对于支持复杂的业务流程变得越来越重要,给 IT 部门带来了更大的压力,他们需要提供更快、连续、可靠、安全和更高质量的数据来支持不同职能部门的分析需求。

所有上述情况都表明,迫切需要对公司的数据管理战略、平台和基础设施进行改造和彻底检查,以便在数据和人工智能优先的时代茁壮成长和生存。如果我们没有现代数据战略和平台形式的正确基础来支持它,我们就不能谈论将人工智能部署到生产中。

照片由克里斯蒂娜·莫里洛派克斯拍摄

如何开始成功的数据管理过程

数据管理是一个复杂的过程,包括与我们如何收集、管理、存储和分析数据相关的各种主题,如数据安全性、数据质量、MDM、数据仓库、数据集成、数据库管理。每一个领域都需要公司中相关利益方的特别关注。

但是在这里,我们将概述如何开始创建良好数据管理计划的几个最佳实践,尤其是在考虑将数据迁移到混合或云环境时。

首先也是最重要的一点,专家建议建立整个计划的目标是至关重要的。就像任何其他转型项目一样,将数据管理集成到流程中应该符合数据战略的最终目标。此步骤的一部分是定义您的具体需求,这些需求应该清楚地传达给您的内部 IT 部门或 IT 咨询公司。您的数据管理计划应包括您处理的数据类型、您的存储需求、需要实施的任何限制以及所需的安全措施。

一旦定义了您的目标和规范,就该对您的整个数据进行审计了,如果按照类型和来源进行分类,这很容易做到。为了更清晰地形象化,建议您创建一个流程图,展示数据进出企业的路径。

在决定数据迁移策略和解决方案之前,您应该花时间定义您的数据和数据库需求。下一步是定义如何记录您的数据,以及需要什么样的记录。定义元数据——意味着收集、处理和解释数据的内容、地点、时间、原因和方式——使数据和文件能够被发现、使用和正确引用。

照片由像素皮克斯拜拍摄

你的下一步应该是建立评估数据质量的流程,并在出现错误时进行修改。创建数据存储和保存策略是该过程中的关键步骤,因为它应该考虑到从成本到安全性再到合规性的方方面面。

在定义您的数据策略时,这是下一步,您应该确保它们涵盖所有之前的步骤。制定任何许可和共享协议,以及媒体禁运政策和法律或道德限制,也应在这一阶段完成。

您的计划还应阐明参与数据收集、数据输入、质量控制、元数据创建、备份、数据准备和归档提交的所有员工的所有数据相关任务的角色和职责。

最后,不要忘记为您的迁移和持续数据管理活动制定预算。

数据管理案例研究

以上是关于开始数据管理计划时要考虑的最重要的事情的简短指南。为了了解它在实践中是如何做到的,让我们探索一些在成功的数据管理方面有所作为的创新公司。我们将看两个来自数据 2020 峰会的演讲者演示,它们展示了成功的数据管理之旅和方法。

Hyperight AB 在数据 2030 峰会上的照片/版权所有

H & M 集团前数据管理架构师 Alex Astrogold 介绍了 H & M 集团在利用动态信息模型和解决方案实现业务转型的过程中的数据管理历程。Alex 一步步讲述了他们的数据战略和愿景是如何变化的,他们实施的引入主数据管理和透明数据质量原则的新系统,以及他们长期数据治理的发展。H & M 集团的数据管理计划促成了定制数据战略办公室的成立,该办公室将协助 it 部门并支持所有数据计划。在这里阅读 H & M 的数据管理之旅的详细总结。

Hyperight AB 在数据 2030 峰会上的照片/版权所有

另一个成功案例研究来自EMEA 联盟 Reltio 高级总监 Kate Tickner ,她在去年的数据 2020 峰会上发言。Kate 的演讲侧重于现代数据管理方法,重点是推动数字客户体验经济取得更大成功。

正如 Kate 所指出的,今天的现代消费者希望他们对某个品牌的体验是方便、有见识、高效和友好的。如果公司的员工手边没有消费者的信息,这是很难实现的。这意味着,我们在上一部分中谈到的所有步骤都应该针对您的客户数据进行整理,以便能够在客户体验时代完成。然而,旨在提供客户服务的传统系统无法提供及时且可操作的客户洞察——公司需要现代技术来支持客户的自动化行动。这将我们再次引向重塑公司数据管理战略、流程和基础设施,以实现数据驱动的转型。

为数据和人工智能设置您的数据管理-第一个十年

为了应对创建数据管理战略和平台的所有挑战和需求,使之与企业愿景保持一致,并实现敏捷、协作、受监管、面向未来、道德和客户驱动的方法,我们准备了一项计划,旨在解决设计面向未来的数据管理战略和技术堆栈时最关键的支柱:数据治理、数据质量、支持云或多云的基础设施和数据运营

Data 2030 峰会 是一场圆桌会议,将数据管理社区聚集在一个平台上,讨论如何通过为新的十年建立现代数据管理战略和平台,在整个企业中实现更快的数据创新和人工智能部署。

原载于 2020 年 10 月 5 日 Hyperight.com**的

为什么数据标准化对非线性分类器很重要

原文:https://towardsdatascience.com/why-data-normalization-is-important-for-svm-classifiers-49ca0d8e4930?source=collection_archive---------10-----------------------

数据归一化对线性和非线性 SVM 分类器精度性能的影响

照片由像素上的 Pixabay 拍摄

术语“标准化”通常指术语标准化和规模化。虽然标准化通常旨在重新调整数据,使其均值为 0,标准差为 1,但调整侧重于改变数据集值的范围

正如在[1]和许多其他文章中提到的,当特征具有不同的范围时,需要数据标准化。例如,当我们有体重和身高特征时,归一化是很重要的,因为它们的取值范围有不同的尺度:例如,体重为[~ 45–130Kg]而身高为[~ 120–230cm]。

然而,许多文章没有提到数据标准化也很重要的其他应用。通常,在这些应用中,由于所有特征的相似尺度或每个特征的相对信息,数据标准化可能不那么明显或容易实现。频域中的时间序列就是一个例子,因为,首先,原则上频率幅度的尺度是相同的,其次,因为每个频率(特征)的归一化可能导致相对信息的丢失。

那么,在什么情况下数据规范化是必要的呢?为了回答这个问题,本文展示了一个说明性的例子,该例子比较了线性分类器(具有线性核的 SVM 分类器)和非线性分类器(具有 RBF 核的 SVM 分类器)在实施数据归一化之前和之后的性能

正如将要观察到的,结果表明实现数据归一化不会影响线性分类器的精度,但是它会显著影响非线性分类器的精度。

文章结构:

本文首先介绍 Python 代码,并简要描述它的用途。然后,给出了解释为什么数据的规模影响非线性分类器的数学方程。最后,它会根据数据集的规模显示超参数调整后非线性分类器的新结果。

如果你对 SVM 量词感兴趣,强烈推荐阅读:

Drew Wilimitis,支持向量机中的内核绝招 (2018),中

关于 SVM 分类器的进一步信息在本文的结尾有所说明(参考文献。[3]、[4]和[5])。

导入 Python 库:

导入 Python 库

建立数据集:

数据集是使用 make_blobs() 函数创建的,该函数生成具有高斯分布的点的 blob。生成了具有 1000 个数据的两个 blobs 数据集。数据集的中心在(100,100)和(200,200)上,它们的标准差是 120。

生成两个各向同性高斯斑点数据集

实现数据标准化和缩放:

正如[2]中所解释的,有不同的方法来标准化数据。对于本文,数据集使用最小-最大归一化技术进行归一化。该方法将每个特征的最小值调整为 0,将最大值调整为 1。根据以下公式,其余的被转换成 0 到 1 之间的十进制数。

最大-最小归一化:I =行(数据),j =列(要素)

为了研究尺度效应对分类器结果的影响,对原始数据进行了数据归一化,并对归一化数据进行了放大(50 和 300 倍)。

向上缩放数据集值=数据集值*缩放值

标准化数据

放大数据

所有生成数据的曲线图如下:

图 1:生成的数据图。

声明并运行线性核 SVM 分类器:

使用 Python 上的 sklearn 库创建了具有线性内核的 SVM 分类器。一半的数据用于训练,另一半用于测试。

对 x_orig 数据运行 SVM 线性核分类器的代码示例

线性分类器的结果如图 2 所示。可以看出,规模并不影响其性能。

图 2:精度≈ 0.71

声明并运行具有 RBF 内核的 SVM 分类器:

具有 RBF 核的 SVM 分类器的方法类似于上面提到的方法。首先,使用 Python 上的 sklearn 库创建分类器。然后,一半的数据用于训练它,另一半用于测试它。

与线性分类器相比,这个非线性分类器有两个超参数需要调整: gammac 。当超参数 gamma 被设置为常量值 1 时,分类器使用多个 c 值迭代 20 次。

绘制径向基核 SVM 分类器的精度图

非线性分类器的结果如图 3 所示。该图的坐标轴是:

  • x 轴:超参数 c 的值
  • y 轴:分类器的精确度

如图 3 所示,标度确实影响精度性能,通过归一化数据获得更高的精度。

图 3:不同数据集的 RBF 核分类器的精度性能

总之,线性核不受数据的放大和归一化的影响,而 RBF 核 SVM 分类器的精度高度依赖于数据集的规模。

对于这个特定的分类器,这种依赖性来自于在实现内核技巧时使用的欧几里德距离:

对于这个特定的核,指数的值与欧几里德距离的平方成比例地增加。因此,为了提高具有较大比例的数据集的精度,当比例放大 50 倍和 300 倍时,伽马值应分别反向减小 5 倍和 30 倍。

绘制不同伽马值的 RBF 核 SVM 分类器的精度

图 4:使用不同 gamma 值的 RBF 核分类器的精度性能

如图 4 所示,一旦超参数根据数据集的比例进行了调整,放大数据的精度与归一化数据的精度相同。

如果你喜欢这篇文章,请考虑 订阅 。你将获得我所有的内容+所有其他来自牛逼创作者的文章!

参考文献:

[1] Urvashi Jaitle,为什么数据规范化对于机器学习模型是必要的 (2018),Medium

[2]张,理解机器学习中的数据归一化 (2019),中

[3] 内核 SVM (2015),堆栈交换

[4] Brandon Rohrer,支持向量机如何工作 (2017),YouTube

[5] CodeEmporium,支持向量机 (2018),YouTube

“为什么是数据科学?”—非数据科学家简介

原文:https://towardsdatascience.com/why-data-science-an-introduction-for-non-data-scientists-8d9bf378f459?source=collection_archive---------50-----------------------

让我们给流行词世界带来一些结构。

照片由乔丹·克里斯蒂安Unsplash 拍摄

当我开始“数据科学”之旅时,世界很简单:

我学习数学。我完成了数学硕士学位。我攻读了数学博士学位。

数据探索世界分为数学、运筹学和计算机科学。

没人谈论数据科学。

为什么这样介绍?

今天,世界更加复杂。

在我关于数据分析的讲座中,学生来自许多不同的部门和学科。有些人有数学或物理背景,有些人来自计算机科学。一半的与会者来自工程、自然科学、管理和人文学科。

一些学生已经参加了这个领域的讲座,其他人是专业人士,对一些人来说,这是第一次接触这个主题。

这种多样性完美地反映了当今数据科学的多元化。

我的讲座是学术世界和朴实的实践之间的桥梁。

学生们有很多很多问题,尤其是关于这个领域本身。

我应该从哪里进入职业世界?外面有什么职位?找工作时要考虑的关键是什么?什么是工作的现实,什么是广告?

所以,我决定总结并向更广泛的读者发布它们。

我在这个领域已经工作了 20 多年了。我的工作一直与数据和数据管理有关,理解它们,提取见解,预测,优化,学习,自动化,最后,为决策提供基础。

在写博士的时候,我在统计研究所,有机会见到很多统计学、模式识别和机器学习领域的大腕。统计学和机器学习在当时几乎是同义词,数据科学还不存在。

所有关于这些领域之间差异的解释都是后来才出现的。

例如,在统计研究所工作时,研究有不同的角度。当博士候选人完成博士学位时,他/她可以选择他/她想获得博士头衔的学科。一些人选择了计算机科学,一些工程,其他环境科学,或者——像我一样——数学。

所以,我是在告诉你,在过去的 20 年里什么都没有改变吗?

当然不是。

很多事情已经发生了变化,并且仍在发展。让我们开始看看统计学、机器学习、人工智能和计算机科学最初的相互作用,以及它是如何演变成数据科学的。

统计学,计算机科学,还是机器学习?

先说统计。您可能会将统计数据大多与推断(基于数据寻找人口的属性)和预测联系在一起。这对于大约一半的统计世界来说是正确的。另一半稍微复杂一点,可以写满一本书。我只关注非常有限的摘录。

在统计学中,有两个学派,频率学派和贝叶斯学派。

非常笼统地说,频率主义者认为长期的发生频率是定义概率的唯一真理。通过重复测量,任何测量值的频率给出了该值的可能性。一切都只能根据这些数据来估计。真实值是未知的,但最终是任何测量值。人们在没有任何预先假设的情况下计算频率。

贝叶斯主义者认为概率是一种信任度和可信度的度量。数据是现实,并调整信念,即先验假设。我们对一个事件的了解与概率有关。这就是贝叶斯公式中的条件的来源。对于贝叶斯人来说,未知的“真实”价值可以用概率来描述。

一个比另一个好吗?不,不是的。它们只是我们世界的两个视角。

当然,还有一个交叉点:经验贝叶斯。

在经验贝叶斯中,我们从数据所代表的真实证据中学习。或者简而言之:算法正在从数据中学习——统计学习。

我们现在转向机器学习。从五十年代到八十年代,机器学习是一个与人工智能密切相关的领域。像最初的人工智能一样,机器学习基于逻辑、符号和基于知识的方法。但是为了解决实际问题,需要基于概率的方法。因此,在 90 年代,机器学习远离了最初的人工智能,专注于使用概率论和统计方法的实际的、基于数据的学习,并在研究和合作中靠近这些领域——不仅是在方法论上,也在个人合作中。它成为了自己公认的学科,并发展成为今天基于数据的学习算法。

我的博士学位研究的是非参数经验贝叶斯世界,具有潜在的,即隐藏层,我开发了一种从数据中学习的新算法。是统计学,也是机器学习。

你可以看到“统计学”和“机器学习”的区别是非常重叠的,而且往往没有分离的可能。

一个比另一个好吗?

号码

从一个领域到另一个领域的过渡是流畅的。每门学科都有它的优点和缺点,交叉施肥是常见的。

差异化重要吗?

嗯,是也不是。

不。最后,“标签”并不重要。重要的是方法、应用,以及最重要的价值创造。

是的,有关系。像每个新兴领域一样,机器学习、深度学习和数据科学是新的发展、新的方法,并包含新的哲学。

拒绝新的、边界移动的想法和发展是人类的天性。

要获得某个专业领域的认可和欣赏,你需要展示你工作的价值。你必须给它贴上不同的标签,因为人们想要一个身份。它代表了新的哲学,给了人们一个家。

这是一个自然而有效的发展。变化和发明是我们的日常生活,应该被接受。

科技的进步

现在,让我将数据科学带入游戏。

过去 30 年发生了很多技术变革:

  • 计算能力的指数增长
  • 数据存储可能性的指数增长
  • 这些技术成本的指数下降

技术变得大众负担得起,随之而来的是大量数据的产生。

我们不再需要对信息的产生、共享和优化小心翼翼。我们可以生产、传输和储存它。

所有这些都为新的可能性提供了机会。

在九十年代,由于技术的进步,机器学习可以找到它的目的地。

海量的数据使我们有可能从中学习,并使我们能够开发新的算法来解决高维问题。

“[……]许多事情都变了。一个只是数据量[……]。数据量增加了,复杂性也增加了,方法也增加了[…]。方法变化如此之快;你还必须学会新方法[…]”—诺贝尔奖得主爱德华·莫索尔在被问及科学的本质是否已经改变时

数据科学的新范式

由此,处理数据的范式发生了转变。它在科学界发生了变化,在商界也发生了变化。这个世界可以把结果完全建立在数据和数据中的许多模式的基础上。统计学和机器学习都是这个故事的一部分。

在商业中,理解向数据和基于事实的决策发展。

这种变化需要一种新的思维方式:一种基于数据的深思熟虑的科学的新范式,以在研究、科学、和商业中做出决策:数据科学。

了解了所有的背景和历史发展,人们是否将其命名为机器学习、统计学或数据科学并不重要。相关的是作品的内容,而不是标签。

现代资料工作

我们已经看到了数据科学包含的各种各样的主题(通常令人困惑)。

现实中的数据科学是什么?

我通常使用处理数据的典型步骤进行解释。

现代、简化的数据架构(数据架构基于规则、策略和治理定义数据和信息流)包含以下步骤:数据源、数据捕获、数据存储、数据监管、数据探索、数据供应和数据消费。

Isabelle Flueckiger 制图

这些话背后的含义是什么?

数据源:处理关系数据、流数据、结构化数据和非结构化数据的不同数据源。

数据捕获:在数据暂存中工作,一个临时存储位置,即具有云、文件共享、拖放区,以及在数据摄取中工作,具有批处理、临时和实时数据。

数据存储/储存库:数据存储层的各种选项,用于存储原始数据、过程数据和管理数据,例如云、NoSQL、数据集市等。

数据监管:包含数据和元数据的标准化、验证和保护,以管理和维护它们。

数据探索:利用统计学、高级分析和机器学习探索数据,确保数据民主化。

数据供应:提供访问和工具,创建、准备和启用流程,以便将数据提供给用户。

数据消费:报告、商业智能、数字营销、客户关系管理(CRM)、数据分析、机器学习、应用程序、机器人和商业分析。

这个列表显示,我们有相当多的不同数据任务,直到最后,我们可以从数据中产生和呈现洞察力。

对于每一步,我们都需要专业的数据专家。

根据你的谈话对象或公司如何宣传数据科学家的角色,每个阶段都可以作为数据科学的工作来推销。

关于数据科学包含什么的不同观点有:

No 1: 数据科学包括从数据源到消费的所有这些数据步骤。

No 2: 数据科学包含从数据捕获、数据监管、数据探索、数据供应到数据消费的任务。

No 3: 数据科学仅包含数据监管、数据探索和数据消费的部分,即它包括数据准备、数据清洗、机器学习、高级分析和构建数据产品。

取决于你和谁说话,有一个或另一个定义被使用。

技术咨询大多意味着第一。

加州大学伯克利分校排名第二。

3 号零件在市场上卖得很好。这是花式方法的广告,趣味因素的辐射。所有的“数据科学”MOOC 课程和招聘广告都位居第三。

注意:这是目前数据科学领域最多 20%的工作!

可以观察到数据科学家在就业市场上的高度波动,这是事实。其中一个主要原因是这份工作不符合人们的期望。期望的不匹配通常是无意造成的,而是由于缺乏对数据科学领域的了解。

你可以找到许多想要雇佣“数据科学家”的直线经理,因为他们认为,有了一个小型的数据科学家团队,他们的公司就可以拥有谷歌和亚马逊。但他们中的许多人不知道数据科学包含什么,不少受雇的数据科学家最终成为拥有 Excel 文件的业务分析师。

基于我的实践经验和模糊不同数据主题之间界限的技术进步,我倾向于将数据科学定义为第一。

这对你来说意味着:不要只相信工作简历中的漂亮描述或直线经理告诉你的话,这一点永远是至关重要的。

听起来很糟糕?

问,问,问!

问,直到你发现提供的“数据科学”工作包含什么。我并不是说所有非机器学习的工作都不令人兴奋。相反,有许多令人兴奋的高薪数据工作。

好消息是:这使得许多人可以进入数据科学领域。

你不需要成为机器学习的博士和伟大的程序员。你不需要和所有这些编码书呆子竞争。找到自己的利基进入。然后,发展自己。

连接圆点

把这些都结合起来,听从我的建议:

建议 1:不要被所有的流行语和解释所有细微差别的人所迷惑。获得主题的大图,探索你感兴趣的地方,从你的能力开始。

忠告 2:当心广告!如果你正在寻找进入数据科学领域,不要在意它是如何被标记的。透过表面,问,问,问。像四岁小孩一样问问题,总比期望不一致好。

建议之三:找到自己的利基。不是所有数据科学领域的人都需要是机器学习极客,优秀的程序员,也不需要有学术背景。探索不同的入门选择,以此为起点,在这个伟大学科的不同方向上发展自己。

建议四:玩得开心!作为一名数据科学家,并不是所有的日子都令人兴奋。思想开放,把一切都当成学习新东西的机会。在这个领域你可以得到很多乐趣。

为什么数据科学是我获得的最大技能

原文:https://towardsdatascience.com/why-data-science-is-the-greatest-skill-i-ever-obtained-a8f9bdf8517e?source=collection_archive---------12-----------------------

为什么机器学习和统计学给了我生活中真正的优势。

在我的一生中,我对许多我喜欢做的不同事情感兴趣。我从小就对计算机感兴趣,编程也是如此。我也培养了一些爱好,比如演奏音乐和烹饪。我特别喜欢曼陀林、扬琴、吉他、小提琴、钢琴,但最重要的是,

低音。

一张我的旧乐器的照片,包括我的旧克门切!

此外,我还获得了更多的实用技能,如平面设计、开发和运营,我可以把一辆车拆开,然后再组装起来。这种扩展介绍是必要的,因为我的数据科学技能胜过了所有这些技能。我的数据科学知识和技能让我在生活中走得比我所学的任何东西都更远,同时处于技术的前沿,并且在我需要时非常适用于任何场景。

受欢迎的

众所周知,机器学习是一个巨大的新兴领域。最近媒体对该领域的报道更是火上浇油。数据科学职位的教育、背景和批判性思维能力(第三个是最重要的)可能很难获得。去年,福布斯估计,2020 年将有超过 20 万个数据科学职位空缺。随着越来越多的公司开始需要人工智能,并使用机器学习来跟踪具有准确统计数据和简洁计算机的分析,预计数据科学的新领域将在未来十年内爆发。

也就是说…鉴于这个日期,我们应该对此持怀疑态度,

2020 年 3 月 24 日(股票市场刚刚死亡,我们正在进入一场全球衰退,因为未来的疫情。)

幸运的是,许多数据科学工作可以远程工作!此外,雇佣大多数数据科学家的大公司可能在一两年后疫情结束时仍然存在。

尖端的

机器学习是最前沿的技术,有一个完整的技术时代以它命名,被称为

《人工智能时代》

随之而来的是一系列的好处,其中最大的好处就是事物总是在不断变化。这可能既是一个可怕的现实,也是一个令人兴奋的冒险。总是有新的东西需要学习,这意味着对于像我这样的人来说,当你学习了所有的东西后,你的兴趣不会消失。这对很多人来说也很可怕,因为这会让技术面试变得非常伤脑筋。

处于前沿也意味着你可以很容易地和其他人一起热衷于这个爱好,不管他们是否真的参与其中。

多才多艺的

我真正喜欢我的数据科学超能力的是,我可以进入任何我想要的行业或工作类型。例如,如果我想从事医学,我可以很容易地找到一份医学分析师的工作或一系列类似的工作。总的来说,统计学是一种非常有价值的资产,可以从你的大脑中提取出来。我们在日常生活中看到的和在工作场所看到的一样多,并且能够通过统计推断出客观想法的可能性,而不是做出有根据的猜测。

对于许多我想做的事情,我可以在我的大脑中使用机器学习来想到一个很好的方法来完成它们。这很令人兴奋,解决了我生活中很多用定性思维解决不了的问题。几乎可以在你愿意收集、抓取或查找数据的每一个场景中使用的东西显然是非常强大的。

不仅仅是预测建模

当然,尽管机器学习是数据科学的一个巨大组成部分,但这个难题还有很多你可能没有想到的部分。有趣的是,根据您的职位,您可能实际上做了大量的管道铺设、基础工作和部署模型,而不是实际创建模型。

我想添加的一些值得注意的内容包括通信/业务、使用开发运营工具部署端点以及 Unix 管理。当然,这将根据您所处的位置而有所不同,但很可能 Unix 和 Bourne SHell 在进行数据科学研究时会派上用场!此外,数据可视化是数据科学家的一项常见技能。

更好的程序员

在很多方面,作为一名数据科学家,我已经成为一名非常优秀的程序员。如果不是在我的算法中利用了很多计算概念,我永远也不会坚持这些概念。由于它们的统计能力,我还学会了大约四种新语言。

(src = http://julialang.org/)

如果没有数据科学,我可能不会成为函数式编程的支持者,也可能永远不会尝试 Julia,不会了解与 JRE 相对的 SBT。我从数据科学信息中学到的东西现在是我深深关心的东西,我把这一切都归功于数据科学!

结论

如果你不是在研究数据科学,我当然会推荐它!这不仅很有趣,而且是一门非常值得参与的科学。此外,我认为数据科学经常被误认为是一种非常特殊的技术,但现实是你可以将机器学习应用于几乎任何有数据收集的场景。

这是我发现与数据科学家会面令人兴奋的地方,因为他们通常来自各行各业。虽然通常情况下,这些符合数据科学、商业、编程和统计/数学的三大支柱,但各行各业都有一些独特的人进入 DS/ML 世界,并且对它爱不释手!拥有数据科学技能并能够使用预测模型来预测未来,感觉就像拥有不可思议的超能力一样!

为什么数据科学可能不值得

原文:https://towardsdatascience.com/why-data-science-might-just-not-be-worth-it-c7f3daee7d8d?source=collection_archive---------0-----------------------

意见

软件开发可能更适合你的 3 个原因。

被认为是 21 世纪最热门的工作可能并不那么热门。数据科学已经伴随我们有一段时间了,它不再只是一个时髦词。个人和公司都利用它来创造价值和金钱,但它真的是未来的职业吗?

Robynne HuUnsplash 上拍摄

作者注: 这是一篇观点片,所以大概有一定程度的偏颇。你所在国家的工作和你的技能可能会有所不同。我们用不同的眼睛看世界。请在评论区留下你的想法和经历。

如果你在做任何与软件相关的事情,你可能会考虑转到数据科学领域。为什么不呢,工作应该无处不在,薪水一般比软件开发高,你的头衔中有“科学家”这个词会让你的母亲感到骄傲。

好吧,也许不是最后一个,但你明白了。

在这个领域呆了一段时间后,我探索了一些库和其他很酷的东西,写了大约 80 篇与数据科学相关的文章,同时还探索了其他选择(如 web 和移动开发),我发现自己有足够的资格来分析这个领域的好与坏。

今天的重点将主要放在坏事上,因为互联网上充斥着“为什么你应该成为一名数据科学家”“在一个月内学会数据科学”类型的文章。

也就是说,理想的读者是那些知道加入这个领域会有什么好处,但也想知道可能有什么缺点的人。此外,已经在该领域工作了一段时间的人可能也会发现这些要点很有用。

好了,事不宜迟,我们从第一个开始吧!

1。数据科学很无聊

是的,你没看错。大多数数据科学归结为从源表中提取数据,执行一些聚合和计算,然后将结果存储在适合分析的新表中。嗯,这完美地描述了一个 ETL 过程,而不是数据科学。

此外,您会花一些时间清理和准备数据,这也不完全与数据科学相关。最后,我们有处理预测建模的部分—这也不是新的,但在过去几年中变得很受欢迎。

Joshua Rawson-Harris 在 Unsplash 上拍摄的照片

这三个要素结合起来,再加上得体的表达和沟通技巧,就能让你成为一名普通的数据科学家。

但是等等,数据科学不会给世界带来革命吗?

是,也不是。是,专业人员将能够更好地完成他们的工作(像医生一样),不是,你的 ETL 管道绝对没有人感兴趣,与你的“数据科学家”职位无关。

2。数据科学正在实现自动化

或者至少是有趣的部分。你知道,最初让你加入这个领域的时髦词汇。像预测模型,机器学习等等。不要误解我的意思,很多东西在这里还不能自动化,但是很大一部分已经自动化了。

亚历山大·奈特Unsplash 上的照片

这很可悲,因为当大众担心日常工作变得自动化时,我们实际上已经自动化了我们工作中所有有趣的东西。好看。

我的意思是,你见过专业的云环境吗?如果没有,也没关系,因为它们看起来很悲伤。基本上你能适应的算法数量是有限的,只要数据以正确的方式准备好,任何知道精度越高越好的人都可以测试出所有的组合,并得到一个相当不错的解决方案!

我的意思是,它不会比一个拥有 10 多年经验的高级数据科学家开发的更好,但是问问你自己— 准确性增加 2%真的有多重要?

试着从雇员和雇主的角度来思考这个问题。由数据科学家团队开发的稍微好一点的模型真的值得花费时间和金钱吗?对一些公司来说是这样,但大多数公司对“企业云环境”的内容完全满意。

3。工作列表太糟糕了

访问你最喜欢的工作列表网站,搜索数据科学工作。你可能会想到像 SQL、Python、R、Statistics 这样的技能会出现——而且你做出这样的假设是完全正确的。问题是,这些仅仅是需求的 30%!

其他一些可能包括一般的编程、API、版本控制,甚至一些前端技能。这对你来说很糟糕。

即使你是软件开发出身,并且具备上述所有技能,数据科学领域仍然没有这样的工作。

让我们来看看 2020 年 5 月 16 日拍摄的来自 Indeed.com 的的列表,仅限美国:

数据科学— 9,474 个工作岗位

软件开发人员——66,647 份工作

这是一个很大的区别。

你现在可能会想,软件开发比数据科学更广泛,因此有更多的工作机会。这是绝对正确的,这也是为什么我也在软件开发中寻找一个更窄的领域——Java 开发者。让我们看看有多少份工作列表:

Java 开发人员——29324 人

是啊,大约三倍多。

但即使这还不足以说服你,以下几个词肯定会让你信服— 大多数数据科学职位都是高级职位。

没错。大多数中小型公司对数据科学家的需求不同于对软件开发人员的需求。也许他们甚至在寻找他们的第一个数据科学家!你真的认为他们会雇用实习生或大三学生来处理数据科学相关的工作吗?三思而后行。

判决

也许我对数据科学有点太苛刻了。也许在你的国家情况不同。但也许不是——在做出如此重大的决定时,你应该意识到利弊。

在这个世界上,机器学习的自动化程度已经让普通软件开发人员有足够的信心使用它,如果我今天选择未来的职业,我会三思而行。

不要误解我的意思,数据科学仍然很棒,但是要准备好花大约 90–95%的时间在 ETL、数据处理和准备上,另外 5–10%做你真正感兴趣的事情(预测建模)。

你有什么想法?在你的国家情况怎么样? 在下面的评论里让我知道。

感谢阅读。

喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。

[## 通过我的推荐链接加入 Medium-Dario rade ci

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

medium.com](https://medium.com/@radecicdario/membership)

为什么数据科学需要产品经理

原文:https://towardsdatascience.com/why-data-science-needs-product-managers-691ff92beb08?source=collection_archive---------7-----------------------

数据科学项目失败的常见原因以及项目管理如何扭转局面。

Unsplashveeterzy 拍摄的照片

2019 年, Gartner 预测,80%的人工智能项目无法扩展以提供商业价值——数据科学项目将会失败。尽管许多其他帖子(参见此处的、此处的和此处的)提供了数据科学失败的不同原因,但它们掩盖了根本原因:缺乏数据科学产品经理。

任何业务中的大多数项目失败可以归结为两个主要原因:人员的失败或过程的失败(然而,过程的失败通常是由人员的失败引起的)。正如雷伊·达里奥在《原则》中所说,“让合适的人担任合适的角色来支持你的目标,是无论你选择完成什么都成功的关键。”数据科学项目也不例外。在本文中,我讨论了数据科学项目失败的一些常见原因,以及数据科学产品经理如何成为防止这些失败的关键。

如果你不尝试,你就不会失败

大型组织中的业务领导通常不具备识别有效数据科学项目所需的技术专业知识。一个过度劳累的企业领导发现了一个有大量数据支持的半技术性问题。或者,也许他们正在寻求自动化视觉质量控制等极其重复的过程,他们立即认为这是一个很好的数据科学项目。

在失败的项目中,业务领导会要求数据科学团队来处理它,团队会在没有适当确定项目范围的情况下抓住机会发挥作用。或者,数据科学团队确定了项目的范围,但由于他们对业务问题和他们试图释放的价值缺乏清晰的理解,他们同意了一个项目,并考虑了一个价值低得多的解决方案。不管怎样,这个项目产生的结果令人失望,每个人都很沮丧。

一个好的数据科学产品经理通过拒绝那些在开始之前就注定要失败的数据科学项目来防止项目失败。DSPM 可以向商业领袖解释为什么一个问题在技术上很难解决,而不需要过于技术化。如果数据科学解决方案是可能的,DSPM 还可以阐明业务领导者期望释放什么样的业务价值,并确保该解决方案实际上提供了该价值。通过这种方式,数据科学产品经理甚至可以在项目开始之前就防止项目失败。

防止瞄准镜蠕动

Unsplashveeterzy 拍摄的照片

因此,您的团队设法在一个可行的项目上与业务领导保持一致。你花了一两个月的时间来解决它,当业务领导说“等等,还有一件事……”时,你已经接近了终点线。在你知道之前,又过了几个月,还看不到结束的迹象,你试图解决的当前问题看起来一点也不像原来的问题,你取得的任何进展都有可能让你想起一个小小的叠木塔——杂乱无章,随时可能自行倒塌。

发生了什么事?你的瞄准镜刚刚失灵了。一个好的数据科学产品经理通过设定严格的工作范围并让业务负责人对该范围负责来防止这种情况发生。如果需求改变,DSPM 决定项目是否仍然可行。良好的范围界定和在项目成果上推动共识无论如何都应该防止范围蔓延:DSPM 的另一个关键作用。

数据在哪里?

很好,所以您实际上有一个范围很好的问题,至少从技术角度来看,并不太难。你开始处理它…直到你意识到没有带标签的训练数据,或者如果有的话,它藏在十几个不同的数据库甚至 excel 文件中。呀。你真的要让数据科学家在办公室里跑来跑去各个部门,询问谁拥有哪些数据库,拉动 X 的最佳方式是什么?数据科学家知道去哪里找或者问谁吗?同样,这也是优秀的数据科学产品经理扭转乾坤的时候了。由于 DSPM 连接到业务,他们已经有了一个好主意,在哪里寻找和 ping 谁。DSPM 可以安排会议和数据争论,让数据科学家专注于编码和训练算法,并为企业创造价值。

给我看看钱

亚历山大·密尔斯在 Unsplash 上拍摄的照片

在所有这些例子中,数据科学产品经理的基本目标是确保数据科学团队提供商业价值。关注和优先考虑商业价值是一项技能,通常是数据科学家(尤其是初级数据科学家)所缺乏的。

当公司招聘数据科学家时,他们通常会寻找直接来自博士和硕士项目的申请人。虽然学者们希望研究棘手的、智力上和技术上具有挑战性的问题,但他们很少面对回答这样一个问题:什么样的潜在价值使这个问题值得解决?事实上,学者们更倾向于根据问题的内在难度而非外在价值来评估问题。(我不是说这是学术界的问题,只是学术界和商界区别的一个现实)。

简而言之,大多数公司雇佣的数据科学家对解决难题比对实际提供商业价值更感兴趣。

另一方面,数据科学产品经理对解决有价值的问题更感兴趣,并优先考虑容易的“无聊”问题,而不是简单的、高风险的“性感”问题。当你有一个数据科学产品经理来确保你确实在处理有价值的、可解决的问题,而不是你的团队想在明年的会议上展示的概念的理论证明时,你的数据科学项目失败的可能性会小得多。*

这并不是说我不认为在会议上演讲也有价值——只是你应该专注于提供商业价值,然后*写一篇关于它的论文,而不是从事学术研究,然后试图通过发现商业价值来证明它。

我们说的是同一种语言吗?

不能错过掉一个前传迷因的机会,感谢吉菲

数据科学产品经理通过充当数据科学团队和业务利益相关者之间的翻译,使数据科学项目更加成功。当数据科学项目失败时,通常是由于数据科学团队和他们的利益相关者之间的沟通中断:看看上面的例子就知道了。如果数据科学团队没有正确理解他们试图解决的问题,即他们试图释放的商业价值,那么他们就会失败。同样,如果业务负责人没有从技术角度理解问题有多难,或者不能用数据科学团队能够理解的方式解释业务问题,那么项目就注定要失败。

一个好的数据科学产品经理是一名翻译:以业务利益相关者可以理解的方式解释困难的技术概念,同时还能够向几乎没有领域知识的人传达业务目标和问题。

谁是优秀的数据科学产品经理?

所以,你应该立即开始写一份数据科学产品经理的职位描述,对吗?嗯,也许吧。事实是,如果您正在从事数据科学项目,您已经有某人(或多人)在履行 DSPM 的职责,只是没有信用、责任或专业知识。通常,数据科学经理或业务分析师将扮演 DSPM 的角色,但特别是在较小的公司或初创企业中,数据科学家最终会身兼两职。

如果你在一家较小的公司,成为数据科学产品经理不一定是一个全职角色,但它应该是某人职责的一个明确部分,对履行数据科学产品管理相关职责有明确的期望。

如果你决定雇佣一名全职 DSPM,以下是你应该寻找的一些特征:

  1. 对数据科学概念的技术理解。他们不需要会用 python 编码,但要能理解哪些模型最适用于某些情况(即 CNN 的用于图像分类)。他们应该对团队正在解决的问题所需的训练数据的数量和质量有相对的直觉。
  2. 有足够的知识提出解决方案/替代方案
  3. 向非技术观众阐述技术概念的能力。
  4. 根据业务价值对机会进行优先排序的能力。
  5. 能够传达为什么项目对于可能没有直接业务背景的技术团队是重要的或有价值的。
  6. 中级 SQL 技能,以便他们能够自己提取和评估数据集。
  7. 了解数据科学团队正在解决的技术问题将如何解决业务问题。

总之,数据科学产品经理需要能够跨越数据科学和业务的其余部分,脚踏两个阵营,同时生活在两个世界中。

概括一下

数据科学项目失败的原因有很多;解决错误的问题、未能收集适当的培训数据以及范围蔓延只是其中的一部分。幸运的是,如果您的数据科学团队设置正确,如果您有合适的人成功履行数据科学产品经理的职责,所有这些问题都是可以预防的。

这篇文章最初发表于theanalyticallife.com。我在我的时事通讯中分享这样有意义的内容,这里

为什么数据科学家应该写作

原文:https://towardsdatascience.com/why-data-scientists-should-write-6deac8bb4b01?source=collection_archive---------25-----------------------

我早就想写这个了

阿特·拉索夫斯基在 Unsplash 上拍摄的照片

这是一篇我很久以来一直想写的文章。在实践了近 4 年的数据科学和写作之后,我早就应该分享我对这两者如何相互作用的感受了。

数据科学是一个多维领域。通常视为编程、统计和领域知识的结合。数据科学家应该是逻辑分析师、多才多艺的问题解决者和能干的程序员。

这足以让你忙起来,但是它忽略了所有这些技能所依赖的基础:沟通。

我对数据科学家的首要建议是什么?花时间写。写代码?不,其实像

老实说,我不确定这是出自左场还是只是强化一个你可能在之前已经听过的想法。不管怎样,这个主题很重要,值得用几百个字来描述。如果我能说服一个人尝试更频繁地写作,那么嘿,让我们称之为成功。

沟通就是影响

从分析商业问题到建立机器学习模型,如果你不能传达你做了什么,你是如何做的,以及它的吸引力,那么你的努力很可能就白费了。我以前在中写过,当你作为数据科学家的工作完成后:

数据科学家受雇为决策提供信息,并对业务产生影响。您所做的所有幕后探索性数据分析和可视化通常会在报告或某种明智的决策中体现出来。

数据科学家应该无情地优先考虑影响。当我们的大部分工作都是告知决策和说服他人以我们的方式思考时,沟通是必不可少的。不管我们喜欢与否,写作是我们进行交流的主要工具。

讲故事

数据科学家应该掌握的另一项技能是讲故事的艺术。由于数据素养的提高和对数字推理的兴趣,数据故事和新闻业在过去几年里已经起飞。

通过把你的发现变成一个故事,它不仅使你的作品更容易理解,也使你的观众更感兴趣。关于正确讲述数据的例子,只要看看汉斯·罗斯林就知道了。观看他的一次演讲就能改变你对数据的看法。

创造性的出路

整天和数据打交道会让你付出代价。在分析数据或构建模型一天之后,我们所有人都有一些放松的方式。这对健康的生活方式来说是自然而重要的。

写作是你进行创作的一个很好的途径。作为数据科学家,我们的创造力主要体现在解决问题的技巧上。写作感觉像是一种不同形式的创造力。

创造和发布新事物的艺术感觉与构建模型或报告一些探索性数据分析不同。尝试一下,挑战你的思维,用不同于平常的方式工作。这对你有好处。****

加速你的学习

这也是我当初开始写作的原因。我试图进入数据科学领域,跟踪一堆时事通讯,阅读博客帖子,并试图理解这一切。在某个时候,我意识到如果我把它付诸实践并试着教给别人,我会学得更好。所以我开了一个博客。这条来自大卫·罗宾逊的建议总结了我的想法:

几乎每一位有抱负的数据科学家都问过我找工作应该怎么做,我都给过他们这个建议:开博客,写关于数据科学的文章

我再怎么强调这种做法的重要性也不为过。不管你上过多少 Coursera、DataCamp 或 bootcamp 的课程,你仍然需要将这些工具应用于实际问题的经验。这并不是数据科学独有的现象:无论你现在专业做什么,我相信你现在比你完成课程时做得更好。

这无论如何都不是强制性的。不像编程技能、技术知识或特定领域的问题解决那样。但是掌握写作,我们交流的主要工具,无疑是有帮助的。你是如何掌握任何东西的?当然是有实践的。****

所以去写 船上的东西

写作可以成为让其他事情更有效的超级力量。至少对我来说是这样。试试看,让我知道它是如何工作的!

感谢阅读!在 Twitter 上找到我,不要忘记 订阅 我的每周简讯,获取任何新帖子和有趣的链接。看看下面一些类似的帖子:

为什么 DataOps 会继续存在

原文:https://towardsdatascience.com/why-dataops-is-here-to-stay-af0850bda0dc?source=collection_archive---------62-----------------------

借助 DataOps,数据工程师和数据科学家可以一起工作,带来一定程度的协作和沟通,共同的目标是为业务提供有价值的见解。

图片由 DataOps.dev 上的 Ascend.io 拍摄

过去十年人工智能和机器学习的出现永远改变了数据格局。据估计,到 2021 年,全球企业每年将在大数据和人工智能驱动的数字化转型工作上花费超过 1.8 万亿美元。作为对新冠肺炎疫情的回应,网飞、Zoom 和 Dropbox 等网络提供商已经认识到,在能够扩展其 IT 运营和基础设施的同时,自动化是满足需求的关键因素。贝恩公司最近的一份报告预计,在未来两年内,采用自动化技术的公司数量将至少翻一番。随着企业争相采用这些新技术,海量数据和互联系统将继续增长,变得更加复杂。

随着复杂性的不断增加,企业将被迫使用新的工具和技术来重新思考其数据处理方法。随着企业继续在整个组织中追求更高级的数据分析和人工智能计划,DataOps 有可能与不断加快的数据开发和创新生命周期保持同步。借助 DataOps,数据工程师和数据科学家可以一起工作,带来一定程度的协作和沟通,共同的目标是为业务提供有价值的见解。

释放数据操作的潜力

数据操作绝不是一个新的术语或方法;然而,企业已经开始越来越多地采用 DataOps 实践,以便能够扩大和实现他们在数据、分析和机器学习方面的投资。DataOps 为数据和分析领域带来了灵活性和稳定性,使数据团队不仅能够快速构建,而且能够在数据复杂性激增时安全地构建。

数据复杂度=数据系统 x 数据工作者 x 数据产品

DataOps 由一系列原则、理念和实践组成,统一了数据产品的构建者和消费者,明确关注交付速度、质量和灵活性。DataOps 采用集成方法来更好地推动独立数据团队之间的协作,并尽可能实现自动化,以最大限度地减少手动瓶颈和错误。

Gartner 副总裁兼分析师 Nick Heudecker 在最近的一篇博客文章中将 DataOps 定义为“一种协作式数据管理实践,专注于改善整个组织中数据管理者和消费者之间的沟通、集成和数据流自动化。DataOps 的目标是创建可预测的数据、数据模型和相关工件的交付和变更管理。DataOps 使用技术自动交付具有适当安全、质量和元数据级别的数据,以提高数据在动态环境中的使用和价值。”

DataOps 的核心目标是缩短数据管道开发生命周期的端到端时间,利用自动化技术简化项目并加快价值实现。传统的数据管道开发需要手动和重复的过程,容易出现人为错误和疏忽,导致脆弱的管道和高昂的维护成本。将 DataOps 应用于数据开发生命周期,使数据工程师能够专注于对业务至关重要的新数据产品,并为能够承受未来不可避免的变化的数据架构带来稳定性。

此外,将 DataOps 应用于数据开发生命周期可以减少数据科学家花费在提取和产生有意义的见解上的时间,从而转变业务。例如,自动化数据管道技术为包括数据工程师和数据科学家在内的数据团队提供了可扩展的解决方案,最终为整个组织创造商业价值。

从 DevOps 到 DataOps:未来十年的战略

DataOps 正在迅速成熟并成为主流实践。然而,围绕数据运营以及如何在组织内应用数据运营,业内仍存在许多常见的误解。

最常见的数据操作误解之一是它只是“数据的开发操作”通过利用 DevOps 方法,公司和团队在创建和维护软件产品方面实现了速度、质量和灵活性。DataOps 为构建数据产品的团队设定了同样的目标——让更多的开发人员能够更快、更安全地构建越来越复杂的系统。然而,数据管道确实存在根本性差异,需要独特的要求来实现这一宏伟目标。

与 DevOps 改变软件开发方式类似,DataOps 正在改变数据产品的创建方式。DevOps 的核心租户拥有自动化系统,确保正确的代码在生产中运行,并通过安全检查确保其正常工作。有了 DataOps,每个处理数据的人都能得到类似的保证是至关重要的,也就是说,他们处理的数据是正确的、及时的,并且与其他系统同步。随着 DevOps 的大部分重点转移到更小的系统,如微服务和定义良好的 API,我们同样看到 DataOps 的重点转向关键资产数据,以及简单、增量定义、自动化和经过测试的数据集。

未来几年,DataOps 的广泛实施将是公司的一次重大转型。凭借更短的开发周期、更高的迭代频率、零维护和包容性的数据驱动创新,DataOps 将为数据和分析领域带来敏捷性。数据运营是一个不断变化的概念,将在未来几年继续发展,但有一点是肯定的:数据运营将继续存在。

posted @ 2024-10-16 09:01  绝不原创的飞龙  阅读(509)  评论(0)    收藏  举报