尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
传感数据分析之小波滤波:原理、实现与避坑指南
简介面向物联网与嵌入式领域的数据分析开发者这份Python小波滤波实战资源聚焦一维传感信号的去噪与特征提取系统阐述小波分析在多尺度时频分析上的优势尤其适合统计特性随时间变化的非平稳信号处理。压缩包共5个文件以Python脚本为核心另附说明文档、运行环境依赖清单和滤波效果示例图包体仅118KB结构简洁便于速查。目前已有142人学习适合正在入门pywt小波库、或需要为传感器数据降噪的中初级技术人员。配套代码完整演示了小波基选择如db4、Donoho-Johnstone最优阈值计算、软硬阈值策略与逆变换重构等关键环节运行示例可直观对比去噪前后波形差异帮助读者理解参数调整对结果的影响并快速迁移到实际传感数据项目中提升数据分析准确性与可靠性。1. 传感数据分析里的小波滤波为什么移动平均救不了你的信号做传感数据分析的人多半都遇到过这种尴尬传感器采回来的振动、压力或加速度信号噪声大得离谱但你又不能无脑平滑——因为真正有价值的特征往往是那些突变、尖峰和短时冲击。移动平均和中值滤波这类经典手段在平稳信号上能用一旦遇到非平稳信号要么把尖峰一并抹平要么噪声去不掉。小波滤波走的是另一条路它把信号拆成不同尺度先识别哪些是噪声、哪些是特征再选择性滤除。这篇笔记就围绕“传感数据分析-小波滤波”这个方向讲清楚原理、参数怎么配、代码怎么写、坑在哪让新手能照做熟手能调参。我从实际处理振动传感器数据说起采样率 20 kHz信号里既有工频干扰又有随机白噪声还夹杂着轴承故障的周期性冲击。用 50 Hz 低通滤波冲击特征完整没了。用小波滤波分解 5 层把高频层收缩一下再重构冲击还在噪声明显降下来。这就是小波滤波在传感数据分析里的价值时频域同时局部化能区分“突发特征”和“背景噪声”。这篇文章适合手里有传感器数据、想在不丢失特征的前提下做降噪的工程师和技术人员。下面从原理、实现、避坑到进阶按我自己的落地路径展开。2. 小波滤波的原理与选型先明白它在怎么干活再调参数2.1 傅里叶、短时傅里叶与连续小波为什么傅里叶不适合突变信号传感数据的噪声处理常规思路是傅里叶变换。傅里叶变换把信号从时域搬到频域正则信号的频率成分一目了然。但它有个致命短板时间信息被丢光了。你看一个频谱图能知道信号里有 100 Hz 和 500 Hz 成分但不知道 100 Hz 是始终存在还是只在第 2 秒出现。平稳信号无所谓传感器数据恰恰不平稳——轴承的冲击、管道的压力脉动、陀螺仪的姿态变化全是瞬态事件。短时傅里叶变换解决了一半问题加窗后再做傅里叶把时间切成小段。但窗口长度是固定的窗口短频率分辨率差窗口长时间分辨率差。对于尺度跨很大的传感信号比如既有持续 0.1 毫秒的冲击又有持续几秒的趋势漂移固定窗口的短时傅里叶很难兼顾两端。小波变换的思路不同。它用一组可伸缩平移的小波基函数去匹配信号低频时用长时窗、窄带宽高频时用短时窗、宽带宽。这一下就贴合了传感数据的本质低频成分往往持续时间长高频成分往往持续时间短。小波滤波用于传感数据分析的优势本质就是它能在时频平面上做非均匀切割把噪声和特征分到不同格子。Mallat 提出的快速算法让小波变换的计算复杂度降到 O(n)这才让它在嵌入式设备和批量数据处理里真正可用。2.2 小波滤波的三步流程分解、阈值、重构小波滤波在离散域的实现流程非常固定三步走分解阈值重构。离散小波变换用一组高通和低通滤波器把信号逐级拆分。第一级得到低频近似分量 cA1 和高频细节分量 cD1。低频分量还可以继续分解得到 cA2 和 cD2以此类推。这就构成了金字塔结构。在多分辨率分析里分解的意义在于把信号的能量按尺度摊开。噪声通常是高频细节在各层细节分量里均匀分布有用特征如果是突变会集中出现在某几层的某些位置上幅值相对较大。那滤波的做法就很自然了保留低频近似分量对高频细节分量施加阈值处理——小于阈值的系数视为噪声置零或收缩大于阈值的大系数保留。最后用处理后的小波系数反向重构成干净的信号。这里关键的操作对象是小波系数。阈值处理有个概念要区分开硬阈值是把系数绝对值小于阈值的直接置零大于的保持原样软阈值是大于阈值的系数向零方向收缩一个阈值量。硬阈值保留的细节更锐利但重构信号容易在阈值附近出现不连续点软阈值平滑但幅值被压缩突变特征会略微变钝。做传感器冲击检测时我一般先试硬阈值做常规降噪看波形平滑度就用软阈值。分解层数的意义在于层数越多最低频部分越接近信号的大趋势噪声被分配到更多细节层上逐个处理。但层数太多重构时小波基的边界效应会被放大后面会专门讲这个坑。2.3 小波基与阈值规则选型一张参数决策表和选型步骤选小波基是传感数据小波滤波里最像“玄学”的一环但其实有规律可循。小波基家族众多dbDaubechies、symSymlets、coifCoiflets、bior双正交是常用选项。db 是标准正交基支撑长度短计算快适合实时处理sym 是 db 的改进版更接近对称相位失真小coif 比 sym 更对称适合要求波形保真的场景。参数推荐候选适用场景注意事项小波基db4/db6、sym8、coif5振动冲击检测、压力脉动、生物电信号db2 太尖锐db20 计算量大且边界效应明显分解层数3~5 层采样率 1k~20kHz 的传感器数据上限不超过 floor(log2(N))否则重构失真阈值规则rigrsure、heursure、sqtwolog、minimaxi噪声强度未知时先用 heursuresqtwolog 在低信噪比下容易把特征一起滤掉软/硬阈值soft / hard软阈值平滑硬阈值保细节检测冲击用 hard平滑均方根值用 soft实际选型时我按下面这个顺序走而不是凭感觉试。第一步看信号形态。采集一段无故障工况的传感器数据如果噪声是白噪声主导用 sym8 就很好如果噪声里带明显的周期性窄带干扰比如工频先用 notch 滤掉再小波比硬靠小波长层数解决更划算。第二步定分解层数。按公式 level_max floor(log2(len(signal))) 算出上限取上限减一到两层作为默认再对比不同层数的重构均方误差。第三步选阈值规则。用 heursure 或 rigrsure 自适应的方式先跑一遍看残差里的高频能量是否接近噪声水平如果残差里还有明显结构说明阈值设高了退到 sqtwolog。第四步小波基的最终选择交给验证集把已知冲击特征的数据段放进测试集看哪一个基重构后冲击幅值损失最小。注意小波滤波的参数不是一次定死的。同一个设备在不同工况下噪声能量会变阈值必须跟着变。我把阈值做成传感器数据的一个自动标定环节每次换工况都重新算一遍噪声标准差而不是把第一次调好的参数焊死在代码里。3. 用 PyWavelets 跑通一维振动信号滤波从含噪信号到干净曲线3.1 最小复现代码生成含噪冲击信号并完成小波滤波PyWaveletspywt是 Python 生态里最好上手的小波工具库。下面这段代码是完整的落地路径可以直接替换成你自己的数据。我用合成信号模拟振动传感器输出一个低频正弦波叠加周期性冲击再加上高斯白噪声。import numpy as np import pywt import matplotlib.pyplot as plt # 1. 构造模拟传感信号低频趋势 周期性冲击 高斯白噪声 fs 1000 # 采样率 1 kHz t np.linspace(0, 1, fs, endpointFalse) # 基础振动10 Hz 正弦 50 Hz 谐波 base 1.5 * np.sin(2 * np.pi * 10 * t) 0.6 * np.sin(2 * np.pi * 50 * t) # 冲击成分每 0.2 秒一个衰减振荡 impulse np.zeros_like(t) for start in range(0, fs, 200): idx np.arange(40) impulse[start:start 40] 3.0 * np.exp(-idx / 8) * np.sin(2 * np.pi * 100 * idx / fs) # 高斯白噪声标准差 0.4 rng np.random.default_rng(42) noise rng.normal(0, 0.4, sizelen(t)) signal base impulse noise # 2. 小波滤波核心分解 - 阈值 - 重构 wavelet sym8 # 小波基选择 level 5 # 分解层数 mode symmetric # 边界延拓模式 # 对信号做 level 层离散小波分解返回系数数组列表 coeffs pywt.wavedec(signal, wavelet, modemode, levellevel) # 估算噪声标准差用第一层细节系数的中位绝对偏差 sigma np.median(np.abs(coeffs[-level])) / 0.6745 # 按全局阈值 sqtwolog 计算阈值 threshold sigma * np.sqrt(2 * np.log(len(signal))) # 只对细节分量做软阈值处理近似分量最低频保持不变 coeffs_thresholded [coeffs[0]] for c in coeffs[1:]: coeffs_thresholded.append(pywt.threshold(c, threshold, modesoft)) # 重构降噪后的信号 signal_filtered pywt.waverec(coeffs_thresholded, wavelet, modemode) # 3. 对比滤波前后的时域波形 plt.figure(figsize(10, 6)) plt.subplot(3, 1, 1) plt.plot(t, signal, labelraw) plt.legend() plt.subplot(3, 1, 2) plt.plot(t, signal_filtered, labelfiltered) plt.legend() plt.subplot(3, 1, 3) plt.plot(t, base impulse, labelclean target) plt.legend() plt.tight_layout() plt.show()代码逻辑上分三段。第一段生成模拟传感数据base 是设备本身的正常振动impulse 模拟故障冲击noise 模拟电路和环境的随机噪声。第二段是滤波核心pywt.wavedec把信号分解成多层小波系数coeffs[0]是最后一层的近似分量后面的是各层细节分量。噪声标准差用第一层细节系数的 MAD 估算这个方法是 Donoho 论文里的经典做法比直接用标准差稳——因为 MAD 对冲击特征不敏感不会被真实信号的大系数带偏。阈值计算的sqrt(2 * log(N))是全局阈值公式N 是信号长度。信号越长阈值越大因为长信号里噪声极值会更大。第三段重构后你直接对比滤波前后的波形能直观看到冲击保持在原位置幅度衰减不多而背景噪声被压下去。参数调整时留意这些点。wavelet换db8或coif5对同一信号跑完对比冲击幅值损失。level减到 3 或 4噪声会残余多一些但边界失真小加到 6、7趋势项更平滑但重构信号边缘可能出现波浪。mode换成periodization可以减少边界系数数量但信号长度要被分解层数整除。3.2 把滤波逻辑封装成可复用函数关键参数兜底设计用脚本跑通一次只是开始。工程上要处理几十个传感器通道、不同采样率和不同工况我会把滤波过程封成一个函数参数全部露出并加一些防呆逻辑。import numpy as np import pywt def wavelet_denoise(signal, fs, waveletsym8, levelNone, modesymmetric, threshold_scaleone, threshold_modesoft): 一维传感信号小波滤波 参数 signal : 1D numpy 数组原始传感数据 fs : 采样率 Hz用于自动推算分解层数 wavelet: 小波基字符串可选 db4,db8,sym8,coif5 level : 分解层数None 时按 fs 自动推算 mode : 边界延拓建议 symmetric 或 periodization threshold_scale: one 按第一层细节估噪per_level 逐层估噪 threshold_mode : soft 或 hard n len(signal) max_level pywt.dwt_max_level(n, pywt.Wavelet(wavelet).dec_len) if level is None: # 经验值在最大可分解层数基础上减 1防止边界失真放大 level max(1, max_level - 1) else: # 用户指定的层数不能超过 pywt 允许的上限 level min(level, max_level) coeffs pywt.wavedec(signal, wavelet, modemode, levellevel) if threshold_scale one: # 全局估噪用第一层细节系数的 MAD sigma np.median(np.abs(coeffs[-1])) / 0.6745 thr sigma * np.sqrt(2 * np.log(n)) coeffs_processed [coeffs[0]] [ pywt.threshold(c, thr, modethreshold_mode) for c in coeffs[1:] ] else: # 逐层估噪每层独立算阈值适合非白噪声 coeffs_processed [coeffs[0]] for c in coeffs[1:]: sigma np.median(np.abs(c)) / 0.6745 thr sigma * np.sqrt(2 * np.log(n)) coeffs_processed.append(pywt.threshold(c, thr, modethreshold_mode)) signal_filtered pywt.waverec(coeffs_processed, wavelet, modemode) # 重构后长度可能和原信号差 1~2 个点截断对齐 if len(signal_filtered) n: signal_filtered signal_filtered[:n] else: signal_filtered np.pad(signal_filtered, (0, n - len(signal_filtered)), modeconstant) return signal_filtered这个函数有两点设计值得说明。第一dwt_max_level兜底。很多人手动指定 level8信号只有几百个点pywt 直接报错用dwt_max_level先算上限再在用户参数和上限之间取最小值这种错误直接就不会出现了。第二threshold_scale参数控制全局估噪还是逐层估噪。真实传感器噪声往往不是纯白噪声高频层的噪声能量和低频层不一样逐层估噪更稳妥代价是计算量翻倍。调用方式很简单filtered wavelet_denoise(accel_data, fs20000, waveletdb8, level5)。如果你的数据里有明显的低频漂移比如加速度计的零偏温漂建议先做一次去趋势再进小波滤波否则这个漂移会被当成信号的低频近似分量保留下来。3.3 处理真实传感数据的三个预处理步骤真实采集的传感器数据直接塞进小波滤波函数往往会得到看起来很干净、但不敢用的结果。我一般需要做三步预处理这一步很关键。第一步去均值。很多传感器存在直流量压力变送器输出 4~20mA 对应 0~满量程DAQ 采集后信号带一个非常大的直流偏置。这个小波分解时会把直流偏置几乎全放进最低频近似分量不影响滤波效果但会造成数值问题。直接用signal - np.mean(signal)处理掉。第二步检查坏点。无线传感器或工业现场电磁干扰可能导致毛刺、丢包产生的零值、还有削顶失真。小波滤波对孤立毛刺的处理能力有限因为毛刺在时间尺度上极其尖锐能量分散到所有层。所以遇到明显坏点先做线性插值或置为中值再进小波滤波而不是指望滤波去消毛刺。第三步确认采样率与关注频段。小波滤波是没有显式截止频率概念的。它对应的是一个隐含的频带划分第 1 层细节分量覆盖 fs/4 ~ fs/2第 2 层覆盖 fs/8 ~ fs/4以此类推。如果你想滤掉的噪声集中在某个频段可以按这个映射关系反推需要处理哪几层。比如 20 kHz 采样率下你要保留 500 Hz 以下的趋势成分那么第 1 层2500~5000 Hz到第 3 层625~1250 Hz都可以滤第 4 层以下看情况。知道这个映射你调层数时心里就有谱了。4. 小波滤波的 5 个常见坑与排查方法4.1 重构信号边缘出现明显波浪形失真现象滤波后的信号前后各几十个点出现低频波动看起来像信号整体起伏越靠近边缘越严重。原因离散小波变换默认的边界延拓假设信号在边界之外是某种延拓形态比如对称或反射但真实信号不会按这个规律延续分解层数越多边界需要“猜”的长度越长重构时误差就越明显。解决一是把边界延拓模式从symmetric换成periodization这种模式分解出的细节分量长度减小得快边界误差不扩散二是降低分解层数三是最直接的经验做法在滤波前给信号首尾各垫一段自己的翻转数据滤波后把垫的部分裁掉。4.2 真实冲击尖峰被当噪声滤掉了现象滤波以后波形非常平滑但那几个代表故障特征的冲击尖峰也没了幅值从 3.0 衰减到 0.5。原因全局阈值是按噪声标准差和信号长度的公式算的信噪比低时公式给出比较大的阈值冲击系数如果幅值分布和噪声接近会被一起置零。另一个原因是用了软阈值软阈值对所有保留系数做收缩冲击幅值也被压缩了。解决先改 hard 模式硬阈值不会压缩保留的系数。还不行就改用per_level逐层阈值策略每一层的阈值独立冲击特征所在的那一层如果能量大阈值自然会被压低冲击更容易保留下来。判断阈值是不是过量的方法看重构信号的残差residual raw - filtered如果残差里还能看到明显的周期性结构说明阈值把特征也滤掉了。4.3 滤波结果看起来不错但同一参数换一组数据就失效现象在测试数据集上调好的参数拿到新一段数据上跑输出明显变差。原因小波滤波的阈值本质上是统计估计依赖噪声的分布。两段数据可能来自不同工况或不同传感器噪声幅度不同、频带不同。解决把变压器开启自动标定。每次滤波前取一段不含有效特征的信号片段比如设备刚启动时的空转段用这段算噪声标准差的估值再套阈值公式。注意噪声标准差本身也随工况变化所以标定必须跟着场景走不能只在最初做一次。4.4 滤波器把低频趋势也一起削平了现象信号本身有缓慢上升的斜坡或热漂移滤波后的趋势被压缩波形整体变平。原因趋势成分在低频近似分量里保留原则上不会被阈值处理。但如果你选择的分解层数不够趋势成分和高频噪声会混在同一层细节分量里一起被阈值处理了。解决加大分解层数让趋势成分完整落入最低频近似分量。或者更直接地在滤波前用最小二乘去趋势把一阶线性或多项式拟合从信号里减去滤波后再加回来。4.5 批量处理大量数据时内存暴涨甚至卡死现象对几百个通道、每通道上百万个点的数据做离线处理时内存直接吃满脚本跑半宿没结果。原因wavedec会生成每层完整的系数数组层数越多内存开销越大。而且很多人习惯把整段数据读进来再滤波几十 GB 的压力数据全进内存无论用什么算法都会爆。解决一是把数据切块处理每块几秒到几十秒块之间要有重叠。切块时留意边界效应你可以做一个重叠 50% 的滑窗只保留中段结果两端裁掉。二是用单精度 float32 而不是 float64数据量减半。三是如果数据只是为了统计特征优先把数据降采样到满足频段需求的最低采样率比如你的分析频段上限是 1 kHz20 kHz 的采样率在小波滤波前降到 2 kHz计算量直接少一个数量级。5. 实时滤波的滑动窗口实现与滤波器验证从离线到流式落地处理传感数据很多时候跑完这一步就直接结束了。但在设备状态监测系统里信号是源源不断流进来的离线滤波没法用。一个小技巧是滑动窗口加重叠保留法我分享一个可以直接照着改的版本。滑动窗口的要点是窗口长度取 2 的幂因为离散小波变换对信号长度有要求。比如 fs1000 Hz窗口取 1024 个点约 1 秒数据。每次把窗口数据送入wavelet_denoise输出后只保留中间一段边缘部分丢弃。窗口每次滑动 256 个点重叠 768 点这样滤波后的信号在拼接处过渡平滑不会有明显的接缝。def streaming_wavelet_denoise(data_stream, fs, window_size1024, hop256, **kwargs): 流式小波滤波滑动窗口 只取中间有效段 参数 data_stream : 可迭代的数据源每次输出一批点 window_size : 窗口长度建议 2 的幂 hop : 窗口滑动步长 kwargs : 传给 wavelet_denoise 的参数 buffer [] filtered_chunks [] margin window_size // 4 # 每边丢弃 1/4保留中间 1/2 for chunk in data_stream: buffer.extend(chunk) while len(buffer) window_size: frame np.array(buffer[:window_size], dtypenp.float32) # 去均值避免直流分量干扰阈值估计 frame frame - np.mean(frame) clean wavelet_denoise(frame, fs, **kwargs) # 只保留中间段边缘失真丢弃 filtered_chunks.append(clean[margin:-margin]) buffer buffer[hop:] return np.concatenate(filtered_chunks)这个实现的取舍在于每帧都要重新算阈值。如果噪声变化很快这就是优势因为每一帧都按当前噪声水平调整如果噪声稳定就是浪费可以把阈值计算改成每 N 帧更新一次。实际用下来中间段保留 1/2 是个不错的折中既保证拼接处平滑又不会让计算量因为 overlap 太大而飙升。验证滤波器是否有效我惯例用两个手段。一是合成信号叠加已知噪声计算滤波前后的信噪比提升量SNR 提升量在 5~15 dB 说明滤波起到了应有效果。二是残差分析原始信号减滤波结果得到残差残差应该是接近白噪声的随机波动。如果残差里还能看到周期性成分说明滤掉了不该滤的特征如果残差标准差远小于你估算的噪声标准差说明滤波过度。把这两条自动化成测试脚本每改一次参数就过一遍。我现在的习惯是给每个滤波模型写一份“输入配置 输出统计”的 JSON 记录哪个通道用了什么小波基、分解了几层、阈值多大都存下来出了问题能反查。原始数据别覆盖滤波结果永远是派生数据这就是我入行以来踩了不知道多少次坑换来的习惯。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

开源PHP客服系统WeLive实战:部署、轮询机制与二次开发

开源PHP客服系统WeLive实战:部署、轮询机制与二次开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/13 1:26:40
算法竞赛树结构进阶:从LCA到树链剖分与虚树实战

算法竞赛树结构进阶:从LCA到树链剖分与虚树实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/13 1:26:40
蓝桥杯Python组备赛全攻略:题型拆解、高频考点与避坑指南

蓝桥杯Python组备赛全攻略:题型拆解、高频考点与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/13 1:21:40
MORE NEWS

更多资讯

📰

Dinic最大流算法详解:分层图、多路增广与当前弧优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

ReactDOMRoot源码解析:从createRoot到render的完整链路

做React源码分析&#xff0c;很多人一上来就啃scheduler调度器或者fiber架构&#xff0c;结果被lane、workLoop这些概念劝退。我自己的经验是&#xff0c;不如先从ReactDOMRoot入手——这是每个React应用真正的起点&#xff0c;你天天写的createRoot(...).render(<App/>)…

📰

MySQL学生选课系统源码实战:表结构设计与事务并发控制

简介&#xff1a;这份资源是面向高校计算机相关专业学生与毕业设计开发者的一套MySQL学生智能选课系统完整资料&#xff0c;包含源码、数据库与配套论文&#xff0c;适合作为课程设计、毕业设计或SSM框架练手项目。系统围绕学生、教师与课程之间的信息交互展开&#xff0c;重点…

📰

MySQL学生智能选课系统:数据库设计、事务锁与高并发避坑指南

简介&#xff1a;这份资源是面向高校计算机相关专业学生与毕业设计开发者的一套MySQL学生智能选课系统完整资料&#xff0c;包含源码、数据库与配套论文&#xff0c;适合作为课程设计、毕业设计或Java Web入门练手项目。系统围绕学生选课场景设计&#xff0c;覆盖课程浏览、教师…

📰

CPU指令执行五阶段硬件原理与流水线设计

1. 这不是普通笔记&#xff0c;是理解CPU如何“思考”的底层地图你有没有想过&#xff0c;当你敲下gcc hello.c&#xff0c;再运行./a.out&#xff0c;那一行行C代码究竟是怎么变成屏幕上跳出来的“Hello World”的&#xff1f;它没长腿&#xff0c;不会自己跑&#xff1b;它没…

📰

PCA-LSTM多变量时间序列预测:从高维特征压缩到时序建模实战

既然标题已经这么直白了&#xff0c;我也就不绕弯子。PCA-LSTM预测模型&#xff0c;说白了就是先让PCA把高维特征“挤一挤”&#xff0c;去掉冗余和噪声&#xff0c;只留下最能代表原始数据变化的主成分&#xff0c;然后再把这条压缩后的时间序列喂给LSTM去学长期依赖&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬