机器学习(三十二)——t-SNE, Adaboost
t-SNE(续)
SNE
在介绍t-SNE之前,我们首先介绍一下SNE(Stochastic Neighbor Embedding)的原理。
假设我们有数据集X,它共有N个数据点。每一个数据点的维度为D,我们希望降低为d维。在一般用于可视化的条件下,d的取值为 2,即在平面上表示出所有数据。
SNE将数据点间的欧几里德距离转化为条件概率来表征相似性:
如果以数据点在为中心的高斯分布所占的概率密度为标准选择近邻,那么就代表将选择作为它的近邻。对于相近的数据点,条件概率是相对较高的,然而对于分离的数据点,几乎是无穷小量(若高斯分布的方差选择合理)。
现在引入矩阵Y,Y是N*2阶矩阵,即输入矩阵X的2维表征。基于矩阵Y,我们可以构建一个分布q,其形式与p类似。
对于高维数据点和在低维空间中的映射点和,计算一个相似的条件概率是可以实现的。我们将计算条件概率中用到的高斯分布的方差设置为1/2。因此我们可以对映射的低维数据点和之间的相似度进行建模:
我们的总体目标是选择Y中的一个数据点,然后其令条件概率分布q近似于p。这一步可以通过最小化两个分布之间的KL散度而实现,这一过程可以定义为:
这里的表示了给定点下,其他所有数据点的条件概率分布。需要注意的是KL散度具有不对称性,在低维映射中不同的距离对应的惩罚权重是不同的,具体来说:距离较远的两个点来表达距离较近的两个点会产生更大的cost,相反,用较近的两个点来表达较远的两个点产生的cost相对较小(注意:类似于回归容易受异常值影响,但效果相反)。即用较小的来建模较大的,,同样用较大的来建模较小的,。因此,SNE会倾向于保留数据中的局部特征。
如何确定
下面介绍一下SNE的超参的确定方法。
首先,不同的点具有不同的,的熵(entropy)会随着的增加而增加。SNE使用困惑度(perplexity)的概念,用二分搜索的方式来寻找一个最佳的。其中困惑度指:
这里的是的熵,即:
困惑度可以解释为一个点附近的有效近邻点个数。SNE对困惑度的调整比较有鲁棒性,通常选择5-50之间。
在初始优化的阶段,每次迭代中可以引入一些高斯噪声,之后像模拟退火一样逐渐减小该噪声,可以用来避免陷入局部最优解。因此,SNE在选择高斯噪声,以及学习速率,什么时候开始衰减,动量选择等等超参数上,需要跑多次优化才可以。
Symmetric SNE
优化和的KL散度的一种替换思路是,使用联合概率分布来替换条件概率分布,即P是高维空间里各个点的联合概率分布,Q是低维空间里各个点的联合概率分布,目标函数为:
如果我们假设对于任意i,有,则概率分布可以改写为:
我们将这种SNE称之为symmetric SNE(对称SNE)。
t-SNE
SNE的主要问题在于存在Crowding问题:就是说各个簇聚集在一起,无法区分。比如有一种情况,高维度数据在降维到10维下,可以有很好的表达,但是降维到两维后无法得到可信映射,比如降维如10维中有11个点之间两两等距离的,在二维下就无法得到可信的映射结果(最多3个点)。
其中的一种减轻”拥挤问题”的方法:在高维空间下,在高维空间下我们使用高斯分布将距离转换为概率分布,在低维空间下,我们使用更加偏重长尾分布的方式来将距离转换为概率分布,使得高维度下中低等的距离在映射后能够有一个较大的距离。
我们对比一下高斯分布和t分布, t分布受异常值影响更小,拟合结果更为合理,较好的捕获了数据的整体特征。
使用了t分布之后的q变化,如下:
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既可用于分类问题,也可用于回归问题。这里仅针对二分类问题进行讨论。
假设我们有数据集,其中,还有一系列弱分类器。
由于Boost算法是个串行算法,每次迭代就会加入一个弱分类器。这样m-1次迭代之后的分类器如下所示:
而m次迭代之后的分类器则为:
如何选择新加入的弱分类器和对应的权重呢?我们可以定义误差E如下所示:
令,则:
因为分类正确时,,分类错误时,。所以:
可以看出和相关的实际上只有上式的右半部分。显然,使得最小的,也会令E最小,这也就是我们选择加入的。
对E求导,得:
令导数为0,可得:
令,则:
参考:
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