在线学习算法与传统的批量学习算法有着本质的区别。批量学习算法需要大量的训练数据来训练模型,然后使用找到的关系来预测测试样本。而在线学习算法则是从一个初始猜测模型开始,然后从训练数据中逐个挑选观测值,并在每个输入参数上重新校准权重。以下是使用这两种算法的一些权衡。
在线学习算法在计算上更快,空间效率更高。在在线模型中,只允许对数据进行一次传递,因此这些算法通常比批量学习的等价算法要快得多,因为大多数批量学习算法需要多次传递。由于不能重新考虑之前的例子,通常不会将它们存储起来以便以后在学习方法中访问,这意味着倾向于使用更小的内存占用。
在线学习算法通常更容易实现。由于在线模型对数据进行一次传递,最终会一次处理一个例子,按顺序从流中进来。这通常会简化算法,如果是从头开始做的。
在线学习算法在生产中维护起来更困难。部署在线算法通常需要有一个不断向算法传递数据点的东西。如果数据发生变化,特征选择器不再产生有用的输出,或者在特征选择器服务器之间有重大的网络延迟,或者其中一个服务器宕机,或者真的,任何其他事情,学习器就会崩溃,输出就会变得垃圾。确保这一切都运行正常可能是一个挑战。
在线学习算法更难以在线评估。在在线学习中,不能为评估保留一个“测试”集,因为不做出分布假设——如果选择了一个集合来评估,将假设测试集代表了正在操作的数据,这是一个分布假设。由于在最一般的情况下,没有办法获得一个代表数据的代表性集合,唯一的选择(再次,在最一般的情况下)就是简单地看看算法最近的表现如何。
在线学习算法通常更难“正确”地获得。正如在上一点看到的,在线评估学习器是困难的。出于类似的原因,让算法在自动基础上“正确”地表现是非常困难的。很难诊断是算法还是基础设施出了问题。
在处理大量数据的情况下,别无选择,只能使用在线学习算法。另一个选择是在更小的样本上进行批量学习。
让通过一个例子来理解这个概念。想要预测今天下雨的概率。有11个预测者组成的小组,他们预测不同的参数是下雨还是不下雨。需要设计一个算法来预测概率。让首先初始化一些表示。
i
是个体预测器,w(i)
是给第i
个预测器的权重。对于i
在[1,11]中的初始w(i)
都是1。将预测今天会下雨,如果,
Sum(w(i) for all rain prediction) > Sum(w(i) for all non-rain prediction)