Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pia Slides 07
Pia Slides 07
Lisp en la IA
Universidad Veracruzana
Centro de Investigación en Inteligencia Artificial
Sebastián Camacho 5, Xalapa, Ver., México 91000
mailto:aguerra@uv.mx
https://www.uv.mx/personal/aguerra/pia
Gráficamente
Significancia
Propiedades Físico-Químicas
Cuantificando la Similitud
Continuación...
Matriz C1 H1 C2 H2 C3 H3
PAM250 -16.00 16.00 -60.00 -32.00 122.00 276.00
BLOSUM62 -2.00 1.00 -76.00 -66.00 162.00 302.00
Prlić 18.14 29.34 -26.93 -30.83 111.54 189.84
Miyazawa 7.06 7.02 -18.71 -13.70 21.06 30.70
Sánchez 173.79 135.56 196.88 140.20 100.42 70.88
Matriz Orden
PAM250 C2 > H2 > C1 > H1 > C3 > H3
BLOSUM62 C2 > H2 > C1 > H1 > C3 > H3
Prlić C2 > H2 > C1 > H1 > C3 > H3
Miyazawa C2 > H2 > H1 > C1 > C3 > H3
Sánchez C2 > C1 > H2 > H1 > C3 > H3
Paquetes
I Definición y carga
1 ( defpackage " BIOINFO "
2 (: a d d- u s e - d e f au l t s t )
3 (: use " CAPI " ))
4
5 ( in-package : bioinfo )
Nombres y paquetes
Probanndo paquete
Matriz PAM250 I
Matriz PAM250 II
20 ( 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3
21 (-6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -
22 (-3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -
23 ( 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2
24 ) " PAM250 matrix " )
20 ( equal aa ’ HIS )) 8)
21 (( or ( equal aa ’I )
22 ( equal aa ’ ILE )) 9)
23 (( or ( equal aa ’L )
24 ( equal aa ’ LEU )) 10)
25 (( or ( equal aa ’K )
26 ( equal aa ’ LYS )) 11)
27 (( or ( equal aa ’M )
28 ( equal aa ’ MET )) 12)
29 (( or ( equal aa ’F )
30 ( equal aa ’ PHE )) 13)
31 (( or ( equal aa ’P )
32 ( equal aa ’ PRO )) 14)
33 (( or ( equal aa ’S )
34 ( equal aa ’ SER )) 15)
35 (( or ( equal aa ’T )
36 ( equal aa ’ THR )) 16)
37 (( or ( equal aa ’W )
38 ( equal aa ’ TRP )) 17)
39 (( or ( equal aa ’Y )
40 ( equal aa ’ TYR )) 18)
41 (( or ( equal aa ’V )
42 ( equal aa ’ VAL )) 19)
43 (( equal aa ’ ter ) 20)))
I De manera que:
1 BIOINFO > ( index ’ val )
2 19
3 BIOINFO > ( index ’ ter )
4 20
I De manera que:
1 BIOINFO > ( get-dist ’ val ’ arg )
2 -2
3 BIOINFO > ( get-dist ’ val ’ arg * blosum62 *)
4 -3
I Funciones de conversión:
1 ( defun aa-to-nnn ( aa )
2 ; ;; Gets the n u c l e o t i d e s of the a m i n o a c i d
3 ( remove-if # ’( lambda ( aminoacid )
4 ( not ( equal ( cadr aminoacid ) aa )))
5 * gc-tensor *))
6
7 ( defun nnn-to-aa ( nnn )
8 ; ;; Gets the a m i n o a c i d from the n u c l e o t i d e s
9 ( car ( member-if # ’( lambda ( aminoacid )
10 ( equal ( car aminoacid ) nnn ))
11 * gc-tensor *)))
I Corrida
1 BIOINFO > ( aa-to-nnn ’ val )
2 ((( G T T ) VAL ) (( G T C ) VAL ) (( G T A ) VAL ) (( G T G ) VAL ))
3 BIOINFO > ( nnn-to-aa ’( g t t ))
4 (( G T T ) VAL )
Imprimer tensores
Interfaz gráfica
CAPI
Botones de la interfaz I
Botones de la interfaz II
Formateo de botones
Elección de matriz
Panel de salida
Despliegue de la interfaz
Arboles de Decisión
Cielo Clase
Valor
nublado
soleado lluvioso
Húmedad si Viento
no si no si
Ejemplos de entrenamiento
I Representación proposicional (atributo-valor)
Clasificación
I Algoritmo:
1: function clasifica(E: ejemplo, A: árbol)
2: Clase ← valor-atributo(raíz(A),E);
3: if es-hoja(raíz(A)) then
4: return Clase
5: else
6: clasifica(E, sub-árbol(A,Clase));
7: end if
8: end function
Entropía
9 5
E( , ) = 0,940
14 14
Ganancia de información
Mejor atributo
Arboles de Decisión
Ejemplos
Ejemplo
Ejemplos de entrenamiento
I Ejemplo:
1 CL - USER > ( put - value ’ nombre ’ ej1 ’ alejandro )
2 ALEJANDRO
3 CL - USER > ( get - value ’ nombre ’ ej1 )
4 ALEJANDRO
5 CL - USER > ( setq * ejemplos * nil )
6 NIL
7 CL - USER > ( push ’ ej1 * ejemplos *)
8 ( EJ1 )
9 CL - USER > ( get - value ’ nombre ( car * ejemplos *))
10 ALEJANDRO
I Un archivo tenis.arff:
@RELATION jugar-tenis
@DATA
I De forma que podemos usar egrep para extraer líneas del archivo
ARFF:
1 CL - USER > ( trivial - shell : shell - command
2 " egrep \" @ATTR \" tenis . arff ")
3 " @ATTRIBUTE cielo { soleado , nublado , lluvia }
4 @ATTRIBUTE temperatura { calor , templado , frio }
5 @ATTRIBUTE humedad { alta , normal }
6 @ATTRIBUTE viento { debil , fuerte }
7 @ATTRIBUTE jugar - tenis { si , no }
8 "
9 NIL
10 0
Ensamblando cajitas
I Podemos usar estas facilidades para leer las líneas del archivo ARFF:
1 CL - USER > ( split - sequence : split - sequence #\ Newline
2 ( trivial - shell : shell - command
3 " egrep \" @ATTR \" tenis . arff "))
4 (" @ATTRIBUTE cielo { soleado , nublado , lluvia }"
5 " @ATTRIBUTE temperatura { calor , templado , frio }"
6 " @ATTRIBUTE humedad { alta , normal }" " @ATTRIBUTE viento { debil , fuerte }"
7 " @ATTRIBUTE jugar - tenis { si , no }" "")
8 184
Variables globales
Datos crudos
Ejemplo
Clase a predecir
Dominios
Todo junto
I Leyendo un ARFF:
1 ( defun id3-load ( arff )
2 ( let (( data ( get-data arff ))
3 ( attribs-doms ( g e t - a t t r i b s - d o m s arff )))
4 ( setf * gensym -counter * 1)
5 ( setf * attributes * ( mapcar # ’ car attribs-doms ))
6 ( setf * domains * ( mapcar # ’ cadr attribs-doms ))
7 ( setf * target * ( get-target arff ))
8 ( loop for d in data do
9 ( let (( ej ( gensym " ej " )))
10 ( push ej * examples *)
11 ( loop for attrib in * attributes *
12 as v in d do
13 ( put-value attrib ej v ))))
14 ( format t " Training set initialized " )))
Ejemplo
Y el reseteo
1 ( defpackage : cl-id3
2 (: use : cl : capi : split-s equence )
3 (: export : load-file
4 : induce
5 : print-tree
6 : classify
7 : classify-new-instance
8 : c r o s s - v a l i d a t io n
9 : gui ))
1 ( in-package : cl-id3 )
2
3 ; ;; A u x i l i a r f u n c t i o n s
4
5 ( defun r e a d - l i n e s - f r o m - f i l e ( file )
6 " It reads the FILE into a list of strings "
7 ( remove-if ( lambda ( x ) ( equal x " " ))
8 ( wit h-open-f ile ( in file )
9 ( loop for line = ( read-line in nil ’ end )
10 until ( eq line ’ end ) collect line ))))
Ejemplo:
Load
1 ( defun load-file ( file )
2 " It initializes the learning setting from FILE "
3 ( labels (( get-examples ( data )
4 ( loop for d in data do
5 ( let (( ej ( gensym " ej " )))
6 ( setf * examples * ( cons ej * examples *))
7 ( loop for attrib in * attributes *
8 as v in d do
9 ( put-value attrib ej v ))))))
10 ( if ( probe-file file )
11 ( let (( file-ext ( car ( last ( split-sequence #\. file ))))
12 ( file-lines ( r e a d - l i n e s - f r o m - f i l e file )))
13 ( reset )
14 ( cond
15 (( equal file-ext " arff " )
16 ( let (( attribs-doms ( a r f f - g e t - a t t r i b s - d o m s file-lines )))
17 ( setf * attributes * ( mapcar # ’ car attribs-doms ))
18 ( setf * domains * ( mapcar # ’ cadr attribs-doms ))
19 ( setf * target * ( arff-get-target file-lines ))
20 ( setf * data * ( arff-get-data file-lines ))
21 ( get-examples * data *)
22 ( format t " Training setting initialized after ~ s.~ %" file )))
23 (( equal file-ext " csv " )
24 ( let (( attribs-doms ( c s v - g e t - a t t r i b s - d o m s file-lines )))
25 ( setf * attributes * ( mapcar # ’ car attribs-doms ))
26 ...
27 ( t ( error " File ’ s ~ s extension can not be determined . " file ))))
28 ( error " File ~ s does not exist .~ %" file ))))
Ejemplo
I Cargando un archivo:
1 CL - ID3 > ( load - file " tenis . arff ")
2 The ID3 setting has been reset .
3 Training setting initialized after " tenis . arff ".
4 NIL
5 CL - ID3 > * target *
6 JUGAR - TENIS
7 CL - ID3 > * attributes *
8 ( CIELO TEMPERATURA HUMEDAD VIENTO JUGAR - TENIS )
9 CL - ID3 > * examples *
10 (#:| ej14 | #:| ej13 | #:| ej12 | #:| ej11 | #:| ej10 | #:| ej9 | #:| ej8 |
11 #:| ej7 | #:| ej6 | #:| ej5 | #:| ej4 | #:| ej3 | #:| ej2 | #:| ej1 |)
Algoritmo principal
I Criterio terminal:
1 ( defun s a m e - c l a s s - v a l u e - p ( attrib value examples )
2 " Do all EXAMPLES have the same VALUE for a given ATTRIB ? "
3 ( every # ’( lambda ( e )
4 ( eq value
5 ( get-value attrib e )))
6 examples ))
I Ejemplo:
1 CL - ID3 > ( same - class - value - p * target * ’ si * examples *)
2 NIL
3 CL - ID3 > ( same - class - value - p * target * ’ no * examples *)
4 NIL
1 ( defun t a r g e t - m o s t - c o m m o n - v a l u e ( examples )
2 " It gets the most common value for * target * in EXAMPLES "
3 ( let (( domain ( get-domain * target *))
4 ( vals ( mapcar # ’( lambda ( x ) ( get-value * target * x ))
5 examples )))
6 ( caar ( sort ( loop for v in domain collect
7 ( list v ( count v vals )))
8 # ’( lambda ( x y ) ( >= ( cadr x )
9 ( cadr y )))))))
Partición
Entropía
Ganancia de Información
Mejor partición
Induciendo un árbol
Y con print-tree
Prueba
capi:contain
1 ( d e f i n e - i n t erface cl-id3-gui ()
2 ()
3 (: panes
4 ( sour ce-id-pane text-input-pane
5 : accessor source-id-pane
6 : text " "
7 : enabled nil )
8 ( n u m - a t t r i b u t e s - p a n e text-input-pane
9 : accessor n u m - a t t r i b u t e s - p a n e
10 : text " "
11 : enabled nil )
12 ( n u m - e x a mpl es -pa ne text- input-pane
13 : accessor n um -ex am ple s- pan e
14 : text " "
15 : enabled nil )
16 ( class-pane text-input-p ane
17 : accessor class-pane
18 : text " "
19 : enabled nil )
20 ( e ff i ci ency-pane text-input-pane
21 : text " "
22 : enabled nil )
23 ( k-value-pane text-input-pane
24 : text " 0 " )...
1 ...
2 ( tree-pane graph-pane
3 : title " Decision Tree "
4 : title-position : frame
5 : c hi ldr en -fu nc tio n ’ node-children
6 : ed g e- p a ne - fu n c ti o n
7 # ’( lambda ( self from to )
8 ( declare ( ignore self from ))
9 ( make-instance
10 ’ labelled-arrow-pinboard-object
11 : data ( princ-to-string ( node-from-label to ))))
12 : v is ibl e- min -w idt h 450
13 : layout-funct ion : top-down )
14 ( state-pane title-pane
15 : accessor state-pane
16 : text " Welcome to CL-ID3 . " )) ...
1 ...
2 (: menus
3 ( file-menu
4 " File "
5 (( " Open " : se l ec t i on - ca l l ba c k ’ gui-load-file
6 : accelerator #\ o )
7 ( " Quit " : s el e ct i o n- c al l b ac k ’ gui-quit
8 : accelerator #\ q )))
9 ( view-menu
10 " View "
11 (( " Attributes " : s e l ec t i o n - ca l lb a ck ’ g u i - v i e w - a t t r i b u t e s
12 : accelerator #\ a
13 : enabled -function # ’( lambda ( menu )
14 ( declare ( ignore menu )) * attributes-on *))
15 ( " Examples " : s el e c ti o n- c a ll b ac k ’ gu i- vie w- exa mp les
16 : accelerator #\ e
17 : enabled-f unction # ’( lambda ( menu )
18 ( declare ( ignore menu )) * examples-on *))))
1 ...
2 ( id3-menu
3 " id3 "
4 (( " Induce " : s e le c t io n -c a ll b a ck ’ gui-induce
5 : accelerator #\ i
6 : en abled-function # ’( lambda ( menu )
7 ( declare ( ignore menu )) * induce-on *))
8 ( " Classify " : s el e c ti o n- c a ll b ac k ’ gui-classify
9 : accelerator #\ k
10 : enabled-f unction # ’( lambda ( menu )
11 ( declare ( ignore menu )) * classify-on *))
12 ( " C r o ss-validati on " : s e l ec t io n - ca l lb a c k ’ g u i - c r o s s - v a l i d a t i o n
13 : accelerator #\ c
14 : e nabled-function # ’( lambda ( menu )
15 ( declare ( ignore menu )) * c r o s s - v a l i d a t i o n -
16 ( help-menu
17 " Help "
18 (( " About " : s el e ct i o n- c a l l b ac k ’ gui-about ))))
19 (: menu-bar file-menu view-menu id3-menu help-menu )
1 (: layouts
2 ( main-layout column-layout ’( panes state-pane ))
3 ( panes row-layout ’( info-pane tree-pane ))
4 ( titles column-layout ’())
5 ( matrix-pane row-layout ’( titles confusion )
6 : title " Confusion Matrix " : x-gap ’10 : y-gap ’30
7 : title-position : frame : vi sib le -mi n- wid th ’200)
8 ( confusion grid-layout ’())
9 ( info-pane column-layout ’( setting-pane id3-pane matrix-pane ))
10 ( setting-pane grid-layout
11 ’( " Source File " source-id-pane
12 " No . Attributes " n u m - a t t r i b u t e s - p a n e
13 " No . Examples " num -e xam pl es- pa ne
14 " Class " class-pane )
15 : y-adjust : center
16 : title " Trainning Set "
17 : title-pos ition : frame : columns ’2)
18 ( id3-pane grid-layout ’( " K value " k-value-pane
19 " Efficiency " efficiency-pane )
20 : y-adjust : center
21 : title " Cross Validation "
22 : title-positio n : frame : columns ’2))
1 (: d ef a u l t - i n i t a r g s
2 : title " CL-ID3 "
3 : v i s i b l e - m i n - w i d t h 840
4 : v i s i b l e - m i n - h e i g h t 600))
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 100 / 133
Arboles de Decisión: CL-ID3 GUI
Llamadas: gui-load-file
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 101 / 133
Arboles de Decisión: CL-ID3 GUI
Llamadas: gui-quit
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 102 / 133
Arboles de Decisión: CL-ID3 GUI
Llamadas: gui-view-attributes 1
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 103 / 133
Arboles de Decisión: CL-ID3 GUI
Llamadas: gui-view-attributes 2
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 104 / 133
Arboles de Decisión: CL-ID3 GUI
1 ( defstruct node
2 ( inf nil )
3 ( sub-trees nil )
4 ( from-label nil ))
5
6 ( defun make-tree ( tree-as-lst )
7 " It makes a tree of nodes with TREE-AS-LST "
8 ( make-node : inf ( root tree-as-lst )
9 : sub-trees ( ma ke-sub-trees ( children tree-as-lst ))))
10
11 ( defun ma ke-sub-trees ( children-lst )
12 " It makes de subtrees list of a tree with CHILDREN "
13 ( loop for child in children-lst collect
14 ( let (( sub-tree ( second child ))
15 ( label ( first child )))
16 ( if ( leaf-p sub-tree )
17 ( make-node : inf sub-tree
18 : sub-trees nil
19 : from-label label )
20 ( make-node : inf ( root sub-tree )
21 : sub-trees ( make-sub-trees ( children sub-tree ))
22 : from-label label )))))
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 105 / 133
Arboles de Decisión: CL-ID3 GUI
Dibujando el árbol
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 106 / 133
Arboles de Decisión: CL-ID3 GUI
Función principal
1 ( defun gui ()
2 ( reset )
3 ( display ( make-instance ’ cl-id3-gui )))
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 107 / 133
Filtrado colaborativo Introducción
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 108 / 133
Filtrado colaborativo Introducción
Filtrado Colaborativo
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 109 / 133
Filtrado colaborativo Representación
Preferencias
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 110 / 133
Filtrado colaborativo Representación
Representando preferencias
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 111 / 133
Filtrado colaborativo Representación
Funciones de acceso
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 112 / 133
Filtrado colaborativo Representación
Ejemplos de uso
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 113 / 133
Filtrado colaborativo Representación
Productos en común
1 CL - USER > ( shared - items " Toby " " Lisa Rose ")
2 (" Snakes on a Plane " " Superman Returns " " You , Me and Dupree ")
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 114 / 133
Filtrado colaborativo Usuarios similares
q
I dist((x1 , y1 )(x2 , y2 )) = (x1 − x2 )2 + (y1 − y2 )2
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 115 / 133
Filtrado colaborativo Usuarios similares
Computando
1 CL - USER > ( sim - euclidean " Lisa Rose " " Gene Seymour ")
2 0.29429805
3 CL - USER > ( sim - euclidean " Lisa Rose " " Claudia Puig ")
4 0.38742587
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 116 / 133
2
Filtrado colaborativo Usuarios similares Just My Luck
Correlación de Pearson 1 2 3 4 5
Mick LaSalle
You can also see a straight line on the chart. This is called the best-fit line because
comes as close to all the items on the chart as possible. If the two critics had ident
cal ratings for every movie, this line would be diagonal and would touch every item
yi in the chart, giving a perfect correlation score of 1. In the case illustrated, the critic
P P P
n xi yi − xi
I rxy = √ P P 2√ P disagree on a few movies, so the correlation score is about 0.4. Figure 2-3 shows a
P
exampleyof)a2 much higher correlation, one of about 0.75.
n xi2 −( xi ) n y 2 −(
i i
5 Superman 5
4 4
Dupree Snakes Snakes Superman
2 2
Just My Luck
1 1
Figure 2-2. Comparing two movie critics on a scatter plot Figure 2-3. Two critics with a high correlation score
I Resuelve corrimientos en la escala.
You can also see a straight line on the chart. This is called the best-fit line because it
comes as close to all the items on the chart as possible. If the two critics had identi-
cal ratings for every movie, this line would be diagonal and would touch every item
in the chart, giving a perfect correlation score of 1. In the case illustrated, the critics
12 | Chapter 2: Making Recommendations
disagree on a few movies, so the correlation score is about 0.4. Figure 2-3 shows an
example of a much higher correlation, one of about 0.75.
Computando
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 118 / 133
Filtrado colaborativo Usuarios similares
Ejemplos
1 CL - USER > ( sim - pearson " Lisa Rose " " Gene Seymour ")
2 0.39605904
3 CL - USER > ( sim - pearson " Mick LaSalle " " Gene Seymour ")
4 0.4117648
5 CL - USER > ( sim - pearson " Lisa Rose " " Jack Matthews ")
6 0.74701745
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 119 / 133
Filtrado colaborativo Usuarios similares
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 120 / 133
Filtrado colaborativo Recomendaciones
Emitiendo recomendaciones
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 121 / 133
Filtrado colaborativo Recomendaciones
Ejemplos
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 122 / 133
Filtrado colaborativo Productos similares
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 123 / 133
Filtrado colaborativo Productos similares
Transformación
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 124 / 133
Filtrado colaborativo Productos similares
Corrida
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 125 / 133
Filtrado colaborativo Productos similares
Otra corrida
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 126 / 133
Filtrado colaborativo Obteniendo datos(
Delicious?
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 127 / 133
Filtrado colaborativo Obteniendo datos(
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 128 / 133
Filtrado colaborativo Obteniendo datos(
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 129 / 133
Filtrado colaborativo Obteniendo datos(
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 130 / 133
Filtrado colaborativo Obteniendo datos(
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 131 / 133
Filtrado colaborativo Obteniendo datos(
En lugar de del.ici.ous
I https://www.themoviedb.org
I http://www.omdbapi.com
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 132 / 133
Filtrado colaborativo Obteniendo datos(
Referencias I
[1] D Goldberg y col. “Using collaborative filtering to weave an information tapestry”. En:
Communications of the ACM 35.12 (1992), págs. 61-71.
[2] A Guerra-Hernández, CR de-la Mora-Basáñez y MA Jiménez-Montaño. “The significance
of nucleotides within DNA codons: a quantitative approach.”. En: Avances en la Ciencia
de la Computación: VI Encuentro Internacional de Computación ENC’05. Ed. por
L Villaseñor-Pineda y A Martínez-García. Sociedad Mexicana de Ciencias de la
Computación (SMCC). Puebla, Pue., México: Benemérita Universidad Autónoma de
Puebla, 2005, págs. 167-169.
[3] DA Mac Dónaill y M Manktelow. “Molecular informatics: quantifying information patterns
in the genetic code”. En: Molecular Simulation 30.5 (2004), págs. 267-272.
[4] T Mitchell. Machine Learning. Computer Science Series. Singapore: McGraw-Hill
International Editions, 1997.
[5] JR Quinlan. “Induction of Decision Trees”. En: Machine Learning 1 (1986), págs. 81-106.
[6] T Seagaran. Programming Collective Intelligence. Sebastopol, CA, USA 95472: O’Reilly
Media, 2008.
[7] P Seibel. Practical Common Lisp. USA: Apress, 2005.
Dr. Alejandro Guerra-Hernández (UV) Programación para la IA MIA 2020 133 / 133