我们接触的大多数时间序列数据主要涉及产生预测的交易。无论是预测产品的需求还是销售额,[航空公司]的乘客数量或特定股票的收盘价,我们都习惯于利用久经考验的时间序列技术来预测需求。

但随着生成的数据量呈指数增长,尝试新想法和算法的机会也随之增加。使用复杂的时间序列数据集仍然是一个利基领域,扩展你的保留曲目以包含新想法总是有帮助的。

这就是本文的目的,向你介绍时间序列分类的新概念。我们将首先了解这个主题的含义以及它在行业中的应用。但是不会只停留在理论部分——我们将通过处理时间序列数据集并执行二进制时间序列分类来解决问题。边学边应用——这将有助于你以实际的方式理解这个概念。

时间序列分类介绍

时间序列分类实际上已经存在了一段时间。但到目前为止,它主要限于研究实验室,而没有进行行业应用。但是有很多研究正在进行,正在创建新的数据集并提出了许多新的算法。

可以想象,时间序列分类数据与常规分类问题不同,因为属性具有有序序列。 让我们来看看一些时间序列分类用例,以了解这种差异。

1.对心电图(ECG/EEG)信号进行分类

心电图或心电图记录[心脏]的电活动,广泛用于诊断各种[心脏]问题。使用外部电极捕获这些心电图信号。

例如,考虑以下信号样本,它代表一个心跳的电活动。左侧的图像表示正常心跳,而与其相邻的图像表示心肌梗塞。

[图片上传失败…(image-f419ea-1550147176398)]

从电极捕获的数据将是时间序列形式,并且信号可以分类为不同的类别。我们还可以对记录[大脑]电活动的脑电信号进行分类。

在学习的道路上肯定会遇到困难,没有好的学习资料怎么去学习呢?
如果你感觉学不会?莫慌
互帮互助,还可以拿到许多视频教程!

2.图像分类

图像也可以是顺序的时间相关格式。请考虑以下情形:

根据天气条件、土壤肥力、水的可用性和其他外部因素,[农作物]在特定的田地中生长。这块田地被监测拍摄了5年,并标记在该字段上种植的作物的名称。 你知道为什么要这么做吗?数据集中的图像是在固定的时间间隔之后拍摄的,并且具有定义的序列,这可能是对图像进行分类的重要因素。

3.对运动传感器数据进行分类

传感器生成高频数据,可以识别其范围内物体的移动。通过设置多个无线传感器并观察传感器中信号强度的变化,可以识别物体的运动方向。

设置问题陈述

我们将致力于“室内用户运动预测”问题。在该挑战中,多个运动传感器被放置在不同的房间中,并且目标是基于从这些运动传感器捕获的频率数据来识别个体是否已经移动穿过房间。

两个房间有四个运动传感器(A1,A2,A3,A4)。请看下面的图像,其中说明了传感器在每个房间中的位置。这两个房间的设置是在3对不同的房间(group1,group2,group3)中创建的。

[图片上传失败…(image-a9d588-1550147176398)]

一个人可以沿着上图中所示的六个预定义路径进行任何移动。如果一个人走在路径2,3,4或6上,他会在单个房间内移动。另一方面,如果一个人沿着路径1或路径5行进,我们可以说该人在两个房间之间移动。

传感器读数可用于识别人在给定时间点的位置。当人在房间或房间内移动时,传感器中的读数会发生变化。此更改可用于标识人员的路径。

既然这个问题陈述已经清楚了,现在是时候开始编码了!

读取和理解数据

我们的数据集有316个文件

· 314个MovementAAL csv文件,包含放置在环境中的运动传感器的读数

· Target csv文件,其中包含每个MovementAAL文件的目标变量

· 一个组数据csv文件,用于标识哪个MovementAAL文件属于哪个安装组

· [Path]csv文件,包含对象所采用的路径

我们来看看数据集。我们将从导入必要的[数据库]库开始。

import pandas as pdimport numpy as np%matplotlib inlineimport matplotlib.pyplot as pltfrom os import listdirfrom keras.preprocessing import sequenceimport tensorflow as tffrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import LSTMfrom keras.optimizers import Adamfrom keras.models import load_modelfrom keras.callbacks import ModelCheckpoint

在加载所有文件之前,让我们快速了解一下要处理的数据。从移动数据中读取前两个文件:

df1 = pd.read_csv(‘/MovementAAL/dataset/MovementAAL_RSS_1.csv')df2 = pd.read_csv('/MovementAAL/dataset/MovementAAL_RSS_2.csv')df1.head

[图片上传失败…(image-8afde3-1550147176398)]

df2.head

[图片上传失败…(image-fc46f5-1550147176398)]

df1.shape, df2.shape

((27, 4), (26, 4))

这些文件包含来自四个传感器的标准化数据——A1,A2,A3,A4。csv文件的长度(行数)不同,因为对应于每个csv的数据的持续时间不同。为简化起见,我们假设每秒都会收集传感器数据。第一次读数持续27秒(所以是27行),而另一次读数持续26秒(所以是26行)。

在构建模型之前,我们必须处理这些不同的长度。现在,我们将使用以下代码块读取传感器中的值并将其存储在列表中:

path = 'MovementAAL/dataset/MovementAAL_RSS_'sequences = listfor i in range(1,315):file_path = path + str(i) + '.csv'print(file_path)df = pd.read_csv(file_path, header=0)values = df.valuessequences.append(values)targets = pd.read_csv('MovementAAL/dataset/MovementAAL_target.csv')targets = targets.values[:,1]

我们现在有一个列表“序列”,其中包含来自运动传感器的数据和“目标”,其中包含csv文件的标签。当我们打印序列[0]时,从第一个csv文件中获取传感器的值:

sequences[0]

[图片上传失败…(image-f21f4f-1550147176398)]

如前所述,数据集是在三对不同的房间中收集的——因此有三组。此信息可用于将数据集划分为训练集、测试集和验证集。我们现在将加载DatasetGroup csv文件:

groups= pd.read_csv('MovementAAL/groups/MovementAAL_DatasetGroup.csv', header=0)groups = groups.values[:,1]

我们将前两组的数据用于培训目的,第三组用于测试。

预处理步骤

由于时间序列数据的长度不同,我们无法直接在此数据集上构建模型。那么怎样才能决定一个系列的理想长度呢?我们可以通过多种方式处理它,这里有一些想法:

· 用零填充较短的序列,使所有序列的长度相等。在这种情况下,我们将向模型提供不正确的数据。

· 查找序列的最大长度,并使用最后一行中的数据填充序列。

· 确定数据集中序列的最小长度,并将所有其他序列截断为该长度。但是,这将导致数据的巨大损失。

· 取所有长度的平均值,截断较长的系列,并填充比平均长度短的序列。

让我们找出最小长度、最大长度和平均长度:

[len]_sequences =

for one_seq in sequences:

len_sequences.append(len(one_seq))

pd.Series(len_sequences).describe

count 314.000000

mean 42.028662

std 16.185303

min 19.000000

25% 26.000000

50% 41.000000

75% 56.000000

max 129.000000

dtype: float64

大多数文件的长度在40到60之间。只有3个文件的长度超过100。因此,采用最小或最大长度没有多大意义。第90个四分位数为60,这被视为数据序列的长度。我们来编代码:

#Padding the sequence with the values in last row to max length

to_pad = 129

new_seq =

for one_seq in sequences:

len_one_seq = len(one_seq)

last_val = one_seq[-1]

n = to_pad - len_one_seq

to_concat = np.repeat(one_seq[-1], n).reshape(4, n).transpose

new_one_seq = np.concatenate([one_seq, to_concat])

new_seq.append(new_one_seq)

final_seq = np.stack(new_seq)

#truncate the sequence to length 60

from keras.preprocessing import sequence

seq_len = 60

final_seq=sequence.pad_[sequences](final_seq, maxlen=seq_len, padding=‘post’, dtype=‘float’, truncating=‘post’)

既然数据集已准备好,我们将根据组将其分开。准备训练、验证和测试集:

train = [final_seq[i] for i in range(len(groups)) if (groups[i]==2)]

validation = [final_seq[i] for i in range(len(groups)) if groups[i]==1]

[test] = [final_seq[i] for i in range(len(groups)) if groups[i]==3]

train_target = [targets[i] for i in range(len(groups)) if (groups[i]==2)]

validation_target = [targets[i] for i in range(len(groups)) if groups[i]==1]

test_target = [[targets][i]==3]

train = np.array(train)

validation = np.array(validation)

test = np.array(test)

train_target = np.array(train_target)

train_target = (train_target+1)/2

validation_target = np.array(validation_target)

validation_target = (validation_target+1)/2

test_target = np.array(test_target)

test_target = (test_target+1)/2

构建时间序列分类模型

我们准备了用于LSTM(长短期记忆)模型的数据。我们处理了可变长度序列并创建了训练、验证和测试集。构建一个单层LSTM网络。

model = [Sequential]

model.add(LSTM(256, input_shape=(seq_[len], 4)))

model.add(Dense(1, activation=‘sigmoid’))

model.summary

[图片上传失败…(image-710f90-1550147176398)]

我们现在将训练模型并监控验证的准确性:

adam = Adam(lr=0.001)

chk = ModelCheckpoint(‘best_model.pkl’, monitor=‘val_acc’, save_best_only=True, mode=‘max’, verbose=1)

model.compile(loss=‘binary_cr[os]sentropy’, optimizer=[adam], metrics=[‘accuracy’])

model.fit(train, train_target, epochs=200, batch_size=128, callbacks=[chk], validation_data=(validation,validation_target))

#loading the model and checking accuracy on the test data

model = load_model(‘best_model.pkl’)

from sklearn.metrics [import] accuracy_score

test_preds = model.predict_classes(test)

accuracy_score(test_target, [test]_preds)

这里的准确度得分为0.78846153846153844。这是一个非常有前景的开始,但我们肯定可以通过使用超参数,改变学习速度和/或时代数来改善LSTM模型的性能。

总结

预处理步骤是所有部分中最复杂的。然而,它也是最重要的一个(否则整个[时间序列]数据将会失败)。在处理此类挑战时,向模型提供正确的数据同样重要。

Python代码详解:入门时间序列分类相关推荐

  1. 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...

  2. 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...

  3. 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...

  4. 基于模糊C均值聚类(FCM)的图像分割原理+python代码详解

    一.模糊 "模糊":一个元素可以不同程度的属于某几个子集,也就是说元素对于集合的隶属度可以在[0,1]上取连续值. 二.步骤 2.1步骤 翻译一下: S1:初始化参数:加权指数m, ...

  5. python平均入门时间_理论+Python代码详解:入门时间序列分类

    对时间序列进行分类?这真的有可能吗?这会有什么用呢? 我们接触的大多数时间序列数据主要涉及产生预测的交易.无论是预测产品的需求还是销售额,航空公司的乘客数量或特定股票的收盘价,我们都习惯于利用久经考验 ...

  6. 美国队长的工资 python代码-详解用Python练习画个美队盾牌

    0 环境 Python版本:3.6.6 操作系统:Mac OS Mojave 10.14.2 1 引言 最近我媳妇每天晚上吃饭时候也拿手机看,上厕所也在看. 看着看着还会笑?WTF?你在干嘛呢? 没错 ...

  7. 【论文必用】模糊C均值聚类的简单介绍、复现及Python代码详解、聚类可视化图的绘制过程详解!

    详解模糊C均值聚类 一.聚类 二.模糊C均值聚类 三.模糊C均值聚类的Python实现 四.参考链接 一.聚类 聚类的定义: 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类 ...

  8. 谱聚类Python代码详解

    谱聚类算法步骤 整体来说,谱聚类算法要做的就是先求出相似性矩阵,然后对该矩阵归一化运算,之后求前个特征向量,最后运用K-means算法分类. 实际上,谱聚类要做的事情其实就是将高维度的数据,以特征向量 ...

  9. 【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解

    更新时间:2023-3-30 1 题目 一.背景 自2019年底至今,全国各地陆续出现不同程度的新冠病毒感染疫情,如何控制疫情蔓 延.维持社会生活及经济秩序的正常运行是疫情防控的重要课题.大数据分析为 ...

最新文章

  1. php fsockopen解决办法
  2. 如何使用Visual Studio Code作为Git的默认编辑器
  3. Docker容器学习梳理--日常操作总结
  4. 八十二、归并排序求取复杂的逆序数
  5. matlab的7.3版本是什么_王者荣耀:玩不好元歌的3大原因,无论什么版本,元歌起码T1.5_电竞...
  6. 单机最大tcp连接数
  7. 网络爬虫生成代理ip
  8. 【动态规划】LeetCode 1143最长公共子序列
  9. if else语句linux,linux 中的if else语句
  10. 实验四+067+冯艳芳
  11. lg空调代码大全解决_LG空调故障代码大全-kg空调维修-lg空调维修手册
  12. Adobe证书含金量
  13. 递归算法之求x的n次方
  14. EDR端点检测与响应
  15. iOS-Bug收集:You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated
  16. 2022广东深圳国际半导体分立器件产品与应用技术展览会
  17. 扛住100亿次请求——如何做一个“有把握”的春晚红包系统?
  18. QFileInfo(文件信息)和临时文件
  19. DDR4之地址空间、颗粒容量、page size计算
  20. 转SAP MM T-code

热门文章

  1. CREO - 基础2 - 如何让装配好的零件重新装配
  2. android sdk no space,Android SDK folder taking a lot of disk space. Do
  3. python 判断时间是否大于6点_python - 在dataframe中,如何检查时间增量是否大于一分钟?_pandas_酷徒编程知识库...
  4. mysql 40014无效_Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区
  5. 安装的mysql密码忘了_mysql8安装成功后忘记密码
  6. python规模大小的指标是_训练数据多少才够用
  7. 未来计算机硬件的发展有可能使用的技术,未来计算机硬件的发展有可能使用的技术是______。...
  8. 洛谷 P1183 多边形的面积
  9. MySQL 基础知识(基本架构、存储引擎差异)
  10. CentOS 恢复 rm -rf * 误删数据(转)