一.自动编码器

时序数据常常表现为高维度的特点,过多的冗余属性不仅徒增训练负担,还会对模型的预测效果带来负面影响。通过使用时序数据降维的方法对训练数据进行预处理,可以大幅减少冗余维度的数据,从而提高训练速度和预测性能。Bengio等人受多层受限玻尔兹曼机堆叠而成的深度信念网络启发,由此提出了一种具有多层隐藏层的深度神经网络结构,这种结构中包含自动编码器( Auto- Encoder,AE) [60。深度自动编码器的结构如图2.1所示,输入x经过- -层-层隐藏层的编码,得到压缩后的编码h,,然后经过层层解码后得到输出x'。

图一 自动编码器结构示意图 

深度自动编码器以输入对输出之间的误差作为损失函数,使用反向传播算法不断迭代整个网络的参数,得到最终的编码器模型。自动编码器以无监督的方式学习时序数据不同属性间的相关性,从而尽可能保留原始数据的特征。若输入的样本数量为N个,损失函数L(x,x)的表示为:

二.降噪自动编码器

Vincent在一篇论文中提出了一种基于自动编码器改良的降噪自动编码器(Denoising Auto Encoder, DAE) , 这种编码器相比于原始的自动编码器具有更好从原始数据中提取出关键特征的能力162]。首先以一定概率将原始数据x矩阵中的部分数据置0,得到丢失数据的残缺输入矩阵x,然后以x为输入,一层一层编码得到压缩后的矩阵y,再通过一层一层编码得到输出x,根据x'和x之间的误差进行网络参数学习和迭代,这样就得到想要的压缩后的编码y。这种原理类似于深度神经网络中的Dropout,通过看似不全的训练过程,实际上能够得到泛化能力和鲁棒性更好的模型。降噪自动编码器结构如图。

图二 降噪自动编码器结构

三.数据集介绍

点这里下载数据集

该数据集包括每小时的天气特征和假日对交通量的影响。

四.模型介绍

编码维数小于输入维数时的欠完备自编码器可以学习到数据分布的最显著的特征。我们已经知道如果赋予这类自编码器过大的容量,它就不能学到一个任何有用的信息。

理想情况下,根据要剑魔的数据分布的复杂性,选择合适的编码维数和编码器、解码器容量就可以成功训练任意架构的自编码器。降噪自编码器提供这样的能力。

import torch
import torch.nn as nnclass DenoisingAutoencoder(nn.Module):def __init__(self):super(DenoisingAutoencoder, self).__init__()# Encoderself.encoder = nn.Sequential(nn.Linear(64, 128),nn.ReLU(),nn.Linear(128, 256),nn.ReLU(),nn.Linear(256, 512),nn.ReLU(),nn.Linear(512, 1024),)# Decoderself.decoder = nn.Sequential(nn.Linear(1024, 512),nn.ReLU(),nn.Linear(512, 256),nn.ReLU(),nn.Linear(256, 128),nn.ReLU(),nn.Linear(128, 64),nn.Sigmoid())def forward(self, inputs):z = self.encoder(inputs)outputs = self.decoder(z)return z, outputs

五.训练文件

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader,Dataset
import numpy as np
from model import DenoisingAutoencoder
from sklearn import preprocessing
import pandas as pd
import matplotlib.pyplot as plt# global constants全局参数
BATCH_SIZE = 32
N_INP = 64
N_EPOCHS = 100
NOISE = 0.15#  data loading数据加载
def custom_ts_multi_data_prep(dataset, start, window): #数据折叠X = []end = len(dataset)start = start + windowfor i in range(start, end):if i % window == 0:indices = range(i - window, i)X.append(dataset[indices].T)return np.array(X)class noisedDataset(Dataset):def __init__(self, datasetclean):self.clean = datasetclean# self.transform = transformdef __len__(self):return len(self.clean)def __getitem__(self, idx): #参数idx表示图片和标签在总数据集中的Index。xClean = self.clean[idx]return  xCleandf = pd.read_csv(r'E:\mine_python\GRU\Metro-Interstate-Traffic-Volume-Encoded.csv')
x_scaler = preprocessing.MinMaxScaler()
dataX_temp = x_scaler.fit_transform(df[['traffic_volume']])
hist_window = 64
dataX = custom_ts_multi_data_prep(dataX_temp, 0, hist_window)
train_set=noisedDataset(dataX)#tsfms) #datasetnoised, datasetclean, labels, transformtrain_loader = DataLoader(dataset=train_set,batch_size=BATCH_SIZE,shuffle=False,drop_last=True)running_loss = 0
epochloss = 0l = len(train_loader)
auto_encoder = DenoisingAutoencoder()
optimizer = optim.Adam(auto_encoder.parameters(), lr=1e-3)
losslist = list()
criterion = nn.MSELoss()
#开始训练
for epoch in range(N_EPOCHS):for (x,z) in enumerate(train_loader):y = z.view(z.size()[0], -1)noise = np.random.choice([1, 0], size=(BATCH_SIZE, N_INP), p=[NOISE, 1 - NOISE])inp = y * torch.FloatTensor(noise)inp = inp.float()y = y.float()mid,decoded = auto_encoder(inp)loss = criterion(decoded,y)optimizer.zero_grad()loss.backward()optimizer.step()running_loss += loss.item()epochloss += loss.item()losslist.append(running_loss / l)running_loss = 0print("======> epoch: {}/{}, Loss:{}".format(epoch, N_EPOCHS, loss.item()))t_new_sum =np.empty((1,0))
with torch.no_grad():for (x, z) in enumerate(train_loader ):y = z.view(z.size()[0], -1)# noise = np.random.choice([1, 0], size=(BATCH_SIZE, N_INP), p=[NOISE, 1 - NOISE])# inp = z * torch.FloatTensor(noise)inp = y.float()mid,decoded = auto_encoder(inp)decoded  = decoded .view(1, -1)output = decoded.detach().cpu().numpy()t_new_sum = np.hstack((t_new_sum, output))plt.plot(range(len(losslist)),losslist)
plt.show()

loss下降图像

使用降噪自编码器【DAE】对车流量数据进行降维相关推荐

  1. 用自编码器对数据进行降维

    元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017 ...

  2. python使用TSNE为影像组学(radiomics)数据进行降维可视化分析

    python使用TSNE为影像组学(radiomics)数据进行降维可视化分析 目录 python使用TSNE为影像组学(radiomics)数据进行降维可视化分析

  3. 使用t-SNE算法对数据进行降维并可视化实战,与KernalPCA、LLE对比降维可视化的效果

    使用t-SNE算法对数据进行降维并可视化,与KernalPCA.LLE对比降维可视化的效果 MNIST 数据集已经是一个被"嚼烂"了的数据集, 很多教程都会对它"下手&q ...

  4. 单细胞测序数据的降维方法及细胞亚型鉴定聚类方法总结

    图1.细胞亚型的鉴定及分析(Stegle et al. NATURE REVIEWS | GENETICS, 2015) 随着单细胞测序技术的发展,每个研究或实验中测定的细胞数量在显著增加.现在很多单 ...

  5. 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...

  6. 高维数据特征降维技术学习

    原文地址:高维数据特征降维技术学习 作者:新技术笔记 特征降维(feature dimension reduction)是一个从初始高维特征集合中选出低维特征集合,以便根据一定的评估准则最优化缩小特征 ...

  7. 随机森林降维matlab,随机森林在高光谱遥感数据中降维与分类的应用

    高光谱遥感图像技术(hyperspectral images)能够获取地物在几十甚至几百个波段的光谱信息.与多光谱数据相比,高光谱数据具有图谱合一.可识别更多地物等优势,它在环境监测.植被的精细分类. ...

  8. 单细胞测序数据的降维方法及细胞亚型的鉴定聚类方法总结

    图1.细胞亚型的鉴定及分析(Stegle et al. NATURE REVIEWS | GENETICS, 2015) 随着单细胞测序技术的发展,每个研究或实验中测定的细胞数量在显著增加.现在很多单 ...

  9. 堆叠降噪自编码器SDAE

    https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...

最新文章

  1. android编程fragment,Android中关于FragmentA嵌套FragmentB的问题
  2. 干掉状态:从session到token
  3. 设计根据标示符全局只运行一次的类
  4. 常见 Java 字节码 指令 助记符
  5. QQ浏览器如何添加并进入书签地址?QQ浏览器添加并进入书签地址的方法
  6. zabbix监控MHA及自动启动
  7. matlab 模拟滤波器转换为数字滤波器,一种模拟滤波电路数字化方法
  8. php 怎么看nginx,查看nginx是否启动
  9. LeetCode(733)——图像渲染(JavaScript)
  10. Java输出表格格式_在Java的System.out中以表格式输出
  11. 设置 路由模式 桥接模式
  12. T3500通过PXE克隆报“Unable to Control A20 Line XMS Driver not installed”
  13. Python新闻网站项目-7.Django内容后台管理系统管理开发
  14. 斐讯K2从第三方固件刷回原厂固件
  15. 《电子元器件的可靠性》——第3章可靠性试验
  16. 产品经理知识框架+求职面经——快手,字节跳动,
  17. 考研复试c语言面试题三峡,2017年三峡大学C语言程序设计(复试)考研真题硕士研究生入学考试试题...
  18. PCB设计--时钟线要求和布线
  19. FlashBuilder的代码模板
  20. 大数据在地理信息系统的应用

热门文章

  1. REDIS上如何批量删除KEY?
  2. 关于计算机的网络作文,关于网络的作文:网络_450字
  3. npm报错 gyp: No Xcode or CLT version detected!
  4. 你必须跌到你从未经历过的谷底,才能站上你从未到达过的高峰
  5. oracle维护服务 oracle解决方案 oracle售后服务
  6. Java获取Prometheus监控指标数据
  7. James Munkres Topology: Sec 18 Exer 12
  8. 电镜三维重构中多构象的辨别方法
  9. CF13A 最大公约数加进制转换
  10. Mybatis if test中字符串比较和Mybatis的like查询