在对时间序列数据(如信号数据或股票价格数据)进行统计分析时,往往需要对数据进行平滑处理,本次主要介绍smooth函数、smoothts函数和medfilt1函数的用法

1.smooth函数

smooth函数调用格式如下:
1) yy=smooth(y)
利用移动平均滤波器对列向量y进行平滑处理,返回与y等长的列向量yy。移动平均滤波器的默认窗宽为5,yy中元素的计算方法如下:
yy(1)=y(1)
yy(2)=(y(1)+y(2)+y(3))/3
yy(3)=(y(1)+y(2)+y(3)+y(4)+y(5))/5
yy(4)=(y(2)+y(3)+y(4)+y(5)+y(6))/5
yy(5)=(y(3)+y(4)+y(5)+y(6)+y(7))/5

2) yy=smooth(y,span)
用span参数指定移动平均滤波器的窗宽,span为奇数。
3) yy=smooth(y,method)
用method参数指定平滑数据的方法,method是字符串变量,可用的字符串如下表:

method参数值 说明
'moving ’ 移动平均法(默认情况)。一个低通滤波器,滤波系数为窗宽的倒数
’ lowess’ 局部回归(加权线性最小二乘和一个一阶多项式模型)
‘loess’ 局部回归(加权线性最小二乘和一个二阶多项式模型)
‘sgolay’ Savitzky -Golay滤波。一种广义移动平均法.滤波系数由不加权线性最小二乘回归和一个多项式模型确定,多项式模型的阶数n可以指定(默认为2)
‘rlowess’ 'lowess’方法的稳健形式。异常值被赋予较小的权重,6倍的平均绝对偏差以外的数据的权重为0
‘rloess’ 'loess’方法的稳健形式。舁常值被赋予较小的权承.6倍的平均绝对偏差以外的数据的权重为0

4) yy=smooth(y,span,method)
对于由method参数指定的平滑方法,用span参数指定滤波器的窗宽。对于loess和lowess方法,span是一个小于或等于1的数,表示占全体数据点总数的比例;对于移动平均法和Savitzky-Golay法,span必须是一个正的奇数,只要用户输入的span是一个正数,smooth函数内部会自动把span转为正的奇数。
5) yy=smooth(y,‘sgolay’,degree)
利用Savitzky-Golay方法平滑数据,此时用dcgree参数指定多项式模型的阶数。dcgree是一个整数,取值介于0和span-1之间。
6) yy=smooth(y,span,‘sgolay’,degree)
用span参数指定Savitzky-Golay滤波器的窗宽。span必须是一个正的奇数,degree是一个整数,取值介于0和span-1之间。
7) yy=smooth(x,y,…)
同时指定x数据。如果没有指定x,smooth函数中自动令x=1:length(y)。当x是非均匀或经过排序的数据时,用户应指定x数据。如果x是非均匀数据而用户没有指定method参数,smooth函数自动用lowess方法。如果数据平滑方法要求x是经过排序的数据,smooth函数自动对x进行排序。

【例】产生一列正弦波信号,加入噪声信号,然后调用smooth函数对加入噪声的正弦波进行滤波(平滑处理)。

%--------------------------------------------------------------------------
%              调用smooth函数进行加噪数据的平滑处理
%--------------------------------------------------------------------------%*****************产生加噪正弦波信号,绘制加噪波形图*************************
t = linspace(0,2*pi,500)';        % 产生一个从0到2*pi的向量,长度为500
y = 100*sin(t);                    % 产生正弦波信号
% 产生500行1列的服从N(0,15^2)分布的随机数,作为噪声信号
noise = normrnd(0,15,500,1);
y = y + noise;                        % 将正弦波信号加入噪声信号
figure;                             % 新建一个图形窗口
plot(t,y);                          % 绘制加噪波形图
xlabel('t');                          % 为X轴加标签
ylabel('y = sin(t) + 噪声');          % 为Y轴加标签%*************利用移动平均法对加噪信号进行平滑处理,绘制平滑波形图*************
yy1 = smooth(y,30);                % 利用移动平均法对y进行平滑处理
figure;                             % 新建一个图形窗口
plot(t,y,'k:');                   % 绘制加噪波形图
hold on;
plot(t,yy1,'k','linewidth',3);      % 绘制平滑后波形图
xlabel('t');                          % 为X轴加标签
ylabel('moving');                     % 为Y轴加标签
legend('加噪波形','平滑后波形');%*************利用lowess方法对加噪信号进行平滑处理,绘制平滑波形图*************
yy2 = smooth(y,30,'lowess');         % 利用lowess方法对y进行平滑处理
figure;                             % 新建一个图形窗口
plot(t,y,'k:');                   % 绘制加噪波形图
hold on;
plot(t,yy2,'k','linewidth',3);      % 绘制平滑后波形图
xlabel('t');                          % 为X轴加标签
ylabel('lowess');                     % 为Y轴加标签
legend('加噪波形','平滑后波形');%*************利用rlowess方法对加噪信号进行平滑处理,绘制平滑波形图************
yy3 = smooth(y,30,'rlowess');        % 利用rlowess方法对y进行平滑处理
figure;                             % 新建一个图形窗口
plot(t,y,'k:');                   % 绘制加噪波形图
hold on;
plot(t,yy3,'k','linewidth',3);      % 绘制平滑后波形图
xlabel('t');                          % 为X轴加标签
ylabel('rlowess');                % 为Y轴加标签
legend('加噪波形','平滑后波形');%*************利用loess方法对加噪信号进行平滑处理,绘制平滑波形图*************
yy4 = smooth(y,30,'loess');          % 利用loess方法对y进行平滑处理
figure;                             % 新建一个图形窗口
plot(t,y,'k:');                   % 绘制加噪波形图
hold on;
plot(t,yy4,'k','linewidth',3);      % 绘制平滑后波形图
xlabel('t');                          % 为X轴加标签
ylabel('loess');                      % 为Y轴加标签
legend('加噪波形','平滑后波形');%*************利用sgolay方法对加噪信号进行平滑处理,绘制平滑波形图*************
yy5 = smooth(y,30,'sgolay',3);   % 利用sgolay方法对y进行平滑处理
figure;                             % 新建一个图形窗口
plot(t,y,'k:');                   % 绘制加噪波形图
hold on;
plot(t,yy5,'k','linewidth',3);      % 绘制平滑后波形图
xlabel('t');                          % 为X轴加标签
ylabel('sgolay');                     % 为Y轴加标签
legend('加噪波形','平滑后波形');

加噪波形图:

平滑后波形图(移动平均法):

平滑后波形图(lowess法):

平滑后波形图(rlowess法):

平滑后波形图(loess法):

平滑后波形图(sgolay法):

实际上随着窗宽的增大,平滑后的曲线会越来越光滑,但过于光滑也可能造成失真。

2.smoothts函数

smoothts函数调用格式如下:
output = smoothts(input)
output = smoothts(input,‘b’,wsize)
output = smoothts(input,‘g’,wsize,stdev)
output = smoothts(input,‘e’,n)

smoothts函数的输入参数input是一个金融时间序列对象或行导向矩阵,其中金融时间序列对象是MATLAB中由ascii2fts或fints函数所创建的一种对象。行导向矩阵是指用行表示观测数据集的矩阵,若input是一个行导向矩阵,input的每一行都是一个单独的观测集。
以上调用格式中的’b’,‘g’,或’e’表示不同的数据平滑方法,其中’b’表示盒子法(box method),'g’表示高斯窗方法(gaussian window method),'e’表示指数法(exponential method)。
输入参数wsize是一个标量,用来指定各种数据平滑方法的窗宽,默认窗宽为5.
输入参数stdcv也是一个标量,用来指定高斯窗方法的标准差,默认值为0.65
【例】现有上海股市日开盘价、最高价、最低价、收盘价、收益率等数据,时间跨度为2005年1月4日至2007年4月3日,共510组数据。完整数据保存在文件examp03_02.xls中,试调用smoothts函数对日收盘价数据进行平滑处理。

%--------------------------------------------------------------------------
%              调用smoothts函数对金融时间序列数据进行平滑处理
%--------------------------------------------------------------------------%*********************读取金融时间序列数据,绘制波形图************************
x = xlsread('examp03_02.xls');               % 从文件examp03_02.xls中读取数据
price = x(:,4)';                                  % 提取矩阵x的第4列数据,即收盘价数据
figure;                                         % 新建一个图形窗口
plot(price,'k','LineWidth',2);                  % 绘制日收盘价曲线图,黑色实线,线宽为2
xlabel('观测序号'); ylabel('上海股市日收盘价');     % 为X轴和Y轴加标签%*****************利用盒子法对数据进行平滑处理,绘制平滑波形图****************
output1 = smoothts(price,'b',30);                % 用盒子法平滑数据,窗宽为30
output2 = smoothts(price,'b',100);           % 用盒子法平滑数据,窗宽为100
figure;                                         % 新建一个图形窗口
plot(price,'.');                                  % 绘制日收盘价散点图
hold on
plot(output1,'k','LineWidth',2);                % 绘制平滑后曲线图,黑色实线,线宽为2
plot(output2,'k-.','LineWidth',2);              % 绘制平滑后曲线图,黑色点划线,线宽为2
xlabel('观测序号'); ylabel('Box method');       % 为X轴和Y轴加标签
% 为图形加标注框
legend('原始散点','平滑曲线(窗宽30)','平滑曲线(窗宽100)','location','northwest');%****************利用高斯窗方法对数据进行平滑处理,绘制平滑波形图**************
output3 = smoothts(price,'g',30);                % 窗宽为30,标准差为默认值0.65
output4 = smoothts(price,'g',100,100);       % 窗宽为100,标准差为100
figure;                                         % 新建一个图形窗口
plot(price,'.');                                  % 绘制日收盘价散点图
hold on
plot(output3,'k','LineWidth',2);                % 绘制平滑后曲线图,黑色实线,线宽为2
plot(output4,'k-.','LineWidth',2);              % 绘制平滑后曲线图,黑色点划线,线宽为2
xlabel('观测序号'); ylabel('Gaussian window method'); % 为X轴和Y轴加标签
legend('原始散点','平滑曲线(窗宽30,标准差0.65)',...'平滑曲线(窗宽100,标准差100)','location','northwest');%*****************利用指数法对数据进行平滑处理,绘制平滑波形图****************
output5 = smoothts(price,'e',30);                % 用指数法平滑数据,窗宽为30
output6 = smoothts(price,'e',100);           % 用指数法平滑数据,窗宽为100
figure;                                         % 新建一个图形窗口
plot(price,'.');                                  % 绘制日收盘价散点图
hold on
plot(output5,'k','LineWidth',2);                % 绘制平滑后曲线图,黑色实线,线宽为2
plot(output6,'k-.','LineWidth',2);              % 绘制平滑后曲线图,黑色点划线,线宽为2
xlabel('观测序号'); ylabel('Exponential method'); % 为X轴和Y轴加标签
legend('原始散点','平滑曲线(窗宽30)','平滑曲线(窗宽100)','location','northwest');

原始收盘价曲线图:

平滑后曲线图(box method):

平滑后曲线图(gaussian window method):

平滑后曲线图(exponential method):

总的来说,在数据的中端,3种方法的平滑效果都比较好,并且随着窗宽的增大,平滑后的曲线的光滑性也在增强,但光滑性增强的同时也造成了失真。

数据的预处理——平滑处理相关推荐

  1. 第四章 数据的预处理与特征构建(续)

    申请评分卡模型 数据的预处理与特征构建(续) 课程简介:逻辑回归模型的特征需要是数值型,因此类别型变量不能直接放入模型中去,需要对其进行编码.此外,为了获取评分模型的稳定性,建模时需要对数值型特征做分 ...

  2. 机器学习中,对于数据的预处理是否是测试集和训练集一起进行?

    转载自:https://www.zhihu.com/question/312639136 机器学习中,对于数据的预处理是否是测试集和训练集一起进行? 最近在尝试训练和应用模型,遇上一个问题,就是针对数 ...

  3. Python数据处理工具 ——Pandas(数据的预处理)

    0.前言 本文将介绍强大的数据处理模块Pandas,该模块可以帮助数据分析师轻松地解决数据的预处理问题,如数据类型的转换.缺失值的处理.描述性统计分析.数据的汇总等. 通过本章内容的学习,读者将会掌握 ...

  4. matlab 数据白化,“matlab对Excel表格数据预处理“急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢!...

    急求FastICA 的源程序 matlab,包括数据的预处理(中心化和白化),注释详细点,谢谢! % function [Ahat2, shat, n_iteration Test] = nc_fas ...

  5. Amazon评论数据的预处理代码(Positive Negative)

    Amazon评论数据的预处理代码,用于情感分析,代码改自 https://github.com/PaddlePaddle/Paddle/tree/develop/demo/quick_start/da ...

  6. 数据的预处理与特征构建(申请评分卡模型)

    数据的预处理工作可以有效处理缺失值与异常值,从而增强模型的稳定性: 而特征构建工作则可以将信息从字段中加以提炼,形成有业务含义的优异特征 评分卡使用策略: 1.进件量较大,规则无法满足更细的切分需要: ...

  7. R 语言实现股票数据的预处理及分析

    基于 R 语言的股票数据分析 一.实验介绍 1.1 实验内容 本实验是以股票数据作为分析背景,股票数据如何从雅虎财经板块上获取,观察股票每日价格和成交量数据开始,接着计算某一支股票数据中比较重要的日度 ...

  8. 中对缺失数据的预处理_数据预处理也有套路的

    数据挖掘的核心是什么?这个的答案是算法,应该没什么疑问.那数据挖掘的基石又是什么呢?那就是今天我们要来说的数据预处理. 什么是数据预处理? 数据科学家们一直想为数据预处理赋予一个定义.其实简单地说,数 ...

  9. 类别型数据的预处理方法

    在机器学习过程中,我们往往需要对数据进行预处理.根据数据的取值情况,我们可以把数据总体分为两大类:类别型数据和数值型数据. 对于数值性变量,通常不需要对其进行编码处理.而如何处理类别型数据是一个难题. ...

  10. Polyworks V10.1使用教程:一些对扫描数据的预处理操作

    目录 写此文的初衷 本文写作目标 对txt格式的点云进行手动裁剪(滤波) 将.pf格式的扫描数据转为txt等常见格式 参考资料 写此文的初衷 2019.12.27:

最新文章

  1. TensorFlow实战笔记(17)---TFlearn
  2. javascript 运算+
  3. CentOS下创建配置RAID1
  4. DBeaverEE7.3.0安装教程
  5. iphone储存空间系统怎么清理_iPhone储存空间里其他占了几十GB,怎样彻底删除它?...
  6. 在计算机组成原理中x,计算机组成原理xu2.ppt
  7. 让Fiddler能够检测到localhost的http数据
  8. 同一路由器下两台电脑ping不通_复杂网络环境下路由器配置问题导致业务故障处理案例分享...
  9. 从M个数中随机等可能的取出N个的问题
  10. 查看Cglib生成的Class(字节码)文件
  11. 24点游戏(C++)
  12. 实战SpringBoot Admin
  13. 佛说:前世的五百次回眸,才换来今生的一次擦肩而过
  14. linux xsh加密传输,WBB - 解决Xshell迁移/同步xsh文件时,ssh秘钥密码/密码丢失问题...
  15. Spark性能优化之-开发调优
  16. Windows下使用IDEAS对cala文件打jar包
  17. java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法
  18. 首届金融行业SD-WAN的应用与实践研讨会上海站
  19. 【开源推荐】XMM Go语言环境中完全自主实现的第三方内存管理库
  20. 重磅 | 推荐一款技术人必备的写作神器 (支持多平台博客群发)

热门文章

  1. 最新中国数据中心排行榜
  2. 附件在线预览控件实现的市场调研
  3. matlab一键计算平均值与标准偏差
  4. 如何快速的入门单片机?单片机自学教程有哪些?
  5. 世界第一黑客:凯文.米特尼克
  6. Exploring Architectural Ingredients of Adversarially Robust Deep Neural Networks
  7. Spring boot 集成极光推送
  8. 单片机PWM舵机控制原理
  9. Gradle教程——(二)Gradle介绍
  10. Oracle锁表解决方法