t-SNE降维可视化并生成excel文件使用其他画图软件美化

t-sne

t-SNE(t-分布随机邻域嵌入,t-distributed Stochastic Neighbor Embedding)是由 Laurens van der Maaten 和 Geoffrey Hinton 于 2008 年提出的一种非线性降维技术。它特别适合用于高维数据的可视化。t-SNE 的主要目标是将高维数据映射到低维空间(通常是二维或三维),同时尽可能地保留高维数据中的局部结构。这使得我们可以在低维空间中更直观地观察数据的结构和分布。

t-SNE 能很好地保留高维数据的局部结构,适用于各种类型的数据,尤其是复杂的非线性数据。但它的计算复杂度较高,不适合非常大规模的数据集,对超参数(如 perplexity)较为敏感,需要仔细调参。低维空间中的全局结构不一定可靠。

可视化

要使用 t-SNE 进行数据可视化,可以使用 Python 的 scikit-learn 库。随机生成两个数据集:

import matplotlib.pyplot as plt
import numpy as np
from sklearn.manifold import TSNE# 假设这里有两个数据集,分别是 dataset1 和 dataset2
dataset1 = np.random.randn(100, 10)  # 生成随机数据作为示例
dataset2 = np.random.randn(80, 10)# 合并数据集
merged_data = np.concatenate((dataset1, dataset2))# 对合并后的数据应用 t-SNE 进行降维
tsne = TSNE(n_components=2, random_state=0)
tsne_data = tsne.fit_transform(merged_data)# 将降维后的数据按照原来的数据集进行划分
tsne_data_1 = tsne_data[:len(dataset1)]
tsne_data_2 = tsne_data[len(dataset1):]# 绘制散点图
plt.scatter(tsne_data_1[:, 0], tsne_data_1[:, 1], color='b', label='Dataset 1')
plt.scatter(tsne_data_2[:, 0], tsne_data_2[:, 1], color='r', label='Dataset 2')
plt.legend()
plt.show()

在这里插入图片描述

根据数据集中不同的标签使用不同的颜色:

import numpy as np
import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as pltfrom utils.feature import features18_df = pd.read_csv('68.csv')X = df[features18_] # 选择需要的特征
y = df["fs"] # 根据fs标签选择不同的颜色画图# 初始化 t-SNE 模型,设置降维后的维度为 2 维
tsne = TSNE(n_components=2, perplexity=min(10, len(X)-1))# 对数据进行降维
X_tsne = tsne.fit_transform(X)# 绘制结果
plt.figure(figsize=(10, 10))
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y.astype(int), cmap='jet')
plt.colorbar()
plt.show()

在这里插入图片描述

t-SNE的参数

t-SNE 类的 init 方法定义了用于初始化 t-SNE 对象的参数。下面是这些参数的详细介绍:

n_components:int, 默认值=2

要降维到的维度数。通常设为2或3,用于可视化。

perplexity:float, 默认值=30.0

衡量数据局部结构的一个超参数。较大的 perplexity 使 t-SNE 关注更大范围的邻居数。有效范围通常在5到50之间。

early_exaggeration:float, 默认值=12.0

在早期阶段,增加距离以便于更好地形成群体结构。较高的值使得群体更加分离。

learning_rate:float 或 “auto”, 默认值=“auto”

学习率。学习率过低可能导致优化停滞,学习率过高可能导致嵌入结构被破坏。当设为 “auto” 时,学习率为 max(N / early_exaggeration / 4, 50),其中 N 是样本数。

n_iter:int, 默认值=1000

梯度下降迭代次数。增大此值可能会提升嵌入的质量。

n_iter_without_progress:int, 默认值=300

在没有进展的情况下提前终止的迭代次数。用于防止无效计算。

min_grad_norm:float, 默认值=1e-7

最小梯度范数,用于判断是否收敛。

metric:string 或 callable, 默认值=“euclidean”

用于计算高维空间距离的度量标准。默认是欧几里得距离。

metric_params:dict 或 None, 默认值=None

用于度量的额外关键字参数。

init:string 或 ndarray, 默认值=“pca”

低维嵌入的初始化方法。可以是 ‘random’ 或 ‘pca’,也可以提供一个初始位置的数组。

verbose:int, 默认值=0

控制输出的详细程度。0 表示不输出,1 或更高的值表示输出更多信息。

random_state:int, RandomState 实例或 None, 默认值=None

随机数生成器的种子。设置此参数以获得可重复的结果。

method:string, 默认值=“barnes_hut”

用于计算嵌入的算法。可选值有 ‘barnes_hut’(适用于较大数据集)和 ‘exact’(适用于较小数据集)。

angle:float, 默认值=0.5

仅在 method=‘barnes_hut’ 时使用。控制 Barnes-Hut 近似的精度,值越小精度越高,计算时间越长。

n_jobs:int 或 None, 默认值=None

并行计算的 CPU 核心数。None 表示 1,-1 表示使用所有可用的核心。

生成excel文件

用python的matplotlib库作出的图可以看,但并不完美,虽然可以通过调matplotlib的参数来使图画得更完美,但是不如使用专业的画图软件方便,比如微软的visio,爱不释手,所以我们需要将t-SNE降维的坐标点生成一个excel文件,在画图软件中导入这个excel文件,使可视化变得更完美。将t-SNE降维后的数据保存到Excel文件中,可以使用 pandas 库中的 to_excel 方法。

df = pd.DataFrame(X_tsne)
writer = pd.ExcelWriter('arr.xlsx')
df.to_excel(writer)
writer.close()

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

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

相关文章

修改vscode的字体为等宽字符

在文件——首选项——设置 中 搜索 Editor: Font Family 将内容改为下面的 Consolas, Courier New, monospace 之后重启Vscode就行了

初步探究Rust生态与图形界面编程

引言 Rust作为一种现代的、安全的系统编程语言,自2010年问世以来,逐渐在开发社区中崭露头角。它的内存安全保证、并发处理能力、以及无需垃圾回收机制的高性能特性,使得它成为了开发系统工具、网络服务、以及嵌入式系统的热门选择。然而&…

(五十三)第 8 章 动态存储管理(伙伴系统)

1. 背景说明 2. 示例代码 buddySystem.h // 伙伴系统实现头文件#ifndef BUDDY_SYSTEM_H #define BUDDY_SYSTEM_H#include "errorRecord.h"#define POWER_TIME 10 // 可利用空间总容量的 2 的幂次,子表的个数为 POWER_TIME + 1 #define MAX_USED_BLOCK_NUM 100 //…

我的 Java 面试“打怪升级”之路01

前言 在当今的科技行业,Java 作为一门广泛应用的编程语言,其相关的岗位竞争可谓十分激烈。作为一名求职者,经历 Java 面试就如同一场充满挑战的“打怪升级”游戏。在这里,我想和大家分享一下我在 Java 面试中的一些经历和感悟。 …

SwiftUI 截图(snapshot)视频画面的极简方法

功能需求 在 万物皆可截图:SwiftUI 中任意视图(包括List和ScrollView)截图的通用实现 这篇博文中,我们实现了在 SwiftUI 中截图几乎任何视图的功能,不幸的是它对视频截图却无能为力。不过别着急,我们还有妙招。 在上面的演示图片中,我们在 SwiftUI 中可以随心所欲的截图…

前端Vue组件化实践:打造灵活可维护的地址管理组件

随着前端技术的不断演进,复杂度和开发难度也随之上升。传统的一体化开发模式使得每次小小的修改或功能增加都可能牵一发而动全身,严重影响了开发效率和维护成本。组件化开发作为一种解决方案,通过模块化、独立化的开发方式,实现了…

【java算法专场】滑动窗口(下)

目录 水果成篮 算法分析 算法步骤 示例 算法代码 找到字符串中所有字母异位词 算法分析 算法步骤 示例 算法代码 优化 算法代码 串联所有单词的子串 算法分析 算法步骤 示例 算法代码 最小覆盖子串 算法分析 算法步骤 示例 算法代码 算法分析 这道题其实…

AI绘画Stable Diffusion 自制素材工具: layerdiffusion插件—透明背景生成工具

大家好,我是设计师阿威 今天给大家分享一款AI绘画的神级插件—LayerDiffusion。 Layerdiffusion是一个用于stable-diffusion-webui 的透明背景生成(不是生成图再工具扣图,是直接生成透明背景透明图像)插件扩展,它可以…

【Linux 文件读写描述符重定向 Linux 一切皆文件缓冲区】

文章目录 一、文件的读写操作二、文件描述符三、文件重定向四、理解 Linux 一切皆文件五、文件缓冲区 一、文件的读写操作 文件内容属性 当文件没有被操作的时候,一般文件还是在磁盘当中 文件操作文件内容的操作文件属性的操作,文件操作有可能即改变内容…

《python程序语言设计》2018版第5章第55题利用turtle黑白棋盘。可读性还是最重要的。

今天是我从2024年2月21日开始第9次做《python程序语言设计》作者梁勇 第5章 从2019年夏天的偶然了解python到2020年第一次碰到第5章第一题。彻底放弃。再到半年后重新从第一章跑到第五章,一遍一遍一直到今天2024.7.14日第9次刷第五章。 真的每次刷完第五章感觉好像…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…

android13 文件管理器无法安装apk 奔溃问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.我们简单写个apk测试下 3.排查客户apk 4.frameworks源码排查 5.编译验证 6.彩蛋 1.前言 客户提供的文件管理apk不能安装apk文件,一点击就奔溃。 2.我们简单写个apk测试下 private void installApk(File apkFile) {i…

映美精黑白相机IFrameQueueBuffer转halcon的HObject

映美精黑白相机&#xff0c;用wpfhalcon开发取图 1.到官网下载&#xff0c;开发包 1sdk 2c开发例子 3c#开发例子 引入TIS.Imaging.ICImagingControl35.dll 3.ICImagingControl使用这个类控制相机 /// <summary> /// 相机控制 /// </summary> public ICImagingC…

MySQL的插入(DML)

1.给指定字段添加数据 这个就是&#xff0c;想插入所对应的字段&#xff0c;就插入所对应的数值。先把字段列出来&#xff0c;不一定是全部的字段&#xff0c; 然后插入想要的值&#xff0c;注意&#xff0c;只能插入一行。 INSERT INTO 表名 (字段1,字段2,.....) VALUES(值…

将swagger注解导入apifox的IDEA配置

在使用IDEA开发中&#xff0c;经常需要将后端接口导出到Apifox&#xff0c;以便于测试。将swagger注解内容导出到Apifox中&#xff0c;需要进行以下设置: file->settting打开对话框&#xff0c;选择Other Settings -> Apifox Help&#xff0c;如下图&#xff1a; 2.选…

【软件测试】自动化测试常用函数 -- 详解

一、WebDriver API 一个简单自动化脚本的构成&#xff1a; 脚本解析 # coding utf-8 from selenium import webdriver import time browser webdriver.Firefox() time.sleep(3) browser.get("http://www.baidu.com") time.sleep(3) browser.find_element_by_id(…

数据实时化是必要还是偏见?

数据实时化是必要还是偏见&#xff1f; 一、前言二、数据仓库的起源三、数据架构的演进四、数据实时化的必要性五、总结 本文主要基于数据仓库的起源和数据架构的演进来聊聊&#xff0c;数据实时化是否真的必要&#xff1f;是"过度优化"、“实时偏见"还是"…

【数据结构】手写快速排序

一、理念 什么是快速排序&#xff1f; 首先确立pivot&#xff0c;比如下图位于末尾 然后i遍历3到6 在3的时候&#xff0c;j指向i前面一位 如果3<5(pivot)&#xff0c;那么j&#xff0c;同时将i与j指向的交换&#xff0c;第一次交换是原地不动 一直到遇见9&#xff0c;…

数据结构和算法(0-1)----递归

定义​ 递归是一种在程序设计中常用的技术&#xff0c;它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题&#xff0c;这些问题的解决方式具有自相似性。在数据结构和算法中&#xff0c;递归是一种重要的解决问题的方法&#xff0c;尤其是…

处于群晖Docker中的HomeAssistant监控宿主机CPU温度

处于群晖Docker中的HomeAssistant监控宿主机CPU温度 解决方案 在configuration.yaml中添加&#xff1a; sensor: - platform: filename: "Host Temperature" # 可以自定义file_path: /sys/class/hwmon/hwmon0/temp1_inputvalue_template: "{{ int(value)/100…