高效图卷积神经网络(GCN)与电压故障诊断:深入探索和实现

前言

在工业领域中,早期故障诊断对于维持设备正常运行和减少维护成本至关重要。本文将介绍一个强大且创新的解决方案,它结合了数据处理和图卷积神经网络(GCN)的优势,以实现电压故障的高效诊断。我们将讨论代码的关键功能、主要优点以及为什么这个解决方案值得投资。

核心代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import networkx as nx
import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.data import Data

# 1. 加载数据
normal_data = pd.read_csv('./csv/电压早期正常数据-A.csv')
fault_data = pd.read_csv('./csv/电压数据-A.csv')

# 2. 数据预处理(特征相关性分析)
# 只选择数值类型的列
data = pd.concat([normal_data, fault_data]).select_dtypes(include=[np.number])
corr_matrix = data.corr().iloc[:20, :20]  # 只选择前20个特征来绘制相关性矩阵,以减少内存消耗

# 绘制特征相关性矩阵图
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=False, cmap='coolwarm')
plt.title('Feature Correlation Matrix')
plt.show()

# 去掉低相关性的特征(假设阈值为0.2)
high_corr_features = corr_matrix[corr_matrix.abs() > 0.2].index
filtered_data = data[high_corr_features]

# 3. 特征标准化
scaler = StandardScaler()

# 4. PCA降维可视化
pca = PCA(n_components=2)
plt.scatter(pca_result[:, 0], pca_result[:, 1], c='b', marker='o')
plt.title('PCA Visualization of Features')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.show()

# 5. 构建图数据(GCN输入)
# 示例图结构(需要根据实际电路图来构建)
edges = list(G.edges)
nodes = list(G.nodes)

# 转换为PyTorch Geometric的数据格式


# 如果节点特征数据少于节点数量,则只使用部分节点
if len(scaled_data) < len(nodes):
    nodes = nodes[:len(scaled_data)]
    edges = [(u, v) for u, v in edges if u < len(nodes) and v < len(nodes)]
    edge_index = torch.tensor(edges, dtype=torch.long).t().contiguous()

# 6. 定义图卷积神经网络模型
class GCN(torch.nn.Module):
    def __init__(self):
        super(GCN, self).__init__()
        self.conv1 = GCNConv(in_channels=x.shape[1], out_channels=16)
        self.conv2 = GCNConv(in_channels=16, out_channels=32)
        self.conv3 = GCNConv(in_channels=32, out_channels=64)
        self.conv4 = GCNConv(in_channels=64, out_channels=128)
        self.conv5 = GCNConv(in_channels=128, out_channels=2)

    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = self.conv2(x, edge_index)
        x = F.relu(x)
        x = self.conv3(x, edge_index)
        x = F.relu(x)
        x = self.conv4(x, edge_index)
        return F.log_softmax(x, dim=1)

# 7. 模型训练
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = GCN().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

model.train()
for epoch in range(50):
    optimizer.zero_grad()
    out = model(data)
    loss = F.nll_loss(out, torch.tensor([0]*len(nodes), dtype=torch.long).to(device))
    loss.backward()
    if epoch % 20 == 0:
        print(f'Epoch {
      
      epoch}, Loss: {
      
      loss.item()}')

# 8. 节点嵌入的可视化(使用T-SNE)
model.eval()
with torch.no_grad():
    z = model(data).cpu().numpy()
pca_for_tsne = PCA(n_components=min(z.shape[0], z.shape[1], 2))
tsne_input = pca_for_tsne.fit_transform(z)
tsne = TSNE(n_components=2, max_iter=300, perplexity=min(5, len(tsne_input) - 1))
tsne_result = tsne.fit_transform(tsne_input)
plt.scatter(tsne_result[:, 0], tsne_result[:, 1], c='r', marker='x')
plt.title('T-SNE Visualization of Node Embeddings')
plt.show()

代码介绍

本解决方案采用了图卷积神经网络(GCN),用于处理复杂的电压故障诊断任务。它包括以下几个主要步骤:

数据加载与预处理:

数据包含了正常电压和故障电压的历史记录,首先将两者加载并进行特征相关性分析。

通过选择高相关性的特征,减少数据维度,从而降低冗余性和计算复杂性。

特征标准化与降维:

使用StandardScaler进行特征标准化,以确保特征的均值和标准差在统一的范围内。

通过PCA(主成分分析)将数据降维至2维并可视化,从而帮助识别特征的分布情况。

构建图数据与图卷积神经网络(GCN):

使用图结构来描述电压数据的关系,其中节点表示不同的数据点,边表示节点之间的连接关系。

设计了5层GCN模型,通过多次卷积操作逐步提取特征,从而实现更深入的模式识别。

模型训练与可视化:

使用Adam优化器对模型进行训练,损失函数为负对数似然损失。

使用T-SNE对节点嵌入进行可视化,以便更直观地理解GCN模型学习到的节点特征分布。

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推荐理由

处理复杂关系的能力:

使用图卷积神经网络(GCN)使得模型能够处理数据之间复杂的非线性关系,尤其适用于存在连接关系的电路数据。

GCN能够通过图的结构捕获数据中隐含的关系,进行深度特征提取,从而提高故障诊断的准确性。

集成的数据预处理与降维:

在模型训练之前,代码集成了特征选择和标准化处理步骤,确保输入数据的质量。这些步骤帮助模型更加有效地学习,而不会因特征冗余或尺度问题导致性能下降。

可视化帮助理解模型:

使用PCA和T-SNE对特征和节点嵌入进行可视化,帮助工程师理解特征空间中不同类别节点的分布情况,以及模型如何学习到特征之间的差异。

易于扩展与优化:

代码结构清晰,易于调整和扩展。可以很方便地添加更多卷积层,或者使用不同的优化策略来提高模型的性能。

完整代码获取

关注下方卡片公众号,回复电压故障诊断获取完整代码

猜你喜欢

转载自blog.csdn.net/u013531166/article/details/142932122