曲线分类-特征提取(二)

本文探讨了时间序列分析中的特征提取,包括时域特征如自相关系数、偏自相关系数、差分,以及季节性、趋势和残差的分解。此外,还介绍了赫斯特指数和熵作为衡量序列复杂性和长期记忆性的指标。通过这些方法,可以有效地理解和描述时间序列数据的模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时域特征

自相关系数与偏自相关系数

自相关(autocorrelation),指时序序列于其自身在不同时间点的互相关性.
离散数据的 l l 阶自相关系数定义为

a u t o c o r r e l a t i o n l = 1 ( n l ) σ 2 t = 1 n 1 ( X t μ ) ( X t + l μ )

n n 是时间序列 X i 的长度, σ2 σ 2 为方差, μ μ 为均值

自相关(autocorrelation)

为了更清楚查看自相关系数,这里选择滞后阶数为120。

    from statsmodels.graphics.tsaplots import plot_acf
    plot_acf(df_data['value'],lags=120)
    plt.show()

滞后数为120自相关系数

偏自相关(partial_autocorrelation),滞后k阶偏自相关系数是指在给定中间k-1个随机变量 xt1,xt2...xtk+1 x t − 1 , x t − 2 . . . x t − k + 1 的条件下,或者说在剔除了中间k-1个随机变量的干扰后, x

### 使用1D-CNN提取曲线特征的方法 1D-CNN(一维卷积神经网络)是一种专门用于处理一维数据(如时间序列、信号等)的深度学习模型。通过卷积操作,1D-CNN可以从输入数据中提取局部特征,并利用这些特征进行分类或预测任务。以下是一个使用1D-CNN提取曲线特征的完整实现方法[^1]。 #### 数据准备 在训练1D-CNN之前,需要将曲线图转换为适合模型输入的格式。假设曲线图由一系列点组成,每个点对应一个时间步长和一个值,则可以将这些点组织成一个形状为 `[batch_size, seq_len, input_size]` 的张量,其中: - `batch_size` 是批量大小。 - `seq_len` 是时间序列的长度。 - `input_size` 是每个时间步长的特征维度。 ```python import numpy as np import torch import torch.nn as nn import torch.optim as optim # 示例:生成随机曲线图数据 np.random.seed(42) data = np.random.randn(100, 50, 1) # 100个样本,每个样本有50个时间步长,每个时间步长有1个特征 labels = np.random.randint(0, 2, size=(100,)) # 假设有两类标签 ``` #### 模型定义 下面是一个简单的1D-CNN模型定义,包含卷积层、池化层和全连接层。 ```python class CNN1D(nn.Module): def __init__(self, input_size, num_classes): super(CNN1D, self).__init__() self.conv1 = nn.Conv1d(in_channels=input_size, out_channels=16, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.MaxPool1d(kernel_size=2, stride=2) self.fc = nn.Linear(16 * 25, num_classes) # 根据卷积和池化后的输出调整线性层输入 def forward(self, x): x = self.conv1(x) # 卷积操作 x = self.relu(x) # 激活函数 x = self.pool(x) # 池化操作 x = x.view(x.size(0), -1) # 展平 x = self.fc(x) # 全连接层 return x # 初始化模型 model = CNN1D(input_size=1, num_classes=2) ``` #### 训练过程 使用交叉熵损失函数和Adam优化器对模型进行训练。 ```python # 转换为PyTorch张量 data_tensor = torch.tensor(data, dtype=torch.float32).permute(0, 2, 1) # 调整维度以适应卷积层 [batch_size, input_size, seq_len] labels_tensor = torch.tensor(labels, dtype=torch.long) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练循环 epochs = 10 for epoch in range(epochs): optimizer.zero_grad() # 清零梯度 outputs = model(data_tensor) # 前向传播 loss = criterion(outputs, labels_tensor) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}') ``` #### 特征提取 如果仅希望提取特征而不进行分类,可以在卷积层后停止计算,并保存中间结果。 ```python def extract_features(model, data_tensor): with torch.no_grad(): x = model.conv1(data_tensor) x = model.relu(x) x = model.pool(x) x = x.view(x.size(0), -1) return x.numpy() features = extract_features(model, data_tensor) print("提取特征形状:", features.shape) ``` ### 注意事项 - 在实际应用中,可能需要根据具体问题调整卷积核大小、步幅、填充方式等超参数[^2]。 - 如果曲线图数据较为复杂,可以考虑增加卷积层数量或引入残差连接[^3]。 - 对于大规模数据集,建议使用GPU加速训练过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值