异常值处理的常用方法包括以下几种:

删除观测值:直接删除异常值是最简单的方法,但可能会导致样本量不足,改变变量的原有分布,从而影响统计模型的稳定性。
保留并综合分析:通过回归分析,利用残差分布信息来判断模型优劣,观察残差是否超出经验范围(如3倍标准差),并检查R方、均分误差等指标,这些指标可以提供关于异常值的信息。
使用统计量替代:如果样本量较小,可以用均值或其他统计量来替代异常值。这种方法虽然克服了丢失样本的缺陷,但可能丢失样本的“特色”。
视为缺失值处理:将异常值视为缺失值,并利用统计模型进行填补。根据异常值的特点(如完全随机缺失、随机缺失或非随机缺失)选择合适的方法。例如,可以使用插值法、回归模型等方法进行填补。
第一段代码仍然是导入各种包、读取数据,通过pyod的IForest实现异常值检测。
from __future__ import division
from __future__ import print_function
import warnings
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from pyod.models.iforest import IForest
warnings.filterwarnings("ignore")
# ---------------------------------------对pandas显示进行格式化-----------------------------------------
pd.set_option('display.max_columns', None) # 显示所有列
pd.set_option('display.max_rows', None) # 显示所有行
pd.set_option('display.width', 1000) # 不换行显示
pd.set_option('display.unicode.ambiguous_as_wide', True) # 行列对齐显示,显示不混乱
pd.set_option('display.unicode.east_asian_width', True) # 行列对齐显示,显示不混乱
pd.set_option('display.precision', 4) # 显示精度
pd.get_option("display.precision") # 显示小数位数
# 在本节中,使用Python代码介绍了检测数据集中异常值的不同方法。为了演示不同方法的方法,使用了包含加速度计数据(在自行车活动期间捕获)的数据集。
# 所有CSV文件都包含索引、时间戳以及X、Y和Z轴的加速度。关于每个文件的信息可以在train.csv和test.csv中找到:记录的表面、智能手机的记录频率以及骑自行车的次数。
# 最新信息是相关的,因为所有自行车都有不同的悬架,因此加速度的幅度也不同。尽可能使用一致的记录设置,以确保数据具有可比性。
data_path = r'E:\JetBrains\PythonProject\DeepLearning\Accelerometer_Data.csv'
data = pd.read_csv(data_path, index_col=0)
# 初始化Isolation Forest模型
iforest = IForest(contamination=0.005)
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(data), columns=data.columns)
# 训练模型
iforest.fit(df_scaled)
# 模型预测,并将异常值输出到新增的cluster列
data['cluster'] = iforest.predict(df_scaled)复制
第二段代码是删除观测值。
# 处理异常值的三种方法
# 1.从数据集中完全删除异常值。数据集中的相应条目在分析中不再进一步考虑。一般不建议从具有许多属性的数据集中删除所有异常值,因为可能会在不同的属性中删除相当多的条目。
data_copy = data.copy()
data_copy = data_copy[data_copy['cluster'] != 1]
print(data.shape) # (6500, 5)
print(data_copy.shape) # (6467, 5)复制
第三段代码是将异常值置为null,也可以按照 大数据分析之缺失值处理,多种方法带你轻松搞定 一文所述,对空值进行插值法、均值法、随机森林进行填充
# 2.可以用NaN值替换异常值,从而将其转换为缺失值,一般建议仅对单个属性执行异常值检测。然后再通过值插补方法填充缺失的值。
# Calculate the IQR
data_copy = data.copy()
def IQR(data):
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
# Define the boundaries
lower_boundary = Q1 - 1.5 * IQR
upper_boundary = Q3 + 1.5 * IQR
return lower_boundary,upper_boundary
data_copy.loc[(data_copy['x'] < IQR(data_copy['x'])[0]) | (data_copy['x'] > IQR(data_copy['x'])[1]), 'x'] = np.nan
data_copy.loc[(data_copy['y'] < IQR(data_copy['y'])[0]) | (data_copy['y'] > IQR(data_copy['y'])[1]), 'y'] = np.nan
data_copy.loc[(data_copy['z'] < IQR(data_copy['z'])[0]) | (data_copy['z'] > IQR(data_copy['z'])[1]), 'z'] = np.nan复制
第四段代码几乎不用因此不做赘述。
# 3.第三种方法是在数据集中保留异常值及其各自的值,但添加一个二进制列,指示一个点是否被视为异常值。然而,这种方法不是最佳实践,只有在上述方法都不起作用的情况下才应该使用。
复制
最后欢迎关注公众号:python与大数据分析

文章转载自追梦IT人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
484次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
434次阅读
2025-04-07 09:44:54
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
344次阅读
2025-04-18 10:01:22
国产数据库时代,一些20年前的数据库设计小技巧又可以拿出来用了
白鳝的洞穴
255次阅读
2025-04-10 11:52:51
关于征集数据库标准体系更新意见和数据库标准化需求的通知
数据库标准工作组
229次阅读
2025-04-11 11:30:08
TDengine 3.3.6.0 发布:TDgpt + 虚拟表 + JDBC 加速 8 大升级亮点
TDengine
198次阅读
2025-04-09 11:01:22
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
SelectDB
185次阅读
2025-04-03 17:41:08
优炫数据库成功应用于晋江市发展和改革局!
优炫软件
182次阅读
2025-04-25 10:10:31
GoldenDB助力江苏省住房公积金国产数据库应用推广暨数字化发展交流会成功举办
GoldenDB分布式数据库
175次阅读
2025-04-07 09:44:49
全国首部图数据库国家标准发布!达梦数据深度参与!
达梦数据
166次阅读
2025-04-02 09:34:13