机器学习(三十二) 半监督学习-基于分歧的方法与半监督聚类

32.1 基于分歧的方法:协同训练与多视图学习

与生成式方法、半监督SVM、图半监督学习等基于单学习器利用未标记数据的方式不同,基于分歧的方法 (disagreement-based methods) 使用多学习器,学习器之间的"分歧"对未标记数据的利用至关重要。"协同训练"(co-training)[Blum and Mitchell,1998]是此类方法的重要代表,它最初也被看作"多视图学习"(multi-view learning)的代表。

在现实应用中,一个数据对象往往同时拥有多个"++属性集++ "(attributeset),每个属性集构成一个"++视图++ "(view)。例如对于一部电影来说,它拥有多个属性集:图像信息对应的属性集、声音信息对应的属性集、字幕信息对应的属性集 ... 因此,一个电影片段可表示为样本(<x1, x2, ...>, y),其中xi是样本对应视图i中的属性而得的属性向量 (例如,x1为图像视图中的属性向量,x2为声音视图中的属性向量),y是标记。++(<x1, x2, ...>, y)这样的数据就是多视图数据 <xi 对应学习器 hi>++。

令Y1表示从图像视图(x1)判别的标记空间,Y2表示从声音视图(x2)判别的标记空间 ... 假设不同视图具有"相容性"(compatibility),即每个视图对应的标记空间是一致的:Y=Y1=Y2=...,例如Y=Y1=Y2={爱情片, 文艺片},而不能是Y1={爱情片, 文艺片}而Y2={爱情片, 动作片}。并且,在"相容性"基础上,不同视图信息的"互补性"会给学习器的构建带来很多便利。

协同训练正是很好地利用了多视图的"相容互补性"。假设数据拥有2个充分(sufficient)且条件独立的视图(属性集),一个简单的办法利用未标记数据:

  1. 在每个视图(属性集)上基于有标记样本分别训练出一个分类器;

  2. ++每个分类器分别挑选自己"最有把握的"(分类置信度最高的)未标记样本赋予伪标记,并将伪标记样本 提供给另一个分类器 作为新增的有标记样本再去训练更新;++

  3. 不断迭代这个"互相学习、共同进步"的过程,直到两个分类器都不再发生变化,或达到预先设定的迭代轮数为止。

注意,分类器在每轮学习中都对所有未标记样本进行分类置信度的考察,会有很大的计算开销,因此在算法中使用未标记样本缓冲池[Blum and Mitchell,1998]​。

分类置信度的计算因分类器的学习算法而异,例如若使用朴素贝叶斯分类器,可将后验概率转化为分类置信度;若使用SVM,可将间隔大小转化为分类置信度。

协同训练过程虽简单,但研究表明,尽管视图(属性集)的条件独立性在现实任务中通常很难满足,协同训练仍可有效地提升弱分类器的性能 [周志华,2013]。

32.1.2 协同训练算法

算法的流程与解读如下:

有标记样本集 Dl={(<xi1, xi2, ...>,yi) | i = 1, 2, ... l} <(xi, yi)代表一个样本,xij 代表样本 xi 对应视图 j 的那部分属性向量>

未标记样本集 Du={<xi1, xi2, ...> | i=l+1, l+2, ..., l+u} <同理>

缓冲池大小 s

每轮挑选的正例个数 p

每轮挑选的反例个数 n

分类器 hj 基学习算法 fj

  1. 从Du中随机抽取s个未标记样本构成++缓冲池Ds++ ,Du=Du\Ds

  2. Dlj={(xij, yi) | (xi, yi) ∈ Dl} <同理,Dlj 代表有标记样本集 Dl 中对应视图 j 的那部分属性向量集>

Dsj={xij | xi ∈ Ds} <同理>

  1. for t=1, 2, ..., T do

  2. for j=1, 2, ... do

  3. fj(Dlj) → hj
    <对应每个视图j,基于对应视图 j 的那部分有标记样本 Dlj 和基学习算法 fj,分别训练对应的分类器 hj>

  4. end for

  5. if hj 均未发生改变 then break - 输出

  6. else for j=1, 2 (为例) do

  7. 考察hj在Dsj上预测结果的分类置信度:

  8. 挑选p个正例置信度最高的样本,得到伪标记正例 Dp(3-j)={(xi(3-j), +1) | xi ∈ Dp}

  9. 挑选n个反例置信度最高的样本,得到伪标记反例 Dn(3-j)={(xi(3-j), -1) | xi ∈ Dn}
    <Dp(3-j), Dn(3-j) 即提供给另一个分类器(对应另一个视图) 作为新增的有标记训练样本,分别为正例和反例>

  10. Ds = Ds\(Dp∪Dn) <整个样本从Ds中去除>

  11. Dl(3-j) = Dl(3-j) ∪ Dp(3-j) ∪ Dn(3-j) <将新增样本并入对应视图j的分类器hj 它的有标记训练样本Dlj'中>

  12. end for

  13. 再从Du中随机抽取|j|*(p+n)个未标记样本加入Ds,

  14. end for t=1, 2, ..., T

输出:分类器 hj

基于分歧的方法只需采用合适的基学习器,就能较少受到++++模型假设、损失函数非凸性和数据规模问题++++的影响,学习方法简单有效、理论基础相对坚实、适用范围较为广泛。

协同训练算法本身是为多属性集数据而设计的,此后出现了一些能在++++单属性集++++ 数据上使用的变体算法,它们++++或是使用不同的学习算法++++ [Goldman and Zhou,2000]​、++++数据采样++++ [Zhou and Li,2005b]​、++++参数设置++++ [Zhou and Li,2005a]++++产生不同的学习器++++ - ++++事实上此类算法无需数据拥有多视图,仅需弱学习器之间具有显著的分歧(或差异),即可通过相互提供伪标记样本的方式有效提升泛化性能[++++周志华,2013]。不同视图、不同算法、不同数据采样、不同参数设置等,都是产生学习器差异的渠道,而非必备条件。

32.2 半监督聚类

半监督聚类 (semi-supervised clustering)是利用额外的监督信息获得更好的聚类效果,聚类任务的监督信息大致有两种类型:

第一种类型是"必连"(must-link)与"勿连"(cannot-link)约束,前者是指样本必属于同一个簇,后者是指样本必不属于同一个簇;

第二种类型是少量的有标记样本。

32.2.1 约束k均值算法

约束k均值(Constrained k-means)算法[Wagstaff et al.,2001]是利用第一类监督信息的代表。

给定样本集D={x1, x2, ..., xm}以及"必连"关系集合 Ml 和"勿连"关系集合 Cl,(xi,xj)∈Ml表示xi与xj必须属于同簇,(xi,xj)∈Cl表示xi与xj必不属于同簇。

此算法是K均值算法的扩展,算法流程如下:

令聚类簇数为k

  1. 从D中随机选取k个样本作为初始中心(均值)向量 {μ1, μ2, ..., μk}

  2. repeat

  3. Cj = ∅ (j ∈ {1,2,...,k}) <中心向量μj更新之后,将Cj清空,重新归纳隶属关系>

  4. for i = 1, 2, ..., m do

  5. 计算样本xi与各中心(均值)向量μj之间的距离:dij = ||xi-μj||2

  6. K = {1, 2, ..., k}

  7. is_merged = false

  8. while not is_merged do

  9. 基于K找出与样本xi距离最近的μj - 簇:r = argmin(j∈K) dij

  10. 检测将xi划入聚类簇Cr是否会违背Ml与Cl中的约束 - is_voilated

  11. if not is_voilated then Cr = Cr ∪ {xi},is_merged = true

  12. else K = K\r if K = ∅ then break and return Error

  13. end while when is_merged=true - next xi

  14. end for i = 1, 2, ..., m

  15. μj = [Σ(x∈Cj)x] / |Cj|

  16. until μj 均未发生变化

输出:簇划分{C1, C2, ..., Ck}

32.2.2 约束种子k均值算法

第二类监督信息是将少量有标记样本作为"种子"​,使用它们初始化k个聚类簇的中心,并在聚类簇迭代更新过程中不改变种子样本的簇隶属关系。

约束种子k均值(Constrained Seeds k-means)算法[Basu et al.,2002]​,算法流程如下:

样本集D={x1, x2, ..., xm}

包含少量有标记样本S = ∪(j=1,k)Sj

聚类簇数为k

  1. for j = 1, 2, ..., k do

  2. μj = [Σ(x∈Sj)x] / |Sj| <以有标记样本Sj 初始化 其对应簇的均值(中心)μj>

  3. end for

  4. repeat

  5. Cj = ∅ (j ∈ {1,2,...,k}) <中心向量μj更新之后,将Cj清空,重新归纳隶属关系>

  6. for j = 1, 2, ..., k do

  7. Cj = Cj ∪ Sj

  8. end for

  9. for xi ∈ D\S do

  10. 计算样本xi与各均值(中心)向量μj (1≤j≤k) 之间的距离:dij = ||xi-μj||2

  11. 找出与样本xi距离最近的μj - 簇:r = argmin(j∈K) dij

  12. 将样本xi划入相应的簇:Cr = Cr ∪ {xi}

  13. end for

  14. μj = [Σ(x∈Cj)x] / |Cj|

  15. until μj 均未发生变化

输出:簇划分{C1, C2, ..., Ck}

相关推荐
steem_ding2 小时前
C++ 回调函数详解
开发语言·c++·算法
会编程的土豆2 小时前
字符串知识(LCS,LIS)区分总结归纳
开发语言·数据结构·c++·算法
预见AI2 小时前
康耐视VisionPro连接海康相机教程(Gige)及常见错误问题
人工智能·计算机视觉·visionpro·海康相机
xushichang123_2 小时前
AI销售助手工具推荐:径硕科技(JINGdigital)与JINGEO,赋能B2B销售团队高效增长
大数据·人工智能·科技
金融Tech趋势派2 小时前
企业微信收费吗?2026年最新收费标准
人工智能·企业微信
竹之却2 小时前
【Agent-阿程】AI先锋杯·14天征文挑战第14期-第6天-大模型RAG检索增强生成实战
人工智能·大模型·检索增强·faiss·rag
QYR_Jodie2 小时前
异戊二烯橡胶(IR)行业深度洞察:预计2032年将达到20.92亿美元
大数据·人工智能·市场报告
北顾笙9802 小时前
day25-数据结构力扣
数据结构·算法·leetcode
TsingtaoAI2 小时前
技术博客外,Gen1比Gen0进化了什么
人工智能·具身智能