SMOTE

重要

Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning

自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。

ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。

使用綜合少數過度取樣增加資料集內低發生率範例的數目

類別: 資料轉換/操作

注意

適用于僅限機器學習 Studio (傳統)

Azure Machine Learning 設計工具中提供類似的拖放模組。

模組概觀

本文說明如何使用機器學習 Studio (傳統) 中的SMOTE模組,來增加用於機器學習之資料集中的 underepresented 案例數目。 SMOTE 是更理想的罕見案例數增加方法,而非只是複製現有案例。

您會將 SMOTE 模組連接到 不平衡的資料集。 有許多原因可能會不平衡資料集:您的目標類別可能在人口中非常罕見,或資料可能只是難以收集。 一般來說,當您想要分析的 類別 低於-表示時,您會使用 SMOTE。

模組會傳回資料集,包含原始範例,加上綜合少數取樣的其他數目,視您指定的百分比而定。

深入瞭解 SMOTE

SMOTE 代表 綜合少數超取樣技術。 這是用於以平衡方式增加資料集中案例數目的統計技術。 此模組的運作方式是從您提供做為輸入的現有少數案例產生新的實例。 運行 SMOTE 不會變更多數案例的數目。

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

SMOTE 會將整個資料集做為輸入,但只會增加少數案例的百分比。 例如,假設您有一個不平衡資料集,其中只有1% 的案例的目標值為 (少數類別) ,而99% 的案例具有值 B。若要將少數案例的百分比增加到前一個百分比,您可以在模組的屬性中輸入200的 SMOTE 百分比

範例

我們建議您嘗試將 SMOTE 用於小型的資料集,藉此了解它的作用為何。 下列範例會使用機器學習 Studio (傳統) 中提供的血糖捐贈資料集。

如果您將資料集加入實驗中,然後按一下資料集輸出上的 [ 視覺化 ],就可以看到資料集的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%
1104
SMOTE 百分比 = 300 570

44%
712

56%
1282

警告

我們不保證以 SMOTE 增加案例數目的方法能產生較準確的模型。 您應該嘗試實驗不同的百分比、不同的特徵組和不同數目的最近鄰近項目,以了解新增案例會如何影響您的模型。

如何設定 SMOTE

  1. 將 SMOTE 模組新增至您的實驗。 您可以在 [操作] 分類中的 [資料轉換模組] 下找到此模組。

  2. 連線您想要提升的資料集。 如果您想要使用特定的資料行來指定建立新案例的功能空間,或藉由排除某些資料行,請使用 [ 資料集模組中的選取資料行 ] 來隔離您要使用的資料行,然後再使用 SMOTE

    否則,使用 SMOTE 建立新的案例會以您提供做為輸入的 所有 資料行為基礎。

  3. 確定包含標籤或目標類別的資料行標示為如此。

    如果沒有標籤資料行,請使用 [編輯中繼資料] 模組來選取包含類別標籤的資料行,然後從 [欄位] 下拉式清單中選取 [標籤]。

  4. SMOTE模組會自動識別標籤資料行中的少數類別,然後取得少數類別的所有範例。

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

    • 您輸入 0 (% ) 。 SMOTE 模組會傳回您提供做為輸入的相同資料集,且不會加入任何新的少數案例。 在此資料集中,類別比例不會變更。

    • 您輸入 100 (% ) 。 SMOTE 模組會產生新的少數案例,並在原始資料集中加入相同數目的少數案例。 由於 SMOTE 不會增加大部分的案例數目,因此每個類別的案例比例現在已變更。

    • 您輸入 200 (% ) 。 相較于原始資料集,模組會將少數案例的百分比加倍。 這樣做並不會產生與之前相比多出兩倍的少數案例。 相反地,資料集的大小會隨著大部分案例的數目保持不變,而增加少數案例的數目,直到符合所需的百分比值為止。

    注意

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

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

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

  8. 執行實驗。

    模組的輸出是包含原始資料列的資料集,加上一些具有少數案例的加入資料列。

提示

如果您想要找出新增的新資料列,可以使用 [套用SQL 轉換] 或 [聯結資料] 模組。

技術說明

  • 發行使用 SMOTE 模組的模型時,請先從預測性實驗中移除 SMOTE ,然後再將它發佈為 web 服務。 原因是,SMOTE 的目的是要在定型期間改善模型,而不是用於計分。 如果已發佈的預測實驗包含 SMOTE 模組,您可能會收到錯誤。

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

  • 有些研究人員已調查過 SMOTE 是否適用于高維度或稀疏資料,例如文字分類或 genomics 資料集中所使用的資料。 這份檔對於在這類情況下套用 SMOTE 的效果和理論有效性有很大的摘要: Blagus 和 Lusa: SMOTE 適用于高維度的類別不平衡資料

    如果 SMOTE 在您的資料集中無效,您可能會考慮的其他方法包括超取樣少數案例或 undersampling 大部分案例的各種方法,以及使用群集、學習模組或彈性提升來協助封袋] 的集團技術。

預期的輸入

名稱 類型 描述
範例 資料表 樣本的資料集

模組參數

名稱 範圍 類型 預設 描述
SMOTE 百分比 >=0 整數 100 超取樣數量,以 100 的倍數為單位。
最近鄰近項目個數 >=1 整數 1 從中繪製新案例功能的最近鄰近項目的數目
隨機種子 任意 整數 0 亂數產生器的種子

輸出

名稱 類型 描述
資料表 資料表 包含原始範例的 資料表 加上額外的綜合少數類別樣本數。 新的樣本數目是 (smotePercent/100)*T,其中 T 是少數類別樣本數。

另請參閱

取樣和分割
A-Z 模組清單