1 前言

其实我觉得这个部分可能没什么好讲的,但是我确实也遇到一些同学刚入门时搞不懂怎么去做负荷辨识,这篇主要针对这部分同学。本篇用支持向量机(SVM)作为代表,介绍传统机器学习算法在负荷辨识的应用。在介绍完方法后,我也会讨论SVM有哪些有趣的变体。

2 数据集

数据集就是很多个特征向量组成的矩阵,最后一列是标签,如下图所示。

3 SVM

SVM是一种监督学习方法,其输入是一个个代表样本特征的向量,样本空间则是由输入的向量共同张成的空间。基本想法是根据已有的样本集合在样本空间内找到一个超平面,使不同类别的样本处在这个超平面的两边,如图所示。

设所给训练样本集合,其中的x1表示一个样本,其形式是一个向量。训练集合共有m个样本,是各个样本对应的类别,是已知的,这也是SVM属于监督学习的原因。这里关注的是二分类问题,因而只有两个类别,记的第i个样本为正例,的第i个样本为负例。

超平面可以用一个线性方程来描述:

​​​​​​​                                                                (1)

其中,为这个超平面的法向量,决定了超平面的方向,b为偏移项,具有不同的偏移项,但法向量相同的超平面则是互相平行的,如上图中的三条平行直线。假设超平面可以对训练集内不同的样本进行正确的分类,则对,如果,则。对于训练样本,可以令

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                   (2)

如下图所示,超平面上侧的样本都为同一类,的下侧为另一类。要想使划分超平面具有最好的分类性能,属于不同类别的支持向量到超平面的距离之和应该为最大。

于是可以将问题转化为如下的优化问题:

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                              (3)

为了最大化目标函数值,只需最小化 ,上式可等价于:

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                 (4)

这是支持向量机的基本型。

为了求解上式,可以使用拉格朗日乘子法得到其对偶问题并求解:

                                  (5)

其中称为对偶变量。令L(w,b,a)wb的偏导数分别为0,可得

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                                    (6)

将式(6)带入式(5),消去L(w,b,a)的w和b,可得到式(3)的对偶问题

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                           (7)

求解出α后,求出ωb即可得到模型。

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                            (8)

        ω可由式(6)得到,要求b的值,注意到对于任意支持向量(xs,ys),均有

​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                                                                       (9)

b可由任意支持向量求出,但为了使其取值更加健壮,通常求出所有支持向量对应的b,再求平均值,作为最终的b值。因为(3)中包含有不等式约束,则上述过程是在满足KKT条件的情形下进行的,即满足

                                                     (10)

式(10)是一个二次规划问题,易于求解。

可以看出,对任意训练样本(xi,yi),都满足ai=0或者。当ai=0时,那么这个样本将不会出现在最终的模型当中,不会对模型的结果有任何影响,但是其对训练过程是有作用的;如果ai>0,那么,其所对应的样本处在最大间隔边界所对应的超平面上,我们称其为支持向量,会体现在最终的模型之中。这说明了支持向量机的一个很重要的性质,即训练结束之后,大部分的样本都不会出现在最终的模型之中,最终的模型只和支持向量有关。支持向量与训练样本有关,即使是从同一样本中选取不同的子集,训练出的支持向量也会有差别。

3 SVM多分类器

由于SVM通常是作为二分类器使用,而负荷的类型往往不止两种,需要用支持向量机建立多分类器。由于SVM一般被作为二分类器使用,而需要识别的负荷往往不止两种,考虑用支持向量机建立多分类器。使用二分类器建立多分类器的一般方法就是将要实现的多分类器拆分成多个二分类器,通过不同二分类器的组合,最终达到多分类器的目标。常见的拆分方法有“一对一”和“一对多”。

设分类任务有N个类别,对于每一个二分类器,“一对一”方法只选取N类中的两类来进行分类,将任意一类作为正例,另一类作为反例。对于一共N个不同类别,一共需要N(N-1)/2个分类器。最后根据分类的结果“投票”选择出最终分类的结果,即把预测得最多的类别作为最终分类结果。

“一对多”则每个分类器都需要全部样本进行训练,每次以一个类别作为正例,其他全部类别作为反例来进行训练。分类器的个数与样本类别数一致。两种方法的训练样本数和训练的分类器个数度不同,但在多数情况下,由于数据的分布未知,二者表现的性能相接近。

本篇选择采取“一对一”的组合策略。因为负荷识别程序在实际运行时,可能会遇到未曾训练过的负荷特征,需要防止对其进行误识别。若采取“一对多”策略,无法判断是否产生了误识别。采取“一对一”策略,则可以在识别时,通过各个分类器得到每种类别的得分数,如果最终识别出的结果得分数较低,则可以认为这个样本有可能不在已经识别的类别里。可以对其进行记录。

4 代码实现

以4个电器为例,先将不同类的数据分别保存到不同的变量data1,data2,data3,data4中。

n=50;
data_all = load('data_all.txt');
data1=data_all(find(data_all(:,end)==1),:)';
data2=data_all(find(data_all(:,end)==2),:)';
data3=data_all(find(data_all(:,end)==3),:)';
data4=data_all(find(data_all(:,end)==4),:)';

然后选出前n个作为训练集,其他为测试集。

x1 = data1(1:end-1,1:n);
x2 = data2(1:end-1,1:n);
x3 = data3(1:end-1,1:n);
x4 = data4(1:end-1,1:n);

根据1对1的策略,构建每个SVM二分类器的训练集。

trainData12=[x1,x2];
trainData13=[x1,x3];
trainData14=[x1,x4];
trainData23=[x2,x3];
trainData24=[x2,x4];
trainData34=[x3,x4];

开始训练。svmTrain是SVM训练的源代码。

svm_12=svmTrain(trainData12,trainLabel,kertype,C);
svm_13=svmTrain(trainData13,trainLabel,kertype,C);
svm_14=svmTrain(trainData14,trainLabel,kertype,C);
svm_23=svmTrain(trainData23,trainLabel,kertype,C);
svm_24=svmTrain(trainData24,trainLabel,kertype,C);
svm_34=svmTrain(trainData34,trainLabel,kertype,C);

训练结束,现在开始测试。svmTest是SVM测试的源代码。

for i=1:nYt=1;Xt=data2(:,i);                            result12=svmTest(svm_12,Xt,Yt,kertype);result13=svmTest(svm_13,Xt,Yt,kertype);result14=svmTest(svm_14,Xt,Yt,kertype);result23=svmTest(svm_23,Xt,Yt,kertype);result24=svmTest(svm_24,Xt,Yt,kertype);result34=svmTest(svm_34,Xt,Yt,kertype);if result12.Y==1&&result13.Y==1&&result14.Y==1testLabel(i,1)=1;elseif result12.Y==-1&&result23.Y==1&&result24.Y==1testLabel(i,1)=2;elseif result13.Y==-1&&result23.Y==-1&&result34.Y==1testLabel(i,1)=3;elseif result14.Y==-1&&result24.Y==-1&&result34.Y==-1testLabel(i,1)=4;elsetestLabel=-1;disp('测试点不属于这4类中');end
end

核心判据:只有所有分类器都判断待测样本为类别n时,待测样本才是类别n。否则它就是未知样本。

5 难点

负荷辨识是分类任务,因此也会受到分类算法的限制。大部分的分类算法都只能将待测样本分类到已知的类别,但是在NILM这就导致训练好的模型无法检测到未知负荷。但这并不是问题,因为很多人直接不考虑未知负荷了(doge)。再回过头来讲SVM,我之所以以SVM示范,就是因为他在理论上是具备识别未知负荷的能力的。但是1V多不具有。但是SVM模型本身的性能有限,当你的样本种类变多,他的效果就变差了。因此,如何提出一个能识别未知负荷又高识别率的算法至关重要。

何为非侵入式负荷识别-负荷辨识(传统机器学习)相关推荐

  1. 何为非侵入式负荷识别-特征提取

    1 前言 虽然没有人这么在文献中写道,但是我一直都认为事件检测是负荷识别的基础,特征提取是关键,负荷辨识只是一个简单的分类任务.不是说负荷辨识不重要,而是如果事件检测未检测到有电器状态发生变化,那就别 ...

  2. 何为非侵入式负荷识别-事件检测

    1 事件检测方法综述 现有的事件检测方法主要分为两类:规则检测和概率模型检测.还有其他的,但是主要是这两类. 规则检测的方法是直接观察待测信号的变化,提出一种规则作为事件检测判据,规则合理与否就决定了 ...

  3. 何为非侵入式负荷监测-目标检测

    1 前言 上一篇忘记说明一点:组合优化和隐马尔可夫模型我归为一类,但是没有写关于隐马尔可夫模型的内容,这是因为近几年已经很少见到这样的文献了,所以我研究的不多,就不献丑了.本篇是主要是讨论,暂为看到有 ...

  4. 何为非侵入式负荷监测-技术路线

    1 非侵入式负荷监测(NILM)的定义 NILM是指在用户总线入口处安装一台监测设备,通过智能算法将所采集的总负荷电气量分解为各用电器的独立运行数据,并识别各个用电器工作状态以及分析用户用电行为.与侵 ...

  5. 何为非侵入式负荷分解

    0 解答 有同学提出了一些问题,我在这里再说明一次. 1)深度学习算法应用于非侵入式负荷分解是不需要事件检测的吗? 回答:是的,不需要事件检测.深度学习算法应用于负荷辨识的话,必须要有事件检测. 2) ...

  6. 何为非侵入式负荷识别-负荷辨识

    1  前言 在负荷识别中负荷辨识一直是被建模为分类任务,因此一切能用于分类的算法和模型都可以研究.不管是什么算法,只有特征选的好才能最大程度发挥算法的性能.最开始Hart[1]使用了有功功率和无功功率 ...

  7. 何为非侵入式负荷分解-深度学习算法实现

    1 前言 做负荷分解的网络很多,本篇用contrib中的几个网络对AMPds数据集进行训练和测试.本篇内容较短.仅展示部分网络的代码和结果. 2 数据集 AMPds数据集所选电器见下表.电器选择原则如 ...

  8. “泰迪杯”挑战赛 -利用非侵入式负荷检测进行高效率数据挖掘(完整数学模型)

    目录 1 研究背景与意义 2 变量说明 3 问题分析 4 问题一 4.1 数据预处理 4.1.1 降噪处理 4.1.2 数据变换 4.2 负荷特征分析 4.2.1 暂态特征 4.2.2 稳态特征 5 ...

  9. “泰迪杯”挑战赛 - 基于非侵入式负荷检测与分解针对日常电器的电力数据挖掘

    目录 1.挖掘目标 2.分析方法与过程 2.1 问题 1 分析方法与过程 2.1.1 单个设备运行特征 2.1.2 实时用电量计算 2.2 问题 2 分析方法与过程 2.2.1 流程图 2.2.2 基 ...

最新文章

  1. 如何用outlook express 收发邮件
  2. Android 21mod,熊猫博士小镇合集 Mod
  3. open一个绝对路径地址 python_实例15:用Python批量转换doc文件为docx文件
  4. RabbitMQ学习之spring配置文件rabbit标签的使用
  5. Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching
  6. Selenium自动化测试系列文章汇总
  7. 让子弹飞,零成本让你的网站更快一点,boxopened http/3 (QUIC) 协议实战
  8. centos+nginx从零开始配置负载均衡
  9. 活跃android手机,谁能升级2.3?Android手机活跃榜
  10. 【MATLAB】从文件读取:xlsread、load
  11. Oracle中nlssort()函数排序功能
  12. python初学第一节课
  13. CCF中A类和B类会议投稿时间和投稿页面整理(人工智能、网络安全、数据库相关)
  14. [论文总结] 育种理论与基因检测
  15. java中的构造方法必须和类名相同,在Java中,关于构造方法,下列说法错误的是()A、构造方法的名称必须与类名相同B、构造方法可以...
  16. 数据分析实战(一百零一):项目分析思路 —— 用户增长实践经验分享
  17. 如何回复SCI审稿人评审意见(response letter)
  18. C++Primer第五版——习题答案详解(六)
  19. python去除图像光照不均匀_python+opencv——去除图像光照不均匀
  20. 法国iut计算机转专业,法国艺术留学能不能够申请转专业.docx

热门文章

  1. java swing(GUI) MySQL实现的KTV点歌系统源码附带视频指导教程
  2. 服务器https配置
  3. 公众号如何快速涨粉?教你公众号截流技术快速获取粉丝
  4. 全志F1C100s主线linux入坑记录 (7)GBA模拟器移植
  5. HDLC简介及相应hdlc实训
  6. 赛门铁克就“误杀系统文件”一事作官方声明
  7. 国产网络库libhv开源四周年回顾
  8. 特斯拉质量总监离职,竟是被马斯克挚友挖走?
  9. 2021上海酵素展商讯-酵素人必备的常见酵素知识(及时收藏)
  10. CString 字符串操作