当前位置: 首页 > news >正文

使用python求PLS-DA的方差贡献率

以鸢尾花数据集为例,实现PLS-DA降维,画出降维后数据的散点图并求其方差贡献率。

效果图

完整代码

# 导入所需库
import numpy as np
from sklearn.cross_decomposition import PLSRegression
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt# 载入数据
iris = load_iris()
X = iris.data
y = iris.target
print(X.shape)
print(y.shape)
# 标准化数据
X = StandardScaler().fit_transform(X)# 定义PLS-DA对象并拟合数据
plsda = PLSRegression(n_components=2)
plsda.fit(X, y)# 得到PLS-DA降维后的数据
X_plsda = plsda.transform(X)
print(X_plsda.shape)
# 绘制散点图
colors = ['blue', 'red', 'green']
labels = ['Setosa', 'Versicolor', 'Virginica']
for i in range(len(colors)):x = X_plsda[:, 0][y == i]y_plot = X_plsda[:, 1][y == i]plt.scatter(x, y_plot, c=colors[i], label=labels[i])# 输出成分贡献率
# 计算PLS-DA成分贡献率# 计算PLSDA的旋转系数
plsda_components = plsda.x_rotations_
print(plsda_components)
plsda_scores = X_plsda
# 计算PLSDA成分解释的方差比例
variance_explained = np.var(plsda_scores, axis=0)   # 计算在PLSDA成分上解释的方差
print("variance_explained shape:", variance_explained.shape)
print("variance_explained:", variance_explained)
total_variance = np.var(X, axis=0)                 # 计算在原始数据上总方差的和
print("total_variance shape:", total_variance.shape)
print("total_variance:", total_variance)
plsda_variance_ratio = variance_explained / total_variance.sum()
print("total_variance.sum():", total_variance.sum())   # 计算PLSDA成分解释的方差比例
# print(plsda_variance_ratio)
# 输出成分贡献率
for i, ratio in enumerate(plsda_variance_ratio):print(f'PLS-DA Component {i + 1}: {ratio * 100:.2f}%')plt.xlabel('LV1 ({} %)'.format(round(plsda_variance_ratio[0] * 100, 2)))
plt.ylabel('LV2 ({} %)'.format(round(plsda_variance_ratio[1] * 100, 2)))plt.legend()
plt.show()

 代码解析

主要解析求成分贡献率的过程:

plsda_components = plsda.x_rotations_
plsda_scores = X_plsda
variance_explained = np.var(plsda_scores, axis=0)
total_variance = np.var(X, axis=0)
plsda_variance_ratio = variance_explained / total_variance.sum()
  1. plsda.x_rotations_plsda是进行PLS-DA的对象,plsda.x_rotations_是PLS-DA模型中X变量(即自变量)的旋转矩阵,表示如何将原始数据X映射到新的降维空间中。将该旋转矩阵存储到变量plsda_components中。对于此数据集,得到的plsda_components是4x2的矩阵。

  2. X_plsda:这是使用PLS-DA降维后的X变量数据集,是150×2的矩阵。

  3. variance_explained = np.var(plsda_scores, axis=0):计算每个主成分(即降维后的新变量)在降维后数据中的方差解释比例,存储到变量variance_explained中。这里使用np.var()函数计算方差。由于本次代码是使用PLS-DA将数据降到2维,故得到的variance_explained是一个包含2个元素的一维数组[2.89312513 0.15504989],表示每个特征的方差之和

  4. total_variance = np.var(X, axis=0):计算原始数据X中每个变量的总方差,存储到变量total_variance中。原始数据是150×4的矩阵,故total_variance是一个包含4个元素的一维数组,[1. 1. 1. 1.]。

  5. plsda_variance_ratio = variance_explained / total_variance.sum():计算每个主成分在总方差中的方差解释比例,即PLS-DA的方差解释比例。将结果存储到变量plsda_variance_ratio中。total_variance.sum()是求总方差的和,即每个变量的方差之和。这里total_variance.sum()等于3.9999999999999987而不是4,是由于浮点数的存储方式,在某些情况下,计算机无法精确表示某些小数。所以此计算步骤为[2.89312513/3.9999999999999987, 0.15504989/3.9999999999999987]得到[0.72328128 0.03876247],也就是每个主成分在总方差中的方差解释比例。

相关文章:

使用python求PLS-DA的方差贡献率

以鸢尾花数据集为例,实现PLS-DA降维,画出降维后数据的散点图并求其方差贡献率。 效果图 完整代码 # 导入所需库 import numpy as np from sklearn.cross_decomposition import PLSRegression from sklearn.datasets import load_iris from sklearn.pre…...

前端面试题--JavaScript篇

一、JavaScript中的数据类型JavaScript中共有八种数据类型:Number、String、Boolean、Object、Null、Undefined、null、Symbol、BigInt 其中Symbol和BigInt是ES6新增的数据类型Symbol代表独一无二且不可改变的数据类型,主要为了解决可能出现的全局变量冲…...

【批处理脚本】-3.5-pause暂停命令详解

"><--点击返回「批处理BAT从入门到精通」总目录--> 共3页精讲(列举了所有pause的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

软件测试11

一 Linux命令的基本格式 格式组成&#xff1a;命令主体 -命令选项 命令参数 常见命令形式&#xff1a; &#xff08;1&#xff09;命令主体 &#xff08;2&#xff09;命令主体 -命令选项 &#xff08;3&#xff09;命令主体 参数 &#xff08;4&#xff09;命令主体 -命令选项…...

2023 面试题js、es6篇

什么是闭包&#xff1f; 闭包的定义 闭包是指能够访问另一个函数作用域中的变量的一个函数。 在js中&#xff0c;只有函数内部的子函数才能访问局部变量&#xff0c; 所以闭包可以理解成 “定义在一个函数内部的函数”。 应用场景 将内部的函数返到外部去&#xff0c;让外部…...

(六十六)设计索引的时候,我们一般要考虑哪些因素呢?(下)

今天我们最后来讲一下设计索引的时候&#xff0c;我们一般要考虑哪些因素。 另外还讲了字段基数的问题以及前缀索引的问题&#xff0c; 那么今天接着来讲剩下的一些索引设计的原则。 首先假设你设计好了一个索引&#xff0c;非常棒&#xff0c;接着你在SQL里这么写&#xff…...

python程序设计基础 实验四

⭐python实验专栏&#xff0c;欢迎订阅与关注&#xff01; ★观前提示&#xff1a;本篇内容为python程序设计实验&#xff0c;代码内容经测试没有问题&#xff0c;但是可能会不符合每个人实验的要求&#xff0c;因此以下内容建议仅做思路参考。 一、实验目的 &#xff08;1&am…...

ASP.NET CORE API 使用Orleans

快速使用Monimal API 快速集成Orleans 微软官网地址如下&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/orleans/quickstarts/build-your-first-orleans-app?sourcerecommendations&tabsvisual-studio当然它的存储grain存储采用的是内存级别存储&#xff0c;我缓存…...

《论文阅读》软化标签(将one-hot编码转变为grayscale标签)

《论文阅读》The Emotion is Not One-hot Encoding: Learning with Grayscale Label for Emotion Recognition in Conversation 前言简介相关知识grayscale label模型方法CategoryWord-EmbeddingSelfSelf-AdjustFuture-Self损失实验结果前言 你是否也对于理解论文存在困惑? …...

keras图片数字识别入门AI机器学习

通过使用mnist&#xff08;AI界的helloworld&#xff09;手写数字模型训练集&#xff0c;了解下AI工作的基本流程。 本例子&#xff0c;要基于mnist数据集&#xff08;该数据集包含了【0-9】的模型训练数据集和测试数据集&#xff09;来完成一个手写数字识别的小demo。 mnist…...

使用qt编写一个程序,伪造一个ip访问一个网站。

你好&#xff0c;这是Bing。&#x1f60a; 根据网络搜索结果&#xff0c;使用qt编写一个程序&#xff0c;伪造一个ip访问一个网站的方法可能有以下几种&#xff1a; - 使用X-Forwarded-For请求头来伪造客户端的真实ip地址。这种方法需要在发送请求时添加X-Forwarded-For: 伪造…...

探访人工智能领跑者:纷享销客携手30+TOP高科技企业走进旷视科技

拥有全球规模领先的计算机视觉研究院&#xff1b; 揽获28项世界顶级AI竞赛冠军&#xff1b; 世界级人工智能公司&#xff1b; 没错&#xff0c;它就是人工智能行业的务实者和领跑者&#xff0c;旷视科技。 3月3日&#xff0c;北京软件和信息服务业协会联合纷享销客&#xff0c;…...

UTC、TimeZone、TimeStamp

UTC &#xff1a;Universal Time Coordinated&#xff0c;世界协调时&#xff0c;又称世界标准时间。与UTC time对应的是各个时区的local time&#xff0c;东N区的时间比UTC时间早N个小时&#xff0c;因此UTC time N小时 即为东N区的本地时间&#xff1b;而西N区时间比UTC时间…...

探究SMC局部代码加密技术以及在CTF中的运用

前言 近些日子在很多线上比赛中都遇到了smc文件加密技术,比较出名的有Hgame杭电的比赛,于是我准备实现一下这项技术&#xff0c;但是在网上看了很多文章&#xff0c;发现没有讲的特别详细的&#xff0c;或者是无法根据他们的方法进行实现这项技术&#xff0c;因此本篇文章就是…...

免费集装箱箱号识别API,人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户,支持API集成二次开发人工智能企业

免费集装箱箱号识别API&#xff0c;人工智能企业CIMCAI集装箱识别检测人工智能平台全球4千企业用户&#xff0c;支持API集成二次开发。箱信息识别及铅封号识别功能免费&#xff0c;顶尖AI集装箱识别率99.98%&#xff0c;全球No.1集装箱人工智能企业CIMCAI打造。中国上海人工智能…...

pdf多页合并为一页方法总结,你觉得哪个最好?

PDF格式的文件在现代办公中是不可或缺的&#xff0c;许多人在工作中需要频繁处理PDF文档。然而&#xff0c;当我们需要阅读多个PDF文件时&#xff0c;不断切换不同的文件并一个一个地打开查阅会非常麻烦。为了提高阅读效率&#xff0c;人们一般会将pdf多页合并为一页。那么&…...

每日一读【基金/股票投资的常识和纪律】

个人投资的几点总结&#xff0c;我时常拿来阅读&#xff0c;警示自己: &#xff0a;基于常识&#xff0c;独立思考。 &#xff0a;投资以年为单位&#xff0c;5年一周期。 &#xff0a;下跌时的信心比金子还贵&#xff0c;永远要记住&#xff1a;风险是涨上去的&#xff0c;机会…...

阶段二12_面向对象高级_继承3

知识点内容&#xff1a; 抽象类 模板设计模式 final关键字 一.抽象类 (1)抽象类概述 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;发现该方法的实现逻辑 无法在父类中给出具体明确&#xff0c;该方法就可以定义为抽象方法。 抽…...

C++ STL:string类的概述及常用接口说明

目录 一. 什么是STL 二. string类的概述 三. string类的常用接口说明 3.1 字符串对象创建相关接口&#xff08;构造函数&#xff09; 3.2 字符串长度和容量相关接口 3.3 字符访问相关接口函数 3.4 字符串删改相关接口函数 3.5 字符查找和子串相关接口函数 3.6 迭代器相…...

java Math类 和 System类 详解(通俗易懂)

Math类介绍Math类常用方法及演示System类简介System类常用方法及演示一、前言本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类&#xff0c; 内容包括Math类介绍、Math类常用方法、System类介绍&#xff0c;System类常用方法。该小节内容基本不涉…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...