MATLAB中isoutlier函数用法

目录

语法

说明

示例

检测向量中的离群值

使用均值检测方法

使用移窗检测法

检测矩阵中的离群值

可视化离群值阈值


        isoutlier函数的功能是查找数据中的离群值

语法

TF = isoutlier(A)
TF = isoutlier(A,method)
TF = isoutlier(A,"percentiles",threshold)
TF = isoutlier(A,movmethod,window)
TF = isoutlier(___,dim)
TF = isoutlier(___,Name,Value)
[TF,L,U,C] = isoutlier(___)

说明

        ​TF = isoutlier(A) 返回一个逻辑数组,当在 A 的元素中检测到离群值时,该数组中与之对应的元素为 true。​

  • 如果 A 是矩阵,则 isoutlier 分别对 A 的每列进行运算。

  • 如果 A 是多维数组,则 isoutlier 沿 A 的大小不等于 1 的第一个维度进行运算。

  • 如果 A 是表或时间表,则 isoutlier 分别对 A 的每个变量进行运算。

​默认情况下,离群值是指与中位数相差超过三倍经过换算的中位数绝对偏差 (MAD) 的值。​

        ​TF = isoutlier(A,method) 指定检测离群值的方法。例如,isoutlier(A,"mean") 对偏离均值超过三倍标准差的所有元素返回 true。

        ​TF = isoutlier(A,"percentiles",threshold) 将离群值定义为 threshold 所指定的百分位数以外的点。threshold 参数是包含上下百分位数阈值的二元素行向量,例如 [10 90]。

        ​TF = isoutlier(A,movmethod,window) 使用窗长度为 window 的移动窗方法检测局部离群值。例如,isoutlier(A,"movmedian",5) 对一个包含五个元素的窗口内偏离局部中位数超过三倍局部换算 MAD 的所有元素返回 true。

        ​TF = isoutlier(___,dim) 为上述任一语法指定 A 的运算维度。例如,isoutlier(A,2) 沿矩阵 A 的每一行运算。​

        ​TF = isoutlier(___,Name,Value) 使用一个或多个名称-值参数指定用于检测离群值的其他参数。例如,isoutlier(A,"SamplePoints",t) 相对于时间向量 t 中的对应元素检测数组 A 中的离群值。

        [TF,L,U,C] = isoutlier(___) 还返回离群值检测方法使用的下阈值 L、上阈值 U 和中心值 C。​

示例

检测向量中的离群值

        查找数据向量中的离群值。输出中的逻辑值 1 表示离群值的位置。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
TF = isoutlier(A)

TF = 1x15 logical array

   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0

使用均值检测方法

        将离群值定义为偏离均值三倍标准差以上的点,并查找离群值在向量中的位置。

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
TF = isoutlier(A,"mean")

TF = 1x15 logical array

   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0

使用移窗检测法

        使用移动检测方法来检测对应于时间向量的正弦波中的局部离群值。创建包含一个局部离群值的数据向量。

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 个小时。绘制数据和检测到的离群值的图。

TF = isoutlier(A,"movmedian",hours(5),"SamplePoints",t);
plot(t,A)
hold on
plot(t(TF),A(TF),"x")
legend("Original Data","Outlier Data")

如图所示:

检测矩阵中的离群值

        查找矩阵每一行的离群值。创建一个数据矩阵,其对角线上包含离群值。

A = magic(5) + diag(200*ones(1,5))

A = 5×5

   217    24     1     8    15
    23   205     7    14    16
     4     6   213    20    22
    10    12    19   221     3
    11    18    25     2   209

基于每行中的数据查找离群值的位置。

TF = isoutlier(A,2)

TF = 5x5 logical array

   1   0   0   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   0   0   1   0
   0   0   0   0   1

可视化离群值阈值

        定位数据向量中的离群值,并可视化该离群值。创建包含一个局部离群值的数据向量。

x = 1:10;
A = [60 59 49 49 58 100 61 57 48 58];

使用默认检测方法 "median" 定位离群值。

[TF,L,U,C] = isoutlier(A);

        绘制原始数据、离群值以及由检测方法确定的阈值和中心值。中心值是数据的中位数,上阈值和下阈值分别高于和低于中位数三倍换算 MAD。

plot(x,A)
hold on
plot(x(TF),A(TF),"x")
yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"])
legend("Original Data","Outlier Data")

如图所示:

参数说明

A-输入数据,指定为向量、矩阵、多维数组、表或时间表。

  • 如果 A 是一个表,则其变量的类型必须为 double 或 single,也可以使用 DataVariables 参数显式列出 double 或 single 变量。当您使用的表中包含 double 和 single 数据类型之外的变量时,指定变量很有用。

  • 如果 A 是一个时间表,则 isoutlier 仅对表元素进行运算。如果行时间用作采样点,则它们必须唯一,并按升序排列。

method — 检测离群值的方法

检测离群值的方法,指定为以下值之一。

方法描述
"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" 类似,但当有多个离群值互相遮盖时,此方法的执行效果更好。

threshold — 百分位数阈值

        百分位数阈值,指定为元素在区间 [0, 100] 内的二元素行向量。第一个元素表示下百分位数阈值,第二个元素表示上百分位数阈值。threshold 的第一个元素必须小于第二个元素。

例如,[10 90] 阈值将离群值定义为低于第 10 个百分位数或高于第 90 个百分位数的点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值