9

Сan 任何人照亮我的 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(Y 2 )),其中Y是每个元素之间的差异,它为我提供了样本和每个训练集类之间的距离数组。

所以,两个问题:

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

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

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

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

4

3 回答 3

10

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

  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。

于 2017-09-22T23:23:07.033 回答
8

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

于 2014-05-07T18:00:55.120 回答
-3

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

于 2019-03-19T21:55:21.420 回答