集成學習中的多樣性密碼:量化學習器的多樣性
在集成學習中,多樣性是一個關鍵概念,簡單來說,多樣性衡量的是各個學習器之間的差異程度。
如果學習器之間差異很大,那么它們的組合就更有可能覆蓋更多的情況,從而提高集成模型的性能,
就像足球隊需要不同位置的球員配合一樣。
下面介紹四種常用的多樣性度量方法及其實現。
1. 不合度量(Disagreement Measure)
不合度量是一種非常直觀的多樣性度量方法。
它通過計算兩個學習器在樣本上的預測結果不一致的比例來衡量它們之間的差異。
不合度量的值介于0到1之間,值越接近 1,說明兩個學習器的預測結果越不一致,多樣性越高。
假設我們有兩個學習器$ L_1 \(和\) L_2 \(,對于一個數據集中的每個樣本\) x_i \(,如果\) L_1 \(和\) L_2 $的預測結果不同,那么就認為它們在這個樣本上“不合”。
不合度量就是這種“不合”情況的比例。
為了演示如何度量多樣性,我們先創建兩個不同的決策樹模型:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# 生成數據
X, y = make_classification(
n_samples=100, n_features=20, n_informative=10, n_redundant=10, random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 訓練兩個不同的決策樹
clf1 = DecisionTreeClassifier(random_state=42)
clf2 = DecisionTreeClassifier(random_state=43)
clf1.fit(X_train, y_train)
clf2.fit(X_train, y_train)
# 預測測試集
y_pred1 = clf1.predict(X_test)
y_pred2 = clf2.predict(X_test)
然后,我們看看如何計算兩個模型的不合度量(Disagreement Measure)。
# 計算不合度量
disagreement = np.mean(y_pred1 != y_pred2)
print(f"不合度量: {disagreement}")
## 輸出結果:
# 不合度量: 0.2
2. 相關系數(Correlation Coefficient)
相關系數衡量的是兩個學習器預測結果之間的線性相關性。
如果兩個學習器的預測結果完全一致,相關系數為1;
如果完全相反,相關系數為-1;
如果兩者之間沒有線性關系,相關系數接近 0。
在集成學習中,我們希望相關系數越低越好,因為這意味著學習器之間的差異更大。
相關系數是通過計算兩個學習器預測結果的協方差與它們各自的標準差的比值來得到的。
其公式為:$ \rho=\frac{\text{Cov}(L_1,L_2)}{\sigma{L_1}\sigma{L_2}} $
其中,$ Cov(L_1,L_2) \(是協方差,\) \sigma{L_1} \(和\) \sigma{L_2} \(分別是\) L_1 \(和\) L_2 $的標準差。
使用代碼來計算相關系數也很簡單,同樣使用上面創建的兩個決策樹模型。
import numpy as np
# 計算相關系數
correlation = np.corrcoef(y_pred1, y_pred2)[0, 1]
print(f"相關系數: {correlation}")
## 輸出結果:
# 相關系數: 0.6637465183030644
3. Q-統計量(Q-Statistic)
Q-統計量是另一種衡量學習器之間一致性和差異性的指標。
它通過比較兩個學習器在樣本上的預測結果來計算。
Q-統計量的值介于-1 到 1 之間,值越接近 1,說明兩個學習器的預測結果越一致;
值越接近-1,說明它們的預測結果越不一致。
Q-統計量的計算公式為:$ Q=\frac{a\times d-b\times c}{(a+b)\times(c+d)} $
其中:
- $ a $是兩個學習器都正確預測的樣本數
- $ b $是第一個學習器正確預測,第二個學習器錯誤預測的樣本數
- $ c $是第一個學習器錯誤預測,第二個學習器正確預測的樣本數
- $ d $是兩個學習器都錯誤預測的樣本數
計算Q-統計量的示例代碼如下:
from sklearn.metrics import confusion_matrix
# 計算混淆矩陣
cm = confusion_matrix(y_test, y_pred1, labels=[0, 1])
a = np.sum((y_pred1 == y_test) & (y_pred2 == y_test))
b = np.sum((y_pred1 == y_test) & (y_pred2 != y_test))
c = np.sum((y_pred1 != y_test) & (y_pred2 == y_test))
d = np.sum((y_pred1 != y_test) & (y_pred2 != y_test))
# 計算 Q-統計量
q_statistic = (a * d - b * c) / ((a + b) * (c + d))
print(f"Q-統計量: {q_statistic}")
## 輸出結果:
# Q-統計量: 0.5757575757575758
4. k-統計量(Kappa Statistic)
k-統計量是一種衡量分類器性能的指標,它考慮了分類器的正確率和隨機猜測的正確率。
在集成學習中,k-統計量可以用來衡量兩個學習器之間的多樣性。
k-統計量的值介于-1 到 1 之間,值越接近 1,說明兩個學習器的預測結果越一致;
值越接近-1,說明它們的預測結果越不一致。
k-統計量的計算公式為:$ \kappa=\frac{P_o-P_e}{1-P_e} $
其中:
- $ P_o $是兩個學習器預測結果一致的比例
- $ P_e $是隨機猜測下兩個學習器預測結果一致的比例
計算k統計量的示例代碼如下:
from sklearn.metrics import cohen_kappa_score
# 計算 k-統計量
kappa_statistic = cohen_kappa_score(y_pred1, y_pred2)
print(f"Kappa 統計量: {kappa_statistic}")
## 輸出結果:
# Kappa 統計量: 0.6116504854368932
5. 指標使用建議
在實際場景中,我們應該如何使用這些指標呢?下面是一些使用建議:
- 在
Bagging中優先關注不合度量 - 構建
Stacking時參考相關系數 - 使用
Q-statistic診斷高相關模型 Kappa值過低時考慮增加模型類型差異
各個指標的數值可參考:
| 指標 | 理想范圍 | 應用場景 |
|---|---|---|
| 不合度量 | 0.3-0.7 | 快速評估模型差異度 |
| 相關系數 | [-0.5, 0.5] | 分析模型互補性 |
| Q-統計量 | (-0.5, 0.5) | 研究預測結果關聯強度 |
| Kappa統計量 | <0.4 | 綜合評估一致性水平 |
6. 總結
在集成學習中,度量學習器的多樣性是非常重要的。
通過計算不合度量、相關系數、Q-統計量和 k-統計量,我們可以更好地了解學習器之間的差異。
這些指標可以幫助我們選擇合適的集成策略,從而提高集成模型的性能。
在實際應用中,可以根據具體問題選擇合適的多樣性度量指標,并結合scikit-learn等工具進行計算和分析。

浙公網安備 33010602011771號