ValueError: 形状 (5,5) 和 (20,) 不匹配:5 (维度 1) != 20 (维度 0)

我在计算LDA的特征值和特征向量。在获得类内散布矩阵值(SW)后,我对矩阵进行求逆,以便将它乘以类间散布矩阵的值Sb。然而,当我尝试通过乘以Sb来计算Sw的逆时,我得到了标题中描述的错误。

这是我的实际InvSw值:

[[ 1.04681227e-02,   -8.88438953e-03,   -1.49760770e-03,   -1.40836916e-04,   5.62586740e-04], [-8.88438953e-03,     2.51997617e-02,   -1.29503509e-02,   -1.58583123e-03,  -1.93338715e-03], [-1.49760770e-03,   -1.29503509e-02,     1.96652733e-01,   -1.26808048e-01,  -5.57741506e-02], [-1.40836916e-04,  -1.58583123e-03,   -1.26808048e-01,     2.72992280e-01,  -1.45652927e-01], [ 5.62586740e-04,   -1.93338715e-03,   -5.57741506e-02,   -1.45652927e-01,   2.04121963e-01]]

我的Sb值:

[1.29960e+02, 4.09600e+01, 4.00000e-02, 9.24160e+02, 1.00000e+00, 5.10760e+02, 7.95240e+02, 8.50084e+03, 7.84000e+00, 5.21284e+03, 1.96000e+02, 1.63840e+02, 3.38560e+02, 1.96000e+00, 3.68640e+02, 3.60000e-01, 4.00000e-02, 2.50000e+01, 3.38560e+02, 3.53440e+02]

我尝试的乘法方式:

invSw_by_Sb = np.dot(invSw, Sb)

整个代码:

c_A_array = [[ 31,  25,  17,  62,  26,  23, 193, 143,  37,  29, 220, 216, 175, 195, 207, 198, 190, 222, 178, 214], [ 31,  26,  19,  59,  25,  23, 193, 140,  37,  29, 220, 216, 174, 195, 207, 198, 190, 220, 178, 214], [ 31,  23,  17,  67,  23,  22, 195, 147,  38,  31, 222, 215, 182, 195, 213, 198, 185, 221, 178, 207], [ 31,  23,  19,  67,  23,  23, 194, 144,  37,  31, 222, 218, 179, 198, 216, 198, 186, 221, 179, 207], [ 31,  28,  17,  65,  23,  22, 193, 142,  36,  31, 222, 217, 177, 195, 216, 196, 182, 220, 174, 207]]c_B_array = [[ 16,  24,  33,  43,  43,  58, 163,  76,  57, 105, 205, 200, 193, 188, 186, 193, 182, 227, 193, 227], [  9,  13,  22,  36,  13,  49, 163,  39,  33, 105, 204, 200, 193, 191, 188, 193, 183, 224, 194, 227], [ 23,  17,  10,  28,  21,  40, 166,  46,  28, 102, 208, 206, 196, 198, 195, 202, 190, 225, 196, 229], [ 25,  19,  11,  30,  23,  39, 166,  46,  26,  99, 208, 206, 199, 196, 198, 201, 189, 227, 198, 231], [ 25,  20,  12,  31,  25,  40, 169,  48,  27, 101, 211, 206, 198, 198, 196, 202, 190, 226, 198, 229]]c_A_array = np.asarray(c_A_array)c_B_array = np.asarray(c_B_array)c_1_mean = c_A_array.mean(axis=0)c_2_mean = c_B_array.mean(axis=0)S1_c1 = np.cov(c_A_array)S2_c2 = np.cov(c_B_array)Sw = S1_c1 + S2_c2 Sb = (c_1_mean - c_2_mean) * (c_1_mean - c_2_mean)invSw = np.linalg.inv(Sw)invSw_by_Sb = np.dot(invSw, Sb)[V, D] = np.linalg.eig(invSw_by_Sb)

回答:

你在使用np.cov和np.mean时使用了不同的维度。如果你想使用np.mean(…, axis=0),那么你也应该相应地更改cov的维度,如下所示:

c_1_mean = c_A_array.mean(axis=0)c_2_mean = c_B_array.mean(axis=0)S1_c1 = np.cov(c_A_array.T)S2_c2 = np.cov(c_B_array.T)Sw = S1_c1 + S2_c2 

此外,你的Sb应该是一个协方差矩阵:

Sb = (c_1_mean - c_2_mean) * (c_1_mean - c_2_mean).reshape([-1, 1])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注