现代分类工作流程通常需要将单个记录和数据点分类为多个类别,而不仅仅是分配单个标签。
借助 scikit-learn 等开源 Python 库,可以更轻松地针对这些多标签问题构建模型。多个模型内置了对多标签数据集的支持,而简单的 scikit-learn 实用程序函数也支持使用不适合这些用例的函数。
但是,训练这些多标签模型的计算成本很高,而且基于 CPU 的基础设施无法跟上企业每年生成的数据量。
RAPIDS 是开源 GPU 加速数据科学和 AI 库的集合。 cuML 是一个适用于 Python 的 GPU 加速机器学习库,具有 scikit-learn 兼容 API。
在这篇博文中,我们展示了 RAPIDS cuML 如何借助加速计算轻松实现多标签机器学习工作流程的 大幅加速 。
为什么要进行多标签分类?
在某些企业用例中,目标是构建模型以预测每条记录的单个标签。支付处理器需要标记交易是否有效或欺诈,制造商可能需要从传感器或摄像头数据中识别特定产品,以便在配送中心内进行适当配送。
在每种情况下,标签都是互斥的。交易要么是有效的,要么是欺诈性的,但不能两者兼有。
当我们没有互斥的类别时,会使用多标签分类。
例如,医疗保健提供商可能希望从同一组患者数据中预测多种病症的存在。或者,一家报纸可能希望将一篇文章分类为同时涉及金融和世界新闻的文章,以便推荐系统可以向这两个部分的读者公布。
多标签分类使我们能够更有效地处理此类问题,而不是不得不选择一个标签来牺牲细微差别。
使用 RAPIDS cuML 进行多标签分类
RAPIDS cuML 可以直接应用到现有的 scikit-learn 工作流程中。
与 scikit-learn 类似,一些 RAPIDS cuML 估计器 (例如 KNeighborsClassifier) 为多标签分类提供内置支持。在以下示例中,我们使用 scikit-learn 创建合成多标签数据集,并将其直接与 cuML 的 KNeighborsClassifier 一起使用。
from sklearn.datasets import make_multilabel_classification
from cuml.neighbors import KNeighborsClassifier
X, y = make_multilabel_classification(
n_samples=10000,
n_features=20,
n_classes=5,
random_state=12
)
clf = KNeighborsClassifier(n_neighbors=10).fit(X, y)
preds = clf.predict(X)
preds[:5]
array([[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0]])
由于数据集中的每条记录最多可以属于五个类别 (n_classes=5
),因此我们的估测器会为每行输出五个预测。
要使用不包含对多个标签的内置支持的模型,如 Support Vector Machines,scikit-learn 提供了 MultiOutputClassifier 实用程序函数。我们可以像使用 scikit-learn estimators 一样,将其与 cuML estimators 结合使用。
此实用功能需要为五个类别中的每个类别训练单独的模型,从而将计算需求增加 5 倍。因此,加速计算在这些场景中变得更加重要。
from sklearn.datasets import make_multilabel_classification
from sklearn.multioutput import MultiOutputClassifier
from cuml.svm import SVC
X, y = make_multilabel_classification(
n_samples=10000,
n_features=20,
n_classes=5,
random_state=12
)
base = cuml.svm.SVC()
clf = MultiOutputClassifier(base).fit(X, y)
preds = clf.predict(X)
preds[:5]
array([[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0]])
结束语
现实世界中的许多机器学习挑战都涉及多标签分类,但在使用 Python 生态系统中的工具时,基于 CPU 的处理难以跟上数据集不断增长的规模。
RAPIDS cuML 非常适合此生态系统,因此可以轻松利用加速计算来训练多标签分类模型。
如需详细了解加速机器学习,并查看您喜欢的估计器是否默认支持多标签分类,或者是否需要实用函数, 请访问 cuML 文档。