行业知识
找出异常点 python
2026-10-30 04:18:17
来源:互联网转载
统计学方法
zscore
原���:
Z-score 基于正态分布理论,它量化了数据点距离数据集平均值的相对标准偏差。
通常,如果 Z-score 的绝对值超过某个阈值(如3或更大),该数据点就被认为是异常值。这是因为正态分布下,大约99.7%的数据点应当落在平均值 ± 3标准差的范围内。
import numpy as npdef find_outliers_1d(data, z_threshold=3): """ 使用Z-score方法在一维数据中查找异常值。 参数: data (np.ndarray): 一维数据数组 z_threshold (float): Z-score阈值,默认为3 返回: np.ndarray: 异常值数组 """ # 计算数据的均值和标准差 mean = np.mean(data) std_dev = np.std(data) # 计算Z-score并找到绝对值大于阈值的索引 z_scores = np.abs((data - mean) / std_dev) outlier_indices = np.where(z_scores > z_threshold)[0] # 返回异常值 return data[outlier_indices]
分位数IQR
IQR 方法不依赖于数据的正态分布特性,而是基于数据的四分位数进行异常值检测。它关注的是数据内在的局部变异度,尤其适合处理非正态分布的数据。
计算过程包括:
计算数据的第一四分位数(Q1)、第三四分位数(Q3)和四分位距(IQR):IQR=Q3−Q1IQR = Q3 - Q1IQR=Q3−Q1。
设定异常值的界限:
任何低于下限或高于上限的数据点被认为是异常值。
# 假设有如下数据data = pd.Series([10, 20, 30, 40, 50, 60, 70, 800, 900, 1000])# 计算四分位数q1 = data.quantile(0.25)q3 = data.quantile(0.75)iqr = q3 - q1# 计算异常值边界lower_bound = q1 - 1.5 * iqrupper_bound = q3 + 1.5 * iqr# 标记和筛选异常值outliers = data[(data upper_bound)]normal_values = data[(data >= lower_bound) & (data
上一篇:怎么判断是服务器bug?
下一篇:怎么写netty服务器?