MATLAB 剔除异常点

8 篇文章 3 订阅
7 篇文章 0 订阅

利用线性插值剔除离群点

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.

效果如图
蓝色线为原始数据, 红色圆圈是剔除异常点后的数据.
请添加图片描述
除了线性插值还可以用其他方式填充,只需要将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')

效果如下:
请添加图片描述
检测离群值的方法,指定为以下方法之一:

方法说明
‘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

效果如下:
请添加图片描述

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

方法说明
‘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中也有相应的工具和函数可以实现。以下是使用Matlab进行异常剔除的基本流程和方法: 1. 数据加载:首先,将包含异常的原始数据加载到Matlab中,可以使用`load`函数或`readtable`函数等进行数据读取。 2. 数据可视化:使用Matlab中的绘图函数,如`plot`或`scatter`,将原始数据可视化。通过观察可以初步判断出是否存在异常。 3. 异常检测:使用Matlab中的统计工具和函数,如`mean`、`std`、`median`等,对数据进行统计分析,计算数据的均值、标准差、中位数等。通过与这些统计量进行比较,可以判断出是否存在异常。常见的异常检测方法有3σ准则、箱线图等。 4. 异常剔除:根据异常检测的结果,使用适当的方法将异常数据剔除。可以使用Matlab中的`find`函数和逻辑条件进行数据筛选,例如将超出一定范围的数据排除。 5. 数据再次可视化:剔除异常后,重新绘制数据的散图或其他图形,观察剔除效果。 6. 数据保存:将剔除异常数据保存为新的文件,便于进一步分析和处理。 需要注意的是,异常剔除需要综合考虑数据和实际应用场景,不同的数据集和问题可能需要不同的剔除方法和阈值设定。同时,异常剔除也可能带来信息丢失和数据偏差的问题,因此需要谨慎操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值