有关NILM中的评价指标的解释请看我们另外一篇博文
,下面简单解释一下代码实现,代码为python版本。

import numpy as npdef tp_tn_fp_fn(states_pred, states_ground):  # 定义tp,tn,fp,fn,np.logical_and为逻辑与tp = np.sum(np.logical_and(states_pred == 1, states_ground == 1),axis = 0).reshape([1,-1])  //fp = np.sum(np.logical_and(states_pred == 1, states_ground == 0),axis = 0).reshape([1,-1])fn = np.sum(np.logical_and(states_pred == 0, states_ground == 1),axis = 0).reshape([1,-1])tn = np.sum(np.logical_and(states_pred == 0, states_ground == 0),axis = 0).reshape([1,-1])return tp, tn, fp, fndef recall_precision_accuracy_f1(pred,ground):thresh = [100,50,20,200]  # 电器功率的阈值,超过该功率则该电器处于开状态,否则为关状态,列表中的每一个元素代表了一种电器的阈值sum_samples = pred.shape[0]  # 预测序列的总长pr = np.array([0 if pred[i][j] < thresh[j] else 1 for i in range(pred.shape[0]) for j in range(pred.shape[1])]).reshape([pred.shape[0],pred.shape[1]]) # 利用阈值将实际的消耗功率转换成0-1状态,这个是预测序列的转换gr = np.array([0 if ground[i][j] < thresh[j] else 1 for i in range(ground.shape[0]) for j in range(pred.shape[1])]).reshape([pred.shape[0],pred.shape[1]]) # 真实序列的转换tp,tn,fp,fn = tp_tn_fp_fn(pr,gr)  #根据真实序列和预测序列的0-1状态值得到tp,tn,fp,fn,用于评估指标的计算res_recall = recall(tp,fn)res_precision = precision(tp,fp)res_f1 = f1(res_precision,res_recall)res_accuracy = accuracy(tp,tn,sum_samples)return (res_recall,res_precision,res_accuracy,res_f1)def recall(tp,fn):  #召回率return tp / (tp + fn)def precision(tp,fp): # 精确度return tp / (tp + fp)def f1(prec,rec): // f1值return 2 * (prec * rec) / (prec + rec)def accuracy(tp,tn,samples):  #准确率return (tp + tn) / samplesdef mean_absolute_error(pred,ground):  #平均绝对误差sum_samples = pred.shape[0]  # 预测序列的总长total_sum = np.sum(abs(pred - ground),axis = 0)return total_sum / sum_samplesdef get_sae(pred,ground):  # signal aggregate errorsample_period = 60  # 采样周期为60s,这个根据实际数据的采样周期进行相应的修改。如REDD中的采样周期有3s的,wikienergy数据的采样周期为60s,UK—DALE的采样周期又是不同的。r = np.sum(ground * sample_period * 1.0 / 3600,axis = 0)rhat = np.sum(pred * sample_period * 1.0 / 3600,axis = 0)return np.abs(r - rhat) / np.abs(r)

我的输入数据是这样的,pred和groud 均是numpy格式的ndarray格式的矩阵或者数组,如果是矩阵的话,矩阵的每一列表示的是单个电器的历史消耗功率值,如pred.shape = (40000,5),40000表示的是历史的测试样本的个数,5表示的是五种电器。

电荷负载分解(NILM)评价指标代码详解相关推荐

  1. 非侵入式电荷负载分解NILM中的评价指标

    非侵入式电荷负载分解,即将一个家庭中的总功率数据分解到家庭中的每个电器的消耗功率上.简单理解,就是将总功率的曲线分解成各个电器的曲线.那么我们以什么为评价指标来评估分解性能的好坏呢? 下面简单介绍下几 ...

  2. LU分解(是/否部分主元法)+ 施密特(Schmidt)QR分解 + 吉文斯(Givens)QR分解 + Household QR分解 代码详解,可直接运行版本复测试用例(java8版)

    1)2)LU分解(是/否部分主元法)+ 3)施密特(Schmidt)QR分解 + 4)吉文斯(Givens)QR分解 + 5)Household QR分解 代码详解 可直接运行版本复测试用例(java ...

  3. 非侵入式电荷负载分解(Non-intrusive load monitoring,NILM)---- NILMTK(安装教程)

    前段时间在做"非侵入式电荷负载分解"的项目,非侵入式电荷负载分解是开展节能工作的基础,加强能耗监控尤其是电力能耗的监测工作对提高能源利用率.实现能源的可持续发展.建设节约型社会和环 ...

  4. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  5. sift计算描述子代码详解_代码详解——如何计算横向误差?

    在路径跟踪控制的论文中,我们常会看到判断精确性的指标,即横向误差和航向误差,那么横向误差和航向误差如何获得? 在前几期代码详解中,参考路径和实际轨迹均由To Workspace模块导出,如图所示: 那 ...

  6. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm

    自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问题是一些比较基本的问题,由于时间的缘故,不会一一的为大家回复,如果有不明白的,希望大家勤自学!本系列虽然不难,但 ...

  7. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  8. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  9. 推荐系统之DIN代码详解

    推荐系统之DIN代码详解 import sys sys.path.insert(0, '..') import numpy as np import torch from torch import n ...

最新文章

  1. 图像边缘检测,检测亦或简化
  2. 软件设计师考试上午真题 考前速记
  3. [Abp 源码分析]ASP.NET Core 集成
  4. android adb 模拟来电,在Android模拟器中模拟GPS、打电话、发短信……
  5. BG2EE 术士solo
  6. 字节跳动教育裁员处理还是挺仗义的!
  7. 通过iMazing将Safari浏览器的书签导出至电脑
  8. OpenCV相机帧率低以及花屏问题
  9. 求一个容器的最值的索引_初中几何最值——瓜豆原理模型分析
  10. 基于JAVA《Python程序设计》教辅系统计算机毕业设计源码+系统+lw文档+部署
  11. LAMMPS学习总结2
  12. 小米路由器3c 虚拟服务器,小米路由器怎么设置_小米路由器3c设置教程-WIFI之家...
  13. epoint:TreeView
  14. swift学习之数组、字典和字符串
  15. 最牛叉的街机游戏合集 模拟器
  16. 苹果使用过程中的小技巧(合集)
  17. 小白推荐系统扫盲记——数据分析
  18. JavaScript ES12新特性抢先体验
  19. 使用nodeJS写一个简单的小爬虫
  20. 苹果开发者续费以及查看账号到期时间

热门文章

  1. 關於python 2.x中文字編碼的簡單說明
  2. Task5 愤怒,精力水平,智力和宜人性 路径分析
  3. 在CSDN逮到一个阿里10年老Java开发,聊过之后收益良多...
  4. 坚持#第394天~佳能打印机IP7280开不了机的十多天的折腾终于有希望了
  5. Android 3.simpleNote
  6. 解决python找不到PCV的问题
  7. ThreeJS思维导图总结
  8. Ray Tracing in One Weekend(中文翻译)
  9. postgresql数据库迁移timescale插件问题处理
  10. error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly before end of the underlying st...