CatBoostRegressor在尝试预测时显示错误(TypeError:无法将';b';转换为浮点)
问题描述
那么,事情是这样的.我有一个问题和这个人问的非常接近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
,这通常是float
或int
,它仍然可以处理。
警告:在prod中,您可能希望静态了解cat_var,并在某个配置文件中定义它们,而不是运行此命令。这仅供catBoost上的dev使用。
相关文章