1. 算法
多标签分类的适用场景较为常见,比如,一份歌单可能既属于标签旅行也属于标签驾车。有别于多分类分类,多标签分类中每个标签不是互斥的。多标签分类算法大概有两类流派:
- 采用One-vs-Rest(或其他方法)组合多个二分类基分类器;
- 改造经典的单分类器,比如,AdaBoost-MH与ML-KNN。
One-vs-Rest
基本思想:为每一个标签\(y_i\)构造一个二分类器,正样本为含有标签\(y_i\)的实例,负样本为不含有标签\(y_i\)的实例;最后组合N个二分类器结果得到N维向量,可视作为在多标签上的得分。我实现一个Spark版本MultiLabelOneVsRest,源代码见mllibX。
AdaBoost-MH
AdaBoost-MH算法是由Schapire(AdaBoost算法作者)与Singer提出,基本思想与AdaBoost算法类似:自适应地调整样本-类别的分布权重。对于训练样本\(\langle (x_1, Y_1), \cdots, (x_m, Y_m) \rangle\),任意一个实例 \(x_i \in \mathcal{X}\),标签类别\(Y_i \subseteq \mathcal{Y}\),算法流程如下:
其中