来源:https://github.com/numenta/nupic/tree/master/examples/opf/clients/hotgym/prediction/one_gym#running
这个文件夹中的程序是“一个热门的Gym预测”教程的完整源代码。您可以在下面的screencast中继续构建本教程的源代码。
1、前提
“热体育馆”的示例应用程序已经存在了很长时间,它是NuPIC实际工作的第一个实际应用程序。所使用的数据是澳大利亚一家健身房的真实能耗数据。它已经每小时聚合一次,所以rec-center-hourly.csv的输入文件只包含一个时间戳和一个浮点值,用于在该小时内的能源消耗。
本教程展示了如何使用该数据文件,创建一个群集来找到最佳的NuPIC模型参数,然后使用这些模型参数创建一个NuPIC模型,并将数据输入其中,获得每一行输入到NuPIC中的数据的1步前预测。从本质上讲,这个例子展示了NuPIC如何预测未来一小时的建筑能耗。
2、项目描述
这是一个程序,由使用NuPIC的在线预测框架的一个简单的Python脚本集合组成。程序执行在下面的程序部分中进行了描述。这个程序执行两个步骤,以获得来自rec-center-hourly.csv文件的输入数据的预测,如下所述。还有一个可选步骤(清理),它可以在之前的步骤运行之后从文件系统中移除一些文件。
3、项目阶段
3.1 对输入数据进行群集
群集并不完美,但它是我们为特定数据集找到最佳的nupic模型参数的一种基本方式,它只需要完成一次,并且可以在数据的一个子集上执行。NuPIC对rec-center-hourly.csv中的结构和数据类型一无所知,所以我们必须定义这个数据。
3.1.1群描述
群集过程需要初始的群集描述,该描述定义输入数据,并限制在群集过程中必须发生的一些排列。本教程应用程序的群集描述在swarm_description.py文件中,如下所示:
{
"includedFields": [
{
"fieldName": "timestamp",
"fieldType": "datetime"
},
{
"fieldName": "kw_energy_consumption",
"fieldType": "float",
"maxValue": 53.0,
"minValue": 0.0
}
],
"streamDef": {
"info": "kw_energy_consumption",
"version": 1,
"streams": [
{
"info": "Rec Center",
"source": "file://rec-center-hourly.csv",
"columns": [
"*"
]
}
],
},
"inferenceType": "TemporalMultiStep",
"inferenceArgs": {
"predictionSteps": [
1
],
"predictedField": "kw_energy_consumption"
},
"iterationCount": -1,
"swarmSize": "medium"
}
includedFields:这些对应的是在搜索模型参数时集群将使用的数据列。需要一个fieldName和fieldType。在这个例子中,我们为kw_energy_consuption数据列指定了最小值和最大值,这将帮助集群逻辑限制它所做的工作的数量,以找到最佳的参数。
streamDef:告诉群集输入数据文件的位置。您必须将“file://”前缀放在到streamssource中定义的数据文件的路径之前。路径可以是相对的,也可以是绝对的。
inferenceType:表明我们希望基于时间的多步预测评估。其他推理类型包括多步、非时间多步和时间异常(Multistep,NontemporalMultistep, andTemporalAnomaly)。
inferenceArgs:定义哪个字段应该预测,应该未来该预测该域的需多少个步骤。在predictionSteps可以指定几个提前预测,但请注意,更多预测步骤将减缓NuPIC执行。
iterationCount:多少行输入数据文件内群。如果-1,假设所有行。
swarmSize:可以是小、中等和大。小型集群只用于调试。中等的蜂群几乎都是你想要的。大的蜂群需要很长时间,但是比中等的要好一点。
3.1.2群的结果
(1)工作文件(垃圾)
一旦群集完成,您将在工作目录中看到一个群集文件夹。它包含群集的内部工作方式,其中包括用于高级群集的实用程序(超出本教程的范围)。本教程应用程序将所有的垃圾文件放入群集文件夹中,主要是为了保持工作目录的整洁。当您在群集CLI中运行集群时,所有这些cruft都被转储到当前工作目录中。
(2)模型参数(黄金!)
在model_params目录中,您还会看到一个python文件出现,称为rec-center-hourly_model_params.py。这个文件包含一个配置对象,用于群集为输入数据找到的最佳模型。这个配置对象用于在下一步中创建NuPIC模型。
4 运行NuPIC模型
群集的主要结果是最佳的模型配置(详细介绍)。一旦确定了最佳的模型参数,就可以创建一个新的NuPIC模型对象,将数据传递给它,并可以检索预测。在程序的这一阶段,创建了一个新模型,并且每小时刷新一次。csv输入数据文件逐行输入到模型中。对于每行提要,将从NuPIC模型中检索下一个能耗值的预测,并将其写入文件或显示在屏幕上的图表中。
5 清理(可选)
这个阶段只是从文件系统中删除在以前步骤中创建的所有文件构件,并为以后的程序执行提供一个干净的记录。
6 运行程序
这个程序由3个可以从命令行执行的Python脚本和几个助手模块组成。可执行脚本是swarm.py、run.py和cleanup.py。每个脚本都打印出执行时所执行的操作的描述。
有两个主要步骤:群集和运行。这些步骤的描述都在上面。
6.1群集
/ swarm.py
硬编码以运行本教程应用程序的rec-center-hourlycsv输入。对于一个中等规模的集群来说,可能需要相当长的时间,这取决于您的硬件资源。
6.2运行
/ runpy(——情节)
如果没有指定plot,则将预测写入当前工作目录中的rec-center-hourly_out.csv文件。如果——plot被指定,将尝试使用matplotlib在屏幕上绘图。如果没有安装matplotlib,这将严重失败。
6.3清理
/ cleanup.py
前面的步骤在文件系统中保留了一些构件。运行此命令将其清理干净并从头开始。