如何在Matlab中计算核函数?

我想在Matlab中计算加权核函数(用于SVM分类器),但目前我完全感到困惑。

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

加权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中高效地计算上述加权核函数?


回答:

在将输入传递给核函数方程之前,只需简单地按权重缩放输入即可。假设你有一个权重向量w(与输入问题大小相同),你的数据在X的行中,特征是列。使用bsxfun等方式对行进行广播乘法与w相乘。仅此而已。不过,不要对Y做同样的事情,只需乘以其中一个矩阵。对于基于标量乘积的“加权”核函数(如Sigmoid)来说,这是正确的;对于基于距离的(如RBF),你需要用w的平方根来缩放两者。

简短证明:

基于标量

f(<wx, y>) = f(w<x, y>) (标量乘积的线性性)

基于距离

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)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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