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代表弗罗贝尼乌斯规范, ||.||_ 1,1代表逐项矩阵规范,它是矩阵中所有条目的绝对值的和。这是通过对输入数据进行切片来重复迭代小批量来实现的。

阅读更多的 User Guide .

参数:
X形状类似阵列(n_samples,n_features)

数据矩阵。

n_componentsint或无,默认=2

要提取的字典原子数。如果没有,那么 n_components 设置为 n_features .

alphafloat,默认=1

稀疏性控制参数。

max_iterint,默认=100

独立于任何早期停止标准启发式而停止之前在完整数据集上进行的最大迭代次数。

Added in version 1.1.

return_code布尔,默认=True

是否还返回代码U还是仅返回字典 V .

dict_init形状的nd数组(n_components,n_features),默认=无

热重启场景字典的初始值。如果 None ,字典的初始值是通过以下方式通过数据的DID分解创建的 randomized_svd .

callback可调用,默认值=无

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

batch_sizeint,默认=256

每批要采集的样本数量。

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

verbose布尔,默认=假

控制程序的冗长程度。

shuffle布尔,默认=True

是否在批量拆分数据之前对数据进行洗牌。

n_jobsint,默认=无

要运行的并行作业数。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

method' lars ',',默认=' lars '
  • 'lars' :使用最小角度回归方法解决套索问题 (linear_model.lars_path );

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

random_stateint,RandomState实例或无,默认=无

用于初始化字典时 dict_init 未指定,当 shuffle 设置为 True ,并更新字典。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

positive_dict布尔,默认=假

在寻找字典时是否要加强积极态度。

Added in version 0.20.

positive_code布尔,默认=假

在查找代码时是否强制执行积极性。

Added in version 0.20.

method_max_iterint,默认=1000

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

Added in version 0.22.

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

根据字典中2个步骤之间差异的规范控制提前停止。

To disable early stopping based on changes in the dictionary, set tol to 0.0.

Added in version 1.1.

max_no_improvementint,默认值=10

根据小型批次的连续数量控制提前停止,但不会改善平滑成本函数。

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

Added in version 1.1.

返回:
codend形状数组(n_samples,n_components),

稀疏代码(仅当 return_code=True ).

dictionarynd形状数组(n_components,n_features),

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

n_iterint

运行的迭代次数。只有在以下情况下才返回 return_n_iter 设置为 True .

参见

dict_learning

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

DictionaryLearning

找一个对数据进行稀疏编码的字典。

MiniBatchDictionaryLearning

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

SparsePCA

稀疏主成分分析

MiniBatchSparsePCA

小批量稀疏主成分分析。

示例

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