半监督学习(一)

article/2025/3/15 21:15:37

什么是半监督学习?


传统的机器学习技术分为两类,一类是无监督学习,一类是监督学习。

无监督学习只利用未标记的样本集,而监督学习则只利用标记的样本集进行学习。

但在很多实际问题中,只有少量的带有标记的数据,因为对数据进行标记的代价有时很高,比如在生物学中,对某种蛋白质的结构分析或者功能鉴定,可能会花上生物学家很多年的工作,而大量的未标记的数据却很容易得到。

这就促使能同时利用标记样本和未标记样本的半监督学习技术迅速发展起来。

 

半监督学习理论简述:


半监督学习有两个样本集,一个有标记,一个没有标记.分别记作

Lable={(xi,yi)},Unlabled={(xi)}.并且数量上,L<<U.

1.      单独使用有标记样本,我们能够生成有监督分类算法

2.      单独使用无标记样本,我们能够生成无监督聚类算法

3.      两者都使用,我们希望在1中加入无标记样本,增强有监督分类的效果;同样的,我们希望在2中加入有标记样本,增强无监督聚类的效果.

 

一般而言,半监督学习侧重于在有监督的分类算法中加入无标记样本来实现半监督分类.也就是在1中加入无标记样本,增强分类效果.

 

半监督学习的动力,motivation


某人讨论的时候,总是教导我们的词,motivation.一下午四五遍地强调写论文要有motivation.下面说说半监督学习的motivation.

1.      有标记样本难以获取.

需要专门的人员,特别的设备,额外的开销等等.

2.      无标记的样本相对而言是很廉价的.

 

半监督学习与直推式学习的区别:


这个网上也有论述.主要就是半监督学习是归纳式的,生成的模型可用做更广泛的样本;而直推式学习仅仅为了当前无标记样本的分类.

简单的说,前者使用无标记样本,为了以后其他样本更好的分类.

后者只是为了分类好这些有限的无标记样本.

 

下面几个图来生动形象地诠释半监督的好处:

 

上图中,只有两个标记样本,X,O,剩下绿点是无标记的样本.通过无标记样本的加入,原来的分类界限从0移到了0.5处,更好地拟合了样本的现实分布.

 

半监督学习算法分类:


1.      self-training(自训练算法)

2.      generative models生成模型

3.      SVMs半监督支持向量机

4.      graph-basedmethods图论方法

5.      multiview learing多视角算法

6.      其他方法

 

接着简单介绍上述的几个算法

 

self-training算法:

还是两个样本集合:Labled={(xi,yi)};Unlabled= {xj}.

执行如下算法

Repeat:

1.      L生成分类策略F;

2.      F分类U,计算误差

3.      选取U的子集u,即误差小的,加入标记.L=L+u;

重复上述步骤,直到U为空集.

 

上面的算法中,L通过不断在U中,选择表现良好的样本加入,并且不断更新子集的算法F,最后得到一个最有的F.

 

Self-training的一个具体实例:最近邻算法

记d(x1,x2)为两个样本的欧式距离,执行如下算法:

Repeat:

1.      L生成分类策略F;

2. 选择x = argmin d(x, x0). 其中x∈U,min x0∈L.也就是选择离标记样本最近的无标记样本.

2.      F给x定一个类别F(x).

3.      (x,F(x))加入L中

重复上述步骤,直到U为空集.

 

上面算法中,也就是定义了self-training的”误差最小”,也就是用欧式距离来定义”表现最好的无标记样本”,再用F给个标记,加入L中,并且也动态更新F.

 

下面是这种算法的效果图:

 

上图从两个点出发,不断加入最近邻点,不断更新F.

上面的算法表现良好,当然更多的是表现不好.如下:

 


生成模型


生成算法来源于假设,比如我们假设原样本满足高斯分布,然后用最大释然的概率思想来拟合一个高斯分布,也就是常用的高斯混合模型(GMM).

简单介绍下高斯混合模型:

假设如下的样本分布:

我们假设他们满足高斯分布.

高斯分布的参数有: θ = {w1, w2, µ1, µ2, Σ1, Σ2}

利用最大释然的思想,最大化如下概率:

p(x, y|θ) = p(y|θ)p(x|y, θ).

得到如下的假设分布:

 

顺便贴一个介绍高斯混合模型日志:

http://blog.csdn.net/zouxy09/article/details/8537620


接着是我们的半监督生成算法:


样本分布如下:

算法过后,得到如下分布:


对比这两个图,说明下高斯混合模型与半监督生成模型的区别:

 

这两种方法的释然函数不同,前者最大化标记样本出现概率,后者加入了无标记样本出现概率.

算法的具体实现,请参见E-M算法.

这样生成的算法也有许多不良表现,如下:

假设原始的分布式这样的:


通过GMM,它变成了这样:


几个需要注意的地方:

1.      高斯混合的局部收敛性

2.      减少无标记样本的权值

 

半监督SVM,图算法模型,流行模型等.


SVM的理论不再赘述,就是一个最优超平面:

偷一张很牛逼的SVM图:



这些内容涵盖比较广泛,一篇日志装不下.有兴趣地可以进一步了解.

 

最后是小结


上两张图:



由于我们对火星基本不了解,探索号带着稀少的标记样本知识飞到了火星.接着就是不断地接触新的样本,更新自己的算法来适应火星环境.

还有我们,从小不断地接触新的事物,不断地被灌输标记或无标记的样本,活到老学到老.


http://chatgpt.dhexx.cn/article/SgpFgrrf.shtml

相关文章

半监督学习简介

“我们预计从长远来看&#xff0c;无监督学习将变得更加重要。人类和动物的学习在很大程度上是不受监督的&#xff1a;我们通过观察来发现世界的结构&#xff0c;而不是通过被告知每个物体的名称。”——LeCun, Bengio, Hinton, Nature (2015)。 Semi-Supervised Learning 半监…

半监督学习

1. 介绍 1.1 什么是半监督学习 所给的数据有的是有标签的&#xff0c;而有的是没有标签的。常见的两种半监督的学习方式是直推学习&#xff08;Transductive learning&#xff09;和归纳学习&#xff08;Inductive learning&#xff09;。   直推学习&#xff08;Transduct…

半监督学习(SEMI-Supervised Learning)

半监督学习的工作原理 想象一下&#xff0c;收集了大量未标记的数据&#xff0c;您想在这些数据上训练模型。手动标记所有这些信息可能会花费你一大笔钱&#xff0c;除了需要几个月的时间来完成注释。这时候半监督机器学习方法就派上用场了。工作原理很简单。无需将标签添加到…

半监督学习概述

1、半监督学习 今天在阅读一篇论文时了解了这个之前一直不太清晰的概念。下面是查阅了相关资料后对半监督学习的理解。如有错误&#xff0c;望更正。 半监督学习是一种介于监督学习和无监督学习之间的学习凡是&#xff0c;我们都知道&#xff0c;在监督学习中&#xff0c;样本…

JS中使数组倒序排列

使用reverse方法 注意&#xff1a;reverse方法会使得原数组发生变化

JS实现数组和数组对象倒序(reverse方法)

const arr1 [{a:1},{b:2},{c:3},{d:4}]; const arr2 [1,2,3,4,5,6,7]; console.log(倒序前,arr1,arr2); arr1.reverse(); arr2.reverse(); console.log(倒序后,arr1,arr2);

js实现数组翻转(倒序输出)

//倒序排列var arr[2,30,1,9,5,7];var brrarr.reverse();for(var i0;i<brr.length;i){document.write(brr[i]);}console.log(brr);//控制台也能看到数组的输出

js实现数组元素的倒序

模拟循环录入采集名单存储到数组中并编码实现数组元素的倒序查看名单 :例如数组原名单: A B C D E ,倒序后展示为: E D C B A 运行后的结果如下图所示&#xff1a;

JS数组对象的正序、倒序和根据中文首字母排序

//数组对象方法排序:升序 sortByKey(array,key){return array.sort(function(a,b){var xa[key];var yb[key];return ((x<y)?-1:((x>y)?1:0));}); },//数组对象方法排序:降序 sortDownByKey(array,key){return array.sort(function(a,b){var xa[key];var yb[key];return…

js中数组反向、排序reverse、sort

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; js系列教程1-数组操作全解 js中数组反向、排序 数组反向使用reverse函数&#xff0c;数组排序使用sort函数&#xff0c;排序函数可以传入比较函数&#xff0c;也可以修改数组圆形&#xff0c;自定义添加排序…

数组倒序排序

Array.reverse()&#xff0c;数组元素的排序排列 今天做项目的时候遇到了一个需求&#xff0c;把下单字段的时间倒序排列&#xff0c;也就是最新的时间显示在前面&#xff0c;像这样 因为这个字段是一个数组元素&#xff0c;所以就想到了让数组元素倒序排列&#xff0c;然后就…

js数组排序,数组按照某个字段正序倒序排序方法,sort()

话不多说直接看案例哈 比如后端返回了一个数组集合&#xff0c;需要吧默认选项放在第一条 let arr [{isDefault: 0},{isDefault: 0},{isDefault: 1},{isDefault: 0}]arr.sort((a,b)> a.isDefault-b.isDefault)console.log(arr,正序)输出结果&#xff1a;正序&#xff0c;从…

js-实现数组翻转(倒序)

源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>翻转数组</title></head><body><script>var arr[1,2,3,4,5,6,7,8];var newArr [];console.log(arr);for(var iarr.length-1;…

js 数组倒序排列

1.使用reverse()函数&#xff1a; var array[我,喜,欢,你];array.reverse(); // 输出&#xff1a; ["你", "欢", "喜", "我"]2.循环遍历一一使其倒序&#xff1a; var array[我,喜,欢,你];var temp;for(let i0; i<array.length/2;…

重磅!超详细的 JS 数组方法整理出来了

作者&#xff1a;Yushia https://juejin.cn/post/6907109642917117965 数组是 js 中最常用到的数据集合&#xff0c;其内置的方法有很多&#xff0c;熟练掌握这些方法&#xff0c;可以有效的提高我们的工作效率&#xff0c;同时对我们的代码质量也是有很大影响。 一、创建数组 …

VS Code字体总是安装不上,vscode字体安装

VS Code字体安装&#xff0c;顽固版本 tmd&#xff0c;Vs Code老是把l看成i或者是1急死了首先要下载字体&#xff0c;下载好安装对应的字体&#xff0c;windows字体文件一般是ttf&#xff0c;安装好之后 这里有免费的供开发编程使用的字体 —》链接 下载好之后&#xff0c;解压…

VsCode字体颜色修改和背景图片修改 字体高亮

1.打开VS Code编辑器&#xff0c;在编辑器中设置。根据以下步骤&#xff0c;打开settin.json文件。 2.在json文件中若有代码覆盖即可没有代码直接添加下面代码。看注释可以自定义设置喜欢的颜色。 {//设置用户选中代码段的颜色"workbench.colorCustomizations": {/…

VScode字体超大怎么改回来?

VScode字体超大怎么改回来&#xff1f; 改背景图时不小心把字体设置的超大了&#xff0c;而且还是失去焦点自动保存了&#xff0c;难受… 网上一搜&#xff0c;真不好搜&#xff0c;答案有两种 借图一用&#xff08;本人比这个还严重&#xff0c;鼠标已经滚动不了了&#xff…

ubuntu系统下vscode字体显示异常(别扭)

修改办法 文件 》 首选项 》 设置 查找框中输入 Font 显示如下&#xff1a; 修改Font Family&#xff1a; 将&#xff1a;‘Droid Sans Mono’, ‘monospace’, Droid Sans Fallback’改为&#xff1a; monospace 如果windows和ubuntu是同一个账号&#xff0c;必须取消同步&…