大家好,欢迎来到IT知识分享网。
在实现一些机器学习(ML)算法时计算两个矩阵之间的L2距离是一个常见的步骤,就像kNN分类一样,我们需要计算所有训练和测试例子之间的L2距离。如果有Ntr训练样例和Nte测试例子,这一步应该产生Nte x Ntr矩阵,其中每个元素(i, j)是第i个测试示例和第j个训练示例之间的距离。在下面的实现中,Xtrain是(5000,2304)矩阵,ytrain是(5000,1)矩阵。Xtest是(500,2304)矩阵,ytest是(500,1)矩阵。由于大小表明有5000个训练样本和500个测试样本。
现在我有以下提到的各种实现找到L2距离:
1) 2 ‘for’ loops (NO 向量化)
2) 1 ‘for’ loop (PARTIAL向量化)
3) NO ‘for’ loop (FULL 向量化)
1) 2 ‘for’ loops (NO 向量化)
num_test = Xtest.shape[0]
num_train = Xtrain.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
for j in range(num_train):
dists[i, j] = np.sqrt(np.sum((X[i] – self.X_train[j])**2))
pass
print(dists)
NO向量化所花费的时间= 34.99秒
2) 1 ‘for’ loop (PARTIAL向量化)
num_test = Xtest.shape[0]
num_train = Xtrain.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
Xte = X[i, np.newaxis]
dists[i, :] = np.sqrt(np.sum((Xte – Xtrain)**2, axis = 1))
print(dists)
部分向量化算法所花费的时间= 17.18秒
3) NO ‘for’ loop (FULL 向量化)
num_test = Xtest.shape[0]
num_train = Xtrain.shape[0]
dists = np.zeros((num_test, num_train))
dists = np.sqrt(-2 * np.dot(Xtest, Xtrain.T) + np.sum(Xtrain ** 2, axis=1) + (np.sum(Xtest ** 2, axis=1))[:, np.newaxis])
完全向量化alog所需的时间= 0.44秒
可以清楚地看到,FULLY向量化实现表现最佳。 p和q之间的欧几里德距离就是这个位移向量的欧几里德长度:
这相当于:
这就是用于FULLY向量化实现的形式。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/85152.html