首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手带你实现 室内用户移动预测(附python代码)

手把手带你实现 室内用户移动预测(附python代码)

作者头像
磐创AI
发布于 2019-05-05 03:05:56
发布于 2019-05-05 03:05:56
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

大多数的时间序列数据主要用于交易生成预测。无论是预测产品的需求量还是销售量,航空公司的乘客数量还是特定股票的收盘价,我们都可以利用时间序列技术来预测需求。

随着生成的数据量呈指数级增长,尝试新思想和算法的机会也随之增加。使用复杂的时间序列数据集仍然是一个待开发的领域。

这篇文章的目的就是介绍时间序列分类的新概念。我们将首先了解该概念的含义和在行业中的应用。我们不会只停留在理论部分,还会通过处理时间序列数据集并执行分类解决实际问题。一边做一边学有助于以实际的操作来理解概念。

目录:

时间序列分类简介1. ECG / EEG信号分类2. 图像分类3. 运动传感器数据分类描述问题场景查看数据集预处理建立分类模型

时间序列分类简介

时间序列分类实际上已经存在了一段时间。但到目前为止,它主要用于实验室研究,而不是行业应用。目前有很多正在进行的研究,新创建的数据集,许多新的算法。当我第一次接触到到时间序列分类概念时,最初的想法是:我们怎样对时间序列进行分类以及时间序列分类数据是什么样的?我相信你一定也想知道。

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

1. ECG / EEG信号分类

心电图(ECG, electrocardiogram),用于记录心脏的电活动,并广泛用于诊断各种心脏问题。使用外部电极捕获这些ECG信号。

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

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

2. 图像分类

图像也可以是时间顺序相关的。考虑以下的情况:

根据天气条件,土壤肥力,水的可用性和其他外部因素,作物在特定的田地中生长。在该区域上持续每天拍摄图片,持续5年,并标记在该区域上种植作物的名称。该数据集中的图像是在固定的时间间隔拍摄的,并且具有特定的顺序,这可能是对图像进行分类的重要因素。

3. 运动传感器数据分类

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

你还知道哪些时间序列分类的应用吗?欢迎大家在文末留言。

描述问题场景

我们将专注于 “室内用户运动预测” 的问题。在该问题中,多个运动传感器被放置在不同的房间中,目标是从这些运动传感器捕获的频率数据中识别个体是否在房间之间移动。

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

一个人可以沿着上图所示的六个预定义路径中的任意一个移动。路径2, 3, 4或 6 是在房间内移动,路径 1 或 5 在房间之间移动。

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

现在问题已经表述清楚了,是时候开始编码了!在下一节中,我们会查看该问题的数据集,有助于使该问题更加清晰。数据集:室内用户移动预测。

查看数据集

数据集一共包含316个文件:

  • 314 个 MovementAAL csv 文件,包含环境中的运动传感器的读数。
  • 一个 Target csv 文件,包含每个 MovementAAL 文件的目标变量。
  • 一个 Group Data csv 文件,用于标识 MovementAAL 文件属于哪一个组。
  • Path csv 文件包含目标采取的路径。

首先看一下数据集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1import pandas as pd
2import numpy as np
3%matplotlib inline
4import matplotlib.pyplot as plt
5from os import listdir
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1from keras.preprocessing import sequence
2import tensorflow as tf
3from keras.models import Sequential
4from keras.layers import Dense
5from keras.layers import LSTM
6
7from keras.optimizers import Adam
8from keras.models import load_model
9from keras.callbacks import ModelCheckpoint

在加载所有文件之前先快速浏览一下要处理的数据。读取移动数据的前两个文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1df1 = pd.read_csv('/MovementAAL/dataset/MovementAAL_RSS_1.csv')
2df2 = pd.read_csv('/MovementAAL/dataset/MovementAAL_RSS_2.csv')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1df1.head()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1df2.head()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1df1.shape, df2.shape
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1((27, 4), (26, 4))

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

在建立模型之前,我们必须处理这种不同的长度。以下的代码用于读取和存储传感器的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1path = 'MovementAAL/dataset/MovementAAL_RSS_'
2sequences = list()
3for i in range(1,315):
4    file_path = path + str(i) + '.csv'
5    print(file_path)
6    df = pd.read_csv(file_path, header=0)
7    values = df.values
8    sequences.append(values)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1targets = pd.read_csv('MovementAAL/dataset/MovementAAL_target.csv')
2targets = targets.values[:,1]

现在有一个名为 'sequences' 的列表,包含了运动传感器的数据和目标——csv文件的标签。sequences[0] 中的数据就是第一个csv文件中获取传感器的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1sequences[0]

如上所述,数据集是在三对不同的房间中收集的,所以有三组数据。正好可以将数据集划分为训练集,测试集和验证集。现在加载 DatasetGroup csv 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1groups = pd.read_csv('MovementAAL/groups/MovementAAL_DatasetGroup.csv', header=0)
2groups = groups.values[:,1]

前两组的数据用于训练 ,第三组用于测试。

预处理

由于时间序列数据的长度不同,我们不能直接在数据集上建立模型。那么怎样确定合适的长度呢?我们可以通过多种方发处理。这里有一些简单的想法(欢迎在评论区提出批评和建议):

  • 用零填充较短的序列使所有序列的长度相等。这种方式下,我们向模型提供了不正确的数据
  • 找到序列的最大长度,使用它最后一行中的数据填充
  • 确定数据集中序列的最小长度,将其他所有的序列截断为该长度。这将损失大量的数据
  • 取所有长度的平均值,截断较长的序列,填充较短的序列

获取最小,最大和平均序列长度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1len_sequences = []
2for one_seq in sequences:
3    len_sequences.append(len(one_seq))
4pd.Series(len_sequences).describe()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1count    314.000000
2mean      42.028662
3std       16.185303
4min       19.000000
525%       26.000000
650%       41.000000
775%       56.000000
8max      129.000000
9dtype: float64

大多数文件的长度在 40 到 60 之间。只有 3 个文件的长度超过 100。因此,采用最小或最大的长度没有太大意义。第 90 个四分位数是 60,可以将它作为所有序列的长度。代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1### 用最长序列的最后一行的数据填充较短的序列
 2to_pad = 129
 3new_seq = []
 4for one_seq in sequences:
 5    len_one_seq = len(one_seq)
 6    last_val = one_seq[-1]
 7    n = to_pad - len_one_seq
 8
 9    to_concat = np.repeat(one_seq[-1], n).reshape(4, n).transpose()
10    new_one_seq = np.concatenate([one_seq, to_concat])
11    new_seq.append(new_one_seq)
12final_seq = np.stack(new_seq)
13
14# 截断较长的序列
15from keras.preprocessing import sequence
16seq_len = 60
17final_seq=sequence.pad_sequences(final_seq, maxlen=seq_len, padding='post', dtype='float', truncating='post')

然后根据分组将数据集分开,准备训练集,验证集和测试集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1train = [final_seq[i] for i in range(len(groups)) if (groups[i]==2)]
2validation = [final_seq[i] for i in range(len(groups)) if groups[i]==1]
3test = [final_seq[i] for i in range(len(groups)) if groups[i]==3]
4
5train_target = [targets[i] for i in range(len(groups)) if (groups[i]==2)]
6validation_target = [targets[i] for i in range(len(groups)) if groups[i]==1]
7test_target = [targets[i] for i in range(len(groups)) if groups[i]==3]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1train = np.array(train)
 2validation = np.array(validation)
 3test = np.array(test)
 4
 5train_target = np.array(train_target)
 6train_target = (train_target+1)/2
 7
 8validation_target = np.array(validation_target)
 9validation_target = (validation_target+1)/2
10
11test_target = np.array(test_target)
12test_target = (test_target+1)/2

建立分类模型

我们已经准备了用于 LSTM(长短期记忆)模型的数据,处理了不同长度的序列并创建了训练集,验证集和测试集。接下来就要建立一个单层 LSTM 网络。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1model = Sequential()
2model.add(LSTM(256, input_shape=(seq_len, 4)))
3model.add(Dense(1, activation='sigmoid'))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1model.summary()

训练模型并验证准确率:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1adam = Adam(lr=0.001)
2chk = ModelCheckpoint('best_model.pkl', monitor='val_acc', save_best_only=True, mode='max', verbose=1)
3model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
4model.fit(train, train_target, epochs=200, batch_size=128, callbacks=[chk], validation_data=(validation,validation_target))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1# 加载模型,用测试集验证准确性
2model = load_model('best_model.pkl')
3
4from sklearn.metrics import accuracy_score
5test_preds = model.predict_classes(test)
6accuracy_score(test_target, test_preds)

最后准确度得分为0.78846153846153844。这是一个相当良好的开端,但我们还可以通过使用超参数,改变学习速率或迭代次数改善 LSTM 模型的性能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Python实现深度学习模型:智能设备故障预测与维护
随着工业4.0和物联网(IoT)的普及,越来越多的智能设备被应用到生产和生活中。为了保障这些设备的正常运行,预测设备的故障并进行预防性维护是非常重要的。通过深度学习技术,我们可以使用历史设备数据来预测设备的故障,从而减少停机时间和维护成本。本文将介绍如何使用Python实现一个简单的智能设备故障预测与维护模型,带你一步步了解这个过程。
Echo_Wish
2024/10/19
1.2K2
使用Python实现深度学习模型:智能设备故障预测与维护
使用Python实现深度学习模型:智能极端天气事件预测
极端天气事件,如暴雨、台风和热浪,往往会对人类社会和自然环境产生深远的影响。近年来,气象数据和深度学习技术的发展使得智能预测极端天气成为可能。通过训练深度学习模型,我们可以建立一个自动化的预测系统,从大量的历史气象数据中学习并预测未来的极端天气事件。这篇文章将通过Python和深度学习框架Keras来介绍如何实现一个简单的智能极端天气预测模型。
Echo_Wish
2024/10/27
4920
使用Python实现深度学习模型:智能极端天气事件预测
[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解
《当人工智能遇上安全》系列博客将详细介绍人工智能与安全相关的论文、实践,并分享各种案例,涉及恶意代码检测、恶意请求识别、入侵检测、对抗样本等等。只想更好地帮助初学者,更加成体系的分享新知识。该系列文章会更加聚焦,更加学术,更加深入,也是作者的慢慢成长史。换专业确实挺难的,系统安全也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
Eastmount
2023/11/13
5161
[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解
基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
本文将讨论通过使用假设测试、特征工程、时间序列建模方法等从数据集中获得有形价值的技术。我还将解决不同时间序列模型的数据泄漏和数据准备等问题,并且对常见的三种时间序列预测进行对比测试。
deephub
2023/02/01
1.5K0
[Deep-Learning-with-Python] 文本序列中的深度学习
深度学习模型可以处理文本序列、时间序列、一般性序列数据等等。处理序列数据的两个基本深度学习算法是循环神经网络和1D卷积(2D卷积的一维模式)。
公众号-不为谁写的歌
2020/07/23
4.2K0
使用LSTM模型预测多特征变量的时间序列
使用LSTM模型预测多特征变量的时间序列,能够帮助我们在各种实际应用中进行更准确的预测。这些应用包括金融市场预测、气象预报、能源消耗预测等。
Python编程爱好者
2024/07/12
1.7K0
使用LSTM模型预测多特征变量的时间序列
手把手教你使用 1D 卷积和 LSTM 混合模型做 EEG 信号识别
本文主要介绍了使用 1D 卷积和 LSTM 混合模型做 EEG 信号识别。感谢Memory逆光!
脑机接口社区
2022/08/17
7730
手把手教你使用 1D 卷积和 LSTM 混合模型做 EEG 信号识别
LSTM时间序列预测及网络层搭建[通俗易懂]
最近看到一篇博客,是时间预测问题,数据和代码的原地址在这里, https://www.jianshu.com/p/5d6d5aac4dbd
全栈程序员站长
2022/07/23
1.1K0
LSTM时间序列预测及网络层搭建[通俗易懂]
硬货 | 手把手带你构建视频分类模型(附Python演练))
我们可以使用计算机视觉和深度学习做很多事情,例如检测图像中的对象,对这些对象进行分类,从电影海报中生成标签。
磐创AI
2019/09/17
5.3K0
硬货 | 手把手带你构建视频分类模型(附Python演练))
时间序列预测(二)基于LSTM的销售额预测
O:小H,Prophet只根据时间趋势去预测,会不会不太准啊 小H:你这了解的还挺全面,确实,销售额虽然很大程度依赖于时间趋势,但也会和其他因素有关。如果忽略这些因素可能造成预测结果不够准确 小O:那有没有什么办法把这些因素也加进去呢? 小H:那尝试下LSTM吧~
HsuHeinrich
2023/05/25
1.5K0
时间序列预测(二)基于LSTM的销售额预测
使用TensorFlow 2.0的LSTM进行多类文本分类
关于NLP的许多创新都是如何将上下文添加到单词向量中。常用的方法之一是使用递归神经网络。以下是递归神经网络的概念:
代码医生工作室
2019/12/19
4.5K0
使用TensorFlow 2.0的LSTM进行多类文本分类
基于LSTM-CNN的人体活动识别
来源:DeepHub IMBA本文约3400字,建议阅读10+分钟本文带你使用移动传感器产生的原始数据来识别人类活动。 人体活动识别(HAR)是一种使用人工智能(AI)从智能手表等活动记录设备产生的原始数据中识别人类活动的方法。当人们执行某种动作时,人们佩戴的传感器(智能手表、手环、专用设备等)就会产生信号。这些收集信息的传感器包括加速度计、陀螺仪和磁力计。人类活动识别有各种各样的应用,从为病人和残疾人提供帮助到像游戏这样严重依赖于分析运动技能的领域。我们可以将这些人类活动识别技术大致分为两类:固定传感器和
数据派THU
2022/08/29
2K0
基于LSTM-CNN的人体活动识别
二分类问题:基于BERT的文本分类实践!附完整代码
寄语:Bert天生适合做分类任务。文本分类有fasttext、textcnn等多种方法,但在Bert面前,就是小巫见大巫了。
Datawhale
2020/03/19
6.3K1
二分类问题:基于BERT的文本分类实践!附完整代码
使用PyTorch-LSTM进行单变量时间序列预测的示例教程
时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率,一年里一只股票的日收盘价,一年里某个城市每周发生的交通事故数。在任何一段时间段内记录这些信息都被认为是一个时间序列。对于这些例子中的每一个,都有事件发生的频率(每天、每周、每小时等)和事件发生的时间长度(一个月、一年、一天等)。
数据STUDIO
2023/02/24
2.4K0
使用PyTorch-LSTM进行单变量时间序列预测的示例教程
MOOC TensorFlow入门实操课程代码回顾总结(二)
欢迎来到TensorFlow入门实操课程的学习 MOOC TensorFlow入门实操课程代码回顾总结(一) MOOC TensorFlow入门实操课程代码回顾总结(三) 注: 用于表示python代码 粘贴运行结果 目录 5 图像分类基础应用——猫狗分类案例 5.1 导入库 5.2 下载数据集 5.3 查看样本数目 5.4 创建文件夹,存放训练测试数据 5.5 切分为训练数据和测试数据 5.6 模型构建 5.7 数据预处理 5.8 模型训练 5.9 训练结果可视化 5.10 模型推理 6 迁移学
荣仔_最靓的仔
2022/01/05
6070
MOOC TensorFlow入门实操课程代码回顾总结(二)
深度学习实战:kaggle竞赛:Keras实现双层LSTM进行风暴预测 python+Keras源码
LSTM(长短期记忆网络)是一种特殊的 RNN(循环神经网络),它能够有效地处理长期依赖问题。相比传统的 RNN,LSTM 通过引入门控机制来控制信息的流动,能够保持较长时间范围内的记忆,并防止梯度消失或爆炸的问题。在处理时间序列或语言数据时,LSTM 可以学习序列中的长期依赖关系。
机器学习司猫白
2025/01/21
4280
深度学习实战:kaggle竞赛:Keras实现双层LSTM进行风暴预测 python+Keras源码
【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
在优化生产流程的过程中,数据是最为重要的基础。制造企业通常会在生产线上安装各种传感器,这些传感器可以实时收集设备状态、生产速度、工艺参数等数据。例如,温度传感器可以监测生产过程中不同阶段的温度变化,振动传感器可以记录设备运行时的振动情况,而压力传感器则可以测量生产线上的压力变化。这些数据的收集为后续的分析和优化提供了丰富的素材。
小李很执着
2024/06/15
2680
【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
机器学习与工业(一)-预测性维护
随着自动化软件、大数据等技术的成熟,越来越多的工业场合开始将人工智能和机器学习引入到工业控制中去,比如我们常见的软测量、MPC控制、APC控制系统、寿命预测、状态检测、设备运行状态检测等系统。本次探讨内容主要以笼统的理论和一个简单的案例为探讨方向。
剑指工控
2022/04/14
6970
机器学习与工业(一)-预测性维护
Deep learning with Python 学习笔记(1)
Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据处理模块,它从输入数据中提取表示,紧接着的一个例子中,将含有两个Dense 层,它们是密集连接(也叫全连接)的神经层,最后是一个10路的softmax层,它将返回一个由 10 个概率值(总和为 1)组成的数组。每个概率值表示当前数字图像属于 10 个数字类别中某一个的概率 损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进 优化器(optimizer):基于训练数据和损失函数来更新网络的机制
范中豪
2019/09/10
1.7K0
Deep learning with Python 学习笔记(1)
股票预测 lstm(时间序列的预测步骤)
如果对LSTM原理不懂得小伙伴可以看博主下一篇博客,因为博主水平有限,结合其他文章尽量把原理写的清楚些。
全栈程序员站长
2022/08/01
2.5K1
股票预测 lstm(时间序列的预测步骤)
推荐阅读
相关推荐
使用Python实现深度学习模型:智能设备故障预测与维护
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档