用t-SNE进行流形学习(digits数据集)
流行学习算法:
- 是一类用于可视化的算法,它允许进行更复杂的映射,通常也可以给出更好的可视化。
- t-SNE算法是其中一种。
PCA是用于变换数据的首选方法,也可以进行可视化,但它的性质(先旋转然后减少方向)限制了有效性。因此,我们可以使用流形学习算法进行数据可视化。
1、什么是t-SNE
t-SNE算法:
主要思想:找到数据的一种二维表示,尽可能保持数据点之间的距离(高内聚,低耦合)。
这种方法不知道类别标签,是完全无监督的。
它只能变换用于训练的数据,不支持新数据(没有transform方法),即不能用于测试集。
具有调节参数(perplexity、early_exaggeration),通常默认参数的效果就很好。
2、将t-SNE应用于手写数字数据集
(1)了解一下digits数据集
from sklearn.datasets import load_digits
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
import numpy as np
digits = load_digits()
fig,axes = plt.subplots(2,5,figsize=(10,5),subplot_kw={'xticks':(),'yticks':()})
#展示前10张图片
for ax,img in zip(axes.ravel(),digits.images):
ax.imshow(img)
print(digits.images.shape)
print(digits.data.shape)
print(digits.target_names.shape)
输出:
(1797, 8, 8)
(1797, 64)
(10,)
在这个数据集中,包含1797张8*8灰度的图像。每个数据点都是一个数字,共有10种类别(数字0~9)
(2)使用PAC作为一个对比
使用PCA将数据集将至二维,并将其可视化。对pca变换后的数据的前两个主成分作图
pca = PCA(n_components=2)
pca.fit(digits.data) #t-SNE只能用于训练集 #将数据样本用pca进行转换
digits_pca = pca.transform(digits.data) plt.figure(figsize=(10,10))
plt.xlim(np.min(digits_pca[:,0]),np.max(digits_pca[:,0]))
plt.ylim(np.min(digits_pca[:,1]),np.max(digits_pca[:,1])) #将数据点绘制成文本
for i in range(len(digits.data)):
plt.text(digits_pca[i,0],digits_pca[i,1],str(digits.target[i])) plt.xlabel("First Principal component")
plt.ylabel("Second Principal cpmponent")
用pca可以将数据digits.data降到2维,没分别利用主成分1和主成分2,将数据点可视化至平面(只有两个特征才可作图到二维平面,便于观察)
利用pca前两个主成分可以把数字0,6,4相对较好地分开,但仍有重叠,其他大部分数字大量重叠。
(3)使用t-SNE
from sklearn.manifold import TSNE
tsne = TSNE(random_state=42)
digits_tsne = tsne.fit_transform(digits.data)
plt.figure(figsize=(10,10))
plt.xlim(np.min(digits_tsne[:,0]),np.max(digits_tsne[:,0])+1)
plt.ylim(np.min(digits_tsne[:,1]),np.max(digits_tsne[:,1])+1)
#将数据点绘制成文本
for i in range(len(digits.data)):
plt.text(digits_tsne[i,0],digits_tsne[i,1],str(digits.target[i]))
plt.xlabel("t-SNE feature 0")
plt.ylabel("t-SNE feature 1")
可以发现t-SNEde结果很棒,所有的类别都被明确地分开,形成密集的组
找到数据的一种二维表示,仅根据原始空间中数据点之间的靠近程度就能将各个类别明确分开
(4)关于matplotlib.pylot.text
在本次实验代码中,用到了plt.text()方法将降维后的数据在二维平面上用文本画出。
- 用法详见plt.text官方文档
ps:
利用散点图也能可视化我们上述的二维数据,但是不直观,因为类别太多了。
用t-SNE进行流形学习(digits数据集)的更多相关文章
- Scikit-Learn模块学习笔记——数据集模块datasets
scikit-learn 的 datasets 模块包含测试数据相关函数,主要包括三类: datasets.load_*():获取小规模数据集.数据包含在 datasets 里 datasets.fe ...
- 流形学习之等距特征映射(Isomap)
感觉是有很久没有回到博客园,发现自己辛苦写的博客都被别人不加转载的复制粘贴过去真的心塞,不过乐观如我,说明做了一点点东西,不至于太蠢,能帮人最好.回校做毕设,专心研究多流形学习方法,生出了考研的决心. ...
- Manifold learning 流形学习
Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligence 相比不过是换了个说法而已,然而事实上这里的 Learning 的意义要朴素得多. ...
- Python数据科学手册-机器学习: 流形学习
PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...
- 流形学习(manifold learning)的一些综述
流形学习(manifold learning)的一些综述 讨论与进展 issue 26 https://github.com/memect/hao/issues/26 Introduction htt ...
- 机器学习算法总结(十二)——流形学习(Manifold Learning)
1.什么是流形 流形学习的观点:认为我们所能观察到的数据实际上是由一个低维流行映射到高维空间的.由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上这些数据只要比较低的维度就能唯一的表示 ...
- 流形学习(manifold learning)综述
原文地址:https://blog.csdn.net/dllian/article/details/7472916 假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低 ...
- 流形学习 (Manifold Learning)
流形学习 (manifold learning) zz from prfans............................... dodo:流形学习 (manifold learning) ...
- ML:流形学习
很多原理性的东西需要有基础性的理解,还是篇幅过少,所以讲解的不是特别的清晰. 原文链接:http://blog.sciencenet.cn/blog-722391-583413.html 流形(man ...
随机推荐
- 翻译:HTML5与HTML4的区别
本文选译自:W3C Working Group Note: HTML5 Differences from HTML4. 解释一下W3C Working Group Note,作为"工作组笔记 ...
- mpvue 如何使用腾讯视频插件?
1.在小程序微信开放平台:设置 --- 第三方服务里,申请腾讯视频插件2.申请成功后就可以在项目中使用了 具体使用步骤如下:1.在项目目录src下的main.js中加入下面代码,这里代码会被编译到ap ...
- 解决vue安装时出现vue --version或vue不是内部命令的问题
1. 试图全局配置 vue 的环境变量,找到 vue.cmd 的路径,然后进行配置. 问题:在文件搜索中,没有找到 vue.cmd,失败. 1.npm i npm -g 全局 update 了 npm ...
- event 事件对象
关于event对象 在触发的事件的函数里面我们会接收到一个event对象,通过该对象我们可以得到需要的一些参数,比如说我们需要知道此事件作用到谁身上了,就可以通过event的属性target来获取到( ...
- 如何在 Java 中实现 Dijkstra 最短路算法
定义 最短路问题的定义为:设 \(G=(V,E)\) 为连通图,图中各边 \((v_i,v_j)\) 有权 \(l_{ij}\) (\(l_{ij}=\infty\) 表示 \(v_i,v_j\) 间 ...
- 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
背景 开发者在应用中集成HMS Core部分服务时,android sdk 以及flutter等跨平台sdk,会出现编译打包后,运行报6003错误码的情况.根据查询可以得知,错误代码 6003 表示证 ...
- 携程apollo配置中心服务端如何感知配置更新?
引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...
- 数据库基础知识详解三:MVCC、范式以及表连接方式
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 8.MVCC 多版本并发控制(Multi-Versi ...
- 渗透测试中为什么https抓包是明文传输?
网站用的是https抓包是明文传输,为什么能看到https报文的明文? https其实就是 http + SSL/TLS 两种协议的合体.http协议是应用层协议,而SSL/TLS是传输层协议. 那问 ...
- ui-route的一般用法 ,比较简单。在平时项目也用到,但是我也要记下来,虽然是'借鉴的',取其精华
这是个啥? ui-router是一个web客户端的路由解决方案.我觉得它最大的作用是将web界面的设计分块了. 分块分层 最初的web访问模型,是这样的: 我们访问page1,然后访问page2... ...