下标索引必须是svmclassify matlab中的实数正整数或逻辑

mad*_*mad 5 matlab svm

我正在使用matlab的svm分类功能.我的火车和测试数据有以下几个方面:

>> size(TrainV)

ans =  

   99192         705

>> size(TestV)

ans =

246   705
Run Code Online (Sandbox Code Playgroud)

我有一个函数,用10个类(45个二元分类器)训练一对一分类.可以通过调用以下函数来训练模型:

Models = SVM_multitrain (TrainV(:, 2:end), TrainV(:, 1), 10); 
Run Code Online (Sandbox Code Playgroud)

我发送特征向量(TrainV(:,2:end))和标签(TrainV(:,1)),我要求模型训练45个分类器的夫妻组合(10).该功能运行正常,培训结束后我可以获得以下信息.例如,我将展示第3和第45个二进制分类器的模型.

> Models(3)

ans = 

      SupportVectors: [9x704 double]
               Alpha: [9x1 double]
                Bias: -2.3927 - 0.0001i
      KernelFunction: @linear_kernel
  KernelFunctionArgs: {}
          GroupNames: [20117x1 double]
SupportVectorIndices: [9x1 double]
           ScaleData: [1x1 struct]
       FigureHandles: []

>> Models(45)

ans = 

      SupportVectors: [10x704 double]
               Alpha: [10x1 double]
                Bias: -2.7245 + 0.0000i
      KernelFunction: @linear_kernel
  KernelFunctionArgs: {}
          GroupNames: [22087x1 double]
SupportVectorIndices: [10x1 double]
           ScaleData: [1x1 struct]
       FigureHandles: []
Run Code Online (Sandbox Code Playgroud)

问题是当我调用函数来对特征向量进行分类时,例如,对于第一个二元分类器.

>>         TestAttribBin = svmclassify(Models(1), TestV(:,2:end))
Subscript indices must either be real positive integers or logicals.

Error in svmclassify (line 140)
outclass = glevels(outclass(~unClassified),:);
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?当我将相同的分类程序应用于以另一种方式提取的特征向量时,这个问题不会发生.

gre*_*iss 5

导致此错误的可能原因是将复杂数据传递给svmclassify.svmclassify只接受真实的特征向量.事实上,传递一个复杂的数据,以svmclassify导致outclass复杂和复杂值不能用于索引如由错误消息说明.

一种选择可以是将矢量的虚部编码到特征中,例如通过将特征向量的长度加倍.

事实上,绝大多数机器学习模型都基于特征向量的假设,例如.人工神经网络,回归树,svm等.虽然在某些情况下可能会有一些扩展.