python数据分析与挖掘实战(7)电力窃漏电用户自动识别

数据预处理值缺失值处理

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
from scipy.interpolate import lagrange

inputfile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter6\\demo\\data\\missing_data.xls'
outputfile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter6\\demo\\tmp\\missing_data_processed2.xls'

data=pd.read_excel(inputfile,header=None)

#自定义列向量插值函数
#s为列向量,n为被查知的位置,k为去前后的数据个数,默认为5
def ployinterp_column(s,n,k=5):
    y=s[list(range(n,n-k))+list(range(n+1,n+1+k))]# 取数
    y=y[y.notnull()]#剔除空值
    return lagrange(y.index,list(y))(n)

#逐个元素判断是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if(data[i].isnull())[j]:
            data[i][j]=ployinterp_column(data[i],j)
data.to_excel(outputfile,header=None,index=False)#输出结果

运行时报错:KeyError in the future, you can use .reindex() as an alternative.
解决方法:
链接

模型构建

  • 构建LM神经网络模型代码
import pandas as pd
from random import shuffle#导入随机函数shuffle,用来打算数据
inputfile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter6\\demo\\data\\model.xls'
data=pd.read_excel(inputfile)#读取数据,数据的前三列是特征,第四列是标签
data=data.as_matrix()#将表格转换为矩阵
shuffle(data)#随机打乱数据

p=0.8
train=data[:int(len(data)*0.8),:]#前%80为测试集
test=data[int(len(data)*0.8):,:]
#构建LM神经网络模型
from keras.models import Sequential#导入神经网络初始化函数
from keras.layers.core import Dense,Activation

netfile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter6\\demo\\tmp\\net.model1'#构建的神经网络模型存储路径
net=Sequential()#建立神经网络
net.add(Dense(input_dim=3,units=10))#添加输入层三节点到隐藏层十节点的连接
net.add(Activation('relu'))#隐藏层使用relu激活函数
net.add(Dense(input_dim=10,units=1))#添加隐藏层十节点到输出层1节点的连接
net.add(Activation('sigmoid'))#输出层使用sigmoid激活函数
net.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#编译模型,使用adam方法求解

net.fit(train[:,:3],train[:,3],nb_epoch=20,batch_size=1)
net.save_weights(netfile)

predict_result=net.predict_classes(train[:,:3]).reshape(len(train))

from cm_plot import *
cm_plot(train[:,:3],predict_result).show()


  • 构建CART决策树模型代码
#构建CRC决策树模型
from sklearn.tree import DecisionTreeClassifier#导入决策树模型
treefile='E:\\pycharm\\python数据分析与挖掘实战数据及源码\\chapter6\\demo\\tmp\\tree1.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()

在这里插入图片描述

#绘制决策树模型的ROC曲线
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from sklearn.metrics import roc_curve #导入ROC曲线函数
fpr,tpr,thresholds=roc_curve(test[:,3],tree.predict_proba(test[:,:3])[:,1],pos_label=1)
plt.plot(fpr,tpr,linewidth=2,label='ROC of CART')#做出ROC曲线
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.xlim(0,1.05)
plt.ylim(0,1.05)
plt.legend(loc=4)
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值