网易首页 > 网易号 > 正文 申请入驻

使用PyOD进行异常值检测

0
分享至


异常值检测各个领域的关键任务之一。PyOD是Python Outlier Detection的缩写,可以简化多变量数据集中识别异常值的过程。在本文中,我们将介绍PyOD包,并通过实际给出详细的代码示例



PyOD简介

PyOD为异常值检测提供了广泛的算法集合,适用于有监督和无监督的场景。无论处理的是带标签的数据还是未带标签的数据,PyOD都提供了一系列技术来满足特定需求。PyOD的突出特性之一是其用户友好的API,使新手和有经验的从业者都可以轻松的访问它。

示例1:kNN

我们从一个简单的例子开始,利用k近邻(kNN)算法进行离群值检测。

首先从PyOD导入必要的模块

from pyod.models.knn import KNN
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print

我们生成具有预定义离群率的合成数据来模拟异常值。

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检测器,将其与训练数据拟合,并获得离群值预测。

clf_name = 'KNN'
clf = KNN()
clf.fit(X_train)

使用ROC和Precision @ Rank n指标评估训练模型在训练和测试数据集上的性能。

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))

最后可以使用内置的可视化功能可视化离群检测结果。

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)



这是一个简单的用法示例

示例2 模型集成

异常值检测有时会受到模型不稳定性的影响,特别是在无监督的情况下。所以PyOD提供了模型组合技术来提高鲁棒性。

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)

如果上面代码提示错误,需要安装combo包

pip install combo

总结

可以看到,PyOD进行离群值检测是非常方便的,从基本的kNN离群值检测到模型组合,PyOD都提供了一个全面的整合,这使得我们可以轻松高效地处理异常值检测任务。

最后pyod的文档和官网

https://avoid.overfit.cn/post/9df020be7be84d759aeef2dfa8e4d8cd

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“人造数学天才”,一个非常拙劣的谎言,彻头彻尾的炒作

“人造数学天才”,一个非常拙劣的谎言,彻头彻尾的炒作

爆角追踪
2024-06-18 17:25:17
1958年,陈毅请水静吃饭,得知吃饭的时间后,水静:这也太奇怪了

1958年,陈毅请水静吃饭,得知吃饭的时间后,水静:这也太奇怪了

简史档案馆
2024-06-19 10:27:50
老年人要远离豆角?医生直言:不想身体出问题,这3种菜别天天吃

老年人要远离豆角?医生直言:不想身体出问题,这3种菜别天天吃

今日养生之道
2024-06-20 15:28:32
副董事长林斌被指违背承诺减持套现1.6亿 小米回应:是做公益

副董事长林斌被指违背承诺减持套现1.6亿 小米回应:是做公益

财联社
2024-06-20 13:45:08
形势严峻!张国清、刘国中先后提要求,再有省长赶赴受灾现场

形势严峻!张国清、刘国中先后提要求,再有省长赶赴受灾现场

政知新媒体
2024-06-20 21:43:27
嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

嫦娥六号成功登月,NASA专家:等美开建月球基地,中国或已建50年

吾天
2024-06-21 02:05:33
玫瑰的故事热播,刘亦菲用58万的裙子,打了多少国产剧假穷人的脸

玫瑰的故事热播,刘亦菲用58万的裙子,打了多少国产剧假穷人的脸

子芫伴你成长
2024-06-16 22:48:25
《玫瑰的故事》结局:庄国栋留下绝笔信,失去希望终日等死

《玫瑰的故事》结局:庄国栋留下绝笔信,失去希望终日等死

竹英的成长计划
2024-06-19 18:29:58
曝江大女博士知三当三!疯狂叫嚣:离婚就给证据,先后获得500万

曝江大女博士知三当三!疯狂叫嚣:离婚就给证据,先后获得500万

户外阿崭
2024-05-17 16:27:58
“中国已经进入一个最缺德的时代”这是危言耸听?还是故意抹黑?

“中国已经进入一个最缺德的时代”这是危言耸听?还是故意抹黑?

影孖看世界
2024-05-05 15:21:40
复旦大学学生暴打老师后续:知情人透内情 打人者曝光,果然有情况

复旦大学学生暴打老师后续:知情人透内情 打人者曝光,果然有情况

辉哥说动漫
2024-06-20 14:52:39
李莉女士怀抱着无畏的精神,披露国际风云,却不幸陷入网暴漩涡中

李莉女士怀抱着无畏的精神,披露国际风云,却不幸陷入网暴漩涡中

橘色数码
2024-06-06 12:51:20
事闹大了,南方医科大领导召开紧急会议,俞莉医生疑似被停职。

事闹大了,南方医科大领导召开紧急会议,俞莉医生疑似被停职。

文雅笔墨
2024-06-18 01:43:02
到底是奶奶亲,还是姥姥亲?科学家给出了明确答案,看了扎心又现实

到底是奶奶亲,还是姥姥亲?科学家给出了明确答案,看了扎心又现实

校长侃财
2024-06-11 12:08:18
99.99%认为姜萍成绩是假的?还有幕后主使?达摩院回应

99.99%认为姜萍成绩是假的?还有幕后主使?达摩院回应

三月柳
2024-06-20 22:45:18
原来有这么多工作需要保密!网友:因好奇看了一眼,直接被击毙了

原来有这么多工作需要保密!网友:因好奇看了一眼,直接被击毙了

有趣的羊驼
2024-06-07 16:03:51
中国队很可能成为2026年世界杯预选赛打比赛最多却没出线的球队!

中国队很可能成为2026年世界杯预选赛打比赛最多却没出线的球队!

刺头体育
2024-06-20 02:38:10
“85后”清华博士县委书记,晋升副市长

“85后”清华博士县委书记,晋升副市长

鲁中晨报
2024-06-20 18:43:03
中国U18女排复赛也横扫:三局对手仅34分 三场3-0横扫硬实力爆表

中国U18女排复赛也横扫:三局对手仅34分 三场3-0横扫硬实力爆表

颜小白的篮球梦
2024-06-20 17:08:43
刚刚!北约传来重大消息,高层变天,给中国的承诺该兑现了...

刚刚!北约传来重大消息,高层变天,给中国的承诺该兑现了...

新财迷
2024-06-20 09:14:47
2024-06-21 04:58:44
deephub
deephub
CV NLP和数据挖掘知识
1373文章数 1416关注度
往期回顾 全部

科技要闻

小米SU7流量泼天,富贵却被蔚来接住了

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

头条要闻

欧洲杯:凯恩破门 英格兰1-1丹麦

体育要闻

千夫所指的关系户 成了拯救葡萄牙的英雄

娱乐要闻

叶舒华参加柯震东生日聚会,五毒俱全

财经要闻

楼市新“王炸”!释放何信号?

汽车要闻

售价11.79-14.39万元 新一代哈弗H6正式上市

态度原创

健康
游戏
房产
手机
公开课

晚餐不吃or吃七分饱,哪种更减肥?

魔兽世界怀旧服即将开服,正式服何时开放?官方早已透露玄机!

房产要闻

海棠湾!一所重量级国际学校真的来了!

手机要闻

真我GT7再次被确认:超声波指纹+新等深超微曲,一加13要有压力了

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版