小批量字典學習 (MiniBatchDictionaryLearning)#
- class sklearn.decomposition.MiniBatchDictionaryLearning(n_components=None, *, alpha=1, max_iter=1000, fit_algorithm='lars', n_jobs=None, batch_size=256, shuffle=True, dict_init=None, transform_algorithm='omp', transform_n_nonzero_coefs=None, transform_alpha=None, verbose=False, split_sign=False, random_state=None, positive_code=False, positive_dict=False, transform_max_iter=1000, callback=None, tol=0.001, max_no_improvement=10)[原始碼]#
小批量字典學習。
尋找一個字典(一組原子),它在稀疏編碼擬合的資料時表現良好。
解決最佳化問題
(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
||.||_Fro 代表佛羅貝尼烏斯範數,||.||_1,1 代表逐項矩陣範數,它是矩陣中所有項的絕對值之和。
在使用者指南中閱讀更多內容。
- 參數:
- n_componentsint, default=None
要提取的字典元素數量。
- alphafloat, default=1
稀疏控制參數。
- max_iterint, default=1_000
在停止獨立於任何早期停止準則啟發法之前,完整資料集的最大迭代次數。
在 1.1 版本中新增。
- fit_algorithm{‘lars’, ‘cd’}, default=’lars’
使用的演算法
'lars'
: 使用最小角度迴歸方法來解決套索問題 (linear_model.lars_path
)'cd'
: 使用座標下降法來計算套索解 (linear_model.Lasso
)。如果估算的元件是稀疏的,則 Lars 會更快。
- n_jobsint, default=None
要執行的平行作業數量。
None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。請參閱詞彙表以取得更多詳細資訊。- batch_sizeint, default=256
每個小批量中的樣本數量。
在 1.3 版本中變更:
batch_size
的預設值在 1.3 版本中從 3 變更為 256。- shufflebool, default=True
在形成批次之前是否對樣本進行洗牌。
- dict_init形狀為 (n_components, n_features) 的 ndarray,default=None
在溫啟動情境中字典的初始值。
- transform_algorithm{‘lasso_lars’, ‘lasso_cd’, ‘lars’, ‘omp’, ‘threshold’}, default=’omp’
用於轉換資料的演算法
'lars'
: 使用最小角度迴歸方法 (linear_model.lars_path
);'lasso_lars'
: 使用 Lars 來計算套索解。'lasso_cd'
: 使用座標下降法來計算套索解 (linear_model.Lasso
)。如果估算的元件是稀疏的,則'lasso_lars'
會更快。'omp'
: 使用正交匹配追蹤來估算稀疏解。'threshold'
: 將投影dictionary * X'
中所有小於 alpha 的係數壓縮為零。
- transform_n_nonzero_coefsint, default=None
目標在解的每一欄中非零係數的數量。這僅由
algorithm='lars'
和algorithm='omp'
使用。如果None
,則transform_n_nonzero_coefs=int(n_features / 10)
。- transform_alphafloat, default=None
如果
algorithm='lasso_lars'
或algorithm='lasso_cd'
,則alpha
是應用於 L1 範數的懲罰。如果algorithm='threshold'
,則alpha
是低於該臨界值係數將壓縮為零的絕對值。如果None
,則預設為alpha
。在 1.2 版本中變更: 當為 None 時,預設值從 1.0 變更為
alpha
。- verbosebool 或 int, default=False
控制程序的詳細程度。
- split_signbool, default=False
是否將稀疏特徵向量拆分為其負數部分和正數部分的串聯。這可以提高下游分類器的效能。
- random_stateint、RandomState 實例或 None, default=None
當未指定
dict_init
時用於初始化字典、當shuffle
設定為True
時隨機洗牌資料以及更新字典。傳遞 int 以在多個函數呼叫中產生可重複的結果。請參閱詞彙表。- positive_codebool, default=False
是否在尋找代碼時強制執行正值。
0.20 版本新增。
- positive_dictbool,預設值為 False
是否在尋找字典時強制執行正值。
0.20 版本新增。
- transform_max_iterint,預設值為 1000
如果
algorithm='lasso_cd'
或'lasso_lars'
,則執行的最大迭代次數。0.22 版本新增。
- callback可呼叫物件,預設值為 None
在每次迭代結束時會被調用的可呼叫物件。
在 1.1 版本中新增。
- tolfloat,預設值為 1e-3
根據字典在 2 個步驟之間的差異範數來控制提前停止。
要停用基於字典變化的提前停止,請將
tol
設為 0.0。在 1.1 版本中新增。
- max_no_improvementint,預設值為 10
根據連續未能在平滑成本函數上產生改善的迷你批次數量來控制提前停止。
要停用基於成本函數的收斂偵測,請將
max_no_improvement
設為 None。在 1.1 版本中新增。
- 屬性:
另請參閱
DictionaryLearning
尋找可稀疏編碼資料的字典。
MiniBatchSparsePCA
迷你批次稀疏主成分分析。
SparseCoder
從固定的預先計算字典中尋找資料的稀疏表示。
SparsePCA
稀疏主成分分析。
參考文獻
J. Mairal、F. Bach、J. Ponce、G. Sapiro,2009 年:用於稀疏編碼的線上字典學習 (https://www.di.ens.fr/~fbach/mairal_icml09.pdf)
範例
>>> import numpy as np >>> from sklearn.datasets import make_sparse_coded_signal >>> from sklearn.decomposition import MiniBatchDictionaryLearning >>> X, dictionary, code = make_sparse_coded_signal( ... n_samples=30, n_components=15, n_features=20, n_nonzero_coefs=10, ... random_state=42) >>> dict_learner = MiniBatchDictionaryLearning( ... n_components=15, batch_size=3, transform_algorithm='lasso_lars', ... transform_alpha=0.1, max_iter=20, random_state=42) >>> X_transformed = dict_learner.fit_transform(X)
我們可以檢查
X_transformed
的稀疏程度>>> np.mean(X_transformed == 0) > 0.5 np.True_
我們可以比較稀疏編碼信號的重建誤差的平均平方歐幾里得範數相對於原始信號的平方歐幾里得範數
>>> X_hat = X_transformed @ dict_learner.components_ >>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1)) np.float64(0.052...)
- fit(X, y=None)[原始碼]#
從 X 中的資料擬合模型。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。- y忽略
未使用,按照慣例為了 API 的一致性而存在。
- 傳回值:
- self物件
傳回實例本身。
- fit_transform(X, y=None, **fit_params)[原始碼]#
將資料擬合,然後轉換資料。
使用可選參數
fit_params
將轉換器擬合到X
和y
,並傳回X
的轉換版本。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None
目標值(無監督轉換為 None)。
- **fit_paramsdict
其他擬合參數。
- 傳回值:
- X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列
已轉換的陣列。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
輸出特徵名稱將以小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:
["class_name0", "class_name1", "class_name2"]
。- 參數:
- input_features字串的類陣列或 None,預設值為 None
僅用於使用
fit
中看到的名稱來驗證特徵名稱。
- 傳回值:
- feature_names_out字串物件的 ndarray
已轉換的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用者指南,瞭解路由機制如何運作。
- 傳回值:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,將傳回此估算器和所包含的子物件(屬於估算器)的參數。
- 傳回值:
- paramsdict
參數名稱對應到它們的值。
- partial_fit(X, y=None)[原始碼]#
使用 X 中的資料作為迷你批次更新模型。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。- y忽略
未使用,按照慣例為了 API 的一致性而存在。
- 傳回值:
- self物件
傳回實例本身。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
有關如何使用 API 的範例,請參閱 導入 set_output API。
- 參數:
- transform{“default”, “pandas”, “polars”},預設值為 None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定未變更
1.4 版本新增:新增
"polars"
選項。
- 傳回值:
- self估算器實例
估算器實例。