异常值处理指南

统计分析机器学习算法的训练过程中,异常值可能会对结果产生负面影响,导致准确度降低。本文将讨论如何处理这些异常值。将深入了解异常值在机器学习中的定义、产生原因、对分析的影响,以及如何有效地处理它们。

学习目标

理解数据中异常值的定义和特征;识别异常值产生的原因及其潜在来源(例如,变异性、实验误差);掌握异常值对统计度量(均值、中位数、众数)和模型性能的影响。

目录

  • 引言
  • 什么是异常值?
  • 异常值为何产生?
  • 异常值影响什么?
  • 检测异常值
  • 如何处理异常值?
  • 结论
  • 参考文献
  • 常见问题解答

什么是异常值?

异常值是指在给定数据集中,与其他观测值相比显著不同的观测值。这意味着异常值的处理远远大于或小于集合中的其余值。

异常值为何产生?

异常值可能由于数据的变异性或实验/人为错误而产生。

异常值影响什么?

在统计学中,有三个中心趋势的度量:均值、中位数和众数。它们帮助描述数据。当没有异常值存在时,均值是描述数据的准确度量。如果数据集中存在异常值,则使用中位数。如果存在异常值,并且大约一半或更多的数据相同,则使用众数。均值是唯一受异常值处理影响的中心趋势度量,这反过来又影响标准差。

检测异常值

如果数据集很小,可以通过查看数据集来检测异常值。但是,如果有一个庞大的数据集,如何识别异常值呢?需要使用可视化和数学技术。以下是一些检测异常值的技术:箱线图、Z分数和四分位数范围(IQR)。

import matplotlib.pyplot as plt sample= [15, 101, 18, 7, 13, 16, 11, 21, 5, 15, 10, 9] plt.boxplot(sample, vert=False) plt.title("使用箱线图检测异常值") plt.xlabel('样本') plt.show()

标准:任何Z分数超出3个标准差的数据处理被视为异常值。

import numpy as np outliers = [] def detect_outliers_zscore(data): thres = 3 mean = np.mean(data) std = np.std(data) for i in data: z_score = (i-mean)/std if (np.abs(z_score) > thres): outliers.append(i) return outliers sample_outliers = detect_outliers_zscore(sample) print("Z分数方法的异常值: ", sample_outliers)

标准:位于Q3上方1.5倍IQR和Q1下方的数据点被视为异常值。

outliers = [] def detect_outliers_iqr(data): data = sorted(data) q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) IQR = q3-q1 lwr_bound = q1-(1.5*IQR) upr_bound = q3+(1.5*IQR) for i in data: if (iupr_bound): outliers.append(i) return outliers sample_outliers = detect_outliers_iqr(sample) print("IQR方法的异常值: ", sample_outliers)

如何处理异常值?

已经学习了如何检测异常值处理。主要问题是如何处理异常值?以下是一些处理异常值的方法:

# 修剪 for i in sample_outliers: a = np.delete(sample, np.where(sample==i)) print(a) tenth_percentile = np.percentile(sample, 10) ninetieth_percentile = np.percentile(sample, 90) b = np.where(sampleninetieth_percentile, ninetieth_percentile, b) print("新数组:",b) median = np.median(sample) for i in sample_outliers: c = np.where(sample==i, 14, sample) print("新数组: ",c) plt.boxplot(c, vert=False) plt.title("处理异常值后的样本箱线图") plt.xlabel("样本")

关键要点

  • 学习检测异常值的技术:箱线图、Z分数方法、四分位数范围(IQR)方法
  • 处理异常值的策略:修剪/移除、基于分位数的地板和上限、均值/中位数插补
  • 处理异常值后的数据可视化和评估,以改善分析和决策
  • Z分数用于异常值检测
  • IQR用于异常值检测
  • Python numpy.where()方法
  • GitHub仓库查看Jupyter笔记本
Q1. 如何处理异常值?
A. 使用修剪、转换或应用稳健的统计方法等技术来处理异常值。
Q2. 数据处理中的异常值是什么?
A. 异常值是一个显著不同于其他观测值的数据点,可能表明变异性或错误。
Q3. 如何摆脱异常值?
A. 应用Z分数、IQR或视觉检查等方法来识别和移除它们。
Q4. 哪种算法可以处理异常值?
A. 像随机森林、孤立森林和稳健回归这样的算法可以有效处理异常值。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485