当前位置: 首页 > news >正文

机器学习笔记三-检测异常值

检测异常值是数据预处理中非常重要的一步,因为异常值可能会影响模型的训练效果,甚至导致错误的结论。以下是几种常见的检测异常值的方法:

1. 箱线图(Box Plot)

箱线图是一种简单的统计图形,可以直观地显示数据的分布情况及其离群点(异常值)。在箱线图中,异常值通常定义为超出“盒须”范围的点。

  • IQR(四分位距)方法

    • 箱线图的盒子代表数据的第一四分位数(Q1,25%)和第三四分位数(Q3,75%)。
    • 四分位距(IQR)定义为 Q3 - Q1。
    • 异常值通常定义为小于 Q1 - 1.5 * IQR 或大于 Q3 + 1.5 * IQR 的数据点。
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt# 示例数据
    data = np.random.randn(100)  # 生成100个正态分布的数据点
    data = np.append(data, [10, -10])  # 添加几个异常值# 绘制箱线图
    plt.boxplot(data)
    plt.show()# 使用IQR方法检测异常值
    Q1 = np.percentile(data, 25)
    Q3 = np.percentile(data, 75)
    IQR = Q3 - Q1lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQRoutliers = data[(data < lower_bound) | (data > upper_bound)]
    print("Detected Outliers:", outliers)
    

2. 标准差方法

标准差法适用于数据呈正态分布的情况。异常值通常定义为超出平均值 μ \mu μ的3倍标准差 σ \sigma σ 的数据点。

  • 公式

    • 异常值定义为小于 μ − 3 σ \mu - 3\sigma μ3σ 或大于 μ + 3 σ \mu + 3\sigma μ+3σ 的数据点。
    mean = np.mean(data)
    std_dev = np.std(data)lower_bound = mean - 3 * std_dev
    upper_bound = mean + 3 * std_devoutliers = data[(data < lower_bound) | (data > upper_bound)]
    print("Detected Outliers using Standard Deviation:", outliers)
    

3. Z-score 方法

Z-score 表示数据点与均值的偏离程度,用于判断该数据点是否为异常值。Z-score 方法适用于数据呈正态分布的情况。

  • 公式

    • Z-score = x − μ σ \frac{x - \mu}{\sigma} σxμ
    • 当 Z-score 的绝对值大于某个阈值(通常为 3)时,该数据点被认为是异常值。
    from scipy import statsz_scores = stats.zscore(data)
    outliers = data[np.abs(z_scores) > 3]
    print("Detected Outliers using Z-score:", outliers)
    

4. 使用 Mahalanobis 距离

Mahalanobis 距离考虑了数据的协方差结构,适合检测多变量数据中的异常值。

  • 公式

    • Mahalanobis 距离 D 2 = ( x − μ ) T Σ − 1 ( x − μ ) D^2 = (x - \mu)^T \Sigma^{-1} (x - \mu) D2=(xμ)TΣ1(xμ)
    • 异常值通常定义为 Mahalanobis 距离超过某个阈值的数据点。
    from scipy.spatial import distance# 示例多维数据
    data = np.random.randn(100, 2)
    mean = np.mean(data, axis=0)
    cov_matrix = np.cov(data, rowvar=False)mahalanobis_distances = [distance.mahalanobis(x, mean, np.linalg.inv(cov_matrix)) for x in data]threshold = np.percentile(mahalanobis_distances, 97.5)  # 选择一个合适的阈值
    outliers = data[np.array(mahalanobis_distances) > threshold]
    print("Detected Outliers using Mahalanobis Distance:", outliers)
    

5. 视觉化异常值检测

通过绘制散点图、直方图等图表,可以直观地观察数据分布并识别可能的异常值。

6. 处理异常值的方法

  • 删除: 直接删除异常值,适用于异常值数量很少的情况。
  • 替换: 使用均值、中位数或插值方法替换异常值。
  • 模型化: 在一些情况下,异常值可能是数据的有效部分,可以通过重新建模来处理这些异常值。

总结:

不同的方法适用于不同类型的数据和异常值检测场景。在实际应用中,通常结合多种方法进行异常值检测,并根据业务需求和数据特点采取适当的处理策略。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • wincc报警如何通过短信发送给手机
  • TypeScript学习笔记2---ts的函数定义详解
  • 专利有哪几种类型?
  • PS 笔记
  • cdga|数据治理:应对核心业务数据质量参差不齐的挑战与策略
  • tekton通过ceph挂载node_modules的时候报错failed to execute command: copying dir: symlink
  • PMP–知识卡片--产品管理知识体系
  • 【Git】分支的创建、提交、合并、冲突、删除
  • MVCC -MySQL多版本并发控制
  • LCP142 环形链表[leetcode-7]
  • 中国植物性状数据库
  • 大语言模型 LLM book 笔记(三)第五章 模型架构
  • 16岁可以办手机卡!
  • 信息竞赛2024年第三次csp-j模拟测试赛后总结
  • Qt实现tcp协议
  • create-react-app做的留言板
  • Flannel解读
  • Fundebug计费标准解释:事件数是如何定义的?
  • java2019面试题北京
  • JavaScript对象详解
  • JWT究竟是什么呢?
  • PAT A1120
  • php ci框架整合银盛支付
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • scrapy学习之路4(itemloder的使用)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue官网教程学习过程中值得记录的一些事情
  • 从零开始在ubuntu上搭建node开发环境
  • 构造函数(constructor)与原型链(prototype)关系
  • 猴子数据域名防封接口降低小说被封的风险
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前嗅ForeSpider教程:创建模板
  • 深度解析利用ES6进行Promise封装总结
  • 树莓派 - 使用须知
  • 运行时添加log4j2的appender
  • 在Unity中实现一个简单的消息管理器
  • Java性能优化之JVM GC(垃圾回收机制)
  • Python 之网络式编程
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • !!java web学习笔记(一到五)
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • $(selector).each()和$.each()的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (02)Unity使用在线AI大模型(调用Python)
  • (安卓)跳转应用市场APP详情页的方式
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (接口自动化)Python3操作MySQL数据库
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (南京观海微电子)——I3C协议介绍
  • (一)为什么要选择C++
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Google的Objective-C编码规范