主要内容

数据平滑与异常值检测

数据平滑指的是消除数据中不需要的噪声或行为的技术,而异常值检测则识别出与其余数据显著不同的数据点。

移动窗口方法

移动窗口方法是一次处理小批量数据的方法,通常是为了在统计上表示数据中点的邻域。移动平均线是一种常见的数据平滑技术,它沿着数据滑动一个窗口,计算每个窗口内点的平均值。这可以帮助消除从一个数据点到下一个数据点之间不重要的变化。

例如,考虑大约3小时内每分钟进行一次的风速测量。使用movmean功能与窗口大小为5分钟,以消除高速风阵风。

负载windData.matMins = 1:长度(速度);Window = 5;Meanspeed = movmean(速度,窗口);情节(分钟,速度,分钟,meanspeed)轴传奇(“实测风速”“平均风速超过5分钟窗口”...“位置”“最佳”)包含(“时间”) ylabel (“速度”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表测量风速,平均风速超过5分钟窗口。

方法也可以计算滑动窗口上的中位风速movmedian函数。

Medianspeed = movmedian(速度,窗口);情节(分钟,速度,分钟,medianspeed)轴传奇(“实测风速”“中位风速超过5分钟窗口”...“位置”“最佳”)包含(“时间”) ylabel (“速度”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些物体代表实测风速,5分钟窗口内的中位风速。

并不是所有的数据都适合用移动窗口方法进行平滑。例如,用注入的随机噪声创建一个正弦信号。

T = 1:0.2:15;A = sin(2* t) + cos(2* *0.5*t);噪声= A + 0.5*rand(1,长度(t));情节(t, t,声音吵醒)轴传奇(“原始数据”“数据”“位置”“最佳”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表原始数据、噪声数据。

使用窗口大小为3的移动平均值来平滑有噪声的数据。

Window = 3;Amean = movmean(噪声,窗口);情节(t, t Amean)轴传奇(“原始数据”“移动平均数-窗口尺寸3”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表原始数据,移动平均值-窗口大小3。

移动平均值获得了数据的一般形状,但不能非常准确地捕获山谷(局部最小值)。由于山谷点在每个窗口中都被两个较大的邻居所包围,因此平均值并不是这些点的很好近似。如果你使窗口尺寸变大,均值就会完全消除较短的峰值。对于这种类型的数据,可以考虑其他平滑技术。

Amean = movmean(Anoise,5);情节(t, t Amean)轴传奇(“原始数据”“移动平均值-窗口尺寸5”...“位置”“最佳”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表原始数据,移动平均值-窗口大小为5。

常用平滑方法

smoothdata函数提供了一些平滑选项,如Savitzky-Golay方法,这是一种在信号处理中使用的流行平滑技术。默认情况下,smoothdata根据数据为方法选择最佳猜测窗口大小。

使用Savitzky-Golay方法平滑噪声信号声音吵醒,并输出它使用的窗口大小。该方法提供了一个更好的谷近似movmean

[Asgolay,window] = smoothdata(Anoise, window)“sgolay”);情节(t, t Asgolay)轴传奇(“原始数据”“Savitzky-Golay”“位置”“最佳”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表原始数据,Savitzky-Golay。

窗口
Window = 3

鲁棒的Lowess方法是另一种平滑方法,当数据中除噪声外还存在异常值时特别有用。在有噪声的数据中注入一个异常值,并使用鲁棒Lowess对数据进行平滑处理,从而消除了异常值。

噪声(36)= 20;无箭头=平滑数据(噪声,“rlowess”5);情节(t,声音吵醒,t, Arlowess)轴传奇(“数据”‘强健’洛斯

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示噪声数据,稳健低。

检测异常值

数据中的离群值会严重影响数据处理结果和其他计算量。例如,如果尝试用移动中值平滑包含异常值的数据,可能会得到误导性的峰值或低谷。

Amedian =平滑数据(噪声,“movmedian”);情节(t,声音吵醒,t, Amedian)轴传奇(“数据”“移动平均”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示噪声数据,移动中值。

isoutlier函数在检测到异常值时返回逻辑1。验证异常值的索引和值声音吵醒

TF = isoutlier(Anoise);查找(TF)
Ind = 36
噪声(ind)
Aoutlier = 20

您可以使用filloutliers函数通过指定填充方法替换数据中的异常值。例如,填写离群值声音吵醒它的右邻函数的值。

填充=填充异常值(噪声,“下一个”);情节(t,声音吵醒,t, Afill)轴传奇(“带异常值的噪声数据”“充满异常值的噪声数据”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示带有异常值的噪声数据,带有填充异常值的噪声数据。

非均匀数据

不是所有的数据都由等距的点组成,这可能会影响数据处理的方法。创建一个datetime中的数据包含不规则采样时间的向量Airreg.的时间向量表示前30分钟每分钟采集的样本,然后是两天内每小时采集的样本。

T0 = datetime(2014,1,1,1,1);Timeminutes = sort(t0 + minutes(1:30));Timehours = t0 + hours(1:48);时间= [timminutes timehours];Airreg = rand(1,长度(时间));情节(时间,Airreg)轴

图中包含一个轴对象。axis对象包含一个line类型的对象。

默认情况下,smoothdata对等间距整数进行平滑,在这种情况下,1、2、…,78.由于整数时间戳与中的点的采样不协调Airreg,平滑后的前半小时数据仍然存在噪声。

Adefault =平滑数据(Airreg,“movmean”3);情节(时间、Airreg时间,Adefault)轴传奇(“原始数据”“平滑数据与默认样本点”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示原始数据,平滑数据与默认采样点。

MATLAB®中的许多数据处理函数,包括smoothdatamovmean,filloutliers,允许您提供采样点,确保数据是相对于其采样单位和频率进行处理的。去除前半小时数据中的高频变化Airreg,使用“SamplePoints”带有时间戳的选项时间

Asamplepoints =平滑数据(Airreg,“movmean”...小时(3),“SamplePoints”、时间);情节(时间、Airreg时间,Asamplepoints)轴传奇(“原始数据”“平滑数据与样本点”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示原始数据,平滑数据与样本点。

另请参阅

||||

相关的话题