Python中尋找數(shù)據(jù)異常值的3種方法
1. 引言
在數(shù)據(jù)處理、機(jī)器學(xué)習(xí)等領(lǐng)域,我們經(jīng)常需要對(duì)各式各樣的數(shù)據(jù)進(jìn)行處理,本文重點(diǎn)介紹三種非常簡單的方法來檢測數(shù)據(jù)集中的異常值。
2. 舉個(gè)栗子
為了方便介紹,這里給出我們的測試數(shù)據(jù)集,如下:
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"])
圖示如下:
假設(shè)這里我們有一堆學(xué)生的三門科目的考試成績——英語、數(shù)學(xué)和科學(xué)。這些學(xué)生通常表現(xiàn)很好,但其中一人錯(cuò)過了所有考試,三門科目都得了0分。在我們的分析中包括這個(gè)家伙可能會(huì)把事情搞砸,所以我們需要將他視為異常。
3. 孤立森林
使用孤立森林算法來求解上述異常值分析非常簡單,代碼如下:
from sklearn.ensemble import IsolationForest predictions = IsolationForest().fit(data).predict(data) # predictions = array([ 1, 1, 1, 1, 1, -1, -1])
這里預(yù)測值針對(duì)每一行進(jìn)行預(yù)測,預(yù)測結(jié)果為1或者-1;其中1表示該行不是異常值,而-1表示該行是異常值。在上述例子中,我們的孤立森林算法將數(shù)據(jù)中的最后2行都預(yù)測為異常值。
4. 橢圓模型擬合
使用孤橢圓模型擬合算法來求解上述異常值同樣非常方便,代碼如下:
from sklearn.covariance import EllipticEnvelope predictions = EllipticEnvelope().fit(data).predict(data) # predictions = array([ 1, 1, 1, 1, 1, -1, 1])
在上述代碼中,我們使用了另外一種異常值檢測算法來代替孤立森林算法,但是代碼保持不變。相似地,在預(yù)測值中,1表示非異常值,-1表示異常值。在上述情況下,我們的橢圓模型擬合算法只將倒數(shù)第二個(gè)學(xué)生作為異常值,即所有成績都為零的考生。
5. 局部異常因子算法
類似地,我們可以非常方便地使用局部異常因子算法來對(duì)上述數(shù)據(jù)進(jìn)行分析,樣例代碼如下:
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上可用的另一種異常檢測算法,我們可以簡單地在這里隨插隨用。同樣地,這里該算法僅將最后第二個(gè)數(shù)據(jù)行預(yù)測為異常值。
6. 挑選異常值檢測方法
那么,我們?nèi)绾螞Q定哪種異常檢測算法更好呢? 簡而言之,沒有“最佳”的異常值檢測算法——我們可以將它們視為做相同事情的不同方式(并獲得略有不同的結(jié)果)
7. 異常值消除
在我們從上述三種異常檢測算法中的任何一種獲得異常預(yù)測后,我們現(xiàn)在可以執(zhí)行異常值的刪除。 這里我們只需保留異常預(yù)測為1的所有數(shù)據(jù)行,
代碼如下:
# predictions = array([ 1, 1, 1, 1, 1, -1, 1]) data2 = data[predictions==1]
結(jié)果如下:
8. 總結(jié)
本文重點(diǎn)介紹了在Python中使用sklearn機(jī)器學(xué)習(xí)庫來進(jìn)行異常值檢測的三種方法,并給出了相應(yīng)的代碼示例。
到此這篇關(guān)于Python中尋找數(shù)據(jù)異常值的3種方法的文章就介紹到這了,更多相關(guān)Python尋找數(shù)據(jù)異常值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Python使用pickle模塊序列化數(shù)據(jù)優(yōu)化代碼的方法
這篇文章主要介紹了淺談Python使用pickle模塊序列化數(shù)據(jù)優(yōu)化代碼的方法,pickle模塊可以對(duì)多種Python對(duì)象進(jìn)行序列化和反序列化,序列化稱為pickling,反序列化稱為unpickling,需要的朋友可以參考下2023-07-07python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實(shí)例
下面小編就為大家分享一篇python向已存在的excel中新增表,不覆蓋原數(shù)據(jù)的實(shí)例,具有很好超參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05python函數(shù)裝飾器構(gòu)造和參數(shù)傳遞
這篇文章主要介紹了python函數(shù)裝飾器構(gòu)造和參數(shù)傳遞,下面通過一個(gè)小案例來簡單的理解什么是裝飾器,需要的小伙伴可以參考一下2022-03-03python 通過麥克風(fēng)錄音 生成wav文件的方法
今天小編就為大家分享一篇python 通過麥克風(fēng)錄音 生成wav文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python安裝Flask環(huán)境及簡單應(yīng)用示例
這篇文章主要介紹了Python安裝Flask環(huán)境及簡單應(yīng)用,結(jié)合實(shí)例形式分析了Flask框架的安裝、以及路由、重定向、cookie等相關(guān)操作實(shí)現(xiàn)方法,需要的朋友可以參考下2019-05-05