Функции PCA не соответствуют оригинальным функциям - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь уменьшить размеры элемента, используя PCA.Мне удалось применить PCA к своим данным обучения, но я не могу понять, почему сокращенный набор функций (X_train_pca) не имеет сходства с исходными функциями (X_train).

print(X_train.shape) # (26215, 727)
pca = PCA(0.5)
pca.fit(X_train)
X_train_pca = pca.transform(X_train)
print(X_train_pca.shape) # (26215, 100)

most_important_features_indicies = [np.abs(pca.components_[i]).argmax() for i in range(pca.n_components_)]
most_important_feature_index = most_important_features_indicies[0]

Следуетпервый вектор признаков в X_train_pca не будет просто подмножеством первого вектора признаков в X_train?Например, почему следующие значения не равны True?

print(X_train[0][most_important_feature_index] == X_train_pca[0][0]) # False

Кроме того, ни один из признаков из первого вектора признаков X_train не находится в первом векторе признаков X_train_pca:

for i in X_train[0]:
    print(i in X_train_pca[0])
# False
# False
# False
# ...

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

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

PCA математически определяется как ортогональное линейное преобразование, которое преобразует данные в новую систему координат, так что наибольшая разницанекоторая проекция данных лежит на первой координате (называемой первым главным компонентом), второй наибольшей дисперсии на второй координате и так далее.(https://en.wikipedia.org/wiki/Principal_component_analysis#Dimensionality_reduction)

Запустите следующий пример кода, чтобы увидеть влияние алгоритма PCA на простой набор данных Гаусса.

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

pca = PCA(2)
X = np.random.multivariate_normal(mean=np.array([0, 0]), cov=np.array([[1, 0.75],[0.75, 1]]), size=(1000,))
X_new = pca.fit_transform(X)

plt.scatter(X[:, 0], X[:, 1], s=5, label='Initial data')
plt.scatter(X_new[:, 0], X_new[:, 1], s=5, label='Transformed data')
plt.legend()
plt.show()
1 голос
/ 27 сентября 2019

PCA преобразует ваши векторы пространственных объектов в низкоразмерные векторы объектов.Он не просто определяет наименее важный индекс в исходном пространстве и отбрасывает это измерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...