Python,ValueError,带SKLearn预处理的BroadCast错误



我正在尝试运行SKLearn预处理标准缩放器功能,收到以下错误:

from sklearn import preprocessing as pre
scaler = pre.StandardScaler().fit(t_train)
t_train_scale = scaler.transform(t_train)
t_test_scale = scaler.transform(t_test)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-149-c0133b7e399b> in <module>()
      4 scaler = pre.StandardScaler().fit(t_train)
      5 t_train_scale = scaler.transform(t_train)
----> 6 t_test_scale = scaler.transform(t_test)
C:Users****Anacondalibsite-packagessklearnpreprocessingdata.pyc in transform(self, X, y, copy)
    356         else:
    357             if self.with_mean:
--> 358                 X -= self.mean_
    359             if self.with_std:
    360                 X /= self.std_
ValueError: operands could not be broadcast together with shapes (40000,59) (119,) (40000,59) 

我知道形状不匹配。训练和测试数据集的长度不同,我该如何转换数据?

请打印t_train.shape[1]t_test.shape[1] 的输出

StandardScaler期望任意两个数据集具有相同数量的列。我怀疑早期的预处理(删除列、添加伪列等)是问题的根源。对t_train进行的任何转换都需要对t_test进行。

错误是告诉你我想要的信息:

ValueError: operands could not be broadcast together with shapes (40000,59) (119,) (40000,59)

我想你会发现t_train.shape[1]59t_test.shape[1]119。因此,在训练数据集中有59列,在测试数据集中有119列。

在尝试使用StandardScaler之前,您是否从训练集中删除了任何列?

"训练和测试数据集的长度不同"是什么意思??你是如何获得训练数据的?

如果你的测试数据比训练数据具有更多的特征,以便有效地降低测试数据的维度,你应该知道训练数据是如何形成的。例如,使用降维技术(PCA、SVD等)或类似的技术。如果是这种情况,您必须将每个测试向量与用于降低训练数据维度的相同矩阵相乘。

时间序列的格式是以时间为列,以数据为行。我在最初发布代码之前做了以下操作:

t_train.transpose()
t_test.transpose()

只是提醒一下,由于某种原因,我不得不在更改"卡住"之前将手机运行2倍。。。

t_train形状为(x,119),而t_test的形状为(40000,59)。若要使用相同的缩放器对象进行转换,那个么数据的列数应该始终相同。由于您在t_train上安装了缩放器,这就是您在尝试转换t_test时遇到问题的原因。

相关内容

  • 没有找到相关文章

最新更新