《Python大规模机器学习》 —2.4.5使用SGD
2.4.5使用SGD
作为本章结论,我们将实现两个示例:一个为基于森林覆盖数据的分类,另一个为基于共享单车数据集的回归。我们将看到如何将先前关于响应和特征分布的见解付诸实践,以及如何针对每个问题使用最佳的验证策略。
从分类问题入手,有两个值得注意的方面需要考虑。作为一个多类问题,首先我们注意到数据库存在某种排序,并且类沿着实例流分布。作为第一步,我们将使用在2.2.5节中定义的ram_shuffle函数来重新排列数据:
由于在没有太多磁盘使用量的情况下将数据行压缩到内存中并对其打乱,因此能快速获得新的工作文件。以下代码将以逻辑损失(等效于逻辑回归)训练SGDClassifier,以便其利用我们在之前对数据集中存在类的知识。forest_type列表包含类的所有代码,并且每次(尽管只有一个或第一个就足够了)将其传递给SGD学习器的partial_fit方法。
为了进行验证,我们定义了一个基于200 000个观察实例的冷启动。每十个中就有一个不被训练而用于验证。即使我们要多次传递数据,此模式也允许重现性;每次传递时,相同实例排除在样本外,以便测试并允许创建验证曲线。这样能验证多次测试对相同数据的影响。
保持模式也伴随着一个渐进式验证,因此冷启动后的每个病例在训练前都要进行评估。尽管渐进式验证能提供感兴趣的反馈,但这种方法仅适用于第一次通过;实际上,初始传递后,所有观察(但在保持模式中的观察)都将成为样本实例。本示例中只进行一次传递。
作为提醒,数据集有581 012个实例,使用SGD进行流处理和建模可能时间有点长(对于单台计算机来说这是一个相当大的问题)。虽然我们设置了限制器来观察250 000个实例,但你的计算机将运行大约15~20分钟才能获得结果:
在第二个示例中,我们将根据一系列天气和时间信息来预测华盛顿的共享自行车数量。考虑到数据集的历史顺序,我们不对其打乱,而是把这个问题当作一个时间序列来处理。我们的验证策略是在已经看到一定数量的示例后测试结果,以便从那个时刻向前复制要预测的不确定性。
有趣的是,有些特征已分类,因此我们使用Scikit-learn中的FeatureHasher类来表示拥有字典中记录的类别,作为由变量名和类别代码组成的联合字符串。字典中为每个这样的键的分配的值都呈唯一的,以便类似于哈希技巧这类方法将创建的稀疏向量中的二进制变量:
- 点赞
- 收藏
- 关注作者
评论(0)