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

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}

相关推荐
eastyuxiao28 分钟前
思维导图拆解项目范围 3 个真实落地案例
大数据·运维·人工智能·流程图
风落无尘1 小时前
《智能重生:从垃圾堆到AI工程师》——第五章 代码与灵魂
服务器·网络·人工智能
贾斯汀玛尔斯1 小时前
每天学一个算法--LSM-Tree(Log-Structured Merge Tree)
java·算法·lsm-tree
冬奇Lab1 小时前
RAG 系列(八):RAG 评估体系——用数据说话
人工智能·llm
landyjzlai2 小时前
蓝迪哥玩转Ai(8)---端侧AI:RK3588 端侧大语言模型(LLM)开发实战指南
人工智能·python
ZhengEnCi4 小时前
05-自注意力机制详解 🧠
人工智能·pytorch·深度学习
前端程序媛-Tian4 小时前
前端 AI 提效实战:从 0 到 1 打造团队专属 AI 代码评审工具
前端·人工智能·ai
weixin_417197054 小时前
DeepSeek V4绑定华为:一场飞行中换引擎的国产算力革命
人工智能·华为