Machine Learning Mastery 统计学教程(一)

原文:Machine Learning Mastery

协议:CC BY-NC-SA 4.0

浅谈计算正态汇总统计量

原文: machinelearningmastery.com/a-gentle-introduction-to-calculating-normal-summary-statistics/

数据样本是来自更广泛人群的快照,可以从域中获取或由过程生成。

有趣的是,许多观察结果符合称为正态分布的常见模式或分布,或者更正式地说,符合高斯分布。关于高斯分布的知识很多,因此,存在可以与高斯数据一起使用的统计和统计方法的整个子场。

在本教程中,您将发现高斯分布,如何识别它,以及如何计算从此分布中提取的数据的关键摘要统计量。

完成本教程后,您将了解:

  • 高斯分布描述了许多观察,包括在应用机器学习期间看到的许多观察。
  • 分布的中心趋势是最可能的观察,并且可以从数据样本估计为平均值或中值。
  • 方差是与分布中的平均值的平均偏差,并且可以从数据样本估计为方差和标准偏差。

让我们开始吧。

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

计算正态汇总统计的温和介绍
John 的照片,保留一些权利。

教程概述

本教程分为 6 个部分;他们是:

  1. 高斯分布
  2. 样本与人口
  3. 测试数据集
  4. 中心倾向
  5. 方差
  6. 描述高斯

高斯分布

数据分布是指绘制图形时的形状,例如直方图。

最常见且因此众所周知的连续值分布是钟形曲线。它被称为“_ 正常 _”分布,因为它是许多数据所属的分布。它也被称为高斯分布,更正式地命名为 Carl Friedrich Gauss。

因此,您将看到对正常分布或高斯的数据的引用,这些引用是可互换的,两者都指向同一事物:数据看起来像高斯分布。

具有高斯分布的观测的一些示例包括:

  • 人的高度。
  • 智商分数。
  • 体温。

我们来看看正态分布。下面是一些生成和绘制理想化高斯分布的代码。

# generate and plot an idealized gaussian
from numpy import arange
from matplotlib import pyplot
from scipy.stats import norm
# x-axis for the plot
x_axis = arange(-3, 3, 0.001)
# y-axis as the gaussian
y_axis = norm.pdf(x_axis, 0, 1)
# plot data
pyplot.plot(x_axis, y_axis)
pyplot.show()

运行该示例生成理想化高斯分布的图。

x 轴是观察值,y 轴是每次观察的频率。在这种情况下,大约 0.0 的观测值是最常见的,-3.0 和 3.0 附近的观测值很少或不太可能。

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

高斯分布的线图

当数据是高斯数据或我们假设用于计算统计量的高斯分布时,它是有用的。这是因为非常好理解高斯分布。因此,统计领域的大部分内容专门用于此分发的方法。

值得庆幸的是,我们在机器学习中使用的许多数据通常符合高斯分布,例如我们可用于拟合模型的输入数据,以及对不同训练数据样本的模型的重复评估。

并非所有数据都是高斯数据,有时候通过查看数据的直方图或使用统计检验来检查是非常重要的。一些不符合高斯分布的观测实例包括:

  • 人民的收入。
  • 城市人口。
  • 销售书籍。

样本与人口

我们可以想到由某个未知过程生成的数据。

我们收集的数据称为数据样本,而可以收集的所有可能数据称为总体。

  • 数据样本:来自一组的观察的子集。
  • 数据人口:来自一组的所有可能观察结果。

这是一个重要的区别,因为不同的统计方法用于样本与群体,在应用机器学习中,我们经常处理数据样本。如果您在谈论机器学习中的数据时阅读或使用“_ 群体 _”这个词,那么它很可能意味着在统计方法方面的样本。

您将在机器学习中遇到的两个数据样本示例包括:

  • 训练和测试数据集。
  • 模型的表现分数。

使用统计方法时,我们通常只想使用样本中的观察结果来对群体进行声明。

两个明显的例子包括:

  • 训练样本必须代表观察人口,以便我们能够拟合一个有用的模型。
  • 测试样本必须代表观察人口,以便我们能够对模型技能进行无偏见的评估。

因为我们正在处理样本并对人口提出索赔,这意味着总有一些不确定性,理解和报告这种不确定性很重要。

测试数据集

在我们探索具有高斯分布的数据的一些重要汇总统计量之前,让我们首先生成一个我们可以使用的数据样本。

我们可以使用randn()NumPy 函数生成从高斯分布中提取的随机数样本。

有两个关键参数定义任何高斯分布;它们是均值和标准差。稍后我们将更多地介绍这些参数,因为它们也是估计何时从未知高斯分布中获取数据的关键统计量。

randn() 函数将生成从高斯分布中绘制的指定数量的随机数(例如 10,000),其均值为零,标准差为 1.然后我们可以将这些数字缩放为高斯分布我们通过重缩放数字来选择。

通过添加所需的平均值(例如 50)并将该值乘以标准偏差(5),可以使这一点保持一致。

data = 5 * randn(10000) + 50

然后,我们可以使用直方图绘制数据集,并查找绘制数据的预期形状。

下面列出了完整的示例。

# generate a sample of random gaussians
from numpy.random import seed
from numpy.random import randn
from matplotlib import pyplot
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# histogram of generated data
pyplot.hist(data)
pyplot.show()

运行该示例将生成数据集并将其绘制为直方图。

我们几乎可以看到数据的高斯形状,但它是块状的。这突出了一个重点。

有时,数据不会是完美的高斯分布,但它会有类似高斯分布的分布。它几乎是高斯的,如果以不同的方式绘制,以某种方式缩放,或者如果收集更多数据,它可能会更高斯。

通常,在处理类似高斯的数据时,我们可以将其视为高斯数据并使用所有相同的统计工具并获得可靠的结果。

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

高斯数据集的直方图

在这个数据集的情况下,我们确实有足够的数据,并且绘图是块状的,因为绘图功能选择任意大小的桶来分割数据。我们可以选择一种不同的,更精细的方式来分割数据并更好地揭示基础高斯分布。

下面列出了更精确的绘图的更新示例。

# generate a sample of random gaussians
from numpy.random import seed
from numpy.random import randn
from matplotlib import pyplot
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# histogram of generated data
pyplot.hist(data, bins=100)
pyplot.show()

运行该示例,我们可以看到,选择 100 个数据分割可以更好地创建一个清晰显示数据高斯分布的图。

数据集是从完美高斯生成的,但数字是随机选择的,我们只选择 10,000 个观察样本。您可以看到,即使使用此受控设置,数据样本中也会出现明显的噪音。

这突出了另一个重点:我们应该总是期望我们的数据样本中存在一些噪音或限制。与纯底层分布相比,数据样本将始终包含错误。

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

具有更多区间的高斯数据集的直方图

集中趋势

分布的中心趋势是指分布中的中间或典型值。最常见或最可能的价值。

在高斯分布中,集中趋势称为均值,或者更正式地称为算术平均值,并且是定义任何高斯分布的两个主要参数之一。

样本的平均值计算为观察值之和除以样本中观察值的总数。

mean = sum(data) / length(data)

它也以更紧凑的形式写成:

mean = 1 / length(data) * sum(data)

我们可以通过在数组上使用mean()NumPy 函数来计算样本的平均值。

result = mean(data)

下面的示例在上一节中开发的测试数据集上演示了这一点。

# calculate the mean of a sample
from numpy.random import seed
from numpy.random import randn
from numpy import mean
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# calculate mean
result = mean(data)
print('Mean: %.3f' % result)

运行该示例计算并打印样本的平均值。

该样本的算术平均值的计算是对从中抽取样本的群体的基础高斯分布的参数的估计。作为估计,它将包含错误。

因为我们知道基础分布的真实均值为 50,所以我们可以看到 10,000 个观测样本的估计值是合理准确的。

Mean: 50.049

平均值很容易受到异常值的影响,即远离平均值的罕见值。这些可能是分布边缘或错误的合法罕见的观察。

此外,平均值可能会产生误导。计算另一个分布上的均值,例如均匀分布或功率分布,可能没有多大意义,因为尽管可以计算该值,但它将指代看似任意的预期值而不是分布的真正集中趋势。

在异常值或非高斯分布的情况下,计算的替代和常用的集中趋势是中值。

通过首先对所有数据进行排序然后在样本中定位中间值来计算中值。如果存在奇数个观测值,则这很简单。如果存在偶数个观测值,则将中值计算为中间两个观测值的平均值。

我们可以通过调用median()NumPy 函数来计算数组样本的中位数。

result = median(data)

下面的示例在测试数据集上演示了这一点。

# calculate the median of a sample
from numpy.random import seed
from numpy.random import randn
from numpy import median
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# calculate median
result = median(data)
print('Median: %.3f' % result)

运行该示例,我们可以看到中值是从样本计算并打印出来的。

结果与平均值没有太大差别,因为样本具有高斯分布。如果数据具有不同的(非高斯)分布,则中值可能与均值非常不同,并且可能更好地反映潜在人口的集中趋势。

Median: 50.042

方差

分布的方差指的是观察结果与平均值变化或不同的平均值。

将方差视为衡量分布扩散的指标是有用的。低方差将具有围绕均值分组的值(例如,窄钟形),而高方差将具有从均值分布的值(例如,宽钟形)。

我们可以通过一个例子,通过绘制具有低和高方差的理想高斯来证明这一点。下面列出了完整的示例。

# generate and plot gaussians with different variance
from numpy import arange
from matplotlib import pyplot
from scipy.stats import norm
# x-axis for the plot
x_axis = arange(-3, 3, 0.001)
# plot low variance
pyplot.plot(x_axis, norm.pdf(x_axis, 0, 0.5))
# plot high variance
pyplot.plot(x_axis, norm.pdf(x_axis, 0, 1))
pyplot.show()

运行该示例绘制了两个理想化的高斯分布:蓝色具有围绕均值分组的低方差,而橙色具有更高的方差和更多的分布。

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

具有低和高方差的高斯分布的线图

从高斯分布中提取的数据样本的方差计算为样本均值中样本中每个观察值的平均平方差:

variance = 1 / (length(data) - 1) * sum(data[i] - mean(data))²

方差通常表示为 s ^ 2 ,清楚地显示度量的平方单位。您可以从观察数量中看到没有( - 1)的等式,这是对总体而不是样本的方差的计算。

我们可以使用 var() 函数计算 NumPy 中数据样本的方差。

下面的示例演示了计算测试问题的方差。

# calculate the variance of a sample
from numpy.random import seed
from numpy.random import randn
from numpy import var
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# calculate variance
result = var(data)
print('Variance: %.3f' % result)

运行该示例计算并打印方差。

Variance: 24.939

很难解释方差,因为单位是观测值的平方单位。我们可以通过取结果的平方根将单位返回到观测的原始单位。

例如,24.939 的平方根约为 4.9。

通常,当总结高斯分布的扩展时,使用方差的平方根来描述。这称为标准偏差。标准偏差和均值是指定任何高斯分布所需的两个关键参数。

我们可以看到 4.9 的值非常接近于为测试问题创建样本时指定的标准偏差的值 5。

我们可以将方差计算包装在平方根中以直接计算标准偏差。

standard deviation = sqrt(1 / (length(data) - 1) * sum(data[i] - mean(data))²)

标准偏差通常写为 s 或希腊小写字母 sigma。

可以通过 std() 函数直接在 NumPy 中计算标准偏差。

下面的示例演示了测试问题的标准偏差的计算。

# calculate the standard deviation of a sample
from numpy.random import seed
from numpy.random import randn
from numpy import std
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(10000) + 50
# calculate standard deviation
result = std(data)
print('Standard Deviation: %.3f' % result)

运行该示例计算并打印样本的标准偏差。该值与方差的平方根匹配,并且非常接近 5.0,即问题定义中指定的值。

Standard Deviation: 4.994

可以针对非高斯分布计算方差的度量,但是通常需要识别分布,以便可以计算特定于该分布的特定方差度量。

描述高斯

在应用机器学习中,您通常需要报告算法的结果。

也就是说,报告模型对样本外数据的估计技能。

这通常通过报告 k 折交叉验证或一些其他重复取样程序的平均表现来完成。

在报告模型技能时,您实际上总结了技能分数的分布,并且很可能从高斯分布中得出技能分数。

通常只报告模型的平均表现。这将隐藏模型技能分布的另外两个重要细节。

至少我建议报告模型分数的高斯分布和样本大小的两个参数。理想情况下,确认模型技能分数确实是高斯分数或看起来高斯足以防止报告高斯分布的参数也是一个好主意。

这很重要,因为技能分数的分布可以由读者重建,并且可能与未来相同问题的模型技能进行比较。

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 开发自己的测试问题并计算集中趋势和方差测量。
  • 开发一个函数来计算给定数据样本的摘要报告。
  • 加载并汇总标准机器学习数据集的变量

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

蜜蜂

用品

摘要

在本教程中,您发现了高斯分布,如何识别它,以及如何计算从此分布中提取的数据的关键摘要统计量。

具体来说,你学到了:

  • 高斯分布描述了许多观察,包括在应用机器学习期间看到的许多观察。
  • 分布的中心趋势是最可能的观察,并且可以从数据样本估计为平均值或中值。
  • 方差是与分布中的平均值的平均偏差,并且可以从数据样本估计为方差和标准偏差。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

非参数统计的温和介绍

原文: machinelearningmastery.com/a-gentle-introduction-to-nonparametric-statistics/

统计和统计方法领域的很大一部分专用于已知分布的数据。

我们已经知道或可以轻松识别分布的数据样本称为参数数据。通常,参数用于指代在常见用法中从高斯分布中提取的数据。分布未知或不易识别的数据称为非参数。

在使用非参数数据的情况下,可以使用专门的非参数统计方法来丢弃有关分布的所有信息。因此,这些方法通常被称为无分秘籍法。

在本教程中,您将发现非参数统计量及其在应用机器学习中的作用。

完成本教程后,您将了解:

  • 参数和非参数数据之间的区别。
  • 如何对数据进行排名以丢弃有关数据分布的所有信息。
  • 可用于排名数据的统计方法示例。

让我们开始吧。

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

非参数统计的温和介绍
Daniel Hartwig 的照片,保留一些权利。

教程概述

本教程分为 4 个部分;他们是:

  1. 参数数据
  2. 非参数数据
  3. 排名数据
  4. 使用排名数据

参数数据

参数数据是从已知数据分布中提取的数据样本。

这意味着我们已经知道了分布,或者我们已经确定了分布,并且我们知道分布的参数。通常,参数是从高斯分布中提取的实值数据的简写。这是一个有用的简写,但严格来说这并不完全准确。

如果我们有参数数据,我们可以使用参数方法。继续使用高斯参数意义的简写。如果我们有参数数据,我们可以利用为假设高斯分布的数据开发的整套统计方法,例如:

  • 摘要统计。
  • 变量之间的相关性。
  • 比较均值的显着性检验。

一般来说,我们更喜欢使用参数化数据,甚至可以使用数据参数化的数据准备方法,例如数据转换,这样我们就可以利用这些易于理解的统计方法。

非参数数据

不符合已知或易于理解的分布的数据称为非参数数据。

由于多种原因,数据可能是非参数的,例如:

  • 数据不是实数值,而是序数,间隔或其他形式。
  • 数据是实值的,但不符合很好理解的形状。
  • 数据几乎是参数化的,但包含异常值,多个峰值,移位或其他一些特征。

我们可以使用一套方法用于非参数数据,称为非参数统计方法。实际上,大多数参数方法都具有等效的非参数版本。

一般而言,非参数方法的结果不如其参数方法的结果强大,即因为它们必须被推广以适用于所有类型的数据。我们仍然可以使用它们进行推理并对结果和结果做出声明,但它们与参数方法的类似声明不具有相同的权重。有关分发的信息将被丢弃。

在序数或区间数据的情况下,非参数统计是唯一可以使用的统计类型。对于实值数据,当您尝试对不符合熟悉的高斯分布的数据进行声明时,应用机器学习中需要非参数统计方法。

排名数据

在可以应用非参数统计方法之前,必须将数据转换为等级格式。

因此,期望排名格式的数据的统计方法有时被称为排名统计,例如排名相关和排名统计假设检验。

排名数据正如其名称所示。程序如下:

  • 按升序对样本中的所有数据进行排序。
  • 为数据样本中的每个唯一值分配 1 到 N 的整数等级。

例如,假设我们有以下数据样本,以列形式显示:

0.020
0.184
0.431
0.550
0.620

我们可以按如下方式排序:

0.020
0.184
0.431
0.550
0.620

然后为每个值分配一个等级,从 1 开始:

1 = 0.021055
2 = 0.404622
3 = 0.488733
4 = 0.618510
5 = 0.832803

然后,我们可以将此过程应用于另一个数据样本,并开始使用非参数统计方法。

对于特殊情况,例如处理关系,使用反向排名和使用小数排名得分,此过程有不同的变化,但一般属性成立。

SciPy 库提供 rankdata() 函数来对数值数据进行排名,这支持排名的许多变化。

下面的示例演示了如何对数值数据集进行排名。

from numpy.random import rand
from numpy.random import seed
from scipy.stats import rankdata
# seed random number generator
seed(1)
# generate dataset
data = rand(1000)
# review first 10 samples
print(data[:10])
# rank data
ranked = rankdata(data)
# review first 10 ranked samples
print(ranked[:10])

首先运行该示例从统一分布生成 1,000 个随机数的样本,然后对数据样本进行排名并打印结果。

[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01
 1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01
 3.96767474e-01 5.38816734e-01]
[408\. 721\.   1\. 300\. 151\.  93\. 186\. 342\. 385\. 535.]

使用排名数据

您可以使用统计工具来检查样本数据是否适合给定的分布。

例如,如果我们将非参数数据作为看起来不是高斯的数据,那么您可以使用统计方法来量化高斯数据样本的方式,并在数据未通过这些测试时使用非参数方法。

正常性测试的统计方法的三个例子,如所谓:

  • Shapiro-Wilk 测试。
  • Kolmogorov-Smirnov 测试。
  • 安德森 - 达林测试

决定使用非参数统计量后,必须对数据进行排名。

实际上,您用于推理的大多数工具都会自动执行样本数据的排名。然而,重要的是要了解在执行测试之前如何转换样本数据。

在应用机器学习中,您可以使用非参数统计方法解决有关数据的两种主要问题。

变量之间的关系

量化变量之间依赖性的方法称为相关方法。

您可以使用的两种非参数统计相关方法是:

  • 斯皮尔曼的等级相关系数。
  • 肯德尔等级相关系数。

比较样本均值

量化两个群体之间的平均值是否显着不同的方法称为统计显着性检验。

您可以使用的三个非参数统计显着性检验包括:

  • 弗里德曼测试。
  • Mann-Whitney U 测试。
  • Wilcoxon 签名等级测试。

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 列出三个您认为可能需要在应用机器学习项目中使用非参数统计方法的示例。
  • 开发自己的示例来演示 rankdata() 函数的功能。
  • 编写自己的函数来对提供的单变量数据集进行排名。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

图书

API

用品

摘要

在本教程中,您发现了非参数统计量及其在应用机器学习中的作用。

具体来说,你学到了:

  • 参数和非参数数据之间的区别。
  • 如何对数据进行排名以丢弃有关数据分布的所有信息。
  • 可用于排名数据的统计方法示例。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

Python 中正态测试的温和介绍

原文: machinelearningmastery.com/a-gentle-introduction-to-normality-tests-in-python/

处理数据样本时的一个重要决策点是使用参数统计方法还是非参数统计方法。

参数统计方法假设数据具有已知且特定的分布,通常是高斯分布。如果数据样本不是高斯样本,则违反参数统计检验的假设,并且必须使用非参数统计方法。

您可以使用一系列技术来检查数据样本是否偏离高斯分布,称为正态性检验。

在本教程中,您将发现检查数据样本是否偏离正态分布的重要性以及可用于评估数据样本的一系列技术。

完成本教程后,您将了解:

  • 样本是否正常如何决定了与数据样本一起使用的统计方法的类型。
  • 用于限定偏离法线的图形方法,例如直方图和 Q-Q 图。
  • 用于量化偏离正常的统计正态性检验。

让我们开始吧。

  • 更新于 2018 年 5 月:更新了 Anderson-Darling 测试结果的解释,感谢 Elie。
  • 更新 May / 2018 :更新了关于“拒绝”与“拒绝拒绝”H0 的语言。

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

Python 中的正常性测试的温和介绍
Ramoun Cabuhay 的照片,保留一些权利。

教程概述

本教程分为 5 个部分;他们是:

  1. 正常性假设
  2. 测试数据集
  3. 视觉正常性检查
  4. 统计正态性检验
  5. 你应该用什么测试?

正常性假设

统计领域的很大一部分涉及假定它是从高斯分布中提取的数据。

如果使用假定高斯分布的方法,并且您的数据来自不同的分布,则结果可能会产生误导或明显错误。

有许多技术可以检查您的数据样本是高斯分布还是高斯分布式,以便使用标准技术,或者使用足够非高斯分布来代替使用非参数统计方法。

在为数据样本选择统计方法时,这是一个关键的决策点。我们可以总结这个决定如下:

If Data Is Gaussian:
	Use Parametric Statistical Methods
Else:
	Use Nonparametric Statistical Methods

还有一些中间地带我们可以假设数据是高斯的 - 足以使用参数方法,或者我们可以使用数据准备技术将数据转换为足够高斯以使用参数方法。

您可能需要在三个主要方面对机器学习项目中的数据样本进行评估;他们是:

  • 在拟合模型的情况下向模型输入数据。
  • 在模型选择的情况下进行模型评估。
  • 回归情况下模型预测的残差。

在本教程中,我们将研究两类检查数据样本是否为高斯的技术:

  • 图形方法。这些是用于绘制数据并定性评估数据是否看起来是高斯的方法。
  • 统计检验。这些是计算数据统计量并量化数据从高斯分布中抽取的可能性的方法。

这种方法通常称为正态性检验。

测试数据集

在我们开始研究正态性测试之前,让我们首先开发一个我们可以在本教程中使用的测试数据集。

我们将生成一个从高斯分布中抽取的随机数的小样本。

为测试数据集选择高斯随机数意味着我们确实希望每个测试都能正确识别分布,然而,小样本大小可能会在结果中引入一些噪声。

我们将使用 randn() NumPy 函数生成平均值为 0 且标准差为 1 的随机高斯数,即所谓的标准正态变量。然后我们将它们转换为平均值 50 和标准差 5。

下面列出了完整的示例。

# generate gaussian data
from numpy.random import seed
from numpy.random import randn
from numpy import mean
from numpy import std
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# summarize
print('mean=%.3f stdv=%.3f' % (mean(data), std(data)))

运行该示例将生成样本并打印样本的平均值和标准差。

我们可以看出,平均值和标准偏差是合理的,但是对于真实的基础人口平均值和标准偏差的粗略估计,给定小样本量。

mean=50.303 stdv=4.426

视觉正常性检查

我们可以创建数据图来检查它是否是高斯数据。

这些检查是定性的,因此不如我们将在下一节中计算的统计方法准确。然而,它们很快并且像统计测试一样,在您可以打电话询问数据样本之前,仍然必须进行解释。

在本节中,我们将介绍两种常见的方法,用于目视检查数据集以检查它是否是从高斯分布中提取的。

直方图

快速检查数据样本分布的简单且常用的绘图是直方图。

在直方图中,数据被分成预先指定数量的组,称为区间。然后将数据分类到每个箱中,并保留每个箱中观察数的计数。

该图显示了横跨 x 轴的箱保持其序数关系,以及 y 轴上每个箱中的计数。

数据样本具有直方图的高斯分布图,显示熟悉的钟形。

可以使用 hist()matplotlib 函数创建直方图。默认情况下,从数据样本中自动估计容器的数量。

下面列出了一个完整的例子,展示了测试问题的直方图。

# histogram plot
from numpy.random import seed
from numpy.random import randn
from matplotlib import pyplot
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# histogram plot
pyplot.hist(data)
pyplot.show()

运行该示例会创建一个直方图,显示每个 bin 中的观察数。

我们可以看到数据的类似高斯的形状,虽然不是熟悉的钟形,但是粗略的近似。

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

直方图绘制正态性检查

分位数 - 分位数图

用于检查数据样本分布的另一个流行图是分位数 - 分位数图,Q-Q 图或简称 QQ 图。

该图生成了我们正在比较的理想分布的自己的样本,在这种情况下是高斯分布。理想化的样本被分成组(例如 5),称为分位数。样本中的每个数据点与来自相同累积分布的理想分布的类似成员配对。

将得到的点绘制为散点图,其中 x 轴为理想值,y 轴为数据样本。

分布的完美匹配将通过从绘图的左下角到右上角的 45 度角的点线来显示。通常在图上绘制一条线以帮助明确这种期望。线上的点偏差表示与预期分布的偏差。

我们可以使用 qqplot()statsmodels 函数在 Python 中开发 QQ 图。该函数采用数据样本,默认情况下假设我们将其与高斯分布进行比较。我们可以通过将’_ 行 _'参数设置为’s’来绘制标准化行。

下面提供了将测试数据集绘制为 QQ 图的完整示例。

# QQ Plot
from numpy.random import seed
from numpy.random import randn
from statsmodels.graphics.gofplots import qqplot
from matplotlib import pyplot
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# q-q plot
qqplot(data, line='s')
pyplot.show()

运行该示例创建 QQ 图,其显示对角线中的点的散点图,紧密拟合来自高斯分布的样本的预期对角线图案。

有一些小的偏差,特别是在图的底部,这是小数据样本所预期的。

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

QQ 图正常检查

统计正态性检验

我们可以使用许多统计测试来量化数据样本是否看起来好像是从高斯分布中提取的。

每个测试都做出不同的假设,并考虑数据的不同方面。

我们将在本节中介绍 3 种常用测试,您可以将这些测试应用于您自己的数据样本。

解释考试

在应用统计测试之前,您必须知道如何解释结果。

每个测试至少会返回两件事:

  • 统计:通过测试计算的数量,通过将其与测试统计分布的临界值进行比较,可以在测试环境中进行解释。
  • p 值:用于解释测试,在这种情况下,样本是否是从高斯分布中提取的。

每个测试都会计算特定于测试的统计量。该统计量可以帮助解释结果,但可能需要更深入的统计量和更深入的特定统计检验知识。相反,p 值可用于在实际应用中快速准确地解释统计量。

测试假设样本是从高斯分布中提取的。从技术上讲,这称为零假设,即 H0。选择称为α的阈值水平,通常为 5%(或 0.05),用于解释 p 值。

在这些测试的 SciPy 实现中,您可以按如下方式解释 p 值。

  • p <= alpha :拒绝 H0,不正常。
  • p&gt; alpha :无法拒绝 H0,正常。

这意味着,一般来说,我们正在寻找具有更大 p 值的结果,以确认我们的样本可能来自高斯分布。

高于 5%的结果并不意味着零假设是正确的。这意味着,鉴于现有证据,这很可能是真的。 p 值不是数据拟合高斯分布的概率;它可以被认为是一个有助于我们解释统计测试的价值。

Shapiro-Wilk 测试

Shapiro-Wilk 测试评估数据样本并量化数据从高斯分布中抽取的可能性,以 Samuel Shapiro 和 Martin Wilk 命名。

在实践中,Shapiro-Wilk 测试被认为是对正常性的可靠测试,尽管有一些建议认为该测试可能适用于较小的数据样本,例如成千上万的观察或更少。

shapiro()SciPy 函数将计算给定数据集上的 Shapiro-Wilk。该函数返回由测试计算的 W 统计量和 p 值。

下面列出了对数据集执行 Shapiro-Wilk 测试的完整示例。

# Shapiro-Wilk Test
from numpy.random import seed
from numpy.random import randn
from scipy.stats import shapiro
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# normality test
stat, p = shapiro(data)
print('Statistics=%.3f, p=%.3f' % (stat, p))
# interpret
alpha = 0.05
if p > alpha:
	print('Sample looks Gaussian (fail to reject H0)')
else:
	print('Sample does not look Gaussian (reject H0)')

首先运行示例计算数据样本的测试,然后打印统计和计算的 p 值。

p 值感兴趣并且发现数据可能来自高斯分布。

Statistics=0.992, p=0.822
Sample looks Gaussian (fail to reject H0)

D’Agostino 的 K ^ 2 测试

D’Agostino 的 K ^ 2 检验根据数据计算汇总统计量,即峰度和偏度,以确定数据分布是否偏离正态分布,以 Ralph D’Agostino 命名。

  • 偏斜是左或右推送分布量的量化,是分布中不对称性的度量。
  • 峰度量化了尾部的分布量。它是一种简单且常用的常态统计检验。

D’Agostino 的 K ^ 2 检验可通过 normaltest()SciPy 函数获得,并返回检验统计量和 p 值。

下面列出了数据集上 D’Agostino 的 K ^ 2 检验的完整示例。

# D'Agostino and Pearson's Test
from numpy.random import seed
from numpy.random import randn
from scipy.stats import normaltest
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# normality test
stat, p = normaltest(data)
print('Statistics=%.3f, p=%.3f' % (stat, p))
# interpret
alpha = 0.05
if p > alpha:
	print('Sample looks Gaussian (fail to reject H0)')
else:
	print('Sample does not look Gaussian (reject H0)')

运行该示例计算统计量并打印统计量和 p 值。

p 值被解释为 5%的α,并且发现测试数据集没有显着偏离正常。

Statistics=0.102, p=0.950
Sample looks Gaussian (fail to reject H0)

安德森 - 达林测试

Anderson-Darling 测试是一项统计测试,可用于评估数据样本是否来自众多已知数据样本之一,以 Theodore Anderson 和 Donald Darling 命名。

它可用于检查数据样本是否正常。该测试是更复杂的非参数拟合优度统计检验的修改版本,称为 Kolmogorov-Smirnov 检验

Anderson-Darling 测试的一个特征是它返回一个临界值列表而不是单个 p 值。这可以为更彻底地解释结果提供基础。

anderson()SciPy 函数实现了 Anderson-Darling 测试。它将数据样本和分发的名称作为参数进行测试。默认情况下,测试将检查高斯分布( dist =‘norm’)。

下面列出了计算样本问题的 Anderson-Darling 检验的完整示例。

# Anderson-Darling Test
from numpy.random import seed
from numpy.random import randn
from scipy.stats import anderson
# seed the random number generator
seed(1)
# generate univariate observations
data = 5 * randn(100) + 50
# normality test
result = anderson(data)
print('Statistic: %.3f' % result.statistic)
p = 0
for i in range(len(result.critical_values)):
	sl, cv = result.significance_level[i], result.critical_values[i]
	if result.statistic < result.critical_values[i]:
		print('%.3f: %.3f, data looks normal (fail to reject H0)' % (sl, cv))
	else:
		print('%.3f: %.3f, data does not look normal (reject H0)' % (sl, cv))

运行该示例计算测试数据集上的统计量并打印临界值。

统计检验中的临界值是一系列预定义的显着性边界,如果计算的统计量小于临界值,则 H0 可能无法被拒绝。测试返回一系列不同的常用显着性水平的临界值,而不仅仅是单个 p 值。

如果计算的检验统计量小于选定显着性水平的临界值,我们可以通过不拒绝数据正常的零假设来解释结果。

我们可以看到,在每个显着性水平,测试发现数据遵循正态分布

Statistic: 0.220
15.000: 0.555, data looks normal (fail to reject H0)
10.000: 0.632, data looks normal (fail to reject H0)
5.000: 0.759, data looks normal (fail to reject H0)
2.500: 0.885, data looks normal (fail to reject H0)
1.000: 1.053, data looks normal (fail to reject H0)

你应该用什么测试?

我们已经介绍了一些正态测试,但这不是所有存在的测试。

那么你使用哪种测试?

我建议在适当的时候在您的数据上全部使用它们。

那么问题就是,你如何解释结果?如果测试不同意,他们经常会这样做怎么办?

我有两个建议可以帮助您思考这个问题。

艰难的失败

由于各种原因,您的数据可能不正常。每个测试都考察了样本是否是从略微不同的角度从高斯分布中提取的问题。

一次正态性测试失败意味着您的数据不正常。就如此容易。

您可以调查数据不正常的原因,也可以使用数据准备技术使数据更正常。

或者您可以开始研究使用非参数统计方法而不是参数方法。

软失败

如果某些方法表明样本是高斯的而有些则不是,那么可能会将此作为您的数据类似高斯的指示。

在许多情况下,您可以将数据视为高斯数据并继续使用所选的参数统计方法。

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 列出另外两个例子,当您认为正态性测试在机器学习项目中可能有用时。
  • 开发自己的人为数据集并应用每个正态测试。
  • 加载标准机器学习数据集并对每个实值变量应用正态测试。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

API

用品

摘要

在本教程中,您发现了检查数据样本是否偏离正态分布以及可用于评估数据样本的一系列技术的重要性。

具体来说,你学到了:

  • 样本是否正常如何决定了与数据样本一起使用的统计方法的类型。
  • 用于限定偏离正常的图形方法,例如直方图和 Q-Q 图。
  • 用于量化偏离正常的统计正态性检验。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

浅谈自举法

原文: machinelearningmastery.com/a-gentle-introduction-to-the-bootstrap-method/

引导方法是一种重采样技术,用于通过对替换的数据集进行采样来估计总体的统计量。

它可用于估计汇总统计量,例如平均值或标准差。它用于应用机器学习,以在对未包括在训练数据中的数据做出预测时估计机器学习模型的技能。

估计机器学习模型技能的结果的期望特性是估计技能可以用置信区间来呈现,该特征区间是诸如交叉验证之类的其他方法不易获得的特征。

在本教程中,您将发现用于估计机器学习模型在未见数据上的技能的引导程序重采样方法。

完成本教程后,您将了解:

  • 引导方法涉及使用替换迭代地重采样数据集。
  • 在使用引导程序时,您必须选择样本的大小和重复次数。
  • scikit-learn 提供了一个函数,您可以使用该函数重采样引导程序方法的数据集。

让我们开始吧。

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

一个关于自举法的温和介绍
照片由 john mcsporran 拍摄,保留一些权利。

教程概述

本教程分为 4 个部分;他们是:

  1. 自举法
  2. Bootstrap 的配置
  3. 工作示例
  4. Bootstrap API

自举法

自举方法是一种统计技术,用于通过平均来自多个小数据样本的估计来估计关于群体的量。

重要的是,通过一次一个地从大数据样本中绘制观察结果并在选择它们之后将它们返回到数据样本来构建样本。这允许给定的观察不止一次地包括在给定的小样本中。这种采样方法称为采样替换。

构建一个样本的过程可归纳如下:

  1. 选择样本的大小。
  2. 虽然样本的大小小于所选的大小
    1. 从数据集中随机选择一个观测值
    2. 将其添加到样本中

引导方法可用于估计总体数量。这是通过重复采样小样本,计算统计量和计算统计量的平均值来完成的。我们可以总结这个程序如下:

  1. 选择要执行的许多引导程序示例
  2. 选择样本大小
  3. 对于每个 bootstrap 样本
    1. 使用所选尺寸替换样品
    2. 计算样本的统计量
  4. 计算计算的样本统计量的平均值。

该过程还可用于估计机器学习模型的技能。

引导程序是一种广泛适用且功能非常强大的统计工具,可用于量化与给定估计器或统计学习方法相关的不确定性。

这是通过在样品上训练模型并评估模型的技能来完成的,这些样品不包括在样品中。这些未包含在给定样品中的样品称为袋外样品,或简称 OOB。

使用自举法估计模型技能的这个过程可以总结如下:

  1. 选择要执行的许多引导程序示例
  2. 选择样本大小
  3. 对于每个 bootstrap 样本
    1. 使用所选尺寸替换样品
    2. 在数据样本上拟合模型
    3. 估计模型在袋外样品上的技巧。
  4. 计算模型技能估计样本的平均值。

未选择的样品通常称为“袋外”样品。对于给定的 bootstrap 重采样迭代,在所选样本上建立模型,并用于预测袋外样本。

重要的是,在拟合模型或调整模型的超参数之前的任何数据准备必须在数据样本的 for 循环内进行。这是为了避免数据泄漏,其中使用测试数据集的知识来改进模型。反过来,这可以导致对模型技能的乐观估计。

自举方法的一个有用特征是所得到的估计样本通常形成高斯分布。除了总结这种具有集中趋势的分布之外,还可以给出方差测量,例如标准偏差和标准误差。此外,可以计算置信区间并用于约束所呈现的估计。这在展示机器学习模型的估计技能时很有用。

Bootstrap 的配置

执行引导时必须选择两个参数:样本的大小和要执行的过程的重复次数。

样本量

在机器学习中,通常使用与原始数据集相同的样​​本大小。

引导样本与原始数据集的大小相同。因此,一些样本将在 bootstrap 样本中多次表示,而其他样本则根本不会被选中。

— Page 72, Applied Predictive Modeling, 2013.

如果数据集很大并且计算效率是个问题,则可以使用较小的样本,例如数据集大小的 50%或 80%。

重复

重复次数必须足够大,以确保可以在样本上计算有意义的统计量,例如平均值,标准偏差和标准误差。

最小值可能是 20 或 30 次重复。可以使用较小的值将进一步增加对估计值样本计算的统计量的方差。

理想情况下,在给定时间资源的情况下,估计样本将尽可能大,具有数百或数千个重复。

工作示例

我们可以通过一个小的工作示例来使引导程序具体化。我们将完成该过程的一次迭代。

想象一下,我们有一个包含 6 个观测值的数据集:

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

第一步是选择样本的大小。在这里,我们将使用 4。

接下来,我们必须从数据集中随机选择第一个观测值。我们选择 0.2。

sample = [0.2]

该观察结果返回到数据集,我们再重复此步骤 3 次。

sample = [0.2, 0.1, 0.2, 0.6]

我们现在有我们的数据样本。该示例有目的地证明了相同的值在样本中可以显示为零,一次或多次。这里观察 0.2 出现两次。

然后可以对绘制的样本计算估计值。

statistic = calculation([0.2, 0.1, 0.2, 0.6])

未为样品选择的那些观察结果可用作样品外观察结果。

oob = [0.3, 0.4, 0.5]

在评估机器学习模型的情况下,模型适合于绘制的样本并在袋外样本上进行评估。

train = [0.2, 0.1, 0.2, 0.6]
test = [0.3, 0.4, 0.5]
model = fit(train)
statistic = evaluate(model, test)

结束了该程序的一个重复。它可以重复 30 次或更多次,以提供计算统计量的样本。

statistics = [...]

然后,可以通过计算平均值,标准偏差或其他汇总值来汇总该统计样本,以给出统计量的最终可用估计值。

estimate = mean([...])

Bootstrap API

我们不必手动实现自举法。 scikit-learn 库提供了一个实现,它将创建数据集的单个引导样本。

可以使用 resample()scikit-learn 函数。它采用数据数组作为参数,是否采样替换,采样的大小,以及采样之前使用的伪随机数生成器的种子。

例如,我们可以创建一个引导程序来创建一个替换为 4 个观察值的样本,并为伪随机数生成器使用值 1。

boot = resample(data, replace=True, n_samples=4, random_state=1)

不幸的是,API 没有包含任何机制来轻松收集可用作评估拟合模型的测试集的袋外观察。

至少在单变量情况下,我们可以使用简单的 Python 列表理解来收集袋外观察。

# out of bag observations
oob = [x for x in data if x not in boot]

我们可以将所有这些与我们在前一部分的工作示例中使用的小数据集结合在一起。

# scikit-learn bootstrap
from sklearn.utils import resample
# data sample
data = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
# prepare bootstrap sample
boot = resample(data, replace=True, n_samples=4, random_state=1)
print('Bootstrap Sample: %s' % boot)
# out of bag observations
oob = [x for x in data if x not in boot]
print('OOB Sample: %s' % oob)

运行该示例打印自举样本中的观察结果以及袋外样本中的观察结果

Bootstrap Sample: [0.6, 0.4, 0.5, 0.1]
OOB Sample: [0.2, 0.3]

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 列出 3 个可以使用自举法估计的摘要统计量。
  • 找到 3 篇使用自举法评估机器学习模型表现的研究论文。
  • 使用自举法实现您自己的函数以创建样本和袋外样本。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

帖子

图书

API

用品

摘要

在本教程中,您发现了用于估计机器学习模型在未见数据上的技能的引导程序重采样方法。

具体来说,你学到了:

  • 引导方法涉及使用替换迭代地重采样数据集。
  • 在使用引导程序时,您必须选择样本的大小和重复次数。
  • scikit-learn 提供了一个函数,您可以使用该函数重采样引导程序方法的数据集。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

浅谈机器学习的中心极限定理

原文: machinelearningmastery.com/a-gentle-introduction-to-the-central-limit-theorem-for-machine-learning/

中心极限定理是经常被引用但却被误解的统计和机器学习的支柱。

它经常与大数定律混淆。虽然这个定理对于初学者来说似乎有些深奥,但它对于我们如何以及为什么能够推断机器学习模型的技能有重要意义,例如一个模型在统计上是否优于另一个模型以及模型技能的置信区间。

在本教程中,您将发现中心极限定理以及统计和概率这一重要支柱对应用机器学习的影响。

完成本教程后,您将了解:

  • 中心极限定理将样本均值分布的形状描述为高斯分布,这是统计量所知的分布。
  • 如何在 Python 中开发一个模拟骰子卷的例子来演示中心极限定理。
  • 如何利用中心极限定理和高斯分布知识对应用机器学习中的模型表现进行推理。

让我们开始吧。

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

机器学习中心极限定理的温和介绍
Alan Levine 的照片,保留一些权利。

教程概述

本教程分为 3 个部分;他们是:

  1. 中心极限定理
  2. 用骰子工作的例子
  3. 对机器学习的影响

中心极限定理

中心极限定理,简称 CLT,是统计和概率领域的重要发现和支柱。

起初看起来有点深奥,所以请坚持下去。事实证明,这一发现对于在应用机器学习中做出推论至关重要。

该定理指出,随着样本的大小增加,多个样本的均值分布将接近高斯分布。

让我们打破这个。

我们可以想象进行试验并获得结果或观察。我们可以再次重复试验并获得一个新的独立观察。收集在一起,多个观察代表观察样本。

样本是来自更广泛人群的一组观察结果,这些观察结果可以通过试验进行。

  • 观察:来自一次实验的试验结果。
  • 样本:从单独的独立试验中收集的一组结果。
  • 人口:从试验中可以看到的所有可能观察的空间。

如果我们计算样本的平均值,它将是人口分布均值的估计值。但是,像任何估计一样,这将是错误的并且将包含一些错误。如果我们绘制多个独立样本并计算其均值,则这些均值的分布将形成高斯分布。

重要的是,每次导致观察的试验都是独立的,并以相同的方式进行。这是为了确保样本来自相同的基础人口分布。更正式地说,这种期望被称为独立且相同分布的或 iid。

首先,中心极限定理是令人印象深刻的,尤其是无论我们从中抽取样本的人口分布的形状如何都会出现这种情况。它表明,估计总体均值的误差分布符合统计领域非常了解的分布。

其次,随着从群体中抽取的样本的大小增加,这种高斯分布的估计将更准确。这意味着如果我们使用我们对高斯分布的一般知识来开始推断从群体中抽取样本的方法,那么随着我们增加样本量,这些推论将变得更有用。

中心限制中心极限定理的一个有趣含义是,一个非常聪明的科学家曾经提到过,你可以用它来生成高斯随机数。您可以生成一致的随机整数,将它们的组合在一起,并且总和的结果将是高斯的。请记住,均值只是样本的归一化总和。与其他方法(如 Box-Muller 方法)相比,它是一种生成随机高斯变量的较慢方法,但该定理的清晰(和巧妙)应用。

大数定律

中心极限定理经常与初学者的大数定律相混淆。

大数定律是另一种与统计学不同的定理。它更简单,因为它表明随着样本的大小增加,样本平均值的估计值将更准确。

中心极限定理没有说明单个样本均值的任何内容;相反,它更广泛,并说明了样本均值的形状或分布。

大数定律是直观的。这就是为什么我们认为收集更多数据将导致来自该领域的更具代表性的观测样本。该定理支持这种直觉。

中心极限定理不直观。相反,我们可以利用这一发现来对样本手段提出主张。

用骰子工作的例子

我们可以通过一个涉及模具轧制的实例来使中心极限定理具体化。

请记住,骰子是一个立方体,每边的数字不同,从 1 到 6。每个号码都有一个六分之一的可能性。考虑到相同的可能性,从骰子卷开始的数字的分布是均匀的。

我们可以使用randint()NumPy 函数来生成 1 到 6 之间的特定数量的随机骰子卷(例如 50)。

# generate a sample of die rolls
rolls = randint(1, 7, 50)

下面列出了完整的示例。

# generate random dice rolls
from numpy.random import seed
from numpy.random import randint
from numpy import mean
# seed the random number generator
seed(1)
# generate a sample of die rolls
rolls = randint(1, 7, 50)
print(rolls)
print(mean(rolls))

运行该示例生成并打印 50 个模具卷的样本和样本的平均值。

我们知道分布的平均值是 3.5,计算为(1 + 2 + 3 + 4 + 5 + 6)/ 6 或 21/6。

我们可以看到样本的平均值略有错误,这是预期的,因为它是对总体平均值的估计。

[6 4 5 1 2 4 6 1 1 2 5 6 5 2 3 5 6 3 5 4 5 3 5 6 3 5 2 2 1 6 2 2 6 2 2 1 5
 2 1 1 6 4 3 2 1 4 6 2 2 4]
3.44

这是将模拟模具滚动 50 次的结果。

然后我们可以多次重复此过程,例如 1,000。这将给我们 1000 个样本手段的结果。根据中心极限定理,这些样本均值的分布将是高斯分布。

下面的示例执行此实验并绘制样本均值的结果分布。

# demonstration of the central limit theorem
from numpy.random import seed
from numpy.random import randint
from numpy import mean
from matplotlib import pyplot
# seed the random number generator
seed(1)
# calculate the mean of 50 dice rolls 1000 times
means = [mean(randint(1, 7, 50)) for _ in range(1000)]
# plot the distribution of sample means
pyplot.hist(means)
pyplot.show()

运行该示例将创建样本均值的直方图。

我们可以从分布的形状看出分布是高斯分布。值得注意的是,样本中的误差量意味着我们可以在 50 个骰子卷的 1,000 次试验中看到。

此外,中心极限定理还指出,随着每个样本的大小(在这种情况下为 50)增加,则样本装置将接近高斯分布越好。

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

来自骰子卷的样本均值的直方图

对机器学习的影响

中心极限定理在应用机器学习中具有重要意义。

该定理确实为线性回归等线性算法提供了解决方案,但并未通过数值优化方法求解人工神经网络等奇异方法。相反,我们必须使用实验来观察和记录算法的行为,并使用统计方法来解释它们的结果。

我们来看两个重要的例子。

意义测试

为了推断模型的技能与另一个模型的技能相比,我们必须使用诸如统计显着性检验之类的工具。

这些工具估计模型技能分数的两个样本来自相同或不同的模型技能分数的未知基础分布的可能性。如果看起来样本是从相同的群体中抽取的,那么假设模型技能之间没有差异,并且任何实际差异都归因于统计噪声。

像这样做推理声明的能力是由于中心极限定理和我们对高斯分布的了解以及两个样本均值成为样本均值的相同高斯分布的一部分的可能性。

置信区间

一旦我们训练了最终模型,我们可能希望推断该模型在实践中的技巧程度。

这种不确定性的表示称为置信区间。

我们可以开发多个独立(或接近独立)的模型准确率评估,以产生一组候选技能估计。这些技能估计的平均值将是对问题的模型技能的真实潜在估计的估计(有错误)。

由于知道样本均值将是中心极限定理的高斯分布的一部分,我们可以使用高斯分布的知识来估计基于样本大小的样本均值的可能性,并计算围绕该样本大小的所需置信区间。模特的技巧。

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 在应用机器学习中建议两个额外区域,其中中心极限定理可能是相关的。
  • 实现一个函数,用于生成随机高斯数,利用中心极限定理和从均匀分布中得出的数字。
  • 更新骰子卷的演示以演示样本大小与样本均值的高斯分布的保真度之间的关系。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

API

用品

摘要

在本教程中,您发现了中心极限定理以及统计和概率这一重要支柱对应用机器学习的影响。

具体来说,你学到了:

  • 中心极限定理将样本均值分布的形状描述为高斯分布,这是统计量所知的分布。
  • 如何在 Python 中开发一个模拟骰子卷的例子来演示中心极限定理。
  • 如何利用中心极限定理和高斯分布知识对应用机器学习中的模型表现进行推理。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

浅谈机器学习中的大数定律

原文: machinelearningmastery.com/a-gentle-introduction-to-the-law-of-large-numbers-in-machine-learning/

我们有一种直觉,即更多观察更好。

如果我们收集更多数据,我们的数据样本将更能代表问题域,这与此背后的直觉相同。

统计和概率中有一个定理支持这种直觉,这是这两个领域的支柱,并且在应用机器学习中具有重要意义。这个定理的名称是大数定律。

在本教程中,您将发现大数定律及其在应用机器学习中的重要性。

完成本教程后,您将了解:

  • 大数定律支持这样的直觉:当样本的大小增加时,样本变得更具代表性。
  • 如何在 Python 中开发一个小例子来证明样本量增加导致的误差减少。
  • 大数定律对于理解训练数据集,测试数据集的选择以及机器学习中的模型技能评估至关重要。

让我们开始吧。

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

机器学习中大数定律的简要介绍
Raheel Shahid 的照片,保留一些权利。

教程概述

本教程分为 3 个部分;他们是:

  1. 大数定律
  2. 工作示例
  3. 机器学习的意义

大数定律

大数的定律是概率和统计学的一个定理,它表明多次重复实验的平均结果将更接近真实或预期的潜在结果。

大数法则解释了为什么赌场从长远来看总能赚钱。

我们可以将实验的试验看作一个观察。实验的独立和独立重复将进行多次试验并导致多次观察。实验的所有样本观察都来自理想化的观察群体。

  • 观察:来自一次实验的试验结果。
  • 样本:从单独的独立试验中收集的一组结果。
  • 人口:从试验中可以看到的所有可能观察的空间。

使用统计中的这些术语,我们可以说随着样本量的增加,样本的平均值将更接近人口中的平均值或预期值。随着样本大小变为无穷大,样本均值将收敛于总体均值。

…概率上的最高成就,大数定律。该定理表明大样本的均值接近于分布的均值。

这是统计学和概率以及应用机器学习的重要理论发现。

独立和相同分布

重要的是要明确样本中的观察必须是独立的。

这意味着试验以相同的方式进行,并且不依赖于任何其他试验的结果。这通常是合理的,并且很容易在计算机中实现,尽管在其他地方可能很难(例如,如何实现骰子的相同随机卷?)。

在统计学中,这种期望被称为“_ 独立且相同分布 _”或 IID,iid 或 i.i.d.简而言之。这是为了确保样本确实来自相同的基础人口分布。

回归均值

大数定律有助于我们理解为什么我们不能孤立地相信实验中的单一观察。

我们预计可能会出现单个结果或小样本的平均结果。这接近于集中趋势,人口分布的平均值。可能不是;事实上,这可能是非常奇怪或不太可能。

法律提醒我们重复实验,以便在我们开始对结果的含义进行推断之前,开发出大量且具有代表性的观察样本。

随着我们增加样本量,样本的发现或平均值将回到总体平均值,回到真正的潜在预期值。这被称为回归到平均或有时回归到平均值。

这就是为什么我们必须对小样本量的推论持怀疑态度,称为小n

真正的大数定律

与平均回归相关的是真正大数的定律的概念。

这个想法是,当我们开始调查或处理极大的观察样本时,我们增加了看到奇怪事物的可能性。通过拥有如此多的潜在人口分布样本,样本将包含一些天文数字罕见的事件。

同样,我们必须警惕不要从单个案例中做出推论。

在运行查询和调查大数据时,这一点尤为重要。

工作示例

我们可以通过一个小例子证明大数定律。

首先,我们可以设计一个理想化的底层分布。我们将使用平均值为 50 且标准差为 5 的高斯分布。因此,该群体的预期值或平均值为 50。

下面是一些生成这种理想分布图的代码。

# idealized population distribution
from numpy import arange
from matplotlib import pyplot
from scipy.stats import norm
# x-axis for the plot
xaxis = arange(30, 70, 1)
# y-axis for the plot
yaxis = norm.pdf(xaxis, 50, 5)
# plot ideal population
pyplot.plot(xaxis, yaxis)
pyplot.show()

运行代码会创建一个具有熟悉钟形的设计人口的图。

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

理想化的潜在人口分布

现在,我们可以假装忘记我们对人口的所有了解,并从人口中随机抽取样本。

我们可以创建不同大小的样本并计算平均值。鉴于我们的直觉和大数定律,我们期望随着样本的大小增加,样本均值将更好地接近总体均值。

下面的示例计算不同大小的样本,然后打印样本均值。

# demonstrate the law of large numbers
from numpy.random import seed
from numpy.random import randn
from numpy import mean
from numpy import array
from matplotlib import pyplot
# seed the random number generator
seed(1)
# sample sizes
sizes = [10, 100, 500, 1000, 10000]
# generate samples of different sizes and calculate their means
means = [mean(5 * randn(size) + 50) for size in sizes]
print(means)
# plot sample mean error vs sample size
pyplot.scatter(sizes, array(means)-50)
pyplot.show()

首先运行示例打印每个样本的均值。

随着样本量的增加,我们可以看到样本均值接近 50.0 的松散趋势。

另请注意,此样本样本也必须遵守大数定律。例如,您可以通过小样本的平均值获得非常准确的总体均值估计值。

[49.5142955459695, 50.371593294898695, 50.2919653390298, 50.1521157689338, 50.03955033528776]

该示例还创建了一个图表,该图表将样本的大小与总体均值中的样本均值的误差进行比较。通常,我们可以看到更大的样本量具有更少的误差,并且我们预计这种趋势平均会继续。

我们还可以看到一些样本意味着过高估计和一些低估。不要陷入假设低估会落在一边或另一边的陷阱。

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

样本大小与错误的散点图

机器学习的意义

大数定律在应用机器学习中具有重要意义。

我们花一点时间来强调其中一些含义。

训练数据

用于训练模型的数据必须代表来自领域的观察结果。

这实际上意味着它必须包含足够的信息来推广人口的真实未知和潜在分布。

这很容易用模型的单个输入变量进行概念化,但是当您有多个输入变量时也同样重要。输入变量之间将存在未知的关系或依赖关系,输入数据将表示多变量分布,从中可以绘制观察结果以构成训练样本。

在数据收集,数据清理和数据准备期间,请记住这一点。

您可以选择通过对观察值设置硬限制来排除基础人口的部分(例如,对于异常值),您希望数据太稀疏而无法有效建模。

测试数据

还必须将对训练数据集的思考给予测试数据集。

盲目使用 80/20 喷射训练/测试数据或盲目使用 10 倍交叉验证通常会忽略这一点,即使在数据集中,可用数据的 1/10 大小可能不是合适的代表来自问题领域的观察结果。

模型技能评估

在对看不见的数据展示模型的估计技能时,请考虑大数定律。

它提供了一种防御,不仅可以根据单一训练/测试评估的技能分数报告或继续使用模型。

它强调需要开发一个给定模型的多个独立(或接近独立)评估的样本,以便样本的平均报告技能是对人口平均值的准确估计。

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 头脑风暴两个机器学习领域,适用大数法则。
  • 找到五篇研究论文,你对大数定律的结果持怀疑态度。
  • 开发您自己的理想分布和样本,并绘制样本大小和样本平均误差之间的关系。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

图书

API

用品

摘要

在本教程中,您发现了大数定律以及它在应用机器学习中的重要性。

具体来说,你学到了:

  • 大数定律支持这样的直觉:当样本的大小增加时,样本变得更具代表性。
  • 如何在 Python 中开发一个小例子来证明样本量增加导致的误差减少。
  • 大数定律对于理解训练数据集,测试数据集的选择以及机器学习中的模型技能评估至关重要。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

机器学习中的所有统计量

原文: machinelearningmastery.com/all-of-statistics-for-machine-learning/

统计学的基础要求作为机器学习从业者有效。

所有统计学”一书专门为可能对数据挖掘和机器学习感兴趣的计算机科学本科生提供概率和统计学基础。因此,它经常被推荐作为一本书来加工有兴趣扩展他们对统计学的理解的学习从业者。

在这篇文章中,您将发现“全部统计”一书,它涵盖的主题以及面向机器学习从业者的阅读列表。

阅读这篇文章后,你会知道:

  • Larry Wasserman 撰写了“_ 所有统计量 _”,以便迅速让计算机科学专业学生掌握概率和统计学知识。
  • 该书提供了对统计领域的广泛报道,重点是所涉及主题的数学表示。
  • 这本书涵盖的内容远远超过机器学习从业者的要求,但精选的主题阅读将有助于那些喜欢数学处理的人。

让我们开始吧。

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

所有机器学习统计
摄影: Chris Sorge ,保留一些权利。

所有的统计量

所有统计学:统计推断中的简明课程”一书由 Larry Wasserman 撰写,并于 2004 年发布。

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

所有的统计量

Wasserman 是卡内基梅隆大学统计与数据科学教授。

这本书雄心勃勃。

它旨在通过概率和统计量快速提高计算机科学专业学生的速度。因此,本书涵盖的主题非常广泛,可能比普通的入门教科书更广泛。

从字面上看,“所有统计”这个标题是夸大其词。但在精神上,标题是恰当的,因为本书确实涵盖了比典型的数学统计入门书更广泛的主题。本书适用于希望快速学习概率和统计量的人。

这本书不适合普通的从业者;它适用于计算机科学本科学生。它确实假设了微积分和线性代数的一些先验知识。如果你不喜欢方程式或数学符号,那么这本书不适合你。

有趣的是,Wasserman 编写了这本书,以回应在经典统计之外发生的计算机科学中数据挖掘和机器学习的兴起。他在序言中断言了统计量的重要性,以便在机器学习中发挥作用。

在不了解基本统计量的情况下使用神经网络,增强和支持向量机等奇特工具就像在了解如何使用创可贴之前进行脑部手术一样。

材料以非常简洁明了的方式呈现。采用系统方法对方法进行简要描述,描述其实现的方程式,以及工作实例,以激发方法在 R 中的示例代码的使用。

事实上,这种材料非常紧凑,通常读起来像一系列百科全书。如果你想知道如何实现一个方法,这是很好的,但如果你是对方法的新手并且寻求直觉,则非常具有挑战性。

审查内容

本书所涵盖的主题选择非常广泛,如上一节所述。

一方面这很好,因为读者很早就接触到了高级科目。这种激进范围的缺点是,只需很少的手握就可以简单地触及主题。你需要重新阅读部分,直到你得到它为止。

让我们看一下本书所涵盖的主题。

这有助于了解该领域的呈现范围以及您作为机器学习从业者可能感兴趣的主题的上下文。

这本书分为三个部分;他们是:

  • 我的概率
  • 二,统计推断
  • III 统计模型和方法

本书的第一部分侧重于描述不确定性的概率论和形式语言。第二部分侧重于统计推断。第三部分重点介绍第二部分提出的具体方法和问题。

这本书确实有参考或百科全书的感觉。因此,有很多章节,但每章都是相当独立的。全书共分 24 章;他们是:

  • 第一章:概率
  • 第二章:随机变量
  • 第三章:期望
  • 第四章:不平等
  • 第五章:随机变量的收敛性
  • 第六章:模型,统计推断和学习
  • 第七章:估计 CDF 和统计函数
  • 第八章:引导程序
  • 第九章:参数推理
  • 第十章:假设检验和 p 值
  • 第十一章:贝叶斯推理
  • 第十二章:统计决策理论
  • 第十三章:线性和逻辑回归
  • 第十四章:多变量模型
  • 第十五章:关于独立的推论
  • 第十六章:因果推论
  • 第十七章:有向图和条件独立
  • 第十八章:无向图
  • 第十九章:对数线性模型
  • 第二十章:非参数曲线估计
  • 第二十一章:使用正交函数进行平滑
  • 第二十二章:分类
  • 第二十三章:概率 Redux:随机过程
    第二十四章:模拟方法

本书的前言提供了一个有用的术语表,从统计学到计算机科学。这个“统计/数据挖掘词典”在下面复制。

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

统计/数据挖掘词典
取自“_ 所有统计 _”。

书中工作示例中使用的所有 R 代码和数据集均可从 Wasserman 的主页获得。这非常有用,因为您可以专注于尝试示例而不是键入代码并希望您的语法正确。

机器学习阅读清单

我不会向以前没有接触统计量的开发人员推荐这本书。这太具有挑战性了。

我会把这本书推荐给那些处于数学学习模式的计算机科学专业的学生。我还建议机器学习从业者具有一些以前的统计背景或强大的数学基础。

如果您对数学符号感到满意并且知道自己在寻找什么,那么本书就是一本很好的参考书。您可以转到主题或方法,并获得清晰的演示文稿。

问题是,对于机器学习从业者而言,您确实需要了解许多这些主题,而不是在所呈现的详细程度。在直觉层面上,也许是阴影更轻。如果您愿意,那么为了在统计概率的基础上建立一个坚实的基础,值得阅读(或略读)以下章节:

  • 第一章:概率
  • 第二章:随机变量
  • 第三章:期望
  • 第五章:随机变量的收敛性

同样,这些是重要的主题,但您只需要一个概念级的理解。

对于可用于解释数据和比较模型技能的统计假设检验的覆盖范围,建议阅读以下章节:

  • 第六章:模型,统计推断和学习
  • 第九章:参数推理
  • 第十章:假设检验和 p 值

我还建议关于 Bootstrap 的章节。这只是一个很好的方法,但要注意更好地了解装袋和随机森林,或者作为估算模型技能置信区间的程序。

  • 第八章:引导程序

最后,使用统计方法来呈现机器学习算法。如果您更喜欢回归和分类算法的更多数学处理,我会推荐这些章节:

  • 第十二章:统计决策理论
  • 第十三章:线性和逻辑回归
  • 第二十二章:分类

我可以阅读统计学的数学表达,但我更喜欢直觉和工作代码。我不太可能从我的书柜中拿起这本书,转而采用更温和的处理方法,例如“普通英语统计”或以应用为重点的处理方法,如“人工智能的经验方法 “。

你同意这个阅读清单吗?
请在下面的评论中告诉我。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

摘要

在这篇文章中,您发现了“_ 所有统计 _”一书,它提供了对统计量的广泛而简明的介绍。

具体来说,你学到了:

  • Larry Wasserman 撰写了“_ 所有统计量 _”,以便迅速让计算机科学专业学生掌握概率和统计学知识。
  • 该书提供了对统计领域的广泛报道,重点是所涉及主题的数学表示。
  • 这本书涵盖的内容远远超过机器学习从业者的要求,但精选的主题阅读将有助于那些喜欢数学处理的人。

你读过这本书吗?
你怎么看?请在下面的评论中告诉我。

你想找一本这本书的副本吗?
请在评论中告诉我。

机器学习的算术、几何和调和均值

原文:https://machinelearningmastery.com/arithmetic-geometric-and-harmonic-means-for-machine-learning/

最后更新于 2020 年 8 月 19 日

计算变量或数字列表的平均值是机器学习中常见的操作。

这是一项您可以每天直接使用的操作,例如汇总数据时,也可以间接使用,例如拟合模型时大型过程中的一个较小步骤。

平均值是平均值的同义词,平均值是一个代表概率分布中最可能值的数字。因此,根据您使用的数据类型,有多种不同的方法来计算平均值。

如果你对数据使用了错误的平均值,这可能会让你出错。在使用表现指标评估模型时,您也可以输入一些更奇特的平均值计算,例如 G 均值或 F 度量。

在本教程中,您将发现算术平均值、几何平均值和调和平均值之间的差异。

完成本教程后,您将知道:

  • 中心趋势概括了变量最可能的值,平均值是计算平均值的常用名称。
  • 如果值具有相同的单位,算术平均值是合适的,而如果值具有不同的单位,几何平均值是合适的。
  • 如果数据值是具有不同度量的两个变量(称为比率)的比率,则调和平均值是合适的。

用我的新书机器学习统计启动你的项目,包括分步教程和所有示例的 Python 源代码文件。

我们开始吧。

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

机器学习的算术、几何和调和方法
摄影:T2 马尼拉,版权所有。

教程概述

本教程分为五个部分;它们是:

  1. 什么是平均值?
  2. 等差中项
  3. 几何平均值
  4. 调和平均值
  5. 如何选择正确的平均值?

什么是平均值?

中心趋势是一个单一的数字,代表了数字列表中最常见的值。

更确切地说,是概率分布中概率最高的值描述了一个变量可能具有的所有可能值。

有许多方法可以计算数据样本的中心趋势,例如根据值计算的平均值模式,这是数据分布中最常见的值,或者中值,如果数据样本中的所有值都是有序的,这是中间值。

平均值是平均值的常用术语。它们可以互换使用。

平均值不同于中位数和模式,因为它是根据数据计算的中心趋势的度量。因此,根据数据类型计算平均值有不同的方法。

你可能会遇到的三种常见的平均值计算类型是算术平均值几何平均值调和平均值。还有其他手段,还有很多更中心的倾向度量,但这三种手段也许是最常见的(例如所谓的毕达哥拉斯的意思)。

让我们依次仔细看看平均值的每个计算。

等差中项

算术平均值计算为数值之和除以数值总数,称为 n

  • 算术平均值= (x1 + x2 + … + xN) / N

计算算术平均值的一种更方便的方法是计算值的总和,并将其乘以值的倒数(1 比 N);例如:

  • 算术平均值= (1/N) * (x1 + x2 + … + xN)

当数据样本中的所有值都具有相同的度量单位时,算术平均值是合适的,例如所有数字都是高度、美元或英里等。

计算算术平均值时,值可以是正数、负数或零。

如果观测值样本包含异常值(特征空间中远离所有其他值的几个值),或者对于具有非高斯分布(例如多个峰值,即所谓的多模态概率分布)的数据,算术平均值很容易失真。

算术平均值在机器学习中总结变量时很有用,例如报告最可能的值。当变量具有高斯或类似高斯的数据分布时,这更有意义。

算术平均值可以使用平均值()NumPy 函数来计算。

下面的例子演示了如何计算 10 个数的算术平均值。

# example of calculating the arithmetic mean
from numpy import mean
# define the dataset
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# calculate the mean
result = mean(data)
print('Arithmetic Mean: %.3f' % result)

运行该示例计算算术平均值并报告结果。

Arithmetic Mean: 4.500

几何平均值

几何平均值计算为所有值乘积的第 N 根,其中 N 为值的个数。

  • 几何平均值= N 根(x1 * x2 …… xN)

例如,如果数据只包含两个值,则这两个值的乘积的平方根就是几何平均值。对于三个值,使用立方根,依此类推。

当数据包含具有不同度量单位的值时,几何平均值是合适的,例如,一些度量是高度,一些是美元,一些是英里等。

几何平均值不接受负值或零值,例如所有值都必须为正值。

机器学习中几何平均的一个常见例子是所谓的 G-Mean (几何平均)度量的计算,该度量是模型评估度量,被计算为灵敏度和特异性度量的几何平均。

可以使用 gmean() SciPy 函数计算几何平均值。

下面的例子演示了如何计算 10 个数的几何平均值。

# example of calculating the geometric mean
from scipy.stats import gmean
# define the dataset
data = [1, 2, 3, 40, 50, 60, 0.7, 0.88, 0.9, 1000]
# calculate the mean
result = gmean(data)
print('Geometric Mean: %.3f' % result)

运行该示例计算几何平均值并报告结果。

Geometric Mean: 7.246

调和平均值

谐波平均值的计算方法是数值数量 N 除以数值倒数之和(每个数值 1)。

  • 谐波平均值= N / (1/x1 + 1/x2 + … + 1/xN)

如果只有两个值(x1 和 x2),谐波平均值的简化计算公式如下:

  • 调和平均值= (2 * x1 * x2) / (x1 + x2)

如果数据由速率组成,谐波平均值是合适的平均值。

回想一下,a 是两个具有不同度量的量之间的比率,例如速度、加速度、频率等。

在机器学习中,我们在评估模型时会有比率,例如预测中的真阳性率或假阳性率。

谐波平均值不采用负值或零值的速率,例如,所有速率都必须为正值。

在机器学习中使用调和平均值的一个常见例子是计算F-测度(也是 F1-测度或 Fbeta-测度);这是一个模型评估指标,计算为精确度和召回率指标的调和平均值。

可以使用 hmean() SciPy 函数计算谐波平均值。

下面的例子演示了如何计算九个数的调和平均值。

# example of calculating the harmonic mean
from scipy.stats import hmean
# define the dataset
data = [0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 0.99]
# calculate the mean
result = hmean(data)
print('Harmonic Mean: %.3f' % result)

运行该示例计算调和平均值并报告结果。

Harmonic Mean: 0.350

如何选择正确的平均值?

我们回顾了计算变量或数据集平均值的三种不同方法。

算术平均值是最常用的平均值,尽管在某些情况下可能不合适。

每种方法适用于不同类型的数据;例如:

  • 如果值具有相同的单位:使用算术平均值。
  • 如果数值有不同的单位:使用几何平均值。
  • 如果数值是速率:使用谐波平均值。

例外情况是,如果数据包含负值或零值,则不能直接使用几何和调和平均值。

进一步阅读

如果您想更深入地了解这个主题,本节将提供更多资源。

蜜蜂

文章

摘要

在本教程中,您发现了算术平均值、几何平均值和调和平均值之间的差异。

具体来说,您了解到:

  • 中心趋势概括了变量最可能的值,平均值是计算平均值的常用名称。
  • 如果值具有相同的单位,算术平均值是合适的,而如果值具有不同的单位,几何平均值是合适的。
  • 如果数据值是具有不同度量的两个变量(称为比率)的比率,则调和平均值是合适的。

你有什么问题吗?
在下面的评论中提问,我会尽力回答。

如何在 Python 中计算机器学习结果的自举置信区间

原文: machinelearningmastery.com/calculate-bootstrap-confidence-intervals-machine-learning-results-python/

重要的是既展示机器学习模型的预期技能,又展示该模型技能的置信区间。

置信区间提供了一系列模型技能,以及在对新数据做出预测时模型技能落在范围之间的可能性。例如,分类准确率的 95%可能性在 70%和 75%之间。

计算机器学习算法置信区间的有效方法是使用引导程序。这是用于估计可用于计算经验置信区间的统计量的一般技术,无论技能分数的分布如何(例如,非高斯分布)

在本文中,您将了解如何使用引导程序计算机器学习算法表现的置信区间。

阅读这篇文章后,你会知道:

  • 如何使用引导程序估计统计量的置信区间。
  • 如何应用此方法来评估机器学习算法。
  • 如何实现用于估计 Python 中置信区间的自举法。

让我们开始吧。

  • 2017 年 6 月更新:修正了为 numpy.percentile()提供错误值的错误。谢谢 Elie Kawerk。
  • 更新 March / 2018 :更新了数据集文件的链接。

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

如何计算 Python 中机器学习结果的 Bootstrap 置信区间
照片由 Hendrik Wieduwilt ,保留一些权利。

Bootstrap 置信区间

使用引导程序计算置信区间包括两个步骤:

  1. 计算统计量
  2. 计算置信区间

1.计算统计人口

第一步是使用引导程序多次重采样原始数据并计算感兴趣的统计量。

使用替换对数据集进行采样。这意味着每次从原始数据集中选择一个项目时,都不会将其删除,从而允许再次为该样本选择该项目。

统计量在样本上计算并存储,以便我们建立一个感兴趣的统计量。

引导重复的数量定义了估计的方差,越多越好,通常是数百或数千。

我们可以使用以下伪代码演示此步骤。

statistics = []
for i in bootstraps:
	sample = select_sample_with_replacement(data)
	stat = calculate_statistic(sample)
	statistics.append(stat)

2.计算置信区间

现在我们有了感兴趣的统计量,我们可以计算置信区间。

这是通过首先排序统计量,然后在置信区间选择所选百分位数的值来完成的。在这种情况下选择的百分位称为 alpha。

例如,如果我们对 95%的置信区间感兴趣,则α将为 0.95,我们将选择 2.5%百分位数的值作为下限,将 97.5%百分位数作为感兴趣统计量的上限。

例如,如果我们从 1,000 个 bootstrap 样本计算 1,000 个统计量,则下限将是第 25 个值,上限将是第 975 个值,假设统计列表已订购。

在这里,我们计算一个非参数置信区间,它不对统计分布的函数形式做出任何假设。该置信区间通常称为经验置信区间。

我们可以用下面的伪代码来证明这一点。

ordered = sort(statistics)
lower = percentile(ordered, (1-alpha)/2)
upper = percentile(ordered, alpha+((1-alpha)/2))

Bootstrap 模型表现

引导程序可用于评估机器学习算法的表现。

每次迭代采样的大小可以限制为可用数据的 60%或 80%。这意味着将会有一些未包含在样本中的样本。这些被称为袋(OOB)样品。

然后可以在每个自举迭代的数据样本上训练模型,并在袋外样本上进行评估,以给出可以收集的表现统计量,并且可以从中计算置信区间。

我们可以使用以下伪代码演示此过程。

statistics = []
for i in bootstraps:
	train, test = select_sample_with_replacement(data, size)
	model = train_model(train)
	stat = evaluate_model(test)
	statistics.append(stat)

计算分类准确率置信区间

本节演示如何使用引导程序使用 Python 机器学习库 scikit-learn 计算实际数据集上的机器学习算法的经验置信区间。

本节假定您已安装 Pandas,NumPy 和 Matplotlib。如果您在设置环境方面需要帮助,请参阅教程:

首先,下载 Pima Indians 数据集并将其放在当前工作目录中,文件名为“pima - indians -diabetes.data.csv ”(更新: 在这里下载)。

我们将使用 Pandas 加载数据集。

# load dataset
data = read_csv('pima-indians-diabetes.data.csv', header=None)
values = data.values

接下来,我们将配置引导程序。我们将使用 1,000 次自举迭代并选择一个 50%的数据集大小的样本。

# configure bootstrap
n_iterations = 1000
n_size = int(len(data) * 0.50)

接下来,我们将迭代引导程序。

将使用 sklearn 中的 resample()函数替换样本。检索未包含在样本中的任何行并将其用作测试数据集。接下来,决策树分类器适合样本并在测试集上进行评估,计算分类分数,并添加到跨所有引导收集的分数列表中。

# run bootstrap
stats = list()
for i in range(n_iterations):
	# prepare train and test sets
	train = resample(values, n_samples=n_size)
	test = numpy.array([x for x in values if x.tolist() not in train.tolist()])
	# fit model
	model = DecisionTreeClassifier()
	model.fit(train[:,:-1], train[:,-1])
	# evaluate model
	predictions = model.predict(test[:,:-1])
	score = accuracy_score(test[:,-1], predictions)

收集分数后,将创建直方图以了解分数的分布。我们通常期望这种分布是高斯分布,也许是偏差与均值周围的对称方差。

最后,我们可以使用百分位数()NumPy 函数计算经验置信区间。使用 95%置信区间,因此选择 2.5 和 97.5 百分位数的值。

综合这些,下面列出了完整的例子。

import numpy
from pandas import read_csv
from sklearn.utils import resample
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from matplotlib import pyplot
# load dataset
data = read_csv('pima-indians-diabetes.data.csv', header=None)
values = data.values
# configure bootstrap
n_iterations = 1000
n_size = int(len(data) * 0.50)
# run bootstrap
stats = list()
for i in range(n_iterations):
	# prepare train and test sets
	train = resample(values, n_samples=n_size)
	test = numpy.array([x for x in values if x.tolist() not in train.tolist()])
	# fit model
	model = DecisionTreeClassifier()
	model.fit(train[:,:-1], train[:,-1])
	# evaluate model
	predictions = model.predict(test[:,:-1])
	score = accuracy_score(test[:,-1], predictions)
	print(score)
	stats.append(score)
# plot scores
pyplot.hist(stats)
pyplot.show()
# confidence intervals
alpha = 0.95
p = ((1.0-alpha)/2.0) * 100
lower = max(0.0, numpy.percentile(stats, p))
p = (alpha+((1.0-alpha)/2.0)) * 100
upper = min(1.0, numpy.percentile(stats, p))
print('%.1f confidence interval %.1f%% and %.1f%%' % (alpha*100, lower*100, upper*100))

运行该示例会在每次引导迭代时打印分类精度。

创建 1000 个准确度分数的直方图,显示类似高斯分布。

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

使用 Bootstrap 分配分类准确度

最后,报告置信区间,表明置信区间 64.4%和 73.0%有 95%的可能性涵盖模型的真实技能。

...
0.646288209607
0.682203389831
0.668085106383
0.673728813559
0.686021505376
95.0 confidence interval 64.4% and 73.0%

该相同方法可用于计算任何其他误差分数的置信区间,例如回归算法的均方根误差。

进一步阅读

本节提供有关引导程序和引导程序置信区间的其他资源。

摘要

在这篇文章中,您了解了如何使用引导程序来计算机器学习算法的置信区间。

具体来说,你学到了:

  • 如何计算数据集中统计量的置信区间的自举估计值。
  • 如何应用引导程序来评估机器学习算法。
  • 如何计算 Python 中机器学习算法的 bootstrap 置信区间。

您对置信区间有任何疑问吗?
在下面的评论中提出您的问题。

浅谈机器学习的卡方测试

原文: machinelearningmastery.com/chi-squared-test-for-machine-learning/

应用机器学习中的常见问题是确定输入特征是否与要预测的结果相关。

这是特征选择的问题。

在输入变量也是分类的分类问题的情况下,我们可以使用统计测试来确定输出变量是依赖还是独立于输入变量。如果是独立的,则输入变量是可能与问题无关并从数据集中删除的要素的候选者。

Pearson 的卡方统计假设是分类变量之间独立性检验的一个例子。

在本教程中,您将发现用于量化分类变量对的独立性的卡方统计假设检验。

完成本教程后,您将了解:

  • 可以使用列联表来汇总成对的分类变量。
  • 卡方检验可以将观察到的列联表与预期表进行比较,并确定分类变量是否独立。
  • 如何计算和解释 Python 中分类变量的卡方检验。

让我们开始吧。

  • 更新 Jun / 2018 :从测试中解释临界值的小错误修复(感谢 Andrew)。

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

机器学习卡方测试的温和介绍
NC 湿地的照片,保留一些权利

教程概述

本教程分为 3 个部分;他们是:

  1. 列联表
  2. 皮尔逊的卡方测试
  3. 示例卡方测试

列联表

分类变量是可以采用一组标签之一的变量。

一个例子可能是性,可以概括为男性或女性。变量是’sex’,变量的标签或因子是’male’和’female’在这种情况下。

我们可能希望查看分类变量的摘要,因为它与另一个分类变量有关。例如,性和兴趣,其中兴趣可能有标签’_ 科学 ‘,’ 数学 ‘或’ 艺术 _'。我们可以从收集到的关于这两个分类变量的人收集观察结果;例如:

Sex,	Interest
Male,	Art
Female,	Math
Male, 	Science
Male,	Math
...

我们可以在一个表中汇总所收集的观察结果,其中一个变量对应于列,另一个变量对应于行。表中的每个单元格对应于与行和列类别对应的观察的计数或频率。

历史上,这种形式的两个分类变量的表汇总称为列联表

例如,具有人为计数的 _ 性别=行 _ 和 _ 兴趣=列 _ 表可能如下所示:

        Science,	Math,	Art
Male         20,      30,    15
Female       20,      15,    30

该表由 Karl Pearson 称为列联表,因为其目的是帮助确定一个变量是否依赖于另一个变量。例如,对数学或科学的兴趣是否取决于性别,还是它们是独立的?

仅从表格中确定这是具有挑战性的;相反,我们可以使用称为 Pearson 的卡方测试的统计方法。

皮尔逊的卡方测试

Pearson 的卡方测试,或简称卡方测试,以 Karl Pearson 命名,尽管测试有变化。

卡方测试是一种统计假设检验,假设(零假设)分类变量的观察频率与分类变量的预期频率匹配。该测试计算具有卡方分布的统计量,以希腊大写字母 Chi(X)命名为“ki”,如风筝中所示。

鉴于上面的性/兴趣例子,一个类别(例如男性和女性)的观察数量可能相同或不同。尽管如此,我们可以计算每个兴趣小组中观察的预期频率,并查看按性别划分的利益是否会产生相似或不同的频率。

卡方测试用于列联表,首先计算组的预期频率,然后确定组的划分(称为观察频率)是否与预期频率匹配。

测试的结果是具有卡方分布的测试统计量,并且可以被解释为拒绝或不能拒绝观察到的和预期的频率相同的假设或零假设。

当观测频率远离预期频率时,总和中的相应项很大;当两者接近时,这个词很小。较大的 X ^ 2 值表明观察到的和预期的频率相差很远。 X ^ 2 的小值意味着相反:观察到的接近预期。所以 X ^ 2 确实测量了观测频率和预期频率之间的距离。

  • 第 525 页,统计,第四版,2007 年。

如果观察到的和预期的频率相似,变量的水平不相互作用,则变量被认为是独立的。

卡方检验的独立性通过比较您收集的分类编码数据(称为观察到的频率)与您预期在表中每个单元格中获得的频率(称为预期频率)进行比较。 。

我们可以在卡方分布的背景下解释检验统计量,并具有必要的自由度数,如下所示:

  • 如果统计&gt; =临界值:显着结果,拒绝原假设(H0),依赖。
  • 如果统计&lt;临界值:不显着的结果,不能拒绝零假设(H0),独立。

卡方分布的自由度是根据列联表的大小计算的:

degrees of freedom: (rows - 1) * (cols - 1)

根据 p 值和选择的显着性水平(alpha),测试可以解释如下:

  • 如果 p 值&lt; = alpha :显着结果,则拒绝原假设(H0),依赖。
  • 如果 p 值> alpha :不显着的结果,不能拒绝零假设(H0),独立。

为了使测试有效,在列联表的每个单元格中至少需要五次观察。

接下来,让我们看看我们如何计算卡方检验。

示例卡方测试

可以使用 chi2_contingency()SciPy 函数在 Python 中计算 Pearson 的卡方检验。

该函数将数组作为输入,表示两个分类变量的列联表。它返回计算的统计值和解释的 p 值以及计算的自由度和预期频率表。

stat, p, dof, expected = chi2_contingency(table)

我们可以通过从卡方分布中检索概率和自由度数的临界值来解释统计量。

例如,可以使用 95%的概率,这表明在测试假设变量是独立的情况下很可能发现测试结果。如果统计量小于或等于临界值,我们可能无法拒绝此假设,否则可能会被拒绝。

# interpret test-statistic
prob = 0.95
critical = chi2.ppf(prob, dof)
if abs(stat) >= critical:
	print('Dependent (reject H0)')
else:
	print('Independent (fail to reject H0)')

我们还可以通过将 p 值与选定的显着性水平进行比较来解释 p 值,该显着性水平为 5%,通过反转临界值解释中使用的 95%概率来计算。

# interpret p-value
alpha = 1.0 - prob
if p <= alpha:
	print('Dependent (reject H0)')
else:
	print('Independent (fail to reject H0)')

我们可以将所有这些结合在一起,并使用设计的列联表来演示卡方显着性检验。

下面定义了一个列联表,每个人口(行)的观察数量不同,但每个群体(列)的比例相似。鉴于相似的比例,我们期望测试发现组是相似的并且变量是独立的(不能拒绝零假设,或 H0)。

table = [	[10, 20, 30],
			[6,  9,  17]]

下面列出了完整的示例。

# 卡方 test with similar proportions
from scipy.stats import chi2_contingency
from scipy.stats import chi2
# contingency table
table = [	[10, 20, 30],
			[6,  9,  17]]
print(table)
stat, p, dof, expected = chi2_contingency(table)
print('dof=%d' % dof)
print(expected)
# interpret test-statistic
prob = 0.95
critical = chi2.ppf(prob, dof)
print('probability=%.3f, critical=%.3f, stat=%.3f' % (prob, critical, stat))
if abs(stat) >= critical:
	print('Dependent (reject H0)')
else:
	print('Independent (fail to reject H0)')
# interpret p-value
alpha = 1.0 - prob
print('significance=%.3f, p=%.3f' % (alpha, p))
if p <= alpha:
	print('Dependent (reject H0)')
else:
	print('Independent (fail to reject H0)')

首先运行示例打印列联表。计算测试并将自由度(dof)报告为 2,这是有道理的:

degrees of freedom: (rows - 1) * (cols - 1)
degrees of freedom: (2 - 1) * (3 - 1)
degrees of freedom: 1 * 2
degrees of freedom: 2

接下来,打印计算出的预期频率表,我们可以看到,通过数字的眼球检查,确实观察到的列联表似乎确实匹配。

计算并解释临界值,发现变量确实是独立的(未能拒绝 H0)。对 p 值的解释得出了同样的结论。

[[10, 20, 30], [6, 9, 17]]

dof=2

[[10.43478261 18.91304348 30.65217391]
 [ 5.56521739 10.08695652 16.34782609]]

probability=0.950, critical=5.991, stat=0.272
Independent (fail to reject H0)

significance=0.050, p=0.873
Independent (fail to reject H0)

扩展

本节列出了一些扩展您可能希望探索的教程的想法。

  • 更新卡方检验以使用您自己的列联表。
  • 编写一个函数来报告两个分类变量的观察结果的独立性
  • 加载包含分类变量的标准机器学习数据集,并报告每个变量的独立性。

如果你探索任何这些扩展,我很想知道。

进一步阅读

如果您希望深入了解,本节将提供有关该主题的更多资源。

图书

  • 第十四章,独立卡方检验,简明英语统计,第 3 版,2010 年。
  • 第二十八章,卡方检验,统计,第四版,2007 年。

API

用品

摘要

在本教程中,您发现了用于量化分类变量对的独立性的卡方统计假设检验。

具体来说,你学到了:

  • 可以使用列联表来汇总成对的分类变量。
  • 卡方检验可以将观察到的列联表与预期表进行比较,并确定分类变量是否独立。
  • 如何计算和解释 Python 中分类变量的卡方检验。

你有任何问题吗?
在下面的评论中提出您的问题,我会尽力回答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值