Spec-Zone.ru › scikit-learn

2.5. Разложение сигналов на компоненты (задачи факторизации матриц)

2.5.1. Анализ главных компонент (PCA)

2.5.1.1. Точный PCA и вероятностная интерпретация

PCA используется для разложения многомерного набора данных на последовательность ортогональных компонент, объясняющих максимальную долю дисперсии. В scikit-learn PCA реализован как объект преобразователя, который обучает \(n\) компонент в своем методе fit и может применяться к новым данным для их проецирования на эти компоненты.

PCA центрирует входные данные, но не масштабирует каждый признак перед применением SVD. Необязательный параметр whiten=True позволяет проецировать данные на сингулярное пространство, масштабируя каждую компоненту до единичной дисперсии. Это часто полезно, если модели последующего этапа предъявляют строгие требования к изотропности сигнала: например, так происходит в случае машин опорных векторов с RBF-ядром и алгоритма кластеризации K-Means.

Ниже приведен пример набора данных ирисов, состоящего из 4 признаков и спроецированного на 2 измерения, объясняющих наибольшую долю дисперсии:

../_images/sphx_glr_plot_pca_vs_lda_001.png

Объект PCA также предоставляет вероятностную интерпретацию PCA, позволяющую оценить правдоподобие данных на основе объясняемой им доли дисперсии. Поэтому в нем реализован метод score, который можно использовать при перекрестной проверке:

../_images/sphx_glr_plot_pca_vs_fa_model_selection_001.png

Примеры

  • Анализ главных компонент (PCA) на наборе данных ирисов
  • Сравнение двумерных проекций набора данных ирисов с помощью LDA и PCA
  • Выбор модели с помощью вероятностного PCA и факторного анализа (FA)

2.5.1.2. Инкрементальный PCA

Объект PCA очень полезен, но имеет некоторые ограничения при работе с большими наборами данных. Самое существенное ограничение состоит в том, что PCA поддерживает только пакетную обработку, то есть все обрабатываемые данные должны помещаться в оперативную память. Объект IncrementalPCA использует другой способ обработки и позволяет выполнять вычисления по частям, результаты которых почти в точности совпадают с результатами PCA, обрабатывая данные мини-пакетами. IncrementalPCA позволяет реализовать анализ главных компонент для данных, не помещающихся в память, одним из следующих способов:

  • Использовать его метод partial_fit для фрагментов данных, последовательно загружаемых с локального жесткого диска или из сетевой базы данных.
  • Вызвать его метод fit для файла, отображенного в память с помощью numpy.memmap.

IncrementalPCA хранит только оценки дисперсий компонент и шума, чтобы инкрементально обновлять explained_variance_ratio_. Поэтому объем используемой памяти зависит от количества образцов в пакете, а не от количества образцов в обрабатываемом наборе данных.

Как и PCA, IncrementalPCA центрирует входные данные, но не масштабирует каждый признак перед применением SVD.

../_images/sphx_glr_plot_incremental_pca_001.png
../_images/sphx_glr_plot_incremental_pca_002.png

Примеры

  • Инкрементальный PCA

2.5.1.3. PCA с использованием рандомизированного SVD

Часто бывает полезно спроецировать данные в пространство меньшей размерности, сохраняющее большую часть дисперсии, отбросив сингулярные векторы компонент, соответствующие меньшим сингулярным значениям.

Например, если мы работаем с изображениями лиц в оттенках серого размером 64x64 пикселя для распознавания лиц, размерность данных равна 4096, и обучение машины опорных векторов с RBF-ядром на таких широких данных выполняется медленно. Кроме того, мы знаем, что внутренняя размерность данных намного меньше 4096, поскольку все изображения человеческих лиц в некоторой степени похожи друг на друга. Образцы лежат на многообразии гораздо меньшей размерности (например, около 200). Алгоритм PCA можно использовать для линейного преобразования данных, одновременно уменьшая размерность и сохраняя большую часть объясненной дисперсии.

В этом случае очень полезен класс PCA с необязательным параметром svd_solver='randomized': поскольку мы собираемся отбросить большинство сингулярных векторов, гораздо эффективнее ограничить вычисления приближенной оценкой сингулярных векторов, которые мы сохраним для выполнения преобразования.

Например, ниже показаны 16 портретов образцов (центрированных относительно 0.0) из набора данных Olivetti. Справа представлены первые 16 сингулярных векторов, преобразованных в портреты. Поскольку нам нужны только 16 старших сингулярных векторов набора данных с размером \(n_{samples} = 400\) и \(n_{features} = 64 \times 64 = 4096\), вычисление занимает менее 1 с:

orig_img pca_img

Если обозначить \(n_{\max} = \max(n_{\mathrm{samples}}, n_{\mathrm{features}})\) и \(n_{\min} = \min(n_{\mathrm{samples}}, n_{\mathrm{features}})\), временная сложность рандомизированного PCA составляет \(O(n_{\max}^2 \cdot n_{\mathrm{components}})\) вместо \(O(n_{\max}^2 \cdot n_{\min})\) для точного метода, реализованного в PCA.

Объем памяти для рандомизированного PCA также пропорционален \(2 \cdot n_{\max} \cdot n_{\mathrm{components}}\) вместо \(n_{\max} \cdot n_{\min}\) для точного метода.

Примечание: реализация inverse_transform в PCA с svd_solver='randomized' не является точным обратным преобразованием transform, даже если whiten=False (значение по умолчанию).

Примеры

  • Пример распознавания лиц с использованием собственных лиц и SVM
  • Разложения набора данных лиц

Литература

  • Алгоритм 4.3 в статье «Поиск структуры с помощью случайности: стохастические алгоритмы для построения приближенных разложений матриц» Halko и др., 2009
  • «Реализация рандомизированного алгоритма анализа главных компонент» A. Szlam и др., 2014

2.5.1.4. Разреженный анализ главных компонент (SparsePCA и MiniBatchSparsePCA)

SparsePCA — это вариант PCA, цель которого — извлечь набор разреженных компонент, наилучшим образом восстанавливающих данные.

Мини-пакетный разреженный PCA (MiniBatchSparsePCA) — это более быстрый, но менее точный вариант SparsePCA. Повышение скорости достигается за счет итераций по небольшим фрагментам набора признаков в течение заданного числа итераций.

Недостаток анализа главных компонент (PCA) состоит в том, что компоненты, извлеченные этим методом, имеют исключительно плотное представление, то есть их коэффициенты ненулевые при представлении в виде линейных комбинаций исходных переменных. Это может затруднить интерпретацию. Во многих случаях реальные компоненты можно более естественно представить как разреженные векторы; например, при распознавании лиц компоненты могут естественным образом соответствовать частям лица.

Разреженные главные компоненты дают более экономное и интерпретируемое представление, наглядно показывая, какие исходные признаки вносят вклад в различия между образцами.

В следующем примере показаны 16 компонент, извлеченных с помощью разреженного PCA из набора данных лиц Olivetti. Видно, как член регуляризации приводит к появлению множества нулей. Кроме того, естественная структура данных приводит к вертикальному соседству ненулевых коэффициентов. Модель не накладывает это ограничение математически: каждая компонента — это вектор \(h \in \mathbf{R}^{4096}\), и понятие вертикального соседства отсутствует, за исключением наглядной визуализации в виде изображений размером 64x64 пикселя. Локальный характер показанных ниже компонент обусловлен внутренней структурой данных, благодаря которой такие локальные шаблоны минимизируют ошибку восстановления. Существуют нормы, стимулирующие разреженность и учитывающие соседство и различные виды структуры; обзор таких методов см. в [Jen09]. Подробнее об использовании Sparse PCA см. в разделе «Примеры» ниже.

pca_img spca_img

Обратите внимание, что существует множество различных формулировок задачи разреженного PCA. Реализованный здесь вариант основан на [Mrl09] . Решаемая задача оптимизации представляет собой задачу PCA (обучение словаря) с \(\ell_1\)-штрафом для компонент:

\[\begin{split}(U^*, V^*) = \underset{U, V}{\operatorname{arg\,min\,}} & \frac{1}{2} ||X-UV||_{\text{Fro}}^2+\alpha||V||_{1,1} \\ \text{subject to } & ||U_k||_2 \leq 1 \text{ for all } 0 \leq k < n_{components}\end{split}\]

\(||.||_{\text{Fro}}\) обозначает норму Фробениуса, а \(||.||_{1,1}\) — поэлементную матричную норму, равную сумме абсолютных значений всех элементов матрицы. Матричная норма \(||.||_{1,1}\), стимулирующая разреженность, также предотвращает обучение компонент на шуме при небольшом количестве обучающих образцов. Степень штрафа (а значит, и разреженность) можно регулировать с помощью гиперпараметра alpha. Небольшие значения приводят к слабой регуляризации факторизации, а большие обнуляют многие коэффициенты.

Примечание

Хотя класс MiniBatchSparsePCA задуман как онлайн-алгоритм, он не реализует partial_fit, поскольку алгоритм работает онлайн по направлению признаков, а не образцов.

Примеры

  • Разложения набора данных лиц

Литература

[Mrl09]

«Онлайн-обучение словаря для разреженного кодирования» J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009

[Jen09]

«Структурированный разреженный анализ главных компонент» R. Jenatton, G. Obozinski, F. Bach, 2009

2.5.2. Ядерный анализ главных компонент (kPCA)

2.5.2.1. Точный ядерный PCA

KernelPCA — это расширение PCA, обеспечивающее нелинейное снижение размерности с помощью ядер (см. Попарные метрики, меры сходства и ядра) [Scholkopf1997]. У этого метода множество применений, включая удаление шума, сжатие и структурированное предсказание (оценивание зависимости ядра). KernelPCA поддерживает как transform, так и inverse_transform.

../_images/sphx_glr_plot_kernel_pca_002.png

Примечание

KernelPCA.inverse_transform использует гребневую регрессию с ядром для обучения функции, отображающей образцы из базиса PCA в исходное пространство признаков [Bakir2003]. Поэтому восстановление, полученное с помощью KernelPCA.inverse_transform, является приближенным. Дополнительные сведения см. в примере по ссылке ниже.

Примеры

  • Ядерный PCA
  • Удаление шума с изображений с помощью ядерного PCA

Литература

[Scholkopf1997]

Schölkopf, Bernhard, Alexander Smola и Klaus-Robert Müller. «Ядерный анализ главных компонент». Международная конференция по искусственным нейронным сетям. Springer, Берлин, Гейдельберг, 1997.

[Bakir2003]

Bakır, Gökhan H., Jason Weston и Bernhard Schölkopf. «Обучение поиску прообразов». Advances in neural information processing systems 16 (2003): 449-456.

2.5.2.2. Выбор решателя для ядерного PCA

В то время как в PCA количество компонент ограничено количеством признаков, в KernelPCA оно ограничено количеством образцов. Во многих реальных наборах данных содержится большое количество образцов! В таких случаях поиск всех компонент с помощью полного kPCA приводит к напрасной трате вычислительного времени, поскольку данные в основном описываются первыми несколькими компонентами (например, n_components<=100). Иными словами, эффективный ранг центрированной матрицы Грама, для которой при обучении ядерного PCA выполняется собственное разложение, намного меньше ее размера. В такой ситуации приближенные решатели собственных значений позволяют ускорить вычисления с очень небольшой потерей точности.

Решатели собственных значений

Необязательный параметр eigen_solver='randomized' можно использовать для существенного сокращения времени вычислений, если количество запрашиваемых n_components невелико по сравнению с количеством образцов. Для поиска приближенного решения за меньшее время используются методы рандомизированного разложения.

Временная сложность рандомизированного KernelPCA составляет \(O(n_{\mathrm{samples}}^2 \cdot n_{\mathrm{components}})\) вместо \(O(n_{\mathrm{samples}}^3)\) для точного метода, реализованного с помощью eigen_solver='dense'.

Объем памяти для рандомизированного KernelPCA также пропорционален \(2 \cdot n_{\mathrm{samples}} \cdot n_{\mathrm{components}}\) вместо \(n_{\mathrm{samples}}^2\) для точного метода.

Примечание: этот метод совпадает с описанным в разделе PCA с использованием рандомизированного SVD.

Помимо двух описанных выше решателей, eigen_solver='arpack' можно использовать как альтернативный способ получить приближенное разложение. На практике этот метод обеспечивает приемлемое время выполнения только при крайне малом количестве искомых компонент. По умолчанию он включается, если требуемое количество компонент строго меньше 10, а количество образцов строго больше 200. Подробности см. в документации KernelPCA.

Литература

  • плотный решатель: документация scipy.linalg.eigh
  • рандомизированный решатель:

    • Алгоритм 4.3 в статье «Поиск структуры с помощью случайности: стохастические алгоритмы для построения приближенных разложений матриц» Halko и др. (2009)
    • «Реализация рандомизированного алгоритма анализа главных компонент» A. Szlam и др. (2014)
  • arpack-решатель: документация scipy.sparse.linalg.eigsh R. B. Lehoucq, D. C. Sorensen и C. Yang (1998)

2.5.3. Усечённое сингулярное разложение и латентно-семантический анализ

TruncatedSVD реализует вариант сингулярного разложения (SVD), который вычисляет только \(k\) наибольших сингулярных значений, где \(k\) — параметр, задаваемый пользователем.

TruncatedSVD очень похож на PCA, но отличается тем, что матрицу \(X\) не требуется центрировать. Если вычесть средние значения \(X\) по столбцам (для каждого признака) из значений признаков, то усечённое SVD полученной матрицы будет эквивалентно PCA.

Об усечённом SVD и латентно-семантическом анализе (LSA)

Когда усечённое SVD применяется к матрицам «термин-документ» (возвращаемым CountVectorizer или TfidfVectorizer), это преобразование называют латентно-семантическим анализом (LSA), поскольку оно преобразует такие матрицы в низкоразмерное «семантическое» пространство. В частности, известно, что LSA помогает бороться с последствиями синонимии и полисемии (оба понятия в общих чертах означают, что у слова может быть несколько значений), из-за которых матрицы «термин-документ» становятся чрезмерно разреженными и демонстрируют низкую степень сходства при использовании таких мер, как косинусное сходство.

Примечание

LSA также называют латентно-семантической индексацией, LSI, хотя строго говоря, это название относится к использованию метода в постоянных индексах для информационного поиска.

Математически усечённое SVD, применённое к обучающим выборкам \(X\), даёт низкоранговое приближение \(X\):

\[X \approx X_k = U_k \Sigma_k V_k^\top\]

После этой операции \(U_k \Sigma_k\) — это преобразованный обучающий набор с \(k\) признаками (в API они называются n_components).

Чтобы преобразовать также тестовый набор \(X\), умножим его на \(V_k\):

\[X' = X V_k\]

Примечание

В большинстве описаний LSA в литературе по обработке естественного языка (NLP) и информационному поиску (IR) оси матрицы \(X\) меняют местами, чтобы она имела размерность (n_features, n_samples). Мы представляем LSA иначе — в соответствии с API scikit-learn, — но найденные сингулярные значения совпадают.

Хотя преобразователь TruncatedSVD работает с любой матрицей признаков, при обработке документов с помощью LSA рекомендуется использовать матрицы tf-idf, а не исходные частотные подсчёты. В частности, следует включить суб-линейное масштабирование и обратную частоту документов (sublinear_tf=True, use_idf=True), чтобы значения признаков были ближе к гауссовому распределению, компенсируя неверные предположения LSA о текстовых данных.

Примеры

  • Кластеризация текстовых документов с помощью k-means

Ссылки

  • Christopher D. Manning, Prabhakar Raghavan и Hinrich Schütze (2008), Введение в информационный поиск, Cambridge University Press, глава 18: Разложения матриц и латентно-семантическая индексация

2.5.4. Обучение словаря

2.5.4.1. Разреженное кодирование с заранее вычисленным словарём

Объект SparseCoder — это оцениватель, который можно использовать для преобразования сигналов в разреженную линейную комбинацию атомов из фиксированного, заранее вычисленного словаря, например дискретного вейвлет-базиса. Поэтому этот объект не реализует метод fit. Такое преобразование сводится к задаче разреженного кодирования: поиску представления данных в виде линейной комбинации минимально возможного числа атомов словаря. Во всех вариантах обучения словаря реализованы следующие методы преобразования, выбор которых задаётся параметром инициализации transform_method:

  • Ортогональный жадный алгоритм выбора соответствий (ортогональный жадный алгоритм выбора соответствий (OMP))
  • Регрессия с наименьшим углом (регрессия с наименьшим углом)
  • Lasso, вычисляемый с помощью регрессии с наименьшим углом
  • Lasso с использованием покоординатного спуска (Lasso)
  • Пороговая обработка

Пороговая обработка очень быстрая, но не обеспечивает точного восстановления. В литературе показана её полезность для задач классификации. Для задач восстановления изображений наиболее точное и несмещённое восстановление обеспечивает ортогональный жадный алгоритм выбора соответствий.

Объекты обучения словаря позволяют с помощью параметра split_code разделять положительные и отрицательные значения в результатах разреженного кодирования. Это полезно, когда обучение словаря используется для извлечения признаков, которые затем будут применяться в обучении с учителем: алгоритм обучения может назначать разные веса отрицательным и соответствующим им положительным коэффициентам конкретного атома.

Разделённый код для одного образца имеет длину 2 * n_components и строится по следующему правилу: сначала вычисляется обычный код длины n_components. Затем первые n_components элементов split_code заполняются положительной частью вектора обычного кода. Вторая половина разделённого кода заполняется отрицательной частью вектора кода, но со знаком плюс. Таким образом, split_code неотрицателен.

Примеры

  • Разреженное кодирование с заранее вычисленным словарём

2.5.4.2. Обучение словаря общего назначения

Обучение словаря (DictionaryLearning) — это задача факторизации матрицы, сводящаяся к поиску (обычно избыточного) словаря, который позволит эффективно кодировать подобранные данные разреженным образом.

Считается, что представление данных в виде разреженных комбинаций атомов из избыточного словаря соответствует принципу работы первичной зрительной коры млекопитающих. Поэтому было показано, что обучение словаря на фрагментах изображений даёт хорошие результаты в таких задачах обработки изображений, как дополнение изображения, ретуширование и удаление шума, а также в задачах распознавания с учителем.

Обучение словаря — это задача оптимизации, которая решается попеременным обновлением разреженного кода (как решения нескольких задач Lasso при фиксированном словаре), а затем обновлением словаря для наилучшего соответствия разреженному коду.

\[\begin{split}(U^*, V^*) = \underset{U, V}{\operatorname{arg\,min\,}} & \frac{1}{2} ||X-UV||_{\text{Fro}}^2+\alpha||U||_{1,1} \\ \text{subject to } & ||V_k||_2 \leq 1 \text{ for all } 0 \leq k < n_{\mathrm{atoms}}\end{split}\]

pca_img2 dict_img2

\(||.||_{\text{Fro}}\) обозначает норму Фробениуса, а \(||.||_{1,1}\) — покомпонентную матричную норму, равную сумме абсолютных значений всех элементов матрицы. После подгонки словаря с помощью такой процедуры преобразование сводится к этапу разреженного кодирования, для которого используется та же реализация, что и для всех объектов обучения словаря (см. Разреженное кодирование с заранее вычисленным словарём).

Также можно задать положительность словаря и/или кода, чтобы учесть ограничения, которые могут присутствовать в данных. Ниже показаны лица с различными ограничениями положительности. Красный цвет обозначает отрицательные значения, синий — положительные, а белый — нулевые.

dict_img_pos1 dict_img_pos2

dict_img_pos3 dict_img_pos4

Ссылки

  • «Онлайн-обучение словаря для разреженного кодирования» J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009

2.5.4.3. Обучение словаря на мини-пакетах

MiniBatchDictionaryLearning реализует более быструю, но менее точную версию алгоритма обучения словаря, которая лучше подходит для больших наборов данных.

По умолчанию MiniBatchDictionaryLearning делит данные на мини-пакеты и выполняет онлайн-оптимизацию, проходя по мини-пакетам указанное число итераций. Однако в настоящее время условие остановки не реализовано.

Оцениватель также реализует partial_fit, который обновляет словарь, выполняя только один проход по мини-пакету. Это можно использовать для онлайн-обучения, когда данные изначально недоступны целиком или не помещаются в память.

../_images/sphx_glr_plot_dict_face_patches_001.png

Кластеризация для обучения словаря

Обратите внимание, что при использовании обучения словаря для извлечения представления (например, для разреженного кодирования) кластеризация может служить хорошим приближённым методом обучения словаря. Например, оцениватель MiniBatchKMeans отличается высокой вычислительной эффективностью и реализует онлайн-обучение с методом partial_fit.

Пример: Онлайн-обучение словаря из частей лиц

На следующем изображении показан словарь, обученный на фрагментах изображения енота размером 4x4 пикселя, извлечённых из части изображения его морды.

../_images/sphx_glr_plot_image_denoising_001.png

Примеры

  • Удаление шума с изображения с помощью обучения словаря

2.5.5. Факторный анализ

В обучении без учителя у нас есть только набор данных \(X = \{x_1, x_2, \dots, x_n \}\). Как описать этот набор данных математически? Очень простая модель continuous latent variable для \(X\) имеет вид

\[x_i = W h_i + \mu + \epsilon\]

Вектор \(h_i\) называют «скрытым», поскольку он не наблюдается. \(\epsilon\) считается шумовым членом, распределённым по гауссовому закону со средним 0 и ковариацией \(\Psi\) (то есть \(\epsilon \sim \mathcal{N}(0, \Psi)\)), а \(\mu\) — некоторый произвольный вектор смещения. Такая модель называется «генеративной», поскольку описывает, как \(x_i\) порождается из \(h_i\). Если использовать все \(x_i\) в качестве столбцов матрицы \(\mathbf{X}\), а все \(h_i\) — в качестве столбцов матрицы \(\mathbf{H}\), то можно записать (при соответствующем определении \(\mathbf{M}\) и \(\mathbf{E}\)):

\[\mathbf{X} = W \mathbf{H} + \mathbf{M} + \mathbf{E}\]

Иными словами, мы разложили матрицу \(\mathbf{X}\).

Если \(h_i\) задан, приведённое выше уравнение автоматически задаёт следующую вероятностную интерпретацию:

\[p(x_i|h_i) = \mathcal{N}(Wh_i + \mu, \Psi)\]

Для полной вероятностной модели нам также нужно задать априорное распределение скрытой переменной \(h\). Самое простое предположение (основанное на удобных свойствах гауссового распределения) — \(h \sim \mathcal{N}(0, \mathbf{I})\). Тогда маргинальное распределение \(x\) также будет гауссовым:

\[p(x) = \mathcal{N}(\mu, WW^T + \Psi)\]

Теперь, без дополнительных предположений, идея скрытой переменной \(h\) была бы излишней: \(x\) можно полностью описать с помощью среднего и ковариации. Необходимо задать более конкретную структуру одного из этих двух параметров. Простое дополнительное предположение касается структуры ковариации ошибки \(\Psi\):

  • \(\Psi = \sigma^2 \mathbf{I}\): это предположение приводит к вероятностной модели PCA.
  • \(\Psi = \mathrm{diag}(\psi_1, \psi_2, \dots, \psi_n)\): эта модель называется FactorAnalysis и является классической статистической моделью. Матрицу W иногда называют «матрицей факторных нагрузок».

Обе модели по существу оценивают гауссово распределение с низкоранговой ковариационной матрицей. Поскольку обе модели вероятностные, их можно включать в более сложные модели, например в смесь факторных анализаторов. Если предположить, что скрытые переменные имеют негауссовы априорные распределения, получаются совершенно иные модели (например, FastICA).

Факторный анализ может давать компоненты (столбцы своей матрицы нагрузок), похожие на компоненты PCA. Однако нельзя делать общих утверждений об этих компонентах (например, об их ортогональности):

pca_img3 fa_img3

Главное преимущество факторного анализа перед PCA состоит в том, что он может независимо моделировать дисперсию в каждом направлении входного пространства (гетероскедастический шум):

../_images/sphx_glr_plot_faces_decomposition_009.png

Это позволяет лучше выбирать модель, чем при использовании вероятностного PCA, если присутствует гетероскедастический шум:

../_images/sphx_glr_plot_pca_vs_fa_model_selection_002.png

После факторного анализа часто выполняют вращение факторов (с помощью параметра rotation), обычно для повышения интерпретируемости. Например, вращение Varimax максимизирует сумму дисперсий квадратов нагрузок; в результате факторы, как правило, становятся более разреженными, то есть каждый из них определяется лишь несколькими признаками («простая структура»). См., например, первый пример ниже.

Примеры

  • Факторный анализ (с вращением) для визуализации закономерностей
  • Выбор модели с помощью вероятностного PCA и факторного анализа (FA)

2.5.6. Анализ независимых компонент (ICA)

Анализ независимых компонент разделяет многомерный сигнал на аддитивные подкомпоненты, максимально независимые друг от друга. В scikit-learn он реализован с помощью алгоритма Fast ICA. Обычно ICA применяют не для уменьшения размерности, а для разделения наложенных друг на друга сигналов. Поскольку модель ICA не включает шумовой член, для её корректной работы необходимо выполнить отбеливание. Это можно сделать автоматически с помощью аргумента whiten или вручную, используя один из вариантов PCA.

Классически метод используют для разделения смешанных сигналов (эта задача известна как слепое разделение источников), как в примере ниже:

../_images/sphx_glr_plot_ica_blind_source_separation_001.png

ICA также можно использовать как ещё один метод нелинейного разложения, находящий компоненты с некоторой степенью разреженности:

pca_img4 ica_img4

Примеры

  • Слепое разделение источников с помощью FastICA
  • FastICA для двумерных облаков точек
  • Разложения набора данных с изображениями лиц

2.5.7. Неотрицательная матричная факторизация (NMF или NNMF)

2.5.7.1. NMF с нормой Фробениуса

NMF [1] — альтернативный подход к разложению, предполагающий, что данные и компоненты неотрицательны. NMF можно использовать вместо PCA или его вариантов в тех случаях, когда матрица данных не содержит отрицательных значений. Метод находит разложение выборок \(X\) на две матрицы \(W\) и \(H\) с неотрицательными элементами, оптимизируя расстояние \(d\) между \(X\) и матричным произведением \(WH\). Наиболее широко используется квадрат нормы Фробениуса, являющийся очевидным расширением евклидовой нормы на матрицы:

\[d_{\mathrm{Fro}}(X, Y) = \frac{1}{2} ||X - Y||_{\mathrm{Fro}}^2 = \frac{1}{2} \sum_{i,j} (X_{ij} - {Y}_{ij})^2\]

В отличие от PCA, представление вектора получается аддитивным способом: компоненты накладываются друг на друга, а не вычитаются. Такие аддитивные модели эффективны для представления изображений и текста.

В работе [Hoyer, 2004] [2] было показано, что при тщательном наложении ограничений NMF может создавать основанное на частях представление набора данных, в результате чего получаются интерпретируемые модели. В следующем примере показаны 16 разреженных компонент, найденных с помощью NMF по изображениям из набора данных лиц Olivetti, в сравнении с собственными лицами PCA.

pca_img5 nmf_img5

Атрибут init задаёт используемый метод инициализации, который сильно влияет на производительность метода. NMF реализует метод двойного сингулярного разложения для неотрицательных матриц. NNDSVD [4] основан на двух процедурах SVD: одна аппроксимирует матрицу данных, а другая — положительные части полученных частичных множителей SVD, используя алгебраическое свойство матриц ранга 1. Базовый алгоритм NNDSVD лучше подходит для разреженной факторизации. Для плотных данных рекомендуются его варианты NNDSVDa (в котором все нули заменяются средним значением всех элементов данных) и NNDSVDar (в котором нули заменяются случайными возмущениями, меньшими среднего значения данных, делённого на 100).

Обратите внимание, что решатель Multiplicative Update (‘mu’) не может обновлять нули, имеющиеся в инициализации, поэтому при совместном использовании с базовым алгоритмом NNDSVD, который вводит много нулей, результаты хуже; в этом случае предпочтительнее NNDSVDa или NNDSVDar.

NMF также можно инициализировать правильно масштабированными случайными неотрицательными матрицами, задав init="random". Для обеспечения воспроизводимости в random_state также можно передать целочисленное начальное значение или RandomState.

В NMF в функцию потерь можно добавить априорные распределения L1 и L2 для регуляризации модели. Для априорного распределения L2 используется норма Фробениуса, а для априорного распределения L1 — поэлементная норма L1. Как и в ElasticNet, соотношение L1 и L2 контролируется параметром l1_ratio (\(\rho\)), а интенсивность регуляризации — параметрами alpha_W и alpha_H (\(\alpha_W\) и \(\alpha_H\)). Априорные члены масштабируются количеством образцов (\(n\_samples\)) для H и количеством признаков (\(n\_features\)) для W, чтобы сбалансировать их влияние друг относительно друга и относительно члена подгонки по данным, насколько это возможно независимо от размера обучающей выборки. Тогда члены априорных распределений имеют вид:

\[(\alpha_W \rho ||W||_1 + \frac{\alpha_W(1-\rho)}{2} ||W||_{\mathrm{Fro}} ^ 2) * n\_features + (\alpha_H \rho ||H||_1 + \frac{\alpha_H(1-\rho)}{2} ||H||_{\mathrm{Fro}} ^ 2) * n\_samples\]

а регуляризованная целевая функция имеет вид:

\[d_{\mathrm{Fro}}(X, WH) + (\alpha_W \rho ||W||_1 + \frac{\alpha_W(1-\rho)}{2} ||W||_{\mathrm{Fro}} ^ 2) * n\_features + (\alpha_H \rho ||H||_1 + \frac{\alpha_H(1-\rho)}{2} ||H||_{\mathrm{Fro}} ^ 2) * n\_samples\]

2.5.7.2. NMF с бета-дивергенцией

Как отмечалось выше, наиболее широко используется квадрат нормы Фробениуса, являющийся очевидным расширением евклидовой нормы на матрицы:

\[d_{\mathrm{Fro}}(X, Y) = \frac{1}{2} ||X - Y||_{Fro}^2 = \frac{1}{2} \sum_{i,j} (X_{ij} - {Y}_{ij})^2\]

В NMF можно использовать и другие функции расстояния, например дивергенцию Кульбака — Лейблера (KL) (обобщённую), также называемую I-дивергенцией:

\[d_{KL}(X, Y) = \sum_{i,j} (X_{ij} \log(\frac{X_{ij}}{Y_{ij}}) - X_{ij} + Y_{ij})\]

Или дивергенцию Итакуры — Сайто (IS):

\[d_{IS}(X, Y) = \sum_{i,j} (\frac{X_{ij}}{Y_{ij}} - \log(\frac{X_{ij}}{Y_{ij}}) - 1)\]

Эти три расстояния являются частными случаями семейства бета-дивергенций при \(\beta = 2, 1, 0\) соответственно [6]. Бета-дивергенция определяется следующим образом:

\[d_{\beta}(X, Y) = \sum_{i,j} \frac{1}{\beta(\beta - 1)}(X_{ij}^\beta + (\beta-1)Y_{ij}^\beta - \beta X_{ij} Y_{ij}^{\beta - 1})\]
../_images/beta_divergence.png

Обратите внимание, что это определение недействительно при \(\beta \in (0; 1)\), однако его можно непрерывно продолжить до определений \(d_{KL}\) и \(d_{IS}\) соответственно.

Реализованные решатели NMF

NMF реализует два решателя: Coordinate Descent (‘cd’) [5] и Multiplicative Update (‘mu’) [6]. Решатель ‘mu’ может оптимизировать любую бета-дивергенцию, включая, конечно, норму Фробениуса (\(\beta=2\)), дивергенцию Кульбака — Лейблера (обобщённую) (\(\beta=1\)) и дивергенцию Итакуры — Сайто (\(\beta=0\)). Обратите внимание, что при \(\beta \in (1; 2)\) решатель ‘mu’ работает значительно быстрее, чем при других значениях \(\beta\). Также обратите внимание, что при отрицательном (или равном 0, то есть ‘itakura-saito’) значении \(\beta\) входная матрица не может содержать нулевые значения.

Решатель ‘cd’ может оптимизировать только норму Фробениуса. Из-за лежащей в основе NMF невыпуклости разные решатели могут сходиться к разным минимумам, даже при оптимизации одной и той же функции расстояния.

Для NMF лучше всего использовать метод fit_transform, который возвращает матрицу W. Матрица H сохраняется в обученной модели в атрибуте components_; метод transform разложит новую матрицу X_new на основе сохранённых компонент:

>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]])
>>> from sklearn.decomposition import NMF
>>> model = NMF(n_components=2, init='random', random_state=0)
>>> W = model.fit_transform(X)
>>> H = model.components_
>>> X_new = np.array([[1, 0], [1, 6.1], [1, 0], [1, 4], [3.2, 1], [0, 4]])
>>> W_new = model.transform(X_new)

Примеры

  • Разложения набора данных лиц
  • Извлечение тем с помощью неотрицательной матричной факторизации и латентного размещения Дирихле

2.5.7.3. Мини-пакетная неотрицательная матричная факторизация

MiniBatchNMF [7] реализует более быструю, но менее точную версию неотрицательной матричной факторизации (то есть NMF), лучше подходящую для больших наборов данных.

По умолчанию MiniBatchNMF делит данные на мини-пакеты и оптимизирует модель NMF в онлайн-режиме, проходя по мини-пакетам заданное число итераций. Параметр batch_size управляет размером пакетов.

Чтобы ускорить алгоритм мини-пакетов, можно также масштабировать предыдущие пакеты, придавая им меньшую значимость, чем новым. Для этого вводится так называемый коэффициент забывания, задаваемый параметром forget_factor.

Оцениватель также реализует partial_fit, который обновляет H, выполняя только один проход по мини-пакету. Это можно использовать для онлайн-обучения, когда данные недоступны с самого начала или не помещаются в памяти.

Литература

[1]

«Изучение частей объектов с помощью неотрицательной матричной факторизации» D. Lee, S. Seung, 1999

[2]

«Неотрицательная матричная факторизация с ограничениями на разреженность» P. Hoyer, 2004

[4]

«Инициализация на основе SVD: преимущество для неотрицательной матричной факторизации» C. Boutsidis, E. Gallopoulos, 2008

[5]

«Быстрые локальные алгоритмы для крупномасштабной неотрицательной матричной и тензорной факторизации» A. Cichocki, A. Phan, 2009

[6] (1,2)

«Алгоритмы неотрицательной матричной факторизации с бета-дивергенцией» C. Fevotte, J. Idier, 2011

[7]

«Онлайн-алгоритмы неотрицательной матричной факторизации с дивергенцией Итакуры — Сайто» A. Lefevre, F. Bach, C. Fevotte, 2011

2.5.8. Латентное размещение Дирихле (LDA)

Латентное размещение Дирихле — это порождающая вероятностная модель для коллекций дискретных наборов данных, например текстовых корпусов. Это также тематическая модель, используемая для выявления абстрактных тем в коллекции документов.

Графическая модель LDA — это порождающая модель с тремя уровнями:

../_images/lda_model_graph.png

Пояснения к обозначениям, представленным выше в графической модели и описанным в Hoffman et al. (2013):

  • Корпус представляет собой коллекцию из \(D\) документов.
  • Документ \(d \in D\) — это последовательность из \(N_d\) слов.
  • В корпусе содержится \(K\) тем.
  • Блоки обозначают повторяющуюся выборку.

В графической модели каждый узел является случайной переменной и играет определённую роль в порождающем процессе. Закрашенный узел обозначает наблюдаемую переменную, незакрашенный — скрытую (латентную) переменную. В данном случае единственные наблюдаемые нами данные — это слова в корпусе. Латентные переменные определяют случайную смесь тем в корпусе и распределение слов в документах. Цель LDA — использовать наблюдаемые слова для вывода о скрытой структуре тем.

Подробнее о моделировании текстовых корпусов

При моделировании текстовых корпусов предполагается следующий порождающий процесс для корпуса из \(D\) документов и \(K\) тем, где \(K\) соответствует n_components в API:

  1. Для каждой темы \(k \in K\) выбрать \(\beta_k \sim \mathrm{Dirichlet}(\eta)\). Это задаёт распределение слов, то есть вероятность появления слова в теме \(k\). \(\eta\) соответствует topic_word_prior.
  2. Для каждого документа \(d \in D\) выбрать доли тем \(\theta_d \sim \mathrm{Dirichlet}(\alpha)\). \(\alpha\) соответствует doc_topic_prior.
  3. Для каждого слова \(n=1,\cdots,N_d\) в документе \(d\):

    1. Выбрать тему \(z_{dn} \sim \mathrm{Multinomial} (\theta_d)\)
    2. Выбрать наблюдаемое слово \(w_{dn} \sim \mathrm{Multinomial} (\beta_{z_{dn}})\)

Для оценки параметров апостериорное распределение имеет вид:

\[p(z, \theta, \beta |w, \alpha, \eta) = \frac{p(z, \theta, \beta|\alpha, \eta)}{p(w|\alpha, \eta)}\]

Поскольку апостериорное распределение не поддаётся вычислению, вариационный байесовский метод аппроксимирует его более простым распределением \(q(z,\theta,\beta | \lambda, \phi, \gamma)\), а вариационные параметры \(\lambda\), \(\phi\), \(\gamma\) оптимизируются для максимизации нижней границы свидетельства (ELBO):

\[\log\: P(w | \alpha, \eta) \geq L(w,\phi,\gamma,\lambda) \overset{\triangle}{=} E_{q}[\log\:p(w,z,\theta,\beta|\alpha,\eta)] - E_{q}[\log\:q(z, \theta, \beta)]\]

Максимизация ELBO эквивалентна минимизации дивергенции Кульбака — Лейблера (KL) между \(q(z,\theta,\beta)\) и истинным апостериорным распределением \(p(z, \theta, \beta |w, \alpha, \eta)\).

LatentDirichletAllocation реализует алгоритм онлайн-вариационного байесовского вывода и поддерживает как онлайн-, так и пакетные методы обновления. Пакетный метод обновляет вариационные переменные после каждого полного прохода по данным, тогда как онлайн-метод обновляет их на основе точек данных из мини-пакета.

Примечание

Хотя для онлайн-метода гарантирована сходимость к локальному оптимуму, качество найденного оптимума и скорость сходимости могут зависеть от размера мини-пакета и атрибутов, связанных с настройкой скорости обучения.

При применении LatentDirichletAllocation к матрице «документ — термин» она раскладывается на матрицу «тема — термин» и матрицу «документ — тема». Матрица «тема — термин» сохраняется в модели как components_, а матрицу «документ — тема» можно вычислить с помощью метода transform.

LatentDirichletAllocation также реализует метод partial_fit. Он используется, когда данные можно получать последовательно.

Примеры

  • Извлечение тем с помощью неотрицательной матричной факторизации и латентного размещения Дирихле

Литература

  • «Латентное размещение Дирихле» D. Blei, A. Ng, M. Jordan, 2003
  • «Онлайн-обучение для латентного размещения Дирихле» M. Hoffman, D. Blei, F. Bach, 2010
  • «Стохастический вариационный вывод» M. Hoffman, D. Blei, C. Wang, J. Paisley, 2013
  • «Критерий varimax для аналитического вращения в факторном анализе» H. F. Kaiser, 1958

См. также раздел Снижение размерности, посвящённый снижению размерности с помощью анализа соседних компонентов.

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/decomposition.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API