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)