MATLAB 剔除异常点

利用线性插值剔除离群点

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'linear'); % 使用线性插值替代异常点
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

Create a vector of data containing an outlier, and use linear interpolation to replace the outlier. Plot the original and filled data.

效果如图
蓝色线为原始数据, 红色圆圈是剔除异常点后的数据.
MATLAB 剔除异常点_第1张图片
除了线性插值还可以用其他方式填充,只需要将B = filloutliers(A,‘linear’); 中的’linear’替换成对应的方式即可.

用于替换离群值的填充方法,指定为数值标量或下列值之一:

填充方法 说明
数值标量 使用指定的标量值进行填充
‘center’ 使用由 findmethod 决定的中心值进行填充
‘clip’ 对于比 findmethod 决定的下阈值还小的元素,用下阈值填充。对于比 findmethod 决定的上阈值还大的元素,用上阈值填充。
‘previous’ 使用上一个非离群值进行填充
‘next’ 使用下一个非离群值进行填充
‘nearest’ 使用最接近的非离群值进行填充
‘linear’ 使用相邻的非离群值的线性插值进行填充
‘spline’ 使用分段三次样条插值进行填充
‘pchip’ 使用保形分段三次样条插值进行填充

利用均值确定离群值

创建包含一个离群值的向量,并将离群值定义为与均值相差超过三倍标准差的点。将该离群值替换为最接近的非离群值元素,并绘制原始数据和插入后的数据。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'nearest','mean');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

效果如下:
MATLAB 剔除异常点_第2张图片
检测离群值的方法,指定为以下方法之一:

方法 说明
‘median’ 离群值定义为与中位数相差超过三倍换算 MAD 的元素。换算 MAD 定义为 c*median(abs(A-median(A))),其中 c=-1/(sqrt(2)*erfcinv(3/2))。
‘mean’ 离群值定义为与均值相差超过三倍标准差的元素。此方法比 ‘median’ 快,但没有它可靠。
‘quartiles’ 离群值定义为比上四分位数 (75%) 大 1.5 个四分位差以上或比下四分位数 (25%) 小 1.5 个四分位差以上的元素。当 A 中的数据不是正态分布时,此方法很有用。
‘grubbs’ 使用 Grubbs 检验检测离群值,并基于假设检验每次迭代删除一个离群值。此方法假设 A 中的数据呈正态分布。
‘gesd’ 使用广义极端 Student 偏差检验检测离群值。此迭代方法与 ‘grubbs’ 类似,但当有多个离群值互相遮盖时,此方法的执行效果更好。

利用移动窗口确定离群值

使用移动中位数,查找与时间向量对应的正弦波内的局部离群值。

创建包含一个局部离群值的数据向量。

x = -2*pi:0.1:2*pi;
A = sin(x);
A(47) = 0;

创建与 A 中的数据对应的时间向量。

t = datetime(2017,1,1,0,0,0) + hours(0:length(x)-1);

将离群值定义为移动窗口内与局部中位数相差超过三倍局部换算 MAD 的点。在 A 中查找与 t 中的点对应的离群值的位置,窗口大小为 5 小时。使用方法 ‘clip’ 用计算的阈值填充离群值,并绘制原始数据和填充后的数据。

[B,TF,U,L,C] = filloutliers(A,'clip','movmedian',hours(5),'SamplePoints',t);
plot(t,A,t,B,'o')
legend('Original Data','Filled Data')

显示替换离群值的阈值。

L(TF)
ans = -0.8779

效果如下:
MATLAB 剔除异常点_第3张图片

用来检测离群值的移动方法,指定为下列方法之一:

方法 说明
‘movmedian’ 离群值定义为在 window 指定的窗口长度内,与局部中位数相差超过三倍局部换算 MAD 的元素。
‘movmean’ 离群值定义为在 window 指定的窗口长度内,与局部均值相差超过三倍局部标准差的元素。

离群点补偿阈值设置

Find the outlier in a vector of data, and replace it using the ‘clip’ method. Plot the original data, the filled data, and the thresholds and center value determined by the detection method. ‘clip’ replaces the outlier with the upper threshold value.

A = [60 59 49 49 58 100 61 57 48 58 200 0 500 41];
x = 1:length(A);
[B,TF,lower,upper,center] = filloutliers(A,'clip');
plot(x,A,x,B,'o',x,lower*ones(1,length(A)),x,upper*ones(1,length(A)),x,center*ones(1,length(A)))
legend('Original Data','Filled Data','Lower Threshold','Upper Threshold','Center Value')

MATLAB 剔除异常点_第4张图片

你可能感兴趣的:(MATLAB,算法,算法,计算机视觉,图像处理)