Minmaxscaler逆_变换不起作用

2024-06-25 22:38:46 发布

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

我的代码如下:

变换尺度

X = dataset #(100, 18)
scaler = MinMaxScaler(feature_range=(0, 1))
scaler = scaler.fit(X)
scaled_X = scaler.transform(X)
scaled_series = Series(scaled_X[:, 17])
print(scaled_series.head())

逆变换

inverted_X = scaler.inverse_transform(scaled_X)
inverted_series = Series(inverted_X[:, 17])
print(inverted_series.head())

问题是缩放的_序列和反转的_序列是相同的结果,我应该如何更正代码


Tags: 代码transformrange序列headdatasetfeatureseries
2条回答

您必须考虑数据集的范围{{CD1>}。如果我们考虑MIMAX定标器的公式:

enter image description here

如果X的范围为[0,1],则不会产生任何差异,因为您将减去0并除以1。因此,返回相同的值

标准化仅适用于不在0-1范围内的值

我想问题是特定于您的数据集的。例如,当我使用示例数据集时,scaled_seriesinverted_series给出了两种不同的输出:

Scaled Series output:
0    0.729412
1    0.741176
2    0.741176
3    0.670588
4    0.870588
dtype: float32

Inverted Series output:
0    0.698347
1    0.706612
2    0.706612
3    0.657025
4    0.797521
dtype: float32

scaled_seriesinverted_series都给出了不同的输出,但值彼此接近。如果您在使用scale之前MinMaxScalar保存了您的数据:

from sklearn.preprocessing import scale

X = scale(X)

结果:

Scaled Series output:
0    0.729412
1    0.741176
2    0.741176
3    0.670588
4    0.870588
dtype: float32

Inverted Series output:
0   -0.188240
1   -0.123413
2   -0.123413
3   -0.512372
4    0.589678
dtype: float32

现在,输出不是彼此接近,而是完全不同

代码:


from sklearn.datasets import fetch_olivetti_faces
from sklearn.preprocessing import MinMaxScaler, scale
from pandas import Series

X, _ = fetch_olivetti_faces(return_X_y=True)
X = scale(X)

scaler = MinMaxScaler(feature_range=(0, 1))
scaler = scaler.fit(X)
scaled_X = scaler.transform(X)
scaled_series = Series(scaled_X[:, 17])
print("\nScaled Series output:")
print(scaled_series.head())

inverted_X = scaler.inverse_transform(scaled_X)
inverted_series = Series(inverted_X[:, 17])
print("\nInverted Series output:")
print(inverted_series.head())

相关问题 更多 >