news 2026/4/18 15:56:10

Day 24 奇异值分解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 24 奇异值分解

@浙大疏锦行
作业:

import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from sklearn.preprocessing import StandardScaler # 真实数据需标准化(SVD对尺度敏感) # 设置随机种子以便结果可重复 np.random.seed(42) # ----------------------1. 加载并预处理心脏病数据集---------------------- # 读取心脏病数据集(使用指定路径,r字符串避免转义) df = pd.read_csv(r"D:\PYTHONSTUDY\python60-days-challenge-master\heart.csv") # 分离特征(X)和目标变量(y):共303个样本,13个医学特征,目标为疾病状态(0=健康,1=患病) X = df.drop("target", axis=1).values y = df["target"].values # 标准化特征(SVD对数据尺度敏感,避免某一特征主导分解结果) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # ----------------------2. 划分训练集和测试集---------------------- X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.2, random_state=42 ) print(f"训练集形状: {X_train.shape}") # 输出:(242, 13)(242个样本,13个特征) print(f"测试集形状: {X_test.shape}") # 输出:(61, 13)(61个样本,13个特征) # ----------------------3. 对训练集进行SVD分解(降维核心)---------------------- U_train, sigma_train, Vt_train = np.linalg.svd(X_train, full_matrices=False) print(f"Vt_train 矩阵形状: {Vt_train.shape}") # 输出:(13, 13)(13个特征的正交基) # 选择保留的奇异值数量k:基于前期分析,k=7可保留73.5%数据信息 k = 7 Vt_k = Vt_train[:k, :] # 保留前k行(前7个主成分的基向量) print(f"保留 k={k} 后的 Vt_k 矩阵形状: {Vt_k.shape}") # 输出:(7, 13) # ----------------------4. 用训练集的SVD结果对训练/测试集降维---------------------- # 训练集降维:(242,13) @ (13,7) → (242,7) X_train_reduced = X_train @ Vt_k.T print(f"降维后训练集形状: {X_train_reduced.shape}") # 输出:(242, 7) # 测试集降维(必须用训练集的Vt_k,保证降维规则一致):(61,13) @ (13,7) → (61,7) X_test_reduced = X_test @ Vt_k.T print(f"降维后测试集形状: {X_test_reduced.shape}") # 输出:(61, 7) # ----------------------5. 训练逻辑回归模型并评估---------------------- model = LogisticRegression(random_state=42, max_iter=200) # 增加迭代次数适配真实数据 model.fit(X_train_reduced, y_train) # 测试集预测与准确率计算 y_pred = model.predict(X_test_reduced) accuracy = accuracy_score(y_test, y_pred) print(f"测试集准确率: {accuracy:.4f}") # 真实数据通常准确率在80%-90%区间 # ----------------------6. 计算训练集近似误差(评估降维效果)---------------------- 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:.4f}") # 约0.51(保留73.5%信息)

从结果来看,本次基于心脏病数据集的 SVD 降维与模型训练效果表现优异:先是将 13 维的原始医学特征压缩至 7 维,在实现约 46% 维度压缩的同时保留了 73.53% 的核心数据信息,对应的重构相对误差(约 51.45%)处于合理范围,降维兼顾了效率与信息完整性;而基于降维特征训练的逻辑回归模型,在测试集上达到了 88.52% 的准确率,这一成绩在心脏病预测任务中属于优秀水平,说明降维后的特征仍有效保留了区分健康 / 患病状态的关键信息,整体实现了 “维度简化” 与 “模型性能” 的良好平衡。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:30:30

PlugY完全指南:解锁暗黑破坏神2单机模式终极体验

PlugY完全指南:解锁暗黑破坏神2单机模式终极体验 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的种种限制而困扰吗&#xff…

作者头像 李华
网站建设 2026/4/18 3:15:20

RISC-V指令集在SiFive平台的内存管理单元全面讲解

RISC-V的“虚拟内存引擎”:SiFive平台MMU深度拆解你有没有想过,为什么你的嵌入式程序不会误读操作系统的内核数据?为什么多个进程可以同时使用同一个虚拟地址(比如0x10000)却互不干扰?答案藏在一个不起眼但…

作者头像 李华
网站建设 2026/4/18 3:14:57

Visual C++运行库缺失问题的终极解决方案

你是不是经常遇到这种情况:刚下载的软件打不开,提示"无法找到指定模块"?或者系统重装后,原本能用的程序突然无法运行了?别担心,这些问题很可能是Visual C运行库缺失造成的! 【免费下载…

作者头像 李华
网站建设 2026/4/18 3:13:03

硬件钱包怎么选?Ledger、OneKey 与 UKey Wallet 的差异解析

硬件钱包怎么选?Ledger、OneKey 与 UKey Wallet 的差异解析随着“硬件钱包”成为越来越多用户主动搜索的关键词,市场上的讨论也逐渐从“要不要买”,转向了“该怎么选”。在这些讨论中,Ledger、OneKey 和 UKey Wallet 经常被同时提到,看似是在做品牌对比,实际上反映的是用户需求…

作者头像 李华
网站建设 2026/4/18 3:16:12

2025云电脑性价比之战:低于10ms延迟,每小时不到0.7元的高配体验

随着云游戏技术的飞速发展与普及,云电脑已成为玩家无需昂贵硬件便能畅享3A大作的热门方案。然而面对市面上琳琅满目的服务与宣传,消费者往往难以判断:哪家延迟最低?性能最强?价格最实在?本次测评聚焦于十款…

作者头像 李华
网站建设 2026/4/18 3:16:13

PyTorch-CUDA-v2.9镜像如何申请教育优惠资格?

PyTorch-CUDA-v2.9镜像如何申请教育优惠资格? 在人工智能教学与科研一线,我们常遇到这样的场景:学生抱着轻薄本走进实验室,满怀期待地打开Jupyter Notebook,准备跑通人生第一个CNN模型,结果torch.cuda.is_a…

作者头像 李华