机器学习入门---第十天

半监督学习(semi-supervised learning)

1,监督学习、无监督学习和半监督学习的区别

  1. 监督学习(supervised learning):训练集中有训练数据,训练数据对应的标签.
  2. 无监督学习(unsupervised learning):训练集中只有训练数据,没有与训练数据对应的标签.
  3. 半监督学习(semi-supervised learning):训练集中的训练数据只有一部分有对应的标签,而另一部分没有对应的标签.

2, 半监督学习的transductive learning和inductive learning

  1. transductive learning: 训练集中的训练数据只有一部分有对应的标签,而另一部分没有对应的标签.  没有对应的标签的训练数据也拿来放在测试集中使用.
  2. inductive learning: 训练集中的训练数据只有一部分有对应的标签,而另一部分没有对应的标签.  没有对应的标签的训练数据不在测试集中使用,而只用于训练.

3,获取data不难,获取有labeled的data比较难,因此半监督学习很有意义

如果我们只考虑有label的猫跟狗的data,画一个boundary,将猫跟狗的train data分开的话,你可能就会画在中间(垂直)。那如果unlabel的分布长的像灰色的点这个样子的话,这可能会影响你的决定。虽然unlabel data只告诉我们了input,但unlabeled data的分布可以告诉我们一些事。那你可能会把boundary变为这样(斜线)。semi-supervised learning使用unlabel的方式往往伴随着一些假设,其实semi-supervised learning有没有用,是取决于你这个假设符不符合实际/精不精确。

4,监督生成模型和半监督生成模型

1,监督生成模型

由于data都是有label的,P(Ci)是已知的,P(x|Ci)是通过我们基于高斯分布的假设用最大似然估计出来的;

2,半监督生成模型

data的一部分是unlabel的,P(Ci)是不确定的(隐变量),P(x|Ci)的假设模型也不能套用原来的u等参数,这时候需要用EM算法.

最大期望算法(Expectation-maximization algorithm,即EM算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。因此EM算法适用于带有无法观测的隐变量的概率模型估计.

我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。(最大似然估计:利用已知的样本结果,反推最有可能导致这样结果的一组参数)但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。用EM算法可以解决。

EM算法解决含有隐变量的概率模型参数的极大似然估计的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐藏数据是猜测的,所以此时得到的模型参数一般还不是我们想要的结果。不过没关系,我们基于当前得到的模型参数,继续猜测隐含数据(EM算法的E步),然后继续极大化对数似然,求解我们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。

何为隐变量? 隐变量主要就是指“不能被直接观察到,但是对系统的状态和能观察到的输出存在影响的一种东西”。参见麋路https://www.zhihu.com/question/43216440

EM算法举例:

我们目前有100个男生和100个女生的身高,但是我们不知道这200个数据中哪个是男生的身高,哪个是女生的身高,即抽取得到的每个样本都不知道是从哪个分布中抽取的。这个时候,对于每个样本,就有两个未知量(隐变量)需要估计:

(1)这个身高数据是来自于男生数据集合还是来自于女生?

(2)男生、女生身高数据集的正态分布的参数分别是多少?

最大期望算法经过两个步骤交替进行计算:

           第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值;

           第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,重复第一步和第二步,这个过程不断交替进行。

preview

preview

5,基于Low-density Separation(低密度分离)假设的Semi-Surpervised

无论是labeled数据还是unlabeled数据都一定是分属于两个截然不同的的Class(非黑即白),低密度的意思是,两个Class的分界处是低密度的(分得比较开的)

 1,Low-density separation最简单的方法是self-training. 

步骤:

  1.  利用labeled的数据训练(逻辑回归,神经网络,决策树等)出模型f*;
  2.    将一组unlabeled的数据代入,得到新的标签,称为Pseudo-label伪标签;
  3.    将刚才得到新标签数据的一部分和labeled数据结合到一起,得到训练新的模型,重复以上步骤;

2,slef-training很像半监督生成模型。

他们唯一的差别就是在做self-training的时候,你用的是hard label;你在做generative mode时,你用的是soft model。在做self-training的时候我们会强制一笔train data(输入)是属于某一个class,但是在generative model的时候,根据它的posterior probability,得出一笔train data(输入x)分别属于class1和属于class2的概率。

假设我们用neural network,你从你的 label data得到一笔network parameter(θ*)。现在有一笔unlabel data,根据参数θ*训练后得到输出分为两类(0.7的几率是class1,0.3的几率是class2)。如果是hard label的话,你就把它直接label成class1,所以新的target(也即的新label)第一维是1第二维是0(拿train neural network得到的输出,即新label)。如果去做soft的话。70 percent是属于class1,30percent是属于class2,那新的target是0.7跟0.3。在neural network中,soft这个方法是没有用的,一定要用hard label。因为本来输出就是0.7和0.3,目标又设成0.7和0.3,相当于自己证明自己,所以没用。但我们用hard label 是什么意思呢?我们用hard label的时候,就是用low-density separation的概念。也就是说:今天我们看它属于class1的几率只是比较高而已,我们没有很确定它一定是属于class1的,但这是一个非黑即白的世界,如果你看起来有点像class1,那就一定是class1。本来根据我的model说:0.7是class1 ; 0.3是class2,那用hard label(low-density-separation)就改成它属于class1的几率是1(完全就不可能是class2)。soft是不会work的。

3,slef-training的改进-加上Entropy-based Regularization

由于我们假设这是一个非黑即白的世界,所以output distribution一定要是很集中,得到的结果才会更理想. 如果今天输出分布很平均的话,这样是不好的(因为这是一个非黑即白的世界),这不符合low-density separation的假设。

怎么用数值的方法evaluate这个distribution是好的还是不好的? 这边用的是entropy,算一个distribution的entropy,这个distribution entropy告诉你说:这个distribution到底是集中的还是不集中的。

我们需要重新设计loss function: 我希望找一个参数,让我现在在label data上model的output跟正确的output越小越好,你可以用cross entropy 来evaluate它们之间的距离,这个是label data的部分。在unlabel data的部分,你会加上每一笔unlabel data的output distribution的entropy,那你会希望这些unlabel data的entropy 越小越好。那么在这两个中间,你可以乘以一个weight即λ来考虑说:你要偏向unlabel data多一点还是少一点.

4,semi-supervised SVM

SVM做的事情就是:给你两个class的data,找一个boundary,这个boundary一方面要做有最大的margin(最大margin就是让这两个class分的越开越好)同时也要有最小的分类的错误。现在假设有一些unlabel data,semi-supervised SVM会怎样处理这个问题呢?它会穷举unlabel data对应的所有可能的label,就是这边有4笔unlabel data,每一笔它都可以是属于class1,也可以是属于class2,穷举它所有可能的label(如下图所示)。对每一个可能的结果都去做一个SVM,然后再去说哪一个unlabel data的可能性能够让你的margin最大同时又minimize error。

6,基于Smoothness Assumption(平滑性)假设的Semi-Surpervised

那为什么会有Smoothness Assumption这样的假设呢?因为在真实的情况下是很多可能成立的

Smoothness Assumption在文件分类上也是非常有用的,这是为什么呢?假设你现在要分天文学跟旅游类的文章,那天文学有一个固定的word distribution,比如会出现“asteroid,bright”.那旅游的文章会出现“yellowstone,zion等等”。那如果今天你的unlabel data跟你的label data是有overlap的话,你就很轻易处理这个问题。但是在真是的情况下,你的unlabel data跟label data中间没有overlap word。为什么呢?一篇文章可能词汇不是很多,但是word多,所以你拿到两篇,有重复的word比例其实是没有那么多的。所以很有可能你的unlabel data跟label data之间是没有任何关系的。

但是如果能收集到够多的unlabeled data的话,就能得到d1和d5比较像,d5和d6比较像,这个像就可以一直传播过去,得到d1和d3像,同样的d4可以和d2一类。

Cluster and then Label(先聚类后标注)

蓝色是unlabel data。接下来你就做一下cluster,你可能分成三个cluster,然后你看cluster1里面class1的label data最多,所以cluster1里面所有的unlabelled data都算是class1,cluster2,cluster3都算是class2、class3,然后把这些data进行label后拿去learn就结束了,但是这个方法不一定有用。因为把属于同一个class的数据全都cluster在一起不那么容易.

Graph-based Approach

如果今天有两个点,他们在这个graph上面是相的(走的到),那么他们这就是同一个class,如果没有相连,就算实际的距离也不是很远,那也不是同一个class。

如何建这个graph?

用KNN(根据“距离”找出K个最近的邻居)或者e-Neighborhood(超过阈值e才建立边)

 定义相似度,你用exponential的话,每一个点只能与非常近的点离,它跟稍微远一点就不连了.

如果我们现在在graph上有一些label data,在这个graph上我们说这笔data1是属于class1,那跟它有相连的data points属于class1的几率也会上升,所以每笔data会影响它的邻居。光是会影响它的邻居是不够的,它的class是会传递的,本来这个点有跟class1相连所以它会变得比较像class1。但是这件事会像传染病一样传递过去,虽然这个点真正没有跟class1相连,因为像class1这件事情是会感染,所以这件事情会通过graph link传递过来。

定量的以一个S值来评价假设有多合理

参考:

https://www.jianshu.com/p/6303a96dea88

https://zhuanlan.zhihu.com/p/40991784

https://zhuanlan.zhihu.com/p/36331115

https://datawhalechina.github.io/leeml-notes/#/chapter23/chapter23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值