我有一个如下所示的数据框,并且我使用了Scikit-Learn的MinMaxScaler
来归一化path_len
列的值在零和一之间。
我数据框的前三行:
feature_1, feature_2, path_len
0 1 10
1 1 16
0 0 117
代码:
from sklearn.preprocessing import MinMaxScaler
min_max = MinMaxScaler()
features['path_len'] = min_max.fit_transform(features[['path_len']])
数据框的前三行:
feature_1, feature_2, path_len
0 1 0.033582
1 1 0.055970
0 0 0.432836
当我尝试在min_max.transform()
的新输入值上使用path_len
时,我得到了相同的确切值:
def preprocess_input(link, min_max, features):
df = pd.DataFrame( columns=features.columns)
df['feature_1'] = ...
df['feature_2'] = ...
df['path_len'] = 86 #arbitrary number
df['path_len'] = min_max.transform(df[['path_len']]) ### right here!
return df
df['path_len']
中的最终值再次为86
!
我该如何解决呢?
答案 0 :(得分:1)
更改您的行:
features['path_len'] = min_max.fit_transform(features[['path_len']])
收件人:
min_max.fit(features[['path_len']])
features['path_len'] = min_max.transform(features[['path_len']])
,您的代码将按预期运行。
答案 1 :(得分:0)
如果不想再次拟合 scaler
对象,可以执行以下操作:
scaled_value = (value_in_original_scale - scaler.data_min_[i]) * scaler.scale_[i]
其中 i
是您要转换的列索引。