我已经训练了一个具有 5 个级别的分类变量的逻辑回归模型,并且所有级别对于模型都很重要。
然而,在未见过的数据上,分类变量的级别数为 3。 因此,经过训练的模型无法预测看不见的数据,因为它无法找到某些级别。
我使用了一种热编码来转换分类变量。 如何解决这个问题?
用于转换为训练集中的虚拟变量的代码:
metadata_employeegroup = pd.get_dummies(df['metadata_employeegroup'],prefix='metadata_employeegroup',drop_first=True)
df = pd.concat([df,metadata_employeegroup],axis=1)
根据 RFE,只有某些因子水平对模型有意义。因此,在训练模型时,我根据这些列对训练集进行子集化
logsk.fit(X_train[col], y_train)
y_pred = logsk.predict_proba(X_test[col])
这里col只包含3个级别的metadata_employeegroup。说 L1、L2、L3。
对于看不见的数据,我遵循相同的方法来创建虚拟变量。 然而metadata_employeegroup的级别是L1和L2。 经过训练的模型无法找到 L3 级别并抛出错误。
最佳答案
对于未见数据中缺失的分类变量级别,通过添加这些缺失级别并将所有记录的值保留为 0 来在数据中创建新特征。
我能够使用这个 One Hot Encoding Tutorial 来解决
关于python - 虚拟变量水平不存在于未见数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408656/