在线字典学习#
- 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)[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 代表弗罗贝尼乌斯范数,||.||_1,1 代表逐元素矩阵范数,即矩阵中所有元素绝对值之和。这是通过反复迭代小批量数据(通过切片输入数据)来实现的。 - 更多信息请参见 用户指南。 - 参数:
- X形状为 (n_samples, n_features) 的类数组
- 数据矩阵。 
- n_componentsint 或 None,默认为 2
- 要提取的字典原子数。如果为 None,则 - n_components设置为- n_features。
- alphafloat,默认为 1
- 稀疏性控制参数。 
- max_iterint,默认为 100
- 在停止任何提前停止标准启发式方法之前,对完整数据集进行迭代的最大次数。 - 1.1 版本新增。 
- return_codebool,默认为 True
- 是否也返回代码 U,或者只返回字典 - V。
- dict_init形状为 (n_components, n_features) 的 ndarray,默认为 None
- 用于热启动场景的字典初始值。如果为 - None,则字典的初始值将使用数据的 SVD 分解创建,方法为- randomized_svd。
- callbackcallable,默认为 None
- 在每次迭代结束时调用的可调用对象。 
- batch_sizeint,默认为 256
- 每次批量处理的样本数。 - 1.3 版本变更: 1.3 版本中 - batch_size的默认值从 3 更改为 256。
- verbosebool,默认为 False
- 控制过程的详细程度。 
- shufflebool,默认为 True
- 是否在将数据分成批次之前对其进行混洗。 
- n_jobsint,默认为 None
- 要运行的并行作业数。 - None表示 1,除非在- joblib.parallel_backend上下文中。- -1表示使用所有处理器。更多详情请参见 词汇表。
- method{'lars', 'cd'},默认为 'lars'
- 'lars':使用最小角回归方法求解 lasso 问题(- linear_model.lars_path);
- 'cd':使用坐标下降法计算 Lasso 解(- linear_model.Lasso)。如果估计的成分是稀疏的,则 Lars 会更快。
 
- random_stateint、RandomState 实例或 None,默认为 None
- 用于在未指定 - dict_init时初始化字典,在- shuffle设置为- True时随机打乱数据,以及更新字典。传递一个整数以在多次函数调用中获得可重复的结果。参见 词汇表。
- positive_dictbool,默认为 False
- 查找字典时是否强制执行正则性。 - 0.20 版本新增。 
- positive_codebool,默认为 False
- 查找代码时是否强制执行正则性。 - 0.20 版本新增。 
- method_max_iterint,默认为 1000
- 求解 lasso 问题时要执行的最大迭代次数。 - 0.22 版本新增。 
- tolfloat,默认为 1e-3
- 根据两次迭代之间字典差异的范数控制提前停止。 - 要禁用基于字典变化的提前停止,请将 - tol设置为 0.0。- 1.1 版本新增。 
- max_no_improvementint,默认为 10
- 根据连续未在平滑成本函数上产生改进的小批量数量控制提前停止。 - 要禁用基于成本函数的收敛检测,请将 - max_no_improvement设置为 None。- 1.1 版本新增。 
 
- 返回值:
- code形状为 (n_samples, n_components) 的 ndarray
- 稀疏代码(仅当 - return_code=True时返回)。
- dictionary形状为 (n_components, n_features) 的 ndarray
- 字典学习问题的解。 
- 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...) 
