基于CatBoost实现主/次偏好双早餐类型预测的可行性咨询
用CatBoost搞定早餐类型的Top2偏好预测
完全可以在现有方案基础上实现,不用改训练逻辑,靠CatBoost的概率输出就能直接拿到最偏好和第二偏好的早餐类型,具体操作如下:
关键逻辑
CatBoost分类器训练完成后,不仅能输出单个预测类别,还能输出每个样本对应所有早餐类型的预测概率。我们只需要对这些概率从高到低排序,取前两个对应的类别,就是你要的Top2偏好。
代码修改示例
你的训练代码完全不用动,只需要在预测阶段替换成以下代码:
# 原有训练部分保持不变 df_train, df_test = train_test_split(df, test_size=0.15, random_state=42) df_train, df_valid = train_test_split(df_train, test_size=0.15, random_state=42) features_train = df_train.drop(['breakfast'], axis=1) target_train = df_train['breakfast'] features_valid = df_valid.drop(['breakfast'], axis=1) target_valid = df_valid['breakfast'] features_test = df_test.drop(['breakfast'], axis=1) target_test = df_test['breakfast'] model_cat = CatBoostClassifier(random_state=42) model_cat.fit(features_train, target_train) # 替换predict为predict_proba,获取所有类别的概率 valid_probabilities = model_cat.predict_proba(features_valid) # 获取所有早餐类型的标签列表 breakfast_types = model_cat.classes_ # 对每个样本的概率降序排序,取前2个的索引 import numpy as np top2_indices = np.argsort(-valid_probabilities, axis=1)[:, :2] # 把索引转成对应的早餐类型名称 valid_top2_predictions = breakfast_types[top2_indices] # 打印前5个样本的Top2结果,格式是[最偏好, 第二偏好] print(valid_top2_predictions[:5])
额外说明
predict_proba()返回的是二维数组,每行对应一个样本,每列对应一种早餐类型的概率,顺序和model_cat.classes_里的类型顺序完全一致。- 如果要评估Top2预测准不准,可以自己写个小逻辑:比如统计真实早餐类型在Top2结果里的样本占比,这个就是常用的Top2准确率指标。
内容的提问来源于stack exchange,提问作者user18600512
相关产品推荐
相关产品推荐

