Мне было поручено реализовать мой код PCA для преобразования данных в двумерное поле для назначения KNN. Мой код PCA создает массив с собственными векторами, называемыми PCevecs.
def __PCA(data):
#Normalize data
data_cent = data-np.mean(data)
#calculate covariance
covarianceMatrix = np.cov(data_cent, bias=True)
#Find eigenvector and eigenvalue
eigenvalue, eigenvector= np.linalg.eigh(covarianceMatrix)
#Sorting the eigenvectors and eigenvalues:
PCevals = eigenvalue[::-1]
PCevecs = eigenvector[:,::-1]
return PCevals, PCevecs
Назначение преобразует обучающие данные с использованием PCA. Возвращенный PCevecs имеет форму (88, 88), заданную вызовом print(PCevecs.shape). Форма обучающих данных (88, 4).
np.dot(trainingFeatures, PCevecs[:, 0:2])
Когда код работает, я получаю сообщение об ошибке «ValueError: фигуры (88,4) и (88,2) не выровнены: 4 (тусклый 1)! = 88 (тусклый 0)». Я вижу, что массивы не совпадают, но я не вижу, что я сделал что-то не так с реализацией PCA. Я пытался посмотреть на подобные проблемы на Stackoverflow. Я не видел, чтобы кто-нибудь сортировал собственные вектора и собственные значения одинаково.
np.dot()
? - person norok2   schedule 30.03.2020