dict_learning_online#

sklearn.decomposition.dict_learning_online(X, n_components=2, *, alpha=1, max_iter=100, return_code=True, dict_init=None, callback=None, batch_size=256, verbose=False, shuffle=True, n_jobs=None, method='lars', random_state=None, positive_dict=False, positive_code=False, method_max_iter=1000, tol=0.001, max_no_improvement=10)[source]#

在线解决字典学习矩阵分解问题。

通过求解以下问题,找到最佳字典和对应的稀疏编码,以近似数据矩阵 X:

(U^*, V^*) = argmin 0.5 || X - U V ||_Fro^2 + alpha * || U ||_1,1
             (U,V)
             with || V_k ||_2 = 1 for all  0 <= k < n_components

其中 V 是字典,U 是稀疏编码。||.||_Fro 代表 Frobenius 范数,||.||_1,1 代表逐元素矩阵范数,它是矩阵中所有元素的绝对值之和。这通过重复迭代对输入数据进行切片得到的 mini-batch 来实现。

更多信息请参阅用户指南

参数:
X形如 (n_samples, n_features) 的类数组

数据矩阵。

n_componentsint 或 None,默认值=2

要提取的字典原子数量。如果为 None,则 n_components 设置为 n_features

alpha浮点数,默认值=1

稀疏度控制参数。

max_iterint,默认值=100

在完整数据集上迭代的最大次数,独立于任何早停准则启发式而停止。

版本 1.1 新增。

return_code布尔值,默认值=True

是否也返回编码 U 或仅返回字典 V

dict_init形如 (n_components, n_features) 的 ndarray,默认值=None

字典的初始值,用于热启动场景。如果为 None,则字典的初始值将通过数据的 SVD 分解(使用 randomized_svd)创建。

callback可调用对象,默认值=None

在每次迭代结束时调用的可调用对象。

batch_sizeint,默认值=256

每个批次中要取的样本数量。

版本 1.3 中更改:batch_size 的默认值在版本 1.3 中从 3 更改为 256。

verbose布尔值,默认值=False

控制过程的详细程度。

shuffle布尔值,默认值=True

是否在将数据分批之前对其进行洗牌。

n_jobsint,默认值=None

要运行的并行作业数。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关更多详细信息,请参阅术语表

method{‘lars’, ‘cd’},默认值='lars'
  • 'lars':使用最小角回归方法来解决 lasso 问题 (linear_model.lars_path);

  • 'cd':使用坐标下降方法来计算 Lasso 解 (linear_model.Lasso)。如果估计的成分是稀疏的,Lars 将会更快。

random_stateint, RandomState 实例或 None,默认值=None

当未指定 dict_init 时用于初始化字典,当 shuffle 设置为 True 时用于随机洗牌数据,以及更新字典。传入一个 int 值以在多次函数调用中获得可重现的结果。参阅术语表

positive_dict布尔值,默认值=False

在寻找字典时是否强制为正。

版本 0.20 新增。

positive_code布尔值,默认值=False

在寻找编码时是否强制为正。

版本 0.20 新增。

method_max_iterint,默认值=1000

解决 lasso 问题时要执行的最大迭代次数。

版本 0.22 新增。

tol浮点数,默认值=1e-3

根据字典在两个步骤之间差异的范数来控制早停。

要禁用基于字典变化的早停,请将 tol 设置为 0.0。

版本 1.1 新增。

max_no_improvementint,默认值=10

根据连续未能使平滑成本函数改进的 mini-batch 数量来控制早停。

要禁用基于成本函数的收敛检测,请将 max_no_improvement 设置为 None。

版本 1.1 新增。

返回:
code形如 (n_samples, n_components) 的 ndarray,

稀疏编码(仅当 return_code=True 时返回)。

dictionary形如 (n_components, n_features) 的 ndarray,

字典学习问题的解。

n_iterint

运行的迭代次数。仅当 return_n_iter 设置为 True 时返回。

另请参阅

dict_learning

解决字典学习矩阵分解问题。

DictionaryLearning

找到一个稀疏编码数据的字典。

MiniBatchDictionaryLearning

字典学习算法的一个更快、但精度较低的版本。

SparsePCA

稀疏主成分分析。

MiniBatchSparsePCA

Mini-batch 稀疏主成分分析。

示例

>>> import numpy as np
>>> from sklearn.datasets import make_sparse_coded_signal
>>> from sklearn.decomposition import dict_learning_online
>>> X, _, _ = make_sparse_coded_signal(
...     n_samples=30, n_components=15, n_features=20, n_nonzero_coefs=10,
...     random_state=42,
... )
>>> U, V = dict_learning_online(
...     X, n_components=15, alpha=0.2, max_iter=20, batch_size=3, random_state=42
... )

我们可以检查 U 的稀疏程度

>>> np.mean(U == 0)
np.float64(0.53)

我们可以比较稀疏编码信号重建误差的平均平方欧几里得范数与原始信号的平方欧几里得范数。

>>> X_hat = U @ V
>>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1))
np.float64(0.053)