新聞中心

利用 RAPIDS cuML 和 GPU 加速提升多標籤分類性能 NEWS DETAIL

當前位置:首頁 > 新聞中心
資訊分類 · 新聞中心 發佈時間 · 2025-01-08

現代分類工作流程通常需要將單個記錄和資料點分類為多個類別,而不僅僅是分配單個標籤。

 

借助 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 非常適合此生態系統,因此可以輕鬆利用加速計算來訓練多標籤分類模型。