【问题标题】:Subscript indices must either be real positive integers or logicals in svmclassify matlabsvmclassify matlab中的下标索引必须是真正的正整数或逻辑
【发布时间】:2016-02-14 00:46:19
【问题描述】:

我正在使用 matlab 的 svm 分类功能。我的训练和测试数据具有以下维度:

>> size(TrainV)

ans =  

   99192         705

>> size(TestV)

ans =

246   705

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

Models = SVM_multitrain (TrainV(:, 2:end), TrainV(:, 1), 10); 

我正在发送特征向量 (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: []

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

>>         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),:);

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

【问题讨论】:

  • 有什么方法可以上传一些重现错误的数据以及可以运行的代码吗?这个错误对我来说听起来很具体,所以除非有人以前遇到过完全相同的错误,否则我认为没有人可以帮助你。
  • 能否提供models(1)的输出?
  • 请同时尝试“dbstop if error”以在错误发生时停止,您可以检查尺寸。
  • 我在这里意识到我的下雨/测试矩阵是复数的。这有什么问题吗?
  • @mad 看你应该先提供关于我们 cmets 的反馈。这只是礼貌。

标签: matlab svm


【解决方案1】:

此错误的可能原因是将复杂数据传递给svmclassifysvmclassify 只接受真实的特征向量。实际上,将复杂数据传递给svmclassify 会导致outclass 变得复杂,并且如错误消息所述,复杂值不能用于索引。

一种选择可能是将向量的虚部编码到特征中,例如将特征向量的长度加倍。

事实上,绝大多数机器学习模型都是基于特征向量是真实的假设。人工神经网络、回归树、支持向量机等。尽管在某些情况下可能会有一些扩展。

【讨论】:

  • 错误是关于索引,而不是关于特征,对吧?
  • @AnderBiguri 问题的根源在于复杂的特征,这会导致后面在 svmclassify 中出现复杂的索引。
  • 为什么都是否定的?尝试将复杂数据传递给 smvclassify,您会收到该消息。
  • 你应该详细说明一下,因为你给出的答案看起来你完全误解了这个问题。
  • 问题出在特征向量的生成上。有些值很复杂。它们必须是真实的。感谢您的帮助。
猜你喜欢
  • 2016-06-12
  • 2021-07-02
  • 2016-02-16
  • 2014-09-11
  • 2016-06-05
  • 1970-01-01
  • 2012-11-27
  • 2013-12-04
  • 2013-02-05
相关资源
最近更新 更多