【发布时间】:2020-04-11 23:42:33
【问题描述】:
我已经训练了一个包含 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 级别并抛出错误。
【问题讨论】:
-
你应该发布一些数据和代码,否则仍然不清楚你做了什么,错误是什么。只要您的编码在训练和测试之间保持一致,测试数据中缺少某些级别就可以了。因此,我首先要检查的是您的编码是否一致。例如,如果您使用 5 个哑元对训练集进行编码,那么您也应该使用 5 个哑元作为测试集(即使其中 2 个哑元始终为零)
-
我已经添加了一些代码,并详细解释了所面临的问题。你能看看吗?
标签: python machine-learning logistic-regression one-hot-encoding dummy-variable