解决什么问题
- 数据标记有时候是个大问题,几百,几千,几万,十万,百万,千万的数据要一一标注的成本非常高。
- 引入active learning,是希望能减少数据标注的量。
是什么?
训练的数据不是一开始全部给,而是选择比较有用的数据,慢慢动态地增加,如上图。
原理
一句话,就是训练数据对模型的贡献程度不同,尽量挑选那些关键的数据。比如上图平面的点分类问题,只需要在中间间隔的数据就够了,而明显在2边的数据则对我们的分割线没啥帮助。
如何做
重点在数据的选择方法,常用的有如下方法:
- Least Confidence:
当前model预测出的最不自信的那些数据,手工标注那些数据。 - Margin Sampling:
当前model预测出来,比较摸棱两可。预测出来2个label的概率,比较接近,不知道如何选择。 - Entropy Sampling:
熵,表示信息量的大小,选择信息量比较大的那些数据。
例子
sklearn自带的digit数据
1.显示函数
from matplotlib import pyplot as plt
def show_imgs(imgs, columns):
"""
imgs: a dict(OrderDict to keep the order), its format is {title0:numpy_array, title1:(x, y), ...}
"""
fig = plt.figure(figsize=(12,12))
rows = len(imgs)//columns
begin = rows*100 + columns*10 + 1
for index, (title, img) in enumerate(imgs.items()):
ax = fig.add_subplot(begin + index)
if isinstance(img, (tuple, list)) and