本文主要是介绍卷积平滑数据原理(有边缘效应),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、离散卷积的求法
假设两组数据
A(原始数据):[a b c d], B(平滑窗口)[1/2 1/3]
则A卷积B等于
(1) A*1/2 = a/2 b/2 c/2 d/2 (空) 不移位
(2) A*1/3 = (空) a/3 b/3 c/3 d/3 向右移一位
(3) (1) + (2) = a/2 b/2+a/3 c/2+b/3 d/2+c/3 d/3
二、卷积平滑数据
基于一的离散卷积求解过程,则卷积可以利用与平滑数据。
1、假设t的取值范围为-4~4平均分成100份,y = sin(t) + randn(100), randn(100)为100个标准正太分布中的随机取值(randn(100)为一个向量),则利用卷积来平滑数据的结果,其中平滑窗口为[1/10…..1/10] (10个1/10组成的向量):
如图所示,原始数据为黑点,平滑数据为红色+号,在边缘部分数据变化趋势不准确,这是由于这里面使用的 python语句为:
convolution(y,window,'same')
'''结果为数据集中间长度为Max(y,window)的结果,因此会有边缘效应'''
解释:由于平滑窗口为[1/10 1/10 1/10…..1/10],则基于一种离散卷积求解过程可得,其平滑结果为取本点与前面9个点之和的平均值。也就相当与每个点的增幅都被缩小了,因此可以用来平滑数据。居于此可得,当平滑窗口向量值越少时,数据越不平滑(每个点的增幅值被考虑的权重增大),如下例所示,平滑窗口为[1/2 1/2]:
解释:平滑数据为该点于前面一点的平均值,即每两点取一个平均值。
因此当平滑窗口越长时,数据越平滑,因为选取了更多的点取平均值,因此每一点的增幅权重将被降低,如图所示,平滑窗口为[1/50…1/50]
解释:如图所示平滑窗口为[1/50…1/50],此情况与原始数据形状偏离较大,因为数据越幅度越大的地方,增幅越小,再被平均了之后权重就变得更小。
为了更好的理解卷积平滑过程,令y = 2*t + randn(100),t的取值范围与正弦函数相同。如图所示
解释:平滑窗口为[1/10…/10]。
这里需要注意,无论平滑窗口中每一个元素取多小,结果都不会变成一条水平直线,因为一条直线每一点的增幅都是不变的,例如假设原始数据形状类似一条直线,且每一点增幅为0.1,则
(1)前一点原始:a(n);
卷积平滑之后(a(1)+a(2)+…+a(n))/n;
(2)本点a(n+1)
卷积平滑之后(a(2)+a(3)+…+a(n+1))/n
(3)两点之差(增幅):
原始:a(n+1)-a(n) = 0.1;
平滑:(a(n+1)-a(1))/n = n*0.1/n = 0.1;
所以卷积平滑数据只是平均每一点的增幅,当每一点的增幅都一样时,无论平滑窗口元素的值多小,都不会得到一条水平的直线(不考虑边缘效应),如图所示:
解释:平滑窗口为[1/50 1/50…1/50],且对应点与平滑窗口[1/10…1/10]的相同。这也解释了为什么正弦离散点平滑数据会与原始正弦离散点的图像有所不同,因为正弦函数每一点的增幅不同,其导数为cos(t),0点的增幅最大,pi/2点的增幅点最小,因此如果平滑窗口元素值过小时,越靠近极值点,由于其增幅很小,所以其平滑结果越偏离原始离散点。
三、结论
卷积平滑数据方法平滑的是每一点的增幅,且本点的平滑结果为前n点的平均值。适用于原始数据震动幅度不太大于理想数据的情形。
这篇关于卷积平滑数据原理(有边缘效应)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!