【问题标题】:How to convert distance into probability?如何将距离转化为概率?
【发布时间】:2014-06-21 00:01:54
【问题描述】:

С 有人为我的 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 是每个元素之间的差异,它给了我一个数组样本与每类训练集之间的距离。

那么,两个问题:

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

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

  • 如果我能得到两个概率密度函数,我想我会做它们的乘积。有可能吗?

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

【问题讨论】:

  • 也许你的意思是probability = distance/sum of distances
  • 概率加起来应该总是 1 - 所以你应该弄清楚你的标准化是(与一个状态相关的某个数字)/(与所有状态对应的数字的总和)。这在你的情况下意味着什么有点难以判断。
  • 感谢你们的 cmets,伙计们,我明白这个问题。必须等于 1 并且probability = distance/sum of distances 满足它。
  • 但是想象一下这种情况:最小距离是 50,第二个最小值是 100,第三个最小值是 500,而总和是 30.000,我从这个公式中得到的是:0.16%, 0.3%、1.6%……最远的说33%,这不是概率,更像是错误的百分比,而是如何更简洁?

标签: matlab classification knn euclidean-distance probability-density


【解决方案1】:

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

  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。

【讨论】:

  • 您的 4. 是您的 3. 的概括,即您的 4. 只是 softmax(-d^2/s^2)
【解决方案2】:

您可以尝试反转距离以获得可能性度量。 IE。距离 x 越大,它的倒数越小。然后,您可以按照概率 = (1/distance) / (sum (1/distance) ) 进行归一化

【讨论】:

【解决方案3】:

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

【讨论】: