Sei sulla pagina 1di 22

DESCRIPCIN DE PROGRAMAS DE ANLISIS DE DATOS MACHINE LEARNING CON MATRIZ DE

CONFUSIN
OMAR HERNNDEZ OLIVARES
VALIDACIN CRUZADA
Validacin cruzada es casi una parte inherente del aprendizaje automtico. La validacin cruzada
se puede usar para comparar el rendimiento de diferentes tcnicas de modelado predictivo. En
este ejemplo, se utiliza la validacin exclusin. El siguiente mtodo utilizamos el 40 por ciento de
los datos para operar como aprendizaje y el resto como test, el siguiente cdigo muestra como el
total de los datos son se peticionan para poder tener el porciento de datos tiles para el
entrenamiento invocando el mtodo training, posteriormente se pasan por el mtodo test, dando
como resultado la matriz de 2 por dos que se encuentra en la parte inferior, donde tenemos dos
clases de datos, aprendizaje y test, lo que significa el por ciento de probabilidad de que un cliente
sea acreedor de un prstamo, los resultados son utilizados para la aplicacin de una matriz de
confusin con los porcientos y valores obtenidos.
Cdigo fuente
% In this example, we will hold 40% of the data, selected randomly, for
% test phase.
cv = cvpartition(length(bank),'holdout',0.40);
% Training set
Xtrain = X(training(cv),:);
Ytrain = Y(training(cv),:);
% Test set
Xtest = X(test(cv),:);
Ytest = Y(test(cv),:);
disp('Training Set')
tabulate(Ytrain)
disp('Test Set')
tabulate(Ytest)

Resultados
Training Set
Value Count
no 23948
yes 3179
Test Set
Value Count
no 15974
yes 2110

Percent
88.28%
11.72%
Percent
88.33%
11.67%

Matriz de confusin (formulas)


Las formulas y sus significados se muestran en la siguiente imagen. Son 9 formulas las cuales son
aplicadas a cada una de las tablas de porcientos resultantes de cada uno de los mtodos de
clasificacin.

Matriz de confusin

RED NEURONAL
El TOOLBOX de MatLab apoya el aprendizaje supervisado con alimentacin directa, base radial y
redes dinmicas. Es compatible con los algoritmos tanto de clasificacin y regresin. Tambin es
compatible con aprendizaje no supervisado con los mapas auto-organizativos y capas
competitivos. Uno puede hacer uso de las herramientas interactivas para configuracin, entrenar y
validar una red neuronal. A continuacin, es posible generar automticamente el cdigo con el fin
de automatizacin. En este ejemplo, el cdigo generado automticamente se ha actualizado para
utilizar un grupo de trabajadores. En el cdigo se hace invocacin de las herramientas de MatLab
enfocadas a las redes neuronales. El cdigo es el siguiente:
% Use modified autogenerated code to train the network
[~, net] = NNfun(XtrainNN,YtrainNN);
% Make a prediction for the test set
Y_nn = net(XtestNN');
Y_nn = round(Y_nn');
% Compute the confusion matrix
C_nn = confusionmat(YtestNN,Y_nn);
% Examine the confusion matrix for each class as a percentage of the true class
C_nn = bsxfun(@rdivide,C_nn,sum(C_nn,2)) * 100 %#ok<*NOPTS>

Ntese que el cdigo se invoca a los mtodos net y round adems de confusionmat los
cuales operan como la red neuronal.
Resultados
C_nn =
98.316
78.294

1.684
21.706

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

REGRESIN LINEAL
El siguiente mtodo es la regresin lineal la cual tambin utilizaremos algunos mtodos de MatLab
para operar, la regresin lineal se enfoca en la redaccin a partir de una base de datos, simulando
un comportamiento futuro. El cdigo para el clculo es el siguiente:
% Train the classifier
glm = GeneralizedLinearModel.fit(Xtrain,double(Ytrain)1,'linear','Distribution','binomial','link','logit','CategoricalVars',catPred);
% Make a prediction for the test set
Y_glm = glm.predict(Xtest);
Y_glm = round(Y_glm) + 1;
% Compute the confusion matrix
C_glm = confusionmat(double(Ytest),Y_glm);
% Examine the confusion matrix for each class as a percentage of the true class
C_glm = bsxfun(@rdivide,C_glm,sum(C_glm,2)) * 100

Obsrvese que invocan mtodos como GeneralizedLinearModel el cual entrene el clasificador o


el mtodo predict el cual a partir del clasificador entrenado, devuelve valor de prediccin, el
resultado es el siguiente:
C_glm =
97.527
64.834

2.4728
35.166

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

ANLISIS POR DISCRIMINACIN


Otro mtodo es el anlisis por discriminacin, el cual va eliminando los datos ms dbiles y solo los
datos ms fuertes son los necesarios para tener resultados ms confiables con menos datos,
utilizando un clasificador de discriminacin cuadrtica, tenemos el siguiente cdigo.
% Train the classifier
da = ClassificationDiscriminant.fit(Xtrain,Ytrain,'discrimType','quadratic');
% Make a prediction for the test set
Y_da = da.predict(Xtest);
% Compute the confusion matrix
C_da = confusionmat(Ytest,Y_da);
% Examine the confusion matrix for each class as a percentage of the true class
C_da = bsxfun(@rdivide,C_da,sum(C_da,2)) * 100

Ntese que el cdigo que se muestra anteriormente utilizamos un mtodo para discriminar
ClassificationDiscriminant.fit con los datos de aprendizaje, posteriormente se hace una
prediccin con los datos de test. Como resultado tenemos la siguiente matriz.
Resultados
C_da =
90.253
51.801

9.7471
48.199

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

CLASIFICACIN USANDO VECINOS CERCANOS


La categorizacin de los puntos (datos) de consulta en funcin de su distancia a los puntos en un
conjunto de datos de entrenamiento puede ser una forma sencilla pero eficaz de clasificar nuevos
puntos (datos). Se pueden utilizar diversas distancias mtricas como euclidiana, correlacin,
Hamming, mahalonobis o en su propia distancia mtrica.El cdigo es el siguiente:
% Train the classifier
knn = ClassificationKNN.fit(Xtrain,Ytrain,'Distance','seuclidean');
% Make a prediction for the test set
Y_knn = knn.predict(Xtest);
% Compute the confusion matrix
C_knn = confusionmat(Ytest,Y_knn);
% Examine the confusion matrix for each class as a percentage of the true class
C_knn = bsxfun(@rdivide,C_knn,sum(C_knn,2)) * 100

En el codigo anterior se muestra una invocacin al mtodo ClassificationKNN.fit, el cual opera con
datos de entrenamiento y el tipo de distancia mtrica. Los resultados son los siguientes:
Resultados
C_knn =
93.865
62.133

6.135
37.867

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

CLASIFICACIN DE NAIVE BAYES

Esta clasificacin se basa en la estimacin de P (X | Y), la densidad de probabilidad o


probabilidad de caractersticas X dado clase Y. El objeto de esta clasificacin proporciona
soporte
para Gauss, Kernel, multinomianal y
distribuciones multinomiales y
multivariados. El cdigo fuente se muestra a continuacin:
% The multivariate multinomial distribution (_mvmn_) is appropriate for
% categorical features
dist = repmat({'normal'},1,ncols-1);
dist(catPred) = {'mvmn'};
% Train the classifier
Nb = NaiveBayes.fit(Xtrain,Ytrain,'Distribution',dist);
% Make a prediction for the test set
Y_Nb = Nb.predict(Xtest);
% Compute the confusion matrix
C_nb = confusionmat(Ytest,Y_Nb);
% Examine the confusion matrix for each class as a percentage of the true class
C_nb = bsxfun(@rdivide,C_nb,sum(C_nb,2)) * 100

En el cdigo anterior se muestra la invocacin NaiveBayes.fit la cual se entrena el


clasificador, se obtiene una prediccin con datos de test Nb.predict y nos devuelve los
valores listos con los porcentajes que se muestran en la tabla siguiente:
Resultados
C_nb =
92.018
46.256

7.9817
53.744

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

MQUINA DE SOPORTE DE VECTORIAL (SUPPORT VECTOR MACHINES (SVM))


Mquina de soporte vectorial (SVM) es compatible para las variables de respuesta binaria. Una
SVM clasifica los datos mediante la bsqueda de la mejor hiperplano (Lnea) que separa todos los
puntos de datos de una clase de los de la otra clase. El cdigo se muestra a continuacin:
opts = statset('MaxIter',30000);
% Train the classifier
svmStruct = svmtrain(Xtrain,Ytrain,'kernel_function','rbf','kktviolationlevel',0.1,'options',opts);
% Make a prediction for the test set
Y_svm = svmclassify(svmStruct,Xtest);
C_svm = confusionmat(Ytest,Y_svm);
% Examine the confusion matrix for each class as a percentage of the true class
C_svm = bsxfun(@rdivide,C_svm,sum(C_svm,2)) * 100

En el cdigo anterior se observa la implementacin del mtodo svmtrain el cual es el SVM


trabajando con los datos de entrenamiento, posteriormente se aplica el resultado con los datos de
test para clasificarlos usando el mtodo svmclassify. Los resultados restantes son los que se
muestran a continuacin.
Resultados
C_svm =
91.555
52.701

8.445
47.299

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

RBOL DE DECISIN
rboles de clasificacin y rboles de regresin son dos tipos de rboles de decisin. Un rbol de
decisin es un diagrama de flujo como estructura en la que nodo interno representa pruebas en
un atributo, cada rama representa el resultado de la prueba y cada nodo hoja representa una
respuesta (decisin tomada despus de calcular todos los atributos). rboles de clasificacin dan
respuestas que son nominales, tales como 'true' o 'false' (Lgicas). Los rboles de regresin dan
respuestas numricas. El cdigo se muestra a continuacin:
tic
% Train the classifier
t = ClassificationTree.fit(Xtrain,Ytrain,'CategoricalPredictors',catPred);
toc
% Make a prediction for the test set
Y_t = t.predict(Xtest);
% Compute the confusion matrix
C_t = confusionmat(Ytest,Y_t);
% Examine the confusion matrix for each class as a percentage of the true class
C_t = bsxfun(@rdivide,C_t,sum(C_t,2)) * 100

Como se observa en el cdigo anterior se empieza entrenando el clasificador dentro de un tic


toc, el mtodo ClassificationTree.fit utilizando los datos de aprendizaje y aplicando la
prediccin con los datos de test t.predict, dando como resultado una matriz lista para aplicar
las frmulas para matrices de confusin, los resultados son los siguientes:
Resultados
Elapsed time is 1.705000 seconds.
C_t =
94.072
5.9284
51.611
48.389

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

APRENDIZAJE EN CONJUNTO: TREEBAGGER


Cada rbol en el conjunto se cultiva en una muestra tomada de forma independiente de los datos
de entrada. Para calcular la prediccin para el conjunto de rboles, TreeBagger toma un promedio
de las predicciones de los rboles individuales (por regresin) o toma los votos de los rboles
individuales (para la clasificacin). Tcnicas por conjuntos como esta combinan muchos datos de
aprendizaje dbiles para producir un fuerte aprendiz. Desde una perspectiva de marketing, ya que
estamos creando este modelo predictivo, puede ser ms importante para clasificar a s
correctamente que un no. Si ese es el caso, podemos incluir nuestra opinin utilizando la matriz de
costo. En este caso, la matriz de costos especifica que es 5 veces ms costoso clasificar a un s
como no. El cdigo se muestra a continuacin:
% Cost of misclassification
cost = [0 1
5 0];
opts = statset('UseParallel',true);
% Train the classifier
tb =
TreeBagger(150,Xtrain,Ytrain,'method','classification','categorical',catPred,'Options',opts,'OOBVarImp','on','c
ost',cost);
% Make a prediction for the test set
[Y_tb, classifScore] = tb.predict(Xtest);
Y_tb = nominal(Y_tb);
% Compute the confusion matrix
C_tb = confusionmat(Ytest,Y_tb);
% Examine the confusion matrix for each class as a percentage of the true class
C_tb = bsxfun(@rdivide,C_tb,sum(C_tb,2)) * 100

Observe que se tiene la matriz de costo Cost con las proporciones de costo, el mtodo invocado
utilizado TreeBagger utilizando los datos de aprendizaje y los datos de test con el mtodo
tb.predict, dando como resultado una matriz lista para la matriz de confusin, los datos
resultantes son los siguientes.
Resultados
C_tb =
92.757
32.038

7.243
67.962

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

TREEBAGGER CON REDUCCIN DE CONJUNTO DE CARACTERSTICAS

La seleccin de caractersticas reduce la dimensionalidad de los datos mediante la


seleccin de un subconjunto de caractersticas (variables predictores) para crear un
modelo. Los Criterios de seleccin consisten en la minimizacin de una medida especfica
de error de prediccin de los modelos para adaptarse a diferentes subconjuntos. Seleccin
de funciones secuenciales puede ser computacionalmente intensiva. Puede beneficiarse
significativamente de la computacin paralela. El cdigo fuente es el siguiente:
opts = statset('UseParallel',true);
critfun = @(Xtr,Ytr,Xte,Yte)featureImp(Xtr,Ytr,Xte,Yte,'TreeBagger');
% The top 5 features determined in the previous step have been included,
% to reduce the number of combinations to be tried by sequentialfs
[fs,history] = sequentialfs(critfun,Xtrain,Ytrain,'options',opts,'keepin',idxvarimp(1:5));
disp('Included features:');
disp(names(fs)');
opts = statset('UseParallel',true);
tb_r = TreeBagger(120,
Xtrain(:,fs),Ytrain,'method','classification','categorical',catPred(:,fs),'Options',opts,'cost',cost);
[Y_tb_r, classifScore] = tb_r.predict(Xtest(:,fs));
Y_tb_r = nominal(Y_tb_r);
C_tb_r = confusionmat(Ytest,Y_tb_r);
C_tb_r = bsxfun(@rdivide,C_tb_r,sum(C_tb_r,2)) * 100

Como se observa, primero se hace una seleccin de los atributos, posteriormente se aplica
el clasificador TreeBagger con menos atributos que en el clasificador anterior, podemos
los resultados en la siguiente tabla:
Resultados
C_tb_r =
87.749
19.147

12.251
80.853

Como resultados se obtienen 2 filas y dos columnas donde la primera fila se obtiene los datos de
aprendizaje y la segunda fila los datos de test, donde la primera columna son los porcientos de los
que no son actos para el prstamo y la segunda columna los que s. Se le aplica una matriz de
confusin (porcientos obtenidos), la cual se muestra en la siguiente imagen.

Matriz de confusin

Potrebbero piacerti anche