【问题标题】:How to delete the outliers如何删除异常值
【发布时间】:2019-12-24 22:05:43
【问题描述】:

我设法很好地应用了四分位距原理,但是当我显示没有异常值的数据集的小胡子框时,我发现总是有异常值。怎么了? 这是代码:

# Load libraries
import pandas as pd;
from pandas import read_csv, set_option;
from matplotlib import pyplot as plt;

# Load dataset
filename         = "/home/fogang/dataset/Regression/Housing Boston/housing.csv";
df               = read_csv(filename, header=0);
df = df.drop('Unnamed: 0', axis=1);  # Let's delete the column 'Unnamed: 0'
one_dim         = pd.DataFrame();
one_dim['rm']    = df['rm'];

#shape dataset
print(one_dim.shape);

# Peek at dataset
print(one_dim.head(10));

# Let's look whether there are NaN values
print(one_dim.isnull().sum());

# Box and whisker plots
one_dim.plot(kind='box', subplots=True, layout=(1, 1), sharex=False, sharey=False, fontsize=12);
plt.show();

# Describe Dataset
print(one_dim.describe());

# Let's find Inter-Quartile Range
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);

# Outliers
unidim_outliers  = pd.DataFrame();
unidim_outliers['outliers'] = unidim[(unidim < unidim_lower) | (unidim > unidim_upper)]
unidim_outliers.info()

# Good data
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();

怎么办?

【问题讨论】:

    标签: python-3.x machine-learning outliers


    【解决方案1】:

    您的两条尾巴(上下)的异常值分布范围太广。所以,然后你切掉一些异常值并再次检查,你在切割数据中有新的异常值。 如果您想通过一次切割完全摆脱异常值,您可以使用更严格的规则进行切割,例如:

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

    但我应该警告您:并非所有“异常值”都对模型不利,您应该明智地选择将哪些数据视为“异常值”以及什么是有用的数据。

    【讨论】:

    • 好的,谢谢。我稍后再试,今天是圣诞节。是的,我已经读到所有异常值并不总是对模型不利。如何知道,有什么标准可以知道异常值对穆德尔有好处?
    • 您应该使用交叉验证并保留部分数据来检查您的分数。只需尝试使用和不使用异常值的模型,并查看每种情况下的模型分数。有时拥有几个不同的模型(第一个没有异常值,第二个特别是检测和处理异常值)并在管道末端以某种方式组合结果是很有用的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2017-10-26
    • 2013-05-07
    • 2011-06-14
    相关资源
    最近更新 更多