Aerosolve

一个为人类设计的机器学习包
4,707
作者Hector Yee

一个从零开始设计,以用户友好为理念的机器学习库。它与其他机器学习库的不同之处在于:

此库适用于稀疏、可解释的特征,例如搜索(搜索关键词、筛选条件)或定价(房间数量、位置、价格)中常见的特征。对于具有非常密集、人类难以解释的特征(例如原始像素或音频样本)的问题,其可解释性较差。

关注可解释性有几个原因:

  • 您的语料库是新的,尚未完全定义,您需要更多关于语料库的洞察。
  • 拥有可解释的模型可以让您快速迭代。找出模型最不一致的地方,并深入了解需要什么类型的新的特征。
  • 调试噪声特征。通过绘制特征权重,您可以发现有问题的特征,或将它们拟合到样条曲线,并发现意外复杂的特征(这通常表示过拟合)。
  • 您可以发现不同变量与目标预测之间的关系。例如,对于 Airbnb 需求模型,绘制评论和三星评论的图表 比许多嵌套的 if then else 规则更易于解释。

如何开始?

Aerosolve 的工件托管在 Bintray 上。如果您使用 Maven、SBT 或 Gradle,您可以将 Bintray 指向为存储库,并自动获取工件。

查看图像印象演示,了解如何教算法以点彩画风格作画。图像印象派演示。

还有一个基于流行机器学习基准的收入预测演示。收入预测演示。

特征表示

本节深入探讨了基于 Thrift 的特征表示。

特征被分组到称为特征族的逻辑组中。这样做的原因是为了能够一次性表达对整个特征族的转换,或者将两个不同的特征族交互在一起以创建一个新的特征族。

每个 FeatureVector 有三种类型的特征:

  • stringFeatures - 这是一个特征族到二进制特征字符串的映射。例如,“GEO” -> {“San Francisco”、“CA”、“USA”}
  • floatFeatures - 这是一个特征族到特征名称和值的映射。例如,“LOC” -> {“Latitude”: 37.75,“Longitude”: -122.43}
  • denseFeatures - 这是一个特征族到密集浮点数数组的映射。除了图像内容分析代码外,实际上并不常用。

示例表示

示例是创建训练数据和评分的基本单元。单个示例由以下部分组成:

  • context - 这是示例中只出现一次的 FeatureVector。例如,它可以是表示搜索会话的特征。例如,“Keyword” -> “Free parking”
  • example(0..N) - 这是一个重复的 FeatureVector 列表,表示正在评分的项目。这些可以对应于搜索会话中的文档。例如,“LISTING CITY” -> “San Francisco”

具有这种结构的原因是:

  • 对数百个项目使用一个上下文可以在 RPC 或磁盘上节省大量空间。
  • 您可以一次计算上下文的转换,然后将转换后的上下文与每个项目重复应用。
  • 具有项目列表允许使用基于列表的损失函数,例如成对排序损失、支配损失等,我们可以在其中一次评估多个项目。

特征转换语言

本节深入探讨了特征转换语言

特征转换通过一个独立的转换器模块应用,该模块与模型解耦。这允许用户分解转换或提前转换数据以进行评分,例如,在一个应用程序中,语料库中的项目可以提前转换并存储,而上下文直到运行时才知道。然后在运行时,可以转换上下文并将它们与每个转换后的项目组合起来,以获得最终的特征向量,然后将其馈送到模型。

特征转换允许我们动态修改 FeatureVector。这允许工程师快速、可控地快速迭代特征工程。

以下是一些常用特征转换的示例:

  • 列表转换。一个元转换,指定要应用的其他转换。
  • 交叉转换。仅对 stringFeatures 进行操作。允许两个不同的字符串特征族之间进行交互。例如,“Keyword”交叉“LISTING CITY”创建新的特征族“Keyword_x_city” -> “Free parking^San Francisco”
  • 多尺度网格转换 为二维坐标构建多个嵌套网格。对于地理建模很有用。

请参见相应的单元测试,了解这些转换的作用、它们操作的特征类型以及它们期望的配置类型。

模型

本节介绍可调试模型

尽管模型目录中有多个模型,但只有两个是主要的、可调试的模型。其余的是实验性的或子模型,它们为可解释模型创建转换。

线性模型。 支持铰链、逻辑、ε-不敏感回归、排序损失函数。仅对 stringFeatures 进行操作。任务的标签存储在一个特殊的特征族中,并由配置中的 rank_key 指定。请参见线性模型单元测试,了解如何设置模型。请注意,结合量化和交叉,您可以从“线性”模型中获得令人难以置信的复杂性,因此它实际上并不是普通的线性模型,而是更复杂的东西,可以认为是一棵具有数百万个分支的茂密、非常宽的决策树。

样条模型。 一个通用的加性线性分段样条模型。训练是在特征范围的最小值和最大值之间由 num_buckets 指定的更高分辨率下完成的。在每次迭代结束时,我们尝试将分段线性样条投影到低维函数(例如具有狄拉克 delta 端点的多项式样条)中。如果投影的 RMSE 高于阈值,我们将样条保留在高分辨率分段线性模式下。这允许我们调试有问题的或意外复杂的特征的样条模型(例如,当我们期望某种平滑度时,它会上下跳动)。

  • 提升树桩模型 - 小型紧凑型模型。可解释性不强,但在小型情况下可用于特征选择。
  • 决策树模型 - 仅内存中。主要用于为线性模型或样条模型生成转换。
  • Maxout 神经网络模型。实验性的,主要用作比较基线。

支持

用户组:https://groups.google.com/forum/#!forum/aerosolve-users