網站首頁 編程語言 正文
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機器學習庫來進行異常值檢測的三種方法,并給出了相應的代碼示例。
原文鏈接:https://blog.51cto.com/u_15506603/5512727
相關推薦
- 2022-06-29 python人工智能tensorflow函數tensorboard使用方法_python
- 2021-12-03 C++類和對象實戰之Date類的實現方法_C 語言
- 2022-08-01 Python實現數字圖像處理染色體計數示例_python
- 2021-12-15 C#?多線程學習之基礎入門_C#教程
- 2022-09-18 python實現修改xml文件內容_python
- 2022-09-09 python定義函數如何判斷年份是否為閏年_python
- 2022-02-16 Flutter無context頁面跳轉及獲取全局context
- 2023-04-22 python統計函數被調用次數的實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支