标签: outliers

如何告诉R从相关计算中删除异常值?

在计算相关性时如何告诉R删除异常值?我从散点图中发现了一个潜在的异常值,并且我试图比较有和没有这个值的相关性.这是一个介绍统计课程; 我只是在玩这些数据来开始理解相关性和异常值.

我的数据如下:

"Australia" 35.2 31794.13
"Austria" 29.1 33699.6
"Canada" 32.6 33375.5
"CzechRepublic" 25.4 20538.5
"Denmark" 24.7 33972.62
...
Run Code Online (Sandbox Code Playgroud)

等等,对于26行数据.我试图找到第一个和第二个数字的相关性.

确实读过这个问题,但是,我只想删除一个点,而不是一个百分点.R中是否有命令执行此操作?

r outliers correlation

5
推荐指数
1
解决办法
3919
查看次数

加速异常值检查熊猫系列

我正在使用不同的标准偏差标准对两个通行证运行异常值检查pandas Series对象.但是,我使用两个循环,它运行速度非常慢.我想知道是否有任何大熊猫"伎俩"来加速这一步.

这是我正在使用的代码(警告非常丑陋的代码!):

def find_outlier(point, window, n):
    return np.abs(point - nanmean(window)) >= n * nanstd(window)

def despike(self, std1=2, std2=20, block=100, keep=0):
    res = self.values.copy()
    # First run with std1:
    for k, point in enumerate(res):
        if k <= block:
            window = res[k:k + block]
        elif k >= len(res) - block:
            window = res[k - block:k]
        else:
            window = res[k - block:k + block]
        window = window[~np.isnan(window)]
        if np.abs(point - window.mean()) >= std1 * window.std():
            res[k] = np.NaN
    # Second run with …
Run Code Online (Sandbox Code Playgroud)

python outliers pandas

5
推荐指数
1
解决办法
4770
查看次数

相当于ggplot2的boxplot中的'range'

我试图让ggplot2的geom_boxplot的胡须覆盖异常值.事实上,异常值不会显示为点,因为它们被箱图包围.

如果我使用标准的'boxplot',我将使用:

boxplot(x, range=n)
Run Code Online (Sandbox Code Playgroud)

其中ñ将是一个大数目,使得,而不是显示异常值,该箱线图的胡子延伸覆盖异常值.

如何用ggplot2完成?我试过了:

ggplot(myDF, aes(x=x, y=y)) +
geom_boxplot(range = 5)
Run Code Online (Sandbox Code Playgroud)

注意:我不想使用以下内容丢弃异常值:

geom_boxplot(outlier.shape = NA) 
Run Code Online (Sandbox Code Playgroud)

r outliers ggplot2 boxplot

5
推荐指数
2
解决办法
4612
查看次数

热图上的特定异常值-matplotlib

我正在生成一个带有固定异常值数据的热图,我需要将这些异常值显示为我使用的“热”的 cmap 调色板中的颜色。通过使用 cmap.set_bad('green') 和 np.ma.masked_values(data, outlier),我得到了一个看起来正确的图,但是即使我使用 cmap.set_over,颜色条也没有与数据正确同步('绿色')。这是我一直在尝试的代码:

plt.xlim(0,35)
plt.ylim(0,35)
img=plt.imshow(data, interpolation='none',norm=norm, cmap=cmap,vmax=outlier)

cb_ax=fig.add_axes([0.85, 0.1, 0.03, 0.8])

cb=mpl.colorbar.ColorbarBase(cb_ax,cmap=cmap,norm=norm,extend='both',spacing='uniform')
cmap.set_over('green')
cmap.set_under('green')
Run Code Online (Sandbox Code Playgroud)

这是数据(异常值显然是 1.69):

Data;A;B;C;D;E;F;G;H;I;J;K    
A;1.2;0;0;0;0;1.69;0;0;1.69;1.69;0    
B;0;0;0;0;0;1.69;0;0;1.69;1.69;0    
C;0;0;0;0;0;1.69;0;0.45;1.69;1.69;0.92    
D;1;0;-0.7;-1.2;0;1.69;0;0;1.69;1.69;0    
E;0;0;0;0;0;1.69;0;0;1.69;1.69;0    
F;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69    
G;0;0;0;0;0;1.69;0;0;1.69;1.69;0    
H;0;0;0;0;0;1.69;0;0;1.69;1.69;0    
I;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69
J;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69;1.69
K;0;0;0;0;0;1.69;0;0;1.69;1.69;0
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助

python matplotlib heatmap outliers colorbar

5
推荐指数
1
解决办法
4399
查看次数

在 R 中使用来自 MVN 的 mvOutlier 标记异常值

我试图标签上使用卡方QQ图离群mvOutlier()的功能MVNR

我设法通过标签识别异常值并获得它们的x坐标。我尝试使用 将前者放在图上text(),但xy坐标似乎被翻转了。

基于文档中的示例:

library(MVN)
data(iris)
versicolor <- iris[51:100, 1:3]
# Mahalanobis distance
result <- mvOutlier(versicolor, qqplot = TRUE, method = "quan")
labelsO<-rownames(result$outlier)[result$outlier[,2]==TRUE]
xcoord<-result$outlier[result$outlier[,2]==TRUE,1]
text(xcoord,label=labelsO)
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果: 结果图

我也试过text(x = xcoord, y = xcoord,label = labelsO),当点靠近 y = x 线时很好,但当不满足正态性时可能会失败(并且点偏离这条线)。

有人可以建议如何访问卡方分位数或为什么函数的x坐标text()似乎不服从输入参数。

label r outliers

5
推荐指数
1
解决办法
4121
查看次数

结果的行数不是 R 中向量长度 (arg 2) 的倍数

我有与此相关的新问题,我的主题 删除 r 中的异常值并考虑名义 var。在新情况下,变量 x 和 x1 具有不同的长度

x <- c(-10, 1:6, 50)
x1<- c(-20, 1:5, 60)
z<- c(1,2,3,4,5,6,7,8)

bx <- boxplot(x)
bx$out

bx1 <- boxplot(x1)
bx1$out


x<- x[!(x %in% bx$out)]
x1 <- x1[!(x1 %in% bx1$out)]


x_to_remove<-which(x %in% bx$out)
x <- x[!(x %in% bx$out)]

x1_to_remove<-which(x1 %in% bx1$out)
x1 <- x1[!(x1 %in% bx1$out)]

z<-z[-unique(c(x_to_remove,x1_to_remove))]
z  

data.frame(cbind(x,x1,z))
Run Code Online (Sandbox Code Playgroud)

然后我收到警告

Warning message:
In cbind(x, x1, z) :
  number of rows of result is not a multiple of vector length (arg 2)
Run Code Online (Sandbox Code Playgroud)

所以在新的数据框中 …

r mean outliers dataframe dplyr

5
推荐指数
1
解决办法
5万
查看次数

如何使用密度图识别异常值

我试图用我的密度图识别异常值。我目前正在使用 seaborn 库来绘制我的数据。我将如何识别异常值?我一直在考虑使用 stats 库实现 Z-score,这是唯一可以实现的方法,这不能在密度图中完成吗?

python scipy outliers density-plot seaborn

5
推荐指数
0
解决办法
926
查看次数

有没有可以去除异常值的功能?

我找到了一个函数来检测列中的异常值,但我不知道如何删除异常值

是否有从列中排除或删除异常值的函数

这是检测异常值的函数,但我需要帮助删除异常值的函数

import numpy as np
import pandas as pd
outliers=[]
def detect_outlier(data_1):

    threshold=3
    mean_1 = np.mean(data_1)
    std_1 =np.std(data_1)


    for y in data_1:
        z_score= (y - mean_1)/std_1 
        if np.abs(z_score) > threshold:
            outliers.append(y)
    return outliers
Run Code Online (Sandbox Code Playgroud)

这里是打印异常值

#printing the outlier 
outlier_datapoints = detect_outlier(df['Pre_TOTAL_PURCHASE_ADJ'])
print(outlier_datapoints)
Run Code Online (Sandbox Code Playgroud)

python outliers pandas

5
推荐指数
1
解决办法
1864
查看次数

如何检测单变量异常值并在新列中标记为 TRUE 或 FALSE

我有一个包含 30 列和 >10,000 行的数据框。

我如何对一组变量运行异常值分析,如果任何变量超过特定阈值(对于该给定变量),则返回 TRUE,如果不满足任何异常值阈值 (3SD),则返回 FALSE变量,TRUE/FALSE 值显示在新列中?

我使用分位数来找到每个变量的 3 个标准偏差截止值:

IE:

quantile(df$a, 0.003, na.rm = T) #and 

quantile(df$a, 0.997, na.rm = T)
Run Code Online (Sandbox Code Playgroud)

假设第一个值是 2.5,这个变量的上限值是 10.5,然后我创建了一个新变量:

df$outliers <- (df$a <- df$a <2.5 | df$a > 10.5)
Run Code Online (Sandbox Code Playgroud)

当 a 列中的值小于 2.5 或大于 10.5 时,它给出 TRUE 值。

我想做的是让 df$outliers 代表一组列的异常值状态,而不仅仅是一个列,即列 d、e、f、g、l、m 等,它们都有自己的阈值遇见。

做这个的最好方式是什么?

r outliers dataframe

5
推荐指数
1
解决办法
398
查看次数

使用自定义评分器功能在 GridSearchCV 期间评估多个隔离森林估计器

我有一个没有目标值的值样本。实际上,X 特征(预测变量)全部用于拟合隔离森林估计器。目标是确定哪些 X 特征以及未来出现的特征实际上是异常值。举例来说,假设我拟合一个数组 (340,3) => (n_samples, n_features)并且我预测这些特征来识别 340 个观察值中哪些是异常值

到目前为止我的方法是:

首先我创建一个管道对象

from sklearn.pipeline import Pipeline
from sklearn.ensemble import IsolationForest
from sklearn.model_selection import GridSearchCV

steps=[('IsolationForest', IsolationForest(n_jobs=-1, random_state=123))]
pipeline=Pipeline(steps)
Run Code Online (Sandbox Code Playgroud)

然后我创建一个用于超参数调整的参数网格

parameteres_grid={'IsolationForest__n_estimators':[25,50,75],
                  'IsolationForest__max_samples':[0.25,0.5,0.75,1.0],
                  'IsolationForest__contamination':[0.01,0.05],
                  'IsolationForest__bootstrap':[True, False]
                 }
Run Code Online (Sandbox Code Playgroud)

最后,我应用GridSearchCV算法

isolation_forest_grid=GridSearchCV(pipeline, parameteres_grid, scoring=scorer_f, cv=3, verbose=2)
isolation_forest_grid.fit(scaled_x_features.values)
Run Code Online (Sandbox Code Playgroud)

我的目标是确定最适合的评分函数(记为Scorer_f ),它将有效地选择最合适的隔离森林估计器来进行异常值检测。

到目前为止,基于这个出色的答案,我的评分如下:

记分功能

isolation_forest_grid=GridSearchCV(pipeline, parameteres_grid, scoring=scorer_f, cv=3, verbose=2)
isolation_forest_grid.fit(scaled_x_features.values)
Run Code Online (Sandbox Code Playgroud)

简单解释一下,我不断地将批次中 5%(0.05 分位数)的观察值识别为异常值。因此,每个低于阈值的分数都被表示为异常值。因此,我指示 GridSearch 函数选择异常值最多的模型作为最坏情况。

让您尝尝结果:

isolation_forest_grid.cv_results_['mean_test_score']

array([4. , 4. , 4. , …
Run Code Online (Sandbox Code Playgroud)

python machine-learning outliers scikit-learn isolation-forest

5
推荐指数
0
解决办法
254
查看次数