李中民
(中共廣州市委黨校信息網(wǎng)絡(luò)中心,廣州 510070)
在機器學(xué)習(xí)中,特征選擇和參數(shù)優(yōu)化是影響模型性能的重要因素[1]。特征選擇的目的是從原始特征中選擇出對模型預(yù)測結(jié)果有重要影響的特征,從而減少模型的復(fù)雜度和提高模型的泛化能力。參數(shù)優(yōu)化的目的是選擇最優(yōu)的參數(shù)組合,從而使模型在訓(xùn)練數(shù)據(jù)上達(dá)到最佳的性能。
傳統(tǒng)的特征選擇和參數(shù)優(yōu)化方法往往是分開的,而且需要多次人工調(diào)整和運行模型,效率低下且存在過擬合和欠擬合等問題[2]。因此,如何同時進行特征選擇和參數(shù)優(yōu)化,并且自動化地完成這一過程是一個重要的研究方向。
目前已經(jīng)有很多研究提出了基于啟發(fā)式算法的特征選擇和參數(shù)優(yōu)化方法,如粒子群算法[3]、人工蜂群算法[4]、遺傳算法[5]等。這些方法在一定程度上可以優(yōu)化機器學(xué)習(xí)模型的性能,但仍存在一些問題,如算法復(fù)雜度較高、局部最優(yōu)解問題等。
為了解決這些問題,本文提出了一種基于蟻群算法[6]和遺傳算法的混合算法來進行特征選擇和參數(shù)優(yōu)化。該算法可以同時考慮特征選擇和參數(shù)優(yōu)化的問題,并且能夠有效地提高準(zhǔn)確率。
蟻群算法是一種模擬螞蟻尋找食物的行為而發(fā)展起來的啟發(fā)式優(yōu)化算法。其基本思想是模擬螞蟻在搜索食物時發(fā)現(xiàn)路徑、釋放信息素、選擇路徑的行為,從而尋找到最優(yōu)路徑。
在蟻群算法中,每只螞蟻都有一定的概率(概率函數(shù)計算)選擇走已經(jīng)走過的路徑,并且每只螞蟻在路徑上釋放信息素。信息素的濃度越高,表示該路徑被更多的螞蟻走過,因此更有可能是最優(yōu)路徑。當(dāng)螞蟻完成一次搜索后,信息素會根據(jù)螞蟻所選擇的路徑進行更新(更新函數(shù),一般是距離的倒數(shù))。經(jīng)過多輪搜索和信息素的更新,最終會形成一條信息素濃度較高的路徑,即最優(yōu)路徑。
蟻群算法可以用于解決多種優(yōu)化問題,例如TSP 問題[7]、路徑規(guī)劃[8]等問題。在特征選擇和參數(shù)優(yōu)化中,可以將螞蟻看作是搜索特征子集和參數(shù)空間的“搜索代理”,從而尋找最優(yōu)的特征子集和參數(shù)組合。
蟻群算法流程如下:
(1)初始化信息素和螞蟻位置;
(2)對每只螞蟻進行路徑選擇,根據(jù)信息素濃度和啟發(fā)式規(guī)則進行選擇;
(3)更新信息素濃度,根據(jù)螞蟻選擇的路徑更新信息素濃度;
(4)判斷是否達(dá)到停止條件,如果滿足停止條件則輸出結(jié)果,否則返回步驟(2)。
在特征選擇中,可以將每個特征看作是一只螞蟻,每個特征子集看作是一條路徑,信息素濃度可以表示該特征子集的重要性。在參數(shù)優(yōu)化中,可以將每個參數(shù)看作是一只螞蟻,每個參數(shù)值看作是一條路徑,信息素濃度可以表示該參數(shù)值的優(yōu)劣程度。通過不斷地搜索和信息素的更新,可以尋找到最優(yōu)的特征子集和參數(shù)組合。
遺傳算法是一種模擬自然界生物進化過程的優(yōu)化算法。其基本思想是通過遺傳和交叉操作來模擬生物的進化過程,從而生成更優(yōu)秀的個體。
在遺傳算法中,一個個體被表示為一個染色體,染色體由若干基因組成。每個基因表示個體的一個特征或參數(shù)。通過適應(yīng)度函數(shù)來評估每個個體的適應(yīng)性,適應(yīng)性越高的個體在遺傳和交叉過程中具有更高的生存概率。在每次迭代中,通過選擇、交叉和變異操作來生成新一代個體,并更新種群中的個體。
遺傳算法的流程如下:
(1)初始化種群,隨機生成一組初始個體;
(2)計算每個個體的適應(yīng)度值;
(3)選擇操作,根據(jù)適應(yīng)度值選擇個體;
(4)交叉操作,將選定的個體進行交叉操作,生成新的個體;
(5)變異操作,對新個體進行變異操作,生成新的個體;
(6)更新種群,根據(jù)新生成的個體更新種群;
(7)判斷是否達(dá)到停止條件,如果滿足停止條件則輸出結(jié)果,否則返回步驟(2)。
在特征選擇和參數(shù)優(yōu)化中,可以將一個個體表示為一組特征或參數(shù)的組合。通過適應(yīng)度函數(shù)來評估每個個體的適應(yīng)性,適應(yīng)性越高的個體在遺傳和交叉過程中具有更高的生存概率。在每次迭代中,通過選擇、交叉和變異操作來生成新一代個體,并更新種群中的個體。
本文提出的混合算法基于蟻群算法和遺傳算法,擬在特征選擇和參數(shù)優(yōu)化中使用這兩種算法各自的長處,以達(dá)到最優(yōu)。具體來說,本文將蟻群算法作為特征選擇的主算法,將遺傳算法作為參數(shù)優(yōu)化的主算法。算法設(shè)計流程如下:
(1)初始化種群和信息素;
(2)使用蟻群算法進行特征選擇,對每個個體進行特征選擇,并記錄特征子集和信息素濃度;
(3)根據(jù)選定的特征子集,使用遺傳算法進行參數(shù)優(yōu)化,生成新的個體;
(4)更新種群,根據(jù)新生成的個體更新種群;
(5)判斷是否達(dá)到停止條件,如果滿足停止條件則輸出結(jié)果,否則返回步驟(2);
在特征選擇階段,每個個體表示為一個特征子集,使用蟻群算法來選擇最優(yōu)的特征子集,并記錄每個特征的信息素濃度。在參數(shù)優(yōu)化階段,使用遺傳算法對選定的特征子集進行參數(shù)優(yōu)化,生成新的個體。新生成的個體中包含最優(yōu)的特征子集和最優(yōu)的參數(shù)組合。最后,根據(jù)新生成的個體更新種群,并繼續(xù)執(zhí)行特征選擇和參數(shù)優(yōu)化的過程,直到達(dá)到終止條件。
通過融合蟻群算法和遺傳算法,混合算法能夠同時考慮特征選擇和參數(shù)優(yōu)化的問題。具體來說,蟻群算法通過選擇最優(yōu)的特征子集,提高了模型的泛化能力和解釋性;而遺傳算法通過優(yōu)化模型參數(shù),提高了模型的預(yù)測性能。兩種算法的結(jié)合可以在保持模型解釋性的同時,提高模型的預(yù)測性能。
在實現(xiàn)算法時,需要根據(jù)具體的問題設(shè)置不同的參數(shù),如蟻群算法中信息素濃度的初始值、信息素?fù)]發(fā)系數(shù)和信息素更新速率等,遺傳算法中種群大小、交叉率和變異率等。同時,也需要根據(jù)具體問題設(shè)置適當(dāng)?shù)耐V箺l件,如最大迭代次數(shù)和收斂閾值等。實現(xiàn)設(shè)計包含:基于蟻群算法的實現(xiàn)設(shè)計、基于遺傳算法的實現(xiàn)設(shè)計和混合算法的實現(xiàn)設(shè)計。
(1)基于蟻群算法的實現(xiàn)設(shè)計。采用基于概率的蟻群算法來進行特征選擇。具體地,用信息素表示每個特征的重要性,并根據(jù)信息素概率來選擇特征。信息素的更新采用蟻群算法中的公式進行計算。
(2)基于遺傳算法的實現(xiàn)設(shè)計。采用二進制編碼方式來表示參數(shù)配置,每個二進制位代表一個參數(shù)取值,通過交叉和變異操作來產(chǎn)生新的個體。適應(yīng)度函數(shù)采用交叉驗證法來計算,具體地,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集,用訓(xùn)練集來訓(xùn)練模型并計算預(yù)測精度,用測試集來評估模型的泛化能力。
(3)混合算法的實現(xiàn)設(shè)計。先用蟻群算法進行特征選擇,得到最優(yōu)的特征子集,然后用遺傳算法進行參數(shù)優(yōu)化,得到最優(yōu)的參數(shù)配置。具體地,將特征選擇和參數(shù)優(yōu)化看作兩個階段,先進行特征選擇,再進行參數(shù)優(yōu)化。
(4)算法優(yōu)化。為了加速算法收斂,采用了一些優(yōu)化技巧,如適應(yīng)度值緩存、精英選擇、多線程計算等。適應(yīng)度值緩存可以減少重復(fù)計算,精英選擇可以保留最優(yōu)的個體,多線程計算可以提高計算效率。
(5)參數(shù)調(diào)節(jié)。算法中的一些參數(shù)如種群大小、交叉概率、變異概率、信息素更新速率等需要進行調(diào)節(jié)。采用網(wǎng)格搜索和交叉驗證的方法來確定最優(yōu)的參數(shù)配置。具體地,將參數(shù)空間劃分為若干個網(wǎng)格,對每個網(wǎng)格進行交叉驗證,選擇最優(yōu)的參數(shù)配置。
通過以上實現(xiàn)細(xì)節(jié)的優(yōu)化和調(diào)節(jié),我們可以得到較好的特征選擇和參數(shù)優(yōu)化結(jié)果,從而提高機器學(xué)習(xí)模型的預(yù)測精度和泛化能力。
基于蟻群算法和遺傳算法的混合算法的偽代碼實現(xiàn)如下:
輸入:數(shù)據(jù)集D,特征集合F,種群大小N,最大迭代次數(shù)T,交叉概率Pc,變異概率Pm,信息素更新速率rho,特征選擇閾值alpha,遺傳算法參數(shù)范圍R,交叉驗證折數(shù)K
輸出:最優(yōu)的特征子集S,最優(yōu)的參數(shù)配置theta
//初始化蟻群算法參數(shù)
pheromone=initialize_pheromone(F)
best_ant=None
best_fitness=-inf
//開始迭代
for t in range(T):
//蟻群算法特征選擇階段
ants=generate_ants(N,F(xiàn),pheromone,alpha)
for ant in ants:
ant_fitness=evaluate_ant(ant,D,K)
if ant_fitness>best_fitness:
best_ant=ant
best_fitness=ant_fitness
update_pheromone(pheromone,best_ant,rho)
//遺傳算法參數(shù)優(yōu)化階段
population=initialize_population(R,N)
for i in range(N):
fitness=evaluate_individua(population[i],
best_ant,D,K)
population[i].fitness=fitness
if fitness >best_fitness:
theta=population[i].decode()
best_fitness=fitness
for_in range(T_ga):
new_population=[]
for i in range(N):
parents=select_parents(population)
child=crossover(parents,Pc)
child=mutate(child,Pm)
fitness=evaluate_individual(child,best_ant,D,K)
child.fitness=fitness
new_population.append(child)
if fitness >best_fitness:
theta=child.decode()
best_fitness=fitness
population=elitism_selection(population,
new_population)
//返回最優(yōu)的特征子集和參數(shù)配置
S=best_ant.features
theta=best_individual.decode()
return S,theta
其中,initialize_pheromone()函數(shù)用于初始化信息素矩陣,generate_ants()函數(shù)用于生成螞蟻,evaluate_ant()函數(shù)用于評估螞蟻的適應(yīng)度,update_pheromone()函數(shù)用于更新信息素矩陣,initialize_population()函數(shù)用于初始化遺傳算法種群,evaluate_individual()函數(shù)用于評估個體的適應(yīng)度,select_parents()函數(shù)用于選擇父代個體,crossover()函數(shù)用于進行交叉操作,mutate()函數(shù)用于進行變異操作,elitism_selection()函數(shù)用于進行精英選擇操作。
為了驗證基于蟻群算法和遺傳算法的混合算法在特征選擇和參數(shù)優(yōu)化問題上的有效性,設(shè)計實驗如下:
(1)數(shù)據(jù)集。使用UCI 機器學(xué)習(xí)庫中的4 個經(jīng)典數(shù)據(jù)集進行實驗,分別為Iris、Wine、Breast Cancer和Wdbc。
(2)實驗設(shè)置。對于每個數(shù)據(jù)集,將其隨機劃分為80%的訓(xùn)練集和20%的測試集,每個數(shù)據(jù)集實驗進行10 次重復(fù)實驗,報告平均結(jié)果和標(biāo)準(zhǔn)差。
對于特征選擇問題,比較我們的混合算法和單純的蟻群算法和遺傳算法在特征選擇準(zhǔn)確率上的表現(xiàn)。將選出的最優(yōu)特征子集用于支持向量機(SVM)分類任務(wù)。
對于參數(shù)優(yōu)化問題,比較我們的混合算法和單純的遺傳算法在參數(shù)優(yōu)化準(zhǔn)確率上的表現(xiàn)。將選出的最優(yōu)參數(shù)配置用于SVM進行分類任務(wù)。
(3)實驗指標(biāo)。以準(zhǔn)確率作為實驗衡量的指標(biāo),具體以特征選擇準(zhǔn)確率、參數(shù)優(yōu)化準(zhǔn)確率、分類準(zhǔn)確率作為實驗指標(biāo)。
(4)實驗參數(shù)。對于特征選擇問題,蟻群算法的種群大小設(shè)置為50,信息素?fù)]發(fā)因子為[0.1,0.5],信息素常數(shù)設(shè)置為10,啟發(fā)函數(shù)重要程度因子設(shè)置為5,最大迭代次數(shù)設(shè)置為100,特征選擇閾值alpha設(shè)置為0.5。
對于參數(shù)優(yōu)化問題,遺傳算法的種群大小設(shè)置為50,交叉概率Pc 和變異概率Pm 分別設(shè)置為0.8 和0.1,最大迭代次數(shù)設(shè)置為100,參數(shù)范圍R設(shè)置為[0.01,100]。
我們將實驗結(jié)果分為特征選擇和參數(shù)優(yōu)化兩個部分進行分析。
(1)特征選擇。在特征選擇問題上各個算法的準(zhǔn)確率如表1所示。

表1 各算法的準(zhǔn)確率
從表1可看出,混合算法在所有數(shù)據(jù)集上的特征選擇準(zhǔn)確率均優(yōu)于蟻群算法和遺傳算法,表明混合算法可以更有效地挖掘數(shù)據(jù)集中的關(guān)鍵特征。
使用選出的最優(yōu)特征子集來訓(xùn)練SVM,并在測試集上進行分類任務(wù),各個算法在分類任務(wù)上的準(zhǔn)確率如表2所示。

表2 各算法在分類任務(wù)上的準(zhǔn)確率
從表2可看出,混合算法在所有數(shù)據(jù)集上的分類準(zhǔn)確率均優(yōu)于蟻群算法和遺傳算法,表明混合算法選出的特征子集可以更好地區(qū)分不同類別。
(2)參數(shù)優(yōu)化。遺傳算法和混合算法在參數(shù)優(yōu)化問題上的準(zhǔn)確率如表3所示。

表3 遺傳算法和混合算法在不同數(shù)據(jù)集上的準(zhǔn)確率
從表3可看出,混合算法在所有數(shù)據(jù)集上的參數(shù)優(yōu)化準(zhǔn)確率均優(yōu)于遺傳算法,表明混合算法可以更快地找到最優(yōu)參數(shù)配置。
使用選出的最優(yōu)參數(shù)配置來訓(xùn)練SVM,并在測試集上進行分類任務(wù),遺傳算法和混合算法在分類任務(wù)上的準(zhǔn)確率如表4所示。

表4 最優(yōu)參數(shù)配置后遺傳算法和混合算法的準(zhǔn)確率
從上表可看出,混合算法在所有數(shù)據(jù)集上的分類準(zhǔn)確率均優(yōu)于遺傳算法。綜合實驗表明,混合算法在參數(shù)優(yōu)化和特征選擇問題上都具有較好的性能。
本文提出了一種基于蟻群算法和遺傳算法的機器學(xué)習(xí)特征選擇和參數(shù)優(yōu)化混合算法。該算法首先使用蟻群算法來選擇最優(yōu)特征子集,然后使用遺傳算法來優(yōu)化SVM 分類器的參數(shù)配置。實驗結(jié)果表明,混合算法在各個數(shù)據(jù)集上的分類準(zhǔn)確率均優(yōu)于蟻群算法和遺傳算法,證明了混合算法的有效性。未來的研究可以探索更多的混合算法,如基于粒子群優(yōu)化和遺傳算法的混合算法,以提高機器學(xué)習(xí)準(zhǔn)確度。