在真实应用场景中,训练样本集的数目通常会很大。但是都是未标记数据,特别是在一些跨领域行业中,比如医疗,工业。对样本的分析都需要专业人才,甚至高精尖的人才来确定标记。而这些人肯定是不可能给你长时间的打标记的。那么半监督学习就是想利用小部分的标记数据,再加上大量未标记样本来进行推理和判断。之前描述的监督学习和无监督学习都无法满足要求,因此,一个新的思路就是——半监督学习。
半监督学习还分成几种形式:
如果实在没有办法获得新的标记数据了,还是可以通过另外的方法进行半监督学习,我们假设所有的样本都符合某种聚类,也就是说“相似的样本会有相似的输出”,或者说是符合某种分布。根据未标记样本的用途,还可以细分一下:
书上给了一张图说明了这几个学习方式的区别:
在主动学习中,学习过程是需要挑选出一些样本进行标记,但是下面两种是不需要在学习过程中挑选新样本的,也就是不需要重复利用专家知识就可以达到较好的效果。
半监督学习中的一个重要假设就是所有的数据都是基于同一个模型。那么在生成式方法中,是计算样本属性和标记的联合概率 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=1∑Nα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)=argy∈Ymaxp(y=j∣x)
对上一步的公式进行推导, Θ \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)=argy∈Ymaxi=1∑Np(y=j,Θ=i∣x)
这个推导是因为上一步的概率可以换成每个分量的概率之和。
继续上一步:
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)=argy∈Ymaxi=1∑Np(y=j∣Θ=i,x)p(Θ=i∣x)
我自己的理解是通过贝叶斯公式将后验概率换成了先验概率, 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(Θ=i∣x)为样本中高斯分量 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(Θ=i∣x)=∑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(Θ=i∣x)来提升,因为这一截的计算方法是不需要有标记的,从上面的公式可以看出来。从而达到少量标记样本+大量未标记样本来提升准确率的目的。
可以用极大似然估计+EM迭代算法来计算模型中的三个参数 μ , Σ , α \mu,\Sigma,\alpha μ,Σ,α。
半监督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} ∣∣w∣∣221,可以参考博客:
那么在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^,ξmin∣∣w∣∣221+Cli=1∑lξi+Cui=l+1∑mξ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得过程为:
对上面的过程做一个解释:
对于一个训练样本来说,可以根据业务属性分成若干个视图(View)。视图就是一个属性集,书上举出的例子就是可以用一些属性去描述一部电影,这些属性可以分成是图像的描述、声音的描述、字幕、网上评论等等属性集;每个属性集包含若干个属性,比如图像可以包括色彩,帧数等等很多。根据属性集的划分,一个样本可以描述成 ( < x i , x j > , y ) (
视图“相容性”:就是说针对每个视图或者属性集进行推断,推断结果的定义域是一样的,结果的类别都只能是 ( 1 , 2 , 3 , 4 , 5 , 6 ) (1,2,3,4,5,6) (1,2,3,4,5,6),不能有别的类别。
如果每个属性集都是独立的,那么就有下面的协同训练过程:
这个过程看的半懂不懂,试着记录一下。
有标记样本集 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就是 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σ2−∣∣xi−xj∣∣22),ifi=j0
如果 i = j i=j i=j为0;而 σ \sigma σ是一个需要指定的参数:高斯函数带宽参数。计算出来的值就是顶点与顶点之间变得权重:“强度”。
假设一个推断函数 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=1∑mj=1∑m(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)最小的情况。
然后根据一堆看不太懂的推导过程,直接看结论,可以得到:
f u = ( I − P u u ) − 1 P u l f l f_u=(I-P_{uu})^{-1}P_{ul}f_l fu=(I−Puu)−1Pulfl
其中 I I I是单位矩阵。
P u u = D u u − 1 W u u P_{uu}=D_{uu}^{-1}W_{uu} Puu=Duu−1Wuu
P u u = D u u − 1 W u u P_{uu}=D_{uu}^{-1}W_{uu} Puu=Duu−1Wuu
其中 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,d2…dl+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=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧d11d21…dl1…dm1…d1l…d2l…dll…dml…………d1md2mdlmdmm⎭⎪⎪⎪⎪⎬⎪⎪⎪⎪⎫
那么针对第 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矩阵是一个道理。
从上面的公式可以看出,如果把 f l f_l fl就定义成样本 D l D_l Dl的输出,也就是标记的话,就可以直接计算得到 f u f_u fu了。
对上面的二分类问题做点改动就是多分类问题的过程:
比二分类问题中的过程多了几个东西:
F矩阵,这个矩阵就是用于推断所有未知标记样本的,需要通过一个传播算法来进行计算,通过多轮迭代达到收敛后使用。
那么问题就是确定传播算法,传播算法的计算公式为:
F ( t + 1 ) = α S F ( t ) + ( 1 − α ) Y F(t+1)=\alpha SF(t) + (1-\alpha)Y F(t+1)=αSF(t)+(1−α)Y
聚类本身就是不需要标记信息的,为什么有个半监督聚类呢,就是说如果有一些辅助的标记信息,是可以来指导聚类过程的,相当于有一些约束条件。
有两种指导信息:
书中针对第二种指导条件,改造了K均值算法,第二种还是给出了那些样本一定不是一个簇的。这种情况下的话比较简单,直接用这些样本做初始的质心即可。