什么是离群值?如何检测?

文章目录

    • 基础概念
      • 什么是离群值?
      • 特征:
    • 异常值和离群值有差异吗?
      • 关键区别:
      • 示例对比:
      • 总结:
    • 离群值的检测与处理
      • 离群值的检测方法:
      • 处理方法:
      • 示例:
    • 实操:如何使用Python检测离群值?
    • 1. 使用 Z-Score 检测离群值
      • 原理:
      • 代码示例:
    • 2. 使用 IQR(四分位距)检测离群值
      • 原理:
      • 代码示例:
    • 3. 使用散点图或箱线图可视化离群值
      • 代码示例:
    • 4. 使用 sklearn 的 Isolation Forest 算法
      • 原理:
      • 代码示例:
    • 5. 使用 sklearn 的 Local Outlier Factor (LOF)
      • 代码示例:
    • Python检测离群值总结
    • 相关阅读

基础概念

什么是离群值?

Outliers(离群值),也称逸出值,是指在数据集中显著偏离其他数据点的值。这些值与大多数观测值之间存在明显的差异,可能是由于异常情况、测量错误、数据输入错误或真实的罕见现象导致的。

特征:

  1. 数值偏离: 与其他数据点相比,数值异常大或异常小。
  2. 分布偏差: 数据分布上表现为长尾或极端值。
  3. 影响分析: 离群值可能会显著影响均值、标准差、回归分析等统计模型的结果。

异常值和离群值有差异吗?

异常值离群值虽然常常互换使用,但在统计学和数据分析中有细微差异:

  1. 异常值 (Outlier)

    • 定义:明显偏离数据集中的大部分样本点的数据值。
    • 特征:可能是由数据采集错误、录入错误或罕见事件导致的。
    • 处理方式:常被视为错误数据,需要修正或删除。
    • 例子:如果大多数人的年龄在20-60岁之间,但某个记录显示年龄为150岁,这可能是异常值。
  2. 离群值 (Anomaly)

    • 定义:在给定上下文或模式中表现异常的数据点。
    • 特征:可能反映某些特殊或罕见事件,并不一定是错误数据。
    • 处理方式:需要进一步分析,可能代表异常行为(如欺诈检测中的异常交易)。
    • 例子:信用卡交易中,某人突然进行一系列大额支付,可能是离群值,但需要进一步分析是否欺诈。

关键区别:

  • 数据质量方面:异常值通常视为错误或无效数据,而离群值可能是有效但罕见的数据。
  • 分析目的:异常值常需清理,而离群值常需分析。
  • 背景依赖性:离群值取决于具体场景和分析目标,而异常值通常是整体数据分布之外的数据点。

示例对比:

假设你分析某城市的人口收入分布:

  • 异常值:某些收入记录为负值或过高值(如10亿),可能是数据录入错误。
  • 离群值:年收入100万的人可能是高收入群体,尽管罕见,但可能是有效数据。

总结:

  • 异常值:主要关注数据错误,倾向于剔除或修复。
  • 离群值:关注模式异常,倾向于分析背后的原因。

离群值的检测与处理

离群值的检测方法:

  1. 可视化方法:
    • 箱线图(Boxplot): 使用 IQR(四分位距)来标记异常点。
    • 散点图(Scatter Plot): 可直观显示数据的分布和异常值。
  2. 统计方法:
    • Z-Score 方法: 超过特定标准差的值(如±3)可视为离群值。
    • IQR 方法: 低于 Q1 - 1.5×IQR 或高于 Q3 + 1.5×IQR 的值被视为异常点。
  3. 机器学习方法:
    • 孤立森林(Isolation Forest)
    • 局部异常因子(Local Outlier Factor, LOF)

处理方法:

  1. 删除: 如果离群值是明显的错误或噪声,可以将其删除。
  2. 替换: 使用中位数或均值替代异常值。
  3. 独立分析: 如果离群值是真实的罕见现象,可以单独建模分析。
  4. 变换: 数据转换(如对数变换)减少异常值的影响。

示例:

数据集:[10, 12, 11, 13, 300, 14, 15]
这里的 300 就可能是一个离群值。

离群值的检测和处理是数据分析和机器学习预处理中重要的步骤,尤其是在确保模型鲁棒性和预测准确性方面至关重要。

实操:如何使用Python检测离群值?

在 Python 中,可以通过多种方法寻找离群值,以下是常用的几种方法:


1. 使用 Z-Score 检测离群值

原理:

Z-Score 衡量每个数据点与均值之间的标准差距离。通常绝对值大于 3 的点被认为是离群值。

代码示例:

import numpy as np
import pandas as pd

# 示例数据
data = [10, 12, 11, 13, 300, 14, 15]
df = pd.DataFrame(data, columns=['value'])

# 计算 Z-Score
df['z_score'] = (df['value'] - df['value'].mean()) / df['value'].std()

# 筛选离群值
outliers = df[np.abs(df['z_score']) > 3]
print(outliers)

2. 使用 IQR(四分位距)检测离群值

原理:

IQR = Q3 - Q1,判断是否超出正常范围:

  • 下界:Q1 - 1.5 * IQR
  • 上界:Q3 + 1.5 * IQR

代码示例:

import numpy as np
import pandas as pd

# 示例数据
data = [10, 12, 11, 13, 300, 14, 15]
df = pd.DataFrame(data, columns=['value'])

# 计算 IQR
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1

# 确定边界
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 筛选离群值
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
print(outliers)

3. 使用散点图或箱线图可视化离群值

代码示例:

import matplotlib.pyplot as plt

# 绘制箱线图
plt.boxplot(data)
plt.title('Boxplot for Outlier Detection')
plt.show()

4. 使用 sklearn 的 Isolation Forest 算法

原理:

基于树结构划分数据,通过异常样本在树中被孤立的速度判断是否为异常值。

代码示例:

from sklearn.ensemble import IsolationForest

# 数据
data = [[10], [12], [11], [13], [300], [14], [15]]

# 建立模型
clf = IsolationForest(contamination=0.1, random_state=42)
clf.fit(data)

# 预测 (-1 为异常值)
predictions = clf.predict(data)

# 输出异常点
outliers = [data[i][0] for i in range(len(data)) if predictions[i] == -1]
print(outliers)

5. 使用 sklearn 的 Local Outlier Factor (LOF)

代码示例:

from sklearn.neighbors import LocalOutlierFactor

# 数据
data = [[10], [12], [11], [13], [300], [14], [15]]

# 建立模型
lof = LocalOutlierFactor(n_neighbors=2)
predictions = lof.fit_predict(data)

# 输出异常点
outliers = [data[i][0] for i in range(len(data)) if predictions[i] == -1]
print(outliers)

Python检测离群值总结

  • 统计方法: Z-Score 和 IQR 适合小规模数据分析。
  • 机器学习方法: Isolation Forest 和 LOF 适合处理复杂、高维数据集。
  • 可视化分析: 箱线图和散点图便于初步探索数据分布和潜在异常值。

根据数据特性具体需求选择合适的方法进行分析。

相关阅读

  • 什么是离群值?如何检测?
  • 深度学习中的离群值
  • 文本分类中的离群值特征
  • 关于置信学习的文献综述(简易版)

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

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

相关文章

Python多分类Logistic回归详解与实践

在机器学习中&#xff0c;Logistic回归是一种基本但非常有效的分类算法。它不仅可以用于二分类问题&#xff0c;还可以扩展应用于多分类问题。本文将详细介绍如何使用Python实现一个多分类的Logistic回归模型&#xff0c;并给出详细的代码示例。 一、Logistic回归简介 Logist…

前端,npm install安装依赖卡在sill idealTree buildDeps(设置淘宝依赖)

输入npm i后&#xff0c;一直卡在sill idealTree buildDeps&#xff0c;一动不动 cnpm可以安装成功&#xff0c;但使用cnpm不会生成package-lock.json文件 设置淘宝依赖&#xff0c;依然卡住&#xff0c;挂梯子也不行 解决方法&#xff1a; // 取消ssl验证 set strict-ssl …

装饰者模式

1、定义 装饰者模式&#xff1a;在不必改变原类和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象 2、实际应用 星巴克的咖啡系统项目&#xff1a; 星巴克要求的各种下单功能&#xff1a;大杯原味、大…

招银网路Java后端一面,难度有点大!

这是一位武汉理工大学同学的招银网络一面面经,同样附带超详细的参考答案。大家可以用来查漏补缺,针对性地补短板。 招银网络一面还是比较简单的,基本都是一些比较重要且高频的常规八股,项目问的不多。到了二面的时候, 会开始主要考察你的项目。 1、自我介绍 自我介绍一般…

C++之设计模式

设计模式 简介单例模式饿汉模式懒汉模式 工厂模式简单工厂模式工厂方法模式抽象工厂模式 建造者模式代理模式 简介 设计模式是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的⼀系列套路它不是语法规定&#xff0c;而是⼀套⽤来提高代码可复用性、可维护性、可读性、…

云效流水线使用Node构建部署前端web项目

云效流水线实现自动化部署 背景新建流水线配置流水线运行流水线总结 背景 先来看看没有配置云效流水线之前的部署流程&#xff1a; 而且宝塔会经常要求重新登录&#xff0c;麻烦的很 网上博客分享了不少的配置流程&#xff0c;这一篇博客的亮点就是不仅给出了npm命令构建&…

pycharm如何拉取一个git项目,然后,修改后再上传到自建的项目中?

以chattts为例 https://github.com/2noise/ChatTTS.git 1.建一个虚拟环境&#xff0c;用于项目使用 2.pychar&#xff4d;新建工程 &#xff13;.忽略 提示 勾选&#xff0c;新建远程仓库 设置账号和密码 设置git路径&#xff0c;一般是正确的&#xff0c;点测试即可 &…

(五)开机自启动以及scp工具文件传输小问题

文章目录 程序开机自启动先制作一个可执行程序第一种 通过命令行实现程序开机自启动第二种 通过 Linux 系统镜像实现程序开机自启动 scp工具文件传输小问题 程序开机自启动 原因&#xff1a;做成产品后&#xff0c;用户直接开机使用&#xff0c;总不能在开机执行程序后才可以使…

供需平台信息发布付费查看小程序系统开发方案

供需平台信息发布付费查看小程序系统主要是为了满足个人及企业用户的供需信息发布与匹配需求。 一、目标用户群体 个人用户&#xff1a;寻找兼职工作、二手物品交换、本地服务&#xff08;如家政、维修&#xff09;等。 小微企业&#xff1a;推广产品和服务&#xff0c;寻找合…

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中&#xff0c;绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业&#xff0c;中建海龙科技有限公司&#xff08;简称“中建海龙”&#xff09;凭借其卓越的科技实力和创新举措&#xff0c;在推动绿色建筑发展方面做出了…

OJ随机链表的复制题目分析

题目内容&#xff1a; 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a; 这道题目&#xff0c;第一眼感觉非常乱&#xff0c;这是正常的&#xff0c;但是我们经过仔细分析示例明白后&#xff0c;其实也并不是那么难。现在让我们一起来分析分析…

动态规划回文串问题系列一>回文子串

题目&#xff1a; 解析&#xff1a; 注意&#xff1a;字串和子数组差不多 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化&#xff1a; 填表顺序&#xff1a; 返回值&#xff1a; 返回dp表里true的个数

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支&#xff0c;专注于提升MGR&#xff08;MySQL Group Replication&#xff09;的可靠性及性能。乐维监控平台可以有效地监控GreatSQL&#xff0c;帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理&#xff0c;收集数据库性…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程&#xff0c;不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错&#xff1a;libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错&#xff1a;error: unknown type name HEVCContext; did you mean HEVCPr…

Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】

-----------------测试时间2025年1月3日------------------- 下载地址 官方网址&#xff1a;https://www.sublimetext.com 更新日志&#xff1a;https://www.sublimetext.com/download V4189 64位&#xff1a;https://www.sublimetext.com/download_thanks?targetwin-x64 ....…

Zabbix5.0版本(监控Nginx+PHP服务状态信息)

目录 1.监控Nginx服务状态信息 &#xff08;1&#xff09;通过Nginx监控模块&#xff0c;监控Nginx的7种状态 &#xff08;2&#xff09;开启Nginx状态模块 &#xff08;3&#xff09;配置监控项 &#xff08;4&#xff09;创建模板 &#xff08;5&#xff09;用默认键值…

Java高频面试之SE-08

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; 成员变量和局部变量的区别有哪些&#xff1f; 在 Java 中&#xff0c;成员变量和局部变量是两种不同类型的变量&#xff0c;它们在作用域…

Linux(Centos 7.6)命令行快捷键

Linux(Centos 7.6)操作系统一般都是使用命令行进行管理&#xff0c;如何能高效的进行命令编辑与执行&#xff0c;需要我们记住一些常见的命令&#xff0c;也需要连接一些常见快捷键的使用&#xff0c;常见快捷键如下&#xff1a; 快捷键快捷键说明tab命令行补齐ctrlr快速查找之…

Geoserver修行记-后端调用WMS/WMTS服务无找不到图层Could not find layer

项目场景 调用geoserver地图服务WMS,找不到图层 我在进行地图服务调用的时候&#xff0c;总是提示我找不多图层 Could not find layer&#xff0c;重点是这个图层我明明是定义了&#xff0c;发布了&#xff0c;且还能够正常查看图层的wms的样式&#xff0c;但是在调用后端调用…

ip属地的信息准确吗?ip归属地不准确怎么办

在数字化时代&#xff0c;IP属地信息成为了我们日常生活中不可或缺的一部分。在各大社交媒体平台上&#xff0c;IP属地信息都扮演着重要的角色。然而&#xff0c;随着技术的不断进步和网络的复杂性增加&#xff0c;IP属地信息的准确性问题也日益凸显。那么&#xff0c;IP属地信…