使用SKLearn Preproccesing的Python,ValueError,BroadCast错误

时间:2015-10-30 00:27:44

标签: python scikit-learn

我正在尝试运行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) 

我理解形状不匹配。列车和测试数据集的长度不同,那么我将如何转换数据?

4 个答案:

答案 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]59t_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 时遇到问题的原因。