2017-02-17 22 views
-1

Пока я делаю 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, не могли бы вы показать мне ее использование?

Большое спасибо.

+0

Возможно, это не подходящее место для обсуждения алгоритмов. Пожалуйста, ознакомьтесь с https://stats.stackexchange.com/questions/79043/why-pca-of-data-by-means-of-svd-of-the-data –

ответ

0

Метод SVD, используемый scikit-learn, не должен материализовать эмпирическую матрицу ковариации в памяти и, следовательно, более эффективен с точки зрения памяти.

С точки зрения вычислительного времени это должно быть очень похоже, хотя я еще не проверил.

 Смежные вопросы

  • Нет связанных вопросов^_^