一个从零开始设计,以用户友好为理念的机器学习库。它与其他机器学习库的不同之处在于:
此库适用于稀疏、可解释的特征,例如搜索(搜索关键词、筛选条件)或定价(房间数量、位置、价格)中常见的特征。对于具有非常密集、人类难以解释的特征(例如原始像素或音频样本)的问题,其可解释性较差。
关注可解释性有几个原因:
Aerosolve 的工件托管在 Bintray 上。如果您使用 Maven、SBT 或 Gradle,您可以将 Bintray 指向为存储库,并自动获取工件。
查看图像印象演示,了解如何教算法以点彩画风格作画。图像印象派演示。
还有一个基于流行机器学习基准的收入预测演示。收入预测演示。
本节深入探讨了基于 Thrift 的特征表示。
特征被分组到称为特征族的逻辑组中。这样做的原因是为了能够一次性表达对整个特征族的转换,或者将两个不同的特征族交互在一起以创建一个新的特征族。
每个 FeatureVector 有三种类型的特征:
示例是创建训练数据和评分的基本单元。单个示例由以下部分组成:
具有这种结构的原因是:
本节深入探讨了特征转换语言
特征转换通过一个独立的转换器模块应用,该模块与模型解耦。这允许用户分解转换或提前转换数据以进行评分,例如,在一个应用程序中,语料库中的项目可以提前转换并存储,而上下文直到运行时才知道。然后在运行时,可以转换上下文并将它们与每个转换后的项目组合起来,以获得最终的特征向量,然后将其馈送到模型。
特征转换允许我们动态修改 FeatureVector。这允许工程师快速、可控地快速迭代特征工程。
以下是一些常用特征转换的示例:
请参见相应的单元测试,了解这些转换的作用、它们操作的特征类型以及它们期望的配置类型。
本节介绍可调试模型
尽管模型目录中有多个模型,但只有两个是主要的、可调试的模型。其余的是实验性的或子模型,它们为可解释模型创建转换。
线性模型。 支持铰链、逻辑、ε-不敏感回归、排序损失函数。仅对 stringFeatures 进行操作。任务的标签存储在一个特殊的特征族中,并由配置中的 rank_key 指定。请参见线性模型单元测试,了解如何设置模型。请注意,结合量化和交叉,您可以从“线性”模型中获得令人难以置信的复杂性,因此它实际上并不是普通的线性模型,而是更复杂的东西,可以认为是一棵具有数百万个分支的茂密、非常宽的决策树。
样条模型。 一个通用的加性线性分段样条模型。训练是在特征范围的最小值和最大值之间由 num_buckets 指定的更高分辨率下完成的。在每次迭代结束时,我们尝试将分段线性样条投影到低维函数(例如具有狄拉克 delta 端点的多项式样条)中。如果投影的 RMSE 高于阈值,我们将样条保留在高分辨率分段线性模式下。这允许我们调试有问题的或意外复杂的特征的样条模型(例如,当我们期望某种平滑度时,它会上下跳动)。