【发布时间】:2018-07-15 06:31:17
【问题描述】:
在训练和测试一个数据集之后,我希望它能够预测某个只有特征的数据集的标签。在我使用的普通示例中
预测 = clf.predict(数据)
但由于我正在处理的数据需要进行编码,因此在一次热编码后导致列大小为 2891。那么,现在如何检查尚未编码的新功能的标签?
【问题讨论】:
在训练和测试一个数据集之后,我希望它能够预测某个只有特征的数据集的标签。在我使用的普通示例中
预测 = clf.predict(数据)
但由于我正在处理的数据需要进行编码,因此在一次热编码后导致列大小为 2891。那么,现在如何检查尚未编码的新功能的标签?
【问题讨论】:
你的问题有点不清楚。但是我知道这里的问题是测试数据包含训练数据集中不存在的新类别。因此,如果您对训练数据集进行一次热编码,您可能会得到一个形状矩阵,比如说:(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.]]
【讨论】: