基于t-SNE的泰坦尼克号数据集降维

news2024/11/18 7:31:31

目录

  • 1. 作者介绍
  • 2. 算法介绍
    • 2.1 t-SNE介绍
    • 2.2.SNE基本原理
    • 2.3.拥挤问题
    • 2.4.t-SNE基本原理
    • 2.5.t-SNE算法过程
  • 3. 泰坦尼克号数据集降维实验
    • 3.1.数据集介绍
    • 3.2 任务介绍
    • 3.3 代码实现
    • 3.4 实验结果
  • 参考连接

1. 作者介绍

刘方星,男,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:406201373@qq.com

孙思伟,男,西安工程大学电子信息学院,2023级研究生
研究方向:深度强化学习与人工智能
电子邮件:sunsiwei0109@163.com

2. 算法介绍

2.1 t-SNE介绍

t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由Laurens van der Maaten和Geoffrey Hinton在08年提出来。此外,t-SNE是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。t-SNE是由SNE(Stochastic Neighbor Embedding,SNE;Hinton and Roweis,2002)发展而来。

2.2.SNE基本原理

SNE是通过仿射变换将数据点映射到概率分布上,主要包括两个步骤:
SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。
SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似。

2.3.拥挤问题

拥挤问题就是说各个簇聚集在一起,无法区分。比如有一种情况,高维度数据在降维到10维下,可以有很好的表达,但是降维到两维后无法得到可信映射,比如降维如10维中有11个点之间两两等距离的,在二维下就无法得到可信的映射结果(最多3个点)。进一步的说明,假设一个以数据点为中心,半径为r的m维球(三维空间就是球),其体积是按增长的。
尽管SNE提供了很好的可视化方法,但是他很难优化,而且存在拥挤问题。后续中,Hinton等人又提出了t-SNE的方法。与SNE不同,主要如下:
使用对称版的SNE,简化梯度公式。
低维空间下,使用t分布替代高斯分布表达两点之间的相似度。
t-SNE在低维空间下使用更重长尾分布的t分布来避免拥挤问题和优化问题。
在这里插入图片描述
从上图可以看到,随着维度的增大,大部分数据点都聚集在m维球的表面附近,与点的距离分布极不均衡。如果直接将这种距离关系保留到低维,就会出现拥挤问题。Cook et al.(2007) 提出一种slight repulsion的方式,在基线概率分布(uniform background)中引入一个较小的混合因子,这样就永远不会小于 (因为一共了n(n-1)个pairs),这样在高维空间中比较远的两个点之间的总是会比大一点。这种称之为UNI-SNE,效果通常比标准的SNE要好。优化UNI-SNE的方法是先让为0,使用标准的SNE优化,之后用模拟退火的方法的时候,再慢慢增加。

2.4.t-SNE基本原理

t-SNE的基本思想是将高维数据映射到低维空间,同时保留数据间的局部结构。具体而言,给定一个高维数据集X={ X1,X2…Xn},其中 ∈Rd ,要将其映射到一个d维的空间Y = {Y1 ,…, Yn} 且d≪D。与其他降维算法不同的是,t-SNE旨在保持数据点之间的局部相似性,即将高维空间中距离接近的点映射到低维空间中距离仍然较近的位置。为了实现这个目标,t-SNE建立了一个概率模型,用于将数据点从高维空间映射到低维空间。具体地,它假设在高维空间中距离接近的点在低维空间中也有更大的概率被选择为临近点。
在t-SNE中,每个高维数据点 对应一个在低维空间中的概率分布 ,用于描述 在低维空间中的位置。与此同时,为了保留其局部结构,还需要为每个 建立一个概率分布 ,用于描述 与其它数据点之间的相似性。在t-SNE中,用采用的是高斯分布,即
在这里插入图片描述
其中P( Xi∣Xj )表示在高维空间中,Xi在以 Xj为中心的局部高斯分布中出现的概率密度。它的定义为:
在这里插入图片描述
其中σj是一个尺度参数,用于控制局部邻域的大小。同样地,我们也需要定义一个低维空间中的概率分布q(i,j)。在t-SNE中,这个概率分布是由一个类似于softmax的归一化因子给出的,形式为:
在这里插入图片描述
其中( 1 + || yi − yj||2)−1可以解释成一个t分布。
t-SNE的目标函数定义为两个概率分布之间的KL散度,即
在这里插入图片描述
为了最小化KL散度,可以采用梯度下降法来求解。因为KL散度没有解析解,所以梯度需要通过自动微分或其他数值方法进行计算。
t-SNE的基本思想是在高维数据空间和低维嵌入空间中分别构建高斯分布和t-分布,在两个空间中寻找相同的邻居,并最小化两个概率分布之间的差异。
首先,它将通过选择一个随机数据点并计算与其他数据点的欧几里得距离来创建概率分布。从所选数据点附近的数据点将获得更多的相似度值,而距离与所选数据点较远的数据点将获得较少的相似度值。使用相似度值,它将为每个数据点创建相似度矩阵(S1)由上图可知,我们可以说X1的邻域 N(X1)= {X2,X3,X4,X5,X6},这意味着X2,X3,X4,X5和X6是X1的邻居。 它将在相似度矩阵“S1”中获得更高的价值。这是通过计算与其他数据点的欧几里得距离来计算的。另一方面,X20远离X1。这样它将在S1中获得较低的值。其次,它将根据正态分布将计算出的相似距离转换为联合概率。通过以上的计算,t-SNE将所有数据点随机排列在所需的较低维度上。t-SNE将再次对高维数据点和随机排列的低维数据点进行所有相同的计算。但是在这一步中,它根据t分布分配概率。这就是名称t-SNE的原因。
在这里插入图片描述
t-SNE中使用t分布的目的是减少拥挤问题,t分布→视觉上t分布看起来很像正态分布,但尾部通常更胖,这意味着数据的可变性更高。对于较低维的数据点,还将创建一个相似度矩阵(S2)。然后该算法将S1与S2进行比较,并通过处理一些复杂的数学运算来使S1与S2之间有所不同。包括使用两个分布之间的Kullback Leibler散度(KL散度)作为损失函数运行梯度下降算法。使用KL散度通过将两个分布之间相对于数据点位置的值最小化,帮助t-SNE保留数据的局部结构。

2.5.t-SNE算法过程

算法过程:
在这里插入图片描述

3. 泰坦尼克号数据集降维实验

3.1.数据集介绍

Titanic数据集在数据分析领域是十分经典的数据集。泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存者有一些运气因素,但有些人比其他人更容易存活下来,究竟有哪些因素影响着最终乘客的生存与否。
数据集包含11个特征,分别是:
Pclass:乘客所持票类,有三种值(lower,middle,upper)
Survived:0代表死亡,1代表存活
Name:乘客姓名
Sex:乘客性别
Age:乘客年龄(有缺失)
SibSp:乘客兄弟姐妹/配偶的个数(整数值)
Parch:乘客父母/孩子的个数(整数值)
Ticket:票号(字符串)
Fare:乘客所持票的价格(浮点数,0-500不等)
Cabin:乘客所在船舱(有缺失)
Embark:乘客登船港口:S、C、Q(有缺失)

titanic = sns.load_dataset('titanic')
titanic = titanic.dropna()

这两行加载seaborn库提供的泰坦尼克号数据集,并移除了所有包含NaN值的行。

3.2 任务介绍

任务中我们分别使用PCA、LDA和t-SNE三种算法将数据集降为2维,并可视化观察其数据分布情况,之后通过K-最近邻算法(K-NN)对三种算法降维后的数据集进行分类,对比其准确性。
本任务涉及以下几个环节:
a)加载Titanic数据集
b)分别使用PCA、LDA、t-SNE算法进行降维
c)使用K-NN分类器分别在三种算法降维后的数据上建模

3.3 代码实现

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import (LinearDiscriminantAnalysis)
from sklearn.manifold import TSNE
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from time import time
import seaborn as sns
import matplotlib.pyplot as plt
def show_pic(data, target, title):
    plt.scatter(data[:, 0], data[:, 1], c=target)
    plt.title(title)
    plt.show()
    pd.read_csv('D:\\titanic\\train.csv')
titanic = sns.load_dataset('titanic')
titanic = titanic.dropna()
features = ['pclass', 'age', 'fare']
data = titanic[features]
target = titanic['survived']
# 使用不同的算法将数据降为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=1).fit(data, target)
def show_pic(data, target, title):
    if data.shape[1] == 1:  # 如果数据只有一维
        plt.scatter(data[:, 0], [0] * len(data), c=target)  # 使用0作为所有点的第二维度的占位符
        plt.title(title)
        plt.xlabel("LD1")
        plt.yticks([])  # 移除y轴的刻度
    else:
        plt.scatter(data[:, 0], data[:, 1], c=target)
        plt.title(title)
    plt.show()
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))
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('titanic数据集降成2维后,使用K-NN分类准确性对比:')
eval_model(pca_data, target, 'PCA accuracy:')
eval_model(lda_data, target, 'LDA accuracy:')
eval_model(tsne_data, target, 't-SNE accuracy:')

3.4 实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考连接

[1]基于t-SNE的Digits数据集降维与可视化
[2]t-SNE完整笔记

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

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

相关文章

vue3 监听器,组合式API的watch用法

watch函数 在组合式 API 中,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数 watch(ref,callback(newValue,oldValue),option:{}) ref:被监听的响应式量,可以是一个 ref (包括计算属性)、一个响应式…

大型零售企业总部到分公司数据发放,有没有更优化的方案?

大型零售企业在市场经济中扮演重要角色,是保证基础商品生产、流通和供给的重要一环。随着企业发展,很多大型零售企业都会在全国、乃至全球各地开设分公司,用以降低生产和运营成本,更好地提供本地化服务。 为了保证总部与分公司间信…

【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-07 2…

Linux.软件操作

1.yum 命令 要连网 2.systemctl 命令控制软件的启动和关闭 3.ln 创建软连接 使用cat来找本体,看看链接生不生效 4.date 命令查看系统时间 格式化的时候可以用双引号把他们引出来 -d 对时间进行修改 修改时区 自动校准 手动校准 5.ifconfig 查看本机的ip地址 6.h…

SOA主要协议和规范

Web服务作为实现SOA中服务的最主要手段。首先来了解Web Service相关的标准。它们大多以“WS-”作为名字的前缀,所以统称“WS-*”。Web服务最基本的协议包括UDDI、WSDL和SOAP,通过它们,可以提供直接而又简单的Web Service支持,如图…

《机器学习特征提取》

书籍:Building Feature Extraction with Machine Learning: Geospatial Applications 作者:Bharath.H. Aithal,Prakash P.S. 出版:CRC Press 书籍下载-《机器学习特征提取》这是一本面向专业人士和研究生的实用指南&#xff0c…

Docker|了解容器镜像层(1)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践,最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单,同时又非常强大。在今天的帖子[1]中&#xf…

PS初级|写在纸上的字怎么抠成透明背景?

前言 上一次咱们讲了很多很多很多的抠图教程,这次继续。。。最近有小伙伴问我:如果是写在纸上的字,要怎么把它抠成透明背景。 这个其实很简单,直接来说就是选择通道来抠。但有一点要注意的是,写在纸上的字&#xff0…

elementui Menu 二级菜单 min-width修改无效

原因:可能是生成的二级菜单样式里面没有带特定的hash属性 而vue代码里面样式里带了 scoped生成的样式有改样式选择器 从而无法成功选择 解决:让样式可以全局选择 不带属性选择器 单文件组件 CSS 功能 | Vue.js :global(.el-menu--vertical .el-menu--p…

【Web API DOM11】节点操作

一:DOM节点 1 什么是DOM节点 DOM树里每一个内容都称为节点 2 DOM节点分类 元素节点 属性节点:a标签的href、img标签的src等 文本节点:标签中的文字 上图为整个DOM树,每个标签、以及标签属性、文本内容构成了DOM树 二&#…

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1🐋🐋史莱姆融合(钻石;并查集) 时间限制:1秒 占用内存:128M 🐟题目描述 🐟题目思路 这道题目使用并查集,同一集合的所有元素的最顶上的祖父节点是统一的。…

[NOVATEK] NT96580行车记录仪功能学习笔记

一、u-Boot升级灯 运行u-Boot程序时LED灯闪烁,找到运行过程中一直在运行的函数在里面进行LED引脚电平的翻转 宏定义 Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\include\configs\nvt-na51055-evb.h Z:\SunFan\AHD580\pip\na51055_PIP\BSP\u-boot\drivers\mtd\nvt_flash_…

【BOM02】本地存储

一:什么是本地存储 数据存储在用户浏览器中,用户设置、读取方便,同时页面刷新时不会丢失数据。存储在浏览器中数据约5M,分为sessionStorage和localStorage两种存储方式 二:localStorage存储 作用 将数据永久存储在…

idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具

IDM 2024破解版重新开发了调度程序和MMS协议支持、重新设计和增强的下载引擎、与所有最新浏览器的独特高级集成、改进的工具栏以及大量其他改进和新功能,这一全新的更新,使得IDM下载器更加完美。值得一提的是,它可以借助油猴浏览器的脚本&…

linux系统——route路由命令

route路由对linux内的ip路由表进行操作 计算机间的数据通信是通过网络来实现的,路由就是从源主机到目标主机的转发过程 路由分为静态路由与动态路由,linux中的均为静态路由,动态路由由交换机路由器自动分配规则而来

2022 hnust 湖科大 javaweb课设 数据库课设 报告+源代码+流程图文件+课设指导书+附赠数据库课堂实验指导书

2022 hnust 湖科大 javaweb课设 数据库课设 报告源代码流程图文件课设指导书附赠数据库课堂实验指导书 描述 湖南科技大学大二下学期先后开展java web和数据库课程设计,两个课设项目可以通用,老师一般会允许自拟选题,所以在此统一打包&…

关于使用南墙waf防护halo网站主页请求404报错的解决方案

文章目录 环境说明问题展示原因探究解决方法 环境说明 在1panel应用商店,部署南墙waf(docker版)halo(2.16.1社区版)注意部署过程中注意uuwaf必须勾选允许外部访问,halo可以不勾选[这里为了证明确实是南墙waf的原因,选择勾选] 问题展示 使…

css实现文字打字机效果

html <body><p class"line animation">我和我的祖国&#xff0c;一刻也不能分割</p> </body>css <style type"text/css">html,body {height: 100%;}body {overflow: hidden;display: flex;justify-content: center;align-i…

D3D 顶点格式学习

之前D3D画三角形的代码中有这一句&#xff0c; device.VertexFormat CustomVertex.TransformedColored.Format; 这是设置顶点格式&#xff1b; 画出的三角形如下&#xff0c; 顶点格式是描述一个三维模型的顶点信息的格式&#xff1b;可以包含以下内容&#xff0c; 位置…

算法:前缀和题目练习

目录 题目一&#xff1a;一维前缀和[模版] 题目二&#xff1a;二维前缀和[模版] 题目三&#xff1a;寻找数组的中心下标 题目四&#xff1a;除自身以外数组的乘积 题目五&#xff1a;和为K的子数组 题目六&#xff1a;和可被K整除的子数组 题目七&#xff1a;连续数组 题…