【发布时间】:2018-06-05 07:43:37
【问题描述】:
我使用 cvxopt qp 求解器在 python 中实现了一个支持向量机,我需要计算两个向量的 gram 矩阵,每个元素都有一个核函数。我使用 for 循环正确实现了它,但这种策略计算量很大。我想对代码进行矢量化处理。
例子:
这是我写的:
K = np.array( [kernel(X[i], X[j],poly=poly_kernel)
for j in range(m)
for i in range(m)]).reshape((m, m))
如何在没有 for 循环的情况下对上述代码进行矢量化以更快地获得相同的结果?
核函数计算一个高斯核。
Here is a quick explanation of an svm with kernel trick.第二页说明了问题。
这是我完整的code 上下文。
编辑:这是一个快速代码 sn-p,它运行我需要以非矢量化形式矢量化的内容
from sklearn.datasets import make_gaussian_quantiles;
import numpy as np;
X,y = make_gaussian_quantiles(mean=None, cov=1.0, n_samples=100, n_features=2, n_classes=2, shuffle=True, random_state=5);
m = X.shape[0];
def kernel(a,b,d=20,poly=True,sigma=0.5):
if (poly):
return np.inner(a,b) ** d;
else:
return np.exp(-np.linalg.norm((a - b) ** 2)/sigma**2)
# Need to vectorize these loops
K = np.array([kernel(X[i], X[j],poly=False)
for j in range(m)
for i in range(m)]).reshape((m, m))
谢谢!
【问题讨论】:
-
请通过包含相关位(在本例中为内核函数)和一些模拟数据来帮助那些试图帮助您的人,以便他们可以直接运行您的示例。
-
更新问题谢谢
标签: python numpy machine-learning svm cvxopt