运行环境:matlab

撰写作者:左手の明天

精选专栏:《python》

推荐专栏:《算法研究》

####防伪水印——左手の明天####

大家好,我是左手の明天!好久不见

今天开启新的系列——重新定义matlab强大系列

最近更新:2023 年 05 月 20 日,左手の明天的第283篇原创博客

更新于专栏:matlab

####防伪水印——左手の明天####


目录

什么是变化点?

matlab交互式任务

ischange-查找数据中的突然变化

1、语法

2、示例

均值的变化

线性区的变化

矩阵数据


什么是变化点?

数据向量 A 如果可以分成两段 A1和 A2,并满足以下条件,则包含一个变化点:

C(A1)+C(A2)+τ<C(A).

τ是由Threshold参数指定的阈值,C 表示代价函数。

例如,用于检测均值中的突然变化的代价函数是C(x)=Nvar(x),其中 N 是向量 x 中的元素数。代价函数测量线段均值逼近该线段的程度。

ischange以迭代方式使代价函数的总和最小化,以确定变化点 k 的数量和位置,使得

C(A1)+C(A2)+…+C(Ak)+kτ<C(A).

matlab交互式任务

查找变化点任务以交互方式查找数据的均值、方差或斜率和截距的突然变化。该任务会自动实时脚本生成 MATLAB代码。

使用此任务,可以:

  • 指定变化点类型,并在工作区变量中的数据中定位变化点。

  • 调整检测到的变化点数。

  • 可视化变化点位置及位置间的数据段。

要在 MATLAB 编辑器中将查找变化点任务添加到实时脚本中,请执行以下操作:

  • 实时编辑器选项卡中,选择任务>查找变化点

  • 在脚本的代码块中,键入相关关键字,例如changefind。从建议的命令自动填充项中选择查找变化点



ischange-查找数据中的突然变化

1、语法

TF= ischange(A)返回一个逻辑数组,当A的对应元素的均值出现突然变化时,该逻辑数组的元素为逻辑值1(true)。

TF= ischange(A,method)指定如何定义数据中的变化点。例如,ischange(A,'variance')将计算A的元素方差的突然变化。

method—变化检测方法
'mean'(默认) |'variance'|'linear'

更改检测方法,指定为下列值之一:

  • 'mean'– 计算数据均值的突然变化。

  • 'variance'– 计算数据方差的突然变化。

  • 'linear'– 计算数据的斜率和截距的突然变化。

TF= ischange(___,dim)为上述任一语法指定A的运算维度。例如,ischange(A,2)计算矩阵A的每一行的变化点。

TF= ischange(___,Name,Value)使用一个或多个名称-值参数指定用于计算变化点的其他参数。例如,ischange(A,'MaxNumChanges',m)最多检测到m个变化点。

[TF,S1] = ischange(___)还返回有关变化点之间的线段的信息。例如,[TF,S1] = ischange(A)返回包含向量A的变化点之间的数据均值的向量S1

[TF,S1,S2] = ischange(___)返回有关变化点之间的线段的其他信息。例如,[TF,S1,S2] = ischange(A)返回包含每个线段均值的向量S1以及包含向量A的每个线段方差的向量S2

S1— 均值或斜率

变化点之间的数据的均值或斜率,以向量、矩阵、多维数组、表或时间表形式返回。

  • 如果变化点检测方法为'mean''variance',则S1包含每个线段的均值。

  • 如果方法为'linear',则S1包含每个线段的斜率。

S2— 方差或截距

变化点之间的数据的方差或截距,以向量、矩阵、多维数组、表或时间表形式返回。

  • 如果变化点检测方法为'mean''variance',则S2包含每个线段的方差。

  • 如果方法为'linear',则S2包含每个线段的截距。

2、示例

均值的变化

创建一个由含噪数据组成的向量,并计算数据均值的突然变化。

A = [ones(1,5) 25*ones(1,5) 50*ones(1,5)] + rand(1,15);TF = ischange(A)TF = 1x15 logical array 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0

要计算变化点之间数据的均值,请指定第二个输出参数。

[TF,S1] = ischange(A);plot(A,'*')hold onstairs(S1)legend('Data','Segment Mean','Location','NW')

线性区的变化

创建一个由含噪数据组成的向量,并计算数据的斜率和截距的突然变化。设置较大的检测阈值可减少由于噪声而检测到的变化点数。

A = [zeros(1,100) 1:100 99:-1:5050*ones(1,250)] + 10*rand(1,500);[TF,S1,S2] = ischange(A,'linear','Threshold',200);segline = S1.*(1:500) + S2;plot(1:500,A,1:500,segline)legend('Data','Linear Regime')

除了提供阈值外,还可以指定要检测的最大变化点数。

[TF,S1,S2] = ischange(A,'linear','MaxNumChanges',3);

矩阵数据

计算矩阵每一行均值的突然变化。

A = diag(25*ones(5,1)) + rand(5,5)A = 5×5 25.81470.09750.15760.14190.65570.9058 25.27850.97060.42180.03570.12700.5469 25.95720.91570.84910.91340.95750.4854 25.79220.93400.63240.96490.80030.9595 25.6787TF = ischange(A,2)TF = 5x5 logical array 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1