流行学习算法

  • 是一类用于可视化的算法,它允许进行更复杂的映射,通常也可以给出更好的可视化。
  • 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()方法将降维后的数据在二维平面上用文本画出。

ps:

利用散点图也能可视化我们上述的二维数据,但是不直观,因为类别太多了。

用t-SNE进行流形学习(digits数据集)的更多相关文章

  1. Scikit-Learn模块学习笔记——数据集模块datasets

    scikit-learn 的 datasets 模块包含测试数据相关函数,主要包括三类: datasets.load_*():获取小规模数据集.数据包含在 datasets 里 datasets.fe ...

  2. 流形学习之等距特征映射(Isomap)

    感觉是有很久没有回到博客园,发现自己辛苦写的博客都被别人不加转载的复制粘贴过去真的心塞,不过乐观如我,说明做了一点点东西,不至于太蠢,能帮人最好.回校做毕设,专心研究多流形学习方法,生出了考研的决心. ...

  3. Manifold learning 流形学习

    Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligence 相比不过是换了个说法而已,然而事实上这里的 Learning 的意义要朴素得多. ...

  4. Python数据科学手册-机器学习: 流形学习

    PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...

  5. 流形学习(manifold learning)的一些综述

    流形学习(manifold learning)的一些综述 讨论与进展 issue 26 https://github.com/memect/hao/issues/26 Introduction htt ...

  6. 机器学习算法总结(十二)——流形学习(Manifold Learning)

    1.什么是流形 流形学习的观点:认为我们所能观察到的数据实际上是由一个低维流行映射到高维空间的.由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上这些数据只要比较低的维度就能唯一的表示 ...

  7. 流形学习(manifold learning)综述

    原文地址:https://blog.csdn.net/dllian/article/details/7472916 假设数据是均匀采样于一个高维欧氏空间中的低维流形,流形学习就是从高维采样数据中恢复低 ...

  8. 流形学习 (Manifold Learning)

    流形学习 (manifold learning) zz from prfans............................... dodo:流形学习 (manifold learning) ...

  9. ML:流形学习

    很多原理性的东西需要有基础性的理解,还是篇幅过少,所以讲解的不是特别的清晰. 原文链接:http://blog.sciencenet.cn/blog-722391-583413.html 流形(man ...

随机推荐

  1. javaweb之修改功能

    数据库的修改功能,主要是通过查询,保留之前的数据,得到当前想要修改的页面,并进行修改. 一.dao层 在dao层需要添加两个fangfa,一个查询,一个修改(这是整个dao层,包括之前的增删.浏览) ...

  2. ubantu系统之 lunch时报错:no such file /....../.lunchrc

    no such file /....../.lunchrc 出现时: 使用 source build/envsetup.sh 执行完后 再用lunch

  3. SecureCRT显示连接失败的原因

    问题描述:连接后像192.168.111.140那样的红色图标 原因:没有开启对应的虚拟机 解决办法:打开对应的虚拟机

  4. 浅谈js本地图片预览

    最近在工作中遇到一个问题,就是实现一个反馈页面,这个反馈页面的元素有反馈主题.反馈类型.反馈内容.反馈人联系电话以及反馈图片.前端将这些反馈的元素POST给后台提供的接口:实现这个工作的步骤就是:页面 ...

  5. Qt QComboBox之setEditable和currentTextChanged及其源码分析

    目录 Qt QComboBox之setEditable和currentTextChanged以及其源码分析 前言 问题的出现 问题分析 currentTextChanged信号触发 源码分析 Qt Q ...

  6. [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件

    https://www.cnblogs.com/yeungchie/ 常见的集成电路版图数据库文件格式有 GDSII 和 OASIS,virtuoso 提供了下面两个工具用来在 Shell 中导出版图 ...

  7. numpy---(精简)

    numpy get started 导入numpy库, 并查看版本 import numpy as np np.__version__ '1.14.3' # pyplot显示画图, 数据分析与可视化 ...

  8. Java实现平滑加权轮询算法--降权和提权

    上一篇讲了普通轮询.加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值:成功时提高有效权重值(但不能大于weight值). 本文在平滑加权轮询算法的 ...

  9. Java并发编程之Lock(同步锁、死锁)

    这篇文章是接着我上一篇文章来的. 上一篇文章 同步锁 为什么需要同步锁? 首先,我们来看看这张图. 这是一个程序,多个对象进行抢票. package MovieDemo; public class T ...

  10. C#常见控件与SQL Sever数据库交互

    C#常见控件与SQL Sever数据库交互 下拉框(ComboBox)与数据库绑定 首先,我们采用DataSet作为临时的数据库,这样会比较好 那么,我们先创建两个成员(对象) string sqlc ...