关于StandardScaler两种训练实现方式是否存在差异的技术问询
两段StandardScaler代码的功能差异分析
这两段代码在功能和输出结果上完全等价,没有任何差异。
核心原因
StandardScaler的fit_transform()方法本质上就是**先执行fit(),再对同一输入数据执行transform()**的组合操作,sklearn官方实现里这个方法的内部逻辑就是依次调用这两个步骤,和手动分开写fit()+transform()的效果完全一致。
两段代码的执行逻辑拆解
两段代码的核心流程都是:
- 初始化
StandardScaler实例 - 用训练集
x_train拟合模型(计算均值、标准差等标准化参数) - 用拟合好的参数分别转换
x_train和x_test
第一段代码(组合式写法)
from sklearn.preprocessing import StandardScaler object_ss = StandardScaler() x_train_ss = object_ss.fit_transform(x_train) # 先fit(x_train),再transform(x_train) x_test_ss = object_ss.transform(x_test)
第二段代码(分步式写法)
object_ss = StandardScaler() object_ss.fit(x_train) # 单独执行fit,计算标准化参数 x_train_ss = object_ss.transform(x_train) # 用已拟合的参数转换训练集 x_test_ss = object_ss.transform(x_test) # 用同一参数转换测试集
注意点
唯一需要注意的是:两段代码里都只用训练集x_train做拟合,测试集x_test只做转换,这是标准化的正确做法(避免数据泄露),两段代码都遵守了这个原则。
内容的提问来源于stack exchange,提问作者심준호
相关产品推荐
相关产品推荐

