8月,我举行了改善Ruby的机器学习生态系统,不确定它会去哪里。在接下来的5个月内,我最终释放了16个图书馆,并在路上汲取了很多东西。我想分享一些知识并介绍一些您现在可以在Ruby中使用的库。
有许多很多机器图书馆为Python,所以一个自然的地方开始就是看看它将它们带到红宝石上。它证明了比共同主题的预期更少。
ml图书馆想要快速。这意味着更少等待时间迭代时间。但是,Python和Ruby这样的解释语言并不相对较快。图书馆如何克服这个?
关键是他们在编译的语言中完成了大部分工作 - 通常是C ++ - 并且为Python等其他语言编写包装。
这真是很棒的消息。相同的方法和代码可以用于Ruby。
本机扩展是一种方法。它们是用C或C ++写的,并使用Ruby的C API。您可能已经注意到使用的本机扩展,需要更长时间安装,因为它们需要编译。
一种语言拨打另一语言的更通用方式是外函数界面或FFI。它需要一个C API(由于C ++名称Mangling),许多机器学习库有。 FFI的一个优点是您可以在我们的案例中定义主机语言中的界面 - Ruby。
Ruby用小提琴支持FFI。它被添加在Ruby 1.9中,但似乎是“Ruby标准图书馆最好的秘密”。
还有FFI宝石,提供更高级别的功能,克服了小提琴的一些限制(如通过价值传递结构的能力)。
对于没有C API的库,米为绑定C ++代码提供了一个非常好的方法(类似于Python的PyBind11)。
另一种方法是SWIG(简化包装器和接口发生器)。您创建一个接口文件,然后运行swig以生成绑定。 Gusto有一个很好的教程。
还有Rubex,它允许您编写类似于C(类似于Python的Cython)的标记代码。它还提供了与C库接口的能力。
上述方法都没有特定于机器学习,因此您可以使用任何C或C ++库使用它们。
基于人气和性能选择了图书馆。许多人对他们的Python对应物具有类似的界面,以便易于遵循现有的教程。图书馆用简短的描述分解为下面的类别。
XGBoost和LightGBM是渐变提升库。梯度升压是一种强大的技术,用于构建适合许多小决策树的预测模型,即使具有异常值和缺失的值,也能够制作强大的预测。渐变升压在表格数据上执行良好。
torch.rb和tensorflow是深度学习图书馆。 torch.rb是基于libtorch的,该库是为Pytorch提供权的库。在图像识别和自然语言处理等地区,深度学习非常成功。
迪斯科是一个推荐库。它从用户看出评级或行动,以预测他们喜欢的其他物品,称为协作过滤。矩阵分解是实现这一目标的常用方法。
协作过滤还可以找到类似的用户和项目。如果您有大量用户或项目,则近似最近的邻算法可以加快搜索。 Spotify为音乐推荐做到这一点。
NGT是一个近似的最近邻接库,在基准测试(Python / C ++中)执行非常好。
另一种建议的有希望的技术是分解机。协同过滤的传统方法专门从过去的评级或行动中建立了模型。但是,您可能有关于用户或项目的其他一方信息。因子化机器可以包含此数据。它们还可以执行分类和回归。
优化在许多可能的解决方案中找到了问题的最佳解决方案。调度和车辆路由是两个常见任务。优化问题具有目标函数,可最大限度地减少(或最大化)和一组约束。
线性编程是一种方法,即在客观函数和约束是线性时可以使用的方法。如果您想了解更多,这是一个非常好的介绍系列。
FastText是文本分类和Word表示库。它可以使用一个或多个类别标记文档,这对于内容标记,垃圾邮件过滤和语言检测非常有用。它还可以计算字向量,可以比较,以找到类似的单词和类比。
ONNX运行时是ML模型的评分引擎。您可以用一种语言构建模型,以ONNX格式保存,并将其运行在另一个语言中。这是一个例子。
NPY是一个用于保存和加载NUMPY NPY和NPZ文件的库。它使用Numo用于多维数组。
voWpal Wabbit专注于在线学习。对于强化学习以及监督学习非常重要,在那里您想要逐步训练模型而不是立即培训模型。当你有很多数据时,这很好。
GSLR是由GSL提供支持的线性回归库,其支持普通的最小二乘和RIDGE回归。它可以单独使用或改善EPS的性能。
我想在2019年进入现场的另一个图书馆给予喊声。
Rumale是一台机器学习库,支持许多许多算法,类似于Python的氏锡学习。 谢谢@Yoshoku的令人惊叹的工作! 现在有许多最先进的机器学习库可用于Ruby。 如果你是一个对机器学习感兴趣的Ruby工程,现在是尝试它的好时机。 此外,如果您遇到了您想要在Ruby中使用的C或C ++库,则您可以看到几种方法可以做到这一点。 让Ruby成为机器学习的伟大语言。