Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Machine learning 如何使用Python删除异常值_Machine Learning_Data Analysis_Eda - Fatal编程技术网

Machine learning 如何使用Python删除异常值

Machine learning 如何使用Python删除异常值,machine-learning,data-analysis,eda,Machine Learning,Data Analysis,Eda,我正在做一个二进制分类问题,我正在努力去除异常值,同时提高准确性 评级是我的功能之一,如下所示: 数据的平均值: train.ratings.mean() 0.03871552285960927 train.ratings.std() 0.07585168664836195 数据标准: train.ratings.mean() 0.03871552285960927 train.ratings.std() 0.07585168664836195 我尝试了日志转换,但精度没有提高:

我正在做一个二进制分类问题,我正在努力去除异常值,同时提高准确性

评级是我的功能之一,如下所示:

数据的平均值:

train.ratings.mean()
0.03871552285960927 
train.ratings.std()
0.07585168664836195
数据标准:

train.ratings.mean()
0.03871552285960927 
train.ratings.std()
0.07585168664836195
我尝试了日志转换,但精度没有提高:

train['ratings']=np.log(train.ratings+1)
我的目标是对数据进行正确或错误分类:

train.netgain
0        False
1        False
2        False
3        False
4         True
         ...  
26043     True
26044    False
26045     True
26046    False
26047    Fals 

我使用的一种方法是计算一个异常值,然后用布尔类型标记所有异常值,这样我就可以得到所有异常值

MAD计算示例:

defmad(x):
返回np.中位数(np.绝对值(x-np.中位数(x)))

def-mad_比率(x):
mad_值=mad(x)
如果mad_值==0:
返回0
x_-mad=np.abs(x-np.median(x))/mad_值
返回x_mad

  • 假设评级特征为正态分布,并将其转换为标准正态分布

  • 根据正态分布,我们知道99.7%的值包含3个标准差。因此,我们可以从平均值中去除超过3个标准偏差的值

**

请参见下面的python代码

ratings_mean=train['ratings'].mean()  #Finding the mean of ratings column

ratings_std=train['ratings'].std()     # standard deviation of the column

train['ratings']=train['ratings'].map(lamdba x: (x - ratings_mean)/ ratings_std
好的,现在我们已经将数据转换成标准正态分布。现在,如果你看到,它的平均值应该是0,标准偏差应该是1。从中,我们可以找出哪些大于3,哪些小于-3。这样我们就可以从数据集中删除这些行

train=train[np.abs(train_ratings) < 3]
列车=列车[np.abs(列车额定值)<3]
现在,traindataframe将从数据集中删除异常值

train=train[np.abs(train_ratings) < 3]

**注:由于2-std包含95%的数据,因此也可以应用2个标准偏差。这完全取决于领域知识和您的数据**

ratings
是您的模型的一个功能,还是输出分数?不确定您想要的是没有异常值的输入功能,还是更喜欢分布更广的输出分数?您的目标是什么?你只是想从评级功能中删除异常值?如果是这样,您对异常值的标准是什么?例如,您可以假设离群值是距离平均值超过3个标准偏差的观测值,或者是值大于特定分位数的观测值。你需要更具体一些。嗨,罗伯特,收视率是我的特色之一,它看起来像一个离群值,但你是说没有离群值。