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表示逐元素矩阵范数,即矩阵中所有元素的绝对值之和。这是通过反复迭代小批量数据切片来实现的。
更多信息请参阅 用户指南 。
- Parameters:
- X形状为(n_samples, n_features)的类数组
数据矩阵。
- n_componentsint或None, 默认=2
要提取的字典原子数量。如果为None,则
n_components
设置为n_features
。- alphafloat, 默认=1
稀疏控制参数。
- max_iterint, 默认=100
在停止之前对整个数据集的最大迭代次数,独立于任何早期停止标准的启发式方法。
Added in version 1.1.
Deprecated since version 1.4:
max_iter=None
在1.4中已弃用,并将在1.6中移除。 请使用默认值(即100
)代替。- return_codebool, 默认=True
是否也返回编码U,还是仅返回字典
V
。- dict_init形状为(n_components, n_features)的ndarray, 默认=None
用于热启动场景的字典初始值。 如果为
None
,则通过randomized_svd
对数据进行SVD分解来创建字典的初始值。- callback可调用对象, 默认=None
在每次迭代结束时调用的可调用对象。
- batch_sizeint, 默认=256
每个批次中取样的样本数量。
Changed in version 1.3: 在版本1.3中,
batch_size
的默认值从3改为256。- verbosebool, 默认=False
控制过程的冗长程度。
- shufflebool, 默认=True
在将数据分割成批次之前是否打乱数据。
- n_jobsint, 默认=None
并行运行的作业数量。
None
表示1,除非在:obj: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
时随机打乱数据,以及更新字典。传递一个int以在多次函数调用中获得可重复的结果。 更多详情请参见 术语表 。- positive_dictbool, 默认=False
在找到字典时是否强制正性。
Added in version 0.20.
- positive_codebool, 默认=False
在找到编码时是否强制正性。
Added in version 0.20.
- method_max_iterint, 默认=1000
解决lasso问题时执行的最大迭代次数。
Added in version 0.22.
- tolfloat, 默认=1e-3
根据字典在两个步骤之间的差异的范数控制早期停止。
要禁用基于字典变化的早期停止,请将
tol
设置为0.0。Added in version 1.1.
- max_no_improvementint, 默认=10
根据连续未改善平滑成本函数的小批量数量控制早期停止。
要禁用基于成本函数的收敛检测,请将
max_no_improvement
设置为None。Added in version 1.1.
- Returns:
- code形状为(n_samples, n_components)的ndarray,
稀疏编码(仅在
return_code=True
时返回)。- dictionary形状为(n_components, n_features)的ndarray,
字典学习问题的解决方案。
- n_iterint
运行的迭代次数。仅在
return_n_iter
设置为True
时返回。
See also
dict_learning
解决字典学习矩阵分解问题。
DictionaryLearning
找到一个稀疏编码数据的字典。
MiniBatchDictionaryLearning
一个更快、准确度较低的字典学习算法版本。
SparsePCA
稀疏主成分分析。
MiniBatchSparsePCA
小批量稀疏主成分分析。
Examples
>>> 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) 0.53...
我们可以比较稀疏编码信号的重构误差的平均平方欧几里得范数与原始信号的平方欧几里得范数:
>>> X_hat = U @ V >>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1)) 0.05...