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 表示逐元素矩阵范数,即矩阵中所有元素的绝对值之和。这是通过对输入数据进行切片,反复迭代小批量数据来完成的。
在用户指南中了解更多信息。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
数据矩阵。
- n_componentsint or None, default=2
要提取的字典原子数量。如果为 None,则
n_components将被设置为n_features。- alphafloat, default=1
稀疏性控制参数。
- max_iterint, default=100
Maximum number of iterations over the complete dataset before stopping independently of any early stopping criterion heuristics.
版本 1.1 中新增。
- return_codebool, default=True
是否也返回稀疏编码 U,还是仅返回字典
V。- dict_initndarray of shape (n_components, n_features), default=None
用于“热启动”场景的字典的初始值。如果为
None,则字典的初始值将通过数据的 SVD 分解创建,使用randomized_svd。- callbackcallable, default=None
在每次迭代结束时调用的可调用对象。
- batch_sizeint, default=256
每个批次中要处理的样本数量。
版本 1.3 中已更改:
batch_size的默认值在版本 1.3 中从 3 更改为 256。- verbosebool, default=False
控制过程的详细程度。
- shufflebool, default=True
在将数据分割成批次之前是否打乱数据。
- n_jobsint, default=None
要并行运行的作业数量。
None表示 1,除非在joblib.parallel_backend上下文中。-1表示使用所有处理器。有关更多详细信息,请参阅词汇表。- method{‘lars’, ‘cd’}, default=’lars’
'lars':使用最小角度回归方法求解 lasso 问题(linear_model.lars_path);'cd': 使用坐标下降方法计算 Lasso 解(linear_model.Lasso)。如果估计的组件是稀疏的,Lars 会更快。
- random_stateint, RandomState instance or None, default=None
用于在未指定
dict_init时初始化字典,在shuffle设置为True时随机打乱数据,以及更新字典。传入一个整数可以在多次函数调用中获得可重现的结果。参阅词汇表。- positive_dictbool, default=False
查找字典时是否强制执行非负性。
0.20 版本新增。
- positive_codebool, default=False
查找代码时是否强制执行非负性。
0.20 版本新增。
- method_max_iterint, default=1000
求解 lasso 问题时要执行的最大迭代次数。
版本 0.22 新增。
- tolfloat, default=1e-3
根据两次迭代之间字典差异的范数控制提前停止。
要禁用基于字典更改的提前停止,请将
tol设置为 0.0。版本 1.1 中新增。
- max_no_improvementint, default=10
根据连续的 mini batch 数量控制提前停止,这些 mini batch 对平滑成本函数没有改进。
要禁用基于成本函数的收敛检测,请将
max_no_improvement设置为 None。版本 1.1 中新增。
- 返回:
- codendarray of shape (n_samples, n_components),
稀疏编码(仅当
return_code=True时返回)。- dictionaryndarray of shape (n_components, n_features),
字典学习问题的解。
- n_iter整型
运行的迭代次数。仅当
return_n_iter设置为True时返回。
另请参阅
dict_learning解决字典学习矩阵分解问题。
DictionaryLearning查找一个稀疏编码数据的字典。
MiniBatchDictionaryLearning字典学习算法的一个更快、更不准确的版本。
SparsePCA稀疏主成分分析。
MiniBatchSparsePCAMini-batch 稀疏主成分分析。
示例
>>> 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.053)