gpt4 book ai didi

python - 如何消除两个数据集的 Leibler 分歧

转载 作者:行者123 更新时间:2023-12-05 07:41:50 25 4
gpt4 key购买 nike

我有两个包含 40000 个样本的数据集。我想用 python 计算这两个数据集之间的 Kullback-Leibler 散度。在 python 中有什么有效的方法吗?

最佳答案

编辑:
好的。我发现它在输入空间中不起作用。所以旧的解释可能是错误的,但我还是会保留它。

这是我的新想法:

在我的高级项目中,我使用了名为 AugMix 的算法.在这个算法中,他们计算了两个增强图像之间的 Shannon-Jensen 散度,这是 KL 散度的对称形式。

他们使用模型输出作为数据集的概率分布。这个想法是将模型拟合到数据集,然后将模型的输出解释为概率密度函数。

例如,您拟合了一个没有过度拟合的数据集。然后(假设这是一个分类问题)你将你的 logits(最后一层的输出)提供给每个类的 softmax 函数(有时 softmax 函数作为一个层添加到网络的末端,小心)。 softmax 函数(或层)的输出可以解释为 P(Y|X_{1}),其中 X_{1} 是输入样本,Y 是真实类别。然后,您对另一个样本 X_{2}、P(Y|X_{2}) 进行预测,其中 X_{1} 和 X_{2} 来自不同的数据集(比如 dataset_1 和 dataset_2)并且模型未使用任何这些数据集。

然后dataset_1和dataset_2之间的KL散度可以通过KL(dataset_1 || dataset_2) = P(Y|X_{1}) * log(P(Y|X_{1})/P(Y|X_ {2}))

确保 X_{1} 和 X_{2} 属于同一个类。

我不确定这是不是正确的方法。 或者,您可以使用不同的数据集(dataset_1 和dataset_2)训练两个不同的模型(model_1 和model_2),然后使用另一个数据集dataset_3 的样本计算这两个模型预测的KL 散度。换句话说:

KL(dataset_1 || dataset_2) = sum x in dataset_3 model_1(x) * log(model_1(x)/model_2(x))

其中 model_1(x) 是 model_1 的 softmax 输出,它是使用 dataset_1 训练的,没有过度拟合,用于正确的标签。

后者对我来说听起来更合理,但我不确定它们中的任何一个。我自己找不到合适的答案。


我要说明的内容是从machinelearningmastery.com 的Jason Brownlee 的博客中摘录的。 KL Divergence

据我了解,首先,您必须将数据集转换为概率分布,以便您可以计算两个数据集的并集(或相交?)中每个样本的概率。

KL(P || Q) = X 中的总和 P(x) * log(P(x)/Q(x))

然而,大多数时候数据集的交集是没有的。例如,如果你想测量 CIFAR10 和 ImageNet 之间的分歧,没有任何共同的样本。计算此指标的唯一方法是从同一数据集中采样以创建两个不同的数据集。因此,您可以拥有同时存在于两个数据集中的样本,并计算 KL 散度。

最后,也许您想查看 Wasserstein Divergence在 GAN 中用于比较源分布和目标分布。

关于python - 如何消除两个数据集的 Leibler 分歧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45086712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com