轉(zhuǎn)帖|實(shí)施案例|編輯:龔雪|2017-04-13 09:42:54.000|閱讀 420 次
概述:達(dá)觀數(shù)據(jù)團(tuán)隊(duì)分享基于大數(shù)據(jù)的機(jī)器學(xué)習(xí)應(yīng)用經(jīng)驗(yàn)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
文|紀(jì)傳俊
文章開篇之前,先來點(diǎn)福利:(點(diǎn)擊文字報(bào)名)
大數(shù)據(jù)時(shí)代里,互聯(lián)網(wǎng)用戶每天都會直接或間接使用到大數(shù)據(jù)技術(shù)的成果,直接面向用戶的比如搜索引擎的排序結(jié)果,間接影響用戶的比如網(wǎng)絡(luò)游戲的流失用戶預(yù)測、支付平臺的欺詐交易監(jiān)測等等。達(dá)觀數(shù)據(jù)技術(shù)團(tuán)隊(duì)開發(fā)過智能文本內(nèi)容審核系統(tǒng)、作弊監(jiān)測系統(tǒng)、用戶建模系統(tǒng)等多個(gè)基于大數(shù)據(jù)技術(shù)的應(yīng)用系統(tǒng)。機(jī)器學(xué)習(xí)是大數(shù)據(jù)挖掘的一大基礎(chǔ),本文以機(jī)器學(xué)習(xí)為切入點(diǎn),將達(dá)觀在大數(shù)據(jù)技術(shù)實(shí)踐時(shí)的一些經(jīng)驗(yàn)與大家分享。
互聯(lián)網(wǎng)的海量數(shù)據(jù)不可能靠人工一個(gè)個(gè)處理,只能依靠計(jì)算機(jī)批量處理。最初的做法是人為設(shè)定好一些規(guī)則,由機(jī)器來執(zhí)行。比如明確指定計(jì)算機(jī)給男性、30歲的用戶推送汽車廣告。很明顯如此粗略的規(guī)則不會有好效果,因?yàn)閷θ巳旱亩ㄎ徊粔?精確。要提高精度必須增加對用戶的特征描述。但特征一多規(guī)則就很難制定,即使定下了規(guī)則也沒法根據(jù)實(shí)際情況靈活變化。機(jī)器學(xué)習(xí)可以很好的解決以上問題,從一定程度上賦予了計(jì)算機(jī)以“學(xué)習(xí)”的能力,使得千人千面成為可能。
圖 1 面對大量的特征,人工難以確定使用的規(guī)則
機(jī)器學(xué)習(xí)以統(tǒng)計(jì)學(xué)為理論基礎(chǔ),利用算法讓機(jī)器具有類似人類一般的自動“學(xué)習(xí)”能力,即對已知的訓(xùn)練數(shù)據(jù)做統(tǒng)計(jì)分析從而獲得規(guī)律,再運(yùn)用規(guī)律對未知數(shù)據(jù)做預(yù)測分析。機(jī)器學(xué)習(xí)主要包含四大類別:有監(jiān)督學(xué)習(xí),無監(jiān)督學(xué)習(xí),半監(jiān)督學(xué)習(xí)和增強(qiáng)學(xué)習(xí)。
有監(jiān)督學(xué)習(xí),顧名思義,是在“人類監(jiān)督”下學(xué)習(xí),要求訓(xùn)練數(shù)據(jù)既有特征也有目標(biāo),目標(biāo)是人為設(shè)定好的。以文本分類為例,一篇文章的字、詞、句、段是其特征(文本的內(nèi)容是什么),文章的類別(時(shí)事、科技、娛樂等等)就是目標(biāo)。訓(xùn)練集文章的類別是人為設(shè)定的,相當(dāng)于明確告訴機(jī)器什么樣的內(nèi)容該屬于什么類別,機(jī)器在此基礎(chǔ)上總結(jié)規(guī)律。無監(jiān)督學(xué)習(xí)就是數(shù)據(jù)只有特征沒有目標(biāo),最常見的算法是聚類。聚類算法會把相似的樣本聚集成一個(gè)子集,優(yōu)點(diǎn)是數(shù)據(jù)無需人工標(biāo)注,但缺點(diǎn)也很明顯——無法給出子集的實(shí)際含義。半監(jiān)督學(xué)習(xí)介于有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)之間,其訓(xùn)練集數(shù)據(jù)有一小部分是人工標(biāo)注過的。增強(qiáng)學(xué)習(xí)強(qiáng)調(diào)基于環(huán)境而行動,在探索未知領(lǐng)域和遵從現(xiàn)有只是之間尋求平衡。
有監(jiān)督學(xué)習(xí)的研究起步較早,方法比較成熟。在大多數(shù)應(yīng)用場景中,我們希望機(jī)器輸出的結(jié)果具有實(shí)際含義,比如文本分類就是讓機(jī)器告訴我們一篇文章是時(shí)事還是科技類文章。這樣的場景下有監(jiān)督學(xué)習(xí)也更為適用。有監(jiān)督學(xué)習(xí)主要包含回歸分析和統(tǒng)計(jì)分類兩大類算法。
回歸分析建模的是自變量和因變量之間的相關(guān)關(guān)系(如圖2所示),在機(jī)器學(xué)習(xí)領(lǐng)域,自變量是樣本的特征向量,因變量是預(yù)測值。回歸分析最經(jīng)典的應(yīng)用場景是廣告點(diǎn)擊率(CTR)預(yù)估。簡單而言,CTR預(yù)估是根據(jù)用戶數(shù)據(jù)和廣告數(shù)據(jù),估計(jì)用戶點(diǎn)擊某個(gè)廣告的可能性大小。我們假設(shè)用戶數(shù)據(jù)+廣告數(shù)據(jù)和廣告點(diǎn)擊率之間的關(guān)系符合某個(gè)分布,使用回歸分析方法在已有點(diǎn)擊數(shù)據(jù)上擬合出該分布。達(dá)觀科技在線上預(yù)測時(shí)就把用戶數(shù)據(jù)和廣告數(shù)據(jù)作為輸出傳給擬合出的分布,得到用戶點(diǎn)擊該廣告的概率值。
圖 2 回歸分析示意圖
統(tǒng)計(jì)分類要解決的問題是,如何將一個(gè)樣本點(diǎn)分到類別集合中的一個(gè)或多個(gè)類,比如圖3所表示的就是將數(shù)據(jù)分為3個(gè)類。
圖 3 統(tǒng)計(jì)分類示意圖
現(xiàn)實(shí)場景中我們往往需要把數(shù)據(jù)分成不同的類別,以方便我們分析和使用,因而統(tǒng)計(jì)分類方法具有廣闊的應(yīng)用范圍。達(dá)觀數(shù)據(jù)團(tuán)隊(duì)開發(fā)的用戶建模、內(nèi)容審核系統(tǒng)、反作弊系統(tǒng)等都使用到了統(tǒng)計(jì)分類模型。比如反作弊系統(tǒng),目的是區(qū)分用戶行為是否作弊,抽象出來就是個(gè)分類問題:輸入是用戶的各種行為數(shù)據(jù)經(jīng)過處理后得到的特征,輸出只有兩個(gè)類別——“作弊”和“非作弊”。接下來我就簡單介紹一下最具代表性的分類算法——支持向量機(jī)(Support Vector Machine, SVM),一窺機(jī)器學(xué)習(xí)的工作原理。SVM絕不是入門級的機(jī)器學(xué)習(xí)算法,選擇介紹它是因?yàn)椋瑱C(jī)器學(xué)習(xí)需要解決的數(shù)據(jù)線性不可分、過擬合等問題,SVM都給出了比較可靠的解決方案,借此我們也可以對機(jī)器學(xué)習(xí)有個(gè)大概的認(rèn)識。
SVM針對分類問題的前提假設(shè)直觀易懂,由此推演出的模型求解過程也是順理成章一氣呵成。我們通常先從最簡單的情況入手,假設(shè)數(shù)據(jù)是線性可分的。SVM認(rèn)為此時(shí)的最優(yōu)分類面,是使得樣本集到分類面的最小幾何距離最大化的超平面,這個(gè)距離成為“間隔(margin)”。如圖4所示,黑色實(shí)線就是最優(yōu)分類面,兩邊兩條虛線之間的幾何距離就是此時(shí)的最優(yōu)間隔。數(shù)據(jù)點(diǎn)離分類面越遠(yuǎn),分類的置信度也越高。
圖 4 SVM最優(yōu)分類面示意圖
SVM假設(shè)線性分類面的函數(shù)形式為
鑒于篇幅關(guān)系,我們略去推導(dǎo)過程。在最大化間隔的假設(shè)下,可以得到SVM的原目標(biāo)函數(shù)為:
其中表示第i個(gè)樣本的特征向量,是第i個(gè)樣本的類標(biāo)簽,SVM令。由約束條件可知,樣本點(diǎn)必然落在最優(yōu)間隔的邊緣(圖4中虛線)上或外面,通過推導(dǎo)分析最終可以知道,只有落在間隔邊緣上的少量數(shù)據(jù)點(diǎn)決定了分類面,這些樣本被稱為支持向量,而其他的點(diǎn)沒有任何作用。這一特性大大節(jié)省了求解SVM的計(jì)算量。
按照達(dá)觀數(shù)據(jù)的經(jīng)驗(yàn),真實(shí)環(huán)境的問題往往是線性不可分的,數(shù)據(jù)采集的時(shí)候也不可避免的會引入噪聲。應(yīng)對這兩種情況只需對原始SVM模型做有限的一點(diǎn)改進(jìn)。針對數(shù)據(jù)線性不可分的情況,SVM通過引入核函數(shù)(Kernel Function)將數(shù)據(jù)映射到高維空間來解決,圖5直觀的表示了映射的過程。核函數(shù)實(shí)際上是兩個(gè)數(shù)據(jù)點(diǎn)在高維空間中的內(nèi)積。它先在原空間進(jìn)行計(jì)算再將結(jié)果映射到高維空間,避免了先把數(shù)據(jù)點(diǎn)映射到高維空間再計(jì)算所可能導(dǎo)致的維數(shù)災(zāi)難問題。核函數(shù)可以從容的處理包括無限維在內(nèi)的任何特征空間映射。
圖 5 SVM核函數(shù)的作用原理圖
過擬合(Overfitting)表現(xiàn)為在訓(xùn)練數(shù)據(jù)上模型的預(yù)測錯誤很低,在未知數(shù)據(jù)上預(yù)測錯誤卻很高。圖6的藍(lán)色曲線代表訓(xùn)練錯誤,紅色曲線代表真實(shí)錯誤,可以看到隨著模型復(fù)雜度的升高,模型對訓(xùn)練數(shù)據(jù)的擬合程度越好(訓(xùn)練錯誤越低),但到了一定程度之后真實(shí)錯誤反而上升,即為過擬合。
圖 6 過擬合
過擬合主要源于我們采集的訓(xùn)練樣本帶有噪聲,有部分樣本嚴(yán)重偏離其正常位置,統(tǒng)計(jì)學(xué)上稱之為outlier。前面已經(jīng)提到,決定SVM最優(yōu)分類面的只是占少數(shù)的支持向量,如果碰巧這些支持向量中存在outlier,而我們又要求SVM盡可能完美的去擬合這樣的數(shù)據(jù),得到的分類面可能就會有問題。如圖7所示,黑色加粗虛線代表最優(yōu)分類面,帶黑圈的藍(lán)色數(shù)據(jù)點(diǎn)代表outlier。可以看到outlier嚴(yán)重偏離了正常藍(lán)色數(shù)據(jù)點(diǎn)的位置,所在位置又恰巧使其成為了支持向量,導(dǎo)致了最終的分類面(深紅色實(shí)線)嚴(yán)重偏離最優(yōu)分類面。
圖7 數(shù)據(jù)噪聲對SVM的影響
解決辦法非常簡單而巧妙, Corinna Cortes與Vapnik為SVM引入了松弛變量(slack variable),將公式(2)的約束條件修改為:
其中即為松弛變量。從圖8可以看到,引入松弛變量即容忍了outlier的偏移量,抵消了outlier對分類面的負(fù)面影響。
圖 8 松弛變量的作用
但容忍也不可以是無限制的,否則任意超平面都可以是“最優(yōu)”超平面。因此公示(2)中的目標(biāo)函數(shù)也需要相應(yīng)的修改,限制松弛變量的總和盡量的小:
(4)
公示(4)可以理解為,在對outlier做出有限度的容忍情況下尋找使間隔最大化的最優(yōu)超平面,至此才是一個(gè)能實(shí)際應(yīng)用的完整SVM。如果想詳細(xì)了解SVM的來龍去脈,推薦《An Introduction to Support Vector Machines and other kernel-based learning methods》(中文譯本《支持向量機(jī)導(dǎo)論》,李國正翻譯)。
經(jīng)過長期的不斷摸索,我們積累了不少讓機(jī)器學(xué)習(xí)理論能真正實(shí)用的經(jīng)驗(yàn)。機(jī)器學(xué)習(xí)的方法都各有特點(diǎn),SVM也不是萬能的算法,實(shí)際應(yīng)用中應(yīng)該根據(jù)具體情況選擇合適的方法。選好方法,到獲得我們預(yù)期的效果之間,還需要經(jīng)過一番細(xì)心調(diào)校,調(diào)校的基礎(chǔ)是對所選方法的數(shù)學(xué)模型的理解,以及對當(dāng)前問題和數(shù)據(jù)的深入分析。
調(diào)參數(shù)是最基礎(chǔ)的步驟,雖看似簡單卻也內(nèi)有乾坤。不同模型可以調(diào)節(jié)的參數(shù)數(shù)量不同,可以采取“抓大放小”的原則,調(diào)節(jié)少數(shù)幾個(gè)(數(shù)量最好控制在1到2個(gè))影響最大的參數(shù),否則參數(shù)的組合呈指數(shù)級增長會變得難以調(diào)節(jié)。
大多數(shù)模型都有一個(gè)控制過擬合的參數(shù),據(jù)我們的經(jīng)驗(yàn)來看,一般情況下這個(gè)參數(shù)對預(yù)測效果的好壞影響最大。對于SVM模型,前文提到過的限制松弛變量部分的C參數(shù)就起到控制過擬合的作用,調(diào)節(jié)C參數(shù)一般也能看到預(yù)測效果出現(xiàn)較大變化。此外,如果使用了高斯核函數(shù)將原始特征空間映射到無限維,那高斯核參數(shù)往往需要調(diào)節(jié)。因?yàn)樘〉目梢园讶魏螖?shù)據(jù)都映射成線性可分,導(dǎo)致非常嚴(yán)重的過擬合問題。相反,太大會使得映射后的空間仍然是低維空間,起不到升維的效果。
調(diào)參數(shù)需要用預(yù)測效果來比較還壞,有人可能會問,那該如何測試才能比較客觀的檢驗(yàn)參數(shù)甚至模型的有效性?我們的測試方法主要有兩種:離線測試和在線測試。離線測試時(shí)我們只有訓(xùn)練數(shù)據(jù),一般會采用學(xué)術(shù)界常用的交叉驗(yàn)證方法。如圖9所示,我們將訓(xùn)練數(shù)據(jù)平均分為n份,在這n份數(shù)據(jù)上進(jìn)行n次循環(huán),每次取其中一份作為檢驗(yàn)集(Validation Set),其他n-1份作為訓(xùn)練集(Training Set)。最后對n次預(yù)測的結(jié)果求平均,以平均得分來對比不同的參數(shù)和模型。n一般取5、10或者20。
圖 9 交叉驗(yàn)證
離線測試得到滿意的性能提升之后,就可以進(jìn)行在線測試。離線測試效果好,并不意味著上線就能取得滿意效果。在線測試采用工業(yè)界廣泛使用的AB測試,首先我們會從線上切一小部分流量(B流量)給新模型、新參數(shù),將效果和使用原先的模型和參數(shù)的主流量(A流量)進(jìn)行對比,如果效果有所提升,再增加B流量的比例。測試通過了就可以全流量上線。
業(yè)界這么多年的實(shí)踐經(jīng)驗(yàn)已經(jīng)證明,能給機(jī)器學(xué)習(xí)系統(tǒng)的性能帶來較大提升的,不是換新模型或者調(diào)參數(shù),而是特征工程,andrew ng也說過,“Applied machine learning” is basically feature engineering.”。機(jī)器學(xué)習(xí)只是提供了通用的算法,不可能根據(jù)不同的應(yīng)用場景去調(diào)整自身的數(shù)學(xué)模型或算法。這就需要我們加入一些人工干預(yù)。
特征工程基于不同應(yīng)用的領(lǐng)域知識對樣本提取關(guān)鍵特征,讓機(jī)器學(xué)習(xí)算法能夠發(fā)揮出最優(yōu)效果。相對而言特征工程是比較耗費(fèi)人力的步驟,實(shí)際操作中也會遇到較多困難,解決辦法只有一個(gè):了解你的問題,了解你的數(shù)據(jù)。做反作弊檢測的時(shí)候,我們是細(xì)致觀察過作弊用戶的行為數(shù)據(jù),做過一些簡單的統(tǒng)計(jì)分析。對作弊用戶的行為模式有一定的概念,才能設(shè)計(jì)出有用的特征讓預(yù)測效果達(dá)到要求。
進(jìn)入大數(shù)據(jù)時(shí)代,我們面臨的都是海量數(shù)據(jù)的處理問題。我們處理的大數(shù)據(jù)集合,在完成特征工程之后,通常得到的特征維數(shù)很高,上千萬維的特征也不少見。在某些應(yīng)用場景下,比如文本分類,當(dāng)樣本數(shù)量足夠多、特征維數(shù)足夠大的時(shí)候,我們發(fā)現(xiàn)非線性模型的效果并沒有比線性模型高出多少,但計(jì)算效率明顯差很多。這也是臺灣林智仁教授及其團(tuán)隊(duì)繼LIBSVM之后又推出了LIBLINEAR的原因,LIBLINEAR確實(shí)更符合當(dāng)下大數(shù)據(jù)處理的要求:快速、高效、性能有保證。如果數(shù)據(jù)量較大特征維數(shù)較多,線性模型是不錯的選擇;一方面,線性模型可以在效果達(dá)到使用要求的前提下保證在線應(yīng)用的及時(shí)響應(yīng),另一方面也節(jié)約了離線訓(xùn)練的計(jì)算時(shí)間,可以提高特征工程迭代的效率。
大數(shù)據(jù)時(shí)代之下,如何從已經(jīng)積累的數(shù)據(jù)中挖掘出“金礦”以提高企業(yè)效益,已日漸成為各行各業(yè)的普遍痛點(diǎn)。設(shè)想一下如果能讓每個(gè)企業(yè)都用上大數(shù)據(jù)技術(shù),我們整體的經(jīng)濟(jì)效率必將有明顯的提升。達(dá)觀數(shù)據(jù)科技非常愿意與所有企業(yè)分享我們的經(jīng)驗(yàn)和能力,助力各個(gè)企業(yè)享受大數(shù)據(jù)技術(shù)的成果。
更多行業(yè)資訊,更新鮮的技術(shù)動態(tài),盡在。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn