使用机器学习预测温度

数据挖掘 机器学习 Python scipy
2021-10-13 10:52:31

我是 ML 的初学者,我想创建一个智能恒温器,在从与用户的交互中收集到足够的数据后,它将开始自行设置家庭温度。

到目前为止,我得到的是允许用户设置温度的硬件原型,同时它将 Environment 和 UserSetTemperature 发布到 ThingSpeak(以便轻松存储数据以供以后访问)

另一部分是一个 python 算法,它从 ThingSpeak 获取数据并将其转换为 Pandas DataFrame。

数据框如下所示:

timeStamp                      environment_temp    user_set_temp  

2018-05-27T00:12:43Z               20            21              
2018-05-27T00:17:27Z               20            22                 
2018-05-27T00:17:59Z               20            24                
2018-05-27T00:20:01Z               20            21                  
2018-05-27T00:23:14Z               20            24                 
2018-05-28T09:39:07Z               20            22             
2018-05-28T10:40:17Z               20            23               
2018-05-28T20:12:47Z               20            25              
2018-05-28T20:14:16Z               23            25               
2018-05-30T20:29:30Z               18            24  

这就是我卡住的地方。我不知道如何将这些数据与 ML 库一起使用,以便预测在环境温度为 x 时应如何设置温度。

我尝试使用 sklearn train_test_split() 和 LinearRegression(),但没有显着结果。我真的不知道如何使用这些数据

每一个建议都将受到高度赞赏!!

4个回答

我不建议继续使用您知道可能是错误的数据。

查看您当前的数据,您使用线性回归得到不好结果的原因是因为它们之间的关系对于当前数据不是线性的。例如。对于相同的预测变量值(即 environment_temp),响应(即 user_set_temp)存在很大差异。

首先,从本地天气数据中获取您记录的时间戳的正确温度,以用此数据替换环境温度,直到您使用原始记录的 environment_temp 解决问题。当您纠正问题时,我建议您同时使用天气和环境温度来预测,因为一个人可能会根据两者的组合来设置温度。

在你得到一个很好的代表性数据后,这应该是一个合理的程序来帮助你预测温度:

  1. 单变量时间序列的探索性数据分析: 这将帮助您观察数据中的模式,这将帮助您决定从您拥有的记录的时间戳(步骤 2)中设计/创建哪些新功能。此外,请查看 acf/pacf 图以帮助找出可能帮助您更好地预测的数据滞后。拟合一个基本的单变量模型,如 STL 或 ARIMA 模型,以获得一个良好的预测基础模型(您将与此模型比较新模型以了解它们的性能)

  2. 特征工程:步骤 1中确定的一天中的时间、一周中的一天、一个月中的一周等此外,寻找可能帮助您的算法找到模式的任何其他功能。

  3. 回归模型:使用 RandomForest、Gradient Boosting 和 RNN-LSTM 等高级算法进行测试,以检查它们之间的表现以及基础模型的表现。

我强烈建议将递归神经网络用于您的目的,因为它们具有预测时间序列的能力,因为它们具有固有的记忆。

可以在这里找到适合您的完美教程。我相信它会对你有很大帮助:)

在我看来,RNN 计算量太大。您必须在云服务或 GPU 上运行它。

此外,我认为根据环境温度,您无法预测用户想要的温度。您将需要额外的数据,例如湿度,因为您必须了解用户对温度的感觉,这取决于几个因素。如果这不是假数据,您显然可以看到没有相关性。而且好像你只记录恒温器温度变化时的环境温度。这不足以进行预测。

如果您没有任何其他数据,我建议您也计算特定时间内温度变化的梯度。

如果您有更多数据,我建议您从很好地绘制数据开始以获得印象。然后我会尝试多元线性回归和感知器或多层感知器。

让我们考虑一下:

t : timeStamp
x : environment_temp
y : user_set_temp 
  1. 如果您测试数据以查看它是否来自固定过程,这将很有帮助。应该在预测中t发挥重要作用y所以,如果你想要一个好的预测模型,你应该保留并使用这些信息x

  2. 你有一个时间序列,所以你应该考虑一个 time-window( w):w=1当你只使用 current(t,x)来设置 current时y如果您选择w=10,这意味着您使用 10 个过去的观察(t,x)来预测当前y因此,您可以创建一个新数据集,用于根据所选窗口大小训练模型:矩阵(大小M×W) 作为您的数据和向量(大小 M) 作为标签。

  3. 目前,处理此类数据的最佳选择可能是ConvNetLSTM看看这篇博文这不是高维数据,您可以找到并拟合一个对于在边缘设备上运行不太重的模型。

最后,采样率也很重要。您是按分钟收集数据还是仅在用户改变温度时记录数据?这很重要,因为我们通常将前一种情况命名为“时间序列”,将后一种情况命名为“顺序”数据。对于每种情况,技术有时会有所不同。