【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式

文章目录

  • 1、字典学习与稀疏编码
  • 2、sklearn的实现
  • 3、示例

1、字典学习与稀疏编码

  • 简单来说,稀疏编码就是把输入向量(信号)/ 矩阵(图像)表示为稀疏的系数向量和一组超完备基向量(字典)的线性组合。
  • 因此,稀疏编码通过上述方式以后,就可以将输入数据重构为稀疏的向量:即向量内部元素满足只有很少的几个非零元素或只有很少的几个远大于零的元素。
  • 一般情况下要求超完备基向量的个数k非常大(远大于输入数据的维度n),因为这样的基向量组合才能更容易的学到输入数据内在的结构和特征。
  • 为什么要转换为稀疏向量?

1)特征选择(Feature Selection): 直接对原始图像提取的特征很多情况下其实是有冗余成分的,就是说我们只需要关键特征识别就可以,没有必要用那么多特征,更多情况下,那些冗余信息会干扰我们最后的识别结果!而稀疏编码可以实现特征的自动选择,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
2)可解释性(Interpretability):另一个青睐于稀疏的理由是,模型更容易解释,即只有那几个关键特征会影响最终的结果,更容易解释。

例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。通过学习,如果最后学习到的w*就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。

  • 更多的稀疏编码的解释见该博客:https://blog.csdn.net/Julialove102123/article/details/78349811

2、sklearn的实现

  • 通过MiniBatchDictionaryLearning来实现字典学习与稀疏编码
class sklearn.decomposition.MiniBatchDictionaryLearning(n_components=None, *, alpha=1, n_iter='deprecated',
max_iter=None, fit_algorithm='lars', n_jobs=None, batch_size=256, shuffle=True, dict_init=None,
transform_algorithm='omp', transform_n_nonzero_coefs=None, transform_alpha=None, verbose=False,
split_sign=False, random_state=None, positive_code=False, positive_dict=False, transform_max_iter=1000,
callback=None, tol=0.001, max_no_improvement=10)

1)n_components:int, default=None,要提取的字典中每个基向量/atoms的个数,每个基向量的维度应该为输入向量的维度,因此字典的维度应该是(n_components, n_features)
2)alpha:float, default=1,正则化项(Lasso回归项)的权重,用于平衡稀疏性和重构误差
3)n_iter:int, default=1000,迭代的总次数,1.1版本弃用,改用max_iter
4)max_iter:int, default=None,迭代的最大次数(早停策略之前),不为None时,n_iter将被忽略
5)fit_algorithm:{‘lars’, ‘cd’}, default=’lars’,解决优化问题的算法(首先使用fit算法训练出字典), 默认为lars,最小角度回归
6)n_jobs:int, default=None,并行jobs的数量,默认为None,就是1
7)batch_size:int, default=256,每个mini-batch中的样本数量
8)shuffle:bool, default=True,在构建batch之前是否打乱样本
9)dict_init:ndarray of shape (n_components, n_features), default=None,字典的初始化值
10)transform_algorithm:{‘lasso_lars’, ‘lasso_cd’, ‘lars’, ‘omp’, ‘threshold’}, default=’omp’,用于变换数据的算法,即该算法用于学习每个样本的稀疏的系数向量(即稀疏编码的结果),再对原始输入数据进行变换。每个样本的稀疏向量的维度应该等于字典中的基向量的个数,即n_components,因此对输入数据变换后的维度应该是(n_samples,n_components),每个向量都具有稀疏性。
11)transform_n_nonzero_coefs:int, default=None,在解的每一列中非零系数的数目。这只适用于algorithm='lars’和algorithm=‘omp’。如果None,则transform_n_nonzero_coefs=int(n_features / 10)。
12)transform_alpha:float, default=None,如果algorithm='lasso_lars’或algorithm=‘lasso_cd’, alpha是应用于L1范数的惩罚。如果algorithm=‘threshold’, alpha是阈值的绝对值,低于该阈值,系数将被压扁为零。如果为None,默认为alpha。
13)split_sign:bool, default=False,是否将稀疏特征向量拆分为其负部分与正部分的拼接。这可以提高下游分类器的性能。
14)random_state:int, RandomState instance or None, default=None,当dict_init未被指定时,用于初始化字典
15)positive_code:bool, default=False,是否强制编码为正
16)positive_dict:bool, default=False,是否强制字典为正
17)transform_max_iter:int, default=1000,如果algorithm=‘lasso_cd’或’lasso_lars’,执行的最大迭代次数。

  • 该类的成员变量:
    在这里插入图片描述

  • components_是学习到的字典,[n_components, n_features],表示有n_components个基向量/atom,每个基向量的维度等于输入向量的维度

  • 该类常用的的方法为:
    在这里插入图片描述

1、fit(X, y=None)
拟合X中的数据,即学习到shape为[n_components, n_features]的字典
X:待学习/待训练的样本,[n_samples, n_featues]的ndarray
返回MiniBatchDictionaryLearning类实例本身2、transform(X)
将数据X编码为字典atom/基向量的稀疏组合,返回的就是稀疏编码的结果
X:待编码的样本,[n_samples, n_featues]的ndarray
返回:编码后的结果,[n_samples, n_components]的ndarray,需要先进行fit后学习到字典再进行稀疏编码3、fit_transform(X)
字典学习+稀疏编码,就是上述两个函数的结合
X:待学习/待训练的样本,[n_samples, n_featues]的ndarray
返回:编码后的结果,[n_samples, n_features_new]的ndarray

3、示例

  • 先使用make_sparse_coded_signal构建训练样本X,是由dictionary和code相乘得到的
    在这里插入图片描述
  • 构建字典学习/稀疏编码 dict_learner,学习到的字典为:
    在这里插入图片描述
  • 最后对输入数据进行变换:
    在这里插入图片描述
import numpy as np
from sklearn.datasets import make_sparse_coded_signal
from sklearn.decomposition import MiniBatchDictionaryLearningX, dictionary, code = make_sparse_coded_signal(n_samples=100, n_components=300, n_features=20,n_nonzero_coefs=10, random_state=42)dict_learner = MiniBatchDictionaryLearning(n_components=300, batch_size=4, transform_algorithm='lasso_lars',transform_alpha=0.1, random_state=42, shuffle=False)
X_transformed = dict_learner.fit_transform(np.transpose(X))
print(X_transformed)

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

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

相关文章

java-垃圾回收与算法

垃圾回收与算法 1. 如何确定垃圾 1. 引用计数法 在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用&…

Grounding dino + segment anything + stable diffusion 实现图片编辑

目录 总体介绍总体流程 模块介绍目标检测: grounding dino目标分割:Segment Anything Model (SAM)整体思路模型结构:数据引擎 图片绘制 集成样例 其他问题附录 总体介绍 总体流程 本方案用到了三个步骤,按顺序依次为&#xff1a…

Android Sutdio 导入libs文件夹下的jar包没反应

有点离谱,笨笨的脑子才犯的错误 首先发现问题:转移项目的时候 直接复制粘贴libs文件夹下的jar包到新项目,在build.gradle文件下 使用语句并应用也没反应(jar包没有出现箭头且代码报错,找不到) implementa…

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写

解锁编程的新契机:深入探讨Kotlin Symbol Processor (KSP)的编写 1. 引言 随着软件开发领域的不断发展,新的工具和技术不断涌现,以满足开发者在构建高效、可维护和创新性的代码方面的需求。Kotlin Symbol Processor(KSP&#xf…

运动耳机推荐,骨传导运动耳机哪款好?

作为一个运动爱好者,一款合适的运动耳机至关重要,因为音乐能有效地激发人体潜能,充分释放能量,达到更好的运动效果,那么面对产品种类众多的运动耳机,该如何选择呢?个人建议的话首选骨传导耳机&a…

redis的基础命令01

1、操作库的指令 1、清除当前库---flushdb 2、清除所有库---flushAll 2、操作key的指令 最常用的指令get、set 1)set key value 2)get key 基础指令 1、del 删除单个:del key 、批量删除:del key1 key2 key3 2、exists 判断key是否…

B站发布财报,正式会员数达2.14亿

KlipC报道:B站公布了截至2023年6月30日的未经审计的财务报告,据数据显示,B站总营收达同比增长8%达53.04亿元人民币,毛利润同比增长66%,其中广告业务收入同比增长36%达16亿人民币。财报发布后,B站美股盘前一…

QT如何打包

目录 1.windeployqt工具 2.工具位置 3.使用方法 4.注意事项 Qt Creator 默认以动态链接的方式生成可执行文件,该文件无法独立运行,必须为其提供所需的动态链接库。也就是说,只分享 Qt Creator 生成的可执行文件是不行的,必须将…

rabbitmq容器启动后修改连接密码

1、进入容器 docker exec -it rabbitmq bash 2、查看当前用户列表 rabbitmqctl list_users 3、修改密码 rabbitmqctl change_password [username] ‘[NewPassword]’ 4、修改后退出容器 ctrlpq 5、退出容器后即可生效,不需要重启容器

关于内点定义不同的讨论

根据和译者联系后,根据提供P660页的关于内点的定义与其他国内教材不同。 《离散数学及其应用(原书第8版)》ISBN:978-7-111-63687-8内点定义如下图所示 因此 《离散数学及其应用(原书第8版)》ISBN:978-7-111-63687-8 第…

Springboot 实践(7)springboot添加html页面,实现数据库数据的访问

前文讲解,项目已经实现了数据库Dao数据接口,并通过spring security数据实现了对系统资源的保护。本文重点讲解Dao数据接口页面的实现,其中涉及页面导航栏、菜单栏及页面信息栏3各部分。 1、创建html页面 前文讲解中,资源目录已经…

华为公布一项倒装芯片封装技术:能大幅改善CPU散热

华为技术有限公司日前公开了一项名为“具有改进的热性能的倒装芯片封装”专利,申请公布号为CN116601748A。 该专利实施例提供了一种倒装芯片封装、一种装备有应用封装结构的电路的装置以及一种组装封装的方法。 更直观来说,就是一种提供芯片与散热器之…

RestTemplate

RestTemplate介绍 RestTemplate是Spring提供的用于访问RESTful服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnection),…

银河麒麟服务器v10 sp1 .Net6.0 上传文件错误

上一篇:银河麒麟服务器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前,在Linux服务器上安装 libgdiplus 即可解决,libgdiplus是System.Drawing.Common原生端跨平台实现的主要提供者,是开源mono项目。地址…

WPF CommunityToolkit.Mvvm

文章目录 前言ToolkitNuget安装简单使用SetProperty,通知更新RealyCommandCanExecute 新功能,代码生成器ObservablePropertyNotifyCanExecuteChangedForRelayCommand其他功能对应关系 NotifyPropertyChangedFor 前言 CommunityToolkit.Mvvm(…

Docker网络与资源控制

一、Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿…

期待相聚|2023 Google 谷歌开发者大会现场见

直达科技前沿 点亮技术灵感 激发新思妙想 收获多元共进 长按下方图片,扫码报名参会 *仅出于确认身份,请填写与身份证件一致的姓名,并确认邮箱地址及联系电话准确无误。 2023 Google 开发者大会主旨演讲将会分享 Google 如何通过更智能、更…

linux中ubuntu安装hashcat方法以及使用GPU破解

一、linux安装hashcat git clone https://github.com/hashcat/hashcat.git make make install二、安装驱动 驱动版本安装大全:https://developer.nvidia.com/cuda-toolkit-archive 查看自己显卡选择对应的版本,根据下面命令无脑安装就行了 wget https:/…

Python functools module 的介绍与应用

Python functools module 的介绍与应用 functools module lru_cache from functools import lru_cache import timelru_cache(maxsizeNone) # 设置缓存大小为无限制 def my_function(x):for i in range(1000):x xfor j in range(100):x xreturn x# 第一次调用函数&#xff…

投资不识筹码峰,炒遍A股也枉然? | 如何用python计算筹码分布数据

你听说过股市上著名的丁蟹效应吗? 你知道丁蟹报仇点到为止,丁蟹报恩家破人亡吗? 你又是否曾在微信群中见过这些表情包? 01 大时代 不知道大家有没有看过《大时代》这部剧,看过的欢迎点我头像交流讨论。 剧中逆天强运…