时间序列中的6大类10种异常值处理方法(从根源上提高预测精度)

数据处理之异常值处理 异常值是指那些在数据集中存在的不合理的值,需要注意的是,不合理的值是偏离正常范围的值,不是错误值。比如人的身高为-1m,人的体重为1吨等,都属于异常值的范围。虽然异常值不常出现,但是又会对实际项目分析有影响,造成结果的偏差,所以在数据挖掘的过程中不能不重视。 异常值出现的原因 数据集中的异常值可能是由于传感器故障、人工录入错误或异常事件导致。如果忽视这些异常值,在某些建模场景下就会导致结论的错误(如线性回归模型、K均值聚类等),所以在数据的探索过程中,有必要识别出这些异常值并处理好它们。 异常值检测 简单统 阅读详情
AI摘要

本文系统梳理了时间序列中6大类10种异常值处理方法:删除法、替换法(平均值/中位数/众数/移动平滑)、变换法(Box-Cox/对数)、分箱法、机器学习模型法及基于规则的方法。重点分析各方法适用场景、实现原理与效果对比,并以ETTh电力负荷数据集为实例验证其对预测精度(如MAE)的提升作用,强调需结合数据分布特性与业务逻辑选择合适策略。

一、本文介绍

本文介绍的内容是在时间序列中异常值处理的方法,当我进行时间序列分析建模收集数据的过程中,往往都存在着一些特数据情况导致数据中存在着一些异常值,这些异常值往往会导致模型识别到不正常的模式从而无法准确的预测, (我试验过一个数据集清楚之后MAE的精度甚至能提升0.1左右),所以对于异常值的检测和处理对于时间序列来说是十分重要的,本篇文章需要配合我的另一篇文章配合阅读,另一篇文章介绍了如何进行异常值检测,所以本文篇文章下面来介绍当我们检测出异常值之后如何进行异常值处理。

前文回顾:时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例

目录

一、本文介绍

 二、异常值处理的方法

三、数据集介绍 

四、异常值处理

4.1 删除法

4.2 替换法 

4.2.1 平均值替换

4.2.2 中位数替换

4.2.3 众数替换

4.2.4 移动平滑替换

4.3 变换法

4.3.1 Box-Cox变化

4.3.2 对数变化

4.4 分箱法 

4.5 使用机器学习模型 

4.6 基于规则的方法 

五、全文总结


 二、异常值处理的方法

处理异常值,主要有以下几种方法:

  1. 删除法:直接删除含有异常值的数据。这种方法简单直接,但可能会丢失其他有用信息。

  2. 替换法:

    • 平均值替换:用整个数据集的平均值替换异常值。
    • 中位数替换:用中位数来替换异常值,尤其适用于数据不对称分布的情况。
    • 众数替换:对于分类数据,可以使用众数来替换异常值。
    • 平滑窗口替换:用异常值附近的平均值替换,需要设定一个窗口大小
  3. 变换法:

    • 对数变换:适用于右偏数据,可以减少数据的偏斜。
    • Box-Cox变换:一种通用的转换方法,可以处理各种类型的偏态分布。
  4. 分箱法:将数据分成几个区间(箱子),然后用箱子的边界值或中值来替换异常值。

  5. 使用机器学习模型:通过构建模型预测异常值并替换。这种方法通常在数据量较大且复杂时使用。

  6. 基于规则的方法:根据领域知识或特定规则来确定和处理异常值。

总结:选择哪种方法取决于异常值的性质和分析的目标。在某些情况下,结合使用多种方法可能会更有效。例如,可以先通过替换或修正方法处理异常值,然后使用变换或鲁棒性较强的模型进行分析。重要的是要理解异常值的来源和它们对分析结果可能产生的影响,从而做出恰当的处理。

三、数据集介绍 

我们本文用到的数据集是官方的ETTh1.csv ,该数据集是一个用于时间序列预测的电力负荷数据集,它是 ETTh 数据集系列中的一个。ETTh 数据集系列通常用于测试和评估时间序列预测模型。以下是 ETTh1.csv 数据集的一些内容:

数据内容:该数据集通常包含有关电力系统的多种变量,如电力负荷、天气情况等。这些变量可以用于预测未来的电力需求或价格。

时间范围和分辨率:数据通常按小时或天记录,涵盖了数月或数年的时间跨度。具体的时间范围和分辨率可能会根据数据集的版本而异。 

以下是该数据集的部分截图->

​

四、异常值处理

4.1 删除法

删除法:直接删除含有异常值的数据。这种方法简单直接,但可能会丢失其他有用信息。

推荐指数:⭐

import pandas as pd
from scipy.stats import zscore
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Filter out rows where the Z-Score is greater than 2
outliers_removed = data[data['OT_ZScore'].abs() <= 2]

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the cleaned data in the second subplot
axes[1].plot(outliers_removed['OT'].reset_index(drop=True), label='Data After Removing Outliers', color='green', alpha=0.7)
axes[1].set_title('Cleaned "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

可以明显的看到当我们使用将异常值删除之后我们的数据范围从(40,-5)来到了(30,-5)数据范围变得更窄,起到了一定数据平缓的作用,让数据的波动性变小从而提高模型的预测精度(当然在实际中及其不推荐使用这种方法,因为这会破坏数据的周期性)。

4.2 替换法 

4.2.1 平均值替换

平均值替换:用整个数据集的平均值替换异常值。

推荐指数:⭐⭐⭐

import pandas as pd
from scipy.stats import zscore
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Filter out rows where the Z-Score is greater than 2
outliers_removed = data[data['OT_ZScore'].abs() <= 2]

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the cleaned data in the second subplot
axes[1].plot(outliers_removed['OT'].reset_index(drop=True), label='Mean Value Replacement', color='green', alpha=0.7)
axes[1].set_title('Cleaned "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

可以看到这种方法的效果和上面的删除差多,在实际使用中平均值使用替换可以算做一种保守的方法。 

4.2.2 中位数替换

中位数替换:用中位数来替换异常值,尤其适用于数据不对称分布的情况。

推荐指数:⭐⭐⭐⭐

import pandas as pd
from scipy.stats import zscore
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Filter out rows where the Z-Score is greater than 2
outliers_removed = data[data['OT_ZScore'].abs() <= 2]

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the cleaned data in the second subplot
axes[1].plot(outliers_removed['OT'].reset_index(drop=True), label='Median Value Replacement', color='green', alpha=0.7)
axes[1].set_title('Cleaned "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

大家由这两张图片可以看出替换法的效果都差不多。 

4.2.3 众数替换

众数替换:对于分类数据,可以使用众数来替换异常值。

推荐指数:⭐⭐⭐⭐

import pandas as pd
from scipy.stats import zscore
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Filter out rows where the Z-Score is greater than 2
outliers_removed = data[data['OT_ZScore'].abs() <= 2]

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the cleaned data in the second subplot
axes[1].plot(outliers_removed['OT'].reset_index(drop=True), label='Mode Value Replacement', color='green', alpha=0.7)
axes[1].set_title('Cleaned "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

4.2.4 移动平滑替换

移动平滑替换:用异常值附近的平均值替换,需要设定一个窗口大小

推荐指数:⭐⭐⭐⭐⭐

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import zscore

# Load the data
file_path = 'your_file_path_here.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Setting a default window size for rolling mean
window_size = 5

# Calculate the rolling mean
rolling_mean = data['OT'].rolling(window=window_size, center=True).mean()

# Replace outliers (Z-Score > 2) with the rolling mean
data['OT_RollingMean'] = data.apply(lambda row: rolling_mean[row.name] if abs(row['OT_ZScore']) > 2 else row['OT'], axis=1)

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the data after replacing outliers with rolling mean in the second subplot
axes[1].plot(data['OT_RollingMean'], label='Data After Rolling Mean Replacement', color='green', alpha=0.7)
axes[1].set_title('Data After Rolling Mean Replacement of Outliers')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

4.3 变换法

4.3.1 Box-Cox变化

Box-Cox变换:一种通用的转换方法,可以处理各种类型的偏态分布。

推荐指数:⭐⭐⭐

大家再用这种方法的时候需要注意数据中不能包含负值

import pandas as pd
from scipy.stats import zscore, boxcox
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Filter out rows where the Z-Score is greater than 2
outliers_removed = data[data['OT_ZScore'].abs() <= 2]

# Applying Box-Cox transformation
data['OT_BoxCox'], _ = boxcox(data['OT'])

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the Box-Cox transformed data in the second subplot
axes[1].plot(data['OT_BoxCox'], label='Box-Cox Transformed Data', color='green', alpha=0.7)
axes[1].set_title('Box-Cox Transformed "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('Transformed OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

4.3.2 对数变化

对数变换:适用于右偏数据,可以减少数据的偏斜。

推荐指数:⭐

这个方法同理也不能输入负数,同时这个方法在我们输入到模型之后,输出结果之后还要将结果转换回来,实际是不推荐大家使用的。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Load the data
file_path = 'ETTh1.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Replace values in 'OT' column that are less than 0 with the mean of the column
ot_mean = data['OT'].mean()
data['OT'] = data['OT'].apply(lambda x: ot_mean if x < 0 else x)

# Applying logarithmic transformation
data['OT_Log'] = np.log(data['OT'])

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the logarithmically transformed data in the second subplot
axes[1].plot(data['OT_Log'], label='Logarithmically Transformed Data', color='green', alpha=0.7)
axes[1].set_title('Logarithmically Transformed "OT" Data')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('Transformed OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

4.4 分箱法 

分箱法:将数据分成几个区间(箱子),然后用箱子的边界值或中值来替换异常值。

推荐指数:⭐⭐⭐

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import zscore

# Load the data
file_path = 'your_file_path_here.csv'  # Replace with your file path
data = pd.read_csv(file_path)

# Calculate Z-Scores for the 'OT' column
data['OT_ZScore'] = zscore(data['OT'])

# Performing equal-width binning
num_bins = 10
data['OT_Binned'] = pd.cut(data['OT'], bins=num_bins)

# Calculating the median of each bin
binned_median = data.groupby('OT_Binned')['OT'].median()

# Replacing outliers with the median of the corresponding bin
data['OT_Replaced'] = data['OT'].copy()  # Creating a copy of the 'OT' column for replacements
for bin_interval, median_value in binned_median.items():
    # Find indices of outliers in this bin
    indices = data[(data['OT_Binned'] == bin_interval) & (data['OT_ZScore'].abs() > 2)].index
    # Replace these outliers with the median value of the bin
    data.loc[indices, 'OT_Replaced'] = median_value

# Creating a figure with two subplots
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15, 6))

# Plotting the original data in the first subplot
axes[0].plot(data['OT'], label='Original Data', color='blue', alpha=0.7)
axes[0].set_title('Original "OT" Data')
axes[0].set_xlabel('Index')
axes[0].set_ylabel('OT Values')
axes[0].grid(True)

# Plotting the data after replacing outliers in the second subplot
axes[1].plot(data['OT_Replaced'], label='Data After Replacing Outliers', color='green', alpha=0.7)
axes[1].set_title('Data After Replacing Outliers with Bin Medians')
axes[1].set_xlabel('Index')
axes[1].set_ylabel('OT Values')
axes[1].grid(True)

# Adjusting layout and displaying the plot
plt.tight_layout()
plt.show()

4.5 使用机器学习模型 

这种方法暂时不给大家介绍了,因为这就是时间序列预测,通过预测值来替换这个值,所以想用这种方法可以看我专栏里的其它内容。 

推荐指数:⭐⭐

4.6 基于规则的方法 

这种方法就是需要你有特定的知识,当我们用异常值检测方法检测出异常值之后去手动修改文件,其实这种是最合理的但是需要费时。

推荐指数:⭐⭐⭐⭐

五、全文总结

到此本文已经全部讲解完成了,希望能够帮助到大家,在这里也给大家推荐一些我其它的博客的时间序列实战案例讲解,其中有数据分析的讲解就是我前面提到的如何设置参数的分析博客,最后希望大家订阅我的专栏,本专栏均分文章均分98,并且免费阅读。

专栏回顾->时间序列预测专栏——包含上百种时间序列模型带你从入门到精通时间序列预测

时间序列模型SCINet(代码解析) 基于因果神经网络改进的SCINet长时间序列预测模型,在公共数据集上表现仅次于Nlinear 阅读详情

相关推荐

时间序列预测中异常值检测的4大类8种核心方法与实践指南

在数据科学与机器学习领域,异常值检测是数据预处理和特征工程中的基础且关键的环节。其核心原理在于识别数据集中显著偏离主体模式的观测点,这些点可能源于数据采集错误、特殊事件或系统故障。有效的异常检测技术价值巨大,它能够提升后续建模的鲁棒性、提高预测精度,并有助于发现潜在的业务问题或机会。在时间序列分析、金融风控、工业物联网监控及网络安全等应用场景中,异常检测都是不可或缺的步骤。本文聚焦于时间序列预测任务,系统梳理了从经典的统计规则方法到前沿的机器学习模型在内的多种检测策略,其中,STL分解和孤立森林等方法因其对

weixin_30938149的博客 406

时间序列预测实战(二十五)PyTorch实现Seq2Seq进行多元和单元预测(附代码+数据集+完整解析)

本文给大家带来的时间序列模型是Seq2Seq,这个概念相信大家都不陌生了,网上的讲解已经满天飞了,但是本文给大家带来的是我在Seq2Seq思想上开发的一个模型和新的架构,架构前面的文章已经说过很多次了,其是专门为新手开发的,而且为了方便大家使用只定义了一个文件方便大家复制粘贴,架构功能包括:结果可视化、支持单元预测、多元预测、模型拟合效果检测、预测未知数据、以及滚动长期预测功能。Seq2Seq模型是一种处理序列数据的深度学习模型,广泛用于机器翻译、语音识别和文本摘要等任务(也能用于时间序列)。

Snu77的博客 9939

matlab实现时间序列进行短时交通预测

这些数据包含了各个时间段(如每分钟、每小时)的交通流量信息,以及可能影响交通流量的其他因素,如天气、路况、节假日等。需要注意的是,短时交通预测受到多种因素的影响,包括交通流量的随机性、道路状况的实时变化、天气状况的不确定性等。%-------------------预测趋势并返回结果----------------%------------------没有去跳跃点前计算均方差---------------%-------------------去掉跳跃点---------------------

2401_82997545的博客 2198

【ICLR 2023】时间序列预测实战Crossformer(附代码+数据集+详细讲解)

本篇文章给大家带来的实战讲解是Crossformer模型,其是一个针对多变量时间序列预测的新型深度学习模型,发表ICLR 2023上并且排名前5%,所以这个模型的质量还是能够有一定保证的(但是我用官方的代码真的是Bug一堆改的让人头大)。Bug多是很多但是其效果还是可圈可点的,Crossformer的主要思想是:通过维度-段式嵌入技术将时间序列数据转换为二维向量数组,同时使用两阶段注意力层来高效地捕获这两种依赖关系。Crossformer采用分层编码器-解码器结构,在不同层次上利用信息进行预测。

Snu77的博客 2万+

ETDataset:收集了电力变压器数据集以支持对长序列预测问题的进一步研究

电力变压器数据集(ETDataset) 在此Github存储库中,我们提供了一些可用于长序列时间序列问题的数据集。 所有数据集均已进行预处理,并存储为.csv文件。 该数据集的范围从2016/07至2018/07,我们将尽快更新至2019年。 数据集列表(更新中) ETT-small :2个站点的2个电力变压器的数据,包括负载,油温。 ETT-large :39个站点的39个电力变压器的数据,包括负载,油温。 ETT-full :在39个站点的69个变电站的数据,包括负载,油温,位置,气候,需求。 如果使用此数据集,请引用Informer @ AAAI2021 Best Paper Award : @inproceedings{haoyietal-informer-2021, author = {Haoyi Zhou and Sha

FNet模型实现滚动长期预测并可视化结果,定制化数据集进行预测

本博客将介绍一种新的时间序列预测模型——FNet它通过使用傅里叶变换代替自注意力机制,旨在解决传统Transformer模型中的效率问题。FNet模型通过简单的线性变换,包括非参数化的傅里叶变换,来“混合”输入令牌,从而实现了快速且高效的处理方式。这种创新的方法在保持了相对较高的准确性的同时,显著提高了训练速度,特别是在处理长序列数据时更显优势。FNet的工作原理,并通过一个实战案例展示如何实现基于FNet的可视化结果和滚动长期预测。预测类型->多元预测、单元预测、长期预测。适用对象->受硬件所限制的时候,FNet是一种基于Transformer编码器架构的模型,通过替换自注意力子层为简单的线性变换,特别是傅里叶变换,来加速处理过程。FNet架构中的每一层由一个傅里叶混合子层和一个前馈子层组成(下图中的白色框)。傅里叶子层应用2D离散傅里叶变换(DFT)到其输入,一维DFT沿序列维度和隐藏维度。总结:FNet相对于传统的Transformer的改进其实就一点就是将注意力机制替换为傅里叶变换,所以其精度并没有提升(我觉得反而有下降,但是论文内相等,但是从我的实验角度结果分析精度是有下降的

异常值处理

什么样的值是异常值? 简单来说,即在数据集中存在不合理的值,又称离群点。 我们举个例子,做客户分析,发现客户的年平均收入是80万美元。 但是,有两个客户的年收入是4美元和420万美元。 这两个客户的年收入明显不同于其他人,那这两个观察结果将被视为异常值。 什么会引起异常值呢? 每当我们遇到异常值时,处理这些异常值的理想方法就是找出引起这些异常值的原因。 处理它们的方法将取决于它们发生的原因, 异常值的原因可以分为两大类: 人为错误 自然错误 数据输入错误 人为错误(如数据收集,记录或输入过程中导致的错

平平淡淡,戒急用忍,一生学闭嘴。 5896

这个是做时序预测算法所涉及到的数据集,包括了 ECL.csv ETTh1.csv ETTh2.csv等数据集

ECL.csv ETTh1.csvETTh2.csv ETTm1.csv ETTm2.csv EXR.csv ILl.csv m4.csv stock.csv TRF.csv WTH.csv

D5-异常值处理方法(6大类10种)

异常值处理6大类10种方法全解析 本文系统梳理了异常值处理的6大类10种方法,涵盖从基础删除法到高级预测模型的应用场景,帮助数据从业者根据数据类型和业务需求选择最佳方案。 核心方法分类: 删除法:直接剔除错误明显的异常数据(如录入错误) 插值替换:包括线性插值、样条插值、前后填充三种子方法 平滑法:移动平均和指数加权平均两种时序数据处理技术 回归预测:利用变量相关性构建预测模型修正异常值 限制法:通过设定阈值截断极端值 分箱离散化:将连续数据转换为离散区间 选择建议: 时间序列数据优先考虑插值或平滑法 变量

ai12345678900008的博客 1349

异常值的类型及其处理方法

一本讲述异常值的分类及其相应处理方法的书籍,里面详细描述了异常值产生的原因和从不同角度解决的办法。

电力负荷与天气数据(负荷预测数据).csv

某地2012年到2015年的负荷数据,共106177条数据,采样频率15分钟1次。以及每日最高温度、最低温度、平均温度、相对湿度、降雨量等数据。已经整合在一起。可以直接拿来做负荷预测。

时间序列预测中的4大类8种异常值检测方法(从根源上提高预测精度)

本文给大家带来的是时间序列预测中异常值检测,在我们的数据当中有一些异常值(Outliers)是指在数据集中与其他数据点显著不同的数据点。它们可能是一些极端值,与数据集中的大多数数据呈现明显的差异。异常值可能由于测量误差、异常事件、数据收集错误、噪声或其他未知原因而出现。所以因为这些异常值的存在我们的模型不能够很好的识别我们数据的模式,所以我们通常在训练之前都需要处理这些异常值点,所以就涉及到了本文的内容->异常值检测。本文的内容大家可以配套我的专栏中的实战案例进行使用可以检验你的异常值处理是否有效,

Snu77的博客 1万+

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

使用卡尔曼滤波平滑时间序列,提高时序预测的准确率

在时间序列预测中,脏乱数据的存在会影响最终的预测结果。这是肯定的,尤其是在这个领域,因为时间依赖性在处理时间序列时起着至关重要的作用。 噪音或异常值必须按照特别的解决方案小心处理。在这种情况下,tsmoothie包可以帮助我们节省大量时间来准备用于分析的时间序列。Tsmoothie是一个用于时间序列平滑和离群值检测的python库,它可以以向量化的方式处理多个序列。它很有用,因为它可以提供我们需要的预处理步骤,如去噪或离群值去除,保留原始数据中的时间模式。 在这篇文章中,我们使用这些小工具来改进预测任务。.

deephub 1万+

机器学习模型系列:随机森林的原理和示例介绍

让我们总结一下与其他监督式机器学习模型相比,随机森林的优缺点。优点在许多真实数据集上已知能提供高度准确的模型。通过结合多个决策树的预测,可以捕捉数据集中的复杂交互和模式。通过自动选择相关特征,可以有效处理高维数据集。与单个决策树相比,不容易过拟合。自助采样和每个节点的随机特征选择有助于减少过拟合并改善泛化能力。可以处理包括数值和分类特征在内的异构数据类型。可以处理缺失值而不需要填充。提供特征重要性的度量。集成中的树可以并行训练,因为每个决策树可以独立构建。模型的泛化误差具有理论上的界限。

数智笔记 1万+

基于Simulink和Control System Toolbox的线控转向(Steer-by-Wire)系统设计

通过上述步骤,我们成功设计并实现了基于 Simulink 和 Control System Toolbox 的线控转向(Steer-by-Wire)系统。该系统能够接收来自方向盘的角度指令,经过控制器处理后,驱动转向执行器(如电动机),实现对车辆前轮转向角度的精确控制。通过虚拟场景仿真、硬件在环测试和实车测试,验证了系统的响应速度、控制精度、车辆稳定性和实时性能,并通过参数优化进一步提升了系统的性能。

MHD0815的博客 551

PyCaret时间序列预测:异常值检测与处理完全指南

PyCaret是一款开源的低代码机器学习库,它提供了简单高效的时间序列预测功能,其中异常值检测与处理是提升预测准确性的关键步骤。本文将详细介绍如何在PyCaret中进行时间序列异常值检测与处理,帮助你轻松应对数据中的异常情况。 ## 为什么时间序列异常值处理至关重要? 时间序列数据中常常存在异常值,这些异常值可能由测量误差、系统故障或突发事件引起。如果不加以处理,异常值会严重影响预测模型的准确

gitblog_01138的博客 868

openclaw本地模型对接

使用是官方推荐的一种集成方式,它可以简化配置过程。但由于您的系统环境和之前复杂的配置历史,我为您梳理了一个核心流程,并增加了关键的“事后检查”步骤,以确保能从根本上解决问题。

suny8的专栏 2463

时间序列预测中异常值检测的4大类8种方法与实践指南

在时间序列分析与预测领域,数据质量是决定模型精度的基石。异常值作为数据中的噪声或特殊事件记录,会严重扭曲模型对趋势、季节性和周期等核心模式的捕捉,导致预测结果偏离真实情况。其检测原理主要围绕识别偏离数据主体分布或模式的观测点,技术价值在于从源头提升数据的信噪比,为后续建模提供稳定、干净的输入,从而直接提升预测模型的稳健性与准确性。应用场景广泛,涵盖电力负荷预测、金融风控、设备故障预警、销售预测等多个需要对时序数据进行建模的领域。本文聚焦于时间序列预测中的异常值处理,系统梳理了基于统计分布、距离与密度、预测模

weixin_34194087的博客 374

90. 将 SAP ABAP 内表内容本地导出成 Excel 文件

这里文件扩展名为 csv,全称是 Comma-Separated Values,意思是这种类型的文件内容,由逗号分隔。除了 ASC 之外,另一个可用的选项是 BIN,适用于 PDF,EXE 等二进制文件的导出。支持海量的输入和输出参数,我们这个简单的本地导出场景里,大部分参数都用不上。这个分隔符的添加逻辑,编写在上图红色高亮矩形框内,使用的语法是。本教程有学习者向我提问,询问如何将 ABAP 某某函数的某某输出参数的值,导出成本地 Excel 文件。把这个内表的内容,下载到本地,以本地文件的方式保存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1743

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 413

时间序列数据预处理

时间序列数据是指按照时间顺序排列的一系列数据点或观测值,通常用于描述某个变量随时间的变化情况。例如,股价、气温、人口数量等都可以被视为时间序列数据。时间序列数据的预处理是进行时间序列分析的重要步骤。

qq_31807039的博客 6551

3、图像中文字信息提取技术全解析

本文全面解析了图像中文字信息提取(Text Information Extraction,TIE)的技术原理、挑战及应用领域。详细介绍了图像中三种主要文字形式:场景文字、字幕文字和文档文字的特点及提取难点。系统阐述了TIE技术的主要流程步骤,包括文字检测、定位、提取与增强、识别等关键阶段,并对主流技术方法进行了分类比较,包括基于连通组件、边缘、纹理等方法的优缺点分析。文章还介绍了多种其他提取技术,如二值化方法、混合方法、基于梯度的方法等,并提出了一种基于立体帧的新型场景文字提取方法,通过实验验证了该方法在召

ll5678的博客 119

时间序列预测中异常值检测:4大类8种方法实战解析与选型指南

在数据分析和机器学习领域,异常值检测是数据预处理的关键环节,其核心原理在于识别数据中显著偏离主体模式的观测点。从技术价值看,有效的异常检测能提升模型鲁棒性、保障分析结论可靠性,广泛应用于金融风控、工业物联网、运维监控等场景。本文聚焦时间序列这一特定数据结构,深入剖析基于统计分布、距离密度、预测模型及分解变换的四大类方法,并结合Z-Score、LOF、LSTM等热词,详解其适用场景与实战技巧,为构建高精度预测模型扫清数据障碍。

weixin_34408717的博客 404

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 150

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

15种时间序列预测方法总结(包含多种方法代码实现)

向AI转型的程序员都关注了这个号????????????在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(AR)、状态空间模型、支持向量机(SVM)和随机森林(RF)等。我们还会讨论这些方法在单元预测和多元...

datayx的文章 3894

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)
下一篇: 时间序列预测建模的完整流程以及数据分析(新手科研必备)
Snu77
Snu77 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 11万+粉丝 934原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值