Основной компонент функции Incanter
Я пытался использовать principal-components
функция от Incanter, чтобы сделать PCA и, кажется, не в порядке в его использовании. Я нашел в Интернете несколько примеров данных из учебника PCA и хотел попрактиковаться в них:
(def data [[0.69 0.49] [-1.31 -1.21] [0.39 0.99] [0.09 0.29] [1.29 1.09]
[0.49 0.79] [0.19 (- 0 0.31)] [(- 0 0.81) (- 0 0.81)]
[(- 0 0.31) (- 0 0.31)] [(- 0 0.71) (- 0 1.01)]])
После первой попытки реализовать PCA я попытался передать векторы матричной функции Инкантера, но обнаружил, что передаю слишком много аргументов. На этом этапе я решил попробовать вложенную векторную структуру, как определено выше, но хотел бы избежать этого маршрута.
Как бы я повернуть data
в матрицу (Incanter), так что он будет принят в качестве входных данных для функции Incanter principal-components
, Для простоты назовем новую матрицу fooMatrix.
Как только эта матрица, fooMatrix, будет построена, следующий код должен работать для извлечения первых двух основных компонентов
(def pca (principal-components fooMatrix))
(def components (:rotation pca))
(def pc1 (sel components :cols 0))
(def pc2 (sel components :cols 1))
и тогда данные могут быть спроецированы на основные компоненты
(def principal1 (mmult fooMatrix pc1))
(def principal2 (mmult fooMatrix pc2))
1 ответ
Проверьте API Incanter. Я верю, что ты просто хочешь (incanter.core/matrix data)
, Это ваши варианты матричной функции Инкантера. Возможно, А2 - это то, что вас интересует.
(def A (matrix [[1 2 3] [4 5 6] [7 8 9]])) ; produces a 3x3 matrix
(def A2 (matrix [1 2 3 4 5 6 7 8 9] 3)) ; produces the same 3x3 matrix
(def B (matrix [1 2 3 4 5 6 7 8 9])) ; produces a 9x1 column vector
Пример использования ваших данных:
user=> (use '[incanter core stats charts datasets])
nil
user=>(def data [0.69 0.49 -1.31 -1.21 0.39 0.99 0.09 0.29 1.29
1.09 0.49 0.79 0.19 (- 0 0.31) (- 0 0.81) (- 0 0.81)
(- 0 0.31) (- 0 0.31) (- 0 0.71) (- 0 1.01)])
user=>(def fooMatrix (matrix data 2))
user=>(principal-components fooMatrix)
{:std-dev (1.3877785387777999 0.27215937850413047), :rotation A 2x2 matrix
-------------
-7.07e-01 -7.07e-01
-7.07e-01 7.07e-01
}
Вуаля. Вложенная векторная структура исчезла.