我有一个应用程序,它决定一个人是在做手,跑步还是走路。 我的想法是将动作(例如手动波)分割成姿势。我们说
实施例
for human1:pose7-pose3-pose7-..... represents handwave
for human3:pose1-pose7-pose1-..... represents handwave
for human7:pose1-pose1-pose7-..... represents handwave
for human20:pose3-pose7-pose7-..... represents handwave
for human1 pose11-pose33-pose77-..... represents walking
for human2 pose31-pose33-pose77-..... represents walking
for human3 pose11-pose77-pose77-..... represents walking
for human20 pose11-pose33-pose11-..... represents walking
我使用上面的向量在Matlab中训练SVM和神经网络。
现在我用它测试测试图像。我再次为测试图像分割了姿势。
对于MATLAB中测试和训练集的矢量大小; SVM和神经网络需要相同的矢量大小。
使它工作;
如果我追加0(假设它像pose0
- 这是一个无效的姿势),为了使尺寸相等,我的表现非常好。
如果我在开始时复制初始姿势并将它们追加到最后,直到尺寸相等,性能会降低。
例如;
train set: pose1-pose2-pose4-pose7-pose2-pose4-pose7
(1st method)test set: pose3-pose1-pose4-0-0-0-0 or
(2nd method)test set: pose3-pose1-pose4-pose3-pose1-pose4-pose3
我希望通过第二种方法获得更好的分类,因为附加值是姿势的实际值。但是pose0
并不是真正的姿势。
你有什么想法吗? 此致
答案 0 :(得分:2)
我不认为从你的第一种方法中获得更好的表现是不合理的。我认为你的意思是更好的分类表现。我推测的原因是手动序列通常较短。因此,当您填写“无效”姿势时,您可以通过它们是否包含无效姿势而不是它们包含的实际姿势来更容易区分不同的动作。
答案 1 :(得分:2)
在您的情况下,您的数据由一组实例组成,每个实例都具有许多功能(姿势槽,如PoseSlot1,PoseSlot2,...,PoseSlotN)和类值(挥手,跑步或行走) )。
你的问题是所有类的功能数量并不相同,例如,跑步时有3个姿势,而步行则有3个姿势。
处理此类问题的标准方法是使用缺失值标记这些空插槽,假设您的机器学习算法可以处理缺失值。
f1 f2 f3 f4 f5 f6 f7 class
-------------------------------------------------
pose1,pose2,pose4,pose7,pose2,pose4,pose7,running
pose3,pose1,pose4, ?, ?, ?, ?,walking
现在,您添加pose0
时使用的第一种方法是使用?
进行缺失值的简化(类似于添加新姿势来表示缺失值,而不是显式{{1} ())
重复值的另一种方式实际上会产生一个问题,而不是解决问题,如果你考虑它...你实际上创建相关的功能,并且如你所知,大多数机器学习算法在一组独立的功能上效果最好(通常通过执行特征选择作为预处理步骤来解决