【发布时间】:2020-12-27 17:00:06
【问题描述】:
我有一个如下所示的数据框,我使用 Scikit-Learn 的 MinMaxScaler 将 path_len 列的值标准化为 0 和 1。
之前我的数据框的前三行:
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
当我尝试在 path_len 的新输入值上使用 min_max.transform() 时,我得到了相同的确切值:
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!
我该如何解决这个问题?
【问题讨论】:
-
看来你忘记了
fit_transform而不是transform,否则我得到了NotFittedError: This MinMaxScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator. -
我将 fit_transform 与 path_len 列上的训练数据一起使用,然后将缩放器传递给函数并在新输入上使用 transform得到我上面所说的结果。这里的目的是在将新输入传递给机器学习模型之前对其进行预处理。
-
这种方式应该是转换你的数据的正确方式,因为你没有提供完整的代码,我认为函数调用和保存输出有问题,你可以在不调用函数的情况下尝试您的代码并分享结果
标签: python python-3.x pandas scikit-learn