TowardsDataScience-博客中文翻译-2020-五十七-
TowardsDataScience 博客中文翻译 2020(五十七)
带 Plotly Express 的直方图:完整指南
一个数据集,60 多个图表,以及所有解释的参数
大多数图形都是用 canva 创建的
直方图是一种特殊的条形图,显示变量的分布。 Plotly。Express 允许使用一个函数px.histogram(df, parameters)
从数据集创建几种类型的直方图。在本文中,我想探究所有的参数以及它们如何影响图表的外观和感觉。
普洛特利。Express 是 python Plotly 库的高级 API,专门用于处理数据帧。它创建交互式图表,您可以放大和缩小,打开和关闭图形的一部分,当您将鼠标悬停在图上的任何元素上时,会出现一个带有信息的工具提示。
所有的图表都可以使用本笔记本上的 GitHub 来创建。请随意下载、播放和更新它。
目录
- 安装
- 数据集 —在示例中使用
- 直方图的类型
- 直方图使用 plotly 条形图
- 参数:c olor ,b armode , nbins , histfunc ,cumulatual, barnorm , histnorm , category_orders , range_x and range_y ,color _ discrete _ sequence,
装置
普洛特利。Express 是在 plotly 库的 4.0.0 版本中引入的,您可以使用以下命令轻松安装它:
# pip
pip install plotly# anaconda
conda install -c anaconda plotly
Plotly Express 还要求安装 pandas,否则当你尝试导入时会得到这个错误。
[In]: import plotly.express as px
[Out]: **ImportError**: Plotly express requires pandas to be installed.
如果您想在 Jupyter 笔记本中使用 plotly,还有其他要求。对于 Jupyter 实验室你需要[jupyterlab-plotly](https://plotly.com/python/getting-started/#jupyterlab-support-python-35)
。在普通笔记本上,我必须安装nbformat
( conda install -c anaconda nbformat
)
一个数据集和 70 多个图表。交互性和动画通常只需一行代码。
towardsdatascience.com](/visualization-with-plotly-express-comprehensive-guide-eb5ee4b50b57)
数据集
直方图可在您想要查看分布的任何时候使用:
- 一段时间内出现的错误
- 每个班次的成品
- 统计分布——身高、体重、年龄、价格、工资、速度、时间、温度、周期、差值范围
Plotly 的直方图很容易使用,不仅是常规直方图,而且也很容易用于创建一些类型的条形图。您可以通过间隙从条形图中识别直方图,因为直方图的条形之间没有间隙。
我将使用我最喜欢的数据集,了解世界各国的游客人数以及他们在假期的花费。数据被预处理成一个长格式——每个类别Country Name
、Region
、Year
是一列,这些类别的每个组合占据一行,显示两个数据值[number of visotors](https://data.worldbank.org/indicator/ST.INT.ARVL)
和[receipts](https://data.worldbank.org/indicator/ST.INT.RCPT.CD)
当地人从这些游客那里获得的美元。关于游客的数据从 1995 年到 2018 年。
预处理数据集的样本-1995 年至 2018 年关于 2015 个国家的数据
普洛特利。如果每个类别和每个值都是数据集的一列,Express 可以创造奇迹。在这个例子中,我将使用:
long_df
—95 年至 2018 年 215 个国家的完整数据集yr2018
—2018 年的数据spfrit
—关于西班牙、法国和意大利的数据
直方图的类型
最常见的直方图显示一个数字变量的分布,该分布被分成多个区间。在我们的案例中,2018 年的访客数量分布在 0 到 89 322 000 之间。
# import the libraries
import plotly.express as px
import pandas as pd# create the simples histogram
px.histogram(yr2018, x="visitors")
simples 直方图将 215 个国家分为 18 个区域,每个区域覆盖 500 万游客。第一层包括 157 个国家,游客数量在 0-490 万之间,第二层包括 17 个国家,游客数量在 500-990 万之间,依此类推。
Simples 直方图将国家划分为多个区域
关于如何创建条块,您有更多的选择,它们可以基于一个类别(例如,我们的数据框架中的Region
)或一个日期值,该日期值被划分为包含几天、几个月或几年的条块。
将 x 变量指定为数值、分类或日期列会导致不同的箱。在这种情况下,年份可以是数值,生成的 bin 将是 int(1995)到 int(1999)或日期 1995 年 1 月到 1999 年 1 月。
您可能已经注意到,范围直方图和分类直方图显示的是落入分类框的国家的数量,而日期直方图显示的是访问者的数量。您可以使用y
—参数指定将哪一列聚合到直方图中。因为我们的数据集每年包含 215 个国家,所以对行进行计数会产生一个平坦的直方图。
在 Plotly Express 直方图中指定 Y 会改变聚合
因素
除了x
和y
之外,plotly 的直方图还有许多其他参数,这些参数在文档—直方图中有所描述。让我们一个接一个地回顾它们,这样您就可以知道如何将直方图包含到您的下一个可视化中。
参数:颜色
像所有其他情节一样。Express chart,color
参数需要一个包含某个类别的列,它将用单独的颜色对属于该类别的值进行着色。
fig = px.histogram(yr2018, x="visitors", nbins=10, color="Region", title="Visitors per region")
fig.show()
定义颜色以指定按颜色分割直方图。
参数:Barmode
因为直方图实际上是一个条形图,所以您可以设置三种类型的条形图:
stacked
—值堆叠在另一个之上grouped
—以分组条形图的形式显示直方图overlayed
—在彼此顶部显示半透明条
将颜色和条形模式结合起来会产生不同的图表类型。没有按颜色划分组的 Barmode 结果总是在同一个图表中。
这些条必须按颜色分开,这样barmode
才有效果。在上面的例子中,我们看到每年有 50 万游客参观阿拉比亚,但是土耳其和西班牙占据了更多的位置。
如果你对这些年来这些国家的旅游业如何发展感兴趣,你可以通过改变x
和y
参数来快速实现。
fig = px.histogram(sptuar,
x="years",
y="visitors",
color="Country Name",
barmode="group",
title=f"Visitors in Aruba, Spain, Turkey - {barmode}")
fig.update_layout(yaxis_title="Number of Visitors")
fig.update_xaxes(type='category')
fig.show()
普洛特利。Express 是非常通用的,通过改变 x 和 y 参数可以得到不同的图。
除了更改x
和y
之外,我还将图表分配给了一个变量fig
,这允许我们使用fig.update_layout(yaxis_title="title axis")
更新yaxis
,更重要的是,修改年份颜色,使其既不被视为int
也不被视为date
,而是被视为一个类别,这意味着每年都有一个单独的条形fig.update_xaxes(type="category")
。
Plotly 图表在后台存储为字典,可以通过打印
fig.to_dict()
来查看
参数:nbins
如果使用类别,nbins 参数将被忽略,并为每个类别绘制一个条形。但是如果你的x
是数字或日期类型,就把你的数据分成n
个区间。文件上说:
nbins(int)—正整数。设置箱子的数量。
但实际上,箱的数量通常是不同的。我尝试用不同的nbins
运行我的图表,结果如下:
- nbins = 3–2 箱
- nbins = 5–5 个箱
- nbins = 10–9 个箱子
- nbins = 20–18 箱
增加 nbins 参数会导致更多的箱数
甚至关于 plotly 直方图的示例页面也有 nbins=20,导致只有 11 个柱。尽管增加数量通常会导致箱的数量增加。Plotly 还确定了箱的开始和结束位置。例如,使用宁滨的年份可以从 1990、1994 或 1995 年开始。
- nbins = 3–3 个箱(1990–1999,2000–2009,2010–2019)
- nbins = 5–5 个箱(95–99,00–04,05–09,10–14,15–19)
- nbins = 10–5 个箱(95–99,00–04,05–09,10–14,15–19)
- nbins = 20–13 个箱(94–95,96–97,98–99,00–01…)
你影响箱子的数量和范围的能力有限,但是很快就会进化,所以这很可能会在未来的版本中得到改进。
要获得所有的能量,自己计算,然后用 plotly express 条形图绘制,如本文末尾所示。
参数:histfunc
到目前为止,我们已经看到直方图计数和求和的价值。Plotly 的直方图允许使用 5 个函数来聚合值— count
、sum
、avg
、min
、max
。
Plotly 历史函数的各种参数。
当然,当我们使用分级箱时,avg 产生箱的平均值,min 产生最小值,max 产生最大值,所以avg
、min
和max
总是形成某种上升的阶梯。在这种情况下,对分类值应用直方图更有意思,这在技术上创建了一个条形图。
将 histfunc 应用于分类箱显示,尽管我们在拉丁美洲、非洲、欧洲和东亚有类似数量的国家,但欧洲国家总体上是最多人访问的,而北美国家是平均水平。游客数量最多的非洲国家不超过 1200 万。
参数:累积
如果累积参数设置为False
,直方图会显示频率(sum,avg …),但如果是True
,则每个后续柱会累积所有先前柱的值。
累积直方图累积所有先前条形图的值。
参数:barnorm
如果barnorm
为None
,该参数允许显示精确值,或者显示每个颜色类别的百分比。您可以通过将barnorm
设置为fraction
或percent
来实现。
Barnorm 表示堆积直方图上的零、分数或百分比。
右边的最后一幅图像被fig.update_layout(yaxis={"ticksuffix":"%"})
修改,添加了一个百分号。
如果在分组图表上应用 barnorm,比例保持不变,但绝对值变为分数或百分比:
组合直方图保留条形的比例,但轴标签会改变。
使用fig.update_layout(yaxis={"tickfont":{"size":18}})
对xaxis
进行格式化,使标签更大。
参数历史标准
一个条柱的barnorm
百分比总和等于 100%,而所有相同颜色的条柱相加后histnorm
达到 100%。它提供了 5 个选项:
None
—显示骨料的绝对值percent
—占箱中总值的百分比(0–100%)probability
—容器中总量的分数(0–1)density
—总面积除以总面积(所有条形面积之和等于样本点总数)probability density
—histfunc
对给定条柱的输出进行归一化,使其对应于随机事件落入该条柱的概率,该随机事件的分布由histfunc
的输出描述(所有条柱面积之和等于 1)
histnorm 的前三个参数。
我已经从几个角度研究了density
和probability density
,但是可能会有一个 bug,因为每个 bin 的累积图和普通图的值是不同的。
参数类别 _ 订单
当你用color
划分图表时,你可能会对定义这些彩色类别的顺序感兴趣。默认情况下,顺序基于输入数据帧中的外观,这可能很难控制。使用category_order
让你对图上的类别进行排序。
您必须指定为哪一列定义顺序(作为字典)。这是您在color
参数中使用的列。
fig = px.histogram(spfrit,
x="years",
y="visitors",
**color="Country Name",**
barmode="group",
title=f"Ordered Italy, Spain, France",
category_orders={"**Country Name**":["Italy","Spain","France"]}
)
fig.show()
Plotly 表示直方图参数,允许改变类别的顺序
参数 range_x 和 range_y
这两个参数不会改变图表的范围,但它们会根据设定的边界放大数据。您可以随时使用 Plotly 的交互式菜单取消缩放。
fig = px.histogram(long_df,
x="years",
y="receipts",
range_x=["2009","2018"],
title="Yearly Histogram",
)
fig.show()
放大很多可以看到 plotly 认为年份是floats
,因为会加上2016.5
这样的标签。如果您想确保 Plotly 显示的年份始终为"2016"
而不是小数2016.5
或月份Jan 2016
,请使用fig.update_xaxes(type='category')
。这将悬停改变直方图到一个条形图和差距之间的酒吧将出现。
数字形式的条柱可能会出现意外的带小数的网格线,而分类直方图会变成带缺口的条形图。
参数颜色 _ 离散 _ 序列
color_discrete_sequence 参数允许您影响条形的颜色。simples 直方图的所有条形都具有相同的颜色,您可以使用以下命令进行更改:
px.histogram(df, x="column",
color_discrete_sequence=["blue"])
Plotly 期望一个列表作为输入,因此您必须将您的颜色包装到一个列表中["#00ff00"]
。您可以使用任何颜色名称-蓝色、红色、浅灰色,如果您没有猜出正确的名称,plotly 的错误将提供可通过名称访问的颜色的完整列表:
**ValueError:**
Invalid value of type 'builtins.str' received for the 'color' property of histogram.marker
Received value: 'lightgreene'
The 'color' property is a color and may be specified as:
- A hex string (e.g. '#ff0000')
- An rgb/rgba string (e.g. 'rgb(255,0,0)')
- An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
- An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
- A named CSS color:
**aliceblue, antiquewhite, aqua, aquamarine, azure,
beige, bisque, black, blanchedalmond, blue, ...**
也可以用 hash string 或者 rgb/rgba,hsl/hsla 和 hsv/hsva(谷歌这个术语如果他们不对钟的话)。最后一个a
代表alpha
,它控制条的不透明度。
如果您在未使用color
参数的情况下为未分割直方图列出了多种颜色,则仅应用列表中的第一种颜色。当您使用color
分割条形时,您在color_discrete_sequence
中提供的色调将绘制每个类别的条形。您可以使用前面的参数 category _ orders 来更改顺序或类别。
如果您只能选择一个类别,列表中的第一种颜色将用于所有条形图。有多个类别,您可以指定更多的颜色。如果你设置的颜色没有你的类别多,那么第一种颜色将用于那些未指定的类别。
如果你不确定选择哪种颜色,但你想让这些颜色搭配在一起,试试 plotly 的一些预建颜色集。
fig = px.histogram(... color_discrete_sequence=px.colors.qualitative.Pastel2,
...)
使用定性分析。Pastel2 按颜色顺序构建。
参数颜色 _ 离散 _ 映射
您也可以使用字典来指定颜色。在这种情况下,您使用参数color_discrete_map
。这个字典的关键字是在color
中指定的列中的值。
px.histogram(df, x="column",
color="Country Names",
color_discrete_map={
"Spain":"lightgreen",
"France":"rgba(0,0,0,100)",
"Italy":"#FFFF00"}
)
使用颜色 _ 离散 _ 映射设置颜色
还有一个选项是在数据框中使用包含颜色名称或其哈希代码的列。在你使用color="column with colors name"
和color_discrete_map="identity"
的情况下。这种方法的缺点是会丢失交互式图例,因为它不再包含类别的名称(例如国家名称),而是包含颜色的名称。
# create a color column specifying color for each of the countriesspfrit["color"] = spfrit["Country Name"].map(
{"Spain":"red",
"France":"black",
"Italy":"orange"}
)# spfrit now contains:
# country_name year visitors **color**
# Spain 1995 32971000 **red**
# France 1995 60033000 **black**
# ...""" Parameter color_discrete_map using identity in case color contains real color names/hex codes """fig = px.histogram(spfrit,
x="year",
y="visitors",
color="color",
barmode="group",
title=f"Histnorm {histnorm} histogram",
category_orders={"Country Name":["Italy","Spain","France"]},
color_discrete_map="identity"
)
fig.show()
如果使用 color_discrete_map="identity ",则缺少图例,但是可以使用带有颜色名称的现有列来指定条形的颜色
参数 facet_col 和 facet_row
有时,您更喜欢在列中并排显示类别,或者在行中上下显示类别。facet_col
和facet_row
参数用于此目的。
Facet_row 和 facet_col 可以与 color 参数结合使用,以不同的色调对条形进行着色。
通常,您可以将facet_col
或facet_row
与一个color
参数结合起来,以区分每一行或每一列中条形的颜色。
px.histogram(df,
x="value column",
color="column",
facet_col="column")
如果您有太多的列,您可以通过参数facet_col_wrap
在每第 x 列之后拆分它们。以下示例显示了由facet_col_wrap=3
在 3 列后拆分的 9 个类别
px.histogram(df, x="value column",
color="column",
facet_col="column",
facet_col_wrap=n)
使用facet_col_wrap=3
将 9 个不同的类别分成 3 行
所有的图都是相连的,因此当您放大或平移其中一个图时,所有其他的图也会发生变化。
行没有 facet_row_wrap 参数,但是您可以通过facet_row_spacing
调整行之间的间距。
px.histogram(df, x="value column",
color="column",
facet_row="column",
facet_row_spacing=0.2)
Facet_row_spacing 在各行之间创建一个间隙。当您放大一行时,所有其他行也会放大。
参数 hover_name 和 hover_data
Hover_name 和 hover_data 影响工具提示的外观。hover_name
高亮显示工具提示顶部的列,使用hover_data
可以在工具提示中删除或添加列
hover_data={
# to remove
"Column Name 1":False, # to add
"Column Name 2":True
}
这些参数在 plotly 中总是工作得很好,但是在直方图的情况下有一些 bug,并且hover_name
根本不工作,而hover_data
只是有时工作。
参数定向
直方图可以水平或垂直定向。Orientation
参数有两个值v
和h
,但是方向受x
和y
的影响较大。切换x
和y
的顺序,可以垂直旋转水平图表。
垂直或水平条受 x 和 y 参数影响,而不是受方向参数影响。
如果您需要颠倒轴的顺序,以便最小的数字框位于顶部而不是底部,请使用:
fig.update_yaxes(autorange="reversed")
这同样适用于同时指定x
和y
的情况。通过切换它们,你可以将水平图变成垂直图。
将 x =“years”改为 y =“years”会改变方向。
在上图中,你可以看到悬停显示所有类别的工具提示。因为我点击了 Plotly 菜单中的Compare data on hover
图标(右数第二个)。
参数边际
我想向您展示的一个有趣的参数是,可以选择添加一个边缘子图来显示变量的详细分布。您可以从 4 种边际地块中进行选择:
histogram
—与其下方的直方图基本相同rug
—显示每个数据值在violin
—做小提琴图,估计变量的概率密度box
—突出显示中间值、第一个和第三个四分位数的箱形图
4 种边际参数——直方图、地毯、小提琴和盒子。这些图出现在垂直直方图的上方,也是交互式的。
甚至可以为多个类别绘制边际图。在这种情况下,将计算一个单独的边际图。注意,在这种情况下,你不能使用barmode="group"
。
多类别情况下四种类型的纵横军图
参数动画 _ 帧
我们今天要讨论的最后一个参数是 Plotly 的另一个交互特性,它可以让您制作图表动画。添加单个参数animation_frame="years"
会将绘图变成动画,可通过play
和stop
按钮启动,或者您可以通过点击菜单导航至单独的幻灯片。
通常需要指定动画图表的范围,以避免网格尺寸的变化。
px.histogram(spfrit,
y="Country Name",
x="visitors",
color="Country Name",
barmode="group",
# add the animation
animation_frame="years",
# anchor the ranges so that the chart doesn't change frame to frame
range_x=[0,spfrit["visitors"].max()*1.1]
)
动画帧允许您设置值的进度动画
它也可以用于分类列。
px.histogram(long_df,
x="years",
y="visitors",
color="Region",
animation_frame="Region",
color_discrete_sequence=px.colors.qualitative.Safe,
range_y=[0,long_df.groupby(["Region","years"])["visitors"].sum().max()*1.1]
)
使用分类列的动画可能不如动画有用,但是滑块可以帮助用户查看各种选项。
使用 plotly 条形图的直方图
如你所见,当我们讨论nbins
参数时,Plotly 对宁滨数据很固执。如果你想保持你的自由,你总是可以自己收集数据并绘制一个规则的条形图。使用pd.cut
对数据进行分类,groupby
对分类中的值进行聚合,并将结果传递给px.bar(df, parameter)
可以让您获得自己的直方图。
这样你有更多的选择。您可以在 x 轴(5, 10]
上显示箱,或者当您使用pd.cut(df, bins=bins, labels=bins[1:])
装箱时,您可以只显示边界编号10M, 20M etc.
。您可以在条形中或条形上方添加标签,以显示每个条形包含的出现次数。使用fig.update_layout(bargap=0)
可以调整杆之间的间隙
使用 pd.cut 计算直方图,并通过 px.bar 绘制
多个类别,当按媒体夹和类别分组时
或者,您可以通过 numpy 的np.histogram
来绑定数据。
# bin with np.histogram
counts, bins = np.histogram(yr2018["visitors"], bins=bins)# turn into data frame
df = pd.DataFrame({"bins":bins[1:], "counts":counts})# chart using Plotly.Express
fig = px.bar(df, x="bins", y="counts", text="counts")
结论
Plotly 的直方图是描绘数据变量分布的一种快速方法。Plotly Express 直方图也有助于绘制多种条形图,将数据按类别或时间进行汇总。
然而,到目前为止,plotly 直方图缺少一些功能(其他 Plotly 图表也有),尤其是添加标签的选项。箱不容易修改,并且nbins
参数并不总是提供预期的结果。您可以随时自己进行计算,并使用px.bar()
得出结果。
Plotly 正在定期改进,所以也许这些东西会很快更新,我们可能会选择添加一个估计分布曲线覆盖。
现在轮到你研究直方图了。下载一个数据集,例如,世界各地城市的历史温度,并研究各个地区的温度分布。
If you liked this article, check other guidelines:
* [Visualize error log with Plotly](/visualize-error-log-with-pandas-and-plotly-d7796a629eaa)
* [How to split data into test and train set](/complete-guide-to-pythons-cross-validation-with-examples-a9676b5cac12)
* [Various pandas persistance methods](/stop-persisting-pandas-data-frames-in-csvs-f369a6440af5)
* [Unzip all archives in a folder](/unzip-update-and-zip-again-xmls-in-a-folder-7d57f9710ddb)Many graphics on this page were created using [canva.com](https://partner.canva.com/vdek) (affiliate link, when you click on it and purchase a product, you won't pay more, but I can receive a small reward; you can always write canva.com to your browser to avoid this). Canva offer some free templates and graphics too.
所有的图表都可以通过这个笔记本中的 python 脚本运行 Github 上的直方图与 Plotly 。
使用 Python 的 Matplotlib 绘制直方图
如何使用这个简单的可视化来有效地显示分布
直方图—作者提供的图像
卡尔·皮尔逊创造了术语直方图,但是很难说是谁发明了可视化,很可能在皮尔森命名之前就已经使用了。
威廉·普莱费尔被认为是条形图的发明者,也是第一个发表这种图表的人,所以不难想象他会画几幅这样的图表来形象化 18 世纪末或 19 世纪初的频率。
毕竟,直方图基本上就是这样;它们是条形图,通常用相连的条来可视化,其中的值被分成相等的范围,称为条块或类。条形的高度代表该类别中记录的数量,也称为频率。
直方图—作者提供的图像
在本文中,我将介绍这种可视化的基础知识,并且在了解更多直方图的同时,我们还将探索 Matplotlib 的许多定制选项。
太空任务直方图
我将在 Jupyter 中运行我的代码,使用 Pandas、Numpy 和 Matplotlib 来开发视觉效果。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator
from matplotlib import gridspec
在这个例子中,我们将要探索的数据集包含了自 1957 年以来所有太空任务的数据,并且是由 Agirlcoding 从nextspaceflight.com搜集而来的。
df = pd.read_csv('medium/data/Space_Corrected.csv')
df
清理前的数据帧
加载数据集后,我们可以进行一些清理和小的调整。
# date column to datetime
df['Datum'] = pd.to_datetime(df['Datum'], utc=True)# costs column to numeric
df['Rocket'] = pd.to_numeric(df[' Rocket'], errors='coerce')# drop columns
# ' Rocket' had an extra space and was renamed
df.drop([' Rocket', 'Unnamed: 0', 'Unnamed: 0.1'], axis=1, inplace=True)
清理后的数据帧
现在一切都设置好了,我们可以毫不费力地用 Matplotlib 绘制直方图。
主要是我想把“火箭”一栏的数据可视化,这是以百万美元为单位的任务成本。我的想法是观察该列中值的分布。
plt.hist(df.Rocket)
plt.show()
默认直方图
没关系,默认的图表给了我们一个简单的 x 轴和 y 轴,棒线被自动划分为条块。
在继续之前,让我们将直方图的仓分配给一个变量,以便更好地观察它。
n, bins, patches = plt.hist(df.Rocket)bins
包含容器范围的数组
这意味着我们的值被分成十个箱,就像这样:
- 5.3 ≤ n < 49.77
- 49.77 ≤ n < 94.24
- …
- 405.53 ≤ n ≤ 450
请注意,每个容器的顶部值被排除在外(
很好,现在我们有了一个包含我们的箱子边缘的列表,让我们试着用它作为 x 轴的刻度。
让我们也添加一个数字,并增加我们的图表的大小。
fig = plt.figure(figsize=(16,6))n, bins, patches = plt.hist(df.Rocket)plt.xticks(bins)
plt.show()
根据条形调整刻度的直方图
那更好。
因为我们没有给 Matplotlib 任何关于 bin 的信息,所以它自动定义了它的数量和范围。
我们可以在定义绘图时通过传递一个边列表来设置箱;这允许我们创建不均匀间隔的容器,这通常是不推荐的——但是也有这种情况。
我们可以设置它们的另一种方式是使用一个整数,其中包含我们想要的箱数。
fig = plt.figure(figsize=(16,6))n, bins, patches = plt.hist(df.Rocket, bins=16)plt.xticks(bins)
plt.show()
有 16 个柱的直方图
直方图的主要目的是可视化我们数据的分布。我们不希望我们的图表有太多的容器,因为那会隐藏我们数据中的浓度;同时,我们不希望类的数量很少,因为我们可能会误解分布。
在我们的直方图中选择类的数量有时非常直观,但其他时候相当困难。幸运的是,我们有大量的算法,Matplotlib 允许我们选择使用哪一个。
fig = plt.figure(figsize=(16,6))# 'auto', 'sturges', 'fd', 'doane', 'scott', 'rice' or 'sqrt'
n, bins, patches = plt.hist(df.Rocket, bins='rice')plt.xticks(bins)
plt.show()
由“rice”算法计算的条柱直方图
很简单,我们已经知道直方图的基本原理。现在我们可以尝试自定义它。
我们可以在 x 轴上使用一些网格线来更好地显示箱子开始和结束的位置。一个标题也很好。
fig = plt.figure(figsize=(16,6))n, bins, patches = plt.hist(df.Rocket)plt.xticks(bins)
plt.grid(color='white', lw = 0.5, axis='x')plt.title('Histogram of Space Missions Costs', loc = 'left', fontsize = 18)
plt.show()
带有网格线和标题的直方图
如果分笔成交点位于条形的中心并同时显示范围的下限和上限,效果会更好。
我们可以通过遍历除最后一个之外的所有容器来定义标签,同时将当前值与下一个值相结合。
大概是这样的:
# x ticks labels
[ "{:.2f} - {:.2f}".format(value, bins[idx+1]) for idx, value in enumerate(bins[:-1])]
类别的标签列表
刻度位置应该在两个值的中间,如下所示:
# x ticks positions
[(bins[idx+1] + value)/2 for idx, value in enumerate(bins[:-1])]
为类绘制标签的位置列表
酷,当我们把它添加到我们的绘图中时,我们需要重新定义网格。如果我们用刻度画网格线,我们会在条形的中间画一条线。
为了解决这个问题,我们将使用我们在开始时导入的类AutoMinorLocator
。该类将帮助我们设置次要刻度,我们可以用它来绘制网格。
fig = plt.figure(figsize=(16,6))
n, bins, patches = plt.hist(df.Rocket)**# define minor ticks and draw a grid with them
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor', color='white', lw = 0.5)****# x ticks
xticks = [(bins[idx+1] + value)/2 for idx, value in enumerate(bins[:-1])]****xticks_labels = [ "{:.2f}\nto\n{:.2f}".format(value, bins[idx+1]) for idx, value in enumerate(bins[:-1])]****plt.xticks(xticks, labels = xticks_labels)**plt.title('Histogram of Space Missions Costs (Millions of USD)', loc = 'left', fontsize = 18)
一个直方图,用一个刻度描述每个条形
它开始看起来很棒;让我们删除图表的脊线和刻度线,使其看起来更清晰。
fig, ax = plt.subplots(1, figsize=(16,6))n, bins, patches = plt.hist(df.Rocket)# define minor ticks and draw a grid with them
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor', color='white', lw = 0.5)# x ticks
xticks = [(bins[idx+1] + value)/2 for idx, value in enumerate(bins[:-1])]
xticks_labels = [ "{:.2f}\nto\n{:.2f}".format(value, bins[idx+1]) for idx, value in enumerate(bins[:-1])]
plt.xticks(xticks, labels = xticks_labels)**# remove major and minor ticks from the x axis, but keep the labels
ax.tick_params(axis='x', which='both',length=0)****# Hide the right and top spines
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)**plt.title('Histogram of Space Missions Costs (Millions of USD)', loc = 'left', fontsize = 18)
先前直方图的更清晰版本
对于 y 轴,我们可以将值打印在条形的顶部,并删除 y 刻度。
n
我们从绘制直方图中得到的第一个变量包含一个列表,其中包含每个 bin 的计数。
我们可以从前面构建的列表中获得xticks
的 x 位置,从n
中获得标签和 y 值。
fig, ax = plt.subplots(1, figsize=(16,6))
n, bins, patches = plt.hist(df.Rocket)# define minor ticks and draw a grid with them
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor', color='white', lw = 0.5)# x ticks
xticks = [(bins[idx+1] + value)/2 for idx, value in enumerate(bins[:-1])]
xticks_labels = [ "{:.2f}\nto\n{:.2f}".format(value, bins[idx+1]) for idx, value in enumerate(bins[:-1])]
plt.xticks(xticks, labels = xticks_labels)
ax.tick_params(axis='x', which='both',length=0)**# remove y ticks
plt.yticks([])**# Hide the right and top spines
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)**# plot values on top of bars
for idx, value in enumerate(n):
if value > 0:
plt.text(xticks[idx], value+5, int(value), ha='center')**plt.title('Histogram of Space Missions Costs (Millions of USD)', loc = 'left', fontsize = 18)
plt.show()
功能元素就位后的最终直方图
厉害!
要素已经到位;剩下要做的就是更改颜色、字体大小,在 x 和 y 轴上添加一些标签,并根据需要定制图表。
**facecolor = '#EAEAEA'
color_bars = '#3475D0'
txt_color1 = '#252525'
txt_color2 = '#004C74'**fig, ax = plt.subplots(1, figsize=(20,6), **facecolor=facecolor**)
**ax.set_facecolor(facecolor)**n, bins, patches = plt.hist(df.Rocket, **color=color_bars**, **bins='doane'**)#grid
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor', **color=facecolor**, lw = 0.5)xticks = [(bins[idx+1] + value)/2 for idx, value in enumerate(bins[:-1])]
xticks_labels = [ "{:.0f}-{:.0f}".format(value, bins[idx+1]) for idx, value in enumerate(bins[:-1])]
plt.xticks(xticks, labels=xticks_labels, **c=txt_color1, fontsize=13**)
# remove major and minor ticks from the x axis, but keep the labels
ax.tick_params(axis='x', which='both',length=0)
# remove y ticks
plt.yticks([])# Hide the right and top spines
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)for idx, value in enumerate(n):
if value > 0:
plt.text(xticks[idx], value+5, int(value), **ha='center'**, **fontsize=16, c=txt_color1**)plt.title('Histogram of Space Missions Costs\n', loc = 'left', fontsize = 20, **c=txt_color1**)
**plt.xlabel('\nMillions of USD', c=txt_color2, fontsize=14)
plt.ylabel('Number of Space Missions', c=txt_color2, fontsize=14)**
plt.tight_layout()
plt.savefig('costs.png', facecolor=facecolor)
太好了!我们得到了一个数值场,并用漂亮的图表描述了它的分布。现在让我们看看如何处理直方图中的日期。
为了弄清楚这个事件的分类,我们可以从查看数据中最早和最晚的日期开始。
我们可以使用 Matplotlib 支持的许多不同算法轻松地为数值字段选择箱,但这些技术在处理日期时可能不会产生最佳结果。
不要误解我的意思,你会发现,描述变量分布的最佳仓位大小是 378 天,用一整年更容易理解。
好了,让我们将日期时间对象转换成 Matplotlib 可以处理的数字格式,然后我们将调整我们的刻度,看看它看起来怎么样。
import matplotlib.dates as mdates# convert the date format to matplotlib date format
plt_date = mdates.date2num(df['Datum'])
bins = mdates.datestr2num(["{}/01/01".format(i) for i in np.arange(1957, 2022)])# plot it
fig, ax = plt.subplots(1, figsize=(22,6))
n, bins, patches = plt.hist(plt_date, bins=bins)# x ticks and limit
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%y'))
plt.xlim(mdates.datestr2num(['1957/01/01','2021/12/31']))plt.show()
以年份为条块的直方图
那很有趣。我们可以看到太空竞赛从 1957 年到 1970 年代末逐渐成形,最近五年太空计划有所增加。
现在,我们可以根据新的直方图调整之前的设计。
facecolor = '#EAEAEA'
color_bars = '#3475D0'
txt_color1 = '#252525'
txt_color2 = '#004C74'# convert the date format to matplotlib date format
plt_date = mdates.date2num(df['Datum'])
bins = mdates.datestr2num(["{}/01/01".format(i) for i in np.arange(1957, 2022)])# plot it
fig, ax = plt.subplots(1, figsize=(22,8), facecolor=facecolor)
ax.set_facecolor(facecolor)n, bins, patches = plt.hist(plt_date, bins=bins, color=color_bars)ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%y'))
plt.xlim(mdates.datestr2num(['1957/01/01','2021/12/31']))#grid
plt.grid(axis='y', color=color_bars, lw = 0.5, alpha=0.7)
plt.grid(axis='x', color=facecolor, lw = 0.5)#remove major and minor ticks from the x axis, but keep the labels
ax.tick_params(axis='both', which='both',length=0)# Hide the right and top spines
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_position(('outward', 10))plt.xticks(c=txt_color1, fontsize=12)
plt.yticks(c=txt_color1, fontsize=12)plt.title('Histogram of Space Missions Dates\n', loc = 'left', fontsize = 20, c=txt_color1)
plt.xlabel('\nYear', c=txt_color2, fontsize=14)
plt.ylabel('Number of Space Missions', c=txt_color2, fontsize=14)
plt.tight_layout()
plt.savefig('hist.png', facecolor=facecolor)
就是这样!我们构建了两个直方图,了解了定义箱和类的不同方法,更改了许多可视元素以使我们的图表看起来像我们想要的那样,探索了日期格式、主要和次要刻度、网格线和文本。
感谢阅读我的文章。我希望你喜欢它。
你可以在这里找到更多关于 Python 和 Matplotlib 的教程。
资源:
数据;
代码(GitHub);
Matplotlib。hist;
Matplotlib 日期;
Matplotlib Tick 格式化程序 s;
Matplotlib 日期刻度标签—示例;
历史直方图;
Python 中的历史股票价格数据
使用雅虎财经获得每日和分钟级别的历史股票数据。拿到 S&P500 的股票行情列表。
股票是非常不稳定的工具,因此在做出任何交易决定之前,我们彻底分析价格行为是非常重要的。这就是为什么获取和分析价格是至关重要的。python 可以方便地做到这一点。
股票数据可以从 yahoo finance、quandl 和 alpha vantage 等不同的软件包下载。在本文中,我们将研究如何从 yahoo finance 获取每日和分钟级别的数据。这是获取数据的简要版本,如果你正在寻找其他方法和不同的数据类型,那么你可以参考下面。
在这篇文章中,你将学会如何获得股票市场的数据,如价格、成交量和基本面数据…
blog.quantinsti.com](https://blog.quantinsti.com/stock-market-data-analysis-python/)
雅虎财经
我们将使用 yfinance 包获取数据。您可以使用安装此软件包!pip install yfinance(如果尚未安装)。以下代码显示了如何获取 AAPL 从 2016 年到 2019 年的数据,并绘制数据的调整后收盘价。
AAPL 每日价格
多只股票的数据
在下面的代码中,我们将获取多个股票的数据,并将其存储在 dataframe data 中。然后我们将使用 matplotlib 软件包计算每日回报并绘制所有股票价格的累积回报。
分钟级数据
通过 yfinance,还可以取分钟频率的数据。你可以通过调整下面第 8 行的间隔参数来下载其他频率。区间支持以下值:1m
、5m
、15m
、30m
、60m.
您可以分析这些数据,创建交易策略,并使用 pyfolio 软件包分析策略的性能。它计算夏普比率,索蒂诺比率,最大下降和许多其他指标。
我希望你发现这是有用的和快乐的交易和分析。
S&P500 证券交易所列表
下一个合乎逻辑的要求是,如何获得构成你最喜欢的指数或在特定交易所上市的股票。为此,您可以从维基百科页面获取报价器,并使用这些报价器从 yfinance 获取数据。
股票代码列表和其他信息。
S&P500 股票的收盘价。
来源和参考
- y 金融
单个图表中的流行病历史
流行病和大流行仍然是一个热门话题,所以让我们使用交互式水平条形图和 D3.js 来可视化它们的历史吧!
新冠肺炎是本月数据可视化的热门话题,每个人都想使用这个数据集。然而,在这篇文章中,我们将后退一步,看看更大的图景——世界流行病和大流行的整个历史。为此,我们将使用一个名为水平条形图的交互式图表。
图表演示
完整的图表可以在 https://martinheinz.github.io/charts/horizontal-bar-chart/的找到。它包含了发生在公元前 1200 年至 2020 年间的近 250 种流行病的列表。每个条形代表一种流行病。横轴显示时间,以年为单位,纵轴显示疫情。
你可以将鼠标悬停在每个条形上,查看名称、时间跨度和死亡人数。要查看关于疫情的进一步描述,请将鼠标悬停在左侧的标签上。您可以使用顶部的字段深入查看特定的时间段。你也可以按总流行时间跨度、起始年份或死亡人数对图表上的条形进行排序。
数据集
根据标题和主题,本文的数据集是历史或世界流行病列表。我能找到的附有最多数据的最完整的列表来自维基百科文章这里。
这个数据集实际上只是一个包含所有瘟疫、流行病甚至小规模爆发的大表格。作为一个快速示例,这里有一行:
维基百科中的示例行
为了能够在可视化中使用这些数据,我们需要一种对计算机更友好的格式,即 CSV 。我使用简单的 Python 脚本生成了这个 CSV ,你可以在这里找到。这个脚本所做的就是使用 BeautifulSoup 从维基百科中抓取表格,从中检索所有值,并将其写入 CSV 文件。
这里还有一个解析数据的示例行:
至于任何替代的数据来源——我真的找不到任何这类详尽的列表,每个条目都有足够的信息。我在网上能找到的大多只是“十大流行病排行榜”或者只是大量的新冠肺炎数据。如果你知道比这个更好的数据集,请告诉我!
水平条形图
水平条形图实际上只是一个旋转了 90 度的普通条形图,即垂直轴上有数据类别,水平轴上有数据值的图表。尽管它比普通的条形图有很多优点。
一个非常简单的优点是,通过将类别标签放在纵轴上,您可以获得更多的空间来显示它们。另一个是显示时间的能力——它自然地显示在水平轴上,这在普通的条形图上是做不到的。
接下来的几个优势源于我们在这个特定的可视化中使用图表的方式。正如您已经从上面的演示中看到的,单个条形并不仅仅显示一个值。他们显示了长度(以年为单位)以及实际的时间框架。与基本条形图不同,单个条形图并不都连接到水平轴,而是使用每个条形图的起点(也是终点)来显示额外信息。
除此之外,我们还使用工具提示来传达更多的数据,并使用调色板来以易于理解的方式显示数据。同样重要的是要提到调色板的选择是非常重要的,因为如果图表不直观的话,它会使图表很难阅读。一般来说,使用高对比度、发散的冷-暖调色板是最安全的,就像在这篇文章中描述的那样。
密码
这种可视化所需的代码相当长,而且大部分都不那么有趣,所以我不会查看每一行代码,我将只展示和解释最重要的部分。如果你想深入了解代码的细节,那就去我的知识库中的横条图. js 或者查看我之前的关于蜂群图的文章,在那里我展示了关于代码和 D3.js 的更多细节。
过滤
此图表上显示的数据集非常大,几乎有 250 条记录,一次显示所有记录可能会很难阅读。因此,过滤选项对于用户体验至关重要。GUI 允许用户根据时间范围(即流行病的开始和结束年份)进行过滤,并可以选择过滤出死亡人数未知的流行病。
这两种过滤器都需要对数据集和轴进行一些操作。遍历行列表并删除/添加符合过滤标准的行非常容易。但是,当我们已经准备好更新的数据时,我们如何更新图表呢?
第一步是更新 X 轴和 Y 轴的比例。这些刻度中的每一个都有映射到一个范围的域。在我们的例子中,对于 X 轴,我们将年份映射到图表的宽度(范围):
如上面的代码片段所示,我们从数据集中的所有行中提取最小开始年份和最大结束年份,并将其映射到浏览器窗口中的图表大小。使用此图表上的默认设置,最终会将年份[1875–2020]投影到像素[250,980]上。
类似的情况也适用于垂直(Y)轴,我们需要将所有流行病的标题映射到各个蜱:
这里,我们使用波段刻度代替线性刻度,它更适合分类或顺序数据,如标题。这里的域由所有标题的列表组成——同样——投影到图表的大小(高度)上。正如你在上面所看到的,我们也添加了填充以避免标题重叠。我们图表的一部分将以这样的映射结束:
随着比例尺和坐标轴的更新,我们现在需要关注图表中最重要的部分——条形图。使用 D3.js ,该过程有两个部分,包括所谓的进入和退出选择。首先,我们使用exit
选项从图表中删除现有数据:
如注释中所述,上面的代码从查询所有带有类.bars
的 HTML 元素开始。接下来,它将空数组作为数据集绑定到所选的 HTML 元素。在第三行,它应用了exit
选择——简单地说——从选择中删除所有以前在那里并且不应该再在那里的数据(我们只是绑定了一个空数组给它,所以它只是删除了所有的数据)。最后,最后一行删除数据。
删除数据后,我们还需要放回一些东西来显示。这就是enter
选择的由来:
我们再次选择和以前一样的 HTML 元素。然而,这一次,我们将过滤后的数据集绑定到选择,而不是空数组,并执行enter
选择,这是与exit
相反的操作。在最后一行,我们使用了append
函数...为 SVG 的每个数据条目追加 1 个rect
元素,创建我们所有的小条。在这一点上,我们有了所有的条,有了所有的数据,但是它们没有任何属性,比如宽度、位置、颜色等等。但是,我们将在下一节中解决这个问题!
注:对 *enter*
、 *exit*
和 *append*
的解释非常简单,我建议查看 Jonathan Soma 的这篇文章,了解更多上下文。
动画片
仅仅显示更新的数据并不有趣。因此,为了让观众看起来更加愉快,我们将为这些数据更新添加一些过渡。
与我们更新数据时一样,我们将从 X 轴开始。这是我们如何创建它的动画/过渡:
如果你不习惯于 D3.js 代码,上面的片段可能对你来说不太清楚,所以让我们从说明过渡实际上是什么开始——过渡在 D3.js 中是一种动画形式,其中动画的起点是 DOM 的当前状态,终点是你指定的样式、属性和特性的集合。
现在,让我们一行一行地检查代码。首先,我们选择带有.x
和.axis
CSS 类的元素,在这种情况下是横轴——这是我们动画的起点。接下来,我们开始转换,并将其持续时间设置为 1 秒。之后,我们使用.call
函数,该函数将过渡的结束点作为参数,在本例中,该点是从上一节定义的xScale
创建的底轴,加上 15 个垂直刻度。剩下的就是 D3.js 魔了。
现在,在 Y 轴上。理解了前面的代码之后,这一段就简单了,因为它几乎是一样的东西:
我们只改变了 CSS 类(.y
,并将axisBottom
换成了axisLeft
,就这样,我们完成了 Y 轴的动画和渲染:
垂直轴更新
与前一部分一样,我们将结束所有的小酒吧。为了将它们全部动画化,我们将采用与之前的过渡相同的方法,除了在这种情况下,我们将不使用.call
而是直接使用每个attr
函数:
这看起来很复杂,但实际上并不复杂。我们需要意识到的是,这不是一个单独的动画,而是每个条形对应一个动画。对于它们中的每一个,我们希望结束过渡点的是一个条,其x
坐标等于其d.start
,其y
坐标等于 Y 轴上匹配标题的 Y 坐标,其width
等于其d.end
和d.start
之差。至于最后一个属性——我们根据它的长度(d.start - d.end
)设置它的颜色,这个长度映射到预定义的色标。
整理
在这一点上,我们可以让图表保持原样,这样就很好了,但是我们可以通过添加排序选项为用户提供不同的(可能更可读的)数据视图。顶部的 3 个排序按钮允许用户按流行病的总跨度、开始年份和总死亡人数进行排序。让我们看看如何实现这一点:
所有的工作都由一个名为drawSort
的函数来完成,这个函数监听来自上述按钮的点击事件。根据点击的按钮,它决定应用哪种排序。在每种情况下,它都根据每条记录各自的属性以升序/降序对数据集进行排序。然后,这个排序后的数据集被应用于垂直比例,以与我们在上面的过滤部分中所做的相同的方式更新它的域。接下来,我们执行与上一节相同的转换。这样,最终结果将如下所示:
完整图表动画
结论
在这篇文章的最后,我想说的是,并不是所有的图表和情节都是一样的。在我看来,其中一些——比如这种水平条形图——应该得到更多的关注,应该更频繁地使用。所以,希望这个可视化和简短的解释给你足够的信息,也许可以在你的下一个数据可视化中使用这个图表。如果你想看这个图表的完整源代码,你可以到我的知识库这里,并随时留下反馈或在问题中提问,或者如果你喜欢这种内容,就给它打个星。😉
本文最初发布于martinheinz . dev
让我们使用 D3.js 创建交互式蜂群图表,以便更好地可视化您的数据。
towardsdatascience.com](/better-data-visualization-using-beeswarm-chart-bb46a229c56b) [## 自动化 Python 项目的各个方面
每个 Python 项目都可以从使用 Makefile、优化的 Docker 映像、配置良好的 CI/CD、代码…
towardsdatascience.com](/automating-every-aspect-of-your-python-project-6517336af9da) [## 用 Javascript 实现 2D 物理学
让我们在实现真实的 2D 物理模拟和可视化的同时享受一下 JavaScript 的乐趣吧!
towardsdatascience.com](/implementing-2d-physics-in-javascript-860a7b152785)
数据科学学习指南
学习数据科学的途径应该是什么样的
随着公司使用术语“数据科学”筹集大量资金,该技能的价值已经建立了相当长一段时间。数十亿美元被用来雇佣有才华的数据科学家,他们可以建立一个最先进的演绎机器来使用 zettabytes 的数据。随着我们的生活越来越依赖于零售、娱乐、体育、医疗保健、金融和语言等主要行业,这场革命现在已经成为现实。如果使用得当,数据是所有这些主要领域的一个非常有前途的驱动力,这也是对数据科学家的需求不断增加的原因。
在与全球数千名学生和专业人士讨论了与学习数据科学相关的挑战/问题后,我开设了这个频道来应对所有这些挑战,并帮助你们每个人定义自己从数据到涅槃的道路。
开始于,
数据科学家(DS)的真正含义是什么?
这里有一个非常著名但有点误导的维恩图,它将数据科学解释为数学、黑客技能和实质性专业知识的混合。
来自http://drew Conway . com/Zia/2013/3/26/the-data-science-Venn-diagram
作为一名 DS,你的最终目标是为高管提供指路明灯,让他们做出更明智的决策,并通过解决实际数据问题创造尽可能大的影响。
- 对于一名优秀的数据科学家来说,你必须知道如何定义精确的、有意义的问题,这些问题的答案可以映射到潜在的商业计划中。这需要你有一些领域知识(图中的实质性专业知识)。这是随着你解决越来越多的问题而积累的经验。
2.对于许多问题来说,需要从不同的来源搜寻数据,并将其压缩成更容易处理的形式。编写复杂的 SQL 查询提取数据,使用 python 或 R 脚本操纵 CSV 和文本文件,理解矢量化运算和编码算法;这些让你成为一个优秀的数据黑客。
3.所有的机器学习算法都是基于数学和统计学的。拥有足够数学和统计知识的黑客技能将使你成为一名优秀的机器学习实践者,但不是数据科学家。科学谈论回答导致发现的动机问题。
因此,数据科学家必须专注于 3 个主要课题,领域知识,数学和统计原理以及数据编程/黑客技能。
数据科学的层次结构
数据科学是一个广阔的学习空间,数据科学家在一个组织中工作的职位和部门各不相同。例如,谷歌为工程、客户解决方案、运营、谷歌地图等领域雇佣数据科学家。他们不需要在我们谈到的所有三个领域都表现出色。这就是我们谈论的数据科学和行业实际要求之间的差距。
这里是数据科学技能金字塔,用于在更精细的层面上理解数据科学。你需要覆盖至少 3-4 个层次的知识,才能被一家不一定是数据科学家而是分析师的公司聘用。然后,当你到达金字塔的顶端时,你被称为研究科学家,数据科学家核心,他们由机器学习工程师协助。
作者 Monica Rogati—https://medium . com/hacker noon/the-ai-hierarchy-of-needs-18f 111 FCC 007
注意:重点是你可以从数据科学领域瞄准一堆工作描述。
学习数据科学的先决条件
基于 python 的数据科学课程/程序/书籍要求您对 python 编程和数学能力有所了解。我将介绍基本的 python 编程和概念,它们在处理数据时将变得非常方便。
因此,要掌握数据科学,你需要的只是学习的意愿、好奇的头脑以及明确定义和引导的途径。
顶级数据科学课程
我设计的数据科学课程分支!
我认为数据科学课程有 4 个主要分支有助于培养 rockstar 数据科学家。这是按顺序排列的名单
- 黑客编程工具—
- 数据 —从提取到执行探索性分析。
- 数学和统计— 所有的先决数学概念都有助于你对算法及其原理有一个坚实的理解。
- 算法和项目【V . Imp】—从不同的机器/深度学习算法到实现这些模型的基于领域的企业级项目。
学习目标
一旦你找到了一条路可走,下一个重要的问题是你的学习目标是什么,例如,我的一个学员在金融领域工作了 20 年,现在他们想学习数据分析,因为这将有助于她在自己的岗位上成长,并能够寻找其他机会。您可能是以下人员之一:
- 希望转换你的职业领域(例如,从软件工程师到数据科学家),但在同一个领域。
- 找数据科学的工作,苦苦挣扎。
- 对数据科学及其给你的个人资料带来的职业前景感兴趣的学生。
- 我想从事一些自由职业数据项目。
现在,根据你属于哪一类,你必须找出你的优势和你的劣势。例如,软件工程师的优势在于编程,但不一定在于数学建模,统计学家可能会发现自己在 python 或 r。
一旦你从自己的弱点中找到了主要的关注点,那么你只需要在你的强项上花更多的时间在你的弱项上。
制定自己的学习计划
你的学习目标会给你指明方向,但是能够继续前进是人们为自己开脱的地方。
问:动机是这里的关键问题。
一个深思熟虑的学习计划可以帮助你实现你的目标。但是什么是好的学习计划呢?
鼓励大脑学习更多知识的制度。构建/解决一个现实世界的问题会给你的思维提供背景和清晰性,这反过来会让你有兴趣去发现隐藏的模式,以及清晰定义的下一步,以防止你迷路。
回答:保持你的学习过程项目/问题驱动。解决不同复杂程度的现实世界问题,并在学习新概念和新技术的过程中不断进步。
其他常见问题有:
一个人应该做什么样的项目?
答:如果你不想呆在自己的专业领域,你应该参与不同行业的项目组合,即医疗保健、金融、电子商务、生物信息学、旅行和旅游、制造业等。
问:学数据科学需要多少时间?
答:这取决于个人,但平均需要 3-4 个月来涵盖所有主题及其在 6-8 个项目中的实施,因为你每天投入 2 个小时。
问:有哪些学习数据科学的好资源?
Ans:
1。对于 Python 编程,可以使用:https://www.learnpython.org/或者https://docs.python.org/3/tutorial/2.使用 Scikit-learn、Numpy、Pandas、Keras 和 Tensorflow 等库的官方文档。
3.对于数学或者统计学,可以用书:https://mml-book.github.io/book/mml-book.pdf
4.对于项目,开始在 Kaggle 上练习。注意:我将写另一篇关于资源的文章。
- 找出一天中最适合你的时间。
- 养成阅读研究论文的习惯。
整个计划的唯一问题是有许多主题要涉及,有许多地方要寻找。所以,我尝试在一个地方给你提供最好的资源,我的 YouTube 频道叫做:
Harshit 的数据科学
通过这一渠道,我计划推出几个关于上述数据科学需求层次的系列。以下是你应该订阅频道的原因:
- 该系列将涵盖每个主题和副主题的所有必需/要求的高质量教程。
- 解释了为什么我们在 ML 和深度学习中做这些事情的数学和推导。
- 与谷歌、微软、亚马逊等公司的数据科学家和工程师以及大数据驱动型公司的首席执行官的播客。
- 项目和说明,以实现迄今为止所学的主题。
订阅我的 YouTube 频道,第一个视频将于 3 月 23 日发布:
涵盖整个数据科学课程和其他所有内容。指导了 1500 多名学生,课程…
www.youtube.com](https://www.youtube.com/channel/UCH-xwLTKQaABNs2QmGxK2bQ)
你可以在 LinkedIn 、 Twitter 或 Instagram 上与我联系(在那里我谈论健康和福祉。)
注意:在这段黑暗的日子里,自我隔离给了我们一些自我提升的空间,我们可以利用它来发展新的技能、爱好,并帮助我们未来的自己从新冠肺炎这样的大流行病中吸取教训。
¡Hola! 你好!Hej ! — Multilanguage and more for Power Virtual Agents.
微软 POWER 平台解决方案
Power 虚拟代理有什么新特性?作为微软 Power 平台的一部分,Power 虚拟代理聊天机器人的最新改进概述
乔恩·泰森在 Unsplash 上的照片
在过去的几年里,低代码解决方案变得越来越流行。对于微软 Power 平台及其最新成员 Power 虚拟代理,其低代码聊天机器人引擎来说尤其如此。
到目前为止,这个解决方案有其局限性;最重要的是,我们只能用英语创建聊天机器人。幸运的是,微软最近大大改进了这个解决方案。
这一简要概述涵盖了最重要的功能:
- 多语言支持
- 全局对话框变量
- 来自外部源的全局对话框变量
- 应用生命周期管理支持
如果你是电力虚拟代理新手,你可以按照我的逐步介绍这里。
2020 年夏季 Power 虚拟代理的新特性
¡Hola! 你好!Hej! — Multilanguage Support
有了这个新版本,我们现在可以为多种语言创建一个聊天机器人,而且非常简单。只要创建一个新的机器人,你会在第一步看到语言下拉菜单。
根据文档,支持的语言如下:
- 英语(已正式发布)
- 中文(简体)
- 中文(繁体)
- 丹麦的
- 荷兰人
- 法语
- 德国人
- 印度尼西亚的
- 意大利的
- 日本人
- 挪威的
- 葡萄牙语
- 俄语
- 西班牙语
- 瑞典的
- 土耳其的
- 印地语
- 韩国的
- 抛光剂
要获得支持语言的完整列表,请点击这里查看官方文档。
注意,一个机器人一次只能说一种语言。如果你想让同一个聊天机器人支持多种语言,比如说德语和英语,你可以创建两个聊天机器人。这就是像 Microsoft Bot Framework 这样的亲代码解决方案给你带来显著优势的地方,它允许你构建一个 Bot 来检测所说的语言并动态地调整语言。
全局变量
直到最近,我们可以在单个对话框中定义变量来收集、存储和管理机器人的上下文。我们可以很容易地收集像用户名这样的细节,并在同一个对话框(主题)的后续步骤中使用这些信息。然而,我们不能在不同的对话框之间共享信息,这使得体验有点模糊,因为我们需要多次问用户同样的问题。
随着全局变量的引入,我们现在可以在不同的对话框之间共享这些信息。
让我们做一个快速测试。创建一个名为的新话题收集用户信息。添加问题“你叫什么名字?”。给输出变量起一个有意义的名字,比如用户名、并将用法选项切换为 Bot(任何主题都可以访问)。
这个变量现在可以从任何其他主题中访问,包括像问候对话框这样的内置主题。
例如,您可以在问候对话框中添加分支逻辑,看看我们是否已经知道了用户的名字。如果是这样,我们输出一个更加个性化的问候消息。
如果变量没有值,Power Virtual Agent 将自动切换到收集用户信息对话框,尝试收集该信息。
外部来源的全局变量
我们不仅可以从对话框中创建全局变量,还可以从外部资源中设置它。我们可以从外部传入一些参数,例如,从嵌入聊天机器人的网站传入。
为此,我们需要选中复选框外部源可以在我们的目标变量上设置值。如描述所示,这允许我们从外部设置变量。
让我们使用 iFrame 来尝试一下。
确保您已经发布了您的更改(这可能需要 15 分钟),然后转到频道并点击定制网站。
从那里,你可以复制 html 代码并在任何网站上使用。
我们使用jsfiddle.net来模拟这个过程。只需将复制的 html 片段粘贴到 html 面板,然后单击运行。
要使用这个 iFrame 代码传递变量的值,只需将它作为 URL 变量附加在 src 属性的末尾。要设置用户名,只需追加?UserName=Sebastian
并再次运行代码。
聊天机器人将不再提示您的姓名。
请注意,参数必须是 URL 编码的,以防它包含特殊字符或空格。
支持应用生命周期管理
Power Virtual Agents 现在支持解决方案。这意味着可以使用 Microsoft Power Platform 的解决方案概念来管理它。请将解决方案视为每个应用程序或 chatbot 使用 Microsoft Power Platform 构建的基本构建块的包。
您可以打包、导出、导入解决方案,并在不同的环境之间共享它们。
这使得能够使用应用生命周期管理(ALM)实践来管理这样的解决方案。您可以使用您最喜欢的 CI-CD 解决方案在不同阶段之间移动您的聊天机器人,如开发、测试、试运行和生产。
要查看您的所有机器人,请前往make.powerapps.com>聊天机器人>列表。
要打包您的聊天机器人,只需进入解决方案,点击新建并创建一个空解决方案。
接下来,点击添加现有的并从列表中选择聊天机器人。
最后,您选择想要添加到解决方案中的聊天机器人,并点击添加按钮。
从这里,我们可以开始导出解决方案或开始实施 CI-CD 管道。
我最近写了一篇关于如何用 Azure DevOps 实现这样一个管道的博文。你可以很容易地将它应用到聊天机器人上。
就是这样。试试看。
就这样吧。👉
—塞巴斯蒂安
霍尔特-温特斯指数平滑
使用霍尔特-温特斯指数平滑法生成的销售预测(数据来源: US FRED )(图片由作者提供)
时间序列数据的超快速预测工具
霍尔特-温特斯指数平滑法用于预测既显示趋势又显示季节变化的时间序列数据。霍尔特-温特斯技术由以下四种预测技术叠加而成:
(图片由作者提供)
加权平均值:加权平均值就是对 n 个数字进行平均,其中每个数字都被赋予一定的权重,分母是这些 n 个权重的总和。重量通常根据一些称重功能进行分配。常见的加权函数有对数函数、线性函数、二次函数、三次函数和指数函数。平均作为一种时间序列预测技术,具有在计算预测时消除历史值变化的特性。通过选择合适的加权函数,预测器确定在计算时间序列的未来值时应该强调哪些历史值。
指数平滑:指数平滑(ES)技术使用所有先前值的加权平均值来预测下一个值,其中权重从最近的历史值到最早的历史值呈指数衰减。当您使用 ES 时,您做出了一个重要的假设,即时间序列的最近值比旧值更重要。ES 技术有两个大的缺点:当你的数据表现出趋势和/或季节变化时,它不能被使用。
霍尔特指数平滑:霍尔特 es 技术弥补了简单 ES 技术的两个缺点之一。Holt ES 可用于预测具有趋势的时间序列数据。但是 Holt ES 在时间序列中存在季节性变化时就失效了。
霍尔特-温特斯指数平滑法:霍尔特-温特斯法修正了霍尔特-温特斯法,使其可以用于趋势和季节性并存的情况。
要了解霍尔特-温特斯指数平滑法的工作原理,必须了解时间序列的以下四个方面:
水平
通过一个例子可以更好地理解级别的概念。以下时间序列显示了默克公司在纽约证券交易所的收盘价。水平红线表示时间序列在上升和下降过程中的一些级别:
数据来源:雅虎财经
趋势
水平以某种模式变化的时间序列被称为具有趋势。水平围绕某个平均值随机变化的时间序列可以说表现出随机趋势。除了知道趋势是随机的之外,当趋势是随机的时候,趋势的概念就没有那么有用了,相比之下,趋势可以用一些函数来建模。
让我们放大上述股价图中的一个特定区域来说明积极趋势的概念:
两个连续水平之间的积极趋势的例证
一些常见的趋势是线性、平方、指数、对数、平方根、倒数和三阶或更高阶多项式。使用相应的数学函数,即 log(x)、linear、x、exp(x)等,可以很容易地对这些趋势进行建模。
高度非线性的趋势需要复杂的建模技术,例如人工神经网络来成功地对其建模。
观察趋势的一个有用的方法是作为一个比率,或者作为时间序列在给定水平上的速度。
这使得趋势成为一个有大小(变化率)和方向(增加或减少)的向量。
让我们把趋势的这种解释作为一种速率或速度放在我们的脑海里。我们将在解构霍尔特-温特斯指数平滑的预测方程时使用它。
季节性
许多时间序列显示围绕当前水平的周期性上下运动。这种周期性的上下运动被称为季节性。以下是展示季节性模式的时间序列示例:
每日太阳黑子计数。数据来源: SILSO (图片由作者提供)
噪音
噪声只是时间序列数据中你无法(或不想)解释的一个方面。
水平、趋势、季节性和噪声被认为以相加或相乘的方式相互作用,产生您观察到的时间序列的最终值:
乘法组合(具有加法趋势)
加法趋势、乘法季节性、乘法噪声(图片由作者)
完全加法组合
加法趋势、季节性和噪声(图片由作者提供)
霍尔特-温特斯指数平滑方程
我们现在准备看看霍尔特-温特指数平滑技术的预测方程。我们将首先考虑趋势增加到当前水平的情况,但是季节性是倍增的。这是现实世界时间序列数据中的常见情况。
因为我们指定了预测模型的方程,所以我们将忽略噪声项。
(图片由作者提供)
在上面的等式中,我们预测了从某个任意步 i 开始的时间序列 k 的值。假设季节变化具有已知的周期长度 m 时间步长。例如,对于年度变化, m=12。
让我们看看如何估计 L_i,B_i 和 S_i.
让我们从步骤 i 的趋势 B_i 的估计开始:
(图片由作者提供)
上面的等式通过以下两种不同的方式计算来估计在步骤 i 中观察到的趋势 B_i :
【L _ I _ L _(I-1)】:这是两个连续电平之间的差值,它代表电平 L_(i-1) 处的电平变化率。看待这一项的一种方式是把它想象成数据在水平 L_i 处的速度,它来自水平 L_(i-1) 。
【B _(I-1):这就是在【L _(I-1)的电平变化率,递归表示。为了计算 B_(i-1) ,我们通过用 (i-1) 替换 i ,对 B_i 使用相同的等式,并且我们一直这样做,直到我们到达 B_0 ,其值我们假设为初始条件。一会儿会有更多关于估计初始条件的内容。
下图说明了对 B_i 的上述递归关系的递归分解:
(图片由作者)
现在应该很清楚指数加权平均是如何形成霍尔特-温特斯技术的弱点的。这里有三个重要的观察结果:
- 重量 β(1-β)、β(1-β)、β(1-β)…等。形成几何级数。
- 这个数列的每一项 β(1-β)^k 对时间数列中两个连续电平[l _(I-k)-l _(I-k-1)】之差进行加权。
- 最近的两个级别【L _ I—L _(I-1)】之间的差异具有最大的权重 β ,并且随着时间的推移,权重以因子 (1-β) 呈指数衰减。
还要注意的是, B_i 的估算要求我们知道步骤 i 和 (i-1) 、 (i-2) 等的水平,直到我们假设的初始条件 L_0 为止。
现在让我们看看如何在时间步 i 估计水平 L_i :
(图片由作者)
正如趋势 B_i 一样,上述等式通过以两种不同的方式计算来估计水平 L_i ,然后取两个估计值的加权平均值,如下所示:
T _ I/S _(im):回想一下,我们已经假设水平和季节性是相乘的,即 T_i=L_iS_(i-m)N_i. 因此,如果你选择忽略噪声的影响N _ I,那么 L_i 的一个好的估计值就是T _ I/S _(im)
【L _(I-1)+B _(I-1)】:在本项中,我们通过将 L_(i-1) 与 L_(i-1) 到 L_i 之间发生的水平变化相加,即趋势 B_(i-1) 来估计水平 L_i 。
与 B_i 一样,我们递归地求解这个方程,直到我们碰到 T_0 、 S_0 、 B_0 和 L_0。T_0 只是我们训练数据集中最老的数据点。s0、B0和l0为水平、趋势和季节变化的初始值。它们是用各种技术估算的,我很快就会讲到。现在,我们假设它们被设置为一些合理的初始值。
在 L_i 的上述等式中,为了估计 L_i ,我们还需要估计季节性成分 S_(i-m) 的贡献。因此,让我们看看如何在步骤 i 中估算季节性成分:
(图片由作者提供)
您可以看到,季节性成分 S_i 的估算策略与趋势 B_i 和水平 L_i 的估算策略相似,它通过两种不同的方式计算来估算 S_i ,然后取两个估算值的加权平均值。
现在我们知道了如何估计时间步 i 的水平、趋势和季节性成分,我们准备将三个估计值放在一起,以获得步骤【I+k】的预测值(I+k),如下所示:**
(图片由作者提供)
初始条件的估计
由于 Holt-Winters 方法的所有方程都是递归关系,我们需要为这些估计方程提供一组初始值,以启动预测引擎。具体来说,我们需要设置 L_0,B_0,S_0 的值。**
有几种方法可以设置这些初始值。我将解释 Pythonstats models库使用的技术。(我们将很快使用 statsmodels 来构建 Holt-Winters ES 估计器,并使用它来预测未来的 12 个时间步长)。
估算 L_0 : Statsmodels 将 L_0 设置为您提供的时间序列的所有观测值的平均值,位于指数 0,m,2m,3m 等,其中 m 为季节周期。例如,如果您告诉 statsmodels 您的时间序列显示 12 个月的季节周期,它将按如下方式计算 L_0 :
(图片由作者提供)
注意,T_0 是时间序列数据中最老的值。
即使时间序列不显示季节性,也可以使用霍尔特-温特斯预测技术。在这种情况下,statsmodels 会将 L_0 设置为训练数据集的第一个值。即
l0 = t0,当数据中没有季节变化时**
估计 B_0 :如果您的时间序列显示一个相加趋势,即其水平线性变化,statsmodels 通过计算观察值 T_i 在 m 时间步上的变化率,然后取这些变化率的平均值,来估计初始趋势 B_0 。例如,如果您告诉 statsmodels,您的时间序列显示出一个相加趋势,并且它有一个 12 个月的季节周期,它将按如下方式计算 B_0 :
(图片由作者提供)
如果你的时间序列呈现倍增趋势,即水平以与当前水平成比例的速率增长, statsmodels 对 B_0 使用看起来稍微复杂的估计器。最好用年度季节性的例子来说明( m=12 ):
(图片由作者提供)
但是,如果您的时间序列不显示季节性变化,如果趋势是乘法的,则简单地将B0设置为t1/t0,如果趋势是加法的,则设置为(t1-t0)。
估计 S_0 : 如果季节性是倍增的,即给定水平的季节性变化值与该水平的值成比例,那么 S_0 估计如下:
(图片由作者提供)
当季节变化是常数或在每个水平上增加一个固定的量,即它是累加的,那么s0估计如下:
(图片由作者提供)
当你的时间序列没有季节变化时, S_0 是[],一个空向量。
注意一件重要的事情。虽然 L_i 和 B_i 是标量,但是 S_i (因此 S_0 )是长度为 m 的向量*,其中 m 是季节周期。在您的时间序列中的每个时间步 i=0,1,2,…n ,位于矢量位置 (0 mod m),(1 mod m),(2 mod m),…,(i mod m),…,(n mod m) 的相应季节因子用于预测 F_i.*
估计α、β和γ
加权系数 α、β和γ 通过给它们初始值,然后针对某个合适的分数迭代优化它们的值来估计。最小化 MSE(均方误差)是一个常用的优化目标。Statsmodels 将初始 α 设置为 1/2m,将β 设置为 1/20m ,当存在季节性时,将初始 γ 设置为 1/20(1 — α) 。*
一旦l0,B0 和 s0*被估计,并且 α,β和γ 被设定,我们可以使用 L_i,B_i,S_i,F_i 和 F_(i+k) 的递推关系来估计时间序列在步骤 0,1,2,3,…,I,…,n,n+1,n+2,…,n 的值*
如果您的训练数据集有 n 个数据点,那么位置 n+1,n+2,…,n+k 对应于使用霍尔特-温特斯估计技术生成的 k 样本外预测。
在 Python 中使用霍尔特-温特斯指数平滑法
我们将使用 Holt-Winters 指数平滑技术估计美国二手车经销商零售时间序列的 12 个未来值:
数据集可从这里下载。
让我们从导入所有需要的包开始。
***import** pandas **as** pd
**from** matplotlib **import** pyplot **as** plt
**from** statsmodels.tsa.holtwinters **import** ExponentialSmoothing **as** HWES*
将数据集读入熊猫数据框。请注意,日期列(列 0)是索引列,其格式为 mm-dd-yyyy。
*df = pd.**read_csv**('retail_sales_used_car_dealers_us_1992_2020.csv', **header**=0, **infer_datetime_format**=True, **parse_dates**=[0], **index_col**=[0])*
将索引频率明确设置为每月一次,这样 statsmodels 就不必尝试推断它。
*df.index.**freq** = **'MS'***
绘制数据:
*df.**plot**()
plt.**show**()*
我们得到了下面的图表:
(图片由作者提供)
在训练数据集和测试数据集之间拆分。最后 12 个周期形成测试数据。
*df_train = df.**iloc**[:-12]
df_test = df.**iloc**[-12:]*
根据训练数据建立和训练模型。在上图中,时间序列的水平似乎是线性增加的。所以我们把趋势设为相加。然而,每一水平周围的季节变化似乎与当前水平成比例增加。所以我们把季节性设为倍增。
*model = **HWES**(df_train, **seasonal_periods**=12, **trend**='add', **seasonal**='mul')
fitted = **model**.fit()*
打印出培训总结。
***print**(fitted.**summary**())*
我们得到以下输出:
(图片由作者提供)
为训练数据集中最后一个数据点之后的 12 个步骤创建样本外预测。
*sales_forecast = fitted.**forecast**(**steps**=12)*
将训练数据、测试数据和预测绘制在同一个图上。
*fig = plt.**figure**()
fig.**suptitle**('Retail Sales of Used Cars in the US (1992-2020)')
past, = plt.**plot**(df_train.index, df_train, **'b.-'**, label=**'Sales History'**)
future, = plt.**plot**(df_test.index, df_test, **'r.-'**, **label**='Actual Sales')
predicted_future, = plt.**plot**(df_test.index, sales_forecast, **'g.-'**, **label**='Sales Forecast')
plt.**legend**(**handles**=[past, future, predicted_future])
plt.**show**()*
(图片由作者提供)
让我们放大到最近 12 期。您可以看到预测滞后于急剧的转折点,这对于任何基于移动平均线的预测技术来说都是应该的:
(图片由作者提供)
以下是完整的源代码:
进一步阅读
温特斯出版社(1960 年)。通过指数加权移动平均线预测销售额。管理科学。
Makridakis,s .、Wheelwright,S. C .、Hyndman,R. J. 预测方法和应用。第三版。约翰·威利的儿子们。
引用和版权
美国人口普查局,零售销售:二手车经销商[MRTSSM44112USN],检索自圣路易斯美联储银行弗雷德;https://fred.stlouisfed.org/series/MRTSSM44112USN,2020 年 6 月 17 日,根据弗雷德版权条款。
SILSO,世界数据中心-太阳黑子数和长期太阳观测,比利时皇家天文台,在线太阳黑子数目录:http://www.sidc.be/SILSO/,1818–2020(CC-BY-NA
默克公司(MRK),纽约证券交易所——历史调整收盘价。货币为美元,https://finance.yahoo.com/quote/MRK/history?p=MRK,2020 年 7 月 23 日。版权所有雅虎财经和纽约证券交易所
本文中的所有图片版权归 CC-BY-NC-SA 下的 Sachin Date 所有,除非图片下面提到了不同的来源和版权。
感谢阅读!如果您喜欢这篇文章,请 关注我 获取关于时间序列分析的提示、操作方法和编程建议。
P 值的圣杯以及它们如何帮助我们进行假设检验
你是数据科学/ML 领域的吗?那你一定要看这个!
所有的互联网资料都把 p 值的概念搞得太复杂了,让我们通过简单的例子来解读它
这篇文章将会用例子来解释下面的概念:
- 什么是 p 值?
- 如何解读它们?
- 什么是阿尔法,为什么阿尔法=0.05 是普遍的规范?
- 假设检验(什么是无效假设和替代假设,以及 p 值如何与它们相关联?)
这篇文章中会用到的例子
让我们假设一个医学实验室正在开发多种疫苗,以便能够成功治疗冠状病毒。科学家们已经开发出了两种疫苗株- A 和 B,现在他们必须确定它们的有效性。
因此,在第一次试验中,他们分别在一名感染者身上测试了这两种疫苗。结果出来了,注射疫苗 A 的人被治愈了,但是注射疫苗 B 的人没有被治愈。
现在,我们能说疫苗 A 比疫苗 B 好吗?不,我们不能。因为这只是一个人的试验,这给很多事情留下了机会。也许注射疫苗 A 的人有很强的安慰剂效应,或者注射疫苗 B 的人已经是心血管病人,并且对疫苗 B 的一种成分过敏。无数的事情都可能发生。因此,总的推论是,我们不能基于一个样本量就说疫苗 A 比疫苗 B 好。****
现在,让我们假设科学家们进行了另一项试验。这一次,他们对两个人分别进行了两种疫苗的测试。
结果-注射疫苗 A 的人都被治愈了,而注射疫苗 B 的人被治愈了。现在,我们能自信地说疫苗 A 比疫苗 B 好吗?
不,我们仍然不能这样说,因为我们在单人实验中谈到的机会因素在这里也适用。样本量仍然太小,无法推断出任何结论。
继续,试验是在很多人身上进行的。
现在,让我们看看多种结果场景。
在图中显示的第一个场景中,请注意疫苗 A 的治愈率为 99.7%,而疫苗 B 的治愈率仅为 0.001%。现在,让我们假设,在疫苗 A 的试验组中,许多态度积极的中间派人士被排挤,导致安慰剂效应,而在疫苗 B 的试验中,许多过敏人群被排挤。 这可能会导致他们体内的反应,导致他们的症状没有减轻,或者可能会发生任何其他随机事件,可能有利于疫苗 A 而不利于疫苗 b。但是,因为我们可以在这里看到试验组的规模足够大,因此,抛开一些随机事件, 疫苗 A 对应的成功事件太多,疫苗 B 对应的失败事件也太多。这一结果确实让我们有信心推断出疫苗 A 与疫苗 B 显著不同,可以说它是两者中较好的一个。
现在,看看第二个结果场景,其中疫苗 A 和 B 的治愈率分别为 37%和 29%。现在,只看这些百分比,你能自信地宣称一种疫苗一定比另一种好吗?
不,我们不能,因为这里不像第一种情况那样有大约 0%和大约 100%的利率。
我们在分析世界中遇到的所有现实生活中的情况更接近于第二种情况,在这种情况下,仅仅靠人类的判断是不够的!在这里,我们求助于统计数据!
我们对困惑之神说什么?不是今天 😄 (哈哈!对于门外汉来说,这是一个蹩脚的、小得了的参考)。
相反,聪明的统计之神把 P 值作为我们武器库中的一个重要工具交给了我们,可以在这种情况下使用。
什么是 P 值?
它是一个介于 0 和 1 之间的数字,用于量化我们对疫苗 A 与疫苗 b 不同的确信程度。该值越接近 0,我们就越确信这两种疫苗之间存在显著差异。
p 值阈值(Alpha)
现在,问题来了,P 值应该有多小才能让我们足够自信?标准α值通常取为 0.05
如果满足以下条件,则证明存在统计上的显著差异:
p 值≤α(一般为 0.05)
在上述情景 2 中,我们看到 p 值=0.24,显然不小于 0.05,因此我们得出结论,两种疫苗彼此之间没有显著差异。
记住,一个小的 p 值并不能告诉我们 A 和 B 有多大的差异。例如,p 值=0.04 只是告诉我们 A 和 B 有显著差异,但不能告诉我们有多大的差异(差异可能很小,也可能很大)
但是,让我们更多地讨论为什么要设定 5%的门槛,以及它实际上意味着什么?
如果我们假设我们正在测试两种疫苗,它们实际上是来自一种疫苗的两个相同样本,因此它们彼此没有区别。尽管如此,我们继续用 5%的α值测试这些样本,这意味着 95%的情况下我们会得到 p 值> 0.05,这将确认这两种疫苗没有不同,但是 对于剩余的 5%的情况,由于一系列随机原因,我们可能会得到 p 值< 0.05,这当然会指示错误的结果,这就是假阳性。 (例如-妊娠试验结果为阳性,但该女士实际上并未怀孕,患者得到的活检报告为恶性,而肿瘤为良性-假阳性病例)
因此,alpha 值为 5%意味着 100 次中有 5 次会出现误报。
现在,如果我们在航空科学或生物科学领域工作,精度非常重要,不能让大量的假阳性发生,那么在这些情况下,我们必须使用α值,比如说 0.00001,这意味着 100,000 次中只有 1 次会出现假阳性。这种精度的成本非常高,因此很少有行业/用例要求 alpha 值小于 0.05。
类似地,如果你遇到一个自由的用例,比如垃圾车在每天早上 8 点 30 分钟内到达,我们也可以允许 alpha 值达到 0.2 或 20%。
因此,普遍接受的值 0.05 已经被一般化,因为它适合许多用例,但是在不符合这个置信度要求的情况下,它可以并且应该被调整。
现在让我们接触一下假设检验,因为我们已经讨论了它的前提。我遇到过许多关于这个主题的复杂文章,但是现在你已经阅读了疫苗的例子,这对你来说是小菜一碟,请继续阅读!
- 无效假设:两种疫苗没有区别(不需要证明什么,如果没有替代假设的证据也可以接受)无罪直到被证明有罪是一个假设无效假设的例子,直到原告毫无疑问地证明被告部分确实是凶手,这样很容易记住定义:)
- 替代假设:疫苗确实不同,我们说有 95%的置信度(在α= 0.05 的情况下)(这必须用显著的 p 值来证明,这使我们有信心拒绝零假设)
看,这些令人生畏的统计术语确实存在简单的解释!!
到此为止,我们已经结束了这篇文章,如果你有兴趣,你也可以看看我关于统计学和机器学习的其他文章,所有这些文章都有我的手绘插图,简单的例子和大量的学习:)
这些概念有什么正常或不正常的地方?
towardsdatascience.com](/clearly-explained-normal-distributions-and-the-central-limit-theorem-8d7cc5a6052f) [## 解释清楚:强大的中心极限定理
这实际上是最重要的统计定理之一,请继续阅读以获得简单的解释!
towardsdatascience.com](/clearly-explained-the-mighty-central-limit-theorem-b8152b94258) [## 基础统计术语解码
用 VS 风格解释,先左后右!
towardsdatascience.com](/foundation-statistics-terms-decoded-f1def3721c1e)
保重!快乐学习!保持安全和健康:)
家酿和 Pyenv Python 愉快地合作
如何使用 pyenv 的 Python 来满足自制程序的依赖性,因此只有 pyenv 管理您机器上的 Python 3 安装
接下来,我要清理我的桌子!图片作者。
像很多 数据 科学家和 Python 开发者 之前 我,我已经 给了上管理我自己的 Python 构建并转向 pyenv (链接到《走向数据科学》中的编年帖子)。在不同的时间点,我自己从源代码中构建 Python 版本或者在 OSX 上使用预建框架安装程序,同时手工管理/usr/local/bin
中的链接。使用这两种方法中的任何一种,我从任何已安装的版本中旋转虚拟环境都没有问题,但是最近我和 PATH 混淆了我们是使用家酿的python@3.8
还是我安装的框架版本。输入 pyenv。如果你在寻找如何设置 pyenv,有 有无文章 或 博客 帖子 上 如何 到 安装 它正如这些文章中提到的,有许多方法可以在您的 OSX 系统上安装 Python:
- 有内置的 Python 2.7.x(注:Python 2 自 2019 年 12 月起已弃用)。
- Homebrew 将提供一个 Python 3 版本来满足它自己的依赖性。
- 你可以有框架版本。
- 您可以从源代码构建它。
- 或者像许多人建议的那样,您可以使用 pyenv 来管理版本。
您的系统需要内置的,而 Homebrew 实际上只会为您保留一个版本的 Python 3,所以如果您想管理 Python 2 或 3 的特定版本,您需要在后三个版本中进行选择。我省略了 Anaconda,因为我不需要它,也没有花时间去真正理解它是如何工作的,但是我听说过 Windows 用户的成功故事。在这里,我们将选择 pyenv 来管理 python 版本,但是这样做的话,我们的系统上最初会有多个版本的 Python 2 和 Python 3(除了 builtin 版本 2 和 homebrew 版本 3 之外,还有来自 pyenv 的版本)。再说一次,我们对 Python 2 的内置无能为力,OSX 需要它。对于 Python 3,我们可以让自制软件使用 pyenv 的 Python 版本之一来消除冗余的来源。在我们开始之前,值得注意的是,如果你像 pyenv 推荐的那样使用你的PATH
,你不太可能经历 pyenv 和 homebrew 之间的冲突,并且 Homebrew 对此发出警告;你正在涉水进入依靠你自己的理解来支持这个用例的领域(正如家酿在他们的帖子中所说的)。
使用 pyenv 的 Python 来满足自制依赖
这些堆栈溢出答案有使用符号链接(symlinks)的正确想法,但是据我所知,他们没有得到正确的链接。让我们把它们做好!
如果你已经有了任何家酿的 python3 的痕迹,首先把它们去掉(brew unlink python3
和brew uninstall python3
)。如果你已经有了来自 Homebrew 的 python@3.8,当卸载它的时候,记下依赖它的包(例如,ffmpeg
,然后重新安装它们。
在这篇文章中,Homebrew 预计是 Python 3.8.6,因为它是 python@3.8,所以首先按照他们的文档安装 pyenv 的那个版本:
pyenv install 3.8.6
这将(默认情况下)把实际的 Python 安装放在
~/.pyenv/versions/3.8.6
现在我们只需要添加一个链接,然后让 brew 完成剩下的工作。我将在这里使用完整路径,因此您可以从任何地方运行它(记住在头脑中把ln -s ... ...
读成“link-symbolic[target][linkname]”):
ln -s ~/.pyenv/versions/3.8.6 $(brew --cellar python)/3.8.6
使用-f
标志,您可以省略后面的/3.8.6
,因为ln
将使用目标的名称。为了在链接上尽可能清晰,您应该
ln -s ~/.pyenv/versions/3.8.6 /usr/local/Cellar/python@3.8/3.8.6
结果应该是这样的:
➜ ~ ll $(brew --cellar python)
total 0
lrwxr-xr-x 1 [my username] admin 36B Oct 14 16:52 3.8.6 ->
/Users/[my username]/.pyenv/versions/3.8.6
最后,让家酿管理其余必要的链接:
brew link python3
这篇文章的灵感来自于我自己对如何让它工作的探索,而这个关于栈溢出的问题的答案是没有答案的(我回答了,我想!)。
Python 中的自制 DBSCAN
如何实现最具弹性的聚类算法之一的快速指南
马丁·桑切斯在 Unsplash 上的照片
用于有噪声应用的基于密度的空间聚类 DBSCAN 是一种很难理解的聚类算法。它创建于 1996 年,经受住了时间的考验,至今仍是对数据点进行聚类的最有用的方法之一。为了好玩,也为了拓宽我的视野,我尝试用 python 编写了自己的 DBSCAN 类。如果你是那种想直接跳到书的结尾的人,你可以在这里看到我的整个项目。
它是如何工作的?
DBSCAN 中的聚类是通过根据点与其相邻点的关系将数据点分为三种类型来确定的。三种类型的点是核心点、边界点和噪声点。通过识别核心点、确定其相邻点是核心点还是边界点来形成聚类。当相邻点本身是核心点时,聚类仅扩展到单个点的邻域之外。
作者 Chire-Own 作品,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=17045963
考虑上面的二维点。点 A 是核心点的一个例子。在这种情况下,当总共 4 个点在邻域内时,形成核心点。B 点和 C 点是边界点的例子。边界点可能在核心点的邻域内,但是在它们自己的邻域内总共少于 4 个点。点 N 是噪声点的一个例子。它不属于某个聚类,或者在其邻域中没有足够多的点。
更深刻的理解
为了充分理解一个问题,我尝试定义一个关键概念的列表,写一些流程的松散伪代码,花一点时间识别时间和空间复杂度。
定义
最小样本-用户定义的最小点数
ε-用户定义的两点之间的距离
邻域——在ε距离内围绕中心点的空间。
核心点-在其邻域内具有最小点样本的点。
边界点-至少属于一个核心点的邻域,但在其自己的邻域内没有点的最小样本的点。
噪声点-既不属于核心点的邻域,也不具有其自身邻域内的点的最小样本的点。
伪代码
估价
时间复杂度
每个点都与我们数据集中的其他点进行比较,所以我预计时间复杂度为 O(n)。因为我只为每个点添加了两个新的特征,即聚类和点类型,所以我们的空间复杂度是 O(2n)四舍五入到 O(n)。
主要观察结果
聚类由核心点的邻域组成。所以我知道我需要一些最近邻搜索功能的修改。下面是我修改过的最近邻搜索的一个片段,我是从自己的类实现中选择的。
距离对于计算一个点的邻域是至关重要的。大多数数据集都有两个以上的要素,您可能希望在聚类时考虑这些要素。因为我想处理 n 维数据点,所以我创建了一个距离辅助方法,以允许我灵活地处理多个距离公式。使用 L2 范数开启了我的邻域法,从严格的二维到完全的多维。
用单元测试定义行为
当开始任何新代码时,我喜欢设置一组单元测试来帮助定义我的用户契约。当我发现我做的任何不好的假设时,这些可以被修改,但是一般来说,我定义一个测试,然后离开它。这有助于保持我的一致性,并确保我履行我对用户的承诺。
虽然我不能预测用户使用我的类的每一种方式,但我至少可以确定一些我不想让用户做的事情。前三个测试都是关于塑造用法的。第一个确保用户不会用不可能的值或中断的值实例化我的 DBSCAN 类。第二个测试是确保同质数字数据是唯一传入的数据。第三是确保用户在数据传入之前不会试图调用方法。最后,第四个测试是非常基本的功能测试,确保我所做的任何更改都不会破坏基本功能。
当我实现时,我倾向于同时增加我的单元测试。你可以在这里看到我选择的所有单元测试。
履行
有了定义良好的单元测试和伪代码,这无疑是最快和最容易的部分。如果有一个逻辑问题,就像我的第一次尝试一样,通过失败的测试和伪代码中的大缺口,它变得很明显。在我最初的尝试中,我一直在重写集群,但是由于我最初的基础工作和在投入太多时间之前改变方向,我能够很快地弄清楚。你可以在这里看到对我最初尝试的更深入的报道,以及它的不足之处。
估价
至此,所有测试都通过了,我自制的 DBSCAN 工作正常。对于实现 MVP 来说,这已经足够好了。但这对我来说永远不够,所以我决定将它与一个流行的、普遍可用的库进行比较。
哎唷,这比通常可用的库慢 800 多倍。很难看出这种程度的差异,更不用说公开承认了。但是经过一些研究,我的实现与其他数组索引类型的实现不相上下。我还可以探索其他一些技术来提高 DBSCAN 的性能:空间索引和批量邻域计算。听起来像是后续文章的好主题。
我的全部实现可以在我的 Github 上找到。想聊聊吗?在Linkedin上联系我。
同态加密简介:第 1 部分:概述和用例
来源:博通
同态加密简介:
第 1 部分:概述和用例
简介
机器学习算法的进步导致了各行各业的广泛采用。然而,由于保护用户数据的监管限制,处理敏感和私人数据的领域,如医疗保健或金融,已经落后了。
随着机器学习作为服务的出现,实体正在作为服务提供模型推理。在这种情况下,我们可以区分三方,一方是模型所有者(如培训模型的医院),一方是主机(如提供计算能力的云提供商),另一方是希望从服务中受益的客户端。在某些情况下,模型所有者也可以是宿主。必须在这些方之间建立信任,因为客户不希望她的数据被泄露,而模型所有者希望保护她的模型。
在本文中,我们将快速了解机器学习及其带来的进步。然后我们将看到机器学习的数据依赖性如何使其不适合一些敏感的用例,以及新的解决方案如何使模型在加密数据上的训练和推断成为可能。最后,我们将关注同态加密,看看它能涵盖哪些用例。
本文是非技术性的,面向广大读者。接下来的文章将深入探讨同态加密的技术细节,包括同态加密方案的理论和 Python 实现。
一、围绕数据利用的隐私问题
机器学习,特别是深度学习,它是机器学习的子领域,集中在深度神经网络(DNNs)上,已经证明在几个不同的任务上推进了技术发展水平。不同的领域,如使用 ResNet 的图像识别,使用 BERT 的文本处理,甚至使用 WaveNet 的语音生成,都在使用深度学习方面取得了巨大的进步,而其他模型则远远落后。
深度学习的基本原理是在海量数据上训练模型,并通过优化模型的损失。通过这样做,深度学习已经成功地获得了类似人类的性能,因为它能够找到人眼看不见的复杂模式。
因此,机器学习似乎为未来新的技术飞跃铺平了道路,但它严重依赖于数据的使用,无论是用于训练还是用于推理。
这些深度学习模型中使用的大部分数据通常来自公共的非个人数据,如 Wikitext 或 Imagenet。尽管如此,其他场景可能需要更合理的训练数据。例如,语音到文本模型可能需要人们记录他们的声音,诊断工具将需要发送私人健康数据,或者信用分析工具可能需要查看财务信息。
虽然我们看到了机器学习的强大,但我们在这里看到,一些敏感的用例无法通过这种方法直接回答,因为数据太敏感,无法共享,无论是用于训练还是用于推理。因此,在数据隐私和数据效率之间似乎存在一种权衡,在这种意义上,人们可以通过实施严格的过程来维护私有数据的更好的保密性,在这些过程中,数据只能由可信任的人类专家查看,代价是使该过程漫长且昂贵,或者使用经过训练的模型,这些模型可以具有优异的性能和可扩展性,但代价是需要在训练和推断期间查看数据。
然而,在过去的几年中,出现了几种技术,可以兼顾隐私和效率。其中,三个似乎最有希望:
- 同态加密 (HE)是一种公钥密码方案。用户创建一对秘密和公共密钥,使用公共密钥加密她的数据,然后将其发送给第三方,第三方将对加密的数据进行计算。由于加密和解密的同态属性,用户可以得到加密的结果并用她自己的密钥对其进行解码,以查看对她的数据的计算的输出,而无需向第三方清楚地展示一次。
- 安全多方计算 (SMPC)是一个不同的范例,它更依赖于参与者之间的通信。数据可以拆分,模型也是如此,每个参与者只发送她数据的一小部分,这样其他人就不能重建初始数据,但可以参与进来,并对数据部分进行一些计算。然后,一旦每一方都完成了,所有的东西都可以被聚合,输出的结果对每一方都是已知的。
- 可信执行环境 (TEE)由于硬件隐私保证,软件开发得以实现。英特尔的 SGX 技术提供了这种系统的实现。enclave 技术允许程序独立于其他程序执行。所有入站和出站数据都是加密的,明文计算只发生在 enclave 内。然后可以从外部检查 enclave 代码和完整性。
SMPC 提供了一些有趣的功能,比如可以让不同的参与者在隐藏各自数据的同时进行合作。SMPC 的主要优势之一是它计算复杂运算的能力,例如比较或 argmax,而这些在 he 中是不可能的。此外,与 he 相比,使用 SMPC 评估深度模型更容易,因为大多数 HE 方案都是分级的。
然而,SMPC 要求各方遵守协议。此外,它需要一个可信的第三方不与任何一方合作。如果是这样,一方或多方的数据可能会受到损害。最后,因为 SMPC 依赖于各方之间的通信和计算,这需要更多的计算和更多的带宽,这不一定适合通常的客户机/服务器范例,在这种范例中,服务器在很少通信的情况下执行大多数操作。
TEE 提供硬件保障,保证敏感数据在受控环境下处理。在这个被称为 enclave 的安全空间中,数据被解密,并被明文用于计算。在飞地之外,数据仍然是加密的。这使得效率大大提高,因为我们不需要在计算之前加密数据,但是我们可以直接计算明文,并在输出离开 enclave 之前加密输出。
然而,为 tee 编写安全代码是一项艰巨的任务,已经在英特尔 SGX 上发现了几次攻击。“对英特尔 SGX 已发布攻击的调查”涵盖了对英特尔 SGX 的几种类型的攻击,例如旁路攻击,即操作系统内核利用其对平台近乎完全的控制,对依赖内核服务的飞地发起攻击。还存在其他攻击,如缓存攻击、分支攻击或推测性动作攻击,但我们让感兴趣的读者在上面的文章中了解更多。
一旦加密完成,他就可以将几乎所有的计算外包给服务器。使用同态属性,可以在不泄露任何隐私的情况下对加密数据进行计算,并且用户可以安全地解密输出。此外,他不需要像 SMPC 那样多的交流,也不需要比发球台更特殊的硬件。
虽然他相对简单,并且与其他方法相比几乎没有依赖性,但是他不能有效地执行任意多次乘法,并且他只能执行加法和乘法,这使得一些计算更难以执行。
虽然每种方法都有自己的优缺点,但这些技术共有的一个可取的特性是,它们都允许加密模型和数据。这可能为“私人机器学习”的新实践开辟道路,用户将能够共享私人数据,如医疗或财务记录,以便从机器学习服务中受益,而不必实际展示他们的数据。
在本文的其余部分,我们将集中讨论同态加密,因为它是三种方法中最容易部署的。事实上,SMPC 和发球台需要额外的基础设施部署,因为发球台需要使用特殊的硬件,而 SMPC 依赖于可信的第三方(可以是发球台),而他非常简单,可以在没有任何特殊依赖的情况下实现。
二。同态加密的隐私友好用例
我们现在将看到如何在实践中应用这些概念,以及这些隐私友好的方法可能实现的不同用例。
在这一节中,我们将探索他打开的不同用例。正如我们将在另一篇文章中看到的,he 方案使用户能够将明文消息加密成密文,以便用于计算。可以在密文和密文之间,或者在密文和明文之间进行运算。最后,只有加密数据的用户才能解密输出。
因此,该方案可以允许模型和数据被加密,并且结果必须总是返回到秘密密钥的所有者以获得最终结果。使用这些假设,我们将了解如何涵盖不同的场景。
A .模型保密性:来自公开数据的财务指标
学习受益于一个非常活跃的研究和开源社区。这使得许多最先进的模型可以为非研究人员所用。例如, Fastai 一个众所周知的深度学习框架已经实现了民主化的强大模型,如用于图像识别的 ResNet,或用于文本分类的 ULMFiT。
因此,这种模型的价值不在于通常为大多数人所知的架构,而在于训练后获得的权重,因此也在于训练数据。
在这里,我们将探索一个场景,其中用户已经设法收集、清理和预处理了用于给定模型的训练的数据集。虽然训练中使用的数据可以安全存储,但如果用户想在云平台上部署模型,她必须信任云提供商不会窃取权重,也不会有意或无意地泄露模型。
因此,可以想象,通过加密权重,云主机将无法获得关于模型的任何洞察,并且用户在云上部署她的模型变得安全。
CKKS 概况(来源:Daniel Huynh)
上图说明了这一点。场景如下:
- 客户端将她未加密的数据发送到云提供商托管的模型。
- 云主机使用加密的模型和未加密的数据执行计算,然后将结果发送给模型提供者。
- 模型提供者解密结果,然后将其发送给客户端。
因为模型提供者仍然需要解密结果,这在混合云的情况下会更有趣,在混合云的情况下,基础设施的非关键部分托管在公共云上,而更关键的部分隔离在私有云中。在这里,人们可以想象公共云部分负责大部分计算并管理负载平衡,而私有云部分仅解密结果并将其发送给客户端(最终通过公共云)。
这种情况的一个例子是,例如,一家公司分析公共市场的指标,并向其客户汇总数据。然后,将大部分计算托管在公共云上是有意义的,但在将计算发送到云之前,通过加密来保护所有算法。结果可以由该公司解密,然后发送给他们的客户。
B .私有推断:私有集合交集
在私有推断设置中,我们现在将假设相反的情况,用户持有的数据是私有的,但是模型提供者持有的模型不需要加密。例如,在模型所有者和云提供商是同一个实体的情况下,或者在这种情况下,他们相互信任。
在这种情况下,我们的目标是提供一个可伸缩的、隐私友好的解决方案,这样用户就可以用私有数据查询服务器,而不会暴露给服务器。
例如,Private Set Intersection (PSI)是这样一种场景,其中一个用户持有私人信息,但希望检查她的数据是否与更大的相同性质的数据库相交。然后,服务器将操作这个数据库,并且服务器的数据不一定需要加密。他提供了这样做的可能性,同时保护用户的数据隐私。"同态加密的快速私有集合交集"探讨了这种情况,并展示了可以使用 PSI 进行联系发现。在这种情况下,像 Whatsapp 这样的服务提供商拥有关于谁在使用他们的服务的大型数据库,而一个低收入的新客户想知道他们的联系人中谁在使用 Whatsapp。然后这个客户端只需要要求服务器将她与所有用户的联系人列表私下相交,并解密结果,就可以知道她联系人中有谁在使用 Whatsapp。
作为另一个例子,在最近围绕 Covid19 的危机的情况下,人们可以检查用户和已知的感染患者群体之间是否有过接触。这可以在客户端服务器场景中完成,其中用户共享她的位置数据,并且服务器可以对其执行计算以向客户端输出客户端可能遇到的最终患者。
C .三方保密计算:云上托管的医院模型
我们将讨论的最后一个场景是数据和模型都被加密的情况。这可能是一个三方设置的情况,其中一个用户希望对其数据进行分析,一个模型所有者希望提供其模型,一个云提供商提供托管该服务的基础架构。
在标准的 he 方案中,只有由同一公钥生成的密文才能一起用于加法和乘法。这将使得不可能计算由两个不同的客户端生成的任何东西,因此使他相当受限。然而“应用于不经意神经网络推理的具有打包密文的高效多密钥同态加密”提供了一种对来自不同所有者的几个输入进行计算的方法。
多方 HE 概述(来源:利用打包密文的高效多密钥同态加密,应用于不经意神经网络推理
上图概述了这一过程。主要思想是,客户机和模型所有者都可以在将数据发送到服务器之前加密它们的数据。这个将能够使用这两个输入进行计算,然后向每一方发送部分结果。然后,模型所有者将使用她的私钥移除他引入的噪声的一部分,并将其发送给客户端,客户端将移除剩余的噪声并获得输出。
这个场景对于医疗场景特别有意思。客户可能是提供其数据的患者,而模型所有者可能是训练了模型的医院。为了更好地为患者服务,该模型可以安全地部署在公共云上,同时保留医院训练的权重。根据推断,数据将由患者加密,并在上述两步过程中解密。
结论
在这篇文章中,我们已经看到了为什么我们需要更加隐私友好的解决方案,以及何、和 TEE 目前采用的方法。然后,我们看到他可以解决哪些不同的使用案例。
在 GDPR 和 Covid19 的背景下,他似乎是一个非常有前途的领域,我们需要快速发展,但要谨慎对待人们的数据。
我们将在下一篇文章中讨论更多的技术部分,在那里我们将看到如何从头开始构建我们自己的 he 方案。
所以,我希望你喜欢读这篇文章,如果能得到你的反馈,那就太好了,我会在未来试着发布更多的文章。
如果您有任何问题,请随时在 Linkedin 上联系我,您也可以在 Twitter 上找到我!
同态加密简介:第二部分:景观与 CKKS
描述同态加密的前景,他是什么,并首先看看 CKKS 的一个他方案的复数。
来源:维基媒体
同态加密简介:
第二部分:何山水与 CKKS
一、引言
在之前的文章https://medium . com/@ dhuynh 95/homo morphic-Encryption-intro-part-1-overview-and-use-cases-a 601 ADC ff 06 c 中,我们看到了为什么我们需要隐私保护机器学习,Homomorphic Encryption 如何实现它,以及它可以解决什么用例。
在本文中,我们将介绍同态加密的基础知识,并首先看看一个 he 方案的机制,来自论文“用于近似数字算术的同态加密”的 CKKS ,与其他只对整数起作用的方案如 BGV 或 BFV 相比,它允许对实数进行近似算术。
因为在何的领域上很少有全面的指南存在,我们将花时间探索的基本力学,除了代数的基本知识之外,没有对读者背景的太多假设。
环论(数学 113) 为初学者提供环论的简单介绍。
二。同态加密
A .核心原则
他是一种加密方案,允许数据所有者加密他们的数据,并让第三方在不知道底层数据是什么的情况下对其进行计算。然后,对加密数据的计算结果可以发送回数据所有者,他将是唯一能够解密加密结果的人。
更正式地说,两个环 R 和R’之间的环同态 h 满足这两个性质:
- h(x + y) = h(x) + h(y)
- h(x * y) = h(x) * h(y)
这意味着,如果我们有一个加密同态 e ,一个解密同态 d ,使得 d(e(x)) = x ,以及一个函数 f ,它是加法和乘法的组合,那么我们可以有下面的场景:
- 用户使用 e 加密她的数据 x ,并将 e(x) 发送给不可信的第三方。
- 第三方对加密的 e(x) 执行计算 f 。因为 e 是同态,所以我们有 f(e(x)) = e(f(x)) 。然后,第三方将数据发送回用户。
- 最后,用户解密输出,得到 d(e(f(x))) = f(x) ,而不会将她的数据直接暴露给不可信的第三方。
B .简史
这些方案首先从 RSA 开始,RSA 提供了一个同态方案,但是只有同态乘法。这是第一个部分同态加密(PHE),这是一个只有一个操作的方案。其他类型的 he 方案可能是某种程度上的同态加密(SWHE ),具有有限数量的运算,以及最有趣的一种,完全同态加密(f HE ),它允许任意数量的评估。
自从 RSA 以来已经提出了几个 HE 方案,例如 Paillier 在论文“基于复合度剩余类的公钥密码系统”中为 PHE 提出的方案,但是直到 Craig Gentry 的工作才在他的博士论文“完全同态加密方案”中提出了第一个 FHE 方案。
Gentry 的突破是通过向 SWHE 引入自举实现的。其思想是,SWHE 通过添加噪声将明文加密成密文。可以对密文进行操作,但代价是增加噪声,如果操作太多,解密将提供错误的结果。Gentry 的 boostrapping 技术可以去除密文中的噪音,因此可以对密文进行无限制的操作。
虽然 bootstrapping 为 FHE 提供了一个理论框架,但它的效率太低,无法用于实践。从那以后,出现了更实用的方案,如 BGV 和 BFV 的整数算法,CKKS 的实数算法。
在关于 he 的这个系列的剩余部分中,我们将集中于 CKKS,一种分级的同态加密方案,这意味着加法和乘法是可能的,但是有限数量的乘法是可能的。虽然自举在 CKKS 是可用的,但是这种操作仍然是昂贵的,并且使得它在实践中不太可用。
三世。CKKS
这里我们将集中讨论 CKKS 方案。本节将介绍 CKKS 的基础,我们将在后面的文章中看到如何实现它。
CKKS 概况(资料来源:Pauline Troncy)
上图提供了 CKKS 的高层次视图。我们可以看到,消息 m ,它是我们想要对其执行计算的值的向量,首先被编码成明文多项式 p(X) ,然后使用公钥加密。
CKKS 使用多项式,因为与向量上的标准计算相比,多项式在安全性和效率之间提供了一个很好的折衷。
一旦消息被加密成由几个多项式组成的 c ,CKKS 提供了几种可以对其执行的操作,比如加法、乘法和旋转。
虽然加法非常简单,但乘法的特殊性在于它会大大增加密文中的噪声,因此为了管理它,只允许有限次数的乘法。旋转是给定密文的槽上的置换。
如果我们用 f 表示一个由同态运算合成的函数,那么我们得到用秘密密钥解密c’= f(c)将产生p’= f(p)。因此一旦我们解码它,我们将得到 m = f(m)。
这为我们提供了 CKKS 工作方式的高级视图,我们将在下一篇文章中看到如何实现实现这种方案所必需的加密原语,它们是:
- 设置方案的参数
- 创建密钥和公钥
- 将向量编码成明文多项式,并将明文多项式解码成向量
- 使用公钥将明文多项式加密成密文多项式对,并使用私钥对其进行解密。
- 对密文进行加法、乘法和旋转
结论
我们看到了他一般是如何工作的,他的方案有哪些不同的类型,并且预演了实数近似算术的 CKKS 方案。
这让我们对他有了一个更高层次的了解,并为下一篇文章铺平了道路,在下一篇文章中,我们将深入研究代码并从头开始实现 CKKS。
我希望您喜欢这篇文章,并为下一篇文章做好准备,在下一篇文章中,我们将看到如何在同态设置中将向量编码成多项式!
如果您有任何问题,请不要犹豫,通过 Linkedin 联系我,您也可以通过 Twitter 找到我!
同态加密介绍:第 3 部分:CKKS 的编码和解码
来源: Pixabay
编辑:这篇文章现在可以在 OpenMined 的博客上看到。由于编写代码和数学的问题,我决定在 OpenMined 上发布该系列的其余部分,以获得更舒适的读者体验。链接如下:
同态加密简介:
第 3 部分:CKKS 的编码和解码
简介
在上一篇文章中,我们看到了什么是同态加密,它是如何工作的,并对 CKKS 有一个简短的了解。
CKKS 概况(资料来源:Pauline Troncy)
上一篇文章中的这张图展示了 CKKS 的工作流程。如前所述,要对加密的向量执行计算,我们必须先将其编码成多项式,然后再将其加密成一对多项式。
你可能会问,为什么我们需要它使用多项式而不是向量?这是因为多项式有一个“好”的结构,允许非常有效地进行一些计算,同时仍然保持很高的安全性。
因此,CKKS 首先将一个向量编码成一个明文多项式。人们可以把它看作是把一条信息放进一个玻璃瓶,因为信息被装在一个容器里,使它“更容易”处理,而信息仍然清晰可见,任何人都可以恢复它。
注意:由于介质的限制,很难编写 LaTeX 和代码,所以在我的 Github 存储库中有一个笔记本,包含了与本文相同的内容,其中包含了所有带代码的文章:https://github.com/dhuynh95/homomorphic_encryption_intro
感兴趣的笔记本是https://github . com/dhuynh 95/homo morphic _ encryption _ intro/blob/master/01 _ encoding _ decoding _ ckks . ipynb,你可以在https://Colab . research . Google . com/github/dhuynh 95/homo morphic _ encryption _ intro/blob/master/01 _ encoding _ decoding _ ckks . ipynb使用 Google Colab 执行它
以下 LaTeX 文档截图来自我的硕士论文《同态随机森林》。
一、预赛
二。普通编码
我们现在将看看如何在实践中实现这一点:
三世。CKKS 编码
我们现在将在实践中看到如何通过修改普通编码器和解码器来编码 CKKS 编码器和解码器:
结论
在本文中,我们看到了编码和解码是如何在 CKKS 中执行的,以及这些过程是如何同态的,因此允许将向量的多项式表示相加和相乘,稍后会发现底层值也被修改了。
这是我们同态旅程的第一步,稍后我们将看到如何使用同态加密和解密多项式。
所以,我希望你喜欢读这篇文章,如果能得到你的反馈,那就太好了,我会在未来试着发布更多的文章。
如果您有任何问题,请不要犹豫,通过 Linkedin 联系我,您也可以通过 Twitter 找到我!
同态加密和机器学习:新的商业模式
同态加密介绍、用例以及对机器学习项目的影响
乔恩·摩尔在 Unsplash 上的照片
人工智能项目的一个主要“问题”是数据隐私。事实上,您可能会为您的公司确定最佳用例,然后意识到您的业务项目依赖于您不被允许使用的数据,因为您无法遵守现有的数据隐私法规(有充分的理由)。这种情况阻碍了我们在现实生活的商业应用中利用人工智能的能力。
事实上,大多数机器学习系统都是由非常敏感和私人的数据(客户数据、健康记录、闭路电视录像等)提供的。).在这个行业的几个项目之后,我可以向你保证,对隐私法律问题的担忧是开发新的人工智能解决方案和商业模式的严重障碍。
此外,大多数公司都没有意识到,他们可以利用自己掌握的数据创造新的收入来源,同时保护这些数据的隐私。一种叫做同态加密的解决方案可能有助于改善这种情况。
在本文中,我将解释什么是同态加密(HE),这种技术目前的局限性,以及它如何在保护数据隐私的同时帮助创建新的商业模式。
今天的问题
让我们从一些常见的 ML 问题开始。机器学习模型很难在各种用户之间共享。此外,共享模块是不可行的,因为它在每一端都需要高计算量。
大多数公司依赖云计算,并通过云 API 利用 ML 模型。这种情况有助于解决计算能力的问题,但会将数据暴露给云提供商。
在一些欧洲国家,拥有美国云提供商会阻止你与公共组织和国有公司做生意( 1 )。
此外,目前的数据隐私法规,如欧洲的 GDPR ( 2 )限制了人工智能解决方案的使用。例如,如果您在金融服务行业工作,您的组织需要处理大量个人身份信息(PII)和金融数据,这些信息在存储和传输时都需要加密。
个人身份信息(PII) :任何与可识别的人相关的信息( 3 )。
最后,由于相互之间缺乏信任,竞争对手几乎不可能交换数据。这种情况限制了我们在需要更多数据(健康研究)时的创新能力。拥有一种新的加密方法将使许多公司受益,创造新的生态系统和商业模式。
什么是同态加密?
他允许直接对加密数据进行计算。通过使用先进的密码学,使得“在匿名数据集上运行机器学习而不丢失上下文” ( 5 )成为可能。
计算:数学计算的动作。
无论您处理的是静态数据还是传输中的数据,当前大多数公钥加密都要求在操作数据之前必须对其进行解密。
事实上,现有的加密算法使得不先解密就无法处理数据——而解密你的数据并不能让你遵守数据隐私法。如果数据通过任何其他方式加密,在处理之前必须首先解密,这使得数据容易受到未经授权的访问。
他让你在使用数据之前不再需要解密。换句话说,在您处理数据时,数据完整性和隐私得到了保护。事实上,同态加密允许在加密数据仍处于加密状态时对其进行处理。
他/云流程
遵守数据隐私法(GDPR 等。)经常让人工智能团队花时间试图绕过法规或缩小项目范围。他会帮助我们将所有数据加密存储在云端,并对加密数据进行计算。
尽管有这种潜力,这项技术还没有准备好大规模采用。在不久的将来,我希望看到更多有限形式的高等教育,如“可搜索加密”和“多方计算”成为主流。这些解决方案或多或少能达到同态加密所能达到的效果。但是,他们没有何的主要缺点:运算速度慢(6****)。
目前,同态加密非常慢。这部分是因为同态加密比明文运算具有更大的计算开销。
虽然这项技术已经存在了 40 多年,但计算障碍使它只能停留在学术/研究领域。
新的商业模式
从商业角度来看,将机器学习算法的执行委托给计算服务,同时保持训练和测试数据的机密性将成为可能。这可能是行业的重大变革,并改变云行业。
他还将促成几家竞争公司之间的合作。要理解为什么,首先要分析云计算的兴起。云服务提供商的成功(例如:Azure、Google Cloud 等。)可以解释为在数据中心进行了大量投资,以提供帮助小公司降低成本的服务。
很快,我们可以想象一个用户使用 API 将其加密的数据发送到云端,并从机器学习模型中获得加密的结果。在整个过程中,数据既不会被解密,也不会存储在云中。因此,云提供商无法访问用户的数据。
然而,采用这些服务的一个障碍与云提供商处理的数据的隐私和保密性以及该数据的商业价值/保护敏感数据处理的法规有关。通过利用 HE,云公司可能能够说服新公司使用他们的服务。
他将实现以前不可能实现的新商业模式。
他将帮助创建一个全新的数据行业,将拥有数据的公司与需要数据的公司或个人结合在一起。这种情况使得现有的敏感或受监管数据资产能够以以前被认为不可能的方式被使用。
我希望看到更多的数据市场,使公司能够利用他出售他们的数据。
由于最近的危机,创造新的收入来源的需要变得更加具有战略意义。因此,越来越多的公司开始分析如何利用现有的数据资产。
他可以帮助公司安全地利用数据赚钱,同时保护客户和数据本身的隐私。我希望看到更多专门创建数据市场的创业公司,使公司能够使用 he 出售他们的数据。
通常,公司可能最终拥有与其业务完全无关的大量有价值的数据集(与制造过程相关的数据,等等)。).因此,他们应该寻找一种方法来将这些资产货币化,并将其提供给数据科学家,这些科学家寻求额外的训练数据,以使他们的人工智能系统更加准确,同时保持底层数据的隐私和安全。
在市场营销中,公司经常需要在顾客旅程的每一步(线上和线下)收集数据,以构建购物体验的完整画面。然而,由于数据隐私法规,一些有趣的潜在数据源仍然遥不可及。同态加密可能有助于公司在遵守隐私法规的同时利用新的数据源。
大多数人工智能营销项目缺乏完全准确的上下文数据。
人工智能厂商可能熟悉数据可用性的问题。在一些用例中,人工智能供应商需要更多的数据来成功进行概念验证(缺乏准确性等)。).然而,由于法律原因,这并不总是可能的。利用 HE,人工智能供应商可以访问额外的数据,并在真实数据(银行、医疗机构等)上展示他们的算法。).
他将通过共享数据来帮助竞争对手公司进行合作。
谈到合作,我们可以想象,由于同态加密,同一行业的公司将开始共享数据,并创建新的流。保证数据隐私和经济回报的可能性可能有助于激励通常不愿分享公司数据的参与者(见:联合学习)。
联邦学习:一种机器学习技术,它在多个分散的边缘设备或保存本地数据样本的服务器上训练算法,而不交换它们( 7 )。
在具体的使用案例中,从 AI 的角度来看,与类似公司共享数据是最好的解决方案。事实上,你可能会遇到竞争对手的金融机构,它们可能会认为,围绕某些共同风险(如洗钱)开展合作符合它们的利益。通过利用 HE,公司可以将他们的数据集中起来“共同构建反洗钱模型,同时保持他们的敏感客户数据的私密性”( 8 )。在医疗保健行业也可以找到类似的使用案例。
可以肯定的是,在未来几年里,他将会带来更多的突破。正如世界经济论坛( 9 所提到的,数据共享已经帮助了很多行业。例如:
- 用于医学研究的大型集合患者数据
- 实时位置数据让城市交通更加智能
与许多突破性技术一样,市场对 he 的采用将取决于利用 HE 的用例数量。我预计会有越来越多的初创公司变得专门从事同态加密的实施,而咨询公司可能会帮助公司接受与竞争对手分享更多数据的想法。
有关同态加密的更多信息,我推荐以下链接:
- 同态加密相关项目
- 超越信任:为什么我们需要数据共享模式的转变
- 用于机器学习的全同态加密
- 什么是同态加密?
- 使用全同态加密保护云计算
- 同态加密能实用吗?
- 了解数据加密的新趋势,它承诺为人工智能提供更好的隐私和安全性
homscedasti-whatsidity?
当数据科学借用玛丽·波平斯的话
大家好,今天我们要谈论的是同音异义性,也就是数据科学中最难发音的词。这将是一个简短的概述,因为与所有数据科学一样,进入杂草中的机会非常大。
那么什么是同方差呢?字幕上说它是从《欢乐满人间》中借用的,但实际上,这个词源于希腊语。我们有前缀 Homo- 来自希腊语,表示“相同”,我们加上- skedacity ,或 skedastikos ,根据韦氏词典的说法,希腊语表示“能够分散”。所以同方差意味着相同或相似的离差。好了,完成了,现在我们不用再谈了。
哈!开个玩笑,我们将向您展示一些图形,以便您可以真正了解正在发生的事情。如果你想把它分解成简单的英语,我们可以观察数据的分布,并确定误差项,或任何导致我们的数据不整齐一致的东西,在所有的数据点上都是相同的。这导致了一些非常可预测的结果,以统计为生的人喜欢看到同质性,但并不总是如此。同方差确实提供了一个坚实的可解释的地方来开始他们的分析和预测工作,但有时你希望你的数据是杂乱的,如果没有别的原因,只是说“这不是我们应该寻找的地方。”
线性回归中的同方差
让我们来看看同性恋是什么样子的,好吗?要真正知道发生了什么,你还必须知道异方差或它的对立面。如果某样东西不是异方差的,它要么是异方差的,要么两者都有。我们可以使用数学方法,通过检查方差或运行 F 检验来确定某样东西是同方差还是异方差,但最简单的检查方法是运行散点图并查看数据。可视化太棒了!
茄子,墨西哥胡椒,花
现在,在上面的图表中,我们可以看到我的二手车线性回归价格预测项目的一些基本散点图相关性。如果我们知道同异方差意味着相同的分布或离差,那么上面的三张图表示同异方差还是异方差?如果你说异方差,你就赢了!我们看到的是一个典型的异方差的例子!
异方差分布的一个特征是趋向于锥形,正如我们在最右边的图中可以清楚地看到的。它们也可以看起来像我们在左图和中间图中看到的茄子和墨西哥胡椒。基本上,任何时候我们不能自信地通过我们的数据画一条线,并且知道我们得到了大多数值的范围内,那么我们可以开始怀疑异方差!
那么,同性恋是什么样子的呢?这是一个同方差散点图的样子:
这并不完美,但是初步观察,你可以说这倾向于同质化。它肯定比前面的图更具同质性。您可能会注意到,在这个图中有大量的异常值。在线性回归中,异常值对确定数据集的同方差有很大影响。根据它们的影响程度,如果它们对结果没有实际影响,您可以选择忽略它们,或者如果有显著影响,您可以选择进一步转换数据。如果它们倾斜得太厉害,你可以尝试添加更多的特性,或者完全抛弃这个模型。
不管离群值的存在,我们可以看到我们的模型成功地在所有数据点的合理距离内。这满足了我们对“同分布”的定义也就是说,它们沿着我们的模型的线类似地分布。要记住的一件重要的事情是,不管你读了多少教科书,或者像这样的博客,当涉及到真实世界的数据时,从来没有真正的同质性。真实的世界嘈杂、混乱、充满谎言,这将会影响你的数据。因此,所有的模型都会有些混乱,所以我们希望尽可能接近同方差,除非进一步分析残差和进行额外的测试,否则我们可以确信我们观察到的是同方差。
结论
我希望你喜欢这个关于数据科学中最有趣的词的简要概述。对我来说,这可能是我有生以来最难发音的单词。
同异方差,或接近同异方差,是想要得到一个工作模型的数据科学家的黄金标准,事实上,对它的测试,或对异方差的测试是开发这些模型的一个关键组成部分。让它们运行并确认它们意味着运行一个好模型和一个坏模型的区别。
所以下次你看到那个圆锥体的时候,记住,它不是同性恋!
蜜罐&非洲:用 Kibana & SpectX 分析网络威胁
网络安全与非洲
非洲各地的网络威胁— Kibana(弹性地图服务)
围绕网络安全的讨论通常集中在世界上四大恶意攻击者身上。美国、俄国、中国&朝鲜,讨论范围从大规模数据泄露到国家支持的对基础设施的恶意攻击(例如stat xnet或 BlackEnergy 2 )。2019 年,我构建并部署了一个蜜罐系统,用来吸引攻击者并监控和记录活跃的网络事件。蜜罐系统被设计成模仿真实的系统,攻击者在侵入系统之前不会知道其中的区别。它可用于检测攻击或使攻击偏离合法目标。它还可以用来获取有关网络罪犯如何运作的信息。但是我对这些数据的关注是在非洲。我想了解网络安全的前景,因为最近网络安全和技术已经成为整个非洲大陆宣言和政策的焦点。但是作为一个大陆,非洲是互联网普及率最低的地区之一。这对网络安全格局有何影响?
非洲有网络安全问题吗?
我会说是,原因如下。2018 年 1 月,许多媒体报道(首先由法国报纸《非洲世界报报道)称,在埃塞俄比亚亚的斯亚贝巴的非洲联盟总部发生了一起令人担忧的违规事件。
非洲联盟是一个大陆联盟,由位于非洲大陆的 55 个成员国组成。
漏洞每天都在发生,对吧?但不是像这样。这一违规行为据称持续了 5 年。2012 年,中国出资在亚的斯亚贝巴建造了一座价值 2 亿美元的新建筑,中国公司获得了内部技术基础设施的合同。2017 年,在非洲联盟(AU) 总部建成 5 年后,分析师发现,从 2012 年到 2017 年 1 月,数据传输活动在每晚午夜到凌晨 2 点之间处于高峰。我们发现所有系统的数据都被转移到了位于上海的服务器上。中国否认了所有的指控,非盟拒绝对此事发表评论。然而,其结果是,非盟切断了与埃塞俄比亚电信的联系,并对所有电子通信实施了加密,建立了全新的基础设施。但现在问题来了,五年来,什么样的网络政策在监控网络活动?同样值得注意的是,被替换的大部分基础设施是华为网络设备… (如果你有兴趣阅读更多关于这个故事的内容, 请查看贾斯汀·谢尔曼*杜克大学 的报告。)*
让我们来看数据!
- T-Pot 蜜罐— 我写了一篇关于如何部署的指南。
- 我还写了一个如何使用它的指南。
- SpectX——当我无法访问 GUI 并且需要解析日志时使用。可以远程查询日志和进行分析,而无需导入数据。
我如何查看来自非洲的数据?
非洲有 54 个国家,过滤掉所有 54 个国家将花费很长时间,因此我们可以在 Kibana 上使用以下过滤器进行解析:
*{
"query": {
"match": {
"geoip.continent_code": {
"query": "AF",
"type": "phrase"
}
}
}
}*
如果您使用 SpectX 查看日志文件:
*| filter (geoip.continent_code = “AF” )*
其他GeoIP . continental _ codes:
*AF - Africa
AN - Antarctica
AS - Asia
EU - Europe
NA - North America
OC - Oceania
SA - South America*
- CC2ASN —为属于世界上任何给定国家的 AS 号码和前缀提供简单的查找服务。
如果你的蜜罐没有访问数据的前端系统,我推荐使用 SpectX 并将其指向你的日志。它自动检测中的列。csv* 文件,您还可以编写一个解析器来给出典型字段的结果:*
*$pattern = <<<PATTERN
$str=(CSVDQS{2,256000}:value| CSVSQS{2,256000}:value| DATA{0,256000}:value);
$header=(BOS LD EOL);
$FS=',';
$header?
$str:f__timestamp $FS, $str:geoip_country_name $FS,
$str:geoip_continent_code $FS, $str:geoip_country_code2 $FS, $str:src_ip $FS,
$str:type $FS, $str:host $FS, $str:link $FS, $str:message
EOL
PATTERN;
LIST('file://Elastic/TitanLogs.csv')
| parse(pattern:$pattern)
| select(_unmatched, *)*
SpectX —查看蜜罐数据的另一种方式 Stephen Chapendama 截图
审查这些数据描绘了一幅有趣的非洲网络安全图景。3 个月内,蜜罐遭受了2186197 次* 攻击。25,787 来自非洲。*
按国家/地区列出的前 5 大攻击直方图
尼日利亚、南非、肯尼亚、津巴布韦和突尼斯 Stephen Chapendama 截图
过去几周,来自尼日利亚的日志有明显的峰值,因此决定通过过滤以下内容进行调查:
*{
"query": {
"match": {
"geoip.country_name.keyword": {
"query": "Nigeria",
"type": "phrase"
}
}
}
}*
有趣的是,在 6000 次攻击中,有 4620 次来自一个 IP 地址,这使得尼日利亚的调查变得更加容易。**嗨,41.203.76.251😒令人惊讶的是,这是一个在加纳注册的网络,所以有人试图掩盖他们的踪迹。自 2019 年 9 月首次被报告以来,这一威胁行为者一直活跃在 AbuseIPDB 上,有 553 份报告,目前已被列入 Talos 安全情报黑名单,大多数攻击集中在暴力和 SSH 攻击上。****
这个 IP 已经被举报 553 次了!—由 AbuseIPDB 提供
帮助您调查的开源资源:
- 这是我在调查 IP 地址时最喜欢的信息来源之一。通常,安全分析师会连接 API 并自动报告恶意流量,因此它总能让我大致了解一个 IP 最近一次活跃在可疑行为中的时间,以及人们看到的攻击类型。它还提供了批量 IP 检查。
- 思科的 Talos Intelligence(Talos Intelligence)—我经常使用这个平台作为第二信息来源来确认我可能已经知道的事情。思科 Talos 的优势在于,它还能给我提供关于垃圾邮件、邮件数量和网络声誉的信息。
漏洞呢?
大多数基于 Windows 的攻击都试图利用CVE-2001–0540,Windows NT 和 Windows 2000 中终端服务器的内存泄漏,这使得远程攻击者能够通过大量畸形的 RDP* 造成拒绝服务(内存耗尽)。在大多数非洲政府大楼里,经常没有修补的旧版本窗户随处可见,更不用说私营部门了。在一些国家的农村地区,大多数电脑没有连接到互联网,这反过来保护他们免受威胁,因为他们通常依赖簿记和纸质记录。由于蜜罐也在监控 RDP 的攻击,数据如下:*
RDP 攻击面 Stephen Chapendama 截图
CVE 的笔记:
如果您对部署以服务器为中心的蜜罐感兴趣:
- Amun —漏洞仿真蜜罐
- 蜜罐 —低交互服务器端工控系统蜜罐
- KFSensor —基于 Windows 的蜜罐入侵检测系统(IDS)
- 蜜罐 —低交互蜜罐和网络安全工具,用于捕获针对 TCP 和 UDP 服务的攻击
互联网普及率低对非洲大陆有什么影响?
非洲也有恶意机器人和攻击者的问题。尽管欧洲大陆和世界上一些国家的互联网普及率最低,但网络攻击者正在寻找一种针对企业的方法。但是根据国际电信联盟收集的数据,事情正在发生变化,国际电信联盟是联合国的一个国际专门机构,负责信息和通信技术方面的问题;2011 年,13.5%的非洲人口接入了互联网,而当时非洲人口占世界人口的 15% ,这意味着当时世界互联网用户的 6.2% 是非洲人。**
来自 Statista 的关于全球互联网渗透率的数据。
到 2019 年,从国际电信联盟发布的数据来看,非洲28.2%的地区以每 100 名居民为单位拥有互联网接入。相比之下,亚洲&太平洋地区 48.4% 的互联网接入率与欧洲的 82.5% 相比。
从蜜罐数据来看,令我惊讶的是,来自塞舌尔的黑客比来自南非的黑客与蜜罐互动得更多。一个常见的误解是,根据南非的面积,你会认为它的互联网普及率更高。非洲的互联网接入往往分布不规则。塞舌尔在 2017 年,37%的人口拥有互联网接入,相比之下,南非只有 11%的人口拥有互联网接入。然而,值得注意的是,与其他大陆相比,这些数字并没有反映出非洲互联网使用的复杂性。例如,网吧亭现在在英国已经很少见了,但是在非洲,这仍然是人们非常流行的上网方式。但撇开这些信息不谈,非洲电信市场的增长速度比世界其他地区都要快。**
结论
在网络安全方面,看到非洲互联网的发展是积极的一步。然而,移动货币的采用和金融科技的繁荣也将带来针对这一领域的网络犯罪的新增长。但随着互联网变得越来越容易访问,它为用户提供了跟上时代和学习基本网络概念的机会。肯尼亚和尼日利亚都有活跃的网络安全社区,爱好者和商业领袖经常在主要城市定期聚会。2017 年的一份关注非洲网络安全的报告提到,非洲的银行和金融服务占了非洲大陆网络犯罪损失的近四分之一,其次是政府、电子商务、移动交易和电信。
普华永道在 2019 年 1 月发布了他们的第 22 届年度全球首席执行官调查,网络威胁被确定为全球增长的第五大威胁,排在过度监管、政策不确定性、技能可用性和贸易冲突之后。随着这一行业的持续增长,它将为非洲的失业者提供就业机会。
总之,随着非洲互联网使用的增长,网络足迹也将增长,这创造了一个机会之窗,造就了下一代网络安全专家,但与此同时,它也将为世界制造新的威胁因素。企业必须适应,社区必须接受教育,最终,非洲将全部连接起来。
延伸阅读:
作者:斯蒂芬·查彭达玛
钩状的
大型科技公司如何开发令人上瘾的应用程序
照片由 Alexa Suter 拍摄(通过 Unsplash
- 为什么脸书吸引了我们的注意力,而其他一些应用却没有?
- YouTube 遵循什么基本原则来确保用户的持续参与?
- 你希望一款应用能为你解决什么问题?
行为发生的条件
B.J. Fogg 有一个公式说,三个要素——动机(M)、能力(A)和触发因素(T)——必须在足够的程度上共存,行为(B)才会发生。
当你有一个高能力、低动机(脸书)或低能力、高动机(魔兽)的应用时,触发器就成功了。当你能力低、动机低时,触发器就会失效(C++编码)。
福格行为模型(通过维基百科
执行一个行为的可能性取决于你的动机、能力和触发因素是否都实现了。
期待比获得奖励更让你快乐
作为社会动物,我们需要建立社会纽带,获得归属感。当我们在现实生活中无法获得情感支持时,我们会求助于虚拟社交网络来寻求情绪缓解。社交媒体上催产素、血清素和多巴胺的突然激增让我们感到快乐。
研究人员观察到,当大脑期待奖励时,多巴胺水平会激增。伏隔核帮助大脑形成对显著环境刺激的记忆。伏隔核不是在你收到奖励的时候被激活,而是在你预期它的时候。
在罗伯特·萨波尔斯基·⁴做的一项实验中,猴子在看到光(信号)后按下一根棒十次(工作),就会得到食物奖励。当猴子看到信号时,多巴胺会立即释放,甚至在它们为之努力之前。
猴子一看到信号,多巴胺就会激增。(经由苏珊·温申克 ⁵)
预期比即时的满足让你更快乐。与先入为主的观念相反,萨波斯基的实验发现不可预测性增加了我们的预期。手指轻轻一扫就能在网飞调出意想不到的视频,这有点类似于玩⁶.的赌场老丨虎丨机
一个动作越简单,你就越有可能去做
十年前,在网上分享自己的观点并不像今天这么容易。首先,你必须购买一个域名和一个网络服务器。然后你需要用 WordPress 或者 Blogger 建立一个博客平台。另一方面,在你真正开始写之前,你必须安装插件,修改管理设置。自托管的博客不保证流量。你可能需要做搜索引擎优化来赚钱你的博客。
Twitter 已经不成比例地降低了进入博客世界的门槛。Twitter 刚推出时,每个状态只允许 140 个字符。现在 Twitter 已经把字数限制放宽到了 280 个字符。在 Twitter 上,任何人都可以键入几个词,分享一张古怪的照片或热门视频,然后点击“发布”。简单。简单。
冲浪速度越快,人们越投入
谷歌减少了在网上搜索平凡事物所需的认知努力和时间。谷歌自动纠正拼写,保存密码和自动完成表格。它甚至会根据你的搜索历史给出预测结果。冲浪速度越快,人们越投入 ⁷.
为了让搜索像“天气”这样的关键词变得更快更容易,谷歌从网页上索引了万亿字节的信息,给谷歌添加了更多可点击的操作系统。网页根据流量、浏览量、受欢迎程度和相关性进行排名。
算法现在更聪明了
当你对语音助手说“食谱派柠檬”时,你会得到相关的搜索结果。放心 Alexa 或者 Siri 不会给你“背圆周率引理”之类的误用。
即使你拼错了水果“不能私奔”,你仍然可以得到“哈密瓜”和“摩登家庭不能私奔电视剧集”。
如今,语音助手已经极大地改进了其搜索算法,以处理自然语言查询。如果你让谷歌助手把这个翻译成俄语:
"心有余而力不足。"
回到英语,你应该并且会得到同样的东西。
但是如果你在 20 世纪 50 年代用计算机算法来翻译它,你会得到像这个⁸:这样滑稽的误导性翻译
“伏特加很好,但是肉烂了。”
情感触发因素
行动号召、付费广告和促销活动通常会促使新用户订阅某个频道、追随某个影响者并最终购买产品。付费触发器是在新闻网站或社交媒体新闻源上弹出的广告。它们引人注目,但仍然不如关系触发器有效(看到朋友使用抖音会促使你加入),甚至不如自有触发器有效(自愿订阅电子邮件时事通讯)。
渴望社会认可
当用户向 Quora 或 Stack Overflow 提交答案时,其他成员会对该响应进行投票。被评为最佳答案的回答将帮助作者赢得分数。当积分累积到一定水平时,会员将获得授予特权的徽章。
《英雄联盟》(LoL)、《使命召唤》(CoD)和《魔兽争霸》上的巨魔横行霸道,但却被匿名所掩盖。英雄联盟不得不遏制巨魔的滥用。实行了荣誉制度。玩家被赋予了将因果积分奖励给和蔼可亲、受人尊敬的玩家的能力。这样做,他们也变得合作。
劳动导致爱情
宜家向顾客出售预组装家具。自己组装书架的顾客对自己作品的估价是修理工安装书架的五倍。我们在制造产品或服务上投入了越多的时间和精力,我们就越珍惜它。我们热爱劳动成果,不管是我们的还是别人的。
参照效应
你的台灯坏了。你急需一盏台灯。在亚马逊网站上搜索后,你有四种台灯可供选择,它们看起来几乎没有区别。你会买哪一个?
灯 A 售价 29.99 美元。库存只剩 10 个了。
灯 B 售价 26.99 美元。库存只剩 12 个了。
灯 C 售价 25.99 美元。库存只剩 5 个了。
Lamp D 售价 19.99 美元。库存只剩 2 个了。
出于稀缺效应,你可能会选择灯 D。你也会受到锚定效应的影响,因为价格比较信息锚定了你的购物决定。在易贝的 Craigslist 或者你当地的电子商店可能会有更便宜的台灯。然而,通过选择 D,你会觉得好像你赢得了一笔交易。
天赋进步效应
由于天赋进步效应,当人们相信他们接近完成时,他们就会有动力更加努力地工作。
EdX 提供了学习新编程语言的分步指导。你可以保存你的进度,离开然后随时回来。哈佛 CS50 和 MIT6.00.1x 提供视频讲座、宣讲会、动画、基于云的 Ubuntu 环境、基于浏览器的编辑器、论坛和对作业的即时反馈。除了期末考试和参赛证书,所有资源都是免费的。免费的开源材料被赋予给你,这样你在开始学习时就不会感到不知所措。
沉没成本谬论
Instagram、Twitter、脸书和 YouTube 在其存储库中存储了大量你的信息、照片、视频和联系。仅仅是跨平台传输大量数据的想法就足以让大多数人感到恐惧。你在现有社交网络上分享的照片和视频越多,你就越有动力坚持下去。
YouTube 是美国青少年中最受欢迎的在线平台(通过皮尤研究中心 ⁹)
Facebook 是新冠肺炎疫情期间美国成年人使用最多的社交媒体平台(通过商业内幕情报 ⁰)
沉没成本谬论是不合理的。你在一项努力上投入了越多的感情,即使它不再有利可图或有意义,你也会继续投入更多的努力和时间。
如果你在社交媒体上创建内容,你可能有更大的机会接触到更多的人,并以喜欢、评论、分享和忠实追随者的形式获得社会认可。如果你幸运的话,你的视频可能会像病毒一样传播开来,获得数百万的浏览量。但是这些都是很大的假设。
如果你继续追求一个失败的计划,而你有可能扭转局面,那么从长远来看,你可能会遭受更大的损失(时间、努力、金钱、幸福)。社交网络应用可能会吸引、吸引你,并把你进一步拖入无穷无尽的深渊,要求你在未来投入更多的时间和注意力。
互惠偏差
沃伦·巴菲特和查理·芒格认为,随着消费者越来越习惯于习惯性地使用一种产品,他们往往会更少关注价格。如果一种产品的价格提高了一点点,消费者几乎不会注意到。
视频游戏、软件或应用程序通常会提供免费试用或有限的访问权限,以刺激购买行为。Audible 和 Spotify 为新用户提供 30 天的免费试用,可以随时取消,无需支付任何费用。当试用期结束时,输入信用卡信息的免费试用用户将自动转换为付费用户。由于互惠偏见,我们觉得有义务通过支付订阅费来回报 Audible 的青睐。
框架效应
如果给你看这两个看似相似的广告,哪一个听起来更有说服力?
“如果你在下周一之前购买这个大师班在线课程,你将节省原价的 20%。”
"如果你在下周一之前购买这个大师班在线课程,你将获得 20%的折扣."
大多数人选择了后者。
框架效应影响你对得失的感知。我们试图通过防止损失来维持现状。比起未来的潜在收益,我们更倾向于优先考虑规避损失。禀赋效应让我们高估了我们已经拥有的东西。
当我们感觉良好时,我们会付出更多
克里斯托弗·卡彭特发现了一种心理技巧,可以影响人们给一个向他索要车费的陌生人多少钱。通过调整一些微妙的词语,听众受到潜意识信息的影响,给出更多:
“但你可以自由接受或拒绝。”
在请求的末尾加上这八个字给了人们一种坚定的自主感。人们很乐意帮忙,给了两倍的钱。更重要的是,它在电子邮件以及 Patreon、Indiegogo 和 GoFundMe 等筹款平台上发挥了神奇的作用。
人类的行为很容易受到影响
用户心理可以用来影响人类行为。然而,最好不要出于邪恶的目的滥用知识来创建应用程序。否则,这将被认为是一种操纵、剥削和欺骗自己利益的行为。
参考
- 尼尔·埃亚尔。2014.上钩
- bj .福格。2009.劝导设计的行为模型
- 维基百科。2017.BJ·福格行为模型
- 罗伯特·萨波斯基。2012.多巴胺头奖!萨波斯基论快乐的科学
- 苏珊·温申克。2015.购买的脑科学
- 加州新港。2019.数字极简主义
- 乌尔斯·赫尔兹勒。2012.谷歌速度福音
- 迈克尔. j .嘉宝德。2018.自然语言处理简单介绍
- 莫妮卡·安德森和江晶晶。2018. YouTube、Instagram 和 Snapchat 是最受青少年欢迎的平台
- 商业内幕情报。2020.新冠肺炎疫情期间美国成年人使用的社交媒体平台
- 彼得·贝弗林。2007.从达尔文到芒格寻求智慧
- 克里斯托弗·卡彭特。2013.对“但你是自由的”合规技巧有效性的荟萃分析
TensorFlow 2.0 中的马到斑马循环 GAN
了解如何实现 cycle GAN 最流行的应用之一
我自己生成的图像
当我开始深度学习时,我遇到了马到斑马循环 GAN。使它从其他甘人中脱颖而出的是这样一个事实:性状的转移不再需要 DNA 了!物理特性不仅仅局限于生物课,创造力也不仅仅局限于艺术课。
我很难理解如何实现,但是 TensorFlow API 让我的工作变得更容易了。
我将向您展示马到斑马循环 GAN 的 TensorFlow 实现。
先决条件:
- TensorFlow:版本 2.x
- Python:版本 3.6.7
- MatPlotLib:版本 3.x
- 还有一杯咖啡:)
这篇博客中的所有实现都是受 TensorFlow 的 CycleGAN 教程[1]的启发。
好吧!所以让我们从 Tensorflow 收集预定义的生成器和鉴别器开始。
鸟瞰图
- 生成对抗网络
- CycleGAN
- 导入库
- 输入管道
- 分为训练集和测试集
- 数据预处理
- 绘图
- 发生器和鉴别器
- 损失函数
- 让我们训练我们的模型
- 来源
生成对抗网络
首先,让我们快速地抛出生成对抗网络(GAN)的基础知识,以帮助不熟悉它的读者。让我们想象一个场景,我们想要生成一个属于特定领域的图像。例如,我们想为年轻人设计一套新服装,我们要求计算机来完成这项任务。要做到这一点,我们需要一个时装设计领域空间的代表。假设有一个函数 F 和一个输入图像 X,我们需要一个非常接近目标区域的 Y,其中 Y=F(X)。GAN 是最终能够找到我们的目标域 Y 的近似表示函数 F 的网络
GAN 是如何做到这一点的?这里有一个技巧,解决方案有两个部分:( I)我们需要一个生成器,它不断从随机初始化中生成图像;( ii)我们需要一个鉴别器来区分生成的图像和真实的图像。因此,发电机就像一个新的时装设计师,他对时尚一无所知,但总是蓬勃发展,以复制一个杰作青年服装,而鉴别者是一个高级时装设计师,他可以说新服装有什么错。只要我们的鉴别器善于判断,我们的发生器就能从反馈中获益。在某一点上,我们的发生器将处于从鉴别器获得正反馈的位置。所以我们将使用深度学习来构建我们的生成器和鉴别器。
为了做出一个好的鉴别器,我们需要将生成的和原始的图像输入到我们的模型中,然后通过比较它的决定和实际情况来训练它。对于发电机,它取决于鉴别器的决定,如果它得到正反馈,则表明发电机正朝着正确的方向前进,反之亦然。有趣的是,他们互相学习,并试图重击对方。
渐渐地,生成器和鉴别器都会擅长它们的任务,这样我们就可以把生成器拿出来独立完成服装设计任务。那么 GAN 是如何把马变成斑马的呢?如果我们稍微思考一下,事实上从随机初始化生成一套新衣服类似于从一匹马生成一匹斑马,唯一的区别是这里我们从一匹马的图像而不是随机初始化开始我们的预测。为此,我们需要一个配对的数据集,但是如果我们没有这样的数据呢?如何从不成对的数据中完成这个任务?
CycleGAN
幸运的是,有一种方法可以从不成对的数据中完成这项任务。CycleGAN 背后的主要思想是,我们可以形成一个循环,其中两个生成器工作来来回转换图像,而不是使用成对的数据来训练鉴别器。准确地说,如果我使用一个生成器将我的图像(比如 x)转换为胡须男(比如 y),使用另一个生成器将我的胡须图像(y)转换为正常图像(比如 x’),如果图像 x 和 x’相同,那么我们可以得出结论,我们的 GAN 可以很好地处理不成对数据。
让我们实现马对斑马的循环吧!
导入库
让我们通过导入所有需要的库来预热烤箱。一些库是:
- 张量流
- 张量流 _ 数据集
- tensor flow _ examples . models . pix 2 pix
输入管道
有两种方法可以为模型构建输入管道:
- 从您的计算机上传数据。(这就像冬天下雨一样!)
- 从 TensorFlow 数据集(tfd)加载数据,这是一个相当简单的方法!但约束是,它可能无法满足您的要求。比如说,如果你要研究“莫奈到甘的摄影周期”,你需要寻找其他的存储库。TensorFlow 还拥有广泛的数据集(请查看[2])。
分为训练集和测试集
我们可以进一步将测试集分成验证集,这里没有实现。
现在让我们在代码之前初始化一些参数,这样我们可以根据需要调整它们。
数据预处理
为了防止过度拟合,我们需要将一些预处理技术映射到我们的数据,为此我们需要编写一些函数:
- random_crop :将图像裁剪到随机的高度和宽度,以确保我们的模型可以处理各种尺寸的图像。
random_crop 的代码片段
- 归一化:将像素值范围从[0,255]缩放到[-1,1]。
用于规范化的代码段
- random_jitter :执行论文【3】中提到的随机抖动和镜像。
随机抖动的代码片段
现在让我们定义两个父函数来合并这些代码片段。
- 预处理 _ 图像 _ 训练
预处理图像训练的代码片段
- 预处理 _ 图像 _ 测试
预处理图像测试的代码片段
注意:random_jitter 仅用于预处理训练集,以使我们的模型更进一步。
现在让我们结合所有的片段。
绘图
地图功能:
map(参数 1,参数 2):其中参数 1 是必须映射的函数。参数 2 是数据样本。
shuffle(BUFFER_SIZE)。batch(1)-混洗数据并按样本方式映射预处理技术。
-
让我们将预处理 _ 图像 _ 训练函数映射到训练 _ 马匹和训练 _ 斑马数据
-
让我们将预处理图像测试函数映射到测试马匹和测试斑马数据
唷!完成预处理。
现在,让我们从 train_horses 和 train_zebras 中选取一个随机样本,并在应用我们的预处理技术之前和之后绘制它,以确保我们没有搞砸。
sample_horse.py 的输出
sample_zebra.py 输出
嗯,我们的预处理技术一切都很好
发生器和鉴别器
让我们来设计模型的主干——生成器和鉴别器!
一、发电机:
生成器的体系结构被分成编码器和解码器,这类似于改进的 U-Net 的体系结构。
- 编码器中的每个块将具有以下层:卷积层-> Batchnorm 层-> Leaky ReLU 层。
- 解码器中的每个块都会有以下几层:转置卷积层-> Batchnorm 层-> Dropout 层(仅针对前 3 个块,以避免过拟合)-> ReLU 层。
- 编码器用于向下采样[4]并抓住图像的本质。另一方面,解码器从编码图像向上采样[5]图像。
- 此外,编码器和解码器之间存在类似于 U-Net 的跳跃连接。
二世。鉴别器:
- 鉴别器是一个 PatchGAN,其中输出的每个 30×30 片对输入图像的 70×70 部分进行分类。
- 鉴别器中的每个块将具有以下层卷积层-> BatchNorm 层-> Leaky ReLU 层,并且最后一层之后的输出形状是 batch_size 30 x 30 x 1。
- 因此,鉴别器函数有两个参数:
- 输入图像和目标图像,它应该分类为真实的。
- 输入图像和生成的图像,它应该将其归类为假的。
在循环 GAN 的情况下,我们使用实例规范化来代替批量规范化,我们也可以使用基于 ResNet 的生成器来代替 U-Net。(在我们的例子中,为了简单起见,我们使用 U-Net)。
周期 GAN 需要训练两个生成器(比如 G1 和 G2)和两个鉴别器(比如 D1 和 D2)。
- 生成器 G1 学习转换图像 X 到 Y(马到斑马)
- 生成器 G2 学习将图像 Y 转换为 X(斑马转换为马)
- 鉴别器 D1 学习区分原始图像 X 和生成的图像 X (G2(Y))
- 鉴别器 D2 学习区分原始图像 Y 和生成的图像 Y (G1(X))
我们不打算为生成器和鉴别器编写代码,而是使用在 pix2pix 中实现的 TensorFlow 预定义的生成器和鉴别器。
我们跑吧!
我们的发电机和鉴别器。
check_generator.py 的输出
check_discriminator.py 的输出
这是我们的发生器和鉴别器产生的随机噪声,我们现在该怎么办?
哦是的!你猜对了!为了得到公平的输出,我们需要一个损失函数。
损失函数
发电机损耗:
它是所生成的图像和一个“1”的阵列的 sigmoid 交叉熵损失,使得它允许所生成的图像在结构上变得与目标图像相似。
鉴频器损耗:
鉴别器损失函数采用 2 个输入,即真实图像和生成图像。
- real_loss 是真实图像和 1 的数组的 sigmoid 交叉熵损失(因为这些是真实图像),generated_loss 是生成的图像和 0 的数组的 sigmoid 交叉熵损失(因为这些是伪图像)。
- total_loss 是 real_loss 和 generated_loss 之和。
好了,现在我们的鉴别器能够区分输出是马还是斑马,但它不能确定输入和生成的图像之间的相似性。
为了明确这个问题,我们将使用重建损失。那么什么是重建损失呢?
让我们假设我们已经把一个英语句子翻译成了印地语句子,现在当我把我的印地语句子转换回英语时,它必须与最初的语句相同,这被称为循环一致性。
摘自“使用循环一致的对抗网络进行不成对的图像到图像的翻译”[3]
重建损失:
- 让我们假设图像 x 经由生成器 G1 传递,生成器 G1 产生生成的图像 Y^.
- 并且生成的图像 Y^经由生成器 G2 传递,生成器 G2 产生重建的图像 X^.
- 现在重建损失是 x 和 X^.之间的平均绝对误差
这里我们需要一个名为 lambda 的新参数,这是你可以调整的,它决定了输出与输入相比有多相似。
现在有一个东西叫做恒等损失,生成器 G 负责把图像 X 转换成 Y,恒等损失就是,如果你把图像 Y 馈送给生成器 G,它应该产生真实的图像 Y 或者类似于图像 Y 的东西。
TensorFlow 还允许我们为训练保存检查点(重量),这是完全可选的。
让我们训练我们的模型!
培训过程由 4 个基本步骤组成:
㈠获得预测
㈡计算损失
㈢计算梯度(反向传播)
㈣对优化程序应用梯度
我们需要一个函数来打印每个时期的输入图像和预测图像,让我们定义它。
啊,看起来有点复杂,对吧?
让我们将所有这些步骤合并到一个函数中。
酷,现在看起来不错。
现在我们已经为训练创建了一个函数,我将为每 5 个时期保存一个检查点。我们还可以调整时期的数量以获得更好的准确性,这里我运行了 40 个时期。
一旦训练完成,我们就可以在测试集上测试我们的模型。
以上代码片段的输出
来源
[1]https://www.tensorflow.org/tutorials/generative/cyclegan
[2]https://www . tensor flow . org/datasets/catalog/overview # cycle _ gan
[3] J. Zhu,T. Park,P. Isola,A. A. Efros,使用循环一致对抗网络的不成对图像到图像翻译,《2017 IEEE 计算机视觉国际会议(ICCV),威尼斯,2017 年,第 2242–2251 页,DOI: 10.1109/ICCV.2017.244
https://www.giassa.net/?page_id=174
https://www.giassa.net/?page_id=200
我的 LinkedInhttps://www.linkedin.com/in/murki-sai-srikanth-083093189(随意连接)。
以每月 1 美元的价格托管一个数据仪表板
用 AWS S3、Lambda、Pandas 和 React 在一个周末建立一个动态数据驱动的站点
我想建立一个简单的网站,每天自动刷新显示一个基本的图表仪表板。(以一种我可以与朋友分享的方式自动化我的日常 COVID 分析)。
刷新我的 AWS 技能是一个额外的收获,因为我已经几年没有使用它了。
设计
计划:
- 收集最新的东京 COVID 数据
- 在 JSON 中运行一些计算和输出
- 构建动态 Web GUI,在仪表板中显示最新数据
并发症:
- 源数据在下午 6 点到 10 点之间更新不一致
- 网站必须自动更新,是免费维护
- 必须是超低成本
解决方案:
- AWS Lambda 可以获取和处理数据,Cloudwatch 事件可以安排运行,SNS 会向我发送警报
- React.js w/ Material-UI 和 RE-Chart 为我提供了 GUI
- S3 将主办 React 编译网站& Lambda 生成的数据
通过使用 S3 网站托管选项,与托管 Node.js 或 Python 服务相比,成本低得令人难以置信。
最简单的设计?(图片由作者提供)
界面
由于这是一个低技术 S3 托管网站,唯一的“接口”是我们每天更新的 JSON 文件。我想要用 JSON 建模的 3 个数据集:
- 东京和日本当天的每日指标
- 趋势指标查看历史数字并计算滚动平均值
- 性别和年龄等人口统计数据的细分
一旦我修复了 JSON 格式,我就可以独立地构建前端和后端了。
**# dailyData.json** {“NewTokyoCase”: 258, “NewJapanCase”: 630, “TokyoCase”: 18865,
“JapanCase”: 56462,“LastTokyoCase”: 339, “TokyoCaseChange”: -81,
“TokyoCaseAvg7d”: 256,“TokyoCaseAvg30d”: 293,
“TokyoCaseAvgDiff”: -19, “TokyoCaseAvg30dDiff”: 0}**# dailyTrend.json** [{"name":"2020-02-18","Tokyo":3,"7dayAvg":3.0},
{"name":"2020-02-19","Tokyo":3,"7dayAvg":3.2857142857},
{"name":"2020-02-21","Tokyo":3,"7dayAvg":3.5714285714},
... ]**# dailyDemo.json** [{"name":"Gender_F","value":135.0,"value2":105.0},
{"name":"Gender_M","value":204.0,"value2":153.0},
{"name":"Age_10","value":16.0,"value2":19.0},
{"name":"Age_20","value":111.0,"value2":83.0},
... ]
AWS Lambda 代码库
Lambda 支持多种语言,但是对于这种类型的工作,Python 是合适的工具。代码库非常简单,只需 HTTP 获取 CSV 文件——然后通过一些 Pandas analytics 运行它,并以目标 JSON 格式输出到 S3。
由于缺少源数据更新的信号,我们只能轮询。仅仅检查文件头是不够的,因为文件似乎一直在更新。最可靠的方法是读取整个文件,并在我们看到添加了新日期时处理它。
代码基础很简单,需要封装在 Lambda 函数中,并返回带有 HTTP 代码的 JSON。
fetch 方法使用请求库,并传回结果以供下一步处理。
analyzeAndSave 代码使用 pandas 和 AWS 的 boto3 库向 S3 写入数据
React.js 代码库
使用 React 样板,如 Material-UI dashboard 及其变体,可以使 GUI 工作得非常快。我削减了材质感提供了一个简单的仪表板。
基于材料设计的材料感:作者的图像
GUI 只是在页面加载时获取 Lamda 生成的 JSON 文件。它将 JSON 数据传递给 re-chart 图形和图表。由于材质的主题,默认情况下看起来不错。
记住,React 编译成静态 JS 文件,并且纯粹是一个客户端应用程序(不需要后端 Node.js!).我只是将静态文件复制到 S3,提供给浏览器,这是一个非常便宜又简单的解决方案。
详述 React 超出了本文的范围,但是我强烈建议学习它[6]。下面是我们获取 JSON 并传递给组件的一些关键代码片段:
re-chart 代码也很基本,从 main.js 调用:
<SimpleReactiveBarChart data={this.state.dailyDemo.slice(2,12)} />
上面的组合创建了一个漂亮的图表,可以跨浏览器工作,有浮动工具提示、图例等,代码很少:
作者图片
部署
让你的 S3 水桶像一个网站一样简单,只需打开一个选项框(并确保文件是公开可见的)。
作者从 AWS 控制台提供的图片
要构建和部署 React,我们只需更新节点的包管理器(package.json ),以调用 AWS CLI 将目标构建文件复制到 S3:
cd ~/git/tokyocovid/material-sense/buildaws s3 cp precache-manifest.*.js s3://tokyocovid/aws s3 cp static s3://tokyocovid/material-sense/static — recursive
后端 Lambda 代码的设置和部署有点棘手,因为 1)您无法轻松地测试 Lambda 2)一些库(如 Pandas)不在默认的 Python env 中,但除此之外,您可以直接压缩和复制。使用 AWS CLI 将文件直接复制到 AWS Lambda:
zip aws_lambda.zip lambda_function.pyaws lambda update-function-code — function-name fetcher — zip-file fileb://aws_lambda.zip
Lambda 有一个很棒的特性,叫做层来管理依赖关系——你可以安装或引用现有的配置(层)来集合你需要的东西。在我的情况下,下面这 3 个支持我所需要的(核心 Py SciPy,Pandas 和 Requests)。
作者从 AWS 控制台提供的图片
最终产品:
虽然这不是开创性的,但对于周末的工作来说,我还是很满意的。它节省了我手动挖掘数据和动态重新运行不同测量的时间。我在运行或更新网站时遇到 0 个问题。
图片由作者查看现场@http://tokyocovid.foostack.org
请注意下面的“反应式”显示屏在移动设备上的表现。
向左移动,向右调整浏览器大小。(图片由作者提供)
到目前为止的账单:
AWS 控制台上作者的图像
给你。这花了我一个周末的时间,我在飞行中学会了 Lamda layers。我怀疑,如果我有 1 亿次点击,我的成本将远远超过 1 美元/月,但我很高兴处理这个问题,如果它发生了。
看看 github 源码,开始你自己有趣的项目。
参考
[1]材料感:【https://github.com/alexanmtz/material-sense】T4
React 的材质界面:https://material-ui.com/
[3]我这个项目的 GitHub:https://github.com/dougfoo/tokyocovid
[4]东京的 COVID 来源站点:https://stopcovid 19 . metro . Tokyo . LG . jp
[5]AWS 上的托管站点:【http://tokyocovid.foostack.org/
【6】正派 React 视频教程:https://www.youtube.com/watch?v=sBws8MSXN7A&t = 1527s
从 Linux VPS 托管 Jupyter 笔记本服务器
如何从您的 Linux 服务器托管 Jupyter 笔记本服务器。
(jupyter logo src = http://jupyter.org/)
Jupyter 笔记本是行业标准工具,使统计计算编程更加容易。这是因为在编写统计数据时,您可能经常想要读取返回,并且能够编辑和重新运行代码。此外,拥有一个虚拟内核来做这件事也非常有用。虽然 Jupyter 笔记本很适合在本地机器上使用,但很难忽略它们是在 HTTP 服务器上运行的。鉴于 Jupyter Notebooks 是通过网络浏览器访问的,这一点尤其正确。
因此,由于 Jupyter Notebooks 是在 web 浏览器中运行的,并且具有成熟的非开发服务器,甚至具有密码和写保护,因此很容易理解为什么您可能希望在虚拟专用服务器(VPS)上运行 Jupyter。)近年来,服务器的租金已经便宜了很多。此外,你可以很容易地租到硬件比你的计算机好得多的服务器。最重要的是,这是一种在大型团队中共享文件,甚至是文本文件的好方法,因为您甚至可以将 Jupyter 用作文件浏览 GUI、bash 终端和文本编辑器。
首先,要在您的 VPS 上建立并运行一个 web 服务器,您当然需要通过 SSH 连接到该服务器。
ssh emmett@my-ip-is-hidden
负载平衡器/网络服务器
为了在 Linux 上为 wsgi 建立一个 web 服务器,我们需要一个 web 服务器。我喜欢使用 NGINX,但是也有几个选择,比如 Apache,它也经常被使用。然而,如果你是新手,我强烈建议你使用 NGINX。NGINX 比 Apache 快,在本文中,我将向您展示如何设置它来托管本地服务器。
要使用 NGINX(顺便说一下,发音是 engine-ex,)我们首先需要安装它。我很确定 NGINX 在所有的包管理器中都是可用的,但是如果你使用的是 Suse 服务器,我当然不能考虑 man。
sudo dnf install nginx
一旦我们安装了 NGINX,我们就可以继续配置我们的 web 服务器了。首先,cd 转到/etc/nginx/conf.d,这是存储 nginx 配置文件的地方。
cd /etc/nginx/conf.d
现在打开一个新的。conf 文件,请确保您以 root 用户身份运行,因为您可能没有权限在此处保存文件:
sudo nano mysite.conf
接下来,我们将创建一个配置文件。如果您的 VPS 上没有运行任何服务器,并且您可以使用端口 8000,那么复制我的就没有任何问题:
**server** {
**listen** 80;
**server_name** your.ip.here;
**location** / {
**proxy_pass** http://127.0.0.1:8000;
**proxy_set_header** Host $host;
**proxy_set_header** X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
现在只需 ctrl+o 然后按 y 保存文本缓冲区,并使用 ctrl+x 关闭 Nano。接下来,我们必须取消默认 NGINX 配置文件的链接。
sudo unlink /etc/nginx/sites-enabled/default
现在,您可以使用以下命令重新加载配置:
nginx -s reload
要测试您的配置,您可以安装并运行 jupyter-notebook,然后转到 NGINX 配置文件中提供的域或 IP。
sudo dnf install jupyter-notebook && jupyter-notebook
现在,如果你在浏览器中浏览你的域名或 IP 地址,你应该会到达 Jupyter。
监督者
最后一步是设置一个管理员来运行 jupyter-notebook 命令。根据您的发行版,您可能需要安装以下任一软件
sudo apt-get install supervisor
sudo dnf install supervisord
现在,我们将 cd 转到我们主管的配置目录。
/etc/supervisor/conf.d/
现在,正如您可能已经预料到的,我们需要更新另一个配置文件。
欢迎来到开发运营的世界。
这是我的,你可以用它作为你的基础。
[program:flask_app]
directory=/
command=jupyter-notebook
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/appname/lognameerr.log
stdout_logfile=/var/log/appname/lognamestdout.log
很简单,对吧?
现在只需重新加载主管,
sudo service supervisor reload
现在,您的笔记本电脑服务器将启动,您可以随时与其他人一起访问和使用它!
结论
我认为拥有自己的远程 Jupyter 笔记本服务器非常酷!这是我在团队中使用的最好的方法之一,因为你的整个团队可以同时访问和修改同一目录中的文件。此外,您将可以使用 Bash、笔记本和一个图形文本编辑器。虽然我确实喜欢 Nano,但我可以理解为什么它可能会让那些不像我这样的终端狂热者感到有些畏惧。您还可以将它用作网络附加存储的本地解决方案,尤其是如果您打算将所有数据科学项目都放在那里的话。这是一个很好的方法,通过把旧电脑变成服务器来利用它。总而言之,很难不发现 Jupyter 服务器的巨大用途,无论是在本地、VPS、NAS 上,还是在 2000 年代初的 2GB RAM 笔记本电脑上运行。
在 AWS Fargate 上使用 Terraform 进行基本身份验证的主机 Polynote 笔记本
本文将帮助您使用 Terraform 在 ECS 上轻松部署安全的 Polynote 环境。
最近我发布了一篇关于旋转 Jupyter 笔记本的文章。本文描述了如何使用 Terraform 轻松启动 Jupyter 笔记本环境。这篇文章将大致相同,但然后与 Polynote 笔记本。
[## 使用 Terraform 在 AWS 中将 Jupyter 笔记本电脑升级为 ECS 服务
在这篇文章中,我将解释如何使用 Terraform 在几秒钟内在 AWS 上运行 Jupyter 笔记本。
towardsdatascience.com](/spinning-up-jupyter-notebooks-as-ecs-service-in-aws-with-terraform-805ac111d74b)
为什么我发表了两篇有些相同的文章?嗯,Jupyter 笔记本有一个问题,对我们(我所在的团队)来说,这个问题使它无法工作。问题是当你刷新页面时输出会丢失,这是一个已知的问题。根据我在互联网上搜索后的理解,这只是一个可视化/表示错误,你的脚本实际上会在后台继续运行,但输出会发送到浏览器会话,当你刷新页面或在另一个设备上打开它时,输出会丢失。除了这个问题,Jupyter 并不是最适合我们的需求,设置需要一些额外的步骤,这些步骤与上一篇文章无关:
- Polynote 需要一个配置文件,该文件需要包含在定制的 Docker 映像中。
- Polynote 环境不能像 Jupyter 笔记本一样用令牌或密码来保护,所以我们需要为此添加一个额外的层(先睹为快:将使用 NGINX)。
先决条件
要使这个设置工作起来,有一些先决条件,让我们从已经启动并运行的 AWS 服务开始(设置这些不在本文的讨论范围之内):
- ECS 集群
- 应用程序负载平衡器
- Route53 内的托管区域和域
我们将与 Terraform 合作,所以你也需要在你的设备上安装那个。Terraform 使您能够以代码的形式组织和管理您的(云)服务和基础设施。您还需要一个像 AWS 命令行界面 (CLI)这样的工具,配置一个概要文件,这样我们就可以,或者说是 Terraform,与您的 AWS 环境进行通信。或者,您可以在您的设备上安装 Docker ,以防您想要更改 Polynote 配置文件并重建 Docker 映像,或者更改 NGINX 映像并重建它。
下载或克隆文件
现在,我假设您已经设置了所需的 AWS 服务,并且已经在您的计算机上安装了所需的软件。出于本文的目的,我已经建立了这个 GitHub 库,在这里你可以找到我们在这里讨论的代码片段的所有最终文件。为了避免可能的错误,我建议将存储库克隆到您的计算机上/从 repo 下载文件,而不是复制并粘贴本文中的所有代码片段(有些部分将不讨论,因此它们不包含在本文中)。
知识库结构
如您所见,存储库包含 3 个文件夹:
- 多项式码头
- nginx
- 将(行星)地球化(以适合人类居住)
polynote-docker 文件夹包含创建官方 Polynote docker 映像的 Docker 映像所需的所有文件。简而言之;通常,当你想运行 Polynote Docker 映像时,你需要一个 config.yml 文件。我已经将该文件包含在自定义映像中,因此我们不必在 ECS 中添加卷。我们不会进一步讨论 Docker 映像,因为我已经将一个映像推送到 Docker Hub,它将在本设置中使用。我还创建了自己的 NGINX 映像,基于这个映像:dtan 4/NGINX-basic-auth-proxy。这张图片向我们的 NGINX 添加了基本的 auth,并且我为 websockets 添加了一个额外的路径,这是 Polynote 工作所必需的。 terraform 文件夹包含在 AWS 上设置整个环境所需的所有文件,该文件夹由以下三个文件组成:
- main.tf(“魔法”发生的地方)
- vars.tf(在 main.tf 中使用的变量声明)
- vars.tfvars(为变量赋值)
编辑变量. tfvars
我们将从编辑 vars.tfvars 文件开始,因为这些变量值将在后面的main . TF**文件中使用。您必须重新访问除了cpu
和memory
之外的所有变量值,当然,除非您想要增加或减少资源。
变量. tfvars
*vpc_id = "YOUR_VPC"
region = "eu-west-1"
profile_name = "LOCAL_PROFILE_NAME"
ecs_cluster_name = "CLUSTER_NAME"
loadbalancer_arn = "LOAD_BALANCER_ARN"
hosted_zone_id = "HOSTED_ZONE_ID"
fargate_subnets = [
"PRIVATE_SUBNET_1",
"PRIVATE_SUBNET_2",
"PRIVATE_SUBNET_3"
]
cpu = 1024
memory = 2048
domain = "mydomainname.com"*
所有信息都可以在 AWS 控制台中找到,除了配置文件名称,这将是您在本地计算机上用来配置 AWS CLI 的 AWS 配置文件名称,例如通过
aws configure --profile=test
,这里的“测试”是配置文件名称。如果您没有设置配置文件名,它可能会设置为“默认”。
Gain Insight Into the Working of The main.tf File
现在,让我们看一下 main.tf 文件,正如我之前所说的,所有的“魔法”都发生在这里。这个文件包含了我们需要的所有资源来使这个设置工作。幸运的是,如果我们做得很好,我们唯一要做的就是运行一个命令,Terraform 会完成剩下的工作,所以知道文件中有什么是很好的。我不会深入研究地形的概念。
获取现有 ECS 集群
*data "aws_ecs_cluster" "ecs_cluster" {
cluster_name = var.ecs_cluster_name
}*
在上面的块中,将检索现有的 ECS 集群,稍后将在脚本中使用该集群。
生成唯一标识符
*resource "random_string" "random_string" {
length = 8
special = false
}*
这可能非常令人困惑,为什么要生成随机字符串呢?因为我们希望能够同时启动多个环境,所以我们需要给一些资源名称添加一个独特的部分。我们正在创建的某些资源不能与现有的同类型资源同名。如果我们不添加这个独特的部分,并且人员 A 已经有了一个正在运行的 Polynote 环境,那么人员 B 就不能创建一个新的环境,因为 AWS 中已经存在一个具有该特定名称的特定资源。
添加任务执行角色
*resource "aws_iam_role" "ecs_task_execution_role" {
name = "ecsTaskExecutionRole-polynote-${random_string.random_string.result}"
assume_role_policy = <<ASSUME_ROLE_POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ASSUME_ROLE_POLICY
}data "aws_iam_policy" "amazon_ecs_task_execution_role_policy" {
arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
}resource "aws_iam_role_policy_attachment" "policy_role_attachment" {
role = aws_iam_role.ecs_task_execution_role.name
policy_arn = data.aws_iam_policy.amazon_ecs_task_execution_role_policy.arn
}*
上面的代码行将创建一个任务执行角色,并将已经存在的amazonectaskexecutionrolepolicy(由 Amazon 提供)附加到该角色,这允许您将容器的日志发送到 CloudWatch。如果您需要访问 Polynote 笔记本中的其他 AWS 服务,您需要编写必要的策略,并将它们附加到一个新角色(任务角色)上,并将其作为task_role_arn
添加到polynote_task_definition
中。我们不会在本文中讨论这个问题,但是所需的部分可以在 Git 存储库中找到,并且现在已经被注释了。
添加云观察日志组
*resource "aws_cloudwatch_log_group" "polynote_ecs_log_group" {
name = "/aws/ecs/polynote-${random_string.random_string.result}"
}*
出于日志记录的目的,我们还创建了一个日志组。
生成密码以访问笔记本
*resource "random_string" "password" {
length = 24
special = false
}*
因为我们想用至少一个密码来保护 Polynote 笔记本环境,所以我们生成了一个随机字符串。这一步需要重新考虑,因为在当前的设置中,密码将作为纯文本环境变量传递给容器。最好在秘密管理器中设置一个秘密,并使用任务定义中的secrets
属性来解决这个问题。
创建 ECS 任务定义
*resource "aws_ecs_task_definition" "polynote_task_definition" {
family = "polynote-${random_string.random_string.result}"
requires_compatibilities = [
"FARGATE"]
network_mode = "awsvpc"
cpu = var.cpu
memory = var.memory
execution_role_arn = aws_iam_role.ecs_task_execution_role.arncontainer_definitions = <<TASK_DEFINITION
[
{
"essential": true,
"image": "registry.hub.docker.com/sschrijver/polynote-basic-config:latest",
"name": "polynote",
"portMappings": [
{
"containerPort": 8192,
"hostPort": 8192
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-region": "${var.region}",
"awslogs-group": "${aws_cloudwatch_log_group.polynote_ecs_log_group.name}",
"awslogs-stream-prefix": "polynote-${random_string.random_string.result}"
}
}
},
{
"essential": true,
"image": "registry.hub.docker.com/sschrijver/polynote-nginx:latest",
"name": "nginx",
"dependsOn": [
{
"containerName": "polynote",
"condition": "START"
}
],
"portMappings": [
{
"containerPort": 8080,
"hostPort": 8080
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-region": "${var.region}",
"awslogs-group": "${aws_cloudwatch_log_group.polynote_ecs_log_group.name}",
"awslogs-stream-prefix": "nginx-${random_string.random_string.result}"
}
},
"environment": [
{
"name": "SERVER_NAME",
"value": "127.0.0.1"
},
{
"name": "PORT",
"value": "8080"
},
{
"name": "BASIC_AUTH_USERNAME",
"value": "polynote"
},
{
"name": "BASIC_AUTH_PASSWORD",
"value": "${random_string.password.result}"
},
{
"name": "PROXY_PASS",
"value": "[http://127.0.0.1:8192](http://127.0.0.1:8192)"
}
]
}
]
TASK_DEFINITION
}*
这是一个很长的片段,但是在上面你看到了我们将要运行的 ECS/Fargate 服务的任务定义(蓝图),如果你熟悉 docker-compose.yml 文件,它看起来有点像下面这样(没有logConfiguration
):
*version: '3.4'
services:
polynote:
image: registry.hub.docker.com/sschrijver/polynote-basic-config:latest
expose:
- 8192
nginx:
image: registry.hub.docker.com/sschrijver/polynote-nginx:latest
depends_on:
- polynote
ports:
- 8080:8080
environment:
- SERVER_NAME=127.0.0.1
- PORT=8080
- BASIC_AUTH_USERNAME=polynote
- BASIC_AUTH_PASSWORD=${random_string.password.result}
- PROXY_PASS=[http://polynote:8192](http://polynote:8192)*
此外,请注意PROXY_PASS
中的不同,Fargate 不会像docker-compose
那样处理解析主机,我们必须在任务定义中通过 127.0.0.1 进行连接。
NGINX
您可以看到任务定义中有两个容器。这是因为我们还需要在服务中运行 NGINX。这个 NGINX 实际上会被暴露,并会增加一个额外的基本认证层,这样陌生人就无法访问我们的笔记本电脑,或者更糟;访问我们的 AWS 环境。感谢景岛乐·藤田发布了dtan 4/nginx-basic-auth-proxy库及其代码,我的图片就是基于这些代码。我更新了映像中 NGINX 的版本,还添加了一个 websocket 路径。就我个人而言,我会建议您分叉他或我的存储库,进行一些调整,并将您自己的 Docker 映像推/用到 ECR/Docker Hub,因为在安全性和 Docker 映像标签方面,有些东西肯定可以改进/重新访问。
让我们进一步走到 main.tf 文件。
获取现有的 VPC、负载平衡器和负载平衡器侦听器
*data "aws_vpc" "vpc" {
id = var.vpc_id
}data "aws_lb" "lb" {
arn = var.loadbalancer_arn
}data "aws_lb_listener" "lb_listener" {
load_balancer_arn = var.loadbalancer_arn
port = 443
}*
我们将收到关于现有 VPC、应用程序负载平衡器和负载平衡器监听器的信息。如果您使用端口 80 作为负载平衡器上的监听器,您应该将 443 改为 80。
创建负载平衡器目标组
*resource "aws_lb_target_group" "polynote_target_group" {
name = "polynote-${random_string.random_string.result}"
port = 80
protocol = "HTTP"
vpc_id = data.aws_vpc.vpc.id
target_type = "ip"
health_check {
matcher = "200,302,401"
}
}*
如果您想要将 ECS 服务附加到负载平衡器(或者将负载平衡器规则指向 ECS 服务,这取决于您如何看待它),您还需要一个目标组。这将在稍后定义服务时使用。如您所见,HTTP 响应代码 401 也包含在健康检查中,因为我们的 NGINX 服务将返回 401(未授权)响应代码,因为我们已经包含了一个基本的身份验证层。
创建安全组
*resource "aws_security_group" "polynote_security_group" {
name = "polynote_${random_string.random_string.result}"
vpc_id = data.aws_vpc.vpc.idingress {
description = "Incoming 8080"
from_port = 8080
to_port = 8080
protocol = "tcp"
security_groups = data.aws_lb.lb.security_groups
}egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = [
"0.0.0.0/0"]
}tags = {
Name = "polynote_${random_string.random_string.result}"
}
}*
负载平衡器需要访问 ECS 服务,因此我们向安全组添加了一个入口规则,该规则稍后将附加到 ECS 服务。这个入口规则允许我们的负载平衡器与运行在端口 8080 上的 NGINX 通信。
创建 ECS 服务
*resource "aws_ecs_service" "polynote_service" {
name = "polynote-${random_string.random_string.result}"
cluster = data.aws_ecs_cluster.ecs_cluster.id
task_definition = aws_ecs_task_definition.polynote_task_definition.id
desired_count = 1
launch_type = "FARGATE"network_configuration {
subnets = var.fargate_subnets
security_groups = [
aws_security_group.polynote_security_group.id]
}load_balancer {
target_group_arn = aws_lb_target_group.polynote_target_group.arn
container_name = "nginx"
container_port = 8080
}
depends_on = [
aws_lb_target_group.polynote_target_group]
}*
最后,我们已经准备好了创建 ECS/Fargate 服务的所有构件。我猜上面的片段是不言自明的。
创建负载平衡器侦听器规则
*resource "aws_lb_listener_rule" "polynote_lb_listener_rule" {
listener_arn = data.aws_lb_listener.lb_listener.arn
priority = nullaction {
type = "forward"
target_group_arn = aws_lb_target_group.polynote_target_group.arn
}condition {
host_header {
values = [
"polynote-${random_string.random_string.result}.${var.domain}"]
}
}depends_on = [
aws_lb_target_group.polynote_target_group]
}*
我们希望我们的 ECS 服务可以公开访问,所以我们添加了一个负载平衡器侦听器规则。如您所见,我定义了一个主机头条件,这是因为我将把 Route53 子域指向负载均衡器 DNS(参见下面的参考资料)。如果您想直接使用负载平衡器 DNS,您可能需要稍微调整一下这个资源,并使用path_pattern
条件,就像在 Terraform 文档中所述的那样。如果您这样做,请注意,它将影响脚本中稍后的输出和资源,所以在您进行更改时,请重新访问这些块。
创建 Route53 记录
*resource "aws_route53_record" "polynote_cname" {
zone_id = var.hosted_zone_id
name = "polynote-${random_string.random_string.result}.${var.domain}"
type = "CNAME"
records = [
data.aws_lb.lb.dns_name]
ttl = 300
}output "url" {
value = "https://${aws_route53_record.polynote_cname.name}"
}
output "username" {
value = "polynote"
}
output "password" {
value = random_string.password.result
}*
正如我已经说过的,我在 Route53 中设置了一个指向负载均衡器的子域。毕竟,我将输出完整的 URL 来访问环境,这将在触发正确的 Terraform 命令后最多大约 5 分钟内在线。
运行 Terraform 脚本
现在我们已经(基本)了解了脚本的功能,我们可以执行 Terraform 脚本了。确保您已经编辑了 vars.tfvars ,使其符合您的 AWS 环境,并确保您已经安装了 Terraform,并在您的设备上配置了正确的 AWS 配置文件。
首先,您必须在包含。tf 文件,方法是在终端中执行以下命令:
*terraform init*
terraform init
命令用于初始化包含 Terraform 配置文件的工作目录。这是在编写新的 Terraform 配置或从版本控制中克隆现有配置后应该运行的第一个命令。多次运行该命令是安全的。
来源 : terraform.io
然后,您希望应用带有 vars.tfvars 文件的 Terraform 配置文件,这样您就不必手动输入这些信息。您可以通过运行以下命令来实现这一点:
*terraform apply -var-file=vars.tfvars*
这也将输出 Terraform 将对您的 AWS 环境采取的操作,并要求您确认。仔细阅读 Terraform 将采取的行动,并通过键入yes
确认(随后按 Enter)。现在将在您的环境中创建资源。
当脚本完成时,它将输出一个 URL 和凭证,您可以使用它们来访问 Polynote 环境,如下所示:
*Outputs:password = ZoG2ZMzFxY3aUNCImstvXfYM
url = [https://polynote-py11kxuq.mydomainname.com](https://polynote-py11kxuq.pondatalab.com)
username = polynote*
容器实际运行需要一些时间,所以请耐心等待(大约 5 分钟)。一旦它启动并运行,您进入该网站,将显示一个弹出窗口,您可以在其中输入凭据。当您提供正确的凭证时,您将被转到 Polynote 环境。现在您可以在 Polynote 环境中做任何您想做的事情:-)!我建议创建一个新的笔记本,而不是使用 Blank.ipynb ,因为它会因为任何原因导致内核问题。
多项式界面
破坏 Polynote 环境
完成后,您可以通过执行以下 Terraform 命令来轻松破坏 Polynote 环境:
*terraform destroy -var-file=vars.tfvars*
它会再次要求确认,键入yes
来销毁所有资源。
待办事项
我已经在这篇文章中提到了一些要做的事情。当然还有很多需要改进的地方,但我想确保您了解以下几点:
- Polynote 密码目前是一个环境变量,Secrets Manager 可能是一个更好的选择。
- 重新访问安全 NGINX 层。这个解决方案真的安全吗?至少它提供了某种保护,而默认情况下 Polynote 笔记本没有密码或令牌保护。
- 如果取消对任务角色策略的注释,请注意,它目前没有限制,这意味着它可以访问您的所有 AWS 资源。您不希望这样,所以请确保您进行了更改,以便该服务只能访问它需要访问的资源。
问题或反馈
如果您对本文有任何问题或反馈;请让我知道!
使用 Jupyter 笔记本托管您自己的离线地图服务器
实践教程
在本地服务器上部署底图服务器的分步指南——整个项目可在我的 GitHub 中找到
概述
LeafletJS , MapBox , Esri 等。这些只是一些地图插件,分析师,开发者等。需要各种地理空间可视化的人倾向于使用。不用说,所有这些插件都有一些共同点-它们都需要底图服务来实现有意义的交互。得益于许多开源地图服务,如 OpenStreetMap(OSM) ,解析地图服务 url 进行渲染几乎不费吹灰之力:
作者代码片段|使用 LeafletJS 初始化底图的简单示例
托管离线底图的基本原理
然而,当应用程序由于不可预见的情况(如缺少 WiFi、互联网连接故障、底图服务不再可用等)而无法连接到地图服务时,这种简单的可访问性可能会适得其反。作为一项预防措施,考虑在本地服务器上本地托管自己的底图总是比较明智的,尤其是在需要演示或在工作中使用应用程序的时候。
按作者分类的图像|本地托管底图示例
虽然有几种方法可以做到这一点,我的首选是利用小叶的 mbtiles 插件称为小叶。这需要一些准备步骤,我将在下面介绍。这包括一点计算、一个本地 web 服务器、实用 python 包 mbutil 和基础 leafletJS 库(因为选择 mbtiles 插件意味着与 leafletJS 集成)。
步骤 1:在线搜索预先存在的底图服务并进行选择
首先,决定离线托管的特定底图。一个好的起点是 http://maps.stamen.com/,那里有大量可供公众使用的底图。此外,决定托管哪个底图有助于清楚地了解每个地图切片的 url 格式 (KIV:这一点极其重要,我们将在后面看到。)。为了进行演示,我将选择 MapStamen 的碳粉底图。确定想要托管的底图类型后,继续:
- 缩放至所需的最小缩放级别,例如
11
,并确保当前浏览器视窗当前正在捕获所有正在渲染地区/省份/国家/大陆的地图图块图像。例如,假设我的目标是托管国家新加坡的底图,我的浏览器应该如下所示:
作者图片|展示缩放级别为 11 的maps.stamen.com墨粉底图
2.右键单击并选择“检查”或 Ctrl+Shift+i(在 Windows 上)
作者图片| Google Chrome 浏览器中的开发者工具截图|请注意,底图的每个切片图像中都嵌入了“src”属性
虽然不同的浏览器有不同的配置,但两个基本组件是:
1.浏览器控制台
2.元素选项卡查看 html 标记。
从呈现的每个地图区块图像的src
属性的格式来看,它遵循传统的滑动地图格式,其中 URL 包含{s}-{z}/{x}/{y}
:
z
:缩放级别x
:平铺图像的 X 坐标,以像素为单位y
:平铺图像的 Y 坐标,单位为像素s
:指子域。由于大量使用地图服务,子域a
、b
、c
配置到位。
将以下 JavaScript 代码片段复制并粘贴到控制台中:
输出应该类似于以下内容:
作者图片|运行 JavaScript 代码片段后,从缩放级别为 11 的底图的每个 < img / > 标记的图像**src**
属性中检索所有 x,y 坐标
说明:由于底图中渲染的每个地图分块的 url 格式遵循以下格式:
http://c.tile.stamen.com/toner/11/1614/1016@2x.png
,通过使用标记/
对其进行定界并将其转换为数组,我们可以看到以下结果:
说明:最上面一列代表数组的索引。在这种情况下,在缩放级别11
:
x
可以在5
位置找到y
可以在6
位置找到
maps.stamen 中其他可能的底图选项包括:
- http://tile.stamen.com/toner/{z}/{x}/{y}.png(墨粉)
- http://tile.stamen.com/terrain/{z}/{x}/{y}.jpg(特雷恩)
- http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg(水彩)
第二步。导入 python 包并初始化纬度/经度或 X/Y 转换函数
Slippy_map_tilenames 处的代码段源代码|函数num2deg
根据缩放级别(zoom
参数)将x
和y
分别转换为latitude
和longitude
。
Slippy_map_tilenames 处的代码段源代码|函数deg2num
根据缩放级别(zoom
参数)将lat_deg
和lon_deg
分别转换为图块图像的x
和y
2.1 将所有图块坐标(x,y)转换成坐标(纬度,经度)以将所有标记组合成一个 GeoJSON 特征集合对象
作者的代码片段|请注意,标记保存在一个文件( output.geojson )中,4 个变量—minx val****maxx val minYVal maxYVal在这里被初始化,用于后续计算
作者的代码片段|输出将在后续计算中使用的前 4 个变量的值
上面代码的输出是:
minXVal 的值为:1612
maxx val 的值为:1616
miny val 的值为:1015
maxy val 的值为:1018
2.2 使用 output.geojson 可视化地图标记
将 GeoJSON 文件渲染到任何地图渲染平台上,以查看实际地图上的坐标。我个人推荐http://geojson.io/,因为它有直观的界面和实用的功能。基于上述示例,从缩放级别11
的图块转换的坐标应如下所示:
图片作者|可视化 output.geojson 数据文件|注意上图尺寸显示的是 4 × 6 地图标记,相当于 4 × 6 平铺。
第三步。计算其他缩放级别的(X,Y)值
在进行实际计算之前,重要的是要确定滑动贴图的图块坐标遵循以下规则:
瓷砖总数= 2ᶻᵒᵒᵐ × 2ᶻᵒᵒᵐ
例如,当缩放级别= 11
时,底图具有 2 × 2 = 2048 × 2048 个切片
根据地图上显示的标记,图块数量为: 4 × 6 图块,其中:
- 最小(x) = 1612
最大(x) = 1616 - 最小(y) = 1015
最大(y) = 1018
按作者分类的图像|底图缩放级别为 11 的切片尺寸| x 范围为 1612 至 1616(含)| y 范围为 1015 至 1018(含)
因此,基于上述逻辑,对于缩放级别12
:
瓷砖总数=2 × 2 = 4096 × 4096
这转化为:(4/2048)×4096×(6/2048)×4096 tiles =8×12 tiles其中:
- min(x)= 1612/4×8 = 3224
max(x)= 1616/4×8 = 3232 - 最小(y)= 1015/6×12 = 2030
最大(y) = 1018/6 × 12 = 2036
按作者分类的图像|底图缩放级别为 12 的切片尺寸| x 范围从 3224 到 3232(含)| y 范围从 2030 到 2036(含)
3.1 上述等式有效的概念证明
作者的代码片段| POC _ equation _ of _ zoom _ map _ tiles . py 的代码片段生成了 output.json ,其中包含一个切片 URL 列表|要测试计算是否合法,只需导航到几个链接以确保链接没有断开,预期结果应该是一个切片图像
根据上述计算的图示,现在可以计算和检索所需的所有底图切片图像。接下来,将根据 Slippy 地图规则建立文件夹层次结构,以包含本地保存的后续图块图像。
作者图片| http://maps.stamen.com/浏览器后端截图显示了存储图片的文件夹结构
因此,从上面可以推断出地图切片图像存储在以下文件夹结构中:
按作者分类的图像|要创建的切片图像的文件夹层次结构
下一节将尝试创建所需的文件夹层次结构。在执行此操作之前,应确定底图的缩放上限。通常,当用户需要查看街道级别的详细信息时,17
或18
是很好的选择。对于本教程,我将设置我的缩放水平上限,只是15
。
早先,缩放级别 11 和 12 的区块尺寸都被导出。因此,在缩放级别n
,由于平铺数量= 2ᶻᵒᵒᵐ × 2ᶻᵒᵒᵐ,
尺寸应为:(4×(2ⁿ)×(6×(2ⁿ)平铺
最小(x) = 1612/4 × 4(2ⁿ)
最大(x) = 1616/4 × 4(2ⁿ)
min(y)= 1015/6×6(2ⁿ)
max(y)= 1018/6×6(2ⁿ)
按作者分类的图像|底图缩放级别 n 的切片尺寸| x 范围从最小值(x)到最大值(x)(含)| y 范围从最小值(y)到最大值(y)(含)
为了减少重复代码,应创建一个应用上述逻辑的函数,以便在任何缩放级别检索图块的x
和y
坐标:
作者代码片段|输出为:缩放级别为 11 到 15 的文件夹结构已创建。
第四步。将切片图像流式传输到创建的本地文件夹中
初始化文件夹结构后,我们现在可以从底图服务中检索缩放级别在minZoomLevel
和maxZoomLevel
(含)范围内的切片图像。
需要注意的是:
- 如果指定的缩放级别上限很高,例如,高于缩放级别
17
将显著增加运行代码的持续时间,则该步骤可能需要几个小时 - 输出的切片图像将占用相当多的磁盘空间。通常,来自地图服务(如 OpenStreetMap)的栅格切片(由单个国家的缩放级别
11
到17
组成)大约占用 500MB。 - 如果托管的底图类型是卫星地图,由于卫星影像的高分辨率,最终输出通常会达到几 GB,因此明智的做法是在将切片图像保存到本地磁盘驱动器之前确保有足够的可用磁盘空间。
Author | Output 的代码片段是:缩放级别为 11 到 15 的所有地图切片图像都已保存到本地目录中。
按作者分类的图像|所有图块图像保存到本地文件夹后,它应该与上面类似。基本上,这是上述所有步骤的总结。
4.1 在 web 服务器上托管文件夹,以确保切片图像保存成功
最后,为了确保保存正确的切片图像,应设置一个 web 服务器,并直接从文件夹中调用底图(只有在确保底图正确渲染后才能进行打包)。
在本演示中,将使用库Flask
和werkzeug
直接在 jupyter 笔记本中设置一个 web 服务器来托管底图。
先决条件
- 包含基础传单库:传单样式表和传单 JS
- 包括传单插件 L.TileLayer.mbTiles 插件及其依赖关系 sql.js
- 将步骤 2 生成的文件
output.geojson
放入下面指定目录结构的static
文件夹中 - 将图块图像文件夹如碳粉复制并粘贴到以下指定目录结构的
static/maps
文件夹中 - 保存一个空白的黑色图块,并将其重命名为
error.png
。将其放入下面指定目录结构的static
文件夹中
作者图片|代表整个文件夹结构,包括 jupyter 笔记本
最后,继续在<script></script>
标记之间的index.html
中包含以下代码片段,以直接从文件夹渲染底图:
作者的代码片段|上面的代码片段使用 leafletJS 初始化了一个新的地图对象|步骤 2 中生成的文件 output.geojson 通过 AJAX 调用,并继续在底图的 bbox 中设置地图视图
作者代码片段| Flask web 应用程序的初始化。注意,已经创建了一个关闭 web 服务器的 API。这个 API 是通过链接http://localhost:9000/shut down访问的
按作者分类的图像|渲染的初始底图视图示例
按作者分类的图像|底图的放大视图
4.2 用 python 包将文件夹打包— mbutil
既然我们已经确保底图渲染了正确的切片图像,现在可以将文件夹打包到单个 mbTile 文件中。这是通过 python 包 mbutil 完成的。要安装 mbutil,我们需要严格遵循以下说明:
- 导航至 mbutil
- 继续克隆/下载 git 存储库,并将 ZIP 存档保存到 jupyter 笔记本所在的文件夹中
作者图片|为 mbutil 选择“下载 ZIP”
3.提取文件夹mbutil-master
并重命名为mbutil
。
4.在 mbutil 文件夹中导航并删除文件.gitignore
。它现在应该是这样的:
作者图片|显示 mbutil python 包的内容
5.继续打开该文件夹中的终端/命令提示符并运行:python mb-util ../static/maps/toner ../static/maps/toner.mbtiles
作者图片|显示命令提示符,表明mbutil
的打包过程正在进行
6.toner.mbtiles
现在已创建,最新的文件夹结构应该如下所示:
图片作者| ( 左)上一个项目结构| ( 右)当前项目结构
7.因此,继续修改标签之间的index.html
中的代码片段,以渲染来自toner.mbtiles
文件的底图:
作者代码片段|上面的代码片段与前面的代码片段几乎相同,只是不是从static/maps/toner/{ z }/{ x }/{ y }渲染底图。png ,底图现在由打包的 mbtiles 文件static/maps/toner . MB tiles渲染而成
第五步。使用 mbtile 文件和传单重新运行 web 应用程序。TileLayer.MBTiles.js 插件
作者代码片段|重新初始化 flask 应用程序以渲染底图
图片由作者提供|如上所述,所有切片地图图像的 url 均以二进制格式呈现,从 toner.mbtiles 获取-本地底图现已成功打包到单个 mbtiles 文件中,并部署到本地服务器上以供使用。
注意:您可以继续删除文件夹static/maps/toner
,只留下 mbtiles 文件供应用程序使用。
恭喜你!现在,您已经在本地服务器上渲染了底图。
请随意在我的 GitHub 分叉项目,并查看实际的 Jupyter 笔记本。
如果你对更多与地理空间相关的内容感兴趣,你可以在 Medium 上关注我,我很乐意分享更多我自己的作品或发现。
希望你们觉得这有用,感谢阅读!
获得李思欣·崔和其他作家在媒体上的所有帖子!😃您的会员费直接…
geek-cc.medium.com](https://geek-cc.medium.com/membership)
热门与否:分析 60 年来美国公告牌百强数据
照片由 Unsplash 上的 israel palacio 拍摄
德雷克和泰勒·斯威夫特是 Billboard Hot 100 无可争议的国王和王后。他们分别拥有 157 首和 109 首不同的歌曲,打破了滚石乐队(57 首)、埃尔顿·约翰(64 首)和披头士乐队(69 首)的记录。意识到这一点后,我想发现音乐行业随着时间的推移发生变化的一些其他方式,即通过确定发行音乐的数量、发行人以及在 Hot 100 上的表现。为此,我将下载 100 个热门图表作为结构化表格,并创建自定义指标来量化这些趋势以及更多内容。
探索性视觉效果
Billboard Hot 100 于 1958 年 8 月首次发布,因此在这次分析中,我的数据包括了 1959 年至 2019 年(不包括 1958 年和 2020 年这两个不完整的年份)每年的每一周——特别感谢 Chris Guo 的 API 。
(图表由作者提供)
随着时间的推移,进入前 100 名的不同艺术家的数量正在减少,这意味着争夺热门 100 名的流行歌星的舞台每年减少大约三个。对于超级巨星来说,这个市场已经成熟,他们可以发行更多的歌曲,同时减少同行的排挤。
(图表由作者提供)
流行音乐在 60 年代末经历了多样性的顶峰,并在 2001 年稳步下降到重复性的顶峰(巧合的是,那一年 Napster 正处于流行的顶峰并被关闭)。自 2001 年以来,宋综艺上的热度有所上升,但仍没有 60 年代那么高。
(图表由作者提供)
另一个相当重要的指标是一首歌首次进入热门 100 强时的周转时间。在 90 年代和 00 年代初,歌曲首次亮相时会有很长的首演片段。快进到 2010 年,大多数歌曲都会在排行榜上停留一两周,然后反弹。
虽然中位数确实描述了大多数情况,但离群值仍有打破这一标准的空间。以下是 2010 年的一些主要外围案例:
沿着记忆之路走一趟……(图片由作者提供)
有如此明显的异常值,平均出道时间怎么会是两周??我认为这些数据支持了一个现实,即有几个艺术家发行了大量的音乐——其中大部分不会持续很久,但那些坚持下来的歌曲会持续很久。谁能忘记席洛·格林和布鲁诺·马斯在排行榜上几乎长达一年的统治!
(图表由作者提供)
随着越来越少的艺术家登上排行榜,这些艺术家中的每一个人每年都会创作 1.5 到 2 倍的歌曲,并在 2018 年爆发。比较 1965 年和 2018 年间最多产的 5 位艺术家:
披头士和德雷克在同一年发行了他们的第五张录音室专辑(图片由作者提供)
“救命!”甲壳虫乐队的(1965)包含了专辑中的 14 首歌曲,而德雷克的“蝎子”(2018)包含了 25 首歌曲,这 25 首歌曲都进入了当年的前 100 名。专辑越来越长这个话题已经被广泛研究过,安德鲁·梅斯就这个话题写了一篇文章:
到目前为止,2018 年一直被看似无止境的大型说唱唱片所主导,这些唱片有着令人生畏的长曲目列表和…
pitchfork.comS](https://pitchfork.com/features/lists-and-guides/are-rap-albums-really-getting-longer/)
流媒体时代伊始,Billboard 开始将专辑中的歌曲作为热门 100 首销售报告的单曲,因为它们可以在 Spotify、Apple Music 和 Tidal 等平台上点播。这与 20 世纪形成了鲜明对比,在 20 世纪,单曲报道主要来自电台广播。如今,鲜为人知或被抛弃的歌曲更有可能登上排行榜。像德雷克这样的艺术家拥有压倒噪音的音量,流媒体时代注定会有流行歌星打破 LP 和 CD 时代艺术家的单曲记录。
新音乐季节性趋势
除了解决空前的单曲唱片的问题,我还想以历年来发行音乐的最佳和最差时机的分类来结束我的分析。传统智慧和音乐营销博客规定了一些关于发布音乐的规则:除了节日音乐,不要在 12 月发布,不要在 SXSW 期间发布,等等。但我想看看哪些月份实际上发行了最多的新音乐,以及随着时间的推移这种情况是如何变化的。(点击放大)
(图片由作者提供)
一月、二月和九月一直是发行音乐的糟糕月份,而十月和三月(SXSW 发生时)通常是新音乐的好月份。六月、十一月和七月似乎是“还可以”的月份,其余的月份噪音太大,无法得出可靠的结论。
最后的想法
与 20 世纪相比,在 2020 年以新艺术家的身份发行音乐是一种完全不同的体验。那些日子的一些守门力量已经被社交媒体、YouTube 和我们所知的互联网所回避。然而,算法、播放列表和数字广告等新时代的把关者继续以独特的方式影响着这个行业。总而言之,这些力量的影响似乎正在缩小新音乐人的机会,但我相信,随着音乐收入恢复到昔日的辉煌,新艺术家成名的机会将会增加。
感谢检查我的分析!要了解我是如何从原始的 Billboard 图表变成你上面看到的指标的,请查看我对这个项目的 GitHub repo 。
希尔顿酒店评论 NLP 分类器
遵循 CRISP-DM 框架的详细项目报告。包括工作演示应用程序。
在这篇博客中,我将回顾我是如何通过为希尔顿酒店评论的 NLP 项目实现一个神经网络模型来改进我的分类器的。我的模型旨在使用情感分析,可以对评分在 1 到 5 分之间的评论进行分类。
这是我项目的 Github 链接:www.github.com/awesomeahi95/Hotel_Review_NLP
我会回顾我项目的目标、过程和结果。
我的项目的商业案例:
如今,公众对产品和服务的讨论和评论已经超越了专门的媒介,现在也出现在社交媒体领域。
目前在 tripadvisor、trustpilot 和 expedia 上可以找到希尔顿酒店的在线评论。大多数评论者给出的分数在 3 到 5 之间,因此,如果一个新客户在前面提到的任何评论网站上浏览在线评论,他们可能会考虑在希尔顿酒店预订房间。
如果他们在听完朋友的话后就已经下定决心了呢?潜在客户的酒店选择可能会受到一条推文的影响。观点不断在社交媒体平台上分享,并被其追随者阅读。通过阅读这些在线帖子,了解这些关注者对我们酒店的看法,可以帮助我们更好地了解公众对我们酒店的看法。
通过使用情感分析,基于 Tripadvisor.com 现有的酒店评论,我创建了一个模型,该模型可以在 1-5 的范围内量化 twitter 上的推文或 reddit 帖子的作者对我们酒店的感受,以及读者对我们的看法。如果评论分类低于 3 分,可以调查这篇帖子/推文,找出他们对我们酒店有负面看法的原因,并解决问题。
Tripadvisor 上的点评示例:
伦敦盖特威克希尔顿酒店 1 星评价
通过阅读文本,人类可以相对容易地对以上评论的分数(在某种程度上)进行分类。我们习惯于从另一个人使用的词语和上下文来理解他对一个话题的感受。
对于一台计算机来说,既要解释人的观点,又要理解人的情感,需要几个阶段:
- 将单词分解成它们的词根形式:
综述(原文/词干/词条)
使用词干化和词尾化这样的技术,把恶心和厌恶这样的词分解成一个词根,厌恶。
- 标记化:
使用正则表达式将句子分解成单词,没有标点符号。
- 删除停用词
像“我”、“他”、“和”等词是最常见的词,可能会影响其他词的值,所以我们删除这些词。至于我的项目,那是以酒店为导向的,我也删除了诸如“酒店”、“房间”和“机场”等常用词。
- 矢量化
(这是最不人性化的一步)
在建模的初始阶段之前,我有两个选择:计数矢量化(单词袋)和 TF-IDF 矢量化。这两种方法都将词频作为通用度量,尽管 TF-IDF 也将词频与整个语料库进行比较,以获得更有意义的度量。
我决定在我的项目中使用 TF-IDF 矢量化。所以我的 lemmatised 评论专栏从这个开始改变了:
对此:
因此,现在一篇评论由一个与我的评论语料库中最常见的 138 个单词相关联的奇异值来表示。
我对我看到的零的数量不太满意,尽管这很有意义。
- 建模和测试
机器学习阶段。在这里,我试验了 5 种分类算法和 5 种集成方法,都进行了一些超参数调整。要了解更多细节,请查看我在博客开头分享的 Github 回购链接中的第三个笔记本。
这些是我的结果:
模型训练阶段的训练和验证准确性
模型测试阶段的训练和测试(在验证准确性栏中)准确性+每个分数的额外指标
我选择了 Stacking(逻辑回归和逻辑回归的 Adaboost 的集合)模型,因为它具有相当好的训练精度和合理的验证精度。你可能会想,这些精度在 0.5 到 0.6 的范围内,肯定不是很好。好吧,考虑到这是一个 5 向多类分类,随机选择一个并且正确的几率是 0.2。此外,这些都是主观分数,即使是人也很难选择正确的分数。用混淆矩阵可以更好地说明这一点。
你可以看到大多数时候模型预测正确的分数,用斜线表示。我们看到的大部分误差(准确度在 50–60%范围内)来自相邻的分数,例如,预测分数为 1,但实际分数为 2。我对此很高兴,因为这个模型仍然足够好,可以区分优秀的评论、一般的评论和糟糕的评论。
在这一点上,计算机可以解释输入的文本,并多少理解其中的含义。
我想要更好的。
为什么不让它更人性化呢?神经网络的设计类似于我们大脑中神经元的功能,所以这可能是我可以做出的改变,以改善我的模型。
- 神经网络
在创建我的神经网络模型之前,预处理有点不同。
我创建了一个字典,其中的关键字是单词,语料库中所有独特的单词,以及值,即与每个独特的单词相关联的数字。我还添加了 4 个特殊键,用于填充、开始复习、未知单词和未使用的单词。我在字典里总共有 17317 个词条。这来自 9405 条评论。
word_index_dict['<PAD>'] = 0
word_index_dict['<START>'] = 1
word_index_dict['<UNK>'] = 2
word_index_dict['<UNUSED>'] = 3
预索引:
索引前的审查
索引后:
索引后的评论
作为最后的预处理步骤,我添加了一个填充层,最大长度为 250 个单词。然后我训练了模型。
- 神经网络架构:
所用神经网络模型的架构
这里 NLP 的特殊层是嵌入层。
单词被映射到向量空间中的向量,在我的例子中是 16 维向量。这一次,每个单词都有一个基于其周围单词的向量,即上下文。矢量化不同于之前的 TF-IDF 矢量化,我们不只是关注基于频率的指标,而是实际关注每个词在给定上下文中的影响。
这越来越像人类了。
现在,像好、好、坏、更坏这样的词有了一些更有意义的数字(向量)与之相关联。可以测试该模型的新评论不仅包含这些单词,还包含围绕这些单词的单词,这些单词更好地描述了评论作者试图表达的内容。这种情况可以用更多的数据来更好地解释,但目前的 9405 审查将做得很好。
- 测试神经网络模型
该模型的测试精度达到了 0.5710 ,优于我们之前模型的精度 0.5077。因此,我们有了 7%的改进,这是非常显著的,但观察这种 5 向多类分类的最佳方式还是通过查看混淆矩阵。
神经网络模型测试数据混淆矩阵
如您所见,该模型没有将评分为 5 的评论预测为 1,反之亦然。其他错误分类的分数有所改善,大多数预测更接近中间对角线。
- 应用
我用 Streamlit 和 Heroku 设计了一个模型的演示应用程序,你可以在这里试用:www.hilton-hotel-app.herokuapp.com/
待改进:
- 使用更大的训练数据集
- 尝试更深层次的神经网络
- 将分类的复杂性降低到二元分类
- 实施其他预制的矢量化方法— word2vec 或 GloVe
基于 Hotelling-T 的偏最小二乘变量选择
本文旨在探索基于 Hotelling-T 变量选择的偏最小二乘模型的高维光谱数据。
图片由本·哈里特拍摄
背景
O 光谱数据建模中最常见的挑战之一是从与响应变量相关的大量变量中选择一个变量子集(即波长)。对于光谱数据来说,相对于观测值的数量而言,具有大量变量是很常见的。在这种情况下,选择较少数量的变量是至关重要的,特别是如果我们希望加快计算时间并提高模型的稳定性和可解释性。通常,变量选择方法分为两组:
基于过滤器的方法:选择最相关的变量作为独立于预测模型的预处理步骤。
基于包装器的方法:使用监督学习方法。
因此,任何基于 PLS 的变量选择都是一种包装方法。包装器方法需要一个选择标准,该标准只依赖于手头数据的特征。
方法
让我们考虑一个回归问题,假设响应变量 y ( n × 1)和预测矩阵X(n×p)之间的关系可以用线性模型y=βX来解释我们的数据集由来自各种植物材料的 n = 466 个观察值组成,并且 y 对应于每种植物的钙(Ca)浓度。矩阵 X 是我们测得的 LIBS 光谱,它包括 p = 7151 个波长变量。因此,我们的目标是找到对 Ca 含量具有令人满意的预测能力的 X 的一些列子集。
ROBPCA 建模
让我们首先执行稳健的主成分分析( ROBPCA )来帮助可视化我们的数据,并检测是否存在不寻常的结构或模式。获得的分数由下面的散点图显示,其中的省略号代表霍特林 T 的 95%和 99%置信区间。大多数观察值低于 95%置信水平,尽管一些观察值似乎集中在分数散点图的右上角。
ROBPCA 得分散点图。
然而,当更仔细地观察时,例如使用异常值图,我们可以看到最终只有三个观察值似乎会造成问题。我们有两个观察被标记为正交异常值,只有一个被标记为坏的杠杆点。一些观察被标记为良好的杠杆点,而大多数是常规观察。
ROBPCA 离群图。
PLS 建模
值得一提的是,在我们的回归问题中,由于 n ≪ p ,普通最小二乘(OLS)拟合是不可选择的。PLS 通过搜索一小组所谓的潜在变量(LVs)来解决这个问题,潜在变量执行对 X 和 y 的同时分解,约束条件是这些分量尽可能多地解释 X 和 y 之间的协方差。下图是从 PLS 模型中获得的结果。我们获得的 R 为 0.85,RMSE 和平均相对误差分别为 0.08 和 0.06,这相当于平均绝对百分比误差(MAPE)约为 7%。
观察图与预测图(完整数据集)。
残差图(完整数据集)。
与 ROBPCA 异常值图类似,PLS 残差图标记了三个显示高标准化残差值的观察值。检查异常值的另一种方法是从 PLS 模型中计算 Q 残差和 Hotelling T,然后定义一个标准来判断某个观察值是否为异常值。高 Q-残差值对应于模型不能很好解释的观察,而高霍特林 T 值表示远离常规观察中心的观察(即得分= 0)。结果绘制如下。
q 残差与霍特林 T 图(完整数据集)。
基于 Hotelling-T 的变量选择
现在,让我们从我们的 PLS 模型中进行变量选择,这是通过计算 T 统计来进行的(有关更多详细信息,请参见 Mehmood,2016 ),
其中 W 是负载权重矩阵, C 是协方差矩阵。因此,基于以下标准选择变量,
其中 A 是来自我们 PLS 模型的 LV 数,1-𝛼是来自 F 分布的置信水平(𝛼等于 0.05 或 0.01)。
因此,从我们原始数据集中的 7151 个变量中,只有 217 个是基于上述选择标准选择的。观察到的与预测的图显示如下,以及模型的 R 和 RMSE。
观察与预测图(选定变量)。
在下面的结果中,标记为异常值的三个观察值已从数据集中删除。平均绝对百分比误差为 6%。
观察图与预测图(选定变量,剔除异常值)。
残差图(选定变量,剔除异常值)。
摘要
在本文中,我们使用偏最小二乘法成功地执行了基于 Hotelling-T 的变量选择。与使用具有完整数据集的模型相比,我们获得了所选变量数量的巨大减少(-97%)。
使用家庭助理的家庭自动化
我采用开源和隐私优先的家庭自动化系统的旅程
为什么选择家庭自动化?
我一直想用科技。它可以让我们的生活更轻松,也可以让我变得懒惰。🙂十几岁的时候,我的卧室拥有极致的奢华:天花板上有一台液晶显示器,可以看电影、听摇滚音乐会、玩电脑游戏,甚至不用坐起来。
当我和妻子去年买了我们的第一套房子时,我知道我想享受一些高质量的家庭自动化。我心中的工程师要求一个系统:
1.开源
2。注重隐私的
3。面向快速设置和用户友好的定制
4。当我想编码和开发定制特性时,让我得到引擎盖下面
家庭自动化软件选项
会有这样的系统吗?我在网上做了大量研究,评估了许多私有云自动化系统。最终,我找到了名为家庭助手的完美搭档。
Home Assistant 不仅是一个隐私第一的开源家庭自动化系统,而且它还有一个由出色的人组成的伟大社区,他们为大量流行的智能设备构建并支持强大的集成。作为一个刚刚尝试家庭自动化的新用户,这对于我来说是一个巨大的优势。我根据家庭助理用户社区的建议和已经开发的集成插件投资了家庭自动化硬件。
我意识到,与硬件和现有集成一样重要的是,运行 Home Assistant 的服务器也同样重要。
家庭助手靠什么运行?
家庭助理在 Raspberry Pi 或本地服务器上运行。我从 canakit 买了一个树莓 Pi 4 入门套装。
我把它连接到我的路由器的以太网上,并安装了来自这个来源的 Hassio。
Hassio 仅在 Pi 上运行家庭助理软件,允许软件充分利用其资源。没有其他软件的竞争,它可以全天候运行。我还采取措施,在一个自定义端口上安全地将我的 Hassio 实例暴露给 web,并启用双因素身份验证和 https 来建立到它的安全连接。
灯光和运动传感器:
我和妻子开始购买智能 LED 灯,作为迈向自动化的第一步。我们需要一套照明系统,能够根据我们不同房间的需求自动开关。我们还希望柔和的灯光帮助我们在漫长的一天后放松下来,醒来时没有刺眼的强光。我研究了好几个系统,最后选择了飞利浦 Hue。飞利浦系统有各种尺寸的灯泡和一个将它们连接在一起的集线器。诚然,市场上有更便宜的智能灯选择,我觉得我们在价格和性能之间做出了最好的决定。Hue hub 通过局域网连接,没有必要将 hub 暴露在互联网上,除非您想用智能手机启用地理围栏(稍后我会详细介绍)。我还买了几个飞利浦 Hue 运动传感器,放在我们家的重要位置,与灯光配合得非常好。我们告别了传统的墙壁开关,开始拥抱自动化。
我还想让我所有的户外灯在日落时亮起,在日出前熄灭。将飞利浦 Hue 中心与 Hassio 联系起来是有意义的。Hassio 有一个很棒的插件用于 node-red ,可以让你使用 GUI 拖放和连接流,快速直观地设置事件。我添加了插件的定时器功能,在适当的时候打开和关闭我的户外灯。维奥拉。我们的户外灯不再需要开关了。如果我想从运动检测器和定时器那里夺回控制权,Hassio 的 iPhone 和 Android 应用程序允许我远程控制飞利浦 Hub。
让我们谈谈安全:火警和一氧化碳探测器
我们和一只小狗和两只小鸟分享我们的家。去年,我们的邻居经历了一次短暂的恐慌,一次惊慌失措的下班回家,还有一个有故障的探测器,之后我们决定优先考虑烟雾和一氧化碳探测器的自动化。自动化还有一个额外的好处,即使你在旅行时也能知道家里发生了什么。
我认为,如果传统的烟雾和一氧化碳报警器不能向房子里的人或当地的消防和紧急救援人员发出警报,那么它们的作用是有限的。然而,你可能会得到误报,然后消防队会因为一片烤焦的烤面包而上门。这种缺乏精确性和控制的情况令人沮丧。经过一番研究后,我们选择了首款启用 Z-Wave 的电池烟雾报警&一氧化碳组合报警。感觉这是一个不错的选择,因为它们成本相对较低,而且还具有智能修改功能。
但是,它们无法直接连接到 Hassio。这些警报需要一个 z-wave 接收器连接到 Hassio,以接收警报并实时报告。我在有用的 Hassio 论坛上做了更多的研究,发现了非常容易集成的 Zoos Z-Wave S2u 盘。我所要做的就是将 USB 设备插入我的 Raspberry Pi,Hassio 会自动检测到它。在这之后,我不得不把我的第一个警报设备一次配对一个。诚然,这需要一些试验和错误,特别是为了将多个烟雾警报的名称映射到 z-wave 节点,并按位置正确标记它们。
这花了整整一个下午,但现在他们的工作没有一点瑕疵,定期报告他们的状态是空闲还是活跃。每个警报还报告状态的时间和它们当前的电池电量。这本身就是一个巨大的优势:当电池电量低时,不再需要猜测更换电池,并帮助我们知道这些设备正在频繁报告,而不是出现故障。我还在 node-red 中连接了通知服务,当探测器的状态从空闲变为火灾或一氧化碳警报时,它会向我发送电子邮件并在我的手机上提醒我。系统得到了一个很大的考验:我的妻子在做饭的时候不小心触发了警报。我当时在外面,马上就收到了手机警报。问题解决了!
下次警报发生时,我可以快速查看每个房间的运动传感器温度事件。如果是假阳性,我可以关闭警报。如果是真正的警报,无论我在地球的哪个角落,我都可以打电话给当地的消防部门。
室内和室外摄像机
受詹姆斯·邦德恶棍和他们超酷的骗子的启发,他们配备了多个摄像头的闭路电视录像,我决定投资一个强大的家庭安全摄像系统,供室内和室外使用。我想要的是能够检测运动、提醒我、记录信息、本地保存、尽可能少依赖云、便宜且易于集成的东西。易家居室内外摄像机无论是从预算上,还是从存储和检测上,都符合要求。他们可以让你在每台相机的 SD 卡上存储大量的视频。它们还具有夜视功能,能够全天候进行运动检测。我花了一段时间安装室外的。他们需要有线电源,需要一段时间来确定安装它们的最佳位置。这是值得的规划:我设法涵盖了我家的所有角落。
我计划在未来通过 Hassio 创建更多带警报的智能报告,但这是坚实的第一步。一些额外的室内摄像头有助于监视小鸟和小狗,确保它们安全,不会在我们不在的时候搞什么恶作剧。这里的外卖?只是更安心。
主场与客场模式的 Hassio 设置
Hassio 的智能手机伴侣应用程序可以让您通过网络安全地从您的设备向 Hassio 家庭服务器报告您的位置。通过应用程序设置这一点非常容易。它与 Hassio zones 配合得很好,Hassio zones 是一种地理围栏,可以让您跟踪设备的位置。我将我和我妻子的手机与 Hassio 配对,并在 node-red 上设置流程,以可靠地跟踪我们的设备。我启用了一个变量,当我们中至少有一个人在家时,该变量设置为 Home。如果我们都不在,它会设置为离开模式。
这种主场对客场的检测真的为许多额外的自动化打开了大门。例如:我们不希望运动传感器在我们不在的时候打开室内灯,如果我们的狗把灯打开了。我们希望当我们都不在家的时候,如果忘记关门,车库门会自动关闭。如果我们离开超过一定的时间阈值,假期模式应该自动激活,在晚上随机开灯,模拟人们在家,等等。自动化的可能性只受到你的想象力的限制!
时差通知
我一直很喜欢 Slack 的通知功能,并在工作中广泛使用。Hassio 应用程序有通知功能,但与 Slack 相比,它们没有那么丰富和详细。我想要一个更详细的通知系统,通过一个我通常会静音但想浏览时会浏览的频道实时通知我家里发生的任何事情。我还希望我妻子和我需要知道的一天中家里发生的重要事情有一个最小限度的通知。当然,还有用于紧急警报通知的红色警报频道。幸运的是,一位好心人在 Hassio 社区发布了这篇内容丰富的文章,满足了我所有的通知需求。Slack 也有一个功能有限的免费帐户,对于我的用例来说已经足够了,所以我设置了通知,它们工作得很好,很可靠!
结束语
经过几个月的家庭自动化集成,我意识到这是一个无止境的追求。我未来打算整合的一些例子有:想办法把我的智能洗衣机和 Hassio 连接起来,在我上班的时候继续报告洗涤进度;更智能的运动检测,适用于厨房、浴室风扇、燃气壁炉、喷水系统和类似的自动化设备。我已经投资了 MyQ Chamberlain 车库门系统,我可以将它与各种警报和自动化系统连接起来。专注于隐私的语音集成系统迈克罗夫特在本地运行,提供了优于 Alexa 或谷歌家庭云助手的优势。
我知道我可以继续投资硬件,并在家里找到更多自动化的东西,但在某些时候,你开始怀疑这是否值得。对我来说,我觉得这是一个有趣的附带项目,但我可以说这种方法并不适合每个人,除非他们愿意弄脏自己的手,花时间将东西组装在一起并进行故障排除。最终,我明白了这是一场马拉松,而不是短跑。我一直在缓慢而稳步地实现我的家庭自动化愿景。
如果你喜欢这篇文章,并想和我谈谈你已经计划或完成的其他有趣的家庭自动化想法,请在 LinkedIn 上与我联系,我很高兴听到你的想法并讨论家庭自动化项目。
自然灾害多发地区的房价预测(一)
第 1 部分:探索性数据分析(EDA)
介绍
加州以地震闻名,大地震早就该来了。在 1989 年的洛马普列塔地震中,世界见证了液化能做什么,因为码头区的街区变成了瓦砾。一些房产位于断层线上,比如在南纳帕被破坏的房产,断层线穿过这些房产。当地面在地震中裂开时,它对建筑物和公用事业线路的破坏远远超过了震动所能造成的。
除了地震灾害,2018 年的野火肆虐了超过 120 万英亩的土地,摧毁了加州 1200 多所房屋。在北加州遭受破坏后,房地产市场发生了变化。
法律要求容易“搁浅”的房产向潜在买家披露可能改变买家决策的信息。此外,在交易开始之前,信息并不总是容易找到的。
问题陈述
给定一组房产详情和自然灾害属性,使用 Zillow 房产数据结合地震、滑坡和火灾等自然灾害数据,预测圣何塞市的中值房价。主要目标是找到圣何塞市房价贡献的主要属性。
数据收集和数据争论
最初的挑战是获取不容易获得的数据,如 Kaggle 网站或其他一些网站的数据提取。在使用不同的数据争论技术从各种来源提取数据后,下一个挑战是使用 python merge & append 方法合并不同的数据框,并形成单个可分析的数据框。在下一节中,将详细讨论数据收集和数据争论方法。
数据源
住房数据
收集了圣何塞市的 Zillow 财产数据。使用 python 和 Web 抓取包(如 selenium 和 BeautifulSoup)来访问 Zillow 属性数据。
自然灾害数据
断层带、滑坡、液化和火灾等自然灾害数据从以下来源收集:
数据收集
来自 Zillow 的住房数据
Zillow 网站 API 在从 Zillow 提取数据方面存在固有的限制。另外, Zillow API 没有下载邮政编码/城市数据的规定。因此,我们决定对圣何塞不同邮政编码的待售和待售(按代理、按业主、新建、止赎、即将推出)的单户房产和联排别墅的以下字段进行网络搜集。提取纬度、经度、地址、邮政编码、卧室、浴室、平方英尺、地段大小、建造年份、价格、销售类型、zestimate、销售日期、销售天数、房屋类型、url。
编写了 Python 代码,它导入 Selenium 和 BeautifulSoup 包来抓取我在圣何塞所有邮政编码的 Zillow 特性。下面是从 Zillow 收集的样本数据。
来自 Zillow 的样本抓取数据
地震危险区数据
编写 Sql 代码以从加州地质调查局(CGS)的地震风险数据 web 应用程序中提取数据。但问题是,CGS 使用 sql 查询一次只能检索 1000 行的所有属性。决定只使用 python 程序获取对象 id,然后使用这些对象 id 获取实际的行。使用 python 请求和 json 包,所有提取的数据都存储在 csv 文件中。数据帧中的全部特征和属性:261195 & 7。
地震危险区域图
来自 CGS web 应用程序的地震风险数据示例
断层带、液化带和滑坡带柱值根据以下条件转换为 0,1,NA:
若液化区:
位于液化区内= 1
CGS 未对液化危险进行评估= NA
不在液化区= 0
如果滑坡带:
位于滑坡区= 1
CGS 未对地震滑坡危险进行评估= NA
不在滑坡区= 0
如果断层带:
位于地震断裂带内= 1
不在地震断裂带内= 0
未被 CGS 评估= NA
如上所述转换特征后,样本地震危险数据以 csv 格式存储,如下所示。
格式化地震危险数据示例
火灾危险严重区域数据
火灾数据以 pdf 格式提供。圣何塞市属于火灾危险严重区的面积非常有限。仅在火灾危险严重区域手动提取地块编号和地址。总特性和属性:53 & 6。火灾危险严重区域图和样本输出数据如下所示。
非常高火灾危险严重区域
数据争论
合并数据帧
收集 Zillow 属性、地震风险和火灾风险数据后,下一个挑战是合并所有数据框。以下步骤用于合并:
- 基于“地址”列的 Zillow 属性和地震危险性数据被合并。然后在合并的数据框中添加了“火灾”列。
- 火灾和地震危险数据根据“地址”栏合并。
- 上述第一合并数据帧被附加到第二合并数据帧。
合并数据帧信息
处理重复
根据包裹编号和地址,重复的包裹被丢弃。在 13993 行中,删除重复项后获得了 13617 行。
更正格式
- 注意到价格列类型是 object 而不是 integer。价格列被报告为售出:$ — M。使用剥离法去除文本并将单位 M 转换为美元。
- 人们还注意到,在地址一栏中,很少有房子的名称是 UNT 公寓号。但被列为单户住宅。对于地址栏中提到的 APT,UNT #的房屋类型已更改为联排别墅。
- 售出价格为 2016 年至 2019 年。为了使销售价格正常化,根据一段时间内 Redfin 销售价格中值的变化,将销售价格调整为当前价格。
一段时间内的中等销售价格变化(圣何塞)
纠正数据中的错误
- 很少有房产的售价很低或很高。它还与 Redfin 和 Trulia 等其他网站进行了交叉检查,并替换了这些值。36 处房产被替换为正确的售价和出售日期。
- 很少有房产低于 100,000 英镑,这些房产是在非 arm 交易类型下出售的。这些都不是房地产价格。因此,我们决定通过找出 Zestimate 和调整后销售价格之间的百分比差异来删除这些数据。根据频率分布图,决定删除价格差异百分比超过 38%的物业。
更正数据类型
售出日期格式已从对象类型转换为日期时间。
处理缺失数据
- Year _ built 列被替换为 median。
- 零数的卧室被移除。考虑大于或等于 1 的卧室。工作室没有被考虑。
- 没有卧室,浴室和平方英尺细节的财产被删除。
- 丢失的 sqft 属性已被删除。
- 对于缺失的卧室和浴室,基于排序的 sqft 值使用了 ffill 方法。
- 缺失的批量用中间值填充。
- 销售日期分为月份和年份,以便进一步探索性分析。
- 除了 Zestimate 和 Zillow 上的 days 之外,所有缺少的值都被处理。
处理异常值
- 绘制标准化价格箱图是为了查看数据中的异常值。在 Zillow 发现了一个超过 30 米的房子,并进行了检查。这是错误的数据。它已从数据中删除。
- 同样,很少有房子超过 4 米,如下图所示。它还与 Zillow 进行了交叉检查,发现其中一所房子不是独栋住宅。它已从数据中删除。
- 遵循以下程序移除异常值:
- 计算数据的四分位数范围。
- 四分位距(IQR)乘以数字 1.5。
- 第三个四分位数增加了 1.5 倍(IQR)。任何大于这个值的数字都被怀疑为异常值并被删除。
- 从第一个四分位数减去 1.5 x (IQR)。任何大于这个值的数字都被怀疑为异常值并被删除。
箱线图(调整后的价格)
探索性数据分析
收集数据后,对数据进行辩论,然后进行探索性分析。我想到了以下问题,并对这些问题进行了探索性分析。
- 单一家庭和联排别墅中自然灾害房屋的地理空间可视化
- 独户和联排别墅最常见的特征(卧室、浴室、年份、液化、断层带、滑坡、火灾)
- 单户家庭和联排别墅价格区间的住房数量分布
- 单户家庭和联排别墅的卧室、浴室和带价格箱的平方英尺的中位数
- 液化,断层带,滑坡,火灾危险与价格箱在单个家庭和联排别墅
- 各种邮编、单户住宅和联排别墅危险和非危险的销售价格分布
- 出售独栋和联排别墅的最佳月份
- 最受欢迎的邮政编码销售单家庭和联排别墅
- 2016 年至 2019 年出售的独栋和联排别墅的数量
- 自然灾害对销售价格的影响
- 危险和非危险房屋的中值价格/平方英尺
- 施工年度的价格趋势中值
- 液化、滑坡、断层带、火灾对单户住宅和联排别墅价格的影响
- 人们对危险地区房屋的评论
- 功能和价格之间的关联图
- 影响房价预测的特征
哪里是危险易发区?城市中最常见和最不常见的危险是什么?它们在城市中是如何分布的?
在深入数据分析的数字部分之前,我们进行了地理空间分析,以观察城市中最常见和最不常见的危险是如何分布的。树叶和底图包用于绘制这些地图。以下是单户家庭和联排别墅的地理空间分析结果。
断层带分布点聚集在东圣何塞陆地和山脉之间。
断层带分布图(单户住宅)
断层带分布图(城镇住宅)
滑坡带分布点沿山脉东侧堆积。
滑坡分布图(单户住宅)
滑坡分布图(城镇住宅)
液化是最常见的灾害,在城市中广泛分布。
液化分布图(单户住宅)
液化分布图(城镇住宅)
液化区是圣何塞最常见的灾害,当它与滑坡结合在一起时,甚至更糟。
液化和滑坡分布图(单户住宅)
在收集的数据点中,没有滑坡、液化和滑坡的复合危险。这些是收集的点,而不是圣何塞的全部分布。经过地理空间分析后,我们决定在每个要素类别中调查房屋数量。用分组数据绘制条形图,以查看数据的分布。
有多少间卧室最受欢迎?
“带房屋数量的卧室数量”柱状图的分布显示,对于独栋和联排别墅,最受欢迎的卧室数量为 3。
卧室 vs 计数(单户住宅);卧室与数量(联排别墅)
有多少间浴室最受欢迎?
“带房屋计数的浴室数量”柱状图的分布显示,最受欢迎的浴室数量是独栋住宅 2 个,联排住宅 3 个。
浴室 vs .计数(单户住宅);浴室与柜台(联排别墅)
哪个邮政编码受买家欢迎?
在 30 个邮政编码中,有十几个邮政编码同样适用于单户住宅。对于联排别墅,8 个邮政编码更受欢迎。
邮政编码与房屋数量(单户住宅);邮政编码与房屋数量(联排别墅)
哪一年建造的最常见?
“房屋建造年份”柱状图的分布显示,对于单个家庭来说,最常见的建造年份是 1959 年。对于联排别墅,大多数建于 1988-1973 年和 2005-2008 年。
建造年份与房屋数量(独栋和联排别墅)
哪个月卖房比较热门?
“出售房屋数量的月份”柱状图的分布显示,对于独栋和联排别墅来说,出售房屋的最佳月份是 5 月至 8 月。这是因为,在暑假期间,大多数人计划搬迁。
月 _ 销售与房屋数量(独栋和联排别墅)
哪一年房子卖得最多?
“year _ sold with house count”条形图的分布显示,大多数房屋是在 2018 年(独栋)和 2016–2018 年(联排别墅)售出的。
年 _ 销售与房屋数量(独栋和联排别墅)
哪种危险最常见?
“危险与房屋数量”柱状图的分布表明,在独栋和联排住宅中,许多房屋都容易发生液化。
危险与房屋数量(独栋和联排住宅)
有多少不同价位的房子?
Price_bin vs count(独栋和联排别墅)
不同价位的房间有多少间?
Price_bin vs 中值卧室(独栋和联排别墅)
各种价位的卫生间有多少个?
Price_bin vs 中值浴室(独栋和联排别墅)
在各种价格箱中,哪种平方英尺中位数是常见的?
Price_bin 与中位数平方英尺(独栋和联排别墅)
哪些价格范围的房屋处于液化区?
Price_bin vs 液化(独栋和联排住宅)
哪些价格范围的房屋处于滑坡地带?
Price_bin vs 滑坡(单家)
不同邮政编码、危险区和非危险区的价格分布
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图清楚地显示了自然灾害对房价的影响。例如,与非液化区相比,易液化区的价格较低(在第四个地块中)。同样,断层带区域的价格低于无断层带区域(在 6 号地块)。但是对于滑坡区域(在第 5 个地块)这是矛盾的。滑坡地区主要在山区。这表明人们在买房时更喜欢壮观的景色,而不是滑坡的危险。更多细节将在后续章节中介绍。
自然灾害(液化)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究液化对价格的影响,在价格/平方英尺相同的附近邮政编码中分析了相同数量的危险和非危险房屋。为此,考虑了有液化危险的邮政编码 95116 和无液化危险的邮政编码 95127。低于中间值的表格表明易液化房屋的销售量低于非液化地区。下表列出了每个邮政编码的街区名称。
自然灾害(滑坡)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究滑坡对价格的影响,在附近具有相同价格/平方英尺的邮政编码中,分析了相同数量的危险和非危险房屋。为此,考虑了有滑坡危险的邮政编码 95138 和没有液化危险的邮政编码 95135。低于中间价格值的表格表明易滑坡房屋的售价高于非滑坡地区。这表明人们在买房时更喜欢壮观的景色,而不是滑坡的危险。这里包含了来自 95138 社区的评论样本,显示了人们对这个社区的看法。
“安全友好。开放空间附近,包括公园、山麓和小路。好的小学,初中&高中。非常靠近常青谷学院。合理的杂货店购物。好餐馆刚刚开始出现。”
“很棒的小区,很好的学校,很安全的高档小区。步行即可到达杂货店、牧场高尔夫俱乐部。
自然灾害(断裂带)对价格的影响是什么?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究断层带对价格的影响,在价格/平方英尺相同的附近邮政编码中分析了相同数量的危险和非危险房屋。为此,考虑了有故障风险的邮政编码 95127 和无故障风险的邮政编码 95140。低于中间值的表格表明易受故障危害房屋的销售量低于非故障危害地区。
自然灾害(火灾危险区)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
在所有邮政编码区出售的房产都没有火灾隐患。绘制散点图,以查看单户家庭和联排别墅的平方英尺与价格的分布。
每个邮政编码的价格分布是怎样的?
价格分布条形图(单一系列)
价格分布条形图(联排别墅)
每年建造的价格分布是怎样的?
价格分布条形图(单户住宅)
价格分布条形图(联排别墅)
所有特征的条形图分布
条形图分布
地理空间框架中的价格分布
地理空间框架中的价格分布
上图显示了圣何塞西部和南部的高价格。最南端的价格最高,因为它靠近桑尼维尔和圣克拉拉的科技公司。上面生成的图与 Trulia 观察到的价格市场趋势图一致。
散点图分布
卧室数量与价格呈正相关
浴室数量与价格呈正相关
sqft 显示与价格正相关。
批量与价格呈正相关
建造年份与价格呈弱负相关
液化与价格呈正相关
滑坡与价格呈弱负相关
断层带与价格呈正相关
火灾风险和价格之间没有关联
售出月份与价格呈负相关
房型与价格呈正相关
邮政编码与价格呈正相关
平均价格条形图分布
平均价格分布
推断统计学
进行了假设检验,以检查建造年份、液化危险、滑坡危险、平方英尺、断层带危险、邮政编码、卧室、浴室、房屋类型、地块大小和价格之间是否存在显著相关性。对于这些测试,零假设被指定为没有显著相关性,而替代假设在特征之间具有显著相关性。如果假设检验的 p 值小于显著性水平 0.05,则无效假设将被拒绝,这表明存在相关性。卧室、浴室、平方英尺、地段大小、液化、断层带、房屋类型和邮政编码的 p 值小于 0.05,表明这些特征和价格之间存在相关性。其他特征如建造年份、出售月份、滑坡、p 值都大于 0.05,这表明这些特征与价格之间没有显著的相关性。
编码
第二部分:机器学习模型
自然灾害多发地区的房价预测(二)
第 2 部分:机器学习模型
介绍
使用了不同的回归模型,即线性回归、决策树回归、梯度推进回归和随机森林回归。使用 R 对这些模型的性能进行了比较。基于这些性能得分,提出了性能更好的模型来预测房价。
首先,数据分为自变量 X 和因变量 y。自变量 X 用于预测目标变量 y。价格、id 和日期列从 new_df 数据帧中删除以创建变量 X。new _ df 数据帧中的价格列用于创建变量 y。不同的指标用于回归模型的性能,如均方误差、均方根误差、R 平方得分、平均绝对偏差、平均绝对百分比误差等。均方根误差和 R 平方分数用于评估回归模型的性能。为了保存模型的度量,创建了一个数据框,并将其命名为 metrics。接下来,数据被分成训练集和测试集。80%的随机选择数据作为训练集,20%的随机选择数据作为测试集。该模型使用 80%的数据进行学习,其余 20%的测试数据用作未知的未来数据集来预测房价。
使用默认参数构建线性回归模型,并使用训练数据集拟合该模型。X_test 数据用于使用模型进行预测。然后,计算均方误差(MSE)、均方根误差(RMSE)、R 平方得分(r2_score)、平均绝对偏差(MAD)和平均绝对百分比误差(MAPE)。
特征选择
采用特征选择的向后淘汰法。特征选择是选择可以提高模型性能的相关特征子集的过程。首先,要素中最差的属性被移除。date_sold_month 被删除,因为它与房价的相关性非常弱。然后,year _ built _ decade _ mapped 从功能集中删除。然后,尝试了来自 sklearn 库的名为选择测试的单变量特征选择包。以下是不同特征的相关系数。
使用 R2 评分比较特征选择与线性回归模型
使用 MAPE 评分比较特征选择与线性回归模型
比较所有不同的线性回归模型与特征选择,两个条形图表明,我们应该保留所有的特征,以更好地预测房价。
决策树回归
使用默认参数构建决策树回归模型,并在下面列出性能得分。示例决策树回归流程图如下所示:
决策树图表示例
梯度推进回归
使用默认参数建立梯度回归模型,并在下面列出性能得分:
随机森林回归
使用默认参数构建随机森林回归模型,并在下面列出性能得分:
如下所示的水平条形图比较不同回归量的 r2_score 和 MAPE。
使用 r2 得分比较不同回归模型的模型性能
使用 MAPE 评分比较不同回归模型的模型性能
根据 r2_score,梯度推进回归模型是表现最好的模型。对于该数据集,随机森林回归模型是性能第二好的模型。
根据平均绝对百分误差(MAPE),随机森林回归模型是表现较好的模型。梯度推进回归模型是表现第二好的模型。
超参数调谐
接下来,使用 GridSearchCV 调整模型的超参数,以提高模型的性能。GridSearchCV 是一种交叉验证方法,它允许我们使用一组我们想要在给定模型中尝试的参数。这些参数中的每一个都被用于执行交叉验证,并且最终保存模型的最佳参数。创建了一个新的 dataframe,并将其命名为 tuned_metrics,以保存优化模型的指标。的方法。get_params()用于查找模型的所有参数。对于线性回归模型,在 param_grid 中使用了“copy_X”、“fit_intercept”和“normalize”参数。param_grid 是一个字典,参数名作为键,参数设置列表作为值。使用 cv = 5,这是使用的折叠次数。我们可以使用 GridSearchCV 的 best_params_ attribute 来获得这个数据集的任何回归模型的最佳参数。使用 GridSearchCV 调整线性回归模型和决策树回归器模型。然后,使用 RandomizedSearchCV 调整梯度推进回归模型和随机森林回归模型。RandomizedSearchCV 有助于最大限度地减少计算时间,因为 GridSearchCV 对于梯度推进回归器和随机森林回归器都需要很长的计算时间。使用 RMSE 评分的不同回归模型的优化模型性能比较如下所示:
使用 RMSE 评分比较不同回归模型的优化模型性能
根据均方根误差,梯度推进回归模型是表现最好的模型,误差最小,为 147773。
使用 R2 评分比较不同回归模型的优化模型性能
根据 r2_score,梯度推进回归模型是表现最好的模型,得分最高,为 0.78。
使用 MAE 评分比较不同回归模型的调优模型性能
根据平均绝对误差(MAE ),梯度推进回归模型是表现最好的模型,误差最低为 113737。
使用 MAPE 评分比较不同回归模型的优化模型性能
根据平均绝对百分误差(MAPE),梯度推进回归模型是表现最好的模型,最低百分误差为 12%。所有指标都表明,梯度推进回归模型是该数据集的性能更好的模型。
摘要
梯度推进回归模型是一个很好的房价预测模型,因为它优于随机猜测,并且优于其他三个回归模型。随着更多数据的收集,该模型将来可能会得到改进。这里没有包括的许多其他回归模型也可以建立和尝试。对于未来的工作,我会推荐这个梯度推进回归模型来预测房价。
代码:
第 1 部分:探索性数据分析(EDA)
基于 Zillow 经济学数据集的房价预测
现实世界中的 DS
基于中等收入、学校数量、犯罪率、失业率、医院数量及其评级等因素的 XGBoost 和线性回归预测模型
我点击的照片—西雅图天际线
买房是人一生中的一个重大决定,需要相当多的思考和研究。人们希望以最好的利率和最小的风险购买一所房子,并希望这是对未来的最佳投资。各种在线网站、房地产经纪人和房地产经纪人试图通过让购房者比较可供购买的不同房屋来引导他们。
在本文中,我们将讨论一个用于房价预测的数据科学项目的结果。我们正在尝试使用机器学习算法 XGBoost 和线性回归来预测房价,考虑的因素包括一个县的中值收入、该县的犯罪率、公立学校、医院、医院评级和该县的失业率等。
该项目的目的是为寻找开发新公寓楼或购买新公寓的地方的国家房地产开发商、个人买家和银行提供美国最佳的投资县/区。另一个目标是预测某县未来几个月的房价。
未来几个月,给定邮政编码/县的房屋每平方英尺的预计价格是多少?我们能否根据 Zillow 提供的某个邮政编码/街区/县的犯罪率、学校和其他信息/指标来预测价格?
“2020 年是买房的好年吗?”以及“应该在哪里买房?”都是重要的问题。这个房屋预测项目试图借助各种来源的数据并考虑影响房价的因素来回答这些问题。
我点击的照片
此类项目的利益相关方包括:
a)客户和房地产经纪人-房地产行业长期以来一直按照自己的传统运营,但海量数据的可用性正在彻底改变该行业的工作方式。大数据分析技术正在创造一个新的房地产市场,在这个市场中,客户和代理商都比以往任何时候都更加知情。
Zillow 和 Trulia 等公司可以利用这种分析,根据当地学校、犯罪率、收入水平、医院等因素,计算房屋可能吸引的估计价格。并决定营销策略。
c)银行——不仅仅是消费者在使用大数据为他们的房屋买卖决策提供信息。银行还利用大量数据来预测特定抵押贷款申请可能带来的风险,使用的信息包括房屋价值以及申请人的财务状况和历史。此外,银行也在避免丧失抵押品赎回权和卖空的损失,因为大数据正在帮助他们预测市场可以承受的最大出售价值。
根据预测的房价,人们可以投资房地产,找到一个更适合他们需要的郡房子,在那里他们可以买房子。通过这个数据科学项目所做的预测,房屋买卖决策将变得更加容易。
用于本项目的数据
挑战
- Zillow 经济学数据集—很难从 Zillow 中找到合适的数据集进行处理,因为没有现成的描述。虽然数据字典是可用的,但它并没有指定 Zillow 经济学数据集中包含的每个数据集。没有关于各种 csv 文件及其相互关系的详细信息,也没有关于不同属性的详细信息。
2)不知道 FIPS、FIPS、FIPS 是什么,以及如何将其与县或邮政编码联系起来
3)为各种因素找到合适的数据集,如学校、犯罪率、收入水平、医院评级、失业率等。经过大量的搜索找到了可以在这个项目中使用的数据集。
4)收入水平数据集有邮政编码,但没有 FIPS 代码,因此我必须找到一个将邮政编码转换为 FIP 代码的解决方案。为此,我不得不搜索一个 FIPS 数据集,并将其与收入水平数据集合并。
5)收入水平数据集——探索并选择中等收入水平的适当属性用于项目
6)如何合并所有这些数据集,使其成为基于收入水平、犯罪率、学校、医院、失业率等因素预测房价的有用数据集。
数据故事和探索性数据分析
1。你应该在哪个州买房或租房?
根据 Zillow 排名,房价最高的州
Zillow 房屋价值指数( ZHVI )是一种平滑的、季节性调整的衡量标准,用于衡量特定地区和房屋类型的典型房屋价值和市场变化。
根据 Zillow 的估计,夏威夷是平均房价接近 40 万美元的顶级州。第二个最重视住房的州是哥伦比亚特区,平均房价为 35 万英镑。一些其他上端 ZHVI 州是加利福尼亚州,马萨诸塞州,纽约州,阿拉斯加州,华盛顿州,康涅狄格州,马里兰州和科罗拉多州。然而,问题是这些州的价格是如何随时间变化的?因为如果我们想在这些州中的一个买房子,我们需要知道价格是如何随时间变化的。
2。最贵州的房价变化
在物价最高的州,房价会随着时间的推移而上涨
根据该数据集,自 2010 年以来,夏威夷州、哥伦比亚特区和加利福尼亚州似乎都在竞相提高 ZHVI 的平均水平。与此同时,纽约和新泽西等其他高端州开始缓慢,并略有下降,直到 2012 年,价格似乎有所上升,纽约的加速略快于新泽西。另一方面,科罗拉多州在这张图表中持续上升,与康涅狄格州保持一致,在 2017 年约为 33 万。
3。租金最高的州
租金最高的州
4。不同州每平方英尺房屋价值中位数
可以看出,加州每平方英尺的房屋价值中值最高,威斯康星州最低。
5。Zillow 的每平方英尺估计价格
历年来每平方英尺的房价
我们来看看 Zillow 的每平方英尺预估价格。看起来房价在 2005-2008 年间上涨,在 2011-2012 年间下跌。
6。每平方英尺价格中位数的前 7 个州
这些是所有房屋每平方英尺挂牌价格中值最高的 7 个州
7。所有房屋每平方英尺挂牌价格中位数的后 5 个州
8。所有房屋的租金中值
从 2012 年到 2017 年,所有房屋的租金中位数都有所上升,但从 2010 年到 2012 年略有下降。
9。所有房屋的挂牌价格中位数
历年所有房屋的挂牌价格中值
从 2012 年到 2017 年,所有房屋的挂牌价格中值都有所上升,但从 2010 年到 2012 年有所下降。
XGBoost 和线性回归预测模型
为了使用 Zillow Economics 数据集构建房价预测模型,我使用了 County_time_series 数据,因为它提供了一个县中所有房屋的房价。预测房价的不同因素包括该县的收入中位数、犯罪率、公立学校、医院和医院等级、失业率。
我用过 XGBoost XGRegressor 和线性回归算法。
线性回归
监督机器学习算法有两种类型——回归和分类。前者预测连续值输出,而后者预测离散输出。例如,预测房子的美元价格是一个回归问题,而预测一封电子邮件是否是垃圾邮件是一个分类问题。用于机器学习的 Python Scikit-Learn 库用于实现线性回归。
线性回归是一种基本且常用的预测分析类型。回归的总体思路是考察两件事:(1)一组预测变量在预测一个结果(因变量)时是否做得很好?(2)哪些变量是结果变量的重要预测因子,它们是如何影响结果变量的——由β估计值的大小和符号表示?这些回归估计用于解释一个因变量和一个或多个自变量之间的关系。具有一个因变量和一个自变量的回归方程的最简单形式由公式 y = c + b*x 定义,其中 y =估计的因变量得分,c =常数,b =回归系数,x =自变量得分。
XGBoost
XGBoost 是免费的开源软件,可以在许可的 Apache-2 许可下使用。XGBoost 代表“极限梯度提升”,它是梯度提升机器的一种实现。XGBoost 是一种流行的有监督机器学习模型,具有计算速度快、并行化和性能更好的特点。
XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和可移植。XGBoost 提供了一种并行的树提升(也称为 GBDT,GBM ),可以快速准确地解决许多数据科学问题。相同的代码运行在主要的分布式环境(Hadoop、SGE、MPI)上,可以解决超过数十亿个例子的问题[11]。
XGBoost 库实现了梯度推进决策树算法。这种算法有许多不同的名字,如梯度推进、多重加法回归树、随机梯度推进或梯度推进机器。
Boosting 是一种集成技术,其中添加新的模型来纠正现有模型产生的错误。模型按顺序添加,直到不能再进一步改进。一个流行的例子是 AdaBoost 算法,它对难以预测的数据点进行加权。
梯度推进是一种方法,在这种方法中,创建新的模型来预测先前模型的残差或误差,然后将它们加在一起以做出最终预测。它被称为梯度提升,因为它使用梯度下降算法来最小化添加新模型时的损失。
这种方法支持回归和分类预测建模问题。
XGBoost 中的超参数
这些参数解释如下:
- objective ='reg:linear '指定学习任务是线性的。
- colsample_bytree 是构造每个树时列的子样本比率。子采样将在每个提升迭代中发生一次。这个数字的范围是从 0 到 1。
- learning_rate 是步长收缩,用于防止过拟合。这个数字的范围是从 0 到 1。
- max_depth 指定树的最大深度。增加该数值会使模型变得复杂,并增加过度拟合的可能性。默认值为 6。
- α是权重的 L1 正则化。增加这个数字会使模型更加保守。
- n_estimators 是要拟合的提升树的数量
使用的指标
- R 表示项(数据点)与曲线或直线的拟合程度。
- MSE - 均方误差
- RMSE- 均方根误差。它是 MSE 的平方根。
- 均方根对数误差(RMSLE) - 它只是一个以对数标度计算的 RMSE。实际上,为了计算它,我们取预测值和目标值的对数,并计算它们之间的 RMSE。
不同因素与房价的相关矩阵
矩阵中的相关值
结果:预测建模— XGBOOST 和线性回归
我合并了 8 个不同的基于 FIPS 码的数据集,构建了一个新的数据集,用于预测房价。我使用 Zillow 的 county_time_series 数据集来预测美国每个县的房价。
预测模型使用 80:20 的训练测试分割。
XGBoost
XGBoost 预测用两组超参数进行了测试。这两个结果都在这里。
XGBoost 超参数集 1 结果
xgboost = XGBRegressor(objective = ' reg:linear ',colsample_bytree = 0.3,
learning_rate = 0.1,max_depth = 5,alpha = 10,random_state=777,
n _ 估计值= 100)
使用 XGBoost 超参数集- 1 进行预测
XGBoost 超参数集-1 的特征重要性
这里,f0 是学校数量,f1 是医院数量,f2 是平均医院评级,f3 是失业率,f4 是犯罪率,f5 是收入中位数。
从上图可以看出,在预测房价时,失业率的重要性最高,其次是犯罪率、收入中位数、学校数量,然后是平均医院等级,最不重要的是医院数量。
XGBoost 超参数集-2 结果
xgboost = XGBRegressor(objective = ' reg:linear ',
n_estimators=100,learning_rate=0.08,gamma=0,子样本=0.75,
colsample_bytree=1,max_depth=7)
XGBoost 超参数集-2 预测
XGBoost 超参数集-2 的特征重要性
这里,f0 是学校数量,f1 是医院数量,f2 是平均医院评级,f3 是失业率,f4 是犯罪率,f5 是收入中位数。
从上图可以看出,在预测房价时,学校数量的重要性最高,其次是犯罪率、失业率、收入中位数,然后是平均医院评级,最不重要的是医院数量。
线性回归结果
线性回归预测
正如我们所看到的,与线性回归相比,XGBoost 的第二组超参数给出了更好的结果。
下一步
下一步,对于预测,我想尝试其他回归算法,如 Light GBM。
确认
我真诚地感谢我的数据科学导师 Ramakrishna Soma 博士对我完成这个项目的指导和鼓励。
参考
- Zillow 经济学数据集
【https://www.kaggle.com/zillow/zecon】T5T6
2)犯罪率数据集-美国各县的犯罪率
https://www . ka ggle . com/mikejohnsonjr/United States-crime-rates-by-county
3)学校数据集——美国公立学校
https://www.kaggle.com/carlosaguayo/usa-public-schools
4)收入水平数据集—美国人口普查局美国收入水平https://data . world/uscensusbureau/ACS-2015-5-e-Income/workspace/file?filename=USA_ZCTA.csv
5)美国人口普查局的收入数据集
https://www.census.gov/programs-surveys/acs/
6)医院数据集
https://www.kaggle.com/carlosaguayo/usa-hospitals/version/1
7)医院评级数据集
https://www . ka ggle . com/center-for-medicare-and-Medicaid/hospital-ratings
8)失业数据集-美国失业率数据集
https://www . ka ggle . com/carlosaguayo/2018-各县失业率/version/1
9)FIPS 邮政编码和县数据集-美国邮政编码和县 FIPS 数据集
https://www.huduser.gov/portal/datasets/usps_crosswalk.html
10)https://www . ka ggle . com/carlosaguayo/correlation-between-house-prices-and-other-factors
11)XG boosthttps://xgboost.readthedocs.io/en/latest/index.html
12)【https://www.zillow.com/research/data/】T2
13)https://whisper . real estate/blog/2019-2020 年住房市场预测/
15)https://machine learning mastery . com/gentle-introduction-xgboost-applied-machine-learning/
基于深度学习的房价预测
Keras 回归与多元线性回归
照片由佛罗里达州 KW insta gram 上的@ Kusseyl 拍摄
在本教程中,我们将创建一个模型来预测房价🏡基于不同市场的各种因素。
问题陈述
这一统计分析的目的是帮助我们理解房屋特征之间的关系,以及如何使用这些变量来预测房价。
目标
- 预测房价
- 在最小化预测和实际评级之间的差异方面使用两种不同的模型
所用数据:ka ggle-KC _ house Dataset
GitHub:你可以在这里找到我的源代码
步骤 1:探索性数据分析(EDA)
首先,让我们导入数据,看看我们正在处理哪种数据:
**#import required libraries** import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt**#import Data** Data = pd.read_csv('kc_house_data.csv')
Data.head(5).T**#get some information about our Data-Set** Data.info()
Data.describe().transpose()
我们数据集的前 5 条记录
关于数据集的信息,你的变量是哪种数据类型
数据集的统计摘要
已提供以下功能:日期: 房屋出售日期 ✔️ 价格: 价格为预测目标 ✔️ 卧室: 卧室/房屋数量 ✔️ 卫生间: 卫生间数量 拍品镜头 ✔️ 楼层: 房屋总层数 ✔️ 滨水: 可以看到滨水景观的房屋 查看: 已查看 ✔️ 根据景县分级系统 ✔️sqft _ above:房屋面积(不含地下室) ✔️sqft _ base:地下室面积 ✔️yr _ build:建造年份
【T10 坐标 ✔️ 长: 经度坐标 ✔️sqft _ living 15:客厅面积 2015 年(暗示—部分装修) ✔️sqft _ lot 15:****
让我们绘制几个特征,以便更好地理解数据
**#visualizing house prices**
fig = plt.figure(figsize=(10,7))
fig.add_subplot(2,1,1)
sns.distplot(Data['price'])
fig.add_subplot(2,1,2)
sns.boxplot(Data['price'])
plt.tight_layout()**#visualizing square footage of (home,lot,above and basement)**fig = plt.figure(figsize=(16,5))
fig.add_subplot(2,2,1)
sns.scatterplot(Data['sqft_above'], Data['price'])
fig.add_subplot(2,2,2)
sns.scatterplot(Data['sqft_lot'],Data['price'])
fig.add_subplot(2,2,3)
sns.scatterplot(Data['sqft_living'],Data['price'])
fig.add_subplot(2,2,4)
sns.scatterplot(Data['sqft_basement'],Data['price'])**#visualizing bedrooms,bathrooms,floors,grade** fig = plt.figure(figsize=(15,7))
fig.add_subplot(2,2,1)
sns.countplot(Data['bedrooms'])
fig.add_subplot(2,2,2)
sns.countplot(Data['floors'])
fig.add_subplot(2,2,3)
sns.countplot(Data['bathrooms'])
fig.add_subplot(2,2,4)
sns.countplot(Data['grade'])
plt.tight_layout()
通过价格分布图,我们可以看到大多数价格在 0 到 100 万之间,只有少数异常值接近 800 万(豪宅😉).在我们的分析中去掉那些异常值是有意义的。
房价预测
快速浏览不同特征分布与房价的关系是非常有用的。
散点图——平方英尺(住宅、地段、楼上和地下室)
计数图—卧室、浴室、地板、等级
在这里,我将日期列分解为年和月,以查看房价是如何变化的。
**#let's break date to years, months** Data['date'] = pd.to_datetime(Data['date'])
Data['month'] = Data['date'].apply(lambda date:date.month)
Data['year'] = Data['date'].apply(lambda date:date.year)**#data visualization house price vs months and years**
fig = plt.figure(figsize=(16,5))
fig.add_subplot(1,2,1)
Data.groupby('month').mean()['price'].plot()
fig.add_subplot(1,2,2)
Data.groupby('year').mean()['price'].plot()
房价与月份和年份
让我们检查一下是否有空数据,并删除一些我们不需要的列(这个数据集没有一些丢失的值)
**# check if there are any Null values**
Data.isnull().sum()**# drop some unnecessary columns** Data = Data.drop('date',axis=1)
Data = Data.drop('id',axis=1)
Data = Data.drop('zipcode',axis=1)
步骤 2:数据集准备(拆分和缩放)
数据分为Train
组和Test
组。我们使用Train
集合让算法学习数据的行为,然后在Test
集合上检查我们的模型的准确性。
- 特性(
X
):插入到我们的模型中的列将用于进行预测。 - 预测(
y
):特征预测的目标变量
X = Data.drop('price',axis =1).values
y = Data['price'].values**#splitting Train and Test** from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=101)
特征缩放将帮助我们从相同的镜头(相同的比例)看到所有的变量,它还将帮助我们的模型学习得更快。
**#standardization scaler - fit&transform on train, fit only on test** from sklearn.preprocessing import StandardScaler
s_scaler = StandardScaler()
X_train = s_scaler.fit_transform(X_train.astype(np.float))
X_test = s_scaler.transform(X_test.astype(np.float))
步骤 3:模型选择和评估
💡模型 1: 多元线性回归
多元线性回归是简单线性回归的延伸(此处阅读更多)并假设因变量Y
和自变量X
之间存在线性关系
让我们在回归模型中总结训练过程:
**# Multiple Liner Regression** from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)**#evaluate the model (intercept and slope)** print(regressor.intercept_)
print(regressor.coef_)**#predicting the test set result**
y_pred = regressor.predict(X_test)**#put results as a DataFrame**
coeff_df = pd.DataFrame(regressor.coef_, Data.drop('price',axis =1).columns, columns=['Coefficient'])
coeff_df
通过可视化残差,我们可以看到正态分布(证明与因变量具有线性关系)
**# visualizing residuals** fig = plt.figure(figsize=(10,5))
residuals = (y_test- y_pred)
sns.distplot(residuals)
剩余可视化
让我们比较实际产量和预测值,以衡量我们的预测与实际房价有多远。
**#compare actual output values with predicted values**
y_pred = regressor.predict(X_test)
df = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
df1 = df.head(10)
df1**# evaluate the performance of the algorithm (MAE - MSE - RMSE)** from sklearn import metricsprint('MAE:', metrics.mean_absolute_error(y_test, y_pred))
print('MSE:', metrics.mean_squared_error(y_test, y_pred))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))print('VarScore:',metrics.explained_variance_score(y_test,y_pred))
多元线性回归结果
💡模型 2: Keras 回归
让我们为回归问题创建一个基线神经网络模型。从所有需要的函数和对象开始。
**# Creating a Neural Network Model** from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.optimizers import Adam
由于我们有 19 个特征,让我们插入 19 个神经元作为开始,4 个隐藏层和 1 个输出层由于预测房价。
此外,ADAM 优化算法用于优化损失函数(均方误差)
**# having 19 neuron is based on the number of available features** model = Sequential()
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(1))model.compile(optimizer='Adam',loss='mes')
然后,我们对模型进行 400 个历元的训练,每次都在历史对象中记录训练和验证精度。为了跟踪模型在每个时期的表现,模型将在训练和测试数据中运行,同时计算损失函数。
model.fit(x=X_train,y=y_train,
validation_data=(X_test,y_test),
batch_size=128,epochs=400)model.summary()
loss_df = pd.DataFrame(model.history.history)
loss_df.plot(figsize=(12,8))
测试数据评估
y_pred = model.predict(X_test)from sklearn import metricsprint('MAE:', metrics.mean_absolute_error(y_test, y_pred))
print('MSE:', metrics.mean_squared_error(y_test, y_pred))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))print('VarScore:',metrics.explained_variance_score(y_test,y_pred))**# Visualizing Our predictions** fig = plt.figure(figsize=(10,5))
plt.scatter(y_test,y_pred)
**# Perfect predictions** plt.plot(y_test,y_test,'r')
**# visualizing residuals** fig = plt.figure(figsize=(10,5))
residuals = (y_test- y_pred)
sns.distplot(residuals)
Keras 回归 vs 多元线性回归!
我们成功了!💪
我们用两种不同的 ML 模型算法预测了房价。
我们的多元线性回归的得分在 69%左右,所以这个模型还有改进的空间。然后我们用 Keras 回归模型得到了约 81%的准确率。
另外,请注意,Keras 回归模型的 RMSE(损失函数)较低,这表明我们的预测更接近实际评级价格。
结果:喀拉斯区。vs 多个线性稳压器。
毫无疑问,这个分数可以通过特征选择或使用其他回归模型来提高。
感谢您的阅读🤓。再次反馈总是受欢迎的!
我和 190 名学生是如何学习数据科学的
学习数据科学
如何学习编码的可行策略?
约书亚·阿拉贡在 Unsplash 上拍摄的照片
两年前,我在大学上 R 的初级班。我听说过数据科学这个术语,但我甚至不知道这将是我第一次接触这个令人兴奋的世界。
老实说,我上这门课只是为了认识一些人。一周很快过去了,我学到了一些基础知识,并对编程产生了兴趣。但是我不知道我应该如何进行。
所以我在数据营上了一些额外的在线课程,但很快就停止了。为什么?即使网站本身是一个很好的起点,我只是没有让我坚持下去的目标。
我的生活还在继续,我有其他的责任,编码不再是优先考虑的事情。
快进两年。我已经用 Python 和 r 进行了几个数据科学项目,从预测到文本挖掘任务。更重要的是,我和我的团队在 TechAcademy 支持了 190 名学生学习编码。不同背景和经历的学生。
我想和你分享我的观点。这是一个个人评估,告诉你什么最能快速见效。记住每个人都是不同的。所以如果你
- 刚刚开始学习编码,
- 受不了再去上一堂网上课,或者很快厌倦了网上作业,
- 或者想知道我们曾经教 190 个学生编程的哲学,
然后继续读下去。
那么是什么改变了呢?我怎么能从零走到现在呢?
最终,唯一重要的是动机。我必须确保编码成为优先事项。直到那时,我对编码的想法都是基于外在的动机。这就是我脑子里想的:
哦,是的,我听说编码在 21 世纪是必不可少的。如果我知道如何处理一些代码,我在就业市场上会有更好的机会。
我不得不把它转换成一种更有内在动力的思考方式。
我真的很喜欢编码。我写的每一行代码都能得到令人兴奋的结果,这很有趣。它让我能做真正疯狂的事。
你认为谁更有耐力?“哦,我有更好的工作机会”的人,还是仅仅为了编码而热爱编码的人?
马修·盖伊在 Unsplash 上的照片
但是要达到这种状态,就要投入工作。只看了几个教程就不可能热爱编码。编码不是石头剪子布的快速游戏。编码更像是一场漫长的风险游戏。
开始的时候,很难理解规则。但是一旦你进入状态,每一个新的情况都会变得更容易。这是你想要到达的点。你想要理解你所选择的编程语言的基本规则。之后,每一个新的项目或方法都是可行的和令人兴奋的。
但是你怎样才能达到那种状态呢?我们怎样才能确保你会爱上编程呢?
基础
在线课程有它的位置,尤其是对初学者来说。它们是学习基础知识的完美起点。
因此,如果你从未写过一行代码,那就去一个在线学习平台,比如【数据营】 【附属链接】或者 Udemy。在那里你可以开始理解你想要学习的编程语言。
但是你应该上几节网络课呢?我建议坚持基础。尽量保持简单。为什么?因为在一些课程之后,你应该对这种编程语言的工作原理有了很好的了解。
你可以通过在线课程继续学习所有的东西。我怀疑这是学习数据科学的最高效和最有效的方式。
有些类会教你将数据加载到 R 或 Python 中的每一种可能方式。dta-,csv-,excel-,json-,随便什么-files…但是你真的需要花 6 个小时的宝贵时间去学这个吗?当你确实有一个你想要使用的文件时,谷歌一下如何加载你的特定文件会更有效率。这应该够了吧?
对我来说,获取大量我不会用到的信息毫无意义。这是浪费时间。还有,我就是不擅长跟网上的课。我很快就厌倦了。这扼杀了我的动力。如果你喜欢在线课程,那么你当然可以参加更多的课程。但请有意为之。
更上一层楼
现在你已经学会了基础,你应该如何进行?我们如何才能确保你保持动力?
答案简单明了。你必须自己创造一些东西。把你学到的东西拿出来,创建你的第一个个人项目。边做边学。你需要意识到仅仅通过学习基础知识你已经获得了什么样的力量。
但是乔纳森,我真的不知道我应该做什么样的项目。你能帮我吗?
当然,我支持你!
在 TechAcademy,我们给我们的学生一些项目,他们在这些项目中获得数据,并进行解释性分析。在这个简单的任务中,他们必须加载数据,
先看看它,
将其转换成正确的格式(数据操作),
通过创造情节获得第一手见解。
图基于 Lukas Jürgernsmeier 的 TechAcademy 解决方案
虽然这不是火箭科学,但这是成为数据科学家不可或缺的一部分。要处理数据,你必须理解数据。这只是一个简单的例子。你会发疯的。
那么,你为什么不现在就去 Kaggle,从著名的泰坦尼克号数据集中载入数据呢?如果你是初学者,不要试图马上预测什么。只需加载数据,查看结构,并尝试找到一些见解。这有助于你应用你的新技能。这还不够吗?去 Github 上的 tidytuesday repository 看看你的数据整理和可视化技能。
从那时起,你可以通过你所进行的每一个项目来增加你的技能。如果解释性分析变得无聊,那就试着去学习什么是机器学习。阅读一些关于它的文章,并开始预测泰坦尼克号数据集的生存变量。如果你已经掌握了这个,做一些文本挖掘的东西怎么样?
至少对我来说,解决项目是如此有趣。我正在使用我学到的工具来探索或预测事物。与你只做被告知的事情的在线课程相比,这有多酷?
此外,你正在建立一个投资组合,你可以与你的社区分享。这比颁发一门网络课的第 1000 个证书还要激动人心。
跟随一步一步的教程进行最终测试或小项目是可以的。但是创建自己的项目需要更多的思考和创造力。你真的必须理解底层数据,并使用它来达到你的目标。这是数据科学家的一项关键技能。
当然,这并不总是容易的。你得到了错误,你不知道为什么。每一行代码都可能成为一场灾难。但事实就是如此。很有可能,这个错误不只发生在你身上。Stackoverflow 或者其他任何一方都是你的救世主。只要在谷歌搜索中输入错误信息,你就会得到帮助。
结论
学习编码成为一名数据科学家不一定要成为一只你抓不到的难以捉摸的兔子。
有一些可管理的和可操作的策略,你可以用它们来非常快地达到你的目标,并且充满乐趣。
这些战略如下:
1)保持耐心,让你的动力不断增长。
确保你明白你为什么要学习编码。总的来说,我们每个人都生活在一个飞速变化的数字世界中。拥有编码技能(不仅限于数据科学)是一项伟大的技能,可以帮助你达到目标。但是一定要找到享受的方法。给它一些时间。当你掌握了必要的技能后,数据科学会变得很棒。
2)一般只在刚开始的时候用线上课。
在线课程是学习基础知识的好方法。但是没有必要通过在线课程学习所有的东西。此外,他们会变得无聊,至少对我来说是这样。如果您不喜欢这种学习,请确保不要强迫自己完成数据科学方向的所有课程。作为一名数据科学家,并不是指某个地方有证书的人。
3)通过开展项目让你的技能更上一层楼。
项目很有趣。它们能让你用你所学的技能变得有创造力。如果你想学习新的东西,读一些文章,尝试一下。一次做一个项目,让它变得更难,然后收获收益。
开始编码不是一件容易的事情。我见过很多人在开始的几步中挣扎。一旦你不断出现,一切都变得更容易接近。我希望这些策略能帮助你喜欢编码,尤其是数据科学。
如果您有任何问题或意见,请在下面留下您的反馈。另外,如果你想和我联系,你可以通过 LinkedIn 联系我。
敬请期待,下期见!
生物学家如何成为数据科学家
数据科学
我是如何从非技术背景过渡到数据科学的
具有结合变构效应物的血红蛋白的图像;由 Chanin Nantasenamat 用 PyMOL 语言渲染
在这篇文章中,我将分享我如何从生物学家转变为数据科学家的经历。本文是我的 YouTube 频道上的原始视频的扩展版本,数据教授:
简要回顾我的学术历程
所以在我们开始之前,也许先简单介绍一下我自己。我从 2004 年开始从事数据科学的工作,当时我正在攻读博士学位的第二年。到 2006 年,我已经完成了题为生物和化学应用的计算机辅助分子设计:量子化学和机器学习方法的博士论文。简而言之,我的研究位于生物学、化学和计算机科学的界面,这些领域的融合使我有可能探索蛋白质功能及其调节的潜在起源(即抑制或激活)。这种理解对于药物发现,特别是具有治疗活性的新的生物活性化合物的发现具有重要意义。
快进到 2020 年,我仍然在使用数据科学来理解来自生物、化学和医学的数据。我的大部分工作围绕着发现药物,这些药物通过特异性靶向感兴趣的靶蛋白,对疾病发挥有希望的调节特性。这是通过使用机器学习来理解和揭示药物样分子的哪些具体特征导致目标蛋白质的有希望的调节来实现的。
我是如何开始数据科学的?
我的数据科学之旅始于 2004 年。那时这个领域还不叫数据科学,更流行的术语是数据挖掘。我清楚地记得我从事的第一个数据科学项目是预测 DNA 剪接位点。我第一次开始使用的主要数据挖掘工具是一个叫做 WEKA 的程序,它是由怀卡托大学开发的。该软件是一个 GUI 软件,我们可以单击各种按钮来导入数据、执行特征选择、标准化数据、删除缺失数据以及构建机器学习模型。我使用的一些机器学习算法包括决策树、线性回归、人工神经网络和支持向量机。
我最初是作为基于 GUI 的数据挖掘软件的用户开始的,随着时间的推移,我开始意识到一些限制和障碍。特别是,我注意到运行数据挖掘工作流花费了大量时间,特别是当我想要优化学习参数时,我必须手动修改程序中的参数值(例如,想象一下对 100–1000 个不同的参数设置进行这样的操作)。几年后,我感到迫切需要学习如何自动化这些手工和平凡的任务。
下一步自然会发展到 Python 或 r 这样的编程语言。
学习编码
学习编码确实是一项具有挑战性的工作,对于非技术背景的人来说相当困难。就我个人而言,我几乎尝试了所有的方法,从阅读书籍、教程、堆栈溢出、询问同事等等。从我自己的学习经验中,我发现如果我使用我自己的研究问题作为学习编码的基础(即而不是使用示例数据集),那么感觉负担会更少。因为在完成编码任务后,我将立即得到我的研究项目进展的奖励。
我如何将编码问题分解成易于管理的部分
假设我有一个想要解决的研究问题,我要做的第一件事就是将问题分解成独立的任务(例如将几个 Excel 文件中特定列的内容合并到一个文件中)。为了解决这个问题,我会查看教程、堆栈溢出答案以及编码书籍的特定部分。所以一遍又一遍地重复这样做让我慢慢掌握了编码的概念,并意识到这并不困难,而是可以实现的。随着我解决越来越多的问题,我开始获得动力,并对编码充满信心。通过在小的、单独的编码任务上缓慢地构建,已经为项目的进展积累和最终完成做出了贡献。在这个阶段,我非常满意,因为我已经编写了一个数据科学工作流,大大提高了生产率,节省了时间和成本。因此,过去需要六个月才能完成的事情,通过使用 R 或 Python 代码编写解决方案,可能只需要几分钟。仔细想想,能够编码有点像拥有超能力!
编码=超能力
所以如果像我这样的生物学家可以学习编码,那么我相信每个人也可以学习编码。所以只要有决心和实践,任何人都可以编写代码。
我如何在研究中使用编码
作为一名生物医学数据科学家,我面临着试图理解生物医学数据的挑战。很多时候,我将不得不花费大部分时间来整理收集到的数据,以便对数据进行预处理,从而进行更有意义的分析。由于这项任务非常繁琐和重复,我很高兴能够用 R 和 Python(是的,我已经用这两种语言编写了两个不同的版本)来编程预处理数据,以便为进一步的分析提供高质量的数据。除了使用编码进行数据预处理,我还使用它来执行探索性数据分析以及机器学习模型构建。数据科学工作流中我最喜欢的部分是设计适当的数据可视化的过程,这将尽可能最好地传达数据故事。
结束语
这就是我的故事,关于我如何从一个非技术背景的生物学家转变成一个数据科学家。我希望这有助于您了解如何开始自己的数据科学之旅。
订阅我的邮件列表,获取我在数据科学方面的最佳更新(偶尔还有免费赠品)!
关于我
我是泰国一所研究型大学的生物信息学副教授和数据挖掘和生物医学信息学负责人。在我下班后的时间里,我是一名 YouTuber(又名数据教授)制作关于数据科学的在线视频。在我制作的所有教程视频中,我也在 GitHub 上分享 Jupyter 笔记本(数据教授 GitHub page )。
数据科学、机器学习、生物信息学、研究和教学是我的激情所在。数据教授 YouTube…
www.youtube.com](https://www.youtube.com/dataprofessor?sub_confirmation=1)
在社交网络上与我联系
YouTube: WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB
一本关于习惯的书如何帮助我更有效地学习数据科学
作为一名数据科学家,我从 James Clear 的原子习惯中学到了什么
卡里姆·甘图斯在 Unsplash 上拍摄的照片
阅读关于习惯和行为改变的书籍是我在过去几年中经常做的事情。作为一个对各种生产力技巧和生活优化感兴趣的人,我觉得这类书真的很有趣。尤其是当这种类型的书最终给我的生活带来意想不到的改善时。
James Clear 所著的《原子习惯:建立新习惯和改掉坏习惯的简单而行之有效的方法,是我去年非常喜欢读的一本书,因为它帮助我提高了数据科学学习的质量。它使阅读变得容易,并且如果需要的话,允许以非常愉快和方便的方式返回和重新引用它。
这本书的一大优点是它没有试图从头再来。相反,它以一种简明扼要的风格融合了它所要传达的内容。在本文中,我将解释这本书的要点如何影响我的数据科学学习过程。
微小的增量变化会带来巨大的成果
这个概念可以归结为这样一个想法,即专注的微小改进最终会产生巨大的结果。如果我们每天在某项任务上取得 1%(只有 1%)的进步,那么到每年年底,我们在这项任务上的表现会提高 37 倍。这是巨大的进步!
尽管这里的想法简单明了,但很难付诸实施。长期坚持就更难了。当我刚刚开始学习在线数据科学课程时,我不知所措。我雄心勃勃,想立刻了解外面的一切。不用说,有些事情不太顺利。
“成功是日常习惯的产物,而不是一生一次的转变”——詹姆斯·克利尔
马特·拉格兰在 Unsplash 上拍摄的照片
我必须让事情运转起来!就是这个时候,我决定换个角度,采纳复合效应倡导者的观点。这样做,我开始更好地学习概念,更彻底地理解事物,最重要的是,开始享受学习的过程。亲爱的读者,我的建议是,不要嚼得太多。让习惯培养的复合效应来关注你正在取得的进步,同时确保你每天为小的可管理的目标努力工作。
学习、进步和习惯的养成不会在一夜之间发生
你的学习和进步是有门槛的。只有跨过这个门槛,你才能在学习和习惯养成中看到切实的成果。
这是一个无价的教训,在你的学习过程中要牢记在心。期待伟大的成果和知识在一夜之间神奇地同化,是取得长久进步的最大敌人。这也适用于您学习数据科学基础知识的过程。
在一两天内完成 Python 语言基础的在线课程不应该让你期望已经完成了值得与潜在雇主分享的项目组合。您的代码和项目的质量在达到所需的“阈值”之前需要时间和奉献
动机被高估了。你的系统承载着你的进步。
在发展某项技能的过程中,再多的动力也不足以推动一个人从最底层走到最高层。将动力视为你唯一的“燃料”是不太实际的。简而言之,你总是会耗尽燃料,筋疲力尽,或者干脆放弃。
相反,你在学习和培养习惯中建立的系统应该在你有动力和没有动力的时候都带着你。当你耗尽了你所有的动力时,尤其如此。您在掌握数据科学基础知识方面的进步反映了您在整个学习过程中设置和使用的系统有多好。
“你不会上升到你的目标的高度,你会下降到你的系统的高度!”—詹姆斯·克利尔
艾萨克·史密斯在 Unsplash 上拍摄的照片
你的目标是成为一名伟大的数据科学家。你的系统是你用来成为一个人的过程!《T4 原子习惯》中让我印象深刻的一点是,赢家和输家都有相同的目标。换句话说,这既不是关于你的目标,也不是关于你的动机和野心。相反,它是关于你的系统让你失望或者为你工作。
让它变得明显、有吸引力、简单和令人满意
这四条著名的行为改变法则规定了如何培养良好的习惯。它们的对立面(即让它看不见、没有吸引力、困难和不满意)规定了打破坏习惯的过程。
让您的数据科学学习变得显而易见始于 Clear 所说的“实现意图公式”这遵循看起来非常明显和简单的食谱。然而,它所产生的心理影响是惊人的。
当您告诉自己将在[在此插入地点]的[在此插入时间]在[在此插入行为]时,食谱就开始了。一个显而易见的例子是,当你告诉自己“我将在明天上午 9:00 在洛克菲勒图书馆练习编写 20 个中级到高级的 SQL 查询。”
由 Unsplash 上的 chuttersnap 拍摄
当你把你渴望学习的东西(数据科学)和你真正喜欢做的事情联系起来时,你的学习习惯就会变得有吸引力。说你一生最大的爱好就是写作!如果你开始将你的写作习惯和你的数据科学学习习惯捆绑在一起,你很有可能会学得更好。
当你开始时,学习过程将开始变得更有吸引力,例如,写下你的数据科学学习之旅,甚至写下关于你试图掌握的数据科学概念的技术文章。
让它变得简单是双重的。第一,你想减少好习惯的摩擦。第二,你想增加坏的摩擦。然而,这两者都是从你考虑你的环境和更加意识到你周围的事物开始的。
通过将您用来学习的网站设置为打开浏览器时加载的默认页面,减少学习数据科学的摩擦。始终保持您的注册帐户登录,以减少键入您的电子邮件和密码的摩擦。每当你开始学习时,你的手机仍然是一种干扰?把手机完全移到另一个房间会增加分心的摩擦。
让它令人满意意味着理解您的数据科学学习只有在长期内才会开始有回报。但是,因为你需要短期的满足感,以便继续回到你试图建立的学习习惯,你必须通过奖励自己来使学习过程更令人满意。
奖励自己可以从做你真正喜欢的事情开始(比如长跑或弹钢琴),每次你每天在你正在培养的习惯上取得 1%的进步。这让回归习惯变得更加容易和有趣。从长远来看,你会独立于这些短暂的回报而成长。习惯本身将开始成为奖励,而不是获得奖励的方式。
养成习惯您的数据科学学习很像一个“深度”决策树。你在每个分支做出的正确选择越多,你在旅程结束时落在“好”叶子上的机会就越大!
一个损坏的内存模块是如何隐藏在众目睽睽之下的——以及我是如何指责 Linux 内核和两个无辜的硬盘驱动器的
梅斯特不高兴了— 来源:克里斯蒂安·霍林格
我们大多数人在生活中见过、调试并解决了很多技术问题——从理解廉价的 PSU 意味着大量的烟雾,通过你最喜欢的编程语言中一个接一个的错误,一直到在 grep 中寻找 segfaults。
这是一个关于 DDR-4 内存的断棒如何隐藏在众目睽睽之下近一年的故事。
卑微的出身
2019 年 4 月,我搭建了一个家庭服务器。在大多数情况下,它运行得很好。唯一奇怪的是:我的两个最老的驱动器,一对 WD Red 3TB NAS 驱动器,对他们的年龄来说很年轻,只有大约 20,000 小时,似乎拒绝接受更大的数据量。
一个简单的rsync
运行如下:
sudo rsync -P -aht --out-format="%t %f %b" /mnt/3TB/ /mnt/6TB/ --exclude=".Trash-1000" --exclude="Thumbs.db"
会随机停下来,似乎没有什么好的理由。它不仅停止了,而且使整个机器无法使用。
当将整个事件(包括stderr
)传送到日志时,输出会像这样停止:
3TB/Photos/2002/02/dad/IMG-0814.JPG # <- nothing here
配置失误
问题中的驱动器是作为软件 RAID-1,在作为文件系统的ext4
之上有mdadm
、LUKS 加密,这并不是一个非常复杂的设置,这使我相信我搞砸了配置。仍然值得一看。
使用mdadm --detail
检查阵列没有显示任何问题、挂起的重新同步或任何其他明显错误配置的迹象。关于cryptsetup luksDump
也可以这么说——一切都按照预期设置好了(关于缺少 ZFS、btrfs 甚至 LVM 的评论将通过管道传送到/dev/null
)。
甚至badblocks
,这个检查坏扇区的工具,也没有产生任何结果。
nohup badblocks -nvs /dev/sda 1>&2 | tee sda.out &
我甚至试图使用strace
找到最初的命令:
sudo strace -o strace-output.log -f rsync -P -aht --out-format="%t %f %b" /mnt/3TB/ /mnt/6TB/ --exclude=".Trash-1000" --exclude="Thumbs.db"
无济于事。
因此,肯定是一个坏的硬盘驱动器(或者可能是 SATA 电缆或一个垂死的 PCI-to-SATA 卡)。诚然,两个驱动器同时损坏的可能性很低,但并非不可能。
责怪错误的事情
因此,我干脆不挂载阵列。毕竟,服务器是全新的,在我最终将所有现有的备份驱动器迁移到它之前,它仍然有足够的空间。所以何必呢?
我的懒惰很快就咬了我。几个月后,我在服务器上移植了我的pihole
,一个基于 DNS 的网络级广告和跟踪拦截器。它也恰好是一个 DHCP 服务器。
DHCP 服务器的问题是它们缺乏可用性不会马上显现出来。如果网络上的每台设备都分配了 IP 地址,就没什么好担心的了。对于 DNS 来说也是如此——大多数设备将简单地与它们的备用 DNS 对话,如8.8.8.8
或1.1.1.1
。
有一天,我的网络似乎中断了。我很快责怪康卡斯特,愤怒地重启调制解调器和路由器,但无济于事。WiFi 是有的,但是设备得不到 IPs。嗯,奇怪。
过了一会儿,我明白了——是服务器在分配地址。如果它关闭,没有设备可以加入网络。由于时间紧迫,我重启了服务器,解密了驱动器,然后继续我的快乐之路,归咎于一个反常的事故。
回来后,我继续翻看/var/log
,愤怒地寻找罪犯。我敢说,这可能是潮人科技的错——Kubernetes、Docker、nodejs、golang——魔鬼的杰作!
嗯,在一个死内核上找到日志是很困难的——毕竟,没有一个内核做 I/O,死内核写日志是不太可能的。但是有一点很突出:munin
。
在不可避免的硬重置之前收到的最后一个日志如下所示:
bigiron smartd[786]: Device: /dev/sdd [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 113 to 112
22:43:15 bigiron smartd[786]: Device: /dev/sdf [SAT], 1 Currently unreadable (pending) sectors
22:43:15 bigiron smartd[786]: Device: /dev/sdf [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 61 to 60
22:50:01 bigiron CRON[9239]: (root) CMD (if [ -x /etc/munin/plugins/apt_all ]; then /etc/munin/plugins/apt_all update 7200 12 >/dev/null; elif [ -x /etc/munin/plug
ins/apt ]; then /etc/munin/plugins/apt update 7200 12 >/dev/null; fi)
08:09:52 bigiron systemd-modules-load[465]: Inserted module 'lp'
Munin,作为久经沙场的监控软件,可能遭遇了配置不良、软件包过时或类似的问题。有道理——北美某处房子里的一台服务器发现了监控全球成千上万台机器的软件中的一个破坏游戏的漏洞。
我不想再为此烦恼了,就把穆宁搬走了。反正我太笨了。
法伦海特 233
但是另一件困扰我的事情是:硬盘温度不太可能超过 110 摄氏度——大多数硬盘可能会在 80 摄氏度左右失效。在 reddit 的一个帖子上(关于我的服务器!),用户Tired8281
发帖:
*Unfortunately I made a single stupid mistake with the hardware setup and the software setup I used didn't catch it, and three months later half of the drives died*
*Promise you won't laugh? I installed the fan wrong. Instead of sucking the hot air from the CPU out of the case, it sent that hot air into the drive cage, slow roasting my hard drives*
https://old . Reddit . com/r/Linux/comments/CQ 9 view/building _ a _ home _ server/ewvcx 9 o/
我没有笑。我以为我也做了同样的事。坐下来,把东西拆开,检查气流,甚至搜索“如何安装机箱风扇”——我已经做了几十次了(我的电脑太多了)——结果发现一切都很好,事实上,那里没有任何东西看起来异常温暖。盒子旁边有一个空调通风口,我用了很多高质量的风扇。
肯定是 S.M.A.R.T .蠢东西,从来不靠谱。这就更有理由去责怪驱动了!
只是… /dev/sdf 从来不是看似破碎的 3TB 阵列的一部分。
追逐错误的东西
我们总结一下:融化硬盘。复制数据时系统死锁。在系统被监控软件锁定之前记录消息,可能会进行大量的 I/O 操作。
是时候追踪这个问题了:在“坏的”驱动器上启动另一个 rsync,迎接我的是:
ext4_finish_bio — 来源:克里斯蒂安·霍林格
哈,我就知道!ext4_finish_bio
!Ext4!fs
模块!一定是硬盘的问题!令人讨厌的是:
static void ext4_finish_bio(struct bio *bio)
{
int i;
struct bio_vec *bvec;bio_for_each_segment_all(bvec, bio, i) {
struct page *page = bvec->bv_page;
#ifdef CONFIG_EXT4_FS_ENCRYPTION
struct page *data_page = NULL;
#endif
struct buffer_head *bh, *head;
unsigned bio_start = bvec->bv_offset;
unsigned bio_end = bio_start + bvec->bv_len;
unsigned under_io = 0;
unsigned long flags;if (!page)
continue;#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (!page->mapping) {
/* The bounce data pages are unmapped. */
data_page = page;
fscrypt_pullback_bio_page(&page, false);
}
#endifif (bio->bi_status) {
SetPageError(page);
mapping_set_error(page->mapping, -EIO);
}
bh = head = page_buffers(page);
/*
* We check all buffers in the page under BH_Uptodate_Lock
* to avoid races with other end io clearing async_write flags
*/
local_irq_save(flags);
bit_spin_lock(BH_Uptodate_Lock, &head->b_state);
do {
if (bh_offset(bh) < bio_start ||
bh_offset(bh) + bh->b_size > bio_end) {
if (buffer_async_write(bh))
under_io++;
continue;
}
clear_buffer_async_write(bh);
if (bio->bi_status)
buffer_io_error(bh);
} while ((bh = bh->b_this_page) != head);
bit_spin_unlock(BH_Uptodate_Lock, &head->b_state);
local_irq_restore(flags);
if (!under_io) {
#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (data_page)
fscrypt_restore_control_page(data_page);
#endif
end_page_writeback(page);
}
}
}
https://elixir . boot Lin . com/Linux/v 4 . 19 . 106/source/fs/ext 4/page-io . c # L62
经过搜索,以下是 2005 年以来的邮件列表主题中互联网智慧的全部:https://www . red hat . com/archives/DM-devel/2015-10 月/msg00046.html
只是……我运行的是Debian 10
,内核4.19
。
比以往任何时候都更困惑——ext4
内核模块中的一个标准调用如何会在一个最新的(稳定的)内核上导致死锁,这超出了我的理解范围。
同样,我们可以看到这一点:
invalid_op+0x14/0x20
呃,无效的操作码?
ENTRY(invalid_op) ASM_CLAC pushl $0 pushl $do_invalid_op jmp error_code END(invalid_op)
https://elixir . boot Lin . com/Linux/v 4.2/source/arch/x86/entry/entry _ 32。S#L743
嗯,中央处理器的问题?知道了旧版本的 BIOS 会引起 AMD 锐龙 CPU 的问题,我现在开始更新 BIOS,希望能有所改变。这并没有发生。
找到线索
沮丧之余,我几乎准备好花费数百美元购买一对新的 NAS 驱动器。幸运的是,一个周日下午,我和我的搭档在好市多看到一个 8TB 的外置硬盘,售价 120 美元。在最终更换驱动器之前,运行一些额外的备份似乎是一项不错的投资。除了餐馆供应的一加仑橄榄油和鸡汤,我们回到家,我开始准备开车。
像我这样天真的人,我把它插入服务器,格式化成 ext4,加上 LUKS……然后遇到了一个“无效的密码短语”,甚至是一个单字符的密码。归咎于一个坏了的 USB 端口,我把它插到我的笔记本电脑上——运行 popOS!还有一个更新的内核,我可以补充一下——它工作起来非常棒。
回到服务器,启动rsync
,我就不管它了。
第二天早上我看到了这个:
_raw_spin_lock — 来源:克里斯蒂安·霍林格
打扰一下。[_raw_sping_lock](https://www.kernel.org/doc/Documentation/locking/spinlocks.txt)
?那个跟有什么关系?嗯,我想如果机器锁死了,从多线程和中断的调用中得到一个异常是有意义的,但是这次我不能责怪ext4
。发生了什么事?
认识到真正的邪恶
我恍然大悟。服务器通常在晚上崩溃。自动备份在晚上运行,但通常情况下,考虑到它们的增量性质,它们不会做很多事情(特别是如果我只是在 Windows box 上玩魔兽世界的话)。由于这些备份从来没有接触过看似失效的驱动器,所以我从来没有完全建立起这种联系。
rsync
读取、比较和写入数据。底层内核调用缓存数据、分配页面并处理所有需要的模块——文件系统、mdadm、dm-crypt(使用内核的加密 API)——同时处理多个线程。
虽然这些操作可能不会对系统造成巨大的负载(从绝对意义上来说,如所用 CPU 内核的百分比),但它会执行许多需要同步的小操作
如果在任何时候,坏的内存导致内核弄乱了各自的锁,它很可能会死锁并导致系统不可用,而不会出现真正的内核崩溃。
我越深入调查,就越发现:
Message from syslogd@bigiron at Feb 22 12:38:40 ...
kernel:[ 7467.252060] page:ffffe29fc735a400 count:-1 mapcount:-1 mapping:0000000000000000 index:0x1
kernel:[53370.089111] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [smbd:21214]
内存损坏也可以解释很多更奇怪的问题——比如硬盘看起来就要融化成一片火海,尽管它处于一个舒适的温度。
检验假设
这很简单:我在实时系统上运行memtester
,发现了多个问题;然后,我在一个可启动的 USB 驱动器上使用了用过的memtest86
,只发现许多问题。理论证实。
梅斯特不高兴了— 来源:克里斯蒂安·霍林格
在关掉内存之后——问题中的一个是一套海盗船复仇 LPX 2x8GB DDR 4 cmk 8 GX 4 m1 a 2400 c 16——强制一个大的rsync
工作,看着机器像为它而建一样工作。
结论
我不完全确定该说什么——但我真诚地希望有人在寻找一个模糊的、看似随机和不相关的问题时发现了这一点,并被阻止发疯。
就我而言,在走后一条路之前,我将开始更换 RAM 模块。
原载于 2020 年 2 月 25 日 https://chollinger.com。
数据科学家如何在 FAANG 进行面试
以及数据科学的未来走向
在 面试查询 ,我们爱聊我们的成功故事。本周,我与最近加入苹果公司担任数据科学家的塔赫尔进行了交谈。我问了他上一次面试的情况,他为面试做了哪些准备,以及他对数据科学未来的展望。你可以在推特上找到塔赫尔@ tahere Sheikh和 中 。
你好!你的背景是什么,你是如何进入数据科学的?
大家好,我是塔赫尔·埃尔舍伊克,我刚刚加入苹果公司,成为一名专注于苹果音乐的数据科学家。在此之前,我在 Intuit 工作,担任工资团队和产品内发现团队的数据科学家。在那之前,我在华盛顿特区完成金融数学硕士学位,同时在一家名为 Red Oak Strategic 的咨询初创公司担任数据科学家。
我知道我对很多不同的领域感兴趣,比如计算机科学、统计学、产品管理、分析学等等。因此,成为一名数据科学家似乎非常适合我。
在 Intuit 工作很棒,我学到了很多东西。那里的数据科学团队嵌入在产品中,所以这个角色更像是一个技术产品管理角色,你每天与产品经理和工程师一起工作,创建新功能,调试现有指标,并进行大量实验。不过,最终我想去一家更面向消费者的公司,从事我个人使用的产品,这就是我转投苹果的原因。
找新工作时,你的整体面试体验如何?
这次面试的时候,我考虑得很周到,争取到了很多面试机会,并确保把我最想要的安排在最后。上次我面试数据科学职位时,我收到了 Intuit 的录用通知,我就接受了。所以这一次,我想扩大我的视野,我最终得到了 6 到 7 次面试。
我的数据科学面试很艰难,因为这些面试彼此完全不同。数据科学是非结构化的,要在面试中胜出非常困难,因为你无法对每一个面试都做好 100%的准备。数据科学技能非常广泛。我觉得很多人都说在你掌握诀窍之前,你必须去很多公司面试,但事实并非如此,因为每次面试都与之前的完全不同。例如,在脸书,面试侧重于产品感觉问题和统计数据,但在谷歌,面试更多地围绕机器学习和咨询类问题。
什么帮助你为面试做准备?
面试查询上的 SQL 问题非常有用。你永远找不到专门针对数据科学家的 SQL 问题。通常,Leetcode 或 Hackerrank 都有针对软件工程师的 SQL 问题。因此,为数据科学家找到更侧重于分析和数据处理的 SQL 问题是非常有帮助的。
面试询问中的产品问题对许多面试也很有帮助。考虑到许多产品问题是如此的零星和多变,在制定指标和深入问题时了解如何思考组织你的答案是有益的。
此外,招聘人员会发给我很多材料,为即将到来的现场面试做准备。虽然有些内容可能会有帮助,但很多时候这些材料是误导性的,我最终浪费了很多宝贵的时间。LinkedIn 和脸书就是如此。
你认为数据科学未来会走向何方?
老实说,在我看来,机器学习越来越不相关了。在数据科学的工作环境中,公司更想要数据分析师和技术产品经理,而不是构建模型的核心数据科学家。例如,Intuit 的分析职位比机器学习职位空缺更多。我认为这与这样一个事实有关,即公司需要能够沟通和制定战略并且能够推动产品前进的人。
感谢阅读
- 对更多这样的故事和指南感兴趣?查看 面试查询简讯 。
- 订阅我的 Youtube 频道 了解更多数据科学访谈!
一个数据科学家如何在他梦想的行业找到工作
亚历克斯在疫情之前加入了网络
在 面试查询 ,我们爱聊我们的成功故事。本周,我与 Alex 进行了交谈,他最近以数据科学家的身份加入了 NetworkNext。我们谈到了他富有挑战性的面试经历、对其他求职者的建议,以及进入数据科学的非传统方式。可以 在 Linkedin 上关注 Alex。
你好!你的背景是什么,你是如何进入数据科学的?
嗨,我叫亚历克斯。我的背景是计算物理硕士。我刚开始的时候,数据科学在 2015 年还没那么大,但是开始快速回升。毕业后,我试图涉足数据科学,但发现这真的很难。我最终被一个训练营接受,这个训练营帮助我理解了机器学习的基础和算法。
我走了一条非常非传统的路线,最终在 Upwork 上做自由职业者的工作,并找到了一个客户,科莫多科技公司,它对我最初的一些工作印象深刻。在做了几个月的合同工后,我得到了 Statusquota 公司的一份工作,这是这位首席执行官的另一家公司,也是她帮忙工作的公司。
我听说在 Upwork 找到合同工作很难。你的体验如何?
肯定是从做零工开始的。不同的客户会有零星的工作,但有一天我联系了一个需要基本建模工作的人。当他们有一个职位,需要一个承包商时,它结束了科莫多,这是一个很好的方式进入一个更稳定的演出。我做了一年左右的顾问,直到他们资源耗尽。
我认为努力获得升级工作的经验是有用的,因为许多初级数据科学家没有与客户合作的经验,也没有搞清楚一家企业最终真正想要什么的经验。当我从事几份自由职业时,这给了我理解不同企业需要什么的经验。
你的数据科学面试经历是怎样的?
我开始在西雅图、佛罗里达和其他一些我想去的地方接受面试。我在机器学习基础和编码方面有很强的背景,但在处理所有不同类型的数据科学面试时遇到了麻烦。一般来说,如果我做得不好,我知道我搞砸了什么。
有些面试有点像 Geico 或 Statefarm,因为他们都在保险行业。例如,存在保险业特有的问题,围绕解决数据存在的不平等问题。
有没有超有挑战性的面试?
我不得不说,国家安全局在数据科学方面的立场是最令人难忘的。你被邀请参加一个数据科学考试,最后你进入一个测试机构,在那里你在一台超级安全的计算机上参加考试,不允许使用手机或任何东西。
最终在你离开后,你会收到一封邮件,询问你是否通过了考试,然后他们会在几个月内联系你进行面试。我收到的电子邮件说我通过了,但我再也没有收到回复。虽然考试对我显示我需要学习什么概念很有帮助,它填补了很多空白。
我遇到的最具挑战性的面试问题来自对 Karat 的一次面试。我最终参加了技术面试,但后来他们改变了态度,告诉我他们现在更需要一名数据工程师,而不是数据科学家。这似乎是一个非常普遍的问题,因为在构建数据基础设施之前,您无法真正进行数据科学研究。带回家的作业是超级乱的数据。试图从杂乱的数据中建立一个好的模型需要大量的探索。
你找到对你的采访有价值的资源了吗?
我发现 采访查询高级 在展示其他数据科学技术公司的问题方面对我非常有用。很容易就可以列出清单,问自己每个问题,并通过检查答案来确保自己知道正确的答案。我发现情景商务问题很有帮助,因为像脸书、亚马逊、谷歌等大公司..总是在寻找一个特定的具有行业知识的人。
面试查询 SQL 问题
我也用过几本书。其中一本是 O'reilly 写的实用统计学书籍,它确实帮助我恢复了记忆。我申请和面试的一些公司有建立模型,你需要在最后得到一个分数才能通过。这实际上给了我一个机会来了解更多关于不同的升压算法。
你会给现在正在找工作的数据科学家什么样的建议?
不要沮丧。每个公司都是不同的,只要你能从面试中学到东西,那么下一次面试会更好。我在新冠肺炎期间开始找工作,当时正处于两家公司的最后面试过程中,它们都冻结了招聘。
我的租赁合同将于四月底到期,所以我开始担心找不到地方住。3 月中旬,我开始重新搜索,试图将我申请的公司类型从一般的咨询公司改为传统的科技公司。
我发现与咨询公司交谈真的很奇怪,因为技术筛选是与顾问而不是数据科学家一起进行的。这导致了怪异的案例研究。
我最终发现我面试的最后三家公司是我最好的面试。他们也是结构化程度最低的数据科学家面试。但当我与一位数据科学家进行了一个半小时的非常随意的对话时,我真的非常喜欢,因为我们可以讨论工作和职责。
我最终接受了 NetworkNext 的邀请。面试由两个 30 分钟的面试组成。他们只是知道他们想给我一份工作,因为他们说我对在视频游戏行业工作的热情一直是我的梦想。
你认为数据科学面试的未来会怎样?
我认为数据科学面试的未来需要远离带回家和询问人。我不认为带回家做任何事情,因为他们给用户实践,但 你做了很多工作,却没有得到很多回报 。当你可以和某人谈论一个项目,谈论细节时,更多的东西会显露出来。
感谢阅读
- 如果您即将参加数据科学面试,请查看 面试查询 !
- 查看我的 Youtube 频道 了解更多数据科学内容、面试指南和解决问题的技巧&。
- 查找更多数据科学面试指南,如面试查询博客上的 谷歌数据科学家面试 和DoorDash 数据科学家面试 。
原载于 2020 年 6 月 2 日 https://www.interviewquery.com**。
写作学位如何帮助我在数据科学领域找到工作
科学和技术交流打开了大门
Pixabay 免费图片
写作支付了我的账单
几年过去了,经济开始复苏,但金融危机导致的经济衰退让应届毕业生的就业市场变得艰难。2011 年底大学毕业后,我开始寻找一份技术写作的工作,并获得了科学和技术交流的学士学位,为了给那些 2008 年不在的人提供视角,我的学位课程不得不取消实习要求,因为学生们找不到他们。几乎没有人在招聘!过了一段时间,我满足于在一家软件公司做全职带薪实习,做产品文档专员。我需要经验,这似乎是一个很好的工作场所,而且报酬比我的零售工作高!此外,我在六个月内就完成了,如果我不喜欢,甚至更短,所以这是一个很好的风险/回报。
与一群编辑和评论我作品的人一起一天专业写作八小时是一次奇妙的经历,教会了我很多。当然,除了写作,我还做了其他事情,比如组织可视化和编辑信息,参加与业务团队的会议,以及与公司的主题专家(SME)一起工作,但是我的大型项目是编写涵盖软件功能的面向客户的文档。我钻研业务分析师概述的需求,自己摆弄软件,然后开始记录文档。如果有人想以写作为职业,我强烈推荐探索技术写作和产品文档作为职业道路!知道全国各地的人们发现我的话很有帮助,同时我磨练了我的沟通技巧,可以转化到其他行业和专业,这让我感觉很有收获。
被迫写作的瓶颈
实习结束后,我决定留在这家公司,并加入他们的支持团队,因为文档团队没有空缺。我在实习期间获得的知识和技能很容易转化到我的新工作中。虽然没有人编辑我的作品,但我仍然每天写作,通常是类似于文档的一步一步的指导,所以我仍然得到了练习。随着时间的推移,我利用我的沟通技巧创建了培训项目和内部知识文章,为团队增加了很多价值。总的来说,这份工作真的很有回报,我赚了不少钱,所以我坚持了很长时间。
几年过去了,我终于看到了两条前进的道路:
1.继续关注前端支持,寻找更多写作和培训的机会。
2.转向关注软件支持和学习数据库的技术方面。
作为一个一直对计算机感兴趣的终身学习者,我选择了第二个选项。这也让我走上了一条硬技能之路,我可以把这些硬技能添加到我的简历中。一旦我学会了如何查询数据库,我就着了迷,并把写博客放在一边,在空闲时间学习结构化查询语言(SQL) 。我向我的技术支持同事询问复杂的 SQL 示例,并在家里设计数据库来存储股票市场报价。我付出了巨大的努力,最终爬上了技术支持的阶梯。
我,一个文艺复兴时期的人
文艺复兴时期的男人(莱昂纳多·达芬奇,阿克巴大帝,伽利略,我(埃里克·克莱彭))
当我在大学开始学习技术写作时,我从未想过十年后我会成为一名计算机程序员。其实我学写作的原因之一就是因为不喜欢数学和数字。我年轻时尝试过编程,在大学里我喜欢逻辑和符号逻辑,但计算机科学和高等数学就是不适合我。无论如何,进入 SQL 充当了推动我进入数据分析的催化剂:我对金融感兴趣作为一种爱好,我研究了可用性和人体工程学作为我的技术写作学位的一部分,所以我熟悉一些统计数据。我说的重点是,查询数据感觉像是另一种形式的技术写作,因为两者都是将复杂的步骤分解成小的逻辑部分。我在技术写作方面的教育使我很容易过渡到数据分析。
这是一个艰难的决定,但我决定放弃我的空闲时间,冒险从事技术支持方面的轻松工作,并通过加倍学习分析来致力于职业发展。我不仅每天在工作中使用 SQL,而且还参加了我所在的州立大学举办的数据分析编码训练营。我回学校了!在为期六个月的项目中,我使用 Excel、Python、NoSQL、SQL、R 和 JavaScript 探索数据。这是大量的工作,但它让我接触了大量的语言和概念,如机器学习。
大约在同一时间,数据科学一词到处出现,并被吹捧为当今“最性感的工作”。我在训练营之前就听说过数据科学,我在通过一些编码书籍学习 Python 基础知识的同时也涉猎了 sci-kit learn,但是我并没有真正理解这个领域到底是什么。我知道我喜欢科学和数据,所以我想我应该去看看。训练营的重点不是数据科学,但是我的最后一个项目是使用 TensorFlow 建立的一个葡萄酒推荐网站,该网站至今仍在运行!训练营正是我需要建立势头并打入分析或数据科学的地方。
尼奥也没有进行第一次跳跃
我带着不错的项目组合从训练营毕业,并对自己的编码能力有了新的信心。我注意到数据科学部门有一个数据工程师的职位空缺,所以我申请了。在该公司工作多年后,我拥有广泛的领域知识,我有资格证明我是一个快速的学习者,能够处理一些 SQL 和 Python。不幸的是,这还不够。我需要更快地编码,并对我的算法和计算机科学概念的知识更有信心。这是一个令人失望的结果,但是这个部门需要一个比我更有经验的人,所以我接受了这个结果,全力以赴。
在我被拒绝后不久,部门经理联系我,询问团队中一个产品分析师的职位。我调查了一下,这份工作非常适合我的技能。这个职位需要大量的交流,但是给了我自由去编码,这样我就可以提高我的技能。我想从事数据科学方面的工作,我想写作和编码。这份工作似乎是天作之合!
随着我职业生涯的顺利进行,我继续在业余时间学习和编写代码,最终也回到了写作中;我不能永远离开。当我进入数据科学领域时,我经常看到在线出版物《走向数据科学》。在阅读了足够多的文章后,我建立了信心,开始在 Medium 上写博客,记录我的编码项目和生活经验。我的文章得到了很多积极的反馈,Medium 已经变成了一个巨大的额外收入来源。我强烈推荐任何对写作感兴趣的人尝试一下。
自然语言分析师
在数据科学的所有主题和子领域中,我自然地抓住了自然语言处理(NLP)。我们交流的复杂性和微妙性似乎一直是让我们成为独特而聪明的物种的决定性因素,因此训练机器理解语言将交流从模糊、有说服力和充满感情的东西转变为机械、有序和可预测的东西。然而,我对 NLP 了解得越深,我就越明白它是一个新类型的技术作家将会出现的脚手架:自然语言分析师。
几周前,在他们的人工智能博客上,谷歌宣布了使用自然语言查询数据库的进展。研究人员使用高级语言模型(BERT)和机器学习提出了一种不使用 SQL 等查询语言返回查询结果的方法:
https://ai . Google blog . com/2020/04/using-neural-networks-to-find-answers . html
虽然这篇文章的结论是这项技术还有很长的路要走,但有理由认为在十年内自然语言查询将成为普遍的做法。数据分析和技术写作将以前所未有的方式融合在一起,为这两个领域的新机遇让路!这是有意义的,因为在分析和技术写作之间有很多重叠的技能:统计、批判性思维、视觉修辞、逻辑、有说服力的讲故事…仅举几例!
探索技术写作!
作为一名产品分析师,我在数据科学领域工作,与利益相关者就团队项目进行交流,查询数据库以获得商业智能,编写 python 应用程序以共享分析,并探索机器学习模型/管道以改善内部分析基础设施。要想在这个职位上取得成功,强大的写作能力是必备的条件,所以我感谢我在科技交流方面的背景。虽然我既不是“数字迷”,也不是杰出的数据科学家,但写作背景让我能够追随自己对数据和编程的热情,这让我在数据科学领域找到了一份我非常喜欢的职业!
谢谢大家!
- 如果你喜欢这个, 在 Medium 上关注我 了解更多
- 通过订阅 获得对我的内容的完全访问和帮助支持
- 我们连线上 LinkedIn
- 用 Python 分析数据?查看我的 网站
学习如何写产生收入的文章!问问你自己写作是否适合你。找到一个合适的位置,成为一个…
medium.com](https://medium.com/swlh/the-four-principles-that-transformed-my-writing-into-content-that-earns-money-db9786086cb3)
佛兰德制图员和 PNGs 如何让网络地图成为我们日常生活的一部分
或者 web 地图的简史
你上次迷路是什么时候?真的好好想想。
除非你没有手机或者你的手机没电了,否则你很可能会有方向告诉你去哪里,或者你最终会看到一个蓝点告诉你你到底在哪里。
这个概念,在任何给定的时间知道你的确切位置,仅仅在 15 年前还是一个遥远的想法。然而,在此后的几年里,地图、位置以及我们与周围世界互动的方式都发生了变化,你可能再也不会感到迷失。
任何浏览过新闻机构网站的人都可能看过一张地图,上面显示了疫情冠状病毒每天是如何变化的。在线可视化地理空间数据并不总是一件容易的事情,这一时期也带来了我们与地理空间数据在线交互方式的重大变化。
位置以及我们如何与之互动已经在我们的生活中无处不在。我们如何走到这一步的故事包括一长串个人、公司和想法,它们最终塑造了我们与世界的互动方式。这个故事没有一个版本可以讲述每一个部分,但我希望它能帮助你了解我们是如何走到这一步的。
制图学的简要背景
这段历史与漫长的地图绘制历史紧密相连。地图学既是科学又是艺术。它是关于呈现世界的本来面目,同时也要做出巨大的妥协:对于每一个包含某些东西的选择,你都必须排除某些东西。
这适用于地图上的实际内容(不可能在一张地图上表示地球上的每个特征),也适用于地图的投影,或者 3D 地球如何投影到 2D 表面。
葡萄牙发现地图和密克罗尼西亚棒图
整个制图员都明白这个概念,他们的地图告诉一个单一的故事,只有一个目的。玻利尼西亚和密克罗尼西亚航海家创造了详细的棒图,使他们能够绘制岛屿之间的联系,了解海浪模式。葡萄牙探险家绘制了详细的海岸线地图,内部几乎空无一物,因为他们只专注于发现和航行。
墨卡托 1569 年世界地图
1569 年,一位名为杰拉杜斯·麦卡托的佛兰德制图员发布了一张带有新投影的地图,它只有一个目的:帮助水手们用一条直线在地图上找到任何航线。
数百年前创建的这种投影在我们与在线地图互动的方式中发挥了重要作用。几乎我们在网上看到的每一张地图都使用墨卡托投影或它的细微变化。
然而,网络地图提供商使用它不是因为它能够找到两点之间的直线路径,而是因为你可以将整个地球投影到一个几乎正方形的图像上。我们稍后会谈到这一点的重要性。
当然,对于从墨卡托投影中获得的东西,地图工程师也放弃了一些东西——在这种情况下,当你远离赤道时,物体的扭曲。
墨卡托投影中的尺寸失真
这在大范围内(或当地水平)你不会注意到,比如在你的街道上,甚至在你的城市或州。但是在小范围内(全球视角),这使得格陵兰岛看起来和整个非洲大陆差不多大,实际上非洲比格陵兰岛大 14 倍
在我们进入在线地图的详细历史之前,有两个关键点需要注意。首先,网络制图惯例从一开始就与制图设计和科学惯例不一致。询问任何受过 GIS 培训的人,他们可能会告诉你墨卡托不是他们显示全球地图数据的首选。
第二个后果是大多数 web 地图中地球的变形。随着网络制图成为我们与世界互动的默认方式,数十亿人对世界的理解将发生根本性的扭曲。《白宫群英》中的这个片段很好地解释了这个问题,几乎所有从事地理或制图工作的人都知道这个问题。
网络上的第一批地图
尚不清楚第一张在线地图是什么。它很可能是我们永远不知道的某个地点的静态地图图像。区别静态网络地图和真实网络地图的是交互性。事实上,用户可以参与并选择在地图上看到的内容,这使得网络地图成为一个独特的类别。有史以来第一次,地图的查看者可以决定他们看到什么,而不仅仅是制图员。
许多人都同意,施乐公司在 1993 年推出了第一批网络地图之一的 PARC 地图浏览器。功能很简单,你可以查看地图,放大和缩小,打开和关闭图层,等等。即使在这个早期的应用程序中,我们也可以了解今天网络地图的一些基础知识。
施乐 PARC 地图查看器
为了在地图上显示数据,PARC 地图查看器将读取来自用户的请求,并使用地理数据库呈现地图图像,然后将地图图像从服务器返回到浏览器。
宾夕法尼亚州立大学地理 585 课程的网络地图请求循环(链接此处
这个循环——用户请求、数据渲染、返回给用户——仍然是大多数 web 地图的核心。甚至包括经度和纬度参数的 PARC 地图浏览器 URL(见上)今天仍然在谷歌地图中。
PARC 地图查看器还用于 web 制图的另一个基本元素:在地图上显示其他数据。在这种情况下,它是显示全球地震的数据。全球地震定位器是由爱丁堡大学于 1994 年开发的,该项目页面仍然在线,并提供了地图如何工作的描述:
最初的系统使用美国地质调查局(USGS)下属的国家地震信息中心(NEIC)提供的数据。这些数据提供了地震发生后几小时内的基本信息。作为对查询的响应,数据是从科罗拉多州戈尔登市的美国地质调查局服务器上动态获取的。这些数据然后在爱丁堡被处理成适当的格式,最后在美国加利福尼亚州帕洛阿尔托的施乐 PARC 地图浏览器上显示出来。阅读原始地震定位器的完整理由。
这被称为混搭,在谷歌地图发布后不久,我们将看到一个开发者如何采用同样的概念,并开始了一系列创造新行业的活动。要让网络地图真正起飞,需要两家有相同愿景的公司:允许用户查找一个地址,并向他们展示该地址的地图。
1996 年, Mapquest 上线。同年不久, Multimap 在英国推出。这些是第一批面向消费者的 web 地图服务,从这一点开始,世界上每个人与位置交互的方式开始改变。
********
早期输入你的地址并看到一颗红星出现在他们家所在的地图上的新奇感是如此独特,以至于这些服务很快成为最受欢迎的在线网站。Mapquest 最终成为一家上市公司,并最终在 1999 年被 AOL 以 11 亿美元收购。
当然,这不仅仅是在地图上找到你家的新奇感,而是在两个地点之间获取驾驶方向的能力。印刷道路地图的缓慢衰落已经开始,显然基于消费者的在线地图有着巨大的市场。
Mapquest 本身为我们今天所知的网络地图添加了一些基本元素。缩放栏以及平移地图位置的功能是 web 地图的新增功能。
带有平移和缩放功能的 Mapquest
对于用户来说,平移和缩放地图的主要缺点是每次地图移动时,都会重新加载完整的地图视图。因此,虽然地图是交互式的,但最终还是相当慢。
在可预见的未来,大多数 web 地图将使用这种基本结构。这一时期见证了其他几个地图提供商的兴起:传统的 GIS 提供商也推出了他们的网络服务(MapInfo 和 ESRI),一个名叫 Steve Coast 的人在 2004 年启动了一个名为 OpenStreetMap 的项目,同时雅虎和微软也开始探索地图服务。
在此期间,谷歌一直在进行几项重要的收购,这些收购最终构成了谷歌地图的基础。然后在 2005 年 2 月 8 日,一切都变了。
谷歌地图和地图切片
谷歌地图(2005 年)
谷歌地图并不是第一次尝试基于位置的搜索。该公司在 2003 年推出了一项名为“谷歌本地”的功能,用户可以在搜索中加入一个地点。如果你想找到伊利诺伊州芝加哥附近的咖啡店,你只需输入你的位置和搜索词。
谷歌本地搜索
该功能在一天结束时并不是很受欢迎。 Recode 采访了 2015 年谷歌地图早期的几名团队成员,本地产品经理 Bret Taylor 分享了他对该项目的见解:
“这是一个几乎无用的项目,”泰勒说。
按位置搜索的最大例子是你应该能够搜索帕洛阿尔托附近的咖啡店。但是 Taylor 记得 Sun Microsystems 把它的地址放在了它网站的每一页的底部,并且它用咖啡来命名它的产品(最著名的是 Java)。这破坏了整个例子。
“它每天的用户数为零,”泰勒说,他现在是生产力初创公司 Quip 的首席执行官,此前他曾担任脸书的首席技术官。
但是谷歌并没有尝试将位置引入他们的搜索产品,2004 年,该公司开始了收购 Keyhole、T2 where 2 Technologies 和 T4 Zipdash 的进程。这三种技术将分别形成我们所知的谷歌地球、谷歌地图和谷歌地图移动版。
Chris Sacca 现在因他的各种投资而闻名,他是领导收购 Keyhole 的投资团队的一员,他分享了来自同一篇 Recode 文章的内容:
我永远不会忘记,我们在一次会议上讨论收购 Picasa,这个看起来有点像莫里西的年轻人 Adrian Graham 正在浏览幻灯片,推销我们如何整合 Picasa,而[谷歌联合创始人] Sergey [Brin]完全被分散了注意力。这是在 42 号楼的一个会议室里,里面有一个爬梯机,因为谢尔盖想在会议中更好地利用他的时间。
他把他的笔记本电脑给几个人看,人们说,'哦,妈的,干我,干我。'这个做演示的家伙真的开始流汗了,谢尔盖最终站起来拔掉投影仪,说‘这东西很酷,我们应该买下来’,然后他把笔记本电脑插到投影仪上,给我们看了锁眼。从字面上看,这些高管喊出他们的地址是因为他们想从太空中放大他们的房子。
用户在 Mapquest 地图上看到一颗红星时的兴奋感,谷歌团队和谷歌地球推出后的数百万用户,都来自于从太空放大他们的房子。
Zipdash 将成为谷歌地图移动版的第一个版本,谷歌于 2004 年收购了这个版本。该应用程序允许用户在手机上看到交通延误,还允许用户利用手机的 GPS 定位来获取与他们实际位置相关的信息。
Where2 是我们在笔记本电脑和电脑上使用的谷歌地图的基础,事实上,也是今天所有网络地图的基础。他们的愿景是将地图放在导航体验的中心,而 Mapquest 依赖于一系列打印的方向和街道标志图标。
这家澳大利亚公司几乎被红杉资本收购,红杉资本最终放弃了这笔交易,但最终将团队介绍给了拉里·佩奇。然而,2 构建的技术是桌面应用程序。 Stephen Hutcheon 描述了团队如何快速将它转变为一个网络应用:
但是拉里·佩奇和谷歌对应用软件不感兴趣。“我们喜欢网络,”据说他对戈登的合伙人之一拉斯·拉斯穆森说。他给团队设定了一个截止日期,让他们的想法在网络浏览器中工作。
该团队完成了交易,并于 2004 年 8 月签署了一项金额未披露的交易,这是谷歌有史以来第二次收购 Where 2。
该团队使用了相同的基本循环,即从浏览器向服务器传递请求以返回地图数据,然后将其加载到浏览器中。主要区别是他们如何使用 AJAX,这是 Web 2.0 转换中的一个基本工具,它允许这个循环在后台发生,而不会中断用户的体验。
一旦这三家公司正式加入谷歌,他们就开始构建谷歌地图。从现在开始,他们构建的东西最终将成为所有网络地图的标准,并允许用户用鼠标来平移、缩放和移动地图——滑动地图。
技术上称为切片 web 地图,让地图以这种方式工作的关键是,地图图像不是一个单一的图像,而是许多拼接在一起的切片。这很重要,原因有几个。
首先,瓷砖本身非常小。他们想出的尺寸,256 像素乘 256 像素,成为网络地图的默认尺寸,可能只有几千字节。每一个都可以很快加载,当它从服务器返回时就会显示出来。
不像 Mapquest 和 PARC 地图查看器那样每次都要为完整的地图做一次完整的往返旅行,地图分块会做 10 到 20 次非常短的旅行。这些地图也足够智能,可以加载地图视图之外的切片,因此当您开始平移地图时,这些切片将可供您使用。
Google Maps 上加载地图切片的示例
每个缩放级别都有自己的一组切片,因此当您放大时,会加载另一个切片图层用于该缩放。缩放级别为 0 时,整个地球将适合一个单幅图块,缩放级别为 1 时,它将拆分为 4 个单幅图块,缩放级别为 2 时,它将拆分为 16 个单幅图块,以此类推。艾伦·麦康琪的演讲非常详细地解释了瓷砖是如何工作的。
来自 OpenStreetMap 的图块 0(链接此处)
不同缩放级别的地图分块
来自 OpenStreetMap 的一个单幅图块(链接此处)
在已经开发的所有地图投影中,有一种非常适合将整个地图放在一个正方形的 PNG 图块上,这就是墨卡托投影。为航海导航设计的地图投影现在将被推向数十亿台计算机和手机,仅仅因为它为创建小正方形 PNG 瓦片提供了效率。
第二个效率提升体现在图块的缓存上。虽然以前的地图服务每次都必须渲染地图,但一旦生成了切片,谷歌只需将其放入存储中,如果再次请求,它就会使用缓存的版本。这意味着更快的地图。第三,如果一个图块出现故障,地图上不会显示该图块,整个地图也不会受到影响。
当谷歌地图在 2005 年推出时,它获得牵引力的速度很慢,但最终,随着他们添加卫星图像,它变得越来越受欢迎,因为人们开始找到谷歌高管在地图上找到自己房子时找到的那种快乐。第一次发射将作为“岛屿地图”被永远记住,因为地图上唯一的陆地是北美,四面环水。
岛屿地图
许多其他公司纷纷效仿:雅虎、必应、Teleatlas(现在是 TomTom)、Navteq(现在是诺基亚的一部分)、Yandex 和百度。ESRI 也跟上了,但他们都使用了谷歌地图的相同基础和创新。
谷歌最终赢得了面向消费者的在线地图之战。以至于当苹果公司需要一个地图提供商来发布他们的新 iPhone 时,他们形成了一个高度秘密和令人不安的忠诚,这种忠诚从 2007 年开始持续了五年。
当谷歌添加一个小蓝点显示你的确切位置时,它开启了一个基于你的位置的整个行业。Foursquare 和 Yelp 等公司,以及从嵌入在其他应用程序中的广告工具收集位置数据的数据提供商将开始涌现,并继续改变我们与周围世界的互动方式。
到目前为止,大多数创新都涉及到地图本身——道路、水和你看到的其他一切。但是一个好奇的开发人员问了一个问题“我可以把我自己的数据放在地图上吗”,而其他许多人问,“如果我想使用我在地图上看到的数据怎么办”。这两个问题将推动网络地图的下一阶段创新。
Mashups 和 OpenStreetMap
到目前为止,大多数 web 地图都集中在基础地图上:道路、高速公路、公园、水景等。然而,即使在最初的网络地图中,也很明显需要在地图上显示其他数据。
保罗·拉德马赫破解了混搭地图,或者使用你拥有的数据并将其放在网络地图服务之上,保罗·拉德马赫有效地找到了一种方法,使用谷歌地图中未经批准的 API在谷歌地图之上显示 Craigslist 的租房列表。****
********
HousingMaps.com
结果是housingmaps.com(现在是一个活着的遗迹),它允许你在地图上查看房屋列表,过滤结果,并点击打开 Craigslist 中的列表。这种功能是我们今天认为理所当然的,但这是这种类型的第一张地图。
Rademacher 有效地破解了谷歌地图,在免费提供的谷歌地图基础上开发了自己的产品。虽然谷歌本可以采取关闭网站和限制访问这些 API 的路线,但他们看到了一个机会。
他们最终雇佣了 Rademacher,根据他的 LinkedIn,他现在在苹果工作,并创建了谷歌地图 API 。这使得任何开发者都可以将谷歌地图作为一项服务来使用,并将地图产品商业化。
这项服务已经有了很大的发展,包括许多其他工具和产品,并取得了财务上的成功。在优步 IPO 的披露表格中,该公司在 2016 年 1 月至 2018 年 12 月期间向谷歌支付了 5800 万美元。
在 2000 年代后期,在线地理数据的整体可视化仍然非常不成熟。首先,数据仍然很难访问,除非你知道在哪里可以找到和如何使用 GIS 数据。
许多 web 地图可视化都是在 Flash 中构建的,完全由制图员/开发人员定制和管理。D3.js 开放了许多在线显示地图数据的选项,但对于新手用户来说,这个库仍然很难掌握。
虽然谷歌为用户在地图上放置数据开辟了许多不同的途径,但地图上的数据仍然完全掌握在谷歌手中。
地图空间开始像 2010 年代初那样增长的原因并不单一。这在一定程度上与用户希望创建自己定制风格的底图有关,谷歌在这方面的灵活性有限。
其中一些与数据访问有关。谷歌地图允许你进行编辑,但你自己以后不能访问这些数据。有些是出于需要。在人道主义危机或地图绘制不足的地区使用地图是国际援助界日益增长的需求,或者在地图上显示比谷歌允许的更多的数据,如森林砍伐数据。
不管是什么原因,有越来越多的公司和项目在这个时候开始或受到欢迎。始于 2004 年的 OpenStreetMap 随着更多的贡献者和更多的数据被添加到地图中而慢慢获得了关注。
********
与 2010 年相比,2006 年 OpenStreetMap 的贡献
OpenStreetMap (OSM)或多或少起到了地图维基百科的作用,允许任何注册用户在地图上添加或编辑特征:道路、水路、兴趣点等。世界各地的社区正在慢慢地向地图添加更多的数据(你可以在这里看到一段时间的贡献,在 OSM 维基上看到更详细的事件时间表)。
OSM 在美国的贡献
随着地图上的数据成为一个可行的来源,其他公司开始起步,其中许多是开源社区。 Mapbox 成立于 2010 年,目的是在 Development Seed 的资助下,使用 OpenStreetMap 数据为非营利组织提供定制地图服务。CartoDB (现在的 CARTO)成立于 2011 年,是一个可视化大量森林砍伐数据的项目。以及同年发布的 Leaflet.js ,允许用户用 Javascript 开发任何底图和数据的 web 地图。
对地图感兴趣的用户群体正在世界各地扩大。Maptimemeetups、 免费开源地理空间软件(FOSS4G) 和 地图状态 会议,许多不同的 MeetUps 正在成长和扩大。
所有这些趋势的共同点是,他们都在探索网络地图技术,使用与谷歌地图相同的技术基础,但使用开放的工具和技术。
发生了两件大事,改变了数据在线可视化的方式:2010 年海地地震和谷歌地图 API 的变化。
2010 年海地发生地震时,该国没有可行的受灾地区在线地图。谷歌地图几乎没有任何数据,地面救援工作没有任何地图导航太子港提供援助。
所发生的事情会戏剧性地改变 OSM 的道路。地震后几天,来自世界各地的用户开始在地图上添加数据,几天后,OSM 成为该国救援工作使用的地图。这篇来自世界银行的博客详细回顾了人们的反应:
来自大约 29 个国家的 450 多名 OpenStreetMap 志愿者使用这些图像对道路、建筑物和其他特征进行数字化处理,在短短几周内创建了现有的最详细的海地地图。OpenStreetMap 很快成为许多参与响应和重建的组织的实际底图。
2010 年地震前后的 OSM 太子港
人道主义开放街道地图团队(HOT) 至今仍然活跃,社区成员向有需要的地区提供地图数据。这次活动显示了这个社区的力量有多大,OpenStreetMap 中的数据可以创建一个可行的地图,其数据可以与谷歌和其他提供商相媲美。
OSM 是建立在开放数据的基础上的,这意味着你可以下载和使用该项目的数据,并根据他们的服务条款使用它。新的地图提供商现在有了一种可行的方法来创建带有不断增长的全球数据库的底图。
第二个事件是谷歌地图 API 的重大价格变化。对于那些对创建简单的 mashups 来将地图集成到他们的产品中感兴趣的用户来说,Google 是他们的首选平台。对于许多组织来说,免费或低成本的工具现在非常昂贵,成本高得令人望而却步。
谷歌最终改变了他们的限制,但在此之前,许多人已经离开了这项服务,最突出的是 Foursquare 转而使用 Mapbox 提供服务。
诞生于开源社区的地图公司现在有了一条可行的路线来进行商业竞争,并为那些想要在线创建地图的人提供新的工具。
这些新工具和数据帮助地图成为我们日常生活的一部分。地图成为 Yelp 和 Foursquare 等热门应用的入口。新闻媒体将更多地图添加到他们的故事中,应用程序开发人员可以围绕地图创建完整的体验。
********
各种 web 地图和应用程序
随着 OpenStreetMap 提供更多位置数据,开发人员能够创建自己的位置数据服务,如路线指引或地理编码(从地址获取地理位置),以直接与谷歌产品竞争。用于可视化地理数据的网络地图空间发展如此之快,以至于谷歌最终在 2016 年关闭了其用于可视化数据的谷歌地图引擎产品。
在此期间发生的一项重大创新是矢量瓷砖。该技术的工作方式与前面讨论的地图切片相同,请求发送到服务器,切片返回给用户。然而,返回的不是图像块,数据本身存储在块中,浏览器在数据上添加样式。
矢量缩放
不带样式的矢量单幅图块(来自地图框)
这意味着不仅地图控制更加流畅,而且地图可以根据其他数据改变样式,比如用户偏好。谷歌地图这样做是为了让广告出现在他们的地图上,并根据你的谷歌活动强调你可能喜欢的兴趣点。这意味着谷歌地图的每个用户在地图上可能会有不同的体验。
随着我们继续与周围的世界互动,我们也产生了大量关于我们的运动、偏好和位置的数据。为了可视化这些数据,出现了一套新的技术,也是来自开源社区,将这些数据放到地图上。
更多数据、人类流动性和未来
近年来,随着地图数据从地图切片进入浏览器,web 制图突然向一批新的开发人员开放。 WebGL 于 2011 年发布,旨在更高效地在浏览器中渲染图形。
从 3D 渲染到视频游戏,它被广泛应用于各种技术中。随着数据以更快的速度在浏览器中可用,这项技术最终非常适合在地图上可视化地理空间数据。
这些创新源于需求——产生了越来越多需要可视化的数据。优步是一家在这方面苦苦挣扎的公司,它拥有包含数百万乘车记录的数据,这些记录可用于确定从高峰定价到寻找更有效的城市出行方式的一切事情。
********
虽然许多其他公司已经开发了具有类似技术基础的工具,但优步接受了创建工具的挑战,这些工具使大量数据的可视化既高效又具有视觉吸引力。利用将矢量数据传入浏览器的先进技术,优步数据可视化团队开发了 Deck.gl 。
由于 WebGL 使用 Javascript 并且被所有主流浏览器支持,它成为了前端开发者的热门。几年前,Mapbox 发布了 Mapbox GL ,它将相同的技术引入了基础地图,但 Deck.gl 允许任何开发者在地图上显示大量数据,并执行聚合和 3D 可视化。
来自 Nicolas Belmonte 的 Deck.gl 演示
优步不久后也发布了Kepler . GL,允许非开发者上传数据,并通过用户界面创建自己的可视化。我们很可能会看到更多的 GL 可视化,这些第一批项目提供了一个令人兴奋的视图,我们可以开始期待在线地图。
开普勒
海量数据的可视化当然离不开海量数据。我们所有使用移动设备的人都以这样或那样的方式通过手机上的应用程序贡献了这些数据。
从嵌入在移动应用、地图或其他应用中的 SDK 中获得的位置数据已经爆炸式地成为一个主要行业,随着时间的推移,它使用你的位置 ping 来做从城市规划到广告定位的一切事情,最近还跟踪了社交距离的有效性。
虽然这些数据可以为城市交通规划等广泛的分析提供有价值的见解,但该行业实际上不受监管,这意味着数据的收集和分发方式因公司而异。这些数据对营销人员来说非常有价值,追踪你在哪里生活和购物可以告诉他们很多关于你的行为,并允许非常有针对性的广告。
一个国家的登陆页面,跟踪
《纽约时报》发表了一个围绕位置数据行业的强大系列,名为, 【一个国家】,跟踪了 潜入数据的,它如何保护和不保护你的个人信息,以及你如何跟踪个人,包括总统。
Foursquares 首席执行官呼吁政府监管行业,尽管他们的业务已经从消费者应用转向移动数据提供商本身,但立法可能会在某个时候更好地保护消费者。
虽然位置数据行业与我们互动的网络地图没有直接关系,但你手机上的蓝点是一个不那么微妙的提醒,表明你的设备知道你在哪里,并在某种程度上可能让消费者知道他们为什么会看到一个小时前刚刚逛过的商店的广告。
自从最初的地图首次出现在网上以来,网络地图已经发生了几次变化和转变。当前围绕通过像 Deck.gl 这样的库在浏览器中可视化数据的开发将继续前进,特别是随着支持技术的进步。
作为一个开源项目,尚不清楚它将如何以及是否会商业化,但很可能许多公司将开始赶上一些已经发生的进步。
随着监管或其他控制措施将被置于行业之上,位置跟踪领域可能会看起来非常不同,最有可能的是首先从州级开始,因为加利福尼亚州已经围绕这些数据探索了立法。然而,在短期内,移动性数据提供了关于行为如何影响感染率和住院率的重要见解。
在新的地理区域,数据的需求只会增加,包括质量和更广泛的可用性。Mapbox,这家开始使用 OpenStreetMap 数据来帮助非营利组织的公司,已经将汽车用例作为一个主要焦点,包括使用相同 OSM 数据的增强现实导航。
随着机器学习的增加,对机器学习模型中使用的大量空间数据的需求也将增加。全球人口普查和兴趣点等数据仍由商业提供商控制。一些公司,如 CARTO,已经开始为来自公共和私人提供商的位置数据创建一个中心资源。
道路和物理特征已经被世界各地的合作者开放,不同类型的数据如何进入开放环境还有待观察。随着需求的扩大,这很可能会成为一些合作项目的一部分。
这些年来,Web 地图发生了巨大的变化,然而发展的步伐似乎并没有放慢。它是由我们对世界的答案和信息的渴望和需要所驱动的。最终,接下来会发生什么,就像第一张地图被人类创造出来时一样,将由我们想知道的关于我们世界的事情来驱动,并由我们所有人来决定。
GPT 3 博客如何在两周内获得 2.6 万访客
Adolos 的热门帖子截图(来源)
学习机
GPT-3 匹配人类作家的写作技巧吗?还是写作质量杠杠定的太低了?
OpenAI 的 GPT 3 号已经成为公众关注的焦点很久了。它目前被认为是 NLP 相关任务的最先进技术,取得了比其前辈更好的结果。
GPT-3 还没有公开。然而,OpenAI 允许 beta 测试人员访问该模型的 API,让人们对该模型进行实验。
事实证明,该模型甚至可以通过处理自然语言的描述来创建各种语言的代码。这是 Twitter 上发布的一个例子。
Sharif Shameem 发的推文(来源
这些关于 GPT 3 号能力的推文引发了很多反应。一篇题为“最新的 AI 会杀死编码吗?“考虑人工智能接管编程工作的想法,紧接着是另一篇文章” GPT-3 不会接管你的编程工作
在推文的视频中,该模型将处理诸如“彩虹的每种颜色都有一个按钮”的提示,并正确地创建了 7 个按钮,每个按钮代表彩虹的一种颜色。
在大约 50 秒的时候,您会注意到模型生成了一个带有语法错误的代码。它实际上在创作者稍微调整之后工作了,这是相当令人惊奇的。然而,我不认为它会让程序员在不久的将来被淘汰。
虽然创建编程脚本可能不是 GPT-3 的最强领域,但一名大学生将继续展示该模型在何处可以取代人类。博客。
GPT-3 不擅长逻辑,所以励志的帖子可能是最好的,也许还有一些关于生产力的文章。(来源)
在他自己的博客中,利亚姆·波尔说他选择自助主题是因为“GPT 三号擅长创造触动情感的优美语言,而不是硬逻辑和理性思考。”
利亚姆创建了子堆栈页面 Adolos ,这是一个关于希腊欺骗之神 dolos 名字的巧妙的文字游戏。他为每篇文章定义了标题和介绍,并让模型根据它们创建内容。在做了一点语法和事实更正后,他发布了这些文章。
第一贴,感觉不毛之地?也许你应该停止过度思考。”,最终登上黑客新闻榜首。这是上述文章中的几段。
定义#1:创造性思维(CT)是用你的头脑想出现实中不存在或以前从未存在过的想法的行为。它是一种涉及逻辑和理性运用的精神活动形式。
定义#2:过度思考(OT)是试图提出别人已经思考过的想法的行为。OT 通常会产生不切实际、不可能甚至愚蠢的想法。
那么,这两个概念是如何相互联系的呢?嗯,如果你像我一样,那么你可能会发现自己有时两者都在做。你可能整天都在做一个项目,但是你仍然觉得你只是在走过场。这是因为你想太多了!
读到一半,我很难相信这不是人类写的。我读过 GPT-2 产生的一些文章,过一会儿就会跑题,但 GPT-3 不是这样。
这两段话泄露了我的秘密。
例如,如果你正在写一个关于沙漠中一个角色的故事,你画了这个角色的照片,你的大脑会建立一个联系,并给你一些想法,让这个角色在你的故事中接下来做什么。或者,如果你正在画一个故事中的人物,并写一首关于他们的感受的诗,你的大脑会建立联系,并给你一些如何更好地画出那个人物的想法。
…
例如,如果你正在写一个关于沙漠中一个角色的故事,你画了这个角色的一幅画,你可以写一首诗来描述这个角色在沙漠中的感受。
这些段落非常相似,我认为一个作家不可能在一篇文章中公然重复相同的段落。
然后我意识到。我已经知道文章是 GPT-3 写的。
如果我第一次读的时候没有这些信息,我可能会相信这真的是一个人类作家写的东西。重复是因为作者想在故事中加入更多的词。有道理,对吧?
一个特别挑剔的人在黑客新闻页面上评论说,这篇文章很可能是 GPT-3 写的。然而,他被否决了,因为评论侮辱了作者的能力。
黑客新闻页面评论截图(来源)
如果你深入阅读其他文章,你会发现一些有趣的摘录。这里有一个帖子的标题是“我从努力变得更有效率中学到的东西
我想过简单的生活。另一点营销引起了我的注意,这一次是一个好的副本,而不是一个坏的。引起我注意的是我真的读了它。我从中得到的是,我们不能把事情看得太严重。我们最大的头痛来自于把一切都放在心上。有一些关于远离流行文化的宣传,但是我不一定在乎这个信息。我不喜欢把外人的批评放在心上。我想沉浸在我喜欢的音乐中,不管他们在 MTV 上说些什么,或者让那些旧石器时代的饮食时尚见鬼去吧。我更喜欢在我生命中可以过简单生活的季节。
仔细一看,这些句子并不真正连贯。他们在一起没什么意义。然而,GPT-3 写的这些文章成功地唤起了你从阅读人类写的励志文章中获得的同样的“有动力”的感觉。
想象一下,如果利亚姆不承认使用 GPT-3 来创作这些文章。我认为读者要理解它还需要一段时间。
对于博客作者来说,这应该是一个值得关注的信号,尤其是那些专门写励志的、感觉良好的故事的人。
当你每天写一篇文章的时候,有的作家甚至每天发表 2 篇甚至更多(!),你迟早会没主意的。很多作家都求助于自助和生产力这个话题。也许因为它是最不需要努力的?你不需要为这类文章做研究或事实核查。
我们需要赞扬 GPT 3 在模仿作家方面的表现。它现在当然不能完全取代人类作家,但它可以作为一种工具来帮助作家写作或克服作家的障碍。
另一方面,我们也需要重新评估我们阅读并为之叫好的文章的质量。我并不是说写出这些乏味的励志文章完全是作者的错。如果你用最少的努力写了一篇关于生产力的文章,并且得到了和你花了一周时间写的东西一样的认可,你会怎么做?
此外,很多这些关于自助和生产力的文章感觉你以前在什么地方读过。我不确定这是因为大多数都是回收的文章,还是因为阅读它们给了我同样的,熟悉的情感。
目前的反馈循环需要停止,可以通过奖励更有意义的文章来解决,而不是在你已经读了三遍的旧帖子上打转。
学习机是一系列关于机器学习世界中发生的事情的故事,我觉得很有趣,可以分享一下。哦,有时也是关于机器学习的基础。关注我,定期获取新故事的更新。
数据科学家。我写的是 DS & ML。有时候。
chandraseta.medium.com](http://chandraseta.medium.com/membership)
一名 ML 工程师如何在找到工作之前与 50 多家公司进行沟通
原载于 采访查询博客
找一份数据科学的工作有多难?我喜欢与当前的数据科学家和机器学习工程师交谈,他们来自非传统背景,已经成功地在数据科学就业市场上导航。今天我写了一篇对 Jerry 的采访,Jerry 是一名前数据科学训练营和硕士毕业生,在获得目前的机器学习工程师工作之前,他经历了大量的面试。
你好!你是什么背景,怎么进入数据科学的?
大家好,我是美国银行的机器学习工程师 Jerry。我最初是作为一名数据分析师工作了几年,然后在纽黑文大学获得了数据科学的硕士学位,并与 genville 合作。我知道我想更多地进入机器学习领域,但在这个项目结束后很难获得面试机会。最终,在接受美国银行的邀请之前,我在丹佛野马队的分析团队实习。
我现在的角色更多的是软件工程,但是包括大量的数据知识。大量构建机器学习系统和基础设施意味着知道如何将工程效率应用于生产中的服务模型。
你的整体面试体验如何?你最终接受了多少次数据科学采访?
最后从 2019 年 4 月到 8 月面试了五个月。有些星期我只有一次面试,有些星期大约有 7-8 次面试。这是一个相当累人的过程,我想我最终跟 50 多家公司谈过。
我最终接受了这么多的采访,因为我觉得数据科学是一门很难学习的学科,而且我不知道应该关注什么。一些公司问了关于软件工程类结构和面向对象编程的问题,而其他公司则更关注统计。但我觉得我一般能通过 95%的招聘和招聘经理筛选,但只有 30%的技术筛选和带回家的挑战。
主要问题是,每次数据科学面试都非常不同。我参加了一个分析经理职位的面试,在去现场之前,我面试了六个人!我不得不与产品副总裁、招聘经理、总经理、工程师、数据科学家等交谈
“鉴于 SQL 中有许多不同的方法,即使你用一种方法来做,面试官有时也会要求你用一种更有效的方式来写。”
什么帮助你为面试做准备?
带回家的挑战和技术筛选最初真的很难。数据科学家是一个非常宽泛的术语,可以涵盖纯分析、机器学习、应用深度学习或更面向业务。我觉得因为每个职位都不一样,所以一开始就很难理解该期待什么。面试提问题库无疑帮助我看到了不同公司每个问题的共性,明确了如何有效地利用我的时间学习。
面试中的 SQL 问题也是我有一段时间的弱项。我总是在 Pandas 中做一些东西,并使用 SQL 来提取数据以在 Pandas 中操作。因此访谈查询解决方案对于理解如何思考和构建 SQL 问题非常有帮助。考虑到在 SQL 中有很多不同的方式来做事情,即使你用一种方式,面试官有时也会要求用更有效的方式来写。
但是最终面试是一件苦差事,练习是获得成功并为每次面试做好准备的最好方法。随着我做更多的采访和练习更多的问题,我变得更好了。
你想传授的最后一课是什么?
面试真是一件苦差事。尤其是如果你是新来的,没有很多经验。一旦你有了经验,那就不一样了,因为尽管我觉得我的技能相当相似,但因为我有一年额外的实习经验,我会更容易进入下一轮。
能够真正深入地谈论我参与的项目也确实有助于巩固我过去的经验。招聘经理想知道你能影响企业,让它变得更好。但是作为一个进入数据科学的新人,你没有太多的方式来展示这一技能组合,这就是为什么技术面试如此严格。许多公司更害怕假阳性而不是假阴性。
对数字的热情是如何将这位机械工程师变成了一位围棋大师的
与 Sudalai Rajkumar 的对话:Kaggle 双特级大师,H2O 大学的数据科学家。
有人说得对,一个人永远不应该寻求表扬,相反,让努力来证明自己。成功人士的基本特征之一是从不吹嘘他们的成功,而是不断学习。在数据科学领域,当我们谈到谦逊时,一个引起共鸣的名字是 Sudalai Rajkumar,他以谦逊的天性和分析能力而闻名。作为同事和他一起工作,每天学习新的东西,这确实是一种特权和绝对的荣誉。
在本期采访中,我将展示成功数据科学家的旅程,我将与 Sudalai Rajkumar,又名 SRK、 a Kaggle 竞赛和内核的大师、和数据科学家在 H2O.a i. Sudalai 完成了他在 PSG 技术学院的工程,然后继续在印度管理学院-班加罗尔获得了商业分析和情报的执行学位。
RK 在机器学习和数据科学方面拥有十年的经验。他在印度和国外都有大量的追随者,对全世界有抱负的数据科学家来说,他是一个巨大的鼓舞。除了在 Kaggle 的几个比赛中获得高排名之外,SRK 也因其深入的内核而闻名。事实上,他已经是 Kaggle 内核部分的前第一号人物。
SRK 在 Linkedin 上用一封漂亮的感谢信宣布了他在数据科学行业十年的结束。因此,有什么比这更好的时机来与他本人谈论他进入数据科学的旅程以及他对该领域新进入者的建议。
以下是我与苏达莱对话的摘录:
- 你有机械工程背景。向软件工程的过渡是如何发生的?
SRK :当我完成学位后,我收到了两份工作邀请——一份是在一家知名的机械工程公司,另一份是在一家创业分析公司。机械工程的工作对我来说是梦寐以求的,就像其他机械工程毕业生一样。然而,入职日期离毕业还有四个月,所以我决定接受另一份工作。
最初,我的想法是加入分析公司,以更多地了解公司和工作性质,因为他们的面试过程非常有趣。在这个过程中,我完全被在数据中寻找模式所吸引,尽管我对软件工程完全是个新手。我对数字的热情让我继续做那份工作,今天回头看,我非常高兴我做了那个决定。
- 你和 Kaggle 的幽会是如何开始的,是什么让你在你的一代宗师的旅程中一直保持动力?
SRK :我来自机械工程专业,没有受过软件工程或数据科学方面的正规教育。因此,我开始学习 MOOCs 来了解这些概念。我遇到了像随机森林,SVM 等算法。但是没有看到任何人在工作中使用它们。这促使我寻找途径来试验这些新算法,以便更好地理解它们。就这样我偶然发现了 Kaggle,开始了我的 Kaggle 之旅。
我想说,一旦我们开始做 Kaggle,它也是一种瘾,我也不例外。建立更好的模型和获得更好的排名的瘾有时会控制你。在多项比赛中有几次失败,但痴迷和激情让我坚持了下来。当然,这花费了很多下班后的私人时间,但是在这个过程中有大量的学习。
- 你如何决定参加哪些比赛?
SRK :在最初的日子里,我几乎参加了所有的比赛。我们可以从他们每个人身上学到新的东西。
我曾经一次至少做两个,因为当我在其中一个遇到障碍时,我会去另一个,几天后带着全新的心态回到第一个。这经常帮助我。
目前,我主要参加 NLP 比赛,我在其他比赛中并不活跃。
- 你通常如何处理一个难题?任何喜欢的 ML 资源(MOOCS,博客等。)有什么想分享的吗?
SRK :在临近比赛的时候,我会记住一些重要的方面:
- 我做的第一件事是为问题建立一个适当的交叉验证框架。
- 下一件事是构建一个简单的建模管道,以确保端到端的代码运行良好。
- 我阅读论坛,探索内核部分,以了解更多关于这个问题和其他人的观点。
- 我确保在探索性分析、阅读相关论文或文章以及特性工程上花费大量时间。
- 最后的步骤是关于建模和组装。
这是一场关于数据科学竞赛的优秀 课程 。除此之外,阅读过去的解决方案并尝试在正在进行的解决方案中实施一些想法也是很好的。我创建了 一个方便的内核 来帮助解决这个问题。
SRK 内核关于卡格尔竞赛的获奖方案
- 作为 H2O.ai 的数据科学家,你的角色是什么,在哪些具体领域工作?
2019 年纽约 H2O 世界期间,SRK 和 H2O.ai 的同事们在一起。
SRK :作为 H2O.ai 的数据科学家,我参与了无人驾驶 AI 的开发,这是一个自动化的机器学习平台,具体是在自然语言处理领域。我的职责是探索 NLP 领域的最新发展,并将它们集成到产品中。NLP 在过去的两年里经历了巨大的变化,所以我的工作很有趣,因为它涉及到赶上他们。
- 如果你要和 H2O.ai 的大师们组队,他们会是谁,为什么?
SRK:我们已经作为一个团队在 H2O 建立自动化机器学习平台😃
在 Kaggle 比赛中,当然是所有的比赛!到目前为止,我已经在 Kaggle 与 Rohan 、 Marios 、 Mark 和 Mathias 合作过,但没有与其他人合作过,所以我很乐意有机会在 H2O.ai 与其他 GM 合作,以学习更多新东西。
- 你在 H2O.ai 的专业工作中运用到的通过 Kaggle 学到的最好的东西有哪些?
SRK :结构化和逻辑思维是我从 Kaggle 身上学到的一些重要的东西。在数据科学领域,试图解决问题时很容易迷失方向。解决 Kaggle 问题帮助我发展了一个结构化的逻辑思维过程,并应用到我的工作中。
大多数时候,当一些新的技术或模型出现在 ML 领域时,它们首先在 Kaggle 比赛中进行实验,然后才成为主流。像 XGBoost 这样的模型,今天在社区中使用得更多,最初在 Kaggle 中广泛使用。因此,我们可以及早发现这些趋势,并保持自我更新。
模型泛化和特征工程技术是从 Kaggle 学到的两个更重要的知识,它们在专业工作中帮助了我。
- 数据科学领域正在迅速发展。你是如何设法跟上所有最新发展的?
SRK:博客和社交媒体是我了解最新发展的两种方式。我定期关注的一些博客有Analytics vid hya走向数据科学KD nuggets。这些博客帮助我详细理解这些概念。**
SRK 在他的 TED 演讲中解释了自然语言处理的关键方面。
为了立即跟上最新的趋势,我在 Twitter 上关注了许多数据科学家和 ML 研究人员。ML 社区在 twitter 上非常活跃。每当有新的东西出现,无论是一篇论文还是一个项目,Twitter 上通常都会有很多关于它的活动。
- 你想在 ML 中应用你的专业知识吗?
SRK :我希望把机器学习应用到有助于社会进步的问题上。例如,我最近收集了发生干旱时钦奈市 (我居住的城市)的 水数据,以了解不同水库的水位。一个简单的预测模型将有助于提前预测病情并制定相应的计划。这些项目将会给人们带来巨大的好处,并有助于改善社会。
探险解渴SRK****
我感兴趣的另一个领域是将自然语言处理技术应用于印度的方言。英文版的 NLP 资源很多,白话版的资源不多。
- 对刚刚开始或希望开始数据科学之旅的数据科学有志者有什么建议吗?
SRK :首先,数据科学爱好者必须明白这个领域是他们真正感兴趣的,还是仅仅因为对它的大肆宣传而想与之相关联。这是一个快速发展的领域,需要不断的学习,所以只有热情才能帮助长期持续下去。
一旦人们从课程或书籍中理解了机器学习的基本概念,关键的一步就是获得实践知识。有多种方式可以做到这一点,包括参加数据科学黑客马拉松,为开源项目做贡献,写博客,实习等。你可以选择上述一项或几项技能来磨练和展示自己的才能。
SRK 的旅程鼓舞了我们所有人。然而,从这个讨论中得出的一个重要结论是,认识到你的兴趣是否真正在于数据科学是至关重要的。这个领域是由激情驱动的,需要大量的自我激励和学习。不要仅仅因为周围的大肆宣传而选择这个领域,因为这可能很容易失败。想一想为什么你首先会想成为一名数据科学家,以及你将如何把这些技能应用到长期工作中。
- Bojan Tunguz:从学术界到 Kaggle:物理学家如何在数据科学中找到爱情
- Rohan Rao:数据科学家从数独到 Kaggle 的旅程
- Shivam Bansal:数据科学家,负责 Kaggle 上的“数据科学为善”竞赛
- Yauhen Babakhin:认识一下 Yauhen:第一位也是唯一一位来自白俄罗斯的围棋大师。
本文原载于 H2O.ai 的博客网站 。
一个简单的文本解释如何为您的数据科学结果增加价值
使用文本解释增强您的数据探索能力
流行的说法“一张图胜过千言万语”在数据科学中可能是错误的。以优步预计到达时间(ETA)算法为例,该算法通知用户游乐设备预计何时到达。
在 ETA 的背后,有许多复杂的预测算法和尖端的可视化技术,地图会实时更新。但是,如果没有一行文字说明“最近的司机大约在 1 分钟之外”,所有这些都没有用。
优步估计到达时间(ETA)算法在运行
数据科学家或数据分析师在数据探索阶段产生大量数据可视化。所有酷的可视化看起来都很棒,但是你可以使用简短的文本解释来增强它的价值。同样,在许多情况下,光是观想是不够的。
只有没有解释的观想才是误解的来源
举一个直方图的简单例子。下面显示的是股价收盘值的直方图。
仅仅通过观察这种观想,你就可以做出许多解释,比如:
解释 1 —最大出现值介于 13 和(某个值)之间。
解释 2——最低值似乎在 5 到 10 之间
股票交易是一个在价值上必须非常精确的领域。因此,如果解释不精确,光是观想是没有帮助的。
讲述数据故事是一种强迫行为,因为光靠想象是不行的
多年的数据以来,讲故事已经成为一个数据科学家的必备技能。但实际上来说,这是一种强迫,因为光靠观想无法传达故事。
一个非常简单的观想背后可能有一个伟大的故事。但除非有人告诉它,否则它永远不会浮出水面。以上面显示的直方图为例。
柱状图背后的真实情况是,股价在 11 和 15 之间波动,并在 12 停留很短的时间。所以 12 日的买入机会非常短暂。这种故事是不可能在视觉中捕捉到的,需要用身体来讲述。即使使用了动画等高级视觉效果,仍然需要有人亲自讲述故事。
这就是文本解释的力量发挥作用的地方。添加一个简短的文本解释增强了可视化的价值。你从展现观想到传达一些有意义的东西。
现在让我们来看一些例子,解释增强了对观想的解释:
解释相关矩阵,避免“颜色迷宫”的压力
相关矩阵看起来非常惊人。然而,由于存在许多不同的颜色深浅,人们不得不努力去解读它。然而,仅仅通过添加几行文本解释就极大地增加了对相关矩阵的解释。文本可以解释哪些是最相关的数据,以及不同的颜色阴影意味着什么。
下图是基于汽车数据的相关矩阵。正如您所看到的,仅仅通过添加一个小的解释,就明显增强了好看的相关矩阵的价值。这将使你的用户不必“睁大眼睛”去查看哪些是最相关的数据。
相关矩阵的文本说明示例
解释累积分布以避免 x 轴和 y 轴“眼花缭乱”
累积分布对于显示数值的分布非常重要。这也是一种关注数字列的重要阈值水平的创造性方法。
然而,仅仅显示累积分布而没有任何解释是一项令人痛苦的令人眼花缭乱的工作。有了简短的解释,关于不同阈值水平的文本立即获得累积分布到下一个水平的能力,并开始有意义。
下图是股票价格的累积分布。通过对阈值的文本解释(例如 80%的收盘价低于 79.31)明显提高了累积分布可视化的价值。
累积分布的文本说明示例
解释聚类的结果以避免任何猜测
对于任何数据探索活动来说,聚类都是一个非常强大的工具。然而,如果解释不清楚,这可能是最被误解的观想之一。聚类的结果通常是散点图,聚类以不同的颜色显示。然而,这里的问题是,2D 散点图只直观地显示了 2 列数据,而聚类本身是由更多的列产生的。
所以为了正确解释聚类结果,需要使用包含聚类结果特征重要性的文本解释
聚类的文本解释示例
在您的开发中包含文本生成功能
作为数据科学家,我们专注于从数据准备、特征工程、超参数调整、建模、可视化等所有活动的编码。但是我们大多数人并不关注自动生成结果的文本解释。因此,养成在代码中包含生成文本解释的函数的习惯是一个好主意。
随着越来越多的算法被打包成面向最终用户的产品,结果的文本解释变得非常明显。并将使您的数据科学工作对更广泛的受众更具吸引力。
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站进行零编码分析。https://experiencedatascience.com
请订阅每当我发布一个新的故事时,请及时通知我。
[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。
每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)
你也可以通过我的推荐链接加入 Medium。
[## 通过我的推荐链接加入 Medium—Pranay Dave
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)
https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接
文本的网络结构如何揭示其思想的病毒免疫力
任何文本都可以表示为网络。单词是节点;单词的共现是它们之间的联系。由此产生的网络结构可以揭示话语对外部影响的免疫或易感程度。文本网络越多样化(就节点的连通性而言),它就变得越免疫和稳定。多样性较低的话语(因此,在连接性方面更同质)将更不稳定,更不免疫,更活跃,更容易受到影响。如果我们将这种方法应用于社交媒体话语或新闻的研究,我们可以发现信息流行事件,并且,用埃隆·马斯克的话来说,可以测量话语中思想病毒免疫的水平。
TL;DR——一个简短的视频,使用 InfraNodus 解释这个概念
社交网络:谣言的流行病学
为了说明病毒免疫是如何工作的,我们将首先使用流行病学的类比。在研究一种疾病时,一个主要的关注点是了解它通过社交网络传播的难易程度。多项研究发现,社会网络结构在传播中起着重要作用(Kuperman & Abramson 2001,周等 2007,Paranyushkin 2012)。如果你看看社交网络上围绕使用 InfraNodus 制作的 Neuralink 主题的推文,这实际上很有意义:
围绕“neuralink”主题的 Twitter 社交网络由 InfraNodus 创建
我们可以看到,这个社交网络的结构相当分散,因此信息不容易传播。虽然由埃隆·马斯克和 SpaceX 账户主导的主要部分将非常容易地传播信息,但有许多脱节的节点集群,它们彼此之间并不经常通信。我们可以说这个网络相对免疫(除了它的主要组成部分)。
如果我们将这些客户联系起来,情况会发生巨大变化(例如,他们开始相互关注,互动更加频繁):
用 InfraNodus 手动修改 Twitter 社交网络
在这种情况下,社交网络连接得非常好,所以信息很容易传播或者思想病毒很容易传播。这就是为什么联系紧密的社交网络(例如,同一所学校的学生、同事、特斯拉粉丝)如此善于传播谣言和消息。
事实上,研究表明,社会网络的结构对信息/疾病传播有直接影响。小世界网络(在全球范围内相互联系的群体集群)似乎在传播 T2 和免疫 T4 两方面都很出色。他们联系越少,就越免疫,而传播的效率就越低。当有更多的连接加入时(小世界集群之间,而不是内部),网络变得更善于传播但也不那么免疫 (Kuperman & Abramson 2001,Zhou 等人 2007)。
感染率(Y 轴)与社交图中节点间随机连接的比例(p)相关。高度随机的网络达到最高的感染率,但也表现出最强的波动性(Kuperman&Abrams on 2001
现在,让我们演示一下如何在社交网络领域之外应用同样的方法。
文本网络和信息思维病毒免疫
现在让我们看看同样的现象是如何在话语文本网络中揭示的(见 Paranyushkin 2018,2019 我们使用的方法)。我们将在最近的两次事件中使用 Twitter 上的公共话语:2020 年 3 月/4 月的冠状病毒信息流行和 2020 年 5 月/6 月的 BLM 抗议,并将其与截至 2020 年 7 月的不太“紧急”的状态进行比较。
下面是使用 InfraNodus 文本网络分析应用程序制作的 2020 年 3 月底最受欢迎的推文的可视化:
美国最受欢迎的推文内容,2020 年 3 月的最后一周,使用 InfraNodus 进行分析
我们会看到,Twitter 的话语结构非常密集,其连接性相当同质。大多数节点/单词具有相同的连接数,并且有两个节点/单词对话语具有不成比例的影响力:“冠状病毒”和“测试”。
这种话语的思想病毒免疫力很低,因为它被两个主要话题所取代,而且内部很少有多样性。
这是可以理解的:在这段时间里,大多数人都在发微博和转发微博,谈论加强冠状病毒测试的必要性,以了解问题的实际规模。
现在,如果你把“冠状病毒”节点从图表中移除,放大,你会看到围绕这个话题的底层话语,其实是相当多样的。人们在谈论测试,也在谈论死亡人数、流感、医院、政治、特朗普和中国:
Twitter 在 2020 年 3 月底评选出的美国最受欢迎的冠状病毒推文。使用下结节可视化
因此,虽然一般的论述偏向于冠状病毒,但在这个主题内,我们有相当高程度的多样性和观点。这是对 Twitter 用来筛选最受欢迎的推文的算法的称赞,表明他们实际上试图使选择相对多样化,即使话语受到一个术语的不成比例的影响。
如果我们快进到 2020 年 5 月底(BLM 抗议活动开始的时候),我们会发现在这段时间里,讨论稍微多样化一些,但仍然相对集中在几个关键概念上:
最受欢迎的推文,2020 年 5 月底,使用 InfraNodus 进行的文本网络分析
主要被围绕“警察”——“逮捕”和“黑”——“人”的话题超越,围绕那些话题振荡,所以免疫水平表现为“中等”:比冠状病毒期间免疫水平高,但仍不完全稳定,也不太多样化。
让我们快进到 2020 年 7 月 21 日(2020 年相对平静的时间,至少在美国的 Twitter 上),我们会看到话题(和连通性)相当多样化:人们在谈论病毒、选举、联邦法官。思想的病毒免疫力很高,网络是分散的,不容易超越话语,因为注意力集中在太多不同的部分,而且不是所有的部分都彼此联系良好:
用 InfraNodus 制作的 2020 年 7 月 21 日最受欢迎的推文内容的可视化
使用 InfraNodus 我们还可以查看网络的主要参数,这些参数用于计算文本的思维病毒免疫分数。在上述情况下,模块化得分相当高,为 0.66。模块化测量网络社区结构的模块化程度,因此我们可以说,在这个论述中有几个不同的主题,它们或多或少地被平等地代表。
不那么紧迫的时代伴随着更高的话语网络多样性。更多的紧迫性与更低的话语多样性相关,因此对外部影响的免疫力也更低。
在对最佳免疫策略的研究中有一个有趣的类比(House & Keeling 2009)。他们研究了各种策略,比较了随机免疫和每组的免疫比例。他们发现,后者在防止疾病传播方面更有效,因为它减少了群体之间的污染,而这种污染会在整个网络中传播疾病。
同样,我们可以把文本看作是意义传播的网络基础设施。不同主题之间的联系越紧密,信息传递就越容易。它们之间的联系越少,理解起来就越困难,但也就越难用意识形态“污染”这个文本。
我们发现,当你将诗歌与结构良好的“有意义的”散文相比较时,情况尤其如此。格式良好的文本在试图传达某个观点或特定议程时往往更加连贯,因此具有更加联系和集中的网络结构。诗歌文本网络往往是分散的,分散的,并包含多个间隙,激活我们的想象力,让它用情感和典故来填充结构漏洞,而不是用理性思维来“有意义”。
看看下面这个比较诗歌(本·勒纳的作品)和圣经(创世纪)的例子:
本·勒纳的诗歌文本网络使用 InfraNodus 可视化——注意结构如何比下面的圣经创世纪分散得多,并且思想病毒免疫水平很高
《圣经·创世纪》被想象成一个文本网络,有之下的——注意它的结构是如何比诗歌和较低水平的思想病毒免疫更紧密相连的
诗歌网络比《圣经》更分散,《圣经》的思想病毒免疫力低于本·勒纳的文本。
我们上面提出的方法可能对我们分析信息和检测公共话语中的重要事件的方法有影响。想象一下,如果能够检测到话语何时偏向某个主题,就能判断出其中的紧急程度。它也可以用来预测稳定或不稳定的时期。分析政治演讲是另一个有趣的应用领域。通过 API 向 Neuralink 这样的设备添加这种类型的分析可以提供额外的工具,使我们的认知感官对外部影响更加免疫。
我很想听到您的反馈,并邀请您在自己的数据、文本、Twitter 或新闻提要上试用 InfraNodus 文本网络可视化和分析工具。
Dmitry Paranyushkin 是Nodus Labs的首席执行官,该公司开发开源工具以促进多样性和生态网络思维。他是InfraNodus文字网络分析平台的创始人。
参考文献+阅读清单
t .豪斯和 M. J .基林(2009 年)。家庭结构与传染病传播。流行病学和感染,137(5),654–661。剑桥大学出版社。
库伯曼和艾布拉姆森(2001 年)。流行病模型中的小世界效应。物理评论快报,86(13),2909–2912。doi:10.1103/physrevlett . 86.2909
帕拉纽什金博士(2018)。使用网络分析测量话语偏见。走向数据科学。
帕拉纽什金博士(2019)。 InfraNodus:使用文本网络分析生成洞察。环球网大会 2019,3584–3589doi:10.1145/3308123
Pastor-Satorras,r .,& Vespignani,A. (2000 年)。无标度网络中的流行病传播,13。doi:10.1103/physrevlett . 86.3200
周军,刘志忠,李,等(2007)。网络结构对谣言传播的影响。物理学字母 A,368(6),458–463。doi:10.1016/j.physleta
如何评价图像分割模型?
Riho Kroll 在 Unsplash 上拍摄的照片
骰子和雅克卡德的解释…
我们正在研究一个深度学习模型,该模型可以预测脑瘤或皮肤损伤的面具。什么是做面膜?我们将图像的像素分为 1 或 0。如果在一个像素中有一个掩模,我们声明 1,如果没有掩模,我们声明 0。对图像进行逐像素的二值分类称为“语义分割”。
图片由作者提供:脑肿瘤磁共振成像和相应的面具
如果我们试图识别图像中的许多对象,我们正在执行“实例分割”。实例分段是多类分段。例如,在自动驾驶汽车中,物体被分类为汽车、道路、树、房子、天空、行人等。
在语义(二元)和实例(多类)分割中,我们需要一个损失函数来计算梯度。
哪个精度损失函数用于图像分割?
让我们看看我们的一些选择:
1。像素精度:
我们可以将每个像素点逐一与地面真相遮罩进行比较。但是在阶级不平衡的地方,这是很成问题的。我举个例子解释一下:
当我们为脑瘤创建一个如图 1 所示的遮罩时,它应该看起来像图 2 所示。
图片由作者提供:脑肿瘤核磁共振成像和面具
现在让我们看看下面的面具。当我们为图 1 中的脑瘤制作以下掩模时,精确度似乎上升了大约 98%。为什么?
作者图片
因为我们检查像素是否被正确分类并为每个像素赋值 0。在 MRI 图像中,肿瘤占据的部分仅占总图像的 2%,其余部分占 98%,因此该模型的准确度为 98%。精确度真的很高,但实际上我们连一个掩模都没有!这就是所谓的“阶层失衡”问题。(对于图像的一个像素,我们有两个类:1 遮罩,0 无遮罩。)
只比较这两个掩码可能是一个更好的主意。让我们看看;
2.Jaccard 指数(并集交集,IoU)
在这种准确性度量中,我们将基础真实遮罩(由放射科医师手动绘制的遮罩)与我们创建的遮罩进行比较。
图片作者:脑瘤,真实面具,预测面具。
让我们说得更简单些:
作者与 Canva 的图像:预测和地面真相面具的交集
绿色区域:我们估计为 1,地面真实值为 1。(真阳性,TP)
蓝色区域:我们估计值为 1,但实际值为 0。(假阳性,FP)
黄色区域:我们估计值为 0,但实际值为 1。(假阴性,FN)
灰色区域:我们估计为 0,地面真实为 0。(真阴性,TN)
图片由作者用 Canva: Jaccard 的指数公式
Jaccard 的指数介于 0 和 1 之间。
3。骰子系数
Dice 系数与 Jaccard 的指数非常相似。骰子系数双倍计算交集(TP)。
作者使用 Canva 的图片:Dice 系数公式
骰子系数是两个遮罩之间重叠的度量。1 表示完全重叠,0 表示没有重叠。
作者使用 Canva 的图像:重叠和非重叠图像
骰子损失= 1 —骰子系数。轻松点。
我们计算反向传播中骰子损失的梯度。
为什么用 Dice Loss 而不是 Jaccard 的?因为 Dice 很容易微分,而 Jaccard 不容易微分。
代码示例:
让我给你我用 Pytorch 脑瘤语义分割项目的骰子准确度和骰子丢失的代码。在这段代码中,我在一个函数中使用了二进制交叉熵损失和骰子损失。
骰子准确度、骰子损失和二进制交叉熵+骰子损失的代码片段
结论:
在我们的图像分割项目中,我们可以运行“dice_loss”或“bce_dice_loss”作为损失函数。在大多数情况下,我们获得了比单独的二元交叉熵损失更精确的结果。即插即用!
感谢阅读。
如果你想取得联系,你可以给我发电子邮件到 eymatas@gmail.com 的 s ,或者你可以通过 https://www.linkedin.com/in/seyma-tas/的找到我
年龄、种族和性别如何影响软件工程师的薪酬
年龄。种族。性别。性取向。
在理想的世界里,这些因素对软件工程师的收入都无关紧要。作为特征,它们不应该必然影响开发人员的生产力或价值,因此也不应该影响报酬。
然而,事实证明确实如此——尽管并不总是以你所期望的方式或程度。
在这篇文章中,我探索了这些人口统计学特征如何与开发者的报酬相匹配,梳理了相关性和因果性,并解释了驱动一些更令人惊讶的结果的混杂因素。
主要发现:
age
45-50 岁左右收入达到峰值Racial minorities
收入最高和最低的开发人员Female
软件工程师的薪水比他们的男性同事低 10%,但是professional experience
解释了大部分的差距Gay and lesbian
调整可观察因素后,工程师比straight
工程师挣得多Parents
挣得比non-parents
多得多,但这是由其他因素造成的
如果您还没有,请查看分析背后的方法,否则,下面的数字可能很难解释。
如果你想复制我的结果,我会把代码发布到我的 GitHub 上。
年龄
收入在 40 年代末达到顶峰
从 20 多岁到 40 多岁,开发者的收入稳步上升。40 多岁是开发人员一生中收入最高的时期,开发人员的平均收入比典型的 26-30 岁(数据中最常见的年龄范围)高出 28.7% ,之后收入稳定下来,最终在 60 多岁开始下降。
35 岁以后年龄就没多大关系了
然而,调整其他特征后,age
在 31-35 岁区间是最“有利”的,在这个区间,一个开发人员可以期望比比他们小五岁的同等开发人员多挣 4.7% 。这一优势在统计学上非常显著。
然而,随着年龄的增加,工资的增长很快消失,失去了统计意义,甚至在 51 至 55 岁的范围内变得有些负,尽管这不是精确的估计。
关键的一点是,年纪大的开发者获得的额外收入,完全是用与年龄无关的因素来解释的。当我们控制其他因素时,35 岁后的薪酬与 **age**
相差不大。
年龄的因果影响很小
为什么在控制了其他因素后age
与收入的相关性消失了?让我们开始吧:
分析表明years of professional coding experience
比年龄本身更重要,这是你希望看到的。这些额外的years of professional experience
有效地解释了老软件工程师的全部收入溢价。
此外,重要的变量包括self-rated competence
,在他们的组织中有influence over technology purchases
,和working remotely
(年长的工人更有可能这样做),以及有家属。
人种
少数族裔是收入最高和最低的软件开发人员
正如去年的分析中所述,最大的薪酬差距存在于少数群体之间,他们构成了薪酬最高和最低的开发人员。
East
和South Asians
在回归分析中,无论有无控制,都可以看到相对于白人开发人员的最具统计意义的薪酬溢价。在East Asians
的情况下,在控制各种因素后,他们的支付保费增加。
这些溢价很大,也很有意义——East Asians
比白人开发者多赚 7.4% 和 13.9% 多控制可观察特征,而South Asians
未调整时多赚 13.1% 和调整后多赚 8.1% 。
审视东亚薪酬优势
分解可解释的收益溢价会产生一些有趣的发现:
首先——years of professional coding experience
无疑是压低East Asian
软件工程师薪酬的最大因素。开发人员通常比白人缺乏工作经验,这降低了他们的收入。
- 我的计算表明,如果开发人员拥有与白人相似的职业经验,他们的收入会高出 8.0%
- 如果我们加上额外的、非专业的编码经验,这个数字会上升到 9.0% 。
Age
也阻碍了East Asian
开发者,因为他们通常比白人开发者年轻。这相当于 2.0%的薪酬劣势。
最后,应该注意的是Asian
开发商所享受的收益溢价的绝对幅度。即使在控制了各种因素后,溢价仍然如此之大令人费解。
对黑人软件开发者来说,好消息和坏消息
让我们再来看一个——T4 开发者的薪酬差距。未调整的差距(再次简单地比较了black
和white
开发人员的平均收入)为 -7.6% ,而调整后的差距有意义地缩小到 -0.3% ,这在统计上并不显著:
分解blacks
的可解释差距揭示了与我们在East Asian
案例中看到的相似的驱动因素。Years of professional coding experience
是黑人软件工程师相对于whites
薪酬较低的主要原因,总共推动了 5.8 个百分点的整体 7.6%差距。没有什么比这更重要的了。
从某种意义上说,这是令人振奋的。假设一个工程师从额外一年的工作经验中获得的和其他人一样多,仅仅是缩小差距就会使黑人的工资和白人的工资接近。
另一方面,未调整的差距可以通过years of experience
解释,这也意味着差距不太可能很快缩小。
为什么?工作场所的结构变化缓慢——需要几十年才能看到巨大的变化
- 此外,随着行业的多样化,根据定义,大多数进入软件开发职业轨道的专业人员都是从阶梯的最底层开始的
- 因此,事实上,行业的多样化降低了平均收入,因为刚从训练营出来的开发者挣的钱远不如经验丰富的老手多
这不是一件坏事——但这确实意味着,在没有其他证据的情况下,我不能断定black
和white
工资缓慢趋同的背后有什么邪恶的东西。
另一个值得一提的因素是ImpSyn
,这是一个代表受访者自己作为软件开发人员的技能的变量。越多的confident
开发者挣得越多,黑人和白人开发者之间的信心差距导致了 1.1%的收入差距。
性别
进入软件开发队伍的年轻女性拉低了女性的平均收入
平均收入比男性软件工程师低 10.0%,这是一个相当大的差距。然而,一旦我们调整可控因素,这一差距就被有效消除,降至仅 1.4% ,这在统计上并不显著。
在诊断women
未经调整的 10.0%薪酬差距时,years of experience
再次成为解释大部分差距的主导因素:
5.7 个百分点的gender
薪酬差距可以用这样一个事实来解释,即平均而言female
开发人员比male
开发人员的专业经验少。加上总体coding experience
解释了 7.1 总体差距的总百分点。
虽然在数据集中women
平均只比men
年轻 1.7 岁,但他们比years of professional coding experience
少 3.3 (分别为women
的 7.1 岁和men
的 10.4 岁)。我们可以在直方图/ 内核密度估计中看到这一点,比较了men
和women
的years of professional coding experience
的各自分布,其中women
的分布向左移动并更集中。这种有意义的差异解释了为什么professional experience
是性别工资差距的主要驱动因素。
Confidence
( ImpSyn
)再次成为拉低female
工资的一个因素。这里,confidence
差距解释了总体female-male
gender
差距的 1.0% ,在数量级上与black
开发者对white
开发者非常相似。
其他因素的少量贡献
与其他研究一致,women
对自己的编程技能也没有men
自信(据我们所知,T9 可能过于自信),这解释了总差距的另一个 1.0% (因为更高的自信会带来更高的薪酬,我将在后面的文章中介绍)。
经验和信心共同解释了软件工程师性别薪酬差距的 8.1% ,只剩下 1.9%的差距,包括我们无法解释的 1.4 个百分点的差距。
性取向
在控制了其他因素后,非异性恋开发者的收入损失消失了
非异性恋软件工程师之间未经调整的薪酬差距从gay
和lesbian
开发人员的 2.5% 到bisexual
开发人员的 9.6% 不等,这仅仅意味着这些人的平均收入低于straight
工程师。
然而,对于gay
和lesbian
开发人员来说,一旦我添加了控件,这种差距就消失了,实际上还会逆转。差距变成了 3.4% 的薪酬优势。
从调整后/未解释的 3.4%溢价开始,较低的平均未调整收益主要是由years of professional coding experience
(一个反复出现的主题)和age
造成的,这表明gay
和lesbian
开发人员在职业生涯中比straight
开发人员平均更早。
对于bisexual
的开发商来说,调整前后薪酬差距的分解非常相似。Professional experience
和age
这里继续做最说明问题的工作:
亲子关系
父母挣得更多,但这在很大程度上是由其他因素造成的
拥有dependents
(通常是孩子)的软件工程师比没有的人多挣 17.2% ,但这种收入溢价几乎可以完全通过本分析中描述的其他因素来解释。
对这些变量进行控制后,父母收入溢价降至 1.5% ,虽然很小,但具有统计学意义。
- 也许数据反映出这些开发者为了照顾他们的
dependents
而赚取额外的收入 - 然而,如此小的收入增长并不能覆盖一个孩子或其他
dependent
的额外开支
不出所料,years of software development experience
和age
占据了父母收入溢价的大部分。这些大多是职业生涯中后期的工程师。
Working remote
解释了父母工资溢价的另一个原因 1.1% ,因为他们更有可能在家工作,这是有道理的,因为他们可能有一个孩子要照顾。
结论:薪酬方面取得重大进展
不是要发表评论,但是我被这里的许多结果所鼓舞。一般来说,在大多数方面,一旦控制了各种因素,软件开发人员收入的差别就很小了。在大多数情况下,最大的因素是years of coding experience
和age
的某种组合,这两者都是“问题”,随着行业的多样化,它们将在很大程度上自我修复。
除了race
之外,大部分差距都不超过几个百分点的量级。就种族而言,这种差距在某些情况下是有意义的,但事实上,这种差异是有利于像East Asian
、South Asian
和Middle Eastern
软件开发人员这样的少数群体的。他们的薪酬优势是巨大的,来自 Stack Overflow 调查的数据无法完全解释这些差距。
对薪酬分析的常见警告在这里也同样适用。在控制了job title
等因素后,发现薪酬歧视很少,并不能完全否定歧视。
- 例如,如果软件工程师面临歧视,表现为职业升迁机会减少,那么这种情况不会出现在分析中,尽管这会降低他们的收入
- 这同样适用于年长的软件开发人员,他们可能会被迫离开他们的组织,为更便宜、更年轻的开发人员腾出空间。
类似的统计警告比比皆是。
也就是说,这些数据表明,软件开发行业在年龄、种族、性别和性取向等重要维度上的薪酬已经趋于平等。
最初发表于【whoisnnamdi.com】。
人工智能和曼梯·里如何帮助对抗新冠肺炎
这篇文章总结了世界各地的研究人员和科学家利用人工智能缓解新冠肺炎疫情危机的所有努力。
来自 Pexels 的 Salvatore P 摄影
仅仅几周时间,我们周围的世界就发生了变化。就我个人而言,现在每天早上醒来,我首先想到的是我 70 多岁的祖父母,他们患有慢性疾病。随着冠状病毒在世界各地肆虐,以前所未有的方式改变着社会,并在我们说话的时候夺走了生命,我相信你们所有人都以这样或那样的方式关心着你们的亲人和你们的社区。我们许多人都有一种身体上、社交上或精神上的脆弱感。
在这些艰难的时刻,我特别受到全世界科学家、数学家、工程师、社会科学家,特别是医疗工作者的热情和勤奋的鼓舞,他们正齐心协力抗击这种疫情。像新冠肺炎疫情这样的危机带来的挑战触及生活的许多领域,并跨越许多专业领域。他们没有简单的解决方案或快速的解决方法。但是,无论多么具有挑战性或令人生畏,通向解决方案的旅程必须开始。
2019 年 12 月,蓝点,一个扫描成千上万外文新闻报道、动植物疾病网络和其他知名来源的人工智能平台,在中国武汉检测到了一群类似肺炎的疾病。这一系统引起了蓝点专家的注意,他们认为这与 2003 年致命的 SARS 爆发类似。甚至在科学家们意识到事态的严重性之前,艾尔系统就已经预测到了即将到来的危险。利用全球航空票务数据,该平台还预测病毒将在未来几天从武汉转移到首尔、东京、曼谷和台北,这被证明是真的。这显示了在这次危机中使用铝的重要性;数据分析、自然语言处理(NLP)、机器学习、深度学习、计算机视觉和聊天机器人方面的进步不仅有助于识别、跟踪和预测疫情,还可以通过帮助医务人员诊断患者来支持他们。现在,让我们看看人工智能如何帮助世界各地的医护人员和医生。
人工智能用于疫苗研究:
问题— 药物发现是一个复杂、耗时且昂贵的过程,其中涉及许多反复试验的方法,需要世界上最聪明的人的不懈努力。当全世界都在努力对抗冠状病毒时,人工授精给人们带来了新的希望,即可以比传统方法更快地开发出疫苗。
解决方案— 研究人员正试图发现可能摧毁 SARS COV-2 病毒的药物组合,这是导致 COVID 19 灾难的病毒的名称。有五家以人工智能为中心的公司正在加速这种药物的开发。其中, Deargen 做出了有价值的预测。他们发表了一篇论文,使用基于深度学习的模型 MT-DTI,该模型使用简化的化学序列来预测感兴趣的分子与目标蛋白质结合的强度。该模型预测,在 FDA 批准的抗病毒药物中,HIV 药物 atazanavir 和 Remdesivir 可以有效地阻断 SARS-Cov-2 外部的一种显著蛋白。
今天,正如预测的那样,Remdesivir 被吹捧为新冠肺炎的一种可能的治疗方法,但它仍在接受测试,并没有被宣传为一种治疗方法。在 Gilead(一家在全球范围内拥有 Remdesivir 专利的美国公司)进行的一项研究中,该公司对美国不同种族的 229 名患者进行了一项研究,以测试该药物的安全性和有效性。结果如下表所示。
由 基列 进行的一项研究的表格结果。非西班牙裔白人(NHW);西班牙裔白人。
像 Insilico Medicine、SRI Biosciences 和 Iktos,Benevolent Al 这样的公司也在探索深度学习模型,以预测可能治愈新冠肺炎的新旧药物。尽管业界正在进行大量研究来寻找万灵药,但必须遵循系统的方法,人工智能中聪明人的适当合作将更好地产生积极的结果。
用于快速诊断的人工智能:
根据患者的症状做出快速诊断可能是一个非常棘手和难以处理的过程。尽管如此,快速找出阳性病例并采取重要的补救措施是抗击 COVID 19 的必要努力。人工智能可以帮助医生快速诊断病人。中国正在使用的一种方法是基于人工智能的多传感器技术,这种技术被部署在机场等公共场所。该系统每分钟可以筛查多达 200 人,可以检测他们 0.5 摄氏度范围内的体温。这使得机场当局能够迅速隔离疑似发烧的人。然而,这可能只是一种分离高烧患者的方法,以下是目前在医院使用的主要方法。
1.电晕病毒诊断聊天机器人
问题- 医院因人员和病例过多而不堪重负。人们不必要地恐慌,并前往医院进行检查。这导致了严重的问题,如在医院等待测试的时间长,以及有需要的人得不到测试包。额外的步行交通有可能增加健康人和感染者之间的污染。正因为如此,医疗保健系统不堪重负,这导致真正受新冠肺炎影响并需要快速诊断的人延误了就诊时间。
解决方案- 为了解决这个问题,一家名为 Paginemediche is 的公司利用自然语言处理(NLP)的能力,开发了一款多语言版本的冠状病毒聊天机器人,帮助对使用它的人进行分类和诊断、症状检查和监控。这有助于向人们提供可靠的信息和明确的指导方针,并可以建议个人是否需要医院筛查或在家自我隔离。
冠状病毒诊断聊天机器人 UI 图片取自 健康软件组 。(右边图标取自Freepik)****
这可以限制不必要的医疗保健设施,并减少医务人员的工作量,因为自疫情开始以来,他们几乎没有时间为自己和家人服务。使用人工智能进行快速诊断可以极大地帮助任何国家拉平曲线。这可以有效地防止疾病传播,并为高通量诊断提供了关键。应用良好的预防技术有助于防止医疗系统淹没医院。
2.阿里巴巴的新冠肺炎 CT 图像分析:
问题- 作为诊断过程的一部分,医生在整个住院过程中对患者进行大约 2000 次计算机断层扫描(CT)。手动读取和比较这些扫描需要大量的手动工作。一个有经验的医生分析这些扫描大约需要 15 分钟。考虑到病毒传播的情况,随着患者数量的激增,医生和有经验的专业人员的数量已经不足。医疗专业人员不得不通宵工作,评估这些扫描的个人经常筋疲力尽,并在过高的工作量下工作,在这种情况下,人为错误很容易成为问题。
****解决方案——因此,需要一个精确的 CT 扫描分析系统。为了加快这一审查过程,阿里巴巴推出了 CT 图像分析系统,该系统可以帮助显著提高测试准确度和检测效率。该系统能够以大约 96%的准确度辅助识别冠状病毒肺炎 CT 扫描。这可以在 20 秒内识别扫描,比人工检测方法快 60 倍。这是由阿里巴巴的研究和创新团队 DAMO 研究院开发的。
人工智能辅助诊断 COIVID-19 的过程。中间的图标取自 Freepik
这个人工智能系统已经用超过 5000 个阳性冠状病毒病例的数据集进行了训练。它使用深度学习算法来研究感染模式,可以有效地用于两件事:一是跟踪确诊病例的反应,二是为疑似病例提供诊断。这种算法的突出之处在于它能发现普通肺炎和新冠肺炎肺炎的区别。一旦该系统将 CT 扫描识别为阳性冠状病毒病例,它还可以通过提供病变标记和受影响的肺容积比等分析来提供进一步的帮助。这有助于医生有效地跟踪和观察新冠肺炎患者的治疗进展。中国有超过 160 个公共机构正在使用这项技术,并且已经分析了超过 240,000 次 CT 扫描。
通过智能机器人和无人机进行监控的人工智能:
在世界上许多国家,政府已经强制要求在公共场合戴口罩。像中国和印度这样的国家对不戴口罩在外面闲逛的人处以重罚。为了让这个过程更容易,一些城市和政府已经加快了 Al 动力无人机的公共部署。他们可以有效地跟踪没有戴防护口罩的人,这是一种经过科学证明的阻止冠状病毒传播的药物。此外,中国正在使用基于人工智能的多传感器技术,部署在机场等公共场所。该系统每分钟可以筛查多达 200 人,可以检测他们 0.5 摄氏度范围内的体温。这使得机场当局能够迅速隔离疑似发烧的人。
照片摘自 Hitconsultant 文章。
问题- 我相信你们很多人可能听说过许多医护人员死于冠状病毒的消息。这是因为在这家医院里,工人们更多地接触到受电晕影响的病人。
解决方案- 只有当我们减少医生和患者之间的互动次数时,这个问题才能得到解决。自动驾驶汽车在向医院的病人分发食物和药品方面也发挥着至关重要的作用。达闼科技在中国的医院、酒店和学校部署了 100 多个机器人。
用机器人管理的武汉智能野战医院。(上)图— 建筑和(下)图— 智能生活
这些机器人采用了一种名为云姜(XR-1)** 的人形机器人和智能运输机器人,可以在没有人与人接触的情况下,从医疗服务提供者那里为患者运送食物和药物。由于这些都是人工驱动的机器人,无聊和孤立的病人发现喜欢他的公司,因为他们提供有用的信息和急需的互动和娱乐。它能够在没有直接接触的情况下远程提供真实的患者生命信号,这对医生来说是非常有益的。**
利用人工智能预防下一场瘟疫:
“预防胜于治疗”
冠状病毒不是世界上看到的第一个疫情。世界面临过许多大流行,最具毁灭性的一次是 1918 年的西班牙流感,它影响了大约 5 亿人,并导致大约 500 万到 700 万人死亡。但是,随着技术的发展,我们可以利用世界各地最新的科学进步和研究来减少死亡和感染的数量,从表面上看,使用人工智能系统已经被证明是一个救命稻草。我们可以遵循下面提到的一系列步骤来阻止下一次可能的瘟疫。
第一步——预测:
提前预测疫情并做好准备是我们能采取的最好的预防措施。蓝点和 Metabiota 正在利用 NLP 算法的能力来扫描和监控世界各地的几家新闻媒体。将冠状病毒等高度优先疾病标记为疫情病毒可能爆发,并将艾滋病毒或结核病等地方病标记为流行病。因此,预测下一次可能发生的瘟疫将有助于政府和世界各国应对严峻的形势,建立新的医院,实行封锁和旅行限制,增加医务人员和医院病床的可用性等,将有助于终止瘟疫在世界各国的传播。
第二步——找到治愈方法:
人工智能可以帮助研究人员搜索世界各地成千上万的研究论文和文件,并可以解开可能的治疗方法和疫苗,这对人类来说是一项具有挑战性的任务。传统疫苗可能需要长达 10 年的时间来开发,我们不能等待这么长时间,看着人民和经济走向死亡。创造治疗方法的一个关键步骤是了解蛋白质和组成抗体蛋白质的基本结构,研究人员可以利用这些结构进行有效的药物发现,同时减少与这些发现相关的成本和时间。谷歌 Deepmind 的 AlphaFold 正在使用人工智能进行预测抗体可能蛋白质结构的科学发现,希望能够产生现实世界的影响。
结论:
虽然世界各地都有关于数据隐私的说法,但要让人工智能系统做出准确的预测,它应该用不同类型和类别的数据进行训练。毕竟,人工智能系统是第一个识别出新冠肺炎具有潜在的疫情形成能力的系统。这表明,人工智能与世界上最好的科学头脑的合作将在未来最有效地控制、识别和监测新冠肺炎和任何其他疾病。我们希望人工智能将有助于疾病研究、诊断和监测患者,并最终改善全世界数百万患者的生活质量。
人工智能如何改变视频游戏产业:一个增强和合成媒体的时代
游戏的下一次大变革将来自我们这个时代最具革命性的技术之一:人工智能。
有了堡垒之夜,开发商 Epic Games 不仅仅创造了一款国际知名的游戏;他们在 T2 建造了一个新的虚拟社交空间。凭借 PlayStation VR,索尼发布了第一款大众市场主机,让我们可以在客厅舒适地体验高清虚拟现实。在过去的二十年里,游戏行业发生了无数革命性变化的例子。所有这些都指向同一个结论:随着技术的发展和进步,游戏产业也随之发展。
游戏的下一次大变革将来自我们这个时代最具革命性的技术之一:人工智能。这篇文章将解释人工智能是如何改变视频游戏行业的,以及它将如何在未来几年强烈影响这个行业。
增强现实和混合现实
在我的童年,公路旅行是在汽车的后座度过的,把我的游戏机放在尴尬的角度,这样太阳就可以照亮屏幕,让我玩游戏。一晃十年过去了,现在我们已经有了背光 3D 游戏机和能够运行增强现实游戏和移动应用的手机。
我【news.microsoft.com】法师 法师
只需轻点几下屏幕,我们就可以改变周围世界的颜色,通过移动设备的屏幕创造一个新的世界,一个增强的世界。这不是什么新鲜事;举世闻名的pokémon Go是第一款打破增强现实(AR)成为主流的游戏,让新老粉丝们在一个长期喜爱的系列中津津乐道。然而,如果没有人工智能和计算机视觉的突破,这一切都不可能实现。
计算机视觉
你有没有想过社交媒体应用程序中的照片过滤器是如何将兔子耳朵这样的图像放置在你头顶上方的完美位置的?在 Pokémon Go 中,游戏如何将 Pokémon 直立放置在地面上,而不是 10 英尺的空中?答案是计算机视觉。
图片来自 lionbridge.ai
计算机视觉是人工智能的一个领域,旨在赋予机器像人类一样看待世界的能力,并对视觉信息做出适当的反应。通过面部识别,我们已经教会了机器如何识别和区分不同的人脸。有了这项技术,计算机可以扫描我们的脸,并使用我们的肖像来创建游戏中的化身。
平面探测
计算机视觉模型也用于检测自然环境中的平面或平坦表面。通过检测建筑物的侧面、墙壁或地面等平面,AR 应用程序将了解它可以和不可以放置数字对象的位置,例如 Pokémon Go 中的 Pokémon。
物体识别
随着微软 HoloLens 等混合现实技术的出现,游戏正在以惊人的方式利用物体识别。最受欢迎的 MR 游戏之一是 Young Conker ,它使用物体识别来检测游戏所在房间的家具。通过检测家具,游戏可以为每个房间创建一个独特的可玩区域。然后,游戏使用检测到的家具作为一个可玩的区域,让 Conker 跳上去。
随着 Pokémon Go 和 Dragon Quest Walk、的成功,以及对雄心勃勃的《我的世界》地球 、越来越多的期待,我们可能会在不久的将来看到 AR 和 MR 游戏的人气更大幅度的上升。
合成媒体
在我看来,游戏行业最大的、也是最不可避免的变化可能来自于合成媒体的发展。
什么是合成媒体?
合成媒体是指经过人工创造的媒体(图像、视频、音频、文本)。例如,如果你想和巴拉克·奥巴马一起拍一个广告,你会怎么做?你可能需要联系他的公关经理,雇佣编剧和制作人员,找一个布景,拍摄广告。人工或合成媒体方法将消除大部分工作流程。
为了制作一个合成广告,你可以使用 deepfake 技术,这是一种能够以令人难以置信的准确性模仿另一个人的声音和面部的人工智能技术。使用这项技术,你可以创建一个具有另一个人的相似性和声音的视频,这正是 BuzzFeed 在下面的视频中所做的。
在视频游戏中使用合成声音
在视频游戏行业,这项技术可以很容易地应用于为游戏中的对话生成语音表演。像复制品工作室和 Lyrebird 这样的公司已经在开发合成语音技术,你今天就可以下载并试用。有了这项技术,游戏开发者可以简单地输入对话文本,选择一种与场景相匹配的情感,并生成一段对话的音频剪辑。因此,合成音频可以消除传统画外音录音的时间和成本。
此外,配音演员也可能从中受益。在最近的一次采访中,复制品工作室声称他们正在创建一个声音市场,配音演员可以录制他们的声音并授权给工作室使用。虽然电影公司可以削减雇佣配音演员的成本,但演员自己也可以通过同时向多家电影公司授权他们的声音来赚钱。
如果这项技术能够准确模拟微妙的情感,我们可以看到游戏行业配音方式的重大变革。
生成神经网络
随着最近 Open AI 的 GPT-2 的发布,生成神经网络和合成媒体技术正在获得越来越多的媒体报道。自然语言处理的最大突破之一,Open AI 的 GPT-2 有能力在几秒钟内生成听起来自然的文本。这项技术有着令人难以置信的能力,可以在飞行中为视频游戏创造独特的对话。
一家公司已经使用 GPT-2 创造了一个永无止境的文本冒险游戏, AI Dungeon。
许多围绕人工智能的媒体似乎对这项技术产生了恐惧。虽然人工智能驱动的自动化确实给人类就业率带来了风险,但这项技术也能带来很多好处。
如果视频游戏行业要进入一个增强和合成媒体的时代,它应该以开放的心态去做。
原载于 艾商业
人工智能如何对全球应对新冠肺炎做出贡献?
先进人工智能技术的七个基本应用
‘我们在打仗,当然是健康战:我们不是在与一支军队或另一个国家作战。但是敌人就在那里,看不见,摸不着,正在推进,需要我们总动员。这是法国总统埃马纽埃尔·马克龙在电视讲话中宣布政府应对疫情冠状病毒的最新措施时使用的引人注目的词语。
2019 年 12 月在中国爆发的冠状病毒现已发展到全球,冠状病毒健康疫情正在成为一场全球危机和人类悲剧,影响到数十万人。新冠肺炎危机不仅仅是一种危险的病毒,更是一场加速衰退和去全球化的实验。这场运动异常激烈。边境正在关闭,人们不再能够自由流动,宵禁正在实施,各国央行正在降息以保持市场运转并平抑经济冲击,金融机构试图安抚客户并保持资金流动以实现经济平衡,全球股市暴跌,因为投资者担心病毒蔓延,医院正在努力应对这些前所未有的危重病人。几个月前,只有好莱坞制片人能想象出这样灾难性的场景。
针对前面提到的新冠肺炎疫情带来的一长串挑战,世界各地的研究人员正在努力更好地了解、缓解和阻止它的传播。研究的关键领域包括研究疫情的传播、检测、疫苗和治疗方法的开发,预测疫情的社会经济影响,甚至在封锁几周甚至几个月后对个人的心理影响。在这种全球动员的背景下,世界各地的人工智能研究实验室正在将他们的机器学习专业知识带到科学界,通过加强正在进行的研究工作,提高现有方法的效率和速度,以及提出原创的研究路线,来帮助找到潜在的解决方案。在本文中,我们概述了最近使用深度学习、机器学习以及更广泛的人工智能来解决不同规模的新冠肺炎危机的许多方面的研究。
有意地,我们将把流行病学预测模型和疫情进化图的长期争论排除在我们的范围之外,以我们的常客和贝叶斯统计学家朋友😁
1.病毒严重性和传染性
在新冠肺炎的背景下使用机器学习的最初努力集中在试图使用蛋白质序列来理解病毒的严重性和传染性。
用两类样本训练的 SVM 的最大边缘超平面和边缘。边缘上的样本称为支持向量。
例如,美国国家生物技术信息中心的研究人员报告了一项深入的分子分析,以重建新冠肺炎和其他严重人类病原体冠状病毒致病性增强的进化起源。使用众所周知的监督学习估计器;支持向量机,区分这次疫情和前两次冠状病毒爆发(SARS 和 MERS)背后的病毒的关键基因组特征已经被确定。冠状病毒蛋白质序列的这些部分将高病死率与低病死率变异区分开来。
来自德国罗伯特·科赫研究所方法和研究基础设施部门的其他研究人员试图从下一代测序读数中预测病毒是否会直接感染人类。作者表明,从 CNN ( 卷积神经网络)和 LSTM ( 长期短期记忆)架构构建的深度神经网络显著优于浅层机器学习和标准甚至基于同源性的算法,将错误率减半,并推广到远离训练期间呈现的分类单元。在西安大略大学,研究人员使用决策树、支持向量机和 K 近邻 结合数字信号处理,根据病毒的基因组序列预测病毒的分类,这再次证实了病毒来自蝙蝠的假设。
2.利用基因表达特征进行药物相似性鉴定
在快速治愈患者的旅程中探索的第一种方法包括通过研究 AI 现有药物的分子设置,发现与其他已知有效治疗方法具有类似效果的治疗方法。 Quantified Mind and BioAge Labs 使用基因表达的 LINCS 数据集并利用深度神经网络来学习嵌入层去噪表达数据并识别核心特征,使相同化合物的副本更加相似。根据定义,与以前应用于基因表达测量的相似性度量相比,学习的嵌入空间(潜在表示)准确地预测了药理学相似性并实现了改进的性能。这种方法可能有助于识别具有共同治疗和生物靶标的药物。另一方面,Gero AI的数据科学团队利用了由三个模块构成的深度神经网络;DenseNet block,一种包埋层和扰动因子分类器,用于在对冠状病毒引起的疾病具有潜在活性的实验和批准药物中搜索宿主靶向作用的抗病毒药物。因此,我们敦促迅速对其他预测进行实验表征,并强调现代人工智能/人工智能技术的潜力,以迅速确定针对世界上最紧迫的医疗需求的人类试验疗法。
3.新药发现
更激进的方法是试图发现全新的化合物用于靶向新冠肺炎。在福建省创新药物靶点研究重点实验室,科学家实施了一种新型先进的深度 Q 学习网络 ,以片段为基础的药物设计,生成针对新冠肺炎的潜在先导化合物。这种基于片段的药物设计的强化学习方法奖励所发现分子的三个方面:药物相似性得分、预定片段的包含以及被认为与化合物有效性相关的已知抽象设计模式的存在。In silico Medicine的作者采用了一种略有不同的方法,拟合了 28 种不同的模型,包括生成自动编码器和生成对抗网络。作者使用强化学习方法探索潜在的候选人,这种方法具有一个奖励函数,该函数结合了诸如药物相似性、新颖性和多样性等因素。
4.疫苗设计和发现
政府最感兴趣的领域之一是疫苗研发。除了通过适应性免疫反应的主要细胞成分产生病毒中和抗体之外;b 细胞和 T 细胞。有一种称为记忆细胞的 T 细胞亚群,它可以识别以前消除的病原体的抗原,并可以在再次暴露时快速激活更多的效应 T 细胞。这些过程为疫苗设计的目标提供信息。作为反应的一部分,称为主要组织相容性复合体蛋白的辅助蛋白呈递抗原的结合区域,称为表位。因此,疫苗的发现涉及两个主要和基本的目标:确定合适的靶向表位,并确保这些表位能有效地与人与人之间的基因变体一起工作。在一篇斯坦福医学论文中,作者使用了两个神经网络 ,来识别新冠肺炎基因组中由 HLA 呈现的区域。他们鉴定了 405 个在 MHC-I 和 MHC-II 上存在的病毒表位,并使用来自 SARS-CoV 的已知表位进行了验证。在密执安大学的另一项研究中,作者使用了他们的 Vaxign-ML 框架 (用于改进细菌保护性抗原预测的监督机器学习反向疫苗学模型),利用监督分类模型,如支持向量机 (SVM)、K-最近邻 (KNN)、随机森林 (RF)和 XGBoost (XGB),努力预测哪些病毒蛋白质虽然作者发现 S 蛋白是最好的候选者,但他们也确定了五种可能的 NSP。
5.医学成像加快诊断速度
X 射线和计算机断层扫描(CT)等医学成像在全球抗击新冠肺炎的斗争中发挥着重要作用。基于人工智能的计算机视觉技术进一步加强了它们的力量,并帮助医疗专家。这些新模型有助于疾病诊断、跟踪和预后。
已经探索了新冠肺炎与其他肺炎和健康受试者的分类。来自伦敦布鲁内尔大学的人工智能研究科学家提出了一种贝叶斯卷积神经网络 来估计新冠肺炎预测中的诊断不确定性。这种贝叶斯推理将标准 VGG-16 深度 CNN 模型的检测准确率从 85.7%提高到 92.9%。在 Zonguldak Bulent Ecevit 大学,作者提出了三种不同的深度学习 CNN 模型、( ResNet50 、 InceptionV3 和 Inception-ResNetV2 ),用于从 x 光图像中检测新冠肺炎感染。分类性能结果分别为 98.0%,97.0%和 78.0%。在另一项研究中,作者训练了一个基于 ResNet 的模型 来从 X 射线图像中检测新冠肺炎。召回率(特异性)和特异性分别为 96.0%和 70.7%,AUC 为 0.952。来自清华大学的研究专家使用来自 496 例新冠肺炎阳性病例和 1385 例阴性病例的胸部 CT 图像。提出一种基于 2D CNN 的模型来分割肺部,然后识别阳性新冠肺炎病例的切片。实验结果表明,该模型的敏感性为 94.1%,特异性为 95.5%,AUC 为 0.979。
一名 28 岁男性的胸部计算机断层扫描,显示多灶性双侧周围圆形和边界不清的毛玻璃样阴影(A 和 B ),在下叶(C 和 D)有圆形实变区域。
除了早期诊断,研究感染的严重程度对于治疗计划也是至关重要的。在一项有趣的研究中,作者提出了一个基于随机森林的模型 ,该模型被训练为基于数量特征来评估严重性(非严重或严重)。从随机森林模型计算每个数量特征的重要性,其反映了与新冠肺炎严重性的相关性。
6.新冠肺炎文学快速探索
由于新型冠状病毒相关文献的快速增长,医学和更广泛的科学研究团体很难跟上这些多学科研究中发生的一切。因此,越来越迫切需要创新的方法来解决这个问题,并弥合全世界研究人员之间的差距。为了回应这种需求,白宫和一个领先的研究团体联盟准备了新冠肺炎开放研究数据集(CORD-19) 。 CORD-19 是超过 59,000 篇学术文章的资源,包括超过 47,000 篇关于新冠肺炎、新型冠状病毒和相关冠状病毒的全文。这个免费提供的数据集提供给全球研究界,以应用自然语言处理和其他人工智能技术的最新进展,产生新的见解,支持正在进行的抗击这种传染病的斗争。从那里,独立数据科学家和组织发起了数以千计的计划。人工智能专家通过应用主题建模来探索医学/科学文章,以便发现文档集合中隐藏的主题。文献中涵盖了哪些主题?而且,每个主题的含义是什么,它有多普遍,主题之间有什么联系?此外,其他任务仍然在处理中。此后,我们举几个例子,如:什么是传播,孵化和环境稳定性已知的?我们对病毒遗传学、起源和进化了解多少?我们对疫苗和疗法了解多少?关于伦理和社会科学的考虑已经发表了什么?我们对非药物干预了解多少?
主题建模使用私有内核在 CORD-19 上训练的模型的交互式可视化
7.社交媒体上的假新闻和仇恨言论
随着错误信息和虚假信息的传播,最近几个月仇恨言论的增加已成为全球主要社交媒体的重大关切。范围从传播假新闻到欺诈目的的网络钓鱼,再到针对少数族裔的仇恨言论。例如,美国总统唐纳德·特朗普(Donald Trump)在几次新闻发布会上多次为冠状病毒称为“中国病毒”辩护,无视对其种族主义的批评。“这根本不是种族主义,”特朗普说。另一方面,世卫组织推出了一个新平台来对抗他们所谓的新冠肺炎信息传播,这是对不正确信息的大规模传播的官方名称,它导致了公众的歇斯底里、恐慌和困惑。目前,该信息刊物已经囊括了从药物建议到阴谋论的所有内容。
冠状病毒:呼吁应用程序从 BBC 获得假的新冠肺炎新闻按钮
例如,在这场战争中, Twitter 在危机早期采取行动,确保搜索病毒信息的用户看到可靠和权威的来源,如世卫组织或卫生服务和政府机构,而不是经常被标记为传播假新闻的阴谋网站或新闻机构。在宣布新冠肺炎为疫情的几周后,超过 2000 万条推文提到了冠状病毒。随着对疫情的指数兴趣,自然语言处理高级技术,如递归神经网络(GRU、LSTM)、变压器(伯特、乌尔姆菲特),被广泛用于检测可能造成危害的虚假信息的传播,并标记该内容以进行移除。另一个竞争对手脸书也公布了一系列措施来保护用户免受错误信息和仇恨言论的影响。国家卫生机构和政府也开始与大型科技公司合作,以确保他们想要传播的可靠信息不会被假新闻和机会主义淹没。
了解你的作者
拉贝赫·阿亚里是首席数据科学家,致力于信用风险建模和欺诈分析的应用人工智能问题,并在机器学习方面进行原创研究。我的专业领域包括使用深度神经网络的数据分析、机器学习、数据可视化、特征工程、线性/非线性回归、分类、离散优化、运筹学、进化算法和线性编程。随时给我留言这里!
人工智能技术如何让我成为我们孩子更好的父母
我利用在人工智能工作中获得的知识和智慧,更有效地理解和教导我两岁的儿子,并恢复了理智。
概观
我从构建人工智能(AI)技术中获得的知识可以直接应用于抚养我蹒跚学步的孩子。这不仅有助于我更有效地教他,也有助于我理解他为什么做淘气的事情,我以前认为他只是为了折磨我们。当我在这篇博文中探索这些想法时,我也将给出相关人工智能项目的简要概述,以帮助说明我的类比。
我的人工智能相关工作
我已经在人工智能领域工作了五年多,尽管听起来令人毛骨悚然,但我对人工智能的热爱仍然像第一天一样强烈,当时我发现我的图像分类模型 Cyclops 能够自动分类从 27 个不同角度(前部、侧面、后部、仪表板、车轮等)拍摄的汽车照片,准确率达到 97.2%。
独眼巨人视角图像分类模型。图片 via Freepik
人工智能技术通过给你一种全新的方法来解决你以前无法解决的问题。与其用 if-else 语句来命令每一条指令,不如让机器从一组输入和预期输出中学习。尽管一个经过全面训练的人工智能模型仍然由数百甚至数千条 if-else 语句组成,但它们是在训练过程中自动创建的,因此我们不需要费力去设计和维护它们。当需求发生变化时,我们只需用新的数据集重新训练模型。你的数据就是算法,简单来说就是相当优雅。
育儿新体验
两年前,我们的儿子德协出生了。在充满挑战的几个月里,我们的世界天翻地覆,因为他每三小时一次的喂食制度保证了许多不眠之夜。
随着德希年龄的增长,挑战慢慢从喂食和打嗝等直接的生命支持转移到如何教他自己做事情:穿衣服,骑自行车,不吃他的袜子,不从餐桌上摔下来。
德克西,我们两岁的孩子
他总是有自己的想法,但并不总是听。事实上,80%的时候,他做的和我们告诉他的完全相反。最初,这很令人沮丧。然后,几个月前,我发现了建造 AI tech 和训练德协的许多相似之处。
这个发现帮助我理解了他为什么做某些事情,并让我更有效地教他。
通过向技术学习来解决自然
几千年来,人类一直在模仿自然来解决问题——飞机翅膀的灵感来自鸟类,潜艇上的声纳灵感来自蝙蝠。
蝙蝠利用回声定位在黑暗中导航。图像通过 去飞溅
Flood fill 是一种受水的运动启发的寻路算法,水总是从高处流向低处。有趣的是,当我们使用技术解决自然问题时,例如抚养一个蹒跚学步的孩子,这种自然启发人类技术的现象可以反过来起作用。
底片样本的重要性
德歇和其他同龄的小孩没什么不同。他跑来跑去,爬上桌子、厨房台面和橱柜。他直接把花、玩具和蜘蛛放进嘴里。为了保护自己,我的自然反应总是阻止他做这些危险的事情。当然,这只是放大了他做这些事情的欲望。一天,当我把德谢从餐桌上赶走时,我爸笑着说,“让他摔吧。”他简单的三个字让我意识到这种情况与训练我的一个人工智能模型有多么相似,它们成为了这篇博文中所有实验的催化剂。
去年年底,我在 Carsales.com 的团队部署了一项名为 Mystique 的人工智能技术,用于检测汽车注册号码的存在,并将其模糊化。Mystique 保护卖家的隐私,防止 rego 车牌克隆者寻找像他们一样的汽车,打印出 rego 照片,贴在他们的车上实施犯罪。
神秘感模糊了汽车的牌照
Mystique 的核心是一个物体检测人工智能模型,它在照片中 rego 板应该在的位置周围寻找所谓的边界框。然而,在预发布测试中,我们发现了很高的假阳性率。人工智能错误地模糊了不是 rego 牌照的物体,如里程表计数器和制造商徽章。进一步的调查显示,根本原因是我们的训练集没有没有 rego 牌照的汽车图像,换句话说,阴性样本。负样本在这种情况下很重要,因为它们允许我们的人工智能模型学习如何区分看起来像 rego 盘子但不是的物体。
正负样本训练集
使用一些技巧来克服对象检测架构的限制,我们使用正负样本的混合来重新训练我们的模型,从而显著降低了误报率。
这与幼儿的学习过程有什么关系?从我们出生的那一刻起,人类就从生活中遇到的积极和消极的经历中学习。每一次经历的结果都提供了一个反馈回路,帮助我们改善未来的决策。在实践中,这意味着我们将避免过去产生负面结果的行为,反之亦然。
假设我们在 2D 空间用绿色和红色标出所有这些积极和消极的行为(下图 1)。你会注意到一条决策边界线将他们分开,正面的行为在左边,负面的行为在右边。我们正在通过反馈循环不断改进这一系列产品的定位。有了更多积极和消极的结果,我们就能更好地辨别未来积极和消极的行动。
现在,假设我只允许 Dexie 从积极的经历中学习(图表 2)。由于他从未经历过任何负面结果,他只知道如何定位他的决策边界线,以确保所有正面样本都在左边。如果他面对消极的行为,他会把其中的四个错误归类为积极的。然后,我们添加一些负样本(图 3),允许 Dexie 调整他的线,结果只有三个负样本的错误分类。最后,通过添加更多的阴性样本(图 4),他实现了零错误分类。
负面经历如何改善我们的决策
事实上,这直接转化为教导 Dexie。他不能只经历有积极结果的行动。他也需要阴性样本 …比如从桌子上掉下来。
我已经开始让他在合理的范围内体验负面结果。他仍然爬上餐桌。然而,在他第一次跌倒后,我现在注意到他更加小心,不要站得太靠近边缘。第二次掉下来让他更加小心,离边缘更远。德西正在完善他的决策边界线。
探索的重要性
我相信很多父母都会有同感:无论你让你的孩子做什么,他都会反其道而行之。和你们许多人一样,我也在挠头,试图找到原因。事实证明,我从人工智能训练的另一个过程中发现了一个似乎合理的答案——ε参数。
叛逆的学步儿童。图像 viaUnsplash和 Freepik
最流行的人工智能技术是监督学习,它已经相当成熟,并且很好理解。神秘物体检测就是一个例子,我们用带标签的训练集来训练我们的人工智能模型。最近,一种称为强化学习(RL)的新技术开始受到欢迎,特别是在游戏和机器人领域,因为它能够通过试错来学习。它可以通过随机选择一个动作,并根据提供的奖励或惩罚来衡量其成功与否,从而进行探索。从探索中产生的反馈循环导致开发,一种选择与过去所见相似的行动的能力,这将产生更大的回报。
强化学习。图片经由 土坯
关于 RL 有趣的是,我们可以通过 epsilon 参数控制人工智能使用多少探索或开发来选择一个动作。探索允许人工智能在它从过去的训练集中学习到的内容之外发现更好的行动,并更快地适应趋势的变化。ε= 0.3 意味着 AI 以 30%的概率随机选择动作,而不管这些动作可能带来什么回报。
我们在叛逆的初学走路的孩子(和青少年)身上看到的是现实生活中的 RL,从父母的角度来看,ε值与顽皮程度相关。ε越高,他们看起来就越淘气,越叛逆。
探索因素在本质上也是至关重要的。没有探索,孩子们永远不会尝试与他们所学不同的东西。后代将无法发现任何新事物,导致社会智力下降。逆向进化。事实上,在更高的层面上,探索在进化中起着至关重要的作用,通过创造具有各种技能和物理属性的不同物种来不断进行实验。适者生存作为系统的一种奖励功能,以提高其开发技能,鼓励相似物种的繁殖,这往往更成功。
逆向进化。图片经由 Pixabay
当德西把水倒了一地时,我从远处尖叫着不要,现在我感觉好一点了。德西大脑的 RL 模块刚刚决定做一个探索。与此同时,我确实需要迅速采取行动,给他一个负面的奖励——惩罚。他可能会把水倒在地板上几次,但我必须有耐心,并不断提供负面反馈。毕竟,一个人工智能模型需要的不仅仅是一个样本,它的输出才会有明显的变化。
奖励函数
几周前,我们开始教德协如何骑平衡自行车,这是学习骑真正自行车的一个很好的起点。如图所示,这是一辆没有踏板的自行车。我们试图指导德克西用自己的脚推动自己,就像他在走路一样。我们试图告诉他(考虑到一个两岁孩子有限的语言能力,有些困难),一旦他能做到这一点,他就能通过反复向前推动自己并快速将双脚抬离地面来移动得更快。
平衡自行车
又一次,人工智能技术来了。如前所述,奖励功能是 RL 成功的关键因素。它为人工智能模型挑选的一系列行动提供了一个反馈回路,以评估它们是否产生积极或消极的结果。对于学习玩超级马里奥游戏的 RL AI 模型,奖励功能被设计为马里奥越快完成课程就给予越积极的奖励。马里奥掉坑死了就给负反馈。正如你所看到的,这个奖励功能是在一个更高的层次上设计的,而不仅仅是为 Mario 执行的每个离散动作(行走、跳跃等)提供奖励。).这使得人工智能可以自己探索哪一系列的行动会产生更大的回报,而不需要微观管理。
超级马里奥游戏
将这些知识应用到德协的自行车训练中,我不再给他不断的指示。我得到了我需要的奖励函数——让 Dexie 走得更快。唯一的问题是,与总是接受你给它的奖励函数的人工智能不同,一个蹒跚学步的孩子不会。需要一种激励。因此,由于目标是让德歇加快脚步,骑得更快,我们让他和我们一起玩追逐游戏,因为他想抓住我们的愿望与奖励功能完全一致。
为了进一步提高他的技能,我们现在让德谢和已经是平衡自行车专家的邻居孩子一起玩。这使得德克谢能够模仿它们的动作,从而加快移动速度。它类似于用于训练强化学习模型的模仿学习技术。
人类大脑的强大力量
我从这些实验中获得了如此多的智慧,这无疑使我成为一个更好的父母,并有助于保持我的理智。尽管抚养一个蹒跚学步的孩子和训练一个人工智能有许多相似之处,但我现在意识到也有显著的差异,包括人工智能技术需要改进多少才能与人类持平。
人脑是一种通用的思维机器,能够学习许多不同的学科,如语言、视觉识别和数学。我们通过使用从这些知识领域收集的信息来做出决策。即使我们从未见过下面照片中的狗物种,我们也知道它是狗(即使它看起来像拖把),因为我们对人类生活方式的知识告诉我们,人们遛狗而不是拖把。如果人工智能对象检测模型从未在训练集中见过这种类型的狗,它将无法做出这种区分,因为它唯一的知识来源是视觉。
Komondor 犬种。图片 via flickr
即使面临相当大的不确定性,利用我们的知识图表的能力也能使我们做出更好的决策。让我们的大脑更加神奇的是,我们不断使用这些知识图来理解、消化和验证新信息,同时提取高级抽象,进一步增强我们的知识图。在处理歧义时,我们甚至可以用“为什么?”来询问更多细节
回答这个问题会产生额外的反馈循环,使我们的知识图更加健壮。随着可靠性的提高,获取更多的知识变得更加容易。这个过程叫做推理,目前在 AI tech 中缺失。还没有人知道如何构建一个具有推理能力的人工智能,所以不要担心“人工智能正在接管人类”的宣传。至少在未来 50 年内不会发生。
我们大脑内部的复杂网络图。图片经由 土坯
这是所有的乡亲。我希望这个故事能引起像我一样热衷于技术的父母们的共鸣。
用人工智能语音助手彻底改变健康
人工智能、观点、技术
Siri、Alexa、谷歌以及语音和健康技术的未来
图片来自 shutterstock
下一次健康革命就在你的声音里
未来的愿景是释放人类的声音,作为一种有意义的健康衡量标准。人工智能语音助手可以将语音转换为生命体征,实现对即将到来的情况的早期检测和预测。类似于温度是发烧的指标,声音生物标记可以为我们提供更完整的健康状况。
解决心理健康方面的全球性问题
全球有四分之一的人会在生活中的某个阶段受到或大或小的心理健康问题的影响。目前约有 4.5 亿人患有焦虑、压力、抑郁或其他疾病,这使得心理健康成为全球健康不佳的主要原因之一。如果早期发现和治疗,许多这些问题是可以预防的,但是,近三分之二的健康不佳者没有寻求或接受适当的帮助。
声音是健康的生物标志
口头交流编码了丰富的信息。直到最近,研究和技术才交叉起来,使我们自己的声音成为最有效的健康生物标志之一。
“想想产生声音需要多少肌肉和大脑区域的精确性和协调性,各种疾病会潜移默化或急剧影响一个人的声音和语言的使用。”
科学研究正在验证声音作为生物标记的有效性。一些重要发现:
声音生物标记是来自我们声音特征的医学信号,类似于脉搏和血压等其他生物标记。捕捉和分析我们声音的细微变化:音调、强度、声道协调、抖动、颤动、震颤、停顿等。,创建了一系列健康测量,可在几秒钟内提供更完整的健康状况。
这张图表显示了声学特征和精神疾病之间的相关性。1 分=与健康人群相比,精神障碍人群的声学特征显著更高,也称为正相关。0 分=无显著相关性。得分-1 =负相关。单元格大小反映了支持该效应的研究数量。例如,抖动和微光有大量的研究支持这些声学特征与抑郁正相关。来源:ncbi.nlm.nih.gov/pmc/articles/PMC7042657/
释放人类声音,增进健康
今天,技术、产品和服务更加集中于身体健康。但是心理健康呢——可以说是我们整体幸福的更基础的方面?人工智能语音助理技术,如 Siri、Alexa 或谷歌,可以通过打开一扇通往我们心灵健康的新窗口来改变医疗保健。
当健康发生变化时,声学也会发生变化。这些声学特征可以预测情绪状态、情绪、压力、焦虑、抑郁、痴呆、脑震荡、心脏病等状况。由于数据量巨大,人工智能和机器学习可以比人类一年更好地检测和分析这些声音特征。
图片来自 shutterstock 的帕努瓦特
与艾对话改善心理健康
人工智能语音助手可以提示不同类型的语音诱导任务。例如,在一天开始时,Siri 会问:“我注意到你今天有很多会议,你感觉怎么样?”或者在一天快结束的时候,Siri 会问:“你今天过得怎么样?”类似于 Apple Watch 在检测到心律不齐时提醒一个人,一旦捕捉到语音,Siri 可以利用机器学习来分析语音反应,并提供有意义的建议。健康问题的早期发现可以挽救生命。
可能的用户体验包括:
- 发现潜在问题并提出有意义的指导建议
- 基于语音特征输出健康或压力分数
- 当用户表现出焦虑时,建议放松
- 当检测到疲劳迹象时提示睡眠提醒
- 根据情绪和心情建议锻炼、其他活动或第三方应用
- 通过发现用户语音和其他健康数据(如睡眠、锻炼、饮食或心率)之间的关系来提供见解
- 与医疗机构和临床医生集成,以监控和跟踪患者的进展
作者图片
为什么是 AI 语音助手而不是健康应用?
声音作为生物标记的成功实施需要自然的对话。AI 语音助手的人性化和熟悉的体验使参与和捕捉高质量的语音比一个应用程序更有效。每次打开一个 app 的过程,都可能导致不自然的对话,低质量的声学特性,造成用户掉线。用户也可能将其视为“另一个健康应用”。有了人工智能,用户可以在真正需要的时候,比如在情绪状态下,更加开放和方便地说话。
产品成功路线图
该产品的成功可以从三个主要方面来衡量:
- 整体精神健康的改善
- 通过自然语言处理和语音情感分析对情绪的改善进行评分
- 在诸如疲劳、焦虑、压力等特定领域取得进步
- 整体精神健康评分的长期改善
- 自我报告的精神健康改善,非 Siri 决定
2.参与人工智能语音助手和健康生态系统
- 每日、每周和每月活跃用户的增加
- 最佳的互动率、对话长度和话语
- 睡眠质量、锻炼和其他健康领域的改善
3.技术准确性
- 通过跟踪真阳性、真阴性、假阳性、假阴性的混淆矩阵,不断提高机器学习模型的准确性
- 减少重复命令以及语音捕获和分析错误
已经与 AI 语音助手合作的目标客户
最初的目标客户可以是那些已经每天多次使用人工智能语音助手的人,从而最大限度地减少额外的行为变化。可以通过缩小范围来提高准确性。例如,对于加利福尼亚的 iPhone 和说英语的用户来说,体验和口音的变化很小。如果可能的话,瞄准那些遇到压力情况的用户,比如让 AI 语音助手告诉某人他们要迟到了。
拥有临床医生的二级客户群
人工智能不应该取代卫生专业人员。相反,它是增强临床医生能力的工具。一些使用案例包括:
- 临床医生让人工智能主动倾听患者,以帮助诊断或识别语音模式,假设没有隐私问题。这类似于 NLP 目前如何帮助卫生编码员转录患者笔记以识别医疗诊断。
- 临床医生鼓励患者与人工智能进行对话,以此作为监控和跟踪进展的一种方式。通过语音分析,临床医生可以确定患者是否已经停止服药,抑郁症复发,或者再次暴食症和呕吐。
长期客户关注可访问性和整体健康状况
受益最大的是那些已经面临风险的客户。人工智能语音助手必须专注于为患有语言、视觉、听觉、运动或其他障碍的人提供无障碍环境,并对那些不太熟悉技术和支持全球语言的人格外友好。为了实现长期的全球利益,使用声音作为生物标记可以扩展到精神健康以外的整体健康。
根据高价值、低风险、低投入确定优先级
健康是一个高影响、高敏感度的空间。可以基于这些变量来确定首先构建哪个区域的优先级:
- 价值:如果提供一个解决方案,一个人的生活可以改善多少
- 风险:潜在的法律、隐私或负面公关问题
- 努力:达到有意义的价值所需的全部工作
情绪和心情是一个理想的起点,因为它可以为用户提供日常价值,与其他人相比不是一个严重的健康问题,并且用于机器学习模型的语音数据集和用于克服情绪状态的有意义的建议很容易获得。该路线图将首先关注心理健康领域,然后扩展到一般健康领域。
与内部团队和研究伙伴进行 MVP 实验
一个快速的测试方法是建立一个内部测试组和控制组。实验将手动进行。对照组没有任何变化。对于测试组:
- 参与者每天都会收到一条语音信息,询问“你今天感觉如何?”
- 参与者被要求用一个数字和简短的解释来口头回答
- 基于响应,提供类似人工智能的推荐
- 参与者可以自由选择反映现实行为的后续行动
- 衡量人工智能建议的有效性并做出调整
- 衡量情绪评级的每日和每周变化
- 在分析成功之前,进行至少 21 天的实验
我们还希望确保参与者的多样性、隐私、诚实的舒适性,并在实验完成后可能删除所有回答。
同时,与目前研究这一领域的机构合作,进行一个类似的、更科学的实验。如果结果证明是成功的,那么我们就可以证明构建自动化和复杂的特性是正确的。每一次实验都可以让我们收集更多的数据,优化体验,改进算法和推荐,为向真实用户铺开奠定基础。
从一开始就加强质量
机器学习模型的好坏取决于我们提供给它的数据。从一开始,我们就必须确保数据的公平性、多样性和代表性。我们可以通过分阶段关注文化区域来控制范围,例如首先关注美国口音,但我们必须将数据质量放在首位。这包括人口在文化、语言、性别、生命阶段以及各种精神和身体特征方面的多样性。我们应该尽早让客户体验团队参与进来,以审查和确保数据集的公平性和多样性。
不能牺牲用户隐私。为了保证隐私,将个人数据存储在本地,并不断改进可以单独更新的模型。
减少风险和未知因素
巨大的回报伴随着障碍。组织需要仔细思考并采取行动来降低风险:
- 用户隐私问题和潜在负面公关风险?— 通过确保符合最高隐私标准来降低风险。不断评估和规避产品、设计、工程、数据收集和其他领域的最坏情况。真实地创造一个真正想要改善健康同时保护隐私的产品。
- 公众对侵入式人工智能的感知风险?— 将信息定位为最有利于我们客户的健康,并与使命和品牌保持一致,以使命驱动产品和公司。
- 我们应该为孩子开发这项技术吗? —解决生命早期阶段的心理健康问题具有重要价值,但是,这涉及干预的风险。这需要提升到与监护、人工智能和医疗保健相关的更高伦理讨论。
- 如果误报导致自我实现的预言,用户实际上变得抑郁了怎么办?假阴性怎么办?— 关注行业最佳实践,如 Apple Watch 和其他消费者健康相关技术。对抑郁症等严重健康问题有更高的准确率。对用户透明,人工智能是在做预测,推荐,而且从来不是 100%准确。
- AI 语音助手给出医疗诊断?— 明确 AI 不是在诊断,而是在协助,只是在推荐。类似于 Apple Watch 建议用户寻求专业的医疗帮助。
- 如果医疗服务提供者或执法部门想要使用健康数据,该怎么办?— 理解并遵守关于用户隐私的严格信念和准则。向用户和公众清楚地说明这些。
光明未来的种子
这个领域有一些有前途的公司在人工智能语音技术方面取得了进步:
- sondehealth.com——利用声音生物标记检测健康变化
- 【cogitocorp.com —情商语音分析改善客户服务
- companionmx.com——监测情绪状态的声学生物标志物
- neurolex.ai —情绪、疲劳、抑郁、阿尔茨海默氏症等的语音数据集
- research.ibm.com——利用自动化语言分析预测精神障碍
先行者可以通过彻底改变声音作为生物标记来超越竞争对手
这一领域的先行者将通过将语音重新分类为生物识别数据来扰乱医疗科技行业。研究和创业公司已经支持这一运动。先行者可以通过拥有人工智能语音助手健康空间来跳过竞争,而不是直接在现有的虚拟助手任务上竞争。有了这么多新的有意义的数据,创业公司可能会在这个领域萌芽,并与生态系统一起建立。这将是公司和全球健康的胜利。
健康的未来在你的声音里
通过与我们已经使用的设备对话来开启健康是医疗保健的一场革命。对于一个公司来说,改善 AI 语音助手来丰富我们的健康意味着增加客户满意度,更好的产品参与度,并可以增加客户的终身价值。对于社会而言,通过我们的声音识别健康问题早期迹象的能力是从被动到预防性医疗保健的变革性步骤。未来听起来很光明,这项技术对我们日常生活产生有意义影响的机会才刚刚开始。
人工智能将如何拯救成千上万的生命
败血症是问题所在;数据是良药
另一家陷入败血症泥潭的生物技术公司。基蒙柏林
当你想到医疗保健中的人工智能时,你可能会想象人工智能驱动的药物发现,或者机器人手术或者图像分析。有充分的理由——这些应用正在发生或即将发生。
我们都知道人工智能在改善医疗保健方面有很大的潜力。但它最大的影响不会在制药实验室或安静的放射室的安静范围内感受到。取而代之的是混乱的病人护理前线。人工智能在管理“黄金时间”疾病方面将是至关重要的,在这些疾病中及时和适当的治疗可以拯救生命。
脓毒症是这些疾病中首当其冲的。它每年杀死 27 万美国人。这个数字相当于肺癌、乳腺癌、前列腺癌和结肠癌的总和。死亡率为 20 %- 30 %,在过去三十年中几乎没有改善。
所有开发败血症药物治疗的尝试都以失败告终。尽管进行了超过 100 次 2 期和 3 期临床试验,但没有药物显示出疗效。生物技术领域到处都是希望分水的公司的尸体。相反,他们发现自己被困在医学上的 LaBrea 焦油坑。
难怪败血症死亡率居高不下:
根据不同的定义,对脓毒症死亡率的估计有所不同,但没有显示出明显的改善趋势。自己的工作,数据来自2009–2014 年美国医院败血症的发病率和趋势
脓毒症(更准确地说,脓毒性休克)是免疫系统对感染的过度反应。面对全身性细菌感染,细胞因子会大量释放。结果是混乱和适得其反的免疫反应。标准治疗包括服用抗生素,外加服用升压药(升高血压的药物)和液体。
脓毒症是人工智能知情干预的良好目标。问题很大。最佳治疗方案正在激烈争论。患者受到严密监控,因此有大量数据需要分析。这种疾病是异质性的,许多共病作为混杂变量。有一个明确的结果(死亡率)。
简而言之,这是一种人类大脑很难分析的疾病,但可以通过机器学习技术来分析。
这就是《自然医学》中这篇论文的背景:“人工智能临床医生在重症监护中学习脓毒症的最佳治疗策略”。我不能假装懂机器学习。但总体方法是合理的:输入一大组病人变量,包括人口统计、病史、血液化学和生理学;将这些与实际疗法相匹配;与训练集的结果相关联;在独立数据集上验证。
以下是关键结果,以死亡率与实际和人工授精建议的治疗过程之间的一致性的图表表示:
脓毒症转归的回顾性分析。零值意味着实际医生和人工智能推荐的治疗是相同的。自己的工作,数据来自人工智能临床医生学习重症监护中脓毒症的最佳治疗策略
x 轴显示静脉注射液(左)或血管加压药(右)的实际剂量和建议剂量之间的差异。零值意味着医生的行动与 AI 算法的建议相匹配。这是死亡率最低的地方。这并不奇怪,因为这就是算法的目的。
响应差异曲线的形状提供了信息。静脉输液量为建议水平,低于建议水平为最佳水平;输液过少对死亡率影响不大。但是当液体摄入超过推荐水平时,就会发生不好的事情。死亡率最高时增加了两倍。我怀疑没有人预料到这个结果。大多数医生对低血压患者的反应可能是继续输液。
升压药图表(右图)非常可怕。有一个非常狭窄的治疗窗口。任何高于或低于该值的偏差都会导致死亡率急剧上升。请记住,这不是一个“一刀切”的治疗过程,即一剂升压药对所有患者都适用。这很容易实现,如果它存在的话,我们早就在没有人工智能的帮助下找到它了。相反,这是一个狭窄的治疗窗口,并以患者的病史和生理状况为条件。难怪有效的脓毒症治疗如此困难。
当然,这只是一篇论文。这可能是错误的,需要在对真正的病人进行测试之前进行复制和改进。但是死亡率有很大提高的潜力。这种潜力表明,进一步的发展应该具有高度的优先性。
碳与硅
其他几个结果值得注意。以下图表比较了医生(下图)和 AI(上图)给出的相对权重与决定静脉输液量的不同参数:
首先要注意的是,医生赋予最大权重的变量也是 AI 赋予最大权重的变量。这让人放心。临床医生对脓毒症的治疗一无所知,这令人难以置信。经验丰富的医生和人工智能在最重要的变量上达成一致,给人工智能算法带来了可信度。
这些图表更有趣的特征是考虑的变量的数量。临床医生只依赖少量的输入。人工智能赋予更多变量以重要性。
这符合我们对人类思维的了解。我们的工作记忆是微弱的:我们在任何时候都能记住 3-5 个项目。我们对这些的把握很容易被分心打破。苦恼的临床医生专注于几个关键输入不足为奇。
当然,计算机没有这些弱点。他们可以利用数千个数据点来建议治疗过程。他们也不受对他们注意力的破坏性要求的影响。
人工智能治疗脓毒症的必然性
这里是关键的要点:如果超过几个数据点在确定最佳治疗中有价值,那么不可避免的是人工智能算法最终将胜过人类。它可能不是本文中生成的特定算法,但有一个优化的处理算法。会被发现的。它将拯救成千上万的生命。将败血症死亡率降低 5%相当于找到了乳腺癌的治疗方法。
人工智能在这一应用中的潜力大于所有其他人工智能医疗干预的总和。我们应该继续下去。
披露:我曾为 MBio Diagnostics 开发败血症诊断工具提供咨询。我没有参与本文中讨论的工作。
Airbnb 如何预测你的住宿价格
训练回归模型以预测住宿价格
irbnb 是一个平台,它将租房的人和其他想租房的人联系起来。根据大量的广告,可以根据要出租的房产的特点假定一个典型的价格。
这一标准价格首先引起了房东的兴趣,他们将能够设定理想的租金价格,以最大限度地提高对其房产的需求,但也引起了那些将要出租公寓的人的兴趣,他们将了解他们希望出租的公寓相对于市场的位置。
在本文中,我们将一起了解如何创建一个模型,通过查看其特征来预测房地产的价格。为了做到这一点,我们将首先呈现我们拥有的数据,我们将清理它,然后我们将训练一个回归模型,我们将评估它。
数据集
数据集来自非常著名的数据集书店 Kaggle。它在柏林市收集了几年的广告。
我们将用于此分析的信息将与价格相关(价格、清洁费、额外人员费、保证金)、便利设施(是否有 wifi、洗衣机……)以及位置(经度、纬度)。
数据清理
数据清理是数据科学中最重要的事情之一。我们将在这里看到一些基本的例子。
价格
首先,对于价格,我们的训练算法需要格式为“51”而不是“51,00 $”的价格,因此我们将所有价格转换为所请求的格式。
函数 replace 只是将第一个参数替换为第二个参数。
数据集中没有一些价格。如果我们没有价格值,就会导致错误。因此,我们认为,如果没有输入价格,则表明所有者希望从这项服务中免费获益。
函数 fillna 通过参数替换空值
舒适
便利设施功能是一个长长的列表,列出了公寓中所有可用的便利设施。所以我们要做些安排。
所以我们得到了一个有序的数组,我们可以很容易地把它可视化。
功能 strip 删除前导和尾随字符。
便利设施的分配。
我们可以在这里看到,Wifi、厨房、暖气和必需品都存在于大多数航空公司,比如超过 20,000 家航空公司拥有这些设施。所以似乎很明显,如果你的 airbnb 没有这些便利设施,价格会更低。
特征工程
从现有数据中创建新数据可以显著提高模型的性能。
当我们将 Airbnb 的价格与其位置进行比较时,我们可以很容易地看到,市中心的价格更贵。
显然,离柏林市中心的距离对房产价格有直接影响。事实上,正如世界上所有的大城市一样,人们寻求靠近市中心,因此这些房产更受欢迎。
因此,我们将创建一个要素来计算公寓到柏林市中心的距离。
大圆函数给出两点之间的直线距离。
建立模型
训练/测试分割
为了建立一个合适的模型,我们需要两组数据。一个用于训练我们的模型,另一个用于评分。
我们需要做的第一件事是分离特征和标签。
然后我们可以使用 scikit 学习库中的 train_test_split 函数来拆分我们的数据。
我们现在将尝试训练两个不同的模型来比较它们的性能。
随机森林回归量(RFR)
我们首先通过使用 scikit learn 实现非常简单地训练我们的模型。
然后,我们用不同的指标对模型进行评分,这些指标将告诉我们模型的平均误差。
我们得到的平均房价为 22.72 美元,这意味着,平均而言,当我们试图猜测一套公寓的价格时,我们的模型错了 22.72 美元,这是值得尊敬的。
现在让我们尝试另一个模型,看看我们是否可以提高这个分数。
XGBOOST
同样,我们将使用 scikit learn 的实现
在训练完我们的模型之后,我们也可以尝试给我们的模型打分。
在这里,我们有一个超过 1 美元的 MAE 下降,这是非常令人鼓舞的。
结论
因此,我们在这里看到,在大约 15 分钟的时间里,通过一些想法,我们可以构建一个模型,该模型仅使用五个功能。
因此,很容易想象 Airbnb,像大多数在过去十年中创建的公司一样,在机器学习上投资很多。因此,该公司用更多的方法建立模型,这些方法不是试图将误差减少几美元,而是几美分。
因此,重要的是要认识到,甚至在你在平台上发布广告之前,它就知道将以什么价格出租。
Airbnb 如何利用位置数据改善客人体验
一瞥位置如何在酒店行业扮演重要角色
美式咖啡和意式浓缩咖啡对于星巴克、纽约和巴黎对于 Airbnb 的意义。Airbnb 通过为客人安排/提供寄宿家庭或当地体验,进入了“共享经济”的酒店业。Airbnb 是一个为多余空间服务的社区市场,有多余空间主人的人和去这些地区旅行的人可以在这里预订房子。
Airbnb 是出于需要而诞生的。我们的房租一直在上涨。它诞生于一个问题。~ Jeo Gebbia,联合创始人
如果你是一个喜欢处理数字的人,你会惊讶地发现 Airbnb 在超过 191 个国家拥有超过 650,000 个主机的超过 300 万个房源。由于一些影响旅游业的因素,它在美国、法国、意大利、西班牙和英国最受欢迎,但旅行者可以在全球 98%的国家找到列表(住宿/体验)。
酒店业或共享经济正在他们的日常业务流程中利用位置分析。 Locale 利用位置数据进行实时移动分析,帮助组织改善业务和客户体验。
让我们来看看 Airbnb 如何利用位置数据来扩展其业务并提供更好的客户体验。
位置相关性
我们当中有多少人知道 Bir 账单?
我自己最近也发现了这一点。Bir 是喜马偕尔邦的一个小而精致的村庄,以其修道院和滑翔伞/徒步旅行活动而闻名。
Airbnb 通过创造性地帮助人们在我们知之甚少的地方找到他们正在寻找的“本地”体验来弥合这些差距。他们的搜索算法结合各种信号,列出客人想要的体验或他们想要参观的地方,在这方面发挥了关键作用。
为了使他们的搜索和列表更加精确,Airbnb 使用了一种被称为“列表质量分数的东西,根据与搜索中心和客人评论的接近程度来列出地点。有趣的是, Airbnb 如何利用他们客人的声音,得出在用户搜索的位置预订的条件概率。[ 来源
Airbnb wrt 距离搜索中心的密度[ 来源
例如,对华盛顿的 Clyde Hill 的搜索将因此滑向也搜索 Clyde Hill 的人通常会结束预订的街区,例如,Yarrow Point 或 Evergreen Point。
更好的搜索排名
决定各个地方或体验如何在 Airbnb 上列出的因素与位置数据具有高度相关性。搜索排名算法帮助客人为他们的旅行找到完美的列表,主人找到非常适合他们的地方的客人。Airbnb 一直在通过调整一些信号,如智能定价、可见性和转换触发,来正确对待房地产经济。
当某个房源/地点位于高需求区域时,他们可以从 后期可见性 中受益(即您的地点可能会出现在搜索结果中,因为所有其他房源都已预订)。考虑到排名因素,一个好的位置和风险偏好的适当优化可能会对您的入住有利。
特定位置的转换触发器[ 源
智能定价
很大一部分 Airbnb 主持人将该网站视为额外收入,而不是他们的主要工作。80%的主人只在他们的家里、客房或度假屋租一个房间。Airbnb 对当地经济有着令人惊讶的积极影响,因为他们的客人停留时间是酒店客人的 2.4 倍,他们花费的钱是酒店客人的 2.3 倍,这些收入停留在紧密联系的社区内。
由Airbnb制作的官方视频展示了智能定价的实际运作方式:
主机(和 Airbnb)的整体盈利能力取决于多种因素,如主机可以投资的时间、先前的市场知识以及对变化的模式和季节性需求变化的相对响应能力。为了解决价格变化的问题,Airbnb 提出了一个改变游戏规则的解决方案,称为智能定价,它使用预测分析来得出任何给定一天的最佳价格。
此功能会根据实时变化的条件更改预订价格。
影响智能定价的许多因素都有地理空间因素。住宿的位置、离公共交通的远近、季节和一个地区的便利设施等因素都会影响价格和预订。
罗马街区。来源:Airbnb
建立信任
信任是“共享经济”的基本货币,也是我们所做的几乎所有事情的核心。Airbnb 正在通过提供三样东西来为其社区建立信任:安全、透明和支持。
有趣的是,科技在确保主人和客人之间的信任方面扮演着杠杆的角色。预测分析和行为分析相结合,用于评估每次列名的风险。风险可能是地点方面的,也可能是寄宿家庭/地方之前的任何可疑活动。为了避免这种情况,Airbnb 对客人和主人进行了许多背景调查,以确保他们没有任何犯罪记录。
布莱恩·切斯基强调了信任在共享经济中的重要性。用他自己的话说,
我不是说全世界都会这样,但是有了 Airbnb,人们就睡在别人家里,别人的床上。因此,参与需要一定程度的信任,这与易贝或脸书不同。
Airbnb for Work 为每个注册公司的旅行经理提供了一个仪表板,以跟踪他们遍布全球的员工。他们可以完全了解每个人目前正在旅行的地方和将来将要旅行的地方。
在这次 TED 演讲中,Joe Gebbia 讲述了他们是如何克服了 T4 对陌生人的偏见,并设计了一个平台来建立社区成员之间的信任。
这是人类的一种心理特征,我们相信那些在年龄、地点或地理上与我们高度相似的人。根据斯坦福大学对 Airbnb 的这个案例研究,只有当每个人在过去都有好的评价时,具有不同人口统计背景的人(主人/客人)才会倾向于信任对方。
Airbnb 地图
人们通常很难相信 Airbnb 的制图师正忙着绘制世界地图。等等,什么?世界不是已经被 Google Maps、Waze、Foursquare(不一而足)绘制出来了吗?这不是假的,但 Airbnb 通过绘制世界各地的地图来找到它们与其他地点的关系,从而开始了解决大问题和难题的旅程。
有了 Airbnb 地图,你可以追踪位于世界任何地方的 Airbnb 的实时活动。坐在你的房间里,你实际上可以看到有人飞过澳大利亚的大堡礁,或者有人在意大利的异国情调的民宿 Airbnb 登记入住,或者可能看到有人在巴黎享受真实的当地体验。
有一些具有文化意义的地区没有在地图上画出来。他们大多生活在当地社区的思想中,把这些地方叫做家。Airbnb 努力寻找和绘制这些地方,以便您知道您应该去世界上的哪个地方旅行,从而为您和您所爱的人创造一次完美的旅行!
改善可持续旅游业
健康旅行和健康目的地报告显示,Airbnb 通过其平台和社区模式帮助对抗大众旅游,促进可持续旅游。
航空旅馆鼓励地理多样性和客人的合理分布,以避免过度旅游。大多数抵达全球知名旅游目的地的客人都来自传统旅游区之外,Airbnb 房源中有 72%到 93%位于存在过度旅游风险的地区之外。这确保了与酒店相比,寄宿家庭不太集中,并导致客人的同质分散
****
不仅如此,游客对城市不同部分的看法在很大程度上影响了游客对特定地点/位置的流入。客人评论和评级的结合有助于人们决定他们的下一次寄宿家庭/体验。
主人和客人接受
Airbnb 付出了很大的努力,以确保主机同样受益。他们通过设计更好的匹配算法使之成为可能,从而提高预订转化率。
对于客人在 Airbnb 的搜索引擎上输入的每个搜索查询,他们的模型都会计算相关主机想要满足客人请求的可能性(根据官方数据,这导致预订转化率增加了约 3.75%),可以肯定地说,位置在其中起着非常关键的作用!
位置不仅仅是地图上的一个点。组织正在使用位置分析来扩大他们的业务。酒店业或共享经济也不例外。
板球全能评分是如何计算的
本.斯托克斯的崛起。
如果你去年一直在关注板球,你应该听说过本·斯托克斯。他为英格兰赢得了一场比赛的胜利,并有着一生的复出故事。
纳帕兹/CC BY-SA(https://creativecommons.org/licenses/by-sa/2.0)
现在,他在统计上是世界上最好的测试多面手,最近超过了西印度群岛的队长杰森·霍尔德。
我想更好地理解这个标题的含义。
今天,我将使用 web 抓取和 python 中的基本机器学习来揭示全能选手在板球测试中如何评级的一些发现。虽然我的许多结论已经在排名概述中列出,但我使用的设置和方法可以应用于更复杂的问题。
背景
这篇文章不是用来教板球的。虽然我将提供一个测试板球的基本概述,但如果你想了解更多,我建议查看这些视频。
照片由 Chirayu Trivedi 在 Unsplash 上拍摄
在板球测试赛中,每个队都可以参加击球和保龄球比赛。击球手试图得分“跑”,投球手试图限制这些跑。要赢得比赛,一个队必须比对手得分更多。
典型的情况是,球队有一些“专业投球手”和一些“专业击球手”。专业球员有一个主要职责——击球或保龄球。
也有像本·斯托克斯这样的全才。这些球员在击球和保龄球方面足够优秀,可以被选去做这两项运动。
国际板球理事会(ICC)计算球员击球或保龄球评分的方式有些不透明。有许多考虑因素融入到一个球员的击球或保龄球评分在一场比赛后如何变化,包括另一队球员的质量,同一队其他球员的表现,以及该球员的球队是否获胜。
击球和保龄球评分完全可以从比赛统计数据中得出——没有裁判小组来决定玩家的评分如何变化。
同样,全能评级应该完全来自击球和保龄球评级。为了找到击球、保龄球和全能评分之间的确切关系,我查阅了数据。
抓取数据
我开始收集由国际刑事法院维护的板球运动员测试等级。我用的 Python 抓取库叫 BeautifulSoup。我选择它是因为它可以处理定制的刮擦解决方案,而不需要我使用特定的后处理解决方案。BeautifulSoup 也只处理 HTML 字符串作为输入,所以我必须先使用类似requests
的工具来检索有问题的 URL。下面显示了一个示例:
设置刮削
在我看到显示击球、保龄球或刮痧排名的 HTML 代码后,我知道刮痧是可行的。在击球排名中,我们可以看到表格的每一行都对应于一个<tr class="table-body">
标签,标签中包含了一个球员的名字、排名和等级。所有的排名(击球、保龄球和全能)恰好遵循这种格式。
ICC 击球等级的等级表中的示例行
如图所示,一个示例行包含几个<td>
标签,它们本身存储了我们正在寻找的信息。我注意到了两种类型的<td>
标签:一种在最外层标签层包含相关文本,如<td class="table-body__cell table-body__cell--position u-text-right">
,另一种在最内层嵌套标签中包含相关文本,如<td class="table-body__cell rankings-table__name name">
。为了避免代码重复,我创建了两个函数来处理这些常见的场景:
这两个函数都使用 BeautifulSoup 的find
函数,该函数查找并返回具有指定“tag_name”和属性的第一个标签。这些函数在去除任何空白后返回找到的标记的文本。
get_outer_data_from_tag
在其find
函数中有附加参数“递归=假”和“文本=真”。这些参数确保我们只在最外面的标签中寻找文本,而不是在任何嵌套标签中寻找标签或文本。
存储数据
最终,我们需要一种易于操作的数据格式。我决定使用 Pandas DataFrames,因为它们不仅容易显示数据,而且允许快速直观的数据转换。
构建数据框架包括调用我前面讨论过的解析函数。对于排名表中的每一行,我们创建了一个包含玩家姓名、排名和等级的字典。我们将这个字典附加到一个字典列表中,在遍历每一行之后,我们从这个列表中创建了一个数据帧。
排名数据框架的简化创建
作为一个例子,生产的熊猫击球数据帧如下所示。
击球台
我为保龄球和全能排名构建了类似的表,并使用 Pandas merge
函数合并了所有的表。结果是一个包含我们所有数据的完整表格:
满桌击球、保龄球和全能评分
调查的结果
一旦我有了合适形式的数据,我需要找到产生全面评级的等式。
为此,我们定义了一个新的“X”矩阵,其中包含来自完整数据框架的击球和保龄球评级列。我们的“Y”矩阵包含相应的全能评定栏。
现在,我们需要找到一个将 X 映射到 y 的方程。在最简单的线性回归中,这涉及到为 X 矩阵中的每个变量找到一个系数。对于我们的问题,这意味着找到一个击球等级系数和一个保龄球等级系数。这类似于变量的线性组合:
*a *(击球等级)+ b (保龄球等级)=全能等级
给出更好结果的方法包括假设方程的形式是部分二次的:
*a *(击球等级)+ b (保龄球等级)+ c (击球等级)(保龄球等级)+ d =全能选手等级
这意味着我们的方程的次数是二,但我们只考虑一次变量以外的相互作用项。
构建 X 和 Y 矩阵
fit_transform
函数将我们定义的简单的 2 列“X”矩阵转换为 4 列:一列用于常数项,一列用于击球评级,一列用于保龄球评级,一列用于击球评级和保龄球评级的乘积(“交互项”)。
然后,我们可以对新的 4 列“X”矩阵和之前定义的“Y”矩阵进行线性回归。
如果我们检查我们的模型的系数,我们将得到 4 个值的数组。虽然我们没有足够的数据来得到一个完全无噪声的公式,但是我们看到除了(击球等级)(保龄球等级)*项之外的所有项随着我们产生的系数几乎为零。相互作用项的系数最终大约为 1/1000,这与其他地方讨论的公式相匹配,有助于将我们模型的误差保持在非常低的水平。
结论
全能评分的计算是独一无二的,因为它传达了什么。我们不能简单地平均一个球员的击球和保龄球评分来找到他们的全能评分,因为这样一个纯粹的击球手或保龄球手会有很高的全能评分,即使那个球员不具备全能的技能。
相反,通过乘以击球和保龄球评分,然后除以 1000,我们避免了将一流的专业球员提升到全能排名的顶端。从这个意义上说,全能评级很好地反映了一名球员在击球和投球方面的表现。
然而,全能评级有所欠缺,因为它没有评估真正的“全能”能力。例如,它不包括守门或防守技能,这些是板球比赛的重要方面。通常给出的原因是没有好的方法来衡量这些能力。我怀疑随着板球变得越来越受统计数据驱动,这种情况将会改变。
如果你有兴趣看或运行代码,你可以在这里找到它。我所介绍的方法可以用于为不同的目的收集 cricket 数据,或者分析评级系统的不同方面。我很好奇是什么让你受益!
基于人工智能的聊天机器人如何帮助你形成更好的长期习惯
当我们思考我们的日常行为时,我们经常没有意识到我们每天自动做的行为占了多大的比例。原因是:我们被与我们的需求紧密相连的无意识行为所“吸引”。根据《习惯的力量》一书的作者查尔斯·杜希格所说,我们日常行为的 40%到 45%是无意识的,因此,我们称之为习惯。尽管我们可能感觉像是在做决定,但我们并没有有意识地去思考它们。
Nir Eyal 在“钩子模型”中完美地描述了这一点:
Nir Eyal 的“钩子模型
首先,我们看到一个触发器,它用一条相关的信息让我们兴奋,或者在我们身上点燃某种情感。它可以是一个信息通知或突然需要联系,以感受更多的参与,社会和意识。我们渴望滚动我们的新闻或聊天。瞧,我们现在正处于行动阶段。动作越简单,我们就越容易重复。
每一个动作都形成一种行为。每当我们收到一条信息通知,或者滚动浏览提要,我们的大脑中就会有一点多巴胺飞溅。当我们期待快乐和 奖励时,我们大脑中的多巴胺水平上升,我们开始感觉良好。我们认为:“有人刚刚给我发信息了!一些很酷的事情正在发生!我们去看看”。一旦我们检查了信息,没有什么特别的,没有什么值得我们立即注意或反应的,我们的大脑告诉我们:“好吧,这次没有。不过,下次……”。尽管这次没有奖励,我们的大脑开始重新连接自己,渴望更多的多巴胺。
Maximillian Piras 的 Instagram GIF
这就是老丨虎丨机的工作原理。这就是我们新闻源的工作方式——它给我们狩猎的奖励。前三篇文章并不吸引人,但是第四和第五篇呢?这就是我们得到的“钩子”。
我们喜欢这种期待,很难不去期待。尤其是当奖励是如此容易和简单地得到,并给我们一种属于一个部落的感觉。
多巴胺陷阱
随着对快乐和回报的期待,我们的大脑充满了多巴胺。多巴胺推动我们去狩猎、交流和做爱。在过去,我们必须做一些事情:努力,移动,开始说话,或者做任何一种动作,这样我们才能得到多巴胺。然而,如今社交媒体为我们提供了直接的多巴胺回报,而我们很少或根本没有付出努力。
这就是为什么所有年龄段的人越来越难控制他们上网的时间,因为我们的口袋里总是有一个小小的多巴胺刺激器。这样的时间花费对儿童和青少年来说尤其危险,因为他们喜欢从看卡通片、电视剧和游戏中获得持续的多巴胺。由于无限制的多巴胺刺激,儿童和青少年对多巴胺越来越不敏感,需要越来越多的多巴胺,这反过来导致他们成瘾。
从下图中我们可以清楚地看到,平均每天花在社交网络上的时间每年都在增加。
根据哥伦比亚广播公司的数据,18 至 24 岁的年轻人中有 29%认为自己沉迷于社交网络,而在 2015 年这一数字仅为 19%。尽管这是一个心理因素,对花大量时间在社交媒体上的人进行的大脑扫描显示,药物依赖者的大脑区域受到了类似的损害。核磁共振图像显示,控制决策、注意力和情绪处理的大脑区域明显退化。
多亏了神经科学,我们更好地理解了大脑是如何工作的。不幸的是,我们大脑的多巴胺系统无法识别好的和坏的触发因素之间的区别,例如定期锻炼或躺在床上。如果多巴胺在对有害物质触发的反应中释放,它会强化坏习惯,所以它们会变成长期成瘾。
虽然多巴胺成瘾似乎是“他人”关心的事情,但我们所有人在某种程度上都受到它的影响。我们每天收到的信息数量每年都在增加。根据统计数据,每天有 650 亿条信息通过 WhatsApp 发送。其中一些信息非常相关和重要,而另一些只是恼人的社交网络干扰,夺走了我们的时间。大量研究证明,分心会降低我们的工作效率。
人工智能聊天机器人如何将你从“钩子”中拯救出来
人工智能(AI)和机器学习(ML)可以极大地帮助解决社交媒体上的“挂钩”问题。在人工智能和人工智能的帮助下,聊天机器人在不同的数据集和对话上接受训练,并具有足够的智能来处理标准问题和询问。想象一下,如果有一个智能的个人 AI 聊天机器人可以为你处理那些永无止境的所有相似的消息,那岂不是很棒?
我们已经决定创建一个智能的 个人聊天机器人 ,它在 messenger 平台上充当第二个你,并为你回复一个讨厌的远方朋友或亲戚,他总是发送无关的文本和视频,而你可以专注于你的优先事项和目标。在机器学习算法的帮助下,聊天机器人会根据你之前的聊天回复进行训练,这样它就能给出可能的最佳回复。
介绍 AIBRO ,个人聊天机器人创作系统
正确的习惯决定了我们的成功。你的社交网络习惯呢?你想在这件事上少花点时间吗?
附:你想试试 AIBRO 吗?
对机器学习的理解如何帮助制定更好的策略
给经理们应用人工智能所需的工具
为了利用人工智能带来的洞察力和能力,组织需要在几个方面做好准备:
- 组织必须对他们想要解决的问题有一个坚实的理解。
- 他们必须能够访问提供他们想要利用的洞察力的数据。
- 他们必须雇用具有技术能力的个人(包括数据科学家和程序员)来访问数据和实施机器学习过程。
这可能看起来违背直觉,但大多数公司都会犯的错误是第一步。管理人员试图将机器学习应用于无法通过可用数据回答的问题,或者他们误解了算法的能力以及它们可以回答的问题。为了增加管理者提出正确问题的能力,提高人工智能决策的有效性,我们需要更好地理解监督的机器学习和非监督的机器学习之间的区别。
在之前的博客中,我概述了监督机器学习的能力,并提供了一些可以用这些算法解决的商业问题的例子。这个方法只是故事的一部分。无监督的机器学习可以解决一整套不同的商业问题,并获得人类分析看不到的洞察力。
无监督的机器学习最适合数据集如此之大,以至于人类无法分类或定义变量之间的关系的情况。该过程允许决策者依靠算法来审查数据,并提出人工审查所遗漏的见解。
无监督机器学习的一些商业案例包括:
- 根据具有相似属性的顾客的偏好,推荐顾客可能喜欢的产品(网飞用这个来推荐你可能喜欢的内容)
- 根据员工离开公司的可能性对其进行分类
- 创建信用卡用户的微观细分群体,以确定提供更好的奖励计划。
为了进一步理解,让我们看一个例子:
假设你是一家大型连锁杂货店的经理,正在寻求解决销售额下降的问题。因为你了解无监督机器学习的能力,所以你建议公司使用无监督算法来识别经常一起购买的产品,并根据结果提供个性化的报价。
您收集在您的商店购买的所有商品的收据,并将该算法应用于该数据集。该算法识别客户经常一起购买的几种产品。
通过了解不同机器学习算法的应用,经理能够:
- 确定一个业务问题,并了解机器学习如何解决它。
- 了解所需的数据集以及算法如何应用于该数据集。
- 获得具体的见解,使经理能够制定数据驱动的战略。
当管理人员了解机器学习时,他们可以创建数据驱动的战略,做出更好的决策,并推动积极的变化。
失业的数据科学家如何安排他们的一天
入门
维持秩序很重要
介绍
让我们从陈述显而易见的事实开始…疫情正在发生,它正在影响市场。
我在 LinkedIn(包括我自己)上看到了大量“开放工作”的照片,更不用说那些创建帖子分享他们如何被解雇的故事并附上精美简历的大胆的人了——老实说,我赞扬他们所有人的大胆。我们不能忘记现在热衷于开始职业生涯的应届毕业生。
很艰难!
从技术上来说,我在本月 16 日之前仍然有工作,尽管实际上我从 3 月份就开始休假了。不用说,我需要为自己设定一个标准,以确保我做的事情能够从职业角度发展自己成为一名数据科学家——你可以在“ 我如何在 8 个月内提升我的数据科学技能 ”中了解更多关于我为确保这一点所做的具体事情。
2020 年 3 月,我接到一个电话,通知我将暂时休假,直到另行通知——非正式的意思是我将…
towardsdatascience.com](/how-i-levelled-up-my-data-science-skills-in-8-months-fae7897965ec)
当我第一次休假时,第一件对我来说变得明显的事情是我需要订单。我是那种需要为我的日子建立某种结构的人,清楚地知道那天我想完成什么——不,我不是在说待办事项清单。我觉得如果我没有条理,我的一天就会过去,在一天结束时,我会因为缺乏成就感而感到内疚,这很容易陷入自我怀疑的循环。
话虽如此,我认为有必要分享一下我目前是如何安排我的日子的,以此作为对其他数据科学家的一种思想激励,这些科学家目前因为某种原因而失业。
例行公事
我手工制作的时间表
上面是我制作的时间表的真实图像,我把它放在房间里的电视上方。当然,它并不严格,但我尽可能地遵循它,并做了一些修改。
5.05–5.25:正念;5.45–6.30:练习
注:一起讨论这两个问题,因为它们同样重要
我们都知道在数据科学领域找工作的压力。很累。这还不包括你将要面临的所有拒绝(因为你将要被拒绝!).早上是我精力最充沛的时候,我相信如果我想度过富有成效的一天,让自己在精神和身体上处于一个良好的状态是很重要的。
正念的目标是让我在新的一天开始之前达到一种警觉、专注的放松状态,不加判断地刻意关注自己的想法和感觉。我发现这很有用,因为我觉得这让我能够活在当下,因此当我需要完成一些工作时,会让我感到更加投入。
锻炼是我用来强身健体的东西。我不太喜欢举重,我做健美操(包括自由式),这需要很多能量。当我在训练时,我经常听播客(例如,走向数据科学播客、柴时间数据科学播客、数据科学的艺术家等),但如果有一天我不想健身,我会有一个播放列表——这很粗略。
6.55–7.55:读数
我是那些每周读一本书的人之一,但这个位置不一定是放书的(虽然我去哪里都带着一本书,这样我可以在等待的时候挤出几页)。这个时间段是分配给阅读博客文章的。一天中,我通常会保存我在网上找到的有趣的博客帖子,这次我会阅读它们(因此我正在阅读我前一天保存的帖子)——我发现这让我做好了心理准备,因为我经常受到其他人工作的启发。
8.00-12.00:数据科学
如果我是志愿者/自由职业者,或者我有一个正在进行的个人项目,它适合这里。我相信,每当我在做一个编程任务时,我都应该划出一大块时间,这样我就可以真正地迷失在工作中——那种心流状态。
目前,我正在做一个个人项目,我在这个项目中使用机器学习来检测欺诈。这个项目的目标不是获得一个准确的模型,相反,我更关注其他东西,如机器学习架构(批量训练,即时预测,在这个实例中通过 REST API 服务),持续集成和部署管道,部署到没有容器的 PaaS(即 Heroku),以及部署到 IaaS(即 AWS ECS)。
端到端机器学习项目的开始
towardsdatascience.com](/using-machine-learning-to-detect-fraud-f204910389cf)
考虑到这一点,我打算把重点放在软件工程最佳实践上,因为我相信“ 数据科学家应该知道软件工程最佳实践 ”。
成为不可或缺的数据科学家
towardsdatascience.com](/data-scientist-should-know-software-engineering-best-practices-f964ec44cada)
12.00–1.00:午餐
是的,我不吃午饭。留出时间来分散注意力和集中注意力一样重要。我不打算深究其中的原因,但我想推荐的一本书是《 学习如何学习 》。
注意:我不做联盟营销,所以我购买一本书的任何链接都只是推荐,因为它对我有用。
1.00–3.45:写博客
我更喜欢坐在博客前,在一天之内写完所有的东西,所以我留出了 2 小时 45 分钟的时间来敲打按钮。
你可能在想"你怎么会有时间为你的博客出主意呢?"或"如果需要编码怎么办?”。简而言之,我在晚饭后有相当多的时间来做我请求的事情,即使它是作为其他事情被屏蔽的,但总的来说,我相信我需要一篇完整的文章来准确地回答这些问题。
3.45–4.30:社交媒体
这一点很重要,因为我一直在谈论建立一个数据科学网络。
人际关系很重要,但它不能代替努力工作!
我很感激我的博客帖子越来越受欢迎,自然会有人想和你聊聊,老实说,你遇到的酷人的数量令人惊讶。然而,当这消耗你的时候,它就成了一个问题。
是的,你想建立关系网,结识新朋友。是的,你想高质量地回答人们对你提出的所有问题。是的,你想在你的 feed 上看到猫的图片,但最终目标是将你自己发展成为一名精英数据科学家,因此你应该设定你的界限并坚持下去。
注意:我也在午餐时间上社交媒体,尽管这通常更多是为了休闲和猫咪图片。
4.15–6.00:学习
如果我意识到我需要为我的项目学习一个新的框架,或者我正在参加一门课程,或者我正在阅读一篇研究论文,或者我想写一些我以前没有尝试过的东西……这些都在这里。
了解学习的 3 个阶段,以及我们如何将其有效地应用于数据科学学习
towardsdatascience.com](/3-stages-of-learning-data-science-9a04e96ba415)
6.00:急停
在这一点上,我已经从工作模式中解脱出来,除此之外的任何事情都是纯粹的休闲或承担责任。
现在我失业了,我利用这个时间(通常是 6.30-8.00)申请工作,因为我知道英国人将结束工作,我们可以进行更长/更深入的对话——这是如何关联的?我认为找工作的唯一途径不是填申请表。
包裹
在我看来,有一个结构是一天高效工作的基础。此外,在一个充满不确定性的时代,尤其是对于那些被解雇的人,我认为人们必须花时间考虑他们的精神和身体健康以及他们的职业生涯。“ 得到一份数据科学的工作比以往任何时候都难 ”并且在你发展自己的同时,需要一些迫切的耐心。作为一个失业的人,我向所有正在找工作的人致以最美好的祝愿。
保持活力,享受乐趣!
p . s .Dhruvil Karani写了一篇关于求职的精彩文章,我相信每个人都应该读一读——“在新冠肺炎中部被解雇并被聘为数据科学家 ”
困难时期找工作的心得。
towardsdatascience.com](/getting-fired-and-hired-as-a-data-scientist-in-the-middle-of-covid-19-2c6626556cf8)
让我们继续 LinkedIn 上的对话…
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有一个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/)
分析成熟度模型如何阻碍数据科学团队
数据科学功能障碍
削弱其他模型的模型
苏珊·d·威廉姆斯在 Unsplash 上的照片
如果我要挑选一张在分析和数据科学会议上展示的最常见的幻灯片,那将是 Gartner 的分析优势模型。它描述了四种类型的分析,按照难度和值的升序排列:
- 描述性分析:发生了什么?
- 诊断分析:为什么会这样?
- 预测分析:会发生什么?
- 规范分析:我们如何实现它?
不要与卡耐基梅隆的能力成熟度模型相混淆,该图被不同地称为成熟度模型、连续体、甚至是自动扶梯。有时公司也会颠倒订单。
抛开语义,我将根据通用的行业说法,在本文中称之为分析成熟度模型。
分析成熟度模型是一个令人信服的想法…
这种模式吸引了我们的想象力,原因有三:
- 它的形式与经典的 5W 1H 记者技巧非常相似,能立即激发我们的神经突触。从活跃的初创公司数据极客到穿着细条纹西装的企业分析销售人员,任何人都可以进行典型的推销:“我们从'发生了什么开始,直觉地前进到'为什么会发生什么',遍历到'会发生什么,并以令人满意的'我们如何才能让它发生'结束。”
- 它的同伴类比是有吸引力的和相关的。“哦,这就像一个正在成长的孩子。先学会爬,再学会走,才会跑。”线索在房间里点头。
- 这是一笔好生意。常见的咨询参与模式从评估公司在成熟度模型上的位置开始。然后,公司使用上面的级别来确定下一步要学习的能力的优先级。因此,该模型通过将结构强加到能力和清晰的路线图上来提供清晰性。
…但包含可能破坏数据科学的有缺陷的假设
以这种方式直观地表示模型引入了许多微妙的假设。不幸的是,这些假设中有许多是有缺陷的,可能会给数据科学团队留下严重的障碍。
具有讽刺意味的是,这种旨在帮助公司做出更好的数据驱动型决策的模型,却以一种促使人们做出关于建立数据科学团队的糟糕决策的方式呈现出来。
成熟度模型是由一系列的有效性级别构成的。但是,当我们做出以下假设时,危险就来了:
- 你从底层开始,按顺序逐层前进
- 每一个更高的级别都比之前的级别带来更多的价值
- 您管理这些功能的方式也是如此
这些假设都不是真的。
一次解构一个:
在进入高级分析之前,无需“完成”描述性分析。
首先,一个人如何“完成”构建报告、商业智能和分析能力?数据是一个不断变化的世界的动态表示,只要世界不断变化(永远变化,并且速度不断加快),就会有对描述性分析的新要求。
我明白,成熟的数据管理非常重要。做得好的数据平台是数据科学坚定的朋友。在一个地方拥有建模所需的所有数据是一件难得的乐事。拥有漂亮的(数据)仓库和湖泊,是随机森林生长的沃土。
但是,等待多年的数据仓库项目完成,同时将数据科学团队部署到 SQL 和文档任务中,这是在桌面上留下价值,也是让您的数据科学团队寻找工作的方法。
本质上,除非你在构建产品功能,否则数据科学和分析的价值来源来自一件事——那就是决策。
如果数据科学家能够通过数据影响决策向更好的结果发展,那么就创造了价值。如果没有改变的决定,那么你已经浪费了你的时间。不管你的安全高性能云托管可解释深度学习模型有多健壮,这都是真的。
整个团队极有可能存在,并因他们的工作而获得回报,但多年来却完全没有创造价值。
当高级分析机会消失时,没有必要在模型的较低级别等待。数据科学家可以立即增加价值的不常见但重大的业务决策是常见的事情。
一个好得多的策略简单得近乎可笑:
让你的数据科学家去做你能接触到的最高层人士的最重要的决定。
坐在这个人旁边。进入他或她的大脑和决策过程。从他们所在的地方开始,从那里开始你的前进之路。查找本地 access 数据库。寻找 Excel 电子表格。找管理会计。
并且使用工具箱中的每一种技术来提高决策。
不能确定更高水平的分析会带来更多价值
计算预测性或规范性模型的价值或“提升”的方法已经很成熟,例如,我们可以利用统计技术预测世界的状态,而无需因使用模型而进行干预,并在时间流逝后将其与实际情况进行比较,两者之差即为创造的价值。
举一个简单的例子,在开始一个数据科学项目以增加零售产品销售之前,人们可能预测在没有任何干预的情况下,下个月的收入可能是 10,000 美元。实施了定价和促销模型后,收入为 12,000 美元,模型升级为 2,000 美元。
但奇怪的是,计算描述性或诊断性工作的价值可能要复杂得多。因为如何准确量化觉知的价值呢?如果一个人蒙着眼睛到处走,他如何估计摘下眼罩的价值?
摘掉眼罩的商业理由是什么?照片由基里尔·巴洛巴诺夫在 Unsplash 上拍摄
如果你开始认为以上两种想法没有可比性,那你绝对是对的。
不同类型的工作在截然不同的管理方法下蓬勃发展。
我们已经确定,不同的级别可以并行工作,并以不同的方式衡量价值。但这还不是全部。
团队陷入成熟度模型低端的一个重要原因是,使描述性和诊断性分析有效的管理范例可能是预测性和规范性工作的丧钟。
这将在未来的专门文章中更详细地介绍,但简而言之,前者在强大的“工程”思维下蓬勃发展,具有 IT 风格要求、强大的项目管理和健壮的流程。而后者在定义了开始和结束点的项目范围之外工作得最好。
最大的不同在于数据的不确定性。预测和说明性分析的独特风险是:无法保证数据中有足够的信息,以使预测和说明性分析的应用有价值。
更复杂的是,对于一个给定的问题,也有多种技术可以利用,通常同样有效。因此,必须有足够的空间来试验、尝试,并在早期失败时产生很小的反响。举个例子,如果我正在为预测性维护建立一个机器学习模型,并且发现可用的数据没有携带有用的信号,在笔记本电脑上进行两周的实验后失败要比在六个月的预算项目和十人团队中失败好得多。
总结一下:成熟度模型损害团队的一个主要方式是,当公司采用用于交付描述性分析解决方案的管理方法,并将其应用于高级分析工作,而不修改方法以解决数据不确定性时。
迈向更好的数据科学团队成熟度模型
那么,我们应该如何看待成熟的数据科学团队呢?
首先,抛弃描述-诊断-预测-处方的光谱。在战壕中,工作经常在四者之间无缝转换。所有的分析和数据科学专业人员一直都在做诊断工作。每当有人在日常工作中从构建可视化模型切换到机器学习模型(反之亦然)时,强加主要的公司流程既痛苦又不必要。
人们不应该把分析成熟度和价值想象成一个成长中的孩子的身高,在一个维度上连续递增。一个更准确的起点是跨越两个不同维度来考虑成熟度——实际交付价值的维度:决策支持或生产系统。
在生产中成熟决策科学和数据科学
如果你正在支持商业决策,你想要的成熟度实际上是决策科学的成熟度。‘工程’在这里是次要的。相反,要研究数据素养和解释,减少认知偏差,并建立正确的衡量标准和激励机制,真正奖励数据驱动的决策。
构建数据科学产品或将模型投入生产是一项非常不同的活动。它需要承认数据不确定性的成熟流程、消除高级分析工作风险的安全实验空间、上线后的适当模型操作以及为产品而非项目量身定制的财务模型。
在本文中,我们掩盖了现实生活中数据科学团队的一些复杂性。AI 的子学科算理科还是工科?对于拥有博士学位的人来说,哪里是最有用的地方?如果我只调用预先训练好的模型,我是数据科学家吗?数据工程应该是一个独立的团队吗?
这些问题都符合。在未来的文章中,我们将涵盖不同的职业轨迹,以及管理分析、数据科学和人工智能团队的独特方法,这些方法将使每种类型的数据科学家蓬勃发展。
以上显示的所有图片仅用于非商业说明目的。本文是以个人身份撰写的,不代表我所工作或隶属的组织的观点。
我是如何以及为什么从核心工程流转向数据科学家的
以及为什么不仅仅学习数据科学是个好主意
在两年多一点的时间里,我从学习 Python 编程,到为客户构建仪表盘和管道,解决一系列机器学习和深度学习问题。当我开始我的职业生涯时,我开始了一份工作,这份工作利用了我的教育能力。我的背景是固体力学,并且在五年多的时间里获得了高级学位,我学习并不断地将我的基础知识应用于解决现实世界的问题,部分应用于基础研究。
随着时间的推移,我运行了更复杂的模拟,只是为了等待几天来优化它们,并寻找更好的方法来理解我所拥有的语料库。其他的困难是找到最佳数量的材料组合,这将提供给实验者快速测试仅仅几个组合。然后我开始阅读一些文章,这些文章试图将基础工程概念与统计学和数据科学结合起来,并取得了成功的结果。这是我决定进行一次跳跃的时候,允许我自己利用我的领域知识,并用数据驱动的方法来赋予它。
目前的情况
即使你不是数据科学家,开始学习数据分析的基础知识,当然还有一点统计学,这也不是一个坏主意。它有助于以更好的方式分析您的数据,即使您的兴趣不是数据科学。例如,在一条生产装配线上,您会挑选多少样品进行质量测试,以准确代表您的整个生产批次?即使你的兴趣不在工程领域,统计学也是一个强大的工具,可以用来分析在各种场景中呈现给你的数据。
解决正确的问题照片致谢
获得良好的教育资源也很容易,这是前所未有的好事情。开源教育和社区共享平台意味着有很多途径可以寻求帮助。从教育的“民主化”和获取新技术的最新发布的角度来看,这是非常好的。
另一方面,有很多人可以轻松地进行一些基本的特征工程,运行预测算法,并给出一些准确度分数。虽然这是一项巨大的资产,但随着自动化的到来,对它的需求将会迅速下降,并且无代码或低代码威胁到一些开发人员的工作。据估计,到 2025 年,超过 60%的开发人员工作将实现自动化。当像 this 这样的工具承诺在几分钟内提供数据科学家花几个月时间做的事情时,在这个颠覆性的领域发展专业知识变得至关重要。
专业领域和应用
数据科学不是一系列旨在以机器人方式预测现象的行动。数据科学远不止于此,它是一个针对大量可能的问题得出明智答案的过程。
- 正确的问题 :要解决任何领域的问题,第一阶段就是提出正确的问题。我想解决什么问题?当我面前有太多更简单的选择时,还需要数据科学吗?给我的哪些数据是相关的,我可以扔掉看似无关的数据吗?我可以信任数据源吗?有没有自动化工具或更简单的工程解决方案可供我使用,来解决手头的问题?
- :在一个充满自我激励的环境中,如果你熟悉这个行业,就更有可能找到正确的问题领域来解决。它帮助一个人从单纯的交易角色转变为行业中更不可或缺的一部分;一个能够从宏观的角度看到需要解决的问题,一个能够理解数据争论的本质的人。
3. 关注客户 :与客户的有效沟通需要一个人在解释曲线之前先行一步。学习复杂的算法是美妙的,但是能够将所学转化为业务特定的结果并进行有效的沟通,是许多组织中普遍存在的差距。
如何在一个动态的领域成功地操纵
新技术来来去去。当你掌握了一种算法,就会有新的算法出现。跟上每一个新出现的算法变成了一场无休止的竞赛。此外,还建议在一段时间内对这些算法的稳定性进行测试。从更简单但有效的架构开始是一种更好的方法,并且已经证明对生产来说是稳定的。
依靠久经考验的技术足以解决你在现实世界中遇到的大多数问题。相反,花点时间了解数据、数据收集过程、替代数据来源,并花更多时间与您的客户或同事相处,以更好地了解他们打算解决的问题。与此同时,有必要了解最近的发展,并磨练将支持你的领域的技能。
专注于获得一个被人们实际使用的模型远比模型精度增加 1%重要。在那些缓慢适应人工智能力量的行业中,首先展示这门子科学的力量是很重要的。这就是有效的沟通和“推销”你的技能的最重要的地方。一旦锚被牢牢固定,你就可以尝试更复杂的算法。
数据工程可能会越来越有价值久而久之。在演示文稿中展示漂亮的图表是大多数数据科学项目的目的。完全缺乏能够真正将项目投入生产并在一段时间内监控它们的数据科学家——端到端的管道。对手头的问题有一个更全面的了解,快速评估你可以使用的工具,在不影响工作真实性的情况下“完成任务”,这在商业中至关重要。因此,我的建议是应用简单的解决方案,从小处着手。仅在需要时使用复杂算法。
总结想法
数据科学领域正在快速变化。我们与数据交互的方式将会发生巨大的变化。随着越来越多的自动化工具进入外行人的手中,对专业技能的需求将呈指数级增长,而这些专业技能是通过花费大量时间来解决工业问题而获得的。
数据科学工具就是工具。他们不是解决问题的人。要解决的问题比跑笔记本大得多。笔记本电脑是必不可少的,但只有一个更大的变速箱齿轮需要运行引擎与其他几个齿轮串联。还要记住,你不可能成为超人,学会解决问题所需的所有技能。大多数问题都是通过集思广益解决的。
当我从核心机械工程转向数据科学时,我决定仍然扎根于我通过正式渠道研究的领域,只是选择通过数据科学的附加工具来加强它。这使我能够用不熟悉这个行业的人难以理解的方式解决问题。
欢迎建设性的反馈!
集合模型的方式和原因
为什么群体智能会起作用?
图片来源:Unsplash(https://unsplash.com/photos/8I423fRMwjM)
受《谁想成为百万富翁》的启发,印度有一个著名的游戏节目叫做“KBC”。这有点像一个有多种答案选择的智力竞赛节目。如果参与者能够选择所有问题的正确选项,他或她可以赢得 1000 万印度卢比。如果他对任何问题不确定,参与者有一些选择。其中一个选择是进行观众投票,由大多数人选择。
这些问题可以是体育、神话、政治、音乐、电影、文化、科学等各种各样的主题。观众不是这类问题的专家。有趣的是,多数人的意见往往会成为正确的答案。这是组装背后的核心概念。
似乎是一个神奇的权利,让我们看看同样的数学直觉。
在 ML 的上下文中,使用下面的简单图表来呈现这个想法。现在每个人相当于一个分类器,就像观众是多样化的,分类器越不相关越好。
图 1:集合模型的基本工作原理(来源:作者)
我们将在同一组数据上训练三个分类器。现在在预测的时候,我们将检查大多数分类器在说什么。假设这是一个鸭对母鸡的问题。因为他们中的两个都说它是一只鸭子,所以集合模型的最终决定是鸭子。
比方说,我们有一个分类准确率为 70%的分类器。如果我们增加更多的分类器,那么它会增加吗?
让我们假设我们从 3 个人/分类器开始。如果任何时候他们中有两个以上的人对预测是正确的,通过多数表决,我们得到正确的结果。如果分类器是独立的,那么 C1 和 C3 正确而 C3 不正确的概率是. 7 * 7 * 3。让我们来看一个更一般化的计算
图 2:分类准确率的计算(来源:作者)
上图展示了所有情况,情况 1 和情况 2 是我们预测正确的地方。现在修正后的整体准确率为 0.3429 + 0.4409 即 78.38%。
试想一下,如果我们只是添加更多的分类器,分类准确率从 70%提高到 78.33%。
如果我们增加更多的分类器或人群中更多的人,准确性会进一步提高,如下图所示。
图 3:分类精度与分类器数量的关系(来源:作者)
硬投票对软投票:-
当所有分类器对最终预测都有相同的发言权时,这被称为硬投票,如图 1 所示,而如果我们考虑分类器在特定决策或一些其他方案中的可信度,以给不同的分类器不同的权重,这被称为软投票。
图 4:硬投票和软投票(来源:作者)
在第一种情况下,它是硬投票,所以只考虑标签,在软投票中,我们更关注预测概率。我们找到类的平均概率并决定。
软投票比硬投票更细粒度。
某些实施的时间
图片来源:【https://unsplash.com/photos/fYD54gVXFGM
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
#Initalize the classifier#Individual Classifiers
log_clf = LogisticRegression(random_state=42)
knn_clf = KNeighborsClassifier(n_neighbors=10)
svm_clf = SVC(gamma=”auto”, random_state=42, probability=True)#hardvoting
voting_clf = VotingClassifier(
estimators=[(‘lr’, log_clf), (‘knn’, knn_clf), (‘svc’, svm_clf)],
voting=’hard’)# Voting can be changed to ‘Soft’, however, the classifier must support predict the probability
#softvoting
voting_clf_soft = VotingClassifier(
estimators=[(‘lr’, log_clf), (‘knn’, knn_clf), (‘svc’, svm_clf)],
voting=’soft’)
结果如下图所示
图 5:个体分类器与集成分类器(来源:作者)
这个实验是在“声纳”数据上进行的,可以看出软投票和硬投票分类器比单个分类器带来了大约 7-8%的改进。
结论:
在本教程中,我们快速概述了群体智能是如何体现在合奏作品中的。我们讨论了软投票和硬投票。还有更流行的方法,如随机森林和 Boosting,这些方法改天会用到。
参考文献:
[1]https://towards data science . com/a-guide-to-ensemble-learning-d 3686 c 9 bed 9 a
[2]https😕/ml wave . com/ka ggle-ensembling-guide/
如何以及为什么要学习贝叶斯推理
学习贝叶斯理论的最佳免费在线资源总结
对于许多数据科学家来说,贝叶斯推理的话题既令人生畏又耐人寻味。虽然有些人可能熟悉托马斯·贝叶斯的著名定理,甚至已经实现了朴素贝叶斯分类器,但我观察到的普遍态度是,贝叶斯技术对于统计学家来说太复杂了,而对于工程师来说又有点太“静态”了。事实是,概率编程的最新进展使得这些方法比以往任何时候都更容易使用,在本文中,我将解释为什么我决定学习贝叶斯推理,并概述我在这一努力中遇到的一些最佳资源。
Riho Kroll 在 Unsplash 上拍摄的照片
为什么你应该“去贝叶斯”
虽然用例通常非常不同,但贝叶斯方法也有深度学习的一些可察觉的缺点,因为它们技术性很强(通常需要专业的编程语言),可能需要数年才能掌握,计算成本很高,并且在外部观察者看来似乎是通过黑魔法工作的。那么,当我们已经可以用如下简单代码训练最先进的机器学习模型时,为什么还会有人费心去学习这些技术呢?
import amazing_ml_algomodel = amazing_ml_algo()
model.fit(X_train, y_train)
主要原因很简单,贝叶斯推理是您工具箱中的另一个工具,在传统机器学习模型不理想的情况下非常有用,例如:
- 当你只有少量数据时
- 当您的数据非常嘈杂时
- 当你需要量化信心时
- 当你想把先前的信念融入你的模型时
- 当模型可解释性很重要时
根据我的经验,这些正是数据科学家在日常工作中面临的实际问题。贝叶斯模型可能不会让你赢得 Kaggle 竞赛(尽管有很多这样的例子),但它们在解决真实企业中真实利益相关者的真实问题方面非常出色。随着 AutoML 工具和现成的解决方案在整个行业中被更广泛地采用,我相信数据科学家将越来越多地发现自己专注于贝叶斯方法非常适合的各种混乱和定制的问题。
对我来说,另一个个人动机是我想更慎重地选择模特。现成的机器学习包现在可以轻松地无意识地训练像 XGBoost 这样的模型,而无需考虑底层数据的形状或生成过程,但贝叶斯推理定义了这个生成过程是建模的核心。
先决条件
下面几乎所有的资源都是在假设读者对概率论和基本统计学有很好的理解的情况下编译的。你应该熟悉随机变量、概率密度函数和条件概率等概念,以及一些关键分布,如正态分布、二项式分布和泊松分布。虽然可能不是必要的,我也强烈建议阅读大数定律,中心极限定理和最大似然估计。如果我在这一段中使用的任何术语是不熟悉的,在继续我建议的贝叶斯资源之前,从基本的概率和统计课程开始可能是一个好主意。
Python 和 R 中的概率编程包都有很多选项(比如 PyMC,Stan,Edward,TensorFlow Probability 等。).最终,您需要选择最适合您的包和语言,但是为了最大限度地利用下面的资源,拥有一些 Python 经验会有所帮助。特别是,面向黑客的概率编程和贝叶斯方法是用 Python 编写的,可以选择使用 PyMC 或 TensorFlow 概率,所以为了最大限度地兼容,我推荐使用这些概率编程包中的一个。
关键资源
下面我列出了我发现的对学习贝叶斯推理最有用的三个资源。它们都从基础开始,涵盖相似的概念,但是每种资源从稍微不同的角度处理主题。乍一看,推荐三种不同的介绍性文本似乎有些矫枉过正,但是你能接触到的例子越多越好。对我个人来说,理解贝叶斯推理背后的理论只是成功的一半,在我将这些技术应用到我自己的数据科学项目之前,我必须看到许多建模示例。
我的建议是慢慢来,同时利用这三种资源。如果这是你第一次“使用贝叶斯理论”,一些概念可能会令人困惑,但是看到它们以不同的方式被解释应该会帮助你熟悉关键的概念。
贝叶斯数据分析——安德鲁·盖尔曼、约翰·卡林、哈尔·斯特恩、大卫·邓森、阿基·维赫塔里&姜懿翔·鲁宾
这本书几乎是贝叶斯分析的圣经。虽然它 670 页的篇幅和对理论的大量关注(想想公式和证明)可能会吓跑不那么勇敢的学习者,但这是我发现的关于这个主题的最全面的指南。如果你有无限的时间/欲望,请随意阅读整本书,但对于其他人,我会重点阅读第 1-5、10 和 11 章。
贝叶斯推理——维尔·海文宁&托皮亚斯·托洛宁
我对本指南的作者一无所知,甚至不记得我是如何看到它的,但这是一个非常棒的资源,我会一次又一次地回来查阅。它涵盖了许多关键主题,包括贝叶斯定理,共轭先验,蒙特卡罗马尔可夫链和层次模型,并解释了每个简单的条款使用伟大的例子。如果你今年只看了一本贝叶斯推理的入门指南,就选这本吧。
黑客的概率编程和贝叶斯方法——卡梅隆·戴维森-皮隆
这种资源对于弥合理论和实际应用之间的差距是非常宝贵的。它由一系列充满贝叶斯建模示例的 Jupyter 笔记本组成,将允许您接触概率编程。如前所述,该资源是专门为 Python 程序员准备的,但是非 Python 用户仍然会从阅读示例中获益良多(即使他们不执行任何代码)。
奖金资源
这里我列出了一些我在贝叶斯之旅中遇到的额外资源。在我看来,它们不像上面列出的三篇文章那样普遍重要,但它们都是高质量的,并且提供了更多的例子来帮助你进入贝叶斯思维方式。
张量流概率教程
以上是官网提供的一系列张量流概率教程。如果你选择用 TFP 作为你的概率编程语言,那么这些将会特别有用。有一些很好的具体模型的例子,包括概率回归、结构时间序列、概率主成分分析等等。
机器学习的贝叶斯方法— Coursera
这是 Coursera 的一门很棒的课程,可能对那些有数学/统计学背景的人最有吸引力。它涵盖了一些高级课题,如潜在的狄利克雷分配,变分自动编码器和高斯过程。这门课从技术上来说并不是免费的,但是你可以通过旁听这门课来获得所有的讲课内容。
想想贝伊斯——艾伦·b·唐尼
我会把这本书放在与概率编程和黑客贝叶斯方法相同的类别中,因为它采用了贝叶斯统计的计算方法。如果你来自工程背景,这本书可能比我上面列出的一些理论资源更吸引你。
结论
希望我在本文中概述的资源对你和对我一样有用。虽然贝叶斯推理可能需要一段时间才能让你理解,但我的建议是,尽可能多地尝试吸收一些例子,最终你会明白的。祝你好运,记住,如果很容易,每个人都会做!
如何以及为什么标准化数据:python 教程
在这篇文章中,我将解释为什么以及如何在 Python 中使用 scikit-learn 来应用标准化
图摘自:https://sci kit-learn . org/stable/auto _ examples/preprocessing/plot _ all _ scaling . html。左侧子图:未缩放的数据。右侧子情节:转换后的数据。
你好。
这是我的第一篇中帖。我是一名电子和计算机工程师,目前正在完成生物医学工程和计算神经科学领域的博士研究。在过去的 4 年里,我一直在研究机器学习问题。我在网络上看到的一个非常普遍的问题是,在拟合机器学习模型之前,如何标准化数据以及为什么要这样做。
scikit-learn 的
[StandardScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html)
是如何工作的?
一个人想到的第一个问题是:
为什么首先要标准化?
为什么要在拟合 ML 模型之前进行标准化?
嗯,想法就是 简单的 。在不同尺度下测量的变量对模型拟合&模型学习函数的贡献不同,最终可能产生偏差。因此,为了处理这个潜在的问题,通常在模型拟合之前使用特征标准化(μ=0,σ=1)。
要使用scikit-learn
来实现这一点,我们首先需要构建一个包含特性和样本的输入数组X
,其中X.shape
为[number_of_samples, number_of_features]
。
请记住,所有的scikit-learn
机器学习(ML)功能都期望输入一个具有该形状的numpy
数组X
,即行是样本,列是特征/变量。说到这里,让我们假设我们有一个矩阵X
,其中每个行/线是一个样本/观察值,每个列是一个变量/特征。
注 : 基于树的模型通常不依赖于缩放,但非树模型模型如 SVM、LDA 等。往往非常依赖它。
如果你想在交互式路线图和活跃的学习社区的支持下自学数据科学,看看这个资源:https://aigents.co/learn
方法核心
主要思想是在应用任何机器学习模型之前,将即μ = 0
和σ = 1
标准化/规范化X
、的特征/变量/列、、。因此,StandardScaler()
将归一化特征,即 X, 的每一列单独 ,这样每一列/特征/变量将有μ = 0
和σ = 1
。
标准化程序的数学公式。图片由作者生成。
工作 Python 代码示例:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 4 samples/observations and 2 variables/features
X = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])# the scaler object (model)
scaler = StandardScaler()# fit and transform the data
scaled_data = scaler.fit_transform(X)
print(X)
[[0, 0],
[1, 0],
[0, 1],
[1, 1]])
print(scaled_data)
[[-1\. -1.]
[ 1\. -1.]
[-1\. 1.]
[ 1\. 1.]]
验证每个特征(列)的平均值为 0:
scaled_data.mean(axis = 0)
array([0., 0.])
验证每个特征(列)的标准差为 1:
scaled_data.std(axis = 0)
array([1., 1.])
视觉示例中变换的效果
图摘自:https://sci kit-learn . org/stable/auto _ examples/preprocessing/plot _ all _ scaling . html。左侧子图:未缩放的数据。右侧子情节:转换后的数据。
摘要
StandardScaler
移除平均值,并将每个特征/变量缩放至单位方差。该操作以独立于的方式按特征执行。StandardScaler
可能受到异常值(如果它们存在于数据集中)的影响,因为它涉及每个特征的经验平均值和标准偏差的估计。
如何处理异常值
- 手动方式(不推荐):目视检查数据,并使用异常值剔除统计方法(如四分位距(IQR)阈值法)剔除异常值。
- 推荐方法:使用
[RobustScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html)
来缩放特征,但是在这种情况下,使用对异常值稳健的统计。该缩放器根据分位数** 范围(默认为 IQR :四分位数间范围)移除中值和缩放数据。IQR 是第一个四分位数(第 25 个四分位数)和第三个四分位数(第 75 个四分位数)之间的范围。**
今天就到这里吧!希望你喜欢这第一个帖子!下一个故事下周开始。敬请关注&注意安全。
请继续关注并支持我
如果你喜欢这篇文章并觉得它有用,请关注我,为我的故事鼓掌支持我!
-我的邮件列表只需 5 秒:https://seralouk.medium.com/subscribe
-成为会员支持我:【https://seralouk.medium.com/membership
参考文献
[2]https://sci kit-learn . org/stable/modules/generated/sk learn . preprocessing . robust scaler . html
和我联系
- 领英:https://www.linkedin.com/in/serafeim-loukas/
- 研究之门:https://www.researchgate.net/profile/Serafeim_Loukas
- https://people.epfl.ch/serafeim.loukasEPFL 简介 :
- 堆栈溢出【https://stackoverflow.com/users/5025009/seralouk】:
如何以及为什么在 Python3 中使用 f 字符串
图片由s·赫尔曼&f·里希特从皮克斯拜拍摄
蟒蛇短裤
使用 Python 3 中新功能的简单指南
Python 为我们提供了多种风格的编码。
随着时间的推移,Python 定期推出新的编码标准和工具,这些标准和工具更加符合 Python 禅宗的编码标准。
漂亮总比难看好。
在这一系列名为 Python Shorts 的帖子中,我将解释 Python 提供的一些简单但非常有用的构造,一些基本的技巧,以及我在数据科学工作中经常遇到的一些用例。
这个帖子是专门关于在 Python 3.6 中介绍的在 Python 中使用 f 字符串的 。
3 种常见的打印方式:
让我用一个简单的例子来解释一下。假设你有一些变量,你想在一个语句中打印它们。
name = 'Andy'
age = 20
print(?)
----------------------------------------------------------------
Output: I am Andy. I am 20 years old
您可以通过多种方式做到这一点:
一个非常简单的方法是在打印函数中使用+
进行连接。但这很笨拙。我们需要将数字变量转换成字符串,并在连接时注意空格。它看起来并不好,因为当我们使用它时,代码的可读性受到了一点影响。
name = 'Andy'
age = 20
print("I am " + name + ". I am " + str(age) + " years old")
----------------------------------------------------------------
I am Andy. I am 20 years old
来源: Pixabay
b) %格式:第二个选项是使用%
格式。但它也有自己的问题。首先,它不可读。您需要查看第一个%s
,并尝试在列表末尾找到相应的变量。想象一下,如果你想打印一个很长的变量列表。
print("I am %s. I am %s years old" % (name, age))
c) str.format():使用str.format()
print("I am {}. I am {} years old".format(name, age))
这里我们用{}来表示列表中对象的占位符。它仍然有同样的可读性问题,但是我们也可以使用str.format
:
print("I am {name}. I am {age} years old".format(name = name, age = age))
如果这看起来有点重复,我们也可以使用字典:
data = {'name':'Andy','age':20}
print("I am {name}. I am {age} years old".format(**data))
第四种方式用 f
从 Python 3.6 开始,我们有了一个新的格式化选项,这使得它变得更加简单。我们可以简单地使用:
print(f"I am {name}. I am {age} years old")
我们只需在字符串的开头添加f
,并使用{}来包含我们的变量名,就可以得到所需的结果。
f string 提供的一个附加功能是我们可以将表达式放在{}括号中。例如:
num1 = 4
num2 = 5
print(f"The sum of {num1} and {num2} is {num1+num2}.")
---------------------------------------------------------------
The sum of 4 and 5 is 9.
这非常有用,因为您可以在这些括号中使用任何类型的表达式。 表达式可以包含字典或函数。 一个简单的例子:
def totalFruits(apples,oranges):
return apples+orangesdata = {'name':'Andy','age':20}apples = 20
oranges = 30print(f"{data['name']} has {totalFruits(apples,oranges)} fruits")
----------------------------------------------------------------
Andy has 50 fruits
同样,你可以使用’’’
来使用 多行字符串 。
num1 = 4
num2 = 5
print(f'''The sum of
{num1} and
{num2} is
{num1+num2}.''')---------------------------------------------------------------
The sum of
4 and
5 is
9.
格式化字符串的一个日常用例是格式化浮点。您可以使用 f 字符串来实现,如下所示
numFloat = 10.23456678
print(f'Printing Float with 2 decimals: {numFloat:.2f}')-----------------------------------------------------------------
Printing Float with 2 decimals: 10.23
结论
直到最近,我一直使用 Python 2 来完成我的所有工作,所以无法了解这个新特性。
但是现在,随着我转向 Python 3,f strings 已经成为我格式化字符串的首选语法。它很容易编写和阅读,并且能够合并任意表达式。在某种程度上,这个新功能至少符合 3 个 PEP 概念
漂亮比难看好,简单比复杂好,可读性很重要。
如果你想了解更多关于 Python 3 的知识,我想向你推荐一门来自密歇根大学的关于学习 中级 Python 的优秀课程。一定要去看看。
我以后也会写更多这样的帖子。让我知道你对这个系列的看法。在关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
此外,一个小小的免责声明——这篇文章中可能会有一些相关资源的附属链接,因为分享知识从来都不是一个坏主意。
作为数据科学家,如何(以及为什么)使用社交媒体
马文·迈耶在 Unsplash 上的照片
创造价值和产生实际影响的指南
分散媒体渠道的出现改变了每个人的游戏。现代社交媒体使讨论民主化,影响了从休闲到专业的所有社区。已经接近在线技术的人们很快就接受并收获了无限和即时连接的好处。
正因为如此,作为一名数据科学家,积极使用社交媒体有很多好处。Twitter 和 LinkedIn 已经成为学习、联系和参与有影响力的讨论的绝佳场所。你自己可能对此并不陌生。然而,充分发挥这些门户网站的潜力并不容易。尤其是如果你像我一样是一个内向的人,在社交媒体上积极表现似乎很难。至少对我来说,培养健康的心态花了几年时间。有了这个指南,我想帮助你找到你的声音,并学会有效地使用这些渠道。
定义你的目标
在个人层面上,有几个潜在的原因来参与社交媒体。这些对你来说是个人的,你应该决定追求哪一个。
- 获取信息。
- 参与对话。
- 获得可见性。
- 建立一个社区。
他们是分等级的,因此,例如,参与对话是获得可见性的一个很好的方式。为了有意义地参与,你必须倾听并跟上你所在领域的发展。
当考虑你的目标时,确保你花时间看看你是否真的想实现它,或者这只是你施加给自己的一些社会压力。不是每个人都必须建立一个社区才能做出积极的贡献。如果你不想花时间去建立和维护一个社区,那么你就不会真的想成为数据科学的影响者。这听起来可能微不足道,但我见过太多的人追求错误的目标,因为他们的感知偏向于欲望对象的表面外观。
底线是,社交媒体是一个与人互动并产生积极影响的伟大工具。通过正确定义你的目标,你可以最大化它的效果。
照片由伊山@seefromthesky 在 Unsplash
如何使用你的媒体渠道
1.始终给予价值
如果你要我把整篇文章浓缩成一句话,我会这么说。
永远让你的贡献有价值。
为了做出贡献并产生积极的影响,你的意图应该是给予价值。我不会告诉你什么是有价值的,我会让你来判断。如果你诚实地看待你将要分享的内容或你将要写的帖子,你就可以确定你的意图是提供价值还是获得一个类似于关注者或喜欢的外部奖励。
2.让事情自然发生
正如我之前提到的,社交媒体是放大你的声音和在你的领域获得知名度的一个很好的方式。然而,在频道中充斥纯粹的自我宣传内容绝对不是办法。只要想想我之前提到的一点:永远给予价值。人们使用社交媒体来学习和联系,而不是参与广告活动。获得知名度的最佳方式是提供价值,并因此获得认可。不要专注于目的地,专注于旅程。
这一点以及对提供价值的强调是我关于社交媒体的核心原则。我以后会多次提到它们,正如我们将会看到的,缺乏这些可以在人们有时会陷入的几种有害模式的背景中找到。
3.抵制社交媒体的嫉妒
不幸的是,与所有人和所有事保持即时联系会让某些问题浮出水面。人们总是希望在所有人面前看起来最好,并倾向于过度衡量自己。例如,当你对其他人的 GitHub 明星着迷时,是社交媒体嫉妒的一种形式。这个问题有几个症状。
- 关注成长,因为你追随的人拥有大量的追随者。
- 太关注别人做了什么,而不是你能做什么。
- 更多地感知他人,更少地感知自己。
如果你关注许多内容创作者和你所在领域的杰出人士,你会很快被他们制作的大量令人敬畏的东西所淹没。你可能会在某个时候感到一种徒劳的感觉,认为自己无法赶上他们。
好消息是:你不必这么做。如果你不愿意,你没有义务张贴任何东西。当你创造一些东西时,它应该来自于给予价值的意图,而不是为了和其他人竞争。如果你热爱你的工作,并找到一种方法不断地分享它,认可就会自然而然地到来。
4.不要停留在你的智力泡沫中
社交媒体中特别存在的另一个问题是知识泡沫的形成。这意味着,如果你只和志同道合的人在一起,那么你的世界观不会受到挑战,从而得到改善。
当一个人谈论纯粹的专业话题时,这不是一个问题,但网络媒体本质上是政治性的。永远记住确认偏见,这是倾向于赞同与你的世界观一致的观点。
5.保持文明的讨论
网上的争论很快就会偏离正题。然而,这并不是必须的方式。为了使我们共享的在线空间成为每个人的良好体验,在回应之前,请始终倾听和思考。
6.限制花在社交媒体上的时间
社交媒体网站旨在让你持续参与并沉迷其中。可悲的事实是,在这种情况下,你就是产品。这些平台通过投放广告赚钱,所以你在那里花的时间越多,他们赚的钱就越多。
你可以采取一些预防措施来最大限度地减少花在社交媒体上的时间。如果你能成功地消除持续的干扰,你就能在工作和渠道中保持高效。
- 关闭推送通知。
- 使用 Buffer 发帖,无需访问网站本身。Buffer 对于管理多个账户和安排你的文章非常有用。
- 在一天中分配一个固定的时间段来检查通知和分析。
- 使用网站拦截器来阻止你经常查看网页。
当涉及到社交媒体时,这些对于建立健康的习惯是至关重要的。
由 Gabriel Jimenez 在 Unsplash 上拍摄的照片
如何拓展你的渠道
所以,你广泛使用了社交媒体,而且你喜欢它。现在你想更上一层楼,获得更大的影响力,也许最终会转型为全职内容创作者。你如何开始?
1.成长是价值的结果
这是我关于渠道增长的第一条原则。
有些人痴迷于他们的追随者数量。你不应该成为那样的人。矛盾的是,增加你的关注者的数量是提供有用内容的结果。仔细想想,这是我们之前讨论过的两个原则的结合:永远提供价值和让事情有机发生。澄清一下,我的意思并不是说你应该坐以待毙,放松下来,让成功降临到你头上。你需要努力工作并利用机会,但是机会只有在本质存在的情况下才会出现。
然而,人们通常更喜欢捷径。正如我们接下来将看到的,许多人不会加倍重视价值,而是将注意力放在适得其反的方法上。
2.如果你想成长,避免“成长黑客”
所以,如果你想扩大你的渠道,有一些非常有效的方法可以做到。再次强调,正如我之前所指出的,最好是为你的内容提供价值。然而,当你问谷歌如何扩大你的渠道时,你很少会得到这样的建议。最常见的是,你会遇到一些来自互联网营销人员的“成长秘诀”。这些不仅没有达到预期的效果(即建立一个真正的社区),还非常烦人。如果你在数据科学领域,你会和真正聪明的人打交道。如果你用这些“黑客”来侮辱他们的智慧,你将会失去可信度。
为了消除一些误解,我整理了一份不要做的事情清单。
- 不要为了 followback 而跟随。只关注你真正感兴趣并想与之交往的人。
- 不要为了让你追随的人回头而不追随他们(没有好的理由)。如果你真的对你关注的人感兴趣,就像我上面指出的那样,这不是问题。
- 不要过度使用标签。如果一两个符合主题,甚至可以帮助你获得知名度,那就再好不过了。然而,列出一堆流行标签只是为了“侵入”别人的订阅源,这不仅令人讨厌,而且通常会让你颜面扫地。过度使用标签意味着低质量的内容,因为你经常从机器人那里看到这种情况。
- 不要仅仅为了引人注目而给人贴标签。这是一种肯定会被阻止的方式,理由很充分。你不希望被强行加入到你不参与的对话中,也不希望有人利用你的账户为自己赢得关注者。
- 不要 auto-DM 追随者。有些 bot 就是这么做的,真的很烦。当我收到一封自动营销邮件时,它对我有两种影响:它让我觉得我只是营销漏斗的一部分,它让我相信我不会从与那个人的互动中获得任何真正的价值。
3.专注于寻找你的核心受众
如果你想和所有人说话,你不会真的和任何人说话。人们关注你是一种迹象,表明他们希望看到更多你以前给过的东西。如果你的贡献都是主题性的,这是一个信号,表明你的内容可能与他们的未来无关。所以,如果你想成长,就要专注于建立核心受众。找到你的定位是必不可少的,尤其是在数据科学这样的技术领域。
这并不意味着你不能试验和四处走动。只要确保你有一个坚实的基础返回。
(这可能取决于你打算发展的特定社交媒体平台。根据我的经验,在这种情况下,你的媒体受众会更严格,而 Twitter 或 LinkedIn 等其他平台的粉丝会更宽容。)
4.坚持不懈地频繁发帖
社交媒体平台的信噪比低得惊人。经常发布高质量的内容会让你的观众把你当成一个信号。你想让你的观众认出你。例如,当我浏览我的 Twitter 订阅源时,当我看到我最尊重的人时,我肯定会停下来阅读。这是通过始终如一地给予值来建立的。
5.选择一个主要平台(至少在开始的时候)
有这么多平台,每个平台都有自己的注意事项和受众。当然,观众可能会重叠,但对你来说,更简单的是把更多的注意力放在一个特定的频道上。对我来说,这是中等。我有经常使用的 Twitter 和 LinkedIn 频道,但我最努力使用的是 Medium。我使用其他网站的一个主要目的是分享我的帖子并开始对话。
6.与你的观众互动
单方面的交流不足以建立一个社区。人们希望彼此联系和互动,如果你希望与他们建立一个社区,你也应该与他们互动。开始对话的一个很好的方式是提问。PyTorch 发布了新版本?太好了!他们对此有什么看法?如果你在做教育内容,他们接下来想学什么?你很了解你的观众,所以可能性是无限的。
结论
如果使用得当,社交媒体可以是一个非常富有成效的地方。通过有目的地使用它,你可以获得并为志同道合的人提供大量的价值,也许还可以建立一个社区。然而,现在有很多不好的建议。如果你的心态不对,你会陷入有害的行为模式。幸运的是,他们可以通过练习和有目的地管理。
如果你觉得这篇文章很鼓舞人心,那就去创作一些东西并与你的同龄人分享吧:)
如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!
任何人如何在 Windows 上开始深度学习
在一天内创建您自己的视觉识别应用程序。
杰森·斯特鲁尔在 Unsplash 上的照片
深度学习和人工智能是当今世界最热门的话题之一。我们看到越来越多的应用程序采用了深度学习:面部识别、语音识别(Siri、OK Google、Alexa)、无人驾驶汽车,名单还在继续。因此,作为一名学生、新员工、团队经理、高级管理人员,我们很好奇:这种不断上升的人工智能技术浪潮最终会让我的工作或未来职业变得不那么相关吗?
这实际上是我多年前偶然发现深度学习世界的方式,并以我今天的位置结束:在这个研究领域攻读研究生学位。我们都习惯于以某种方式学习东西:在网上搜索信息,报名参加课程,在 YouTube 上观看教程。然而,关于这个主题的大量且不断增加的信息令人害怕,我们中的许多人很快放弃了对新的相关技能的追求。
在这里,我将分享我的经验,我认为这是开始深度学习最简单快捷的方法,并且能够在一天内创建自己的视觉识别应用。这是我做了几十个深度学习、数据科学、机器学习等在线课程后的个人看法。我推荐的是 fast.ai ,适合任何技能水平的人!(另外,你至少需要有一个谷歌账户——谁没有呢)
什么是 fast.ai
这是一个在 PyTorch 之上编码的软件包,PyTorch 是一个用 Python 语言编码的深度学习框架。如果你没有理解那句话的任何一个部分,不要担心,我们在网络课程中谈论的材料在技术上不需要任何编码知识。fast.ai 的创建者发布了他们的在线学习课程,可以在https://course.fast.ai/访问。前三节课(5 小时)将带您完成部署您自己的深度学习应用程序的步骤!
亚历山大·辛恩在 Unsplash 上的照片
对于更高级的从业者,你可以继续学习课程,了解关于深度学习的更复杂的细节。我可能会出版另一个系列,介绍本课程中每一课的关键要点和笔记,但让我们把它留到以后再说。
安装和设置…学习任何新技术最痛苦的一步
谢天谢地,多亏了云计算的奇迹,我们不用在你的电脑上安装任何软件就可以使用 fast.ai !因此,Windows 用户有优势,因为大多数深度学习框架都是为在 Linux 上运行而构建的。以下是针对 fast.ai 包优化的选项,只需跳到您喜欢的部分或通读一遍即可找到不同之处!我只列出了完全免费的选项。(别担心,同学们)
- Google Colab (需要 Google 账号)
- 在本地机器上安装 (Windows 测试,仅推荐高级用户使用)
- 纸张空间渐变
Google Colab
Colab 是 Google 推出的一项服务,提供免费的 GPU(!!)通过笔记本访问。要在 Colab 上开始使用 fast.ai,只需使用以下链接访问笔记本(对于希望继续学习本课程的高级用户,请遵循https://course.fast.ai/的说明):
- 第一部分:朱庇特简介
- 第二部分:fast.ai 简介
- 第 3 部分:部署您的第一个应用
这就像在观看课程的前 3 课视频时浏览三本笔记本一样简单!但是,使用 Colab 时需要注意以下事项:
- 首先,单击文件>在驱动器中保存副本>登录(如果您尚未登录)。这可以确保您对笔记本所做的任何更改都可以从您自己的 Google Drive 帐户重新访问。
复制一份笔记本
2.制作一份拷贝应该会将您重定向到存储在您自己的 Google Drive 存储中的已拷贝笔记本。要再次访问它,只需进入我的驱动器> Colab 笔记本。默认情况下,复制的笔记本将存储在此文件夹中。
3.要打开,请双击感兴趣的笔记本,然后单击使用 Google 协作打开。轻松点。
从 Google Drive 访问您的笔记本
4.对于大多数深度学习框架来说,GPU 确实可以加快计算时间。谢天谢地,Google Colab 提供免费的 GPU 使用(高达 3GB 的 RAM)。确保 Colab 中的运行时类型设置为 GPU。
将运行时类型更改为 GPU
5.现在你准备好了!只需跟随 https://course.fast.ai/的视频讲座,你马上就能成为一名深度学习的学生。
在 Windows 上安装
在您自己的机器上安装会给您更多的灵活性。但是,这仅推荐给高级用户。fast.ai 推荐安装在基于 Linux 的操作系统上,但我们中的许多人不想经历双重启动或运行虚拟机的麻烦。我个人在 Windows 10、64 位机器上运行 fast.ai 包,使用以下步骤:
- 安装 Miniconda (如果你已经安装了的话,Anaconda 也可以工作的很好)。确保选择正确的操作系统,并选择 Python 3.8 的选项。
- 从 Windows 搜索栏中启动 Anaconda 提示符。
3.运行以下命令安装 fastai,然后在提示开始下载时输入“Y ”:
conda install -c fastai -c pytorch fastai jupyter notebook
4.安装完成后,在 Anaconda 提示符下运行以下命令来启动本地 Jupyter 笔记本服务器。
jupyter notebook
5.您的默认浏览器中应该会弹出一个窗口,或者您可以通过键入以下命令来访问它:
http://localhost:8888/?token='find_under_conda_prompt'
6.从 https://github.com/fastai/fastai下载一份 fast.ai 笔记本
7.访问笔记本,你就大功告成了!
深度学习入门真的很简单。现在,在综合课程和框架的帮助下,几乎任何人都可以做到。如果您有任何问题,或者任何步骤对您不起作用,请随时在下面留下您的评论!
参考
如果你准备好现在就开始,这里有一些方法。如果你想更多地了解本课程,请阅读…
course.fast.ai](https://course.fast.ai/) [## 法斯泰/法斯泰
fastai 简化训练快速和准确的神经网络使用现代最佳实践重要:这份文件…
github.com](https://github.com/fastai/fastai) [## 谷歌联合实验室
colab.research.google.com](https://colab.research.google.com/) [## fastai:用于深度学习的分层 API
fastai 是一个深度学习库,为从业者提供高级组件,可以快速轻松地…
arxiv.org](https://arxiv.org/abs/2002.04688)
纽约的 Airbnb 房东如何适应新冠肺炎的生活?
分析纽约 Airbnb 房源的可用性、价格和描述
众所周知,旅游业受到了新冠肺炎的严重影响。几天前,Discover 首席执行官详细介绍了与旅游类别相关的消费者支出基本上已降至零。这肯定会影响美国冠状病毒的中心纽约市的 Airbnb 主机。
[## Discover card 首席执行官详细介绍了旅游类消费支出下降 99%的惊人降幅
很明显,美国人已经大幅放缓了他们的支出,因为许多行业在…
www.cnbc.com](https://www.cnbc.com/2020/04/24/discover-card-ceo-details-drop-in-spending-with-travel-down-99percent.html)
数据
我对衡量新冠肺炎对纽约 Airbnb 主机的影响很感兴趣。2019 年 4 月至 2020 年 4 月(月度频率)的数据来源于 Airbnb 内部(listings.csv)。尽管列表文件提供了更详细的数据,但它有利于可视化,不需要太多的清理工作。数据中总共有 645,458 个列表。
Airbnb 内部是一套独立的工具和开放的数据,允许你探索 Airbnb 是如何真正被用于…
insideairbnb.com](http://insideairbnb.com/get-the-data.html)
列表数据快照
描述统计学
可用性趋势
Airbnb 主机可以为他们的列表设置一个日历,这样它就可以在一年中的几天或几周或者全年可用(除非它已经被预订)。“高可用性”定义为每年可用时间超过 60 天,可以表示在数据被擦除时单元是空闲的。
从 2019 年 4 月到 2020 年 4 月,高可用性的百分比增加了近 4 个百分点。
当按区划分时,曼哈顿和布鲁克林等热门地区也显示出“高可用性”单元的增长趋势。
价格趋势
“高可用性”设备的平均价格在 4 月份降至 185 美元。这一下降主要是由曼哈顿的公寓引起的,Airbnb 在其他行政区的平均价格几乎保持不变。
列表描述的更改
到目前为止,这并不奇怪,有更多的单位在纽约,他们的价格已经下降。所以,问题是 Airbnb 的主人正在做什么来应对这种情况?
列表文件包含每个列表的描述。通过分析描述,我们可以感觉到主人对这种情况的反应。今年 3 月,提到“Covid”、“Corona”或“Quarantine”的列表开始出现。三月份的一些列表中提到了 Covid/Corona:舒适的皇后|豪华的 Bnb |干净&没有 Covid,传统的纽约绿洲-Corona 消毒,安静的花园 apt UWS,远离 Corona 病毒。
然而,提及 Covid/Corona 的列表在 4 月份有所减少。相反,包含“医院”、“医疗保健”或“健康”的列表开始增加。一个特别的清单把它的描述从三月份的“另一个海滩聚会/早餐”改成了四月份的“圣约翰医院员工/志愿者”。
纽约地图
截至 2020 年 4 月 8 日,这是包含“医院”或“医疗保健”的列表所在的前 10 个社区。
纽约市的地图,上面有提及医院/医疗保健等的列表。
摘要
不用说,对于 Airbnb 的主机来说,这是一个充满挑战的时代。Airbnb 推出了一项计划,为医护人员和急救人员提供住宿场所,同时安全地远离自己的家庭。在纽约,尽管提及医院/医疗保健等的列表的数量。仍然很小,我们可以看到业主为一线应急人员提供住宿的趋势越来越明显。说明 Airbnb 的主机正在适应目前的情况,把影响降到最低。
人工智能算法中的偏差
算法做它们被教导的事情。不幸的是,一些人无意中被隐藏在数据中的社会模式灌输了偏见和不道德的偏见。
第二次世界大战结束后,纽伦堡审判揭露了纳粹在医学研究中的暴行。在试验之后,医学科学建立了一套规则——纽伦堡法典——来控制未来涉及人类受试者的实验。《纽伦堡法典》影响了世界各地的医学伦理准则,就像那些甚至在 30 年后仍未遵循该法典的实验被曝光一样,比如臭名昭著的塔斯基吉梅毒实验。
人工智能实验和应用对用户的直接负面影响不像塔斯基吉和纳粹实验那样不人道,但面对压倒性和越来越多的算法对某些人口群体有偏见的证据,迟早要进行对话,这很重要。人工智能系统可能会因构建者、开发方式和最终部署方式而有所偏差。这就是所谓的算法偏差。
虽然数据科学尚未开发出自己的纽伦堡代码,但人工智能研究的社会影响已开始在一些课程中得到阐述。但即使辩论开始萌芽,仍然缺乏的是一个学科范围的讨论,以应对如何解决人工智能算法强化的社会和历史不平等问题。
我们是有缺陷的生物。我们做的每一个决定都包含某种偏见。然而,算法并没有被证明更好。理想情况下,我们希望我们的算法做出更明智的决策,没有偏见,以确保更好的社会正义,即社会中的个人和群体(如少数民族)有平等的机会获得资源,听到他们的声音,并在社会中得到代表。
当这些算法的工作是放大种族、社会和性别不平等,而不是减轻它;有必要评估这项技术的伦理后果和潜在的恶意。
这篇文章是由两个热点引发的:现在正在全球范围内肆虐的种族不平等讨论,以及 Yann LeCun 与 Timnit Gebru 在 Twitter 上的争吵,这是由于对巴拉克·奥巴马(左)的降采样图像的分歧,该图像被面部升采样机器学习(ML)模型描绘成一个白人男子的照片(右)。
一张奥巴马的去像素化照片被放大成一张白人男性的照片。(感谢:@哈德曼鲁在推特上)
这场(颇具爆炸性的)争论是由 LeCun 的这条推文引发的,他在推文中表示,由于训练算法的数据存在偏差,最终得到的人脸是一个白人。格布鲁尖锐地回应说,不能把 ML 系统的危害归结为有偏见的数据。
在大多数基线 ML 算法中,该模型更适合在各种数据点上最频繁出现的属性。例如,如果你要设计一个人工智能招聘工具来审查软件工程职位申请人的简历,你首先需要用一个过去候选人的数据集来训练它,该数据集包含诸如“经验”、“资格”、“持有的学位”、“过去的项目”等细节。对于每个数据点,招聘工具的算法都需要一个决策或“标签”,以便通过观察简历中的模式来“学习”如何为给定的申请人做出决策。
对于一个代表性性别差异很大的行业,有理由假设大多数数据点将是男性申请人。并且数据中的这种集体不平衡最终被算法解释为数据中的有用模式,而不是将被忽略的不期望的噪声。因此,它会告诉自己,男性候选人比女性候选人更受欢迎。
我希望这只是一个我用来证明我的观点的虚构的、夸张的例子。不是的。
LeCun 的评估没有错,因为在这种特定模型的情况下,在包含黑人面孔的数据集(而不是主要包含白人面孔的数据集)上训练模型不会产生如此荒谬的输出。但是,现代人工智能教父被拖入一场争吵(尽管不公平)的好处意味着,更多的研究人员现在将意识到他们的研究的影响。
这种误解显然源自对“偏见”一词的解释——在任何关于人工智能/人工智能的社会影响的讨论中,这个词似乎都被其自身的重量所压垮。
正如 Sebastian Raschka 所说,“ML 中的术语偏差严重超载”。它有多种感觉,可能会被彼此误解。
(1) 偏差(如数学中的偏差单位)(2)【公平】偏差(也称为社会偏差 ) (3) ML 偏差(也称为归纳偏差),这依赖于建立模型所采取的决策。)(4) 偏差-损失函数的方差分解(5)数据集偏差(通常导致 2)
我想,当我们使用这些术语时,只要稍微精确一点,就可以弥补沟通中的许多差距。
更轻松的是,别说奥巴马了,这位模特甚至把一只狗的脸描绘成了一个白人男子的脸。它当然喜欢白人。
当然,学习算法也有超出数据偏差的归纳偏差。但如果数据有一点偏差,就会被这些系统放大,从而导致模型学习到高偏差。简而言之,创建一个 100%无偏见的数据集实际上是不可能的。任何由人类挑选的数据集都是精选的,并且是非穷尽的。我们的社会认知偏差会导致无意中挑选数据。这种有偏见的数据,当输入到数据变异模型(其决策受到所见数据的严重影响的模型)时,会对这些社会、种族、性别、文化和政治偏见进行编码,并将其融入 ML 模型。
一旦应用到产品中,这些问题就会加剧。几年前,Jacky Alciné 指出谷歌照片中的图像识别算法将他的黑人朋友归类为“大猩猩”谷歌为这个错误道歉,并保证会解决这个问题。然而,它没有提出一个适当的解决方案,而是简单地阻止了算法识别大猩猩。
像谷歌这样规模的公司无法提出解决方案似乎令人惊讶。但这只能表明,训练一个一致而公平的算法并不是一件容易的事情,尤其是当它没有在一组不同的类别上进行训练和测试时,这些类别按比例代表了不同的人口统计群体。
面部识别技术犯下可怕错误的另一个灾难性事件发生在上周,一次错误的面部识别匹配导致一名密歇根州男子因莫须有的罪行被捕。最近由麻省理工和国家标准与技术研究院或 NIST 进行的研究发现,尽管面部识别在白人男性身上效果很好,但对于其他人群来说效果不够好(误识别率可能会差 10 倍以上),部分原因是用于开发底层数据库的图像缺乏多样性。
算法偏差的问题不仅限于图像/视频任务,它们也在语言任务中表现出来。
语言总是被“定位”,也就是说,语言的理解依赖于外部参照,而接受者必须能够解析这些参照。因此,这意味着用于训练模型的文本携带关于作者和情况的潜在信息,尽管程度不同。
由于语言的情境性,任何语言数据集都不可避免地带有人口统计学偏见。例如,与美国人和欧洲人相比,一些语音到文本转录模型对于非裔美国人、阿拉伯人和南亚人往往具有更高的错误率。这是因为训练语音识别模型的语料库是由来自西方国家的人的话语支配的。这导致该系统擅长翻译欧洲和美国口音,但在转录世界其他地方的语音方面表现不佳。
这一领域的另一个例子是现有单词嵌入(通过神经网络学习)中的性别偏见,这表明女性与“较少大脑”的职业有更高的关联,而男性往往与据称“较多大脑”或更高收入的职业有关联。
在下表中,我们看到了通用语句编码器嵌入模型中与各种职业相关的性别偏见分数。分数为正的职业是偏女性的职业,分数为负的职业是偏男性的职业。
偏向女性得分最高的职业(左)和偏向男性得分最高的职业(右)(礼貌:https://developers . Google blog . com/2018/04/text-embedding-models-contain-bias . html)
尽管人工智能研究人员很容易举起双手,免除自己的所有责任,但他们必须承认,他们——有意或无意地——为许多缺乏人工智能专业知识的公司构建了人工智能产品的基础层。这些公司,没有微调和调整模型的知识,使用预先训练的模型,因为它们是由 ML 研究人员(如 GloVe,BERT,ResNet,YOLO 等)在互联网上发布的。
部署这些模型而不明确地重新调整它们以解释人口统计学差异是危险的,并且可能导致排斥和过度概括人们的问题。责任止于研究人员,他们必须承担硬币另一面的责任。
也很容易归咎于数据而不是算法。(这让我想起了共和党在第二修正案辩论上的立场:“枪不杀人,人杀人。”只把责任归咎于数据是不负责任的,就像说一个种族主义的孩子不是种族主义者,因为他的种族主义父亲教会了他种族主义。
我们需要改进的不仅仅是数据,而是算法需要变得更稳健、更不敏感、更不容易受到数据的影响。这需要成为任何从事研究的人的责任。同时,消除数据偏差。
在现实世界中部署算法的指导问题应该总是“错误的答案会比没有答案更糟糕吗?”
你可以在这里 访问我的页面 。我的碎碎念句柄是@。
参考
1) 面部识别准确,如果你是白人https://www . nytimes . com/2018/02/09/technology/face-Recognition-race-artificial-intelligence . html)作者史蒂夫·洛尔
2)堪萨斯州克里什纳普里亚。,Vangara,k .,King,m .,Albiero,v .,鲍耶,K. 在IEEE 计算机视觉和模式识别会议(CVPR)研讨会上描述了人脸识别准确性相对于种族的可变性,2019 年 6 月。
3) 语言的生命作者马丁·凯,斯坦福大学
4) 文本嵌入模型包含偏差。这就是为什么这很重要。本·帕克、约尼·哈尔彭、马里奥·瓜哈尔多-塞斯佩德斯&玛格丽特·米歇尔、谷歌人工智能
5) Bolukbasi,t .,Chang,KW。男人对于电脑程序员就像女人对于家庭主妇一样?去偏置词嵌入神经信息处理系统进展 29,2016。**
美国人对新冠肺炎的反应如何?
使用 Twitter 和情感分析来回答这个问题
图片来源:推特
新冠肺炎疫情对整个世界构成了前所未有的挑战。由于确诊病例和死亡人数最多,美国是受病毒打击最严重的国家之一。随着各州开始部分重新开放,这个国家在这个问题上变得非常两极分化。一些人坚决支持这项措施,认为这对国家的经济健康非常重要。然而,其他人对此强烈反对,认为重新开放的人力成本是不合理的。在局势高度紧张的时候,我试图更好地了解美国人对新冠肺炎当前局势的真实感受。
为了回答这个问题,斯里汉·梅迪博纳和我一起从推特上搜集与新冠肺炎有关的推文,并对它们进行情感分析。为了了解美国各地的反应如何不同,我们使用了来自纽约、德克萨斯州和加利福尼亚州的推特。让我们进入项目吧!
获取 Twitter 数据
图片来源:Tweepy
在访问我们的 Twitter API 凭证之前,我们需要申请一个 Twitter 开发者帐户。一旦我们的应用程序被批准,我们就可以使用 Tweepy 访问 API 并下载一个标签的所有 tweets。调用search_for_hashtag
函数允许我们快速抓取标签中的数据(#冠状病毒、#新冠肺炎、#纽约、#加州、#德克萨斯是我们使用的一些标签)。要更深入地了解 Tweepy,请查看这篇文章。
我们使用朴素贝叶斯分类器进行情感分析,这需要标记数据,因为它是一种监督学习算法。因此,我们手动标记了来自这三个州的 500 条推文,总共 1500 条推文。每条推文要么负面情绪得分为-1,中性情绪得分为 0,正面情绪得分为 1。如果你有兴趣进行自己的分析,这里有一个链接到数据。
加利福尼亚推特数据集的前 5 行
符号化
现在,我们通过将推文拆分成单独的单词(称为令牌)来对推文进行令牌化。没有令牌,我们就无法执行情感分析的后续步骤。当我们从自然语言工具包(nltk
)中导入TweetTokenizer
时,这个过程就变得简单了。tokenize_tweets
函数只有两行代码,我们可以将它应用于数据帧来分解推文。nltk
是一个非常强大的情感分析包,因此我们将在整篇文章中使用它。
令牌化后的 CA 数据集
停用词
停用词是常见的词,如“the”、“a”和“an”。因为这些词不能加深我们对文本情感的理解,我们把它们过滤掉。通过从ntlk
导入停用词,这一步变得非常简单:remove_stopwords
函数也是两行代码。
从我们的 California 数据集的前几行中删除的一些停用词包括“Some”、“can”、“just”和“for”。
清理文本
除了移除停用字词之外,我们还希望确保移除数据框中的任何随机字符。例如,在我们抓取推文后,csv 文件中出现了几个字符,如“x97”和“xa3”。通过迭代找到这些杂项字符后,我们将它们复制粘贴到CleanTxt
函数中。然后,我们对每个数据帧应用该函数来移除它们。
正如我们所见,标签是被删除的最普遍的字符。通过清理文本,我们可以提高模型的性能。
词汇化
通常,指同一事物的词以不同的形式出现(例如。麻烦,困扰,困扰,麻烦本质上都是指麻烦)。通过对文本进行词条分类,我们将一个单词的各种词形变化组合在一起,作为该单词的词条(它在词典中的出现方式)进行分析。这个过程防止计算机将一个单词的不同形式误认为不同的单词。我们从nltk
导入WordNetLemmatizer
,并为此调用lemmatize_tweets
函数。
主数据集
既然我们已经完成了预处理步骤,我们可以继续创建一个包含所有 1,500 条推文的主数据集。通过使用df.itertuples
,我们可以将 dataframe 行作为元组进行迭代,以将‘tweet text’
和‘values’
属性添加到我们的数据集。然后,我们使用random.shuffle
打乱我们的数据集,以防止我们的模型成为过度拟合的牺牲品。
接下来,我们遍历所有的数据帧,并将每个单词添加到all_words list
中。接下来,我们使用nltk.FreqDist
来创建每个单词的频率分布。由于一些单词比其他单词更常见,我们希望确保使用最相关的单词来训练我们的朴素贝叶斯分类器。目前,每条推文都是一个单词列表。然而,我们可以将每条 tweet 表示为一个字典,而不是一个列表:关键字是单词特征,值是真或假,取决于 tweet 是否包含该单词特征。这个代表推文的字典被称为特征集。我们将为每条推文生成特征集,并在特征集上训练我们的朴素贝叶斯分类器。
训练/测试模型
feature_sets 将被分别分成 80/20 个训练集和测试集。在训练集上训练了朴素贝叶斯分类器之后,我们可以通过将它对推文情绪的预测(results[i]
)与推文的标签情绪(testing_set[i][0]
)进行比较来检查它的性能。
我们的输出在左边显示预测值,在右边显示实际值。40%的误差百分比非常高,这意味着我们的模型只有 5 次中的 3 次是准确的。一些可以使我们的模型更准确的改进是使用更大的训练集或使用验证集来测试不同的模型,然后选择最有效的模型。
使用模型
有了经过训练/测试的模型,我们现在可以用它来对一批新的推文进行预测。我们收集了更多的 tweets,并对新的数据帧执行了与之前相同的预处理步骤:ca_new_df
、ny_new_df
和tx_new_df
。我们的分类器的预测存储在results_new_ca
、results_new_ny
和results_new_tx
中。我们的最后一步是使用sentiment_percent
函数来量化百分比。
sentiment_percent(results_new_ca)
sentiment_percent(results_new_ny)
sentiment_percent(results_new_tx)
在我们的结果中,加利福尼亚州只有大约 6%的推文是正面的,而德克萨斯州有大约 27%的推文是负面的。加州和纽约都有 73%的推文是中性的,其正负百分比相差约 4%。德克萨斯州的确有最多的负面推文,但他们也有最多的正面推文,约为 10%,因为他们的中立推文比例较低。重要的是要记住,我们的模型只有 60%的准确性,所以这些结果可能不是这些推文中表达的真实情绪的最大指示。
为了简洁起见,本文省略了一些代码。点击此处查看完整代码。
参考
[1]计算机科学频道,使用 Python 的 Twitter 情绪分析,Youtube
[2]薇琪·钱, Twitter 爬虫,Github
[3]Mohamed Afham,使用 NLTK 的 Twitter 情感分析,Python ,走向数据科学
[4]亚当·马伊穆达尔,机器理解人类的钥匙,中型
感谢您阅读文章!我是 Roshan,16 岁,对人工智能的各种应用充满热情。在这个项目上,我与另一个对人工智能有浓厚兴趣的青少年斯里汉·梅迪博纳密切合作。
在 Linkedin 上联系我们:
https://www.linkedin.com/in/roshan-adusumilli/
https://www.linkedin.com/in/srihanmediboina/
亚洲发展中国家如何应对新冠肺炎?
使用 Pandas、Matplotlib 和 Seaborn 的探索性数据分析
杰森·库珀在 Unsplash 上的照片
新冠肺炎疫情严重打击了世界各地的各种经济体,全球影响估计在 6.1 万亿至 9.1 万亿美元之间,相当于全球国内生产总值(GDP)的 7.1%至 10.5%的损失。 [1] 超过五分之一的全球损失发生在发展中的亚洲经济体,其影响可能高达 2 万亿美元,相当于发展中亚洲 GDP 的 8.5%。为了应对爆发引发的经济危机的不利影响,本区域当局制定了支持家庭、企业和其他部门的应对政策。
这篇文章着眼于亚洲发展中国家的新冠肺炎对策,内容如下:
- 数据集
- 一揽子应对政策的规模和分布
- 为收入提供直接支持的措施
- 其他措施
- 菲律宾与其他国家相比表现如何?
- 结论
数据集
本分析中使用的数据来自亚洲开发银行(亚行)的新冠肺炎政策数据库,该数据库收集了亚洲发展中国家当局为应对新冠肺炎而采取的经济措施和宣布或估计的货币量的信息。【2】政策行为分为五类:a)支持货币市场的正常运行;b)鼓励私人创造信贷;c)向非金融部门提供直接长期贷款;d)对私营部门的股权要求;(e)为家庭和企业的收入提供直接支持。
一揽子应对政策的规模和分布
图一。就包裹规模而言,东亚在该地区占主导地位。 图片由作者提供。
东亚拥有最大的一揽子政策应对措施,达到 2.8 万亿美元,是该地区其他国家总和的三倍多(图 1)。相对于 GDP,东亚国家的一揽子计划平均相当于 GDP 的 21.5%,也高于其他国家。
该地区最大的刺激来自东亚和东南亚国家,以及印度。中国以 2.4 万亿美元高居榜首,这几乎相当于东亚回应总额的 90%(图 2)。接下来是印度的 3630 亿美元,接下来是韩国的 2350 亿美元。就占 GDP 的份额而言,香港 1920 亿美元的反应是巨大的,占其 GDP 的一半以上。新加坡的应对措施相当于其 GDP 的 25.4%,而马来西亚为 21.5%。
图二。 中国的包裹最多无比巨大;最大的包裹来自东亚、东南亚和印度。图片由作者提供。
跨区域甚至在次区域内,一揽子计划在国内生产总值中所占份额存在明显差异(图 3)。例如,东亚的四分位数范围为 14%至 17%,而中亚和西亚为 0.2%至 5%。在次区域内,东南亚国家的差异最明显,从 0.04%(老挝人民民主共和国)到 25%(新加坡)。另一方面,太平洋地区的异质性较低,低于或等于国内生产总值的 10%,马绍尔群岛是个例外。其他异常值包括东亚的香港和台湾以及中亚和西亚的哈萨克斯坦和格鲁吉亚。
图三。子区域之间和内部的包装尺寸有相当大的差异。图片作者。
为收入提供直接支持的措施
图 4。应对政策主要致力于为收入提供直接支持。图片由作者提供。
向家庭和企业的收入提供直接支持似乎是该地区一揽子计划的最重要目标(图 4)。整个集团投入了 1.9 万亿美元,用于向低收入家庭提供实物和现金转移、为医疗前线人员提供保险以及为低薪工人提供工资支持等措施。就人均收入而言,新加坡提供的收入支持最慷慨,人均收入超过 9,000 美元,其次是香港,人均收入超过 5,000 美元(图 5)。与此同时,在菲律宾,人均收入补助不到 100 美元。
图 5。新加坡和香港在提供收入支持方面最为慷慨。图片由作者提供。
其他措施
除了提供收入支持,当局还重视确保货币市场的正常运转,鼓励私人信贷创造,并向家庭和企业提供直接的长期贷款(图 6)。另一方面,购买私营部门股票的措施在该地区的许多一揽子计划中作用较小。
图 6。当局采取的措施因其对金融体系、收入和债务的影响而异。图片由作者提供。
东亚所有经济体都为提供流动性支持的措施投入了大量预算(图 7)。值得注意的是,香港增加了银行业的流动性,鼓励银行部署更灵活的流动性缓冲,并放宽了银行间的融资条件,占其一揽子计划总额的近 70%。大约五分之一的中国政策反应旨在扩大贷款设施,以帮助医疗用品和日用品制造商、微型、小型和中型企业以及农业部门的工人。
图 7。东亚经济体提供流动性支持。图片由作者提供。
在南亚,二级市场购买证券、降低利率和贷款担保在一揽子计划中占相当大的比例(图 8)。例如,尼泊尔的整个一揽子计划包括一个 20 亿美元的再融资基金,为愿意以优惠利率向包括中小企业在内的优先部门贷款的银行提供补贴信贷。在斯里兰卡,约五分之二的计划旨在实施新的信贷计划,以支持向受到疫情严重打击的建筑和其他行业发放贷款。
图 8。南亚当局鼓励私人信用创造。图片由作者提供。
向企业和家庭提供长期直接贷款、在一级市场购买长期到期的私人债务证券以及延期是东南亚许多一揽子计划中突出的措施(图 9)。文莱的一揽子计划包括 3200 亿美元的刺激计划,相当于国内生产总值的 2.6%,以延长所有部门贷款本金支付的延期。缅甸 70%以上的响应来自一个 7100 万美元的基金,以较低的利率向服装和旅游部门以及中小企业提供软贷款。
图九。东南亚国家增加了对企业和家庭的长期直接贷款。图片作者。
与其他国家相比,菲律宾表现如何?
菲律宾为新冠肺炎政策反应拨款 210 亿美元,相当于国内生产总值的 5.9%,其中约一半,即国内生产总值的 2.9%,包括为 1800 万非正规部门低收入家庭提供紧急补贴计划、为小企业员工提供工资补贴、为地方政府提供援助基金等(图 10)。相当于国内生产总值 1.5%的 52 亿美元的额外流动性,也占了该国刺激计划的相当大一部分。提供流动性支持的措施包括降低中小企业和大型企业的存款准备金率。
图 10。菲律宾的新冠肺炎政策应对组合。图片由作者提供。
尽管努力推动政府支出,菲律宾的数字仍然落后于东南亚的同行(图 11)。印度尼西亚,一个与菲律宾比较的好基准,分配了 1160 亿美元的刺激,相当于 GDP 的 10.4%。菲律宾的反应甚至落后于越南的 265 亿美元(占 GDP 的 10.1%),越南是一个以控制疫情严重程度而闻名的国家。收入支持预算也落后于亚洲发展中国家的大多数水平(图 12)。
图 11。菲律宾仍然落后于东南亚的同行。图片由作者提供。
图 12。收入支持预算仍低于亚洲水平。图片由作者提供。
结论
亚洲发展中国家的政策制定者一直面临着一项挑战,即设计适当的政策应对措施,以应对新冠肺炎疫情对家庭和企业收入以及金融体系的负面影响。虽然这种探索性数据分析表明,各国政府采取了相当大的努力来防止经济进一步恶化,但它没有说明这些政策行动如何影响新冠肺炎病例的数量。然而,除其他因素外,本区域的政策应对将影响亚洲发展中经济体从新冠肺炎疫情的复苏。
本文中使用的数据和代码可以在这个 Github 资源库中获得。
参考资料:
【1】a . Abiad、M. Arao、E. Lavina、R. Platitas、J. Pagaduan 和 C. Jabagat,新冠肺炎对亚洲发展中经济体的影响:疫情严重程度、控制严格程度和流动性下降的作用 (2020),CEPR 出版社
[2] J. Felipe 和 S. Fullwiler,亚行新冠肺炎政策数据库:指南 (2020),《亚洲发展评论》,37(2),1–20
决策树是如何构建的?
从头开始构建决策树的入门指南
理解用于构建决策树的基本原则不是很棒吗?在这篇文章中,我将演示如何构建一个决策树,特别是一个分类树,使用两个不同的标准:基尼系数和熵,并辅以一步一步的解释。我希望在这篇文章结束时,你能更好地理解决策树是如何构建的!🎓
决策树建立在过去的经验上,用来评估是否要看某部电影
1.数据📦
为了让事情易于管理,并希望有点乐趣,我们将创建一个微小的虚拟数据,灵感来自情景喜剧的 6 个主要角色:
注意:数据中的值已经过调整,以适合示例
让我们假设这个数据对本文的目的来说是正确的。我们将构建一个决策树,使用其余的列来分类一个字符是否是父字符。换句话说,我们将构建一个具有以下输入和输出的分类树:
◼ ️ 输入|特征: was_on_a_break,is_married,has _ pett11】◼️输出|目标: is_parent
2.构建分类树🔨
如果你喜欢数学,我鼓励你和这个指南一起手动计算,以充分利用这个博客。在本节中,为了简洁起见,作为父母的角色被缩写为 pa ,而非父母的角色被缩写为 np 。
2.1.使用基尼系数(又名基尼指数或基尼系数) ☝️
决策树是通过自上而下递归分割成二进制节点来构建的。我们可以通过以下步骤找到节点的最佳分裂:
步骤 1: 计算要从
分裂的节点的 gini 杂质(此处为向上的 gini)步骤 2: 找到所有可能的分裂
步骤 3: 计算每个分裂的两个节点的 Gini
步骤 4: 计算每个分裂的加权平均 Gini
步骤 5: 确定最佳分裂
包括来自训练数据的每个人的最顶层节点被称为根节点。让我们用这些步骤来确定根节点的最佳分割。
🚪第一步:计算根节点的基尼系数
➗公式:
这个公式的两个变体将给出完全相同的结果
我们可以将这个通用公式简化为以下公式,并计算基尼系数:
这个简化的公式将从这里开始使用
我们知道在 6 个角色中有 2 个非父母和 4 个父母。使用该信息,我们发现根节点处的基尼系数为 0.444。因此,根节点可以总结如下:
🚪步骤 2: 从根节点找到所有可能的分裂
使用三个特征中的任何一个,有三种方法来分裂。例如,我们可以把 6 个角色分成 2 组:一组给有宠物的人,另一组给没有宠物的人。其他两个特性也是如此。
🚪步骤 3: 计算每次拆分的两个节点的基尼系数
让我们计算三次拆分的每个节点的基尼系数。
📌练习:在继续之前,看看您能否计算出所有 6 个节点的基尼系数。
🔑答案:使用与步骤 1 相同的逻辑,我们发现每个节点的基尼系数如下:
希望这些微小的数字清晰可辨👀(如果太小,尝试放大)
🚪第四步:计算每次拆分的加权平均基尼系数
现在,我们需要找到每次拆分的加权平均基尼系数,记为 w_gini,。以 was_on_a_break 为例,我们计算 w_gini 如下 :
➗公式:左:左边的节点,右:右边的节点
📌练习:看看能不能算出另外两个的加权基尼。
🔑答案:你的答案符合这些吗?
🚪第 5 步:通过检查上一步的结果,确定最佳分割(最低加权平均基尼系数)
,使用is _ marted进行分割得到最低加权平均基尼系数。如果我们也看看步骤 3 中的表格,我们可以直观地理解这个决定。当上的分裂与结合时,树能够将一半的数据分裂成左边的纯节点。这个节点是纯的,因为它只包含父节点。对于最纯的节点,Gini 是 0,对于最不纯的节点,Gini 是 0.5(例如,对于其他分裂的右节点)。
🚪第六步:计算信息增益:如果为正,👉我们了解到,如果我们要分手,最好用结婚。现在让我们看看我们是否能从分裂中获得任何信息。信息增益被定义为顶部节点的基尼系数与底部节点的加权平均基尼系数之差。
信息增益为正。换句话说,我们通过分裂获得信息。因此,正确的决定是从根节点使用is _ marted进行拆分。
我们刚刚学习了如何确定分裂。⭐️:让我们重复同样的步骤,建立树的其余部分。是时候评估芥末节点的分配了!
也许我们可以从更简单的开始:左边的节点包含已婚节点。我们看到所有已婚角色都是父母,因此基尼=0。如果我们从这个节点分裂,即使从分裂中加权基尼为 0,我们也不会获得任何信息。所以,正确的决定是不拆分。在这种情况下,这个节点被认为是一个终端节点,不再进一步分裂。另一方面,对于右边另一个节点中的非婚角色,我们有一些工作要做。记住这些知识的最好方法是自己练习,为什么不试试通过下面的练习来应用我们刚刚学到的知识呢:
📌练习:完成所有步骤,找到正确节点的正确分割
🔑答案:
步骤 1: 我们已经知道了之前拆分的答案:0.444
步骤 2: 我们可以使用 was_on_a_break 或 has_pet
步骤 3 &步骤 4: 见下图
步骤 5: 最好的拆分是使用 was_on_a_break
结合输出,最终的决策树如下所示:
根节点:一个起始节点,包括所有人
内部节点:根节点和终端节点之间的所有其他节点。
终端节点:到达决策的节点
Yay❕:我们已经建立了一个简单的决策树。
2.2.使用熵✌️
让我们了解一下,如果用熵代替基尼,会有什么变化。步骤保持不变,除了我们每次都计算熵。
➗公式:
我们可以将这个通用公式简化为:
如果我们再次使用熵从根节点开始完成所有步骤,步骤 1、3 和 4 的输出将变为如下所示:
有了这个输出,看起来是已经结合的再次是从根节点的最佳分割。信息增益以类似的方式评估:
鉴于我们获得了信息,分开是有道理的。让我们像以前一样对底部节点继续相同的步骤。
因为已婚角色的左节点是纯的,所以我们不再需要从中分离。但是我们将按照步骤尝试改进正确的节点。步骤 1、3 和 4 的输出如下所示:
这是最后一棵树🌴:
你注意到了吗,在最不纯的情况下,gini 是 0.5,熵是 1,在这种情况下,节点在两个类之间平均分配,而对于只包含一个类的最纯的节点,这两个值都是 0。
如果您热衷于通过更多的实践来巩固您的学习,请随意使用您自己的小数据集来构建一个简单的决策树。您可以使用下面的示例脚本根据 sklearn 输出检查您的树:
不要忘记用您要使用的数据替换这些数据
3.结束语💭
在实践中,使用决策树作为构建块的更健壮的算法可能比决策树本身更常用作预测模型。
如果你不小心,决策树很容易过度拟合。我们可以说 was_on_a_break 不是一个很好的特性,因为它恰好是一个非常具体的特性,只适用于训练数据中的记录。因此,使用该特征来建立模型会导致模型过度适应训练数据中的噪声。
不管怎样,我认为理解构建决策树的基本原则仍然是有价值的。✨
您想访问更多这样的内容吗?媒体会员可以无限制地访问媒体上的任何文章。如果你使用 我的推荐链接 ,成为会员,你的一部分会费会直接去支持我。
好玩的事实: 你听说过谷歌给朋友的复活节彩蛋吗?在谷歌上搜索 罗斯·盖勒,点击他照片正下方右侧的小沙发。🙊另外 5 个角色也有这个功能!
谢谢你看我的帖子。我希望你已经学到了一些东西,✂️.如果你感兴趣的话, 以下是我的其他帖子的链接:
◼️ 如何在熊猫数据框架中转换变量
◼️ 用 Python 从维基百科中抓取文本的两种简单方法
◼️ 用 Python 编写简单的 word cloud
◼️️自然语言处理简介—第 1 部分:用 Python 预处理文本
◼️ 自然语言处理简介—第 2 部分:词汇化和词干化的区别
◼️ 自然语言处理简介
再见🏃💨
股票市场、地震和疾病有什么关系?
使用时间序列数据预测感染的传播,使用传统上用于模拟金融趋势的技术
来自疾控中心的𝘊𝘭𝘰𝘴𝘵𝘳𝘪𝘥𝘪𝘰𝘪𝘥𝘦𝘴 𝘥𝘪𝘧𝘧𝘪𝘤𝘪𝘭𝘦细菌在 Unsplash 上的图像
尽管医学进步带来了救命的护理,但患者仍然面临着被来自医院和在医院里游荡的疾病感染的风险。这种情况是由入院时不存在但后来发展的感染因子引起的,被称为医疗保健相关感染 (HAIs)。
追踪医院感染的传播是困难的,但也是必要的。在内科或外科治疗过程中发生的意外感染可能会延长住院时间,导致严重的患者疾病和死亡,并需要额外的治疗干预,从而产生额外的成本。
一个很有问题的海
最常见的 HAIs 之一是艰难梭菌感染(CDI),一种大肠疾病。它会引起从腹泻到危及生命的结肠炎症等症状。传播的主要来源是有症状感染的患者,他们在粪便中流出大量孢子和细菌,导致其皮肤、床单和附近环境表面的广泛污染。孢子对热和通常的化学清洁剂有很强的抵抗力,因此可以在环境中保持几周或几个月。患者和医护人员的手上可能会沾染到孢子。
美国 HAIs 的增长,来自 CDC
由于可能的传播途径多种多样,考虑医院中需要类似护理的患者共用的 单元 或套房的可变性如何影响个别病例对后续传播的贡献是有益的。这些差异包括与物理位置密切相关的因素,如手部卫生依从性、清洁实践和患者更替率。
了解特定医院单元中的新感染可能强烈触发进一步的事件,以及了解这些影响将持续多长时间,可以指导接触预防和隔离措施,特别是针对高风险单元的措施。
2011 年,仅在美国就报告了约 476,400 例 CDI 病例,占全国所有医疗保健相关感染的 12.1%。尽管由于最近出现的流行菌株,CDI 仍被疾病控制和预防中心(CDC)列为主要的健康威胁,但此后发病率开始出现一些下降。继续努力提高感染预防措施的依从性,结合计算模型的发现,可以在进一步减少 CDIs 方面走得很远。
建模方法
在建立传染病传播模型时,尽快了解扩散模式至关重要。在这种情况下,数据量在本质上是有限的。这项研究可用的数据,主要是与大型城市医院 CDI 发病率相关的时间戳和单位标签,数量也相当少。这促使解决一些与捕获时间序列数据模式相关的小数据问题,同时确保从短序列中学习到的模式是可靠的。
为了了解 CDI 影响的各种特征,我们使用一类特别有趣的随机过程对感染传播进行建模,这些随机过程已被应用于从地震建模到金融分析的不同领域。这些是点过程,其定义特征是每个事件的到达在一段时间内增加了未来到达的速率。我们问:
如果我们将金融文献中公认的强大建模工具应用于一个重要的医疗保健问题,会发生什么?
使用模拟和真实的医学数据进行实验,我们进行研究以测试我们对模型参数的先验的有效性,并进行实验以评估模型的质量、稳健性和抗过拟合性。在此之后,我们在 CDI 事件数据上训练和测试我们的模型,得到每个单元的学习特征和所有单元对的传染性测量。下面,我们提供建模方法的背景。
事件序列建模
在时间中观察到的事件经常自然地聚集在一起。给定一组事件序列,我们可以通过时间戳和类型来描述序列中每个事件的特征。被称为 的标记点过程 ,这些序列保存了几条有用的信息。例如,我们可以学习事件之间的触发模式,如下图中的红色箭头所示。我们也可能希望发现由蓝色和绿色时间线给出的相似事件序列的集群。利用这些习得的特征,我们甚至可以预测未来的事件。
由各种事件类型组成的事件序列
我们用 s = {( tᵢ , cᵢ )}表示,其中 i 范围从 1 到 n ,一个n-事件时间点过程,其中 t ᵢ是时间戳, c ᵢ ∈ {1,..。。, C }是事件 i 的标签。每一个点过程都可以表示为一个等价的 计数过程 ,我们在其中统计每一个事件类型的发生次数。我们将一个 强度函数 λ应用于每个计数过程,该计数过程收集时间 t 之前的所有类型的历史事件,并输出类型- c 事件的预期瞬时发生率。学习时间点过程的关键是参数化和估计其强度函数。
呈现指数衰减的点过程
霍克斯过程
这里,我们使用 Hawkes 过程 ,这是一种特殊的点过程,用于模拟复杂的事件序列,其中历史事件影响当前和未来的事件。霍克斯过程是 自激 ,因为事件到达率明确地依赖于过去的事件。
我们以一种特定的形式表达 Hawkes 过程的强度,有两个主要部分:独立于历史的外生强度 内在强度 ,结合捕获隐藏在事件序列中的自激和相互触发模式的内生强度。我们将历史 type- c' 事件对后续 type- c 事件的影响称为 Hawkes 过程的 传染性 。 触发内核 测量传染性的时间衰减,并模拟先前事件如何触发未来事件的动态。
追踪 CDI 的传播
我们使用 Hawkes 过程对感染传播进行建模,以了解感染影响的各种特征。具体来说,我们将 Hawkes 过程与单位水平的事件序列进行拟合,其中每个新感染都会增加未来一段时间内的感染发生率。
我们设计并实现了一个模型来联合捕获多个事件序列的动态,并系统地揭示序列之间的聚类结构。为了提高我们对单位传染性、内在强度和衰减率(即模型参数)的估计,我们将关于影响模式的先验知识纳入到我们的学习框架中。我们的实验结果表明,与多基线方法相比,这样做改进了参数估计。我们还集成了学习任意触发核的能力,因为当前最先进的方法倾向于假设特定的核函数,例如指数衰减。
数据可视化
这项工作中使用的数据包括 CDI 阳性诊断的时间戳以及单元标签。事件被定义为患者的 CDI 测试结果为阳性诊断的日期,以及患者在诊断时居住的单元的指示。在下表中,我们提供了医院各单元及其房间构成的详细信息。
匿名单位缩写和特征
在下面的图中,我们按频率降序显示了事件的单位分布。单元标签包含其类型,GMU、ICU、OU、MU 或 EMD 之一。我们注意到不同单元的事件计数差别很大,但是不管事件计数如何,事件都倾向于以有趣的方式聚集。
按单位划分的事件频率
按单位划分的事件时间戳分布
我们提出了一个模型来学习每个事件序列的触发模式和跨各种序列的结构,其中每个事件序列包括多种类型的事件。模型参数分为两组:(1)一个由所有序列共享的全局触发核 g ,其反映了来自过去事件的影响效果,以及(2)一个局部传染性矩阵和局部固有强度向量,两者都与和每个单元相关联的阳性 CDI 事件序列具体相关联。
对于一个系统,其中 U 是序列的数量, C 是事件类型的数量,我们用 A 表示,测量 C × U ,通过串联 U 个体 C × C 传染性矩阵获得的平坦传染性矩阵。我们设 μ ,测量 C × U ,串联 U 个体 1 × C 向量形成的本征强度矩阵。
结构正规化
为了能够跨序列进行模式学习,对施加稀疏和低秩约束。稀疏性约束包含的思想是,通常在每个序列中,只有事件类型的子集发生并触发其他事件。低秩约束背后的直觉是,当多个序列的总体触发模式相似并因此产生相似的单位传染性值时,导出聚类结构。我们还对施加了低秩约束,因为我们假设内在强度值在几个单元之间可能是相似的。这些限制使我们能够纳入关于感染影响的先验知识。**
优化问题
我们学习带有最大似然估计的霍克斯过程模型。参数 A , μ , g 可以通过求解以下优化问题来学习:
其中第一项表示模型的负对数似然,第二项正则化触发核以确保它是平滑的。参数λ₁、λ₂和λ₃分别控制上的低秩正则化、上的稀疏正则化和*上的低秩正则化的强度。负对数似然可以展开为:***
以上, u 表示特定的单元, c 表示特定的事件类型, a 是AA*的元素。 nᵤ 是事件的数量,而 Tᵤ 是与 u 相关的序列的最大时间戳。回想一下,λ是强度函数,其形式为:*****
采用交替方向乘子法(ADMM)方案,每次迭代都有一个优化-最小化步骤来求解优化问题。输出为 A 、 μ 和 g 的学习值。学习算法和参数更新在这里有详细说明,还有鲁棒性分析。代码在这里链接。
单元级的推理结果
为了表征每个单元的 CDI 影响模式,我们将医院作为一个整体拟合一个 Hawkes 过程,输入 20 个序列,每个单元一个序列,有 20 个以上的事件,其中所有事件标签都相同,对应于阳性 CDI 诊断( U = 20 和 C = 1)。我们根据前半部分的数据训练一个模型。然后,我们在剩余的数据上测试模型。我们为每个单元 u 获得一个学习( A ᵘ , μ ᵘ )对以及与所有单元相关联的单个触发内核。
这些强度和传染性值被标绘,每种类型标有一个单位。我们将学习到的传染性值解释为单位 u 中的 CDI 事件触发 u 中的 CDI 事件的程度。内在强度值描述由外部源触发的事件的到达。
学习单位强度和传染性值
一个关键的结果是 EMD 在所有单位中表现出最高的传染性。急诊科是传播 CDI 的关键角色,这并不奇怪,因为在这个地方,由于患者不断涌入和患者流动率高,适当的清洁和消毒会变得很困难。此外,过度拥挤的问题使得隔离病人变得困难。
我们还看到,一般医疗单位往往在房间布局方面略有不同,因此可以理解的是,总的来说,他们表现出不同的传染性和内在强度值。仔细观察发现,具有高传染性的 gmu 也具有高的内在强度。较低的 A 值可能反映了良好的隔离实践,即在患者开始出现 CDI 症状后,在私人房间对其进行治疗。不同的 μ 值可以解释为 gmu 为具有不同潜在疾病概况的各种人口统计数据的患者提供护理。
由于物理分隔减少了孢子的传播,有私人房间的单元预期具有较低的传染性值。事实上,我们看到所有的肿瘤科和大多数重症监护室都有较低的传染性值,表明良好的隔离措施。
该模型确定,管理单元表现出相对较高的 A 值,这可能是因为一些 CDI 患者被例行转移到这些单元,这表明这些单元的隔离和清洁方案需要修改。位于特别意外位置的点,如 ICU-1,也向医院报告。
医院层面的推断结果
在医院层面,我们寻求生成所有单位对的传染性值。为此,我们将 Hawkes 过程与数据集中所有 CDI 事件的单个序列进行拟合,并用一个标签表示与事件相关联的单元( U = 1 和 C = 20)。和以前一样,我们在前半段数据上训练模型,在后半段进行测试。
我们实现了下面给出的医院级别的传染性矩阵,其中每个单元测量类型- u' 事件到类型- u 事件对于 接收者 单位和 影响者 单位 u' 的传染性。从视觉上看,单元格值对应于水平轴上的单位对垂直轴上的单位中的 CDI 事件的影响程度。我们看到当u=u’时的传染率往往是最高的,因为病人更可能由于他们居住的单位环境而被感染,而不是由于来自其他单位的影响。如图所示,我们通过影响者在单位间的感染分布,在水平轴上对影响者进行聚类。我们在纵轴上根据从其他单元接收的 CDI 影响效应的分布对接收器进行分组。
习得性医院传染性矩阵
从矩阵中,我们确定了前五个影响因素,即 EMD、MU-1、ICU-1、GMU-2 和 GMU-6。这与上一节中介绍的结果一致,即这些单位在触发与其自身相关的未来事件方面最具影响力。
我们确定前五名接受者为 EMD、ICU-1、GMU-6、GMU-2 和 OU-3。EMD 中其他几个单位影响 CDI 病例是合理的,因为频繁的患者移动会导致高活动。ICU-1、GMU-6 和 GMU-2 是顶级接收器,但它们所经历的 CDI 影响效应主要是由它们自身引起的,这在检查它们的隔离方案时值得注意。虽然我们预计 OU-3 由于其自身感染价值而被标记为低影响者,但令人惊讶的是它也是高接收者。传染性矩阵表明 OU-3 受到几个 gmu 的中度 CDI 影响,这是值得注意的,并促使其向医院报告以进行进一步调查。
性能比较
为了评估单位级和医院级模型的相对性能,随着训练集大小的增加,我们绘制了各种测试对数似然值。我们将每个实验运行十次,用单个标准偏差误差棒绘制平均结果。
检验单位级和医院级模型的对数似然趋势
上面,我们看到,具有非零正则化参数值的模型始终比没有正则化的模型实现明显更好的性能,这在训练集包含较少事件时尤其明显。单元级结果表明,通过同时从多个序列中学习,具有策略正则化的模型能够为具有较少事件的单元利用来自其他序列的信息,有效地减少过拟合。
结论
我们应用了一个涉及 Hawkes 过程的模型来描述患者监护病房内和之间感染的影响模式,通过提出传染性和内在强度的正则化因子,结合了关于 CDI 传播模式的先验知识。我们还包括学习任意触发内核的能力。我们希望通过纳入患者人口统计数据来扩展该模型,目标是建立一个端到端的 CDI 风险预测模型。
令人兴奋的是,仅由阳性感染诊断的时间戳组成的数据有效地捕获了各个单元的触发模式之间的系统差异。
在医疗环境中,获得最新的传染性值和对单位不断变化的传染性能力的洞察可能是有价值的。
我们希望此处介绍的工作激发对感染影响特征的进一步研究,目的是帮助临床医生开发更有效的方案来降低患者风险。
参考
A.Kumar,使用自励时间点过程学习感染影响 (2020),提交给 NeurIPS 2020 的预印本
本文是霍克斯过程和时间序列分析系列文章的第一篇。有些帖子会更理论化,而其他的会详细描述数学建模的应用,就像这个。
艺术如何帮助你成为更好的数据从业者
发展空间能力以提高 STEM 成绩
从罗德岛设计学院(RISD)毕业后不久,我收到了一封来自 RISD 的校友邮件,内容是关于该校前校长约翰·梅达将艺术融入 STEM (科学、技术、工程和数学)教育的倡议,称之为 STEAM 。作为一名热爱数学和科学的设计师,这封邮件在情感层面上触动了我。
(关于《纽约时报》对约翰·梅达和 RISD 倡议的报道,见 此处 )。)
STEAM 的支持者认为,创造力和解决问题的技能与 STEM 教育的成功密不可分。虽然我确实同意这个观点,但这个论点可能有些武断。首先,我们并不完全理解创造力意味着什么,即使我们理解了,我们也知道它不一定等同于学习如何画画。我在这两个领域工作了多年,我想分享一下我个人对学习艺术如何有利于数据科学实践的看法。
一点背景…
我总是喜欢科学和艺术,但我经常不得不在两者之间做出选择。这是一个和在妈妈和爸爸之间做出选择一样困难的问题(毫不夸张地说,因为我妈妈是设计师,而我爸爸是工程师)。在我的童年,我花了很多时间来建造一个线跟踪机器人,并自学编码,同时还在书籍中填充角色草图。如果有人问我长大后想做什么,我总是很难选择是艺术家还是科学家。
尽管被评为班上最有可能治愈癌症的人,我还是决定在 RISD 大学学习视觉艺术,毕业后从事平面设计师的职业。在决定改变方向之前,我在这个领域工作和成长了近十年。我回学校做认知科学的研究,爱上了数据和统计,最后进入了数据科学领域。不像很多人想的那样,我的道路并没有感觉到分歧,如果你问我,我仍然不想选择。
认知地图
蒂莫·维林克在 Unsplash 上的照片
当我在研究人类决策时,我被认知地图的想法迷住了,这一想法是受诺贝尔奖获得者约翰·奥基夫和牛津大学神经科学家蒂姆·伯伦斯的作品的启发。这个绝妙概念的一个非常简短的总结是,我们的大脑使用一个类似网格的系统来绘制空间关系,我们也可以将这个系统用于非空间关系。这一过程被认为是以海马体为中心的,海马体是以前被称为记忆中枢的大脑区域。
这似乎太直观了,难以置信。我们确实描述了类似于空间关系的非空间关系。我们可以用“距离”来感受和描述我们与人的关系。当两个事物彼此相似时,我们自然会理解为“更接近”。与昨天相比,童年的记忆感觉如此“遥远”。那么认知地图这个概念的重要性是什么呢?我认为(假设)艺术训练的某些方面发展了这样的空间技能,这些技能与导航和生成这些认知地图相关,这些认知地图在 STEM 研究的其他实践中是有用的。
发散思维能力
有意识的原创训练鼓励你将不同的概念联系起来。想象一下,你去露营,你需要想办法打开一罐食物。这种跳出常规启发思维的认知过程被称为发散思维。当我们需要开罐头的时候,我们的大脑知道去找开罐器,因为开罐器和罐头的开启有直接的联系。但是如果我们在树林里而不是在厨房里,我们需要在开罐器的功能和树林里可用的东西之间建立一个新的联系。
现在让我们从认知图的角度来思考这个问题。我们的大脑有一个手册,告诉我们如何打开一个罐头,它链接到一个开罐器。但是,如果我们缺少必要的工具(开罐器)来执行指令,我们该怎么办呢?我们将遵循指令所需工具的属性(例如,切割金属,但不切割我的手)重新映射到其他可用工具的属性上,并找到最佳拟合路线。如果我们做得好,我们可以将指令的子部分映射到多个工具,并共同使用它们(一个切割金属,另一个保护我的手)。如果我们做得更好,我们可以把它推广到任何其他的地图上。
这是数据科学过程中的一项基本技能,在这一过程中,我们被许多工具淹没,无法得出答案。然而,我们如何将正确工具的正确属性重新映射到手头的问题是成功的关键部分。
创作艺术就是将不同领域的地图联系起来。许多任务的形式是改变给定对象的用途或改变给定概念的范围。例如,我曾经被要求从帽子中随机选择两个单词,并创建一个有凝聚力的出版物布局,以这两个单词(像花生酱和马蹄铁一样随机)为主题。主要的挑战是将这些单词的一些属性重新映射到一个对大众有意义的设计上。
这似乎是一种武断的做法,但它对科学研究过程有着重要的意义。将原本不相关的领域灵活地重新映射到手头的问题中,可以动态地利用我们大脑收集的更多资源。我们学会更容易地将我们在一个领域学到的知识推广到另一个领域。
凯利·西克玛在 Unsplash 上的照片
抽象能力
同样,学会更流利地浏览不同的地图有助于我们浏览更广阔的领域。我们通过在可管理的范围内重新映射信息来做到这一点。这就像有许多地图的碎片,选择我们需要的位置,并在上面画大圈。因此,即使每个地图的一些细节可能是模糊的,我们仍然可以使用它来规划一条粗略但有效的路线,以便根据它们的大致位置完成所有的家务。快速找到重要要点并把这些关键概念集中起来的能力不仅有助于看清大局,而且有助于记忆大量的信息。这是一个抽象的过程,是艺术训练的组成部分。
葆拉·拉塞尔在 Unsplash 上拍摄的照片
例如,当你学习画一幅静物时,你训练自己一次提取你所看到的不同属性。首先,你可以从只关注整体比例和组件之间的关系开始。接下来,您可能会关注这些组件的边界和边缘。然后你可以只提取光线是如何照射到表面的。诸如此类。艺术培训不止于此。通常你会利用大脑中的其他地图来整合一些新的联想,以增加更深层次的含义。这种有意识地定义个体属性的过程建立了我们在它们之间快速导航的能力,并轻松地切换我们认知地图的规模。数据科学项目也需要类似的过程,在这个项目中,流畅地分解和组合问题,使其达到任何特定算法都可以解决的规模的能力非常重要。
空间思维
当我们在上面画静物的时候,我们开始观察组件是如何相互联系的。这是你在任何类型的艺术教育中学到的一项重要技能,也是认知地图的基础:一种将非空间问题视为空间元素的能力。许多研究表明,空间能力训练如何提高儿童的数学成绩(见参考文献)。艺术训练包括学习将多种元素组合或转换成更简单的维度,甚至在人们开始将这些想法写在纸上之前。这个过程包括模拟多种安排,并在我们的脑海中产生项目之间的关系。
这种空间训练然后被推广到非空间过程。之前我们讨论了艺术培训如何帮助我们跨越不同的领域和不同的背景。类似地,我们可以将非空间背景映射到空间中,并动态导航,从而让我们理解复杂的概念,并从不同的角度看待它们。(如果你看过 3Blue1Brown 的视频,你就会知道这项技能有多方便。)
总之,我相信艺术教育的好处远远超出了传统的设计领域,通过在科学和技术中的实际应用来扩展自己。我在这篇文章中主要讨论了视觉艺术和设计方面的艺术培训,因为这是我最了解的。但是我相信这些技巧在许多不同类型的艺术实践中都有教授,包括表现领域更加多样化的表演艺术。毕竟,这是关于训练我们的基本认知功能,以扩大其门槛,打破通常的启发,而不仅仅是技术技能的训练。
参考
伯伦斯、T. E .、穆勒、T. H .、惠廷顿、J. C .、马克、s .、巴拉姆、A. B .、斯塔亨菲尔德、K. L .、& Kurth-Nelson,Z. (2018)。什么是认知地图?为灵活的行为组织知识。神经元, 100 (2),490–509。
卡克马克,S. (2009 年)。折纸教学对国小学生数学空间能力影响之研究。未发表的硕士论文)。安卡拉中东技术大学。
郑怡玲和凯莉.米克斯。“空间训练提高孩子的数学能力。”认知与发展杂志15.1(2014):2–11。
吉利根,K. A .,弗卢里,e .,,法兰,E. K. (2017)。儿童中期空间能力对数学成绩的贡献。实验儿童心理学杂志, 163 ,107–125。
人工智能如何帮助我赢得与鸽子的战争
鸽子回避系统
建筑概述和为什么你可能需要一个鸽子火绒
免责声明:您正在阅读的第 1 部分给出了该项目的概述。 第二部分 描述了技术设置和数据采集。 第三部分 讲的是如何训练鸽子识别模型,并在树莓派上运行。
来源: Reddit
想象一个美丽的夏日早晨。阳光透过树叶照射进来,鸟儿唱着欢快的歌曲,一切都充满了欢快的色彩。你泡了第一杯咖啡,站在阳台上享受只有周日早上才能享受的宁静与和谐。突然有什么东西打断了你对地球生命之美的沉思。在我的世界里,几乎每天都是我在自家阳台上发现的鸽子粪。我是一个忙碌的女人。我喜欢安静地享受早晨的咖啡,但我不喜欢——清理阳台上的鸽子粪便。
今天早上,我决定向鸽子开战,人工智能是最合适的武器。
现在我把情感部分放在一边,直接跳到工程、布线、建模和焊接的业务上。
问题陈述
鸽子经常光顾我的阳台,并在那里留下一些痕迹。我想在不伤害鸽子的情况下除掉它们,但要传递一个明确的信息:这里不欢迎鸽子。
解决方法
我已经建立了一个鸽子回避系统,可以检测鸽子并赶走它们。初始硬件设置包括:
软件堆栈:
- 自动化的 Python
- 深度学习部分的 Keras
- PHP,JavaScript,HTML 用于数据标注解决方案
架构概述
整体解决方案的工作方式如下。每当一只鸽子落在阳台上,运动传感器就会检测到光线的变化。它触发主管道,主管道反过来激活摄像机。相机拍摄照片,并将其存储在树莓上。主管道将图片发送到鸽子识别模型,该模型计算一只鸽子出现在图片上的概率,并返回该类。如果探测到鸽子,主管道就会启动步进电机,举起一根带丝带的棍子赶走鸽子。听起来很简单,但很有效。
鸽子回避系统架构图
为什么你可能需要一个鸽子火绒
架构图上有一个元素到目前为止还没有被解释,鸽子火绒。正是在这个时候,人们通常会扬起眉毛问:“鸽子的火种到底是什么?”鸽子绒是整体解决方案的重要组成部分。显然,为了训练鸽子识别模型,我需要向它输入带标签的数据。鸽子火绒是一个托管在树莓上的网络应用程序,它可以帮助我手动标记图像。最初,我想实现一个移动应用程序,左滑动会将图片标记为“不是鸽子”,右滑动会标记为“鸽子”。然而,很快我意识到,首先,移动应用程序开发对于最小可行产品(MVP)来说有点矫枉过正。第二,在现实中,我需要三个类,因为每当我在阳台上喝咖啡时,我会产生很多运动,并且通过制作数百张照片然后试图对它们进行分类,覆盆子会消失。因此,我引入了一个类“人类”,它会在下一张照片拍摄之前造成两分钟的延迟。我的主要希望是,当我已经在阳台上的时候,鸽子不会厚颜无耻地爬到阳台上。因为这些原因,我满足于安装在树莓上的 Apache HTTP Server 上运行的 web app。这就是鸽子火绒的界面。
鸽子火绒
由于我更喜欢在手机上点燃鸽子,这个网页被改编成手机版。这个应用程序非常简单。每当我给图片分配一个标签,它就把图片移到其中一个文件夹里:“鸽子”、“人”或者“什么都没有”。这也是未来培训的适当目录结构。“删除”按钮会将图片临时移动到“回收站”文件夹中,该文件夹由 cron 作业每晚运行的 clean _ directories.py 脚本定期清空。
顺便说一下,所有代码,包括训练例程、推理、鸽子火绒、树莓自动化都可以在 GitHub 上获得。
即使我不喜欢移动应用程序的最初想法,我仍然保留了标签模块的原始名称。我希望 Tinder 不要为此起诉我,否则你会在新闻里听到我的消息。
下一步是什么?
我以“鸽子回避系统”的名义在几篇文章中记录了这个项目。第 2 部分:“如何为避鸽系统设置数据收集”将解释如何访问外部 Raspberry 组件,如摄像头、运动传感器和步进引擎。它还将提供有关数据收集以及如何在阳台上设置整个系统的详细信息。深度学习部分在:“如何用深度学习把鸽子从阳台上赶走”中有描述。然而,我建议先阅读关于数据收集的文章。所以请保持更新,同时,先睹为快第二部分:我在我的厨房里焊接电缆。这个项目我确实需要很多电缆。
我在厨房里焊接电缆
如果你对这个项目有任何疑问,请随时通过 LinkedIn 联系我。
人工智能如何帮助我们对抗新冠肺炎?
没有人工智能技术,我们无法控制传播
布莱恩·麦高恩在 Unsplash 上的照片
在过去的十年里,人工智能的发展速度是指数级的。疫情让我们更加依赖技术,因为我们在实践社交距离和在家工作的选择。人工智能和机器学习正在提供利用来自各个部门的数据并做出明智决策的选项。其中一个应用是人工智能如何被用来帮助我们对抗新冠肺炎。
早期诊断
人工智能被积极用于在早期阶段识别高风险患者,因此有助于实时控制感染的传播。这在危机时刻变得尤为重要,因为实时监控是人们自我隔离和减缓病毒传播的最佳选择。
Clevy 是一家法国初创公司 ,它使用增强辅助来帮助诊断新冠肺炎症状。这样就可以在不离开家的情况下进行诊断。这是一个既省时又划算的解决方案。此外,它还减少了时间负担,并帮助医疗机构在危机时期满足更多人的需求。
Mayoclinic 是另一个允许自我评估新冠肺炎症状并建议在疫情期间保护自己的方法的平台。
人工智能还可以用于从全球的新冠肺炎病例中开发新的诊断和管理系统。人工智能和机器学习使得通过一系列与新冠肺炎和其他相关疫情相关的先前和当前研究进行筛选变得更加容易。机器学习还被积极用于扩大客户沟通(通过 rob-chat 选项),甚至帮助组织和收集与新冠肺炎研究相关的数据。
MIT-IBM 沃森人工智能实验室 积极参与一系列人工智能相关项目,以缓解新冠肺炎疫情的传播。几乎所有这些项目都使用 AI 和 ML 平台。
他们的一个项目包括早期检测新冠肺炎病人的败血症。感染新冠肺炎病毒后,败血症患者的存活率较低。研究人员计划使用 ML 来分析 COVID 患者的白细胞(WBC)图像,以获得针对脓毒症的激活免疫反应。脓毒症是对感染的威胁生命的免疫反应。只有一半的脓毒症患者和新冠肺炎患者存活下来(这是一个致命的组合)。这种早期诊断将使医生有时间对那些高危患者采取必要的积极措施。
预测和跟踪
人工智能也被用于开发数学模型,研究新冠肺炎的传播速度。使用的不同数学模型包括:(1) SIR(易感、传染和康复)模型(ii) GLEaM(全球流行病和流动性)模型(iii) TRANSIMS(运输分析和模拟)系统和(iv) IBM(基于个体的模型)。
这些模型可以从理论上预测新冠肺炎疫情的阳性病例数和传播率。人工智能可以通过跟踪确诊病例的数量,轻松确定最脆弱的地区,并采取必要的行动来遏制传播。
SIR 模拟疾病在隔离人群中的传播和感染率。这个模型可以有效地解释为什么一些国家能够控制传染病的传播,而另一些国家仍然在挣扎。GLEaM 和 TRANSIMS 都考虑了旅行导致的身体接触模式。TRANSIMS 甚至通过在疾病爆发区域放置传感器来使用实时模型。
一群麻省理工学院的教授正在开发重启经济的模型。该项目包括分析不同年龄组的感染、住院和死亡风险。这种模式将允许重启经济,同时拯救更有可能被感染的老年人的生命。
散布错误信息
人工智能也被用来通过控制错误信息来应对这场危机。社交媒体现在正在积极使用个性化的人工智能技术来减少虚假信息在他们平台上的传播。这一点变得尤为重要,因为一系列阴谋论和虚假医疗信息正在媒体上流传。人工智能可以使筛选新冠肺炎虚假信息的过程更快。
药物和疫苗的开发
它可以帮助检测可用于治疗新冠肺炎患者的有用药物。人工智能可以通过计算分析更快地确定疫苗和治疗方法,这有助于临床试验。
IBM Watson Health使用数据库为患者确定正确的药物治疗。这一点很重要,因为患者可能有许多潜在的疾病,人工智能技术可以主动识别对患者理想的概率药物治疗。
人工智能也可以用来开发疫苗和治疗药物。该过程通常是劳动密集型的,因为各种药物组合的剂量选择包括一系列的试验和错误。AI 可以降低这个成本,让这个过程更有效率。
身份。AI 是一个人工智能平台,用于确定 Remdesivir 与利托那韦和洛匹那韦的组合作为对抗 SAR-COV-2 的方案。然而,这一理论仍然没有同行审查,但提供了未来成功控制新冠肺炎的技术乐观。
麻省理工学院还与 IBM 研究人员合作开发一种人工智能工具,以帮助医生找到呼吸机设置,从而确定患者需要在机器中停留多长时间。这一点尤为重要,因为缩短通气时间可以减少可能的肺损伤,并为其他重症监护患者提供使用空间。
还有其他一些相关的工业和学术研究正在进行,以帮助我们遏制这种传染病的传播。
结论
人工智能在早期诊断、跟踪、控制错误信息传播以及开发潜在药物和疫苗方面取得了成功。不仅仅是在疫情期间,它还一直称赞医疗保健行业的工作。这是为数不多的资源之一,可以允许成本效益,更少的时间消耗的方法来开发疫苗和治疗,以帮助我们抗击 SARS-COV-2。
参考文献
[2]r . Vaishya,m . Javaid,Khan,I. H .,& Haleem,A. (2020 年)。新冠肺炎·疫情的人工智能应用。糖尿病&代谢综合征:临床研究&综述。
[4]奇纳齐,m .,戴维斯,J. T .,阿杰利,m .,焦安尼尼,c .,利特维诺娃,m .,默勒,s .,… &维布,C. (2020 年)。旅行限制对 2019 年新型冠状病毒(新冠肺炎)爆发传播的影响。科学,368(6489),395–400。
[5]Volpert,v .,Banerjee,m .,& Petrovskii,S. (2020 年)。冠状病毒感染的隔离模型及数据分析。自然现象的数学模型,15,24。
[6]Balcan,d .,Colizza,v .,Gonç alves,b .,Hu,h .,Ramasco,J. J .,& Vespignani,A. (2009 年)。多尺度移动网络与传染病的空间传播。美国国家科学院学报,106(51),21484–21489。
[7]尤班克、古奇卢、阿尼尔·库马尔等人,《模拟现实城市社会网络中的疾病爆发》。《自然》杂志 2004 年第 429 期,第 180-184 页。【https://doi.org/10.1038/nature02541
[8]德格利·阿蒂,M. L. C .,默勒,s .,里索,c .,阿杰利,m .,马萨里,m .,曼弗雷迪,p .,…,伊安内利,M. (2008 年)。意大利疫情流感的缓解措施:考虑不同情景的基于个体的模型。PloS one,3(3)。
[9]http://news . MIT . edu/2020/MIT-marshaling-人工智能-fight-against-新冠肺炎-0519
[13]同前。AI:人工智能精确定位 Remdesivir 联合利托那韦和洛匹那韦作为对抗严重急性呼吸综合征冠状病毒 2 型(新型冠状病毒)的最佳方案。Agata Blasiak、Jhin Jieh Lim、Shirley Gek Kheng Seah、Theodore Kee、Alexandria Remus、De Hoe Chye、Pui San Wong、Lissa Hooi、Anh T.L. Truong、Nguyen Le、Conrad E.Z. Chan、Rishi Desai、Xianting Ding、Brendon J. Hanson、Edward Kai-Hua choi、Dean Ho。medRxiv 2020 . 05 . 04 . 20088104;https://doi.org/10.1101/2020.05.04.20088104
人工智能如何在 2020 年改变商业
商业格局正在发生巨大的变化
介绍
工业革命千载难逢,然而,我们发现自己正在经历一场深刻的革命,即人工智能(AI)革命。200 多年前,当蒸汽机被发明时,我们经历了第一次工业革命。一个世纪后,我们发明了电,一个世纪后,发明了互联网。像所有这些发现一样,人工智能彻底改变了我们的经济,并颠覆了你能想到的每个行业。
但首先,是什么让 AI 如此具有革命性?
像蒸汽机和电力一样,人工智能扩大了社会生产力的上限。与效率低下且容易出错的人类不同,算法可以全天候工作,不容易犯人类犯的错误。除了生产力,人工智能目前的能力和未来的潜力本质上是无限的。人工智能应用增强了复杂流程的自动化、个性化的客户体验、改进的风险管理等等。
在这篇文章中,我们将看到人工智能如何彻底改变了几个行业。
人工智能和金融
pch.vector 创建的人员向量
根据麦肯锡的一份报告,金融服务是少数几个显著采用人工智能实践的行业之一,因此,一些公司的利润率比行业平均水平高出 10%以上。
以下是人工智能如何改变金融行业的一些常见应用。
欺诈防范
一般来说,人工智能应用寻求增加收入或削减成本。但在防止欺诈方面,人工智能两者兼而有之。必须向客户还钱是有代价的,而且不能将钱用于投资也会造成收入损失。在 2016 年,由于欺诈和身份盗窃,160 亿美元被盗,这就是为什么它是人工智能中最大的应用之一。通过分析客户的活动、位置和购买习惯,欺诈检测模型能够标记出可疑或异常的事件。
算法交易
交易员面临的最大挑战之一是管理自己的情绪。制定一个合理的交易策略是一回事,但是不管你面临什么样的混乱,坚持这个策略是另一回事。然而,算法交易消除了交易中的情感因素。机器学习和人工智能极大地提高了算法交易能力,随着数据的增加,算法每天都在学习和改进。
个性化银行服务
许多金融科技公司正在利用人工智能为客户提供个性化的银行服务。客户可以根据他们的风险偏好获得独特的金融工具组合,他/她还可以根据他们的支出模式、收入和目标获得个性化的金融计划。随着人工智能的发展,你可以期待看到更多个性化的银行服务。
如果你想了解更多关于人工智能在金融行业的影响,请查看 2020 年银行业人工智能趋势
人工智能和营销
由 GraphiqaStock 创建的背景矢量—【www.freepik.com
很长一段时间以来,市场营销更多的是一门艺术而不是科学,直到最近。随着机器学习和人工智能的出现,数据科学家能够量化营销决策,并从整体上增强营销实践。
营销归因
营销中最大的问题之一是弄清楚如何量化各种营销渠道的影响。对于线下营销渠道,如电视、广告牌或广播,这尤其困难。
也就是说,出现了两种流行的营销建模技术来解决这个问题,归因建模和营销组合模型。归因建模用于确定销售和转化的信用如何分配给客户旅程中的不同接触点(例如,客户看到脸书广告,然后是 YouTube 广告,然后是 SEM 广告)。归因模式的问题在于,它们没有考虑线下渠道,而这正是营销组合模式的切入点。营销组合模型是多元回归的一种形式,旨在根据花费的美元来估计营销渠道的影响,以确定对转化率或收入的影响。
客户特征分析
客户特征分析或客户细分是通过对客户进行特征分析来更好地识别客户的实践。通过使用聚类技术和其他机器学习技术,营销人员可以更好地了解客户人口统计数据(年龄、性别)和地理位置(位置)。通过这样做,营销人员可以更好地定位广告和信息,以联系他们的目标市场。
人工智能和物流
宏向量创建的背景向量—www.freepik.com
通常,物流不是商业中最热门的话题,但涉及到人工智能时就不是了。事实上,AI 的一些最大潜力可以在物流中看到,包括自动化仓库和自动化车辆。
自动化仓库
当你想到自动化仓库时,你可能会想到亚马逊的仓库,那里有成千上万的移动机器人将库存从 A 点移动到 b 点。虽然这是真的,但实际上还有更多。自动化仓库还意味着使用数据来优化库存水平,从而减少所需的仓库空间,降低运输成本和总体成本。
自动驾驶汽车
人工智能在物流中的另一个用例是自动驾驶汽车。我之前说过,人类效率低下,容易出错。在运输方面尤其如此。人类需要睡觉、吃饭、使用洗手间、休息等等。有了自动驾驶汽车,交通将不再局限于一天八小时,一周五天。
特斯拉是自动驾驶汽车的主要例子,不仅生产消费类汽车,还生产自动驾驶卡车。另一个不太为人所知的例子是劳斯莱斯和英特尔。他们一起建立了一个智能感知系统,为自主船创造了机会。
案例研究:了解人工智能如何通过动态定价模型转变一家全球运输公司
人工智能和零售
在可以说是竞争最激烈的行业之一,零售商正在寻找通过人工智能脱颖而出和增加价值的创新方法。人工智能正以多种方式应用于整个产品和服务周期。以下是人工智能在零售业中的许多用例中的几个。
聊天机器人和机器人助手
聊天机器人在过去几年里有了显著的改进。虽然他们还不能完全取代客户服务代表,但他们非常擅长回答简单的问题,并用于指导客户找到正确的支持团队。比聊天机器人更有趣的是机器人助手——由软银设计的机器人 Pepper 是一种社交人形机器人,用于实体零售店与客户互动并提供帮助。
个性化推荐
一些零售公司也在使用人工智能为客户提供个性化推荐。弗兰克和奥克声称,通过问一系列问题,人工智能可以为每个顾客提供一个独特的服装风格订阅箱。亚马逊是另一个很好的例子,它使用人工智能根据以前的搜索历史和购买历史提供推荐的产品。
案例研究:了解人工智能如何改进需求预测以优化库存。
人工智能和电信
卡特曼戈斯塔创建的业务向量—www.freepik.com
电信行业的估计价值为 1.4 万亿美元——价值如此之大,每一个差异都很重要,这就是为什么电信公司已经找到了几个人工智能用例来改善他们的客户体验,并最终实现利润最大化。以下是人工智能在电信行业的三个主要应用。
流失预测建模
客户流失率是指客户停止与某个实体做生意的比率。因为从技术上讲,电信行业的客户提供了永久的收入,客户流失的成本很高。因此,电信公司利用人工智能根据活动水平、投诉数量等来预测客户何时可能流失。
网络最佳化
人工智能已经成为构建自我优化网络的关键,使运营商能够根据流量数据自动优化网络。根据 IDC 的数据,已经有超过 60%的运营商投资人工智能系统来改善他们的网络。
预测性维护
我想我们都同意,电信服务中最大的诽谤者之一是网络故障——当你的 wifi 无法工作时,你不讨厌吗?嗯,公司现在正在利用人工智能,根据设备的状态和分析网络模式来预测网络何时可能发生故障,以便他们可以主动预防网络故障。
感谢阅读!
让我们连线上 领英
人工智能将如何推动 2020 年的消费主义
气候变化还是消费主义?
当机器人比你更了解你的时候
我们都知道什么是消费主义。我们都有罪却不承认。回想一下,我们出售或藏在抽屉里的许多 iPhones(或 Android 手机),只是因为我们想得到最新的手机。为什么续航时间延长一小时的电池和分辨率稍高的相机。
我们花数小时排队购买数不清的 Hello Kitties 或 Pokémon 公仔,只是因为它们是“限量版”。这是我们最喜欢的不同颜色的衣服,因为我们可以。我们告诉自己迫切需要的是装满衣服和鞋子的架子和衣柜——沙滩装、休闲装、正装、家居服、睡衣、派对装等——但实际上我们并不需要。
对于我们许多有罪的人来说,这种消费主义和物质主义的现象是合理的。然而,我们没有意识到的是,人工智能(AI)在多大程度上助长了这一现象。
而且只会在 2020 年被 AI 加剧。
消费主义——有什么大不了的?
实话实说吧——人工智能已经在助长消费主义了。最精彩的部分?我们甚至没有意识到我们对整个“消费主义”现象有多着迷。如果我们这样做了,气候变化和整个推动“绿色”生活方式的运动就不会存在了。
但这不是本文要讨论的内容。因此,尽管我们消费的东西产生了大约 60%的全球温室气体[1],我们还是要花一点时间来忽略这个可悲的事实,并检查人工智能将如何推动T5 更多 消费主义。
以下是我的分析。
广告定位——当机器人比你更了解你的时候
你多久点击一次 Instagram、脸书、YouTube 或其他网站上的赞助广告?你有多经常在你的新闻订阅上发现一个广告,而你甚至没有在谷歌上搜索过它,但只是模糊地记得向某人提起过它,并且感觉完全被吓坏了?
答:不确定,但肯定越来越频繁
放松点,没人在监视你。这些算法正在变得越来越好。随着关于你的数据越来越多,这些推荐系统能够微调各种参数的权重,以获得你的几乎完美的复制品(模型)(或者看起来是这样)。
这些推荐系统是延续消费主义的完美例子。他们鼓励你比平常更早地得到你可能想要或需要的东西,仅仅是通过出现在你眼前(视觉刺激)。
当然,有些人可能会认为这是另一种形式的营销。的确如此。但是,当我们想到像英国退出欧盟、川普总统大选这样的传奇故事,当然还有导致我们现在所知的数据保护政策甚至监管的整个剑桥分析公司时,广告定位的整个想法可能是如此可怕。
见鬼,我甚至担心把我的电子邮件送给免费 WiFi,因为我不想让人们知道我在哪里,也不想出卖这些信息。妄想症是真的。
推荐系统无处不在——电子商务网站、社交媒体、基于订阅的服务(网飞、Spotify、Medium 等)等等。消费主义不再仅仅是物质商品。它还包括音乐、电影、书籍和任何书面文章等内容。
这些算法越好(即数据越多),消费主义就越持久。
亚马逊效应——当机器人管理你的仓库
杰夫·贝索斯才华横溢。投资者喜欢他的公司是因为他带来了多少股东价值,更不用说 T2 亚马逊 T3 的企业集团式商业模式了。竞争对手讨厌他,因为他们因缺乏规模经济而难以跟上,也缺乏纵向扩展的资源。
当然,这不仅仅是关于亚马逊的。这是关于整个电子商务行业和对实体自由化的推动,就像灭霸在收集了无限宝石后打了个响指,让一半的人口消失了一样。尽管这看起来不可思议,但我们肯定会慢慢实现这一目标。我相信,进入实体店的体验很快就会从纯粹的交易型转变为体验式。
那么,发生了什么变化?
最近,亚马逊宣布向美国顾客提供免费的当天送达和当天送达服务..其增加的支出(96 亿美元)不仅包括运输和接收,还包括陆地、海洋和空中的配送和逆向物流。目标是:这样你就再也不需要去别的地方购物了。
阿里巴巴也紧随其后,花费 160 亿美元建立了一家快递公司,试图建立自己的递送平台。这也是对 JD.com 首次进军中国电子商务市场提供当日送达服务的回应。
就像斯科特在他的文章中非常精彩地提到的那样,这对像 DHL、FedEx 和 UPS 这样的公司有着巨大的影响。对于这些公司来说,现在更有意义的是被像亚马逊 T21 或沃尔玛这样的公司收购,以免被完全取代,如果他们不能提供相同的当天送达服务。他们肯定能够做到,但代价更高。不管怎样,必须要发生一些激烈的事情。
AI 在哪里发挥作用?
如果你还没有在 YouTube [4]上看过阿里巴巴的仓库,你应该看看。仓库里的大部分操作都是由机器人来完成的,我可以想象未来大多数仓库会是这样的。
它本质上是计算机科学爱好者的天堂。这个仓库类似于一个吃豆人棋盘,吃豆人(机器人)必须在迷宫(成排的物品)中导航,以获得食物(拾取物品)并避免鬼魂(其他机器人)。我们遇到的是一个路由问题(旅行推销员问题)和一个调度问题的组合。有了 AI,这些问题就变得简单了。深度 Q 学习(强化学习代理)和计算机视觉的使用使得典型的计算机科学问题更容易解决。
我敢打赌,电子商务公司都将转向自动化仓库这一黄金标准。如果他们不这样做,他们就失去了竞争力,亚马逊的目标也就实现了。
消费主义的增长仅仅是这种极快的传递速度的结果。
如果退货就像快递第二天送到你家门口一样方便(更不用说包裹投递点如此普遍),当你可以在家里舒适地尝试东西时,谁还会出去呢?
额外收获:Lite 是新的重量级产品
这一部分与人工智能如何推动消费主义没有直接关系,但由于基于云的时代商业模式的转变,我想提出这一部分。
我非常肯定,在 2020 年,没有人会质疑科技公司正在并将继续推动全球经济。新兴公司基于轻资产模式,而已经存在很长时间的公司也弃船转向轻资产模式。亚马逊网络服务(AWS)、微软 Azure、谷歌云平台(GCP)和阿里巴巴等云提供商将获得所有这些利润,更不用说这些云服务的巨大利润了。
Spotify 允许播放流媒体音乐。YouTube 允许视频内容的流式传输。网飞允许电影和电视剧的流媒体播放。游戏正在向云发展,在云环境中,昂贵的游戏硬件不再是以高帧率运行游戏的必要条件。CD 用于音乐、DVD 用于电影、游戏机用于硬核游戏的时代已经一去不复返了。你现在需要的是良好的互联网来刺激消费。
结束语
当我们期待未来有所收获的一年时,让我们花一点时间来欣赏人工智能对我们生活的改善。说到这里,让我们也默哀一下,纪念环境为我们做出的牺牲,这样我们就可以享受当天送达了。
澳大利亚的树袋熊和其他动物。
参考
[1]家庭消费的环境影响评估,工业生态学杂志—https://onlinelibrary.wiley.com/doi/abs/10.1111/jiec.12371
【2】阿里巴巴旨在以 160 亿美元的快递风险投资交付,金融时报—https://www . ft . com/content/3 b5 e9 b5 c-049 c-11ea-9 AFA-d9e 2401 fa 7 ca
【3】fck dex,Scott Galloway—https://medium.com/s/no-mercy-no-malice/fckdex-eca0025a0b11
【4】在阿里巴巴配备机器人的智能仓库内,YouTube
使用 Pandera 的自动化数据验证如何让我更有效率!
数据科学家的重要策略
D ata 被称为 21 世纪的新石油。篡改数据以提取和使用正确的信息来解决我们的问题非常重要。对人们来说,处理数据是令人兴奋的,有时也是乏味的。正如正确的说法,“数据科学家花 80%的时间清理数据”。作为该包的一部分,当遇到新数据集时,我会经历相同的过程。同样的活动不限于,直到机器学习(ML)系统实现并部署到生产中。在实时生成预测时,数据可能会由于不直观和不可预见的情况而发生变化,如人为干扰导致的错误、提交的错误数据、数据的新趋势、记录数据时出现的问题等等。包含多个步骤的简单 ML 系统如下图所示:
作者(普拉蒂克·甘地)创造的形象
这需要通过明确引入或标记另一个组件来稍微改变,在数据准备之后和特征工程之前,我们命名为 数据验证 :
作者(普拉蒂克·甘地)创造的形象
这篇文章关注的是为什么数据验证很重要,以及如何使用不同的策略将它无缝地集成到他们的管道中。经过一些工作后,我学会了如何实现脚本来进行数据验证,以节省一些时间。除此之外,我使用一些预建的包来自动化它们,加速我的游戏!
听听我的故事!
公路旅行照片,Raj 在 Unsplash 上
根据 Gartner 的数据,几乎 85% 的项目将无法投入生产。机器学习(ML)管道在投入生产时通常会遇到几个问题。我经常遇到的一个主要问题是数据质量的妥协。一天花几个小时,一个月可能花几次,并且弄清楚由于某种原因传来的数据是不可接受的,这可能会很令人宽慰,但同时也会令人沮丧。导致数据类型改变的原因有很多,例如,引入了文本而不是整数,整数在异常值上(可能高出 10 倍),或者数据馈送中没有接收到整个特定列,等等。这就是增加这个额外步骤如此重要的原因。手动验证可能会花费额外的精力和时间。使其自动化(在一定程度上)可以减轻数据科学团队的负担。我认为在管道中集成自动化数据验证有一些主要的好处:
- 节省几个小时的时间
- 团队成员之间的挫折感
- 通过关注其他领域提高效率
- 努力使您的生产模型更加精确;)
Python 社区已经构建了一些优秀的包,以非常智能的方式处理这些问题。我将分享一些我探索过的,以及我如何设计我的脚本使它们成为我的管道的一部分。
数据源:我用了一个最近的数据集来展示如何实现这些包。下面是获取数据的链接。
数据验证包
潘德拉:
Pandera 提供了一个非常简单灵活的 API,用于对数据帧或系列数据进行数据验证。它还有助于执行复杂的统计验证,比如像 two_sample_ttest 这样的假设检验。更多关于包装和使用的细节可以在这里找到。
从数据集中抽取 10 行样本:
正如我们所看到的,有多个不同数据类型的列:String、Int、Float、Datetime。我们需要定义我们期望的数据的模式。我定义了一个简单的模式,没有任何严格的数据验证检查规则,如上面的代码所示。根据期望的数据类型,我们可以用【pa.Int】来表示整数,* pa。字符串 为字符串, pa。 浮子为浮子或 pa。日期时间 如果有一个日期时间。这里我们设置 可空=真 如果我们期望值否则 假 。此外,如果我们设置compete = True,它会将列转换为预期的数据类型,而不会给出任何错误。例如,用于将浮点数转换为整数,将整数转换为字符串*等。在验证数据时,输出将是数据帧本身,因为它通过了所有的检查(试试看!!!).如果失败,输出将如下所示:**
**Traceback (most recent call last):
...
ValueError: cannot convert float NaN to integer**
关于潘德拉,我已经探索了一些惊人的能力,我会尽可能详细地解释。
设置必需的列:
有时,列可能是可选的,而不是必需的。在这样的情况下,我们可以设置 required = False。 由默认 必填=真 用于所有列
正如我们在下面的截图中看到的,它返回数据作为输出,没有任何错误。
对于“ID”列,需要设置输出= False
尝试为同一列设置required = True并再次运行上面的代码。
处理新列:
默认情况下,如果新列被添加到数据框中且未在方案中定义,则不会引发错误。但是,如果你愿意你可以设置 strict = True。
运行上面的代码,我们看到它抛出了模式中没有定义的错误‘extra _ column’。
设置 strict = True 和 lazy = False 时“extra_column”出错
如果你看到我的代码,我已经添加了 lazy = True ,它给出了如下更详细的视图:
索引验证:
如果数据集中存在任何特定模式或具有任何特殊重要性,也可以验证索引。例如,参见下文:
我创建并设置该列作为索引,以展示我们如何进行索引验证。在模式的括号之外,可以指定预期的索引格式。同样,输出与之前相同
使用索引验证后的输出
这里我们执行了一个单一的索引验证。多索引验证可以以类似的方式执行。点击查看。
数据架构转换:
一旦我们定义了验证数据的模式,在由于额外的计算(100%的时间都会发生)而引入新的列之后,就有可能在管道本身中转换模式。假设最初我们只有 Id、County、Province_State、Country_Region、人口作为列。我们向模式中添加新列 Weight、Date、Target、TargetValue ,如下所示:
在打印如上所示的模式时,我们得到以下结果:
添加列后转换的架构
另一方面,如果需要,我们也可以从模式中删除一些列,如下所示:
删除列后的架构
检查列属性:
用户可以使用检查对象对列进行更详细的检查,如下所示:
Pandera 有一些可以直接使用的预置检查,比如大于等于、小于。也可以传递自定义检查,例如,这里我们使用了 lambda 参数来计算字符串的长度。这是 Pandera 中最好的功能之一,可以为数据验证策略带来更多的价值。点击了解更多详情
如何以及何时使用:
- 我创建单独的脚本,一旦在进入下一步之前接收到最终数据,就运行并给出验证报告。人们也可以将它们集成为预处理的一部分。
- 人们也可以直接把它们用作装饰者。这里看如何。
- 除了直接在数据帧上使用之外,它还可以应用于系列,特定的列检查,甚至是逐元素检查。
- 由于灵活性 regex 操作也可以使用 Pandera 对数据执行。
- 重要的是,你不可能一开始就有一个完美的数据验证模式。更有可能的是,当您在长时间内实时遇到数据时,通过合并不同的验证策略,您将使数据验证模式更加“完美”, ML 管道更加健壮。
其他包:
远大前程:
顾名思义,您可以为要验证的数据设置期望值。老实说,我和潘德拉相处得太好了,以至于我没有机会去发掘他的全部潜力。它看起来很容易实现,并且可以直接打包使用。下面是相同数据的一小段实现:
地狱犬:
这是另一个语法类似于 Pandera 的包。当数据为 字典格式 或 JSON 格式时,更适用。
关于这个包的更多细节可以在这里找到。
漏勺:
如果您的数据是通过 XML、JSON 或 HTML 表单 post 获得的,这是另一个很棒的包。换句话说,验证任何类型的字符串、映射和列表数据都是有益的。以下是一些有用的链接:
Github:https://github.com/Pylons/colander
文献:https://docs.pylonsproject.org/projects/colander/en/latest/
JsonSchema:
JsonSchema 是 Python 的 JSON 模式的一个实现。顾名思义,这个包对于验证 JSON 数据非常有帮助。以下面这个包含有效 JSON 数据和无效 JSON 数据的例子为例:
在运行无效数据时,它会抛出一个错误:
无效数据的错误
正如我们所看到的,价格应该是数字,但提供的是字符串。关于它的更多细节可以在这里找到。
结论:
这个帖子可能看起来主要是由 Pandera 主导的,因为它是我经常使用的软件包之一。写这个帖子纯粹是为了分享我踏上的航程。我确信人们可以从这些特定用例的包中获益更多。经常多走一英里可以达到非凡的效果。数据验证无疑是“额外努力”。开发数据验证策略可能会感觉到额外的工作,但是如果养成了创建自动化脚本的习惯,即使是处理一些小事情,也一定会受益匪浅。
如果您有任何意见和建议,请随时分享!
自动驾驶汽车将如何重新定义移动的概念
Bram Van Oost 在 Unsplash 上拍摄的照片
他们已经在我们中间,并将改变整个汽车行业。
自动驾驶汽车背后的技术会让你大吃一惊。这些车辆的特点是不必处理人的局限性,如疲劳和注意力不集中。
令许多人高兴的是,这些机器可以独自停车,它们不会像我们认识的许多人一样酒后驾驶或在驾驶时打电话。
众所周知,人为失误导致了 94%的交通事故,这项创新主要是为了拯救生命,持续降低死亡率。
根据美国国家公路交通安全管理局(NHTSA)2015 年的一项研究,交通事故是全球 15 至 29 岁年轻人最重要的死亡原因,超过了艾滋病、流感和登革热的受害者,根据世界卫生组织(世卫组织)。
还有,我们总是抱怨我们的时间很少。日子很忙,我们有几项义务要履行。我们平均每年有 40 天被堵在城市的交通中。
你有没有想过,如果我们不用担心驾驶,汽车在这段时间为我们工作,我们会赚多少钱?
据估计,自动驾驶汽车可以创造 7 万亿美元的市场!它被称为“乘客经济”,因为每个人都会不加注意地做一些其他的活动。
美容院、晚宴和健康诊所是可以在车内进行的服务。
车辆的自主性将改变整个汽车行业,从车辆工程和零部件行业到机械行业的交通组织方式。
颠覆性的浪潮:运输即服务。
我们中的一些人仍然记得数码摄影开始作为模拟摄影的一种选择出现的时候。柯达进行的研究证明是准确的,表明新技术将在 20 年内主导市场。尽管有时间做这件事,公司还是皱起了鼻子,没有进行现代化改造。目前,这个巨人已经萎缩,只作为一个专利实验室生存。
为了避免同样的错误,几乎所有的汽车制造商在失去未来市场后都在跑,计划交付能够自动化的车辆。
科技公司对完全自动驾驶汽车的开发已经刺激了主要品牌的新员工。
在“优步的自动驾驶汽车将如何在 2025 年摧毁 1000 万个工作岗位并重新定义经济”的文章中,Zack Kander 认为整个行业将在未来十年内被彻底改造。我们怎么能不同意呢?
当自动驾驶汽车技术已经得到很好的发展并且在街道上占大多数时,趋势是市场变化将开始巩固。整个运输行业的商业模式将会改变。汽车将不再是消费品,而是一种服务。
今天,在大部分时间里,例如一辆汽车,只被使用很短的时间,但维护它的成本并不那么低。根据 GlobalFleet 的一份报告,在整个欧洲,汽车费用每月高达 344€。
当不需要人类司机时,自动驾驶汽车将大大降低公司提供的运输成本。更便宜的服务可能会让拥有汽车的格言不再有吸引力。
我们可以认为,未来的车辆将是标准化的、电动的和自动驾驶的,并且将主要由车队公司拥有。这意味着当前的生产逻辑——每天生产数百万辆汽车——将很难在这种破坏中生存下来。
根据 Statista 的数据,预计 2020 年全球汽车行业将售出 5960 万辆汽车。至少在新冠肺炎之前是这样的。
由于冠状病毒疫情,预计该行业将在全球经济放缓的情况下出现下滑趋势。在疫情袭击之前,据估计,国际汽车销量有望在 2019 年达到 8000 万辆;反正全球汽车行业估计到 2024 年会达到 11425 万辆。
这场革命对于全球经济的重要性是显而易见的:车间、轮胎店、保险公司、经销店、专业人士(如司机、出租车司机、服务如车库、出租等。)会被严重打乱。当然,还有装配线本身。
随着更大的自主权而来的是更大的挑战。
自动驾驶汽车之间最显著的区别之一是它们的连接水平。他们将一直连接到互联网。正因为如此,我们今天通过手机或电脑做的许多事情将在旅途中使用交通工具本身来完成。
另一方面,自动驾驶汽车可能成为虚拟攻击的首选目标,旨在窃取数据或危害系统。因此,病毒和其他恶意程序的问题会更加频繁。我们准备好了吗?
自动驾驶汽车和新的客户体验。
随着该计划在大多数汽车制造商推出商用自动驾驶汽车服务方面的进展,设计师和产品所有者认识到,除了技术本身的发展,专注于客户体验对于未来的商业成功至关重要。
在推出像自动驾驶汽车服务这样复杂的技术时,没有简单的捷径。自从人们从马转向汽车以来,汽车工业面临着最具挑战性的事情。
AV 的采用在很大程度上取决于人们对技术的信任,足以进入汽车,然后喜欢上用户体验再回来。
在未来几年,自动驾驶汽车有巨大的潜力扩大几个城市的交通、商品和工作机会。做到这一点的最佳方式是创建运输服务,在旅程的每一步都提供以客户为中心的体验。
推出大规模运营的新移动服务的挑战将涉及根本的消费者行为变化:用车辆所有权交换车辆共享。
这种文化变革将要求运输公司基于智能技术和高利用率来管理其自主车队。另一个关键方面是创造可靠、高效的自动驾驶汽车服务,满足客户对汽车清洁、维护、恢复和耐用性的期望,以赢得他们的忠诚度。
还需要知道如何规划服务的扩展,在获得本地、全国和全球规模之前,确定在哪里以及如何推出服务以改善客户体验。
我们与汽车的日常关系即将改变。我们的用户体验可能会基于更高的效率和安全性,因为这些自主系统将取代人类和车辆之间的大部分交互。因此,随着更少的人为错误和更多积累的知识和经验,磨损、断裂和故障往往不那么经常发生,从而影响整个汽车行业。
杰克·亨特在 Unsplash 上的照片
自动驾驶汽车对汽车制造商的影响
自从 100 多年前汽车被发明以来,汽车制造商的商业模式几乎没有改变。
在过去的几年里,引擎已经变得更加强大和高效。设计变得更有吸引力,增加了新的安全和便利项目,但是,从本质上讲,汽车仍然与 20 世纪初销售的汽车非常相似。
现在,有了自动驾驶汽车,这种情况会改变吗?它将会有很大的变化!
比如,一般来说,一个工厂生产一辆汽车。正如我们今天所知,大多数汽车在大多数情况下都是通过经销商的中介传递给最终消费者的。然后,第二年,汽车制造商推出了更现代的模式,并恢复其销售周期。随着自动驾驶汽车的出现,这一过程将发生重大变化。
他们为汽车制造商赚钱的方式也是如此。
汽车产业也被称为产业中的产业,“不仅因为其规模和经济重要性,还因为其对商品、能源、信贷、技术等众多经济领域的冲击和影响。随着自动驾驶汽车技术的发展,这个行业在未来 10 年或 20 年将会发生很大的变化。
拥有一辆能自动驾驶并能在其生命周期内接收更新的汽车的想法颠覆了我们对汽车行业的所有认识。
由 Marvin Meyer 在 Unsplash 上拍摄的照片
关于自动驾驶汽车的维护
有了全自动驾驶,驾驶效率将会更高,减少每行驶一公里的维护需求。
急刹车、冲刺、不必要的加速、与坑洞和障碍物的碰撞会减少,事故也会减少。毕竟传感器和执行器比人更快更准。
然而,减震器、刹车片和刹车盘、轮胎、缓冲垫和制动器等零件的磨损以及过滤器和油液等物品的使用寿命几乎不会改变,它们只会达到最有效的阶段。
如果,或者我应该说,当自动驾驶汽车采用电动化时,电气和电子系统将取代燃料喷射,燃烧,冷却和气体排放的所有部分。
电动汽车需要不同的维护,因为它们不应对爆炸和高温。
但这是否意味着汽车服务和零部件供应商将终结?大概不会。
有人仍然需要制造所有这些部件,并让它们一起工作。自动驾驶汽车将永远需要大量的维护服务、替换的部件,技术和机械方面的改进仍在开发中。设计等活动也将继续推进。但这一切在自动驾驶和共享汽车的未来会像以前一样继续赚钱吗?
我们可以通过观察千禧一代来观察这个现象;他们中的许多人不再买车,尤其是在大城市。如果你住在像纽约这样的城市,当你有车的时候,你可能不想付钱去停车或处理其他问题。我住在波兰的弗罗茨瓦夫……猜猜看……我没有车……对于一个在运输行业的全球领导者中从事颠覆性技术工作的人来说,这很有趣。
当人们不再频繁购买汽车时,汽车制造商的商业模式(制造、销售、重新开始)可能会失去一些意义。然而,没有人比今天的汽车制造商更有资格引领未来汽车制造的变革。
马克西姆·阿涅利在 Unsplash 上的照片
随着自动驾驶汽车的到来,交通产业链会发生什么变化?
自动驾驶汽车的普及将彻底改变几乎所有领域的交通运输行业。
这里有一些可能会受到影响的活动:
备件市场
即使事故减少,驾驶效率提高,备件市场仍将持续增长。新的车辆将继续从工厂到达,增加现有的车队。
毫无疑问,将发生变化的是零件类型及其应用的复杂性,因为车辆型号的多样性趋于增加,除了其他技术项目外,还需要使用更复杂的工具,以便机械师能够进行维修。
此外,像相机、激光雷达和其他传感器这样的电气和电子产品在这个市场上将变得更加重要。
服务站
除了为装有内燃机的车辆提供服务(内燃机将持续运行很长一段时间),服务站还需要提供充电服务。他们还需要适应接收自动驾驶汽车,采用新的服务和支付形式。
因此,销售的服务和产品的多样性将增加,尽管加油站的小修理和大修需求减少,如更换机油或过滤器。
机械车间
如果他们想抓住扩大市场的机会,车间将改变以执行新技术要求的维护,使用适当的工具和训练有素的专业人员。
除了对传统车辆的维修,其他服务将变得更受欢迎,如嵌入式电子传感器和电子元件的审查。
车辆贸易
自动驾驶汽车有一种强烈的共享趋势,加速了将汽车转变为服务的过程,而不是像今天这样成为消费品。因此,车主数量将会减少,尤其是在大城市,集中在车队上。
在这种情况下,中小型汽车销售店将受到影响,因为收购将在更大的规模上进行,可能是在与经销商或汽车制造商的直接谈判中。
结论
通过这些简单的想象练习,我们可以看到整个行业都会被触动。一些关于汽车修理店的行动已经开始,这些行动可以促进向自主汽车主导的市场的过渡。其他一些需要时间,取决于市场对自动驾驶汽车的反应速度。自动驾驶汽车在最基本的自动化水平上已经成为现实。
汽车制造商和技术公司已经投入了大量资金来让他们的全自动驾驶汽车设计起步。因此,现在是跟踪这项技术的发展并为它给我们的社会带来的变化做好准备的最佳时机。
这篇文章对你有帮助吗?想了解更多自动驾驶技术?让我知道。
还有一件事…
如果你有兴趣阅读关于自动驾驶技术和机会的文章,下面的文章会让你感兴趣:
- 分析自动驾驶汽车治理生态系统:决策者指南
- 测量共享和电动自动驾驶汽车(SAEV)对城市机动性的影响 。
- 自动驾驶汽车:500 亿美元的颠覆机会
- 沃尔沃集团与极光宣布就自动驾驶交通达成合作 。
- 自动驾驶汽车将如何重新定义机动性的概念
- 这就是自动驾驶卡车将如何重塑运输行业。
- 18 家公司和初创公司在自动驾驶卡车的竞赛中领先
- 自动驾驶汽车来了!你准备好了吗?
- 2021 年中国将有 5000 辆自动驾驶卡车上路
此外,我刚刚在亚马逊上发布了一些令人兴奋的电子书,我相信其中一些你可能会感兴趣……请看:
- 人工智能、机器人技术和编码(给父母):模拟父母和数字孩子的实用指南
- 终结者悖论:神经科学如何帮助我们理解移情和对人工智能的恐惧
- 人工智能从 A 到 Z:揭秘 AI 的本质概念
- A . I . 2020 年:写关于人工智能的一年
参考
- 人为失误导致 94%的交通事故
- 自动驾驶汽车背后的技术
- 美国国家公路交通安全管理局(NHTSA)
- 优步的自动驾驶汽车将如何在 2025 年摧毁 1000 万个工作岗位并重新定义经济
- GlobalFleet(T1)
- Statista(T3)
B+树索引是如何在数据库中构建的?
照片由 niko photos 在 Unsplash 上拍摄
使用图表来说明如何在数据库管理系统中建立 B+树索引
如果您不是 DBA 或数据库开发人员,您可能不知道数据库索引的机制。但是只要你会写一些 SQL 查询,你一定听说过数据库索引,知道索引可以提高 SQL 查询的性能。
在我以前的一篇文章中,我介绍了 B+树索引,它仍然被大多数数据库管理系统(DBMS)使用。它可以提高大多数条件下的 SQL 查询性能。
引入没有任何公式和计算机科学理论的 B+树索引
towardsdatascience.com](/why-we-need-indexes-for-database-tables-25198145a8ca)
有一个图是我用来举例的,如下图所示。
你很好奇 b+树为什么是这个样子吗?具体来说,为什么顶级节点只有一个数字为 5 的节点?为什么叶节点 7 是单独的?在本文中,我将介绍如何从头开始构建 B+树索引。
将键插入 B+树
照片由古斯塔夫·古尔斯特兰德在 Unsplash 拍摄
让我们从一个空表开始,忽略它的其他列,只关注创建了 B+树索引的键列。
现在,假设我们开始使用这张桌子。因此,一系列条目将被插入到表中。因为键列上有一个 B+树索引,所以需要在逐个插入数据行时构建索引。
尽管通常键字段可能是按顺序插入的,当然,情况并不总是这样。为了演示一般情况下的机制,让我们假设密钥是随机插入的。例如,顺序如下:
5, 7, 8, 1, 4, 6, 2, 3, 9
需要强调的是,建立 B+树指数的方法并不只有一种。因此,我们需要在我们的例子中有一些假设。不用担心,所有 b+树索引的机制都是一样的。
假设 1:硬盘驱动器的每个块可以存储两个密钥
当然,在实践中,这个数字小得不可能。但这会让我们的例子更容易理解。
好的。现在,我们可以将前两个数字插入到索引中。
因为假设 1,当我们插入两个值时,我们不需要担心任何事情。这些值必须排序,所以 5 在左边,而 7 在右边。请注意,该节点是一个叶节点,因为此时我们不需要任何非叶节点,因为一个叶节点中只能存储两个值。
当我们插入一个新数字“8”时,我们首先假设我们需要将它插入到现有的叶节点中。然而,它将以一个具有三个值“5,7,8”的节点结束。基于假设 1,我们需要拆分节点,因为该块只能存储两个值。
假设 2:当一个节点被拆分时,左边节点的右值去更高一级
我们需要作出假设 2 来定义每当一个节点被分割时哪个值去更高的级别。请注意,也可能有这样的假设,如右节点的左值上升,我们只需要定义它并遵循它。
因此,不能存储在该块中的最后一个值“8”被分裂,成为新的叶节点。之后,左边的节点是“5”和“7”,最右边的值是“7”,所以会上一级。
现在,我们有了一个非叶节点。这个新节点需要用左右两个指针来创建。左指针指向值较小的节点,而右指针指向值较大的节点。
接下来,当我们插入数字“1”时,叶节点“5,7”变成了“1,5,7”,这导致了另一次分裂。最后一个值“7”将被分离出来,成为一个新的叶节点。请注意,编号“7”不会被合并到另一个编号为“8”的节点中,这是因为 B+Tree 不具备这一功能,同时这会造成额外的索引构建开销。没有必要。
之后基于假设 2,左边节点最右边的值是数字“5”。它达到了更高的水平。已经有一个数字为“7”的节点,所以简单地在“7”的左边插入数字 5。别忘了让指针指向的节点小于或等于“5”。
下一个值是“4”。又造成了分裂,于是数字 4 基于假设 2 上了一层楼。但是,第一级非叶节点“5,7”已经得到了两个值。基于假设 1,需要拆分。
毫无疑问,基于假设 1,数字“5”应该上升到第二级非叶节点。但是,要知道数字 5 将不再存在于一级非叶节点中,这一点非常重要。这是 B+树的机制之一,在非叶子节点中不应该有任何重复的值。
插入数字“6”相对容易。因为叶节点“5”还有一个空格,所以数字“6”会被插入到这个节点中,没有任何其他效果。
当插入数字“2”时,需要拆分叶节点“1,2,4”。基于假设 2,数字“2”需要被提升。由于非叶节点“4”仍然有空间,所以数字“2”在那里结束,没有进一步的影响。
最后两个数字“3”和“9”可以在叶节点上找到它们的位置。因此,不再需要分割。
所以,所有的 9 个数字都以这种随机顺序插入到 B+树索引中。
摘要
特雷·吉普森在 Unsplash 上的照片
在本文中,我使用了图表来说明如何从头开始构建 B+树。事实证明,在 B+树索引的实现之间,假设可能是不同的。然而,机制是相同的。
作为最经典的索引类型,B+树已经使用了几十年,并且仍然被大多数数据库管理系统使用。尽管它可能不再是最先进的索引,但我相信它仍然是标志性的,DBA、数据分析师和软件开发人员都应该知道。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入灵媒会员来支持我和成千上万的其他作家!(点击上面的链接)
面部识别软件让黑人被捕有多糟糕
美国司法压迫黑人和棕色人种的另一种方式
黑人被面部识别软件错配的频率更高。弗兰基·科尔多瓦在 Unsplash 上的照片
遍布美国的骚乱再次提醒我们,以白人为主的群体对有色人种的公然压迫。但是,当警察谋杀案现在成为焦点时,我们不应该忘记司法系统用来毁灭黑人生活的更微妙的工具。
首先,有许多黑人和棕色人种在被捕后死去。虽然联邦官员未能收集数据,但独立资源显示,差距是真实的。
还有一个事实是,有色人种在审判时会受到更严厉的判决。显而易见,这是白人刑事法官种族偏见的结果。
最重要的是,事实上黑人和棕色人种更容易被逮捕。虽然黑人占平均人口的 13%,但截至 2017 年,他们占美国监狱的 33%。占人口 72%的白人只占监狱的 30%。从统计数字来看,黑人被监禁的可能性是白人的六倍。
因此,很明显,由于种族偏见,黑人和棕色人种受到警察和司法系统的压迫。不太明显的是,以白人为主的软件开发人员助长了这种犯罪。
算法与深色皮肤的人不匹配的几率要高 10 倍
国家标准和技术研究所(NIST)最近的一项研究证实了研究人员一直说的话:面部识别对你很有帮助,只要你是一个白人男性——其他人就失去了。
一种对法院很重要的方法是一对一匹配。这意味着你要查询两张不同的照片是否描绘了同一个人,例如,这可能有助于识别你在视频中捕捉到的嫌疑人。这项研究发现,根据算法的不同,黑人或亚裔美国人的误报率是白人美国人的 10 至 100 倍。换句话说,如果一个算法呈现了来自两个不同肤色的人的两幅图像,它们在计算机看来几乎是一样的。
在美国开发的算法中,假阳性的数量大致相同,不考虑非高加索人种。除了非洲裔和亚裔美国人之外,这项研究还包括美洲原住民、美洲印第安人、阿拉斯加印第安人和太平洋岛民。
一些研究人员,其中包括来自 T4 NIST 的 Patrick Grother,提到白种人的面孔可能比非洲人或亚洲人的面孔更加多样化。但这并不成立:NIST 的研究还发现,在亚洲开发的算法能够像识别高加索人一样准确地识别亚洲人。根本原因似乎更多地在于算法本身,或者它从中学习的图像数据集。
我们不要让这些人受到不实指控。照片由粘土堤在 Unsplash 上拍摄
面部识别责任的缺失不仅仅是 NIST 哀叹的问题。例如,麻省理工学院的研究人员 Joy Buolamwini 和斯坦福大学的 Timnit Gebru 在种族和性别方面发现了类似的差异。值得一提的是,两位科学家本身都是黑人女性——她们是从事人工智能工作的极少数人中的两位。
如果面部识别是白人为白人制造的玩具,所有这些差异都不会那么糟糕。问题是,这些算法被用于在它们的开发和实施中没有发言权的种族群体。例如,他们更有可能被错误地监禁,因为机器由于他们的肤色而犯了错误。正如 Buolamwini 所说的那样,“技术应该更适合使用它的人和被它使用的人。”
谷歌可能对获取黑色和棕色数据集持怀疑态度
是什么造成了这些差异?也许是算法的问题——没有这方面的定量数据。但是大多数研究人员认为应该归咎于算法用来学习什么是脸的数据。显然,获得大量白人的图像要比获得黑人和棕色人种的图像容易得多。
这似乎是真的。白人更有可能有足够的现金购买技术设备,用来给自己和家人拍照,并上传到网上。例如,如果你在谷歌上搜索“奶奶”,你需要向下滚动一点才能看到一个皮肤更黑的女人。
白人开发者更有可能选择其中一个以白人为主的数据集,而不会考虑他们已经忘记了什么。即使该算法本身也适用于黑人和棕色人种的图像。
例如,在 2009 年,一个惠普网络摄像头被认为能够跟踪面孔对黑人不起作用。2015 年,谷歌将一名黑人误标为“大猩猩”。到目前为止,只有苹果公司的 FaceID 及其三维红外扫描仪似乎对所有种族都有效。问题是,人们在日常生活和执法中很少在三维和不可见的红外光下拍摄照片和视频。
因此,尽可能多地获取黑人和棕色人种的照片是非常有意义的,这样开发人员就可以将他们包含在现有的数据集中。唯一的问题是,得到这些照片会导致更多的问题。
我们不能让大型科技公司出售有区别的产品。摄粘土堤上的 Unsplash
为了让他们的面部扫描在 Pixel 上工作,谷歌分包给的工作人员,让他们扫描街上的黑人和棕色人种,以换取一张 5 美元的礼品卡。令人担忧的是,多名前承包商后来站出来说,他们被建议使用不道德的策略。
一名前承包商告诉《纽约每日新闻》,“他们说要瞄准无家可归的人,因为他们最不可能对媒体说任何事情”。
“我觉得他们想让我们掠夺弱者,”另一名承包商说。
甚至有报道称,承包商被建议在没有阅读同意书的情况下催促人们签署同意书,并将面部扫描伪装成“自拍游戏”或“调查”。
这显然引起了人们对黑人和棕色人种在公共场合的隐私的更多关注。创造包容性产品不能以滥用最弱势群体的隐私和信任为代价。
八年的监禁,也许毫无意义
尽管有这些担忧,面部识别技术已经在美国警察和司法部门广泛使用。当其他不利于嫌疑人的证据不足时,这可能导致监禁。
这发生在 T2 威利·艾伦·林奇的案件中。早在 2015 年,佛罗里达州的卧底特工让一名男子向他们出售价值 50 美元的快克可卡因。但是他们不想马上暴露身份。因此,一名警察没有当场逮捕他,而是把电话放在耳边,假装在打电话,拍了几张该男子的照片。
回到警长办公室,侦探们无法辨认照片上的男子。于是他们转而求助于人脸分析对比考试系统(FACES)。当出现一张照片时,这个软件会从警方的数据库中返回可能的嫌疑人。照片显示威利·林奇和其他嫌疑人一起被捕了。
一个令人不安的方面是,特工没有在林奇的逮捕报告中提到面孔,而是声称他们已经通过人工搜索确定了他的身份。另一个方面是软件返回了多个嫌疑人,都用一个星级系统评分。
正如 Slate 报道的那样,运行该软件的分析师认为,根据面孔,林奇被评为一星,而其他所有人一星也没有。然而,她承认她不知道最大可能的恒星数量是多少。
对于今天的面部识别技术来说,有色人种看起来都差不多。弗兰基·科尔多瓦在 Unsplash 上的照片
有趣的是,法院和警方都没有考虑到照片上的男子可能不在警方的嫌疑人数据库中。林奇是黑人的事实更强调了这一点。除了那一张快照,他们所有的就是价值 50 美元的快克可卡因——但显然这足以让这个人被关八年。
美国公民自由联盟(ACLU)在 2019 年 3 月提交了一份法庭之友简报,将该问题提交给佛罗里达州最高法院。但是由于这种过程需要时间,所以可能要到林奇八年刑期结束时才会有结果。没人能把这些年还给林奇。
最后一句话:我们也需要反对种族主义技术
随着反对种族主义的骚乱在世界范围内继续,大规模的逮捕浪潮也在继续。我们需要确保有缺陷的面部识别软件不会导致更多的错误指控。
只要这种技术不平等,它就不适合警察使用。而且技术还不成熟。这是事实。两年前,IBM 发布了一个“面孔多样性”数据集,以消除面部识别中的差异。现在,他们已经宣布不再提供、开发或研究这种技术。似乎流行的偏见如此强烈,以至于 IBM 都无法消除它们。
显然,这并不意味着谷歌、亚马逊和微软等其他公司不会继续推进这一领域。但即使是他们也开始怀疑面部识别软件到底有多道德和有利可图。
由于欧盟正在考虑对这项技术实施为期五年的禁令,亚马逊和微软反对禁令的声音比谷歌大得多。事实上,谷歌拒绝向任何人出售面部识别软件。看起来他们试图获得黑人和棕色面孔的方式的丑闻对他们来说已经足够了。微软也紧随其后,T2 宣布不会向警方出售其软件。
甚至大公司也意识到和黑人和棕色人种乱搞不再酷了。随着越来越多的人走上街头反对种族主义,反对面部识别的声音也越来越大。
无论我们的肤色如何,我们的工作就是倾听这些声音并让他们被听到。下次你看到闭路电视摄像头时,想想这个问题。
来自算法正义联盟的紧急信件,作者 Joy Buolamwini
onezero.medium.com](https://onezero.medium.com/we-must-fight-face-surveillance-to-protect-black-lives-5ffcd0b4c28a)
在首次拟合算法下,碎片有多糟糕?
模拟破碎的基本原理。
有时我阅读操作系统,因为我想知道我的电脑是如何工作的。我已经将 Linux 发行版作为我的主要操作系统运行了大约 10 年,因此熟悉这些概念允许我极大地定制和优化我的系统。
普通大众可能感兴趣的一个话题是:
什么是碎片整理,为什么我有时要整理我的电脑碎片?
虽然,可能没有一个 1990 年以后出生的人听说过碎片整理,因为计算机内存容量的大规模增长。
我要描述的不是在任何现代操作系统上内存管理实际上是如何完成的,但是它会给人一种为什么会发生碎片的感觉(甚至这是什么)。
当我试图理解一个概念时,我经常发现写自己的模拟是有益的。我将给出我用来运行一个非常简单的首次拟合算法模拟的代码,这样我们就可以看到它会变得有多糟糕。
首次拟合算法
首适算法正是它听起来的样子。你把记忆想象成填满的酒吧。每个程序都有一个大小,你寻找第一个足够大的洞来放它。这是我做的一张图片来说明:
由作者在 Google Draw 中制作
这是什么意思?
你下载蓝色程序,它进入第一个(最左边)区域,没问题。你下载红色的,第一个可用的洞就在蓝色的旁边。绿色也一样。
然后你意识到你不想要红色了,所以你删除了它。这就留下了一个漏洞。当你下载紫色程序时,你的内存管理注意到了这个漏洞,并试图在那里安装它。哇哦。这个洞太小了,所以它继续寻找第一个适合它的洞(因此得名“首次适合算法”)。
最终,你可能会删除绿色,一些东西可能会进入红色和绿色留下的大洞,但它可能不会填满整个东西。
一旦这些洞开始出现,就很难去掉。这叫做 外部碎裂 。我写了一个模拟来看看情况会变得多糟。虽然这个程序只做了我刚才展示的简单的事情,但是它有点长而且令人困惑,所以让我们一步一步来。
我上了两节课。第一个允许我假装在下载一个程序。每个程序都有一个从 1 到 10 的随机大小,它在内存中的位置,以及直到我删除它的时间(一个从 1 到 20 的随机数)。
这个类只是记忆的棒。在我们的模拟中,它的总大小为 100,并且它有一个当前在内存中的程序列表(程序跟踪它们的位置)。
我做了一个功能,把一个程序加到记忆棒里。这只是寻找适合它的第一个可用的孔。不幸的是,我最终没有看到一个光滑统一的方法来做到这一点,并通过案例拼凑了一些东西。我分别检查第一个程序前的孔和最后一个程序后的孔。
我创建了一个 sort 方法,因为当我向列表中添加一个新程序时,尽管它的位置可能在中间,但它却卡在了列表的末尾。这只是按位置对它们进行排序。最后,我有一个程序,如果时间足够长,它就会被删除。
最后,我只是模拟了 100 个时间步。在每一个时间点上,我都尝试使用一个随机生成的程序。然后,我让所有的删除时间参数减少。我检查是否有 0 并删除它们。我将列表排序,然后重复。
以下是一些最终结果:
这个程序使用了 66%的内存,因此外部碎片导致了大约 34%的浪费。
这个在 69%的使用率上稍微好一点。
这种情况要糟糕得多,使用率为 43%,因此浪费了 57%。完整的代码可以在 GitHub 这里找到。
用不同大小的内存和不同长度的时间删除东西来感受它是如何改变事情的,这很有趣。如果您尝试使用的空间量足够小于您的总内存,碎片显然不会是一个大问题。
另一方面,正如这些模拟所显示的,题目的答案是它可能非常糟糕。这些模拟实际上是准确的(如果我的旧操作系统概念第七版教科书是正确的),因为你可以从数学上证明你用这个算法浪费的预期空间大约是 33%(我运行的模拟比我展示给你的多得多,这是我通常看到的)。
不过,没有必要害怕。旧的操作系统确实在这方面使用了一些变体,但所有现代操作系统都使用一种叫做 分页 的东西,这种东西完全避免了外部碎片(有一种东西叫做内部碎片,我没有谈到)。
只是为了好玩,我决定向你“证明”只有当你使用足够大比例的内存时,这个算法才是糟糕的(也就是说,在现代计算机上可能永远不会!).这是一个模拟结果,你的程序太小了,浪费的空间根本不重要:
冠状病毒爆发会有多糟糕?—预测疫情数字
数据分析师的观点—您应该知道的 4 件重要事情
编者按:【towardsdatascience.com】是一家以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
“每一个在中国和其他地方受苦的人,愿上帝加强受害者和他们的家庭,引导他们度过这段艰难的时光。请遵循世卫组织网站中概述的建议,保持安全并受到保护 "
我们今天站在哪里?
疫情继续蔓延——截至 2 月 1 日,世卫组织已确认约 12000 例病例,仅周六就确认了 2000 例以上(约占报告病例总数的 18%)。共有 28 个国家的 48 个省受到影响。然而,这些病例中只有 2%多一点是在中国以外发现的。虽然这个数字可能看起来很小,但处于疫情中心的武汉是中国主要的交通枢纽。由于农历新年,城市间的旅行增加,这在一定程度上助长了疫情。去年 10 月至 11 月期间,有近 200 万人离开武汉,大约 12 万人飞往国外。因此,冠状病毒的爆发仍然是全球关注的主要问题。
受影响的国家/地区—截至 2020 年 1 月 31 日的报告(鸣谢—由作者使用 Excel 3D 地图绘制)
这种病毒的传染性如何?
任何疫情传播的速度和难易程度决定了其规模。伦敦帝国理工学院发布的报告表明,一个人患冠状病毒会影响 1.5 到 3.5 个健康人。据《纽约时报》报道, 如果 5 名新型冠状病毒携带者可以影响 2.6 名其他人,那么 1 个周期后可能有 5 人患病,2 个周期后有 18 人患病,3 个周期后有 52 人患病,以此类推。
一种冠状病毒如何在 5 个周期内从 5 人传播到 368 人(鸣谢:纽约时报)
中国的疫情有多严重?
数据 vs 世界卫生组织辩论!
我曾致力于创建一个 QlikSense base 仪表盘来监控当前的情况并跟踪疫情。你可以在下面找到更多关于它的信息。
[## 新型冠状病毒(2019-nCoV)——世卫组织新型交互式、基于网络的冠状病毒在线培训…
世卫组织的在线训练是目前对抗冠状病毒爆发的最佳武器;涵盖检测方法…
medium.com](https://medium.com/@angeleastbengal/novel-coronavirus-2019-ncov-whos-new-interactive-web-based-online-training-for-coronavirus-d0865f0b47af) [## 冠状病毒爆发会有多糟糕?—疾病爆发—假设分析
数据分析师对当前形势的看法
medium.com](https://medium.com/@angeleastbengal/how-bad-will-the-coronavirus-outbreak-get-the-outbreak-hypothesis-analysis-940197ed7815) [## 新冠肺炎对国际学生的影响
不可预见的挑战及其对国际学生招生的影响
medium.com](https://medium.com/@angeleastbengal/the-impact-of-covid-19-on-international-students-88f96cb8dcf9)
截至周六,世卫组织已在中国确认了 11821 例病例。然而,由约翰霍普金斯大学(T2)整理的数据显示这个数字要高得多。某些病例存在假阳性的可能性,即某人被错误地怀疑携带病毒,但在检测时被排除。中国报告病例数的平均增长率仍高达 16.3%(高于 2003 年的 SARS 病例数)。
中国受影响的州/省(由作者使用 Excel 3D 地图绘制)
展望未来——到下周末,确诊病例将超过 38,000 例!
鉴于我们没有足够的数据点,很难使用时间序列模型来预测疫情。让我们来看看一段时间以来确诊病例的增长率。在研究与时间相关的变量时,需要考虑三个关键参数。
- 趋势 —变量的大小是否随时间线性增加?例如,确诊病例的增长是否会随着时间的推移而增加?
- 水平 —变量在一段时间内的平均值是多少?例如,过去 6 天的平均增长率是多少?
- 季节性 —我们是否在特定的区间内看到了相似的数值模式?—我们是否在特定日期观察到类似的趋势,即每周一确诊病例/增长数字较高?
数据来源:世卫组织形势报告
假设和见解
- 假设——疫情将继续增长,因为确诊病例的初始数量很低,我们只能在增长率稳定下来后再看数字。否则数字可能会失真
- 确诊病例增长数字缺乏季节性。可行,因为数据点较少;然而,由于确诊病例数量增加,增长率开始下降
- 可以使用 前一天的值、α和前一增长率** 的组合来预测接下来 7 天的结果;其中α是增长率随时间变化的平均值
预测
利用前一天的确诊病例总数和最近增长率的α值(-2.9%),我预测了下周的疫情爆发。使用世卫组织形势报告 12 & 报告 13 对预测进行了验证,观察到 1%的 MAPE。看一下图表就知道,我最终高估了这些数字。
预报
预测。数据来源——世卫组织局势报告
ARIMA(自回归综合移动平均线)能给出更好的结果吗?
时间序列是在固定时间间隔内记录指标的序列。根据频率的不同,时间序列可以是每年、每月、每周甚至每天。由于确诊病例数是一个随时间变化的变量,像单指数或双指数平滑法或 ARIMA 可以产生更好的预测。然而,由于数据点较少,我没有尝试。任何时间序列模型都需要足够的数据点来理解当前值和先前值之间的相互作用。然而,我使用偏自相关(PACF)图来验证我的假设是否正确。
我将在我的下一篇文章中写更多,但是,如果你想了解更多,请访问这个网站。利用 PACF,我得出了以下结论:
- 在排除中间滞后的贡献后,PACF 可以被想象为序列和它的滞后之间的相关性。由于 PACF 仅高于滞后 1、、的显著值,这表明在今天和前一天的总确诊病例之间存在纯粹的相关性、、,而不是任何其他情况(因此我可以使用当前值来预测下一个)、****
关于作者:高级分析专家和管理顾问,通过商业、技术和组织数据数学的结合,帮助公司找到各种问题的解决方案。一个数据科学爱好者,在这里分享、学习、贡献;你可以跟我在 上联系;
贝叶斯定理如何应用于测试一种疾病(如冠状病毒)?
它解释了为什么各国进行筛查和检测的速度很慢。
许多人在高中或大学都学过一定程度的统计学。然而,人们并不知道统计学在日常生活中的实际应用。今天我要介绍统计学中一个应用于现实生活的著名概率定理,贝叶斯定理。
贝叶斯定理背后的概念并不难。它根据与事件相关的已知条件来计算事件的概率。这个定理描述了一个观察到的事件如何影响另一个事件的概率。
太抽象?太难了?下面我给你举个例子。
截至 4 月 8 日,全球约有 140 万冠状病毒患者[1],全球约有 77 亿人[2]。所以感染率在 0.019%左右。假设一家制药公司开发了一种测试试剂盒,用来测试一个人是否感染了冠状病毒。由于开发非常仓促,这个测试套件的准确性并不完美。正常人有 2%的几率呈阳性,感染者有 1%的几率呈阴性。问题是,如果你做了测试,结果呈阳性,你被感染的可能性有多大?
在 Unsplash 上拍摄的 ThisisEngineering RAEng
贝叶斯定理的公式如下
在这个公式中,B 是我们想知道发生概率的事件,A 是观察到的事件。P(B|A)表示给定 A 发生的概率 B,P(A)和 P(B)分别是 A 和 B 发生的概率。最后,P(A|B)表示给定 B 发生的概率,P(B)也称为先验概率,因为它没有考虑来自 A 的任何信息,P(B|A)也称为后验概率。
在上面的例子中,A 代表从检测试剂盒中得到阳性结果,B 代表被冠状病毒感染。
所以容易 P(B),又名被感染的概率,是 0.019%。P(A|B)表示假定人被感染,测试试剂盒显示阳性结果。如前所述,感染者有 1%的几率呈阴性。因此,有 99%的机会在感染者身上显示阳性。因此 P(A|B) = 99%。唯一缺失的谜题是 P(A),也就是显示阳性结果的概率。
有两种显示积极结果的情况。第一种是人被感染了试剂盒显示阳性,第二种是人没被感染但试剂盒还是显示阳性。既然我们知道感染率是 0.19%。因此,一个人没有被感染的概率是 1–0.019% = 99.981%。在正常人身上有 2%的几率呈阳性。利用简单的概率规则,我们可以计算出 P(A)= 99.81% * 2%+0.19% * 99% = 2.01843%。
将所有数字代入贝叶斯定理后,P(B|A) = 0.93%。这意味着这个人只有不到 1%的实际感染。
这一刻,你可能会很惊讶,结果很小。而这在现实生活中肯定是不能接受的。因此,需要进行多次尝试来验证结果。在这种情况下,P(B)将变为 0.93%,因为被感染的概率由第一次尝试的结果更新。在不改变其他变量的情况下,P(B|A)将大幅提高至 31.77%。在第三次尝试中,结果达到 95.8%,几乎可以肯定这个人被感染了。
这个简单的例子揭示了检测疾病以获得更高准确性的耗时过程。因此,尽管许多国家已经提供了额外资源来增加实验室技术人员的数量和提高效率,但只有少数国家能够对其公民进行大规模筛查。因此,呆在家里。这不仅减少了你被感染的机会,也减轻了诊断的负担。
统计学可能对每个人来说都太复杂了。然而,它在我们的日常生活中被广泛使用。希望这篇文章能帮助你更多的了解贝叶斯定理。希望你喜欢,下次再见。
引用
[1]:冠状病毒最新:一瞥,卫报,2020 年 4 月 8 日,https://www . The Guardian . com/world/2020/apr/08/Coronavirus-latest-at-a-glance-death-toll-83000
[2]:世界人口钟,worldometers.info,2020 年 4 月 8 日,【https://www.worldometers.info/world-population/
我的其他文章
贝叶斯定理如何帮助赢得第二次世界大战
1943 年,吉尔伯特和马绍尔群岛战役期间,美国海军 SBD-5 侦察机在华盛顿号和列克星敦号上巡逻
第一部分:介绍贝叶斯统计和它如何破解日本海军密码 JN 25
在第二次世界大战期间,美国和英国的密码分析师都疯狂地试图破译轴心国军事部门发送的加密通信。在这些努力中,位于布莱奇利公园的英国密码破译中心可能因其作为英国炸弹的诞生地而闻名,该机器将在 1939 年至战争结束期间解码臭名昭著的德国密码 Enigma。虽然 Bombe 和它的后继模型已经得到了大多数公众的关注,但是如果没有统计方法的支持,他们的努力通常是徒劳的。本文的目标是阐明其中一种方法,即贝叶斯推理,首先介绍它背后的理论,然后概述它是如何被用来破解轴密码的。
托比·奥克斯博洛拍摄的布莱奇利公园的 1 号小屋。来源:Flickr。这个文件是在知识共享归属-共享 2.0 通用许可下许可的
第一部分将致力于破解日本海军密码 JN 25,而第二部分将概述贝叶斯推理在破解英格玛密码中的作用。这份报告的大部分内容基于爱德华·辛普森写的一篇文章,他是在布莱奇利公园工作的密码破译员之一。我试图通过回顾贝叶斯形式主义和进行仅在辛普森的文章中隐含的大部分数学运算,使这个主题更容易理解。如果在这篇文章的最后,你发现自己对这个话题很感兴趣,我鼓励你阅读辛普森的原始文章,这是一篇关于他在布莱奇利公园的迷人的第一手报道。
定理
像许多其他著名的理论一样,贝叶斯定理出奇的简单:
公式本身很容易推导出来,并且在贝叶斯统计之外有许多应用。然而,它的简单性可能具有欺骗性,因为该定理的大部分力量在于对所涉及的概率 P 的解释。几个世纪以来,贝叶斯定理的真正争议在于它的使用挑战了更传统的频率主义方法。而所谓的频率主义者将事件的概率定义为“在许多试验中其相对频率的极限”[1]。贝叶斯主义者将概率解释为个人信仰的一种度量。
有人可能会问,他们怎么敢在数学理论中加入像信仰这样主观的东西。说出这种批评,人们肯定会有好的同伴。许多统计学的重量级人物,包括费希尔和皮尔逊,已经放弃了基于类似论点的概率的贝叶斯解释[4]。
为了真正理解这两种方法之间的差异并能够做出公正的判断,让我们考虑下面的例子:
想象一下,一个朋友向你挑战掷硬币游戏,并迅速拿出一枚她想用的硬币。在同意这个游戏之前,生性多疑的你想确定她递给你的硬币是公平的,也就是说,硬币正面和反面落地的机会是相等的。
频繁主义方法
一个频繁主义者会把这个问题框架为一个假设检验,用零假设 H₀:的硬币是公平的,用替代假设 H₁的硬币是不公平的。然后,她将决定一系列试验(比如说𝑛=100)和一个置信水平(比如𝛼=0.05).抛硬币后𝑛时报,结果被记录下来。如果我们让𝑘表示我们观察正面的次数,让𝑝表示硬币正面落地的概率,那么按照二项式分布,特定结果的概率如下
给定置信水平𝛼,她就可以计算拒绝区域,即可以安全拒绝零假设 H₀:𝑝=0.5 的𝑘区间。这个区域可以通过求解
为了𝑘.令人欣慰的是,人们在过去已经处理过这类问题,所以她可以简单地在表中查找它的解,或者使用任何统计软件来给她答案,而不是自己实际求解方程。原来,对于这个问题,𝑘=10,所以 H₀可以拒绝如果|𝑘−50|>10,或者等价地如果𝑘 <40 or 𝑘> 60。
让我们假设在 100 次掷硬币中,(𝑘=)有 73 次是正面朝上。常客现在可以得出结论,硬币被操纵了,她的结论是错误的可能性小于 5%(置信水平)。
贝叶斯方法
作为贝叶斯统计的坚定支持者,你出现了。你对“浪费时间”感到震惊,并认为所有这些本来可以通过更少的试验来完成。为了理解如何继续,让我们先回顾一下贝叶斯定理:
注意,我们用更有意义的符号𝜃和𝐷.代替了变量 a 和 b𝜃表示模型的参数,在我们的情况下,这只是正面𝑝的概率,这是所用硬币固有的特征,也是我们试图推断的未知值。𝐷代表观察数据,即硬币正面和反面落地的次数。
- 𝑃(𝜃|𝐷)是𝜃的概率给定证据或数据𝐷.换句话说,硬币正面着地一定次数后,𝑝具有特定值的概率。这叫做后路。
- 𝑃(𝐷|𝜃)回答了以下问题:观察到𝐷给𝜃的数据的可能性有多大?这也是频率主义者计算的东西,它被称为可能性。
- 𝑃(𝜃)是统计学家在观察任何数据之前对𝜃的不同值有多大可能的信念。它通常被称为型号之前的
- 𝑃(𝐷)通常被称为边际,描述了观察数据的概率,与模型参数无关。它确保后验分布是归一化的,但我们经常可以找到避免直接计算的方法。
我们需要做的第一件事是决定一个模型来描述抛硬币实验。和以前一样,二项分布是我们选择的函数:
数据 d 包括𝑛的投掷次数和𝑘.的头数定义了可能性之后,我们现在必须在之前选择一个。记住,先验描述了统计学家在看到任何数据之前对参数𝜃的信念。因此,如果我们在和一个值得信赖的朋友打交道,作为贝叶斯人,我们可以选择一个在𝜃=0.5(一枚公平硬币的价值)附近有一个尖峰的先验,如橙色曲线所示。如果我们的朋友过去试图捉弄我们,我们可能更倾向于选择蓝色曲线作为先验。它的范围更广,因此对𝜃.的任何特殊价值都不太相信
你们可能已经注意到了,我们没有写下任何先验方程。不幸的是,贝叶斯推理中涉及的数学可能相当棘手。通常积分无法解析计算,人们不得不求助于数值工具,如蒙特卡罗抽样。出于这个原因,我们将依靠图表来发展对贝叶斯统计的直观理解。
假设在 6 次投掷中,硬币有 4 次正面朝上。使用“低信任”先验,后验分布𝑃(𝜃|𝐷)将看起来像这样:
如你所见,分布已经转移到更大的𝜃值,因为正面出现的次数是反面的两倍。我们可以将似然项解释为作用于先验分布的过滤器,只允许与数据𝐷.或多或少一致的𝜃值通过
分布仍然相当广泛,所以我们得出结论,要做出任何可靠的推断,我们需要更多的样本。经过 20 次投掷,观察头部 15 次后,后部看起来像这样:
我们可以非常肯定地得出结论,这枚硬币被操纵了,而且我们已经能够比频繁者少扔 80 枚硬币来做到这一点。谈资源的高效利用!
现在你应该同意和我们的朋友一起玩了吧?看情况。如果她让你选正面或反面,就赌正面!然而,如果她坚持为自己挑选头像,也许是时候你找一个新朋友了…
人们实际上可以计算出这个游戏有利版本的预期收益:如果我们在正面下注 1 美元,我们的预期收益是
由于我们不知道𝜃的确切值,我们需要对其概率分布进行积分:
对于最后一个表达式,我们实际上不需要计算任何积分。为了获得后验分布下𝜃的期望值(平均值)的粗略近似值,查看所述分布以找到⟨𝜃⟩≈0.7 就足够了(精确值约为 0.708)。因此
每次抛硬币的预期投资回报率约为 40%,我会说“去吧”;但是在你把所有的钱都押上之前,确保你知道赌徒的毁灭。
美国海军亚利桑那号(BB-39)在日本偷袭珍珠港后燃烧,公共领域
日本海军密码机 JN 25
日本视角
二战期间,日本海军对信息进行编码的方式相当简单。发送者将使用一个代码簿(I) 把他的信息的每个字转换成一个五位数。作为一种安全措施,这五个数字的总和总是能被 3 整除。在给日本人一种方法来确保他们的信息被正确无误地传输的同时,这种方法将极大地帮助盟军解码截获的信息;但稍后会详细介绍。
对明文进行编码后,发送者将查询所谓的添加剂(II) 的加密表。这些五位数将被添加(非进位)到代码中,以产生最终的加密信息(III) 。接收者可以访问相同的代码簿和添加剂,并且可以通过颠倒上述过程来简单地解码消息。
联盟视角
面对一组截获的信息,联合密码分析师的任务是找出正确的添加剂。与此同时,所谓的书籍制作者试图通过结合语言和组合技巧来复制日本法典。
由于密码分析师只能获得有限数量的证据,即给定数量的拦截消息,他们所能希望的最好情况是对消息中最有可能的添加剂做出概率陈述。因此,(贝叶斯)统计特别适合解决这个问题。
解密过程将从一组已知具有相同添加剂的截取消息(IV) 开始。这些信息被认为是“深入的”,人们会说是信息的“深度”。
将五位数的密码相互比较,并记录结果(总是选择低于 5555 的数字)。这一过程背后的逻辑是,通过计算编码信息之间的差异,潜在的添加剂将会相互抵消。
盟军已经知道了日本的部分密码,许多密码组也是已知的。这些被称为“好组”,并与它们的(非携带)差异 (V) 一起被列表。如果已知 50 组,则必须计算并记录 1225 个差异。
密码分析人员会比较从截获的信息和来自好的群体的信息中计算出来的差异。如果找到一个匹配项(在我们的例子中是 22571,用红色显示),就会计算一个假设的附加项(用绿色显示)。
最后也是最重要的任务是测试这个假设的添加剂的有效性。作为第一步,在每个消息 (VI) 中,从其相应的编码字中减去添加剂。如果产生的代码(显示为蓝色)违反了“可被 3 整除”的规则,这个附加项可以很快被丢弃,为盟军节省了大量时间。通常,多种潜在添加剂将通过该测试,因此使用统计分析来确定它们的相对强度。
作为真实添加剂的证据,密码分析员将在上述测试中使用任何其他良好组的存在。数学结果是这样的:
让我们用𝐴来表示加法成立的事件,用𝐴来表示加法不成立的事件。我们想要确定在添加剂被加入𝑃(𝐴|𝐷).后给定好组的数据的后验概率
如果我们只对比值比(真与假)感兴趣,分母中的边际𝑃(𝐷就会抵消:
在没有任何关于 a 的概率的先验知识的情况下,人们总是可以使用一个给两个事件分配相等概率的先验,即𝑃(𝐴)=0.5.等式的最后一项。从而抵消,剩下的是确定似然比,这是很容易获得的。(请注意,如果我们有任何理由相信我们正在处理一个正确的添加剂,基于证据而不是良好群体的存在,我们总是可以修改先验以反映这一信念。)
作为例子,让我们考虑可以在消息 2 中恢复的好组 32151。如果 98213 是不是真加法,那么 32151 只是一个随机的五位数。这个数字出现的概率是 1/10⁵,但是,由于这个数字需要检查“被 3 整除”的规则,我们得到了𝑃(32151| 𝐴)=3/10⁵.
如果 98213 是一个真正的添加剂,那么𝑝(32151|𝐴的可能性是由 32151(“车队”)的相对出现频率给出的。当然,像“船”或“天气”这样的词比其他像“攻击”这样的词出现得更频繁。这需要在正确的统计处理中加以考虑,因为更频繁的术语为假设增加了更多的证据。为了这个例子,让我们假设每第 80 个截取的单词是“Ship ”,每第 250 个截取的单词是“Fleet ”,那么添加剂 98213 的总证据将被计算为:
从技术上来说,未包含在良好组列表中的代码也为上面的产品添加了因素。然而,由于这些因素仅略小于 1,为了节省时间,可以安全地忽略它们。
作为最后一个简化技巧,可能性将被转换成它们的对数值,用简单的加法代替复杂的乘法。每个好的组的对数似然性将被预先制成表格,这样工作人员可以简单地查找数值,测试添加剂的过程也可以被简化。这一程序的主要优势之一是,测试添加剂的劳动密集型和重复性任务可以外包给数学知识有限的员工。专家意见只需要在边缘案例或非常重要的信息中被参考。
结论
我希望我能够对贝叶斯推理有所启发,并展示它是如何在布莱奇利公园被用来破译 JN 25 的。如果你想知道更多关于这个话题的信息,请点击这里查看爱德华·辛普森的文章。请继续关注第二部分,我将剖析德国之谜的内部运作,并讨论贝叶斯定理是如何帮助破解它的。
参考
[1]https://en.wikipedia.org/wiki/Frequentist_probability
[2]https://en.wikipedia.org/wiki/Bayesian_probability
[3]爱德华·辛普森,贝氏在布莱奇利公园( 2010),英国皇家统计学会,http://math center . Oxford . emory . edu/site/math 117/Bayes theorem/enigma _ and _ Bayes _ theorem . pdf
[4]莎伦·伯奇·麦克格雷,《不会消亡的理论:贝氏法则如何破解恩尼格玛密码,追捕俄罗斯潜艇,并从两个世纪的争议中脱颖而出》,耶鲁大学出版社
BERT 如何确定搜索相关性
了解 BERT 的局限性和偏见将有助于您更好地理解 BERT 和 Search 如何看待世界和您的内容。
2019 年 10 月 25 日,谷歌搜索副总裁潘杜·纳亚克宣布:
通过将 BERT 模型应用于搜索中的排名和特色片段,我们能够更好地帮助您找到有用的信息。事实上,当涉及到排名结果时,BERT 将帮助搜索更好地理解美国十分之一的英语搜索,我们将随着时间的推移将这一功能扩展到更多的语言和地区。[ 1
谷歌的言论和解释提出了一些关键问题:
- BERT 比以前的搜索相关性工作好多少?
- BERT 模型是如何创建的?它们是如何微调的?
- BERT 模型的局限性和偏差是什么?
- 这些偏见会如何影响伯特对网页内容的看法?
- 一个人可以使用 BERT 来确定她的内容对于特定查询的表现吗?
- 如何对查询和可能的目标页面“应用 BERT 模型”来得出排名?
BERT 比以前的搜索相关性工作好多少?
2015 年,Crowdflower(现在的阿彭←Figure-Eight←Crowdflower)举办了一场 Kaggle 比赛[ 2 ,数据科学家建立模型,预测给定查询、产品名称和产品描述的搜索结果的相关性。获胜者 ChenglongChen 以 72.189% [ 3 ]的分数获得第一名,获得了 1 万美元的奖金。虽然比赛已经关闭了五年,但数据集仍然可用,Kaggle 比赛评分功能仍然适用于私人排行榜(它只是不奖励任何网站积分)。我拉了数据,微调了一个 BERT 分类模型,预测了一个提交,它的得分是 77.327% [ 4 ]。
(图片由作者提供)
这一获奖结果,虽然晚了几年,却显示了 BERT 是如何戏剧性地超越了现有的技术水平。)机器学习模型投票选出最佳结果:
(图片由陈[3])
相比之下,我的高分结果使用了一个 BERT 模型和一个相对简单的管道:
(图片由作者提供)
对于我的第一个模型(也是最后一个模型),特征化是“只取前 505 个令牌”跨越三段数据(查询、产品标题、产品描述)——没有任何特殊处理——这些就是你看到的结果。在本文中,我们将在本文的后面讨论 BERT 如何以及为什么能够在糟糕和肮脏的输入下表现良好。
Kaggle Crowdflower 搜索相关性数据集有 20,571 个标记样本,生成提交需要对 22,513 个测试样本进行预测。虽然这是少量的数据,并且该领域仅限于电子商务产品 BERT base 没有对这些数据进行训练——但 BERT 分类器仍然能够以突破性的准确性开始学习和预测。
BERT 模型是如何创建的?它们是如何微调的?
BERT 是 Transformers [ 5 ]中双向编码器表示的首字母缩写,是一种语言模型。语言模型对单词和单词一起出现的对数概率进行编码。最初的 BERT 模型是通过在英语维基百科和多伦多图书语料库上接受训练来实现的。训练目标是下一句预测和掩蔽词预测。
下一句任务选择一些相邻的句子,给它们正的权重;然后选择一些随机的句子并给它们负的权重:通过这种方式,BERT 模型学会判断两个句子是否按顺序出现。许多人认为这给了 BERT 一个模型显示的自然语言理解(NLU)的基础。实际上,伯特似乎知道哪些单词和句子应该放在一起。
屏蔽单词任务随机隐藏一个单词,奖励伯特能够预测到缺失的单词。这项任务,加上网络辍学,让伯特学会从周围的单词中推断更大的上下文。在实践中,BERT 通常用作更复杂模型的基础层;例如,通常会添加一个附加的最终层,然后对该新层进行微调以充当分类器。
我不会在这里解释变压器模型的机制,在这里阅读它。最佳微调技术的细节仍在制定中(从发表的 Arxiv 论文数量来看),尽管超参数调整取决于您的数据,但进一步的探索肯定会有所收获。然而,在我们急于纠结于细节之前,让我们不要错过要点:当一个具有次优超参数调整的新模型大幅度击败先前的技术水平时,搜索引擎公司会采用它。完美是好的敌人。有时,新的足够好,如此之好,以至于公司立即将其作为战略优势,即使最佳微调机制尚未公开确定。
为了理解为什么 BERT 如此擅长预测搜索相关性,我们将不得不研究它的一些内在的,局限性和偏见。
BERT 模型的局限性和偏差是什么?
1.512 个单词的限制
BERT 基线模型最多接受 512 个令牌。虽然可以用更少的令牌构建 BERT 模型,例如 tweets 的 256 个令牌,或者从头开始定义和训练 BERT 模型,例如较大文档的 1024 个令牌,但几乎所有常用的 BERT 模型的基线都是 512 个。
如果您的页面超过 512 个单词,搜索引擎可能会:
- 就拿前 512 个符号
来说吧——如果你的页面在前 512 个符号中没有表达出它的观点,引擎可能甚至看不到它(可能已经是真的了)。 - 通过摘要算法(TextRank,Deep Learning 等)或通过应用算法删除不重要的单词和句子,将页面内容减少到 512 个标记以下——但这些计算成本很高,所以大多数页面可能不会这样做。
注意:虽然我们说 512 个记号/单词,但实际上,BERT 通常会查看 505 个记号(假设一个 4 个单词的查询,需要 3 个 BERT 记号分隔符)。实际上,搜索算法考虑的内容的标记数量可能远远小于 505,我们将会看到。
2.不是所有的单词都是记号:很多常用单词变成了单个记号;但是更长的和不熟悉的单词被分解成子音。
一个很好的例子是,一些单词在英式英语和美式英语的拼法上有所不同。有时,子词标记化的代价可能相当高:
bert_tokenizer.tokenize('睡衣'),bert_tokenizer.tokenize('睡衣')
['p ',' ##y ',' ##ja ',' ##mas'],['睡衣']bert_tokenizer.tokenize('小胡子'),bert_tokenizer.tokenize('小胡子')
['mo ',' ##ust ',' ##ache'],['小胡子']
有时候,没有区别:
['颜色'],['颜色']
但是通常不太熟悉的拼写会产生多个标记:
['aero ',' ##plane'],[' plane ']
[' ars ',' ##e'],['ass']
['jem ',' ##my'],[' Jimmy ']【T2][' orient ',' ##ated'],['oriented']
['special ',' ##ity'],['specialty']
很少,但有时,英国拼法变得符号化了,符号变少了:
['波特'],['放',' # #之三']
3.明显的拼写错误隐含着惩罚:
bert_tokenizer.tokenize('反建制')
['反','-','建制']bert_tokenizer.tokenize('反建制')
['反','-',' est ',' ##ab ',' ##lism ',' ##ent']
虽然这些处罚看起来令人震惊,但它们实际上表明伯特是多么宽容;该模型将试图理解你给它的任何东西,而不是丢弃拼写错误的单词或忽略它以前没有见过的东西。此外,这些偏见并不是针对英国语言拼写变化的阴谋,而是训练数据的副作用:BERT 模型及其 BERT 记号赋予器通常具有有限的词汇(通常为 30,000 个单词,包括子记号),这些词汇经过精心选择,因此几乎任何单词都可以被编码,许多最常见的单词都被提升为单独的记号。这个单词和令牌的流行度竞赛是基于原始训练数据的。最初的 BERT 模型是在英语维基百科和来自多伦多图书语料库(11,038 本书,47,004,228 个句子)的一些附加文本上训练的。显然,英式拼写在语料库中并不占主导地位。
如果您正在分析带有英式英语拼写变化的文档,那么在将它们输入到 BERT 模型之前,对拼写进行标准化可能是有益的。一个训练有素的模型可以概括出它以前没有见过的东西,或者只接受过部分训练,但是最好的模型性能发生在熟悉的数据上。
有了许多其他的语言模型和词向量,很容易识别这个词是否是新的,语言模型是否已经在其上训练过,这些类型的词有它们自己的术语:OOV,在词汇之外。但是很难确定伯特是否从未见过一个单词或用它重复训练过,因为有太多的单词是由副发音分解的。但是这个小缺点是强大力量的来源:在实践中,BERT 可以根据历史和对相似邻近单词的理解来综合一个单词的意思。
4.伯特会忽略一些项目。毫无疑问,伯特不知道表情符号。
-通常,BERT 将表情符号标记为未知(字面意思为“[UNK]”),如果这些表情符号在压缩页面时没有被丢弃,那么当模型看到它们时,它们不会增加任何价值。
toker.tokenize('😍 🐶❤️')
['[未知]','[未知]','[未知]']
这些偏见会如何影响伯特对网页内容的看法?
基本上,由于 BERT 模型接受有限数量的令牌(通常是< 505), if your page uses unusual words or uncommon spellings, your page content will be split into more tokens, and in effect, the BERT model will end up seeing less of your page than a similar page that uses more common words and popular spellings.
This does not mean that you should aim to create pages that exactly mimic the style of Wikipedia. For a long time, search engines have preferred articles with general appeal, using common words and standardized spellings, written more akin to the news or Wikipedia articles than an aimless wandering of verbiage. So in a sense, the use of BERT natively supports the best practices of writing content for search engines.
Why is BERT so good at predicting search results?
Fundamentally both of BERT’s training objectives work together: word masking helps BERT build a context for understanding, and the next sentence prediction, well, — isn’t the problem of content relevance often a matter of determining how well one search query “sentence” is paired with one search result “sentence”?
We have already seen how BERT has the ability to synthesize meaning from subword tokens and neighboring words. This skill gives BERT an advantage since 15% of search queries contain words that have never been seen before [ 1 )。BERT 是确定搜索相关性所需的未知术语含义的自然预测器。
一个人可以使用 BERT 来确定她的内容对于特定查询的表现吗?
总之,大概不会;为了理解其中的原因,让我们深入探讨如何使用 BERT 来评估查询和页面的匹配程度。在高层次上,为了回答这个问题,他们可能会选择一些页面进行检查,并针对这些页面运行您的查询来预测相关性。
(图片由作者提供)
大多数搜索查询不超过四个单词,大多数页面摘要不超过 505 个单词(否则就不算是摘要)。搜索相关性分数通常分为:1 .跑题了,2。好吧,三。很好,第四个。非常好。[ 2
当 ML 工程师建立一个模型来估计一个查询与搜索结果的匹配程度时,他们通常会对大约 100 万个例子进行训练。为什么这么多?深度学习模型需要大量的数据,才能很好地进行归纳,预测以前没有见过的东西。如果你试图建立一个通用的搜索引擎,你需要大量的数据。但是,如果您的搜索空间较小,例如只是电子商务技术,或者只是家居装修网站的产品等,那么只需几千个带标签的样本就可以击败之前的技术水平。不常用数据是搜索查询的常规组成部分:
这些查询中有 15%是我们以前从未见过的——谷歌搜索副总裁潘杜·纳亚克
几千个标记样本可以提供一些好的结果,当然,一百万个标记样本可能会提供很好的结果。
如何对一个查询和一个可能的目标页面“应用 BERT 模型”来得出排名?
Kaggle Crowdflower 竞争数据提供了一些有趣的线索,说明额外数据在实践中是如何被经常使用的。通常情况下,更多的功能(如果可用)会添加到模型中,以使其更加灵活,并能够跨一系列输入进行预测。
例如,之前我们将搜索排名问题公式化为:
(图片由作者提供)
但是在 Kaggle 提交查询数据中,额外的信息是可用的,或者有时是缺失的,因此特征将被格式化为:
(图片由作者提供)
在一些测试案例中,只提供了查询和产品标题,而在现实世界中,可能只提供了很少的页面内容,甚至没有。
例如,如果你的公司有一个“索尼 PS6 创始人版”的产品页面,该页面有动态内容,如最近的推文或购买者的推荐、用户图片等,搜索引擎很可能只使用页面标题(或关于页面的某种类型的元数据),而实际上不使用页面内容。教训很明显,当提供网页内容时,首先最重要的是关注准确反映你的产品和内容的相关信息。
BERT 将继续存在,它对搜索相关性的影响只会越来越大。任何向客户或内部客户提供搜索的公司都可以使用 BERT 来提高搜索结果的相关性。用很少的数据,一个 BERT 分类器就可以击败以前的技术水平,更多的数据将有助于产生更好的结果和更一致的性能。
参考
【1】https://blog . Google/products/Search/Search-Language-understand-BERT【2】Kaggle 众筹搜索结果相关性【3】陈龙臣众筹 Kaggle 【4】ML-You-Can-Use:搜索—搜索结果相关性使用
(感谢詹士对本文一稿的审阅和评论。)
大数据真的有那么大吗?
而且为什么一开始就叫大数据?
“大数据”这个术语已经出现了一段时间,但在几乎所有情况下,我们都认为它指的是非常大的数据集。毕竟,它的名称中有“大”这个词,所以数据必须是大的,对吗?
大数据术语在 2012 年左右开始变得越来越受欢迎,直到 2014 年才真正实现飞跃。
“大数据”一词的谷歌趋势 -作者图片
它主要用于覆盖大公司不断增长的数据足迹。随着公司收集和处理更多种类和不同的数据,数据库和数据集市的旧语言实际上并不适合。因此,大数据和数据湖等术语的诞生将数据处理带入了未来。
那么,大数据的真正含义是什么?大数据工程师的工作角色和普通的数据工程师有区别吗?
我希望在这篇文章中阐明这些问题。
大数据有多大?
嗯,不一定要那么大。大数据用于描述不同于传统数据仓库的数据存储和处理解决方案。这通常是因为使用传统数据库需要存储和处理的数据量变得过于昂贵,但这不是唯一的原因。
大数据还包括非结构化数据处理和存储。公司现在可以收集和处理视频、图像和文档,而不是收集标准的表格数据,大数据解决方案需要考虑这一点。
这就是为什么数据湖这个术语变得如此流行,因为您将您的数据存储称为一个开放和变化的湖,而不是一个固定和结构化的仓库。
也就是说,大数据经常被用来描述大量的数据。
我们现在产生的数据几乎是 10 年前的 30 倍。
试图在传统的数据仓库中存储和分析如此大量的数据会花费太多的资金,并且需要太长的时间来返回结果。
这是因为传统的数据解决方案是为纵向扩展而构建的。我的意思是,你有一个数据库,如果你想要更多的存储空间,你可以增加更多的硬盘,如果你想要更多的能力,你可以提高 CPU 和 RAM。然而,有时添加更多并不能给你带来任何额外的好处,反而会变得过于昂贵。
大数据解决方案可以横向扩展。这意味着您的数据存储通常是一个服务器/数据库集群。如果您需要更多的存储或计算能力,您可以添加几乎无限多的服务器。
这听起来很简单,并且回避了一个问题,为什么我们不用旧的数据库做这件事呢?答案很简单,这需要改变数据处理方式。如果您将一个传统的数据库拆分到多台机器上,并且希望对一个表中的所有记录进行计数,那么当您的表现在分布在多台机器上,每台机器都给出不同的答案时,您如何得到这个数字呢?
这就是大数据解决方案所提供的。它们不仅提供了一种存储难以置信的大量数据的方法(见下面的 Google 文章),而且管理跨多个节点(服务器)的数据处理。
说真的,他们有一大堆数据!
medium.com](https://medium.com/@lewisdgavin/googles-data-footprint-will-blow-your-mind-2237cf8e0d4)
简而言之,要回答大数据有多大的问题,这要视情况而定…它有多大就有多大。但是,只有当您能够应对这三个 V 时,它才真正成为大数据平台。体积、速度和变化。
大数据技术的例子
今天,我们可以使用如此多的大数据技术,因此我将在这里列出其中最有趣的故事。
- Hadoop —一种大数据软件框架,包含多种技术,共同创建大数据解决方案。该框架允许跨多个服务器垂直存储和处理数据。
- Apache Hive——Hive 是适合 Hadoop 框架的技术之一。它最初是由脸书开发的,允许分析师和工程师使用 SQL 来分析存储在他们的 Hadoop 集群中的数 Pb 的非结构化数据。
- Apache Spark — Spark 可以在 Hadoop 或独立集群上运行。从 Hive 的缺陷中学习,它成为一个快速的内存数据处理解决方案,以提供更快的大规模分析。
- Apache Kafka 由 LinkedIn 开发,Kafka 旨在将大量数据实时吸收到他们的数据湖中。Kafka 允许您横向扩展数据流和数据摄取,同时使其具有容错能力,因此不会丢失任何数据。
大数据工程师需要哪些技能?
在大数据技术兴起的早期,大数据工程师不仅需要 SQL 等数据处理技能,还需要编程经验。这是因为许多早期系统是由程序员构建的,然后才变得更加普遍,类似 SQL 的接口构建在上面。
如今,仍然需要将编程和 SQL 很好地结合起来,但是在某些情况下,您可能只需要 SQL 知识就可以了,特别是如果您了解集群和单节点数据处理之间的核心区别。
虽然在大多数情况下,你需要强大的技术背景,但我发现编程技能和数据处理技能一样重要。这是因为您经常构建和管理数据湖,这需要 DevOps 之类的技能集以及将这些技术集成在一起。
作为一名大数据工程师,您不仅要对数据执行 ETL 处理,还要从各种来源获取数据,包括网站、API、服务器和其他数据库。您可能还需要创建能够以毫秒级延迟接收、分析和存储结果的实时解决方案。所有这些任务都需要传统数据仓库模型之外的新技能。
最终,世界上的数据足迹只会越来越大,所以最终我们今天所说的大数据可能就是明天的小数据。它正在学习扩展以满足不断增长的需求,这造就了大数据,大数据。
“像我这样的初学数据科学家如何获得经验?”
我学过一些课程,现在做什么?提示:摸摸炉子。
一项被低估的技能。感谢山姆·伯克的照片。
Manuela 前几天给我发了一封电子邮件,问了我一个问题“像我这样的数据科学家初学者如何获得经验?”。
问得好。
它接着说,“我参加了一些课程,做了一些项目,但一些面试官说:‘我喜欢你的阵型,但你没有我们想要的最起码的经验,以后再来吧!’".
我回复了一些我正在复制到这篇文章的观点。
免责声明:我不是去找工作。所以你可能会问,“那么,我为什么要接受一个不去找工作的人的建议呢?”。
你这么问是对的。
永远不要相信那些没有亲身经历的人的建议。我的解释是,我没有找到适合我的工作,所以我创造了自己的(这可以是一篇独立的文章,事实上,我的建议是:不要找工作,而是创业)。
然而,如果我想得到一个角色(反过来,它需要的经验),我会这么做。
课程和经验差距
网络课程是商品(一个很普通的东西)。是的,我是作为一个教在线机器学习课程的人这么说的。
在线课程创造基础知识,从事你自己的项目创造特定的知识(无法教授的知识)。
所以我对 Manuela 的第一个问题是,当你说你完成了一些课程和项目时,有多少是你自己的项目,而不是你作为课程的一部分完成的项目?
以下是我对经验的定义:你独自(或与他人合作)尝试过但不知道结果的事情。
这里有一个例子。
你父母告诉你多少次炉子是热的?
我猜你是在被烧伤后才明白的。
听父母的话就相当于听教官给你上课。当然,你可以理解他们所说的,但是除非你亲自尝试,否则你不会真正理解。
所以获得经验(在真正开始一个角色之前)相当于摸炉子。
如果你像我一样,有课程证书和课程项目,正在寻找一种叫做经验的难以捉摸的东西,现在是时候开始问自己了:
我碰到炉子了吗?
在你拥有它之前开始工作
找出你想要的理想角色,然后开始行动。
如果这听起来很奇怪,把它作为你研究的一部分。如果你有能力学习数据科学技能,你就有能力弄清楚不同类型的角色需要什么。
我举一个具体的例子。
假设你在寻找自由职业者,但是所有的机会都需要经验。还有一个用于建立计算机视觉模型,以识别手术台上是否有医生的工具(这不是虚构的,我是从我被要求参与的一个实际项目中得出的)。
你读了角色任务,然后说,“哇,那太有意思了,我很乐意去做。”你继续读,看到“需要 3 年以上的经验”,然后想,“嗯,我没有 3 年以上的经验,所以我不打算申请。”然后用剩下的时间思考,“好吧,看来我对这些角色都不够好。”
我去过那里。而且是错误的思维过程。这是一个基于恐惧的决定,而不是基于成长的决定。你决定不申请,因为你害怕你的能力达不到要求。
事实是,许多角色涉及大量的动态计算(毕竟,这是数据科学中的科学或机器学习工程师中的工程师)。
那么你能做些什么呢?
你可以获取项目的工作描述,然后自己构建。花一周时间设计和计划你可能如何做,花四周时间实际做,然后花一周时间分享你学到的东西。
最坏的情况是,你已经花了 6 周的时间找出了什么没有用(对于一个特定的问题),最好的情况是,你现在有东西可以向别人展示你实际上做了什么(没有课程项目的有益指导)。
你可以这样说,“我看到了这个项目,并决定建立一个概念证明。”
对于医生的工具问题,你可以在互联网上搜索工具的不同图片,创建自己的数据集(人工与否无关紧要,重要的是弄清楚如何创建这样的东西),建立一个模型来检测工具是否丢失,然后使用 Streamlit 将你的概念证明部署到一个面向用户的应用程序中。
一个自我设计项目的例子。首先收集您自己的数据,以某种方式对其建模或分析,使用 Streamlit(或类似工具)构建一个用户可交互的界面,并通过 web 将其部署给用户。对于这种端到端的例子,看看我如何使用相同的步骤复制 Airbnb 的便利设施检测。
如果未来的雇主不把这种主动性称为“经验”,你就不想在那里工作。
补充说明:当 Andrei(我的商业伙伴)和我为我们的机器学习课程(对 Shubhamai 大声喊出来)雇用一名教师助理时,我们雇用了那个已经在自己回答别人问题的学生。Shubhamai 在得到这份工作之前就开始了。
后续行动
另一个被忽略的点。永远不要把拒绝视为一劳永逸的事情。
正如引用的,一些面试官说,“你没有我们想要的经验,以后再来吧。”
换一个词吧,“你还没有我们要的的经验,以后再来吧。”
如果有人告诉你“你还没有经验”,你真诚地相信他们的话,去实践你的技能,也就是说,做一些像在你有工作之前就开始工作的事情,你应该继续跟进。
向他们展示你所做的工作(需要注意的是:这需要实际去做并提高你的技能)。
说,“嘿,根据我们上次的谈话,我想让你知道我一直在提高我的技能,这是我同时建立的。如果你有任何空缺,我很乐意被重新考虑。”
大部分忘记了后续。不仅仅是采访,而是任何事情。任何一种关系都可以通过某人采取额外的步骤来改善。
记住,生活中的很多结果都是非线性的。如果有人给我发了一封邮件,而我在几个月内忘记回复(邮件对我来说是福是祸),我可能永远不会回复。但是如果他们跟进并提醒我的懈怠(谢谢),我更有可能在接下来的 24 小时内回复。
这总是有用吗?
不,当然不是。但它显示出的主动性远远超过了只是浏览多个招聘信息。
了解某人
许多职位空缺甚至没有列出来。
我在一家科技公司的第一份(也是唯一一份)工作来自于一个人,他看到了我在 LinkedIn 上发布的内容,碰巧认识一个人,而这个人又认识一个可能有兴趣和我交谈的人。我最终遇到了这个人(对 Cam 大喊),他被证明是一个完整而绝对的活着的传奇,就我一直在做的事情进行了交谈,他问我下周是否愿意来一天,我做了,然后又一天,两天后,我得到了一个角色。
在这种情况下应该注意的是,我确实有基本技能,离世界一流还差得很远,但我不会走进那里,不知道什么是 pandas DataFrame,也不知道如何解决和查找堆栈溢出问题(是的,我每天花很多时间,甚至工作几个月都在研究和搜索东西,记住,工程师是“解决问题”的人)。
对我们未来的许多雇员(尤其是初级雇员)来说,他们是因为有人认识某人。
我是这样看的:求职门户已经死了。
他们可能对某些人有用,但对我来说,我假装他们没有。我告诉自己,通过那个按钮申请很容易,但更难的是找到我应该与之交谈的人,与他们交谈,向他们展示我一直在做的事情,接受他们的建议,听取他们的反馈,提高我的技能,跟进并展示他们,并有可能获得一份工作。然而,如果我通过招聘启事来申请,它会立刻被拒绝(也许不会,但我也是这么告诉自己的)。
当然,在一个理想的世界里(尽管可能不理想),公司会只雇佣有才能的人,但这不是人们的工作方式。人们喜欢和他们喜欢的人一起工作。
好吧,那你怎么去了解一个人呢?
如果你要走数字路线,保持简单。就像你给我发的邮件一样(正如你在上面看到的,Manuela 给我发了一封非常简洁明确的邮件)。又短又甜。直接提问。
我得到了 Airbnb 的面试,因为我在 LinkedIn 上发了一条招聘人员(做调研找到的)的消息。她在一天之内回复说,“嘿,丹尼尔,你明天有空吗?”。我没有得到这份工作,但我确信我比通过他们的招聘网站申请(我甚至没有申请)更接近了。
同样,这个过程也不能保证。
您可以向 100 个人发送消息,但没有收到回复。同样的,申请 100 份工作却没有得到任何机会。如果你的记分卡最终看起来像这样,把它作为反馈,你处理事情的方式可能需要改进。
数字是高效的,远程工作越来越成为一件事,但人们仍然喜欢与他们的身体互动(可能对我们这样的技术书呆子来说很惊讶),就像在同一个房间里一样。这意味着去参加活动(在社会条件允许的情况下),与人交谈,多走一步与 X 公司的 Dave 跟进(见上文),他告诉了你他过去几个月一直在做的项目。
我工作的科技公司每个月都会举办一次人工智能聚会。在我为他们工作之前,我去了一个聚会,不知道他们是谁,甚至不知道他们的存在,7 个月后,我在那里工作。
分享你的作品
这应该是清楚的,但如果不是,我会把它放在这里。
如果你的外出机会失败了,让他们来找你。
这要从创造东西并公开分享(完成与否)开始。
我在过去 3 年中拥有的所有最好的机会都来自于偶然发现我的工作的人(我从 2016 年开始在网上写作,从 2017 年开始写机器学习)。
是的,你应该有自己的博客,把它作为你的投资组合的中心枢纽,把其他社交媒体平台(你可以搞清楚这些)作为辐条。
想想吧。你是怎么学到东西的?你可能四处搜索,偶然发现了一篇关于这个主题的很棒的博客文章,并在自己的工作中使用了它。
你猜怎么着?
你可以成为一个有帮助的博客帖子的创建者。
这与上面的内容有联系。在你有工作之前就开始工作,分享你的工作(这是你的经验)。一旦你做了与之前被拒绝的工作相关的事情,继续说,“嘿,这是我做的。”
进一步阅读
现实一点,雇佣没有经验的人对任何公司来说都是一大风险。
因为很有可能,你会在短期内失去生意上的钱(当你学习和建立你的基本技能时)。所以你可以认为你的主要职责是降低风险。
怎么会?
以上几点足以作为开始。但是如果你有兴趣了解更多。以下资源会有所帮助。
- 好到他们不能忽视你的加州纽波特(Cal Newport)——这几乎可以从标题上看出来。
- 如何交流和分享你的作品——我写的一篇文章详细讨论了这几点。
- 不要称自己为程序员——另一篇关于开始一个角色主题的伟大文章(如果你没有角色,你可能会把这篇文章理解为“嗯,这些与我无关”,但你应该把这些要点视为逆向工程,记住:在你有角色之前开始工作)。
有问题吗?如果你有任何进一步的问题,请留下你的回复或随时给我发电子邮件。
PS 我把这篇文章变成了一个视频(在每一点上重复多一点)。
机器人什么时候应该停止思考,开始行动?
人们每天解决许多问题。也许我们正在想我们应该穿什么去参加某个聚会,或者我们正在想出开车去某个地方的最佳方式。有时候,我们甚至试图弄清楚我们应该和谁结婚,或者我们应该去哪里上大学。
当一个人解决一个涉及许多不同因素的难题时,他们甚至没有意识到就做出了权衡。如果我们花在解决问题上的时间太少,我们最终会得到一个不够好的解决方案。然而,如果我们花太多的时间来解决问题,我们会得到一个很好的解决方案,但是会花费太长的时间。换句话说,当我们解决复杂的问题时,我们不知不觉但有效地回答了下面的问题:
什么时候我们应该停止思考一个问题,并开始采取行动,找到我们目前为止想出的最佳解决方案?
让我们考虑一个例子。假设莎莉想出了从她家开车去滑雪胜地的最佳方式。看看几个选项。她应该喜欢哪一个?
- 她应该考虑很长时间(30 分钟)来获得一条需要 35 分钟的伟大路线吗?
- 她是否应该想都不用想(1 秒钟)就能得到一条耗时 2 小时的可怕路线?
- 她应该考虑一个合适的时间量(2 分钟)来得到一个合适的需要 40 分钟的路线吗?
虽然第一个选项会导致最快的路线,但她会花太多时间思考。类似地,虽然第二种选择要求她很少思考,但她会花太多时间开车。然而,第三种选择在思考时间和驾驶时间之间提供了一个很好的平衡。
我在研究生院的第一篇论文试图为机器人回答这个问题:机器人什么时候应该停止思考它的问题,并开始采取行动,寻找迄今为止它提出的最佳解决方案?这就是我们今天要谈论的话题。
我们所说的思考是什么意思?
让我们首先正式定义机器人思考的含义。我们不是在谈论关于意识的难题或对于像我一样在房间里的哲学极客的中国房间争论。相反,我们谈论的是一类叫做 anytime 算法 的算法。简单来说,anytime 算法只是一种随着时间的推移逐渐改进某个解决方案的算法,并且可以为了那个解决方案而随时被中断。例如,如果我们试图想出一条从杂货店到医院的路线,anytime 算法会不断地生成随着时间的推移越来越好的路线。基本上,当我们说一个机器人正在思考时,我们真正的意思是机器人正在执行一个随时会产生解决方案的算法。
anytime 算法通常有几个很好的特性。首先,anytime 算法表现出单调性:它保证解的质量提高或保持不变,但绝不会随着时间的推移而变差。接下来,anytime 算法表现出收益递减:解质量的提高在计算的早期阶段较高,在后期阶段较低。
为了说明 anytime 算法的行为,请看这张照片。在这张照片中,随着计算时间增加,解质量也增加。事实证明,这种行为是 anytime 算法的典型特征。
交易解决方案质量计算时间
为了确定机器人何时应该停止思考并开始行动,我们需要量化两件事:解决方案的质量对我们来说值多少,时间对我们来说值多少。提示依赖于时间的效用。时间相关效用表示由任意时间算法计算的解决方案的效用。直观地说,在任何实时决策任务中,一秒钟内计算出的某种质量的解决方案比一小时内计算出的相同质量的解决方案具有更高的效用。这意味着解决方案的效用是质量和计算时间的函数。这是一种正式的说法:
幸运的是,通常可以通过将依赖于时间的效用函数表示为两个函数之间的差异来简化它,这两个函数被称为内在价值函数和时间成本。首先,内在价值函数代表一个解决方案的效用,如果我们只考虑该解决方案的质量,忽略计算时间的成本。第二,时间成本代表解决方案的效用,如果我们只考虑计算该解决方案所需的时间,而不考虑解决方案质量的价值。下面让我们更正式地定义这种简化:
这种东西有什么意义? 这个问题问得好。给定被分成内在价值函数和时间成本的时间相关效用函数,决定何时中断任意时间算法并对当前解起作用的问题变得明确。例如,看看下面的例子。我们有三个函数:内在价值函数、时间成本和依赖于时间的效用函数。内在价值函数随时间逐渐增加,时间的成本随时间呈指数下降,时间相关的效用函数为我们创造了一个凸函数。我们应该停止思考,开始在依赖时间的效用函数顶端行动。
听起来很简单,对吧?嗯,有个问题。虽然很容易指着橙色圆圈说停在这里,但我们实际上并不事先知道 anytime 算法的性能。决定何时中断 anytime 算法并对当前解决方案采取行动需要预测 anytime 算法在未来的性能。
预测任意时间算法的性能
在我们进入如何预测 anytime 算法的性能之前,让我们再定义一些东西。我们将定义一对向量,它们共同代表任意时间算法的性能。第一个向量描述了 anytime 算法在解决一个问题实例时的过去的性能。我们可以将过去的绩效定义为从初始解决方案到当前解决方案所观察到的解决方案质量的向量。换句话说,性能历史是从 anytime 算法的开始时间步长到当前时间步长观察到的一系列解决方案质量,如下所示:
第二个向量代表 anytime 算法在解决一个问题实例时的未来性能。我们可以将未来性能定义为从当前解决方案到最终解决方案的算法剩余时间内的解决方案质量的向量。也就是说,性能预测是从当前时间步长到算法的最终时间步长后预测的一系列解决方案质量,如下所示:
为了预测 anytime 算法的未来性能,我们可以使用它在正在解决的问题的实例上的过去性能。通常,这只是一个从性能历史中计算性能预测的函数。在不致力于具体实现的情况下,让我们大致这样定义这个函数:
需要强调的是,该功能可以通过多种方式实现。在大多数情况下,一个简单的方法,如非线性回归,可以从性能历史中计算出一个合适的性能预测。事实上,我在报纸上就是这么做的。然而,对于所有那些深度学习专家来说,也可以使用复杂的模型来完成,如神经网络,其中包括算法的功能。
这是对性能预测器的直观描述。理想情况下,随着性能历史的增加,它计算的性能预测将接近 anytime 算法的真实性能。例如,在第 i 个时间步,第 i 个性能预测并不十分接近真实性能 p* 。事实上,这太乐观了。然而,在第 (i + 1) 时间步,下一个性能预测 (i + 1) 性能预测更接近真实性能 p* 。直观上,随着性能预测器利用性能历史中更多的解决方案质量,性能预测接近算法的真实性能。
机器人什么时候应该停止思考,开始行动?
现在我们已经定义了一堆东西,我们终于可以看到机器人如何决定何时停止思考并开始行动。基本上,机器人会以固定的时间间隔监控它的 anytime 算法。在每个时间步,机器人将使用性能预测器从性能历史生成性能预测。根据性能预测的情况,机器人要么中断 anytime 算法,要么让它继续运行。在更深的层次上,基本算法是这样工作的:
- 初始化时间步长和性能历史。
- 启动任意时间算法。
- 当anytime 算法运行时,执行以下操作:
- — 获取anytime 算法的当前解。
- — 计算当前溶液的质量。
- — 将当前解决方案的质量添加到绩效历史中。
- — 使用性能预测器根据性能历史计算性能预测。
- — 如果性能预测满足停止条件:
- — 中断anytime 算法。
- — 返回当前解决方案。
- — 否则,增加时间步长,暂时休眠。
但是什么是停止条件呢? 简单来说,我们用一个停止条件来决定一个 anytime 算法在给定的时间步是否应该被中断。如果停止条件为真,我们中断算法。否则,我们让算法继续运行。
而我们应该用什么停止条件呢? 我们使用一个停止条件,只要预计最佳解决方案的效用和当前解决方案的效用之差大于零,就让 anytime 算法运行。更正式地说,我们让 anytime 算法在以下值大于零时运行:
事不宜迟,对于那些想了解更多技术细节的人来说,下面是决定智能系统何时应该停止思考并开始行动的方法:
葡萄酒怎么会又尖又尖?
使用主题建模来揭开葡萄酒评论的神秘面纱,并通过创建基于内容的推荐系统来帮助消费者找到他们喜欢的葡萄酒。
https://winefolly.com/tips/40-wine-descriptions/
葡萄酒是如何变得尖尖的、尖锐的、像激光一样的或多肉的?葡萄酒描述(尤其是侍酒师写的评论)通常包含看似随意的形容词,这可能会让消费者非常困惑。之前在一家葡萄酒商店工作过,我亲眼目睹了这些描述和评论是如何造成混乱的。如果对葡萄酒的评论没有意义,消费者怎么知道他们是否会喜欢一瓶酒?如果他们喜欢一种酒,他们怎么能找到类似的瓶子呢?
该项目的目标: 1)使用自然语言处理和主题建模来发现葡萄酒评论的趋势 2)创建一个推荐系统,根据第一部分中的主题建模找到类似的(和更便宜的)葡萄酒。
数据:这个项目的数据集是在 Kaggle 上找到的,由一个 2017 年刮葡萄酒爱好者杂志的用户创建。它有 13 万条葡萄酒评论,有许多有用的功能,如:葡萄品种、点数、价格、地区,当然还有侍酒师的评论。要更详细地预览功能和数据,请参见数据集这里的。
步骤 1:清理和探索性数据分析
与任何数据科学项目一样,EDA 和清理是第一步。有人恨,有人爱,我们都要做。这个项目的大部分 EDA 是为了娱乐/练习,对于 NLP 或推荐系统来说不是太必要,所以我不会详细介绍。然而,如果你想看我的代码和过程,可以在 Github 上查看这个项目。
步骤 2:为主题建模做准备
什么是主题建模?
首先,什么是主题建模?主题建模是一种 NLP 模型,它分析文档中的单词,试图找到它们之间潜在的“主题”(主题)。例如,假设我们有四个句子(在 NLP 中也称为文档):1)“我喜欢狗和猫”2)“葡萄酒有草莓的味道”3)“狗的皮毛是黑色的”4)“葡萄酒闻起来有猫粮的味道”。如果我们思考这些文件中的主题,很明显第一和第三个是关于动物的,第二个是关于酒的,第四个可能是这两个主题的结合。主题模型基本上是用一种更加数学化的方法来做这件事的。
主题建模有许多变体,如 NMF、LDA 和 LSA,每一种都有自己独特的数学基础。此外,这些模型可以在各种 Python 包中运行,如 spaCy、Gensim、scikit-learn 等。每个包需要稍微不同的步骤,尤其是在文本预处理中。虽然我尝试了各种模型和软件包,但我表现最好的模型是在 Gensim 中完成的 LDA 模型,所以这篇博客文章概述了我的经验。
为主题建模准备文本
在进入主题建模之前,我们需要准备将要运行模型的文本。对于这个分析,我正在寻找葡萄酒描述中的潜在主题,所以我只使用了数据集中的描述列。这是侍酒师对每款酒的书面评论的特点。
预处理步骤如下:
- 去掉:标点符号,数字,把所有东西都变成小写
- 去除停用词:停用词是极其常见的词,如“a”和“the”。每个软件包都内置了您可以自定义的停用字词集。通过一个迭代的过程,我把我的停用词表定制成大于 15k 个单词。在这一部分花点时间是值得的,因为它有助于澄清你的话题。参见 Github 上的代码。
- 标记化:将描述列分割成单个单词块。
- 词条和/或词干:这允许像“跑步”、“跑”和“跑”这样的词被同等对待,并有助于减少独特词出现的次数。
- 单词包:将文本转换成单词包,这样我们就可以对其进行建模。单词包分别处理每个单词(想象一个包,里面有类似拼字游戏的单词块),然后计算每个单词的出现次数。在此之后,您可以使用 TF-IDF 或计数矢量器来使模型更加健壮,但这里介绍的模型没有使用这些工具。关于使用 TF-IDF 和 CV 的其他型号,请参见 Github 代码。
词汇化后出现频率最高的词。注意顶部的单词是描述性的,而不是停用词。
步骤 3:运行 LDA 模型
现在,文本已经准备好进行建模了。如前所述,主题建模有许多不同的方法和包。在接下来的章节中,我将讨论我最终的 Gensim LDA 模型。
什么是 LDA ( 潜在狄利克雷分配)?
LDA 是一种概率模型,它假设语料库中的每个文档都由主题分布组成,每个主题都由单词分布组成。该模型的目标是学习每个文档的主题混合,以及每个主题的单词混合。当使用 LDA 进行 NLP 时,我们挑选主题的数量(这部分比较棘手,涉及许多迭代),并且模型被迫具有 n 个主题的主题分布。该模型在词-主题级别以及主题-文档级别分析文本。当遍历迭代时,模型会问:一个单词属于一个主题的概率是多少,这个文档由这些主题组成的概率是多少?
下图帮助我想象 LDA 是如何工作的。假设我们有三个主题——三角形的每个角都是一个独特的主题。在这种情况下,每个文档由三个主题的一定比例组成。如果我们的文档是主题的混合,它看起来就像右上角的三角形。如果文档是主题二和主题三的混合,那么它看起来就像左下角的三角形。LDA 有两个影响主题构成的超参数( alpha,beta ),但我只是在我的模型中使用了默认值。这篇中的文章很好地描述了他们。
在 Gensim 中运行 LDA 模型
# Dictionary- word to numeric id mapping
dictionary = corpora.Dictionary(df.tokenized)# Corpus- transform texts to numerical form (bag of words)
corpus = [dictionary.doc2bow(doc) for doc in df.tokenized]# LDA Model- 15 topics, 20 passes
lda_model = models.LdaModel(corpus, id2word=dictionary, num_topics=15, passes=20 )# Print topics
lda_model.print_topics(15)
运行模型后,您应该检查您的主题,看它们是否有意义。这是 NLP 的棘手之处——没有正确的答案。你需要用你的直觉和领域知识来看看题目是否有意义。你可能要试几次。运行上面的模型后,一些主题看起来像这样:
(1,
'0.136*"oak" + 0.069*"vanilla" + 0.045*"toast" + 0.021*"toasted" + 0.020*"toasty" + 0.017*"buttered" + 0.016*"caramel" + 0.015*"richness" + 0.015*"wood" + 0.014*"oaky"'),(7,
'0.034*"finish" + 0.030*"apple" + 0.021*"sweet" + 0.019*"pear" + 0.018*"pineapple" + 0.018*"citrus" + 0.018*"nose" + 0.016*"melon" + 0.015*"white" + 0.014*"tropical"'), (9,
'0.060*"blackberry" + 0.044*"black" + 0.029*"chocolate" + 0.025*"tannin" + 0.018*"ripe" + 0.017*"cherry" + 0.017*"syrah" + 0.016*"tannic" + 0.016*"oak" + 0.015*"show"'),
这些话题对我来说很有意义。第一个可能是黄油,橡木,夏敦埃酒的代表。第九种可能是巧克力和橡木红葡萄酒。
第四步:推荐相似但更便宜的葡萄酒
想象一下,你去老板家吃饭,喝了一些好酒。第二天你查看评论,发现是 200 美元。也许你想找一些口味相似、价格更实惠的东西。确定你喜欢的口味和导航混乱的描述可能会令人生畏。
推荐系统
既然主题建模已经完成,我们可以使用这些结果来创建一个推荐系统。有两种主要类型的推荐系统:基于内容和协同过滤。对于这个项目,我创建了一个基于内容的推荐系统。基于内容的模型使用关于用户和/或项目的附加信息(例如人口统计),而不是依赖于用户-项目交互。这里,因为我的模型没有任何用户信息,所以内容是葡萄酒描述的主题分布。因此,该模型推荐具有类似主题细分的葡萄酒。
协同过滤与基于内容的对比(来源:https://www . research gate . net/figure/Content-based-filtering-vs-Collaborative-filtering-Source _ fig 5 _ 323726564)
用最简单的术语来说,推荐系统通过比较项目的距离来工作。这可以是余弦相似性、欧几里德距离、詹森-香农距离、库尔巴克-莱布勒散度或许多其他选项。它们都只是测量物体在空间中的距离。对于这个项目,我使用了 Jensen-Shannon 距离,因为这是一种测量概率分布之间距离的方法——这就是 LDA 模型中每个文档的主题分布。
为了在 python 中实现这一点,我利用了 SciPy 的熵度量。不用深究数学,只需知道詹森-香农是基于库尔贝克-莱布勒距离,而 SciPy 的熵只是库尔贝克-莱布勒距离的一个度量。Jensen-Shannon 距离的范围从 0 到 1,0 表示两个分布最接近/最相似。
运行推荐系统的步骤
获得 Jensen-Shannon 距离的第一步是将我们的矩阵从 LDA 转换成密集的文档 X 主题矩阵。在这个新的矩阵中,每一行都是葡萄酒评论,每一列都是每种葡萄酒的主题细分。一旦我们有了这个矩阵,我们运行文档向量之间的距离度量(即 Jensen-Shannon 距离)。
文档 X 主题矩阵
这包括几个简单的步骤:
# Convert from bow to sparse matrix to dense matrix to pandas
# Transform out of bow
corpus_lda = lda_model_tfidf[corpus]# Convert bow corpus into sparse matrix with docs as columns
csc_mat_lda = gensim.matutils.corpus2csc(corpus_lda)# Turn docs into rows, and convert to np array
# Now we have a doc X topic numpy matrix
doc_topic_array_lda = csc_mat_lda.T.toarray()# Convert to pandas for ease and readability
df_lda = pd.DataFrame(doc_topic_array_lda)# Set column names to topic #s for pandas df
df_lda.columns = [f'topic_{x}' for x in np.arange(0,len(df_lda.columns))]
如果我们在数据框架中随机访问一种葡萄酒,我们可以很容易地看到它的主题构成。
# Pick a random wine to examine its topic breakdown
df_lda.loc[123]
________________________________# Looks like this wine is primarily made up of topics 6, 9, and 14
topic_0 0.000000
topic_1 0.000000
topic_2 0.000000
topic_3 0.082272
topic_4 0.067868
topic_5 0.000000
topic_6 0.253451
topic_7 0.000000
topic_8 0.107688
topic_9 0.287275
topic_10 0.000000
topic_11 0.000000
topic_12 0.000000
topic_13 0.000000
topic_14 0.179217
终于到了提出一些建议的时候了
现在我们有了文档 X 主题矩阵,我们只需要运行一些函数来提取与我们的查询最相似的葡萄酒。
函数 1)在一种葡萄酒和语料库的其余部分之间查找 JSD 2)查找最相似的葡萄酒
这些函数的输出是最相似的葡萄酒的 T4 指数。它看起来像这样:
# Get the topic distribution of a query wine to find similar wines to
new_wine = doc_topic_array_lda[123].Tmost_similar_wine_ilocs = get_most_similar_wines(new_wine,full_matrix)
________________________________
array([123, 3436, 52985, 59716, 101170, 37219, 43017, 99717, 80216, 9732, 101690, 40619, 66589, 14478, 1068, 1157, 67821, 100428, 8895, 8894])
需要注意的一点是,在运行这个函数时, new_wine 是我们要从中寻找推荐的一个查询葡萄酒的主题分布。可能是你在老板家喝的酒。
好了,在我们最终做出一些葡萄酒推荐之前,还有一个步骤。来自前面函数的熊猫索引是来自文档 X 主题矩阵的 ilocs ,该矩阵只包含主题分布作为列——没有关于葡萄酒的信息。我们需要将这个数据帧与原始数据帧合并,这样当我们提取最相似的葡萄酒时,我们就有了所有的信息。如果我们希望向用户提供关于葡萄酒的描述性信息,而且希望使用描述性信息(比如价格)作为过滤器,这一点很重要。只要确保它们合并正确,否则你会有一些不匹配。一旦完成,你就可以创建一个封装了所有东西的最终函数,并且有一个价格范围的输入。
工作中的推荐系统示例
说明最终模型的最好方式是用一个例子。我从阿根廷挑选了一款 215 美元的马尔贝克,并在最终推荐系统中进行了测试。我还添加了一个价格过滤器,以便找到一个价格低于 50 美元的类似瓶子。最受推荐的葡萄酒是华盛顿州售价 35 美元的赤霞珠葡萄酒。
我绘制了两种葡萄酒的主题分布图,它们非常相似。这意味着推荐系统正在工作。当然,它并不完美,所有的主题建模都可以迭代多次,以获得更好、更清晰的主题,这反过来会返回更好的推荐。
查询葡萄酒(左)和热门推荐葡萄酒(右)的主题分布
摘要
这个项目的目标是:1)使用自然语言处理主题建模来发现葡萄酒评论中的共同主题 2)创建一个基于内容的推荐系统来找到相似的葡萄酒。
在本文中,我回顾了文本预处理的步骤、简要的 LDA 概述以及 Gensim 中的 LDA 主题建模。最后,我介绍了构建基于内容的推荐系统的步骤。通过这个项目,我能够实现我的两个目标,并创建一个最终模型,根据文本描述的风味特征推荐葡萄酒。
这个项目的所有代码都在我的 Github 上。请随时在 LinkedIn 上联系我。
人工智能如何提升呼叫中心道德?
利用 NLP 帮助呼叫中心代理应对压力,而不是让他们超负荷工作反馈的黑客马拉松想法
呼叫中心的员工流动率太高了!
呼叫中心的高流动率是一个众所周知的问题。令人惊讶的是,当我们引入更多的技术时,它们似乎都没有减少人员流动。
让我们看看今天我们是如何在呼叫中心使用人工智能(AI)的。然后,我将分享一些想法,关于我们如何应用同样的技术来帮助提高呼叫中心的士气。这将是一场由行业领导者如 Salesforce 发起的伟大的黑客马拉松。
人工智能通常如何在呼叫中心使用
想想你最后一次打电话给支持热线。会议开始前,你听到的第一件事是什么?
出于质量目的,可能会对此次通话进行录音。
没人有时间听几个小时的通话录音。但借助人工智能和自然语言处理(NLP)的力量,一种算法可以自动审查各种措施的这些记录。以下是一些例子:
- 客户情绪分析
- 员工情绪分析
- 客户与员工总发言时间的比率
- 客户提出的问题数量
- 员工提出的问题数量
- 员工用词选择(例如行话)
- 关键词提及(例如产品/服务)
Salesforce 是这类呼叫中心分析的主要参与者。关于呼叫中心利用人工智能的其他方式,请查看 Alex Fly 的故事:
在过去的十年中,呼叫中心发生了革命性的变化。虽然一些静态调用脚本和一刀切…
towardsdatascience.com](/5-best-practices-for-ai-and-data-driven-call-centers-647406b4234b)
想想这对员工来说是什么感觉
如果你把自己放在一个呼叫中心代理的位置上,这太糟糕了。你不仅时刻被记录,而且现在你的工作表现正由一台机器来评判。没有怜悯。
未来学家会认为呼叫中心将 100%由对话式人工智能驱动。但我不同意。当客户不高兴并且不寻求简单的答案时,升级到人是不可避免的。顾客希望被证明他们值得别人花费时间。与聊天机器人相比,他们中 86%的人更喜欢人类互动。
NLP 反而可以提升呼叫中心的道德
如果我们使用这些技术来改善呼叫中心代理人的生活会怎么样?我的意思不是指导他们做得更好。“反馈过载”已经是呼叫中心公认的问题。我的意思是帮助他们应对他们的工作令人心力交瘁的事实。
还记得上次你和康卡斯特打电话争论有线电视账单时有多沮丧吗?现在想象一下一天做 8 个小时。这就是呼叫中心代理人的生活。
在一份 IT 支持工作中,我如何手动提高自己的士气
大学期间的一个夏天,我在 SharePoint IT 支持部门实习。这是我第一次接听顾客的电话。我很快了解到,这些互动大多是负面的。人们在试图解决问题时会感到沮丧。到了午餐时间,我会感到气馁。我不得不利用手头的工具积极控制自己的情绪。
这是我想到的:
每当我收到顾客的称赞时,我都会把它写在便利贴上,然后贴在我的隔间墙上。到夏天结束时,我的小隔间里充满了赞美。这对我有很大的影响。
每当我不得不在电话里和不高兴的顾客说话时,那些便利贴让我坚持下去。它们不断提醒我,我所做的工作是帮助人们。
NLP 黑客马拉松挑战呼叫中心代理人的士气
我的解决方案的问题是它是高度手动的。为了让这样的想法得到推广,代理人必须倾听赞美并抓住它。这需要意志力,而意志力在一个接一个的电话中可能是短缺的。
还记得 NLP 是如何被用来为性能指标捕捉情绪的吗?如果同一个 NLP 引擎可以直接向呼叫中心代理发送表扬,仅仅是为了提高一点士气,那会怎么样?
- 想法 1: 想象在代理的桌子上有一个数码相框。如果它自动填充了充满感激之情的客户的报价呢?
- 想法 2: 我们能否生成一组正面的引言,并将其设置为代理的桌面背景?
- 想法 3: 如果我们选择最积极的音频剪辑,创建一个“最受欢迎”的播客会怎么样?代理人可以每周听一次,重温前一周的精彩片段。
我不知道你怎么想,但我觉得这是一个很酷的黑客马拉松挑战!
AI 如何帮助让企业数据质量变得更智能?
Jelleke Vanooteghem 在 Unsplash 上拍摄的照片
几乎没有任何依赖数据的人可以说他们的数据是完美的。您拥有的数据集和您希望拥有的数据集之间总是存在差异。这种差异就是数据质量的意义所在。
数据质量问题存在于使用数据的任何地方:科技和非科技企业,公共部门,工程,科学。这些领域中的每一个都有自己的数据细节和自己的一套数据质量标准。
企业数据质量处理 ERP 数据中的数据质量——描述组织中业务流程的数据。这些包括财务交易、销售交易、合同、库存以及客户、供应商等列表。
任何大型组织和大多数中型企业都使用高度集成的企业资源规划系统来运行他们的业务流程。企业资源规划数据是这类应用程序的核心组成部分;它驱动并控制其中业务流程的自动流动。这种流动的每一点都归结为公司的财务状况。这就是为什么任何企业都希望确保他们的 ERP 数据足够好,以支持其业务流程的一致和正确的循环。
公司非常了解这一点,以至于他们花费数据分析师 50%的时间来寻找和纠正数据问题。
所有用于维护企业数据质量的现代工具和流程实际上都是基于规则的,这意味着,从本质上讲,它们是通过根据一些预定义的规则或条件来评估数据来工作的。
自大型机时代以来,这种方法一直主导着业务数据环境,其核心原则从那以后就没有改变过。这样做有一个很好的理由:它是稳健的和可预测的。
然而,从那时起,世界发生了巨大的变化——公司数据库的数量和复杂性都增长了数千倍。今天,这个古老的基于规则的原则已经开始显示出它的弊端:
- 随着数据变得更加多样化,数据中组合和交互的数量呈指数级增长,这意味着保持相同数据质量水平所需的规则数量也呈指数级增长。对于企业来说,这意味着他们在数据质量上花费的成本和精力也在快速增长。它解释了为什么公司必须付出这么多来保持良好的数据质量。
- 任何基于规则的系统都有一个固有的局限性——它只能处理维护系统的人所知道的问题。但是,因为人们从错误中学习,这也意味着他们知道的每个问题之前都显示为数据事件,并且很可能导致损失。这种内在的依赖性使得所有基于规则的流程都是被动的。它解释了为什么实际上所有的数据质量保证系统都与事故管理密切相关。
- 所有基于规则的系统都是僵化的。它增加了更新规则集以跟上不断发展的业务的负担。它还包括更新文档、更改和测试新规则、清理旧的和不再相关的规则等等。对于有着长期变革历史的大型老企业来说,这变得非常棘手。
在过去的十年中,变化的速度越来越快,越来越多的企业迁移到现代云基础设施,并获得更强大的数据库。一家普通公司使用的数据在规模和复杂性方面都呈爆炸式增长。
因此,任何大型组织中的数据质量功能都面临着巨大的压力,随着时间的推移,这种压力只会越来越大。
企业数据质量是一个大行业,由 Informatica、IBM、SAP、Oracle 等巨头主导。为了帮助企业,他们提供各种应用程序来简化和加速规则管理。但他们没有质疑基础原则,因此没有解决使用了 60 多年的基于规则的模式的根本缺点。
不像其他人,我们确实质疑这种模式!在过去的三年中,我们进行了广泛的研究,寻找在典型业务数据中提高数据质量的新方法。正如你可能已经从标题中猜到的那样,我们在人工智能中找到了答案。
我们发现,不基于规则的企业数据质量方法是可行的,这种方法有许多新的好处,这些好处看起来太棒了,它们会使任何数据质量专业人员产生怀疑:
- 无需维护规则,因此,当您的业务流程变得更加复杂、数据变得更加多样化时,不存在伸缩问题。
- 人工智能算法可以发现未知问题,这些问题已经存在于数据中,但尚未显示为事件。
- 一个人工智能算法可以是自我学习,这意味着你不需要给它编写程序来理解你的数据或者你的业务流程。您不需要有描述您的现状的最新文档就可以开始使用它。你所需要做的就是把你的实际数据输入其中。
- 该算法也是自调整,这意味着它将自动跟上业务流程的变化。
- 由于上述两个属性,它可以工作在部署并忘记模式。
- 它不仅能发现问题,还能为每个发现错误的特定记录提出解决方案。
- 它有可能取代任何现有数据质量保证系统中的大多数规则。
- 最后,它可以形成一个闭环全自动数据质量保证系统,在您知道之前,数据问题就会得到纠正。你所需要做的只是观察显示算法已经防止了多少数据质量事故的报告。
看起来好得难以置信,不是吗?当然,它也有不利的一面。
像任何其他机器学习算法一样,它不会取代不需要人工智能就能很好工作的方法,例如验证地址、电话前缀、电子邮件地址。当您的数据很小时,或者当数据集中的每条记录都是唯一的并且不遵循任何模式时,它就不会很好地工作。
几千年来,马一直是主要的交通工具,直到亨利·福特使汽车变得可以负担得起。现在,马更像是一种传统,能让我们产生温暖的感觉。
但是这种方法的关键的不可修复的问题正是它如此神奇的原因:它不是基于规则的。因为一般来说,业务应用程序已经使用业务规则很多年了,业务规则思维方式已经深深植根于各地的业务文化中。引入质疑这一核心原则的人工智能算法并不容易。
但是复杂不代表不可能!有了如此令人印象深刻的一系列好处和循序渐进的实施计划,像这样的人工智能方法最终将把商业文化从怀疑转变为谨慎的热情。就像过去十年发生在大数据平台和云基础设施上的一样。
你可以在LinkedInTwitter脸书 或者在data right . ai上找到我们**
不同的人工智能(AI)技术彻底改变了医学领域(AIM)
当前的学术和工业研究采用医学中的人工智能(AIM)
丹尼尔·弗兰克在 Unsplash 上的照片
作为一名电子工程研究生,研究重点是生物医学技术和创新;我试图决定的第一件事是这项技术在医学上已经发展到什么程度,以及它在不久的将来会呈现什么样的前景。医生和放射科医生仍然是高需求的核心,但随着人工智能技术、机器学习(ML)和数据科学的最近干预,出现了向数据分析自动化的转变。这种转变的部分原因是因为人工智能技术提高了准确性和时间:这两者在拯救生命方面都是至关重要的因素。
医学本身是一个复杂而富有挑战性的领域。在许多商业领域,包括金融科技行业,人工智能技术在自动化和有效的数据分析方面显示出令人鼓舞的成果。人工智能有望重新设计和革新医疗保健行业。这可以包括通过机器学习(ML)设计有效的治疗计划,以及协助专业人员分析医疗数据。
在医疗保健领域集成人工智能系统可以将全球收入提高 8.4 倍。通过人工智能技术带来的创新,医疗保健行业可以预计节省约 1500 亿美元。
医疗技术和行业的不同部门人工智能医学(AIM)研究主要基于生物医学、患者数据管理和信息检索过程。充足的投资和研究也被分配来增强增强智能。这个领域包括将科学数据的力量与医学专业判断相结合。
医疗技术和产业的不同部门
医学中的人工智能(AIM) 研究主要基于生物医学、患者数据管理和信息检索过程。充足的投资和研究也被分配来增强增强智能。这个领域包括将科学数据的力量与医学专业判断相结合。
某些常春藤盟校已经投资了这项技术。
当前大学附属的 AIM 技术研究
斯坦福大学 AIMI 中心 正在利用统计学、电子工程和生物信息学方面的跨学科专业知识开发新的人工智能方法来分析医学成像。
2 HMS(哈佛医学院) 还积极参与开发数据驱动模型,以改善医疗保健行业的决策。
在开发能够在数字图像(例如视网膜图像)中发现判断特征以识别糖尿病患者的诊断算法方面进行了研究。
3 布法罗大学的研究人员正在使用 ML 来分析高分辨率医学图像中的预测模式。遗传信息和医疗记录,以改善对病人的诊断。研究人员还在努力建立一个肿瘤委员会数据库,该数据库可以将人工智能用于“精确肿瘤学”,从而改善癌症患者的护理。
4 马里兰大学 也在 AI 和医学领域采取主动,项目:AIM-HI(AI+Medicine for high impact)。截至 2020 年,他们正在致力于:(1)使用 ML 使能的生物标志物发现和传感来治疗慢性疼痛;(2)用于精神健康和风险评估优先化的多阶段 ML 框架;(3)新生儿阿片类药物戒断综合征的精确治疗(NOWS)。
上面没有列出的其他大学也在人工智能和医学领域进行类似的研究。
AIM 技术的行业关联研究
1IBM Watson Health将海量的医疗数据带入云枢纽。认知能力和传统分析将数据转化为知识。它可用于确定任何患者的正确药物治疗。
由于患者情况的变化和可用药物的范围,这项研究具有很大的潜力。使用人工智能技术,该平台可以决定特定药物是否真的适合特定患者。
然而,一些限制和批评包括推荐不正确的治疗建议。因此,当与注册医生咨询相配合时,该平台具有潜力。
2 谷歌搜索引擎 已经诚心诚意地帮助我们提供关于医疗条件或附近医院位置的信息。他们正在扩大对人工智能的研究,以帮助诊断癌症,防止失明和改善病人医疗保健的其他方法。
3Verily 的项目基线是用于与研究人员、临床医生、工程师和志愿者合作以构建下一代医疗保健工具和服务的另一种方法。他们的网站上列出了一些研究项目,包括对新冠肺炎、皮肤、情绪、睡眠的研究以及许多其他相关领域的研究。
还有其他没有在上面列出的工业项目也在人工智能和医学领域进行类似的研究。
人工智能如何彻底改变医疗行业的某些领域?
人工智能和深度学习(DL)一直是让医疗部门在数据处理方面更加高效的主要焦点。图像分析的深度学习概念可以很容易地应用于读取 X 射线图像并得出必要的结论。这消除了人为错误范围的必要性,并提供了更快的处理时间。
AIM 的少数应用
AIM 的少数应用
(一) 自动化: 医疗领域需要两个不可分割的方面,即数据密集型和知识型。常规咨询和其他背景分析可以通过人工智能系统轻松实现自动化。
(二) 虚拟诊断 :虚拟人工智能辅助医疗筛查平台因其较低的成本和便捷性而日益普及。这也允许早期诊断的范围,从而防止后来的保健并发症。电话筛查或虚拟访谈可以检查诊断的相关数据,并可以推荐合适的医生进行进一步的咨询(如果需要)。
该平台可以通过询问一系列与您的症状相关的问题来进行在线诊断。AI 代码可以轻松诊断病情。最常见的在线诊断包括鼻窦炎、支气管炎、哮喘、指甲感染和尿路感染。
(iii) 用于图像分析的深度学习(DL)软件: 该领域正在获得发展势头,特别是因为它提供了将医疗专业人员的能力集成到 it 平台中的范围。放射学涉及使用医学成像对损伤进行诊断和治疗的领域。图像分析中的深度学习可以提高诊断的效率,并积极地帮助从图像分析中得出关于患者治疗的结论。
这一领域在癌症治疗中得到了积极的探索。它可以使用于肿瘤诊断的图像分析过程自动化,并为早期诊断和治疗提供新的无误差模型。无误差分析还可以降低医疗成本。该领域发展势头强劲有几个原因:(1)缺乏特定领域的专业人员(2)与测试和分析相关的并发症(3)允许医生和病理学家之间的合作范围(4)通过提高诊断的准确性降低成本。
(四) 机器人辅助手术: 机器人辅助手术涉及外科技术的进步,以提高外科手术的效率。这一过程通常包括将 3D 摄像机和微型手术器械插入患者体内。外科医生使用外部控制系统来操纵仪器,以精确地完成手术任务。虽然到目前为止,外科医生只是积极地参与手术决策过程,但人工智能技术仍有改进和自动化一些系统以提高准确性的空间。这一点尤其重要,因为人工智能技术可以在 3D 摄像机无法到达的地方运行。
(五) 原始数据处理 : 大多数专业人士都难以获取相关数据,也难以整合起来做出有价值的见解。此外,数据变更和数据完整性也有可能受到损害。因此,越来越多的医疗保健初创公司积极参与处理大量医疗数据。它们执行数据标准化和协调,并用于 ML 平台。
AIM 的未来
AIM 的主要目标是将医疗专业人员的能力与数据密集型系统相集成。这可以允许对医学信息和数据的全面理解的范围。人工智能有助于准确找到相关数据,既耗时又划算。医疗保健行业是一个数据密集型系统,因此人工智能集成可以找到改善护理和减少信息过载的方法。
一些限制和批评包括推荐不正确的诊断和治疗建议。AIM 平台在注册医生咨询的辅助下具有潜力。医生、目标和医疗技术的整体作用可以改善当前的医疗保健系统。
人工智能如何应用于制造业?
人工智能和机器学习正在为制造商提供前所未有的能力,以大幅提高吞吐量,优化供应链,并加速研发。
自从互联网兴起以来,世界顶级的生产工厂已经将他们的操作数字化了。现在,万亿字节的数据从工厂车间的几乎每一个工具中流出,给组织提供了他们不知道如何处理的更多信息。
不幸的是,许多公司缺乏翻译这些信息以降低成本和提高效率的资源。为此,公司需要人工智能。
是什么推动了采用人工智能的紧迫性?
高收入波动性需要不断寻求成本节约缩短生产时间增加监管和检查工厂车间的学习和适应性制造能力和供应链需求增加对小批量和/或定制商品的需求
未来的工厂可以……
- 在整个生产过程中检测缺陷。
- 部署预测性维护以减少停机时间。
- 响应供应链中需求的实时变化。
- 验证像微芯片这样复杂的商品是否被完美地生产出来。
- 降低小批量或单批货物的成本,实现更大程度的定制化。
- 通过将日常任务转移到机器上来提高员工满意度。
人工智能在制造业的主要用途
缺陷检测
今天,许多装配线没有适当的系统或技术来识别整个生产线的缺陷。即使那些可能已经到位的也是非常基础的,需要熟练的工程师来构建和硬编码算法,以区分功能和缺陷组件。这些系统中的大多数仍然不能学习或整合新信息,导致无数的误报,然后必须由现场员工手动检查。
通过向该系统注入人工智能和自学能力,制造商可以通过大幅减少误报和质量控制所需的时间来节省无数时间。
质量保证
制造业需要对细节的高度关注,这种必要性在电子领域更加突出。从历史上看,质量保证一直是一项手工工作,需要高技能的工程师来确保电子设备和微处理器的制造正确,并且所有电路的配置正确。
今天,图像处理算法可以自动验证一个项目是否已经完美生产。通过在工厂车间的关键点安装摄像头,这种分类可以自动实时进行。
装配线集成
如今,制造商使用的许多设备都会向云发送大量数据。不幸的是,这些信息往往是孤立的,不能很好地结合在一起。
要全面了解您的运营情况,需要几个不同的控制面板和一名主题专家来理解这一切。
通过创建一个集成的应用程序,从您使用的广泛的物联网连接设备中提取数据,您可以确保获得对操作的神一样的看法。
装配线优化
此外,通过将人工智能分层到您的物联网生态系统中,这些丰富的数据,您可以创建各种自动化。例如,当设备操作员出现疲劳迹象时,主管会收到通知。当一台设备发生故障时,系统可以自动触发应急计划或其他重组活动。
创成式设计
除了促进制造过程,人工智能还可以帮助组织设计产品。它是这样工作的:设计师或工程师将设计目标输入到生成式设计算法中。然后,这些算法探索解决方案的所有可能排列,并生成设计备选方案。最后,它使用机器学习来测试每次迭代并对其进行改进。
这些制造业人工智能用例来源于 Manceps 的 制造业人工智能服务 页面。Manceps 帮助企业组织大规模部署 AI 解决方案——包括制造商。我们甚至有一个关于生成式设计的 案例研究 。
想把人工智能带到你的运营中?下载我们的免费资源:将人工智能引入组织的完整指南。在 7 章中,你将获得所有你需要的信息,不仅在技术上,而且在文化上为人工智能的转变做准备。
人工智能如何帮助医疗保健?
人工智能和机器学习正在为医疗保健提供商提供前所未有的能力,以有效地组织患者护理,自动化合同和支付,并加快诊断和治疗开发过程。
在过去的几年里,医疗保健提供商和保险承保人已经开始看到将机器学习引入他们行业的力量。现在,各种规模的医疗组织都在争先恐后地减少官僚主义,同时提高诊断的准确性和批准治疗患者的速度。
不幸的是,许多医疗保健组织(尤其是保险公司)仍在手动处理患者病历,这可能是一个费力且容易出错的过程。人工智能使医疗保健提供商能够轻松地为患者护理带来自动化解决方案。
是什么推动了采用人工智能的紧迫性?
医疗保健的高成本,尤其是诊断和药物研发。与维护患者记录和批准治疗计划相关的官僚效率低下。缓慢的临床试验需要更多的医生培训。
当机器学习进入医学领域时—
- 医生使用图像识别技术来更容易地检测疾病,在某些情况下,甚至是自动检测。
- 保险提供商使用自然语言处理来总结患者病例文件并更快地批准治疗计划。
- 制药公司大大缩短了识别有效分子并将其推向市场的时间。
- 外科医生在机器人和人工智能的帮助下进行手术。
- 药剂师及早发现危险的药物相互作用。
- 患者得到更好、更个性化的护理。
人工智能在医疗保健中的主要用途
患者病例文件处理
自然语言处理一直是医疗保健部门的福音。事实上,我们已经看到了将 NLP 和光学字符识别引入共享、评估和总结患者病例文件的过程中的一些努力。
传统上,保险组织必须手动批准治疗计划。为了完成这项艰巨的任务,医疗专业人员评估病人的病例档案,以作出决定。为了确保高质量的护理和限制责任,这些文件可能长达数百页,包含从详细的患者健康信息到保险范围细节的所有内容。
通过将机器学习融入这一过程,医疗保健组织大大简化了这一过程。人工智能算法可以自动执行重复的任务,甚至可以用自然的人类语言总结患者资料的重要方面。
诊断和疾病检测
似乎每周,研究人员都在宣布使用图像识别和深度学习进行疾病检测的新方法。到目前为止,人工智能已经被用于检测乳腺癌、早期阿尔茨海默氏症、肺炎、眼病、细菌性脑膜炎和许多其他疾病。
训练深度学习模型来检测疾病的过程可能很复杂。例如,很难积累必要的阳性数据集来训练模型。通过与人工智能公司合作,研究人员可以接触到高技能的数据科学团队,他们可以在整个研究过程中帮助你。在某些情况下,它可以简单到概述您的研究项目目标,开发人员可以开始工作,构建人工智能解决方案,帮助您收集数据和部署诊断模型。
药学研究
虽然疾病检测通常依赖于图像识别模型,但制药研究在更复杂的数据集中发现模式。尽管如此,卷积神经网络在提供新的药物分子方面已经显示出如此大的前景,它们现在被 150 多家初创公司和 40 家制药公司用于支持药物发现过程。
然而,你可能会感到惊讶,这些组织中很少有足够强大的人工智能团队来快速推进他们的研究。研究机构应该让一群人工智能专家和数据科学家来应对你最紧迫的疾病治疗挑战。
个性化患者护理
没有什么比医疗保健更私人的了。然而,随着专业人士看到越来越多的患者,越来越难以提供个性化的护理。好消息是,人工智能与分析和大数据相结合,最终使得在整个行业大规模部署定制护理成为可能。通过部署大分析和高级解决方案,这些新方法正在以更低的成本带来更高质量的护理。
无论你的公司规模如何,人工智能工具都可以大规模提供定制护理。这些工具可以在流程的任何阶段支持医疗保健提供商:从电话上的交互式客户服务代理到诊所或药房中由人工智能驱动的医生助理。
人工智能驱动的医疗设备
由于人工智能将越来越多地在医疗保健领域发挥巨大作用,我们可以预计医院和诊所将越来越多地转向利用人工智能的医疗设备。各种设备都可以被注入人工智能,以简化诊断并确保准确性。未来的医疗设备制造商将找到新的方法,用人工智能为他们的产品提供动力。
这些例子来源于 Manceps 的 医疗保健 AI 服务页面 。Manceps 帮助企业组织大规模部署人工智能解决方案,包括医疗保健提供商。我们甚至有一个关于医疗保健公司如何使用 NLP 的 案例研究。
希望将人工智能引入您的组织?获取我们的免费指南。
我如何向企业解释我的 ML 模型?
3 个框架让你的人工智能更容易解释
可解释性无疑是人工智能领域最热门的话题之一——随着人工智能领域的投资越来越多,解决方案越来越有效,一些企业发现他们根本无法利用人工智能!为什么?简单来说,许多这些模型被认为是“黑箱”(你可能已经遇到过这个术语),这意味着没有办法解释某个算法的结果,至少在我们能够理解的方面。
许多人工智能模型被认为是“黑箱”
向人类解释黑盒模型所做决策的重要性。来源
在下面的图片中,我们可以看到一个复杂的数学表达式,其中有许多运算链接在一起。此图显示了神经网络功能内层的工作方式。似乎太复杂而难以理解,对吗?
来自神经网络的链式数学表达式—通过 Rulex
如果我告诉你,下面的表达式指的是与上面的图像相同的神经网络。更容易理解,对吧?
如果,否则来自神经网络的逻辑—通过 Rulex
简而言之,这是可解释人工智能的本质——我们如何以企业和个人理解的方式翻译训练黑盒模型过程中涉及的复杂数学表达式
这被称为正确的解释,它无疑动摇了公司实施人工智能的方式。
但是随着需求和规则的出现,也出现了针对人工智能可解释性的新解决方案(yeyyy!!)来支持那些希望利用人工智能同时能够解读它们的企业!不再有黑箱,欢迎透明!如果你好奇想知道更多关于我们为什么需要可解释性,我建议去看看这篇文章!
人工智能解释框架
这是一个许多作者已经探索过的主题——2016 年,在 Marco Ribeiro、Sameer Singh 和 Carlos Guestrin 的研讨会工作中,提出了一个关于黑盒模型可解释性的新颖解决方案。提出的解决方案旨在建立两种类型的信任:信任模型提供的预测和信任模型。
从那时起,许多其他框架和工具被提出来,以使人工智能在不同数据类型和领域的可解释性成为现实。今天在这篇博文中,我将介绍石灰、TF-Explain 和假设。
石灰
LIME 由华盛顿大学的研究人员开发,旨在获得算法内部发生的更大透明度,它已经成为可解释人工智能社区中非常受欢迎的方法。
基于预测模型的石灰产量和可解释性。来源
当谈到在低维度数据集上开发模型时,可解释性可能更容易,但当涉及到更高维度时,模型的复杂性也会增加,这使得很难保持局部保真度。 LIME (局部可解释模型不可知解释)不仅解决了模型优化中的可解释性需求,还解决了领域和任务可解释性标准合并的可解释表示的概念。
有几个将 LIME 与常见的数据科学包(如 Scikit-Learn 或 XGBoost)结合使用的例子。在这里你可以用 Scikit-Learn 和 LIME 检查一个关于人工智能可解释性的实际例子。
ou 也可以深入看看 LIME 的工具,在他们的 Github LIME 上。
TF-解释你的模型!
Tf-explain 是一个提供可解释性方法的库。Tf-explain 实现了可解释性方法,同时利用 Tensorflow 2.0 回调来简化神经网络的理解。这个有用的包是由 Sicara 提供给我们的。
该库旨在提供可解释性方法的完整列表,可直接用于您的 Tensorflow 工作流程:
- Tensorflow 2.0 兼容性
- 方法之间的统一接口
- 支持培训整合(回调, Tensorboard )
tf-explain 中实现的方法都是从文献中已知的,如激活可视化、Grad Cam、遮挡敏感度或香草梯度。所有这些风格都是为了图像的可解释性,但是表格数据和时间序列呢?
如果……
可解释人工智能的假设解决方案界面。来源。
如果为了更好地理解 TensorFlow 模型的输出,存在一个具有酷的交互式可视界面的框架,会怎么样?假设工具正是如此。假设您需要分析一个先前部署的模型,您可以,不管它是使用 Tensorflow 还是其他包(如 XGBoost 或 Scikit-Learn)开发的模型。
除了在部署后监控模型之外,您还可以按要素对数据集进行切片,并跨不同切片比较性能,同时确定模型在哪些子集中性能更好或最差。这不仅有助于你的模型的可解释性,也为研究和理解诸如偏见和数据公平性等主题提供了机会。
在这里,您可以查看一个在 Google Colab 中使用的假设分析工具的示例。
最终韧性
毫无疑问,可解释性是一个重要的话题,将成为未来几年公司首先关注的问题之一,这不仅是因为法规,还因为社区和个人对基于人工智能的解决方案的潜力越来越了解和敏感。
然而,尽管过去几年在人工智能可解释性方面已经取得了重大而有趣的进展,但关于如何将获得的解释应用于实践,在方法和理论上仍有挑战需要解决——例如,解释必须超越可视化和对解释质量的客观评估!
可解释方法允许我们深入了解人工智能模型是如何工作的。但是我们寻找的所有答案都是模型工作的方式吗?或者数据质量和可解释性可以发挥巨大作用?
人工智能的改进和合成数据
YData 为数据科学家提供了一个以数据为中心的开发平台,致力于高质量的合成数据。
机器学习算法如何包含更好的因果关系?
使用因果建模工具进行因果发现
近年来,机器学习算法取得了巨大的成功。由于大量数据的可用性和计算速度的提高,它们已经超过了通常的统计方法。
然而,随着我对它们如何工作以及如何应用的了解越来越多,我发现了一个令人惊讶的事实:这些算法大多专注于做出最准确的预测或分类,而不是证明因果关系。
然而,这种关系在决策中至关重要,尤其是在健康、社会或行为科学领域。
考虑以下问题:
- 尼古丁贴片在减少人们吸烟习惯方面有多有效
- 重建政策对贫困地区的发展有什么影响?
- 上一个营销公司对销售增长的贡献有多大?
你可以看到这些问题是因果问题而不是联想问题。他们不仅需要证明因果关系,而且需要量化它。
大多数情况下,使用实验干预:分析师进行调查,收集数据,并用复杂的统计方法进行分析。然而,这些实验在时间和金钱上都很昂贵,在某些情况下甚至会引发伦理问题。
此外,当谈到机器学习算法时,它们通常受到 3 个主要原因的限制:
- 缺乏适应新环境的能力他们没有接受过训练
- 有限的可解释性因为他们给出的预测或建议背后的理由很少,这可能会导致用户的不信任
- 不了解因果关系
那么,有没有其他替代方案呢?
在本文中,我将与您分享我对一些重要的因果建模工具的主要发现,如结构模型、因果图及其关联逻辑。
阅读本文后,您将了解到:
- 因果推理有哪些不同的层次?
- 如何通过图形学习一个因果结构?
- 如何量化因果关系?
相关性并不意味着因果关系
在开始之前,有必要重温一句众所周知的格言:相关性不是因果关系。这意味着你不能仅仅因为观察到两个变量之间的相关性就合理地推断出它们之间的因果关系。
为了说明这一点,让我们考虑一下梅瑟利在 2012 年发表在他的论文巧克力消费、认知功能和诺奖得主 ( 全文在此)中的下图。
正如作者所指出的,一个国家的巧克力消费水平与其人口的认知功能之间存在相关性(r=0.791,p <0.0001). Does it mean that eating more chocolate would make smatter? Unfortunately, probably not!
To put it more precisely, if two random variables X 和 Y 在统计上是相关的 (X ⊥ Y) ,那么要么:
- X 原因 Y ,
- Y 原因 X 或
- 存在第三个变量 Z 导致 X 和 Y 。在这种情况下, X 和 Y 成为独立给定的 Z ,即 X ⊥ Y | Z
这被称为共因原则,由赖欣巴哈于 1956 年提出。
因此,为了真正调查巧克力消费的影响,有必要进行一项实验。例如,这需要强迫一个国家吃更多的巧克力,并观察这是否会导致更多的诺贝尔奖获得者。
如你所见,实验是不可能的。当涉及到健康问题时,它甚至会引发伦理问题。因此,需要其他工具来证明因果关系。
因果推理的阶梯
正如 Pearls 在他的因果推理工作中所发展的那样,因果信息可以分为三个层次。
- 联合
- 干涉;干预
- 反事实
这种层次结构有助于了解每类信息可以回答什么样的问题。
让我们进一步发展每个级别…
1.联想或观察
这是第一级,也是最基本的一级。它依赖于使用可用数据的纯统计关系。
例如,购买面粉的顾客很可能也会购买黄油。这种关联可以使用条件概率和来自观察数据的期望直接建立。如果 x 是购买的面粉数量, y 是黄油数量,那么我们就可以根据数据计算出 P(y|X=x) 。
目前的机器学习方法非常适合回答这种任务。人们可以想到亚马逊和类似公司使用的推荐引擎的有效性。然而,他们的结果很少告诉我们变量之间的实际统计相关性。
2.干预还是行动
这一层次高于联想,因为它不仅在于观察数据,而且在于改变数据。
例如,在我们之前的案例中,有必要进行干预来回答以下问题:如果我们将面粉价格提高两倍会发生什么?
由于价格的这种上涨可能会导致顾客行为的改变,所以不可能仅仅从观察到的数据来回答这个问题。如果 x 是购买面粉的数量 to, y 是黄油的数量,那么我们要计算 P(y|X=do(x)) ,其中 do 表示我们已经干预将 X 的值设置为 x 。
重要的是要记住,当存在共同基础时,即一个变量同时影响因变量和自变量时:
P(y | X = do(X))≠P(y | X = X)
为了说明这一点,考虑顾客购买面粉和黄油只是为了烤一个蛋糕。面粉价格的上涨会使他们根本不去烘焙。
3.反事实还是想象
最后一层由反事实来代表。他们回答了一个典型的问题:如果我采取不同的行动会怎样?因此,他们依赖追溯推理。
例如,我买的面粉的数量是我买了很多黄油的唯一原因吗?还是因为最近的促销?
如果 x 是购买的面粉的数量 to,而 y 是黄油的数量,那么我们要计算 P(y|x'y') ,即假设我们实际观察到的 X 是 x 和,那么事件 Y = y 被观察到的概率
请注意,可以回答反事实问题的模型也可以回答关于干预和观察的问题。这种可能性在相反的方向上不起作用。这就是为什么反事实被放在层级的顶端。
因果发现方法
既然我们已经确定并分类了不同的因果推论,让我们把注意力集中在建立它们的主要方法上。
为此,我们将首先讨论用于建模因果结构的图形模型和用于学习它们的算法。然后,我们将描述量化这种因果关系的方法。
本节末尾将提供一个总结图来综合要点。
通过图形模型对因果结构进行建模
图形模型可以被认为是给定概率分布的依赖结构的映射。
在进入技术细节之前,必须区分两种情况:
- 情况 1: 数据集不包含任何省略变量和选择偏差
- 情况 2: 数据集包含省略变量或/和选择偏差
情况 1:没有遗漏变量,也没有选择偏差
因果结构可以通过有向无环图(DAG)可视化。它是一个由图组成的数学工具,即由节点和有向边组成,不包含任何循环。
然而,相同的数据集及其变量之间的条件(不)依赖关系可能导致多个 DAG 。
让我们考虑下面的例子:我们想找出影响学生成绩的主要因素,并衡量其效果。为了简单起见,我们只取 3 个变量: X 数学的课时数(包括家里的个别课), Y 学生家到学校的距离,Z 学生的数学成绩。我们可以假设 X ⊥ Y | Z
这种假设导致 3 种可能的 Dag:
图 2 —作者的插图
这就是为什么有必要引入一个额外的概念:等价类。这是一组骨架相同但边缘标记不同的图形。DAG 的等价类叫做完全部分有向无环图(CPDAG)。
在 3 个变量的情况下,很容易得出节点的条件(不)相关性。但是当图形包含很多变量时,就需要引入一个额外的工具: d-separation 。
我们来定义 d-分离:
两个节点 X 和 Y 是d-可分离的由 L 组成的一组节点,如果条件作用于 L 中的所有成员,就阻塞了两个节点之间的所有路径。
为了说明这一点,这里有两个例子:
图 3—作者的插图
因此,d-分离的概念为我们提供了定义在图上的(不)依赖关系,这些关系反映了变量之间的条件(不)依赖。
如何基于给定数据集学习 DAG 图?
一个众所周知的算法, PC 算法,在 R 包 pcalg 中提供。基本上,它从一个完整的无向图开始, G0,并执行一系列删除边的条件独立性测试。这就引出了骨架。然后,基于保存在条件集中的信息来引导骨架。
但是,可能会出现两个问题:
- 隐藏变量或混杂变量,即不包括影响变量的变量
- 由于变量和样本的选择而产生的选择偏差
情况 2:省略变量和选择偏差
在这种情况下,我们需要找到一个结构,在给定所选变量的情况下,表示观察变量之间的所有条件独立关系。这意味着我们需要边缘化所有的潜在变量,并能够可视化的条件独立,只有在观察到的变量。
由于边限下 Dag 是不闭合的,我们需要使用另一类图:(MAG)。这个类允许对应于条件独立性的丢失边。同样,部分祖先图* (PAG)是 a MAG 和m-分离的等价类,是 d-分离的推广。***
如何基于给定数据集学习 MAG 图?
学习 MAG 可以通过 FCI 算法(“快速因果推断”)来完成,该算法使用与 PC 类似的方法,但具有更多的条件独立性测试和更多的方向规则。也可以使用 RFCI 算法(“真正快速的因果推断”),这种算法速度更快,但输出的信息通常略少。两种算法均可在 R 封装 pcalg 中获得。
因果效应估计
仅仅观察数据并不能使我们量化一个变量对另一个变量的因果影响。要做到这一点,我们需要测量 Y 的状态,如果 X 被迫取值 x 并将其与 Y 的值进行比较,如果 X 被迫取值 x + δ 。*我们依靠这个对 P(y|X=do(x))的分布。***
当没有隐藏变量和选择偏差时,并且当因果结构是已知的 DAG 时,可以通过使用由 Pearl 开发的被称为“do-calculus】的一组推理规则来获得关于介入分布的信息。**
实际上,因果结构很少为人所知。然而,通过考虑真实因果 DAG 的等价类并在等价内的每个 DAG 上应用 do 演算,仍然有可能进行估计。这给了我们一个有用的近似值。
这些想法被纳入了 IDA 方法(当 D AG 为 a bsent 时 I 介入演算)。
主要发现
想法:机器学习算法必须超越预测,才能真正评估因果关系,回答因果问题。
这一点非常重要,主要有三个原因:
- 能够适应他们没有接受过培训的新环境****
- 向提供更多关于他们预测或建议的解释****
- 提供对感兴趣变量之间因果关系的理解****
在这种情况下,因果推理通过模拟干预的结果和形式化反事实推理超越了预测。
下图提供了本文中讨论的主要工具和算法的总结。****
图 4——摘要图,作者的说明
参考
[1] J. Pearl,因果推理的七个工具,以及对机器学习的反思,ACM 通讯,2019 年 3 月**
[2] F .达布兰德, 因果推理导论 ,2019 年 11 月 30 日
[3] K. Binz, 用 pcalg 进行因果推断,2014 年 4 月 9 日
[4] M. Kalisch 等人, 【用 R 包的图形模型进行因果推断】pcalg ,统计软件杂志,2012 年 4 月
注意:本文旨在涵盖理论概念,并根据网上提供的信息展示实际操作示例。
如何在你的机器学习模型中考虑可解释性?
理解模型行为、解释预测和构建可信模型的分步指南
为什么还要谈赛?
随着 AI 模型越来越复杂,以及这些模型在现实应用中的使用,这些 AI 模型对我们生活的影响是不可估量的。可以毫不夸张地说,这些人工智能模型比我们自己更了解我们!虽然这很惊人,但同时也很可怕。随着算法复杂性的增加,我们正在付出降低可解释性和信任度的代价。这意味着一个模型越复杂,我们越不可能理解它是如何工作的。这是这些人工智能模型被称为黑盒的主要原因:我们不知道这些复杂算法背后的原因。
准确性与可解释性。来源:ExplainX.ai 内部
现实是,这些算法正在成为我们日常生活的一部分:从脸书新闻供稿到抖音,再到我们最近的在线信用卡应用,这些交互都是由强大的人工智能算法驱动的——其中大多数是黑盒。当我们在关键任务用例中积极使用这些算法时,如预测癌症或事故,或根据代表它们的文本评估候选人,我们需要框架和技术来帮助我们导航和打开这些黑盒。
简而言之,模型开发人员需要回答这五个主要问题:
- 为什么我的模型会给出这个预测?
- 我的模型预测与业务/领域逻辑一致吗?如果答案是否定的,那么识别并处理那些更有分量的不相关的特征。
- 我的模型行为在不同的数据子集之间是一致的吗?如果答案是肯定的,那么比较和对比,以确定行为在哪里以及如何变化。
- 我的模型是否偏向数据集内的某个特定特征?如果答案是肯定的,那么找到偏见在哪里,并消除它?
- 我能做些什么来影响预测,或者我能采取什么行动来实现理想的结果?
- 可选:我的模型是否支持审计以符合法规要求? (相关主要针对金融机构)
数据科学家或模型开发人员的角色是自信地回答所有这些问题。负责任地构建这些算法、消除偏见、理解模型行为并确保信任是数据科学家需要完成的核心任务。
我们开始行动吧!
鉴于 xAI 日益增长的重要性,我提供了一个模型可解释性框架来确保 ML 生命周期中的可解释性和公平性。
请注意,我不会在这篇文章中深入探究各种可解释性技术,但是我会发表一系列文章和视频,以一种彻底而有趣的方式介绍可解释性概念。敬请关注。
为了避开框架的范围,我将只关注机器学习生命周期的模型构建&验证阶段。我还假设您已经定义了用例,准备了数据,现在准备好构建模型。
在模型构建和验证阶段,您必须实现两个个人目标:
信心:确保你的模型健壮、可靠、公正。
沟通&信任:与利益相关者分享模型见解
这是五步框架:
- 从可解释的模型开始,逐步发展到黑盒模型
- 定义测试用例以及边缘用例
- 使用可解释性技术来理解模型行为,消除偏见并解释预测——利用 解释
- 通过交互式仪表盘建立叙述并与利益相关方交流结果
- 通过反馈改进你的模型
首先,在高风险的环境中,即使是一个小小的错误也会产生巨大的影响,或者会花费大量的金钱,你应该总是从可解释的模型开始。从黑箱模型开始通常是一场艰苦的战斗。
不管您决定使用哪种类型的模型,从定义测试用例开始——模型应该按照预期行为的用例集。做这个练习来验证你的模型。这一步还需要与其他拥有领域和业务知识的利益相关者合作。
在定义了测试用例之后,更进一步,构建边缘用例——模型行为特别不确定或出乎意料的用例集。对你的机器学习模型进行压力测试是一个很好的策略。
接下来,你应该采用模型不可知的可解释性技术,如 SHAP、反事实、代理决策树、原型或 IG。这些方法提供了全局级别(解释整个模型)和局部级别(模型做出的单个预测)的解释。
不幸的是,有这么多的技术,选择一个正确的是压倒性的。一旦确定了可解释性方法,您就必须对其进行编码、定制以适应您的模型和数据、修复过程中的任何错误、优化速度并使用其他工具集来可视化结果。
每种不同的技术都有自己的挑战。幸运的是,你可以使用explainex,这是一个开源的可解释人工智能库,它在一个屋檐下提供了最先进的模型可解释性技术,并且只需一行代码就可以访问它们——节省了你大量的编码、调试和工作时间。
通过使用这些可解释性技术,您应该从四个方面来描述您的模型:
- 关注整体模型行为
- 关注实例
- 关注特性
- 关注车型对比
这些镜头中的大部分都非常简单,但是你也应该把重点放在特征上,以便更好地理解你的模型。通过分析特征排名,您可以快速测试模型的合理性和适用性。此外,解释一个模型是有帮助的,但是比较和对比两个或更多的平行模型更有效。它帮助您逐步构建、比较和完善您的模型。
在你从多个角度理解了你的模型之后,是时候与利益相关者交流你的叙述了。这里的目标是通过反馈改进你的模型,并获得他们的信任。请记住,交流将是反复的,反馈对于帮助您进一步优化模型性能至关重要。
理想情况下,使用利益相关者可以理解的语言和表示来共享具有洞察力的交互式仪表板。利益相关者应该能够无缝地添加他们的评论或要求澄清。
让那里有光
坚持到最后的荣誉。解释和调试黑盒机器学习模型是一项艰巨的任务。但是有了正确的框架和解释技巧,你很快就能做到。对你来说好消息是:explax是开源的。
在下一篇文章中,我将分享一个部署、维护和使用阶段的可解释性框架。
在那之前,让那里有光。
我们如何消除人工智能算法中的偏见?钢笔测试宣言
苹果、高盛和威斯康星州立大学被指控使用有偏见的人工智能。我们能保证人工智能没有偏见、种族主义和成见吗?
图像来源:像素
信用评分 AI 中的性别偏见?
几个月前,美国的许多苹果卡用户报告说,尽管他们和他们的伴侣拥有相同的收入和信用评分,但他们的品牌信用卡却被分配了非常不同的信用额度(见 BBC 文章)。苹果公司的联合创始人史蒂夫·沃兹尼亚克在推特上写道,他的信用卡信用额度是他妻子的十倍,尽管这对夫妇在他们所有其他的信用卡上都有相同的信用额度。
金融服务监管机构纽约金融服务部正在调查用户性别可能是造成差异的原因的指控。苹果热衷于指出高盛对算法负责,这似乎与苹果的营销口号“由苹果创造,而不是银行”不一致。
由于监管机构的调查仍在进行中,还没有证据表明存在偏见,所以我在这篇文章中只是假设性地写了些东西。
司法系统使用人工智能的偏见
图片来源:像素
苹果卡的故事并不是最近算法偏差登上头条的唯一例子。去年 7 月,美国全美有色人种协进会(全国有色人种协进会)签署了一份声明,要求暂停使用自动化决策工具,因为其中一些工具被证明在用于预测累犯率——换句话说,预测罪犯再次犯罪的可能性——时存在种族偏见。
2013 年,埃里克·卢米斯被判处六年监禁,此前威斯康星州使用了一个名为 COMPAS 的程序来计算他再次犯罪的几率。COMPAS 是一种专有算法,其内部工作原理只有其供应商才知道。卢米斯试图在威斯康星最高法院挑战该算法的使用,但他的挑战最终被驳回。
不幸的是,诸如此类的事件只会恶化人工智能作为一种危险工具的广泛看法,它不透明,监管不足,能够编码最糟糕的社会偏见。
一个人工智能怎么会有偏见、种族歧视或偏见?哪里出了问题?
我将在这里集中讨论贷款申请的例子,因为这是一个比较简单的框架和分析问题,但我提出的观点可以推广到任何类型的偏见和受保护的类别。
我想首先指出,我强烈怀疑苹果或高盛的任何人坐下来制定了一套明确的规则,在贷款决策中考虑性别因素。
首先,让我们想象一下,我们正在创建一个预测一个人拖欠贷款概率的机器学习模型。有一些“受保护的类别”,比如性别,我们不允许歧视。
开发和训练贷款决策人工智能是 Kaggle(一个让你参与数据科学竞赛的网站)上经常出现的那种“香草”数据科学问题,有抱负的数据科学家可以期待在工作面试中被问到。制造机器人信贷员的方法如下:
假设您有一个 10,000 行的大表,都是您的银行过去见过的贷款申请人的信息:
潜在贷款申请人的数据表示例。
最后一列是我们要预测的。
您可以将这些数据分成三组,分别称为定型集、验证集和测试集。
然后,您选择一种机器学习算法,如线性回归、随机森林或神经网络,让它从训练行中“学习”,而不让它看到验证行。然后在验证集上测试它。对不同的算法进行清洗和重复,每次都调整算法,最终部署的模型是在验证行中得分最高的模型。
完成后,您可以在测试数据集上测试您的模型,并检查其性能。
删除一列并期望偏见从人工智能中消失的谬论
现在,很明显,如果“性别”列出现在训练数据中,那么就有建立有偏见的模型的风险。
然而,苹果/高盛的数据科学家可能从一开始就将该列从他们的数据集中删除了。
那么,数字货币贷款人怎么还会有性别偏见呢?我们的算法肯定没有性别歧视,对吧?毕竟,它甚至不知道申请人的性别!
不幸的是,与直觉相反的是,偏见仍然有可能蔓延开来!
我们的数据集中可能有代表性别的信息。例如:目前工作的任期,薪水,尤其是职称都可能与我们的申请人是男是女有关。
如果有可能在你的净化数据集上训练一个机器学习模型,以任何准确度预测性别,那么你就在冒你的模型意外带有性别偏见的风险。您的贷款预测模型可以学习使用数据集中关于性别的隐含提示,即使它看不到性别本身。
无偏见人工智能宣言
我想对人工智能开发的工作流程提出一个补充:我们应该从不同的角度攻击我们的人工智能,试图在部署它之前发现任何可能的偏差。
仅仅从数据集中删除受保护的类别,掸掉手上的灰尘,然后认为“任务完成”是不够的。
人工智能偏向笔测验
当我们开发一个人工智能时,我们也需要唱反调,而不是试图消除偏见的原因,我们应该试图证明偏见的存在。
如果你熟悉网络安全领域,那么你应该听说过笔式测试或渗透测试的概念。一个没有参与开发您的系统的人,可能是一个外部顾问,试图入侵您的系统来发现漏洞。
我建议我们应该引入人工智能笔测试:一种类似于发现和消除人工智能偏差的笔测试:
人工智能笔测试会涉及到什么
为了测试人工智能的偏见,外部人员或内部数据科学家(不参与算法开发)将尝试建立一个预测模型来重建被删除的受保护类别。
所以回到贷款的例子,如果你从数据集中删除了性别,测试笔的人会尽最大努力建立一个预测模型把它放回去。如果他们能够以任何程度的准确性重建性别,反映出如果你无意中推出了性别歧视的贷款预测模型,你本来会花在损失控制上的钱,或许你应该给他们奖金。
进一步的人工智能偏差压力测试
除了上面的笔测试,我建议进行以下进一步检查:
- 将数据按性别分类。
- 评估每个性别的模型的准确性。
- 识别任何高估或低估任一性别违约概率的趋势。
- 根据性别确定模型准确性的任何差异。
进一步措施
我还没有谈到人工智能偏见的一些更明显的原因。例如,训练数据本身可能是有偏差的。在刑事司法系统中使用的一些算法的情况下,这是非常可能的。
如果你发现了偏见,该怎么办?
让我们假设你已经发现你训练的算法确实表现出对性别等受保护类别的偏好。减轻这种情况的方法有:
如果 pen-test 显示另一个输入参数(如职位)作为性别的代理,您可以删除它,或者尝试模糊它与性别相关的方面,或者进一步净化数据,直到 pen-tester 无法重建性别。您可以对 pen-test 的结果进行反向工程,以人为改变您的训练数据,直到性别不再可发现。您可以手动纠正模型的内部工作方式来补偿偏差,也可以检查训练表中的偏差。如果你的人工智能从有偏见的数据中学习,那么我们不能期望它是无偏见的。如果你对女性的预测不如男性准确,那么很可能你对男性的训练数据比女性多。在这些情况下,您可以使用数据扩充:复制数据中的每个女性条目,直到您的训练数据集达到平衡。您还可以为代表性不足的类别收集额外的训练数据。你可以试着让你的模型变得可以解释,并找出偏见在哪里蔓延。如果你对机器学习可解释性的更多细节感兴趣,我邀请你也阅读我之前关于可解释 AI 的帖子。
题外话…招聘中的偏见?
我有兴趣进一步研究这种方法的一个应用,就是如果你在招聘中使用机器学习,如何消除偏见。想象一下,你有一个将简历与工作匹配的算法。如果它无意中发现了人们简历中与产假以及性别相对应的空白,我们就面临着歧视性人工智能的风险。我想这可以通过上面的一些建议来弥补,比如调整训练数据和人工消除这种信号。我认为笔式测验将是应对这一挑战的有力工具。
公司如何避免偏见再次出现?
如今,大公司非常清楚不良公关传播的可能性。因此,如果 Apple Card 算法确实有偏差,我很惊讶在发货前没有人更彻底地检查算法。
贷款限额因性别而相差 10 倍是一个惊人的错误。
如果参与贷款算法的数据科学家,或者威斯康辛州使用的累犯预测算法,按照我上面的清单对他们的算法进行钢笔测试和压力测试,我想他们会在公关灾难有机会成为头条新闻之前发现它。
当然,事后指责很容易,大工业中的数据科学领域还处于起步阶段。有人会称之为监管不足的西部荒原。
我认为,我们也可以感到高兴的是,医疗保健等一些保守行业尚未在重要决策中采用人工智能。想象一下,如果黑色素瘤分析算法或羊膜穿刺术决策模型被证明有种族偏见,会有什么后果。
出于这个原因,我强烈建议将算法发布到野外以做出重要决策的大公司开始分离出一个数据科学家团队,他们的工作不是开发算法,而是对算法进行笔测试和压力测试。
开发模型的数据科学家承受着太多的时间压力,无法自己完成这项工作,正如网络安全行业通过多年的经验发现的那样,有时最好让外部人员唱反调,试图打破你的系统。
参考
[1] S. Natarajan 和 S. Nasiripour,关于 Apple Card 的病毒推文导致高盛调查 (2019),彭博
[2] 苹果“性别歧视”信用卡被美国监管机构调查 (2019),BBC
[3] 州诉卢米斯 (2017),《哈佛法律评论》
如何解释图形神经网络—gnnexplaner
PyTorch Geometric 中实现的节点和图形解释的 GNNExplainer 的分步指南。
图形神经网络(GNN)是一种可以直接应用于图形结构数据的神经网络。我之前的帖子简单介绍了一下 GNN。读者可以通过这篇文章了解更多细节。
许多研究工作显示了 GNN 理解图形的能力,但是 GNN 是如何工作的以及为什么工作的对大多数人来说仍然是一个谜。与 CNN 不同,在 CNN 中,我们可以提取每一层的激活来可视化网络的决策,而在 GNN,很难对网络学习了什么功能做出有意义的解释。为什么 GNN 确定一个节点是 A 类而不是 B 类?为什么 GNN 确定一个图形是化学物质还是分子?似乎 GNN 看到了一些有用的结构信息,并根据这些观察做出了决定。但现在的问题是,GNN 看到了什么?
GNNExplainer 是什么?
简而言之,它试图建立一个网络来学习 GNN 人所学的东西。
GNNExplainer 的主要原理是减少图中不直接影响决策的冗余信息。为了解释一个图,我们想知道图中影响神经网络决策的关键特征或结构是什么。如果一个特性很重要,那么预测应该通过删除或用其他东西替换这个特性来进行很大程度的修改。另一方面,如果移除或更改某个特征不会影响预测结果,则该特征被视为不重要,因此不应包含在图表的解释中。
它是如何工作的?
GNNExplainer 的主要目标是生成一个最小图来解释一个节点或一个图的决策。为了实现这个目标,该问题可以被定义为在计算图中找到一个子图,该子图使用整个计算图和最小图来最小化预测分数的差异。在本文中,这个过程被公式化为最大化最小图 Gs 和计算图 G 之间的互信息(MI ):
此外,还有一个次要目标:图形需要最小化。虽然在第一个目标中也提到了,但是我们也需要一个方法来制定这个目标。该论文通过增加边数的损失来解决这个问题。因此,GNNExplainer 的损失实际上是预测损失和边缘尺寸损失的组合。
解释任务
本文讨论了三种类型的解释:一个节点的解释、一类节点的解释和一个图的解释。主要区别在于计算图表。
对于单个节点的解释,计算图是其 k 跳邻居,其中 k 是模型中的卷积数。
对于一类节点的解释,建议选择一个参考节点,用同样的方法计算解释。可以通过取其特征最接近具有相同类别的所有其他节点的平均特征的节点来选择参考节点。
为了解释整个图,计算图成为图中所有节点的计算图的并集。这使得计算图等同于整个输入图。
面罩接近
最小图 Gs 的学习是通过学习用于边的掩码和用于特征的掩码。也就是说,对于计算图中的每个边,在 edge_mask 中存在确定边的重要性的值。同样,对于结点要素中的每个要素,feature_mask 确定该要素对于最终决策是否重要。
简短的摘要
有了这些概念,我们可以为 GNNExplainer 总结一切:
- 我们需要提取计算图,它是节点分类的 k 跳邻居,或者是图分类的整个图。
- 为计算图中的每条边初始化一个 edge_mask,为每个特征尺寸初始化一个特征 mask。
- 构建一个神经网络,该网络学习具有上述损失的边缘 _ 掩码和特征 _ 掩码。
- 使用 edge_mask 和 feature_mask 将计算图形缩减为最小图形。
在 Pytorch 中实现 GNNExplainer
这就是我们在实现 GNNExplainer 之前需要知道的一切。综上所述,我们正在尝试学习边 _ 掩码和节点 _ 特征 _ 掩码,它们从计算图中移除一些边和特征,同时最小化预测得分的差异,所得的图是解释节点或图的决策的最小图。
我将在 Pytorch Geometric(PyG)中实现这一点。PyG 的一个很大的优点是它更新非常频繁,并且有许多当前模型的实现。令人惊讶的是,我发现 GNNExplainer 已经在 PyG 库中实现了,这节省了我很多时间。尽管它只适用于节点解释,但由于它是开源的,因此不难将其修改为也适用于图形解释。
节点解释器
首先,我们需要安装 PyG。GNNExplainer 目前还没有发布(PyG 1.4.4 ),但是代码已经在 Github 中发布了。所以要获得 GNNExplainer,你必须从他们的 Github 库克隆并从那里安装。
示例代码在 PyG 网站上提供。这很容易理解,所以我不打算在这篇文章中展示代码。但是实现细节是我们想要检查的,并在之后用于图分类。
我将根据我上面的简短总结来追踪代码。示例代码将节点索引以及完整的特征矩阵和边列表传递给 GNNExplainer 模块。
explainer = GNNExplainer(model, epochs=200)node_idx = 10node_feat_mask, edge_mask = explainer.explain_node(node_idx, x, edge_index)
GNNExplainer 中发生的事情正是我们在上一节中讨论的。
- 提取计算图
为了解释一个节点,我们首先需要得到它的 k 跳计算图。这是通过PyG 中的 ** 子图 __()** 方法完成的。
x, edge_index, hard_edge_mask, kwargs = self.__subgraph__(
node_idx, x, edge_index, **kwargs)
hard_edge_mask 移除 k-hop 邻域之外的所有其他边缘。
2.掩码由 set_mask() 方法初始化,并应用于网络的每一层。
self.__set_masks__(x, edge_index) **def** __set_masks__(self, x, edge_index, init="normal"):
(N, F), E = x.size(), edge_index.size(1)
std = 0.1
self.node_feat_mask = torch.nn.Parameter(torch.randn(F) * 0.1) std = torch.nn.init.calculate_gain('relu') * sqrt(2.0 / (2 * N)) self.edge_mask = torch.nn.Parameter(torch.randn(E) * std) **for** module **in** self.model.modules():
**if** isinstance(module, MessagePassing):
module.__explain__ = **True**
module.__edge_mask__ = self.edge_mask
3.使用经过训练的模型执行初始预测,然后将预测用作标签来训练 GNNExplainer。
*# Get the initial prediction.*
**with** torch.no_grad():
log_logits = self.model(x=x, edge_index=edge_index, **kwargs)
pred_label = log_logits.argmax(dim=-1) # Train GNNExplainer **for** epoch **in** range(1, self.epochs + 1):
optimizer.zero_grad()
h = x * self.node_feat_mask.view(1, -1).sigmoid()
log_logits = self.model(x=h, edge_index=edge_index, **kwargs)
loss = self.__loss__(0, log_logits, pred_label)
loss.backward()
optimizer.step()
4.损失的定义是
**def** __loss__(self, node_idx, log_logits, pred_label):
loss = -log_logits[node_idx, pred_label[node_idx]]
m = self.edge_mask.sigmoid()
loss = loss + self.coeffs['edge_size'] * m.sum()
ent = -m * torch.log(m + EPS) - (1 - m) * torch.log(1 - m + EPS)
loss = loss + self.coeffs['edge_ent'] * ent.mean()
m = self.node_feat_mask.sigmoid()
loss = loss + self.coeffs['node_feat_size'] * m.sum()
ent = -m * torch.log(m + EPS) - (1 - m) * torch.log(1 - m + EPS)
loss = loss + self.coeffs['node_feat_ent'] * ent.mean() **return** loss
图形解释器
目前的实现是 PyG 只是为了节点解释。但是理解了背后的原理,重新编写图形解释函数就不难了。
我们只需要替换几个函数:1)我们需要替换 subgraph function 来获得整个图的计算图。2)我们需要为整个图形设置遮罩。3)我们需要改变损失函数来计算图的损失。
完整的代码实现可在这个 Github 链接获得。
结论
GNNExplainer 提供了一个框架来可视化一个 GNN 模型学到了什么。然而,实际的解释结果可能不足以解释一个巨大的图形,因为最佳解释的搜索空间比一个较小的搜索空间大得多。除了拟合神经网络之外,也可以应用其他搜索技术来寻找借用相同概念的最佳解释,并且性能还有待证明。
参考:
GNNExplainer:为图形神经网络生成解释,https://arxiv.org/abs/1903.03894
Pytorch 几何,https://pytorch-geometric.readthedocs.io/en/latest/
我们如何影响幸福?
使用机器学习找出从哪里开始
我参加了一个沉浸式数据科学训练营,学习如何更好地利用数据帮助解决 T2 的贫困问题。这个仪表盘(想不到吧?但只有桌面兼容)是在结合了来自 6 个不同来源的 27 个数据集,并使用 Python、Tableau 和优秀的旧 Excel 建立了一个推理(有时是预测)机器学习模型之后的输出。哒哒!
如果你在社会影响/非营利领域和/或数据领域,这篇文章概述了我是如何(以及为什么)着手做这件事的。这本书很长,而且很有技术含量,但我希望它值得你去读。
如果你说“不,去他妈的!”如果你想看看从中有什么发现,直接跳到最后,看看这个模型的发现和局限性。
对于编码人员: 如果你感兴趣,这里有GitHub 链接,包含所有代码、数据和 Tableau 仪表板文件。
“奇特”仪表板的快照(如果你之前懒得点击链接)——作者截图
放弃
如果你真的看了一下仪表板,一些警钟可能已经响起。这是公平的。不,我并没有声称已经通过这个仪表盘解决了贫困问题,远远没有。有许多假设、免责声明和不完善之处吞没了它的一切。这也恰好是影响空间的固有性质——很难定义和衡量“影响”
但这并不意味着我们不能尝试。
设置(“为什么”)
我相信,数据是决策的未来。
这种信念驱使我在过去的一年里去伦敦参加了为期三个月的沉浸式数据科学训练营。
我已经,在某种程度上,知道我要做什么——我想专注于解决多维贫困;首先通过我自己的社会企业,然后,如果失败了,通过任何最有意义的方式。
在为非营利组织工作了两年后,我突然意识到,平均而言,impact space 没有足够的技术专长。我记得我工作过的一个组织雇用了一个家伙,给他的电子邮件地址是“fellow3@company.org”。我是“financefellow@company.org”。
我们有很多心脏,但我们没有足够的工程师、数据科学家、财务专家、图形设计师和其他技术人员来有效地运营任何类型的组织。
我不想成为那种陈词滥调。我喜欢数据,如果我要创办一家社会企业,我希望站在最新科技的前沿,而不是落后。
问题是
T2 有超过 13 亿人处于多维贫困状态。这个“多维”的东西是什么意思?这就是——贫困的概念有多个层面——健康、教育、生活水平和往往无法衡量的层面——尊严。这不像 T4 极端贫困那么简单,极端贫困是指每天收入低于 1.90 美元的所有人。
我们如何尽快解决这个问题?在过去的几十年里,贫困已经大大减少,但仍有很长的路要走。那么,我们如何加快这一进程呢?
多边组织(联合国、世界银行、国际货币基金组织)、各国政府以及通过有争议的企业社会责任方式(仍然有效)做了很多工作。
作者图片
这些玩家也在收集大量数据——不一定干净或容易收集,但确实有数据。
不过,我的假设是,这种高水平的全球数据还没有足够的综合。从上面倒过来的蓝色三角形可以看出,这就是需要更多关注的差距。这是连有效利他主义运动都认为是正确的——全球优先研究是影响空间最紧迫的问题之一。
那么,综合所有的全局、宏观数据来看,哪些 可控因素 对多维贫困有 最高影响 ?我能使用 机器学习 在数据瀑布中找到任何 有意义的关系吗?
我运行了一个由影响力领域的关键人物组成的焦点小组的问题陈述,这些人是社会企业家和影响力投资者,他们也参与了这场游戏。他们的本能反应是,“等等,什么?”
人们坚信答案就在实地,而不是隐藏在一些收集不当的全球数据中。我不反对这一点。无论数据显示什么,干预措施在大规模实施之前都需要在当地进行测试,特别是因为大多数时候,生命处于危险之中。
此外,还有研究结果的“可移植性”——仅仅因为它在过去或在肯尼亚有效,并不意味着它在今天或在印度也会有效。我并不反对这些。
但如果这个“收集不良”的全球数据给了我们 起点 呢?如果他们给我们比直觉或轶事证据更好的假设来测试呢?我们能否利用机器的力量告诉我们一些大脑无法进行物理计算的事情?
这个想法
作者图片
因此,我的想法是尽可能多地收集尽可能多国家的宏观数据,使用回归模型(机器学习)分离出 10-15 个最有效的因素/指标,看看我是否可以再次使用机器学习在这些分离的因素和多维贫困之间建立推理关系(见上图)。然后,当我有了这种关系,创建一个实际上可以被非技术用户使用的仪表板。
听起来很直接,对吧?理论上也许是,但我必须弄清楚很多:
A) 多维贫困的目标变量是什么。我预测/试图理解的度量标准是什么?
B)我可以在哪里找到影响这个贫困指标的所有因素或数据(以及当我找到它时如何合并和清理它)。
C) 如何找到这些可控因素与多维贫困之间的可靠关系。以及如何把所有这些都放到一个漂亮的可用仪表盘上。****
a)决定多维贫困的衡量标准
联合国开发计划署有一个多维贫困指数,称为多维贫困指数。你以为我会用这个,对吗?是的,那是计划。但是没有足够的相关年份的数据,没有足够的覆盖国家,计算起来也很复杂。算了吧。
我可以用极端贫困——它很容易得到,有很多数据点,但它是一维的,与我所代表的一切都背道而驰。把那个也划掉。
然后我看到了人类发展指数 (HDI),有种耶稣回来了的感觉。它是多维的,因为它考虑了教育、医疗保健和收入(非常接近 MPI),有许多数据点与它相关联,跨越许多年和国家,并且它相当容易计算。是的,它没有具体衡量贫困,但它确实衡量了幸福,是的,它不是一个完美的衡量标准,但让完美不要成为好的敌人。
哒哒!有时候你需要的只是一点合理化。
b)找到数据(并清理数据)
接下来,我不得不从万维网上搜集数据。我找到了来源。我不得不在某个时候停下来,因为这个数据收集的过程可能是无止境的。最后,我从 6 个不同的来源收集了 27 个数据集的数据,这些数据跨越了 147 个国家 59 年的时间,包含了大约 800 个因素/特征/指标。
****对于 Python 编码人员:有一个很酷的世界银行数据包装器,你可以用它在 Python 本身中进行大量数据提取。另外,你可以在这里找到我收集、清理和合并的所有数据,以及代码(Jupyter 的笔记本叫做“A —合并数据”)。
我知道这听起来令人印象深刻,但其中也有许多垃圾——许多(许多)空值、许多偏差、重复因子和高度相关(彼此密切相关)的因子。所有数据科学家都知道,所有这些都需要处理。这并不总是一个有趣的过程,但它非常重要。
我使用 Python 和 Excel 来清理和合并数据——这并不难。然而,空值是我的数据集中的毒瘤。
在合并和清理(某种程度上)数据之后,它看起来是这样的:
作者截图
它有超过 800 列和 4000 行,但是正如你所看到的,也有很多空值。空值的问题是,如果任何行或列有空值,它对机器学习不友好。您要么删除空值(并希望留下足够的数据),要么尝试智能地填充它。
我的数据集中有太多的空值,如果我删除所有的空值,我将丢失所有的行和列,也就是所有的数据。那可不行。
所以为了给我的项目带来希望,我必须用一些逻辑来估算值。感谢上帝有了机器学习。我利用机器的力量,根据每个国家可用的其他信息,为那些该死的空值生成近似值。这是一个相当复杂的过程,但这是插补过程后上述相同样本的样子:
作者截图
现在你可能在想,“等等,什么?你刚刚凭空创造了数据吗?而你要用这些假数据来解决贫困?”
是的,这肯定是一个危险信号,但是有一个解决方法。只要我们使用真实数据来衡量我们的机器学习模型的准确性(即作为“测试”集),我们就可以减轻估算数据导致我们偏离的风险。我们会继续讨论这个问题。
对于 Python 程序员: Sklearn 有一个令人难以置信的迭代估算器,它仍处于实验阶段,但就我的意图和目的而言,它工作得完美无缺。估算器的 sklearn 文档可以在这里)找到,你可以在我的 Github 这里看到我是如何使用它的(在 Jupyter 笔记本“B-输入缺失值”中)。在估算过程中,我必须提取 147 个国家的数据,并估算每个国家的值。上面的文件还包含了与该过程相关的所有函数。
在清理、合并、估算和丢弃空值(甚至不可估算)之后,我的最终数据集是一个整洁的 1,353 行 x 513 列,跨越 46 个国家 28 年,有 500 多个因子/特征。
c)分离出主要因素,并找到与幸福的最佳关系(模型)
现在我们有了数据,是时候进入数据科学的核心了。该过程的第一部分是分离出前 10-15 个因素。为什么?因为如果我要为非编码用户构建一个仪表板,它不可能有 500 个要切换的因素。这可能会让用户精神错乱,但更重要的是,远离我的仪表盘。所以我不得不减少这些因素。怎么会?
我用来筛选这些因素的标准有三点:
- ****影响力(如果这是一个词的话):这些因素与幸福感的相关性有多强。例如,腐败与幸福更相关(相反)还是与失业更相关?我使用机器学习算法对每个因素的影响进行排序。
- 可控性:企业家或个人能在合理的范围内影响这个因素吗?我没有使用任何花哨的数据科学,只是我的直觉。魔法也有其局限性。
- ****不相关:这些因素可能 而不是 与 HDI(幸福指数)和其他因素密切相关。因为如果他们是,那就太容易作弊了。
作者图片
****对于 Python 编码人员:为了提取因素的影响,我被限制使用那些推理性的 ML 算法,即那些给我系数或特征重要性的算法。所以我不能使用神经网络或 KNN,但我运行了一系列推理回归器——套索、脊、弹性网、决策树(用 AdaBoost 堆积)和支持向量机。
我的目标变量是 HDI,我的 X(预测矩阵)包含了数据集中所有的 511 个因素。我的测试集主要由真实值(非估算值)组成,这降低了估算数据污染模型的风险。
在运行了所有的模型之后,最好的模型碰巧是 LassoCV(这种情况经常发生),它在测试集上给了我 0.94 的 R2 分数和 0.98 的分数。因为我使用的是年度数据,所以我也运行了时间序列交叉验证,这给了我 0.97 的测试分数。所以,总的来说,模型看起来不错。
你可以在我的 Github 项目页面这里找到这个(在 Jupyter 笔记本“C-挑选预测器&最终模型”里)。
这是一个超级迭代的过程。我运行了许多机器学习模型,每一次,它们都会出现一两个新的因素,要么与人类发展指数的组成部分高度相关(例如,GDP 与用于计算人类发展指数的人均国民总收入高度相关),要么是而不是必然可控的东西(不确定一个企业家如何能够改变大片土地,除非你是迪拜,并且能够建造岛屿)。所以,我不得不放弃这些因素,再次运行模型。再一次。再一次。
另一个问题是,10-15 个因素太少了,所以最终,经过一场木兰式的大规模斗争,我陷入了一个黑洞,有一段时间,我将 511 个因素缩小到以下 19 个因素,这些因素在某种程度上符合我之前强调的标准:
作者截图
这些因素/预测因素绝不是完美的,您可以根据自己的喜好插入和使用其他因素,但对于这个练习,这些因素似乎是可行的。
好了,现在进入这一步的第 2 部分——使用这 19 个独立因素建立最终模型。
正如你现在所知道的,我们正试图使用人类发展指数(HDI)作为我们的目标变量来预测福祉。理解 HDI 是如何计算的很重要。
作者图片
人类发展指数由四个组成指标组成——出生时预期寿命、平均受教育年限、预期受教育年限和人均国民总收入。有一些稍微复杂的公式用于获取这些组件指标并计算 HDI,我们非常欢迎您通过访问这里来探索这些公式。
我们的目标是预测这些指标,然后用这些预测来计算人类发展指数。这将是构建具有孤立(“顶部”)因素的最终模型的基础。它将为每一个将与人类发展指数挂钩的组成指标纳入 4 个微型模型。大概是这样的:
作者图片
是时候做模特了!
****对于 Python 程序员:这里的护栏是我只能使用一种类型的机器学习算法。这是因为无论我得到什么输出,我都必须能够将其导出到 Tableau 中,以便能够创建一个交互式仪表板。因为我没有的 Tableau 服务器,我用的是的 Tableau Public (免费!!)为了构建 dash,我不能使用 TabPy (一个允许你动态运行 Python 代码并在 Tableau 中显示可视化效果的库/工具)。TabPy(在撰写本文时)只适用于 Tableau 服务器,价格为$$$。这基本上意味着我只能使用线性回归模型,因为线性回归给了我一个方程。一旦我有了这个方程的系数和截距,我就可以将它们导出到一个 CSV 中,并使用它在 Tableau 中构建相同的线性回归方程。是的,这是复杂的,是的,我希望塔比与 Tableau 公共工作。
但你不会放弃,你会适应。
对于那些不熟悉机器学习的人来说,一个用于评估机器学习模型/算法的常见度量标准被称为 R 平方 (R2)。你可以随意阅读更多的相关内容,但是在这篇文章中你需要知道的是,R2 1 分意味着这个模型是完美的,0 分意味着它很糟糕。所以我们希望 R2 分数接近 1** 。**
在构建、调整和优化机器学习模型之后,我的模型的最终得分如下:
作者图片
健康的模特,对吧?呜哇!
如果你想知道为什么组件模型的分数比人类发展指数的最终分数低,那是因为这些组件被用来计算其他指数,然后这些指数被加权来计算人类发展指数,在整个过程中,我们的模型在抽象后表现相当好。
****对于 Python 编码者:上面绿色的分数代表只包含真值(非估算值)的测试集的分数。这样做是为了降低在我的训练数据中使用估算值的风险。
对于四个组成模型(预期寿命、平均受教育年限、预期受教育年限和人均国民总收入),我再次使用了 LassoCV。我使用 GridSearch 进一步优化了这些模型。我不得不减少一些因素/特征的偏斜度,通过记录高度偏斜的因素来做到这一点。如果因子的偏斜度大于 1,那么它们就是“高度偏斜的”。
一旦调整了四个模型,我就用它们的预测按照开发计划署的公式计算人类发展指数。然后,我将计算出的人类发展指数数据与实际的人类发展指数数据进行对比,结果显示我的 R2 得分为 0.97。总的来说,分数相当不错。
你可以在我的 GitHub 项目页面这里找到更多细节(在 Jupyter 笔记本“C-挑选预测器&最终模型”中)
模型建立了。分数不错。现在是时候把这个模型输出到一个花哨的画面中了。
d)将所有内容融入 Tableau,构建一个交互式仪表盘
这个仪表板的目标是将机器学习的能力放到一个并不真正知道如何编码的用户手中。如果我能给我的目标受众一个使用起来有些直观的 dash,我构建的机器学习模型将更具可扩展性。
那么谁是我的目标受众呢?主要是社会企业家,其他在影响力领域工作的人是次要的。
这对他们有什么用?也许这能给我的目标受众一个工具,让他们了解不同的可控因素是如何影响幸福的。例如,如果他们减少了 5%的腐败,对福利的大致影响是什么?或者,如果他们将农村电气化提高到 100%,他们所选择的国家的福祉会发生怎样的变化?所有这些都将基于跨越 28 年、涵盖 122 个国家的所有类型的数据,并且将由使用机器学习计算的关系来驱动,这是人类无法在大脑中(或手动或在 Excel 中)完成的。*
显然,这不是一段完美的关系。但正如我前面提到的,这是他们可以用来作为当地基层研究的起点的东西。这就是我打算如何使用它。
在 Tableau 中制作性感的仪表盘相对容易,因为它是一个点击式软件。但是,正因为如此,它也相当严格。因为我使用的是免费的公开版本的软件,所以我能做多少有趣的东西受到了一些限制。
本质上,我必须将机器学习模型从 Python 导出到 Tableau 中可消化的格式。我还必须以这样一种方式构建仪表板,即我可以从用户那里获取信息(或输入)。我想给用户开关,他们可以切换,并立即看到如何改变一个因素会影响福祉。
经过大量的努力,这是的最终输出(你可能一开始就点击了,也可能没有点击,如果你在手机上,肯定没有,因为它只在桌面上有效)。如果你已经看到了这篇文章,我希望你能看看,如果你有任何想法,请不要犹豫,分享出来。它并不完美,有点笨拙,但可能有用。如果是(或者不是),让我知道(或者不知道)。
我自学了 Tableau 如果你愿意花时间,这并不太难。YouTube 上有很多有用的视频,Tableau 自己也有一堆培训材料,这可能是一个很好的开始。你可以在 GitHub 项目页面的上找到我使用的 working Tableau dashboard 文件。
****对于 Python 编码者/ Tableau 专家:前面说过,我受到了 Tableau Public 的限制。如果我有 Tableau Server,我可以使用tabby并利用更复杂的模型。不过最后,我的分数相当不错,所以我并不大惊小怪。的。dash 的 twbx 文件在本项目的 GitHub 页面上。尽情享受吧!
调查的结果
我即将成为一名社会企业家。所以我差不多是这个仪表板的目标受众。我学到了很多。这可能看起来有点争议,但是你必须意识到这并不完美;它应该仅仅是为了缩小进一步的地方、基层研究的起点。
- ****农村电气化可能改变游戏规则。根据这个模型,它似乎对幸福有最大的影响。对印度来说,如果我们将农村电气化从 77%提高到 100%,我们可以看到整体福利增加两个百分点。
- 政府需要在医疗保健上投入更多。这也与幸福感密切相关。对印度来说,如果我们将政府人均医疗支出增加两倍,我们的福祉将提高两个百分点。这看起来很小,但目前印度在人口上的人均支出很少(约 61 美元),而大多数高收入国家的人均支出超过 2500 美元。
- ****青春期女性(15-19 岁)的高生育率对幸福有很大的负面影响。这似乎是显而易见的,也是意料之中的,对幸福有着很高的重要性。减少少女怀孕很重要。
- 我们需要减少对农业的关注。根据模型,农业、林业和渔业增加值的增加可能导致福利的减少。这似乎有点争议,但它凸显了世界正从一个农业社会转向一个更加以服务为基础的社会。****
- ****小学入学率不足和教育不平等是真正的福祉障碍。这并不奇怪,教育就是一切——只不过这需要一代人或更多的时间来影响变化。
- 依靠政府投资教育可能不是解决问题的办法。再次,有点争议,但似乎政府在教育上的支出与福祉成反比。请注意,根据模型,它是 而不是 一个重要的预测因素,因此它总体上不会对幸福感产生太大影响。
- 失业、劳动力参与率和收入不平等对幸福的贡献可能没有我想象的那么大。根据模型,这些对幸福感没有太大影响。这对我来说有点令人震惊,因为这是我想要关注的。我需要重新考虑解决失业和创造就业的影响到底有多大。
限制
正如我在这篇文章中反复提到的,这无论如何都不是一个完美的模型,如果有什么不同的话,它应该作为一个起点。很抱歉打破了记录,但重要的是不要从这个模型中得出结论。原因如下:
- 该模型目前可以概括不同国家和日期的情况,可以用更复杂的模型进行改进(想想贝叶斯多元时间序列)。按照这些思路,这种模式可能会遭遇辛普森悖论,这基本上意味着对所有国家都适用的可能对某个特定国家不适用。
- 其他因素(被隔离的 19 个因素之外)可以被用来建立具有相似(但不一定相同)精确度水平的模型。
- 人类发展指数不是衡量福祉的防弹指标。围绕它的一些组成部分的有用性,如受教育年限和预期寿命,已经有了相互矛盾的发现。
下一步
还记得这个倒三角形吗?
作者图片
我觉得我已经花了相当多的时间在“综合数据以进行高层次的优先排序”上。我现在需要用我从这个练习中学到的东西来思考我将如何在印度做基层研究。
在印度和世界各地已经有很多这样的事情发生了。这种本地方法可以说是最有用和最有影响力的,尤其是在涉及到深刻而持久的变革时。像 J-PAL 、 IPA 和 Evidence Action 这样的公司正在进行一些令人难以置信的随机对照试验,这些试验正在改变我们在地方层面做出积极改变的方式。许多草根非营利组织(赤脚大学、 GiveDirectly )也在直接改善当地的生计。我必须特别向我们的数据世界大声疾呼——他们正在做令人难以置信的事情,综合宏观层面上可用的数据。
所以我现在在印度,试图处理这一切。不打算说谎,我有点被过去两年里我所阅读的所有信息、经历和书籍所淹没。这其中最严重的部分是危险的(但也是重要的)愿望,那就是尽可能地把事情做好,而不要把自己想死。
我需要看看农村电气化是否像模型宣称的那样有影响力。我需要重新评估创造就业和改善劳动力的重要性。如何扭转浪费?它甚至不在模型中,但随着消费主义的增长,浪费也在增加,循环经济的整个困境可能开始变得更有意义。或者不是。
不确定性并不好玩,尤其是当你知道现在不确定性很重要的时候。
一个 poco 一个 Poco。
谢谢你一路读到这里。说真的。把你的电子邮件发给我,我会想办法给你寄一瓶啤酒。但是可能会有测验来过滤掉那些刚刚滚动到末尾的内容。等等,让我建立一个 ML 模型来解决这个问题。机器来了。
********* 将因子从 511 浓缩到 19 后,我有了更多的可用数据,这些数据不必通过删除空值来排除,因为使用的列更少了。**
我们如何利用计算机视觉来强化戴口罩的建议?
戴口罩是保护每个人免受冠状病毒感染的最有效和最基本的方法。
活在近代史的历史性时刻难道不应该很牛逼吗?!哦…对了。这是一个疫情。
马丁·桑切斯在 Unsplash 上的照片
我和欧正生活在一个历史性的时刻,2020 年将作为永远改变世界的 2020 年事件而被载入史册。我们这一代是现代瘟疫的一部分,这种瘟疫可能是因为我们撕裂了这个星球而产生的,也可能是在实验室里被设计出来的,也可能只是错误的穿山甲遇到了错误的猪,让我们称之为信仰。你可以自由选择相信什么,但是有一个事实不容置疑:你所知道的生活将会改变很多。冠状病毒也被称为新型冠状病毒病毒,它会留在我们的经济、我们的习惯、我们的恐惧和空气中(?).
但是,嘿,并不是一切都是坏的!有好消息!还记得另一次疫情事件吗?每个人都在谈论“西班牙流感”或“1918 年疫情流感”,那次事件导致大约 5 亿人死亡。从技术上来说,我们要先进得多,我们有人工智能,更快的通讯,社交媒体,更好的理解突破,抗生素,当然还有能力制造疫苗并在世界各地传播,以根除病毒,就像我们对其他病毒所做的那样。
问题是制造疫苗需要很多时间,一旦临床试验表明疫苗有效,大量生产可能需要大约四年时间。这个时间表包括设计、建造、认证和许可生产设施,然后生产足够数量的疫苗上市。
现在,4 年对于“恢复正常”来说听起来是一段很长的时间,这就是为什么人们在谈论#新正常或#次正常的意思,你可以继续你的生活或业务,但需要一些考虑或措施,如社交距离、手部卫生和使用口罩。这些措施中的一些甚至不是一个建议,它们已经成为法律,并且有一个很好的理由,它们可以帮助减缓传染病并拯救成千上万的人。
但是为什么用口罩遮住脸如此重要呢?
一旦有人被感染,病毒颗粒就会悬浮在我们肺部、口腔和鼻子的体液中。然后,当受感染的人咳嗽时,他们可以将充满病毒的微小水滴喷到空气中。
已经发现 Sars-CoV-2 病毒在这些液滴中存活至少三个小时。但其他非官方研究表明,Sars-CoV-2 病毒在悬浮于气溶胶液滴中超过 16 小时后仍具有传染性。研究发现,与他们研究的其他类似冠状病毒相比,这种病毒“在气溶胶形式下具有显著的弹性”。
此外,研究表明,6 英尺的社交距离政策是不够的,如果即使有微风(约 2 英里/小时),咳嗽产生的飞沫也可以传播到 6 英尺以外。
https://news . okstate . edu/articles/communication s/2020/OSU-研究人员-检查-社交-距离-模型-鼓励-谨慎. html
那么我们如何实施其中的一些建议呢?我坚信人工智能可以成为实施这些措施的关键因素,特别是计算机视觉可以用来有效地识别风险。
什么是计算机视觉?它是如何工作的?我喜欢这个定义:
“计算机视觉是人工智能的一个领域,它训练计算机解释和理解视觉世界。使用来自相机和视频的数字图像以及深度学习模型,机器可以准确地识别和分类物体……”
基本上,你使用图像和视频数据来教计算机检测和识别感兴趣的对象。例如,教一个系统识别一个人是否戴着面具。
我认为我们可以使用这种经过训练的计算机视觉模型来监控街道,超市和公共交通,公园检测谁戴着口罩,谁没有戴,识别风险并绘制可能是潜在感染焦点的区域。让我们看看它看起来如何像一个被训练来识别“戴面具”的模特:
我认为这个用例有几个方面需要检查:
(任一)战术:一旦发现风险就采取行动,就像未蒙面的访客。例如,商场、超市、学校、办公楼等的入口。可以被摄像机 24/7 全天候监视,寻找对其他人有危险的不戴口罩的人。
(或)战略性的,意思是获取尽可能多的信息,并绘制出需要部署更强控制、通信和更有效执行的高风险区域。通过生成决策数据,政府和私人组织能够优化控制、节省资金,并为人们提供更安全的环境。
托尼克在 Unsplash 上拍摄的照片
“强制戴口罩”似乎是一个简单的策略,但每个不戴口罩的人都是他人的负担,我们必须明白,这样做是在拯救生命。
我相信这场战斗中一个非常强大的盟友当然是人工智能和技术,世界各地的人们都在帮助应用程序、网站、分析模型和难以置信的用例,因为最终我们都在一起。 #StayHome #StaySafe
参考资料:
本文件提供了在社区、家庭护理和卫生保健环境中使用口罩的建议…
www.who.int](https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public/when-and-how-to-use-masks) [## 计算机视觉:它是什么以及它为什么重要
计算机视觉是如何工作的,为什么它很重要?在许多情况下,机器可以更多地解释图像和视频…
www.sas.com](https://www.sas.com/en_us/insights/analytics/computer-vision.html) [## 为什么我们都应该戴口罩
口罩是疫情时代的象征——一个潜在的微小的、看不见的病毒敌人的视觉隐喻…
www.bbc.com](https://www.bbc.com/future/article/20200504-coronavirus-what-is-the-best-kind-of-face-mask) [## OSU 研究人员检验社会距离模型,鼓励谨慎——俄克拉荷马州立大学
OSU 研究人员检查社会距离模型,鼓励谨慎疾控中心建议人们保持六英尺的距离…
news.okstate.edu](https://news.okstate.edu/articles/communications/2020/osu-researchers-examine-social-distancing-models-encourage-caution.html)
更多演示:
[## 安德烈斯·比利亚·里瓦斯在 LinkedIn 上:#周末#演示#covid19 | 20 条评论
Otro #周末#家庭演示!我们的吉祥物是一种流行于法国的吉祥物…
www.linkedin.com](https://www.linkedin.com/posts/andresvilla_weekend-demo-covid19-activity-6660928867659771904-7GbJ) [## 安德烈斯·维拉·里瓦斯在 LinkedIn 上:#homeoffice #weekend #demo | 24 条评论
欢迎#homeoffice 在您的#周末#演示中完成工作!!😄·阿奎瓦拉斯·科莫…
www.linkedin.com](https://www.linkedin.com/posts/andresvilla_homeoffice-weekend-demo-activity-6658080161705062400-pVt3)
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
如何提高你的机器学习模型质量?
数据科学家减少分类 ML 模型错误的逐步方法
为什么要看这篇文章?
有时候,你的分类机器学习模型并没有预期的那么好。当面对这种情况时,许多人所做的就是随机或多或少地尝试不同的方法,或者跟着感觉走。它可能是添加更多的数据,尝试一个新的模型,或者调整一些变量,但是有一个选择首先尝试什么的方法是很不寻常的。
本文所展示的正是:根据您所面临的模型错误类型,选择最佳策略的明确定义的方法。
这种方法基于 Coursera 上的结构化机器学习项目课程,但在格式、方法和术语上有所调整。如果你喜欢这篇文章,它可能值得参加这个课程,但是,它不是太长,而且它有一些额外的有用的提示。
一步一步来
您的模型应该符合一些标准才能被视为好模型,通常一次符合一个标准,顺序如下:
- 很好地适应训练集
- 很好地适应验证集
- 很好地安装测试集
- 在现实世界中表现出色
对于这些步骤中的每一步,都有不同的策略可以让您提高性能,应该相应地应用这些策略。如果您的模型在您的训练集中表现不佳,它在现实世界中表现不佳的可能性很小,因此当您看到事情开始出错时,您应该能够找到错误的来源并首先修复它。
“独一无二的”
为了能够衡量你的模型做得好不好,你应该有一个单一数字评估指标,这个指标将使你能够比较不同的模型。当你开始尝试优化多个指标时,你并没有真正优化,你也不会得到任何客观的答案。
"好吧,但是如果我真的需要不止一个指标呢?"
然后,选择一个单一的数字指标作为你的“唯一”,其他的将成为你的满意度指标,这些指标你将设定一个截止值,但你不必优化。
比方说,你有两个模型,A 和 b。模型 A 有 95%的准确性,它需要 1 秒钟来获得一个新的观察值。模型 B 的准确率为 98%,获得一个新的观察值需要 8 秒钟。
从理论上讲,如果您正在优化准确性,您应该选择模型 b。但是想象一下运行时间对于您的应用程序也很重要,因此您不能拥有一个需要 8 秒钟来对每个观察结果进行评分的模型。但是,只要不到 2 秒,对你来说就没问题。然后,您将优化准确性,运行时间的最大限制为 2 秒,这将导致您选择模型 a。请注意,您可以有多个令人满意的指标。
错误管道
既然你已经有了误差的定义,为了理解它的来源并优化我们选择的度量,我们必须使用一种误差管道将误差分成不同的部分。
人的工作效率
永远不要派人去做机器的工作。—电影《黑客帝国》中的特工史密斯
对于一些任务,如图像识别,我们通常使用人类作为获得模型准确性的基线:如果人类有 1%的错误,通常我们实际上不能期望做得更好。这就是为什么我们使用人的表现作为贝叶斯误差的代理,贝叶斯误差是一项任务的最小理论误差,因此将是我们管道的起点。
模型误差
在定义训练、验证和测试集时,通常会有很多困惑和争论,但我认为行业标准倾向于使用训练用于训练模型的数据集(这里没有太多争论),使用验证用于首先验证模型和微调参数的数据集,使用测试数据集用于测试模型的最终数据集。重要的是,验证和测试观察来自相同的分布,并且它们都反映了您将在现实世界中遇到的数据。
训练和测试之间的默认划分通常是 70% / 30%,而训练、验证和测试之间的默认划分大约是 60% / 20% / 20%。然而,当你有大量的数据时,使用 98% / 1% / 1%的分割是很好的,只要你在每个验证和测试集中至少有大约 10 000 个观察值。
最后,如果您的训练集和验证集来自不同的分布,您可以将训练集分成两部分:训练和训练-开发,并使用第一部分来训练您的模型,使用第二部分来测试来自与训练集相同的分布的数据,以便隔离由于您的模型无法概括而产生的错误和由于分布不同而产生的错误。
最后,您的误差度量将有 5 个连续的值(这是上面定义的一个度量)。它们之间的差异有不同的来源,查看最大的误差来源将会告诉您应该首先解决哪一个:
我们现在将解决这些误差源中的每一个,以及处理每个误差源的最佳策略。
亚伦·胡贝尔在 Unsplash 上拍摄的照片
改进您的模型
可避免的偏见
可避免的偏差应该尽可能接近零,因为训练集中的误差很可能是您最小的误差,并且您希望它至少与人的表现相等(如果不是更好的话)。解决这一问题的一些策略包括:
- 训练一个更大的模型(这可能包括尝试不同的神经网络架构和扩大你的超参数搜索空间)
- 训练更长/更好的优化算法
差异
另一方面,方差来自于这样一个事实,即您的模型过度拟合了训练集,并且还不能将其结论推广到它尚未看到的数据。您可以通过以下方式减少它:
- 获取更多数据
- 尝试不同的正规化技术
- 再次尝试不同的神经网络架构,扩大你的超参数搜索空间
数据不匹配
有时,您不能让训练和测试数据来自相同的分布:假设您想训练一个面部识别算法,专门用于手机的前置摄像头,但您没有足够的具有这些完全相同特征的标记数据。然后,你求助于已经标记好的公开可用数据来训练你的模型,并在来自前置摄像头的图片上进行测试。在这种情况下,可能会发生数据不匹配错误,主要通过使您的训练数据与验证和测试集更相似来减少这种错误。
一种方法是进行手动错误分析。在我们之前的例子中,这可能意味着从验证集中随机选取一些(约 100 张)标签错误的图片,并通过与训练集中的一些图片进行比较,试图理解算法为什么会出错。由于前置摄像头质量差,有些可能会失真或分辨率低,有些可能比你的火车组更接近面部,有些甚至可能是正确的,但它们只是首先被人类贴错了标签。尝试将 100 张图片中的每一张归入一个错误类别,最后,你可以知道每一个类别产生的错误百分比。然后,您可以考虑归因于每个类别的错误百分比以及修复它们的难度/成本,这有助于您决定首先解决哪些类别。在我们的例子中,假设模型的大部分误差发生在图片分辨率较低的时候。也许您可以尝试人为降低训练集的一些图片的分辨率,使其与验证集更相似,或者只是从验证集中取出一些图片,然后将它们放入训练集中。
这一步可能看起来有点麻烦,但它实际上可以为您节省很多不必要的工作。
过度适应验证集
如果您的模型过拟合,那么尝试通过添加数据使验证集更大。
最终考虑
总结一下工作流程:
- 定义一个数字评估指标来优化你的模型,也许还可以定义一些令人满意的指标
- 将您的数据分成 4 个数据集 : 训练、训练开发、验证和测试,确保训练集有足够的观察值,并且验证集和测试集来自相同的分布
- 根据您的评估标准测量所有这些项目的误差,并将人为误差作为基准
- 通过查看 5 个误差之间的差异,找出误差的最大来源
- 利用上述策略,相应地解决这些问题
如果你想了解这个工作流程的更多信息,我建议你参加 Coursera 上的结构化机器学习项目课程。
职业前景如何随着敏捷革命而改变
一切都变了。而且很快。在这篇文章中,我解释了如何适应不断变化的工作环境。
敏捷问题
我先介绍一下敏捷。敏捷是大量项目管理框架的重组术语,这些项目管理框架都试图解决 IT 行业中的常见问题。近年来,敏捷方法在各地的 IT 部门和初创企业中广受欢迎。
众所周知,IT 的问题往往是用户的需求和开发者的理解不匹配。举个简单的例子,当你奶奶让你在她的电脑上安装一个新程序时,你会告诉她是的,给我 5 分钟。然后发现她的电脑是迷你电脑。不幸的是,在大型 IT 项目中,类似的事情经常发生。
我希望你没有签任何说你会在一小时内安装程序的东西!!图片由https://commons.wikimedia.org/wiki/File:Minitel1.jpg提供。
敏捷解决方案
传统项目会立刻签订一份完整软件的合同,并在最后交付完整的软件包。敏捷项目提出的建议是以不同的方式定义约定:以递增的步骤。
敏捷一步一步地开发一个项目,并使反馈在每一步都成为可能。这允许定期地将项目引向正确的方向,并确保交付客户真正需要的项目。
著名的敏捷贴 its。由乔·什切潘斯卡在 Unsplash 上拍摄
敏捷团队
那么人们在“做敏捷”的时候是如何组织工作的呢?这里有一些敏捷的常识,让我来解释一下。我专注于 Scrum 方法,因为这是我最熟悉的方法:
- 冲刺
冲刺是敏捷工作的核心。sprint 是团队需要输出产品新版本的几周时间,通常是软件产品。 - 开发团队在冲刺阶段扮演核心角色,因为他们是构建产品的人。
- 产品负责人
产品负责人负责设定产品的优先级。他或她将与利益相关者互动,并具有足够的技术知识来设置一个需要由开发团队完成的明确定义的任务列表。 - 产品积压清单就是这个清单的名字。在 sprint 的每个开始阶段,开发团队将估计他们可以完成的工作量(列表中的任务数量),而产品负责人仍然是决定任务顺序(优先级)的人
- Scrum Master
Scrum Master 确保每个人都理解 Scrum 框架的“规则”(敏捷实践之一),以便一切顺利进行。
敏捷组织
所以,最大的不同是:“非管理层”的人通过这些新的工作方式获得了很多自主权和责任。此外,角色是非常清楚地分开的:例如,如果你在开发团队中,你开发,你不能设置优先级。
从长远来看,这将影响职业选择。很多人的职业选择曾经是:为了有更好的待遇和更好的地位,努力从一个技术性的非管理岗位转到管理岗位。但是有了明确的角色划分,这就不再相关了:PO 将管理与涉众的谈判,并在这方面变得更好,而开发团队则专注于开发并在这方面变得更好。
有了敏捷,你可以不用在工作中下棋,只要做好自己的工作就行了。JESHOOTS.COM 在 Unsplash 上的照片
职业前景
换句话说,我们过去做的是提拔擅长自己工作的人。这看起来很有道理,但实际上一点也没道理。当一个人善于发展时,并不意味着他会成为一个好经理。实际上,做得好的人不应该被提拔:让他们做他们擅长的事情,为他们的价值付出。
我相信职业前景在科技领域正在发生深刻的变化。如果团队真的可以自治,中低层管理就不再需要了。对许多人来说,这就剥夺了从发展到管理的职业道路。与此同时,我们看到,开发人员的工资往往是巨大的。
技术工作的薪水和地位应该会阻止这种争顶的竞赛。公司应该让技术人员做他们的技术工作,并付给他们高薪,以防止他们想要爬上职业阶梯。
在这种新的工作方式中,人们将能够做他们喜欢的事情,无论是技术性的,还是与利益相关者的沟通,或者其他任何事情。
如果你做自己喜欢的事情,并且做得很好,那么敏捷就有你的一席之地。
我最后的建议
我最后的职业建议是:如果你做你喜欢的事情,并且做得很好,那么敏捷就有你的位置。
聊天机器人如何被用来改善任何业务
让它们运行得更顺畅、更高效
https://images.app.goo.gl/Gy5EkKpHp9egJcUV9
聊天机器人代表了人们获取信息、做出决策和交流的新趋势。—克里斯蒂·皮茨,威瑞森风险投资公司
我们都曾访问过这样的网站,在它的右上角会弹出一个小框,询问我们有什么可以帮到你的。这个小盒子是一个聊天窗口,旨在回答你白天或晚上可能有的任何问题。
它们旨在帮助客户不必等待与真人交谈。你输入你的问题,几秒钟后答案就出来了。
聊天机器人最大的好处之一就是它们可以全天候在线。顾客永远不需要等一个人吃完午饭或去洗手间回来。这为消费者提供了即时的满足感,并会让他们再次光顾。
聊天机器人可以用于许多方面来改善任何企业,无论是大企业还是小企业,除了客户服务之外,还可以用于其他方面。我们将在本文中讨论其中一些,但首先我们将提供一个什么是聊天机器人的快速定义。
什么是聊天机器人?
聊天机器人是一种计算机程序,它可以与人交流,并自动处理收到的信息。它们可以被编程为每次都以相同的方式响应,或者可以根据情况调整它们的响应。
他们利用短信、网站聊天窗口以及 Twitter 和脸书等社交媒体信息平台。今天,许多不同的公司使用这些机器人来简化他们的客户服务。但是这些也可以用来改善你的其他业务领域,如销售和营销。
你会问,他们会怎么做?好吧,下面我们来看看。
商业聊天机器人的其他领域还可以改进
聊天机器人非常通用,可以应用到你业务的不同领域。他们可以将许多需要员工参与的对话自动化,从而节省时间和金钱。我们开始在杂货店自助结账和餐馆自助服务亭的兴起中看到了这一点。
除了客户服务之外,这些在其他部门也很有用,例如:
销售
销售是受聊天机器人影响最大的部门之一。这些方便的时髦小工具可以收集关于客户的信息,销售团队可以使用这些信息来确定资格,并根据聊天机器人的交互进行推介。他们可以推荐产品,衡量客户的兴趣,并帮助引导他们通过销售渠道的每一个环节。
这些机器人可以根据顾客在你的网站上看到的内容,为某些产品带来知名度。你可以定制聊天机器人,让它等一会儿,让顾客四处看看,然后弹出来问一个基本的问题,比如“我能帮你找到什么吗?”。
营销
聊天机器人不仅可以用来回答客户服务问题,还可以用来娱乐客户。他们可以抓住你的观众的注意力,并从互动中学习,以便下次提供更好的体验。聊天机器人将整个交互体验个性化,使客户访问更加愉快和难忘。
由于许多聊天机器人都是在社交媒体网站上找到的,你可以接触到的受众是无限的。你可以通过挖掘一个你以前可能不知道的新的人口统计来获得一个新的客户群。这可以将你的营销努力扩展到之前没有包括的个人。
人力资源
聊天机器人可以让你的人力资源部门通过做一些平凡的任务而真正忙碌起来。他们可以安排面试,浏览简历,核实证书,选择合适的候选人进行面试。这将使人力资源部门有更多的时间来面试候选人,判断候选人的态度和职业精神,并确定他们是否适合公司的文化。
一旦候选人被选中,聊天机器人可以协助入职流程,包括自动化冗长的文书工作。新员工会感到欣慰的是,他们不必在开始阶段接触同事。新员工将会很自信,不会浪费时间在公司里摸索前进。他们将能够更快地适应,更快地、更有热情地履行自己的职责。
现在你知道了公司聊天机器人的哪些功能可以帮助你变得更有效率,你该如何使用它们呢?
大约 80%的企业计划在 2020 年前整合聊天机器人。—商业内幕
聊天机器人可以使用的平台
聊天机器人可以在你的网站上实现,也可以在脸书和推特这样的社交媒体网站上实现。他们每个人都有自己的方式与你的潜在客户交谈。比起在脸书和推特上,访问你网站的人会对你提供的产品和服务有更广泛的了解。社交媒体账户的人口统计数据会有所不同,你可能需要对它们进行研究,以便更好地了解它们。你将不得不对你的机器人进行相应的编程,以便对任何一个机器人提出正确的问题。
这太好了,除了聊天机器人可以用来开始我的网站和社交媒体吗?下面分别列出了几个例子。
在你的网站上使用聊天机器人
Imperson — 这款聊天机器人是对话式的,能够提供真实且吸引人的客户聊天体验。导航员使用关系记忆、NLP 用户意图和深层对话上下文来引导对话,帮助实现客户目标。Imperson 通过托管和部署您的 bot 并提供实时性能更新来提供端到端的 bot 解决方案。
Reply.ai — 是市面上最受欢迎的 ai 聊天机器人之一。企业级 bot 是一种建筑和管理软件解决方案,使公司能够改善其客户服务。它配备了一个内置 CRM、机器学习和实时洞察的仪表板,使机器人在收集信息时更加智能。
Flow XO — 让你无需学习如何编码就能创建智能的交互式聊天机器人。该软件配备了一个易于使用的拖放编辑器,您可以创建逻辑工作流,并将您的聊天机器人连接到各种软件。您构建的机器人将与第三方应用程序(如 Salesforce、Google Sheets 等)进行交互和工作。
Drift — 是一个对话驱动聊天机器人,它能让最优秀的企业实时领先。当用户与这个机器人交互时,他们可以提供关键信息,如姓名、电子邮件和电话号码,以便销售和营销人员跟进。您可以在浏览器中直接向用户发送消息,或者为他们提供自动聊天体验。
社交媒体上使用的聊天机器人
Mobile Monkey — 是一款软件解决方案,帮助您构建智能聊天机器人,将您的 Facebook Messenger 营销提升到一个新的水平。您可以管理许多潜在客户挖掘活动,如聊天爆炸、滴流活动和列表构建。它允许您自动回答客户服务中的常见问题。
Chatfuel — 是最受欢迎的聊天机器人解决方案之一,可以帮助您轻松构建 Facebook Messenger 机器人。这允许你自动回答常见问题,如手机猴子。如果需要的话,它还允许你加入对话,并控制聊天机器人。
ManyChat — 帮助您创建智能 Facebook Messenger 聊天机器人,可用于销售、营销和客户服务。该软件配备了一个可视化的拖放生成器,使您可以轻松地构建自己的聊天机器人。您还可以自动进行 Messenger 营销,并根据时间延迟或某些用户操作发送消息。
Octane AI — 这个聊天机器人可以让你在几分钟内为你的 Shopify 商店设置和定制一个机器人。这个软件让你能够恢复被遗弃的购物车,自动回答你的客户的询问,在购买后发送后续信息,包括运输信息和收据等等。
结论
这篇文章旨在向人们介绍聊天机器人,以及他们如何使用它们来改善他们的业务。我们讨论了贵公司的不同领域,聊天机器人可以帮助您发展业务。我向你展示了几个聊天机器人的例子,你可以通过你的网站或社交媒体渠道自己使用它们。
世界各地的许多公司都利用聊天机器人来自动化和简化他们的业务。这些都有助于帮助公司提高效率,增加员工参与度,并创造积极的入职体验。聊天机器人将员工通常处理的多余任务解放出来,专注于更具创造性和生产力的方式,为组织做出贡献。
中国是如何用科技钉死冠状病毒的!
中国高科技系统对抗 COVD-19 的案例研究
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
Rade apto VI在 Unsplash 拍摄的照片
中国是新型冠状病毒传播的源头。在中国境内,它感染了约 80,000 人,并导致 3,000 多人死亡。一开始,疫情规模很大,但最近几周,他们设法控制住了疫情。对于一个像中国这样有 14 亿人口的国家来说,每天报告 50 个病例只是沧海一粟。一些人批评中国的制度,声称它在西方永远行不通。这篇文章的范围不是要判断他们的方法,而是要说明他们是如何利用先进的技术赢得对新冠肺炎的战争的。
中国以从公民那里收集大量数据而闻名。他们有一个由分布在全国各地的 2 亿多个视频监控摄像头组成的网络。除此之外,他们还在住宅区的门口安装了生物扫描仪。当一个人决定离开他的公寓时,他必须扫描他的脸作为一种登记。从那时起,处理数据的智能系统知道该人在外面,并可以通过广泛的视频监控系统跟踪他的行踪。中央数据库存储所有这些信息,然后机器学习算法处理这些数据,并计算这个人的潜在社交互动。
中央数据库还从其他来源收集数据。其中之一是微信应用,仅在中国,每月就有约 10 亿人使用该应用。该应用程序方便地将本地化、社交媒体、聊天和电子钱包结合到一个系统中。这种系统的第一个优势是,支付使用非接触式虚拟卡,无需兑换真实货币。因此,这种物理交换的缺乏自动减少了病毒的传播。
第二个优点是定位特征,其提供了个体的精确地理位置。鉴于监控摄像头的覆盖范围有限,微信提供的位置将为系统提供关于该人行踪的精确信息(误差在几米之内)。如果一个人与感染病毒的人密切接触,系统可以立即警告他,让他避开那个人。
第三个优点是,由于电子钱包包括与购物一起访问的商店的信息,这两者可以结合起来。从商店的位置,可以推断出一个购物的人是否感染了病毒,因为几分钟前,一个受感染的人正在同一家商店购物。另一方面,购买可能提供关于个人幸福的信息。人工智能(AI)系统可以很容易地推断出,如果购买了某些物品(如药物),那么这个人或他身边的人很可能生病了。微信上的聊天进一步证实了这一假设,因为它们是使用人工智能自动分析的。然后,该系统将此人标记为潜在病例,一个医疗小组将对其进行特殊检查。
第四个优势是社交媒体元素,这对于确定患者的社交圈以及在感染情况下联系他们至关重要。
该系统非常复杂,可以列出在过去两周内与感染者有过接触的大多数人。然后政府对这些人实行至少 14 天的自我隔离。
每个公民还获得一个自动健康代码,可以是:红色、琥珀色或绿色。这种编码决定了人的流动性。绿色意味着这个人可以不受限制地自由走动。刚从国外回来或可能与感染者接触过的人有黄色代码,他们的行动受到限制(事实上他们不允许开车)。那些可能被感染的人属于红色类别,他们必须留在隔离区。
正在使用的系统不仅是高科技的,而且还结合了其他国家采用的程序。所有来自疫区的航班都经过人工检查。在商业建筑(如购物中心)的入口处,员工检查人们的体温,如果发现发烧,就提出报告。在一些城市,每三天只允许一个人离开房子去买必需品,而且他们只有在有特殊许可证的情况下才能开车。中国政府的想法是在热点失控之前发现它们。这个系统被许多人认为是非传统的,接近极端,但它似乎产生了良好的效果。毫无疑问,这是世界历史上最高的流行病控制技术。当然,系统存在各种问题;最明显的事实是,人们正在牺牲自己的隐私。这肯定需要调整。最终,没有一个系统是完美的,很难达到平衡。因此,我们必须问自己,为了拯救更多的生命,我们准备走多远。
【https://www.businesstoday.com.mt】这篇文章最初发表于 请在下面留下你的想法,如果你喜欢这篇文章,请随时关注我🐦推特,🔗 LinkedIn 或😊脸书。
阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并且是马耳他的一部分。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。
流失分析如何拯救百视达
看到预测分析的力量,我们不禁要问:它会拯救像百视达这样一个没落的帝国吗?
在的巅峰时期,百视达的估值高达 80 亿美元,在美国拥有超过 9000 家分店,超过 84000 名员工——几乎是今天网飞员工人数的 10 倍。
2010 年,百视达申请破产,负债近 10 亿美元。出于新奇的原因,俄勒冈州本德镇的一个私人拥有的位置仍然开放。
1985 年至 1994 年:黄金时代
百视达的创始人戴维·库克在 1985 年意识到了音像店连锁的潜力,所以他在那一年开了第一家店。
使用新的条形码系统,百视达可以跟踪每个商店多达 10,000 个 VHS,比其他只能跟踪大约 100 部电影的视频商店提高了 100 倍。
Blockbuster 筹集了数百万美元,积极扩张,收购现有连锁店,并以狂热的速度开设新店,同时扩大其产品,包括音乐和视频游戏租赁。
1994 年:末日的开始
主要投资者韦恩·胡伊曾加在 1994 年以 80 亿美元的价格将百视达卖给了维亚康姆。两年后,百视达市值缩水一半。
新老板,约翰·安蒂奥科,专注于实体建筑,即使创新的竞争者——如 1997 年的网飞——如雨后春笋般涌现。1999 年,百视达放弃了以 5000 万美元收购网飞的机会(今天,网飞的市值超过 2000 亿美元)。
令人惊讶的是,百视达看到了视频点播的潜力,但他们决定用自己的方式来做。百视达与安然联手,成功推出大规模电影流媒体服务。然而,百视达希望专注于利润丰厚的视频商店,因此在 2001 年放弃了流媒体服务。
正如安蒂奥科写的:
“我坚信,无论人们决定如何观看电影,我们都可以保持 Blockbuster 品牌的相关性。”
其余的,正如他们所说,都是历史了。网飞的创新,从它的 DVD 邮寄服务开始,增加了它的市场份额,年复一年地蚕食大片。在推出流媒体服务后,网飞的增长加速,而百视达继续慢慢死去。
Blockbuster 未能理解为什么它的客户像苍蝇一样减少,而流失分析本可以避免这一点。
流失分析并不新鲜
虽然“流失分析”看起来像是一种新奇的现代技术,但企业已经使用它很长时间了。
客户流失仅仅是客户流动的过程,企业应该一直关注客户离开的原因。
正如这篇 1990 年发表在《哈佛商业评论》上的文章所解释的,理解并减少客户流失是成功的关键:
“拥有忠诚的长期客户的公司可以在财务上胜过单位成本较低、市场份额较高但客户流失率较高的竞争对手。”
数据驱动的客户流失分析至少从【2020 年代就已经存在,所以客户流失分析在 2020 年更像是一项必备而非尖端的创新。
百视达的搅动器
Blockbuster 的流失分析会揭示:
- 哪些客户在搅动
- 为什么它们在翻腾(包括重要的属性)
- 如何解决该问题
看到竞争对手的市场份额下降和 DVD 点播的兴起,应该是触发流失分析需求的危险信号。
由于有数千家商店,即使是适度的数据收集工作(如通过 POS 系统、电子邮件营销软件、客流量分析或简单的客户调查)也会揭示客户流失的来源。
例如,流失分析可能显示:
- 年轻人的高流失率。
- 那些支付滞纳金的人的高流失率。
- 没有新电影的地方流失率高。
- 客户流失与竞争对手的 DVD 点播和流媒体的兴起有关。
下一步是将这些信息转化为洞察力。年轻人的高流失率,加上 DVD 点播和流媒体的兴起,可能表明年轻人更喜欢替代品的便利,而 VHS 太过时了。
那些支付滞纳金的人的高流失率表明,滞纳金是一个关闭,这将是明智的立即去像网飞这样的竞争对手的路线,从一开始就没有滞纳金。
没有持续新电影的地点的高流失率表明客户重视观看最新电影,因此 Blockbuster 需要一种方法来改善他们的产品。
如果 Blockbuster 发现了这些见解,他们将保持电影租赁之王的地位,并演变为点播流媒体之王。
当今的流失分析
借助现代计算、大数据和从 TensorFlow 到 Sklearn 的免费工具,企业可以通过多种方式来分析客户流失:
- 从头做起。这需要大量的技术专长,考虑到分析人才的短缺,许多公司并不具备这些。
- 雇佣一名数据科学家。构建决策树分类器和提取 Python 专业知识可能需要一名数据科学家。即使是现在,许多公司都在雇佣数据科学家,但是六位数以上的薪水,对每个组织来说都是不可行的。
- 外包 it 。虽然从技术上来说,这是最不可行的,因为您丧失了对质量、项目所有权、维护和数据隐私的一定程度的控制。
- 使用无代码分析工具。使用像 Apteo 这样的无代码预测分析工具可以实现内部控制,同时降低成本并消除对技术专业知识的需求。
鉴于选择范围广泛,分析客户流失是当今企业的一个常识性策略。
Citymapper 数据如何突出不同城市的新冠肺炎响应
我们发现了哪些城市在应对冠状病毒疫情时比其他城市花了更长的时间停止通勤
冠状病毒对我们的生活方式产生了不可思议的影响。为了遏制病毒的传播,许多政府禁止我们拜访朋友和家人,或者去工作场所、商店和餐馆。世界各地城市的通勤已经停止。
我们知道发生这种情况的一个原因是,像 Citymapper 这样的应用程序的用户已经停止使用它们来计划旅程。
完整的 dataviz 由我、奥利弗·卡林顿和若昂·席尔瓦创建
以上是我们的最新数据,即使用 Citymapper 的旅程规划数据来比较不同城市对新冠肺炎的一个角度的反应。它是由我和我的合作伙伴 joo Silva 创建的,我将在这里分两部分简要介绍它。
这组中的四个城市用了超过 10 天的时间来减少出行
尽管通勤在同一天开始放缓,但伦敦比巴黎多花了整整一周的时间将平均行程减少到 20%
在 viz 数据的第一个图表中,我们使用了一个范围图来显示 12 个城市何时开始减少旅行(当它们达到平均旅行计划的 80%时,以粉红色显示)。然后你可以比较一下这些城市停止旅行所用的时间(平均旅行计划的 20%,当主要是关键员工四处走动时,用蓝绿色显示)。
在这里,你可以清楚地看到,马德里、巴黎和伊斯坦布尔的市民将旅行计划从 80%大幅减少到 20%。另一方面,伦敦和悉尼用了 11 天,而莫斯科和多伦多用了 12 天。
使用 Citymapper 计划行程的百分比似乎与大多数城市的实际情况相符。例如,3 月 25 日,也就是伦敦最终达到通常 Citymapper 行程计划的 20%的第二天,伦敦市长宣布,“地铁乘客量与去年同一天相比已经下降了 88%,公交车乘客量下降了 76%。
我自己创建的 dataviz 的第一部分
但让伦敦与众不同的是,它在一个更加严峻的新冠肺炎环境下放缓了脚步
当伦敦减速时,已经有 422 人死亡
数据 viz 中的第二个图表显示了行程计划从 80%减少到 20%的情况。这是一个散点图,使用城市的国旗作为点,表明城市通勤者和他们的国家政府如何认真对待他们国家的病毒升级。
例如,里斯本可能比巴黎和马德里花了 50%的时间来减少旅行,但情况远没有那么严重,当这种情况发生时,新冠肺炎有 4 人死亡,而法国有 175 人,西班牙有 196 人。
我们还发现了土耳其和荷兰的有趣模式(我们在图表上做了注释),但最有趣的故事是,在这张图表中,英国是如何从那些缓慢停止旅行的城市中分离出来的。当伦敦的行程规划下降到 20%时,英国有 422 例新冠肺炎死亡,这远远高于澳大利亚、加拿大和俄罗斯停止时 9 至 36 例死亡的范围。
我自己创建的 dataviz 的第二部分
从这个数据的一个角度来看,英国政府在 3 月份缓慢锁定的后果是严重的。现在预计英国将成为欧洲受影响最严重的国家。
我们如何创建我们的数据,即
我们使用基于浏览器的 UI 和 UX 设计应用程序 Figma 来设计数据,即。我们从国旗中找到了国旗图片,用于散点图。
Citymapper 移动指数提供了迷人的旅程规划数据,我们使用了 Worldmeter 的冠状病毒统计数据来计算特定日子的死亡人数。
Citymapper 是一个非常知名的应用程序,但是它的受众不太可能完全代表一个城市的人口统计数据。这些数据似乎遵循了伦敦通勤者的整体情况,但对于伊斯坦布尔等收入不平等程度较高的城市来说,问题可能更大。
最后,我工作的慈善机构紧急呼吁提供资金,帮助伦敦五家国民医疗服务系统医院中受新冠肺炎影响的员工和患者。在这里了解更多:www.justgiving.com/campaign/help-our-nhs
在你被毁灭之前,你离黑洞有多近?
艾萨克·牛顿的苹果在达到逃逸速度后在太空中倾斜。星域影像由jaho br/CC0;来自 Pixabay 的 Pexels 的苹果图片(无旗帜)
黑洞,逃逸速度和艾萨克牛顿的投掷臂的初级读本。
缺乏漏洞又成了新闻。激光干涉引力波天文台(LIGO) 报道了两个黑洞的合并。其中一个重量相当于 8 个太阳质量;另一个是 31 个太阳质量。鉴于这种巨大的不对称,这与其说是合并,不如说是恶意收购。
如果你认为那些黑洞很重,2019 年拍摄的 M87 黑洞是一个巨大的 65 亿太阳质量。它的直径相当于我们整个太阳系的直径。
你怎么能不爱一个引力如此之大连光都无法逃脱的东西呢?
黑洞很酷。你怎么能不爱一个引力如此之大连光都无法逃脱的东西呢?那么,在你被毁灭之前,你能离黑洞多近呢?
我们用一点高中物理来了解一下。
轨道速度
我们需要从轨道速度的概念开始。
还记得艾萨克·牛顿爵士坐在树下的故事吗?一个苹果落在他的头上,他发现了重力。假设他对苹果感到沮丧,把它扔回到树上。(聪明人也会做傻事。)它错过了树,回到地球,击中了他的头。又来了。
宇宙已经为我们方便地安排好了,所以我们可以把一个物体当作它所有的质量都位于中心。
上升的必然下降。一个东西要扔多大力才不会掉下来?
好消息:宇宙已经为我们方便地安排好了,所以我们可以把一个物体当作它所有的质量都位于中心。地球表面的重力加速度由下式给出:
其中 G 为万有引力常数;m 和 R 是地球的质量和半径。
将这些数字代入方程,我们得到熟悉的 9.81 米/秒。
现在,假设艾萨克·牛顿不是向上扔苹果,而是水平扔苹果。它沿着一条弯曲的路径撞击地面。他扔得越用力,它就飞得越远。最后,他用力扔出去,使得它的轨迹曲线与地球的曲线相吻合。苹果继续下落,没有落地。*
它的速度有多快?它现在就在地球表面上方的轨道上。如果不考虑风的阻力和树木(或山…或建筑),这个苹果的速度有多快?
因为它在一个完美的圆形轨道上运动(或多或少),所以它有一个向心加速度:
其中 R 是地球的半径。由于这种加速度是由重力提供的:
注意苹果的质量并不重要。只有地球的质量和半径。插入适当的值,我们会发现苹果以 7910 米/秒或 28500 千米/小时的速度快速移动。这大约是音速的 23 倍。不要在家里尝试这个。
这大约足够为佛罗里达州迈阿密大小的城市供电一个世纪。
那需要多大的力量?让我们假设苹果的质量 m 为 100g (0.100) kg,艾萨克爵士以 1.00 米的侧臂间距发射苹果(也就是说,他将苹果放在背后,并在释放它之前将其向前加速一米的距离。)回想一下最终速度、初始速度、加速度和行驶距离之间的关系:
重新排列,并消除初始速度项,(因为它是零):
所以这个力等于动能除以力作用的距离。我们可以从那里开始,绕过加速度计算,因为加速苹果的功,W = fδd,等于它的最终动能。将这些数字代入,我们发现艾萨克爵士需要施加 3.13 ×10⁶牛顿的力。利用上述公式,我们还发现苹果的动能为 3.13 ×10⁶牛顿。这大约足以为佛罗里达州迈阿密市大小的一座城市提供一个世纪的电力。
【编辑:】Janos Madar 在评论中指出,这些数字不仅是错误的,而且是荒谬的。我重新计算了这些数字,得出了 4.06 ×10 牛顿,和相同的焦耳数。根据该来源的[,迈阿密在 2017 年平均每月 1125 千瓦时。这是 4.05×10⁹ J。因此,艾萨克爵士的手臂有足够的兴致保持 Miamians(?)照亮了 10⁴的几个月——833 年。]](https://www.statista.com/statistics/807951/average-monthly-electricity-usage-in-major-us-cities)
苹果绕着地球转(需要多长时间?)然后猛击艾萨克爵士的头部。又来了。他必须做什么才能把它发射到太空,并且永不返回?
那是下一个。
逃逸速度
当你把苹果抛向天空时,它会飞回来。一旦它离开你的手,它唯一的作用力(对我们来说)来自重力。它减速并返回地球。初始速度越大,减速时间越长,在重力克服它并开始下降之前,苹果离得越远。如果速度足够快,减速将会无限期地持续下去。苹果脱离了地球的引力场。
现在让我们考虑苹果在地球表面的重力势能。通常,我们会使用 PE=mgh 来计算电势差,将地设置为 h=0 。让我们考虑重力势的绝对值。想象地球被压缩,其质量集中在中心的一点。苹果又像以前一样在地球半径的高度上绕轨道运行了。我们已经知道了它的动能。将向上视为负向, h = -R 。那么引力势就是:
苹果的总能量是:
艾萨克爵士在苹果上市时将所有这些能量都给予了它。这种能量在苹果的整个旅程中保持不变。重力牵引着它,使它减速,直到它停在最大高度(即最大 R),它返回地球。在投掷的顶点,速度——因此动能——总是为零。
艾萨克爵士扔苹果的力度越大,苹果飞得越高,R 的最大值就变得越大。我们可以想象离地球无限远的地方,重力势能等于零。“无穷大”本身并不是一个数字,但是我们可以在命名方面使用一些许可。在远离地球的最大距离,超越重力的影响,苹果的能量是:
但是如果总能量在抛出的顶点为零,那么它在任何地方都一定为零。我们对它脱离艾萨克爵士掌控的时刻特别感兴趣。这里,R 是地球的半径。由于总能量为零,总能量的原始方程变为:
这是苹果的速度,增加了√2 倍。你会注意到苹果的质量没有术语。这个速度对于苹果、巨石或空气分子来说是一样的。在地球表面,它的速度大约是每小时 40,300 公里。
重述
物体以半径 R 绕质量 M 旋转的速度:
半径为 R 的物体从质量 M 处逃逸的速度:
Schwartzchild 半径和事件视界
我们现在准备转向黑洞。黑洞是耗尽燃料的恒星。直到现在,恒星的体积一直处于平衡状态。它巨大的质量希望恒星在自身重力的作用下坍缩。由此产生的压力推动氢核融合形成氦。
一旦恒星变得疲惫不堪,它就再也无法支撑自己的重量。它会内爆。从表面到中心的距离缩小了。最终,地表的逃逸速度是光速。
一旦恒星变得疲惫不堪,它就再也无法支撑自己的重量。它会内爆。从表面到中心的距离缩小了。最终,地表的逃逸速度是光速。这个半径就是这个质量的史瓦西半径。我们可以用之前导出的逃逸速度公式来计算。
黑洞在这个半径的边界就是事件视界。如果你穿越了视界,你就会停留在那里。
你会注意到史瓦西半径完全取决于黑洞的质量。将地球的质量代入上述公式,我们得到 8 毫米。地球需要被压扁到一颗鹅卵石的大小。
我们还可以看到 M87 黑洞的质量和半径之间的联系。再次,将先前给出的质量代入方程。一个与我们太阳系相当的半径应该会出现。
M87 黑洞。中间黑暗区域的圆周就是视界。越过那个屏障,即使是光也无法逃脱黑洞的引力魔爪。图片来源: XKCD 和视界望远镜合作等通过国家科学基金会
意大利面
最后一个警告:你是否会造访黑洞是值得怀疑的。但是如果你做了,请不要认为你就可以安全地悬停在视界上方。你必须小心潜在的意大利面!(对,确实是这么叫的。)
这就是意大利面的工作原理。
当你站在地球表面时,你的头比脚离地球中心更远。地球会更用力地拽你的脚。这种差异就是我们所说的潮汐力。你和地球之间的潮汐力小得可笑。在黑洞的巨大引力场中,它们会把你撕成碎片。
在一个大黑洞附近,在你穿越视界之前,你会安全地避免被分离。你不知不觉地走过了不归路。对于质量相当于地球的黑洞来说,情况就不同了。在你接近视界之前,你就是林贵尼了。
最初的问题是问在你被毁灭之前,你离黑洞有多近。看情况。一旦黑洞把你困在视界之下,你就完蛋了吗?还是说厄运等于割喉?我想这是品味的问题。
黑洞很酷。但我会从远处欣赏他们。
*这听起来令人难以置信,就像道格拉斯·亚当斯在《生命、宇宙和一切》 中给出的飞行秘诀。也许他发现了什么。
寻找更多这样的?请在下面留言,让我知道你接下来想看什么。
接下来→ 潮汐力和裂隙化
大学生如何应对新冠肺炎
卡洛斯·阿方索的照片
一步一步的分析,了解自然语言处理的强大功能
作为一名受疫情冠状病毒影响的大四学生,我和德克萨斯大学奥斯丁分校超过 75%的学生一样,将于今年秋天加入 zoom 大学。倒数第二个学期不在校园,让我有点想家。受好奇心和一点 FOMO 的驱使,我决定借助一些自然语言处理技术来检查一下我的长角牛同伴。
这个项目的代码在我的 GitHub 回购。
目录
UT 奥斯汀数据
我使用约瑟夫·赖的通用 reddit 刮刀从 UT Austin subreddit 上的最新帖子中收集了 1348 个文本条目。这些文本条目包括文章标题、正文和评论。然后,我用 excel 上的 VBA 脚本清除了文本中的非 ASCII 字符。
从 UT Austin Subreddit 聚合文本
我将所有这些文本条目读入一个熊猫数据框架,并(再次)清理了数据。
Overall_text
0 The UT employees are not a homogeneous group o...
1 Some departments are planning to continue work...
2 That 20% only represents tested cases that are...
3 A few bar owners opened to huge crowds, within...
4 - Master's degrees are a giant source of reven...
... .. ... ...
1343 For ochem 2 next semester will Straumains be d...
1344 Is there a place in campus that students can u...
1345 Can you drop a Bio class and stay in the corre...
1346 Mythology w Curtis or Greek Archaeology w Gulizio
1347 Shabbir vs Straumanis for Ochem 2[1348 rows x 3 columns]
长角牛群,一袋单词
通常,自然语言处理的第一步是找到最常提到的单词,以更好地理解数据。为了做到这一点,我使用 NLTK 删除了停用词,并对数据帧进行了词频分析,以找到 UT 学生在子编辑中最常讨论的内容。
不出所料,哪个词领先…
UT Austin Subreddit 聚合文本的词频分析
上面的话透露出我的同行在谈论其他人类、获得、信息。第一个讨论的题目是计算机科学 (cs)出现 81 次。出于好奇,我手动通读了一些数据中提到的热门词,看看是否有任何模式或意义。这个练习相当乏味;举个例子,我发现 get 主要指的是成绩、录取和冠状病毒传播——和我预想的差不多。
通常,在开始的几个词中没有太多有趣的信息,所以我向下滚动以获得更有价值的数据。似乎对种族主义和歧视的思考也在德州大学学生的头脑中占据了很大的比重。词频分析找到了单词57 提到是因为当【德克萨斯之眼】——由大学四重奏首次在吟游诗人表演中演出——在 UT 对 OU 足球赛后,UT 四分卫 Sam Ehlinger 独自站起来后产生的嗡嗡声。应该指出的是,学生团体对于这首歌是否应该被替换并没有统一的意见。
我注意到的另一个有趣的点是, 足球 ( 17 提到)不像教育和政治那样是 UT Redditors 中普遍讨论的话题。这可能是由于德州长角牛队的赛季表现不佳,以及本学期参加比赛的学生人数减少。或许也可以说,足球提及量低很大程度上是因为 UT 足球迷的独立子编辑区从 UT 奥斯汀子编辑区转移了足球话题。无论如何,德州大学奥斯汀分校的文化仍然是由德州大学奥斯汀分校的学生创造的,因此为长角牛队本学期的经历提供了一个宝贵的窗口。
这学期的主题
分析单个单词可能是有趣的,但是当用作综合摘要工具时,它经常留下一些需要的东西。更好的概述技术包括聚类和主题建模。当有很少或没有重叠的明确定义的类别时,聚类效果最佳。因为从 Reddit 上提取的相对较小的对话数据集可能没有明显不同的类别,聚类可能是一种次等策略。因此,我使用了一个潜在狄利克雷分配脚本来对数据执行主题建模。
德州大学奥斯汀分校主题的 LDA 分析
上面的数据包含了在 UT Austin subreddit 上找到的所有单词,这些单词在字段 1* 列下,后面是不同主题的列。每行包含该行单词中隐藏的每个主题和的百分比。例如,第一行包含单词 song 。我们可以看到宋的妆容 0.02 与社会公正的话题有关。单纯看歌,我们只能假设它的意思(或者回去翻资料手动读(我知道,2020 年?)通过包含该词的帖子)。然而,在执行了潜在的狄利克雷联想分析之后,我们看到 【宋】 被其他类似的得分词所包围,如 【动作】【肯定】白黑右* 下首每个单词中隐藏的话题关系就是为什么这种方法被称为潜在狄利克雷联想。**
在分析了每一栏的数据后,我发现德州大学奥斯汀分校的学生正在进行 8 个主要话题的对话:
- 社会公正
- 科学课
- 类别(常规)
- 住房/生活
- 计算机科学硕士课程(MSCS)
- 冠状病毒病
- 老友记
- 投票
我希望 UT 的每所学校都有一个主题,但只有 STEM(科学和 MSCS)出现了。我查看了 UT Austin 的主要项目,以防 STEM 专业的学生数量过多。这是 2017 年毕业的德州大学奥斯汀分校学生的专业细分:
(来源)
各专业之间的平衡相当不错(当然,这是在 2017 年——自那以后,普通计算机和信息科学可能会大幅增加),因此 STEM 专业的过多并没有导致与 STEM 相关的讨论相对于其他专业而言无处不在。也许 STEM 作为讨论主题的流行是由于 STEM 课程的难度和典型 Reddit 用户的概况,但这纯粹是我的猜测。
然而,我并不惊讶地发现,这 8 个经常被讨论的话题中的任何一个都成为了热门话题。因为德州大学奥斯汀分校靠近州府,而且它在政治上很活跃,所以投票和T3社会公正是意料中的话题。UT 最近还在计算机科学学院推出了一个新的数据科学硕士项目,考虑到数据科学的兴起和失业的增加,这个新的研究生数据科学项目引起轰动也就不足为奇了。最后,剩下的话题可以归因于影响我们所有人的一般谈话主题或与 COVID 相关的话题(因为 COVID 也影响我们所有人)。
顺便提一下,LDA 分析实际上从 UT Austin subreddit 的聚合数据中产生了 9 个主题。第 9 个主题是入学,这是有意义的,因为 subreddit 不仅限于 UT Austin 的学生,并且这一分析的时间(大学申请通常最晚开放到早春学期)。然而,UT 本科录取与本文的重点无关;所以我丢弃了录取这个题目。
人们感觉如何?
总体
使用 VADER (价感知词典和情感推理器)的情感分析显示,一般来说,在 UT Austin subreddit 上发帖的学生感觉中立。虽然很容易将这归因于大学生内心的死亡——尤其是在学期的这个时候——但中性文本条目的比例很大可能是由于 subreddit 的文化和 reddit 本身帖子的性质;然而,作为一个旁注,我发现许多对话的语气比我想象的更加中性。
同样令人鼓舞的是,正面情绪的总百分比比负面情绪的总百分比高。为了确保积极的 COVID 测试案例不会人为地夸大积极的百分比,我检查了所有包含积极的的行,并手动调整了与 COVID 相关的情感分数。
**Sentiment Percentage
------------------------
Neutral 99.26%
Positive 61.23%
Negative 38.47%**
为了阐明百分比代表什么,使用 VADER 词典分析来自聚合 Reddit 文本的每行文本的正面、中性和负面情绪的得分,以计算其情绪构成。每条线还被分配一个复合情绪极性得分,其范围从-1 到 1,其中-1 表示该范围的负端,1 表示该范围的正端。利用这些分数,我计算了所有的正面、中性和负面文本的行数,方法是将每一类(正面、中性和负面)中得分超过 0 的行数除以所分析的文本行数。因为每一行都有积极、中性和消极情绪的百分比(换句话说,每行的积极、中性和消极数字并不相互排斥),所以这里的百分比总和不是 100%。
我还取了所有文本条目的中值复合得分,它是 0.126 ,这意味着这些文本条目总体上稍微有点正面。
让我们进一步分析一下。
按主题
我提取了与一些主题相关的文本条目,以便更详细地理解情感构成。我优先选择了社会公正、科学和普通课程、住房和 COVID ,因为它们是最相关的话题,也是我最感兴趣的。总体而言,市场情绪趋于中立。在我分析的任何话题中,积极情绪都没有占据主导地位。
每个类别中的文本条目较少,所以我可以根据需要手动调整总的复合得分。正因为如此,我选择关注复合得分来进行分析(而不是像上面一样,关注每个文本条目的负面、中性和正面情绪)。为此,我将复合得分大于、等于和小于 0 的文本条目分别归类为正面、中性和负面。因为我使用了一个复合分数,所以每个文本条目只有一个复合值(或者,换句话说,每行的正、中和负是互斥的),这意味着每个主题的所有表值总和为 100%。
社会公正这是可想而知的最固执己见的话题之一——80.49%的文本条目总体上是负面。
**Sentiment Percentage
------------------------
Negative 80.49%
Neutral 12.20%
Positive 4.88%**
以下是一个关于社会公正的示例文本条目,其复合情绪得分为-0.2755:
不合逻辑的世界的逻辑叙述
相比之下,关于社会公正的最积极的文本条目获得了 0.4404 的复合情感分数:
嘿,你提出了一个很好的观点。你说得对,这不是一个合适的比较。我猜是从我的角度听来的
科学
切换到一个更积极的主题(或者至少,根据 UT Austin subreddit 上的学生所说),我分析了关于科学的文本条目的情绪。这些文本条目中的大多数在情感上是中立的。
**Sentiment Percentage
------------------------
Neutral 48.15%
Positive 41.67%
Negative 10.19%**
这些条目中的绝大多数都是礼貌性的帖子,询问不同物理、化学和生物课的最佳选择。
得到复合文本条目分数 0.8796 的删节样本文本条目是:
大家好,
我现在是一名 ECE 专业的新生,正在考虑是下学期还是整个夏天去上 PHY303K/103M。任何建议将不胜感激:)
为了将正面和负面并列,这个与科学相关的不太乐观的文本条目得到了-0.6696 的复合情绪分数(不管你是谁,坚持住,伙计):
为什么我在大学表现这么差
班级 围绕这个话题的对话一般都是围绕着建议相关班级注册和满足一定毕业要求的班级。6 个文本条目(在该类别的 59 个条目中)还提到了文化多样性旗帜,这似乎已经从课程表的课程中消失了。围绕该主题的大多数文本条目都是中性的。****
****Sentiment Percentage
------------------------
Neutral 77.97%
Positive 13.56%
Negative 8.47%****
关于接收 0 的复合情感分数的类的典型文本条目是:
既然 2021 年春季的课程表已经出来了,而且大部分课程又上线了,如果你现在在家乡,你打算回奥斯汀吗?或者你打算在家里再呆一个学期?
作为比较,下面是一个负面文本条目,其复合情绪得分为-0.1(与文化多样性标志混淆相关):
春季简易 CD 课程?课程表没有帮助。
住房/居住
关于住房的文本条目通常是中性的或正面的,往往是评论、噪音投诉和建议请求的混合体。鉴于我听说过许多大学生抱怨住在吵闹且不太整洁的西校区,我很惊讶负面的比例如此之低;但是,也许谈论你梦幻般的生活空间并不能成为有趣的话题。
****Sentiment Percentage
------------------------
Neutral 48.21%
Positive 44.64%
Negative 7.14%****
一个面条爱好者的帖子获得了 0.919 的情感复合得分,如下所示。因为强调了最佳选项,这篇文章在情感方面得分很高:**
西校区或附近最好的拉面是什么??老实说,奥斯汀最好的拉面是什么?
负的 post 得分-0.8312 描述了一种可怕的住房体验:
昨晚,大约午夜时分,我以为有人试图闯入我在远西校区的公寓…
科维德 人们对科维德的期望比我想象的要高,但总体情绪仍然是大多是负面的。为了确保阳性测试案例不会被错误地归类为阳性,我重写了阳性测试案例的 VADER 情感词典,并手动检查了文本条目。****
****Sentiment Percentage
------------------------
Negative 52.43%
Positive 25.71%
Neutral 22.86%****
文本条目的示例包括对 UT 安全协议的称赞,其综合情绪得分为 0.8554:
我认为 UT 行动得足够早,有足够的社交距离和清洁协议,加上有限的面对面授课,它能够缩小,不像其他许多大型大学那样谨慎…
复合情绪得分为 0.8908 的讽刺妙语:
高价是值得的,哈哈,我们每隔几周就能得到免费的快速新冠肺炎测试。
以及不太轻松但相似的讽刺性评论,其复合情感得分为-0.6:
在美国,我们做不可能的事。我们已经把新冠肺炎变成了 COVID-21。因为我们没有进行适当的两个月锁定,我们将进行两年锁定。
长角牛和农校真的有那么大区别吗?
为了进一步分析,出于好奇,我比较了德克萨斯大学奥斯丁分校和德克萨斯 A&M 大学的 COVID 反应,同时也因为宿怨难改。为了做到这一点,我从 Aggies subreddit 收集了大约 2000 个最近热门的帖子,从 UT Austin subreddit 收集了大约 2000 个最近热门的帖子,以创建一个包含大约4000 个热门帖子的组合数据集(准确地说是 3907 个)。我决定只使用最受欢迎的书名,这次排除评论,部分原因是因为这样更容易收集数据,但也因为我想概括所有学校,而受欢迎的书名可以让我有一个大视野。
来自 UT 和 A&M subreddit 的合并帖子标题
主题
我进行了 LDA 分析(如上文中的所述),以发现 UT Austin 和 Texas A & M. 3 个主要话题在 UT Austin 和 Texas A & M 两个子区域均有讨论:
- 投票
- 健康/COVID
- 足球
德克萨斯大学奥斯汀分校和 A&M 分校联合主题的 LDA 分析
这些都是合理的总体话题,尤其是考虑到这两所学校都位于德克萨斯州,在那里,高度重视足球是文化的一部分。请注意,这种分析不同于上面的单词袋方法,后者只查看最近帖子和评论中的提及次数;这种分析着眼于更早以前的帖子标题中包含的潜在主题(因此这里出现了与足球相关的讨论,但没有提到早先的)。
分析的下一步是比较两所学校每个主题的 LDA 分数。为了做到这一点,我按照学校对帖子进行了分组,并使用 LDA 计算了每个主题在上午和下午出现的百分比:**
A&M 和德克萨斯大学的潜在主题内容
我很惊讶地看到,由于奥斯汀市在政治上的活跃声誉,Aggies 在投票中得分更高,所以我手动浏览了一些 A&M 的帖子。在鼓励学生在美国总统选举中投票的信息中,有一些异常值(为了匿名,帖子标题被删节):
支持学生的大学站市议会候选人将举办一场户外活动…如果可以,请记得投票给…我。
Aggies 以他们的社区精神而闻名,看起来一些校园选举与总统选举在时间上是一致的。
我也查看了最近 UT Austin 的帖子,但最近所有与投票相关的讨论都围绕着总统选举。
情感比较
为了放大德克萨斯 A&M 大学学生和德克萨斯大学奥斯汀分校学生之间的差异,我按主题对每所学校进行了情感分析。我关注足球和 COVID,因为大多数与投票相关的帖子在两所大学之间没有太大差异,而是中立地鼓励学生投票。
足球
总的来说,德州 AM的学生似乎比德州大学奥斯汀分校的学生对足球有着更为平衡和积极的态度。****
agate playing marbles 玛瑙制成的玩具弹球
****Sentiment Percentage
------------------------
Neutral 61.28%
Positive 27.23%
Negative 11.49%****
27.23%的 Aggie subreddit 帖子对 Aggie football 持积极态度,如以下帖子所示,这些帖子的情感综合得分为 0.7906:
凯尔·菲尔德,我们唯一的真爱
然而,并不是每个农校都同样热情。这篇文章的情感综合得分为-0.2808:
我希望我们足球踢得更好
长角牛
****Sentiment Percentage
------------------------
Neutral 50.00%
Negative 37.50%
Positive 12.50%****
长角牛队比农校队对足球感觉更消极,考虑到围绕“德克萨斯之眼”的争议,这是有道理的。
关于足球最积极的 Longhorn 帖子得分为 0.4215:
在周六的足球赛上:很好
但是奥斯汀赢得了负分。本帖评分-0.7351(编辑匿名):
德州足球让我生气
COVID
德州 A & M 似乎处理 COVID 比 UT 奥斯汀多一点正,但差不了多少。我很惊讶这两所学校的情感复合分数如此相似。
德克萨斯 A&M
****Sentiment Percentage
------------------------
Negative 65.00%
Neutral 30.01%
Positive 4.99%****
Aggies subreddit 上最积极的帖子是关于给学生休息时间的行政决定,得分为 0.6019:
副教务长迈克尔. t .斯蒂芬森回应道:……我们担心学生的心理健康,所以我们在那个星期五离开了他们,并在学期初增加了另一个假期。
然而,并非所有的领导力都是平等的。这是一篇关于 COVID 在 Aggies subreddit 上的负面帖子,得分为-0.6808:
有没有办法匿名举报一个不遵守新冠肺炎准则的教授?
UT 奥斯汀
****Sentiment Percentage
------------------------
Negative 65.42%
Neutral 33.46%
Positive 1.09%****
相比之下,UT 奥斯汀的职位更倾向于中立。由于一名工作人员不幸去世,负面情绪也有所增加。
关于 COVID 带来的卫生改善,最积极的帖子得分为 0.5766:
我喜欢的 COVID 的一个结果…
另一方面,德克萨斯州每日得分-0.258 的负面帖子让人们深入了解奥斯汀开始慢慢重新开放时德州的状况:
住在校外的学生担心新冠肺炎的安全,因为宿舍举办现场活动——每日德克萨斯
名声
为了弄清楚这两所大学的人与每所学校有什么联系,我首先对聚合数据集进行了词频分析,以找到常用词。
UT Austin 和 A&M 子词典联合词频分析
从这些词中,我决定寻找与频率分别为 73、72、61 和 48 的游戏、良好、工程和 covid 的关联,因为这些是最常见的有趣主题。然后我在 UT 和 A & M 上运行了一个 lift 分析,使用这些单词找到这些单词之间的关联。
高校与大学的关联提升矩阵
计算升力的方程式是:
升力方程(图片由作者提供)
本质上,它通过同时提到两个单词的帖子数量除以两个帖子数量的乘积,找到两个单词之间的关联。当 lift > 0 时,我们可以声称两个词之间有关联。的提升分数越高,则的联想越强。
在上表中,我们可以看到高校与工程、游戏、好相关联。 UT 则与 COVID 和 game 关联。
我用多维标度 (MDS)图可视化了这些关联。
UT 和 Aggies 之间的 MDS 情节(图片由作者提供)
该图用距离来表示关联强度:两个标签越近,关联越强。注意,每个标签的位置在该图中本身没有意义;相反,每个标签相对于其他标签的相对位置显示了每个标签的距离和关联关系。(德州 A & M 的右下方位置并不意味着德州 A & M 在本次分析中得分低于 UT Austin 事实上,数字讲述的是相反的故事。)作为理智检查,我们可以看到 UT 离 A & M 最远,这表明人们对 UT 和 A & M 的看法最不一样。考虑到升力的计算方式和这两所学校的背景,这是有道理的。我们可以看到比赛似乎在中间,这也是有道理的,因为两所学校都参加足球比赛。**
我有点惊讶地发现,人们更倾向于将与 A & M 联系在一起,但 A & M 的校风和文化似乎更强烈,说来有趣,这可能会带来更明确的声誉。另一方面, UT 奥斯汀与 COVID 有很强的关联性,很可能是由于某工作人员不幸去世。**
最终想法
在本文中,我主要关注 UT Austin 和德克萨斯 A&M,但本文中的概念和技术可用于回答任何数据问题,特别是那些与任何具有公开可用的用户生成数据的组织中的 COVID 反应相关的问题。
这个项目对我来说是一个很好的方式,可以同时应用和提高我的 NLP 分析和编码技能,同时也赶上了德州两所最大的大学的进度。A&M 和德克萨斯大学似乎都管理得相当好(尽管对他们目前的足球队来说不能这么说),并且正在回归正常。总的来说,我对许多结果并不感到惊讶,直到我比较了 A&M 大学和德克萨斯大学奥斯丁分校。特别有趣的是,A&M 的投票和工程主题分数都高于德克萨斯大学的分数。就情绪而言,农校比长角牛更不消极。
我最后要说的是:虽然我不愿意承认,但数据不会说谎:A&M 可能并不那么糟糕,但在一切恢复正常之前,我们可能需要迎头赶上。
计算机科学和其他创造性学科是多么的相似
事实证明,英语、绘画和计算机科学并没有那么大的不同,它将完全改变你编写代码的方式
里卡多·安南达尔在 Unsplash 上拍摄的照片
我在大学一年级的一些最美好的回忆是在随机的宿舍里进行的深夜谈话,每周变换地点,但在混乱的班级、社交生活和紧张的日程安排中无时不在。我清楚地记得其中的一次演讲,因为讨论的主题彻底改变了我对文科和理科之间差异的看法。
那是一个朴实无华的周四晚上,我的一位计算机科学家同事朋友邀请我去他的房间吃点东西,并为下周五到期的一个项目工作。我蹒跚着走上楼梯,走进一个有五个人的房间。我立刻知道那天晚上不会再有作业要完成了,于是我坐在小房间里最底层的一张床上,等待着一次有趣的谈话。现在,当你在任何一所大学做自我介绍时,有几个话题会在的前五分钟内被提起。这些是你的名字,你的专业,你住在哪里,你这个周末要做什么。对于这个特殊的群体,所有这些都被立即提出来。房间的分布是一个英语专业,一个电影专业,两个计算机专业,一个平面设计专业。这听起来像一个糟糕的酒吧笑话的开始,来自各行各业的不同党派走进一家酒吧,在点饮料时发生了一些不幸。这一次,事情有点不同。
谈话一开始就中断了,因为我在大学里学到的第一件事就是,你的大多数朋友都来自于和你一起上课、一起生活的人,而且第一类人几乎完全按照专业来分类。对话围绕着家庭作业、项目和每个学科的每个人都有的可怕的期中考试,这很容易。舒服。然而,在这个晚上,没有这些熟悉的话题可以依靠,所以我们开始了寻找我们各行各业之间的共同点的严格道路,比较我们所有人共有的爱好和特点,以找到一些共同点。突然,在交谈的间歇,这位平面设计专业的学生问大家,“你们的创意过程是怎样的?这个问题改变了我对计算机科学的先入之见。
我一直认为科学是一种纯粹的逻辑行为,试图从生命现象中去除神秘性和创造性。然而,当每个人都比较他们的过程时,英语专业概述了写作过程和作家的恐惧(我在这篇文章中经历的恐惧),平面设计师不能做他在脑海中看得如此清楚但不知道如何在 Photoshop 或 Adobe XD 中做的一件事,我意识到计算机科学是一种天生的创造性行为。当冲洗出数据结构问题的解决方案时,与作家将他们头脑中的想法冲洗到纸上、设计师将他们的想象放到画布上或电影制作人将他们的想象放到大屏幕上一样,同样的过程也被应用于寻找解决方案。唯一的区别是用于将思想提交给媒介的工具。
你,读者,可能会因为这种过分简单化的陈述而感到恐惧。但是,我鼓励你看看你自己的职业,或者对这方面的热情,看看你如何实施你的创造过程。这个过程让我成为了一名更好的程序员和更有创造力的问题解决者。
在认识到这一点之前,我将计算机科学视为一门工具学科。有一个问题,有一个预定义的方法来解决它。这根本不是真的,我在给自己画一个盒子,它扼杀了我的创造能力。当我开始考虑将代码作为创造性思维过程的媒介,并致力于解决个人的创造性问题时,我打开了我的思维,找到了我甚至不知道的解决方案。代码不是解决问题的最终目标,而是一种工具,人们可以通过它从无限的可能性中创造出一种解决方案。我踏上了将计算机科学转化为一种艺术形式的旅程,拥有画家、作家、设计师或任何其他创意人员致力于其工作的所有技术和意图。
我如何改变我的编码风格来反映创作过程
有了这种认识,我开始改变自己的工作流程,以利用创作过程。就像一个画家知道他画笔包里的每支画笔(我不知道它们叫什么,请原谅)做什么一样,我开始学习编码的形式:学习什么时候使用 for 循环和 while 循环,在这些地方我可以使用一些创造性的数组构造来修整条件。就像一个作家不会东拉西扯地传达一个只需要一句话就能传达的观点一样,我会仔细检查我的代码,消除冗余和不必要的冗长。就像一个平面设计师不会手工绘制一万条可以由 Adobe XD 这样的程序绘制的线一样,我学会了如何使用 Pycharm 和 Unix Terminal 这样的工具来加快我的工作流程。
伴随着创造过程的好处,同样的缺点也随之而来:代码编写人员停滞不前,错误层出不穷,缺乏灵感。为了解决这些陷阱,可以从所有领域的创造者那里获得更多的洞察力。对于代码编写人员来说,移动到另一个代码段,然后再回来,可以实现流畅的转换,从而最大限度地减少挫折感。对于无法解决的错误和缺乏新想法,Github、Stack Overflow 和 Reddit 上其他人的灵感允许新想法注入我的工作流,也允许我在这个过程中学会一些新技巧。
正如一个创意者会向大师们学习他们的技艺一样,我也向计算机科学领域的大师们学习:Linus Torvalds、David Patterson 和其他人,不仅向他们的项目学习,还向他们的风格和技术学习,学习他们如何将他们的创意付诸实践来解决问题。
有了所有这些变化,并重新评估我自己的创造性工作流程,我不仅成为了一名更好的开发人员,而且我为开发过程发展了自己的风格和倾向,并从中找到了乐趣。就像作家或设计师一样,通过创造性的过程来削减解决方案的无限可能性的过程可以被提炼,并成为一种分享的乐趣。不管你从事什么行业,意识到你的行业和其他人的行业并没有太大的不同并不会有什么坏处。去创造吧!
置信区间和预测区间如何工作
以最简单的方式学习它
来源:https://imgflip.com/memegenerator
置信区间
置信区间是根据样本数据计算的估计值,用于确定可能包含感兴趣的总体参数(均值、标准差)的范围。例如,如果我们的总体是(2,6),均值的置信区间表明总体均值可能在 2 和 6 之间。我们有多大把握这样说?明明 100%对吧?因为我们知道所有的值,我们可以很容易地计算出来。
但在现实生活问题中,情况并非如此。研究整个人口并不总是可行或可能的。那我们该怎么办?我们采集样本数据。但是我们能依靠一个样本吗?不会,因为相同数据的不同样本会产生不同的均值。
因此,我们采取了许多随机样本(来自同一人群),并计算每个样本的置信区间,这些范围的一定百分比将包含真实总体参数。
这个百分比称为置信水平。95%的置信水平意味着从 100 个随机样本中,我希望 95 个置信区间包含真实的总体参数。
还是,迷茫?我们通过一个例子来理解这一点。
假设你在一家制造篮球的体育用品公司工作。有几个制造工厂,每个工厂每天生产 10,000 个球。在公司包装和发货之前,你必须测试这些球。
标准行业程序之一是检查球的第一次反弹高度。你的同事建议随机抽取一个样本(来自同一家制造厂),并围绕平均反弹高度形成一个置信区间。
你拿 100 个球,让它们从你办公室的一楼落下,测量平均反弹,平均反弹的 95%置信区间是 110-120 厘米。我可以说,我有 95%的把握认为所有篮球的平均反弹高度(来自一个工厂的整个群体)都在这个范围内。
注意:这并不意味着在 95%的时间里,弹跳高度都在这个范围内。
正如我们在上面这张图片中看到的,100 个不同的样本有 100 个置信区间。红线是人口的真实值。其中 95 个区间包含真值,其他 5 个不包含。
一些重要的考虑事项:
- 随着我们抽取越来越多的样本,我们的置信区间变得越来越窄。较大的样本将减少抽样误差,给出更精确的估计,从而得到更小的间隔。假设,你决定测试 5000 个球,你会得到一个更好的反弹高度范围的估计。
- 随着我们增加置信水平,比如从 95%到 99%,我们的范围变得更宽。这听起来可能违背直觉,但仔细想想。要更确信区间包含真实参数,范围应该更大。例如,我可以 100%确信球的反弹高度是 0 到无穷大。
我希望你对置信区间有所了解,现在让我们看看什么是预测区间。
预测区间
拟合回归模型后会发生什么?我们预测因变量的值。
在给定自变量的特定值的情况下,可能包含单个新观察值的因变量的值的范围是预测区间。
让我们以更早的篮球为例来理解这个概念。
假设,使用一个回归模型(通常是线性回归)和给定的独立变量的特定值,如橡胶材料,缝合类型(基于已经生产的篮球),,我们训练我们的模型。该模型现在预测的预测区间为 105-125 厘米。 我们现在有 95%的把握,用同样的设置生产的下一个篮球的反弹高度将在这个范围内。
请注意,我们在这里预测的不是平均值,而是单个值,因此存在更大的不确定性,因此预测区间总是比置信区间宽。
预测区间经常会与置信区间混淆。它们是相关的,但是这两个过程具有不同的计算和目的。
预测区间预测未来单个观察值将落在什么范围内,而置信区间显示与数据的某些统计参数(如总体平均值)相关的值的可能范围。
我希望你喜欢读关于 CI 和 PI 的书,并从中有所收获。
参考文献:1)【https://sites.nicholas.duke.edu/statsreview/ci/】
**2)https://AP monitor . com/che 263/index . PHP/Main/python regressionstatistics
**3)https://sites.nicholas.duke.edu/statsreview/ci/
**4)https://statisticsbyjim . com/hypothesis-testing/hypothesis-tests-confidence-intervals-levels/
如何混淆流行与概率创造了医疗事故的背景
正确解释阴性 Covd-19 抗体检测结果
新冠肺炎让我们许多人成为了数据科学家。我希望它也能让我们中的一些人成为决策科学家。这将降低像我的朋友简这样的人不得不从她的初级保健医生那里处理医疗事故的几率。
在我向你介绍简的故事之前,让我先告诉你约翰的故事,他是一个谨慎的人,一有机会就去做新冠肺炎抗体检测。当检测结果为阴性时,他成为无症状携带者并产生免疫力的希望破灭了。约翰试图解释这些结果,而你,一个初露头角的决策科学家,被要求提供帮助。你首先查看 CDC 网站,发现他们正试图通过一个例子来教育你敏感性和特异性,其中敏感性为 90%,特异性为 95%,人口中新冠肺炎的患病率为 5%。让我们提醒自己敏感性和特异性的定义:
敏感度:给定被测人群中有人患有新冠肺炎,抗体检测结果呈阳性的人群比例。
特异性:给定受检人群中有人没有新冠肺炎,抗体检测结果为阴性的那部分人。
现在,我们准备解决第一个问题。
问题 1:在抗体检测呈阴性的人群中,您认为既往新冠肺炎感染的患病率是多少?
A.0%
b . 0.5%
c . 49%
d . 50%
互联网上充满了对数学的解释,下面是我制作的一个视频,展示了一种直观的理解方式。
上面的视频显示了如何使用基础代数通过灵敏度和特异性来计算条件患病率。以最高质量设置在全屏模式下观看。
上面的视频显示我们的答案是 0.5%。如果你选了 B,你做得很好!现在,约翰问你,尽管抗体检测呈阴性,他感染新冠肺炎病毒的可能性有多大。你会怎么说?
问题 2:假设你知道约翰的抗体检测呈阴性,你认为约翰感染新冠肺炎病毒的最合理概率是多少?(假设你对约翰一无所知)
A.0%
b . 0.5%
c . 10%
d . 50%
停下来思考。完成后,向下滚动到向日葵下面。
来源: Capri23auto
来源:曼弗雷德·里希特
概率是对你信念的一种衡量,而不是一种流行或被发现的频率。你可以选择四个选项中的任何一个,但我们问的问题是根据你目前掌握的数据,你最容易证明的可能性。如果你愿意将一个小样本的数据投射到一个大得多的人群中,这将是选项 B。
概率是对你的信念的一种衡量,而不是一种普遍性或被发现的频率。
如果你选择 C 或 D,你将被要求解释除了所提供的数据之外,你还能收集到什么信息。如果你选了 A,那我就向你挑战,看看你是不是真心的。我们人类唯一可以 100%确定的是,我们终有一天会死去(而且我们昨天还没有死去)。对其他任何事情都 100%确定是一个非常糟糕的想法。这是列表中唯一违反科学基本原则的答案。引用敬爱的理查德·费曼的话,
“在科学中,怀疑是必要的;为了科学的进步,绝对有必要将不确定性作为你内在本性的一个基本部分。为了在理解方面取得进步,我们必须保持谦虚,承认我们不知道的事情。没有什么是确定的,也没有什么是确凿无疑的。你调查是因为好奇,因为未知,而不是因为知道答案。随着你在科学领域获得更多的信息,不是你在发现真相,而是你在发现这个或那个或多或少有可能。
也就是说,如果我们进一步调查,我们会发现科学的陈述不是关于什么是真什么是假,而是关于已知的不同程度的确定性的陈述……科学的每一个概念都处于绝对虚假或绝对真实之间的某个刻度上,但并不在这两者的两端。"
科学的每一个概念都在一个刻度上,介于绝对谬误和绝对真理之间,但不在两者的末端。
所有这些听起来相当学究气和知性,但我向你保证不是。现在让我们回到简的故事来理解为什么。在纽约市新冠肺炎疫情的巅峰时期,简病得很重,表现出了新冠肺炎的所有严重症状。谢天谢地,她和向我伸出援手的母亲在一起。我立即建议简接受电话预约,她照做了。医生证实,这看起来像是一个严重的新冠肺炎病例。有人建议简彻底休息一个月。大约 6 周后,除了一个人,严重的症状都消退了。她仍然不能说话。她需要更多的休息,她的工作场所现在已经开始了一个短期的残疾评估过程。这需要初级保健医生(PCP)的认证。简做了抗体测试,结果呈阴性。她把结果带给了她的医生。
在我继续讲这个故事之前,让我们试试另一个问题。
问题 3:如果你是一名检查了 Jane 的报告和抗体测试结果的 PCP,你认为 Jane 感染新冠肺炎病毒的可能性有多大?
A.0%
B. 0.5%
C. 24%
D. 55%
再想想向日葵,然后向下滚动。
来源:像素
来源: Ulleo
我知道你没有选 0%,但不幸的是,简的 PCP 就是这么做的。医生宣布简不可能感染新冠肺炎病毒,因为她的抗体测试呈阴性。PCP 违反了费曼的科学原理,因为它是 100%确定的。在 1000 个抗体测试的人群中,简的测试结果可能是假阴性的,而 PCP 不允许这种可能性。
然而,PCP 犯了第二个错误。他混淆了流行和概率。只有当你没有关于 Jane 的其他数据时,仅仅依靠新冠肺炎的患病率数据才有意义。然而,与上面 John 的例子不同,我们有更多关于 Jane 的信息。她不是一个统计上统一的数字,而是一个有着非常特定症状的人类。使用概率的全部意义在于允许我们自由地考虑多种信息来源,并在我们的决策中使用它们。Jane 的 PCP 忽略了 Jane 提交的每一份病历。然后,在一个认知失调的显著举动中,他用一个为什么简仍然不能说话的论题来捆绑他对新冠肺炎可能性的拒绝。他在给保险公司的便条中写道,她肯定患有焦虑症。这并没有伴随任何焦虑药物。与此同时,简的母亲告诉我,她的女儿一直很平静,做好了面对死亡的心理准备,如果那是结果的话。当 PCP 的办公室分享已发送给处理短期残疾流程的保险公司的笔记时,Jane 和她的母亲发现了焦虑的解释。你可以猜测一下保险公司将如何处理 PCP 的票据。
概率性思维会如何不同地引导 PCP 的思维?这就是贝叶斯定理的用武之地。本文开始时提供的相同信息现在使用下面的概率树显示。我们没有将此解释为流行,而是明确定义了以下区别:
- 患者有:这种区分有两个度,有 Covid 和没有 Covid。在我们获得他们的抗体测试结果之前,我们认为任何我们不认识的人都有 5%的机会患有 Covid。这 5%是一个信念的飞跃。我们的主张是,我们相信我们在过去的数据中看到的在小样本中的流行程度具有广泛的适用性。
- 检测说:这里也有两个度数,用引号表示,表示“Covid 阳性”和“Covid 阴性”的检测结果我们首先评估在患者患有 Covid 的情况下,测试显示 Covid 阳性或阴性的可能性,然后在患者没有 Covid 的情况下进行同样的评估。这在技术上被称为可能性,是信仰的又一次飞跃。我们说,考虑到为校准测试而进行的高度有限的测试,我们愿意将灵敏度和特异性更广泛地投射到人群中。
然后,在给定特定测试结果的情况下,我们可以推断出 Covid(或不 Covid)的概率。你只需要中学代数就可以做到这一点,使用下面的图解方法,运用贝叶斯理论。
一个动画视频展示了树翻转在我们的例子中是如何工作的。你会得到和第一个关于患病率的视频相同的结果。以最高质量设置在全屏模式下观看。
使用这张谷歌表来玩下面的模型并理解数学。
左边的树显示了与我们开始时相同的信息。右边的树是“贝叶斯翻转”,它允许我们在给定测试结果的情况下计算 Covid 的条件概率。在这里,我们看到了与文章开头直观显示的结果相同的结果。
现在,我们已经准备好使用我们所掌握的信息。首先,让我们从世卫组织网站开始,它列出了常见和不太常见的症状,然后继续定义严重症状:
简呼吸困难、气短、胸痛、有压迫感,并且无法动弹。她已经并继续丧失语言能力。然而,当她去找她的心理医生时,她被告知她对新冠肺炎的怀疑是焦虑的结果。如果你和我一样在阅读这篇文章,那么从科学角度来说不负责任地给出了 5%的新冠肺炎概率。事实上,考虑到她有世卫组织列出的严重疾病的所有症状,我之前的预测上升到了 75%。我对这样的先验感到很舒服,因为有两个远程医生为她证实了这一点,就像最近的一次心脏病专家访问和一次紧急护理访问一样。对 Jane 来说不幸的是,是 PCP 向保险公司宣布判决。让我们回到数学上来。如果 PCP 有概率倾向,他会画出下面的树:
正如你所看到的,新冠肺炎接受抗体检测呈“Covid -ve”的概率现在已经从 0.5%跃升至 24%。这是上面问题 3 中的答案 C。即使抗体检测结果为阴性,也有大约四分之一的人会感染新冠肺炎病毒。既然 0.5%不确定性的小孔已经扩大到 24%的窗口,为什么还要止步于此?
与此同时,我一直将抗体的存在与新冠肺炎的存在混为一谈。如果那不是真的呢?决策分析邀请我们问一个基本的问题:“数据中缺少了什么可以解释我们所看到的许多东西?”首先,如果事实证明不是每个感染新冠肺炎病毒的人都产生了可以被检测出来的抗体,那对我们得出的结论来说将是非常重要的。原来,疾控中心还没有批准抗体测试,并仍在评估它们。
决策分析邀请我们问一个基本的问题:“数据中缺少了什么可以解释我们所看到的许多东西?”
如果我持怀疑态度,相信只有三分之一的新冠肺炎患者会产生抗体,我会得到惊人的不同结论,就像这样:
请注意,没有理论上理解的机制,即没有 Covid 的人会产生抗体。然而,我将遵循科学原理,给出 1%的概率,而不是 0%的概率,来解释某人可能已经具有这种抗体的未知途径。
如果简的检测结果是阴性,我认为她仍然有 Covid 的概率是 68%!应该问的问题是:我有理由认为有 33%的几率会产生抗体吗?有一些零星的证据应该让我停下来,比如在一所监狱里,几乎每个人都产生了抗体。
事实上,我倾向于认为大多数新冠肺炎患者会产生抗体。对我来说,问题是这些抗体能否被市场上的特定检测试剂盒检测到。考虑到我们在这方面的早期,一项研究永远不足以让我们形成坚定的信念,我不能证明超过 2/3 的可能性是正确的。让我们看看这个信念会发生什么:
我认为简让新冠肺炎做的抗体测试呈阴性的可能性为 55%。这是上面问题 3 的答案 D,与 0.5%的新冠肺炎几率相差甚远。简单而强大的概率数学允许我们以符合常识的方式进行推理。 我强烈怀疑简的身体正在努力对抗感染,鉴于她还不能说话。 这很有可能是没有检测到检测所寻找的可检测抗体的原因。在她看到并感觉到自己说话能力的提高后,至少重复两到三次抗体测试是有意义的,因为在这种情况下,她更有可能产生可检测的抗体。
美国疾病预防控制中心和其他国家的同行应该根据新冠肺炎症状的严重程度来调整他们的特异性数字。如果他们这样做了,他们可能会发现对那些有严重症状的人的特异性要低得多。在这种条件下,我之前 33%的怀疑可能是有道理的,因为许多有严重症状的人都挺不过来,而那些痊愈的人需要很长时间。计划使用抗体测试作为评估多少人感染了新冠肺炎病毒的方法的国家会希望将这一条件纳入他们的思考。
简已经收到了其他人的建议,以医疗事故起诉她的医生,但她太累了,打不了这场仗。我对提升我们的决策方式更感兴趣。她的 PCP 最有可能遵循一个简单的新冠肺炎清单,而不是费心让自己与不断发展的世卫组织指南保持同步。如果你知道像简的 PCP 这样做决定的医生,我希望这篇文章能帮助你建设性地与他们打交道。拥抱不确定性是正确的科学立场,它开辟了一个完全不同的思维领域,比虚假的确定性有用得多。
感谢 Rahul Brown、Alejandro Martinez 博士和 David Hutton 博士在撰写过程中提供的反馈。这里的任何错误都是我造成的。
世界的联系有多紧密?通过国家间的航空联系进行分析
穿越 150 多个国家的旅行,使用 python 和图表
你有没有想过这个世界的联系有多紧密?
可能是的,当新冠肺炎病毒开始在中国传播时,我们都开始猜测它是否有任何机会到达我们的国家。
如果你还有任何疑问,世界是非常连接,我们将在以下段落中检查它。
准备
我从Openflights.org下载了 3 个数据集,包含 2015 年以来的航线、航空公司和机场。
总共有 67,600 条航线(商业和私人)往来于大约 200 个国家和地区。
我使用 Python(主要是 Pandas 、 Networkx 和 Seaborn 库)处理数据,然后我用 Gephi 做网络的可视化。
为了进行分析,我们将使用以下概念:
中心性 或居间:表示那个国家在世界上有多中心或孤立,换句话说,从那个国家到世界其他地方有多容易。
国家的重要性 :表示国家在网络中有多重要,即国家在与其他国家的联系的数量和质量上的联系程度。它不一定是一个中心国家,但它可能与其他国家有很多联系。
为了便于阅读图表,我们将把颜色理解为国家在网络中的重要性,将大小理解为其中心性。
至于地位,它将是国家的中心地位和与之相连的国家之间的结合。
让我们开始旅行吧
首先我们要排除一些中心性值非常低(几乎孤立)的国家和地区,比如图瓦卢(大洋洲)、直布罗陀(欧洲)、百慕大(美洲)、莱索托或者布隆迪(非洲)。
让我们根据的空中连接来看看世界看起来是什么样子的
作者图片
在这张图片中,我们可以看到大陆根据它们的航空联系被分组。
欧洲在中间,亚洲稍微高一点。在左下角我们看到美洲,在左上角是大洋洲国家,在右边是非洲国家。
如果我们再放大一点:
作者图片
我们首先可以确定的是,欧洲国家位于图的中心,此外,它们的几个节点都很大。
这向我们表明,从字面上看,我们可以把这块大陆视为世界航空联系的中心,是其国家之间以及与其他大陆之间联系最多的地区。
与此同时,我们很少看到大洋洲、非洲和美洲之间的联系。为了能够沟通这些大陆,有必要通过亚洲或欧洲。
记住颜色是国家在网络中的重要性和大小是它的中心性,我们可以再次放大图表的中心,看到美国也是一个中心国家,在网络中非常重要。尽管在美国,但它与世界其他地方有很多联系。
作者图片
如果我们继续环游世界,根据节点的大小,我们可以在图中看到网络上连接最多的国家是法、美、英、德、阿联酋。
如果按颜色分析,连接数最高的国家(重要性 ) 实际上是一样的,虽然我们看到澳大利亚和加拿大即使不是中心国家也包括在内。
国家之间最重要的联系是什么?
作者图片
这是我们想回答的另一个问题。为此,我们求助于用 Python 和熊猫完成的工作。
我们可以看到,最重要的联系是在英国、西班牙和德国之间,以及美国、墨西哥和加拿大之间。
新冠肺炎
最后,回答我们在开始时问自己的关于新冠肺炎病毒传播的问题,病毒从中国传播到世界其他地方有多容易?
使用最短路径的概念,让我们看看中国是如何与美国的一个低中心性国家联系起来的,比如法属圭亚那。
作者图片
它只需要 4 步:中国,墨西哥,巴西和法属圭亚那。
让我们看看另一个例子,我们如何把中国和一个非洲的低中心国家联系起来?在这种情况下,我选择冈比亚。
作者图片
同样,只需要 4 个步骤:中国、安哥拉、摩洛哥和冈比亚。
结论
我们通过航线观察了一个超互联世界。然而,除了美国之外,T4 主要集中在欧洲的几个国家和亚洲的一些国家。
此外,我们还发现了空中网络中最重要的个国家,这些国家与许多国家都有大量的联系。比如:法国、英国、美国、德国或者阿联酋。
最后,我们看到从中国到美洲或非洲的一个偏远国家只需要 4 步。这解释了新冠肺炎病毒是如何迅速影响整个世界的。
作为本书的结束语,就其在全球航空网络中的中心地位或重要性而言,有没有哪个国家让您感到惊讶?
下一步将对世界上所有的城市进行同样的分析。
无论如何,乍一看,这个世界是紧密相连的,无论在另一个国家发生什么,它确实比我们想象的更近。
卷积神经网络如何解释图像
深度学习+生物
关键构建模块的直观指南
本文的目的是让对卷积神经网络中的关键层有一个直观的了解。这个想法是超越简单陈述事实和探索图像处理实际上是如何工作的。
目标
假设我们的目标是训练一个深度学习网络,以成功区分如下所示的猫和狗的图像
让我们从思考这样的算法必须克服哪些挑战开始。首先,它必须能够检测不同颜色、大小、形状和品种的猫和狗。当只能看到狗/猫的某一部分而不是整个部分时,它也必须工作。该算法必须对图像中不止一只狗/猫的存在敏感,最重要的是,它必须是空间不变的——它必须不期望狗/猫在图像的某个部分。在下面的章节中,我们将探讨 CNN 架构的不同组件如何产生所有这些功能。
计算机如何读取图像。
图像由像素组成,像素值代表亮度,范围从 0 到 255。0 代表黑色,255 代表白色,其他都是灰色。像素越多,图像质量越好。
图像质量随着像素数的增加而提高。[作者制作]
虽然灰度图像是由单个通道(即单个 2D 像素阵列)组成的,但 RBG 格式的彩色图像是由三个不同的层组成的,这三个层相互堆叠在一起。
RGB 图像的三个通道, r ed, g reen, b lue。【作者制作】
多层感知器的局限性。
传统的神经网络不适合像图像分类这样的深度学习应用。每个像素的内容在输入层分别输入到感知器中。对于尺寸为 6003773 的 RGB 图像,仅输入层要学习的参数总数将为(6003773*2(每个神经元两个参数,权重和偏差))~ 150 万。这个数字将与层数成线性比例。然而,这并不是 MLP 面临的唯一挑战。MLP 没有内在的空间不变机制。如果一只 MLP 已经被训练来检测图像右上角的狗,当狗位于其他位置时,它将失败。
卷积神经网络旨在使用内置机制来改善这些缺点,该机制用于 (1)提取不同的高级特征(2)引入空间不变性(3)提高网络学习能力。
图像特征提取。
卷积(具体来说是离散卷积)是基于使用线性变换来从图像中提取关键特征,同时保持信息的顺序。输入与一个内核进行卷积,产生输出,类似于人类视觉皮层神经元网络产生的响应。
核心
内核(也称为滤波器或特征检测器)在水平和垂直方向上以预定的步长(称为步长)对输入图像矩阵进行采样。当核在输入图像上滑动时,计算核的每个元素与输入图像的重叠元素之间的元素乘积,以获得当前位置的输出。
卷积:用 33 滤波器 K 对表示为 771 维张量的图像 I 进行卷积,得到 55 的输出图像。上面显示的是一个乘法步骤。来源,图片免费分享。
当输入图像由多个通道组成时(几乎总是如此),内核的深度与输入图像中通道的数量相同。在这种情况下,点积被相加以获得由单个通道组成的最终特征图。如果你是矩阵乘法的新手,看看这个 youtube 视频的详细解释。
单步卷积:该动画展示了内核(显示为一个 3*3 的移动正方形)如何从左到右和从上到下扫描输入图像,从而在右侧产生输出图像。对于一步一个卷积,内核在每一步中向每个方向移动一个单位距离。来源,图片免费分享。
每个卷积层由许多不同的滤波器组成,每个滤波器提取不同的特征。虽然由单个卷积层构成的 CNN 将仅提取/学习低级特征,但是添加连续的卷积层显著提高了学习高级特征的能力。
特征提取:一个 600377 的灰度图像与 4 个不同的 33 滤波器卷积,导致不同的图像特征被提取到不同的程度。[作者制作]
整流器
为了在系统中引入非线性并提高学习能力,卷积运算的输出通过非饱和激活函数,如 sigmoid 或整流线性单元(ReLU)。看看这篇关于这些和其他几个常用激活函数的优秀文章。最常用的激活函数 ReLU 本质上保留正值,并用零替换负值。
整流器:两个最广泛使用的整流器函数,sigmoid 和 ReLU。[作者制作]
填料
与输入图像相比,由卷积产生的特征图在尺寸上更小。对于一个输入图像 I * I 与大小为 K * K 的核进行卷积,步长为 S ,输出将为[(I-F)/S+1】*[(I-F)/S+1】。这可以导致由几个卷积层构成的 CovNets 中的图像尺寸显著减小。输出图像周围的零填充 [(F-1)/2] 可用于保持卷积输出。
对于尺寸为 I * I 的输入图像与尺寸为 K * K 的滤波器以步长 S 和填充 P 进行卷积的最一般情况,输出将具有尺寸[(I+2P-K)/S+1]*[(I+2P-K)/S+1]。
填充:当一个 55 的图像与一个没有填充的 33 内核进行卷积时,得到的图像是 33。单层填充将输入图像尺寸更改为 77。当与 33 滤波器卷积时,会产生 55 输出,与原始输入的大小相同。来源,图片免费分享。
联营
汇集卷积输出,以便引入空间不变性,即在不同图像中检测相同特征的能力。这里的想法是保留与 CNN 必须了解的重要特征相对应的关键信息,同时通过去除无关紧要的信息来减小图像大小。虽然有几种变化,但最大池是最常用的策略。卷积乘积被分割成大小为 K * K 的非重叠面片,并且在输出中只记录每个面片的最大值。
Max-Pooling :一个 44 的输入图像与一个 22 的内核进行 Max-Pooling,产生一个 2*2 的输出。来源,图片免费分享。
其他不常用的汇集策略包括平均汇集、“混合”最大平均汇集、随机汇集和空间金字塔汇集。
MaxPooling :虽然图像尺寸大大减小,但是池化图像仍然包含训练图像分类网络所需的所有关键特征。请注意,stride 2 maxpooling 操作对图像质量的影响很小。[作者制作]
到目前为止所讨论的 CNN 的两个关键元素:卷积层(由内核、步幅、激活函数定义)和池层以预定的模式组合在一起,以定义 CNN 架构。虽然我不会进入架构细节,但在下一节中,我们将讨论这些神经网络进行图像处理的一些一般特征。
可视化内层
我使用了一个公开可用的带标签的猫&狗图像数据集,并训练了一个二进制分类器(inceptionv3)。使用这个训练过的网络,我们可以感受一下 CNN 实际上是如何处理图像的。
首先,我们获取一个样本图像,并通过这个训练好的网络进行传递。3 个卷积和相关激活层(我使用 ReLU)的输出如下图所示。显而易见的是,随着我们沿着网络向下移动,输出变得越来越难以理解。当我们在第 25 层时,很难判断输入网络的图像是一只狗还是一只猫。值得注意的是,这个网络的整体架构相当复杂(这里不包括),第 25 层甚至还不到网络的一半。那么这些层实际上在学习什么呢?仅仅看下面的图片并不明显。
当输入狗的图像时,训练好的 CNN 的卷积和相关的激活层。[作者制作]
上图只是显示了输入图像的每个图层的输出。我们需要的是可视化每个卷积层的不同内核。这将告诉我们每个过滤器正在检测什么。我们从随机噪声构成的图像开始,并针对层中的每个内核对其进行优化。换句话说,我们在一个经过训练的网络中使用一组过滤器,并询问“什么样的输入图像将激活这个特定的内核”。了解这张图像将会告诉我们更多关于特定过滤器检测的内容。这个逻辑和相关代码的更详细的解释可以在这里和这里找到。
所选图层的特征可视化。[作者制作]
上面可视化的是与上面相同的层的一些过滤器激活模式。不同的层由图像的不同部分激活。层 1 本质上是由水平和垂直边缘激活的边缘检测器。随着我们深入网络,卷积核识别的模式变得复杂和稀疏,因为在这些阶段提取了更多的抽象图像特征。
结论。
在本文中,我试图解释不同卷积层的设计和内部工作原理。如果你有任何建议,请给我留言或写信到 aseem.kash@gmail.com。
深度学习神经网络中卷积层是如何工作的?
入门
理解卷积及其参数的生动方式
在深度学习中,卷积层是许多深度神经网络的主要构建模块。该设计的灵感来自视觉皮层,在视觉皮层中,单个神经元对视野中被称为感受野的受限区域做出反应。这些区域的集合重叠覆盖了整个可视区域。
虽然卷积层最初应用于计算机视觉,但其平移不变的特性允许卷积层应用于自然语言处理、时间序列、推荐系统和信号处理。
理解卷积的最简单方法是将其视为应用于矩阵的滑动窗口函数。本文将介绍 1D 卷积的工作原理,并探讨每个参数的影响:
- 内核大小
- 填料
- 进展
- 扩张
- 组
卷积是如何工作的?(内核大小= 1)
卷积是一种线性运算,涉及输入权重相乘并产生输出。乘法是在输入数据数组和权重数组(称为内核(或过滤器))之间执行的。在输入和内核之间应用的运算是元素点积的和。每个操作的结果都是一个值。
让我们从最简单的例子开始,当你有 1D 数据时,使用 1D 卷积。对 1D 数组应用卷积会将内核中的值与输入向量中的每个值相乘。
假设我们的内核(也称为“权重”)中的值是“2”,我们将输入向量中的每个元素乘以 2,一个接一个,直到输入向量的末尾,得到我们的输出向量。输出向量的大小与输入向量的大小相同。
对大小为 1 的核应用卷积[作者的图像
首先,我们将 1 乘以权重 2,得到第一个元素的“2”。然后我们将内核移动 1 步,用 2 乘以权重,2 得到“4”。我们重复这个过程,直到最后一个元素,6,然后用 6 乘以权重,我们得到“12”。这个过程产生输出向量。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 6])
tensor([[[ 2., 4., 6., 8., 10., 12.]]], grad_fn=<SqueezeBackward1>)
内核大小的影响(内核大小= 2)
不同大小的内核将检测输入中不同大小的特征,并进而产生不同大小的特征图。让我们看另一个例子,其中内核大小为 1x2,权重为“2”。像以前一样,我们在每个元素的输入向量上滑动内核。我们通过将每个元素乘以核来执行卷积,并将乘积相加以获得最终的输出值。我们一个接一个地重复这个乘法和加法,直到输入向量结束,并产生输出向量。
对大小为 2 的核应用卷积[ 作者的图像
首先,我们将 1 乘以 2 得到“2”,将 2 乘以 2 得到“2”。然后,我们将 2 和 4 这两个数字相加,得到“6”,这是输出向量中的第一个元素。我们重复相同的过程,直到输入向量结束,并产生输出向量。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 5])
tensor([[[ 6., 10., 14., 18., 22.]]], grad_fn=<SqueezeBackward1>)
如何计算输出向量的形状
您可能已经注意到,输出向量比以前稍微小了一些。这是因为我们增加了内核的大小,从 1x1 增加到 1x2。查看 PyTorch 文档,我们可以用下面的公式计算输出向量的长度:
计算输出的形状。【来源
如果我们将大小为 1x2 的核应用于大小为 1x6 的输入向量,我们可以相应地替换这些值,并得到 1x5 的输出长度:
应用 1x2 内核后输出向量的形状。[ 作者图片
如果要构建神经网络架构,计算输出要素的大小至关重要。
常见的内核大小是奇数(内核大小= 3)
在前面的例子中,内核大小为 2 有点不常见,所以让我们再举一个例子,我们的内核大小为 3,其权重为“2”。像以前一样,我们通过将每个元素乘以内核并将乘积相加来执行卷积。我们重复这个过程,直到输入向量结束,产生输出向量。
使用大小为 3 的内核应用卷积。[ 作者图片 ]
同样,输出向量小于输入向量。对 1×6 输入向量应用 1×3 内核将产生大小为 1×4 的特征向量。
在图像处理中,通常使用 3×3、5×5 大小的核。有时我们可能会对较大的输入图像使用大小为 7×7 的内核。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 4])
tensor([[[12., 18., 24., 30.]]])
如何产生一个同样大小的输出向量?(填充)
对 1×6 输入应用 1×3 内核的卷积,我们得到了更短的输出向量 1×4。默认情况下,内核从向量的左侧开始。然后,核一次遍历输入向量的一个元素,直到最右边的核元素位于输入向量的最后一个元素上。因此,内核越大,输出向量就越小。
什么时候使用衬垫?有时,希望产生与输入向量长度相同的特征向量。我们可以通过添加填充来实现。填充是在输入向量的开头和结尾添加零。
通过向 1x6 输入向量添加 1 个填充,我们人为地创建了一个大小为 1x8 的输入向量。这将在输入向量的开头和结尾添加一个元素。执行核大小为 3 的卷积,输出向量基本上与输入向量大小相同。添加的填充值为零;因此,当应用内核时,它对点积运算没有影响。
对带有填充的内核应用卷积。[ 作者图片
对于核大小为 5 的卷积,我们也可以通过在输入向量的前端和末端添加 2 个填充来产生相同长度的输出向量。同样,对于图像,将 3x3 内核应用于 128x128 图像,我们可以在图像外部添加一个像素的边界,以产生 128x128 大小的输出特征图。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 6])
tensor([[[ 6., 12., 18., 24., 30., 22.]]])
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 6])
tensor([[[12., 20., 30., 40., 36., 30.]]])
我们可以将内核移动更多的步数(步幅)
到目前为止,我们一直在一步一步地滑动内核。内核对输入图像的移动量称为“步幅”,默认步幅值为 1。但是我们总是可以通过增加步长来移动内核任意数量的元素。
例如,我们可以用步长 3 来移动我们的内核。首先,我们将前三个元素相乘并求和。然后我们将分三步滑动内核,并对接下来的三个元素执行相同的操作。因此,我们的输出向量大小为 2。
对步长为 3 的内核应用卷积。[ 作者图片
何时增加步幅?在大多数情况下,我们增加步长来对输入向量进行下采样。应用步长大小 2 会将向量的长度减少一半。有时,我们可以使用更大的步幅来取代池层,以减少空间大小,减少模型的大小,提高速度。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 2])
tensor([[[12., 30.]]])
增加卷积的感受野(扩张)
当你在阅读深度学习文献时,你可能已经注意到了术语“扩张的卷积”。膨胀卷积通过在内核元素之间插入空格来“膨胀”内核,并且有一个参数控制膨胀率。膨胀率为 2 意味着内核元素之间有一个空间。本质上,膨胀= 1 的卷积核对应于常规卷积。
在 DeepLab 架构中使用了膨胀卷积,这就是 atrous 空间金字塔池(ASPP)的工作方式。利用 ASPP,提取高分辨率输入特征地图,并设法以多种尺度对图像背景进行编码。在我的工作中,我还将扩张卷积应用于信号处理,因为它可以有效地增加输出向量的感受域,而不增加核的大小(也不增加模型的大小)。
对膨胀率为 2 的内核应用卷积。[ 作者图片
什么时候使用扩张脑回?一般来说,在 DeepLab 和利用膨胀卷积进行多尺度上下文聚合中,膨胀卷积表现出更好的分割性能。如果你想要感受野的指数扩展而不损失分辨率或覆盖范围,你可能想要使用扩张卷积。这允许我们在保持分辨率的同时,以相同的计算和存储成本获得更大的感受野。
in_x.shape torch.Size([1, 1, 6])
tensor([[[1., 2., 3., 4., 5., 6.]]])
out_y.shape torch.Size([1, 1, 2])
tensor([[[18., 24.]]])
分离重量(组)
默认情况下,“groups”参数设置为 1,其中所有输入通道卷积至所有输出。要使用 groupwise 卷积,我们可以增加" groups" 值;这将强制训练将输入向量的通道分成不同的特征分组。
当 groups=2 时,这基本上相当于并排有两个卷积层,每个卷积层只处理一半的输入通道。然后,每个组产生一半的输出声道,随后连接起来形成最终的输出矢量。
应用分组卷积。[ 作者图片
in_x.shape torch.Size([1, 2, 6])
tensor([[[ 1., 2., 3., 4., 5., 6.],
[10., 20., 30., 40., 50., 60.]]])
torch.Size([2, 1, 1])
out_y.shape torch.Size([1, 2, 6])
tensor([[[ 2., 4., 6., 8., 10., 12.],
[ 40., 80., 120., 160., 200., 240.]]], grad_fn=<SqueezeBackward1>)
深度方向卷积。当我们想要执行深度方向卷积时,例如,如果我们想要分别提取 R、G 和 B 通道上的图像特征,则使用组。当 groups == in_channels,out_channels == K * in_channels 时;这种运算在文献中也称为深度方向卷积。
in_x.shape torch.Size([1, 2, 6])
tensor([[[ 1., 2., 3., 4., 5., 6.],
[10., 20., 30., 40., 50., 60.]]])
torch.Size([4, 1, 1])
out_y.shape torch.Size([1, 4, 6])
tensor([[[ 2., 4., 6., 8., 10., 12.],
[ 4., 8., 12., 16., 20., 24.],
[ 60., 120., 180., 240., 300., 360.],
[ 80., 160., 240., 320., 400., 480.]]], grad_fn=<SqueezeBackward1>)
2012 年,AlexNet 论文中引入了分组卷积,其主要动机是允许网络在两个 GPU 上进行训练。然而,这种工程黑客有一个有趣的副作用,那就是他们学会了更好的表达。训练具有和不具有分组卷积的 AlexNet 具有不同的精度和计算效率。没有分组卷积的 AlexNet 效率较低,也不太准确。
在我的工作中,我还应用分组卷积来有效地训练可扩展的多任务学习模型。我可以通过调整“组”参数来调整和扩展任意数量的任务。
1x1 卷积
一些论文使用 1x1 卷积,如网络中的网络首先调查的。看到 1x1 卷积可能会令人困惑,并且看起来没有意义,因为它只是逐点缩放。
然而,事实并非如此,因为,例如,在计算机视觉中,我们正在对三维体积进行操作;内核总是贯穿输入的整个深度。如果输入是 128×128×3,那么进行 1x1 卷积将有效地进行三维点积,因为输入深度是 3 个通道。
在 GoogLeNet 中,1×1 核用于降维和增加特征图的维度。1×1 内核还用于增加池化后的特征图数量;这人为地创建了更多缩减采样要素的要素地图。
在 ResNet 中,1×1 内核被用作投影技术,以在残差网络的设计中匹配输入到残差输出模块的滤波器数量。
在 TCN 中,添加了 1×1 内核以解决不同的输入-输出宽度,因为输入和输出可以有不同的宽度。1×1 核卷积确保元素加法接收相同形状的张量。
我的研究使用多任务学习来提供快速的护理点诊断,以检测周边视觉损失
towardsdatascience.com](/improve-glaucoma-assessment-with-brain-computer-interface-and-machine-learning-6c3b774494f8) [## 变压器图解指南
逐个组件的细分分析
towardsdatascience.com](/illustrated-guide-to-transformer-cf6969ffa067)
“复制粘贴”是如何嵌入到细胞神经网络中用于图像修复的——综述:移位网络:通过深度特征重排的图像修复
大家好:)欢迎回来!!今天,我们将深入研究一种更具体的深度图像修复技术,深度特征重排。该技术结合了现代数据驱动细胞神经网络和传统复制粘贴修复方法的优点。让我们一起学习和享受吧!
回忆
这是我的第五篇关于深度图像修复的文章。在我的第一篇帖子中,我介绍了图像修复的目的和第一个基于 GAN 的图像修复方法。在我的第二个帖子中,我们经历了第一个基于 GAN 的图像修复方法的改进版本,其中使用了纹理网络来增强局部纹理细节。在我的第三篇文章中,我们深入探讨了深层图像修复中的一个里程碑,其中提出的网络架构可以被视为图像修复的标准网络设计。在我的第四篇博文中,我们修改并浏览了一个标准修复网络的变体/改进版本。如果你是这个话题的新手,我强烈建议你先看看之前的帖子。我希望你能对最近的深度图像修复的进展有一个全面的了解。我已经尽力讲好故事了:)
动机
图一。不同方法修复效果的定性比较。(a)输入(b)常规方法(基于复制粘贴)(c)首先基于 GAN 的方法,上下文编码器(d)提出的方法。图片来自 Yan 等人的论文 [1]
正如我在以前的帖子中提到的,填充图像中缺失部分的传统方法是搜索最相似的图像补丁,然后直接将这些补丁复制粘贴到缺失部分(即复制粘贴方法)。这种方法提供了良好的局部细节,因为我们直接粘贴其他图像补丁在丢失的部分。然而,补丁可能不完全适合整个图像的上下文,这可能导致较差的全局一致性。请看图 1(b)为例,可以看到填充区域的局部纹理细节良好但与非缺失部分(即有效像素)不一致。
另一方面,基于深度学习的方法关注整个图像的上下文。全连接层或扩展卷积层用于捕捉整个图像的上下文。使用 L1 损失来训练深度学习模型,以确保逐像素重建精度。因此,深度学习方法提供的填充图像具有更好的全局一致性。然而,L1 损失导致模糊的修补结果,即使对抗损失(GAN 损失)可用于增强填充像素的锐度。请参见图 1(c)作为示例,您可以看到填充区域与非缺失区域更加一致,但是填充区域是模糊的。
因此,本文的作者希望利用传统的“复制粘贴”方法(良好的局部细节)和现代深度学习方法(良好的全局一致性)的优势。
介绍
在图像修复中,我们希望得到具有良好视觉质量的完整图像。因此,我们既需要正确的全局语义结构,也需要精细的细节纹理。正确的全局语义结构意味着生成的像素和有效的像素应该是一致的。换句话说,我们必须填充一个图像,并且必须保持它的上下文。精细的纹理意味着生成的像素应该看起来逼真,并且尽可能清晰。
在上一节中,我们提到传统的“复制粘贴”方法可以提供精细的细节纹理,而最近的深度学习方法可以提供更好的正确的全局语义结构。因此,本文引入了一个移位连接层,通过在网络内部进行“复制粘贴”的概念来实现深度功能重组。图 1(d)显示了他们提出的方法提供的修复结果。
解决方案(简而言之)
提出一个引导损失来鼓励他们的网络(移位网)在解码过程中学习填补缺失部分。除此之外,建议使用移位连接层将缺失区域内的解码特征与缺失区域外的编码特征进行匹配,然后将缺失区域外的编码特征的每个匹配位置移位到缺失区域内的相应位置。这捕获了关于在丢失区域之外找到的最相似的局部图像补片的信息,并且该信息被连接到解码的特征,用于进一步的重建。
贡献
如前所述,提出了一个转换连接层,以在现代 CNN中嵌入复制粘贴的概念,从而他们提出的模型可以提供具有正确的全局语义结构和精细细节纹理的修复结果。
除了标准 L1 和对抗性损失,他们还建议制导损失以端到端数据驱动的方式训练他们的移位网。
方法
图二。移动网的网络体系结构。以 32×32 的分辨率添加移位连接层。图片来自 Yan 等人的论文 [1]
图 2 显示了移位网络的网络架构。没有移位连接层,这是一个非常标准的 U 型网络结构,具有跳跃连接。请注意,编码要素会连接到解码要素的相应图层。就更好的局部视觉细节和重建精度而言,这种跳过连接对于包括图像修补的低级视觉任务是有用的。
导向损失
提出用制导损耗来训练它们的移位网。简单来说,这个损失计算的是丢失区域内的输入屏蔽图像的解码特征和丢失区域内的基本事实的编码特征之间的差异。
先定义一下问题。设ω为缺失区域,ω(bar)为有效区域(即非缺失区域)。对于具有 L 层的 u 网, ϕ _ l ( I )表示第l-层的编码特征,ϕl-l(I)表示第l-l-层的解码特征我们的最终目标是恢复 I^gt (地面真相),因此我们可以预计ϕl(I)和ϕl-l(I)包含了ϕl(i^gt)中几乎所有的信息如果我们考虑**y∈ω,(ϕ**_l(I)y应该是 0(即一幅输入的蒙版图像中第 l 层缺失区域的编码特征为零)。所以,(ϕl-l(I)y应该包含了(ϕl(i^gt)_y(即【t77 这意味着解码过程应该填充丢失的区域。
等式 1 显示了(ϕl-l(I)y与(ϕl(igt*)_**y**之间的关系。注意,对于**x****∈**ω(条形)(即非缺失区域),他们假设(**ϕ**_*l*(*I*)_**x**与(**ϕ**_*l*(*igt)x【几乎相同因此,导向损失仅定义在缺失区域。如图 2 所示将ϕ_l(I)和ϕ_l-l(I)串联起来,几乎可以得到ϕ_l(i^gt)中的所有信息。
图 3。通过移位网络学习的特征的可视化。(a)输入(浅色区域表示缺失区域)(b)可视化(ϕl(i^gt)y)(c)可视化(ϕl-l(I)【t77
为了进一步显示(ϕl-l(I)y)和(ϕl(i^gt)y之间的关系,作者将他们的移位网学习到的特征可视化,如图所示对比图 3(b)和(c)可以看出(ϕl-l(I)y可以合理估计(ϕl(i^gt)y这导致模糊的修复结果,没有精细的纹理细节。这个问题通过他们提出的移位连接层得到解决,结果如图(d)所示。那么,我们来说说移位操作。****
对于对他们的观想方法感兴趣的读者,请参考他们的论文或者他们的 github 页面。观想方法只是用来展示学到的特征,因此我不会在这里涵盖它。
移位连接层
我个人认为这是本文的核心思想。回想一下 ϕ _ l ( I )和ϕl-l(I)假设拥有ϕl(igt*)中几乎所有的信息。从上一节我们可以看到(**ϕ**_*l*-*l*(*I*)_**y**可以合理估计(**ϕ**_*l*(*igt)_y但是不够尖锐。让我们看看作者如何利用缺失区域外的特征来进一步增强缺失区域内的模糊估计。
简单来说,上面的等式 4 是为了找到丢失区域外与丢失区域内的每个解码特征最相似的编码特征。这是一个余弦相似运算。对于每个(ϕl-l(I)y与y****∈ω,我们在(ϕl(I)中找到它最近的邻居输出 x *( y )表示匹配特征位置的坐标,我们可以得到一个移位向量u _ y=x(y)-y。注意,该移位操作可以被公式化为卷积层。我将在下一篇文章中详细讨论这个问题。*
得到移位向量后,我们可以重新排列(ϕl(I)x)的空间位置,然后串接成ϕl(I)和ϕl-l(I)进一步增强(ϕl(I)x的空间重排如下,
口头上,对于丢失区域内的每个解码特征,在找到丢失区域外最相似的编码特征之后,我们基于移位向量形成另一组特征图。这组特征映射包含关于缺失区域外的编码特征与缺失区域内的解码特征最近的信息。然后,如图 2 所示,将所有相关信息进行组合,以便进一步重建。
在这里,我想强调一下关于转换连接层的几点。 i) 传统的“复制粘贴”方法在像素或图像补片域操作,而移位连接层在深度特征域操作。 ii) 深层特征是从大量训练数据中学习的,所有组件都是以端到端数据驱动的方式学习的。因此,使用“复制-粘贴”和 CNN 的优点都被继承了。
损失函数
他们的损失函数非常标准。如前所述,除了我们介绍的建议制导损耗外,他们还采用了 L1 损耗和标准对抗损耗。总损失函数如下,
λg和λadv分别用于控制制导损耗和敌方损耗的重要性。在他们的实验中,这两个超参数分别设置为 0.01 和 0.002。
如果你熟悉 CNN 的训练过程,你可能会注意到移位操作是一种手动修改特征图的操作。因此,我们必须修改关于特征的第 l 层fl=ϕl(I)的梯度计算。根据等式 5,ϕ^shiftl-l(I)和ϕl(I)之间的关系可以写成:
其中 P 为{0,1}的移位矩阵, P 的每一行中只有一个元素为 1。元素 1 表示最近邻居的位置。因此,相对于ϕ_l(I)的梯度计算如下:
其中 F ^ 跳过 _ l 代表跳过连接后的 F _ l ,以及 F ^ 跳过l=fl。除了我们必须将移位矩阵 P 的转置乘以最后一项以确保梯度被正确地反向传播之外,所有三项都可以被直接计算。
也许,你会发现这部分有点难以理解,因为我们必须修改梯度的计算。对于那些对作者实际上是如何实现感兴趣的读者,我强烈推荐你访问他们的 github 页面。如果你不理解这一部分,只要你能抓住移位操作的核心思想就没关系。在这里,他们的移位操作是一种硬赋值。这意味着缺失区域中的每个解码特征在缺失区域之外只能有一个最近邻。这就是为什么移位矩阵 P 是{0,1}的形式,以及为什么我们必须修改梯度的计算。随后,提出了类似的移位操作思想,并采用了软赋值。在这种情况下,缺失区域外的所有邻居被分配权重以指示缺失区域内的每个解码特征的接近度,并且我们不需要修改梯度的计算,因为该操作是完全可微分的。我会在下一篇文章中详细讨论这个问题:)
实验
作者在两个数据集上评估了他们的模型,即Paris street view【2】和six scenes from places 365-Standard【3】。Paris StreeView 包含 14,900 幅训练图像和 100 幅测试图像。对于 Places365,有来自 365 个场景的 160 万个训练图像。选择六个场景进行评估。每个场景有 5000 幅训练图像、900 幅测试图像和 100 幅验证图像。对于两个数据集,他们调整每个图像的大小,使最小尺寸为 350,然后随机裁剪一个大小为 256×256 的子图像作为模型的输入。
对于训练,他们使用 Adam optimiser,学习率为 0.0002,beta_1 = 0.5。批量大小被设置为 1,并且训练时期的总数是 30。注意,翻转被采用作为数据扩充。他们声称,在 Nvidia Titan X Pascal GPU 上训练他们的 Shift-Net 大约需要一天时间。
图 4。巴黎街景数据集上修复结果的可视化比较。(a)输入(b)内容感知填充(复制粘贴方法)(c)上下文编码器(d)多尺度神经补片合成(MNPS) (e)移位网。图片由严等人从他们的论文【1】
图 4 显示了在巴黎街景数据集上最先进方法的视觉比较。内容感知填充(图 4(b))是利用复制粘贴概念的传统方法。你可以看到它提供了良好的局部纹理细节,但错误的全局语义结构。图 4(c)和(d)分别是上下文编码器和多尺度神经补片合成的结果。我们之前已经回顾了这两种方法。你可以看到上下文编码器的结果具有正确的全局语义结构,但它们是模糊的。MNPS 提供了比上下文编码器更好的结果,但是我们仍然可以很容易地观察到带有一点伪像的填充区域。相比之下,Shift-Net 可以提供具有正确的全局语义结构和良好的局部纹理细节的修复结果。结果如图 4(e)所示,请放大查看。
图 5。Places 数据集上修复结果的可视化比较。(a)输入(b)内容感知填充(复制粘贴方法)(c)上下文编码器(d)多尺度神经补片合成(MNPS) (e)移位网。图片来自 Yan 等人的论文 [1]
图 5 显示了在 Places 数据集上的最新方法的定性比较。进行了类似的观察,请放大以更好地查看局部纹理细节。
表 1。最新方法的定量比较。表由严等人从他们的论文[1]
表 1 列出了巴黎 StreeView 数据集上的一些定量评估指标数字。显然,所提出的移位网络提供了最佳的 PSNR、SSIM 和平均 l2 损失。正如我在以前的帖子中提到的,这些数字与像素重建精度(客观评估)有关。它们不能反映修复结果的视觉质量。
图 6。填充随机区域的示例。从上到下:输入、内容感知填充和 Shift-Net。图片由颜等人从他们的论文【1】
图 6 显示了使用内容感知填充和提议的移位网络来填充随机区域的一些例子。Shift-Net 能够以良好的视觉质量处理随机裁剪区域。请放大以更好地查看局部纹理细节。
消融研究
作者还做了消融研究,以显示提出的制导损失和转移连接层的有效性。
图 7。在标准 U 网和提议的移位网中提议的制导损失的影响。图片由严等人从他们的论文【1】
图 7 显示了 U-Net 和 Shift-Net 在有和没有建议的引导损失的情况下的修复结果。很明显,引导损失对于减少视觉假象是有用的。
图 8。不同λg 对制导损失的影响。图片来自颜等人的论文 [1]
图 8 示出了具有不同λ_ g的移位网的修复结果。我们可以看到当 lambda_g = 0.01 时可以获得更好的修复效果。因此,他们根据经验为他们的实验设置λ_ g= 0.01。
图 9。分层移位操作的效果图来自颜等人的论文 [1]
图 9 显示了不同层的移位操作的效果。回想一下,使用第 l 层的特征,在第( L - l )层的深度特征图上执行移位操作。当 l 越小时,特征图尺寸越大,因此该层的移位操作在计算上更加昂贵。当 l 较大时,特征图尺寸较小,因此时间成本较低,但是随着空间尺寸较小,更多的空间信息丢失。这也可能导致修复效果不佳。在图 9 中,我们可以看到 L -3 (c)和 L -2 (d)都给出了不错的修复效果(可能是 L -2 好一点)。请注意, L -2 处理一幅图像大约需要 400 毫秒,而 L -3 处理一幅图像大约需要 80 毫秒。因此,为了平衡时间成本和性能,作者决定在第( L -3)层执行移位操作。
图 10。零点出来的效果(b)ϕl-l(I);(c)ϕl(I);以及(d)ϕ^shift_l-l(I)(e)是 Shift-Net 的结果,使用所有(b)、(c)、(d)。图片来自 Yan 等人的论文【1】
回想图 2,对于 Shift-Net 的架构,在 shift-connection 层之后串接了 3 个不同的特征图,分别是ϕl-l(I)ϕl(I)和ϕ^shift_l-作者试图检查这些特征图对于最终重建的重要性,结果如图 10 所示。很明显,解码后的特征ϕ_l-l(I)对于最终的重建极其重要。如果我们将这个解码特征归零,重建将完全失败,如图 10 (b)所示。这样,我们就可以知道解码后的特征ϕ_l-l(I)包含了缺失区域的主要结构和内容的信息。
图 10 (c)显示了去除编码特征 ϕ _ l ( I )的结果。我们可以看到,主要结构仍然可以重建,但视觉质量比全模型差,如图 10 (e)所示。这意味着,指导损失不仅有助于促进ϕl-l(I)y和ϕl(*i^gt【t21)y之间的关系,而且有助于促进ϕ_*l 之间的关系**
最后,如果我们去掉图 10 (d)所示的ϕshift_*l*-*l*(*I*),在填充的缺失区域有明显的伪影。因此,我们可以知道,**ϕ**shift_l-l(I)通过提供缺失区域外最近邻搜索的结果作为细化的参考,对于细化填充的缺失区域是有用的。
图 11。从上到下。随机移位连接和最近邻搜索的移位网修复结果。图片来自严等人的论文【1】
为了进一步显示ϕ^shift_l-l(I)的有效性,作者比较了随机移位连接和最近邻搜索,如图 11 所示。我们可以看到,与最近邻搜索相比,随机移位连接对于改进修补结果以获得更好的全局语义结构一致性是无用的。因此,我们可以说,正确的移位操作对于获得视觉上良好的修复结果是重要的。
为了总结移位连接层的使用,我认为最重要的思想是我们提供对缺失区域内生成的特征的参考(假设生成的特征是缺失区域的良好估计),以基于该参考进一步细化这些生成的特征,并且该参考是与从非缺失区域获得的每个生成的特征最相似的特征。因此,我们可以借用非缺失区域中的特征的结构和纹理来改进缺失区域中的特征。
其他需要注意的事项
有兴趣的读者,这里还有三点供你进一步研究。首先,您可能会对要素地图中的掩膜区域的定义感兴趣。实际上,我们只有输入遮罩图像。因此,必须定义特征地图的掩蔽区域。简单地说,作者使用与编码器具有相同架构的简单 CNN 来获得网络内部的掩蔽区域。使用简单的卷积和阈值技术来获得特征图中的掩蔽区域。如果你对此感兴趣,请阅读论文。我在这里不再赘述,因为我们将很快介绍一种可学习的方法来获得网络内部的掩码!
第二,关于生成器和鉴别器的详细架构。正如我在之前提到的,我们有一个标准的图像修复网络设计,本文中的网络也非常标准。他们使用一个带有移位连接层的 U-Net 作为生成器,他们的鉴别器就是我们之前讨论过的 PatchGAN 鉴别器。同样,感兴趣的读者可以参考论文以获得架构的完整描述。
第三,关于巴黎街景和地点数据集的更多比较可以在论文中找到。你可以看一看,你会对今天的深度图像修复算法的视觉质量有一个简单的想法。
结论
本文主要有两个观点。首先,所提出的引导损失促使缺失区域的解码特征(给定输入屏蔽图像)接近缺失区域的编码特征(给定地面实况)。因此,解码过程应该能够用对地面实况中丢失区域的合理估计来填充丢失区域。第二,提出的移位连接层可以有效地借用缺失区域外最近邻的信息,进一步增强全局语义结构和局部纹理细节。
外卖食品
这篇文章对你们中的一些人来说可能有点超前。我认为本文最重要的思想是移位操作,它可以看作是一种应用于图像修复任务的注意技术。
口头上,移位操作允许缺失区域的生成特征借用缺失区域外最相似特征的信息。由于缺失区域外的特征具有良好的全局语义结构和精细的局部纹理细节,我们可以将它们作为参考来细化生成的特征。希望你能明白这个主旨。
下一步是什么?
在接下来的文章中,我们将介绍另一篇论文,它也利用了从非缺失区域借用信息的思想,以保持整个图像的上下文。我还将讨论如何以卷积层的形式进行最近邻搜索。真的希望你们喜欢我的帖子:)
参考
[1],闫,,,,左,,,单, Shift-Net:基于深度特征重排的图像修复, Proc .2018 年欧洲计算机视觉会议 ( ECCV )。
[2] C. Doersch、S. Singh、A. Gupta、J. Sivic 和 A. Efros。是什么让巴黎看起来像巴黎?2012 年美国计算机学会图形汇刊。
[3]周,Agata Lapedriza,Aditya Khosla,Aude Oliva,Antonio Torralba,“地点:用于场景识别的 1000 万图像数据库”, IEEE 模式分析与机器智能汇刊,2017。
再次感谢你阅读我的帖子!如果您有任何问题,请随时给我发电子邮件或在这里留言。下次见!😃
新冠肺炎是如何影响我的身心健康的:通过数据看
检查我们的个人数据可以发现新冠肺炎影响我们福祉的许多不同方式。以下是我从个人数据中得到的一些发现,可以帮助我们在这场危机中做些什么来改善我们的生活。
新冠肺炎疫情以不同的方式影响了我们每一个人,这已经不是什么新闻了。不管是失业、个人财务危机、更多的独处时间,还是住院,这个清单还在继续。
作者阿纳斯塔西娅·切平斯卡
我低估了个人幸福的一个方面——包括身体和精神上的。在听新闻更新、阅读报道和检查疾病跟踪仪表板时,许多关于保持健康日常生活的建议都被忽视了。
所以,我决定挖掘一下我的个人数据(这就是我处理压力的方式!😬),试图揭示自疫情在加拿大正式爆发以来,我的健康状况发生的重大变化。
我的脚步去了哪里?
我在 2016 年夏天搬到了加拿大,虽然这里的冬天绝对寒冷,但我通常会在一年中保持积极的生活方式,并在不低于零下 30 度的时候分配时间骑自行车,跑步或散步。
自从这里(三月中旬)开始了物理距离测量,我注意到我走得更少了。但我没意识到少了多少!
使用 4 年前的历史活动数据(我使用一个 Withings Steel HR 跟踪我的每日步数),我建立了一个预测,看看如果一切正常,过去两个月会是什么样子。随着冬天的结束,春天和夏天的到来,我的步数有望超过推荐的 10 公里/天(顺便问一下,你知道这个推荐最初来自一个营销活动吗?一个有趣的阅读这里!),如下图绿色部分所示。
现实大不相同。
疫情袭击加拿大前后一段时间内每周步数的总和。绿色虚线表示如果疫情没有开始,正常每周步数的估计预测。红色虚线显示了疫情击中现实。
自从疫情爆发以来,我的活动水平已经下降到甚至低于冬季水平。自我强制留在家里的命令产生了影响,超长的冬天也产生了影响,我的活动量刚刚达到每周 4 万步。
深入挖掘,我想看看每年的这个时候与前几年相比,每天的情况如何。
比较 2017-2019 年 3 月和 5 月以及 2020 年 3 月至 5 月的每日步数,当时新冠肺炎重创北美。
不言自明的是,在 COVID 期间,我一周中每天的步数明显低于疫情爆发前。很可能是由于 100%在家工作的政策,工作日显示出比疫情袭击前更少的活动。我似乎在周六恢复了一些运动(可能是在意识到整个星期都非常静止之后),但这不会延续到周日,在周日静态行为再次占据主导地位。
在工作中,我们试图鼓励一种 散步 的心态:人们在#wfh Slack 频道上宣布他们要去散步,然后去街区或公园散步。数据清楚地表明,我需要更好地把握这一点,并重新利用我的周末。我所居住的蒙特利尔市最近承诺增加 327 公里的自行车道和人行走廊,以允许人们在室外安全的距离内移动,许多其他城市也在采用类似的方法。如果可以的话好好利用这一点!如果在安全的距离内进行,这对你的健康大有裨益,对你的社区也大有裨益。
失去了我的鼾声💤
我将是第一个承认现代生活正在打乱我们理想中的睡眠时间表的人:我们在日落后早早上床睡觉,日出后醒来,很少能有规律地获得急需的睡眠时间。
资料来源: GIPHY
在疫情袭击之前,我有时会努力睡个好觉。这通常会表现在夜间多次醒来,或者花很长时间才能入睡。在家里,我设置了一个床下睡眠跟踪器( Withings Sleep ),当我不在家时,我用手表跟踪我的睡眠,这给了我一个相当不错的睡眠模式。
我检查了过去 3-4 年的睡眠数据,以检测大流行前后的任何重大差异。具体来说,我观察了睡眠有多深,以及我每晚花多少时间醒着,试图入睡。
非睡眠时间的分布:醒着的时间,在床上试图入睡的时间(入睡前或半夜醒来的结果)。
上图捕捉到了一个关键的发现:现在每个晚上都比以前更加失眠。事实上,我几乎从来没有在每晚少于 10-20 分钟的时间里睡着或醒来,有很大的偏差是每晚躺在床上醒着 60-80 分钟。
我一直感觉这些不眠之夜,更多的时候,导致我辗转反侧,试图摆脱无尽的想法,最终保持任何和平的睡眠。正如过去许多研究表明的那样,我们必须让我们的大脑和身体得到休息,以使身体和精神得到恢复,这是我们日常幸福的一个关键部分。点击这里和这里了解更多信息。
对于那些经历类似情况的人,我建议尝试冥想(例如,平静或顶部空间进行一些有指导的练习),并在睡前一两个小时避免任何蓝光。虽然这不是一个神奇的解决方案,但睡前放下烦恼是帮助你在醒来时处理任何烦恼或问题的关键。
如果你不开心并且你知道…鼓掌?
还有一件事与睡眠质量和身体活动直接相关,那就是心理健康——或者说我们感觉有多幸福。被不断的新闻报道、全球危机和鲁莽的世界领导人疯狂的推特活动包围着,常常很难想到隧道尽头的光明。
作为我量化自我努力的一部分,我也在跟踪我的日常情绪。我发现这是一种记录方法,有助于记录我的感受,并简要回顾我的一天,在这一天,我会挖掘我的感受。这比一个完整的日志更容易维护(我确实这么做了,但是更多的是每月一次)。我会推荐给任何想和自己的感觉保持联系的人,也许偶尔回顾一下就能明白是什么驱动了他们的情绪。
我给自己的心情打分,1-9 分,1 分是非常不开心的一天,9 分是我能拥有的最开心的一天。
下面,你可以看到疫情开始前一段时间的平均每日情绪与疫情开始后的平均每日情绪的比较。
情绪得分,比较疫情大流行前(蓝色)和大流行后的每日平均水平。
显然,几乎一周中的每一天都显示出明显的下降,其中只有星期五保持着某种类似的状态。这种情绪确实受到了病毒的打击!
当检查自疫情开始以来情况如何变化时,趋势非常明显。
自疫情开始以来,每日情绪趋势,说明任何周模式。
虽然在我的情绪量表上,我确实有过 8/9 的快乐日子,但数据显示有明显的下降趋势。这种情况持续的时间越长,对我个人的幸福来说就越“危险”,注意并承认这一点很重要,如果可能的话,尝试并面对这一点。
我不是医疗保健专业人员,这只是一个来自人类同胞的常识性建议,但如果你确实感到自己的幸福受到影响,一定要寻求帮助:与家人、朋友、伴侣交谈,甚至利用众多资源中的一种,如 Bell 的“让我们谈谈”。
这篇文章的目标有两个:
- 让人们意识到,除了感染病毒和陷入金融危机的风险之外,我们的福祉可能并不好,我们应该意识到并承认这一点。
- 有很多方法可以量化、跟踪和衡量你的幸福,无论是通过个人跟踪设备自动进行,还是通过自我报告和记录(是的,你也可以记录你睡觉和醒来的时间!).
虽然我不喜欢分享我的个人数据,但我很乐意回答您对方法或代码的任何问题。欢迎在评论中或在推特上提问。
考虑到这一点,我希望你保持安全,远离他人,并照顾好自己的健康,包括精神和身体❤️.
新冠肺炎是如何摧毁航空业的
利用流行病数据预测新冠肺炎对航空和医疗保健的破坏
(安娜·施韦茨-佩克斯出版社,2020 年)
保健流行病
机场是我们与家人、朋友和爱人团聚的地方。
但是在 2020 年,像网上订票和出现这样简单的概念现在已经变成了生死攸关的情况,这就需要我们仔细规划每一步,然而,为什么没有必要制定一个计划来防止航空业在 2020 年可能崩溃呢?
(安娜·施韦茨-佩克斯出版社,2020 年)
“截至 2020 年 4 月,在新冠肺炎疫情爆发期间,航空业正在寻求超过 500 亿美元的政府援助。”
上升的必然下降
我们的大部分发现都围绕着一个假设,即当这些行业中的一个上升时,另一个通常会下降。例如,在任何疫情期间,我们都看到医疗保健行业的业绩和潜力通过股价的上涨来衡量。
相比之下,航空业,或者从本质上说,任何运输行业,几乎总是处于相反的光谱,因为人们不愿意与他人混合,因为感染的可能性更高,因此我们看到一个高杠杆行业在财务层面上受到严重挤压,这可能导致严重的后果,如需要纳税人救助的破产。
分析师对航空业的预测
做一个相对比较,在世界上最灾难性的事件之一:9/11 之后,航空业的收入仅下降了 230 亿美元,远低于冠状病毒预测的 630 亿至 113 亿美元。
医疗保健和航空公司的盈利能力
正如你所看到的,在 2004 年非典事件之后,这两个行业的利润率呈现出截然相反的趋势。
航空公司和医疗保健盈利能力— SAS
与之相关的是,直到 2007 年,医疗保健行业的销售额一直在蓬勃发展,当时大多数国家都摆脱了这两种流行病的副作用,而航空公司直到 2008 年仍在走下坡路。
医疗保健和航空公司利润的波动
一个行业的稳定性是一个很好的指标,可以表明投资者面临的风险有多大,医疗保健行业有稳定的利润率,仅会因任何疫情的到来而略有改变,正如在 SARS 、 H5N1 、 H1N1 、 MERS-CoV 和埃博拉流行的年份所看到的那样。
然而,航空公司则完全相反,它们的利润在疫情期间受到重创,这表明它们对相对于医疗保健的外部性更为敏感。
油价与航空公司的效率
航空和医疗保健的效率— SAS
分析航空业资产周转率的最佳方式是将其与油价并列比较,因为我们可以看到,每次上涨和下跌几乎都有相同的模式,这是合乎逻辑的,因为燃料是任何航空公司财务报表的主要元素。每当油价下跌,航空公司的资产周转率就会随之下降,反之亦然。
2020 年低油价对航空公司意味着什么?
2020 年,我们看到了油价的历史低点,分析师预计短期内不会达成全球稳定协议,这进一步加剧了航空业的不确定性。
石油价格——SAS
更便宜的燃料意味着更低的成本,对吗?
虽然乍一看这似乎是有益的,但它绝对不是 T21,它实际上更麻烦。
作为油价波动的结果,大多数航空公司倾向于对冲其对喷气燃料的需求,以避免价格突然波动,这意味着大多数航空公司已经购买了价值数百万美元的燃料,现在正在遭受支付对冲价格而不是今天较低的市场价格的痛苦,同时仍然遭受较低的需求。
回顾 2010 年的欧洲债务危机,我们看到资产周转率和净运营资产回报率大幅下降,这表明这个行业的杠杆作用可以随时导致其崩溃。
“这是否意味着我们将在 2020 年看到同样的模式?”
净营运资产的回报和增长
航空公司
纳入固定资产非常重要,因为航空公司为了运营其商业模式,在固定资产上投入了大量资金。因此,净营运资产增长率和净营运资产回报率提供了一个行业如何利用其资产产生收益的洞察力,较高的增长率表明其资产利用率较高。正如你所看到的,如果航空业增加其净营运资产,通常是为了赚取更高的回报。
然而,我们可以期待看到一个不同的复制,一个类似于金融危机的复制,其中净运营资产增长实际上有所下降,而回报却有所上升,这表明航空公司如何被迫挤压尽可能多的收入,即使这意味着通过使用极端激进的定价策略来维持运营。
医疗保健
相比之下,医疗保健行业的资产周转率从 2007 年开始逐渐增长,直到 2011 年,随着世界卫生组织宣布 H1N1 病毒的终结,其资产周转率急剧下降。
然而,该行业面临着一个新的威胁,或者在这种情况下,一个新的增长机会:霍乱和 MERS-CoV 流行病。
无论如何,相对于航空业,医疗保健不一定是一个不稳定或高利润的行业,因为相对于净运营资产的任何增加或减少,净运营资产的回报率仍然相当稳定,2015 年是一个小例外,这可以归因于该行业应对有史以来最严重的埃博拉疫情。
资产流动性
航空公司
与医疗保健行业相比,航空业的杠杆率非常高,因为他们需要他们拥有的每一分钱,这使得他们成为一个流动性非常差的行业,因为在危机时期手头缺乏现金。
令人惊讶的是,一般来说,航空业可能有更高的净借贷成本,但在这方面,它比医疗保健业更一致,医疗保健业有一些变化。
航空公司和医疗保健公司的流动性— SAS
医疗保健
近年来,由于技术行业的兴起和与技术行业的交织,医疗保健行业的杠杆作用呈上升趋势,技术行业以其波动性和高支出而闻名,这意味着为生物技术医疗保健解决方案提供资金需要花费更多的资金,而债务是为所涉及的高研究支出提供资金的唯一可行的解决方案。
然而,医疗保健行业从 2010 年到 2014 年经历了一段痛苦的时期,因为他们有负杠杆,这意味着他们的投资回报低于借款的利息。
股权
航空业— (YCHARTS,2020 年)
正如预期的那样,周期性影响极大地改变了航空业的股票估值。一般来说,如果一个人有勇气处理动荡和长期前景,复苏是不可避免的,这使得航空股非常有吸引力,如图所示,因为它们在当前的借款协议下有足够的流动性。
而对于医疗保健,投资有所增长,从 2017 年的150 亿美元到 2018 年的223 亿美元,到 2019 年超过600 亿美元。
虽然这听起来很完美,但这个行业的问题是,许多参与者都有不盈利的细分市场,并且不是所有的细分市场都像生物技术一样有高投资回报率和增长潜力。因此,一家公司剥离其不盈利部门的能力可以决定其真正的股权增长潜力。
普通股回报率
从投资者的盈利角度来看,与航空业相比,医疗保健业的表现非常糟糕。当观察 ROCE 时,ROCE 是一个衡量股东收到多少钱与他们最初投资多少钱的指标,医疗保健行业在大部分时间里都是负增长。即使在 2008 年的高峰期,它也只增长了 2%。另一方面,航空业经历了一些起伏,特别是在经济衰退期间,但自 2014 年以来一直在增长,2017 年达到 8%的历史高点。
EPS
当考察这两个行业的每股收益时,我们可以得出类似的结论。每股收益衡量每股普通股获得多少美元的净收入。自 2005 年以来,医疗保健行业一直呈下降趋势,而航空业一直呈上升趋势。
有趣的是,在 H1N1 流感期间,医疗保健行业并没有看到积极的增长。此外,值得一提的是,对股东而言,航空业比医疗保健业更有利可图,因为平均比率分别为 0.6 和 3.1。
2020 年医疗保健的潜力
(fato ba ife mide-Pexels,2020 年)
持续需求
人们总是需要医疗保健,这使得这个行业的价格高度缺乏弹性。这个行业被许多投资者视为一个稳定的行业,无论是否有普遍的经济衰退或金融危机,都会蓬勃发展。
从本质上讲,消费者需求总是会存在的,由于它被贴上了必需品的标签,它较少受到航空业面临的经济波动的影响,这使得它们不那么容易成为投资的股票。
革命性的增长
医疗保健股之所以如此有吸引力,是因为它以增长方面表现最佳的行业之一而闻名。这与医疗保健和技术的不断交织交织在一起,正如在流感和新冠肺炎病毒中看到的那样,不断需要开发药物治疗疾病。
流行病期间医疗保健面临的主要风险
医疗机构面临着严重的时间滞后,迫使他们等待更长的时间才能从保险公司或政府机构获得财务补偿,这使得他们的现金流比率成为其财务生存的重要指标。
此外,医疗保健公司倾向于通过大量长期债务来资助他们的研究,这使得他们的杠杆在动荡时期成为一个关键的区分因素。最后,利润率将作为分析师和投资者在股票估值中的最终指标,以判断该公司是否有能力管理好其支出,以增加其潜在收益。
航空公司的竞争氛围
(Pixaby — Pexels,2020 年)
航空业是一个高度季节性的行业,这意味着其盈利能力高度暴露于外部因素,如能源价格、经济衰退或 2020 年的健康流行病。
它还具有资本密集型的特点,这就限制了国内航空公司的数量。此外,这意味着服务外国地区的航空公司面临当地航空公司的激烈竞争,容易受到旅行禁令的影响,就像 2020 年加拿大和美国因冠状病毒而受到的旅行禁令一样。因此,为了在黑天鹅事件发生时保持可持续的市场份额,该行业在相互之间形成联盟的基础上蓬勃发展。
投资航空业
购买航空业的股票是有风险的,因为大多数股票的贝塔系数高,价格稳定性得分低。此外,该行业负债累累,导致财务实力和安全性排名相对于其他行业整体较低。
理想的投资
因此,最好的投资将是那些有容量利用率跟踪记录的投资,如果我们有更多的数据,我们会查看燃料对冲,以及航空公司的航线是否有利可图,并且没有政治干预的高风险。此外,我们很有可能很快就会看到该行业最大的纳税人资金救助,这意味着如果我们选择被低估的股票,我们可以获得丰厚的投资回报。
我们将何去何从?
航空公司不可避免的复苏
总之,我们看到这两个行业有时会表现得像极了对立面,但这并不意味着它们不会受到外部性的严重影响,它们会受到外部性的影响,但程度不同。
预计航空业将在 2020 年摆脱困境,因为航空公司将停飞至少 50%的机队,我们预计 2020 年的财务比率将模仿金融危机和健康大流行期间的比率,但规模要大得多。
不可避免的是,政府将支付数十亿纳税人的现金来维持航空业的运营,但这是我们从未见过的,因为分析师预测,即使疫情最糟糕的情况已经过去,人们仍将害怕乘坐飞机,这意味着我们没有办法正确估计冠状病毒的财务影响水平,即使在接受 500 亿美元的注入后。
无论如何,人们仍然需要一种穿越世界的交通工具,这意味着复苏是不可避免的,但我们不知道这个行业需要多长时间才能再次以同样的速度增长。
医疗保健的指数增长
另一方面,医疗保健行业预计从 2015 年到 2020 年将增长近 2 万亿美元,长期项目预测到 2040 年将增长超过 9 万亿美元(T2)。之所以如此,是因为老龄化趋势日益加剧,医疗技术发展迅速。然而,正如我们从比率中看到的,仍然存在一些财务效率低下、运营困难以及监管负担等外部因素,这些因素阻碍了医疗保健行业的增长潜力。
商务化人际关系网
未来的分析硕士毕业于麦吉尔大学的商业分析专业从…
www.linkedin.com](https://www.linkedin.com/in/nmukhtar/) [## Venkatesh Chandra - Aon Canada |解决方案架构师-分析顶点项目- McGill…
我有 4 年的数据科学家经验。我曾与财富 100 强公司合作进行外部分析…
www.linkedin.com](https://www.linkedin.com/in/venkateshchandra/) [## Ramy Hammam -顾问团队领导-数据科学&业务战略-普惠& Whitney…
在世界上最大的职业社区 LinkedIn 上查看 Ramy Hammam 的个人资料。Ramy 有 5 份工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/ramy-hammam/)
Githhub 代码
用于提取医疗保健和航空业财务比率的 SAS 代码:2005-2018-Noah MMA/健康航空公司
github.com](https://github.com/NoahMMA/health-airlines)
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。****
关于新冠肺炎如何影响美国证券交易所的数据分析,这是我无法预料的。
Roberto Junior-Unsplash 拍摄的照片
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
在本文中,我们将定量分析 Covid19 如何影响美国证券交易所以及交易方式。结果令人惊讶。
分析将集中在市场波动上。
先决条件
如果你热衷于和我一起逐步开发这个分析,你将需要 Python3 和三个不同的 Python 包:
- PandasDataReader 和雅虎财务模块
- 日期时间包
- Plotly
另外,通常的熊猫和熊猫。
好,我们开始吧
方法学
先说方法论。我们将要遵循的流程将分为 3 个部分。
首先,我们将确保获得正确的市场数据。我的意思是通过这一点,避免有偏见的输入和初始假设,但这一点将在本文稍后展开。
第二次,创建计算字段,这将有助于我们绘制我们想要比较的内容。
最后,作为最后一步,比较市场回报并了解对交易策略的影响。潜在的原因是什么,我们如何利用它。
输入数据
为了比较纽约证券交易所(NYSE)在 COVID 之前和之后的表现,我们必须确保避免有偏见的假设。为此,我们不打算比较一只具体的股票。例如,如果你比较 2019 年和 2020 年特斯拉的份额价值,你很容易理解这些数据会有偏差。事实上,不依赖于 Covid19 的其他残差可能会影响这一份额,仅在 Covid19 上输入它在科学上是不可接受的。
例如,2020 年 6 月,苹果公司宣布了一项特别的主题演讲,并在 2 天内将苹果公司的股票价值提高了 5%。
为了避免这些残差,我们将选择(而不是仅仅比较 Covid19 前后的股价变动)来分析 S&P500。事实上,S&P500 是一个股票市场指数,衡量在美国证券交易所上市的 500 家大公司的股票表现。它是最受关注的股票指数之一,许多人认为它是美国股票市场的最佳代表之一。指数的平均年总回报和复合年增长率,包括股息。(1).
你可以通过阅读 Lou Cardozo 的这篇文章来了解为什么 S&P500 是投资者和交易者的有效工具,他是美国银行管理研究所的现任执行主编。(2)
或者也许是时候改变首字母“S&P”来代表成功和利润了。这个股票市场指数来源于…
money.usnews.com](https://money.usnews.com/investing/investing-101/articles/2018-10-02/why-investors-love-the-s-p-500)
现在我们已经定义了输入数据,让我们使用 Python 导入它。
#Import Pandas, Numpy and PlotLy for Data visualization.
import numpy as np
import pandas as pd
import plotly.graph_objs as go
from pandas_datareader import data, wb
from datetime import date#Uploading market data for 2019 and 2020
SPY_data_2019 = data.DataReader('SPY','yahoo' ,start=pd.to_datetime('2019-02-04'), end=pd.to_datetime('2019-08-25'))
SPY_data_2020 = data.DataReader('SPY','yahoo' ,start=pd.to_datetime('2020-02-04'), end=pd.to_datetime('2020-08-25'))
您可以在下面找到我们将用于分析的 2020 年 dataframe 输出的屏幕截图:
计算每日回报
现在我们已经上传了市场数据,我们将需要计算每日回报,以便能够分析我们的波动性。在这篇文章中,我不打算深入探讨为什么获得每日回报是必不可少的。但是让我们想象一下这个例子。
例如,你在特斯拉上投资了 1000 美元,两周后,股票价格从 1000 美元涨到了 1020 美元;这意味着你的投资组合中有 20 美元的收益。
另一方面,在同一时期(2 周),你在美洲银行购买了 100 美元的股票。这种股票的价格从 100 美元涨到了 110 美元。
从第一个角度来看,你似乎从特斯拉获得了更多的利润(这在某种程度上是正确的);然而,如果你用同样的尺度来衡量你的收益,投资美国银行的利润将是你的五倍。因为这将意味着,如果你投入了相同的金额,你可以多赚五倍的钱。
事实上,如果您计算本案例研究的双周回报率,您将得到以下结果:
我相信你可以通过这个故事理解,为什么计算你的每日回报,得到一个更敏锐和公正的波动分析是如此重要。
我们可以用以下公式计算该磁场:
为了对不同价格的股票的每日股票回报进行准确的比较,将每日股票回报除以原价,然后将结果乘以 100。
在 Python 上,该字段可以通过两种不同的方式计算,一种是使用 pct_change 函数,另一种是将时间段定义为 1,因为我们的数据集每天都被拆分。否则,应用详细的公式并使用一天的班次来获得前一行:
让我们将这些代码行应用于我们的数据帧(SPY_2019_data,SPY_2020_data)。
SPY_data_2019['Daily return'] = SPY_data_2019['Close'].pct_change(1)
SPY_data_2020['Daily return'] = SPY_data_2020['Close'].pct_change(1)
您可以在下面找到使用新计算字段更新的 2019 年 dataframe 输出的屏幕截图:
分析
现在我们已经计算了我们的每日回报,让我们分析一下 Covid19 对交易者和投资者的影响。
我们将开始进行视觉分析。让我们绘制 2019 年每日回报分布与 2020 年每日回报分布,并可视化市场波动。
# Add histogram data
x1 = SPY_data_2020[‘Daily return’].fillna(0)
x2 = SPY_data_2019[‘Daily return’].fillna(0)# Group data together
hist_data = [x1, x2]
group_labels = [‘2020’, ‘2019’]# Create distplot with custom bin_size (set bin size = 0.5% return)
fig = ff.create_distplot(hist_data, group_labels, bin_size=.005)
fig.show()
这张图代表了 2019 年和 2020 年之间的日收益率正态分布。x 轴代表每箱 0.5%的每日百分比。Y 轴表示包含在先前定义的这些仓中的天数。
根据这个图表,我们可以注意到三个现象。
首先,方差和日收益率的标准差看起来已经爆发。第二,你一天可以获得的最小和最大回报也在飙升。第三点,与去年相比,这一时期的平均回报今年看起来更有利可图,这可以被认为是牛市的信号。
可以提出两个问题:
如果整个行业都停滞不前,股市怎么可能表现良好?
我相信这里的每一个人都听到了美国失业率暴跌的每日新闻。根据美国劳工部的数据,它从 2020 年 2 月的 4.4%下降到 14.7%,甚至在内华达州的 COVID 后达到 30%(3),或电视新闻公告聚焦 Covid19 如何摧毁了几个行业。
就我个人而言,我已经看到家人和朋友受到这场危机的影响。例如,我的姐姐,她经营一家保安公司,四个月没有签任何合同,我的一些好朋友已经失业了…
然而,如果你看看市场,投资股票赚钱从来没有这么容易。
这让我提出第二个问题:
市场是否变得与实际经济状况无关?
答案是肯定的,也是否定的,但我们稍后会在更深入的分析后回答这个问题。让我们从事实开始,计算一些数学指标,如平均值、中位数、标准差、2.5%的百分位和 97.5%。
应用以下代码行后:
#Mean calculation
SPY_data_2019['Daily return'].mean()
SPY_data_2020['Daily return'].mean()
#Median calculation
SPY_data_2019['Daily return'].median()
SPY_data_2020['Daily return'].median()
#Standard Deviation calculation
SPY_data_2019['Daily return'].std()
SPY_data_2020['Daily return'].std()
#Percentile at 2.5% and 97.5%
SPY_data_2019['Daily return'].quantile(.025)
SPY_data_2019['Daily return'].quantile(.975)
SPY_data_2020['Daily return'].quantile(.025)
SPY_data_2020['Daily return'].quantile(.975)
我们得到了这些输出:
我们可以注意到我们最初的假设是有效的。首先,今年的市场更加富裕,你每天可以赚取的中值回报从 0.06%提高到 0.3%的利润,这证实了第一个假设。
其次,如果你看看标准差,它从 2019 年标准普尔 500 市场数据的 0.84%上升到 Covid19 期间的 2.66%,这意味着波动性也出现了爆炸式增长。
让我们直观地比较 2019 年和 2018 年,以确认这种类型的变化并不常见。
这个图表代表了 2019 年和 2018 年之间的每日回报,正态分布。x 轴代表每箱 0.5%的每日百分比。Y 轴表示包含在先前定义的这些仓中的天数。
基于以上几点,我们可以确认一些不寻常的事情正在发生。
如何解释经济形势和市场价值之间的这种差距?
这种差异可以用美联储(FED)的实际政策来解释。自 2007 年危机以来,在干旱时期实施了两种主要方法来抑制经济增长:
例如,如果我们分析美联储的资产负债表,我们可以注意到市场上的大规模投资,以对抗潜在的衰退。这意味着美联储正在购买垃圾债券以避免全面崩溃。
来源:路透社(4)
如果你看看上面的图表,美联储从未投入这么多资金来拯救市场。相比之下,美联储在 6 个月内购买的资产是整个 2007—2010 年衰退期间的 3 倍。
如果你想了解量化宽松(QE)政策和 S&P500 之间的相关性,我推荐路透社的这篇精彩文章。
[## 美联储在 2020 年的第一个障碍:放弃“QE 精简版”
美联储的债券投资组合正以自上世纪 90 年代“量化宽松”全盛时期以来从未有过的速度再次膨胀
www.reuters.com](https://www.reuters.com/article/us-usa-fed-portfolio/feds-first-hurdle-in-2020-dispensing-with-qe-lite-idUSKBN1ZQ19E)
让我们回到我们最初的主题,作为一个交易者/投资者,这意味着什么,我如何利用这种情况?
作为交易者,这段时间是幸运的,但你必须保持警惕。如果你从数学和算法的角度来看,市场从来没有显示出如此多的财富。在这个月(2020 年 8 月),纳斯达克在 19 个交易日中打破了 11 个最高纪录。根据市场观察,这是 36 年来最好的一个月。(5)
与此同时,市场从未如此波动。
两个简单的推荐:
- 投资 VIX 等波动指数
- 使用止损来避免异常值和市场修正
如果你有另外的观点或者你想完成这个分析,欢迎在下面评论。
如果你想了解更多的算法交易,请关注我。
赛义德·莱萨尼
完整的 Python 代码:
#Import Pandas, Numpy and PlotLy for Data visualization.
import numpy as np
import pandas as pd
import plotly.graph_objs as go
from pandas_datareader import data, wb
from datetime import date#Uploading market data for 2019 and 2020
SPY_data_2019 = data.DataReader('SPY','yahoo' ,start=pd.to_datetime('2019-02-04'), end=pd.to_datetime('2019-08-25'))
SPY_data_2020 = data.DataReader('SPY','yahoo' ,start=pd.to_datetime('2020-02-04'), end=pd.to_datetime('2020-08-25'))SPY_data_2019['Daily return'] = SPY_data_2019['Close'].pct_change(1)
SPY_data_2020['Daily return'] = SPY_data_2020['Close'].pct_change(1)# Add histogram data
x1 = SPY_data_2020[‘Daily return’].fillna(0)
x2 = SPY_data_2019[‘Daily return’].fillna(0)# Group data together
hist_data = [x1, x2]
group_labels = [‘2020’, ‘2019’]# Create distplot with custom bin_size (set bin size = 0.5% return)
fig = ff.create_distplot(hist_data, group_labels, bin_size=.005)
fig.show()#Mean calculation
SPY_data_2019['Daily return'].mean()
SPY_data_2020['Daily return'].mean()
#Median calculation
SPY_data_2019['Daily return'].median()
SPY_data_2020['Daily return'].median()
#Standard Deviation calculation
SPY_data_2019['Daily return'].std()
SPY_data_2020['Daily return'].std()
#Percentile at 2.5% and 97.5%
SPY_data_2019['Daily return'].quantile(.025)
SPY_data_2019['Daily return'].quantile(.975)
SPY_data_2020['Daily return'].quantile(.025)
SPY_data_2020['Daily return'].quantile(.975)
来源:
①维基百科:https://en.wikipedia.org/wiki/S%26P_500_Index
以客户为中心的营销人员如何使用机器学习
在你的营销策略中利用 ML 不再是一种奢侈,而是一种必需
在 Unsplash 上由 Austin Distel 拍摄的照片
营销是任何成功公司的一个重要方面。简单地说,市场营销是指与购买和销售产品或服务相关的业务活动。
以客户为中心
“以客户为中心”是将客户放在第一位,放在业务的核心位置,以提供最佳体验并建立长期关系。
一个以客户为中心的组织将客户体验作为核心价值,这有助于领导层的决策过程,反映员工支持的信念,并为当前和潜在的客户提供清晰度。
以客户为中心的营销
以客户为中心的营销是一种在所有与广告、销售和推广产品和服务相关的决策中优先考虑客户需求和利益的方法。
对于成功的以客户为中心的营销,你需要深刻理解这个问题:为什么你的客户需要你的产品或服务?目标不仅仅是业务增长;它是由说服客户相信无论你的公司提供什么都能改善他们工作或生活的某个方面而驱动的增长。
机器学习——人工智能的子集
人工智能(AI) —是一个计算机科学领域,专注于让机器看起来像拥有人类智能。之所以称之为“人造”,是因为人类创造了它,它不是自然存在的。
机器学习(ML) 是 AI 的一个子集。ML 算法是以数据集作为输入的计算机可实现的指令。他们在数据集中找出以前未被发现的模式。
有监督的 ML 是当这些模式导致数据上的一些标签,你的 ML 模型学习如何将每个唯一的模式映射到最合适的标签。这种类型的 ML 用于预测无标签数据的标签。
无监督 ML 是你的模型把发现的模式呈现给用户,提供洞察。
随着时间的推移,当遇到越来越多的数据时,ML 模型会提高其性能。他们通过经验提高,就像一个人通过仔细观察和自我纠正沉迷于一项新活动时一样。
以客户为中心营销的机器学习
随着竞争变得越来越激烈,消费者现在有更多的业务选择,使 ML 评估有效地接触和吸引您的客户。
所有的企业主都注意到了在营销中围绕人工智能的越来越多的炒作。人工智能在市场营销中的应用包括聊天机器人、内容创建、程序化广告等等。
市场营销中有如此多的人工智能应用,你永远不应该忽视实施有效和优化的市场营销策略的关键,即深入和清晰地了解你的客户。
一旦你的 ML 模型训练有素,它可以快速地对任何新的数据输入进行分类,并预测可能的结果。您可以获得更深入的客户洞察,并做出更好的行为预测。
这些可能与您的潜在客户和客户在某些活动中转化的可能性、增加他们的购买频率、流失或失效,或者更具体的事情有关。
在你的营销策略中利用 ML 不再是一种奢侈。相反,它已经成为一种必然。
让我们来看看营销人员利用 ML 驱动的洞察力来制定以客户为中心的最佳营销策略。
行为洞察和预测
您的客户的哪些行为模式导致他们在过去采取了特定的行动?
结束与你的关系的客户是否与那些仍然忠诚于你的客户形成了明显不同的行为模式?
对于一个人来说,想弄清楚并研究所有这些模式并不容易。这一切背后的数学非常复杂。
因此,您的 ML 模型负责这项任务。它可以检测出客户的哪条信息对他们采取特定行动(如搅动)的决定产生了多大影响。
在客户采取行动之前预测他们的行动是很重要的,尤其是当行动是不可逆转的时。失去客户是不可逆转的损失。你永远不应该开始面对损失,然后开始考虑减少和防止它。
监督 ML 算法可以发现隐藏在客户数据深处的预测模式。
您可以使用它们来找出哪些潜在客户最有可能成为您的客户,方法是根据以前成功转化为客户的潜在客户和失去的潜在客户的数据来训练您的模型。
一旦您的模型经过训练,您的模型就可以将潜在客户的数据作为输入,并预测新线索与过去成功转化为客户的线索的最佳“外观”程度。
同样,你可以使用监督 ML 来预测客户是否有可能流失。您可以根据那些已经流失的客户和那些仍然活跃的客户的数据来训练您的模型。
然后,您的模型可以将当前客户的数据作为输入,并计算出是否有任何客户的数据显示出与流失客户的数据相似的模式。
对客户行为的预测可以让你根据他们在客户之旅中所处的阶段,想出最有效的营销活动。
基于人物角色的洞察和预测
尽管预测客户的下一步行动非常有助于在正确的时间接触到正确的人,但这并不是真正优化营销之路的终点。
为了有效地与你的客户互动,你需要把他们当成真实的人来了解。然后,你将能够提供超个性化的体验,唤起情感反应。
如果你能向你的观众展示你非常了解他们与你互动的原因,无论他们是早期潜在客户还是忠实客户,你和你的客户之间的关系和信任都会变得更加牢固。
市场细分
客户细分就是把你的客户进行细分。基于用于执行细分过程的数据,来自一个细分市场的客户与来自另一个细分市场的客户显著不同。
无人监管的 ML 在这里发挥作用。聚类算法,如 K-Means,是无监督 ML 的一部分,用于发现未标记数据集中的隐藏模式,并对非常相似的数据点进行分组。
上图展示了一个非常简单的使用 ML 形成集群的例子。数据集包括关于每个客户的两条信息(属性)。
基于这些属性的值,每个客户在上面的二维表示中占据其独特的位置。它是二维的,因为有两个属性。
该算法的任务是找出如何将这些数据点分组到由该算法的用户明确提供的数字中。
由此产生的群体或集群,可以形成公正的、真正数据驱动的人物角色的基础。随着您继续工作并收集更多数据,重新运行聚类算法可能会在您的客户中发现新的群体。
因此,您将能够更新您的知识,更新您的消息传递、创意和其他个性化工作,以始终与您的客户群保持相关。
让我们告诉你一个有趣的例子,它将阐明聚类如何在营销中实现以客户为中心。颠覆性的直接面向消费者的家具品牌 Burrow 采用 ML 驱动的人物角色来识别其受众群体在定向广告中看到的颜色。
他们发现,住在独栋住宅、带着孩子的老年顾客更倾向于购买深色沙发。
住在公寓里、很少或没有孩子的年轻顾客可能会购买浅色沙发。
这些见解使陋居能够向拥有这些属性的观众推出反映这些属性的创意。
结论—机器学习的使用为公司节省了数百万美元
尽管许多复杂的人工智能应用程序需要更多年甚至几十年才能完全开发出来,但 ML 的民主化使营销团队能够产生预测性的客户洞察,而无需花费数百万美元聘请昂贵的顾问或雇佣大型数据科学团队。
现在是你探索这个选择的时候了。
数据分析如何帮助揭示冠状病毒的真相
T 这些天来,我们都害怕新的空气传播传染性冠状病毒(2019-nCoV)。即使是轻微的咳嗽或低烧,也可能是昏睡症状的基础。然而,真正的真相是什么?
2 月 3 日,有人发布推文,谎称南加州大学洛伦佐住宅周围确诊了一起冠状病毒病例,这是一个中国留学生密集的地方。然后,另一条推文来了,声称他朋友的室友哥哥女朋友也感染了。人们纷纷转发,惊慌失措。后来,该大学澄清这是一个混淆,没有冠状病毒病例被怀疑或确认。
这就是谣言如何迅速传播并最终成为“事实”— —当人们对真相一无所知的时候。我认为有必要从官方和非官方来源收集数据,并保持公正。更重要的是,公众需要用透明的数据来源对这次疫情有一个公正的认识。
本文的目标是从原始来源收集数据,并使数据可靠透明。随着我们收集更准确的信息,这将有助于公众发现事实并抑制极端的观点。
从主要来源收集数据
我使用一个网络抓取工具来节省构建一个抓取器来从每个网站获取数据的努力。有很多选择,但我发现octoprespare是最好的。他们最近创建了一个刮擦“配方”,从中国医疗保健部门的数据库中提取实时数据。这要容易得多,因为我甚至不需要像大多数抓取工具要求的那样配置任务,使数据更容易被每个人访问。
在 Excel 中抓取结果
数据分析
我收集了从 1 月 22 日到 2 月 4 日的数据。数据显示,感染病例的数量在增加,没有任何减缓的迹象。然而,疑似感染病例的数量稳步下降,这表明随着疑似感染病例转为确诊病例,总体疑似感染病例一直在减少。
可疑感染
然而,一些人发现死亡人数有点偏多。我调出数据做了点调查。数据显示,湖北省的死亡率目前为 2.7%,而中国其他地区的死亡率为 0.19%。这意味着湖北的死亡率是全国其他地区的 15 倍。
在这种情况下,我们得出两个可能导致如此高的差异的假设:
假设 1:政府少报了实际感染病例。
反证:如果这种说法是真的,实际感染人数将是死亡人数除以 0.19%,等于 288,947。这一结果与 R0(感染的繁殖数)相矛盾,R0 是用来衡量病毒传染性的指标。大多数研究[Maclntyre,2020]显示,本次疫情的 R0 在 2 到 2.5 之间,比季节性流感略高。因此,冠状病毒不太可能变得如此具有传染性,以至于在不到一个月的时间里感染约 30 万人。
来自纽约时报
那么还有什么因素会导致如此高的死亡率呢?
假设 2:由于卫生资源短缺,人们无法治愈。
这种说法更有道理。医疗用品、医院床位和人员的短缺将导致更多的人别无选择,只能在家自我隔离。不适当的自我治疗会加重病情。此外,冠状病毒对已有健康问题的老年人来说是致命的,更不用说缺乏及时的适当治疗了。
话虽如此,冠状病毒并不像它在美国公众面前表现的那样令人昏昏欲睡。由于美国的医疗资源比世界上其他大多数国家都多,我们真的不应该害怕太平洋之外的疾病。此外,美国政府已经禁止在过去 14 天内在中国旅行的外国人入境(除了公民的直系亲属和永久居民)。另一方面,正在经历的导致 1900 万人患病和 10,000 人死亡的季节性流感比新型冠状病毒更令人担忧。
新闻报道集:
使用抓取工具,我还从几十个媒体渠道收集了疫情爆发以来的新闻报道。以防你没有使用过刮擦工具,这个视频可能有助于创建高级刮擦任务。
我通过搜索“冠状病毒”从《华尔街日报》、《纽约时报》和路透社搜集了一些文章,以便比较一些新闻媒体之间的差异。
刮华尔街日报
许多新闻文章大量强调了疫情的严重性,并淡化了其他指标,如疑似感染和康复数字。这种不完整的叙述不仅导致对中国政府的错误印象,也导致对疾病本身的错误印象。因此,当我们看到别人咳嗽,感冒,甚至与不同种族的同事握手时,我们就会变得偏执。
我在《华尔街日报》上看到了这篇文章,作者是沃尔特·米德,标题是“中国是真正的东亚病夫”。“不管标题是不是极度排外,他的文章中有几十处显示了造谣。他说“我们不知道新型冠状病毒会有多危险。有迹象表明,中国当局仍在试图掩盖问题的真实规模。”在文章发表之日,世贸组织已经发现 R0 在 2 左右,病死率不到 3%,接近季节性流感。此外,没有证据证明中国政府试图隐瞒任何事情。事实上,我从中国政府网站的开源数据库中获得的数据与世卫组织、CDC、ECDE、NHC 和 DXY 的数据是一致的。有一些因素可能会影响准确性,但是,错误估计应该在允许的范围内,不会受到世界主流媒体的质疑。
米德还贴出了一段视频,题为“一种共产主义冠状病毒”,宣告了实际的欢呼声(武汉,嘉佑!)视频中的公众发出了“中国湖北武汉全面封锁”的 anSOS 信号。“共产主义者”是一个政党术语。米德把它作为一个形容词来描述一种隐藏在占有欲背后的疾病。此外,中国人民高呼“坚持住,武汉!”在视频里。然而,这些叙述让人们看起来因为封锁而拼命呼救。
这让我想起了 1 月 31 日发布的一条推文,一名亚裔女子说,一名患者开玩笑说自己的手因为冠状病毒而颤抖。这不是推特上传播的唯一一个笑话。随着成千上万的人正在经历恐惧的感觉,冠状病毒的爆发成为一种用来歧视某些人群的娱乐内容。
就像 20 世纪 80 年代爆发的艾滋病毒恐慌导致 LGBTQ 人群被定罪一样,传染病被公众用来证明偏见是正当的。不让人觉得怒不可遏吗?
https://reason . com/2019/10/11/民主党-候选人-承诺-LGBT-选民-他们会惩罚所有正确的人/
我想引用《洛杉矶时报》专栏作家弗兰克·雄(Frank Shyong)的话:“我们愿意相互理解,这是保护我们免受恐惧及其灾难性后果的原因。”让我们不要夸大疾病的威胁,也不要助长这个国家已经太多的种族主义态度。我们有权了解事实,而不是传播任何仇外言论。
来源:
https://www . latimes . com/California/story/2020-02-03/冠状病毒-爆发-叙事-排外
https://www . nytimes . com/interactive/2020/world/Asia/China-coronavirus-contain . html
https://en.wikipedia.org/wiki/Basic_reproduction_number
数据如何在危机中帮助决策
将数据作为对抗冠状病毒经济的强大武器
当事情按预期进行时,很容易思考业务,因为你有时间思考正在发生的一切及其原因。在危机中,所有这些都会改变。事情开始发生在你身上,而不是等着你采取行动,而且发生的速度比你能够处理的还要快。这很快淹没了你的标准操作程序,使它更难操作。
目前由冠状病毒引起的全球局势是一场以各种方式打击所有国家所有企业的危机。在几周的时间里,这种病毒以及遏制它的必要措施已经改变了消费者购买、资本投资,并直接制约了整个行业。
在危机中,你必须开始以不同的方式工作。不幸的是,危机的高度压力使得人们很难清晰地思考并做出理性的决定,这也是许多公司开始犯错的原因。使用数据对于保持专注和理性思考至关重要,但危机的本质使数据更难使用,因为一切都在变化。所有关于你的企业的历史数据可能根本无助于预测危机将如何展开!就在你需要更多数据的时候,它变得更难使用。
即便如此,也有可能将数据作为强大的武器,不仅可以度过危机,还可以将其转化为机遇。在本文中,我将介绍实现这一点的各种方法和途径,您可以立即使用它们来收回控制权。
具体来说:
- 如何快速甄别哪些是你可以信任的
- 确定复苏的早期指标
- 发现新机会的萌芽
你信任谁?
根据定义,数据是过去的记录。当你处于危机之中时,过去可能不是现在的可靠指标。通常在危机期间,指标的性质变化如此之大,以至于与早期数据几乎没有相似之处。不仅数据的数量有很大不同,在危机期间,数据的波动性也要大得多。
你的许多(如果不是全部)指标将遵循类似的路径,这意味着你不能再相信你在危机开始前的所有假设。你可能在危机前建立的预测、预期和模型需要扔掉,因为它们不再适用。
不信任任何东西就不可能做决定,所以你要做的第一件事就是确定你能信任什么。
这是危机管理中最难的部分,因为没有办法知道变化的程度,但这里有一些地方可以开始寻找立足点:
1。什么没有变?
很可能你的业务的某些部分没有改变,如果你能识别它们,它们是一个很好的起点。
- 即使你的客户越来越少,一些客户群是否保持一致?
- 即使你的流量少了,转化率也一样吗?
- 即使你的伴侣在挣扎,他们中的任何一个人还在做出贡献吗?
这些没有改变的东西是你事业的基础,也是你可以建立复苏的基础。除此之外,这些才是未来增长的核心引擎。
2。什么还在工作?
即使业务的一部分发生了变化,它仍然可能在工作(尽管没有以前那么好)。识别这些工作片段很重要,因为它们可以强烈地表明机会可能隐藏在哪里。例如,如果整体交易量下降,确定哪些客户群仍在购买,哪些已经完全停止购买。下降很少是一致的,因此将完全不起作用的和仍然起作用的分离开来是一个重要的开始。
3。测试,测试,测试
因为所有的规则都变了,你不能依赖你的旧剧本。在相信你的年度促销会在危机中取得成功之前,先进行一次规模较小但类似的促销,并衡量结果。人们可能会有不同的反应,提前了解将避免在由于危机的动态而从一开始就不会成功的计划上浪费时间和精力。你测试得越多,你就越知道该相信什么,你就能依赖更多的构件。
这些立足点只是构建块,但是它们是可靠的块,您的恢复策略可以使用它们立即开始。你不想等到一切都解决了再建立新的战略,而建立在假设和猜测上的战略是危险的。这些块是您可以用来开始恢复的可靠部分。
早期指标
没有什么危机会永远持续下去,最先发现复苏迹象的公司最有可能利用由此带来的市场增长。你越早投入资本并做好准备,你就越有可能在复苏的浪潮中成为行业的领导者。
然而,过早投资于复苏的成本很高,因为危机会给你的财务状况带来全面的巨大压力。如果你过早投资,你可能会在复苏实现之前耗尽资本。如果复苏的时间比你预期的要长,你可能还没来得及利用你早期的行动就耗尽了资本。
那么,你如何确定复苏可能何时开始?
最重要的是确定早期指标。有许多类型的早期指标和寻找它们的地方,下面是一些例子:
- 客户行为指标。客户引领任何市场,因此观察客户行为变化的迹象是市场变化的最强有力的早期指标。顾客购买之旅的最后一部分是购买,所以不要依赖购买,因为它们是这些变化的跟踪指标。广告转化的转变、活动的增加和客户支持请求的激增都表明客户行为开始转变。如果可能的话,观察所有的客户群,因为你永远不知道哪一个会给你你需要的早期提示。
- 市场指标。虽然单个客户群和产品购买可能过于嘈杂,无法辨别迹象,但整体市场表现可以将这些较小的信号融合成较大的信号。问题是,小的变化需要累积成大的变化来移动市场指标,这意味着当市场指标改变时,指示可能会滞后。即便如此,在整体市场表现中寻找哪怕是微小的变化,也可能是一个重要的提示,让我们更深入地寻找隐藏在表面之下的其他指标。
- 竞争指标。观察你的竞争对手可能是变化的最重要的早期指标之一。例如,如果你的竞争对手正在大规模裁员,他们可能正在挣扎,他们的客户对你来说是脆弱的。更有可能的是,如果你看到你的竞争对手通过特定的促销活动来追求特定的客户群,他们很可能已经发现了你也可以利用的机会。学习别人的发现并没有什么坏处,如果你看到许多竞争对手都在追求同样的策略,这可能是一个强烈的信号。然而,要小心跟随人群,因为他们可能会作为一个群体撞到墙上,所以要确保你确信他们的行为背后有原因。
即使是最好的早期指标也会误导你,很容易将这些信号误认为是危机中正常波动的复苏。为了避免让你对复苏的渴望影响你的决定,在查看数据之前设定一个标准是很重要的。你的早期指标必须显示什么才能让你相信复苏正在进行?需要看到什么样的门槛或者趋势?一定要写下这些标准,并经常参考它们,因为即使情绪高涨,它也会提供重要的客观性。
如果你勤奋并以数据为导向,你可以通过比其他公司更早、更有效地利用复苏浪潮,将危机转化为竞争优势。
绿芽
森林火灾具有巨大的破坏力,但即使是最严重的森林火灾,紧接着也会有新芽形式的植物生长。这些新的生长物是未来森林和灾后重建的希望。
商业也是如此,每次灾难都会带来未来发展的新机遇。在冠状病毒危机中,受打击最大的行业之一是邮轮业,受到旅行限制和对船上感染的担忧的打击。然而,即使在如此严重的危机中,邮轮业仍有复苏的迹象。世界上最大的邮轮公司之一,在危机的早期,他们发现有一些客户群仍然在购买,事实上,根据他们的促销活动,他们购买了更多的邮轮船票。
由于危机期间市场变化剧烈,这些萌芽可能会出现在意想不到的地方。几乎不可能知道它们可能会在哪里出现,所以你能做的最重要的事情是准备好寻找它们,并迅速找到它们,这样你就能帮助它们成长为主要的业务驱动力。
你如何发现绿芽?以下是一些方法:
- 调查你所有的数据。既然绿芽会出现在意想不到的地方,你就不能靠直觉知道去哪里找。调查你的全部数据是至关重要的,因为你撒的网越大,你就越有可能抓住它们。例如,客户增长的一些最好的萌芽可能来自客户支持请求,因为任何参与帮助您的产品的人仍然在参与。这可以告诉你应该瞄准什么类型的新客户。找到一种自动快速洞察客户数据的方法。在这种新常态下,您的资源必须集中于为您的业务带来最佳结果。
- 换个角度思考。在危机中,你可以做出的最重要的心理转变之一就是将问题视为机遇。如果你开始以不同的方式运作,现在正在损害你的业务的一些东西可能是一个机会。例如,如果客户不购买您的产品,但现有客户仍在升级他们的帐户,您可能希望开始提供产品的免费版本,并依靠升级来获得新的收入。
- 与你的顾客交谈。定量数据很重要,但来自客户的定性反馈可以揭示表面上不明显的东西。例如,如果一些客户在危机期间仍然购买你的产品,他们可能会以一种全新的、意想不到的方式使用产品,这对你来说可能是一个新的市场机会。要获得这种反馈,你需要做的不仅仅是提供调查和礼品卡,你需要将顾客讨论融入你的购买体验。虽然摩擦在某些情况下会降低销售额,但你收集的新信息将在未来带来巨大的回报。
绿芽最大的好处是它们是未来竞争优势的燃料。如果你在竞争之前发现了新芽,你就可以在市场复苏中领先一步,并在他们仍在努力让他们的旧业务方法发挥作用时,为未来打造增长引擎。虽然这通常是个好建议,但在危机期间,它会变成一个秘密武器。
结论
危机是艰难的时刻,你的第一反应可能是放弃数据,依靠直觉做出重要决定。然而,这种策略类似于在黑暗中穿过一片森林,因为你遇到什么只是时间问题!你需要在危机管理和决策中利用数据,从确定哪些数据可以信任开始,一直到发现复苏的早期迹象。
危机管理并不容易,但每一次危机都有复苏,只要你专注于逻辑的、数据驱动的方法,你不仅能度过危机。你可以茁壮成长。
数据是如何与新冠肺炎交织在一起的!
数据、仪表板和下一步行动
乍一想,有人能够预测到这样的疫情或者今天的数据如何在未来使用,这似乎很荒谬,但大多数人没有意识到的是,虽然新冠肺炎是新的,但冠状病毒本身并不是新的(它以前发生过,也可能再次发生)。冠状病毒很久以前就被发现了,我们今天所听到的新冠肺炎病毒只是它的另一种变体(通俗地说)。
本文基于对截至 2020 年 3 月 23 日的可用数据的推断。我将列出一些数据源和仪表板。此外,我将对这些信息以及您或任何人可以做些什么来进一步探索和利用这些数据进行评论。
冠状病毒爆发
迪米特里·卡拉斯泰列夫在 Unsplash 上的照片
也就是说,自 2000 年以来,发生了三次不同的疫情。第一次爆发是在 2002 年,来自 17 个国家的 8000 多个病例。下一次爆发是 2012 年的中东呼吸综合征,21 个国家超过 2500 例。最近爆发的显然是新冠肺炎(新型冠状病毒)这是一种最危险和传播最广的冠状病毒。每天我们都在见证新的病例,世界卫生组织已经宣布它为疫情。
最近 Tedx Talks 在他们的 Youtube 频道上发布了一个让我大开眼界的关于冠状病毒的演讲,名为“冠状病毒是未来”,作者是岚娜·谢赫[2]。老实说,虽然标题看起来令人担忧,但内容描述了冠状病毒是多么新鲜。
当前情景
谷歌搜索页面统计(2020 年 3 月 23 日凌晨 1:52)
每天,我们都在目睹全球范围内报告的电晕病例数量激增。在谷歌上简单地搜索“冠状病毒”就会发现一系列新的文章、信息来源以及统计数据。如果你环顾四周或者只是查看一下你的电子邮件,你会发现不同的公司都在展示他们是如何解决疫情问题的,同时还能确保为客户提供不间断的服务。这真的很感谢一些公司和组织,他们正在教育、传播信息以及促进更健康的生活方式,以遏制这种将我们锁在房子里的疫情。
看一下世界卫生组织(世卫组织)[3]的最新报告,显示中国已经有了明显的复苏,而义大利和美国(尤其是纽约州)的病例数仍在上升。这并不意味着确诊病例的数量会突然增加(很有可能是这样),但也可能表明这样一个事实,与以前相比,现在有更多的人接受检测,因此导致了突然增加。
数据
Kaggle 上的冠状病毒标签
现在有几个可用的数据来源,但我发现一些可靠的来源包括:
- 世界卫生组织:世卫组织正在以 PDF 报告的形式为全球所有国家提供每日情况报告,其中包括确诊病例总数、自前一天以来新发现的确诊病例以及其他相关信息[3]。
- Kaggle 上有比赛和数据集,因此数据科学家和机器学习实践者可以使用他们的知识和技能来得出有意义的见解[4]。
- Google Datasets:Google Datasets 托管着互联网上各种数据源的链接,可以根据需要使用[5],但要警惕你使用的数据集的质量。
这很好,但我们以前已经见过冠状病毒。如果我们能够获得这些数据,这将为我们了解新冠肺炎病毒和其他类似病毒提供一个很好的起点。最好的起点是世界卫生组织,它根据定期生成的报告托管 SARS 的数据。但是,这些数据是以 HTML 页面的形式提供的,如果需要的话,必须使用抓取来检索。
新冠肺炎仪表板
新冠肺炎仪表板
今天,分析全球冠状病毒现状的最简单方法是找到一个你看起来正确的仪表板,并坚持下去。个人、组织和公司已经开发了仪表板来反映病毒的当前状态,以便于监控和信息传播。我遇到的一些仪表板是:
- 约翰·霍普斯金:仪表板在一个仪表板中包含所有国家的数据。它包括一张世界地图,地图上用圆点描述了病例数,地图周围是新冠肺炎的统计信息[7]。
- 1Point3Acres: 该仪表板包含美国和加拿大的 COVID 病例数,包括州和县级别的病例分布[8]。
- Tableau: 如果你熟悉 Tableau 的特性,可以查看他们开发的交互式仪表盘【9】。
- 基于 R Shiny 的仪表板:一个开源仪表板,由 Christoph schnenberger[10]利用 R Shiny 的强大功能开发。
在观察了几个仪表盘之后,我了解到向用户描述信息有很多方式。你可以选择特定的国家进行深入研究,或者选择整个世界作为你的画布。在医疗保健信息的情况下,选择高质量的数据源变得很重要。柱状图、地理图、表格、线图等。所有这些都可以根据您想要显示信息的方式来使用。此外,由于拥有如此广泛的用户基础,还必须考虑此类仪表板的可访问性,以便每个人都可以访问和使用它们。
下一步:去探索
虽然我们身边到处都是新冠肺炎 spread 仪表盘,而且制作非常精细,但我们的目标是更进一步。正如你所想象的,新冠肺炎在很多方面影响着我们的生活。客流量是否明显减少?这是否减少了污染物的排放?贸易是否已经完全停止,还是基本交易仍在进行?像 Amazon prime 这样的服务正在经历一次提升吗?还有更多…
看看你的生活,看看你想发现什么。我过去经常去健身房保持活跃,但现在它关闭了,我不能经常出去,我不得不在房子里工作。我不得不订购一些运动器材,我的朋友也是如此。这让我想到了一个问题:健身器材的需求是否增加了?人们买的只是一根跳绳还是一整架重物?供应商是否能够满足日益增长的需求?这些问题的答案可能并不直截了当,需要一些挖掘,但这将是我个人感兴趣的事情,也可能引起其他人的兴趣。
参考
[1]https://www . lab manager . com/lab-health-and-safety/新冠肺炎冠状病毒史-22021
[2]https://www.youtube.com/watch?v=Fqw-9yMV0sI&t = 4s
[3]https://www . who . int/emergencies/diseases/novel-coronavirus-2019/situation-reports
[4]https://www.kaggle.com/tags/covid19
https://www.who.int/csr/sars/country/en/
https://coronavirus.jhu.edu/map.html
https://coronavirus.1point3acres.com/en
https://chschoenenberger.shinyapps.io/covid19_dashboard/
请在下面的评论中分享你的想法、观点和建议。如果你喜欢你读到的东西,可以考虑在 Medium 上关注我,在 LinkedIn 上联系我:https://www.linkedin.com/in/bhanotkaran22/。
数据如何影响媒体、广告和娱乐事业
来自媒体、广告和娱乐行业的一些国内领先数据科学家的见解
由❤制造
在我们即将举办的活动——数据科学沙龙:将人工智能和人工智能应用于媒体、广告和娱乐之前,我们邀请了我们的演讲者,他们是媒体、广告和娱乐行业的一些全国领先的数据科学家,回答了我们关于他们行业未来的一些最紧迫的问题。请继续阅读他们的见解——里面有一些很棒的建议!
数据科学家想从另一个领域进入媒体/广告/娱乐行业的原因有哪些?
“我真的很喜欢在媒体行业工作,因为数据科学可以在公司的很多方面提供帮助。我已经能够从事预测、运筹学、用户细分、自然语言处理、内容推荐方面的工作。数据科学改善了我们读者的时代体验,也有助于从报纸发行到广告销售的商业问题。随着报纸业务随着读者习惯的改变而不断发展,我相信我们的工作范围只会越来越大。”-安妮·鲍尔,纽约时报数据科学部主任
“我认为大多数数据科学家在他们所担任的角色中寻找一些关键的东西,它们是:要研究的有趣问题、丰富的数据以及成长和学习新事物的能力。媒体行业现在拥有比以往任何时候都多的可用数据,这为开发创新方法来利用这些数据产生业务影响带来了不可思议的机遇。最重要的是,随着新媒体平台和技术的出现,人们的媒体消费习惯发生了变化,行业正在加速变化。在一个像媒体空间一样快速变化的行业中,数据科学家必须跟上机器学习、分析和计算平台的最新进展,才能保持竞争力。这创造了一个令人兴奋的环境,在这个环境中,具有出色分析技能、愿意学习该行业的人可以产生巨大影响。”-鲍勃·布雷斯,康卡斯特公司 Freewheel 的数据科学主管。
“这是一个快速变化的领域,用户媒体习惯不断演变,需要研究、创造性思维和说服。媒体空间是数据科学家或分析师的理想之地,他们喜欢不断变化的环境,这需要打破常规的思维。”-Wes Shockley,Meredith Corporation 受众与分析高级经理
“我认为大多数人加入新闻业是因为他们相信媒体行善的使命和潜力。在这个领域工作时,你有潜力创建或支持那些掌握问责权、推动有意义的对话和变革的机构。你有机会为各种寻求信息和答案的人服务。它不同于其他任何东西。
如果这还不能引起你的注意,那么值得一提的是,在媒体工作是 NLP 数据科学家的梦想(套用《华尔街日报》编辑部数据科学家 Tess Jeffers 的话)。媒体也提供了许多有趣的挑战来解决:倾向,流失,收入,主题建模,观众聚类,等等。”——Alyssa Zeisler,&研究开发总监,高级产品经理,编辑工具,华尔街日报。
“根据研究领域的不同,数据有多种形式:语音、声学、图像、信号、点云、图形、文字等等。虽然每个领域都有特定的可视化技术,但我特别喜欢源于视觉内容的数据,使用几何先验知识,以及其潜在的高维本质。对于任何对机器学习的视觉和图形应用感兴趣的人,强烈建议选择媒体/娱乐行业。”-英特尔高级研究科学家伊尔克·德米尔
“如今,数据科学在娱乐行业中有许多未言明的新颖应用,但有待发现的大量机会才是真正令人兴奋的。这是一个有着 100 多年历史的行业,现代化和规模化的机会在于数据科学家的贡献。超越我们目前消费和制作电影、电视和音乐的方式,娱乐和带来快乐的下一项创新即将到来,等待数据科学家的释放。”-网飞数据科学经理金·马丁
“成长。营销分析市场预计到 2025 年将达到 46.8 亿美元,在 2020-2025 年预测期内的 CAGR 为 14%。云技术和大数据的采用进一步推动了这一趋势,这将进一步促进营销分析市场的增长。”-丹佛·塞劳,WPEngine 的高级软件开发工程师
“我认为对这个行业充满热情是关键。与生物技术或制药等行业不同,媒体和娱乐与我们大多数人有着内在的联系,因为它们在我们的日常生活中非常普遍。由于我对电影的热爱,我本人在派拉蒙影业(Viacom)开始了我的数据科学生涯。我相信,这种对主题的熟悉和喜爱程度很难培养,它会转化为更好的工作动力。”-Daryl Kang,福布斯首席数据科学家
“人类心理和行为有很强的成分,是媒体/广告/娱乐领域大多数决策的一部分。虽然数据和算法可以实现自动化并学到很多东西,但为了真正将用户与内容很好地联系起来,有一个强大的人类元素需要不同的声音和思维。”-Amit bahatthacharayya,VOX Media 数据科学主管
你对这个领域的新人有什么建议?(又名,你希望有人告诉你什么?)
“首先也是最重要的:清晰沟通的重要性经常被低估,但它可能意味着一项分析或一系列工作是否被使用的区别。新加入者应该致力于如何清晰地表达想法,并以利益相关者可能理解的方式进行沟通,无论这个人更依赖数字还是轶事。学习什么是有价值解决的问题,如何用数据提出好的问题,创造性地解决问题,是相似和相邻的技能。
同样值得注意的是,各种各样的背景都是相关的,所以不要认为你错过了一项会阻碍你进步的特定技能。我们的数据科学主管来自天体物理学,团队中的首席数据科学家来自生物学,我的整个职业生涯都在新闻编辑室度过(而不是在数据岗位上)。理解、欣赏和渴望对你正在取得的成功同样重要,如果不是更重要的话。”——Alyssa Zeisler,研发主管,高级产品经理,编辑工具,华尔街日报。
“对于任何希望进入媒体领域数据科学的人,我有几条建议:
- 深入了解你的业务。技术技能只是战斗的一半。数据科学只有在以解决特定业务问题的方式应用时才能提供价值。
- 建立势头。寻找数据科学可以提供业务影响的小方法,以建立信心并在更大的计划中获得业务投资。
- 发展机器学习以外的技能。不管你的模型有多精密,如果你把垃圾放进去,你就会把垃圾弄出来。成为探索性数据分析的专家,问很多问题,以了解您正在处理的数据真正代表了什么。统计分析和优化方法的知识也能带来巨大的好处。"
-鲍勃·布雷斯,康卡斯特公司 Freewheel 的数据科学主管。
“对我来说,数据科学在很大程度上是学习他人的专业知识。最初,我认为我应该深入研究一些不同的机器学习算法和统计技术。但是,将这些数据科学工具应用于《纽约时报》的问题需要从广泛的人群中了解更广泛的主题。我们目前如何解决这个问题,为什么做得不够,我们可以使用哪些数据来改进我们的方法?我们如何与公司的其他部门合作,提高数据质量,使机器学习更加有效?我们如何以一种有用的方式呈现我们的建模结果,或者将我们的生产模型集成到现有的公司基础设施中?
由于从事学术研究,我习惯了一种范式,在这种范式中,分析和科学结果是最重要的,而结果的交流是一项必要但次要的任务。根据我在数据科学方面的经验,我发现良好的双向沟通和顺畅的集成对于项目的成功来说,通常与建模和分析一样重要。即使是简单的项目也可能涉及面很广!”——安妮·鲍尔,纽约时报数据科学部主任
“一开始不要被工作吓倒;工作中会学到很多东西。对于那些来自非技术背景的人来说尤其如此——事实上,他们经常在讨论中带来不同的观点。
与学术界不同,牢固掌握基本编程比仅仅掌握理论数据科学技能要重要得多。
最后,如果一开始工作看起来不太像数据科学,不要灰心丧气。真实世界的数据是杂乱的,可能需要一段时间才能显示其价值。”——达里尔·康,福布斯首席数据科学家
“没有正确的道路。找出你擅长什么,并想办法把它与你的工作和职能结合起来。”-Amit bahatthacharayya,VOX Media 数据科学主管
“任何一个拥有电脑和互联网的人都可以学习数据科学,因此总会有一大批拥有相同技术技能的数据科学家。将你的数据科学职业生涯提升到一个更高的水平并使你从人群中脱颖而出的一个最重要的特征是你的沟通技能。开发数据科学解决方案涉及从获取数据到训练 ML 模型的复杂技术。将分析输出转化为可操作的业务洞察,并与业务利益相关方进行沟通的能力是伟大的数据科学家最重要的特质。从逻辑上讲,分析结果的交流决定了数据科学解决方案的影响,因为它能够吸引利益相关方。在情感上,这有助于我们与利益相关者说相同的语言,并达成更有意义的一致。利用业务语言有效地交流技术成果是必要的,因为它鼓励涉众有效地参与构思和验证成果。最优秀的数据科学家在交流结果时会感同身受,他们会精心制作一个具有清晰洞察力的引人入胜的故事,呈现事实和数据,以促进每个人的理解。”-Upasna Gautam,CNN/WarnerMedia 产品数据经理&
“在我的职业生涯中,我个人主要担任工程方面的角色。然而,从数据科学的角度来看,重要的是要有定量思维。这个领域的大多数专业人士都受过结合统计学、数学、编程/计算机科学以及一些市场营销领域知识的教育。理想的人有很强的量化取向,以及对消费者行为和影响消费者行为的策略的感觉。”-丹佛·塞劳,WPEngine 的高级软件开发工程师
“并非所有的机会都是平等的。虽然作为一名数据科学家,你可以在各种领域工作,获得技能并锻炼自己的才华,但当你找到你联系的领域时,你会看到你的影响力倍增。在那一刻,你将超越仅仅做你知道的事情,进入目标空间,推动更大的创新。你会想你以前做过什么”。-网飞数据科学经理金·马丁
" SQL 和 Python 是必不可少的,但创造力也是如此."-Wes Shockley,Meredith Corporation 受众与分析高级经理
“永远对事实和推理保持好奇,永远说出你的好奇。当你的视角建立在好奇心、数据和学习之上时;你不能逃避科学突破。这也有助于构建具有正确评估和理论基础的科学产品,这些产品更有可能长期存在。”-英特尔高级研究科学家伊尔克·德米尔
“参加聚会,即使是虚拟的。数据科学充满了术语,当你进入媒体、娱乐或广告等子领域时,它会变得更加专业化。Meetups 提供免费接触这种行话!即使你有足够的技术知识,这也能让你吸收该领域的通用语,这样你就能在面试时准备好侃侃而谈。”-多米尼克·罗科,PhData 的数据科学家
“数据科学”对你来说意味着什么?或者说,你认为数据科学、ML 和 AI 之间的区别是什么?
“‘数据科学’描述了将分析方法应用于数据以推动洞察。这些分析方法可以包括机器学习、统计分析、概率建模、数据挖掘或其他方法。“机器学习”是指一类算法,它们通常寻求对数据进行预测或分类,同时允许算法基于训练数据进行“学习”和适应,而无需明确的代码来指导它这样做。机器学习提供了一种随着基础数据变化而调整预测或分类方法的动态方式。“人工智能”更一般地描述了机器对人类智能的模拟。该模拟在许多情况下使用机器学习算法,但也可以使用基于规则的专家系统或其他基于概率的模拟方法。我们今天经常看到人工智能和人工智能互换使用,因为人工智能的新应用倾向于利用基于人工智能的算法”——康卡斯特公司 Freewheel 的数据科学主管 Bob Bress。
“数据科学是从现实世界的数据中提取价值的职业;ML 和 AI 是属于数据科学家工具包的技术,还有其他技术,如统计和数据处理。人工智能技术是那些使用程序或机器来模仿认知行为的技术,而 ML 是人工智能的一个子领域,专注于从数据中自动学习认知行为的程序或机器。通常,人工智能或人工智能科学家将专注于开发这些技术,通常使用比真实世界数据更干净的标准基准数据集。另一方面,数据科学家将采用最新、最伟大的人工智能技术,并将它们应用于杂乱的现实世界数据,为个人和企业创造价值。”-多米尼克·罗科,PhData 的数据科学家
“数据科学是从数据中准备、分析和得出有意义的观察结果。可能是,也可能不是向着 AI,可能是,也可能不是在用 ML。另一方面,人工智能正在创造一种类似人类的智能和机器自主的幻觉,这通常取决于精心制作的系统和数据。机器学习是使机器能够从数据和/或观察中学习和推理的基础。随着我们向深度学习和复杂的人工智能应用迈进,对高质量数据的依赖变得至关重要,因此数据科学成为人工智能/人工智能应用的重要组成部分。”-英特尔高级研究科学家伊尔克·德米尔
“数据科学是从数据中提取价值的研究,而人工智能是机器通过优化其目标的行动来感知和适应环境变化的能力。尽管这两个领域象征着当今伟大的技术进步,但它们都不是最近才出现的现象。根据其定义,只要有记录的信息,数据科学就存在了很长时间,而人工智能研究领域早在 20 世纪 50 年代就开始了。甚至现代人工智能系统的改变游戏规则的原型,神经网络,在 20 世纪 80 年代就已经被构想出来了。发生变化的是计算能力的指数级增长,加上成本的下降,以及近年来数据的大规模激增。这使得数据科学改变了人工智能研究的范式,用一个通过统计模型模拟学习的领域取代了一个曾经基于逻辑的领域——我们称之为机器学习。”-Daryl Kang,福布斯首席数据科学家
"数据科学是用数据回答问题的科学过程的应用."-Wes Shockley,Meredith Corporation 受众与分析高级经理
“我非常重视数据科学的科学部分。学习编程或一门新的语言或框架并不难。另一方面,我不能教你数学和逻辑思维。真正的科学家持怀疑态度,问自己最难的问题,并对细节有着惊人的关注。这些是我们需要超越分析师的特质。
至于区别,我真的看不出有多大区别,除了世界上用来描述“我如何使用数据来模拟一些过程并尽可能做出最有用的预测”的一组不断发展的词语“-Amit Bahattacharayya,VOX Media 的数据科学主管
就职业而言,你的下一步是什么?
“当数据科学在推动行业价值方面发挥越来越重要的作用时,我认为自己很幸运能够在媒体和广告领域工作。我希望在我的公司和整个行业增加数据科学技术和人员的采用和投资方面发挥领导作用。”-鲍勃·布雷斯,康卡斯特公司 Freewheel 的数据科学主管。
“与学术界不同,业内最有效的数据科学家是那些能够最好地将他们的数据产品产品化和销售的人。在这方面,我认为最大的增长机会来自向云计算的转变,因为它允许数据科学家更多地关注手头的逻辑和算法,而不是基础架构和开发运维。因此,我预计未来会有更多的数据科学家担当云架构师的角色。”-Daryl Kang,福布斯首席数据科学家
“我愿意继续教学、创新和指导,并帮助引导中小型组织明智地使用他们的数据。”
-Amit bahatthacharayya,VOX Media 数据科学主管
“带领我的团队走上高绩效预测洞察之路,因此当错过机会时,那是自己的选择。”-Wes Shockley,Meredith Corporation 受众与分析高级经理
“在世界上最大的体积捕获阶段推动研究绝对令人惊叹!我的好奇心指向工作室每个角落的不同研究问题,我们每天都在构建独特的人工智能解决方案。我们拥有前所未有的大量视觉数据,并与艺术家携手制作获奖作品,我们正在用人工智能和数据革新娱乐行业。我很荣幸能拥有这个独特的职位,我的研究可以通过身临其境的 3D 体验来影响世界。”-英特尔高级研究科学家伊尔克·德米尔
—
点击此处阅读第 1 部分。
在 2020 年 9 月 22 日至 25 日举行的数据科学沙龙:将人工智能和人工智能应用于媒体、广告和娱乐上,聆听这些演讲者和更多人的观点。
数据泄露如何在实践中影响机器学习模型
为什么机器学习模型在生产中经常失败
实践中的数据泄漏是机器学习中被广泛低估的影响,尤其是在涉及大量特征工程的情况下。数据泄露甚至发生在 Kaggle 比赛中,获胜者利用了数据中的这些系统缺陷。这篇文章是关于为什么发现数据泄漏如此困难,以及为什么从不同的角度深入理解这些特性对于克服数据泄漏非常重要。
数据泄露,什么?
数据泄露这个术语在机器学习中并不像它应该的那样突出。许多人大致知道这个概念,但不知道这个术语,有时数据泄漏也称为目标泄漏,标签只是泄漏到训练数据中。然而,数据泄漏不仅仅意味着在训练和测试数据集之间存在一对一的“泄漏”。它通常更复杂,尤其是在机器学习模型中,其中涉及到时态数据。一般来说,数据泄露与相关性和因果性有关。
简单的
数据泄漏的直接例子是数据集,其中训练数据仅包含与标签高度相关但没有因果关系的特征。例如,您的标签是员工的年薪,而您有一个包含月薪的要素,在这种情况下,年薪只是月薪的函数。另一个例子是,每一行被分配到一个组(例如,用户),这从测试集中泄漏了标签,其中存在相同的组(例如,用户)。然而,这些例子通常很容易通过标签重要性和相关性分析发现。
复制
更难发现的是数据集中的重复样本。考虑一个数据集,其中有 20%是重复的。当您将数据分为训练和测试时,您已经有了 20%的准确性优势,这仅仅是因为重复。你的分类器可以简单地记住这些例子。
在数据中找出重复项并不像你想象的那么简单。实际上,它们可能不是 100%匹配。例如,您有一个重复的点击事件,其中包括一个时间略有不同的时间戳。然而,重复通常是数据采集管道中的一个缺陷,可以在那里消除。
时间依赖性
如果您的数据包含与时间相关的数据,就会出现最危险的数据泄漏问题。IMHO 这是最被低估的数据泄露问题,也是很多机器学习项目在实践中失败的原因,尽管它们以前看起来很棒。
实践中的数据泄漏—一个例子
您从 SQL 表创建了一个快照,其中强大的 SQL 语句从您的网站收集了所有要素和标签来预测信用标签。您的数据包含依赖于时间的事件的集合,假设其中一个特性是向客户发送了多少个付款提醒。
你训练你的 ml 模型和工程特征;分数看起来很高,你向你的老板报告了成功。该模型投入使用,因为你在一家数据驱动的公司工作,在那里你实际衡量事情的表现,你会收到一封电子邮件,称在一些测试后,你被告知你的模型根本没有提高信用评分。发生了什么事?
动态数据
你刚刚错过了一个非常重要的数据事实。从数据库中获取数据时,快照是好的,但它不代表进行预测时的数据。您的推断数据与训练数据不匹配。
在这个例子中,支付提醒的数量在预测时间大约为零,并且随着时间的推移而增加。当用户不付费,但游戏已经输了的时候,标签就会改变,在标签改变之前,就已经做出了关于风险的决定。你只是建立了一个 ml 模型,预测已经决定的事情,一个自我实现的预言。
这里的问题是,您无法通过查看数据集本身来发现问题。在非玩具数据集中,你没有完美的干净数据,你可以通过相关性找到这样的问题。您必须确切知道数据集要素的创建位置和时间。为了避免聚合时态数据的这种缺陷,您可以使用与时间序列预测相同的技术,使用滚动窗口方法。不要包含任何在预测时不可用的数据。
顺便说一下,这就是为什么数据科学家应该知道管道是如何建立的,以及数据详细来自哪里。CSV 文件永远不会成为任何 ML 项目的起点,其目的是在实践中进行预测分析。
时间数列预测法
在时间序列预测中,也有很多例子,作者只是应用了训练测试分割或交叉验证,并以很高的准确度预测了股票市场(至少在他们的漏洞设置中),声称他们是一台内置的提款机。
问题是人们倾向于像对待非时间序列数据集一样分割数据集。显然,这是你应该避免的事情,因为你有效地通过未来预测过去,通过未来预测未来,这非常有效。:)在时间序列预测中,使用滑动窗口非常重要,这里提到的方法是。但是还有更多事情要考虑。
预测事件时预测的有用性
在我关于基于点击的意向预测的帖子中,我展示了如何基于点击事件预测客户行为,还提到如果不加以考虑,数据泄露可能是一个巨大的问题。如果我们想更深入地了解会发生什么,这里有一个使用滑动窗口的示例数据点的可视化。
您可以看到一个时间段用于收集用作特征的事件,一个时间段用于查看我们的事件以进行预测,这两个时间段是严格分开的。
它可能发生,有一个重要的事件,发生在标签期开始之前。在这种情况下,我们只有一个非常有限的时间窗口,其中标签被正确分配,但我们的预测将被认为是正确的这个样本。为了克服这个问题,重要的是在每一个时间步长上滑动窗口,并为所有样本训练分类器。
这是首次发表在我的博客这里。
阅读更多关于数据泄漏的实践:
【https://www.datarobot.com/wiki/target-leakage/
https://www.kaggle.com/dansbecker/data-leakage
为了正确评估机器学习模型,必须将可用数据分成训练和测试子集。数据…
conlanscientific.com](https://conlanscientific.com/posts/category/blog/post/avoiding-data-leakage-machine-learning/)
https://mlinproduction.com/data-leakage/
数据素养如何让你在 2020 年成为更好的专业人士
为我们数据驱动的世界做好准备
新的十年标志着理解数据能做什么的终结,以及我们如何利用数据推动创新的开始。公司正在从基本的预测模型转向更强大的学习算法,以获得洞察力并跟上技术的变化。因此,数据素养是在职场中保持竞争力的必要技能。数据素养是从一组给定的数据中做出推断的能力。这包括了解数据的特征以及分析数据所需的工具。人们可能不需要构建下一个 Alexa 或 Siri 然而,每个人都应该能够知道从哪里获取数据,如何分析数据,以及如何获得可操作的结果。
这一要求不仅仅针对初级员工,而是应该成为整个公司的标准。更重要的是,经理、董事和首席执行官要学会“谈论数据”。回想一下电影《金钱球》(Moneyball),它讲述了奥克兰运动家队(由布拉德·皮特饰演)的总经理如何利用数据驱动的决策改变棒球比赛的故事。最有趣的场景之一是皮特扮演的角色与其他教练和球探一起挑选球员。这些人中有许多人已经在棒球行业工作了几十年,所以他们都决定利用他们的行业经验和个人直觉来选择合适的球员。皮特扮演的角色抛出了一个难题,要求他们使用球员数据来做决定。当然,餐桌上的其他人完全反对这个想法,觉得受到了侮辱。
"我们的目标是将数据转化为信息,将信息转化为洞察力."—卡莉·菲奥莉娜(Carly Fiorina),惠普公司前高管、总裁兼董事长
类似上面这种情况在很多场合都会发生——高管们认为个人经验比数据素养或客观解决问题的需要更重要。根据 Qlik 的数据素养指数,93%的企业决策者认为员工具备数据素养很重要,但不到三分之一的人认为数据素养是成功经济的重要因素。随着技术改变我们的世界,开始采取可操作的步骤以确保您在数据驱动的环境中变得舒适非常重要。
掌握数据知识
虽然许多人在“说数据”方面有困难,但有大量的学习资源可以帮助你开始:网站、应用程序、课程和一系列材料。重要的是要记住,没有终极的、单一的资源可以让你精通数据。就像任何外语一样,数据素养是学习和实践的结合,所以不要害怕浏览各种资源。以下是我推荐的一些起点,因为它们帮助我进入了数据世界。根据我的经验,这些建议非常有效,但它们只是开始数据素养之路的许多方法中的几种。
1。学习一门编码语言
有一种普遍的误解,认为编程只适合在大型科技公司工作的人(如亚马逊、苹果、谷歌等)。)或者说对于那些入门级工程师来说。然而,对于那些想要在各自的公司阶梯中获得优势的人来说,编码可能是一个必不可少的重要工具。对编程有基本了解的能力将有助于入门级员工更具竞争力。对于经理级别及以上,它有助于弥合他们和他们的开发人员之间的知识差距——就像船长知道他/她的船如何工作一样。即使有人被说服学习代码,当面对众多可供选择的语言时,他们也会惊慌失措。不要学习最流行的编程语言,重要的是从与你的行业最相关的开始。了解你的领域和公司的需求有助于减少选择的数量。
2。海量开放在线课程(mooc)
如今一切都数字化了,无论你想学什么,都很容易找到在线课程。像 Coursera、edX 和 Udemy 这样的网站提供顶级公司和大学的课程和专业。成千上万的学生可以参加同一个课程,这创造了一个令人惊叹的互动社区。此外,如果你通过了课程,你可以获得一个成绩证书,以显示雇主。有这么多课程或项目可供选择,但最突出的是Udemy 上的数据科学课程 2020、斯坦福大学的机器学习以及哈佛大学的数据科学专业证书。这些程序不仅能让你理解数据,还能教会你如何应用所学的知识。
3。读,读,读
有一些很棒的书籍讨论了数据世界、编程等等。如果你是数据新手,或者你想变得更有数据素养,我推荐你阅读 O'Reilly 的 Data Science from Scratch。它对数据科学的原理进行了很好的概述,甚至教您一点 Python 知识来帮助您开始数据之旅。另一个令人惊奇的读物是威利的《T2 用数据讲故事》。这本书是为任何想学习如何以各种方式表示数据的人准备的。数据可视化是每个人都可以学习的伟大工具,因为它可以检测数据中隐藏的模式。
4。公司赞助的节目
对于那些目前正在工作的人,看看你的公司是否有任何研讨会或在线讲座可以帮助你变得更懂数据。企业正在意识到数据素养的重要性,Gartner的一份报告显示,80%的组织都有数据能力计划来解决数据素养不足的问题。如果你的公司或组织没有,那么你应该创建一个。这突出了你对变得更懂数据的兴趣,并展示了你在工作中带头发起这样一个倡议的决心。
5。开始一个副业项目
即使你能言出必行,你能做到吗?一些专业人士会参加在线课程,阅读有关数据的书籍,但保留所有这些信息的最佳方式是实际使用它们。无论你是在从事一个数据 Viz 项目,一个分析项目,甚至是一个机器学习项目,没有什么比处理数据和理解你所使用的工具的能力和局限性更好的了。像 Kaggle 这样的网站存储了大量不同类别的数据。找一个你喜欢的数据集,开始分析。你永远不知道你会发现什么。
结论
精通数据不会一蹴而就。准备好遇到你从未见过的概念,并且明白如果你不知道也没关系。随着你不断在数据世界中穿梭,你很快就能谈论复杂的话题并领导数据驱动的计划。
了解数据世界中的三条主要路径
medium.com](https://medium.com/datadriveninvestor/is-your-company-hiring-the-right-data-professional-e6e76b822f7e)
参考
[1] 数据素养指数 (2018),Qlik 数据素养计划
[2]C. Pettey,数据和分析领导者如何学习掌握作为第二语言的信息 (2018),更明智地使用 Gartner
数据准备包如何给 ML 建模带来风险
“vtreat”案例研究,一个自动化变量处理包(Python)
Stephanie Harvey 在 Unsplash 上拍摄的照片
真实世界的数据通常是“脏的”或“乱的”构建机器学习(ML)模型的数据科学家会经常遇到数据质量问题,例如“坏”数值(例如None
、NaN
或NA
)、缺失值和高基数分类特征(例如邮政编码)。
任何拥有如此肮脏和混乱的数据集的数据科学家,想要利用他们的 ML 包(如scikit-learn
或xgboost
)来构建最具性能的模型,都必须繁琐地清理数据集并估算缺失值,以获得这些强大包所需的理想格式。
幸运的是,有方便的数据准备(也称为数据准备)包来自动化和简化数据清理和数据质量处理。这些包为数据科学工作流的平滑 UX 提供了很好的 API。然而,尽管某些包似乎为数据准备问题提供了很好的“一行程序”解决方案,但正如俗话所说,天下没有免费的午餐。在数据准备的某些边缘情况下,实际上,您可能会给模型带来新的风险,例如过度拟合或目标泄漏(也称为数据泄漏)。
以下是 Win Vector LLC 的 John Mount 博士和 Nina Zumel 博士创建的一个名为vtreat
[1]的数据准备包的简要案例研究。vtreat
除了有研究出版物[3]之外,还有 R 和 Python 版本。本文将关注 Python 包[4]。
vtreat 是做什么的,我应该如何使用它?
正如作者所描述的,vtreat
是一个“数据框架处理器/调节器,它以统计上合理的方式为预测建模准备真实世界的数据。”vtreat
的高层次目标是“忠实可靠地将数据转换成完全是数字的、没有丢失值的现成 ML 数据帧。”vtreat
包含的具体数据质量处理方法有:
- 修复错误/丢失的数值
- 将分类级别编码为指标
- 管理高基数分类变量(也称为“影响编码”)
“影响编码”的最后一种方法(Kagglers 可能称之为“目标编码”)可能特别有用,因为它将具有许多级别的分类变量转换为信息性的数字特征。简而言之,它是通过首先获得所有行的目标变量的全局平均值(因此称为“目标编码”)来计算的,然后根据该全局平均值检查给定分类变量的目标值,从而得到分类变量的“数字影响值”。这保留了来自原始变量的大量预测信息,同时计算效率高。因此,让我们来看看如何正确地使用“影响编码”。
熟悉相关 ML 包中的.fit()
和.transform()
方法的数据科学家可以通过以下方式使用vtreat
创建准备好的数据帧,然后用于建模:
import vtreat
transform = vtreat.BinomialOutcomeTreatment(outcome_target=’y’)
df_prepared = transform.fit(df_train, df[‘y’]).transform(df_train)
小心点。这是vtreat
的幼稚用法,因为影响编码需要知道结果是什么 才能生成“影响值”。拟合到该准备好的数据框架的结果模型可能导致不期望的模型偏差,基本上模型过度拟合到影响编码变量。
为了避免这一点,正如vtreat
的作者在他们的文档中仔细描述的那样,留出完整数据集的一个分区(即维持/校准集)用于影响编码非常重要,然后在训练分区上运行“校准的影响编码器”以准备数据,接着将模型拟合到最终准备的数据帧。下图说明了如何正确使用带有维持/校准设置的vtreat
:
import vtreat
transform = vtreat.BinomialOutcomeTreatment(outcome_target='y')
df_prepared = transform.fit(df_train_holdout, df['y']) \
.transform(df_train_model)
此外,作者通过利用他们称为“交叉框架”5的新技术,确保使用正确的交叉验证方法。最后,作者推荐使用vtreat
为 ML 建模准备数据时,使用内置护栏方法.fit_transform()
的调用模式如下:
import vtreat
transform = vtreat.BinomialOutcomeTreatment(outcome_target='y')
df_prepared = transform.fit_transform(df, df['y'])
产生的数据帧完全是数字的,同时尽可能多地保留来自训练变量的相关建模信息。这使得数据科学家可以使用任何现成的 ML 包,并快速构建可能比仅使用原始数据集更精确的模型。
你信任你的数据准备吗?
毕竟,vtreat
通过自动准备用于建模的结构化纯数字数据框架,帮助数据科学家节省了大量时间和精力。让我们在一个示例数据集上对此进行测试,其中要预测的目标变量是制造商机器的销售价格。
已经精选的信息特征的原始数据集有 57 列。在通过vtreat
运行数据集并指定NumericOutcomeTreatment()
方法之后,准备好的 dataframe 最终拥有超过 230 列。我构建了两个 AutoML 项目,一个使用原始数据集,另一个使用vtreat
-prepped 数据集;前者导致 R2 拒绝得分约为 0.91,而后者导致 R2 拒绝得分约为 0.86。也就是说,对于这个特定的示例数据集,准备的数据集给出了较差的模型拟合分数。
鸣谢:使用的 AutoML 工具是 DataRobot 平台,它带有内置的预处理和特征工程。
准备好的数据集以更差的模型拟合分数结束的一些原因可能是由于对影响编码变量的一些可能的过度拟合(尽管使用了内置的.fit_transform()
方法)、从现有泄漏中新引入的目标泄漏或冗余生成的特征。
总之,作者和我都强烈建议数据科学家们不要轻易动手,不仅要调查底层的原始数据,还要调查来自数据准备包的准备好的数据。您必须始终注意数据的上下文,包括数据来源和预测数据的应用方式,尤其是在模型将用于现实世界的情况下。
参考
- https://github.com/WinVector/vtreat
- https://win-vector.com/
- 新泽西州祖梅尔和新泽西州芒特(2016 年)。vtreat:用于预测建模的数据帧处理器。 arXiv:应用。(https://arxiv.org/abs/1611.09477)
- https://pypi.org/project/vtreat/
- https://cran . r-project . org/web/packages/vtreat/vignettes/vtreat crossframes . html
数据科学+人工智能如何帮助抵御衰退
数据科学+人工智能为我们提供了所需的工具,以推动苦苦挣扎的经济增长数十亿美元
2020 年第一季度,美国的国内生产总值收缩了 4.8%。自 2008-2009 年次贷危机以来,还没有出现过如此严重的衰退。如果本季度经济再次收缩,美国将正式进入衰退。
尽管网上购物激增 14.8%,但整个季度消费者总支出呈下降趋势,三月份下降了 7.5%。
是的,美国政府批准的数万亿美元刺激计划将提振消费者支出。第二个法案,被称为英雄法案,如果通过的话也将会通过。
虽然数据科学和人工智能有许多方式可以帮助提振经济,但在本文中,我们将只关注其中一种。
2018 年,美国经济因“缩水”损失了 468 亿美元:公司因错误(错误定价等行政错误)、产品损失(库存控制不力)、盗窃(商店扒手和员工)和欺诈而核销的库存。同年,全球经济萎缩造成的总经济损失约为 1000 亿美元。
零售商敏锐地意识到这个问题,绝大多数零售商都有团队,他们的唯一职能是防止损失(最大限度地减少缩水)。这些零售商中技术最先进的,包括 Target ,已经将包括面部识别在内的人工智能(也称为数字监控)作为其战略的一部分。
数字监控是一个有争议的话题。5 月 7 日,谷歌在 2015 年成立的 Sidewalk Labs,停止了其在多伦多的 12 英亩滨水智能城市项目,拉里·佩奇表示,该项目“开发和孵化城市技术,以解决生活成本、高效交通和能源使用等问题”。这个项目是加拿大公民自由协会诉讼的目标,声称开发计划超越了数据隐私和监视的界限。虽然这起诉讼不是 Sidewalk Labs 中止该项目的原因,但许多数据隐私倡导者认为,在多年来激烈批评这项开发后,它的中止是一次胜利。
另一方面,亚马逊的零售业务 Amazon Go 尽管利用了类似的面部识别和人工智能功能,但仍然广受欢迎。亚马逊 Go 商店允许顾客简单地走进去,在他们的手机上打开一个应用程序,拿走他们想要购买的任何商品,然后离开。数字监控使顾客避免排队结账和不准确的收费成为可能。
回到苦苦挣扎的全球经济……Amazon Go 的成功表明,当数字监控遵守美国前首席数据科学家 D.J. Patil 和 Fast Forward Labs 创始人希拉里·梅森(Hilary Mason)建立的道德数据科学的5c(同意、清晰、一致、控制&透明和后果&伤害)时,它是受欢迎的。
虽然外出购物的消费者越来越少,但数字监控的潜在好处不仅限于店面;它可以帮助企业减少供应链和管理职能的缩减。
例如,如果员工不小心将错误的数字输入到库存管理或定价系统中,算法可以提示他或她预期的值范围,并要求员工确认输入是否在预测范围之外。如果使用计算机视觉来跟踪仓库中的箱子,当可销售的存货被意外地放置在为等待处理的运输中损坏的物品指定的区域时,它可以通知主管。在这两种情况下,数据科学和人工智能都有助于员工以征得同意和完全透明的方式更好地完成工作。
将道德数字监控应用于 1000 亿美元以上的全球减少缩水的机会,最有可能将钱放进消费者的口袋,因为聪明的零售商将他们的缩水储蓄传递给消费者,他们知道在线购物的增加会导致更频繁的比较购物。许多聪明的零售商通过牺牲短期利润,在市中心扩大长期市场份额,熟练地度过了多次衰退。
回到数字上来——记住,2018 年,美国零售商因萎缩总共损失了 468 亿美元。随着年国内生产总值超过 21 万亿美元,仅仅解决经济萎缩不会阻止衰退,但会有所帮助。
想要更多关于数据科学+人工智能如何帮助抵御衰退的文章吗?对题目有想法?分享这篇文章和/或给我留言!
数据科学和人工智能如何改变超市购物
大零售+大数据
超市是大企业,他们大规模使用数据。超市起源于 20 世纪 30 年代的美国,后来逐渐占据了零售和杂货市场越来越大的份额。像沃尔玛、阿尔迪和家乐福这样的巨头是世界上最大的零售商,收入接近数千亿美元。因此,许多人在大数据上投入了大量资金,分析和数据科学成为他们决策的核心部分。
购买的每件产品及其价格都被记录在庞大的数据库中,其中的表格超过了数千亿行。忠诚度计划允许公司将客户的整个交易历史缝合在一起,获得比孤立地查看购物篮更多的洞察力。在忠诚度计划中,客户通过每次购买扫描他们的会员卡来积累积分。这些数据的丰富性为整个组织提供了多方面的价值,下面将介绍几个例子。
排列
超市货架是抢手货。每个通道的每一平方英寸每年都可能价值数千美元,超市竭尽全力确保不会浪费在性能不佳的产品上。但是“表现良好”并不像挑选销量最高或利润最高的产品那样简单。如果是的话,整个商店就只有牛奶和香蕉了。你必须迎合所有来到你店里的不同顾客,以及驱使他们进门的不同餐点和“任务”。
例如,一种特定的调味品可能不是超级畅销品,但如果它对老年人群很重要,那么把它从货架上撤下来可能会迫使他们去别处购物。另外,想象一下有人打算今晚做墨西哥卷饼。如果他们能买到你店里的大部分原料,但你不卖玉米饼,他们可能会把所有的潜在收入留给竞争对手。
与此同时,多样化的产品系列需要花钱。除了上述货架不动产,还有管理大量不同产品的复杂物流。你必须能够将产品从供应商处运送到配送中心,再到超市,再到过道,“及时”到达,这样货架上的可用库存既不会溢出,也不会用完。更多的产品意味着需要管理更多的供应线,而作为缓冲的库存更少。每个产品系列也增加了超市和供应商之间昂贵的合同谈判的工作量,比如价格、促销、供应水平和广告支出。
如果你去过像 Aldi 这样的廉价超市,你会注意到他们通常对每种产品类型的选择较少,但在商店里保持较高的库存水平。这恰恰是为了削减上述成本,在降低质量之前,以牺牲选择为代价降低价格。
这一切构成了一个非常复杂的优化问题,数据科学在其中扮演着关键角色。我们会定期根据一些标准对产品进行评估,例如销售额、盈利能力、购买产品的客户数量以及这些客户在产品不促销时对产品的忠诚度。根据产品系列变化的过去示例训练的机器学习模型可用于预测客户未来将如何对提议的变化做出反应。通过考虑商店特征,如规模、当地人口统计数据和与竞争对手的接近程度,可以逐个商店地优化产品系列。
例如,想象一罐不起眼的金枪鱼罐头。它和许多其他金枪鱼罐头一起放在架子上,有不同的味道、品牌、价位和包装尺寸。如果你把它从商店里拿走,大多数寻找它的人可能会简单地转向另一种罐装金枪鱼产品。一小部分人可能会推迟购买或去别处购买。对于拥有高度忠诚客户群的产品,比如罐装可口可乐,这种情况会有所不同。
所有这些数据分析和建模有助于商场品类经理定期评估其产品系列的有效性,优化效率,同时努力让顾客满意。
定价
价格弹性是对产品需求相对于价格变化的一种度量。简单地说,东西越便宜,人们就会越想买它(有些例外)。给产品定价好意味着通过平衡每包产品的利润和售出的数量,找到弹性曲线上能带来最大利润的点。
当你在等式中引入竞争产品时,事情变得有点复杂。如果你降低可口可乐的价格,它的销量会上升,但也会对百事可乐的销量产生负面影响。这引入了交叉价格弹性的概念,它在一个价格“景观”内模拟消费者的选择。必须在产品类别的背景下有效地校准价格,既要最大化整体利润,又要给客户一个清晰的价值描述。金凤花定价法,即有一个好的选择,一个更好的选择和一个最好的选择,是非常常见的,通过仔细的建模来确定产品之间的精确价格差距。
对于新鲜农产品,这个等式有点不同。水果和蔬菜提前几个月种植,不能按订单收割。庄稼是根据一年的时间和天气来采摘的。一旦它们离开农民的田地,在它们离开之前把它们放到货架上并通过收银台是一场与时间的赛跑。对于超市来说,这意味着预测该周的最佳销售价格,同时实现利润最大化。如果本周从葡萄藤上摘下 200 万个西红柿,那么我们需要卖出 200 万个西红柿。定价太低,就会错失良机,随之而来的就是空架子。定价太高,你最终会得到一堆烂番茄(或者至少你会在周末大打折扣,抹去你所有的利润)。
促销
通常有三种主要的促销方式:
- X%折扣—通常旨在鼓励人们尝试新事物或转向通常更昂贵的产品。这在短期内推动了销售,但人们希望这些客户中的一些人能够在长期内改变他们的行为,使他们成为更有价值的客户。
- 3 两个价格(或 X 代表 Y 美元)——“多次购买”旨在增加产品/类别的篮子大小和现有客户的价值。通过给顾客送去更多的库存,你试图提前潜在的未来购买量,并潜在地提高顾客的消费率。例如,如果一位顾客两周买一次 3 美元的巧克力,但利用了“两块 5 美元”的促销活动。他们可能会在下一次购买前等待四周(食品储藏室的存货),但他们也可能会吃两倍的巧克力,从而改变他们的行为,并随着时间的推移潜在地变得更有价值。
- 天天低价——旨在与竞争超市的价格进行比较,从而吸引人们进入商店。例如,如果尿布在你的超市里总是比较便宜,那么许多年幼儿童的父母会在你的商店里做他们的整个商店,带来数百美元的相关收入。
在选择策略时,可以使用参照历史促销的交叉价格弹性模型,并为我们预期的促销效果设定基准。这也可以告知促销的深度、频率以及哪些产品不应该一起促销。
根据促销的最初目标来衡量促销的效果是很重要的,以确保你不只是把钱给了那些无论如何都会购买这些产品的人。
个性化
几年前,促销活动仅通过广播媒体或每周目录做广告。这两种策略既昂贵又笼统——尽管进店的顾客千差万别,但你只能传达一种信息。数据科学通过向用户收件箱发送个性化信息改变了这一切。
澳大利亚的 Woolworths 每周向其数百万忠诚卡会员发送营销电子邮件。每一款都基于一个庞大的模型进行个性化定制,该模型包含每位顾客的数百万项功能。该模型不仅会突出显示该周最大的促销活动,还会考虑客户之前的购买行为,包括他们购买特定商品的时间长度。这意味着信息不仅与顾客的口味相关,而且它的建议很可能与他们本周用完的东西有关。通过提供这种个性化的信息,顾客关注并进入商店购物的可能性大大增加。
新产品
决定如何给已经上市多年的产品定价、促销和定位已经够困难的了,但是当一个产品是新产品时,挑战就更大了。新产品需要在 R&D、测试、认证、生产能力和营销方面进行大量前期投资。如果它们卖得好,将会得到数倍的回报。如果他们失败了,那就是一大笔钱打水漂了。
了解市场并试图找到差距是市场研究的范围。通过调查和焦点小组收集的定性数据与来自其他市场的定量数据相结合,以确定潜在的新产品并估计(通过一些广泛的假设)机会的大小。来自超市本身的数据可以用来填充图片,通过查看客户对竞争对手产品的忠诚度,该类别对促销的敏感程度以及新产品发布在过去的表现。一旦产品投放市场,它就以其他新产品的进展为基准,根据自己的特殊属性和促销时间表进行调整。这有助于供应商和超市更早地决定是继续生产还是减少损失。
未来?
虽然超市已经是数据科学和人工智能的大用户,但有许多有趣的概念可能在未来几年变得更加主流。
ilja Freiberg 在 Unsplash 上拍摄的照片
目前形式的客户跟踪并不完美。使用忠诚卡来识别顾客会让你的“已识别顾客”偏向那些更节俭的人。使用信用卡信息在某种程度上增加了这一点,但即使这样,人们经常使用多张卡,并可能使用他们的合作伙伴的卡。还有一个问题是,如果有人进入商店,但没有购买就离开,他们的访问是没有记录的(这在服装零售商而不是超市中更是一个问题)。面部识别技术和蓝牙信标试图填补这些空白,甚至提供人们如何在商店走动的数据。拥有关于一个人走过什么、在什么地方停留以及在商店逗留多长时间的数据,将进一步改善商店的布局和店内促销的有效性。显然,这项技术存在重大的伦理问题,尽管这可能会减缓其推广,至少在西方是如此。
自从几年前第一家 Amazon Go 在西雅图开业以来,免费结账商店一直是一个主要的话题。顾客只需从货架上拿走他们想要的商品,然后走出门去。商品在离开货架时会被 RFID 跟踪,付款会通过客户手机上的应用程序自动进行。减少购物时间可以以更低的运营成本实现更频繁、更冲动的购物。
定制定价/促销也是一种有趣的可能性。不同的客户有不同的预算,对产品有不同的评价。能够在特定的产品上给特定的顾客打折,使得超市能够非常有效地促销产品,而不是简单地把钱给那些无论如何都会购买的人。一些超市已经这样做了,但他们不是用钱来奖励顾客,而是用忠诚度积分来奖励他们。这有双重好处,给顾客打折,但确保他们在超市的忠诚度生态系统内消费他们“节省”的钱。
结构干净,但实际上很乱
与许多其他来源的数据相比,使用超市数据简直是做梦。这是一个令人难以置信的高容量,每周有数千到数百万笔交易,因此您可以测量非常小的影响,并且具有高度的统计显著性。大多数超市都有数据工程师团队来完成所有的技术整合工作,所以当它到达数据科学家手中时,它是干净、简洁和全面的。
但是,研究一个数据集的复杂性可能会令人难以承受,这个数据集涉及数百家商店中数以万计的产品,被数百万计的客户购买了数十亿次。没有两个星期是完全相同的——想想复活节(每年都要搬家)、圣诞节是星期几、公共假日、产品系列的变化、产品短缺、季节性、天气和更广泛的经济条件。更别提全球流行病了!尽管如此,超市数据是了解整个社会人们生活的丰富多样的窗口,也是我非常喜欢使用的东西。上面的列表远非详尽,不同的零售商或多或少地使用数据。但在 21 世纪,精通数据是超市竞争的关键。
数据科学如何帮助企业
当你是一个数据科学家时,像一个商人一样思考是不容易的。这里有一些建议。
汤姆·利什曼摄于佩克斯
数据科学家通常接受培训来衡量一项研究或一种数学技术的价值。我们阅读和撰写论文、报告、论文,并评估所提出的方法对于解决特定问题是否合理和有用。有时这项技术是如此的吸引人和迷人,以至于我们想要探索它只是因为…
数据科学家很好奇!
好奇心是有益的,但(主要)我们不是在从事科学事业,我们是在为事业做科学。
在学术界,我们投资研究以扩展该领域的知识。我们为人类谋福利。在行业中,我们更好地为企业服务。如果你对帮助雇主获利感到不安,你应该要么在学术界工作,要么另谋高就——一份你相信你的努力会为更伟大的事业服务的工作。尽管如此,你仍然应该为公司的发展做出贡献。
但是,如何改变我们的思维模式以适应业务需求呢?
不幸的是,我没有一步一步的指南来教数据科学家如何“思考业务”。然而,我们需要锻炼这种技能来增长商业肌肉。
我做的一个练习是在企业中设身处地为别人着想。这是一个研究其他领域(如金融、营销)并想象数据科学如何有所帮助的机会。例如,今天,我将讨论数据科学如何与 营销组合 保持一致。
我显然不是营销专家。然而,即使你只探索了一个知识领域的表面,它已经给了你一个新的世界观。如果你想开发和深入,和你公司的专家谈谈,他们会指导你。
我最喜欢的一堂营销课(早在大学时)是关于营销的 P。我读书的时候他们 4 岁,现在 7 岁。也许当你读到这里的时候,他们已经 9 岁了。
我最喜欢的 P s 以及它们与数据科学的关系如下:
1.产品
产品(产品可以是服务)是企业的核心要素。没有产品,就没有生意。
根据产品的不同,数据科学在产品设计中的作用可能会有很大的不同。然而,这通常意味着你将与工程团队、产品设计师或建筑师密切合作。如果你认为数据科学本质上不是产品的一部分(例如,该公司销售搅拌机),你可能想知道如何才能帮助业务。下面我列出了一些你可以问自己的问题:
- 我们能否通过部署实验的统计设计来构建更有价值的产品?
- 我们能否通过对客户进行 A/B 测试来决定我们产品的最佳更新?
- 通过预测一条信息,产品会更有价值吗?
- 通过检测模式,产品会更有价值吗?
- 如果产品随着时间的推移学到一些东西,它会更有价值吗?
如果其中一个问题的答案对你来说很清楚,这意味着你有一个数据科学的任务要完成!
此外,不要忘记,有时,一个优雅的科学解决方案可能在经济上不可行或不划算。我们总是需要推理你引入的成本是否会使产品更有利可图。如果你没有让产品变得更便宜,你应该让商家相信会有更多的人愿意购买。
考虑投资回报(ROI ),确保它具有吸引力。
2.价格
使用数据科学来支持价格策略通常意味着您将与营销和财务团队合作。我们很容易想到确定价格的两个基本方面:制造(或提供)产品的成本,包括公司为组成产品的单个组件支付的价格;以及客户愿意支付多少(客户感知价值)。
从成本角度来看,数据科学家可以预测未来的组件价格,以更好地估计未来的利润。例如,随着时间的推移,电子元件往往会变得更便宜。因此,人们可能愿意在产品上市时获得较少的利润,以最大限度地缩短上市时间,只要他们相信利润率会很快增长。
从顾客的角度来看,没有市场调查的结果,很难估计产品的感知价值。但是,如果您有销售的历史数据,您可以研究类似的产品或创建推荐系统,以更具吸引力的价格提供产品捆绑。
另一个选择(如果企业在价格方面有灵活性),您可以进行 A/B 测试。如果您担心按客户划分测试可能不公平(因为部分客户会有更好的价格),您可以按时间划分。请不要忘记,在分析过程中,您会按细分市场评估客户,因为他们可能有不同的特征。一个简单的选择是根据客户的新近度、频率和货币( RFM )特征对客户进行分类。
3.地方
我想不出一个具体的数据科学实验来帮助最佳位置策略。最简单的方法是根据历史数据研究与客户联系的最佳渠道(或物理位置)。然而,这项业务的受众应该是众所周知的。另外,这里面没有多少科学。也许我漏掉了什么。
数字频道的另一个有趣的机会是人工智能的使用。个人认为,大部分 AI 系统还有很多需要改进的地方。我发现所有通过电话或聊天与机器人的互动都很烦人。然而,如果人工智能系统能够通过给定的渠道改善用户与产品或服务的交互体验,那绝对是一个游戏规则的改变者。
4.促进
为了有助于广告和促销,可能有必要结合多种信息来源。使用来自历史销售(或其他类型的参与)和客户档案(偏好、生活方式等)的数据。),就有可能搜索到最好的公众来进行广告宣传。这与一个被称为行为(数据)科学的新兴话题有关。
主要想法是吸引有更高概率购买产品或服务的人。去吧。试着预测谁会是你的下一个顾客。
如果你还和我在一起,你就是数据英雄!感谢您的宝贵时间,请留下您的评论,尤其是如果您有自己的策略来增强自己的商业实力。如果您希望在电子邮件中收到更多数据科学建议和一般极客文化内容,我很乐意在我的简讯中看到您。
数据科学如何助推网飞
当有效使用时,数据可以神奇的方式改变您的业务,并将它带到新的高度。
“如果星巴克的秘密是当你拿到拿铁咖啡时的一个微笑…我们的秘密是网站适应了个人的口味。”
- 【雷德·哈斯汀斯】 (网飞 CEO)
在过去的几年里,网飞已经成为那些想要疯狂观看电影和电视节目的观众事实上的目的地。
去年,网飞宣布在全球范围内签约了 1 . 35 亿付费用户。仅在 2019 年,网飞就通过在观众方便的时候提供一些顶级内容,比多赚了一点点 。
从最初的一个 DVD 租赁平台 开始,这个超级媒体提供商巨头成功的主要因素之一是其对大数据的底层使用。
网飞的 成功背后的技术是大数据 ,它能够处理非常大的数据集,这是有意义的,因为网飞不仅处理内容,还处理大量相关的元数据。
数据科学的重要性
“哪里有数据硝烟,哪里就有生意火。”
—托马斯·莱德曼
数据科学在大多数在线服务中扮演着如此重要的角色,不仅有助于吸引更多客户,还能让现有客户满意。
原因在于,有了数据科学,你就能以图形和图表的形式更真实地了解你的消费者的喜好,这些图形和图表不仅仅是一个指标,而是几个指标。
这一重要信息有助于你以一种独特的方式塑造你的产品和服务,吸引客户来到你的平台。
数据真正推动了我们所做的一切。杰夫·韦纳
像网飞这样拥有海量数据的公司,充分利用这些数据总是明智的决定。通过整合数据分析、机器学习、统计和深度学习等概念,数据科学不仅可以帮助网飞,还可以帮助任何行业的任何企业实现指数级增长。
网飞商业模式
“我创立了网飞。我已经稳步发展了 12 年,首先是 DVD 在 2002 年开始盈利,这是一场与 Blockbuster 的激烈竞争,并使公司朝着流媒体方向发展。”
——雷德·哈斯汀斯
从表面上看,网飞的商业模式似乎非常简单。你购买订阅,网飞会给你大量无广告的高质量内容供你尽情享用。
但并不总是这样。早在 1998 年 【网飞】开始的时候 他们就出租甚至 出售内容 的 DVD 拷贝邮寄过来。
****后来在上,他们又包括了 蓝光光盘随车 DVD s ,不过是在 2010 那一年他们跳进了 数字流媒体场景 ,从 加拿大 开始。
****从那以后,网飞一直处于为一系列设备管理、传输甚至制作媒体的最前沿。像任何其他公司一样,网飞多年来一直专注于通过举办竞赛和黑客日来优化其效率,以寻求绩效的提高。
每个有手机的人都有一个屏幕,可以上网。这是我们的目标市场。世界的品味,世界的时间,是我们所追求的。
——雷德·哈斯汀斯
一些关于网飞的有趣事实
- 尽管竞争更加激烈,网飞在 2020 年仍然拥有最多的用户
- 6000 万美国成年人订阅了网飞
- 该公司比大多数用户意识到的要老
- 由于密码和账户共享,41%的网飞用户可以免费观看
- 网飞是首批在不同设备上作为应用程序提供的流媒体服务之一
《网飞之美》将于 10 月 28 日上映。他们按下一个按钮,这部电影将同时在 190 个国家以 17 种语言上映。
网飞如何使用大数据
考虑到网飞从事流媒体业务的时间,它已经积累了大量关于其观众的数据,例如他们的年龄、性别、地点、对媒体的品味等等。
通过收集每一次客户互动的信息,网飞可以直接进入观众的大脑,甚至在他们完成一个节目或电影之前,就知道他们接下来想看什么。
我们有数据表明,根据星期几、时间、设备,有时甚至是位置的不同,会有不同的观看行为。
——雷德·哈斯汀斯
网飞拥有超过 1.4 亿用户的庞大用户群。以下是网飞追踪的一些衡量标准,让每个人都有自己的品味
- 你哪天看内容
- 你什么时候看内容
- 观看内容的设备
- 内容的性质如何
- 平台上的搜索
- 被重新观看的部分内容
- 内容是否暂停、倒带或快进
- 用户位置数据
- 当你离开内容
- 用户给出的评级
- 浏览和滚动行为
****随着时间的推移,网飞已经部署了几种算法和机制,它们利用这些数据并产生关键的见解,帮助公司朝着正确的方向前进。这些工具和功能包括:
● 近实时推荐引擎
****有了海量的用户,每个用户每天都会根据他们观看、搜索和添加到他们的观察列表中的内容生成数百个评级,这些数据最终会成为大数据的一部分。网飞存储了所有这些信息,并使用关键的机器学习算法,建立了一个表明观众口味的模式。这种模式可能永远不会与另一个观众匹配,因为每个人的品味都是独一无二的。
根据收视率,网飞对其媒体进行分类,并向观众建议推荐系统认为他们接下来可能喜欢看的节目。****
海绵宝宝的电视爆米花 GIF(来源)
网飞会知道一切。当一个人停止看电视时,网飞会知道的。他们有自己的算法,知道这个人看了五分钟的节目,然后就停下来了。根据他们的历史,他们可以通过行为和一天中的时间来判断他们会回来。
——米切尔·胡尔韦兹
近实时推荐引擎( 来源 )
● 艺术品&图像选择
有没有想过为什么网飞会为一部电视剧或电影展示多件艺术品?
这背后的工具被称为 AVA ,它本质上是一种算法,选择什么艺术品和图像给谁看。美学视觉分析的缩写,AVA 筛选每一个可用的视频,并确定最适合用作艺术品的帧。
AVA 在最终确定图像之前会考虑很多指标,比如演员的面部表情、场景照明、感兴趣的区域、主题在屏幕上的位置。它甚至对艺术品进行分类和排序,以展示给分成几个口味组的用户。
我关注网飞。
——法米克·詹森
● 生产计划
当创作者想出一个关于新节目或电影的想法时,数据发挥了不可或缺的作用。在任何东西写在纸上之前,都要进行大量的头脑风暴,这就是数据的来源。
凭借之前创建新内容和原创内容的经验以及关于观众如何看待之前内容的大量数据,大数据有助于为规划阶段面临的许多挑战提供可能的解决方案。
这些挑战可能包括确定拍摄地点、拍摄时间和日期等等。即使使用简单的预测模型,网飞也可以节省大量的规划工作,从而进一步降低费用。
网飞正在委托原创内容,因为它比人们先知道他们想要什么。
-《纽约时报》
David Sager 在 Unsplash 上拍摄的照片
● 元流
网飞有开源的 Metaflow,这是他们的云原生的、以人为中心的框架,旨在提高数据科学家的生产力。
Metaflow 背后的想法是将数据科学家的关注点从担心模型的基础设施转移到解决问题上。Metaflow 通过提供一组微调功能,让他们可以自由地试验自己的想法,这几乎让 Metaflow 感觉像一个即插即用的框架。元流的几个值得注意的特性是:
●能够在分布式计算平台上工作
●为版本控制和试验拍摄代码和数据快照的选项
●高速高性能 S3 客户端
●支持大多数机器学习框架
元流——一个简单的 Python 库( source )
● Polynote
由网飞开发并开源,Polynote 是一个多语言笔记本,具有对 Scala 和其他各种特性的支持。对于数据科学家和机器学习研究人员来说,Polynote 允许基于 JVM 的机器学习平台与 Python 的平滑集成。这款笔记本的几个亮点是:
●深入了解内核状态和执行中的任务
●提供简单的依赖性和配置管理
●提供类似 IDE 的功能,如自动完成、错误突出显示、再现性、编辑、改进、可见性、数据可视化等。
● M etacat
网飞运营的巨大数据池分布在多个平台上,比如亚马逊 S3** 、德鲁伊、红移和 MySql 等等。为了维护这些数据存储之间的无缝互操作性,网飞需要一种服务。**
对简单性的需求催生了 Metacat,它的唯一目的是为所有数据存储提供集中的元数据访问。网飞创建元流的目的是服务于以下核心目标:
●统一并提供元数据系统的集中视图
●为平台数据集元数据提供单一 API
●为数据集的业务和用户元数据存储提供解决方案
● 德鲁伊
“Apache Druid 是一个高性能的实时分析数据库。它专为快速查询和接收非常重要的工作流而设计。Druid 擅长即时数据可见性、即席查询、运营分析和处理高并发性。”
—德鲁伊.伊奥
网飞使用阿帕奇德鲁伊来确保它的用户每次都能获得高质量的用户体验。每次都提供顶级的用户体验不是一件简单的事情。它需要对几个事件进行持续的分析,收集必要的数据并进行分析。这些数据可以是任何东西,从回放信息到设备信息,到测量平台性能等等。所有这些事件度量使原始数据变得复杂,这就是 Druid 发挥作用的地方。
Druid 的任务是提供对数据库的实时分析,在这些数据库中,查询在不确定的时间段定期执行。它具有高度可扩展性,可为任何给定的工作负载提供出色的性能。
●Python 的使用****
网飞喜欢 Python,因为它非常强大,当与库结合时,它变得非常优秀,更不用说它与其他平台的集成是多么流畅。网飞使用 Python 来管理其一系列关键任务,例如:
●管理 CDN 基础设施的应用
●分析运营数据、交通分布和运营效率
●原型可视化工具
●通过统计工具、数据探索和清理获得洞察力
●用于维护信息安全
●使用 Jupyter 笔记本电脑管理多个核心任务
●对于使用 A/B 测试的实验
结论
大数据不仅在决定网飞的运转方面发挥着关键作用,还为他们提供了新的发展机遇。新技术通常会带来一些问题,但在网飞,他们一直在通过听取社区意见来正面解决这些问题。通过向社区开源几个库和框架,网飞的目标不仅仅是改善自己,也是改善其他公司。最后,说网飞基于大数据洞察力做出所有决策是不正确的,因为他们仍然依赖于许多人的人工输入。
更多有趣的阅读—
我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [## 2020 年人工智能工程师的顶级编程语言
从几种编程语言中,人工智能工程师和科学家可以挑选出适合他们需要的语言
towardsdatascience.com](/top-programming-languages-for-ai-engineers-in-2020-33a9f16a80b0) [## 机器学习和深度学习的最佳 Python 库
现代机器学习模型和项目的 Python 库
towardsdatascience.com](/best-python-libraries-for-machine-learning-and-deep-learning-b0bd40c7e8c) [## 选择 PyTorch 进行深度学习的理由
PyTorch 可以为深度学习程序员提供很多东西
towardsdatascience.com](/reasons-to-choose-pytorch-for-deep-learning-c087e031eaca) [## 数据科学家的最佳数据科学工具
数据科学工具,使任务可以实现
towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88)
关于作者
克莱尔 D 。是Digitalogy—的内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。在LinkedinTwitterinsta gram上连接 Digitalogy 。**
数据科学如何改造疾病监测系统
在意大利电晕关闭期间,大多数商店和所有学校仍然关闭。(图片:Getty Images)
数据科学技术,如人工智能,或者更具体地说,机器学习,已经推动了一系列行业的显著转变。在广泛探索使用 ML 的许多领域中,由于患者数据可用性的爆炸式增长,其在医疗保健领域的应用正在见证革命性的发展。虽然没有算法可以取代人类触摸的温暖和强调医患关系的同情,但有前途的数据科学技术肯定可以通过提供对诊断和治疗过程的见解来补充医疗和保健人员的努力,从而有助于改善结果和增强患者护理。从微软利用计算机视觉进行医学图像诊断工具的 InnerEye 到 Alexa 进军家庭患者慢性病护理,我们一定会见证从诊断-治疗模式到预测-预防模式的决定性转变,这将减少成本和患者痛苦。因此,ReportLinker 预测“医疗保健人工智能”市场规模将从 2018 年的 21 亿美元飙升至 2025 年的 361 亿美元,CAGR 将达到 50.2%,这一预测并不令人惊讶。
虽然数据科学在许多方面都在帮助从业者、患者和决策者,但这篇文章将特别深入探讨我们如何应对和防御流行病(和大流行!)可以使用数据支持的工具来预测/临近预报疾病动态。
疾病传播的监测、建模和预测
在我们日益缩小的世界中,由于全球旅行、城市化和气候变化的增加,传染病的威胁比以往任何时候都更加严重。传染病每年夺去 1700 多万人的生命。但是,疾病传播快,知识传播更快!使用数据科学工具,可以利用现代技术的巨大数据生成能力来深入了解实时疾病监测,从而预测疾病传播。跟踪和预测传染病爆发的动态对于关于医疗资源分配的决策以及关于选择和实施适当干预以最小化发病率和死亡率的公共政策是非常有用的。
方法
我们在这里处理的基本上是一种特定疾病在一段时间内的趋势或“时间序列数据”。我们在疫情表现出显著活跃的历史时期对疫情进行建模,并对当前或未来潜在死灰复燃的时期对疫情进行监控。其实时预测(对实时发生的病例数的估计)或预测估计有助于公共政策的重要指标包括:
1.每日/每周案例计数
2.峰值计时
3.(代表病例数的曲线的)峰高
4.爆发持续时间和规模
此外,我们的目标变量(每小时/每天/每周/每月)的粒度将取决于可用输入数据的粒度。例如,如果我们有每月的数据点,我们的目标预测就不能是更低的粒度,比如每周。然而,需要注意的一点是,数据越精细,我们对其分析和解释的控制就越强,从而可以更好地了解疫情的动态。
一些模型试图将空间数据与时间数据结合起来。这主要是通过根据地理区域划分数据来实现的,从城市和地区到国家或纬度范围。这是有道理的,特别是在大流行的情况下,因为不同地区和居住在那里的人口的特殊性可能在疫情的动态中发挥重要作用。在空间-时间分析的情况下,上述目标参数也是为每个区域单独估计的,有时是通过用特定地理部分的数据对模型进行微调。
数据
传统的监测系统使用从全国数百个医疗保健提供者收集的病毒学和临床数据来发布流行病报告,通常是每周一次。虽然可靠,但这种方法昂贵且缓慢。这些报告中的数据有 1 到 2 周的滞后。为了提供对疫情的实时监测,正在从监测流感活动间接信号的创新监测系统中获取数据。
- 网页搜索查询和社交网站数据
大约 80%的互联网用户在网上搜索有关他们所面临的医疗问题的信息,这使得网络搜索查询成为有关健康趋势的唯一有价值的信息来源。不足为奇的是,人们发现,寻求健康的网络搜索行为与同期测量的患者出现相应疾病症状的医生就诊比例高度相关。季节性流感样疾病尤其如此(ILI)。
通过基于搜索查询日志的模型预测 ILI 病例(黑色)与实际 ILI 病例数(红色)
当然,某些搜索查询比其他查询更高度相关。此外,应当监控其搜索频率并在临近预报/预测疾病活动的模型中使用的术语或短语的集合可能随时间和跨不同区域而变化。因此,有一些工具采用机器学习和统计模型来自动发现在给定地区的给定时期内针对特定疾病的最具指示性的查询集。
许多研究还证明了使用社交网站(SNS)对流行病的流行情况进行实时分析的成功。许多人广泛使用社交网络来分享想法甚至健康状况。因此,除了作为一种交流和传播预防流行病和大流行意识的良好方式外,它们还为疾病监测提供了一种有效的资源。SNS 用户可以用作传感器,提供数据进行分析,用于早期趋势检测和预测。Twitter 是一个特别成熟的资源,因为它的帖子频率高,可以进行每分钟的分析,而且它的用户群体多样化,从年轻人到精通技术的老年人,可以产生跨越所有年龄组的数据点。此外,与搜索引擎日志相比,Twitter 帖子更具描述性,通过发帖人的用户资料对其人口统计数据进行更深入的分析可以提供更深入的见解。
2。气象与环境数据
气候变化是影响疾病传播动态的一个已知因素,特别是季节性流行病。例如,研究发现降雨量对流行性疟疾的年际变化有显著影响,这表明将降雨量作为一个输入变量纳入预测疟疾暴发的模型。因此,诸如降雨量、温度变化和湿度等气象数据提供了重要的数据点,可用于预测与疾病相关的目标参数的模型中。
其他环境因素,如植被指数、人口密度(是的,人是我们环境的一部分)、空气质量也可以纳入模型,这取决于它们与特定疾病传播的关系。
3。临床监测数据
当我们处理时间序列时,传统的监测数据,如历史病人数、历史疾病持续时间和峰值都发挥了作用。例如,过去 2 周的疾病活动可以指示其未来 1 周的趋势。这些数据点在构建预测模型时特别有用,这些模型需要经过训练以从历史趋势或捕捉滞后关系的趋势中学习模式。
另一种提供近实时患者信息的临床数据是电子健康记录(EHR)。电子病历提供了大量关于患者的信息,如他/她的人口统计和病史,这些信息可以对情况进行更细致的分析。此外,来自 EHRs 的数据可以被整合,以提供显示症状的患者数量与实际患病的患者数量的统计计数。
4。其他数据
暗示疫情规模的其他间接数据包括非处方药销售,这在 ILIs 病例中最常见。一些研究甚至使用基于历史证据的(伪随机)事件模拟。
模型
以下是文献中分析流行病时间序列数据时遇到的一些最常见的模型:
1。ARIMA:
ARIMA(自回归综合移动平均)及其变体是时间序列数据建模的一些最有效的方法。事实上,这也是用于传染病时间序列数据建模的最常用方法。由于 ARIMA 模型假设未来值可以根据过去的观察结果进行预测,因此它可以很好地处理上述临床监测数据点,捕捉定期收集的数据中通常存在的滞后关系。
然而,ARIMA 模型在处理 ILI 等不同季节不一致的疾病时,或者在预测淡季发生的流行病时,可能会受到限制。此外,ARIMA 不能很好地处理非结构化数据,如搜索查询日志和来自社交网络的数据,这些数据在疾病的临近预报中发挥着越来越重要的作用。
2。回归模型:
多元线性回归是最常见的回归分析形式,已应用于疫情预测研究。模型捕捉各种数据点,包括自回归和季节参数以及(滞后的)天气协变量。通常,回归模型针对不同的人口在更精细的空间粒度上进行微调,例如针对一个国家内的每个城市或州。
3。神经网络
考虑到可用的输入数据特征的多样性,如果有大量数据可用于训练神经网络,那么使用神经网络是一个不错的选择。神经网络需要有限的特征工程,在分析多模态复杂数据集时成为热门话题,例如使用多种类型的数据集进行疫情预测。
4。其他方法
除了上面提到的方法,还使用了其他各种特定于数据的方法和模型。例如,与主题模型或图形数据挖掘相结合的文本挖掘,用于从搜索查询和 SNS 数据中提取和分析特征。此外,可以使用不同方法和模型的组合来组合若干特征数据类型,以为此目的构建健壮的系统。
多种方法正在涌现,试图利用我们拥有的强大工具:数据,随机应变,帮助我们应对疾病爆发。其中最成功的已经在更大范围内实施,并正在协助政府和公共政策加强防御。只有当我们开始信任这些(太早?)警告和采取必要的措施,即使它们看起来反应过度,我们才能真正收获它们的好处。
数据科学家如何在现实生活中建立机器学习模型
成功完成预测模型的步骤
摄影爱好在 Unsplash 上
如今,网络上已经充斥着数据科学和机器学习相关的资源。有许多博客、网站、YouTube 视频和论坛都在提供关于数据科学相关主题的有用信息。现在,为任何数据科学探索选择正确的材料已经变得很乏味。
几年前,当我开始我的数据科学之旅时,我面临着同样的困境。但有一点我注意到,在这些资源中,大部分都不完整。你必须遍历大量的资源来获得详尽的信息。
此外,我看到关于机器学习模型的文章缺乏现实生活的视角。所以我想到写一篇关于为现实生活中的任何用例构建机器学习模型的整体图片的帖子。
要执行任何数据科学项目,数据科学家都需要经历几个步骤。概括地说,这些步骤可以表示为:
- 从给定的业务问题中制定数据科学问题
2.数据源探索和数据收集
3.变量探索(EDA)
4.模型结构
5.模型评估
6.模型部署
步骤 1 和 2 取决于问题的背景。步骤 6 更多地依赖于业务需求和可用的基础设施。步骤 2、3、4 和 5 是数据科学家的唯一职责。
在这篇文章中,我将讨论如何建立一个端到端的分类模型。我将带你经历一个数据科学家在任何需要建立分类模型的项目中的整个旅程。我将试着组织这篇文章,以便它可以很容易地适应类似的情况。
我使用了一个随机 Forst 模型来描述这些方法。即使您使用任何其他分类器,执行过程也会非常相似。
1.从一个给定的商业问题中形成一个科学问题
通常,数据科学问题源于业务需求。业务主管在产品销售、利润率、客户忠诚度、采购决策、市场份额和许多其他领域面临着各种挑战。
这些业务问题会以一些业务问题的形式出现在你面前,或者以业务主管的一些观察结果的形式出现在你面前,这些观察结果是他们想要验证的。
作为一名数据科学家,您有责任将这些业务问题转化为数据科学问题,并提供有意义的答案。
在这篇文章中,我将考虑一个简单的社交网络广告问题。数据集提供了一些表明客户概况的变量。此外,它还表示购买了该产品的客户。
这项任务的目的是根据客户信息,预测未来谁会购买该产品。
因此,作为一名数据科学家,您需要理解这是一个分为两类的分类问题——已购买和未购买。
2.数据源探索和数据收集
在现实生活中,数据源探索和数据收集并不是一项简单的任务。在任何组织中,您都很难找到可以找到所有所需数据的单一来源。通常,您会发现多个不相连的数据源,其中一些由于基础设施相关问题或访问受限而难以访问。
由于成本问题和技术挑战,从外部来源收集数据也很棘手。
在这篇文章中,我只能有限地展示这些问题。讨论“社交网络广告”的数据集从这里下载。
3.变量探索(EDA)
在开始探索性数据分析(EDA)之前,你应该先看看数据。您应该检查一些东西—数据量、来自不同来源的不同数据的性质、数据集的兼容性、它们之间的映射、数据质量、数据一致性—最重要的是每个变量的含义及其业务含义。
现在是时候使用“社交网络广告”数据来使用 python 代码了。因为我使用了单一数据集来保持讨论的简单,所以我的范围有限,无法说明我在这里提到的第一次查看数据的所有方面。
整个代码可以在 jupyter 笔记本或您选择的任何其他 python IDE 中执行。我们将需要几个 python 库来完成这个分类练习。我将首先提到我们需要的所有包装。
检查您当前的工作目录总是一个好主意。如果需要,将其更改为您喜欢的。
先看数据
先看看将用于构建模型的数据。你会知道你在处理多少变量,以及这些变量代表什么。
这是一个只有四百个观察值和五个变量的小数据集。其中,“用户 ID”对模型开发没有贡献。
您应该检查变量名中的空格。如果您发现任何这样的情况,请更改变量名。变量名中的空格会导致脚本出现问题。在这个数据中,“用户 ID”有一个空格,我把它改成了“User ID”。
变量的数据类型
检查您正在处理的每个变量的数据类型。任何数据中最常见的问题是日期变量。我看到大多数时候日期变量变成了“对象”数据类型。请确保您已经将其转换为日期格式。我的当前数据不包含任何日期变量。此外,当数值变量的某些值包含字符或者某些值缺失时,数值变量有时会变成“对象”类型。
将数据分为训练集、验证集和测试集
在处理数据之前,将其分为训练集、验证集和测试集。您的模型应该只看到设置为自我训练的火车。验证集应该只用于通过检查模型在验证集上的性能来调整模型的参数。测试集用于检查模型对未知数据的性能。
您将用于处理训练集的所有统计技术都应该用于处理验证和测试集。此外,您从训练集估计的统计值应该用于验证集和测试集。
例如,如果已经通过均值【m】和标准差 s ,归一化了训练集的变量 X,则应该使用相同的值来归一化验证集和测试集中的 X。
现在,训练、验证和测试集的大小取决于可用的数据量。当数据集不大时,80–10–10 或 70–20–10 是分割训练、验证和测试集的常用百分比。但是,如果你有足够的数据,比如数百万,那么保持 2%或 1%甚至 0.5%的数据对于验证或测试集来说就足够了。
从这些数据中,我通过提取 80%的数据创建了一个训练集。为验证集保留 15%,为测试集保留 5%。
变量的分布
现在是时候探索列车组并理解手头的变量了。
变量的汇总统计将有助于理解它们的性质。你会对他们的分布有一个粗略的概念,比如范围,他们是否在本质上是偏斜的,频繁出现的类别,等等。
在该数据中,性别分布以女性为主。顾客的年龄从 18 岁到 60 岁不等,平均为 38 岁。
可视化总是有助于更深入地理解变量。
相当多的顾客年龄在 40 岁左右。很大一部分顾客属于低薪阶层。不出所料,购买的顾客数量远低于总顾客数量。
对于分类问题,检查类别不平衡的程度总是一个好主意。
在列车组中,已购买与未购买的比例为 38:62。所以,阶级不平衡在这里并不重要。
缺失值和异常值
在真实文件数据中,缺失值是一种确定(几乎)的现象。处理缺失数据有多种技术——数值变量的均值或中值插补、分类变量的模式插补、K 近邻法(KNN)、回归法等。它们中的每一个都依赖于环境。
在当前的行业场景中,如果数据中存在某个变量,可能会有两种情况。要么变量有足够的值,要么没有值。我几乎看不到介于两者之间的情景。
这是有原因的。组织了解构建流程和基础架构来存储来自不同业务运营的数据的重要性。如果他们发现一些信息至关重要,并且有记录的方法,他们会妥善保存。你会得到足够的信息。但是有时由于人类的偏见或技术上的挑战,记录某种特定的信息变得很困难。在这种情况下,你几乎得不到任何信息。
所以,如果我有足够的数据,我个人会尝试删除缺失值。如果某个变量有大量缺失值,那么删除该变量可能是个好主意。我只在绝对必要时才尝试插补技术。
现实生活数据的另一个常见特征是异常值的存在。您可以使用上下胡须来确定异常值。有时,人们会将较低的 2.5%和较高的 2.5%的数据视为异常值。在对它们采取任何行动之前,您需要检查它们是否真的是异常值。
您可以用变量的一些估计上限和下限来限制异常值。
在这个数据集中,没有丢失的值。由于该数据中的响应变量本质上是分类变量,因此异常值的概念在这里不适用。
特征创建
对于大多数机器学习问题,特征创建是一项强制性的练习。有时,可用于建模的数据不包含足够的变量。可用变量可能没有足够的解释力来提高模型的能力。我们正在处理的数据只有三个变量——年龄、工资和性别。
根据这三个变量,很难建立一个具有足够预测能力的模型。可能存在某些影响购买决策的其他因素。现在,由于我们没有关于客户的其他信息,我们可以明智地使用这些变量来提取最大可能的解释力。为此,我们需要从现有的变量中创建新的变量(特性)。
可能存在另一种情况,我们有足够的变量,但没有一个变量显示出足够的解释力。在这种情况下,我们需要从原始变量中创建额外的特性。此外,我们可能需要智能地组合一些变量来创建新的变量。
**
这里的顾客年龄在 18 到 60 岁之间。如果我们不使用年龄作为变量,而是能够识别客户具有不同购买模式的年龄段,那么在决定客户是否购买时,它将具有更大的解释力。一旦我们确定了年龄桶,我们就可以为这些桶形成虚拟变量,并将它们用作特征。
在这个柱状图中,我们可以看到已经购买的客户和没有购买的客户的年龄分布不同。红色矩形代表已经购买的客户数量,在中低年龄段中较高。但是蓝色矩形对于高年龄组来说更高,这表明高年龄组不购买的可能性更大。
从上面的直方图的理解导致生成一个新的变量“age_group ”,它包含年龄桶而不是实际的变量值。这将帮助我们为每个年龄阶段建立新的虚拟变量。
这同样适用于变量“EstimatedSalary”。顾客的工资从 15000 英镑到 150000 英镑不等。我把这个系列分成九个桶。在这里,你可能需要试验你应该形成多少个桶。目标是产生足够数量的桶,以区分购买和未购买客户之间的工资分配。
变量“salary_group”是基于直方图中观察到的模式形成的。
顾客购买状态的性别分布没有显著差异。你一定注意到女性顾客更倾向于购买这些产品。
一旦我们研究了数据集中的所有变量,就该最终确定分类模型的特征了。您将为训练集创建的特征必须为验证集和测试集完全重复。
因此,我们已经为模型创建了所有的特征和虚拟变量。我去掉了原始变量,只保留了虚拟变量。在创建虚拟变量时,我从每组中删除了一个虚拟变量,以避免虚拟变量陷阱。
当我们为任何分类变量创建虚拟变量时,每个分类都会创建一个虚拟变量。变量中所有哑元的线性组合总是 1。因此,它们将与模型的截距完美相关。这被称为虚拟变量陷阱。我们通过为每个分类变量丢弃一个哑元来避免这种情况。
**
检查变量的相关结构总是一个好主意。多重共线性使得很难理解模型中要素的重要性。
在我们的例子中,创建的特征之间的相关性似乎不是很强。
火车组终于准备好模型制作了。
4.模型结构
在我们训练模型之前,我们需要验证数据为模型验证做好准备。我们需要将用于训练集的相同方法应用于验证集。
同时,我们也可以准备测试数据,并保留它以备将来使用。
我们创建了与培训集相似的年龄存储桶和工资存储桶。有一点你必须检查目标变量的所有类都应该出现在验证集中。如果没有,重复训练-验证-测试分离。
我们为验证集和测试集创建了相同的特性。
有几种处理分类问题的算法。事先知道哪个型号性能会更好,不是很方便。我们总是尝试几种型号,比较它们的性能。在现实场景中,性能参数可以是预测准确性、执行时间和资源消耗。
这里我使用了一个随机森林模型作为分类器。随机森林通过从训练集中采样特征来构建几个决策树。这些树中的每一个都对观察结果进行分类。随机森林结合这些决定,并提取最有可能的一个。这种方法叫做装袋。
我已经使用默认参数来建立模型。您可以使用参数进一步优化分类器,如— n_estimators、max_depth、min_samples_split、 min_samples_leaf 等。
将您的模型保存为 pickle 文件以供将来使用。您应该用正确的版本名称保存模型,这样当您再次访问它们时就可以区分它们。
我将模型保存在我的工作目录中,然后再次加载它,因为我使用的是一个笔记本。
5.模型评估
我们到了必须回答几个问题的地步,比如——这个模型有多好?它符合我们的期望吗?如果没有,怎么办?
为了检查模型,我使用了验证数据集。已经预测了验证集的目标类。为了判断模型有多好,我们需要使用一些判断指标。
混淆矩阵是表示模型性能的好方法。它显示实际数据和预测结果中的正类和负类的计数。这里的正类是指标签为“已购买”的类,用 1 表示。
**
上面的函数提供了一种用漂亮的可视化来表示混淆矩阵的方法。该函数可以显示标准化(百分比)或未标准化(计数)的混淆矩阵。
该矩阵表示真实标签和预测标签及其计数。对于 19 个观察值中的 17 个,类别 1 的真实和预测标签是相同的。这意味着,购买了该模型的 19 个客户中有 17 个可以预测。41 个班级中有 37 个没有购买。
为了使它更简洁,我们有一些度量标准,比如——精确度、召回率、F1 分数、准确度等。对于类别不均衡(类别分布不均匀)的分类模型,精度和召回率是我们依赖的度量标准。度量值越高,模型越好。
精度是通过两个值的比值来计算的。模型预测为“已购买”的客户数。以及实际购买了该产品的客户数量。
回忆表示—在实际购买的客户中,有多少被模型正确识别。
现在,很难做到最大化的精准和一起回忆。F1-Score 是一种将我们从这种情况中拯救出来的方法。这是精确和回忆的调和平均值。这有助于我们在它们之间保持平衡。
模型算法不直接提供目标类。它提供了属于每个类的概率。如果肯定类别的概率大于 0.5,则标记为 1,否则标记为 0。
这个概率阈值可以被优化。我们可以在所有阈值中检查哪一个提供了最好的分类结果。这可以通过精确召回曲线来实现。
因此,我没有直接预测类别,而是从模型中提取了验证集的每个观察值的概率。利用查准率-查全率曲线,发现最佳概率阈值为 0.332714。
该图显示了精确度-召回曲线中的最佳阈值。它优化了预测的精确度和召回率。
还有其他几种模型评估和参数调整的方法。为了使讨论简单,我无法一一介绍。
模型训练和评估是递归过程。你需要多次重温培训和评估,以达到令人满意的水平。如果评估过程没有显示令人满意的结果,每次都需要调整模型的参数。我在这篇文章中避开了这一部分。
现在,是时候检查模型在看不见的测试数据上的表现了。如果将模型部署到现实生活中的应用程序中,它将类似于模型将如何执行。
测试集上的模型评估
在对测试集使用模型进行预测之前,必须检查测试集的形状。确保测试集中的特征数量等于训练集中的特征数量。
在我们的例子中,测试集中缺少三个特性。这些是从估计工资中创建的虚拟变量。因为那些工资桶在测试集中不存在,所以我为它们插入了带有零的虚拟桶。
**
我使用验证集中估计的阈值概率来预测测试集中的观察结果。
混淆矩阵显示,所有带有“已购买”标签的客户都被正确预测。所以,召回值是 1。
该组的 F1 分数为 0.85。我想说这个模型为我们提供了一个不错的表现。我们用一种非常简单明了的方法做到了这一点。
在许多情况下,85%的 F1 分数可能是优秀的表现。然而,模型所需的精度取决于各种因素。
6.模型部署
一旦你对你的模型表现感到满意,你应该和业务主管一起检查。您需要详细讨论您的结果的含义,以及它是否符合业务理解。
此外,您需要与业务主管确认期望的准确性水平。必须对部署策略、模型修订的频率、交付输出的模式等做出决策。
您的模型输出可能会被其他应用程序使用,甚至可能以 CSV 文件的形式提供给业务人员。
我在本文中表示代码的方式更像是一种离散的方式。在现实生活中,我们更喜欢将脚本分成不同的块,并使用类和函数来组织它们。
此外,需要为模型的推断准备单独的脚本模块。该脚本将从特定的数据存储中获取数据,对数据进行推断,并将输出保存在指定的输出位置。
您将需要一个计划程序,让模型在特定的时间间隔后运行。如果其他应用程序依赖于这个模型的输出,您需要以正确的顺序同步它们。
在一篇文章中介绍机器学习项目的所有方面真的很难。我尽力覆盖了大部分。我可能遗漏了一些事实。但是我相信我已经能够把整个旅程的总结带到你面前。
数据科学是一个新兴领域。许多有志者加入数据科学行业,追求成为一名数据科学家。我希望这篇文章能帮助他们对数据科学项目涉及的步骤有一个公平的认识。
你可以从 这里 下载笔记本。
参考文献:
2.https://stack overflow . com/questions/19233771/sk learn-plot-confusion-matrix-with-labels/48018785
感谢您阅读我的文章。如果你喜欢这篇文章,你可能会喜欢我的其他文章。以下是其中的一些。
经过检验的快速学习方法
medium.com](https://medium.com/swlh/how-to-learn-new-programming-language-with-no-books-and-tutorials-862e8cf77d8f) [## 如何为对象检测模型设置您的系统
你应该从头开始,第一次尝试就把它做好
towardsdatascience.com](/how-to-set-up-your-system-for-object-detection-models-2e0726212c4e)*
数据科学家如何平衡实用性和严谨性
以产品为导向的实用主义和科学严谨的混合方法可以帮助数据科学团队保持专注和影响力
亚当·瓦克斯曼和埃利奥特·沃尔德伦
当构建驱动商业价值的量化系统时,实用主义和创新并不相互冲突。对于具有挑战性研究问题和以数据为中心的客户的成长型和精益型初创企业,数据科学研究必须快速迭代地产生明确的商业胜利。
在这些环境中扩展技术的有效方法必须包含严格的、可解释的、可防御的和与业务一致的方法组合。我们从我们自己的团队成为数据驱动的企业公司的成长过程中学到了这一点,许多读者无疑都有同感。
一个解决方案是:以产品为导向的实用主义和科学严谨的混合方法。这里有两个例子,说明如何平衡实用性和科学基础,以保持您的数据科学团队专注和有效。
避免偏见、增加业务相关性的实用建模方法(不要太花哨)
作为一名数据科学家,务实是与业务保持联系并对业务产生影响的一种方式。一种方法是使用最相关的可用数据来衡量对业务和培训模型重要的因素。您需要能够从业务案例到数据集到模型到业务成果画出一条连贯的直线。
另一方面,应用不必要的约束——这是设计新模型时容易犯的错误——是打破直线并无法产生影响的一种方式。在学术环境中,我们经常为了感知方法论的优雅而应用约束。重要的是,不要在私营部门过于宽松地实行这种限制。
我们强加给自己的这些不必要的约束会暴露出各种各样的偏见,其中一些就像一年前麻省理工学院面部检测分析的公开案例中强调的一样明显。在这些突出的案例中,在可能是高加索人的样本集上训练的面部识别模型未能识别出像塞雷娜·威廉姆斯、米歇尔·奥巴马和奥普拉·温弗瑞这样的名人面孔。
除了明显的社会偏见问题,还有一个可以避免的常见问题,即缺乏商业背景下的培训模式。从机器学习的角度来看,期望一个生成的模型能够直觉数据中没有的概念,例如,肤色是人脸中的一个变量,这是不现实的,也是不必要的。
在这种人脸识别情况下,一个简单的解决方案是识别一组不同的人脸,这些人脸可以训练模型在一系列已知的面部特征变量中识别人脸。设计师应该突出关键变量:肤色、发型、眼睛、鼻子、耳朵、眼镜等等。将米歇尔·奥巴马直接放入训练集中是“作弊”还是“不雅”?一点也不。把詹妮弗·洛佩兹也放在你的测试集中。您希望训练集和测试集是独立和平衡的,但是每个都应该包括与产品相关的关键示例。你想让你的数据产生为什么你的模型是适用的和可解释的故事。使用缺乏控制的数据集只会在你的模型中产生不必要的偏差。
外卖:机器学习的模型就像一个婴儿,假设它在房间里看到的任何东西都是整个世界。在教授这些模型时,我们可以利用一些外围知识。我们创造一些特征,意在突出我们意识中的重要变量。我们告诉我们的模型我们已经知道的事情,以便他们可以学习我们还不知道的细微差别。
以实用的严谨态度执行敏捷数据科学
我们看到的另一个常见问题是在数据科学应用程序中发现的,这些应用程序没有长期确立的最佳实践或强烈的学术关注。在这些研究周期长的领域中,存在着不走直线的风险。我们建议通过从迭代软件开发哲学和“敏捷”过程中借用概念来减轻这些风险。典型的数据科学项目可以遵循以下步骤:
- 定义与业务目标直接相关的成功指标。
- 定义一个简单的模型,可以根据成功标准进行评分。
- 迭代一组备选方法(只是逐渐变得更加复杂)来改进成功度量。
我们的目标是每周测试(或“往返”)一个或多个方法的能力。这使我们能够在几周内看到我们是否能够实现业务目标,以及我们是否达到了收益递减点。随着时间的推移,我们已经看到了应用敏捷式数据科学的具体好处,包括:
- 得到的模型足够复杂,可以满足业务目标,但不会比需要的更复杂。
- 实施和维护必要模型的成本保持在可管理的范围内,包括新员工。
这个迭代过程也有附带的好处。了解哪种类型的模型复杂性增加会导致相应的性能提高,有助于数据科学家了解他们所在领域的底层数据的性质。积累了关于哪个模型类更适合特定问题的见解。这可以导致更快地搜索最合适的算法。这本质上是一种贪婪的做法。然而,根据我们的经验,在处理日常实践中遇到的嘈杂数据集时,贪婪导致的失误是例外情况,而不是常见情况。
要点:流程驱动工程的相同优势在快速周期创新和建模中有相似之处。
对于任何数据驱动的组织来说,在各种量化问题上进行创新至关重要,这些问题涵盖的主题可能包括用户行为、信任建模和其他新领域。对你的计划采取务实和创造性的方法将有助于你快速迭代地创造价值。
亚当·沃克斯曼是 Foursquare 的高级工程总监,埃利奥特·沃尔德伦是研究副总裁。
数据科学家如何产生影响
这不全是关于漂亮的机器学习模型
几个月前,我辞去了 FAANMG 数据科学家的工作。几周后,我将在另一家公司开始新的数据科学冒险,但今天我不会谈论这个。当我过渡到我的新工作时,我想反思我的前一份工作,并写下我的上一个团队和组织教给我的重要经验。在本文中,我希望将我的知识传递给任何即将加入数据科学家或有抱负的数据科学家,以帮助他们更好地意识到等待他们的挑战和陷阱。在开始这个系列之前,我想写两个收获: (1)非数据驱动的文化对数据科学家的影响(2)数据科学家如何引领变革成为数据驱动的文化。人们可能会认为顶尖的科技公司一定是数据驱动型的,但就像人一样,没有一家公司或团队是完美的。此外,我只在微软的一个团队工作过,所以这当然不是对微软所有团队的证明。尽管如此,我认为数据科学家是推动数据驱动文化的领导者,因此我们有责任意识到这些挑战,并在挑战出现时战略性地应对它们。
注意:这绝对不是对我之前在微软团队的批评。这些只是我从上一份工作中学到的一些东西。毕竟,我确实相信创造一种数据驱动的文化不仅仅是由领导层领导的,也是由数据科学家领导的。
乔希·卡拉布雷斯在 Unsplash 上的照片
1.协调数据团队和产品团队
微软是从“先发制人”的心态中成长起来的。这意味着你首先要推出一个产品,然后试着分析产品成功的影响。数据科学家只是产品团队的创新想法和工程实现的事后产物。然而,这种分析影响的方法非常困难,会让人们认为相关性=因果关系。这种类型的流程导致数据科学家很难提供推动影响的见解以及分析新产品发布的影响。因此,对于数据科学家来说,从头到尾将自己融入产品周期并使产品团队的战略与数据团队的战略保持一致是非常关键的。
数据科学家不能把自己和数据团队隔离开来,而是要努力成为产品团队的一员。当产品团队不投入他们的工作时,数据科学家无法提供价值。对于所有的数据科学家和领导者来说,了解你的所有产品团队成员,并尝试了解他们过去和现在的项目。我喜欢在这里应用黄金法则:“己所不欲,勿施于人。”当您开始新的数据科学项目时,询问所有产品团队成员(用户研究、设计、工程、产品管理、营销)有兴趣了解什么。主动向团队更新进度,并给他们一些他们可能感兴趣的见解,这可以帮助你获得对项目的新观点。对项目保持透明,并让产品团队相信数据科学可以帮助产品创新并对业务 KPI 产生积极影响。
2.加强产品团队的数据力量
对于数据团队以外的人来说,学习如何使用 Power BI 等可视化工具并不总是一目了然的。这可以被视为一种障碍和额外的责任。谁会想要自己以外的更多责任呢?数据工具只是故事的一部分。通常,指标和分析方法有时很难掌握。随着数据变得令人困惑和乏味,产品团队将开始向数据科学家询问最简单的问题。虽然这些问题很简单,但数据科学家可以花半天或一天的时间来回答一个问题。这打乱了数据科学家的日程,并推迟了他们最有可能产生影响的其他重要数据科学项目。数据科学家需要通过加强产品团队的数据力量,让团队能够利用数据自行回答简单的问题。
数据科学家必须成为教师,就如何访问和使用数据工具提供清晰的指导,并向团队提供任何关键指标的全面描述。无论是拥有度量术语表还是安排专门的学习会议,数据科学家都需要帮助产品团队变得更懂数据。从我的经验来看,授权团队自己使用数据可以给产品团队一种成功感和他们对团队的影响。然而,这并不容易,因为人们都很忙,他们可能不愿意来你的棕色袋子里谈论功率 BI 或实验。也许不仅仅是发送一个带有一般议程的会议,而是尝试为会议提供激励。此外,您可以为团队提供灵活的媒介(即空闲渠道、办公时间)来询问您的问题。
Joshua Hoehne 在 Unsplash 上拍摄的照片
3.增加数据和实验的可信度
多次犯错可能会失去任何人的信任,信任是数据团队和产品团队之间必须的。否则,数据团队可能会失去他们对产品团队和组织的影响。综上所述,没有数据是绝对确定的。在任何数据管道或机器学习模型中,总会有警告和不确定性。然而,数据之外的团队发现这一切难以置信,当他们在数据团队的工作中发现可疑的数字时,他们开始失去信任。一旦产品团队失去信任,他们将不愿意将数据团队纳入产品生命周期的一部分,并依赖数据科学家提供产品建议。因此,数据科学家需要在他们的统计结果中保持严谨,并确保不确定性得到测量,并与利益相关者进行良好的沟通。
数据科学家必须确保在任何演示之前陈述任何假设,并在传达他们的结果之前始终与他们的团队一起评估他们的数据科学工作。就像产品一样,数据代码经常有错误,帮助产品团队尽早意识到这一点可以帮助信任随着时间的推移而增长。提供透明度并实施严格的方法来检查所有数据科学家的工作,对于更加数据驱动的文化至关重要。
摘要
有很多文章在讨论如何创建数据驱动的文化。然而,我希望读者能够从一个新的角度了解数据驱动文化及其对数据科学家的影响。这是我个人对缺乏数据驱动的文化如何影响我作为一名数据科学家的看法,以及我从中学到的最多的东西。
如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。
中:https://medium.com/@testandlearn
领英:【https://www.linkedin.com/in/kennyk1m/
数据可视化是如何工作的!
如何有效地将告知人们的数据可视化?
戴帽子那天,我简直不敢相信我所看到的。令我惊讶的是,比特币的价格创下历史新高,价值 19783 美元。我很难抑制这种兴奋的感觉。这种感觉并非源于我对比特币价格之高感到多么惊讶,而是因为折线图完美地描述了比特币是如何快速增长的。每当我看到一张完美地描述数字的图表时,我都会有同样的感觉。
每天,我都会遇到以视觉上吸引人的格式呈现的数据,这些数据解释了这些数字的含义,并给了我如何处理这些信息的见解。我对这些图形/图表越感兴趣,就越被数据可视化所吸引。数据可视化是处理捕获数据的研究领域,目的是有效地显示数据,以便任何人都可以很容易地对数据集进行推断。
数据可视化是数据科学的主要支柱之一。它使用形状、线条和其他形象化的方法来描绘数字。有多种技术可用于根据可用的数据类型来呈现数据。本文将重点介绍其中的五种:条形图、饼图、散点图、直方图和折线图。
条形图
条形图是数据可视化的一个方面,它将分类数据的数值显示为条形,以便对数据点进行相互比较。这是通过根据数字的大小来增加或减少条形的大小来实现的。条形图有两种类型:水平条形图和垂直条形图。
显示赛季中期英超联赛积分最高的球队的横道图。
显示球队在赛季中失球情况的垂直条形图。
水平条形图更擅长以升序或降序显示数据。垂直条形图在不使用连续数字顺序的情况下更擅长呈现数据,尤其是当只有一个数据点重要时。
圆形分格统计图表
饼图是一种比较不同数据点对整体贡献大小的图表。每个数据点都有一个百分比,可以表示为一片饼图,加起来就是一个完整的饼图。这就是为什么它被称为饼图。百分比越大,份额越大,反之亦然。所有的百分比加起来是 100%。
一个关于英超球队如何在英超 2019/20 赛季中期进球方面做出贡献的饼图,同时突出显示最高的。
在上面的饼图中,有一个圆圈,所有百分比加起来是 100%。在它的右边,有一个所有切片标签的图例。
散点图
散点图是比较两个变量的两组数值的图。它将其中一个变量的数字放在横轴(x 轴)上,另一个放在纵轴(y 轴)上。然后,它将数据点绘制为符号,其中数据点的数值在图形上相交。
绘制这些符号后,可以进行进一步的计算来测量两个变量之间的关系强度。这是使用相关系数来完成的。相关系数范围从-1 到+1。负值表示它们具有相反的关系,即 x 增加,y 减少,反之亦然。正值表示它们有直接关系,即随着 x 的增加,y 也增加。相关系数越接近|1|越完美。
散点图的另一个有用功能是创建回归线。通过创建一个使用 x 轴上的自变量来预测 y 轴上的因变量的方程,可以建立一条回归线。
一个散点图显示了 2019/20 赛季中期英超球队累积的积分如何随着进球而变化
柱状图
直方图是一种图形机制,用于计算一个数值在给定数据集中出现的次数。它通过在特定数字的固定宽度内将数值分组为不同的组来实现这一点。它计算每组中的数值出现的次数,并利用一个条形来表示其频率。组中的数值越频繁,条形越大。
FIFA 19 球员评分直方图。
上图是一个正常的倾斜数据,因为大部分数据位于正中间。这表明均值=中位数=众数。如果大部分数据位于图表的左侧,则称之为正偏态,意味着 mode
折线图
折线图是一种图表,主要用于显示某个变量在一段时间内的变化情况。这是通过在 x 轴上绘制时间,在 y 轴上绘制变量来实现的。它使用线条将前面的数据点与后面的数据点连接起来。
显示 IMDb 年度投票总数多年来变化的线形图
结论
数据可视化的力量在当今世界显而易见。政治家、体育专家、记者、工程师和会计师使用数据可视化技术向人们传达全面的重要信息,让他们更好地了解正在发生的事情。
“数据化”如何重塑金融服务
弗兰基·查马基在 Unsplash 上拍摄的照片
自近 500 年前成立以来,金融服务业一直是最具活力的行业之一,并已转变为全球经济的支柱。然而,30 年前,现代金融业开始见证多种形式的重大结构变化——监管压力、客户动态、新进入者、整合、金融科技和数字。虽然这些变化并没有对这个行业(比如店面零售)构成生存威胁,但它们挑战了现状,从而创造了加速变革的需求(点击这里阅读我的背景故事)。新冠肺炎造成的大规模混乱很可能会进一步加速变革的需要。
发生的变化&数据化的作用
如果我们从历史角度来看金融机构提供的核心服务和价值主张,似乎核心服务在很长一段时间内保持了相对的相似性和弹性。这些包括:1)存款、贷款&交易 2)信贷管理和服务 3)金融咨询&投资 4)公司融资 5)风险管理。随着经济的增长和全球化,这些服务的复杂性和规模都在增长,但核心服务基本保持不变。另一方面,价值主张(专业知识、经验、规模、关系管理和交易流动性)虽然随着时间的推移在主题上保持一致,但随着结构性变化&技术进步而发展更快。考虑存款或贷款产品。与 50 年前相比,今天的基础产品可以说非常相似,然而,我们今天通过应用程序申请、获取和管理资金的方式却非常不同。
数据化是一种更近的趋势,被定义为将我们生活的许多方面转化为数据的技术趋势,这些数据随后被转化为信息,实现为一种新的价值形式。金融行业是跨产品和流程的数据密集度最高的行业之一,因此,由于数据化,它很可能是最受干扰的行业之一。* 考虑到历史,它更有可能从几个方面影响银行提供的价值主张,甚至有可能扰乱核心服务产品。*
这当然不是小事,因为多年来银行已经变得非常复杂。例如,最受尊敬的银行之一 JP 摩根就建立在近 1200 家前身机构的基础上。然而,金融机构正开始突破噪音和复杂性,设计清晰的战略,利用数据化为自己谋利(见下文)。在这方面做得好的金融机构将获得增量收益,而在这方面做得非常好的机构,最终将实现指数级转型!
金融机构从数据到资产的旅程,作者 Amit Shanker
数据是新的石油,是老生常谈,但最适用于金融机构
总的来说,信息对这个行业来说并不新鲜,因为它一直依靠快速、全面和准确的数据和知识来赚钱。然而,为了更广泛、更深入地受益于数据化,金融机构不得不审视其整个数据价值链,并“疏通”以推动战略变革。石油的类比在此最为恰当,以下描述了价值链中正在实施的一些关键变化:
重新评估银行生态系统中的数据价值链,作者 Amit Shanker
系统化&基于用例的编码以产生最大价值!
人工智能、机器学习、云计算和工程正在以显著的速度向前发展,许多甚至在 5 年前不可能的事情现在已经成为“开箱即用”的可能性。这是成功/不成功的金融机构在设计其数据化战略、路线图和执行计划时真正与众不同的地方。在用例级别,这大致映射到 4 个类别。数据使用情形将影响:
- 学习速度—自动化和自主化较低复杂性和可重复的任务,以专注于更高形式的思考和执行
- 可扩展性比率—工业化并连接数据生态系统,以开发更深入的机构知识
- 外化率——尽可能编纂和扩展隐性知识
- 创新速度—发现和策划新的见解以推动业务绩效
一个用例的旅程(策略→执行→管理)需要几个参与者和系统化的方法(如下所示)来产生期望的价值:
多学科用例之旅,作者 Amit Shanker
对于大多数金融机构来说,这一旅程仅在几年前才开始,然而,随着数据化将明显与绩效和价值主张挂钩,未来十年将会看到更高的关注度。难怪像高盛和 JPM 这样的公司一直称自己为科技公司而不是银行!
他们的爱有多深?
机器学习的最大成功:预测客户流失(专长。PySpark)
亚历山大·辛恩在 Unsplash 上的照片
我们说的是客户流失。不,不是那种会威胁到你的腰带或给你的动脉涂上美味黄油的那种。然而,如果任其发展,这种类型的流失会威胁到许多企业的生命。
客户流失,也称为客户流失,是指在一段固定时间内停止使用公司产品或服务的客户数量。失去客户就意味着失去收入。在可以避免的客户流失方面,英国企业每年损失 250 亿英镑。如果一个企业能够正确识别可能离开的客户,那么他们可以提供折扣或激励来减轻这种情况。通常情况下,谁会离开的线索就在客户交易数据库中,如果你只是跟踪大数据中的面包屑…
在本帖中,我们将为一家虚构的公司开发一个简单的客户流失预测模型,这家公司提供一种想象中叫做 Sparkify 的音乐流媒体服务。他们的商业模式与(几乎)同名的 Spotify 相同。用户可以选择两种订阅类型:
- 免费等级计划的功能有限,并且会中断带有广告的音乐流
- 付费等级计划,包含所有可用功能和无广告音乐流。
用户不受任何会员类型的限制,不仅有机会随时升级或降级他们的订阅级别,还可以直接取消订阅。这种灵活性自然伴随着巨大的风险:如果用户对服务不满意,他们可以也愿意用脚投票。
问我,问我,问我(解决你的业务问题)
Sparkify 管理层担心流失率,并希望预测哪些客户有取消帐户的风险。我们有事件日志的样本数据集、jupyter 笔记本、Apache Spark 的 PySpark API 和 PySpark ML 包的工作知识。一个女孩还想要什么?
臭名昭著的 B.I.G .(数据)
在 Sparkify 上执行的每个活动都被记录在事件日志中。
是的,这个也是。GIF via Giphy
一直在重复播放《心痛如碎》吗?那会被记录下来。在旅途中获得最佳蓝色播放列表?我们就能跟踪那里的创造。任何行动,无论多么可信或尴尬,都不会被遗漏。
我们得到了一个. json 文件,其中包含 2018 年 10 月至 12 月的事件日志数据。它由 286,500 行和 18 列组成,详细描述了客户的特征和正在执行的操作的性质。
不错的选择蠢朋克的歌有科林
在一些简单的数据检查和由此产生的数据清理(删除属于用户 ID 的行)之后,我们剩下 225 个客户的 278,154 行事件数据。他们一定很忙!
定义(-可能)
要建立一个预测模型,我们必须要有可以预测的东西。当且仅当客户访问了“取消确认”页面时,我们将客户定义为被搅动的。我们使用这个定义来创建一个二进制标志,它将成为我们开发的分类模型的目标变量。
请注意,在我们的定义中,有一个案例将访问“提交降级”页面的客户包括在内。然而,这些客户在那次页面事件后仍然很活跃。免费用户仍然通过广告赚 Sparkify 的钱。因此,这些客户对公司收入的威胁不如那些取消订单的客户大。
注意: 只有 52 个客户翻腾:我们的数据不平衡。因此,我们必须明智地选择用于评估基于这些数据的模型性能的指标。
你的照片(r 数据)
配备了一个目标变量,我们询问数据的预测特征,以输入到机器学习算法中。
按客户流失划分的性别(左)和订阅级别(右)
- 性别:从上图可以明显看出,男性比女性更有可能取消约会。(在我的约会历史中也是如此)
- 订阅水平:我们可以推断,付费订阅的客户比免费会员更不容易离开。(哦,那么也许我应该让他们在约会的时候付晚餐的钱?)
按流失划分的平均页面浏览量:包括“下一首歌”(左),不包括“下一首歌”(右)
- 页面浏览量:以上数字显示了用户查看某一特定页面的平均次数。在整个数据集中,大部分活动都归因于播放下一首歌曲。其他页面上的趋势与左边的相比相形见绌,因此我们提供的数据也删除了“下一首歌”的浏览量。请注意,在“主页”、“添加朋友”、“添加到播放列表”、“下一首歌”、“竖起大拇指”和“注销”方面,活跃客户与不活跃客户之间存在显著差异
按流失划分的每个会话的平均歌曲数量(左);按流失划分的注册周数分布(右)
- 每次播放的歌曲:平均而言,顾客每次播放的歌曲较少。
- 注册周:活跃客户比不活跃客户的注册时间更长。
我们看到的上述一些特征并没有明确地包含在数据中。相反,我们操纵数据来创建更具预测性的客户级特征。
不要停止,直到你得到足够的(功能)
在这种情况下,我们从数据集中的现有要素为创建新要素。我总共构建了 65 个特性。这些可以大致分为:
65 功能是一个很多的能量来处理;GIF via Giphy
- 自注册以来的时间和最近的活动
- 订阅级别
- 会话/交互计数
- 主页/添加朋友/添加到播放列表/下一首歌/竖起大拇指/注销页面浏览量
- 日/周/夜活动和活动比率
- 最近一次活动前 1、2、3、4 周的会议/互动/现场时间
- 与前两周相比,最后两周的活动比率。
我不会详细介绍这个特性工程是如何完成的。你可以在这篇文章附带的 GitHub repo 中找到这些乐趣。然而,有必要强调一下与 PySpark 争论数据的几个关键技巧:
- 用户自定义函数 (UDF)允许您定义新的基于列的函数。
- 窗口函数允许您在一组特定的行子集上定义新的基于行的函数。
以下是如何在特征工程中使用这些技术的快速入门:
#Number of days since registration
#Create window function
w1 = Window.partitionBy(‘userId’)#Create udf for calculating the difference in weeks of two timestamps
diffWeeks = udf(lambda x, y: (x-y)/604800000)#Earliest and latest timestamp variables
dfTimeStamps=withChurn.withColumn(‘tsMin’, min(‘ts’).over(w1))
dfTimeStamps=withChurn.withColumn(‘tsMax’, max(‘ts’).over(w1))#Weeks user is registered
weeksRegistered=dfTimeStamps.select(“userId”,”tsMax”,”registration”,”churn”).dropDuplicates()\
.withColumn(“weeksRegistered”, diffWeeks(col(“tsMax”),col(“registration”)).cast(“float”))
小心 : 谨防加入!因为他们很敏感,容易发怒。在经历了太多内存不足的错误之后,我只能求助于限制连接,除非完全有必要。
在我们为建模做好准备之前,我们还有几个最后的步骤来整理我们的数据:
- 将对应于性别和订阅级别的两个分类变量转换为数字变量。
- 删除多余的功能。
模型
好吧,不是这种类型的建模;GIF via Giphy
PySpark ML 包有许多二进制分类器模型供我们选择。我们将训练五种不同的算法,找出性能最好的一种,然后运行超参数调整来进一步增强它。
我们将数据集分为训练(70%)和测试(30%),并创建一个训练管道(通过 pyspark.ml. 管道 ) ,它执行以下操作:
- 收集向量列中的所有要素(使用 pyspark.ml.feature 中的 VectorAssembler 类)。因此,我们有两列:一列对应于功能,另一列对应于标签(即流失结果标志)。
- 通过最小-最大缩放来缩放所有要素(使用 pyspark.ml.feature 中的 MinMaxScaler 类)。请注意,这意味着数据仍然保持其分布,而不是标准化。
- 使用默认参数训练指定的分类器。
- 计算精确度、F1 分数、精确度-回忆曲线下的面积和总训练时间。
#Create assembler and scaler for our pipeline
#Transform features into features vector column
assembler = VectorAssembler(inputCols=feature_cols,outputCol="featuresVector")#Scale the features
minmaxscaler = MinMaxScaler(inputCol="featuresVector", outputCol="scaledFeatures")#Performance metrics
evaluatorAcc = MulticlassClassificationEvaluator(labelCol='churn', predictionCol='prediction', metricName='accuracy')
evaluatorF1 = MulticlassClassificationEvaluator(labelCol='churn', predictionCol='prediction', metricName='f1')
evaluatorAUPR = BinaryClassificationEvaluator(labelCol='churn', metricName='areaUnderPR')
#Pipeline for classifier using default parameters
pipeline = Pipeline(stages=[assembler, minmaxscaler, learner])
下表给出了我们收集的结果:
初始模型结果
度量混乱:当目标变量的类别平衡时,你就可以兴致勃勃地使用准确度和基尼系数。当数据不平衡时不如此。在这种情况下,它们可能被夸大和误导。别害怕,我们的超级英雄来了!
引入 F1 得分和精确回忆曲线下面积(AUC P-R): 将这些视为不平衡人口的准确度和基尼系数等价物。
初步结果表显示,随机森林是最好的全能:F1 得分第一,AUC P-R 第一,跑得最快。毫无疑问,这个模型是我们应该继续进行超参数调整的,看看我们是否可以进一步改进它。
走开
通过 pyspark.ml.tuning 中的 ParamGridBuilder 类和 pyspark.ml.tuning 中的 CrossValidator 类,我们优化了随机森林,使用三重交叉验证来划分训练数据集,并对以下所有组合执行网格搜索迭代
- 杂质(熵,基尼系数)
- 最大深度 (3,4,5)
- 最大箱数(5,10,15)
#Create assembler and scaler for our pipeline
#Transform features into features vector column
assembler = VectorAssembler(inputCols=feature_cols,outputCol="featuresVector")#Scale the features
minmaxscaler = MinMaxScaler(inputCol="featuresVector", outputCol="scaledFeatures")#Performance metrics
evaluatorAcc = MulticlassClassificationEvaluator(labelCol='churn', predictionCol='prediction', metricName='accuracy')
evaluatorF1 = MulticlassClassificationEvaluator(labelCol='churn', predictionCol='prediction', metricName='f1')
evaluatorAUPR = BinaryClassificationEvaluator(labelCol='churn', metricName='areaUnderPR')
#Pipeline for classifier using default parameters
pipeline = Pipeline(stages=[assembler, minmaxscaler, RF])paramGrid = ParamGridBuilder().addGrid(RF.impurity,['entropy', 'gini']) \
.addGrid(RF.maxDepth,[3,4,5])\
.addGrid(RF.maxBins,[5,10,15])\
.build()cv = CrossValidator(estimator=pipeline,
estimatorParamMaps = paramGrid,
evaluator = evaluatorAUPR,
numFolds=3,seed = 97)
下表给出了我们收集的结果:
基线与优化的随机森林
我们设法提高了 F1 分数,但降低了 AUC P-r。F1 分数是在特定阈值下计算的精确度和召回率的调和平均值。精确度-召回率曲线是精确度和召回率在所有阈值之间相互作用的图形表示。我们得出的结论是,与基线随机森林相比,优化模型对于特定阈值更好,但实际上对于所有阈值都更差:它是较差的分类器!
那么,在我们的优化模型中,什么特征最具预测性呢?随机森林算法对此进行计算,并提供一个 feature_importances 属性,可以访问该属性来检索每个输入要素的相对重要性分数。下表显示了优化模型的前十名得分:
优化模型的 10 大特性
大体上,这些变量对应于以下内容:
- 用户在数据集内活动的天数/周数
- 用户活动天数/周数的比例
- 用户注册了多长时间
- 每次会话的平均赞数
- 活动最后一周的平均互动次数
- 最终活动前第三周的会议总数
经过思考,我们可以看到其中许多是高度相关的,注册的周数( weeksRegistered )和注册的天数( daysRegistered )。这些功能应该在模型开发之前就已经删除了。这让我们深入了解了构建一个好模型的迭代过程!
如果我能让时间倒流
正如我们所看到的,我们可以对我们的模型构建过程进行一些调整,将它从一个普通的 B 端轨道变成最受欢迎的专辑。
- 探索更多行为改变特征。目前,我们有一个变量,看起来是最近两周与前两周相比的活动比率。也许在特定时间段内查看歌曲播放比率或会话计数比率有更强的预测特征。
- 不要用厨房水槽的方法来处理模型特征。通过把所有东西都扔进模型,我们让自己暴露在异常值面前,扭曲了我们的模型。
- 调整并再次调整:尝试更多的超参数,并绘制不同参数值下 F1 的差异。这将为您提供模型何时开始过度拟合以及最佳范围在哪里的指示。一旦你找到了那个信息,你就在那个范围内调谐。
- 把它带到云上:我们使用的数据只是 AWS 或 IBM Watson 上的 12GB 大数据集中的 124MB。通过在 Spark 中编写所有内容,我们确保了它的可扩展性。我们可以轻松地将代码转移到 Spark 集群上运行,对于这些集群来说,大数据不是什么挑战。
那么,谁准备好复出巡演了?
如果你喜欢在这个模型构建的引擎盖下修修补补,那么请查看我在 GitHub 上的知识库:https://github.com/bev-o-neill/DSND-p7-Sparkify
感谢乐队成员 Udacity,他们提供了数据集供我们使用。
深度学习如何通过实时犯罪警报保护您的安全
变更数据
使用卷积神经网络打开 911 系统
图片来自市民,经允许转贴
公民在美国各大城市全天 24 小时扫描数千个公共急救无线电频率。收集的信息用于向超过 500 万用户提供关于火灾、抢劫和失踪人员等事件的实时安全警报。让人们每天听 1000 多个小时的音频使公司推出新的城市非常具有挑战性。为了继续扩大规模,我们建立了能够从音频中发现关键安全事件的 ML 模型。
我们的定制软件定义无线电(SDR)可捕捉大量射频(RF ),并创建优化的音频剪辑,发送至 ML 模型以标记相关剪辑。标记的片段被发送给运营分析师,以在应用程序中创建事件,最后,事件附近的用户会收到通知。
图一。安全警报工作流程(图片由作者提供)
使公共语音转文本引擎适应我们的问题领域
图二。使用公共语音转文本引擎的剪辑分类器(图片由作者提供)
我们从基于单词错误率(WER)的最高性能的语音到文本引擎开始。有很多警察使用的特殊代码不是普通方言的一部分。例如,一名 NYPD 军官通过发送“信号 13”请求增援部队。我们使用语音上下文为我们的领域定制了词汇表。
我们还增加了一些词来适应我们的领域,例如,“攻击”不是口语中使用的,但在我们的用例中很常见。我们必须使我们的模型偏向于检测“攻击”而不是“盐”。
调整参数后,我们能够在一些城市获得合理的转录准确度。下一步是使用音频剪辑的转录数据,并找出哪些与公民相关。
基于转录和音频特征的二元分类器
我们建立了一个二元分类问题的模型,将转录作为输入,置信度作为输出。 XGBoost 在我们的数据集上给了我们最好的性能。
我们从一位曾在执法部门工作过的人那里了解到,在一些城市,关于重大事件的无线电广播之前会有特殊警报声,以引起当地警察的注意。这个额外的特性有助于使我们的模型更加可靠,尤其是在抄写错误的情况下。我们发现的其他一些有用的特性是警察频道和传输 id。
我们在运营工作流程中 A/B 测试了 ML 模型。在运行测试几天后,我们注意到仅使用模型标记剪辑的分析师创建的事件没有降级。
我们在几个城市推出了这种模式。现在,一名分析师可以同时处理多个城市,这在以前是不可能的!有了新的运营闲置产能,我们能够启动多个新城市。
图 3。模型推出导致分析师的音频显著减少(图片由作者提供)
超越公共语音转文本引擎
这个模型并不是解决我们所有问题的灵丹妙药。我们只能在几个音频质量好的城市使用它。公共语音转文本引擎在手机型号上进行训练,其声学特性与收音机不同;结果,转录质量有时不可靠。旧的模拟系统噪音很大,转录完全不能用。
我们尝试了来自多个提供商的多个模型,但没有一个模型是在类似于我们数据集的声学配置文件上训练的,并且不能处理嘈杂的音频。
我们探索了用根据我们的数据训练的引擎替换语音转文本引擎,同时保持管道的其余部分不变。然而,我们需要几百个小时的转录数据来制作我们的音频,这非常缓慢而且昂贵。我们可以选择优化这个过程,只转录我们的词汇表中定义的“重要”单词,并为不相关的单词添加空格——但这仍然只是工作量的逐渐减少。
最终,我们决定为我们的问题域构建一个定制的语音处理管道。
用于关键词识别的卷积神经网络
由于我们只关心关键词的存在,我们不需要找到正确的单词顺序,可以将我们的问题简化为关键词识别。这是一个更容易解决的问题!我们决定使用在我们的数据集上训练的卷积神经网络(CNN)来这样做。
在递归神经网络(RNNs)或长短期记忆(LSTM)模型上使用 CNN 意味着我们可以更快地训练和更快地迭代。我们还使用 Transformer model 进行了评估,它是大规模并行的,但需要大量硬件来运行。由于我们只是寻找音频片段之间的短期依赖性来检测单词,计算简单的 CNN 似乎是比 Transformers 更好的选择,它释放了硬件,使我们能够更积极地进行超参数调谐。
图 4。使用 CNN 进行关键词识别的剪辑标记模型(图片由作者提供)
我们将音频片段分成固定时长的子片段。如果一个词汇出现,我们给一个子片段一个肯定的标签。然后,如果在一个音频剪辑中发现任何这样的子剪辑,我们就将它标记为有用的。在训练过程中,我们尝试了改变子片段的持续时间如何影响我们的收敛性能。长剪辑使得模型更难判断剪辑的哪个部分是有用的,也更难调试。短剪辑意味着单词部分出现在多个剪辑中,这使得模型更难识别它们。我们能够调整这个超参数并找到一个合理的持续时间。
对于每个子片段,我们将音频转换成 MFCC 系数,并添加一阶和二阶导数。这些特征是以 25 毫秒的帧大小和 10 毫秒的步距生成的。这些特征然后被输入到一个基于 Keras 序列模型的神经网络中,该模型使用 Tensorflow 后端。第一层是高斯噪声,这使得该模型对于不同无线电信道之间的噪声差异更加鲁棒。我们尝试了一种替代方法,即人为地将真实噪声叠加到剪辑上,但这显著地减慢了训练时间,并且没有有意义的性能增益。
然后我们添加了 Conv1D、BatchNormalization 和 MaxPooling1D 的后续层。批量标准化有助于模型收敛,最大池有助于使模型对语音中的微小变化以及信道噪声更加鲁棒。此外,我们尝试添加 dropout 层,但这些并没有有意义地改善模型。最后,我们添加了一个密集连接的神经网络层,它通过 sigmoid 激活馈入单个输出密集层。
生成标记数据
图 5。音频剪辑的标记过程(图片由作者提供)
为了标记训练数据,我们为注释者提供了我们领域的关键字列表,并要求他们标记剪辑中的开始和结束位置,以及单词标签(如果有任何词汇出现的话)。
为了确保注释的可靠性,我们在注释器之间有 10%的重叠,并计算它们在重叠的剪辑上的表现。一旦我们有了大约 50 个小时的标记数据,我们就开始训练过程。我们在迭代训练过程的同时不断收集更多的数据。
由于我们的词汇中有些词比其他词更常见,我们的模型在常见词上有合理的表现,但在例子较少的罕见词上有困难。我们试图通过在其他剪辑中叠加单词“话语”来创建这些单词的人工示例。然而,性能的提高与实际获得这些词的标记数据并不相称。最终,随着我们的模型在常用词方面的改进,我们在未标记的音频片段上运行它,并排除了模型发现这些词的片段。这有助于我们减少未来标签中的冗余单词。
模型发布
经过几次数据收集和超参数调整的迭代,我们能够训练一个对我们的词汇具有高召回率和合理精确度的模型。高召回率对于捕捉关键安全警报非常重要。有标记的剪辑总是在发送警报之前被收听,所以误报不是一个大问题。
我们在纽约市的一些区测试了这个模型。该型号能够将音量降低 50–75%(取决于频道)。它也明显优于我们在公共语音到文本引擎上训练的模型,因为纽约市由于模拟系统而具有非常嘈杂的音频。
有点令人惊讶的是,我们随后发现该模型可以很好地转换到来自芝加哥的音频,即使该模型是根据纽约市的数据训练的。在收集了几个小时的芝加哥片段后,我们能够从纽约模式中转移学习,以在芝加哥获得合理的表现。
结论
我们带有定制深度神经网络的语音处理管道广泛适用于美国主要城市的警察音频。它从音频中发现关键的安全事件,允许 Citizen 迅速扩展到全国各地的城市,并为维护社区安全的使命服务。
选择计算简单的 CNN 架构而不是 RNN、LSTM 或 Transformer,并简化我们的标记过程是重大突破,使我们能够在很短的时间内和有限的资源下胜过公共语音到文本模型。
深度学习如何加速制药业的药物发现
深度学习为人工智能药物发现方法提供动力
在长期失望的人中有一个常见的重复,它有点像这样:“如果这是未来,我的喷气背包在哪里?”将这种对复古未来的渴望与无处不在的计算世界、可编程细胞和复兴的太空探索相提并论,粗略一查就会发现这种抱怨听起来不合时宜。对一些人来说,这种错位的怀旧未来主义可能会非常持久。这导致了一种倾向,即坚持那些事后看来古怪的预测,而忽略了无人能预测的惊人现实。然而,随着深度学习用于药物发现,我们现在能够预测更多!这在制药工业中非常重要。
应用于人工智能,具有这种行为方式的人可能会按照“AlexNet 已经过去近 8 年了,我的自动驾驶汽车/人工智能介导的乌托邦/压抑的人工智能霸主在哪里?”看起来 2010 年中期的期望确实没有实现,对下一个人工智能冬天的预测在悲观主义者中越来越流行。本文的目标是讨论在药物发现的现实世界应用中有意义的机器学习进展。我希望说服你考虑另一个古老的格言,这个来自人工智能研究人员,稍微解释一下:“人工智能只是人工智能,直到它工作,之后它只是软件。”我们将看到,几年前机器学习中的前沿基础研究,现在通常被命名为“仅仅”数据科学(甚至是分析),并在扰乱制药行业方面取得了真正的进展。药物发现的深度学习方法甚至有很大的机会改变生活,更好地为世界做有意义的好事。
生物医学成像中的计算机视觉和深度学习
几乎是科学家一接触到计算机,就有可能将图像上传到计算机上,而且几乎是在那之后,人们就开始努力对这些图像进行数字化处理。这项工作的大部分过去和现在都专注于处理生物医学图像,如 X 射线、超声波和 MRI 数据。在“优秀的老式人工智能”时代,这通常意味着对边缘和亮度等简单特征的手工逻辑陈述。在 20 世纪 80 年代,有一个向整合监督学习算法的转变,但这些仍然依赖于手工设计的功能。简单的监督学习模型(例如线性回归或多项式拟合)将对通过诸如 SIFT(尺度不变特征变换)和 HOG(梯度方向直方图)等算法提取的特征进行训练。但是,几十年前就已经调查了将导致实用深度学习的发展,这应该不足为奇。卷积神经网络首次应用于生物医学图像是在 1995 年,当时 Lo 等人 推出了一种用于检测肺部 X 射线中癌结节的模型。他们的方法与我们今天已经习惯的方法略有不同,推理需要大约 15 秒,但概念本质上是相同的,通过反向传播一直到卷积核来完成训练。罗等人使用的模型有两个隐藏层,而当今流行的深度网络架构通常有一百个或更多。
快进到 2012 年:随着 AlexNet 的出现,conv 网大受欢迎,在现在著名的 ImageNet 数据集上产生了性能上的重大飞跃。AlexNet 是一个 conv 网络,具有 5 个卷积层和 3 个在游戏 GPU 上训练的密集连接层,它的成功在机器学习领域非常有名,以至于人们谈论 ML 和 AI 的不同利基的“ImageNet moments”。比如,“随着 2018 年超大型变压器模型的发展,自然语言处理可能已经有了它的 ImageNet 时刻”,或者“强化学习仍在等待它的 ImageNet 时刻。”自 AlexNet 开发以来已经过去了近十年,我们在深度学习计算机视觉模型方面已经有了大量的增量改进。除了分类之外,应用已经扩展到通常包括分割、深度估计和场景重建以及许多其他用途。围绕生物医学图像分析的深度学习的热潮的一个副作用是噪音不可避免的增加。2019 年发表的~ 17000 篇深度学习论文并不是每一篇都值得一读。许多结果可能会过度拟合他们的小数据集,并且没有多少对正在研究的基础科学或机器学习做出实质性贡献。但是,之前对机器学习毫无兴趣的学术研究人员对深度学习的狂热揭示了一个重要的现实。深度学习可以做经典计算机视觉算法可以做的任何事情(参见 Cybenko 和 Hornik 的通用逼近定理),它通常可以更快更好地做到这一点,同时减少与每个新应用相关的繁琐的人工工程工作。
抗击被忽视疾病的难得机会
这就把我们带到了今天的话题——药物研发,一个需要大换血的行业。制药公司和他们雇佣的人很快提醒我们将一种新药推向市场的巨大成本。这些成本很大程度上是由于许多药物进入了研发管道,并在被丢弃前停留了一段时间。行业估计开发一种新药的成本可能高达 25 亿美元或更多,尽管这个数字可能在很大程度上受到行业报告高成本的激励的影响,以证明其产品的溢价。在任何情况下,由于这种高成本和相对较低的回报率,像抗生素类药物的基本工作被降低了优先级。
这也意味着被恰当命名为被忽视疾病类别的疾病,包括不成比例的被认为治疗无利可图的热带疾病和发病率低的罕见疾病。尽管患每种疾病的人数相对较少,但患这种或那种罕见疾病的总人数却相当高。据估计,全世界患有罕见疾病的人数约为 3 亿。但是,由于令人沮丧的预测,即使这个数字也可能是低的:大约 30%患有罕见疾病的人永远活不到五岁。
罕见疾病的【长尾】代表着改善大量生命的实质性机会,机器学习和大数据工程很乐意介入。制药行业对这些罕见疾病的盲点,特别是没有 FDA 批准的治疗方法的孤儿疾病,为生物学家和机器学习开发者的创新小团队提供了立足之地。考虑到大型制药公司雇佣的数据科学家的数量,用一个小团队建立真正新颖的东西需要找到一个阴影点,以更好地避免更多规避风险的既定实体的饥饿的眼睛。
犹他州盐湖城的一家这样的初创公司正在尝试这样做。 Recursion Pharmaceuticals 将缺乏针对被忽视疾病的有意义药物开发视为制药行业的空白,以推动全新工作流程的发展。基于自动化高通量显微镜和机器学习,他们通过机器人显微镜和液体处理产生大量新数据。深度神经网络的泛化和灵活性利用产生的海量数据在实验噪音中揭示疾病/治疗表型。截至 2019 年底,他们已经从的数千次实验中产生了超过 4pb 的数据。他们打包了他们为 NeurIps 2019 竞赛赛道制作的一小部分数据,你可以从的 RxRx 网站下载(46 GB)数据集来自己玩。
本文描述的工作流程很大程度上是基于 Recursion Pharmaceuticals 的白皮书【pdf】中的信息,但这种方法没有理由不能作为传统制药公司未能取得进展的其他领域的灵感。事实上,这一领域的其他初创公司包括专注于衰老相关疾病的 Bioage 实验室、致力于癌症的著名实验室,以及专注于各种缺乏治疗选择的疾病的 TwoXAR。这些公司往往是年轻的初创公司,拥有新生的数据管道,他们在其感兴趣的领域采用各种各样的机器学习技术,除了或取代我们今天将讨论的计算机视觉深度学习。
我们将主要关注递归领导的方法,因为他们非常依赖图像模型,他们自 2013 年以来一直存在,他们已经发布了大量关于他们方法的信息,并且他们已经开始产生有希望的结果。我将描述图像分析过程,以及深度学习如何从高层次融入罕见疾病药物发现的工作流程,这些经验教训可以应用于药物发现的其他各种领域。例如,该工作流程可以很容易地通过对肿瘤细胞形态的影响来筛选癌症药物,甚至可以确定单个患者的细胞对一组药物选项的反应。该方法借鉴了非线性 PCA 、语义哈希【pdf】和传统的 conv 网络图像分类的概念。
噪声形态学分类
生物很乱。这在高通量、高含量的显微镜检查中显而易见,也是细胞生物学家经常遇到的难题。任何给定实验产生的图像可能会因批次不同而有很大差异。温度、暴露时间、试剂批次等的波动都可能产生与所研究的表型或候选药物化合物的效果无关的误导性变化。实验室的气候控制在夏天和冬天表现不同吗?有人在午餐时将含有细胞的 96 孔板放在外面,然后放在显微镜上吗?有人换了一种培养基成分的供应商吗?供应商是否更换了自己的供应商?可能导致实验差异的变量数量是巨大的。在数据驱动的药物发现中,跟踪和分离非实验性扰动(也称为非预期噪声)的影响是一个主要挑战。
从一个实验到下一个实验,显微镜图像可能会有很大的不同。图像亮度、细胞形状、细胞器形状和许多其他特征会由于相关的生理效应或随机实验噪声而变化。本文顶部面板中的图像均来自斯科特·威尔金森和亚当·马库斯拍摄的转移性癌细胞的同一张公共域显微照片。强度和形态的变化代表了实验噪声,并且是使用图像处理扭曲创建的。这些是人们可能用来在分类任务中正则化深度神经网络的相同类型的增强,因此毫不奇怪,给定大数据集的大模型的泛化能力是在噪音海洋中揭示生理上有意义的差异的逻辑选择。
噪声强度变化中代表治疗效果和副作用的变化。
罕见疾病的潜在原因通常是基因突变。为了建立模型来发现这些疾病的治疗方法,了解大范围突变的影响以及由此产生的表型的相关性是有帮助的。比较特定罕见疾病的候选治疗方法受益于对数千种不同突变的库的训练,这些突变可以通过使用小干扰 RNA (siRNA)敲低基因表达来模仿。这有点像初学走路的孩子抓住你的脚踝:即使你能跑得很快,如果你的侄女或侄子每条腿都挂着,你的效率会低得多。siRNA 的工作方式非常相似,干扰 RNA 的小序列粘附在特定基因的信使 RNA 的匹配片段上,阻止这些基因完全表达。
通过对成千上万的突变而不是特定疾病的单一细胞模型进行训练,神经网络可以学习在高维潜在空间中对表型进行编码。由此产生的代码允许评估药物使疾病表型更接近健康表型的能力,每个表型由一组多维坐标表示。同样,药物副作用可以嵌入编码的表型表示中,并且不仅可以根据减少疾病症状,还可以根据有害副作用的最小化来评估药物。
表示对疾病细胞模型(用红点表示)治疗效果的图表,将编码的表型向健康表型(蓝点)靠拢。这是一个多维潜在空间中表型编码的简化三维表示。
用于此工作流的深度学习模型将与其他大型数据集的分类任务非常相似,尽管如果您习惯于处理少量类别,如 CIFAR-10 和 CIFAR-100 数据集,数以千计的不同分类标签将需要一些时间来适应。除此之外,这种基于图像的药物发现将很好地与具有大约一百层的相同类型的基于深度 DenseNet 或 ResNet 的架构一起工作,这可能在像 ImageNet 这样的数据集上获得最先进的性能。通过将这些层之一的激活值作为表型的高维编码,可以通过在编码空间中的位移来分析疾病病理以及治疗、副作用和其他痛苦之间的关系。这种表型编码可以进行定制的正则化(例如最小化不同激活的协方差)以减少编码相关性或用于其他需要的目的。下图是一个简化的示例模型,黑色箭头表示卷积+池化操作,蓝色线条表示密集连接,为了清晰起见,减少了层数(没有显示剩余连接)。
用于药物发现的深度学习模型的简化图示
深度学习在药物研发和制药行业的未来
将一种新药推向市场的巨大成本导致制药公司忽视了对严重疾病所需药物的发现和开发,而青睐畅销药物。初创公司中规模较小、精通数据的团队更有能力在这一领域开发新的创新,而被忽视和罕见的疾病提供了一个机会,可以借此获得一只脚,并在数据驱动的管道中展示机器学习的价值。这种方法的价值证明体现在实质性进展和已经进入第一阶段临床试验的几种药物上,这些成就是由 Recursion Pharmaceuticals 等公司的数百名科学家和工程师团队取得的。其他初创公司紧随其后:TwoXAR 有几种候选药物正在通过其他疾病类别的临床前试验。
可以预计,用于药物开发的深度学习计算机视觉方法将对大型制药公司和医疗保健产生重大影响。我们应该很快就会在针对普遍疾病(包括像心脏病和糖尿病这样的现代生活方式疾病)的新疗法的开发中看到这种影响,以及在治疗迄今为止被搁置一旁的疾病方面急需的进展。
假技术会变得比核武器更危险
以及为什么我们应该认真对待这项技术
https://images.app.goo.gl/mBRyJxxBq1bHFooN7
“当权者不必再压制信息。他们现在可以向我们灌输太多,没有办法知道什么是真实的,什么不是。随着深度造假技术的发展,成为知情公众的能力只会越来越差。”安德鲁·施雷克
我们都听过唐纳德·特朗普把一些电视台称为“假新闻”,我们不应该听他们的。一半人相信他,另一半人不相信。
事实是,我们真的不知道该相信我们在电视或互联网上看到的东西。界限已经变得模糊,每个人都有自己的议程,他们希望观众看到什么。
如果你看了一段视频或看到一张照片,上面是你所爱的和信任的人,比如某个名人或竞选美国总统的人做了或说了一些可怕的事情,会怎么样?
你对这个人的看法会改变吗?你打赌你的屁股会。
现在你不知道这是一个假视频,也不知道这个人真的没有做任何事情。但是你的眼睛欺骗了你,你相信你所看到的。
该视频是由某人使用 deepfake 技术创建的,在该技术中,视频被操纵以对该人造成伤害。
那么,deepfake 到底是什么?让我们来看看。
什么是 Deepfake?
Deepfake 是人们利用神经网络创建看起来和听起来像真东西的假视频或音频记录的技术。他们制作这些视频是为了开玩笑,让名人陷入尴尬的境地,比如有一张名人拍色情照片,或者有政客说一些他们通常不会说的话。
这开始于 1997 年左右的视频重写项目中的计算机视觉领域的学术研究。它修改了一个人说话的现有视频片段,描述了在不同的音轨中说话的嘴。该项目使用机器学习技术在受试者发出的声音和受试者面部形状之间建立联系。
Reddit 的业余用户发现了这一点,开始制作名人头像出现在其他人身上的搞笑视频。deepfake 一词是由 Reddit 上的一个同名社区创造的,该社区互相交换幽默图片和视频。
既然你知道 deepfake 是什么,让我们来看看它是如何工作的。
它是如何工作的?
这项技术使用了生成式对抗网络(GANs),其中两个机器学习模型一决雌雄。第一个模型在数据集上训练,然后创建视频伪造,而另一个模型试图检测伪造。这样继续下去,直到第二个模型不能检测到第一个模型中的假货。训练数据集越大,就越容易创建一个非常可信的 deepfake 来愚弄人们。
来自斯坦福大学、普林斯顿大学、马克斯·普朗克信息学研究所和 Adobe Research 的研究人员进行了一些测试,以显示操纵和编辑这些视频和图片是多么容易。科学家们结合了多种技术来制作视频赝品,并测试其简单程度。
首先,他们扫描目标视频,分离出构成受试者说话的声音。然后他们将这些声音与伴随每个声音的面部表情相匹配。最后,他们创建了受试者脸部下半部分的 3D 模型。
当其中一名科学家编辑视频的文本时,该软件将上述三个步骤中收集的所有信息结合起来,构建新的镜头,以匹配输入的文本。然后将其复制到源视频上,以创建最终结果。
我们正处于这项技术的早期阶段,该软件的功能还存在一些限制。但是有一些网站运行他们自己版本的软件,公众可以使用和玩。
在有人受伤之前,这总是有趣的游戏
这是我母亲过去经常对我说的话,我会和朋友们一起胡闹,我们中的一个开始变得疯狂。这是乐趣变得咄咄逼人和脾气爆发的地方。
任何新技术在开始时都是有趣和令人愉快的,当每个人都在用它逗别人笑的时候。但迟早,错误的人会试图找出一种方法来使用这个闪亮的新玩具来执行不良行为。历史告诉我们,这是不可避免的。
Deepfake 是新出现的,仍处于起步阶段,更多的是人们的爱好。但在未来几年,当更好的技术出现,有人发现如何制造这种邪恶时,它可能对我们所有人都具有潜在的破坏性。
你能想象有人发布一个深度伪造的视频,描述美国总统说一场大规模的核攻击正在进行中,或者一种不可阻挡的计算机病毒抢走了我们所有的钱,或者一种不治之症的爆发威胁着毁灭人类吗?
整个国家都会陷入巨大的恐慌,我们也不知道该怎么办。当人们试图逃离这个国家寻找安全避难所时,骚乱和抢劫就会发生。
结论
到目前为止,deepfakes 是一个有趣的新玩具,供人们玩,也是一个令人讨厌的东西。他们可以把布拉德·皮特的头像贴在一个拍摄色情片的演员身上,或者贴在乔·拜登说了一些不利于他竞选的话上。这些视频很容易被发现,并告诉他们是假的。
但是随着这项技术的成熟,如果错误的人掌握了它,后果可能是灾难性的。参议员马尔科·卢比奥称之为现代版,他说:“在过去,如果你想威胁美国,你需要 10 艘航空母舰、核导弹和远程导弹。今天,你只需要进入我们的互联网系统,我们的银行系统,我们的电网和基础设施,而且越来越多地,你需要的是制作一个非常逼真的假视频的能力,这可能会破坏我们的选举,这可能会使我们的国家陷入巨大的内部危机,并深深削弱我们。”
无论 deepfake 视频会有什么样的结果,我们都应该对它在未来的应用保持警惕。这项技术可能对我们美国人造成的潜在灾难是我们可能永远也不会看到的。
DeepMind 的虚幻算法解释
最佳深度强化学习
凯文·Ku 在 Unsplash 上的照片
概观
深度学习和强化学习的结合为人工智能带来了大量机会。然而,稀疏的奖励环境一直是强化学习研究者长期研究的挑战。更新无信息奖励信号的参数通常会使学习收敛到次优策略。
DeepMind 的无监督强化和辅助学习(UNREAL)代理采取了一种独特的方法来解决这个问题。它使用辅助任务和伪奖励来自主选择环境中与实现其目标最相关的特征。
在这里,我们概述了 DeepMind 的新虚幻代理及其与其他最先进的算法相比的性能。
虚幻是如何工作的?
使用 A3C
虚幻的核心代理使用异步优势行动者-批评家(A3C)来优化其策略和价值函数。快速回顾一下 A3C, Arthur Juliani 在这里有一段精彩的介绍:
[## 使用 Tensorflow 的简单强化学习第 8 部分:异步行动者-批评家代理(A3C)
在本文中,我想提供一个教程,介绍如何在…
我们可以将 A3C 损失定义如下:
A3C 损失:价值损失,政策损失,熵正则化
建筑
虚幻建筑(贾德伯格,2016)
我们将逐步了解虚幻建筑的不同部分:
- 基础 A3C 代理:使用 A3C 的策略上的训练来更新代理的策略和值函数的组件
- 辅助控制任务:用户预设的额外任务,针对特定行为给予代理人伪奖励
- 辅助奖励任务:帮助从环境中提取相关特征的附加奖励预测任务
- 价值函数回放:价值函数附加非政策培训
输入是传入卷积层并输入 LSTM 的图像。需要注意的一件重要事情是,四个组件中的每一个都使用相同的 T21 卷积网络和 LSTM 层。例如,名为“像素控制”的辅助控制任务与“基础 A3C 代理”共享这两个层
通过让这些任务与主 A3C 策略共享参数,代理能够从环境中提取有意义的信息,而无需直接向其目标优化。
这种直觉在以后会很有用!
因为我们假设之前了解 A3C,所以让我们深入到架构的后三个部分。请记住,当架构的其他部分同时被训练时, A3C 仍然在后台使用策略更新(跨环境的几个实例)来优化它的策略和值功能。
辅助控制任务
我们可以将辅助任务视为“支线任务”虽然他们不直接帮助实现总体目标,但他们帮助代理了解环境动态并提取相关信息。反过来,这有助于代理了解如何实现所需的整体最终状态。我们也可以把它们看作是代理交互的额外的伪回报函数。
总的来说,目标是最大化两项之和:
- 预期累积外在奖励
- 辅助奖励的预期累计金额
总体最大化目标
其中上标 c 表示辅助控制任务奖励。以下是 UNREAL 使用的两个控制任务:
- 像素变化(像素控制):代理试图最大化像素值的变化,因为这些变化通常对应于重要事件。
- 网络特征(特征控制):代理试图最大化激活给定层中的所有单元。这可以迫使策略和价值网络提取更多与任务相关的高级信息。
关于如何定义和学习这些任务的更多细节,请随意浏览本文[1]。现在,只需要知道代理试图找到精确的 Q 值函数来最好地完成这些辅助任务,使用用户定义的辅助奖励。
好的,太好了!现在我们只需将外部和辅助奖励相加,然后使用总和作为新定义的奖励来运行 A3C!对吗?
聪明有多不真实
实际上,虚幻做了一些不同的事情。它不是训练一个单一策略 来优化这个奖励,而是在基础 A3C 策略 之上为每个任务训练一个策略。虽然所有辅助任务策略与基础 A3C 代理共享一些网络组件,但是它们每个也添加单独的组件来定义单独的策略。
例如,“像素控制”任务在共享卷积网络和 LSTM 之后有一个解卷积网络。输出定义了像素控制策略的 Q 值。(有关实现的详细信息,请浏览[1])
每个策略都优化了 n 步 Q 学习损失:
使用 N 步 Q 的辅助控制损失
更令人惊讶的是,我们从来没有明确地使用这些辅助控制任务策略。即使我们发现哪些动作优化了每个辅助任务,我们也只在环境中使用基础 A3C 代理的动作。那么,你可能会想,所有这些辅助训练都是徒劳的!
不完全是。关键是 A3C 代理和辅助控制任务之间有架构的共享部分!当我们优化辅助任务的策略时,我们会更改基本代理也使用的参数。我喜欢称之为“推动效应”
更新共享组件不仅有助于学习辅助任务,还能更好地装备代理,通过从环境中提取相关信息来解决整体问题。
换句话说,与不使用辅助任务相比,我们从环境中获得了更多的信息。
辅助奖励任务
就像任何 RL 问题一样,一个代理人必须识别导致更高回报的状态。当然,这就是我们的价值函数的目的,对吗?
这是它变得毛茸茸的地方。我们有两个问题:
- 奖励稀少的环境使得价值函数训练变得困难,因为代理人提取有价值信息的能力降低
- 我们不能简单地过度采样高回报重播过渡,因为这将使我们的价值网络过饱和
于是,虚幻使用了一个叫做奖励预测的辅助奖励任务。给定代理先前观察到的一系列状态,代理试图预测即时奖励。
用于预测奖励的状态序列
但是,类似于辅助控制策略,我们在任何地方都不显式使用这些预测奖励!注意奖励预测模块如何使用与基础 A3C 代理相同的卷积网络。然后,该输入被连接并通过完全连接的层。在实践中,UNREAL 通过将预测分为三类来使用交叉熵损失:负面、零和正面。
代理只学习奖励预测来形成用于特征选择的基本 A3C 参数。
随着代理学会正确预测这些奖励,它会自然地挑选出对预期未来奖励重要的特征。这有助于基础 A3C 代理学习。
此外,当训练奖励预测时,我们可以将采样从经验回放倾斜到具有高奖励的过渡,而不会使价值网络过饱和。在实践中,不真实的样本使得非零回报的概率为 50%。
结果,我们有效地解决了上面的两个障碍:
- 我们可以高回报地对过渡进行过采样,而不会受到之前的影响
- 不管环境有多稀疏,我们都可以从环境中提取信息
最后,我们注意到 LSTM 是如何不被用于奖励预测的。相反,我们只使用原始卷积网络输出。想法?我们只想要即时的信息来估计即时的回报。我们不会看过去太远,也不会看未来太远。
体验回放?但是……为什么呢?
我们已经使用经验重放进行辅助奖励任务更新,但是我们能在其他地方应用经验重放抽样吗?LSTM 让这变得困难。当我们有一个隐藏状态时,在更新网络参数后,存储该隐藏状态变得无关紧要。
有趣的是,UNREAL 在其价值网络的 A3C 政策学习之上进行政策外学习。对于这种偏离策略的学习,我们忽略使用存储的隐藏状态,并假设连续样本中的第一个状态开始一个情节。这提高了鲁棒性,因为这改变了我们的代理人遇到的体验。
n 步值重放损失
但是,我们为什么要这样做呢?
我们可以把 RNN 想象成一个随时间推移的滑动窗口。它考虑到了某一段时间和观察结果。然而,如果我们将代理放入一个没有先前观察的任意起始状态,它可以完全利用奖励预测任务发现的新特征,而不是利用隐藏状态中的过去观察。
把所有的放在一起
整体优化损失如下所示:
为虚幻代理优化的总损失
其中每个损失被加权。
有希望的结果
虚幻击败了许多强有力的竞争者,包括 A3C 和优先决斗 DQN。在 57 场 Atari 游戏后,它的表现比人类的正常表现好 880%。
虚幻的,带有回报预测和价值重放的 A3C,A3C(贾德伯格,2016)
虚幻也在迷宫中与这些代理人对抗。事实证明,它比其他方法更具数据效率。事实上,在其中一个环境中,虚幻代理使用了大约 10%的数据来达到 A3C 性能。这是一个显著的减少。
迷宫结果比较(贾德伯格,2016 年)
当然,这篇论文[1]发表于 2016 年。因此,几乎可以保证,更多最先进的算法比虚幻的算法表现得更好。然而,特别是这个代理,为奖励稀少的环境中的深度强化学习代理开辟了一条奇妙的途径。
就是这样!
这就结束了对 DeepMind 的虚幻代理的概述,以及为什么它是一种解决 RL 问题的令人难以置信的健壮方法。有关该算法的更详细的概述,请随意查看下面的论文或查看 DeepMind 的官方网站:
我们在 DeepMind 的主要任务是推动人工智能的边界,开发可以学习解决任何问题的程序…
deepmind.com](https://deepmind.com/blog/article/reinforcement-learning-unsupervised-auxiliary-tasks)
参考
[1] M. Jaderberg,V. Mnih,W. Czarnecki,T. Schaul,j .雷博,D. Silver,K. Kavukkcuoglu,无监督辅助任务的强化学习 (2016)。
从经典到最新,这里有讨论多代理和单代理强化学习的相关文章:
多主体 RL 问题的行动者批评方法
towardsdatascience.com](/openais-multi-agent-deep-deterministic-policy-gradients-maddpg-9d2dad34c82) [## 分层强化学习:封建网络
让电脑看到更大的画面
towardsdatascience.co](/hierarchical-reinforcement-learning-feudal-networks-44e2657526d7)
我如何通过 AWS 云从业者考试
一个 15 岁的孩子为什么要写这个考试?
亚马逊网络服务云从业者考试是一项面向“具备有效展示对 AWS 云的整体理解所必需的知识和技能的个人的考试,独立于其他 AWS 认证所涉及的特定技术角色。”对我来说,最初,我对隔离感到厌倦,想接受挑战。我一直热爱技术和机器学习,所以这是一个完美的目标。但除此之外,我想获得这个认证,因为我想为我的未来积累经验,我发现它很迷人。各种各样的服务和每种服务都有许多独特的用例,它们相互交织在一起,创建了这个庞大的系统,能够完成一些令人震惊的事情。
我用来学习的资源
网上有很多很好的资源,你可以用来为这次考试做准备,但我会提供一些我认为最有用、最有帮助的课程。一、《AWS 认证云从业者考试培训 2020》由 Neal Davis 在 Udemy 上完美总结了你需要知道的一切。但我喜欢这门课的是戴维斯如何用极其简单的术语解释一切。然而,虽然它很简单,但仍然足够深入,涵盖了您需要了解的所有内容。作为一个之前没有 AWS 经验的青少年,当他以直截了当的方式极其详细地解释一切时,我发现这非常有益和方便。完成这个课程后,我在 Udemy 上参加了 Neal Davis 的“AWS 认证云从业者 500 练习试题”。我想说,这门特定的课程及其练习题是帮助我通过考试的最重要的事情之一,因为这 500 套练习题中出现的许多问题也会出现在实际考试中,这无疑使考试变得容易得多!在意识到尼尔·戴维斯的课程最适合我之前,我经常从一门课程跳到另一门课程,这实际上非常有益,因为有时戴维斯解释事情的方式对我来说没有意义,所以我会看看其他讲师会如何解释。因此,如果需要的话,下面是几门值得简要浏览的课程。
- AWS 认证云从业者 2020 由 Zeal Vora 在 Udemy 上发布
Zeal 是 Udemy 著名的高级讲师之一。Zeal 主要作为云安全顾问工作,并帮助…
www.udemy.com](https://www.udemy.com/course/aws-certified-cloud-practitioner/)
- 终极 AWS 认证云从业者— 2020 年夏羽·马瑞克在 Udemy 上发表
夏羽是一名解决方案架构师、顾问和软件开发人员,他对所有事物都有特殊的兴趣…
www.udemy.com](https://www.udemy.com/course/aws-certified-cloud-practitioner-new/)
- AWS 云实践者—CLF-C01(LA)—Tia Willams 在 Linux Academy 上的文章—每个单元结束时的测验都非常有用,是很好的练习
除了这些课程之外,我还使用了多个 YouTube 视频和媒体文章来更深入地理解某个主题。我肯定会推荐一本名为“令人敬畏的云”的书,就在 medium 上。
了解云计算更多信息的地方
medium.com](https://medium.com/awesome-cloud)
他们有几十篇比较服务的内容丰富的文章,因为我经常很难找到一些类似服务之间的差异,然而这份出版物从未能消除我所有的疑虑。此外,我也强烈推荐云专家的出版物,其中有大量深入介绍所有服务和主题的文章。
来自我们云计算社区的故事
read.acloud.guru](https://read.acloud.guru)
最后,一个常见但确实非常有效的建议是, AWS 白皮书和指南,如果有什么的话,我建议你至少看一下 AWS 提供的自由练习题,因为它是与你将得到的实际测试相似的问题的最接近的表示。如果没有别的,一定要看看下面我附上的一些白皮书,我认为它们是最有益的。
所有服务概述—
[## 亚马逊网络服务概述
AWS 云提供广泛的基础设施服务,如计算能力、存储选项、网络…
docs.aws.amazon.com](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/introduction.html?did=wp_card&trk=wp_card)
Aws 定价信息—
[## AWS 定价的工作原理
亚马逊网络服务(AWS)帮助您更快地行动,降低 IT 成本,并通过广泛的全球…
docs.aws.amazon.com](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/welcome.html?did=wp_card&trk=wp_card)
架构良好的框架—
[## AWS 架构良好的框架
AWS 架构良好的框架有助于您理解在构建系统时所做决策的利弊…
docs.aws.amazon.com](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html?did=wp_card&trk=wp_card)
我学习了多长时间/学习计划
如前所述,我接受了挑战,在六月初的检疫期间学习并通过了这个考试,并有一个目标是在八月获得认证,这样我就有两个月的时间来学习。虽然看起来时间很长,但不要忘记还有很多服务需要深入了解。总的来说,我每天学习大约 2-3 个小时,然而,我经常短暂休息,让我的大脑从吸收如此多的知识中得到休息。从个人经验来说,有些时候,坐着听完讲座/视频可能会觉得非常无聊和乏味,所以我的建议是跳过这一步,根本不要考虑 AWS。把你的热情和时间留到你感觉有动力并准备好沉浸在呈现给你的大量信息中的那一天。
提示和技巧
现在,对于大多数人来说,作为一个 15 岁就获得认证的人,我有什么通过考试的秘诀吗?
- 嗯,首先,作为一名高中学生,盲目地记忆信息,并在我的大脑中将一条信息与另一条信息联系起来,时间只够通过考试,这是我的专长,我相信大多数学生都有同感。然而,对于具体的考试,我会建议你做完全相反的事情,而不是仅仅播放讲座,听老师像背景音乐一样说话,积极参与到课程中。
- 当我说如果你选择盲目地观看视频而不做笔记或练习测验,你将记不住老师刚才说的任何东西时,我可能是也可能不是从个人经验来说的。通过这次考试,你真正理解所有的服务和它们的真实使用情况是非常重要的,因为这次考试不是简单地检查你是否知道每个服务做什么,而是你是否知道在什么情况下什么服务最适合。
- 虽然我个人在学习时没有做笔记,但我确实写下了我在观看视频时的任何问题,我后来会通过 YouTube 视频和文章找到这些问题的答案。然而,如果我能回到过去,改变我准备这次考试的方式,那就是记笔记。因为虽然通过考试不是完全强制性的,但在考试前的最后几天,拥有一份所有信息都以有组织的方式整齐汇编的文档将会非常有利,因为你会简要地复习你所知道的一切。
- 另一个有益的提示是,也许没有多少人想这么做,那就是把你学到的东西重新教给另一个家庭成员或朋友。举个例子,如果我刚学了某个题目,以为自己真的懂了,我就把家人召集起来,像导师一样给他们讲解我学的东西,把它真正灌输到我的记忆里。通常,在这样做的过程中,他们会问一些后续的问题,我会意识到也许我对此还不够了解,这将促使我回去真正地完全了解它。这种通过教学学习的技巧被称为“被保护人效应”,许多研究表明,
“花时间教授他们所学知识的学生比只花相同时间重新学习的学生表现出更好的理解和知识记忆”。(克里斯蒂安·贾勒特
结论
总之,我当然会建议不管你的年龄,都要写这个考试。我认为拥有这个证书对未来是非常有益的,你将会学到大量有趣的信息。使用我上面提供的技巧、窍门、链接和资源将会极大地帮助你在准备考试的时候更加自信。对于像我一样年轻的人来说,请记住,一个人可以参加这个考试的最小年龄是 13 岁,这表明年龄只不过是一个数字,当你专心做某事时,你能够拥有和获得的知识是无限的。不要让你的年龄成为成就非凡的障碍,年龄只是一个心态问题。我希望这个博客能帮助你通过 AWS 云从业者考试,如果你有任何问题或需要帮助,请不要犹豫,通过 Linkedin 联系我或在下面留下评论!
我的认证—
我是如何转行从事数据分析的?
作为职业转换旅程的故事。从采购专业人员到数据分析师。
伊恩·施耐德在 Unsplash 上拍摄的照片
经过六个月的计划、培训和准备,我最近在新冠肺炎期间开始了我作为一名数据分析师的新职业旅程。我想在这里分享我的旅程和经历,给那些想走较少选择的道路的人。
#背景:
作为一家快速消费品公司的采购专业人士,过去五年,我决定在 2019 年底改变职业生涯。我的目标是在 IT 行业找到一份与数据科学相关的工作。我没想到这种变化会在一夜之间发生,六到九个月是一个很好的估计。我也做好了应对财务压力的准备,这意味着六到九个月的零收入。
#策划:
在当时,这似乎是一个雄心勃勃的目标,也令人生畏。但是,和所有其他雄心勃勃的目标一样,它可以被分解成小步骤。制定计划有助于你始终保持一个清晰的目标和正确的后续步骤。
第一步也是最重要的一步是了解目标职业和行业。这有助于我发现我目前的状态和理想状态之间在经验和技能方面的差距。
在就业市场上,雇主通常既看重经验也看重技能。虽然经验是随着时间积累的,但技能可以在相对较短的时间内学会并掌握。对于数据科学职位,一般技能要求是机器学习模型、数学和统计学以及编程方面的知识。我以前有数学和统计知识,需要获得像 Python 或 SQL 的编程技能。
因此,我开始搜索适合我获得这些技能的教育或培训信息。自学(比如在线 MOOC)是一种选择,但我没有这么做。在我看来,这种方式成本低,但效率低,因为自学需要高度的自律才能有成效。然而,职业培训需要全日制出勤和财政压力,如前所述。兼职培训计划将是最好的两个世界,但我没有找到一个合适的。
一旦我确定了我在培训中的位置,我就辞去了上一份工作,因为它要求全勤。
#训练和准备:
我选择了新加坡的 Metis 项目。该课程兼顾了课堂培训和项目经验。三个月来,我每天都接受充分的挑战,学习新技能。培训快结束时,我开始申请公司,贪婪地寻找工作机会,这样我就可以在培训结束后尽快找到工作。
不幸的是,就在我的训练结束时,世界被新冠肺炎袭击了。市场上的工作在登广告后很快就被收回了。我接到了电话和面试,但由于疫情的情况,许多职位最终都被取消了。鉴于危机,我不得不不断延长预期的就业时间以及调整我对工作范围和薪水的预期等。
在过去的三个月里,在我寄出的 70 多份简历中,有 12 份通过了第一轮面试或技术测试。其中 6 人进入了下一阶段或最后阶段。最后,尽管疫情的情况,我还是收到了一份邀请。
#建议:
最后,我想分享一些给那些想改变职业的人的建议。
- 计划周密,但有时靠运气。
规划始于明确具体的目标。早在你开始计划的时候就了解你的目标行业和目标岗位。具体说明角色和行业,并开始阅读相关资料。您可以计划几种情况。
那么信息收集会有所帮助。你获得的信息越多,你就能更好地做出明智的决定。例如,LinkedIn 是一个很好的起点,但它可能不会提供市场上的所有机会。你可能需要反复核对几个招聘广告,这样你就不会错过你理想的工作。网络和关系是另一个很好的信息来源,你需要它来进行公司文化调查和推荐。
然而,生活充满了惊喜,有时黑天鹅事件。时刻做好准备,这样你才能勇敢地拥抱生活的不确定性。勇气是让你拥抱困难,不断调整你的目标和计划。
2。准备,准备,准备。
我再怎么强调准备的重要性也不为过。这是我过去六个月做的主要事情。意思是在短时间内学会新技能。这也意味着一遍又一遍地练习新学到的技能。
对于新的技能,当你觉得在某个特定领域没有什么需要练习或学习的时候,你可以停止练习。然而,这通常是一种很难达到的状态,因为你学得越多,你就越知道自己不知道的东西。我只在 SQL 实践中达到这种状态。当我已经检查了至少三遍这个问题池,并且能够轻松解决任何 SQL 问题时,我决定停止练习。
除了获得新的技能,我发现把找工作当成为自己制定策略是很有用的。想象你是一个产品;你如何向潜在雇主推销自己?一旦你诚实、真实地审视了自己的优势和劣势,这个策略就会变得清晰。
3。永不放弃。
最后也是最重要的,永远不要放弃,继续尝试。前进的道路并不总是清晰和光明的。有时感到沮丧是正常的,暂时失去动力也是正常的。经常与你的朋友和家人交谈,因为你比以往任何时候都更需要他们的支持。休息一段时间是可以的,但是记得第二天把它放回原处,继续前进。
每一小步都很重要。
希望这篇文章能在你艰难的时候给你一点帮助或启发。保重,注意安全!
我如何在疫情期间找到一份数据分析师的工作?
办公时间
由 Carlos Muza 在 Unsplash 上拍摄的照片
两年前,我来到美国开始攻读经济学硕士学位。第一年后,我有幸获得了一家大型科技公司的暑期实习机会,成为一名数据分析实习生。凭借良好的教育和背景,我完全有信心在毕业后获得一份全职数据分析师的工作。我从 2 月份开始密集申请:创建一份我想要的职位和公司的名单,与校友和这些公司的人建立联系,并为面试做准备。
然后,疫情来了。三月份,我申请的所有角色都被取消了。随着需求的减少和供给的增加,就业市场比以往任何时候都更加拥挤。公司缩小规模并解雇员工。就业市场上出现了许多人才。我的求职之旅突然变得比我预想的长了很多。经历无止境的求职过程,收到拒绝,每周被多个面试搞得焦头烂额,让我感到绝望。
经过几个月的不懈申请,我终于在波士顿的一家初创公司获得了一份全职数据分析师的工作,在那里我有机会做我真正喜欢的事情。回想起来,我想分享三个主要的教训来帮助你度过这段艰难的时光。
由 Austin Distel 在 Unsplash 上拍摄的照片
网络、网络和网络
让我们想想你的申请经历。你打开 LinkedIn,看到一份来自你喜欢的公司的数据分析师职位,决定申请。你花了半个小时定制简历,半个小时写一封引人注目的求职信,又花了半个小时填写申请表。接下来会发生什么?没什么。你只是没有收到公司的回复。两个月后,您收到了一封电子邮件,主题是“感谢您申请[公司名称]”,并附带了熟悉的信息:“我们对您的资历印象深刻;但是,我们已经决定不再推荐你担任这一职务”。
这个故事似乎是我们所有人都很熟悉的。那么,我们该如何改变呢?网络。与其花一个半小时去申请,不如花这个时间去建立关系网。人际关系网是一个很好的入门方式。有可能你会和这个职位的招聘人员或招聘经理有联系。如果没有,留在推荐管道也有很大帮助。那么,你会怎么做呢?
你可以找到两个联系来源:你学校的校友和 LinkedIn 联系人。每个来源都有其利弊。与校友交谈很棒,因为你们相似的背景(来自同一所学校)意味着很多。一般校友都想帮助下一代。关于你们共同的学习经历,你们可以谈论很多事情。然而,你可能找不到任何你想申请的公司的校友。你认识的校友可能在一个完全不同的部门工作,与你申请的团队没有什么联系。如果是这样的话,你可以试着给相关的 LinkedIn 联系人发信息。虽然他们没有什么动力来帮助你,因为你和他们是陌生人,但他们可能直接接触到你感兴趣的团队。那么,你应该使用什么策略呢?答案是两者都有。
找到校友联系人的一个简单步骤是联系你大学的就业中心。他们可能有一份愿意帮助学生的校友名单。我的大学有一个校友数据库,可以看到他们的电子邮件。一旦我有了想要联系的校友名单,我就给他们发电子邮件。发送电子邮件是引起他们注意的好方法。你的邮件可能马上就出现在他们面前,你的信息可以更长,你可以把简历附在邮件里。或者,你可以在 LinkedIn 上联系他们,并发送介绍信息。
如果第一个策略不可行或没有帮助,下面是我如何在 LinkedIn 上搜索陌生人。在人才搜索上,我按当前公司(你申请的公司)和地点(美国,以防这些公司在美国以外有办事处)进行了筛选。在搜索框中,我输入了可能与该角色相关的团队或职位。在这些结果中,我查看了他们的个人资料,列出了最相关的人。然后,我用简短的消息发送连接请求。除了连接请求之外,还建议发送一条消息,并提及您申请的确切角色或团队。但是,不要在第一封邮件中提到推荐。
在他们接受我的连接请求后,我与他们分享了更多关于我的背景和对公司的兴趣。如果他们觉得舒服,我愿意让他们推荐,向招聘经理介绍我自己,或者把我的简历递给符合条件的招聘人员。同样的过程也适用于校友。被亲自介绍给招聘经理或有推荐人会增加你开始招聘的可能性。
准备技术面试
作为一名数据分析师候选人,我相信你们所有人都知道在面试过程中会发生什么。不同的公司和不同的角色需要不同的技能;但是,通常需要以下技能:Excel、SQL、数据可视化(例如:Tableau)和数据分析。一些公司可能也会对 Python 和机器学习感兴趣。行为问题绝对重要,有时同样重要;然而,我将把这个话题留给另一篇文章,因为我想更多地关注数据分析师面试方面。
第一步是准备至少三个关于你过去如何使用 Excel、SQL 或 Tableau 的故事。它不是严格基于过去的工作经验;然而,你应该能够说出你使用的公式或函数,项目的复杂性,以及影响。然后,就是关于练习。对于 Excel 来说,谷歌练习和应用你想要练习的公式应该是可行的。对于 SQL,我在 Leetcode 上练习过。我制定了每天练习的时间表,每天至少有三到五个问题。我花了很多时间去思考解决方案,与同行的答案进行比较,并写下我可以改进的地方或我可以从练习中学到的东西。对于数据可视化,由于我以前所有的仪表板和可视化都属于我工作的公司,我找到了公共数据集,并创建了两到三个仪表板来展示我的技能。
练习数据分析题比较棘手。数据分析问题有两种提问方式,一种是一般的业务问题,要求您分解步骤并提出数据驱动的解决方案;另一种是数据案例,要求您处理数据并分享来自特定数据集的见解。第一类数据分析问题很大程度上取决于你准备应聘的公司。例如,当我申请一家电子商务公司时,我做了一些研究,以了解他们面临的常见业务问题和相关指标。我问自己一些问题,比如如何提高客户数量,如何增加购买数量,或者如何减少客户流失。我写下简洁的要点来组织我的回答,并练习说话,就好像我在面试官面前陈述解决方案一样。对于第二种类型的数据分析问题,我找到了公共数据集(例如:Kaggle)并练习处理数据:进行探索性分析,可视化数据分布,找到相关性,并应用统计方法从数据集中找到洞察力。
打造你的品牌
你应该准备好和成百上千的申请人竞争一个职位。因此,建立你的专业品牌有助于你脱颖而出。我确保招聘人员和招聘经理可以通过查看我的个人资料来识别我的数据分析经历。我过去的所有经历都强调了与数据分析相关的方面和成就。我的 LinkedIn 个人资料包含招聘人员可能会搜索或寻找的所有相关关键词和技能。我建立了一个 GitHub 文件夹,展示过去的项目,包括学校和个人的项目。另外,个人网站也可以。
因为修改你的个人资料很重要,所以我只申请了我感兴趣的职位。我仔细阅读了职位描述,并记下了团队正在寻找的技能和经验。然后,我比较了我的简历和职位描述之间的相关性。我调整了我的经历,使之与需求紧密匹配。例如,对于一个营销数据分析师的角色,我强调了我的营销相关经验,如优化漏斗转换过程,提高电子邮件性能,或进行客户细分分析。
参加在线课程和展示在线证书也是展示你的技能和激情的好方法。我经常从 Coursera 和 LinkedIn 学习各种数据分析相关领域的在线课程,然后在我的 LinkedIn 个人资料上显示证书。但是,我不建议在简历中列出太多证书。你的简历空间有限,应该优化以突出你的技能和经验。
快速笔记
求职过程充满压力,令人沮丧。因此,我想强调放松和平衡你的生活的重要性。有几次,我发现自己不断地发送网络信息,练习采访,并一直感到担心。从长远来看,这是行不通的。在重要的面试前花更多的时间准备是可以接受的;然而,如果你不能在工作申请和生活中的其他方面划清界限,你很快就会感到筋疲力尽。
在求职期间,我规划了一个明确的时间表,确定了每天要花多少时间在求职活动上。我也非常重视花在锻炼、跑步、与家人和朋友交谈以及爱好上的时间。
我希望你能从这篇文章中获得一些简明的要点,帮助你尽快实现你的目标。祝你求职成功。
我是如何在 2 个月内学会数据科学的?
这是从“零到英雄”学习数据科学的完整路线图,并提供了源代码链接。
目录—学习路径:
- 介绍
- 数据科学所需的软技能
- Python 基础知识
- Python 库— Numpy、Pandas 和 Matplotlib
- 结构化查询语言
- Tableau/Power BI
- 使用 Python 进行数据分析
- 统计和概率
- 机器学习算法
- 深度学习(神经网络)
- 项目创意
- 建筑概况和组合开发
- 结论
如果你讨厌编程?但还是想从事数据分析领域?查看这篇关于 非程序员数据分析 的博客。
1。 简介:
当你点击这个博客阅读这篇文章时,你可能对数据科学有所了解或感兴趣。因为这是一个新兴领域,你们中的大多数人可能会好奇去了解它。但是你可能不知道如何开始,如何进一步追求。这是你逐步学习数据科学的完整路线图(包括源代码链接)。
2.数据科学所需的软技能:
以下是成为数据科学家的一些最重要的软技能:
- 探索的兴趣
- 理解业务问题
- 讲故事——来自数据
- 对数学的好奇心
- 等等…
注意:如果你觉得自己不具备这些技能,试着提高它们或者随意寻找另一个领域。
3.Python 基础知识:
开始学习数据科学的最好方法是让“Python 成为你的朋友”。Python 是最流行的编程语言之一,因为它的简单性和巨大的应用。由于它在本质上的易用性,非 CS 背景的人往往更喜欢它。学完 python 后,如果你觉得数据科学不是你的路,有很多机会给你,比如软件开发等。
要学习的资源:
4.Python 库— Numpy、Pandas 和 Matplotlib:
学习 Python 基础知识后,您可能会熟悉函数、类和数据结构。但是要进行数据分析,你需要处理数组、数据帧等。为了方便起见,有一些 Python 库可供使用。数据分析中最常用的库是“Numpy、Pandas 和 Matplotlib”。
Numpy —提供一个高性能的多维数组和基本工具来计算和操作这些数组。
Pandas —提供内存中的 2d 表格对象 Dataframe,用于数据操作。
Matplotlib —提供图表来可视化洞察。
注:尝试在 Jupyter 笔记本或 Google colab 中学习和编码。
要学习的资源:
5.SQL:
做个人项目不需要 SQL。但是在现实世界中,行业以 SQL 的形式存储数据。因此,学习编写 SQL 查询对数据探索更有帮助。既然这么简单,学起来不费时。
学习来源:
- MySql 初学者教程(用 Mosh 编程)——点击这里
6.Tableau/Power BI:
在讨论的技术中,学习 Tableau 或 Power BI 会更有趣。因为这些是数据可视化技术中最常用的工具。学了不会后悔的。通过探索它们,它帮助我们更清楚地理解数据。
“ Tableau,Power BI”——读起来很有意思的词吧?
耶普!用它工作更有趣…是的,我能听到你说“我需要学哪一个?Tableau 还是 Power BI?”
这个问题有很多争论。对此没有明确的答案。在我看来,如果你熟悉微软 Office 的组件,那就试试 Power BI。如果你真的需要尝试新的 UI ,就用 Tableau 吧。因为 Power BI 和 Tableau 都能完成所有的基本动作。一旦你熟悉了一个软件,试着去探索另一个。
要学习的来源:
7.使用 Python 进行数据分析:
最有趣的部分在这里。在整个旅程中,您学习了许多数据科学中使用的技术。但这是你试图学习“如何在数据分析中使用这些技术”的一步分析数据并提出见解要有趣得多。
数据分析涉及的步骤:
- 数据争论
- 特征工程
- 检测异常值
- 探索性数据分析
- 模型开发
- 模型评估和改进
您可以从下面提供的课程中学习所有这些步骤。
学习来源:
- 用 python 进行数据分析-IBM(Coursera)—点击这里****
8.统计和概率:
统计和概率等数学概念在数据科学中发挥着重要作用。我们的高中谜团终于有了答案,“我们要把那些怪异的数学概念用到哪里去?!"
要学习的资源:
9.机器学习算法:
虽然您可能已经在“step 7 —使用 python 进行数据分析”中学到了一些关于开发机器学习模型的基础知识,但是您需要更深入地了解机器学习算法,如“回归、分类和聚类”。首先,尝试从理论上理解机器学习的概念,然后使用 Python 进行实践。
要学习的资源:
10.深度学习(神经网络):
在对机器学习有了深入的了解之后,再尝试跳入深度学习。学习神经网络及其工作原理。神经网络的类型包括 ANN、CNN 和 RNN 。计算机视觉和自然语言处理是目前需求量最大的技能。努力掌握那些技能。深度学习促使我们做更多的项目。从学习 Keras 开始。因为 Keras 架构比较容易学,所以最受初学者欣赏。然后用 Tensorflow 和 PyTorch 因为那些是最受欢迎的平台。
要学习的资源:
- 完成深度学习(克里斯·纳伊克)——点击这里
- Keras for 初学者(免费代码营)——点击这里
- Tensorflow 速成班(免费代码营)——点击这里
- 深度学习 PyTorch(免费代码营)——点此
11.项目创意:
可以从 Kaggle 获取更多项目思路。尝试参加他们举办的比赛,并解决那些问题。你也可以通过“网络搜集”来收集数据,并尝试分析这些数据以获得真知灼见。尝试用机器学习和深度学习做同样的项目。
获取项目想法的来源:
12.建筑概况和组合开发:
- 在尝试了那些现有的项目之后,选择一个真实的问题,并使用数据分析技术来解决它。
- 在 LinkedIn 中更新您的个人资料,并通过 LinkedIn 与更多数据科学家联系
- 要了解数据分析在一个行业中是如何工作的,做一些实习。查看我的博客 【免费数据科学虚拟实习【带证】】
13.结论:
恭喜你。!如果你跟随我到现在,你真的有热情和好奇心去学习。如果我能在 2 个月内学会这些技能,为什么你不能?请评论我遗漏的地方,如果我错了,请纠正我。如果你找到其他学习这些技能的资源,请写下来。我也会试着把这些加进去。让我们一起成长!
联系我:
我的 LinkedIn 个人资料:T5 点击这里
我的邮件 id—hpprasad2000@gmail.com
我是如何找到一份高薪的数据工作的?
我从金融到数据科学和分析(DSA)的旅程
就是这样。我已经做到了。我转向并重新调整了自己的技能(从金融到数据)。现在看着我。我是如此重要,以至于我工作的公司为我提供早餐、午餐和小吃。这太棒了。
我接下来的直接挑战是——如果新冠肺炎愿意的话:1/避免被解雇,2/继续提升技能。
数据人短缺
数据科学与分析(DSA)坐上技能荒 的头把交椅。
*“*数据科学家、现场可靠性工程师和企业客户主管是 2019 年 最有前途的工作”。
这是你在网上经常能看到的标题类型。在电视上。但是谁还看电视呢?!
哦,我可以看到你眼睛里的美元符号和头上的灯泡。只要学会基础知识,你就会找到工作。轻松点。毕竟,当你真的需要水而又没有现成的斐济瓶时,你会买下一个最好的东西(依云)或现有的东西(达萨尼——因为你真的真的需要水)。
是的。但是没有!
超级英雄短缺
有这么多漫威和 DC 漫画电影,我们怎么能缺少超级英雄呢?!首先,黑寡妇和钢铁侠已经死了……然后,因为公司真正需要的是超级高技能的数据人员。不是大三。
拥有计算机科学、工程、计量经济学/数学和商业教育/经验的人(是的,所有这些加在一起)。不是大三。
能够使用和说大量工具和语言的人。(仅举几个:MongoDB,PostgreSQL,MySQL,Hive,Spark,AWS S3,C#,Scala,Tableau,Python,Matlab,Stata 等等。).不是大三。
深刻理解商业模式和商业逻辑的人。拥有工具固然很好,但知道为什么以及何时需要它们也同样重要。
他们基本上需要有大约 7/10 年经验的终身学习者大学毕业生。不是大三。
漫漫长路
说了这么多,显然不会轻松。不容易不代表不可能。我一生中完成的事情没有一件是不可能的。你也可以的!
那么怎么做呢?我没有一个通用的答案。我只是有亲身经历。因为我没有东西可以卖,所以我可以告诉你真相。
这需要时间。不要相信训练营和其他专家,他们告诉你 3 到 6 个月后你就可以工作了(谈论重新转换——计算机专业毕业生或有计算机专业经验的人最终可以)。它就是不能切断它。你需要更多的时间和练习才能真正有用。
学习和练习
有大量免费的在线资源可供学习(如果你需要,我可以推荐几个)。从他们开始学习基础知识,直到中级到高级概念。然后,你可以考虑付费项目——通过变得更高级,你将能够更深入,并从你的投资中获得更多价值。
我想我的简历上没有 DS 或 CS 的正式教育经历,这让我很痛苦。但那只是一种感觉。当心训练营——很少有人真正取得好成绩。
然后练习。我再怎么强调练习的重要性也不为过。我犯了一个错误,在通过项目应用这些概念之前,我完成了一门又一门课程。我的理由是,在能够使用这些工具之前,我需要了解更多的知识。我错了。通过做项目,你实际上会学到更多(实际经验)并保留更多(感谢经历实际过程的痛苦——在很大程度上,这是谷歌如何做你想做的事情并适应它)。
做有价值的项目
我犯的另一个错误是做一些我认为很酷的项目,而不是那些实际上证明我可以胜任的项目。例如,我开发了一款增强现实游戏。很酷,但是绝对没用。我不会得到一份机器学习工程师的工作(要得到这份工作,你需要成为一名优秀的软件工程师,具备中到高级的数学/统计知识和强大的领域专业知识)。
你需要的是获取和处理数据、分析和可视化数据的项目。你基本上把数据转化为洞察力。比如报废电影数据来评估网飞和迪士尼+之间哪个是最好的流媒体平台(想知道答案就点这里)。
拥有领域专长
有趣的是,让我得到这份工作的不是我的技术技能,而是我的专业领域——尽管这还是一个有根据的猜测,而不是已知的事实。
是的,我测试了 Python 和 SQL。掌握最新的技术技能也很重要。但我不认为我是艺术大师。另外,你不能真正自学和练习 ETL、数据流、SQL 等。为此,你实际上需要工作经验。咬着尾巴的蛇。
我(认为我)击败它的地方是在专业领域。我在投资银行工作多年,剖析商业模式,识别业务流程,理解价值创造。这(对我)极其有用。为什么?因为在(无数次)测试和面试中,我能够确定该看什么问题,如何看问题。公司有(很多)内部资源来教/帮你回答这些问题。它们在帮助你思考、理解和识别业务问题方面的作用要小得多。
结论
尽管由于那次隔离,你很可能已经无聊到了极点,但我还是要强调一下我刚才说的话,这样你就可以直奔主题(我知道,你希望从一开始就知道这是一个选项):
1/数据人员的短缺与你无关。公司缺少通过高学历和长期经验相结合而获得强大技术和商业技能的人,而不是初级员工;
2/使用免费的在线资源来学习技术技能,并小心训练营。你需要时间才能做好工作准备;
3/尽快做项目。甚至在第一道菜之后。这会很难,但这是迄今为止你能做的最好的真正学习的事情。做重要的项目 vs 酷的项目(你在这个领域的第一份工作不会是机器学习工程师);
4/拥有深厚的领域专业知识。面试者不止一次告诉我:“我们更喜欢商业意识强于技术技能,因为你可以在工作中很快学会 SQL
5/不要把第四条看得太重,你仍然需要那些技能来通过简历筛选并得到这份工作。
我非常兴奋能够开始这份新工作(分析项目经理)。我不打算撒谎,我花了很长时间和很多努力才到达那里。现在,我知道我将继续学习大量的知识——在“数据科学”中你可以学到无穷无尽的东西。最棒的是,我会在尽可能好的条件下做这件事(拥有杰出人才和资源的非常成功的创业公司)。令人难以置信的是,我因此得到了丰厚的报酬!
封锁对我们的日常活动有什么影响?
塔伦·阿南德·吉里在 Unsplash 上的照片
使用谷歌的社区移动性数据,在全国范围的封锁期间,看看印度的社区移动性
前言
新冠肺炎·疫情给全世界人民的日常生活带来了灾难。为了应对这一公共健康威胁,各国实施了全面的全国封锁措施,让生活嘎然而止。曾经由不同灵魂组成的连续流动的实体,现在变成了一堆紧张和不确定的静态物质。随着时间的推移,随着这些措施在一些国家的放松,人们走出家门时会更加自信,甚至会考虑去他们最喜欢的咖啡馆。
“滚石不生苔”
这句谚语让我思考,在这个艰难的时代,是否有某种方法可以观察到这个运动,或者说是缺乏这个运动的社区。
两周前偶然读到一篇的文章,我看到了谷歌的社区移动性报告。这是一款帮助用户了解不同地点访客变化的产品。
谷歌免费为许多国家提供了这些数据,目的是为公共卫生官员提供应对疫情的有用见解。要了解谷歌如何收集、汇总和匿名这些数据,请访问他们的帮助页面。
动机
在这篇文章中,我探索了这个数据集,以获得一些关于最近在我的国家——印度——实施的封锁措施如何影响马哈拉施特拉邦和德里社区的定期例行活动的个人见解,这两个邦有超过 100,000 例确诊阳性病例。
项目工作流程
像往常一样,我使用一个简单的工作流程来组织我的查询。完整的代码和数据集可以在我的 GitHub 存储库中找到。
1.数据采集
社区移动数据集以. csv 文件的形式从这里的下载并读入数据框。我还使用了来自这个众包数据库的印度不同邦的每日新冠肺炎病例数。API 的详细文档可以在这里找到。
2.数据预处理
这两个数据集在上传之前已经清除了虚假的高/低值/错误的数据格式/缺失值。
从全球社区移动性数据集中,我提取了马哈拉施特拉邦和德里的数据,并保留了那些感兴趣的要素—‘零售和娱乐场所’、‘杂货店和药店’、‘公园’、‘中转站’、‘工作场所’、‘住宅’。我还创建了一个附加功能,在 锁定期间,将每日数据标记为“ pre ”和“”。**
从新冠肺炎的数据集中,我提取了马哈拉施特拉邦和德里的数据,只保留了每日确诊的阳性病例数。
(注:这些封锁措施是在全国范围内下令实施的,每个州都有权根据自己的案件数量继续实施自己的封锁措施。)
3.探索性数据分析
一、基本情况
在印度,3 月 22 日下令实施全国范围的第一阶段封锁,快速查看移动数据显示,从 2 月 15 日到 7 月 17 日,每个邦有 154 天的移动数据。
新冠肺炎的数据包括从 3 月 14 日开始的病例计数。尽管早在 1 月 28 日就发现了印度的首例病例,但众包数据仅始于 3 月 14 日。截至 7 月 24 日,马哈拉施特拉邦和德里数据集分别有 133 天的病例计数数据。
二。汇总统计数据
均值(平均值)和分布(四分位数间距)的测量将提供一些关于连续封锁措施对马哈拉施特拉邦和德里社区流动性变化的影响的汇总信息。
小提琴图给人一种数据扩散的感觉,或者换句话说,流动性变化的变化。小提琴图中较大的分布意味着较大的变化,这可以解释为锁定措施对流动性的较大影响。
很明显,在封锁前和封锁期间,人们的流动性有很大的不同。
可以看出,公园、零售店和娱乐场所的传播最小,这可以解释为在多次封锁期间,没有多少人访问过这些地方,因为它们仍处于 60-80%的较低下降率。
在工作场所、食品杂货店和药店,流动性的传播更加明显。这可能被解释为连续的封锁对访问这些地方的人产生了更大的影响。这种影响的性质将在下一节中展示。
从每个地点类别的平均变化来看,这两个州的零售和娱乐场所、中转站、工作场所和住宅的游客数量都出现了类似的平均下降。
在德里,公园的游客数量下降幅度最大(下降 98%),而在马哈拉施特拉邦,封锁期间,零售和娱乐场所的游客数量下降幅度最大(下降 89%)。
因为封锁要求我们长时间呆在家里,所以在封锁前的几个月(1 月到 2 月),住在家里的人数增加了近 10 倍。
在封锁期间,只有食品杂货和药房等基本服务才被允许参观,因此这两个州的游客平均降幅远低于其他位置类别。
这些汇总统计数据提供了一些有用的见解,可以回答一些关于锁定措施有效性的问题。
4。趋势分析
一.多次封锁对人员流动的总体影响是什么?
在印度,从 3 月 22 日到 5 月 31 日分四个阶段下令封锁,之后从 6 月 1 日到今天分两个阶段下令“解除封锁”。封锁的每个阶段都伴随着一系列措施,以防止人群聚集,限制非必要的行动,并保持社交距离。我绘制了访客/人数的每周平均百分比变化,以观察趋势。
**
在马哈拉施特拉邦和德里,随着社区限制随着连续封锁而放松,走出家门前往不同地点的人逐渐增多,长期留在住所的人的百分比呈下降趋势也证实了这一点。
二世。封锁如何影响零售店和娱乐设施的客流量?
随着连续的封锁,零售和娱乐场所的游客稳步增加。在中央政府宣布解除封锁后,德里人向零售和娱乐场所的流动增加了,超过了马哈拉施特拉邦。德里确诊新冠肺炎病例的上升和明显下降,以及 6 月份马哈拉施特拉邦病例的持续上升,也可能影响了这种趋势上的差异。
二。马哈拉施特拉邦的人们去杂货店和药店的频率比德里高吗?
与其他地方相比,杂货店和药店在多次封锁期间流动性增加最多,因为它们被视为基本服务。这两个邦的趋势没有明显差别,但马哈拉施特拉邦的百分比增长似乎高于德里。
三世。人们去公园的次数比封锁前多吗
由于行动限制,去公园的人明显减少了。德里的下降幅度比马哈拉施特拉邦更大,尤其是在 4 月的第二周之后。本周,每日病例的增加促使德里政府采取更严格的措施禁止人员流动。然而,随着时间的推移和限制的放松,德里公园的游客有所增加,而马哈拉施特拉邦没有任何明显的变化。
四世。封锁期间火车站的客流量是多了还是少了?
在 3 月 22 日宣布第一次封锁后,过境站的游客略有增加,可能是为了返回家乡和城市。这在日间图中是可见的,而不是每周平均时间序列。此后,随着时间的推移和限制的减少,过境站的游客逐渐增加。5 月 1 日后,名为“什拉米克列车的专列开始运送全国各地的农民工。这也可能是 5 月流动性增加的一个原因。这两个国家的趋势似乎没有显著差异。
尽管有旅行限制和工厂关闭,人们还是被要求去工作吗?
在前两次封锁期间(约 45 天),积极鼓励人们在家工作。私营和政府机构试图适应这种新的文化,这反映在工作场所的访客人数大幅下降。然而,在一级防范禁闭 3 之后,当旅行限制被部分取消时,两个州访问工作场所的人数都增加了。人们现在被要求以分级的方式工作,以减少在办公场所的聚集。
六。我们一直呆在家里吗?
与封锁前的日子相比,我们呆在家里的时间更长了。直到一级防范禁闭 3 号,没有太多人走出家门。在一级防范禁闭 3 之后,长时间呆在家里的人逐渐减少。然而,在马哈拉施特拉邦,由于持续的部分封锁,与德里相比,人们甚至在 7 月份也继续呆在室内。
结论
通过分析这些社区流动数据,我可以证实我之前的一些怀疑。
- 总体而言,连续封锁中限制的放松对人们前往典型的名胜地点产生了积极影响。
- 公园、零售和娱乐场所的游客数量下降幅度最大,而杂货店和药店的游客数量上升幅度最大。
- 我们被迫长时间呆在室内,比以前长得多,这在数据中有所反映。
- 在第三阶段封锁后,不同地点的流动性增加了。
- 马哈拉施特拉邦病例的上升和持续的部分封锁使人们的流动性低于德里,德里的病例最近有所下降,社区的流动性迅速上升。
确诊病例的数量肯定会影响封锁的实施或解除,而在不受限制的行动的经济效益和感染减少的公共卫生影响之间进行权衡是一项难以管理的任务。
免责声明:此处呈现的观点和观察纯属个人观点。
就是这样,伙计们!我希望你喜欢这篇文章。这是一个有趣的项目,让我对身边发生的事情有所了解,我会很快发布更多有趣的内容。
再见!
深度学习模型是如何做到 100%准确率的?
在解决深度学习问题之前,浏览数据集是很重要的。本文将带您经历一个场景,其中测试集和验证集包含与训练集相同的数据。你有没有想过这种情况会不会发生?嗯,数据集可能会有偏差,这篇文章是我个人经历的一个这样的问题的结果。
简介
这里使用的数据集是 food-101 数据集的子集,可以在 TensorFlow 数据集中找到。我的目标是将图片分为四类‘咖喱鸡、汉堡、煎蛋和华夫饼’。数据集由属于四个类别的 8345 个图像组成,并且以如下方式划分:
训练集:属于四个类别的 4000 个图像
验证集:属于四个类别的 2217 个图像
测试集:属于四个类别的 2128 个图像
有了这个问题的知识,我们开始吧。
ResNet50 预训练 CNN
这是一个深度剩余网络,数字‘50’指的是网络的深度,意味着网络有 50 层深。它属于卷积神经网络的一个子类。该网络有超过 2300 万个可训练参数。ResNet-50 的出现是为了解决渐变消失的问题。ResNet-50 使用跳过连接,将输入添加到原始块的输出,这减轻了渐变消失的问题。更多详情也可以参考原研究论文。如果你选择了使用 ResNet 实现深度学习解决方案,我假设你了解这个架构。ResNet-50 模型包括 5 个阶段,每个阶段具有一个卷积和一个单位块,其中每个卷积块具有三个卷积层,每个单位块也具有三个卷积层。ResNet-50 型号如下所示:
迁移学习
这是一种训练数据的方法,其中模型已经在大型数据集上进行了训练,并且已经用于对大量类别进行分类。ResNet-50 已经在由数百万幅图像组成的 ImageNet 数据库上进行训练,并且保存了权重。这些权重可以在实施迁移学习方法时使用。有两种使用迁移学习的方法,特征提取和微调。这里设计问题的解决方案集中在微调方法上。在微调方法中,在预训练的 ResNet-50 基础模型的顶部添加完全连接的层。整个预训练模型被冻结,这意味着权重没有被更新,并且学习过程被停止。在 ResNet-50 基础之上添加的全连接层被训练少量的历元,然后通过解冻相关层将 ResNet-50 预训练模型的 5c 块设置为可训练。未冻结的层连同所添加的完全连接的层被训练并用于训练数据以获得分类结果。卷积神经网络的初始层学习低级特征,并且随着网络深入,学习更高级的特征。因此,较高层被解冻并进一步用于训练过程。ResNet-50 型号的尺寸要求为(224,224,3)。因此,在馈入预训练模型之前,所有图像都被转换或调整到这个维度。
理解了图像分类的基于微调的迁移学习方法的概念后,我将进入本文的核心。
探索性数据分析
我认为这是本文最重要的部分。在开始该模型的训练过程时,我惊讶地发现在训练的初始阶段,精确度非常高。网络和图像似乎并没有一切正常。我开始窥视网络,并没有发现任何罪恶,也就是当我试图窥视数据集时,我惊讶地发现,测试和验证集中的所有图像在训练集中都是可用的。这对我来说似乎很奇怪,因为验证和测试集应该包含那些不属于训练集的图像。我们应该根据训练数据训练模型,并用验证和测试集评估模型的性能。然而,在这种情况下,由于验证和测试集的所有图像都已经存在于训练集中,所以我们使用相同的图像来训练模型并评估模型的性能。这不是使用卷积神经网络或任何深度学习模型的常规过程。因此,我编写了一个脚本来显示测试和训练集以及验证和训练集中的文件(图像)彼此匹配。请参考 谷歌合作笔记本 中的 python 脚本,我已经明确地比较了给定数据集中找到的匹配。
探索性数据分析的结果
卷积神经网络的设计和模型训练
如前所述,我已经对预训练的 ResNet-50 模型进行了微调,并在顶部添加了一个完全连接的层来对图像进行分类。CNN 模型的架构如下所示:
在 ResNet-50 上添加完全连接的层
我添加了 Flatten()图层,然后是百分比为 40 的 Dropout。所以在训练过程中随机排除了 40%的神经元。Dropout 是一种正则化方法,用于避免模型过度拟合。实现 CNN 模型时有一些经验法则,您可以让模型过度拟合数据,如果模型过度拟合数据,则稍后实现正则化方法。我特意加入了 Dropout,让模型的训练过程更加艰苦,这使得模型比预期晚跳接近 100%的准确率。密集层包括 2048 个神经元,以“relu”作为激活函数,最后一层也是具有 4 个神经元的密集层,因为这里的目的是对四个不同类别的图像进行分类。因为这个问题是一个多类分类问题,所以使用了“Softmax”分类器。整个 ResNet-50 基础冻结时的架构如下所示:
基于冻结 ResNet-50 的 CNN 架构
注意当整个基础冻结时不可训练参数的数量。图层冻结时,权重不会更新。当最后一个块解冻并与完全连接的层组合时,架构如下所示:
微调 CNN 模型的体系结构
正如提到的关于给定数据集的特殊性,模型的性能对于所有训练集、验证集和测试集都记录为 100%。我使用 RMSprop 作为优化器,学习率为 1e^-4.我可以注意到,一旦学习率下降到 1e^-5.,训练和验证的准确率就开始向 100%靠拢学习曲线和混淆矩阵如下所示:
训练和验证准确性的学习曲线
培训和验证损失的学习曲线
验证数据的混淆矩阵
测试数据的混淆矩阵
回调:我使用了 ReduceLROnPlateau。如果 val_loss 在运行五个时期后没有减少,则将学习率减少 0.1 倍。我尝试使用 EarlyStopping 回调,但我注意到,即使在验证指标停止时,训练精度和损失也在不断提高。所以,我觉得让这个系统运行整个 50 个时代是有好处的。但是如果历元的数量增加很多,比如 200,训练损失变得接近 0,那么当获得必要的损失时,可以使用该回调来停止训练。CNN 模型的性能指标见 谷歌合作笔记本 。
总结
我向您介绍了探索性数据分析、模型训练的过程,并展示了模型微调后的架构。ResNet-50 被用作大多数图像分类问题的分类器。其跳跃连接技术解决了卷积神经网络中的梯度消失问题。您可以自己实现 ResNet-50 模型,也可以实现迁移学习方法。现在,您应该能够理解探索性数据分析的重要性,并将其应用到您的深度学习模型中。
希望这篇文章对你有用。你可以访问我的 GitHub 库来全面了解实现。colab 笔记本已经做了很好的记录,它将帮助您进一步理解实现。
参考文献:
[1] 'food101 | TensorFlow Datasets ', TensorFlow 。https://www.tensorflow.org/datasets/catalog/food101
[2]何国光,张,任,孙,“深度残差学习在图像识别中的应用”, ArXiv151203385 Cs ,2015 年 12 月,
可用:,
[3] P. Dwivedi,《在 Keras 中理解和编码一个 ResNet》, Medium ,2019 年 3 月 27 日。https://towards data science . com/understanding-and-coding-a-resnet-in-keras-446 D7 ff 84d 33
[4] T. Shermin,M. Murshed,G. Lu,S. W. Teng,“使用 CNN 的分类层特征进行迁移学习”,ArXiv181107459 Cs,2019 年 3 月,可用:
[5]《图像网》。http://www.image-net.org/
[6]japeshmethuku 17/food _ 101 _ 4 class
Twitter 如何应对冠状病毒疫情?
《在 R》中新冠肺炎·疫情的探索性和情感分析
马库斯·斯皮斯克在 Unsplash 上的照片
最近爆发的冠状病毒/COVID 19 最近被宣布为全球紧急情况。随着我们开始练习社交距离,在家工作来控制病毒传播,我决定利用我的业余时间去调查一下人们在网上谈论疫情的事情。
对于这篇文章,提取了 2020 年 1 月 30 日至 3 月 15 日之间的 15000 条带有#冠状病毒和#COVID19 的推文进行分析。
将推文提取到 R
有许多 R 包允许您将 tweets 提取成可用的数据类型进行分析。在使用 R 中的包之前,确保您在 twitter 上有一个 API 帐户,允许您提取 tweets。下面的代码块提取了 2020 年 1 月 30 日到 3 月 15 日之间推特上#Coronavirus 和#COVID19 的所有文本。
**#Extract tweets** library("twitteR")consumer_key <- '*your consumer_key*'
consumer_secret <- '*your consumer_secret*'
access_token <- '*your access_token*'
access_secret <- '*your access_secret*'setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
2virus <- searchTwitter('#COVID-19 + #Coronavirus', n = 15000, since = '2020-01-30', retryOnRateLimit = 1e3)
virus_df = twListToDF(virus)**#Write dataframe into an Excel file for analysis** library(xlsx)write.xlsx(dataFrame, "filePath", sheetName="Sheet1", col.names=TRUE, row.names=TRUE, append=FALSE)
首先,一些有趣的发现
在我们开始挖掘推文之前,让我们来看看几条最受欢迎和转发的文本:
**#most favorited tweets**
virus_fav <- virus_df %>%
arrange(desc(favoriteCount))**#most retweeted**
virus_retweet <- virus_df %>%
arrange(desc(retweetCount)) %>%
distinct(text, .keep_all = TRUE)virus_retweet_extracted <- virus_retweet[-c(2:11)]
2020 年 3 月 17 日:在提取的 15,000 条推文中,前 5 条最受欢迎的推文
2020 年 3 月 17 日:在提取的 15,000 条推文中,转发量最高的 5 条文本
然后…一些数据清理和令牌化
首先,将数据集转换为语料库,即 r 中识别的文档(数据类型)的集合。然后,对语料库进行预处理,使所有字符都变成小写,删除所有标点符号、空格和常用词(停用词)。
在对语料进行预处理之后,我使用了标记化的方法来抓取单词组合。如果您不熟悉标记化,这种方法可以帮助提取有用的短语,从而获得一些额外的见解。
**# Import text data**
data <- read.csv("*filePath.csv*", stringsAsFactors = FALSE)**#Change dataset into a corpus**
data_corp <- VCorpus(VectorSource(data))**#Data pre-processing**
data_corp <- tm_map(data_corp, tolower)
data_corp <- tm_map(data_corp, PlainTextDocument)
data_corp <- tm_map(data_corp, removePunctuation)for (i in seq(data_corp)) {
data_corp[[i]] <- gsub('[^a-zA-Z|[:blank:]]', "", data_corp[[i]])
}**#Remove stop words**
new_stops <-c("covid","iphone","coronavirus","hrefhttptwittercomdownloadandroid","relnofollowtwitter","androida","hrefhttptwittercomdownloadiphone","relnofollowtwitter","iphonea","web","rt","chuonlinenews","hrefhttpsmobiletwittercom","hrefhttptwittercomdownloadipad","bharianmy","lebih","berbanding","dijangkiti","kumpulan","mudah","terdedah","covidhttpstcoigdxdtmvrg","hrefhttpsabouttwittercomproductstweetdeck", "darah")data_corp <- tm_map(data_corp, removeWords, words = c(stopwords("English"), new_stops))
data_corp <- tm_map(data_corp, stripWhitespace)
data_corp <- tm_map(data_corp, PlainTextDocument)**#Tokenize tweets texts into words**
tokenizer <- function(x) {
NGramTokenizer(x, Weka_control(min = 1, max = 1))
}data_cleaned_tdm <- TermDocumentMatrix(
data_corp,
control = list(tokenize = tokenizer)
)data_cleaned_tdm_m <- as.matrix(data_cleaned_tdm)
data_cleaned_freq <- rowSums(data_cleaned_tdm_m)
词频分析
探索数据最简单的方法之一是频率分析。虽然不难,但在情感分析中,这种简单的方法会令人惊讶地具有启发性。
**#Create a uni-gram (1-word) word cloud**
pal <- brewer.pal(9,"Set1")
wordcloud(names(data_cleaned_freq), data_cleaned_freq, min.freq=50,max.words = 50, random.order=TRUE,random.color = TRUE, rot.per=.15, colors = pal,scale = c(3,1))
单字单词云
出现频率最高的前三个词:
- False (45459 次)
- 真(14557 次)
- 国立卫生研究院(3820 次)
二元语法(2 个单词)和三元语法(3 个单词)的词频可以让我们从我们正在分析的数据集获得更好的见解。只需将 tokenizer 函数的最小值和最大值更新为您想要研究的词元数,即可获得以下结果:
**#change the 1s into the number of word-grams you would like to analyze**tokenizer <- function(x) {
NGramTokenizer(x, Weka_control(min = 1, max = 1))
}
词频最高的二元模型列表
基于二元和三元模型列表,我们知道人们在谈论:
- 冠状病毒疫苗的临床试验
- 国家健康研究所
- 卡尔·冯·哈布斯堡大公(首位冠状病毒检测呈阳性的皇室成员)
词频最高的三元模型列表
情感分析
情感分析帮助我们理解人们对特定主题的感受。这是通过识别、分类观点并将文字转化为可操作的见解来完成的。
首先,数据预处理…再次!
首先,我们需要一个 tibble(数据类型)来将 tweets 的句子分解成单词,以便进一步分析。
**#Transform sentences into words**
data_tibble <- data %>%
unnest_tokens(output = "words", input = text, token = "words")**#Remove stop words from tibble**
virus_tibble_clean <- data_tibble %>%
anti_join(stop_words, by=c("words"="word")
用数字可视化情感:极性评分
极性得分帮助我们对一些文本的感觉做出定量的判断。简而言之,我们将推文中的单词分为积极和消极两种类型,并给它们打分进行分析。
极性得分告诉我们一段文字是消极的、中性的还是积极的。如果分数接近或等于 1,我们会认为正文是正面的,反之亦然。
15,000 条提取的推文的总体极性得分
提取的推文的整体极性
情感词频
接下来,我们还可以使用极性得分对单词进行分类,将单词放入“积极”或“消极”的篮子中。首先,我们给提取的推文中的每个单词分配一个极性分数。然后,我们过滤数据集,只得到极性得分为 80 或更高的单词。
data_tidy_sentiment <- virus_tibble_clean %>%
**# Inner join to bing lexicon by term = word**
inner_join(get_sentiments("bing"), by = c("words" = "word")) %>%
**# Count by term and sentiment, weighted by count**
count(words, sentiment) %>%
**# Spread sentiment, using n as values**
spread(sentiment, n, fill = 0) %>%
** # Mutate to add a polarity column**
mutate(polarity = positive - negative)summary(data_tidy_sentiment)
data_tidy_pol <- data_tidy_sentiment %>%
** # Filter for absolute polarity at least 80**
filter(abs(polarity) >= 80) %>%
** # Add positive/negative status**
mutate(
pos_or_neg = ifelse(polarity > 0, "positive", "negative")
)**# Plot polarity vs. (term reordered by polarity), filled by pos_or_neg**
ggplot(data_tidy_pol, aes(reorder(words, polarity), polarity, fill = pos_or_neg)) +
geom_col() +
ggtitle("Coronavirus related tweets: Sentiment Word Frequency") +
**# Rotate text and vertically justify**
theme(axis.text.x = element_text(angle = 45, vjust = 0.5, size = 10))+
xlab("Word")
在提取的推文中使用的最积极和消极的词
为了更全面地了解积极和消极词汇的使用情况,我使用“必应”词典给这些词分配了一种情绪,并做了一个简单的统计,以生成提取的推文中使用的前 10 个最常见的积极和消极词汇。
word_counts <- virus_tibble_clean %>%
**# Implement sentiment analysis using the "bing" lexicon**
inner_join(get_sentiments("bing"), by = c("words" = "word")) %>%
** # Count by word and sentiment**
count(words, sentiment)top_words <- word_counts %>%
**# Group by sentiment**
group_by(sentiment) %>%
**# Take the top 10 for each sentiment**
top_n(10) %>%
ungroup() %>%
**# Make word a factor in order of n**
mutate(words = reorder(words, n))**# Use aes() to put words on the x-axis and n on the y-axis**
ggplot(top_words, aes(words, n, fill = sentiment)) +
**# Make a bar chart with geom_col()**
geom_col(show.legend = FALSE) +
geom_text(aes(label = n, hjust=1), size = 3.5, color = "black") +
facet_wrap(~sentiment, scales = "free") +
coord_flip() +
ggtitle("Most common positive and negative words")
情话云
将这些词分为不同类型的情绪也有助于我们了解人们对一个主题的感受,在这种情况下,这个主题就是冠状病毒疫情。
data_tidy <- virus_tibble_clean %>%
**# Inner join to nrc lexicon**
inner_join(get_sentiments("nrc"), by = c("words" = "word")) %>%
** # Drop positive or negative**
filter(!grepl("positive|negative", sentiment)) %>%
**# Count by sentiment and term**
count(sentiment, words) %>%
**# Spread sentiment, using n for values**
spread(sentiment, n, fill = 0) %>%
** # Convert to data.frame, making term the row names**
data.frame(row.names = "words")**# Plot comparison cloud**
comparison.cloud(data_tidy, max.words = 130, title.size = 1)
带有冠状病毒标签的推特上的情绪词云
将情绪分为十种类型
除了将单词分为两类(积极和消极),我们还可以将单词分为多种情绪状态。在本节中,我们将单词分成十组,并在每组中选出前 10 个最常用的单词。
data_sentiment %>%
**# Count by word and sentiment**
count(words, sentiment) %>%
**# Group by sentiment**
group_by(sentiment) %>%
**# Take the top 10 words for each sentiment**
top_n(10) %>%
ungroup() %>%
mutate(word = reorder(words, n)) %>%
**# Set up the plot with aes()**
ggplot(aes(words, n, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~ sentiment, scales = "free") +
coord_flip()
推文分为十种情绪状态
结论:从分析中得到一些有趣的见解
- 总体而言,这些推文传达了一种战胜冠状病毒的乐观情绪(使用“自豪”和“希望”等词的频率很高)。
- 当查看 unigram frequency 时,“false”这个词在其他词中脱颖而出,这表明 twitter 上有故意误导读者的新闻或故事。
- 出现频率最高的词与美国国立卫生研究院(National Institutes of Health)冠状病毒疫苗的临床试验有关,这表明人们更关心找到疫情的治愈方法。
- 如果你仔细观察情绪状态分析图表,你会发现与其他情绪状态标签相比,带有快乐或积极标签的单词出现频率较低。
注意安全,保重!
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
30 年来,不同的衡量标准如何与 NBA 的胜利相关联
哪些指标导致 NBA 篮球队获胜?在过去的 30 年里,衡量指标与成功的相关性发生了怎样的变化?
在过去的几十年里,甚至在过去的几个赛季里,这项运动发生了巨大的变化。这项运动已经趋向于分析驱动的篮球,强调远距离投篮和更快的节奏。
这是我的新系列的第一篇文章,在 NBA 获胜,,它将从联盟、球队和球员的层面深入到几个变量和角度,看看是什么影响了篮球的胜利。第一篇文章分析了一系列球队层面的赛季总比率指标,如投篮命中率、助攻失误率和进攻篮板率,以了解这些指标在高表现和低表现球队之间的差异,并衡量每个指标与球队记录的相关性。
你可以在 GitHub 上下载 Jupyter 笔记本,上面有我的互动图表和重新格式化的篮球参考数据集。
团队的得分指标与当前赛季获胜的相关性
在当前赛季(2019-2020),两分投篮命中率是与获胜相关性最高的指标(. 71)。这意味着两分球命中率越来越高的球队往往会有越来越高的获胜记录。尽管来自三分球的投篮比例有所增加,但三分球命中率滞后于赢球的相关性(. 45)。紧随其后的是助攻失误率(. 31),罚球命中率(. 21),三分球命中率(. 13)。一些指标与成功呈负相关,例如 2 分制范围内的分数百分比(-.12)。这意味着在弧线内得分比例较高的球队往往胜率较低。其他与胜利负相关的指标包括助攻与投篮命中率高的球队和进攻篮板率高的球队。
过去 30 年的指标趋势
让我们看看这些指标的重要性是如何随着时间的推移而变化的。在下面的一组图表中,数据查看了从 1989-90 年到目前暂停的 2019-20 赛季的每五个赛季。
为了表明获胜的篮球队最常拥有的指标,每个赛季的球队根据他们的胜率被分成三个大小相等的组:
-‘顶级’三分位数:胜率为 0 . 593(或在 82 场比赛的赛季中 49 胜)或更高的球队
-‘中’三分位数:胜率在 0.370 到 0.593 之间的球队(每 82 场赛季 30-48 胜)
- “垫底”三分之一:胜率低于 0 . 370 的球队(82 场比赛的赛季胜率不超过 29 场)
双轴图表图例:
-点图代表每个获胜百分比三分位数的平均团队绩效(绿色=最高获胜百分比三分位数,黄色=中间三分位数,红色=最低获胜百分比三分位数)
-条形图代表每个赛季最高三分位数(记录最好的球队)和最低三分位数(胜率最低的球队)之间的差异。
助攻进球
在 90 年代上升后,最好和最差球队之间的助攻数差距已经逆转。1999 年,顶级球队领先最差球队 6 个百分点,但在当前赛季,不仅对投篮命中率的助攻减少了 8 个百分点(从 67%到 59%),而且 2020 年最低胜率的球队比最佳球队的比例更高。
两分球投篮命中率
越来越多的球队正在采取专注于短两分或三分球的进攻策略,消除中距离投篮,这是一种命中率较低的投篮。因此,所有三分位数的平均投篮命中率都有所提高。在本赛季,这种转变很大程度上可能是因为联盟领头羊(雄鹿和湖人)的三分球命中率都低于平均水平。在 2014-2015 赛季,三支赢球最多的球队(勇士、老鹰和快船)也有三个最高的 3 分投篮记录。
三分球命中率
对于三分球来说,过去三十年中最好的球队一直在以最高的精确度进行远距离投篮,但联盟中的其他球队正在迎头赶上。1990 年,胜率最高的球队比最差的球队投篮高出 3.7 分,到 2020 年,这一差距缩小到 1.9 个百分点。
三分投篮命中率
在过去的三十年里,深球在进攻中的重要性已经大大增加了。在 2014-15 赛季,顶部和底部三分位数之间的差距超过了 5 个百分点,但五年后,在球队遵循勇士队推广的模式后,差距不到一个百分点。
每场罚球次数
随着球队在弧外投篮的比例越来越高,每个投篮尝试的犯规次数(和罚球次数)在所有三个部分都在减少。1995 年,获胜的球队每场罚球次数为 0.36 次,到 2020 年,这一比例下降到 0.26 次。
比较联盟的指标表现与指标与获胜的相关性
在下面的两个双轴图表中,条形图代表该赛季中球队的平均表现,而折线图代表该指标与获胜的相关性。
助攻失误率
助攻失误率从 2004-05 赛季的 1.47 次助攻/失误持续上升到本赛季的 1.67 次。然而,这一指标与成功的相关性继续下降。在 1995 年达到 0.78 的高点后,与获胜的相关性在本赛季下降到了 0.31。
进攻篮板率
一支球队的进攻篮板能力看起来也在下降。自 1990 年以来,每场投篮失误的进攻篮板数一直在稳步上升,与赢球的相关性已经降到了零以下,这意味着进攻篮板率较高的球队往往会有更差的赢球记录。
感谢您阅读我最新的数据帖子。你可能有兴趣阅读我之前关于 大都市地区各行业就业增长趋势 的帖子。作为一名产品营销和数据分析专业人士,我对数据支持的讲故事充满热情。这些数据新闻帖子是我将真实数据与我个人的不同兴趣整合起来的方式,这些兴趣包括从旅行和娱乐到经济和社会问题的任何事情。
如果您有任何评论、故事想法或预期的数据项目,请随时发送电子邮件至 dwpwriting <邮箱至> gmail < dot > com 或通过LinkedIn联系我。
图片来自 Pexels.com
数据分析和机器学习中的歧视是如何发生的:代理变量
泰勒·维克在 Unsplash 上的照片
数据分析[DA]和机器学习[ML]是结构化的、定量的方法来回答关于数据集的困难问题。DA 和 ML 的承诺是,获得的关于世界的洞见可以比人类发现的洞见复杂得多,而且这些洞见将不受人类偏见的影响。本文将集中讨论第二个承诺,DA/ML 的完全客观性。人们早就认识到,数据分析/计量的结果可能会因方法的选择而有很大差异,这已经对客观性的说法造成了打击。然而,最近出现了一个更基本的问题——用于 DA/ML 的数据通常包含人为偏差,对这些数据执行的 DA/ML 会复制这些偏差。
数据的主观性质可能比方法选择的主观性质更麻烦,不同的方法可以很容易地相互比较,但很难检测和处理数据集中的主观性。例如,当使用 DA/ML 技术评估个人偿还贷款的能力时,我们很可能会使用一个数据集,该数据集由历史上人们做出的此类判断组成。不幸的是,其中一些人可能偏向某些人群,而对其他人有偏见。因此,DA/ML 分析的结果将与数据集相符,并复制这种偏差。这种可悲的现象在许多不同的特征(如种族、性别、年龄)和领域(如借贷、雇佣、刑事司法、医疗诊断)中都有记载。当你只有一份获得贷款的人的名单时,你如何发现这样一个数据集中的主观性?
例如,有大量文献表明,非洲裔美国人更难获得贷款,即使他们的还款能力与获得贷款的白人完全相同[1]。这是种族主义的明显例子。当执行 DA/ML 时,我们训练我们的模型根据我们提供的数据执行任务。如果我们使用来自种族主义贷方的数据集,我们将发现我们执行的 DA/ML 将复制这种种族主义,因为这是它在学习期间接收的数据。当我们分析种族主义的判断时,我们会得出种族主义的结论,这不足为奇。
一个更微妙和复杂的例子是,当我们不训练估计人类的判断(例如,是否给予贷款),而是真实世界的结果(例如,贷款偿还/违约)。与直觉相反,这种情况也会导致歧视。这种歧视通过“恶性反馈循环”发生[2]。例如,当一个人被判断为风险更高的借款人时,他们的利息将被设置为更高的水平。在一定时间内,这增加了他们必须偿还的金额,因此使他们更有可能拖欠贷款。这作为 DA/ML 模型的正反馈,即使同一个人可能没有违约,如果他们在第一时间被判断为风险较低,并相应地设定了他们的利息。基于种族、性别或邮政编码等特征,此人可能被判断为更具风险。因此,即使用于训练模型的数据是客观测量的结果,而不是可能有偏见的人的主观决定,DA/ML 也不能避免偏见。
已经设计了许多方法来解决这些问题。在这里,我将重点关注最受欢迎的一种方法,这种方法在解决偏见方面也是最差的。这种方法包括简单地删除包含我们不希望 DA/ML 的结果有偏见的特征的数据列。这种方法行不通的原因很简单:关于一个人的任何特征的信息在某种程度上都包含在这个人的其他特征中。例如,亚马逊的实验性招聘算法无法获得申请人的性别信息,学会了拒绝某些女子大学的申请人[3]。同样的事情最近也发生在苹果卡上,当它被发现提供给女性的信用额度比背景相似的男性要少。让我们来看一个更详细的例子。
在本例中,我们将重点关注年龄歧视,这种歧视是在分析哪些员工缺勤较多时出现的。这个例子是基于我们最近在 illumr 进行的分析,详情请见原始报告[5]。当您尝试使用包含年龄相关信息的数据集创建员工缺勤模型时,DA/ML 的结果将是一个几乎完全依赖年龄来确定员工缺勤次数的模型。根据欧盟人权公约和美国平等法案,年龄是受保护的特征之一,以这种方式在招聘中使用年龄作为标准显然是非法的。
当你把年龄从数据集中去掉,做同样的练习,你会得到几乎完全相同的结果。发生这种情况是因为您的模型隐式地识别了员工的年龄,尽管它从未见过。这样做的原因是,关于个人年龄的信息包含在雇主掌握的其他信息中。这种信息没有明确地保存,而是有一些弱指标,也称为代理变量。在下面的(完全虚构的)例子中,你可以看到所有的名字、地址、教育程度、吸烟和饮酒习惯、养宠物、饮食、身高和身体质量指数都是年龄的代理变量。
个人的许多特征提供了他们年龄的微弱指示,称为代理变量。机器学习和数据分析能够将这些弱指标结合成与个人年龄密切相关的强指标。因此,即使数据中没有明确包括年龄,也可能存在年龄歧视。这同样适用于个人的任何其他特征,如种族或性别。
在本例中,DA/ML 将推断每个人的年龄,然后将其用作缺勤次数的有力指标,而无需模型明确使用年龄。代理变量可能很复杂,因此很难发现,那么解决方案是什么呢?
一种解决方案是在模型的输出中明确寻找歧视,然后进行事后纠正。然而,这有许多问题(我在我的论文[6]中深入讨论了这些问题)。最值得注意的是,没有定量定义和普遍接受的歧视概念,有些定义甚至是相互排斥的[7]。在 illumr,我们开发了一个名为 Rosa 的解决方案,它采用了另一种方法。Rosa 获取您的数据集并查找代理变量,然后根据需要尽可能少地更改它们,以删除有关受保护特征的信息。当您对 Rosa 处理的数据使用 DA/ML 时,没有代理变量,因此您的模型不可能进行区分。你可以在www.illumr.com/rosa免费试用 Rosa(有一些最低限度的限制)。
参考资料:
[1]玛吉·奥斯汀·特纳。抵押贷款歧视:对现有证据的重新审视。1999.凯茜·奥尼尔,《数学毁灭武器:大数据如何加剧不平等并威胁民主》。百老汇图书,2016。
【3】https://www . Reuters . com/article/us-Amazon-com-jobs-automation-insight/Amazon-scraps-secret-ai-recruiting-tool-that-show-bias-against-women-iduskcn 1 MK 08g,检索 2020 年 2 月 1 日。
【4】https://www . wired . com/story/the-apple-card-not-see-gender and-that-the-the-problem/,【2020 年 2 月 1 日检索。
【5】www.cevora.xyz/RosaExamples.pdf,检索于 2020 年 2 月 1 日。
【6】www.cevora.xyz/FANs.pdf,检索于 2020 年 2 月 1 日。
【7】亚历山德拉·乔尔德乔娃。具有不同影响的公平预测:对累犯预测工具偏差的研究。大数据,5(2):153–163,2017。
A/B 测试是如何工作的?
深入了解科技行业最强大的工具之一
简而言之: A/B 测试就是通过创建可信的克隆来研究因果关系——两个相同的项目(或者,更典型的是,两个统计上相同的组)——然后观察不同对待它们的效果。
当我说两个相同的项目时,我的意思是比这更相同。关键是找到“可信的克隆体”…或者让随机化加上大样本量为你创造它们。图片:来源。
科学的、受控的实验是不可思议的工具;他们允许你谈论什么导致什么。没有它们,你所拥有的只是相关性,这通常对决策没有帮助。
实验是你在礼貌交谈中使用“因为”这个词的许可证。
不幸的是,很常见的是,人们自欺欺人地认为他们的推论是正确的,声称科学实验的好处,而没有进行适当的实验。当存在不确定性时,你所做的不能算作实验,除非所有以下三个要素都存在:
- 应用不同的处理
- 随机分配的治疗
- 科学假说得到验证(见我的解释此处
如果你需要复习这个话题和它的逻辑,看看我的文章 你是否因为错误地使用“实验”这个词而感到内疚?
实验为什么有效?
为了理解为什么实验是对因果关系进行推论的工具,让我们来看看一个最简单的实验背后的逻辑:A/B 测试。
简短解释
如果你不想看详细的例子,看看这个 GIF,然后跳到最后一节(“秘制酱是随机化的”):
冗长的解释
如果你喜欢一个全面的例子,我已经为你准备好了。
想象一下,你的公司有一个灰色的标志已经有几年了。既然你所有的竞争对手都有灰色标识(模仿是最真诚的奉承),你的高管们坚持要换成更明亮的颜色……但是是哪一种呢?
您的用户看到的徽标是灰色的,但这种情况即将改变。
在仔细评估了你公司的网站配色方案的实用性后,你的设计团队确定了仅有的两个可行的候选色:蓝色和橙色。
CEO 最喜欢的颜色是蓝色,所以她选择批准蓝色作为 默认动作 。换句话说,她是说如果没有进一步的信息,她很乐意选择蓝色。对你来说幸运的是,她是一个强有力的数据驱动型领导,愿意允许数据改变主意。
为了切换到的 替代动作 批准一个橙色标志,CEO 需要证据证明一个橙色标志 导致 你当前的用户群在你网站的特定部分点击更多(相对于蓝色)。
你是公司的高级数据科学家,所以你要竖起耳朵。从frequentist statist**中,你立即发现你的 CEO 的决策方法符合框架。仔细听完她的话后,你确认她的无效假设和替代假设与因果关系有关。这意味着你需要做一个实验!总结她告诉你的话:
默认动作: 批准蓝色标志。
替代动作: 批准橙色标志。
无效假设: 橙色标志 不会导致 比蓝色标志至少多 10%的点击量。
替代假设: 橙色标志 确实会导致 比蓝色标志多至少 10%的点击量。
为什么是 10%?这是你的 CEO 愿意接受的最小 效应大小 。如果决策者关心效果的大小,那么这些应该在一开始就纳入假设检验。测试“无差异”的零假设是一个明确的声明,你根本不在乎效果的大小。
对于这样的设置,A/B 测试是完美的实验设计。(对于其他因果决定,可能需要其他设计。虽然我在这里只讨论 A/B 测试,但是更复杂的设计背后的逻辑是相似的。)
所以,我们来做个 A/B 测试吧!
现场交通实验
有各种各样的方法来运行 A/B 测试。你在心理学实验室(和焦点小组研究)看到的往往是邀请街上的人,随机向不同的人展示不同的刺激,然后问他们问题。唉,你的首席执行官正在寻找更困难的事情。她的问题只能用一个实时流量 实验来回答,听起来确实是这样的:当不同的用户在你的网站上处理日常事务时,你将为他们提供不同版本的 logo。
实验基础设施
如果你想运行一个真实的交通实验,你需要一些特殊的基础设施。与您的工程师合作,建立随机为不同用户提供不同治疗的能力,以及根据治疗条件跟踪您的 CEO 所需指标(某些网站元素的点击率)的能力。
(如果你想知道为什么每个人都不总是做实时交通实验,答案通常与重新配置一个没有考虑实验的生产系统的高昂前期成本有关。虽然像 Google 这样的公司在我们甚至知道我们想要运行什么实验之前就在我们的大部分系统中构建了实验基础设施,但传统组织可能会忘记在一开始就添加这一功能,结果可能会发现自己落后于更懂技术的竞争对手。顺便提一下,如果你想进入应用的 ML/AI 游戏,实验基础设施是必须的。)
样品
因为你非常谨慎,所以你不会用一个突然出现的新 logo 让所有用户感到惊讶。更明智的做法是为您的实验抽取一部分用户,然后逐步推广(如果您的更改造成了不可预见的灾难,可以选择回滚到灰色)。
控制
图片:来源
如果你有兴趣了解用户对新奇事物的反应——他们是否会因为商标改变而点击更多,而不管它变成了什么?—你可以使用灰色标志作为你的对照组。然而,这不是你的首席执行官想要回答的问题。她对隔离橙色相对于蓝色的因果影响感兴趣,因此考虑到她构建决策的方式,控制组应该是显示蓝色标志的用户。
首先,您的系统尝试性地将蓝色徽标基线应用于样本中的所有用户。
但在系统实际向他们展示蓝色标志之前,实验基础设施投掷一枚虚拟硬币,随机将一些用户重新分配到橙色治疗中,并向他们展示橙色而不是蓝色。
然后——随机地——你向一些用户展示橙色版本,但不向其他用户展示。
如果你随后观察到橙色版本的平均点击率更高,你将能够说是橙色处理导致了行为的差异。如果这一差异在统计上高于 10%,你的首席执行官会像她承诺的那样,愉快地换成橙色。如果没有,她会选择蓝色。
如果用户在橙色处理条件下的反应不同于控制条件,你可以说显示橙色版本* 比蓝色版本导致* 更多的点击。
秘方是随机化
如果你没有随机地这样做,如果你给所有登录的用户橙色处理,而给其他人显示蓝色处理,你不能说是橙色处理造成了差异。也许你的登录用户只是对你的公司更忠诚,更喜欢你的产品,不管你把 logo 做成什么颜色。也许你的登录用户有更高的点击倾向,无论你向他们展示什么颜色。
随机化是关键。这是让你得出因果结论的秘方。
这就是为什么随机性是如此重要。在大样本量的情况下(没有大量的统计能力实验就无法进行),随机选择会产生差异明显的群体。从统计学上来说,这两个群体是彼此可信的克隆体。
你的决策标准越简单,样本量越大,你的实验设计就越简单。A/B 测试很棒,但更花哨的实验设计允许您明确控制一些混淆因素(例如,2x2 设计,您将登录用户与未登录用户分开,并在每个组中运行迷你 A/B 测试,让随机性为您处理其余的问题)。当您强烈预感到橙色徽标会对登录用户产生不同的影响,并且希望将这一点纳入您的决策时,这一点尤其有用。无论哪种方式,随机选择都是必须的!图片:来源
由于随机选择,在 A/B 测试的蓝色和橙色条件下的用户群体在所有方面都是相似的(总的来说),人们传统上认为他们会挑选参与者来平衡他们的学业:相似的性别,种族,年龄,教育水平,政治观点,宗教信仰……但他们在所有你可能没有想到要控制的方面也是相似的:相似的爱猫者,喝茶者,游戏者,哥特人,高尔夫球手,尤克里里所有者,慷慨的给予者,优秀的游泳者,暗中讨厌他们的配偶的人,没有这样做的人
当你使用随机化来创建两个大的组时,你得到了一个统计空白画布。
这就是大样本和随机选择相结合的好处。你不必依靠你的聪明来想出正确的混杂因素来控制。当你使用随机化来创建两个大组时,你得到了一个统计空白画布——你的两个组在统计上在各方面都是相同的,除了一点:你要对他们做什么。
除了一点:你要对他们做什么之外,你的两组在统计上完全相同。
如果你观察到两组结果之间的实质性差异,你将能够说所发生的差异是由于 你所做的。你可以说是你的治疗造成的。这就是(适当的)实验的惊人力量!
如果我们做了一个真正的实验,并在小组结果中发现了显著的差异,我们可以把这归咎于我们所做的!
开怀大笑之后,互联网对这些猫做的第一件事就是玩一个非常吹毛求疵的游戏“找出差异”如果你展示两个劣质的“克隆体”并试图将不同的结果归咎于不同的治疗方法,科学家也会这么做。没有大样本,你怎么知道不是鼻子下面的那个小点导致了你可能观察到的任何结果?图片:来源。
感谢阅读!喜欢作者?
如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。不能选择?试试这个:
曾经希望有人能告诉你统计学的意义是什么,术语用简单的英语表达是什么意思吗?让…
towardsdatascience.com](/statistics-for-people-in-a-hurry-a9613c0ed0b)
与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
人工智能课程怎么样?
如果你想尝试一门为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
在这里欣赏整个课程播放列表:bit.ly/machinefriend
对话式代理如何回答问题?
自然语言处理、知识图表和智能的三大支柱
Jibo,Echo/Alexa,Google Home
智力的三大支柱
对亚马逊来说,其语音代理 Alexa 受到的欢迎是一个巨大的惊喜。苹果的 Siri 已经把语音输入放到了智能手机上。但是现在有了一种新的设备,你可以隔着厨房对着它大喊大叫来设置定时器,播放音乐,或者在网上查找事实。这种文化以雪崩般的笑话和迷因接纳了 Alexa。谷歌很快推出了自己的智能音箱 Google Home。初创公司 Jibo 通过自己的人工智能技术和第三方数据源的整合提供了类似的技能,但包装了一个有趣的角色,具有独特的旋转身体形式。
这些对话代理来自数百万美元的投资和数百名学术界和工业界最聪明的研究人员和开发人员的劳动。它们代表了人类在努力创造人造人以增强和扩大我们的智力方面的科学和工程成就的顶峰。这篇文章解释了这些设备如何解释问题和访问大量的知识来源。然而,知识只是智力的一个组成部分。因此,虽然对话式人工智能代理在某些方面非常聪明,但在其他方面它们仍然非常愚蠢。
我们可以问,“谁赢得了 1934 年的世界大赛?在 1934 年的世界职业棒球大赛中,圣路易红雀队以 4 比 3 击败了底特律老虎队。如果你足够幸运,住在图书馆附近,你会花半个小时去那里找一本包含这个事实的参考书。如果图书馆开放的话。无论从哪方面来看,这都是非凡的、明智的行为,而且非常有用。
然而,智力不是单一的东西。一方面,我们认识到人们有不同的智力,语言的,视觉空间的,音乐的,情感的,社会的。但在认知科学和人工智能领域,智能以不同的方式分解。
我们可以称之为智力的三大支柱。
智力的三大支柱
- 知识泛指事实、数据、技能、程序和信念,它们以这样的方式组织起来,在需要时可以被查找和访问。人工智能和认知科学的一个主要研究领域叫做知识表示。这是关于计算机数据结构中知识的组织和表达,以及对它们起作用的计算操作。虽然我们通俗地根据真假来区分知识和信念,但在计算智能领域,正确和不正确的断言都被视为同一标题下的“知识”支持和反对的证据、置信度以及与外部世界的基础事实的关系都被认为是附加到知识表示中的附加属性。
- 模式匹配是对特定线索和数据实例进行归纳。当我们考虑视觉场景或口语时,模式匹配的重要性是最明显的。在像素的详细信号级别,我们的眼睛永远不会两次看到完全相同的场景。总有一些东西是不一样的,也许是灯光,视角,我们眼睛的焦点。同样,在声音波形层面,我们永远不会听到完全相同的音频信号两次。即使我们一遍又一遍地播放一段录音,也会有一些东西发生变化,比如我们的头相对于扬声器的位置,远处微弱的汽车喇叭声,枕头的摆放都会稍微改变房间的音响效果。我们的大脑被设计成分离不相关的差异并提取共性,因此我们实际上可以在不同的时间识别相同的视觉场景或口语句子——就物体和单词而言。这个原则也延伸到更抽象的概念和想法。即使不同的音乐历史学家用不同的语言表达,我们也能识别出同样的列举出的关于为什么甲壳虫乐队是历史上最伟大的乐队的论点。
- 推理是获取一些明确陈述的断言和知识,并推导出新的断言的能力。逻辑推理和演绎的共同概念是推理的重要方面。但是概念更广。推理还延伸到通过应用不同的工作流程步骤来探索替代结果,例如,考虑最有效的运动序列来卸载洗碗机。人类推理的非凡之处在于,它会在需要的时候自动发挥作用。想想看:“一个装满牛奶的杯子被打翻了,洒在了地板上。”所以,玻璃里全是锯屑吗?不要!当然不是。我刚说是满满一杯牛奶。如果没有人提出,你甚至不会考虑那个无关紧要的锯屑提议,但是当它被提出时,答案立刻浮现在脑海中——不!锯屑一点也不像牛奶。
人工智能研究的思路往往专注于三大支柱中的一个或另一个,有时还会在它们之间架起桥梁。最近,最引人注目的突破发生在模式识别领域。深度学习是一种所谓的人工神经网络技术,它显著地变革了计算机视觉、语音识别和自然语言处理领域。此外,人工神经网络方法通过带来“软”或“模糊”表示来影响知识支柱,这是通过跨特征属性向量分布数值来实现的。
然而,人工智能还不能在一个总体的认知架构下统一三大智能支柱。根据需要,人类的大脑毫不费力地调用每一个智力支柱,并与其他支柱相协调。当我说,“满满一杯牛奶洒了”,你的大脑会自动将这个单词序列与知识联系起来——也许是一杯牛奶的视觉图像。推理步骤以心理模拟玻璃杯倾倒的形式触发,因此其中包含的液体流过边缘。在你自己的推理过程中,模式匹配的工具和知识都有所贡献。你知道牛奶和奶油是类似的东西,因此它们以同样的方式溢出。相比之下,锯屑和糖不是液体,而是颗粒性质相似;当倾倒时,它们以不同的方式流动和降落,彼此之间比任何液体都更相似。哪张纸巾合适,哪把扫帚合适?对你来说,液体和颗粒的区别是显而易见的。今天没有人工智能可以做到这一点。
对话代理的体系结构
缺乏这种深度,今天的对话代理仍然显示出非凡的能力来回答甚至是模糊的问题。这是由于智能、知识和模式匹配这两大支柱之间特别设计的伙伴关系。我们将重点关注称为知识图的知识表示,以及称为实体/意图识别的模式识别组件。
对话代理的架构如下所示。
对话代理的架构形成了一个感知/动作循环
对话代理的问答和其他类型的对话通过感知/动作循环架构进行。在其基本形式中,这是一系列的五个计算步骤。起点是当用户说出一个问题或命令时由麦克风拾取的声波。
- 一个叫做自动语音识别 (ASR)的计算模块将波形信号转换成单词的表示。
- 自然语言处理模块将单词翻译成内部计算机“语言”,称为逻辑形式。逻辑形式以统一的方式表示问题的含义,跨越人们可能用来问同一件事的不同可能的措辞。
- 对话管理器模块负责接收逻辑表单并决定如何响应。在对话管理器中搜索问题的可能答案,并形成响应。输出本身通常是一种逻辑形式。
- 自然语言生成将带有答案的逻辑形式转换回人类语言中的单词序列。
- 文本到语音模块使用一些定义声音质量和语调的训练参数来合成声音信号。这导致输出波形被发送到扬声器。
几十年来,对话代理的一个巨大障碍在于自动语音识别模块。如果用户所说的单词被错误地传输到 NLP 模块,那么就没有希望给出正确的答案。在过去的 15 年里,由于机器学习算法、计算能力和用于训练算法的可用数据集的进步,ASR 取得了爆炸性的进步。
知识图谱
如今,智能对话代理的尖端存在于自然语言处理和对话管理器模块中。首先让我们考虑如何用一个叫做知识图的知识表示来表示大量的事实。然后,我们将看到自然语言处理如何从用户的查询中构造逻辑形式,以在知识图中查找答案。
大知识图的一小部分。
图由节点和连接节点的链接组成。在知识图中,节点代表世界上的事物,或称实体,链接代表实体之间的关系。实体可以是具体的也可以是抽象的。上图显示了一个大得多的图表的一小部分。这部分代表了这样一个事实:伦纳德·尼莫伊是一个人,他扮演了斯波克这个角色,在星际迷航中斯波克是一个角色,而星际迷航是一部电视剧。
知识图在使用节点和链接的方式上可以有不同的规则和设计参数。在一些知识图中,实体有两种类型,类型的实体(绿色)是事物的类别,而标记的实体(蓝色)是特殊的实例。这个伦纳德·尼莫伊节点是一个令牌,一个 Person 类型的实例。在一些知识图中,实体是分层组织的,因此,例如,电视连续剧可以是类别的子类型,娱乐类型。一些知识图定义了一组固定的链接/关系类型,而其他的是开放式的。
这些规则和设计参数就是知识图的本体。本体论的意思是,“存在的本质”,这个词来自哲学的一个分支,认识论,它研究知识的本质。抽象的知识与现实世界有什么关系?agents 如何获取知识,面对变化保持知识,并对其正确性投入信任?人工智能研究的历史已经揭示出,很大程度上取决于关于知识本体的设计决策。例如,如果一个知识图允许链接取任意标签,那么如何发现两个链接是等价的,或者是矛盾的?在纯粹的实践基础上,当涉及到设计知识本体时,坚定的技术工程师已经非常欣赏和尊重哲学家带来的智慧。
多年来,根据一系列或多或少受到严格约束的知识本体,已经构建了许多知识图。它们中的许多都非常大,并在今天被大量使用,包括为应用程序开发人员提供访问的 API(应用程序编程接口)。知识内容(实际的节点和链接)是通过从维基百科、报纸文章和其他在线资源中找到的文本的手动管理和自动获取的各种组合来添加的。
知识图表可以直接回答诸如“T2,谁在《星际迷航》中扮演了斯波克?“要回答这个问题,首先必须将其转换为能够处理实体和关系的逻辑形式表示。这项工作由 NLP 模块执行,它与 ASR 一起充当对话代理的模式匹配支柱。
自然语言处理是计算语言学的一个实际应用。这个领域还旨在实现自然语言理解这一更雄心勃勃的目标,但这个术语有些过头了,因为我们传统意义上的“理解”将知识、模式匹配和推理结合在一起,达到了今天的人工智能根本无法达到的程度。
自然语言处理的最初步骤包括根据单词的语法词性和已知的实体类型对单词进行分类。单词“who”是一个疑问代词,而“in”是一个介词,表示包含或成员关系。“Spock”和“Star Trek”被标记为在预先编译的实体名称列表中找到的已知实体名称。
实体/意图提取将自然语言问题转换成逻辑形式的查询。
给定单词的这种分类,称为实体/意图提取的处理步骤试图根据其目的(问题、命令、陈述等)对话语进行分类。)然后分配与该目的相关联的已知和未知实体。实体/意图提取分析话语的句法结构,这取决于词序。如今,机器学习方法在如何实现这一点的详细步骤中占据主导地位。每个句法模式都映射到一个逻辑表单模板。这个例子展示了一种写出逻辑形式的方法。如果你能读懂 computerese 的嵌套括号,那么你就能自己弄明白原来的问题是如何转换的。最后,原始单词序列中的实际实体和关系填充到模板中,从而产生最终的逻辑形式,它表示用户所要求的内容,但现在是高度结构化的格式。
方便的是,逻辑形式本身相当于一个图。这被称为查询图。示例查询图看起来很像知识图中关于斯波克和星际旅行的部分,除了人物实例节点有一个问号。那就是用户想知道的未知值。
子图匹配找到与查询一致的知识图的一部分。
从这里开始,应用计算机科学中的一个众所周知的方法,子图匹配。这仅仅意味着,找到与查询图的指定节点和链接一致的庞大知识图的一部分。未知的 Person 实例节点是一个通配符变量,它将匹配知识图中的任何内容。当子图匹配完成后,再找到这个节点与知识图中的伦纳德·尼莫伊节点对应,转眼间,就可以填写并返回一个答案。
逆过程将填充的查询图转换回自然语言的句子,这一次是作为语句而不是问题。通过文本到语音转换模块,代理自豪而愉快地展示了它的才华。好吧,这是一台计算机所能获得的机械的骄傲和快乐。工程师和他们的赞助商收获了荣誉。
知识图只是可用于存储自然语言查询信息的几种结构化数据表示中的一种。当大量数据项具有相同的属性集时,关系数据库是首选。但是像知识图一样,所有的数据组织都提供了通过逻辑形式查询访问的接口。
有了对对话代理如何执行问题回答的这种理解,人们就可以通过与他们交谈来探索他们的知识来源和自然语言能力。例如,我们可以追踪 Alexa 关于《星际迷航》和其他电视剧的知识实际上来自哪里。这是另一篇文章的主题。
我如何成为一名数据分析师?
已回答的常见数据分析师问题
如果你想知道如何成为一名数据分析师,或者数据分析师是做什么的,那么很难从所有可用的信息中找到直接的答案。今天,我想回答我作为数据分析师遇到的最常见的问题,如果你对数据分析职业感兴趣,我会为你指出正确的方向。
我如何成为一名数据分析师?
没有一个确切的答案,因为有许多方法可以让你成为数据分析师。这些是典型的方式:
- 来自公司内部的转变 —我认识一些人,他们不得不学习 SQL,因为他们需要数据,而周围没有数据分析师。随着时间的推移,他们能够过渡到同一家公司的数据分析师角色。
- 数据相关学位 —这可以是数据分析或数据科学学位,但我也见过拥有经济学或商业学位的人成为数据分析师。这是最直接的途径。
- 数据分析训练营 —这对于那些不需要回到研究生院就想转行的人来说很常见。根据全职或兼职的选择,训练营通常持续 3 至 6 个月,主要关注旨在涵盖数据分析师所需基本技能的课程。
- 自学—DIY 版,你必须弄清楚要成为一名数据分析师需要学习什么。好处是你可以按照自己的速度学习,但坏处是如果你有问题,没有人指导你。
成为一名数据分析师需要具备哪些技术技能?
这些是数据分析师最常见的技能。
- SQL—这是必须具备的技能。不精通 SQL,就不可能成为一名数据分析师。
- Excel —不是必须的,但知道了也很好。我发现 Excel 对于快速绘制数据图表以发现异常值和趋势非常有用。Excel 数据透视表是我最好的朋友。
- 大多数工作清单都需要 Python 知识,但我很少在工作中用到它。其他数据分析师的工作可能就不是这样了。学习 Jupyter 笔记本基础知识来运行 Python 代码和像 Pandas 和 NumPy 这样的通用数据分析包是很好的。
- 数据可视化 — Tableau 是一个常用的可视化工具,如果你想学习的话。如果你不知道招聘公司的数据可视化工具,这就不是交易破坏者。我在工作中学会了 Tableau,我缺乏知识并不是雇佣我的一个因素。
- 数据管道 开发 —如果你加入一家没有数据基础设施或者缺乏数据工程师的公司,这一点很少被《非常重要》提及。数据分析师工作的一个关键部分是将不同来源的数据加载到一个中央数据库中,并对其进行转换,以便进行下游分析和报告。根据公司的不同,知道如何将来源联系在一起并使其成为可用于分析的数据可能是分析师工作的一大部分。
职位描述需要比招聘经理所能接受的更多的技能,因为他们想找到最好的候选人,即使不是所有的技能都是工作所需要的。如果你至少具备所列技能的一半,我建议你申请这份工作。
数据分析师能成为数据科学家吗?
如果我作为一名数据工程师仅仅通过了解数据而成为一名数据科学家,那么数据分析师绝对有可能成为一名数据科学家。数据科学家 80%的时间花在数据准备上。数据分析师工作的很大一部分也是数据准备,你需要学习剩下的 20%来成为数据科学家。
[## 我从数据工程师到数据科学家的不可思议的转变,之前没有任何经验
通过掌握一项基本技能
towardsdatascience.com](/my-unbelievable-move-from-data-engineer-to-data-scientist-without-any-prior-experience-6f76614fe340)
数据分析师是做什么的?
数据分析师的主要角色是使用数据回答业务问题,帮助利益相关者做出可行的决策。这些是数据分析师回答业务问题的典型方式。
- 提取数据分析趋势。数据会因您支持的部门而异,如营销、产品、财务等。
- 评估 A/B 测试是公司确定某样东西的最佳表现版本的常用方法。这可以是一个电子邮件主题行测试,以确定哪个主题会增加电子邮件的点击率,或者是一个新产品功能,以查看它是否会增加用户参与度。
- 开发仪表板以监控 KPI(关键绩效指标)
数据分析师的职责因公司而异。仔细阅读职位描述,并确保在面试时提问,以评估需要什么样的工作,因为数据分析师的职责不是普遍的。
我如何成为一名成功的数据分析师?
除了所有的技术技能之外,一个成功的数据分析师还将拥有出色的软技能。良好的沟通技巧是培养成功所需的软技能的基础。无论你做了多么好的分析,如果你没有能力将关键点传达给你的利益相关者来帮助他们做决定,那么你可能永远也做不了。公司聘请数据分析师来帮助他们做出更好的数据驱动决策,而不是依赖直觉。良好的沟通技巧可以帮助你理解利益相关者的需求,并以清晰的方式展示结果。
你可能也会喜欢…
我希望从一开始就知道的成功秘诀
towardsdatascience.com](/my-experience-as-a-data-scientist-vs-a-data-analyst-91a41d1b4ab1) [## 没有经验如何获得第一份数据分析师工作
回答——这不仅仅是拥有技术技能
madfordata.medium.com](https://madfordata.medium.com/how-to-get-your-first-data-analyst-job-without-experience-7a9afc663439)