配置了NILMTK包的环境之后,想找数据测试一下,在NILMTK官网的API Docs里边发现dataset_converters模块中有内置的数据集处理函数,如图:

将数据转换成HDF文件,这些数据都是比较优秀的,其中,常用的数据集是REDD和UK_DALE。

1. REDD数据集

目前版本的下载地址为: http://redd.csail.mit.edu,需要向作者发送邮件,才能获取用户名和密码进行下载!

论文为:J. Zico Kolter and Matthew J. Johnson. REDD: A public data set for energy disaggregation research. In proceedings of the SustKDD workshop on Data Mining Applications in Sustainability, 2011. [pdf]

数据集的文件为:

文件主要包含低频功率数据和高频电压电流数据

low_freq:1Hz功率数据

high_freq:校准和分组之后的电压电流波形数据

high_freq_row:原生电压电流波形数据

(1)low_freq的文件目录

总共收集了6个家庭的数据,labels记录了每个channel的设备类型,channel是记录每个channel的UTC时间戳的功率数据。

labels:

channel(一秒一个点):

(2)high_freq的文件目录

总共收集了6个家庭的数据,current_1记录了第一电源的电流数据,current_1记录了第二电源的电流数据,voltage记录了电压数据。

需要注意的是:

a、十进制的UTC时间戳,与低频的UTC时间戳是一样的格式,但是这个允许有小数部分。

b、循环计数,虽然它在文件中表示为双精度,但实际上它是一个整数,表示该特定波形保留多少交流周期。

c、在等间隔的周期中,275个十进制数值,表示波形的数值

下载完数据集之后,可通过dataset_converters 的函数将数据改为HDF格式:

from nilmtk.dataset_converters import convert_reddconvert_redd(r'C:\Users\admin\Anaconda3\nilm_metadata\low_freq',r'C:\Users\admin\Anaconda3\nilm_metadata\low_freq\redd_low_new.h5')

2. REDD数据集的使用

a、负荷分解算法

通过NILMTK官网的API知道负荷分解包的算法有组合优化(CombinatorialOptimisation)、因子隐马尔可夫(FHMM)、Hart 1985(Hart 1985 algorithm),常用的是CO和FHMM。

b、负荷分解实现

以下例子是通过CO和FHMM计算的,文件获取在:

CO:http://nilmtk.github.io/nilmtk/master/_modules/nilmtk/disaggregate/combinatorial_optimisation.html#CombinatorialOptimisation

FHMM:nilmtk.legacy.disaggregate文件下的fhmm_exact文件。

  • 获取数据:
from __future__ import print_function, division
import pandas as pd
import numpy as np
from nilmtk.dataset import DataSet
#from nilmtk.metergroup import MeterGroup
#from nilmtk.datastore import HDFDataStore
#from nilmtk.timeframe import TimeFrame
from nilmtk.disaggregate.combinatorial_optimisation import CombinatorialOptimisation
from nilmtk.legacy.disaggregate.fhmm_exact import FHMMtrain = DataSet('C:/Users/admin/PycharmProjects/nilmtktest/low_freq/redd_low.h5')  # 读取数据集
test = DataSet('C:/Users/admin/PycharmProjects/nilmtktest/low_freq/redd_low.h5') # 读取数据集
building = 1  ## 选择家庭house
train.set_window(end="30-4-2011")  ## 划分数据集,2011年4月20号之前的作为训练集
test.set_window(start="30-4-2011") ## 四月40号之后的作为测试集## elec包含了这个家庭中的所有的电器信息和总功率信息,building=1-6个家庭
train_elec = train.buildings[1].elec
test_elec = test.buildings[1].electop_5_train_elec = train_elec.submeters().select_top_k(k=5)  ## 选择用电量排在前5的来进行训练和测试

选取了第一个家庭,用电量在前5的电器数据进行测试。

  • 计算:
def predict(clf, test_elec, sample_period, timezone):   ## 定义预测的方法pred = {}gt= {}#获取总的负荷数据for i, chunk in enumerate(test_elec.mains().load(sample_period=sample_period)):chunk_drop_na = chunk.dropna()   ### 丢到缺省值pred[i] = clf.disaggregate_chunk(chunk_drop_na)  #### 分解,disaggregate_chunk #通过调用这个方法实现分解,这部分代码在下面可以见到gt[i]={}  ## 这是groudtruth,即真实的单个电器的消耗功率for meter in test_elec.submeters().meters:# Only use the meters that we trained on (this saves time!)    gt[i][meter] = next(meter.load(sample_period=sample_period))  gt[i] = pd.DataFrame({k:v.squeeze() for k,v in gt[i].items()}, index=next(iter(gt[i].values())).index).dropna()   #### 上面这一块主要是为了得到pandas格式的gt数据# If everything can fit in memorygt_overall = pd.concat(gt)   gt_overall.index = gt_overall.index.droplevel()pred_overall = pd.concat(pred)pred_overall.index = pred_overall.index.droplevel()# Having the same order of columnsgt_overall = gt_overall[pred_overall.columns]#Intersection of indexgt_index_utc = gt_overall.index.tz_convert("UTC")pred_index_utc = pred_overall.index.tz_convert("UTC")common_index_utc = gt_index_utc.intersection(pred_index_utc)common_index_local = common_index_utc.tz_convert(timezone)gt_overall = gt_overall.ix[common_index_local]pred_overall = pred_overall.ix[common_index_local]appliance_labels = [m.label() for m in gt_overall.columns.values]gt_overall.columns = appliance_labelspred_overall.columns = appliance_labelsreturn gt_overall, pred_overallclassifiers = { 'CO':CombinatorialOptimisation(),'FHMM':FHMM()}   ### 设置了两种算法,一种是CO,一种是FHMM
predictions = {}
sample_period = 120  ## 采样周期是两分钟
for clf_name, clf in classifiers.items():print("*"*20)print(clf_name)print("*" *20)clf.train(top_5_train_elec, sample_period=sample_period)  ### 训练部分gt, predictions[clf_name] = predict(clf, test_elec, 120, train.metadata['timezone'])

先用clf.train训练这5种电器的特征规律,然后在用总的功率数据进行各种电器特征分解。gt记录了每个电器的功率数据,采样周期是两分钟一个点,后边根据预测的电器种类选取了用电量排名比较高的5种电器。

predictions变量记录了两个算法的计算结果:

  • 评估:
def compute_rmse(gt, pred):   ### 评估指标 rmsefrom sklearn.metrics import mean_squared_errorrms_error = {}for appliance in gt.columns:rms_error[appliance] = np.sqrt(mean_squared_error(gt[appliance], pred[appliance])) ## 评价指标的定义很简单,就是均方根误差return pd.Series(rms_error)
rmse = {}
for clf_name in classifiers.keys():rmse[clf_name] = compute_rmse(gt, predictions[clf_name])
rmse = pd.DataFrame(rmse)

计算结果为:

参考博客:https://blog.csdn.net/baidu_36161077/article/details/81144037

NILMTK——经典数据集REDD介绍和使用相关推荐

  1. NILM(非侵入式电力负荷监测)学习笔记 —— 使用NILMTK Toolkit,REDD数据集,CO和FHMM两种算法

    (本文最后,提供整个工程下载) 准备工作 本篇的内容都是基于我前两篇的环境,和数据集进行的. NILM(非侵入式电力负荷监测)学习笔记 -- 准备工作(一)配置环境NILMTK Toolkit NIL ...

  2. 深度学习有哪些经典数据集?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 很多朋友在学习了神经网络和深度学习之后,早已迫不及待要开始动手实战 ...

  3. 深度学习经典数据集汇总

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 很多朋友在学习了神经网络和深度学习之后,早已迫不及待要开始动手实战 ...

  4. 【深度学习】深度学习经典数据集汇总

    深度学习数据集 Author:louwill From:深度学习笔记 很多朋友在学习了神经网络和深度学习之后,早已迫不及待要开始动手实战了.第一个遇到的问题通常就是数据.作为个人学习和实验来说,很难获 ...

  5. CIC-IDS数据集特征介绍

    1.简介 通信安全机构(CSE)与加拿大网络安全研究所(CIC)合作项目,该项目对自 1998 年以来现有的 11 个数据集的评估表明,大多数数据集(比如经典的 KDDCUP99,NSLKDD 等)已 ...

  6. 【自然语言处理】ELMo, GPT等经典模型的介绍与对比

    接上一篇:BERT,Transformer的模型架构与详解 文章目录 2. ELMo, GPT等经典模型的介绍与对比 2.1 认识ELMo 学习目标 什么是ELMo ELMo的架构 ELMo的预训练任 ...

  7. 目标检测coco数据集点滴介绍

    目标检测coco数据集点滴介绍 COCO数据集介绍 MS COCO 是google 开源的大型数据集, 分为目标检测.分割.关键点检测三大任务, 数据集主要由图片和json 标签文件组成. coco数 ...

  8. 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础

    ---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...

  9. nuScenes数据集详细介绍

    nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍.例如,nuScenes激光雷达的数据格式,点云包含哪几种属性.再比如,sample文件夹和sweeps文件夹 ...

最新文章

  1. 1乘到100 python_python每日一练之如何计算你的应发奖金?
  2. redis的持久化方式有哪些?
  3. MyBtis快速入门
  4. 【Servlet】JSP学习-概念和运行原理
  5. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持
  6. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
  7. log4net日志文件的应用
  8. ORACLE EBS CUX用户的创建(转)
  9. python Only timezones from the pytz library are supported
  10. 美食短视频怎么拍才会吸引人?美食+定位,助你吸粉引流
  11. java中bitconverter_BitConverter.GetBytes 方法以什么顺序返回字节数组
  12. oss文件服务器是什么,对象存储oss是什么
  13. 根因定位论文:Root Cause Analysis of Anomalies of Multitier Services in Public Clouds
  14. Android名片识别
  15. 用c语言编写打印机输出程序,C语言编写银行打印程序实例参考
  16. 恶意软件通信协议的应用现状分析
  17. 启用vsftpd日志及其解读
  18. 全局负载均衡GSLB
  19. 具有连续调制光栅区域的光波导优化
  20. mysql compact_[MySQL]InnoDB行格式剖析_MySQL - compact

热门文章

  1. Windows Phone 7实现图片数据绑定
  2. 什么MySQL语句在存储过程体中是合法的
  3. C#——image与byte数组的转换
  4. Apache配置SSL证书服务器傻瓜步骤
  5. 数据结构与算法--8.二叉树的基础知识
  6. 学成在线--14.使用RabbitMQ完成页面发布
  7. c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现
  8. mac svn工具_Cornerstone 4 for mac(svn管理工具)
  9. Ubantu下使用vi时,方向键变字母输出、退格键无法删除字符的解决办法
  10. python os读取文件名_Python3基础 os.path.splitext 处理文件名,得到文件名+扩展名