MinMaxScaler对于单个输入返回相同的值

时间:2020-09-09 09:22:27

标签: python python-3.x pandas scikit-learn

我有一个如下所示的数据框,并且我使用了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

我该如何解决呢?

2 个答案:

答案 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 是您要转换的列索引。