绝对中位差(MAD,Median Absolute Deviation)算法是一种用于稳健估计数据分布的方法,特别是对于含有异常值的数据分布。
MAD算法的基本思想是:对于一组数据,如果有一个或几个异常值,那么中位数能够更好地代表这组数据的“中心”位置。同时,对于异常值,其与中位数的绝对差值也会较大。因此,通过计算每个数据点与中位数的绝对差值,可以找到可能的异常值。
MAD算法的具体步骤如下:
- 对数据进行排序。
- 计算中位数。
- 对于每个数据点,计算其与中位数的绝对差值。
- 找到绝对差值最大的那个数据点,记为x_mad。
- 根据x_mad和MAD的值,可以判断哪些数据点可能是异常值。例如,如果某个数据点与中位数的绝对差值大于x_mad+MAD,那么这个数据点很可能是异常值。
需要注意的是,MAD算法对于含有较多异常值的数据分布可能不够稳健。在这种情况下,可以使用其他的稳健估计方法,如中位数绝对偏差(MAD)的稳健版本(Robust MAD),或者使用其他的异常值检测方法,如z-score方法等。
def mad_based_outlier(points: ndarray, thresh = 1.4826) -> ndarray:
"""
In this function you need to find the index of outliers in the data
:point: Original data
:thresh: Threshold for judgement
:return: Return a list contain index of data you selected
"""
# -- write your code here --
median = np.median(points, axis=0)
abs_dev = np.absolute(points - median)
mad = np.median(abs_dev) * thresh
mean = np.mean(points)
b = 2.5
lower_limit = mean-b*mad
upper_limit = mean+b*mad
flag = (points > upper_limit) | (points < lower_limit)
for i in np.argwhere(flag == True):
ans.append(i[0])
return ans
是的,
sklearn
库中提供了MAD(Median Absolute Deviation)的实现。在sklearn.mad_estimator
模块中,有一个名为MedianAbsoluteDeviation
的类,可以用于计算MAD。这个类提供了一个名为fit
的方法,可以拟合数据并计算MAD,以及一个名为predict
的方法,可以预测数据的MAD。以下是使用
sklearn.mad_estimator.MedianAbsoluteDeviation
计算MAD的示例代码:
python复制代码
from sklearn.mad_estimator import MedianAbsoluteDeviation
# 创建数据
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建MedianAbsoluteDeviation对象
mad_estimator = MedianAbsoluteDeviation()
# 拟合数据并计算MAD
mad = mad_estimator.fit(data)
# 输出MAD
print(mad)
输出结果为:
python复制代码
MedianAbsoluteDeviation(2.0)
在上面的代码中,我们首先导入了
sklearn.mad_estimator.MedianAbsoluteDeviation
类。然后,我们创建了一个名为mad_estimator
的MedianAbsoluteDeviation
对象。接着,我们使用fit
方法拟合数据并计算MAD,将结果存储在名为mad
的变量中。最后,我们输出了计算得到的MAD值。