<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          每個數(shù)據(jù)科學家該知道的五種檢測異常值方法(附Python代碼)

          共 3331字,需瀏覽 7分鐘

           ·

          2021-07-13 19:47

          大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載自數(shù)據(jù)派THU
          作者:Will Badr
          翻譯:顧偉嵩
          校對:歐陽錦

          無論是通過識別錯誤還是主動預(yù)防,檢測異常值對任何業(yè)務(wù)都是重要的。本文將討論五種檢測異常值的方法。

          什么是異常值?



          在統(tǒng)計學中,異常值是指不屬于某一特定群體的數(shù)據(jù)點。它是一個與其他數(shù)值大不相同的異常觀測值,與良好構(gòu)成的數(shù)據(jù)組相背離。

          例如,你可以清楚地看到這個列表里的異常值:[20, 24, 22, 19, 29, 18, 4300, 30, 18].
          當觀測值僅僅是一堆數(shù)字并且是一維時,很容易識別出異常值。但是,當你有成千上萬的觀測值或者是多維度時,你將需要更多巧妙的辦法來檢測出那些異常值。這就是本文要討論的內(nèi)容。

          為什么我們要關(guān)注異常值?


          檢測異常值是數(shù)據(jù)挖掘中的核心問題之一。數(shù)據(jù)的不斷擴增和持續(xù)增長,以及物聯(lián)網(wǎng)設(shè)備的普及,讓我們重新思考處理異常值的方法和觀測異常值構(gòu)建出的用例。


          現(xiàn)在,我們擁有可以檢測我們每分鐘心跳的智能手表和腕帶。檢測心跳數(shù)據(jù)的異常值有助于預(yù)防與心臟有關(guān)的疾病。交通模式中的異常值有助于預(yù)防交通事故。異常值檢測還可以用來識別服務(wù)器之間的網(wǎng)絡(luò)基礎(chǔ)設(shè)施和通信的障礙。因此,建立在檢測異常值之上的用例和解決方案是無窮無盡的。

          另一個我們需要檢測異常值的理由是,當為機器學習模型準備數(shù)據(jù)集時,檢測出所有的異常值,并且要么移除它們、要么分析它們來了解它們最初存在的原因是非常重要的。

          現(xiàn)在,讓我們從最簡單的方法開始探索5種常用的檢測異常值的方法。

          方法1——標準差:


          在統(tǒng)計學中,如果一個數(shù)據(jù)分布式近似正態(tài)分布,那么大約68%的數(shù)據(jù)值在平均值的前后一個標準差范圍內(nèi),大約95%的數(shù)據(jù)值在平均值的前后兩個標準差范圍內(nèi),大約99.7%的數(shù)據(jù)值在前后三個標準差的范圍內(nèi)。

          因此,如果你有任何出現(xiàn)在三個標準差范圍外的數(shù)據(jù)點,那么那些點就極有可能是異常值。
          讓我們看看代碼。


          這段代碼的輸出結(jié)果是一個大于80或小于-40的數(shù)據(jù)列表。請注意,我傳入的數(shù)據(jù)集是一個一維數(shù)據(jù)集?,F(xiàn)在,讓我們探索對于多維數(shù)據(jù)集的更高級的方法。

          方法2——箱線圖:



          箱線圖是指通過分位數(shù)對數(shù)值型數(shù)據(jù)的圖形化描述。這是一種非常簡單但有效的異常值可視化方法。把上下須觸線看作數(shù)據(jù)分布的上下邊界。任何出現(xiàn)在下須觸線下面或上須觸線上面的數(shù)據(jù)點可以被看作異常值。下面是繪制箱線圖的代碼:


          上面的代碼輸出如下的箱線圖。如你所見,它把大于75或小于-35的值看作異常值。這個結(jié)果非常接近上述的方法1得到的結(jié)果。

          箱線圖分解:

          四分位差的概念是被用來繪制詳細圖的。四分位差是統(tǒng)計學中通過將數(shù)據(jù)集劃分為四分位數(shù)來衡量統(tǒng)計離散度和數(shù)據(jù)可變性的概念。

          簡而言之,任何數(shù)據(jù)集或任何觀察值的集合被劃分為四個基于數(shù)據(jù)值和它們與整個數(shù)據(jù)集比較后而定義的區(qū)間。四分位數(shù)是指將數(shù)據(jù)分為三個點和四個區(qū)間的數(shù)據(jù)點。

          四分位差是重要的,因為它用于定義異常值。它是第三個四分位數(shù)和第一個四分位數(shù)的差(IQR=Q3-Q1). 這種情況下的異常值被定義為低于(Q1-1.5IQR)或低于箱線圖下須觸線或高于(Q3+1.5IQR)或高于箱線圖上須觸線的觀測值。

          Source Wikipedia

          方法3——DBScan集群:


          DBScan是一種用于將數(shù)據(jù)分組的集群算法。它也是一種被用于基于密度的對于一維或多維數(shù)據(jù)的異常檢測方法。其他的像k-均值和層次聚類的集群算法也可以用于檢測異常值。在本例中,我將向您展示一個使用DBScan的案例。但是在開始前,我們先介紹一些重要概念。DBScan有三個重要概念:

          • 核心點:為了理解核心點,我們需要訪問一些用于定義DBScan工作的超參數(shù)。第一個超參數(shù)是最小值樣本(min_samples)。這只是形成集聚的核心點的最小數(shù)量。第二重要的超參數(shù)eps,它是兩個被視為在同一個簇中的樣本之間的最大距離。

          • 邊界點:是與核心點在同一集群的點,但是要離集群中心遠得多。




          Source:https://stackoverflow.com/questions/34394641/dbscan-clustering-what-happens-when-border-point-of-one-cluster-is-considered
           
          • 其他的點被稱為噪聲點,那些數(shù)據(jù)點不屬于任何集群。它們可能是異常點,可能是非異常點,需要進一步調(diào)查?,F(xiàn)在讓我們看看代碼。



          上述代碼的輸出值是94。這是噪聲點的總數(shù)。SKLearn將噪聲點標記為(-1)。這種方法的缺陷就是維數(shù)越高,精度越低。你還需要做出一些假設(shè),比如估計eps的正確值,而這可能是有挑戰(zhàn)性的。


          方法4——孤立森林


          孤立森林是一種無監(jiān)督學習的算法,屬于集成決策樹族。這種方法與前面的方法都不同。所有前面的方法是試圖找到數(shù)據(jù)的正常區(qū)域,然后將所定義區(qū)域外的任何值視為異常值。

          這種方法的工作原理不同。它是明確的孤立異常值,而不是通過給每個點分配一個分數(shù)來構(gòu)造正常的點和區(qū)域。它充分利用了這樣一個事實:異常值只占數(shù)據(jù)的小部分,并且它們有與正常值大不相同的屬性。該算法適用于高維數(shù)據(jù)集,并且被證實是一種非常有效的檢測異常值的方法。由于本文關(guān)注的是實現(xiàn)而不是專門知識,我將不深入探討算法的工作原理。但是,這篇文章中涵蓋了它的所有工作原理細節(jié)。

          https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf

          現(xiàn)在,讓我們探索代碼:


          該代碼將輸出數(shù)組中每個數(shù)據(jù)點的預(yù)測值。如果結(jié)果是-1,那意味著這個特定的數(shù)據(jù)點是一個異常值。如果結(jié)果是1,那么意味著該數(shù)據(jù)點不是異常值。

          方法5——Robust Random Cut Forest


          Robust Random Cut Forest算法是亞馬遜用于檢測異常值的無監(jiān)督算法。它也通過關(guān)聯(lián)異常分數(shù)來工作。低的分數(shù)值表示數(shù)據(jù)點是“正常的”,高的值表示數(shù)據(jù)中存在異常?!暗汀焙汀案摺钡亩x取決于應(yīng)用,但是一般實踐表明,超過平均值三個標準差的分數(shù)被認為是異常的。算法的細節(jié)可以在這篇文章中找到。

          http://proceedings.mlr.press/v48/guha16.pdf

          這個算法的最大優(yōu)勢是它可以處理非常高維的數(shù)據(jù)。它還可以處理實時數(shù)據(jù)流(內(nèi)置AWS Kinesis Analytics)和離線數(shù)據(jù)。

          我可以在如下的視頻里更加詳細的解釋這個概念:

          https://youtu.be/yx1vf3uapX8
           
          該算法的論文給出了一些與孤立森林相比較的性能標準。論文結(jié)果表明,RCF比孤立森林更加準確和快速。

          完整的案例代碼可以在這里找到:
          amazon-sagemaker-examples/introduction_to_amazon_algorithms/random_cut_forest at master · aws/amazon-sagemaker-examples · GitHub

          結(jié)論


          我們生活在一個數(shù)據(jù)每分每秒都在劇增的世界里。數(shù)據(jù)如果使用不當便會隨著時間貶值。于在線數(shù)據(jù)流或離線數(shù)據(jù)集中發(fā)現(xiàn)異常值,對于識別商業(yè)中的問題或主動構(gòu)建解決方案以在問題發(fā)生之前發(fā)現(xiàn)潛在的問題,或者甚至在探索性數(shù)據(jù)分析(EDA)階段為ML準備數(shù)據(jù)集都是至關(guān)重要的。我期待你能認為本文有用,在下面的評論區(qū)讓我知道你的想法。

          原文標題:
          5 Ways to Detect Outliers/Anomalies That Every Data Scientist Should Know (Python Code) 
          原文鏈接:
          https://towardsdatascience.com/5-ways-to-detect-outliers-that-every-data-scientist-should-know-python-code-70a54335a623


          點「在看」的人都變好看了哦!
          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品人妻日 | 国产最新av | 欧美在线黄色 | 免费看日本mv大片网站 | 久久黄色短视频 |