稀疏编码#

sklearn.decomposition.sparse_encode(X, dictionary, *, gram=None, cov=None, algorithm='lasso_lars', n_nonzero_coefs=None, alpha=None, copy_cov=True, init=None, max_iter=1000, n_jobs=None, check_input=True, verbose=0, positive=False)[source]#

稀疏编码。

结果的每一行都是一个稀疏编码问题的解。目标是找到一个稀疏数组 code 使得

X ~= code * dictionary

更多信息请参见 用户指南

参数:
X形状为 (n_samples, n_features) 的数组

数据矩阵。

dictionary形状为 (n_components, n_features) 的数组

用于解决数据稀疏编码的字典矩阵。某些算法假设行已归一化,才能得到有意义的输出。

gram形状为 (n_components, n_components) 的数组,默认为 None

预计算的 Gram 矩阵,dictionary * dictionary'

cov形状为 (n_components, n_samples) 的数组,默认为 None

预计算的协方差,dictionary' * X

algorithm{'lasso_lars', 'lasso_cd', 'lars', 'omp', 'threshold'},默认为 'lasso_lars'

使用的算法

  • 'lars':使用最小角度回归方法 (linear_model.lars_path);

  • 'lasso_lars':使用 Lars 计算 Lasso 解;

  • 'lasso_cd':使用坐标下降法计算 Lasso 解 (linear_model.Lasso)。如果估计的成分是稀疏的,则 lasso_lars 会更快;

  • 'omp':使用正交匹配追踪来估计稀疏解;

  • 'threshold':将投影 dictionary * data' 中小于正则化项的所有系数压缩为零。

n_nonzero_coefsint,默认为 None

在解的每一列中目标非零系数的数量。这仅用于 algorithm='lars'algorithm='omp',并在 omp 情况下被 alpha 覆盖。如果为 None,则 n_nonzero_coefs=int(n_features / 10)

alphafloat,默认为 None

如果 algorithm='lasso_lars'algorithm='lasso_cd'alpha 是应用于 L1 范数的惩罚。如果 algorithm='threshold'alpha 是系数将被压缩为零的阈值绝对值。如果 algorithm='omp'alpha 是容差参数:目标重建误差的值。在这种情况下,它会覆盖 n_nonzero_coefs。如果为 None,则默认为 1。

copy_covbool,默认为 True

是否复制预计算的协方差矩阵;如果为 False,它可能会被覆盖。

init形状为 (n_samples, n_components) 的 ndarray,默认为 None

稀疏代码的初始化值。仅当 algorithm='lasso_cd' 时使用。

max_iterint,默认为 1000

如果 algorithm='lasso_cd''lasso_lars',则执行的最大迭代次数。

n_jobsint,默认为 None

要运行的并行作业数。 None 表示除非在 joblib.parallel_backend 上下文中,否则为 1。 -1 表示使用所有处理器。更多详情请参见 词汇表

check_inputbool,默认为 True

如果为 False,则不会检查输入数组 X 和字典。

verboseint,默认为 0

控制详细程度;值越高,显示的消息越多。

positivebool,默认为 False

查找编码时是否强制执行正值。

在 0.20 版中添加。

返回值:
code形状为 (n_samples, n_components) 的 ndarray

稀疏代码。

另请参见

sklearn.linear_model.lars_path

使用 LARS 算法计算最小角度回归或 Lasso 路径。

sklearn.linear_model.orthogonal_mp

求解正交匹配追踪问题。

sklearn.linear_model.Lasso

使用L1先验作为正则化项训练线性模型。

SparseCoder

从固定的预计算字典中查找数据的稀疏表示。

示例

>>> import numpy as np
>>> from sklearn.decomposition import sparse_encode
>>> X = np.array([[-1, -1, -1], [0, 0, 3]])
>>> dictionary = np.array(
...     [[0, 1, 0],
...      [-1, -1, 2],
...      [1, 1, 1],
...      [0, 1, 1],
...      [0, 2, 1]],
...    dtype=np.float64
... )
>>> sparse_encode(X, dictionary, alpha=1e-10)
array([[ 0.,  0., -1.,  0.,  0.],
       [ 0.,  1.,  1.,  0.,  0.]])