You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并XGBoost与协同过滤KNNWithMeans的预测输出DataFrame

解决方案

步骤1:生成全量item的XGB预测映射表

你当前重合度低的核心原因是仅用XGB模型预测了自身的测试集数据,实际可以直接用训练好的XGB模型对所有有属性数据的item做全量预测,同时保留itemId做关联键。
先修正你XGB侧的冗余代码+补充全量预测逻辑:

import xgboost as xgb
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
import pandas as pd

# 保留带itemId的原始物品属性表副本
df_item_features = df.copy()
# 拆分特征和标签时不提前删除itemId,避免后续无法关联
cols_to_drop = ['itemId', 'Decision']
X = df.drop(cols_to_drop, axis=1)
y = df['Decision']

# 训练模型(删除你原代码中冗余的、写在数据集拆分前的那行model.fit)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=5)
model = XGBClassifier() 
model.fit(X_train, y_train)

# 生成全量item的XGB预测映射表,只要是第一个数据集里存在的item都有预测结果
item_xgb_map = df_item_features[['itemId']].copy()
# 输出0/1分类结果
item_xgb_map['xgb_pred'] = model.predict(df_item_features.drop(cols_to_drop, axis=1))
# 如果后续需要做模型融合,建议输出概率值更灵活:
# item_xgb_map['xgb_pred_prob'] = model.predict_proba(df_item_features.drop(cols_to_drop, axis=1))[:, 1]

步骤2:合并到协同过滤输出表

直接通过itemId做左连接即可,协同过滤测试集中存在、但第一个数据集没有的item,XGB预测字段会返回空值:

# 先修正你协同过滤代码里的笔误:itenId改成itemId
test_merged = test.merge(item_xgb_map, on='itemId', how='left')

步骤3:处理缺失值(可选)

对没有XGB预测结果的新增item,可根据业务需求选择兜底方案:

  • 直接用协同过滤的cf_predictions值填充
  • 填充全局平均值/分类众数
  • 新增字段标识该item无属性侧预测结果,用于后续模型融合

内容的提问来源于stack exchange,提问作者futuredataengineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:05