SMOTE

本文描述如何在 Azure Machine Learning 設計工具中使用 SMOTE 元件,以增加用於機器學習的資料集中,所包含的不具代表性案例數目。 SMOTE 是更理想的罕見案例數增加方法,而非只是複製現有案例。

您要將 SMOTE 元件連線到不平衡資料集。 資料集不平衡的可能原因很多。 舉例來說,您的目標類別在母體中可能是極少數,或者可能只是其資料難以收集。 一般來說,您會在想要分析的類別不具代表性時使用 SMOTE。

元件會傳回包含原始範例的資料集。 它也會根據您所指定的百分比,傳回多個綜合少數樣本。

深入瞭解 SMOTE

綜合少數超取樣技術 (SMOTE) 是一種統計技術,可讓您以平衡的方式增加資料集中的案例數目。 SMOTE 的運作方式是從您提供做為輸入的現有案例中產生新實例。 運行 SMOTE 不會變更多數案例的數目。

新的實例並不只是現有少數案例的複本。 相反地,演算法會針對每個目標類別和其最鄰近項目,取得特徵空間的範例。 然後演算法會產生出新的範例,將目標案例的特徵與其鄰近項目的特徵結合在一起。 此方法能增加每個類別可用的特徵,並讓樣本更加一般化。

SMOTE 會將整個資料集做為輸入,但只會增加少數案例的百分比。 舉例來說,假設您有一個不平衡的資料集,其中 1% 的案例的目標值為 A (少數類別),而99% 的案例目標值則為 B。若要將少數案例的百分比增加為之前的兩倍,您可以在元件屬性中的 SMOTE 百分比 欄位輸入 200

範例

我們建議您嘗試將 SMOTE 用於小型的資料集,藉此了解它的作用為何。 以下範例使用了 Azure Machine Learning 設計工具中提供的捐血資料集。

如果您將資料集加入至管線,並在資料集的輸出上選取 [視覺化],就可以看到資料集的 748 個資料列或案例中,有 570 個案例 (76%) 屬於類別 0,而有 178 個案例 (24%) 屬於類別 1。 雖然此結果並沒有到非常的不平衡,但類別 1 代表捐血者,因此這些資料列包含您想要建立模型的特徵空間

若要增加案例數目,您能以 100 的倍數設定 [SMOTE 百分比] 的值,如下所示:

類別 0 類別 1 total
原始資料集

(相當於 SMOTE 百分比 = 0)
570

76%
178

24%
748
SMOTE 百分比 = 100 570

62%
356

38%
926
SMOTE 百分比 = 200 570

52%
534

48%
1,104
SMOTE 百分比 = 300 570

44%
712

56%
1,282

警告

我們不保證藉由使用 SMOTE 來增加案例數目能產生較準確的模型。 嘗試以不同的百分比、不同的特徵組和不同數目的最近鄰近項目執行管線,以了解新增案例會如何影響您的模型。

如何設定 SMOTE

  1. 將 SMOTE 元件新增至您的管線。 您可以在 [操作] 分類的 [資料轉換元件] 下找到該元件。

  2. 連線您想要提升的資料集。 如果您想要指定用來建立新案例的功能空間,不論是想使用特定資料行或排除某些資料行,都請使用「選取資料集中的資料行」元件。 您可以接著在使用 SMOTE 之前,先隔離您要使用的資料行。

    或者,依您提供為輸入的所有資料行為基礎來使用 SMOTE 建立新的案例。 特徵資料行中至少要有一個資料行為數值。

  3. 確定已選取包含標籤或目標類別的資料行。 SMOTE 只接受二進位標籤。

  4. SMOTE 元件會自動識別標籤資料行中的少數類別,然後取得少數類別的所有範例。 所有資料行都不能有 NaN 值。

  5. 在 [SMOTE 百分比] 選項中,輸入一個整數,指出輸出資料集中少數案例的目標百分比。 例如:

    • 輸入 0。 SMOTE 元件會傳回與您提供做為輸入的資料集完全相同的資料集。 而不會加入任何新的少數案例。 在此資料集中,類別比例不會變更。

    • 輸入 100。 SMOTE 元件會產生新的少數案例。 它會加入與原始資料集中相同數量的少數案例。 由於 SMOTE 不會增加多數案例的數目,因此每個類別的案例比例已有所變更。

    • 輸入 200。 相較於原始資料集,此元件使少數案例所佔據的百分比翻了一倍。 這樣做並不會產生與之前相比多出兩倍的少數案例。 相反地,資料集的大小會隨著多數案例的數目保持不變的方式增加。 少數案例的數目會增加,直到符合所需的百分比值為止。

    注意

    請僅使用 100 的倍數作為 SMOTE 百分比的數值。

  6. 使用 [最近鄰近項目個數] 選項來決定 SMOTE 演算法在建立新案例時所使用的功能空間大小。 最近鄰近項目常類似某些目標案例的資料列 (一個案例)。 任兩個案例之間的距離是藉由結合所有功能的加權向量來測量。

    • 藉由增加最接近鄰近項目的數目,您可以從更多案例中取得特徵。
    • 藉由維持最接近鄰近專案的數目,您可以使用與原始範例更相似的特徵。
  7. 如果您想要使用相同的資料來確保相在同的管線執行下有相同的結果,請在 [隨機種子] 方塊中輸入值。 否則,元件會在部署管線時,根據處理器的時鐘數值產生隨機種子。 隨機產生的種子可能會在執行時產生稍微不同的結果。

  8. 提交管線。

    該元件的輸出是一個包含了原始資料列,並加上一些具有少數案例的新增資料列的資料集。

技術說明

  • 當您發行的模型使用 SMOTE 元件時,再將其發布為 Web 服務之前請先從預測性管線移除 SMOTE。 原因是運用 SMOTE 的目的是要在定型期間改善模型,而不是用於計分。 如果已發佈的預測管線中包含了 SMOTE 元件,您可能會收到錯誤訊息。

  • 在套用 SMOTE 之前先清除遺漏值或套用其他轉換來修正資料,通常能藉此得到更好的結果。

  • 有些研究人員研究過 SMOTE 是否適用於高維度或稀疏資料,例如文字分類或基因體學資料集中所使用的資料。 這份論文提供了在這類情況下套用 SMOTE 後的效果,以及關於其理論有效性的良好摘要:Blagus 和 Lusa:將 SMOTE 用於高維度類別不平衡資料) \(英文\)。

  • 如果 SMOTE 在您的資料集中沒有任何作用,您可能得考慮包括下列的其他方法:

    • 進行超取樣少數案例或降取樣多數案例的方法。
    • 集成技術可協助您使用群集、封袋或彈性提升來直接幫助學習模組。

後續步驟

請參閱 Azure Machine Learning 可用的元件集