01 问题背景:调参依赖为什么成为诊断方法的隐性成本

旋转机械故障诊断的典型流程可概括为:信号分解—特征提取—特征选择—故障分类4个环节。

这个链条中,每1个环节都伴随着若干自由参数:

信号分解的层数与滤波器截止条件

多尺度熵分析的尺度个数与粗粒化方式

特征选择的维度保留策略

近邻分类器的K值设定

困扰不在于参数的存在本身,而在于不同的数据分布对最优参数组合高度敏感。经验上可行的做法是网格搜索或大量消融实验,但这一过程难以自动化,且严重依赖人工经验

因此,本文工作的出发点十分明确:凡是需要用户自行设定的自由参数,都应由算法根据数据自身特性来推定。

02 方法设计:4个环节的参数自适应策略

2.1 改进层次分解:保留信号长度,免设终止条件

传统递推式多尺度分解的难题在于:每层运算都缩减序列长度,高层分量信息损失严重;且分解层数的设定缺乏客观依据。

我们采用移动平均与移动差分算子逐层处理:

移动平均提取平滑趋势,反映信号低频轮廓;

移动差分捕捉局部波动,突出高频冲击成分。

核心特点是:每1层分量均保持与原始信号等长。信息不因分解而丢失,层数的上限不再由“序列还能否继续降采样”来决定,而仅需推至可解释的平稳分量即可。这个设计降低了分解环节对人工截断判断的依赖。

2.2 精细复合多尺度分数阶注意力熵:将冲击模式编码为特征

故障诊断的关键在于识别振动信号中周期性冲击的分布模式,尤其是内圈、外圈、滚动体故障,在冲击间隔上各有特征频率。

为此,在特征提取环节完成2项递进设计:

(1)精细复合多尺度粗粒化:在多个时间尺度上,以不同起始点生成粗粒化序列。多尺度可同时捕捉快速冲击与慢变调制;多起始点则消除序列起点偶然性带来的估计偏差。

(2)分数阶注意力熵:在传统香农熵基础上引入分数阶求导,同时对信号局部极值的间隔序列进行概率建模。结果是一种兼顾全局紊乱程度和局部冲击形态的熵测度,可以称之为注意力熵,意指其对冲击性故障的指向性更强。

这个环节的尺度范围可以由数据长度和故障特征频率范围推算,不需要人工试探。

2.3 稀疏Softmax特征选择:让模型判断哪些特征有效

多分量、多尺度特征拼接后,维度往往较高,存在信息冗余。

可以采用带L1正则化项的Softmax回归模型进行特征筛选,L1惩罚项的几何性质是:在高维参数空间中,最优解倾向于将大量特征系数压缩至精确零值。只有对应非零系数的特征被保留。

实验中,64维特征经筛选后保留41维。关键的是:保留维度并非人工指定,而是由正则化强度与分类损失的联合优化自动决定。

2.4 分布式加权自适应近邻:K值依据数据结构推定

传统k近邻分类器要求预设K值,K过小对噪声敏感,K过大决策边界模糊。

对策是分布式加权自适应近邻

  1. 将训练样本随机划分为若干子集;

  2. 每个子集根据自身样本量、类别数,按预设公式自适应计算最大近邻数;

  3. 各子分类器独立进行加权投票,权重采用高斯距离函数,使得距离更近的样本获得更高的投票权重;

  4. 汇总所有子分类器的加权票数,以多数决确定最终故障类别。

本质而言,这是一种集成学习策略:将K值的不确定性分散到多个子模型,通过投票机制平滑单模型偏差。K值不再需要用户指定,而是数据特性的函数。

# 特征提取主函数
def extract_ihrcmmvfae_features(signals, q_level=Q_LEVEL, scales=SCALES, alpha=ALPHA):
    """
    对每一行信号(样本)提取 IHRCMmvFAE 特征。
    返回特征矩阵 (样本数, 2^q_level * scales)。
    """
    n_samples = signals.shape[0]
    n_comps = 2 ** q_level
    features = np.zeros((n_samples, n_comps * scales))
    for i in range(n_samples):
        if (i+1) % 50 == 0:
            print(f"  处理样本 {i+1}/{n_samples}")
        sig = signals[i]
        comps = improved_hierarchical_decomposition(sig, q_level)
        feat_row = []
        for comp in comps:
            for s in range(1, scales + 1):
                val = refined_composite_multiscale_fae(comp, s, alpha)
                feat_row.append(val)
        features[i, :] = np.array(feat_row)
    return features

print("开始提取 IHRCMmvFAE 特征...")
X_features = extract_ihrcmmvfae_features(X_raw)
print("特征提取完成,特征维度:", X_features.shape)

# 绘制特征提取中间图:某样本的层次分解分量
sample_idx = 0  # 第一个样本
comps = improved_hierarchical_decomposition(X_raw[sample_idx], Q_LEVEL)
plt.figure(figsize=(14, 8))
for j, comp in enumerate(comps):
    plt.subplot(4, 2, j+1)
    plt.plot(comp, linewidth=0.5)
    plt.title(f'Component {j+1}', fontsize=9)
    plt.xticks([])
    plt.yticks([])
plt.suptitle('Improved Hierarchical Decomposition Components (one sample)', fontsize=12)
plt.tight_layout()
plt.savefig('02_hierarchical_decomposition.png', dpi=300)
plt.show()

# 绘制某分量多尺度粗粒化示意图
comp_demo = comps[0]  # 取第一个分量
plt.figure(figsize=(14, 6))
for s in [1, 2, 4, 8]:
    # 偏移 g=1 演示
    L = (len(comp_demo) - 1 + 1) // s
    idx = np.arange(0, s*L).reshape(L, s)
    coarse = comp_demo[idx].mean(axis=1)
    plt.plot(coarse[:500], label=f'Scale {s}')
plt.legend()
plt.title('Coarse-grained Series at Different Scales (Component 1, offset=1)')
plt.xlabel('Index')
plt.ylabel('Amplitude')
plt.savefig('03_multiscale_coarse.png', dpi=300)
plt.show()

# 绘制特征热力图 (每类平均特征)
plt.figure(figsize=(14, 6))
mean_feat_per_class = [X_features[y_raw == i].mean(axis=0) for i in range(10)]
sns.heatmap(mean_feat_per_class, xticklabels=5, yticklabels=LABELS, cmap='jet')
plt.title('Average IHRCMmvFAE Feature Heatmap for Each Condition')
plt.xlabel('Feature Index')
plt.ylabel('Condition')
plt.savefig('04_feature_heatmap.png', dpi=300)
plt.show()
测试集准确率: 99.50%

各类别分类报告:
                precision   recall  f1-score
   IR_0.007       1.00       1.00     1.00
 Ball_0.007       1.00       1.00     1.00
   OR_0.007       1.00       1.00     1.00
   IR_0.014       1.00       1.00     1.00
 Ball_0.014       1.00       1.00     1.00
   OR_0.014       1.00       0.95     0.97
   IR_0.021       1.00       1.00     1.00
 Ball_0.021       1.00       1.00     1.00
   OR_0.021       0.95       1.00     0.98
     Normal       1.00       1.00     1.00

图片

图片

图片

图片

图片

图片

图片

参考文章:

一种面向旋转机械的无参数故障诊断方法:分数阶注意力熵和分布式自适应近邻(Python)

如果你对信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测有疑问,或者需要论文思路上的建议,欢迎学术咨询

担任《MSSP》《中国电机工程学报》《宇航学报》《控制与决策》等期刊审稿专家,擅长领域:信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测

更多推荐