数据平滑与异常值检测
数据平滑指的是消除数据中不需要的噪声或行为的技术,而异常值检测则识别出与其余数据显著不同的数据点。
移动窗口方法
移动窗口方法是一次处理小批量数据的方法,通常是为了在统计上表示数据中点的邻域。移动平均线是一种常见的数据平滑技术,它沿着数据滑动一个窗口,计算每个窗口内点的平均值。这可以帮助消除从一个数据点到下一个数据点之间不重要的变化。
例如,考虑大约3小时内每分钟进行一次的风速测量。使用movmean
功能与窗口大小为5分钟,以消除高速风阵风。
负载windData.matMins = 1:长度(速度);Window = 5;Meanspeed = movmean(速度,窗口);情节(分钟,速度,分钟,meanspeed)轴紧传奇(“实测风速”,“平均风速超过5分钟窗口”,...“位置”,“最佳”)包含(“时间”) ylabel (“速度”)
方法也可以计算滑动窗口上的中位风速movmedian
函数。
Medianspeed = movmedian(速度,窗口);情节(分钟,速度,分钟,medianspeed)轴紧传奇(“实测风速”,“中位风速超过5分钟窗口”,...“位置”,“最佳”)包含(“时间”) ylabel (“速度”)
并不是所有的数据都适合用移动窗口方法进行平滑。例如,用注入的随机噪声创建一个正弦信号。
T = 1:0.2:15;A = sin(2* t) + cos(2* *0.5*t);噪声= A + 0.5*rand(1,长度(t));情节(t, t,声音吵醒)轴紧传奇(“原始数据”,“数据”,“位置”,“最佳”)
使用窗口大小为3的移动平均值来平滑有噪声的数据。
Window = 3;Amean = movmean(噪声,窗口);情节(t, t Amean)轴紧传奇(“原始数据”,“移动平均数-窗口尺寸3”)
移动平均值获得了数据的一般形状,但不能非常准确地捕获山谷(局部最小值)。由于山谷点在每个窗口中都被两个较大的邻居所包围,因此平均值并不是这些点的很好近似。如果你使窗口尺寸变大,均值就会完全消除较短的峰值。对于这种类型的数据,可以考虑其他平滑技术。
Amean = movmean(Anoise,5);情节(t, t Amean)轴紧传奇(“原始数据”,“移动平均值-窗口尺寸5”,...“位置”,“最佳”)
常用平滑方法
的smoothdata
函数提供了一些平滑选项,如Savitzky-Golay方法,这是一种在信号处理中使用的流行平滑技术。默认情况下,smoothdata
根据数据为方法选择最佳猜测窗口大小。
使用Savitzky-Golay方法平滑噪声信号声音吵醒
,并输出它使用的窗口大小。该方法提供了一个更好的谷近似movmean
.
[Asgolay,window] = smoothdata(Anoise, window)“sgolay”);情节(t, t Asgolay)轴紧传奇(“原始数据”,“Savitzky-Golay”,“位置”,“最佳”)
窗口
Window = 3
鲁棒的Lowess方法是另一种平滑方法,当数据中除噪声外还存在异常值时特别有用。在有噪声的数据中注入一个异常值,并使用鲁棒Lowess对数据进行平滑处理,从而消除了异常值。
噪声(36)= 20;无箭头=平滑数据(噪声,“rlowess”5);情节(t,声音吵醒,t, Arlowess)轴紧传奇(“数据”,‘强健’洛斯)
检测异常值
数据中的离群值会严重影响数据处理结果和其他计算量。例如,如果尝试用移动中值平滑包含异常值的数据,可能会得到误导性的峰值或低谷。
Amedian =平滑数据(噪声,“movmedian”);情节(t,声音吵醒,t, Amedian)轴紧传奇(“数据”,“移动平均”)
的isoutlier
函数在检测到异常值时返回逻辑1。验证异常值的索引和值声音吵醒
.
TF = isoutlier(Anoise);查找(TF)
Ind = 36
噪声(ind)
Aoutlier = 20
您可以使用filloutliers
函数通过指定填充方法替换数据中的异常值。例如,填写离群值声音吵醒
它的右邻函数的值。
填充=填充异常值(噪声,“下一个”);情节(t,声音吵醒,t, Afill)轴紧传奇(“带异常值的噪声数据”,“充满异常值的噪声数据”)
非均匀数据
不是所有的数据都由等距的点组成,这可能会影响数据处理的方法。创建一个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)轴紧
默认情况下,smoothdata
对等间距整数进行平滑,在这种情况下,1、2、…,78
.由于整数时间戳与中的点的采样不协调Airreg
,平滑后的前半小时数据仍然存在噪声。
Adefault =平滑数据(Airreg,“movmean”3);情节(时间、Airreg时间,Adefault)轴紧传奇(“原始数据”,“平滑数据与默认样本点”)
MATLAB®中的许多数据处理函数,包括smoothdata
,movmean
,filloutliers
,允许您提供采样点,确保数据是相对于其采样单位和频率进行处理的。去除前半小时数据中的高频变化Airreg
,使用“SamplePoints”
带有时间戳的选项时间
.
Asamplepoints =平滑数据(Airreg,“movmean”,...小时(3),“SamplePoints”、时间);情节(时间、Airreg时间,Asamplepoints)轴紧传奇(“原始数据”,“平滑数据与样本点”)
另请参阅
smoothdata
|isoutlier
|filloutliers
|movmean
|movmedian