DictionaryLearning#
- класс sklearn.decomposition.DictionaryLearning(n_components=None, *, alpha=1, max_iter=1000, tol=1e-08, fit_algorithm='lars', transform_algorithm='omp', transform_n_nonzero_coefs=None, transform_alpha=None, n_jobs=None, code_init=None, dict_init=None, callback=None, verbose=False, split_sign=False, random_state=None, positive_code=False, positive_dict=False, transform_max_iter=1000)[источник]#
Словарное обучение.
Находит словарь (набор атомов), который хорошо работает для разреженного кодирования подогнанных данных.
Решает задачу оптимизации:
(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
Количество элементов словаря для извлечения. Если None, то
n_componentsустановлено вn_features.- alphafloat, по умолчанию=1.0
Параметр управления разреженностью.
- max_iterint, по умолчанию=1000
Максимальное количество итераций для выполнения.
- tolfloat, по умолчанию=1e-8
Допуск для численной ошибки.
- fit_algorithm{‘lars’, ‘cd’}, default=’lars’
'lars': использует метод наименьшего угла регрессии для решения задачи лассо (lars_path);'cd': использует метод координатного спуска для вычисления решения Lasso (Lasso). Lars будет быстрее, если предполагаемые компоненты разрежены.
Добавлено в версии 0.17: cd метод координатного спуска для повышения скорости.
- transform_algorithm{‘lasso_lars’, ‘lasso_cd’, ‘lars’, ‘omp’, ‘threshold’}, по умолчанию=’omp’
Алгоритм, используемый для преобразования данных:
'lars': использует метод наименьшего угла регрессии (lars_path);'lasso_lars': использует Lars для вычисления решения Lasso.'lasso_cd': использует метод координатного спуска для вычисления решения Lasso (Lasso).'lasso_lars'будет быстрее, если оцененные компоненты разрежены.'omp': использует ортогональный жадный поиск для оценки разреженного решения.'threshold': обнуляет все коэффициенты меньше alpha из проекцииdictionary * X'.
Добавлено в версии 0.17: lasso_cd метод координатного спуска для повышения скорости.
- transform_n_nonzero_coefsint, default=None
Количество ненулевых коэффициентов для целевого значения в каждом столбце решения. Используется только
algorithm='lars'иalgorithm='omp'. ЕслиNone, затемtransform_n_nonzero_coefs=int(n_features / 10).- transform_alphafloat, по умолчанию=None
Если
algorithm='lasso_lars'илиalgorithm='lasso_cd',alphaявляется штрафом, применяемым к норме L1. Еслиalgorithm='threshold',alphaявляется абсолютным значением порога, ниже которого коэффициенты будут сжаты до нуля. ЕслиNone, по умолчаниюalpha.Изменено в версии 1.2: Когда None, значение по умолчанию изменено с 1.0 на
alpha.- n_jobsint или None, по умолчанию=None
Количество параллельных задач для выполнения.
Noneозначает 1, если только не вjoblib.parallel_backendконтекст.-1означает использование всех процессоров. См. Глоссарий для получения дополнительной информации.- code_initndarray формы (n_samples, n_components), по умолчанию=None
Начальное значение для кода, для теплого перезапуска. Используется только если
code_initиdict_initне являются None.- dict_initndarray формы (n_components, n_features), default=None
Начальные значения для словаря, для теплого перезапуска. Используется только если
code_initиdict_initне являются None.- callbackвызываемый объект, по умолчанию=None
Вызываемый объект, который запускается каждые пять итераций.
Добавлено в версии 1.3.
- verbosebool, по умолчанию=False
Для управления подробностью процедуры.
- split_signbool, по умолчанию=False
Разделять ли разреженный вектор признаков на конкатенацию его отрицательной части и его положительной части. Это может улучшить производительность последующих классификаторов.
- random_stateint, экземпляр RandomState или None, по умолчанию=None
Используется для инициализации словаря, когда
dict_initне указан, случайное перемешивание данных, когдаshuffleустановлено вTrue, и обновление словаря. Передайте int для воспроизводимых результатов при нескольких вызовах функции. См. Глоссарий.- positive_codebool, по умолчанию=False
Следует ли обеспечивать положительность при нахождении кода.
Добавлено в версии 0.20.
- positive_dictbool, по умолчанию=False
Следует ли обеспечивать положительность при поиске словаря.
Добавлено в версии 0.20.
- transform_max_iterint, по умолчанию=1000
Максимальное количество итераций для выполнения, если
algorithm='lasso_cd'или'lasso_lars'.Добавлено в версии 0.22.
- Атрибуты:
- components_ndarray формы (n_components, n_features)
атомы словаря, извлечённые из данных
- error_массив
вектор ошибок на каждой итерации
- n_features_in_int
Количество признаков, замеченных во время fit.
Добавлено в версии 0.24.
- feature_names_in_ndarray формы (
n_features_in_,) Имена признаков, наблюдаемых во время fit. Определено только когда
Xимеет имена признаков, которые все являются строками.Добавлено в версии 1.0.
- n_iter_int
Количество выполненных итераций.
Смотрите также
MiniBatchDictionaryLearningБолее быстрая, но менее точная версия алгоритма обучения словарю.
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 DictionaryLearning >>> 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 = DictionaryLearning( ... n_components=15, transform_algorithm='lasso_lars', transform_alpha=0.1, ... random_state=42, ... ) >>> X_transformed = dict_learner.fit(X).transform(X)
Мы можем проверить уровень разреженности
X_transformed:>>> np.mean(X_transformed == 0) np.float64(0.527)
Мы можем сравнить среднюю квадратичную евклидову норму ошибки реконструкции разреженно закодированного сигнала относительно квадратичной евклидовой нормы исходного сигнала:
>>> 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.056)
- fit(X, y=None)[источник]#
Обучить модель на данных из X.
- Параметры:
- Xarray-like формы (n_samples, n_features)
Вектор обучения, где
n_samplesэто количество образцов иn_featuresэто количество признаков.- yИгнорируется
Не используется, присутствует для согласованности API по соглашению.
- Возвращает:
- selfobject
Возвращает сам экземпляр.
- fit_transform(X, y=None)[источник]#
Обучить модель на данных из X и вернуть преобразованные данные.
- Параметры:
- Xarray-like формы (n_samples, n_features)
Вектор обучения, где
n_samplesэто количество образцов иn_featuresэто количество признаков.- yИгнорируется
Не используется, присутствует для согласованности API по соглашению.
- Возвращает:
- Vndarray формы (n_samples, n_components)
Преобразованные данные.
- get_feature_names_out(input_features=None)[источник]#
Получить имена выходных признаков для преобразования.
Имена признаков на выходе будут иметь префикс в виде имени класса в нижнем регистре. Например, если преобразователь выводит 3 признака, то имена признаков на выходе:
["class_name0", "class_name1", "class_name2"].- Параметры:
- input_featuresarray-like из str или None, по умолчанию=None
Используется только для проверки имен признаков с именами, встреченными в
fit.
- Возвращает:
- feature_names_outndarray из str объектов
Преобразованные имена признаков.
- 6332()[источник]#
Получить маршрутизацию метаданных этого объекта.
Пожалуйста, проверьте Руководство пользователя о том, как работает механизм маршрутизации.
- Возвращает:
- маршрутизацияMetadataRequest
A
MetadataRequestИнкапсуляция информации о маршрутизации.
- get_params(глубокий=True)[источник]#
Получить параметры для этого оценщика.
- Параметры:
- глубокийbool, по умолчанию=True
Если True, вернет параметры для этого оценщика и вложенных подобъектов, которые являются оценщиками.
- Возвращает:
- paramsdict
Имена параметров, сопоставленные с их значениями.
- inverse_transform(X)[источник]#
Преобразование данных обратно в исходное пространство.
- Параметры:
- Xarray-like формы (n_samples, n_components)
Данные для обратного преобразования. Должны иметь то же количество компонентов, что и данные, использованные для обучения модели.
- Возвращает:
- X_originalndarray формы (n_samples, n_features)
Преобразованные данные.
- set_output(*, преобразовать=None)[источник]#
Установить контейнер вывода.
См. Введение API set_output для примера использования API.
- Параметры:
- преобразовать{“default”, “pandas”, “polars”}, по умолчанию=None
Настройка вывода
transformиfit_transform."default": Формат вывода трансформера по умолчанию"pandas": DataFrame вывод"polars": Вывод PolarsNone: Конфигурация преобразования не изменена
Добавлено в версии 1.4:
"polars"опция была добавлена.
- Возвращает:
- selfэкземпляр estimator
Экземпляр оценщика.
- set_params(**params)[источник]#
Установить параметры этого оценщика.
Метод работает как на простых оценщиках, так и на вложенных объектах (таких как
Pipeline). Последние имеют параметры видачтобы можно было обновить каждый компонент вложенного объекта.__ - Параметры:
- **paramsdict
Параметры оценщика.
- Возвращает:
- selfэкземпляр estimator
Экземпляр оценщика.
- преобразовать(X)[источник]#
Закодируйте данные как разреженную комбинацию атомов словаря.
Метод кодирования определяется параметром объекта
transform_algorithm.- Параметры:
- Xndarray формы (n_samples, n_features)
Тестовые данные для преобразования, должны иметь то же количество признаков, что и данные, использованные для обучения модели.
- Возвращает:
- X_newndarray формы (n_samples, n_components)
Преобразованные данные.