如何将距离转换为概率?

问题描述 投票:7回答:3

有人为我的matlab程序发光吗?我有来自两个传感器的数据,我正在分别对每个传感器进行kNN分类。在这两种情况下,训练集看起来像一组总共42行的向量,如下所示:

[44 12 53 29 35 30 49;

 54 36 58 30 38 24 37;..]

然后我得到一个样本,例如[40 30 50 25 40 25 30]和我想把样本归类到最近的邻居。作为接近度的标准,我使用欧几里德度量,sqrt(sum(Y2)),其中Y是每个元素之间的差异,它给出了Sample和每个训练集类别之间的距离数组。

那么,有两个问题:

  • 是否可以将距离转换为概率分布,如:Class1:60%,Class 2:30%,Class 3:5%,Class 5:1%等。

补充:到目前为止我正在使用公式:probability = distance/sum of distances,但我无法绘制正确的cdf或直方图。这给了我一些分布,但我看到了一个问题,因为如果距离很大,例如700,那么最接近的类将获得最大的概率,但它是错的,因为距离太大而不能与任何课程相比。

  • 如果我能够获得两个概率密度函数,我想我会做一些它们的产品。可能吗?

任何帮助或评论都非常感谢。

matlab classification knn euclidean-distance probability-density
3个回答
7
投票

您可以尝试反转距离以获得可能性度量。即距离x越大,它的倒数越小。然后,你可以标准化为概率=(1 /距离)/(总和(1 /距离))


4
投票

我认为有多种方法可以做到这一点:

  1. 亚当建议使用1 / d / sum(1 / d)
  2. 使用方形,甚至更高阶的逆距离,例如1 / d ^ 2 / sum(1 / d ^ 2),这将使类概率分布更加偏斜。例如,如果1 / d生成40%/ 60%预测,则1 / d ^ 2可以给出10%/ 90%。
  3. 使用softmax(https://en.wikipedia.org/wiki/Softmax_function),负距离的指数。
  4. 使用exp(-d ^ 2)/ sigma ^ 2 / sum [exp(-d ^ 2)/ sigma ^ 2],这将模仿高斯分布的可能性。 Sigma可以是群集内的平均距离,或者只是为所有群集设置为1。

-1
投票

嗨:假设您使用0到1之间的标准距离,您是否尝试过公式概率= 1 - 距离?

© www.soinside.com 2019 - 2024. All rights reserved.