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

这篇具有很好参考价值的文章主要介绍了【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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’,执行的最大迭代次数。

  • 该类的成员变量:
    【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式,机器学习基础知识,学习,sklearn,人工智能,稀疏编码,机器学习,神经网络,深度学习

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

  • 该类常用的的方法为:
    【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式,机器学习基础知识,学习,sklearn,人工智能,稀疏编码,机器学习,神经网络,深度学习文章来源地址https://www.toymoban.com/news/detail-657019.html

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相乘得到的
    【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式,机器学习基础知识,学习,sklearn,人工智能,稀疏编码,机器学习,神经网络,深度学习
  • 构建字典学习/稀疏编码 dict_learner,学习到的字典为:
    【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式,机器学习基础知识,学习,sklearn,人工智能,稀疏编码,机器学习,神经网络,深度学习
  • 最后对输入数据进行变换:
    【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式,机器学习基础知识,学习,sklearn,人工智能,稀疏编码,机器学习,神经网络,深度学习
import numpy as np
from sklearn.datasets import make_sparse_coded_signal
from sklearn.decomposition import MiniBatchDictionaryLearning

X, 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)

到了这里,关于【字典学习+稀疏编码Sparse Encoding】简单介绍与sklearn的实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习笔记之稀疏自编码器

    本节以一道 算法八股题 为引,介绍 稀疏自编码器 。 下列方法中,可以用于特征 降维 的方法包括( 多选 ) ( ) (quad) ( ) A mathcal A quad A 主成分分析 PCA text{PCA} PCA B mathcal B quad B 线性判别分析 LDA text{LDA} LDA C mathcal C quad C 深度学习 SparseAutoEncoder text{SparseAutoEncoder} SparseAutoE

    2024年02月01日
    浏览(61)
  • MXNet中图解稀疏矩阵(Sparse Matrix)的压缩与还原

    对于稀疏矩阵的解释,就是当矩阵里面零元素远远多于非零元素,且非零元素没有规律,这样的矩阵就叫做稀疏矩阵,反过来就是稠密矩阵,其中非零元素的数量与所有元素的比值叫做稠密度,一般稠密度小于 0.05 的都叫做稀疏矩阵。 我们知道压缩文件的时候,可以将大文件

    2024年02月05日
    浏览(32)
  • RLE 稀疏水平集 RLE sparse level sets 论文阅读笔记

    原文: Houston, Ben, Mark Wiebe, and Chris Batty. “RLE sparse level sets.” ACM SIGGRAPH 2004 Sketches. 2004. 137. 只有一页,这就是技术草案的含金量吗 run-length encoded, RLE 游程编码 为什么 run-length 会被翻译为游程 我理解它把连续的重复出现的数字编码成 值+出现次数 的思想 但是还是理解不了这

    2024年02月22日
    浏览(46)
  • 医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

            医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。         在医学影像中,噪声可能来源于多

    2024年04月26日
    浏览(40)
  • System.Text.Encoding不同字符编码之间进行转换

    System.Text.Encoding 是 C# 中用于处理字符编码和字符串与字节之间转换的类。它提供了各种静态方法和属性, 用于在不同字符编码之间进行转换 ,以及将字符串转换为字节数组或反之。 在处理多语言文本、文件、网络通信以及其他字符数据的场景中,使用 Encoding 类可以确保数

    2024年02月12日
    浏览(40)
  • 概念解析 | 神经网络中的位置编码(Positional Encoding)

    注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:Positional Encoding A Gentle Introduction to Positional Encoding in Transformer Models, Part 1 在自然语言处理任务中,序列的顺序信息非常重要。例如,“小明去公园玩球”和“小明玩球去公园”

    2024年02月05日
    浏览(49)
  • sklearn【Accuracy】准确度介绍和案例学习!

    在机器学习和数据科学中,准确度(Accuracy)是衡量分类模型性能的一个基本且重要的指标。准确度表示模型正确分类的样本数占总样本数的比例。Python的sklearn库提供了简单而强大的工具来训练和评估分类模型,包括计算准确度。 准确度的计算方式相对直接且简单,下面将详

    2024年04月23日
    浏览(42)
  • sklearn【MAPE】平均相对误差介绍,以及案例学习!

    在预测任务中,评估模型的预测性能至关重要。除了常见的均方误差(MSE)和决定系数(R²)等指标外,平均百分比误差(MAPE,Mean Absolute Percentage Error)也是一个常用的评估指标。MAPE衡量了模型预测值与实际值之间的百分比误差的平均值,有助于我们了解预测的相对准确性

    2024年04月23日
    浏览(37)
  • 机器学习 —— Sklearn包中StandardScaler()、transform()、fit()的详细介绍

    sklearn(scikit-learn)是Scipy的扩展,建立在NumPy和matplotlib库的基础上。自2007年发布以来,sklearn已经成为Python重要的机器学习库。 sklearn支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。 一、  Sklearn包中StandardScaler()    

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包