Sparse编码和字典学习(1)基础知识和python简单实现

news2024/12/22 17:15:39

Sparse编码和字典学习

  • 1. 稀疏表示与字典学习简介
    • 1.1 Motivation
    • 1.2 字典学习的流程
    • 1.3 字典学习的数学模型
  • 2 python实现
    • 2.1字典学习
    • 2.1 稀疏性统计和误差计算
  • 参考资料和文献

1. 稀疏表示与字典学习简介

1.1 Motivation

字典学习的思想应该源来实际生活中的字典的概念。字典是前辈们学习总结的精华,当我们需要学习新的知识的时候,不必与先辈们一样去学习先辈们所有学习过的知识,我们可以参考先辈们给我们总结的字典,通过查阅这些字典,我们可以大致学会到这些知识。

稀疏表示的一个通俗解释:

设观察到的信号为 y \bold y y, 字典为 A \bold A A,查找一个稀疏的 x \bold x x,满足 y = A x \bold y=\bold A \bold x y=Ax
在这里插入图片描述
由于 x \bold x x的稀疏性质,因而,等式可以改写为如下形式:
在这里插入图片描述
即:原始信号可被近似表示为稀疏矩阵 x \bold x x中较少的几个量的叠加。
那么,如何找到这个稀疏矩阵 x \bold x x呢?
这个问题可以表示为如下的数学形式:
x ∗ = a r g min ⁡ x ∥ x ∥ 0    s u b j e c t    t o    A x = y \boldsymbol{x}^*=\underset{\boldsymbol{x}}{arg\min}\left\| \left. \boldsymbol{x} \right\| _0\,\,subject\,\,to\,\,\boldsymbol{Ax}=\boldsymbol{y} \right. x=xargminx0subjecttoAx=y
PS:范数是一种强化的距离概念,它在定义上比距离多了一条数乘的运算法则。
在这里插入图片描述
零范数即p取0。
在这里插入图片描述
当P=0时,也就是L0范数,L0范数并不是一个真正的范数,它主要被用来度量向量中非零元素的个数。
下面,继续回到正题,但是,直接求解这个问题(NP hard)较为困难,
这个问题可被放松为以下条件形式:
x ∗ = a r g min ⁡ ∥ y − A x ∥ 2 2    s u b j e c t    t o    ∥ x ∥ 0 ⩽ ϵ \boldsymbol{x}^*=arg\min \left\| \left. \boldsymbol{y}-\boldsymbol{Ax} \right\| _{2}^{2}\,\, subject\,\,to\,\,\left\| \left. \boldsymbol{x} \right\| _0\leqslant \epsilon \right. \right. x=argminyAx22subjecttox0ϵ
但上式只考虑了观测信号 A x \bold Ax Ax和真实信号 y \bold y y之间的平方和误差,优化过程,只是添加了一个硬性的L0范数的约束条件,因而,迭代过程缺乏对稀疏性的优化,进而修改为如下形式:
x ∗ = a r g min ⁡ 1 2 ∥ y − A x ∥ 2 2 + λ ∥ x ∥ 1 \boldsymbol{x}^*=arg\min \frac{1}{2}\left\| \left. \boldsymbol{y}-\boldsymbol{Ax} \right\| _{2}^{2}+\lambda \left\| \left. \boldsymbol{x} \right\| _1 \right. \right. x=argmin21yAx22+λx1
探索了下,获取稀疏解的原理和过程,实际上LASSO也并不是一种封闭形式的优化过程( a closed form for the lasso solution),为了获得稀疏解
在这里插入图片描述

1.2 字典学习的流程

因而,基于上述的一个思想,字典学习可以被简化为一个“构造工具字典”、“查阅字典”的两个过程。对于“构造工具字典”这一过程,对字典有以下几点要求:

  • 字典内容尽可能全面,总结出的字典不应该漏掉数据的关键信息。
  • 字典应该尽可能简洁,即快而准。
  • 在占用较小资源前提下尽可能还原知识的特性。

1.3 字典学习的数学模型

更加完整的数学公式推导可以查阅博客【4】

2 python实现

2.1字典学习

实际上,就是实现了对原始信号的稀疏重构,类似于压缩感知,这里指定变换算法为“lasso lars”, 实际上,还包含以下几种:

  • ‘lars’: uses the least angle regression method (lars_path);

  • ‘lasso_lars’: uses Lars to compute the Lasso solution.

  • ‘lasso_cd’: uses the coordinate descent method to compute the Lasso solution (Lasso). ‘lasso_lars’ will be faster if the estimated components are sparse.

  • ‘omp’: uses orthogonal matching pursuit to estimate the sparse solution.

  • ‘threshold’: squashes to zero all coefficients less than alpha from the projection dictionary * X’.

import numpy as np
from sklearn.datasets import make_sparse_coded_signal
from sklearn.decomposition import DictionaryLearning
X, dictionary, code = make_sparse_coded_signal(
n_samples=100, n_components=15, n_features=20, n_nonzero_coefs=10,
random_state=42, data_transposed=False
)
dict_learner = DictionaryLearning(
n_components=15, transform_algorithm='lasso_lars', transform_alpha=0.1,
random_state=42,
)
X_transformed = dict_learner.fit_transform(X)

2.1 稀疏性统计和误差计算

print("sparsity: {}".format(np.mean(X_transformed == 0)))
X_hat = X_transformed @ dict_learner.components_
print(np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1)))

结果

sparsity: 0.4633333333333333
error: 0.011433365697744878

Process finished with exit code 0

参考资料和文献

【1】 https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.DictionaryLearning.html
【2】http://thoth.inrialpes.fr/people/mairal/spams/documentation.html
【3】https://stats.stackexchange.com/questions/289075/what-is-the-smallest-lambda-that-gives-a-0-component-in-lasso
【4】https://www.cnblogs.com/endlesscoding/p/10090866.html

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

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

相关文章

谷粒商城 -- 项目环境搭建

注:以下的项目环境搭建过程,适用于所有的微服务项目的环境搭建,以后做微服务项目的时候看着这个笔记进行搭建环境即可 一、项目微服务划分图 二、Linux安装Docker 三、Docker安装mysql / redis 四、Vscode下载安装 五、谷粒项目结构创建&a…

碎片化学习Python的又一神作:termux

什么是Termux? 据Termux官网介绍,Termux是一个Android终端仿真器和Linux环境应用程序,运行于内部存储(不在SD卡上),无需root或设置。 系统自动进行最小化安装,使用APT软件包管理器安装其它软件…

【成为红帽工程师】第三天 web服务器

目录 一、www简介 二、网址及http简介 三、www服务器的类型 四、www服务器的基本配置 五、相关实验 一、www简介 (一)什么是www www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询 用户所需要的信息…

【十问十答】回归模型知识点

1. 线性回归的假设是什么 线性回归有四个假设: 线性:自变量(x)和因变量(y)之间应该存在线性关系,这意味着x值的变化也应该在相同方向上改变y值。 独立性:特征应该相互独立&#xf…

[附源码]java毕业设计大学生足球预约信息

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【Java基础】泛型+反射+枚举+Lambda表达式 知识点总结

【大家好,我是爱干饭的猿,本文重点介绍Java基础:泛型、反射、枚举、Lambda表达式知识点总结。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章&#x…

Redis安装与配置 LInux Centos

1.介绍Redis Redis 是完全开源免费的,遵守BSD协议,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 特点: 支持数据的持久化,可以将内存中的数据保存到硬盘,在重启后再次加载使用。 支持…

Navigation 组件使用入门

Navigation 组件使用入门https://developer.android.google.cn/guide/navigation/navigation-getting-started 添加依赖 dependencies {def nav_version "2.5.2"implementation "androidx.navigation:navigation-fragment:$nav_version"} 创建导航图 …

LeetCode 752. 打开转盘锁

今天在看bfs模板的时候看到了一个题目,解密码锁的这道题,半天也没啥思路和行动力,看了人家的java版的注释,花了40分钟才搞懂这个题,也真的是菜。写完之后发现这个题目还可以去优化,用双向bfs去解决&#xf…

Android App开发超实用实例 | 约束布局

从多个角度介绍约束布局设计中的控件定位。 01、约束布局基础 从 Android Studio 2.3版本起,约束布局是Android Studio布局文件的默认布局。其他布局方式在实现复杂一些的布局设计时存在多种或多个布局嵌套的情况,设备调用这样的布局文件就需要花费更多…

(未整理完)十月每日一题打卡

每日打卡 10.1 [重新格式化电话号码 lc1694](1694. 重新格式化电话号码 - 力扣(LeetCode)) 模拟题:特殊情况就是在最后划分完全部三个之后,还剩四个需要变成aa-bb class Solution { public:string reformatNumber(string number…

Redis系列:Redis主从、哨兵、集群介绍

本篇内容包括:Redis 主从架构、Redis 哨兵架构、Redis 集群架构 的介绍等内容~ 文章目录一、Redis 主从架构1、Redis 主从架构2、主从架构原理二、Redis 哨兵模式1、Redis 哨兵模式2、Redis 哨兵模式工作过程三、Redis 集群模式1、Redis 集群模式2、Redi…

【树莓派不吃灰】基础篇⑲ 搭建usb摄像头MJPG-streamer图片流监控,支持远程视频监控访问

目录1. 前言2. 识别摄像头3. MJPG-streamer方案3.1 什么是 MJPG?3.2 MJPG 的优点?3.2 MJPG 的缺点?4. 搭建usb摄像头监控4.1 开启树莓派摄像头开关4.2 查看设备文件4.3 安装必要的库4.4 下载 mjpg-streamer 安装文件4.5 切换到 /mjpg-streame…

基于51单片机的温度甲烷监测报警串口上报proteus仿真原理图PCB

功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度和甲烷浓度 2.超过甲烷浓度阈值,蜂鸣器报警 3.按键可更改甲烷浓度阈值上限和启动/暂停检测 4.020%浓度,绿色LED点亮 20%~阈值上限,黄色LED点亮&#xff0…

C#操作modbus

modbus使用范围广泛,广泛应用于各类仪表,PLC等。 modbus的好处是免费,属于应用层协议,底层硬件基于485/以太网。 modbus协议本质还是自定义协议。 modbus调试软件: mthings: modbuspoll: 主站/从站,客…

前端静态页面基本开发思路(一)

有不少刚入门前端的同学经常问我前端布局的问题,总是跟我说在面对学校布置的作业或者想自己搭建博客的时候不知道怎么下手,不知道怎么去写静态的页面,每当我解决了一个又一个同学的问题的时候,又有新的同学来问,故思来…

nginx 配置防盗链(了解)

一 防盗链 1.1 防盗链概念 网站上页面的一些静态资源,不想让本站点的静态资源被他人盗取访问。使用nginx判断请求连接的头部refer中是否含有内容以及合法性来进行处理。 referer表示第二次资源的来源地址 1.2 配置规则 valiad_referers none|blocked|server_na…

Spring--IOC基于XML管理bean

IOC容器 IOC思想 IOC:Inversion of Control 即反转控制 获取资源的传统方式 自己做饭:买菜、洗菜、择菜、改刀、炒菜,全过程参与,费时费力,必须清楚了解资源创建整个过程中的全部细节且熟练掌握。 在应用程序中的组件…

Antd表格性能优化

今天来分享一个实际项目的性能优化的内容。 文章目录一、背景介绍二、性能问题原因及解决方案一、背景介绍 国内React项目大多数人选择配套的UI库的时候都会选择Antd。如果是非常简单的页面用Antd的话其实是完全没问题的,性能感觉不到什么瓶颈,样式也还…

计算机网络

目录 介绍 组成部分 工作方式 功能组成 网络范围分类 传输技术: 总结 标准化工作 RFC文档的作用: 速率,带宽 有容量和速率的区别 带宽 吞吐量 时延,时延带宽积 1.发送时延: 2.传播时延: ​编辑 3.…