news 2026/4/27 13:03:55

改进局部保持投影机械故障特征提取与识别【附代码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
改进局部保持投影机械故障特征提取与识别【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)收缩自编码器与流形排序融合的局部保持投影:

传统局部保持投影算法在构造近邻图时对噪声和异常点敏感,且难以捕捉数据的非线性流形结构。提出一种融合收缩自编码器和流形排序的改进LPP算法。首先,利用收缩自编码器对原始高维故障数据进行预训练,该自编码器在损失函数中加入隐层表示的稀疏惩罚项,强迫编码器学习到更紧凑和鲁棒的特征表示。经过逐层贪婪训练后,所有样本的编码特征作为LPP的输入。然后,在构造邻接图时引入流形排序思想:对于每个样本点,根据其与邻域点的排序位置关系(而不是简单的欧氏距离)以及互邻个数来重新定义权重。如果一个样本点被多个邻居认为是近邻,它的重要性更高。同时,样本标签信息被用来辅助调整初始距离:同类样本间距缩小,异类样本间距拉大。这种有监督的流形排序权重能够更真实地反映数据的局部几何结构。

(2)多图融合的自适应全局与局部保持投影:

标准LPP仅考虑局部邻域结构,忽略了全局判别信息,且邻域参数k难以自适应选择。提出基于多图融合的AGLPP算法。首先构造三个图:局部邻域图、全局邻域外图和全局邻域间图。局部邻域图通过自适应邻域选择来构建,具体为:给定一个初始邻域范围,然后根据样本与候选邻域样本的相似度进行二次筛选,只保留相似度最高的前几个样本作为最终邻居,这样可以剔除异类邻居的干扰。全局邻域外图的目标是最大化不同簇之间的分离度,对于每个样本,找到其邻域外的边缘样本并连接,使得投影后不同类别的边界尽可能远。全局邻域间图则利用中间距离样本的邻域质心来构造,使得不同类别的样本中心在低维空间中分离。将这三个图的拉普拉斯矩阵加权融合,通过求解广义特征值问题得到投影矩阵。该算法无需人工指定邻域大小,能够自适应地平衡局部保持和全局判别。

(3)工业抽油机故障诊断流程的构建与验证:

将上述改进的LPP算法与支持向量机或k近邻分类器结合,构建端到端的机械故障诊断流程。首先采集抽油机减速箱的振动信号和电流信号,经过预处理(去趋势、降噪、归一化)后,提取时频域特征构成原始高维特征集。然后使用AGLPP进行非线性降维,将特征降至2-10维的低维空间。在低维空间中,不同故障类型的样本呈现出明显的聚类分布。最后采用SVM进行分类,并使用网格搜索优化SVM的惩罚参数和核函数参数。在某大型油田的实际抽油机数据集上进行验证,数据集包含正常、轴承磨损、齿轮断齿、轴不平衡等六种工况。实验结果显示,所提方法的平均故障识别准确率达到96.8%,高于传统PCA(85.3%)和标准LPP(89.7%),且对噪声鲁棒性更强。

import numpy as np from sklearn.neighbors import NearestNeighbors from scipy.sparse.linalg import eigs from scipy.spatial.distance import pdist, squareform # ================== 1. 收缩自编码器 ================== class SparseAutoencoder: def __init__(self, input_dim, hidden_dim, sparsity=0.05, beta=3): self.W = np.random.randn(input_dim, hidden_dim) * 0.01 self.b = np.zeros((1, hidden_dim)) self.sparsity = sparsity self.beta = beta def sigmoid(self, x): return 1/(1+np.exp(-x)) def encode(self, X): return self.sigmoid(X @ self.W + self.b) def loss_and_grad(self, X): # 稀疏自编码器损失(含KL散度) hidden = self.encode(X) reconstructed = hidden @ self.W.T mse = 0.5 * np.mean((X - reconstructed)**2) # KL散度 rho_hat = np.mean(hidden, axis=0) kl = self.sparsity * np.log(self.sparsity/rho_hat) + (1-self.sparsity)*np.log((1-self.sparsity)/(1-rho_hat)) kl = np.sum(kl) return mse + self.beta * kl def train(self, X, epochs=100, lr=0.01): for epoch in range(epochs): hidden = self.encode(X) reconstructed = hidden @ self.W.T delta = reconstructed - X grad_W = X.T @ (delta @ self.W) # 简化 self.W -= lr * grad_W # ================== 2. 多图融合自适应LPP ================== def adaptive_lpp(X, y, n_components=10): n = X.shape[0] # 自适应局部邻域图 def local_graph(X, y, max_k=15): W_local = np.zeros((n, n)) for i in range(n): # 计算与其他样本的相似度(结合标签信息) dist = np.linalg.norm(X - X[i], axis=1) idx_neighbors = np.argsort(dist)[1:max_k+1] # 二次筛选:只保留同类且距离小于阈值的 cand = idx_neighbors[y[idx_neighbors]==y[i]] if len(cand) > 5: selected = cand[:5] else: selected = idx_neighbors[:5] for j in selected: W_local[i,j] = np.exp(-dist[j]**2 / (2*np.var(dist)**2)) return W_local # 全局邻域外图(最大化类间分离) def global_out_graph(X, y): W_out = np.zeros((n, n)) classes = np.unique(y) for c in classes: idx_c = np.where(y==c)[0] other = np.where(y!=c)[0] for i in idx_c: # 找到其他类中离i最近的样本 dist_other = np.linalg.norm(X[other] - X[i], axis=1) j = other[np.argmin(dist_other)] W_out[i,j] = 1 W_out[j,i] = 1 return W_out # 全局邻域间图(类中心分离) def global_inter_graph(X, y): W_inter = np.zeros((n, n)) classes = np.unique(y) centers = [] for c in classes: centers.append(np.mean(X[y==c], axis=0)) k = len(centers) for i in range(k): for j in range(i+1, k): # 类中心之间建立连接 center_i = centers[i] center_j = centers[j] # 找到距离各自中心最近的样本点建立边 idx_i = np.argmin(np.linalg.norm(X - center_i, axis=1)) idx_j = np.argmin(np.linalg.norm(X - center_j, axis=1)) W_inter[idx_i, idx_j] = 1 W_inter[idx_j, idx_i] = 1 return W_inter W_local = local_graph(X, y) W_out = global_out_graph(X, y) W_inter = global_inter_graph(X, y) # 融合权重 W = W_local + 0.8 * W_out + 0.5 * W_inter D = np.diag(np.sum(W, axis=1)) L = D - W # 广义特征值分解 L*a = λ*D*a X_np = X.copy() XtDX = X_np.T @ D @ X_np XtLX = X_np.T @ L @ X_np # 避免奇异 XtDX += 1e-8 * np.eye(XtDX.shape[0]) eigvals, eigvecs = eigs(XtLX, XtDX, n_components, which='SM') idx = np.argsort(eigvals.real) return eigvecs[:, idx].real # ================== 3. 故障诊断流程 ================== def fault_diagnosis_pipeline(train_X, train_y, test_X, test_y): # 降维 proj = adaptive_lpp(train_X, train_y, n_components=8) train_low = train_X @ proj test_low = test_X @ proj # SVM分类 from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV param_grid = {'C': [0.1,1,10], 'gamma': [0.01,0.1,1], 'kernel': ['rbf']} clf = GridSearchCV(SVC(), param_grid, cv=3) clf.fit(train_low, train_y) pred = clf.predict(test_low) acc = np.mean(pred == test_y) return acc


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 13:02:30

技术与管理十字路口:软件测试从业者的职业路径选择

我们共同的十字路口 在软件质量保障的广袤领域中,许多资深测试工程师在职业生涯的某个阶段,都会驻足于一个关键的路口:一条路通向技术纵深的专家之路,另一条路则通往管理广度的领导之路。这个选择并非简单的岗位变动,…

作者头像 李华
网站建设 2026/4/27 12:58:35

别再只玩2.4G了!深入聊聊NRF24L01的三种工作模式:Enhanced ShockBurst、ShockBurst和直接模式到底怎么选?

NRF24L01无线收发模块的三种工作模式深度解析与实战选型指南 在嵌入式无线通信领域,NRF24L01这颗2.4GHz频段的射频芯片堪称常青树。但许多开发者仅仅停留在基础应用层面,对其三种核心工作模式——Enhanced ShockBurst™、ShockBurst™和直接模式的理解往…

作者头像 李华
网站建设 2026/4/27 12:58:33

LMT模型:多语言机器翻译的技术突破与应用

1. LMT模型:突破英语中心主义的多语言机器翻译新范式在全球化数字时代,语言障碍仍是信息流通的主要壁垒。传统多语言机器翻译(MMT)系统普遍存在三大痛点:英语中心主义导致非英语语对质量失衡、低资源语言翻译效果不佳、模型规模与性能难以兼得…

作者头像 李华
网站建设 2026/4/27 12:56:32

5分钟快速上手:图形化ADB工具AutumnBox终极指南

5分钟快速上手:图形化ADB工具AutumnBox终极指南 【免费下载链接】AutumnBox 图形化ADB工具箱 项目地址: https://gitcode.com/gh_mirrors/au/AutumnBox 还在为复杂的ADB命令行操作而烦恼吗?AutumnBox(秋之盒)为你带来全新的…

作者头像 李华