【Python代码】TSNE高维数据降维可视化工具 + python实现
1.概述
1.1 什么是TSNE
- TSNE是由T和SNE组成,T分布和随机近邻嵌入(Stochastic neighbor Embedding).
- TSNE是一种可视化工具,将高位数据降到2-3维,然后画成图。
- t-SNE是目前效果最好的数据降维和可视化方法
- t-SNE的缺点是:占用内存大,运行时间长。
1.2 TSNE原理
1.2.1入门的原理介绍
举一个例子,这是一个将二维数据降成一维的任务。我们要怎么实现?
首先,我们想到的最简单的方法就是舍弃一个维度的特征,将所有点映射到x轴上:
很明显,结果来看,蓝色和黄色的点交叠在一起,可是他们在二维上明明不属于一类
TSNE就是计算某一个点到其他所有点的距离,然后映射到t分布上,效果就会好一些。
1.2.2进阶的原理介绍
- t-SNE的降维关键:把高纬度的数据点之间的距离转化为高斯分布概率。
1.2.2.1 高维距离表示
- 如果两个点在高维空间距离越近,那么这个概率值越大。
- 我们来看下面公式,两个公式的内容一致,只是写法不同。
\]
这个形式的公式,只是明显的展示这是高斯分布概率
\]
\(||x_i-x_k||^2\)是两个点之间的距离;
距离越大,\(exp(-||x_i-x_k||^2/(2\sigma_i^2))\)越小;
距离越小,\(exp(-||x_i-x_k||^2/(2\sigma_i^2))\)越大;
分母是一个常数,对于一个固定的点\(x_i\);
- 这个算法的创新点:\(\sigma_i\)对于每一个\(x_i\)都是不同的,是由事先设定的困惑性影响,\(\sigma_i\)是自动设定的。
现在我们能得到\(p_{j|i}\),然后计算联合分布
\]
- 从上文中,我们用高斯分布概率来表示两个高维点之间的相似性,再次复述一次两个点越相似,\(p_{ij}\)越大
1.2.2.2 低维相似度表示
- 在低纬度中,我们使用t分布来表示相似性。这里不探究为什么使用t分布而不是其他分布,具体内容可以看论文
\]
\(y_i,y_j\)是低纬度的点
1.2.2.3 惩罚函数
- 现在我们有方法衡量高纬度和低纬度的点的相似性,我们如何保证高纬度相似度高的点在低纬度相似度也高?
- t-SNE使用的是KL散度(Kullback-Leibler divergence)
\]
1.2.2.4 为什么是局部相似性
- 当\(P_{ij}\)很大,\(Q_{ij}\)很小(高维空间距离近,低维空间距离远)的惩罚很大,但是高维空间距离远,低维空间距离近的惩罚小。
1.2.2.5 为什么选择高斯和t分布
- 降维必然带来信息损失,TSNE保留局部信息必然牺牲全局信息,而因为t分布比 高斯分布更加长尾,可以一定程度减少这种损失。
2 python实现
函数参数表:
- parameters 描述
- n_components 嵌入空间的维度
- perpexity 混乱度,表示t-SNE优化过程中考虑邻近点的多少,默认为30,建议取值在5到50之间
- early_exaggeration 表示嵌入空间簇间距的大小,默认为12,该值越大,可视化后的簇间距越大
- learning_rate 学习率,表示梯度下降的快慢,默认为200,建议取值在10到1000之间
- n_iter 迭代次数,默认为1000,自定义设置时应保证大于250
- min_grad_norm 如果梯度小于该值,则停止优化。默认为1e-7
- metric 表示向量间距离度量的方式,默认是欧氏距离。如果是precomputed,则输入X是计算好的距离矩阵。也可以是自定义的距离度量函数。
- init 初始化,默认为random。取值为random为随机初始化,取值为pca为利用PCA进行初始化(常用),取值为numpy数组时必须shape=(n_samples, n_components)
- verbose 是否打印优化信息,取值0或1,默认为0=>不打印信息。打印的信息为:近邻点数量、耗时、σ
、KL散度、误差等 - random_state 随机数种子,整数或RandomState对象
- method 两种优化方法:barnets_hut和exact。第一种耗时O(NlogN),第二种耗时O(N^2)但是误差小,同时第二种方法不能用于百万级样本
- angle 当method=barnets_hut时,该参数有用,用于均衡效率与误差,默认值为0.5,该值越大,效率越高&误差越大,否则反之。当该值在0.2-0.8之间时,无变化。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import manifold,datsets
'''X是特征,不包含target;X_tsne是已经降维之后的特征'''
tsne = manifold.TSNE(n_components=2, init='pca', random_state=501)
X_tsne = tsne.fit_transform(X)
print("Org data dimension is {}.
Embedded data dimension is {}".format(X.shape[-1], X_tsne.shape[-1]))
'''嵌入空间可视化'''
x_min, x_max = X_tsne.min(0), X_tsne.max(0)
X_norm = (X_tsne - x_min) / (x_max - x_min) # 归一化
plt.figure(figsize=(8, 8))
for i in range(X_norm.shape[0]):
plt.text(X_norm[i, 0], X_norm[i, 1], str(y[i]), color=plt.cm.Set1(y[i]),
fontdict={'weight': 'bold', 'size': 9})
plt.xticks([])
plt.yticks([])
plt.show()
参考内容
【Python代码】TSNE高维数据降维可视化工具 + python实现的更多相关文章
- 利用 t-SNE 高维数据的可视化
利用 t-SNE 高维数据的可视化 具体软件和教程见: http://lvdmaaten.github.io/tsne/ 简要介绍下用法: % Load data load ’mnist_trai ...
- 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...
- 高维数据降维 国家自然科学基金项目 2009-2013 NSFC Dimensionality Reduction
2013 基于数据降维和压缩感知的图像哈希理论与方法 唐振军 广西师范大学 多元时间序列数据挖掘中的特征表示和相似性度量方法研究 李海林 华侨大学 基于标签和多特征融合的图像语义空间学习技 ...
- 毕设之Python爬取天气数据及可视化分析
写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...
- 用TSNE进行数据降维并展示聚类结果
TSNE提供了一种有效的数据降维方式,让我们可以在2维或3维的空间中展示聚类结果. # -*- coding: utf-8 -*- from __future__ import unicode_lit ...
- 5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- [转]5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- 数据可视化:使用python代码实现可视数据随机漫步图
#2020/4/5 ,是开博的第一天,希望和大家相互交流学习,很开森,哈哈~ #像个傻子哟~ #好,我们进入正题, #实现功能:利用python实现数据随机漫步,漫步点数据可视化 #什么是 ...
- Python学习随笔(1)--可视化工具plotly使用
把数据库某列数据取出来,然后再在本地生成html文件形成可视化视图显示 #!/usr/bin/python# coding=utf-8 import pymysqlimport plotly.plot ...
随机推荐
- golang/beego 微信模版消息
// GO的微信SDK我用的是这个:https://github.com/silenceper/wechat // 发送模版消息 // UserNickName,UserMobile是发起预约的人的昵 ...
- beego微信网页授权
beego.Get("MP_verify_Rj3QAbcdU0MRsyS.txt", func(context *context.Context) { context.Respon ...
- Spring5参考指南: SpEL
文章目录 Bean定义中的使用 求值 支持的功能 函数 Bean引用 If-Then-Else Elvis Safe Navigation 运算符 集合选择 集合投影 表达式模板化 SpEL的全称叫做 ...
- 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解
题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...
- AngularJS学习1-基础知识
Angular并不是适合任何应用的开发,Angular考虑的是构建CRUD应用 但是目前好像也只是用到了angular的一些指令,数据绑定,mvc,http服务而已..... 以前传统的做法就是,通过 ...
- MySQL Change Data Directory
为什么80%的码农都做不了架构师?>>> Stop MySQL using the following command: sudo /etc/init.d/mysql stop ...
- 网速慢?不!可能是DNS出了问题! 公共DNS优选之 BAT 百度、腾讯、阿里、谷歌DNS哪个更快?
如果一下还是解决不了你的问题请这边走 首先是Google的DNS: 8.8.8.8 丢包严重 PASS但是扶墙的时候是必备的,如果有扶墙的需求的话可以备用. 二.百度DNS 180.76.76.76 ...
- HDU-1857 畅通工程再续
畅通工程再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定 ...
- P5520 【[yLOI2019] 青原樱】
P5520 [[yLOI2019] 青原樱]题解 整理博客的时候改了下分类标签,重新审一下 题目传送门 翻了翻题解区,发现基本没和我写的一样的(主要是都比我的写的简单 看题目: 第一眼,数学题:第二眼 ...
- 数据结构之递归Demo(走迷宫)(八皇后)(汉诺塔)
递归 顾名思义,递归就是递归就是递归就是递归就是递归......就是递归 Google递归: