我正在尝试在 sci-kit 学习模型中使用高基数特征(siteid),并使用 get_dummies 对该特征进行单热编码。我得到了大约 800 个新的二进制列,它们使用逻辑回归返回了不错的精度。我的问题是,当我通过模型传递一个新数据集时,我对该功能有不同的基数,例如 300 个唯一值,并且模型正确地询问,您训练我的其他 500 列在哪里?我该如何解决这个问题?
我不想每次基数发生变化时都必须训练模型,也不想在 SQL 数据加载中对这些列进行硬编码。
cat_columns = ["siteid"]
df = pd.get_dummies(df, prefix_sep="__",
columns=cat_columns)
最佳答案
我的建议是用零填充这些剩余的列。因此,如果您的新训练样本有 10 个唯一值,并且模型需要 50 个值(total_cols
的数量),则在右侧创建 40 个零列以“填写”其余的值数据:
df = pd.DataFrame({"siteid": range(10)})
cat_columns = ["siteid"]
df1 = pd.get_dummies(df, columns=cat_columns)
# df1 has shape (10, 10)
total_cols = 50 # Number of columns that model expects
zero_padding = pd.DataFrame(np.zeros((df1.shape[0], total_cols - df1.shape[1])))
df = pd.concat([df1, zero_padding], axis=1)
df.columns = ["siteid__" + str(i) for i in range(df.shape[1])]
# df now has shape (10, 50)
关于python - 如何处理 scikit learn 模型中基数的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57688843/