ValueError: X has 2 features, but MinMaxScaler is expecting 1 features as input

ValueError: X has 2 features, but MinMaxScaler is expecting 1 features as input

我将 numpy 数组分成 X 和 y,最初由 Pandas DataFrame 制成,如下所示:

>> X
array([[ 2.86556780e-03,  1.87100798e-01],
   [ 2.56781670e-04,  2.45417491e-01],
   [ 2.35497137e-03,  1.76615342e-01],
   ...,
   [ 2.30078468e-03, -4.16726811e-60],
   [ 5.66213972e-03, -2.98597808e-60],
   [ 4.39503905e-03, -2.13954678e-60]])

>> y
array([19.08666992, 19.09239006, 19.08938026, ..., 45.21157634,
   45.19350761, 45.13230675])

我将它们分成训练和测试数据集如下:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

在缩放数据之前,我按如下方式重塑标签:

y_train= y_train.reshape((-1,1))
y_test= y_test.reshape((-1,1))

使用 sklearn MinMaxScaler 我然后 fit_transform 我的 training_data 如下:

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
y_train = scaler.fit_transform(y_train)

然后我尝试使用 MinMaxScaler transform 我的测试数据,如下所示:

X_test = scaler.transform(X_test)
y_test = scaler.transform(y_test)

但测试数据集未转换,因为出现以下错误:

----> 1 X_test = scaler.transform(X_test)

ValueError: X has 2 features, but MinMaxScaler is expecting 1 features as input.

任何人都可以指导我我在这里做错了什么。

这是因为 scaler 适合具有单一特征的 y_train,而 X_test 具有 2 个特征。

您必须为 Xy 定义不同的缩放器对象:

scaler_X = MinMaxScaler()
scaler_Y = MinMaxScaler()
X_train = scaler_X.fit_transform(X_train)
y_train = scaler_Y.fit_transform(y_train)
X_test = scaler_X.transform(X_test)
y_test = scaler_Y.transform(y_test)

做同样工作的另一种方法是使用适合 X_train 的缩放器来转换 X_test;然后使用适合 y_train 的缩放器来转换 y_test:

scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
y_train = scaler.fit_transform(y_train)
y_test = scaler.transform(y_test)