Nano Hash - криптовалюты, майнинг, программирование

Sklearn PCA, как восстановить среднее значение в более низком измерении?

Этот вопрос касается того, как децентрировать и «восстановить» данные в более низком измерении после выполнения PCA.

Я делаю простой анализ основных компонентов с sklearn. Насколько я понимаю, реализация должна позаботиться о (1) центрировании данных при создании компонентов и (2) децентрализации данных после преобразования. Однако после преобразования данные все еще центрируются. Как я могу спроецировать данные в пространство меньшей размерности, сохранив характеристики исходных данных? Учитывая, что я делал бы уменьшение размерности для данных большой размерности, у меня не было бы подходящего среднего значения для каждого главного компонента, как это можно получить?

Уменьшение 3-х измерений до 2-х измерений:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

X = np.array([[-1, -1, -1], [-2, -1, -1], [-3, -2, -3], [1, 1, 1], [2, 1, 2], [3, 2, 3]]) + 3
X.shape

(6, 3)

fig = plt.figure(figsize=(10, 8), dpi= 80, facecolor='w', edgecolor='k')
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:,0], X[:,1],X[:,2], '*')
plt.title('original')
plt.show()

введите описание изображения здесь

PCA с 2 компонентами:

pca = PCA(n_components=2)
pca.fit(X)
X_trans =pca.transform(X)
X_trans.shape

(6, 2)

plt.plot(X_trans[:,0], X_trans[:,1], '*')
plt.show()

введите описание изображения здесь

На этом этапе я хотел бы «восстановить» мои данные в этом более низком измерении, чтобы значения точек данных соответствовали исходным данным. Он по-прежнему должен иметь только 2 измерения, но не центрироваться вокруг среднего.

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

X_approx = pca.inverse_transform(X_trans) 
X_approx.shape

(6, 3)

Я хочу оставаться в двух измерениях, но при этом мои данные должны быть максимально приближены к исходной форме и не должны быть сосредоточены на среднем значении.


  • Я согласен с ответом, но я думаю, что ваша настоящая цель состоит не в том, чтобы восстановить данные, а в том, чтобы каким-то образом спроецировать средства в пространство более низкого измерения. Это правильно? 20.03.2019
  • @kazemakase: Думаю, это то, что здесь делается. Новые восстановленные данные - это те же данные, но спроецированные в 2-мерное пространство, потому что n_components=2 во время подгонки. 20.03.2019
  • изменил мою формулировку на децентрализацию 20.03.2019
  • @Mountain_sheep: Теперь я вижу проблему. Прочтите мой комментарий и мой отредактированный ответ 20.03.2019

Ответы:


1

Вы просто подбираете данные и наносите на график преобразованные данные. Чтобы вернуть исходные данные в более низком измерении, вам необходимо использовать _ 1_, который возвращает исходные данные, как показано ниже на графике. Из документов:

обратное_преобразование (X)

Преобразуйте данные обратно в исходное пространство.

pca = PCA(n_components=2)
pca.fit(X)

X_trans =pca.transform(X)
X_original = pca.inverse_transform(X_trans)
plt.plot(X_original[:,0], X_original[:,1], 'r*')

введите описание изображения здесь

20.03.2019
  • Спасибо, но данные по-прежнему сосредоточены вокруг оси Y ...? 20.03.2019
  • @Mountain_sheep: исходные данные - это просто связь между одной независимой переменной и одной зависимой переменной. 20.03.2019
  • @Mountain_sheep: Теперь я вижу проблему. Вы только что использовали pca.fit(X), но затем вам нужно применить pca к исходным данным, чтобы преобразовать их в X_trans с помощью transform. После преобразования вы можете преобразовать обратно к исходным данным с помощью inverse_transform 20.03.2019
  • Как я описываю в новой редакции, этот метод возвращает меня к моему исходному измерению, я хочу остаться в более низком измерении, но децентрировать мои данные. 20.03.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..