用于一键编码的可用类别中的一致性

问题描述 投票:0回答:1

假设我有两个数据集,一个用于训练,一个用于预测。

在两个数据集中,我都希望使用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

我得到两个单编码的数据帧。但是,它们的维度将有所不同,因为训练集中的某些值未出现在测试集中(反之亦然)。

假设我已经在训练集上训练了算法:

  1. 当我将测试集中的数据输入到在训练集上经过训练的机器学习算法中时,会发生什么不同的尺寸?
  2. [算法是否会担心丢失某些数据列?具体来说,我正在使用XGBoost.XGBRegressor(),但是我也想知道是否也有一个通用答案。
python pandas scikit-learn xgboost one-hot-encoding
1个回答
0
投票

我认为您正在寻找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
© www.soinside.com 2019 - 2024. All rights reserved.