Warm tip: This article is reproduced from stackexchange.com, please click

机器学习 - 如何在 python 中手动构建和使用内核技巧?

(machine learning - How to build and use the kernel trick manually in python?)

发布于 2016-10-29 12:34:26

所以......我几个小时以来一直在尝试制作径向基内核,但我不确定我的最终矩阵应该是什么样子。我有 30 个特征和 200000 个数据点。我的矩阵 K 应该是 200000*200000 还是 30*30 ?

到目前为止,我的代码产生 30*30:

def build_kernel(x, func, option):
x = x.T
K = np.zeros([x.shape[0], x.shape[0]])
for i in range(x.shape[0]):
    xi = x[i,:]
    for j in range (x.shape[0]):  
        xj = x[j,:]
        K[i,j] = func(xi, xj, option)

return K 

def radial_basis(xi, xj, gamma):
    r = (np.exp(-gamma*(np.linalg.norm(xi-xj)**2))) 
    return r

我的目标是在岭回归中使用内核技巧,就像这里解释的那样:http : //www.ics.uci.edu/~welling/classnotes/papers_class/Kernel-Ridge.pdf

但我不知道如何手动实现(我必须为学校手动实现!)

有人知道怎么做这样的事情吗?:)

谢谢 !

Questioner
Albert James Teddy
Viewed
0
Danica 2016-10-29 21:31:29

核函数比较数据点,所以它是$200,000 \times 200,000$。(似乎你的数据x是按函数存储为实例的,但是你x = x.T出于某种原因进行了交换。据我所知,你计算的矩阵没有任何意义。)

在普通的个人计算机上使用这将是非常具有挑战性的。如果你只是删除该x = x.T行以便你的代码计算正确的值,则矩阵K在内存中将是 298 GB!(另外,你使用 Python 嵌套循环和 400 亿次函数调用来实现它的方式radial_basis,即使你有那么多内存,也需要长时间来计算。)

这是一个直接使用内核技巧的例子,坦率地说,这是一个坏主意。

如果你对进行核岭回归一无所知,那么你可以进行各种近似以使其在该大小的数据上在计算上合理,我可以向你指出其中的一些。但学校作业似乎不太可能真的要求你这样做。