如果使用核数据训练一个支持向量机模型,所得的训练模型中包含支持向量。现在考虑使用现有的旧数据加上少量新数据来训练一个新模型的情况。因此:
- 是否应该将新数据与之前模型中的支持向量结合起来,形成新的训练集?(如果是,那么如何将支持向量与新的图数据结合?我正在使用
libsvm
)
或者:
- 是否应该将新数据和全部旧数据结合起来形成新的训练集,而不仅仅是支持向量?
哪种方法在重新训练时更好,更可行,并且在准确性和内存使用方面更有效?
回答:
你必须始终考虑整个新拼接的训练集进行重新训练。
旧模型中的支持向量在某些新点更靠近决策边界的情况下可能不再是支持向量。支持向量机背后是一个需要解决的优化问题,请记住这一点。给定一个训练集,你会找到该训练集的最优解(即支持向量)。一旦数据集发生变化,这样的解可能不再是最优的。
SVM的训练不过是最大化问题,其中几何和功能边距是目标函数。这就像最大化给定函数f(x)…但随后你改变了f(x):通过从训练集中添加/删除点,你对决策边界的理解会更好或更差,因为这样的决策边界是通过采样得知的,而这些样本确实是来自你的训练集的模式。
我理解你对时间和内存效率的担忧,但这是一个常见的问题:确实,对于所谓的大数据训练SVM仍然是一个开放的研究课题(关于反向传播训练有一些提示),因为这样的优化问题(以及关于哪些拉格朗日乘数应该成对优化的启发式方法)不容易在多个工作者上并行/分布处理。
LibSVM使用众所周知的顺序最小优化算法来训练SVM:这里你可以找到约翰·普拉特关于SMO算法的文章,如果你需要关于SVM背后优化问题的更多信息。