對於knn演算法,難點在於計算測試集中每一樣本到訓練集中每一樣本的歐氏距離,即計算兩個矩陣之間的歐氏距離。現就計算歐式距離提出三種方法。
歐式距離:歐幾里得度量/1274107?fromtitle=歐式距離&fromid=2809635&fr=aladdin
分別對訓練集和測試集中的資料進行迴圈遍歷,計算每兩個樣本之間的歐式距離。此演算法沒有經過任何優化。
)# 注:這裡用到了廣播機制,test_matrix[i]維度為(3,),train_matrix維度為(6, 3),
# 計算結果維度為(6, 3),表示 test_matrix[i] 與 train_matrix 各個樣本在各個軸的差值,
# 最後平方後在axis=1維度進行求和。
計算效率最高的演算法是將訓練集和測試集都使用矩陣表示,然後使用矩陣運算的方法替代之前的迴圈操作。但矩陣運算要求我們對矩陣的運算規則非常熟悉。現就計算兩個矩陣之間的歐式距離的矩陣運算進行推導。
矩陣之間的歐式距離物理意義:測試集每個樣本與訓練集每個樣本的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行的計算公式:
將公式推廣為整個距離矩陣 :
具體實現見下:
注:numpy陣列運算的廣播機制與對應元素運算原則。
矩陣運算基礎 余弦距離與歐式距離
1 余弦距離 余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理計算向量的夾角。餘弦定理描述了三角形中任何乙個夾...
矩陣之間歐式距離的快捷計算方法(無迴圈)
一 理論分析 首先從理論上介紹 一下,矩陣之間歐氏距離的快速計算,參考了 frankzd 二 分析 def euclidean dist x,y args x pytorch variable,with shape m,d y pytorch variable,with shape n,d retu...
歐式距離 caffe tensorflow
關於每個樣本對 向量 求l2 loss 相減 平方 求和 除以2 對mini batch內的所有損失取平均 m對應官方文件中的n 實現 補充點 l2 範數 平方 求和 開根號 l2範數的平方 平方 求和 l2 loss 平方 求和 除以2 下圖是tensorflow 手冊 相減 平方 求和 axis...