ValueError:操作数无法与形状(74,58)(66,)(74,58)一起广播

2024-04-25 03:56:35 发布

您现在位置:Python中文网/ 问答频道 /正文

编写此代码后:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

X_train = scaler.fit_transform(X_train)

X_test = scaler.transform(X_test)

错误是

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-99-55872220c4e4> in <module>()
      5 X_train = scaler.fit_transform(X_train)
      6 
----> 7 X_test = scaler.transform(X_test)

/usr/local/lib/python3.6/dist-packages/sklearn/preprocessing/data.py in transform(self, X)
    387                         force_all_finite="allow-nan")
    388 
--> 389         X *= self.scale_
    390         X += self.min_
    391         return X

ValueError: operands could not be broadcast together with shapes (74,58) (66,) (74,58) 

救命啊,求你了


Tags: 代码infromtestimportself错误transform
1条回答
网友
1楼 · 发布于 2024-04-25 03:56:35

发生此错误的原因是^{}希望X_test具有与其训练数据相同数量的特征维度,在您的示例中:66。你知道吗

更正式地说,它必须持有X_train.shape[1]==X_test.shape[1]。这是sklearn提供的大多数(如果不是全部)类型的估计量(变换器、分类器、回归器)的常见假设。换句话说,对于训练和测试数据,特征空间的配置要求是相同的。你知道吗

要解决您的问题,您需要修改创建X_trainX_test的方式。在sklearn数据矩阵中,行表示样本,列表示特征预测值。当将完整的数据集X_all拆分为X_trainX_test时,通常将行拆分为两个不同的子集,同时保持特征空间的维数(即列数)不变。实现这一点的一种方法是使用^{}。你知道吗

from sklearn.model_selection import train_test_split
X_train, X_test = train_test_split(X_all, test_size = 0.3, random_state=42)

如果您在机器学习或统计的上下文中工作,您可能希望在交叉验证方案中嵌入数据分割。sklearn根据您正在处理的问题类型,提供了几种这样的验证方案。有关一些示例,请参见this tutorial。你知道吗

相关问题 更多 >