当前位置: 首页 > 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. 处理异常值的方法

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

总结:

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

相关文章:

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

检测异常值是数据预处理中非常重要的一步&#xff0c;因为异常值可能会影响模型的训练效果&#xff0c;甚至导致错误的结论。以下是几种常见的检测异常值的方法&#xff1a; 1. 箱线图&#xff08;Box Plot&#xff09;&#xff1a; 箱线图是一种简单的统计图形&#xff0c;可…...

如何评估Redis的性能

导语 Redis是一款高性能的内存数据库&#xff0c;被广泛用于缓存、持久化、消息队列等各种场景。为了确保Redis的高性能运行&#xff0c;评估Redis的性能是非常重要的。本文将介绍如何评估Redis的性能&#xff0c;并从问题解决的角度探讨如何优化Redis的性能。 1. 性能评估指…...

RabbitMQ发布订阅模式Publish/Subscribe详解

订阅模式Publish/Subscribe 基于API的方式1.使用AmqpAdmin定制消息发送组件2.消息发送者发送消息3.消息消费者接收消息 基于配置类的方式基于注解的方式总结 SpringBoot整合RabbitMQ中间件实现消息服务&#xff0c;主要围绕3个部分的工作进行展开&#xff1a;定制中间件、消息发…...

Android8.1源码下对APK进行系统签名

在Android8.1上面对APK进行Android系统源码环境下的签名,发现签名时出现如下错误: Exception in thread "main" java.lang.ExceptionInInitializerError at org.conscrypt.OpenSSLBIOInputStream.(OpenSSLBIOInputStream. at org.conscrypt.OpenSSLX509Certificat…...

2024年城市客运安全员考试题库及答案

一、单选题 376.根据《机动车运行安全技术条件》&#xff08;GB7258---2017&#xff09;&#xff0c;每个应急出口应在其附近设有"应急出口"字样&#xff0c;字体高度应大于或等于&#xff08;&#xff09;mm。 A.20 B.30 C.40 D.50 答案&#xff1a;C 377.根…...

全网最全面的Nginx内容(理论与实践相结合)

一、Web服​​务 1.1 web服务访问流程 1.2 Web服务 1.2.1 Web服务器分类 Web服务分为Apache和Nginx 1.2.2 Apache经典的Web服务器 1.2.2.1 Apache介绍 Apache HTTP Server&#xff08;简称Apache&#xff09;是Apache软件基金会的一个开放源码的网页服务器&#xff0c;可以…...

(七)Flink Watermark

Flink 的 Watermark 是用来标识数据流中的一个时间点。Watermark 的设计是为了解决乱序数据处理的问题,尤其是涉及到多个分区的 Kafka 消费者时。在 Watermark 的作用下,即使某些数据出现了延迟到达的情况,也不会导致整个处理流程的中断。此外,Watermark 还能防止过期的数据…...

springboot 上传文件失败:The temporary upload location

Caused by: java.io.IOException: The temporary upload location [/tmp/tomcat.379776875189163783.8081/work/Tomcat/localhost/jcys-core] is not valid 原因&#xff1a; Linux下会自动清除tmp目录下10天没有使用过的文件&#xff0c;SpringBoot启动的时候会在/tmp目录下生…...

UNiapp之微信小程序导出Excel

效果如下 参考小程序&#xff1a;日常记一记 ---账单页面 主要功能是根据筛选条件导出账单明细列表&#xff0c;实现该功能主要借助一个工具(excel.js)&#xff0c;可在文章顶部下载或者一下网盘下载 https://pan.baidu.com/s/1RLisuG4_7FGD0Cnwewyabg?pwdpd2a 提取码: pd2a…...

fsadsadsad

adsadsafsada...

高效录制新选择:2024年Windows录屏软件

录屏能帮助我们捕捉屏幕上的精彩瞬间&#xff0c;作为老师可以用来录制课程&#xff0c;作为会议记录员可以用来录制远程会议。那么有什么软件是适合windows录屏的呢&#xff1f;这次我们一起来探讨一下吧。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款软…...

Java技术面试(一面)

1、相面对象 1、面相对象语言/Java三大特性是什么? 引出 封装、‌继承和多态。 2、多态有哪些形式?多态使用过吗? 重载、重写,接口和抽象类的多个实现。考察工作经验、代码重构经验、习惯。 3、Java接口和抽象类有什么区别?你是如何选择使用的? 考察OOP的理解和工作…...

docker修改数据目录

新建docker数据目录 mkdir /data/docker-data停止docker服务 systemctl stop docker把docker数据迁移到新目录 cp -r /var/lib/docker/* /data/docker-data/修改docker配置 vi /etc/docker/daemon.json #添加data-root参数 {"data-root":"/data/docker-dat...

Appium学习

一、基础配置 import unittest from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support …...

回顾 | 瑞云科技亮相ICIC2024,虚拟仿真实训云平台引关注

2024年8月7日&#xff0c;天津市虚拟仿真学会主办的第二十届智能计算国际会议&#xff08;ICIC2024&#xff09;——虚拟仿真技术交流平行会议暨天津市虚拟仿真学会2024年暑期技术交流会在天津盛大召开。本次大会汇聚来自全国的顶尖专家、学者和行业领袖&#xff0c;共同探讨虚…...

libLZMA库iOS18平台编译

1.下载xz源码: 使用autogen.sh生成configure文件 2.生成makefile rm -rf ./build/iOS && mkdir -p ./build/iOS && cd ./build/iOS && ../../configure --host=arm-apple-darwin64 --prefix=`pwd`/Frameworks/lzma CC="xcrun -sdk iphoneos cl…...

《AI办公类工具PPT系列之二——iSlide AI》

一.简介 官网:iSlide- 让PPT设计简单起来 | PPT模板下载平台 iSlide AI是一款基于人工智能技术的PPT制作工具,它可以帮助用户快速高效地创建演示文稿 二.功能介绍 1. AI一键生成PPT 文档导入与解析:用户可以直接上传本地文档(如Word、Markdown、思维导图等),iSlide A…...

C语言基础(六)

一维数组&#xff1a; C语言中的数组是一种基本的数据结构&#xff0c;用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引&#xff08;或下标&#xff09;来访问&#xff0c;索引通常是从0开始的。 数组的大小在声明时确定&#xff0c;并且之后不能改…...

什么是词向量?如何得到词向量?Embedding 快速解读

我第一次接触 Embedding 是在 Word2Vec 时期&#xff0c;那时候还没有 Transformer 和 BERT 。Embedding 给我的印象是&#xff0c;可以将词映射成一个数值向量&#xff0c;而且语义相近的词&#xff0c;在向量空间上具有相似的位置。 有了 Embedding &#xff0c;就可以对词进…...

AI视频创作应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...