En el artículo Pérdida de información relativa en el PCA Los autores hacen, en algún momento (en la sección introductoria), la siguiente afirmación:
En caso de que la matriz ortogonal no se conozca a priori, sino que haya que estimarla a partir de un conjunto de vectores de datos de entrada recogidos en la matriz $\underline{X}$ el PCA se convierte en un no lineal operación:
$$\underline{Y} = \underline{w}(\underline{X})\underline{X}$$
Aquí, $\underline{w}$ es una función de valor matricial que calcula la matriz ortogonal necesaria para rotar los datos (por ejemplo, utilizando el algoritmo QR).
Esta afirmación contrasta con la mayoría de las afirmaciones sobre el PCA, que se considera transformación lineal .
He diseñado un experimento de juguete para comprobar la linealidad (propiedad de aditividad): $f(a + b) = f(a) + f(b)$ .
import numpy
from sklearn.decomposition import PCA
if __name__ == '__main__':
numpy.random.seed(42)
m = 100
d = 3
X = numpy.random.normal(size = (m, d))
# Center data
X -= numpy.mean(X, axis = 0)
pca = PCA(n_components = d)
pca.fit(X)
Y = pca.transform(X)
# Check linearity, pca(a + b) = pca(a) + pca(b)
for i in range(0, m):
for j in range(0, m):
d = pca.transform([X[i] + X[j]]) - (Y[i] + Y[j])
assert numpy.allclose(d, numpy.array([0.0, 0.0, 0.0]))
La expresión $f(a + b) - (f(a) + f(b))$ , donde $f = \mathrm{PCA}$ parece ser el vector cero por lo que asumo que la transformación (PCA) es lineal.
Qué me falta entonces, que el ACP se considere no lineal cuando la matriz ortogonal (la matriz de los componentes principales) se estima a partir de $X$ (véase la cita anterior)?
1 votos
¿Tiene esto algo que ver con la forma en que sklearn centra los datos antes de transformarlos?
1 votos
El único caso en el que $w$ tiene una fórmula lineal en $X$ es en una dimensión. Si piensa lo contrario, puede deberse a un malentendido sobre lo que $w$ representa: ¿qué crees que es?
0 votos
@Aaron y amoeba, gracias por vuestros comentarios. He actualizado el código de ejemplo. $X$ está ahora centrado antes del PCA.
0 votos
@whuber, en el artículo referenciado, $w$ representa "una función de valor matricial que calcula la matriz ortogonal necesaria para rotar los datos". Así, a mi entender, $w$ es la operación que realiza la SVD en la matriz de covarianza y devuelve la matriz (transpuesta) de vectores propios.
2 votos
¿No es obvio que una función así no puede ser lineal? De hecho, ¿cómo puede tener sentido sumar y reescalar un conjunto de vectores propios (dado que cada vector propio debe tener longitud unitaria)?
1 votos
@whuber, ¡gracias! Me costó un poco entender tus ideas. Por favor, corrígeme si me equivoco: $w(\cdot)$ es un conjunto de vectores propios, por lo que la suma $w(\cdot) + w(\cdot)$ y la multiplicación con un escalar $\alpha w(\cdot)$ no tienen ningún sentido. Por lo tanto, $w$ no puede ser una transformación lineal.