機器學習——海量數據挖掘解決方案

大數據時代裏,互聯網用戶每天都會直接或間接使用到大數據技術的成果,直接面向用戶的比如搜索引擎的排序結果,間接影響用戶的比如網絡遊戲的流失用戶預測、支付平臺的欺詐交易監測等等。達觀數據技術團隊開發過智能文本內容審覈系統、作弊監測系統、用戶建模系統等多個基於大數據技術的應用系統。機器學習是大數據挖掘的一大基礎,本文以機器學習爲切入點,將達觀在大數據技術實踐時的一些經驗與大家分享。

互聯網的海量數據不可能靠人工一個個處理,只能依靠計算機批量處理。最初的做法是人爲設定好一些規則,由機器來執行。比如明確指定計算機給男性、30歲的用戶推送汽車廣告。很明顯如此粗略的規則不會有好效果,因爲對人羣的定位不夠精確。要提高精度必須增加對用戶的特徵描述。但特徵一多規則就很難制定,即使定下了規則也沒法根據實際情況靈活變化。機器學習可以很好的解決以上問題,從一定程度上賦予了計算機以“學習”的能力,使得千人千面成爲可能。

圖 1 面對大量的特徵,人工難以確定使用的規則

有監督機器學習技術

機器學習以統計學爲理論基礎,利用算法讓機器具有類似人類一般的自動“學習”能力,即對已知的訓練數據做統計分析從而獲得規律,再運用規律對未知數據做預測分析。機器學習主要包含四大類別:有監督學習,無監督學習,半監督學習和增強學習。

有監督學習,顧名思義,是在“人類監督”下學習,要求訓練數據既有特徵也有目標,目標是人爲設定好的。以文本分類爲例,一篇文章的字、詞、句、段是其特徵(文本的內容是什麼),文章的類別(時事、科技、娛樂等等)就是目標。訓練集文章的類別是人爲設定的,相當於明確告訴機器什麼樣的內容該屬於什麼類別,機器在此基礎上總結規律。無監督學習就是數據只有特徵沒有目標,最常見的算法是聚類。聚類算法會把相似的樣本聚集成一個子集,優點是數據無需人工標註,但缺點也很明顯——無法給出子集的實際含義。半監督學習介於有監督學習和無監督學習之間,其訓練集數據有一小部分是人工標註過的。增強學習強調基於環境而行動,在探索未知領域和遵從現有隻是之間尋求平衡。

有監督學習的研究起步較早,方法比較成熟。在大多數應用場景中,我們希望機器輸出的結果具有實際含義,比如文本分類就是讓機器告訴我們一篇文章是時事還是科技類文章。這樣的場景下有監督學習也更爲適用。有監督學習主要包含迴歸分析和統計分類兩大類算法。

迴歸分析——預估點擊率的利器

迴歸分析建模的是自變量和因變量之間的相關關係(如圖2所示),在機器學習領域,自變量是樣本的特徵向量,因變量是預測值。迴歸分析最經典的應用場景是廣告點擊率(CTR)預估。簡單而言,CTR預估是根據用戶數據和廣告數據,估計用戶點擊某個廣告的可能性大小。我們假設用戶數據+廣告數據和廣告點擊率之間的關係符合某個分佈,使用迴歸分析方法在已有點擊數據上擬合出該分佈。達觀科技在線上預測時就把用戶數據和廣告數據作爲輸出傳給擬合出的分佈,得到用戶點擊該廣告的概率值。

圖 2 迴歸分析示意圖

統計分類——被廣泛應用的機器學習方法

統計分類要解決的問題是,如何將一個樣本點分到類別集合中的一個或多個類,比如圖3所表示的就是將數據分爲3個類。

圖 3 統計分類示意圖

現實場景中我們往往需要把數據分成不同的類別,以方便我們分析和使用,因而統計分類方法具有廣闊的應用範圍。達觀數據團隊開發的用戶建模、內容審覈系統、反作弊系統等都使用到了統計分類模型。比如反作弊系統,目的是區分用戶行爲是否作弊,抽象出來就是個分類問題:輸入是用戶的各種行爲數據經過處理後得到的特徵,輸出只有兩個類別——“作弊”和“非作弊”。接下來我就簡單介紹一下最具代表性的分類算法——支持向量機(Support Vector Machine, SVM),一窺機器學習的工作原理。SVM絕不是入門級的機器學習算法,選擇介紹它是因爲,機器學習需要解決的數據線性不可分、過擬合等問題,SVM都給出了比較可靠的解決方案,藉此我們也可以對機器學習有個大概的認識。

理想情況下SVM的理論模型

SVM針對分類問題的前提假設直觀易懂,由此推演出的模型求解過程也是順理成章一氣呵成。我們通常先從最簡單的情況入手,假設數據是線性可分的。SVM認爲此時的最優分類面,是使得樣本集到分類面的最小几何距離最大化的超平面,這個距離成爲“間隔(margin)”。如圖4所示,黑色實線就是最優分類面,兩邊兩條虛線之間的幾何距離就是此時的最優間隔。數據點離分類面越遠,分類的置信度也越高。

圖 4 SVM最優分類面示意圖

SVM假設線性分類面的函數形式爲

(1)

鑑於篇幅關係,我們略去推導過程。在最大化間隔的假設下,可以得到SVM的原目標函數爲:

(2)

其中表示第i個樣本的特徵向量,是第i個樣本的類標籤,SVM令。由約束條件可知,樣本點必然落在最優間隔的邊緣(圖4中虛線)上或外面,通過推導分析最終可以知道,只有落在間隔邊緣上的少量數據點決定了分類面,這些樣本被稱爲支持向量,而其他的點沒有任何作用。這一特性大大節省了求解SVM的計算量。

線性不可分情況的處理

按照達觀數據的經驗,真實環境的問題往往是線性不可分的,數據採集的時候也不可避免的會引入噪聲。應對這兩種情況只需對原始SVM模型做有限的一點改進。針對數據線性不可分的情況,SVM通過引入核函數(Kernel Function)將數據映射到高維空間來解決,圖5直觀的表示了映射的過程。核函數實際上是兩個數據點在高維空間中的內積。它先在原空間進行計算再將結果映射到高維空間,避免了先把數據點映射到高維空間再計算所可能導致的維數災難問題。核函數可以從容的處理包括無限維在內的任何特徵空間映射。

圖 5 SVM核函數的作用原理圖

SVM如何規避過擬合

過擬合(Overfitting)表現爲在訓練數據上模型的預測錯誤很低,在未知數據上預測錯誤卻很高。圖6的藍色曲線代表訓練錯誤,紅色曲線代表真實錯誤,可以看到隨着模型複雜度的升高,模型對訓練數據的擬合程度越好(訓練錯誤越低),但到了一定程度之後真實錯誤反而上升,即爲過擬合。

圖 6 過擬合

過擬合主要源於我們採集的訓練樣本帶有噪聲,有部分樣本嚴重偏離其正常位置,統計學上稱之爲outlier。前面已經提到,決定SVM最優分類面的只是佔少數的支持向量,如果碰巧這些支持向量中存在outlier,而我們又要求SVM儘可能完美的去擬合這樣的數據,得到的分類面可能就會有問題。如圖7所示,黑色加粗虛線代表最優分類面,帶黑圈的藍色數據點代表outlier。可以看到outlier嚴重偏離了正常藍色數據點的位置,所在位置又恰巧使其成爲了支持向量,導致了最終的分類面(深紅色實線)嚴重偏離最優分類面。

圖 7 數據噪聲對SVM的影響

解決辦法非常簡單而巧妙, Corinna Cortes與Vapnik爲SVM引入了鬆弛變量(slack variable),將公式(2)的約束條件修改爲:

(3)

其中即爲鬆弛變量。從圖8可以看到,引入鬆弛變量即容忍了outlier的偏移量,抵消了outlier對分類面的負面影響。

圖 8 鬆弛變量的作用

但容忍也不可以是無限制的,否則任意超平面都可以是“最優”超平面。因此公示(2)中的目標函數也需要相應的修改,限制鬆弛變量的總和儘量的小:

(3)

公示(3)可以理解爲,在對outlier做出有限度的容忍情況下尋找使間隔最大化的最優超平面,至此纔是一個能實際應用的完整SVM。如果想詳細瞭解SVM的來龍去脈,推薦《An Introduction to Support Vector Machines and other kernel-based learning methods》(中文譯本《支持向量機導論》,李國正翻譯)。

達觀數據運用機器學習技術的經驗

經過長期的不斷摸索,我們積累了不少讓機器學習理論能真正實用的經驗。機器學習的方法都各有特點,SVM也不是萬能的算法,實際應用中應該根據具體情況選擇合適的方法。選好方法,到獲得我們預期的效果之間,還需要經過一番細心調校,調校的基礎是對所選方法的數學模型的理解,以及對當前問題和數據的深入分析。

簡單又不簡單的參數調節

調參數是最基礎的步驟,雖看似簡單卻也內有乾坤。不同模型可以調節的參數數量不同,可以採取“抓大放小”的原則,調節少數幾個(數量最好控制在1到2個)影響最大的參數,否則參數的組合呈指數級增長會變得難以調節。

大多數模型都有一個控制過擬合的參數,據我們的經驗來看,一般情況下這個參數對預測效果的好壞影響最大。對於SVM模型,前文提到過的限制鬆弛變量部分的C參數就起到控制過擬合的作用,調節C參數一般也能看到預測效果出現較大變化。此外,如果使用了高斯核函數將原始特徵空間映射到無限維,那高斯核參數往往需要調節。因爲太小的可以把任何數據都映射成線性可分,導致非常嚴重的過擬合問題。相反,太大會使得映射後的空間仍然是低維空間,起不到升維的效果。

交叉檢驗和AB測試

調參數需要用預測效果來比較還壞,有人可能會問,那該如何測試才能比較客觀的檢驗參數甚至模型的有效性?我們的測試方法主要有兩種:離線測試和在線測試。離線測試時我們只有訓練數據,一般會採用學術界常用的交叉驗證方法。如圖9所示,我們將訓練數據平均分爲n份,在這n份數據上進行n次循環,每次取其中一份作爲檢驗集(Validation Set),其他n-1份作爲訓練集(Training Set)。最後對n次預測的結果求平均,以平均得分來對比不同的參數和模型。n一般取5、10或者20。

圖 9 交叉驗證

離線測試得到滿意的性能提升之後,就可以進行在線測試。離線測試效果好,並不意味着上線就能取得滿意效果。在線測試採用工業界廣泛使用的AB測試,首先我們會從線上切一小部分流量(B流量)給新模型、新參數,將效果和使用原先的模型和參數的主流量(A流量)進行對比,如果效果有所提升,再增加B流量的比例。測試通過了就可以全流量上線。

特徵工程(feature engineering)的探討

業界這麼多年的實踐經驗已經證明,能給機器學習系統的性能帶來較大提升的,不是換新模型或者調參數,而是特徵工程,andrew ng也說過,“Applied machine learning" is basically feature engineering.”。機器學習只是提供了通用的算法,不可能根據不同的應用場景去調整自身的數學模型或算法。這就需要我們加入一些人工干預。

特徵工程基於不同應用的領域知識對樣本提取關鍵特徵,讓機器學習算法能夠發揮出最優效果。相對而言特徵工程是比較耗費人力的步驟,實際操作中也會遇到較多困難,解決辦法只有一個:瞭解你的問題,瞭解你的數據。做反作弊檢測的時候,我們是細緻觀察過作弊用戶的行爲數據,做過一些簡單的統計分析。對作弊用戶的行爲模式有一定的概念,才能設計出有用的特徵讓預測效果達到要求。

非線性模型 V.S. 線性模型

進入大數據時代,我們面臨的都是海量數據的處理問題。我們處理的大數據集合,在完成特徵工程之後,通常得到的特徵維數很高,上千萬維的特徵也不少見。在某些應用場景下,比如文本分類,當樣本數量足夠多、特徵維數足夠大的時候,我們發現非線性模型的效果並沒有比線性模型高出多少,但計算效率明顯差很多。這也是臺灣林智仁教授及其團隊繼LIBSVM之後又推出了LIBLINEAR的原因,LIBLINEAR確實更符合當下大數據處理的要求:快速、高效、性能有保證。如果數據量較大特徵維數較多,線性模型是不錯的選擇;一方面,線性模型可以在效果達到使用要求的前提下保證在線應用的及時響應,另一方面也節約了離線訓練的計算時間,可以提高特徵工程迭代的效率。

結語

大數據時代之下,如何從已經積累的數據中挖掘出“金礦”以提高企業效益,已日漸成爲各行各業的普遍痛點。設想一下如果能讓每個企業都用上大數據技術,我們整體的經濟效率必將有明顯的提升。達觀數據科技非常願意與所有企業分享我們的經驗和能力,助力各個企業享受大數據技術的成果。

作者簡介

紀傳俊,復旦大學計算機專業碩士,現任達觀數據聯合創始人,曾任職於盛大創新院推薦組負責起點中文網和酷六視頻的相關推薦,爲有你社交app開發好友推薦系統,後任職於盛大文學數據中心全面負責大數據挖掘任務調度系統,智能審覈系統和反作弊系統。對大數據挖掘技術,機器學習算法,分佈式集羣搭建和任務調度有較深入的理解和實踐經驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章