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 del componente principal, también conocidos como cargas, para la matriz-por-datos.npX Las filas de corresponden a observaciones y columnas corresponden a variables.X La matriz de coeficiente es-por-.pp Cada columna de contiene coeficientes para un componente principal y las columnas están en orden descendente de varianza de componentes.coeff De forma predeterminada, centra los datos y utiliza el algoritmo de descomposición del valor singular (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 devoluciones de componentes principales o un algoritmo distinto de SVD para usar.pca

ejemplo

[coeff,score,latent] = pca(___) también devuelve las puntuaciones del componente principal y las desviaciones del componente principal.Puntuaciónlatent Puede utilizar cualquiera de los argumentos de entrada de las sintaxis anteriores.

Las puntuaciones de los componentes principales son las representaciones del espacio principal del componente.X Las filas corresponden a las observaciones y las columnas corresponden a los componentes.Puntuación

Las desviaciones del componente principal son los valores propios de la matriz de covarianza de.X

ejemplo

[coeff,score,latent,tsquared] = pca(___) también devuelve el estadístico T cuadrado de 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 los ingredientes tienen 13 observaciones para 4 variables.

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

Busque los coeficientes del componente principal cuando haya valores faltantes 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: rueda-base, longitud, anchura, altura, peso en vacío, tamaño del motor, diámetro, carrera, relación de compresión, potencia, pico-rpm, ciudad-MPG y autopista-MPG.X Las variables Bore y Stroke faltan cuatro valores en las filas 56 a 59, y las variables de potencia y pico-RPM faltan dos valores en las filas 131 y 132.

Realice el análisis del componente principal.

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, es decir, las filas 56 a 59, 131 y 132.NaNPuntuacióntsquared

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 positivo definitivo. Esta opción se aplica cuando el algoritmo utiliza la descomposición de valores propios.pca Cuando no se especifica el algoritmo, como en este ejemplo, se establece en.pca'eig' Si necesita como algoritmo, con la opción, a continuación, devuelve un mensaje de advertencia, establece el algoritmo y continúa.'svd''pairwise'pca'eig'

Si utiliza el argumento de par nombre-valor, finaliza porque esta opción asume que no hay valores faltantes 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 desviaciones de variables inversas como pesos mientras realiza el análisis de componentes principales.

Cargue el conjunto de datos de ejemplo.

load hald

Realice el análisis del componente principal 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 coeficiente,, no es ortoonormal.wcoeff

Calcule la matriz de coeficiente ortoonormal.

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 ortoonormalidad de la nueva matriz de coeficiente,.coefforth

 coefforth*coefforth'
ans = 4×4

    1.0000    0.0000    0.0000         0
    0.0000    1.0000   -0.0000   -0.0000
    0.0000   -0.0000    1.0000    0.0000
         0   -0.0000    0.0000    1.0000

Encuentre los componentes principales utilizando el algoritmo de mínimos cuadrados alternos (ALS) cuando haya valores faltantes en los datos.

Cargue los datos de ejemplo.

load hald

Los datos de los ingredientes tienen 13 observaciones para 4 variables.

Realice el análisis del componente principal utilizando el algoritmo ALS y visualice los coeficientes del componente.

[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 valores faltantes aleatoriamente.

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 ahora tienen valores faltantes, indicados por.NaN

Realice el análisis del componente principal utilizando el algoritmo ALS y visualice los coeficientes del componente.

[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

Reconstruir 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 forma de comparar los resultados es encontrar el ángulo entre los dos espacios extendidos por los vectores de coeficiente. Encuentre el ángulo entre los coeficientes encontrados para datos completos y datos con valores faltantes usando ALS.

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

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

Realice el análisis del componente principal mediante el argumento de par nombre-valor y visualice los coeficientes del 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 faltantes y solo tiene cuatro filas sin valores faltantes. Devuelve solo tres componentes principales.pcaypca No puede utilizar la opción porque la matriz de covarianzas no es semidefinida positiva y devuelve un mensaje de error.'Rows','pairwise'pca

Encuentre el ángulo entre los coeficientes encontrados para datos completos y datos con valores faltantes usando la eliminación Eliminación (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

Reconstruir 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, así como el algoritmo ALS.NaN El uso de ALS es mejor cuando los datos tienen demasiados valores faltantes.

Busque los coeficientes, las puntuaciones y las desviaciones de los componentes principales.

Cargue el conjunto de datos de ejemplo.

load hald

Los datos de los ingredientes tienen 13 observaciones para 4 variables.

Encuentre los coeficientes del componente principal, las puntuaciones y las desviaciones de los componentes 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 corresponde a un componente principal.Puntuación El vector, almacena las varianzas de los cuatro componentes principales.latent

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

Visualice los coeficientes del componente principal ortoonormal 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 están representadas en este biplot por un vector, y la dirección y la longitud del vector indican cómo cada variable contribuye 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 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 en el primer componente principal es el cuarto, que corresponde 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 biparcela 2-D 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 trama. Por ejemplo, los puntos cercanos al borde izquierdo de la gráfica tienen las puntuaciones más bajas para el primer componente principal. Los puntos se escalan con respecto al valor máximo de la puntuación y la longitud máxima del coeficiente, por lo que solo se pueden determinar sus ubicaciones relativas a partir de la gráfica.

Encuentre los valores estadísticos T cuadrado de Hotelling.

Cargue el conjunto de datos de ejemplo.

load hald

Los datos de los ingredientes tienen 13 observaciones para 4 variables.

Realice el análisis del componente principal y solicite los valores 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 dos primeros 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 se especifica un espacio de componente reducido, se computan los valores de T cuadrado en el espacio completo, utilizando los cuatro componentes.pca

El valor T cuadrado en el espacio reducido corresponde a 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 desechado tomando la diferencia de los valores T cuadrado 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 principal de componentes.

Cargue el conjunto de datos de ejemplo.

load imports-85

La matriz de datos tiene 13 variables continuas en las columnas 3 a 15: rueda-base, longitud, anchura, altura, peso en vacío, tamaño del motor, diámetro, carrera, relación de compresión, potencia, pico-rpm, ciudad-MPG y autopista-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 del componente principal. Esta es la varianza más grande posible entre todas las opciones posibles del primer eje. La variabilidad a lo largo del segundo eje del componente principal es la más grande entre todas las posibles opciones restantes del segundo eje. El tercer eje del componente principal tiene la tercera mayor variabilidad, que es significativamente menor que la variabilidad a lo largo del segundo eje del componente principal. No vale la pena inspeccionar los ejes del componente principal cuarto a decimotercero, ya que explican sólo 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 de T cuadrado, especifique

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

Busque 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 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 utilizando el conjunto de datos de prueba, debe aplicar la transformación 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 de C/C++. Dado que admite la generación de código, puede generar código que realiza 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 la formación y la predicción. Utilice 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 está 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 clasificación. Especifique la segunda a séptima columnas 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 explicada) para encontrar el número de componentes requeridos para explicar al menos 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 cuando se entrena un modelo.scoreTrainXTrain

Mostrar 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. Busque 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 

Entrenar 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 componentes principales del conjunto de datos de prueba restando y multiplicando por.muXTestcoeff Sólo las puntuaciones de 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.mdlscoreTestPredecir

YTest_predicted = predict(mdl,scoreTest95);

Generar código

Genere código que aplique PCA a los datos y predice 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.matsaveCompactModel

saveCompactModel(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 pretende generar código para el algoritmo de MATLAB.%#codegen La adición de esta directiva indica al analizador de código de MATLAB que le ayudará a diagnosticar y corregir infracciones que provocarán 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 = loadCompactModel('myMdl'); % Predict ratings using the loaded model   label = predict(mdl,scoreTest); 

aplica PCA a nuevos datos mediante y y, a continuación, 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 pulsa 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.

Genere código mediante.codegen Dado que C y C++ son lenguajes con tipos estáticos, debe determinar las propiedades de todas las variables en 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 de tamaño variable mediante.coder.typeof Para obtener más información, consulte.Especifique argumentos de tamaño variable para la generación de código

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 Logical 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.PredecirmdlmyPCAPredict_mex

Para obtener más información sobre la generación de código, vea y.Introducción a la generación de códigoAplicación de generación de código y clasificación de aprendizaje Este último describe cómo realizar el PCA y entrenar un modelo mediante la aplicación de clasificación de aprendizaje y cómo generar código de C/C++ que predice etiquetas para 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-por-matriz.np Filas de corresponden a observaciones y columnas a variables.X

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.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 valor propio, no centrar 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 se utiliza para realizar el análisis del componente principal, especificado como el par separado por comas y que consta de uno de los siguientes.pca'Algorithm'

ValorDescripción
'svd'Predeterminado. Descomposición del 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,, excede 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 alternos (ALS). Este algoritmo encuentra la mejor aproximación de clasificación Factorizando en una matriz de factores a la izquierda, L, y una matriz de factor a-derecha, R, donde es el número de componentes principales.kXnkpkk La factorización utiliza un método iterativo que comienza con valores iniciales aleatorios.

ALS está diseñado para manejar mejor los valores faltantes. Es preferible la eliminación en pares () y se ocupa de los valores que faltan sin la eliminación Eliminación ().'Rows','pairwise''Rows','complete' Puede funcionar bien para conjuntos de datos con un pequeño porcentaje de datos faltantes al azar, pero podría no funcionar 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. se centra restando los medios de la columna antes de calcular la descomposición del valor singular o la descomposición del valor propio.pcaX Si contiene valores faltantes, se utiliza para encontrar la media con los datos disponibles.XNaNnanmean Puede reconstruir los datos centrados utilizando.score*coeff'

false

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

Ejemplo: 'Centered',false

Tipos de datos: logical

Indicador de la salida de tamaño de economía 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 solo los primeros elementos de y las columnas correspondientes de y.pcadlatentcoeffPuntuación

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.coeffPuntuaciónlatent

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 consistente en un entero escalar que satisface 0 < ≤, donde es el número de variables originales.'NumComponents'kkppX Cuando se especifica, devuelve las primeras columnas de y.pcakcoeffPuntuación

Ejemplo: 'NumComponents',3

Tipos de datos: single | double

Acción que se toma para los valores de la matriz de datos, especificado 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.NaNPuntuacióntsquared

'pairwise'

Esta opción solo se aplica cuando el algoritmo es.'eig' Si no especifica el algoritmo junto con, a continuación, lo establece en.'pairwise'pca'eig' Si especifica como el algoritmo, junto con la opción, a continuación, devuelve un mensaje de advertencia, establece el algoritmo 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 positivo definitivo. En ese caso, finaliza con un mensaje de error.pca

'all'

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

Ejemplo: 'Rows','pairwise'

Ponderaciones de observación, especificadas como el par separado por comas que consta de 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'

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

Si se establece en al mismo tiempo, la matriz de datos se centra y se 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 coeficiente, especificado como el par separado por comas que consta de y a-por-matriz, donde es el número de variables, y es el número de componentes principales solicitados.coeff'Coeff0'pkpk

Nota

Puede usar este par nombre-valor solo cuando sea.'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 y una por una, donde es el número de observaciones y es el número de componentes principales solicitados.Puntuación'Score0'nknk

Nota

Puede usar este par nombre-valor solo cuando sea.'algorithm''als'

Tipos de datos: single | double

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

Nombre de campoDescripción
'Display'Nivel de salida de pantalla. Las opciones son, y.'off''final''iter'
'MaxIter'Se permiten los pasos de número máximo. El valor predeterminado es 1000. A diferencia de la configuración de optimización, alcanzar el valor se considera como convergencia.MaxIter
'TolFun'Número positivo que da 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 factores izquierda y derecha, L y R, en el algoritmo ALS. El valor predeterminado es 1E-6.

Nota

Puede usar este par nombre-valor solo cuando sea.'algorithm''als'

Puede cambiar los valores de estos campos y especificar la nueva estructura en el uso del 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 del componente principal, devueltos como a-by-Matrix.pp Cada columna contiene coeficientes para un componente principal.coeff Las columnas están en el orden descendente de la varianza del componente,.latent

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

Varianzas de componentes principales, es decir, los valores propios de la matriz de covarianza de, devueltos como un vector de columna.X

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

Porcentaje de la desviación total explicada por cada componente principal, devuelta como un vector de columna.

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

Más acerca de

contraer todo

Estadística T-squared de Hotelling

El estadístico T cuadrado de Hotelling es una medida estadística de la distancia multivariada de cada observación desde el centro del conjunto de datos.

Incluso cuando solicita menos componentes que el número de variables, utiliza todos los componentes principales para calcular el estadístico T cuadrado (lo calcula en el espacio completo).pca Si desea que el estadístico T cuadrado en el espacio reducido o descartado, realice una de las siguientes acciones:

  • Para el estadístico T-squared en el espacio reducido, utilice.mahal(score,score)

  • Para la estadística T-squared en el espacio descartado, calcule primero el estadístico T-squared utilizando, calcule el estadístico T cuadrado en el espacio reducido usando y, a continuación, 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 otra manera, donde:dnn

  • es el número de filas sin ninguna s si se 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 se utiliza.nNaNNaN'Rows','pairwise'

Pesos variables

Tenga en cuenta que cuando se utilizan pesos variables, la matriz de coeficiente no es ortoonormal. Supongamos que se llama al vector de ponderaciones variables que usó y que se devuelve el vector de coeficientes del componente principal.varweipcawcoeff A continuación, puede calcular los coeficientes ortoonormales 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