1.构建窃漏电用户识别模型
在专家样本准备完成后,需要划分测试样本和训练样本,随机选取20%作为测试样本,剩下的作为训练样本。窃漏电用户识别可通过构建分类预测模型来实现,比较常用的分类预测模型有LM神经网络和CART决策树,各个模型都有各自的优点,故采用这两种方法构建窃漏电用户识别,并从中选择最优的分类模型。构建LM神经网络和CART决策树模型时输入项包括电量趋势下降指标、线损类指标和告警类指标,输出项为窃漏电标识。
(1)数据划分
对专家样本随机选取20%作为测试样本,剩下的80%作为训练样本。其代码如代码清单6-2所示。
代码清单6-2 原始数据分为训练数据测试数据
#-*- coding: utf-8 -*- import pandas as pd #导入数据分析库 from random import shuffle #导入随机函数shuffle,用来打算数据 datafile = '../data/model.xls' #数据名 data = pd.read_excel(datafile) #读取数据,数据的前三列是特征,第四列是标签 data = data.as_matrix() #将表格转换为矩阵 shuffle(data) #随机打乱数据 p = 0.8 #设置训练数据比例 train = data[:int(len(data)*p),:] #前80%为训练集 test = data[int(len(data)*p):,:] #后20%为测试集
(2)LM神经网络
使用Keras库为我们建立神经网络模型。设定LM神经网络的输入节点数为3,输出节点数为1,隐层节点数为10,使用Adam方法求解。对于激活函数,在隐藏层使用Relu(x)=max(x,0)作为激活函数,实验表明该激活函数能够大幅提高模型的准确率。训练样本建模的混淆矩阵见图6-8,可以算得分类准确率为(161+58)/(161+58+6+7)=94.4%,正常用户被误判为窃漏电用户占正常用户的7/(161+7)=4.2%,窃漏电用户被误判为正常用户占正常窃漏电用户的6/(6+58)=9.4%。构建LM神经网络模型的代码如代码清单6-3所示。
代码清单6-3 构建LM神经网络模型代码(接6-2)
#构建LM神经网络模型 from keras.models import Sequential #导入神经网络初始化函数 from keras.layers.core import Dense, Activation #导入神经网络层函数、激活函数 netfile = '../tmp/net.model' #构建的神经网络模型存储路径 net = Sequential() #建立神经网络 net.add(Dense(3, 10)) #添加输入层(3节点)到隐藏层(10节点)的连接 net.add(Activation('relu')) #隐藏层使用relu激活函数 net.add(Dense(10, 1)) #添加隐藏层(10节点)到输出层(1节点)的连接 net.add(Activation('sigmoid')) #输出层使用sigmoid激活函数 net.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = "binary") #编译模型,使用adam方法求解 net.fit(train[:,:3], train[:,3], nb_epoch=1000, batch_size=1) #训练模型,循环1000次 net.save_weights(netfile) #保存模型 predict_result = net.predict_classes(train[:,:3]).reshape(len(train)) #预测结果变形 '''这里要提醒的是,keras用predict给出预测概率,predict_classes才是给出预测类别,而且两者的 预测结果都是n x 1维数组,而不是通常的 1 x n''' from cm_plot import * #导入自行编写的混淆矩阵可视化函数 cm_plot(train[:,3], predict_result).show() #显示混淆矩阵可视化结果
代码详见:demo/code/lm_model.py
图6-8 利用训练样本构建LM神经网络的混淆矩阵
(3)CART决策树
通过Scikit-Lrean利用训练样本构建CART决策树模型,得到混淆矩阵如图6-9所示,分类准确率为(160+56)/(160+56+3+13)=93.1%,正常用户被误判为窃漏电用户占正常用户的13/(13+160)=7.5%,窃漏电用户被误判为正常用户占正常窃漏电用户的3/(3+56)=5.1%。构建决策树的代码如代码清单6-4所示。
代码清单6-4 构建CART决策树模型代码(接6-2)
#构建CART决策树模型 from sklearn.tree import DecisionTreeClassifier #导入决策树模型 treefile = '../tmp/tree.pkl' #模型输出名字 tree = DecisionTreeClassifier() #建立决策树模型 tree.fit(train[:,:3],train[:,3]) #训练 #保存模型 from sklearn.externals import joblib joblib.dump(tree, treefile) from cm_plot import * #导入自行编写的混淆矩阵可视化函数 cm_plot(train[:,3], tree.predict(train[:,:3])).show() #显示混淆矩阵可视化结果 #注意到Scikit-Learn使用predict方法直接给出预测结果。
完整的代码详见:demo/code/dt_model.py
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论