我试图处理数据集中的异常值,但在检查它们的数量时,我发现在每一列中大约有95%的异常值!这太奇怪了
那么,使用IQR替换这些值是一个好的选择,还是应该保持原样
def check_outliers(col) :
outliers = []
Q1 = col.quantile(.25)
Q3 = col.quantile(.75)
IQR = Q3 - Q1
lowerLimit = Q1 - 1.5*IQR
higherLimit = Q3 - 1.5*IQR
for elt in col :
if elt < lowerLimit or elt > higherLimit :
outliers.append(elt)
return np.array(outliers), lowerLimit, higherLimit
for col in train.columns :
arr,lowerLimit,higherLimit = check_outliers(train[col])
print(col, len(arr))
train[col] = np.where(train[col]>higherLimit,higherLimit,train[col])
train[col] = np.where(train[col] <lowerLimit,lowerLimit,train[col])
我认为这些值可能是人为错误或系统故障的结果。因此,我们不能简单地接受或删除它们,因为这样我们将丢失其他特性数据
所以我说为什么不使用IQR
然而,在应用它之后,我的模型预测的结果是完美的,这意味着有一个问题
对于你的
higherlimit
,你已经写了Q3 - 1.5*IQR
,但是它应该在这里。目前,您的上限输出值将远低于其应有值,因此返回95%的异常值(这在使用LQ/UQ和IQR时是不可能的)相关问题 更多 >
编程相关推荐