设备异常状态检测相关内容(二)

二分类模型

使用keras实现传感器异常数据的检测

数据预处理见传感器异常检测相关内容(一)

(1)读取数据文件

K_filename='C:/Users/zzzz/Desktop/0306/kmeans.txt'
f = open(K_filename,'r')
a = f.read()
K_result = eval(a)
f.close()

Y_filename='C:/Users/zzzz/Desktop/0306/Y_array.txt'
with open(Y_filename, "r") as f1:
    data1=f1.readlines()    
Y_array_t=[]
for line in data1:
    lines=line.strip("\n").split("\t")
    Y_array_t.append(lines)

(2)处理数据 

import numpy as np
mean_value_array_t=np.array(Y_array_t)
mean_value_array_set_t=mean_value_array_t.reshape(-1,12)#重构数组
Y_list=mean_value_array_set_t.tolist()
Y_array_sort=[]
for L in Y_list:
    L2=[float(x) for x in  L]
    Y_array_sort.append(L2)
indexGood=K_result[0][1]
indexBad=K_result[0][0]
GoodSet=[Y_array_sort[x] for x in indexGood] #正常的数据样本
BadSet=[Y_array_sort[x] for x in indexBad] #异常的数据样本
#创建字典
Goodict={str(i):1 for i in GoodSet}
Badict={str(j):0 for j in BadSet}
sourcedict=Goodict.copy()
sourcedict.update(Badict)
import random
#构建训练集
index1_train=GoodSet[0:1931]
index2_train=BadSet[0:947]
trainSet=index1_train+index2_train
random.shuffle(trainSet)
trainLabel=[sourcedict[str(x)] for x in trainSet]
trainSet=np.array(trainSet)
trainLabel=np.array(trainLabel)
#构建验证集
index1_val=GoodSet[1931:2575]
index2_val=BadSet[947:1263]
valSet=index1_val+index2_val
random.shuffle(valSet)
valLabel=[sourcedict[str(x)] for x in valSet]
valSet=np.array(valSet)
valLabel=np.array(valLabel)
#构建测试集
index1_test=GoodSet[2575:3219]
index2_test=BadSet[1263:1579]
testSet=index1_test+index2_test
random.shuffle(testSet)
testLabel=[sourcedict[str(x)] for x in testSet]
testSet=np.array(testSet)
testLabel=np.array(testLabel)

from keras import models
from keras import layers
from keras import optimizers
#搭建网络
modelSort=models.Sequential()
modelSort.add(layers.Dense(32,activation='relu',input_shape=(12,)))
modelSort.add(layers.Dense(32,activation='relu'))
modelSort.add(layers.Dense(12,activation='relu'))
modelSort.add(layers.Dense(1,activation='sigmoid'))
#编译网络
modelSort.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
#训练
history=modelSort.fit(trainSet,trainLabel,epochs=30,batch_size=512,validation_data=(valSet,valLabel))
训练过程:
Train on 2878 samples, validate on 960 samples
Epoch 1/30
2878/2878 [==============================] - 1s 442us/step - loss: 1.3495 - acc: 0.6800 - val_loss: 0.6615 - val_acc: 0.6771
Epoch 2/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.6090 - acc: 0.6932 - val_loss: 0.5979 - val_acc: 0.6865
Epoch 3/30
2878/2878 [==============================] - 0s 14us/step - loss: 0.5724 - acc: 0.7095 - val_loss: 0.5735 - val_acc: 0.7010
Epoch 4/30
2878/2878 [==============================] - 0s 14us/step - loss: 0.5535 - acc: 0.7224 - val_loss: 0.5808 - val_acc: 0.7031
Epoch 5/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5572 - acc: 0.7238 - val_loss: 0.5401 - val_acc: 0.7312
Epoch 6/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5374 - acc: 0.7311 - val_loss: 0.5682 - val_acc: 0.7146
Epoch 7/30
2878/2878 [==============================] - 0s 19us/step - loss: 0.5471 - acc: 0.7286 - val_loss: 0.5342 - val_acc: 0.7323
Epoch 8/30
2878/2878 [==============================] - 0s 15us/step - loss: 0.5309 - acc: 0.7335 - val_loss: 0.5399 - val_acc: 0.7333
Epoch 9/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5298 - acc: 0.7401 - val_loss: 0.5317 - val_acc: 0.7417
Epoch 10/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5293 - acc: 0.7422 - val_loss: 0.5397 - val_acc: 0.7365
Epoch 11/30
2878/2878 [==============================] - 0s 14us/step - loss: 0.5277 - acc: 0.7425 - val_loss: 0.5286 - val_acc: 0.7365
Epoch 12/30
2878/2878 [==============================] - 0s 19us/step - loss: 0.5257 - acc: 0.7394 - val_loss: 0.5359 - val_acc: 0.7396
Epoch 13/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5269 - acc: 0.7460 - val_loss: 0.5387 - val_acc: 0.7417
Epoch 14/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5193 - acc: 0.7443 - val_loss: 0.5329 - val_acc: 0.7396
Epoch 15/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5248 - acc: 0.7429 - val_loss: 0.5448 - val_acc: 0.7333
Epoch 16/30
2878/2878 [==============================] - 0s 14us/step - loss: 0.5255 - acc: 0.7404 - val_loss: 0.5303 - val_acc: 0.7365
Epoch 17/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5254 - acc: 0.7429 - val_loss: 0.5211 - val_acc: 0.7490
Epoch 18/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5188 - acc: 0.7443 - val_loss: 0.5322 - val_acc: 0.7323
Epoch 19/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5211 - acc: 0.7401 - val_loss: 0.5259 - val_acc: 0.7385
Epoch 20/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5189 - acc: 0.7446 - val_loss: 0.5255 - val_acc: 0.7417
Epoch 21/30
2878/2878 [==============================] - 0s 19us/step - loss: 0.5070 - acc: 0.7512 - val_loss: 0.5158 - val_acc: 0.7427
Epoch 22/30
2878/2878 [==============================] - ETA: 0s - loss: 0.4694 - acc: 0.777 - 0s 19us/step - loss: 0.5170 - acc: 0.7425 - val_loss: 0.5434 - val_acc: 0.7333
Epoch 23/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5219 - acc: 0.7418 - val_loss: 0.5189 - val_acc: 0.7406
Epoch 24/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5120 - acc: 0.7457 - val_loss: 0.5467 - val_acc: 0.7354
Epoch 25/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5210 - acc: 0.7457 - val_loss: 0.5173 - val_acc: 0.7437
Epoch 26/30
2878/2878 [==============================] - 0s 17us/step - loss: 0.5071 - acc: 0.7484 - val_loss: 0.5143 - val_acc: 0.7406
Epoch 27/30
2878/2878 [==============================] - 0s 19us/step - loss: 0.5234 - acc: 0.7377 - val_loss: 0.5147 - val_acc: 0.7479
Epoch 28/30
2878/2878 [==============================] - 0s 19us/step - loss: 0.5059 - acc: 0.7460 - val_loss: 0.5100 - val_acc: 0.7427
Epoch 29/30
2878/2878 [==============================] - 0s 14us/step - loss: 0.5027 - acc: 0.7505 - val_loss: 0.5544 - val_acc: 0.7344
Epoch 30/30
2878/2878 [==============================] - 0s 15us/step - loss: 0.5155 - acc: 0.7418 - val_loss: 0.5195 - val_acc: 0.7479

网络总结 

modelSort.summary()

 绘图:

import matplotlib.pyplot as plt
loss=history.history['loss']
val_loss=history.history['val_loss']
epochs=range(1,len(loss)+1)
plt.figure()
plt.plot(epochs,loss,'r',label='Training Loss')
plt.plot(epochs,val_loss,'b',label='Validation Loss')
plt.title('Training and Validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()

acc=history.history['acc']
val_acc=history.history['val_acc']
epochs=range(1,len(acc)+1)
plt.figure()
plt.plot(epochs,acc,'bo',label='Training acc')
plt.plot(epochs,val_acc,'b',label='Validation acc')
plt.title('Training and Validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

 使用测试集评估网络性能

results=modelSort.evaluate(testSet,testLabel)

 在测试集上进行预测

result_predict=modelSort.predict(testSet)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值