PyOD進(jìn)行異常值檢測(cè)使用實(shí)例
PyOD簡(jiǎn)介
PyOD為異常值檢測(cè)提供了廣泛的算法集合,適用于有監(jiān)督和無(wú)監(jiān)督的場(chǎng)景。無(wú)論處理的是帶標(biāo)簽的數(shù)據(jù)還是未帶標(biāo)簽的數(shù)據(jù),PyOD都提供了一系列技術(shù)來(lái)滿足特定需求。PyOD的突出特性之一是其用戶友好的API,使新手和有經(jīng)驗(yàn)的從業(yè)者都可以輕松的訪問它。
示例1:kNN
我們從一個(gè)簡(jiǎn)單的例子開始,利用k近鄰(kNN)算法進(jìn)行離群值檢測(cè)。
首先從PyOD導(dǎo)入必要的模塊
from pyod.models.knn import KNN from pyod.utils.data import generate_data from pyod.utils.data import evaluate_print
我們生成具有預(yù)定義離群率的合成數(shù)據(jù)來(lái)模擬異常值。
contamination = 0.1 # percentage of outliers
n_train = 200 # number of training points
n_test = 100 # number of testing points
X_train, X_test, y_train, y_test = generate_data(
n_train=n_train, n_test=n_test, contamination=contamination)初始化kNN檢測(cè)器,將其與訓(xùn)練數(shù)據(jù)擬合,并獲得離群值預(yù)測(cè)。
clf_name = 'KNN' clf = KNN() clf.fit(X_train)
使用ROC和Precision @ Rank n指標(biāo)評(píng)估訓(xùn)練模型在訓(xùn)練和測(cè)試數(shù)據(jù)集上的性能。
print("\nOn Training Data:")
evaluate_print(clf_name, y_train, clf.decision_scores_)
print("\nOn Test Data:")
evaluate_print(clf_name, y_test, clf.decision_function(X_test))最后可以使用內(nèi)置的可視化功能可視化離群檢測(cè)結(jié)果。
from pyod.utils.data import visualize
visualize(clf_name, X_train, y_train, X_test, y_test, clf.labels_,
clf.predict(X_test), show_figure=True, save_figure=False)
這是一個(gè)簡(jiǎn)單的用法示例
示例2 模型集成
異常值檢測(cè)有時(shí)會(huì)受到模型不穩(wěn)定性的影響,特別是在無(wú)監(jiān)督的情況下。所以PyOD提供了模型組合技術(shù)來(lái)提高魯棒性。
import numpy as np
from sklearn.model_selection import train_test_split
from scipy.io import loadmat
from pyod.models.knn import KNN
from pyod.models.combination import aom, moa, average, maximization, median
from pyod.utils.utility import standardizer
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print
X, y = generate_data(train_only=True) # load data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4)
# standardizing data for processing
X_train_norm, X_test_norm = standardizer(X_train, X_test)
n_clf = 20 # number of base detectors
# Initialize 20 base detectors for combination
k_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140,
150, 160, 170, 180, 190, 200]
train_scores = np.zeros([X_train.shape[0], n_clf])
test_scores = np.zeros([X_test.shape[0], n_clf])
print('Combining {n_clf} kNN detectors'.format(n_clf=n_clf))
for i in range(n_clf):
k = k_list[i]
clf = KNN(n_neighbors=k, method='largest')
clf.fit(X_train_norm)
train_scores[:, i] = clf.decision_scores_
test_scores[:, i] = clf.decision_function(X_test_norm)
# Decision scores have to be normalized before combination
train_scores_norm, test_scores_norm = standardizer(train_scores,
test_scores)
# Combination by average
y_by_average = average(test_scores_norm)
evaluate_print('Combination by Average', y_test, y_by_average)
# Combination by max
y_by_maximization = maximization(test_scores_norm)
evaluate_print('Combination by Maximization', y_test, y_by_maximization)
# Combination by median
y_by_median = median(test_scores_norm)
evaluate_print('Combination by Median', y_test, y_by_median)
# Combination by aom
y_by_aom = aom(test_scores_norm, n_buckets=5)
evaluate_print('Combination by AOM', y_test, y_by_aom)
# Combination by moa
y_by_moa = moa(test_scores_norm, n_buckets=5)
evaluate_print('Combination by MOA', y_test, y_by_moa)如果上面代碼提示錯(cuò)誤,需要安裝combo包
pip install combo
總結(jié)
可以看到,PyOD進(jìn)行離群值檢測(cè)是非常方便的,從基本的kNN離群值檢測(cè)到模型組合,PyOD都提供了一個(gè)全面的整合,這使得我們可以輕松高效地處理異常值檢測(cè)任務(wù)。
最后pyod的文檔和官網(wǎng)
https://avoid.overfit.cn/post/9df020be7be84d759aeef2dfa8e4d8cd
以上就是PyOD進(jìn)行異常值檢測(cè)使用實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于PyOD異常值檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python復(fù)制Excel表格中指定數(shù)據(jù)若干次的方法
本文介紹基于Python語(yǔ)言,讀取Excel表格文件數(shù)據(jù),并基于其中某一列數(shù)據(jù)的值,將這一數(shù)據(jù)處于指定范圍的那一行加以復(fù)制,并將所得結(jié)果保存為新的Excel表格文件的方法,需要的朋友可以參考下2024-02-02
python 下劃線的多種應(yīng)用場(chǎng)景總結(jié)
Python有很多地方使用下劃線,在不同場(chǎng)合下,有不同含義。本文總結(jié)Python語(yǔ)言編程中常用下劃線的地方,力圖一次搞懂下劃線的常見用法,感興趣的朋友快來(lái)一起看看吧2021-05-05
Python識(shí)別設(shè)備和操作系統(tǒng)神器device_detector使用探究
這篇文章主要介紹了Python識(shí)別設(shè)備和操作系統(tǒng)神器device_detector庫(kù)使用探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python任務(wù)調(diào)度利器之APScheduler詳解
所謂的任務(wù)調(diào)度是指安排任務(wù)的執(zhí)行計(jì)劃,即何時(shí)執(zhí)行,怎么執(zhí)行等。這篇文章主要介紹了Python任務(wù)調(diào)度利器之APScheduler詳解,需要的朋友可以參考下2020-04-04
Pygame游戲開發(fā)實(shí)例講解之圖形繪制與鍵鼠事件
這篇文章主要介紹了Pygame游戲開發(fā)中常用的圖形繪制與鍵鼠事件實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11
Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)示例代碼
在Python中,分支結(jié)構(gòu)通過if、elif和else關(guān)鍵字來(lái)實(shí)現(xiàn)條件判斷,在使用if語(yǔ)句時(shí),程序會(huì)根據(jù)條件表達(dá)式的真假執(zhí)行相應(yīng)的代碼塊,這篇文章主要介紹了Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),需要的朋友可以參考下2024-03-03
一篇文章帶你搞懂Python類的相關(guān)知識(shí)
今天我們要說的是面向?qū)ο蟮暮诵?----類,類能幫我們把復(fù)雜的事情變得有條理,有順序,希望大家通過學(xué)習(xí)類能改善自己的編碼風(fēng)格,使代碼變得更為好看,更加通俗易懂,需要的朋友可以參考下2021-05-05
python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介
這篇文章主要介紹了python通用數(shù)據(jù)庫(kù)操作工具 pydbclib的使用簡(jiǎn)介,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12

