個性化推薦系統是達觀資料在金融、電商、媒體、直播等行業的主要產品之一。在達觀資料的個性化推薦系統架構中, 可以簡單地分為5層架構,每層處理相應的資料輸出給下一層使用,分別是:
資料處理層 作為推薦系統最低端的資料處理層,主要功能是首先將客戶上傳上來的一些無用的噪聲資料進行清理過濾,將推薦系統所需要用到的資料匯入到資料儲存層中;
資料儲存層 對於item的資料一般存入在Mysql中,隨著資料量越來越大的item的資料,相比Mysql的擴充套件性來說,HBase和Hive是一個更好的選擇,Hive可以方便離線分析時操作。而對於實時模組,以及一些用程式同步相關的模組,實時性要求比較高的,redis就可以派上用場了,作為快取,生產者生產資料寫入redis供消費者讀取;
生成候選集 通過一系列的基礎演算法如協同過濾,content-base,點選反饋,熱門等資料給每個使用者生成個性化的候選集;
融合候選集 將各個演算法生成的候選集的item按照一系列規則進行融合過濾。
重排序 將融合過濾後的item集合用一定的演算法重新排序,將排序後的結果輸出到使用者,這邊主要常用到機器學習相關模型和演算法,如LR和GBDT。
本文將著重淺析一下重排序用到的整合學習演算法(Ensemble Method)
NO.1 整合學習概述
整合學習演算法本身不算一種單獨的機器學習演算法,而是通過構建並結合多個機器學習器來完成學習任務。可以說是集百家之所長,能在機器學習演算法中擁有較高的準確率,不足之處就是模型的訓練過程可能比較複雜,效率不是很高。
目前常見的整合學習演算法主要有2種:基於Bagging的演算法和基於Boosting的演算法,基於Bagging的代表演算法有隨機森林,而基於Boosting的代表演算法則有Adaboost、GBDT、XGBOOST等。
NO.2 基於Bagging演算法
Bagging演算法(裝袋法)是bootstrap aggregating的縮寫,它主要對樣本訓練集合進行隨機化抽樣,通過反覆的抽樣訓練新的模型,最終在這些模型的基礎上取平均。
基本思想
1.給定一個弱學習演算法,和一個訓練集;
2.單個弱學習演算法準確率不高;
3.將該學習演算法使用多次,得出預測函式序列,進行投票;
4.最後結果準確率將得到提高。
以隨機森林為例來詳解:
1 隨機森林基本原理
隨機森林由LeoBreiman(2001)提出,從原始訓練樣本集N中有放回地重複隨機抽取k個樣本生成新的訓練樣本集合,然後根據自助樣本集生成k個分類樹組成隨機森林,新資料的分類結果按分類樹投票多少形成的分數而定。其實質是對決策樹演算法的一種改進,將多個決策樹合併在一起,每棵樹的建立依賴於一個獨立抽取的樣品,森林中的每棵樹具有相同的分佈,分類誤差取決於每一棵樹的分類能力和它們之間的相關性。
2 隨機森林演算法過程
1 選取n個資料作為訓練資料輸入
從訓練資料中選取n個資料作為訓練資料輸入,一般情況下n是遠小於整體的訓練資料N的,這樣就會造成有一部分資料是無法被取到的,這部分資料稱為袋外資料,可以使用袋外資料做誤差估計。
2 構建決策樹
選取了輸入的訓練資料的之後,需要構建決策樹,具體方法是每一個分裂結點從整體的特徵集M中選取m個特徵構建,一般情況下m遠小於M。
3 分裂節點的選取
在構造每棵決策樹的過程中,按照選取最小的基尼指數進行分裂節點的選取進行決策樹的構建。決策樹的其他結點都採取相同的分裂規則進行構建,直到該節點的所有訓練樣例都屬於同一類或者達到樹的最大深度。
4 得到隨機森林
重複第2步和第3步多次,每一次輸入資料對應一顆決策樹,這樣就得到了隨機森林,可以用來對預測資料進行決策。
5 進行預測
輸入的訓練資料選擇好了,多棵決策樹也構建好了,對待預測資料進行預測,比如說輸入一個待預測資料,然後多棵決策樹同時進行決策,最後採用多數投票的方式進行類別的決策。
3 隨機森林注意點
1.在構建決策樹的過程中是不需要剪枝的。
2.整個森林的樹的數量和每棵樹的特徵需要人為進行設定。
3.構建決策樹的時候分裂節點的選擇是依據最小基尼係數的。
NO.3 基於Boosting演算法
提升演算法(Boosting)是常用的有效的統計學習演算法,屬於迭代演算法,它通過不斷地使用一個弱學習器彌補前一個弱學習器的“不足”的過程,來序列地構造一個較強的學習器,這個強學習器能夠使目標函式值足夠小。
基本思想
1.先賦予每個訓練樣本相同的概率;
2.然後進行T次迭代,每次迭代後,對分類錯誤的樣本加大權重(重取樣),使得在下一次的迭代中更加關注這些樣本。
Boosting系列演算法裡最著名演算法主要有AdaBoost演算法和提升樹(boosting tree)系列演算法。提升樹系列演算法裡面應用最廣泛的是梯度提升樹(Gradient Boosting Tree)。
以AdaBoost演算法作為代表演算法來詳解:
1 基本原理
Adaboost(adaptive boosting: boosting + 單層決策樹)是boosting中較為代表的演算法,基本思想是通過訓練資料的分佈構造一個分類器,然後通過誤差率求出這個若弱分類器的權重,通過更新訓練資料的分佈,迭代進行,直到達到迭代次數或者損失函式小於某一閾值。
假設訓練資料集為
其中有
2 演算法過程
1.初始化訓練資料的分佈
訓練資料的權重平均分佈為
其中
2.選擇基本分類器
這裡選擇最簡單的線性分類器
分類器選定之後,最小化分類誤差可以求得引數。
3.計算分類器的係數和更新資料權重
誤差率也可以求出來為。同時可以求出這個分類器的係數。
基本的Adaboost給出的係數計算公式為
然後更新訓練權重分佈為
其中規範因子為
4.得出分類器的組合
3 輸入標題
數學上可以證明,AdaBoost方法不斷擬合一個強學習器的過程其實是利用某種優化方法(如自適應牛頓法)使目標函式最小的過程。
NO.4 Bagging 和 Boosting 演算法異同
Bagging演算法與Boosting演算法的核心都是將一系列弱學習器的演算法按照特定的結合策略組合成強學習器的過程。兩者之間的區別在於以下幾點上:
1 樣本選擇
Bagging:訓練集是在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的。
Boosting:每一輪的訓練集不變,只是訓練集中每個樣例在分類器中的權重發生變化.而權值是根據上一輪的分類結果進行調整。
2 樣例權重
Bagging:使用均勻取樣,每個樣例的權重相等
Boosting:根據錯誤率不斷調整樣例的權值,錯誤率越大則權重越大。
3 預測函式
Bagging:所有預測函式的權重相等。
Boosting:每個弱分類器都有相應的權重,對於分類誤差小的分類器會有更大的權重。
4 平行計算
Bagging:各個預測函式可以並行生成。
Boosting:各個預測函式只能順序生成,因為後一個模型引數需要前一輪模型的結果。
NO.5 整合學習之結合策略
以上部分我們主要關注與學習器本身,對於學習器之間的結合策略並未涉及到,這一小節主要介紹常見的結合策略,主要有平均法,投票法,學習法。
1 平均法
對於數值類的迴歸預測問題,通常使用的結合策略是平均法,也就是說,對於若干和弱學習器的輸出進行平均得到最終的預測輸出。最簡單的平均是算術平均,也就是說最終預測為:
如果每個學習器有一個權重w,則最終預測為
其中是個體學習器的權重,有
2 投票法
假設我們的預測類別是,對於任意一個預測樣本x,我們的個弱學習器的預測結果分別是。 最簡單的投票法是相對多數投票法,也就是我們常說的少數服從多數,也就是個弱學習器的對樣本X的預測結果中,數量最多的類別為最終的分類類別。如果不止一個類別獲得最高票,則隨機選擇一個做最終類別。
稍微複雜點的投票有絕對多數投票法,也就是我們常說的要票過半數。在相對多數投票法的基礎上,不光要求獲得最高票,還要求票過半數。
更加複雜的是加權投票法,和加權平均法一樣,每個弱學習器的分類票數要乘以一個權重,最終將各個類別的加權票數求和,最大的值對應的類別為最終類別。
3 學習法
上兩節的方法都是對弱學習器的結果做平均或者投票,相對比較簡單,但是可能學習誤差較大,於是就有了學習法這種方法。對於學習法,代表方法是stacking,當使用stacking的結合策略時, 我們不是對弱學習器的結果做簡單的邏輯處理,而是再加上一層學習器,也就是說,我們將訓練集弱學習器的學習結果作為輸入,將訓練集的輸出作為輸出,重新訓練一個學習器來得到最終結果。
在這種情況下,我們將弱學習器稱為初級學習器,將用於結合的學習器稱為次級學習器。對於測試集,我們首先用初級學習器預測一次,得到次級學習器的輸入樣本,再用次級學習器預測一次,得到最終的預測結果。
NO.6 總結
Bagging和Boosting都是把若干個分類器整合為一個分類器的整合學習方法,只是整合的方式不一樣,最終得到不一樣的效果。下面是將決策樹與這些演算法框架進行結合所得到的新的演算法:
1.Bagging + 決策樹 = 隨機森林
2.AdaBoost + 決策樹 = 提升樹
3.Gradient Boosting + 決策樹 = GBDT
其中GBDT在達觀資料個性化推薦重排序層得到很好地應用。
作者:陳祥龍,達觀資料資料探勘工程師,畢業於復旦大學電腦科學與技術專業,現主要負責大型私有化推薦專案部署工作。