机器学习读书笔记:半监督学习

半监督学习

​ 在真实应用场景中,训练样本集的数目通常会很大。但是都是未标记数据,特别是在一些跨领域行业中,比如医疗,工业。对样本的分析都需要专业人才,甚至高精尖的人才来确定标记。而这些人肯定是不可能给你长时间的打标记的。那么半监督学习就是想利用小部分的标记数据,再加上大量未标记样本来进行推理和判断。之前描述的监督学习和无监督学习都无法满足要求,因此,一个新的思路就是——半监督学习。

​ 半监督学习还分成几种形式:

  • 利用小样本先训练出一个模型,然后模型通过某种策略在其他的训练样本中挑出某些少量数据,再通过专家知识对这些数据进行标记;然后再通过这些标记去更新模型。不断的迭代这个过程,称之为**“主动学习”**。

​ 如果实在没有办法获得新的标记数据了,还是可以通过另外的方法进行半监督学习,我们假设所有的样本都符合某种聚类,也就是说“相似的样本会有相似的输出”,或者说是符合某种分布。根据未标记样本的用途,还可以细分一下:

  • 如果未标记样本就是需要预测的样本,成为直推学习。
  • 如果未标记样本不是需要预测的样本,成为纯半监督学习。

​ 书上给了一张图说明了这几个学习方式的区别:

在这里插入图片描述

​ 在主动学习中,学习过程是需要挑选出一些样本进行标记,但是下面两种是不需要在学习过程中挑选新样本的,也就是不需要重复利用专家知识就可以达到较好的效果。

生成式方法

​ 半监督学习中的一个重要假设就是所有的数据都是基于同一个模型。那么在生成式方法中,是计算样本属性和标记的联合概率 P ( x , y ) P(x,y) P(x,y),从这个公式中,可以把 y y y当成一个缺失的样本属性,就可以引用之前聚类中讲到的的EM算法进行推导:

​ 生成式模型有多种,书中给出的是高斯混合模型(高斯模型在上面那个传送门中也有提到)的例子,还有贝叶斯概率模型等其他的模型。

  • 在高斯混合模型中,样本 x x x出现的概率是:
    p ( x ) = ∑ i = 1 N α i p ( x ∣ μ i , Σ i ) p(x)=\sum_{i=1}^N\alpha_ip(x|\mu_i,\Sigma_i) p(x)=i=1Nαip(xμi,Σi)
    表示的是样本 x x x从不同的高斯分量来的概率之和。

  • 根据生成式模型的方式,样本 x x x的标记 y = f ( x ) y=f(x) y=f(x)应该是模型下后验概率最大的那一类,也就是通过模型计算出来概率最大的类别是哪个( j j j表示类别号):
    f ( x ) = arg ⁡ max ⁡ y ∈ Y p ( y = j ∣ x ) f(x)=\arg \max_{y\in Y}p(y=j|x) f(x)=argyYmaxp(y=jx)

  • 对上一步的公式进行推导, Θ \Theta Θ表示每一个高斯分量,分量数目和类别数目相同:
    f ( x ) = arg ⁡ max ⁡ y ∈ Y ∑ i = 1 N p ( y = j , Θ = i ∣ x ) f(x)=\arg \max_{y\in Y}\sum_{i=1}^Np(y=j,\Theta=i|x) f(x)=argyYmaxi=1Np(y=j,Θ=ix)
    这个推导是因为上一步的概率可以换成每个分量的概率之和。

  • 继续上一步:
    f ( x ) = arg ⁡ max ⁡ y ∈ Y ∑ i = 1 N p ( y = j ∣ Θ = i , x ) p ( Θ = i ∣ x ) f(x)=\arg \max_{y\in Y}\sum_{i=1}^Np(y=j|\Theta=i,x)p(\Theta=i|x) f(x)=argyYmaxi=1Np(y=jΘ=i,x)p(Θ=ix)
    我自己的理解是通过贝叶斯公式将后验概率换成了先验概率, p ( y = j ∣ Θ = i , x ) p(y=j|\Theta=i,x) p(y=jΘ=i,x)表示样本中是 i i i个分量出来,并且类别为 j j j的概率。 p ( Θ = i ∣ x ) p(\Theta=i|x) p(Θ=ix)为样本中高斯分量 i i i的概率,可以通过:
    p ( Θ = i ∣ x ) = α i p ( x ∣ μ i , Σ i ) ∑ i = 1 N α i p ( x ∣ μ i , Σ i ) p(\Theta=i|x)=\frac{\alpha_ip(x|\mu_i,\Sigma_i)}{\sum_{i=1}^N\alpha_ip(x|\mu_i,\Sigma_i)} p(Θ=ix)=i=1Nαip(xμi,Σi)αip(xμi,Σi)
    进行计算。

  • 上面的公式中, p ( y = j ∣ Θ = i , x ) p(y=j|\Theta=i,x) p(y=jΘ=i,x)部分是样本 x x x属于类别 y y y的概率,需要通过标记过的样本来计算,如果样本量很小,就很有可能无法准确的描述整体状态;但是可以通过后面一截 p ( Θ = i ∣ x ) p(\Theta=i|x) p(Θ=ix)来提升,因为这一截的计算方法是不需要有标记的,从上面的公式可以看出来。从而达到少量标记样本+大量未标记样本来提升准确率的目的。

  • 可以用极大似然估计+EM迭代算法来计算模型中的三个参数 μ , Σ , α \mu,\Sigma,\alpha μ,Σ,α

半监督SVM

​ 半监督SMV(S3VM: Semi-Supervised Support Vector Machine)是针对经典SVM算法的改进版。其中最经典的改进版为TSVM(Transductive Support Vector Machine)。TSVM的思路是在去试着给未标记样本一个伪标记,然后基于真实标记+伪标记的训练样本进行SVM超平面的划分。超平面划分好了,标记也就确定了。但是这个直接去给伪标记是不可能的,因为未标记的样本是大量的,如果对这些样本进行穷举标记,然后对每个穷举的可能性进行SVM划分,计算量就太大了,也不太现实,所以需要有一个更高效的方法来指导性的给出伪标记,并作出超平面的划分。

  • 首先,必须有一个优化目标,有了优化目标,才知道哪次的伪标记做的不好,也才知道往哪个方向去进行改进。在经典的SVM中,优化目标为 1 ∣ ∣ w ∣ ∣ 2 2 \frac{1}{||w||_2^2} w221,可以参考博客:

    那么在TSVM中,优化目标变成了:
    min ⁡ w , b , y ^ , ξ 1 ∣ ∣ w ∣ ∣ 2 2 + C l ∑ i = 1 l ξ i + C u ∑ i = l + 1 m ξ i \min_{w,b,\hat y,\xi}\frac{1}{||w||_2^2}+C_l\sum_{i=1}^l\xi_i+C_u\sum_{i=l+1}^m\xi_i w,b,y^,ξminw221+Cli=1lξi+Cui=l+1mξi
    其中 l l l为标记样本的数目, u u u为未标记的样本数目。 ξ \xi ξ为一个松弛向量,每个样本对应一个分量,每个分量的计算和标准SVM算法中的方式一样: y i ( x T x i + b ) − 1 y_i(x^Tx_i+b)-1 yi(xTxi+b)1 C l , C u C_l, C_u Cl,Cu是用于控制标记/未标记两部分的一个权重。

    随着每次伪标记的给出,动态的调整向量 ξ , C l , C u \xi,C_l, C_u ξCl,Cu

  • 优化目标出来之后,就是怎么去计算的问题了,书中写的TSVM得过程为:

在这里插入图片描述

​ 对上面的过程做一个解释:

  1. 首先用少量的标记样本计算出一个SVM模型: S V M l SVM_l SVMl
  2. S V M l SVM_l SVMl去预测所有的未标记样本,会得到未标记样本的类别,这就是伪标记
  3. 因为这个模型的错误率肯定会比较高,比较训练数目太小,所以先调整 C u < < C l C_u<<C_l Cu<<Cl,使得在优化目标中 C u C_u Cu的部分权重小于 C l C_l Cl部分。
  4. 算法的停止条件是 C u ≥ C l C_u\ge C_l CuCl,也就是未标记的样本权重慢慢调整的和标记样本一样了,说明已经达到了标记的重要程度,可以结束了。
  5. 那么SVM优化目标中的除 w w w之外的参数全部确定了,就可以计算得到超平面 w w w了, ξ \xi ξ是基于 w w w进行计算的。
  6. 重点在于怎么进行调整,调整的方法是找出两个伪标记为异类,也就是两个样本的伪标记不同( y i ^ y ^ j < 0 \hat {y_i} \hat y_j < 0 yi^y^j<0,二分类问题),并且很可能发生错误的标记,那也就是 ξ i > 0 , ξ j > 0 , ξ i + ξ j ≥ 2 \xi_i>0, \xi_j>0,\xi_i+\xi_j\ge2 ξi>0,ξj>0,ξi+ξj2,至于是为什么这个就是发生错误的概率比较高,还没太想明白,老是被距离和各种转换搞晕。
  7. 从伪标记样本中挑出两个之后,把两个样本的标记互换(既然错误的概率最大,那么就换过来),也就是上面的第7行和第8行。
  8. 重新计算 w , b , ξ w,b,\xi w,b,ξ,也就是超平面,理论上此时的超平面应该更加准确。
  9. 把第一轮中确定的 C u , C l C_u, C_l Cu,Cl的所有满足 ξ i > 0 , ξ j > 0 , ξ i + ξ j ≥ 2 \xi_i>0, \xi_j>0,\xi_i+\xi_j\ge2 ξi>0,ξj>0,ξi+ξj2的样本都互换完并且划分完超平面后,调整 C u C_u Cu的值, C u = m i n { 2 C u , C l } C_u=min\lbrace 2C_u, C_l\rbrace Cu=min{2Cu,Cl}
  10. 改进版:如果基于标记样本训练出来的SVM对未标记样本的分类明显比较偏,比如某种类别的比较多(针对二分类问题),那么可以把 C u C_u Cu拆成两部分: C u + C_u^+ Cu+ C u − C_u^- Cu,在初始化的时候只初始化 C u − C_u^- Cu,令 C u + = u − u + C u − C_u^+=\frac{u_-}{u_+}C_u^- Cu+=u+uCu,其中 u − u_- u为伪标记为反类的数目, u + u_+ u+为伪标记为正类的数目。
  11. 还有一堆其他的计算过程的方法,不看了。

基于分歧的方法

​ 对于一个训练样本来说,可以根据业务属性分成若干个视图(View)。视图就是一个属性集,书上举出的例子就是可以用一些属性去描述一部电影,这些属性可以分成是图像的描述、声音的描述、字幕、网上评论等等属性集;每个属性集包含若干个属性,比如图像可以包括色彩,帧数等等很多。根据属性集的划分,一个样本可以描述成 ( < x i , x j > , y ) (<x_i,x_j>,y) (<xi,xj>,y) x i x_i xi为第 i i i个属性集的属性向量。

​ 视图“相容性”:就是说针对每个视图或者属性集进行推断,推断结果的定义域是一样的,结果的类别都只能是 ( 1 , 2 , 3 , 4 , 5 , 6 ) (1,2,3,4,5,6) (1,2,3,4,5,6),不能有别的类别。

​ 如果每个属性集都是独立的,那么就有下面的协同训练过程:

  1. 对每个属性集都分配一个学习算法,每一个视图的学习算法都使用已标记的样本进行训练获得模型。
  2. 每个分类器对剩余样本进行推断,并将每个分类器认为概率最高的伪标记样本作为新的训练样本给其他分类器作为训练样本使用。
  3. 循环第二步,直到每个分类器都不再发生变化。
  4. 这个过程就是相当于利用其他分类器的结果进行协同训练。
  5. 这个概率最高可以称作为分类置信度,贝叶斯网络的话就是计算出来的后验概率,SVM的话是间隔大小。

在这里插入图片描述

图半监督学习

​ 这个过程看的半懂不懂,试着记录一下。

  1. 有标记样本集 D l = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x l , y l ) } D_l=\lbrace (x_1,y_1),(x_2,y_2)\dots (x_l,y_l)\rbrace Dl={(x1,y1),(x2,y2)(xl,yl)}和未标记样本集 D u = { ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x u , y u ) } D_u=\lbrace (x_1,y_1),(x_2,y_2)\dots (x_u,y_u)\rbrace Du={(x1,y1),(x2,y2)(xu,yu)}。算法是使用这两个集合来构建一个图G=<V,E>。图相关内容可参考博客:

    其中,顶点集合V就是 l + u l+u l+u个样本,共 m m m个顶点;边集合E由下面的公式定义:
    ( W ) i j = { e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 2 2 σ 2 ) , i f i ≠ j 0 (W)_{ij}=\begin{cases}exp(\frac{-||x_i-x_j||_2^2}{2\sigma^2}), if i \neq j \\ 0 \end{cases} (W)ij={exp(2σ2xixj22),ifi=j0
    如果 i = j i=j i=j为0;而 σ \sigma σ是一个需要指定的参数:高斯函数带宽参数。计算出来的值就是顶点与顶点之间变得权重:“强度”。

  2. 假设一个推断函数 f f f是表示从图 G − > R ( 实 数 域 ) G-> R(实数域) G>R()的一个映射。定义了一个这个推断函数 f f f的能量函数 E ( f ) E(f) E(f):
    E ( f ) = 1 2 ∑ i = 1 m ∑ j = 1 m ( W ) i j ( f ( x i ) − f ( x j ) ) 2 E(f)=\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m{(W)_{ij}(f(x_i)-f(x_j))^2} E(f)=21i=1mj=1m(W)ij(f(xi)f(xj))2
    我自己对这个函数的理解是:每个样本之间的推断之间的值得差值,来乘以对应图或者矩阵中的 W W W值,然后再来求和。从形式上看,第一项 W W W是计算了两个样本之间的相似度,第二项 ( f ( x i ) − f ( x j ) ) 2 (f(x_i)-f(x_j))^2 (f(xi)f(xj))2是计算了这两个样本之间推断值得相似度。理论上一个好的推断函数,在同一个分布样本上的差异应该是很小的。所以就看令 E ( f ) E(f) E(f)最小的情况。

  3. 然后根据一堆看不太懂的推导过程,直接看结论,可以得到:
    f u = ( I − P u u ) − 1 P u l f l f_u=(I-P_{uu})^{-1}P_{ul}f_l fu=(IPuu)1Pulfl
    其中 I I I是单位矩阵。

    P u u = D u u − 1 W u u P_{uu}=D_{uu}^{-1}W_{uu} Puu=Duu1Wuu

    P u u = D u u − 1 W u u P_{uu}=D_{uu}^{-1}W_{uu} Puu=Duu1Wuu

    其中 D = d i a g ( d 1 , d 2 … d l + u ) D=diag(d_1,d_2 \dots d_{l+u}) D=diag(d1,d2dl+u) d i = ∑ j = 1 l + u ( W ) i j d_i=\sum_{j=1}^{l+u}{(W)_{ij}} di=j=1l+u(W)ij,也就是矩阵 W W W中第 i i i行的元素之和。

    然后把D, W两个矩阵进行分块:
    D = { d 11 … d 1 l … d 1 m d 21 … d 2 l … d 2 m … d l 1 … d l l … d l m … d m 1 … d m l … d m m } D=\begin{Bmatrix} d_{11} & \dots d_{1l} & \dots & d_{1m} \\ d_{21} & \dots d_{2l} & \dots & d_{2m} \\ \dots \\ d_{l1} & \dots d_{ll} & \dots & d_{lm} \\ \dots d_{m1} & \dots d_{ml} & \dots & d_{mm} \\ \end{Bmatrix} D=d11d21dl1dm1d1ld2ldlldmld1md2mdlmdmm
    那么针对第 l l l l l l列对矩阵进行分块:
    D = { D l l D l u D u l D u u } D=\begin{Bmatrix} D_{ll} & D_{lu} \\ D_{ul} & D_{uu}\end{Bmatrix} D={DllDulDluDuu}
    把矩阵分成了四块, W W W矩阵是一个道理。

  4. 从上面的公式可以看出,如果把 f l f_l fl就定义成样本 D l D_l Dl的输出,也就是标记的话,就可以直接计算得到 f u f_u fu了。

​ 对上面的二分类问题做点改动就是多分类问题的过程:

在这里插入图片描述

​ 比二分类问题中的过程多了几个东西:

​ F矩阵,这个矩阵就是用于推断所有未知标记样本的,需要通过一个传播算法来进行计算,通过多轮迭代达到收敛后使用。

  • F为一个 l + u l+u l+u行, ∣ Y ∣ ( 类 别 数 ) |Y|(类别数) Y()列的矩阵
  • 如果F确定了,那么每个样本 x i x_i xi就可以直接去相应的一行取出来进行计算,通过 y i = a r g m a x 1 < j < ∣ Y ∣ ( F ) i j y_i=argmax_{1<j<|Y|}(F)_{ij} yi=argmax1<j<Y(F)ij,我理解是这一行中哪个元素最大,那么就是属于所在列代表的类别。

​ 那么问题就是确定传播算法,传播算法的计算公式为:
F ( t + 1 ) = α S F ( t ) + ( 1 − α ) Y F(t+1)=\alpha SF(t) + (1-\alpha)Y F(t+1)=αSF(t)+(1α)Y

  • 其中 Y i j = { 1 , i f ( 1 < i < l ) ( y i = j ) 0 , o t h e r w i s e Y_{ij}=\begin{cases}1, if(1<i<l) (y_i=j) \\0, otherwise\end{cases} Yij={1,if(1<i<l)(yi=j)0,otherwise,也就是前 l l l行,在类别的那一列上标记了1。
  • 迭代中的最初的 F ( 0 ) = Y F(0)=Y F(0)=Y

半监督聚类

​ 聚类本身就是不需要标记信息的,为什么有个半监督聚类呢,就是说如果有一些辅助的标记信息,是可以来指导聚类过程的,相当于有一些约束条件。

有两种指导信息:

  • 和上面的一样,有一些样本是标记了类别的,每个类别是可以看成是一个聚类簇。
  • 说明哪些样本一定是一个簇的,或者说明哪些样本一定不是一个簇的。

​ 书中针对第二种指导条件,改造了K均值算法,第二种还是给出了那些样本一定不是一个簇的。这种情况下的话比较简单,直接用这些样本做初始的质心即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新兴AI民工

码字不易,各位看客随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值