假设我有两个数据集,一个用于训练,一个用于预测。
在两个数据集中,我都希望使用sklearn的preprocessing.OneHotEncoder()
进行一次热编码的分类变量相同。
接下来,让我们看一下变量X的可能唯一值:['a', 'b', 'c', 'd', 'e']
因此,变量X同时存在于训练和测试数据集中。但是,训练集中仅出现'a'
和'b'
值,而测试集中仅出现'c'
,'d'
和'e'
。
因此,如果我将以下代码应用于这两个数据集:
enc1 = pre.OneHotEncoder()
to_encode = train_df.select_dtypes(include='object')
encoded = enc1.fit_transform(to_encode).toarray()
dum_df = pd.DataFrame(encoded, columns=enc1.get_feature_names(to_encode.columns))
train_df = train_df.join(dum_df)
train_df.drop(to_encode.columns, axis=1, inplace=True)
# And repeat, just replace train_df with test_df
我得到两个单编码的数据帧。但是,它们的维度将有所不同,因为训练集中的某些值未出现在测试集中(反之亦然)。
假设我已经在训练集上训练了算法:
XGBoost.XGBRegressor()
,但是我也想知道是否也有一个通用答案。我认为您正在寻找align。如下面的示例
train = pd.get_dummies(train) #assume it gives (1451, 221)
test = pd.get_dummies(test) #assume it gives (1459, 206)
# now doing alignment of train and test will do the trick
final_train, final_test = train.align(test, join='inner', axis=1) # inner join