训练和测试数据集后,我希望它预测仅具有特征的某个数据集的标签。在正常示例中,我使用
预测= clf.predict(数据)
但是由于我正在使用的数据需要进行编码,因此在进行一次热编码后,导致列大小为2891。那么,现在如何检查尚未编码的新功能的标签?
答案 0 :(得分:1)
您的问题尚不清楚。但是我知道这里的问题是测试数据包含训练数据集中没有的新类别。因此,如果对训练数据集进行一次热编码,则可能会得到一个形状矩阵,可以说:(10,m_train),但是当对测试数据进行编码时,可能会得到形状矩阵(15,m_test)。因此,显然,您不能使用旧模型来预测这些新的测试数据标签。我认为最好重新组织由所有新类别组成的训练数据集,然后将数据集洗牌并分为转换和测试数据集。或者另一个选择是您可以在对测试数据进行编码的同时忽略新数据测试数据中的类别。参见以下示例:
from sklearn.preprocessing import OneHotEncoder
import numpy as np
onehot = OneHotEncoder(handle_unknown = 'ignore')
y_train = onehot.fit_transform(np.array([1,2,3]).reshape(3,1)).toarray()
print(y_train)
这将导致下面的矩阵:
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
对于测试集,它将所有未知类别标记为零,以保持测试数据矩阵的尺寸与训练数据集相同。
y_test = onehot.transform(np.array([1,2,4]).reshape(3,1)).toarray()
print(y_test)
在此处注意类别“ 4”的[0,0,0]。
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 0.]]