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)#

解决一个字典学习矩阵分解问题的在线方法。

找到最佳的字典和相应的稀疏编码,以近似数据矩阵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表示逐元素矩阵范数,即矩阵中所有元素的绝对值之和。这是通过反复迭代小批量数据切片来实现的。

更多信息请参阅 用户指南

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

数据矩阵。

n_componentsint或None, 默认=2

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

alphafloat, 默认=1

稀疏控制参数。

max_iterint, 默认=100

在停止之前对整个数据集的最大迭代次数,独立于任何早期停止标准的启发式方法。

Added in version 1.1.

Deprecated since version 1.4: max_iter=None 在1.4中已弃用,并将在1.6中移除。 请使用默认值(即 100 )代替。

return_codebool, 默认=True

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

dict_init形状为(n_components, n_features)的ndarray, 默认=None

用于热启动场景的字典初始值。 如果为 None ,则通过 randomized_svd 对数据进行SVD分解来创建字典的初始值。

callback可调用对象, 默认=None

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

batch_sizeint, 默认=256

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

Changed in version 1.3: 在版本1.3中, batch_size 的默认值从3改为256。

verbosebool, 默认=False

控制过程的冗长程度。

shufflebool, 默认=True

在将数据分割成批次之前是否打乱数据。

n_jobsint, 默认=None

并行运行的作业数量。 None 表示1,除非在:obj: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_dictbool, 默认=False

在找到字典时是否强制正性。

Added in version 0.20.

positive_codebool, 默认=False

在找到编码时是否强制正性。

Added in version 0.20.

method_max_iterint, 默认=1000

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

Added in version 0.22.

tolfloat, 默认=1e-3

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

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

Added in version 1.1.

max_no_improvementint, 默认=10

根据连续未改善平滑成本函数的小批量数量控制早期停止。

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

Added in version 1.1.

Returns:
code形状为(n_samples, n_components)的ndarray,

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

dictionary形状为(n_components, n_features)的ndarray,

字典学习问题的解决方案。

n_iterint

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

See also

dict_learning

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

DictionaryLearning

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

MiniBatchDictionaryLearning

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

SparsePCA

稀疏主成分分析。

MiniBatchSparsePCA

小批量稀疏主成分分析。

Examples

>>> 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)
0.53...

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

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