Anda di halaman 1dari 6

Aprendizaje supervisado.

Es una técnica para deducir una función a partir de datos de entrenamiento. Los
datos de entrenamiento consisten de pares de objetos (normalmente vectores): una
componente del par son los datos de entrada y el otro, los resultados deseados.
Uno de los usos más extendidos del aprendizaje supervisado consiste en hacer
predicciones a futuro basadas en comportamientos o características que se han
visto en los datos ya almacenados El aprendizaje supervisado permite buscar
patrones en datos históricos relacionando todos campos con un campo especial,
llamado campo objetivo.

De forma simple, en Aprendizaje Supervisado se cuenta con un conjunto de


ejemplos de los cuáles conocemos la respuesta. Lo que deseamos es formular
algún tipo de regla o correspondencia que nos permita dar (o aproximar) la
respuesta para todos los objetos que se nos presenten.

Por ejemplo, podemos contar con información de casas (conjunto de ejemplos), y


los precios correspondientes de cada una (respuesta). A partir de esto,
queremos aprender alguna regla de correspondencia entre casas y sus precios, que
nos permita predecir el costo cuando tengamos información de nuevas casas.
El aprendizaje supervisado consta de dos pasos esenciales:

1. Entrenamiento, donde usamos el conjunto de entrenamiento en conjunto con un


algoritmo que nos permita crear una hipótesis.

2. Prueba, donde utilizamos la hipótesis obtenida en el paso anterior para realizar


nuevas predicciones con objetos nuevos.

Todo este proceso se llama aprendizaje supervisado, ya que al conocer las


respuestas de cada ejemplo del conjunto de entrenamiento, podemos corregir la
hipótesis producida por el algoritmo. Se supervisa el entrenamiento del algoritmo,
corrigiendo los parámetros del mismo según los resultados que obtengamos, de
forma iterativa.

Existen tres métodos en los cuales podemos aplicar el aprendizaje supervisado.

El primero es el método de los K vecinos más cercanos, el método de naive bayes


y el método del árbol de decisión, en el cual nos concentraremos en su explicación
en el método Arboles de decisión por medio del lenguaje R.

Arboles de decisión

Esta herramienta logra servir como apoyo a una toma de decisiones informada,
al exponer las distintas opciones y sus posibles consecuencias, incluidos los
resultados de eventos fortuitos, los costos de recursos y la utilidad; en base a un
gráfico A la hora de trabajar con este algoritmo es necesario tener en cuenta
que hay que conocer el número mínimo de preguntas simples (es decir, las que
puedan responderse con un sí o un no) que es preciso lanzar para evaluar la
probabilidad de tomar una decisión correcta. La ventaja de los árboles de decisión
es que permiten abordar el problema de una manera estructurada y sistemática para
llegar a una conclusión lógica. Pueden emplearse para predecir la respuesta del
público ante el lanzamiento de un nuevo producto o para averiguar la idoneidad de
una campaña de marketing.

Las reglas de parada tratan de preguntar si merece la pena seguir o detener el


proceso de crecimiento del árbol por la rama actual, se denominan reglas de
prepoda ya que reducen el crecimiento y complejidad del árbol mientras se está
construyendo:

 Pureza de nodo. Si el nodo solo contiene ejemplos o registros de una única


clase se decide que la construcción del árbol ya ha finalizado.

 Cota de profundidad. Previamente a la construcción se fija una cota que nos


marque la profundidad del árbol, cuando se alcanza se detiene el proceso.
 Umbral de soporte. Se especifica un número de ejemplos mínimo para los
nodos, y cuando se encuentre un nodo con ejemplos por debajo del mínimo
se para el proceso, ya que no consideramos fiable una clasificación abalada
con menos de ese número mínimo de ejemplos.

Existen dos formas de poda muy comunes utilizadas en los diferentes algoritmos: la
poda por coste-complejidad y la poda pesimista. En la poda por coste-complejidad
se trata de equilibrar la precisión y el tamaño del árbol. La complejidad está
determinada por el número de hojas que posee el árbol (nodos terminales). La poda
pesimista utiliza los casos clasificados incorrectamente y obtiene un error de
sustitución, eliminando los subárboles que no mejoran significativamente la
precisión del clasificador. Existen diferentes algoritmos que implementan este
método entre los más conocidos se encuentran: ID3, C4.5, C5.0, CHAID, MARS o
Árboles de Inferencia Condicional.

Ejemplo

Con la base de datos que ya viene instalada en la librería de base de R, denominada


iris vamos a realizar una minería de datos, para clasificar el tipo de flor atendiendo
a sus características físicas como pueden ser el ancho y alto de los pétalos y
sépalos. (Usando el algoritmo C5.0). Para ello se divide la encuesta en dos
muestras una de entrenamiento con el 70% de los datos y una muestra test con el
30% restante, se va a realizar la clasificación utilizando arboles de decisión, para
ello hay que instalar el package-R: “tree”, e invocar la función tree. Se realiza una
poda por el procedimiento de coste-complejidad, y mediante un procedimiento de
validación cruzada elegirá el mejor resultado. Para ello hay que invocar la función
cv.tree con la opción FUN=prune.misclas. Evaluaremos los resultados con una
métrica de porcentaje de aciertos. La salida ofrece la tasa de errores
(Misclassification error rate).

Carga el paquete específico del Árbol de clasificación C5.0


#install.packages("C50", dependencies = TRUE)
library(C50)
# Carga de datos inicial, tipos de flores con diferentes caracteristicas
data(iris)
datos <- iris
View(datos)

# Selección de una submuestra del 70% de los datos


set.seed(101)
tamano.total <- nrow(datos)
tamano.entreno <- round(tamano.total*0.7)
datos.indices <- sample(1:tamano.total , size=tamano.entreno)
datos.entreno <- datos[datos.indices,]
datos.test <- datos[-datos.indices,]

# Acortamiento de nombres de setosa, versicolor y virginica


especie <- vector(length = dim(datos)[1])
especie[datos$Species=="setosa"] <-"se"
especie[datos$Species=="virginica"] <-"vi"
especie[datos$Species=="versicolor"] <-"ve"
datos$Species <- factor(especie)

# Ejecución del modelo de clasificación C5.0


modelo <- C5.0(Species ~ .,data = datos.entreno)
summary(modelo) # Información sobre el modelo
##
## Call:
## C5.0.formula(formula = Species ~ ., data = datos.entreno)
##
##
## C5.0 [Release 2.07 GPL Edition] Tue Feb 28 10:55:25 2017
## -------------------------------
##
## Class specified by attribute `outcome'
##
## Read 105 cases (5 attributes) from undefined.data
##
## Decision tree:
##
## Petal.Length <= 1.9: setosa (35)
## Petal.Length > 1.9:
## :...Petal.Width > 1.6: virginica (30/1)
## Petal.Width <= 1.6:
## :...Petal.Length <= 4.9: versicolor (36)
## Petal.Length > 4.9: virginica (4/1)
##
##
## Evaluation on training data (105 cases):
##
## Decision Tree
## ----------------
## Size Errors
##
## 4 2( 1.9%) <<
##
##
## (a) (b) (c) <-classified as
## ---- ---- ----
## 35 (a): class setosa
## 36 2 (b): class versicolor
## 32 (c): class virginica
##
##
## Attribute usage:
##
## 100.00% Petal.Length
## 66.67% Petal.Width
##
##
## Time: 0.0 secs

plot(modelo) # Gráfico

# Para detallar un nodo en particular se usaria la siguiente función


plot(modelo, subtree=3) #Muestra un nodo en particular
# predicción
prediccion <- predict(modelo,newdata=datos.test)

# Matriz de confusión
tabla <- table(prediccion, datos.test$Species)
tabla

##
## prediccion setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 11 0
## virginica 0 1 18
# % correctamente clasificados
100 * sum(diag(tabla)) / sum(tabla)
## [1] 97.77778

# Sepal no interviene, por lo tanto no necesita un valor


nuevo <-
data.frame(Sepal.Length=NA,Sepal.Width=NA,Petal.Length=5,Petal.Width=1)
a <-predict(modelo,nuevo, type = "prob")
predict(modelo,nuevo)

## [1] virginica
## Levels: setosa versicolor virginica