dict_learning#

sklearn.decomposition.dict_learning(X, n_components, *, alpha, max_iter=100, tol=1e-08, method='lars', n_jobs=None, dict_init=None, code_init=None, callback=None, verbose=False, random_state=None, return_n_iter=False, positive_dict=False, positive_code=False, method_max_iter=1000)[源代码]#

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

通过解决以下问题来找到用于逼近数据矩阵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

要提取的字典原子数。

alphaint或float

稀疏性控制参数。

max_iterint,默认=100

要执行的最大迭代次数。

tolfloat,默认= 1 e-8

对停止条件的容忍度。

method' lars ',',默认=' lars '

使用的方法:

  • 'lars' :使用最小角度回归法求解套索

    问题 (linear_model.lars_path );

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

n_jobsint,默认=无

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

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

Initial value for the dictionary for warm restart scenarios. Only used if code_init and dict_init are not None.

code_init形状的nd数组(n_samples,n_components),默认=无

热重启场景的稀疏代码的初始值。仅在以下情况下使用 code_initdict_init 不是没有。

callback可调用,默认值=无

每五次迭代调用一次的可调用。

verbose布尔,默认=假

控制程序的冗长程度。

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

用于随机初始化字典。传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

return_n_iter布尔,默认=假

是否返回迭代次数。

positive_dict布尔,默认=假

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

Added in version 0.20.

positive_code布尔,默认=假

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

Added in version 0.20.

method_max_iterint,默认=1000

要执行的最大迭代次数。

Added in version 0.22.

返回:
code形状的nd数组(n_samples,n_components)

矩阵分解中的稀疏码因子。

dictionarynd形状数组(n_components,n_features),

矩阵分解中的字典因子。

errors阵列

每次迭代的误差向量。

n_iterint

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

参见

dict_learning_online

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

DictionaryLearning

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

MiniBatchDictionaryLearning

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

SparsePCA

稀疏主成分分析

MiniBatchSparsePCA

小批量稀疏主成分分析。

示例

>>> import numpy as np
>>> from sklearn.datasets import make_sparse_coded_signal
>>> from sklearn.decomposition import dict_learning
>>> X, _, _ = make_sparse_coded_signal(
...     n_samples=30, n_components=15, n_features=20, n_nonzero_coefs=10,
...     random_state=42,
... )
>>> U, V, errors = dict_learning(X, n_components=15, alpha=0.1, random_state=42)

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

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

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

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