Python训练打卡Day22

复习日:

1.标准化数据(聚类前通常需要标准化)

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

StandardScaler() :这部分代码调用了 StandardScaler 类的构造函数。在Python中,当你在类名后面加上括号时,就相当于调用了这个类的构造函数,构造函数会创建并初始化一个新的对象。

scaler = ... :这部分代码把调用构造函数后创建的新对象赋值给变量 scaler 。之后,你就可以使用 scaler 这个变量来访问 StandardScaler 类定义的属性和方法。

2.k_range = range(2, 11)  # 测试 k 从 2 到 10:为什么不是2到11呢?

Python 里 range() 函数的特性是左闭右开区间,也就是说,它会包含起始值,但不包含结束值。

3.plt.subplot(2, 2, 2)

用 matplotlib.pyplot 模块的 subplot() 函数来创建一个子图。 subplot() 函数的参数解释如下:

- 第一个参数 2 :表示将图形窗口在垂直方向上划分为 2 行。
- 第二个参数 2 :表示将图形窗口在水平方向上划分为 2 列。
- 第三个参数 2 :表示当前要创建和操作的子图编号,编号从左到右、从上到下依次递增。在这个例子中, 2 表示选择第二个子图(即第一行的第二个位置)。

4.奇异值分解(SVD)

输入为矩阵A,尺寸为m*n,可以不是方阵,经过SVD后得到三个矩阵U\SigmaV^T

U左奇异向量矩阵: 是一个 m \times m 的正交矩阵,列向量是矩阵 $A A^T$ 的特征向量。

   - 作用:表示原始矩阵 $A$ 在行空间(样本空间)中的主方向或基向量。简单来说,$U$ 的列向量描述了数据在行维度上的“模式”或“结构”。

   - 应用:在降维中,$U$ 的前几列可以用来投影数据到低维空间,保留主要信息(如在图像处理中提取主要特征)。

\Sigma奇异值矩阵:

- 是一个 $m \times n$的对角矩阵,对角线上的值是奇异值(singular values),按降序排列,非负。

   - 作用:奇异值表示原始矩阵 $A$ 在每个主方向上的“重要性”或“能量”。较大的奇异值对应更重要的特征,较小的奇异值对应噪声或次要信息。

   - 应用:通过选择前$k$个较大的奇异值,可以实现降维,丢弃不重要的信息(如数据压缩、去噪)。

$V^T$右奇异向量矩阵的转置:

- 是$V$ 的转置,$V$是一个 $n \times n$ 的正交矩阵,列向量是矩阵 $A^T A$的特征向量。

   - 作用:表示原始矩阵 $A$ 在列空间(特征空间)中的主方向或基向量。简单来说,$V$ 的列向量描述了数据在列维度上的“模式”或“结构”。

   - 应用:类似$U$$V$ 的前几列可以用来投影数据到低维空间,提取主要特征。

        简单来说U\SigmaV^T提供了数据的核心结构信息,帮助我们在保留主要信息的同时简化数据处理。

        奇异值分解(SVD)后,原始矩阵$A$被分解为 $A = U \Sigma V^T$,这种分解是等价的,意味着通过 U\SigmaV^T 的乘积可以完全重构原始矩阵 $A$,没有任何信息损失。

        但在实际应用中,我们通常不需要保留所有的奇异值和对应的向量,而是可以通过筛选规则选择排序靠前的奇异值及其对应的向量来实现降维或数据压缩。以下是这个过程的核心思想:

1. 奇异值的排序:

   - 在 $\Sigma$ 矩阵中,奇异值(对角线上的值)是按降序排列的。靠前的奇异值通常较大,代表了数据中最重要的信息或主要变化方向;靠后的奇异值较小,代表次要信息或噪声。

   - 奇异值的大小反映了对应向量对原始矩阵 $A$ 的贡献程度。

2. 筛选规则:

   - 我们可以根据需求选择保留前$k$个奇异值($k$ 是一个小于原始矩阵秩的数),并丢弃剩余的较小奇异值。

   - 常见的筛选规则包括:

     - 固定数量:直接选择前 $k$个奇异值(例如,前 10 个)。

     - 累计方差贡献率:计算奇异值的平方(代表方差),选择累计方差贡献率达到某个阈值(如 95%)的前 $k$个奇异值。

     - 奇异值下降幅度:观察奇异值下降的“拐点”,在下降明显变缓的地方截断。

3. 降维与近似:

   - 保留前 $k$ 个奇异值后,我们只取 $U$矩阵的前 $k$列(记为 $U_k$,尺寸为 $m \times k$)、$\Sigma$ 矩阵的前 $k$个奇异值(记为 $\Sigma_k$,尺寸为 $k \times k$)、以及 $V^T$ 矩阵的前 $k$ 行(记为$V_k^T$,尺寸为 $k \times n$)。

   - 近似矩阵为 $A_k = U_k \Sigma_k V_k^T$,这个矩阵是原始矩阵 $A$ 的低秩近似,保留了主要信息,丢弃了次要信息或噪声。

   - 这种方法在降维(如主成分分析 PCA)、图像压缩、推荐系统等领域非常常用。

4. 对应的向量:

   - $U$ 的列向量和 $V$ 的列向量分别对应左右奇异向量。保留前 $k$个奇异值时,$U_k$ 的列向量代表数据在行空间中的主要方向,$V_k$ 的列向量代表数据在列空间中的主要方向。

   - 这些向量与奇异值一起,构成了数据的主要“模式”或“结构”。

总结:SVD 分解后原始矩阵是等价的,但通过筛选排序靠前的奇异值和对应的向量,我们可以实现降维,保留数据的主要信息,同时减少计算量和噪声影响。这种方法是许多降维算法(如 PCA)和数据处理技术的基础。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 设置随机种子以便结果可重复
np.random.seed(42)# 模拟数据:1000 个样本,50 个特征
n_samples = 1000
n_features = 50
X = np.random.randn(n_samples, n_features) * 10  # 随机生成特征数据
y = (X[:, 0] + X[:, 1] > 0).astype(int)  # 模拟二分类标签# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"训练集形状: {X_train.shape}")
print(f"测试集形状: {X_test.shape}")# 对训练集进行 SVD 分解
U_train, sigma_train, Vt_train = np.linalg.svd(X_train, full_matrices=False)
print(f"Vt_train 矩阵形状: {Vt_train.shape}")# 选择保留的奇异值数量 k
k = 10
Vt_k = Vt_train[:k, :]  # 保留前 k 行,形状为 (k, 50)
print(f"保留 k={k} 后的 Vt_k 矩阵形状: {Vt_k.shape}")# 降维训练集:X_train_reduced = X_train @ Vt_k.T
X_train_reduced = X_train @ Vt_k.T
print(f"降维后训练集形状: {X_train_reduced.shape}")# 使用相同的 Vt_k 对测试集进行降维:X_test_reduced = X_test @ Vt_k.T
X_test_reduced = X_test @ Vt_k.T
print(f"降维后测试集形状: {X_test_reduced.shape}")# 训练模型(以逻辑回归为例)
model = LogisticRegression(random_state=42)
model.fit(X_train_reduced, y_train)# 预测并评估
y_pred = model.predict(X_test_reduced)
accuracy = accuracy_score(y_test, y_pred)
print(f"测试集准确率: {accuracy}")# 计算训练集的近似误差(可选,仅用于评估降维效果)
X_train_approx = U_train[:, :k] @ np.diag(sigma_train[:k]) @ Vt_k
error = np.linalg.norm(X_train - X_train_approx, 'fro') / np.linalg.norm(X_train, 'fro')
print(f"训练集近似误差 (Frobenius 范数相对误差): {error}")

实际操作过程中的注意事项:

#1. 标准化数据:在进行 SVD 之前,通常需要对数据进行标准化(均值为 0,方差为 1),以避免某些特征的量纲差异对降维结果的影响。可以使用 `sklearn.preprocessing.StandardScaler`。from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)
# 注意:`scaler` 必须在训练集上 `fit`,然后对测试集只用 `transform`,以避免数据泄漏。#2. 选择合适的 k:可以通过累计方差贡献率(explained variance ratio)选择 k,通常选择解释 90%-95% 方差的 k值。代码中可以计算:explained_variance_ratio = np.cumsum(sigma_train**2) / np.sum(sigma_train**2)print(f"前 {k} 个奇异值的累计方差贡献率: {explained_variance_ratio[k-1]}")#3. 使用 sklearn 的 TruncatedSVD:`sklearn` 提供了 `TruncatedSVD` 类,专门用于高效降维,尤其适合大规模数据。它直接计算前 k个奇异值和向量,避免完整 SVD 的计算开销。from sklearn.decomposition import TruncatedSVDsvd = TruncatedSVD(n_components=k, random_state=42)X_train_reduced = svd.fit_transform(X_train)X_test_reduced = svd.transform(X_test)print(f"累计方差贡献率: {sum(svd.explained_variance_ratio_)}")

@浙大疏锦行

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

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

相关文章

气动排渣煤粉炉专用V型球阀——法兰连接耐磨阀门生产厂家解析-耀圣

气动排渣煤粉炉专用V型球阀——法兰连接耐磨阀门生产厂家解析 副标题:开关灵活无泄漏 标配行程开关/电磁阀/过滤器 一、产品概述:气动排渣煤粉炉专用V型球阀核心优势 作为专业的气动耐磨V型球阀生产厂家,我们针对煤粉炉排渣工况研发的法兰连…

Linux云计算训练营笔记day08(MySQL数据库)

Linux云计算训练营笔记day08(MySQL数据库) 目录 Linux云计算训练营笔记day08(MySQL数据库)数据准备修改更新update删除delete数据类型1.整数类型2.浮点数类型(小数)3.字符类型4.日期5.枚举: 表头的值必须在列举的值里选择拷贝表复…

致远OA人事标准模块功能简介【附应用包百度网盘下载地址,官方售价4W】

人事管理应用,围绕岗位配置、招聘管理、员工档案、入转调离、员工自助申报、数据信息管理等人力资源管理关键业务,构建全员可参与的人事工作协同平台,让人事从繁杂琐碎的事务中解脱出来,高质高效工作,让管理层清楚掌握…

数字孪生工厂实战指南:基于Unreal Engine/Omniverse的虚实同步系统开发

引言:工业元宇宙的基石技术 在智能制造2025与工业元宇宙的交汇点,数字孪生技术正重塑传统制造业。本文将手把手指导您构建基于Unreal Engine 5.4与NVIDIA Omniverse的实时数字孪生工厂系统,集成Kafka实现毫秒级虚实同步,最终交付…

【向量模型 + HNSW 参数如何选择】

目录 一、embedding_function(向量模型) 可选方式 选型建议 二、HNSW 参数选择(核心影响搜索速度与准确率) 2.1 参数解释和推荐值 2.2 配置模板参考 1、推荐默认配置(适合大多数项目): 2…

fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请

启动 注册账号:https://login.microchip.com/申请免费许可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驱动器 C 中的卷是 Windows卷的序列号是 ****-****为“D:\Microsemi\License.dat”创建环境变量“LM_LICE…

【C++】解析C++面向对象三要素:封装、继承与多态实现机制

解析C面向对象三要素:封装、继承与多态实现机制 1. 面向对象设计基石2. 封装:数据守卫者2.1 访问控制实现2.2 封装优势 3. 继承:代码复用艺术3.1 继承的核心作用3.2 继承类型对比3.3 典型应用场景3.4 构造函数与析构函数处理3.4.1 构造顺序控…

Python并发编程:开启性能优化的大门(7/10)

1.引言 在当今数字化时代,Python 已成为编程领域中一颗璀璨的明星,占据着编程语言排行榜的榜首。无论是数据科学、人工智能,还是 Web 开发、自动化脚本编写,Python 都以其简洁的语法、丰富的库和强大的功能,赢得了广大…

数学复习笔记 10

前言 我觉得数学的高分乃至满分属于那些,聪明,坚韧,勇敢,细致的人。我非常惭愧自己不是这样的人,我在生活中发现了这样的同学,和他们交流的时候我常常感到汗流浃背,因为他们非常扎实的基础知识…

深入理解 Webpack 核心机制与编译流程

🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…

概率相关问题

问题汇总 1. 贝叶斯定理(贝叶斯公式和全概率公式)2. 概率题2.1 随机发生器的概率为1/2 1. 贝叶斯定理(贝叶斯公式和全概率公式) 定义:在信息和条件有限的情况下,基于过去的数据,通过动态调整的…

【系统架构师】2025论文《WEB系统性能优化技术》

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文分享【系统架构师】2025论文《系统可靠性设计》,期待与你一同探索、学习、进步,一起卷起来叭! 目录 项目介绍背景介绍系统模块技术栈性能…

ADS1220高精度ADC(TI)——应用 源码

文章目录 德州仪器ADS1220概述资料引脚&封装布线寄存器配置寄存器0(00h)配置寄存器1(01h)配置寄存器2(02h)配置寄存器3(03h) 连续转换流程驱动源码ads1220.cads1220.h 德州仪器A…

Uniapp 安卓实现讯飞语音听写(复制即用)

在移动应用开发中,语音交互功能能够极大提升用户体验,让操作更加便捷自然。讯飞语音听写技术凭借其高准确率和稳定性,成为众多开发者的选择。本文将详细介绍如何在 Uniapp 项目中,实现安卓端的讯飞语音听写功能,帮助你…

【golang】DNS 资源记录(RR)接口

Go 中 miekg/dns 包对 DNS 资源记录(RR)接口 的定义: type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }这个接…

16.2 VDMA视频转发实验之模拟源

文章目录 1 实验任务2 系统框图3 硬件设计3.1 IP核配置3.2 注意事项3.3 自定义IP核源码 4 软件设计4.1 注意事项4.2 工程源码4.2.1 main.c文件 1 实验任务 基于14.1,相较于16.1,使用自定义IP核vid_gen_motion替换Xilinx TPG IP核。 2 系统框图 基于14…

深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理

一、模型转换准备 首先确保已完成PyTorch到ONNX的转换:深度学习之用CelebA_Spoof数据集搭建活体检测系统:模型验证与测试。这里有将PyTorch到ONNX格式的模型转换。 二、ONNX转MNN 使用MNN转换工具进行格式转换:具体的编译过程可以参考MNN的…

JVM学习专题(一)类加载器与双亲委派

目录 1、JVM加载运行全过程梳理 2、JVM Hotspot底层 3、war包、jar包如何加载 4、类加载器 我们来查看一下getLauncher: 1.我们先查看getExtClassLoader() 2、再来看看getAppClassLoader(extcl) 5、双亲委派机制 1.职责明确,路径隔离​&#xff…

部署安装gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm

目录 ​编辑 实验环境 所需软件 实验开始 安装部署gitlab171.配置清华源仓库(版本高的系统无需做)vim /etc/yum.repos.d/gitlab-ce.repo 2.提前下载包dnf localinstall gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm --rocklinux 3.修改配…

使用LoRA微调Qwen2.5-VL-7B-Instruct完成电气主接线图识别

使用LoRA微调Qwen2.5-VL-7B-Instruct完成电气主接线图识别 动机 任务适配需求 Qwen2.5-VL在视觉理解方面表现优异,但电气主接线图识别需要特定领域的结构化输出能力(如设备参数提取、拓扑关系解析)。微调可增强模型对专业符号(如…