首頁 > 軟體

Python中尋找資料異常值的3種方法

2022-08-22 14:00:34

1. 引言

在資料處理、機器學習等領域,我們經常需要對各式各樣的資料進行處理,本文重點介紹三種非常簡單的方法來檢測資料集中的異常值。 

2. 舉個栗子

為了方便介紹,這裡給出我們的測試資料集,如下:

data = pd.DataFrame([
[87, 82, 85],
[81, 89, 75],
[86, 87, 69],
[91, 79, 86],
[88, 89, 82],
[0, 0, 0], # this guy missed the exam
[100, 100, 100],
], columns=["math", "science", "english"])

圖示如下:

假設這裡我們有一堆學生的三門科目的考試成績——英語、數學和科學。這些學生通常表現很好,但其中一人錯過了所有考試,三門科目都得了0分。在我們的分析中包括這個傢伙可能會把事情搞砸,所以我們需要將他視為異常。

3. 孤立森林

使用孤立森林演演算法來求解上述異常值分析非常簡單,程式碼如下:

from sklearn.ensemble import IsolationForest
predictions = IsolationForest().fit(data).predict(data)
# predictions = array([ 1, 1, 1, 1, 1, -1, -1])

這裡預測值針對每一行進行預測,預測結果為1或者-1;其中1表示該行不是異常值,而-1表示該行是異常值。在上述例子中,我們的孤立森林演演算法將資料中的最後2行都預測為異常值。

4. 橢圓模型擬合

使用孤橢圓模型擬合演演算法來求解上述異常值同樣非常方便,程式碼如下:

from sklearn.covariance import EllipticEnvelope
predictions = EllipticEnvelope().fit(data).predict(data)
# predictions = array([ 1, 1, 1, 1, 1, -1, 1])

在上述程式碼中,我們使用了另外一種異常值檢測演演算法來代替孤立森林演演算法,但是程式碼保持不變。相似地,在預測值中,1表示非異常值,-1表示異常值。在上述情況下,我們的橢圓模型擬合演演算法只將倒數第二個學生作為異常值,即所有成績都為零的考生。

5. 區域性異常因子演演算法

類似地,我們可以非常方便地使用區域性異常因子演演算法來對上述資料進行分析,樣例程式碼如下:

from sklearn.neighbors import LocalOutlierFactor
predictions = LocalOutlierFactor(n_neighbors=5, novelty=True).fit(data).predict(data)
# array([ 1, 1, 1, 1, 1, -1, 1])

區域性異常因子演演算法是sklearn上可用的另一種異常檢測演演算法,我們可以簡單地在這裡隨插隨用。同樣地,這裡該演演算法僅將最後第二個資料行預測為異常值。

6. 挑選異常值檢測方法

那麼,我們如何決定哪種異常檢測演演算法更好呢? 簡而言之,沒有“最佳”的異常值檢測演演算法——我們可以將它們視為做相同事情的不同方式(並獲得略有不同的結果)

7. 異常值消除

在我們從上述三種異常檢測演演算法中的任何一種獲得異常預測後,我們現在可以執行異常值的刪除。 這裡我們只需保留異常預測為1的所有資料行,

程式碼如下:

# predictions = array([ 1, 1, 1, 1, 1, -1, 1])
data2 = data[predictions==1]

結果如下:

8. 總結

本文重點介紹了在Python中使用sklearn機器學習庫來進行異常值檢測的三種方法,並給出了相應的程式碼範例。

到此這篇關於Python中尋找資料異常值的3種方法的文章就介紹到這了,更多相關Python尋找資料異常值內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com