Я использую функции SVD и PCA в (pyspark) mllib (Spark 2.2.0), как описано в этой ссылке: https://spark.apache.org/docs/2.2.0/mllib-dimensionality-reduction.html
Предположим, нам даны следующие объекты данных:
[(2, 2), (3, 1), (2, 2), (1, 3), (1.0, 1.0), (3.0, 3.0)]
Применение функции computeSVD()
дает:
для U:
[DenseVector([-0.3922, -0.0]), DenseVector([-0.3922, -0.7071]), DenseVector([-0.3922, -0.0]), DenseVector([-0.3922, 0.7071]), DenseVector([-0.1961, -0.0]), DenseVector([-0.5883, -0.0])]
и локальная плотная матрица V:
[[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
Вопрос на данный момент: что на самом деле являются собственными векторами в искре? Они в U или в V?
А теперь контраст с применением computePrincipalComponents()
:
это дает:
DenseMatrix([[1., 0.],
[0., 1.]])
В соответствии с документацией об искрах указано, что «Основные компоненты хранятся в локальной плотной матрице». Таким образом, результат PCA должен дать собственные векторы, но почему они отличаются от собственных векторов локальной плотной матрицы V SVD? Они в конечном итоге нормированы?
Заранее благодарю за любые уточнения по этому вопросу.