如何在Matlab中计算内核?

时间:2016-05-07 22:25:55

标签: matlab machine-learning svm

我想在Matlab中计算加权内核(用于在SVM分类器中使用),但我现在很困惑。

我想实现以下加权RBF和Sigmoid内核:

Weighted RBF kernel

Weighted Sigmoid kernel

x和y是大小为n的向量,gamma和b是常数,w是大小为n且带权重的向量。

现在的问题是来自Matlab的fitcsvm方法需要两个矩阵作为输入,即K(X,Y)。例如,未加权的RBF和sigmoid内核可以如下计算:

K_rbf = exp(-gamma .* pdist2(X,Y,'euclidean').^2)
K_sigmoid = tanh(gamma*X*Y' + b);

X和Y是矩阵,其中行是数据点(向量)。

如何在Matlab中计算上述加权内核

1 个答案:

答案 0 :(得分:2)

在传递给核方程之前,只需按权重缩放输入。假设您有一个权重向量w(输入问题的大小),您的数据的行数为X,而要素是列。将其与行广播(例如使用bsxfun)与w相乘。就这样。不要对Y执行相同的操作,只需将其中一个矩阵相乘即可​​。对于基于标量积(如sigmoid)的每个这样的“加权”内核都是如此;对于基于距离(如RBF),您希望按w的sqrt进行缩放。

简短证明:

基于标量

f(<wx, y>) = f(w<x, y>) (linearity of scalar product)

基于距离

f(||sqrt(w)x - sqrt(w)y||^2) = f(SUM_i (sqrt(w_i)(x_i - y_i))^2) 
                             = f(SUM_i w_i (x_i - y_i)^2)