python 中 SVM 的主动学习(例如池抽样)

Active Learning (e.g. Pool Sampling) for SVM in python

我正在研究一个可以从主动学习协议中获益良多的问题(例如,与现有模型相比,给定一组未标记数据,该算法要求未标记数据的子集由 'oracle').

有没有人有在 SVM 中(最好在 python 中)实施主动学习(使用池抽样、委员会查询或其他方式)的示例?

在 python 中实施主动学习非常简单。对于最简单的情况,您只需 select 个要查询的新样本,它在您学习的 SVM(简单不确定性采样)上具有 decision_function 的最小绝对值,这基本上是一行长!。假设您有一个二元分类,在 clf 中有经过训练的 svm,在 X 中有一些未标记的示例,您只需 select

sample = X[np.argmin(np.abs(clf.decision_function(X)))] 

您也可以在 github 上找到许多不同的实现,例如去年 ECML 的 AL 论文:https://github.com/gmum/mlls2015

基于池的抽样的两种流行查询策略是不确定性抽样和委员会查询(参见paper for an extensive review). The following library implements three common uncertainty strategies: least confident, max margin and entropy as well as two committee strategies: vote entropy and average KL divergence: https://github.com/davefernig/alp

该库与 scikit-learn 兼容,可以与任何分类器一起使用。它使用随机二次抽样作为衡量主动学习收益的基线。