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_initdict_init 都不是 None 時才使用。

code_init形狀為 (n_samples, n_components) 的 ndarray,預設值=None

用於熱啟動情境的稀疏碼初始值。僅當 code_initdict_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...)