我有N个多元正态分布。我想对它们进行集群,以便移除冗余的(彼此足够接近的),或者通过增加sigma来合并它们。是否有一种方法可以确定两个给定的正态分布是否足够接近(假设从它们中采样的点的X%相同,其中X很大)
起初,我尝试使用K-Means聚类。从下图可以看出,我绘制了分布图(以两个选定维度的椭圆形式)。我通过Skkmeans传递了这个。相同颜色的包装被认为是相同的。
我还使用了Bhattarcharya距离,并在查看维基百科页面时编写了以下代码
def bhattacharya_distance(mu1, mu2, cov1, cov2):
dist = mu1 - mu2
sigma = (cov1 + cov2) / 2
term1 = dist * np.linalg.inv(sigma) * dist.T
term2 = np.log(np.linalg.det(sigma) / np.sqrt(np.linalg.det(cov1) * np.linalg.det(cov2))) / 2
return np.exp(-np.linalg.det(term1 + term2))
它也无法识别不同的高斯(或者我做错了什么)
最后,我想确定哪些多变量正态分布足够接近,这样我就可以合并它们,去掉多余的
您可以使用KL Divergence损失来比较两个概率分布之间的相似性。请按照以下示例了解更多信息:
现在,您可以设置此指标的阈值并对分布进行分组
希望这有帮助
相关问题 更多 >
编程相关推荐