python - 何时使用 fit_transform 和 transform?
问题描述
对于像LabelEncoder
和SimpleImputer
来自 scikit-learn 之类的东西,我们为什么要使用fit_transform
DataFrameX_train
以及为什么要使用transform
DataFrame X_valid
?
例如
for col in object_cols:
label_X_train[col] = label_encoder.fit_transform(X_train[col])
label_X_valid[col] = label_encoder.transform(X_valid[col])
两者在工作方式上有何区别?
解决方案
如果您想使用 imputer 使用中值填充训练数据中的一些缺失值,则首先需要计算该中值是多少,这就是调用fit()
.
现在您有了中间值,但您没有更改数据集,为此您需要更改(或转换)数据集。这就是你打电话时发生的事情transform()
。通常,您想要计算一个中值并使用该中值来替换 NaN 或其他一些非值,fit_transform()
为方便起见,将上述两个步骤一次性完成。
当您调用fit()
imputer 对象时,会保存适合的值,当您调用transform
测试数据时,此值用于插补。
回到你的例子。您用于sklearn.preprocessing.LabelEncoder
将字符串转换为整数。您调用fit()
然后transform
(或fit_transform()
)在您的训练数据上将字符串更改为整数。现在您有了测试数据,您需要使用相同的方法将测试数据中的字符串更改为整数,因此您使用已经拟合的LabelEncoder
对象,并且只需要transform()
在对象已经拟合(或参数化)时调用训练数据。
推荐阅读
- android - 使用 RecyclerView 的数据绑定获取 CardView 位置
- c - 为什么 max , min 和 canocalise 函数在 c 中不起作用?
- ionic-framework - 离子(ionChange)获取选定的索引
- python - 如果行仅包含停用词中的任何一个,则从文本文件中删除这些行
- angular - 如何根据 Firebase 中的值存储显示用户输出(Angular)
- python - 循环时间到前 15 分钟,除非在 10 分钟内
- dart - Flutter run --release crash: 在抛出 std::bad_alloc 的实例后调用终止
- python - 使用 Python 修改 JSON 文件
- javascript - Javascript/jQuery:从活动目录读取数据
- android - 当前使用哪种布局横向或纵向?