1.一种基于限值学习的异常电量数据辨识方法,其特征在于,包括如下步骤:步骤1,采集历史电量数据并分析异常电量数据类型,所述异常电量数据类型包括包括离群值和缺失值,所述离群值包括不刷新值、跳变值和越限值;
步骤2,根据步骤1的分析结果,通过OneClassSVM算法实现限值学习,然后在此基础上校核历史电量数据中的异常电量数据并通过DBSCAN算法校核历史电量数据中的离群值;
步骤3,在DBSCAN算法的基础上结合LOF算法,实现对多维电量数据样本的离群值辨识;
步骤1包括:
步骤1‑1,在进行异常电量数据校核前,需要对从电量数据平台中采集的历史电量数据进行如下判定:判定电量数据同天曲线是否为同一值,全部为同一值则判定全部为缺失值;
判断是否为光伏量测,如果是光伏量测,只校核大于0的电量数据值,然后进行如下判定:如果光伏量测历史电量数据的天数在五天以上,则需要判定电量数据最大值出现时刻和数据分布两个因素,根据最大值出现的时间点判断,同一天出现两个以上最大值的时间点只取一个数据,如果光伏量测历史电量数据的的天数中,最大值时刻分布区间在10:00~
14:00之间的天数是80%以上且从08:00‑18:00之间的数值之和占比全天电量值之和80%以上,则判定光伏量测数据正常,进行步骤1‑2,如果不正常则需要校正;如果光伏量测历史电量数据的天数少于五天,则判断光伏量测数值在时间区间8:00~18:00的占比,如果从时间区间08:00‑18:00之间的数值之和占比全天电量值之和80%以上,则判断光伏量测数据正常,进行步骤1‑2,如果不正常则需要校正;
如果不是光伏量测,则直接执行步骤1‑2;
步骤1‑2,如果电量数据表中显示为空值NULL,则为缺失值;
当K=1时,表示电量数据量测点相邻一位数据,即如果连续两个电量数据量测点的电量值一样则判定两个点都是不刷新值;K=2时,表示电量数据量测点相邻两位数据,如果连续三个电量数据量测点的值一样即判定三个点都是不刷新值;
如果一个电量数据量测点的值比前一个电量数据量测点的值大于K倍,分如下四类:一个电量数据量测点比前一个电量数据量测点的值大于K倍;一个电量数据量测点和前后采样的差均大于K倍;一个电量数据量测点的值比前一个电量数据量测点的值大于K倍标准差;一个电量数据量测点和前后采样的差大于K倍标准差;如果属于以上任一类,则为跳变值;
如果一个电量数据量测点的值超过标准的总上下限,则为越限值,对于越限值,如果原来无标记则标记为越限值,如果已经被标记为跳变值,则不覆盖前面的的标记;
步骤2包括如下步骤:
步骤2‑1,基于OneClassSVM算法对历史电量数据进行限值学习,获得限值学习表;
步骤2‑2,通过步骤1的方法校核历史电量数据中的缺失值、不刷新值、跳变值和越限值,通过DBSCAN聚类法校核历史电量数据中的离群值;
步骤2‑1包括:
d
步骤2‑1‑1,对历史电量数据进行SVDD判定:对于电量数据样本{x|xi∈r ,i=1,2,…,m},设定SVDD产生的超球体参数,超球体参数包括中心o和对应的超球体半径r,r>0,超球体d体积V(r)被最小化,x为电量数据样本对象,m为对象个数,xi表示第i个电量数据样本,r 为超球体参数对应的半径值;所有电量数据样本xi到中心的距离小于r,构造一个惩罚系数为C的松弛变量ζi,优化问题如下所示:ζi≥0,i=1,2,3...,m (2)
||xi‑o||2≤r+ζi=1,2,3...,m (3)ζi≥0,i=1,2,3...,m (4)
采用拉格朗日对偶求解之后,判断新的数据点X是否在内,如果X到中心的距离小于或者等于半径r,则不是异常电量数据值,如果在超球体以外,则是异常电量数据值;
步骤2‑1‑2,在Python中的机器学习库Sklearn中,采用SVM包里面的OneClassSVM来做异常点检测,设置异常值比例Nu=0.005,设置kernel=rbf为基于半径的函数,设置rbf内核系数gamma=0.001;通过步骤2‑1‑1的方法对历史电量数据进行SVDD判定时,如果正常数据超过历史电量数据的一半,则SVDD判定成功,即以正常数据的最大值和最小值分别作为上限值和下限值;如果SVDD判定不成功,就采用3倍标准差作为上下限值;
步骤2‑2包括如下步骤:
步骤2‑2‑1,校核历史电量数据中的异常电量数据,识别出缺失值、不刷新值、跳变值和越限值四种异常电量数据;
步骤2‑2‑2,通过DBSCAN聚类法校核历史电量数据中的离群值;
步骤2‑2‑2包括如下内容:
DBSCAN算法描述如下:
输入:从电量数据平台中采集电量底码数据文件,将其导入到mysql数据库,领域半径Eps,邻域中数据对象数目阈值MinPts;
输出:密度联通簇;
处理流程如下:从数据集中任意选取一个数据对象点p;如果对于参数Eps和MinPts,所选取的数据对象点p为核心点,则找出所有从p密度可达的数据对象点,形成一个簇;如果选取的对象点p是边缘点,选取另一个数据对象点;重复上述过程,直到所有点被处理;DBSCAN2
算法的计算复杂的度为O(n),n为数据对象的数目;具体实现步骤如下:步骤a1,读取mysql数据库中电量底码数据文件,并解析,得到样本点;
步骤a2,利用欧式距离计算电量底码数据文件E中各个样本点间的欧几里德距离;
步骤a3,计算每个样本点的K‑距离,并输出排序后的距离;
步骤a4,选取合适半径Eps;
步骤a5,利用半径Eps和MinPts值找到所有核心点,建立核心点邻域点与其映射的集合,即将所有在最小半径范围内的点并入其核心点映射集合;
步骤a6,找到密度可达的核心点并入集合,不可达的即为异常点;
步骤3包括如下步骤:
步骤3‑1,通过检查电量数据集中每个对象的∈‑邻域寻找聚类:在样本空间中,存在对象o,他与对象p之间的距离基座为d(p,o),对于正整数k,对象p的第k距离记作k‑distanceξ,已知对象P的第k距离,则与对象p之间距离小于等于k‑distanceξ的对象集合称为对象p的第k距离邻域,即点p的第k距离邻域记作:|Nk(p)|;对象p相对于对象o的可达距离为:reach‑dist(p,o),点o到点p的第k可达距离定义为:reach‑distancek(p,o);
通过下式计算对象p的局部可达密度lrdk(p):
对象p的局部可达密度定义为p的k最近邻点的平均可达密度的倒数,即点p的第k邻域内点到p的平均可达距离的倒数;
最后计算对象p的局部离群因子LOFk(p):
其中,lrdk(o)即为对象o的局部可达密度;
给定邻域中对象的最小个数Minpts,给定对象半径ε、离群因子阈值ζ,电量数据表中含有n个对象,计算所有对象的局部离群因子;对于每个数据点,计算它与其它所有数据点的距离,并按从近到远排序;对于电量数据表中的每个数据点,找到它的|Nk(p)|,计算局部离群因子LOF,通过判断LOF是否接近于ζ来判定是否是离群因子,如果LOF大于离群因子阈值ζ,则判定是离群点,否则是正常点。