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 代表逐元素的矩陣範數,即矩陣中所有元素的絕對值之總和。 這是透過重複迭代輸入資料的迷你批次來完成的。

請在 使用者指南 中閱讀更多資訊。

參數:
X類陣列,形狀為 (n_samples, n_features)

資料矩陣。

n_components整數或 None,預設值為 2

要提取的字典原子數量。 如果為 None,則 n_components 會設定為 n_features

alpha浮點數,預設值為 1

控制稀疏性的參數。

max_iter整數,預設值為 100

在獨立於任何提前停止標準的啟發式方法停止之前,對完整資料集的最大迭代次數。

在 1.1 版中新增。

return_code布林值,預設值為 True

是否同時返回程式碼 U 或僅返回字典 V

dict_init形狀為 (n_components, n_features) 的 ndarray,預設值為 None

用於熱啟動情境的字典初始值。 如果為 None,則字典的初始值是透過 randomized_svd 以資料的 SVD 分解建立的。

callback可呼叫物件,預設值為 None

在每次迭代結束時會被呼叫的可呼叫物件。

batch_size整數,預設值為 256

每個批次要取得的樣本數量。

在 1.3 版中變更:batch_size 的預設值在 1.3 版中從 3 變更為 256。

verbose布林值,預設值為 False

用來控制程序的詳細程度。

shuffle布林值,預設值為 True

是否在將資料分割成批次之前先隨機排序。

n_jobs整數,預設值為 None

要執行的平行工作數量。除非在 joblib.parallel_backend 環境中,否則 None 表示 1。 -1 表示使用所有處理器。 如需更多詳細資訊,請參閱詞彙表

method{‘lars’, ‘cd’},預設值為 ‘lars’
  • 'lars':使用最小角度迴歸法來解決 Lasso 問題 (linear_model.lars_path);

  • 'cd':使用座標下降法來計算 Lasso 解 (linear_model.Lasso)。 如果估計的元件是稀疏的,Lars 將會更快。

random_state整數、RandomState 執行個體或 None,預設值為 None

用於在未指定 dict_init 時初始化字典、在 shuffle 設定為 True 時隨機排序資料,以及更新字典。 傳遞整數以在多次函式呼叫中產生可重複的結果。 請參閱 詞彙表

positive_dict布林值,預設值為 False

是否在尋找字典時強制執行正數。

在 0.20 版中新增。

positive_code布林值,預設值為 False

是否在尋找程式碼時強制執行正數。

在 0.20 版中新增。

method_max_iter整數,預設值為 1000

在解決 lasso 問題時要執行的最大迭代次數。

在 0.22 版中新增。

tol浮點數,預設值為 1e-3

根據字典在 2 個步驟之間的差異範數來控制提前停止。

若要停用基於字典變更的提前停止,請將 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...)