Python异常值的自动检测实战案例

       


概要

在数据分析和机器学习中,异常值的检测是一个关键步骤,它有助于识别数据中的异常模式和离群点。本文将介绍Python中异常值检测的实战案例,使用一些常见的技术和库,为大家提供全面的示例代码和详细解释。


异常值的定义

异常值是指与大多数数据明显不同的观测值,可能是由于测量错误、数据录入问题或真实但罕见的事件引起。我们将使用一些统计方法和可视化工具来检测这些异常值。

Z-Score方法

Z-Score是一种常用的异常值检测方法,它通过计算数据点与均值的偏差来判断是否为异常。

示例代码如下:

import numpy as np
from scipy.stats import zscore

# 生成随机数据
data = np.random.randn(100)

# 计算Z-Score
z_scores = zscore(data)

# 定义阈值,判断是否为异常值
threshold = 2.5
outliers = np.where(np.abs(z_scores) > threshold)[0]

print("Z-Score Outliers:", outliers)

Isolation Forest方法

Isolation Forest是一种基于决策树的异常值检测方法,它通过将数据点随机分割成孤立的子空间来寻找异常值。

以下是Isolation Forest的实例代码:

from sklearn.ensemble import IsolationForest

# 生成随机数据
data = np.random.randn(100, 1)

# 创建Isolation Forest模型
model = IsolationForest(contamination=0.1)  # contamination参数表示异常值的比例

# 训练模型并预测异常值
outliers = model.fit_predict(data)

print("Isolation Forest Outliers:", np.where(outliers == -1)[0])

可视化异常值

可视化是理解和识别异常值的强大工具。使用Matplotlib和Seaborn库,可以绘制直方图和箱线图,以更直观地展示数据的分布和异常值。

import matplotlib.pyplot as plt
import seaborn as sns

# 生成带有异常值的随机数据
data = np.concatenate([np.random.randn(80), np.random.randn(20) * 5 + 10])

# 绘制直方图
plt.figure(figsize=(10, 6))
sns.histplot(data, kde=True)
plt.title("Histogram with Outliers")
plt.show()

# 绘制箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(x=data)
plt.title("Boxplot with Outliers")
plt.show()

处理异常值

处理方法包括删除异常值、替换为中位数或均值,或者采用更复杂的插值方法。具体处理方式应根据数据和问题的特点而定。

# 假设我们将异常值替换为中位数
median_value = np.median(data)
data_no_outliers = np.where(np.abs(z_scores) > threshold, median_value, data)

# 绘制处理后的数据
plt.figure(figsize=(10, 6))
sns.histplot(data_no_outliers, kde=True)
plt.title("Histogram without Outliers")
plt.show()

DBSCAN聚类方法

除了基于统计的方法外,聚类方法也常被用于异常值检测。Density-Based Spatial Clustering of Applications with Noise (DBSCAN) 是一种基于密度的聚类算法,可以识别稀疏区域中的异常点。

以下是DBSCAN的示例代码:

from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

# 生成带有异常值的随机数据
data = np.concatenate([np.random.randn(80), np.random.randn(20) * 5 + 10])

# 使用DBSCAN进行聚类
data = data.reshape(-1, 1)  # DBSCAN要求输入是二维数组
data_scaled = StandardScaler().fit_transform(data)
dbscan = DBSCAN(eps=0.5, min_samples=5)
clusters = dbscan.fit_predict(data_scaled)

# 找出标签为-1的异常点
outliers = np.where(clusters == -1)[0]

print("DBSCAN Outliers:", outliers)

异常值检测应用于实际数据

通过使用一个真实的数据集,可以更直观地了解异常值检测在实际场景中的应用。

以下示例使用seaborn库加载鸢尾花数据集,然后应用Z-Score方法检测异常值。

import seaborn as sns

# 加载鸢尾花数据集
iris = sns.load_dataset("iris")

# 选择一个特征进行演示(这里选择花萼长度)
feature = "sepal_length"
data_iris = iris[feature]

# 计算Z-Score
z_scores_iris = zscore(data_iris)

# 定义阈值,判断是否为异常值
threshold_iris = 2.5
outliers_iris = np.where(np.abs(z_scores_iris) > threshold_iris)[0]

print("Z-Score Outliers in Iris Dataset:", outliers_iris)

使用箱线图识别异常值

箱线图是另一种常用于识别异常值的可视化工具。通过观察箱线图的箱体和触须,可以直观地检测到数据中的离群点。

以下是使用Seaborn库创建箱线图的示例代码:

# 绘制箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(x=data_iris)
plt.title("Boxplot for Sepal Length in Iris Dataset")
plt.show()

在箱线图中,位于箱体外部的点被认为是异常值。通过结合箱线图和Z-Score方法,可以更全面地了解数据的分布和异常情况。

异常值处理策略

对于检测到的异常值,合理的处理策略是至关重要的。有几种常见的处理方式,包括删除异常值、替换为中位数或均值,或者采用更复杂的插值方法。

以下是一个简单的异常值处理示例:

# 假设我们将异常值替换为中位数
median_value_iris = np.median(data_iris)
data_iris_no_outliers = np.where(np.abs(z_scores_iris) > threshold_iris, median_value_iris, data_iris)

# 绘制处理后的数据
plt.figure(figsize=(10, 6))
sns.histplot(data_iris_no_outliers, kde=True)
plt.title("Histogram for Sepal Length without Outliers")
plt.show()

总结

本篇文章深入探讨了Python中异常值检测的实战案例,涵盖了多种常见的异常值检测方法和处理策略。从统计学方法的Z-Score,到基于决策树的Isolation Forest,再到基于密度的DBSCAN,展示了多样性的异常值检测工具。通过实际数据的示例,不仅学会了如何运用这些方法,还了解了在不同情境下选择合适的异常值处理策略的重要性。

可视化在异常值检测中扮演了关键的角色,通过绘制直方图、箱线图等图表,读者可以更直观地理解数据的分布和异常情况。异常值处理也被详细探讨,强调了合理而灵活的策略,如替换为中位数或均值。实际项目中,异常值检测并非一劳永逸,需要结合领域知识和数据特点灵活运用。本文通过综合示例代码和注意事项,为大家提供了更全面的异常值检测实战指南。

总体而言,异常值的自动检测在数据分析和机器学习中是不可或缺的一环。通过掌握这些实用的技术和工具,能够更熟练地处理数据中的异常情况,提高模型的准确性和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/253017.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机下Ubuntu上网设置

文章目录 一、虚拟机上网的两种方式1.1 NAT模式(Network Address Translation)1.2 桥接模式(Bridge Mode)1.3 简介 二、实际配置2.1 NAT模式配置2.2 桥接模式配置 之前跟着博客配了好几个也没用,后来自己慢慢模式实践测…

HQL优化之数据倾斜

group by导致倾斜 前文提到过,Hive中未经优化的分组聚合,是通过一个MapReduce Job实现的。Map端负责读取数据,并按照分组字段分区,通过Shuffle,将数据发往Reduce端,各组数据在Reduce端完成最终的聚合运算。…

女生想通过培训转行软件测试类可行吗?

首先,女生转行IT行业做软件测试是可以的,因为软件测试岗,尤其是其中的功能性测试岗,入行门槛并不高,有很多女生在做,且我个人认为还蛮适合女生的,因为女生相对来说更细心,文档能力也…

PVE系列-防火墙的免费安静之旅IPfire

Ventoy一款引导盘可以引导各种启动盘安装盘的工具https://www.ventoy.net/cn/index.html 在它的兼容iso的列表 中发现了Ipfirehttps://wiki.ipfire.org/ ,本来用着openwrt也挺好,忍不住的虚拟机尝了尝鲜,发现的功能有2, 安全吧&a…

植物分类-PlantsClassification

一、模型配置 一、backbone resnet50 二、neck GlobalAveragePooling 三、head fc 四、loss type‘LabelSmoothLoss’, label_smooth_val0.1, num_classes30, reduction‘mean’, loss_weight1.0 五、optimizer lr0.1, momentum0.9, type‘SGD’, weight_decay0.0001 六、sche…

06. Python模块

目录 1、前言 2、什么是模块 3、Python标准库模块 3.1、os模块 3.2、datetime 模块 3.3、random模块 4、自定义模块 4.1、创建和使用 4.2、模块命名空间 4.3、作用域 5、安装第三方依赖 5.1、使用 pip 安装单个依赖 5.2、从 requirements.txt 安装依赖 5.3、安装指…

DOM树和DOM对象与JS关系的深入研究

const和let使用说明 var不好用,我们如果用变量都是用let,如果用常量乃是不变的量,我们用const,见let const知变量是否可变。比如一个常量在整个程序不会变,但是你用let,是可以的。但是let最好与内部变量改…

Mybatis的插件运⾏原理,如何编写⼀个插件?

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

基于springboot实现的健身房管理系统

一、系统架构 前端:html | js | css | jquery | bootstrap 后端:springboot | springdata-jdbc 环境:jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 管理员-首页 03. 管理员-会员卡查询 04. 管理员-会员管理…

Zotero攻略

给大家分享一下我对于Zotero的使用。 1、下载链接 Zotero | Your personal research assistant 进入后直接下载即可 2、一些好用的插件 (1)Zotero Connector 下载地址:Zotero | Connectors 超级好用!不用一篇一篇下PDF了&am…

mipi dsi协议DBI/DPI接口

MIPI dsi协议中的DBI/DPI接口主要用于主机和display设备之间的数据传输,说的更通俗一点就是DSI RX控制器和实际的显示面板之间的接口;dsi 协议spec中对DBI/DPI有描述: DSI协议中对DBI 接口模式命名为command mode operation,对DP…

QT5 CMake进行开发

配置环境 因为是使用CMake进行开发,所以推荐使用的QT版本是 5.14.2。因为楼主有 vs2015的环境,所以在安装QT时选择的是 msvc 2015 64bit msvc 2017 32bit 勾选了所有需要的模块。kit配置如下 图中画框的地方是比较关键的地方,1. 指定编译器…

【CMU 15-445】Lecture 12: Query Execution I 学习笔记

Query Execution I Processing ModelsIterator ModelMaterialization ModelVectorization Model Access MethodsSequential ScanIndex Scan Modification QueriesHalloween Problem 本节课主要介绍SQL语句执行的相关机制。 Processing Models 首先是处理模型,它定义…

FreeRtos里的几个中断屏蔽

1、primask 寄存器 PRIMASK用于禁止除NMI和HardFalut外的所有异常和中断,使用方法: cpsid i ; //设置primask (禁止中断) cpsie i ; //清除primask (使能中断) 也可以 movs r0,#1 msr primask r0; //将 1写入p…

RHEL7.5编译openssl1.1.1w源码包到rpm包

openssl1.1.1w下载地址 https://www.openssl.org/source/ 安装依赖包 yum -y install curl which make gcc perl perl-WWW-Curl rpm-build wget http://mirrors.aliyun.com/centos-vault/7.5.1804/os/x86_64/Packages/perl-WWW-Curl-4.15-13.el7.x86_64.rpm rpm -ivh pe…

java.lang.IllegalArgumentException: Could not resolve placeholder XXX‘ in value

问题描述 使用Springcloudalibaba的nacos作为配置中心,服务启动时报错: java.lang.IllegalArgumentException: Could not resolve placeholder XXX‘ in value java.lang.IllegalArgumentException: Param ‘serviceName’ is illegal, serviceName is …

[笔记] wsl 下使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统,需要从零开始搭建系统,由于教程中给的虚拟机搭建的方式感觉还是过于重量级,因此研究了一下通过 qemu 模拟器,配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器,…

ffmpeg6.0-ffplay.c源码分析(二)之整体框架大流程分析

文章目录 main()函数解读stream_open()函数解析event_loop函数解析关注公众号看全文: 想分析任何一个可执行程序,肯定从main()函数下手是比较合适的,ffplay的源代码也是如此。 main()函数解读 /* Called from the main */ int main(int argc, char **argv)

塑料检查井配套开发了注塑成型的井盖、井筒、井座

塑料检查井配套开发的注塑成型井盖、井筒、井座——城市基础设施的新选择 随着城市化进程的加快,城市基础设施建设的品质与效率日益受到重视。在这个背景下,塑料检查井及其配套开发的注塑成型井盖、井筒、井座以其独特的优势,正在逐渐取代传…

全面剖析:新页ERP系统不为人知的一面,以及系统的工作流程解析!

一.介绍erp系统 1.什么是erp系统 ERP是企业资源规划(Enterprise Resource Planning)系统的缩写,它是一种集成管理软件,旨在帮助企业有效地管理和整合各项业务流程和资源。ERP系统能够涵盖企业的各个部门和功能,包括财…