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

目录

  • 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完整笔记

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数仓建模—指标拆解和选取

数仓建模—指标拆解和选取 第一节指标体系初识介绍了什么是指标体系 第二节指标体系分类分级和评价管理介绍了指标体系管理相关的,也就是指标体系的分级分类 这一节我们看一下指标体系的拆解和指标选取,这里我们先说指标选取,其实在整个企业的数字化建设过程中我们其实最…

一条sql的执行流程

文章地址 https://blog.csdn.net/qq_43618881/article/details/118657040 连接器 请求先走到连接器,与客户端建立连接、获取权限、维持和管理连接 mysql缓存池 如果要查找的数据直接在mysql缓存池里面就直接返回数据 分析器 请求已经建立了连接,现在…

Spark Streaming 概述及入门案例

一、介绍 1. 不同的数据处理 从数据处理的方式: 流式数据处理(Streaming)批量数据处理(Batch) 从数据处理的延迟: 实时数据处理(毫秒级别)离线数据处理(小时或天级别) 2. 简介 SparkStreaming 是一个准实时(秒或分钟级别)、微批量的数据处理框架Spa…

代码随想录算法训练营第28天(py)| 回溯 | 93.复原IP地址、78.子集、90.子集II

93.复原IP地址 力扣链接 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的IP地址不能含有前导0,共有4个字段,且每个字段不能超过255 思路 class Solution:def restoreIpAddresses(self, s: str) -> List[str]:r…

异或炸弹(easy)(牛客小白月赛95)

题目链接: D-异或炸弹(easy)_牛客小白月赛95 (nowcoder.com) 题目: 题目分析: 一看 还以为是二维差分的题呢 到后来才发现是一维差分问题 这里的距离是 曼哈顿距离 dis abs(x - xi) abs(y - yi) 暴力的做法 就是枚举 n * n 个…

NFC隐藏功能大公开:乘车刷门禁,NFC实用无风险

手机到底集成了多少功能?如今恐怕已经没有人能数的清了。但是你又用到了多少呢?有些功能是不是就从来没打开过呢?花了全款却只用功能的百分之一,是不是感觉很不划算呢? 费流量、占内存、费电通常是用户浪费手机功能的…

SG7050CCN CMOS输出石英晶体振荡器适用于防盗防灾装置

爱普生晶振SG7050CCN是一款额定频率范围2.5MHz至50MHz的石英晶体振荡器(SPXO),支持CMOS输出,具有小尺寸7.0x5.0mm四脚贴片晶振,体积小巧,高稳定性,其中爱普生的一款额定频率16.000MHz,/-50ppm晶振,7050封装常规有源晶振…

大量单号中如何分析出异常单号

什么情况下单号算异常单号呢,首先根据单号物流信息过程轨迹判断哦,比如某个单号已显示快递公司已揽收了,超过24或36、48甚至更长时间也没有看到走件信息哦,一般这类单号也叫揽收后无走信息,这类单号就只能一条揽收信息…

【智能体】文心智能体大赛第二季持续进行中,一起在智能体的海洋里发挥你的创意吧

目录 背景作文小助手AI迅哥问答程序员黄历助手比赛时间第二期赛题丰厚奖品评选说明获奖智能体推荐文章 背景 AI应用(智能体),持续火热,一句话就能创建一个有趣、好玩的应用。 可以说一分钟内就能创建一个有创意的智能体。 看大多…

【第十课】空间数据基础与处理——空间范围处理

一、前言 在利用Arcgis分析中通常会研究我国局部地区的发展,如长江中游城市群、 某个省、长江经济带等,在对这类区域进行可视化时,经常会需要一幅局部地图,通常这种局部地图是很难直接获取的,需要通过一定的方法进行处…

2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)

2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024) 2024 International Academic Conference on Cloud Computing, Signal Processing, and Network Technology(ICCCSPNT 2024) 会议简介: 2024年云计算、…

cesium Material的理解与使用

1.简介 材质Material可以是比较简单的,比如直接将一张图片赋予表面,或者使用条纹状、棋盘状的图案;也可以使用Fabric和GLSL,重新创建一个新的材质或者组合现有的材质。例如,我们可以通过程序生成的纹理(procedural bri…

【leetcode--盛水最多的容器】

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 写出来了一半,想到用双指针&am…

高精度滚珠丝杆在自动化生产中的关键因素!

如今,自动化技术正以前所未有的速度改变着人们的生活和工作方式,特别是在高精度精密设备的制造与应用领域,提高生产效率和优化生产流程正变得越来越重要。在自动化生产中,滚珠丝杆的优化应用对于提高生产效率、保证产品质量至关重…

【OCPP】ocpp1.6协议第4.3章节DataTransfer的介绍及翻译

目录 4.3、DataTransfer-概述 DataTransfer 消息 数据传输请求(DataTransfer Request) 数据传输响应(DataTransfer Response) 使用场景 示例 DataTransfer 请求示例 处理 DataTransfer 响应 示例代码 可能的错误处理 总…

Java1.8语言+ springboot +mysql + Thymeleaf 全套家政上门服务平台app小程序源码

Java1.8语言 springboot mysql Thymeleaf 全套家政上门服务平台app小程序源码 家政系统是一套可以提供上门家政、上门维修、上门洗车、上门搬家等服务为一体的家政平台解决方案。它能够与微信对接、拥有用户端小程序,并提供师傅端app,可以帮助创业者在…

AutoCutVideo自动剪辑软件

随着视频内容创作的普及,找到一款既高效又便捷的视频剪辑工具成为了创作者的迫切需求。在众多选择中,AutoCutVideo以其杰出的功能脱颖而出,提供了一个无与伦比的视频编辑解决方案。这款软件不仅能够支持多样化的视频格式导入,其直…

C#上位机开发

目录 一、上位机简介二、C#语法三、新建VS工程四、WinForm控件4.1 属性4.2 事件4.3 窗体方法4.4 常用控件4.5 布局 五、Serial上位机六、项目打包成安装包6.1 前提准备6.2 打包步骤 一、上位机简介 在单片机项目开发中,上位机也是一个很重要的部分,主要用…

【游戏】Goc赚钱模拟器

Hello!大家好,我是学霸小羊,今天分享一个Goc游戏。 //注:以下代码为Goc原创代码。 大家可以在下面网址写入代码www.51goc.com慧通教育http://www.51goc.com注:Goc编辑器路径: www.51goc.com ➡ 登录 ➡ 游客登陆 ➡…

⌈ 传知代码 ⌋ 微表情识别系统

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…