我有一个带有多个列的数据框,需要对其进行标签编码。 问题在于测试组将来可能包含看不见的数据(类)。 我希望将这些类标记为它们自己的组,以便在预测新数据集时代码不会崩溃。
我尝试使用sklearn labelencoder但收到了。
ValueError: y contains previously unseen labels: 'rat'
我还需要编码器可重用,这意味着我将能够使用相同的值对未来的数据集进行编码。
有办法吗?
答案 0 :(得分:1)
我多次遇到同样的困难。
虽然我的解决方法有点贵
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)
答案 1 :(得分:0)
可以使用scikit-learn解决,方法是将类OneHotEncoder与参数handle_unknown='ignore'
一起使用:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
encoder.fit(train)
encoder.transform(train)
答案 2 :(得分:0)
我稍微更新了Sayan Dey's的想法:
步骤1:对标签编码器中存在的cals进行标签编码。 步骤2:安装标签编码器,然后将所有不在编码器中的测试类设置为-1。
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_)])