pca
Análisis de los componentes principales de datos sin procesar
Sintaxis
Descripción
devuelve los coeficientes de los componentes principales, también conocidos como cargas, para la matriz de datos n por p, coeff
= pca(X
)X
. Las filas de X
corresponden a observaciones y las columnas corresponden a variables. La matriz de coeficientes es p por p. Cada columna de coeff
contiene coeficientes para un componente principal y las columnas están en un orden descendente de varianza de componente. De forma predeterminada, pca
centra los datos y utiliza el algoritmo de descomposición en valores singulares (SVD).
devuelve cualquier argumento de salida de las sintaxis previas utilizando opciones adicionales para la computación y manejo de tipos de datos especiales, especificadas por uno o más pares de argumentos coeff
= pca(X
,Name,Value
)Name,Value
.
Por ejemplo, puede especificar el número de componentes principales que pca
devuelve o el uso de un algoritmo distinto de SVD.
[
también devuelve las puntuaciones de los componentes principales en coeff
,score
,latent
] = pca(___)score
y las varianzas de los componentes principales en latent
. Puede utilizar cualquiera de los argumentos de entrada de las sintaxis anteriores.
Las puntuaciones de los componentes principales son las representaciones de X
en el espacio de los componentes principales. Las filas de score
corresponden a observaciones y las columnas corresponden a los componentes.
Las varianzas de los componentes principales son valores propios de la matriz de covarianzas de X
.
Ejemplos
Componentes principales de un conjunto de datos
Cargue el conjunto de datos de muestra.
load hald
Los datos de los ingredientes tienen 13 observaciones de 4 variables.
Encuentre los componentes principales de los datos de los ingredientes.
coeff = pca(ingredients)
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
Las filas de coeff
contienen los coeficientes de las cuatro variables de ingredientes y sus columnas corresponden a los cuatro componentes principales.
PCA en presencia de datos faltantes
Busque los coeficientes de componentes principales cuando falten valores en un conjunto de datos.
Cargue el conjunto de datos de muestra.
load imports-85
La matriz de datos X
tiene 13 variables continuas en las columnas de la 3 a la 15: distancia entre ejes, longitud, anchura, altura, tara, cilindrada, diámetro, carrera, relación de compresión, potencia, RPM máximas, mpg en ciudad y mpg en autopista. A las variables diámetro y carrera les faltan cuatro valores en las filas de la 56 a la 59 y a las variables potencia y RPM máximas les faltan dos valores en las filas 131 y 132.
Realice los análisis de componentes principales.
coeff = pca(X(:,3:15));
De manera predeterminada, pca
lleva a cabo la acción especificada por el argumento de par nombre-valor 'Rows','complete'
. Esta opción elimina las observaciones con valores NaN
antes del cálculo. Las filas de NaN
se vuelven a insertar en score
y tsquared
en las ubicaciones correspondientes, es decir en las filas 56 a 59, 131 y 132.
Utilice 'pairwise'
para realizar el análisis de componentes principales.
coeff = pca(X(:,3:15),'Rows','pairwise');
En este caso, pca
computa el elemento (i, j) de la matriz de covarianzas utilizando la filas sin valores NaN
en las columnas i o j de X
. Tenga en cuenta que la matriz de covarianzas resultante puede no ser definida positiva. Esta opción se aplica cuando el algoritmo pca
utiliza la descomposición en valores propios. Cuando no especifica el algoritmo, como en este ejemplo, pca
lo establece en 'eig'
. Si precisa 'svd'
como el algoritmo, con la opción 'pairwise'
, entonces pca
devuelve un mensaje de advertencia, establece el algoritmo en 'eig'
y continúa.
Si utiliza el argumento de par nombre-valor 'Rows','all'
, pca
se termina porque esta opción asume que no faltan valores en el conjunto de datos.
coeff = pca(X(:,3:15),'Rows','all');
Error using pca (line 180) Raw data contains NaN missing value while 'Rows' option is set to 'all'. Consider using 'complete' or pairwise' option instead.
PCA ponderada
Utilice las varianzas de la variable inversa como pesos cuando realice el análisis de componentes principales.
Cargue el conjunto de datos de muestra.
load hald
Realice el análisis de componentes principales utilizando la inversa de las varianzas de los ingredientes como pesos variables.
[wcoeff,~,latent,~,explained] = pca(ingredients,'VariableWeights','variance')
wcoeff = 4×4
-2.7998 2.9940 -3.9736 1.4180
-8.7743 -6.4411 4.8927 9.9863
2.5240 -3.8749 -4.0845 1.7196
9.1714 7.5529 3.2710 11.3273
latent = 4×1
2.2357
1.5761
0.1866
0.0016
explained = 4×1
55.8926
39.4017
4.6652
0.0406
Tenga en cuenta que la matriz de coeficientes, wcoeff
, no es ortonormal.
Calcule la matriz de coeficientes ortonormal.
coefforth = diag(std(ingredients))\wcoeff
coefforth = 4×4
-0.4760 0.5090 -0.6755 0.2411
-0.5639 -0.4139 0.3144 0.6418
0.3941 -0.6050 -0.6377 0.2685
0.5479 0.4512 0.1954 0.6767
Compruebe la ortonormalidad de la nueva matriz de coeficientes, coefforth
.
coefforth*coefforth'
ans = 4×4
1.0000 0.0000 -0.0000 0.0000
0.0000 1.0000 -0.0000 -0.0000
-0.0000 -0.0000 1.0000 0.0000
0.0000 -0.0000 0.0000 1.0000
PCA con ALS para datos faltantes
Encuentre los componentes principales con el algoritmo de mínimos cuadrados alternos (ALS) donde haya valores faltantes en los datos.
Cargue los datos de muestra.
load hald
Los datos de los ingredientes tienen 13 observaciones de 4 variables.
Realice el análisis de componentes principales con el algoritmo ALS y muestre los coeficientes de componentes.
[coeff,score,latent,tsquared,explained] = pca(ingredients); coeff
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
Introduzca los valores faltantes de forma aleatoria.
y = ingredients; rng('default'); % for reproducibility ix = random('unif',0,1,size(y))<0.30; y(ix) = NaN
y = 13×4
7 26 6 NaN
1 29 15 52
NaN NaN 8 20
11 31 NaN 47
7 52 6 33
NaN 55 NaN NaN
NaN 71 NaN 6
1 31 NaN 44
2 NaN NaN 22
21 47 4 26
⋮
Aproximadamente al 30% de los datos le faltan valores, indicado por NaN
.
Realice el análisis de componentes principales con el algoritmo ALS y muestre los coeficientes de componentes.
[coeff1,score1,latent,tsquared,explained,mu1] = pca(y,... 'algorithm','als'); coeff1
coeff1 = 4×4
-0.0362 0.8215 -0.5252 0.2190
-0.6831 -0.0998 0.1828 0.6999
0.0169 0.5575 0.8215 -0.1185
0.7292 -0.0657 0.1261 0.6694
Muestre la media estimada.
mu1
mu1 = 1×4
8.9956 47.9088 9.0451 28.5515
Reconstruya los datos observados.
t = score1*coeff1' + repmat(mu1,13,1)
t = 13×4
7.0000 26.0000 6.0000 51.5250
1.0000 29.0000 15.0000 52.0000
10.7819 53.0230 8.0000 20.0000
11.0000 31.0000 13.5500 47.0000
7.0000 52.0000 6.0000 33.0000
10.4818 55.0000 7.8328 17.9362
3.0982 71.0000 11.9491 6.0000
1.0000 31.0000 -0.5161 44.0000
2.0000 53.7914 5.7710 22.0000
21.0000 47.0000 4.0000 26.0000
⋮
El algoritmo ALS estima los valores faltantes en los datos.
Otra manera de comparar los resultados es encontrar el ángulo entre los dos espacios comprendidos por los vectores de coeficientes. Encuentre el ángulo entre los coeficientes encontrados para los datos completos y los datos con valores faltantes utilizando ALS.
subspace(coeff,coeff1)
ans = 8.3261e-16
Este es un valor pequeño. Indica que los resultados, si usa pca
con el argumento de par nombre-valor 'Rows','complete'
cuando no faltan datos y si usa pca
con el argumento de par nombre-valor 'algorithm','als'
cuando faltan datos, están cerca.
Realice el análisis de componentes principales con el argumento de par nombre-valor 'Rows','complete'
y muestre los coeficientes de los componentes.
[coeff2,score2,latent,tsquared,explained,mu2] = pca(y,... 'Rows','complete'); coeff2
coeff2 = 4×3
-0.2054 0.8587 0.0492
-0.6694 -0.3720 0.5510
0.1474 -0.3513 -0.5187
0.6986 -0.0298 0.6518
En este caso, pca
elimina las filas con valores faltantes e y
tiene solo cuatro filas sin valores faltantes. pca
devuelve solo los otros componentes principales. No puede utilizar la opción 'Rows','pairwise'
porque la matriz de covarianzas no es semidefinida positiva y pca
devuelve un mensaje de error.
Encuentre el ángulo entre los coeficientes encontrados para los datos completos y los datos con valores faltantes utilizando la eliminación por lista (cuando 'Rows','complete'
).
subspace(coeff(:,1:3),coeff2)
ans = 0.3576
El ángulo entre los dos espacios es sustancialmente más grande. Esto indica que estos dos resultados son diferentes.
Muestre la media estimada.
mu2
mu2 = 1×4
7.8889 46.9091 9.8750 29.6000
En este caso, la media es solo la media de muestra de y
.
Reconstruya los datos observados.
score2*coeff2'
ans = 13×4
NaN NaN NaN NaN
-7.5162 -18.3545 4.0968 22.0056
NaN NaN NaN NaN
NaN NaN NaN NaN
-0.5644 5.3213 -3.3432 3.6040
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
12.8315 -0.1076 -6.3333 -3.7758
⋮
Esto muestra que las filas que contienen valores NaN
no funcionan tan bien como el algoritmo ALS. Utilizar ALS es mejor cuando a los datos les faltan demasiados valores.
Varianzas, puntuaciones y coeficientes de componentes principales
Encuentre los coeficientes, las puntuaciones y las varianzas de los componentes principales.
Cargue el conjunto de datos de muestra.
load hald
Los datos de los ingredientes tienen 13 observaciones de 4 variables.
Encuentre los coeficientes, las puntuaciones y las varianzas de los componentes principales para los datos de los ingredientes.
[coeff,score,latent] = pca(ingredients)
coeff = 4×4
-0.0678 -0.6460 0.5673 0.5062
-0.6785 -0.0200 -0.5440 0.4933
0.0290 0.7553 0.4036 0.5156
0.7309 -0.1085 -0.4684 0.4844
score = 13×4
36.8218 -6.8709 -4.5909 0.3967
29.6073 4.6109 -2.2476 -0.3958
-12.9818 -4.2049 0.9022 -1.1261
23.7147 -6.6341 1.8547 -0.3786
-0.5532 -4.4617 -6.0874 0.1424
-10.8125 -3.6466 0.9130 -0.1350
-32.5882 8.9798 -1.6063 0.0818
22.6064 10.7259 3.2365 0.3243
-9.2626 8.9854 -0.0169 -0.5437
-3.2840 -14.1573 7.0465 0.3405
⋮
latent = 4×1
517.7969
67.4964
12.4054
0.2372
Cada columna de score
corresponde a un componente principal. El vector latent
almacena las varianzas de los cuatro componentes principales.
Reconstruya los datos de ingredientes centrados.
Xcentered = score*coeff'
Xcentered = 13×4
-0.4615 -22.1538 -5.7692 30.0000
-6.4615 -19.1538 3.2308 22.0000
3.5385 7.8462 -3.7692 -10.0000
3.5385 -17.1538 -3.7692 17.0000
-0.4615 3.8462 -5.7692 3.0000
3.5385 6.8462 -2.7692 -8.0000
-4.4615 22.8462 5.2308 -24.0000
-6.4615 -17.1538 10.2308 14.0000
-5.4615 5.8462 6.2308 -8.0000
13.5385 -1.1538 -7.7692 -4.0000
⋮
Los nuevos datos en Xcentered
son los datos de ingredientes originales centrados restando las medias de la columna de las columnas correspondientes.
Visualice los coeficientes de los componentes principales ortonormales para cada variable y las puntuaciones de componentes principales para cada observación en una sola gráfica.
biplot(coeff(:,1:2),'scores',score(:,1:2),'varlabels',{'v_1','v_2','v_3','v_4'});
Las cuatro variables están representadas en este biplot por un vector, y la dirección y la longitud del vector indican cómo contribuye cada variable a los dos componentes principales en la gráfica. Por ejemplo, el primer componente principal, que se encuentra en el eje horizontal, tiene coeficientes positivos para la tercera y cuarta variable. Por lo tanto, los vectores y se indican en la mitad derecha de la gráfica. El mayor coeficiente en el primer componente principal es el cuarto, lo que corresponde con la variable .
El segundo componente principal, que está en el eje vertical, tiene coeficientes negativos para las variables , y , y un coeficiente positivo para la variable .
Este biplot en 2D también incluye un punto para cada una de las 13 observaciones, con coordenadas que indican la puntuación de cada observación para los dos componentes principales de la gráfica. Por ejemplo, los puntos cerca del borde izquierdo de la gráfica tienen las puntuaciones más bajas para el primer componente principal. Los puntos están escalados con respecto al valor de puntuación máximo y a la longitud máxima del coeficiente, por lo que solo se pueden determinar sus ubicaciones relativas a partir de la gráfica.
Estadística de T-cuadrado
Encuentre los valores de la estadística de T-cuadrado de Hotelling.
Cargue el conjunto de datos de muestra.
load hald
Los datos de los ingredientes tienen 13 observaciones de 4 variables.
Realice el análisis de los componentes principales y solicite los valores de T-cuadrado.
[coeff,score,latent,tsquared] = pca(ingredients); tsquared
tsquared = 13×1
5.6803
3.0758
6.0002
2.6198
3.3681
0.5668
3.4818
3.9794
2.6086
7.4818
⋮
Solicite solo los primeros dos componentes principales y calcule los valores de T-cuadrado en el espacio reducido de los componentes principales solicitados.
[coeff,score,latent,tsquared] = pca(ingredients,'NumComponents',2);
tsquared
tsquared = 13×1
5.6803
3.0758
6.0002
2.6198
3.3681
0.5668
3.4818
3.9794
2.6086
7.4818
⋮
Tenga en cuenta que incluso cuando especifica un espacio de componente reducido, pca
calcula los valores de T-cuadrado en el espacio completo, utilizando los cuatro componentes.
El valor de T-cuadrado en el espacio reducido se corresponde con la distancia de Mahalanobis en el espacio reducido.
tsqreduced = mahal(score,score)
tsqreduced = 13×1
3.3179
2.0079
0.5874
1.7382
0.2955
0.4228
3.2457
2.6914
1.3619
2.9903
⋮
Calcule los valores T-cuadrado en el espacio descartado tomando la diferencia de los valores T-cuadrado en el espacio completo y la distancia de Mahalanobis en el espacio reducido.
tsqdiscarded = tsquared - tsqreduced
tsqdiscarded = 13×1
2.3624
1.0679
5.4128
0.8816
3.0726
0.1440
0.2362
1.2880
1.2467
4.4915
⋮
Variabilidad del porcentaje explicada por los componentes principales
Encuentre la variabilidad del porcentaje explicada por los componentes principales. Muestre la representación de los datos en el espacio de componentes principales.
Cargue el conjunto de datos de muestra.
load imports-85
La matriz de datos X
tiene 13 variables continuas en las columnas de la 3 a la 15: distancia entre ejes, longitud, anchura, altura, tara, cilindrada, diámetro, carrera, relación de compresión, potencia, RPM máximas, mpg en ciudad y mpg en autopista.
Encuentre la variabilidad del porcentaje explicada por los componentes principales de estas variables.
[coeff,score,latent,tsquared,explained] = pca(X(:,3:15)); explained
explained = 13×1
64.3429
35.4484
0.1550
0.0379
0.0078
0.0048
0.0013
0.0011
0.0005
0.0002
⋮
Los tres primeros componentes explican el 99,95% de toda la variabilidad.
Visualice la representación de datos en el espacio de los tres primeros componentes principales.
scatter3(score(:,1),score(:,2),score(:,3)) axis equal xlabel('1st Principal Component') ylabel('2nd Principal Component') zlabel('3rd Principal Component')
Los datos muestran la mayor variabilidad a lo largo del primer eje de componentes principales. Esta es la mayor varianza posible entre todas las opciones posibles del primer eje. La variabilidad a lo largo del segundo eje de componentes principales es la mayor entre todas las posibles opciones restantes del segundo eje. El tercer eje de componentes principales tiene la tercera mayor variabilidad, que es significativamente menor que la variabilidad a lo largo del segundo eje de componentes principales. No merece la pena examinar los ejes de componentes principales cuarto a decimotercero, porque solo explican el 0,05% de toda la variabilidad de los datos.
Para omitir cualquiera de las salidas, puede utilizar ~
en vez del elemento correspondiente. Por ejemplo, si no quiere obtener los valores de T-cuadrado, especifique:
[coeff,score,latent,~,explained] = pca(X(:,3:15));
Aplicar PCA a los nuevos datos y generar código C/C++
Encuentre los componentes principales para un conjunto de datos y aplique el PCA a otro conjunto de datos. Este procedimiento es útil cuando tiene un conjunto de datos de entrenamiento y un conjunto de datos de prueba para un modelo de machine learning. Por ejemplo, puede procesar previamente el conjunto de datos de entrenamiento utilizando el PCA y después formando un modelo. Para probar el modelo formado utilizando el conjunto de datos de prueba, tiene que aplicar la transformación del PCA obtenida de los datos de entrenamiento al conjunto de datos de prueba.
Este ejemplo también describe cómo generar código C/C++. Debido a que pca
es compatible con la generación de código, puede generar código que lleve a cabo el PCA con un conjunto de datos de entrenamiento y aplica el PCA al conjunto de datos de prueba. Después implemente el código en un dispositivo. En este flujo de trabajo, debe pasar los datos de entrenamiento, que pueden tener un tamaño considerable. Para ahorrar memoria en el dispositivo, puede separar el entrenamiento y la predicción. Utilice pca
en MATLAB® y aplique PCA a datos nuevos en el código generado en el dispositivo.
Generar código C/C++ requiere MATLAB® Coder™.
Aplicar PCA a nuevos datos
Cargue el conjunto de datos a una tabla mediante readtable
. El conjunto de datos está en el archivo CreditRating_Historical.dat
, que contiene los datos históricos de calificación de crédito.
creditrating = readtable('CreditRating_Historical.dat');
creditrating(1:5,:)
ans=5×8 table
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating
_____ _____ _____ _______ ________ _____ ________ _______
62394 0.013 0.104 0.036 0.447 0.142 3 {'BB' }
48608 0.232 0.335 0.062 1.969 0.281 8 {'A' }
42444 0.311 0.367 0.074 1.935 0.366 1 {'A' }
48631 0.194 0.263 0.062 1.017 0.228 4 {'BBB'}
43768 0.121 0.413 0.057 3.647 0.466 12 {'AAA'}
La primera columna es un ID de cada observación y la última columna es una calificación. Especifique las columnas de la segunda a la séptima como datos predictores y especifique la última columna (Rating
) como la respuesta.
X = table2array(creditrating(:,2:7)); Y = creditrating.Rating;
Utilice las 100 primeras observaciones como datos de prueba y el resto como datos de entrenamiento.
XTest = X(1:100,:); XTrain = X(101:end,:); YTest = Y(1:100); YTrain = Y(101:end);
Encuentre los componentes principales para el conjunto de datos de entrenamiento XTrain
.
[coeff,scoreTrain,~,~,explained,mu] = pca(XTrain);
Este código devuelve cuatro salidas: coeff
, scoreTrain
, explained
y mu
. Utilice explained
(porcentaje de la varianza total explicada) para encontrar el número de componentes necesarios para explicar una variabilidad de al menos un 95%. Utilice coeff
(coeficientes de componentes principales) y mu
(medias estimadas de XTrain
) para aplicar el PCA a un conjunto de datos de prueba. Utilice scoreTrain
(puntuaciones de componentes principales) en vez de XTrain
cuando entrene un modelo.
Muestre la variabilidad del porcentaje explicada por los componentes principales.
explained
explained = 6×1
58.2614
41.2606
0.3875
0.0632
0.0269
0.0005
Los dos primeros componentes explican más del 95% de toda la variabilidad. Encuentre el número de componentes necesario para explicar al menos el 95% de la variabilidad.
idx = find(cumsum(explained)>95,1)
idx = 2
Forme un árbol de clasificación con los primeros dos componentes.
scoreTrain95 = scoreTrain(:,1:idx); mdl = fitctree(scoreTrain95,YTrain);
mdl
es un modelo de ClassificationTree
.
Para utilizar el modelo formado para el conjunto de prueba, tiene que transformar el conjunto de datos con el PCA obtenido del conjunto de datos de entrenamiento. Obtenga las puntuaciones de componentes principales del conjunto de datos de prueba restando mu
de XTest
y multiplicándolo por coeff
. Solo son necesarias las puntuaciones de los dos primeros componentes, por lo que se utilizan los dos primeros coeficientes coeff(:,1:idx)
.
scoreTest95 = (XTest-mu)*coeff(:,1:idx);
Pase el modelo formado mdl
y el conjunto de datos de prueba transformado scoreTest
a la función predict
para predecir las calificaciones para el conjunto de prueba.
YTest_predicted = predict(mdl,scoreTest95);
Generar código
Genere código que aplique PCA a los datos y prediga la calificación con el modelo formado. Tenga en cuenta que generar código C/C++ requiere MATLAB® Coder™.
Guarde el modelo de clasificación en el archivo myMdl.mat
con saveLearnerForCoder
.
saveLearnerForCoder(mdl,'myMdl');
Defina una función de punto de entrada nombrado myPCAPredict
que acepta un conjunto de datos de prueba (XTest
) e información del PCA (coeff
y mu
) y devuelve las calificaciones de los datos de prueba.
Añada la directiva del compilador (o pragma) %#codegen
a la función de punto de entrada después de la firma de la función para indicar que intenta generar código para el algoritmo de MATLAB. Añadir esta directiva instruye al analizador de código de MATLAB para ayudarle a diagnosticar y arreglar vulneraciones que provocarían errores durante la generación de código.
function label = myPCAPredict(XTest,coeff,mu) %#codegen % Transform data using PCA scoreTest = bsxfun(@minus,XTest,mu)*coeff; % Load trained classification model mdl = loadLearnerForCoder('myMdl'); % Predict ratings using the loaded model label = predict(mdl,scoreTest);
myPCAPredict
aplica el PCA a los nuevos datos con coeff
y mu
, y predice las calificaciones con los datos transformados. De esta manera, no tiene que pasar los datos de entrenamiento, que pueden ser de un tamaño considerable.
Nota: si hace clic en el botón ubicado en la zona superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abrirá la carpeta de ejemplo. Esta carpeta incluye el archivo de función de punto de entrada.
Genere código mediante codegen
(MATLAB Coder). Dado que C y C++ son lenguajes de tipado estático, debe determinar las propiedades de todas las variables de la función de entrada en tiempo de compilación. Para especificar los tipos de datos y el tamaño de arreglo de entrada exacto, pase una expresión de MATLAB® que represente el conjunto de valores con un tipo de datos y un tamaño de arreglo determinado con la opción -args
. Si el número de observaciones no se conoce en el momento de la compilación, también puede especificar la entrada como tamaño variable utilizando coder.typeof
(MATLAB Coder). Para obtener más detalles, consulte Specify Variable-Size Arguments for Code Generation.
codegen myPCAPredict -args {coder.typeof(XTest,[Inf,6],[1,0]),coeff(:,1:idx),mu}
Code generation successful.
codegen
genera la función MEX de myPCAPredict_mex
con una extensión dependiente de la plataforma.
Compruebe el código generado.
YTest_predicted_mex = myPCAPredict_mex(XTest,coeff(:,1:idx),mu); isequal(YTest_predicted,YTest_predicted_mex)
ans = logical
1
isequal
devuelve una lógica 1 (true
), lo que significa que todas las entradas son iguales. La comparación confirma que la función predict
de mdl
y la función myPCAPredict_mex
devuelven las mismas calificaciones.
Para obtener más información sobre la generación de código, consulte Introduction to Code Generation y Code Generation and Classification Learner App. Este último describe cómo realizar el PCA y entrenar un modelo mediante la app Classification Learner, y cómo generar código C/C++ que prediga las etiquetas de los nuevos datos basándose en el modelo formado.
Argumentos de entrada
X
— Datos de entrada
matriz
Datos de entrada para los que calcular los componentes principales, especificados como una matriz n por p. Las filas de X
corresponden a observaciones y las columnas, a las variables.
Tipos de datos: single
| double
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.
En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name
entre comillas.
Ejemplo: 'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3
especifica que pca
utiliza el algoritmo de descomposición en valores propios, no centra los datos, utiliza todas las observaciones y solo devuelve los tres primeros componentes principales.
Algorithm
— Algoritmo de componentes principales
'svd'
(predeterminado) | 'eig'
| 'als'
Algoritmo de componentes principales que pca
utiliza para realizar el análisis de componentes principales, especificado como el par separado por comas que consta de 'Algorithm'
y uno de los siguientes.
Valor | Descripción |
---|---|
'svd' | Valor predeterminado. Descomposición en valores singulares (SVD) de X . |
'eig' | Descomposición en valores propios (EIG) de la matriz de covarianzas. El algoritmo EIG es más rápido que SVD cuando el número de observaciones, n, supera el número de variables, p, pero es menos preciso porque el número de condición de la covarianza es el cuadrado del número de condición de X . |
'als' | Algoritmo de mínimos cuadrados alternos (ALS). Este algoritmo encuentra la mejor aproximación de rango k factorizando ALS está diseñado para manejar mejor los valores faltantes. Es preferible a la eliminación por pares ( |
Ejemplo: 'Algorithm','eig'
Centered
— Indicador para centrar las columnas
true
(predeterminado) | false
Indicador para centrar las columnas, especificado como el par separado por comas que consta de 'Centered'
y una de estas expresiones lógicas.
Valor | Descripción |
---|---|
true | Predeterminado. |
false | En este caso, |
Ejemplo: 'Centered',false
Tipos de datos: logical
Economy
— Indicador de salida de tamaño económico
true
(predeterminado) | false
Indicador de salida de tamaño económico cuando los grados de libertad, d, sean más pequeños que el número de variables, p, especificado como el par separado por comas que consta de 'Economy'
y una de estas expresiones lógicas.
Valor | Descripción |
---|---|
true | Predeterminado. Esta opción puede ser significativamente más rápida cuando el número de variables p es mucho más grande que d. |
false |
|
Tenga en cuenta que cuando d < p, score(:,d+1:p)
y latent(d+1:p)
son necesariamente cero, y las columnas de coeff(:,d+1:p)
definen direcciones ortogonales a X
.
Ejemplo: 'Economy',false
Tipos de datos: logical
NumComponents
— Número de componentes solicitados
número de variables (predeterminado) | valor entero de escalar
Número de componentes solicitados, especificado como el par separado por comas que consta de 'NumComponents'
y un número entero escalar k que satisface 0 <k ≤ p, donde p es el número de variables originales en X
. Cuando se especifique, pca
devuelve las primeras k columnas de coeff
y score
.
Ejemplo: 'NumComponents',3
Tipos de datos: single
| double
Rows
— Acción a realizar para los valores NaN
'complete'
(predeterminado) | 'pairwise'
| 'all'
Acción a realizar para los valores NaN
en la matriz de datos X
, especificada como el par separado por comas que consta de 'Rows'
y uno de los siguientes.
Valor | Descripción |
---|---|
'complete' | Predeterminado. Las observaciones con valores |
'pairwise' | La opción solo se aplica cuando el algoritmo es Cuando especifique la opción Tenga en cuenta que la matriz de covarianzas resultante puede no ser definida positiva. En ese caso, |
'all' | Se espera que |
Ejemplo: 'Rows','pairwise'
Weights
— Pesos de las observaciones
unos (predeterminado) | vector fila
Pesos de la observación, especificados como el par separado por comas que consta de 'Weights'
y un vector de longitud n que contiene todos los elementos positivos.
Tipos de datos: single
| double
VariableWeights
— Pesos variables
vector fila | 'variance'
Pesos variables, especificados como el par separado por comas que consta de 'VariableWeights'
y uno de los siguientes.
Valor | Descripción |
---|---|
vector fila | Vector de longitud p que contiene todos los elementos positivos. |
'variance' | Los pesos variables son la inversa de la varianza de la muestra. Si también asigna pesos a las observaciones utilizando Si |
Ejemplo: 'VariableWeights','variance'
Tipos de datos: single
| double
| char
| string
Coeff0
— Valor inicial para los coeficientes
matriz de valores aleatorios (predeterminado) | Matriz p por k
Valor inicial de la matriz de coeficientes coeff
, especificado como el par separado por comas que consta de 'Coeff0'
y una matriz p por k, donde p es el número de variables y k es el número de componentes principales solicitados.
Nota
Puede utilizar este par nombre-valor solo cuando 'algorithm'
sea 'als'
.
Tipos de datos: single
| double
Score0
— Valor inicial para las puntuaciones
matriz de valores aleatorios (predeterminado) | Matriz k por m
Valor inicial para la matriz de puntuaciones score
, especificado como el par separado por comas que consta de 'Score0'
y una matriz n por k, donde n es el número de observaciones y k es el número de componentes principales solicitados.
Nota
Puede utilizar este par nombre-valor solo cuando 'algorithm'
sea 'als'
.
Tipos de datos: single
| double
Options
— Opciones para las iteraciones
estructura
Opciones para las iteraciones, especificadas como el par separado por comas que consta de 'Options'
y una estructura creada por la función statset
. pca
utiliza los siguientes campos en la estructura de opciones.
Nombre del campo | Descripción |
---|---|
'Display' | Nivel de salida en pantalla. Las opciones son 'off' , 'final' y 'iter' . |
'MaxIter' | Número máximo de pasos permitidos. El valor predeterminado es 1000. A diferencia de la configuración de la optimización, lograr el valor MaxIter se considera convergencia. |
'TolFun' | Número positivo que da la tolerancia de terminación para la función de costes. El valor predeterminado es 1e-6. |
'TolX' | Número positivo que da el límite de convergencia para el cambio relativo en los elementos de las matrices izquierda y derecha de factores, L y R, en el algoritmo ALS. El valor predeterminado es 1e-6. |
Nota
Puede utilizar este par nombre-valor solo cuando 'algorithm'
sea 'als'
.
Puede cambiar los valores de estos campos y especificar la nueva estructura en pca
utilizando el argumento de par nombre-valor 'Options'
.
Ejemplo: opt = statset('pca'); opt.MaxIter = 2000; coeff = pca(X,'Options',opt);
Tipos de datos: struct
Argumentos de salida
coeff
— Coeficientes de componentes principales
matriz
Coeficientes de componentes principales, devueltos como una matriz p por p. Cada columna de coeff
contiene coeficientes para un componente principal. Las columnas están en orden descendente según la varianza del componente, latent
.
score
— Puntuaciones de componentes principales
matriz
Puntuaciones de componentes principales, devueltas como una matriz. Las filas de score
corresponden a observaciones y las columnas, a componentes.
latent
— Varianzas de componentes principales
vector columna
Las varianzas de componentes principales, que son los valores propios de la matriz de covarianzas de X
, devueltas como un vector columna.
tsquared
— Estadística de T-cuadrado de Hotelling
vector columna
Estadística de T-cuadrado de Hotelling, que es la suma de los cuadrados de las puntuaciones estandarizadas para cada observación, devuelta como un vector columna.
explained
— Porcentaje de la varianza total explicado
vector columna
Porcentaje de la varianza total explicado por cada componente principal, devuelto como un vector columna.
Más acerca de
Estadística de T-cuadrado de Hotelling
La estadística de T-cuadrado de Hotelling es una medida estadística de la distancia de la multivariante de cada observación desde el centro del conjunto de datos.
Incluso cuando solicita menos componentes que el número de variables, pca
utiliza todos los componentes principales para calcular la estadística de T-cuadrado (se calcula en todo el espacio). Si quiere la estadística T-cuadrado en el espacio reducido o en el espacio descartado, haga una de las siguientes cosas:
Para la estadística T-cuadrado en el espacio reducido, utilice
mahal(score,score)
.Para la estadística T-cuadrado en el espacio descartado, primero calcule la estadística de T-cuadrado con
[coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...)
, calcule la estadística T-cuadrado en el espacio reducido contsqreduced = mahal(score,score)
y tome la diferencia:tsquared
-tsqreduced
.
Grados de libertad
El grado de libertad, d, es igual a n – 1, si los datos están centrados y n en caso contrario, donde:
n es el número de filas sin
NaN
si utiliza'Rows','complete'
.n es el número de filas sin ningún
NaN
en el par de columnas que tiene el número máximo de filas sinNaN
si utiliza'Rows','pairwise'
.
Pesos variables
Tenga en cuenta que cuando se utilizan los pesos variables, la matriz de coeficientes no es ortonormal. Suponga que el vector de pesos variables que utilizó se llama varwei
y el vector de coeficientes de componentes principales pca
devuelto es wcoeff
. Puede calcular los coeficientes ortonormales con la transformación diag(sqrt(varwei))*wcoeff
.
Algoritmos
La función pca
impone una convención de signos, forzando que el elemento con la mayor magnitud en cada columna de coefs
sea positivo. Cambiar el símbolo de un vector de coeficientes no cambia su significado.
Funcionalidad alternativa
App
Para ejecutar pca
de forma interactiva en Live Editor, utilice la tarea Reduce Dimensionality de Live Editor.
Referencias
[1] Jolliffe, I. T. Principal Component Analysis. 2nd ed., Springer, 2002.
[2] Krzanowski, W. J. Principles of Multivariate Analysis. Oxford University Press, 1988.
[3] Seber, G. A. F. Multivariate Observations. Wiley, 1984.
[4] Jackson, J. E. A. User's Guide to Principal Components. Wiley, 1988.
[5] Roweis, S. “EM Algorithms for PCA and SPCA.” In Proceedings of the 1997 Conference on Advances in Neural Information Processing Systems. Vol.10 (NIPS 1997), Cambridge, MA, USA: MIT Press, 1998, pp. 626–632.
[6] Ilin, A., and T. Raiko. “Practical Approaches to Principal Component Analysis in the Presence of Missing Values.” J. Mach. Learn. Res.. Vol. 11, August 2010, pp. 1957–2000.
Capacidades ampliadas
Arreglos altos
Realice cálculos con arreglos que tienen más filas de las que caben en la memoria.
Esta función es compatible con los arreglos altos para datos con memoria insuficiente con algunas limitaciones.
pca
funciona directamente con los arreglos altos calculando la matriz de covarianzas y utilizando la funciónpcacov
de memoria interna para calcular los componentes principales.Las sintaxis compatibles son:
coeff = pca(X)
[coeff,score,latent] = pca(X)
[coeff,score,latent,explained] = pca(X)
[coeff,score,latent,tsquared] = pca(X)
[coeff,score,latent,tsquared,explained] = pca(X)
Los argumentos de par nombre-valor no son compatibles.
Para obtener más información, consulte Arreglos altos para datos con memoria insuficiente.
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Cuando
'Algorithm'
es'als'
, el valor'Display'
para'Options'
se ignora.Los valores de los argumentos de par nombre-valor
'Weights'
y'VariableWeights'
deben ser reales.El valor del argumento de par nombre-valor
'Economy'
debe ser una constante de tiempo de compilación. Por ejemplo, para utilizar el argumento de par nombre-valor'Economy',false
en el código generado, incluya{coder.Constant('Economy'),coder.Constant(false)}
en el valor-args
decodegen
(MATLAB Coder).Los nombres en los argumentos nombre-valor deben ser constantes en tiempo de compilación.
El código generado siempre devuelve la quinta salida
explained
como un vector columna.El código generado siempre devuelve la sexta salida
mu
como un vector fila.Si
mu
está vacío,pca
devuelvemu
como un arreglo 1 por 0.pca
no conviertemu
a un arreglo vacío 0 por 0.El código generado no trata una matriz de entrada
X
que tiene todos los valoresNaN
como un caso especial. Las dimensiones de salida están acordes con las entradas finitas correspondientes.Para ahorrar memoria en el dispositivo en el que implemente el código generado, puede separar el entrenamiento (construir componentes del PCA a partir de los datos de entrada) y la predicción (realización de una transformación de PCA). Construya componentes del PCA en MATLAB®. Defina una función de punto de entrada que realice una transformación del PCA con los coeficientes de componentes principales (
coeff
) y las medias estimados (mu
), que son las salidas depca
. Finalmente, genere código para la función de punto de entrada. Para ver un ejemplo, consulte Aplicar PCA a los nuevos datos y generar código C/C++.
Para obtener más información sobre la generación de código, consulte Introduction to Code Generation y General Code Generation Workflow.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
No puede especificar el argumento nombre-valor
Algorithm
como"als"
.El algoritmo EIG suele ser más rápido que SVD cuando el número de variables es grande.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Historial de versiones
Introducido en R2012b
Consulte también
barttest
| biplot
| canoncorr
| factoran
| pcacov
| pcares
| rotatefactors
| ppca
| Reduce Dimensionality
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)