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...)