Pull to refresh

Comments 23

Вы забыли упомянуть, что PCA (как и другие классические методы редукции многомерных данных) ищет только линейные зависимости, в отличие от тех же нейронных сетей, которые могут находить и нелинейные зависимости. Это очень важный аспект.
А насколько хорошо работает на больших размерностях — типа векторов по 100к фич (было такое в одном из курсов)? Вроде там только матричные операции, не должно быть проблем?
На сколько мне известно, действительно, при большом количестве фич описанный выше метод (реализация через ковариационную матрицу) будет работать неэффективно — учитывая размеры полученной ков. матрицы.
PCA, основанный на SVD должен работать лучше, но все равно для больших размерностей есть лучшие алгоритмы, типа Random SVD или Random Projection
В конкурсе Нетфликс (а там данных было много: 480.189 клиентов [=признаков] поставили оценки 17.770 фильмам) победил именно подход основанный на разновидности SVD, правда адаптированный для неполных матриц.

На Хабре была серия статей по rSVD.
Стиль изложения напомнил анекдот про студента, жалующегося профессору, что ему трудно представить себе объекты в трёхмерном пространстве, на что профессор советует ему сначала представить их в N-мерном пространстве, а потом представить, что N = 3.
Я отчасти согласен с профессором — было желание написать все в общем виде для n-измерений, а потом сказать «в нашем случае n=2, так что очевидно, что...» и просто вставить результат :)
Хочу добавить: с математической точки зрения PCA основан на сингулярном разложении матрицы (SVD). Поэтому по большинству ограничений, свойств, алгоритмов и т.п. советую смотреть и на SVD.
Я представил наиболее простой (как для понимания, так и по структуре) метод, но, действительно, современные алгоритмы PCA реализованы через сингулярное разложение, а не ковариационные матрицы.
Мне, наверное, стоило посвятить отдельный раздел обзору реализации алгоритма через SVD. Как будет время, постараюсь дополнить.
Можно ли привести жизненные примеры, в которых был использован этот метод?

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

Самый интересный пример — действительно распознавание схожих изображений (к примеру, лиц). Есть даже так называемое понятие «собственные лица» (eigenfaces) по аналогии с собственными векторами (Wikipedia).
Большинство статей, посвященных PCA так или иначе приводят пример графической реализации (вот здесь про платья, и тут еще совсем простой пример)
Статья про платья повеселила, спасибо!

Я почему интересуюсь предметной стороной применения метода?
У меня есть прикладная задача, которую я бы хотел решить с помощью ML. Однако не знаю, с какой стороны к ней подойти.

Вот описание задачи:
Есть целевой «Товар А» с определенными характеристиками (Х1, Х2,… Хn). Нужно проанализировать множество товаров (Т с характеристиками) и найти в нем аналоги «Товара А», опираясь на названия товаров и характеристики.
Как названия товаров, так и названия характеристик могут не соответствовать названиям целевого товара. Но название товара + его характеристики с очень высокой вероятностью определяют искомый товар. Это контекстный анализ текстового окружения анализируемой единицы.

Например, целевой товар «Куртка зимняя пуховая красная» (Товар: «Куртка», Х1: «Зимняя», Х2: «Пуховая», Х3: «Красная»), товар из множества аналогов «Пуховик зимний красный» (Товар: «Пуховик», Х1: «Зимний», Х2: «Красный»).

Адепты ML могут что-нибудь посоветовать? :)
Если не хотите заморачиваться, то можете загнать все в ElasticSearch и просто использовать его фичи.
Заодно и полнотекстовый получите по своим товарам.
Спасибо за комментарий, но, конечно, я проблему решил. Сейчас же я хочу решить задачу с помощью ML.
Понимаю, но тут вы немного не туда смотрите.
Эта конкретная задача уже давно решается в анализе текстовых документов, поэтому я вам порекомендовал ES.
Текстовые документы — это, по сути, вектора из слов.
Также и у вас для каждого товара есть свой вектор признаков.
Вы хотите найти среди этих векторов максимально похожий.
Для этого понадобиться некая метрика «похожести», например, косинусное расстояние над TF-IDF представлением.
Плюс некое пороговое значение, которое будет определять достаточную «похожесть», его вы можете вычислить экспериментально.
Если у вас очень много данных, то есть хитрые алгоритмы, которые не сравнивают все подряд, например:
https://blog.twitter.com/2014/all-pairs-similarity-via-dimsum

Надеюсь, это вам как-то поможет, удачи.
смотрите на PCA не как на отдельный алгоритм, а как на инструмент для уменьшения размерности данных. В чистом виде, пожалуй, он сейчас нигде не применяется. Но как вспомогательный инструмент может быть использован везде, где есть многомерные данные.
Хорошая статья. Есть замечание: пишите комментарии в коде, буквально для каждой строки что в ней происходит. Не очевидно без гугления и изучения функций понять что происходит.
В чём разница между выборочной дисперсией и несмещённой дисперсией?
Википедия говорит, что выборочная дисерсия (a.k.a дисперсия расчитанная на основе данных выборки) бывает смещённой и несмещённой.
Несмещенная — это та, у которой матожидание равно дисперсии (не выборочной)
То есть, ты можешь придумать много формул для дисперсии, но не все из них будут несмещенными
Итак, возьмем единичный вектор на который будем проецировать наш случайный вектор X

Если я не путаю, X — не вектор, а матрица. Соответственно, что такое проекция матрицы на вектор?

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

Sign up to leave a comment.

Articles