CatBoostRegressor在尝试预测时显示错误(TypeError:无法将'b'转换为浮点)

2022-02-26 00:00:00 python regression catboost

问题描述

那么,事情是这样的.我有一个问题和这个人问的非常接近here。我在做一个相当结实的模型。我实际上已经运行过此代码几次,但是现在我面临这个问题。

这是我的数据集(由于公司政策,我不能分享任何真实数据):

category        brand        city        day_of_week        price
mobile_phone    LG           Busan       3                  100   
mobile_phone    Apple        Seul        4                  120
mobile_phone    LG           Changwon    5                  110
tv              LG           Busan       2                  120
tv              Samsung      Suwon       3                  150
tv              Samsung      Ulsan       3                  200
.
.
.

是关于修理电子产品的价格问题。问题是,我在运行一个回归,其中价格是目标,睡觉是功能。

所以这正是我运行的内容:

rf = CatBoostRegressor(
cat_features = ["category",
"brand",
"city",
"day_of_week"],
eval_metric="RMSE",
learning_rate=0.13,
iterations=500,
)

rf.fit(X_train, y_train, plot=True, eval_set=(X_test, y_test))
pred_rf = rf.predict(X_test)

这是Python显示的消息:

TypeError: Cannot convert 'b'mobile_phone'' to float

为什么?CatBoost应该在没有其他东西的情况下就转换了。这很疯狂,因为它在10分钟前对另一个非常相似的数据集起作用。

另外,模型实际运行:

bestTest = 0.3275576877
bestIteration = 144

Shrink model to first 145 iterations.

那么,你知道我做错了什么吗?

提前谢谢您。再次抱歉,我无法共享数据集。


解决方案

我同意查看克里斯的评论。我刚才出现了这个错误,这是因为我没有正确指定我的cat_features参数。乍一看,您似乎猜对了,但我要做的是使用以下命令提取所有对象功能:

# Get all object variables from X_train
cat_vars = [var for var in X_train.columns if X_train[var].dtype == "O"]

# Initialize model with cat_vars
rf = CatBoostRegressor(
                   cat_features = cat_vars,
                   eval_metric="RMSE",
                   learning_rate=0.13,
                   iterations=500,
                   )
# Fit & Predict
rf.fit(X_train, y_train, plot=True, eval_set=(X_test, y_test))
pred_rf = rf.predict(X_test)
这样,如果我的数据帧被奇怪地读入(pd.read_csv)并转换了一些dtype,这通常是floatint,它仍然可以处理。 警告:在prod中,您可能希望静态了解cat_var,并在某个配置文件中定义它们,而不是运行此命令。这仅供catBoost上的dev使用。

相关文章