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

多分类问题中如何调整分类阈值?KNN不平衡分类场景咨询

解决KNN多分类不平衡问题:调整分类阈值的实操方法

针对你遇到的4分类不平衡问题(类别3占主导,小众类1、2、4召回率偏低),KNN默认的predict方法直接选取概率最高的类别,无法灵活调整分类倾向。要优化小众类的表现,你可以通过获取类别预测概率并自定义加权规则实现阈值调整,具体步骤如下:

1. 获取KNN的类别预测概率

KNN的predict_proba()方法会返回每个样本属于各类别的概率矩阵(形状为[样本数, 类别数]),我们基于这个矩阵调整分类逻辑。

替换原代码中的预测部分:

# 替换原Y_pred = knn.predict(X_test)
Y_pred_proba = knn.predict_proba(X_test)

2. 自定义加权阈值规则

通过给不同类别设置权重,调整模型分类倾向:给小众类(1、2、4)设置大于1的权重,提升它们的概率优先级;给主导类(3)设置小于1的权重,降低其分类优先级。

示例代码:

# 定义各类别的权重,对应类别1、2、3、4
class_weights = np.array([1.5, 1.2, 0.8, 1.3])

# 对概率矩阵进行加权
weighted_proba = Y_pred_proba * class_weights

# 选取加权后概率最高的类别(你的类别为1-4,argmax结果需加1)
Y_pred_adjusted = np.argmax(weighted_proba, axis=1) + 1

3. 评估调整后的效果

计算调整后的分类指标,验证小众类表现变化:

print("调整阈值后的KNN测试集准确率:", accuracy_score(Y_test, Y_pred_adjusted))
print("调整阈值后的分类报告:")
print(metrics.classification_report(Y_test, Y_pred_adjusted))
print("调整阈值后的混淆矩阵:")
print(confusion_matrix(Y_test, Y_pred_adjusted))

4. 调优权重参数

上述权重为经验值,你可以通过交叉验证寻找最优组合:

  • 以小众类的F1-score或召回率为优化目标
  • 用GridSearchCV遍历不同权重范围(比如给每个类别设置0.5-2之间的候选值)

其他补充优化方向

除了调整阈值,还可以结合以下方法进一步优化:

  • 数据层面:对小众类做过采样(如SMOTE),或对主导类做欠采样,平衡训练数据分布
  • 模型参数:调整n_neighbors(比如增大k值)、尝试其他距离度量(如余弦距离)
  • 评价指标:优先关注加权F1、macro F1或小众类的召回率,避免被整体accuracy误导

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:08:13