Está en la página 1de 505

Aprendizaje perezoso - Clasificación

usando vecinos más cercanos


Un nuevo tipo interesante de experiencia ha estado apareciendo en las ciudades de
todo el mundo. Los clientes se sirven en un restaurante completamente oscurecida
por camareros que se mueven rutas cuidadosamente alrededor memorizados
utilizando sólo su sentido del tacto y sonido. El atractivo de estos establecimientos es
la creencia de que privarse de la información sensorial visual mejorará el sentido del
gusto y el olfato, y los alimentos se experimentará en nuevas formas. Cada bocado
proporciona una sensación de asombro mientras descubre los sabores que el chef ha
preparado.
¿Puede usted imaginar cómo un comensal experimenta la comida cuando no se ve?
Al primer bocado, los sentidos están desbordados. ¿Cuáles son los sabores0020
dominantes? ¿Tiene el sabor de la comida dulce o salado? A qué sabe algo similar
a comido? En lo personal, me imagino que este proceso de descubrimiento en
términos de un adagio ligeramente modificado: si huele como un pato y sabe como
un pato, entonces es probable que esté comiendo pato.
Esto ilustra una idea que puede ser utilizado para la máquina de aprendizaje al igual
que otra máxima participación de las aves de corral: "Las aves del mismo plumaje
vuelan juntos". Dicho de otra manera, las cosas que son iguales es probable que
tengan propiedades que son similares. El aprendizaje automático utiliza este
principio para clasificar los datos colocándolo en la misma categoría vecinos "más
cercano" o similar.
Este capítulo está dedicado a los clasificadores que utilizan este enfoque. Aprenderás:
• Los conceptos clave que definen los clasificadores del vecino más cercano,
y los alumnos "perezosos" por qué se considera
• Los métodos para medir la similitud de dos ejemplos usando distancia
• Para aplicar un popular cercano clasificador vecino llamado K-NN

[1]
Lazy Learning - Clasificación a partir cercano vecinos

Si todas estas conversaciones sobre la comida le está dando hambre, no dude en


tomar un aperitivo. Nuestra primera tarea será la de entender el enfoque K-NN
poniéndolo a utilizar por decantación un debate culinaria de larga duración.

Entendiendo la clasificación del vecino más


cercano
En una sola frase, clasificadores del vecino más cercano se definen por su
característica de clasificar ejemplos no etiquetados asignándoles la clase de
ejemplos etiquetados similares. A pesar de la sencillez de esta idea, los métodos de
vecinos más cercanos son extremadamente potentes. Se han utilizado con éxito
para:
• aplicaciones de visión por ordenador, incluyendo el reconocimiento
óptico de caracteres y reconocimiento facial en las dos imágenes fijas y de
vídeo
• Predecir si una persona va a disfrutar de una recomendación película o música
• La identificación de patrones en los datos genéticos, tal vez para utilizarlos
en la detección de proteínas o enfermedades específicas

En general, los clasificadores de vecinos más cercanos son muy adecuados para las
tareas clasificación, donde las relaciones entre las características y las clases de
objetivos son numerosos, complicados, o extremadamente difícil de entender, sin
embargo, los elementos de tipo de clase similares tienden a ser bastante
homogénea. Otra forma de expresarlo sería decir que, si un concepto es difícil de
definir, pero sabes que cuando uno lo ve, entonces los vecinos más cercanos
podrían ser apropiadas. Por otro lado, si los datos son ruidosos y por lo tanto no
existe una distinción clara entre los grupos, los algoritmos de vecinos más cercanos
pueden tener dificultades para identificar los límites de clase.

El algoritmo k-NN
El enfoque vecinos más cercana a la clasificación se ejemplifica por el algoritmo de
k-vecinos más cercanos (k-NN). Aunque esto es quizás una de las más simples
algoritmos de aprendizaje automático, todavía se utiliza ampliamente.

[2]
Capítulo 3

Las fortalezas y debilidades de este algoritmo son los siguientes:

fortalezas debilidades
• Sencillo y eficaz • No produce un modelo, lo que limita
• No hace suposiciones sobre la la capacidad de comprender cómo los
distribución de datos subyacente rasgos están relacionados con la clase

• fase de entrenamiento rápido • Requiere la selección de un k apropiado


• fase de clasificación Slow
• características nominales y los
datos que faltan requieren un
procesamiento adicional

El algoritmo K-NN recibe su nombre del hecho de que se utiliza la información sobre k-
vecinos más cercanos es un ejemplo para clasificar ejemplos no etiquetados. La letra k es
una variables término que implica que cualquier número de vecinos más cercanos se
podría utilizar. Después de la elección de k, el algoritmo requiere un entrenamiento
conjunto de datos compuesta de ejemplos que han sido clasificados en varias categorías,
como los marcados por una variable nominal. Entonces, para cada registro sin etiqueta en
el conjunto de datos de prueba, k-NN identifica k registros en los datos de entrenamiento
que son el "más cercano" en similitud. La instancia de prueba sin etiqueta se asigna a la
clase de la mayoría de los k vecinos más próximos.
Para ilustrar este proceso, vamos a revisar la experiencia de cata a ciegas se describe en la
introducción. Supongamos que antes de comer la comida de misterio que había creado una
conjunto de datos en la que se registró nuestras impresiones de una serie de ingredientes que
hemos probado anteriormente. Para simplificar las cosas, nos clasificado sólo dos
características de cada ingrediente.
La primera es una medida del 1 al 10 de cómo crujiente es el ingrediente y el segundo es una
puntuación del 1 al 10 de cuán dulce el sabor de los ingredientes. A continuación, cada
ingrediente etiquetados como uno de los tres tipos de alimentos: frutas, verduras o proteínas.
Las primeras filas de un conjunto de datos tales podrían estructurarse de la siguiente manera:

Ingrediente Dulzura crujiente tipo de alimento


manzana 10 9 Fruta
tocino 1 4 proteína
plátano 10 1 Fruta
Zanahoria 7 10 vegetal
apio 3 10 vegetal
queso 1 1 proteína

[3]
Lazy Learning - Clasificación a partir cercano vecinos

El algoritmo k-NN trata a las características como coordenadas en un espacio


de características multidimensional. A medida que nuestro conjunto de datos
incluye sólo dos características, el espacio de características es de dos
dimensiones. Podemos trazar datos bidimensionales en un gráfico de
dispersión, con la dimensión x que indica la dulzura de los ingredientes y la
dimensión y, la
crujiente. Tras añadir algunas más ingredientes para el conjunto de datos gusto,
el diagrama de dispersión puede tener un aspecto similar a este:

¿Se dio cuenta el patrón? tipos similares de alimentos tienden a ser agrupados en
estrecha colaboración. Como se ilustra en el siguiente diagrama, las verduras tienden
a ser crujiente pero no dulce, frutas tienden a ser dulce y crujiente, ya sea o no
crujiente, mientras que las proteínas tienden a ser ni crujiente ni dulce:

apio Zanahoria
lechuga Fruta manzana

Pepino
que crujiente es la comida

alverja verde
Vegetales Pera

nueces
uva
tocino
Proteinas

camarón naranja

plátano
pez
queso

que dulce es la comida

[4]
Capítulo 3

Supongamos que después de la construcción de este conjunto de datos, decidimos


utilizarlo para resolver la vieja pregunta: ¿es el tomate una fruta o verdura? Podemos
utilizar el método del vecino más cercano para determinar qué clase es un mejor
ajuste, como se muestra en el siguiente diagrama:

Medir la similitud con la distancia


Localización de vecinos más cercanos del tomate requiere una función de
distancia, o una fórmula que mide la similitud entre los dos casos.
Hay muchas maneras diferentes de calcular la distancia. Tradicionalmente, el
algoritmo k-NN utiliza distancia euclidiana, que es la distancia uno mediría si
fuera posible usar una regla para conectar dos puntos, ilustrados en la figura
anterior por las líneas de puntos que conectan el tomate a sus vecinos.

distancia euclidiana se mide "a vuelo de pájaro", implicando la ruta


directa más corta. Otra medida de la distancia común es la distancia
Manhattan, que se basa en las trayectorias de un peatón tomaría por
caminar cuadras de la ciudad. Si usted está interesado en aprender
más sobre otras medidas de distancia, se puede leer la documentación
para la función de la distancia a R (una herramienta útil en su propio
derecho), utilizando el comando? Dist.

[5]
Lazy Learning - Clasificación a partir cercano vecinos

distancia euclidiana se especifica por la siguiente fórmula, donde p y q son los


ejemplos que deben compararse, cada uno con n características. El término p1 se
refiere al valor de la primera característica de ejemplo p, mientras que q1 se
refiere al valor de la primera característica de ejemplo q:

La fórmula de la distancia consiste en comparar los valores de cada característica.


Por ejemplo, para calcular la distancia entre el tomate (dulzura = 6, crujiente = 4),
y el grano verde (dulzura = 3, crujiente = 7), se puede utilizar la fórmula como
sigue:

En una línea similar, podemos calcular la distancia entre el tomate y varios de sus
vecinos más cercanos de la siguiente manera:

Ingrediente Dulzura crujiente tipo de Distancia al tomate


alimento
uva 8 5 Fruta sqrt ((6 - 8) ^ 2 + (4 - 5) ^ 2) = 2,2
judías verdes 3 7 vegetal sqrt ((6 - 3) ^ 2 + (4 - 7) ^ 2) = 4,2
nueces 3 6 proteína sqrt ((6 - 3) ^ 2 + (4 - 6) ^ 2) = 3,6
naranja 7 3 Fruta sqrt ((6 - 7) ^ 2 + (4 - 3) ^ 2) = 1,4

Para clasificar el tomate como un vegetal, proteína o fruta, empezaremos asignando


el tomate, el tipo de alimento de su único vecino más cercano. Esto se llama
clasificación 1-NN porque k = 1. El naranja es el vecino más cercano al tomate, con
una distancia de
1.4. Como naranja es una fruta, el algoritmo 1-NN clasificaría como un tomate fruta.
Si utilizamos el algoritmo k-NN con k = 3 lugar, se realiza una votación entre los
tres vecinos más cercanos: naranja, uva y nueces. Dado que la mayoría de clase
entre estos vecinos es fruto (dos de los tres votos), el tomate de nuevo se clasifica
como una fruta.

La elección de una adecuada k


La decisión de cuántos vecinos a utilizar para k-NN determina qué tan bien el
modelo se generalizará a los datos futuros. El equilibrio entre el sobreajuste y
underfitting los datos de entrenamiento es un problema conocido como
solución de compromiso sesgo y la varianza.
La elección de un gran k reduce el impacto o variación causada por los datos
ruidosos, pero puede sesgar el alumno de manera que se corre el riesgo de
pasar por alto pequeños, pero los patrones importantes.

[6]
Capítulo 3

Supongamos que tomamos la postura extrema de fijar una muy grande k, tan
grande como el número total de observaciones en los datos de entrenamiento.
Con la formación de todos los casos
representado en la votación final, la clase más común siempre tiene una mayoría de
los votantes. El modelo sería en consecuencia, siempre predecir la clase
mayoritaria, independientemente de los vecinos más cercanos.
En el extremo opuesto, utilizando un único vecino más cercano permite que los datos
o valores atípicos ruidosos influir indebidamente en la clasificación de los ejemplos.
Por ejemplo, supongamos que algunos de los ejemplos de entrenamiento fueron
mislabeled accidentalmente. Cualquier ejemplo sin etiqueta que pasa a ser más
cercana al vecino mal etiquetados se predice que tienen la clase incorrecta, incluso si
otros nueve vecinos más cercanos habrían votado de forma diferente.
Obviamente, el mejor valor de k está en algún lugar entre estos dos extremos.

La siguiente figura ilustra, más en general, la forma en la frontera de decisión


(representado por una línea discontinua) se ve afectado por los valores de k más
grandes o más pequeñas. Los valores más pequeños permiten más límites de
decisión complejos que encajan con más cuidado los datos de entrenamiento. El
problema es que no sabemos si la frontera recta o curva del límite representa
mejor el verdadero concepto subyacente que hay que aprender.

En la práctica, la elección de k depende de la dificultad del concepto que hay que


aprender, y el número de registros en los datos de entrenamiento. Una práctica
común es comenzar con k igual a la raíz cuadrada del número de ejemplos de
entrenamiento. En el clasificador de alimentos que hemos desarrollado
anteriormente, podríamos ajustarse k = 4, porque había 15 ejemplos de ingredientes
en los datos de entrenamiento y la raíz cuadrada de 15 es 3,87.
Sin embargo, estas normas no siempre pueden dar lugar a la única y mejor k. Un
enfoque alternativo es probar varios valores de k en una variedad de conjuntos
de datos de prueba y elegir la que ofrece el mejor rendimiento de clasificación.
Dicho esto, salvo que los datos son muy ruidoso, un gran conjunto de datos de
entrenamiento puede hacer la elección de k menos importante. Esto es
porque incluso los conceptos sutiles tendrán un grupo suficientemente amplio de
ejemplos para votar
como vecinos más próximos.

[7]
Lazy Learning - Clasificación a partir cercano vecinos

Una solución menos común, pero interesante a este problema es


elegir un k mayor, pero aplicar un proceso de votación ponderada en
la que se considera más autoridad que el voto de los vecinos lejos el
voto de los vecinos más cercanos. Muchas implementaciones k-NN
ofrecen esta opción.

Preparación de los datos para su uso con k-NN


Las características se transforma típicamente a una gama estándar antes de aplicar el
algoritmo de K-NN. La razón de este paso es que la fórmula de la distancia
depende de cómo se miden características altamente. En particular, si ciertas
características tienen una gama mucho más amplia de valores que los otros, las
mediciones de distancia serán fuertemente dominado por las características con
rangos más grandes. Esto no fue un problema por ejemplo degustación de comida
ya que tanto la dulzura y la textura crujiente se midieron en una escala de 1 a 10.
Sin embargo, supongamos que agregamos una función adicional al conjunto de
datos de picante de un alimento, que se midió utilizando la escala Scoville. Si no está
familiarizado con esta métrica, es una medida estandarizada de calor de especias,
que van desde cero (no en todos picante) a más de un millón (de los chiles más
calientes). Dado que la diferencia entre los alimentos picantes y no picantes puede
ser más de un millón, mientras que la diferencia entre los alimentos dulces y no
dulces o crujiente y no crujientes es como máximo 10, la diferencia de escala permite
que el nivel de especias para afectar la función de distancia mucho más que los otros
dos factores. Sin ajustar nuestros datos, podemos encontrar que nuestras medidas de
distancia sólo se diferencian los alimentos por su sabor picante; el impacto de
textura crujiente y dulzura sería eclipsada por la contribución de los picantes.
La solución es cambiar la escala de las características por la reducción o la
ampliación de su gama de tal manera que cada uno contribuye relativamente
igualmente a la fórmula de la distancia. Por ejemplo, si la dulzura y textura crujiente
se miden en una escala de 1 a 10, también nos gustaría picante se va a medir en una
escala del 1 al 10. Hay varias formas comunes para llevar a cabo dicha escala.
El método tradicional de cambio de escala características para k-NN es
normalización min-max. Este proceso transforma una característica tal que la
totalidad de sus valores caen en un intervalo entre 0 y 1. La fórmula para la
normalización de una característica es la siguiente:

Esencialmente, la fórmula resta el mínimo de la función X de cada valor y divide


por la gama de X.

[8]
Capítulo 3

valores característicos normalizados pueden ser interpretados como una indicación


de en qué medida, de 0 por ciento a 100 por ciento, el valor original se redujo a lo
largo de la gama entre el mínimo original y máxima.
Otra transformación común se llama puntuación z estandarización. La siguiente
fórmula resta el valor medio de la función de X, y divide el resultado por la
desviación estándar de X:

Esta fórmula, que se basa en las propiedades de la distribución normal cubierto en


el Capítulo 2, gestionar y comprender los datos, cambia la escala de cada uno de
los valores de la característica en términos de cuántas desviaciones estándar caen
por encima o por debajo del valor medio. El valor resultante se denomina una
puntuación z. Las puntuaciones z caen en un rango no unido de los números
negativos y positivos. A diferencia de los valores normalizados, no tienen mínima
predefinida y máximo.

El mismo método de cambio de escala utilizado en la formación de


datos k-NN también se debe aplicar a los ejemplos, el algoritmo más
tarde será clasificar. Esto puede conducir a una situación difícil para la
normalización-min max, como el mínimo
o un máximo de futuros casos podría estar fuera del rango de valores
observados en los datos de entrenamiento. Si conoce el valor mínimo o
máximo verosímil antes de tiempo, puede utilizar estas constantes en
lugar de los valores observados. Como alternativa, puede utilizar la
estandarización puntuación z bajo el supuesto de que los futuros
ejemplos tendrán media similar y la desviación estándar como los
ejemplos de entrenamiento.

La fórmula de la distancia euclidiana no está definido para los datos


nominales. Por lo tanto, para calcular la distancia entre las características
nominales, tenemos que convertirlos en un formato numérico. Una solución
típica utiliza codificación simulado, donde un valor de 1 indica una categoría,
y 0, la otra. Por ejemplo, la codificación ficticia para una variable de género
podría ser construido como:

Note como la codificación de relleno de las dos categorías variable género (binario)
los resultados en una sola característica nueva denominada masculina. No hay
necesidad de construir una función separada para mujeres; ya que los dos sexos
son excluyentes entre sí, sabiendo uno o el otro es suficiente.

[9]
Lazy Learning - Clasificación a partir cercano vecinos

Esto es cierto de manera más general también. Una característica nominal n-


categoría puede ser simulado codificado mediante la creación de las variables de
indicador binario para (n - 1) los niveles de la función. Por ejemplo, la codificación
ficticia para una variable de temperatura de tres categoría (por ejemplo, caliente,
medio o frío) se podría establecer como (3 - 1) = 2 características, como se muestra
aquí:

Sabiendo que caliente y medio son ambos 0 es suficiente para saber que la
temperatura es fría. Nosotros, por lo tanto, no necesitamos una tercera característica
del rubro frío.

Un aspecto conveniente de codificación maniquí es que la distancia entre las


características codificados ficticio es siempre uno o cero, y por lo tanto, los valores
caen en la misma escala que min-max datos numéricos normalizados. Ninguna
transformación adicional es necesaria.

Si una característica nominal es ordinal (se podría hacer un


argumento para la temperatura), una alternativa a la codificación
ficticia es numerar las categorías y aplicar la normalización. Por
ejemplo, frío, caliente, y caliente podría ser numerada como 1, 2, y 3,
que se normaliza a 0, 0,5, y
1. Una advertencia de este enfoque es que sólo debe utilizarse si los
pasos entre las categorías son equivalentes. Por ejemplo, aunque se
ordenan las categorías de ingresos para los pobres, clase media y
ricos, la diferencia entre la clase media y pobre puede ser diferente
de la diferencia entre la clase media y ricos. Dado que los pasos
entre los grupos no son iguales, la codificación maniquí es un
enfoque más seguro.

¿Por qué es el algoritmo de k-NN perezoso?


algoritmos de clasificación basados en los métodos de vecinos más cercanos son
considerados aprendizaje perezoso algoritmos, ya que, técnicamente hablando, no es una
abstracción se produce. Los procesos de abstracción y generalización se omiten por
completo, y esto socava la definición de aprendizaje, se propone en el Capítulo 1,
Introducción a Machine Learning.
Debajo la definición estricta de aprendizaje, un estudiante perezoso no es realmente
aprender nada. En su lugar, simplemente almacena los datos de entrenamiento al pie
de la letra. Esto permite que la fase de entrenamiento, que no está entrenando en
realidad nada, a ocurrir muy rápidamente. Por supuesto, el inconveniente es que el
proceso de hacer predicciones tiende a ser relativamente lento en comparación con el
entrenamiento. Debido a la fuerte dependencia de las instancias de formación en
lugar de un modelo abstracto, el aprendizaje perezoso también se conoce como el
aprendizaje basado en instancia o el aprendizaje de memoria.

[ 10 ]
Capítulo 3

Como estudiantes basados en instancia no construyen un modelo, se dice que el


método sea en una clase de aprendizaje no paramétricos métodos sin parámetros
se aprenden acerca de los datos.
Sin generar teorías sobre los datos subyacentes, los métodos no paramétricos limitan
nuestra capacidad de comprender cómo el clasificador está usando los datos. Por
otro lado, esto permite al alumno a encontrar patrones naturales en lugar de tratar de
encajar los datos en una forma funcional preconcebida y potencialmente sesgados.

Aunque clasificadores k-NN pueden considerarse perezoso, siguen siendo


bastante potente. Como pronto se verá, los principios simples de aprendizaje
vecino más cercano se pueden utilizar para automatizar el proceso de deteccion de
cáncer.

Ejemplo - el diagnóstico de cáncer de


mama con el algoritmo de k-NN
la detección del cáncer de mama rutina permite que la enfermedad se diagnostica y
se trata antes de que cause síntomas notables. El proceso de detección temprana
implica examinar el tejido del pecho en busca de bultos anormales o masas. Si se
encuentra un bulto, una biopsia por aspiración con aguja fina se realiza, que utiliza
una aguja hueca para extraer una pequeña muestra de células de la masa. Un médico
examina a continuación las células bajo un microscopio para determinar si la masa es
probable que sea maligno o benigno.
Si la máquina de aprendizaje podría automatizar la identificación de las células
cancerosas, que proporcionaría un beneficio considerable para el sistema de salud.
Los procesos automatizados tienden a mejorar la eficiencia del proceso de
detección, permitiendo a los médicos gastan menos
tiempo de diagnóstico y más tiempo para tratar la enfermedad. Un sistema de
cribado automatizado también puede proporcionar una mayor precisión en la
detección mediante la eliminación de la componente humano inherentemente
subjetiva del proceso.
Vamos a investigar la utilidad del aprendizaje automático para la detección de
cáncer mediante la aplicación del algoritmo K-NN con las mediciones de las
células sometidas a biopsia de mama las mujeres con masas anormales.

[ 11 ]
Lazy Learning - Clasificación a partir cercano vecinos

Paso 1 - recogida de datos


Vamos a utilizar el seno de Wisconsin conjunto de datos de diagnóstico de cáncer
del repositorio UCI Machine Learning en http://archive.ics.uci.edu/ml.
Estos datos fueron donados por investigadores de la Universidad de Wisconsin e
incluye las mediciones de las imágenes digitalizadas de aspiración con aguja fina
de una masa mamaria. Los valores representan las características de los núcleos
de las células presentes en la imagen digital.

Para leer más sobre este conjunto de datos, consulte:


Mangasarian OL, Calle WN, Wolberg WH. diagnóstico de cáncer de
mama y el pronóstico a través
programación lineal. La investigación de operaciones. 1995; 43: 570-577.

Los datos de cáncer de mama incluye 569 ejemplos de biopsias de cáncer, cada uno con
32 características. Una característica es un número de identificación, otro es el
diagnóstico de cáncer, y 30 son las mediciones de laboratorio-numéricos valorado.
El diagnóstico se codifica como "M" para indicar maligno o "B" para indicar
benigna.
Los otros 30 mediciones numéricas comprenden el error medio, estándar, y el peor
(es decir, más grande) valor para 10 características diferentes de los núcleos
celulares digitalizados.
Éstos incluyen:
• Radio
• Textura
• Perímetro
• Zona
• Suavidad
• compacidad
• Concavidad
• puntos cóncavos
• Simetría
• Dimensión fractal

Sobre la base de estos nombres, todas las características que parecen relacionarse
con la forma y tamaño de los núcleos de las células. A menos que sea un oncólogo,
es poco probable que saber cómo cada uno se relaciona con masas benignas o
malignas. Estos patrones se dará a conocer a medida que continuamos en el proceso
de aprendizaje de la máquina.

[ 12 ]
Capítulo 3

Paso 2 - exploración y la preparación de los


datos
Vamos a explorar los datos y ver si podemos brillar algo de luz sobre las relaciones.
Al hacerlo, vamos a preparar los datos para su uso con el método de aprendizaje K-
NN.

Si planea siguiendo a lo largo, descargue el archivo desde el sitio


web wisc_bc_data.csv Packt y guardarlo en su directorio de trabajo
R. El conjunto de datos se modificó muy poco de su forma original
para este libro. En particular, se añadió una línea de cabecera y las
filas de datos se ordenó al azar.

Comenzaremos importando el archivo de datos CSV, como lo hemos hecho en los


capítulos anteriores,
guardar los datos de cáncer de mama Wisconsin a la trama de datos wbcd:
> wbcd <- read.csv ( "wisc_bc_data.csv", stringsAsFactors = FALSE)

El uso del comando str (wbcd), podemos confirmar que los datos se estructura
con 569 ejemplos y 32 características que esperábamos. Las primeras líneas de
salida son los siguientes:
'Hoja.de.datos': 569 obs. of32 variables:
PS carné de identidad: int87139402 8910251 905520 ...
PS diagnóstico: CHR "B" "B" "B" "B" ...
P radius_mean: num 12.3 10.6 11 11.3 15.2 ...
S
P texture_mean: num 12.4 18.9 16,8 13,4 13,2 ...
S
P perimeter_mean: num 78.8 69.3 70.9 73 97.7 ...
S
PS area_mean: num464 346 373 385 712 ...

La primera variable es una variable entera llamada ID. Como esto es simplemente
un identificador único (ID) para cada paciente en los datos, que no proporciona
información útil, y que tendrá que excluirlo del modelo.

Independientemente del método de aprendizaje automático, las variables


de identificación siempre deben ser excluidos. No hacerlo puede
conducir a conclusiones erróneas porque el ID se puede utilizar para
única "predecir" cada ejemplo. Por lo tanto, un modelo que incluye un
identificador sufrirá de sobreajuste, y es improbable que generalizar bien
a otros datos.

Dejemos la función Identificación del conjunto. Ya que se encuentra en la primera


columna, podemos
excluirlo haciendo una copia de la trama de datos wbcd sin columna 1:
> wbcd <- wbcd [-1]

[ 13 ]
Lazy Learning - Clasificación a partir cercano vecinos

La siguiente variable, el diagnóstico, es de particular interés ya que es el


resultado que esperamos de predecir. Esta característica indica si el ejemplo
es de una masa benigna o maligna. La salida de la tabla () indica que 357
masas son benignas, mientras que 212 son malignos:
> mesa (wbcd $
diagnóstico) BM
357 212

Muchos clasificadores de aprendizaje automático R requieren que la entidad de


destino se codifica como un factor, por lo que tendrán que recodificar la variable
diagnóstico. También vamos a aprovechar esta oportunidad para dar la "B" y
valores "M" etiquetas más informativos utilizando el parámetro de etiquetas:
> wbcd $ <diagnóstico - factor de (wbcd $ diagnóstico, niveles
= c ( "B", "M"), etiquetas = C ( "benigna", "maligno"))

Ahora, cuando nos fijamos en la salida prop.table (), nos damos cuenta de que
los valores se han etiquetado benignos y malignos, con 62,7 por ciento y 37,3 por
ciento de las masas, respectivamente:
> redonda (prop.table (tabla (wbcd $ diagnóstico)) * 100,
los dígitos = 1) benigna de maligna
62.737.3

Las 30 características restantes son todos numérico, y como se esperaba, se


componen de tres mediciones diferentes de diez características. Para fines
ilustrativos, sólo a echar un vistazo más de cerca a tres de estas características:
> Resumen (wbcd [c ( "radius_mean", "area_mean", "smoothness_mean")])
radius_mean area_mean smoothness_mean
min .: 6,981 min .: 143,5 Min. : 0.05263
primero Primero Qu .: primero
Qu.:11.700 420,3 Qu.:0.08637
Mediana: La mediana: Mediana: 0.09587
13.370 551,1
La media: Media: 654,9 Media : 0.09636
14.127
tercero Qu tercera .: tercero
Qu.:15.780 782,7 Qu.:0.10530
Max.:28.110 Max.:2501.0 Max. : 0.16340

[ 14 ]
Capítulo 3

Mirando el lado a lado características, qué nota algo problemático en los valores?
Recordemos que el cálculo de la distancia para k-NN depende en gran medida de
la escala de medición de las características de entrada. Desde suavidad varía de
0,05 a
0.16 y zona oscila desde 143,5 hasta 2501,0, el impacto de la zona que va a ser
mucho más grande que la suavidad en el cálculo de la distancia. Esto podría
causar problemas para nuestro clasificador, por lo que vamos a aplicar la
normalización de reescalar las características de una gama estándar de valores.

Transformación - la normalización de los datos


numéricos
Para normalizar estas características, necesitamos para crear una función
Normalizar () en R. Esta función toma un vector x de valores numéricos, y para
cada valor de x, resta el valor mínimo de x y divide por el rango de valores en x.
Por último, se devuelve el vector resultante. El código para esta función es la
siguiente:
> normalizar <- function (x) {
retorno ((x - min (x)) / (max (x) - min (x)))
}

Después de ejecutar el código anterior, la función () Normalizar está disponible para su


uso en
R. Vamos a probar la función en un par de vectores:
> Normalizar (c (1, 2, 3, 4, 5))
[1] 0,00 0,25 0,50 0,75 1,00
> Normalizar (c (10, 20, 30, 40, 50))
[1] 0,00 0,25 0,50 0,75 1,00

La función parece estar funcionando correctamente. A pesar de que los valores en


el segundo vector son 10 veces más grande que el primer vector, después de la
normalización, que ambos aparecen exactamente lo mismo.
Ahora podemos aplicar la función de normalizar () para las funciones numéricas
en nuestra trama de datos. En lugar de la normalización de cada una de las 30
variables numéricas de forma individual, vamos a utilizar una de las funciones
de I para automatizar el proceso.
La función lapply () toma una lista y aplica una función especificada a cada
elemento de la lista. Como una trama de datos es una lista de vectores de igual
longitud, podemos usar lapply () para aplicar normalizar () para cada característica
en la trama de datos. El paso final es la de convertir la lista devuelta por lapply ()
para una trama de datos, utilizando la función de as.data.frame (). El proceso
completo es el siguiente:
> wbcd_n <- as.data.frame (lapply (wbcd [2:31], normalizar))

[ 15 ]
Lazy Learning - Clasificación a partir cercano vecinos

En la llanura Inglés, este comando se aplica la función de normalizar () para


las columnas 2 a 31 en la trama de datos wbcd, convierte la lista resultante a
una trama de datos,
y le asigna el nombre wbcd_n. El sufijo _n se utiliza aquí como un recordatorio de que el
valores en wbcd se han normalizado.

Para confirmar que la transformación se aplica correctamente, vamos a ver una variable
de
resumen estadístico:
> Resumen (wbcd_n $ area_mean)
Min. primeroQu.MedianMean tercero
Qu.Max. 0.00000.11740.17290.21690.2711
1.0000

Como era de esperar, la variable area_mean, que originalmente varió desde 143,5
hasta 2501,0, ahora va de 0 a 1.

Preparación de datos - la creación de


conjuntos de datos de entrenamiento y
prueba
Aunque todas las 569 biopsias se etiquetan con un estado benigno o maligno, no es
muy interesante para predecir lo que ya sabemos. Además, las medidas de
rendimiento que obtenemos durante el entrenamiento puede ser engañoso, ya que
no sabemos el grado en que se han overfitted casos o lo bien que el alumno
generalizar a los casos que no se ven. Una pregunta más interesante es lo bien que
nuestro alumno realiza en
un conjunto de datos de datos no etiquetados. Si hemos tenido acceso a un
laboratorio, podríamos aplicar nuestro alumno a las medidas tomadas de los
próximos 100 masas de estado del cáncer desconocido, y ver lo bien las predicciones
del alumno máquina comparan con los obtenidos mediante métodos diagnósticos
convencionales.
En ausencia de estos datos, podemos simular este escenario dividiendo los datos en
dos partes: una formación de datos que se utilizará para construir el modelo k-NN y
un conjunto de datos de prueba que se utiliza para estimar la exactitud predictiva
del modelo . Vamos a utilizar los primeros 469 registros para la formación de datos
y los restantes 100 para simular nuevos pacientes.
Utilizando los métodos de extracción de datos que figuran en el capítulo 2, la
gestión y comprensión de datos, vamos a dividir el wbcd_n trama de datos en
wbcd_train y wbcd_test:

> wbcd_train <- wbcd_n [1: 469],


> Wbcd_test <- wbcd_n [470: 569,]

[ 16 ]
Capítulo 3

Si los comandos anteriores son confusas, recordar que datos se extraen de las tramas
de datos utilizando el [fila, columna] sintaxis. Un valor en blanco para el valor de fila
o columna indica que todas las filas o columnas deben ser incluidos. Por lo tanto, la
primera línea de código toma las filas 1 a 469 y todas las columnas, y la segunda
línea de toma 100 filas de 470 a 569 y todas las columnas.

Cuando la construcción de conjuntos de datos de entrenamiento y


prueba, es importante que cada conjunto de datos es un subconjunto
representativo de todo el conjunto de datos. Los registros wbcd ya
fueron ordenadas al azar, por lo que simplemente podrían extraer 100
registros consecutivos para crear un conjunto de datos de prueba.
Esto no sería apropiado si los datos fueron ordenados
cronológicamente o en grupos de valores similares. En estos casos, se
necesitan métodos de muestreo aleatorio. El muestreo aleatorio se
discutirá en el capítulo 5, divide y vencerás - Clasificación a partir de
árboles de decisión y Reglas.

Cuando construimos nuestros formación y la prueba normalizados conjuntos de


datos, se excluyó la variable objetivo, el diagnóstico. Para entrenar el modelo k-
NN, tendremos que almacenar estas etiquetas de clase en vectores de factores,
dividido entre los conjuntos de datos de entrenamiento y prueba:
> wbcd_train_labels <- wbcd [1: 469, 1]
> wbcd_test_labels <- wbcd [470: 569, 1]

Este código toma la diagnóstico factor en la primera columna de la wbcd trama


de datos, y genera los vectores wbcd_train_labels y wbcd_test_labels. Vamos
a utilizar estos en los próximos pasos de la formación y la evaluación de nuestro
clasificador.

Paso 3 - la formación de un modelo sobre los


datos
Equipado con nuestros datos de entrenamiento y etiquetas vector, ahora estamos
listos para clasificar nuestros archivos desconocidos. Para el algoritmo k-NN, la
fase de entrenamiento en realidad no implica la construcción de modelos; el
proceso de la formación de un alumno perezoso como k-NN implica simplemente
el almacenamiento de los datos de entrada en un formato estructurado.
Para clasificar nuestros casos de prueba, vamos a utilizar una aplicación k-NN del
paquete de clase, que ofrece un conjunto de funciones básicas de investigación para
la clasificación. Si este paquete no está instalado en su sistema, puede instalarlo
escribiendo:
> install.packages ( "clase")

Para cargar el paquete durante cualquier sesión en la que se desea utilizar las
funciones, basta con introducir el comando biblioteca (clase).

[ 17 ]
Lazy Learning - Clasificación a partir cercano vecinos

La función knn () en el paquete de clase proporciona un estándar, la aplicación


clásica del algoritmo k-NN. Para cada ejemplo, en los datos de prueba, la función
identificará los k-vecinos más cercanos, utilizando la distancia euclidiana, donde k es
un número especificado por el usuario. La instancia de prueba se clasifica mediante
la adopción de un "voto" entre los k-vecinos más cercanos, específicamente, se trata
de la asignación de la clase de la mayoría de los k vecinos. Un empate se rompe al
azar.

Hay varias otras funciones k-NN en otros paquetes de R, que


proporcionan implementaciones más sofisticadas o más
eficientes. Si se encuentra con límites con knn (), buscar k-NN
en el Archivo R Red Integral (CRAN).

Formación y clasificación utilizando la función knn () se lleva a cabo en una única


llamada de función, utilizando cuatro parámetros, como se muestra en la siguiente
tabla:

Ahora tenemos casi todo lo que tenemos que aplicar el algoritmo k-NN a
estos datos. Hemos dividido nuestros datos en conjuntos de datos de entrenamiento
y prueba, cada uno con exactamente las mismas características numéricas. Las
etiquetas de los datos de entrenamiento se almacenan en un factor vector separado.
El parámetro sólo restante es k, que especifica el número de vecinos para incluir en
la votación.

Como nuestros datos de entrenamiento incluye 469 casos, podríamos tratar k = 21,
un número impar más o menos igual a la raíz cuadrada de 469. Con un resultado de
dos categorías, utilizando un número impar elimina la posibilidad de que termina
con un empate en la votación.

[ 18 ]
Capítulo 3

Ahora podemos usar la función knn () para clasificar los datos de prueba:
> wbcd_test_pred <- KNN (tren = wbcd_train, test = wbcd_test,
cl = wbcd_train_labels, k = 21)

La función knn () devuelve un vector factor de de etiquetas predichos para


cada uno de los ejemplos en el conjunto de datos de prueba, lo que hemos
asignados a wbcd_test_pred.

Paso 4 - evaluar el rendimiento del modelo


El siguiente paso del proceso es evaluar qué tan bien las clases previstas en el wbcd_
test_pred vector coinciden con los valores conocidos en la wbcd_test_labels
vector. Para ello, podemos utilizar elCuadro cruzado () función en el gmodels
paquete, que fue presentado en el Capítulo 2, Gestión de Datos y comprensión. Si no
lo ha hecho
ya, por favor instalar este paquete, utilizando el install.packages ( "gmodels")
mando.
Después de cargar el paquete con el comando de la biblioteca (gmodels),
podemos crear una tabulación cruzada que indica el acuerdo entre los dos
vectores. Especificación de prop.chisq = FALSE eliminará los valores
innecesarios de chi-cuadrado de la salida:
> Cuadro cruzado (X = wbcd_test_labels, Y = wbcd_test_pred,
prop.chisq = FALSE)

La tabla resultante es el siguiente:

[ 19 ]
Lazy Learning - Clasificación a partir cercano vecinos

Los porcentajes de células en la tabla indican la proporción de los valores que caen
en cuatro categorías. La celda superior izquierda indica los resultados negativos
verdaderos. Estos 61 de 100 valores son casos en los que la masa era benigno y el
algoritmo de k-NN correctamente identificados como tal. La celda inferior derecha
indica los verdaderos resultados positivos, donde el clasificador y la etiqueta
determinado clínicamente acuerdo en que la masa es maligna. Un total de 37 de 100
predicciones eran verdaderos positivos.
Las células que caen en la otra diagonal contienen cargos de ejemplos en los que el
enfoque k-NN estaban de acuerdo con la etiqueta cierto. Los dos ejemplos en la celda
inferior izquierda son resultados falsos negativos; en este caso, el valor predicho era
benigno, pero el tumor en realidad era maligno. Los errores en esta dirección podría
ser muy costosa, ya que podría dar lugar a un paciente a creer que ella está libre de
cáncer, pero en realidad, la enfermedad puede seguir extendiéndose. La celda
superior derecha contendría los resultados falsos positivos, si hubiera alguna. Estos
valores se producen cuando el modelo clasifica como una masa maligna, pero en
realidad, era benigno. Aunque este tipo de errores son menos peligrosos que un
resultado falso negativo,

Si quisiéramos, podríamos eliminar totalmente falsos negativos


mediante la clasificación de todas las misas como malignos.
Obviamente, esto no es una estrategia realista. Aún así, ilustra el
hecho de que la predicción consiste en lograr un equilibrio entre la
tasa de falsos positivos y la tasa de falsos negativos. En el capítulo
10, Evaluación del desempeño del modelo, aprenderá métodos más
sofisticados para medir la exactitud de predicción que se puede
utilizar para identificar lugares en los que la tasa de error se puede
optimizar en función de los costos de cada tipo de error.

Un total de 2 de cada 100, o 2 por ciento de masas fueron clasificadas incorrectamente por
el k-NN
enfoque. Mientras que el 98 por ciento de precisión parece impresionante para
unas pocas líneas de código R, que puede probar otra iteración del modelo para
ver si podemos mejorar el rendimiento y reducir el número de valores que se han
clasificado de forma incorrecta, particularmente debido a que los errores eran
falsos negativos peligrosos .

Paso 5 - mejorar el rendimiento del modelo


Vamos a tratar dos variaciones simples en nuestra clasificador anterior.
Primero, vamos a emplear un método alternativo para cambiar la escala de
nuestras funciones numéricas. En segundo lugar, vamos a tratar varios valores
diferentes de k.

[ 20 ]
Capítulo 3

Transformación - la normalización z-score


A pesar de la normalización se utiliza tradicionalmente para la clasificación k-NN, puede
no siempre puede ser la forma más adecuada para cambiar la escala de
características. Dado que los valores estandarizados puntuación z tienen ningún
mínimo predefinido y el máximo, los valores extremos no se comprimen hacia el
centro. Uno podría sospechar que con un tumor maligno, podríamos ver algunos
valores atípicos muy extremos como los tumores crecen sin control. Podría, por lo
tanto, ser razonable para permitir que los valores atípicos a ser un mayor peso en el
cálculo de la distancia. Vamos a ver si la normalización de puntuación z puede
mejorar nuestra precisión predictiva.
Para estandarizar un vector, podemos utilizar la función de la escala de R
incorporada (), que, por defecto, cambia la escala valores, mediante la
estandarización de puntuación z. La función de escala () ofrece la ventaja adicional
de que puede ser aplicado directamente a una trama de datos, por lo que se puede
evitar el uso de la función lapply (). Para crear una versión estandarizada z-score de
los datos wbcd, podemos usar el siguiente comando:
> wbcd_z <- as.data.frame (escala (wbcd [-1]))

Este comando cambia la escala todas las características, con la excepción de


diagnóstico y almacena el resultado como la trama de datos wbcd_z. El sufijo _z es
un recordatorio de que los valores se transformaron z-score.

Para confirmar que la transformación se aplica correctamente, podemos ver el


resumen estadístico:
> Resumen (wbcd_z $ area_mean)
Min. primeroQu.MedianMean tercero
Qu. Max.
-1,4530 -0,6666 -0.29490.00000.3632
5.2460

La media de una variable estandarizada z-score debe ser siempre cero, y el rango
debe ser bastante compacto. Una puntuación z mayor que 3 o menos de -3 indica
un valor extremadamente raro. Con esto en mente, la transformación parece haber
funcionado.
Como habíamos hecho antes, tenemos que dividir los datos en conjuntos de
entrenamiento y prueba, y luego clasificar los casos de prueba utilizando la
función knn (). a continuación, vamos a comparar las etiquetas prevé que las
etiquetas reales utilizando cruzado ():
> wbcd_train <- wbcd_z [1: 469],
> Wbcd_test <- wbcd_z [470: 569,]
> wbcd_train_labels <- wbcd [1: 469, 1]
> wbcd_test_labels <- wbcd [470: 569, 1]

[ 21 ]
Lazy Learning - Clasificación a partir cercano vecinos

> wbcd_test_pred <- KNN (tren = wbcd_train, test = wbcd_test,


cl = wbcd_train_labels, k = 21)
> Cuadro cruzado (X = wbcd_test_labels, Y = wbcd_test_pred,
prop.chisq = FALSE)

Por desgracia, en la siguiente tabla, los resultados de nuestra nueva transformación


muestran una ligera disminución en la precisión. Los casos en los que había
clasificado correctamente 98 por ciento de los ejemplos anteriormente, clasifican sólo
el 95 por ciento correctamente este momento. Para empeorar las cosas, que no lo
hicieron mejor en la clasificación de los falsos negativos peligrosos:

Prueba de valores alternativos de k


Podemos ser capaces de hacerlo aún mejor mediante el examen de rendimiento a
través de diferentes valores de k. El uso de la formación y de prueba normalizados
conjuntos de datos, los mismos 100 registros se clasificaron usando varios valores de
k diferentes. El número de falsos negativos y falsos positivos se muestran para cada
iteración:

valor k Los falsos Falsos positivos Porcentaje clasificado de forma


negativos incorrecta
1 1 3 4 por ciento
5 2 0 2 por ciento
11 3 0 3 por ciento
15 3 0 3 por ciento
21 2 0 2 por ciento
27 4 0 4 por ciento

[ 22 ]
Capítulo 3

Aunque el clasificador no era perfecto, el enfoque 1-NN fue capaz de evitar algunos
de los falsos negativos a expensas de la adición de los falsos positivos. Es importante
tener en cuenta, sin embargo, que no sería prudente para adaptar nuestro enfoque
demasiado de cerca a nuestros datos de prueba; después de todo, es probable que
sea algo diferente de los que se utilizan para medir nuestro desempeño un conjunto
diferente de 100 registros de pacientes.

Si usted necesita estar seguro de que un alumno se generalizará


a futuros datos, puede crear varios grupos de 100 pacientes al
azar y repetir la prueba en repetidas ocasiones el resultado. Los
métodos de evaluar cuidadosamente el rendimiento de los
modelos de aprendizaje automático se tratará más adelante en el
capítulo 10, Evaluación del desempeño del modelo.

Resumen
En este capítulo, aprendimos sobre clasificación utilizando k-NN. A diferencia de
muchos algoritmos de clasificación, k-NN no hace ningún aprendizaje. Es
simplemente almacena los datos de entrenamiento pie de la letra. ejemplos de ensayo
sin etiqueta entonces se emparejan a los registros más similares en el conjunto de
entrenamiento usando una función de distancia, y el ejemplo no marcada se le asigna
la etiqueta de sus vecinos.
A pesar del hecho de que k-NN es un algoritmo muy simple, que es capaz de
hacer frente a tareas extremadamente complejas, tales como la identificación de
masas cancerosas. En pocas líneas simples de código R, hemos sido capaces de
identificar correctamente si una masa era maligno o benigno 98 por ciento de las
veces.
En el siguiente capítulo, examinaremos un método de clasificación que utiliza la
probabilidad para estimar la probabilidad de que una observación cae en ciertas
categorías. Será interesante comparar cómo este enfoque se diferencia de k-NN.
Más adelante, en el capítulo 9,
Encontrar grupos de datos - La agrupación con k-medias, Vamos a aprender acerca de un
pariente cercano a k-NN, que utiliza medidas de distancia para una tarea de
aprendizaje completamente diferente.

[ 23 ]
procesos de procesamiento de texto y de limpieza más sofisticados,
tales como la coincidencia de patrones grep y sustitución. Basta con
escribir una función personalizada y envolverlo antes de aplicar a
través de tm_map () como se ha hecho anteriormente.

Vamos a continuar nuestra limpieza mediante la eliminación de los números de los


mensajes SMS. Aunque algunos números pueden proporcionar información útil, la
mayoría probablemente sería única para los remitentes individuales y por lo tanto
no proporcionará patrones útiles en todos los mensajes. Con esto en mente, de TIRA
todos los números del corpus de la siguiente manera:
> sms_corpus_clean <- tm_map (sms_corpus_clean, removeNumbers)

Tenga en cuenta que el código anterior no utilizó el content_transformer ()


función. Esto se debe a removeNumbers () está integrado en tm
junto con varias otras funciones de mapeo que no necesitan ser
envuelto. Para ver las otras transformaciones incorporadas,
simplemente escriba getTransformations ().

Nuestra siguiente tarea consiste en eliminar las palabras de relleno tal que, y, sin
embargo, y de nuestros o mensajes SMS. Estos términos son conocidos como
palabras vacías y por lo general se retiran antes de la minería de texto. Esto se debe al
hecho de que a pesar de que aparecen con mucha frecuencia, no proporcionan mucha
información útil para el aprendizaje de la máquina.

[ 25 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

En lugar de definir una lista de palabras vacías nosotros mismos, vamos a utilizar la
función () stopwords proporcionadas por el paquete tm. Esta función nos permite
acceder a diversos conjuntos de palabras vacías, la mayoría de los idiomas. Por
defecto, se utilizan las palabras vacías idioma inglés comunes. Para ver la lista
predeterminada, escriba las palabras vacías () en la línea de comandos. Para ver los
otros idiomas y las opciones disponibles, escriba? Palabras de detención en la página
de documentación.

Incluso dentro de un mismo idioma, no hay una única lista definitiva de


las palabras vacías. Por ejemplo, la lista predeterminada en Inglés tm
incluye cerca de 174 palabras, mientras que otra opción incluye 571
palabras. Incluso puede especificar su propia lista de palabras vacías, si lo
prefiere. Independientemente de la lista que elija, tenga en cuenta el
objetivo de esta transformación, que es eliminar todos los datos inútiles,
manteniendo tanta información útil como sea posible.

Las palabras de parada por sí solos no son una transformación útil. Lo que
necesitamos es una forma de eliminar cualquier palabra que aparecen en la
lista de palabras vacías. La solución está en el
función removeWords (), que es una transformación que se incluye con
el paquete tm. Como lo hemos hecho antes, vamos a utilizar la
función tm_map () para aplicar este mapeo de los datos, que
proporciona la función () palabras vacías como un parámetro para
indicar exactamente las palabras que desea eliminar. El comando
completo es el siguiente:
> sms_corpus_clean <- tm_map
(sms_corpus_clean, removeWords, stopwords
())

Dado que las palabras vacías () simplemente devuelve un vector de palabras vacías,
que habían elegido así, podríamos haber reemplazado con nuestro propio vector de
palabras para ser retirado. De esta manera, se podría ampliar o reducir la lista de
palabras vacías a nuestro gusto o eliminar un conjunto completamente diferente de
las palabras en su totalidad.
Continuando con nuestro proceso de limpieza, también puede eliminar cualquier
puntuacion de los mensajes de texto utilizando la transformación incorporada
removePunctuation ():
> sms_corpus_clean <- tm_map (sms_corpus_clean, removePunctuation)

La transformación removePunctuation () quita los caracteres de puntuación del


texto oculto, que puede conducir a consecuencias no deseadas. Por ejemplo,
considere lo que sucede cuando se aplica de la siguiente manera:

[ 26 ]
> removePunctuation ( "Hola mundo ...")
[1] "holamundo"

Como se muestra, la falta de espacio en blanco después de las elipses ha causado


las palabras hola y el mundo a unir como una sola palabra. Si bien esto no es un
problema importante para nuestro análisis, es digno de mención para el futuro.

[ 27 ]
Capítulo 4

Para evitar el comportamiento por defecto de removePunctuation


(), basta con crear una función personalizada que sustituye en
lugar de quita caracteres de puntuación:
> replacePunctuation <- function (x)
{gsub ( "[[: punct:]] +", "", x)
}
En esencia, este utiliza la función de R gsub () para
sustituir los caracteres de puntuación en X con un espacio
en blanco. los
función replacePunctuation () se puede usar entonces con
tm_map ()
como con otras transformaciones.

Otra de normalización común para datos de texto implica reducir palabras a su


forma de raíz en un proceso llamado deriva. El proceso de toma derivada palabras
como aprendido, el aprendizaje, y aprende, y elimina los sufijos con el fin de
transformarlos en forma de base, aprender. Esto permite algoritmos de aprendizaje
automático para el tratamiento de los términos relacionados como un solo concepto
en lugar de tratar de aprender un patrón para cada variante.
los tm paquete proporciona funcionalidad derivada mediante la integración con la
SnowballC paquete. En el momento de escribir estas líneas,SnowballC no se ha
instalado por defecto con tm. Hacerlo coninstall.packages ( "SnowballC") si
no está ya instalado.

El paquete SnowballC se mantiene por Milan Bouchet-Valat y


proporciona una interfaz R a la biblioteca libstemmer basado en
C,
que se basa en la palabra "bola de nieve" de MF Porter derivados
algoritmo, una fuente abierta ampliamente utilizado método derivada. por
más detalle, véase http://snowball.tartarus.org.

El paquete SnowballC proporciona una función wordStem (), que para un vector
de caracteres, devuelve el mismo vector de términos en su forma de raíz. Por
ejemplo, la función se deriva correctamente las variantes de la palabra aprender,
como se ha descrito anteriormente:
> biblioteca (SnowballC)
> wordStem (c ( "aprender", "aprender", "aprender", "aprende"))
[1] "Aprender" "aprender" "aprender" "aprender"

Con el fin de aplicar la función wordStem () a todo un corpus de documentos de


texto, el paquete incluye una transformación tm stemDocument (). Aplicamos esto a
nuestro corpus con la función tm_map () exactamente como se hizo anteriormente:
> sms_corpus_clean <- tm_map (sms_corpus_clean, stemDocument)

[ 28 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

Si recibe un mensaje de error al aplicar la transformación


stemDocument (), por favor confirmar que ha instalado el paquete
SnowballC. Si después de instalar el paquete sigue teniendo el mensaje
de que todos los núcleos programados encuentran errores, también
puede intentar forzar el comando tm_map () a un solo núcleo,
mediante la adición de un parámetro adicional para especificar
mc.cores = 1.

Después de la eliminación de los números, deja de palabras y puntuacion, así como


la realización de derivados, los mensajes de texto se quedan con los espacios en
blanco que se haya separado previamente las piezas que faltan ahora. El último paso
en nuestro proceso de limpieza de texto es eliminar el espacio en blanco adicional,
usando la transformación de una función de stripWhitespace ():
> sms_corpus_clean <- tm_map (sms_corpus_clean, stripWhitespace)

La siguiente tabla muestra los tres primeros mensajes en el corpus de SMS antes y
después del proceso de limpieza. Los mensajes se han limitado a las palabras más
interesantes, y la puntuacion y las mayúsculas se han eliminado:

Los mensajes SMS antes de la limpieza Los mensajes SMS después de la limpieza
> as.character (sms_corpus [1: > as.character (sms_corpus_clean [1:
3]) 3])

[[1]] esperamos que están [[1]] espero buena semana sólo


teniendo una buena semana. comprobar
Apenas llegando
[[2]] kgive vuelta gracias
[[2]] K..give volver mi
agradecimiento.
[[3]] pago también CBE
[[3]] También estoy haciendo
sólo CBE. Pero tienen que pagar.

Preparación de datos - los documentos de


texto división en palabras
Ahora que los datos se procesan a nuestro gusto, el paso final es la de dividir los
mensajes en componentes individuales a través de un proceso llamado
tokenización. Un token es un solo elemento de una cadena de texto; en este caso,
las fichas son palabras.
Como es de suponer, el paquete TM proporciona funcionalidad para tokenize el
corpus mensaje SMS. La función DocumentTermMatrix () tendrá un corpus y crear
una estructura de datos llamada Plazo Matriz de documentos (DTM) en la que las
filas indican los documentos (mensajes SMS) y las columnas indican términos
(palabras).

[ 29 ]
Capítulo 4

El paquete tm también proporciona una estructura de datos para un


concepto documento Matriz (TDM), que es simplemente un MDT
transpuesta en el que las filas son términos y las columnas son
documentos. ¿Por qué la necesidad de ambos?
A veces, es más conveniente trabajar con una o la otra. Por ejemplo, si
el número de documentos es pequeño, mientras que la lista de
palabras es grande, puede tener sentido utilizar un TDM, ya que es
generalmente más fácil de visualizar el número de filas que mostrar
muchas columnas. Dicho esto, los dos son a menudo intercambiables.

Cada celda de la matriz almacena un número que indica un recuento de las veces
que la palabra representada por la columna aparece en el documento
representado por la fila. La siguiente ilustración muestra sólo una pequeña
porción de la DTM para el corpus SMS, como la matriz completa tiene 5.559 filas
y más de 7.000 columnas:

El hecho de que cada celda de la tabla es cero implica que ninguna de las
palabras que aparecen en la parte superior de las columnas aparece en ninguno
de los cinco primeros mensajes en el corpus. Esto pone de relieve la razón por la
que esta estructura de datos se llama una matriz dispersa; la gran mayoría de las
células en la matriz se llenan con ceros. Expresado en términos del mundo real,
aunque cada mensaje debe contener al menos una palabra, la probabilidad de
que cualquier palabra que aparece en un mensaje dado es pequeña.
La creación de una matriz dispersa DTM, dado un corpus tm, consiste en un solo
comando:
> sms_dtm <- DocumentTermMatrix (sms_corpus_clean)

Esto creará un objeto sms_dtm que contiene el corpus tokenized con la


configuración predeterminada, que se aplican procesamiento mínimo. La
configuración predeterminada es apropiada porque ya hemos preparado el
corpus manualmente.

Por otro lado, si no hubiéramos realizado el pre-procesamiento, podríamos


hacerlo aquí proporcionando una lista de opciones de parámetros de control
para anular los valores predeterminados. Por ejemplo, para crear un MDT

[ 30 ]
directamente desde el corpus SMS cruda sin procesar, podemos usar el siguiente
comando:
> sms_dtm2 <- DocumentTermMatrix (sms_corpus, control =
lista (tolower = TRUE,

[ 31 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

removeNumbers = TRUE,
stopwords = TRUE,
removePunctuation = TRUE,
derivados = TRUE
))

Esto se aplica los mismos pasos de procesamiento previo al corpus de texto en el


mismo orden como se ha hecho anteriormente. Sin embargo, la comparación de
sms_dtm a sms_dtm2, vemos una ligera diferencia en el número de términos en la
matriz:
> sms_dtm
<< DocumentTermMatrix (documentos: 5559, términos:
6518) >> entradas no- / dispersos: 42113/36191449
escasez: 100%
Longitud máxima plazo: 40
Ponderación: frecuencia de los términos (Tf)

> sms_dtm2
<< DocumentTermMatrix (documentos: 5559, términos:
6909) >> entradas no- / dispersos: 43192/38363939
escasez: 100%
Longitud máxima plazo: 40
Ponderación: frecuencia de los términos (Tf)

La razón de esta discrepancia tiene que ver con una diferencia menor en el orden
de los pasos de preprocesamiento. La función DocumentTermMatrix () aplica sus
funciones de limpieza de las cadenas de texto sólo después de que se han escindido
en palabras. Por lo tanto, se utiliza una función de eliminación de palabras vacías
ligeramente diferente. En consecuencia, algunas palabras se dividen de manera
diferente que cuando se limpian antes de tokenización.

Para forzar las dos matrices anteriores plazo documento a ser


idénticos, podemos reemplazar el valor predeterminado palabras
vacías funcionan con nuestra propia que utiliza la función de
repuesto originales. Basta con sustituir palabras vacías = TRUE con lo
siguiente:
stopwords = función (x) {removeWords (x, palabras vacías ())}

[ 32 ]
Capítulo 4

Las diferencias entre estos dos casos ilustran un principio importante de la limpieza
de datos de texto: el orden de los asuntos de operaciones. Con esto en mente, es
muy importante
a pensar en cómo los primeros pasos en el proceso van a afectar a los posteriores. El
orden que se presenta aquí trabajará en muchos casos, pero cuando el proceso se
adapta más cuidadosamente para conjuntos de datos específicos y casos de uso,
puede requerir una revisión. Por ejemplo, si hay ciertos términos que espera excluir
de la matriz, considere si debe buscar antes o después de detener. Además,
considere cómo la eliminación
de puntuacion-y si la puntuacion se elimina o se sustituye por el espacio en
blanco-afecta a estos pasos.

Preparación de datos - la creación de


conjuntos de datos de entrenamiento y
prueba
Con nuestros datos preparados para el análisis, ahora tenemos que dividir los datos
en conjuntos de datos de entrenamiento y prueba, de manera que una vez que
nuestro clasificador de correo no deseado se construye, se puede evaluar en los datos
no ha visto anteriormente. Sin embargo, a pesar de que tenemos que mantener el
clasificador cegado en cuanto a los contenidos de los datos de prueba, es importante
que la división se produce después de que los datos han sido limpiados y
procesados; necesitamos exactamente los mismos pasos de preparación se presente
en ambos los conjuntos de datos de entrenamiento y prueba.
Vamos a dividir los datos en dos partes: 75 por ciento para la formación y el 25 por
ciento para las pruebas. Dado que los mensajes SMS son ordenados en un orden
aleatorio, podemos simplemente tomar el primer 4169 para la formación y dejar el
resto de 1390 para la prueba. Afortunadamente, el objeto DTM actúa muy parecido a
una trama de datos y se puede dividir utilizando los [fila, col] operaciones estándar.
Como nuestras tiendas DTM mensajes SMS como filas y columnas como las palabras,
hay que solicitar un rango específico de filas y todas las columnas para cada uno:
> sms_dtm_train <- sms_dtm [1: 4169,]
> sms_dtm_test <- sms_dtm [4170: 5559, ]

Por razones de conveniencia más adelante, también es útil para guardar un par de
vectores con etiquetas para cada una de las filas de las matrices de formación y las
pruebas. Estas etiquetas no se almacenan en el DTM, por lo que tendrían que tirar
de ellos a partir de la trama de datos sms_raw el original:
> sms_train_labels <- sms_raw [1: 4169,] Tipo $
> sms_test_labels <- sms_raw [4170: 5559, ] Tipo $

[ 33 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

Para confirmar que los subconjuntos son representativos del conjunto completo de datos
de SMS, vamos
comparar la proporción de spam en las tramas de datos de prueba de entrenamiento y:
> prop.table (tabla
(sms_train_labels)) hamspam
0.8647158 0.1352842
> prop.table (tabla
(sms_test_labels)) hamspam
0.8683453 0.1316547

Tanto los datos de entrenamiento y datos de prueba contienen alrededor de un


13 por ciento de spam. Esto sugiere que los mensajes de spam se dividieron en
partes iguales entre los dos conjuntos de datos.

Visualización de datos de texto - las nubes de


palabras
Una nube de palabras es una forma de representar visualmente la frecuencia con la
que aparecen las palabras de datos de texto. La nube se compone de palabras
dispersas algo al azar alrededor de la figura. Las palabras que aparecen con más
frecuencia en el texto se muestran en una fuente más grande, mientras que términos
menos comunes se muestran en fuentes más pequeñas. Este tipo de figuras creció en
popularidad recientemente, ya que proporciona una manera de observar temas de
tendencias en los sitios web de medios sociales.
El paquete wordcloud proporciona una función de R simple de crear este tipo de
diagramas. Lo utilizaremos para visualizar los tipos de palabras en mensajes SMS, ya
que la comparación de las nubes de correo no deseado y el jamón nos ayudará a
medir si nuestro filtro de spam bayesiano Naive es probable que tenga éxito. Si aún
no lo ha hecho, instale y cargue el paquete escribiendo install.packages (
"wordcloud") y la biblioteca (wordcloud) en la línea de comandos R.

El paquete de wordcloud fue escrito por Ian Fellows.


Para más información sobre este paquete, visite su blog en
http://blog.fellstat.com/?cat=11.

Una nube palabra puede ser creado directamente desde un objeto tm corpus utilizando la
sintaxis:
> wordcloud (sms_corpus_clean, min.freq = 50, random.order = FALSE)

Esto creará Una nube de palabras de nuestro corpus SMS preparado. Desde
especificamos random.order = FALSE, la nube será dispuesto en un orden aleatorio

[ 34 ]
con palabras de frecuencia más alta se coloca más cerca del centro. Si no se especifica
random.order, la nube estaría dispuesto al azar por defecto. El parámetro min.freq
especifica el número de veces que una palabra debe aparecer en el cuerpo antes de
que se mostrará en la nube. Desde una frecuencia de 50 es de aproximadamente 1
por ciento de la corpus, esto significa que una palabra se debe encontrar en al menos
1 por ciento de los mensajes SMS para ser incluido en la nube.

[ 35 ]
Capítulo 4

Usted puede obtener un mensaje de advertencia indicando que


R no fue capaz de adaptarse a todas las palabras en la figura. Si
es así, trate de aumentar min.freq para reducir el número de
palabras en la nube. También podría ayudar a utilizar el
parámetro de escala para reducir el tamaño de la fuente.

La palabra nube resultante debería ser similar a la siguiente figura:

Una visualización quizás más interesante consiste en comparar las nubes de


spam de SMS y jamón. Ya que no construimos corpus separado para spam y
jamón, este es un momento apropiado para señalar una característica muy útil
del wordcloud ()
función. Dado un vector de cadenas de texto en bruto, que se aplicará de forma
automática los procesos de preparación de texto comunes antes de mostrar la nube.

Vamos a usar R de subconjunto() función para tomar un subconjunto de la sms_raw


datos por parte del SMS
tipo. En primer lugar, vamos a crear un subgrupo en el que el tipo de

[ 36 ]
mensaje es spam:

> correo no deseado <- subconjunto (sms_raw, tipo == "spam")

[ 37 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

A continuación, vamos a hacer lo mismo para el subconjunto de jamón:


> jamón <- subconjunto (sms_raw, tipo == "jamón")

Tenga cuidado de tener en cuenta los iguales signo doble. Al


igual que muchos lenguajes de programación, R utiliza ==
para comprobar la igualdad. Si utiliza accidentalmente firma
una sola iguales, que va a terminar con un subconjunto mucho
más grande de lo que esperaba!

Ahora tenemos dos tramas de datos, correo no deseado y jamón, cada uno con
una característica de texto que contiene las cadenas de texto primas para mensajes
SMS. La creación de nubes de palabras es tan simple como antes. Esta vez, vamos
a utilizar el parámetro max.words mirar las 40 palabras más comunes en cada
uno de los dos conjuntos. El parámetro de escala nos permite ajustar el tamaño de
fuente mínimo y máximo para las palabras en la nube. Siéntase libre para ajustar
estos parámetros como mejor le parezca. Esto se ilustra en los siguientes
comandos:
> wordcloud (correo basura $ texto, max.words = 40, = escala C (3, 0,5))
> wordcloud (HAM $ texto, max.words = 40, = escala C (3, 0,5))

Las palabras nubes resultantes se muestran en el siguiente diagrama:

¿Tiene el presentimiento acerca de cuál es la nube de correo no deseado y que representa


el jamón?

Debido al proceso de aleatorización, cada palabra nube

[ 38 ]
puede ser ligeramente diferente. Ejecución de la función de
wordcloud () varias veces le permite elegir la nube que es el
atractivo visualmente más para fines de presentación.

[ 39 ]
Capítulo 4

Como habrá adivinado, la nube de correo no deseado está a la izquierda. Los


mensajes de spam incluyen palabras como urgente, libre, móvil, reclamo, y parar;
estos términos no aparecen en la nube de jamón en absoluto. En lugar de ello, los
mensajes de jamón utilizan palabras como lata, lo siento, la necesidad, y el tiempo.
Estas marcadas diferencias sugieren que nuestro modelo bayesiano tendrá unas
fuertes palabras clave para diferenciar entre las clases.

Preparación de datos - características


indicadoras para la creación de palabras
frecuentes
El paso final en el proceso de preparación de datos es transformar la matriz dispersa
en una estructura de datos que se puede utilizar para entrenar a un clasificador de
Bayes ingenuo. Actualmente, la matriz dispersa incluye más de 6.500 características;
esta es una característica para cada palabra que aparece en al menos un mensaje
SMS. Es poco probable que todos estos son útiles para la clasificación. Para reducir el
número de características, vamos a eliminar cualquier palabra que aparece en menos
de cinco mensajes SMS, o en menos de aproximadamente 0,1 por ciento de los
registros en los datos de entrenamiento.

Encontrar palabras frecuentes requiere el uso de la findFreqTerms () función en el


tm paquete. Esta función toma un DTM y devuelve un vector de
caracteres que contiene las palabras que aparecen por lo menos el
número de veces especificado. Por ejemplo, el siguiente comando
mostrará las palabras que aparecen al menos cinco veces en la
matriz sms_dtm_train:

> findFreqTerms (sms_dtm_train, 5)

El resultado de la función es un vector de caracteres, así que vamos a guardar


nuestras palabras frecuentes para más adelante:
> sms_freq_words <- findFreqTerms (sms_dtm_train, 5)

Un vistazo a los contenidos del vector nos muestra que hay 1.136 términos que aparecen
en al menos cinco mensajes SMS:
> str (sms_freq_words)
chr [1: 1136] "abiola" "ABL" "forum" "aceptar" el "acceso" "cuenta"
"a través de" "acto" "Activ" ...

Ahora tenemos que filtrar nuestra DTM para incluir sólo los términos que aparecen
en un vector especificado. Como se ha hecho antes, vamos a utilizar el estilo de
trama de datos [fila, columna] operaciones para solicitar porciones específicas del
DTM, y señaló que las columnas se nombran después de las palabras del DTM
contiene. Podemos tomar ventaja de esto para limitar el DTM a palabras específicas.

[ 40 ]
Como queremos que todas las filas, pero sólo las columnas que representan las
palabras que el vector sms_freq_words, nuestros comandos son:
> sms_dtm_freq_train <- sms_dtm_train [, sms_freq_words]
> sms_dtm_freq_test <- sms_dtm_test [, sms_freq_words]

[ 41 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

Los conjuntos de datos de entrenamiento y prueba ahora incluyen características 1.136,


que corresponden a
palabras que aparecen en al menos cinco mensajes.
El clasificador bayesiano se entrenó normalmente en los datos con características
categóricas. Esto plantea un problema, ya que las células en la matriz dispersa son
numéricos y miden el número de veces que una palabra aparece en un mensaje.
Tenemos que cambiar esto a una variable categórica que indica simplemente sí o
no dependiendo de si la palabra aparece en absoluto.

A continuación se definen una convert_counts () función para convertir a los


recuentos
Sí/No instrumentos de cuerda:

> convert_counts <- function (x) {


x <- ifelse (x> 0, "Sí", "No")
}

Por ahora, algunas de las piezas de la función anterior será familiar. La primera línea
define la función. El ifelse (x> 0, "Sí", "No") declaración transforma los valores de x,
de modo que si el valor es mayor que 0, entonces será reemplazado por "Sí", de lo
contrario, será reemplazado por un " Sin ataduras. Por último, se devuelve el vector x
recién transformado.
Ahora tenemos que aplicar convert_counts () para cada una de las columnas en
nuestra matriz dispersa. Usted puede ser capaz de adivinar la función R para
hacer exactamente esto. La función se llama simplemente aplica () y se utiliza
mucho como lapply () fue utilizado anteriormente.
La función de aplicación () permite una función para ser utilizado en cada una de
las filas o columnas de una matriz. Se utiliza un parámetro de margen para
especificar filas o columnas. Aquí, vamos a utilizar el margen = 2, ya que estamos
interesados en las columnas (margen = 1 se utiliza para las filas). Los comandos
para convertir la formación y matrices de prueba son los siguientes:
> sms_train <- aplicar (sms_dtm_freq_train, MARGEN = 2,
convert_counts)
> sms_test <- aplicar (sms_dtm_freq_test, MARGEN = 2,
convert_counts)

El resultado será dos matrices de tipos de caracteres, cada uno con células que
indican "Sí" o "No" para si la palabra representada por la columna aparece en
cualquier punto en el mensaje representado por la fila.

[ 42 ]
Capítulo 4

Paso 3 - la formación de un modelo sobre los


datos
Ahora que hemos transformado los mensajes SMS en bruto en un formato que puede
ser representado por un modelo estadístico, es el momento de aplicar el algoritmo
bayesiano. El algoritmo utilizará la presencia o ausencia de palabras para estimar la
probabilidad de que un mensaje SMS dado es correo no deseado.

La aplicación de Bayes ingenuo emplearemos está en el paquete e1071. Este


paquete fue desarrollado en el departamento de estadística de la Universidad
Tecnológica de Viena (TU Wien), e incluye una variedad de funciones de
aprendizaje automático.
Si no lo ha hecho, asegúrese de instalar y cargar el paquete utilizando la
install.packages ( "e1071") y biblioteca (e1071) los comandos antes de
continuar.

Muchos enfoques de aprendizaje automático se implementan en más


de un paquete de R, y Naive Bayes no es una excepción. Una otra
opción es NaiveBayes () en el paquete de Klar, que es casi idéntica a
la
uno en el paquete e1071. Siéntase libre de utilizar la opción que prefiera.

A diferencia del algoritmo K-NN se utilizó para la clasificación en el capítulo


anterior, un aprendiz bayesiano está entrenado y utilizado para la clasificación
en etapas separadas. Sin embargo, como se muestra en la siguiente tabla, estos
pasos son es bastante sencillo:

[ 43 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

Para construir nuestro modelo de la matriz sms_train, usaremos el siguiente comando:


> sms_classifier <- naiveBayes (sms_train, sms_train_labels)

los sms_classifier objeto contiene ahora una naiveBayes objeto clasificador que se
puede
utilizado para hacer predicciones.

Paso 4 - evaluar el rendimiento del modelo


Para evaluar el clasificador de SMS, que necesitamos para poner a prueba sus
predicciones sobre los mensajes que no se ven en los datos de prueba. Recordemos
que las funciones de mensajes no vistos se almacenan en una matriz denominada
sms_test, mientras que las etiquetas de clase (spam o jamón) se almacenan en un
vector llamado sms_test_labels. El clasificador que hemos entrenado ha sido
nombrado sms_classifier. Vamos a utilizar este clasificador para generar
predicciones y luego comparar los valores predichos a los valores reales.
La función de predecir () se utiliza para hacer las predicciones. Vamos a almacenar
estos en un vector llamado sms_test_pred. simplemente vamos a suministrar la
función con los nombres de nuestro clasificador y la prueba de conjunto de datos,
como se muestra:
> sms_test_pred <- predecir (sms_classifier, sms_test)

Para comparar las predicciones a los verdaderos valores, usaremos la función


cruzado () en el paquete gmodels, que hemos utilizado anteriormente. Esta vez,
vamos a añadir algunos parámetros adicionales para eliminar proporciones de
células innecesarias y utilizar el parámetro DNN (nombres de dimensión) volver a
etiquetar las filas y columnas, como se muestra en el siguiente código:
> biblioteca (gmodels)
> Cuadro cruzado (sms_test_pred,
sms_test_labels, prop.chisq = FALSE,
prop.t = FALSE,
DNN = C ( 'predicho', 'real'))

Esto produce la siguiente tabla:

[ 44 ]
Capítulo 4

En cuanto a la tabla, podemos ver que un total de sólo 6 + 30 = 36 de los mensajes


SMS 1.390 fueron clasificadas incorrectamente (2,6 por ciento). Entre los errores
eran 6 de 1.207 mensajes de jamón que se han identificado erróneamente como
correo no deseado, y 30 de los 183 mensajes de spam fueron etiquetados
incorrectamente como el jamón. Teniendo en cuenta el poco esfuerzo que
ponemos en el proyecto, este nivel de rendimiento parece bastante
impresionante. Este estudio de caso es un ejemplo de la razón por la Naive Bayes
es la norma para la clasificación de texto; directamente de la caja, se lleva a cabo
sorprendentemente bien.
Por otra parte, los seis mensajes legítimos que fueron clasificados
erróneamente como spam puede causar problemas significativos para el
despliegue de nuestro filtrado
algoritmo, debido a que el filtro podría causar que una persona pierda un mensaje de
texto importante. Debemos investigar para ver si podemos modificar ligeramente el
modelo para lograr un mejor rendimiento.

Paso 5 - mejorar el rendimiento del modelo


Usted puede haber notado que no hemos fijado un valor para el estimador de
Laplace, mientras que la formación de nuestro modelo. Esto permite que las
palabras que aparecían en cero spam o mensajes de jamón cero para tener un
ejemplo indiscutible en el proceso de clasificación. El hecho de que la palabra
"tono" sólo apareció en los mensajes de spam en los datos de entrenamiento, esto
no significa que cada mensaje con esta palabra debe ser clasificado como spam.
Vamos a construir un modelo bayesiano como se ha hecho anteriormente, pero esta vez
establecido Laplace = 1:
> sms_classifier2 <- naiveBayes (sms_train,
sms_train_labels, Laplace = 1)

A continuación, vamos a hacer predicciones:


> sms_test_pred2 <- predecir (sms_classifier2, sms_test)

Por último, vamos a comparar las clases previstas para las clasificaciones reales utilizando
una
tabulación cruzada:
> Cuadro cruzado (sms_test_pred2, sms_test_labels,
prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
DNN = c ( 'predicho', 'real'))

[ 45 ]
Probabilística de aprendizaje - Clasificación a partir de Naive Bayes

Esto se traduce en la siguiente tabla:

Añadiendo el estimador de Laplace reducido el número de falsos positivos


(mensajes de jamón erróneamente clasificados como correo no deseado) de seis a
cinco y el número de falsos negativos de 30 a 28. Aunque esto parece un pequeño
cambio, es importante teniendo en cuenta que la exactitud del modelo ya estaba
muy impresionante. Tendríamos que tener cuidado antes de ajustar el modelo
demasiado con el fin de mantener el equilibrio entre ser demasiado agresivo y
excesivamente pasiva, mientras que el filtrado de correo no deseado. Los usuarios
preferirían que un pequeño número de mensajes de spam deslizarse a través del
filtro de una alternativa en la que los mensajes de jamón se filtran de forma
demasiado agresiva.

Resumen
En este capítulo, hemos aprendido acerca de clasificación utilizando Bayes naive.
Este algoritmo construye tablas de probabilidades que se utilizan para estimar la
probabilidad de que los nuevos ejemplos pertenecen a diferentes clases. Las
probabilidades se calculan utilizando una fórmula conocida como el teorema de
Bayes, que especifica cómo se relacionan eventos dependientes.
Aunque el teorema de Bayes puede ser costoso computacionalmente, una versión
simplificada que hace la llamada hipótesis 'ingenuas' sobre la independencia de las
características es capaz de manejar datos extremadamente grandes.
El clasificador bayesiano se utiliza a menudo para la clasificación de texto. Para
ilustrar su eficacia, se empleó Naive Bayes en una tarea que implica la clasificación
de mensajes SMS de mensajes basura. Preparación de los datos de texto para el
análisis requiere el uso de paquetes R especializados para el procesamiento de
texto y visualización. En última instancia, el modelo fue capaz de clasificar a más
del 97 por ciento de todos los mensajes SMS correctamente como correo no
deseado o jamón.

[ 46 ]
En el siguiente capítulo, examinaremos otros dos métodos de aprendizaje automático.
Cada
realiza la clasificación mediante la partición de datos en grupos de valores similares.

[ 47 ]
Divide y conquistaras -
Clasificación a partir de la
Decisión
árboles y Reglas
Al decidir entre varias ofertas de trabajo con varios niveles de remuneración y
beneficios, muchas personas comienzan por hacer listas de pros y contras, y
eliminan las opciones basadas en reglas simples. Por ejemplo, '' si tengo que viajar
durante más de una hora, estaré
infeliz. '' O '' si hago menos de $ 50k, no será capaz de mantener a mi familia. '' De
esta manera, la decisión compleja y difícil de predecir la propia felicidad futura
puede reducirse a una serie de decisiones simples.
Este capítulo trata sobre los árboles de decisión y los alumnos-dos reglas métodos
de aprendizaje automático, que también toman decisiones complejas a partir de
conjuntos de opciones simples. Estos métodos a continuación, presentan su
conocimiento en forma de estructuras lógicas que se pueden entender sin
conocimiento estadístico. Este aspecto hace que estos modelos particularmente
útiles para la estrategia de negocio y la mejora del proceso.
Al final de este capítulo, usted aprenderá:

• Cómo los árboles y reglas "avidez" partición de datos en segmentos más


interesantes
• Los aprendices de árboles de decisión y de las reglas de clasificación más
comunes, incluyendo el C5.0, 1R, y los algoritmos RIPPER
• Cómo utilizar estos algoritmos para llevar a cabo las tareas de clasificación

[ 48 ]
del mundo real, tales como la identificación de los préstamos bancarios
riesgosos y hongos venenosos

Vamos a empezar por examinar los árboles de decisión, seguido de un vistazo a las
reglas de clasificación. A continuación, vamos a resumir lo que hemos aprendido
mediante la previsualización de los últimos capítulos, que discuten los métodos que
utilizan los árboles y las reglas de base para las técnicas de aprendizaje de máquina
más avanzada.

[ 49 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

La comprensión de los árboles de decisión


alumnos de árboles de decisión son clasificadores de gran alcance, que utilizan una
estructura de árbol para modelar las relaciones entre las características y los
resultados potenciales. Como se ilustra en la siguiente figura, esta estructura se ganó
su nombre debido al hecho de que refleja cómo un árbol literal comienza en una
amplia tronco, que si se siguen al alza, se divide en ramas cada vez más estrechos. De
la misma manera, un clasificador de árbol de decisión utiliza una estructura de
ramificación de las decisiones, que ejemplos canal en un valor de clase predicho
final.
Para entender mejor cómo funciona esto en la práctica, consideremos el siguiente
árbol, que predice si una oferta de trabajo debe ser aceptado. Una oferta de trabajo
para ser considerado comienza en el nodo raíz, donde se pasa luego a través de
nodos de decisión que requieren decisiones que deben tomarse en base a los
atributos del trabajo. Estas opciones se separaron los datos a través de las ramas que
indican los posibles resultados de una decisión, representados aquí como sí o no los
resultados, aunque en algunos casos puede haber más de dos posibilidades.
En el caso de una decisión definitiva se puede hacer, el árbol es terminada por nodos
hoja (también conocidos como nodos terminales) que denotan la acción que se tomará
como el resultado de la serie de decisiones. En el caso de un modelo predictivo, los
nodos de hoja proporcionan el resultado esperado dada la serie de eventos en el
árbol.

[ 50 ]
Capítulo 5

Una gran ventaja de los algoritmos de árbol de decisión es que la estructura de árbol
diagrama de flujo similar no es necesariamente exclusivamente para uso interno del
aprendiz. Después de que el modelo se crea, muchos algoritmos de árboles de decisión de
salida de la estructura resultante en un formato legible por humanos.
Esto proporciona tremenda visión de cómo y por qué el modelo funciona o no
funciona bien para una tarea en particular. Esto también hace que los árboles de
decisión particularmente apropiado para aplicaciones en las que el mecanismo de
clasificación debe ser transparente por razones legales, o en caso de que los
resultados deben ser compartidos con los demás con el fin de informar a las
prácticas de negocio futuro. Con esto en mente, algunos de los usos potenciales
incluyen:
• modelos de calificación de crédito en el que los criterios que causa un
solicitante de ser rechazada necesidad de estar claramente
documentados y libre de prejuicios
• estudios de marketing de comportamiento de los clientes, tales como la
satisfacción o la rotación, que será compartido con los organismos de
gestión o publicitarios
• El diagnóstico de condiciones médicas basadas en mediciones de
laboratorio, síntomas, o la tasa de progresión de la enfermedad
Aunque las aplicaciones anteriores ilustran el valor de los árboles en informar a los
procesos de decisión, esto no quiere decir que su utilidad termina aquí. De hecho, los
árboles de decisión son quizás la técnica de aprendizaje de máquina individual más
ampliamente utilizado, y se pueden aplicar para modelar casi cualquier tipo de
datos, a menudo con excelentes aplicaciones fuera de la caja.
Dicho esto, a pesar de su amplia aplicabilidad, vale la pena señalar algunos de los
escenarios donde los árboles pueden no ser un ajuste ideal. Uno de estos casos
podría ser una tarea en la que los datos tienen un gran número de características
nominales con muchos niveles, o tiene un gran número de funciones numéricas.
Estos casos pueden dar lugar a un gran número de decisiones y un árbol
excesivamente complejo. También pueden contribuir a la tendencia de los árboles
de decisión a overfit de datos, aunque como veremos a continuación, aunque esta
debilidad puede superarse mediante el ajuste de algunos parámetros simples.

Divide y conquistaras
Los árboles de decisión se construyen utilizando una heurística denominada
partición recursiva. Este enfoque también se conoce comúnmente como dividir y
conquistar, ya que divide los datos en subconjuntos, que a su vez se dividen en
varias ocasiones en subconjuntos más pequeños, y así sucesivamente y
así sucesivamente hasta que el proceso se detiene cuando el algoritmo determina los

[ 51 ]
datos dentro del
subconjuntos son suficientemente homogénea, u otro criterio de parada se ha cumplido.
Para ver cómo dividir un conjunto de datos puede crear un árbol de decisión,
imaginar un nodo raíz desnuda que crecerá en un árbol maduro. Al principio, el
nodo raíz representa todo el conjunto de datos, ya que ninguna división ha ocurrido.
A continuación, el algoritmo de árbol de decisión debe elegir una función para
dividir a; Idealmente, se elige la característica más predictivo de la clase de destino.
Los ejemplos son entonces divididos en grupos de acuerdo a los valores distintos de
esta característica, y se forman el primer conjunto de ramas de árboles.

[ 52 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Dirigiéndose hacia abajo cada rama, el algoritmo continúa a dividir y conquistar a


los datos, la elección de la mejor característica candidato cada vez para crear otro
nodo de decisión, hasta que se alcanza un criterio de parada. Divide y vencerás
podría parar en un nodo en un caso que:

• Todos (o casi todos) de los ejemplos en el nodo de tener la misma clase


• No hay características restantes para distinguir entre los ejemplos
• El árbol ha crecido hasta un límite de tamaño predefinido
Para ilustrar el proceso de construcción del árbol, vamos a considerar un ejemplo
sencillo. Imagine que usted trabaja para un estudio de Hollywood, donde su papel
es el de decidir si el estudio debe seguir adelante con la producción de los guiones
de tono con la promesa de nuevos autores. Después de regresar de unas
vacaciones, su escritorio se llena arriba con propuestas.
Sin el tiempo para leer cada propuesta de tapa a tapa, decide desarrollar un
algoritmo de árbol de decisión para predecir si una película potencial sería caer en
una de tres categorías: Críticos de Éxito, golpeó la corriente principal, o el busto
de taquilla.
Para construir el árbol de decisión, a su vez a los archivos de estudio para
examinar los factores que conducen al éxito y el fracaso de 30 lanzamientos más
recientes de la compañía. Usted notará rápidamente una relación entre el
presupuesto estimado de tiro de la película, el número de una lista de
celebridades en fila para papeles protagonistas, y el nivel de éxito.
Emocionados con este hallazgo, se produce un diagrama de dispersión para
ilustrar el patrón:

[ 53 ]
Capítulo 5

El uso de la estrategia de divide y vencerás, podemos construir un árbol de decisión


simple a partir de estos datos. En primer lugar, para crear nodo de la raíz del árbol,
dividimos la función que indica el número de celebridades, la partición de las
películas en grupos con y sin un número significativo de estrellas de la lista A:

A continuación, entre el grupo de películas con un mayor número de celebridades,


podemos hacer otra división entre las películas con y sin un alto presupuesto:

[ 54 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

En este punto, hemos dividido los datos en tres grupos. El grupo de la


esquina superior izquierda del diagrama se compone enteramente de películas
aclamados. Este grupo se caracteriza por un alto número de celebridades y un
presupuesto relativamente bajo. En la esquina superior derecha, la mayoría de las
películas son éxitos de taquilla con altos presupuestos y un gran número de
celebridades. El último grupo, que tiene poco poder de estrella pero los presupuestos
que van desde pequeñas a grandes, contiene los fracasos.
Si quisiéramos, podríamos seguir para dividir y conquistar los datos mediante su
división basada en los rangos cada vez más específicos de presupuesto y el
recuento de las celebridades, hasta que cada uno de los valores actualmente mal
clasificados reside en su propia partición pequeña, y se clasifica correctamente.
Sin embargo, no es aconsejable overfit un árbol de decisión de esta manera.
Aunque
ahí hay nada que nos impida dividir los datos de forma indefinida, excesivamente
decisiones específicas no siempre se generalizan de manera más amplia. Vamos a
evitar el problema de sobreajuste al detener el algoritmo aquí, ya que más del 80 por
ciento de los ejemplos de cada grupo son de una sola clase. Esto forma la base de
nuestro criterio de parada.

Usted puede haber notado que las líneas diagonales podrían haber
dividido los datos, incluso de forma más limpia. Esta es una limitación
de la representación del conocimiento del árbol de decisión, que utiliza
divisiones paralelas al eje. El hecho de que cada división se considera
una característica a la vez evita que el árbol de decisión que se formen
límites de decisión más complejas. Por ejemplo, una línea diagonal
podría ser creado por una decisión que le pregunta: "es el número de
celebridades es mayor que el presupuesto estimado?" Si es así, entonces
"va a ser un éxito de crítica."

Nuestro modelo para predecir el futuro éxito de las películas se puede representar
en un árbol sencillo, como se muestra en el siguiente diagrama. Para evaluar una
secuencia de comandos, siga las ramas a través de cada decisión hasta que el éxito o
el fracaso de la secuencia de comandos ha sido predicho. En poco tiempo, usted será
capaz de identificar las opciones más prometedoras entre la acumulación de
secuencias de comandos y volver al trabajo más importantes, tales como escribir un
discurso de aceptación premios de la Academia.

[ 55 ]
Capítulo 5

Puesto que los datos del mundo real contiene más de dos características, árboles
de decisión se convierten rápidamente en mucho más complejo que esto, con
muchos más nodos, ramas y hojas. En la siguiente sección, usted aprenderá acerca
de un algoritmo popular para construir modelos de árboles de decisión de forma
automática.

El algoritmo de árbol de decisión C5.0


Existen numerosas implementaciones de árboles de decisión, pero una de las más
implementaciones bien conocido es el algoritmo C5.0. Este algoritmo fue
desarrollado por el informático J. Ross Quinlan como una versión mejorada de su
algoritmo anterior, C4.5, que en sí es una mejora sobre su iterativo Dichotomiser 3
(ID3) algoritmo. Aunque Quinlan comercializa C5.0 a clientes comerciales
(véasehttp: // www. rulequest.com/ para más detalles), se hizo públicamente
disponible el código fuente de una versión de un solo subproceso del algoritmo, y
por lo tanto se ha incorporado en los programas tales como R.

[ 56 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Para confundir aún más las cosas, una basada en Java de código abierto
muy popular alternativa a C4.5, titulado J48, se incluye en el paquete
de R RWeka.
Debido a las diferencias entre C5.0, C4.5 y J48 son menores, la
principios de este capítulo se aplicarán a cualquiera de estos tres métodos,
y los algoritmos deben ser considerados sinónimos.

El algoritmo C5.0 se ha convertido en el estándar de la industria para producir


árboles de decisión, ya que hace bien para la mayoría de tipos de problemas
directamente fuera de la caja. En comparación con otros modelos de aprendizaje
automático avanzadas, tales como los descritos en el capítulo 7, Métodos Box Negro
- redes neuronales y máquinas de vectores soporte, los árboles de decisión C5.0
construidas por lo general realizan casi tan bien, pero son mucho más fáciles de
entender y utilizar. Además, como se muestra en la siguiente tabla, las debilidades
del algoritmo son relativamente menores y pueden ser en gran medida evitarse:

fortalezas debilidades
• Un clasificador para todo uso que le • modelos de árboles de decisión
va bien en la mayoría de los son a menudo sesgadas hacia
problemas las divisiones de las
• Altamente proceso de aprendizaje características que tienen un
automático, que puede manejar gran número de niveles
funciones numéricas o nominales, así • Es fácil overfit o underfit el
como los datos que faltan modelo
• Se excluyen las funciones sin • Puede tener problemas para
importancia modelar algunas relaciones
• Puede ser utilizado en pequeñas y debido a la dependencia de las
grandes conjuntos de datos divisiones paralelas al eje
• Pequeños cambios en los datos de
• Los resultados en un modelo que se
entrenamiento pueden dar lugar
pueden interpretar sin una formación
matemática (por árboles a grandes cambios en la lógica de
relativamente pequeños) decisión

• Más eficiente que otros modelos • Los árboles grandes pueden ser
complejos difíciles de interpretar y las
decisiones que toman pueden
parecer contradictorio

Para simplificar las cosas, nuestro ejemplo de árbol de decisión anterior ignoró
las matemáticas involucradas en cómo una máquina podría emplear una
estrategia de divide y vencerás. Vamos a explorar esto con más detalle a
examinar cómo esta heurística funciona en la práctica.

[ 57 ]
Capítulo 5

La elección de la mejor división


El primer reto al que se enfrentará a un árbol de decisión es identificar qué función
dividir al. En el ejemplo anterior, buscamos una manera de dividir los datos de tal
manera que las particiones resultantes contenían ejemplos principalmente de una
sola clase. El grado en que un subconjunto de ejemplos contiene solamente una
única clase se conoce como pureza, y cualquier subconjunto compuesto por sólo
una única clase se llama pura.
Hay varias medidas de la pureza que se pueden utilizar para identificar el mejor
candidato división árbol de decisión. C5.0 utiliza entropía, un concepto tomado de
teoría de la información que cuantifica la aleatoriedad o desorden, dentro de un
conjunto de valores de clase. Establece con alta entropía son muy diversos y
proporcionan poca información sobre otros elementos que pueden pertenecer
también en el conjunto, ya que no hay uniformidad aparente.
Las esperanzas de árboles de decisión para encontrar divisiones que reducen la entropía,
en última instancia, el aumento
homogeneidad dentro de los grupos.
Típicamente, la entropía se mide en bits. Si sólo hay dos clases posibles, valores de
entropía puede variar de 0 a 1. Para las clases de N, entropía varía de 0 a log2 (n). En
cada caso, el valor mínimo indica que la muestra está completamente homogéneo,
mientras que el valor máximo indica que los datos son tan diversos como sea
posible, y ningún grupo tiene incluso una pequeña pluralidad.

En la noción matemática, la entropía se especifica de la siguiente manera:

En esta fórmula, para un segmento dado de datos (S), el término c se refiere al número
de niveles de clase y pi se refiere a la proporción de valores que caen en i nivel de
clase. Por ejemplo, supongamos que tenemos una partición de datos con dos clases:
rojo (60 por ciento) y blanco (40 por ciento). Podemos calcular la entropía de la
siguiente manera:
> -0,60 * log2 (0,60) - 0,40 * log2
(0,40) [1] 0.9709506

Podemos examinar la entropía para todos los posibles arreglos de dos clases. Si
sabemos que la proporción de ejemplos de una clase es x, entonces la proporción en
la otra clase es (1 - x). Utilizando la función de curva (), que puede entonces trazar la
entropía para todos los posibles valores de x:
> Curva (-x * log2 (x) - (1 - x) * log2 (1 - x),

[ 58 ]
col = "red", xlab = "x", ylab = "Entropy", lwd = 4)

[ 59 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Esto se traduce en la siguiente figura:

Como se ilustra por el pico de la entropía en x = 0,50, un 50-50 resultados split en la


entropía máxima. Como una clase domina cada vez más la otra, la entropía se
reduce a cero.

Para utilizar la entropía para determinar la característica óptima para dividir a, el


algoritmo calcula el cambio en la homogeneidad que resultaría de una división en
cada característica posible, que es una medida conocida como ganancia de
información. La ganancia de información para una característica F se calcula como
la diferencia entre la entropía en el segmento antes de la división (S1) y las
particiones que resultan de la división (S2):

Una complicación es que después de una división, los datos se divide en más de una
partición. Por lo tanto, la función para calcular la entropía (S2) debe tener en cuenta la
entropía total en todas las particiones. Esto se logra mediante un peso de entropía de
cada partición por la proporción de registros que caen en la partición. Esto puede
formularse en una fórmula como:

En términos simples, la entropía total resultante de una división es la suma de la


entropía de cada uno de los n particiones ponderados por la proporción de
ejemplos que caen en la partición (wi).
Cuanto mayor sea la ganancia de información, mejor es una característica a la
creación de grupos homogéneos después de una división sobre esta función. Si la
ganancia de información es cero, no hay una reducción de la entropía para la
división sobre esta función. Por otra parte, la ganancia máxima información es

[ 60 ]
igual a la entropía antes de la división. Esto implicaría que la entropía después de
la división es cero, lo que significa que los resultados de división en grupos
completamente homogéneos.

[ 61 ]
Capítulo 5

Las fórmulas anteriores asumen características nominales, pero los árboles de


decisión utilizan ganancia de información para la división de funciones numéricas
también. Para ello, una práctica común es poner a prueba varias divisiones que
dividen los valores en los grupos de mayor o menor que un umbral numérico. Esto
reduce la función de numérico en una característica categórica de dos niveles que
permite ganancia de información a ser calculado como de costumbre. El punto de
corte numérico produciendo la mayor ganancia de información se elige para la
división.

A pesar de que es utilizado por C5.0, ganancia de información no


es el único criterio de reparto que se puede utilizar para construir
árboles de decisión. Otros criterios utilizados comúnmente son
índice de Gini, estadística Chi-cuadrado, y la relación de ganancia.
Para una revisión de estos (y muchos más) criterios, consulte
Mingers J.
Una comparación empírica de Medidas de selección para la toma de árbol de
inducción. Aprendizaje automático. 1989; 3: 319-342.

La poda del árbol de decisión


Un árbol de decisión puede seguir creciendo indefinidamente, la elección de
funciones de división y división de los datos en particiones más pequeñas hasta cada
ejemplo es perfectamente clasificada o el algoritmo se queda sin funciones para
dividir sucesivamente. Sin embargo, si el árbol crece demasiado grande, muchas de
las decisiones que tome va a ser demasiado específico y el modelo se overfitted a los
datos de entrenamiento. El proceso de la poda de un árbol de decisión implica la
reducción de su tamaño tal que generaliza mejor a los datos no se ve.
Una solución a este problema es detener el árbol de crecer una vez que se llega a un
cierto número de decisiones o cuando los nodos de decisión contienen sólo un
pequeño número de ejemplos. Esto se llama interrupción temprana o pre-poda del
árbol de decisión. A medida que el árbol evita hacer trabajo innecesario, esta es una
estrategia atractiva. Sin embargo, una desventaja de este enfoque es que no hay
manera de saber si el árbol se perderá sutil, pero los patrones importantes que habría
aprendido que había crecido a un tamaño mayor.
Una alternativa, llamada post-poda, implica el crecimiento de un árbol que es
intencionalmente demasiado grandes y de la hoja de poda nodos para reducir el
tamaño del árbol a un nivel más apropiado. Esto es a menudo un enfoque más
eficaz que antes de la poda, ya que es muy difícil determinar la profundidad
óptima de un árbol de decisión sin crecer en primer lugar.
La poda del árbol más adelante permite que el algoritmo para tener la certeza de que
todas las estructuras de datos importantes fueron descubiertos.

[ 62 ]
Los detalles de implementación de las operaciones de poda son muy
técnicos y más allá del alcance de este libro. Para una comparación de
algunos de los disponibles
métodos, consulte Esposito F, Malerba D, Semeraro G. Análisis comparativo
de Métodos para la poda de árboles de decisión. IEEE Transactions on Pattern
El análisis y la inteligencia de máquina. 1997; 19: 476-491.

[ 63 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Una de las ventajas del algoritmo C5.0 es que está obstinado sobre podar árboles
que se encarga de muchas decisiones automáticamente utilizando valores por
defecto bastante razonables. Su estrategia general es posterior a podar el árbol. En
primer lugar, crece un árbol grande que la overfits
datos de entrenamiento. Más tarde, los nodos y ramas que tienen poco efecto sobre
los errores de clasificación se eliminan. En algunos casos, ramas enteras se mueven
más arriba en el árbol o sustituidas por las decisiones más simples. Estos procesos de
ramas de injerto son conocidos como crianza subárbol y sustitución subárbol,
respectivamente.
Equilibrio sobreajuste y underfitting un árbol de decisión es un poco de un arte,
pero si la exactitud del modelo es vital, puede valer la pena invertir algo de tiempo
con varias opciones de poda para ver si mejora el rendimiento en datos de pruebas.
Como pronto veremos, uno de los puntos fuertes del algoritmo C5.0 es que es muy
fácil de ajustar las opciones de formación.

Ejemplo - la identificación de los


préstamos bancarios riesgosos
utilizando árboles de decisión C5.0
La crisis financiera mundial de 2007-2008 puso de relieve la importancia de la
transparencia y el rigor en las prácticas bancarias. A medida que la disponibilidad
de crédito era limitada, los bancos se apretaron sus sistemas de crédito y se volvió
hacia el aprendizaje automático para identificar con mayor precisión los préstamos
arriesgados.
Los árboles de decisión son ampliamente utilizados en la industria bancaria, debido
a su alta precisión y la capacidad de formular un modelo estadístico en un lenguaje
sencillo. Dado que las organizaciones gubernamentales en muchos países vigilan
cuidadosamente las prácticas de préstamos, los ejecutivos deben ser capaces de
explicar por qué un solicitante fue rechazado para un préstamo, mientras que los
demás fueron aprobados. Esta información también es útil para los clientes que
esperan para determinar por qué su calificación de crédito no es satisfactoria.
Es probable que los modelos automatizados de calificación de crédito se emplean
para aprobar de inmediato las solicitudes de crédito en el teléfono y la web. En esta
sección, vamos a desarrollar un modelo simple de la aprobación del crédito usando
árboles de decisión C5.0. También vamos a ver cómo los resultados del modelo
pueden ajustarse para minimizar los errores que resultan en una pérdida financiera
para la institución.

[ 64 ]
Paso 1 - recogida de datos
La idea detrás de nuestro modelo de crédito es identificar los factores que son
predictivos de un mayor riesgo de incumplimiento. Por lo tanto, es necesario obtener
datos sobre un gran número de préstamos bancarios anteriores y si el préstamo entró
en default, así como información sobre el solicitante.

[ 65 ]
Capítulo 5

Los datos de estas características está disponible en un conjunto de datos donado a la


UCI Machine Learning datos del repositorio (http://archive.ics.uci.edu/ml)
Por Hans Hofmann de la Universidad de Hamburgo. El conjunto de datos contiene
información sobre los préstamos obtenidos de una agencia de crédito en Alemania.

El conjunto de datos presentados en este capítulo se ha modificado


ligeramente del original con el fin de eliminar algunos pasos de
preprocesamiento. Para seguir junto con los ejemplos, descargue el
archivo desde el sitio web credit.csv editorial Packt y guardarlo en su
directorio de trabajo R.

El conjunto de datos de crédito incluye 1.000 ejemplos de los préstamos, además


de un conjunto de funciones numéricas y nominales que indican las
características del préstamo y el solicitante del préstamo. Una variable de clase
indica si el préstamo entró en default. Vamos a ver si podemos determinar
cualquier patrón que predicen este resultado.

Paso 2 - exploración y la preparación de los


datos
Como lo hicimos anteriormente, vamos a importar los datos utilizando la función
read.csv (). Vamos a omitir la opción stringsAsFactors y, por tanto, utilizar el valor
predeterminado es TRUE, ya que la mayoría de las características de los datos son
nominales:
> crédito <- read.csv ( "credit.csv")

Las primeras líneas de salida de la función str () son los siguientes:


> str (de crédito)
'Data.frame': 1000 obs. of17 variables:
$ Checking_balance: Factor w / 4 niveles "<0 DM", "> 200 DM", ..
$ Months_loan_duration: INT6 48 12 ...
PS credit_history: Factor w / 5 niveles "Crítico", "bueno", ..
PS Propósito: Factor w / 6 niveles "Business", "coche", ..
PS cantidad: int1169 5951 2096 ...

Vemos los esperados 1.000 observaciones y 17 características, que son una


combinación de tipos de datos de los factores y enteros.
Vamos a echar un vistazo a la salida de la tabla () para un par de características del
préstamo que parecen propensos a predecir un valor predeterminado. balance de
cuenta de cheques y ahorro del solicitante se registran como variables categóricas:

[ 66 ]
> mesa (crédito $ checking_balance)
<0 DM> 200 DM 1 - 200 DMunknown

[ 67 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

27463269394
> mesa (crédito $ savings_balance)
<100 DM> 1000 DM100 - 500 DM 500 - 1000 DM
desconocido
6034810363 183

El balance de cheques y de ahorros de la cuenta puede llegar a ser importantes


predictores de estado de morosidad. Tenga en cuenta que, dado que se obtuvieron
los datos de préstamos de Alemania, la moneda se registra en marcos alemanes
(DM).
Algunas de las características del préstamo son numéricas, tales como su
duración y la cantidad de crédito solicitada:
> Resumen (crédito $ months_loan_duration)
Min. primeroQu. Media Qu Max.
Median tercera
a .
4.012.0 20.9 24.0 72.0
18.0
> Resumen ($ cantidad de crédito)
Min. primeroQu.MedianMean
tercero Qu. Max. 2501366232032713972
18420

Las cantidades de préstamo variaron de 250 DM a 18.420 DM a través de términos


de 4 a 72 meses con una duración mediana de 18 meses y una cantidad de 2.320
DM.
El vector predeterminado indica si el solicitante del préstamo no fue capaz de
cumplir con las condiciones de pago acordadas y entró en default. Un total de 30
por ciento de los préstamos en este conjunto de datos entró en default:
>mesa ($ de crédito por
defecto) no si
700 300

Una alta tasa de incumplimiento es indeseable para un banco, ya que significa que el
banco es probable que se recupere totalmente su inversión. Si tenemos éxito, nuestro
modelo será identificar a los solicitantes que están en alto riesgo de defecto, lo que
permite al banco para rechazar las solicitudes de crédito.

Preparación de datos - la creación de la


formación al azar y prueba de datos

[ 68 ]
Como lo hemos hecho en los capítulos anteriores, vamos a dividir los datos en dos
partes: un conjunto de datos de entrenamiento para construir el árbol de decisión y
un conjunto de datos de prueba para evaluar el desempeño del modelo en nuevos
datos. Vamos a utilizar el 90 por ciento de los datos para la formación y el 10 por
ciento para las pruebas, lo que nos proporcionará 100 registros para simular los
nuevos solicitantes.

[ 69 ]
Capítulo 5

Como capítulos anteriores utilizan los datos que habían sido ordenados en un orden
aleatorio, simplemente dividido el conjunto de datos en dos porciones, teniendo la
primera 90 por ciento de los registros para la formación, y el restante 10 por ciento
para las pruebas. En contraste, el conjunto de datos de crédito no se ordena al azar,
haciendo que el imprudente enfoque anterior. Supongamos que el banco había
ordenado los datos por parte del monto del préstamo, con los préstamos más
grandes en el final del archivo. Si utilizamos el primer 90 por ciento para la
formación y el restante 10 por ciento para las pruebas, que sería la formación de un
modelo sobre sólo los pequeños préstamos y probar el modelo de los grandes
préstamos. Obviamente, esto podría ser problemático.
Vamos a resolver este problema mediante el uso de una muestra aleatoria de los
datos de crédito para la formación. Una muestra aleatoria es simplemente un proceso
que selecciona un subconjunto de registros al azar. En R, la función de ejemplo () se
utiliza para realizar muestreo aleatorio. Sin embargo, antes de poner en acción, una
práctica común consiste en establecer un valor de semilla, que hace que el proceso de
aleatorización para seguir una secuencia que puede ser replicado más tarde si se
desea. Puede parecer que esto contradice el objetivo de generar números aleatorios,
pero hay una buena razón para hacerlo de esta manera. Proporcionar un valor de
inicialización a través de la función set.seed () asegura que si el análisis se repite en el
futuro, se obtiene un resultado idéntico.

Usted puede preguntarse cómo un proceso llamado aleatoria se


puede sembrar para producir un resultado idéntico. Esto se debe al
hecho de que los equipos utilizan una función matemática llamada un
generador de números pseudoaleatorios para crear secuencias de
números aleatorios que parecen actuar de manera muy aleatoria, pero
son en realidad bastante predecible conocimiento dado de los valores
anteriores en la secuencia. En la práctica, modernas secuencias de
números pseudoaleatorios son prácticamente indistinguibles de
secuencias aleatorias verdaderas, pero tienen la ventaja de que los
ordenadores pueden generar de forma rápida y fácil.

Los siguientes comandos utilizan la función de ejemplo () para seleccionar 900


valores al azar fuera de la secuencia de números enteros de 1 a 1000. Tenga en
cuenta que la función set.seed () utiliza el valor arbitrario 123. La omisión de esta
semilla hará que su formación y las pruebas dividir a diferir de los mostrados en el
resto de este capítulo:
> set.seed (123)
> train_sample <- muestra (1000, 900)

Como era de esperar, el objeto train_sample resultante es un vector de 900 enteros


aleatorios:

[ 70 ]
> str (train_sample)
int [1: 900] 788 409 881 288 937 46 525 887 548 453 ...

[ 71 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Mediante el uso de este vector para seleccionar las filas de los datos de crédito,
podemos dividirlo en la formación del 90 por ciento y 10 por ciento de prueba
de datos que se desea. Recordemos que el tablero
operador que se utiliza en la selección de los registros de prueba dice R para
seleccionar registros que no están en las filas especificadas; en otras palabras, los
datos de prueba incluye sólo las filas que no están en la muestra de entrenamiento.
> credit_train <- crédito [train_sample,]
> credit_test <- de crédito [-train_sample, ]

Si todo va bien, deberíamos tener un 30 por ciento de los préstamos en mora


en cada uno de los conjuntos de datos:
> prop.table (tabla (credit_train $
defecto)) no si
0.7033333 0.2966667

> prop.table (tabla (credit_test $


defecto)) no si
0,67 0,33

Esto parece ser una división bastante uniforme, por lo que ahora puede construir nuestro
árbol de decisión.

Si los resultados no coinciden exactamente, asegúrese de


que ha ejecutado el comando set.seed (123) inmediatamente
antes de crear el vector train_sample.

Paso 3 - la formación de un modelo sobre los


datos
Vamos a utilizar el algoritmo C5.0 en el paquete de C50 a entrenar a nuestro modelo de
árbol de decisión.
Si no lo ha hecho, instale el paquete con install.packages ( "C50")
y cargarlo a su sesión de R, usando biblioteca (C50).
El siguiente cuadro de sintaxis se enumeran algunos de los comandos más utilizados
para construir árboles de decisión. En comparación con los enfoques de aprendizaje
de máquina que utilizamos anteriormente, el algoritmo C5.0 ofrece muchas más
formas de adaptar el modelo a un problema de aprendizaje en particular, sino más
opciones están disponibles. Una vez que el paquete de C50 se ha cargado,
el comando? C5.0Control muestra la página de ayuda para obtener más detalles sobre

[ 72 ]
cómo
finamente ajustar el algoritmo.

[ 73 ]
Capítulo 5

Para la primera iteración de nuestro modelo de aprobación del crédito, vamos a


utilizar la configuración por defecto C5.0, como se muestra en el siguiente código. La
columna 17 en credit_train es la variable de clase por defecto, por lo que necesitamos
para excluirlo de la trama de datos de entrenamiento, pero suministrarla como el
vector de factor de selección para la clasificación:
> credit_model <- C5.0 (credit_train [-17], credit_train por defecto $)

El objeto credit_model ahora contiene un árbol de decisión C5.0. Podemos ver


algunos datos básicos sobre el árbol escribiendo su nombre:
> credit_model

Llamada:
C5.0.default (x = credit_train [-17], y = credit_train $ default)

Árbol de
clasificación Número
de muestras: 900

[ 74 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Número de predictores:

tamaño 16 del árbol: 57

Opciones no estándar: intento de atributos de grupo

El texto anterior muestra algunos hechos simples sobre el árbol, incluyendo la


llamada de función que lo ha generado, el número de características (predictores
marcado), y los ejemplos (muestras marcadas) que se utiliza para hacer crecer el
árbol. Además se especifica el tamaño de los árboles de 57, lo que indica que el
árbol es de 57 decisiones profundas un poco más grande que los árboles ejemplo
que hemos considerado hasta ahora!
Para ver las decisiones de los árboles, podemos llamar a la función resumen () en el
modelo:
> Resumen (credit_model)

Esto resulta en la salida siguiente:

El resultado anterior muestra algunas de las primeras ramas en el árbol de decisión. El


primero
tres líneas podrían ser representados en un lenguaje sencillo como:
1. Si el saldo de la cuenta de cheques es desconocida o superior a 200 DM,
entonces clasificar como "no es probable que por defecto".
2. De lo contrario, si el saldo de la cuenta de cheques es menor que cero DM
o entre uno y 200 DM.

[ 75 ]
3. Y el historial de crédito es perfecto o muy bueno, entonces clasifican
como "probable que por defecto".

[ 76 ]
Capítulo 5

Los números entre paréntesis indican el número de ejemplos que satisfacen los
criterios de esa decisión, y el número incorrectamente clasificadas por la decisión. Por
ejemplo, en la primera línea, 412/50 indica que de los 412 ejemplos de llegar a la
decisión, 50 se clasificaron incorrectamente como no probable que por defecto. En
otras palabras, 50 solicitantes en realidad en mora, a pesar de la predicción del
modelo de lo contrario.

A veces un árbol resultados en las decisiones que tienen poco


sentido lógico. Por ejemplo, ¿por qué un solicitante que tenga un
historial de crédito es muy bueno sea probable que por defecto,
mientras que aquellos cuyo balance de comprobación es
desconocido no es probable que por defecto? normas
contradictorias como este ocurren a veces. Puede ser que reflejan
un patrón real de los datos, o pueden ser una anomalía estadística.
En cualquier caso, es importante investigar tales decisiones
extrañas para ver si la lógica del árbol tiene sentido para uso
empresarial.

Después de que el árbol, el resumen (credit_model) de salida muestra una matriz


de confusión, que es una tabulación cruzada que indica registros incorrectamente
clasificadas del modelo en los datos de entrenamiento:
Evaluación de datos de entrenamiento (900 casos):

Árbol de decisión
----------------
tama Errore
ño s 133 <<
56 (14,8%)

(una (segu <-Classified


) ndo) como
---- ----
598 35 (A): no clase
98 169 (B): Sí Clase

Las notas de salida de errores que el modelo clasificaron correctamente


todos menos 133 de los 900 casos de formación de una tasa de error del 14,8
por ciento. Un total de 35 reales no hay valores fueron clasificadas
incorrectamente como sí (falsos positivos), mientras que 98 valores sí fueron
clasificados erróneamente como no hay (falsos negativos).
Los árboles de decisión son conocidos por tener una tendencia a overfit del modelo

[ 77 ]
a los datos de entrenamiento. Por esta razón, la tasa de error reportado en los datos
de entrenamiento puede ser demasiado optimista, y es especialmente importante
para evaluar los árboles de decisión sobre un conjunto de datos de prueba.

[ 78 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Paso 4 - evaluar el rendimiento del modelo


Para aplicar nuestro árbol de decisiones para el conjunto de datos de prueba,
se utiliza la función de predecir (), como se muestra en la siguiente línea de
código:
> credit_pred <- predecir (credit_model, credit_test)

Esto crea un vector de valores pronosticados de clase, que podemos comparar con
los valores reales de clase utilizando la función cruzado () en el paquete gmodels.
Ajuste de los parámetros prop.c y prop.r a FALSE elimina los porcentajes de
columna y fila de la tabla. El porcentaje restante (prop.t) indica la proporción de los
registros en la célula fuera del número total de registros:
> biblioteca (gmodels)
> Cuadro cruzado (credit_test $ defecto, credit_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
DNN = c ( 'default real', 'predijo por defecto'))

Esto se traduce en la siguiente tabla:

Fuera de los registros de solicitud de préstamo 100 de prueba, nuestro modelo


predijo correctamente que el 59 no por defecto y 14 hizo por defecto, lo que
resulta en una precisión de 73 por ciento y una tasa de error del 27 por ciento.
Esto es algo peor que su desempeño en el
datos de entrenamiento, pero no inesperado, dado que el rendimiento de un
modelo es a menudo peor en los datos que no se ven. También tenga en cuenta que
el modelo predijo correctamente solamente 14 de los 33 morosidad reales en los
datos de prueba, o 42 por ciento. Por desgracia, este tipo de error es un error
potencialmente muy costosa, ya que el banco pierde dinero en cada defecto. Vamos
a ver si podemos mejorar el resultado con un esfuerzo poco más.

[ 79 ]
Capítulo 5

Paso 5 - mejorar el rendimiento del modelo


tasa de error de nuestro modelo es probable que sea demasiado alto como para
desplegarlo en una aplicación de puntuación de crédito en tiempo real. De hecho, si
el modelo predijo "sin defecto" para cada caso de prueba, habría sido correcto el 67
por ciento de las veces, el resultado no es mucho peor que nuestro modelo de, pero
que requiere mucho menos esfuerzo! La predicción de la morosidad de 900 ejemplos
parece ser un problema difícil.
Para hacer las cosas aún peor, nuestro modelo realizan especialmente mal en la
identificación de los solicitantes que pagar sus préstamos. Afortunadamente, hay un
par de maneras sencillas para ajustar el algoritmo C5.0 que pueden ayudar a mejorar
el rendimiento del modelo, tanto en general como para el tipo más costoso de
errores.

Impulsar la exactitud de los árboles de decisión


Una forma del algoritmo C5.0 mejoró en el algoritmo C4.5 fue a través de la
adición de adaptación impulsar. Este es un proceso en el que muchos árboles de
decisión se construyen y los árboles votar sobre la mejor clase para cada ejemplo.

La idea de impulsar se basa en gran parte de la investigación


realizada por Rob Schapire y Yoav Freund. Para obtener más
información, puede buscar en Internet para sus publicaciones o
su reciente libro de texto Impulsar: Fundamentos y Algoritmos.
The MIT Press (2012).

Como se puede aplicar de manera más general a cualquier algoritmo de


aprendizaje automático impulsar, se trata en detalle más adelante en este libro en
el capítulo 11, Mejora del rendimiento del modelo. Por ahora, es suficiente decir
que el aumento se basa en la idea de que mediante la combinación de una serie de
debilidad de los alumnos que realizan, puede crear un equipo que es mucho más
fuerte
que cualquiera de los alumnos solos. Cada uno de los modelos tiene un conjunto
único de fortalezas y debilidades y que puede ser mejor o peor en la solución de
ciertos problemas. Usando una combinación de varios alumnos con fortalezas y
debilidades complementarias por lo tanto, puede mejorar drásticamente la
precisión de un clasificador.
La función C5.0 () hace que sea fácil agregar impulsar a nuestro árbol de decisión
C5.0. Simplemente tenemos que añadir un parámetro de ensayos adicionales que
indica el número de árboles de decisión por separado a utilizar en el equipo
impulsado. El parámetro ensayos establece un límite superior; el algoritmo se
detiene añadiendo árboles si reconoce que los ensayos adicionales no parecen estar

[ 80 ]
mejorando la precisión. Vamos a empezar con 10 ensayos, un número que se ha
convertido en el estándar de facto, como la investigación sugiere que esto reduce las
tasas de error en los datos de prueba en un 25 por ciento:
> credit_boost10 <- C5.0 (credit_train [-17], credit_train $ defecto,
ensayos = 10)

[ 81 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Al examinar el modelo resultante, podemos ver que algunas líneas adicionales se


han añadido, que indica los cambios:
> credit_boost10
Número de iteraciones impulsar:
10 Tamaño medio de árboles: 47.5

A través de las 10 iteraciones, nuestro tamaño reducido árbol. Si lo desea,


usted puede ver los 10 árboles por Resumen de escribir (credit_boost10) en el
símbolo del sistema. También muestra el rendimiento del modelo en los datos
de entrenamiento:
> Resumen (credit_boost10)

(una (segu <-Classified


) ndo) como
---- ----
629 4 (A): no clase
30 237 (B): Sí Clase

El clasificador hizo 34 errores en 900 ejemplos de entrenamiento para una tasa de error de
3,8 por ciento. Esta es una gran mejora sobre la tasa de error de entrenamiento
13,9 por ciento señalamos antes de añadir impulsar! Sin embargo, queda por ver
si vemos una mejora similar en los datos de prueba. Vamos a ver:
> credit_boost_pred10 <- predecir (credit_boost10, credit_test)
> Cuadro cruzado (credit_test $ defecto, credit_boost_pred10,
prop.chisq = FALSO, prop.c = FALSO, prop.r = FALSO,
DNN = c ( 'default real', 'predijo por defecto'))

La tabla resultante es como sigue:

[ 82 ]
Capítulo 5

Aquí, hemos reducido la tasa de error total del 27 por ciento antes de aumentar
hasta un 18 por ciento en el modelo impulsado. No parece como una gran
ganancia, pero en realidad es más grande que la reducción del 25 por ciento de lo
que esperábamos. Por otro lado, el modelo todavía no está haciendo bien en la
predicción de los valores predeterminados, la predicción única 20/33 = 61%
correctamente.
La falta de una mejora aún mayor puede ser una función de nuestra relativamente
pequeña
la formación de conjunto de datos, o simplemente puede ser un problema muy difícil de
resolver.
Dicho esto, si se puede añadir impulsar esto fácilmente, ¿por qué no se aplica por
defecto a cada árbol de decisión? La razón es doble. En primer lugar, si la
construcción de un árbol de decisión vez necesita una gran cantidad de tiempo de
cálculo, la construcción de muchos árboles pueden ser computacionalmente
impracticable.
En segundo lugar, si los datos de entrenamiento es muy ruidoso, a continuación,
impulsar podría no resultar en una mejora en absoluto. Sin embargo, si se necesita una
mayor precisión, vale la pena darle una oportunidad.

Cometer errores más costosos que otros


Dando un préstamo a un solicitante que es probable que por defecto puede ser un
error costoso. Una solución para reducir el número de falsos negativos puede ser
la de rechazar un mayor número de solicitantes límite, bajo el supuesto de que el
interés que el banco ganaría de un préstamo riesgoso es ampliamente superado
por la pérdida masiva que incurriría si no se presta el dinero volver a todos.
El algoritmo C5.0 nos permite asignar una penalidad a diferentes tipos de errores,
con el fin de disuadir a un árbol de cometer errores más costosos. Las sanciones se
designan en una matriz de costo, que especifica cuánto más costoso cada error es, en
relación con cualquier otra predicción.
Para empezar la construcción de la matriz de costos, tenemos que empezar
especificando las dimensiones. Dado que los valores predichos y reales pueden tanto
tomar dos valores, sí o no, es necesario describir una matriz de 2 x 2, utilizando una
lista de dos vectores, cada uno con dos valores. Al mismo tiempo, también
llamaremos las dimensiones de la matriz para evitar confusiones en el futuro:
> matrix_dimensions <- lista (c ( "no", "sí"), c ( "no", "sí"))
> nombres (matrix_dimensions) <- c ( "predicho", "real")

Examinando el nuevo objeto muestra que nuestras dimensiones se han configurado


correctamente:

[ 83 ]
> matrix_dimensions
$ predicho
[1] "no si"

$ real
[1] "no si"

[ 84 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

A continuación, tenemos que asignar la pena para los distintos tipos de errores
mediante el suministro de cuatro valores para llenar la matriz. Puesto que R se llena
una matriz rellenando columnas una por una, de arriba abajo, necesitamos
proporcionar los valores en un orden específico:

• Predicho no, no real


• Predicho sí, no real
• Predicho no, sí real
• Predicho sí, sí real

Supongamos que creemos que un impago del préstamo le cuesta al banco cuatro veces
más que una llamada perdida
oportunidad. Nuestros valores de penalización podrían entonces ser definidos como:
> error_cost <- matriz (c (0, 1, 4, 0), nrow =
2, dimnames = matrix_dimensions)

Esto crea la siguiente matriz:


> error_cost
real
predicho no sí
no04
Sí10

Según la definición de esta matriz, no hay ningún costo asignado cuando el


algoritmo clasifica un sí o no correctamente, pero un falso negativo tiene un coste
de 4 frente a los costos de un falso positivo de 1. Para ver cómo esta clasificación
impactos, vamos a aplicarlo a nuestra árbol de decisiones utilizando el parámetro
de los costos de la función C5.0 (). de lo contrario vamos a utilizar los mismos
pasos que hemos hecho anteriormente:
> credit_cost <- C5.0 (credit_train [-17], credit_train $ defecto,
costes = error_cost)
> credit_cost_pred <- predecir (credit_cost, credit_test)
> Cuadro cruzado (credit_test $ defecto, credit_cost_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
DNN = c ( 'default real', 'predijo por defecto'))

[ 85 ]
Capítulo 5

Esto produce la matriz de confusión siguiente:

En comparación con nuestro modelo impulsado, esta versión hace más errores
generales: el 37 por ciento de error aquí frente a un 18 por ciento en el caso
impulsado. Sin embargo, los tipos de errores son muy diferentes. Donde los
modelos anteriores incorrectamente clasificadas solamente
42 y 61 por ciento de los valores predeterminados correctamente, en este modelo, 79
por ciento de los valores predeterminados reales se prevé que ser no-valores
predeterminados. Este comercio que resulta en una reducción de falsos negativos en
la costa de aumentar falsos positivos puede ser aceptable si nuestras estimaciones de
costos eran exactos.

La comprensión de las reglas de


clasificación
reglas de clasificación representan el conocimiento en forma de declaraciones lógicas
si-si no que asignan una clase de ejemplos no etiquetados. Se especifican en términos
de un antecedente y un consecuente; éstos forman una hipótesis que indica que "si
esto ocurre, entonces eso sucede." Una regla simple podría indicar, "si el disco duro
está haciendo un sonido de clic, entonces es a punto de fallar." El antecedente
comprende ciertas combinaciones de valores de características, mientras que la
consiguiente especifica el valor de la clase para asignar cuando se cumplen las
condiciones de la regla.
alumnos de reglas a menudo se utilizan de una forma similar a los alumnos
de árboles de decisión. Al igual que los árboles de decisión, que se pueden
utilizar para aplicaciones que generan conocimiento para la acción futura,
tales como:
• Identificación de las condiciones que conducen a un fallo de hardware en
dispositivos mecánicos
• Al describir las características clave de los grupos de personas

[ 86 ]
para la segmentación de clientes
• Encontrar condiciones que preceden a grandes caídas o incrementos en
los precios de las acciones en el mercado de valores

[ 87 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Por otra parte, los alumnos de reglas ofrecen algunas ventajas sobre los árboles
para algunas tareas. A diferencia de un árbol, que debe ser aplicada de arriba a
abajo a través de una serie
de decisiones, las reglas son las proposiciones que se pueden leer tanto como una
declaración de hecho. Además, por razones que se explicarán más adelante, los
resultados de un alumno regla puede ser más simple, directo y fácil de entender que
un árbol de decisión construido sobre los mismos datos.

Como se verá más adelante en este capítulo, las reglas pueden ser
generados usando árboles de decisión. Así que, ¿por qué molestarse con
un grupo separado de los algoritmos de aprendizaje regla? La razón es
que los árboles de decisión traer un conjunto particular de sesgos a la
tarea de que un alumno regla evita mediante la identificación de las
normas directamente.

alumnos de reglas se aplican generalmente a problemas en los que las


características son principalmente o enteramente nominal. Hacen bien en la
identificación de eventos raros, incluso si el raro caso se produce sólo para una
interacción muy específica entre los valores de características.

Independiente y conquista
algoritmos de aprendizaje de las reglas de clasificación utilizan una heurística
conocida como separados y conquista. El proceso implica la identificación de una
regla que cubre un subconjunto de ejemplos en los datos de entrenamiento, y
después separar esta partición de los datos restantes. A medida que se añaden las
reglas, subconjuntos adicionales de los datos se separan hasta que todo el conjunto
de datos ha sido cubierta y no quedan más ejemplos.

[ 88 ]
Capítulo 5

Una forma de imaginar el proceso de aprendizaje de reglas es pensar en la


perforación hacia abajo en los datos mediante la creación de normas cada vez más
específicos para identificar los valores de la clase. Suponga que la tarea de la creación
de reglas para identificar si un animal es un mamífero. Se podría describir el
conjunto de todos los animales como un espacio grande, como se muestra en el
siguiente diagrama:

Un alumno regla comienza mediante el uso de las funciones disponibles para


encontrar grupos homogéneos. Por ejemplo, el uso de una característica que indica
si la especie se desplaza por tierra, mar o aire, la primera regla podría sugerir que
los animales terrestres son mamíferos:

[ 89 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Cómo se nota cualquier problema con esta regla? Si usted es un amante de los
animales, se habrá dado cuenta de que las ranas son anfibios, y no mamíferos. Por lo
tanto, nuestra regla tiene que ser un poco más específico. Vamos a seguir detallando
por lo que sugiere que los mamíferos tienen que caminar en la tierra y tienen una
cola:

Una regla adicional se puede definir para separar los murciélagos, el único que queda
mamífero. Por lo tanto, este subconjunto puede ser separado de los otros datos.
Una regla adicional se puede definir para separar los murciélagos, el mamífero
solamente restante. A potenciales murciélagos característica distintiva de los otros
animales restantes serían la presencia de piel. Usando una regla en torno a esta
característica, entonces nos hemos identificado correctamente todos los animales:

[ 90 ]
Capítulo 5

En este punto, ya que todas las instancias de capacitación han sido clasificadas, el
aprendizaje de reglas
proceso se detendría. Hemos aprendido un total de tres reglas:
• Los animales que caminar sobre la tierra y tienen colas son mamíferos
• Si el animal no tiene piel, no es un mamífero
• De lo contrario, el animal es un mamífero

El ejemplo anterior ilustra cómo las reglas consumen gradualmente segmentos


cada vez mayores de datos para clasificar finalmente todos los casos.

Como las reglas parecen cubrir partes de los datos, separados y conquistar
también se conocen algoritmos de que comprende algoritmos, y las reglas
resultantes se denominan cubriendo
reglas. En la siguiente sección, vamos a aprender cómo se aplican las reglas que
cubren en la práctica mediante el examen de un simple algoritmo de aprendizaje de
reglas. a continuación, vamos a examinar un aprendiz regla más compleja, y se
aplican tanto a un problema del mundo real.

El algoritmo 1R
Supongamos que un programa de televisión tiene una rueda con diez rebanadas de
colores de igual tamaño. Tres de los segmentos eran de color rojo, tres eran azul, y
cuatro eran de raza blanca. Antes de hacer girar la rueda, se le pedirá que elija uno
de estos colores. Cuando la rueda se detenga, si el color se muestra coincide con su
predicción, que va a ganar un premio en metálico de gran tamaño. ¿De qué color
debe escoger?
Si elige blanco, que son, por supuesto, más probabilidades de ganar el premio este
es el color más común en el volante. Obviamente, este programa de juegos es un
poco ridículo, pero demuestra el clasificador más simple, Zeror, un aprendiz regla
de que, literalmente, se entera de reglas (de ahí el nombre). Para todos los ejemplos
sin etiqueta, independientemente de los valores de sus características, se predice la
clase más común.
El algoritmo 1R (una regla o OneR), mejora con el Zeror mediante la selección de
una sola regla. Aunque esto puede parecer demasiado simplista, tiende a funcionar
mejor que se podría esperar. Como se ha demostrado en estudios empíricos, la
exactitud de este algoritmo puede acercarse a la de los algoritmos mucho más
sofisticadas para muchas tareas del mundo real.

[ 91 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Para una mirada en profundidad a la sorprendente actuación de 1R, ver Holte RC.
reglas de clasificación muy simples funcionan bien en conjuntos de datos más utilizados.
Aprendizaje automático. 1993; 11: 63-91.

Las fortalezas y debilidades del algoritmo 1R se muestran en la siguiente tabla:

fortalezas debilidades
• Genera un único, fácil de entender, • Utiliza sólo una única función
la regla fácilmente legible del • Probablemente demasiado simplista
pulgar
• A menudo realiza sorprendentemente
bien
• Puede servir como punto de
referencia para los algoritmos más
complejos

El funcionamiento de este algoritmo es simple. Para cada función, 1R divide los


datos en grupos basados en valores similares de la función. Entonces, para cada
segmento, el algoritmo predice la clase mayoritaria. La tasa de error para la regla en
función de cada característica es calculado y el estado con menos errores se elige
como una regla.
Las siguientes tablas muestran cómo funcionaría para los datos de los animales
que vimos anteriormente en esta sección:

[ 92 ]
Capítulo 5

Para los viajes de los característica, el conjunto de datos se divide en tres grupos:
aire, tierra y mar. Los animales en los grupos de aire y mar se prevé que sea no-
mamífero, mientras que los animales en el grupo de la tierra se prevé que sean
mamíferos. Esto dio lugar a dos errores: los murciélagos y ranas. La característica de
pieles animales ha dividido en dos grupos. Las personas con piel se prevé que ser
mamíferos, mientras que los que no tienen la piel no se prevé que ser mamíferos. se
contaron tres errores: cerdos, elefantes, y rinocerontes. A medida que los viajes de
los resultados de entidades en un menor número de errores, el algoritmo 1R
devolverá el siguiente "una regla", basada en viajes por:
• Si el animal se desplaza por el aire, no es un mamífero
• Si el animal viaja por tierra, es un mamífero
• Si el animal se desplaza por el mar, no es un mamífero

El algoritmo se detiene aquí, habiendo encontrado la regla más importante.


Obviamente, este algoritmo de aprendizaje de reglas puede ser demasiado básico
para algunas tareas. ¿Le gustaría que un sistema de diagnóstico médico para
examinar únicamente un solo síntoma, o un sistema de conducción automática
para detener o acelerar su coche basa sólo en un único factor? Para este tipo de
tareas, un aprendiz regla más sofisticado podría ser útil. Vamos a aprender la
una de la siguiente sección.

El algoritmo DESTRIPADOR
algoritmos de aprendizaje de reglas temprana se ven afectadas por un par de
problemas. En primer lugar, eran conocidos por ser lento, lo que les hacía
ineficaz para el creciente número de grandes conjuntos de datos. En segundo
lugar, a menudo eran propensos a ser inexacto en los datos ruidosos.
Un primer paso para la solución de estos problemas se propuso en 1994 por
Johannes Fürnkranz y Gerhard Widmer. Su reducido poda Error (IREP) algoritmo
incremental utiliza una combinación de métodos de pre-poda y post-poda que
crecen reglas muy complejas y podar ellos antes de la separación de los casos del
conjunto de datos completo. Aunque esta estrategia ayudó a que el rendimiento de
los alumnos de reglas, árboles de decisión a menudo todavía se comportaron mejor.

Para obtener más información sobre IREP, ver Fürnkranz J, G. Widmer


Incremental La poda de error reducido. Actas de la 11º Conferencia
internacional sobre aprendizaje automático. 1994: 70-77.

aprendices regla dieron otro paso hacia adelante en 1995 cuando William W. Cohen
introdujo la repetida incremental de poda para cortar la reducción de errores

[ 93 ]
algoritmo (DESTRIPADOR), que mejoró tras IREP para generar reglas que igualar o
superar el rendimiento de los árboles de decisión.

[ 94 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Para más detalles sobre DESTRIPADOR, véase Cohen WW.


regla rápida y eficaz inducción. Actas de la 12º Conferencia
Internacional sobre
Aprendizaje automático. 1995: 115-123.

Como se indica en la siguiente tabla, los puntos fuertes y débiles de


DESTRIPADOR son generalmente comparables a los árboles de decisión. La
principal ventaja es que pueden dar lugar a un modelo ligeramente más
parsimoniosa:

fortalezas debilidades
• Genera reglas fáciles de • Puede dar lugar a normas que
entender, legibles parecen desafiar el sentido
• Eficiente en conjuntos de datos grandes común o conocimiento experto
y ruidosos
• Por lo general produce un modelo • No es ideal para trabajar con datos
más simple que un árbol de numéricos
decisión comparables • no podría llevar a cabo, así como
los modelos más complejos

Después de haber evolucionado a partir de varias iteraciones de algoritmos de


aprendizaje de reglas, el algoritmo Ripper es un mosaico de la heurística eficientes
para el aprendizaje de reglas. Debido a su complejidad, una discusión de los
detalles de implementación técnica está más allá del alcance de este libro. Sin
embargo, se puede entender en términos generales como un proceso de tres pasos:

1. Crecer
2. Ciruela pasa
3. Optimizar
La fase de crecimiento utiliza la técnica separada y conquista añadir avidez
condiciones a una regla perfectamente hasta que se clasifica un subconjunto de datos
o se queda sin atributos para la división. Al igual que en los árboles de decisión, el
criterio de ganancia de información se utiliza para identificar el siguiente atributo de
división. Al aumentar la especificidad de una regla ya no reduce la entropía, la regla
se poda inmediatamente. Pasos uno y dos se repiten hasta que se alcanza un criterio
de parada, punto en el cual se optimiza todo el conjunto de reglas usando una
variedad de heurística.
El algoritmo Ripper puede crear reglas mucho más complejo que el algoritmo
puede 1R, al igual que en se puede considerar más de una función. Esto significa
que puede crear reglas con varios antecedentes tales como "si un animal moscas
y tiene piel, entonces es un mamífero." Esto mejora la capacidad del algoritmo

[ 95 ]
para modelar datos complejos, pero al igual que los árboles de decisión, significa
que las reglas pueden convertirse rápidamente en más difícil
para comprender.

[ 96 ]
Capítulo 5

La evolución de los alumnos las reglas de clasificación no se detuvo


con DESTRIPADOR. Los nuevos algoritmos de aprendizaje regla se
proponen rápidamente. Un estudio de la literatura muestra
algoritmos llamados IREP ++, Zapatilla, TRIPPER, entre muchos
otros.

Reglas de árboles de decisión


reglas de clasificación también se pueden obtener directamente de los árboles de
decisión. Comenzando en un nodo hoja y siguiendo las ramas de nuevo a la raíz, se
han obtenido una serie de decisiones. Estos se pueden combinar en una sola regla. La
siguiente figura muestra cómo las reglas podrían ser construidos a partir del árbol de
decisión para predecir el éxito de la película:

Siguiendo los caminos desde el nodo raíz hasta cada hoja, las reglas serían:

1. Si el número de celebridades es baja, entonces la película va a ser un fracaso de


taquilla.
2. Si el número de celebridades es alta y el presupuesto es alto, entonces la
película será un éxito Mainstream.
3. Si el número de celebridades es alta y el presupuesto es bajo, entonces la
película será un éxito crítico.

Por razones que se aclararán en la sección siguiente, el principal desventaja de


usar un árbol de decisión para generar reglas es que las normas resultantes son a
menudo más complejas que las que se aprenden mediante un algoritmo de
aprendizaje de reglas. La estrategia de divide y vencerás empleado por los

[ 97 ]
árboles de decisión sesga los resultados de manera diferente a la de un aprendiz
regla. Por otra parte, a veces es más eficiente computacionalmente para generar
reglas de árboles.

[ 98 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

La función C5.0 () en el paquete C50 generará un modelo


utilizando reglas de clasificación si se especifica reglas = TRUE
cuando el entrenamiento del modelo.

Lo que hace que los árboles y las reglas


codiciosos?
Los árboles de decisión y los alumnos de reglas se conocen como estudiantes ávidos
porque utilizan los datos en una base de primer llegado, primer servido. Tanto el
divide y vencerás heurística utilizado por los árboles de decisión y la heurística
separada y conquistar utilizado por los estudiantes de reglas intentar realizar
particiones uno a la vez, la búsqueda de la partición más homogénea en primer
lugar, seguido por el siguiente mejor, y así sucesivamente, hasta que todos los
ejemplos tienen han clasificado.
La desventaja de este enfoque es que codiciosos algoritmos codiciosos no están
garantizados para generar el número óptimo, más precisa, o más pequeño de reglas
para un conjunto de datos en particular. Al tomar la fruta madura temprano, un
aprendiz codiciosos puede encontrar rápidamente una única regla que es preciso
para un subconjunto de los datos; Sin embargo, al hacerlo, el alumno puede pasar
por alto la oportunidad de desarrollar un conjunto de reglas más matizada con una
mejor precisión global de todo el conjunto de datos. Sin embargo, sin necesidad de
utilizar el enfoque codiciosos para gobernar el aprendizaje, es probable que para
todos, pero el más pequeño de los conjuntos de datos, regla de aprendizaje sería
computacionalmente imposible.

[ 99 ]
Capítulo 5

Aunque ambos árboles y reglas heurísticas de aprendizaje emplean codiciosos,


existen diferencias sutiles en la forma en que construyen reglas. Tal vez la mejor
manera de distinguirlos es tener en cuenta que una vez que divide y vencerás
divide en una característica, las particiones creadas por la división no pueden
ser re-conquistado, sólo se subdivide a su vez. De esta manera, es un árbol
permanentemente limitada por su historia de decisiones pasadas. Por el contrario,
una vez separado y vencerás encuentra una regla, los ejemplos no cubiertos por
todas las condiciones de la regla pueden ser reconquistada.
Para ilustrar este contraste, consideremos el caso anterior en el que se construyó un
alumno regla para determinar si un animal era un mamífero. El alumno regla
identificó tres reglas que clasifican a la perfección los animales ejemplo:
• Los animales que caminar sobre la tierra y tienen colas son mamíferos
(osos, gatos, perros, elefantes, cerdos, conejos, ratas, rinocerontes)
• Si el animal no tiene piel, no es un mamífero (pájaros, anguilas, peces,
ranas, insectos, tiburones)
• De lo contrario, el animal es un mamífero (murciélagos)

Por el contrario, un árbol de decisión construido sobre los mismos datos podría haber
llegado con cuatro
reglas para lograr la misma clasificación perfecta:
• Si un animal camina sobre la tierra y tiene piel, entonces es un mamífero
(osos, gatos, perros, elefantes, cerdos, conejos, ratas, rinocerontes)
• Si un animal camina sobre la tierra y no tiene piel, entonces no
es un mamífero (ranas)
• Si el animal no caminar en la tierra y tiene la piel, entonces es un mamífero
(murciélagos)
• Si el animal no caminar en la tierra y no tiene piel, entonces no es un
mamífero (pájaros, insectos, tiburones, peces, anguilas)

[ 100 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

El resultado diferente a través de estos dos enfoques tiene que ver con lo que
ocurre con las ranas después de haber sido separados por la "caminar en la
tierra" decisión. Donde el alumno regla permite ranas para ser reconquistada
por la decisión "no tiene la piel", el árbol de decisión no puede modificar las
particiones existentes, y por lo tanto debe colocar la rana en su propia regla.
Por un lado, porque los estudiantes pueden examinar de nuevo la regla de los
casos que fueron considerados pero en última instancia no están cubiertos como
parte de las reglas anteriores, los alumnos de reglas a menudo se encuentran un
conjunto más parsimoniosa de reglas que los generados a partir de árboles de
decisión. En el otro
parte, esta reutilización de los datos significa que el coste computacional de los
alumnos de reglas puede ser un poco más alto que para los árboles de decisión.

Ejemplo - la identificación de
hongos venenosos con los
alumnos de reglas
Cada año, muchas personas se enferman y que a veces incluso mueren a causa
de la ingestión de setas venenosas. Dado que muchos hongos son muy similares
entre sí en apariencia, recolectores de setas en ocasiones incluso experimentados
son envenenados.
A diferencia de la identificación de plantas dañinas tales como el roble venenoso
o la hiedra venenosa, no hay normas claras tales como "hojas de tres, que sean"
para identificar si un hongo silvestre es venenoso o comestible. Para complicar
las cosas, muchas reglas tradicionales, tales como "setas venenosas son de
colores brillantes," proporcionar información peligrosa o engañosa. Si las reglas
simples, claros, coherentes y estaban disponibles para identificar las setas
venenosas, que podría salvar la vida de los recolectores.
Debido a que uno de los puntos fuertes de los algoritmos de aprendizaje de reglas es
el hecho de que generan fácil de entender las reglas, se parecen como un ajuste
apropiado para esta tarea de clasificación. Sin embargo, las reglas sólo serán tan
útiles, ya que son precisos.

Paso 1 - recogida de datos


Para identificar las reglas para distinguir las setas venenosas, vamos a utilizar el
conjunto de datos de la seta por Jeff Schlimmer de la Universidad Carnegie Mellon.
El conjunto de datos en bruto está disponible libremente en la UCI Machine Learning
repositorio (http: //archive.ics. uci.edu/ml).

[ 101 ]
Capítulo 5

El conjunto de datos incluye información sobre 8.124 muestras de hongos de 23


especies de setas con aletas que figuran en la Guía de Campo de la Sociedad
Audubon de setas América del Norte (1981). En la Guía de Campo, cada una de las
especies de hongos se identifica "definitivamente comestible", "sin duda venenosa"
o "probable venenosa, y no se recomienda para ser comido." A los efectos de este
conjunto de datos, este último grupo se combinó con el grupo "definitivamente
venenosa" para hacer dos clases: venenosas y no venenosas.
El diccionario de datos disponible en el sitio web UCI describe las 22 características
de las muestras de hongos, incluyendo características tales como la forma de
casquete, color tapa, olor, tamaño Gill y color, tallo forma, y el hábitat.

En este capítulo se utiliza una versión ligeramente modificada de


los datos de setas. Si usted planea en la siguiente junto con el
ejemplo, descargar el archivo desde el sitio web mushrooms.csv
Packt Publishing y guardarlo en su directorio de trabajo R.

Paso 2 - exploración y la preparación de los


datos
Comenzamos utilizando read.csv (), para importar los datos para nuestro análisis.
Puesto que todas las 22 características y la clase de destino son nominales, en este
caso, estableceremos stringsAsFactors
= TRUE y aprovechar el Factor de conversión automática:

> setas <- read.csv ( "mushrooms.csv", stringsAsFactors = TRUE)

La salida de las notas de comando str (hongos) que contienen los datos de 8.124
observaciones de 23 variables como el diccionario de datos había descrito.
Mientras que la mayor parte de la salida str () no es nada especial, es una
característica digna de mención. ¿Notas algo particular en la variable veil_type en
la siguiente línea?
$ Veil_type: Factor w / 1 nivel "parcial": 1 1 1 1 1 1 ...

Si usted piensa que es extraño que un factor tiene un solo nivel, estás en lo correcto.
El diccionario de datos enumera dos niveles para esta función: parcial y universal.
Sin embargo, todos los ejemplos de nuestros datos se clasifican como parcial. Es
probable que este elemento de datos se codifica de alguna manera incorrecta. En
cualquier caso, ya que el tipo velo no varía a través de muestras, que no proporciona
ninguna información útil para la predicción. Vamos a caer esta variable a partir de
nuestro análisis con el siguiente comando:
> setas $ veil_type <- NULL

[ 102 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Al asignar NULL para el vector de tipo velo, R elimina la función de la


hongos marco de datos.

Antes de ir más lejos, hay que tener un rápido vistazo a la distribución de la


variable de clase de tipo hongo en nuestro conjunto de datos:
> mesa (setas tipo $)
comestible venenoso
42083916

Alrededor del 52 por ciento de las muestras de hongos (N = 4208) son comestibles,
mientras que el 48 por ciento (N = 3916) son venenosas.
A los efectos de este experimento, vamos a considerar las 8.214 muestras en los
datos de hongo a ser un conjunto exhaustivo de todas las posibles setas. Se trata
de un supuesto importante, ya que significa que no es necesario para mantener
algunas muestras de los datos de entrenamiento para realizar pruebas. No
estamos tratando de desarrollar
reglas que cubren los tipos de setas imprevistos; simplemente estamos tratando de
encontrar reglas que describen con precisión el conjunto completo de tipos de
hongos conocidos. Por lo tanto, podemos construir y probar el modelo en los mismos
datos.

Paso 3 - la formación de un modelo sobre los


datos
Si formamos a una hipotética clasificador Zeror en estos datos, ¿cuál sería predecir?
Desde Zeror ignora todas las características y simplemente predice el modo del
objetivo, en un lenguaje sencillo, la regla sería afirmar que todas las setas son
comestibles. Obviamente, esto no es un clasificador muy útil, ya que dejaría un
recolector de setas enfermos o muertos y casi la mitad de las muestras de hongos
que llevan la posibilidad de ser venenoso. Nuestras reglas tendrán que hacer
mucho mejor que esto con el fin de proporcionar asesoramiento segura que pueda
ser publicada. Al mismo tiempo, necesitamos reglas simples que son fáciles de
recordar.
Puesto que las reglas simples a menudo pueden ser extremadamente predictivo,
vamos a ver cómo un alumno muy simple regla lleva a cabo en los datos de setas.
Hacia el final, vamos a aplicar la 1R
clasificador, que identificará la característica más predictivo de la clase de destino y
utilizarlo para construir un conjunto de reglas.

[ 103 ]
Capítulo 5

Vamos a utilizar la aplicación 1R en el paquete RWeka llamada OneR (). Se


recordará que habíamos instalado RWeka en el Capítulo 1, Introducción a
Machine Learning, como parte del tutorial sobre la instalación y los
paquetes de carga. Si no ha instalado el paquete por estas instrucciones,
necesitará utilizar el
install.packages de comandos ( "RWeka") y se han instalado Java en
el sistema (consulte las instrucciones de instalación para más
detalles). Con estos pasos completos, cargar el paquete
escribiendo biblioteca (RWeka):

La implementación OneR () utiliza la sintaxis de la fórmula R para especificar el


modelo a ser entrenado. La sintaxis de la fórmula usa el operador ~ (conocido como
el tilde) para expresar la relación entre una variable de destino y sus predictores. La
variable de clase que aprender va a la izquierda de la tilde y las características de
predicción se escriben a la derecha, separados por operadores +. Si te gusta para
modelar la relación entre la clase y los predictores y X1 y X2, se podría escribir la
fórmula como y ~ x1 + x2. Si desea incluir todas las variables en el modelo, el
término especial. puede ser usado. Por ejemplo,
y ~. especifica la relación entre Y y todas las otras características del
conjunto de datos.

La sintaxis de la fórmula I se utiliza en muchas funciones R y


ofrece algunas características de gran alcance para describir las
relaciones entre las variables predictoras. Vamos a explorar

[ 104 ]
algunas de estas características en los capítulos posteriores. Sin
embargo, si estás ansioso por un adelanto, no dude en leer la
documentación utilizando el comando? Fórmula.

[ 105 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

El uso del tipo ~. fórmula, vamos a permitir que nuestro alumno regla
primera OneR () para tener en cuenta todas las posibles características en los
datos de hongos, mientras que la construcción de sus reglas para predecir el
tipo:
> mushroom_1R <- OneR (. ~ tipo, los datos = setas)

Para examinar las reglas que ha creado, podemos escribir el nombre del objeto
clasificador, en este
caso, mushroom_1R:
> mushroom_1R

olor:
almendros> anise-
comestible> creosota
comestible>
fishy-
venenoso> foul-
venenoso> musty-
venenoso> ninguno-
venenoso> pungent-
comestible> spicy-
venenoso>

venenoso
(8004/8124 instancias correcta)

En la primera línea de la salida, vemos que la característica de olor fue seleccionado


para la generación de regla. Las categorías de olor, tales como almendras, anís, y así
sucesivamente, especificar reglas de si es probable que sea comestible o venenosa
del hongo. Por ejemplo, si el hongo huele a pescado, falta, humedad, picante,
picante, o como la creosota, es probable que sea venenosa del hongo. Por otro lado,
las setas con olores más agradables como la almendra y anís, y los que tienen
ningún olor se prevé que sea comestible.
A los efectos de una guía de campo para la recolección de setas, estas normas
podrían resumirse en una simple regla de oro: "si el hongo huele poco apetecible,
entonces es probable que sea venenosa."

[ 106 ]
Capítulo 5

Paso 4 - evaluar el rendimiento del modelo


La última línea de la salida señala que las reglas predijeron correctamente la
comestibilidad de 8004 de las muestras de hongos 8.124 o casi el 99 por ciento de las
muestras de hongos. Podemos obtener detalles adicionales sobre el clasificador
utilizando la función de resumen (), como se muestra en el siguiente ejemplo:
> Resumen (mushroom_1R)

=== Resumen ===


Los casos correctamente 800498.5229 %
clasificados
Las instancias incorrectamente 1201.4771 %
clasificados
estadística kappa 0.9704
La media de error absoluto 0,0148
Raíz del error cuadrático medio 0.1215
error absoluto relativo 2,958%
Raíz del error cuadrático relativa 24.323%
Cobertura de los casos (0,95 nivel) 98,5229%
La media rel. tamaño de la región 50%
(0,95 nivel)
Número total de instancias 8124

=== === matriz de confusión


ab <- clasificado
como
4208 0 | a = comestible
120 3796 | b = venenoso

La sección etiquetada Resumen enumera una serie de diferentes formas de medir


el rendimiento de nuestro clasificador 1R. Vamos a cubrir muchas de estas
estadísticas más adelante en el capítulo 10, Evaluación de Desempeño del
modelo, por lo que vamos a ignorarlos por ahora.
La matriz de confusión sección llamada es similar a los utilizados antes. Aquí,
podemos ver donde nuestras reglas iban mal. La clave se muestra a la derecha, con a
= comestible y b = venenoso. Columnas de la tabla indican la clase predicha del
hongo mientras que las filas de la tabla separan los 4.208 setas comestibles de los
3.916 setas venenosas. El examen de la tabla, podemos ver que aunque el clasificador
1R hizo
No clasificar a los hongos comestibles como venenosas, lo hizo clasificar a 120
setas venenosas como comestibles, lo cual lo convierte en un error muy

[ 107 ]
peligroso!

[ 108 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Teniendo en cuenta que el alumno utiliza sólo una única función, lo hizo bastante
bien; si uno evita olores poco apetecibles cuando la recolección de setas, que casi
se
evitar un viaje al hospital. Dicho esto, cerca no es suficiente cuando las vidas están
involucrados, por no hablar de la editorial guía de campo podría no ser feliz con la
perspectiva de una demanda cuando sus lectores se enferman. Vamos a ver si
podemos añadir algunas más reglas y desarrollar una mejor clasificador.

Paso 5 - mejorar el rendimiento del modelo


Para un principiante regla más sofisticado, utilizaremos JRip (), una aplicación
basada en Java del algoritmo de aprendizaje de reglas DESTRIPADOR. Al igual que
con la implementación 1R hemos utilizado anteriormente, JRip () se incluye en el
paquete RWeka. Si no lo ha hecho, asegúrese de cargar el paquete con el comando
(RWeka) la biblioteca:

Como se muestra en el cuadro de la sintaxis, el proceso de formación de un modelo


JRip () es muy similar a como anteriormente hemos formado un modelo OneR ().
Esta es una de las ventajas agradables de las funciones en el paquete RWeka; la
sintaxis es consistente a través de algoritmos, que hace que el proceso de

[ 109 ]
comparación de un número de diferentes modelos muy simples.

[ 110 ]
Capítulo 5

Vamos a entrenar al alumno JRip () regla como lo hicimos con OneR (), lo que le
permite elegir las reglas de todas las funciones disponibles:
> mushroom_JRip <- JRip (. ~ tipo, los datos = setas)

Para examinar las reglas, escriba el nombre del clasificador:


> mushroom_JRip

JRIP reglas:
===========
(Olor = falta) => type = venenoso (2160,0 / 0,0)
(Gill_size = estrecha) y (gill_color = buff) => type = venenoso
(1152,0 / 0,0)
(Gill_size = estrecha) y (olor acre =) => type = venenoso (256,0 / 0,0)
(olor = creosota) => type = venenoso (192,0 / 0,0)
(Spore_print_color = verde) => type = venenoso (72,0 / 0,0)
(Stalk_surface_below_ring = escamosa) y (stalk_surface_above_ring = sedoso)
=> Type = venenoso (68,0 / 0,0)
(Hábitat = hojas) y (cap_color = blanco) => type = venenoso (8,0 / 0,0)
(stalk_color_above_ring = amarillo) => type = venenoso (8,0 / 0,0)
=> Type = comestible
(4208,0 / 0,0) Número de
Reglas: 9

El JRip () clasificador aprendió un total de nueve reglas partir de los datos de setas.
Una manera fácil de leer estas reglas es pensar en ellos como una lista de
declaraciones si-si no, similar a la lógica de programación. Las tres primeras reglas
podrían expresarse como:
• Si el olor es repugnante, entonces el tipo de seta es venenosa
• Si el tamaño de Gill es estrecha y el color de las laminillas es piel de ante,
entonces el tipo de hongo es venenoso
• Si el tamaño de Gill es estrecha y el olor es acre, entonces el tipo de
hongo es venenoso
Por último, la novena regla implica que cualquier muestra de setas que no estaba
cubierto por las ocho reglas anteriores es comestible. Siguiendo el ejemplo de nuestra
lógica de programación, esto puede leerse como:

• Lo demás, la seta es comestible

[ 111 ]
Divide y vencerás - Clasificación a partir de árboles de decisión y Reglas

Los números al lado de cada regla indican el número de casos cubiertos por la
regla y un recuento de casos mal clasificados. En particular, no hubo muestras de
hongos mal clasificadas utilizando estas nueve reglas. Como resultado, el número
de casos cubiertos por la última regla es exactamente igual al número de hongos
comestibles en los datos (N = 4208).
La siguiente figura proporciona una ilustración aproximada de cómo las reglas se
aplican a los datos de hongos. Si usted se imagina todo dentro del óvalo como
todas las especies de setas, el alumno identificado características de reglas o
conjuntos de elementos, que separan segmentos homogéneos desde el grupo más
grande. En primer lugar, el algoritmo encuentra un gran grupo de hongos
venenosos que se distinguen únicamente por su mal olor. A continuación, se
encontraron grupos más pequeños y específicos de setas venenosas. Al identificar
cubriendo reglas para cada una de las variedades de hongos venenosos, todos los
champiñones restantes resultaron ser comestible. Gracias a la madre naturaleza,
cada variedad
de setas era lo suficientemente único que el clasificador fue capaz de lograr
100 por ciento de exactitud.

[ 112 ]
Capítulo 5

Resumen
En este capítulo se cubrió dos métodos de clasificación que usan los llamados
algoritmos "codiciosos" para dividir los datos de acuerdo con valores de
características. Los árboles de decisión utilizan una estrategia de divide y vencerás
para crear estructuras de diagrama de flujo similar, mientras que los alumnos de
reglas separan y conquistar datos para identificar las reglas lógicas si-si no.
Ambos métodos producen modelos que se pueden interpretar sin un fondo
estadístico.
Un algoritmo de árbol de decisión popular y es altamente configurable C5.0. Se
utilizó el algoritmo C5.0 para crear un árbol para predecir si un solicitante de
préstamo será por defecto. Uso de las opciones para impulsar y errores sensibles a
los costes, hemos sido capaces de mejorar nuestra precisión y evitar préstamos
arriesgados que costaría el banco más dinero.
También utilizamos dos aprendices de reglas, 1R y extractor, para desarrollar reglas
para identificar los hongos venenosos. El algoritmo 1R utiliza una única función
para lograr 99 por ciento de exactitud en la identificación de muestras de hongos
potencialmente fatales. Por otro lado, el conjunto de nueve reglas generadas por el
algoritmo más sofisticado DESTRIPADOR identificó correctamente la
comestibilidad de cada hongo.
En este capítulo sólo se rascó la superficie de cómo se pueden utilizar los árboles
y las reglas. En el capítulo 6, la previsión de datos numéricos - Los métodos de
regresión, vamos a aprender las técnicas conocidas como árboles de regresión y
árboles modelo, que utilizan árboles de decisión para la predicción numérica en
lugar de la clasificación. En el capítulo 11, Mejora del rendimiento del modelo,
vamos a descubrir cómo el desempeño de los árboles de decisión se puede
mejorar
agruparlos en un modelo conocido como un bosque aleatorio. En el capítulo 8,
Encontrar patrones - Análisis de Market Basket las reglas de asociación, vamos a
ver cómo pueden normas-reglas-usarse una asociación relativa de clasificación para
identificar grupos de artículos en los datos transaccionales.

[ 113 ]
La previsión de datos
numéricos - Los
métodos de
regresión
Las relaciones matemáticas nos ayudan a comprender muchos aspectos de la vida
cotidiana. Por ejemplo, el peso corporal es una función de la propia ingesta de
calorías, el ingreso es a menudo relacionada
a la educación y experiencia de trabajo, y las encuestas nos ayudan a estimar las
probabilidades de un candidato presidencial de ser reelegido.
Cuando estas relaciones se expresan con números exactos, ganamos mayor
claridad. Por ejemplo, un adicional de 250 kilocalorías consumidas diariamente
pueden resultar en casi un kilogramo de aumento de peso por mes; cada año de
experiencia de trabajo puede ser un valor adicional de $ 1,000 en salario anual; y
un presidente es más probable que sea
reelegido cuando la economía es fuerte. Obviamente, estas ecuaciones no lo hacen a la
perfección
adaptarse a cada situación, pero se espera que sean razonablemente correcta, en
promedio.
En este capítulo se extiende nuestra caja de herramientas de aprendizaje automático
por ir más allá de los métodos de clasificación cubiertas previamente y la
introducción de técnicas para estimar las relaciones entre los datos numéricos. Al
examinar varias tareas de predicción numérica del mundo real, usted aprenderá:
• Los principios estadísticos básicos utilizados en la regresión, una técnica que
modela el tamaño y la fuerza de las relaciones numéricas
[ 171 ]
• Cómo preparar los datos para el análisis de regresión, y estimación e
interpretar un modelo de regresión
• Un par de técnicas híbridas conocidos como árboles de regresión y
árboles modelo, que se adaptan clasificadores árbol de decisión para
tareas de predicción numéricos

Sobre la base de un gran número de trabajos en el campo de las estadísticas, los


métodos utilizados en este capítulo son un poco más pesado en las matemáticas
de los contemplados anteriormente, pero no se preocupe! Incluso si sus
conocimientos de álgebra son un poco oxidado, R se encarga del trabajo pesado.

[ 172 ]
La previsión de datos numéricos - Regresión métodos

comprensión de regresión
Regresión se refiere a la especificación de la relación entre una variable única
numérico dependiente (el valor a ser predicho) y uno o más numérico
variables independientes (los predictores). Como su nombre lo indica, la variable
dependiente depende del valor de la variable independiente o variables. Las formas
más simples de regresión asumen que la relación entre las variables independientes
y dependientes sigue una línea recta.

El origen del término "regresión" para describir el proceso de ajuste


líneas de datos tiene sus raíces en un estudio de la genética por Sir Francis
Galton en el finales del siglo 19. Se descubrió que los padres que eran
extremadamente corto
o extremadamente alto tendían a tener hijos cuyas alturas estaban más cerca de la
altura media. Él llamó a este fenómeno "regresión a la media".

Se puede recordar de álgebra básica que las líneas se pueden definir de una forma
pendiente-intersección similar a y = a + bx. De esta forma, la letra Y indica la
variable dependiente y x indica la variable independiente. El término pendiente b
especifica cuánto
la línea se eleva para cada aumento de x. Los valores positivos definen líneas que
pendiente hacia arriba mientras que los valores negativos definen líneas que se
inclinan hacia abajo. El término una se conoce como el punto de intersección ya
que especifica el punto en el que la línea cruza, o intercepta, el eje y vertical. Se
indica el valor de y cuando x = 0.

Las ecuaciones de regresión de datos modelo utilizando un formato de pendiente-


intersección similares. El trabajo de la máquina es identificar los valores de a y b
para que la línea especificada es más capaz de relacionar los valores de x
suministrados a los valores de y. No siempre puede haber una única función que
relaciona a la perfección los valores, por lo que la máquina también debe tener
alguna manera de cuantificar el margen de error. Discutiremos esto en
profundidad en breve.

[ 173 ]
Capítulo 6

El análisis de regresión se utiliza comúnmente para modelar relaciones


complejas entre elementos de datos, la estimación del impacto de un tratamiento
en un resultado, y extrapolando hacia el futuro. A pesar de que se puede aplicar
a casi cualquier tarea, algunos casos de uso específicos incluyen:

• Examinar cómo las poblaciones y los individuos varían según sus


características medidas, para su uso en la investigación científica a
través de campos tan diversos como la economía, la sociología, la
psicología, la física y la ecología
• La cuantificación de la relación causal entre un evento y la respuesta, como
los de los ensayos clínicos de drogas, las pruebas de seguridad de ingeniería,
o investigación de mercados
• La identificación de patrones que se pueden utilizar para pronosticar
los futuros criterios conocidos dados de comportamiento, tales como
la predicción de las reclamaciones de seguros, daños por desastres
naturales, resultados de las elecciones, y las tasas de criminalidad
Los métodos de regresión se utilizan también para la prueba de hipótesis estadística,
que determina si una premisa es probable que sea verdadera o falsa a la luz de los
datos observados. Las estimaciones del modelo de regresión de la fuerza y la
consistencia de una relación proporcionan información que puede ser utilizada para
evaluar si las observaciones se deben al azar solo.

La prueba de hipótesis es extremadamente matizada y queda


fuera del ámbito de aprendizaje automático. Si usted está
interesado en este tema, una
introducción a la estadística libro de texto es un buen lugar para
empezar.

El análisis de regresión no es sinónimo de un único algoritmo. Más bien, es un


paraguas para un gran número de métodos que se puede adaptar a casi cualquier
tarea de aprendizaje de máquina. Si estaba limitado a elegir un solo método, la
regresión sería una buena opción. Se podría dedicar toda una carrera a otra cosa y
tal vez todavía tienen mucho que aprender.
En este capítulo, nos centraremos sólo en los modelos de los más básicos de
regresión lineal que utilizan líneas rectas. Cuando sólo hay una única variable
independiente se conoce como regresión lineal simple. En el caso de dos o más
variables independientes, esto se conoce como regresión lineal múltiple, o
simplemente "regresión múltiple". Ambas técnicas asumen que la variable
dependiente se mide en una escala continua.
Regresión también se puede utilizar para otros tipos de variables dependientes
e incluso para algunas tareas de clasificación. Por ejemplo, la regresión logística
[ 174 ]
se utiliza para modelar un resultado categórico binario, mientras que la
regresión de Poisson-nombrado después de la francesa
matemático Siméon Poisson-modelos de datos de recuento de número entero. El
método conocido como modelos de regresión logística multinomial un resultado
categórico; por lo tanto, se puede utilizar para la clasificación. Los mismos
principios básicos se aplican en todos los métodos de regresión, por lo que después
de entender el caso lineal, es bastante fácil de aprender los otros.

[ 175 ]
La previsión de datos numéricos - Regresión métodos

Muchos de los métodos de regresión especializados caen en una clase


de modelos lineales generalizados (GLM). El uso de un GLM,
modelos lineales se pueden generalizar a otros patrones a través de
la utilización de una función de enlace, que especifica formas más
complejas para la relación entre x e y.
Esto permite que la regresión a ser aplicado a casi cualquier tipo de datos.

Comenzaremos con el caso básico de regresión lineal simple. A pesar del


nombre, este método no es demasiado simple para hacer frente a problemas
complejos. En la siguiente sección, vamos a ver cómo el uso de un sencillo
modelo de regresión lineal podría haber evitado un desastre de ingeniería
trágica.

Regresión lineal simple


El 28 de enero de 1986, siete miembros de la tripulación del transbordador espacial
Challenger Estados Unidos murieron cuando un cohete falló, causando una
desintegración catastrófica. En la secuela, los expertos se centraron en la temperatura
de puesta en marcha como un posible culpable. Las juntas tóricas de goma
responsables para el sellado de las juntas de cohetes nunca habían sido probados por
debajo de 40ºF (4ºC) y el tiempo en el día de lanzamiento era inusualmente frío y por
debajo de la congelación.
Con la perspectiva del tiempo, el accidente ha sido un caso de estudio para la
importancia del análisis de datos y visualización. Aunque no está claro qué
información estaba disponible para los ingenieros de cohetes y los tomadores de
decisiones previas a la puesta en marcha, es innegable que mejores datos, utilizados
con cuidado, podrían muy bien haber evitado este desastre.

El análisis de esta sección se basa en los datos presentados


en Dalal SR, Fowlkes EB, Hoadley B. El análisis de riesgos
de la lanzadera espacial: pre-Challenger predicción de
fracaso. Revista de la Asociación Americana de Estadística.
1989; 84: 945-957. Por una perspectiva sobre cómo los datos
pueden haber cambiado el resultado, ver Tufte ER. Las
explicaciones visuales: Imágenes y cantidades, la evidencia
y la narrativa. Gráficos de Prensa; 1997. Para un
contrapunto, véase
Robison W, R Boisioly, Hoeker D, joven, S. Representación y
falsedad: Tufte y los ingenieros de Morton Thiokol en el
Challenger. Ciencia y Ética Ingeniería. 2002; 8: 59-81.

Los ingenieros de cohetes casi seguro que sabían que las bajas temperaturas
podrían hacer que los componentes más frágiles y menos capaces de sellar
[ 176 ]
adecuadamente, lo que resultaría en una mayor probabilidad de una fuga de
combustible peligroso. Sin embargo, dada la presión política para
continuar con la puesta en marcha, se necesitan datos para apoyar esta hipótesis.
Un modelo de regresión que demostró una relación entre la temperatura y el
fracaso junta tórica, y podría pronosticar la posibilidad de fracaso debido a la
temperatura esperada en el lanzamiento, podría haber sido muy útil.

[ 177 ]
Capítulo 6

Para construir el modelo de regresión, los científicos podrían haber utilizado los
datos de la temperatura y la puesta en marcha componente angustias de 23
lanzamientos exitosos de transporte anteriores. Un componente de socorro indica
uno de los dos tipos de problemas. El primer problema, denominado erosión, se
produce cuando el calor excesivo quema hasta la junta tórica. El segundo
problema,
llamado blowby, se produce cuando gases calientes se filtran a través de o "golpe por"
una junta tórica de mal sellado. Dado que el servicio de transporte tiene un total de
seis juntas tóricas primarios, hasta seis angustias puede ocurrir por vuelo. Aunque el
cohete puede sobrevivir uno o más eventos de socorro, o no, con tan sólo una, cada
una dificultad adicional aumenta la probabilidad de un fallo catastrófico.
El siguiente diagrama de dispersión muestra una gráfica de O-anillo primario
angustias detectada para los 23 lanzamientos anteriores, en comparación con la
temperatura en el lanzamiento:

El examen de la trama, existe una tendencia evidente. Lanza que ocurren a


temperaturas más altas tienden a tener menos eventos de socorro O-anillo.

Además, el lanzamiento más frío (53º F) tenía dos eventos de socorro, un nivel
que sólo se había alcanzado en otro lanzamiento. Con esta información en mano,
el hecho de que el Challenger fue programado para ser lanzado a una
temperatura de más de 20 grados
más frío parece preocupante. Pero exactamente cuán preocupados deberíamos estar? Para
responder a esta
pregunta, podemos convertir a la regresión lineal simple.
Un modelo de regresión lineal simple define la relación entre una variable
dependiente y una sola variable predictor independiente usando una línea
definida por una ecuación de la siguiente forma:

[ 178 ]
La previsión de datos numéricos - Regresión métodos

No se alarme por los caracteres griegos, esta ecuación todavía se puede entender
usando la forma pendiente-intersección descrito previamente. La intersección, α
(alfa), describe dónde la línea cruza el eje y, mientras que la pendiente, β (beta),
describe el cambio en
y dado un aumento de x. Para los datos de lanzamiento del transbordador, la
pendiente nos diría la reducción prevista en el número de fallos tóricas para
cada grado que la temperatura aumenta de lanzamiento.

caracteres griegos se utilizan a menudo en el campo de las


estadísticas para indicar variables que son parámetros de una
función estadística. Por lo tanto, la realización de un análisis de
regresión consiste en encontrar parámetros estimados para α y β.
Los parámetros estimados para alfa y beta son a menudo denotan
usando a y b, aunque es posible que algunos de esta terminología
y la notación se usa de manera intercambiable.

Supongamos que sabemos que los parámetros de regresión estimados en la


ecuación para los datos de lanzamiento del transbordador son: a = 3,70 y b = -
0,048.

Por lo tanto, la ecuación lineal completo es y = 3,70 - 0.048x. Ignorando por un


momento cómo se obtuvieron estos números, podemos trazar la línea en el
diagrama de dispersión de esta manera:

A medida que la línea de muestra, a 60 grados Fahrenheit, predecimos algo menos


de un malestar junta tórica. A 70 grados Fahrenheit, se espera que alrededor de 0,3
fracasos. Si extrapolamos nuestro modelo, hasta llegar a 31 grados, la temperatura
prevista para el lanzamiento del Challenger-esperaríamos aproximadamente 3,70 -
0,048 * 31 = 2.21 eventos de socorro tóricas.
Suponiendo que cada fracaso junta tórica es igualmente probable que cause una
[ 179 ]
fuga de combustible catastrófico significa que el lanzamiento Challenger a 31
grados era casi tres veces más arriesgado que el lanzamiento típico a 60 grados, y
más de ocho veces más arriesgado que un lanzamiento a 70 grados .

[ 180 ]
Capítulo 6

Observe que la línea no pasa por cada punto de datos con exactitud. En lugar
de ello, se corta a través de los datos algo de manera uniforme, con algunas
predicciones menor o mayor que
la línea. En la siguiente sección, vamos a aprender acerca de por qué se eligió esta línea en
particular.

Ordinaria estimación por mínimos cuadrados


Con el fin de determinar las estimaciones óptimas de α y β, un método de
estimación conocido como Mínimos Cuadrados Ordinarios (OLS) se utilizó. En
la regresión OLS, la pendiente y la intersección se eligen de modo que
minimizan la suma de los errores cuadráticos, es decir, la distancia vertical entre
el valor previsto y el valor de y real. Estos errores se conocen como residuos, y se
ilustran para varios puntos en el diagrama siguiente:

En términos matemáticos, el objetivo de la regresión por mínimos cuadrados se


puede expresar como la tarea de reducir al mínimo la siguiente ecuación:

En lenguaje llano, esta ecuación define e (el error) como la diferencia entre el valor
de y real y el valor previsto. Los valores de error se elevan al cuadrado y se suman
en todos los puntos en los datos.

El carácter de intercalación (^) encima del término y es una


característica comúnmente usada de notación estadística. Se indica
que el término es una estimación para el verdadero valor y. Esto se
conoce como la ordenada en el sombrero, y se pronuncia
[ 181 ]
exactamente igual que el sombrero que usaría en su cabeza.

[ 182 ]
La previsión de datos numéricos - Regresión métodos

La solución para un depende del valor de b. Se puede obtener mediante


la siguiente fórmula:

Para entender estas ecuaciones, necesitará conocer otro


poco de notación estadística. La barra horizontal que
aparece sobre la x y términos Y indica el valor medio de x o
y. Esto se conoce como el X-bar o Y-bar, y se pronuncia
igual que el establecimiento que iría a por una bebida
alcohólica.

Aunque la prueba está más allá del alcance de este libro, se puede demostrar
utilizando el cálculo de que el valor de b que se traduce en un mínimo error
cuadrado es:

Si partimos de esta ecuación aparte en sus piezas componentes, podemos


simplificar un poco. El denominador para B debería resultar familiar; es muy
similar a la varianza de x, que se denota como Var (x). Como aprendimos en el
capítulo 2, gestionar y comprender los datos, la variación consiste en encontrar la
media de la desviación al cuadrado de la media de
X. Esto se puede expresar como:

El numerador consiste en tomar la suma de la desviación de cada punto de datos


desde el valor x medio multiplicado por la desviación de ese punto lejos del valor de
y media. Esto es similar a la función de covarianza para x e y, que se denota como
Cov (x, y). La fórmula de covarianza es:

Si dividimos la función de covarianza por la función de varianza, los n


términos se cancelan y podemos reescribir la fórmula para b como:

[ 183 ]
Capítulo 6

Teniendo en cuenta esta actualización, es fácil calcular el valor de b usando


funciones incorporadas de R. Vamos a aplicar a los datos de lanzamiento de cohetes
para estimar la línea de regresión.

Si desea seguir junto con estos ejemplos, descargue el archivo desde el


sitio web challenger.csv Packt Publishing y la carga de una trama de
datos usando el lanzamiento <- read.csv de comandos (
"challenger.csv").

Supongamos que nuestros datos lanzamiento del transbordador se almacena en una


lancha llamada trama de datos, la variable independiente x es la temperatura, y la
variable dependiente y es distress_ct. entonces podemos utilizar cov de R () y var ()
para estimar b:
> b <- cov ($ lanzamiento de temperatura,
lanzamiento distress_ct $) / var ($
lanzamiento de temperatura)
> segundo
[1] -0,04753968

Desde aquí se puede estimar utilizando la función de un medio ():


> un <- media ($ lanzamiento distress_ct) - b * media (temperatura $
lanzamiento)
> una
[1] 3.698413

Estimación de la ecuación de regresión con la mano no es lo ideal, por lo que R


proporciona funciones para la realización de este cálculo de forma automática.
Vamos a utilizar estos métodos en breve. En primer lugar, vamos a ampliar nuestra
comprensión de la regresión mediante el aprendizaje de un método para medir la
fuerza de una relación lineal, y luego veremos como la regresión lineal se puede
aplicar a datos que tienen más de una variable independiente.

correlaciones
La correlación entre dos variables es un número que indica cómo de cerca su
relación sigue una línea recta. Sin calificación adicional, la correlación se refiere
típicamente a coeficiente de correlación de Pearson, que fue desarrollado por el
matemático del siglo 20 Karl Pearson. La correlación oscila entre -1 y +1. Los valores
extremos indican una relación perfectamente lineal, mientras que una correlación
cercano a cero indica la ausencia de una relación lineal.

[ 184 ]
La previsión de datos numéricos - Regresión métodos

La siguiente fórmula define de correlación de Pearson:

Más notación griega se ha introducido aquí. El primer símbolo


(que se parece a una p minúscula) es rho, y se utiliza para
denotar la estadística de correlación de Pearson. Los personajes
que se parecen q colocado de manera lateral son las sigma letra
griega, e indican la desviación estándar de x o y.

Usando esta fórmula, podemos calcular la correlación entre la temperatura de


lanzamiento y el número de eventos de socorro O-anillo. Recordemos que la función
de covarianza es cov () y la función de desviación estándar se SD (). Vamos a
almacenar el resultado en R,
una carta que se utiliza comúnmente para indicar la correlación estimada:
> r <- cov ($ lanzamiento de temperatura, lanzamiento
distress_ct $) / (SD ($ lanzamiento de
temperatura) * SD ($ lanzamiento distress_ct))
> r
[1] -0,5111264

Alternativamente, podemos utilizar la función de correlación de R, cor ():


> cor ($ lanzamiento de temperatura,
lanzamiento $ distress_ct) [1] -0.5111264

La correlación entre la temperatura y el número de juntas tóricas en dificultades es


-0.51. La correlación negativa implica que el aumento de la temperatura están
relacionadas con las disminuciones en el número de juntas tóricas en dificultades.
Para los ingenieros de la NASA que estudian los datos tóricas, esto hubiera sido un
indicador muy claro que una temperatura baja
lanzamiento podría ser problemático. La correlación también nos dice acerca de la
fuerza relativa de la relación entre la temperatura y la angustia O-ring. Debido a -0,51
es a medio camino de la correlación negativa máxima de -1, esto implica que existe
una asociación lineal negativa moderadamente fuerte.
Hay varias reglas generales utilizados para interpretar la fuerza de correlación. Un
método asigna un estado de "débil" a valores entre 0,1 y 0,3, "moderado" a la gama
de 0,3 a 0,5, y "fuerte" a valores por encima de 0,5 (éstos también se aplican a
rangos similares de correlaciones negativas). Sin embargo, estos umbrales
pueden ser demasiado laxa para algunos
propósitos. A menudo, la correlación debe interpretarse en su contexto. Para los
[ 185 ]
datos en seres humanos, una correlación de 0,5 puede considerarse
extremadamente alta, mientras que para los datos generados por procesos
mecánicos, una correlación de 0,5 puede ser débil.

[ 186 ]
Capítulo 6

Usted probablemente ha escuchado la expresión "correlación no


implica causalidad." Esto se basa en el hecho de que una correlación
sólo describe la asociación entre un par de variables, sin embargo,
podría haber otras explicaciones no medidos. Por ejemplo, puede
haber una fuerte asociación entre la mortalidad y el tiempo
dedicado diariamente a juego películas, pero antes de que los
médicos deberían comenzar a recomendar que todos ver más
películas, tenemos que descartar otra explicación- personas más
jóvenes ven más películas y son menos propensos a morir.

La medición de la correlación entre dos variables nos da una manera de medir


rápidamente las relaciones entre las variables independientes y dependientes.
Esto será cada vez más importante a medida que comenzamos la definición de
los modelos de regresión con un mayor número de predictores.

Regresión lineal múltiple


La mayor parte del mundo real análisis tienen más de una variable independiente.
Por lo tanto, es probable que va a ser el uso de regresión lineal múltiple para la
mayoría de tareas de predicción numéricos. Las fortalezas y debilidades de
regresión lineal múltiple se muestran en la siguiente tabla:

fortalezas debilidades
• Con mucho, el método más • Hace fuertes suposiciones acerca de
común para el modelado de datos los datos
numéricos • La forma del modelo debe ser
• Puede ser adaptado para modelar especificado por el usuario con
casi cualquier tarea de modelado antelación
• Proporciona estimaciones tanto de la • No maneja los datos que faltaban
fuerza y el tamaño de las relaciones • Sólo funciona con características
entre las características y los numéricas, por lo que los datos
resultados categóricos requiere un
procesamiento adicional
• Requiere un cierto conocimiento
de las estadísticas para
comprender el modelo

Podemos entender regresión múltiple como una extensión de la regresión lineal


simple. El objetivo en ambos casos es similar-encontrar valores de los coeficientes
beta que reduzcan al mínimo el error de predicción de una ecuación lineal. La
diferencia clave es que hay condiciones adicionales para las variables
independientes adicionales.

[ 187 ]
La previsión de datos numéricos - Regresión métodos

ecuaciones de regresión múltiple generalmente siguen la forma de la siguiente


ecuación. La variable dependiente y se especifica como la suma de una intercepción
α plazo más el producto del valor estimado β y los valores x para cada una de las
características i. Un término de error (denotado por la letra griega épsilon) se ha
añadido aquí como un recordatorio de que las predicciones no son perfectos. Esto
representa el término residual se señaló anteriormente:

Consideremos por un momento a la interpretación de los parámetros de regresión


estimados. Usted notará que en la ecuación anterior, se proporciona un coeficiente
para cada función. Esto permite que cada característica de tener un efecto estimado
por separado sobre el valor de y. En otras palabras, y cambia en la cantidad βi para
cada unidad de aumento en xi. La intersección α es entonces el valor esperado de y
cuando las variables independientes son todos cero.

Puesto que el término de intersección α es realmente no es diferente de cualquier


otro parámetro de regresión, que también a veces se denota como β0 (pronunciado
beta-nada), como se muestra en la siguiente ecuación:

Al igual que antes, la intersección no está relacionado con ninguna de las


variables independientes x. Sin embargo, por razones que se aclararán en breve,
ayuda imaginar β0 como si estuviera siendo multiplicada por un término x0, que
es una constante con el valor 1:

Con el fin de estimar los valores de los parámetros de regresión, cada valor
observado de la variable dependiente y debe estar relacionado con los valores
observados de las variables x independientes usando la ecuación de regresión en la
forma anterior. La siguiente figura ilustra esta estructura:

[ 188 ]
Capítulo 6

Las muchas filas y columnas de datos ilustrados en la figura anterior se pueden


describir en una formulación condensada usando la notación de matriz de fuente
en negrita para indicar que cada uno de los términos representa múltiples
valores:

La variable dependiente es ahora un vector, Y, con una fila para cada ejemplo. Las
variables independientes se han combinado en una matriz, X, con una columna
para cada característica más una columna adicional de '1' valores para el término de
intersección. Cada columna tiene una fila para cada ejemplo. Los coeficientes de
regresión beta y errores residuales ε son también ahora vectores.
Ahora el objetivo es resolver para β, el vector de coeficientes de regresión que
minimiza la suma de los errores al cuadrado entre los valores y pronosticados y los
reales. Encontrar la solución óptima requiere el uso de álgebra de matrices; Por lo
tanto, la derivación merece una atención más cuidadosa que puede ser
proporcionada en este texto. Sin embargo, si usted está dispuesto a confiar en el
trabajo de los demás, la mejor estimación del vector β puede calcularse como:

[ 189 ]
La previsión de datos numéricos - Regresión métodos

Esta solución utiliza un par de operaciones de la matriz T indica la transpuesta de la


matriz X, mientras que el exponente negativo indica la matriz inversa. Utilizando las
operaciones con matrices incorporadas de R, que así se puede poner en práctica un
simple aprendiz de regresión múltiple.
Vamos a aplicar esta fórmula a los datos de lanzamiento del Challenger.

Si no está familiarizado con las operaciones con matrices


anteriores, las páginas de Wikipedia de la transposición y la
matriz inversa proporcionan una introducción a fondo y son
bastante comprensible, incluso sin una sólida formación
matemática.

Usando el siguiente código, podemos crear un registro llamado función de


regresión básica (), que toma un parámetro y, y un parámetro x y devuelve un
vector de coeficientes beta estimados:
reg <- function (y, x)
{x <- as.matrix (x)
x <- cbind (Intercepción = 1, x)
b <- resolver (t (x)% *% x)% *% t
(x)% *% Y COLNAMES (b) <-
"estimación"
impresión (b)
}

La función de registro () creado aquí usa varios comandos R que no hemos utilizado
anteriormente. Primero, ya que vamos a utilizar la función con conjuntos de
columnas de una trama de datos, la función as.matrix () se utiliza para convertir la
trama de datos en forma de matriz. A continuación, la función cbind () se utiliza para
enlazar una columna adicional sobre la matriz x; el comando Intercepción = 1
instruye R para nombrar el nuevo Intercepción de columna y para llenar la columna
con la repetición de 1 valores. Luego, una serie de operaciones de la matriz se
realizan en la x y objetos Y:
• resolver() toma la inversa de una matriz
• t () se utiliza para transponer una matriz
• % *% multiplica dos matrices

Mediante la combinación de estos como se muestra, nuestra función devolverá un


vector b, que contiene los parámetros estimados para el modelo lineal que relaciona
x a y. Las dos últimas líneas de la función de darle la b vector un nombre e imprimir
el resultado en la pantalla.
[ 190 ]
Capítulo 6

Vamos a aplicar nuestra función de los datos de lanzamiento del transbordador.


Como se muestra en el código siguiente, el conjunto de datos incluye tres
características y el recuento de angustia (distress_ct), que es el resultado de interés:
> str (el lanzamiento)
'Hoja.de.datos': 23 obs. de4 variables:
P distress_ct: En 0 1 0 0 0 0 0 0 1 1 ...
S t
P temperatura: En 66 70 69 68 67 72 73 70 57 63 ...
S t
P field_check_pressure: En 50 50 50 50 50 50 100 100 200 ...
S t
P flight_num: En 1 2 3 4 5 6 7 8 9 10 ...
S t

Podemos confirmar que nuestra función está funcionando correctamente mediante


la comparación de sus resultados con el modelo de regresión lineal simple de los
fallos del anillo o frente a la temperatura, lo cual nos pareció más temprano para
tener parámetros a = 3,70 y b = -0,048. Puesto que la temperatura se encuentra en la
tercera columna de los datos de lanzamiento, que puede ejecutar la función de reg
() como sigue:
> reg (y = lanzamiento $ distress_ct, x = lanzamiento [2])
estimar
Intercept3.69841270
temperatura -0.04753968

Estos valores coinciden exactamente con nuestro resultado previo, por lo que
vamos a utilizar la función de construir un modelo de regresión múltiple.
Vamos a aplicar es igual que antes, pero esta vez la especificación de tres
columnas de datos en lugar de sólo uno:
> reg (y = lanzamiento $ distress_ct, x = lanzamiento [2: 4])
estimar
Interceptar 3,527093383
temperatura -0.051385940
field_check_pressure 0,001757009
flight_num 0,014292843

Este modelo predice el número de eventos tóricas de socorro frente a la


temperatura, la presión de verificación de campo, y el número ID de lanzamiento.
Al igual que con el modelo de regresión lineal simple, el coeficiente para la
variable de temperatura es negativo, lo que sugiere que a medida que aumenta la
temperatura, el número de eventos tóricas esperados disminuye. La presión de
verificación de campo se refiere a la cantidad de presión aplicada a la junta tórica
[ 191 ]
para probar
que antes del lanzamiento. Aunque la presión cheque había sido originalmente de
50 psi, que se elevó a 100 y 200 psi para algunos lanzamientos, lo que llevó a
algunos a creer que puede ser responsable de la erosión de la junta tórica. El
coeficiente es positivo, pero pequeñas. El número de vuelo se incluye para tener en
cuenta la edad de la lanzadera. A medida que envejece, sus partes pueden ser más
frágil o propensos a fallar. La pequeña asociación positiva entre el número de vuelo
y el recuento de angustia puede reflejar este hecho.

[ 192 ]
La previsión de datos numéricos - Regresión métodos

Hasta ahora sólo hemos arañado la superficie de un modelo de regresión lineal. A


pesar de que nuestro trabajo era útil para ayudarnos a entender exactamente cómo
se construyen los modelos de regresión, las funciones de R también incluye alguna
funcionalidad adicional necesaria para las tareas de modelado más complejas y
salida de diagnóstico que se necesitan para ayudar a la interpretación de modelo y
evaluar en forma. Vamos a aplicar nuestro conocimiento de la regresión a una tarea
de aprendizaje más difícil.

Ejemplo - predecir los gastos médicos


utilizando regresión lineal
Para que una compañía de seguros de salud para hacer dinero, tiene que recoger más
en las primas anuales de lo que gasta en la atención médica a los beneficiarios.
Como resultado, las aseguradoras invierten una gran cantidad de tiempo y dinero
en el desarrollo de modelos que pronostican con precisión los gastos médicos para
la población asegurada.
Los gastos médicos son difíciles de estimar debido a las condiciones más costosas
son raros y aparentemente al azar. Sin embargo, algunas condiciones son más
frecuentes para ciertos segmentos de la población. Por ejemplo, el cáncer de pulmón
es más probable entre los fumadores que en no fumadores, y enfermedades del
corazón puede ser más probable entre los obesos.

El objetivo de este análisis es el uso de los datos del paciente para estimar el promedio
médica
cuidar los gastos para tales segmentos de la población. Estas estimaciones se
pueden utilizar para crear tablas actuariales que fijan el precio de las primas
anuales mayores o menores, dependiendo de los costos de tratamiento esperados.

Paso 1 - recogida de datos


Para este análisis, vamos a utilizar un conjunto de datos simulados que contiene
hipotéticos gastos médicos para los pacientes en los Estados Unidos. Estos datos se
creó para este libro utilizando las estadísticas demográficas de la oficina de censo
de Estados Unidos, y por lo tanto, aproximadamente reflejan las condiciones del
mundo real.

Si desea seguir a lo largo de forma interactiva, descargue el


archivo desde el sitio web insurance.csv Packt Publishing y
guardarlo en su carpeta de trabajo R.

[ 193 ]
Capítulo 6

El archivo incluye insurance.csv 1.338 ejemplos de beneficiarios que actualmente


están inscritos en el plan de seguro, con características que indica características del
paciente, así como los gastos médicos totales cargados al plan para el año calendario.
Las características son:

• años: Un entero que indica la edad del beneficiario primario (excluyendo


los de arriba 64 años, ya que están generalmente cubiertos por el
gobierno).
• sexo: El sexo del titular de la póliza, ya sea hombre o mujer.
• bmi: El índice de masa corporal (IMC), que proporciona un sentido de cómo
más o de menos peso que una persona es relativa a su altura. El IMC es igual
al peso (en kilogramos) dividido por la altura (en metros) al cuadrado. Un
IMC ideal está dentro del intervalo de 18,5 a 24,9.
• niños: Un entero que indica el número de niños / dependientes cubiertos
por el plan de seguro.
• fumador: Un sí o no variable categórica que indica si el asegurado fuma
regularmente tabaco.
• región: El lugar del beneficiario de residencia en los EE.UU., dividido
en cuatro regiones geográficas: noreste, sureste, suroeste o noroeste.

Es importante pensar un poco en cómo estas variables pueden estar relacionados


con facturado gastos médicos. Por ejemplo, podríamos esperar que las personas
mayores y los fumadores
se encuentran en mayor riesgo de grandes gastos médicos. A diferencia de muchos
otros métodos de aprendizaje automático, en el análisis de regresión, las relaciones
entre las características son típicamente especificados por el usuario en lugar de ser
detectado automáticamente. Vamos a explorar algunas de estas posibles relaciones
en la siguiente sección.

Paso 2 - exploración y la preparación de los


datos
Como lo hemos hecho antes, vamos a utilizar la función read.csv () para cargar los
datos para su análisis. Podemos utilizar con seguridad stringsAsFactors =
VERDADERO porque es apropiada para convertir las tres variables nominales de
factores:
> seguros <- read.csv ( "insurance.csv", stringsAsFactors = VERDADERO)

La función str () confirma que los datos se formatea como habíamos esperado:
> str (seguro)

[ 194 ]
'Hoja.de.datos': 1338 obs. of7 variables:
PS años: int19 18 28 33 32 31 46 37 37 60 ...
PS Sexo: Factor w / 2 niveles "hembra", "macho": 1 2 2 2 2 1 ...
PS IMC: num27.9 33,8 33 22,7 28,9 25,7 33,4 27,7 ...
$ hijos: INT0 1 3 0 0 0 1 3 2 0 ...

[ 195 ]
La previsión de datos numéricos - Regresión métodos

PS fumador: Factor w / 2 niveles "no", "Sí": 2 1 1 1 1 1 1 1 ...


PS región: Factor w / 4 niveles "Nordeste", "Noroeste", ..: ...
$ Gastos: num16885 1726 4449 21984 3867 ...

variable dependiente de nuestro modelo es los gastos, que mide los costos médicos
por cada persona a cargo del plan de seguro para el año. Antes de la construcción de
un modelo de regresión, a menudo es útil para comprobar la normalidad. Aunque
regresión lineal no requiere estrictamente una variable dependiente normalmente
distribuidos, el modelo a menudo se adapta mejor cuando esto es cierto. Vamos a
echar un vistazo a las estadísticas de resumen:
> Resumen (gastos de seguro de $)
Min. primeroQu.MedianMean
tercero Qu. Max. 1122474093821327016640
63770

Debido a que el valor medio es mayor que la mediana, esto implica que la distribución de
gastos de seguro es sesgada de derecha. Podemos confirmar esto visualmente utilizando
un histograma:
> hist (gastos de seguro de $)

La salida se muestra como sigue:

[ 196 ]
Capítulo 6

Como era de esperar, la figura muestra una distribución sesgada de derecha. También
muestra que la
mayoría de la gente en nuestros datos tienen gastos médicos anuales entre cero y
$ 15.000, a pesar del hecho de que la cola de la distribución se extiende mucho
más allá de estos picos. Aunque esta distribución no es ideal para una regresión
lineal, a sabiendas de esta debilidad antes de tiempo puede ayudar a diseñar un
mejor modelo de ajuste más adelante.
Antes de abordar esta cuestión, es otro problema que nos ocupa. Los modelos de
regresión requerir que cada función es numérico, sin embargo, tenemos tres
características de tipo factor en nuestra trama de datos. Por ejemplo, la variable sexo
se divide en niveles masculinos y femeninos, mientras fumador está dividido en sí y
no. Desde la salida de resumen (), sabemos que la variable región tiene cuatro
niveles, pero tenemos que echar un vistazo más de cerca para ver cómo se
distribuyen:
> mesa ($ región de seguros)
sureste al noroeste noreste suroeste
324325364325

Aquí, vemos que los datos se ha dividido casi por igual entre las cuatro
regiones geográficas. Vamos a ver cómo la función de regresión lineal de R
se encarga de estas variables de factor poco.

Exploración de las relaciones entre


características - la matriz de correlación
Antes de colocar un modelo de regresión a los datos, que puede ser útil para
determinar cómo las variables independientes están relacionados con la
variable dependiente y entre sí. Una matriz de correlación proporciona una
visión rápida de estas relaciones. Dado un conjunto de variables, que
proporciona una correlación para cada relación pairwise.
Para crear una matriz de correlación para las cuatro variables numéricas en la
trama de datos seguro, utilice el comando cor ():
> cor (seguro [c ( "edad", "IMC", "niños", "gastos")])
años bmi niños gastos
años 1.0000000 0.10934101 0.04246900 0.29900819
bmi 0.1093410 1.00000000 0.01264471 0.19857626
niños 0.0424690 0.01264471 1.00000000 0.06799823
gastos 0.2990082 0.19857626 0.06799823 1.00000000

[ 197 ]
La previsión de datos numéricos - Regresión métodos

En la intersección de cada fila y columna par, la correlación aparece para las


variables indicadas por esa fila y columna. La diagonal es siempre 1.0000000 ya que
siempre hay una correlación perfecta entre una variable y ella misma. Los valores
por encima y por debajo de la diagonal son idénticos, puesto que las correlaciones
son simétricos. En otras palabras, cor (x, y) es igual a COR (y, x).
Ninguna de las correlaciones en la matriz se consideran fuerte, pero hay algunas
asociaciones notables. Por ejemplo, la edad y el IMC parecen tener una correlación
positiva débil, lo que significa que a medida que alguien las edades, su masa
corporal tiende a aumentar. También hay una correlación positiva moderada entre
la edad y los gastos, el IMC y los gastos, y los niños y los gastos. Estas asociaciones
implican que como la edad, la masa corporal, y el número de niños que aumentar,
el costo esperado de seguros sube. Vamos a tratar de desentrañar estas relaciones
más claramente cuando construimos nuestro modelo de regresión final.

La visualización de las relaciones entre las


características - la matriz de dispersión
También puede ser útil para visualizar las relaciones entre las características
numéricas mediante el uso de un diagrama de dispersión. Aunque se podría crear
un diagrama de dispersión para cada relación posible, hacerlo por un gran número
de características podría llegar a ser tedioso.

Una alternativa es crear una matriz de dispersión (a veces abreviado como


SPLOM), que es simplemente una colección de diagramas de dispersión dispuestos
en una rejilla. Se utiliza para detectar patrones entre tres o más variables. El
diagrama de dispersión matricial no es un verdadero visualización
multidimensional ya que sólo dos características se examinan a la vez. Aún así,
proporciona una sensación general de cómo pueden estar relacionados entre sí los
datos.
Podemos utilizar las capacidades gráficas de R para crear una matriz de
dispersión para las cuatro funciones numéricas: edad, índice de masa corporal, los
niños y los gastos. La función de pares () se proporciona en una instalación R
predeterminado y proporciona la funcionalidad básica para la producción de
diagramas de dispersión matriciales. Para invocar la función, proporcionar
simplemente que la trama de datos a presentar. Aquí, nos limitaremos la trama de
datos seguros para las cuatro variables numéricas de interés:
> pares (seguro [c ( "edad", "IMC", "niños", "gastos")])

[ 198 ]
Capítulo 6

Esto produce el siguiente diagrama:

En la matriz de dispersión, la intersección de cada fila y columna contiene el


diagrama de dispersión de las variables indicadas por la fila y columna par. Los
diagramas encima y por debajo de la diagonal son transposiciones desde el eje
X y el eje Y se han intercambiado.
¿Usted nota patrones en estas parcelas? Aunque algunas se ven como nubes de
puntos al azar, unos pocos parecen mostrar algunas tendencias. La relación entre
la edad y los gastos muestra varias líneas relativamente rectas, mientras que el
índice de masa corporal en comparación con los gastos parcela tiene dos grupos
distintos de puntos. Es difícil detectar tendencias en cualquiera de las otras
parcelas.

[ 199 ]
La previsión de datos numéricos - Regresión métodos

Si añadimos más información de la trama, que puede ser aún más útil. Una matriz de
dispersión mejorada puede ser creado con la función de los pairs.panels () en el
paquete de Psych. Si no tiene este paquete instalado, tipo install.packages ( "Psych")
para instalarlo en su sistema y cargarlo con el comando de la biblioteca (psicología).
Entonces, podemos crear un diagrama de dispersión matricial como habíamos hecho
con anterioridad:
> pairs.panels (seguro [c ( "edad", "IMC", "niños", "gastos")])

Esto produce una matriz de dispersión ligeramente más informativo, como se muestra
aquí:

Por encima de la diagonal, los diagramas de dispersión han sido reemplazados


con una matriz de correlación. En la diagonal, se muestra un histograma que
representa la distribución de valores para cada característica. Por último, los
diagramas de dispersión por debajo de la diagonal se presentan ahora con la
información visual adicional.

[ 200 ]
Capítulo 6

El objeto de forma ovalada en cada diagrama de dispersión es una elipse de


correlación. Se proporciona una visualización de la fuerza de correlación. El punto
en el centro de la elipse indica el punto en los valores medios de las variables de los
ejes x e y. La correlación entre las dos variables se indica mediante la forma de la
elipse; cuanto más se estira, más fuerte es la correlación. Un óvalo casi
perfectamente redonda, al igual que con el IMC y los niños, indica una correlación
muy débil (en este caso, es 0,01).
La curva dibujada en el diagrama de dispersión se llama una curva de loess. Indica
la relación general entre las x y las variables del eje y. Se entiende mejor con el
ejemplo. La curva de la edad y los niños es una U invertida, con un pico en torno a la
mediana edad. Esto significa que la gente mayor y menor en la muestra tienen un
menor número de niños en el plan de seguro que los alrededor de la mediana edad.
Debido a que esta tendencia no es lineal, este hallazgo no podría haberse deducido
de las correlaciones por sí solos. Por otro lado, la curva de loess para la edad y el
IMC es una línea poco a poco inclinada hacia arriba, lo que implica que la masa
corporal aumenta con la edad, pero ya habíamos deducido esto de la matriz de
correlación.

Paso 3 - la formación de un modelo sobre los


datos
Para ajustar un modelo de regresión lineal a los datos con R, la función lm () se
puede utilizar. Esto está incluido en el paquete de estadísticas, que debe ser
incluido y carga por defecto con la instalación de R. La sintaxis lm () es como
sigue:

[ 201 ]
La previsión de datos numéricos - Regresión métodos

El siguiente comando se ajusta a un modelo de regresión lineal que relaciona los seis
independiente
las variables a los gastos médicos totales. La sintaxis de la fórmula R utiliza el carácter de
tilde
~ Para describir el modelo; los gastos variables dependientes va a
la izquierda de la tilde mientras que las variables independientes
van a la derecha, separados por signos +. No hay necesidad de
especificar término de intersección del modelo de regresión, ya que
se asume por defecto:

> ins_model <- LM (gastos de edad ~ + hijos + IMC + sexo


+ + fumador región, data = seguro)

Porque el . personaje puede ser utilizado para especificar todas las características
(excluyendo los ya especificados en la fórmula), el siguiente comando es
equivalente al comando anterior:
> ins_model <- LM (. ~ los gastos, los datos del seguro =)

Después de construir el modelo, simplemente escriba el nombre del objeto de modelo


para ver la
coeficientes beta estimado:
> ins_model

Llamada:
(lm fórmula = gastos de ~., datos del seguro =)

coeficientes:
edad (Intercepción) sexo masculino
-11941.6256.8 -131.4
bmichildren smokeryes
339.3475.7 23847.5
regionnorthwestregionsoutheast
regionsouthwest
-352,8-1.035,6 -959.3

La comprensión de los coeficientes de regresión es bastante sencillo. la intersección


es el valor previsto de gastos cuando las variables independientes son iguales a cero.
Como es el caso aquí, muy a menudo el punto de intersección es de poco valor solo
porque es imposible tener valores de cero para todas las funciones. Por ejemplo, ya
existe ninguna persona con cero edad y el IMC cero, el punto de intersección no
tiene ninguna interpretación del mundo real. Por esta razón, en la práctica, la
intersección es a menudo ignorada.
[ 202 ]
Capítulo 6

Los coeficientes beta indican el aumento estimado de los gastos de un aumento de


una en cada una de las características, suponiendo que todos los demás valores se
mantienen constantes. Por ejemplo, por cada año adicional de edad, esperaríamos
que los gastos médicos $ 256.80 más altos en promedio, suponiendo que todo lo
demás es igual. Del mismo modo, los resultados de cada hijo adicional en un
promedio de $ 475.70 en gastos médicos adicionales cada año, y cada unidad de
aumento en el IMC se asocia con un aumento promedio de $ 339.30 en gastos
médicos anuales, todo lo demás igual.
Usted puede notar que a pesar de que únicamente el seis características en nuestra
fórmula modelo, hay ocho coeficientes presentados, además de la interceptación.
Esto sucedió porque la función lm () aplica automáticamente una técnica conocida
como codificación ficticia para cada una de las variables de tipo factor de se
incluyeron en el modelo.
codificación simulada permite una característica nominal de ser tratado como
numérico mediante la creación de una variable binaria, a menudo llamado una
variable ficticia, para cada categoría de la característica. La variable ficticia se
establece en 1 si la observación cae en la categoría especificada o 0 en caso
contrario. Por ejemplo, la función sexual tiene dos categorías: masculina y
femenina.
Esto se dividirá en dos variables binarias, la cual R nombres sexo masculino y
sexfemale. Para las observaciones dondesexo = varón, entonces sexmale = 1 y
sexfemale = 0; Por el contrario, sisexo = mujer, entonces sexmale = 0 y
sexfemale = 1. Lo mismo se aplica a la codificación de las variables con tres o más
categorías. Por ejemplo, dividir R
la función de cuatro categorías región en cuatro variables ficticias:
regionnorthwest, regionsoutheast, regionsouthwesty regionnortheast.

Al añadir una variable ficticia para un modelo de regresión, una categoría siempre
se deja a servir como categoría de referencia. Las estimaciones son interpretados en
relación a la referencia. En nuestro modelo, R llevó a cabo de forma automática el
sexfemale, smokerno, y las variables regionnortheast, por lo que los no fumadores
femeninos en la región noreste del grupo de referencia. Por lo tanto, los machos
tienen los gastos de $ 131.40 menos médicos cada año en relación con las mujeres y
los fumadores cuestan un promedio de $ 23,847.50 más que los no fumadores por
año.
El coeficiente para cada una de las tres regiones en el modelo es negativo, lo que implica
que
el grupo de referencia, la región noreste, tiende a tener los más altos gastos medios.

Por defecto, R utiliza el primer nivel de la variable de factor como la


referencia. Si prefiere utilizar otro nivel, la función Vuelva a nivelar ()
se puede utilizar para especificar el grupo de referencia
[ 203 ]
manualmente. Utilice el comando? Vuelva a nivelar en I para más
información.

Los resultados del modelo de regresión lineal tienen sentido lógico: la vejez, el
tabaquismo y la obesidad tienden a vincularse a problemas de salud adicionales,
mientras que los dependientes adicionales miembro de la familia puede resultar en
un aumento de las visitas al médico y la atención preventiva,
como vacunas y exámenes físicos anuales. Sin embargo, en la actualidad no tienen sentido
de
lo bien que el modelo se ajuste de los datos. Vamos a responder a esta pregunta en la
siguiente sección.

[ 204 ]
La previsión de datos numéricos - Regresión métodos

Paso 4 - evaluar el rendimiento del modelo


Las estimaciones de los parámetros que obtienen escribiendo ins_model decirnos
acerca de cómo las variables independientes están relacionados con la variable
dependiente, pero no nos dicen nada acerca de lo bien que el modelo se ajusta a los
datos. Para evaluar el desempeño de los modelos, podemos utilizar el comando
Resumen () en el modelo almacenado:
> Resumen (ins_model)

Esto produce la siguiente salida. Tenga en cuenta que la salida ha sido


etiquetado con fines ilustrativos:

Resumen de la salida () puede parecer confuso al principio, pero los


fundamentos son fáciles de recoger. Según lo indicado por las etiquetas
numeradas en la salida anterior, la salida proporciona tres formas principales
para evaluar el rendimiento o el ajuste, de nuestro modelo:
1. La sección de los residuos proporciona un resumen estadístico de los
errores en nuestras predicciones, algunas de las cuales son aparentemente
bastante sustancial. Puesto que un residual es igual al valor verdadero
menos el valor predicho, el error máximo de 29.981,7 sugiere que el modelo
gastos por casi $ 30,000 bajo-predijo por lo menos una observación. Por otra
parte, el 50 por ciento de errores caen dentro de los valores 3T (el primer y

[ 205 ]
tercer cuartil) y 1T, por lo que la mayoría de las predicciones eran entre $
2,850.90 sobre el verdadero valor y $ 1,383.90 por debajo del valor
verdadero.

[ 206 ]
Capítulo 6

2. Para cada coeficiente de regresión estimado, el valor de p, denotado Pr (>


| t |), Proporciona una estimación de la probabilidad de que el
coeficiente de cierto es cero dado el valor de la estimación. los valores de p
pequeños sugieren que el coeficiente de verdad es muy poco probable que
sea cero, lo que significa que la característica es muy poco probable que
tenga ninguna relación con la variable dependiente. Tenga en cuenta que
algunos de los valores de p tienen estrellas (***), Que corresponden a las
notas al pie para indicar
el nivel de significación se reunió por la estimación. Este nivel es un
umbral, elegido antes de la construcción del modelo, que se utiliza para
indicar los resultados "reales", en contraposición a los debidos a la
casualidad; Los valores de p menor que el nivel de significación se
consideró estadísticamente significativo. Si el modelo tenía pocos,
términos, que pueden ser motivo de preocupación, ya que esto indicaría que
las funciones que se utilizan no son muy predictivo de los resultados. Aquí,
nuestro modelo tiene varias variables muy significativas, y parece estar
relacionado con el resultado de forma lógica.
3. El valor R cuadrado múltiple (también llamado el coeficiente de
determinación) proporciona una medida de qué tan bien nuestro modelo en
su conjunto explica los valores de la variable dependiente. Es similar al
coeficiente de correlación, en que cuanto más cerca que el valor es de 1,0,
mejor será el modelo explica perfectamente los datos. Dado que el valor R
cuadrado es 0,7494, sabemos que el modelo explica casi el 75 por ciento de
la variación en la variable dependiente. Dado que los modelos con más
funciones siempre se explican más variación, el valor R cuadrado ajustado
corrige R cuadrado, penalizando a los modelos con un gran número de
variables independientes. Es útil para comparar el rendimiento de los
modelos con diferentes números de variables explicativas.
Teniendo en cuenta los tres indicadores de desempeño anteriores, nuestro modelo
está funcionando bastante bien. No es raro que los modelos de regresión de los
datos del mundo real para tener valores bastante bajos de I-cuadrado; un valor de
0,75 es bastante bueno. El tamaño de algunos de los errores es un poco relativo,
pero no sorprendente, dada la naturaleza de los gastos médicos
datos. Sin embargo, como se muestra en la siguiente sección, que puede ser capaz de
mejorar el rendimiento del modelo especificando el modelo de una manera
ligeramente diferente.

Paso 5 - mejorar el rendimiento del modelo


Como se mencionó anteriormente, una diferencia clave entre el modelo de regresión
y otros enfoques de aprendizaje de máquina es que la regresión normalmente deja
función de selección y especificación del modelo para el usuario. En consecuencia, si
[ 207 ]
tenemos conocimiento de la materia acerca de cómo una característica está
relacionada con el resultado, podemos utilizar esta información para informar a la
especificación del modelo y mejorar potencialmente el rendimiento del modelo.

[ 208 ]
La previsión de datos numéricos - Regresión métodos

Datos técnicos de modelo - la adición no lineal


relaciones
En la regresión lineal, la relación entre una variable independiente y la variable
dependiente se supone que es lineal, sin embargo, este puede no ser
necesariamente cierto. Por ejemplo, el efecto de la edad sobre el gasto médico
no puede ser constante a lo largo de todos los valores de edad; el tratamiento
puede llegar a ser de un coste desproporcionado para las poblaciones más
antiguas.
Si recuerdan, una ecuación de regresión típica sigue una forma similar a esto:

Para tener en cuenta una relación no lineal, podemos añadir un término de orden
más alto para el modelo de regresión, tratando el modelo como un polinomio. En
efecto, estaremos modelando una relación como esta:

La diferencia entre estos dos modelos es que se estima un adicional beta, que está
destinado a captar el efecto de la expresión-x al cuadrado. Esto permite que el
impacto de la edad que se mide en función de la edad al cuadrado.

Para añadir la edad no lineal con el modelo, simplemente hay que crear una nueva
variable:
> seguro de $ edad2 <- Seguro de edad $ ^ 2

Entonces, cuando producimos nuestro modelo mejorado, añadiremos la edad y la


edad 2 a la fórmula lm () utilizando el formulario de gastos ~ edad + edad2. Esto
permitirá que el modelo para separar el impacto lineal y no lineal de la edad en
los gastos médicos.

Transformación - la conversión de una variable


numérica a un indicador binario
Supongamos que tenemos el presentimiento de que el efecto de una función no es
acumulativo, sino que tiene un efecto sólo después de que se haya alcanzado un
determinado umbral. Por ejemplo, el IMC puede tener un impacto nulo en los gastos
médicos para los individuos en el rango de peso normal, pero puede ser fuertemente
relacionada con costos más altos para los obesos (es decir, índice de masa corporal de
30 o superior).

[ 209 ]
Podemos modelar esta relación mediante la creación de un indicador variable
binaria que la obesidad es 1 si el IMC es de al menos 30, y 0 si es menor. La beta
estimada para esta función binaria
indicaría entonces el impacto promedio neto de gastos médicos para las personas con
un IMC de 30 o más, en comparación con aquellos con IMC inferior a 30.

[ 210 ]
Capítulo 6

Para crear la característica, se puede utilizar la función ifelse (), que para cada
elemento en un vector de prueba una condición especificada y devuelve un valor
en función de si la condición es verdadera o falsa. Para IMC mayor o igual a 30,
volveremos 1, de lo contrario 0:
> seguro de $ bmi30 <- ifelse (seguro $ IMC> = 30, 1, 0)

entonces podemos incluir la variable bmi30 en nuestro modelo mejorado, ya sea


reemplazando la variable IMC original o, además, en función de si o no creemos que
el efecto de la obesidad se produce, además de un efecto lineal IMC separada. Sin
una buena razón para hacer lo contrario, incluiremos tanto en nuestro modelo final.

Si tiene problemas para decidir si se incluye o no una variable,


una práctica común es incluirlo y examinar el valor de p. Si
la variable no es estadísticamente significativa, usted tiene pruebas de
apoyo excluir en el futuro.

Datos técnicos de modelo - la adición de los efectos


de interacción
Hasta ahora, sólo hemos considerado la contribución individual de cada función
para el resultado. ¿Qué pasa si ciertas características tienen un efecto combinado
sobre la variable dependiente? Por ejemplo, el tabaquismo y la obesidad pueden
tener efectos nocivos por separado, pero es razonable suponer que su efecto
combinado puede ser peor que la suma de cada uno solo.
Cuando dos de las funciones tienen un efecto combinado, esto se conoce como una
interacción. Si sospechamos que dos variables interactúan, podemos probar esta
hipótesis mediante la adición de su interacción con el modelo. efectos de interacción
se especifican utilizando la sintaxis de la fórmula R. Para que el indicador de la
obesidad (bmi30) y el indicador de fumar (fumador) interactuar, escribiríamos una
fórmula en los gastos de forma ~ * bmi30 fumador.
los * operador es la abreviatura que instruye R para modelar Los gastos ~ bmi30
+ + smokeryes bmi30: smokeryes. los: (Colon) operador en la forma expandida
indica que bmi30: smokeryes es la interacción entre las dos variables. Tenga en
cuenta que la forma expandida también incluye automáticamente labmi30 y
fumador las variables, así como la interacción.

Las interacciones no deben ser incluidos en un modelo sin también la


adición de cada una de las variables que interactúan. Si siempre crear
interacciones con el operador *, esto no será un problema ya que R
añadirá los componentes necesarios de forma automática.

[ 211 ]
La previsión de datos numéricos - Regresión métodos

Poniendo todo junto - un modelo de regresión


mejorada
Sobre la base de un poco de conocimiento de la materia de cómo los costos
médicos pueden estar relacionados con las características del paciente, hemos
desarrollado lo que creemos que es una fórmula de regresión más precisión
especificada. Para resumir las mejoras, que:

• Se ha añadido un término no lineal para la edad


• Creado un indicador para la obesidad
• Especificado una interacción entre la obesidad y fumar

Vamos a entrenar el modelo utilizando la función lm () como antes, pero esta vez
vamos a añadir las variables de nueva construcción y el término de interacción:
> ins_model2 <- LM (gastos de edad ~ + edad2 + hijos + IMC + sexo +
bmi30 * + fumador región, data = seguro)

A continuación, se resumen los resultados:


> Resumen (ins_model2)

La salida se muestra como sigue:

[ 212 ]
Capítulo 6

Las estadísticas de ajuste modelo ayudan a determinar si los cambios mejoraron el


rendimiento del modelo de regresión. En relación con nuestro primer modelo, el
valor R cuadrado ha mejorado de 0,75 a aproximadamente 0,87. Del mismo modo, el
valor de R cuadrado ajustado, que tiene en cuenta el hecho de que el modelo creció
en complejidad, también mejoró 0,75-0,87. Nuestro modelo no está explicando el 87
por ciento de la variación en los costos de tratamiento médico. Además, nuestras
teorías sobre la forma funcional del modelo parecen ser validado. El término edad2
de orden superior es estadísticamente significativa, como es el indicador de la
obesidad, bmi30. La interacción entre la obesidad y fumar sugiere un efecto masivo;
además de los mayores costos de más de $ 13.404 para fumar solo, los fumadores
obesos gastan otros $ 19,81 mil por año.

Estrictamente hablando, el modelo de regresión hace algunos fuertes


suposiciones acerca de los datos. Estos supuestos no son tan
importantes para la predicción numérica, como el valor del modelo no
se basa en si realmente captura el proceso subyacente-que simplemente
se preocupan por la exactitud de
sus predicciones. Sin embargo, si usted desea hacer inferencias a partir de la firma
los coeficientes del modelo de regresión, es necesario ejecutar pruebas de
diagnóstico
para asegurar que los supuestos de regresión no han sido violados. Para
una excelente introducción a este tema, ver Allison PD. La regresión
múltiple: Una introducción. Pine Forge Press; 1998.

La comprensión de los árboles de


regresión y árboles modelo
Si usted recuerda en el capítulo 5, divide y vencerás - Clasificación a partir de
árboles de decisión y Reglas, un árbol de decisión se construye un modelo muy
similar a un diagrama de flujo en el que los nodos de decisión, los nodos hoja, y
ramas definen una serie de decisiones que se utilizan para clasificar los ejemplos.
Tales árboles también pueden ser utilizados para la predicción numérica, dándole
sólo pequeños ajustes en el algoritmo de árboles de crecimiento. En esta sección,
vamos a considerar sólo las formas en que los árboles para la predicción numérica
se diferencian de los árboles utilizados para la clasificación.
Árboles para la predicción numérica se dividen en dos categorías. El primero,
conocido como árboles de regresión, se introdujeron en la década de 1980 como parte
de la Clasificación seminal y del árbol de regresión (CART), algoritmo. A pesar del
nombre, árboles de regresión no utilizan métodos de regresión lineal como se ha
descrito anteriormente en este capítulo, sino que hacen predicciones basadas en el
valor medio de ejemplos que llegan a una hoja.

[ 213 ]
El algoritmo CART se describe en detalle en Breiman
L, Friedman JH, CJ Stone, Olshen AR. clasificación y
Los árboles de regresión. Belmont, CA: Chapman y Hall; 1984.

[ 214 ]
La previsión de datos numéricos - Regresión métodos

El segundo tipo de árboles para la predicción numérica son conocidos como árboles
de modelo. Introducido varios años más tarde que los árboles de regresión, que son
menos conocidos, pero tal vez más potente. árboles de modelos se cultivan en mucho
la misma manera que los árboles de regresión, pero en cada hoja, un modelo de
regresión lineal múltiple se construyen a partir de los ejemplos que llegan a ese
nodo. Dependiendo del número de nodos hoja, un árbol modelo puede construir
decenas o incluso cientos de estos modelos. Esto puede hacer que los árboles modelo
más difícil de entender que el árbol de regresión equivalente, con la ventaja de que
pueden dar lugar a un modelo más preciso.

El algoritmo de modelo de árbol más antiguo, M5, se


describe en Quinlan JR. El aprendizaje con clases continuas.
Actas de la 5ª Conferencia Conjunta de Australia en la
inteligencia artificial. 1992: 343-348.

Adición de regresión a los árboles


Los árboles que pueden realizar predicciones numéricas ofrecen una alternativa
convincente hasta ahora a menudo pasado por alto un modelo de regresión. Las
fortalezas y debilidades de los árboles de regresión y árboles modelo en relación a
los métodos de regresión más comunes se enumeran en la siguiente tabla:

fortalezas debilidades
• Combina las ventajas de los árboles de • No es tan bien conocido
decisión, con la capacidad de modelar como regresión lineal
datos numéricos • Requiere una gran cantidad de
• No requiere que el usuario datos de entrenamiento
especifique el modelo de antemano • Difícil determinar el efecto neto
• Utiliza la función de selección global de las características
automática, lo que permite que el individuales de los resultados
planteamiento que debe utilizarse • Los árboles grandes pueden
con un gran número de llegar a ser más difícil de
características interpretar que un modelo
• Puede adaptarse a algunos tipos de regresión
de datos mucho mejor que la
regresión lineal
• No requiere conocimientos de
estadística para interpretar el
modelo

[ 215 ]
Capítulo 6

Aunque los métodos de regresión tradicionales suelen ser la primera opción para
tareas de predicción numéricos, en algunos casos, los árboles de decisión numéricos
ofrecen distintas ventajas. Por ejemplo, los árboles de decisión pueden ser más
adecuados para las tareas con muchas características o muchas relaciones complejas
y no lineales entre las características y resultados. Estas situaciones presentan
desafíos para la regresión. El modelo de regresión también hace suposiciones acerca
de cómo se distribuye de datos numéricos que a menudo son violados en datos del
mundo real.
Este no es el caso para los árboles.
Árboles para la predicción numérica se construyen de la misma manera como lo son para
clasificación. Comenzando en el nodo raíz, los datos se repartió usando una
estrategia de divide y vencerás de acuerdo a la función que tendrá como resultado el
mayor incremento de la homogeneidad en el resultado después de realizar una
escisión. En los árboles de clasificación, se recordará que la homogeneidad se mide
por la entropía, la cual está definida para los datos numéricos. En cambio, para los
árboles de decisión numéricos, la homogeneidad se mide por las estadísticas tales
como la varianza, desviación estándar o desviación absoluta respecto a la media.

Un criterio de reparto común se llama la Reducción de la desviación estándar (SDR).


Se define por la fórmula siguiente:

En esta fórmula, la función sd (T) se refiere a la desviación estándar de los valores en


conjunto T, mientras que T1, T2, ..., Tn son los conjuntos de valores resultantes de
una división en una característica. El | T | término se refiere al número de
observaciones en conjunto T. En esencia, las medidas fórmula la reducción en la
desviación estándar mediante la comparación de la desviación estándar pre-split a la
desviación estándar ponderada post-escisión.
Por ejemplo, consideremos el siguiente caso en el que un árbol está decidiendo si o
no para realizar una división en función binaria A o B:

[ 216 ]
La previsión de datos numéricos - Regresión métodos

El uso de los grupos que resultarían de las divisiones propuestas, podemos


calcular la SDR para A y B de la siguiente manera. La función de la longitud ()
usada aquí devuelve el número de elementos en un vector. Tenga en cuenta que el
conjunto del grupo T se llama camiseta para evitar sobrescribir las funciones
incorporadas en T () y t () de R:
> tee <- c 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7)
(1,
> a <- c 1, 1, 2, 2, 3, 4, 5, 5)
la (1,
1
> a <- c 6, 7, 7, 7, 7)
las (6,
2
> BT1 <- c 1, 1, 2, 2, 3, 4)
(1,
> BT2 <- c 5, 6, 6, 7, 7, 7, 7)
(5,
> sdr_a <- sd (t) - (longitud (AT1) / longitud (tee) * sd
(AT1) + longitud (AT2) / longitud (tee) * sd
(AT2))
> sdr_b <- sd (t) - (longitud (BT1) / longitud (tee) * sd
(BT1) + longitud (BT2) / longitud (tee) * sd
(BT2))

Vamos a comparar los DEG de A con respecto al DEG de B:


> sdr_a
[1] 1.202815
> sdr_b
[1] 1.392751

El SDR para la división en función de A fue de alrededor de 1,2 frente a 1,4 para la
división en función B. Puesto que la desviación estándar se redujo más por la
división en B, el árbol de decisión usaría B primero. Es el resultado de conjuntos
ligeramente más homogéneo que con A.
Supongamos que el árbol dejó de crecer aquí el uso de esta única división. El trabajo
de un árbol de regresión se realiza. Se puede hacer predicciones para nuevos
ejemplos dependiendo de si el valor del ejemplo en función de B coloca el ejemplo
en el grupo T1 o T2. Si el ejemplo termina en T1, el modelo predeciría significar
(BT1) = 2, de lo contrario podría predecir significar (BT2) = 6,25.
Por el contrario, un árbol modelo sería dar un paso más. Usando los ejemplos de
formación de siete que caen en el grupo T1 y T2 en los ocho, el árbol de modelo
podría construir un modelo de regresión lineal de los resultados en comparación con
[ 217 ]
función A. Nota que cuentan B es de ninguna ayuda en la construcción del modelo
de regresión, porque todos los ejemplos en la hoja tienen el mismo valor de B-que se
colocaron en T1 o T2 de acuerdo a su valor de B. el árbol de modelo puede entonces
hacer predicciones para nuevos ejemplos usando cualquiera de los dos modelos
lineales.

Para ilustrar aún más las diferencias entre estos dos enfoques, vamos a
trabajar a través de un ejemplo del mundo real.

[ 218 ]
Capítulo 6

Ejemplo - la estimación de la calidad de


los vinos con árboles de regresión y
árboles modelo
Elaboración del vino es un negocio difícil y competitiva que ofrece el potencial
para grandes ganancias. Sin embargo, existen numerosos factores que
contribuyen a la rentabilidad de una bodega. Como un producto agrícola, las
variables tan diversas como la
El tiempo y el medio ambiente cada vez mayor impacto en la calidad de un varietal. el
embotellamiento
y la fabricación también puede afectar el sabor para mejor o peor. Incluso la
forma en que el producto se comercializa, desde el diseño de la botella hasta el
punto de precio, puede afectar a la percepción del cliente de gusto.
Como consecuencia, la industria vinícola ha invertido mucho en la recopilación
de datos y métodos de aprendizaje automático que pueden ayudar con la ciencia
de la decisión de la elaboración del vino. Por ejemplo, la máquina de aprendizaje
se ha utilizado para descubrir las principales diferencias en la composición
química de los vinos de diferentes regiones, o para identificar los factores
químicos que conducen a un vino de sabor más dulce.
Más recientemente, el aprendizaje automático se ha empleado para ayudar con la
calificación de la calidad del vino, una tarea notoriamente difícil. Una reseña escrita
por un reconocido crítico de vinos a menudo determina si el producto termina en el
estante superior o inferior, a pesar del hecho de que incluso los jueces expertos son
inconsistentes al calificar un vino en una prueba ciega.
En este estudio de caso, vamos a utilizar los árboles de regresión y árboles modelo
para crear un sistema capaz de imitar Valoraciones de expertos de vino. Debido a
que los árboles dan lugar a un modelo que se entiende fácilmente, esto puede
permitir que los productores de vino para identificar los factores clave que
contribuyen a los vinos calificados mejor. Tal vez lo más importante, el sistema no
sufre de los elementos humanos de degustación, tales como el estado de ánimo o
paladar fatiga del evaluador. Por lo tanto, las pruebas de vino asistido por
ordenador puede dar lugar a un producto mejor, así como más objetiva, consistente
y calificaciones justas.

Paso 1 - recogida de datos


Para desarrollar el modelo de calificación de vinos, utilizaremos los datos donados a
la UCI Machine Learning Repositorio de datos (http://archive.ics.uci.edu/ml)
Por P. Cortez, A. Cerdeira, F. Almeida, T. Matos, y J. Reis. Los datos incluyen
ejemplos de vinos tintos y blancos Vinho Verde de Portugal y uno de los países
[ 219 ]
productores de vino más importantes del mundo. Debido a que los factores que
contribuyen a un vino de alta calificación pueden diferir entre las variedades rojas y
blancas, para este análisis vamos a examinar únicamente los vinos blancos más
populares.

[ 220 ]
La previsión de datos numéricos - Regresión métodos

Para continuar con este ejemplo, descargue el archivo desde el sitio


web whitewines.csv Packt Publishing y guardarlo en su directorio de
trabajo R. El archivo redwines.csv también está disponible en caso de
que le gustaría explorar estos datos por su cuenta.

Los datos de vino blanco incluye información sobre las 11 propiedades químicas de
4.898 muestras de vino. Para cada vino, un análisis de laboratorio mide
características tales como la acidez, contenido de azúcar, cloruros, azufre, alcohol,
pH, y la densidad. Las muestras fueron valorados en una cata a ciegas por paneles
de no menos de tres jueces en una escala de calidad que va de cero (muy malo) a 10
(excelente). En el caso de los jueces en desacuerdo con la clasificación, se utilizó el
valor de la mediana.
El estudio realizado por Cortez evaluó la capacidad de los tres enfoques de
aprendizaje de máquina para modelar los datos de vino: regresión múltiple, las
redes neuronales artificiales y máquinas de vectores soporte. Hemos cubierto de
regresión múltiple al principio de este capítulo, y vamos a aprender acerca de las
redes neuronales y máquinas de vectores soporte en el capítulo 7, Métodos Box
Negro - redes neuronales y máquinas de vectores soporte. El estudio encontró que
la máquina de vectores de soporte ofreció resultados significativamente mejores que
el modelo de regresión lineal. Sin embargo, a diferencia de regresión, el vector de
apoyo modelo de la máquina es difícil
interpretar. El uso de árboles de regresión y árboles modelo, podemos ser capaces de
mejorar los resultados de la regresión sin dejar de tener un modelo que es fácil de
entender.

Para leer más sobre el estudio vino descrito aquí, por favor
referirse a Cortez P, Cerdeira A, Almeida F, Matos T,
preferencias de vino Reis J. Modelando por minería de datos
de propiedades fisicoquímicas.
Sistemas de Soporte a la Decisión. 2009; 47: 547-553.

Paso 2 - exploración y la preparación de los


datos
Como de costumbre, vamos a utilizar la función read.csv () para cargar los datos en R.
Dado que todas las funciones son numéricos, podemos ignorar el parámetro
stringsAsFactors:
> vino <- read.csv ( "whitewines.csv")

Los datos de vinos incluye 11 características y el resultado de la calidad, de la siguiente

[ 221 ]
manera:
> str (vino)
'Hoja.de.datos': 4898 de 12 variables:
obs.
PS fixed.acidity: num 6,7 5,7 5,9 5,3 6,4 7 7,9 ...
PS volatile.acidity: num 0,22 0,19 0,47 0,62 0,29 0,12 ...
PS ácido cítrico: num 0,24 0,2 0,26 0,1 0,21 0,41 ...
PS residual.sugar: num 1,1 16 7,4 1,3 9,65 0,9 ...

[ 222 ]
Capítulo 6

PS cloruros: num0.039 0,044 0,034 0,036 0,041 ...


$ Free.sulfur.dioxide: num6 41 33 11 36 22 33 17 34 40 ...
$ Total.sulfur.dioxide: num62 113 123 74 119 95 152 ...
PS densidad: num0.993 0,999 0,995 0,991 0,993 ...
PS pH: num3.41 3,22 3,49 3,48 2,99 3,25 ...
PS sulfatos: num0.32 0,46 0,42 0,54 0,34 0,43 ...
PS alcohol: num10.4 8.9 10.1 11.2 10.9 ...
PS calidad: INT5 6 6 4 6 6 6 6 6 7 ...

En comparación con otros tipos de modelos de aprendizaje automático, una de las


ventajas de los árboles es que pueden manejar muchos tipos de datos sin
procesamiento previo. Esto significa que no es necesario para normalizar o
estandarizar las características.
Sin embargo, se necesita un poco de esfuerzo para examinar la distribución de la
variable de resultado para informar a nuestra evaluación de desempeño del modelo.
Por ejemplo, supongamos que había una muy poca variación en la calidad del vino a
vino o vinos que cayeron en
una distribución bimodal: muy bueno o muy malo. Para comprobar si tales
extremos, podemos examinar la distribución de calidad utilizando un histograma:
> hist (calidad del vino $)

Esto produce la siguiente figura:

[ 223 ]
La previsión de datos numéricos - Regresión métodos

Los valores de calidad de vino parecen seguir una distribución bastante normal en
forma de campana, en torno a un valor de seis. Esto tiene sentido intuitivamente,
porque la mayoría de los vinos son de calidad media; cuantos son especialmente
bueno o malo. Aunque los resultados no se muestran aquí, también es útil
examinar resumen de la salida (vino) para los valores atípicos u otros problemas
potenciales de datos. A pesar de que los árboles son bastante robusto con datos
desordenados, siempre es prudente para comprobar si hay problemas graves. Por
ahora, vamos a suponer que los datos son fiables.
Nuestro último paso es, entonces, para dividir en formación y las pruebas de
datos. Dado que el conjunto de datos de vino ya estaba clasificada en orden
aleatorio, se puede repartirse en dos grupos de filas contiguas de la siguiente
manera:
> wine_train <- vino [1: 3750,]
> Wine_test <- Vino [3751: 4898,]

Con el fin de reflejar las condiciones utilizadas por Cortez, utilizamos conjuntos
de 75 por ciento y 25 por ciento para el entrenamiento y las pruebas,
respectivamente. Vamos a evaluar el desempeño de
nuestros modelos basados en los árboles sobre los datos de prueba para ver si
podemos obtener resultados comparables a los del estudio de investigación previa.

Paso 3 - la formación de un modelo sobre los


datos
Vamos a empezar por la formación de un modelo de árbol de regresión. Aunque
casi cualquier aplicación de árboles de decisión puede ser utilizado para realizar
el modelado árbol de regresión, el paquete rpart (partición recursiva) ofrece la
aplicación más fiel de los árboles de regresión, ya que fueron descritos por el
equipo de CART. Como el clásico R
aplicación de la terapia antirretroviral, el paquete rpart está también bien
documentado y apoyado con las funciones para visualizar y evaluar los modelos
rpart.
Instala el rpart empaquetar utilizando el install.packages ( "rpart")
mando. A continuación, se puede cargar en su sesión de R utilizando labiblioteca
(rpart) mando. La siguiente sintaxis capacitará a un árbol con la configuración
predeterminada, que normalmente trabajan
bastante bien. Si necesita una configuración más finamente sintonizadas, consulte la
documentación de la
parámetros de control utilizando el ? rpart.control mando.

[ 224 ]
Capítulo 6

Mediante la interfaz de la fórmula R, podemos especificar la calidad como la


variable de resultado y el uso de la notación de puntos para permitir que todas las
otras columnas de la trama de datos wine_train para ser utilizados como
predictores. El objeto de modelo de árbol de regresión resultante se denomina
m.rpart para distinguirlo del árbol de modelo que vamos a entrenar más tarde:
> m.rpart <- rpart (. ~ calidad, los datos = wine_train)

Para obtener información básica sobre el árbol, simplemente escriba el nombre del objeto
de modelo:
> m.rpart
n = 3750

nodo), dividir, n, la desviación, yval


* Denota nodo terminal

1) Raíz 3750 2945.53200 5.870933


2) alcohol <10.85 2372 1418.86100 5.604975
[ 225 ]
4) volatile.acidity> = 0,2275 1.611.821,30730 5.432030

[ 226 ]
La previsión de datos numéricos - Regresión métodos

8) volatile.acidity> = 0,3025 688.278,97670 5.255814 *


9) volatile.acidity <0,3025 923.505,04230 5.563380 *
5) volatile.acidity <0,2275 761.447,36400 5.971091 *
3) alcohol> = 10,85 1378 1070.08200 6.328737
6) free.sulfur.dioxide <10.5 8495.55952 5.369048 *
7) free.sulfur.dioxide> = 10,5 1.294.892,13600 6.391036
14) alcohol <11.76667 629.430,11130 6.173291
28) volatile.acidity> = 0,465 1110.72727 4.545455 *
29) volatile.acidity <0,465 618.389,71680 6.202265 *
15) alcohol> = 11,76667 665.403,99400 6.596992 *

Para cada nodo en el árbol, aparece el número de ejemplos que llegan al punto de
decisión. Por ejemplo, todos 3.750 ejemplos comenzar en el nodo raíz, de los
cuales 2372 tienen alcohol <10,85 y 1378 tienen alcohol> = 10,85. Dado que el
alcohol se utilizó por primera vez en el árbol, que es el más importante predictor
de la calidad del vino.
Los nodos indicados por * son nodos terminales o de la hoja, lo que significa que
resultan en una predicción (enumerados aquí como yval). Por ejemplo, el nodo 5
tiene una yval de 5,971091. Cuando se utiliza el árbol para las predicciones, las
muestras de vino con alcohol <10.85 y volatile.acidity <0,2275 por lo tanto, se
prevé que tenga un valor de calidad de 5,97.
Un resumen más detallado de ajuste del árbol, incluyendo el error cuadrático medio
para cada uno de los nodos y una medida general de la función de importancia, se
puede obtener mediante el comando de resumen (m.rpart).

La visualización de los árboles de decisión


Aunque el árbol puede entenderse utilizando sólo la salida anterior, a menudo es
entendida más fácilmente usando la visualización. El paquete rpart.plot por
Stephen Milborrow proporciona una función fácil de usar que produce árboles de
decisión con calidad de publicación.

Para obtener más información sobre rpart.plot, incluyendo ejemplos


de los tipos de diagramas de árbol de decisión que la función puede
producir, consulte el sitio web del autor en
http://www.milbo.org/ rpart-trama /.

[ 227 ]
Capítulo 6

Después de instalar el paquete utilizando la install.packages (


"rpart.plot") comando, el rpart.plot () función produce un diagrama
de árbol de cualquier rpart objeto de modelo. Los siguientes comandos trazar
el árbol de regresión construimos anteriormente:
> biblioteca (rpart.plot)
> rpart.plot (m.rpart, dígitos = 3)

El diagrama de árbol resultante es como sigue:

Además del parámetro de dígitos que controla el número de dígitos numéricos para
incluir en el diagrama, muchos otros aspectos de la visualización se puede ajustar. El
siguiente comando muestra sólo algunas de las opciones útiles: El parámetro
fallen.leaves obliga a los nodos de hoja a estar alineados en la parte inferior de la
trama, mientras que el tipo y los parámetros adicionales afectan la manera en las
decisiones y los nodos se etiquetan:
> rpart.plot (m.rpart, dígitos = 4, fallen.leaves =
TRUE, tipo = 3, extra = 101)

[ 228 ]
La previsión de datos numéricos - Regresión métodos

El resultado de estos cambios es un diagrama de árbol que mira muy diferente:

Las visualizaciones como estos pueden ayudar a la difusión de los resultados de los
árboles de regresión, tal como se entienden fácilmente, incluso sin un fondo
matemáticas. En ambos casos, los números que aparecen en los nodos hoja son los
valores predichos para los ejemplos que alcanzan ese nodo. Que muestra el
diagrama a los productores de vino puede así ayudar a identificar los factores clave
que predicen los vinos de mayor categoría.

Paso 4 - evaluar el rendimiento del modelo


Para utilizar el modelo de árbol de regresión para hacer predicciones sobre los
datos de prueba, se utiliza la función de predecir (). Por defecto, este devuelve el
valor numérico estimado para la variable de resultado, que vamos a guardar en
un vector llamado p.rpart:
> p.rpart <- predecir (m.rpart, wine_test)

[ 229 ]
Capítulo 6

Un rápido vistazo a las estadísticas de resumen de nuestras predicciones


sugiere un posible problema; las predicciones caen en un rango mucho más
estrecho que los verdaderos valores:
> Resumen (p.rpart)
Min. primeroQu.MedianMean
tercero Qu. Max.
4.5455.5635.9715.8936.202
6,597
> Resumen (wine_test calidad $)
Min. primeroQu.MedianMean
tercero Qu. Max.
3.0005.0006.0005.9016.000
9,000

Este hallazgo sugiere que el modelo no es identificar correctamente los casos extremos, en
particular, los mejores y peores vinos. Por otra parte, entre el primer y tercer cuartil,
podemos estar haciendo bien.
La correlación entre los valores de calidad previstos y los reales proporciona una
forma sencilla de medir el rendimiento del modelo. Recordemos que la función de
cor () se puede utilizar para medir la relación entre dos vectores de igual longitud.
Vamos a utilizar esto para comparar qué tan bien los valores previstos
corresponden a los valores reales:
> cor (p.rpart, wine_test $
calidad) [1] 0.5369525

Una correlación de 0.54 es ciertamente aceptable. Sin embargo, la correlación sólo


mide la fuerza con las predicciones están relacionados con el valor verdadero; no es
una medida de cuán lejos de las predicciones eran de los valores verdaderos.

Medir el rendimiento con el error


absoluto medio
Otra forma de pensar sobre el comportamiento del modelo es considerar hasta qué
punto, en promedio, su predicción fue del valor verdadero. Esta medición se
denomina el error absoluto medio (MAE). La ecuación para MAE es la siguiente,
donde n indica el número de predicciones y ei indica el error de predicción i:

[ 230 ]
La previsión de datos numéricos - Regresión métodos

Como su nombre indica, esta ecuación toma la media del valor absoluto de los
errores. Puesto que el error es simplemente la diferencia entre los valores predichos
y reales, podemos crear una función simple (MAE) de la siguiente manera:
> MAE <- function (real, valor de
referencia) {significa (abs (real
- valor de referencia))
}

El MAE para nuestras predicciones es entonces:


> MAE (p.rpart, wine_test $
calidad) [1] 0.5872652

Esto implica que, en promedio, la diferencia entre las predicciones de nuestro


modelo y el verdadero nivel de calidad fue de aproximadamente 0,59. En una escala
de calidad de cero a 10, esto parece sugerir que nuestro modelo está haciendo
bastante bien.
Por otro lado, recuerdan que la mayoría de los vinos eran ni muy bueno ni muy
malo; la puntuación de calidad típica fue de alrededor de cinco a seis. Por lo tanto,
un clasificador que no hizo más que predecir el valor medio puede todavía lo
hacen bastante bien de acuerdo con esta métrica.

La calificación media de calidad en la formación de datos es el siguiente:


> media ($ wine_train
calidad) [1] 5.870933

Si predijimos el valor 5,87 para cada muestra de vino, tendríamos un error


absoluto promedio de sólo alrededor de 0,67:
> MAE (5,87, $ wine_test
calidad) [1] 0.6722474

Nuestro árbol de regresión (MAE = 0,59) se acerca más en promedio que el


verdadero nivel de calidad que la media imputada (MAE = 0,67), pero no por
mucho. En comparación, Cortez informó de un MAE de 0,58 para el modelo de
red neuronal y un MAE de 0,45 para la máquina de vectores de soporte. Esto
sugiere que hay margen de mejora.

Paso 5 - mejorar el rendimiento del modelo


Para mejorar el rendimiento de nuestro alumno, vamos a tratar de construir un árbol
de modelo. Recordemos que un árbol de modelo mejora en los árboles de regresión
mediante la sustitución de los nodos hoja con modelos de regresión. Esto a menudo
[ 231 ]
resulta en resultados más exactos que los árboles de regresión, que utilizan un solo
valor para la predicción en los nodos hoja.

[ 232 ]
Capítulo 6

El estado de la técnica actual en árboles modelo es el algoritmo el M5' (M5-


prime) por Y. Wang y IH Witten, que es una variante del algoritmo de
modelo de árbol original M5 propuesto por JR Quinlan en 1992.

Para obtener más información sobre el algoritmo de la


M5' , ver Wang Y, Witten IH. La inducción de árboles
modelo para predecir las clases continuas. Actas de los
Documentos Cartel de la Conferencia Europea sobre
aprendizaje automático. 1997.

El algoritmo M5 está disponible en R a través del paquete RWeka y la función


M5P (). La sintaxis de esta función se muestra en la siguiente tabla. Asegúrese de
instalar el paquete RWeka si no lo ha hecho. Debido a su dependencia de Java, las
instrucciones de instalación se incluyen en el Capítulo 1, Introducción a Machine
Learning.

[ 233 ]
La previsión de datos numéricos - Regresión métodos

Vamos a encajar el árbol del modelo utilizando esencialmente la misma sintaxis


que se utilizó para el árbol de regresión:
> biblioteca (RWeka)
> m.m5p <- M5P (. ~ calidad, los datos = wine_train)

El árbol en sí puede ser examinado escribiendo su nombre. En este caso, el árbol es muy
grande
y sólo se muestran las primeras líneas de salida:
> m.m5p
M5 modelo de poda de árboles:
(Usando modelos lineales suavizadas)

alcohol <= 10,85:


| Volatile.acidity <= 0,238 :
|| fixed.acidity <= 6,85: LM1 (406 / 66,024%)
|| fixed.acidity > 6,85 :
||| free.sulfur.dioxide <= 24,5: LM2 (113 / 87,697%)

Usted notará que las divisiones son muy similares al árbol de regresión que
hemos construido anteriormente. El alcohol es la variable más importante,
seguido de acidez volátil y el dióxido de azufre libre. Una diferencia clave, sin
embargo, es que los nodos no terminan en una predicción numérica, pero un
modelo lineal (que se muestra aquí como LM1 y LM2).
Los modelos lineales mismos se muestran más adelante en la salida. Por ejemplo, el
modelo para LM1 se muestra en la próxima salida. Los valores se pueden
interpretar exactamente los mismos que los modelos de regresión múltiple que
construimos anteriormente en este capítulo. Cada número es el efecto neto de la
función asociada a la calidad del vino predicho. El coeficiente de 0,266 para la
acidez fija implica que para un incremento de 1 unidad de acidez, se espera que la
calidad del vino que aumente en 0.266:
LM num: 1
calidad =
0,266 * fixed.acidity
- 2,3082 * volatile.acidity
- 0,012 * citric.acid
+ 0,0421 * residual.sugar
+ 0.1126 * cloruros
+ 0 * free.sulfur.dioxide

[ 234 ]
- 0,0015 * total.sulfur.dioxide
- 109.8813 * Densidad

[ 235 ]
Capítulo 6

+ 0,035 * pH
+ 1.4122 * sulfatos
- 0,0046 * alcohol
+ 113.1021

Es importante tener en cuenta que los efectos estimados por LM1 se aplican sólo a las
muestras de vino que llegan a este nodo; un total de 36 modelos lineales se
construyeron en este modelo de árbol, cada uno con diferentes estimaciones del
impacto de acidez fija y las otras 10 características.
Para las estadísticas sobre lo bien que el modelo se ajusta a los datos de
entrenamiento, la función de resumen () se puede aplicar al modelo M5P. Sin
embargo, tenga en cuenta que, dado que estas estadísticas se basan en los datos de
entrenamiento, que sólo deben usarse como un diagnóstico en bruto:
> Resumen (m.m5p)

=== Resumen ===

Coeficiente de correlación 0,6666


La media de error absoluto 0.5151
Raíz del error cuadrático medio 0.6614
error absoluto relativo 76,4921%
Raíz del error cuadrático 74,6259%
relativa
Número total de instancias 3750

En su lugar, vamos a ver lo bien que el modelo funciona en los datos de prueba que no se
ven. los
predecir () la función no nos lleva a un vector de valores predichos:
> p.m5p <- predecir (m.m5p, wine_test)

El árbol del modelo parece estar prediciendo una gama más amplia de
valores que el árbol de regresión:
> Resumen (p.m5p)
Min. primeroQu.MedianMean
tercero Qu. Max.
4.3895.4305.8635.8746.305
7.437

La correlación también parece ser sustancialmente más alta:

[ 236 ]
> cor (p.m5p, wine_test $
calidad) [1] 0.6272973

[ 237 ]
La previsión de datos numéricos - Regresión métodos

Además, el modelo se ha reducido ligeramente el error absoluto medio:


> MAE (calidad $ wine_test,
p.m5p) [1] 0.5463023

A pesar de que no mejoró mucho más allá del árbol de regresión, hemos superado
el rendimiento del modelo de red neuronal publicado por Cortés, y nos estamos
acercando al valor de error absoluto medio publicada de 0,45 para el modelo de
máquina de vectores de soporte, todo mediante el uso de un método de aprendizaje
mucho más simple.

No es sorprendente, hemos confirmado que la predicción de la


calidad de los vinos es un problema difícil; degustación de vinos,
después de todo, es inherentemente
subjetivo. Si desea práctica adicional, puede intentar volver a examinar
este problema después de leer el capítulo 11, Mejora del rendimiento
del modelo, que abarca las técnicas adicionales que pueden conducir a
mejores resultados.

Resumen
En este capítulo, se estudiaron dos métodos para el modelado de datos numéricos.
El primer método, la regresión lineal, implica líneas rectas de ajuste a los datos. El
segundo método utiliza árboles de decisión para la predicción numérica. Este
último se presenta en dos formas: árboles de regresión, que utilizan el valor medio
de ejemplos en los nodos de hojas para hacer predicciones numéricas; y los árboles
modelo, que construyen un modelo de regresión en cada nodo hoja en un enfoque
híbrido que es, en cierto modo, lo mejor de ambos mundos.
Se utilizó un modelo de regresión lineal para calcular los costos de asistencia médica
previstos para los distintos segmentos de la población. Debido a que la relación entre
las características y la variable de destino están bien descritos por el modelo de
regresión estimado, hemos sido capaces de identificar ciertos grupos demográficos,
tales como los fumadores y los obesos, que pueden necesitar ser cargada mayores
tasas de seguros para cubrir la más alta de lo -Promedio gastos médicos.
Los árboles de regresión y árboles modelo fueron utilizados para modelar la calidad
subjetiva de los vinos de características medibles. Al hacerlo, hemos aprendido cómo
los árboles de regresión ofrecen una manera sencilla de explicar la relación entre las
características y un resultado numérico, pero los árboles modelo más complejas
pueden ser más exactos. En el camino, hemos aprendido varios métodos para
evaluar el rendimiento de los modelos numéricos.
En marcado contraste con este capítulo, que cubría los métodos de aprendizaje

[ 238 ]
automático que dan lugar a una clara comprensión de las relaciones entre la
entrada y la salida, el siguiente capítulo cubre los métodos que dan lugar a
modelos de casi incomprensibles. La ventaja es que son extremadamente
poderosas técnicas -entre los más poderosos clasificadores-acciones que se
pueden aplicar tanto a problemas de predicción numéricos clasificación y.

[ 239 ]
Black Box - Métodos de
redes neuronales y
máquinas de vectores
soporte
El autor de ciencia ficción Arthur C. Clarke tarde escribió: "cualquier tecnología
suficientemente avanzada es indistinguible de la magia". Este capítulo cubre un
par de métodos de aprendizaje automático que puede parecer a primera vista ser
mágica. A pesar de que son muy poderosos, sus funcionamientos internos pueden
ser difíciles de entender.
En ingeniería, éstos se refieren a los procesos de caja como negro porque el
mecanismo que transforma la entrada en la salida se ofuscado por una caja
imaginaria. Por ejemplo, la caja de negro de software de código cerrado
intencionalmente oculta algoritmos propietarios, la caja de negro de legislar política
se basa en los procesos burocráticos, y la caja de negro de salchicha de decisiones
implica un poco de la ignorancia intencionada (pero sabroso). En el caso de la
máquina de aprendizaje, el cuadro negro se debe a las matemáticas complejas que
les permiten funcionar.
Aunque pueden no ser fáciles de entender, es peligroso aplicar modelos de caja
negra a ciegas. Por lo tanto, en este capítulo, vamos a mirar dentro de la caja e
investigar la fabricación de salchichas involucrados en la adaptación de este tipo
de modelos estadísticos. Usted descubrirá:
• Las redes neuronales imitan la estructura de los cerebros
animales para modelar funciones arbitrarias
• máquinas de vectores soporte utilizan superficies
[ 240 ]
multidimensionales para definir la relación entre las características y
resultados
• A pesar de su complejidad, estos pueden ser fácilmente aplicados a problemas del
mundo real

[ 241 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Con un poco de suerte, se dará cuenta de que no es necesario un cinturón negro


en las estadísticas para hacer frente a la máquina de aprendizaje del cuadro
negro-métodos que no hay necesidad de dejarse intimidar!

La comprensión de las redes neuronales


Una red neuronal artificial (ANN) modelos de la relación entre un conjunto de señales
de entrada y una señal de salida utilizando un modelo derivado de nuestra comprensión
de cómo un cerebro biológico responde a los estímulos de las entradas sensoriales. Al
igual que un cerebro utiliza una red de células llamadas neuronas interconectadas para
crear un procesador paralelo masivo, Ann utiliza una red de neuronas artificiales o
nodos para resolver los problemas de aprendizaje.

El cerebro humano está compuesto de aproximadamente 85 mil millones de neuronas, lo


que resulta en una red capaz de representar una enorme cantidad de conocimiento.
Como era de esperar, este empequeñece los cerebros de otros seres vivos. Por ejemplo,
un gato tiene aproximadamente un mil millones de neuronas, un ratón tiene alrededor
de 75 millones de neuronas, y una cucaracha tiene sólo alrededor de un millón de
neuronas. Por el contrario, muchos RNAs contienen muchas menos neuronas, por lo
general sólo varios cientos, por lo que no estamos en peligro de crear un cerebro
artificial en cualquier momento en el futuro cercano, incluso una mosca de la fruta
cerebro con 100.000 neuronas es muy superior a la actual
el estado de la técnica ANN.

Aunque puede ser inviable para modelar completamente el cerebro de una cucaracha,
una red neuronal todavía puede proporcionar un modelo heurístico adecuado de su
comportamiento. Supóngase que se desarrolla un algoritmo que puede imitar la forma
en una cucaracha huye cuando descubierto. Si el comportamiento del robot cucaracha es
convincente, ¿importa si su cerebro es tan sofisticado como el ser vivo de? Esta pregunta
es la base de la controvertida prueba de Turing, propuesto en 1950 por el científico
informático pionero Alan Turing, propuesto en 1950 por el científico informático pionero
Alan Turing, los grados que la máquina como inteligente si un ser humano no puede
distinguir su comportamiento a partir de la vida la criatura de.

Las RNA rudimentarios se han utilizado durante más de 50 años para simular el
enfoque del cerebro para la resolución de problemas. Al principio, esto implicó
aprender funciones simples como la lógica y el cargo o la función O lógica. Estos
ejercicios tempranos fueron utilizados principalmente para ayudar a los científicos a
entender cómo los cerebros biológicos podrían operar. Sin embargo, como las
computadoras se han vuelto cada vez más poderoso en los últimos años, la complejidad
de las redes neuronales ha aumentado tanto, del mismo modo que ahora están con
frecuencia aplicados a problemas más prácticos que incluyen:

• los programas de voz y reconocimiento de escritura como los utilizados


por los servicios de correo de voz de transcripción y máquinas de
clasificación de correo postal
[ 242 ]
• La automatización de dispositivos inteligentes, como los controles ambientales
de un edificio de oficinas o vehículos auto-conducción y zánganos auto-pilotaje
• sofisticados modelos de tiempo y el clima, los patrones de resistencia a la
tracción, la dinámica de fluidos, y muchos otros fenómenos científicos,
sociales, económicos o

[ 243 ]
Capítulo 7

En términos generales, las RNA son aprendices versátiles que se pueden


aplicar a casi cualquier tarea de aprendizaje: clasificación, predicción
numérica, y el reconocimiento de patrones, incluso sin supervisión.

Si merece o no, los estudiantes ANN se presentan a menudo


en los medios de comunicación con bombos y platillos. Por
ejemplo, un "cerebro artificial"
desarrollado por Google fue promocionado recientemente por su
capacidad para identificar los videos de gatos en YouTube. Tal
bombo puede tener menos que ver con algo único a las RNA y
más que ver con el hecho de que las RNA son cautivantes debido a
sus similitudes con mentes vivas.

RNAs se aplican mejor a problemas en los que están bien definidos o al


menos bastante simple los datos de entrada y datos de salida, sin embargo, el
proceso que relaciona la entrada a la salida es extremadamente complejo.
Como método de la caja negro, que funcionan bien para este tipo de
problemas de caja negra.

De biológica de neuronas artificiales


Debido a que las RNA fueron diseñados intencionalmente como modelos
conceptuales de la actividad cerebral humana, es útil entender primero cómo
funcionan las neuronas biológicas. Como se ilustra en la siguiente figura, las
señales entrantes son recibidas por dendritas de las células a través de un
proceso bioquímico. El proceso permite que el impulso de ser
ponderados según su importancia relativa o frecuencia. A medida que el cuerpo de
la célula comienza la acumulación de las señales entrantes, se alcanza un umbral en
el que los fuegos de células y la señal de salida se transmite a través de un proceso
electroquímico por el axón. En las terminales del axón, la señal eléctrica se procesa
de nuevo como una señal química que se pasa a las neuronas vecinas a través de un
pequeño espacio conocido como una sinapsis.

[ 244 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

El modelo de una sola neurona artificial se puede entender en términos muy


similares al modelo biológico. Como se representa en la siguiente figura, una
red dirigida
diagrama define una relación entre las señales de entrada recibidas por las dendritas
(variables X), y la señal de salida (y variables). Al igual que con la neurona biológica,
se pondera la señal de cada dendrita (w valores) de acuerdo con su importancia-
ignore, por ahora, cómo se determinan estos pesos. Las señales de entrada son
sumadas por el cuerpo de la célula y la señal se transmite de acuerdo con una
función de activación se denota por f:

Una neurona artificial típico con dendritas de entrada n puede ser representado por
la fórmula que sigue. Los pesos w permiten cada una de las N entradas (denotados
por xi) para aportar una cantidad mayor o menor a la suma de señales de entrada.
El total neto es utilizado por el la señal resultante función de activación f (x), y, y
(x), es el axón de salida:

Las redes neuronales usan neuronas definidas de esta manera como bloques de
construcción para la construcción de modelos de datos complejos. Aunque hay
numerosas variantes de las redes neuronales, cada uno puede ser definido en
términos de las siguientes características:
• Una función de activación, que transforma las señales de entrada
combinadas de una neurona en una sola señal de salida se van a emitir más
en la red
• Una topología de red (o arquitectura), que describe el número de neuronas
en el modelo, así como el número de capas y la forma en que están
conectados
• El algoritmo de entrenamiento que especifica cómo se establecen pesos de
conexión con el fin de inhibir o excitar neuronas en proporción a la señal de
entrada
[ 245 ]
Vamos a echar un vistazo a algunas de las variaciones dentro de cada una de estas
categorías para ver cómo pueden ser utilizados para construir modelos típicos de
redes neuronales.

[ 246 ]
Capítulo 7

funciones de activación
La función de activación es el mecanismo por el cual la neurona artificial procesa la
información entrante y pasa a lo largo de la red. Al igual que la neurona artificial es
el modelo de la versión biológica, por lo que es la función de activación el modelo
de diseño de la naturaleza.
En el caso biológica, la función de activación podría ser imaginado como un proceso
que implica sumando la señal de entrada total y determinar si cumple el umbral de
disparo. Si es así, la neurona transmite la señal; de lo contrario, no hace nada. En
términos ANN, esto se conoce como una función de activación de umbral, ya que
resulta en una señal de salida sólo una vez un umbral de entrada especificado se ha
alcanzado.
La siguiente figura muestra una función de umbral típico; en este caso, la
neurona se dispara cuando la suma de las señales de entrada es al menos igual a
cero. Debido a que su forma se asemeja a una escalera, a veces se llama una
función de activación de paso unidad.

Aunque la función de activación de umbral es interesante debido a sus


similitudes con la biología, rara vez se utiliza en redes neuronales artificiales.
Liberado de las limitaciones de la bioquímica, las funciones de activación ANN
pueden ser elegidos en base a su capacidad para demostrar características
matemáticas deseables y relaciones modelar con precisión entre los datos.

[ 247 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Tal vez la alternativa más comúnmente utilizado es la función de activación


sigmoide (más específicamente, la sigmoidea logística) se muestra en la siguiente
figura. Tenga en cuenta que en la fórmula mostrada, e es la base del logaritmo
natural (aproximadamente 2,72).
Aunque comparte un paso similar o en forma de "S" con la función de activación de
umbral, la señal de salida ya no es binario; valores de salida pueden caer en
cualquier lugar en el rango de 0 a 1. Además, el sigmoide es diferenciable, lo que
significa que es posible calcular la derivada en toda la gama de los insumos. Como
aprenderá más adelante, esta característica es fundamental para crear eficientes
algoritmos de optimización Ann.

Aunque sigmoide es quizás la función de activación más utilizado y con frecuencia


se utiliza por defecto, algunos algoritmos de redes neuronales permiten una
selección de alternativas. Una selección de tales funciones de activación se muestra
en la siguiente figura:

[ 248 ]
Capítulo 7

El detalle principal que diferencia estas funciones de activación es el rango de


señal de salida. Típicamente, este es uno de (0, 1), (-1, 1), o (-inf, + inf). La elección
de la función de activación empuja la red neuronal de tal manera que puede
adaptarse a ciertos tipos de datos de manera más apropiada, permitiendo la
construcción de redes neuronales especializados. Por ejemplo, un lineales
resultados de la función de activación en una red neural muy similares a un
modelo de regresión lineal, mientras que un gaussianas resultados de la función de
activación en un modelo llamado una red Función de base radial (RBF). Cada uno
de ellos tiene fortalezas más adecuados para ciertas tareas de aprendizaje y no
otros.
Es importante reconocer que para muchas de las funciones de activación, el rango de
valores de entrada que afectan a la señal de salida es relativamente estrecho. Por
ejemplo, en el caso de sigmoide, la señal de salida es siempre casi 0 o 1 para una
señal de entrada por debajo de -5 o por encima
5, Respectivamente. La compresión de la señal de esta manera los resultados en una
señal saturada en los extremos superior e inferior de las entradas muy dinámicos, tal
como encender un amplificador de guitarra a resultados demasiado elevados en un
sonido distorsionado debido al recorte de los picos de las ondas sonoras. Debido a
que este aprieta esencialmente los valores de entrada en un rango menor de salidas,
funciones de activación como el sigmoide se denominan a veces aplastando
funciones.
La solución al problema de aplastamiento es transformar todas las entradas de la red
neural, que los valores de las características caen dentro de un pequeño rango de
alrededor de 0. Típicamente, esto implica la estandarización o normalización de las
características. Al restringir el rango de valores de entrada, la función de activación
tendrá acción en toda la gama, la prevención de características a gran valorada como
el ingreso de los hogares de dominar características de pequeño valorada como el
número de niños en el hogar. Un beneficio adicional es que el modelo también
puede ser más rápido para entrenar, ya que el algoritmo puede recorrer más
rápidamente a través de la gama de valores de entrada accionable.

Aunque teóricamente una red neural puede adaptarse a una


característica muy dinámico mediante el ajuste de su peso sobre
muchas iteraciones. En casos extremos, muchos algoritmos detendrá
la iteración mucho antes de que esto ocurra. Si el modelo está
haciendo predicciones que no tienen sentido, compruebe si ha sido
estandarizada correctamente los datos de entrada.

Topología de la red
La capacidad de una red neuronal para aprender tiene sus raíces en su topología, o
los patrones y estructuras de neuronas interconectadas. Aunque existen
[ 249 ]
innumerables formas de arquitectura de red, pueden ser diferenciados por tres
características principales:

• El número de capas
• Si la información en la red se le permite viajar hacia atrás
• El número de nodos dentro de cada capa de la red de

[ 250 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

La topología determina la complejidad de las tareas que pueden ser aprendidas por
la red. En general, las redes más grandes y más complejas son capaces de identificar
patrones más sutiles y complejas fronteras de decisión. Sin embargo, el poder de una
red no es sólo una función del tamaño de la red, sino también las unidades de forma
están dispuestos.

El número de capas
Para definir la topología, necesitamos una terminología que distingue a las neuronas
artificiales en función de su posición en la red. La figura que sigue ilustra la
topología de una red muy simple. Un conjunto de neuronas llamados nodos de
entrada recibe señales sin procesar directamente de los datos de entrada. Cada nodo
de entrada es responsable de procesar una sola característica en el conjunto de datos;
el valor de la característica será transformado por la función de activación del nodo
correspondiente. Las señales enviadas por los nodos de entrada son recibidos por el
nodo de salida, que utiliza su propia función de activación para generar una
predicción final (denotada aquí como p).
Los nodos de entrada y de salida están dispuestos en grupos conocidos como
capas. Debido a que los nodos de entrada procesar los datos entrantes
exactamente como se recibió, la red tiene solamente un conjunto de pesos de
conexión (etiquetada aquí como w1, w2, w3 y). Por lo tanto, se denomina una red
de una sola capa. redes de una sola capa se pueden utilizar para la clasificación
de patrón básico, sobre todo para los patrones que son linealmente separables,
pero se requieren redes más sofisticadas para la mayoría de las tareas de
aprendizaje.

[ 251 ]
Capítulo 7

Como era de esperar, una forma obvia de crear redes más complejas es mediante la
adición de capas adicionales. Como se muestra aquí, una red multicapa añade una o
más capas ocultas que procesan las señales procedentes de los nodos de entrada
antes de que alcance el nodo de salida. La mayoría de las redes de múltiples capas
están completamente conectados, lo que significa que cada nodo de una capa está
conectado a cada nodo en la capa siguiente, pero esto no es necesario.

El sentido de la marcha información


Es posible que haya notado que en los ejemplos anteriores, puntas de flecha se
utilizan para indicar las señales que viajan en una sola dirección. Redes en el que la
señal de entrada se alimenta continuamente en una dirección de conexión a la
conexión hasta que alcanza la capa de salida se denominan redes de alimentación
directa.
A pesar de la restricción en el flujo de información, redes de alimentación directa
ofrecen una sorprendente cantidad de flexibilidad. Por ejemplo, el número de
niveles y nodos en cada nivel puede variar, múltiples resultados se pueden modelar
de forma simultánea, o múltiples capas ocultas se puede aplicar. Una red neuronal
con múltiples capas ocultas se llama una red neuronal profunda (DNN) y la práctica
de la formación de estas redes se refiere a veces como el aprendizaje profundo.

[ 252 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Por el contrario, una red recurrente (o red de realimentación) permite que las
señales viajen en ambas direcciones mediante bucles. Esta propiedad, que
refleja más de cerca cómo una
obras de redes neuronales biológicas, permite a los patrones extremadamente
complejos que se pueden aprender. La adición de una memoria a corto plazo, o
retraso, aumenta la potencia de las redes recurrentes inmensamente. En particular,
esto incluye la capacidad para comprender las secuencias de eventos durante un
período de tiempo. Esto podría ser utilizado para la predicción del mercado de
valores, la comprensión del habla, o la predicción del tiempo. Una red recurrente
sencilla se representa como sigue:

A pesar de su potencial, las redes recurrentes son todavía en gran parte teórica
y rara vez se utilizan en la práctica. Por otro lado, las redes de alimentación
directa han sido ampliamente aplicado a los problemas del mundo real. De
hecho, la alimentación directa de múltiples capas
la red, a veces llamado el perceptrón multicapa (MLP), es la topología ANN estándar
de facto. Si alguien menciona que se ajuste de una red neuronal, lo más probable
refiriendo a un MLP.

El número de nodos en cada capa


Además de las variaciones en el número de capas y la dirección de desplazamiento
de la información, redes neuronales también pueden variar en complejidad por el
número de nodos en cada capa. El número de nodos de entrada está predeterminada
por el número de funciones en los datos de entrada. Del mismo modo, el número de
nodos de salida está predeterminado por el número de resultados a ser modelado o
el número de niveles de clase en el resultado. Sin embargo, el número de nodos
ocultos se deja al usuario decidir antes del entrenamiento del modelo.
Desafortunadamente, no existe una regla fiable para determinar el número de
neuronas en la capa oculta. El número apropiado depende del número de nodos
[ 253 ]
de entrada, la cantidad de datos de entrenamiento, la cantidad de datos ruidosos,
y la complejidad de la tarea de aprendizaje, entre muchos otros factores.

[ 254 ]
Capítulo 7

En general, las topologías de red más complejas con un mayor número de


conexiones de red permiten que el aprendizaje de los problemas más complejos.
Un mayor número de neuronas dará lugar a un modelo que refleja más de cerca
los datos de entrenamiento, pero esto corre el riesgo de sobreajuste; se puede
generalizar mal a los datos futuros. redes neuronales grandes también pueden ser
computacionalmente caro y lento para entrenar.
Lo más recomendable es utilizar los nodos menor cantidad que resultan en un
rendimiento adecuado en un conjunto de datos de validación. En la mayoría de los
casos, incluso con sólo un pequeño número de miliares oculta a menudo tan sólo
un puñado de redes neuronales pueden ofrecer una gran cantidad de capacidad de
aprendizaje.

Se ha demostrado que una red neuronal con al menos una capa oculta
de neuronas suficientes es un aproximador función universal. Esto
significa que las redes neuronales se pueden utilizar para aproximar
cualquier función continua a una precisión arbitraria en un intervalo
finito.

El entrenamiento de las redes neuronales


de retropropagación con
La topología de red es una pizarra en blanco que por sí mismo no ha aprendido
nada. Al igual que un niño recién nacido, debe ser entrenado con experiencia. A
medida que la red neuronal procesa los datos de entrada, las conexiones entre las
neuronas se refuerzan o se debilitan, similar a cómo el cerebro de un bebé se
desarrolla a medida que experimenta el medio ambiente. pesos de conexión de la red
se ajustan para reflejar los patrones observados en el tiempo.
Entrenamiento de una red neuronal mediante el ajuste de pesos de conexión es muy
computacionalmente intensivas. En consecuencia, a pesar de que se habían
estudiado durante décadas antes, las RNA rara vez se aplican a las tareas de
aprendizaje del mundo real hasta la década de 1980 a mediados y finales, cuando se
descubrió un método eficaz para la formación de una red neuronal. El algoritmo,
que utiliza una estrategia de errores se propagan hacia atrás, es ahora conocido
simplemente como backpropagation.

Coincidentemente, varios equipos de investigadores


descubrieron de forma independiente y publicaron el algoritmo
de propagación hacia atrás alrededor de la
Mismo tiempo. Entre ellos, quizás el trabajo más citado es:
Rumelhart DE, Hinton GE, Williams RJ. representaciones de aprendizaje
por errores se propagan hacia atrás. Naturaleza. 1986; 323: 533-566.
[ 255 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Aunque todavía es notoriamente lento en relación con muchos otros algoritmos de


aprendizaje automático, el método de propagación hacia atrás llevó a un
resurgimiento del interés en las RNA. Como resultado, las redes de alimentación
directa de múltiples capas que utilizan el algoritmo de retropropagación son ahora
comunes en el campo de la minería de datos. Estos modelos ofrecen las siguientes
ventajas
y debilidades:

fortalezas debilidades
• Puede ser adaptado a la • Muy computacionalmente
clasificación o problemas de intensivo y lento para entrenar,
predicción numéricos sobre todo si la topología de red es
• Capaz de modelar patrones más compleja
complejos que casi cualquier • Muy propensos a la formación
algoritmo de datos sobreajuste
• Hace algunas suposiciones acerca • Los resultados en un complejo
de las relaciones subyacentes de modelo de caja negro que es
los datos difícil, si no imposible,
interpretar

En su forma más general, se repite el algoritmo de retropropagación a través de


muchos ciclos de dos procesos. Cada ciclo se conoce como una época. Debido a que
la red no contiene ningún conocimiento a priori (existente), los pesos de partida se
establecen normalmente al azar. A continuación, los algoritmo itera a través de los
procesos, hasta que un criterio de parada se alcanza. Cada época en el algoritmo de
backpropagation incluye:
• Una fase hacia adelante en el que las neuronas se activan en secuencia
desde la capa de entrada a la capa de salida, aplicando pesos de cada
neurona y
función de activación a lo largo del camino. Al llegar a la capa final, se
produce una señal de salida.
• Una fase hacia atrás en el que la señal de salida de la red resultante de la
fase de avance se compara con el valor verdadero de destino en los datos
de entrenamiento. La diferencia entre la señal de salida de la red y los
verdaderos resultados de valor en un error que se propaga hacia atrás en la
red para modificar los pesos de conexión entre las neuronas y reducir los
errores futuros.
Con el tiempo, la red utiliza la información enviada hacia atrás para reducir el error
total de la red. Sin embargo, queda una pregunta: ya que la relación entre las
entradas y salidas de cada neurona es complejo, ¿cómo determina el algoritmo de
cuánto se debe cambiar un peso? La respuesta a esta pregunta implica una técnica

[ 256 ]
llamada de descenso de gradiente. Conceptualmente, funciona de manera similar a
cómo un explorador atrapado en la selva podría encontrar un camino hacia el agua.
Al examinar el terreno y continuamente caminar en la dirección de mayor pendiente
descendente, el explorador llegará a alcanzar el valle más bajo, que es probable que
sea un cauce del río.

[ 257 ]
Capítulo 7

En un proceso similar, el algoritmo de retropropagación utiliza la derivada de la


función de activación de cada neurona para identificar el gradiente en la dirección
de cada uno de los pesos de ahí entrantes la importancia de tener una función de
activación diferenciable. El gradiente sugiere cómo abruptamente se reduce o se
incrementa para un cambio en el peso del error. El algoritmo intentará cambiar los
pesos que resultan en la mayor reducción en el error por una cantidad conocida
como la tasa de aprendizaje. Cuanto mayor sea la tasa de aprendizaje, más rápido es
el algoritmo intentará descender por las pendientes, lo que podría reducir el tiempo
de entrenamiento en el riesgo de rebasamiento del valle.

Aunque este proceso parece complejo, es fácil de aplicar en la práctica. Vamos a


aplicar nuestra comprensión de las redes de alimentación directa de múltiples
capas a un problema del mundo real.

Ejemplo - Modelado de la
resistencia del hormigón con RNAs
En el campo de la ingeniería, que es fundamental contar con estimaciones precisas
del comportamiento de los materiales de construcción. Estas estimaciones son
necesarios para el desarrollo de las normas de seguridad que rigen los materiales
utilizados en la construcción de edificios, puentes y carreteras.

[ 258 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

La estimación de la resistencia del hormigón es un reto de particular interés. Aunque


se utiliza en casi cada proyecto de construcción, el rendimiento concreto varía en
gran medida debido a una amplia variedad de ingredientes que interactúan de
manera compleja. Como resultado, es difícil predecir con precisión la resistencia del
producto final. Un modelo que se podría predecir con fiabilidad la resistencia del
hormigón da una lista de la composición de los materiales de entrada podría dar
lugar a prácticas de construcción más seguras.

Paso 1 - recogida de datos


Para este análisis, vamos a utilizar los datos sobre la resistencia a la compresión del
hormigón donado a la UCI Machine Learning repositorio de datos
(http://archive.ics.uci.edu/ml) Por I-Cheng Yeh. Como se encontró con éxito
en el uso de redes neuronales para modelar estos datos, vamos a tratar de replicar su
trabajo utilizando un modelo de red neuronal simple en R.

Para obtener más información sobre el enfoque de Yeh a esta


tarea de aprendizaje, consulte: Yeh IC. Modelización de
resistencia del hormigón de alto rendimiento utilizando redes
neuronales artificiales. Cemento y Hormigón de
Investigación. 1998; 28: 1797-1808.

Según el sitio web, el conjunto de datos hormigón contiene 1.030 ejemplos de


hormigón con ocho características que describen los componentes utilizados en la
mezcla. Se cree que estas características estar relacionada con la resistencia a la
compresión final y que incluyen la cantidad (en kilogramos por metro cúbico) de
cemento, escoria, cenizas, agua, superplastificante, agregado grueso, y agregado
fino utilizado en el producto, además de la envejecimiento tiempo (medido en
días).

Para continuar con este ejemplo, descargue el


archivo desde el sitio web concrete.csv Packt
Publishing y guardarlo en su directorio de
trabajo R.

Paso 2 - exploración y la preparación de los


datos
Como de costumbre, vamos a comenzar nuestro análisis mediante la carga de los datos en
un objeto utilizando el R
read.csv función (), y la confirmación de que coincide con la estructura
esperada:
[ 259 ]
> concreto <- read.csv ( "concrete.csv")
> str (hormigón)
'Hoja.de.datos': 1030 obs. of9 variables:
PS cemento: num141 169 250 266 155 ...
PS escoria: num212 42,2 0 114 183.4 ...
PS ceniza: NUM0 124,3 95,7 0 0 ...

[ 260 ]
Capítulo 7

PS agua: num204 158 187 228 193 ...


$ Superplástica: NUM0 10,8 5,5 9,1 0 0 0 6,4 0 9 ...
PS coarseagg: num972 1081 957 932 1047 ...
PS fineagg: num748 796 861 670 697 ...
PS años: int28 14 28 28 28 90 7 56 28 28 ...
PS fuerza: num29.9 23,5 29,2 45,9 18,3 ...

Las nueve variables en la trama de datos que correspondan a las ocho


características y uno de los resultados que esperábamos, aunque un problema se
ha vuelto evidente. Las redes neuronales funcionan mejor cuando los datos de
entrada se escalan para un rango estrecho alrededor de cero, y aquí, vemos que los
valores que van desde cero hasta más de mil.
Típicamente, la solución a este problema es cambiar la escala de los datos con una
función de normalización o estandarización. Si los datos siguen una curva en forma
de campana (una distribución normal como se describe en el capítulo 2, gestionar y
comprender los datos), entonces puede tener sentido utilizar la estandarización a
través de la función de R incorporada escala (). Por otro lado, si los datos siguen una
distribución uniforme o son severamente no normal, y luego a una normalización
0-1 rango puede ser más apropiado. En este caso, vamos a utilizar este último.
En el capítulo 3, Lazy Learning - Clasificación a partir de los vecinos más cercanos,
definimos nuestra
propio normalizar() funcionan como:
> normalizar <- function (x) {
retorno ((x - min (x)) / (max (x) - min (x)))
}

Después de ejecutar este código, nuestra función normalize () se puede aplicar a


todas las columnas de la trama de datos concreto utilizando la función lapply () de
la siguiente manera:
> concrete_norm <- as.data.frame (lapply (hormigón, normalizar))

Para confirmar que la normalización trabajó, podemos ver que el mínimo y


fuerza máxima ahora son 0 y 1, respectivamente:
> Resumen ($ fortaleza concrete_norm)
Min. primeroQu.MedianMean
tercero Qu. Max.
0.00000.26640.40010.41720.54571.0000

[ 261 ]
En comparación, los valores máximo y mínimo original y fueron 2.33 y 82.60:
> Resumen ($ fortaleza de hormigón)
Min. primeroQu.MedianMean
tercero Qu. Max. 2.3323.7134.4435.8246.14
82.60

[ 262 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Cualquier transformación aplicada a los datos antes de entrenar el


modelo tendrá que ser aplicado a la inversa más adelante, con el
fin de convertir de nuevo a las unidades de medición originales.
Para facilitar el cambio de escala, es aconsejable guardar los datos
originales o al menos el resumen estadístico de los datos
originales.

Siguiendo el precedente de Yeh en la publicación original, vamos a dividir los datos


en un conjunto de entrenamiento con el 75 por ciento de los ejemplos y ensayos que
se haga con el 25 por ciento. El archivo CSV se utilizó ya se solucionó en orden
aleatorio, por lo que sólo tendrá que dividirlo en dos partes:
> concrete_train <- concrete_norm [1: 773],
> concrete_test <- concrete_norm [774: 1030,]

Vamos a utilizar el conjunto de datos de entrenamiento para construir la red


neural y el conjunto de datos de prueba para evaluar cómo se extiende el modelo a
los resultados futuros. Como es fácil de overfit una red neuronal, este paso es muy
importante.

Paso 3 - la formación de un modelo sobre los


datos
Para modelar la relación entre los ingredientes utilizados en el hormigón y la
resistencia del producto acabado, vamos a utilizar una red de alimentación directa
neural multicapa. El paquete NeuralNet de Stefan Fritsch y Frauke Guenther
proporciona un estándar
y fácil de usar aplicación de este tipo de redes. También ofrece una función para
trazar la topología de la red. Por estas razones, la aplicación NeuralNet es una
buena opción para aprender más acerca de las redes neuronales, aunque esto no
quiere decir que no se puede utilizar para llevar a cabo el trabajo real, así, que es
una herramienta muy poderosa, tan pronto se verá.

Hay varios otros paquetes de uso común para entrenar modelos


de RNA en R, cada uno con fortalezas y debilidades únicas.
Debido a que los buques como parte de la instalación estándar R,
el paquete nnet es tal vez el más frecuentemente citado aplicación
ANN.
Utiliza un algoritmo más sofisticado que retropropagación
estándar. Otra opción es el paquete fuerte RSNNS, que ofrece una
gama completa de funcionalidad de la red neuronal con la
desventaja es que es más difícil de aprender.

[ 263 ]
Capítulo 7

Como NeuralNet no está incluido en la base de R, tendrá que instalarlo


escribiendo install.packages ( "NeuralNet") y cargarlo con el biblioteca
(NeuralNet) mando. el incluidaNeuralNet () función se puede utilizar para
el entrenamiento de redes neuronales para la predicción numérica utilizando la
siguiente sintaxis:

Vamos a empezar por la formación de la red de alimentación directa de


múltiples capas más simple con un solo nodo oculto:
> concrete_model <- NeuralNet (fuerza ~ escoria de cemento +
+ Cenizas + agua + + superplástica coarseagg + fineagg
+ edad, los datos = concrete_train)

[ 264 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Podemos entonces visualizar la topología de red utilizando la función plot () en


el objeto modelo resultante:
> plot (concrete_model)

En este modelo simple, hay un nodo de entrada para cada uno de los ocho
características, seguido de un único nodo oculto y un único nodo de salida que
predice la resistencia del hormigón. Los pesos para cada una de las conexiones
también se representan, como lo son los términos de sesgo (indicados por los nodos
etiquetados con el número 1). Los términos de polarización son constantes
numéricas que permiten que el valor en los nodos indicados para ser desplazado
hacia arriba o hacia abajo, al igual que el punto de intersección en una ecuación
lineal.

Una red neuronal con un solo nodo oculto puede ser pensado
como un primo lejano de los modelos de regresión lineal que
estudiamos en el capítulo 6, la previsión de datos numéricos -
Los métodos de regresión. El peso entre cada nodo de entrada
y el nodo oculto es similar a los coeficientes de regresión, y el
peso para el término de sesgo es similar a la intersección.

[ 265 ]
Capítulo 7

En la parte inferior de la figura, R informa del número de etapas de formación y


una medida de error llama la suma de errores cuadrados (SSE), que como era de
esperar, es la suma de los valores pronosticados al cuadrado menos reales. Un
SSE bajo implica un mejor rendimiento predictivo. Esto es útil para estimar el
rendimiento del modelo a los datos de entrenamiento, pero nos dice poco acerca
de cómo se va a realizar en los datos que no se ven.

Paso 4 - evaluar el rendimiento del modelo


El diagrama de topología de la red nos da una ojeada en el cuadro negro de la
RNA, pero no proporciona mucha información acerca de lo bien que el modelo se
ajusta a los datos futuros. Para generar predicciones sobre el conjunto de datos de
prueba, podemos utilizar el cálculo () de la siguiente manera:
> model_results <- calcular (concrete_model, concrete_test [1: 8])

La función de cómputo () funciona un poco diferente de las funciones de predecir ()


que hemos utilizado hasta ahora. Devuelve una lista con dos componentes: $
neuronas, que almacena las neuronas de cada capa en la red, y $ net.result, que
almacena los valores previstos. Vamos a querer esta última:
> predicted_strength <- model_results $ net.result

Debido a que este es un problema de predicción numérica en lugar de un problema


de clasificación, no podemos usar una matriz de confusión para examinar la
precisión del modelo. En su lugar, hay que medir la correlación entre nuestra
resistencia del hormigón predicho y el valor real. Esto da una idea de la fuerza de la
asociación lineal entre las dos variables.
Recordemos que la función de cor () se utiliza para obtener una correlación entre
dos vectores numéricos:
> cor (predicted_strength, concrete_test $
fuerza) [, 1]
[1,] 0,8064655576

No se alarme si su resultado difiere. Debido a que la red neuronal


comienza con pesos aleatorios, las predicciones pueden variar de un
modelo a otro. Si desea hacer coincidir exactamente estos
resultados, trate de usar conjunto. semillas (12345) antes de la
construcción de la red neuronal.

correlaciones estrechas a 1 indican una fuerte relación lineal entre dos variables. Por
lo tanto, la correlación de alrededor de 0,806 aquí indica una relación bastante fuerte.
Esto implica que nuestro modelo está haciendo un trabajo bastante bueno, incluso
[ 266 ]
con un único nodo oculto.
Dado que sólo utilizamos un nodo oculto, es probable que podamos mejorar
el rendimiento de nuestro modelo. Vamos a tratar de hacer un poco mejor.

[ 267 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Paso 5 - mejorar el rendimiento del modelo


A medida que las redes con topologías más complejas son capaces de aprender
conceptos más difíciles, vamos a ver lo que ocurre cuando se aumenta el número de
nodos ocultos a cinco. Utilizamos la función NeuralNet () como antes, pero añadimos
el parámetro oculta = 5:
> concrete_model2 <- NeuralNet (fuerza ~ escoria de cemento + +
ceniza + agua + +
superplástica coarseagg +
fineagg + edad,
datos = concrete_train, oculto = 5)

El trazado de la red de nuevo, vemos un aumento drástico en el número de


conexiones. Podemos ver cómo esto afectó el desempeño de la siguiente manera:
> plot (concrete_model2)

[ 268 ]
Capítulo 7

Observe que el error informado (medido de nuevo por SSE) se ha reducido de


5,08 en el modelo anterior a 1,63 aquí. Además, el número de pasos de formación
aumentó de 4.882 a 86.849, lo que debería ser una sorpresa teniendo en cuenta lo
mucho más complejo que el modelo ha convertido. Más redes complejas toman
muchas más iteraciones para encontrar los pesos óptimos.
Aplicando los mismos pasos para comparar los valores predichos a los valores
reales, que ahora obtener una correlación alrededor de 0,92, lo cual es una
mejora considerable sobre el resultado anterior de 0,80 con un único nodo
oculto:
> model_results2 <- calcular (concrete_model2, concrete_test [1: 8])
> predicted_strength2 <- model_results2 $ net.result
> cor (predicted_strength2, concrete_test $
fuerza) [, 1]
[1,] 0,9244533426

Curiosamente, en la publicación original, Yeh informó una correlación media de


0.885 usando una red neural muy similar. Esto significa que con un esfuerzo
relativamente pequeño, hemos sido capaces de igualar el rendimiento de un experto
en la materia. Si desea más práctica con redes neuronales, es posible que trate de
aplicar los principios aprendidos anteriormente en este capítulo para ver cómo
afecta al rendimiento del modelo. Tal vez trate de usar diferentes números de nodos
ocultos, la aplicación de diferentes funciones de activación, y así sucesivamente. los
? NeuralNet ayuda página proporciona más información sobre los
distintos parámetros que se pueden ajustar.

La comprensión de las SVM


Una máquina de soporte vectorial (SVM) se puede imaginar como una superficie que crea
un límite entre puntos de datos representados en multidimensional que
representan ejemplos y sus valores de características. El objetivo de una SVM es
para crear un límite plano llamado un hiperplano, que divide el espacio para crear
particiones bastante homogéneas en ambos lados. De esta manera, el aprendizaje
SVM combina aspectos tanto del vecino más cercano basado en instancia
aprendizaje presentan en el Capítulo 3, Lazy Learning - Clasificación a partir de los
vecinos más cercanos, y el modelo de regresión lineal describen en el capítulo 6, la
previsión de datos numéricos - Los métodos de regresión. La combinación es muy
potente, lo que permite SVM para modelar relaciones muy complejas.

[ 269 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Aunque las matemáticas básicas que impulsan las SVM han existido desde hace
décadas, que han estallado recientemente en popularidad. Esto es, por supuesto,
enraizada en su
el estado de la técnica de actuación, pero quizás también debido al hecho de que
el ganador de premios algoritmos SVM se han implementado en varias
bibliotecas populares y bien apoyados a través de muchos lenguajes de
programación, incluyendo R. SVM por lo tanto han sido adoptados por un
público mucho más amplio , que podría haber sido de otro modo no puede
aplicar el algo compleja matemática necesaria para implementar un SVM. La
buena noticia es que a pesar de las matemáticas puede ser difícil, los conceptos
básicos son comprensibles.
SVMs pueden ser adaptados para su uso con casi cualquier tipo de tarea de
aprendizaje, incluyendo tanto la clasificación y predicción numérica. Muchos de
los principales éxitos del algoritmo han llegado en el reconocimiento de patrones.
aplicaciones notables incluyen:
• Clasificación de los datos microarrays de expresión génica en
el campo de la bioinformática para identificar el cáncer u otras
enfermedades genéticas
• categorización de textos tales como la identificación de la lengua utilizada en
un documento o la clasificación de los documentos por tema
• La detección de eventos pero importantes raras como fallo de motor de
combustión, las violaciones de seguridad, o terremotos

SVMs se entienden más fácilmente cuando se usa para la clasificación binaria, que es
cómo se ha utilizado siempre el método. Por lo tanto, en las secciones restantes, nos
centraremos sólo en SVM clasificadores. No se preocupe, sin embargo, ya que los
mismos principios que aprenda aquí se aplicará mientras se adapta a las SVM de
otras tareas de aprendizaje, tales como la predicción numérica.

Clasificación con hiperplanos


Como se señaló anteriormente, SVMs utilizan un límite llama un hiperplano de
partición de datos en grupos de valores de clase similares. Por ejemplo, la siguiente
figura representa hiperplanos que separan grupos de círculos y cuadrados en dos y
tres dimensiones. Debido a que los círculos y cuadrados se pueden separar
perfectamente por la línea recta o una superficie plana, que se dice que son
linealmente separables. En primer lugar, vamos a considerar solamente el caso
sencillo en el que esto es cierto, pero las SVM puede extenderse también a problemas
en los que los puntos no son linealmente separables.

[ 270 ]
Capítulo 7

Por conveniencia, el hiperplano se representa tradicionalmente


como una línea en el espacio 2D, pero esto es simplemente porque
es difícil de ilustrar el espacio en más de dos dimensiones. En
realidad, el hiperplano es una superficie plana en un espacio, un
concepto de alta dimensión que puede ser difícil conseguir su mente
alrededor.

En dos dimensiones, la tarea del algoritmo SVM es identificar una línea que separa
las dos clases. Como se muestra en la siguiente figura, hay más de una opción de
línea divisoria entre los grupos de círculos y cuadrados. Tres de tales posibilidades
se etiquetan a, b, y c. ¿Cómo elegir el algoritmo?

La respuesta a esa pregunta implica una búsqueda de la máxima Margen


Hyperplane (MMH) que crea la mayor separación entre las dos clases. Aunque
ninguna de las tres líneas que separan los círculos y cuadrados que clasificar
correctamente todos los puntos de datos, es probable que la línea que conduce a la
mayor separación se generalizará lo mejor a los datos futuros. El margen máximo
mejorará la posibilidad de que, a pesar del ruido aleatorio, los puntos permanecerán
en el lado correcto de la frontera.

[ 271 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Los vectores de soporte (indicadas por flechas en la figura que sigue) son los
puntos de cada clase que son los más cercanos a la MMH; cada clase debe tener al
menos un vector de apoyo, pero es posible tener más de uno. Utilizando los
vectores de soporte solo, es posible definir el MMH. Esta es una característica
clave de las SVM; los vectores de soporte proporcionan una forma muy compacta
para almacenar un modelo de clasificación, incluso si el número de características
es extremadamente grande.

El algoritmo para identificar los vectores de soporte se basa en la geometría de


vectores e implica algunos cálculos bastante complicado que está fuera del alcance
de este libro. Sin embargo, los principios básicos del proceso son bastante sencillos.

Más información sobre las matemáticas de SVMs se puede encontrar


en el documento clásico: Cortes C, Vapnik red de asistencia del vector
V.. Aprendizaje automático. 1995; 20: 273-297. Una discusión nivel
principiante puede encontrarse en:
Bennett KP, máquinas de vectores Campbell C. apoyo: bombo o hallelujah.
Exploraciones SIGKDD. 2003; 2: 1-13. Una mirada más detallada se puede encontrar
en: Steinwart I, Christmann A. Support Vector Machines. Nueva York:
Saltador; 2008.

El caso de los datos linealmente separables


Es más fácil de entender cómo encontrar el margen máximo bajo el supuesto de que
las clases son linealmente separables. En este caso, el MMH es tan lejos como sea
posible de los límites exteriores de los dos grupos de puntos de datos. Estos límites
exteriores son conocidos como el casco convexo. El MMH es entonces el bisector
perpendicular de la línea más corta entre los dos cascos convexas. algoritmos
informáticos sofisticados que utilizan una técnica conocida como optimización
cuadrática son capaces de encontrar el margen máximo de esta manera.

[ 272 ]
Capítulo 7

Un enfoque alternativo (pero equivalente) implica una búsqueda a través del


espacio de todas las posibles hiperplano con el fin de encontrar un conjunto de dos
planos paralelos que dividen los puntos en grupos homogéneos sin embargo, sí son
tan distantes entre sí como sea posible. Para usar una metáfora, uno se puede
imaginar este proceso como similar a tratar de encontrar el colchón más grueso que
pueden caber hasta una escalera a su dormitorio.

Para entender este proceso de búsqueda, tendremos que definir exactamente lo que
entendemos por una
hiperplano. En el espacio n-dimensional, se utiliza la siguiente ecuación:

Si no está familiarizado con esta notación, las flechas por encima de las letras indican
que son vectores en lugar de números individuales. En particular, W es un vector de
n pesos, es decir, {w1, w2, ..., wnorte}Y b es un número único conocido como el sesgo. El
sesgo es conceptualmente equivalente al término de intersección en forma de
pendiente-intersección discutido en el capítulo 6, la previsión de datos numéricos -
métodos de regresión.

Si usted está teniendo problemas para imaginar el avión, no se


preocupe por los detalles. Simplemente pensar en la ecuación como
una forma de especificar una superficie, al igual que cuando la
forma pendiente-intersección (y = mx + b) se utiliza para
especificar líneas en el espacio 2D.

Usando esta fórmula, el objetivo del proceso es encontrar un conjunto de pesos que
especifican dos
hiperplanos, como sigue:

[ 273 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

También se requiere que estos hiperplanos se especifican de forma que todos los
puntos de una caída clase por encima de la primera hiperplano y todos los puntos
de la otra clase de caída por debajo del segundo hiperplano. Esto es posible siempre
y cuando los datos son linealmente separables.

geometría del vector define la distancia entre estos dos planos como:

Aquí, || w || indica la norma euclidiana (la distancia desde el origen al vector w).
Debido || w || está en el denominador, para maximizar la distancia, es necesario
reducir al mínimo
|| w ||. La tarea es típicamente vuelto a expresar como un conjunto de restricciones, de
la siguiente manera:

Aunque esto parece complicado, en realidad no es demasiado complicado de


entender conceptualmente. Básicamente, la primera línea implica que necesitamos
para reducir al mínimo la norma euclidiana (al cuadrado y dividido por dos para
hacer más fácil el cálculo). El segundo
línea observa que esta está sujeta a (st), la condición de que cada uno de los puntos de
datos yi es
clasificado correctamente. Tenga en cuenta que y indica el valor de la clase (transformado
a +1 o
-1) y el revés "A" es la abreviatura de "para todos".
Al igual que con el otro método para encontrar el margen máximo, la búsqueda de
una solución a este problema es una tarea mejor dejar para el software de
optimización cuadrática. Aunque puede ser intensivo del procesador, los algoritmos
especializados son capaces de resolver estos problemas rápidamente incluso en
bastante grandes conjuntos de datos.

El caso de los datos de forma no lineal separable


Como hemos trabajado a través de la teoría detrás de las SVM, puede que se
pregunte sobre el elefante en la sala: ¿qué ocurre si los datos no son separables
linealmente? La solución a este problema es el uso de una variable de holgura, lo
que crea un margen suave que permite a algunos puntos que caen en el lado
incorrecto del margen. La figura
[ 274 ]
que sigue ilustra dos puntos que caen en el lado equivocado de la línea con los
términos de holgura correspondientes (marcados con la letra griega Xi):

[ 275 ]
Capítulo 7

Un valor de coste (indicado como C) se aplica a todos los puntos que violan las
limitaciones, y en lugar de encontrar el margen máximo, el algoritmo intenta
minimizar el coste total. Por tanto, podemos revisar el problema de optimización
a:

Si todavía está confundido, no se preocupe, usted no está solo. Por suerte, paquetes
de SVM felizmente optimizar esto para usted sin tener que entender los detalles
técnicos. La pieza importante entender es la adición del parámetro de coste C.
Modificación de este valor se ajustará la pena, por ejemplo, la caída en el lado
equivocado del hiperplano. Cuanto mayor es el coeficiente de coste, más dura es la
optimización va a tratar de lograr el 100 por ciento de la separación. Por otro lado, un
parámetro de coste más bajo pondrá el énfasis en un margen global más amplio. Es
importante lograr un equilibrio entre estos dos con el fin de crear un modelo que
generaliza bien a los datos futuros.

El uso de granos para espacios no lineales


En muchas aplicaciones del mundo real, las relaciones entre las variables son no
lineales. A medida que acabamos de descubrir, una SVM todavía puede ser
entrenado en tales datos a través de la adición de una variable de holgura, lo que
permite a algunos ejemplos para estar mal clasificados. Sin embargo, esta no es la
única manera de abordar el problema de la no linealidad. Una característica clave
de las SVM es su capacidad de mapear el problema en un espacio de dimensión
superior mediante un proceso conocido como el truco del núcleo. De este modo,
una relación no lineal de repente puede parecer bastante lineal.

[ 276 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Aunque esto parece absurdo, en realidad es bastante fácil de ilustrar con el


ejemplo. En la siguiente figura, el diagrama de dispersión de la izquierda
representa una relación no lineal entre una clase de tiempo (soleado o nieve) y dos
características: latitud y longitud.
Los puntos en el centro de la trama son miembros de la clase de nieve, mientras que
los puntos en los márgenes son todos soleado. Tales datos podrían haber sido
generado a partir de un conjunto de informes del tiempo, algunos de los cuales
fueron obtenidos de las estaciones cercanas a la cima de una montaña, mientras que
otros se obtuvieron de estaciones alrededor de la base de la montaña.

En el lado derecho de la figura, después de que el truco del núcleo se ha aplicado,


nos fijamos en los datos a través de la lente de una nueva dimensión: la altura.
Con la adición de esta característica, las clases son ahora perfectamente
linealmente separables. Esto es posible porque hemos obtenido una nueva
perspectiva sobre los datos. En la figura de la izquierda, estamos viendo la
montaña a vista de pájaro, mientras que en el correcto, estamos viendo la montaña
desde una distancia en el nivel del suelo. En este caso, la tendencia es obvia:
tiempo de nieve se encuentra a mayor altitud.
SVM con los núcleos no lineales agregan dimensiones adicionales a los datos con el
fin de crear la separación de esta manera. En esencia, el truco del núcleo implica un
proceso de construcción de nuevas características que expresan las relaciones
matemáticas entre las características medidas. Por ejemplo, la función de la altitud se
puede expresar matemáticamente como una interacción entre latitud y longitud-
cuanto más cerca el punto es el centro de cada una de estas escalas, cuanto mayor es
la altitud. Esto permite SVM para aprender conceptos que no se midieron de forma
explícita en los datos originales.

[ 277 ]
Capítulo 7

SVM con los núcleos no lineales son extremadamente potentes clasificadores, aunque sí
tienen algunas desventajas, como se muestra en la siguiente tabla:

fortalezas debilidades
• Puede ser utilizado para la • Encontrar el mejor modelo
clasificación o problemas de requiere pruebas de diversas
predicción numéricos combinaciones de granos y los
• No excesivamente influenciada por parámetros del modelo
los datos ruidosos y poco propenso • Puede ser lento para entrenar,
a sobreajuste especialmente si el conjunto de
• Puede ser más fácil de usar que las datos de entrada tiene un gran
redes neuronales, en particular número de características o
debido a la existencia de varios ejemplos
algoritmos de SVM bien apoyado • Los resultados en un complejo
• Ganando popularidad debido a modelo de caja negro que es difícil, si
su alta precisión y de alto perfil no imposible, interpretar
victorias en competiciones de
minería de datos

funciones del núcleo, en general, son de la siguiente forma. La función denotada por
la letra griega phi, es decir, (x), es un mapeo de los datos en otro espacio. Por lo
tanto, la función del núcleo general se aplica alguna transformación a la xi vectores
de características y xj y las combina con el producto escalar, que toma dos vectores y
devuelve un solo número.

Usando esta forma, las funciones del núcleo se han desarrollado durante muchos
dominios diferentes de datos. Algunas de las funciones del núcleo más
comúnmente utilizadas son las siguientes.
Casi todos los paquetes de software SVM incluirán estos núcleos, entre muchos otros.
El núcleo lineal no transforma los datos en absoluto. Por lo tanto, se puede
expresar simplemente como el producto escalar de las características:

El núcleo polinomio de grado d añade una simple transformación no lineal de


los datos:

[ 278 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Los resultados sigmoide del núcleo en un modelo SVM algo análogo a una red
neural utilizando una función de activación sigmoide. Las letras kappa y delta
griega se utilizan como parámetros del kernel:

El kernel gaussiana RBF es similar a una red neuronal RBF. El kernel RBF se
desempeña bien en muchos tipos de datos, y se piensa que es un punto de
partida razonable para muchas tareas de aprendizaje:

No hay una regla fiable para que coincida con un kernel a una tarea de aprendizaje.
El ajuste depende en gran medida el concepto que hay que aprender, así como la
cantidad de datos de entrenamiento y las relaciones entre las características. A
menudo, un poco de ensayo y error es requerido por la formación y la evaluación
de varios SVMs en un conjunto de datos de validación. Dicho esto, en muchos
casos, la elección del núcleo es arbitraria, ya que el rendimiento puede variar
ligeramente. Para ver cómo funciona esto en la práctica, vamos a aplicar nuestra
comprensión de la SVM clasificación a un problema del mundo real.

Ejemplo - la realización de OCR con SVMs


El procesamiento de imágenes es una tarea difícil para muchos tipos de algoritmos
de aprendizaje automático. Las relaciones que unen los patrones de píxeles a
conceptos superiores son extremadamente complejos y difíciles de definir. Por
ejemplo, es fácil para un ser humano para reconocer una cara, un gato, o la letra "A",
pero la definición de estos patrones en las reglas estrictas es difícil. Además, los
datos de imagen es a menudo ruidoso. Puede haber muchas variaciones leves en la
forma de captura de la imagen, dependiendo de la iluminación, la orientación y
posicionamiento del sujeto.
SVM son muy adecuados para hacer frente a los retos de los datos de imagen. Capaz
de aprender patrones complejos sin ser demasiado sensible al ruido, que son capaces
de reconocer patrones visuales con un alto grado de precisión. Por otra parte, la
debilidad clave de SVMs-la representación-es negro cuadro modelo menos crítica
para el procesamiento de imágenes. Si un SVM puede diferenciar un gato de un
perro, no importa mucho cómo lo está haciendo.

[ 279 ]
Capítulo 7

En esta sección, vamos a desarrollar un modelo similar a los utilizados en el


núcleo del software de reconocimiento óptico de caracteres (OCR) que suele
incluirse con escáneres de documentos de escritorio. El propósito de este software
es para procesar documentos en papel impreso o mediante la conversión de texto
escrito a mano en un formato electrónico que se guarda en una base de datos. Por
supuesto, esto es un problema difícil debido a las muchas variantes en el estilo
manuscrita y fuentes impresas. A pesar de ello, los usuarios de software cuenta
con la perfección, ya que los errores o errores tipográficos pueden dar lugar a
errores embarazosos o costosos en un entorno empresarial. Vamos a ver si nuestra
SVM es hasta la tarea.

Paso 1 - recogida de datos


Cuando el software de OCR procesa primero un documento, se divide el papel
en una matriz tal que cada celda de la cuadrícula contiene un único glifo, que es
sólo un término
en referencia a una letra, símbolo o un número. A continuación, para cada celda, el
software intentará emparejar el glifo a un conjunto de todos los caracteres que
reconoce. Por último, los caracteres individuales estarían combinan de nuevo juntos
en palabras, que opcionalmente se podrían revisión ortográfica en un diccionario en
el idioma del documento.
En este ejercicio, vamos a suponer que ya hemos desarrollado el algoritmo para
dividir el documento en regiones rectangulares constituidas cada una por un solo
carácter. También vamos a asumir el documento contiene sólo caracteres alfabéticos
en Inglés.
Por lo tanto, vamos a simular un proceso que implica glifos de contrapartida a
una de las 26 letras, de la A a la Z.
Con este fin, vamos a utilizar un conjunto de datos donado a la UCI Machine
Learning Repositorio de datos (http://archive.ics.uci.edu/ml) Por W. Frey
y DJ pizarra. El conjunto de datos contiene 20.000 ejemplos de letras mayúsculas
del alfabeto Inglés 26 como está impreso utilizando 20 tipos de letra en blanco y
negro diferentes reformados y distorsionadas al azar.

Para más información sobre este conjunto de datos, consulte la pizarra DJ,
reconocimiento Frey W. Carta usando adaptación al estilo de Holanda
clasificadores. Aprendizaje automático. 1991; 6: 161-182.

[ 280 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

La siguiente figura, publicado por Frey y pizarra, proporciona un ejemplo de


algunos de los glifos impresos. Distorsionada de esta manera, las letras son un reto
para un ordenador para identificar, sin embargo, se reconoce fácilmente por un ser
humano:

Paso 2 - exploración y la preparación de los


datos
De acuerdo con la documentación proporcionada por Frey y pizarra, cuando los
glifos son escaneados en el ordenador, que se convierten en píxeles y 16 atributos
estadísticos se registran.
Los atributos miden características tales como las dimensiones horizontales y
verticales del glifo, la proporción de negro (frente a blanco) píxeles, y la posición
horizontal y vertical media de los píxeles. Presumiblemente, las diferencias en la
concentración de píxeles negros través de diversas áreas de la caja deben
proporcionar una forma de diferenciar entre las 26 letras del alfabeto.

Para continuar con este ejemplo, descargue el archivo desde el sitio


web letterdata.csv Packt Publishing, y guardarlo en su directorio de
trabajo R.

La lectura de los datos en R, confirmamos que hemos recibido los datos con
las 16 características que definen a cada ejemplo de la clase de letra. Como era
de esperar, la carta tiene 26 niveles:
> letras <- read.csv ( "letterdata.csv")
> str (letras)
'Hoja.de.datos': 20000 obs. de 17 variables:
$ Letra: Factor w / 26 niveles "A", "B", "C", "D", ..
P Xbox: En 2 5 4 7 2 4 4 1 2 11 ...
S t
P ybox: En 8 12 11 11 1 11 2 1 2 15 ...
S t
P anchura En 3 3 6 6 3 5 5 3 4 13 ...
[ 281 ]
S : t
P altura: En 5 7 8 6 1 8 4 2 4 9 ...
S t

[ 282 ]
Capítulo 7

P onpix: En 1 2 6 3 1 3 4 1 2 7 ...
S t
P Xbar: En 8 10 10 5 8 8 8 8 10 13 ...
S t
PS Ybar: INT13 5 6 9 6 8 7 2 6 2 ...
$ X2bar: En 0 5 2 4 6 6 6 2 2 6 ...
t
$ Y2bar: En 6 4 6 6 6 9 6 2 6 2 ...
t
$ Xybar: En 10 3 3
6 13 104456656728412
1 ...
12 ...
t
$ X2ybar: En
t
P xy2bar: En 8 9 7 10 9 6 6 8 8 9 ...
S t
P xedge: En 0 2 3 6 1 0 2 1 1 8 ...
$ Yedgex: int8 10 9 8 10 7 10 7 7 8 ...
S t
P xedgey: que
Recordemos En los
8 alumnos
8 7 10 7SVM8 8 requieren
6 6 1 ...todas las características para ser
S t
numérica, y por otra parte, que cada función se escala a un intervalo bastante
P yedge: En 0 4 3 2 5 9 7 2 1 1 ...
pequeño.
S En este
t caso, cada característica es un entero, por lo que no es necesario
para convertir cualquier factor en números. Por otro lado, algunos de los rangos de
estas variables enteras parecen bastante amplia. Esto indica que es necesario para
normalizar o estandarizar los datos. Sin embargo, podemos omitir este paso para
Ahora, debido a que el paquete de R que vamos a utilizar para ajustar el modelo SVM
realizará
el cambio de escala automática.
Teniendo en cuenta que la preparación de los datos ha sido en gran parte hecho
por nosotros, podemos pasar directamente a las fases de formación y las pruebas
del proceso de aprendizaje de la máquina. En los análisis anteriores, se dividió
aleatoriamente los datos entre los conjuntos de entrenamiento y prueba.
Aunque podríamos hacerlo aquí, Frey y pizarra ya han aleatorizado los datos, y
por lo tanto sugerir el uso de los primeros 16.000 registros (80 por ciento) para
construir el modelo y los próximos 4.000 registros (20 por ciento) para probar.
Siguiendo su consejo, podemos crear tramas de datos de pruebas de formación y
de la siguiente manera:
> letters_train <- cartas [1: 16000,]
> letters_test <- letras [16001: 20000, ]

Con nuestros datos listos para ir, vamos a empezar la construcción de nuestro
clasificador.

[ 283 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Paso 3 - la formación de un modelo sobre los


datos
Cuando se trata de ajuste de un modelo SVM en R, hay varios paquetes pendientes
para elegir. El paquete e1071 del Departamento de Estadística de la Universidad
Tecnológica de Viena (TU Wien) proporciona una interfaz de I a la galardonada
biblioteca LIBSVM, un programa de SVM código abierto ampliamente utilizado
escrita en C ++. Si ya está familiarizado con LIBSVM, es posible que desee comenzar
aquí.

Para obtener más información sobre LIBSVM, consulte el sitio


web de los autores en
http://www.csie.ntu.edu.tw/~cjlin/libsvm/.

Del mismo modo, si ya está invertido en el algoritmo SVMlight, el paquete Klar


del Departamento de Estadística de la Universidad de Tecnología de Dortmund
(TU de Dortmund) proporciona funciones para trabajar con esta aplicación SVM
directamente en R.

Para obtener información sobre SVMlight, echar un vistazo a


http://svmlight.joachims.org/.

Por último, si usted está comenzando desde cero, es quizás mejor para comenzar
con las funciones de SVM en el paquete kernlab. Una ventaja interesante de este
paquete es que se desarrolló de forma nativa en R en lugar de C o C ++, que le
permite ser fácilmente personalizado; ninguno de los componentes internos están
ocultos detrás de las escenas. Quizás aún más importante, a diferencia de las otras
opciones, kernlab se puede utilizar con el paquete de intercalación, que permite a
los modelos SVM para ser entrenados y evaluados utilizando una variedad de
métodos automatizados (cubierto en el Capítulo 11, Mejora del rendimiento del
modelo).

Para una introducción más completa a kernlab, por favor


referirse al papel de los autores en
http://www.jstatsoft.org/v11/i09/.

[ 284 ]
Capítulo 7

La sintaxis para la formación clasificadores SVM con kernlab es el siguiente. Si


llegara a estar usando uno de los otros paquetes, los comandos son muy similares.
Por defecto, la función ksvm () utiliza el kernel gaussiana RBF, pero se proporcionan
una serie de otras opciones.

Para proporcionar una medida de referencia de rendimiento de SVM, vamos a


empezar por la formación de un simple clasificador SVM lineal. Si no lo ha hecho,
instale el paquete kernlab a su biblioteca, con el comando install.packages (
"kernlab"). Entonces, podemos llamar a la función ksvm () en el banco de datos y
especifique el lineal (es decir, vainilla) núcleo usando la opción vanilladot, de la
siguiente manera:
> biblioteca (kernlab)
> letter_classifier <-. ksvm (~ carta, los datos = letters_train,
kernel = "vanilladot")

[ 285 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Dependiendo del rendimiento de su equipo, esta operación puede tardar algún


tiempo en completarse. Cuando termine, escriba el nombre del modelo almacenado
para ver información básica acerca de los parámetros de formación y el ajuste del
modelo.
> letter_classifier
Apoyo Vector Machine objeto de clase "ksvm"

Tipo SV: C-SVC (clasificación)


parámetro: coste C = 1

Lineal (vainilla) función del

núcleo. Número de vectores de

soporte: 7037

Objetivo Valor Función: -14.1746 -20.0072 -23.5628 -6,2009 -7,5524


-32.7694 -49.9786 -18.1824 -62.1111 -32.7284 -16.2209 ...

error de entrenamiento: 0.130062

Esta información nos dice muy poco acerca de qué tan bien el modelo llevará a cabo
en el mundo real. Tendremos que examinar su rendimiento en el conjunto de datos
de prueba para saber si se generaliza así a los datos que no se ven.

Paso 4 - evaluar el rendimiento del modelo


La función de predecir () nos permite utilizar el modelo de clasificación carta para hacer
Las predicciones para el conjunto de datos de prueba:
> letter_predictions <- predecir (letter_classifier, letters_test)

Debido a que no especificamos el parámetro de tipo, se utilizó el tipo por defecto =


"respuesta". Esto devuelve un vector que contiene una carta predicho para cada fila
de valores en los datos de prueba. Utilizando la función de la cabeza (), podemos
ver que el primero de seis cartas fueron U, N, V, X, n, y H predijo:
> cabeza (letter_predictions)
[1] UNVXNH
Niveles: ABCDEFGHIJKLMNOPQRSTU VWXYZ

[ 286 ]
Capítulo 7

Para examinar lo bien que realiza nuestra clasificador, tenemos que comparar la letra
prevé que la verdadera carta en el conjunto de datos de prueba. Vamos a utilizar la
función de tabla () para este fin (sólo una parte de la tabla completa se muestra aquí):
> mesa (letter_predictions, letters_test $ carta)
letter_predictions UNA seg do re mi
und
o
UNA 144 0 0 0 0
segundo 0 121 0 5 2
do 0 0 120 0 4
re 2 2 0 156 0
mi 0 0 5 0 127

Los valores de la diagonal de 144, 121, 120, 156, y 127 indican el número total de
registros en los que la letra predicho coincide con el valor verdadero. Del mismo
modo, también aparece el número de errores. Por ejemplo, el valor de 5 en la fila B
y la columna D indica que hubo cinco casos donde la letra D se ha identificado
erróneamente como una B.
En cuanto a cada tipo de error individual puede revelar algunos patrones
interesantes sobre los tipos específicos de las letras El modelo tiene problemas con
el, pero esto es mucho tiempo. Podemos simplificar nuestra evaluación no por el
cálculo de la precisión global. Esto sólo tiene en cuenta si la predicción era
correcta o incorrecta,
e ignora el tipo de error.
El siguiente comando devuelve un vector de valores verdadero o falso, que
indica si la carta predicho del modelo está de acuerdo con (es decir,
partidos) la carta real en el conjunto de datos de prueba:
> acuerdo <- letter_predictions == $ carta letters_test

El uso de la función de tabla (), vemos que el clasificador identifica correctamente la letra
de
3357 de los registros de prueba de 4.000:
> mesa (acuerdo)
acuerdo
FALSO
CIER
TO 643 3357

En términos porcentuales, la precisión es de aproximadamente 84 por ciento:

[ 287 ]
> prop.table (tabla (acuerdo))
acuerdo
FALSO
CIER
TO 0.16075
0.83925

[ 288 ]
Black Box - Métodos de redes neuronales y de vectores de soporte máquinas

Tenga en cuenta que cuando Frey y pizarra publicaron el conjunto de datos en 1991,
se informó de una precisión de reconocimiento de alrededor del 80 por ciento. El uso
de sólo unas pocas líneas de código R, hemos sido capaces de superar su resultado,
aunque también tenemos la ventaja de más de dos décadas de investigación de
aprendizaje de máquina adicional. Con esto en mente, es probable que seamos
capaces de hacerlo aún mejor.

Paso 5 - mejorar el rendimiento del modelo


Nuestro modelo SVM anterior utiliza la sencilla función del núcleo lineal. Mediante
el uso de una función de núcleo más complejo, podemos asignar los datos en un
espacio de dimensiones superiores, y potencialmente obtener un mejor ajuste del
modelo.
Puede ser un reto, sin embargo, a elegir entre las muchas diferentes funciones del
núcleo. Una convención popular es comenzar con la RBF núcleo de Gauss, que se ha
demostrado funcionar bien para muchos tipos de datos. Podemos entrenar una SVM
basada en RBF, utilizando la función ksvm () como se muestra aquí:
> letter_classifier_rbf <-. ksvm (~ carta, los datos = letters_train,
kernel = "rbfdot")

A continuación, hacemos predicciones como se ha hecho anteriormente:


> letter_predictions_rbf <- predecir (letter_classifier_rbf,
letters_test)

Por último, vamos a comparar la exactitud de nuestra SVM lineal:


> agreement_rbf <- letter_predictions_rbf == letters_test $ carta
> mesa (agreement_rbf)
agreement_rbf
FALSO
CIER
TO 275
3725
> prop.table (tabla
(agreement_rbf)) agreement_rbf
FALSO
CIER
TO 0.06875
0.93125

[ 289 ]
Sus resultados pueden diferir de los mostrados aquí debido a la
aleatoriedad en el kernel RBF ksvm. Si desea que coincidir
exactamente, el uso conjunto. semillas (12345) antes de ejecutar la
función ksvm ().

[ 290 ]
Capítulo 7

Simplemente cambiando la función del núcleo, hemos sido capaces de


aumentar la precisión de nuestro modelo de reconocimiento de caracteres de
un 84 por ciento a 93 por ciento. Si este nivel de rendimiento sigue siendo
insatisfactoria para el programa de OCR, otros granos podrían ser
a prueba, o el costo de parámetro limitaciones C podría ser variada para modificar la
anchura de la frontera de decisión. A modo de ejercicio, usted debe experimentar
con estos parámetros para ver cómo afectan el éxito del modelo final.

Resumen
En este capítulo, se examinaron dos métodos de aprendizaje automático que ofrecen
un gran potencial, pero a menudo se pasa por alto debido a su complejidad. Con
suerte, se ve ahora que esta reputación es al menos algo inmerecida. Los conceptos
básicos que impulsan las RNA y SVM son bastante fáciles de entender.
Por otro lado, debido a las RNA y SVM han existido desde hace muchas décadas,
cada uno de ellos tiene numerosas variaciones. En este capítulo solo araña la
superficie de lo que es posible con estos métodos. Mediante la utilización de la
terminología que ha aprendido aquí, usted debería ser capaz de captar los matices
que distinguen a los muchos avances que se están desarrollando todos los días.
Ahora que hemos pasado algún tiempo a aprender sobre muchos tipos diferentes de
modelos predictivos de lo simple a sofisticada; En el siguiente capítulo, vamos a
empezar a considerar métodos para otros tipos de tareas de aprendizaje. Estas
técnicas de aprendizaje no supervisado sacará a la luz los patrones fascinantes dentro
de los datos.

[ 291 ]
Encontrar patrones -
Mercado Análisis de
la cesta las reglas de
asociación
Piense en la última vez que hizo una compra impulsiva. Tal vez usted estaba
esperando en la fila de la caja supermercado y compró un paquete de goma de
mascar o una barra de chocolate. Tal vez en un viaje nocturno para los pañales y
la fórmula que recogió una
bebida con cafeína o un paquete de seis de cerveza. Puede que incluso han
comprado este libro en un capricho en la recomendación de un librero. Estas
compras impulsivas no son una coincidencia, ya que los minoristas utilizan técnicas
de análisis de datos sofisticados para identificar los patrones de comportamiento
que impulsarán el comercio minorista.
En los últimos años, este tipo de sistemas de recomendación se basa en la intuición
subjetiva de profesionales del marketing y los administradores de inventario o
compradores. Más recientemente, como escáneres de código de barras, sistemas de
inventario computarizados, y las tendencias de compras en línea han construido una
gran cantidad de datos transaccionales, aprendizaje automático se ha aplicado cada
vez más a aprender los patrones de compra. La práctica se conoce comúnmente
como análisis de la cesta de mercado debido al hecho de que se ha aplicado con tanta
frecuencia a los datos de los supermercados.
Aunque la técnica se originó con los datos de compras, es útil en otros contextos.
En el momento de terminar este capítulo, usted será capaz de aplicar las técnicas
de análisis de la cesta a sus propias tareas, sean las que sean. En general, el
trabajo implica:
[ 259 ]
• El uso de medidas de rendimiento simples para encontrar asociaciones en grandes
bases de datos
• La comprensión de las peculiaridades de los datos transaccionales
• Saber identificar los patrones útiles y aplicables

[ 260 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Los resultados de un análisis de la cesta son patrones de acciones concretas. Por lo


tanto, cuando aplicamos la técnica, es probable que identificar las aplicaciones a su
trabajo, incluso si usted no tiene ninguna afiliación con una cadena de tiendas.

La comprensión de las reglas de


asociación
Los componentes básicos de un análisis de la cesta son los elementos que pueden
aparecer en cualquier transacción dada. Grupos de uno o más elementos están
rodeados de corchetes para indicar que formen un conjunto, o más específicamente,
un conjunto de elementos que aparece en los datos con cierta regularidad. Las
transacciones se especifican en términos de conjuntos de elementos, tales como las
siguientes transacciones que se pueden encontrar en una tienda de comestibles
típicos:

El resultado de un análisis de la cesta es un conjunto de reglas de asociación que


especifican los patrones que se encuentran en las relaciones entre los elementos que
los conjuntos de elementos. reglas de asociación
Siempre están compuestos de subconjuntos de los conjuntos de elementos y se
designan con un conjunto de elementos relativos en el lado izquierdo (LHS) de la
regla a otro conjunto de elementos en el lado derecho (RHS) de la regla. El LHS es
la condición que debe cumplirse con el fin de activar la regla, y el lado derecho es el
resultado esperado de cumplir esta condición. Una regla identificados a partir de la
transacción ejemplo podría ser expresada en la forma:

En lenguaje llano, esta regla de asociación establece que si la mantequilla de


maní y jalea se compran juntos, entonces el pan también es probable que se
puede comprar. En otras palabras, "mantequilla de maní y jalea implican
pan."
Desarrollado en el contexto de las bases de datos de transacción al por menor, reglas
de asociación no se utilizan para la predicción, sino más bien para el descubrimiento
de conocimiento sin supervisión en grandes bases de datos. Esto es a diferencia de
los algoritmos de clasificación y predicción numérica presentados en los capítulos
anteriores. A pesar de ello, se encuentra que los alumnos de reglas de asociación
están estrechamente relacionados y compartir muchas características de los
estudiantes de las reglas de clasificación se presentan en el Capítulo 5, divide y
vencerás - Clasificación a partir de árboles de decisión y Reglas.

[ 261 ]
Debido a que los alumnos de reglas de asociación son sin supervisión, no hay
necesidad de que el algoritmo para ser entrenado; datos no necesita ser etiquetado
antes de tiempo. El programa es
simplemente desatado en un conjunto de datos con la esperanza de que las
asociaciones se encuentran interesantes. La desventaja, por supuesto, es que no
hay una manera fácil de medir objetivamente el rendimiento de un alumno regla,
aparte de su evaluación cualitativa de utilidad-general, una prueba de globo
ocular de una cierta clase.

[ 262 ]
Capítulo 8

Aunque las reglas de asociación son los más utilizados para el análisis de la
cesta, que son útiles para encontrar patrones en muchos tipos diferentes de
datos. Otras aplicaciones potenciales incluyen:
• Busca interesante y que ocurren con frecuencia patrones de secuencias
de ADN y proteínas en los datos de cáncer
• La búsqueda de patrones de compras o reclamaciones médicas que se
producen en combinación con tarjeta de crédito o la utilización
fraudulenta de seguro
• La identificación de combinaciones de comportamiento que preceden a los
clientes que abandonan su servicio de telefonía celular o actualicen su
paquete de televisión por cable

El análisis de reglas de asociación se utiliza para buscar conexiones interesantes


entre un gran número de elementos. Los seres humanos son capaces de tal
visión bastante
intuitivamente, pero a menudo se requiere el conocimiento a nivel de expertos o una
gran cantidad de experiencia para hacer lo que un algoritmo de aprendizaje de
reglas puede hacer en cuestión de minutos o incluso segundos. Además, algunos
conjuntos de datos son simplemente demasiado grande y complejo para un ser
humano para encontrar la aguja en el pajar.

El algoritmo Apriori de reglas de asociación


Al igual que es difícil para los seres humanos, la minería de datos transaccional hace
regla de asociación una tarea difícil para las máquinas también. conjuntos de datos
transaccionales son típicamente muy grande, tanto en términos del número de
transacciones, así como el número de elementos o características que son
monitoreados. El problema es que el número de conjuntos de elementos posibles
crece exponencialmente con el número de características. k artículos dado que
pueden aparecer o no aparecer en un juego, hay 2 ^ k conjuntos de elementos
posibles que podrían ser posibles reglas. Un minorista que vende a 100 artículos
diferentes podría tener del orden de 2 ^ 100 = 1.27e + 30 conjuntos de elementos que
un algoritmo debe evaluar, una tarea aparentemente imposible.
En lugar de evaluar cada uno de estos conjuntos de elementos, uno por uno, un
algoritmo de aprendizaje de reglas más inteligente se aprovecha del hecho de que,
en realidad, muchas de las combinaciones posibles de elementos son rara vez, o
nunca, se encuentran en la práctica. Por ejemplo, incluso si una tienda vende dos
artículos de automoción y cosméticos de las mujeres, un conjunto de {aceite de
motor, lápiz labial} es probable que sea extraordinariamente raro. Al ignorar estas
combinaciones raras (y, tal vez, menos importante), es posible limitar el alcance de
la búsqueda de reglas a un tamaño más manejable.

[ 263 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Mucho trabajo se ha hecho para identificar los algoritmos heurísticos para reducir el
número de conjuntos de elementos para buscar. Quizás el enfoque utilizado más
ampliamente para buscar de manera eficiente grandes bases de datos de reglas es
conocida como A priori. Introducido en 1994 por Rakesh Agrawal y Ramakrishnan
Srikant, el algoritmo Apriori desde entonces se ha convertido en algo sinónimo de
reglas de asociación. El nombre se deriva del hecho de que el algoritmo utiliza un
simple creencia previa (es decir, a priori) sobre las propiedades de los conjuntos de
elementos frecuentes.
Antes de discutir que en más profundidad, vale la pena señalar que este algoritmo,
como todos los algoritmos de aprendizaje, no deja de tener sus fortalezas y
debilidades. Algunas de ellas se enumeran de la siguiente manera:

fortalezas debilidades
• Es capaz de trabajar con • No muy útil para pequeños conjuntos
grandes cantidades de datos de datos
transaccional • Requiere un esfuerzo para separar
• Los resultados en las reglas la verdadera visión del sentido
que son fáciles de entender común
• Útil para "minería de datos" y el • Fácil sacar conclusiones falsas a
descubrimiento de conocimiento partir de los patrones al azar
inesperado en bases de datos

Como se señaló anteriormente, el algoritmo Apriori emplea un simple creencia a


priori para reducir el espacio de búsqueda de reglas de asociación: todos los
subconjuntos de un conjunto de elementos frecuentes también deben ser frecuentes.
Esta heurística se conoce como la propiedad priori. El uso de este astuta
observación, es posible limitar drásticamente el número de reglas que se debe
buscar. Por ejemplo, el conjunto {aceite de motor, lápiz labial} sólo puede ser
frecuente si tanto {aceite de motor} y {lápiz labial} ocurren
con frecuencia también. En consecuencia, si bien el aceite de motor o lápiz labial es
poco frecuente, cualquier conjunto que contiene estos elementos puede ser excluido
de la búsqueda.

Para detalles adicionales sobre el algoritmo Apriori, consulte: Agrawal R,


Srikant R. algoritmos rápidos para la minería de reglas de asociación. Actas de la
20ª Conferencia Internacional sobre grandes bases de datos. 1994: 487-499.

[ 264 ]
Capítulo 8

Para ver cómo este principio se puede aplicar en un entorno más realista, vamos a
considerar una base de datos simple transacción. La siguiente tabla muestra cinco
operaciones llevadas a cabo en la tienda de regalos de un hospital de imaginaria:

Número de transacción Elementos comprados


1 {Flores, consiga la tarjeta, refrescos}
2 {Oso de peluche de juguete, flores, globos, barra de
chocolate}
3 {Consiga la tarjeta, barra de chocolate, flores}
4 {Oso de peluche de juguete, globos, soda}
5 {Flores, consiga la tarjeta, refrescos}

Al observar los juegos de compras, se puede inferir que hay un par de patrones de
compra típicos. Una persona que visite a un amigo enfermo o miembro de la familia
tiende a comprar una tarjeta bien y flores, mientras que los visitantes a las nuevas
madres tienden a comprar los osos de peluche de juguete y globos. Estos patrones
son notables porque aparecen con frecuencia suficiente como para coger nuestro
interés; nos basta con aplicar un poco de lógica y la experiencia de la materia para
explicar la regla.
De un modo similar, el algoritmo Apriori utiliza las medidas estadísticas de "grado
de interés" de un conjunto de elementos para localizar las reglas de asociación en
bases de datos de transacción mucho más grandes. En las secciones que siguen,
vamos a descubrir cómo priori calcula las medidas de interés y la forma en que se
combinan con la propiedad A priori para reducir el número de reglas que hay que
aprender.

Medición de interés regla - apoyo y


confianza
Sea o no una regla de asociación se considera interesante está determinado por dos
medidas estadísticas: medidas de apoyo y de confianza. Al proporcionar umbrales
mínimos para cada una de estas métricas y aplicando el principio priori, es fácil de
limitar drásticamente el número de reglas reportados, tal vez incluso hasta el punto
que sólo se identifican las reglas de sentido obvias o comunes. Por esta razón, es
importante entender cuidadosamente los tipos de reglas que están excluidos en
virtud de estos criterios.

[ 265 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

El apoyo de un conjunto de elementos o descartar medidas de la frecuencia con que


se produce en los datos. Por ejemplo, el conjunto de elementos {consiga la tarjeta,
flores}, tiene el apoyo de 3/5 = 0,6 en los datos de la tienda de regalos del hospital.
Del mismo modo, el apoyo a {consiga la tarjeta} → {} flores también es 0,6. El soporte
se puede calcular para cualquier conjunto de elementos o incluso un solo elemento;
por ejemplo, el apoyo
para {barra de caramelo} es 2/5 = 0,4, ya que aparecen barras de caramelo en 40 por
ciento de las compras. UNA
función que define el apoyo para el conjunto de elementos X se puede definir como sigue:

Aquí, N es el número de transacciones en la base de datos y el recuento de (x) es el


número de transacciones que contiene conjunto de elementos X.
La confianza de una regla es una medida de su poder o exactitud
predictiva. Se define como el soporte del conjunto de elementos que
contiene tanto X e Y dividido por el apoyo del conjunto de elementos que
contiene sólo X:

Esencialmente, la confianza nos dice que la proporción de transacciones en las que


la presencia de la pieza o conjunto de elementos X resultados en presencia del
elemento o conjunto de elementos Y. Tenga en cuenta que la confianza que conduce
a X Y no es lo mismo que la confianza de que Y conduce a X. Por ejemplo, la
confianza de {flores} → {consigue la tarjeta bien} es 0,6 / 0,8 = 0,75. En comparación,
la confianza de {consiga la tarjeta} → {flores} es 0,6 / 0,6 = 1,0. Esto significa que una
compra de la participación de las flores se acompaña de una compra de una tarjeta
bien del conseguir el 75 por ciento de las veces, mientras que la compra de una
tarjeta bien se asocia con flores 100 por ciento del tiempo. Esta información puede
ser muy útil para la gestión de la tienda de regalos.

Usted puede haber notado similitudes entre el apoyo, la


confianza y las reglas de probabilidad bayesiana cubierto en el
Capítulo 4, Probabilístico de aprendizaje - Clasificación a partir
de Naive Bayes. De hecho, el apoyo (A, B) es la misma que P
(A∩B) y la confianza (A → B) es la misma que P (B | A). Es sólo
el contexto que difiere.

Reglas como {consiga la tarjeta} → {} flores son conocidas como reglas fuertes,
debido a que tienen tanto un alto apoyo y confianza. Una forma de encontrar
[ 266 ]
normas más fuertes sería examinar todas las combinaciones posibles de los
artículos en la tienda de regalos, medir el valor de apoyo y confianza, e informar
sólo aquellas normas que cumplen con ciertos niveles de interés. Sin embargo,
como se ha señalado antes, esta estrategia generalmente no es factible para
cualquier cosa, pero el más pequeño de los conjuntos de datos.

[ 267 ]
Capítulo 8

En la siguiente sección, se verá cómo el algoritmo Apriori utiliza los niveles


mínimos de apoyo y confianza con el principio priori para encontrar las reglas
fuertes rápidamente al reducir el número de reglas a un nivel más manejable.

La construcción de un conjunto de reglas


con el principio Apriori
Recordemos que el principio priori establece que todos los subconjuntos de un
conjunto de elementos frecuentes también deben ser frecuentes. En otras palabras,
si {A, B} es frecuente, a continuación, {A} y {B} tanto deben ser frecuentes.
Recordemos también que, por definición, el soporte indica la frecuencia con que
aparece un conjunto de elementos en los datos. Por lo tanto, si sabemos que {A} no
cumple con una deseada
umbral de apoyo, no hay ninguna razón para considerar {A, B} o cualquier conjunto
de elementos que contiene {A}; no puede posiblemente ser frecuentes.
El algoritmo Apriori utiliza esta lógica para excluir la posible asociación reglas
antes de realizar la evaluación de las mismas. El proceso real de creación de reglas
se produce en dos fases:

1. La identificación de todos los conjuntos de elementos que cumplen un umbral


mínimo de apoyo.
2. La creación de reglas de estos conjuntos de elementos que utilizan
aquellos que cumplen con un umbral mínimo de confianza.

La primera fase se produce en múltiples iteraciones. Cada iteración sucesiva


implica evaluar el apoyo de una serie de conjuntos de elementos cada vez más
grandes. Por ejemplo, la iteración 1 implica evaluar el conjunto de conjuntos de
elementos 1-material (1-conjuntos de elementos), la iteración 2 Evalúa
2-conjuntos de elementos, y así sucesivamente. El resultado de cada iteración i es
un conjunto de todos los conjuntos de elementos i-que cumplen con el umbral
mínimo de apoyo.
Todos los conjuntos de elementos de iteración i se combinan para generar conjuntos
de elementos candidatos para la evaluación en la iteración i + 1. Pero el principio
priori puede eliminar algunos de ellos incluso antes de que comience la siguiente
ronda. Si {A}, {B} y {C} son frecuentes en la iteración 1, mientras {D} no es frecuente,
la iteración 2 sólo considerará {A, B}, {A, C} y {B, C}. Por lo tanto, el algoritmo tiene
que evaluar sólo tres conjuntos de elementos en lugar de los seis que se habría
evaluado si los conjuntos que contienen D no se habían eliminado a priori.
Continuando con esta idea, supongamos que durante la iteración 2, se descubre que
{A, B} y {B, C} son frecuentes, pero {A, C} no es. Aunque iteración 3 normalmente
comenzar por evaluar el apoyo a {A, B, C}, no es obligatorio que este paso debe
[ 268 ]
ocurrir en absoluto. Por qué no? El principio Apriori establece que {A, B, C} no
puede ser frecuente, ya que el subconjunto {A, C} no es. Por lo tanto, después de
haber generado no hay nuevos conjuntos de elementos en la iteración 3, el
algoritmo se puede detener.

[ 269 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

En este punto, la segunda fase del algoritmo Apriori puede comenzar. Teniendo
en cuenta el conjunto de los conjuntos de elementos frecuentes, reglas de
asociación se generan a partir todos los subconjuntos posibles. por
ejemplo, {A, B} daría lugar a normas candidatos para {A} → {B} y {B} → {A}. Esto se
contrasta con un umbral mínimo de confianza, y cualquier regla que no cumple con
el nivel de confianza deseado se elimina.

Ejemplo - Identificación de
frecuencia comprado comestibles
con reglas de asociación
Como se ha señalado en la introducción de este capítulo, análisis de la cesta se
utiliza detrás de las escenas de los sistemas de recomendación utilizados en
muchas de ladrillo y mortero y los minoristas en línea. Las reglas de asociación
aprendidas indican las combinaciones de elementos que
menudo son comprados juntos. El conocimiento de estos patrones proporciona
información sobre las nuevas formas de una cadena de supermercados podría
optimizar el inventario, publicidad promociones, u organizar la disposición
física de la tienda. Por ejemplo, si los compradores con frecuencia
comprar café o zumo de naranja con un pastel de desayuno, puede ser posible aumentar
beneficios mediante la reubicación de repostería más cerca de café y zumo.
En este tutorial, vamos a realizar un análisis de la cesta de los datos transaccionales
de una tienda de comestibles. Sin embargo, las técnicas podrían aplicarse a muchos
tipos diferentes de problemas, desde recomendaciones de películas, a los sitios de
citas, a la búsqueda de interacciones peligrosas entre medicamentos. Al hacer esto,
vamos a ver cómo el algoritmo Apriori es capaz de evaluar de manera eficiente un
conjunto potencialmente masiva de reglas de asociación.

Paso 1 - recogida de datos


Nuestro análisis de la cesta utilizará los datos de compra recogidas de un mes de
funcionamiento en una tienda de comestibles en el mundo real. Los datos contienen
9.835 transacciones o aproximadamente 327 transacciones por día
(aproximadamente 30 transacciones por hora en un día de negocios de 12 horas),
sugiriendo que el minorista no es particularmente grande, ni es particularmente
pequeña.

El conjunto de datos utilizado aquí fue adaptada del conjunto de


datos Comestibles en el paquete arules R. Para obtener más
información, consulte: Hahsler H, K Hornik, Reutterer T.
[ 270 ]
Implicaciones de modelado de datos probabilístico para la minería
reglas de asociación. En: Galia W, Vichi M, Weihs C, ed. Los estudios
realizados en la clasificación, análisis de datos y la Organización del
Conocimiento: de Datos y Análisis de la Información de Ingeniería del
Conocimiento. Nueva York: Springer; 2006: 598-605.

[ 271 ]
Capítulo 8

La tienda de comestibles típicos ofrece una gran variedad de artículos. Puede haber
cinco marcas de leche, una docena de diferentes tipos de detergente para la ropa, y
tres marcas de café. Dado el tamaño moderado de la tienda, vamos a suponer que no
son terriblemente preocupados por encontrar reglas que se aplican sólo a una marca
específica de la leche o detergente. Con
En este sentido, todos los nombres de marca puede ser removido de las compras.
Esto reduce el número de tiendas de comestibles a unos más manejables 169 tipos,
utilizando grandes categorías, tales como pollo, comidas congeladas, la margarina y
refrescos.

Si la esperanza de identificar la asociación altamente específicos en


normas tales como si los clientes prefieren uva o mermelada de fresa con
su maní de mantequilla se necesita una enorme cantidad de datos
transaccionales. cadenas minoristas grandes utilizan bases de datos de
muchos millones de transacciones con el fin de encontrar asociaciones
entre particulares marcas, colores o sabores de artículos.

¿Tiene alguna conjeturas sobre qué tipos de artículos pueden ser adquiridos juntos?
Se vino y queso ser una pareja común? ¿Pan y mantequilla? Té y miel? Vamos a
profundizar en estos datos y ver si podemos confirmar nuestras suposiciones.

Paso 2 - exploración y la preparación de los


datos
Los datos transaccionales se almacena en un formato ligeramente diferente a
la que hemos utilizado anteriormente. La mayoría de nuestros análisis
anterior, utilizado datos en forma de matriz donde las filas indican ejemplo
instancias y las columnas indican características. Dada la estructura del
formato de la matriz, todos los ejemplos están obligados a tener exactamente
el mismo conjunto de características.
En comparación, los datos transaccional es una forma más libre. Como de costumbre,
cada fila de los datos especifica un único ejemplo, en este caso, una transacción. Sin
embargo, en lugar de tener un determinado número de características, cada registro
comprende una lista separada por comas de cualquier número de elementos, de uno
a muchos. En esencia, las características pueden variar de un ejemplo a otro.

Para continuar con este análisis, descargue el archivo desde el sitio


web groceries.csv Packt Publishing y guardarlo en su directorio de
trabajo R.

Las cinco primeras filas del archivo de grocery.csv prima son los siguientes:

[ 272 ]
cítricos, semielaborados pan, margarina, sopas listas
de frutas tropicales, yogur, café
leche entera
frutas de pepita, yogur, crema de queso, pastas de carne
otras verduras, leche entera, leche condensada, producto de
panadería larga vida

[ 273 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Estas líneas indican cinco transacciones de supermercados independientes. La


primera transacción incluye cuatro elementos: fruta cítrica, pan semi-acabado,
margarina, y sopas listas. En comparación, la tercera transacción incluyó sólo un
elemento: la leche entera.
Supongamos que tratamos de cargar los datos utilizando la función read.csv () como lo
hicimos en los análisis previos. R felizmente cumplir y leer los datos en una forma de
matriz como sigue:

Usted notará que R creado cuatro columnas para almacenar los artículos en los
datos transaccional: V1, V2, V3, V4 y. Aunque esto puede parecer razonable esto, si
se utilizan los datos de esta forma, vamos a tener problemas más adelante puede
parecer razonable, R eligió para crear cuatro variables debido a que la primera línea
tenía exactamente cuatro valores separados por comas.
Sin embargo, sabemos que las compras de comestibles pueden contener más de
cuatro elementos; en el diseño de cuatro columnas tales transacciones se
romperán a través de múltiples filas en la matriz. Podríamos tratar de remediar
esto poniendo la transacción con la mayor
número de elementos en la parte superior del archivo, pero esto pasa por alto otro tema
más problemático.
Mediante la estructuración de datos de esta manera, R ha construido un conjunto de
características que registran no sólo los artículos en las transacciones, sino también
el orden en que aparecen. Si imaginamos nuestro algoritmo de aprendizaje como un
intento de encontrar una relación entre V1, V2, V3, V4 y, a continuación, la leche
entera en V1 puede ser tratado de manera diferente que la leche entera que aparece
en V2. En su lugar, necesitamos un conjunto de datos que no trata a una transacción
como un conjunto de posiciones
que se llena (o no relleno) con los objetos específicos, sino más bien como una canasta de
mercado que sea
contiene o no contiene cada artículo en particular.

Preparación de datos - la creación de una


matriz dispersa de datos de transacción
La solución a este problema utiliza una estructura de datos denominada una matriz
dispersa. Usted puede recordar que se utilizó una matriz dispersa para procesar los
[ 274 ]
datos de texto en el capítulo 4, Probabilístico de aprendizaje - Clasificación a partir
de Naive Bayes. Al igual que con el conjunto de datos anterior, cada fila de la matriz
dispersa indica una transacción. Sin embargo, la matriz dispersa tiene
una columna (es decir, función) para cada elemento que pudiera aparecer en la bolsa de
compras de alguien. Puesto que hay 169 artículos diferentes en nuestros datos de la
tienda de comestibles, nuestra matriz dispersa contendrá 169 columnas.

[ 275 ]
Capítulo 8

¿Por qué no acaba de guardar esto como una trama de datos como lo hicimos en la
mayoría de nuestros análisis? La razón es que a medida que se añaden las
transacciones y los elementos adicionales, una estructura de datos convencional se
convierte rápidamente demasiado grande para caber en la memoria disponible.
Incluso con el relativamente pequeño conjunto de datos transaccional utiliza aquí, la
matriz contiene cerca de 1,7 millones de células, la mayoría de los cuales contienen
ceros (de ahí el nombre "escaso" matriz-Hay muy pocos valores distintos de cero).
Puesto que no hay beneficio para el almacenamiento de todos estos valores cero, una
matriz dispersa en realidad no almacenar la matriz completa en la memoria; que
sólo almacena las células que están ocupadas por un elemento. Esto permite que la
estructura sea más eficiente de la memoria de una matriz o de datos de tramas de
tamaño equivalente.
Con el fin de crear la estructura de datos matriz dispersa partir de los datos
transaccionales, podemos utilizar la funcionalidad proporcionada por la arules
paquete. Instalar y cargar el paquete utilizando lainstall.packages ( "arules")
y biblioteca (arules) comandos.

Para más información sobre el paquete arules, consulte: Hahsler


M, Gruen B, arules Hornik K. - un entorno computacional para
reglas de asociación minera y los conjuntos de elementos
frecuentes. Journal of Statistical Software. 2005; 14.

Como nos estamos cargando los datos de transacciones, no podemos simplemente


utilizar la función read.csv () utilizado anteriormente. En su lugar, arules
proporciona una función de read.transactions () que es similar a read.csv () con la
excepción de que se traduce en una matriz dispersa adecuado para los datos
transaccionales. La sep = "" parámetro especifica que los artículos en el archivo de
entrada están separados por una coma. Para leer los datos groceries.csv en un
escaso comestibles de matriz Nombre, escriba la línea siguiente:
> comestibles <- read.transactions ( "groceries.csv", sep = "")

Para ver información básica acerca de la matriz de las tiendas de comestibles que
acabamos de crear, utilizar el
resumen() funcionar en el objeto:

> Resumen (abarrotes)


transacciones como itemMatrix en formato escaso
con 9835 filas (elementos / conjuntos de
elementos / transacciones) y
169 columnas (artículos) y una densidad de 0,02609146

El primer bloque de información en la salida (como se muestra anteriormente)


[ 276 ]
proporciona un resumen de la matriz dispersa que hemos creado. Las filas de
salida de 9835 se refiere al número de transacciones, y las columnas de salida
169 se refiere a los 169 elementos diferentes que pueden aparecer en la canasta
de comestibles de alguien. Cada celda de la matriz es 1 si el artículo se adquirió
para la transacción correspondiente, o 0 en caso contrario.

[ 277 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

El valor de la densidad de 0.02609146 (2,6 por ciento) se refiere a la proporción de


células de la matriz distintos de cero. Puesto que hay 9.835 * 169 = 1,662,115
posiciones en la matriz, podemos calcular que un total de 1.662.115 * 0,02609146 =
43,367 artículos fueron comprados durante de la tienda de 30 días de operación
(ignorando el hecho de que los duplicados de los mismos artículos podrían haber
sido comprados) . Con un paso adicional, se puede determinar que la transacción
promedio contenía 43.367 / 8835 = 4,409 artículos comestibles distintos. Por
supuesto, si miramos un poco más abajo de la salida, veremos que ya se ha
proporcionado la media del número de artículos por transacción.
El siguiente bloque de resumen de la salida () enumera los elementos que se
encuentran más comúnmente en los datos transaccionales. Desde 2.513 / 9.835 =
0,2555, podemos determinar que la leche entera apareció en el 25,6 por ciento de
las transacciones. El otro verduras, pan / bollos, refrescos y redonda yogur a cabo
la lista de otros elementos comunes, de la siguiente manera:
la mayoría de los artículos frecuentes:
leche entera otra vegetales Rollos /
bollos 251319031809

sodayogurt (Otro)
1715137234055

Por último, se nos presenta un conjunto de estadísticas sobre el tamaño de las


transacciones. Un total de 2.159 transacciones contenía sólo un único elemento,
mientras que una transacción tenía 32 artículos. El primer cuartil de compra y
mediana tamaños son dos y tres puntos, respectivamente, lo que implica que el 25
por ciento de las transacciones contenía dos o menos
artículos y las transacciones se dividieron por la mitad entre los que tienen menos de
tres artículos y los que tienen más. La media de 4.409 artículos por transacción
coincide con el valor se calculó con la mano.
elemento (conjunto de elementos / transacción)
distribución de la longitud: tamaños
1 2 3 4 5 6 7 8 9 10 11 12
2159 1643 1299 1005 855 645 545 438 350 246 182 117
13 14 15 diec 17 18 19 20 21 22 23 24
iséi
s
78 77 55 46 29 14 14 9 11 4 6 1
26 27 28 29 32
1 1 1 3 1

[ 278 ]
Min. Qu Mediana Media Qu Max.
primero tercera
. .
1,000 2,000 3,000 4.409 6,000 32.000

[ 279 ]
Capítulo 8

El paquete incluye arules algunas características útiles para el examen de los


datos de transacción. Para ver los contenidos de la matriz dispersa, utilizar la
función de inspeccionar () en combinación con los operadores de vectores. Los
primeros cinco transacciones se pueden ver de la siguiente manera:
> Comprobar (comestibles
[1: 5]) artículos
1 {Cítricos,
margarina,
sopas
preparadas,
pan semielaborado}
2 {Café, frutas
tropicales,
yogur}
3 {leche entera}
4 {Crema de
queso, pastas
de carne,
fruta de
pepita,
yogur}
5 {leche condensada,
larga vida producto de
panadería, otros
vegetales,
leche entera}

Estas operaciones se ajustan a nuestra mirada en el archivo CSV originales. Para


examinar un artículo en particular (es decir, una columna de datos), es posible el uso
de la [fila, columna] noción matriz. El uso de este con la función itemFrequency ()
nos permite ver la proporción de transacciones que contienen el elemento. Esto nos
permite, por ejemplo, para ver el nivel de soporte para los tres primeros artículos en
los datos de comestibles:
> itemFrequency (comestibles [, 1: 3])
artif limpiador abrasivo. sweetenerbaby cosméticos
0.00355871890.00325368580.0006100661

[ 280 ]
Tenga en cuenta que los elementos de la matriz dispersa se ordenan en columnas por
orden alfabético. limpiador abrasivo y los edulcorantes artificiales se encuentran en
alrededor de 0,3 por ciento de las transacciones, mientras que los cosméticos para bebés
se encuentran en aproximadamente el 0,06 por ciento de las transacciones.

[ 281 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

La visualización de soporte de productos - parcelas de


frecuencia artículo
Para presentar estas estadísticas visualmente, utilice la función itemFrequencyPlot ().
Esto le permite producir un gráfico de barras que representa la proporción de
transacciones que contienen ciertos artículos. Dado que los datos transaccional
contiene un gran número de elementos,
que a menudo se tenga que limitar las que aparecen en la trama con el fin de
producir un gráfico legible.
Si necesita estos elementos que aparecen en una proporción mínima de las
transacciones, el uso itemFrequencyPlot () con el apoyo parámetro:
> itemFrequencyPlot (comestibles, apoyo = 0,1)

Como se muestra en la siguiente trama, esto resulta en un histograma que muestra


los ocho artículos en los datos de tiendas de comestibles con el apoyo de al menos 10
por ciento:

Si prefiere limitar la trama a un número determinado de artículos, el parámetro


TopN se puede utilizar con itemFrequencyPlot ():
> itemFrequencyPlot (tiendas de comestibles, TopN = 20)

El histograma se ordena por la disminución de apoyo, como se muestra en el


siguiente diagrama de los 20 artículos en los datos de las tiendas de
comestibles:

[ 282 ]
Capítulo 8

Visualización de los datos de transacción - el


trazado de la matriz dispersa
Además de mirar los artículos, también es posible visualizar toda la matriz
dispersa. Para ello, utilice la función de imagen (). El comando para mostrar la
matriz dispersa durante los primeros cinco transacciones es el siguiente:
> de imagen (comestibles [1: 5])

El diagrama resultante representa una matriz con 5 filas y 169 columnas, que indican
las 5 transacciones y 169 posibles artículos que habíamos solicitado. Las células en la
matriz se llenan con negro para las transacciones (filas) donde se compró el artículo
(columna).

Aunque el diagrama anterior es pequeño y puede ser un poco difícil de leer, se


puede ver que la primera, cuarta, y quinta transacciones contenían cuatro elementos
cada una, ya que sus filas han llenado cuatro células. También puede ver que las filas
de tres, cinco, dos, y cuatro tienen un elemento en común (en el lado derecho del
diagrama).

Esta visualización puede ser una herramienta útil para explorar los datos. Por un lado,
puede ayudar
con la identificación de problemas potenciales con los datos. Las columnas que se
llenan hasta el fondo podría indicar artículos que se compran en cada transacción, un
problema que pudiera surgir, tal vez, si el nombre o número de identificación de un
minorista se ha incluido accidentalmente en el conjunto de datos de transacciones.
Además, los patrones en el diagrama pueden ayudar a revelar información
procesable dentro de las transacciones y artículos, sobre todo si los datos se
clasifican de manera interesante. Por ejemplo, si las transacciones se ordenan por
fecha, los patrones de puntos negros podrían revelar efectos estacionales en el
número o tipos de artículos comprados. Tal vez alrededor de la Navidad o
Hanukkah, los juguetes son más comunes; alrededor de Halloween, tal vez dulces
se vuelven populares. Este tipo de visualización podría ser especialmente
poderosa si
los elementos también fueron clasificados en categorías. En la mayoría de los casos,
[ 283 ]
sin embargo, la trama se verá bastante aleatorio, como estática en una pantalla de
televisión.

[ 284 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Tenga en cuenta que esta visualización no será tan útil para las bases de
datos de transacciones muy grandes, debido a que las células serán
demasiado pequeños para discernir. Sin embargo, si se combina con la
función de ejemplo (), puede ver la matriz dispersa de
un conjunto muestreado al azar de las transacciones. El comando para crear la
selección aleatoria de 100 transacciones es el siguiente:
> de imagen (de la muestra (comestibles, 100))

Esto crea un diagrama de matriz con 100 filas y 169 columnas:

Unas columnas parecen bastante densamente pobladas, lo que indica algunos


artículos muy populares en la tienda. Pero en general, la distribución de los puntos
parece bastante aleatorio. Teniendo en cuenta nada más de la nota, vamos a
continuar con nuestro análisis.

Paso 3 - la formación de un modelo sobre los


datos
Con la preparación de datos completada, ahora podemos trabajar en la búsqueda
de asociaciones entre los artículos cesta de la compra. Vamos a utilizar una
implementación del algoritmo Apriori en el paquete arules que hemos estado
utilizando para explorar y preparar los datos de comestibles. Tendrá que instalar y

[ 285 ]
cargar este paquete si no lo ha hecho ya. La siguiente tabla muestra la sintaxis para
crear conjuntos de reglas con la función a priori ():

[ 286 ]
Capítulo 8

Aunque a priori ejecución de la función () es sencillo, a veces puede haber una buena
cantidad de ensayo y error necesario para encontrar los parámetros de apoyo y la
confianza que producen un número razonable de reglas de asociación. Si define estos
niveles demasiado altos, es posible encontrar ninguna regla o reglas que son
demasiado genérica a ser muy útil. Por otra parte, un umbral demasiado bajo puede
dar lugar a un número manejable de reglas, o peor aún, la operación puede tardar un
tiempo muy largo o se queda sin memoria durante la fase de aprendizaje.
En este caso, si se intenta utilizar la configuración predeterminada de apoyo = 0,1 y
confianza = 0,8, Vamos a terminar con un conjunto de reglas de cero:

> priori
(comestibles) un
conjunto de reglas 0

Obviamente, tenemos que ampliar la búsqueda un poco.

Si se piensa en ello, este resultado no debe haber sido muy


sorprendente. Debido a que el apoyo = 0.1 por defecto, con el fin
de generar una regla, un artículo debe haber aparecido en al menos
0,1 * 9385 =
938,5 actas. Dado que sólo ocho artículos aparecidos esta frecuencia
en nuestros datos, no es de extrañar que no encontramos ninguna regla.

[ 287 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Una manera de abordar el problema de establecer un umbral mínimo de


sustentación es pensar en el menor número de transacciones que se necesitan antes
de que se consideraría un patrón interesante. Por ejemplo, se podría argumentar
que si se compra un artículo dos veces al día (alrededor de 60 veces en un mes de
datos), puede ser un patrón interesante. A partir de ahí, es posible calcular el nivel
de apoyo necesario para encontrar sólo las reglas de coincidencia al menos esa
cantidad de transacciones. Desde 60 de 9835 es igual a 0,006, vamos a tratar de
establecer el apoyo allí en primer lugar.
El establecimiento de la confianza mínima implica un delicado equilibrio. Por un
lado, si la confianza es demasiado bajo, que puede ser abrumado con un gran
número de reglas tales como poco fiables de reglas que indican los artículos
comúnmente adquiridos con baterías docenas. ¿Cómo podemos saber dónde dirigir
nuestra presupuesto de publicidad, entonces? Por otro lado, si fijamos la confianza
muy alta, que se limitará a las reglas que se
obvia o inevitable similar al hecho de que los detectores de humo siempre se
compran en combinación con baterías. En este caso, moviendo los detectores de
humo más cerca de las baterías es poco probable que genere ingresos adicionales, ya
que los dos elementos que ya fueron adquiridos casi siempre juntos.

El nivel de confianza mínima adecuada depende en gran medida


de los objetivos de su análisis. Si usted comienza con un valor
conservador, siempre se puede reducirlo a ampliar la búsqueda si
usted no está encontrando inteligencia procesable.

Vamos a empezar con un umbral de confianza de 0,25, lo que significa que con el
fin de ser incluidos en los resultados, la regla tiene que ser correcta, al menos, el 25
por ciento de las veces. Esto eliminará las reglas más fiables, al tiempo que permite
un cierto margen para modificar las conductas con promociones específicas.
Ahora estamos listos para generar algunas reglas. Además del apoyo y confianza
parámetros mínimos, es útil para establecer minlen = 2 para eliminar reglas que
contienen menos de dos elementos. Esto evita que las reglas no interesantes que se
creen simplemente porque el artículo se compra con frecuencia, por ejemplo, {} →
leche entera. Esta regla se cumple el mínimo de apoyo y confianza, porque la leche
entera se compra en más del 25 por ciento de las transacciones, pero no es una
visión muy procesable.

El comando completo para encontrar un conjunto de reglas de asociación utilizando el


algoritmo Apriori es
como sigue:
> groceryrules <- a priori (comestibles, parámetro = lista (apoyo =
0.006, de confianza = 0,25, minlen = 2))

[ 288 ]
Capítulo 8

Esto ahorra nuestras reglas en un objeto de reglas, puede echar una ojeada a escribir su
nombre:
> groceryrules
conjunto de
reglas 463

Nuestro objetivo groceryrules contiene un conjunto de 463 reglas de


asociación. Para determinar si alguno de ellos son útiles, tendremos que cavar
más profundo.

Paso 4 - evaluar el rendimiento del modelo


Para obtener una descripción de alto nivel de las reglas de asociación, podemos
utilizar Resumen () de la siguiente manera. La distribución de la longitud regla
nos dice cuántas reglas tienen cada cargo de artículos. En nuestro conjunto de
reglas, normas 150 tiene sólo dos artículos, mientras que 297 tienen tres, y 16
tienen cuatro. También se les da el resumen de estadísticas asociadas con esta
distribución:
> Resumen
(groceryrules) un
conjunto de reglas 463

distribución de longitud de la regla (LHS


+ RHS): tamaño de 234
150 29716

Min. Qu Mediana Media Qu Max.


primero tercera
. .
2,000 2,000 3,000 2,711 3,000 4,000

Como se señaló en la salida anterior, el tamaño de la regla se


calcula como el total de tanto la parte izquierda (LHS) y lado
derecho (RHS) de la regla. Esto significa que una regla como
pan {}→ {mantequilla} es dos artículos y {mantequilla de maní,
jalea} → {un pan} es tres.

A continuación, vemos las estadísticas de resumen de las medidas de calidad


regla: el apoyo, la confianza y la elevación. Las medidas de apoyo y la confianza
no debe ser muy sorprendente, ya que utilizamos estos como criterios de
[ 289 ]
selección de las reglas. Podríamos estar alarmado si la mayoría o la totalidad de
las reglas tenían apoyo y confianza muy cerca de los umbrales mínimos, ya que
esto significaría que podríamos haber puesto el listón demasiado alto. Este no es
el caso aquí, ya que hay muchas reglas con valores mucho más altos de cada uno.
Resumen de medidas de calidad:
supportconfidencelift
Min.:0.006101Min.:0.2500Min.
: 0,9932 primero
Qu.:0.0071171st Qu.:0.29711st Qu.:1.6229

[ 290 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Mediana: 0.008744 mediana: 0,3554 mediana: 1,9332


Significa: 0.011539 decir: 0,3786 Media: 2,0351
tercera Qu.:0.012303 tercera Qu.:0.4495 tercera
Qu.:2.3565 Max. : 0.074835 Max. : 0,6600 Max. :
3,9565

La tercera columna es una métrica que no hemos considerado todavía. La elevación


de una medidas de reglas cuánto más probable que un elemento o conjunto de
elementos se compra en relación a su tasa típica de la compra, dado que usted sabe
otro elemento o conjunto de elementos ha sido comprado. Esto se define por la
siguiente ecuación:

A diferencia de la confianza en que las cuestiones de orden, elemento de


elevación (X
→ Y) es la misma que la elevación (Y → X).

Por ejemplo, supongamos que en una tienda de comestibles, la mayoría de la gente


compra la leche y el pan. Por pura casualidad, esperaríamos encontrar muchas
transacciones con la leche y el pan. Sin embargo, si la elevación (leche pan →) es
mayor que uno, implica que los dos elementos se encuentran juntos más a menudo
de lo que cabría esperar por azar. Por tanto, un valor de elevación grande es un
fuerte indicador de que una regla es importante, y refleja una verdadera conexión
entre los elementos.
En la sección final del resumen de la salida (), recibimos información de la minería,
que nos dice acerca de cómo se eligieron las reglas. Aquí, vemos que los datos de
las tiendas de comestibles, que contenía 9.835 transacciones, se utilizó para
construir reglas con un soporte mínimo de 0,0006 y la confianza mínimo de 0,25:
Datos de la minería:
soporte de datos ntransactions
groceries98350.0060.25 confianza

Podemos echar un vistazo a las reglas específicas utilizando la función de inspeccionar ().
Por ejemplo, la
primeros tres reglas en el objeto groceryrules se pueden ver de la siguiente manera:
> Comprobar (groceryrules [1: 3])

[ 291 ]
Capítulo 8

La primera regla se puede leer en un lenguaje sencillo como, "si un cliente


compra plantas en macetas, que también van a comprar la leche entera." Con el
apoyo de 0.007 y la confianza de 0.400,
podemos determinar que esta regla cubre el 0,7 por ciento de las transacciones y es
correcta en el 40 por ciento de las compras que implican las plantas en maceta. El
valor de elevación nos dice cuánto más probable es un cliente para comprar la
leche entera en relación con el cliente promedio, dado que él o ella compró una
planta en maceta. Ya que sabemos que alrededor del 25,6 por ciento de los clientes
compró leche entera (de apoyo), mientras que el 40 por ciento de los clientes de
comprar una planta en maceta compró leche entera (de confianza), podemos
calcular el valor de ascensor
0.40 / 0,256 = 1,56, Que coincide con el valor mostrado.

Tenga en cuenta que la columna etiquetada indica el


apoyo valor el apoyo al Estado, no el valor de apoyo a la
LHS o rhs solo).

A pesar del hecho de que la confianza y la elevación son altos, tiene plantas en
macetas {} {→ leche entera} parecer una regla muy útil? Probablemente no, ya que
no parece haber una razón lógica por qué alguien podría ser más propensos a
comprar leche con una planta en maceta. Sin embargo, nuestros datos sugieren lo
contrario. ¿Cómo podemos dar sentido a este hecho?
Un enfoque común es tomar las reglas de asociación y dividirlos en las
siguientes tres categorías:

• Procesable
• Trivial
• Inexplicable

Obviamente, el objetivo de un análisis de la cesta es encontrar reglas


configurables que proporcionan una visión clara y útil. Algunas reglas son
claras, otras son útiles; es menos frecuente encontrar una combinación de
ambos factores.
Los llamados reglas triviales incluyen las normas que son tan evidentes que no
vale la pena mencionar-que son claras, pero no es útil. Supongamos que un
consultor de marketing que se paga grandes sumas de dinero para identificar
nuevas oportunidades para los elementos cruzados promoviendo. Si reporta el
hallazgo de que los pañales {} → {} fórmula, es probable que no serán invitados
de nuevo para otro trabajo de consultoría.

triviales reglas también pueden colarse disfrazado resultados


[ 292 ]
más interesantes. Por ejemplo, digamos que has encontrado
una asociación entre una determinada marca de cereales para
niños y una cierta película de DVD. Este hallazgo no es muy
perspicaz, si el personaje principal de la película está en la
parte delantera de la caja de cereal.

[ 293 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Las reglas son inexplicables si la conexión entre los elementos es tan poco clara que
encontrar la manera de utilizar la información es imposible o casi imposible. La regla
puede ser simplemente un patrón aleatorio en los datos, por ejemplo, una regla que
indica que los pepinillos {}
→ {helado de chocolate} puede deberse a un solo cliente, cuya mujer embarazada
tenido antojos regulares de extrañas combinaciones de alimentos.
Las mejores reglas son joyas ocultas, esos conocimientos no descubiertos en patrones
que parecen obvias una vez descubierta. Dado el tiempo suficiente, se podría evaluar
todos y cada regla para encontrar las gemas. Sin embargo, nosotros (el que realizar el
análisis de la cesta) puede no ser el mejor juez de si una norma es susceptible de
recurso, trivial, o inexplicable. En la siguiente sección, vamos a mejorar la utilidad de
nuestro trabajo mediante el empleo de métodos para clasificar y compartir las reglas
aprendidas para que los resultados más interesantes podrían flotar en la parte
superior.

Paso 5 - mejorar el rendimiento del modelo


expertos en la materia pueden ser capaces de identificar las reglas útiles muy
rápidamente, pero sería un mal uso de su tiempo para preguntarles para evaluar
cientos o miles de reglas.
Por lo tanto, es útil ser capaz de ordenar las reglas de acuerdo a diferentes criterios, y
sacarlos de R en una forma que puede ser compartida con los equipos de marketing
y se examina con mayor profundidad. De esta manera, podemos mejorar el
rendimiento de nuestras reglas al hacer los resultados más procesable.

Ordenando el conjunto de reglas de asociación


Dependiendo de los objetivos del análisis de la cesta, las reglas más útiles podrían
ser las que tienen un mayor apoyo, la confianza, o ascensor. El paquete incluye
arules una función sort () que se puede utilizar para reordenar la lista de reglas
para que los que tienen los valores más altos o más bajos de la medida de calidad
son lo primero.
Para reordenar los groceryrules objeto, podemos aplicar sort (), mientras que la
especificación de un "apoyo", "confianza", o el valor de "levantar" al parámetro. Al
combinar la función de clasificación con los operadores vectoriales, podemos
obtener un número específico de reglas interesantes. Por ejemplo, los mejores cinco
reglas de acuerdo con la estadística de elevación pueden ser examinadas usando el
siguiente comando:
> inspeccionar (sort (groceryrules, por = "lift") [1: 5])

[ 294 ]
Capítulo 8

Estos salida se muestra como sigue:

Estas reglas parecen ser más interesantes que las que vimos anteriormente. La
primera regla, con una elevación de alrededor de 3,96, implica que las personas que
compran hierbas son casi cuatro veces más propensos a comprar hortalizas de raíz
que el típico cliente tal vez por un guiso de algún tipo? La regla número dos es
también interesante. crema batida es más de tres veces más probabilidades de ser
encontrado en un carro de compras con las bayas en comparación con otros carros, lo
que sugiere tal vez un emparejamiento de postre?

Por defecto, el orden de clasificación es decreciente, es decir,


los valores más grandes son lo primero. Para invertir este
orden, añadir una línea adicional, parameterdecreasing =
FALSO.

Tomando subconjuntos de reglas de asociación


Supongamos que, dada la regla anterior, el equipo de marketing está muy
entusiasmado con las posibilidades de crear un anuncio para promover las bayas,
que ahora están en temporada. Antes de finalizar la campaña, sin embargo, se le
pedirá que investigar si las bayas se compran a menudo con otros elementos. Para
responder a esta pregunta, tendremos que encontrar todas las reglas que incluyen
bayas en alguna forma.
La función subconjunto () proporciona un método para buscar subconjuntos de
transacciones, elementos o reglas. Para usarlo para encontrar las reglas con las
bayas que aparecen en la regla, utilice el siguiente comando. Se almacenará las
reglas en un nuevo objeto berryrules titulado:
> berryrules <- subconjunto (groceryrules, artículos% en% "bayas")

entonces podemos inspeccionar las reglas como lo hicimos con el conjunto más amplio:
> Comprobar (berryrules)

[ 295 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

El resultado es el siguiente conjunto de reglas:

Hay cuatro reglas que implican las bayas, dos de los cuales parecen ser lo
suficientemente interesante como para ser llamado procesable. Además de la
crema batida, bayas también se compran con frecuencia con yogur, un
emparejamiento que podría servir también para el desayuno o el almuerzo, así
como postre.

La función subconjunto () es muy potente. Los criterios para elegir el subconjunto puede
ser
definido con varias palabras clave y operadores:
• la palabra clave artículos explicó anteriormente, coincide con un
artículo que aparece en cualquier lugar de la regla. Para limitar el
subconjunto de donde se produce el encuentro sólo de la izquierda o de
la derecha lado, el usoLHS y RHS en lugar.
• El operador %en% significa que al menos uno de los elementos debe ser
encontrado en la lista que haya definido. Si desea cualquier regla que
concuerde con cualquiera bayas o yogur, se podría escribirartículos% en%
c ( "bayas", "yogur”).
• operadores adicionales están disponibles para la coincidencia parcial
(%alfiler%) Y juego completa (% Ain%). concordancia parcial permite
encontrar tanto en cítricos y frutas tropicales mediante una sola
búsqueda:artículos% pasador% "fruto". hace juego completo requiere
que todos los elementos enumerados están presentes. Por
ejemplo,artículos% ain% c ( "bayas", "yogur") encuentra únicas
reglas con tanto bayas y yogur.
• Subconjuntos también pueden estar limitadas por apoyo, confianzao
levantar. Por ejemplo,la confianza> 0,50 habría que limitar a las
normas con confianza superior al 50 por ciento.
• coinciden con los criterios pueden ser combinados con los operadores
estándar R lógicos como y (y), O (|), y no (!).

El uso de estas opciones, se puede limitar la selección de reglas para ser lo más específico
o general, según
te gustaría.

[ 296 ]
Capítulo 8

Ahorro de reglas de asociación a una trama de datos o


archivo
Para compartir los resultados de su análisis de la cesta, puede guardar las reglas a un
archivo CSV con la función de escritura (). Esto producirá un archivo CSV que se
puede utilizar en la mayoría de los programas de hojas de cálculo de Microsoft Excel
que incluyen:
> escribir (groceryrules, file =

"groceryrules.csv", sep = "", cita =

VERDADERO, FALSO row.names =)

A veces también es conveniente convertir las reglas en una trama de datos R. Esto se
puede lograr fácilmente usando la función como (), como sigue:
> groceryrules_df <- como (groceryrules, "data.frame")

Esto crea una trama de datos con las reglas en el formato de factores y vectores numéricos
para
apoyo, confianzay levantar:
> str (groceryrules_df)
'hoja.de.datos': 463 des. de 4
variables:
PS reglas: Factor w / 463 niveles "{polvo de hornear} =>
{}" otras verduras, ..: 302 207 206 340 208 341
402 21 139 140 ...
PS apoyo: num0.00691 0.00702 0.00773 0.00773 0.0061 ...
$ Confianza: num0.4 0,405 0,431 0,475 0,475 ...
PS levantar: num1.57 1,59 3,96 2,45 1,86 ...

Usted puede optar por hacer esto si desea realizar un procesamiento adicional
en las normas o la necesidad de exportarlos a otra base de datos.

[ 297 ]
Encontrar patrones - Mercado análisis de la cesta Uso de asociación Reglas

Resumen
Las reglas de asociación se utilizan con frecuencia para encontrar proporcionar
información útil en las bases de datos de transacciones masivas de los grandes
minoristas. Como un proceso de aprendizaje sin supervisión, los alumnos de reglas
de asociación son capaces de extraer conocimiento a partir de grandes bases de datos
sin ningún conocimiento previo de lo que los patrones a buscar. El problema es que
se necesita un poco de esfuerzo para reducir la cantidad de información en un
conjunto más pequeño y más manejable de los resultados. El algoritmo Apriori, que
estudiamos en este capítulo, lo hace mediante el establecimiento de umbrales
mínimos de interestingness, e informar sólo las asociaciones que cumplen estos
criterios.
Ponemos el algoritmo Apriori a trabajar mientras se realiza un análisis de la cesta
para el valor de un mes de las transacciones en un supermercado de tamaño
moderado. Incluso en este pequeño ejemplo, se identificó una gran cantidad de
asociaciones. Entre ellas, hemos observado varios patrones que pueden ser útiles
para futuras campañas de marketing. Los mismos métodos que aplicamos se utilizan
en las tiendas mucho más grandes en las bases de datos muchas veces este tamaño.
En el siguiente capítulo, examinaremos otro algoritmo de aprendizaje no
supervisado. Al igual que las reglas de asociación, se pretende encontrar patrones
dentro de los datos. Pero a diferencia de las reglas de asociación que buscan
patrones dentro de las características, los métodos en el siguiente capítulo están
preocupados por encontrar conexiones entre los ejemplos.

[ 298 ]
Encontrar grupos de
datos - La agrupación
con k-medias
¿Alguna vez ha pasado el tiempo de ver una gran multitud? Si es así, es probable
que se han visto algunos personajes recurrentes. Tal vez un cierto tipo de persona,
identificada por un traje recién planchado y un maletín, trata de tipificar el
ejecutivo de negocios "gato gordo".
Un veinteañero que llevaba jeans ajustados, una camisa de franela, y gafas de sol
podría doblar un "inconformista", mientras que una mujer de descargando a los
niños de un monovolumen puede ser etiquetado como un "soccer mom".
Por supuesto, este tipo de estereotipos son peligrosos para aplicar a los
individuos, como no hay dos personas exactamente iguales. Sin embargo,
entendida como una manera de describir un colectivo, las etiquetas recogen
algunos aspectos subyacente de similitud entre los individuos dentro del grupo.
Como pronto aprender, el acto de la agrupación, o patrones de manchas en los
datos, no es muy diferente de detectar patrones en grupos de personas. En este
capítulo, usted aprenderá:
• Las formas de agrupamiento tareas difieren de las tareas de
clasificación que hemos examinado anteriormente
• Cómo agrupación define un grupo, y como tales grupos son
identificados por k-medias, un algoritmo clásico y fácil de entender la
agrupación
• Los pasos necesarios para aplicar la agrupación a una tarea del mundo
real de la identificación de segmentos de marketing entre los usuarios
adolescentes de medios sociales

[ 299 ]
Antes de saltar a la acción, vamos a empezar por tomar una mirada en
profundidad a exactamente lo que implica el agrupamiento.

[ 300 ]
Encontrar grupos de datos - La agrupación con k-medias

agrupación comprensión
La agrupación es una tarea de aprendizaje automático sin supervisión, que divide
automáticamente los datos en agrupaciones o grupos de elementos similares. Esto
lo hace sin haber sido contaron que los grupos deben buscar antes de tiempo.
Como es posible que ni siquiera saben lo que estamos buscando, la agrupación se
utiliza para el descubrimiento de conocimiento en lugar de predicción.
Proporciona una visión de las agrupaciones naturales que se encuentran dentro de
los datos.
Sin conocimiento previo de lo que comprende un clúster, ¿cómo puede una
computadora posiblemente saber dónde termina un grupo y otro comienza? La
respuesta es simple. Clustering es guiado por el principio de que los elementos
dentro de un clúster deben ser muy similares entre sí, pero muy diferente de los
de fuera. La definición de similitud podría varían de una aplicación, pero la idea
básica es siempre el mismo: grupo de los datos para que los elementos
relacionados se colocan juntos.
Las agrupaciones resultantes se pueden entonces utilizar para la acción. Por ejemplo, es
posible encontrar
métodos de agrupación empleadas en las siguientes aplicaciones:
• La segmentación de clientes en grupos con características demográficas
similares o patrones de compra para las campañas de marketing
dirigidas
• La detección de comportamiento anómalo, tales como intrusiones en la
red no autorizados, mediante la identificación de los patrones de uso de
caer fuera de los grupos conocidos
• Simplificar extremadamente grandes conjuntos de datos mediante la
agrupación de características con valores similares en un número
menor de categorías homogéneas
En general, la agrupación es útil siempre que los datos diversos y variados pueden
ejemplificarse por un número mucho menor de los grupos. Da lugar a estructuras
de datos significativos y procesables que reducen la complejidad y permiten
conocer los patrones de relaciones.

La agrupación como una tarea de aprendizaje


automático
La agrupación es algo diferente de la clasificación, predicción numérica, y las tareas
de detección de patrones que hemos examinado hasta ahora. En cada uno de estos
casos, el resultado es un modelo que relaciona características a un resultado o
[ 301 ]
características a las otras características; Conceptualmente, el modelo describe los
patrones existentes en los datos. Por el contrario, la agrupación crea nuevos datos.
ejemplos sin etiqueta se les da una etiqueta de clúster que se ha inferido por
completo de las relaciones dentro de los datos. Por esta razón, usted, a veces, ver la
tarea de agrupamiento se hace referencia a la clasificación como no supervisado, ya
que, en cierto sentido, que clasifica ejemplos no etiquetados.

[ 302 ]
Capítulo 9

El problema es que las etiquetas de clase obtenidos a partir de un clasificador sin


supervisión son sin significado intrínseco. La agrupación le dirá qué grupos de
ejemplos están estrechamente relacionados, por ejemplo, se puede devolver los
grupos A, B, y C, pero le toca a usted para aplicar una etiqueta procesable y
significativa. Para ver cómo esto afecta a la tarea de agrupamiento, consideremos un
ejemplo hipotético.
Suponga que está organizando una conferencia sobre el tema de la ciencia de datos.
Para facilitar la creación de redes profesionales y la colaboración, lo planeado para
asentar las personas en grupos de acuerdo con una de las tres especialidades de
investigación: la computadora y / o la ciencia de base de datos, matemáticas y
estadísticas, y el aprendizaje de la máquina. Por desgracia, después de enviar las
invitaciones de la conferencia, se da cuenta de que se había olvidado de incluir una
encuesta preguntando qué disciplina preferiría estar sentado con el asistente.
En un golpe de brillantez, te das cuenta de que podría ser capaz de inferir la
especialidad de investigación de cada académico mediante el examen de su
historia de la publicación. Para tal fin,
de comenzar la recogida de datos sobre el número de artículos de cada uno de
los asistentes publicados en revistas relacionadas con la ciencia ordenador y el
número de artículos publicados en revistas relacionadas con las estadísticas o
matemáticas. Utilizando los datos recogidos por varios estudiosos, se crea un
diagrama de dispersión:

Como era de esperar, parece que hay un patrón. Podríamos suponer que la esquina
superior izquierda, que representa a las personas con muchas publicaciones de la
informática, pero algunos artículos sobre matemáticas, podría ser un grupo de
científicos de la computación. Siguiendo esta lógica, la esquina inferior derecha
puede ser un grupo de matemáticos. Del mismo modo, la esquina superior derecha,
[ 303 ]
los que tienen experiencia tanto en matemáticas y ciencias de la computación, puede
ser el aprendizaje de máquinas expertos.

[ 304 ]
Encontrar grupos de datos - La agrupación con k-medias

Nuestros grupos que se formaban visualmente; que simplemente grupos


identificados como agruparon estrechamente puntos de datos. Sin embargo, a pesar
de las agrupaciones aparentemente obvio, que por desgracia no tenemos forma de
saber si son verdaderamente homogénea sin pedir personalmente a cada
investigador acerca de su / su especialidad académica. Las etiquetas se les aplicó
requiere que hagamos juicios cualitativos, presuntivos sobre los tipos de personas
que entran en el grupo. Por esta razón, se puede imaginar las etiquetas de racimo en
términos muy claros, de la siguiente manera:

En lugar de definir los límites de los grupos subjetivamente, sería agradable de usar
la máquina de aprendizaje para definir objetivamente. Dadas las divisiones paralelas
al eje en el diagrama anterior, nuestro problema parece una aplicación obvia para los
árboles de decisión que se describen en el Capítulo 5, divide y vencerás -
Clasificación a partir de árboles de decisión y Reglas. Esto nos puede proporcionar
con una regla en la forma "si un investigador tiene pocas publicaciones matemáticas,
entonces él / ella es un experto en informática." Por desgracia, hay un problema con
este plan. Como no tenemos datos sobre el verdadero valor de la clase para cada
punto, un algoritmo de aprendizaje supervisado no tendría capacidad para
aprender un patrón de este tipo, ya que no tendría forma de saber lo que divide
resultaría en grupos homogéneos.
Por otra parte, algoritmos de agrupamiento usan un proceso muy similar a lo que
hicimos mediante la inspección visual del diagrama de dispersión. El uso de una
medida de cómo de cerca los ejemplos están relacionados, grupos homogéneos
pueden ser identificados. En la siguiente sección, vamos a empezar a ver cómo se
implementan los algoritmos de agrupamiento.

Este ejemplo pone de manifiesto una interesante aplicación de la


agrupación. Si se comienza con datos no etiquetados, puede

[ 305 ]
utilizar la agrupación para crear etiquetas de clase. A partir de
ahí, se puede aplicar un alumno supervisado tales como árboles
de decisión para encontrar los predictores más importantes de
estas clases. Esto se llama semi-aprendizaje supervisado.

[ 306 ]
Capítulo 9

El algoritmo de agrupamiento k-medias


El algoritmo de k-medias es tal vez el método de agrupamiento más comúnmente
utilizado. Después de haber sido estudiado desde hace varias décadas, que sirve
como base para muchas técnicas de agrupamiento más sofisticados. Si usted
entiende los principios simples que utiliza, usted tendrá los conocimientos
necesarios para comprender casi cualquier algoritmo de agrupamiento en uso hoy
en día. Muchos de tales métodos se muestran en la siguiente página web, la vista de
tareas para el agrupamiento en CRANhttp://cran.r-
project.org/web/views/Cluster.html.

Como k-medias ha evolucionado con el tiempo, hay muchas


implementaciones del algoritmo. Un enfoque popular se
describe en: Hartigan JA, Wong MA. Un algoritmo de
agrupamiento k-medias. Estadísticas aplicadas. 1979; 28:
100-108.

A pesar de que los métodos de agrupación han avanzado desde el inicio de k-


medias, esto no quiere decir que las k-medias es obsoleto. De hecho, el método
puede ser más popular ahora que nunca. En la siguiente tabla se enumeran
algunas razones por las k-medias todavía se utiliza ampliamente:

fortalezas debilidades
• Utiliza principios simples que se • No es tan sofisticado como
pueden explicar en términos no algoritmos de agrupamiento más
estadísticos modernos
• Altamente flexible, y puede ser • Debido a que utiliza un elemento de
adaptado con ajustes simples para azar, no está garantizado para
hacer frente a casi todos sus encontrar el conjunto óptimo de las
deficiencias agrupaciones
• Realiza lo suficientemente bien en • Requiere una suposición razonable
muchos casos de uso del mundo en cuanto a cuántos grupos existen
real naturalmente en los datos
• No es ideal para las agrupaciones o
grupos de densidad muy variable
no esféricas

Si el nombre de k-medias suena familiar a usted, usted puede estar


recordando el algoritmo k-NN discutido en el capítulo 3, Lazy Learning -
Clasificación a partir de los vecinos más cercanos. Como pronto veremos,
k-medias acciones más en común con los k-vecinos más cercanos que sólo
la letra k.
El algoritmo de k-medias asigna a cada una de las n ejemplos a uno de los cúmulos
[ 307 ]
k, donde k es un número que ha sido determinado de antemano. El objetivo es
reducir al mínimo las diferencias dentro de cada grupo y maximizar las diferencias
entre los grupos.

[ 308 ]
Encontrar grupos de datos - La agrupación con k-medias

A menos que k y n son extremadamente pequeñas, no es factible para calcular los


racimos óptimas a través de todas las posibles combinaciones de ejemplos. En su
lugar, el algoritmo utiliza un proceso heurístico que encuentra soluciones
localmente óptimas. En pocas palabras, esto significa que
se inicia con una aproximación inicial para las asignaciones de racimo, y luego
modifica las asignaciones ligeramente para ver si los cambios mejoran la
homogeneidad dentro de los grupos.
Vamos a cubrir el proceso en profundidad dentro de poco, pero el algoritmo implica
esencialmente dos fases. En primer lugar, se asigna ejemplos a un conjunto inicial de
k clusters. A continuación, se actualiza las asignaciones mediante el ajuste de los
límites de las agrupaciones de acuerdo con los ejemplos que se sitúan actualmente
en el clúster. El proceso de actualización y asignación se produce varias veces hasta
que los cambios ya no mejoran el ajuste clúster. En este punto, el proceso se detiene
y los grupos son finalizado.

Debido a la naturaleza heurística de k-medias, que puede terminar con


resultados algo diferentes finales, haciendo sólo ligeros cambios en las
condiciones de partida. Si los resultados varían dramáticamente, esto
podría indicar un problema.
Por ejemplo, los datos pueden no tener las agrupaciones naturales o el
valor de K ha sido mal elegido. Con esto en mente, es una buena idea
para tratar un análisis de conglomerados más de una vez para probar
la solidez de sus resultados.

Para ver cómo el proceso de asignación y actualización de las obras, en la práctica,


vamos a revisar el caso de la conferencia de la ciencia hipotética datos. Aunque este
es un ejemplo simple, se ilustran los fundamentos de cómo k-medios opera bajo el
capó.

Usando distancia para asignar y racimos de


actualización
Al igual que con k-NN, k-significa golosinas disponen de valores como
coordenadas en un espacio de características multidimensional. Para los datos de
conferencia, sólo hay dos características, por lo que pueden representar el espacio
de características como un diagrama de dispersión de dos dimensiones como se
describe anteriormente.
El algoritmo de k-medias comienza por la elección de k puntos en el espacio de
características para servir como los centros de los conglomerados. Estos centros son
el catalizador que estimula los ejemplos restantes a caer en su lugar. A menudo, los
puntos se eligen mediante la selección de ejemplos aleatorios k del conjunto de
datos de entrenamiento. Como esperamos identificar tres grupos, de acuerdo con
[ 309 ]
este método, k = 3 puntos serán seleccionados al azar. Estos puntos se indican por la
estrella, triángulo, y el diamante en el siguiente diagrama:

[ 310 ]
Capítulo 9

Vale la pena señalar que, aunque los tres centros de los conglomerados en el
diagrama anterior resultan ser ampliamente separados, esto no siempre es
necesariamente el caso. Puesto que se seleccionan al azar, los tres centros podrían
tener tan sido fácilmente tres puntos adyacentes. Como el algoritmo de k-medias es
altamente sensible a la posición inicial de los centros de los conglomerados, esto
significa que el azar puede tener un impacto sustancial en el conjunto final de
clusters.
Para abordar este problema, k-medias se pueden modificar para utilizar diferentes
métodos para elegir los centros iniciales. Por ejemplo, una variante elige valores
aleatorios que ocurren en cualquier lugar del espacio de características (en lugar de
solamente la selección entre los valores observados en los datos). Otra opción es
saltarse este paso por completo; mediante la asignación al azar cada ejemplo de un
clúster, el algoritmo puede ir por delante de inmediato a la fase de actualización.
Cada uno de estos enfoques añade un sesgo particular a la última serie de grupos,
que es posible que pueda utilizar para mejorar sus resultados.

En 2007, se introdujo un algoritmo llamado de k-medias ++, que


propone un método alternativo para la selección de los centros de
los conglomerados iniciales. Que pretende ser una manera eficaz
de conseguir mucho más cerca de la solución de clustering óptima
al tiempo que reduce el impacto de la casualidad. Para obtener
más información, consulte Arthur D, Vassilvitskii S.
k-medias ++: Las ventajas de la siembra cuidado. Actas de la
XVIII Simposio Anual ACM-SIAM en algoritmos discretos.
2007: 1027-35.

Después de la elección de los centros de los conglomerados iniciales, los otros


ejemplos se asignan al centro de la agrupación que es la más cercana de acuerdo
con la función de distancia. Usted recordará que hemos estudiado funciones de
[ 311 ]
distancia mientras aprenden acerca de k-vecinos más cercanos.
Tradicionalmente, k-medias utiliza distancia euclidiana, pero la distancia
Manhattan o Minkowski distancia también se utilizan a veces.

[ 312 ]
Encontrar grupos de datos - La agrupación con k-medias

Recordemos que si n indica el número de características, la fórmula para la


distancia euclidiana entre el Ejemplo x y el ejemplo Y es:

Por ejemplo, si estamos comparando un invitado con cinco publicaciones de


informática y una publicación de matemáticas a un invitado con cero papeles de
informática y dos documentos de matemáticas, podríamos calcular esta en I de la
siguiente manera:
> Sqrt ((5 - 0,) ^ 2 + (1 -
2) ^ 2) [1] 5.09902

El uso de esta función de distancia, nos encontramos con la distancia entre cada ejemplo y
cada
centro de la agrupación. El ejemplo se asigna a la agrupación centro más cercano.

Tenga en cuenta que a medida que estamos utilizando cálculos de


distancia, todas las características que necesitan ser numéricos, y los
valores se normalizaron a una gama estándar antes de tiempo. Los
métodos discutidos en el Capítulo 3, Lazy Learning - Clasificación a
partir de los vecinos más cercanos, resultarán útiles para esta tarea.

Como se muestra en el siguiente diagrama, los tres centros de los conglomerados


partición de los ejemplos en tres segmentos marcados Cluster A, Grupo B, y C. El
Cluster Las líneas discontinuas indican los límites para el diagrama de Voronoi
creado por los centros de los conglomerados. El diagrama de Voronoi indica las
zonas que están más cerca de un centro de clúster que cualquier otro; el vértice
donde todos los tres límites se juntan es la distancia máxima de los tres centros de
los conglomerados. El uso de estos límites, podemos ver fácilmente las regiones
reclamadas por cada una de las semillas iniciales K-medias:

[ 313 ]
Capítulo 9

Ahora que la fase de asignación inicial se ha completado, el k-significa algoritmo


procede a la fase de actualización. La primera etapa de actualización de los racimos
implica el desplazamiento de los centros iniciales a una nueva ubicación, conocido
como el centroide, que se calcula como la posición media de los puntos actualmente
asignados a ese clúster. El diagrama siguiente ilustra cómo como los centros de los
conglomerados se desplazan a las nuevas centroides, los límites en el diagrama
Voronoi también cambian y un punto que estaba una vez en la Categoría B
(indicado por una flecha) se añade con el clúster A:

Como resultado de esta reasignación, el algoritmo de k-medias continuará a


través de otra fase de actualización. Después de cambiar los centroides de
grupo, la actualización de los límites de las agrupaciones, y la reasignación de
puntos en nuevos grupos (como indican las flechas), la figura se ve así:

[ 314 ]
Encontrar grupos de datos - La agrupación con k-medias

Debido a que fueron reasignados dos puntos más, otra actualización debe ocurrir,
que mueve los centroides y actualiza los límites de las agrupaciones. Sin embargo,
debido a que estos cambios dan como resultado no hay reasignaciones, el algoritmo
de k-medias se detiene. Las asignaciones de racimo son ahora definitiva:

Los grupos finales pueden ser reportados en una de las dos maneras. En primer
lugar, es posible que simplemente informar de las asignaciones de racimo como la
A, B, o C para cada ejemplo. Como alternativa, puede informar las coordenadas de
los centroides de grupo después de la última actualización. Teniendo en cuenta
cualquiera de los métodos de informes, que son capaces de definir los límites de las
agrupaciones mediante el cálculo de los centroides o asignar cada ejemplo a su
grupo más cercano.

La selección del número apropiado de conglomerados


En la introducción de k-medias, aprendimos que el algoritmo es sensible a los
centros de los conglomerados escogidos al azar. De hecho, si hubiéramos elegido
una combinación diferente de tres puntos de partida en el ejemplo anterior, es
posible que hayamos encontrado grupos que dividen los datos de manera diferente
a lo que habíamos esperado. De manera similar, k-medias es sensible al número de
grupos; La elección requiere un delicado equilibrio. Configuración k sea muy
grande va a mejorar la homogeneidad de los grupos, y al mismo tiempo, se corre el
riesgo de sobreajuste de los datos.
Idealmente, usted tendrá un conocimiento a priori (una creencia previa) acerca de
las verdaderas agrupaciones y se puede aplicar esta información para elegir el
número de grupos. Por ejemplo, si estaban aglomerando las películas, es posible
empezar por establecer k igual al número de géneros considerados para los premios
de la Academia. En la conferencia de la ciencia de datos asiento problema que
trabajamos a través previamente, k podría reflejar el número de campos académicos
[ 315 ]
de estudio que fueron invitadas.

[ 316 ]
Capítulo 9

A veces el número de grupos es dictada por los requerimientos del negocio o


la motivación para el análisis. Por ejemplo, el número de mesas en la sala de
reunión podría dictar cómo muchos grupos de personas deben ser creados a
partir de los datos
lista de asistentes ciencia. La extensión de esta idea a otra modelo de negocio, si el
departamento de marketing solamente tiene recursos para crear tres diferentes
campañas de publicidad, podría tener sentido para establecer k = 3 para asignar
todos los clientes potenciales a uno de los tres recursos.
Sin ningún conocimiento previo, una regla empírica sugiere el establecimiento de
k igual a la raíz cuadrada de (n / 2), donde n es el número de ejemplos en el
conjunto de datos. Sin embargo, es probable que resulte en un número manejable
de grupos de grandes conjuntos de datos esta regla de oro. Afortunadamente,
hay otros métodos estadísticos que pueden ayudar en la búsqueda de un grupo
conjunto de k-medias adecuado.
Una técnica conocida como el método de codo intenta medir cómo la
homogeneidad o heterogeneidad dentro de los grupos cambios para diversos
valores de k. Como se ilustra en los siguientes diagramas, se espera que la
homogeneidad dentro de las agrupaciones a aumentar a medida que se añaden
grupos adicionales; Del mismo modo, la heterogeneidad también continuará a
disminuir con más agrupaciones. Como se podía continuar viendo mejoras hasta
que cada ejemplo está en su propio clúster, el objetivo no es maximizar la
homogeneidad o heterogeneidad de minimizar, sino más bien de encontrar k de
manera que se reducen las utilidades más allá de ese punto. Este valor de k se
conoce como el punto de codo porque se ve como un codo.

Hay numerosas estadísticas para medir la homogeneidad y la heterogeneidad


dentro de los grupos que se pueden utilizar con el método del codo (el siguiente
cuadro de información proporciona una citación para más detalles). Sin embargo,
en la práctica, no siempre es factible probar iterativamente un gran número de
valores de k. Esto es en parte debido a la agrupación de grandes conjuntos de datos
puede ser bastante tiempo; la agrupación de los datos en varias ocasiones es
incluso peor. En cualquier caso, las aplicaciones que requieren exactamente el
conjunto óptimo de las agrupaciones son bastante raros.
[ 317 ]
En la mayoría de aplicaciones de clúster, basta con elegir un valor de k basado en la
comodidad en lugar de los estrictos requisitos de rendimiento.

[ 318 ]
Encontrar grupos de datos - La agrupación con k-medias

Para una revisión muy completa de la gran variedad de medidas de


rendimiento de racimo, consulte: Halkidi M, Batistakis Y,
Vazirgiannis M. en la agrupación técnicas de validación. Diario de
Sistemas de Información Inteligentes. 2001; 17: 107-145.

El proceso de creación de k se puede llevar a veces ideas interesantes. Al observar


cómo las características de los grupos cambian a medida que k es variada, se podría
inferir que los datos tienen límites definidos de forma natural. Los grupos que están
más cercanos entre sí cambiará un poco, mientras que los grupos menos homogéneos
se forma y disolver a lo largo del tiempo.
En general, puede ser aconsejable para pasar poco tiempo en preocuparse por
conseguir k exactamente correcto. El siguiente ejemplo demostrará cómo incluso un
poquito de conocimiento de la materia tomada de una película de Hollywood
puede ser usado para fijar k tal que las agrupaciones viables e interesantes se
encuentran. Como una concentración es sin supervisión, la tarea es realmente
acerca de lo que hacemos de ella; el valor está en los conocimientos que quitar de la
conclusiones del algoritmo.

segmentos de mercado adolescente


Diagnóstico - Ejemplo
usando k-medias de agrupación
Interactuar con amigos en un servicio de redes sociales (SNS), como Facebook,
Tumblr, e Instagram se ha convertido en un rito de iniciación para los adolescentes
de todo el mundo. Tener una cantidad relativamente grande de la renta disponible,
estos adolescentes son un grupo demográfico codiciado por las empresas con la
esperanza de vender bocadillos, bebidas, productos electrónicos y productos de
higiene.
Los muchos millones de consumidores adolescentes que utilizan estos sitios han
atraído la atención de los vendedores que luchan por encontrar una ventaja en un
mercado cada vez más competitivo. Una manera de tener este borde es identificar
segmentos de adolescentes que comparten gustos similares,
de manera que los clientes pueden evitar apuntar anuncios a los adolescentes
que no tienen interés en el producto que se vende. Por ejemplo, luciendo ropa es
probable que sea difícil de vender a los adolescentes que no tienen interés en los
deportes.
Teniendo en cuenta el texto de las páginas del SNS adolescentes, podemos
identificar grupos que comparten intereses comunes, como los deportes, la
[ 319 ]
religión, o la música. Clustering puede automatizar el proceso de descubrir los
segmentos naturales en esta población. Sin embargo, será hasta nosotros decidir si
o no los racimos son interesantes y cómo podemos utilizarlos para la publicidad.
Vamos a probar este proceso de principio a fin.

[ 320 ]
Capítulo 9

Paso 1 - recogida de datos


Para este análisis, vamos a utilizar un conjunto de datos que representa una muestra
aleatoria de 30.000 de EE.UU.
estudiantes de secundaria que tenían perfiles en un SNS conocidas en 2006. Para
proteger el anonimato de los usuarios, el SNS permanecerán sin nombre. Sin
embargo, en el momento se recogieron los datos, el SNS era un destino de Internet
más populares para los adolescentes estadounidenses. Por lo tanto, es razonable
suponer que los perfiles representan una sección transversal bastante amplia de los
adolescentes estadounidenses en 2006.

Este conjunto de datos fue compilado por Brett Lantz, mientras que la
realización de la investigación sociológica sobre las identidades
adolescentes en la Universidad de Notre Dame. Si utiliza los datos para
fines de investigación, por favor citar este capítulo de un libro.
El conjunto de datos completo está disponible en la página web de
la editorial Packt con snsdata.csv nombre de archivo. Para seguir a
lo largo de forma interactiva, este capítulo se presupone que ha
guardado este archivo en el directorio de trabajo R.

Los datos se tomaron muestras de manera uniforme a través de cuatro años de


graduación de preparatoria (2006 a 2009) que representa los, menor, estudiante de
segundo año, y clases de primer año de alto nivel en el momento de la recogida de
datos. El uso de un rastreador web automatizado, el texto completo de los perfiles
del SNS se descargaron, y se registró de cada adolescente de género, edad y número
de amigos del SNS.
Una herramienta de minería de texto se utiliza para dividir el contenido de la
página SNS restante en palabras. De las 500 palabras principales que aparecen en
todas las páginas, 36 palabras fueron elegidos para representar cinco categorías de
interés, a saber: las actividades extracurriculares, la moda, la religión, el romance,
y el comportamiento antisocial. Las 36 palabras incluyen términos tales como
fútbol, atractivo, besado, biblia, tiendas, la muerte, y las drogas. El último conjunto
de datos indica, para cada persona, ¿cuántas veces aparece cada palabra en el
perfil de la persona SNS.

Paso 2 - exploración y la preparación de los


datos
Podemos utilizar la configuración predeterminada de read.csv () para cargar los datos en
una trama de datos:
> adolescentes <- read.csv ( "snsdata.csv")

[ 321 ]
También vamos a echar un vistazo rápido a los detalles de los datos. Las primeras líneas
de la
str () de salida son los siguientes:

> str (adolescentes)


'Hoja.de.datos': 30000 obs. of40 variables:
PS Año de graduación: int2006 2006 2006 2006 2006 2006 2006 2006 ...
PS Sexo: Factor w / 2 niveles "F", "M": 2 1 2 1 NA 1 1 2 ...
PS años: num19 18,8 18,3 18,9 19 ...

[ 322 ]
Encontrar grupos de datos - La agrupación con k-medias

PS amigos: INT7 0 69 0 10 142 72 17 52 39 ...


PS baloncesto: INT0 0 0 0 0 0 0 0 0 0 ...

Tal como esperábamos, los datos incluyen 30.000 adolescentes con cuatro variables
que indica las características personales y 36 palabras que indican intereses.

Cómo se nota algo extraño alrededor de la fila de género? Si estabas buscando


cuidadosamente, se habrán dado cuenta el valor NA, que está fuera de lugar en
comparación con los valores 1 y 2. La NA es una manera de decirnos que el registro
tiene un valor que falta no sabemos el sexo de la persona de R. Hasta ahora, no
hemos tratado con los datos que faltan, pero puede ser un problema importante para
muchos tipos de análisis.

Vamos a ver cómo este problema es sustancial. Una opción es utilizar la tabla ()
de comandos, de la siguiente manera:
> de mesa ($
adolescentes
género) FM
220545222

Aunque esta orden le dice Nos cuántos valores F y M están presentes, la función de
tabla () excluye los valores de NA en lugar de tratarla como una categoría separada.
Para incluir los valores de NA (si los hay), simplemente hay que añadir un parámetro
adicional:
> mesa ($ adolescentes género, useNA =
"Ifany") FM <NA>
2205452222724

Aquí, vemos que 2.724 registros (9 por ciento) tienen datos de género que faltan.
Curiosamente, hay más de cuatro veces el número de hembras como machos en los
datos del SNS, lo que sugiere que los hombres no son tan propensos a utilizar los
sitios web del SNS como hembras.
Si examina las otras variables en la trama de datos, encontrará que, además de
género, tan sólo la edad los valores que faltan. Para los datos numéricos, el
comando de resumen () nos dice que el número de desaparecidos valores de NA:
> resumen ($ adolescentes de edad)
Min. primeroQu.MedianMean
tercero Qu.Max. AN
3.08616.31017.29017.99018.260
106.900 5086

[ 323 ]
Un total de 5.086 registros (17 por ciento) tienen edades que faltan. También
preocupante es el hecho de que los valores mínimo y máximo parecen ser
razonable; es poco probable que un niño de 3 años o A 106 años de edad asiste a la
escuela secundaria. Para asegurar que estos valores extremos no causan problemas
para el análisis, tendremos que limpiarlos antes de continuar.

[ 324 ]
Capítulo 9

Un intervalo más razonable de las edades de los estudiantes de la escuela incluye a


aquellos que son al menos 13 años de edad y no todavía 20 años. Cualquier valor de
edad que cae fuera de este rango debe ser tratado igual que los datos que faltan, que
no se puede confiar en la edad prevista. Para recodificar la variable edad, podemos
utilizar la función ifelse (), la asignación de $ adolescente de edad el valor de $
adolescente edad si la edad es de al menos 13 y menos de 20 años; de lo contrario,
recibirá el valor NA:
> $ adolescentes edad <- ifelse ($ adolescentes edad> = 13 y adolescentes $
edad <20,
$ adolescentes edad, NA)

Por volver a comprobar resumen de la salida (), vemos que el rango de edad
ahora sigue una distribución que se parece mucho más a una escuela
secundaria real:
> resumen ($ adolescentes de edad)
Min. primeroQu.MedianMean tercero
Qu.Max. AN 13.0316.3017.2617.2518.2220.00
5523

Por desgracia, ahora hemos creado un problema de los datos que faltan aún mayor.
Necesitaremos
para encontrar una manera de lidiar con estos valores antes de continuar con nuestro
análisis.

Preparación de datos - valores ficticios de


codificación que faltan
Una solución fácil para la manipulación de los valores que faltan es excluir cualquier
registro con un valor perdido. Sin embargo, si se piensa en las implicaciones de esta
práctica, se podría pensar dos veces antes de hacerlo, simplemente porque es fácil,
no significa que es una buena idea! El problema con este enfoque es que incluso si el
missingness no es muy amplio, puede excluir fácilmente grandes porciones de los
datos.
Por ejemplo, supongamos que en nuestros datos, las personas con los valores de NA
para el género son completamente diferentes de los que tienen datos de edad
desaparecidos. Esto implicaría que al excluir a los desaparecidos cualquier sexo o
edad, que excluiría a 9% + 17% = 26% de los datos, o más de 7.500 registros. Y esto
es por la falta de datos en sólo dos variables!
Cuanto mayor sea el número de valores que faltan presentes en un conjunto de
datos, lo más probable es que se excluye cualquier registro dado. Bastante pronto, se
le dejó con un pequeño subconjunto de datos, o peor aún, los registros restantes
[ 325 ]
serán sistemáticamente diferentes o no representativa de la población total.
Una solución alternativa para las variables categóricas como el género es tratar a un
valor faltante como una categoría separada. Por ejemplo, en lugar de limitarse a
hembra y macho, podemos añadir una categoría adicional para el sexo desconocido.
Esto nos permite utilizar la codificación ficticia, que fue cubierto en el Capítulo 3,
Lazy Learning - Clasificación a partir de los vecinos más cercanos.

[ 326 ]
Encontrar grupos de datos - La agrupación con k-medias

Si recuerdan, codificación maniquí implica la creación de un binario independiente


(1 o 0) valorado variable ficticia para cada nivel de una característica nominal,
excepto uno, que se extendió para servir como el grupo de referencia. La razón de
una categoría se puede excluir es debido a que su estado se puede deducir de las
otras categorías. Por ejemplo, si alguien no está
sexo femenino y no desconocido, que debe ser masculino. Por lo tanto, en este caso,
tenemos que crear solamente las variables ficticias para el sexo femenino y
desconocido:
> adolescentes $ <femenina - ifelse ($ adolescentes de género == "F" &
! Is.na ($ adolescentes de género), 1, 0)
> adolescentes $ no_gender <- IfElse (is.na (adolescentes
$ género), 1, 0)

Como era de esperar, las pruebas de función is.na () si el género es igual a NA.
Por lo tanto, la primera instrucción asigna $ adolescentes de sexo femenino el
valor 1 si el género es igual a F y el género no es igual a NA; de lo contrario, se
asigna el valor 0. En la segunda sentencia, si is.na () devuelve TRUE, significa que
el género no se encuentra, los adolescentes $ no_gender variable se asignan 1; de
lo contrario, se le asigna el valor 0.
Para confirmar que hicimos el trabajo correctamente, vamos a comparar nuestra ficticia
construida
variables a la variable original de género:
> mesa ($ adolescentes género, useNA =
"Ifany") FM <NA>
2205452222724
> mesa ($ adolescentes de sexo
femenino, useNA = "Ifany") 01
7946 22054
> mesa ($ adolescentes no_gender, useNA =
"Ifany") 01
272762724

El número de 1 valores para $ adolescentes de sexo femenino y


adolescentes $ no_gender coincide con el número de F y N / A valores,
respectivamente, por lo que deben ser capaces de confiar en nuestro trabajo.

Preparación de datos - imputar los valores perdidos


A continuación, vamos a eliminar los 5.523 valores de edad que faltan. A medida
que la edad es numérico, no tiene sentido para crear una categoría adicional para
los valores-donde desconocidos le Rank "desconocido" en relación con las otras
[ 327 ]
edades? En su lugar, vamos a utilizar una estrategia diferente conocido como
imputación, que consiste en rellenar los datos que faltan con una conjetura en
cuanto al valor verdadero.

[ 328 ]
Capítulo 9

Se puede pensar en una manera que podría ser capaz de utilizar los datos del SNS a
hacer una conjetura informada acerca de la edad de un adolescente? Si usted está
pensando en usar el año de graduación, que tienes la idea correcta. La mayoría de la
gente en una cohorte de graduación nacieron dentro de un mismo año calendario. Si
podemos identificar la edad típica para cada cohorte, tendríamos una estimación
bastante razonable de la edad de un estudiante en ese año de graduación.

Una forma de encontrar un valor típico es mediante el cálculo del valor medio o
promedio. Si tratamos
para aplicar la función media (), como lo hicimos para los análisis anteriores, hay un
problema:
> media ($ adolescentes de edad)
[1] NA

La cuestión es que la media está definida por un vector que contiene los datos que
faltan. A medida que nuestra edad de los datos contiene los valores que faltan, con
una media ($ adolescentes de edad) devuelve un valor que falta. Podemos corregir
esto añadiendo un parámetro adicional para eliminar los valores que faltan antes de
calcular la media:
> media ($ adolescentes edad,
na.rm = VERDADERO) [1] 17.25243

Esto revela que el estudiante promedio en nuestros datos es cerca de 17 años de


edad. Esto sólo nos lleva parte del camino; que realmente se necesita la edad
promedio para cada año de la graduación. Usted puede verse tentado a calcular la
media de cuatro veces, pero uno de los beneficios de la I es que por lo general hay
una manera de evitar la repetición de uno mismo. En este caso, la función de
agregado () es la herramienta para el trabajo. Se calcula estadísticas de los subgrupos
de datos. A continuación, se calcula la media de edad por año de graduación
después de quitar los valores de NA:
> agregados (= datos adolescentes, edad ~ GradYear, media, na.rm = VERDADERO)
Año de años
graduación
1 2006 18.65586
2 2007 17.70617
3 2008 16.76770
4 2009 15.81957

La edad media difiere en más o menos un año por cada cambio en el año de graduación.
Esto no es
sorprende en absoluto, sino un hallazgo útil para confirmar nuestros datos es razonable.

[ 329 ]
La producción total () es una trama de datos. Esto es útil para algunos propósitos,
pero requeriría un trabajo extra para combinar de nuevo en nuestros datos
originales. Como alternativa, se puede utilizar la función de ave (), que devuelve
un vector con el grupo significa repite de manera que el resultado es igual en
longitud al vector original:
> ave_age <- ave (adolescentes $ edad, adolescentes $ GradYear, FUN =
función (x) media (x, na.rm = TRUE))

[ 330 ]
Encontrar grupos de datos - La agrupación con k-medias

Para imputar estos medios en los valores perdidos, necesitamos una más ifelse ()
para utilizar el valor ave_age sólo si el valor original de la edad era NA:
> $ adolescentes edad <- ifelse (is.na ($ adolescentes de edad), ave_age,
adolescentes edad $)

Los resultados (resumen) muestran que los valores que faltan ahora han sido eliminados:
> resumen ($ adolescentes de edad)
Min. primeroQu.MedianMean
tercero Qu. Max.
13.0316.2817.2417.2418.21
20.00

Con los datos listos para su análisis, estamos listos para sumergirse en la parte
interesante de este proyecto. Vamos a ver si nuestros esfuerzos han dado sus frutos.

Paso 3 - la formación de un modelo sobre los


datos
Para agrupar los adolescentes en segmentos de marketing, vamos a utilizar una
implementación de k-medias en el paquete de estadísticas, que deben ser incluidos
en la instalación de R por defecto. Si por casualidad usted no tiene este paquete,
puede instalarlo como lo haría con cualquier otro paquete y cargarlo con el
comando de la biblioteca (estadísticas). Aunque no hay escasez de funciones
KMeans disponibles en varios paquetes R, el kmeans () en el paquete de estadísticas
se usa ampliamente y proporciona una implementación de vainilla del algoritmo.

[ 331 ]
Capítulo 9

La función kmeans () requiere una trama de datos que contiene sólo los datos
numéricos y un parámetro que especifica el número deseado de clusters. Si usted
tiene estas dos cosas listas, el proceso real de la construcción del modelo es simple. El
problema es que la elección de la combinación adecuada de los datos y clusters
puede ser un poco de un arte; a veces una gran cantidad de ensayo y error está
involucrado.
Vamos a empezar nuestro análisis de conglomerados considerando sólo las 36
características que representan el número de veces que diversos intereses
aparecieron en los perfiles del SNS adolescentes. Para mayor comodidad, vamos
a hacer una trama de datos que contiene sólo estas características:
> intereses <- [5:40] adolescentes

Si usted recuerda en el capítulo 3, Lazy Learning - Clasificación a partir de los


vecinos más cercanos, una práctica común empleada antes de cualquier análisis
utilizando los cálculos de distancia es normalizar o puntuación z estandarizar las
características para que cada uno utiliza el mismo rango. Al hacerlo, puede evitar un
problema en el que algunas de las características llegan a dominar mero hecho de
tener un mayor rango de valores que los demás.
El proceso de normalización de puntuación z rescales características para que tengan
una media de cero y una desviación estándar de uno. Esta transformación cambia la
interpretación de los datos de una manera que puede ser útil aquí. En concreto, si
alguien menciona el fútbol tres veces en su perfil, sin información adicional, no
tenemos ni idea de si esto implica que les gusta el fútbol más o menos que sus pares.
Por otro lado, si la puntuación z es de tres, sabemos que el fútbol que se mencionan
muchas veces más que el adolescente promedio.
Para aplicar la estandarización puntuación z en el bastidor intereses de datos, podemos
utilizar el
escala() función con lapply () como sigue:

> interests_z <- as.data.frame (lapply (intereses, escala))

Ya que lapply () devuelve una matriz, debe ser forzado de nuevo a forma
trama de datos usando el as.data.frame () función.

Nuestra última decisión implica decidir el número de grupos que se utilizará para
segmentar
los datos. Si utilizamos demasiados grupos, podemos encontrarlos demasiado
específicas para ser útiles; Por el contrario, la elección de muy pocos puede resultar
en grupos heterogéneos. Usted debe sentirse cómodo experimentando con los
valores de k. Si no te gusta el resultado, se puede tratar fácilmente otro valor y
empezar de nuevo.

[ 332 ]
La elección del número de grupos es más fácil si usted está
familiarizado con la población de análisis. Tener un
presentimiento sobre el verdadero número de agrupaciones
naturales le puede ahorrar algo de ensayo y error.

[ 333 ]
Encontrar grupos de datos - La agrupación con k-medias

Para ayudar a predecir el número de clusters en los datos, voy a aplazar a una de mis
películas favoritas, el club del desayuno, una comedia de mayoría de edad, que
publicó en 1985 y dirigida por John Hughes. Los personajes adolescentes en esta
película se identifican en términos de cinco estereotipos: un cerebro, un atleta, un
caso perdido, una princesa, y un criminal. Dado que estas identidades prevalecen a
lo largo populares ficción para adolescentes, cinco parece como un punto de partida
razonable para k.
Para utilizar el algoritmo K-medias para dividir los datos de interés de los
adolescentes en cinco grupos, utilizamos la función () kmeans en la trama de datos
intereses. Debido a que el algoritmo de k-medias utiliza puntos de partida al azar, la
función set.seed () se utiliza para asegurar que los resultados corresponden a la
salida en los ejemplos que siguen. Si recuerda
los capítulos anteriores, este comando inicializa generador de números aleatorios de
R a una secuencia específica. En ausencia de esta declaración, los resultados pueden
variar cada vez que se ejecuta el algoritmo de k-medias:
> set.seed (2345)
> teen_clusters <- kmeans (interests_z, 5)

El resultado del proceso de agrupamiento k-medias es una lista llamada


teen_clusters que almacena las propiedades de cada uno de los cinco grupos.
Vamos a profundizar y ver lo bien que el algoritmo ha dividido a los datos de
interés de los adolescentes.

Si usted encuentra que sus resultados difieren de los que


se muestran aquí, asegurar que el (2345) set.seed
comando se ejecuta inmediatamente antes de la función
() kmeans.

Paso 4 - evaluar el rendimiento del modelo


La evaluación de resultados de la agrupación puede ser algo subjetivo. En última
instancia, el éxito o el fracaso del modelo depende de si los grupos son útiles por
su intención
propósito. Como el objetivo de este análisis era identificar grupos de adolescentes
con intereses similares para fines de marketing, mediremos en gran medida nuestro
éxito en términos cualitativos. Para otras aplicaciones de clúster, pueden ser
necesarias medidas más cuantitativas de éxito.
Una de las formas más básicas para evaluar la utilidad de un conjunto de clusters
es examinar el número de ejemplos que caen en cada uno de los grupos. Si los
grupos son demasiado grandes o demasiado pequeños, no es probable que sean
muy útiles. Para obtener el tamaño de los kmeans () racimos, utilice el
[ 334 ]
componente de tamaño $ teen_clusters de la siguiente manera:
> teen_clusters tamaño $
[1] 87160059811034 21514

[ 335 ]
Capítulo 9

Aquí, vemos los cinco grupos que habíamos solicitado. El grupo más pequeño
tiene 600 adolescentes (2 por ciento), aunque el grupo más grande tiene 21.514 (72
por ciento). A pesar de la gran diferencia entre el número de personas en los
grupos de mayor y menor es poco preocupante, sin examinar estos grupos con
más cuidado, no vamos a saber si esto indica un problema. Puede ser el caso que
la disparidad de tamaño de los grupos indica algo real, como un gran grupo de
adolescentes que comparten intereses similares, o puede ser una casualidad al
azar causada por la inicial de k-medias centros de los conglomerados. Sabremos
más a medida que comenzamos a mirar a la homogeneidad de cada grupo.

A veces, k-medias pueden encontrar extremadamente pequeños


racimos-en ocasiones, tan pequeño como un solo punto. Esto puede
suceder si uno de los centros de conglomerados iniciales pasa a caer
en una de las demás lejos del resto de los datos.
No siempre está claro si se debe tratar este tipo de pequeños grupos
como un verdadero hallazgo que representa un grupo de casos
extremos, o un problema causado por el azar. Si se produce este
problema, puede valer la pena volver a ejecutar el algoritmo de k-
medias con una semilla aleatoria diferente para ver si el pequeño
grupo es robusto a diferentes puntos de partida.

Para un análisis más a fondo de los racimos, podemos examinar las


coordenadas de los centroides de grupo utilizando el componente centros de $
teen_clusters, que es de la siguiente manera para los cuatro primeros intereses:
> teen_clusters centros de $
baloncesto fútbol fútbol sofbol
1 0.16001227 0.2364174 0.10385512 0.07232021
2 -0.09195886 0.0652625 -0.09932124 -0.01739428
3 0.52755083 0.4873480 0.29778605 0.37178877
4 0.34081039 0.3593965 0.12722250 0.16384661
5 -0.16695523 -0.1641499 -0.09033520 -0.11367669

Las filas de la salida (con la etiqueta 1 a 5) se refieren a los cinco grupos, mientras
que los números a través de cada fila indican el valor medio de la agrupación por el
interés que aparece en la parte superior de la columna. Como los valores son
puntuación z estandarizada, los valores positivos se encuentran por encima del
nivel medio global para todos los adolescentes y los valores negativos están debajo
de la media global. Por ejemplo, la tercera fila tiene el valor más alto en la columna
de la pelota de baloncesto, lo que significa que el grupo 3 tiene el interés promedio
más alto en el baloncesto entre todos
los clusters.

[ 336 ]
Encontrar grupos de datos - La agrupación con k-medias

Examinando si los racimos caen por encima o por debajo del nivel medio para cada
categoría de interés, podemos empezar a notar patrones que distinguen a los
grupos entre sí. En la práctica, esto implica la impresión de los centros de los
conglomerados y buscar a través de ellos para cualquier patrón o valores extremos,
como una sopa de letras, pero con los números. La siguiente captura de pantalla
muestra un patrón resaltado para cada uno de los cinco grupos, para 19 de los 36
intereses adolescentes:

Teniendo en cuenta este subconjunto de los datos de interés, ya podemos inferir


algunas características de los racimos. Grupo 3 es sustancialmente por encima del
nivel de interés media en todos los deportes. Esto sugiere que esto puede ser un
grupo de atletas por el club del desayuno estereotipo. El grupo 1 incluye los más
menciones de "porristas", la palabra "caliente", y está por encima del nivel medio de
interés de fútbol. Son estos los llamados princesas?
Al continuar para examinar los racimos de esta manera, es posible construir una
tabla con los intereses dominantes de cada uno de los grupos. En la siguiente tabla,
cada grupo se muestra con las características que lo distinguen de la mayoría de los
otros grupos, así como la identidad club de los cinco que capta con mayor precisión
las características del grupo.

[ 337 ]
Capítulo 9

Curiosamente, Cluster 5 se distingue por el hecho de que no es excepcional; sus


miembros tenían niveles más bajos de lo promedio de interés en cada actividad
medida. También es el grupo más grande en términos del número de miembros.
Una posible explicación es que estos usuarios crean un perfil en el sitio web, pero
nunca publican sus intereses.

Al compartir los resultados de un análisis de segmentación, a menudo


es útil para aplicar etiquetas informativas que simplifican y capturan
la esencia de los grupos como El club de la tipología se aplica aquí. El
riesgo en la adición de tales etiquetas es que pueden oscurecer matices
de los grupos por estereotipos los miembros del grupo. Como tales
etiquetas pueden sesgo de nuestro pensamiento, patrones importantes
se pueden perder si las etiquetas se toman como toda la verdad.

Dada la mesa, un ejecutivo de marketing tendría una clara representación de


cinco tipos de visitantes adolescentes con el sitio web de redes sociales. Sobre la
base de estos perfiles, el ejecutivo podría vender impresiones de publicidad
dirigida a empresas con productos relacionados con uno o más de los racimos.
En la siguiente sección, vamos a ver cómo las etiquetas de racimo se pueden
aplicar de nuevo a la población original para tales usos.

[ 338 ]
Encontrar grupos de datos - La agrupación con k-medias

Paso 5 - mejorar el rendimiento del modelo


Debido a que la agrupación crea nueva información, el rendimiento de un algoritmo
de agrupamiento depende al menos algo sobre la calidad de los racimos a sí mismos,
así como lo que se hace con esa información. En la sección anterior, que ya se ha
demostrado que los cinco grupos proporcionó información útil y novedosos en los
intereses de los adolescentes. En esa medida, el algoritmo parece estar funcionando
bastante bien. Por lo tanto, ahora podemos centrar nuestro esfuerzo en convertir
estas ideas en acción.
Vamos a empezar por la aplicación de los racimos de nuevo en el conjunto de datos
completo. Los teen_clusters objeto creado por los kmeans () función incluye un
clúster denominado componente que contiene las asignaciones de racimo para todas
las 30.000 individuos de la muestra. Podemos añadir esto como una columna en el
marco de los adolescentes de datos con el siguiente comando:
> adolescentes racimo $ <$ - teen_clusters racimo

Teniendo en cuenta estos nuevos datos, podemos empezar a examinar la forma en


la asignación de grupo se refiere a las características individuales. Por ejemplo,
aquí está la información personal para los primeros cinco adolescentes en los datos
SNS:
> adolescentes [1: 5, c ( "cluster", "género", "edad", "amigos")]
racimo género años amigos
15 METRO 18.982 7
23 F 18.801 0
35 METRO 18.335 69
45 F 18.875 0
54 <NA> 18.995 10

Usando la función de agregado (), también podemos observar las características


demográficas de los racimos. La edad media no varía mucho por clúster, que no es
demasiado sorprendente, ya que estas identidades adolescentes se determinan a
menudo antes de la secundaria. Esto se representa como sigue:
> agregada (datos = adolescentes, edad ~ clúster, media)
racimo años
11 16.86497
22 17.39037
33 17.07656
44 17.11957
55 17.29849

[ 339 ]
Capítulo 9

Por otro lado, hay algunas diferencias sustanciales en la proporción de


hembras por grupo. Este es un hallazgo muy interesante ya que no
utilizamos los datos de género para crear los grupos, sin embargo, los
racimos son todavía predictivo de género:
> agregados (= datos adolescentes, ~ agrupación femenina, media)
racimo hembra
11 0.8381171
22 0.7250000
33 0.8378198
44 0.8027079
55 0.6994515

Recordemos que, en general alrededor del 74 por ciento de los usuarios del SNS son
mujeres. Cluster 1, la
llamada Princesses, es casi 84 por ciento de mujeres, mientras que el Grupo 2 y
Grupo 5 son sólo alrededor del 70 por ciento de mujeres. Estas disparidades
implican que hay diferencias en los intereses que los niños y niñas adolescentes
discuten en sus páginas de redes sociales.
Dado nuestro éxito en la predicción de género, es posible que también sospecha
que los grupos son predictivos de la cantidad de amigos que los usuarios
tienen. Esta hipótesis parece estar apoyada por los datos, lo cual es de la
siguiente manera:
> agregados (datos = adolescentes, amigos ~ clúster, media)
racimo amigos
11 41.43054
22 32.57333
33 37.16185
44 30.50290
55 27.70052

En promedio, las princesas tienen la mayoría de los amigos (41,4), seguido de


Atletas (37.2) y (32.6) Los cerebros. En el extremo inferior son delincuentes (30.5) y
la cesta casos (27,7). Al igual que con el género, la relación entre el número de un
adolescente de amigos y de su grupo predicho es notable, ya que no usamos los
datos de la amistad como una entrada
el algoritmo de agrupamiento. También es interesante el hecho de que el
número de amigos parece estar relacionada con el estereotipo de la popularidad
de la escuela secundaria cada clusters; Típico de los grupos populares tienden a
tener más amigos.

[ 340 ]
La asociación entre los miembros del grupo, el género y el número de amigos que
sugiere que los grupos pueden ser útiles para predecir el comportamiento. La
validación de su capacidad predictiva de esta manera puede hacer que los cúmulos
más fácil de vender cuando son lanzadas al equipo de marketing, en última
instancia, mejorar el rendimiento del algoritmo.

[ 341 ]
Encontrar grupos de datos - La agrupación con k-medias

Resumen
Nuestros hallazgos apoyan el dicho popular de que "las aves del mismo
plumaje vuelan juntos". Mediante el uso de métodos de aprendizaje automático
a agruparse adolescentes con otros que tienen intereses similares, hemos sido
capaces de desarrollar una tipología de las identidades adolescentes que fue
predictivo de las características personales, tales como el género y el número de
amigos. Estos mismos métodos pueden aplicarse a otros contextos con
resultados similares.
Este capítulo cubre sólo los fundamentos de la agrupación. Como método de
aprendizaje de máquina muy maduro, hay muchas variantes del algoritmo k-
medias, así como muchos otros algoritmos de agrupamiento que traen los sesgos y
heurísticos únicas para la tarea. Sobre la base de la fundación en este capítulo, usted
será capaz de entender y aplicar otros métodos de agrupación a nuevos problemas.
En el siguiente capítulo, vamos a empezar a buscar métodos para medir el éxito de
un algoritmo de aprendizaje, que son aplicables en muchas tareas de aprendizaje
automático. Si bien nuestro proceso siempre se ha dedicado algunos esfuerzos para
evaluar el éxito de aprendizaje, con el fin de obtener el más alto grado de
rendimiento, es crucial estar
capaz de definir y medir en los términos más estrictos.

[ 342 ]
La evaluación de Modelo
Actuación
Cuando sólo los ricos podían permitirse el lujo de educación, pruebas y exámenes
no evaluar el potencial de los estudiantes. En su lugar, los maestros fueron
juzgados por los padres que querían saber si sus hijos habían aprendido lo
suficiente como para justificar los salarios de los instructores. Obviamente, esto
ha cambiado con los años. Ahora, estas evaluaciones se utilizan para distinguir
entre los alumnos de alto y de bajo rendimiento, filtrarlas a las carreras y otras
oportunidades.
Dada la importancia de este proceso, una gran cantidad de esfuerzo se invierte en el
desarrollo de evaluaciones de los estudiantes precisos. evaluaciones justas tienen un
gran número de preguntas que cubren una gran amplitud de temas y recompensan
el verdadero conocimiento sobre conjeturas afortunadas. También requieren los
estudiantes para pensar acerca de los problemas que nunca se han enfrentado antes.
Por lo tanto, las respuestas correctas indican que los estudiantes pueden
generalizar su conocimiento de manera más amplia.
El proceso de evaluación de algoritmos de aprendizaje automático es muy similar al
proceso de evaluación de los estudiantes. Ya que los algoritmos tienen diferentes
fortalezas y debilidades, las pruebas deben distinguir entre los alumnos. También es
importante para predecir cómo un alumno llevará a cabo en los datos futuros.
En este capítulo se proporciona la información necesaria para evaluar los alumnos de la
máquina, tales como:

• Las razones por la exactitud de predicción no es suficiente para


medir el desempeño y las medidas de rendimiento que podrían
usar en su lugar
• Los métodos para asegurar que las medidas de rendimiento reflejan
razonablemente la capacidad del modelo para predecir o pronosticar
[ 343 ]
los casos que no se ven
• Cómo utilizar R para aplicar estas medidas y los métodos más útiles
para los modelos predictivos tratados en los capítulos anteriores

[ 344 ]
Evaluación del desempeño del modelo

Del mismo modo que la mejor manera de aprender un tema es tratar de enseñar a
otra persona, el proceso de la enseñanza y la evaluación de los alumnos de la
máquina le proporcionará una mayor comprensión de los métodos que ha
aprendido hasta ahora.

La medición del rendimiento para la


clasificación
En los capítulos anteriores, se midió la precisión clasificador dividiendo la
proporción de predicciones correctas por el número total de predicciones. Esto
indica el porcentaje de casos en los que el alumno es correcta o incorrecta. Por
ejemplo, supongamos que por 99.990 de cada 100.000 recién nacidos un clasificador
predijo correctamente si eran portadores de un defecto genético tratable pero
potencialmente fatal. Esto implicaría una precisión de 99,99 por ciento y una tasa de
error de sólo 0,01 por ciento.
A primera vista, esto parece ser un clasificador extremadamente precisa. Sin
embargo, sería conveniente recopilar información adicional antes de confiar en la
vida de su hijo para la prueba. ¿Qué pasa si el defecto genético se encuentra en sólo
10 de cada 100.000 bebés? Una prueba que predice ningún defecto,
independientemente de las circunstancias será correcto para el 99,99 por ciento de
todos los casos, pero incorrecta para el 100 por ciento de los casos que más importan.
En otras palabras, aunque las predicciones son extremadamente precisos, el
clasificador no es muy útil para prevenir defectos de nacimiento tratables.

Esta es una consecuencia del problema desequilibrio


clase, que se refiere a los problemas asociados con los
datos que tiene una gran mayoría de los registros que
pertenecen a una única clase.

Aunque hay muchas maneras de medir el rendimiento de un clasificador, la mejor


medida es siempre el que capta si el clasificador tiene éxito en su propósito previsto.
Es crucial para definir las medidas de rendimiento para servicios públicos en lugar
de exactitud en bruto. Con este fin, vamos a comenzar a explorar una variedad de
medidas de rendimiento alternativos derivados de la matriz de confusión. Antes de
empezar, sin embargo, tenemos que considerar cómo preparar un clasificador para
su evaluación.

[ 345 ]
Capítulo 10

Trabajar con la predicción de clasificación


datos en R
El objetivo de la evaluación de un modelo de clasificación es tener una mejor
comprensión de cómo su rendimiento va a extrapolar a casos futuros. Ya que
suele ser inviable para probar un modelo que aún no probada en un entorno real,
por lo general simular las condiciones futuras de pedir el modelo para clasificar
un conjunto de datos hecha de los casos que se asemejan a lo que se le pedirá que
hacer en el futuro. Mediante la observación de las respuestas del alumno a este
examen, podemos aprender acerca de sus fortalezas y debilidades.

Aunque hemos evaluado clasificadores en los capítulos anteriores, vale la pena


reflexionar sobre la
tipos de datos de los que disponemos:
• Los valores reales de clase
• los valores de clase predichos
• probabilidad estimada de la predicción

Los valores reales y predichos clase puede ser evidente por sí mismo, sino que son
la clave para la evaluación. Al igual que un profesor utiliza una clave de respuestas
para evaluar las respuestas del estudiante, lo que necesitamos saber la respuesta
correcta para las predicciones del aprendiz máquina. El objetivo es mantener dos
vectores: uno de los datos que sostienen los valores de la clase correctas o reales, y la
otra la celebración de los valores de la clase predichos. Ambos vectores deben tener
el mismo número de valores almacenados en el mismo orden. El predichos y los
valores reales se pueden almacenar como vectores o columnas de I separados en un
único marco de datos R.
La obtención de estos datos es fácil. Los valores de clase reales vienen directamente
de la función objetivo en el conjunto de datos de prueba. los valores de clase
predichas se obtienen a partir del clasificador construido sobre los datos de
entrenamiento, y se aplican a los datos de prueba. Para la mayoría de aprendizaje
automático
paquetes, esto implica la aplicación de la predecir() función a un objeto de modelo
y una trama de datos de los datos de prueba, tales como: predicted_outcome <-
predecir (modelo, test_data).

[ 346 ]
Evaluación del desempeño del modelo

Hasta ahora, sólo hemos examinado las predicciones de clasificación que utilizan
estos dos vectores de datos. Sin embargo, la mayoría de los modelos se pueden
suministrar otra pieza de información útil. A pesar de que el clasificador hace una
única predicción sobre cada ejemplo, puede ser más seguro de algunas decisiones
que otros. Por ejemplo, un clasificador puede ser un 99 por ciento seguro de que
un SMS con las palabras "libre" y "tonos" es spam, pero es sólo el 51 por ciento
seguro de que un SMS con la palabra "noche" es spam. En ambos casos, el
clasificador clasifica el mensaje como correo no deseado, pero es mucho más
seguro acerca de una decisión que el otro.

El estudio de estas probabilidades de predicción interno proporciona datos útiles


para evaluar el desempeño de un modelo. Si dos modelos hacen el mismo número
de errores, pero una es más capaz de evaluar con precisión su incertidumbre,
entonces es un modelo más inteligente. Es ideal para fid un aprendiz que es muy
seguro al hacer una predicción correcta, pero tímido en la cara de duda. El equilibrio
entre la confianza y la precaución es una parte clave de la evaluación del modelo.
Desafortunadamente, la obtención de probabilidades de predicción internos
puede ser complicado debido a que el método para hacerlo varía a través de
clasificadores. En general, para la mayoría de los clasificadores, el predicen () se
utiliza para especificar el tipo deseado de predicción. Para obtener una sola clase
predicho, tales como correo no deseado o jamón, normalmente se establece el
parámetro de tipo = "clase". Para obtener la probabilidad de predicción, el
parámetro de tipo debe ser
establece en una de "Prob", "posterior", "crudo"o "probabilidad" dependiendo de
clasificador utilizado.
[ 347 ]
Capítulo 10

Casi todos los clasificadores se presentan en este libro


proporcionará probabilidades de predicción. El parámetro tipo
está incluido en el cuadro de la sintaxis de la introducción de
cada modelo.

Por ejemplo, a la salida de las probabilidades predichas para el clasificador C5.0


incorporado en el capítulo 5, divide y vencerás - Clasificación a partir de árboles de
decisión y reglas, utilizan el predecir() función con type = "prob" como sigue:
> predicted_prob <- predecir (credit_model, credit_test, type = "prob")

Para ilustrar aún más el proceso de evaluación de algoritmos de aprendizaje,


vamos a ver más de cerca el rendimiento del modelo de clasificación de spam de
SMS desarrollado en el Capítulo 4, Probabilístico de aprendizaje - Clasificación a
partir de Naive Bayes. Para dar salida a los ingenuos de Bayes predijo
probabilidades, el usopredecir() con type = "cruda" como sigue:
> sms_test_prob <- predecir (sms_classifier, sms_test, type = "cruda")

En la mayoría de los casos, el predicen () devuelve una probabilidad para cada


categoría de los resultados. Por ejemplo, en el caso de un modelo de dos resultado
como el clasificador SMS, las probabilidades predichas pueden ser un marco de
matriz o de datos como se muestra aquí:
> cabeza (sms_test_prob)
jamón correo no
deseado
[1], 9.999995e-01 4.565938e-07
[2], 9.999995e-01 4.540489e-07
[3], 9.998418e-01 1.582360e-04
[4], 9.999578e-01 4.223125e-05
[5], 4.816137e-10 1.000000e +
00
[6,] 9.997970e-01 2.030033e-04

Cada línea de este resultado muestra la probabilidad pronosticada del


clasificador de correo no deseado y jamón, que suma siempre al 1 porque estos
son los dos únicos resultados. Mientras que la construcción de un conjunto de
datos de evaluación, es importante asegurarse de que está utilizando la
probabilidad correcta para el nivel de clase de intereses. Para evitar
confusiones, en el caso de un resultado binario, que incluso podría considerar
abandonar el vector para una de las dos alternativas.
Para mayor comodidad durante el proceso de evaluación, puede ser útil para
construir una trama de datos que contiene los valores de la clase predichos,
[ 348 ]
valores reales de clase, así como las probabilidades estimadas de interés.

[ 349 ]
Evaluación del desempeño del modelo

Los pasos necesarios para construir el conjunto de datos de evaluación


se han omitido por razones de brevedad, pero se incluyen en el código
de este capítulo en la página web Packt Publishing. Para seguir con los
ejemplos aquí, descargue el archivo sms_results.csv, y la carga de una
trama de datos utilizando los sms_results <- read.csv de comandos (
"sms_results.csv").

La trama de datos sms_results es simple. Contiene cuatro vectores de 1.390 valores.


Un vector contiene valores que indican el tipo real de mensaje SMS (spam o jamón),
uno vector indica el tipo predicho del modelo de Bayes ingenuo, y el tercer y cuarto
vectores indican la probabilidad de que el mensaje era spam o jamón,
respectivamente:
> cabeza (sms_results)
predict_type ACTUAL_TYPE prob_spam prob_ham
1hamham 0.00000 1.00000
2hamham 0.00000 1.00000
3hamham 0,00016 0.99984
4hamham 0.00004 0.99996
5spamspam 1.00000 0.00000
6hamham 0,00020 0.99980

Para estos seis casos de prueba, los tipos de mensajes SMS previstos y los reales
están de acuerdo; el modelo predijo correctamente su estado. Por otra parte, las
probabilidades de predicción sugieren que el modelo era muy seguro acerca de estas
predicciones, ya que toda la caída cercana a cero o uno.
Que pasa cuando la predichos y los valores reales son más lejos de cero y uno? Uso
de la función subconjunto (), podemos identificar algunos de estos registros. La
siguiente salida muestra los casos de prueba en el que el modelo estimado la
probabilidad de correo no deseado en algún lugar entre 40 y 60 por ciento:
> cabeza (subconjunto (sms_results, prob_spam> 0,40 y prob_spam <0,60))
ACTUAL_TYPE predict_type prob_spam prob_ham
377 correo no jamón 0.47536 0.52464
deseado
717 jamón correo no 0.56188 0.43812
deseado
1311 jamón correo no 0.57917 0.42083
deseado

Por la propia admisión del modelo, estos fueron casos en los que una predicción
correcta era prácticamente una moneda al aire. Sin embargo, las tres predicciones
eran erróneas-un resultado desafortunado. Veamos unos cuantos casos en que el
[ 350 ]
modelo era incorrecta:
> (subconjunto de cabeza (sms_results, ACTUAL_TYPE! =
predict_type)) ACTUAL_TYPE predict_type prob_spam
prob_ham

[ 351 ]
Capítulo 10

53 correo jamón 0,00071 0.99929


no
deseado
59 correo jamón 0,00156 0.99844
no
deseado
73 correo jamón 0.01708 0.98292
no
deseado
76 correo jamón 0.00851 0.99149
no
deseado
184 correo jamón 0.01243 0.98757
no
deseado
332 correo jamón 0.00003 0.99997
no
deseado

Estos casos ilustran el hecho importante de que un modelo puede ser muy seguros y
sin embargo, pueden ser extremadamente mal. Los seis de estos casos de prueba
eran spam que el clasificador se cree que no tienen una probabilidad de menos del
98 por ciento de ser jamón.

A pesar de tales errores, es útil el modelo todavía? Podemos responder a esta pregunta
mediante la aplicación de diversas métricas de error a los datos de evaluación. De
hecho, muchas de estas métricas se basan en una herramienta que ya hemos usado
ampliamente en los capítulos anteriores.

Una mirada más cercana a matrices de


confusión
Una matriz de confusión es una tabla que categoriza predicciones de acuerdo a si
coinciden con el valor real. Una de las dimensiones de la tabla indica las posibles
categorías de valores previstos, mientras que la otra dimensión indica lo mismo
para los valores reales. Aunque sólo hemos visto 2 x 2 matrices confusión hasta el
momento, una matriz puede ser creado para los modelos que predicen cualquier
número de valores de clase. La siguiente figura representa la matriz de confusión
familiar para un modelo binario de dos clases, así como la matriz de confusión 3 x
3 para un modelo de tres clases.
Cuando el valor previsto es el mismo que el valor real, se trata de una clasificación
correcta.
predicciones correctas caen en la diagonal en la matriz de confusión (denotado por O).
Las células de la matriz fuera de la diagonal (denotadas por X) indican los casos en
que el valor predicho difiere del valor real. Estas son las predicciones incorrectas.
[ 352 ]
Las medidas de rendimiento para los modelos de clasificación se basan en los cargos
de predicciones que caen dentro y fuera de la diagonal en estas tablas:

[ 353 ]
Evaluación del desempeño del modelo

Las medidas de rendimiento más comunes consideran la capacidad del modelo para
discernir una clase frente a todos los demás. La clase de interés se conoce como la
clase positiva, mientras que todos los demás son conocidos como negativo.

El uso de los términos positivos y negativos no se pretende


implicar ningún juicio de valor (es decir, el bien contra el mal),
ni necesariamente sugieren que el resultado está presente o
ausente (tales como defectos de nacimiento versus ninguno). La
elección de los resultados positivos, incluso puede ser arbitraria,
como en los casos en que un modelo es la predicción de
categorías tales como soleado frente a la lluvia o un perro frente
gato.

La relación entre la clase positiva y predicciones de clase negativa puede ser


representado como una matriz de 2 x 2 confusión que tabula si las predicciones
caen en una de las cuatro categorías:

• Verdadero positivo (TP): Correctamente clasificados como la clase de interés


• Verdadero negativo (TN): Correctamente clasificados como no a la clase de
interés
• Falso positivo (FP): Incorrectamente clasificados como la clase de interés
• Falso negativo (FN): Incorrectamente clasificados como no a la clase de interés

Para el clasificador de correo no deseado, la clase positiva es correo no


deseado, ya que este es el resultado que esperamos de detectar. Podemos
entonces imaginar la matriz de confusión como se muestra en el siguiente
diagrama:

[ 354 ]
La matriz de confusión, presentado de esta manera, es la base de muchas de
las medidas más importantes del rendimiento del modelo. En la siguiente
sección, vamos a utilizar esta matriz para tener una mejor comprensión de lo
que se quiere decir con exactitud.

[ 355 ]
Capítulo 10

El uso de matrices de confusión para medir el


desempeño
Con la matriz de confusión de 2 x 2, podemos formalizar nuestra definición de la
predicción
exactitud (A veces llamada la tasa de éxito) como:

En esta fórmula, los términos TP, TN, FP y FN se refieren al número de veces que
las predicciones del modelo caían en cada una de estas categorías. Por tanto, la
precisión es una proporción que representa el número de verdaderos positivos y
verdaderos negativos, dividido por el número total de predicciones.

La tasa de error o la proporción de los ejemplos incorrectamente clasificadas se especifica


como:

Tenga en cuenta que la tasa de error se puede calcular como uno menos la
exactitud. Intuitivamente, esto tiene sentido; un modelo que es correcto 95 por
ciento del tiempo es incorrecta 5 por ciento del tiempo.
Una manera fácil de tabular las predicciones de un clasificador en una matriz de
confusión es utilizar la función de R mesa (). El comando para crear una matriz de
confusión para los datos de SMS se muestra como sigue. Los recuentos de esta tabla
a continuación podrían ser utilizados para el cálculo de precisión y otras
estadísticas:
> mesa (sms_results $ ACTUAL_TYPE, sms_results $ predict_type)

correo
no deseado
jamón ham1203
4
spam31 152

Si te gusta para crear una matriz de confusión con una salida más informativo, el
Cuadro cruzado () función en el gmodels paquete ofrece una solución
personalizable. Si recuerdan, se utilizó por primera vez esta función en el

[ 356 ]
Capítulo 2, Gestión y Comprensión
Datos. Si no ha instalado el paquete en ese momento, tendrá que hacerlo a través de la
install.packages ( "gmodels") mando.

[ 357 ]
Evaluación del desempeño del modelo

Por defecto, la salida cruzado () incluye proporciones en cada célula que indican el
número de células como porcentaje de la fila de tabla, columna o recuentos totales
generales. La salida también incluye de fila y columna de totales. Como se muestra
en el siguiente código, la sintaxis es similar a la función de tabla ():
> biblioteca (gmodels)
> Cuadro cruzado (sms_results $ ACTUAL_TYPE, sms_results $ predict_type)

El resultado es una matriz de confusión con una riqueza de detalles adicionales:

Hemos utilizado cruzado () en varios de los capítulos anteriores, por lo que ahora
usted debe estar familiarizado con la salida. Si alguna vez olvida cómo interpretar la
salida, simplemente se refieren a la clave (etiquetados del contenido de celdas), que
proporciona la definición de cada número en las celdas de la tabla.

[ 358 ]
Capítulo 10

Podemos utilizar la matriz de confusión para obtener la tasa de precisión y


error. Ya que la precisión es (TP + TN) / (TP + FP + VN + FN), podemos
calcular que usando los siguientes comandos:
> (152 + 1203) / (152 + 1203 + 4 + 31)
[1] 0.9748201

También podemos calcular la tasa de error (FP + FN) / (TP + FP + VN + FN) como:
> (4 + 31) / (152 + 1203 + 4 + 31)
[1] 0.02517986

Esto es lo mismo que uno menos precisión:


> 1 - 0,9748201
[1] 0.0251799

Aunque estos cálculos pueden parecer simples, es importante para la práctica de


pensar en cómo los componentes de la matriz de confusión se relacionan entre sí.
En la siguiente sección, se verá cómo estas mismas piezas se pueden combinar de
diferentes maneras para crear una variedad de medidas de rendimiento adicionales.

Más allá de la precisión - otras


medidas de rendimiento
Un sinnúmero de medidas de rendimiento han sido desarrollados y utilizados con
fines específicos en disciplinas tan diversas como la medicina, la recuperación de
información, la comercialización, y la teoría de detección de señales, entre otros.
Cubriendo todos ellos podría llenar cientos de páginas y hace una descripción
completa aquí inviable. En su lugar, vamos a considerar solamente algunas de las
medidas más útiles y comúnmente citados en la literatura de aprendizaje
automático.
El paquete de intercalación de clasificación y regresión de formación por Max Kuhn
incluye funciones para calcular muchas de estas medidas de rendimiento. Este
paquete proporciona un gran número de herramientas para preparar, capacitar,
evaluar y visualizar modelos de aprendizaje automático y datos. Además de su uso
aquí, también vamos a emplear cursor ampliamente en el capítulo 11, Mejora del
rendimiento del modelo. Antes de continuar, tendrá que instalar el paquete con el
comando install.packages ( "intercalación").

Para obtener más información sobre la intercalación, consulte:


modelos predictivos Kuhn M. construcción en I utilizando el
paquete de intercalación. Journal of Statistical Software. 2008; 28.

[ 359 ]
Evaluación del desempeño del modelo

El paquete de intercalación añade una nueva función para crear una matriz de
confusión. Como se muestra en el siguiente comando, la sintaxis es similar a la tabla
(), pero con una diferencia menor. Debido símbolo de intercalación proporciona
medidas de desempeño de los modelos que tienen en cuenta la capacidad de
clasificar la clase positiva, un parámetro positivo debe ser especificado. En este caso,
ya que el clasificador de SMS está destinado a detectar el spam, estableceremos
positivo = "correo no deseado" de la siguiente manera:
> biblioteca (caret)
> Matriz de confusión (sms_results $
predict_type, sms_results $ ACTUAL_TYPE,
positivo = "spam")

Esto resulta en la salida siguiente:

En la parte superior de la salida es una matriz de confusión al igual que la


producida por la función de tabla (), pero transpuesto. La salida también incluye
un conjunto de medidas de rendimiento. Algunos de éstos, como la precisión,
son familiares, mientras que muchos otros son nuevos. Vamos a echar un
vistazo a algunas de las métricas más importantes.

[ 360 ]
Capítulo 10

La estadística kappa
La estadística kappa (con la etiqueta Kappa en la salida anterior) ajusta la precisión
al tomar en cuenta la posibilidad de una predicción correcta por pura casualidad.
Esto es especialmente importante para los conjuntos de datos con un desequilibrio
grave de clase, debido a que un clasificador puede obtener una alta precisión
simplemente siempre adivinando la clase más frecuente. La estadística kappa sólo se
recompensa el clasificador si es correcto más a menudo que esta estrategia simplista.
Kappa valores van de 0 a un máximo de 1, lo que indica un acuerdo perfecto entre
las predicciones del modelo y los valores verdaderos. Los valores inferiores a uno
indican acuerdo imperfecto. Dependiendo de cómo un modelo se va a utilizar, la
interpretación de la estadística kappa podría variar. Una interpretación común se
muestra como sigue:
• Pobre acuerdo = menos de 0,20
• acuerdo justo = 0,20 a 0,40
• moderada acuerdo = 0,40-0,60
• Buen acuerdo = 0,60 a 0,80
• Muy buen acuerdo = 0.80 a 1.00

Es importante señalar que estas categorías son subjetivos. Mientras que un "buen
acuerdo" puede ser más que suficiente para predecir sabor de helado favorito de
alguien "muy buen acuerdo" no puede ser suficiente si su objetivo es identificar los
defectos de nacimiento.

Para obtener más información sobre la escala anterior, consulte:


Landis JR, Koch GG. La medición de acuerdo entre observadores
para los datos categóricos.
biometría. 1997; 33: 159-174.

La siguiente es la fórmula para calcular la estadística de kappa. En esta fórmula,


Pr (a) se refiere a la proporción del acuerdo real y Pr (e) se refiere al acuerdo
esperada entre el clasificador y los valores verdaderos, bajo la suposición de que
fueron escogidos al azar:

Hay más de una manera de definir la estadística kappa. El


método más común descrito aquí utiliza coeficiente kappa de
Cohen, como se describe en el documento: Cohen J. un coeficiente
de acuerdo para escalas nominales. La educación y la medición
[ 361 ]
psicológica. 1960; 20: 37-46.

[ 362 ]
Evaluación del desempeño del modelo

Estas proporciones son fáciles de obtener a partir de una matriz de confusión una
vez que sabe dónde buscar. Vamos a considerar la matriz de confusión para el
modelo de clasificación de SMS creado con la función cruzado (), que se repite aquí
por conveniencia:

Recuerde que el valor inferior en cada celda indica la proporción de todos los casos
que caen en esa célula. Por lo tanto, para calcular la concordancia observada Pr (a),
sólo tenemos que añadir la proporción de todos los casos en los que el tipo predicho
y el tipo SMS real de acuerdo. Por lo tanto, podemos calcular Pr (a) como:
> Pr_a <- 0,865 + 0,109
> pr_a
[1] 0,974

Para este clasificador, los valores observados y reales están de acuerdo en 97,4
por ciento del tiempo- se dará cuenta de que esta es la misma que la precisión. La
estadística kappa ajusta la precisión relativa al acuerdo esperado Pr (e), que es la
probabilidad de que el azar solo llevaría a los valores previstos y reales para que
coincida, bajo la
suposición de que ambos se seleccionan al azar de acuerdo con las proporciones
observadas.
Para encontrar estas proporciones observadas, podemos utilizar las reglas de
probabilidad que aprendimos
en el capítulo 4, Probabilístico de aprendizaje - Clasificación a partir de Naive Bayes.
Suponiendo dos eventos son independientes (lo que significa que una no afecta a la
otra), las reglas de probabilidad en cuenta que la probabilidad de que se produzca
tanto es igual al producto de las probabilidades de cada uno que se produzcan. Por
[ 363 ]
ejemplo, sabemos que la probabilidad de elegir tanto el jamón es:
Pr (tipo real es el jamón) * Pr (tipo predicho es el jamón)

[ 364 ]
Capítulo 10

La probabilidad de elegir tanto el spam es:

Pr (tipo real es spam) * Pr (tipo predicho es spam)


La probabilidad de que el tipo predicho o real es spam o jamón se puede
obtener de la fila o columna de totales. Por ejemplo, Pr (tipo real es jamón) =
0,868 y Pr (tipo predicho es jamón) = 0,888.
Pre) se calcula como la suma de las probabilidades de que por casualidad los
valores predichos y reales están de acuerdo que el mensaje es spam o jamón.
Recordemos que para eventos mutuamente excluyentes (eventos que no puede
suceder de forma simultánea), la probabilidad de cualquiera ocurra es igual a la
suma de sus probabilidades. Por lo tanto, para obtener el Pr final (e), que sólo tiene
que añadir tanto los productos, como se muestra en los siguientes comandos:
> Pr_e <- 0,868 * 0,888 + 0,132 * 0,112
> pre
[1] 0.785568

Desde Pr (e) es 0,786, por pura casualidad, esperaríamos que los valores observados
y los reales se pongan de acuerdo sobre el 78,6 por ciento del tiempo.

Esto significa que ahora tenemos toda la información necesaria para completar
la fórmula kappa. Enchufar el Pr (a) y Pr (e) valores en la fórmula kappa,
encontramos:
> K <- (pr_a - pr_e) / (1 - pr_e)
> k
[1] 0.8787494

El kappa es de aproximadamente 0,88, lo cual concuerda con la salida Matriz de


confusión anterior () de intercalación (la pequeña diferencia se debe al
redondeo). El uso de la interpretación sugerida, observamos que hay muy buena
concordancia entre las predicciones del clasificador y los valores reales.
Hay un par de funciones de R para calcular kappa automáticamente. La función de
Kappa () (asegúrese de anotar la capital 'K') en el paquete Visualización de datos
categóricos (VCD) utiliza una matriz de confusión de los valores previstos y reales.
Después de instalar el paquete escribiendo install.packages ( "VCD"), los comandos
siguientes se pueden utilizar para obtener kappa:
> biblioteca (VCD)
> Kappa (tabla (sms_results $ ACTUAL_TYPE, sms_results $
predict_type)) valueASE
Sin ponderar 0.8825203 0.01949315

[ 365 ]
Weighted0.8825203 0.01949315

[ 366 ]
Evaluación del desempeño del modelo

Estamos interesados en el kappa ponderado. El valor 0,88 coincide con lo que


esperábamos.

El kappa ponderado se utiliza cuando hay varios grados de


acuerdo. Por ejemplo, usando una escala de frío, fresco, caliente, y
caliente, un valor de calentamiento de acuerdo con la más caliente
que lo hace con el valor de frío. En el caso de un evento de dos
resultados, tales como correo no deseado y el jamón, las estadísticas
kappa ponderadas y no ponderadas serán idénticos.

La función kappa2 () en el paquete entre los calificadores fiabilidad (TIR) se puede


utilizar para calcular kappa partir de los vectores de los valores predichos y reales
almacenados en una trama de datos. Después de instalar el paquete utilizando los
install.packages ( "TIR") de comandos, los comandos siguientes se pueden utilizar
para obtener kappa:
> kappa2 (sms_results [1: 2])
Kappa de Cohen para 2 evaluadores (Pesos: sin ponderar)

Asignatu = 1390
ras
evaluado = 2
res
Kappa = 0,883

z = 33
p-valor = 0

Las funciones de Kappa () y kappa2 () reportan la misma estadística kappa,


a fin de utilizar la opción que usted es más cómodo.

Tenga cuidado de no utilizar la función incorporada kappa ().


Es completamente no relacionado con la estadística kappa se
informó anteriormente!

Sensibilidad y especificidad
Encontrar un clasificador útil a menudo implica un equilibrio entre las predicciones
que son demasiado conservador y demasiado agresivo. Por ejemplo, un filtro de
correo electrónico podría garantizar para eliminar todos los mensajes de correo no
deseado mediante la eliminación de casi todos los agresiva mensaje de jamón al
mismo tiempo. Por otro lado, lo que garantiza que ningún mensaje de jamón se
filtra inadvertidamente podría exigirnos para permitir que una cantidad
[ 367 ]
inaceptable de correo no deseado para pasar a través del filtro. Un par de medidas
de rendimiento de captura esta disyuntiva: sensibilidad y especificidad.

[ 368 ]
Capítulo 10

La sensibilidad de un modelo (también llamada la verdadera tasa positiva) mide la


proporción de ejemplos positivos que fueron clasificados correctamente. Por lo
tanto, como se muestra en la siguiente fórmula, se calcula como el número de
verdaderos positivos dividido por el número total de positivos, ambos clasificados
correctamente (los verdaderos positivos) así clasificado como incorrectamente (los
falsos negativos):

La especificidad de un modelo (también llamada la verdadera tasa negativa) mide la


proporción de ejemplos negativos que fueron clasificados correctamente. Al igual
que con la sensibilidad, esto se calcula como el número de verdaderos negativos,
dividido por el número total de puntos negativos: los verdaderos negativos, además
de los falsos positivos:

Dada la matriz de confusión para el clasificador de SMS, podemos calcular


fácilmente estas medidas con la mano. Suponiendo que el spam es la clase positiva,
podemos confirmar que los números de salida Matriz de confusión () son correctas.
Por ejemplo, el cálculo de sensibilidad es:
> Sens <- 152 / (152 + 31)
> sens
[1] 0.8306011

Del mismo modo, para la especificidad podemos calcular:


> Spec <- 1.203 / (1.203 + 4)
> especulación
[1] 0.996686

El paquete de intercalación proporciona funciones para calcular la sensibilidad y


especificidad directamente de los vectores de los valores predichos y los reales.
Tenga cuidado de que especifica el parámetro positivo o negativo apropiadamente,
como se muestra en las siguientes líneas:
> biblioteca (caret)
> sensibilidad (sms_results $ predict_type, sms_results $
ACTUAL_TYPE, positivo = "spam")

[ 369 ]
Evaluación del desempeño del modelo

[1] 0.8306011

> especificidad (sms_results $ predict_type, sms_results $


ACTUAL_TYPE, negativo = "jamón")
[1] 0.996686

La sensibilidad y la especificidad rango de 0 a 1, con valores cercanos a 1 siendo


más deseable. Por supuesto, es importante encontrar un equilibrio adecuado
entre los dos, una tarea que a menudo es bastante contexto.

Por ejemplo, en este caso, la sensibilidad de 0,831 implica que el 83,1 por ciento de
los mensajes de spam se clasificaron correctamente. Del mismo modo, la
especificidad de 0,997 implica que
99,7 por ciento de los mensajes nonspam fueron clasificados correctamente o,
alternativamente, 0,3 por ciento de los mensajes válidos se rechazaron como spam.
La idea de rechazar un 0,3 por ciento de los mensajes SMS válidos puede ser
inaceptable, o puede ser una solución de compromiso razonable dada la reducción
de correo no deseado.
La sensibilidad y la especificidad proporcionan herramientas para pensar acerca de
tales compensaciones. Por lo general, se realizan cambios en el modelo y diferentes
modelos se prueban hasta que encuentre uno que se adapte a un umbral de
sensibilidad y especificidad deseada. Visualizaciones, tales como los que se analizan
más adelante en este capítulo, también pueden ayudar a entender el compromiso
entre sensibilidad y especificidad.

Precisión y la recuperación
En estrecha relación con la sensibilidad y la especificidad son otras dos medidas de
rendimiento relacionados con los compromisos hechos en la clasificación: precisión
y la recuperación. Se utiliza principalmente en el contexto de la recuperación de
información, estas estadísticas están destinadas a proporcionar una indicación de
cómo los resultados de un modelo interesantes y relevantes son, o si las
predicciones se diluyen por el ruido sin sentido.
La precisión (también conocido como el valor predictivo positivo) se define como la
proporción de ejemplos positivos que son verdaderamente positivo; en otras
palabras, cuando un modelo predice la clase positiva, la frecuencia con la que se
corrige? Un modelo preciso sólo predecir la clase positiva en los casos que son muy
propensos a ser positivo. Va a ser muy confiable.

[ 370 ]
Capítulo 10

Considere qué pasaría si el modelo era muy impreciso. Con el tiempo, los resultados
serían menos propensos a ser de confianza. En el contexto de la recuperación de
información, esto sería similar a un motor de búsqueda como Google devolver
resultados no relacionados. Con el tiempo, los usuarios podrían cambiar a un
competidor como Bing. En el caso del filtro de spam de SMS,
alta precisión significa que el modelo es capaz de dirigirse cuidadosamente sólo el
correo no deseado sin tener en cuenta el jamón.

Por otro lado, el recuerdo es una medida de cuán completa son los resultados.
Como se muestra en la siguiente fórmula, esto se define como el número de
verdaderos positivos sobre el total de positivos. Ya ha reconocido que esto es lo
mismo que la sensibilidad. Sin embargo, en este caso, la interpretación difiere
ligeramente. Un modelo con una alta recuperación capta una gran parte de los
ejemplos positivos, lo que significa que tiene
gran amplitud. Por ejemplo, un motor de búsqueda con una alta recordación
devuelve un gran número de documentos pertinentes a la consulta de búsqueda. Del
mismo modo, el filtro de spam de SMS tiene una alta recordación si la mayoría de
los mensajes de spam se identifican correctamente.

Podemos calcular la precisión y recuperar de la matriz de confusión. Una vez


más, asumiendo que el spam es la clase positiva, la precisión es:
> Prec <- 152 / (152 + 4)
> prec
[1] 0.974359

El retiro del mercado es:


> Rec <- 152 / (152 + 31)
> rec
[1] 0.8306011

El paquete de intercalación se puede utilizar para calcular cualquiera de estas


medidas a partir de los vectores de clases previstos y los reales. Precision utiliza la
función posPredValue ():
> biblioteca (caret)

[ 371 ]
> posPredValue (sms_results $ predict_type, sms_results $
ACTUAL_TYPE, positivo = "spam")
[1] 0.974359

[ 372 ]
Evaluación del desempeño del modelo

Mientras utiliza el recuerdo sensibilidad() función que hemos usado anteriormente:


> sensibilidad (sms_results $ predict_type, sms_results $
ACTUAL_TYPE, positivo = "spam")
[1] 0.8306011

Similar a la inherente compromiso entre sensibilidad y especificidad, para la


mayoría de los problemas del mundo real, es difícil construir un modelo tanto con
alta precisión y alta recuperación. Es fácil ser precisos si orienta sólo el bajo-fruta
que cuelga el fácil clasificar ejemplos. Del mismo modo, es fácil para un modelo
que tiene excelente recuperación por colada
una red muy amplia, lo que significa que el modelo es demasiado agresivo en la
identificación de los casos positivos. Por el contrario, tener tanto alta precisión y
recordar al mismo tiempo es muy difícil. Por tanto, es importante probar una
variedad de modelos con el fin de encontrar la combinación de precisión y recordar
que satisfaga las necesidades de su proyecto.

El F-medida
Una medida de rendimiento del modelo que combina precisión y la recuperación
en un solo número se conoce como el F-medida (también llamado a veces la
puntuación de F1 o F-score). El F-medida combina precisión y la recuperación
utilizando la media armónica, un tipo de medio que se utiliza para las tasas de
cambio. La media armónica se utiliza en lugar de la aritmética común ya que
tanto significa precisión y la recuperación se expresan como
proporciones entre cero y uno, que pueden ser interpretadas como las tarifas. La
siguiente es la fórmula para el F-medida:

Para el cálculo de la medida-F, utilice los valores de precisión y la recuperación


calculados anteriormente:
> f <- (2 * prec * rec) / (prec + rec)
> F
[1] 0.8967552

Esto se ve exactamente igual que el uso de los conteos de la matriz de confusión:


> F <- (2 * 152) / (2 * 152 + 4 + 31)
> F
[1] 0.8967552

[ 373 ]
Capítulo 10

Dado que el F-medida describe el funcionamiento del modelo en un solo número,


que proporciona una manera conveniente para comparar varios modelos de lado a
lado. Sin embargo, esto supone que el mismo peso debe ser asignado a la precisión y
recordar, una suposición de que
no siempre es válida. Es posible calcular F-resultados utilizando diferentes
pesos de precisión y la recuperación, pero la elección de los pesos podría ser
difícil en el mejor y en el peor arbitraria. Una mejor práctica es utilizar medidas
tales como el F-score en
combinación con métodos que tienen en cuenta las fortalezas y debilidades de un
modelo más global, tales como los que se describen en la siguiente sección.

La visualización de rendimiento
compensaciones
Visualizaciones son útiles para entender el funcionamiento de algoritmos de
aprendizaje automático con mayor detalle. Donde las estadísticas tales como la
sensibilidad y la especificidad, precisión ni intento de recuperación para hervir el
rendimiento del modelo a un solo número, visualizaciones muestran cómo un
alumno lleva a cabo a través de una amplia gama de condiciones.
Debido a que los algoritmos de aprendizaje tienen diferentes sesgos, es posible que
los dos modelos con una precisión similar podrían tener diferencias drásticas en la
forma en que logran su exactitud.
Algunos modelos pueden tener dificultades con ciertas predicciones que otros hacen
con facilidad, mientras que breezing a través de los casos que otros no pueden
hacerlo bien. Las visualizaciones proporcionan un método para entender estas
compensaciones, mediante la comparación de lado aprendices a lado en un solo
gráfico.
El paquete ROCR proporciona un conjunto de fácil uso de funciones para la
visualización para visualizar el rendimiento de los modelos de clasificación. Incluye
funciones para el cálculo de gran conjunto de las medidas de rendimiento más
comunes y visualizaciones. La página web en ROCRhttp://rocr.bioinf.mpi-
sb.mpg.de/ incluye una lista del conjunto completo de características, así como
varios ejemplos en las capacidades de visualización. Antes de continuar, instale el
paquete utilizando el comando ( "ROCR") install.packages.

Para obtener más información sobre el desarrollo de ROCR,


consulte: Sing T, Sander O, N Beerenwinkel, Lengauer T. ROCR:
visualizar el rendimiento clasificador en R. Bioinformática. 2005; 21:
3940-3941.

Para crear visualizaciones con ROCR, se necesitan dos vectores de datos. La


[ 374 ]
primera debe contener los valores de la clase predichos, y el segundo debe
contener la probabilidad estimada de la clase positiva. Estos se utilizan para
crear un objeto de predicción
que puede ser examinado con las funciones de trazado de ROCR.

[ 375 ]
Evaluación del desempeño del modelo

El objeto predicción para el clasificador de SMS requiere probabilidades estimadas


de spam del clasificador y las etiquetas de clase reales. Estos se combinan utilizando
la función de predicción () en las siguientes líneas:
> biblioteca (ROCR)
> pred <- predicción (predicciones = sms_results $ prob_spam,
etiquetas = sms_results $ ACTUAL_TYPE)

A continuación, la función de rendimiento () nos permitirá calcular las medidas


de rendimiento del objeto de predicción que acabamos de crear, que puede ser
visualizado utilizando la función R plot (). Teniendo en cuenta estos tres pasos,
una gran variedad de visualizaciones útiles pueden ser creados.

Las curvas ROC


La Característica (ROC) curva de funcionamiento del receptor se utiliza
comúnmente para examinar el compromiso entre la detección de verdaderos
positivos, mientras que evita los falsos positivos. Como se puede sospechar por el
nombre, las curvas ROC fueron desarrollados por los ingenieros en el campo de las
comunicaciones. En la época de la Segunda Guerra Mundial, operadores de radar y
de radio curvas ROC para medir la capacidad de un receptor para discriminar
entre señales verdaderas y falsas alarmas. La misma técnica es útil hoy en día para
visualizar la eficacia de los modelos de aprendizaje automático.
Las características de un típico diagrama de ROC se representan en la siguiente
trama. Las curvas se definen en una parcela con la proporción de verdaderos
positivos en el eje vertical y la proporción de falsos positivos en el eje horizontal.
Debido a que estos valores son equivalentes a sensibilidad y (1 - especificidad),
respectivamente, el diagrama es también conocido como una trama de sensibilidad /
especificidad:

[ 376 ]
Capítulo 10

Los puntos que comprenden curvas ROC indican la verdadera tasa positiva a
diferentes umbrales de falsos positivos. Para crear las curvas, las predicciones de un
clasificador están ordenados por probabilidad estimada del modelo de la clase
positiva, con los valores más grandes en primer lugar.
Comenzando en el origen, el impacto de cada predicción en la tasa positiva
verdadera y tasa de falsos positivos dará lugar a una curva de trazado vertical
(para una predicción correcta) u horizontalmente (para una predicción incorrecta).
Para ilustrar este concepto, tres clasificadores hipotéticos se contrastan en la trama
anterior. En primer lugar, la línea diagonal desde la parte inferior izquierda a la
esquina superior derecha del diagrama representa un clasificador con ningún valor
predictivo. Este tipo de clasificador detecta verdaderos positivos y falsos positivos
exactamente a la misma velocidad, lo que implica que el clasificador no puede
discriminar entre los dos. Esta es la línea de base por la cual otros clasificadores
pueden ser juzgados. Las curvas ROC que caen cerca de esta línea indican los
modelos que no son muy útiles. El clasificador perfecto tiene una curva que pasa por
el punto a una tasa positiva verdadera 100 por ciento y 0 por ciento tasa de falsos
positivos. Es capaz de identificar correctamente todos los aspectos positivos antes de
que se clasifica incorrectamente cualquier resultado negativo.
Cuanto más cerca de la curva es el clasificador perfecto, el mejor es en la
identificación de valores positivos. Esto se puede medir mediante una estadística
conocida como el área bajo la curva ROC (AUC abreviado). El AUC trata el
diagrama ROC como un cuadrado de dos dimensiones y mide el área total bajo la
curva ROC. AUC varía de 0,5 (para un clasificador con ningún valor predictivo) a
1,0 (para un clasificador perfecto). Una convención para interpretar las
puntuaciones de las AUC utiliza un sistema similar a las calificaciones con letras
académicas:
• UNA: Pendiente = 0,9 a 1,0
• segundo: Excelente / bueno = 0,8 a 0,9
• do: Aceptable / justo = 0,7 a 0,8
• re: Mal = 0,6 a 0,7
• mi: No discriminación = 0,5 a 0,6

Al igual que con la mayoría de las escalas similares a esta, los niveles pueden
funcionar mejor para algunas tareas que otros; la categorización es algo subjetivo.

Es también digno de mención que dos curvas ROC pueden ser


en forma muy diferente, sin embargo, tienen una AUC
idénticos. Por esta razón, una AUC por sí solo puede ser
engañosa. La mejor práctica es utilizar las AUC en combinación
con un examen cualitativo de la curva ROC.

[ 377 ]
Evaluación del desempeño del modelo

Creación de curvas ROC con el paquete ROCR implica la construcción de un objeto


de rendimiento del objeto de predicción hemos calculado anteriormente. Desde
trazar curvas ROC verdaderas tasas positivas en comparación con las tasas de falsos
positivos, simplemente llamamos la función de rendimiento (), mientras que se
especifican las medidas de TPR y FPR, como se muestra en el siguiente código:
> perf <- rendimiento (pred, medida = "tpr", x.measure = "FPR")

Utilizando el objeto perf, podemos visualizar la curva ROC con la función de la trama de
R ().
Como se muestra en las siguientes líneas de código, muchos de los parámetros
estándar para ajustar la visualización se puede utilizar, como principal (para añadir
un título), col (para cambiar el color de la línea), y LWD (para ajustar el ancho de
línea):
> plot (perf, principal = "curva ROC para el filtro
de SMS spam", col = "blue", lwd = 3)

Aunque el comando plot () es suficiente para crear una curva ROC válida, es
útil para agregar una línea de referencia para indicar el rendimiento de un
clasificador sin valor predictivo.
Para trazar una línea tal, vamos a utilizar la función abline (). Esta función se puede
utilizar para especificar una línea en la forma pendiente-intersección, donde a es la
ordenada al origen y b es la pendiente. Puesto que necesitamos una línea de
identidad que pasa por el origen, vamos a establecer la intersección a a = 0 y la
pendiente a b = 1, como se muestra en el siguiente diagrama. El parámetro lwd
ajusta el grosor de la línea, mientras que el parámetro lty ajusta el tipo de línea.
Por ejemplo, lty = 2 indica una línea discontinua:
> abline (a = 0, b = 1, lwd = 2, lty = 2)

El resultado final es un gráfico de ROC con una línea de referencia de trazos:

[ 378 ]
Capítulo 10

Cualitativamente, podemos ver que esta curva ROC parece ocupar el espacio en la
esquina superior izquierda del diagrama, lo que sugiere que es más cercano a un
clasificador perfecta que la línea discontinua representa un clasificador inútil. Para
confirmar esta forma cuantitativa,
podemos utilizar el paquete ROCR para calcular el AUC. Para ello, en primer lugar
hay que crear otro objeto de rendimiento, esta vez especificando medida = "AUC",
como se muestra en el siguiente código:
> perf.auc <- rendimiento (pred, medir = "AUC")

Desde perf.auc es un objeto R (específicamente conocida como un objeto S4),


tenemos que utilizar un tipo especial de notación para acceder a los valores
almacenados en ellas. objetos S4 contienen información en posiciones
conocidas como ranuras. La función str () se puede usar para ver todas las
ranuras de un objeto:
> str (perf.auc)
clase formal 'rendimiento' [paquete "ROCR"] con 6 ranuras
.. @ x.name: CHR "Ninguna"
.. @ y.name: Área CHR" en la República de China curva"
.. @ alpha.name: CHR "ninguna"
.. @ x.values: lista()
.. @ y.values: Lista de 1
.. .. $: num 0,984
.. @ alpha.values: (lista)

Tenga en cuenta que las ranuras están precedidos por el símbolo @. Para acceder
el valor AUC, que se almacena como una lista en la ranura y.values, podemos
utilizar la notación @ junto con la función no listados (), que simplifica las listas a
un vector de valores numéricos:
> no listados (
perf.auc@y.values )[1]
0.9835862

El AUC para el clasificador de SMS es de 0,98, lo cual es extremadamente alta.


Pero, ¿cómo sabemos si el modelo es igual de probable que un buen
desempeño para otro conjunto de datos? Con el fin de responder a estas
preguntas, necesitamos tener una mejor comprensión de lo lejos que podemos
extrapolar las predicciones de un modelo más allá de los datos de prueba.

[ 379 ]
Evaluación del desempeño del modelo

Estimar el rendimiento futuro


Algunos paquetes de aprendizaje automático R presentes matrices de confusión y
medidas de rendimiento durante el proceso de construcción del modelo. La
finalidad de estas estadísticas es proporcionar una visión sobre el error
resubstitution del modelo, que se produce cuando los datos de entrenamiento se
predice de forma incorrecta a pesar del modelo se construye directamente de estos
datos. Esta información puede ser utilizada como un diagnóstico para identificar
áspera artistas obviamente pobres.
El error resubstitution no es un marcador muy útil de rendimiento futuro. Por
ejemplo, un modelo que utiliza la memorización de clasificar a la perfección todas
las instancias de formación con el error resubstitution cero sería incapaz de
generalizar sus predicciones con los datos que nunca ha visto antes. Por esta razón,
la tasa de error en los datos de entrenamiento puede ser muy optimista sobre el
rendimiento futuro de un modelo.
En lugar de depender de error resubstitution, una mejor práctica consiste en evaluar
el desempeño de un modelo de datos que aún no ha visto. Se utilizó este enfoque en
los capítulos anteriores, cuando nos separamos los datos disponibles en un conjunto
de entrenamiento y un conjunto de pruebas. En algunos casos, sin embargo, no
siempre es ideal para crear conjuntos de datos de entrenamiento y prueba. Por
ejemplo, en una situación en la que sólo tiene una pequeña piscina de los datos, es
posible que no desee reducir la muestra más allá.
Afortunadamente, hay otras maneras de estimar el rendimiento de un modelo de
datos que no se ven. El paquete de intercalación se utilizó para calcular las medidas
de rendimiento también ofrece una serie de funciones para estimar el rendimiento
futuro. Si usted está siguiendo los ejemplos de código R y no ha instalado el
paquete de intercalación, por favor hágalo. Vas a
También es necesario cargar el paquete a la sesión de R, usando el comando biblioteca
(intercalación).

El método holdout
El procedimiento de partición de datos en conjuntos de datos de entrenamiento y
prueba que se utilizó en los capítulos anteriores se conoce como el método de
retención. Como se muestra en el siguiente diagrama, la formación de datos se
utiliza para generar el modelo, que se aplica entonces al conjunto de datos de
prueba para generar predicciones para la evaluación. Por lo general, alrededor de
una tercera parte de los datos se llevó a cabo a cabo para las pruebas, y dos tercios
se utiliza para el entrenamiento, pero esta proporción puede variar dependiendo
de la cantidad de datos disponibles. Para asegurar que los datos de entrenamiento
y de prueba no tienen diferencias sistemáticas, sus ejemplos se dividieron al azar
[ 380 ]
en dos grupos.

[ 381 ]
Capítulo 10

Para el método de retención para dar como resultado una estimación realmente
precisa de la evolución futura, en ningún momento la actuación en el conjunto de
datos de prueba se permitirá a influir en el modelo. Es fácil violar esta regla, sin
saberlo, por la elección del mejor modelo basado en los resultados de pruebas
repetidas. Por ejemplo, supongamos que hemos construido varios modelos en los
datos de entrenamiento, y seleccionamos el que tiene la más alta precisión en los
datos de prueba. Debido a que tenemos en palmitas el mejor resultado, el
rendimiento de la prueba no es una medida objetiva de la actuación en los datos
que no se ven.
Para evitar este problema, es mejor dividir los datos originales, de manera que,
además de los conjuntos de datos de entrenamiento y los conjuntos de datos de
prueba, un conjunto de datos de validación está disponible. La validación de
datos se utiliza para iterar y refinar el modelo o modelos elegido, dejando el
conjunto de datos de prueba para ser utilizado sólo una vez como un paso final
para informar de un porcentaje de error estimado para las predicciones futuras.
Una división típica entre la formación, pruebas y validación sería del 50 por
ciento, 25 por ciento y 25 por ciento, respectivamente.

[ 382 ]
Evaluación del desempeño del modelo

Un lector interesado tendrá en cuenta que los datos de prueba de


retención se utilizó en los capítulos anteriores para evaluar tanto los
modelos y mejorar el rendimiento del modelo. Esto se hizo con fines
ilustrativos, pero sería de hecho violar la regla como se dijo
anteriormente. En consecuencia, las estadísticas de rendimiento
Modelo mostrado no eran válidos estimaciones de rendimiento
futuro en los datos que no se ven y el proceso podría haber sido
denominados con mayor precisión la validación.

Un método simple para crear muestras no aceptantes utiliza generadores de números


aleatorios para asignar registros a particiones. Esta técnica fue utilizada por primera vez
en el Capítulo 5, divide y vencerás - Clasificación a partir de árboles de decisión y reglas
para crear conjuntos de datos de entrenamiento y prueba.

Si desea seguir con los siguientes ejemplos, descargar el conjunto


de datos de la página web credit.csv Packt Publishing, y cargar a
una trama de datos utilizando la
<Crédito - read.csv de comandos ( "credit.csv").

Supongamos que tenemos un marco de datos denominado crédito con 1000 filas de
datos. Podemos dividirlo en tres particiones de la siguiente manera. En primer lugar,
se crea un vector de identificadores de fila ordenados al azar de 1 a 1000 utilizando la
función runif (), que por defecto genera un número especificado de valores aleatorios
entre 0 y 1. El runif () la función recibe su nombre de la distribución uniforme
aleatoria , el cual fue discutido en el capítulo 2, gestionar y comprender los datos.
> random_ids <- orden (runif (1000))

El orden () utilizado aquí devuelve un vector que indica el orden de clasificación


de los 1.000 números aleatorios. Por ejemplo, el orden (c (0,5, 0,25, 0,75, 0,1))
devuelve la secuencia 4 2 1 3 porque el número más pequeño (0.1) aparece
cuarto, el segundo más pequeño (0,25) aparece segundo, y así sucesivamente.
Podemos utilizar los identificadores de azar para dividir la trama de datos de
crédito en 500, 250 y 250 registros que comprende los conjuntos de datos de
entrenamiento, validación y pruebas:
> credit_train <- crédito [random_ids [1: 500],]
> credit_validate <- crédito [random_ids [501: 750],]
> credit_test <- crédito [random_ids [751: 1000],]

Uno de los problemas con el muestreo holdout es que cada partición puede tener
una proporción mayor o menor de algunas clases. En ciertos casos, especialmente
aquellos en los que una clase es una proporción muy pequeña del conjunto de datos,
esto puede conducir a una clase puede omitir de la formación de datos. Este es un
[ 383 ]
problema importante, ya que el modelo no será capaz de aprender esta clase.

[ 384 ]
Capítulo 10

Con el fin de reducir la posibilidad de que esto ocurra, una técnica llamada
muestreo aleatorio estratificado se puede utilizar. A pesar de que en el largo plazo
una muestra aleatoria debe contener aproximadamente la misma proporción de
cada valor de la clase como el conjunto de datos completo, estratificadas garantías
de muestreo al azar que las particiones aleatorias tienen casi la misma proporción de
cada clase como el conjunto de datos completo, incluso cuando algunas clases son
pequeñas .
El paquete de intercalación proporciona una función createDataPartition () que va a
crear particiones basadas en el muestreo estratificado retención. El código para crear
una muestra estratificada de datos de entrenamiento y de prueba se muestra para el
conjunto de datos de crédito en los siguientes comandos. Para utilizar la función, un
vector de los valores de clase debe ser especificado (en este caso, el valor
predeterminado se refiere a si un préstamo entró en defecto) además de un
parámetro p, que especifica la proporción de casos para ser incluido en la partición.
los
list = parámetro FALSO evita que el resultado de ser almacenado en el
formato de lista:
> in_train <- createDataPartition (crédito $ defecto, p =
0,75, list = FALSO)
> credit_train <- crédito [in_train,]
> credit_test <- crédito [-in_train,]

El vector in_train indica números de las filas incluidas en la muestra de


entrenamiento. Podemos utilizar estos números de fila para seleccionar ejemplos
para la trama de datos credit_train. Del mismo modo, mediante el uso de un
símbolo negativo, podemos utilizar las filas que no se encuentran en el vector
in_train para el conjunto de datos credit_test.
Aunque se distribuye de manera uniforme las clases, el muestreo estratificado no
garantiza otros tipos de representatividad. Algunas muestras pueden tener
demasiados o pocos casos difíciles, fáciles de predecir los casos, o valores atípicos.
Esto es especialmente cierto para los conjuntos de datos más pequeños, que no
pueden tener una porción suficientemente grande de estos casos que se dividirá
entre entrenamiento y prueba.
Además de las muestras potencialmente sesgada, otro problema con el método de
retención es que porciones sustanciales de datos deben ser reservados para probar y
validar el modelo. Dado que estos datos no pueden ser utilizados para entrenar el
modelo hasta que su rendimiento se ha medido, las estimaciones de rendimiento
tienden a ser demasiado conservador.

Dado que los modelos de formación de grandes conjuntos de


[ 385 ]
datos funcionan mejor, una práctica común es volver a entrenar
el modelo de la serie completa de datos (es decir, la formación
más pruebas y validación) después de un modelo final ha sido
seleccionado y evaluado.

[ 386 ]
Evaluación del desempeño del modelo

Una técnica llamada holdout repetidas veces se usa para mitigar los problemas de
conjuntos de datos de formación compuestas al azar. El método holdout repetido
es un especial
caso del método de retención que utiliza el resultado promedio de varias muestras al
azar no aceptantes para evaluar el desempeño de un modelo. Como se utilizan
múltiples muestras holdout,
es menos probable que el modelo está entrenado o probado en los datos no
representativos. Vamos a ampliar esta idea en la siguiente sección.

Validación cruzada
El holdout repetida es la base de una técnica conocida como k-veces la validación
cruzada (o CV k veces), que se ha convertido en el estándar de la industria para
estimar el rendimiento del modelo. En lugar de tomar muestras aleatorias
repetidas que potencialmente podrían utilizar el mismo registro más de una vez,
CV k veces divide aleatoriamente los datos en k a las particiones aleatorias
completamente separadas llamadas pliegues.
Aunque k se puede configurar a cualquier número, de lejos, la convención más
común es usar 10 veces la validación cruzada (CV 10 veces). ¿Por qué 10 pliegues?
La razón es que la evidencia empírica sugiere que hay poco beneficio adicional en el
uso de un número mayor. Para cada uno de los 10 pliegues (comprendiendo cada
uno el 10 por ciento del total de datos), un modelo de aprendizaje máquina está
construida sobre el 90 por ciento restante de los datos. coincidente del pliegue 10
por ciento
muestra se utiliza entonces para la evaluación del modelo. Después de que el
proceso de formación y evaluar el modelo se ha producido por 10 veces (con 10
diferentes combinaciones de formación / prueba), se informa que el rendimiento
promedio en todos los pliegues.

Un caso extremo de CV k veces es el método de dejar uno fuera,


que realiza CV k veces usando un pliegue para cada uno de los
ejemplos de los datos. Esto asegura que la mayor cantidad de
datos se utilizan para entrenar el modelo. Aunque esto puede
parecer útil, que es tan costoso computacionalmente que se
utiliza muy poco en la práctica.

Conjuntos de datos para la validación cruzada se pueden crear utilizando la


función createFolds () en el paquete de intercalación. Al igual que en el muestreo
aleatorio estratificado retención, esta función intentará mantener el mismo
equilibrio de clases en cada uno de los pliegues como en el conjunto de datos
original. El siguiente es el comando para crear pliegues 10:
> pliegues <- (createFolds de crédito por defecto $, K = 10)

[ 387 ]
El resultado de la función createFolds () es una lista de vectores que almacenan los
números de fila para cada uno de los k solicitada = 10 pliegues. Podemos mirar a
escondidas en el contenido, usando str ():
> str
(pliegues)
Lista de los
10
$ Fold01: int [1: 100] 1 5 12 13 19 21 25 32 36 38 ...
$ Fold02: int [1: 100] 16 49 78 81 84 93 105 108 128 134 ...

[ 388 ]
Capítulo 10

$ Fold03: int [1: 100] 15 48 60 67 76 91 102 109 117 123 ...


$ Fold04: int [1: 100] 24 28 59 64 75 85 95 97 99 104 ...
$ Fold05: int [1: 100] 9 10 23 27 29 34 37 39 53 61 ...
$ Fold06: int [1: 100] 4 8 41 55 58 103 118 121 144 146 ...
$ Fold07: int [1: 100] 2 3 7 11 14 33 40 45 51 57 ...
$ Fold08: int [1: 100] 17 30 35 52 70 107 113 129 133 137 ...
$ Fold09: int [1: 100] 6 20 26 31 42 44 46 63 79 101 ...
$ Fold10: int [1: 100] 18 22 43 50 68 77 80 88 106 111 ...

Aquí, vemos que el primer pliegue se llama Fold01 y almacena 100 enteros, lo que
indica las 100 filas de la trama de datos de crédito para el primer pliegue. Para
crear conjuntos de datos de entrenamiento y prueba para construir y evaluar un
modelo, se requiere un paso adicional. Los comandos siguientes muestran cómo
crear datos para el primer pliegue. Vamos a asignar los seleccionados
10 por ciento para el conjunto de datos de prueba y utilizar el símbolo negativo
para asignar el 90 por ciento restante a la formación de datos:
> credit01_test <- de crédito [pliega $ Fold01,]
> credit01_train <- de crédito [-folds $ Fold01,]

Para realizar el CV de 10 veces completo, tendría que ser repetido un total de este paso
10 veces; la construcción de un modelo y luego calcular el rendimiento del modelo
cada vez. Al final, las medidas de rendimiento se promedian para obtener el
rendimiento general. Afortunadamente, podemos automatizar esta tarea mediante
la aplicación de varias de las técnicas que hemos aprendido anteriormente.
Para demostrar el proceso, podremos calcular el estadístico kappa para un modelo
de árbol de decisión C5.0 de los datos de crédito utilizando 10 veces CV. En primer
lugar, tenemos que cargar algunos paquetes R: intercalación (para crear los
pliegues), C50 (para el árbol de decisión), y la TIR (calcular kappa). Los dos últimos
paquetes se eligieron para fines ilustrativos; si lo desea, puede utilizar un modelo
diferente o una medida de rendimiento diferente a lo largo de la misma serie de
pasos.
> biblioteca (caret)
> biblioteca (C50)
> biblioteca (TIR)

A continuación, vamos a crear una lista de 10 pliegues como lo hemos hecho


anteriormente. El set.seed ()
función se utiliza aquí para asegurar que los resultados son consistentes si el
mismo código se ejecuta de nuevo:
> set.seed (123)

[ 389 ]
> pliegues <- (createFolds de crédito por defecto $, K = 10)

[ 390 ]
Evaluación del desempeño del modelo

Por último, vamos a aplicar una serie de medidas idénticas a la lista de los pliegues
utilizando la función lapply (). Como se muestra en el siguiente código, porque no
hay una función existente que hace exactamente lo que necesitamos, debemos definir
nuestra propia función para pasar a lapply ().
Nuestra función personalizada divide la trama de datos de crédito en los datos de
entrenamiento y prueba, construye un árbol de decisión mediante la función de
C5.0 () en los datos de entrenamiento, genera un conjunto de predicciones a partir
de los datos de prueba, y se comparan los valores predichos y reales utilizando la
kappa2 () función:
> cv_results <- lapply (pliegues, la
función (x) {credit_train <- crédito [-
x,] credit_test <- crédito [x,]
credit_model <- C5.0 (por defecto ~, los datos =
credit_train.) credit_pred <- predecir (credit_model,
credit_test) credit_actual <- credit_test $ defecto
kappa <- kappa2 (hoja.de.datos (credit_actual, credit_pred)) $ valor de
retorno (kappa)
})

Las estadísticas kappa resultantes se compilan en una lista almacenada en los cv_results
objeto, que podemos examinar el uso de str ():
> str
(cv_results)
Lista de los 10
$ Fold01: num 0,343
$ Fold02: num 0,255
$ Fold03: num 0,109
$ Fold04: num 0,107
$ Fold05: num 0,338
$ Fold06: num 0,474
$ Fold07: num 0,245
$ Fold08: num 0,0365
$ Fold09: num 0,425
$ Fold10: num 0,505

[ 391 ]
Capítulo 10

Sólo hay un paso más que queda en el proceso 10 veces CV: debemos calcular el
promedio de estos 10 valores. A pesar de que se verá tentado a escribir medias
(cv_results), porque cv_results no es un vector numérico, el resultado sería un error.
En lugar de ello, utilizar la función no listados (), que elimina la estructura de la
lista, y reduce cv_results a un vector numérico. A partir de aquí, podemos calcular
la media kappa como se esperaba:
> significar (no listados
(cv_results)) [1] 0.283796

Esta estadística kappa es bastante bajo, correspondiente a "regular" en la escala de


interpretación, lo que sugiere que el modelo de calificación de crédito realiza sólo
marginalmente mejor que el azar. En el siguiente capítulo, vamos a examinar
métodos automatizados basados en 10 veces CV que nos pueden ayudar a mejorar
el rendimiento de este modelo.

Quizás el método estándar de oro actual para estimar de forma fiable el


rendimiento del modelo se repite CV k veces. Como se puede adivinar
por el nombre, esto implica la aplicación repetida de CV k veces y
promediar los resultados. Una estrategia común es realizar CV de 10
veces diez veces. A pesar de que es computacionalmente intensivas, que
proporciona una estimación muy robusto.

arranque de muestreo
CV Una alternativa ligeramente utilizada con menos frecuencia a k veces se conoce
como arranque de muestreo, el bootstrap o bootstrapping para abreviar. En
términos generales, estos se refieren a los métodos estadísticos del uso de muestras
aleatorias de datos para estimar las propiedades de un conjunto más grande.
Cuando este principio se aplica al desempeño de los modelos de aprendizaje
automático, que implica la creación de varias entrenamiento seleccionada al azar y
conjuntos de datos de prueba, que luego se utilizan para calcular las estadísticas
de rendimiento. Los resultados de los diversos conjuntos de datos aleatorios se
promedian para obtener una estimación final del rendimiento futuro.
Por lo tanto, lo que hace que este procedimiento diferente de CV k veces?
Considerando que la validación cruzada divide los datos en particiones separadas
en el que cada ejemplo puede aparecer sólo una vez, el bootstrap permite ejemplos
que se seleccionan varias veces a través de un proceso de muestreo con reemplazo.
Esto significa que desde el conjunto de datos original de n ejemplos, el
procedimiento de arranque creará uno o más nuevos conjuntos de datos de
entrenamiento que también contendrán n ejemplos, algunos de los cuales se repiten.
Los correspondientes conjuntos de datos de ensayo se construyen a partir de la serie
de ejemplos que no fueron seleccionados para los respectivos conjuntos de datos de
[ 392 ]
entrenamiento.

[ 393 ]
Evaluación del desempeño del modelo

El uso de muestreo con reemplazo como se describió anteriormente, la


probabilidad de que cualquier caso dado está incluido en el conjunto de datos de
entrenamiento es 63,2 por ciento. En consecuencia, la probabilidad de cualquier
instancia estar en el conjunto de datos de prueba es 36,8 por ciento. En otras
palabras, los datos de entrenamiento representa sólo el 63,2 por ciento de los
ejemplos disponibles, algunos de los cuales se repiten. En contraste a 10 veces CV,
que utiliza 90 por ciento de los ejemplos para la formación, la muestra bootstrap es
menos representativo del conjunto de datos completo.
Debido a que un modelo entrenado sólo en el 63,2 por ciento de los datos de
entrenamiento es probable que realicen peor que un modelo entrenado en un
conjunto de entrenamiento más grande, las estimaciones de rendimiento de la rutina
de carga puede ser sustancialmente menor que la que se obtiene cuando el modelo
está más recientes capacitados en el conjunto de datos completo . Un caso especial
de arranque conocido como las 0,632 cuentas de arranque para esta calculando la
medida de rendimiento final como una función del rendimiento tanto en los datos
de entrenamiento (que es demasiado optimista) y los datos de prueba (que es
demasiado pesimista). La tasa de error final se estima entonces como:

Una ventaja de arranque durante la validación cruzada es que tiende a trabajar


mejor con muy pequeños conjuntos de datos. Además, el muestreo bootstrap tiene
aplicaciones más allá de la medición del rendimiento. En particular, en el siguiente
capítulo vamos a aprender los principios de arranque de muestreo se pueden
utilizar para mejorar el rendimiento del modelo.

Resumen
En este capítulo se presenta una serie de medidas y las técnicas más comunes para
evaluar el desempeño de los modelos de clasificación de aprendizaje automático. A
pesar de la precisión proporciona un método simple para examinar la frecuencia con
un modelo es correcto, esto puede ser engañoso en el caso de eventos raros porque el
costo de la vida real de este tipo de eventos puede ser inversamente proporcional a
la frecuencia con que aparecen.
Una serie de medidas basadas en matrices de confusión capturar mejor el equilibrio
entre los costos de los diversos tipos de errores. examinar de cerca las soluciones de
compromiso entre sensibilidad y especificidad, o la precisión y la recuperación
puede ser una herramienta útil para pensar en las consecuencias de los errores en el
mundo real. Las visualizaciones tales como la curva ROC también son útiles para
este fin.

[ 394 ]
Capítulo 10

También vale la pena mencionar que a veces la mejor medida del rendimiento de un
modelo es considerar qué tan bien cumple o no cumple, otros objetivos. Por ejemplo,
es posible que necesite para explicar la lógica de un modelo en un lenguaje sencillo,
lo que eliminaría algunos modelos de la consideración. Además, incluso si se lleva a
cabo muy bien, un modelo que es demasiado lento o difícil de escala para un entorno
de producción es completamente inútil.
Una extensión obvia de medir el rendimiento es identificar formas automatizadas
para encontrar los mejores modelos para una tarea en particular. En el siguiente
capítulo, vamos a construir sobre nuestro trabajo en lo que va a investigar formas de
hacer modelos más inteligentes de forma sistemática la iteración, refinación, y la
combinación de algoritmos de aprendizaje.

[ 395 ]
Mejora del
rendimiento
del modelo
Cuando un equipo deportivo no llega a alcanzar su objetivo, si el objetivo es
obtener una medalla olímpica de oro, un campeonato de la liga, o un récord
mundial de tiempo que debe buscar posibles mejoras. Imagínese que usted es el
entrenador del equipo. ¿Cómo pasaría sus sesiones de práctica? Tal vez le dirige a
los atletas a entrenar más duro o entrenar de manera diferente con el fin de
aprovechar al máximo cada poco de su potencial. O bien, puede enfatizar mejor
trabajo en equipo, la utilización de las fortalezas y debilidades de los atletas más
inteligentemente.
Ahora imagine que usted está entrenando a un algoritmo de aprendizaje
automático campeón del mundo. Tal vez la esperanza de competir en
competiciones de minería de datos, tales como los publicados en Kaggle
(http://www.kaggle.com/competitions). Tal vez sólo hay que mejorar los
resultados del negocio. ¿Por dónde empezar? Aunque el contexto es diferente, el
Uno de ellos utiliza estrategias para mejorar el rendimiento deportivo equipo
también se puede utilizar para mejorar el rendimiento de los estudiantes de
estadística.
A medida que el entrenador, es su trabajo para encontrar la combinación de
técnicas de entrenamiento y habilidades de trabajo en equipo que le permiten
alcanzar sus objetivos de rendimiento. Este capítulo se basa en el material cubierto
en este libro para introducir un conjunto de técnicas para mejorar el rendimiento
predictivo de los alumnos de la máquina. Aprenderás:
• Cómo automatizar la optimización del rendimiento del modelo mediante la
búsqueda sistemática para el conjunto óptimo de condiciones de formación
[ 347 ]
• Los métodos para combinar modelos en grupos que utilizan el trabajo en
equipo para hacer frente a las tareas de aprendizaje difíciles
• Cómo aplicar una variante de árboles de decisión, que se ha convertido
rápidamente popular debido a su impresionante actuación

[ 348 ]
Mejora del rendimiento del modelo

Ninguno de estos métodos será un éxito para todos los problemas. Sin embargo,
mirando a los ganadores a las competiciones de aprendizaje automático, es
probable que encuentre que al menos uno de ellos se ha empleado. Para ser
competitivo, usted también tendrá que añadir estas habilidades a su repertorio.

Puesta a punto modelos de valores


para un mejor rendimiento
Algunos problemas de aprendizaje están bien adaptados a los modelos de valores
presentados en los capítulos anteriores. En tales casos, puede que no sea necesario
pasar mucho tiempo iterar y refinar el modelo; se puede llevar a cabo lo
suficientemente bien como es. Por otra parte, algunos problemas son inherentemente
más difícil. Los conceptos subyacentes que hay que aprender puede ser
extremadamente compleja, que requiere una comprensión de muchas relaciones
sutiles, o que pueden verse afectadas por la variación aleatoria, por lo que es difícil
definir la señal dentro del ruido.
El desarrollo de modelos que realizan muy bien en problemas difíciles es cada bit
un arte como una ciencia. A veces un poco de intuición es muy útil cuando se trata
de identificar las áreas donde se puede mejorar el rendimiento. En otros casos, la
búsqueda de mejoras requerirá un enfoque de fuerza bruta, ensayo y error. Por
supuesto, el proceso de búsqueda numerosas mejoras posibles puede ser ayudado
por el uso de programas automatizados.

En el capítulo 5, divide y vencerás - Clasificación a partir de árboles de decisión y


reglas, se intentó un problema difícil: la identificación de los préstamos que eran
propensos a entrar en default. A pesar de que hemos sido capaces de utilizar
métodos de optimización del rendimiento para obtener una precisión de la
clasificación respetable de alrededor del 82 por ciento, en un examen más cuidadoso
en el capítulo 10, Evaluación del desempeño del modelo, nos dimos cuenta de que la
alta precisión fue una
poco engañoso. A pesar de la exactitud razonable, la estadística kappa era sólo de
0,28, lo que sugiere que el modelo estaba realizando realmente algo mal.
En esta sección, vamos a revisar el modelo de calificación de crédito para ver si
podemos mejorar los resultados.

Para seguir junto con los ejemplos, descargar el crédito. csv


desde el sitio web Packt Publishing y guardarlo en el
directorio de trabajo R. Cargar el archivo en R utilizando el
crédito de comandos <- read.csv ( "credit.csv").

[ 349 ]
Capítulo 11

Usted recordará que primero utilizó un árbol de decisiones de la C5.0 para


construir el clasificador para los datos de crédito. Posteriormente, se trató de
mejorar su rendimiento mediante el ajuste del parámetro de ensayos para
aumentar el número de iteraciones impulsar. Al aumentar el número de
iteraciones del valor predeterminado de 1 hasta el valor de 10, hemos sido capaces
de
aumentar la exactitud del modelo. Este proceso de ajuste de las opciones de modelo para
identificar
el mejor ajuste se llama ajuste de parámetros.
ajuste de parámetros no se limita a los árboles de decisión. Por ejemplo,
sintonizábamos modelos K-NN, cuando buscamos el mejor valor de k. También
sintonizábamos redes neuronales y máquinas de vectores soporte como ajustamos
el número de nodos o capas ocultas, o elegimos diferentes funciones del núcleo. La
mayoría de los algoritmos de aprendizaje automático permiten el ajuste de al menos
un parámetro, y los modelos más sofisticados ofrecen un gran número de maneras
de modificar el ajuste del modelo. Aunque esto permite que el modelo que se
adapta estrechamente a la tarea de aprendizaje, la complejidad de todas las posibles
opciones puede ser desalentador. Un enfoque más sistemático se justifica.

Uso de símbolo de intercalación para la


sintonización parámetro automatizado
En lugar de elegir valores arbitrarios para cada uno de los parámetros del modelo,
una tarea que no sólo es tedioso, pero también algo poco científico-es mejor para
llevar a cabo una búsqueda a través de muchos valores de los parámetros posibles
para encontrar la mejor combinación.
El paquete de acento circunflejo, que hemos utilizado ampliamente en el capítulo
10, Evaluación de Desempeño modelo, proporciona herramientas para ayudar con
el parámetro de ajuste automático. La funcionalidad básica es proporcionada por
una función de tren () que sirve como una interfaz estandarizada para más de 175
modelos diferentes de aprendizaje automático para ambas tareas de clasificación y
regresión. Mediante el uso de esta función, es posible automatizar la búsqueda de
modelos óptimos utilizando una variedad de métodos de evaluación y métricas.

No se sienta abrumado por el gran número de modelos-hemos


cubierto ya muchos de ellos en los capítulos anteriores. Otros
son simples variantes o extensiones de los conceptos básicos.
Dado lo que ha aprendido hasta ahora, usted debe estar seguro
de que usted tiene la capacidad de comprender todos los
métodos disponibles.

[ 350 ]
ajuste de parámetros automatizado que requiere tener en cuenta tres cuestiones:

• ¿Qué tipo de modelo de aprendizaje máquina (y la aplicación específica) debe


ser entrenados en los datos?
• ¿Qué parámetros del modelo se pueden ajustar, y cómo extensivamente en caso
de que
ser sintonizado para encontrar los valores óptimos?
• ¿Qué criterios se deben utilizar para evaluar los modelos para encontrar el
mejor candidato?

[ 351 ]
Mejora del rendimiento del modelo

Respondiendo a la primera pregunta implica encontrar un partido muy adecuado


entre la tarea de aprendizaje automático y uno de los 175 modelos. Obviamente,
esto requiere una comprensión de la amplitud y profundidad de los modelos de
aprendizaje automático. También puede ayudar a trabajar a través de un proceso
de eliminación. Casi la mitad de los modelos puede ser eliminado dependiendo de
si la tarea es la clasificación o predicción numérica; otros pueden ser excluidos en
base al formato de los datos o de la necesidad de evitar los modelos de caja negra, y
así sucesivamente. En cualquier caso, tampoco hay razón por la que no se puede
probar varios enfoques y compara los mejores resultados de cada uno.
Dirigiéndose a la segunda pregunta es una cuestión en gran medida dictada por la
elección del modelo, ya que cada algoritmo utiliza un conjunto único de
parámetros. Los parámetros de ajuste disponibles para los modelos predictivos se
tratan en este libro se enumeran en la siguiente tabla. Tenga en cuenta que aunque
algunos modelos tienen opciones adicionales que no se muestran, sólo aquellos que
figuran en la tabla son apoyados por intercalación para la sintonización automática.

Modelo aprendizaje de nombre del parámetros


tareas método
k-vecinos más cercanos Clasificación knn k
naive Bayes Clasificación nótese bien fL, usekernel
Árboles de decisión Clasificación C5.0 modelo, los
ensayos, aventar
OneR Regla Learner Clasificación Raridad Ninguna
DESTRIPADOR Regla Clasificación JRip NumOpt
Learner
regresión lineal Regresión lm Ninguna
Los árboles de regresión Regresión rpart cp
Árboles modelo Regresión M5 podados,
alisados,
reglas
Redes neuronales Uso dual nnet tamaño, decaimiento
Support Vector Machines Uso dual svmLinear do
(Linear Kernel)
Máquinas de vectores Uso dual svmRadial C, sigma
soporte (Radial Basis
Kernel)
Random Forests Uso dual rf mtry

Para obtener una lista completa de los modelos y parámetros de ajuste


correspondientes cubiertas por intercalación, consulte la tabla
proporcionada por el paquete de autor Max Kuhn en
[ 352 ]
http://topepo.github.io/caret/modelList.html.

[ 353 ]
Capítulo 11

Si alguna vez olvida los parámetros de ajuste para un modelo en particular, la


función modelLookup () se puede utilizar para encontrarlos. Simplemente
suministrar el nombre del método, como se ilustra aquí para el modelo C5.0:
> modelLookup ( "C5.0")
modelo parameterlabel forReg forClass probModel
1 C5.0trials # impulsar IterationsFALSETRUETRUE

2 C5.0modelModel TypeFALSETRUETRUE
3 C5.0winnowWinnowFALSETRUETRUE

El objetivo de la sintonización automática es para buscar un conjunto de modelos


candidatos que comprende una matriz o rejilla, de combinaciones de parámetros.
Debido a que es poco práctico para buscar todas las combinaciones imaginables, sólo
un subconjunto de posibilidades se utiliza para construir la red. Por defecto, símbolo
de intercalación busca en un máximo de tres valores para cada uno de los
parámetros p. Esto significa que como máximo 3 ^ p modelos candidatos serán
probados. Por ejemplo, por defecto, la sintonización automática de k-vecinos más
cercanos comparará modelos 3 ^ 1 = 3 candidatos con k = 5, k = 7, y k = 9. Del
mismo modo, la sintonización de un árbol de decisión dará lugar a una comparación
de hasta 27 modelos diferentes candidatos, que comprende la cuadrícula de 3 ^ 3 =
27 combinaciones de modelos, pruebas, y aventar configuración. En la práctica, sin
embargo, sólo 12 modelos están realmente a prueba.

Desde la red de búsqueda predeterminado puede no ser ideal


para su problema de aprendizaje, símbolo de intercalación le
permite proporcionar una rejilla de búsqueda personalizada
definida por un simple comando, que vamos a cubrir más
tarde.

El tercer y último paso en la sintonización automática modelo implica identificar el


mejor modelo entre los candidatos. Este sistema utiliza los métodos discutidos en el
capítulo 10, Evaluación del desempeño del modelo, como la elección de la estrategia
de remuestreo para la creación de capacitación y prueba de datos y el uso de las
estadísticas de rendimiento modelo para medir la exactitud predictiva.
Todas las estrategias de remuestreo y muchas de las estadísticas de rendimiento que
hemos aprendido son apoyados por intercalación. Estos incluyen estadísticas tales
como la precisión y kappa (para clasificadores) y R-cuadrado o RMSE (para modelos
numéricos). medidas sensibles al coste tales como la sensibilidad, especificidad, y el
área bajo la curva ROC (AUC) también se pueden utilizar, si se desea.
Por defecto, símbolo de intercalación seleccionará el modelo candidato con el
mayor valor de la medida de rendimiento deseado. Como esta práctica a veces
[ 354 ]
resulta en la selección de modelos que permitan alcanzar mejoras en el
rendimiento marginales a través de un gran aumento de la complejidad del
modelo, se proporcionan funciones de selección de modelos alternativos.

[ 355 ]
Mejora del rendimiento del modelo

Dado la amplia variedad de opciones, es útil que muchos de los valores por defecto
son razonables. Por ejemplo, símbolo de intercalación utilizará precisión de la
predicción en una muestra de arranque para elegir el mejor desempeño de los
modelos de clasificación. A partir de estos valores por defecto, podemos ajustar la
función de tren () para diseñar una amplia variedad de experimentos.

La creación de un modelo sencillo sintonizado


Para ilustrar el proceso de afinar un modelo, vamos a empezar por la observación de
lo que sucede cuando se intenta ajustar el modelo de calificación de crédito a través
de la configuración predeterminada del paquete de intercalación. A partir de ahí,
vamos a ajustar las opciones a nuestro gusto.
La forma más sencilla de ajustar un alumno requiere sólo permite especificar un
tipo de modelo a través del parámetro de método. Ya que utilizamos C5.0 árboles
de decisión previamente con el modelo de crédito, continuaremos nuestro trabajo
mediante la optimización de este alumno. El comando de tren básica () para el
ajuste de un árbol de decisión C5.0 con la configuración predeterminada es la
siguiente:
> biblioteca (caret)
> set.seed (300)
> m <- tren (. ~ defecto, los datos = crédito, method = "C5.0")

En primer lugar, la función set.seed () se utiliza para inicializar el generador de números


aleatorios de R
a un conjunto posición inicial. Se recordará que hemos utilizado esta función en
varios capítulos anteriores. Al establecer el parámetro de semillas (en este caso al
número arbitrario 300), los números aleatorios se siga una secuencia predefinida.
Esto permite simulaciones que utilizan muestreo aleatorio a ser repetidos con
resultados-a idénticas característica muy útil si está compartiendo código o el intento
de replicar un resultado anterior.
A continuación, definimos un árbol por defecto ~. utilizando la interfaz de fórmula
R. Este estado de morosidad modelos (sí o no) el uso de todas las otras características
de la trama de datos de crédito. El método de parámetros = "C5.0" dice símbolo de
intercalación de utilizar la decisión C5.0
algoritmo de árbol.
Después de haber introducido el comando anterior, puede haber un retraso
significativo (depende de la capacidad del ordenador) como se produce el proceso
de ajuste. A pesar de que este es un bastante pequeño conjunto de datos, debe
producirse una cantidad sustancial de cálculo. R debe generar repetidamente
muestras aleatorias de los datos, construir árboles de decisión, las estadísticas de
rendimiento de cómputo, y evaluar el resultado.
[ 356 ]
El resultado del experimento se guarda en un objeto denominado m. Si desea
examinar el contenido del objeto, el comando str (m) mostrará una lista de todos los
datos asociados, pero esto puede ser bastante abrumador. En su lugar, simplemente
escriba el nombre del objeto para un resumen condensado de los resultados. Por
ejemplo, escribiendo m se obtiene la siguiente salida (tenga en cuenta que las
etiquetas se han añadido para mayor claridad):

[ 357 ]
Capítulo 11

Las etiquetas destacan cuatro componentes principales en la salida:

1. Una breve descripción del conjunto de datos de entrada: Si está


familiarizado con sus datos y ha aplicado la entrenar() función
correctamente, esta información no debería ser sorprendente.
2. Un informe de los métodos de procesamiento previo y nuevo muestreo
aplicado: En este caso, vemos que 25 muestras de arranque, incluyendo
cada 1.000 ejemplos, se utilizaron para entrenar los modelos.
3. Una lista de los modelos candidatos evaluados: En esta sección, podemos
confirmar que 12 modelos diferentes fueron probados, basado en la
combinación de tres C5.0 sintonía Parámetros-modelo, ensayosy aventar.
La media y la desviación estándar de las estadísticas de precisión y kappa
para cada modelo candidato también se muestran.
4. La elección del mejor modelo: Como la nota describe, se seleccionó el
modelo con la exactitud más grande. Este fue el modelo que utiliza un árbol
de decisión con 20 pruebas y el ajusteaventar = FALSE.

[ 358 ]
Mejora del rendimiento del modelo

Después de identificar el mejor modelo, el tren () función utiliza sus parámetros


de ajuste para construir un modelo en el conjunto de datos de entrada completa,
que se almacena en el objeto m lista
como m $ finalModel. En la mayoría de los casos, no tendrá que trabajar
directamente con lafinalModel sub-objeto. En lugar de ello, basta con
utilizar elpredecir() función con el metro objeto de la siguiente manera:
> p <- predecir (m, crédito)

El vector resultante de las predicciones funciona como se espera, que nos


permite crear una matriz de confusión que compara los valores predichos y
reales:
> mesa (p, el crédito por defecto $)

Pno

no700
2
yes0 298

De los 1.000 ejemplos utilizados para entrenar el modelo final, sólo dos fueron mal
clasificados. Sin embargo, es muy importante tener en cuenta que, dado que el
modelo se construyó en ambos los datos de entrenamiento y de prueba, esta
precisión es optimista y, por tanto, no debe considerarse
como indicativo de rendimiento en los datos no se ven. La estimación de arranque
del 73 por ciento (se muestra en resumen de la salida) es una estimación más
realista de los resultados futuros.

Utilizando la entrenar() y predecir() funciones también ofrece un par de ventajas en


Además de la afinación automática de parámetros.
En primer lugar, cualquier pasos de preparación de los datos aplicados por la
función de tren () se aplicarán de manera similar a los datos utilizados para la
generación de predicciones. Esto incluye transformaciones, como el centrado y la
ampliación, así como la imputación de los valores que faltan. Permitiendo cursor
para manejar la preparación de los datos se asegurará de que las medidas que
contribuyeron a la actuación del mejor modelo permanecerán en su lugar cuando
se implementa el modelo.
En segundo lugar, la función de predecir () proporciona una interfaz estándar para
la obtención de los valores de clase pronosticados y probabilidades de clase,
incluso para los tipos de modelo que normalmente se requieren pasos adicionales
para obtener esta información. Las clases predichos se proporcionan de manera
predeterminada:
[ 359 ]
> cabeza (predecir (m, crédito))
[1] no si nonoyes
no
Niveles: no si

[ 360 ]
Capítulo 11

Para obtener las probabilidades estimadas para cada clase, utilice el parámetro type =
"prob":
> cabeza (predecir (m, crédito, tipo = "prob"))
no sí
1 0.9606970 0.03930299
2 0.1388444 0.86115561
3 1.0000000 0.00000000
4 0.7720279 0.22797208
5 0.2948062 0.70519385
6 0.8583715 0.14162851

función, incluso en los casos en que el modelo subyacente se refiere a las


probabilidades de predicción utilizando una cadena diferente (por ejemplo, "en
bruto" para un modelo naiveBayes), el predicen () se traducirá type = "prob" a la
cadena apropiada detrás de las escenas.

Personalización del proceso de sintonización


El árbol de decisiones que hemos creado anteriormente demuestra la capacidad del
paquete de intercalación para producir un modelo optimizado con una intervención
mínima. La configuración predeterminada permite modelos optimizados para ser
creados fácilmente. Sin embargo, también es posible cambiar la configuración
predeterminada a algo más específico para una tarea de aprendizaje, que puede
ayudar a desbloquear el escalón superior de rendimiento.
Cada paso en el proceso de selección de modelo se puede personalizar. Para
ilustrar esta flexibilidad, vamos a modificar nuestro trabajo en el árbol de
decisiones de crédito para reflejar el proceso que habíamos utilizado en el capítulo
10, Evaluación del desempeño del modelo. Si usted recuerda, que había estimado
la estadística kappa utilizando 10 veces la validación cruzada. Haremos lo mismo
aquí, el uso de kappa para optimizar el parámetro de impulso del árbol de
decisión. Tenga en cuenta que el árbol de decisiones impulsar estaba cubierto
anteriormente en el capítulo 5, divide y vencerás -
Utilización de árboles de clasificación y reglas de decisiónY también se tratarán en mayor
detalle más adelante este capítulo.
La función trainControl () se utiliza para crear un conjunto de opciones de
configuración conocidos como un objeto de control, que guía la función de tren ().
Estas opciones permiten la gestión de los criterios de evaluación modelo como la
estrategia de remuestreo y la medida utilizada para elegir el mejor modelo. Aunque
esta función se puede utilizar para modificar casi todos los aspectos de un
experimento de sintonía, nos centraremos en los dos parámetros importantes:

[ 361 ]
método y selectionFunction.

Si estás ansioso para más detalles, puede usar el


? TrainControl comando para obtener una lista de todos
los parámetros.

[ 362 ]
Mejora del rendimiento del modelo

Para la función de trainControl (), el parámetro de método se utiliza para establecer


el método de remuestreo, tales como el muestreo holdout o k-veces la validación
cruzada. La siguiente tabla muestra los posibles tipos de método, así como cualquier
parámetro adicional para ajustar el tamaño de la muestra y el número de
iteraciones. Aunque las opciones por defecto para estos métodos de remuestreo
siguen la convención popular, usted puede optar por ajustar éstos, dependiendo del
tamaño del conjunto de datos y la complejidad de su modelo.

método de remuestreo nombre del opciones y valores por defecto adicional


método
muestreo de retención LGOCV p = 0,75 (proporción de datos
de entrenamiento)
k-veces la validación cruzada CV número = 10 (número de
pliegues)
Repetida k veces repeatedcv número = 10 (número de
validación cruzada pliegues)
repeticiones = 10 (número de
iteraciones)
arranque de muestreo bota número = 25 (iteraciones de
remuestreo)
0,632 bootstrap boot632 número = 25 (iteraciones de
remuestreo)
Deja fuera de una validación LOOCV Ninguna
cruzada

El parámetro selectionFunction se utiliza para especificar la función que va a elegir


el modelo óptimo entre los diversos candidatos. Tres de tales funciones se incluyen.
La mejor función simplemente elige el candidato con el mayor valor en la medida de
rendimiento especificado. Esto se utiliza por defecto. Las otras dos funciones se
utilizan para elegir el más parsimonioso, o más simple, modelo que está dentro de
un cierto umbral de rendimiento del mejor modelo. La función oneSE elige el
candidato más simple dentro de un error estándar de la mejor rendimiento y
tolerancia utiliza el candidato más simple dentro de un porcentaje especificado por
el usuario.

Algunos subjetividad está involucrado con la clasificación del


paquete de intercalación de modelos por la sencillez. Para
obtener información acerca de cómo se clasifican los modelos,
consulte la página de ayuda para las funciones de selección
escribiendo
? Mejor en el símbolo R.

Para crear un objeto de control llamado ctrl que utiliza 10 veces la validación
[ 363 ]
cruzada y la función de selección oneSE, utilice el siguiente comando (tenga en
cuenta que el número = 10 sólo se incluye para mayor claridad; ya que este es el
valor por defecto para el método = "cv", que podría haber sido omitido):
> ctrl <- trainControl (método = "cv", número = 10,
selectionFunction = "oneSE")

Vamos a utilizar el resultado de esta función en breve.

[ 364 ]
Capítulo 11

Mientras tanto, el siguiente paso en la definición de nuestro experimento es crear la


red de parámetros a optimizar. La rejilla debe incluir una columna llamada para
cada parámetro en el modelo deseado, con el prefijo de un período. También debe
incluir una fila para cada combinación deseada de valores de parámetros. Puesto
que estamos utilizando un árbol de decisión C5.0, esto significa que necesitaremos
columnas llamadas .model, .trials y .winnow. Para otros modelos de aprendizaje
automático, consulte la tabla presentada anteriormente en este capítulo o utilizar la
función modelLookup () para buscar los parámetros como se describe
anteriormente.
En lugar de llenar esta célula trama de datos por célula una tarea tediosa si hay
muchas combinaciones posibles de valores de parámetro-podemos utilizar la
función expand.grid (), que crea tramas de datos a partir de las combinaciones de
todos los valores suministrados. Por ejemplo, supongamos que nos gustaría
mantener constante del modelo = "árbol" y aventar
= "FALSO" mientras busca ocho valores diferentes de ensayos. Esto se
puede crear como:
> rejilla <- expand.grid (.model = "árbol",
.trials = c (1, 5, 10, 15, 20, 25, 30, 35),
.winnow = "FALSE")

La trama de datos de cuadrícula resultante contiene 1 * 8 * 1 = 8 filas:


> cuadrí
cula
.trials .aventa
.model r
o
1 1 FALSO
árbo
l
2 5 FALSO
árbo
l
3 10 FALSO
árbo
l
4 15 FALSO
árbo
l
5 20 FALSO
árbo
l
6 25 FALSO
árbo
l

[ 365 ]
7 30 FALSO
árbo
l
8 35 FALSO
árbo
l

La función de tren () construirá un modelo candidato para la evaluación mediante


la combinación de cada fila de los parámetros del modelo.
Dada esta red de búsqueda y la lista de control creado con anterioridad, estamos
listos para ejecutar un experimento de tren de fondo personalizado (). Como hicimos
antes, vamos a establecer la semilla aleatoria al número arbitrario 300 con el fin de
garantizar resultados repetibles. Pero esta vez, vamos a pasar nuestro objeto y
puesta a punto rejilla de control, mientras que la adición de una métrica parámetro =
"Kappa", indica la estadística para ser utilizado por la evaluación del modelo de
función, en este caso, "oneSE". El comando completo es el siguiente:
> set.seed (300)
> m <- tren (por defecto ~, los datos = crédito, method = "C5.0",.

[ 366 ]
Mejora del rendimiento del modelo

métrica =
"Kappa",
trControl = ctrl,
tuneGrid = grid)

Esto se traduce en un objeto que podemos ver escribiendo su nombre:

> metro

Aunque gran parte de la producción es similar al modelo de sintonía automática,


hay algunas diferencias notables. Como se utilizó 10 veces la validación cruzada,
el tamaño de la muestra para construir cada modelo candidato se redujo a 900 en
lugar de la 1000 utilizado en la rutina de carga. Como habíamos pedido, se
probaron ocho modelos candidatos. Adicionalmente,
porque el modelo y aventar se mantiene constante, sus valores ya no se muestran
en los resultados; En su lugar, se enumeran como una nota al pie.

[ 367 ]
Capítulo 11

El mejor modelo aquí difiere de forma significativa de la prueba anterior. Antes, el


mejor modelo = 20 ensayos utilizado, mientras que aquí, se utilizaron los ensayos
= 1. Este resultado aparentemente extraño es debido al hecho de que se utilizó la
regla en lugar oneSE la mejor regla para seleccionar el modelo óptimo. A pesar de
que el modelo 35-ensayo ofrece el mejor rendimiento en bruto según la kappa, el
modelo 1-ensayo ofrece casi el mismo rendimiento con una forma mucho más
simple. No sólo son simples modelos más eficientes computacionalmente, sino que
también reducen el riesgo de sobreajuste los datos de entrenamiento.

La mejora de rendimiento de los


modelos con meta-aprendizaje
Como alternativa a aumentar el rendimiento de un solo modelo, es posible combinar
varios modelos para formar un equipo de gran alcance. Al igual que los mejores
equipos deportivos tienen jugadores con más complementarios que se solapan de
habilidades, algunos de los mejores algoritmos de aprendizaje automático utilizar
equipos de modelos complementarios. Desde un modelo trae un sesgo única para
una tarea de aprendizaje, puede aprender fácilmente un subconjunto de ejemplos,
pero tienen problemas con otro. Por lo tanto, mediante el uso inteligente de los
talentos de varios miembros del equipo diversos, es posible crear un equipo fuerte
de múltiples debilidad de los alumnos.
Esta técnica de combinar y administrar las predicciones de varios modelos cae en un
conjunto más amplio de métodos de meta-aprendizaje que definen las técnicas que
implican aprender a aprender. Esto incluye cualquier cosa a partir de algoritmos
simples que poco a poco mejorar el rendimiento mediante la iteración en el diseño
decisiones; por ejemplo, el parámetro de ajuste automático utilizado anteriormente
en este capítulo a algoritmos altamente complejos que utilizan conceptos tomados de
la biología evolutiva y la genética para la auto-modificación y adaptación al
aprendizaje Tareas.
Para el resto de este capítulo, nos centraremos en el meta-aprendizaje única en lo
que respecta a modelar una relación entre las predicciones de varios modelos y el
resultado deseado. Las técnicas basadas en el trabajo en equipo cubiertos aquí son
muy poderosos, y se utilizan muy a menudo para construir clasificadores más
eficaces.

La comprensión de los conjuntos


Supongamos que un concursante de un programa de televisión trivia que le ha
permitido elegir un panel de cinco amigos para ayudarle con la respuesta a la
pregunta final para el premio de un millón de dólares. La mayoría de la gente

[ 368 ]
trataría de apilar el panel con un conjunto diverso de expertos en la materia. Un
panel que contiene profesores de literatura, la ciencia, la historia y el arte, junto con
un experto en la cultura pop actual sería un grupo con seguridad bien redondeado.
Dada su amplitud de conocimientos, sería poco probable encontrar una pregunta
que el grupo tocones.

[ 369 ]
Mejora del rendimiento del modelo

El enfoque meta-aprendizaje que utiliza un principio similar de crear un


equipo variado de expertos se conoce como un conjunto. Todos los métodos se
basan conjunto
en la idea de que mediante la combinación de varios estudiantes más débiles, se crea un
alumno más fuerte.
Los diversos métodos de conjunto se pueden distinguir, en gran parte, por las
respuestas a estas dos preguntas:

• ¿Cómo son los modelos de aprendizaje débiles elegidos y / o construidos?


• ¿Cómo se combinan las predicciones de los alumnos débiles para hacer una sola
predicción final?
Al contestar a estas preguntas, puede ser útil imaginar el conjunto en términos
de la siguiente diagrama de proceso; casi todos los enfoques de conjunto
siguen este patrón:

En primer lugar, los datos de entrenamiento de entrada se utiliza para construir


una serie de modelos. La función de asignación determina qué parte de los datos
de entrenamiento cada modelo recibe. ¿Es que cada uno recibe la formación de
datos completa o sólo una muestra? Hacen cada uno recibe cada característica o un
subconjunto?
A pesar de que el conjunto ideal incluye un conjunto diverso de modelos, la función
de asignación puede aumentar la diversidad variando artificialmente los datos de
entrada al sesgo de los alumnos resultantes, incluso si son del mismo tipo. Por
ejemplo, se podría utilizar el muestreo bootstrap para construir únicos conjuntos de
datos de formación o pasar en un subconjunto diferente de características o ejemplos
para cada modelo. Por otro lado, si el conjunto ya incluye un conjunto diverso de
algoritmos, tales como una red neuronal, un árbol de decisiones, y un clasificador de
la función de asignación k-NN podrían pasar los datos a cada algoritmo
relativamente sin cambios.

[ 370 ]
Capítulo 11

Después los modelos se construyen, que se pueden utilizar para generar un conjunto
de predicciones, que deben ser gestionados de alguna manera. La función de
combinación gobierna cómo se concilian los desacuerdos entre las predicciones. Por
ejemplo, el conjunto podría usar un voto de la mayoría para determinar la predicción
final, o podría utilizar una estrategia más compleja, como la ponderación de los
votos de cada modelo en función de su desempeño anterior.
Algunos conjuntos incluso utilizan otro modelo para aprender una función de la
combinación de varias combinaciones de predicciones. Por ejemplo, supongamos
que cuando M1 y M2 tanto voto afirmativo, el valor real de la clase es por lo
general no. En este caso, el conjunto podría aprender a ignorar el voto de M1 y
M2 cuando están de acuerdo. Este proceso de utilización de las predicciones de
varios modelos para entrenar un modelo árbitro final se conoce como
apilamiento.

Uno de los beneficios del uso de conjuntos es que pueden permitir que pase menos
tiempo en la búsqueda de un mejor modelo. En su lugar, se puede entrenar a un
número de candidatos razonablemente fuertes y combinarlos. Sin embargo, la
comodidad no es la única razón por la que los métodos basados en conjunto siguen
acumular victorias en competiciones de aprendizaje automático; conjuntos también
ofrecen una serie de ventajas de rendimiento sobre los modelos individuales:
• Mejor generalización a problemas en el futuro: Como las opiniones de
varios aprendices se incorporan en una única predicción final, no sesgo
sola es capaz de dominar. Esto reduce la posibilidad de un ajuste por
exceso a una tarea de aprendizaje.
• Mejora el rendimiento de grandes conjuntos de datos o minúsculas:
Muchos modelos topan con límites de memoria o complejidad cuando una
cantidad extremadamente grande conjunto de características
o se utilizan ejemplos, por lo que es más eficiente para capacitar a varios
[ 371 ]
modelos pequeños que un solo modelo completo. Por el contrario, conjuntos
también hacen bien en los conjuntos de datos más pequeños porque los
métodos de remuestreo como bootstrapping son inherentemente una parte
de muchos diseños de conjunto. Quizás lo más importante, a menudo es
posible entrenar a un conjunto en paralelo usando métodos de computación
distribuida.

[ 372 ]
Mejora del rendimiento del modelo

• La capacidad para sintetizar los datos de dominios distintos: Puesto que no


hay talla única, todo algoritmo de aprendizaje, la capacidad del conjunto de
incorporar la evidencia de múltiples tipos de estudiantes es cada vez más
importante como fenómenos complejos se basan en los datos extraídos de
diversos dominios.
• Una comprensión más matizada de las tareas de aprendizaje difíciles:
Fenómenos del mundo real son a menudo muy compleja con muchas
complejidades que interactúan. Modelos que dividen la tarea en porciones
más pequeñas son propensos a captar con mayor precisión los patrones
sutiles que un solo modelo global podría perder.
Ninguno de estos beneficios sería muy útil si no fuera capaz de aplicar fácilmente
métodos de conjunto en R, y hay muchos paquetes disponibles para hacer
precisamente eso. Vamos a echar un vistazo a varios de los métodos más populares
de conjunto y cómo pueden ser utilizados para mejorar el rendimiento del modelo
de crédito que hemos estado trabajando.

Harpillera
Uno de los primeros métodos de conjunto para lograr la aceptación generalizada
utilizaron una técnica llamada de agregación de arranque o embolsado para
abreviar. Como se describe por Leo Breiman en 1994, ensacado genera un número
de conjuntos de datos de formación por arranque de muestreo de los datos de
entrenamiento originales. Estos conjuntos de datos se utilizan entonces para generar
un conjunto de modelos utilizando un único algoritmo de aprendizaje. predicciones
de los modelos se combinan utilizando la votación (para la clasificación) o promedio
(para la predicción numérica).

Para obtener información adicional acerca de ensacado, consulte Breiman L.


predictores de ensacado. Aprendizaje automático. 1996; 24: 123-140.

Aunque embolsado es un conjunto relativamente simple, puede realizar bastante


bien, siempre que se utiliza con los alumnos relativamente inestables, es decir, esos
modelos de generación que tienden a cambiar sustancialmente cuando los cambios
de datos de entrada sólo ligeramente. modelos inestables son esenciales para
asegurar la diversidad del conjunto, a pesar de sólo pequeñas variaciones entre los
conjuntos de datos de entrenamiento de rutina de carga. Por esta razón, el
embolsado se usa a menudo con árboles de decisión, que tienen la tendencia a variar
drásticamente cambios menores dados en los datos de entrada.
El paquete IPRED ofrece una aplicación clásica de los árboles de decisión bolsas.
Para entrenar el modelo, la función de embolsado () funciona de forma similar a
muchos de los modelos utilizados anteriormente. El parámetro nbagg se utiliza
[ 373 ]
para controlar el número de árboles de decisión de voto en el conjunto (con un
valor por defecto de 25). Dependiendo de la dificultad
de la tarea de aprendizaje y la cantidad de datos de entrenamiento, aumentando
este número puede mejorar el rendimiento del modelo, hasta un límite. La
desventaja es que esto se produce a expensas del gasto de cálculo adicional, ya
que un gran número de árboles puede tomar algún tiempo para entrenar.

[ 374 ]
Capítulo 11

Después de instalar el paquete IPRED, podemos crear el conjunto de la siguiente


manera. Nos ceñiremos al valor por defecto de 25 árboles de decisión:
> biblioteca (IPRED)
> set.seed (300)
> mybag <- embolsado (. ~ defecto, los datos = crédito, nbagg = 25)

El modelo resultante funciona como se esperaba con la función de predecir ():


> credit_pred <- predecir (mybag, crédito)
> mesa (credit_pred, el crédito $ defecto)

credit_predno sí
no699 2
sí1 298

Dados los resultados anteriores, el modelo parece tener los datos del entrenamiento
ajuste extremadamente bien. Para ver cómo esto se traduce en un rendimiento
futuro, podemos utilizar los árboles en bolsas con 10 veces CV utilizando la función
de tren () en el paquete de intercalación. Tenga en cuenta que el nombre del método
para la función de los árboles en bolsas IPRED es TreeBag:
> biblioteca (caret)
> set.seed (300)
> ctrl <- trainControl (método = "cv", número = 10)
> tren (por defecto ~., datos = crédito, method =
"TreeBag", trControl = ctrl)

Carro en bolsas

1000 muestras
16 predictor
2 clases: 'no', 'sí'

No se pre-procesamiento
El remuestreo: Cross-Validated (10 veces)

Resumen de los tamaños de la muestra: 900, 900, 900, 900, 900,

900, ... Resultados de remuestreo

AccuracyKappaAccuracy

[ 375 ]
SDKappa SD 0.7350.32977260.03439961
0.08590462

[ 376 ]
Mejora del rendimiento del modelo

El índice kappa de 0,33 para este modelo sugiere que el modelo de árbol en
bolsas realiza al menos tan bien como el mejor árbol de decisión C5.0
sintonizábamos anteriormente en este capítulo. Esto ilustra el poder de los
métodos de conjunto; un conjunto de estudiantes que trabajan juntos simples
puede superar a modelos muy sofisticados.
Para ir más allá de las bolsas de los árboles de decisión, el paquete de intercalación
también proporciona una función más general bolsa (). Incluye soporte nativo para
un puñado de modelos, a pesar de que se puede adaptar a otros tipos con un poco
de esfuerzo adicional. La función de la bolsa () utiliza un objeto de control para
configurar el proceso de embolsado. Se requiere la especificación de tres funciones:
una para ajustar el modelo, uno para hacer predicciones, y uno para la agregación
de los votos.
Por ejemplo, supongamos que queríamos crear un soporte modelo de máquina de
vectores en bolsas, utilizando la función ksvm () en el paquete kernlab se utilizó en
el capítulo 7, Negro
Métodos Box - redes neuronales y máquinas de vectores soporte. losbolso()
función requiere para proporcionar una funcionalidad para la formación de
las SVM, haciendo predicciones, y el conteo de votos.
En lugar de escribir estos mismos, incorporados en la lista svmBag de suministro
que tres funciones del paquete de intercalación que se pueden utilizar para este
propósito:
> str
(svmBag)
Lista de 3
PS encajar: function (x, y, ...)
PS pred: function (objeto, X)
$ Agregada: function (x, type = "clase")

Al observar el svmBag $ ajuste función, vemos que simplemente llama al ksvm ()


la función del paquete kernlab y devuelve el resultado:
> svmBag $ función
de ajuste (x, y,
...)
{
biblioteca (kernlab)
fuera <- ksvm (as.matrix (x), y, prob.model = is.factor (y),
...) hacia fuera
}

[ 377 ]
<Medio ambiente: espacio de nombres: cursor>

Las funciones pred y agregados para svmBag también son igualmente sencilla.
Mediante el estudio de estas funciones y la creación de su propio en el mismo
formato, es posible utilizar embolsado con cualquier algoritmo de aprendizaje
automático que le gustaría.

[ 378 ]
Capítulo 11

El paquete también incluye símbolo de intercalación ejemplo


objetos de bolsas de Bayes modelos ingenuos (nbBag),
árboles de decisión (ctreeBag) y redes neuronales (nnetBag).

La aplicación de las tres funciones en la lista svmBag, podemos crear un objeto de control
de ensacado:
> bagctrl <- bagControl (adaptarse = $ svmBag ajuste,
predecir = svmBag $ pred,
agregada = $ svmBag agregada)

Mediante el uso de esta con la función de tren () y el objeto de control de la


formación (ctrl), definido anteriormente, podemos evaluar el modelo SVM en bolsas
de la siguiente manera (en cuenta que se requiere el paquete kernlab para que esto
funcione, tendrá que instalarlo si que no lo ha hecho anteriormente):
> set.seed (300)
> svmbag <- tren (por defecto ~, los datos de crédito = "bolsa",.
trControl = ctrl, bagControl = bagctrl)
> svmbag

Embolsados
Modelo 1000
muestras
16 predictores
2 clases: 'no', 'sí'

No se pre-procesamiento
El remuestreo: Validación cruzada (10 veces)

Resumen de tamaño de la muestra: 900, 900, 900, 900, ...


900, 900,

remuestreo resultados

Exactitud KappaAccuracy kappa SD


Dakota del Sur
0,728 0.29295050.04442222 0.1318101

parámetro de ajuste 'vars' se mantuvo constante a un valor de 35


[ 379 ]
Mejora del rendimiento del modelo

Dado que la estadística kappa es inferior a 0,30, parece que el modelo SVM en
bolsas realiza peor que el modelo de árbol de decisión en bolsas. Vale la pena
señalar que la desviación estándar de la estadística kappa es bastante grande en
comparación con el embolsados
modelo de árbol de decisión. Esto sugiere queel rendimiento varía sustancialmente
entre los pliegues de la validación cruzada. Tal variación puede implicar que el
rendimiento puede ser mejorado aún más por cambiando el número de modelos en
el conjunto.

impulsar
Otro método basado en el conjunto común se llama impulso, ya que aumenta el
rendimiento de los estudiantes débiles para alcanzar el rendimiento de los
estudiantes más fuertes. Este método se basa en gran parte en la obra de Robert
Schapire y Yoav Freund, que han publicado numerosos trabajos sobre el tema.

Para obtener información adicional en impulsar, consulte Schapire RE,


Freund Y. Impulsar: Fundamentos y algoritmos. Cambridge,
MA, The MIT Press; 2012.

Usos similares al ensacado, impulsando conjuntos de modelos entrenados en los


datos de la nueva muestra y una votación para determinar la predicción final.
Hay dos diferencias clave. En primer lugar, los conjuntos de datos
remuestreados en el impulso se construyen específicamente para generar
aprendices complementarias. En segundo lugar, en vez de dar a cada alumno
un voto igual,
impulsar da el voto de cada alumno un peso sobre la base de su desempeño anterior.
modelos
que funcionan mejor tienen una mayor influencia sobre predicción final del conjunto.
Impulsar, resultara en la que a menudo es bastante mejor y ciertamente no es peor
que el mejor de los modelos en el conjunto. Dado que los modelos en el conjunto
están construidos para ser complementarios, es posible aumentar el rendimiento
de conjunto a un umbral arbitrario simplemente añadiendo clasificadores
adicionales para el grupo, suponiendo que cada clasificador se comporta mejor que
el azar. Dada la evidente utilidad de este hallazgo, se cree boosting a ser uno de los
descubrimientos más significativos en el aprendizaje automático.

Aunque impulsar puede crear un modelo que cumple con una tasa de
error arbitrariamente baja, esto no siempre puede ser razonable en la
práctica. Por un lado, las mejoras de rendimiento son progresivamente
menor a medida que se añaden los estudiantes adicionales, por lo que
algunos umbrales prácticamente inviable. Además, la búsqueda de
[ 380 ]
precisión puro puede resultar en el modelo que se está overfitted a los
datos de entrenamiento y no generalizables a los datos que no se ven.

[ 381 ]
Capítulo 11

Un algoritmo de impulsar la llamada AdaBoost o de adaptación boosting fue


propuesto por Freund y Schapire en 1997. El algoritmo se basa en la idea de
generar debilidad de los alumnos que aprenden de manera iterativa una
porción más grande de la difícil-a-clasificar los ejemplos prestando más
atención (es decir, dando más peso) a mal clasificado frecuencia ejemplos.
A partir de un conjunto de datos sin ponderar, el primer clasificador intenta
modelar el resultado. Ejemplos que el clasificador predijo correctamente será
menos probable que aparezca en la formación de datos para el siguiente
clasificador, y por el contrario, la
ejemplos difíciles a clasificar aparecerán con mayor frecuencia. A medida que se
añaden rondas adicionales de debilidad de los alumnos, que están capacitados en los
datos con ejemplos sucesivamente más difíciles. El proceso continúa hasta que se
alcanza la tasa de error global deseada o el rendimiento ya no mejora. En ese
momento, el voto de cada clasificador se pondera en función de su precisión en los
datos de entrenamiento en los que fue construida.
Aunque los principios impulsando se pueden aplicar a casi cualquier tipo de
modelo, los principios son los más utilizados con los árboles de decisión. Ya hemos
utilizado impulsar de esta manera en el capítulo 5, divide y vencerás - Clasificación a
partir de árboles de decisión y reglas, como un método para mejorar el rendimiento
de un árbol de decisión C5.0.
El algoritmo AdaBoost.M1 proporciona otra aplicación basada en el árbol de
la AdaBoost para la clasificación. El algoritmo AdaBoost.M1 se puede
encontrar en el paquete Adabag.

Para obtener más información sobre el paquete Adabag, consulte Alfaro E,


Gamez M, García N. Adabag - un paquete de R para la clasificación de impulsar
y ensacado. Journal of Statistical Software. 2013; 54: 1-35.

Vamos a crear un clasificador AdaBoost.M1 de los datos de crédito. La sintaxis general


para este
algoritmo es similar a otras técnicas de modelado:
> set.seed (300)
> m_adaboost <- impulsar (. ~ predeterminada, los datos de crédito =)

Como de costumbre, el predicen () la función se aplica al objeto resultante para hacer


predicciones:
> p_adaboost <- predecir (m_adaboost, crédito)

Saliendo de convención, en lugar de devolver un vector de predicciones, este


devuelve un objeto con información sobre el modelo. Las predicciones se

[ 382 ]
almacenan en una clase de sub-objeto llamado:
> cabeza ($ clase p_adaboost)
[1] "no si" "No" "no" "sí" "no"

[ 383 ]
Mejora del rendimiento del modelo

Una matriz de confusión se puede encontrar en la confusión de subobjeto:


> p_adaboost $ confusión
Clase
observada Prevista Classno

no7000
yes0 300

¿Se dio cuenta de que el modelo AdaBoost no ha cometido errores? Antes de que se
haga ilusiones, recordar que la matriz de confusión anterior se basa en el
rendimiento del modelo a los datos de entrenamiento. Desde impulsar permite que
la tasa de error se reduzca a un nivel arbitrariamente bajo, el alumno simplemente
continuó hasta que no hizo más errores. Esto probablemente dio lugar a un ajuste
por exceso en la formación de datos.
Para una evaluación más precisa del rendimiento en los datos que no se ven,
tenemos que utilizar otro método de evaluación. El paquete Adabag
proporciona una función simple de usar CV de 10 veces:
> set.seed (300)
> adaboost_cv <- boosting.cv (. ~ predeterminada, los datos de crédito =)

Dependiendo de la capacidad del ordenador, esto puede tomar algún tiempo para
correr, durante el cual se registrará cada iteración a la pantalla. Después de que se
complete, podemos ver una matriz de confusión más razonable:
> adaboost_cv $ confusión
Clase
observada Prevista Classno

no594 151
Sí 106 149

Podemos encontrar la estadística kappa utilizando el VCD paquete como se


describe en el capítulo 10, Evaluación de Desempeño Modelo.
> biblioteca (VCD)
> Kappa (adaboost_cv $ confusión)
valor
Pla
za bursátil norteamericana
0.3606965 0.0323002 no
[ 384 ]
ponderado
Weighted0.3606965 0.0323002

[ 385 ]
Capítulo 11

Con un kappa de aproximadamente 0,36, esto es nuestro modelo de calificación de


crédito con mejores resultados todavía. Vamos a ver cómo se compara con un último
método de conjunto.

El algoritmo AdaBoost.M1 puede sintonizarse en caret


especificando method = "AdaBoost.M1".

Random bosques
Otro método llamado bosques aleatorios basados en conjunto (o bosques de
árboles de decisión) se centra sólo en los conjuntos de árboles de decisión. Este
método fue defendido por Leo Breiman y Adele Cutler, y combina los principios
básicos de embolsado con la función de selección aleatoria para agregar una
diversidad adicional a los modelos de árboles de decisión.
Después de que el conjunto de árboles (el bosque) se genera, el modelo utiliza un
voto para combinar las predicciones de los árboles.

Para más detalles sobre cómo los bosques al azar se construyen,


consulte Breiman L. azar Bosques. Aprendizaje automático.
2001; 45: 5-32.

Random bosques combinan versatilidad y potencia en una sola máquina de


aprendizaje. A medida que el conjunto utiliza sólo una parte pequeña, al azar del
conjunto completo de características, bosques aleatorios pueden manejar datos
extremadamente grandes, donde la llamada "maldición de la dimensionalidad"
podría causar otros modelos que fracasan. Al mismo tiempo, sus tasas de error para
la mayoría de las tareas de aprendizaje son casi a la par con cualquier otro método.

Aunque el término "Random Forests" es una marca registrada


por Breiman y Cutler, el término se utiliza a veces
coloquialmente para referirse a cualquier tipo de conjunto de
árbol de decisión. Un pedante utilizar el término "bosques de
árboles de decisión" más generales, excepto cuando se refiere a la
aplicación específica por Breiman y Cutler.

[ 386 ]
Mejora del rendimiento del modelo

Vale la pena señalar que en relación con otros métodos basados en conjunto, los
bosques aleatorios son bastante competitivos y ofrecen ventajas importantes con
respecto a la competencia. Por ejemplo, los bosques aleatorios tienden a ser más
fácil de usar y menos propenso a overfitting. La siguiente tabla muestra los puntos
fuertes y débiles de generales modelos forestales al azar:

fortalezas debilidades
• Un modelo para todo uso que se • A diferencia de un árbol de
desempeña bien en la mayoría de decisión, el modelo no es fácil de
los problemas interpretar
• Puede manejar datos ruidosos o • Puede requerir algo de trabajo
que faltan, así como características para ajustar el modelo a los datos
categóricas o continuas
• Buscamos solamente las
características más importantes
• Puede ser utilizado en los datos
con un número extremadamente
grande de características o
ejemplos

Debido a su potencia, versatilidad y facilidad de uso, bosques aleatorios están


convirtiendo rápidamente en uno de los métodos de aprendizaje automático más
populares. Más adelante en este capítulo, vamos a comparar una cabeza de cabeza a
bosque modelo al azar contra el árbol impulsado C5.0.

El entrenamiento de los bosques al azar


Aunque hay varios paquetes para crear bosques aleatorios en R, el paquete
randomForest es quizás la aplicación que es más fiel a la especificación por Breiman
y Cutler, y también con el apoyo de intercalación para la sintonización automática.
La sintaxis para la formación de este modelo es la siguiente:

[ 387 ]
Capítulo 11

Por defecto, la función randomForest () crea un conjunto de 500 árboles que


consideran sqrt (p) Características al azar en cada división, donde p es el número de
características en la formación de datos y sqrt () se refiere a la función de raíz
cuadrada de R. Sea o no estos parámetros por defecto son apropiadas depende de la
naturaleza de los datos de las tareas de aprendizaje y formación. En general, los
problemas de aprendizaje más complejos y grandes conjuntos de datos (ya sean más
características o más ejemplos) funcionan mejor con un mayor número de árboles,
aunque esto debe equilibrarse con el gasto computacional de la formación de más
árboles.
El objetivo de utilizar un gran número de árboles es entrenar lo suficiente para que
cada función tiene la oportunidad de aparecer en varios modelos. Esta es la base de
la sqrt (p) valor por defecto para el parámetro mtry; el uso de este valor limita las
características suficientemente de modo que la variación aleatoria sustancial se
produce de árbol a árbol. Por ejemplo, puesto que los datos de crédito tiene
16 funciones, cada árbol se limitarían a la división en cuatro características en cualquier
momento.

[ 388 ]
Mejora del rendimiento del modelo

Vamos a ver cómo los parámetros por defecto randomForest () trabajan con los
datos de crédito. Vamos a entrenar el modelo tal como lo hicimos con otros
estudiantes. Una vez más, la función set.seed () asegura que el resultado puede
ser replicado:
> biblioteca (randomForest)
> set.seed (300)
> rf <- randomForest (. ~ predeterminada, los datos de crédito =)

Para mirar un resumen de los resultados del modelo, podemos simplemente


escriba el nombre del objeto resultante:
> rf

Llamada:
(. ~ Fórmula = por defecto, los datos de crédito =)
randomForest tipo de bosque al azar:
la clasificación
Número de árboles:
500 Nº de variables probadas en cada
división: 4

estimación OOB de la tasa de


error: Matriz de confusión 23,8%:
no si no64060
class.error
0.08571429
Sí 178 1220.59333333

El resultado muestra que el bosque aleatorio incluyó 500 árboles y trató de cuatro
variables en cada división, tal y como esperábamos. A primera vista, podría estar
alarmado por la apariencia pobre desempeño de acuerdo a la matriz de-la tasa de
error confusión de 23,8 por ciento
es mucho peor que el error resubstitution de cualquiera de los otros métodos de
conjunto hasta el momento. Sin embargo, esta matriz de confusión no muestra error
resubstitution. En cambio, refleja la tasa de error fuera de la bolsa (que aparece en la
salida como la estimación de la tasa de error de fuera de banda), que a diferencia de
error resubstitution, es una estimación no sesgada del error de prueba. Esto significa
que debe ser una estimación bastante razonable del desempeño futuro.
La estimación fuera de la bolsa se calcula durante la construcción del bosque
[ 389 ]
aleatorio. Esencialmente, cualquier ejemplo no seleccionadas para la muestra de
arranque de un solo árbol puede ser utilizado para probar el rendimiento del modelo
de datos que no se ven. Al final de la construcción bosque, las predicciones para cada
ejemplo cada vez que se llevó a cabo a cabo se cuentan, y se toma una votación para
determinar la predicción final para el ejemplo. La tasa de error total de tales
predicciones se convierte en la tasa de error de fuera de la bolsa.

[ 390 ]
Capítulo 11

Evaluación del desempeño de los bosques al azar


Como se mencionó anteriormente, la función randomForest () es compatible con
acento circunflejo, que nos permite optimizar el modelo, mientras que, al mismo
tiempo, el cálculo de medidas de rendimiento más allá de la tasa de error fuera de la
bolsa. Para hacer las cosas interesantes, vamos a comparar un bosque aleatorio
sintonizado automáticamente a la mejor modelo C5.0 sintonizado automáticamente
impulsado hemos desarrollado. Lo trataremos este experimento como si nos
estaban esperando para identificar un modelo candidato para su presentación a un
concurso de aprendizaje automático.
Debemos cargar primer símbolo de intercalación y establecer nuestras opciones de
control de la formación. Para la comparación más precisa del rendimiento del
modelo, vamos a uso repetido 10 veces la validación cruzada, o 10 veces CV repite
10 veces. Esto significa que los modelos se toman mucho más tiempo para construir
y serán más computacionalmente intensivas para evaluar, pero desde
esta es nuestra última comparación debemos estar muy seguros de que estamos
haciendo la elección correcta; el ganador de este enfrentamiento será nuestra
única entrada en la competición de aprendizaje automático.
> biblioteca (caret)
> ctrl <- trainControl (método = "repeatedcv",
número = 10, se repite = 10)

A continuación, vamos a configurar el intervalo de sintonización para el bosque


aleatorio. El único parámetro de ajuste para este modelo es mtry, que define el
número de características son seleccionados al azar en cada división. Por defecto, se
sabe que el bosque aleatorio utilizará sqrt (16), o cuatro características por árbol. Para
ser exhaustivo, también vamos a valores de prueba mitad de eso, el doble que, al
igual que el conjunto completo de 16 funciones. Por lo tanto, tenemos que crear una
cuadrícula con valores de 2, 4, 8, y 16 como sigue:
> grid_rf <- expand.grid (.mtry = c (2, 4, 8, 16))

Un bosque aleatorio que considera el conjunto completo de


características en cada división es esencialmente lo mismo que un
modelo de árbol de decisión bolsas.

Podemos suministrar la cuadrícula resultante a la función de tren () con el objeto


ctrl como sigue. Vamos a utilizar la métrica kappa para seleccionar el mejor
modelo:
> set.seed (300)
> m_rf <- tren (. ~ defecto, los datos = crédito, method =

[ 391 ]
"rf", métrica = "Kappa", trControl = ctrl,
tuneGrid = grid_rf)

[ 392 ]
Mejora del rendimiento del modelo

El comando anterior puede tardar algún tiempo en completarse, ya que tiene un


poco de trabajo que hacer! Cuando termine, vamos a comparar eso a un árbol
impulsado el uso de 10, 20, 30 y 40 iteraciones:
> grid_c50 <- expand.grid (.model = "árbol",
.trials = c (10, 20, 30, 40),
.winnow = "FALSE")
> set.seed (300)
> m_c50 <-. tren (por defecto ~, los datos = crédito, method
= "C5.0", métrica = "Kappa", trControl =
ctrl,
tuneGrid = grid_c50)

Cuando el árbol de decisión C5.0 finalmente completa, podemos comparar los dos
enfoques
lado a lado. Para el modelo de bosque aleatorio, los resultados son los siguientes:
> m_rf

resultados de remuestreo a través de parámetros de ajuste:

mtry Exactitu Kappa Precisión SD kappa SD


d
2 0.7247 0.1284142 0.01690466 0.06364740
4 0.7499 0.2933332 0.02989865 0.08768815
8 0.7539 0.3379986 0.03107160 0.08353988
diec 0.7556 0.3613151 0.03379439 0.08891300
iséis

Para el modelo impulsado C5.0, los resultados son los siguientes:


> m_c50

resultados de remuestreo a través de parámetros de ajuste:

ensayo Exactitu Kappa Precisión kappa SD


s d SD
10 0,7325 0.3215655 0.04021093 0.09519817
20 0.7343 0.3268052 0.04033333 0.09711408
30 0.7381 0.3343137 0.03672709 0.08942323
40 0.7388 0.3335082 0.03934514 0.09746073

[ 393 ]
Capítulo 11

Con un kappa de alrededor de 0.361, el modelo de bosque al azar con mtry = 16 fue
el ganador entre estos ocho modelos. Era más alto que el mejor árbol de decisión
C5.0, que tenía un kappa de alrededor de 0.334, y un poco más alto que el modelo
AdaBoost.M1 con un kappa de aproximadamente 0.360. Sobre la base de estos
resultados, nos gustaría presentar el bosque al azar como nuestro modelo final. Sin
llegar a evaluar el modelo de los datos de la competición, no tenemos manera de
saber con certeza si va a terminar ganando, pero teniendo en cuenta nuestras
estimaciones de rendimiento, es la apuesta más segura. Con un poco de suerte, tal
vez vamos a llegar lejos con el premio.

Resumen
Después de leer este capítulo, ahora debería conocer las técnicas básicas que se
utilizan para ganar competiciones de minería de datos y aprendizaje automático.
métodos de ajuste automatizados pueden ayudar a exprimir cada bit de
rendimiento de un modelo único. Por otro lado, las ganancias de rendimiento
también son posibles mediante la creación de grupos de modelos de aprendizaje
automático que trabajan juntos.
Aunque en este capítulo se ha diseñado para ayudarle a preparar modelos de
competición listo, tenga en cuenta que sus compañeros competidores tienen acceso
a las mismas técnicas. Usted no será capaz de salirse con el estancamiento; Por lo
tanto, seguir añadiendo métodos propietarios
a su bolsa de trucos. Tal vez usted puede traer experiencia en el tema único a la tabla,
o tal vez sus puntos fuertes incluyen un ojo para el detalle en la preparación de los
datos. En cualquier caso, la práctica hace al maestro, a fin de tomar ventaja de las
oposiciones para probar, evaluar y mejorar su propio conjunto de habilidades de
aprendizaje automático.
En el siguiente capítulo, el último en este libro-Tomaremos mirada a vuelo de
pájaro la manera de aplicar el aprendizaje de máquina a algunos dominios
altamente especializados y difíciles usando R. Obtendrá los conocimientos
necesarios para aplicar la máquina de aprendizaje de tareas en el corte de borde
del campo.

[ 394 ]
Temas
especializados
Machine
Learning
Felicitaciones por llegar a este punto en su viaje de aprendizaje de máquina! Si
aún no lo ha comenzado a trabajar en sus propios proyectos, que va a hacer tan
pronto. Y, al hacerlo, es posible que la tarea de convertir los datos en acción es
más difícil de lo que apareció por primera vez.

A medida que se reunieron los datos, es posible que se han dado cuenta de que la
información estaba atrapado en un formato propietario o propagación a través de
las páginas en la web. Para empeorar las cosas, después de pasar horas a formatear
los datos, tal vez su equipo se desaceleró a un rastreo después de quedarse sin
memoria. Tal vez incluso se estrelló R o congeló su máquina. Con suerte, usted era
sin inmutarse, ya que estos problemas pueden remediarse con un esfuerzo poco
más.
Este capítulo trata de técnicas que no pueden aplicarse a todos los proyectos, pero
serán de utilidad para trabajar en torno a estas cuestiones especializadas. Usted
puede encontrar la información particularmente útil si usted tiende a trabajar con
datos que son:
• Almacenada en formatos no estructurados o de propiedad, tales como
páginas web, APIs web, u hojas de cálculo
• A partir de un dominio especializado como la bioinformática o análisis de redes
sociales

[ 377 ]
• Demasiado grande para caber en la memoria o análisis tardar mucho tiempo en
completarse

Usted no está solo si usted sufre de cualquiera de estos problemas. Aunque no


existe una panacea-estos problemas son la pesadilla de los científicos de datos,
así como la razón habilidades de datos están en alta demanda a través de la
dedicación de la comunidad R, una serie de paquetes de R proporcionan una
ventaja inicial hacia la solución del problema.
En este capítulo se ofrece un libro de cocina de este tipo de soluciones. Incluso si
usted es un experimentado veterano R, es posible descubrir un paquete que
simplifica el flujo de trabajo. O, tal vez un día, se le autor de un paquete que facilita
el trabajo para todos los demás!

[ 378 ]
Máquina de aprendizaje especializado temas

Trabajar con archivos de propiedad y


bases de datos
A diferencia de los ejemplos de este libro, los datos del mundo real rara vez se
envasa en una forma simple CSV que se puede descargar desde un sitio web. En su
lugar, se requiere un esfuerzo significativo para preparar los datos para su análisis.
Los datos se deben recopilar, unir, ordenar, filtrar, o formatea para cumplir con los
requisitos del algoritmo de aprendizaje. Este proceso se conoce informalmente
como munging de datos o disputas de datos.
preparación de datos se ha vuelto aún más importante, ya que el tamaño de los
conjuntos de datos típicos ha crecido de megabytes a gigabytes, y los datos se
recopilan de relación y
fuentes desordenado, muchos de los cuales están almacenados en bases de datos
masivas. Varios paquetes y recursos para recuperar y trabajar con formatos de datos
propietarios y bases de datos se enumeran en las siguientes secciones.

La lectura y la escritura en los archivos de


Stata Microsoft Excel, SAS, SPSS y
Un aspecto frustrante de análisis de datos es la gran cantidad de trabajo requerida
para tirar y combinar datos de diferentes formatos propietarios. Existen vastas troves
de los datos en los archivos y bases de datos que simplemente necesitan ser
desbloqueado para su uso en R. Por suerte, existen paquetes precisamente para este
propósito.
Lo que solía ser un trivial por un río relativamente nuevo paquete R llamada
(un acrónimo para la entrada y la salida R) tedioso y laborioso proceso, que
requiere conocimientos de trucos y herramientas específicas a través de
múltiples paquetes de R, se ha hecho.
Este paquete, por Chung-Hong Chan, Geoffrey CH Chan, Thomas J. Leeper, y
Christopher Gandrud, se describe como una "navaja suiza del ejército de los
datos". Es capaz de importar y exportar una gran variedad de formatos de archivo,
incluyendo pero no limitado a: separado por tabulaciones (.tsv), separados por
comas (CSV), JSON (.json), Stata (.dta), SPSS ( .sav y .por), Microsoft Excel (.xls y
.xlsx), Weka (.arff) y SAS (.sas7bdat y .xpt).

Para una lista completa de los tipos de archivos rio puede importación
y exportación, así como ejemplos más detallados de uso, ver
http://cran.r-project.org/
web / paquetes / rio / viñetas / rio.html.

[ 379 ]
El paquete rio consta de tres funciones para trabajar con formatos de datos
propietarios: import (), exportación (), y convertir (). Cada uno hace exactamente lo
que cabría esperar, dado su nombre. En consonancia con la filosofía del paquete de
mantener las cosas simples, cada función utiliza la extensión de nombre de archivo
para adivinar el tipo de archivo que desea importar, exportar, o convertir.

[ 380 ]
capítulo 12

Por ejemplo, para importar los datos de crédito de los capítulos anteriores, que
se almacena en formato CSV, simplemente escribe:
> biblioteca (rio)
> <Crédito - de importación ( "credit.csv")

Esto crea la trama de datos de crédito como se esperaba; Como beneficio adicional,
no sólo no tenemos que especificar el tipo de archivo CSV, rio establecer
automáticamente stringsAsFactors = FALSO, así como otros valores por defecto
razonables.
Para exportar la trama de datos de crédito a formato (.xlsx) Microsoft Excel, utilice la
función de exportación () mientras se especifica el nombre del archivo deseado, de la
siguiente manera. Para otros formatos, basta con cambiar la extensión del archivo
para el tipo de salida deseada:
> exportación (de crédito, "credit.xlsx")

También es posible convertir el archivo CSV a otro formato directamente, sin


un paso de importación, utilizando la función de conversión (). Por ejemplo,
esto convierte el archivo en formato Stata credit.csv (.dta):
> convertir ( "credit.csv", "credit.dta")

Aunque el paquete rio cubre muchos formatos de datos propietarios


comunes, que no lo hace todo. La siguiente sección abarca otras formas
de obtener datos en R a través de consultas de bases de datos.

Consultar datos en bases de datos SQL


Grandes conjuntos de datos a menudo se almacenan en la base de datos Sistemas de
Gestión (DBMS) como Oracle, MySQL, PostgreSQL, Microsoft SQL o SQLite. Estos
sistemas permiten a los proveedores de datos para acceder utilizando un lenguaje
de consulta estructurado (SQL), un lenguaje de programación diseñado para extraer
datos de bases de datos. Si el DBMS está configurado para permitir conectividad
abierta de bases de datos (ODBC), laRODBC paquete por Brian Ripley se puede
utilizar para importar estos datos directamente en una trama de datos R.

Si tiene problemas para usar ODBC para conectarse a la base de datos,


usted puede probar uno de los paquetes R-DBMS específicos. Estos
incluyen ROracle, RMySQL, RPostgresSQL y RSQLite. A pesar de
que funcionarán en gran medida similares a las instrucciones aquí,
consulte la documentación del paquete en CRAN para obtener
instrucciones específicas para cada paquete.

ODBC es un protocolo estándar para la conexión a bases de datos


[ 381 ]
independientemente del sistema operativo o DBMS. Si estaba conectado
previamente a una base de datos ODBC, lo más probable es que se ha referido a él a
través de su nombre de origen de datos (DSN). Necesitará el DSN, además de un
nombre de usuario y contraseña (si su base de datos lo requiere) para usar RODBC.

[ 382 ]
Máquina de aprendizaje especializado temas

Las instrucciones para configurar una conexión ODBC son


altamente específica para la combinación del sistema operativo y
DBMS. Si usted está teniendo problemas para configurar una
conexión ODBC, consulte al administrador de la base de datos. Otra
forma de obtener ayuda es a través del paquete de RODBC
viñeta, que se puede acceder en R con la viñeta ( "RODBC")
comando después del paquete de RODBC se ha instalado.

Para abrir una conexión llamada my_db para la base de datos con el DSN my_dsn, utilice
el
odbcConnect () función:
> biblioteca (RODBC)
> my_db <- odbcConnect ( "my_dsn")

Alternativamente, si su conexión ODBC requiere un nombre de usuario y contraseña,


se debe especificar al llamar al odbcConnect () función:
> my_db <- odbcConnect (
"my_dsn", uid =
"my_username",
pwd = "my_password")

Con una conexión a base de datos abierta, podemos utilizar el sqlquery () para crear
una trama de datos R de las filas de bases de datos tirados por una consulta SQL.
Esta función, al igual que las muchas funciones que crean tramas de datos, nos
permite especificar stringsAsFactors = false para evitar R de la conversión
automática de datos de caracteres en factores.

El sqlquery () utiliza consultas SQL típicas, como se muestra en el siguiente


comando:
> my_query <- "seleccionar * de mi_tabla donde my_value = 1"
> results_df <- SQLQuery (canal = my_db, consulta =
sql_query, stringsAsFactors = FALSE)

El objeto results_df resultante es una trama de datos que contiene todas las filas
seleccionadas utilizando la consulta SQL almacenada en sql_query.
Una vez que haya terminado de usar la base de datos, la conexión se puede
cerrar con el siguiente comando:
> odbcClose (my_db)

Aunque R se cerrará automáticamente las conexiones ODBC al final de una sesión

[ 383 ]
de R, es una mejor práctica para hacerlo de forma explícita.

[ 384 ]
capítulo 12

Trabajar con datos y servicios en línea


Con la creciente cantidad de datos disponibles a partir de fuentes basadas en la
Web, es cada vez más importante para los proyectos de aprendizaje automático
para poder acceder e interactuar con servicios en línea. R es capaz de leer los datos
de fuentes en línea de forma nativa, con algunas advertencias. En primer lugar, de
forma predeterminada, R no puede acceder a sitios web seguras (aquellos que
utilizan el https: // en lugar de la protocolo http: //). En segundo lugar, es
importante tener en cuenta que la mayoría de las páginas web no proporcionan
datos en una forma que R puede entender. Los datos
tendría que ser analizada, o descompuesto y reconstruido en una forma
estructurada, antes de que pueda ser útil. Vamos a discutir las soluciones en breve.
Sin embargo, si ninguna de estas advertencias se aplica (es decir, si los datos ya
están en línea en un sitio web no segura y en una forma tabular, como CSV, que R
puede comprender de forma nativa), entonces read.csv de R () y read.table ()
funciones serán capaces de acceder a los datos desde la web como si se tratara de
su ordenador local. Simplemente suministrar la URL completa para el conjunto de
datos de la siguiente manera:
> mydata <- read.csv ( "http://www.mysite.com/mydata.csv")

R también proporciona una funcionalidad para descargar otros archivos desde la


Web, incluso si R no puede utilizar directamente. Para un archivo de texto, pruebe
los readlines () de la siguiente manera:
> mytext <- readlines ( "http://www.mysite.com/myfile.txt")

Para otros tipos de archivos, la función download.file () se puede utilizar. Para


descargar un archivo en el directorio de trabajo actual de R, sólo tiene que
suministrar la URL de destino y el nombre de la siguiente manera:
> download.file ( "http://www.mysite.com/myfile.zip", "Myfile.zip")

Más allá de esta funcionalidad de base, existen numerosos paquetes que extienden
las capacidades de R para trabajar con datos en línea. El más básico de ellos será
cubierto en las secciones que siguen. A medida que la Web es enorme y en
constante cambio, estas secciones están lejos de ser un conjunto completo de todas
las formas R puede conectarse a los datos en línea. Hay literalmente cientos de
paquetes para todo, desde proyectos de nicho para los masivos.

Para obtener la lista más completa y actualizada de los


paquetes, consulte la vista de tareas actualizada
regularmente CRAN Tecnologías Web y Servicios a
http: //cran.r-project. org / web / views
/ WebTechnologies.html.

[ 385 ]
Máquina de aprendizaje especializado temas

La descarga del texto completo de las páginas


web
El paquete RCurl por Duncan Temple Lang suministra una forma más robusta de
acceder a páginas web, proporcionando una interfaz R para el rizo (cliente para las
direcciones URL) de servicios públicos, una herramienta de línea de comandos para
transferir datos a través de redes. El programa de rizo actúa como un navegador web
programable; dado un conjunto de comandos, se puede acceder y descargar el
contenido de casi cualquier cosa disponible en la Web. A diferencia de R, se puede
acceder a sitios web seguros, así como los datos postales para formularios en línea.
Es un increíblemente potente utilidad.

Precisamente porque es tan poderoso, un tutorial rizo es completa


fuera del alcance de este capítulo. En su lugar, se refieren a la líneaRCurl
documentación en http://www.omegahat.org/RCurl/.

Después de instalar el paquete RCurl, la descarga de una página es tan simple como
escribir:
> biblioteca (RCurl)
> packt_page <- ( "Https://www.packtpub.com/")

Esto ahorrará el texto completo de la página editorial Packt (incluyendo todas las
marcas web) en el objeto R carácter packt_page llamado. Como se muestra en las
siguientes líneas, esto no es muy útil:
> str (packt_page, nchar.max = 200)
CHR "<! DOCTYPE html> \ n <html xmlns = \ "http: //www.w3.org/1999/xhtml
\"lang = \ "es \" xml: lang = \ "es \"> \ n \ t <head> \ n \ t \ t <title>
Packt Publishing | Tecnología Libros, libros electrónicos y vídeos </ title> \
n \ t \ t <script> \ n \ t \ t \ TData "|
truncado

La razón de que los primeros 200 caracteres de la página se parecen sin sentido se
debe a que los sitios web se escriben utilizando Hypertext Markup Language
(HTML), que combina el texto de la página con etiquetas especiales que le dicen los
navegadores web cómo mostrar el texto. los
<Title> y </ title> etiquetas aquí rodean el título de la página,
diciendo al navegador que esta es la página de inicio Packt
Publishing. etiquetas similares se utilizan para designar otras
partes de la página.

Aunque rizo es el estándar multiplataforma para acceder a contenido en línea, si se


trabaja con datos de la web con frecuencia en R, el paquete HTTR por Hadley
Wickham se construye sobre la base de RCurl para que sea más conveniente y R-
[ 386 ]
similares. Podemos ver algunas de las diferencias de inmediato por intentar
descargar la página editorial Packt usando la función del paquete de HTTR get ():
> biblioteca (HTTR)
> packt_page <- GET ( "https://www.packtpub.com")
> str (packt_page, max.level = 1)

[ 387 ]
capítulo 12

Lista de 9
PS url: CHR "Https://www.packtpub.com/"
$ Status_code: int 200
PS encabezados: Lista de 11
$ all_headers: Lista de 1
PS galletas: lista()
PS contenido: bruto [1: 58560] 3c 21 44 4f ...
PS Fecha: POSIXct [1: 1], formato: "24/05/2015 20:46:40"
PS veces: llamada num [1: 6] 0 0,000071 0,000079 ...
PS solicitud: Lista de 5

Donde la función getURL () en RCurl descargado sólo el HTML, la función get


() devuelve una lista con las propiedades del sitio, además del HTML. Para
acceder al contenido de la página en sí, tenemos que utilizar la función de
contenido ():
> str (contenido (packt_page, tipo = "text"), nchar.max = 200)
CHR "<! DOCTYPE html> \ n <html xmlns = \ "http: //www.w3.org/1999/xhtml
\"lang = \ "es \" xml: lang = \ "es \"> \ n \ t <head> \ n \ t \ t <title>
Packt Publishing | Tecnología Libros, libros electrónicos y vídeos </ title> \
n \ t \ t <script> \ n \ t \ t \ TData "|
truncado

Con el fin de utilizar estos datos en un programa de I, es necesario para


procesar la página para transformarla en un formato estructurado como una
lista o trama de datos. Funciones para hacerlo se discuten en las secciones que
siguen.

Para obtener documentación detallada y tutoriales HTTR, visitar el


proyecto página de GitHub en
https://github.com/hadley/httr. los
guía de inicio rápido es particularmente útil para conocer la funcionalidad básica.

Raspado de datos de páginas web


Debido a que existe una estructura coherente de las etiquetas HTML de muchas
páginas web, es posible escribir programas que buscan secciones deseadas de la
página y extraerlos con el fin de recopilarlos en un conjunto de datos. Esta práctica
proceso de datos de cosecha de las páginas web y transformarla en una forma
estructurada es conocido como raspado web.

[ 388 ]
Máquina de aprendizaje especializado temas

A pesar de que se utiliza con frecuencia, raspado debe considerarse


como un último recurso para obtener datos de la Web. Esto se debe a
ningún cambio en la estructura HTML subyacente se pueden romper
su código, lo que requiere esfuerzos a ser fijos. Lo que es peor, puede
introducir errores inadvertidos en sus datos. Además, los términos de
los acuerdos de uso muchos sitios web prohíben explícitamente la
extracción de datos automatizada, por no mencionar el hecho de que el
tráfico de su programa puede sobrecargar sus servidores. Siempre
revise los términos del sitio antes de comenzar su proyecto; incluso se
puede encontrar que el sitio ofrece a sus datos libremente a través de
un acuerdo de desarrollador.

El paquete rvest (un juego de palabras con el término "cosecha") por Hadley
Wickham hace Web raspar un proceso en gran medida sin esfuerzo, suponiendo
que los datos que desea se puede encontrar en un lugar consistente dentro de
HTML.
Vamos a empezar con un ejemplo sencillo usando la página editorial Packt.
Empezamos por la descarga de la página como antes, utilizando la función de html
() en el paquete rvest. Tenga en cuenta que esta función, cuando se suministra con
una dirección URL, simplemente llama a la función get () en el paquete HTTR de
Hadley Wickham:
> biblioteca (rvest)
> packt_page <- html ( "https://www.packtpub.com")

Supongamos que nos gustaría para raspar el título de la página. Mirar el código
HTML anterior, sabemos que sólo hay un título por página envuelto dentro de
<title> y
</ Title> las etiquetas. Para sacar el título, suministramos el nombre de la etiqueta a
lahtml_node ()
función, como sigue:
> html_node (packt_page, "título")
<Title> Packt Publishing | Tecnología Libros, libros
electrónicos & amp; Vídeos </ title>

Esto mantiene el formato HTML en el lugar, incluyendo las etiquetas <title> y el &
amp; código, que es la designación HTML para el símbolo &. Para traducir esto en
texto plano, simplemente ejecuta a través de la función html_text (), como se
muestra:
> html_node (packt_page, "título")%>% html_text ()
[1] "Packt Publishing | Tecnología Libros, libros electrónicos y vídeos"

Observe el uso del%> operador%. Esto se conoce como un tubo, ya que


[ 389 ]
esencialmente datos "tubos" de una función a otra. El uso de tubos permite la
creación de poderosas cadenas de funciones para procesar datos HTML.

[ 390 ]
capítulo 12

El operador de la tubería es una parte del paquete magrittr de Stefan


Milton Bache y Hadley Wickham, instalado por defecto con el paquete
rvest. El nombre es un juego en el famoso cuadro de René Magritte de
un tubo (que puede recordar haber visto en el Capítulo 1, Introducción a
Machine Learning). Para obtener más información sobre el proyecto,
visite su página de GitHub
enhttps://github.com/smbache/magrittr.

Vamos a probar un ejemplo un poco más interesante. Supongamos que nos gustaría
para raspar una lista de todos los paquetes en el aprendizaje de la máquina vista de
tareas CRAN. Comenzamos como de la misma manera que lo hicimos anteriormente,
mediante la descarga de la página HTML usando la función html (). Dado que no
sabemos cómo se estructura la página, también vamos a mirar en HTML escribiendo
cran_ml, el nombre del objeto R creamos:
> biblioteca (rvest)
> cran_ml <- html ( "http://cran.r-
project.org/web/views/MachineLearning. html ")
> cran_ml

Mirando por encima de la salida, nos encontramos con que una sección parece tener los
datos que estamos
interesado en Tenga en cuenta que sólo un subconjunto de la salida se muestra aquí.:
paquetes <h3> CRAN: </ h3>
<Ul>
<Li> <a href="../packages/ahaz/index.html"> Acaz </a> </ li>
<Li> <a href="../packages/arules/index.html"> arules </a> </ li>
<Li> <a href="../packages/bigrf/index.html"> bigrf </a> </ li>
<Li> <a href="../packages/bigRR/index.html"> bigRR </a> </ li>
<Li> <a href="../packages/bmrm/index.html"> bmrm </a> </ li>
<Li> <a href="../packages/Boruta/index.html"> Boruta </a> </ li>
<Li> <a href="../packages/bst/index.html"> BST </a> </ li>
<Li> <a href="../packages/C50/index.html"> C50 </a> </ li>
<Li> <a href="../packages/caret/index.html"> cursor </a> </ li>

Las etiquetas <h3> implican un encabezado de tamaño 3, mientras que el <ul> y


<li> etiquetas se refieren a la creación de una lista y de la lista sin ordenar artículos,
respectivamente. Los elementos de datos que queremos están rodeados de etiquetas
<a>, que son las etiquetas de anclaje de hipervínculo que enlazan con la página
CRAN para cada paquete.

[ 391 ]
Debido a que la página CRAN se mantiene activa y puede ser
modificada en cualquier momento, no se sorprenda si sus
resultados son diferentes de los que se muestran aquí.

[ 392 ]
Máquina de aprendizaje especializado temas

Con este conocimiento en la mano, podemos raspar los enlaces tanto como lo hicimos
anteriormente. La única excepción es que, debido a que esperamos encontrar más de
un resultado, tenemos que utilizar los html_nodes () función para devolver un vector
de resultados más que html_node (), que devuelve un único elemento:
> ml_packages <- html_nodes (cran_ml "a",)

Vamos a echar un vistazo al resultado usando la función de cabeza ():


> cabeza (ml_packages, n =
7) [[1]]
<a href="../packages/nnet/index.html"> nnet </a>

[[2]]
<a href="../packages/RSNNS/index.html"> RSNNS </a>

[[3]]
<a href="../packages/rpart/index.html"> rpart </a>

[[4]]
<a árbol href="../packages/tree/index.html"> </a>

[[5]]
<a href="../packages/rpart/index.html"> rpart </a>

[[6]]
<a href = "http://www.cs.waikato.ac.nz/~ml/weka/"> Weka </a>

[[7]]
<a href="../packages/RWeka/index.html"> RWeka </a>

Como podemos ver en la línea 6, se ve como los enlaces a otros proyectos coló Esto
es debido a que algunos paquetes tienen hipervínculos a sitios web adicionales.; en
este caso, el paquete RWeka está vinculada tanto CRAN y su página de inicio. Para
excluir estos resultados, es posible que la cadena esta salida a otra función que
podría buscar la cadena / paquetes en el hipervínculo.

[ 393 ]
capítulo 12

En general, raspado web es siempre un proceso de iterate-y-


refinar como a identificar criterios más específicos para excluir o
incluir casos específicos. Los casos más difíciles pueden requerir
incluso un ojo humano para lograr el 100 por ciento de exactitud.

Estos son ejemplos simples que sólo arañan la superficie de lo que es posible con el
paquete rvest. El uso de la funcionalidad de tubo, es posible buscar etiquetas
anidadas dentro de las etiquetas o clases específicas de etiquetas HTML. Para estos
tipos de ejemplos complejos, consulte la documentación del paquete.

Analizar documentos XML


XML es un texto plano,, lenguaje de marcado estructurado legible sobre el que se
han basado muchos formatos de documento. Se emplea una estructura de marcado
de alguna manera similar al HTML, pero es mucho más estricto sobre el formato.
Por esta razón, es un formato en línea popular de almacenar conjuntos de datos
estructurados.

El paquete XML por Duncan Temple Lang ofrece un conjunto de funcionalidades


R basado en el popular programa de análisis libxml2 a base de C a leer y escribir
documentos XML. Es el abuelo de paquetes de análisis de XML en I y sigue siendo
ampliamente utilizado.

La información sobre el paquete XML, incluyendo ejemplos


simples a que pueda comenzar rápidamente, se pueden encontrar
en la página web del proyecto en
http://www.omegahat.org/RSXML/.

Recientemente, el paquete xml2 por Hadley Wickham ha surgido como una


interfaz más sencilla y más R-como a la biblioteca libxml2. El paquete rvest, que
estaba cubierto anteriormente en este capítulo, utiliza xml2 entre bastidores para
analizar HTML. Por otra parte, rvest se puede utilizar para analizar XML también.

La página de GitHub xml2 se encuentra en


https://github.com/ Hadley / xml2.

Debido análisis XML está tan relacionado con el análisis de HTML, la sintaxis
exacta no se describe aquí. Consulte la documentación de estos paquetes para ver
ejemplos.

[ 394 ]
Máquina de aprendizaje especializado temas

El análisis de JSON desde las API web


Las aplicaciones en línea se comunican entre sí utilizando las funciones accesibles
en la web conocidos como interfaces de programación de aplicaciones (API). Estas
interfaces actúan muy parecido a un sitio web típico; que reciban una solicitud de
un cliente a través de una URL en particular y devolver una respuesta. La
diferencia es que un sitio web normal, devuelve código HTML significaba para su
visualización en un navegador web, mientras que una API normalmente devuelve
datos en una forma estructurada significado para ser procesado por una máquina.
Aunque no es raro encontrar API basadas en XML, tal vez la estructura de datos de
la API más común hoy en día es (JavaScript Object Notation JSON). Como XML,
que es un estándar, el formato de texto plano, lo más a menudo utilizado para
estructuras de datos y objetos en la web. El formato se ha popularizado
recientemente debido a sus raíces en las aplicaciones JavaScript basadas en el
navegador, pero a pesar del pedigrí, su utilidad no se limita a la Web.
La facilidad con la que las estructuras de datos JSON pueden ser entendidas por los
seres humanos y analizados por las máquinas hace que sea una estructura de datos
atractiva para muchos tipos de proyectos.
JSON se basa en un simple: formato {clave} valor. Las llaves {} denotan un objeto
JSON, y los parámetros clave y valor denotan una propiedad del objeto y
el estado de la propiedad. Un objeto puede tener cualquier número de propiedades y
las propiedades de sí mismos pueden ser objetos. Por ejemplo, un objeto JSON para
este libro podría ser algo como esto:
{
"Title": "El aprendizaje de la
máquina con R", "autor": "Brett
Lantz", "editor": {
"Name": "Packt Publishing",
"url": "Https://www.packtpub.com"
},
"temas": [ "R", "aprendizaje automático", "minería
de datos"], "MSRP": 54.99
}

Este ejemplo ilustra los tipos de datos disponibles para JSON: numérico, carácter, de
matriz (rodeado por [y] caracteres), y el objeto. No se muestran los valores nulo y
Boolean (verdaderas o falsas). La transmisión de estos tipos de objetos a partir de
una aplicación a otra y la aplicación de navegador web, es lo que impulsa a muchos
de los sitios web más populares.

Para más detalles sobre el formato JSON, vaya a http://www.json.org/.

[ 395 ]
capítulo 12

API orientada al público permiten programas como R para consultar


sistemáticamente sitios web para obtener resultados en el formato JSON, utilizando
paquetes como RCurl y HTTR. Aunque un completo tutorial sobre el uso de las API
web es digno de un libro aparte, el proceso básico se basa en sólo un par de pasos,
son los detalles que son difíciles.
Supongamos que queremos consultar la API de Google Maps para localizar la latitud
y longitud de la Torre Eiffel en Francia. Primero tenemos que revisar la
documentación de la API de Google Maps para determinar la URL y los parámetros
necesarios para realizar esta consulta. a continuación suministramos esta información
a la función get () del paquete de HTTR, añadiendo una lista de parámetros de
consulta con el fin de solicitar la dirección de búsqueda:
> biblioteca (HTTR)
> map_search <- GET (
"https://maps.googleapis.com/maps/api/geocode/json",
query = lista (dirección = "Torre Eiffel"))

Al escribir el nombre del objeto resultante, podemos ver algunos detalles acerca de la
solicitud:
> map_search
Respuesta
[https://maps.googleapis.com/maps/api/geocode/ JSON?
Address = Eiffel% 20T
ower]
Estado: 200
Content-Type: application / json; charset =
UTF-8 Tamaño: 2.34 kB
{
"Resultados": [
{
"address_components": [
{
"Long_name": "Torre Eiffel", "nombre
corto": "Torre Eiffel",
"tipos": [ "point_of_interest", "establecimiento"]
},
{
...

[ 396 ]
Máquina de aprendizaje especializado temas

Para acceder a la JSON resultante, que el paquete HTTR interpretado


automáticamente, se utiliza la función de contenido (). Por razones de brevedad, sólo
un puñado de líneas se muestran aquí:
> contenido (map_search)
$ resultado [[1]] $ formatted_address
[1] "Torre Eiffel, el Campo de Marte, 5 Avenue Anatole France, 75007
París, Francia"

$ resultados [[1]] $ geometría


$ resultado [[1]] $ $ geometría ubicación
$ resultados [[1]] $ geometría $
ubicación $ lat [1] 48.85837

$ resultados [[1]] $ geometría $


ubicación $ lng [1] 2.294481

Para acceder a estos contenidos de forma individual, simplemente se refieren a


ellos utilizando la sintaxis de lista. Los nombres se basan en los objetos JSON
devueltos por la API de Google. Por ejemplo, todo el conjunto de los resultados
está en un objeto resultados con nombres correspondientes y cada resultado se
numera. En este caso, vamos a acceder a la propiedad dirección con el formato del
primer resultado, así como la latitud y longitud:
> contenido (map_search) $ resultados [[1]] $ formatted_address
[1] "Torre Eiffel, el Campo de Marte, 5 Avenue Anatole France, 75007
París, Francia"

> contenido (map_search) $ resultados [[1]] $ geometría


$ ubicación $ lat [1] 48.85837

> contenido (map_search) $ resultados [[1]] $ geometría


$ ubicación $ lng [1] 2.294481

Estos elementos de datos a continuación, podrían ser utilizados en un programa de R


según se desee.

Debido a que el API de Google Maps se puede


actualizar en el futuro, si usted encuentra que sus
resultados difieren de los que se muestra aquí, por
favor, compruebe la página de soporte editorial Packt
[ 397 ]
de código actualizado.

[ 398 ]
capítulo 12

Por otro lado, si desea hacer una conversión hacia y desde el formato JSON fuera del
paquete HTTR, hay una serie de paquetes que agregar esta funcionalidad.
El paquete rjson por Alex Couture-Beil fue uno de los primeros paquetes para
permitir que las estructuras de datos R para convertir de ida y vuelta desde el
formato JSON. La sintaxis es simple. Después de instalar el paquete rjson, convertir
de un objeto R a una cadena JSON, utilizamos la función toJSON (). Tenga en
cuenta que los caracteres de comillas han escapado utilizando el \ notación":
> biblioteca (rjson)
> ml_book <- lista (BOOK_TITLE = "máquina de aprendizaje con R",
autor = "Brett Lantz")
> toJSON (ml_book)
[1] "{\" titulo_libro \ ": \" máquina de aprendizaje con R \",
\ "Autor \": \ "Brett Lantz \"}"

Para convertir una cadena JSON en un objeto R, utilice la función fromJSON ().
Las comillas en la necesidad cadena que se escaparon, como se muestra:
> ml_book_json <- "{
\ "TITLE \": \ "máquina de aprendizaje con R \",
\ "Autor \": \ "Brett Lantz \",
\"editor\": {
\ "Name \": \ "Packt Publishing \",
\ "Url \": \ "https: //www.packtpub.com \"
},
\ "Temas \": [\ "I \", \ "la máquina de aprendizaje \", \ "minería de datos
\"],
\ "MSRP \": 54.99
}"

> ml_book_r <- fromJSON (ml_book_json)

Esto resulta en una estructura de lista en una forma muy parecida a la original, JSON:
> str
(ml_book_r)
Lista de 5
PS Título: CHR "máquina de aprendizaje con R"
PS autor: CHR "Brett Lantz"
$ Editorial: Lista de 2

[ 399 ]
.. $ name: CHR "Packt Publishing"

[ 400 ]
Máquina de aprendizaje especializado temas

.. $ url: CHR "Https://www.packtpub.com"


PS temas: chr [1: 3] "R" "aprendizaje de máquina" "datos minería"
PS MSRP: num 55

Recientemente, dos nuevos paquetes JSON han llegado a la escena. La primera,


RJSONIO, por Duncan Temple Lang estaba destinado a ser una versión más rápida y
más extensible del paquete rjson, a pesar de que ahora son prácticamente idénticos.
Un segundo paquete, jsonlite, por Jeroen Ooms ha ganado rápidamente la
prominencia ya que crea estructuras de datos que son más consistentes y R-como,
sobre todo durante el uso de los datos de las API web. ¿Cuál de estos paquetes que
se utiliza es una cuestión de preferencia; los tres son prácticamente idénticos en la
práctica, ya que cada una de implementar una función fromJSON () y toJSON ().

Para obtener más información sobre los posibles beneficios del


paquete jsonlite, véase: J. Ooms El paquete jsonlite: un mapeo
práctico y consistente entre los datos y R objetos JSON. 2014.
Disponible en: http://arxiv.org/abs/1403.2805

Trabajar con datos específicos de dominio


aprendizaje automático, sin duda, se ha aplicado a problemas en todas las
disciplinas. Aunque las técnicas básicas son similares en todos los dominios, algunos
son tan especializados que se forman las comunidades para desarrollar soluciones a
los desafíos únicos para el campo. Esto conduce al descubrimiento de nuevas
técnicas y nueva terminología que es relevante sólo a los problemas específicos de
dominio.
Esta sección cubre un par de dominios que utilizan técnicas de aprendizaje
automático ampliamente, pero requieren un conocimiento especializado para
desbloquear todo su potencial. Desde libros enteros se han escrito sobre estos
temas, que servirá sólo como la más breve de las presentaciones. Para más detalles,
buscar la ayuda proporcionada por los recursos citados en cada sección.

[ 401 ]
capítulo 12

Analizando los datos de bioinformática


El campo de la bioinformática se refiere a la aplicación de las computadoras y
análisis de datos para el dominio biológica, particularmente con respecto a una
mejor comprensión del genoma. A medida que los datos genéticos es único en
comparación con muchos otros tipos, análisis de datos en el campo de la
bioinformática ofrece una serie de desafíos únicos. Por ejemplo, debido a los seres
vivos tienen un enorme número de genes y secuenciación genética es todavía
relativamente caro, los conjuntos de datos típicos son mucho más anchos que son
largas; es decir, que tienen más características (genes) que ejemplos (criaturas que se
han secuenciado). Esto crea problemas al intentar aplicar las visualizaciones
convencionales, las pruebas estadísticas y métodos de aprendizaje automático a
dichos datos. Además, el uso cada vez mayor
de microarray patentada "lab-on-a-chip" técnicas requiere conocimientos
altamente especializados simplemente para cargar los datos genéticos.

Una vista de tareas CRAN, que enumera algunos de los paquetes


especializados de R como estadística genética y bioinformática, está
disponible en
http://cran.r-project.org/web/views/Genetics.html.

El proyecto Bioconductor del Centro de Investigación del Cáncer Fred Hutchinson,


en Seattle, Washington, tiene como objetivo resolver algunos de estos problemas
proporcionando un conjunto estandarizado de métodos de análisis de datos
genómicos. El uso de R como su fundamento, Bioconductor añade bioinformática
específicas de paquetes y documentación en la parte superior del software de base
R.
Bioconductor proporciona flujos de trabajo para analizar los datos de ADN y
microarrays de proteínas a partir de plataformas de microarrays comunes, tales
como Affymetrix, Illumina, Nimblegen, y Agilent. La funcionalidad adicional
incluye secuencia de anotación, múltiples procedimientos de prueba, las
visualizaciones especializados, tutoriales, documentación, y mucho más.

Para obtener más información sobre el proyecto Bioconductor,


visite el sitio web del proyecto
http://www.bioconductor.org.

Analizar y visualizar datos de red


datos de la red social y conjuntos de datos de gráficos consisten en estructuras que
describen las conexiones o enlaces (a veces también denominados bordes), entre las
personas u objetos conocidos como nodos. Con N nodos, un N x N = matriz de N2
[ 402 ]
de enlaces potenciales puede ser creado. Esto crea una gran complejidad
computacional como el número de nodos crece.

[ 403 ]
Máquina de aprendizaje especializado temas

El campo de análisis de redes se refiere a las medidas estadísticas y visualizaciones


que identifican patrones significativos de conexiones. Por ejemplo, la siguiente figura
muestra tres grupos de nodos circulares, todos conectados a través de un nodo
cuadrado en el centro. Un análisis de la red puede revelar la importancia del nodo
cuadrado, entre otras métricas clave.

El paquete de la red por Carter T. Butts, David Hunter, y Mark S. Handcock ofrece
una estructura de datos especializada para trabajar con redes. Esta estructura de
datos es necesaria debido al hecho de que la matriz necesaria para almacenar N2
enlaces potenciales superará rápidamente la memoria disponible; la estructura de
datos de red utiliza una representación escasa a
almacenar sólo los enlaces existentes, ahorrando una gran cantidad de memoria
si la mayoría de las relaciones son inexistentes. Un paquete estrechamente
relacionado, sna (análisis de redes sociales), permite el análisis y la
visualización de los objetos de red.

Para obtener más información sobre la red y SNA, incluyendo muy


detallada tutoriales y documentación, se refieren a la página web del proyecto
auspiciado por
la Universidad de Washington en http://www.statnet.org/.

El paquete igraph por Gábor Csárdi proporciona otro conjunto de herramientas para
visualizar y analizar datos de la red. Es capaz de calcular las métricas para redes
muy grandes. Un beneficio adicional de igraph es el hecho de que tiene paquetes
análogas para los lenguajes de programación Python y C, lo que le permite ser
utilizado para realizar análisis de prácticamente cualquier lugar. Como
demostraremos en breve, es muy fácil de usar.

Para obtener más información sobre el paquete igraph,


incluyendo demos y tutoriales, visitar la página web en
http://igraph.org/r/.

[ 404 ]
capítulo 12

Utilizando datos de la red en I requiere el uso de formatos especializados, como la


red de datos no se almacenan típicamente en estructuras de datos tabulares típicos
como archivos CSV y tramas de datos. Como se mencionó anteriormente, porque no
son posibles conexiones N2 entre nodos de la red N, una estructura tabular sería
rápidamente llegar a ser difícil de manejar para todos, pero los más pequeños N
valores. En lugar de ello, los datos de gráficos se almacenan en una forma que
enumera sólo las conexiones que son realmente presente; conexiones ausentes se
infieren de la ausencia de datos.
Tal vez el más simple de estos formatos es edgelist, que es un archivo de texto con
una línea por cada conexión de red. Cada nodo se le debe asignar un identificador
único y los enlaces entre los nodos se definen mediante la colocación de los
identificadores de los nodos conectados juntos en una sola línea separadas por un
espacio. Por ejemplo, la siguiente edgelist define tres conexiones entre el nodo 0 y los
nodos 1, 2 y 3:
0 1
0 2
0 3

Para cargar los datos de red en R, el paquete igraph proporciona una función
read.graph () que puede leer archivos edgelist así como otros formatos más
sofisticados como el Gráfico Modeling Language (GML). Para ilustrar esta
funcionalidad, vamos a utilizar un conjunto de datos que describe la amistad entre
los miembros de un pequeño club de karate. Para seguir a lo largo, descargue el
archivo desde el sitio web karate.txt Packt Publishing y guardarlo en su directorio
de trabajo R. Después de haber instalado el paquete igraph, la red de karate se
puede leer en I de la siguiente manera:
> biblioteca (igraph)
> karate <- read.graph ( "karate.txt", "edgelist", dirigida = FALSE)

Esto creará un objeto de matriz dispersa que puede ser utilizado para la
representación gráfica y análisis de la red. Tenga en cuenta que la dirigida =
parámetro FALSO obliga a la red para utilizar enlaces no dirigidos o bidireccional
entre los nodos. Dado que el conjunto de datos de karate describe la amistad, esto
significa que si la persona 1 es amiga de la persona 2, entonces la persona 2 es la
amiga de la persona 1. Por otro lado, si el conjunto de datos describe los resultados
de lucha, el hecho de que la persona 1 persona derrotada 2 sería ciertamente no
implica que la persona 2 persona derrotado 1. En este caso, la dirigida = parámetro
TRUE se debe establecer.

El conjunto de datos de la red de karate utilizado aquí fue compilado


por MEJ Newman de la Universidad de Michigan. Fue presentado por
primera vez en Zachary WW. Un modelo de flujo de información para
[ 405 ]
el conflicto y la fisión en pequeños grupos. Diario de Investigaciones
Antropológicas. 1977; 33: 452-473.

[ 406 ]
Máquina de aprendizaje especializado temas

Para examinar el gráfico, utilice la función plot ():


> plot (karate)

Esto produce la siguiente figura:

El examen de la visualización de la red, es evidente que hay algunos


miembros altamente conectados del club de karate. Los nodos 1, 33, y 34
parecen ser más central que las otras, que permanecen en la periferia club.
Usando igraph para calcular las métricas del gráfico, es posible demostrar nuestro
presentimiento analíticamente. El grado de un nodo medidas cuántos nodos que
está vinculado. El grado () función confirma nuestra presentimiento que los nodos
1, 33, y 34 son más conectados que los otros con 16, 12, y 17 conexiones,
respectivamente:
> grado (karate)
[1] 169 10634445231252222

[ 407 ]
[19] 23222533243446 12
17

[ 408 ]
capítulo 12

Debido a que algunas conexiones son más importantes que otros, una variedad de
medidas de red se han desarrollado para medir la conectividad nodo con esta
consideración. Una métrica red centralidad llamado intermediación está destinado a
capturar el número de rutas más cortas entre los nodos que pasan por cada nodo.
Los nodos que son realmente más importante para todo el gráfico tendrán un valor
de centralidad de intermediación más alto, ya que actúan como un puente entre los
otros nodos. Obtenemos un vector de las medidas de centralidad utilizando la
función de intermediación (), de la siguiente manera:
> intermediación (karate)
[1] 231.0714286 28.4785714 75.8507937 6.2880952
[5] 0.3333333 15.8333333 15.8333333 0.0000000
[9] 29.5293651 0.4476190 0.3333333 0.0000000
[13] 0.0000000 24.2158730 0.0000000 0.0000000
[17] 0.0000000 0.0000000 0.0000000 17.1468254
[21] 0.0000000 0.0000000 0.0000000 9.3000000
[25] 1.1666667 2.0277778 0.0000000 11.7920635
[29] 0.9476190 1.5428571 7.6095238 73.0095238
[33] 76.6904762 160.5515873

A medida que los nodos 1 y 34 tienen valores mucho mayores de intermediación


que los otros, que son más centrales a la red de amigos del club de karate. Estos
dos individuos,
con extensas redes de amistad personal, puede ser el "pegamento" que
mantiene la red juntos.

Intermediación centralidad es sólo una de muchas métricas


destinados a captar la importancia de un nodo, y ni siquiera es
la única medida de centralidad. Consulte la documentación
igraph para las definiciones de otras propiedades de la red.

Los paquetes de SNA y IConfiguración son capaces de calcular muchos de tales


métricas del gráfico, que pueden entonces ser utilizados como entradas para las
funciones de aprendizaje automático. Por ejemplo, supongamos que estaban
tratando de construir un modelo de predicción de quién ganaría una elección para
presidente del club. El hecho de que los nodos 1 y 34 están bien conectado sugiere
que pueden tener su capital necesario para un papel de liderazgo. Estos podrían ser
los predictores altamente valiosos de los resultados de la elección.

[ 409 ]
Máquina de aprendizaje especializado temas

Al combinar el análisis de redes con el aprendizaje automático,


servicios como Facebook, Twitter y LinkedIn proporcionan grandes
reservas de datos de la red para hacer predicciones sobre el
comportamiento futuro de los usuarios. Un ejemplo de alto perfil es
la campaña presidencial de Estados Unidos 2012 en la que el jefe
científico de datos Rayid Ghani utiliza los datos de Facebook para
identificar las personas que podrían ser persuadidos a votar por
Barack Obama.

Mejorar el rendimiento de R
R tiene una reputación de ser lento e ineficiente memoria, una reputación que es al
menos algo ganado. Estos fallos son en gran medida inadvertido en un PC moderno
para conjuntos de datos de muchos miles de registros, pero los conjuntos de datos
con un millón de discos o más pueden exceder los límites de lo que es posible en la
actualidad con el hardware de nivel de consumidor. El problema se agrava si el
conjunto de datos contiene muchas características o si se están utilizando algoritmos
de aprendizaje complejas.

CRAN tiene una vista de tareas de computación de alto


rendimiento que las listas de paquetes que empujan los límites
de lo que es posible en R. Se puede ver en http://cran.r-
project.org/web/views/
HighPerformanceComputing.html.

Los paquetes que se extienden más allá de los R capacidades del software de base se
están desarrollando rápidamente. Este trabajo viene principalmente en dos frentes:
algunos paquetes se suman la capacidad de administrar muy grandes conjuntos de
datos, haciendo operaciones de datos más rápido o permitir que el tamaño de los
datos a superar la cantidad de memoria disponible del sistema; otros permiten R para
trabajar más rápido, tal vez mediante la difusión de los trabajos sobre los
ordenadores o procesadores adicionales, utilizando hardware especializado, o la
prestación de algoritmos de aprendizaje automático optimizados para problemas
grandes de datos.

La gestión de grandes bases de datos


Datos extremadamente grandes pueden causar R para moler a un alto cuando el
sistema se queda sin memoria para almacenar datos. Incluso si todo el conjunto de
datos puede caber en la memoria disponible, será necesario sobrecarga de memoria
adicional para el procesamiento de datos. Además, datos muy grandes pueden
tardar mucho tiempo para analizar por ninguna otra razón que la gran cantidad de
[ 410 ]
registros; incluso una operación rápida puede causar retrasos cuando se realizan
muchos millones de veces.

[ 411 ]
capítulo 12

Hace años, muchos llevaría a cabo la preparación de datos fuera de R en otra


programación
lengua, o el uso de R pero efectúan análisis de un subconjunto más pequeño de los
datos. Sin embargo, esto ya no es necesario, ya que varios paquetes han
contribuido a R para hacer frente a estos problemas.

La generalización de las estructuras de datos


tabulares con dplyr
El paquete dplyr introducido en 2014 por Hadley Wickham y Romain Francois es
quizás la forma más sencilla de empezar a trabajar con grandes conjuntos de datos
en
R. Aunque los otros paquetes pueden exceder sus capacidades en términos de
velocidad pura o el tamaño prima de los datos, dplyr sigue siendo muy capaz.
Más importante aún, es prácticamente transparente después de la curva de
aprendizaje inicial ha pasado.

Para obtener más información sobre dplyr, incluyendo


algunos muy tutoriales de ayuda, consulte la página de GitHub
del proyecto en
https://github.com/hadley/dplyr.

En pocas palabras, el paquete proporciona un objeto llamado TBL, que es una


abstracción de datos tabulares. Que actúa como un marco de datos, con varias
excepciones importantes:

• La funcionalidad clave ha sido escrito en C ++, que según los autores


da como resultado un aumento de 20x a 1000x rendimiento para muchas
operaciones.
• R tramas de datos están limitados por la memoria disponible. losdplyr
versión de una trama de datos puede estar vinculada de forma
transparente a bases de datos basadas en disco que pueden superar lo que
se puede almacenar en la memoria.
• los dplyr paquete hace suposiciones razonables sobre tramas de datos que
optimizan su esfuerzo, así como el uso de memoria. No cambia
automáticamente los tipos de datos. Y, si es posible, se evita hacer copias de
datos señalando el valor original en su lugar.
• Los nuevos operadores se introducen que permiten transformaciones de
datos comunes para llevar a cabo con mucho menos código sin dejar de ser
muy fácil de leer.

Hacer la transición de tramas de datos a dplyr es fácil. Para convertir una trama de

[ 412 ]
datos existente en un objeto de TBL, utilice la función as.tbl ():
> biblioteca (dplyr)
> crédito <- read.csv ( "credit.csv")
> credit_tbl <- as.tbl (de crédito)

[ 413 ]
Máquina de aprendizaje especializado temas

Escribir el nombre de la tabla proporciona información sobre el objeto. Incluso en


este caso, vemos una distinción entre dplyr y el comportamiento típico de R; donde
como una trama de datos tradicional habría mostrado muchas filas de datos, dplyr
objetos son más considerados con las necesidades del mundo real. Por ejemplo,
escribir el nombre del objeto proporciona una salida de resumen en una forma que
se adapte a una sola pantalla:
> credit_tbl

Conexión dplyr a una base de datos externa es sencillo también. El paquete


dplyr proporciona funciones para conectarse a MySQL, PostgreSQL y bases de
datos SQLite. Estos crean un objeto de conexión que permite TBL objetos a ser
extraídas de la base de datos.
Vamos a usar la función src_sqlite () para crear una base de datos SQLite para
almacenar los datos de crédito. SQLite es una base de datos simple que no requiere
un servidor. Simplemente se conecta a un archivo de base de datos, al que
llamaremos credit.sqlite3. Dado que el archivo no existe, sin embargo, tenemos que
establecer el parámetro TRUE = crear para crear el archivo. Tenga en cuenta que
para este paso
al trabajo, es posible que necesite instalar el paquete RSQLite si no lo ha hecho:
> credit_db_conn <- src_sqlite ( "credit.sqlite3", crear = TRUE)

[ 414 ]
capítulo 12

Después de crear la conexión, tenemos que cargar los datos en la base de datos
utilizando la función copy_to (). Este utiliza el objeto credit_tbl para crear una
tabla de base de datos dentro de la base de datos especificada por
credit_db_conn. El parámetro = FALSO temporal obliga a la tabla que se crea
inmediatamente. Desde dplyr trata de evitar la copia de datos a menos que así
debe ser, sólo creará la tabla si se le pide explícitamente a:
> copy_to (credit_db_conn, credit_tbl, temporal = FALSE)

La ejecución de la función copy_to () almacenará los datos en el archivo


credit.sqlite3, que pueden ser transportados a otros sistemas, según sea necesario.
Para acceder a este archivo más adelante, simplemente volver a abrir la conexión de
base de datos y crear un objeto de TBL, de la siguiente manera:
> credit_db_conn <- src_sqlite ( "credit.sqlite3")
> credit_tbl <- TBL (credit_db_conn, "credit_tbl")

A pesar del hecho de que dplyr se enruta a través de una base de datos, el objeto
credit_tbl aquí actuará exactamente igual que cualquier otro objeto TBL y va a
obtener todos los otros beneficios del paquete dplyr.

Haciendo tramas de datos más rápido con data.table


El paquete data.table por Matt Dowle, Tom Short, Steve Lianoglou, y Arun
Srinivasan ofrece una versión mejorada de una trama de datos denominada tabla de
datos. Los objetos data.table son típicamente mucho más rápido que las tramas de
datos para la creación de subconjuntos, unión y las operaciones de agrupación. Para
los más grandes conjuntos de datos con los muchos millones de filas-estos objetos
pueden ser sustancialmente más rápido que incluso los objetos dplyr. Sin embargo,
porque es esencialmente una trama de datos mejorada, los objetos resultantes
pueden aún ser utilizados por cualquier función R que acepta una trama de datos.

El proyecto data.table se puede encontrar en GitHub en


https://github.com/Rdatatable/data.table/wiki.

Después de instalar el paquete data.table, la función fread () leerá archivos CSV


tabulares como en objetos de la tabla de datos. Por ejemplo, para cargar los
datos de crédito utilizada previamente, tipo:
> biblioteca (data.table)
> crédito <- fread ( "credit.csv")

[ 415 ]
Máquina de aprendizaje especializado temas

La tabla de datos de crédito, entonces se puede consultar utilizando la sintaxis


similar a la de R [fila, col] forma, pero optimizado para la velocidad y algunas
comodidades útiles adicionales. En particular, la estructura de la tabla de datos
permite que la porción fila para seleccionar filas utilizando un comando de
subconjuntos abreviado, y la porción col utilizar una función que hace algo con las
filas seleccionadas. Por ejemplo, el siguiente comando calcula la cantidad del
préstamo solicitado media para las personas con un buen historial de crédito:
> crédito [credit_history == "bueno", media
(cantidad)] [1] 3040.958

Con la construcción de consultas más grandes con esta sintaxis simple,


operaciones muy complejas se pueden realizar en las tablas de datos. Puesto que
la estructura de datos está optimizado para la velocidad, que puede ser utilizado
con grandes conjuntos de datos.
Una de las limitaciones de las estructuras data.table es que al igual que las
tramas de datos que están limitados por la memoria disponible del sistema. Las
siguientes dos secciones se tratan los paquetes que superan este defecto a
expensas de romper la compatibilidad con muchas funciones R.

Los paquetes dplyr y data.table cada uno tiene fortalezas únicas.


Para una comparación en profundidad, echa un vistazo a la siguiente
discusión de desbordamiento de pila en
http://stackoverflow.com/questions/21435339/ los datos
de la tabla-vs-dplyr-can-uno-do-algo-y-el- otra-cant-
o-does-mal. También es posible tener lo mejor de ambos mundos,
como estructuras data.table se pueden cargar en dplyr utilizando la
función tbl_dt ().

La creación de tramas de datos basados en disco con


ff
El paquete FF por Daniel Adler, Christian Glaser, Oleg nenadic, Jens Oehlschlägel,
y Walter calabacín ofrece una alternativa a una trama de datos (ffdf) que permite a
los conjuntos de datos de más de dos mil millones de filas que se creen, aunque esto
es muy superior a la memoria del sistema disponibles .
La estructura ffdf tiene un componente físico que almacena los datos en un disco en
una forma altamente eficiente, y un componente virtual que actúa como una trama
de datos R típico, pero de forma transparente apunta a los datos almacenados en el
componente físico. Se puede imaginar el objeto ffdf como un mapa que apunta a una
ubicación de los datos en un disco.

[ 416 ]
El proyecto es ff en el sitio Web
http://ff.r-forge.r-project.org/.

[ 417 ]
capítulo 12

Una desventaja de las estructuras de datos FFDF es que no se pueden utilizar de


forma nativa por la mayoría de las funciones R. En lugar de ello, los datos deben ser
procesados en pequeños trozos, y los resultados se deben combinar más adelante. El
lado positivo de fragmentar los datos es que la tarea se puede dividir entre varios
procesadores que utilizan simultáneamente los métodos de cálculo paralelo que se
presentan más adelante en este capítulo.

Después de instalar el ff paquete, que debe leer en un archivo CSV grande, utilice el
read.csv.ffdf ()
función, como sigue:
> biblioteca (ff)
> crédito <- read.csv.ffdf (file = "credit.csv", encabezado = VERDADERO)

Desafortunadamente, no podemos trabajar directamente con el objeto ffdf, como un


intento de tratarlo como un tradicional resultados de tramas de datos en un mensaje
de error:
> significa (crédito $ cantidad)
[1] NA
Mensaje de advertencia:
En mean.default (cantidad de crédito $):
argumento no es numérico o lógico: regresar NA

El paquete ffbase por Edwin de Jonge, Jan Wijffels, y Jan van der Laan aborda esta
cuestión en cierta medida por la adición de capacidades de análisis básicas usando
objetos ff. Esto hace posible el uso de FF objetos directamente para la exploración
de datos. Por ejemplo, después de instalar el paquete ffbase, la función de media
funciona como se esperaba:
> biblioteca (ffbase)
> significa (crédito
$ cantidad) [1]
3271.258

El paquete también ofrece otras funcionalidades básicas, tales como operadores


matemáticos, funciones de consulta, las estadísticas de resumen, y envoltorios para
trabajar con algoritmos de aprendizaje automático optimizado como biglm
(descritos más adelante en este capítulo). Aunque éstos no eliminan por completo
los desafíos de trabajar con conjuntos de datos extremadamente grandes, que hacen
que el proceso un poco más fluida.

Para obtener más información sobre la funcionalidad avanzada, visite el ffbase


sitio del proyecto en http://github.com/edwindj/ffbase.
[ 418 ]
Máquina de aprendizaje especializado temas

El uso de matrices masivas con bigmemory


El paquete bigmemory por Michael J. Kane, John W. Emerson, y Peter Haverty
permite el uso de matrices muy grandes que superan la cantidad de memoria
disponible del sistema. Las matrices pueden ser almacenados en un disco o en la
memoria compartida, lo que les permite ser utilizados por otros procesos en el
mismo equipo o en una red. Esto facilita métodos de computación en paralelo, tales
como los cubiertos más adelante en este capítulo.

documentación adicional sobre el paquete bigmemory se


puede encontrar en http://www.bigmemory.org/.

Debido a que las matrices bigmemory son intencionalmente a diferencia de tramas


de datos, que no se pueden utilizar directamente con la mayoría de los métodos de
aprendizaje automático se tratan en este libro. También se pueden utilizar solamente
con datos numéricos. Dicho esto, ya que son similares a una matriz R típico, es fácil
para crear muestras más pequeñas o trozos que pueden ser convertidos en
estructuras de datos estándar r.
Los autores también proporcionan la bigalgebra, biganalyticsy bigtabulate
paquetes, que permiten análisis sencillos que se realizarán en las matrices. De
particular interés es labigkmeans () función en el biganalytics paquete, que
realiza k-means clustering como se describe en el capítulo 9, encontrar grupos de
datos - La agrupación de k-medias. Debido a la naturaleza altamente especializada
de estos paquetes, los casos de uso están fuera del alcance de este capítulo.

Aprender más rápido con la computación


paralela
En los primeros días de la computación, los procesadores ejecutan las
instrucciones en serie que significaba que se limitaron a realizar una sola tarea a
la vez. La siguiente instrucción no pudo iniciarse hasta que la instrucción
anterior era completa.
Aunque fue ampliamente conocido que muchas tareas se podrán realizar de manera más
eficiente
completando los pasos al mismo tiempo, la tecnología simplemente no existía todavía.

[ 419 ]
capítulo 12

Esto se enfrentó con el desarrollo de métodos de computación en paralelo, que


utilizan un conjunto de dos o más procesadores o computadoras para resolver un
problema más grande. Muchos ordenadores modernos están diseñados para la
computación paralela. Incluso en los casos en los que tienen un único procesador,
que a menudo tienen dos o más núcleos que son capaces de trabajar en paralelo. Esto
permite tareas que deben realizarse de forma independiente el uno del otro.

Redes de varios equipos llamados cúmulos también se pueden utilizar para la


computación paralela. Un grupo grande puede incluir una variedad de
hardware y ser separados
a grandes distancias. En este caso, el grupo se conoce como una cuadrícula. Llevado
al extremo, un grupo o una rejilla de cientos o miles de equipos con hardware básico
podría ser un sistema muy potente.
La captura, sin embargo, es que no todos los problemas se puede paralelizar.
Algunos problemas son más propicias para la ejecución en paralelo que otros. Se
podría esperar que la adición de 100 procesadores se traduciría en la realización de
100 veces el trabajo en la misma cantidad de tiempo (es decir, el tiempo total de
ejecución sería 1/100), pero esto normalmente no es el caso. La razón es que se
necesita un esfuerzo para gestionar los trabajadores. El trabajo debe ser dividido en
igualdad de tareas, que no se superponen, y cada uno de los resultados de los
trabajadores debe combinarse en una sola respuesta final.
Los llamados problemas vergonzosamente paralelas son ideales. Es fácil de reducir
estas tareas en bloques que no se superponen de trabajo y recombinar los
resultados. Un ejemplo de una tarea de aprendizaje máquina vergonzosamente
paralelo sería de 10 veces la validación cruzada; una vez que las 10 muestras se
dividen, cada uno de los 10 bloques de trabajo es independiente, lo que significa que
no afectan a los demás. Como pronto se verá, esta tarea puede
se aceleró de manera espectacular el uso de la computación en paralelo.

[ 420 ]
Máquina de aprendizaje especializado temas

La medición de tiempo de ejecución


Los esfuerzos para acelerar R serán en vano si no es posible medir de forma
sistemática cuánto tiempo se guarda. A pesar de un cronómetro es una opción,
una solución más fácil sería para envolver el código en una función system.time
().

Por ejemplo, en mi portátil, la función system.time () señala que se tarda alrededor


0,093 segundos para generar un millón de números aleatorios:
> system.time (rnorm
(1.000.000)) usersystem
transcurrido
0.0920.0000.093

La misma función se puede utilizar para evaluar la mejora en el


rendimiento obtenido usando los métodos que se acaban de describir o
cualquier función R.

Por lo que vale la pena, cuando se publicó la primera edición, generando una
millón de números aleatorios tomó 0.13 segundos. A pesar de que ahora
estoy usando un equipo ligeramente más potente, esta reducción de
alrededor del 30 por ciento
del tiempo de procesamiento sólo dos años más tarde ilustra la rapidez
hardware y software están mejorando.

Trabajando en paralelo con múltiples núcleos y la


nieve
El paquete paralelo, ahora incluido con R versión 2.14.0 y superior, ha bajado la
barrera de entrada para implementar algoritmos paralelos, proporcionando un
marco estándar para establecer procesos de trabajo que pueden completar tareas
simultáneamente. Esto se hace mediante la inclusión de componentes de los
paquetes multi-núcleo y de la nieve, cada uno con un enfoque diferente hacia la
multitarea.
Si el ordenador es bastante reciente, es probable que sea capaz de utilizar el
procesamiento en paralelo. Para determinar el número de núcleos de la
máquina tiene, utilice los detectCores () la función como sigue. Tenga en
cuenta que la salida será diferente dependiendo de las especificaciones de
hardware:
> biblioteca (paralelo)
> detectCores ()

[ 421 ]
[1] 8

[ 422 ]
capítulo 12

El paquete de múltiples núcleos fue desarrollado por Simon Urbanek y permite


el procesamiento paralelo en una única máquina que tiene varios procesadores
o núcleos de procesador.
Utiliza las capacidades multitarea del sistema operativo de un ordenador a la mesa
sesiones adicionales de I que comparten la misma memoria. Es tal vez la forma más
sencilla de empezar a trabajar con el procesamiento paralelo en R. Por desgracia,
debido a que Windows no admite que se bifurcan, esta solución no funciona en
todas partes.
Una manera fácil de empezar a trabajar con la funcionalidad multi-núcleo es utilizar
la función mclapply (), que es una versión paralela de lapply (). Por ejemplo, los
siguientes bloques de código ilustran cómo la tarea de generar un millón de
números aleatorios se puede dividir a través de 1, 2, 4, y 8 núcleos. La función no
listados () se utiliza para combinar los resultados paralelas (una lista) en un único
vector después de cada núcleo ha completado su parte de trabajo:
> system.time (l1 <- rnorm
(1.000.000)) usersystem
transcurrido
0.0940.0030.097

> system.time (L2 <- no listados (mclapply (1: 2, la


función (x) {rnorm (500,000)}, mc.cores = 2)))
usersystem
transcurrido
0.1060.045
0,076

> system.time (L4 <- no listados (mclapply (1: 4, la


función (x) {rnorm (250,000)}, mc.cores = 4)))
usersystem
transcurrido
0.1350.055
0,063

> system.time (l8 <- no listados (mclapply (1: 8, la


función (x) {rnorm (125,000)}, mc.cores = 8)))
usersystem
transcurrido
0.1230.058
[ 423 ]
0,055

Observe cómo como el número de núcleos aumenta, el tiempo transcurrido


disminuye, y el beneficio disminuye. Aunque este es un ejemplo sencillo, que se
puede adaptar fácilmente a muchas otras tareas.

[ 424 ]
Máquina de aprendizaje especializado temas

El paquete de nieve (trabajo en red sencilla de estaciones de trabajo) por Luke Tierney, A.
J. Rossini, Na Li, y H. Ševčíková permite computación en paralelo en máquinas de
varios núcleos o, así como en una red de múltiples máquinas. Es un poco más
difícil de usar, pero ofrece mucha más potencia y flexibilidad. Después de instalar
la nieve, para configurar un clúster en una sola máquina, utilice la función
makeCluster () con el número de núcleos para ser utilizado:
> biblioteca (nieve)
> CL1 <- makeCluster (4)

Debido a que la nieve se comunica a través de tráfico de la red, dependiendo de


su sistema operativo, puede recibir un mensaje de aprobar el acceso a través del
firewall.
Para confirmar si el cluster está en funcionamiento, podemos pedir a cada nodo para
informar su nombre de host. La función clusterCall () realiza una función en cada
máquina del clúster. En este caso, definiremos una función que simplemente llama a
la función Sys.info () y devuelve el parámetro de nombre de nodo:
> clusterCall (CL1, function () {Sys.info () [ "nombre de
nodo"]}) [[1]]
nombrede
nodo "Bretts-macbook-
Pro.local"

[[2]]
nombre del nodo
"Bretts-macbook-Pro.local"

[[3]]
nombre del nodo
"Bretts-macbook-Pro.local"

[[4]]
nombre del nodo
"Bretts-macbook-Pro.local"

[ 425 ]
capítulo 12

Como era de esperar, ya que los cuatro nodos ejecutan en una sola máquina, que
informan el mismo nombre de host. Para tener los cuatro nodos ejecutar un
comando diferente, ellos suministrar con un parámetro único a través de la función
clusterApply (). A continuación, le ofreceremos cada nodo con una letra diferente.
Cada nodo a continuación, realizar una función simple en su carta en paralelo:
> clusterApply (CL1, c ( 'A', 'B', 'C', 'D'),
la función (x) {pasta ( "Cluster" x "listos!")})
[[1]]
[1] "Cluster Una lista!"

[[2]]
[1] "Grupo B listo!"

[[3]]
[1] "Grupo C listo!"

[[4]]
[1] "Categoría D listo!"

Una vez que hemos terminado con el grupo, es importante para terminar
los procesos que dio lugar. Esto va a liberar los recursos que cada nodo está
usando:
> stopCluster (CL1)

El uso de estos comandos simples, es posible acelerar muchas tareas de aprendizaje


automático. Para los problemas de grandes volúmenes de datos más grandes, las
configuraciones de nieve mucho más complejas son posibles. Por ejemplo, es
posible que intente configurar un clúster de una red de muchas máquinas de nivel
de consumidor Beowulf. En entornos de investigación académicos e industriales
con clústeres de equipos dedicados, la nieve puede utilizar el paquete de medio
RPMI acceder a estos servidores de alto rendimiento de la interfaz de paso de
mensajes (MPI). Trabajar con tales
racimos requiere el conocimiento de las configuraciones de red y hardware de
computación,
que está fuera del alcance de este libro.

Para una introducción más detallada a la nieve, incluyendo


información sobre cómo configurar la computación paralela en
varios ordenadores en una red, consulte http:
//homepage.stat. uiowa.edu/~luke/classes/295-

[ 426 ]
hpc/notes/snow.pdf.

[ 427 ]
Máquina de aprendizaje especializado temas

Aprovechando paralelo con foreach y doParallel


El paquete foreach por Steve Weston de la Revolución Analytics proporciona quizá
la forma más sencilla de empezar con la computación paralela, sobre todo si está
ejecutando R en Windows, ya que algunos de los otros paquetes dependen de la
plataforma.
El núcleo del paquete es una nueva construcción foreach bucle. Si ha trabajado
con otros lenguajes de programación, usted puede estar familiarizado con ella.
En esencia, permite que un bucle a través de una serie de elementos en un
conjunto sin contar explícitamente el número de elementos; en otras palabras,
para cada producto en el conjunto, hacer algo.

Además del paquete de foreach, Revolution Analytics


(recientemente adquirida por Microsoft) ha desarrollado de alto
rendimiento,
lista para la empresa R construye. versiones libres están disponibles para el juicio
y el uso académico. Para obtener más información, consulte su sitio web en
http://www.revolutionanalytics.com/.

Si usted está pensando que R ya ofrece un conjunto de funciones para aplicar un


bucle sobre los conjuntos de elementos (por ejemplo, aplicar (), lapply (), sapply
(), y así sucesivamente), que está
correcto. Sin embargo, el bucle foreach tiene un beneficio adicional: iteraciones del bucle
se puede completar en paralelo utilizando una sintaxis muy sencilla. Vamos a ver

cómo funciona esto. Recordemos el comando que hemos estado usando para

generar un millón de números aleatorios:


> system.time (l1 <- rnorm
(1.000.000)) usersystem
transcurrido
0.0960.0000.096

Después de que el paquete foreach ha sido instalado, se puede expresar por un bucle
que genera cuatro conjuntos de 250.000 números aleatorios en paralelo. El parámetro
.combine es una configuración opcional que le dice foreach que funcionan que debe
utilizar para combinar el conjunto final de resultados de cada iteración del bucle. En
este caso, puesto que cada iteración genera un conjunto de números aleatorios,
simplemente usamos la función concatenar c () para crear un único, vector
combinado:
> biblioteca (foreach)
> system.time (L4 <- foreach (i = 1: 4, = .combine 'c')

[ 428 ]
%hacer% rnorm
(250000)) usersystem
transcurrido
0.1060.0030.109

[ 429 ]
capítulo 12

Si notas que esta función no se tradujo en una mejora de la velocidad, buena


captura! La razón es que, por defecto, el paquete foreach se ejecuta cada iteración
del bucle en serie. El paquete de hermana doParallel proporciona un backend
paralelo para foreach que utiliza el paquete paralelo incluido con R, que fue descrito
anteriormente en este capítulo. Después de instalar el paquete doParallel,
simplemente registrar el número de núcleos y cambie el% hacer comando% con%
dopar%, como sigue:
> biblioteca (doParallel)
> registerDoParallel (núcleos = 4)
> system.time (L4P <- foreach (i = 1: 4, = .combine 'c')
% Dopar% rnorm (250000))
usersystem
transcurrido
0.0620.030
0,054

Como se muestra en la salida, este código da como resultado la mejora del


rendimiento esperado, casi cortar el tiempo de ejecución en un medio.

Para cerrar la doParallel cluster, simplemente escriba:


> stopImplicitCluster ()

Aunque el grupo se cerrará automáticamente al final de la sesión de R, es mejor


forma de hacerlo de forma explícita.

Computación Paralela nube con MapReduce y


Hadoop
El modelo de programación MapReduce fue desarrollado en Google como una
manera de procesar sus datos en un gran grupo de ordenadores conectados en red.
Mapreduce programación en paralelo se define como un proceso de dos pasos:
• Un paso mapa en el que un problema se divide en tareas más
pequeñas que se distribuyen a través de los equipos del clúster
• Un paso reducir en la que se recogen y se sintetizan en una solución final
para el problema original de los resultados de los pequeños trozos de
trabajo

Un popular alternativa de código abierto al marco MapReduce es propietaria


de Apache Hadoop. El software Hadoop comprende el concepto de
MapReduce, además de un sistema de ficheros distribuido capaz de almacenar
grandes cantidades de datos a través de
[ 430 ]
un conjunto de ordenadores.

[ 431 ]
Máquina de aprendizaje especializado temas

Packt Publishing ha publicado un gran número de libros sobre Hadoop.


Para buscar las ofertas actuales, visita
https://www.packtpub.com/ todo /? search =
hadoop.

Varios proyectos de I que proporcionan una interfaz R para Hadoop están en


desarrollo. El proyecto RHadoop por Revolution Analytics proporciona una
interfaz R para Hadoop.
El proyecto ofrece un paquete, RMR, la intención de ser una manera fácil para los
desarrolladores R escribir programas MapReduce. Otro paquete de compañía,
plyrmr, proporciona una funcionalidad similar al paquete dplyr para procesar
grandes conjuntos de datos. Los paquetes adicionales RHadoop proporcionan
funciones de I acceder a los almacenes de datos distribuidos de Hadoop.

Para obtener más información sobre el proyecto RHadoop, véase


https: // github. com / RevolutionAnalytics /
RHadoop / wiki.

Otro proyecto similar es RHIPE por Saptarshi Guha, que intenta traer división de
Hadoop y recombinar la filosofía en R por la gestión de la comunicación entre R y
Hadoop.

El paquete RHIPE todavía no está disponible en


CRAN, pero se puede construir desde la fuente
disponible en la Web en
http://www.datadr.org.

computación de la GPU
Una alternativa al procesamiento paralelo utiliza unidad de procesamiento gráfico
de un ordenador (GPU) para aumentar la velocidad de los cálculos matemáticos.
Una GPU es un procesador especializado que está optimizado para visualizar
rápidamente las imágenes en una pantalla de ordenador. Debido a que un equipo
necesita a menudo para mostrar gráficos complejos en 3D (en particular para los
videojuegos), muchos utilizan las GPU de hardware diseñado para el procesamiento
paralelo y cálculos matriciales y vectoriales extremadamente eficientes. Un beneficio
adicional es que pueden ser utilizados
para resolver de manera eficiente ciertos tipos de problemas matemáticos. Cuando un
equipo
procesador puede tener 16 núcleos, una GPU puede tener miles.

[ 432 ]
capítulo 12

La desventaja de computación de la GPU es que requiere hardware específico que


no se incluye en muchas computadoras. En la mayoría de los casos, se requiere una
GPU del fabricante Nvidia, ya que proporcionan un marco patentada llamada
completa Device Architecture unificada (CUDA) que hace que la programable GPU
utilizando lenguajes comunes, tales como C ++.

Para obtener más información sobre el papel de Nvidia en


la computación de la GPU, ir
http://www.nvidia.com/object/what-is-
GPU-computing.html.

El paquete gputools por Josh Buckner, Mark Seligman, y Justin Wilson implementa
varias funciones R, tales como operaciones de la matriz, el agrupamiento, y el
modelado de regresión utilizando el kit de herramientas Nvidia CUDA. El paquete
requiere una GPU CUDA 1.3 o superior y la instalación del kit de herramientas
CUDA de Nvidia.

La implementación de algoritmos de aprendizaje


optimizados
Algunos de los algoritmos de aprendizaje automático se tratan en este libro son
capaces de trabajar en muy grandes conjuntos de datos con modificaciones
relativamente menores. Por ejemplo, sería bastante sencillo de implementar Naive
Bayes o el algoritmo Apriori utilizando una de las estructuras de datos para grandes
conjuntos de datos descritos en las secciones anteriores. Algunos tipos de alumnos,
tales como conjuntos, se prestan bien a la paralelización, porque el trabajo de cada
modelo puede ser distribuido a través de procesadores o equipos de un clúster. Por
otro lado, algunos requieren cambios más grandes a los datos o algoritmo, o necesita
ser replanteado por completo, antes de que puedan ser utilizados con grandes
conjuntos de datos.
A continuación se analiza paquetes que proporcionan versiones optimizadas de
los algoritmos de aprendizaje que hemos trabajado hasta ahora.
[ 433 ]
Máquina de aprendizaje especializado temas

La construcción de grandes modelos de regresión con


biglm
El paquete biglm por Thomas Lumley proporciona funciones para entrenar modelos
de regresión en conjuntos de datos que pueden ser demasiado grandes para caber en
la memoria. Funciona mediante el uso de un proceso iterativo en el que el modelo se
actualiza poco a poco el uso de pequeñas cantidades de datos.
A pesar de que sea un enfoque diferente, los resultados serán casi idéntica a la que
se alcanzaría mediante la ejecución de la función lm convencional () en todo el
conjunto de datos.
Para mayor comodidad mientras se trabaja con los conjuntos de datos más
grandes, la función biglm () permite el uso de una base de datos SQL en lugar
de una trama de datos. El modelo también puede ser entrenado con trozos
obtenidos a partir de objetos de datos creados por el paquete FF descrito
anteriormente.

Cada vez más grande y más rápido al azar


bosques con bigrf
El paquete bigrf por Luis Lim implementa la formación de los bosques al azar para la
clasificación y la regresión en conjuntos de datos que son demasiado grandes para
caber en la memoria. Utiliza los objetos bigmemory como se ha descrito
anteriormente en este capítulo. Para el crecimiento de los bosques más rápido, el
paquete se puede utilizar con el foreach y paquetes doParallel descrito anteriormente
para plantar árboles en paralelo.

Para obtener más información, incluyendo ejemplos y de instalación de


Windows instrucciones, consulte la wiki del paquete, que está alojado en GitHub
en
https://github.com/aloysius-lim/bigrf.

Formación y evaluación de modelos en paralelo


con acento circunflejo
los signo de intercalación paquete por Max Kuhn (cubierto ampliamente en
el Capítulo 10, Evaluación del desempeño del modelo y el capítulo 11, La mejora
de Modelo de rendimiento) será transparente utilizar un backend paralelo si se
ha registrado con R usando el para cada paquete descrito anteriormente.

[ 434 ]
capítulo 12

Vamos a echar un vistazo a un ejemplo sencillo en el que se intenta formar un


modelo de bosque al azar en el conjunto de datos de crédito. Sin paralelización, el
modelo tiene alrededor de 109 segundos para ser entrenados:
> biblioteca (caret)
> crédito <- read.csv ( "credit.csv")
> system.time (tren (por defecto ~., datos = crédito, method =
"RF")) usersystem transcurrido
107.8620.990 108.873

Por otro lado, si utilizamos el paquete doParallel para registrar los cuatro núcleos
para ser utilizado en paralelo, el modelo toma menos de 32 segundos para la
acumulación de menos de un tercio del tiempo, y que no hay que cambiar ni una
sola línea del código de intercalación:
> biblioteca (doParallel)
> registerDoParallel (núcleos = 4)
> system.time (tren (por defecto ~., datos = crédito, method =
"RF")) usersystem transcurrido
114.5782.03731.362

Muchas de las tareas implicadas en modelos que evalúan, como crear muestras
aleatorias y repetidamente probar predicciones para 10 veces la validación cruzada
formación y son vergonzosamente paralelo y maduro para mejoras de rendimiento.
Con esto en mente, es conveniente registrar siempre múltiples núcleos antes de
iniciar un proyecto de intercalación.

Las instrucciones de configuración y un estudio de caso de las mejoras


en el rendimiento necesarios para permitir el procesamiento paralelo en
el símbolo de intercalación están disponibles en la página web del
proyecto en http: //topepo.github. io / cursor /
parallel.html.

[ 435 ]
Máquina de aprendizaje especializado temas

Resumen
Sin duda, es un momento emocionante para ser el estudio de aprendizaje
automático. Los trabajos en curso en las fronteras relativamente inexploradas de la
computación paralela y distribuida ofrece un gran potencial para aprovechar el
conocimiento que se encuentra en la avalancha de datos grandes. La comunidad
científica creciente de datos se ve facilitada por el lenguaje de programación de
código libre y abierto R, que proporciona una barrera muy bajo para la entrada-sólo
hay que estar dispuesto a aprender.
Los temas que han aprendido, tanto en este capítulo y en los capítulos anteriores,
proporcionan la base para comprender los métodos de aprendizaje de máquinas más
avanzadas. Ahora es su responsabilidad mantener el aprendizaje y la adición de
herramientas a su arsenal. A lo largo de
camino, asegúrese de tener en cuenta el teorema de ningún algoritmo de
aprendizaje no Almuerzo Libre puede gobernarlos a todos, y todos ellos tienen
diferentes fortalezas y debilidades. Por esta razón, siempre habrá un elemento
humano a la máquina de aprendizaje, la adición de conocimientos de las materias y
la capacidad para que coincida con el algoritmo adecuado para la tarea en cuestión.
En los próximos años, será interesante ver cómo cambia el aspecto humano
como la línea entre la máquina de aprendizaje y el aprendizaje humano es
borrosa. Los servicios tales
como Mechanical Turk de Amazon proporcionar inteligencia multitud de fuentes,
que ofrece un conjunto de mentes humanas listos para realizar tareas sencillas en
cualquier momento. Tal vez un día, al igual que hemos utilizado las computadoras
para realizar tareas que los seres humanos no pueden hacer fácilmente, ordenadores
emplearán los seres humanos para hacer a la inversa. Lo interesante de reflexión!

[ 436 ]
Índice
gobernar interés, que mide 263, 264
símbolos un conjunto de reglas, con la
construcción
algoritmo 1R 153
10-veces la validación cruzada (CV 10 veces) principio a priori 265
ajuste de parámetros automatizado
340
paquete de intercalación utilizada de 349-352
UNA
abstracción 11
función de
activación
aproximadamente 222, 223
función de activación sigmoide 224,
225 función de activación umbral
223 función de activación paso
unidad 223
algoritmo AdaBoost.M1 367
adaptativo impulsar (AdaBoost) 145, 367
función de asignación 360
Apache Hadoop 411 de
programación de
aplicaciones
Interfaces (APIs) 388
algoritmo Apriori
para el aprendizaje de reglas de asociación
261-263 principio, que se utiliza para la
construcción conjunto de reglas 265
fortalezas 262
A priori propiedad 262
El área bajo la ROC la curva (AUC)
333 Artificial Neural Network (ANN)
220 reglas de asociación
260
tiendas de comestibles de
compra frecuente,
identificar con 266
potencial 261 aplicaciones
[ 437 ]
REQUISITOS 349, 350
axón 221

segundo
retropropagación
aproximadamente 229
redes neuronales, la formación con 229
embolsado 362-366
bolsa-de-palabras 105
créditos bancarios ejemplo,
con árboles de
decisión C5.0
datos, recogiendo 136
datos, la exploración 137, 138
datos, la preparación de 137, 138
el rendimiento del modelo,
evaluación 144 el rendimiento del
modelo, mejorando 145 modelo, la
formación en los datos 140-143 la
formación al azar, creando 138-
140 conjuntos de datos de prueba,
creando 138-140
Los métodos bayesianos
alrededor del 90
la probabilidad condicional 94-97
probabilidad conjunta 92-94
probabilidad 91, 92
clúster Beowulf 409
intermediación centralidad 397
243 sesgo
compensación sesgo-
varianza 70 paquete biglm
Los modelos de regresión, la construcción 414
paquete bigmemory
matrices masivas, utilizando con
404 URL 404
paquete bigrf
bosques aleatorios, edificio 414

[ 438 ]
414 URL clasificación
58 bimodal alrededor del 19
binning 102 actuación, midiendo 312
bins 102 predicción datos 313-317
Bioconductor Formación de clasificación y regresión
aproximadamente 393 (Paquete de intercalación)
393 URL aproximadamente 321
bioinformática URL 350, 415
aproximadamente 393 utilizado, para la evaluación
los datos, el análisis de 393 de modelos en paralelo
relaciones bivariadas 59 414, 415
procesos de caja negra 219 usando, por ajuste de
blowby 175 parámetros automatizado
masa corporal índice (IMC) 349-352
187 impulsar 366-368 Árbol de clasificación y regresión (CART)
la agregación de arranque 362 algoritmo 201
bootstrap de muestreo 343, 344 reglas de clasificación
de caja y bigotes parcela 49 algoritmo 1R 154, 155
ramas 126 aproximadamente 149, 150
ejemplo el cáncer de mama obtener, a partir de árboles de
datos, recogiendo 76 decisión 157 algoritmo
los datos, la exploración de 77-79 DESTRIPADOR 155, 156 separada
datos, la preparación de 77-79 y conquista 150-152
diagnosticar, con k-NN algoritmo 75 problema desequilibrio clase
el rendimiento del modelo, la 312 clustering
evaluación 83, 84 el rendimiento del aproximadamente 21, 286
modelo, mejorando 84 modelo, la como tarea de aprendizaje automático 286-288
formación en los datos 81, 82 columna-mayor orden 38
función de combinación 361
do Unified Device completa
Architecture (CUDA) 413 Amplia red
algoritmo C5.0 Archivo R (CRAN)
aproximadamente 131 aproximadamente el 23, 398
árbol de decisión, la poda 135, 136 tarea vista, URL 393
split, seleccionando 133-135 URL 23
fortalezas 132 Tecnologías web, URL 381
debilidades 132 la resistencia del hormigón, modelado con las
características categóricas 18 RNA
variables categóricas aproximadamente 231
aproximadamente 56-58 datos, recogiendo 232
tendencia central, medición 58, 59 los datos, la exploración de 232-234
cuerpo de la célula 221 datos, la preparación de 232, 233
centroide 293 el rendimiento del modelo, evaluación
características, redes neuronales 237 el rendimiento del modelo,
función de activación 222 mejorando 238, 239
topología de la red 222 modelo, la formación en los datos 234, 235
formación algoritmo 222 probabilidad condicional 94
matriz de confusión
[ 439 ]
aproximadamente 317, 318
utilizado, para medir el desempeño
319-321

[ 440 ]
paquete data.table
objeto de control 355
401 URL
casco convexo 242
utilizando 401, 402
corpus 107
disputas datos 378
correlación 179, 180
validación cruzada 340-343
archivo CSV (valores separados por
comas)
alrededor del 41
datos, importación de 41
utilidad de rizo 382
puntos de corte 102

re
datos
importación, a partir de archivos CSV 41
la gestión, con R 39
Gestión de base de datos
Sistemas (DBMS) 379
bases de datos
aproximadamente 378
los datos, la consulta en bases de datos
SQL 379, 380
diccionario de datos 43
exploración de datos 42
marco de datos 35, 36
minería de datos 3
munging datos 378
preparación de datos, el cáncer de mama
ejemplo
prueba conjuntos de datos, la creación de
80, 81
formación, la creación de 80,
81 Data Source Name (DSN)
379 almacenamiento de datos
10
estructuras de datos, R
aproximadamente el 28
matriz 38, 39
trama de datos 35-37
explorar 43, 44
factor de 30, 31
listas 32-34
de carga 39, 40
matriz 37
la eliminación de 39, 40
ahorro de 39, 40
vector 28, 29
[ 441 ]
los nodos de
decisión 126
árbol de
decisión
aproximadamente 127, 136
exactitud, aumentando 145-147
reglas de clasificación,
obteniendo de 157 divide y
conquistaras 127-131
usos potenciales 127
poda 135, 136
utilizado, para la identificación de banco
riesgoso préstamos 136
bosques de árboles de decisión 369, 370
aprendizaje profundo 227
Profundo Neural Network
(DNN) 227 delimitador 41
dendritas 221
94 eventos dependientes
variable dependiente 172
modelo
descriptivo 20
tramas de datos
basadas en
disco
la creación, con el
paquete FF 402, 403 divide
y conquistaras 127-131
datos específicos del
dominio
bioinformática los datos, el
análisis de 393 datos de la red,
analizando 393-397 datos de la
red, visualizando 393-397
trabajando con 392
paquete doParallel
utilizando 410, 411
paquete dplyr
399 URL
utilizado, para generalizar
datos tabulares 399-
401 estructuras
codificación maniquí 73, 195
variable ficticia 62, 195

mi
principios de detener 135
edgelist 395
28 elementos
problemas vergonzosamente
paralelas 405 conjuntos
[ 442 ]
sobre 359, 362
ventajas 361, 362
harpillera 362-366
impulsar 366-368
bosques al azar 369, 370
entropía 133
aprendices codiciosos 158-160
época
aproximadamente 230
fase de retroceso 230
fase hacia adelante 230
la erosión 175
norma euclidiana 244
evaluación 14, 15

F
F1 anotar 330
factor 30, 31
anticipativo redes 227
proyecto ffbase
403 URL
paquete FF
402 URL
basado en disco utilizado,
para la creación de
tramas de datos 402,
403
de cinco números resumen 47
F-medida 330, 331
paquete foreach
utilizando 410, 411
víveres comprados con frecuencia
identificar, con reglas de asociación
266
F-Resultado 330
la estimación de rendimiento futuro
aproximadamente 336
oreja de muestreo 343, 344
validación cruzada 340-343
reducto 336-339 método

sol
gaussiana RBF kernel 248
generalización 13, 14
Modelos lineales generalizados (GLM)
174 glifo 249
gradiente ascendencia 230
unidad de procesamiento gráfico
(GPU)
aproximadamente 412
computación 412, 413
413 URL
Gráfico Modeling Language (GML) 395

[ 443 ]
cuadrícula 405

H
Hadoop
412 URL
utilizando 411, 412
Significado armonico 330
línea de cabecera 41
histogramas 51
método de
retención 336-
343 HTTR
paquete
383 URL
hiperplano 239
Hypertext Markup Language (HTML)
382

yo
paquete igraph
aproximadamente 394
394 URL
imputación 300
Incremental de error reducido
poda (IREP) algoritmo 155
93 eventos independientes
variables independientes 172
ganancia de
información
134 datos de
entrada
coincidente, a 22
algoritmos tipos 17,
18
los nódulos de entrada 226
aprendizaje basado en ejemplo 74
interceptar 172
Rango intercuartil
(IQR) 48 conjunto de
elementos 260
Iterativo Dichotomiser 3 (ID3) 131

J
(JavaScript Object Notation JSON)
aproximadamente 388
análisis, desde las API
web 388-392 URL 388
probabilidad
conjunta 92-94
paquete [ 444 ]
jsonlite
392 URL
340 lado izquierdo (LHS) 260
K niveles 19
Kaggle
347 URL
granos
usando, por no lineal 245-248 espacios
truco del núcleo
245 paquete
kernlab
referencia 252
k-veces la validación cruzada (CV k
veces) 340 k-medias ++ 291
k-m edios algoritmo de agrupamiento
aproximadamente 289, 290
número apropiado de grupos,
seleccionar 294-296
la distancia, que se utiliza
para asignar 290-294
racimo
la distancia, que se utiliza para la
actualización 290-294 racimo
k-n earest algoritmo de vecinos (k-NN)
sobre 66, 67
k apropiado, seleccionar 70, 71
datos, la preparación de 72-74
algoritmo de aprendizaje perezoso 74, 75
similitud, la medición de la distancia 69, 70
utilizado, para el diagnóstico de cáncer de
mama 75 debilidades 67

L
Laplace estimador 100, 101
grandes conjuntos de datos
data.table paquete, usando 401, 402
tramas de datos basados en disco,
creando con el paquete FF 402, 403
gestión 398
matrices masivas, utilizando con el
paquete bigmemory 404
estructuras de datos tabulares,
generalizando con dplyr 399-401
latitud 246
capas 226
algoritmos de aprendizaje
perezoso 74 nodos hoja 126
tasa de aprendizaje 231
dejar uno fuera método

[ 445 ]
LIBSVM
252 URL
probabilidad de 95
núcleo lineal 247
función de enlace 174
listas 32-34
curva de loess 193
Regresión logística 173
longitud 246

METRO
aprendizaje automático
alrededor de 3
4 abusos
ética 7, 8
5-7 limitaciones
orígenes 2, 3
proceso 9
R paquetes, la instalación 23, 24
R paquetes, de carga 24, 25
R paquetes, descarga 24, 25
5 éxitos
usos 4
con R 22, 23
aprendizaje automático, en la práctica
alrededor del 16
algoritmos, tipos 19-21
recopilación de datos 16
exploración y preparación de datos
dieciséis datos de entrada, a juego
con los algoritmos 21, 22 datos de
entrada, los tipos 17, 18
evaluación del modelo 16
16 mejora modelo
modelo de formación dieciséis
aprendizaje automático, proceso de
aproximadamente 9, 10
abstracción 9-12
almacenamiento 9 de datos, 10
evaluación 9, 14-16
generalización 9, 13, 14
paquete magrittr
aproximadamente 385
385 URL
Mapa reducido
aproximadamente 411, 412
Mapa etapa 411

[ 446 ]
normalización 72 ejemplo,
reducir paso 411
correo no deseado teléfono
marginal probabilidad de 95
móvil
canasta ejemplo de análisis
aproximadamente 259 datos, recogiendo 104, 105
datos, la exploración 105, 106
reglas de asociación, el ahorro de trama de
datos 283 datos, la preparación de 105, 106
reglas de asociación, guardarlas en un
archivo 283
datos, recogiendo 266, 267
los datos, la exploración de 267, 268
datos, la preparación de 267, 268
soporte de productos a, visualizando 272
el rendimiento del modelo, evaluar 277-
280 el rendimiento del modelo,
mejorando 280 modelo, la formación en
los datos 274-276
un conjunto de reglas de asociación, la
clasificación 280, 281 matriz dispersa,
creando para
transacción datos 268-271
subconjunto de reglas de asociación, la
clasificación 281, 282 datos de la
transacción, visualizando 273, 274
matriz 37
matriz notación 183
margen máximo hiperplano (MMH) 241
media 45
media error absoluto (MAE) 213
gastos médicos, que predicen con
regresión lineal
aproximadamente 186
matriz de correlación 189, 190
datos, recogiendo 186, 187
datos, la exploración 187, 189
datos, la preparación de 187-189
el rendimiento del modelo, mejorar 197-
201 el rendimiento del modelo, la
formación 196, 197 modelo, la formación
en los datos 193-195 relaciones,
visualizando
Entre las características 190
matriz de dispersión 190-193
paso de mensajes interfaz (MPI) 409
meta-alumnos
aproximadamente el 21
métodos, utilizados para mejorar el
rendimiento del modelo 359
mínimo máximo
[ 447 ]
información 227 capas 226
filtrado, con Naive algoritmo Bayes 103
características indicadoras, creando número de nodos en cada capa 228, 229
por frecuentes 119 palabras,
120
el rendimiento del modelo, evaluación 122,
123
el rendimiento del modelo, la mejora de 123,
124
modelo, la formación en los datos 121, 122
prueba conjuntos de datos,
la creación de 115, 116 datos
de texto, de limpieza 106-
112
texto de datos,
estandarización de 106-112
datos de texto, visualizando
116-119 documentos de
texto, la división
en palabras 112-115
formación, la creación de 115, 116
modelo 202
árboles
paquete de
múltiples
núcleos
utilizando 406-409
multicapa la red 227
Perceptrón multicapa (MLP)
228 multimodal 58
regresión logística multinomial 173
regresión lineal múltiple
aproximadamente 173, 181
debilidades 181
múltiple valor R cuadrado (coeficiente de
determinación) 197
relaciones multivariantes 59

norte
algoritmo bayesiano
aproximadamente 90, 97
clasificación 98-100
Laplace estimador 100, 101
características numéricas, utilizando con 102,
103
utilizado, para el filtrado de teléfono móvil
correo no deseado 103
clasificación del vecino más cercano
66 Premio Netflix
347 URL
análisis de red 394 datos
de red
analizar 393-397 [ 448 ]
visualizar 393-397
topología de
la red
alrededor de
225, 226
dirección de desplazamiento de
Open Database Connectivity (ODBC) 379
Redes neuronales
Reconocimiento óptico de caracteres (OCR) 249
sobre 220
algoritmos de aprendizaje optimizados
biológica, a las neuronas artificiales 221,
222 el despliegue de 413
características 222
la formación, la propagación hacia atrás
229-231
neuronas 220
nodos 220
característica nominal
18, 30 espacios no
lineales
núcleos, utilizando de 245-
248 distribución normal 54
numérico
alrededor del 18
53 de datos, 54
los datos, la normalización 79, 80
características, utilizando con Naive
Bayes 102, 103 predicción 20
variables numéricas
alrededor del 44
tendencia central, medición 45, 46
difusión, midiendo 47-56
visualizar 49-53

O
OCR, que se realiza con las SVM
aproximadamente 248
datos, recogiendo 249
datos, la exploración 250, 251
datos, la preparación de 250, 251
el rendimiento del modelo, evaluar 254-
256 el rendimiento del modelo,
mejorando 256, 257
modelo, la formación en los datos 252,
253
de una sola mano
tabla 57 datos en línea
texto completo de las
páginas web, la
descarga 382, 383
análisis 381
analizar, dentro de las páginas web 383-
386 trabajando con 381
servicios en línea
trabajar con 381
[ 449 ]
rendimiento del modelo, la
modelos en paralelo, que
evaluación 165
evaluaron con el paquete de
el rendimiento del modelo, mejorar 166-
intercalación 414, 415
168 modelo, la formación en los datos
bosques aleatorios, la
162, 164
construcción con
regresión de Poisson 173
el paquete bigrf
polinomio núcleo 247
414
Los modelos de regresión, la
construcción con el paquete
biglm 414
ordinal 18
ordinario Estimación por mínimos
cuadrados 177-179 fuera de la
bolsa de tasa de error 372
sobreajuste 15

PAG
paralelo cloud
computing
con Hadoop 411, 412
con MapReduce 411,
412
computación
paralela
sobre 404, 405
Tiempo de ejecución,
midiendo 406 con el
paquete doParallel 410, 411
con el paquete foreach 410,
411 con el paquete de
múltiples núcleos 406-409
con el paquete de la nieve
406-409
ajuste de parámetros 349
patrón de descubrimiento 20
coeficiente de correlación de Pearson 179
medidas de desempeño
aproximadamente 321, 322
matrices de confusión
utilizan 319-321 estadística
kappa 323-326
precisión 328-330
326-328 sensibilidad
especificidad
326-328
ventajas y
desventajas de
rendimiento
visualizar 331,
332
ejemplo setas venenosas,
[ 450 ]
con los alumnos de
reglas
datos, recogiendo 160, 161
datos, la exploración 161, 162
datos, la preparación de 161,
162 identificar, con los
alumnos de la regla 160 el
valor predictivo positivo 328 formación 370-372
probabilidad posterior 96 369 URL
postpruning 135
328 precisión
modelo predictivo 19
pre-poda 135
probabilidad previa 95
probabilidad 91
archivos de propiedad
aproximadamente 378
archivos de Microsoft Excel, lectura 378,
379
archivos de Microsoft Excel, escritura
378, 379
archivos SAS, lectura 378, 379
archivos SAS, escritura 378, 379
archivos de SPSS, lectura 378, 379
archivos de SPSS, escritura 378, 379
archivos de Stata, lectura 378, 379
archivos de Stata, escritura 378, 379
microarrays patentada
utilizando 393
pura 133
pureza 133

Q
optimización cuadrática 242
cuantiles 47

R
R
aproximadamente 22, 23
estructuras de datos 28
paquetes, la instalación 23, 24
paquetes, de carga 24, 25
paquetes, descarga 24, 25
utilizado, para la gestión de
datos 39 trabajar con la
clasificación
predicción datos 313-317
Funcion de base radial (RBF) red 225
bosques aleatorios
aproximadamente 369, 370
edificio, con el paquete bigrf 414 el
rendimiento, la evaluación 373-375
fortalezas 370

[ 451 ]
RCurl
382 URL
Características operativas del
receptor (ROC) curva
aproximadamente 332, 333
la creación de 334, 335
recurrente la red 228
recursiva
particionamiento
127 regresión
unos 172
añadiendo, a los
árboles 202-204
correlación 179
regresión lineal múltiple 181-186
ordinaria estimación por
mínimos cuadrados 177-179
Regresión lineal simple 174-177
utilizar 173 casos
Los modelos de regresión
edificio, con el paquete biglm 414
regresión 201
árboles relaciones
examinar 61
explorar, entre Variables 59
visualizante 59-61
Repitió incremental de poda
para cortar la reducción de
errores (DESTRIPADOR)
algoritmo 155
derechos residuales de autor 177
resubstitution de
error 336 Revolution
Analytics
410 URL
RHadoop
412 URL
paquete RHIPE
412 URL
lado derecho (RHS)
paquete 260 rio
aproximadamente 378
378 URL
préstamos bancarios riesgosos
identificar, árboles de decisión C5.0
utilizan 136
rutina para el
aprendizaje 74
rpart.plot
210 URL
R, la mejora del rendimiento
aproximadamente 398 [ 452 ]
GPU, computación
412, 413 grandes
conjuntos de datos,
gestión 398
Máquinas de vectores soporte (SVM)
algoritmos de aprendizaje
optimizados, el aproximadamente 239, 364
240 aplicaciones
despliegue de 413
caso de datos linealmente separables 242-244
paralela computación 404, 405
valor R cuadrado 197
rudimentario RNAs 220
rvest empaquetar 384

S
matriz de dispersión (SPLOM) 190-
192 escala Scoville 72
análisis de segmentación 21
semi-aprendizaje
supervisado 288 separada y
conquista 150-152 núcleo
sigmoide 248
Regresión lineal simple 173-177
sintonizado modelo sencillo
creando 352-355
variable de holgura
244
forma pendiente-
intersección 172 Colección
spam SMS
104 URL
bola de nieve
111 URL
paquete de nieve
409 URL
utilizando 406-409
servicio de redes sociales (SNS) 296
matriz dispersa 113, 268
bases de datos SQL
los datos, la consulta en el año 379, 380
aplastando funciones 225
apilamiento 361
desviación estándar 54
reducción de la desviación estándar
(SDR) 203 pruebas de hipótesis
estadísticas 173
modelos de valores
tuning, para un mejor rendimiento 348,
349 Structured Query Language (SQL)
379 crianza subárbol 136
reemplazo subárbol 136
estadísticas de resumen 44
aprendizaje supervisado 19
[ 453 ]
observación 17
caso de no linealmente datos
función de activación paso
separables 244, 245 clasificaciones,
unidad 223 estadística
con hiperplanos 240-242 OCR, que
univariante 59
se realiza con 248
función universal aproximador 229 aprendizaje
vectores de
sin supervisión 20
soporte 242
SVMlight
alred
edor
de
252
252
URL
sinaps
is 221

T
Valor separado por
tabuladores (TSV) 42
tabular
alrededor del 41
estructuras de datos,
generalizando con el
paquete dplyr 399-401
adolescente búsqueda segmentos
de mercado, con k-means
clustering
aproximadamente 296
datos, recogiendo 297
los datos, la exploración de 297-299
datos, la preparación de 297-301
el rendimiento del modelo,
evaluar 304-307 el rendimiento
del modelo, mejorando 308,
309 modelo, la formación en
los datos 302-304
nodos terminales 126
función de activación
umbral 223 formación 12
árboles
regresión, añadiendo a 202-204
estructura de
árbol 126
proceso de
sintonización
la personalización de 355-359
Bidireccional tabulación cruzada 61

T
Repositorio UCI Machine Learning
Datos [ 454 ]
aproximadamente 205
137 URL
unimodal 58
Unidad de
análisis 17
unidad de
V el rendimiento del modelo, mejorar 214-218
modelo, la formación en los datos 208, 209 el
vector 28 rendimiento, la medición de la media
diagrama de Voronoi 292 error absoluto 213, 214
nube de la palabra
W aproximadamente 116-119
116 URL
páginas web
texto completo, la descarga 382, 383 X
los datos, el análisis sintáctico 383-386
JSON, el análisis sintáctico desde las API xml2 GitHub
web 388-392 documentos XML, el 387 URL
análisis sintáctico 387 paquete XML
Web raspado 383 aproximadame
estimación de la calidad del vino, con nte 387
árboles de regresión 387 URL
aproximadamente 205
datos, recogiendo 205, 206 Z
los datos, la exploración de 206-208
datos, la preparación de 206-208 Zeror 153
árboles de decisión, visualizar 210-212 z-s estandarización núcleo 73, 85, 86
el rendimiento del modelo, la
evaluación 212, 213

[ 455 ]
Gracias por comprar
Máquina de aprendizaje con R
Segunda edicion

Acerca de Packt Publishing


Packt, pronunciado 'lleno', publicó su primer libro, El dominio de phpMyAdmin para la
eficaz gestión de MySQL, en abril de 2004, y posteriormente continuó a especializarse en
la publicación de libros altamente enfocados en tecnologías y soluciones específicas.
Nuestros libros y publicaciones comparten las experiencias de sus compañeros de los
profesionales de TI en la adaptación y personalización de sistemas, aplicaciones y marcos de
hoy en día. Nuestros libros basados en soluciones que dan el conocimiento y la capacidad de
personalizar el software y las tecnologías que utiliza para hacer el trabajo. Packt libros son
más específicos y menos general que los libros de TI que ha visto en el pasado. Nuestro
modelo de negocio único nos permite llevar la información más centrado, dándole más de lo
que necesita saber, y menos de lo que no lo hace.
Packt es una editorial, pero único, moderno, que se centra en la producción de
calidad, libros de vanguardia para las comunidades de desarrolladores,
administradores y novatos por igual. Para obtener más información, visite nuestro
sitio Web enwww.packtpub.com.

Acerca de Packt Open Source


En 2010, Packt puso en marcha dos nuevas marcas, Packt Open Source y Packt Empresa,
con el fin de continuar con su enfoque en la especialización. Este libro forma parte de la
marca Packt Open Source, el hogar de los libros publicados en el software construido en
torno a licencias de código abierto, y que ofrecen información a cualquiera de los
desarrolladores avanzados para diseñadores de páginas web en ciernes. La marca de código
abierto también se ejecuta Packt Open Source Imagen Esquema, por el cual Packt da una
regalía a cada proyecto de código abierto sobre cuyo software se vende un libro.

Escribir para Packt


Damos la bienvenida a todas las preguntas de las personas que están interesadas en la
edición. propuestas de libros deben ser enviadas aauthor@packtpub.com. Si su idea del
libro se encuentra todavía en una etapa temprana y que le gustaría discutir en primer lugar
antes de escribir una propuesta formal del libro, a continuación, póngase en contacto con
nosotros; uno de nuestros editores puesta en marcha se pondrá en contacto con usted.
No estamos sólo en busca de los autores publicados; si usted tiene fuertes habilidades
técnicas, pero sin experiencia de la escritura, nuestros editores experimentados pueden
ayudarle a desarrollar una carrera de escritor, o simplemente obtener alguna recompensa
adicional para su experiencia.
R Datos para la Ciencia
ISBN: 978-1-78439-086-0Paperback: 364 páginas

Aprender y explorar los fundamentos de la ciencia


de datos con R
1. Familiarizarse con los paquetes de
programación R y aprender a utilizar
de manera efectiva.

2. Aprender a detectar diferentes tipos de


secuencias de minería de datos.

3. Una guía paso a paso para la comprensión de las


secuencias de comandos R
y las consecuencias de los cambios.

El aprendizaje de minería de datos


con R
ISBN: 978-1-78398-210-3Paperback: 314 páginas

Desarrollar habilidades y técnicas clave con R


para crear y personalizar los algoritmos de
minería de datos
1. Desarrollar una estrategia sólida para la
solución de problemas de modelado predictivo
utilizando los algoritmos de minería de datos
más populares.

2. Ganancia de la comprensión de los


principales métodos de modelado
predictivo.

3. Lleno de consejos prácticos y consejos para


ayudarle a conseguir a los apretones con la
minería de datos.

por favor, compruebe www.PacktPub.com para obtener


información sobre nuestros títulos
Mastering Computación Científica
con R
ISBN: 978-1-78355-525-3Paperback: 432 páginas

Emplear métodos cuantitativos profesionales para


responder a las preguntas científicas con un potente
entorno de análisis de datos de código abierto
1. Realizar la ciencia calidad de publicación con R.

2. Utilizar algunas de las funciones más potentes


y menos conocidos de R para resolver
problemas científicos complejos de
computación.

3. Aprender a crear ilustraciones visuales de


los resultados científicos.

R programación orientada a objetos


ISBN: 978-1-78398-668-2Paperback: 190 páginas

Una guía práctica para ayudarle a aprender y


comprender las técnicas de programación necesarios
para explotar toda la potencia de R
1. Aprender y comprender las técnicas de
programación necesarios para resolver
problemas específicos y acelerar los procesos
de desarrollo de modelos estadísticos y
aplicaciones.

2. Estudio de los fundamentos de la


construcción de objetos y cómo se
programan los aspectos individuales de
diseños de datos más grandes.

3. Paso a paso guía para entender cómo OOP


puede aplicarse a modelos de aplicación y
datos dentro de R.
por favor, compruebe www.PacktPub.com para obtener
información sobre nuestros títulos

También podría gustarte