在处理类别型特征时,有时需要进行one-hot
在进行模型训练时,需要把数据划分train和test,类别型数据是在划分之前one-hot,还是划分之后?
在划分之前做one-hot
整体one-hot,train和test 不会出现某个值无法编码的问题。
train和test的维度都是一致的,可以做训练和测试。
但,如果给你一份新的数据集,在类别型数据里出现了新的值,该怎么表示?
划分之后做one-hot
这样会遇到两个问题
- 某个值,train中出现,test未出现,怎么处理?
- 某个值,train中未出现,test中出现,怎么处理?
在此之前,我也是对数据整体做one-hot的处理的,但这是不正确。正确的做法:
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
### Correct
train = pd.DataFrame(['A', 'B', 'A', 'C'])
test = pd.DataFrame(['B', 'A', 'D'])
enc = OneHotEncoder(handle_unknown = 'ignore')
enc.fit(train)
enc.transform(train).toarray()
#array([[1., 0., 0.],
# [0., 1., 0.],
# [1., 0., 0.],
# [0., 0., 1.]])
enc.transform(test).toarray()
#array([[0., 1., 0.],
# [1., 0., 0.],
# [0., 0., 0.]])
### Incorrect
full = pd.concat((train, test))
enc = OneHotEncoder(handle_

在处理类别型特征时,是否应在数据划分前还是后进行one-hot编码是个关键问题。整体one-hot编码确保train和test的维度一致,但可能在新数据集中遇到未知类别。而划分后one-hot编码则可能导致train和test集中的类别不匹配。正确的做法需要在训练和测试集之间分别进行one-hot编码,以妥善处理新出现的类别。
最低0.47元/天 解锁文章
640





