t-SNE(续)

SNE

在介绍t-SNE之前,我们首先介绍一下SNE(Stochastic Neighbor Embedding)的原理。

假设我们有数据集X,它共有N个数据点。每一个数据点xixi
的维度为D,我们希望降低为d维。在一般用于可视化的条件下,d的取值为 2,即在平面上表示出所有数据。

SNE将数据点间的欧几里德距离转化为条件概率来表征相似性:

pji=exp(xixj2/2σ2)kiexp(xixk2/2σ2)pj∣i=exp⁡(−‖xi−xj‖2/2σ2)∑k≠iexp⁡(−‖xi−xk‖2/2σ2)

如果以数据点在xixi
为中心的高斯分布所占的概率密度为标准选择近邻,那么pjipj∣i
就代表xixi
将选择xjxj
作为它的近邻。对于相近的数据点,条件概率pjipj∣i
是相对较高的,然而对于分离的数据点,pjipj∣i
几乎是无穷小量(若高斯分布的方差σiσi
选择合理)。

现在引入矩阵Y,Y是N*2阶矩阵,即输入矩阵X的2维表征。基于矩阵Y,我们可以构建一个分布q,其形式与p类似。

对于高维数据点xixi
xjxj
在低维空间中的映射点yiyi
yjyj
,计算一个相似的条件概率qjiqj∣i
是可以实现的。我们将计算条件概率qijqi∣j
中用到的高斯分布的方差设置为1/2。因此我们可以对映射的低维数据点yjyj
yiyi
之间的相似度进行建模:

qji=exp(yiyj2)kiexp(yiyk2)qj∣i=exp⁡(−‖yi−yj‖2)∑k≠iexp⁡(−‖yi−yk‖2)

我们的总体目标是选择Y中的一个数据点,然后其令条件概率分布q近似于p。这一步可以通过最小化两个分布之间的KL散度而实现,这一过程可以定义为:

C=iKL(PiQi)=ijpjilogpjiqjiC=∑iKL(Pi‖Qi)=∑i∑jpj∣ilog⁡pj∣iqj∣i

这里的PiPi
表示了给定点xixi
下,其他所有数据点的条件概率分布。需要注意的是KL散度具有不对称性,在低维映射中不同的距离对应的惩罚权重是不同的,具体来说:距离较远的两个点来表达距离较近的两个点会产生更大的cost,相反,用较近的两个点来表达较远的两个点产生的cost相对较小(注意:类似于回归容易受异常值影响,但效果相反)。即用较小的qji=0.2qj∣i=0.2
来建模较大的pji=0.8pj∣i=0.8
cost=plog(p/q)=1.11cost=plog⁡(p/q)=1.11
,同样用较大的qji=0.8qj∣i=0.8
来建模较小的pji=0.2pj∣i=0.2
,cost=0.277cost=−0.277
。因此,SNE会倾向于保留数据中的局部特征

如何确定σσ

下面介绍一下SNE的超参σσ
的确定方法。

首先,不同的点具有不同的σiσi
PiPi
的熵(entropy)会随着σiσi
的增加而增加。SNE使用困惑度(perplexity)的概念,用二分搜索的方式来寻找一个最佳的σσ
。其中困惑度指:

Perp(Pi)=2H(Pi)Perp(Pi)=2H(Pi)

这里的H(Pi)H(Pi)
PiPi
的熵,即:

H(Pi)=jpjilog2pjiH(Pi)=−∑jpj∣ilog2⁡pj∣i

困惑度可以解释为一个点附近的有效近邻点个数。SNE对困惑度的调整比较有鲁棒性,通常选择5-50之间。

在初始优化的阶段,每次迭代中可以引入一些高斯噪声,之后像模拟退火一样逐渐减小该噪声,可以用来避免陷入局部最优解。因此,SNE在选择高斯噪声,以及学习速率,什么时候开始衰减,动量选择等等超参数上,需要跑多次优化才可以。

Symmetric SNE

优化pijpi∣j
qijqi∣j
的KL散度的一种替换思路是,使用联合概率分布来替换条件概率分布,即P是高维空间里各个点的联合概率分布,Q是低维空间里各个点的联合概率分布,目标函数为:

C=KL(PQ)=ijpi,jlogpijqijC=KL(P∣∣Q)=∑i∑jpi,jlog⁡pijqij

如果我们假设对于任意i,有pij=pji,qij=qjipij=pji,qij=qji
,则概率分布可以改写为:

pij=exp(xixj2/2σ2)klexp(xkxl2/2σ2)qij=exp(yiyj2)klexp(ykyl2)pij=exp⁡(−∣∣xi−xj∣∣2/2σ2)∑k≠lexp⁡(−∣∣xk−xl∣∣2/2σ2)qij=exp⁡(−∣∣yi−yj∣∣2)∑k≠lexp⁡(−∣∣yk−yl∣∣2)

我们将这种SNE称之为symmetric SNE(对称SNE)。

t-SNE

SNE的主要问题在于存在Crowding问题:就是说各个簇聚集在一起,无法区分。比如有一种情况,高维度数据在降维到10维下,可以有很好的表达,但是降维到两维后无法得到可信映射,比如降维如10维中有11个点之间两两等距离的,在二维下就无法得到可信的映射结果(最多3个点)。

其中的一种减轻”拥挤问题”的方法:在高维空间下,在高维空间下我们使用高斯分布将距离转换为概率分布,在低维空间下,我们使用更加偏重长尾分布的方式来将距离转换为概率分布,使得高维度下中低等的距离在映射后能够有一个较大的距离。

我们对比一下高斯分布和t分布, t分布受异常值影响更小,拟合结果更为合理,较好的捕获了数据的整体特征。

使用了t分布之后的q变化,如下:

qij=(1+yiyj2)1kl(1+yiyj2)1qij=(1+∣∣yi−yj∣∣2)−1∑k≠l(1+∣∣yi−yj∣∣2)−1

t-sne的有效性,也可以从上图中看到:横轴表示距离,纵轴表示相似度, 可以看到,对于较大相似度的点,t分布在低维空间中的距离需要稍小一点;而对于低相似度的点,t分布在低维空间中的距离需要更远。这恰好满足了我们的需求,即同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远。

总结一下,t-SNE的梯度更新有两大优势:

对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。

这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

上图分别是使用t-SNE和Sammon mapping可视化MNIST数据集后的效果图。从中可以看出t-SNE图中,数据更成团状,可视化效果更好。

t-SNE的不足主要有四个:

主要用于可视化,很难用于其他目的。比如测试集合降维,因为他没有显式的预估部分,不能在测试集合直接降维;比如降维到10维,因为t分布偏重长尾,1个自由度的t分布很难保存好局部特征,可能需要设置成更高的自由度。

t-SNE倾向于保存局部特征,对于本征维数(intrinsic dimensionality)本身就很高的数据集,是不可能完整的映射到2-3维的空间

t-SNE没有唯一最优解,且没有预估部分。如果想要做预估,可以考虑降维之后,再构建一个回归方程之类的模型去做。但是要注意,t-sne中距离本身是没有意义,都是概率分布问题。

训练太慢。有很多基于树的算法在t-sne上做一些改进。

参考

https://www.zhihu.com/question/52022955

t-sne数据可视化算法的作用是啥?为了降维还是认识数据?

https://mp.weixin.qq.com/s/Rs9ri6Xs5R-yitrda8pJMg

详解可视化利器t-SNE算法:数无形时少直觉

https://mp.weixin.qq.com/s/_DXMlNZHVKm2jMnLGQFM_Q

还在用PCA降维?快学学大牛最爱的t-SNE算法吧

http://www.datakit.cn/blog/2017/02/05/t_sne_full.html

t-SNE完整笔记

https://yq.aliyun.com/articles/70733

比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南

https://mp.weixin.qq.com/s/7Vy7l1YyBT7rMYW2i1AsuA

线性判别分析(LDA)原理详解

https://mp.weixin.qq.com/s/cnzQ7XepftDOZXslCf1MUA

你真的会用t-SNE么?有关t-SNE的小技巧

https://mp.weixin.qq.com/s/lbpe2NO1m8S38wpnp47BEg

通过可视化隐藏表示,更好地理解神经网络

Adaboost

Adaboost是Yoav Freund和Robert Schapire于1997年提出的算法。两人后来因为该算法被授予Gödel Prize(2003)。

Yoav Freund,UCSC博士,UCSD教授。

Robert Elias Schapire,MIT博士。先后供职于Princeton University、AT&T Labs和Microsoft Research。

Gödel Prize,由欧洲计算机学会(EATCS)与美国计算机学会基础理论专业组织(ACM SIGACT)于1993年共同设立,颁给理论计算机领域最杰出的学术论文。其名称取自Kurt Gödel。

Kurt Friedrich Gödel,1906~1978,奥地利逻辑学家,数学家,哲学家,后加入美国藉。维也纳大学博士(1930)。在逻辑学方面,他是继Aristotle、Gottlob Frege之后最伟大的逻辑学家。在数学方面,他以哥德尔不完备定理著称,和Bertrand Russell、 David Hilbert、Georg Cantor齐名。

Adaboost既可用于分类问题,也可用于回归问题。这里仅针对二分类问题进行讨论。

假设我们有数据集{(x1,y1),,(xN,yN)}{(x1,y1),…,(xN,yN)}
,其中yi{1,1}yi∈{−1,1}
,还有一系列弱分类器{k1,,kL}{k1,…,kL}

由于Boost算法是个串行算法,每次迭代就会加入一个弱分类器。这样m-1次迭代之后的分类器如下所示:

C(m1)(xi)=α1k1(xi)++αm1km1(xi)C(m−1)(xi)=α1k1(xi)+⋯+αm−1km−1(xi)

而m次迭代之后的分类器则为:

Cm(xi)=C(m1)(xi)+αmkm(xi)Cm(xi)=C(m−1)(xi)+αmkm(xi)

如何选择新加入的弱分类器kmkm
和对应的权重αmαm
呢?我们可以定义误差E如下所示:

E=i=1NeyiCm(xi)E=∑i=1Ne−yiCm(xi)

w(1)i=1,w(m)i=eyiCm1(xi)wi(1)=1,wi(m)=e−yiCm−1(xi)
,则:

E=i=1Nw(m)ieyiαmkm(xi)E=∑i=1Nwi(m)e−yiαmkm(xi)

因为kmkm
分类正确时,yikm(xi)=1yikm(xi)=1
,分类错误时,yikm(xi)=1yikm(xi)=−1
。所以:

E=yi=km(xi)w(m)ieαm+yikm(xi)w(m)ieαm=i=1Nw(m)ieαm+yikm(xi)w(m)i(eαmeαm)E=∑yi=km(xi)wi(m)e−αm+∑yi≠km(xi)wi(m)eαm=∑i=1Nwi(m)e−αm+∑yi≠km(xi)wi(m)(eαm−e−αm)

可以看出和kmkm
相关的实际上只有上式的右半部分。显然,使得yikm(xi)w(m)i∑yi≠km(xi)wi(m)
最小的kmkm
,也会令E最小,这也就是我们选择加入的kmkm

对E求导,得:

dEdαm=d(yi=km(xi)w(m)ieαm+yikm(xi)w(m)ieαm)dαmdEdαm=d(∑yi=km(xi)wi(m)e−αm+∑yi≠km(xi)wi(m)eαm)dαm

令导数为0,可得:

αm=12ln(yi=km(xi)w(m)iyikm(xi)w(m)i)αm=12ln⁡(∑yi=km(xi)wi(m)∑yi≠km(xi)wi(m))

ϵm=yikm(xi)w(m)i/Ni=1w(m)iϵm=∑yi≠km(xi)wi(m)/∑i=1Nwi(m)
,则:

αm=12ln(1ϵmϵm)αm=12ln⁡(1−ϵmϵm)

参考:

https://mp.weixin.qq.com/s/G06VDc6iTwmNGsH4IfSeJQ

Adaboost从原理到实现

https://mp.weixin.qq.com/s/PZ-1fkNvdJmv_8zLbvoW1g

Adaboost算法原理小结

https://mp.weixin.qq.com/s/KoOUgwXLOfJfOjWhbFX52Q

如果Boosting你懂,那Adaboost你懂么?

https://mp.weixin.qq.com/s/Joz2FpGgBY0tC8lpoFz8Mw

AdaBoost元算法如何提高分类性能——机器学习实战

https://mp.weixin.qq.com/s/MLEVUKse5usmKIWJF-yfOQ

通俗易懂讲解自适应提升算法AdaBoost

机器学习(三十二)——t-SNE, Adaboost相关推荐

  1. Spark机器学习实战 (十二) - 推荐系统实战

    0 相关源码 将结合前述知识进行综合实战,以达到所学即所用.在推荐系统项目中,讲解了推荐系统基本原理以及实现推荐系统的架构思路,有其他相关研发经验基础的同学可以结合以往的经验,实现自己的推荐系统. 1 ...

  2. 深度学习入门(三十二)卷积神经网络——BN批量归一化

    深度学习入门(三十二)卷积神经网络--BN批量归一化 前言 批量归一化batch normalization 课件 批量归一化 批量归一化层 批量归一化在做什么? 总结 教材 1 训练深层网络 2 批 ...

  3. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  4. ASP 三十二条精华代码

    整理收藏: ASP 三十二条精华代码 1. οncοntextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键 <table b ...

  5. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  6. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  7. 三十二、Java集合中的ArrayList

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  8. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  9. Android项目实战(三十二):圆角对话框Dialog

    原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...

最新文章

  1. UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4
  2. Gym - 102082G
  3. rocksdb学习笔记
  4. python编辑elif显示错误_Python运行的17个时新手常见错误小结
  5. go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...
  6. TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架
  7. 导入工程后 报错 The import javax.faces cannot be resolved 解决办法
  8. 基于 c++ 语言的简易 vim 编辑器
  9. 如何在 Flink 1.9 中使用 Hive?
  10. Java数据库编程技术 第四章习题
  11. 灰鸽子***猛增五百多变种 网民生活受***监控
  12. 编程必备基础知识-计算机组成原理-概述篇
  13. 记录MySQL中JSON_EXTRACT JSON_UNQUOTE函数的使用方式
  14. 落网民谣期刊推荐,给你整个排行榜!
  15. base64转图片,保存之后图片打不开
  16. empty怎么发音_empty怎么读?empty是什么意思?
  17. 外星人大战---------------游戏开发(二)
  18. 东舟云 | 您的测试实验室专业管家
  19. 如何监测一个土豆的一生?
  20. 字符串类型list转换为list

热门文章

  1. Linq to xml:使用 XSLT 转换 XML 树
  2. (四)数据结构之“队列”
  3. 使用 apifm-wxapi 快速开发小程序
  4. java mvc 菜鸟_Spring MVC 简单入门
  5. storm spout mysql_storm+mysql集成
  6. JavaScript的数组常用方法
  7. 学习响应式BootStrap来写融职教育网站,要是踩到坑就找我。
  8. java页面可配置化_web.xml页面配置
  9. vue项目和react项目中禁止eslint
  10. PCL:PCL1.9.0更新