首页 > 编程语言 >Python TensorFlow双向Bi-LSTM长短期记忆神经网络深度学习可视化用户传感器活动数据

Python TensorFlow双向Bi-LSTM长短期记忆神经网络深度学习可视化用户传感器活动数据

时间:2024-07-02 18:10:21浏览次数:17  
标签:函数 Python 标签 模型 Bi train TensorFlow 数据 我们

全文链接:https://tecdat.cn/?p=36613

原文出处:拓端数据部落公众号

在本文中,我们旨在利用深度学习技术,特别是TensorFlow框架下的Keras库,对WISDM(无线传感器数据挖掘)数据集进行活动识别。WISDM数据集包含了从用户身上佩戴的加速度传感器收集的三轴加速度数据,这些数据被用于识别用户的日常活动,如走路、跑步、跳跃等。通过对这些数据的分析,我们可以为健康监测、人机交互等领域提供有价值的见解。

image.png

数据准备

首先,我们导入了必要的Python库,包括NumPy用于数值计算、TensorFlow用于深度学习建模、Pandas用于数据处理、Seaborn和Matplotlib用于数据可视化。为了确保实验的可重复性,我们设置了随机种子。

   
t64) df.dropna(axis=0, how='any', inplace=True)

image.png

数据探索

在数据准备阶段之后,我们对数据集进行了初步的探索。通过Seaborn库的countplot函数,我们绘制了不同活动类型的频数分布图,以了解数据集中各种活动类型的分布情况。

   
sns.countplot(x = 'activity',

下载 (6)_1_1719822232.5531096.jpg

通过此图,我们可以直观地看到数据集中各种活动类型的分布情况,为后续的模型训练和评估提供有价值的参考。

为了直观地了解数据集中用户活动记录的分布情况,我们绘制了用户ID的频数分布图。通过Seaborn库的countplot函数,我们观察到不同用户之间的活动记录数量存在差异。

   
order = df.user_id.value_counts().index); plt.title("Records per user");

下载 (7).translated.jpg

   
   for ax in axis:
        ax.legend(loc='lower left', bbox_to_anchor=(1.0, 0.5))

此外,为了更深入地了解用户活动数据的特征,我们定义了一个名为plot_activity的函数,用于绘制特定活动类型的三轴加速度数据图。通过这个函数,我们可以直观地比较不同活动类型在加速度数据上的差异。

   
plot_activity("Sitting", df);

image.png

image.png

数据分割与缩放

为了进行模型训练和验证,我们将数据集按照用户ID进行了分割,前30个用户的数据作为训练集,其余用户的数据作为测试集。接着,我们使用RobustScaler对数据进行缩放,以减少不同特征之间的量纲影响,提高模型的训练效果。

在数据预处理和可视化之后,我们将构建深度学习模型,并使用训练集进行模型训练。通过调整模型架构和参数设置,我们旨在提高活动识别的准确性和效率。此外,我们还将使用测试集对模型进行评估,以验证其泛化能力。

   
scaler = scaler.fit(df_train[scale_columns])
   
print(X_train.shape, y_train.shape)

image.png

我们采用了一种基于双向长短期记忆(Bi-LSTM)的深度学习模型,通过预处理数据、构建模型、训练与评估等步骤,实现了对用户日常活动的准确分类。

在数据预处理阶段,我们设计了一个名为create_dataset的函数,用于从原始数据中提取时间序列样本及其对应的标签。该函数接受四个参数:输入数据X、标签数据y、时间步长time_steps和步长step。通过遍历输入数据,该函数以固定的步长截取时间序列样本,并使用scipy.stats.mode函数计算每个样本时间段内出现频率最高的活动标签作为该样本的标签。

在本研究中,我们设定时间步长TIME_STEPS为200,步长STEP为40。利用create_dataset函数,我们从训练集df_train中提取了训练数据X_train和对应的标签y_train,从测试集df_test中提取了测试数据X_test和对应的标签y_test

模型构建与训练

在模型构建阶段,我们采用了一个基于双向长短期记忆(Bi-LSTM)的深度学习模型。该模型包含以下组件:一个双向LSTM层,用于捕捉时间序列数据中的双向依赖关系;一个Dropout层,用于防止过拟合;两个全连接层(Dense层),其中第一个使用ReLU激活函数,第二个使用Softmax激活函数,用于输出多分类结果。

在模型训练阶段,我们首先使用One-Hot编码对标签数据进行处理,以便模型能够处理多分类任务。然后,我们将预处理后的训练数据X_train和标签y_train输入到模型中,并使用Adam优化器和分类交叉熵损失函数进行训练。我们设定了20个训练周期(epochs),每个周期内的批处理大小(batch size)为64,并使用10%的数据作为验证集进行模型性能的监控。

   
X_train, y_train, epochs=20, batch_size=64, validation_split=0.1,

image.png

   
plt.plot(history.history['val_loss'], label='test') plt.legend();

image.png

经过训练后,我们得到了一个能够准确识别用户活动的深度学习模型。通过查看训练过程中的损失函数值和准确率指标,我们可以发现模型在训练集和验证集上均取得了良好的性能。此外,我们还对测试集进行了评估,以验证模型的泛化能力。实验结果表明,该模型在用户活动识别任务中具有较高的准确性和稳定性。

模型评估与结果分析

在完成了模型的训练过程后,我们首先对模型进行了评估,以验证其在未见数据上的性能。通过使用Keras框架的evaluate方法,我们计算了模型在测试集X_test和对应标签y_test上的性能表现。测试损失值和准确率分别为0.3610.87,这显示了模型在测试集上具有良好的泛化能力。

   
evaluate(X_test,

image.png

为了更深入地了解模型的分类性能,我们进一步计算了模型的混淆矩阵。混淆矩阵是一种常用的评估分类模型性能的工具,它可以清晰地展示模型在各类别上的预测结果与实际结果的对比情况。首先,我们使用模型对测试集进行预测,得到预测结果y_pred

然后,我们定义了一个名为plot_cm的函数,用于绘制混淆矩阵的可视化图像。该函数接受真实标签y_true、预测标签y_pred和类别名称class_names作为输入,利用Seaborn库中的heatmap函数绘制混淆矩阵,并通过调整图表的细节使其更加易于理解。

最后,我们调用plot_cm函数,传入逆变换后的真实标签和预测标签,以及通过编码器enc获取的类别名称,绘制混淆矩阵的可视化图像。

   
plot_cm( enc.inverse_transform(y_test),

image.png 通过混淆矩阵的可视化图像,我们可以清晰地看到模型在各类别上的预测表现,包括正确分类的样本数和错误分类的样本数。这有助于我们进一步分析模型的性能瓶颈,并指导后续的模型优化工作。

how-the-asian-1217175730-bt-1536x1536.webp

标签:函数,Python,标签,模型,Bi,train,TensorFlow,数据,我们
From: https://www.cnblogs.com/tecdat/p/18280325

相关文章

  • Python123:找出不是两个数组共有的元素、矩阵运算、方阵循环右移(C语言)
    文章目录1、找出不是两个数组共有的元素2、矩阵运算3、方阵循环右移1、找出不是两个数组共有的元素题目:给定两个整型数组,本题要求找出不是两者共有的元素。输入格式:输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。‪‬‪......
  • 2.3 在MacOS系统下载、安装、配置搭建Python开发环境——《跟老吕学Python》
    2.3在MacOS系统下载、安装、配置搭建Python开发环境——《跟老吕学Python》在MacOS系统下载、安装、配置搭建Python开发环境一、Python开发环境的硬件要求二、下载MacOS版Python安装包1.访问Python官网下载页2.选择Mac版本3.点击下载4.检查下载的文件5.准备安装......
  • [Python]使用python处理PDF,在PDF中某一页加一行文字,另存成一个新的文件
    本文参考链接:https://blog.csdn.net/Anq1_/article/details/111144032一、需求分析我有一个数据文件(data.xlsx),里面是序号和班级信息;还有一个PDF文件,每一页里是格式化的信息,其中包含序号,且序号唯一。遍历PDF每个页面,找到序号对应的班级,加在左下角 二、实现过程找了很多方法......
  • PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子|附代码数据
    全文下载链接:http://tecdat.cn?p=26519最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。一个简单的编码器-解码器LSTM神经网络应用于时间序列预测问题:预测天然气价格,预测范围为10天。“进入”时间步长也设置为10天。)只需要10天来推断接下来的10天。......
  • 28-BigDecimal类
    BigDecimal精确存储,精度要求非常高时候用这类这个类的作用就是精确计算浮点数doubled1=1.0;doubled2=0.9;System.out.println(d1-d2);//0.09999999999999998doubleresult=(1.4-0.5)/0.9;System.out.println(result);......
  • 《DNK210使用指南 -CanMV版 V1.0》第七章 基于CanMV的MicroPython语法开发环境搭建
    第七章基于CanMV的MicroPython语法开发环境搭建1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/......
  • Python对历年高考分数线数据用聚类、决策树可视化分析一批、二批高校专业、位次、计划
    全文链接:https://tecdat.cn/?p=36626原文出处:拓端数据部落公众号随着高等教育的普及与竞争的日益激烈,高考作为通往高等教育的重要门槛,其分数线的波动、高校及专业的选择成为了社会广泛关注的焦点。考生和家长在面临众多高校和专业的选择时,往往需要综合考虑多种因素,如分数线、专......
  • Python--matplotlib绘图可视化知识点整理
    无论你工作在什么项目上,IPython都是值得推荐的。利用ipython--pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能。本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找。这样IPython配置为使用你所指定的mat......
  • bigNumber的部分使用方法与属性
    场景:最近做IoT项目的时候碰到一个问题,涉及到双精度浮点型的数据范围的校验问题。业务上其实有三种类型:int、float和double类型三种。他们的范围分别是://intint:['-2147483648','2147483647'],//floatfloat:['-340282346638528860000000000000000000000','340282346638......
  • Python爬虫百度文库
    用Python爬取百度文库资料在当今数字化的时代,获取信息变得至关重要。有时我们可能需要从百度文库中获取一些有价值的资料,但手动下载可能效率低下。本文将探讨如何使用Python来爬取百度文库的资料,但需要注意的是,爬取百度文库的资料可能涉及违反其服务条款和法律法规,因此本......