如果我进行一次热编码,我是否总是必须保留训练数据的副本?
Do I always have to keep a copy of training data if I do one hot encoding?
我正在对分类数据进行单热编码。当我测试时,我会做这样的事情:
data.append(train_data_X)
data.append(test_data_X)
one_hot_encode(data)
model.test(data[:test_data_X.shape[0])
我想知道是否有一种方法可以在不访问我的训练数据的情况下测试我的测试数据。
通常的最佳做法是使用 scikit-learn
的 OneHotEncoder
函数,正是为了避免您遇到的问题。
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 来评估它。
下面是简单的方法,但这可能并不总是有效(为什么它总是无效在代码后解释)
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 个唯一值,我们将有额外的列,我们的模型将抛出异常。因此,始终建议在使用 one-hot 编码之前合并测试和训练数据,然后根据索引恢复将数据拆分回测试和训练。
我正在对分类数据进行单热编码。当我测试时,我会做这样的事情:
data.append(train_data_X)
data.append(test_data_X)
one_hot_encode(data)
model.test(data[:test_data_X.shape[0])
我想知道是否有一种方法可以在不访问我的训练数据的情况下测试我的测试数据。
通常的最佳做法是使用 scikit-learn
的 OneHotEncoder
函数,正是为了避免您遇到的问题。
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 来评估它。
下面是简单的方法,但这可能并不总是有效(为什么它总是无效在代码后解释)
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 个唯一值,我们将有额外的列,我们的模型将抛出异常。因此,始终建议在使用 one-hot 编码之前合并测试和训练数据,然后根据索引恢复将数据拆分回测试和训练。