基于t-SNE的Digits数据集降维与可视化

news2025/6/14 14:37:12

基于t-SNE的Digits数据集降维与可视化

描述

t-SNE(t-分布随机邻域嵌入)是一种基于流形学习的非线性降维算法,非常适用于将高维数据降维到2维或者3维,进行可视化观察。t-SNE被认为是效果最好的数据降维算法之一,缺点是计算复杂度高、占用内存大、降维速度比较慢。

本任务的实践内容包括:

1、 基于t-SNE算法实现Digits手写数字数据集的降维与可视化

2、 对比PCA/LCA与t-SNE降维前后手写数字识别模型的性能

源码下载

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    matplotlib   	3.3.4
    scikit-learn	0.24.2
    

分析

Digits手写数字数据集包括1797张手写数字图片,每张图片代表0~9之间的1个数字,图片大小为8*8,即特征维度为64。任务中我们分别使用PCA、LDA和t-SNE三种算法将数据集降为2维,并可视化观察其数据分布情况,之后通过K-最近邻算法(K-NN)对三种算法降维后的数据集进行分类,对比其准确性。

本任务涉及以下几个环节:

a)加载Digits数据集

b)分别使用PCA、LDA、t-SNE算法进行降维(由64维降2维)

c)使用K-NN分类器分别在三种算法降维后的数据上建模

d)对比评估模型的准确性

实施

1、加载Digits数据集

import matplotlib.pyplot as plt
from time import time
from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 

# 加载Digits数据集
digits = load_digits()
data = digits.data
target = digits.target
print(data.shape) # 查看数据维度(64)

# 可视化降维后的数据
def show_pic(new_data, target, label):
    plt.title(label)
    plt.scatter(new_data[:, 0], new_data[:, 1], c=target)
    plt.show()

结果如下:

(1797, 64)

Digits数据集包括1797张图片样本,特征维度为64(图片大小8×8)。

2、使用不同算法将数据降为2维,并可视化

首先,分别使用PCA、LDA、t-SNE三种算法将Digits数据集由64维降为2维,然后调用上面自定义的show_pic方法将降维后的数据可视化。

# 使用不同的算法将数据降为2维
# 1、PCA降维可视化
pca = PCA(n_components=2).fit(data)
pca_data = pca.transform(data) # 降维转换
show_pic(pca_data, target, 'PCA')

# 2、LDA降维可视化
lda = LinearDiscriminantAnalysis(n_components=2).fit(data, target)
lda_data = lda.transform(data) # 降维转换
show_pic(lda_data, target, 'LDA')

# 3、TSNE降维可视化(计算复杂度高,较慢)
print('  t-SNE降维中,请耐心等待......')
start = time() # 开始时间
tsne = TSNE(n_components=2, init='pca', random_state=0)
tsne_data = tsne.fit_transform(data)
end = time() # 完成时间
show_pic(tsne_data, target, 't-SNE (cost {:.1f} seconds)'.format(end-start))

输出结果:

请添加图片描述

请添加图片描述
请添加图片描述

可以看到,将数据由64维降成2维后,PCA的数据已经混在一起,LDA数据可分性稍好一些,t-SNE的数据可分性最高,数据集中10种手写数字的样本彼此独立。t-SNE的降维效果十分出色,但算法的时间复杂度高。

3、评估三种算法降维后的分类准确性

接下来,使用K-NN分类器分别在上面三种算法降维后的数据上建立分类模型,并对比评估模型的准确性。

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 评估三种算法降维后(均降成2维)的分类准确性(基于KNN算法)
def eval_model(new_data, target, label):
    X_train, X_test, y_train, y_test = train_test_split(new_data, target, random_state=0) # 拆分数据集
    model = KNeighborsClassifier(3).fit(X_train, y_train)
    score = model.score(X_test, y_test) # 在测试集上评估模型成绩
    print(label, score) # 打印模型成绩
    
print('Digits数据集由64维降成2维后,使用K-NN分类准确性对比:')

eval_model(pca_data, target, 'PCA accuracy:')
eval_model(lda_data, target, 'PDA accuracy:')
eval_model(tsne_data, target, 't-SNE accuracy:')

结果如下:

Digits数据集由64维降成2维后,使用K-NN分类准确性对比:
PCA accuracy: 0.5888888888888889
PDA accuracy: 0.6422222222222222
t-SNE accuracy: 0.9955555555555555

可以看到,在三种降维算法中,t-SNE降维后的数据分类准确性最高,该算法是目前效果最好的降维算法之一,Digits数据集即便被降成2维,依然保持了良好的可分性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效时间管理日历 DHTMLX Event Calendar 2.0.3 Crack

DHTMLX Event Calendar用于高效时间管理的轻量级 JavaScript 事件日历 DHTMLX 可帮助您开发类似 Google 的 JavaScript 事件日历,以高效地组织约会。 用户可以通过拖放来管理事件,并以六种不同的模式显示它们。 JavaScript 事件日历功能 轻的简单的 Java…

UDP/TCP的相关性你知道几个?

TCP/IP网络原理——主要围绕UDP/TCP进行讲解 文章目录TCP/IP网络原理——主要围绕UDP/TCP进行讲解应用层传输层UDP/TCPTCP丢包总结应用层 网络协议的五层协议分别是应用层,传输层,网络层,数据链路层,物理层,这五层构成…

【STL十】关联容器——set容器、multiset容器

【STL十】关联容器——set容器、multiset容器一、set简介二、头文件三、模板类四、set的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、修改操作insert3、修改操作erase、clear七、multisetset和multiset会根…

linux四剑客 grep awk sed find

Grep 过滤来自一个文件或标准输入匹配模式内容。 除了grep外,还有egrep、fgrep。egrep是grep的扩展,相当于grep -E。fgrep相当于grep -f,用的少。 Usage: grep [OPTION]… PATTERN [FILE]… 支持的正则描述-E,–extended-regexp…

爱智EdgerOS之深入解析VSCode的EdgerOS插件

一、安装插件 EdgerOS 插件是一个专门为应用开发者提供的在 EdgerOS 下提供应用构建、应用部署、应用更新等功能的插件,同时它还可以监视爱智应用的执行状态,方便开发者更好地调试应用。EdgerOS 插件需要在 VSCode 的 “拓展” 中下载安装,如…

vue-vue2和vue3的diff算法

核心要点 数据变化时,vue如何更新节点虚拟DOM 和 真实DOM 的区别vue2 diff 算法vue3 diff 算法 一、 数据变化时,vue如何更新节点 首先渲染真实DOM的开销是很大,比如有时候我们修改了某个数据且修改的数据量很大时,此时会频繁的…

自学编程的5大误区,早知道早避坑,过来人的宝贵经验

前言 有的人自学很快,几乎一个多月就能掌握一门技术,而有的人苦苦坚持,最后还是半途而废,很大的原因就在于在学习的时候掉进了一些误区没能走出来。 今天我们就来讲讲自学编程常见的5大误区,避开这些误区我们定能在自…

【Java Web】014 -- SpringBoot原理(配置优先级、Bean管理、SpringBoot原理)

目录 一、配置优先级 1、配置(3种:.properties、yml、yaml) ①、配置文件优先级 ②、如何指定Java系统属性和命令行参数 ③、5种配置文件的优先级 二、Bean管理 1、获取bean(3种方法) 2、bean作用域(5种&am…

Arduino开发之如何连接超声波模块?

文章目录0、引言1、超声波模块说明2、代码编写3、功能演示0、引言 在利用Arduino开发过程中,若需知道设备与周围环境的距离,可利用超声波模块测量短程距离,使运动设备感知周围环境。本文在【Arduino如何进行开发?】基础上&#xf…

探索树形数据结构,通识树、森林与二叉树的基础知识(专有名词),进一步利用顺序表和链表表示、遍历和线索树形结构

树与二叉树 1.树 1.树形结构(非线性结构) 结点之间有分支,具有层次关系 树的定义: 树(tree)是n(n≥0)个有限集。 若n 0,则称为空树; 若n > 0,则它满足如下两个条件: 有且仅有一个特定的称为根(Ro…

NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032

然后首先我们来看一下hdfs中的数据的格式可以看到,还是json的格式对吧 而且也没有回行 然后我们来操作,首先添加一个evaluateJsonPath处理器 可以看到找到这个处理器 添加以后,我们去配置 ​​​​​​​ 点击去配置evaluateJsonPath处理器 可以看到首先我们destination这里配…

Rancher部署K8s集群

一、集群配置 服务器CPU内存磁盘操作系统k8s-master16核16G60GCentOS Linux release 7.5.1804k8s-node-116核16G60GCentOS Linux release 7.5.1804k8s-node-216核16G60GCentOS Linux release 7.5.1804 Rancher version : 2.6.3 二、环境初始化 所有服务器均执行一遍 1、将…

如何在矩池云上部署 Carla,模拟自动驾驶

简介 Carla 是一款基于 Python 编写和 UE(虚幻引擎)的开源仿真器,用于模拟自动驾驶车辆在不同场景下的行为和决策。它提供了高度可定制和可扩展的驾驶环境,包括城市、高速公路和农村道路等。Carla 还提供了丰富的 API 和工具&…

vscode中的配置

首先,运行或调试某文件,需要该文件是活动文件(当前打开的文件)。 下面依次介绍tasks.json和launch.json的配置参数。 tasks.json 1.tasks.json的用途 用于指定编译器和链接文件等。默认路径在.vscode下面。 2.如何打开一个tas…

springboot+Mybatis项目搭建教学(controller、service、dao、entity),并写一个简单的接口

创建一个springboot的项目 首先我们需要新建一个文件夹对吧,这里就不展示了,然后我们用IDEA打开这个文件夹,是这样的 新建一个模块 然后按照这里的进行选择 模块名字是自己随便起的,命名在这里时无关紧要的,然后我…

Python实现Imagenet数据集的合并和拆分

Python实现Imagenet数据集的合并和拆分 1. 合并Imagenet 任务需求 文件夹形式为一个数据集MyImagenet,路径为/home/lihuanyu/code/03AdaBins/img_data/MyImagenet/val,val文件夹又有若干的类别子文件夹,子文件夹是每一个类别的图片&#xf…

数据结构_第十一关:二叉树的链式结构

目录 1.二叉树链式结构的实现 1.1前置说明 1.2二叉树的遍历 1.3二叉树遍历的实现: 1)先序遍历、中序遍历、后续遍历代码如下 2)层序遍历: 1.4结点个数以及高度的计算 1)求二叉树的总节点: 2&#…

阿里张勇:所有行业都值得用大模型重新做一遍!

‍数据智能产业创新服务媒体——聚焦数智 改变商业“2023阿里云峰会”于4月11日在北京国际会议中心隆重召开,本次峰会以" 与实俱进 为创新提速!"为主题,阿里巴巴集团董事会主席兼首席执行官张勇、阿里云智能集团首席技术官周靖人、…

Python机器学习:适合新手的8个项

再多的理论也不能代替动手实践。教科书和课程会让你误以为精通,因为材料就在你面前。但当你尝试去应用它时,可能会发现它比看起来更难。而「项目」可帮助你快速提高应用的 ML 技能,同时让你有机会探索有趣的主题。此外,你可以将项…

java mysql高校教学成果管理系统dzkfY3程序

1.用户管理模块: 该模块包括注册用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有注册用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护&…