閱讀73 返回首頁    go 技術社區[雲棲]


[幹貨]基礎機器學習算法

本篇內容主要是麵向機器學習初學者,介紹常見的機器學習算法,當然,歡迎同行交流。

image


哲學要回答的基本問題是從哪裏來、我是誰、到哪裏去,尋找答案的過程或許可以借鑒機器學習的套路:組織數據->挖掘知識->預測未來。組織數據即為設計特征,生成滿足特定格式要求的樣本,挖掘知識即建模,而預測未來就是對模型的應用。

image


特征設計依賴於對業務場景的理解,可分為連續特征、離散特征和組合高階特征。本篇重點是機器學習算法的介紹,可以分為監督學習和無監督學習兩大類。

image


無監督學習算法很多,最近幾年業界比較關注主題模型,LSA->PLSA->LDA為主題模型三個發展階段的典型算法,它們主要是建模假設條件上存在差異。LSA假設文檔隻有一個主題,PLSA假設各個主題的概率分布不變(theta都是固定的),LDA假設每個文檔和詞的主題概率是可變的。

image


LDA算法本質可以借助上帝擲骰子幫助理解,詳細內容可參加Rickjin寫的《LDA數據八卦》文章,淺顯易懂,順便也科普了很多數學知識,非常推薦。

image


監督學習可分為分類和回歸,感知器是最簡單的線性分類器,現在實際應用比較少,但它是神經網絡、深度學習的基本單元。

image


線性函數擬合數據並基於閾值分類時,很容易受噪聲樣本的幹擾,影響分類的準確性。邏輯回歸(Logistic Regression)利用sigmoid函數將模型輸出約束在0到1之間,能夠有效弱化噪聲數據的負麵影響,被廣泛應用於互聯網廣告點擊率預估。

image
image


邏輯回歸模型參數可以通過最大似然求解,首先定義目標函數L(theta),然後log處理將目標函數的乘法邏輯轉化為求和邏輯(最大化似然概率 -> 最小化損失函數),最後采用梯度下降求解。

image
image


相比於線性分類去,決策樹等非線性分類器具有更強的分類能力,ID3和C4.5是典型的決策樹算法,建模流程基本相似,兩者主要在增益函數(目標函數)的定義不同。

image


線性回歸和線性分類在表達形式上是類似的,本質區別是分類的目標函數是離散值,而回歸的目標函數是連續值。目標函數的不同導致回歸通常基於最小二乘定義目標函數,當然,在觀測誤差滿足高斯分布的假設情況下,最小二乘和最大似然可以等價。

image


當梯度下降求解模型參數時,可以采用Batch模式或者Stochastic模式,通常而言,Batch模式準確性更高,Stochastic模式複雜度更低。

image
image


上文已經提到,感知器雖然是最簡單的線性分類器,但是可以視為深度學習的基本單元,模型參數可以由自動編碼(Auto Encoder)等方法求解。

image

深度學習的優勢之一可以理解為特征抽象,從底層特征學習獲得高階特征,描述更為複雜的信息結構。例如,從像素層特征學習抽象出描述紋理結構的邊緣輪廓特征,更進一步學習獲得表征物體局部的更高階特征。

image


俗話說三個臭皮匠賽過諸葛亮,無論是線性分類還是深度學習,都是單個模型算法單打獨鬥,有沒有一種集百家之長的方法,將模型處理數據的精度更進一步提升呢?當然,Model Ensembel就是解決這個問題。Bagging為方法之一,對於給定數據處理任務,采用不同模型/參數/特征訓練多組模型參數,最後采用投票或者加權平均的方式輸出最終結果。

image
image


Boosting為Model Ensemble的另外一種方法,其思想為模型每次迭代時通過調整錯誤樣本的損失權重提升對數據樣本整體的處理精度,典型算法包括AdaBoost、GBDT等。

image


不同的數據任務場景,可以選擇不同的Model Ensemble方法,對於深度學習,可以對隱層節點采用DropOut的方法實現類似的效果。


image
image
image


介紹了這麼多機器學習基礎算法,說一說評價模型優劣的基本準則。欠擬合和過擬合是經常出現的兩種情況,簡單的判定方法是比較訓練誤差和測試誤差的關係,當欠擬合時,可以設計更多特征來提升模型訓練精度,當過擬合時,可以優化特征量降低模型複雜度來提升模型測試精度。

image


特征量是模型複雜度的直觀反映,模型訓練之前設定輸入的特征量是一種方法,另外一種比較常用的方法是在模型訓練過程中,將特征參數的正則約束項引入目標函數/損失函數,基於訓練過程篩選優質特征。

image

模型調優是一個細致活,最終還是需要能夠對實際場景給出可靠的預測結果,解決實際問題。期待學以致用!

原文鏈接

最後更新:2017-06-21 15:02:23

  上一篇:go  《容器技術係列》一2.3 Docker命令執行
  下一篇:go  《容器技術係列》一2.2 創建Docker Client