1

我有一个应用程序可以决定一个人是在挥手、跑步还是走路。这个想法是我已经分割了一个动作,比如手波,到它的姿势。比方说

例子;

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不是真正的姿势。

你有什么想法 ?问候

4

2 回答 2

2

我不认为从你的第一种方法中获得更好的性能是不合理的。我假设您的意思是更好的性能,就像更好的分类一样。我认为这是因为挥手序列通常较短。因此,当您填写“无效”姿势时,您可以通过它们是否包含无效姿势而不是它们包含的实际姿势来更容易地区分不同的动作。

于 2010-01-12T12:21:01.287 回答
2

在您的情况下,您的数据由一组实例组成,每个实例具有许多特征(姿势槽,如 PoseSlot1、PoseSlot2、...、PoseSlotN)和类值(挥手、跑步或行走)。

您的问题是所有类别的特征数量都不相同,例如,跑步有 7 个姿势,而步行有 3 个姿势。

处理此类问题的标准方法是用缺失值标记这些空槽,假设您的机器学习算法可以处理缺失值。

f1     f2    f3    f4    f5    f6    f7    class
-------------------------------------------------
pose1,pose2,pose4,pose7,pose2,pose4,pose7,running
pose3,pose1,pose4,    ?,    ?,    ?,    ?,walking

现在,您使用的第一种附加方法pose0是对缺失值使用的简化?(类似于添加新姿势来表示缺失值,而不是显式?值)

重复值的另一种方式实际上会产生问题而不是解决问题。如果您考虑一下,实际上是在创建相关的特征,并且如您所知,大多数机器学习算法在一组独立的特征上效果最好(通常通过执行特征选择作为预处理步骤)

于 2010-01-12T22:40:59.043 回答