首页 > 编程知识 正文

matlab欧式距离,绝对距离计算距离矩阵

时间:2023-05-03 11:32:49 阅读:9415 作者:21

kNN算法的难点是计算从测试集中的每个样本到训练集中的每个样本的天真犀牛距离,即两个矩阵之间的天真犀牛距离。 在此提出三种计算欧式距离的方法。

欧式距离: https://baike.baidu.com/item/生动大碗测量/1274107? fromtitle=欧式距离fromid=2809635fr=aladdin

1 .通过双层循环扫描训练集和测试集的数据,计算每两个样本的欧式距离。 该算法未进行优化。

importnumpyasnpmatrix _1=NP.array ([ 1,2,3 ]、[ 4,5,6 ]、[ 7,8,9 ] ) Matrix_2=NP.array ) [1] [ 9 train _ matrix (: num _ test=test _ matrix.shape [0] num _ train=train _ matrix.shape [0] dists=NP.zee ts num-train (foriinrange (num _ test ) : forjinrange (num-train ) : # correspondingelementinumentinumum=NP.sqrt (NP.sum (NP.square (test _ matrix [ I ]-train _ matrix [ j ] ) ) ) ) 652

2 .如果利用一级回收Numpy广播机制(见下面的博客)优化方法,则使用一级回收。

ef compute _ distances _ one _ loop (test _ matrix, train _ matrix (: num _ test=test _ matrix.shape [0] num _ train=train _ matrix.shape [0] dists=NP.zeets num_train () forIinrange(num_test ) :dists(I )=NP.sqrt ) NP.sum (NP.square (test _are ) train_matrix维为[ 6,3 ],#计算结果维为[ 6,3 ],表示test_matrix[i]和train_matrix的各样品在各轴上的returndistscompute

3 .不使用循环计算的最有效算法是用矩阵表示训练集和测试集,并使用矩阵运算代替以前的循环操作。 但是矩阵运算要求熟悉矩阵的运算规则。 在此,导出计算两个矩阵之间欧式距离的矩阵运算。

矩阵间的欧式距离物理意义:测试集中每个样本和训练集中每个样本的L2范式。 很明显,最后一个结果维必须是(num_test,num_train )。

设测试集矩阵t的大小为MD,训练集矩阵p的大小为ND (测试集中有m个点,各点为d维特征向量; 训练集中有n个点,每个点是d维的特征向量)。

Ti是测试集矩阵t的第I行,Pj是训练集矩阵p的第j行。

计算Ti和Pj之间的距离dists[i][j]:

在距离矩阵的第I行展开的计算公式:

将公式推广到整个距离矩阵:具体实现如下。

efnon_loop(test_matrix, train_matrix ) : num _ test=test _ matrix.shape [0] num _ train=train _ matrix num _ train () because (x-) so D1=-train train _ matrix.t (# shape (num _ test,num_train ) D2=NP.sum(NP.square ) test_matrix ),axx 1 ) D3=NP.sum (NP.square (train _ matrix ),axis=1) # shape (num _ train,) dists=NP.sqrt (d1d2d3) # bro

注意: Numpy数组运算的广播机制及相应的元素运算原则。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。