機器學習演算法簡介
歡迎大家前往騰訊雲社區,獲取更多騰訊海量技術實踐乾貨哦~
作者:吳懿倫
導語: 本文是對機器學習演算法的一個概覽,以及個人的學習小結。通過閱讀本文,可以快速地對機器學習演算法有一個比較清晰的了解。本文承諾不會出現任何數學公式及推導,適合茶餘飯後輕鬆閱讀,希望能讓讀者比較舒適地獲取到一點有用的東西。
引言
本文是對機器學習演算法的一個概覽,以及個人的學習小結。通過閱讀本文,可以快速地對機器學習演算法有一個比較清晰的了解。本文承諾不會出現任何數學公式及推導,適合茶餘飯後輕鬆閱讀,希望能讓讀者比較舒適地獲取到一點有用的東西。
本文主要分為三部分,第一部分為異常檢測演算法的介紹,個人感覺這類演算法對監控類系統是很有借鑒意義的;第二部分為機器學習的幾個常見演算法簡介;第三部分為深度學習及強化學習的介紹。最後會有本人的一個小結。
1 異常檢測演算法
異常檢測,顧名思義就是檢測異常的演算法,比如網路質量異常、用戶訪問行為異常、伺服器異常、交換機異常和系統異常等,都是可以通過異常檢測演算法來做監控的,個人認為這種演算法很值得我們做監控的去借鑒引用,所以我會先單獨介紹這一部分的內容。
異常定義為「容易被孤立的離群點 (more likely to be separated)」——可以理解為分布稀疏且離密度高的群體較遠的點。用統計學來解釋,在數據空間裡面,分布稀疏的區域表示數據發生在此區域的概率很低,因而可以認為落在這些區域里的數據是異常的。
圖1-1離群點表現為遠離密度高的正常點
如圖1-1所示,在藍色圈內的數據屬於該組數據的可能性較高,而越是偏遠的數據,其屬於該組數據的可能性就越低。
下面是幾種異常檢測演算法的簡介。
1.1 基於距離的異常檢測演算法
圖1-2 基於距離的異常檢測
思想:一個點如果身邊沒有多少小夥伴,那麼就可以認為這是一個異常點。
步驟:給定一個半徑r,計算以當前點為中心、半徑為r的圓內的點的個數與總體個數的比值。如果該比值小於一個閾值,那麼就可以認為這是一個異常點。
1.2 基於深度的異常檢測演算法
圖1-3 基於深度的異常檢測演算法
思想:異常點遠離密度大的群體,往往處於群體的最邊緣。
步驟:通過將最外層的點相連,並表示該層為深度值為1;然後將次外層的點相連,表示該層深度值為2,重複以上動作。可以認為深度值小於某個數值k的為異常點,因為它們是距離中心群體最遠的點。
1.3 基於分布的異常檢測演算法
圖1-4 高斯分布
思想:當前數據點偏離總體數據平均值3個標準差時,可以認為是一個異常點(偏離多少個標準差可視實際情況調整)。
步驟:計算已有數據的均值及標準差。當新來的數據點偏離均值3個標準差時,視為異常點。
1.4 基於劃分的異常檢測演算法
圖1-5孤立深林
思想:將數據不斷通過某個屬性劃分,異常點通常能很早地被劃分到一邊,也就是被早早地孤立起來。而正常點則由於群體眾多,需要更多次地劃分。
步驟:通過以下方式構造多顆孤立樹:在當前節點隨機挑選數據的一個屬性,並隨機選取屬性的一個值,將當前節點中所有數據劃分到左右兩個葉子節點;如果葉子節點深度較小或者葉子節點中的數據點還很多,則繼續上述的劃分。異常點表現為在所有孤立樹中會有一個平均很低的樹的深度,如圖1-5中的紅色所示為深度很低的異常點。
2 機器學習常見演算法
簡單介紹機器學習的幾個常見演算法:k近鄰、k-means聚類、決策樹、樸素貝葉斯分類器、線性回歸、邏輯回歸、隱馬爾可夫模型及支持向量機。遇到講得不好的地方建議直接跳過。
2.1 K近鄰
圖2-1距離最近的3個點裡面有2個點為紅三角,所以待判定點應為紅三角
分類問題。對於待判斷的點,從已有的帶標籤的數據點中找到離它最近的幾個數據點,根據它們的標籤類型,以少數服從多數原則決定待判斷點的類型。
2.2 k-means聚類
圖2-2不斷迭代完成「物以類聚」
k-means聚類的目標是要找到一個分割,使得距離平方和最小。初始化k個中心點;通過歐式距離或其他距離計算方式,求取各個數據點離這些中心點的距離,將最靠近某個中心點的數據點標識為同一類,然後再從標識為同一類的數據點中求出新的中心點替代之前的中心點,重複上述計算過程,直到中心點位置收斂不再變動。
2.3 決策樹
圖2-3 通過決策樹判斷今天是否適合打球
決策樹的表現形式和if-else類似,只是在通過數據生成決策樹的時候,需要用到信息增益去決定最先使用那個屬性去做劃分。決策樹的好處是表現力強,容易讓人理解結論是如何得到的。
2.4 樸素貝葉斯分類器
樸素貝葉斯法師基於貝葉斯定理與特徵條件獨立性假設的分類方法。由訓練數據學習聯合概率分布,然後求得後驗概率分布。(抱歉,沒圖,又不貼公式,就這樣吧-_-)
2.5 線性回歸
圖2-4 擬一條直線,與所有數據點實際值之差的和最小
就是對函數f(x)=ax+b,通過代入已有數據(x,y),找到最合適的參數a和b,使函數最能表達已有數據輸入和輸出之間的映射關係,從而預測未來輸入對應的輸出。
2.6 邏輯回歸
圖2-5 邏輯函數
邏輯回歸模型其實只是在上述的線性回歸的基礎上,套用了一個邏輯函數,將線性回歸的輸出通過邏輯函數轉化成0到1之間的數值,便於表示屬於某一類的概率。
2.7 隱馬爾科夫模型
圖2-6 隱藏狀態x之間的轉移概率以及狀態x的觀測為y的概率圖
隱馬爾科夫模型是關於時序的概率模型,描述由一個隱藏的馬爾科夫鏈隨機生成不可觀測的狀態的序列,再由各個狀態隨機生成一個觀測而產生觀測的序列的過程。隱馬爾科夫模型有三要素和三個基本問題,有興趣的可以單獨去了解。最近看了一篇有意思的論文,其中使用了隱馬爾可夫模型去預測美國研究生會在哪個階段轉專業,以此做出對策挽留某專業的學生。公司的人力資源會不會也是通過這個模型來預測員工會在哪個階段會跳槽,從而提前實施挽留員工的必要措施?(^_^)
2.8 支持向量
圖2-7支持向量對最大間隔的支持
支持向量機是一種二分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器。如圖2-7所示,由於支持向量在確定分離超平面中起著關鍵性的作用,所以將這種分類模型稱為支持向量機。
對於輸入空間中的非線性分類問題,可以通過非線性變換(核函數)將它轉換為某個高維特徵空間中的線性分類問題,在高維特徵空間中學習線性支持向量機。如圖2-8所示,訓練點被映射到可以容易地找到分離超平面的三維空間。
圖2-8將二維線性不可分轉換為三維線性可分
3 深度學習簡介
這裡將簡單介紹神經網路的由來。介紹順序為:感知機、多層感知機(神經網路)、卷積神經網路及循環神經網路。
3.1 感知機
圖3-1輸入向量通過加權求和後代入激活函數中求取結果
神經網路起源於上世紀五、六十年代,當時叫感知機,擁有輸入層、輸出層和一個隱含層。它的缺點是無法表現稍微複雜一些的函數,所以就有了以下要介紹的多層感知機。
3.2 多層感知機
圖3-2多層感知機,表現為輸入與輸出間具有多個的隱含層
在感知機的基礎上,添加了多個隱含層,以滿足能表現更複雜的函數的能力,其稱之為多層感知機。為了逼格,取名為神經網路。神經網路的層數越多,表現能力越強,但是隨之而來的是會導致BP反向傳播時的梯度消失現象。
3.3 卷積神經網路
圖3-3卷積神經網路的一般形式
全連接的神經網路由於中間隱含層多,導致參數數量膨脹,並且全連接方式沒有利用到局部模式(例如圖片裡面臨近的像素是有關聯的,可構成像眼睛這樣更抽象的特徵),所以出現了卷積神經網路。卷積神經網路限制了參數個數並且挖掘了局部結構這個特點,特別適用於圖像識別。
3.4 循環神經網路
圖3-4 循環神經網路可以看成一個在時間上傳遞的神經網路
循環神經網路可以看成一個在時間上傳遞的神經網路,它的深度是時間的長度,神經元的輸出可以作用於下一個樣本的處理。普通的全連接神經網路和卷積神經網路對樣本的處理是獨立的,而循環神經網路則可以應對需要學習有時間順序的樣本的任務,比如像自然語言處理和語言識別等。
4 個人小結
機器學習其實是學習從輸入到輸出的映射:
即希望通過大量的數據把數據中的規律給找出來。(在無監督學習中,主要任務是找到數據本身的規律而不是映射)
總結一般的機器學習做法是:根據演算法的適用場景,挑選適合的演算法模型,確定目標函數,選擇合適的優化演算法,通過迭代逼近最優值,從而確定模型的參數。
關於未來的展望,有人說強化學習才是真正的人工智慧的希望,希望能進一步學習強化學習,並且要再加深對深度學習的理解,才可以讀懂深度強化學習的文章。
最後最後,由於本人也只是抽空自學了幾個月的小白,所以文中有錯誤的地方,希望海涵和指正,我會立即修改,希望不會誤導到別人。
參考文獻
【1】 李航. 統計學習方法[J]. 清華大學出版社, 北京, 2012.
【2】 Kriegel H P, Kr?ger P, Zimek A. Outlier detection techniques[J]. Tutorial at KDD, 2010.
【3】 Liu F T, Ting K M, Zhou Z H. Isolation forest[C]//Data Mining, 2008. ICDM08. Eighth IEEE International Conference on. IEEE, 2008: 413-422.
【4】 Aulck L, Aras R, Li L, et al. Stem-ming the Tide: Predicting STEM attrition using student transcript data[J]. arXiv preprint arXiv:1708.09344, 2017.
【5】 李宏毅.deep learning tutorial. http://speech.ee.ntu.edu.tw/~tlkagk/slide/Deep%20Learning%20Tutorial%20Complete%20(v3)
【6】 科研君.卷積神經網路、循環神經網路、深度神經網路的內部結構區別. https://www.zhihu.com/question/34681168
相關閱讀
一站式滿足電商節雲計算需求的秘訣
遲蹭一個熱點:自我對弈的 AlphaGo Zero
Python 機器學習庫 --- sklearn --- 線性模型
此文已由作者授權騰訊雲技術社區發布,轉載請註明文章出處
原文鏈接:https://cloud.tencent.com/community/article/570843
海量技術實踐經驗,盡在騰訊雲社區!
推薦閱讀: