Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Python 3.x_List_Outliers - Fatal编程技术网

Python 从列表中检测异常值

Python 从列表中检测异常值,python,arrays,python-3.x,list,outliers,Python,Arrays,Python 3.x,List,Outliers,我想从列表中检测并存储异常值,这就是我正在做的 代码: 有没有更好的方法来实现这一点,我不在数组中而是在列表中获取结果? 还有,有人能解释一下我们为什么使用 thresh=3.5 修正的z_分数=0.6745*abs_dev/y_mad 这是因为您正在使用numpy函数。那里使用的默认类型是numpy.ndarray,这会加快计算速度。如果您只需要一个列表作为输出参数,请使用tolist()方法 z=异常值(投标) bidd=np.数组(bids) out_liers=bidd[z].tolis

我想从列表中检测并存储异常值,这就是我正在做的

代码:

有没有更好的方法来实现这一点,我不在数组中而是在列表中获取结果? 还有,有人能解释一下我们为什么使用

thresh=3.5

修正的z_分数=0.6745*abs_dev/y_mad


这是因为您正在使用
numpy
函数。那里使用的默认类型是
numpy.ndarray
,这会加快计算速度。如果您只需要一个列表作为输出参数,请使用
tolist()
方法

z=异常值(投标)
bidd=np.数组(bids)
out_liers=bidd[z].tolist()
这项工作:

def outliers_modified_z_score(ys, threshold=3.5):
    ys_arr = np.array(ys)
    median_y = np.median(ys_arr)
    median_absolute_deviation_y = np.median(np.abs(ys_arr - median_y))
    modified_z_scores = 0.6745 * (ys_arr - median_y) / median_absolute_deviation_y
    return (ys_arr[np.abs(modified_z_scores) > threshold]).tolist()

如果需要列表而不是numpy数组,numpy数组可以方便地提供
tolist
函数:
out\u liers.tolist()
。您的其他问题最好由代码的原始作者来回答。非常感谢!您还可以解释值3.5和0.67450.6745是因为正态分布变量的
E[MAD]=0.6745*sigma
。尝试:
x=np.random.normal(size=100000000)
print(np.median(np.abs(x-np.median(x)).mean()/x.std())3.5也由Iglewicz和Hoaglin(离群值测试的创建者)根据经验发现。见:
out_liers = array([ 1000, 15000])
def outliers_modified_z_score(ys, threshold=3.5):
    ys_arr = np.array(ys)
    median_y = np.median(ys_arr)
    median_absolute_deviation_y = np.median(np.abs(ys_arr - median_y))
    modified_z_scores = 0.6745 * (ys_arr - median_y) / median_absolute_deviation_y
    return (ys_arr[np.abs(modified_z_scores) > threshold]).tolist()