用seaborn画tsne,并指定形状、形状颜色与标记内容

2023-10-30 03:59

本文主要是介绍用seaborn画tsne,并指定形状、形状颜色与标记内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         最近在做深度模型的可视化操作,心血来潮,特此纪念!

        原创不易,转载请标明出处,谢谢!

1.如何用seaborn画tsne?

        这里拿sklearn中的digits数据集为例,类别数为2;

代码解释:

        1.主函数

        (1)加载digits数据集,类别数为2;

        (2) 得到数据集的特征与标签;

        (3)传入plot_tsne()函数;

        2.plot_tsne()函数:画tsne分布图,并将图像保存,"test/Set2.jpg"

        (1)初始化TSNE(),然后用PCA将特征降至2维;

        (2)将特征与标签存入表格df中;

        (3)调用seaborn的scatterplot()函数画图,色板条为“Set2”;

        (4)图像保存;

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt_sne
from sklearn import datasets
from sklearn.manifold import TSNE
import osdef plot_tsne(features, labels, epoch,fileNameDir = None):'''features:(N*m) N*m大小特征,其中N代表有N个数据,每个数据m维label:(N) 有N个标签'''print(features.shape,labels.shape)print(type(features),type(labels))print(np.any(np.isnan(features)),np.any(np.isinf(features)))features = np.nan_to_num(features)if not os.path.exists(fileNameDir):os.makedirs(fileNameDir)import pandas as pdtsne = TSNE(n_components=2, init='pca', random_state=0)import seaborn as sns#查看标签的种类有几个class_num = len(np.unique(labels))  # 要分类的种类个数  eg:[0, 1, 2, 3]这个就是为4try:tsne_features = tsne.fit_transform(features)  # 将特征使用PCA降维至2维except:tsne_features = tsne.fit_transform(features)#一个类似于表格的数据结构df = pd.DataFrame()df["y"] = labelsdf["comp1"] = tsne_features[:, 0]df["comp2"] = tsne_features[:, 1]# hue:根据y列上的数据种类,来生成不同的颜色;# style:根据y列上的数据种类,来生成不同的形状点;sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.y.tolist(),style = df.y.tolist(),palette=sns.color_palette("Set2",class_num),data=df).set(title="T-SNE projection")plt_sne.savefig(os.path.join(fileNameDir,"%s.jpg") % str(epoch),format = "jpg")plt_sne.show()if __name__ == '__main__':digits = datasets.load_digits(n_class=2)features, labels = digits.data, digits.targetprint(features.shape)print(labels.shape)plot_tsne(features, labels, "Set2", fileNameDir="test")

         运行上述代码,可得结果:

  2.如何指定图像上的形状?

        如果我们想用其他形状表示标签0,1,该怎么做呢!

做法很简单,对上述代码中的sns.scatterplot函数,添加markers参数

sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.y.tolist(),style = df.y.tolist(),palette=sns.color_palette("Set2",class_num),markers= {1:"v",0:"^"},data=df).set(title="T-SNE projection")

        添加markers参数后,我们就可以用倒三角表示标签1,正三角表示标签0:

3.如何指定形状颜色? 

         我们如果想对标签1,0的颜色进行随意指定,不想用色板条上提供的,做法如下!

(1)定义一个hex列表,用于存储表示颜色的十六进制;比如:

        hex = ["#ff8b8b", "#6e85b7"]

(2)将hex替换sns.plotscatter函数中的“Set2”参数即可;

sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.y.tolist(),style = df.y.tolist(),palette=sns.color_palette(hex,class_num),markers= {1:"v",0:"^"},data=df).set(title="T-SNE projection")

        这样,就能得到一个自定义颜色的分布图:

 4.如何指定自定义的标记内容?

        我们不想让右上角的0,1标签作为图注,想将0,1标签替换为其他信息,比如:

                将标签0替换为“zero”,标签1替换为"one";

        关于这一块,本人在网上并没有找到通过直接修改函数参数从而达到目的的方案,如果有小伙伴搜到的,可以在评论区分享一下!

本人是这样做的:

        (1)先读取存取在df表格中的标签列,然后再定义一个数组,根据标签0,1进行值的转换:

        data_label = []for v in df.y.tolist():if v == 1:data_label.append("one")else:data_label.append("zero")

        (2)将自定义的data_label加入存储数据的df表格中的value列:

        df["value"] = data_label

        (3)更改sns.scatterplot()函数中的hue、style、markers参数:

        sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.value.tolist(),style = df.value.tolist(),palette=sns.color_palette(hex,class_num),markers= {"one":"v","zero":"^"},data=df).set(title="T-SNE projection")

         通过上述操作,就能达到指定自定义的标签内容的效果:

         至此,标题中提到的问题已解答完毕,祝好!

———————————————————————————————————————————

        同时具备解决上述问题的代码,如下:

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt_sne
from sklearn import datasets
from sklearn.manifold import TSNE
import osdef plot_tsne(features, labels, epoch,fileNameDir = None):'''features:(N*m) N*m大小特征,其中N代表有N个数据,每个数据m维label:(N) 有N个标签'''print(features.shape,labels.shape)print(type(features),type(labels))print(np.any(np.isnan(features)),np.any(np.isinf(features)))features = np.nan_to_num(features)if not os.path.exists(fileNameDir):os.makedirs(fileNameDir)import pandas as pdtsne = TSNE(n_components=2, init='pca', random_state=0)import seaborn as sns#查看标签的种类有几个class_num = len(np.unique(labels))  # 要分类的种类个数  eg:[0, 1, 2, 3]这个就是为4try:tsne_features = tsne.fit_transform(features)  # 将特征使用PCA降维至2维except:tsne_features = tsne.fit_transform(features)#一个类似于表格的数据结构df = pd.DataFrame()df["y"] = labelsdf["comp1"] = tsne_features[:, 0]df["comp2"] = tsne_features[:, 1]hex = ["#ff8b8b", "#6e85b7"]data_label = []for v in df.y.tolist():if v == 1:data_label.append("one")else:data_label.append("zero")df["value"] = data_label# hue:根据y列上的数据种类,来生成不同的颜色;# style:根据y列上的数据种类,来生成不同的形状点;sns.scatterplot(x= df.comp1.tolist(), y= df.comp2.tolist(),hue=df.value.tolist(),style = df.value.tolist(),palette=sns.color_palette(hex,class_num),markers= {"one":"v","zero":"^"},data=df).set(title="T-SNE projection")plt_sne.savefig(os.path.join(fileNameDir,"%s.jpg") % str(epoch),format = "jpg")plt_sne.show()if __name__ == '__main__':digits = datasets.load_digits(n_class=2)features, labels = digits.data, digits.targetprint(features.shape)print(labels.shape)plot_tsne(features, labels, "Set2", fileNameDir="test")

这篇关于用seaborn画tsne,并指定形状、形状颜色与标记内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305446

相关文章

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

Linux从文件中提取特定内容的实用技巧分享

《Linux从文件中提取特定内容的实用技巧分享》在日常数据处理和配置文件管理中,我们经常需要从大型文件中提取特定内容,本文介绍的提取特定行技术正是这些高级操作的基础,以提取含有1的简单需求为例,我们可... 目录引言1、方法一:使用 grep 命令1.1 grep 命令基础1.2 命令详解1.3 高级用法2

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st