一、任务定义与核心区别
维度 | 二分类 | 多分类(K类,K≥3) |
---|---|---|
输出空间 | 两个互斥类别(正/负类) | K个互斥类别(如猫/狗/鸟) |
输出层设计 | 1个神经元 + Sigmoid(概率) | K个神经元 + Softmax(概率分布) |
损失函数 | 二元交叉熵(Binary Cross-Entropy) | 多元交叉熵(Categorical Cross-Entropy) |
典型场景 | 垃圾邮件检测、疾病诊断 | 手写数字识别、新闻主题分类 |
二、模型选择与调整
1. 二分类常用模型
-
线性模型:逻辑回归(Logistic Regression) + 正则化(L1/L2)。
-
树模型:随机森林(Random Forest)、梯度提升树(XGBoost)------ 直接输出概率。
-
深度学习:
-
单输出神经元 + Sigmoid。
-
特征提取器(如CNN/BERT) + 全连接层。
-
2. 多分类常用模型
-
原生多分类模型:
-
决策树、随机森林、XGBoost(直接支持多类)。
-
深度学习:K维输出 + Softmax。
-
三、评估指标对比
1. 二分类指标
-
基础指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1-Score。
-
阈值相关:
- ROC曲线(Receiver Operating Characteristic)
2. 多分类指标
- 加权平均(Weighted):按类别样本数加权计算。
四、损失函数与输出层实现
1. 二分类实现
python
model = nn.Sequential(
nn.Linear(input_dim, 1), # 单神经元输出
nn.Sigmoid() # 映射到[0,1]
)
loss_fn = nn.BCELoss() # 二元交叉熵
2. 多分类实现
python
model = nn.Sequential(
nn.Linear(input_dim, K), # K个神经元
nn.Softmax(dim=1) # 输出概率分布
)
loss_fn = nn.CrossEntropyLoss() # 注:PyTorch的CrossEntropyLoss已含Softmax
注意:
- 标签格式:二分类用
float
(如0.0/1.0),多分类用long
型类别索引(如0,1,2...)
五、类别不平衡问题处理
1. 重采样(Resampling)
-
过采样:对小类复制或生成合成样本(如SMOTE)。
-
欠采样:对大类随机删除样本(可能丢失信息)。
2. 损失函数加权
-
二分类 :
BCEWithLogitsLoss(pos_weight=torch.tensor([10.0]))
(提高正类权重)。 -
多分类 :
CrossEntropyLoss(weight=torch.tensor([1.0, 5.0, 3.0]))
(按类别权重)。
3. 阈值调整(仅二分类)
- 默认阈值0.5可能不最优,可通过ROC曲线选择最佳阈值。