【问题标题】:Python, ValueError, BroadCast Error with SKLearn PreproccesingSKLearn 预处理的 Python、ValueError、BroadCast 错误
【发布时间】:2016-01-30 08:23:15
【问题描述】:

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

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

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    t_train 形状是 (x, 119),而 t_test 形状是 (40000,59)。 如果您想使用相同的 scaler 对象进行转换,那么您的数据应该始终具有相同数量的列。 由于您在 t_train 上安装了 scaler,这就是您在尝试转换 t_test 时遇到问题的原因。

    【讨论】:

      【解决方案2】:

      请打印来自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 之前,您是否从训练集中删除了任何列?

      【讨论】:

        【解决方案3】:

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

        t_train.transpose()
        t_test.transpose()
        

        提醒一下,由于某种原因,我不得不在更改“卡住”之前将单元格运行 2 倍...

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2019-09-12
            • 2018-01-27
            • 2018-05-11
            • 2017-08-04
            • 2020-09-12
            • 2017-11-13
            • 1970-01-01
            • 1970-01-01
            • 2021-09-19
            相关资源
            最近更新 更多