机器学习之异常点检测
1.iForest(獨立森林)算法
樣本數據過大時推薦采用這種異常值檢測方法
原理分析:iForest森林也由大量的樹組成。iForest中的樹叫isolation tree,簡稱iTree。iTree樹和決策樹不太一樣,其構建過程也比決策樹簡單,因為其中就是一個完全隨機的過程。具體實施過程如下:第一、假設共有N條數據,構建一顆iTree時,從N條數據中均勻抽樣(一般是無放回抽樣)出ψ個樣本出來,作為這顆樹的訓練樣本。在樣本中,隨機選一個特征,并在這個特征的所有值范圍內(最小值與最大值之間)隨機選一個值,對樣本進行二叉劃分,將樣本中小于該值的劃分到節點的左邊,大于等于該值的劃分到節點的右邊。這樣得到了一個分裂條件和左、右兩邊的數據集,然后分別在左右兩邊的數據集上重復上面的過程,直接達到終止條件。終止條件有兩個,一個是數據本身不可再分(只包括一個樣本,或者全部樣本相同),另外一個是樹的高度達到log2(ψ)。不同于決策樹,iTree在算法里面已經限制了樹的高度。當然不限制也可以,只是算法為了效率考慮,只需要達到log2(ψ)深度即可。
第二、把所有的iTree樹構建好了,就可以對測試數據進行預測了。預測的過程就是把測試數據在iTree樹上沿對應的條件分支往下走,直到達到葉子節點,并記錄這過程中經過的路徑長度h(x),即從根節點,穿過中間的節點,最后到達葉子節點,所走過的邊的數量(path length)。最后,將h(x)帶入(具體公式參考https://www.cnblogs.com/pinard/p/9314198.html),計算每條待測數據的異常分數(Anomaly Score)如果分數越接近1,其是異常點的可能性越高;如果分數都比0.5要小,那么基本可以確定為正常數據;如果所有分數都在0.5附近,那么數據不包含明顯的異常樣本。
在sklearn中的使用:
算法基本上不需要配置參數就可以直接使用,通常就以下幾個(參數明顯比隨機森林簡單):
n_estimators: 默認為100,配置iTree樹的多少
max_samples: 默認為265,配置采樣大小
max_features: 默認為全部特征,對高維數據,可以只選取部分特征
from sklearn.ensemble import IsolationForest
ilf=IsolationForest()
ilf.fit(X)
s=ilf.predict(X)
返回的是只包含-1和1元素的數組,-1代表可能為異常值的點
2.異常點檢測常用算法OneClassSVM
在樣本數據較少時建議采用這種異常值檢測方法
它是無監督學習的方法,這里只講解一種特別的思路SVDD, 對于SVDD來說,我們期望所有不是異常的樣本都是正類別,同時它采用一個超球體而不是一個超平面來做劃分,該算法在特征空間中獲得數據周圍的球形邊界,期望最小化這個超球體的體積,從而最小化異常點數據的影響。可以判斷新的數據點z是否在類內,如果z到中心的距離小于或者等于半徑r,則不是異常點,如果在超球體以外,則是異常點。在sklearn中的用法
from sklearn.svm import OneClassSVM
classer=OneClassSVM()
classer.fit(X)
yHat=classer.predict(X)
print(yHat)
注意:由于其是非監督學習方法,所以不用傳入類別列表。返回數據和iForest一樣是只包含1,-1的列表,-1代表可能是異常點,X是訓練樣本。檢測完后的數據篩選
?
轉載于:https://www.cnblogs.com/dyl222/p/11122226.html
總結
以上是生活随笔為你收集整理的机器学习之异常点检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区间素数个数查询
- 下一篇: 7.3 数字类型及内置方法