【问题标题】:SVM machine learning - How to define the target in the training set?SVM 机器学习 - 如何在训练集中定义目标?
【发布时间】:2016-02-16 09:47:41
【问题描述】:

我正在做一个项目,我必须实现 SVM 机器学习算法。我试图预测前臂运动的意图。我正在使用加速度计(附在我的前臂上)来测量 x、y、z 轴的角度变化。我以前从未使用过机器。我遇到的问题是我不完全知道如何构建训练集。我知道每个轴的角度变化,并且我知道我执行的 x=45 度、y = 65 度、z=30 度手势是弯曲的。我想实现 3 个手势。所以我拥有的数据是:

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 的值进行预测吗?无需提供目标值。我的理解对吗?

【问题讨论】:

  • 一定要用SVM吗?
  • 您可能在交叉验证社区中对这个问题有更好的运气。
  • 有人建议我使用 SVM... 什么是交叉验证社区???

标签: machine-learning svm training-data


【解决方案1】:

首先,我建议您不要缩放或编码您的数据。将其保留为人类可读的形式。相反,编写前端例程来执行这些任务,并编写后端例程来逆转这个过程。还有可以在内部表单中显示数据的内部例程。预先做这些将极大地增强您以后的调试。

是的,您可能希望将分类编码为 1、2、3。另一种可能性是使用“单热”有序三元组:(1,0,0) 或 (0,1,0) 或(0,0,1)。然而,大多数 SVM 算法都是为标量输出而设置的。另外,请注意,多类算法的典型处理是运行三个单独的 SVM 计算,“一对一”。对于每个类,您将该类作为“加”数据,将所有其他类作为“减”数据。

缩放数据对于回归收敛很重要。如果您通过支持向量的完整和直接计算来构建您的 SVM,则不需要缩放兼容范围内的数字,例如这些。如果您通过某种迭代近似来执行此操作,您仍然不需要它来处理这些数据 - 但请记住它以备将来使用。

是的,预测只给出输入:x、y、z。它将返回目标分类。这就是监督学习的目的:总结经验对未来进行分类。

【讨论】:

  • 缩放数据对于 SVM 也很重要,因为这不是仿射变换不变方法。结果不同的尺度意味着不同的结果,这与求解器无关,而是 SVM 成本本身。此外,任何类转换都没有任何意义——既不需要编码为 1、2、3 或 one-hot,因为 SVM 是二进制模型,它不会关心你如何称呼你的标签。
  • 感谢您的更新。我使用的一些算法坚持将标签编码为整数。如果该限制不在 OP 的算法中,那么人工编码它们肯定没有意义。
  • 当然,许多事情可能是特定于实现的,对于 SVM 而言,任何 特定 编码都没有意义,尽管特定库需要编码。
  • 非常感谢您的回答。非常有帮助.. 但我没有得到这部分:另外,请注意,多类算法的典型处理是运行三个单独的 SVM 计算,“一对一”。对于每个类,您将该类作为“加”数据,将所有其他类作为“减”数据。对不起,我就是听不懂
  • 研究“SVM”+“one vs all”。有很多热门歌曲。简而言之,您为每个类训练一次:将该类重新编码为“1”,将其他类重新编码为“0”,然后训练 SVM 模型。当你完成了所有三个班级的考试后,你就可以解决你找到的模型之间的重叠或差距(通常是通过一个“最接近”的分数,有时会根据班级规模加权)。
猜你喜欢
  • 2017-06-25
  • 2020-05-06
  • 2011-02-15
  • 2021-10-03
  • 1970-01-01
  • 2013-08-27
  • 2021-08-23
  • 2017-04-06
  • 2017-11-12
相关资源
最近更新 更多