1. UNIVERSIDAD REGIONAL AUTONOMA DE LOS ANDES
SISTEMA DE SOPORTE A TOMA DE DECISIONES
NOMBRE: MAYCOL ULLOA
NIVEL: NOVENO SISTEMAS
INFORME
OBJETIVOS
Verificación y comprobación de resultados obtenidos de los ficheros adjuntados por el
docente.
Manejo de los algoritmos para la toma de decisiones en el ámbito empresarial.
Comprensión y entendimiento de los algoritmos.
Funcionamiento del lenguaje R para la realización de dichos algoritmos.
FUNDAMENTO TEÓRICO
ARBOLES
Un árbol es una estructura de datos, que puede definirse de forma recursiva como:
- Una estructura vacía o
- Un elemento o clave de información (nodo) más un número finito de estructuras tipo árbol,
disjuntos, llamados subárboles. Si dicho número de estructuras es inferior o igual a 2, se
tiene un árbol binario.
Es, por tanto, una estructura no secuencial.
NOMENCLATURA SOBRE ÁRBOLES
- Raíz: es aquel elemento que no tiene antecesor; ejemplo: a.
- Rama: arista entre dos nodos.
- Antecesor: un nodo X es antecesor de un nodo Y si por alguna de las ramas de X se
puede llegar a Y.
- Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede
llegar a X.
- Grado de un nodo: el número de descendientes directos que tiene. Ejemplo: c tiene
grado 2, d tiene grado 0, a tiene grado 2.
- Hoja: nodo que no tiene descendientes: grado 0. Ejemplo: d
2. - Nodo interno: aquel que tiene al menos un descendiente.
- Nivel: número de ramas que hay que recorrer para llegar de la raíz a un nodo. Ejemplo:
el nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3.
- Altura: el nivel más alto del árbol. En el ejemplo de la figura 1 la altura es 3.
- Anchura: es el mayor valor del número de nodos que hay en un nivel. En la figura, la
anchura es 3.
PCA
En estadística, el análisis de componentes principales (en español ACP, en inglés, PCA) es una
técnica utilizada para reducir la dimensionalidad de un conjunto de datos.
Técnicamente, el ACP busca la proyección según la cual los datos queden mejor representados
en términos de mínimos cuadrados. Esta convierte un conjunto de observaciones de variables
posiblemente correlacionadas en un conjunto de valores de variables sin correlación lineal
llamadas componentes principales.
El ACP se emplea sobre todo en análisis exploratorio de datos y para construir modelos
predictivos. El ACP comporta el cálculo de la descomposición en autovalores de la matriz de
covarianza, normalmente tras centrar los datos en la media de cada atributo.
El ACP construye una transformación lineal que escoge un nuevo sistema de coordenadas para
el conjunto original de datos en el cual la varianza de mayor tamaño del conjunto de datos es
capturada en el primer eje (llamado el Primer Componente Principal), la segunda varianza más
grande es el segundo eje, y así sucesivamente. Para construir esta transformación lineal debe
construirse primero la matriz de covarianza o matriz de coeficientes de correlación. Debido a la
simetría de esta matriz existe una base completa de vectores propios de la misma. La
transformación que lleva de las antiguas coordenadas a las coordenadas de la nueva base es
precisamente la transformación lineal necesaria para reducir la dimensionalidad de datos.
Además las coordenadas en la nueva base dan la composición en factores subyacentes de los
datos iniciales.
SVM
En la entrada explico la técnica de máquina de soporte vectorial (SVM-Sopport Vector
Machine), es un conjunto de algoritmos que pueden aplicarse a problemas
de clasificación o regresión.
La explicación no es exhaustiva ni mucho menos menciono aspectos teóricos de la técnica, tan
solo trato de mostrar con varios ejemplos como funciona.
Existe mucho material para revisar los detalles y como menciona el autor de la referencia [2],
existen ahora nuevas técnicas para clasificar pero es casi obligado en Machine Learning conocer
el algoritmo SVM por la relevancia que han tenido.
Una de esas nuevas técnicas es Relevance Vector Machine (RVM), la cual es una variación de
SVM en su versión Bayesiana y que permite ver las técnicas SVM desde un punto de vista
probabilista.
3. DESARROLLO DE LAS PRÁCTICAS
ARBOL
Cargamos los paquetes necesarios con los para crear y visualizar arboles
Cargamos la base de datos y procedemos a leer los conjuntos de datos dim(wdbc);
Vemos que este conjunto tiene 569 muestras con 32 columnas
4. Esta línea de código nos muestra la base de datos con sus variables
wdbc$V7=as.numeric(recode(wdbc$V7, "'?'=NA"));
La siguiente codificación nos muestra una tabla x con un conjunto de datos 569objetos
y 32 variables
5. Nos da el conjuntó final
Esta sentencia nos da el tamaño de conjunto
# train (2/3), test (1/3)
N=dim(x)[1];
all=seq(1,N);
Hacemos el simple de 2/3 estas formaran el conjunto de entrenamiento y el tercio
restante formara el conjunto de test
# select 2/3 randomly
train=sort(sample(N,N*2/3.0));
7. Crear el primer árbol usando parámetros predeterminados
# create first tree using default parameters
t1=rpart(as.factor(V11) ~ V2+V3+V4+V5+V6+V7+V8+V9+V10, data=xtrain,
method="class");
prp(t1, extra=1);
Vemos que hemos creado un árbol
Donde el nodo v10 pregunta al nodo V9 si la variable es menor que 0.19 si no loes este
nos lleva a un nodo considerado terminal de clase 0.2096
Caso contrario nos lleva a la variable V3 nos dice que si v3 mayor o igual a 16
Calculamos la matriz de confusión para cada uno de los dos conjuntos
# analyze how good is t1 as a classifier
9. Posteriormente tenemos que restar la media de cada uno de los valores ingresados tanto de
X como de Y
La matriz Data contiene dos columnas la cual es de X y la otra es de Y restadas sus medias
Matriz de covarianza
Vectores de la matriz covarianza
10. Ejemplo con datos de alta dimensionalidad
De una base de datos de pacientes para identificar si uno de ellos tiene cáncer maligno o
benigno para la visualización en 2D.
Descargamos la base de datos del siguiente link:
dataCancer <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/breast-
cancer-wisconsin/wdbc.data", sep=",");
En el programa nos saldrá lo siguiente cuanto la base de datos ya este descargada
Mediante este comando se reflejara los atributos de la base de datos
En la cual en la etiqueta V2 nos mostrara si el cáncer el benigno o maligno
11. B= benigno
M: maligno
Guardamos los siguientes datos para calcularlos
En la siguiente instrucción nos mostrara el cuadro de como contribuye el valor propio a la
variable ejecutada.
Al digitar este comando seleccionado nos quedamos con tan solo los componentes
12. Visualizaremos nuestros datos de componentes
Representando las etiquetas en la parte superior de la parcela 2D para señalar con colores
distintos.
13. SVM
set.seed(1011). Cargamos los datos
x = matrix(rnorm(400), 200, 2). Generaremos 200 puntos en 2 dimensiones
y = rep(c(-1, 1), c(100, 100)). Generamos las etiquetas -1 y 1
x[y == 1,] = x[y == 1,] + 4.5. Añadimos 4.5 a todos los puntos de la primera clase
14. plot(x, col = y + 3, pch = 19). Procedemos a graficar y observamos que se separaron los
puntos
library(e1071). Cargamos la librería
train=data.frame(x,y=as.factor(y)). Generamos un data frame
svmfit=svm(y~.,data=train,kernel="linear",cost=1,scale=FALSE). Mediante la función svm
cambiamos los valores de las etiquetas
15. print(svmfit). Veremos la información de este modelo
plot(svmfit,train). Visualizamos el modelo
x = matrix(rnorm(400), 200, 2). Generamos otra matriz de datos
16. y = rep(c(-1, 1), c(100, 100)). Generamos las etiquetas -1 y 1
x[y == 1,] = x[y == 1,] + 3. Añadimos 3 a todos los puntos de la primera clase
plot(x, col = y + 3, pch = 19). Dibujaremos el plano
test=data.frame(x,y=as.factor(y)). Ejecutamos un data frame
18. sum(out==y)/200. Ejecutamos la suma
CONCLUSIONES
En el análisis de algoritmos se considera conviene analizar igualmente el caso mejor y hacer
alguna estimación sobre un caso promedio. Para independizarse de factores coyunturales tales
como el lenguaje de programación, la habilidad del codificador, la máquina soporte, etc. se suele
trabajar con algoritmos para datos muy grandes y salvo alguno coeficiente multiplicativo. Para
problemas pequeños es cierto que casi todos los algoritmos son "más o menos iguales",
primando otros aspectos como esfuerzo de codificación, legibilidad, etc. Los órdenes de
complejidad sólo son importantes para grandes problemas.
RECOMENDACIONES
Se debe conocer y entender el problema planteado
Reconocer el punto de inicio para la solución del problema y tener claro el resultado
que se desea obtener
Identificar las variables y las constantes del problema
Diseñar de forma cronológica el desarrollo de la solución
El diseño de la solución debe ser lo más general posible
Simplificar los procesos desarrollados para la solución