python - 如何处理 scikit learn 模型中基数的变化

标签 python pandas machine-learning scikit-learn cardinality

我正在尝试在 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/

相关文章:

machine-learning - 决策边界不是分类中训练数据的属性

python - 使用正则表达式从 JSON 中删除字符串中的 Unicode\uxxxx

python - python 2、matplotlib 1.1.1 中的 pylab.ion() 以及在程序运行时更新绘图

python - 如何在 Python unittest.TestCase 中添加匹配器

python - 在Python中将cp850映射到unicode

Python Pandas lambda 函数更改列的所有值?

python - 将行列表转换为 Pandas 中的频率表

machine-learning - 词语关系的分类?

python - 获取比较多个列的最大值并返回特定值

machine-learning - 聚类算法的性能分析