移动窗口方法

移动窗口方法是分批处理数据的方式,通常是为了从统计角度表示数据中的相邻点。移动平均值是一种常见的数据平滑技术,它沿着数据滑动窗口,同时计算每个窗口内点的均值。这可以帮助消除从一个数据点到下一个数据点的非显著变化。

例如,假设每分钟测量一次风速,持续约 3 小时。使用 movmean 函数和 5 分钟的窗口大小可去除高速阵风。

load windData.mat

mins = 1:length(speed);

window = 5;

meanspeed = movmean(speed,window);

plot(mins,speed,mins,meanspeed)

axis tight

legend('Measured Wind Speed','Average Wind Speed over 5 min Window','location','best')

xlabel('Time')

ylabel('Speed')

同样,您可以使用 movmedian 函数计算滑动窗口中的风速中位数。

medianspeed = movmedian(speed,window);

plot(mins,speed,mins,medianspeed)

axis tight

legend('Measured Wind Speed','Median Wind Speed over 5 min Window','location','best')

xlabel('Time')

ylabel('Speed')

并非所有数据都适合用移动窗口方法进行平滑处理。例如,创建插入了随机噪声的正弦信号。

t = 1:0.2:15;

A = sin(2*pi*t) + cos(2*pi*0.5*t);

Anoise = A + 0.5*rand(1,length(t));

plot(t,A,t,Anoise)

axis tight

legend('Original Data','Noisy Data','location','best')

使用移动均值和大小为 3 的窗口对含噪数据进行平滑处理。

window = 3;

Amean = movmean(Anoise,window);

plot(t,A,t,Amean)

axis tight

legend('Original Data','Moving Mean - Window Size 3')

移动均值方法可获得数据的大致形状,但不能非常准确地捕获波谷(局部最小值)。由于波谷点在每个窗口中两个较大的邻点之间,因此均值不是那些点的理想近似值。如果使窗口大小变大,均值将完全消除较短的波峰。对于这种类型的数据,您可能需要考虑其他平滑技术。

Amean = movmean(Anoise,5);

plot(t,A,t,Amean)

axis tight

legend('Original Data','Moving Mean - Window Size 5','location','best')

常见的平滑方法

smoothdata 函数提供几种平滑选项,如 Savitzky-Golay 方法,这是一种常用的信号处理平滑技术。默认情况下,smoothdata 根据数据为方法选择最佳估计窗口大小。

使用 Savitzky-Golay 方法可对含噪信号 Anoise 进行平滑处理,并输出它使用的窗口大小。与 movmean 相比,该方法可提供更好的波谷近似值。

[Asgolay,window] = smoothdata(Anoise,'sgolay');

plot(t,A,t,Asgolay)

axis tight

legend('Original Data','Savitzky-Golay','location','best')

window

window = 3

稳健的 Lowess 方法是另一种平滑方法,尤其适用于含噪数据还包含离群值的情形。在含噪数据中插入离群值,并使用稳健的 Lowess 方法对数据进行平滑处理,从而消除离群值。

Anoise(36) = 20;

Arlowess = smoothdata(Anoise,'rlowess',5);

plot(t,Anoise,t,Arlowess)

axis tight

legend('Noisy Data','Robust Lowess')

检测离群值

数据中的离群值可能使数据处理结果和其他计算量严重失真。例如,如果您尝试用移动平均值方法对包含离群值的数据进行平滑处理,则可能得到误导性的波峰或波谷。

Amedian = smoothdata(Anoise,'movmedian');

plot(t,Anoise,t,Amedian)

axis tight

legend('Noisy Data','Moving Median')

当检测到离群值时,isoutlier 函数返回逻辑值 1。验证 Anoise 中离群值的索引和值。

TF = isoutlier(Anoise);

ind = find(TF)

ind = 36

Aoutlier = Anoise(ind)

Aoutlier = 20

您可以使用 filloutliers 函数通过指定填充方法来替换数据中的离群值。例如,用紧挨 Anoise 中离群值右侧的邻点值填充该离群值。

Afill = filloutliers(Anoise,'next');

plot(t,Anoise,t,Afill)

axis tight

legend('Noisy Data with Outlier','Noisy Data with Filled Outlier')

非均匀数据

并非所有数据都由等间隔的点组成,这会影响数据处理的方法。创建一个 datetime 向量,其中包含 Airreg 中数据的不规则采样时间。time 向量表示了前 30 分钟内每分钟采集一次的样本和两天内每小时采集一次的样本。

t0 = datetime(2014,1,1,1,1,1);

timeminutes = sort(t0 + minutes(1:30));

timehours = t0 + hours(1:48);

time = [timeminutes timehours];

Airreg = rand(1,length(time));

plot(time,Airreg)

axis tight

默认情况下,smoothdata 按照等间距整数进行平滑处理,在本例中为 1,2,...,78。由于整数时间戳与 Airreg 中各点的采样不协调,前半小时的数据在平滑后仍然出现噪声。

Adefault = smoothdata(Airreg,'movmean',3);

plot(time,Airreg,time,Adefault)

axis tight

legend('Original Data','Smoothed Data with Default Sample Points')

MATLAB® 中的许多数据处理函数(包括 smoothdata、movmean 和 filloutliers)允许您提供样本点,从而确保相对于其采样单位和频率处理数据。要消除 Airreg 中前半小时数据的高频变化,请将 'SamplePoints' 选项和 time 中的时间戳结合使用。

Asamplepoints = smoothdata(Airreg,'movmean',hours(3),'SamplePoints',time);

plot(time,Airreg,time,Asamplepoints)

axis tight

legend('Original Data','Smoothed Data with Sample Points')

matlab离群值处理,数据平滑和离群值检测相关推荐

  1. matlab离群值算法_什么是离群值如何检测和删除它们对离群值敏感的算法

    matlab离群值算法 In statistics, an outlier is an observation point that is distant from other observation ...

  2. python 离群值_数据预处理初学者宝典:360° 掌握离群值识别

    全文共6023字,预计学习时长20分钟或更长 来源:Pexels 离群值监测和处理是数据预处理中最重要的环节之一.机器学习算法注重数据点的范围和分布,而数据离群值掩盖训练进程,导致训练时间加长.模型准 ...

  3. Matlab语句:rmoutliers(检测并删除数据中的离群值)

    结果 语法 B = rmoutliers(A) B = rmoutliers(A,method) B = rmoutliers(A,'percentiles',threshold) B = rmout ...

  4. 检测并替换数据中的离群值——filloutliers函数的MATLAB实现

    检测并替换数据中的离群值--filloutliers函数的MATLAB实现 该函数旨在查找A中的离群值并根据fillmethod替换它们. 例如filloutliers(A,'previous') 这 ...

  5. 机器学习数据预处理之离群值/异常值:标准差法

    机器学习数据预处理之离群值/异常值:标准差法 garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计. 简单来说,异常值是一个 ...

  6. R语言基于可视化进行多变量离群(Mulltivariate outliers)点检测识别:散点图可视化多变量离群点、模型平滑多变量异常检测、使用平行坐标图查看钻石数据集中的异常值

    R语言基于可视化进行多变量离群(Mulltivariate outliers)点检测识别:散点图可视化多变量离群点.模型平滑多变量异常检测.使用平行坐标图查看钻石数据集中的异常值 目录

  7. 机器学习数据预处理之离群值/异常值:图像对比法

    机器学习数据预处理之离群值/异常值:图像对比法 garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的估计. 简单来说,异常值是一 ...

  8. 机器学习数据预处理之离群值/异常值:箱图法(boxplot method)

    机器学习数据预处理之离群值/异常值:箱图法(boxplot method) garbage in,garbage out. 异常值是分析师和数据科学家常用的术语,因为它需要密切注意,否则可能导致错误的 ...

  9. 机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD)

    机器学习数据预处理之离群值/异常值:MAD法(绝对值差中位数法)+绝对中位差(Median Absolute Deviation,MAD) garbage in,garbage out. 异常值是分析 ...

最新文章

  1. ShutdownHook - java中优雅地停止服务
  2. Windows server下部署php环境
  3. HealthKit开发教程之HealthKit的辅助数据
  4. 面向对象的基本设计原则【转】
  5. 存在于实数域的微观粒子
  6. boost::error_info的用法测试程序
  7. go 异常捕获处理 panic defer recover
  8. 想跟着微软赛跑会累死你
  9. 详解停车位检测算法 Vision-Based Parking-Slot Detection: A DCNN-Based Approach and a Large-Scale Benchmark
  10. centos mysql 5.5.57_Centos MySQL 5.7安装、升级教程
  11. 四种launchMode启动方式
  12. python控制结构实验结果分析_实验1_Python语法及控制结构
  13. 今天给一份 2022 互联网就业指南。
  14. 客快物流大数据项目(二):物流项目详细介绍
  15. ADNI数据_PET——官方预处理
  16. 基于STM32的卧室智慧监测系统
  17. MySQL锁知识点复习,面试问到的概率超90%
  18. Vm linux虚拟机与本地宿主机互通
  19. 微信小程序 java校园跑腿服务平台uniapp
  20. IDEA插件系列(89):Copy/Paste Stack插件——复制/粘贴工具栈

热门文章

  1. 计算机系统软件与工具软件
  2. 常见License错误代码
  3. 2020阿里实习生校招笔试题
  4. iOS开发-iOS10新特性及开发者主要注意点
  5. 我来告诉你,那些博客中的gif动态图是怎么弄的?
  6. “左眼跳财,右眼跳灾”
  7. 一本程序员黑话进阶指南!拿走不谢!
  8. 常用又有趣的网站大合集
  9. nginx 实现备案域名的配置 + 跨域配置
  10. 机器人合肥乐博_乐博机器人编程——让机器人陪伴全国儿童成长