Matlab 数据分类:训练和测试向量的大小

Matlab 数据分类:训练和测试向量的大小,matlab,machine-learning,neural-network,svm,Matlab,Machine Learning,Neural Network,Svm,我有一个应用程序,它决定一个人是在用手、跑步还是走路。 我的想法是,我将一个动作,比如说handwave,分割成它的姿势。比方说 榜样 for human1:pose7-pose3-pose7-..... represents handwave for human3:pose1-pose7-pose1-..... represents handwave for human7:pose1-pose1-pose7-..... represents handwave for human20:pose3

我有一个应用程序,它决定一个人是在用手、跑步还是走路。 我的想法是,我将一个动作,比如说handwave,分割成它的姿势。比方说

榜样

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中测试集和训练集的向量大小;支持向量机和神经网络需要相同的向量大小。 让它发挥作用
如果我附加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
不是真正的姿势

你有什么想法吗?
关于

我不认为通过第一种方法获得更好的性能是不合理的。我想你的意思是在更好的分类中表现更好。我想这可能是因为手动序列通常较短。因此,当你使用“无效”姿势时,你可以通过是否包含无效姿势来区分不同的动作,而不是通过实际的姿势来区分不同的动作。

我不认为通过第一种方法获得更好的性能是不合理的。我想你的意思是在更好的分类中表现更好。我想这可能是因为手动序列通常较短。因此,当你用“无效”姿势填充时,你可以通过是否包含无效姿势来区分不同的动作,而不是通过它们包含的实际姿势来区分不同的动作。

在你的例子中,你的数据由一组实例组成,每个实例都有一些特征(姿势槽,如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
的第一种方法是简化为使用
表示缺少的值(类似于添加新姿势来表示缺少的值,而不是显式的
值)


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

在您的情况下,您的数据由一组实例组成,每个实例都有许多特征(姿势槽,如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
的第一种方法是简化为使用
表示缺少的值(类似于添加新姿势来表示缺少的值,而不是显式的
值)


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

无论如何,对于这类东西,我只是一个业余爱好者,但这样填充数据向量似乎有点奇怪。我会确保填充在理论上是合理的,或者改变方法。对于这种时间分类,我的第一个想法是使用马尔可夫模型。无论如何,我只是一个业余爱好者谈到这类东西,但像这样填充数据向量似乎有点奇怪。我会确保填充在理论上是合理的,或者是改变方法。对于时间分类,我的第一个想法是使用马尔可夫模型。您好,您是对的“更好的性能意味着更好的分类”当填充特定动作类型的自然姿势时,我希望有更好的性能。但是填充无效姿势会带来更好的性能。对我来说仍然很奇怪。您好,您是对的“更好的性能意味着更好的分类”当填充特定动作类型的自然姿势时,我希望有更好的性能。但是填充无效姿势会有更好的性能。对我来说仍然很奇怪。谢谢。现在还有一个问题。你如何解释一些分类方法,如SVM和NN,要求训练数据和测试数据应该具有相同的vector大小(至少在Matlab中)?在机器学习的假设下,这样一个预请求的存在是没有意义的。在现实世界的应用程序中,我可以有几个不同长度的数据,除非你处理的是时间序列,否则大多数ML技术都需要一种属性值类型的数据。我能想到的每一种算法(ANN、kNN、SVM、贝叶斯网、决策树、规则归纳、回归等)都有类似表格形式的数据。这是有意义的,因为每个实例代表一个d维采样变量(如果你从统计角度考虑)。也许你会