libsvm 使用预计算核:如何计算分类得分?

我在MATLAB中使用libsvm进行训练和测试一个1对多的SVM,采用预计算的非线性核。我对SVM还比较新手,正在尝试计算决策函数。我知道对于线性SVM,我们可以通过(根据libsvm文档)获得w:

w = model.sv_coef'*model.SVs;

然后我们可以根据以下方式计算决策值:

w'*x

随后,根据sign(w'*x+b)预测标签,其中b是某个阈值。

我特别感兴趣的是如何从我的非线性核中获得分类得分。我该如何做呢?


回答:

我想了解你所说的分类得分是什么意思。实际上,你可以比较每个模型的概率,并选择最大的一个,就像我在你之前的帖子中所做的那样。

如果你使用决策函数也是可以的。假设你使用的是RBF核,并且model.Label(1) = 1,那么你有(如果model.Label(1) = -1,那么w = -w; b = -b;

[m,n] = size(model.SVs); % m是支持向量的数量,n是特征的数量w = model.sv_coef; % m*1的权重向量b = -model.rho; % 标量

现在你给定测试的v。并且你也有[1,n] = size(v); 然后对于支持向量中的每一行i,计算欧几里得距离(你可以将下面的代码向量化):

for i = 1:m    d(i) = norm(model.SVs(i,:) - v);    t(i) = exp(-gamma* d(i) .^2); % RBF模型,t是1*m向量end

决策函数(或决策函数的得分)是:

s = t * w + b;

你可以用其他非线性核以类似的方式获得决策函数。


编辑

使用自编的预计算核,以RBF核为例:

% RBF核:exp(-gamma*|u-v|^2)rbf = @(X,Y) exp(-gamma .* pdist2(X,Y,'euclidean').^2);% 需要以样本序列号作为第一列的核矩阵K_train =  [(1:numTrain)' , rbf(trainData,trainData)];K_test =   [(1:numTest)'  , rbf(testData,trainData)];%# 训练和测试model             = svmtrain(trainLabel, K_train, '-t 4');[predLabel, ~, ~] = svmpredict(testLabel, K_test, model);%# 混淆矩阵C = confusionmat(testLabel,predLabel);

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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