gpt4 book ai didi

python - Patsy:测试数据中分类字段的新级别

转载 作者:太空狗 更新时间:2023-10-29 21:06:57 25 4
gpt4 key购买 nike

我正在尝试使用 Patsy(使用 sklearn、pandas)创建一个简单的回归模型。 R 风格的公式创建是一大亮点。

我的数据包含一个名为“ship_city”的字段,它可以包含来自印度的任何城市。由于我将数据划分为训练集和测试集,因此有几个城市仅出现在其中一个集中。代码片段如下:

df_train_Y, df_train_X = dmatrices(formula, data=df_train, return_type='dataframe')
df_train_Y_design_info, df_train_X_design_info = df_train_Y.design_info, df_train_X.design_info
df_test_Y, df_test_X = build_design_matrices([df_train_Y_design_info.builder, df_train_X_design_info.builder], df_test, return_type='dataframe')

最后一行抛出如下错误:

patsy.PatsyError: Error converting data to categorical: observation with value 'Kolkata' does not match any of the expected levels

我相信这是一个非常常见的用例,其中训练数据不会包含所有分类字段的所有级别。 Sklearn 的 DictVectorizer 可以很好地处理这个问题。

有什么方法可以让 Patsy 完成这项工作吗?

最佳答案

问题当然是,如果您只给 patsy 一个原始的值列表,它就无法知道还有其他可能发生的值。您必须以某种方式告诉它完整的可能值集是什么。

一种方法是使用 levels= 参数给 C(...),例如:

# If you have a data frame with all the data before splitting:
all_cities = sorted(df_all["Cities"].unique())
# Alternative approach:
all_cities = sorted(set(df_train["Cities"]).union(set(df_test["Cities"])))

dmatrices("y ~ C(Cities, levels=all_cities)", data=df_train)

如果您使用 pandas 的默认值 categorical support,这是另一个选项是record the set of possible values when you set up your data frame ;如果 patsy 检测到您传递给它的对象是 pandas 分类对象,那么它会自动使用 pandas 类别属性,而不是试图通过查看数据来猜测可能的类别。

关于python - Patsy:测试数据中分类字段的新级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com