过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,qq:927550334
经常使用matlab绘图或者做计算自然而然遇到一个很基础的步骤,数据处理,本期过冷水就和大家分享一下matlab数据预处理技巧。
平滑&插值
过冷水再做计算过程中会得到一组数据,对该数据做积分运算。首先就需要做数据拟合,所以自然就会涉及的数据的平滑处理和插值。
过冷水在这里使用的就是fit拟合函数的光滑模式
fun = fit( rawdata(:,1),rawdata(:,2),'*oothingspline' )
该方法可以很好的给出数据的解析式Fun,可用该函数数据范围内任意值的计算,该函数的用法过冷水在往期讲的比较多了,就不在讲了,在学习过程中,过冷水还有接触到其它函数,过冷水在这里和大家一起学习一下,开阔思路。
yy=s*ooth(y)
利用一定平均滤波器对向量y进行平滑处理,返回等长的向量yy具体计算方法为:
原程序
t=linspace(0,2*pi,500)'; y=100*sin(t) noise=normrnd(1,15,500,1) y=y noise yy=s*ooth(y) figure1 = figure; subplot1=subplot(1,2,1,'Parent',figure1); hold(subplot1,'on'); plot(t,y,'Parent',subplot1,'MarkerFaceColor',[1 0 0],'MarkerSize',8,'LineWidth',3); ylabel(subplot1,'$y$','FontSize',30,'Interpreter','latex'); xlabel(subplot1,'$x$','FontSize',30,'Interpreter','latex'); hold(subplot1,'off'); title(subplot1,'原数据'); set(subplot1,'FontSize',20,'LineWidth',3); subplot2=subplot(1,2,2,'Parent',figure1); hold(subplot2,'on'); plot(t,yy,'Parent',subplot2,'MarkerFaceColor',[0 0 1],'MarkerSize',8,'LineWidth',3); ylabel(subplot2,'$y$','FontSize',30,'Interpreter','latex'); xlabel(subplot2,'$x$','FontSize',30,'Interpreter','latex'); hold(subplot2,'off'); title(subplot2,'平滑数据'); set(subplot2,'FontSize',20,'LineWidth',3);
medfilt1
在Matlab信号处理模块可以使用medfilt1函数对原信号数据进行中值滤波处理
y=medfilt1(x,n)
对向量x进行一维中值滤波,返回与x等长的向量y。这里的n是窗宽参数,n是奇数,y的第k个元素等于x的第k-(n-1)/2个元素至k (n-1)/2元素的中位数;当n为偶数,y的第k个元素等于x的第k-(n)/2个元素至k (n)/2-1元素的中位数;
原程序
t=linspace(0,2*pi,500)'; y=100*cos(t) noise=normrnd(1,15,500,1) y=y noise yy=medfilt1(y,30) figure1 = figure; subplot1=subplot(1,2,1,'Parent',figure1); hold(subplot1,'on'); plot(t,y,'Parent',subplot1,'MarkerFaceColor',[1 0 0],'MarkerSize',8,'LineWidth',3); ylabel(subplot1,'$y$','FontSize',30,'Interpreter','latex'); xlabel(subplot1,'$x$','FontSize',30,'Interpreter','latex'); hold(subplot1,'off'); title(subplot1,'原数据'); set(subplot1,'FontSize',20,'LineWidth',3); subplot2=subplot(1,2,2,'Parent',figure1); hold(subplot2,'on'); plot(t,yy,'Parent',subplot2,'MarkerFaceColor',[0 0 1],'MarkerSize',8,'LineWidth',3); ylabel(subplot2,'$y$','FontSize',30,'Interpreter','latex'); xlabel(subplot2,'$x$','FontSize',30,'Interpreter','latex'); hold(subplot2,'off'); title(subplot2,'平滑数据'); set(subplot2,'FontSize',20,'LineWidth',3);
过冷水新学习的数据平滑处理的函数就是以上几个,大致上差不多,但又有不同的地方,最好是针对不同数据类型选用对应的函数平滑处理,而不fit( x,y,'*oothingspline' )到底,在某些情况下有可能会失真。
数据标准化变换
对于多元数据,当各变量的量纲和数量级不一致时,往往需要对数据进行变换处理,以消
除量纲和数量级的限制,过冷水在做做神经网络工作时候,各变量之间量纲不一样,为了使得构建一个合理矩阵就需要做数据变换。以便进行后续统计分析。标准化变换和极差归一化变换是比较常用的方式。
标准化变换公式
zscore函数为标准化变化函数,调用格式为:
rand('seed',1); x=[rand(5,1),5*rand(5,1),10*rand(5,1),500*rand(5,1)] [xz,mu,sigma]=zscore(x) x0=bsxfun(@plus,bsxfun(@times,xz,sigma),mu)%逆标准化变换 x = 0.5129 3.5462 1.9215 215.9352 0.4605 0.5798 4.7136 223.0174 0.3504 0.3904 1.4492 254.1658 0.0950 1.8463 7.1784 264.0439 0.4337 0.1681 6.6171 286.4390 xz = 0.8641 1.5868 -0.9347 -1.1208 0.5460 -0.5145 0.1286 -0.8787 -0.1220 -0.6487 -1.1146 0.1862 -1.6714 0.3826 1.0672 0.5239 0.3833 -0.8062 0.8535 1.2895 mu = 0.3705 1.3062 4.3760 248.7203 sigma = 0.1648 1.4116 2.6259 29.2518 x0 = 0.5129 3.5462 1.9215 215.9352 0.4605 0.5798 4.7136 223.0174 0.3504 0.3904 1.4492 254.1658 0.0950 1.8463 7.1784 264.0439 0.4337 0.1681 6.6171 286.4390
极差归一化变换公式
代码
rand('seed',1); x=[rand(5,1),5*rand(5,1),10*rand(5,1),500*rand(5,1)] dim=1; xmin = min(x,[],dim); xrange = range(x,dim); xrange0 = xrange; xrange0(xrange0==0) = 1; R = bsxfun(@minus,x, xmin); R = bsxfun(@rdivide, R, xrange0) x = 0.5129 3.5462 1.9215 215.9352 0.4605 0.5798 4.7136 223.0174 0.3504 0.3904 1.4492 254.1658 0.0950 1.8463 7.1784 264.0439 0.4337 0.1681 6.6171 286.4390 R = 1.0000 1.0000 0.0824 0 0.8745 0.1219 0.5698 0.1005 0.6111 0.0658 0 0.5422 0 0.4968 1.0000 0.6824 0.8104 0 0.9020 1.0000
mapminmax函数
在matlab神经网络建模中还有mapminmax函数也可以作为数据映射变换
[Y,PS]=mapminmax(x,xmin,xmax) x=mapminmax('reverse',Y,PS)
mapminmax函数可以将矩阵X中每行数据映射到区间[xmin,xmax]内,代码案例
rand('seed',1); x = [rand(5,1), 5*rand(5,1), 10*rand(5,1), 500*rand(5,1)] [y,Ps] = mapminmax(x', 0, 1); x0 = mapminmax('reverse',y,Ps)' x = 0.5129 3.5462 1.9215 215.9352 0.4605 0.5798 4.7136 223.0174 0.3504 0.3904 1.4492 254.1658 0.0950 1.8463 7.1784 264.0439 0.4337 0.1681 6.6171 286.4390 x0 = 0.5129 3.5462 1.9215 215.9352 0.4605 0.5798 4.7136 223.0174 0.3504 0.3904 1.4492 254.1658 0.0950 1.8463 7.1784 264.0439 0.4337 0.1681 6.6171 286.4390
本期过冷水想要分享的使用数据处理方法就是这么多,读者在应用过程,有遇到其它比较常用的数据处理方法,可以留言分享,过冷水也会在后期详细分享等多的数据处理方法。
过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。
精品回顾
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享