摘要: 代价敏感学习是将代价作为输入与优化目标时的机器学习.
1. 常见的几类代价
代价是基础数据, 与应用有紧密联系.
- 测试代价. 很多数据不是免费的, 如体检时, 测血常规花 20 20 20 元, 心电图花 15 15 15 元, B 超花 200 200 200 元. 这些代价被称为测试代价 (test cost).
- 标记代价. 在主动学习场景下, 请专家给数据打标签需要付钱, 如每个标签花费 100 元. 这被称为标记代价 (label cost).
- 误分类代价. 将患有流感的病人叫回家, 医院要赔偿 10 , 000 10,000 10,000 元, 即 c ( F N ) = 10 , 000 c(FN) = 10,000 c(FN)=10,000; 将没有流感的就诊者留着住院治疗, 医院要赔偿 500 500 500 元, 即 c ( F P ) = 500 c(FP) = 500 c(FP)=500. 相应地, 可以给出一个误分类代价矩阵.
- 延迟代价. 不清楚就诊者是否患病, 让其留院观察, 就诊者的误工开销为 200 200 200 元.
2. 典型的代价敏感学习问题
代价是一类数据, 而且与其它数据处于不同维度, 本质上与机器学习常识 2: 数据的类型应该放在一起讨论. 可以把它当成一副狗皮膏药, 与不同的机器学习问题结合, 形成相应的代价敏感学习问题.
2.1 代价敏感分类问题
- 输入: 数据, 标签, 误分类代价矩阵;
- 输出: 分类器;
- 优化目标: 平均误分类代价.
对于二分类问题, 当 c ( F N ) = c ( F P ) > 0 c(FN) = c(FP) > 0 c(FN)=c(FP)>0 时, 代价敏感二分类问题退化为最大化准确率的二分类问题 (即不考虑代价).
2.2 代价敏感冷启动封闭世界主动学习问题
- 输入: 数据, 标记代价, 误分类代价矩阵;
- 输出: 查询的标签, 分类器, 以及相应的预测值;
- 优化目标: 总代价.
假设总共有 800 800 800 个样本, 如果全让专家 (主治医生) 来打标签, 就要花 800 × 100 = 80 , 000 800 \times 100 = 80,000 800×100=80,000 元. 正确的做法是让专家给某些重要样本打标签, 建立一个好的分类器, 冒着一定的误分类的风险, 对其它样本打标签.
2.3 测试代价敏感的特征选择问题
- 输入: 数据, 标签, 各特征的测试代价;
- 输出: 特征子集;
- 优化目标: 最小化特征子集的测试代价之和;
- 约束条件: 特征子集与特征全集有相同的信息.
单位需要到组织 200 名 45 - 55 周岁的职工到医院进行体检, 确定检测的项目 (体检测套餐) 就是一个测试代价敏感的特征选择问题.
4. 解决数据不平衡问题是伪代价敏感学习
首先要明确两点:
- 代价作为基础数据, 都应该事先给出, 要么专家给出, 要么制度给出. 它们必须是输入, 而绝不会是输出 (被机器学习出来). 这是常识.
- 代价敏感学习的优化目标必须由代价定义, 而不应该是准确率之类.
一种常见的、错误的代价敏感学习概念如下: 由于数据中正负样本不平衡 (如
1
:
99
1:99
1:99), 导致学习器偏向负样本. 为此, 将正例数量扩充至
99
99
99 倍, 这样比例就变成
1
:
1
1: 1
1:1, 可以愉快地进行学习了.
考虑两种情况:
a) 正例表示有病 (如前段时间的新冠), 负例表示没病, 正例数远远少于负例数. 增加正例的比例, 分类器就会把更多的测试样本判断为正. 这样看起来好像是有道理的: 将大量负例隔离, 只为防止正例被漏掉在外传播.
b) 正例数远远大于负例数. 这时候平衡正负例数量没有任何意义, 让所有人在家休息吃药不好吗?
即使是情况 a), 强行将比例变成
1
:
1
1:1
1:1 也是不对的. 如果将
c
(
F
N
)
:
c
(
F
P
)
=
50
c(FN) : c(FP) = 50
c(FN):c(FP)=50, 即将正样本漏掉的代价很大, 就应该将训练样本比例也变成
50
:
1
50 : 1
50:1, 这样才有利于把影响巨大的正样本找出来.
5. 如何应对数据不平衡
数据不平衡在现实很常见. 在极限多标签学习中, 正标签所占比例可以小到 0.1 % 0.1\% 0.1% 以下, 这时可以采用如下几种方式:
- 使用 F 1 F_1 F1 等评价指标;
- 使用基于序的评价指标, 参见 机器学习常识 5: 性能评价指标.
反正不可以在没有代价数据的时候谈论代价敏感学习, 更不可以从数据中“学习”出各种代价设置. 再强调一遍: 作为“设置”, 它只可以是输入, 不可以是输出!
我以前还写过 F-measure 与代价敏感评价指标, 以及 误分类代价与类不均衡数据 可以顺便看看.