跳到内容

apricot实现了子模块优化,以选择海量数据集的子集来快速训练机器学习模型。请参阅文档页面:https://apricot-select.readthedocs.io/en/latest/index.html

许可证

通知 您必须登录才能更改通知设置

jmschrei/杏子

下载建造 文档状态

请考虑引用手稿如果你在学习中使用杏子!

您可以找到更详细的文档在这里.

apricot实现了子模块优化,目的是将大量数据集汇总为仍然代表原始数据的最小冗余子集。这些子集对于可视化数据中的模式(如以下两个数据集中的模式)以及使用少量示例和计算训练准确的机器学习模型都很有用。

子模块优化是一个研究得很好的领域,它关注具有收益递减属性。这些集合函数具有递减返回特性,因此将一个项目添加到集合中所产生的边际收益小于将同一项目添加到该集合的超集中所产生的边际收益。更正式地说,对于,属性为当这些函数表示多样性的概念时,找到最大化这些函数的示例子集相当于找到最小冗余集。

杏中有许多内置的子模块函数和优化器。其中包括:

功能

优化器

安装

可以从PyPI轻松安装杏pip安装apricot-select

用法

杏中的主要对象是选择器。每个选择器封装一个子模块函数和缓存的统计信息,以加快优化过程。选择器的API遵循scikit-learn转换器的风格,由适合方法,其中选择了示例转型方法,其中子集是从数据集中选择的,以及fit_transform(适合转换)方法,其中二者都是按顺序完成的。

下面是一个示例,使用使用负欧几里德距离作为相似性度量的设施位置函数,将大小为5000的数据集减少到100个示例。

进口 numpy公司
 杏子 进口 设施位置选择

X(X) = numpy公司.随机的,随机的.正常的(100,1,大小=(5000,25))X_子集 = 设施位置选择(100,米制的=“欧几里德式”,优化器=“懒惰”).fit_transform(适合转换)(X(X))

设施位置功能是通用的

设施位置函数比基于特征的函数更通用,只要可以在成对的示例上定义相似性度量,它就会起作用。当这些函数最大化时,将选择表示当前代表性不足的元素的元素。然而,与基于特征的函数相比,设施位置函数(以及依赖于相似矩阵的所有其他子模块函数)的一个缺点是,完整的相似矩阵需要具有示例数量的二次内存,并且通常无法存储。

以下是将设施位置选择应用于MNIST数据集的示例。

 杏子 进口 设施位置选择
 sklearn公司.数据集 进口 加载位数(_D)

数据 = 加载位数(_D)()X_火车 = 数据.数据[:1250]选择器 = 设施位置选择(n个样本,米制的=“欧几里德式”,优化器=“懒惰”,冗长的=False(错误))选择器.适合(X_火车)

这是在MNIST或Fashion MNIST数据集子集上训练的逻辑回归模型的性能,其中子集是使用设施位置(橙色)或随机选择(灰色)进行选择的。

从设施位置选择中选择的示例可用于除训练机器学习模型以外的多种方式,例如用于可视化数据模式(参见开头的示例)或作为贪婪版本的k-means聚类的质心。下面的动画显示了根据设施位置选择的样本,并将其与随机选择进行了比较,设施位置首先选择一个代表整个数据集的样本,然后选择一个位于最大集群中但接近第二大集群的样本,再选择本地社区的中心。这种选择过程比使用基于EM的K-means或GMM方法查找质心快得多。

基于特征的函数缩放以汇总大量数据集

当特征对应于某种数量或重要性的概念时,基于特征的功能很好地工作,例如当特征是一个单词在文档中出现的次数,或者是传感器信号的强度时。当这些功能被最大化时,产生的子集由在不同功能集中丰富价值的示例组成。使用基于特征的函数背后的直觉是,数据中的不同模式(如类或簇)将在不同的特征集中显示出较高的值,因此选择针对不同特征的丰富示例意味着更好地涵盖这些模式。

在20个新闻组数据集上使用基于特征的函数时,可以仅使用100个样本训练逻辑回归模型,并获得与使用所有1187个潜在样本相同的性能,这比使用随机抽样要好得多。下面的代码显示了代码使用的示例片段,该图显示了多个子集大小的结果。

 杏子 进口 基于功能的选择
 sklearn公司.数据集 进口 fetch_20新闻组
 sklearn公司.特征提取.文本 进口 Tfidf矢量器

列车数据 = fetch_20新闻组(子集=“火车”,类别=(“科学医学”,'科学空间'))矢量器 = Tfidf矢量器(停止字(_W)=“英语”,最大特性(_F)=1000)X_火车 = 矢量器.fit_transform(适合转换)(列车数据.数据)#这将返回apricot中支持的稀疏矩阵

选择器 = 基于功能的选择(100,凹面(_func)=“sqrt”,优化器=“两阶段”,冗长的=False(错误))选择器.适合(X_火车)

初始子集

大多数在杏子中实现的优化器的选择过程都是贪婪的,这意味着一次选择一个示例,这(通常)是下一个包含已选择的示例的最佳示例。虽然贪婪算法不能保证找到给定大小的最佳子集,但众所周知,该子集不能有目标值$1-e^{-1}$比最优子集差,并且在实践中,子集通常接近最优。

apricot利用算法的贪婪特性,允许用户定义要构建的初始子集。当您已经选择了一些元素(例如外部信息),并且希望选择与这些已选择的元素不冗余的元素时,这将非常有用。初始子集可以在构造函数中定义,如下所示:

进口 numpy公司
 杏子 进口 设施位置选择

X(X) = numpy公司.随机的,随机的.正常的(20,1,大小=(5000,25))X已订购 = 设施位置选择(100,首字母_子集=[1,5,6,8,10]).fit_transform(适合转换)(X(X))模型 = 设施位置选择(1000).适合(X(X))X已订购2 = X(X)[模型.排名]

何时应使用子模块选择?

如果您现在拥有的数据量不太繁重,那么使用子模块选择可能没有帮助。然而,如果使用现有的数据量训练甚至简单的模型都很困难,那么可以考虑使用杏子来总结数据集。如果由于数据量的原因,您当前正在运行许多随机选择,那么您可能会发现单次运行杏子会产生更好的子集。

关于

apricot实现了子模块优化,以选择海量数据集的子集来快速训练机器学习模型。请参阅文档页面:https://apricot-select.readthedocs.io/en/latest/index.html

话题

资源

许可证

星星

观察者

叉子

包装

未发布包

贡献者4

  •  
  •  
  •  
  •