Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

pca

Análisis de componentes principales de datos sin procesar

Descripción

ejemplo

coeff = pca(X) devuelve los coeficientes de componentes principales, también conocidos como cargas, para la matriz de datos -by-.npX Las filas de corresponden a observaciones y columnas corresponden a variables.X La matriz de coeficientes es -por- .pp Cada columna de contiene coeficientes para un componente principal y las columnas están en orden descendente de varianza de componente.coeff De forma predeterminada, centra los datos y utiliza el algoritmo de descomposición de valores singulares (SVD).pca

ejemplo

coeff = pca(X,Name,Value) devuelve cualquiera de los argumentos de salida de las sintaxis anteriores mediante opciones adicionales para el cálculo y el control de tipos de datos especiales, especificados por uno o varios argumentos de par.Name,Value

Por ejemplo, puede especificar el número de retornos de componentes principales o un algoritmo distinto de SVD que se va a utilizar.pca

ejemplo

[coeff,score,latent] = pca(___) también devuelve las puntuaciones de los componentes principales y las desviaciones de los componentes principales en .scorelatent Puede utilizar cualquiera de los argumentos de entrada de las sintaxis anteriores.

Las puntuaciones de componentes principales son las representaciones de en el espacio de componentes principales.X Las filas de corresponden a observaciones y las columnas corresponden a componentes.score

Las desviaciones de componentes principales son los valores propios de la matriz de covarianza de .X

ejemplo

[coeff,score,latent,tsquared] = pca(___) también devuelve la estadística T cuadrada del Hotelling para cada observación en .X

ejemplo

[coeff,score,latent,tsquared,explained,mu] = pca(___) también devuelve , el porcentaje de la varianza total explicado por cada componente principal y , la media estimada de cada variable en .explainedmuX

Ejemplos

contraer todo

Cargue el conjunto de datos de ejemplo.

load hald

Los datos de ingredientes tienen 13 observaciones para 4 variables.

Encuentre los componentes principales para los datos de 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 contienen los coeficientes para las cuatro variables de ingrediente y sus columnas corresponden a cuatro componentes principales.coeff

Busque los coeficientes de componentes principales cuando falten valores en un conjunto de datos.

Cargue el conjunto de datos de ejemplo.

load imports-85

La matriz de datos tiene 13 variables continuas en las columnas 3 a 15: base de rueda, longitud, anchura, altura, peso de bordillo, tamaño del motor, agujero, carrera, relación de compresión, potencia, pico-rpm, ciudad-mpg y carretera-mpg.X A las variables perforadas y a los trazos les faltan cuatro valores en las filas 56 a 59, y a las variables de potencia y en las rpm máximas les faltan dos valores en las filas 131 y 132.

Realice el análisis de componentes principales.

coeff = pca(X(:,3:15)); 

De forma predeterminada, realiza la acción especificada por el argumento de par nombre-valor.pca'Rows','complete' Esta opción elimina las observaciones con valores antes del cálculo.NaN Las filas de s se reinsertan en y en las ubicaciones correspondientes, a saber, las filas 56 a 59, 131 y 132.NaNscoretsquared

Se utiliza para realizar el análisis del componente principal.'pairwise'

coeff = pca(X(:,3:15),'Rows','pairwise'); 

En este caso, calcula el elemento ( , ) de la matriz de covarianza utilizando las filas sin valores en las columnas o de .pcaijNaNijX Tenga en cuenta que la matriz de covarianza resultante podría no ser definitiva positiva. Esta opción se aplica cuando el algoritmo utiliza es eigenvalue decomposition.pca Cuando no se especifica el algoritmo, como en este ejemplo, se establece en .pca'eig' Si necesita como algoritmo, con la opción, devuelve un mensaje de advertencia, establece el algoritmo en y continúa.'svd''pairwise'pca'eig'

Si utiliza el argumento de par nombre-valor, finaliza porque esta opción supone que no faltan valores en el conjunto de datos.'Rows','all'pca

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.

Utilice las varianzas de variables inversas como ponderaciones mientras realiza el análisis de componentes principales.

Cargue el conjunto de datos de ejemplo.

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, , no es ortonormal.wcoeff

Calcular la matriz de coeficiente ortonormal.

coefforth = inv(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

Busque los componentes principales utilizando el algoritmo de mínimos cuadrados alternativos (ALS) cuando faltan valores en los datos.

Cargue los datos de ejemplo.

load hald

Los datos de ingredientes tienen 13 observaciones para 4 variables.

Realice el análisis de componentes principales utilizando el algoritmo ALS y visualice los coeficientes de los 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

Introducir los valores que faltan al azar.

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 el 30% de los datos tienen valores que faltan ahora, indicados por .NaN

Realice el análisis de componentes principales utilizando el algoritmo ALS y visualice los coeficientes de los 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

Visualice 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 que faltan en los datos.

Otra forma de comparar los resultados es encontrar el ángulo entre los dos espacios abarcados por los vectores de coeficiente. Encuentre el ángulo entre los coeficientes encontrados para los datos completos y los datos con valores que faltan utilizando ALS.

subspace(coeff,coeff1)
ans = 8.1666e-16 

Este es un valor pequeño. Indica que los resultados si se utiliza con el argumento de par nombre-valor cuando no faltan datos y si se utiliza con el argumento de par nombre-valor cuando faltan datos están cerca uno del otro.pca'Rows','complete'pca'algorithm','als'

Realice el análisis del componente principal utilizando el argumento de par nombre-valor y muestre los coeficientes de componente.'Rows','complete'

[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, quita las filas con valores que faltan y solo tiene cuatro filas sin valores que faltan. devuelve sólo tres componentes principales.pcaypca No puede utilizar la opción porque la matriz de covarianza no es semidefinida positiva y devuelve un mensaje de error.'Rows','pairwise'pca

Encuentre el ángulo entre los coeficientes encontrados para los datos completos y los datos con valores que faltan utilizando la eliminación en lista (cuando ).'Rows','complete'

subspace(coeff(:,1:3),coeff2)
ans = 0.3576 

El ángulo entre los dos espacios es sustancialmente mayor. Esto indica que estos dos resultados son diferentes.

Visualice la media estimada.

mu2
mu2 = 1×4

    7.8889   46.9091    9.8750   29.6000

En este caso, la media es sólo la media de la 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 la eliminación de filas que contienen valores no funciona tan bien como el algoritmo ALS.NaN El uso de ALS es mejor cuando los datos tienen demasiados valores que faltan.

Encuentre los coeficientes, puntuaciones y varianzas de los componentes principales.

Cargue el conjunto de datos de ejemplo.

load hald

Los datos de ingredientes tienen 13 observaciones para 4 variables.

Encuentre los coeficientes de componentes principales, las puntuaciones y las varianzas de los componentes para los datos de 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 corresponde a un componente principal.score El vector, , almacena las varianzas de los cuatro componentes principales.latent

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 son los ingredientes originales datos centrados en restando los medios de columna de las columnas correspondientes.Xcentered

Visualice los coeficientes de componente sprincipal ortonormal para cada variable y las puntuaciones de los componentes principales para cada observación en un único trazado.

biplot(coeff(:,1:2),'scores',score(:,1:2),'varlabels',{'v_1','v_2','v_3','v_4'});

Las cuatro variables se representan en esta gráfica bi por un vector, y la dirección y la longitud del vector indican cómo cada variable contribuye a los dos componentes principales de la gráfica. Por ejemplo, el primer componente principal, que está en el eje horizontal, tiene coeficientes positivos para la tercera y cuarta variables. Por lo tanto, los vectores

<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</math>
se dirigen a la mitad derecha de la trama. El coeficiente más grande del primer componente principal es el cuarto, correspondiente a la variable
<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</math>
.

El segundo componente principal, que se encuentra en el eje vertical, tiene coeficientes negativos para las variables

<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</math>
,
<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</math>
, y un coeficiente positivo para la variable
<math display="block">
<mrow>
<msub>
<mrow>
<mi>v</mi>
</mrow>
<mrow>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</math>
.

Esta gráfica bigráfica 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 en la gráfica. Por ejemplo, los puntos cerca del borde izquierdo del trazado tienen las puntuaciones más bajas para el primer componente principal. Los puntos se escalan con respecto al valor máximo de puntuación y la longitud máxima del coeficiente, por lo que solo se pueden determinar sus ubicaciones relativas a partir del trazado.

Encuentre los valores estadísticos T-squared de Hotelling.

Cargue el conjunto de datos de ejemplo.

load hald

Los datos de ingredientes tienen 13 observaciones para 4 variables.

Realice el análisis del componente principal y solicite los valores T cuadrados.

[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 dos primeros componentes principales y calcule los valores t cuadrados 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 se especifica un espacio de componentes reducido, calcula los valores cuadrados en T en todo el espacio, utilizando los cuatro componentes.pca

El valor T cuadrado en el espacio reducido corresponde a la distancia 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 cuadrados en T en el espacio descartado tomando la diferencia de los valores cuadrados en El espacio completo y la distancia 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
      ⋮

Encuentre la variabilidad porcentual explicada por los componentes principales. Mostrar la representación de datos en el espacio de componentes principales.

Cargue el conjunto de datos de ejemplo.

load imports-85

La matriz de datos tiene 13 variables continuas en las columnas 3 a 15: base de rueda, longitud, anchura, altura, peso de bordillo, tamaño del motor, agujero, carrera, relación de compresión, potencia, pico-rpm, ciudad-mpg y carretera-mpg.X

Encuentre la variabilidad porcentual 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 componente principal. Esta es la mayor varianza posible entre todas las opciones posibles del primer eje. La variabilidad a lo largo del segundo eje del componente principal es la mayor entre todas las opciones posibles del segundo eje. El tercer eje de componente principal tiene la tercera mayor variabilidad, que es significativamente menor que la variabilidad a lo largo del segundo eje de componente principal. Los ejes de componentes principales del cuarto al decimotercer no merecen ser inspeccionados, porque sólo explican el 0,05% de toda la variabilidad en los datos.

Para omitir cualquiera de las salidas, puede utilizar en su lugar en el elemento correspondiente.~ Por ejemplo, si no desea obtener los valores t cuadrados, especifique

[coeff,score,latent,~,explained] = pca(X(:,3:15));

Busque los componentes principales de 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 aprendizaje automático. Por ejemplo, puede preprocesar el conjunto de datos de entrenamiento mediante PCA y, a continuación, entrenar un modelo. Para probar el modelo entrenado mediante el conjunto de datos de prueba, debe aplicar la transformación de PCA obtenida de los datos de entrenamiento al conjunto de datos de prueba.

En este ejemplo también se describe cómo generar código C/C++. Dado que admite la generación de código, puede generar código que realice PCA mediante un conjunto de datos de entrenamiento y aplicar el PCA a un conjunto de datos de prueba.pca A continuación, implemente el código en un dispositivo. En este flujo de trabajo, debe pasar los datos de entrenamiento, que pueden ser de un tamaño considerable. Para ahorrar memoria en el dispositivo, puede separar el entrenamiento y la predicción. Utilícelo en MATLAB® y aplique PCA a nuevos datos en el código generado en el dispositivo.pca

La generación de código C/C++ requiere MATLAB® Coder™.

Aplicar PCA a nuevos datos

Cargue el conjunto de datos en una tabla mediante .readtable El conjunto de datos se encuentra en el archivo, que contiene los datos históricos de calificación crediticia.CreditRating_Historical.dat

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 identificador de cada observación y la última columna es una calificación. Especifique las columnas segunda a séptima como datos predictores y especifique la última columna ( ) como respuesta.Rating

X = table2array(creditrating(:,2:7)); Y = creditrating.Rating;

Utilice las primeras 100 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);

Busque los componentes principales para el conjunto de datos de entrenamiento.XTrain

[coeff,scoreTrain,~,~,explained,mu] = pca(XTrain);

Este código devuelve cuatro salidas: , , , y .coeffscoreTrainexplainedmu Uso (porcentaje de la varianza total explicado) para encontrar el número de componentes necesarios para explicar al menos el 95% de variabilidad.explained Utilice (coeficientes de componentes principales) y (medios estimados de ) para aplicar el PCA a un conjunto de datos de prueba.coeffmuXTrain Utilice (puntuaciones de componentes principales) en lugar de al entrenar un modelo.scoreTrainXTrain

Visualice la variabilidad porcentual 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 mediante programación el número de componentes necesarios para explicar al menos un 95% de variabilidad mediante un bucle.while

sum_explained = 0; idx = 0; while sum_explained < 95     idx = idx + 1;     sum_explained = sum_explained + explained(idx); end idx
idx = 2 

Entrene un árbol de clasificación utilizando los dos primeros componentes.

scoreTrain95 = scoreTrain(:,1:idx); mdl = fitctree(scoreTrain95,YTrain);

es un modelo.mdlClassificationTree

Para utilizar el modelo entrenado para el conjunto de pruebas, debe transformar el conjunto de datos de prueba mediante el PCA obtenido del conjunto de datos de entrenamiento. Obtenga las puntuaciones de los componentes principales del conjunto de datos de prueba restando y multiplicando por .muXTestcoeff Sólo las puntuaciones para los dos primeros componentes son necesarias, así que utilice los dos primeros coeficientes.coeff(:,1:idx)

scoreTest95 = (XTest-mu)*coeff(:,1:idx);

Pase el modelo entrenado y el conjunto de datos de prueba transformado a la función para predecir las clasificaciones del conjunto de pruebas.mdlscoreTestpredict

YTest_predicted = predict(mdl,scoreTest95);

Generar código

Genere código que aplique PCA a los datos y prediga las clasificaciones mediante el modelo entrenado. Tenga en cuenta que la generación de código C/C++ requiere MATLAB® Coder™.

Guarde el modelo de clasificación en el archivo mediante .myMdl.matsaveLearnerForCoder

saveLearnerForCoder(mdl,'myMdl');

Defina una función de punto de entrada denominada que acepte un conjunto de datos de prueba ( ) e información de PCA ( y ) y devuelva las clasificaciones de los datos de prueba.myPCAPredictXTestcoeffmu

Agregue la directiva del compilador (o pragma) a la función de punto de entrada después de la firma de la función para indicar que tiene la intención de generar código para el algoritmo MATLAB.%#codegen Al agregar esta directiva, se indica al analizador de códigos de MATLAB que le ayude a diagnosticar y corregir infracciones que provocarían errores durante la generación de código.

type myPCAPredict % Display contents of myPCAPredict.m
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); 

aplica PCA a los nuevos datos mediante y , y luego predice las clasificaciones mediante los datos transformados.myPCAPredictcoeffmu De esta manera, no se pasan datos de entrenamiento, que pueden ser de un tamaño considerable.

Si hace clic en el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo.Nota: Esta carpeta incluye el archivo de función de punto de entrada.

Generar código mediante .codegen Dado que C y C++ son lenguajes con tipo estático, debe determinar las propiedades de todas las variables de la función de punto de entrada en tiempo de compilación. Para especificar el tipo de datos y el tamaño exacto de la matriz de entrada, pase una expresión MATLAB® que represente el conjunto de valores con un determinado tipo de datos y tamaño de matriz mediante la opción.-args Si el número de observaciones es desconocido en tiempo de compilación, también puede especificar la entrada como tamaño variable utilizando .coder.typeof Para obtener más información, consulte .Specify Variable-Size Arguments for Code Generation

codegen myPCAPredict -args {coder.typeof(XTest,[Inf,6],[1,0]),coeff(:,1:idx),mu}
 

genera la función MEX con una extensión dependiente de la plataforma.codegenmyPCAPredict_mex

Compruebe el código generado.

YTest_predicted_mex = myPCAPredict_mex(XTest,coeff(:,1:idx),mu); isequal(YTest_predicted,YTest_predicted_mex)
ans = logical
   1

devuelve lógico 1 ( ), lo que significa que todas las entradas son iguales.isequaltrue La comparación confirma que la función y la función devuelven las mismas clasificaciones.predictmdlmyPCAPredict_mex

Para obtener más información sobre la generación de código, consulte y .Introduction to Code GenerationCode Generation and Classification Learner App Este último describe cómo realizar PCA y entrenar un modelo mediante la aplicación Classification Learner y cómo generar código C/C++ que predice las etiquetas de los nuevos datos en función del modelo entrenado.

Argumentos de entrada

contraer todo

Datos de entrada para los que se calculan los componentes principales, especificados como una matriz -por-.np Filas de corresponden a observaciones y columnas a variables.X

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: especifica que utiliza el algoritmo de descomposición de eigenvalue, no el centro de los datos, utilizar todas las observaciones y devolver solo los tres primeros componentes principales.'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3pca

Algoritmo de componente principal que utiliza para realizar el análisis del componente principal, especificado como el par separado por comas que consta de y uno de los siguientes.pca'Algorithm'

ValorDescripción
'svd'Predeterminado. Descomposición de valor singular (SVD) de .X
'eig'Descomposición eigenvalue (EIG) de la matriz de covarianza. El algoritmo EIG es más rápido que SVD cuando el número de observaciones, , supera el número de variables, pero es menos preciso porque el número de condición de la covarianza es el cuadrado del número de condición de .npX
'als'

Algoritmo de mínimos cuadrados (ALS) alternativo. Este algoritmo encuentra el mejor rango- aproximación al factorizar en una matriz de factor -por- izquierda, L, y una matriz de factor -por- derecha, R, donde está el número de componentes principales.kXnkpkk La factorización utiliza un método iterativo que comienza con valores iniciales aleatorios.

ELA está diseñado para manejar mejor los valores que faltan. Es preferible eliminar por pares ( ) y se ocupa de los valores que faltan sin la eliminación en lista ( ).'Rows','pairwise''Rows','complete' Puede funcionar bien para conjuntos de datos con un pequeño porcentaje de datos que faltan al azar, pero es posible que no funcione bien en conjuntos de datos dispersos.

Ejemplo: 'Algorithm','eig'

Indicador para centrar las columnas, especificado como el par separado por comas que consta de y una de estas expresiones lógicas.'Centered'

ValorDescripción
true

Predeterminado. centros restando medios de columna antes de calcular la descomposición de valores singulares o la descomposición de valores propios.pcaX Si contiene valores que faltan, se utiliza para encontrar la media con los datos disponibles.XNaNnanmean Puede reconstruir los datos centrados utilizando .score*coeff'

false

En este caso no centra los datos.pca Puede reconstruir los datos originales utilizando .score*coeff'

Ejemplo: 'Centered',false

Tipos de datos: logical

Indicador para la salida de tamaño económico cuando el , , es menor que el número de variables, , especificado como el par separado por comas que consta de y una de estas expresiones lógicas.grados de libertaddp'Economy'

ValorDescripción
true

Predeterminado. devuelve sólo los primeros elementos y las columnas correspondientes de y .pcadlatentcoeffscore

Esta opción puede ser significativamente más rápida cuando el número de variables es mucho mayor que .pd

false

devuelve todos los elementos de .pcalatent Las columnas de y correspondientes a cero elementos en son ceros.coeffscorelatent

Tenga en cuenta que cuando < , y son necesariamente cero, y las columnas de definir direcciones que son ortogonales a .dpscore(:,d+1:p)latent(d+1:p)coeff(:,d+1:p)X

Ejemplo: 'Economy',false

Tipos de datos: logical

Número de componentes solicitados, especificados como el par separado por comas que consta de un entero escalar que satisface 0 < , donde está el número de variables originales en .'NumComponents'kkppX Cuando se especifica, devuelve las primeras columnas de y .pcakcoeffscore

Ejemplo: 'NumComponents',3

Tipos de datos: single | double

Acción para tomar valores en la matriz de datos , especificada como el par separado por comas que consta de y uno de los siguientes.NaNX'Rows'

ValorDescripción
'complete'

Predeterminado. Las observaciones con valores se eliminan antes del cálculo.NaN Las filas de s se reinsertan en y en las ubicaciones correspondientes.NaNscoretsquared

'pairwise'

Esta opción solo se aplica cuando el algoritmo es .'eig' Si no especifica el algoritmo junto con , lo establece en .'pairwise'pca'eig' Si especifica como algoritmo, junto con la opción , devuelve un mensaje de advertencia, establece el algoritmo en y continúa.'svd''Rows','pairwise'pca'eig'

Al especificar la opción, calcula el elemento ( , ) de la matriz de covarianza utilizando las filas sin valores en las columnas o de .'Rows','pairwise'pcaijNaNijX

Tenga en cuenta que la matriz de covarianza resultante podría no ser definitiva positiva. En ese caso, finaliza con un mensaje de error.pca

'all'

se espera que no tengan valores que falten. utiliza todos los datos y finaliza si se encuentra algún valor.XpcaNaN

Ejemplo: 'Rows','pairwise'

Pesos de observación, especificados como el par separado por comas que consta de y un vector de longitud que contiene todos los elementos positivos.'Weights'n

Tipos de datos: single | double

, especificado como el par separado por comas que consta de y uno de los siguientes.Pesos variables'VariableWeights'

ValorDescripción

vector de fila

Vector de longitud que contiene todos los elementos positivos.p

'variance'

Los pesos variables son el inverso de la varianza de la muestra. Si también asigna ponderaciones a observaciones utilizando , las ponderaciones variables se convierten en la inversa de la varianza de la muestra ponderada.'Weights'

Si se establece en al mismo tiempo, la matriz de datos se centra y estandariza.'Centered'trueX En este caso, devuelve los componentes principales en función de la matriz de correlación.pca

Ejemplo: 'VariableWeights','variance'

Tipos de datos: single | double | char | string

Valor inicial para la matriz de coeficientes , especificado como el par separado por comas que consta de una matriz -por-, donde está el número de variables, y es el número de componentes principales solicitados.coeff'Coeff0'pkpk

Nota

Puede utilizar este par nombre-valor solo cuando es .'algorithm''als'

Tipos de datos: single | double

Valor inicial para la matriz de puntuaciones , especificado como un par separado por comas que consta de una matriz -por-, donde está el número de observaciones y es el número de componentes principales solicitados.score'Score0'nknk

Nota

Puede utilizar este par nombre-valor solo cuando es .'algorithm''als'

Tipos de datos: single | double

Opciones para las iteraciones, especificadas como un par separado por comas que consta de y una estructura creada por la función. utiliza los siguientes campos en la estructura de opciones.'Options'statsetpca

Nombre del campoDescripción
'Display'Nivel de salida de la pantalla. Las opciones son , , y .'off''final''iter'
'MaxIter'Número máximo de pasos permitidos. El valor predeterminado es 1000. A diferencia de la configuración de optimización, alcanzar el valor se considera una convergencia.MaxIter
'TolFun'Número positivo que proporciona la tolerancia de terminación para la función de coste. El valor predeterminado es 1e-6.
'TolX'Número positivo que da el umbral de convergencia para el cambio relativo en los elementos de las matrices de factor izquierdo y derecho, L y R, en el algoritmo ALS. El valor predeterminado es 1e-6.

Nota

Puede utilizar este par nombre-valor solo cuando es .'algorithm''als'

Puede cambiar los valores de estos campos y especificar la nueva estructura mediante el argumento de par nombre-valor.pca'Options'

Ejemplo: opt = statset('pca'); opt.MaxIter = 2000; coeff = pca(X,'Options',opt);

Tipos de datos: struct

Argumentos de salida

contraer todo

Coeficientes de componentes principales, devueltos como una matriz -by-.pp Cada columna de contiene coeficientes para un componente principal.coeff Las columnas están en el orden de desviación de componente descendente, .latent

Puntuaciones de componentes principales, devueltas como una matriz. Filas de corresponden a observaciones y columnas a componentes.score

Las varianzas del componente principal, es decir, los valores propios de la matriz de covarianza de , devueltos como vector de columna.X

, que es la suma de los cuadrados de las puntuaciones estandarizadas para cada observación, devueltas como vector de columna.Estadística T-Squared de Hotelling

Porcentaje de la varianza total explicada por cada componente principal, devuelto como vector de columna.

Medios estimados de las variables en , devuelto como vector de fila cuando se establece en .XCenteredtrue Cuando es , el software no calcula los medios y devuelve un vector de ceros.Centeredfalse

Más acerca de

contraer todo

Estadística T-Squared de Hotelling

La estadística T cuadrada de Hotelling es una medida estadística de la distancia multivariante de cada observación desde el centro del conjunto de datos.

Incluso cuando se solicitan menos componentes que el número de variables, se utilizan todos los componentes principales para calcular la estadística T cuadrada (la calcula en todo el espacio).pca Si desea que la estadística T cuadrada en el espacio reducido o descartado, realice una de las siguientes acciones:

  • Para la estadística T cuadrada en el espacio reducido, utilice .mahal(score,score)

  • Para la estadística T-cuadrada en el espacio descartado, primero calcule la estadística T cuadrada usando , calcule la estadística T-cuadrada en el espacio reducido usando , y luego tome la diferencia: - .[coeff,score,latent,tsquared] = pca(X,'NumComponents',k,...)tsqreduced = mahal(score,score)tsquaredtsqreduced

Grados de libertad

Los grados de libertad, , es igual a – 1, si los datos están centrados y de otro modo, donde:dnn

  • es el número de filas sin ninguna s si utiliza .nNaN'Rows','complete'

  • es el número de filas sin ninguna s en el par de columnas que tiene el número máximo de filas sin s si utiliza .nNaNNaN'Rows','pairwise'

Pesos variables

Tenga en cuenta que cuando se utilizan ponderaciones variables, la matriz de coeficientes no es ortonormal. Supongamos que se llama al vector de ponderaciones variables que ha utilizado y que el vector de coeficientes de componente principal devuelto es .varweipcawcoeff A continuación, puede calcular los coeficientes ortonormales utilizando la transformación .diag(sqrt(varwei))*wcoeff

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

Introducido en R2012b