查找两个直方图之间的相似性

数据挖掘 Python scikit-学习 相似 距离 绘图
2022-02-24 16:03:45

我有数据普查(姓名、性别、年龄、资本增益),我想绘制所有可能的视图(在直方图中),并根据与其他视图的区别找到最有趣的视图。

所以,我必须计算两个直方图之间的相似度,例如:

  1. 平均资本收益与性别(通过对性别的总资本收益计算)

资本收益与性

  1. 平均年龄与性别(按性别的总平均年龄计算)

年龄与性别

我的问题是,什么样的测量可以用来检查这两个直方图之间的相似性?我认为要比较的特征是(x 轴、y 轴和直方图的模式)

我真的不确定可以用于这种情况的距离函数。我知道 Jaccard 距离,但不确定是否可以在这种情况下使用。

谢谢,

2个回答

我很好奇其他人会说什么,但一种选择是使用KL-divergence如果您的两个直方图具有相同的 x 轴,您可以将每列除以总计数以将计数转换为比例。然后您可以将直方图视为概率质量,并使用 KL 散度。KL 散度实际上是两个概率分布之间距离的度量,但直方图是离散分布的近似值。你会选择你的分布之一是 P,一个是 Q,然后计算xP(X)logP(X)Q(X)在哪里x是直方图 x 轴上的每个 bin。请注意,此距离度量是有方向的,这意味着如果交换 P 和 Q,您将得到不同的答案。原因是 KL 散度是信息传递的度量(例如,从 Q 移动到P),但我认为这与您的问题无关。

您显示的那些图不是直方图,它们只是条形图。在直方图中,条形的高度是对有多少数据点落在由 X 轴上的该值表示的存储桶中的计数(例如,该特定年龄或年龄组的人数)。

您可以做的是绘制男性年龄的直方图(每个年龄或年龄组有多少男性)并将其与女性年龄的直方图进行比较。目前尚不清楚将男性年龄的直方图与他们财富的直方图进行比较意味着什么。

可以通过调整 Jaccard 相似度来计算同一变量的两个直方图(或分布)之间的相似度(参见本文的示例)。

您可能会发现年龄分布的相似度很高(例如 0.9),但财富的相似度很低。有趣的可能是直方图不同的那些(男性和女性的情况非常不同)。