如何删除异常值

我成功地应用了四分位距原则,但在显示去除异常值后的数据集的箱形图时,我发现总有一些异常值。这是怎么回事?我这里是代码:

# 加载库import pandas as pd;from pandas import read_csv, set_option;from matplotlib import pyplot as plt;# 加载数据集filename         = "/home/fogang/dataset/Regression/Housing Boston/housing.csv";df               = read_csv(filename, header=0);df = df.drop('Unnamed: 0', axis=1);  # 让我们删除'Unnamed: 0'列one_dim         = pd.DataFrame();one_dim['rm']    = df['rm'];# 数据集形状print(one_dim.shape);# 查看数据集print(one_dim.head(10));# 检查是否有NaN值print(one_dim.isnull().sum());# 箱形图one_dim.plot(kind='box', subplots=True, layout=(1, 1), sharex=False, sharey=False, fontsize=12);plt.show();# 描述数据集print(one_dim.describe());# 让我们找出四分位距unidim        = one_dim['rm'];unidim_Q1     = unidim.quantile(0.25);unidim_Q3     = unidim.quantile(0.75);unidim_IQR    = unidim_Q3 - unidim_Q1;unidim_lower  = unidim_Q1 - (1.5 * unidim_IQR);unidim_upper  = unidim_Q3 + (1.5 * unidim_IQR);# 异常值unidim_outliers  = pd.DataFrame();unidim_outliers['outliers'] = unidim[(unidim < unidim_lower) | (unidim > unidim_upper)]unidim_outliers.info()# 良好数据unidim_good  = pd.DataFrame();unidim_good['good'] = unidim[(unidim >= unidim_lower) & (unidim <= unidim_upper)];unidim_good.info();unidim_good.plot(kind='box', subplots=True, layout=(1, 2), sharex=False, sharey=False, fontsize=12);plt.show();

该怎么做?


回答:

你的数据集两端(上尾和下尾)的异常值分布非常广泛。因此,当你去除一些异常值并再次检查时,截取的数据中会出现新的异常值。如果你想通过一次截取完全去除异常值,可以使用更严格的规则进行截取,例如这样做:

unidim_lower  = unidim_Q1 - (1.3 * unidim_IQR);unidim_upper  = unidim_Q3 + (1.3 * unidim_IQR);

但我必须提醒你:并不是所有的“异常值”对模型都是有害的,你应该谨慎选择哪些被视为“异常值”,哪些是有用的数据。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注