趙汝濤 王 菁
(北方工業大學大規模流數據集成與分析技術北京市重點實驗室 北京 100144)
生活中很多領域需要用到數據分析,但是根據不同的數據集選擇合適的模型并訓練、優化參數是一件專業、復雜且耗時的事情,且進行數據分析對業務人員的專業水平和經驗都要求非常高,如何根據數據集自動生成機器學習流程(pipeline)是一個難點問題。針對此問題,研究學者開展了AutoML(Automated Machine Learning)研究。AutoML旨在以數據驅動,客觀和自動化的方式做出這些決策:用戶只需提供數據,而AutoML系統會自動確定最適合該特定應用程序的方法[1]。
因為在實踐中探索原始元素和超參數值的整個空間是不可行的,所以這些系統使用復雜的搜索策略來修剪空間并減少需要評估的pipeline數量[2]。AutoML的主要實現方法有:網格搜索方法、隨機搜索方法、貝葉斯方法、啟發式方法、基于語法的方法等。在當前AutoML工具當中,AutoWeka[3]使用貝葉斯優化,Auto-sklearn[4]使用元學習,TPOT[5]使用遺傳編程,而AlphaD3M[6]使用強化學習。據本文了解,到目前為止這些AutoML中大部分都存在耗時長或者性能低的情況,且并沒有考慮將pipeline中primitive之間關聯關系進行利用。
本文從primitive服務關聯角度入手,定義了primitive服務關聯模型及挖掘算法,從歷史pipeline當中挖掘出primitive間的關聯關系,設計了結合服務關聯與數據特征的機器學習流程生成方法,可以在產生pipeline的性能和耗時維持在較好水平的同時,使產出pipeline的性能整體提升。
本文綜合數據特征與服務關聯的機器學習流程生成方法原理如圖1所示,主要分為這幾個模塊:LSTM預訓練模塊、GAME生成器模塊、LSTM生成器模塊和Coach模塊。
LSTM預訓練模塊指將數據集和任務作為輸入,訓練出預訓練LSTM model,在本文當中用于預測pipeline性能和primitive出現概率,訓練出的LSTM model供Coach內部使用。
GAME生成器用來生成博弈模型,博弈模型是一個針對于機器學習流程生成問題框定的單人游戲。
LSTM生成器模塊用于生成LSTM模型,連同博弈模型一起用于Coach的內部使用。
Coach模塊,以GAME生成器、LSTM生成器生成的博弈模型、LSTM和預訓練LSTM模型、best-model(預置或上次博弈勝出的模型)為輸入,生成兩個不同的玩家(圖1中的Player)互相博弈,博弈模型中以MCTS[6](蒙特卡洛樹搜索)為選點策略的玩家,其中,MCTS用于在巨大的搜索空間高效搜索節點,可用來解決primitive搜索空間過大問題。博弈完成后保留勝者的模型,該博弈過程稱為self-play。
機器學習流程生成方法的具體流程是:輸入數據集和任務,通過預訓練模型模塊產生預訓練模型,并利用GAME生成器生成博弈模型,以博弈模型為輸入通過LSTM生成器生成LSTM,將這些輸出一起作為Coach的輸入,在Coach內部根據這些輸入生成為兩個玩家:玩家1、玩家2,用self-play的方式去在博弈模型中博弈(先結束游戲的玩家為勝,即先生成可用機器學習流程的玩家為勝),博弈時使用MCTS算法選擇primitive,MCTS中以LSTM(數據特征角度)、服務關聯(流程角度)兩者共同作為MCTS的選擇策略,最終保留獲勝玩家的LSTM模型,用于下次指導MCTS選擇primitive,從而用強化學習的方法達到不斷自我優化的目的。
本文將上述MCTS使用LSTM和服務關聯共同指導來生成機器學習流程的方法簡稱為DFSR方法。
通過分析機器學習流程中存在的服務關聯關系,在Matthew B.Dwyer的系統特性規范模式[11]基礎上,將primitive服務關聯關系定義如下:

例如對LL0_13_breast_cancer數據集執行分類任務的機器學習流程當中primitive間的存在的部分關聯關系示例如表1所示,根據關聯關系程度不同分為強關聯和弱關聯,最終整生成primitive服務關聯約束模型。

表1 Primitive服務關聯關系示例
Occurrence patterns(發生模式)(a、b均代表單個primitive):
“stron g exist directly”:表示a緊鄰b出現,且為強約束關系。
“weak exist d i rect ly”:表示a可能緊鄰b出現,弱約束關系。
Order pattern(模式發生順序):
“a fter”:表示發生模式一直到b出現后才會發生。
2.3.1 Primitive服務關聯模型
Primitive服務關聯關系模型用于表示primitive之間的二元行為約束關系,可以表示為一個四元組:
l i=
其中:linkID是服務超鏈的唯一標識。linkID=?(sourceI D,tar getI D),其 中 ? 是 由sourceID和targetID唯一確定l inkI D取值的函數,例如?可以表示為sourceI D+"_"+t argetID。sourceID是源primitive的唯一標識。target ID是目標primitive的唯一標識。consT ype表示兩個primitive之間的二元約束關系。
2.3.2 挖掘算法
假設S和T為primitive,將需要的數據構建成頻度表,其中包含以下信息:
&S:S在其他primitive前直接出現的總次數;
S>T:T在S之后直接出現的次數;
S→T:T在S之后直接出現的概率。

表2 頻度表(示例s為sklearn.preprocessing.KBinsDiscretizer)
為了準確反映服務行為約束的強度,在傳統流程挖掘算法中結合AutoML的情況,考慮了機器學習流程的性能指標,本文過濾掉性能過低的機器學習流程結果,使用挖掘算法計算最終的primitive的前后關聯關系。基于以上定義,提出基于機器學習流程案例挖掘以發現primitive間二元服務行為約束關系的算法。
算法1服務關聯挖掘算法
輸入file:生成機器學習流程歷史數據
primitives:生成機器學習流程所需要的primitive
輸出factor:服務關聯系數結果
算法的大致流程為:
Step1輸入所有待計算的primitives和待挖掘的文本文件file,file是包含機器學習流程的數據文件,其中包含機器學習流程和機器學習流程的性能數據。
Step2初始化所有primitive。
Step3從file中統計出每個primitive在緊隨其他primitive之前和之后出現的次數。
Step4然后嵌套兩層循環,第一層為S(服務關聯中前一個primitive),第二層為T(服務關聯中后一個primitive),分別統計出S>T和&S次數,并利用兩者的結果計算出每一個S→T的結果。
Step5將統計結果更新到factor(字典結構,用于記錄每一個S→T的結果),最后程序將挖掘結果factor輸出。
MCTS接收s和a作為輸入,s指代的是當前數據集的數據特征和機器學習流程,a指代的是action:當前所選的primitive在MCTS中的表述,主要是為了方便于系統操作,將primitive結合相應的語法做出的結構調整,調整后以action的形式呈現。
MCTS接收s和a之后,分別查詢出a在s下的LSTM預測值和服務關聯預測值,將最終結果用于指導MCTS選點。MCTS的輸出是一組action的預測值,玩家在此組action中選出最佳action用于生成機器學習流程,進而和另外一個玩家對抗。
受AlphaD3M的啟發,本文考慮到MCTS的UCT算法當中僅考慮下步操作的情況,在其基礎上引入primitive服務關聯約束模型,與LSTM方法不同,LSTM從數據特征角度給MCTS以指導,服務關聯關注的是在流程中前后primitive之間的約束關系,從流程的服務關聯角度給MCTS以指導,利用歷史經驗來對每一個有關聯約束強度的action進行指導,從而整體提高機器學習流程的性能。
具體做法是:在MCTS的基礎上加入服務關聯關系T(l,a),使用服務關聯和LSTM的預測值共同指導MCTS的選擇,由于這個self-play循環過程是強化學習,在強化學習中存在a在s中的強化學習獎勵值、不存在a在s中的強化學習獎勵值兩種情況,根據情況不同,更改后MCTS的上限綁定更新規則的隨機搜索公式如下:

其中,T(l,a)公式是:

wT(l,a):其中l是當前所選action指代的primitive在pipeline中的前一個primitive,a是當前所選action,T(l,a)是前后primitive間的約束強度(通過挖掘到的關聯強度表獲得),當關聯約束關系是“strong exist”時,T(l,a)輸出值為1,當關聯約束關系是“weak exist”時,T(l,a)輸出值為τ的值,當關聯約束關系是“always absent”時,T(l,a)輸出值為0;強弱界定閾值默認為0.06。w是根據LSTM和UCT輸出值大小制定的權值,將T值限制到LSTM預測值的相同數量級,以確保它們具有同等的決策力。
Q(s,a):Q(s,a)是當前action在當前數據集的數據特征和機器學習流程中的預期獎勵值,用于強化學習。
cP(s,a)和cP(s,a)sqrt(N(s)):其中,N(s)是當前數據集的數據特征和機器學習流程s被訪問的次數;N(s,a)是action在當前數據集的數據特征和機器學習流程s當中被訪問次數。P(s,a)是LSTM對從狀態s采取行動a的概率的估計,c是決定探索量的常數。
這樣,每次循環,當整個公式最終的結果大于新的閾值時,MCTS更新閾值將會更新為當前action的U值,最終選出當前actions中評分最高的action,用于指導MCTS對最優action的選擇。如果選擇的action既有LSTM預測值,又有服務關聯約束值,就意味著該action對于當前數據集的數據特征和機器學習流程有更大價值,那么將比其他普通action更容易成為best action,從而從眾多actions中脫穎而出,循環多次后最終結果中將具有更多包含服務關聯信息的pipeline,而這些服務關聯信息是由滿足高性能條件的機器學習流程中提取而來,意味著這種具有服務關聯關系的前后primitive搭配更有希望成為高性能的機器學習流程,進而提高生成的整體機器學習流程性能。
綜合數據特征和服務關聯的DFSR MCTS算法描述如下:
算法2 DFSR MCTS算法
輸入board:當前博弈模型中的配置信息
player:當前玩家
numMCTSSims:MCTS規定模擬次數
輸出probs:一組action的預測值
算法的大致流程為
Step1輸入博弈模型中的board(內容是當前博弈模型的當前數據集的數據特征和機器學習流程,包含可選action、當前機器學習流程等信息)、玩家、numMCTSsims。
Step2然后循環運行numMCTSsims次,每次循環,初始化本次循環當前數據集的數據特征和機器學習流程和玩家的狀態信息,清空上次循環的數據,獲取本次循環的數據。
Step3接下來使用服務關聯和LSTM共同指導從可選action列表中選取綜合評分最高的action,替換到當前數據集的數據特征和機器學習流程中的機器學習流程上面(初始機器學習流程是一個模板,替換就是查找出該action在機器學習流程中所屬的位置,然后替換到模板相應的位置),再次遞歸,每次遞歸到最后的節點后,都會向上反向傳播每個點的概率值。
Step4如此多次循環后返回一組包含所有可選action的概率值probs。
實驗使用的數據集來源于OpenML。實驗執行分類任務,性能評價指標選擇為f1_macro。實驗環境如下:
操作系統:Ubuntu18.04;內存:8G;CPU:Intel Pentium(R)CPU G4400 3.30GHz;GPU:Nvidia GTX950;GPU內存:4G。
首先進行數據集劃分,每個待運行的數據集為測試集,其余為訓練集(剔除每次訓練集的關聯約束結果)。之后使用TPOT、Autostacker、AlphaD3M和DFSR分別對數據集執行相同任務并對輸出結果做對比。實驗過程中,對每個數據集運行多次,分別記錄了所有產出pipeline的性能和總耗時,最后對實驗結果進行了對比。
將本文提出的DFSR方法與TPOT、Autostacker、AlphaD3M在生成的機器學習流程性能和總耗時方面進行了比較,結果如圖2、3所示。

圖2 機器學習流程的整體性能對比

圖3 生成機器學習流程的整體耗時對比
圖2顯示的是生成的所有pipeline的性能結果對比。從中可以看出,使用DFSR方法生成的pipeline性能達到了目前AutoML的良好水平。在所有數據集上,使用DFSR方法產生的pipeline性能都高于AlphaD3M。在第一個數據集中,使用DFSR方法產生的性能結果高于TPOT,僅次于Autostacker。在第三個數據集中,使用DFSR方法產生的性能結果高于AutoStacker,僅次于TPOT。
圖3顯示的是生成的所有pipeline的總耗時對比。從中可以看出,在運行同一數據集的總耗時方面,AlphaD3M和DFSR方法遠低于TPOT和Autostacker,執行任務的總耗時從TPOT和Autostacker的小時級別下降到分鐘級別;此外,由于服務關聯的數量,DFSR方法在不同的數據集上比AlphaD3M多十幾秒到幾十秒不等。
分析實驗結果,降低耗時的原因是由于本文的DFSR方法使用的primitive選擇方式與大多數AutoML生成過程中選擇primitive不同,大多數AutoML選擇的方法是預置一系列模型,然后嘗試每個模型,在嘗試過程中使用各種算法進行參數調整,然后選擇效果好的模型使用。而本文使用的方法是根據數據特征和問題定義去預測機器學習流程每個階段所需要的primitive,將機器學習流程結構化、工程化,使用神經網絡預測來選擇模型而不是全部嘗試之后選擇模型,減少了大量計算時間,從而維持良好的機器學習流程性能水平的同時,降低時間消耗。
此外,由于本文使用了博弈策略,所以理論上輸出LSTM模型對生成機器學習流程指導意義更大,同時加上服務關聯又可以利用到性能良好的機器學習流程的歷史經驗,所以生成的機器學習流程整體性能可以達到良好水平。
本文介紹了一種在數據分析領域中根據數據集自動生成pipeline的方法,通過結合數據特征與服務關聯關系,在耗時方面極大的縮短了AutoML耗時,將總耗時縮短至分鐘級。在數據分析領域,本文提出的這種方式,將AutoML和服務組合兩個領域的技術應用到了機器學習的pipeline流程生成,為pipeline合成提供了一個新思路。