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 代表 Frobenius 範數,而 ||.||_1,1 代表逐項矩陣範數,即矩陣中所有項的絕對值總和。
更多資訊請參閱使用者指南。
- 參數:
- X類陣列,形狀為 (n_samples, n_features)
資料矩陣。
- n_componentsint
要提取的字典原子數量。
- alphaint 或 float
控制稀疏性的參數。
- max_iterint,預設值=100
要執行的最大迭代次數。
- tolfloat,預設值=1e-8
停止條件的容忍度。
- method{‘lars’, ‘cd’},預設值=’lars’
使用的方法
'lars'
:使用最小角度回歸方法來解決套索問題 (linear_model.lars_path
);問題 (
linear_model.lars_path
);
'cd'
:使用座標下降法來計算 Lasso 解 (linear_model.Lasso
)。如果估計的成分是稀疏的,Lars 會更快。
- n_jobsint,預設值=None
要執行的並行作業數。
None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。請參閱詞彙表以了解更多詳細資訊。- dict_init形狀為 (n_components, n_features) 的 ndarray,預設值=None
用於熱啟動情境的字典初始值。僅當
code_init
和dict_init
都不是 None 時才使用。- code_init形狀為 (n_samples, n_components) 的 ndarray,預設值=None
用於熱啟動情境的稀疏碼初始值。僅當
code_init
和dict_init
都不是 None 時才使用。- callback可呼叫物件,預設值=None
每五次迭代時調用的可呼叫物件。
- verbosebool,預設值=False
控制程序的詳細程度。
- random_stateint、RandomState 實例或 None,預設值=None
用於隨機初始化字典。傳遞一個 int 以在多個函式呼叫中產生可重複的結果。請參閱詞彙表。
- return_n_iterbool,預設值=False
是否傳回迭代次數。
- positive_dictbool,預設值=False
是否在尋找字典時強制執行正數。
在 0.20 版中新增。
- positive_codebool,預設值=False
是否在尋找程式碼時強制執行正數。
在 0.20 版中新增。
- method_max_iterint,預設值=1000
要執行的最大迭代次數。
在 0.22 版中新增。
- 返回:
- code形狀為 (n_samples, n_components) 的 ndarray
矩陣分解中的稀疏碼因子。
- dictionary形狀為 (n_components, n_features) 的 ndarray,
矩陣分解中的字典因子。
- 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...)