增強型鯨魚優化演算法實驗 (BE-WOA)
摘要
本實驗基於論文《Enhanced whale optimization algorithm for medical feature selection: A COVID-19 case study》提出的增強型鯨魚優化演算法 [1],針對醫學特徵選擇問題進行二元化改進。演算法核心在於平衡探索(exploration)與開發(exploitation)能力,並通過池化機制維持種群多樣性。
目的
此文章主要聚焦在增強型鯨魚優化演算法在文獻中採用的核心機制,以及實驗的流程與結果
資料集描述
使用 Breast Cancer Wisconsin Dataset(乳癌威斯康辛資料集) 作為實驗資料 [2],用於驗證 BE-WOA(Binary-Enhanced Whale Optimization Algorithm) 在 特徵選擇(feature selection) 任務上的可行性與基礎效能。
資料集包含 699 筆樣本(instances) 與 9 個主要特徵(features),屬於 多變量(multivariate)分類(classification) 問題,特徵型態皆為 整數(integer)。資料中存在 遺失值(missing values)。
所有特徵皆以 1–10 的離散尺度表示細胞形態學特徵,具備明確的醫學意義,作為特徵選擇與分類模型的測試基準。

欄位
原始資料共包含 11 個欄位,其中要注意到的是Sample_code_number 以及 Class 欄位,這兩個欄位將進行處理。
-
Sample_code_number :為樣本識別碼(ID)
-
Class: 為目標標籤(label)
類別/目標標籤為
-
2:良性(benign)
-
4:惡性(malignant)

核心機制
起始映射位子
positions = np.random.uniform(-2, 2, (self.n_population, n_features))
優化函數的初始化鯨魚群體位置,初始化一個 的二維矩陣,裡面的元素值為 的均勻分布
池化機制 (Pooling Mechanism):
# 找到最優和最差解
best_idx = np.argmin(fitness_values)
worst_idx = np.argmax(fitness_values)
# 最佳解 + 隨機擾動 random position in the neighborhood
X_brnd = positions[best_idx] + \
np.random.uniform(-0.5, 0.5, positions.shape[1])
# 隨機交叉 (0 1)
B = np.random.randint(0, 2, positions.shape[1])
# 補集 complement ,反向轉換 (1-0=1,1-1=0)
B_complement = 1 - B
P = B * X_brnd + B_complement * positions[worst_idx]
這裡設置了池化機制,維持種群多樣性,將最差解與最佳解鄰域內的隨機位置進行交叉,產生新候選解並存入池中備用
遷移搜尋策略 (Migrating Search Strategy):
# 遷移策略 (適用於隨機選取的 P% 個體)
if i < int(self.n_population * self.migrate_rate):
X_rnd = np.random.uniform(-2, 2, n_features) # 全域隨機位置
X_brnd = best_position + np.random.uniform(-0.5, 0.5, n_features) # 最優解鄰域擾動
positions[i] = X_rnd - X_brnd # 遷移更新公式
continue
提升探索能力,種群脫離局部最優。
U 形轉移函數
def u_shape_transfer(x, alpha=1.0, beta=4.0):
"""U-shaped transfer function"""
return alpha * np.power(np.abs(x), beta)
在這個實驗中,參數設置的是 與
當 時輸出快速增大,增加特徵被選中機率。
二元映射規則
def _to_binary(self, position):
"""二元轉換規則"""
transfer = u_shape_transfer(position, self.alpha, self.beta)
rand = np.random.rand(*position.shape)
return (rand < transfer).astype(int)
將連續位置轉換為二元特徵向量, 表示選取該特徵, 表示不選
收斂因子控制
# 線性衰減 2→0
a = 2.0 - iteration * (2.0 / self.max_iter)
# 隨機係數
A = 2.0 * a * np.random.rand() - a
創建一個線性的線程作為收斂因子,迭代的次數將推進生命週期,控制演算法由探索轉向開發。前期 值大(探索 exploration 為主),後期 值小(開發 exploitation 為主)。
適應性評估
clf = KNeighborsClassifier(n_neighbors=5)
kf = KFold(n_splits=10, shuffle=True)
包裝法框架:使用 k-NN 分類器(k=5)配合 10 折交叉驗證評估特徵子集品質。
策略選擇邏輯
if rho < 0.5:
if np.abs(A) < 0.5:
# 豐富包圍策略 (Enriched encircling prey)
else:
# 優先選擇策略 (Preferential selecting)
else:
# 螺旋攻擊策略 (Spiral bubble-net attacking)
控制流程:
-
:進行包圍或搜索
-
:豐富包圍策略(開發)
-
:優先選擇策略(探索,使用柯西分布)
-
-
:螺旋攻擊策略(開發)
柯西分布增強探索
A_cauchy = np.random.standard_cauchy(n_features) * 0.1 + 0.5
在優先選擇策略中使用重尾柯西分布產生較大步長,增強全域探索能力。
實驗
資料前處理
這部分我們將進行資料前處理,先載入資料成為物件,然後定義缺失值格式
df = pd.read_csv(path, header=None, names=cols, na_values=["?"])
這裡我們查看缺失值,結果顯示這裡有16個缺失值
print(df.isna().sum())

這裡進行過濾欄位,將 ID Class 移除,保留其他特徵欄位
X = df.loc[:, cols[1:10]].values
並用 map 把原本的類別值轉成 0 / 1,讓模型可以直接用來做二元分類。
y = (df["Class"].map({2: 0, 4: 1}))
最後我們進行資料分割,這裡顯示原始資料集以及target的形狀,以及我們分割後的資料形狀,我們採取70%30%的資料分割(spliting)
dataset: (699, 9)
target / label: (699,)
training dataset: (489, 9)
test dataset: (210, 9)
30次獨立運算
for run in range(num_runs):
print(f"進行第 {run+1}/{num_runs} 次運行")
be_woa = BE_WOA(
n_population=25,
pool_ratio=1.5,
max_iter=100,
migrate_rate=0.2,
alpha=1.0,
beta=4.0,
fit_alpha=0.99
)
best_binary, best_fitness = be_woa.optimize(X_train, y_train)
此時驗採取30次的演算法獨立運算作為評估方法,並且使用論文建議的常見設置
參數說明:
-
n_population=25:鯨魚種群大小,論文實作設定 -
max_iter=100:最大迭代次數 -
migrate_rate=0.2:遷移率 (P=20%),控制多少比例的個體執行遷移搜尋策略 -
alpha=1.0, beta=4.0:U形轉移函數參數,經預實驗確定為最佳值 (附錄A) -
fit_alpha=0.99:適應度函數權重,極度偏重分類準確率 -
pool_ratio=1.5:池大小比例 (),論文公式設定
實驗結果
圖表看出在迭代次數到達10的時候適應度明顯開始收斂,演算法在10運行次前正在進行探索策略,而在10到20之間更高機率的再進行利用策略

這張圖表示原先的九個特徵,在30次運行後所累積的選擇次數,途中表示從原先的9個特徵成功的降低了特徵維度至7個特徵。

統計輸出
在 30 次獨立運行下,Fitness 的平均值約為 0.027,標準差僅 0.0007,顯示演算法在多次運行間具有良好的穩定性與一致性,且最佳與最差結果差距很小,代表收斂行為可靠。
在特徵選擇數量方面,平均選取約 5.7 個特徵,最少 3 個、最多 7 個,說明 BE-WOA 能有效從原本 9 個特徵中進行降維,同時保留一定彈性以適應不同運行的最佳解。
測試準確率平均為約 95.1%,標準差 0.0058,最低仍接近 94%,最高可達約 96.2%,表示在特徵數量降低的情況下,模型仍能維持高且穩定的分類效能。
整體而言,統計結果顯示 BE-WOA 在此資料集上能在高準確率、低特徵數與穩定性三者之間取得良好平衡。
| Metric | Avg | Std | Min | Max |
|---|---|---|---|---|
| Fitness | 0.0272 | 0.0007 | 0.0269 | 0.0287 |
| Selected Features | 5.70 | 1.10 | 3 | 7 |
| Test Accuracy | 0.9506 | 0.0058 | 0.9381 | 0.9619 |
總結
我們的實作採用論文中 [1] 提出的最佳超參數設置,在乳癌數據集的結果顯示,我們得出BE-WOA演算法可以在準確率和特徵選擇中找到平衡點,並維持醫療所需的高準確度,最終結果與論文達到相近的成果。
參考文獻
[1] M. H. Nadimi-Shahraki, H. Zamani, and S. Mirjalili, “Enhanced whale optimization algorithm for medical feature selection: A COVID-19 case study,” Computers in Biology and Medicine, vol. 148, no. 1879-0534, p. 105858, Sep. 2022, doi: https://doi.org/10.1016/j.compbiomed.2022.105858.
[2] Wi. Wolberg, “UCI Machine Learning Repository,” archive.ics.uci.edu, Jul. 14, 1992. https://archive.ics.uci.edu/dataset/15/breast+cancer+wisconsin+original
[3] S. Mirjalili and A. Lewis, “The Whale Optimization Algorithm,” Advances in Engineering Software, vol. 95, pp. 51–67, May 2016, doi: https://doi.org/10.1016/j.advengsoft.2016.01.008.


