相关疑难解决方法(0)

使用Matlab进行交叉验证的多类SVM的完整示例

我现在正在混淆使用Matlab实现带有交叉验证的SVM.stackoverflow上有很多帖子提到了有关SVM及其交叉验证的信息; 然而,即使使用最简单的"fisheriris"数据集也没有完整的例子.

我总结了这些帖子的问题如下:

一个.二进制和多类SVM:由matlab中支持向量机回答, 但没有交叉验证的例子.

湾 使用SVM进行交叉验证: 在MATLAB中进行10倍SVM分类的 示例,但没有多类SVM的示例.

C.一对一和一对一的SVM:1-against-1可以在matlab中的支持向量机上找到 1-against-all可以在libsvm Multi-Class SVM中的多类分类中找到 (一对一) 没有交叉验证的例子

d.libSVM和Matlab内置SVM(统计工具箱)使用libSVM的部分完整示例可以 在一对一SVM中使用10倍交叉验证(使用LibSVM)

即 参数优化 使用libsvm进行交叉验证后重新训练

但是,对于一个人来说,学习并最终为他们的真正问题部署SVM的事情真的很复杂,只要查看这些以前的帖子就会出现问题和错误.至少我是愚蠢的解决拼图问题.

为什么我们不一起为具有以下功能的SVM构建易于理解的代码?

A.只需使用'fisheriris'数据.

B.可以用于二元和多类问题(fisheriris可以选择二进制).

C.实施交叉验证.

D.实施一对一和一对一.

E.两个版本分别使用libSVM和Matlab内置SVM.由于svmtrain与两个包的名称相同,我建议在使用之前将其更改为libsvmtrain和MEX.然后我们也可以比较这两种方法.

F.目前,由于训练/测试数据分离,结果并不总是可重复的.我们能解决这个问题吗

F.(可选)添加参数优化.

G.(可选)添加ROC分析.

我的开始是一些代码,如:

#
% libSVM version_1
clc; clear all;

load fisheriris
[~,~,labels]            = unique(species);              % Labels: 1/2/3
data                    = zscore(meas);                 % Scale features
numInst                 = size(data,1);
numLabels               = max(labels);

%# Split training/testing
idx                     = randperm(numInst);
numTrain                = 100; 
numTest …
Run Code Online (Sandbox Code Playgroud)

matlab svm

23
推荐指数
0
解决办法
4万
查看次数

使用libsvm进行交叉验证后重新培训

我知道交叉验证用于选择好的参数.找到它们之后,我需要在不使用-v选项的情况下重新训练整个数据.

但我面临的问题是,在使用-v选项训练后,我获得了交叉验证的准确性(例如85%).没有模型,我看不到C和gamma的值.在那种情况下,我如何重新训练?

顺便说一句,我应用10倍交叉验证.例如

optimization finished, #iter = 138
nu = 0.612233
obj = -90.291046, rho = -0.367013
nSV = 165, nBSV = 128
Total nSV = 165
Cross Validation Accuracy = 98.1273%
Run Code Online (Sandbox Code Playgroud)

需要一些帮助..

为了获得最佳的C和gamma,我使用LIBSVM FAQ中提供的代码

bestcv = 0;
for log2c = -6:10,
  for log2g = -6:3,
    cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
    cv = svmtrain(TrainLabel,TrainVec, cmd);
    if (cv >= bestcv),
      bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
    end
    fprintf('(best c=%g, g=%g, rate=%g)\n',bestc, bestg, …
Run Code Online (Sandbox Code Playgroud)

matlab classification machine-learning svm libsvm

17
推荐指数
1
解决办法
2万
查看次数

多类SVM(一对一)

我知道LIBSVM在多类SVM方面只允许一对一分类.但是,我想稍微调整它以执行一对一的分类.我试图在下面进行一对一的比赛.这是正确的方法吗?

代码:

TrainLabel;TrainVec;TestVec;TestLaBel;
u=unique(TrainLabel);
N=length(u);
if(N>2)
    itr=1;
    classes=0;
    while((classes~=1)&&(itr<=length(u)))
        c1=(TrainLabel==u(itr));
        newClass=c1;
        model = svmtrain(TrainLabel, TrainVec, '-c 1 -g 0.00154'); 
        [predict_label, accuracy, dec_values] = svmpredict(TestLabel, TestVec, model);
        itr=itr+1;
    end
itr=itr-1;
end
Run Code Online (Sandbox Code Playgroud)

我可能犯了一些错误.我想听听一些反馈.谢谢.

第二部分:正如葡萄藤所说:我需要做汇总(或投票作为简化解决方案)来得出最终答案.我不知道该怎么做.我需要一些帮助; 我看到了python文件,但仍然不太确定.我需要一些帮助.

matlab machine-learning svm libsvm

11
推荐指数
1
解决办法
3万
查看次数

在matlab中支持向量机

你能举一个在matlab中使用支持向量机(SVM)对4个类进行分类的例子:

atribute_1  atribute_2 atribute_3 atribute_4 class
1           2          3           4             0
1           2          3           5             0
0           2          6           4             1
0           3          3           8             1
7           2          6           4             2
9           1          7           10            3
Run Code Online (Sandbox Code Playgroud)

matlab artificial-intelligence classification machine-learning svm

10
推荐指数
2
解决办法
2万
查看次数

在一对一SVM中使用10倍交叉验证(使用LibSVM)

我想在MATLAB中的一对一 支持向量机分类中进行10倍交叉验证.

我试图以某种方式混合这两个相关的答案:

但是因为我是MATLAB及其语法的新手,所以到目前为止我还没有成功.

另一方面,我在LibSVM README文件中看到了以下几行关于交叉验证的内容,我在那里找不到任何相关示例:

选项-v随机将数据分成n个部分,并计算它们的交叉验证准确度/均方误差.

有关输出的含义,请参阅libsvm FAQ.

有人能给我一个10倍交叉验证和一对一分类的例子吗?

matlab classification machine-learning svm libsvm

10
推荐指数
1
解决办法
2万
查看次数

如何在MATLAB中运行libsvm?

如何在MATLAB下开始使用libsvm

我已下载了该库,并将其解压缩C:\Program Files\MATLAB\R2012a\toolbox\,但后来我不知道如何在MATLAB中使用它.

matlab svm libsvm

9
推荐指数
1
解决办法
3万
查看次数

不同svm库的不同精度在相同数据上具有相同参数

我正在使用libsvm并且我做了一个非常简单的实验,训练10k向量并且仅用22进行测试.我使用带参数成本的线性内核C=1.我的问题是多类.所以Libsvm将使用一对一的方法对我的数据进行分类.Libsvm使用SMO来查找分离超平面.

我的一个朋友做了同样的实验,但使用的SVM分类器来自统计工具箱.他还使用了来自R 的e1071软件包.再次,使用的内核是线性内核,参数成本C等于1,并且使用一对一方法对MATLAB中的数据进行分类(一对一方法由我的朋友编写)和e1071 R包.MATLAB统计工具箱和R的e1071都默认使用SMO方法查找分离超平面.

我也尝试了最新的LIBLINEAR库.同样,使用相同的配置.


以下是使用的代码:

libsvm 3.18(命令行)

./svm-scale -s train.range train.libsvm > train.scale 
./svm-scale -r train.range test.libsvm > test.scale
./svm-train -t 0 -c 1 train.scale train.model
./svm-predict test.scale train.model test.predict
Run Code Online (Sandbox Code Playgroud)

liblinear 1.94(命令行)

./svm-scale -s train.range train.libsvm > train.scale 
./svm-scale -r train.range test.libsvm > test.scale
./train train.scale train.model
./predict test.scale train.model test.predict
Run Code Online (Sandbox Code Playgroud)

[R

rm(list = ls())
cat("\014")
library(e1071)

cat("Training model\n")
Traindata = read.csv("train.csv", header=FALSE)
SVM_model = …
Run Code Online (Sandbox Code Playgroud)

matlab r svm libsvm liblinear

8
推荐指数
1
解决办法
2053
查看次数

使用 SVM 预测概率

我写了这段代码,想获得分类的概率。

from sklearn import svm
X = [[0, 0], [10, 10],[20,30],[30,30],[40, 30], [80,60], [80,50]]
y = [0, 1, 2, 3, 4, 5, 6]
clf = svm.SVC() 
clf.probability=True
clf.fit(X, y)
prob = clf.predict_proba([[10, 10]])
print prob
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出:

[[0.15376986 0.07691205 0.15388546 0.15389275 0.15386348 0.15383004 0.15384636]]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为概率应该是

[0 1 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)

(注意必须预测类别的样本与第二个样本相同)同样,该类别获得的概率最低。

python classification svm libsvm

7
推荐指数
2
解决办法
1万
查看次数

使用预先计算的chi2内核与libsvm(matlab)时的错误结果

我正在尝试使用libsvm,并按照示例在软件附带的heart_scale数据上训练svm.我想使用我自己预先计算的chi2内核.培训数据的分类率降至24%.我确信我正确地计算了内核,但我想我一定是做错了.代码如下.你能看到任何错误吗?非常感谢帮助.

%read in the data:
[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
train_data = heart_scale_inst(1:150,:);
train_label = heart_scale_label(1:150,:);

%read somewhere that the kernel should not be sparse
ttrain = full(train_data)';
ttest = full(test_data)';

precKernel = chi2_custom(ttrain', ttrain');
model_precomputed = svmtrain2(train_label, [(1:150)', precKernel], '-t 4');
Run Code Online (Sandbox Code Playgroud)

这是内核预先计算的方式:

function res=chi2_custom(x,y)
a=size(x);
b=size(y);
res = zeros(a(1,1), b(1,1));
for i=1:a(1,1)
    for j=1:b(1,1)
        resHelper = chi2_ireneHelper(x(i,:), y(j,:));
        res(i,j) = resHelper;
    end
end
function resHelper = chi2_ireneHelper(x,y)
a=(x-y).^2;
b=(x+y);
resHelper = sum(a./(b + eps));
Run Code Online (Sandbox Code Playgroud)

使用不同的svm实现(vlfeat),我获得了训练数据的分类率(是的,我在训练数据上测试,只是为了看看发生了什么)大约90%.所以我很确定libsvm结果是错误的.

matlab machine-learning svm libsvm

6
推荐指数
2
解决办法
3532
查看次数

matlab中addpath libsvm库之后的问题

我想知道libsvm是如何工作的.我在这个链接中尝试了这个代码[1]:在一对一SVM中使用10次交叉验证(使用LibSVM).它正在工作(我没有在matlab中添加路径libsvm库)但是在我添加了libsvm库之后.它不起作用.我不知道如何解决它.有一个错误:

Error using svmtrain (line 233)
Y must be a vector or a character array.

Error in libsvmtrain_ova (line 11)
        models{k} = svmtrain(double(y==labels(k)), X, strcat(opts,' -b 1 -q'));

Error in libsvmcrossval_ova (line 10)
        mdl = libsvmtrain_ova(y(trainIdx), X(trainIdx,:), opts);

Error in main (line 9)
acc = libsvmcrossval_ova(labels, data, opts, nfold);
Run Code Online (Sandbox Code Playgroud)

有没有人帮我如何解决?谢谢

matlab classification libsvm

6
推荐指数
1
解决办法
7310
查看次数

使用 LIBSVM 进行一对一多类分类。MATLAB

我正在尝试使用 LIBSVM 实现一对一多类分类。

\n

此链接很有用http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/ovr_multiclass/ \n但我在函数 \'ovrpredict()\' 中收到错误。

\n

函数如下:

\n
function [pred, ac, decv] = ovrpredict(y, x, model)\n\nlabelSet = model.labelSet;\nlabelSetSize = length(labelSet);\nmodels = model.models;\ndecv= zeros(size(y, 1), labelSetSize);\n\nfor i=1:labelSetSize\n  [l,a,d] = svmpredict(double(y == labelSet(i)), x, models{i});\n  decv(:, i) = d * (2 * models{i}.Label(1) - 1);             % ERROR IN THIS LINE\nend\n[tmp,pred] = max(decv, [], 2);\npred = labelSet(pred);\nac = sum(y==pred) / size(x, 1);\n
Run Code Online (Sandbox Code Playgroud)\n

我收到的错误消息是Reference to non-existent field \'Label\'

\n

任何建议都会非常有帮助。

\n
\n

编辑1

\n

用于调用函数的代码:\\

\n
[trainY …
Run Code Online (Sandbox Code Playgroud)

matlab classification libsvm

5
推荐指数
1
解决办法
2962
查看次数