🔗 运行环境: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 编辑器中将查找变化点任务添加到实时脚本中,请执行以下操作:
-
在实时编辑器选项卡中,选择任务 > 查找变化点。
-
在脚本的代码块中,键入相关关键字,例如
change
或find
。从建议的命令自动填充项中选择查找变化点。
🥇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 on
stairs(S1)
legend('Data','Segment Mean','Location','NW')
线性区的变化
创建一个由含噪数据组成的向量,并计算数据的斜率和截距的突然变化。设置较大的检测阈值可减少由于噪声而检测到的变化点数。
A = [zeros(1,100) 1:100 99:-1:50 50*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.8147 0.0975 0.1576 0.1419 0.6557
0.9058 25.2785 0.9706 0.4218 0.0357
0.1270 0.5469 25.9572 0.9157 0.8491
0.9134 0.9575 0.4854 25.7922 0.9340
0.6324 0.9649 0.8003 0.9595 25.6787
TF = 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