使用數值特徵的二元分類精確分割器

在本單元中,您將探索最簡單且最常見的分割演算法,該演算法會在下列設定中建立 featureit 形式的條件:

  • 二元分類任務
  • 範例中沒有缺少的值
  • 不對範例使用預先計算的索引

假設一組 n 個示例,其中包含數值特徵和二元標籤「橘色」和「藍色」。我們正式地將資料集 D 描述如下:

D={(xi,yi)}i[1,n]

其中:

  • xiR (實數集) 中的數值特徵值。
  • yi 是 {orange, blue} 中的二元分類標籤值。

我們的目標是找出閾值 t (閾值),以便根據 xit 條件將 D 示例分為 T(rue)F(alse) 兩組,進而改善標籤的分離效果,例如 T 中出現更多「橘色」示例,F 中出現更多「藍色」示例。

Shannon 熵是一種混亂程度的衡量標準。二元標籤:

  • 當範例中的標籤平衡 (50% 藍色和 50% 橘色) 時,Shannon 熵會達到最高值。
  • 當示例中的標籤為純色 (100% 藍色或 100% 橘色) 時,Shannon 熵值會降至最低 (值為零)。

三張圖表。高熵圖表顯示兩個不同類別的大量交錯。低入口圖表說明瞭兩個不同類別的混合情形。無熵圖表顯示兩個不同類別並未混合,也就是說,無熵圖表只顯示單一類別。

圖 8. 三種不同的熵值等級。

 

正式來說,我們想找出可降低 TF 中標籤分布熵的加權總和的條件。對應的分數是資訊增益,也就是 D 熵和 {T,F} 熵之間的差異。這項差異稱為資訊增益

下圖顯示不良的分割方式,其中熵值仍高,資訊增益則偏低:

兩個圖表,兩者都顯示兩個不同類別的幾乎相同的顯著交錯。

圖 9. 不當的分割方式不會降低標籤的熵。

 

相較之下,下圖顯示更佳的分割方式,其中熵會變低 (資訊增益會變高):

兩個圖表。一個圖表包含約 95% 的橘色類別和 5% 的藍色類別。另一個圖表則包含約 95% 的藍色類別和 5% 的橘色類別。

圖 10. 良好的分割方式可降低標籤的熵。

 

正式:

T={(xi,yi)|(xi,yi)D with xit}F={(xi,yi)|(xi,yi)D with xi<t}R(X)=|{x|xX and x=pos}||X|H(X)=plogp(1p)log(1p) with p=R(X)IG(D,T,F)=H(D)|T||D|H(T)|F||D|H(F)

其中:

  • IG(D,T,F) 是將 D 分割為 TF 的資訊增益。
  • H(X) 是示例集 X 的熵。
  • |X| 是集合 X 中的元素數量。
  • t 是閾值。
  • pos正值標籤值,例如上例中的「blue」。選取其他標籤做為「正向標籤」不會變更熵或資訊增益的值。
  • R(X)X 示例中正面標籤值的比例。
  • D 是資料集 (如本單元前述所定義)。

在以下範例中,我們會考慮含有單一數值特徵 x 的二元分類資料集。下圖顯示不同閾值 t 值 (x 軸):

  1. 特徵 x 的直方圖。
  2. 根據閾值,在 DTF 集合中「藍色」示例的比例。
  3. DTF 中的熵。
  4. 資訊增益,也就是 D 和 {T,F} 之間的熵差異,經過示例數量加權。

四個圖表,比較閾值與其他參數。下圖後方的清單則概述了這些圖表。

圖 11. 四個門檻圖表。

 

這些圖表顯示以下內容:

  • 「頻率」圖表顯示觀察值分布相對均勻,濃度介於 18 到 60 之間。值分布範圍廣泛表示有許多潛在的分割方式,這對模型訓練有益。
  • 資料集中「藍色」標籤的比例約為 25%。「藍色標籤比率」圖表顯示,如果閾值值介於 20 和 50 之間:

    • T 集合包含過多的「藍色」標籤範例 (上限為 35% 的閾值 35)。
    • F 集合包含「blue」標籤範例的補充不足 (閾值 35 僅為 8%)。

    「藍色標籤比率」和「熵」圖表都顯示,在這個閾值範圍內,標籤可以相對清楚地分開。

  • 這項觀察結果在「資訊增益」圖表中得到證實。我們發現,在資訊增益值約為 0.074 的情況下,t~=28 可獲得最大資訊增益。因此,分割器傳回的條件會是 x28

  • 資訊增益值一律為正值或空值。當閾值值趨近最大 / 最小值時,這個值會收斂至零。在這些情況下,FT 會變成空白,而另一個變數則包含整個資料集,並顯示與 D 相同的熵。當 H(T) = H(F) = H(D) 時,資訊增益也可能為零。在閾值 60 時,TF 的「藍色」標籤比率與 D 相同,而資訊增益為零。

在實數集合 (R) 中,t 的候選值是無限的。不過,如果有有限的例子,D 分為 TF 的情況也只有有限個。因此,只有有限數量的 t 值才有意義。

傳統做法是依遞增順序排序 xi 值,並以 xs(i) 排序,如下所示:

xs(i)xs(i+1)

接著,針對 xi 連續排序值之間的每個值,測試 t。舉例來說,假設您有特定功能的 1,000 個浮點值。假設排序後,前兩個值分別為 8.5 和 8.7。在這種情況下,要測試的第一個閾值值為 8.6。

我們會將 t 的候選值設為以下值:

X={xs(i)+xs(i+1)2|xs(i)xs(i+1)}

這個演算法的時間複雜度為 O(nlogn),其中 n 是節點中的示例數量 (因為特徵值會排序)。套用至決策樹時,分割器演算法會套用至每個節點和每個特徵。請注意,每個節點都會收到約 1/2 的父項範例。因此,根據主定理,使用此分割器訓練決策樹的時間複雜度為:

O(mnlog2n)

其中:

  • m 是特徵數量。
  • n 是訓練範例數。

在這個演算法中,特徵的值並不重要,只有順序才重要。因此,這個演算法會獨立於特徵值的規模或分布情況運作。因此,在訓練決策樹時,我們不需要將數值特徵正規化或調整規模。