svd分解

news2024/10/4 19:47:36

 sklearn中svd分解

class sklearn.decomposition.TruncatedSVD(n_components=2, *, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)

参数:

n_components整数,默认=2

输出数据的所需维度。必须严格小于特征数。默认值对可视化很有用。对于 LSA,建议值为 100。

algorithm{‘arpack’, ‘randomized’},默认='随机'

要使用的 SVD 求解器。 “arpack” 用于 SciPy (scipy.sparse.linalg.svds) 中的 ARPACK 包装器,或 “randomized” 用于 Halko (2009) 中的随机算法。

n_iter整数,默认=5

随机 SVD 求解器的迭代次数。 ARPACK 不使用。默认值大于 randomized_svd 中的默认值,以处理可能具有大的缓慢衰减频谱的稀疏矩阵。

random_stateint,RandomState 实例或无,默认=无

在随机 svd 期间使用。传递一个 int 以获得跨多个函数调用的可重现结果。请参阅词汇表。

tol浮点数,默认=0.0

ARPACK 的容差。 0 表示机器精度。被随机 SVD 求解器忽略。

属性:

components_ndarray 形状(n_components,n_features)

输入数据的右奇异向量。

explained_variance_ndarray 形状 (n_components,)

通过投影变换到每个分量的训练样本的方差。

explained_variance_ratio_ndarray 形状 (n_components,)

每个选定组件解释的方差百分比。

singular_values_ndarray od 形状(n_components,)

对应于每个选定组件的奇异值。奇异值等于 lower-dimensional 空间中 n_components 变量的 2 范数。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

方法

fit(X[, y])

Fit model on training data X.(在训练数据上拟合模型x)

fit_transform(X[, y])

Fit model to X and perform dimensionality reduction on X.

get_feature_names_out([input_features])

Get output feature names for transformation.(获取转换的输出特征名称)

get_params([deep])

Get parameters for this estimator.(获取此估算器的参数)

inverse_transform(X)

Transform X back to its original space.(将X转换回原始空间)

set_params(**params)

Set the parameters of this estimator.

transform(X)

Perform dimensionality reduction on X.

from sklearn.decomposition import TruncatedSVD
from scipy.sparse import csr_matrix
import numpy as np
np.random.seed(0)

X_dense = np.random.rand(10, 10)
X_dense[:, 2 * np.arange(5)] = 0

X = csr_matrix(X_dense)
print('稀疏矩阵\n',X)
#定义svd模型
svd = TruncatedSVD(n_components=3, n_iter=7, random_state=42)
#训练模型
svd.fit(X)

print('所选特征方差百分比',svd.explained_variance_ratio_)
print('方差百分比',svd.explained_variance_ratio_.sum())
print('每个特征的奇异值',svd.singular_values_)
print('模型的参数',svd.get_params(deep=True))
x=np.random.rand(1, 10)
print('之前的数据',x)
print('转换后的数据',svd.transform(x))

from sklearn.decomposition import TruncatedSVD
from scipy.sparse import random as r
import numpy as np
# 假设数据是5*10的
x=np.random.randint(1,10,size=[5,10])
# print("原始数据\n",x)
print('原始数据维度',x.shape)

svd=TruncatedSVD(n_components=5)
svd.fit(x)
new_x=svd.transform(x)
print('新的数据维度',new_x.shape)

# 手工降维,right即为svd分解后的右矩阵
right=svd.components_
print(right.shape)
# 计算
print('手工降维',np.dot(x,right[:,:].T))

# sklearn可以直接复原
print(svd.inverse_transform(new_x))

使用numpy进行降维和复原

import numpy as np
# 假设数据是5*10的
x=np.random.randint(1,10,size=[5,10])
# print("原始数据\n",x)
print('原始数据维度',x.shape)

# 可以得到三个矩阵
u,s,v=np.linalg.svd(x)
print("u,s,v的形状:")
print("u:",u.shape)
print("s:",s.shape)
print("v:",v.shape)

降维,利用x,v实现降维

import numpy as np
# 假设数据是5*10的
x=np.random.randint(1,10,size=[5,10])
# print("原始数据\n",x)
print('原始数据维度',x.shape)

# 可以得到三个矩阵
u,s,v=np.linalg.svd(x)
print("u,s,v的形状:")
print("u:",u.shape)
print("s:",s.shape)
print("v:",v.shape)

# 降维结果与sklearn基本一致,假设降维到n_com=5
print(np.dot(x,v[:5,:].T))

利用u,s,v复原

import numpy as np
# 假设数据是5*10的
x=np.random.randint(1,10,size=[5,10])
print("原始数据\n",x)
print('原始数据维度',x.shape)

# 可以得到三个矩阵
u,s,v=np.linalg.svd(x)
print("u,s,v的形状:")
print("u:",u.shape)
print("s:",s.shape)
print("v:",v.shape)

# 降维结果与sklearn基本一致,假设降维到n_com=5
print(np.dot(x,v[:5,:].T))

# m为原始行数,n为原始列数
m = 5
n = 10
# 将u、v、s三个矩阵进行运算,将结果累加到a中并返回
a = np.zeros([m, n])

for i in range(0,5):
    # 依次取出u和v矩阵的对应数据,并reshape
    ui = u[:, i].reshape(m, 1)
    vi = v[i].reshape(1, n)
    # 将其按照s的权重进行累加
    a += s[i] * np.dot(ui, vi)
# 结果与原始数据基本一致
print(a)

参考文献

用截断奇异值分解(Truncated SVD)降维_纸上得来终觉浅~的博客-CSDN博客_截断奇异值分解

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

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

相关文章

Git 操作 Gitea 出现 kex_exchange_identification: Connection closed by remote host

1. 问题背景 我的部分代码储存在使用 Gitea 搭建的服务上: DevWiki - 首页 - DevWiki Gitea 之前都是使用网页在网站上进行 仓库管理, 今天在clone代码的时候出现异常: kex_exchange_identification: Connection closed by remote host, 具体以下提示: $ git clone gitgit.d…

【案例分享】跨机房ES同步实战

背景 众所周知单个机房在出现不可抗拒的问题(如断电、断网等因素)时,会导致无法正常提供服务,会对业务造成潜在的损失。所以在协同办公领域,一种可以基于同城或异地多活机制的高可用设计,在保障数据一致性…

微软CTO谈AI:逃不掉马拉松就准备好跑鞋!30秒自动化妆机;ChatGPT刷爆票圈;剪纸风格的AI绘画 | ShowMeAI资讯日报

👀日报合辑 | 🎡AI应用与工具大全 | 🔔公众号资料下载 | 🍩韩信子 📢 对话微软 CTO 凯文斯科特 (Kevin Scott):人工智能将去向何方? https://blogs.microsoft.com/ai/a-conversation-with-kevi…

【卡塔尔世界杯】空调制冷,全是科技与狠活

半自动化越位技术比赛用球AI Rihla球场智能空调Feelix Palm辅助技术可持续利用的体育场便利的数字设施和App 西班牙队和英格兰队穿外套出场,卡塔尔的空调功率到底有多大? 还是很大的,不管是室外还是室内,到处都安装了空调&#…

Verilog系统函数

Verilog系统函数前言一、$width(一)简介(二)$width 参数(三)例子二、Specify参数三、$display(一)简介(二)格式说明(三)例子1.例12.例…

Bert论文解读及相关代码实践

Bert:Bidirectional Encoder Representations from Transformers Transformer中双向Encoder表达学习。BERT被设计为通过在所有层中对左右上下文进行联合调节,从未标记文本中预训练深度双向表示。预训练的BERT模型可以通过仅一个额外的输出层进行微调&am…

AVS-试听分割-论文阅读

题目: Audio-Visual Segmentation 论文地址:https://arxiv.org/abs/2207.05042 GitHub地址:https://github.com/OpenNLPLab/AVSBench 项目主页:https://opennlplab.github.io/AVSBench/ 相关博客https://arxiv.org/abs/2203.03821 摘要 We propose to explore a new pro…

(附源码)ssm汽车租赁 毕业设计 271621

基于ssm的汽车租赁平台的设计与实现 摘 要 随着社会经济的快速发展,我国机动车保有量大幅增加,城市交通问题日益严重。为缓解用户停车难问题,本文设计并实现了汽车租赁平台.该系统通过错峰停车达到车位利用率最大化.基于现状分析,本文结合实际停车问题,从系统应用流程,系统软硬…

微电网和直流电网中最优潮流(OPF)的凸优化(Matlab代码实现)

📋📋📋本文目录如下:⛳️⛳️⛳️ 目录 1 概述 2 最优潮流 3 电力系统强大的CVX 4 直流电网中最优潮流(OPF)的凸优化 4.1 Matlab代码 4.2 运行结果 5 微电网中最优潮流(OPF)的凸优…

go gin web综合教程,包括 mysql redis log 路由

前言 在学习go许久,没看到网上有比较综合的gin web教程,很多都是最基础的教程,完全就是启动个服务返回参数,没有过多的结合实际开发。下面我结合一下我的经验,来写一篇深入的综合教程,包括数据库Mysql、re…

JMeter启动时常见的错误

很多小伙伴在学工具这一块时,安装也是很吃力的一个问题,之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候,一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装,Windows 平台,双击 jmeter/bin …

基于python实现的SGM半全局立体匹配算法

文章目录前言一、SGM是什么?1.代价计算2.代价聚合3.视察计算4.视察优化二、基于python实现SGM算法?总结前言 开始正是入门立体匹配算法啦,会不断更新立体匹配的算法和代码。   水平有限,旨在先了解和读懂别人的代码的实现方式&a…

3D立体匹配入门 - 视差计算

经典假设 1、左右视图成功匹配的窗口,具有相同的像素 这个是最经典的假设,几乎所有视差图计算都用上了他,通过匹配左右窗口像素,得到最佳匹配对应的x轴坐标差,就是视差 2、像素P的视差只与其领域有关 这个是基于马尔…

外汇天眼:即使与世界第一的差价合约提供商交易也会被骗!

你能想象,当你与世界第一的差价合约提供商进行交易时,也可能会被骗吗? 在投资理财多元化的今天,外汇投资理财也备受大家的关注,而与此同时,骗子的诈骗渠道也与时俱进,各类外汇投资骗局也层出不穷…

VMware Workstation 17.0 Pro SLIC Unlocker for Linux

VMware_Dell_2.6_BIOS-EFI64_Mod;macOS Unlocker,支持 macOS Ventura 请访问原文链接:VMware Workstation 17.0 Pro SLIC & Unlocker for Windows & Linux,查看最新版。原创作品,转载请保留出处。 作者主页&a…

多模式直方图的视网膜图像增强

论文题目:Retinal Image Enhancement in Multi-Mode Histogram 1 摘要 视网膜图像的评估被广泛用于帮助医生诊断许多疾病,如糖尿病或高血压。从采集过程来看,视网膜图像往往具有较低的灰度对比度和动态范围。本文提出了一种基于直方图分析的…

MySQL回表

1.索引结构 1.1.B-Tree(B树)和BTree(B树) 前面是B-Tree,后面是BTree,两者的区别在于: B-Tree中,所有的节点都会带有指向具体记录的指针;BTree中只有叶子节点才会带有指向具体记录的指针;B-Tree中,不同的叶子之间没有连在一起;BTree中所有的叶子节点通过指针连接在一起;B-Tree中…

java版商城之 Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案?以下是我结合公司的产品做的总结,希望可以帮助到大家! 搜索体验小程序:海哇 1. 涉及平台 平台管理、商家端(PC端、手机端)、买…

浴室预约小程序毕业设计,洗澡预约澡堂预约系统设计与实现,微信小程序毕业设计论文怎么写毕设源码开题报告需求分析怎么做

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序浴室预约系统,前台用户使用小程序,后台管理使用JavaMysql开发,后台使用了springboot框架;通过后台添加设定浴室类型、录入浴室和管理浴室、管理…

CTPN+CRNN算法端到端实现文字识别的实战开发

本文分享自华为云社区《CTPNCRNN 算法端到端实现文字识别》,作者:HWCloudAI。 OCR介绍 光学字符识别(英语:Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取…