異常檢測算法之LOF

前言:

LOF:Local outlier factor,即局部異常因子。LOF主要是通過比較每個點p和其鄰域點的密度來判斷該點是否為異常點,如果點p的密度越低,越可能被認定是異常點。至于密度,是通過點之間的距離來計算的,點之間距離越遠,密度越低,距離越近,密度越高,完全符合我們的理解。而且,因為lof對密度的計算是通過點的k鄰域來計算,而不是全局計算,因此得名為“局部”異常因子。即LOF是基于密度分析,通過局部的數據密度來檢測異常。

原理

LOF算法,是基于密度的離群點檢測方法中一個比較有代表性的算法該算法會給數據集中的每個點計算一個離群因子LOF,通過判斷LOF是否接近于1來判定是否是離群因子。若LOF遠大于1,則認為是離群因子,接近于1,則是正常點

為了敘述LOF算法,首先引入以下概念:
(1)對象p的k距離(距離對象p最近的第k個對象的距離)
對于正整數k,對象p的k距離可記作k-distance§。在樣本空間中,存在對象o,它與對象p之間的距離記做d(p,o)。如果滿足以下兩個條件,我們則認為k-distance§=d(p,o):
1)在樣本空間中,至少存在k個對象q,使得d(p,q)<=d(d,o);
2)在樣本空間中,至多存在k-1個對象q,使得d(p,q)<d(p,o)。
k?distance§=max||p?o||(樣本o和p的最大距離即p的k鄰域的最大距離)
顯然易見,如果使用k?distance§來量化對象p的局部空間區域范圍,那么對于對象密度較大的區域,k?distance§值較小,而對象密度較小的區域,k?distance§值較大。

(2)對象p的第k距離領域
已經對象p的第k距離,那么,與對象p之間距離小于等于k?distance§的對象集合稱為對象p的第k距離領域,記作:Nk§
該領域其實是以p為中心, k?distance§為半徑的區域內所有對象的集合(不包括p本身)。由于可能同時存在多個第k距離的數據,因此該集合至少包括k個對象。可以想象,離群度越大的對象的范圍往往比較大,而離群度比較小的對象范圍小。
(3)對象p相對于對象o的可達距離
公式:reachdist(p,o)=max{k?distance(o),||p?o||}
公式的理解可以參考下圖,對于兩個不同的點p1和p2,它們的可達距離計算是不一樣的,對p1來說,因為p1 在 o 的 k 鄰域內(可以看出這里的k=3),所以它們的距離就是 k-distance(o) 的距離,也就是等于圓的半徑;而對于p2,很明顯它不在o的k鄰域內,所以它的可達距離就是實際距離,也就是這兩點之間的距離。
在這里插入圖片描述
(4)局部可達密度
對象p的局部可達密度定義為p的k最近鄰點的平均可達距離的倒數(實質也就是p的第k距離鄰域內所有可達距離的平均值的導數。越大越好,代表數據聚的越緊湊)
在這里插入圖片描述
(5)局部離群點因子
在這里插入圖片描述
如果這個比值越接近1,說明p和其K距離鄰域內的點密度差不多,p可能和其K距離鄰域內的點同屬一簇;如果這個比值越小于1,說明p的密度高于其鄰域內其他點的密度,p為密集點;如果這個比值越大于1,說明p的密度小于其鄰域內其他點的密度,p越可能是異常點。通過這種方式就能在樣本空間數據分布不均勻的情況下也可以準確發現離群點。
可以想象下,一個離群點p,它的lrdk(o)是遠大于lrdk§的,通過特例很容易看出,這樣該算法就可以很好的理解了

優缺點

優點:
LOF算法是一種非監督算法
LOF算法是一種基于密度的算法
LOF算法適合于對不同密度的數據的異常檢測

缺點:
檢測的數據必須有明顯的密度差異
計算比較復雜
應用場景有限

調參

LOF(self, n_neighbors=20, algorithm='auto', leaf_size=30,metric='minkowski', p=2, metric_params=None,contamination=0.1, n_jobs=1)n_neighbors:(int,optional (default = 20 )) - 默認情況下用于kneighbors查詢的鄰居數。如果n_neighbors大于提供的樣本數,則將使用所有樣本。Algorithm:({‘auto’ ,‘ball_tree’ ,‘kd_tree’ ,‘brute’} ,可選) -
用于計算最近鄰居的算法:
'ball_tree’將使用BallTree
'kd_tree’將使用KDTree
'brute’將使用蠻力搜索。
'auto’將嘗試根據傳遞給fit()方法的值來確定最合適的算法。
注意:在稀疏輸入上擬合將使用強力來覆蓋此參數的設置。leaf_size:(int,optional (default = 30 )) - 傳遞給BallTree或KDTree的葉子大小。
這可能會影響構造和查詢的速度,以及存儲樹所需的內存。最佳值取決于問題的性質。Metric:(字符串或可調用,默認’minkowski’) -用于距離計算的度量。
from scikit-learn: [‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’]
from scipy.spatial.distance: [‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]p:(整數,可選(默認值= 2 )) - 來自sklearn.metrics.pairwise.pairwise_distances的Minkowski度量的參數。
當p = 1時,這相當于使用manhattan_distance(l1)。
對于p = 2使用euclidean_distance(l2)。
對于任意p,使用minkowski_distance(l_p)

總結

經實踐,發現該算法在面對數據量較大的場景時,執行效率較低。作為基于密度的算法,效果比KNN要好,面對適當的場景,可以嘗試法使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456307.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android屬性動畫進階用法

2019獨角獸企業重金招聘Python工程師標準>>> 在上周二文章中介紹補間動畫缺點的時候有提到過&#xff0c;補間動畫是只能對View對象進行動畫操作的。而屬性動畫就不再受這個限制&#xff0c;它可以對任意對象進行動畫操作。那么大家應該還記得之前我舉的一個例子&am…

5.3linux下C語言socket網絡編程簡例

原創文章&#xff0c;轉載請注明轉載字樣和出處&#xff0c;謝謝&#xff01; 這里給出在Linux下的簡單socket網絡編程的實例&#xff0c;使用tcp協議進行通信&#xff0c;服務端進行監聽&#xff0c;在收到客戶端的連接后&#xff0c;發送數據給客戶端&#xff1b;客戶端在接受…

parser.add_argument驗證格式

article_bp Blueprint(article, __name__, url_prefix/api) api Api(article_bp) parser reqparse.RequestParser() parser.add_argument(name, typestr, help必須填寫名稱, requiredTrue) channel_fields { id: fields.Integer, cname: fields.String } clas…

異常檢測算法之HBOS

前言 HBOS&#xff08;Histogram-based Outlier Score&#xff09;核心思想&#xff1a;將樣本按照特征分成多個區間&#xff0c;樣本數少的區間是異常值的概率大。 原理 該方法為每一個樣本進行異常評分&#xff0c;評分越高越可能是異常點。評分模型為&#xff1a; 假設樣…

字典和json 的區別 和轉換

前言&#xff1a;字典和json非常像。接下來比較一下兩者的異同 先看一下字典的寫法&#xff1a; a {a:1,b:2,c:3} 再看一下json的寫法&#xff1a; {"studentInfo":{"id":123456,"stu_name":"Dorra"} } 從形式上看&#xff0c;都是…

Struts2的工作原理及工作流程

眾所周知&#xff0c;Struts2是個非常優秀的開源框架&#xff0c;我們能用Struts2框架進行開發&#xff0c;同時能 快速搭建好一個Struts2框架&#xff0c;但我們是否能把Struts2框架的工作原理用語言表達清楚&#xff0c;你表達的原理不需要說出底層是怎么實現的&#xff0c;我…

正則表達式采坑

[a-zA-Z]匹配大小寫字符 \w 匹配字母、數字、下劃線 {5,7} 表示前面的字符&#xff08;即&#xff1a;\w&#xff09;必須至少出現 5 次最多出現 7 次. 合起來就是 >6 少于8個的字符 [a-zA-Z]\w{6,12} --------------》》 就是要輸入七位數到十三位&#x…

easyui動態顯示和隱藏表頭

為什么80%的碼農都做不了架構師&#xff1f;>>> var _bt{date:日期,subtime:填寫時間,xz:小組,uname:操作人,qdbh:渠道編號,mt:媒體,zh:賬戶,sjd:時間段,tfwz:投放位置,tfh:投放號,td:團隊,sjje:實際金額,jxs:進線數,cb:成本,yxzyjx:有效資源進線,yxzyl:有效資源率…

物聯網

如果要說未來什么技術正在或將徹底改變人類生活、工作和娛樂的方式&#xff0c;那必須是物聯網。小到各種可穿戴產品&#xff0c;大到汽車、工廠和樓宇&#xff0c;物聯網能使一切設備互聯并具備智慧。物聯網也正改變著產業的格局&#xff0c;索尼、夏普、東芝等日本傳統電子設…

理解:復雜度是O(log^n) 就是二分法

冒昧問一下&#xff0c;為什么二分法查找的復雜度是O(log^n)&#xff1f;這是怎么計算的&#xff1f; 你要從1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8里面找到3&#xff0c;分成幾步&#xff1f; 第一步&#xff0c;…

淺談管理數據平臺的一些想法

前言&#xff1a; 對于任何使用大數據技術的公司來說&#xff0c;大數據平臺特別是Hive來說&#xff0c;維護其高效快速的運行&#xff0c;對整個公司的運作來說至關重要。比如說&#xff1a;某個調度任務失敗了造成業務部門的某些報表無法正常產出&#xff1b;hive平臺最近速…

MongoDB誤刪表恢復

一、場景描述公司某工程師執行db.giveget_card.drop()&#xff0c;誤將線上表刪除。幸好每天都有做備份&#xff0c;這個時候就體現了備份的重要性了&#xff0c;哈哈哈。。。二、模擬故障過程備份數據大小&#xff1a;rs_test01:PRIMARY> use ycsb switched to db ycsb rs_…

linux下kill某個應用

linux命令行與桌面切換快捷鍵CtrAltF1&#xff0c;CtrAltF7 ps -e | grep abc sudo kill xyz 轉載于:https://www.cnblogs.com/cj2014/p/6512354.html

flask中數據庫的基本操作-增刪改查【備忘】

1.增加數據&#xff08;就相當于增加一個實例對象&#xff09; user1 User(namelong,email1006550026qq.com,password123456,role_id1) db.session.add(user1) db.session.commit() 2.修改數據 修改用戶表里面的name為long的姓名為&#xff1a;fang 首先查詢到名為…

兩個文件比較之comm命令

comm命令可用于兩個文件之間的比較。它有很多不錯的選項可用來調整輸出&#xff0c;以便我們執行交集、求差&#xff08;difference&#xff09;以及差集操作。? 交集&#xff1a;打印出兩個文件所共有的行。? 求差&#xff1a;打印出指定文件所包含的且互不相同的那些行。?…

【轉】error while loading shared libraries: xxx.so.x 錯誤的原因和解決辦法

原博客地址&#xff1a;http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法 今天在執行一個protobuf程序時&#xff0c;提示error while loading shared libraries: libprotobuf.so.8: cannot…

Flask學習記錄之Flask-SQLAlchemy

Flask-SQLAlchemy庫讓flask更方便的使用SQLALchemy,是一個強大的關系形數據庫框架,既可以使用orm方式操作數據庫,也可以使用原始的SQL命令. Flask-Migrate 是一個數據遷移框架,需要通過Flask-script庫來操作. 一.配置Flask-SQLAlchemy 程序使用的數據庫地址需要配置在SQLALCH…

Postico —— OS X 上的免費 PostgreSQL 客戶端

Postico 是 OS X 下的一個 PostgreSQL 客戶端管理工具。要求 OS X 10.8 或者更新版本。 文章轉載自 開源中國社區 [http://www.oschina.net]

hdu 1760 A New Tetris Game(搜索博弈)

題目鏈接&#xff1a;hdu 1760 A New Tetris Game 題意&#xff1a; 給你一個矩陣&#xff0c;0表示可以放格子&#xff0c;現在給你2*2的格子&#xff0c;lele先放&#xff0c;問是否能贏。 題解&#xff1a; 爆搜。具體看代碼 1 #include<bits/stdc.h>2 #define F(i,a,…

flask-restful接口

同flask一樣&#xff0c;flask-restful同樣支持返回任一迭代器&#xff0c;它將會被轉換成一個包含原始 Flask 響應對象的響應&#xff1a; class ArticleApi(Resource):def get(self):return {"hello":"world"},201&#xff0c;{"course":&quo…