Python训练打卡Day22

news2025/5/16 18:26:55

复习日:

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 StandardScaler
   scaler = 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 TruncatedSVD
   svd = 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.coloradmin.cn/o/2377064.html

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

相关文章

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise论文阅读

冷扩散:无需噪声的任意图像变换反转 摘要 标准扩散模型通常涉及两个核心步骤:图像降质 (添加高斯噪声)和图像恢复 (去噪操作)。本文发现,扩散模型的生成能力并不强烈依赖于噪声的选择&#xf…

嵌软面试每日一阅----通信协议篇(二)之TCP

一. TCP和UDP的区别 可靠性 TCP:✅ 可靠传输(三次握手 重传机制) UDP:❌ 不可靠(可能丢包) 连接方式 TCP:面向连接(需建立/断开连接) UDP:无连接&#xff0…

机器学习 --- 模型选择与调优

机器学习 — 模型选择与调优 文章目录 机器学习 --- 模型选择与调优一,交叉验证1.1 保留交叉验证HoldOut1.2 K-折交叉验证(K-fold)1.3 分层k-折交叉验证Stratified k-fold 二,超参数搜索三,鸢尾花数据集示例四,现实世界数据集示例…

AGI大模型(15):向量检索之调用ollama向量数据库

这里介绍将向量模型下载到本地,这里使用ollama,现在本地安装ollama,这里就不过多结束了。直接从下载开始。 1 下载模型 首先搜索模型,这里使用bge-large模型,你可以根据自己的需要修改。 点击进入,复制命令到命令行工具中执行。 安装后查看: 2 代码实现 先下载ollama…

什么是Agentic AI(代理型人工智能)?

什么是Agentic AI(代理型人工智能)? 一、概述 Agentic AI(代理型人工智能)是一类具备自主决策、目标导向性与持续行动能力的人工智能系统。与传统AI系统依赖外部输入和显式命令不同,Agentic AI在设定目标…

day 17 无监督学习之聚类算法

一、聚类流程 1. 利用聚类发现数据模式 无监督算法中的聚类,目的就是将数据点划分成不同的组或 “簇”,使得同一簇内的数据点相似度较高,而不同簇的数据点相似度较低,从而发现数据中隐藏的模式。 2. 对聚类后的类别特征进行可视…

时源芯微| KY键盘接口静电浪涌防护方案

KY键盘接口静电浪涌防护方案通过集成ESD保护元件、电阻和连接键,形成了一道有效的防护屏障。当键盘接口受到静电放电或其他浪涌冲击时,该方案能够迅速将过电压和过电流引导至地,从而保护后续电路免受损害。 ESD保护元件是方案中的核心部分&a…

CodeBuddy编程新范式

不会写?不想写? 腾讯推出的CodeBuddy彻底解放双手。 示例 以下是我对CodeBuddy的一个小体验。 我只用一行文字对CodeBuddy说明了一下我的需求,剩下的全部就交给了CodeBuddy,我需要做的就是验收结果即可。 1.首先CodeBuddy会对任…

小刚说C语言刷题—1088求两个数M和N的最大公约数

1.题目描述 求两个正整数 M 和 N 的最大公约数(M&#xff0c;N都在长整型范围内&#xff09; .输入 输入一行&#xff0c;包括两个正整数。 输出 输出只有一行&#xff0c;包括1个正整数。 样例 输入 45 60 输出 15 2.参考代码(C语言版) #include <stdio.h> …

【LLIE专题】基于码本先验与生成式归一化流的低光照图像增强新方法

GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval&#xff08;2024&#xff0c;ECCV&#xff09; 专题介绍一、研究背景二、GLARE方法阶段一&#xff1a;正常光照代码本学习&#xff08;Normal-Light Codebook Learning&#xff09…

[MySQL数据库] SQL优化

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

网络编程epoll和udp

# epoll模型核心要点## 1. epoll核心概念### 1.1 高效IO多路复用- 监视列表与激活列表分离- 内核使用红黑树存储描述符- 边缘触发模式(EPOLLET)支持### 1.2 事件触发机制- **水平触发(LT)**&#xff1a;- 默认模式&#xff0c;类似select/poll- 数据未读完持续触发事件- **边缘…

【iOS】源码阅读(四)——isa与类关联的原理

文章目录 前言OC对象本质探索clang探索对象本质objc_setProperty源码探索 cls与类的关联原理为什么说bits与cls为互斥关系isa的类型isa_t原理探索isa与类的关联 总结 前言 本篇文章主要是笔者在学习和理解类与isa的关联关系时所写的笔记。 OC对象本质探索 在学习和理解类与isa…

uniapp 常用 UI 组件库

1. uView UI 特点&#xff1a; 组件丰富&#xff1a;提供覆盖按钮、表单、图标、表格、导航、图表等场景的内置组件。跨平台支持&#xff1a;兼容 App、H5、小程序等多端。高度可定制&#xff1a;支持主题定制&#xff0c;组件样式灵活。实用工具类&#xff1a;提供时间、数组操…

SCI写作开挂!把Grammarly语法修订嵌入word

详细分享如何把Grammarly嵌入Word&#xff0c;实现英文写作时的实时语法校改。 ①进入Grammarly官网 ②点击右上角的“Get Grammarly Its free”会直接跳转到注册或者登录界面&#xff0c;如果还没有账号先注册。 ③注册或登录后进入这个页面&#xff0c;点击“Support”。 ④…

2025年5月-信息系统项目管理师高级-软考高项-成本计算题

成本计算题挣值分析、成本计算题如何学?1、PV&#xff0c;EV&#xff0c;AC需要理解&#xff0c;根据题目给出的一些个条件需要求得这些值;2、CV&#xff0c;SV&#xff0c;CPI&#xff0c;SPI公式必须记住&#xff0c;需要根据求得的值判断项目的进度和成本的执行情况&#x…

SpringBoot中的Lombok库

一&#xff09;Lombok库简介 Lombok是一个Java库&#xff0c;通过注解的方式简化代码编写&#xff0c;减少样板代码。它能够自动生成getter、setter、构造函数、toString等方法&#xff0c;提升开发效率。Lombok只是一个编译阶段的库&#xff0c;因此不会影响程序的运行。 二…

AI中的MCP是什么?MCP的作用及未来方向预测 (使用go-zero 快速搭建MCP服务器)

AI是当下最热的风。在当今AI技术飞速发展的时代&#xff0c;AI的应用已经渗透到我们日常生活的方方面面。然而&#xff0c;随着AI系统的复杂性不断增加&#xff0c;如何让AI具备更强的自主性和灵活性成为了业界关注的焦点。这就引出了Model Context Protocol&#xff08;MCP&am…

mac安装cast

背景 pycharm本地运行脚本时提示cast没有安装 问题原因 脚本尝试调用cast命令&#xff08;以太坊开发工具foundry中的子命令&#xff09;&#xff0c;但您的系统未安装该工具。 从日志可见&#xff0c;错误发生在通过sysutil.py执行shell命令时。 解决方案 方法1&#xf…

一个简单点的js的h5页面实现地铁快跑的小游戏

以下是一个简化版的"地铁快跑"小游戏H5页面实现。这个游戏包含基本的角色跳跃、障碍物生成和计分系统&#xff0c;使用Canvas绘图技术实现。 完整源码 登录后复制 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-…