numpy 中的广播问题

Broadcasting issues in numpy

我正在尝试将 PCA 拟合到训练和测试数据上。

X_train.shape

(2735, 219)

主成分分析:

pca = PCA(n_components=30)
X_train = pca.fit_transform(X_train)

测试数据:

test_values.shape
(395, 219)

转型:

test_values = pca.transform(test_values)

错误:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

我不确定为什么会出现广播错误,两个 numpy 数组都有相同的列 219。 有什么建议请

这不是真正的答案。但为了帮助您了解场景,我发布了这个!

import numpy as np
from sklearn.decomposition import PCA
X = np.random.randn(2735, 219)
pca = PCA(n_components=30)
pca.fit(X)

test_values = np.random.randn(395 , 219)

pca.transform(test_values)

上面的代码工作得很好!

我尝试重现您的示例,一切正常:

x_train = np.random.randint(10, size=50).reshape(10, 5)
pca = PCA(n_components=3)
print(x_train.shape)
x_train = pca.fit_transform(x_train)
test_values = np.random.randint(10, size=100).reshape(20, 5)
print(test_values.shape)
test_values = pca.transform(test_values)
print(test_values.shape)

代码输出:

(10, 5)
(20, 5)
(20, 3)

检查错误是否出现在与 PCA 的行上。看起来你正在对形状错误的数组进行一些操作。

我敢打赌,如果您使用 ipython、笔记本或类似的东西,这是一个保留的变量问题。如果不是这样,你可以忽略这个答案。

考虑以下单元格。

当我运行这些细胞时,一切都很好。但是,如果我再次尝试 运行 第二个单元格,我会收到此错误:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

这是因为 X_train 现在是一个 2735, 30 矩阵并且 pca 拟合在这个矩阵上所以它需要 n, 30 矩阵。

如果您清除变量或重新组织代码使其不适合已转换的数据,则问题可以解决。