我想在Matlab中计算加权内核(用于在SVM分类器中使用),但我现在很困惑。
我想实现以下加权RBF和Sigmoid内核:
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中计算上述加权内核 ?
答案 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)