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