共用方式為


SMOTE

本文說明如何使用 Azure 機器學習 設計工具中的 SMOTE 元件,在用於機器學習的數據集中增加未代表的案例數目。 SMOTE 是增加罕見案例數量比單純複製現有案例更好的方法。

您可以將 SMOTE 元件連線到不平衡的數據集。 數據集可能不平衡的原因有很多。 例如,您以為目標的類別在母體中可能很少見,或數據可能難以收集。 一般而言,當您想要分析的 類別 代表不足時,您會使用 SMOTE。

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

深入瞭解 SMOTE

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

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

SMOTE 會將整個數據集視為輸入,但它只會增加少數案例的百分比。 例如,假設您有一個不平衡的數據集,其中只有 1% 的案例具有目標值 A(少數類別),而 99% 的案例具有 B 值。若要將少數案例的百分比提高到前一個百分比的兩倍,您會在元件的 屬性中輸入 200SMOTE 百分比

範例

建議您嘗試搭配小型數據集使用 SMOTE,以查看其運作方式。 下列範例使用 Azure 機器學習 設計工具中提供的獻血數據集。

如果您將數據集新增至管線,並在數據集的輸出上選取 [可視化 ],您可以看到數據集中 748 個數據列或案例中,570 個案例 (76%) 屬於類別 0,而 178 個案例 (24%) 是類別 1。 雖然這個結果並不嚴重不平衡,但類別 1 代表獻血的人,因此這些數據列包含 您想要建立模型的功能空間

若要增加案例數目,您可以使用 100 的 倍數來設定 SMOTE 百分比的值,如下所示:

類別 0 類別1 總計
原始資料集

(相當於 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。 相較於原始數據集,元件會將少數案例的百分比加倍。 這 會導致以前有兩倍的少數案件。 相反地,數據集的大小會以讓多數案例的數目維持不變的方式增加。 少數案例的數目會增加,直到符合所需的百分比值為止。

    注意

    僅針對 SMOTE 百分比使用 100 的倍數。

  6. 使用 [近鄰數目] 選項來判斷 SMOTE 演算法在建置新案例時所使用的特徵空間大小。 最接近的鄰居是類似目標案例的數據列(案例)。 任何兩個案例之間的距離是結合所有特徵的加權向量來測量。

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

  8. 提交管線。

    元件的輸出是包含原始數據列的數據集,加上少數案例的新增數據列數目。

技術注意事項

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

  • 如果您清除遺漏值,或套用其他轉換來修正數據,套用SMOTE之前,您通常會取得更好的結果。

  • 一些研究人員已經調查 SMOTE 是否對高維度或疏鬆數據有效,例如文字分類或基因組數據集中使用的數據。 本文對在這類情況下套用 SMOTE 的效果和理論有效性有很好的總結: 布拉格斯和盧薩:SMOTE 用於高維度類別不平衡的數據

  • 如果您的資料集中 SMOTE 無效,您可能會考慮的其他方法包括:

    • 過度取樣少數案例或取樣多數案例的方法。
    • 使用叢集、套用或調適型提升,協助學習者直接使用的合奏技術。

下一步

請參閱 Azure 機器學習 可用的元件集。