system: [SYSTEM]

user: 3. 数据分布估计下基于相似度的PU文本分方法 3.1. 问题定义及符号标注 给定一个训练集P，P中只含有正例样本，不含有任何反例样本，训练集P中标签集合为 C = { c 1 ， ⋯ ， c n } ；未标注数据集U中则同时含有正例样本和反例样本，即存在样 d i ∉ c k ， ∀ c k ∈ C ；我们的任务就是在训练集 P ∪ U 上构建一个分类器 φ ； φ ( P ， U ) ⇒ U n ，其中P和U是分类器 φ 的输入， U n = { d i ∈ U ， 但 d i ∉ c k ， ∀ c k ∈ C } 是分类器 φ 的输出。算法主要分为四个步骤：1) 对仅含有正例和未标注 数据抽取可信正反例样本；2) 计算代表性样例；3) 确定U中剩余样例(称为间谍样本)的类别标签；4) 建立最终分类器。 3.2. 抽取可信正反例 由于数据集中只包含正例和未标注数据，使得传统算法失效。因此，算法的首先要解决的问题是从未标注数据中提取一些可信的反例，Yu等人 [ 4 ] 提出PEBL的方法中采用1-DNF技术去识别未标注数据中的反例数据，由于1-DNF技术基于正例样本特征来识别反例数据，因此在正例数据较少的情况下，识别反例数据的效果较差。Liu等人 [ 5 ] 提出了Spy技术的来识别反例数据，这方法对初始阈值十分敏感，所提取的反例数据可信度不高。Sha等人 [ 10 ] 提出基于最大熵的方法来识别反例数据。许等人 [ 11 ] 提出了基于KL距离的反例识别方法用于不平衡的PU分类问题中。Hu等人 [ 12 ] 通过大量实验证明了在未标注数据分布未知情况下，采用不同的方法来抽取未标注数据中的反例数据，以及从未标注数据中抽取反例数据的数量，都会影响到最终的分类模型性能。本文选取了Auto-KL算法 [ 9 ] 来提取反例数据，该算法通过评估未标注数据分布，自适应抽取反例数据，有效降低反例提取数目这一参数的敏感性。在得到未标注中反例数据比例后，将Spy和Rocchio两种识别反例的方法集成，从未标注数据中自适应抽取合适数量的正负例数据。记正例数据集合为RP中，负例数据集合记为RN中。抽取完正负例数据后，未标注数据集U中剩下的样例，称为间谍样例，记为数据集合US。 3.3. 计算代表性正负例原型 第一步中获得可信反例集合RN与可信正例集合RP，加上训练集中原本已有的少量正例数据集合P合并成新的训练样本，在此基础上即可初步训练一个分类器，但是，该分类器的泛化性能不高，主要原因是未标注数据集U中仍有大量有用的数据样例未被充分利用，即间谍样例集合US仍然包含大量有用信息，这些样本信息可进一步提升分类器的性能，为了进一步将间谍样例加入到训练数据中，首先需要确定间谍样例的类别标签，这里我们首先需要计算出代表性正负例原型，这里使用经典的K-means算法对可信反例RN进行聚类，即RN聚类为RN 1 ，RN 2 ，…，RN m ，其中 m = | RN | / | U | ∗ k ，根据文献 [ 5 ] [ 6 ] ，m设置为10，最后使用Rocchio分类器 [ 8 ] 分别为正例和反例计算出10个代表性样例，如算法1所示： 算法1：计算代表性样例原型算法。 1) 输入：P和RN 2) 输出： p k 和 n k ， k = 1 ， ⋯ ， 10 。 3) 将RN聚类成10个子类： RN 1 ， RN 2 ， ⋯ ， RN 10 ； 4) FOR k = 1 ， ⋯ ， 10 DO 5) p k = α 1 | P + RP | ∑ e ∈ p e ‖ e ‖ − β 1 | RN k | ∑ e ∈ R N k e ‖ e ‖ ; 6) n k = α 1 | RN k | ∑ e ∈ p e ‖ e ‖ − β 1 | P | ; 7) END FOR 算法1中：步骤2)中每个样例使用TFIDF [ 13 ] 这一特征权值的计算方法建立向量空间模型 v = ( q 1 ， q 2 ， … q n ) ， p k 和 n k 分别代表正例和负例的代表性样例原型，根据文献 [ 5 ] [ 6 ] ，α和β分别设置为16和4。 3.4. 确定间谍样例的类别标签 为了进一步扩充训练样本，我们必须正确计算方法剩余未标注数据US(即间谍样例)的类别标签。将US中类别标签为正例的样例数据记为LP，将US中类别标签为负例的样例数据记为LN。从而整个间谍样本集合 US = LP ∪ LN ，这里我们利用算法1分别为正例和反例建立10个代表性样例原型，来估计US中每个间谍样例的类别标签。US中标注为正例的间谍样例记为LP，US中反例的间谍样例记为LN。由于算法2中采用的Rocchio算法已经可以初步的分离出正例数据和负例数据。但是正例数据与负例数据的决策边界不一定是线性的，Rocchio作为一个线性分类器会出现分类错误，从而导致间谍样例发生错误标注，进而影响最终的PU分类模型的性能。因此简单计算每个间谍样例同代表性样例的相似度来确定其类别标签将导致一定的错误。本文提使用K-means对间谍样例聚类，即US聚类为NS 1 ，NS 2 ，…，NS m ， 其中 n = t × | US | / ( | US | + | NS | ) ，根据文献 [ 5 ] [ 6 ] ，n设置为30，然后使用了基于样例局部相似度和样例全局相似度这两种方法来评估间谍样例类别，减低标注误差。 3.4.1. 样例局部相似性 样例的局部相似性的基本思想是相同微簇中的样例应有很高类别相同，算法2展示了样例局部相似性，对于US的每个微簇，首先对微簇中的每个样例与算法1中产生的正负代表性样例做正弦相似度计算，将最相似代表性样例的类别标签作为每个样例的临时类别标签，最后通过投票机制决定整个微簇的类别标签。微簇的类别标签作为微簇中每个样例的最终类别标签。 算法2：样例局部相似性的计算算法(Auto-KLBSL)。 输入： US i ， i = 1 ， 2 ， ⋯ ， m ； 输出： LP i 和 LN i 。 1) LP i = ∅ ， LN i = ∅ ， pos_vote = 0 ， neg_vote = 0 ； 2) FOR每个样例 e ∈ US i DO 3) IF max i = 1 10 s i m ( e ， p i ) > max i = 1 10 s i m ( e ， n i ) 4) THEN pos_vote++; 5) ELSE neg_vote++; 6) END IF 7) END FOR 8) IF pos_vote > neg_vote 9) THE LP i = LP i ∪ US i ； 10) ELSE LN i = LN i ∪ US i ； 11) END IF 算法2中， s i m ( x ， y ) = x ⋅ y / ‖ x ‖ ⋅ ‖ y ‖ . (1) 算法2通过确定微簇的类别标签来确定其内部每个样例的类别标签，该算法考虑微簇中每个样例同正反例代表性样例的相似度，基于投票机制确定微簇的类别标签。但当微簇中正反例样本比例接近时，基于样例局部相似性通过投票机制判别微簇的类别标签，会发生错误标注，从而会导致训练出来的分类模型性能较差。图1所示，间谍样本通过K-means算法的部分聚类结果。 根据算法2，可以发现微簇Micro-C1与微簇Micro-C2很容易确定其子类标签，分别为正例和反例。但是对于微簇Micro-C4，由于其内部正反样例的数目十分接近，若基于算法3来确定子类类别标签会产生一定错误。 3.4.2. 样例全局相似性 样例全局相似性基本思想是：充分考虑US中每个样例同全体正反例代表性样例间的相似度，并忽略样例所在的微簇间的关系。对于每个间谍样例同全体的代表性样例进行相似度计算，求出该样例属于正例和反例的类别概率，如公式2、3所示。选择概率最大的类别作为样例的类别标签。 算法3：样例全局相似性的计算算法(Auto-KLBSG)。 图1. 样例的局部相似性 输入： US i ， i = 1 ， 2 ， ⋯ ， m ； 输出： LP i 和 LN i 。 1) LP i = ∅ ， LN i = ∅ ； 2) FOR每个样例 e ∈ U S i DO 3) IF proba_positive(e) > proba_negative(e) 4) THE LP i = LP i ∪ { e } ； 5) ELSE LN i = US i ∪ { e } ； 6) END IF 7) END FOR 算法3中， P r o b a _ p o s i t i v e ( e ) = ∑ i = 1 10 s i m ( e ， p i ) / ∑ i = 1 10 s i m ( e ， p i ) + s i m ( e ， n i ) ; (2) P r o b a _ n e g a t i v e ( e ) = ∑ i = 1 10 s i m ( e ， n i ) / ∑ i = 1 10 s i m ( e ， p i ) + s i m ( e ， n i ) ; (3) 算法3通过计算间谍样例与全体代表性样例的相似度，直接判别样例的类别标签，忽略间谍样例所在微簇的类别标签，在微簇中正反例比例接近的情况下，可有效避免样例标签被错误标注。 3.5. 建立最终的分类器 将已有的正例数据集合P和算法第二步提取的可信正例数据集合RP与可信反例数据集合RN，以及算法第三步提取的间谍样本中的正例数据集合LP，反例数据集合LN，组成最终的训练数据。即可训练最终的SVM分类器。但是考虑到传统的SVM算法采用一个核函数，不足以解决样本数据含有异构信息，或者数据高维特征空间分布不平坦时情况。本文使用多核SVM算法来进行训练最终的分类器，进一步提升分类器的性能。 多核学习 [ 14 ] [ 15 ] [ 16 ] 利用多个核函数将输入空间变换为高维特征空间，转化为凸优化问题。文献论述 [ 14 ] [ 15 ] [ 16 ] 已经证明了多核学习能获得比单核模型更好的性能。在本文提出的PU框架下，分别使用多核学习算法SimpleMKL [ 16 ] 进行实验，建立最终分类器算法如下： 算法4：建立最终分类器 输入：P，RN，LP和LN； 输出：分类器F SimpleMKL 1) P = P ∪ LP ； 2) N = RN ∪ LN ； 3) 使用SimpleMKL在P+N，训练最终分类器F SimpleMKL 。