Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何去除异常值_Python_Scikit Learn_Outliers - Fatal编程技术网

Python 如何去除异常值

Python 如何去除异常值,python,scikit-learn,outliers,Python,Scikit Learn,Outliers,我正在研究一个回归问题。我有10个自变量,我用的是SVR。尽管使用网格搜索进行了特征选择和SVR参数调整,我还是得到了15%的巨大MAPE。因此,我试图删除异常值,但删除它们后,我无法分割数据。我的问题是异常值会影响回归的准确性吗 from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error from sklearn.preprocessing import Norm

我正在研究一个回归问题。我有10个自变量,我用的是SVR。尽管使用网格搜索进行了特征选择和SVR参数调整,我还是得到了15%的巨大MAPE。因此,我试图删除异常值,但删除它们后,我无法分割数据。我的问题是异常值会影响回归的准确性吗

from sklearn.metrics import mean_absolute_error 
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import Normalizer
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV


def mean_absolute_percentage_error(y_true, y_pred): 
    y_true, y_pred = np.array(y_true), np.array(y_pred)
    return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

import pandas as pd
from sklearn import preprocessing
features=pd.read_csv('selectedData.csv')
target = features['SYSLoad']
features= features.drop('SYSLoad', axis = 1)


from scipy import stats
import numpy as np
z = np.abs(stats.zscore(features))
print(z)
threshold = 3
print(np.where(z > 3))
features2 = features[(z < 3).all(axis=1)]


from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(features2, target, test_size = 0.25, random_state = 42)  
从sklearn.metrics导入平均绝对误差
从sklearn.metrics导入均方误差
从sklearn.preprocessing导入规范化器
将matplotlib.pyplot作为plt导入
从sklearn.model_选择导入GridSearchCV
def平均绝对百分比误差(y_真,y_pred):
y_真,y_pred=np.array(y_真),np.array(y_pred)
返回np.平均值(np.绝对值((y_真-y_pred)/y_真))*100
作为pd进口熊猫
从sk学习导入预处理
features=pd.read\u csv('selectedData.csv')
目标=功能['SYSLoad']
features=features.drop('SYSLoad',axis=1)
从scipy导入统计信息
将numpy作为np导入
z=np.abs(stats.zscore(特性))
打印(z)
阈值=3
打印(np.式中(z>3))
特征2=特征[(z<3).所有(轴=1)]
从sklearn.model\u选择导入列车\u测试\u拆分
列车输入,测试输入,列车目标,测试目标=列车测试分割(特征2,目标,测试大小=0.25,随机状态=42)
在执行以下代码时,我得到了这个错误

“样本:%r”%[int(l)表示长度为l的样本])

ValueError:找到的输入变量的数量不一致 样本:[3335235064]”


出现错误的原因是,
目标
变量的长度与
特性
(可能是35064)的长度相等,原因是:

您的
features2
变量长度较小(可能是33352),即它是
功能的子集,原因是:

features2 = features[(z < 3).all(axis=1)]

异常值有时会影响您的模型,因为在标准化后,许多值可能变得太小,我建议使用箱线图来识别上下四分位数,然后删除不在该范围内的其余值,但只有在您有足够数据的情况下才这样做。如果您需要代码来做,请在下面进行注释,我将提供帮助谢谢您,但这需要一些时间。@anand_v.singh谢谢您,是的,我们将不胜感激
features2 = features[(z < 3).all(axis=1)]
target2 = target[(z < 3).all(axis=1)]
train_input, test_input, train_target, test_target = train_test_split(features2, target2, test_size = 0.25, random_state = 42)