【问题标题】:How to use classifiers如何使用分类器
【发布时间】:2013-04-01 13:07:31
【问题描述】:

我想在我的数据特征上使用 svm、knn、adaboost 分类器。我构建了代码,在其中计算了帧差异并计算了特征(eigenvalues,应变能,势能)......构建了一个[帧数,特征]的数组。我尝试将 svm 用作:

 Features = data;  % Features array [40, 5]
 class = ones(numFrames-1, 1);  % numFrames=41
 class(1:(fix(numFrames/2))) = -1;
 SVMstruct = svmtrain(Features, class, 'Kernel_Function', 'rbf');
 newclass = svmclassify(SVMstruct, [40 5]);  %Test data

我遇到了一个错误:

TEST 和训练数据中的列数必须相等。

%classperf(cp,newclass); cp'`给出的类的%性能

这个错误的原因是什么?以及如何使用具有此功能集的更多分类器?

【问题讨论】:

  • 能否提供特征矩阵的大小?
  • 特征矩阵为[40,5]
  • 澄清一下,是Features=[40, 5] 还是size(Features) = [40,5]
  • 我建立了一个大小为 [ 40 5] 的数组......在其中我计算了特定帧的 5 组特征......我在 40 帧上运行视频并计算特征每个帧....然后我必须对其应用 svm 方法....我 jst 在“newclass”行中发现了错误 ....在 mathworks 论坛中 svmclassify 应该具有与训练数据相同的样本数据列...因此在示例数据中,我将只放置 [40 5] 的数组....需要澄清示例数据

标签: matlab


【解决方案1】:

我可以从您收到的错误中推断出以下内容。

svmtrain 中没有错误,这意味着 size(features)=[40 5]。错误在最后一行。请参阅svmclassify 的语法。您传递了一个测试数据样本,其特征/列数与案例 5) 中的训练数据相同。相反,您传递的大小是 [40 5],它只有两列。通过n 行和5 列的实际测试集。最后一行应该是

newclass= svmclassify(SVMstruct,testData); %where size(testData)=[n 5], n indicates how many test samples you have.

【讨论】:

  • parag 先生@我对测试数据 aur 训练数据有很大的困惑......特征是我的训练数据,它是 [40 5],我在其中计算特定帧的 5 组特征.. .我运行视频超过 40 帧并计算每个帧的特征...先生请解释我现在应该是什么测试数据/样本....n 应该取任何值 b/w 1 到 40
  • 您能否访问更多类似于您的训练数据的视频帧?如果是,计算这些帧上的 5 组特征并将其用作测试数据。如果否,则选择 RANDOM 子集(可能是 5-10 个随机选择的帧)并将其用作测试数据。在每一帧测试数据上计算 5 组特征。假设矩阵中的行代表不同时间间隔的视频帧,则训练和测试数据中的列数应始终相同。
  • 先生,我试过这样 %sampledata= Features((3:8),(1:5)); newclass= svmclassify(SVMstruct,sampledata);.......这将再次显示错误......“下标索引必须是真正的正整数或逻辑。svmclassify 中的错误(第 140 行)outclass= glevels(outclass( ~unClassified),:); Untitled411111111111 中的错误(第 225 行) newclass= svmclassify(SVMstruct,sampledata); .sir accrdng to ui jst 从同一视频中选择帧 3:8 并使用它们的特征值来制作样本数据/训练数据。 ..这种方法很好,我必须从另一个视频中计算值。
  • 先生,我也试过这个--- Features=data(21:40,3:4);class=ones(20,1);类(1:(修复(24/2)))=-1; SVMstruct = svmtrain(功能,类,'Kernel_Function','rbf'); newclass= svmclassify(SVMstruct,[5 2]);.....这一次我的列长度是相同的......发生 bt 错误......""下标索引必须是真正的正整数或逻辑。 svmclassify 中的错误(第 140 行)outclass= glevels(outclass(~unClassified),:); Untitled411111111111(第 227 行)中的错误 newclass= svmclassify(SVMstruct,[5 2]); %哪里
  • 我也看到了svmclassify 函数。我无法理解错误的来源。该错误意味着它在向量中包含零或负元素。此外,用于索引的向量只有在它是逻辑向量时才能包含零。您可以通过编辑问题或发布新问题来发布整个代码。
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 2020-01-08
  • 2018-05-13
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多