numpy 如何在Python中使用PCA查找最佳拟合线?

a2mppw5e  于 2023-02-23  发布在  Python
关注(0)|答案(2)|浏览(133)

我有这样的代码,它使用SVD。但我想知道如何做同样的使用PCA。在线所有我能找到的是,他们是相关的,等等,但不确定他们是如何相关的,他们是如何不同的代码,做完全相同的事情。
我只想看看PCA与SVD在这方面有何不同。

import numpy as np

points = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Centering the points
mean_point = np.mean(points, axis=0)
centered_points = points - mean_point

# Calculating the covariance matrix
covariance_matrix = np.cov(centered_points, rowvar=False)

# Performing the SVD
U, s, V = np.linalg.svd(covariance_matrix)

# Getting the first column of the first matrix U as the best fit line
normal = U[:, 0]

print("Best fit line:", normal)
eufgjt7s

eufgjt7s1#

tl;dr:SVDPCA用作同义词。Mathematica
奇异值分解指的是数学运算(严格地说,是因式分解),主成分分析法是一种较为宽松的定义,它是一种在高维空间中寻找线性无关的最大变率方向的方法这可以通过对数据集矩阵执行和SVD来实现。根据科学界的不同,这两个术语都被用作同义词。
关于您的问题:这条线

U, s, V = np.linalg.svd(covariance_matrix)

执行SVD,而行

# Centering the points
mean_point = np.mean(points, axis=0)
centered_points = points - mean_point

# Calculating the covariance matrix
covariance_matrix = np.cov(centered_points, rowvar=False)

# Performing the SVD
U, s, V = np.linalg.svd(covariance_matrix)

执行PCA,因为通常使用零均值数据矩阵。

ef1yzkbh

ef1yzkbh2#

我不会使用PCA作为生成最佳拟合的方法。
它用于查看高维数据空间,并找出哪些维最重要,它告诉你每个维捕获了总方差的多少,我将它作为拟合数据之前的预处理步骤运行。
我会使用主成分分析的输出来限制我的拟合,只使用最重要的维度,然后将它们进一步分为训练集和测试集,然后使用我选择的算法(例如线性或逻辑回归)来执行拟合。

相关问题