1. 例子
先找一个百度百科的例子并进行适当修改.
例 1 假如某个班级有男生 80 人, 女生 20 人, 共计 100 人. 目标是找出所有女生. 如何构建分类器?
2. 二分类问题与准确率
例 1 可以看作是一个二分类问题, 假设学习器
L
1
L_1
L1 挑选出 30 个人, 其中 18 人是女生, 另外还错误的把 12 个男生也当作女生挑选出来了.
其混淆矩阵为:
Predicted \ actual | Yes | No |
---|---|---|
Yes | T P = 18 TP = 18 TP=18 | F P = 12 FP = 12 FP=12 |
No | F N = 2 FN = 2 FN=2 | T N = 68 TN = 68 TN=68 |
其中:
- T P TP TP 表示正确挑出来的女生数;
- F P FP FP 表示错误挑出的男生 (以为是女生) 数;
- F N FN FN 表示未挑出的女生 (以为是男生) 数;
-
T
N
TN
TN 表示正确挑出的男生数 (在本例中, 没挑选就默认分类为男生).
准确率定义为:
A c c = T P + T N T P + F P + F N + T N = 86 100 . (1) Acc = \frac{TP + TN}{TP + FP + FN + TN} = \frac{86}{100}. \tag{1} Acc=TP+FP+FN+TNTP+TN=10086.(1)
3. 误分类代价敏感学习
假设将男生识别为女生的误分类代价是
c
F
P
=
1
c_{FP} = 1
cFP=1 元/人; 将女生识别为男生的误分类代价是
c
F
N
=
3
c_{FN} = 3
cFN=3 元/人. 则学习器
L
1
L_1
L1 的总误分类代价为
C
o
s
t
=
F
P
×
c
F
P
+
F
N
×
c
F
N
=
12
×
1
+
2
×
3
=
18.
(2)
Cost = FP \times c_{FP} + FN \times c_{FN} = 12 \times 1 + 2 \times 3 = 18. \tag{2}
Cost=FP×cFP+FN×cFN=12×1+2×3=18.(2)
显然, 当
c
F
P
=
c
F
N
=
1
c_{FP} = c_{FN} = 1
cFP=cFN=1 的时候,
C
o
s
t
Cost
Cost 退化为
A
c
c
Acc
Acc.
误分类代价敏感学习有两种方案:
- 改变学习器的惩罚函数 (损失函数). 在这里 F N FN FN 的惩罚为 F P FP FP 的 3 倍.
- 改变数据的比例. 在这里将训练集中 (注意: 训练集是其它数据, 本班的是测试数据) 女生复制 2 份 (即 over sampling), 这样, 每将 1 个女生误分类为男生, 相应的误分类代价就等同于将 3 个男生误分类为女生. 用这种方式, 训练的目标还是最大化 A c c Acc Acc, 但本质上已经为最大化 C o s t Cost Cost.
4. 常见误区
分析这两个误区, 才是本贴的重点.
4.1 类别均衡
假设在训练集、测试集中, 男生人数都远远多于女生人数 (本例中为 4 倍), 则我们面临类别不均衡问题. 有人为了强行均衡, 将女生进行 over sampling, 使得女生人数与男生人数大致持平.
这种做法是错误的, 因为目标不明, 既不是
A
c
c
Acc
Acc, 又不是
C
o
s
t
Cost
Cost.
Over sampling 的真正动机在于: 在很多应用中, 少数类别样本 (女生) 更为珍贵, 将它误分类为多数类别样本 (男生) 所导致的代价更高. 我们的例子中, 是 3 倍代价. Over sampling 必须根据该代价来确定复制多少.
作为一种有趣的扩展, 如果本例中改为
c
F
P
=
2
c
F
N
c_{FP} = 2 c_{FN}
cFP=2cFN, 则应该将训练集中的男生均复制 1 份, 女生不变.
4.2 将代价当成参数
有些审稿人会问: 你的代价是怎么获得的?
这是一个令人崩溃的问题. 它说明审稿人不懂代价.
代价必须是现实应用提供的输入, 是数据的一部分, 而不是学习器获得的参数 (输出). 如果现实应用不能提供该设置 (准确的数或一个区间), 就不要做代价敏感学习.
对于有误分类代价的应用, 均应使用总误分类代价作为学习器的性能评价指标. 用
A
c
c
Acc
Acc,
R
e
c
a
l
l
Recall
Recall,
F
1
F1
F1 都没什么道理.
欢迎拍砖!