Python 从列表中检测异常值
我想从列表中检测并存储异常值,这就是我正在做的 代码: 有没有更好的方法来实现这一点,我不在数组中而是在列表中获取结果? 还有,有人能解释一下我们为什么使用 thresh=3.5 修正的z_分数=0.6745*abs_dev/y_madPython 从列表中检测异常值,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
这是因为您正在使用
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()