dict_learning#
- sklearn.decomposition.dict_learning(X, n_components, *, alpha, max_iter=100, tol=1e-08, метод='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 обозначает норму Фробениуса, а ||.||_1,1 обозначает поэлементную матричную норму, которая является суммой абсолютных значений всех элементов матрицы.
Подробнее в Руководство пользователя.
- Параметры:
- Xarray-like формы (n_samples, n_features)
Матрица данных.
- n_componentsint
Количество атомов словаря для извлечения.
- alphaint или float
Параметр управления разреженностью.
- max_iterint, по умолчанию=100
Максимальное количество итераций для выполнения.
- tolfloat, по умолчанию=1e-8
Допуск для условия остановки.
- метод{‘lars’, ‘cd’}, default=’lars’
Используемый метод:
'lars': использует метод наименьшего угла регрессии для решения лассопроблема (
linear_model.lars_path);
'cd': использует метод координатного спуска для вычисления решения Lasso (linear_model.Lasso). Lars будет быстрее, если оцененные компоненты разрежены.
- n_jobsint, default=None
Количество параллельных задач для выполнения.
Noneозначает 1, если только не вjoblib.parallel_backendконтекст.-1означает использование всех процессоров. См. Глоссарий для получения дополнительной информации.- dict_initndarray формы (n_components, n_features), default=None
Начальное значение словаря для сценариев тёплого перезапуска. Используется только если
code_initиdict_initне являются None.- code_initndarray формы (n_samples, n_components), по умолчанию=None
Начальное значение разреженного кода для сценариев теплого перезапуска. Используется только если
code_initиdict_initне являются None.- callbackвызываемый объект, по умолчанию=None
Вызываемый объект, который запускается каждые пять итераций.
- verbosebool, по умолчанию=False
Для управления подробностью процедуры.
- random_stateint, экземпляр RandomState или None, по умолчанию=None
Используется для случайной инициализации словаря. Передайте целое число для воспроизводимых результатов при многократных вызовах функции. См. Глоссарий.
- return_n_iterbool, по умолчанию=False
Возвращать или нет количество итераций.
- positive_dictbool, по умолчанию=False
Следует ли обеспечивать положительность при поиске словаря.
Добавлено в версии 0.20.
- positive_codebool, по умолчанию=False
Следует ли обеспечивать положительность при нахождении кода.
Добавлено в версии 0.20.
- method_max_iterint, по умолчанию=1000
Максимальное количество итераций для выполнения.
Добавлено в версии 0.22.
- Возвращает:
- кодndarray формы (n_samples, n_components)
Фактор разреженного кода в матричной факторизации.
- словарьndarray формы (n_components, n_features),
Словарный фактор в матричной факторизации.
- ошибкимассив
Вектор ошибок на каждой итерации.
- 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.62)
Мы можем сравнить среднюю квадратичную евклидову норму ошибки реконструкции разреженно закодированного сигнала относительно квадратичной евклидовой нормы исходного сигнала:
>>> X_hat = U @ V >>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1)) np.float64(0.0192)