You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LDA计算Q残差与Hotelling's T统计量numpy减法广播报错如何解决

报错修复方案

你遇到的维度不匹配报错核心是两处逻辑错误:

  1. 载荷矩阵构造错误:不能将LDA得分矩阵的转置作为载荷矩阵使用,sklearn中拟合完成的LDA模型,载荷矩阵存储在scalings_属性中,维度为(特征数, 判别分量数),对应你的场景是(7, 2)(假设为3分类任务,保留2个判别分量)。
  2. 硬编码维度错误:代码中写死reshape(2,50)的操作完全不符合你的输入维度,你的特征数为7而非50,该操作会直接导致重构后的矩阵维度和原输入不匹配。

修改后的核心代码如下:

第一步:修正变量定义

lda_f = lda.fit(X_std, y_Cat)
LDA_scores = lda_f.transform(X_std) # 维度 (50, 2):50个样本,每个样本对应2个判别分量的得分
LDA_loading = lda_f.scalings_ # 维度 (7, 2):7个特征,每个特征对应2个分量的载荷,这是正确的载荷矩阵
eigenvalues = lda_f.explained_variance_ratio_

第二步:修正Q残差计算逻辑

# 重构样本矩阵:得分矩阵 @ 载荷矩阵的转置,得到和原输入同维度的重构结果
X_reconstruct = LDA_scores @ LDA_loading.T # 维度计算:(50,2) @ (2,7) = (50,7),和X_std维度完全匹配
Q_err = X_std - X_reconstruct
Q_res = np.sum(Q_err ** 2, axis=1)

修改后矩阵减法的维度完全匹配,不会再报广播错误。


Q残差和Hotelling's T²统计量的输入要求

Q残差

Q残差衡量样本在判别分量正交空间的投影大小,用于检测离群样本,输入要求:

  • 原标准化特征矩阵:维度 (样本数n, 特征数m)
  • LDA判别得分矩阵:维度 (n, 判别分量数k),k最大为类别数-1
  • LDA载荷矩阵:维度 (m, k)

Hotelling's T²统计量

T²衡量样本在判别分量张成空间内的偏离程度,计算方式如下:

# 因LDA判别分量天然正交,直接用特征值标准化后求和即可
T2 = np.sum((LDA_scores ** 2) / eigenvalues, axis=1)

输入要求:

  • LDA判别得分矩阵:维度 (n, k)
  • 各判别分量的特征值:长度为k的一维数组

注:你原有代码中贡献计算部分的多次单位矩阵乘法属于冗余操作,单位矩阵和任意矩阵相乘都等于原矩阵,可直接删除相关逻辑降低出错概率。

内容的提问来源于stack exchange,提问作者WDpad159

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:27:03