机器学习的向量化技巧

机器学习的向量化技巧1)2‘for’loops2)1‘for’loop3)NO‘for’loop1)2‘for’loopsnum_test=Xtest.shape[0]num_train=Xtrain.shape[0]dists=np.zeros)foriin

大家好,欢迎来到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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信