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
anddict_init
are not None.- code_init形状的nd数组(n_samples,n_components),默认=无
热重启场景的稀疏代码的初始值。仅在以下情况下使用
code_init
和dict_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...)