前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >物联网数据的分析与处理

物联网数据的分析与处理

原创
作者头像
联远智维
发布2023-07-12 22:02:41
6480
发布2023-07-12 22:02:41
举报
文章被收录于专栏:联远智维联远智维

背景介绍

近年来,物联网(IoT)和人工智能(AI)相关的技术取得了巨大的发展,逐渐成为了引领智能时代的重要动力。调研发现,物联网的核心理念是通过连接设备和传感器,实现物理世界与数字世界的无缝交互。而AI作为物联网的重要驱动力,通过分析和理解大量的数据,赋予物联网设备智能和决策能力。通过行业间的交叉融合,能够驱动不同场景的快速落地(工业4.0、元宇宙、智慧医疗以及智能城市等),最终为人们提供更好的生活体验,给企业带来潜在的经济效益。

在前期的推文中,我们在物联网和AI算法两个方面都进行了大量的工作,例如:Etwin数字孪生平台MATLAB程序在设备端部署实例基于深度学习的航空发动机剩余寿命预测以及基于嵌入式端的人脸识别算法等,相关的深度学习算法实现了人脸识别,工业设备寿命预测以及传感器采集数据的在线交互等,但是仔细查看会发现,以往的工作更多是将 AI 算法部署到边缘端,没有将物联网和AI算法集成到一起,因此,本推文算是不同领域交叉融合的一个实例,具体内容如下所示:

图1 物联网+AI在混合现实方面的应用实例(非常喜欢作者的绘图风格,觉得真心不错)
图1 物联网+AI在混合现实方面的应用实例(非常喜欢作者的绘图风格,觉得真心不错)

附:对于混合现实等应用场景,需要物联网和 AI 进行深度融合,不仅需要对数据进行分析处理,还涉及到图像识别,可视化等部分,还是相当具有挑战性。

环境搭建

我们参考tdengine官方给出的例程,在此基础上进行了优化改进,最终能够适配到自己的物联网平台,整个流程主要包含:1.环境搭建;2. 算法原理解析以及源代码修改;3. 转换为互联网行业通用的http请求,具体如下所示:

代码语言:javascript
复制
 git clone https://gitee.com/mayuanliang/td-forecasting.git //可以更改为自己仓库;我将官方的代码fork了一份
 cd td-forecasting/
 
 ls // forecast.py  LICENSE  mockdata.py  README.md  requirements.txt  reviewpad.yml
 
 conda create -n tdDemo python=3.10 //安装conda;
 conda activate tdDemo 
 sudo apt install python3-pyqt5 
 python3 -m pip install -r requirements.txt  //等待大约5min,看服务器配置高低,可能有差异
 
 重要部分:版本一致性(python数据库连接插件和tdengine数据库版本);当前需要搭配的tdengine数据库版本为:3.0.6.0;
 
 pip3 install flask

整个过程中有几个关键点:1.tdengine的版本适应性问题,可以寻求官方的帮助;2.最好使用conda搭建环境,不容易出bug;后续分别运行python3 mockdata.py 给数据库插入调试数据;后续运行 forecast.py 对tdengine数据库中的数据进行预测,将结果打印到屏幕上,具体结果如图2所示:

图2 环境搭建过程、程序运行以及结果展示;预测的精度还可以
图2 环境搭建过程、程序运行以及结果展示;预测的精度还可以

算法原理

了解算法背后的原理也是非常关键的一个环节,可以帮助我们依据具体问题对代码进行优化改进,例程中主要使用了两种算法:1. LinearRegression:这个非常简单,网上大把的教程,在此不进行赘述,本质属于最小二乘法和矩阵方程的数值求解;2. GBDT:全名叫梯度提升决策树,是一种迭代的决策树算法,将决策树与集成思想进行了有效的结合,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出。

有兴趣可以详细看下代码的原理,我这里尽量弱化数学这块的公式。其中,预测模型函数 F 可以表述为:

{F_t}(X) = {F_{t - 1}}({X_i}) + {\alpha _t}{h_t}(X:{W_t})

第t轮的第i个样本的损失函数的负梯度为:

{{\tilde y}_i} = - {\left[ {{{\partial L({y_i},F({x_i}))} \over {\partial F({x_i})}}} \right]_{F(x) = {F_{t - 1}}(x)}}

训练目标为:

{w_t} = \arg \min {w_t}\sum\nolimits_{i = 1}^N {({{\tilde y}_i} - {h_t}{{(X:{W_t})}^2})}

源代码修改

我们查看了mlforecast库的原始代码,其核心思想跟深度学习非常接近,主要包含两个函数,具体为:1. MLForecast.fit:能够依据现有数据进行预训练;2. MLForecast.predict:依据已训练的模型对未来进行预测。

首先,我们需要获取tdengine数据库中的数据,具体用的程序代码为:

代码语言:javascript
复制
df = pd.read_sql(
        text("select _wstart as ds, avg(num) as y from power.meters interval(1w)"),
        conn,
    )

其次,我们需要对模型进行训练及预测,具体使用的代码为:

代码语言:javascript
复制
forecast = mlforecast.MLForecast(
        models=[LinearRegression(), lgb.LGBMRegressor()],
        freq="W",
        lags=[52],
        target_transforms=[Differences([52])],
    )
    forecast.fit(df)

    predicts = forecast.predict(52)

附1:differences表示对原始数据进行预处理,例如:原始数据具有明显的时间趋势时(天,月,季度以及年等),可以通过差分对预测结果进行优化。其中Differences([52])表示一阶差分,偏移长度为52;

附2:lags 参数用于创建滞后特征的偏移值(lag features)。滞后特征是在时间序列预测中使用过去观测值来预测未来值的常见方法之一。

附3:freq 参数表示时间序列数据的频率。它可以采用以下几种取值:1. 整数:表示观测的固定频率。例如,如果时间序列数据以每天为单位观测,可以将 freq 设置为 1,表示每天一个观测;2. 字符串:表示时间序列数据的频率字符串。常见的频率字符串包括:"D":每天观测"W":每周观测"M":每月观测"Q":每季度观测"A":每年观测。3.None:表示未指定频率。如果不需要显式地设置时间序列数据的频率,可以将 freq 参数设置为 None。

代码语言:javascript
复制
MLForecast(
    models: Union[
        sklearn.base.BaseEstimator,
        List[sklearn.base.BaseEstimator],
        Dict[str, sklearn.base.BaseEstimator]
    ],
    freq: Union[int, str, pandas._libs.tslibs.offsets.BaseOffset, NoneType] = None,
    lags: Optional[Iterable[int]] = None,
    lag_transforms: Optional[Dict[int, List[Union[Callable, Tuple[Callable, Any]]]]] = None,
    date_features: Optional[Iterable[Union[str, Callable]]] = None,
    differences: Optional[Iterable[int]] = None,
    num_threads: int = 1,
    target_transforms: Optional[List[mlforecast.target_transforms.BaseTargetTransform]] = None
)

附录

1. 防火墙相关操作:(打开6000端口),具体过程不在赘述;

代码语言:python
复制
sudo apt update

2. 数据格式相关操作:将预测的结果转换为列表的形式;

predicts.values.tolist()

3. 参考资料:

mlforecast · PyPI

mlforecast - MLForecast (nixtla.github.io)

mlforecast - Quick start (local) (nixtla.github.io)

mlforecast/mlforecast/target_transforms.py at main · Nixtla/mlforecast · GitHub

GBDT(梯度提升决策树)——来由、原理和python实现 - 知乎 (zhihu.com)

特色查询 | TDengine 文档 | 涛思数据 (taosdata.com)

深入理解LightGBM - 知乎 (zhihu.com)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 环境搭建
  • 算法原理
  • 源代码修改
  • 附录
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档