小批量字典學習 (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 版本中新增。

屬性:
components_形狀為 (n_components, n_features) 的 ndarray

從資料中提取的成分。

n_features_in_int

fit 期間看到的特徵數量。

0.24 版本新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時定義。

1.0 版本新增。

n_iter_int

完整資料集的迭代次數。

n_steps_int

已處理的迷你批次數量。

在 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 將轉換器擬合到 Xy,並傳回 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

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定未變更

1.4 版本新增:新增 "polars" 選項。

傳回值:
self估算器實例

估算器實例。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

傳回值:
self估算器實例

估算器實例。

transform(X)[原始碼]#

將資料編碼為字典原子的一種稀疏組合。

編碼方法由物件參數 transform_algorithm 決定。

參數:
X形狀為 (n_samples, n_features) 的 ndarray

要轉換的測試資料,必須具有與用於訓練模型的資料相同的特徵數量。

傳回值:
X_new形狀為 (n_samples, n_components) 的 ndarray

已轉換的資料。