nik*_*dry 7 matlab classification knn euclidean-distance probability-density
有人为我的matlab程序发光吗?我有来自两个传感器的数据,我正在kNN分别对它们进行分类.在这两种情况下,训练集看起来像一组总共42行的向量,如下所示:
[44 12 53 29 35 30 49;
54 36 58 30 38 24 37;..]
Run Code Online (Sandbox Code Playgroud)
然后我得到一个样本,例如[40 30 50 25 40 25 30],我想将样本分类到最近的邻居.作为接近度的标准,我使用欧几里德度量,sqrt(sum(Y 2)),其中Y是每个元素之间的差异,它给出了Sample和每个训练集类别之间的距离数组.
那么,有两个问题:
补充:到目前为止我正在使用公式:probability = distance/sum of distances但我无法绘制正确的cdf或直方图.这给了我一些分布,但我看到了一个问题,因为如果距离很大,例如700,那么最接近的类将获得最大的概率,但它是错的,因为距离太大而不能与任何课程相比.
任何帮助或评论都非常感谢.
X.X*_*X.X 10
我认为有多种方法可以做到这一点:
正如亚当建议使用 1/d / sum(1/d)
使用平方,甚至更高阶的距离倒数,例如 1/d^2 / sum(1/d^2),这将使类概率分布更加偏斜。例如,如果 1/d 生成 40%/60% 的预测,则 1/d^2 可能会给出 10%/90%。
使用 softmax ( https://en.wikipedia.org/wiki/Softmax_function ),负距离的指数。
使用 exp(-d^2)/sigma^2 / sum[exp(-d^2)/sigma^2],这将模仿高斯分布的可能性。Sigma 可以是集群内的平均距离,或者简单地将所有集群设置为 1。