搜尋
首頁後端開發Python教學Python資料異常值檢測與處理(實例詳解)

本篇文章為大家帶來了關於python的相關知識,其中主要介紹了數據分析中異常值的相關問題,一般異常值的檢測方法有基於統計的方法,基於聚類別的方法,以及一些專門檢測異常值的方法等,以下對這些方法進行相關的介紹,希望對大家有幫助。

Python資料異常值檢測與處理(實例詳解)

 推薦學習:python學習教學

1 什麼是異常值?

在機器學習中,異常檢測和處理是一個比較小的分支,或者說,是機器學習的一個副產物,因為在一般的預測問題中,模型通常是對整體樣本資料結構的一種表達方式,這種表達方式通常抓住的是整體樣本一般性的性質,而那些在這些性質上表現完全與整體樣本不一致的點,我們就稱其為異常點,通常異常點在預測問題中是不受開發者歡迎的,因為預測問題通產關注的是整體樣本的性質,而異常點的生成機制與整體樣本完全不一致,如果演算法對異常點敏感,那么生成的模型並不能對整體樣本有一個較好的表達,從而預測也會不準確。 從另一方面來說,異常點在某些場景下反而令分析者感到極大興趣,如疾病預測,通常健康人的身體指標在某些維度上是相似,如果一個人的身體指標出現了異常,那麼他的身體狀況在某些方面肯定發生了改變,當然這種改變並不一定是由疾病引起(通常被稱為噪音點),但異常的發生和檢測是疾病預測一個重要起始點。相似的場景也可以應用在信用欺詐,網路攻擊等等。

2 異常值的檢測方法

一般異常值的檢測方法有基於統計的方法,基於聚類的方法,以及一些專門檢測異常值的方法等,下面對這些方法進行相關的介紹。

1.簡單統計

如果使用pandas,我們可以直接使用describe()來觀察資料的統計性描述(只是粗略的觀察一些統計量),不過統計數據為連續型的,如下:

df.describe()

或簡單使用散佈圖也能很清晰的觀察到異常值的存在。如下所示:

2. 3∂原則

這個原則有個條件:資料需要服從常態分配。在3∂原則下,異常值如超過3倍標準差,那麼可以視為異常值。正負3∂的機率是99.7%,那麼距離平均值3∂之外的值出現的機率為P(|x-u| > 3∂)

紅色箭頭所指是異常值。

3. 箱型圖

這種方法是利用箱型圖的四分位數間距(IQR)對異常值進行檢測,也叫 Tukey's test。箱型圖的定義如下:

四分位數距(IQR)就是上四分位數與下四分位數的差值。而我們透過IQR的1.5倍為標準,規定:超過上四分位數 1.5倍IQR距離,或下四分位數-1.5倍IQR距離的點為異常值。下面是Python中的程式碼實現,主要使用了numpypercentile方法。

Percentile = np.percentile(df['length'],[0,25,50,75,100])
IQR = Percentile[3] - Percentile[1]
UpLimit = Percentile[3]+ageIQR*1.5
DownLimit = Percentile[1]-ageIQR*1.5

也可以使用seaborn的視覺化方法boxplot來實作:

f,ax=plt.subplots(figsize=(10,8))
sns.boxplot(y='length',data=df,ax=ax)
plt.show()

##紅色箭頭所指就是異常值。

以上是常用來的判斷異常值的簡單方法。以下來介紹一些較為複雜的檢測異常值演算法,由於涉及內容較多,僅介紹核心思想,有興趣的朋友可自行深入研究。

4. 基於模型偵測

這種方法一般會建構一個

機率分佈模型,並計算物件符合該模型的機率,把具有低機率的物件視為異常點。如果模型是簇的集合,則異常是不顯著屬於任何簇的物件;如果模型是迴歸時,異常是相對遠離預測值的物件。

離群點的機率定義:

離群點是一個對象,關於資料的機率分佈模型,它具有低機率。這種情況的前提是必須知道資料集服從什麼分佈,如果估計錯誤就造成了重尾分佈。

例如特徵工程中的RobustScaler方法,在做資料特徵值縮放的時候,它會利用資料特徵的分位數分佈,將資料根據分位數劃分為多段,只取中間段來做縮放,例如只取25%分位數到75%分位數的資料做縮放。這樣減小了異常數據的影響。

優缺點:(1)有堅實的統計理論基礎,當存在充分的資料和所使用的檢定類型的知識時,這些檢定可能非常有效;(2)對於多元數據,可用的選擇少一些,並且對於高維度數據,這些檢測可能性很差。

5. 基於近鄰度的離群點檢測

統計方法是利用資料的分佈來觀察異常值,有些方法甚至需要一些分佈條件,而在實際中資料的分佈很難達到一些假設條件,在使用上有一定的限制。

確定資料集的有意義的鄰近性測量比確定它的統計分佈更容易。這種方法比統計方法更一般、更容易使用,因為一個物件的離群點得分由到它的k-最近鄰(KNN)的距離給定。

要注意的是:離群點分數對k的值高度敏感。如果k太小,則少量的鄰近離群點可能導致較低的離群點得分;如果K太大,則點數少於k的簇中所有的物件可能都成了離群點。為了使方案對於k的選取更具穩健性,可以使用k個最近鄰的平均距離。

優缺點:(1)簡單;(2)缺點:基於鄰近度的方法需要O(m2)時間,大資料集不適用;(3)該方法對參數的選擇也是敏感的;(4)不能處理具有不同密度區域的資料集,因為它使用全域閾值,不能考慮這種密度的變化。

5. 基於密度的離群點偵測

從基於密度的觀點來說,離群點是在低密度區域的物件。基於密度的離群點檢測與基於鄰近度的離群點檢測密切相關,因為密度通常用鄰近度定義。 一種常用的定義密度的方法是,定義密度為到k個最近鄰的平均距離的倒數。如果該距離小,則密度高,反之亦然。 另一種密度定義是使用DBSCAN聚類演算法所使用的密度定義,即一個物件周圍的密度等於該物件指定距離d內物件的個數。

優缺點:(1)給出了物件是離群點的定量度量,並且即使資料具有不同的區域也能夠很好的處理;(2)與基於距離的方法一樣,這些方法必然具有O(m2)的時間複雜度。對於低維度資料使用特定的資料結構可以達到O(mlogm);(3)參數選擇是困難的。雖然LOF演算法透過觀察不同的k值,然後取得最大離群點得分來處理該問題,但是,仍然需要選擇這些值的上下界。

6. 基於聚類的方法來做異常點檢測

基於聚類的離群點:一個物件是基於聚類的離群點,如果該物件不強屬於任何簇,那麼該對象屬於離群點。

離群點對初始聚類的影響:如果透過聚類檢測離群點,則由於離群點影響聚類,因此存在一個問題:結構是否有效。這也是k-means演算法的缺點,對離群點敏感。為了處理問題,可以使用以下方法:物件聚類,刪除離群點,物件再次聚類(這個不能保證產生最優結果)。

優缺點:(1)基於線性和接近線性複雜度(k均值)的聚類技術來發現離群點可能是高度有效的;(2)簇的定義通常是離群點的補,因此可能同時發現簇和離群點;(3)產生的離群點集和它們的得分可能非常依賴所用的簇的個數和數據中離群點的存在性; (4)聚類演算法產生的簇的品質對此演算法產生的離群點的質量影響非常大。

7. 專門的離群點檢測

其實以上說到聚類方法的本意是無監督分類,並不是為了尋找離群點的,只是恰好它的功能可以實現離群點的偵測,算是衍生的功能。

除了以上提及的方法,還有兩個專門用於檢測異常點的方法比較常用:One Class SVMIsolation Forest,詳細內容不進行深入研究。

3 異常值的處理方法

偵測到了異常值,我們需要對其進行一定的處理。而一般異常值的處理方法可大致分為以下幾種:

  • 刪除含有異常值的記錄:直接將含有異常值的記錄刪除;
  • 視為缺失值:將異常值視為缺失值,利用缺失值處理的方法進行處理;
  • 平均值修正:可用前後兩個觀測值的平均值修正該異常值;
  • #不處理:直接在具有異常值的資料集上進行資料探勘;

是否要刪除異常值可依實際情況考慮。因為有些模型對異常值不很敏感,即使有異常值也不影響模型效果,但是有些模型例如邏輯迴歸LR對異常值很敏感,如果不進行處理,可能會出現過擬合等非常差的效果。

4 異常值總結

以上是對異常值偵測和處理方法的總和。

透過一些檢測方法我們可以找到異常值,但所得結果並不是絕對正確的,具體情況還需自己根據業務的理解加以判斷。同樣,對於異常值如何處理,是該刪除,修正,還是不處理也需結合實際情況考慮,沒有固定的。

 推薦學習:python教學

#

以上是Python資料異常值檢測與處理(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
Python vs. C:了解關鍵差異Python vs. C:了解關鍵差異Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python vs.C:您的項目選擇哪種語言?Python vs.C:您的項目選擇哪種語言?Apr 21, 2025 am 12:17 AM

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

達到python目標:每天2小時的力量達到python目標:每天2小時的力量Apr 20, 2025 am 12:21 AM

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

最大化2小時:有效的Python學習策略最大化2小時:有效的Python學習策略Apr 20, 2025 am 12:20 AM

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

在Python和C之間進行選擇:適合您的語言在Python和C之間進行選擇:適合您的語言Apr 20, 2025 am 12:20 AM

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python與C:編程語言的比較分析Python與C:編程語言的比較分析Apr 20, 2025 am 12:14 AM

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天2小時:Python學習的潛力每天2小時:Python學習的潛力Apr 20, 2025 am 12:14 AM

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python與C:學習曲線和易用性Python與C:學習曲線和易用性Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),