如果我进行一次热编码,是否总是需要保留训练数据的副本?

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

我正在为分类数据进行一次热编码。当我测试时,我会这样做:

data.append(train_data_X)
data.append(test_data_X)
one_hot_encode(data)
model.test(data[:test_data_X.shape[0])

我想知道是否有办法测试我的测试数据,而无法访问我的训练数据。

python machine-learning scikit-learn one-hot-encoding
2个回答
2
投票

通常的最佳做法是使用scikit-learnOneHotEncoder功能,正是为了避免您遇到的问题。

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(categories = "auto", handle_unknown = 'ignore')
X_train_encoded = encoder.fit_transform(X_train)
X_test_encoded = encoder.transform(X_test)

这确保了将为测试集实现相同的One Hot Encoding。因此,您可以使用X_train_encoded来训练您的模型,然后使用X_test_encoded来评估它。


0
投票

下面是一个简单的方法,但这可能无法正常工作(为什么它不起作用总是在代码后解释)

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()

#fit the encoder
enc.fit(X_train)
#transform the data
X_train_encoded = enc.transform(X_train)
#tranform test data
X_test_encoded = enc.transform(X_test)

但这种方法存在一个小问题。如果您的列车数据在列中有2个唯一值,则编码器将创建2个虚拟特征。但是,如果您的测试数据对同一列有3个唯一值,我们将有额外的列,我们的模型将抛出异常。因此,建议在使用单热编码之前将测试和训练数据结合起来,然后根据索引将数据恢复为测试和训练。

© www.soinside.com 2019 - 2024. All rights reserved.