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)[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代表逐元素矩阵范数,它是矩阵中所有元素的绝对值之和。

用户指南中了解更多信息。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

数据矩阵。

n_componentsint

要提取的字典原子数。

alphaint or float

稀疏性控制参数。

max_iterint, default=100

要执行的最大迭代次数。

tolfloat, default=1e-8

停止条件的容差。

method{‘lars’, ‘cd’}, default=’lars’

使用的方法

  • 'lars': 使用最小角回归方法解决lasso问题 (linear_model.lars_path);

    问题 (linear_model.lars_path);

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

n_jobsint, default=None

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

dict_initndarray of shape (n_components, n_features), default=None

用于热启动场景的字典初始值。仅当code_initdict_init不为None时使用。

code_initndarray of shape (n_samples, n_components), default=None

用于热启动场景的稀疏代码初始值。仅当code_initdict_init不为None时使用。

callbackcallable, default=None

每五次迭代调用一次的回调函数。

verbosebool, default=False

控制过程的详细程度。

random_stateint, RandomState instance or None, default=None

用于随机初始化字典。传入一个整数可确保跨多次函数调用获得可重现的结果。参见Glossary

return_n_iterbool, default=False

是否返回迭代次数。

positive_dictbool, default=False

查找字典时是否强制执行非负性。

0.20 版本新增。

positive_codebool, default=False

查找代码时是否强制执行非负性。

0.20 版本新增。

method_max_iterint, default=1000

要执行的最大迭代次数。

版本 0.22 新增。

返回:
codendarray of shape (n_samples, n_components)

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

dictionaryndarray of shape (n_components, n_features),

矩阵分解中的字典因子。

errorsarray

每次迭代的误差向量。

n_iter整型

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

另请参阅

dict_learning_online

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

DictionaryLearning

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

MiniBatchDictionaryLearning

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

SparsePCA

稀疏主成分分析。

MiniBatchSparsePCA

Mini-batch 稀疏主成分分析。

示例

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

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

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