引言
本文基于BP神经网络对变压器的故障进行分类和诊断。变压器根据五种特征气体对应四种故障类型(高能放电、低能放电、过热和正常)。对已知类型的训练样本进行计算,构造BP神经网络,然后对测试样本进行分类。该方法的正确率达88%。
变压器是电力系统中分布广泛、造价昂贵、结构复杂的电气设备,担负着电能传送和电压转换的重任,其正常运行直接影响了整个电力系统的安全性和稳定性。对油浸式变压器来说,随着运行的持续,油与中间的固体有机材料会逐渐老化和分解,由于不同的故障类型,产生的气体含量和比例也不同,所以可利用对油中气体的分析,来判断故障类型。本文已知50个训练数据和25个测试样本。并通过对训练数据进行BP神经网络的模型建立,来对测试样本进行故障诊断。
数据
思路介绍
这是我们模式识别的作业,书上是用BP神经网络做的,然后我就在Python里面找到了MLPRegressor这个库,这个库的意思是多层感知器,我用的是回归的,因为书上思路是将四类进行编码,比如说第一类就是1000,第二类就是0100,第三类是0010,第四类是0001,然后呢五种气体,所以输入值是5,我这里采用了一层神经网络,多了反而效果不好。输出就是四个值的连续的数,找到里面的最大值,他就属于哪一类。
代码
import pandas as pd
from sklearn.neural_network import MLPRegressor
data = pd.read_excel('样本数据.xlsx')
label = pd.read_excel('类别.xlsx')
data_tr = data.iloc[0:50,1:6]
label_tr = label.iloc[0:50,:]
data_te = data.iloc[50:,1:6]
model = MLPRegressor(activation='logistic',solver='lbfgs',
alpha=0.01,hidden_layer_sizes=(30),random_state=1,max_iter=500,learning_rate_init=0.05)
model.fit(data_tr,label_tr) # 模型训练
pre = model.predict(data_te) # 模型预测
k=[0]*25 # 存放类别
cnt = 0 # 计算正确个数
for i in range(25):
k[i] = list(pre[i]).index(max(pre[i]))+1
if k[i] == data.iloc[i+50,7]:
cnt += 1
acc = cnt/25
结果
真实类别 | 预测类别 |
---|---|
2 | 2 |
2 | 2 |
2 | 1 |
2 | 1 |
2 | 2 |
2 | 2 |
1 | 1 |
1 | 1 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
3 | 3 |
4 | 4 |
4 | 4 |
4 | 3 |
4 | 4 |
如果我没打错的话,上面25个测试样本里面应该是错3个,所以正确率为88%。
如果有什么错误欢迎指出,也欢迎讨论。