如何测试svm分类器?

时间:2016-07-25 12:05:18

标签: matlab classification libsvm

我使用svm进行人类行为识别。我用" kth"数据库中有25个人在4种不同的场景中进行6种不同的动作(步行,慢跑,跑步,拳击,手握和手持)。所以我有600个数据样本(运动历史图像)(每个动作100个样本)。

我为6个动作训练了6个不同的1-vs-all svm,例如:

- 用于训练我使用的跑步课程:

- 来自运行样本的80个样本;

- 来自其他班级的500个样本;

所以我保存了20个样本来测试分类。 但是我的成绩非常好,这让我确信我在测试中犯了一个错误(90%的成功,而其他论文的最佳镜头有63.5%)。

我应该怎么做才能测试svm分类器?

其他信息:

每个视频: 30秒,20 fps,每帧大小160 * 120

算法:

1)从所有视频中提取MHI特征(25个人,4个场景,6个动作,每个30秒),以便收集360000个样本。

2)选择600个样本(每个视频1个)

3)重塑所有样本(1 * 19200)

培训     每个班级做4到6次

4)80个样本为+1级

5)500个样本为-1级

6)用每个类的libsvm计算“w”和“偏差”

测试:     现在我们每6个班级有1个“w”和“偏见”。

7)使用未经训练的MHI功能作为输入

8)计算每个班级的“W *输入+偏差”

9)获胜者类是签名(W *输入+偏见)> 0

的类

1 个答案:

答案 0 :(得分:0)

我看到很多问题。我还建议你参加机器学习课程,或者阅读一本书来更好地理解概念。

  1. 为什么使用600个功能,如果有不同的场景,则不能为不同的场景包含不同的功能。您的特征向量应该能够应对所有场景中的变化。

  2. 在对操作进行分类时,是否会连接不同人员的功能?如果是这样,那也是错误的。想象一下,我给你一个样本,其中有一个动作,一个场景由一个人完成。您将如何在测试时对此进行分类?

  3. 您说在分类“正在运行”操作时,您使用了运行类的80个功能。那么,你会在拳击比赛时使用80个拳击功能和500个其他功能吗?如果是这样,这也是错误的。对样本进行分类时,您不知道它的类。在进行特征提取时,应该以相同的方式处理所有类。

  4. 你说,“所以我保存了20个用于测试分类的功能”。如果你通过这样做获得了良好的表现,那么这既错又怪。如果您已经使用80个功能(或580)训练了分类器,那么您应该使用相同数量的功能进行测试。我不确定SVM如何不产生错误。权重向量为580-D,您测试的特征向量为20-D,显然w^T*x应该给出尺寸不匹配误差。

  5. 你应该做什么?

    1. 导出一个解释所有场景变化的功能。例如,如果您想要检测人类,则不希望将“颜色”包含为特征,因为每个人的衣服都是不同的颜色。所以这是一个糟糕的功能。您也无法连接所有操作的功能。我的意思是:你不能设计一个不同的特征提取方法来运行,装箱等。你怎么知道测试样本的类?你不会,因此你不能应用特定于动作的特征提取方法。例如,您无法检测描述腿部运动的提取特征以进行分类运行,并提取描述拳击手部动作的特征。那是错的。

    2. 在SVM分类器的情况下,训练和测试时的功能数量应相同。

    3. 您不能训练6种不同的分类器(在不同的火车组上),然后在测试期间只使用其中一种。例如,你不能训练分类器运行与拳击,然后使用它来分类运行。关于如何进行多类分类,有特定的协议。其中两个是“一对一”和“一对一”。读它们。如果您不想实现它们,可以使用libsvm包。

    4. 经验法则:无论何时开发特征提取方法,请考虑,如果只提供一个样本,则可以应用此方法。请记住,您不能使用训练集。假设它在您的计算机上不存在。