快捷搜索:  汽车  科技

不确定度分析:我花了一年时间研究不确定性估算

不确定度分析:我花了一年时间研究不确定性估算然而我很快发现,我给自己挖了个深坑。几个月后:而且我发现,对于几乎任何图表,量化不确定性都很有用,所以我也开始尝试。 我的新年目标:我在2018年期间绘制的每一幅图表都要包含不确定性估算为什么立下这个flag?因为我在各种大会上听腻了人们争论每个月微件(widget)的数量是上升还是下降,或者微件方法X是否比微件方法Y更有效率。

不确定度分析:我花了一年时间研究不确定性估算(1)

大数据文摘出品

编译:李雷、Javen、Aileen

一个半路出家的程序员,一年来学习不确定性估算的经验。

让我从年初的一个flag说起:

不确定度分析:我花了一年时间研究不确定性估算(2)

我的新年目标:我在2018年期间绘制的每一幅图表都要包含不确定性估算

为什么立下这个flag?因为我在各种大会上听腻了人们争论每个月微件(widget)的数量是上升还是下降,或者微件方法X是否比微件方法Y更有效率。

而且我发现,对于几乎任何图表,量化不确定性都很有用,所以我也开始尝试。

然而我很快发现,我给自己挖了个深坑。几个月后:

不确定度分析:我花了一年时间研究不确定性估算(3)

现在已经是今年的第4个月,我要告诉你,估算不确定性的水还挺深。

我从未学过统计学,也没有通过机器学习来逆向了解过它。所以我算是半路出家,在慢慢自学统计知识。今年早些时候,我还只了解一些关于Bootstrapping算法(拔靴法)和置信区间的基本知识,但随着时间的推移,我学会了蒙特卡罗方法和逆Hessians矩阵(黑塞矩阵)等全套把戏。

这些方法很有用,我也想把这一年的经营教训分享给大家。

从数据开始

我相信没有具体例子是无法真正学到东西的,所以让我们先制造一些数据。我们将生成一个假的时间系列,其日期范围从2017-07-01至2018-07-31,比如说这个序列是一头大象重量的观测值。

def generate_time_series(k=200 m=1000 sigma=100 n=50 start_date=datetime.date(2017 7 1)): xs = numpy.linspace(0 1 n endpoint=False) ys = [k*x m random.gauss(0 sigma) for x in xs] ts = [start_date datetime.timedelta(x)*365 for x in xs] x_scale = numpy.linspace(-1 2 500) # for plotting t_scale = [start_date datetime.timedelta(x)*365 for x in x_scale] return xs ys ts x_scale t_scale xs ys ts x_scale t_scale = generate_time_series()

不确定度分析:我花了一年时间研究不确定性估算(4)

在开始之前,我们需要做图来看看发生了什么!

pyplot.scatter(ts ys alpha=0.5 s=100) pyplot.xlabel('Date') pyplot.ylabel('Weight of elephant (kg)')

首先,我们不用任何花哨的模型,我们只是将其分解为几个区间(bucket)并计算每个区间的平均值。不过,让我们先停下来谈谈不确定性。

数据分布与不确定性

之前我一直搞不清“不确定性”的意思,但我认为搞清楚这一点非常重要。我们可以为多种不同的数据估算分布:

1. 数据本身。给定一定的时间范围(t ,t '),在这个时间间隔内大象体重的分布是什么?

2.某些参数的不确定性。如参数k在线性关系y = k t m里,或者某些估算器的不确定性,就像许多观测值的平均值一样。

3.预测数值的不确定性。因此,如果我们预测日期为t(可能在未来)时大象的重量是y公斤,我们想知道数量y的不确定性。

让我们从最基本的模型开始 - 只需在区间中分解问题。如果我们只是想学习一些关于分布和不确定性估计的基本概念,那么我推荐Seaborn软件包。Seaborn通常在数据帧上运行,因此我们需要进行转换:

d = pandas.DataFrame({'x': xs 't': ts 'Weight (kg)': ys}) d['Month'] = d['t'].apply(lambda t: t.strftime('%Y-%m')) seaborn.boxplot(data=d x='Month' y='Weight (kg)')

不确定度分析:我花了一年时间研究不确定性估算(5)

猜您喜欢: