Я пытаюсь уменьшить размерность и шум набора данных, выполняя PCA для набора данных и выбрасывая последние несколько ПК. После этого я хочу использовать некоторые алгоритмы машинного обучения на оставшихся ПК, и поэтому я хочу нормализовать данные путем выравнивания дисперсии ПК, чтобы алгоритмы работали лучше.
Один простой способ - просто нормализовать дисперсию для значений единиц. Однако первый компьютер содержит больше отклонений от исходного набора данных, чем следующие, и я все еще хочу придать ему больше «веса». Поэтому мне было интересно: есть ли простой способ просто разделить его дисперсию и поделиться ею с ПК с меньшими отклонениями?
Другой способ - отобразить ПК обратно в исходное пространство объектов, но в этом случае размерность также увеличится до исходного значения.
Я предполагаю, что лучше сохранять результирующие столбцы ортогональными, но в этом нет необходимости.
источник
Ответы:
Мне не совсем ясно, что вы спрашиваете, что вам действительно нужно: обычным этапом предварительной обработки в машинном обучении является уменьшение размерности + отбеливание, что означает выполнение PCA и стандартизацию компонентов, и ничего больше. Но я все же остановлюсь на вашем вопросе в том виде, как он сформулирован, потому что он более интересен.
Пусть - центрированная матрица данных n × d с точками данных в строках и переменными в столбцах. РСА составляет сингулярное разложение Х = U S V ⊤ ≈ U K S K V ⊤ K , где для выполнения сокращения размерности мы держать только K компоненты. Ортогональное «вращение фактора» из этих компонентов предполагает выбор ортогонального K × K матрицы R и подключить его к разложению: X ≈ U K S к VИкс n × d
Теперь мы готовы сформулировать задачу в математических терминах: с учетом неповрежденных нагрузок , найдите матрицу вращенияRтак, чтобы вращаемые нагрузки,LR, имели равную сумму квадратов в каждом столбце.L = VКSК/ n - 1-----√ р L R
Давайте решать это. Суммы столбцов квадратов после вращения равны диагональным элементам Это имеет смысл: вращение просто перераспределяет дисперсии компонентов, которые первоначально определяются какs 2 i /(n-1), между ними, согласно этой формуле. Нам нужно перераспределить их так, чтобы все они стали равными их среднему значениюμ.
Я не думаю, что есть закрытое решение этой проблемы, и на самом деле есть много разных решений. Но решение может быть легко построено последовательным способом:
Это перераспределит все дисперсии одинаково по последовательности 2D поворотов. Умножение всех этих матриц вращения даст общее значение R( к - 1 ) р .
пример
Выполнено.
Я написал скрипт Matlab, который реализует этот алгоритм (см. Ниже). Для этой входной матрицы последовательность углов поворота равна:
Отклонения компонентов после каждого шага (в строках):
Конечная матрица вращения (произведение трех 2D матриц вращения):
Вот код:
Вот код на Python, предоставленный @feilong:
источник
mu
.но не продемонстрировал, откуда это уравнение; вероятно, думая, что это очевидно без объяснения причин. Очевидно это или нет, я полагаю, что это стоит объяснить - в некотором роде. Мой ответ представляет один из способов.
источник
Если я правильно интерпретирую вещи, вы имеете в виду, что первый основной компонент (собственное значение) объясняет большую часть различий в данных. Это может произойти, когда ваш метод сжатия является линейным. Однако в вашем пространстве пространственных объектов могут быть нелинейные зависимости.
Вот пример scikit, где они выполняют поиск по сетке, чтобы найти оптимальное количество главных компонентов, которые нужно сохранить (гиперпараметр), используя PCA. Наконец, они применяют логистическую регрессию к пространству нижних измерений: http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html#example-plot-digits-pipe-py
Подсказка: автоэнкодеры не имеют решения для закрытой формы (afaik), поэтому, если ваш контекст представляет собой потоковую передачу данных, это означает, что вы можете постоянно обновлять свой автоэнкодер (сжатое представление) и, таким образом, компенсировать такие вещи, как смещение концепции. С помощью pca вы должны периодически переучивать пакетный режим по мере поступления новых данных.
Что касается придания некоторым функциям большего «веса», смотрите регуляризацию (я бы начал с норм https://en.wikipedia.org/wiki/Norm_(matmatics) ). Вы также можете быть удивлены, насколько логистическая регрессия похожа на персептрон.
источник