【发布时间】:2020-09-25 06:36:14
【问题描述】:
我有 N 个多元正态分布。我想对它们进行聚类,以便删除冗余的(彼此足够接近的),或者通过增加它们的 sigma 来合并它们。有没有一种方法可以确定两个给定的正态分布是否足够接近(假设从它们中采样的 X% 的点将是相同的,其中 X 很大)。
起初我尝试使用 K-Means 聚类。从下图中可以看出,我已经绘制了分布(以两个选定维度的椭圆形式)。我通过 sklearn KMeans 传递了这个。相同颜色的包装被认为是相同的。
我还使用了 Bhattarcharya 距离和我在看到 wikipedia 页面时编写的以下代码。
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))
它也无法识别不同的高斯(或者我做错了什么)。
最后,我想确定哪些多元正态分布足够接近,这样我就可以合并它们并去除多余的分布。
【问题讨论】:
-
嗨,@lokiysh 以下解决方案对您有用吗?如果是,请将其标记为已接受的答案,因为这可能会对将来可能访问此页面的其他人有所帮助。谢谢。
标签: python scikit-learn scipy statistics k-means