在机器学习中,计算一个变量或一系列数字的平均值是一项常见操作。
这是一项你可能每天都会使用的操作,无论是直接使用,例如在汇总数据时,还是间接使用,例如在拟合模型时作为更大过程的一个小步骤。
平均值是均值的同义词,均值是一个代表概率分布中最可能值的数字。因此,根据你使用的数据类型,有多种计算均值的方法。
如果你为数据使用了错误的均值,可能会让你感到困惑。在使用性能指标评估模型时,你还可能遇到一些更奇特的均值计算方法,例如 G-均值或 F-测量。
在本教程中,你将了解算术平均值、几何平均值和调和平均值之间的区别。
完成本教程后,您将了解:
- 集中趋势总结了变量最可能的值,而平均值是计算均值的常用名称。
- 如果值的单位相同,则算术平均值是合适的;而如果值的单位不同,则几何平均值是合适的。
- 如果数据值是具有不同度量的两个变量的比率,称为速率,则调和平均值是合适的。
通过我的新书 《机器学习统计学》,快速开始你的项目,其中包含分步教程和所有示例的Python源代码文件。
让我们开始吧。

机器学习中的算术平均数、几何平均数与调和平均数
照片作者:Ray in Manila,保留部分权利。
教程概述
本教程分为五个部分;它们是:
- 什么是平均值?
- 算术平均值
- 几何平均值
- 调和平均值
- 如何选择正确的均值?
什么是平均值?
集中趋势是一个代表一组数字中最常见值的单个数字。
更技术地说,它是描述变量所有可能值的概率分布中概率最高的值。
有许多方法可以计算数据样本的集中趋势,例如从值计算得出的均值,数据分布中最常见值的众数,或按数据样本中的所有值排序后的中间值的中位数。
平均值是均值的常用术语。它们可以互换使用。
均值与中位数和众数不同,因为它是从数据计算得出的集中趋势度量。因此,根据数据类型,有不同的方法来计算均值。
你可能会遇到的三种常见的均值计算类型是算术平均值、几何平均值和调和平均值。还有其他均值,以及更多的集中趋势度量,但这三种均值可能是最常见的(例如,所谓的毕达哥拉斯均值)。
让我们逐一仔细看看每种均值的计算。
算术平均值
算术平均值计算为所有值的总和除以值的总数 N。
- 算术平均值 = (x1 + x2 + … + xN) / N
计算算术平均值的一个更方便的方法是计算值的总和,然后乘以值的倒数(1/N);例如
- 算术平均值 = (1/N) * (x1 + x2 + … + xN)
当数据样本中的所有值具有相同的测量单位时,算术平均值是合适的,例如所有数字都是高度、美元或英里等。
在计算算术平均值时,值可以是正数、负数或零。
如果观测样本包含异常值(少数值与其他值相距很远),或数据具有非高斯分布(例如,多个峰,所谓的峰度概率分布),则算术平均值可能会被严重扭曲。
当汇总变量时,算术平均值在机器学习中很有用,例如报告最可能的值。当变量具有高斯或类高斯数据分布时,这更有意义。
算术平均值可以使用 mean() NumPy 函数计算。
下面的示例演示了如何计算 10 个数字列表的算术平均值。
1 2 3 4 5 6 7 |
# 计算算术平均值的示例 from numpy import mean # 定义数据集 data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 计算均值 result = mean(data) print('算术平均值: %.3f' % result) |
运行此示例将计算算术平均值并报告结果。
1 |
算术平均值: 4.500 |
几何平均值
几何平均值计算为所有值的乘积的 N 次方根,其中 N 是值的数量。
- 几何平均值 = N 次方根 (x1 * x2 * … * xN)
例如,如果数据只包含两个值,则两个值乘积的平方根就是几何平均值。对于三个值,使用立方根,依此类推。
当数据包含具有不同测量单位的值时,几何平均值是合适的,例如有些测量是高度,有些是美元,有些是英里等。
几何平均值不允许负值或零值,例如所有值必须为正数。
机器学习中几何平均值的一个常见示例是计算所谓的 G-均值(几何平均值)指标,这是一个模型评估指标,它通过灵敏度和特异度指标的几何平均值来计算。
几何平均值可以使用 gmean() SciPy 函数计算。
下面的示例演示了如何计算 10 个数字列表的几何平均值。
1 2 3 4 5 6 7 |
# 计算几何平均值的示例 from scipy.stats import gmean # 定义数据集 data = [1, 2, 3, 40, 50, 60, 0.7, 0.88, 0.9, 1000] # 计算均值 result = gmean(data) print('几何平均值: %.3f' % result) |
运行此示例将计算几何平均值并报告结果。
1 |
几何平均值: 7.246 |
调和平均值
调和平均值计算为值的数量 N 除以所有值倒数(每个值 1 除以该值)的总和。
- 调和平均值 = N / (1/x1 + 1/x2 + … + 1/xN)
如果只有两个值(x1 和 x2),调和平均值的简化计算可以表示为
- 调和平均值 = (2 * x1 * x2) / (x1 + x2)
如果数据由速率组成,则调和平均值是合适的。
回想一下,速率是两个具有不同度量的量之间的比率,例如速度、加速度、频率等。
在机器学习中,我们在评估模型时会遇到速率,例如预测中的真阳性率或假阳性率。
调和平均值不接受负值或零值,例如所有速率都必须为正数。
调和平均值在机器学习中的一个常见应用是计算F-测量(也称为 F1-测量或 Fbeta-测量);这是一个模型评估指标,通过精确率和召回率指标的调和平均值来计算。
调和平均值可以使用 hmean() SciPy 函数计算。
下面的示例演示了如何计算九个数字列表的调和平均值。
1 2 3 4 5 6 7 |
# 计算调和平均值的示例 from scipy.stats import hmean # 定义数据集 data = [0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 0.99] # 计算均值 result = hmean(data) print('调和平均值: %.3f' % result) |
运行此示例将计算调和平均值并报告结果。
1 |
调和平均值: 0.350 |
如何选择正确的均值?
我们已经回顾了计算变量或数据集的平均值的三种不同方法。
算术平均值是最常用的均值,尽管在某些情况下可能不适用。
每种均值都适用于不同类型的数据;例如
- 如果值具有相同的单位:使用算术平均值。
- 如果值具有不同的单位:使用几何平均值。
- 如果值为速率:使用调和平均值。
例外情况是,如果数据包含负值或零值,则几何平均值和调和平均值不能直接使用。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
API
文章
总结
在本教程中,你了解了算术平均值、几何平均值和调和平均值之间的区别。
具体来说,你学到了:
- 集中趋势总结了变量最可能的值,而平均值是计算均值的常用名称。
- 如果值的单位相同,则算术平均值是合适的;而如果值的单位不同,则几何平均值是合适的。
- 如果数据值是具有不同度量的两个变量的比率,称为速率,则调和平均值是合适的。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
你好 Jason,
是否存在关于 Keras 与 Sklearn 使用情况的统计数据?
人们更喜欢使用 Keras 还是 Sklearn?(因为它更容易使用)
在我看来,Keras 和 Sklearn 之间有许多“重叠”函数可以获得相同的结果。你怎么看?
谢谢
sklearn 用于机器学习。
Keras 用于深度学习。
嗨 Jason
我有一个基因组数据,包含标记及其深度。由于每次样本的总读取数不同,我们通常会进行标准化(除以均值或计算 z 分数)。
但是,我的数据非常稀疏。有些标记的深度很高,但大多数标记的深度只有 1 或 2,或者为零。
以下是示例。
(0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,10,20,30)
一个样本拥有超过 200 万个标记,其模式与上述类似。
我想知道哪种标准化适合我的数据。
它是相同的单位,但看起来像不同的单位。
我猜这取决于你为什么要缩放数据?
也许可以探索稳健缩放,它对异常值不变?
为什么会有人考虑计算具有不同单位的值的均值?从物理角度来看,这听起来很糟糕。你能举例说明或解释一下吗?
此致!
它用于对不平衡分类的灵敏度和特异度进行平均。
https://machinelearning.org.cn/tour-of-evaluation-metrics-for-imbalanced-classification/
很好的应用示例!在我看来,灵敏度和特异度仍然是无量纲量,因此具有相同的单位。如果有人试图对例如米和秒求平均值,我会非常惊讶!
此致!
同意。
你好 Jason,
请告诉我为什么不使用其他均值而使用几何平均值?谢谢你的回答。
Ali Asghar Ghalavand,来自伊朗
2022年8月12日
你好 Ghalavand…你可能会发现以下资源很有趣
https://towardsdatascience.com/on-average-youre-using-the-wrong-average-geometric-harmonic-means-in-data-analysis-2a703e21ea0
嗨,Jason,
我需要计算工厂中机器的正常运行时间均值。正常运行时间基本上是一个无量纲比率(你可以近似为正常运行时间 = 生产单位数/生产计划)。
但是,如果我需要为工厂中的一台机器报告一个数字(计算均值的理由),那么最合适的度量是什么——算术、几何还是调和,以及为什么?
如果你能帮助我理解上述问题的具体原因,那将非常有帮助。
我可能是错的,但我的直觉认为调和平均值是合适的,因为它是一个比率或速率。
你好 Jason,
不错的文章。你的读者可能会对我的研究感兴趣,这些研究表明几何平均值与香农熵的关系。对于机器学习,用于衡量概率推断准确性的交叉熵度量可以转换为概率度量,并成为概率的几何平均值。
概率的算术平均值会滤除异常值——低概率——因此可用于衡量算法的决定性。此测量类似于算法的分类性能。
概率的调和平均值对异常值过于敏感。但 -2/3 次方平均值是算术平均值的数学共轭,它能很好地洞察算法的鲁棒性。
更多细节请参阅这两篇文章
评估概率推断
https://www.mdpi.com/1099-4300/19/6/286
降低困惑度
https://arxiv.org/abs/1603.08830
感谢分享。
在算术平均值、调和平均值、加权平均值和几何平均值中,哪一个不依赖于观察的总数?
不确定我的理解是否正确,我认为它们都依赖于样本的值,而不是样本的数量。
您好,我看到您有《机器学习统计方法》等书籍,如果它们能在Audible上以有声读物的形式提供,那就太好了——我一直在那里找,但没找到。
感谢您的建议 Shai!我们的材料旨在帮助您入门机器学习概念,并提供可立即用于获取结果的代码。因此,我们目前的格式最适合让您通过在机器学习环境中主动运行代码示例来保持参与。
你好,我有一个问题,我不确定你是否专攻这个领域,但我正在为我的作业做一个直方图,它有一个单峰正态分布曲线,这意味着你应该用算术方法找到数据的整体均值,然而我的数据集中的类间隔是不均匀的,这表明我应该用几何方法找到间隔的均值。只是想问一下,你是否必须通过算术方式计算均值区间,因为你用算术方式计算整体均值,或者你可以用几何方式找到均值区间,因为它们是不均匀的,然后用算术方式计算整体均值。
抱歉,段落有点长,谢谢!
嗨,jason
我有一个问题,我不确定你是否专攻这个领域,但我正在为我的作业做一个直方图,它有一个单峰正态分布曲线,这意味着你应该用算术方法找到数据的整体均值,然而我的数据集中的类间隔是不均匀的,这表明我应该用几何方法找到间隔的均值。只是想问一下,你是否必须通过算术方式计算均值区间,因为你用算术方式计算整体均值,或者你可以用几何方式找到均值区间,因为它们是不均匀的,然后用算术方式计算整体均值。
抱歉,段落有点长,谢谢!
你好 husna…我强烈建议你研究 Seaborn 以达到你的目的。
https://machinelearning.org.cn/seaborn-data-visualization-for-machine-learning/
嗨,Jason,
我想知道你为什么说“……如果数据包含负值或零值,则几何平均值和调和平均值不能直接使用。”
具体来说,我正在处理包含负速率值的数据,所以计算调和平均值传统上不起作用,正如你上面指出的那样。但是,我想知道你是否考虑过任何间接方法来实现与为这些值计算调和平均值类似的结果。
谢谢!
祝好,
Ryan
你好 Ryan…以下资源应该能更清楚地说明问题。
https://www.toppr.com/guides/business-mathematics-and-statistics/measures-of-central-tendency-and-dispersion/harmonic-geometric-mean/
我对几何平均值不太清楚,它“如果值的单位不同,则适合”。数据测量同一个变量怎么会有不同的单位?关于灵敏度和特异度的例子令人困惑,因为这些值没有单位,它们是概率。
同样,调和平均值“如果数据值是具有不同度量的两个变量的比率(称为速率),则适合”。同样,提供的关于召回率和精确率的例子也是无单位的,因为它们也是概率。
你好 Ming…以下资源可能很有趣。
https://towardsdatascience.com/on-average-youre-using-the-wrong-average-geometric-harmonic-means-in-data-analysis-2a703e21ea0
你用的图片和这个话题有关吗?每个动物是否代表变量中的一个元素,它们平均看起来一样!?我不知道。
你好 sdf…图片与任何变量都没有关联。