页面树结构

2017-11-09 ApacheCN 开源组织,第二期邀请成员活动,一起走的更远 : http://www.apachecn.org/member/209.html


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

对于某些应用程序,传统方法的示例,功能(或两者)的数量和/或其需要处理的速度是有挑战性的。在这些情况下,scikit-learn有许多选项,您可以考虑使系统规模化。

使用外核学习扩展实例

核心(或“外部存储器”)学习是用于从不能适合计算机主存储器(RAM)的数据中学习的技术。

这是为实现这一目标设计的系统的草图:

  1. 一种流式传输方式
  2. 一种从实例中提取特征的方法
  3. 增量算法

流实例

基本上,1.可能是从硬盘驱动器,数据库,网络流等文件中产生实例的读者。然而,如何实现这一点的细节超出了本文档的范围。

提取功能

2.可以通过scikit学习支持的不同特征提取方法中提取特征的任何相关方法。然而,当处理需要向量化的数据以及特征或值集合在哪里未预先知道的时候,应该明确地注意。一个很好的例子是文本分类,其中在培训期间可能会发现未知的术语。从应用的角度来看,如果在数据上进行多次通过是合理的,则可以使用有状态的向量化器。否则,可以通过使用无状态特征提取器来提高难度。目前,这样做的首选方法是使用所谓的哈希技巧,由sklearn.feature_extraction.FeatureHasher数据集实现, 其中分类变量表示为Python dict列表或 sklearn.feature_extraction.text.HashingVectorizer文本文档。

增量学习

最后,为3.我们在scikit学习中有很多选择。虽然所有的算法都不能逐步学习(即不一次看到所有的实例),但所有实现partial_fitAPI的估计都是候选的。实际上,从小批量的实例(有时称为“在线学习”)逐渐学习的能力是核心学习的关键,因为它保证在任何给定的时间内只有少量的实例主记忆 选择适合小批量的尺寸来平衡相关性和内存占用可能涉及一些调整[1]

以下是不同任务的增量估算器列表:

 

对于分类,有一点要注意的是,虽然无状态特征提取程序可能能够应对新的/不可见的属性,但增量学习者本身可能无法应对新的/不可见的目标类。在这种情况下,您必须partial_fit使用classes=参数将所有可能的类传递给第一个调用。

选择合适的算法时要考虑的另一个方面是,所有这些算法在每个示例中都不会对时间保持一致。也就是说, Perceptron仍然是敏感的,即使经过多次的例子要差些标识样本,而SGD*PassiveAggressive*家庭更加坚固这类文物。相反,随着时间的推移,随着学习速度的降低,他们迟来的时间也越来越少,这个时候也越来越不重要。

 

示例

最后,我们有一个完整的文本文档的核心分类示例 。旨在为想要构建核心学习系统的人们提供一个起点,并展示上述大多数概念。

此外,它还显示了不同算法的性能随着处理例子的数量的演变。

现在看不同部分的计算时间,我们看到矢量化比学习本身要贵得多。从不同的算法,MultinomialNB是最昂贵的,但通过增加小批量的大小可以减轻其开销(练习:minibatch_size在程序中更改 为100和10000,并进行比较)。

 

注释

[1] 根据算法,迷你批量大小可以影响结果。SGD *,PassiveAggressive *和离散的NaiveBayes是真正在线的,不受批量大小的影响。相反,MiniBatchKMeans收敛速度受批量影响。此外,其内存占用可能会随批量大小而显着变化。

 

 

  • 无标签