我正在进行一个项目,需要实现SVM机器学习算法。我试图预测前臂运动意图。我使用加速度计(附着在我的前臂上)来测量x、y、z轴的角度变化。我之前从未使用过机器学习。我遇到的问题是我不知道如何构建训练集。我知道每个轴的角度变化,并且知道例如当x=45
度,y=65
度,z=30
度时,我执行的动作是屈曲。我希望实现三种手势。所以我拥有的是以下数据:
x y z Target
20 60 90 flexion
100 63 23 internal rotation
89 23 74 twist
….
我有一个包含大约2000条记录的文件。我知道,我需要对训练集进行归一化处理,使数据按比例缩放。我希望将其缩放到[0.9, 0.1]
范围内。问题是我不知道如何在我的训练集中表示目标。我可以简单地使用随机数字吗?比如用1表示屈曲,2表示内旋,3表示扭转?
此外,一旦训练完成,我可以仅基于x、y、z的值进行预测吗?无需提供目标值。我的理解正确吗?
回答:
首先,我建议你不要对数据进行缩放或编码。保持数据为人类可读的形式。相反,编写前端程序来执行这些任务,并编写后端程序来逆转这个过程。同时,还应该有内部程序可以以内部形式显示数据。提前做好这些工作将大大增强你后续的调试过程。
是的,你可能会想要将你的分类编码为1、2、3。另一种可能性是使用“单热”有序三元组:(1,0,0)或(0,1,0)或(0,0,1)。然而,大多数SVM算法是为标量输出设计的。此外,请注意,对于多类别算法的典型处理方式是运行三次独立的SVM计算,即“一对多”。对于每个类别,你将该类别作为“正”数据,其余所有类别作为“负”数据。
数据缩放对于回归收敛很重要。如果你是通过完全和直接计算支持向量来构建SVM的,你不需要缩放这些处于兼容范围内的数字。如果你是通过某种迭代近似方法来做的,对于这些数据你仍然不需要缩放——但请记住将来可能会需要。
是的,预测只需要输入:x、y、z。它将返回目标分类。这就是监督学习的目的:总结经验以对未来进行分类。