我正在尝试运行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]
是59
,t_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时遇到问题的原因。