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

news2024/11/16 16:54:41

以鸢尾花数据集为例,实现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],也就是每个主成分在总方差中的方差解释比例。

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

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

相关文章

synchronized原理mointor

Monitor对象头 在java中普通对象的对象头信息 Mark Word记录分代年龄、加锁的状态;Klass Word指向类对象的指针; 其中Mark Word结构 monitor执行原理 我们在加了重量级锁synchronize后,对象头的mark word会指向一个monitor,mon…

pandas库中的read_csv函数读取数据时候的路径问题详解(ValueError: embedded null character)

read_csv()函数不仅是R语言中的一个读取csv文件的函数,也是pandas库中的一个函数。pandas是一个用于数据分析和处理的python库。它的read_csv函数可以读取csv文件里的数据,并将其转化为pandas里面的DataFrame对象。它由很多参数可以设置,例如…

Express的详细教程

Express 文章目录Express初识ExpressExpress简介Express的基本使用安装创建基本的web服务器监听GET请求监听POST请求把内容响应给客户端获取URL中携带的查询参数获取URL中的动态参数托管静态资源express.static()托管多个静态资源挂载路径前缀nodemon为什么要使用nodemon安装no…

【专项训练】动态规划-1

动态规划 以上,并没有什么本质的不一样,很多时候,就是一些小的细节问题! 要循环,要递归,就是有重复性! 动态规划:动态递推 分治 + 最优子结构 会定义状态,把状态定义对 斐波那契数列 递归、记忆化搜索,比较符合人脑思维 递推:直接开始写for循环,开始递推 这里…

mysql无法启动服务及其他问题总结

文章目录1.安装后关于配置的问题显示【发生系统错误,拒绝访问】命令行Command Line Client闪退2.显示【MySQL服务无法启动】问题检查端口被占用删除data文件并初始化配置my.ini/.conf文件重新安装MySQL1.安装后关于配置的问题 显示【发生系统错误,拒绝访…

Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)

漏洞描述 Apache Dubbo 是一款轻量级 Java RPC 框架 该项目受影响版本存在反序列化漏洞,由于Dubbo在序列化时检查不够全面,当攻击者可访问到dubbo服务时,可通过构造恶意请求绕过检查触发反序列化,执行恶意代码 漏洞名称Apache …

【Linux】 -- make/Makefile

目录 Linux项目自动化构建工具 – make/Makefile 背景 依赖关系和依赖方法 多文件编译 项目清理 make原理 Linux项目自动化构建工具 – make/Makefile 背景 一个工程的源文件不计其数 按照其类型、功能、模块分别放在若干个目录当中 Makefile定义了一系列的规则来指定&…

DJ1-3 计算机网络和因特网

目录 一、物理介质 1. 双绞线 2. 同轴电缆 3. 光纤线缆 4. 无线电磁波 二、端系统上的 Internet 服务 1. 面向连接的服务 TCP(Transmission Control Protocol) 2. 无连接的服务 UDP(User Datagram Protocol) TCP 和 UD…

TypeScript(四)接口

目录 前言 定义 用法 基本用法 约定规则 属性控制 任意属性 可选属性 只读属性 定义函数 冒号定义 箭头定义 接口类型 函数接口 索引接口 继承接口 类接口 总结 前言 在介绍TS对象类型中,为了让数组每一项更具体,我们使用 string [ ]…

C++面向对象编程之四:成员变量和成员函数分开存储、this指针、const修饰成员和对象

在C中&#xff0c;成员变量和成员函数是分开存储的&#xff0c;只有非静态成员变量才存储在类中或类的对象上。通过该类创建的所有对象都共享同一个函数#include <iostream> using namespace std;class Monster {public://成员函数不占对象空间&#xff0c;所有对象共享同…

数据库基本功之复杂查询的子查询

子查询返回的值可以被外部查询使用,这样的复合查询等效与执行两个连续的查询. 1. 单行单列子查询 (>,<,,<>,>,<)内部SELECT子句只返回一行结果 2.多行单列子查询 (all, any, in,not in) all (>大于最大的,<小于最小的) SQL> select ename, sal from…

Linux创建并挂载NAS

1 目标 在Linux服务器1上创建nas服务器&#xff0c;并指定可读写目录在Linux服务器2上挂载上述nas磁盘在Linux服务器2上设置开机自动挂载nas磁盘 2 搭建环境 两台Linux系统服务器&#xff0c;如下&#xff1a; 服务器1 IP为192.168.31.101 服务器2 IP为192.168.31.102 3 在服…

自动化测试——selenium多浏览器处理

这里写目录标题一、背景二、pytes hook函数1、conftest.py2、测试用例3、执行测试用例一、背景 用户使用的浏览器(frefox,chrome,IE 等) web应用应该能在任何浏览器上正常的工作&#xff0c;这样能吸引更多的用户来使用。 是跨不同浏览器组合验证网站或web应用程序功能的过程 …

Python高频面试题——生成器(最通俗的讲解)

生成器定义在 Python 中&#xff0c;使用了 yield 的函数被称为生成器&#xff08;generator&#xff09;。跟普通函数不同的是&#xff0c;生成器是一个返回迭代器的函数&#xff0c;只能用于迭代操作&#xff0c;更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中…

Ubuntu系统开机自动挂载NTFS硬盘【超实用】

由于跑深度学习实验(图像分割)f非常消耗内存&#xff0c;系统盘sda1内存小&#xff0c;配置了一个大容量得出NTFS机械盘&#xff0c;网上招了一些资料如何挂在&#xff0c;但是每次开机得手动挂载一遍才能使用硬盘&#xff0c;非常不方便&#xff0c;还容易造成数据丢失。 Step…

Elasticsearch使用系列-ES增删查改基本操作+ik分词

一、安装可视化工具KibanaES是一个NoSql数据库应用。和其他数据库一样&#xff0c;我们为了方便操作查看它&#xff0c;需要安装一个可视化工具 Kibana。官网&#xff1a;https://www.elastic.co/cn/downloads/kibana和前面安装ES一样&#xff0c;选中对应的环境下载&#xff0…

如何通过C++ 将数据写入 Excel 工作表

直观的界面、出色的计算功能和图表工具&#xff0c;使Excel成为了最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少&#xff0c;而过多的数据又难以理清头绪时&#xff0c;制作成表格是数据管理的最有效手段之一。这样不仅可以方便整理数据&#xff0c;还可以方便…

【Python】tqdm 模块

import mathfrom tqdm import tqdm, trange# 计算阶乘 results_1 []for i in range(6666):results_1.append(math.factorial(i))这是一个循环计算阶乘的程序&#xff0c;我们不知道程序运行的具体情况&#xff0c;如果能加上一个程序运行过程的进度条&#xff0c;那可就太有趣…

REG.EXE修改注册表-解决win10微软输入法默认中文,将其全局修改为英文

REG.EXE修改注册表-解决win10微软输入法默认中文&#xff0c;将其全局修改为英文 使用REG.EXE 可以直接强制修改注册表字段 修改注册表&#xff1a; REG.EXE ADD 注册表路径 /v 注册表项字段 /t 注册表字段类型 /d 注册表值 /f 例如&#xff1a; REG. EX ADD HKLM\System\C…

Activiti7

文章目录Activiti官网一、BPM二、BPM软件三、BPMN四、Activiti使用步骤1、部署activiti2、流程定义3、流程定义部署4、启动一个流程实例5、用户查询待办任务(Task)6、用户办理任务7、流程结束五、Activiti环境准备1、下载扩展程序camunda-modeler2、配置idea扩展程序&#xff1…