机器学习(三十二)——t-SNE, Adaboost

t-SNE(续)

SNE

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

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

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

pji=exp(xixj2/2σ2)kiexp(xixk2/2σ2) p j ∣ i = exp ⁡ ( − ‖ x i − x j ‖ 2 / 2 σ 2 ) ∑ k ≠ i exp ⁡ ( − ‖ x i − x k ‖ 2 / 2 σ 2 )

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

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

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

qji=exp(yiyj2)kiexp(yiyk2) q j ∣ i = exp ⁡ ( − ‖ y i − y j ‖ 2 ) ∑ k ≠ i exp ⁡ ( − ‖ y i − y k ‖ 2 )

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

C=iKL(PiQi)=ijpjilogpjiqji C = ∑ i K L ( P i ‖ Q i ) = ∑ i ∑ j p j ∣ i log ⁡ p j ∣ i q j ∣ i

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

如何确定 σ σ

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

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

Perp(Pi)=2H(Pi) P e r p ( P i ) = 2 H ( P i )

这里的 H(Pi) H ( P i ) Pi P i 的熵,即:

H(Pi)=jpjilog2pji H ( P i ) = − ∑ j p j ∣ i log 2 ⁡ p j ∣ i

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

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

Symmetric SNE

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

C=KL(PQ)=ijpi,jlogpijqij C = K L ( P ∣∣ Q ) = ∑ i ∑ j p i , j log ⁡ p i j q i j

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

pij=exp(xixj2/2σ2)klexp(xkxl2/2σ2)    qij=exp(yiyj2)klexp(ykyl2) p i j = exp ⁡ ( − ∣∣ x i − x j ∣ ∣ 2 / 2 σ 2 ) ∑ k ≠ l exp ⁡ ( − ∣∣ x k − x l ∣ ∣ 2 / 2 σ 2 )         q i j = exp ⁡ ( − ∣∣ y i − y j ∣ ∣ 2 ) ∑ k ≠ l exp ⁡ ( − ∣∣ y k − y l ∣ ∣ 2 )

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

t-SNE

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

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

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

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

qij=(1+yiyj2)1kl(1+yiyj2)1 q i j = ( 1 + ∣∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣∣ y i − y j ∣ ∣ 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)} { ( x 1 , y 1 ) , … , ( x N , y N ) } ,其中 yi{1,1} y i ∈ { − 1 , 1 } ,还有一系列弱分类器 {k1,,kL} { k 1 , … , k L }

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

C(m1)(xi)=α1k1(xi)++αm1km1(xi) C ( m − 1 ) ( x i ) = α 1 k 1 ( x i ) + ⋯ + α m − 1 k m − 1 ( x i )

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

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

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

E=i=1NeyiCm(xi) E = ∑ i = 1 N e − y i C m ( x i )

w(1)i=1,w(m)i=eyiCm1(xi) w i ( 1 ) = 1 , w i ( m ) = e − y i C m − 1 ( x i ) ,则:

E=i=1Nw(m)ieyiαmkm(xi) E = ∑ i = 1 N w i ( m ) e − y i α m k m ( x i )

因为 km k m 分类正确时, yikm(xi)=1 y i k m ( x i ) = 1 ,分类错误时, yikm(xi)=1 y i k m ( x i ) = − 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 = ∑ y i = k m ( x i ) w i ( m ) e − α m + ∑ y i ≠ k m ( x i ) w i ( m ) e α m = ∑ i = 1 N w i ( m ) e − α m + ∑ y i ≠ k m ( x i ) w i ( m ) ( e α m − e − α m )

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

对E求导,得:

dEdαm=d(yi=km(xi)w(m)ieαm+yikm(xi)w(m)ieαm)dαm d E d α m = d ( ∑ y i = k m ( x i ) w i ( m ) e − α m + ∑ y i ≠ k m ( x i ) w i ( m ) e α m ) d α m

令导数为0,可得:

αm=12ln(yi=km(xi)w(m)iyikm(xi)w(m)i) α m = 1 2 ln ⁡ ( ∑ y i = k m ( x i ) w i ( m ) ∑ y i ≠ k m ( x i ) w i ( m ) )

ϵm=yikm(xi)w(m)i/Ni=1w(m)i ϵ m = ∑ y i ≠ k m ( x i ) w i ( m ) / ∑ i = 1 N w i ( m ) ,则:

αm=12ln(1ϵmϵm) α m = 1 2 ln ⁡ ( 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值