零膨胀回归模型仅输出两类预测值,如何优化覆盖全部9个计数类别?
优化零膨胀计数预测模型的方案
针对你遇到的零膨胀计数预测问题(98.4%为0,目标取值0-9),结合当前模型的问题,给出以下优化方向:
1. 纠正预测后处理逻辑
首先停止将模型输出通过阈值转成0/1的操作。ZeroInflatedRegressor的设计逻辑是:先通过分类器判断样本是否为0,再对非0样本用回归器预测计数值,最终输出的是连续型的计数预测值,你只需将其取整(如np.round())即可得到0-9的离散计数结果,无需额外阈值转换。
2. 调整零膨胀模型的组件
分类模块(判断是否为0)
- 替换SVC为更适合不平衡二分类的模型:
- 用
LogisticRegression并设置class_weight='balanced',自动给少数类(非0样本)赋予更高权重; - 或选用XGBoost/LightGBM分类器,通过
scale_pos_weight参数(设置为len(0样本)/len(非0样本))平衡类别权重,这类模型对不平衡数据的拟合能力更强。
- 用
回归模块(预测非0计数值)
- 替换LinearRegression为更适配计数数据的模型:
- 选用泊松回归或负二项回归:这类模型专为计数数据设计,能捕捉计数的离散分布特性,比线性回归更适合处理0-9的离散计数;
- 或用XGBRegressor/LightGBMRegressor,通过设置
sample_weight给高计数(>3)样本赋予更高权重,强制模型关注稀有类别。
3. 数据层面优化
- 分层采样划分数据集:训练/验证/测试集划分时采用分层采样,确保每个计数类别(尤其是>3的稀有类)都有样本进入训练集,避免模型完全没见过高计数样本;
- 过采样稀有类别:对非0样本中的高计数(>3)样本,使用SMOTE或ADASYN算法做过采样,增加这类样本的数量,提升模型对其的拟合能力;
- 特征工程强化:挖掘能区分高计数样本的特征,比如构建交互特征、聚合统计特征(如特征的分位数、频次),或对连续特征做分箱处理,帮助模型捕捉稀有类的特征模式。
4. 损失与权重策略调整
- 给模型添加样本权重:分类模块中给非0样本更高权重,回归模块中给高计数样本设置与样本量成反比的权重(如
weight = total_samples / (class_samples * num_classes)); - 替换回归损失函数:放弃MSE,改用对 outliers 更鲁棒的MAE,或自定义损失函数——对高计数样本的预测误差施加更大惩罚,比如当真实值>3时,误差乘以2倍权重。
5. 改用多阶段多分类策略
如果回归方式仍难以覆盖全类别,可以拆分模型为两阶段:
- 第一阶段:二分类模型(0 vs 非0),识别样本是否为0;
- 第二阶段:对非0样本训练多分类模型(目标为1-9),设置
class_weight='balanced'平衡各类别权重,直接输出离散的计数类别。
这种方式更贴合0-9的离散计数目标,能直接解决多数类别无预测样本的问题。
6. 调整评估指标
- 分类场景下:放弃普通分类报告的准确率,改用加权F1-score、Kappa系数评估整体性能,同时重点关注高计数类别的召回率(确保模型能捕捉到这类样本);
- 回归场景下:用MAE、Poisson deviance(泊松偏差)替代MSE,更贴合计数数据的分布特性。
内容的提问来源于stack exchange,提问作者user14738548
相关产品推荐
相关产品推荐

