Пока я делаю PCA с scikit-learn, я обнаружил, что он использует svd для получения eigenvalue
и eigenvector
, а затем используйте svd_flip
для получения реального собственного вектора.Почему при использовании PCA scikit-learn использует svd для получения собственного значения, в то время как традиционный метод - использовать eig?
И вот мой код, чтобы получить eigenvalue
и eigenvector
.
pca = PCA(data.shape[1])
newData = pca.fit_transform(data)
eigenvalue, eigenvector = np.linalg.eig(np.cov(data.transpose()))
explained_variance_ratio_sum_ = np.cumsum(pca.explained_variance_ratio_)
index = eigenvalue.argsort()[::-1]
eigenvalue = eigenvalue[index]
eigenvector = eigenvector[:, index]
Почему sklearn использует svd? Есть ли какие-либо плюсы или минусы? И я не совсем хорошо знаком с функцией svd_flip
, не могли бы вы показать мне ее использование?
Большое спасибо.
Возможно, это не подходящее место для обсуждения алгоритмов. Пожалуйста, ознакомьтесь с https://stats.stackexchange.com/questions/79043/why-pca-of-data-by-means-of-svd-of-the-data –