我有一个包含多个列的数据帧,需要对这些列进行标签编码。问题是,测试组可能会在未来包含看不到的数据(类)。我希望这些类被标记为它们自己的一组,这样当我预测新的数据集时,代码就不会崩溃。
我尝试使用sklearn labelencoder,但收到了。
ValueError: y contains previously unseen labels: 'rat'
我还需要编码器是可重用的,这意味着我将能够使用相同的值对未来的数据集进行编码。
有没有办法做到这一点?
发布于 2020-10-13 19:18:06
我曾多次遇到过同样的困难。
不过,我的变通方法有点昂贵。
le=LabelEncoder()
le.fit(trainDf)
le.classes_=np.array([-99999] + le.classes_.tolist())
testDf[~testDf.isin(le.classes_)]=-99999 #anything that is not used in your dataframe and the same datatype (here int64)
le.transform(testDf)
发布于 2020-10-14 03:18:48
我稍微更新了一下Sayan Dey's的想法:
步骤1:对标签编码器中存在的类进行标签编码。步骤2:安装标签编码器,然后将测试中不在编码器中的所有类别设置为-1 \f25-1\f6。
i='browser'
le = LabelEncoder()
train[i] = le.fit_transform(train[i])
#Set classes in test which don't exist in the encoder to -1
test.loc[~test[i].isin(le.classes_),i] = -1
#Encode classes that exist in the encoder
test.loc[test[i].isin(le.classes_),i] = le.transform(test[i][test[i].isin(le.classes_)])
发布于 2020-10-13 17:35:44
可以使用scikit来解决-学习是使用带有参数handle_unknown='ignore'
的类OneHotEncoder
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
encoder.fit(train)
encoder.transform(train)
https://stackoverflow.com/questions/64332071
复制相似问题