我正在尝试运行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\****\Anaconda\lib\site-packages\sklearn\preprocessing\data.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)
我理解形状不匹配。列车和测试数据集的长度不同,那么我将如何转换数据?
答案 0 :(得分:4)
请打印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
之前,您是否从培训集中删除了任何列?
答案 1 :(得分:0)
“火车和测试数据集的长度是多少”是什么意思?你是如何获得训练数据的?
如果您的测试数据具有比训练数据更多的功能,以便有效地降低测试数据的维度,您应该知道您的训练数据是如何制定的。例如使用降维技术(PCA,SVD等)或类似的东西。如果是这种情况,您必须将每个测试向量与用于降低训练数据维度的相同矩阵相乘。
答案 2 :(得分:0)
时间序列采用时间格式作为行中的列和数据。我在原始发布的代码之前执行了以下操作:
<div class="form-group" ng-repeat="value in entity.rowObjects">
<label class="control-label col-md-3">Row {{$index}}</label>
<div class="input-group col-md-4">
<input id="startDate1" type="text" class="form-control" ng-model="value.startDate">
<input id="endDate1" type="text" class="form-control" ng-model="value.endDate">
<input type="text" ng-model="value.id" ng-value="1" style="display: none;">
</div>
</div>
提醒一下,由于某种原因,我必须在更改“卡住”之前将电池运行2倍......
答案 3 :(得分:0)
t_train 的形状为(x,119),而 t_test 的形状为(40000,59)。 如果要使用相同的缩放器对象进行转换,则您的数据应始终具有相同的列数。 由于您在 t_train 上安装了 scaler ,因此,这就是您尝试转换 t_test 时遇到问题的原因。