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.
Análisis de componentes principales de datos sin procesar
devuelve los coeficientes de componentes principales, también conocidos como cargas, para la matriz de datos -by-.npcoeff
= pca(X
)X
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
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.coeff
= pca(X
,Name,Value
)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
[
también devuelve las puntuaciones de los componentes principales y las desviaciones de los componentes principales en .coeff
,score
,latent
]
= pca(___)score
latent
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
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.NaN
score
tsquared
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 .pca
ijNaN
ijX
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.pca
y
pca
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
El segundo componente principal, que se encuentra en el eje vertical, tiene coeficientes negativos para las variables
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 .coeff
scoreTrain
explained
mu
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.coeff
mu
XTrain
Utilice (puntuaciones de componentes principales) en lugar de al entrenar un modelo.scoreTrain
XTrain
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.mdl
ClassificationTree
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 .mu
XTest
coeff
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.mdl
scoreTest
predict
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.mat
saveLearnerForCoder
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.myPCAPredict
XTest
coeff
mu
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.myPCAPredict
coeff
mu
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
(MATLAB Coder) 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
(MATLAB Coder) 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.codegen
myPCAPredict_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.isequal
true
La comparación confirma que la función y la función devuelven las mismas clasificaciones.predict
mdl
myPCAPredict_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.
X
— Datos de entradaDatos 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
Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,Value
Name
Value
Name
Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN
'Algorithm','eig','Centered',false,'Rows','all','NumComponents',3
pca
'Algorithm'
— Algoritmo de componente principal'svd'
(predeterminado) | 'eig'
| 'als'
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'
Valor | Descripció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.k 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 ( ). |
Ejemplo: 'Algorithm','eig'
'Centered'
— Indicador para centrar columnastrue
(predeterminado) | false
Indicador para centrar las columnas, especificado como el par separado por comas que consta de y una de estas expresiones lógicas.'Centered'
Valor | Descripción |
---|---|
true | Predeterminado. centros restando medios de columna antes de calcular la descomposición de valores singulares o la descomposición de valores propios. |
false | En este caso no centra los datos. |
Ejemplo: 'Centered',false
Tipos de datos: logical
'Economy'
— Indicador de producción de tamaño económicotrue
(predeterminado) | false
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'
Valor | Descripción |
---|---|
true | Predeterminado. devuelve sólo los primeros elementos y las columnas correspondientes de y . 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 . |
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
'NumComponents'
— Número de componentes solicitadosNú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 .pca
kcoeff
score
Ejemplo: 'NumComponents',3
Tipos de datos: single
| double
'Rows'
— Acción a tomar por los valoresNaN
'complete'
(predeterminado) | 'pairwise'
| 'all'
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.NaN
X
'Rows'
Valor | Descripción |
---|---|
'complete' | Predeterminado. Las observaciones con valores se eliminan antes del cálculo. |
'pairwise' | Esta opción solo se aplica cuando el algoritmo es . Al especificar la opción, calcula el elemento ( , ) de la matriz de covarianza utilizando las filas sin valores en las columnas o de . Tenga en cuenta que la matriz de covarianza resultante podría no ser definitiva positiva. En ese caso, finaliza con un mensaje de error. |
'all' | se espera que no tengan valores que falten. utiliza todos los datos y finaliza si se encuentra algún valor. |
Ejemplo: 'Rows','pairwise'
'Weights'
— Pesos de observaciónPesos 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
'VariableWeights'
— Pesos variables'variance'
, especificado como el par separado por comas que consta de y uno de los siguientes.Pesos variables'VariableWeights'
Valor | Descripció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. Si se establece en al mismo tiempo, la matriz de datos se centra y estandariza. |
Ejemplo: 'VariableWeights','variance'
Tipos de datos: single
| double
| char
| string
'Coeff0'
— Valor inicial de los coeficientesValor 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
'Score0'
— Valor inicial para puntuacionesValor 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
'Options'
— Opciones para iteracionesOpciones 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'
statset
pca
Nombre del campo | Descripció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
coeff
— Coeficientes de componentes principalesCoeficientes 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
score
— Puntuaciones de componentes principalesPuntuaciones de componentes principales, devueltas como una matriz. Filas de corresponden a observaciones y columnas a componentes.score
latent
— Desviaciones de componentes principalesLas varianzas del componente principal, es decir, los valores propios de la matriz de covarianza de , devueltos como vector de columna.X
tsquared
— Estadística T-cuadrada de Hotelling, 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
explained
— Porcentaje de la varianza total explicadaPorcentaje de la varianza total explicada por cada componente principal, devuelto como vector de columna.
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)
tsquared
tsqreduced
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 .nNaN
NaN
'Rows','pairwise'
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 .varwei
pca
wcoeff
A continuación, puede calcular los coeficientes ortonormales utilizando la transformación .diag(sqrt(varwei))*wcoeff
[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.
Esta función admite matrices altas para datos de memoria insuficiente con algunas limitaciones.
funciona directamente con matrices altas calculando la matriz de covarianza y utilizando la función en memoria para calcular los componentes principales.pca
pcacov
Las sintaxis admitidas 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)
No se admiten argumentos de par nombre-valor.
Para obtener más información, consulte .Arreglos altos para datos con memoria insuficiente
Usage notes and limitations:
Cuando es , se omite el valor de .'Algorithm'
'als'
'Display'
'Options'
Los valores de los argumentos de par nombre-valor deben ser reales.'Weights'
'VariableWeights'
El valor del argumento de par nombre-valor debe ser una constante en tiempo de compilación.'Economy'
Por ejemplo, para utilizar el argumento par nombre-valor en el código generado, incluya en el valor de .'Economy',false
{coder.Constant('Economy'),coder.Constant(false)}
-args
codegen
(MATLAB Coder)
Names in name-value pair arguments must be compile-time constants.
El código generado siempre devuelve la quinta salida como vector de columna.explained
El código generado siempre devuelve la sexta salida como vector de fila.mu
Si está vacío, devuelve como una matriz 1 por 0. no se convierte en una matriz vacía 0 por 0.mu
pca
mu
pca
mu
El código generado no trata una matriz de entrada que tiene todos los valores como un caso especial.X
NaN
Las dimensiones de salida son proporcionales a las entradas finitas correspondientes.
Para ahorrar memoria en el dispositivo en el que implementa el código generado, puede separar el entrenamiento (construcción de componentes PCA de los datos de entrada) y la predicción (realizando la transformación de PCA). Construir componentes PCA en .MATLAB® A continuación, defina una función de punto de entrada que realice la transformación de PCA utilizando los coeficientes de componente principal ( ) y las medias estimadas ( ), que son las salidas de .coeff
mu
pca
Por último, genere código para la función de punto de entrada. Para obtener un ejemplo, consulte .Aplicar PCA a nuevos datos y generar código C/C++
Para obtener más información sobre la generación de código, consulte y .Introduction to Code GenerationGeneral Code Generation Workflow
Existe una versión modificada de este ejemplo en su sistema. ¿Prefiere abrir esta versión?
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.
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: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.