我有一个流数据集,一次提供一个示例。我需要对它们进行多类分类。一旦我将一个训练示例输入到学习过程中,我就必须丢弃该示例。同时,我也在使用最新的模型对未标记的数据进行预测。
据我所知,神经网络能够通过一次输入一个示例并对示例执行前向传播和后向传播来进行流学习。
SVM 能否一次执行一个流学习示例并立即丢弃该示例?
我有一个流数据集,一次提供一个示例。我需要对它们进行多类分类。一旦我将一个训练示例输入到学习过程中,我就必须丢弃该示例。同时,我也在使用最新的模型对未标记的数据进行预测。
据我所知,神经网络能够通过一次输入一个示例并对示例执行前向传播和后向传播来进行流学习。
SVM 能否一次执行一个流学习示例并立即丢弃该示例?
机器学习中的流式设置称为“在线学习”。在线设置中没有精确的支持向量机(因为目标函数的定义本质上是针对批量设置的)。可能 SVM 对在线设置最直接的概括是被动攻击算法。代码在这里http://webee.technion.ac.il/people/koby/code-index.html和相关论文在这里http://eprints.pascal-network.org/archive/00002147/01/CrammerDeKeShSi06。 pdf
基本思想是接收数据为与查询点的对在哪里是标签的数量。该算法维护一个权重矩阵在迭代算法收到一个数据点然后给出预测分数对于每个标签,它将得分最高的标签预测为真实标签。如果预测是错误的,那么算法会做出最小的改变这样它将在将来避免该错误。这里根据 Frobenius 范数定义最小的变化。
我一直发现隐式更新框架(包括此处另一个答案中提到的被动攻击算法)不必要地比显式更新框架复杂(更不用说隐式更新可能比显式更新慢得多,除非隐式更新的封闭式解决方案可用)。
Online Importance Weight Aware Updates是最先进的显式更新算法的一个例子,它比隐式更新算法更简单、更快、更灵活(支持多个损失函数、多个惩罚、成本敏感学习等)。本文仅处理线性模型(线性支持向量机对应于具有二次惩罚的铰链损失函数的情况)
由于您需要多类分类,因此一种方法是使用vowpal wabbit的“减少”功能(建立在论文方法的顶部),不幸的是,该功能没有很好地记录。
LASVM是 SVM 最流行的在线学习变体之一。
线性 SVM 也可以使用随机梯度下降来训练,就像任何线性模型一样。
请参考论文SVM Incremental Learning, Adaptation, and Optimization,该论文提出了一种用于二进制分类的在线 SVM。
上述论文的代码可以在这里找到。代码中介绍了两种在线培训方式:
svmtrain()
,并且svmtrain2()
。回到您的问题,对于流式学习一次一个示例,答案显然是肯定的。并且该代码还可以处理取消学习(丢弃)示例,即精确和近似的留一法(LOO)误差估计 - 可以通过一次准确地取消学习一个示例并测试分类器来有效地计算精确的 LOO 误差估计这个例子。