matlab 霍特林变换,Análisis de componentes principales de datos sin procesar

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(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.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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值