我已经训练了一个模型(随机森林),现在我想用它来预测特定日期的某些数据。我有一个分类列,其中在一段时间内有一些值(比如 a、b、c、d、e)。
现在在特定的一天,只有其中一些值存在(比如 b,d)。现在,在将它们设为 one-hot 编码时,我正在使用 LabelEncoder 和 one-hot 编码器。但是,如果我将该列用于标签编码,它只会标记“b”和“d”(比如 1 和 2),并且单热向量长度为 2。
我需要将实际模型标记为 (a,b,c,d,e) 为 (1,2,3,4,5),现在我需要将 (b,d) 标记为 (2,4 ) 并且 one-hot 向量的大小为 5。
我正在做的是保存训练中使用的标签编码器,并使用该标签编码当天的列。但我没有得到正确的结果,我做对了吗?
我已经给出了onehot_train一天n_values数据的长度。我使用了 sklearn 标签编码器和一个热编码器。
这是我的主要问题,另一个问题是,假设我看到一个我在训练期间没有看到的新类别,如何继续进行,我是否应该将所有新类别视为“未知”类别并将所有这些类别编码为一样的热还是有更好的方法?
def get_onehot(arr):
label_enc = LabelEncoder()
onehot_enc = OneHotEncoder(sparse=False)
int_enc = label_enc.fit_transform(arr)
int_enc = int_enc.reshape(len(int_enc),1)
onehot = onehot_enc.fit_transform(int_enc)
return onehot_train,label_enc_train
def get_onehot_per_day(arr_perday, label_enc_train, length_onehot_train):
onehot_enc = OneHotEncoder(sparse=False,n_values=length_onehot_train)
int_enc = label_enc_train.transform(arr)
int_enc = int_enc.reshape(len(int_enc),1)
onehot = onehot_enc.fit_transform(int_enc)
return onehot_per_day