孤立森林演算法簡介
孤立森林是一種用於異常檢測的演算法,本文將對該演算法進行簡介,包括演算法的理念、步驟、以及使用場景。常見的異常檢測方法主要是統計學課本上學到一些方法,比如六西格瑪方法、線性回歸檢測方法、箱線圖檢測方法、主成分分析方法等。
上述的這些方法是比較常見的,比如六西格瑪方法就是根據資料分布計算均值u和標準差s,得出在u-3s和u+3s之外的資料就是異常資料;比如箱線圖檢測方法就是根據上四分位數和下四分位數以及中位數等指標構成箱線圖,在箱子外側的底部和頂部之外的資料樣本就是異常資料;比如線性回歸檢測方法是根據回歸進行**,發現某些點距離當前回歸方程**的值非常大,即認定這些點就是異常資料。而在實際的情況下,上述方法的異常檢測效果顯得不夠好,因為上述的方法會有原始的正態分佈假設或者假設特徵之前是沒有關聯性的,所以我們會使用孤立森林演算法進行異常檢測,孤立森林其實本質上是屬於隨機森林那種型別的演算法,即包含多棵決策樹。
孤立森林的主要思想是「一直用刀切」,即使用超平面不停地在資料所在的空間進行切割,每次切割的結果是產生兩個子空間,迴圈往復地不停切下去,直到每乙個子空間只包含1個資料樣本為止,通過衡量切的次數判斷該點是否是異常點,因為異常點在最初的幾次切分就會被劃分到乙個子空間後續就不會變化,而那些正常的資料則會被經過很多次切分才會到最後那個子空間只包含1個資料樣本為止。其實這種思想是比較合理的,因為異常資料本身就是非常少的,並且分布較為稀疏,從空間上看是不和正常資料在「某些簇」一起的,所以使用這種一直切割的方法能夠快速找出異常資料,並且這種方法的速度是指數型的,理論上速度較快。但是如果資料的維度很高的時候,這種方法會變得效果較差,因為每次切割的時候都是選擇某個維度來進行切分,切到最後可能大量的維度並沒有被使用,所以效果可能一般。
下面是演算法的步驟:
1)從所有資料中隨機抽取一部分樣本作為乙個孤立樹的集合,隨機選擇1個維度和乙個切分點進行切分,將資料在這個維度分為兩個子空間,即小於該切分點或者大於等於該切分點。
2)不斷地進行隨機選擇維度和切分點,反覆操作,直到某個子空間只有一條樣本資料、或是子空間內部所有的屬性值均相同(無法切分)、或是已經達到之前預設的樹的高度。滿足上述三個任意1個條件後,即停止該孤立樹的構造。
3)構建n棵上述的樹,形成孤立森林。
4)構造樣本評分,即在形成最終的孤立森林後,對每個樣本所在的樹的位置進行打分,得到乙個總分指標。該指標越接近1就代表異常的可能性越大,越接近於0就代表正常的可能性越大,而當指標接近0.5左右則無法判斷是否異常或者正常。
其實孤立森林從某些程度上來看是有優點的,比如它的計算速度較快,因為不需要像kmeans等基於聚類的演算法去花費大量時間計算距離。並且該演算法是有整合學習的思想的,即使用了多棵樹降低了誤差,並且演算法的穩健性較強。
但是該演算法的缺點是只能使用特定場景的異常資料發現,即正常資料要遠遠大於異常資料,比如信用卡欺詐等情況。如果異常資料的數量稍微多一些,該演算法很有可能失效。而與此同時,使用者應該盡量縮小特徵的維度,因為維度過高容易導致該演算法被雜訊維度影響,使得尋找得到的異常資料是錯誤的。
總的來說,這種孤立森林演算法在使用前要注意使用場景,要預先觀察資料的分布情況與異常資料佔總資料的比例。通常在實際的競賽或者工作中,如信用卡詐騙檢測、工業產品異常檢測、網路異常流量檢測等場景可以使用,因為這些場景中絕大多數情況下是正常資料,異常資料非常非常少,所以可以使用孤立森林演算法,初學者在使用的時候需要特別注意上述的情況。
泛統計理論初探 統計編碼方法簡介
機器學習常見的編碼方法簡介 在實際的問題中,經常會遇到自變數是分類變數的問題,比如血型 學歷 職稱級別 衣服型號等。在處理這些變數的時候,通常會對變數進行編碼處理,使得原來的變數取值變成數學上的數字,比如0,1等數值,這樣可以方便代入模型來進行實際 和分析。在本文中,我們將介紹幾種常見的編碼方法,通...
泛統計理論初探 初探XGBoost方法
初探xgboost方法 在本文中將會繼續介紹整合學習裡的boosting思路,並且會選用xgboost方法來介紹。xgboost是一種優化過的提公升學習方法,該方法在一些競賽或者專案中經常被使用,它的 正確率是比較高的,總體來說效能不錯。其實從該方法的名字我們可以發現,這是一種在gbdt方法的基礎上...
泛統計理論初探 均值漂移演算法初探
均值漂移聚類演算法簡介 本文主要是介紹均值漂移聚類演算法,又稱為mean shift cluster,該演算法屬於無監督學習的聚類方法。主要從演算法的使用場景 步驟 核心思路等角度去介紹演算法。之前其實也介紹過一些聚類的演算法,比如kmeans dbscan等方法,本次介紹的均值漂移聚類演算法是一種...