machine learning - que - ¿PCA primero o normalización primero?
proyecto curricular institucional secundaria (2)
Necesitas normalizar los datos primero siempre . De lo contrario, la PCA u otras técnicas que se utilizan para reducir dimensiones darán resultados diferentes.
Al realizar una regresión o clasificación, ¿cuál es la forma correcta (o mejor) de preprocesar los datos?
- Normalizar los datos -> PCA -> entrenamiento
- PCA -> normalizar salida PCA -> entrenamiento
- Normalice los datos -> PCA -> normalice la salida de PCA -> entrenamiento
¿Cuál de los anteriores es más correcto o es la forma "estandarizada" de preprocesar los datos? Por "normalizar" me refiero a estandarización, escalamiento lineal o algunas otras técnicas.
Debes normalizar los datos antes de hacer PCA. Por ejemplo, considere la siguiente situación. Creo un conjunto de datos X
con una matriz de correlación conocida C
:
>> C = [1 0.5; 0.5 1];
>> A = chol(rho);
>> X = randn(100,2) * A;
Si ahora realizo PCA, encuentro correctamente que los componentes principales (las filas del vector de pesos) están orientados en ángulo a los ejes de coordenadas:
>> wts=pca(X)
wts =
0.6659 0.7461
-0.7461 0.6659
Si ahora escala la primera característica del conjunto de datos en 100, intuitivamente pensamos que los componentes principales no deberían cambiar:
>> Y = X;
>> Y(:,1) = 100 * Y(:,1);
Sin embargo, ahora encontramos que los componentes principales están alineados con los ejes de coordenadas:
>> wts=pca(Y)
wts =
1.0000 0.0056
-0.0056 1.0000
Para resolver esto, hay dos opciones. Primero, podría volver a escalar los datos:
>> Ynorm = bsxfun(@rdivide,Y,std(Y))
(La extraña notación bsxfun
se usa para hacer aritmética de matriz vectorial en Matlab; todo lo que estoy haciendo es restar la media y dividir por la desviación estándar de cada característica).
Ahora obtenemos resultados sensatos de PCA:
>> wts = pca(Ynorm)
wts =
-0.7125 -0.7016
0.7016 -0.7125
Son ligeramente diferentes a la PCA en los datos originales porque ahora garantizamos que nuestras características tienen una desviación estándar de la unidad, lo que no fue el caso originalmente.
La otra opción es realizar PCA utilizando la matriz de correlación de los datos, en lugar del producto externo:
>> wts = pca(Y,''corr'')
wts =
0.7071 0.7071
-0.7071 0.7071
De hecho, esto es completamente equivalente a estandarizar los datos restando la media y luego dividiendo por la desviación estándar. Es más conveniente. En mi opinión, siempre debe hacer esto a menos que tenga una buena razón para no hacerlo (por ejemplo, si desea detectar diferencias en la variación de cada función).