《Python大规模机器学习》 —2.1.2一次优化一个实例
2.1.2一次优化一个实例
子采样虽然可行,但不是最佳解决方案,我们必须评估一个不同的方法,而非核心学习实际上不要求你放弃观察或特征,它只需多花一点时间训练模型,而这需要更多迭代和数据从存储器到计算机内存的更多传输。下面对非核心学习的工作过程做直观说明。
首先讨论学习,这是一个尝试建立未知函数用以表示对可用数据的响应(数字或结果,属于回归或分类问题)的过程。它通过拟合学习算法的内部系数,来实现对可用数据的最佳拟合,即最小化成本函数,而成本函数是能告诉我们近似函数的准确性的一种度量方法。归根结底,这是一个优化过程。不同的优化算法,就像梯度下降一样,是能够处理任何数据量的过程。其任务就是推导优化梯度(优化过程中的方向),并且让学习算法按照梯度调整其参数。
在具体的梯度下降情况中,经过一定次数的迭代后,如果问题能得到解决并且不存在诸如学习率过高之类的其他问题,那么梯度应该变得很小,这时可以停止优化过程。在此过程的最后,我们相信已找到最优解(因为它是全局最优解,尽管如果近似函数不是凸函数,有时它可能是局部极小值)。
由于梯度所决定的方向性可根据任意数量的示例得到,因此也可以在单个实例上得到。对单个实例进行梯度学习需要较小的学习率,但最终该过程能达到与对完整数据进行梯度下降所达到的相同的优化效果。最后,算法只需要有一个方向来正确指引学习过程,使其适应可用的数据。因此,从数据中随机抽取的单个实例来学习这样的方向是完全可行的:
能得到就像一次处理全部一样的结果,尽管优化路径会有点曲折。如果大多数观察结果都指向一个最佳方向,那该算法将采用这个方向。唯一的问题是需要调整学习过程的正确参数并多次传递数据,以确保优化完成,因为这个优化过程比使用所有可用数据要慢得多。
设法让单个实例保留在核心内存中而将大量数据留在其外时没有任何特殊问题。通过单个实例将数据从其存储库移动到核心内存中时可能会产生其他问题。可扩展性得到保证,因为处理数据所需的时间是线性的。无论我们必须处理的实例总数如何,使用更多实例的时间成本总是相同的。
在单个实例或可一次放入存储器的数据子集上拟合学习算法的方法称为在线学习,基于这种单次观测的梯度下降称为随机梯度下降。如前所述,在线学习是一种非核心技术,在Scikit-learn中被许多学习算法采用。
- 点赞
- 收藏
- 关注作者
评论(0)