SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información.
PDF generated at: Thu, 13 Mar 2014 06:07:07 UTC
Los Cpu
los tipos de asistemas
Contenidos
Artículos
Algoritmo 1
Aprendizaje automático 8
Red neuronal artificial 11
Referencias
Fuentes y contribuyentes del artículo 17
Fuentes de imagen, Licencias y contribuyentes 18
Licencias de artículos
Licencia 19
Algoritmo 1
Algoritmo
Los diagramas de flujo sirven para representar
algoritmos de manera gráfica.
En matemáticas, lógica, ciencias de la computación y disciplinas
relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este
a su vez del matemático persa Al-Juarismi) es un conjunto prescrito de
instrucciones o reglas bien definidas, ordenadas y finitas que permite
realizar una actividad mediante pasos sucesivos que no generen dudas
a quien deba realizar dicha actividad.
[1]
Dados un estado inicial y una
entrada, siguiendo los pasos sucesivos se llega a un estado final y se
obtiene una solución. Los algoritmos son el objeto de estudio de la
algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para
resolver problemas. Algunos ejemplos son los manuales de usuario,
que muestran algoritmos para usar un aparato, o las instrucciones que
recibe un trabajador por parte de su patrón. Algunos ejemplos en
matemática son el algoritmo de multiplicación, para calcular el
producto, el algoritmo de la división para calcular el cociente de dos
números, el algoritmo de Euclides para obtener el máximo común
divisor de dos enteros positivos, o el método de Gauss para resolver un
sistema lineal de ecuaciones.
Definición formal
En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los
señalan como listas de instrucciones para resolver un cálculo o un problema abstracto, es decir, que un número finito
de pasos convierten los datos de un problema (entrada) en una solución (salida). Sin embargo cabe notar que algunos
algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión
modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo.
A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos
matemáticos. Esto fue realizado por Alonzo Church en 1936 con el concepto de "calculabilidad efectiva" basada en
su cálculo lambda y por Alan Turing basándose en la máquina de Turing. Los dos enfoques son equivalentes, en el
sentido en que se pueden resolver exactamente los mismos problemas con ambos enfoques. Sin embargo, estos
modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general,
los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las
definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos
paralelos:
Tiempo secuencial. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una
secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran
al algoritmo antes de comenzar).
Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de
primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos)
de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.
Exploración acotada. La transición de un estado al siguiente queda completamente determinada por una
descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una
cantidad fija y limitada de términos del estado actual.
Algoritmo 2
En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin
ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la
cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos
prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de
Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible
programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible
considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función
calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación
suficientemente general):
Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial.
Medios de expresión de un algoritmo
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas
de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y
extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas
expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de
un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el
algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto
capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o
ambos.
Diagrama de flujo
Algoritmo 3
Diagrama de flujo que expresa un algoritmo para
calcular la raíz cuadrada de un número
Los diagramas de flujo son descripciones gráficas de algoritmos; usan
símbolos conectados con flechas para indicar la secuencia de
instrucciones y están regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos
pequeños, ya que abarcan mucho espacio y su construcción es
laboriosa. Por su facilidad de lectura son usados como introducción a
los algoritmos, descripción de un lenguaje y descripción de procesos a
personas ajenas a la computación.
Los algoritmos pueden ser expresados de muchas maneras, incluyendo
al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de
programación entre otros. Las descripciones en lenguaje natural
tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas
de flujo evita muchas ambigüedades del lenguaje natural. Dichas
expresiones son formas más estructuradas para representar algoritmos;
no obstante, se mantienen independientes de un lenguaje de
programación específico.
Pseudocódigo
El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo
que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de
programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado
para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de
un algoritmo, como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los
algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas.
El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede
omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar
convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin
embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de
programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer
directamente a partir de él.
Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos
son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema.
Sistemas formales
La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto
de algoritmo. Los modelos más comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas.
Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin
embargo se mantienen independientes de cualquier computadora y de cualquier implementación.
Implementación
Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser
implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico.
Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de
multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y muchas formas de resolver la raíz
cuadrada son sólo algunos ejemplos.
Algoritmo 4
Variables
Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede
realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables:
1.1. Mediante una sentencia de asignación.
2.2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read').
Ejemplo:
...
i:=1;
read(n);
while i < n do begin
(* cuerpo del bucle *)
i := i + 1
end;
...
Estructuras secuenciales
La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal
modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de
esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre
de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
1. Simples: Consiste en pasar un valor constante a una variable (a ← 15)
2. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1)
3. Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b)
4. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ←
c + b*2/4).
Un ejemplo de estructura secuencial, como obtener la área de un triángulo:
Inicio
...
float b, h, a;
printf("Diga la base");
scanf("%f", &b);
printf("Diga la altura");
scanf("%f", &h);
a = (b*h)/2;
printf("El área del triángulo es %f", a)
...
Fin
Algoritmos como funciones
Algoritmo 5
Esquemática de un algoritmo solucionando un problema de ciclo hamiltoniano.
Un algoritmo se puede concebir como
una función que transforma los datos
de un problema (entrada) en los datos
de una solución (salida). Más aun, los
datos se pueden representar a su vez
como secuencias de bits, y en general,
de símbolos cualesquiera. Como cada secuencia de bits representa a un número natural (véase Sistema binario),
entonces los algoritmos son en esencia funciones de los números naturales en los números naturales que sí se pueden
calcular. Es decir que todo algoritmo calcula una función donde cada número natural es la
codificación de un problema o de una solución.
En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito.
Cuando esto ocurre, el algoritmo nunca devuelve ningún valor de salida, y podemos decir que la función queda
indefinida para ese valor de entrada. Por esta razón se considera que los algoritmos son funciones parciales, es decir,
no necesariamente definidas en todo su dominio de definición.
Cuando una función puede ser calculada por medios algorítmicos, sin importar la cantidad de memoria que ocupe o
el tiempo que se tarde, se dice que dicha función es computable. No todas las funciones entre secuencias datos son
computables. El problema de la parada es un ejemplo.
Análisis de algoritmos
Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el
algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o
especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los
casos, su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra
implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis
de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular. Una
forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje
muy simple tal como Lexico, cuyos códigos pueden estar en el idioma del programador.
Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento,
mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse, suponiendo el caso en
el que existiera algún dispositivo físico que fuera capaz de funcionar eternamente. En este último caso, la
finalización con éxito del algoritmo no se podría definir como la terminación de este con una salida satisfactoria,
sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la
ejecución del algoritmo. Por ejemplo, un algoritmo que verifica que hay más ceros que unos en una secuencia binaria
infinita debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa correctamente, el valor
devuelto por el algoritmo será válido, hasta que evalúe el siguiente dígito binario. De esta forma, mientras evalúa la
siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea
mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la
devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y, en cualquier otro caso,
devolverá una mezcla de señales positivas y negativas.
Algoritmo 6
Ejemplo de algoritmo
El problema consiste en encontrar el máximo de un conjunto de números. Para un ejemplo más complejo véase
Algoritmo de Euclides.
Descripción de alto nivel
Dado un conjunto finito de números, se tiene el problema de encontrar el número más grande. Sin pérdida de
generalidad se puede asumir que dicho conjunto no es vacío y que sus elementos están numerados como
.
Es decir, dado un conjunto se pide encontrar tal que para todo elemento
que pertenece al conjunto .
Para encontrar el elemento máximo, se asume que el primer elemento ( ) es el máximo; luego, se recorre el
conjunto y se compara cada valor con el valor del máximo número encontrado hasta ese momento. En el caso que un
elemento sea mayor que el máximo, se asigna su valor al máximo. Cuando se termina de recorrer la lista, el máximo
número que se ha encontrado es el máximo de todo el conjunto.
Descripción formal
El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo:
Algoritmo Encontrar el máximo de un conjunto
función max( )
// es un conjunto no vacío de números//
← // es el número de elementos de //
←
para ← hasta hacer
si entonces
←
devolver
Sobre la notación:
• "←" representa una asignación: ← significa que la variable toma el valor de ;
• "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el máximo de ).
Implementación
En lenguaje C++:
int max(int c[], int n)
{
int i, m = c[0];
for (i = 1; i < n; i++)
if (c[i] > m) m = c[i];
return m;
}
Algoritmo 7
Referencias
[1] Real Academia Española. Diccionario de la lengua española (http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&
TIPO_BUS=3&LEMA=algoritmo) "Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema."
Bibliografía
• Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000X)
• The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del TeX]
• Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C.
• Introduction to Algorithms. A Creative Approach, Mamber, U.
• Algorithms in C (3r ed), Sedgewick, R. (también existen versiones en C++ y Java)
•• The Design and Analysis of Computer Algorithms, Aho, A.
Enlaces externos
Wikilibros
• Wikilibros alberga un libro o manual sobre Algoritmia.
• Wikcionario tiene definiciones y otra información sobre algoritmo.Wikcionario
• Portal de algoritmia (http://www.algoritmia.net)
• Técnicas de Diseño de Algoritmos (http://www.lcc.uma.es/~av/Libro/) manual que explica y ejemplifica los
distintos paradigmas de diseño de algoritmos. Rosa Guerequeta y Antonio Vallecillo (profesores de la
Universidad de Málaga).
• Transparencias de la asignatura "Esquemas Algorítmicos", Campos, J. (http://webdiis.unizar.es/asignaturas/
EDA/)
• Apuntes y problemas de Algorítmica por Domingo Giménez Cánovas (http://dis.um.es/~domingo/alg.html)
• Curso de Diseño de Algoritmos de Carlos Pes (http://www.carlospes.com/curso_de_algoritmos/)
• Algoritmos y Diagramas de Flujo (http://snippets-tricks.org/algoritmos-y-diagramas-de-flujo/)
Aprendizaje automático 8
Aprendizaje automático
El aprendizaje automático o aprendizaje de máquinas es una rama de la inteligencia artificial cuyo objetivo es
desarrollar técnicas que permitan a las computadoras aprender. De forma más concreta, se trata de crear programas
capaces de generalizar comportamientos a partir de una información no estructurada suministrada en forma de
ejemplos. Es, por lo tanto, un proceso de inducción del conocimiento. En muchas ocasiones el campo de actuación
del aprendizaje automático se solapa con el de la estadística, ya que las dos disciplinas se basan en el análisis de
datos. Sin embargo, el aprendizaje automático se centra más en el estudio de la complejidad computacional de los
problemas. Muchos problemas son de clase NP-hard, por lo que gran parte de la investigación realizada en
aprendizaje automático está enfocada al diseño de soluciones factibles a esos problemas. El aprendizaje automático
puede ser visto como un intento de automatizar algunas partes del método científico mediante métodos matemáticos.
El aprendizaje automático tiene una amplia gama de aplicaciones, incluyendo motores de búsqueda, diagnósticos
médicos, detección de fraude en el uso de tarjetas de crédito, análisis del mercado de valores, clasificación de
secuencias de ADN, reconocimiento del habla y del lenguaje escrito, juegos y robótica.
Aprendizaje automático
Interacción Hombre-Máquina
Algunos sistemas de Aprendizaje Automático intentan eliminar toda
necesidad de intuición o conocimiento experto de los procesos de
análisis de datos, mientras otros tratan de establecer un marco de
colaboración entre el experto y la computadora. De todas formas, la
intuición humana no puede ser reemplazada en su totalidad, ya que el
diseñador del sistema ha de especificar la forma de representación de
los datos y los métodos de manipulación y caracterización de los
mismos.
Tipos de algoritmos
Los diferentes algoritmos de Aprendizaje Automático se agrupan en una taxonomía en función de la salida de los
mismos. Algunos tipos de algoritmos son:
Aprendizaje supervisado
El algoritmo produce una función que establece una correspondencia entre las entradas y las salidas deseadas
del sistema. Un ejemplo de este tipo de algoritmo es el problema de clasificación, donde el sistema de
aprendizaje trata de etiquetar (clasificar) una serie de vectores utilizando una entre varias categorías (clases).
La base de conocimiento del sistema está formada por ejemplos de etiquetados anteriores. Este tipo de
aprendizaje puede llegar a ser muy útil en problemas de investigación biológica, biología computacional y
bioinformática.
Aprendizaje no supervisado
Todo el proceso de modelado se lleva a cabo sobre un conjunto de ejemplos formado tan sólo por entradas al
sistema. No se tiene información sobre las categorías de esos ejemplos. Por lo tanto, en este caso, el sistema
tiene que ser capaz de reconocer patrones para poder etiquetar las nuevas entradas.
Aprendizaje semisupervisado
Este tipo de algoritmos combinan los dos algoritmos anteriores para poder clasificar de manera adecuada. Se
tiene en cuenta los datos marcados y los no marcados.
Aprendizaje automático 9
Aprendizaje por refuerzo
El algoritmo aprende observando el mundo que le rodea. Su información de entrada es el feedback o
retroalimentación que obtiene del mundo exterior como respuesta a sus acciones. Por lo tanto, el sistema
aprende a base de ensayo-error.
Transducción
Similar al aprendizaje supervisado, pero no construye de forma explícita una función. Trata de predecir las
categorías de los futuros ejemplos basándose en los ejemplos de entrada, sus respectivas categorías y los
ejemplos nuevos al sistema.
Aprendizaje multi-tarea
Métodos de aprendizaje que usan conocimiento previamente aprendido por el sistema de cara a enfrentarse a
problemas parecidos a los ya vistos.
El análisis computacional y de rendimiento de los algoritmos de aprendizaje automático es una rama de la estadística
conocida como teoría computacional del aprendizaje.
El aprendizaje automático las personas lo llevamos a cabo de manera automática ya que es un proceso tan sencillo
para nosotros que ni nos damos cuenta de cómo se realiza y todo lo que implica. Desde que nacemos hasta que
morimos los seres humanos llevamos a cabo diferentes procesos, entre ellos encontramos el de aprendizaje por
medio del cual adquirimos conocimientos, desarrollamos habilidades para analizar y evaluar a través de métodos y
técnicas así como también por medio de la experiencia propia. Sin embargo, a las máquinas hay que indicarles cómo
aprender, ya que si no se logra que una máquina sea capaz de desarrollar sus habilidades, el proceso de aprendizaje
no se estará llevando a cabo, sino que solo será una secuencia repetitiva. También debemos tener en cuenta que el
tener conocimiento o el hecho de realizar bien el proceso de aprendizaje automático no implica que se sepa utilizar,
es preciso saber aplicarlo en las actividades cotidianas, y un buen aprendizaje también implica saber cómo y cuándo
utilizar nuestros conocimientos.
Para llevar a cabo un buen aprendizaje es necesario considerar todos los factores que a este le rodean, como la
sociedad, la economía, la ciudad, el ambiente, el lugar, etc. Por lo tanto, es necesario empezar a tomar diversas
medidas para lograr un aprendizaje adecuado, y obtener una automatización adecuada del aprendizaje. Así, lo
primero que se debe tener en cuenta es el concepto de conocimiento, que es el entendimiento de un determinado
tema o materia en el cual tu puedas dar tu opinión o punto de vista, así como responder a ciertas interrogantes que
puedan surgir de dicho tema o materia.
En el aprendizaje automático podemos obtener 3 tipos de conocimiento, que son:
1. Crecimiento
Es el que se adquiere de lo que nos rodea, el cual guarda la información en la memoria como si dejara huellas.
2. Reestructuración
Al interpretar los conocimientos el individuo razona y genera nuevo conocimiento al cual se le llama de
reestructuración.
3. Ajuste
Es el que se obtiene al generalizar varios conceptos o generando los propios.
Los tres tipos se efectúan durante un proceso de aprendizaje automático pero la importancia de cada tipo de
conocimiento depende de las características de lo que se está tratando de aprender.
El aprendizaje es más que una necesidad, es un factor primordial para satisfacer las necesidades de la inteligencia
artificial.
Aprendizaje automático 10
Aplicaciones
•• Motores de búsqueda
•• Diagnóstico médico
•• Detección de fraudes con el uso de tarjetas de crédito
•• Análisis del mercado de valores
• Clasificación de secuencias de ADN
•• Reconocimiento del habla
•• Robótica
Temas del aprendizaje automático
A continuación se muestran una serie de temas que podrían formar parte del temario de un curso sobre aprendizaje
automático.
• Modelado de funciones de densidad de probabilidad condicionadas: clasificación y regresión
•• Redes neuronales artificiales
•• Árboles de decisión
•• Modelos de regresión múltiple no postulados
•• Regresión en procesos Gaussianos
•• Análisis de discriminantes lineales
•• k-vecinos más próximos
•• Perceptrón
•• Funciones de base radial
•• Máquinas de soporte vectorial
• Modelado de funciones de densidad de probabilidad mediante modelos generativos
•• Algoritmo EM
• Modelos gráficos, como las redes bayesianas y los campos aleatorios de Markov
•• Mapeado topográfico generativo
•• Técnicas de inferencia aproximada
• Cadenas de Markov y Método de Montecarlo
•• Métodos variacionales
• Optimización: La mayoría de los métodos descritos arriba usan algoritmos de optimización o son por sí mismos
instancias de problemas de optimización.
Enlaces externos
• Machine Learning Development with Perl
[1]
(en inglés)
• Weka
[2]
Software open-source
• Grupo de investigación - Sistemas Inteligentes
[3]
Bibliografía
• Mitchell, T. (1997). Machine Learning, McGraw Hill. ISBN 0-07-042807-7
Referencias
[1] http://www.perlmonks.org/index.pl?node_id=638391
[2] http://www.cs.waikato.ac.nz/ml/weka
[3] http://web.archive.org/web/http://www.esp.uem.es/gsi/
Red neuronal artificial 11
Red neuronal artificial
Red neuronal artificial perceptrón multicapa con n neuronas de entrada, m neuronas en su
capa oculta y una neurona de escape.
Las redes de neuronas artificiales
(denominadas habitualmente como
RNA o en inglés como: "ANN"
[1]
) son
un paradigma de aprendizaje y
procesamiento automático inspirado en
la forma en que funciona el sistema
nervioso de los animales. Se trata de
un sistema de interconexión de
neuronas que colaboran entre sí para
producir un estímulo de salida. En
inteligencia artificial es frecuente
referirse a ellas como redes de
neuronas o redes neuronales.
Historia
Los primeros modelos de redes neuronales datan de 1943 por los neurólogos McCulloch y Pitts. Años más tarde, en
1949, Donald Hebb desarrolló sus ideas sobre el aprendizaje neuronal, quedando reflejado en la "regla de Hebb". En
1958, Rosemblatt desarrolló el perceptrón simple, y en 1960, Widrow y Hoff desarrollaron el ADALINE, que fue la
primera aplicación industrial real.
En los años siguientes, se redujo la investigación, debido a la falta de modelos de aprendizaje y el estudio de Minsky
y Papert sobre las limitaciones del perceptrón. Sin embargo, en los años 80, volvieron a resurgir las RNA gracias al
desarrollo de la red de Hopfield, y en especial, al algoritmo de aprendizaje de retropropagación ideado por
Rumelhart y McLellan en 1986 que fue aplicado en el desarrollo de los perceptrones multicapa.
[2]
Propiedades
Perceptrón con 2 entradas.
Una red neuronal se compone de unidades llamadas
neuronas. Cada neurona recibe una serie de entradas a
través de interconexiones y emite una salida. Esta
salida viene dada por tres funciones:
1. Una función de propagación (también conocida
como función de excitación), que por lo general
consiste en el sumatorio de cada entrada
multiplicada por el peso de su interconexión (valor
neto). Si el peso es positivo, la conexión se
denomina excitatoria; si es negativo, se denomina inhibitoria.
2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este caso la salida la misma
función de propagación.
3. Una función de transferencia, que se aplica al valor devuelto por la función de activación. Se utiliza para acotar la
salida de la neurona y generalmente viene dada por la interpretación que queramos darle a dichas salidas. Algunas
de las más utilizadas son la función sigmoidea (para obtener valores en el intervalo [0,1]) y la tangente
hiperbólica (para obtener valores en el intervalo [-1,1]).
Red neuronal artificial 12
Diseño y programación de una RNA (red neuronal artificial)
Con un paradigma convencional de programación en ingeniería del software, el objetivo del programador es modelar
matemáticamente (con distintos grados de formalismo) el problema en cuestión y posteriormente formular una
solución (programa) mediante un algoritmo codificado que tenga una serie de propiedades que permitan resolver
dicho problema. En contraposición, la aproximación basada en las RNA parte de un conjunto de datos de entrada
suficientemente significativo y el objetivo es conseguir que la red aprenda automáticamente las propiedades
deseadas. En este sentido, el diseño de la red tiene menos que ver con cuestiones como los flujos de datos y la
detección de condiciones, y más que ver con cuestiones tales como la selección del modelo de red, la de las variables
a incorporar y el preprocesamiento de la información que formará el conjunto de entrenamiento. Asimismo, el
proceso por el que los parámetros de la red se adecuan a la resolución de cada problema no se denomina
genéricamente programación sino que se suele denominar entrenamiento neuronal.
Por ejemplo en una red que se va a aplicar al diagnóstico de imágenes médicas; durante la fase de entrenamiento el
sistema recibe imágenes de tejidos que se sabe son cancerígenos y tejidos que se sabe son sanos, así como las
respectivas clasificaciones de dichas imágenes. Si el entrenamiento es el adecuado, una vez concluido, el sistema
podrá recibir imágenes de tejidos no clasificados y obtener su clasificación sano/no sano con un buen grado de
seguridad. Las variables de entrada pueden ser desde los puntos individuales de cada imagen hasta un vector de
características de las mismas que se puedan incorporar al sistema (por ejemplo, procedencia anatómica del tejido de
la imagen o la edad del paciente al que se le extrajo la muestra).
Estructura
La mayoría de los científicos coinciden en que una RNA es muy diferente en términos de estructura de un cerebro
animal. Al igual que el cerebro, una RNA se compone de un conjunto masivamente paralelo de unidades de proceso
muy simples y es en las conexiones entre estas unidades donde reside la inteligencia de la red. Sin embargo, en
términos de escala, un cerebro es muchísimo mayor que cualquier RNA creada hasta la actualidad, y las neuronas
artificiales también son más simples que su contrapartida animal.
Biológicamente, un cerebro aprende mediante la reorganización de las conexiones sinápticas entre las neuronas que
lo componen. De la misma manera, las RNA tienen un gran número de procesadores virtuales interconectados que
de forma simplificada simulan la funcionalidad de las neuronas biológicas. En esta simulación, la reorganización de
las conexiones sinápticas biológicas se modela mediante un mecanismo de pesos, que son ajustados durante la fase
de aprendizaje. En una RNA entrenada, el conjunto de los pesos determina el conocimiento de esa RNA y tiene la
propiedad de resolver el problema para el que la RNA ha sido entrenada.
Por otra parte, en una RNA, además de los pesos y las conexiones, cada neurona tiene asociada una función
matemática denominada función de transferencia. Dicha función genera la señal de salida de la neurona a partir de
las señales de entrada. La entrada de la función es la suma de todas las señales de entrada por el peso asociado a la
conexión de entrada de la señal. Algunos ejemplos de entradas son la función escalón de Heaviside, la lineal o mixta,
la sigmoide y la función gaussiana, recordando que la función de transferencia es la relación entre la señal de salida y
la entrada.
Red neuronal artificial 13
Ventajas
Las redes neuronales artificiales (RNA) tienen muchas ventajas debido a que están basadas en la estructura del
sistema nervioso, principalmente el cerebro.
• Aprendizaje: Las RNA tienen la habilidad de aprender mediante una etapa que se llama etapa de aprendizaje.
Esta consiste en proporcionar a la RNA datos como entrada a su vez que se le indica cuál es la salida (respuesta)
esperada.
• Auto organización: Una RNA crea su propia representación de la información en su interior, descargando al
usuario de esto.
• Tolerancia a fallos: Debido a que una RNA almacena la información de forma redundante, ésta puede seguir
respondiendo de manera aceptable aun si se daña parcialmente.
• Flexibilidad: Una RNA puede manejar cambios no importantes en la información de entrada, como señales con
ruido u otros cambios en la entrada (por ejemplo si la información de entrada es la imagen de un objeto, la
respuesta correspondiente no sufre cambios si la imagen cambia un poco su brillo o el objeto cambia
ligeramente).
• Tiempo real: La estructura de una RNA es paralela, por lo cual si esto es implementado con computadoras o en
dispositivos electrónicos especiales, se pueden obtener respuestas en tiempo real.
Tipología de las RNA
Modelos
Existe una serie de modelos que aparecen en la mayoría de estudios académicos y la bibliografía especializada.
•• Perceptrón
•• Adaline
•• Perceptrón multicapa
•• Memorias asociativas
•• Máquina de Boltzmann
•• Máquina de Cauchy
•• Propagación hacia atrás (backpropagation)
•• Redes de Elman
•• Redes de Hopfield
•• Red de contrapropagación
•• Redes de neuronas de base radial
•• Redes de neuronas de aprendizaje competitivo
• Mapas Autoorganizados (RNA) (Redes de Kohonen)
•• Crecimiento dinámico de células
•• Gas Neuronal Creciente
• Redes ART (Adaptative Resonance Theory)
Topología
Una primera clasificación de las redes de neuronas artificiales que se suele hacer es en función del patrón de
conexiones que presenta. Así se definen tres tipos básicos de redes:
• Dos tipos de redes de propagación hacia delante o acíclicas en las que todas las señales van desde la capa de
entrada hacia la salida sin existir ciclos, ni conexiones entre neuronas de la misma capa de red neuronal y su
clasificación.
• Monocapa. Ejemplos: perceptrón, Adaline.
Red neuronal artificial 14
• Multicapa. Ejemplos: perceptrón multicapa.
• Las redes recurrentes que presentan al menos un ciclo cerrado de activación neuronal. Ejemplos: Elman,
Hopfield, máquina de Boltzmann.
Aprendizaje
Una segunda clasificación que se suele hacer es en función del tipo de aprendizaje de que es capaz (si necesita o no
un conjunto de entrenamiento supervisado). Para cada tipo de aprendizaje encontramos varios modelos propuestos
por diferentes autores:
• Aprendizaje supervisado: necesitan un conjunto de datos de entrada previamente clasificado o cuya respuesta
objetivo se conoce. Ejemplos de este tipo de redes son: el perceptrón simple, la red Adaline, el perceptrón
multicapa, red backpropagation, y la memoria asociativa bidireccional.
• Aprendizaje no supervisado o autoorganizado: no necesitan de tal conjunto previo. Ejemplos de este tipo de
redes son: las memorias asociativas, las redes de Hopfield, la máquina de Boltzmann y la máquina de Cauchy, las
redes de aprendizaje competitivo, las redes de Kohonen o mapas autoorganizados y las redes de resonancia
adaptativa (ART).
• Redes híbridas: son un enfoque mixto en el que se utiliza una función de mejora para facilitar la convergencia.
Un ejemplo de este último tipo son las redes de base radial.
• Aprendizaje reforzado: se sitúa a medio camino entre el supervisado y el autoorganizado.
Tipo de entrada
Finalmente también se pueden clasificar las RNAs según sean capaces de procesar información de distinto tipo en:
• Redes analógicas: procesan datos de entrada con valores continuos y, habitualmente, acotados. Ejemplos de este
tipo de redes son: Hopfield, Kohonen y las redes de aprendizaje competitivo.
• Redes discretas: procesan datos de entrada de naturaleza discreta; habitualmente valores lógicos booleanos.
Ejemplos de este segundo tipo de redes son: las máquinas de Boltzmann y Cauchy, y la red discreta de Hopfield.
Aplicaciones
Las características de las RNA las hacen bastante apropiadas para aplicaciones en las que no se dispone a priori de
un modelo identificable que pueda ser programado, pero se dispone de un conjunto básico de ejemplos de entrada
(previamente clasificados o no). Asimismo, son altamente robustas tanto al ruido como a la disfunción de elementos
concretos y son fácilmente paralelizables.
Esto incluye problemas de clasificación y reconocimiento de patrones de voz, imágenes, señales, etc. Asimismo se
han utilizado para encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, hacer
predicciones de tiempo atmosférico, etc.
También se pueden utilizar cuando no existen modelos matemáticos precisos o algoritmos con complejidad
razonable, por ejemplo la red de Kohonen ha sido aplicada con un éxito más que razonable al clásico problema del
viajante (un problema para el que no se conoce solución algorítmica de complejidad polinómica).
Otro tipo especial de redes neuronales artificiales se ha aplicado en conjunción con los algoritmos genéticos (AG)
para crear controladores para robots. La disciplina que trata la evolución de redes neuronales mediante algoritmos
genéticos se denomina Robótica Evolutiva. En este tipo de aplicación el genoma del AG lo constituyen los
parámetros de la red (topología, algoritmo de aprendizaje, funciones de activación, etc.) y la adecuación de la red
viene dada por la adecuación del comportamiento exhibido por el robot controlado (normalmente una simulación de
dicho comportamiento).
Red neuronal artificial 15
Ejemplos
Quake II Neuralbot
Un bot es un programa que simula a un jugador humano. El Neuralbot es un bot para el juego Quake II que utiliza
una red neuronal artificial para decidir su comportamiento y un algoritmo genético para el aprendizaje. Es muy fácil
probarlo para ver su evolución. Más información aquí [3]
Clasificador No Sesgado de Proteínas
Es un programa que combina diversas técnicas computacionales con el objetivo de clasificar familias de proteínas.
Un posible método consiste en utilizar métricas adaptativas como por ejemplo: mapas autoorganizados y algoritmos
genéticos.
El problema de clasificación no sesgada basada en la expresión de las proteínas en Aminoácidos puede reducirse,
conceptualmente, a lo siguiente:
•• La identificación de grupos de proteínas que compartan características comunes.
•• La determinación de las razones estructurales por las cuales las proteínas en cuestión se agrupan de la manera
indicada.
• Evitar la idea de establecer criterios de clasificación (“sesgados”) fundamentados en ideas preconcebidas para
lograr su clasificación. En este sentido, hay dos asuntos que considerar:
•• Cómo lograr la caracterización de las proteínas de manera no sesgada
• Cómo lograr lo anterior sin apelar a medidas de agrupamiento que, a su vez, impliquen algún tipo de sesgo
sobre dicho agrupamiento.
Las RNA han sido aplicadas a un número en aumento de problemas en la vida real y de considerable complejidad,
donde su mayor ventaja es en la solución de problemas que son bastante complejos para la tecnología actual,
tratándose de problemas que no tienen una solución algorítmica o cuya solución algorítmica es demasiado compleja
para ser encontrada.
En general, debido a que son parecidas a las del cerebro humano, las RNA son bien nombradas ya que son buenas
para resolver problemas que el humano puede resolver pero las computadoras no. Estos problemas incluyen el
reconocimiento de patrones y la predicción del tiempo. De cualquier forma, el humano tiene capacidad para el
reconocimiento de patrones, pero la capacidad de las redes neuronales no se ve afectada por la fatiga, condiciones de
trabajo, estado emocional, y compensaciones.
Se conocen cinco aplicaciones tecnológicas extendidas:
1.1. Reconocimiento de textos manuscritos
2.2. Reconocimiento del habla
3.3. Simulación de centrales de producción de energía
4.4. Detección de explosivos
5.5. Identificación de blancos de radares
Red neuronal artificial 16
Referencias
[1] Aunque en francés se utiliza el acrónimo ANN (de Artificial Neural Networks) para referirse a este campo de la computación en este artículo
se utilizará su equivalente castellano RNA.
[2] Redes de Neuronas Artificiales (http://www.lab.inf.uc3m.es/~a0080630/redes-de-neuronas/index.html), Redes de Neuronas
Artificiales, UC3M, RAI 2012.
[3] http://homepages.paradise.net.nz/nickamy/neuralbot/index.html
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre Red neuronal artificialCommons.
• Redes Neuronales Artificiales - Implementación con C# (catellano) (http://www.pedrov.info/redesneuronales.
html)
• Tutorial de la Universidad Politécnica de Madrid (http://www.gc.ssr.upm.es/inves/neural/ann2/anntutorial.
html) (castellano)
• Introducción a las redes de neuronas artificiales (http://sabia.tic.udc.es/mgestal/cv/RNAtutorial/index.html)
(castellano)
• Artículos sobre redes neuronales artificiales (http://www.neurosecurity.com/articles.php) (inglés)
• Sitio Web sobre redes neuronales artificiales, ejemplos y aplicaciones (http://electronica.com.mx/neural)
(castellano)
• Introducción a las Redes Neuronales y sus Modelos (http://www.redes-neuronales.com.es/
tutorial-redes-neuronales/tutorial-redes.htm) (castellano)
• Sistema nervioso artificial (http://www.dat.etsit.upm.es/?q=node/5955)
• ¿Qué son las redes neuronales? (http://info.fisica.uson.mx/arnulfo.castellanos/archivos_html/quesonredneu.
htm)(castellano)
Fuentes y contribuyentes del artículo 17
Fuentes y contribuyentes del artículo
Algoritmo  Fuente: http://es.wikipedia.org/w/index.php?oldid=72474879  Contribuyentes: -jem-, .Sergio, AS990, Abel406, AchedDamiman, Acratta, Adrianantoniors, Airunp, Aitorzubiaurre,
AlbertMA, Albertochoa, Aleator, Alejandrocaro35, Alexav8, AlfonsoERomero, Alhen, AlphaWiki, Alvaro qc, Amadís, Angel GN, Angus, Antonorsi, Antur, Aquiel, Arlm1, Arthur 'Two Sheds'
Jackson, Açipni-Lovrij, Baiji, Balderai, Banfield, BlackBeast, BuenaGente, CASF, Caiser, Calitb, Camilo, Camima, Carlo el calvo, Carmin, Carutsu, Chuchot, Cinabrium, Clarad, ClausxD,
Cratón, Crescent Moon, Ctrl Z, Dangelin5, Danielba894, David0811, DerHexer, Diegusjaimes, Dodo, Dogor, Dorieo, Drake 81, Dromero, Ecemaml, Edgar, Edslov, Eduardosalg, Edub, Eduman,
Efegé, Ejmeza, Elabra sanchez, Elisardojm, Elwikipedista, Emiduronte, Emijrp, Er Komandante, Eyetheunlord, Ezarate, FAR, Fadesga, Farisori, Fegc77, Fide07, Flakinho, Francisco Mochis,
Fsd141, GermanX, Ginés90, Gizmo II, Gothmog, Guillervf91, Gusbelluwiki, Gusgus, H3r3dia, HUB, Haitike, Halfdrag, Hantartico, Henry bedon, Heynry1, Huhsunqu, Humbefa, Humberto,
Ictlogist, Igna, Ignacio Icke, Imperioonepiece, Ingenioso Hidalgo, Irvinopuma, Isha, JAAC, JMPerez, Jarisleif, Jarke, Javierito92, Jecanre, Jesuja, Jhoelito14, Jjflorescueto, Jkbw, JorgeGG,
Jorgeu, Jsanchezes, Jstitch, JuanRodríguez, Jugones55, Julie, Junior1209, Kn, KnightRider, Komputisto, Kotas, Kved, Laura Fiorucci, Lcpousa, Lecuona, Leonpolanco, Libertad y Saber, Llull,
Lourdes Cardenal, M.heda, Macrocoliset, MadriCR, Mansoncc, ManuelGR, Manwë, Mar del Sur, MarcoAurelio, Matdrodes, McMalamute, Mel 23, Metilisopropilisergamida, Metrónomo,
Miguel hdez, MiguelAngel fotografo, Mipataentutrasero, MorZilla, Moriel, Mortadelo2005, Muro de Aguas, Mutari, Netito777, Ninovolador, Nixón, Nocturnogatuno, Obueno, Orgullomoore,
Paintman, Pan con queso, Papaplus, Pedrito suarez, Pedrovicenterosero, Peregring-lk, PeruProfe, Petruss, Pit, Pólux, Qix, Queninosta, Raulshc, Raystorm, Rbonvall, Relleu, Renly, Rigenea,
Riviera, Rosarino, RoyFocker, RoyFokker, Rsg, Ruy Pugliesi, Ríos-Ortega, S3v3r-1, Sabbut, Sancebau, Sandovaltk10, Sauron, Savh, Schummy, Sebrev, Sergio Andres Segovia, Shining.Star,
Shooke, Snakeyes, Sophie kowalsky, Speedplus, SuperBraulio13, Superzerocool, Tano4595, Technopat, Tirithel, Tomatejc, Tostadora, Triku, Ucevista, Valentin estevanez navarro, Veon, Vic
Fede, Virgi, Vitamine, Waka Waka, Wikielwikingo, Wilfredor, Willtron, XalD, Xavigivax, Xpress500, Xxim, Xxxmagicmanxxx, Yeza, YoaR, Zam, ZrzlKing, Zupez zeta, conversion script,
proxy1.unizar.es, 1098 ediciones anónimas
Aprendizaje automático  Fuente: http://es.wikipedia.org/w/index.php?oldid=72480584  Contribuyentes: Acratta, AlfonsoERomero, Ascánder, Astaffolani, Claudiapat1, Damifb, Davidsevilla,
Debora.riu, DerkeNuke, Edub, El Quinche, Enric Naval, Ensada, Farisori, Gbayon, GermanX, Grillitus, Hiperfelix, Hspitia, Ignacio Icke, Jesuja, Jmartinezot, JoaquinFerrero, Jorge.maturana,
Lagoset, Luis Felipe Schenone, Machucho2007, Mar25 mercedes, OLGA JANET, Pinar, Pintaio, T4nn0, Taichi, Technopat, Trylks, 35 ediciones anónimas
Red neuronal artificial  Fuente: http://es.wikipedia.org/w/index.php?oldid=73133317  Contribuyentes: Alcojol, Alhen, Alrik, Anrfernandez, Ascánder, Augt.pelle, Beepath, CayoMarcio,
Changcho, Chico512, Cinabrium, Claudiapat1, Cobalttempest, DamianFinol, Danidvt, Daniel G., Danypalma1984, DerkeNuke, Deu2000, Dodo, Ecemaml, Emijrp, Enric Naval, Ensada, Farisori,
Finderlog, Fortran, Gacpro, Gengiskanhg, GermanX, Góngora, HiTe, Hombresigma, Hprmedina, Humbefa, Humberto, Icvav, Ivanwalkesmc, JMPerez, Jcaraballo, Jkbw, Joma.huguet,
Jorge.maturana, Jorgenumata, Jose figueredo, Joseaperez, Juan renombrado, JurgenNL, Lancaster, Lionni, Lobillo, LuchoX, Maldoror, Manwë, Matdrodes, Moriel, Mortadelo2005, NaBUru38,
Nathan, Nerika, No sé qué nick poner, Oscar ., Osepu, PabloGN, Paintman, Pedromanuelbaeza, Petronas, Pinar, Pólux, RGLago, Ricardogpn, Rosarinagazo, Rsg, Saloca, Sauron, Srbanana,
SuperBraulio13, Taichi, Tamorlan, Tano4595, Technopat, Trec, UA31, Varano, Xavigivax, Yearofthedragon, YoniG, Zorak, 224 ediciones anónimas
Fuentes de imagen, Licencias y contribuyentes 18
Fuentes de imagen, Licencias y contribuyentes
Archivo:LampFlowchart-es.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:LampFlowchart-es.svg  Licencia: Creative Commons Attribution-Sharealike 3.0  Contribuyentes:
LampFlowchart.svg: svg by Booyabazookaoriginal png by Wapcaplet derivative work: Huhsunqu (talk)
Archivo:AlgoritmoRaiz.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:AlgoritmoRaiz.png  Licencia: Creative Commons Attribution-Sharealike 2.5  Contribuyentes: Kn
Archivo:EsquemáticaAlgoritmo1.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:EsquemáticaAlgoritmo1.svg  Licencia: Creative Commons Attribution-Share Alike
 Contribuyentes: Kn
Archivo:Wikibooks-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikibooks-logo.svg  Licencia: logo  Contribuyentes: User:Bastique, User:Ramac et al.
Archivo:Wiktionary-logo-es.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wiktionary-logo-es.png  Licencia: logo  Contribuyentes: es:Usuario:Pybalo
Archivo:Esquema aprendizaje.jpg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Esquema_aprendizaje.jpg  Licencia: Creative Commons Attribution-Sharealike 3.0
 Contribuyentes: User:Debora.riu
Archivo:RedNeuronalArtificial.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:RedNeuronalArtificial.png  Licencia: GNU Free Documentation License  Contribuyentes:
Original uploader was Gengiskanhg at es.wikipedia
Archivo:Computer.Science.AI.Neuron.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Computer.Science.AI.Neuron.svg  Licencia: Creative Commons Attribution-ShareAlike
3.0 Unported  Contribuyentes: User:Yearofthedragon
Archivo:Commons-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Commons-logo.svg  Licencia: logo  Contribuyentes: SVG version was created by User:Grunt and
cleaned up by 3247, based on the earlier PNG version, created by Reidab.
Licencia 19
Licencia
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/

Más contenido relacionado

La actualidad más candente (19)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmo , MATEMÁTICA
Algoritmo ,  MATEMÁTICAAlgoritmo ,  MATEMÁTICA
Algoritmo , MATEMÁTICA
 
Tarea3.
Tarea3.Tarea3.
Tarea3.
 
Que es programacion
Que es      programacionQue es      programacion
Que es programacion
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Tarea3
Tarea3Tarea3
Tarea3
 
Tarea 3
Tarea  3Tarea  3
Tarea 3
 
Trabajo dfe informatica
Trabajo dfe informatica Trabajo dfe informatica
Trabajo dfe informatica
 
Trabajo de informatica.com
Trabajo de informatica.comTrabajo de informatica.com
Trabajo de informatica.com
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
INTRODUCCION A LA PROGRAMACIÓN I.N.W.T.D COJUTEPEQUE
INTRODUCCION A LA PROGRAMACIÓN    I.N.W.T.D COJUTEPEQUEINTRODUCCION A LA PROGRAMACIÓN    I.N.W.T.D COJUTEPEQUE
INTRODUCCION A LA PROGRAMACIÓN I.N.W.T.D COJUTEPEQUE
 
Tarea 3
Tarea 3Tarea 3
Tarea 3
 
Melendez
MelendezMelendez
Melendez
 
Nodos
NodosNodos
Nodos
 
Nodos
NodosNodos
Nodos
 

Similar a Private

Similar a Private (20)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos, diagrama de flujo y pseudocodigo
Algoritmos, diagrama de flujo y pseudocodigoAlgoritmos, diagrama de flujo y pseudocodigo
Algoritmos, diagrama de flujo y pseudocodigo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Diagrama y algoritmos
Diagrama y algoritmosDiagrama y algoritmos
Diagrama y algoritmos
 
Diagrama y algoritmos
Diagrama y algoritmosDiagrama y algoritmos
Diagrama y algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Infoalgoritmo
InfoalgoritmoInfoalgoritmo
Infoalgoritmo
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Infoalgoritmo
InfoalgoritmoInfoalgoritmo
Infoalgoritmo
 
Flujogramas
FlujogramasFlujogramas
Flujogramas
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Técnicas de Diseño Detallado.
Técnicas de Diseño Detallado.Técnicas de Diseño Detallado.
Técnicas de Diseño Detallado.
 
Algoritmos de victor gelvez
Algoritmos de victor gelvezAlgoritmos de victor gelvez
Algoritmos de victor gelvez
 
Algoritmos de victor gelvez
Algoritmos de victor gelvezAlgoritmos de victor gelvez
Algoritmos de victor gelvez
 
Manual users algoritmos
Manual users   algoritmosManual users   algoritmos
Manual users algoritmos
 
Algoritmo a
Algoritmo aAlgoritmo a
Algoritmo a
 
Metodos calcular raices
Metodos calcular raicesMetodos calcular raices
Metodos calcular raices
 
Nodos
NodosNodos
Nodos
 
Desarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamientoDesarrollo de habilidades de pensamiento
Desarrollo de habilidades de pensamiento
 
Principios básicos de la informatica
Principios básicos de la informaticaPrincipios básicos de la informatica
Principios básicos de la informatica
 

Private

  • 1. PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información. PDF generated at: Thu, 13 Mar 2014 06:07:07 UTC Los Cpu los tipos de asistemas
  • 2. Contenidos Artículos Algoritmo 1 Aprendizaje automático 8 Red neuronal artificial 11 Referencias Fuentes y contribuyentes del artículo 17 Fuentes de imagen, Licencias y contribuyentes 18 Licencias de artículos Licencia 19
  • 3. Algoritmo 1 Algoritmo Los diagramas de flujo sirven para representar algoritmos de manera gráfica. En matemáticas, lógica, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi) es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. [1] Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia. En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de multiplicación, para calcular el producto, el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones. Definición formal En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un cálculo o un problema abstracto, es decir, que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida). Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo. A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos. Esto fue realizado por Alonzo Church en 1936 con el concepto de "calculabilidad efectiva" basada en su cálculo lambda y por Alan Turing basándose en la máquina de Turing. Los dos enfoques son equivalentes, en el sentido en que se pueden resolver exactamente los mismos problemas con ambos enfoques. Sin embargo, estos modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos: Tiempo secuencial. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. Exploración acotada. La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual.
  • 4. Algoritmo 2 En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación suficientemente general): Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial. Medios de expresión de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico. La descripción de un algoritmo usualmente se hace en tres niveles: 1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución. 3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones. También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o ambos. Diagrama de flujo
  • 5. Algoritmo 3 Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeños, ya que abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y descripción de procesos a personas ajenas a la computación. Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programación específico. Pseudocódigo El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de un algoritmo, como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas. El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer directamente a partir de él. Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema. Sistemas formales La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Los modelos más comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas. Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación. Implementación Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos.
  • 6. Algoritmo 4 Variables Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables: 1.1. Mediante una sentencia de asignación. 2.2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read'). Ejemplo: ... i:=1; read(n); while i < n do begin (* cuerpo del bucle *) i := i + 1 end; ... Estructuras secuenciales La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma: 1. Simples: Consiste en pasar un valor constante a una variable (a ← 15) 2. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1) 3. Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b) 4. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ← c + b*2/4). Un ejemplo de estructura secuencial, como obtener la área de un triángulo: Inicio ... float b, h, a; printf("Diga la base"); scanf("%f", &b); printf("Diga la altura"); scanf("%f", &h); a = (b*h)/2; printf("El área del triángulo es %f", a) ... Fin Algoritmos como funciones
  • 7. Algoritmo 5 Esquemática de un algoritmo solucionando un problema de ciclo hamiltoniano. Un algoritmo se puede concebir como una función que transforma los datos de un problema (entrada) en los datos de una solución (salida). Más aun, los datos se pueden representar a su vez como secuencias de bits, y en general, de símbolos cualesquiera. Como cada secuencia de bits representa a un número natural (véase Sistema binario), entonces los algoritmos son en esencia funciones de los números naturales en los números naturales que sí se pueden calcular. Es decir que todo algoritmo calcula una función donde cada número natural es la codificación de un problema o de una solución. En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ningún valor de salida, y podemos decir que la función queda indefinida para ese valor de entrada. Por esta razón se considera que los algoritmos son funciones parciales, es decir, no necesariamente definidas en todo su dominio de definición. Cuando una función puede ser calculada por medios algorítmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha función es computable. No todas las funciones entre secuencias datos son computables. El problema de la parada es un ejemplo. Análisis de algoritmos Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada. El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los casos, su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje muy simple tal como Lexico, cuyos códigos pueden estar en el idioma del programador. Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento, mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera algún dispositivo físico que fuera capaz de funcionar eternamente. En este último caso, la finalización con éxito del algoritmo no se podría definir como la terminación de este con una salida satisfactoria, sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la ejecución del algoritmo. Por ejemplo, un algoritmo que verifica que hay más ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa correctamente, el valor devuelto por el algoritmo será válido, hasta que evalúe el siguiente dígito binario. De esta forma, mientras evalúa la siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y, en cualquier otro caso, devolverá una mezcla de señales positivas y negativas.
  • 8. Algoritmo 6 Ejemplo de algoritmo El problema consiste en encontrar el máximo de un conjunto de números. Para un ejemplo más complejo véase Algoritmo de Euclides. Descripción de alto nivel Dado un conjunto finito de números, se tiene el problema de encontrar el número más grande. Sin pérdida de generalidad se puede asumir que dicho conjunto no es vacío y que sus elementos están numerados como . Es decir, dado un conjunto se pide encontrar tal que para todo elemento que pertenece al conjunto . Para encontrar el elemento máximo, se asume que el primer elemento ( ) es el máximo; luego, se recorre el conjunto y se compara cada valor con el valor del máximo número encontrado hasta ese momento. En el caso que un elemento sea mayor que el máximo, se asigna su valor al máximo. Cuando se termina de recorrer la lista, el máximo número que se ha encontrado es el máximo de todo el conjunto. Descripción formal El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo: Algoritmo Encontrar el máximo de un conjunto función max( ) // es un conjunto no vacío de números// ← // es el número de elementos de // ← para ← hasta hacer si entonces ← devolver Sobre la notación: • "←" representa una asignación: ← significa que la variable toma el valor de ; • "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el máximo de ). Implementación En lenguaje C++: int max(int c[], int n) { int i, m = c[0]; for (i = 1; i < n; i++) if (c[i] > m) m = c[i]; return m; }
  • 9. Algoritmo 7 Referencias [1] Real Academia Española. Diccionario de la lengua española (http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2& TIPO_BUS=3&LEMA=algoritmo) "Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema." Bibliografía • Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000X) • The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del TeX] • Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C. • Introduction to Algorithms. A Creative Approach, Mamber, U. • Algorithms in C (3r ed), Sedgewick, R. (también existen versiones en C++ y Java) •• The Design and Analysis of Computer Algorithms, Aho, A. Enlaces externos Wikilibros • Wikilibros alberga un libro o manual sobre Algoritmia. • Wikcionario tiene definiciones y otra información sobre algoritmo.Wikcionario • Portal de algoritmia (http://www.algoritmia.net) • Técnicas de Diseño de Algoritmos (http://www.lcc.uma.es/~av/Libro/) manual que explica y ejemplifica los distintos paradigmas de diseño de algoritmos. Rosa Guerequeta y Antonio Vallecillo (profesores de la Universidad de Málaga). • Transparencias de la asignatura "Esquemas Algorítmicos", Campos, J. (http://webdiis.unizar.es/asignaturas/ EDA/) • Apuntes y problemas de Algorítmica por Domingo Giménez Cánovas (http://dis.um.es/~domingo/alg.html) • Curso de Diseño de Algoritmos de Carlos Pes (http://www.carlospes.com/curso_de_algoritmos/) • Algoritmos y Diagramas de Flujo (http://snippets-tricks.org/algoritmos-y-diagramas-de-flujo/)
  • 10. Aprendizaje automático 8 Aprendizaje automático El aprendizaje automático o aprendizaje de máquinas es una rama de la inteligencia artificial cuyo objetivo es desarrollar técnicas que permitan a las computadoras aprender. De forma más concreta, se trata de crear programas capaces de generalizar comportamientos a partir de una información no estructurada suministrada en forma de ejemplos. Es, por lo tanto, un proceso de inducción del conocimiento. En muchas ocasiones el campo de actuación del aprendizaje automático se solapa con el de la estadística, ya que las dos disciplinas se basan en el análisis de datos. Sin embargo, el aprendizaje automático se centra más en el estudio de la complejidad computacional de los problemas. Muchos problemas son de clase NP-hard, por lo que gran parte de la investigación realizada en aprendizaje automático está enfocada al diseño de soluciones factibles a esos problemas. El aprendizaje automático puede ser visto como un intento de automatizar algunas partes del método científico mediante métodos matemáticos. El aprendizaje automático tiene una amplia gama de aplicaciones, incluyendo motores de búsqueda, diagnósticos médicos, detección de fraude en el uso de tarjetas de crédito, análisis del mercado de valores, clasificación de secuencias de ADN, reconocimiento del habla y del lenguaje escrito, juegos y robótica. Aprendizaje automático Interacción Hombre-Máquina Algunos sistemas de Aprendizaje Automático intentan eliminar toda necesidad de intuición o conocimiento experto de los procesos de análisis de datos, mientras otros tratan de establecer un marco de colaboración entre el experto y la computadora. De todas formas, la intuición humana no puede ser reemplazada en su totalidad, ya que el diseñador del sistema ha de especificar la forma de representación de los datos y los métodos de manipulación y caracterización de los mismos. Tipos de algoritmos Los diferentes algoritmos de Aprendizaje Automático se agrupan en una taxonomía en función de la salida de los mismos. Algunos tipos de algoritmos son: Aprendizaje supervisado El algoritmo produce una función que establece una correspondencia entre las entradas y las salidas deseadas del sistema. Un ejemplo de este tipo de algoritmo es el problema de clasificación, donde el sistema de aprendizaje trata de etiquetar (clasificar) una serie de vectores utilizando una entre varias categorías (clases). La base de conocimiento del sistema está formada por ejemplos de etiquetados anteriores. Este tipo de aprendizaje puede llegar a ser muy útil en problemas de investigación biológica, biología computacional y bioinformática. Aprendizaje no supervisado Todo el proceso de modelado se lleva a cabo sobre un conjunto de ejemplos formado tan sólo por entradas al sistema. No se tiene información sobre las categorías de esos ejemplos. Por lo tanto, en este caso, el sistema tiene que ser capaz de reconocer patrones para poder etiquetar las nuevas entradas. Aprendizaje semisupervisado Este tipo de algoritmos combinan los dos algoritmos anteriores para poder clasificar de manera adecuada. Se tiene en cuenta los datos marcados y los no marcados.
  • 11. Aprendizaje automático 9 Aprendizaje por refuerzo El algoritmo aprende observando el mundo que le rodea. Su información de entrada es el feedback o retroalimentación que obtiene del mundo exterior como respuesta a sus acciones. Por lo tanto, el sistema aprende a base de ensayo-error. Transducción Similar al aprendizaje supervisado, pero no construye de forma explícita una función. Trata de predecir las categorías de los futuros ejemplos basándose en los ejemplos de entrada, sus respectivas categorías y los ejemplos nuevos al sistema. Aprendizaje multi-tarea Métodos de aprendizaje que usan conocimiento previamente aprendido por el sistema de cara a enfrentarse a problemas parecidos a los ya vistos. El análisis computacional y de rendimiento de los algoritmos de aprendizaje automático es una rama de la estadística conocida como teoría computacional del aprendizaje. El aprendizaje automático las personas lo llevamos a cabo de manera automática ya que es un proceso tan sencillo para nosotros que ni nos damos cuenta de cómo se realiza y todo lo que implica. Desde que nacemos hasta que morimos los seres humanos llevamos a cabo diferentes procesos, entre ellos encontramos el de aprendizaje por medio del cual adquirimos conocimientos, desarrollamos habilidades para analizar y evaluar a través de métodos y técnicas así como también por medio de la experiencia propia. Sin embargo, a las máquinas hay que indicarles cómo aprender, ya que si no se logra que una máquina sea capaz de desarrollar sus habilidades, el proceso de aprendizaje no se estará llevando a cabo, sino que solo será una secuencia repetitiva. También debemos tener en cuenta que el tener conocimiento o el hecho de realizar bien el proceso de aprendizaje automático no implica que se sepa utilizar, es preciso saber aplicarlo en las actividades cotidianas, y un buen aprendizaje también implica saber cómo y cuándo utilizar nuestros conocimientos. Para llevar a cabo un buen aprendizaje es necesario considerar todos los factores que a este le rodean, como la sociedad, la economía, la ciudad, el ambiente, el lugar, etc. Por lo tanto, es necesario empezar a tomar diversas medidas para lograr un aprendizaje adecuado, y obtener una automatización adecuada del aprendizaje. Así, lo primero que se debe tener en cuenta es el concepto de conocimiento, que es el entendimiento de un determinado tema o materia en el cual tu puedas dar tu opinión o punto de vista, así como responder a ciertas interrogantes que puedan surgir de dicho tema o materia. En el aprendizaje automático podemos obtener 3 tipos de conocimiento, que son: 1. Crecimiento Es el que se adquiere de lo que nos rodea, el cual guarda la información en la memoria como si dejara huellas. 2. Reestructuración Al interpretar los conocimientos el individuo razona y genera nuevo conocimiento al cual se le llama de reestructuración. 3. Ajuste Es el que se obtiene al generalizar varios conceptos o generando los propios. Los tres tipos se efectúan durante un proceso de aprendizaje automático pero la importancia de cada tipo de conocimiento depende de las características de lo que se está tratando de aprender. El aprendizaje es más que una necesidad, es un factor primordial para satisfacer las necesidades de la inteligencia artificial.
  • 12. Aprendizaje automático 10 Aplicaciones •• Motores de búsqueda •• Diagnóstico médico •• Detección de fraudes con el uso de tarjetas de crédito •• Análisis del mercado de valores • Clasificación de secuencias de ADN •• Reconocimiento del habla •• Robótica Temas del aprendizaje automático A continuación se muestran una serie de temas que podrían formar parte del temario de un curso sobre aprendizaje automático. • Modelado de funciones de densidad de probabilidad condicionadas: clasificación y regresión •• Redes neuronales artificiales •• Árboles de decisión •• Modelos de regresión múltiple no postulados •• Regresión en procesos Gaussianos •• Análisis de discriminantes lineales •• k-vecinos más próximos •• Perceptrón •• Funciones de base radial •• Máquinas de soporte vectorial • Modelado de funciones de densidad de probabilidad mediante modelos generativos •• Algoritmo EM • Modelos gráficos, como las redes bayesianas y los campos aleatorios de Markov •• Mapeado topográfico generativo •• Técnicas de inferencia aproximada • Cadenas de Markov y Método de Montecarlo •• Métodos variacionales • Optimización: La mayoría de los métodos descritos arriba usan algoritmos de optimización o son por sí mismos instancias de problemas de optimización. Enlaces externos • Machine Learning Development with Perl [1] (en inglés) • Weka [2] Software open-source • Grupo de investigación - Sistemas Inteligentes [3] Bibliografía • Mitchell, T. (1997). Machine Learning, McGraw Hill. ISBN 0-07-042807-7 Referencias [1] http://www.perlmonks.org/index.pl?node_id=638391 [2] http://www.cs.waikato.ac.nz/ml/weka [3] http://web.archive.org/web/http://www.esp.uem.es/gsi/
  • 13. Red neuronal artificial 11 Red neuronal artificial Red neuronal artificial perceptrón multicapa con n neuronas de entrada, m neuronas en su capa oculta y una neurona de escape. Las redes de neuronas artificiales (denominadas habitualmente como RNA o en inglés como: "ANN" [1] ) son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexión de neuronas que colaboran entre sí para producir un estímulo de salida. En inteligencia artificial es frecuente referirse a ellas como redes de neuronas o redes neuronales. Historia Los primeros modelos de redes neuronales datan de 1943 por los neurólogos McCulloch y Pitts. Años más tarde, en 1949, Donald Hebb desarrolló sus ideas sobre el aprendizaje neuronal, quedando reflejado en la "regla de Hebb". En 1958, Rosemblatt desarrolló el perceptrón simple, y en 1960, Widrow y Hoff desarrollaron el ADALINE, que fue la primera aplicación industrial real. En los años siguientes, se redujo la investigación, debido a la falta de modelos de aprendizaje y el estudio de Minsky y Papert sobre las limitaciones del perceptrón. Sin embargo, en los años 80, volvieron a resurgir las RNA gracias al desarrollo de la red de Hopfield, y en especial, al algoritmo de aprendizaje de retropropagación ideado por Rumelhart y McLellan en 1986 que fue aplicado en el desarrollo de los perceptrones multicapa. [2] Propiedades Perceptrón con 2 entradas. Una red neuronal se compone de unidades llamadas neuronas. Cada neurona recibe una serie de entradas a través de interconexiones y emite una salida. Esta salida viene dada por tres funciones: 1. Una función de propagación (también conocida como función de excitación), que por lo general consiste en el sumatorio de cada entrada multiplicada por el peso de su interconexión (valor neto). Si el peso es positivo, la conexión se denomina excitatoria; si es negativo, se denomina inhibitoria. 2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este caso la salida la misma función de propagación. 3. Una función de transferencia, que se aplica al valor devuelto por la función de activación. Se utiliza para acotar la salida de la neurona y generalmente viene dada por la interpretación que queramos darle a dichas salidas. Algunas de las más utilizadas son la función sigmoidea (para obtener valores en el intervalo [0,1]) y la tangente hiperbólica (para obtener valores en el intervalo [-1,1]).
  • 14. Red neuronal artificial 12 Diseño y programación de una RNA (red neuronal artificial) Con un paradigma convencional de programación en ingeniería del software, el objetivo del programador es modelar matemáticamente (con distintos grados de formalismo) el problema en cuestión y posteriormente formular una solución (programa) mediante un algoritmo codificado que tenga una serie de propiedades que permitan resolver dicho problema. En contraposición, la aproximación basada en las RNA parte de un conjunto de datos de entrada suficientemente significativo y el objetivo es conseguir que la red aprenda automáticamente las propiedades deseadas. En este sentido, el diseño de la red tiene menos que ver con cuestiones como los flujos de datos y la detección de condiciones, y más que ver con cuestiones tales como la selección del modelo de red, la de las variables a incorporar y el preprocesamiento de la información que formará el conjunto de entrenamiento. Asimismo, el proceso por el que los parámetros de la red se adecuan a la resolución de cada problema no se denomina genéricamente programación sino que se suele denominar entrenamiento neuronal. Por ejemplo en una red que se va a aplicar al diagnóstico de imágenes médicas; durante la fase de entrenamiento el sistema recibe imágenes de tejidos que se sabe son cancerígenos y tejidos que se sabe son sanos, así como las respectivas clasificaciones de dichas imágenes. Si el entrenamiento es el adecuado, una vez concluido, el sistema podrá recibir imágenes de tejidos no clasificados y obtener su clasificación sano/no sano con un buen grado de seguridad. Las variables de entrada pueden ser desde los puntos individuales de cada imagen hasta un vector de características de las mismas que se puedan incorporar al sistema (por ejemplo, procedencia anatómica del tejido de la imagen o la edad del paciente al que se le extrajo la muestra). Estructura La mayoría de los científicos coinciden en que una RNA es muy diferente en términos de estructura de un cerebro animal. Al igual que el cerebro, una RNA se compone de un conjunto masivamente paralelo de unidades de proceso muy simples y es en las conexiones entre estas unidades donde reside la inteligencia de la red. Sin embargo, en términos de escala, un cerebro es muchísimo mayor que cualquier RNA creada hasta la actualidad, y las neuronas artificiales también son más simples que su contrapartida animal. Biológicamente, un cerebro aprende mediante la reorganización de las conexiones sinápticas entre las neuronas que lo componen. De la misma manera, las RNA tienen un gran número de procesadores virtuales interconectados que de forma simplificada simulan la funcionalidad de las neuronas biológicas. En esta simulación, la reorganización de las conexiones sinápticas biológicas se modela mediante un mecanismo de pesos, que son ajustados durante la fase de aprendizaje. En una RNA entrenada, el conjunto de los pesos determina el conocimiento de esa RNA y tiene la propiedad de resolver el problema para el que la RNA ha sido entrenada. Por otra parte, en una RNA, además de los pesos y las conexiones, cada neurona tiene asociada una función matemática denominada función de transferencia. Dicha función genera la señal de salida de la neurona a partir de las señales de entrada. La entrada de la función es la suma de todas las señales de entrada por el peso asociado a la conexión de entrada de la señal. Algunos ejemplos de entradas son la función escalón de Heaviside, la lineal o mixta, la sigmoide y la función gaussiana, recordando que la función de transferencia es la relación entre la señal de salida y la entrada.
  • 15. Red neuronal artificial 13 Ventajas Las redes neuronales artificiales (RNA) tienen muchas ventajas debido a que están basadas en la estructura del sistema nervioso, principalmente el cerebro. • Aprendizaje: Las RNA tienen la habilidad de aprender mediante una etapa que se llama etapa de aprendizaje. Esta consiste en proporcionar a la RNA datos como entrada a su vez que se le indica cuál es la salida (respuesta) esperada. • Auto organización: Una RNA crea su propia representación de la información en su interior, descargando al usuario de esto. • Tolerancia a fallos: Debido a que una RNA almacena la información de forma redundante, ésta puede seguir respondiendo de manera aceptable aun si se daña parcialmente. • Flexibilidad: Una RNA puede manejar cambios no importantes en la información de entrada, como señales con ruido u otros cambios en la entrada (por ejemplo si la información de entrada es la imagen de un objeto, la respuesta correspondiente no sufre cambios si la imagen cambia un poco su brillo o el objeto cambia ligeramente). • Tiempo real: La estructura de una RNA es paralela, por lo cual si esto es implementado con computadoras o en dispositivos electrónicos especiales, se pueden obtener respuestas en tiempo real. Tipología de las RNA Modelos Existe una serie de modelos que aparecen en la mayoría de estudios académicos y la bibliografía especializada. •• Perceptrón •• Adaline •• Perceptrón multicapa •• Memorias asociativas •• Máquina de Boltzmann •• Máquina de Cauchy •• Propagación hacia atrás (backpropagation) •• Redes de Elman •• Redes de Hopfield •• Red de contrapropagación •• Redes de neuronas de base radial •• Redes de neuronas de aprendizaje competitivo • Mapas Autoorganizados (RNA) (Redes de Kohonen) •• Crecimiento dinámico de células •• Gas Neuronal Creciente • Redes ART (Adaptative Resonance Theory) Topología Una primera clasificación de las redes de neuronas artificiales que se suele hacer es en función del patrón de conexiones que presenta. Así se definen tres tipos básicos de redes: • Dos tipos de redes de propagación hacia delante o acíclicas en las que todas las señales van desde la capa de entrada hacia la salida sin existir ciclos, ni conexiones entre neuronas de la misma capa de red neuronal y su clasificación. • Monocapa. Ejemplos: perceptrón, Adaline.
  • 16. Red neuronal artificial 14 • Multicapa. Ejemplos: perceptrón multicapa. • Las redes recurrentes que presentan al menos un ciclo cerrado de activación neuronal. Ejemplos: Elman, Hopfield, máquina de Boltzmann. Aprendizaje Una segunda clasificación que se suele hacer es en función del tipo de aprendizaje de que es capaz (si necesita o no un conjunto de entrenamiento supervisado). Para cada tipo de aprendizaje encontramos varios modelos propuestos por diferentes autores: • Aprendizaje supervisado: necesitan un conjunto de datos de entrada previamente clasificado o cuya respuesta objetivo se conoce. Ejemplos de este tipo de redes son: el perceptrón simple, la red Adaline, el perceptrón multicapa, red backpropagation, y la memoria asociativa bidireccional. • Aprendizaje no supervisado o autoorganizado: no necesitan de tal conjunto previo. Ejemplos de este tipo de redes son: las memorias asociativas, las redes de Hopfield, la máquina de Boltzmann y la máquina de Cauchy, las redes de aprendizaje competitivo, las redes de Kohonen o mapas autoorganizados y las redes de resonancia adaptativa (ART). • Redes híbridas: son un enfoque mixto en el que se utiliza una función de mejora para facilitar la convergencia. Un ejemplo de este último tipo son las redes de base radial. • Aprendizaje reforzado: se sitúa a medio camino entre el supervisado y el autoorganizado. Tipo de entrada Finalmente también se pueden clasificar las RNAs según sean capaces de procesar información de distinto tipo en: • Redes analógicas: procesan datos de entrada con valores continuos y, habitualmente, acotados. Ejemplos de este tipo de redes son: Hopfield, Kohonen y las redes de aprendizaje competitivo. • Redes discretas: procesan datos de entrada de naturaleza discreta; habitualmente valores lógicos booleanos. Ejemplos de este segundo tipo de redes son: las máquinas de Boltzmann y Cauchy, y la red discreta de Hopfield. Aplicaciones Las características de las RNA las hacen bastante apropiadas para aplicaciones en las que no se dispone a priori de un modelo identificable que pueda ser programado, pero se dispone de un conjunto básico de ejemplos de entrada (previamente clasificados o no). Asimismo, son altamente robustas tanto al ruido como a la disfunción de elementos concretos y son fácilmente paralelizables. Esto incluye problemas de clasificación y reconocimiento de patrones de voz, imágenes, señales, etc. Asimismo se han utilizado para encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, hacer predicciones de tiempo atmosférico, etc. También se pueden utilizar cuando no existen modelos matemáticos precisos o algoritmos con complejidad razonable, por ejemplo la red de Kohonen ha sido aplicada con un éxito más que razonable al clásico problema del viajante (un problema para el que no se conoce solución algorítmica de complejidad polinómica). Otro tipo especial de redes neuronales artificiales se ha aplicado en conjunción con los algoritmos genéticos (AG) para crear controladores para robots. La disciplina que trata la evolución de redes neuronales mediante algoritmos genéticos se denomina Robótica Evolutiva. En este tipo de aplicación el genoma del AG lo constituyen los parámetros de la red (topología, algoritmo de aprendizaje, funciones de activación, etc.) y la adecuación de la red viene dada por la adecuación del comportamiento exhibido por el robot controlado (normalmente una simulación de dicho comportamiento).
  • 17. Red neuronal artificial 15 Ejemplos Quake II Neuralbot Un bot es un programa que simula a un jugador humano. El Neuralbot es un bot para el juego Quake II que utiliza una red neuronal artificial para decidir su comportamiento y un algoritmo genético para el aprendizaje. Es muy fácil probarlo para ver su evolución. Más información aquí [3] Clasificador No Sesgado de Proteínas Es un programa que combina diversas técnicas computacionales con el objetivo de clasificar familias de proteínas. Un posible método consiste en utilizar métricas adaptativas como por ejemplo: mapas autoorganizados y algoritmos genéticos. El problema de clasificación no sesgada basada en la expresión de las proteínas en Aminoácidos puede reducirse, conceptualmente, a lo siguiente: •• La identificación de grupos de proteínas que compartan características comunes. •• La determinación de las razones estructurales por las cuales las proteínas en cuestión se agrupan de la manera indicada. • Evitar la idea de establecer criterios de clasificación (“sesgados”) fundamentados en ideas preconcebidas para lograr su clasificación. En este sentido, hay dos asuntos que considerar: •• Cómo lograr la caracterización de las proteínas de manera no sesgada • Cómo lograr lo anterior sin apelar a medidas de agrupamiento que, a su vez, impliquen algún tipo de sesgo sobre dicho agrupamiento. Las RNA han sido aplicadas a un número en aumento de problemas en la vida real y de considerable complejidad, donde su mayor ventaja es en la solución de problemas que son bastante complejos para la tecnología actual, tratándose de problemas que no tienen una solución algorítmica o cuya solución algorítmica es demasiado compleja para ser encontrada. En general, debido a que son parecidas a las del cerebro humano, las RNA son bien nombradas ya que son buenas para resolver problemas que el humano puede resolver pero las computadoras no. Estos problemas incluyen el reconocimiento de patrones y la predicción del tiempo. De cualquier forma, el humano tiene capacidad para el reconocimiento de patrones, pero la capacidad de las redes neuronales no se ve afectada por la fatiga, condiciones de trabajo, estado emocional, y compensaciones. Se conocen cinco aplicaciones tecnológicas extendidas: 1.1. Reconocimiento de textos manuscritos 2.2. Reconocimiento del habla 3.3. Simulación de centrales de producción de energía 4.4. Detección de explosivos 5.5. Identificación de blancos de radares
  • 18. Red neuronal artificial 16 Referencias [1] Aunque en francés se utiliza el acrónimo ANN (de Artificial Neural Networks) para referirse a este campo de la computación en este artículo se utilizará su equivalente castellano RNA. [2] Redes de Neuronas Artificiales (http://www.lab.inf.uc3m.es/~a0080630/redes-de-neuronas/index.html), Redes de Neuronas Artificiales, UC3M, RAI 2012. [3] http://homepages.paradise.net.nz/nickamy/neuralbot/index.html Enlaces externos • Wikimedia Commons alberga contenido multimedia sobre Red neuronal artificialCommons. • Redes Neuronales Artificiales - Implementación con C# (catellano) (http://www.pedrov.info/redesneuronales. html) • Tutorial de la Universidad Politécnica de Madrid (http://www.gc.ssr.upm.es/inves/neural/ann2/anntutorial. html) (castellano) • Introducción a las redes de neuronas artificiales (http://sabia.tic.udc.es/mgestal/cv/RNAtutorial/index.html) (castellano) • Artículos sobre redes neuronales artificiales (http://www.neurosecurity.com/articles.php) (inglés) • Sitio Web sobre redes neuronales artificiales, ejemplos y aplicaciones (http://electronica.com.mx/neural) (castellano) • Introducción a las Redes Neuronales y sus Modelos (http://www.redes-neuronales.com.es/ tutorial-redes-neuronales/tutorial-redes.htm) (castellano) • Sistema nervioso artificial (http://www.dat.etsit.upm.es/?q=node/5955) • ¿Qué son las redes neuronales? (http://info.fisica.uson.mx/arnulfo.castellanos/archivos_html/quesonredneu. htm)(castellano)
  • 19. Fuentes y contribuyentes del artículo 17 Fuentes y contribuyentes del artículo Algoritmo  Fuente: http://es.wikipedia.org/w/index.php?oldid=72474879  Contribuyentes: -jem-, .Sergio, AS990, Abel406, AchedDamiman, Acratta, Adrianantoniors, Airunp, Aitorzubiaurre, AlbertMA, Albertochoa, Aleator, Alejandrocaro35, Alexav8, AlfonsoERomero, Alhen, AlphaWiki, Alvaro qc, Amadís, Angel GN, Angus, Antonorsi, Antur, Aquiel, Arlm1, Arthur 'Two Sheds' Jackson, Açipni-Lovrij, Baiji, Balderai, Banfield, BlackBeast, BuenaGente, CASF, Caiser, Calitb, Camilo, Camima, Carlo el calvo, Carmin, Carutsu, Chuchot, Cinabrium, Clarad, ClausxD, Cratón, Crescent Moon, Ctrl Z, Dangelin5, Danielba894, David0811, DerHexer, Diegusjaimes, Dodo, Dogor, Dorieo, Drake 81, Dromero, Ecemaml, Edgar, Edslov, Eduardosalg, Edub, Eduman, Efegé, Ejmeza, Elabra sanchez, Elisardojm, Elwikipedista, Emiduronte, Emijrp, Er Komandante, Eyetheunlord, Ezarate, FAR, Fadesga, Farisori, Fegc77, Fide07, Flakinho, Francisco Mochis, Fsd141, GermanX, Ginés90, Gizmo II, Gothmog, Guillervf91, Gusbelluwiki, Gusgus, H3r3dia, HUB, Haitike, Halfdrag, Hantartico, Henry bedon, Heynry1, Huhsunqu, Humbefa, Humberto, Ictlogist, Igna, Ignacio Icke, Imperioonepiece, Ingenioso Hidalgo, Irvinopuma, Isha, JAAC, JMPerez, Jarisleif, Jarke, Javierito92, Jecanre, Jesuja, Jhoelito14, Jjflorescueto, Jkbw, JorgeGG, Jorgeu, Jsanchezes, Jstitch, JuanRodríguez, Jugones55, Julie, Junior1209, Kn, KnightRider, Komputisto, Kotas, Kved, Laura Fiorucci, Lcpousa, Lecuona, Leonpolanco, Libertad y Saber, Llull, Lourdes Cardenal, M.heda, Macrocoliset, MadriCR, Mansoncc, ManuelGR, Manwë, Mar del Sur, MarcoAurelio, Matdrodes, McMalamute, Mel 23, Metilisopropilisergamida, Metrónomo, Miguel hdez, MiguelAngel fotografo, Mipataentutrasero, MorZilla, Moriel, Mortadelo2005, Muro de Aguas, Mutari, Netito777, Ninovolador, Nixón, Nocturnogatuno, Obueno, Orgullomoore, Paintman, Pan con queso, Papaplus, Pedrito suarez, Pedrovicenterosero, Peregring-lk, PeruProfe, Petruss, Pit, Pólux, Qix, Queninosta, Raulshc, Raystorm, Rbonvall, Relleu, Renly, Rigenea, Riviera, Rosarino, RoyFocker, RoyFokker, Rsg, Ruy Pugliesi, Ríos-Ortega, S3v3r-1, Sabbut, Sancebau, Sandovaltk10, Sauron, Savh, Schummy, Sebrev, Sergio Andres Segovia, Shining.Star, Shooke, Snakeyes, Sophie kowalsky, Speedplus, SuperBraulio13, Superzerocool, Tano4595, Technopat, Tirithel, Tomatejc, Tostadora, Triku, Ucevista, Valentin estevanez navarro, Veon, Vic Fede, Virgi, Vitamine, Waka Waka, Wikielwikingo, Wilfredor, Willtron, XalD, Xavigivax, Xpress500, Xxim, Xxxmagicmanxxx, Yeza, YoaR, Zam, ZrzlKing, Zupez zeta, conversion script, proxy1.unizar.es, 1098 ediciones anónimas Aprendizaje automático  Fuente: http://es.wikipedia.org/w/index.php?oldid=72480584  Contribuyentes: Acratta, AlfonsoERomero, Ascánder, Astaffolani, Claudiapat1, Damifb, Davidsevilla, Debora.riu, DerkeNuke, Edub, El Quinche, Enric Naval, Ensada, Farisori, Gbayon, GermanX, Grillitus, Hiperfelix, Hspitia, Ignacio Icke, Jesuja, Jmartinezot, JoaquinFerrero, Jorge.maturana, Lagoset, Luis Felipe Schenone, Machucho2007, Mar25 mercedes, OLGA JANET, Pinar, Pintaio, T4nn0, Taichi, Technopat, Trylks, 35 ediciones anónimas Red neuronal artificial  Fuente: http://es.wikipedia.org/w/index.php?oldid=73133317  Contribuyentes: Alcojol, Alhen, Alrik, Anrfernandez, Ascánder, Augt.pelle, Beepath, CayoMarcio, Changcho, Chico512, Cinabrium, Claudiapat1, Cobalttempest, DamianFinol, Danidvt, Daniel G., Danypalma1984, DerkeNuke, Deu2000, Dodo, Ecemaml, Emijrp, Enric Naval, Ensada, Farisori, Finderlog, Fortran, Gacpro, Gengiskanhg, GermanX, Góngora, HiTe, Hombresigma, Hprmedina, Humbefa, Humberto, Icvav, Ivanwalkesmc, JMPerez, Jcaraballo, Jkbw, Joma.huguet, Jorge.maturana, Jorgenumata, Jose figueredo, Joseaperez, Juan renombrado, JurgenNL, Lancaster, Lionni, Lobillo, LuchoX, Maldoror, Manwë, Matdrodes, Moriel, Mortadelo2005, NaBUru38, Nathan, Nerika, No sé qué nick poner, Oscar ., Osepu, PabloGN, Paintman, Pedromanuelbaeza, Petronas, Pinar, Pólux, RGLago, Ricardogpn, Rosarinagazo, Rsg, Saloca, Sauron, Srbanana, SuperBraulio13, Taichi, Tamorlan, Tano4595, Technopat, Trec, UA31, Varano, Xavigivax, Yearofthedragon, YoniG, Zorak, 224 ediciones anónimas
  • 20. Fuentes de imagen, Licencias y contribuyentes 18 Fuentes de imagen, Licencias y contribuyentes Archivo:LampFlowchart-es.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:LampFlowchart-es.svg  Licencia: Creative Commons Attribution-Sharealike 3.0  Contribuyentes: LampFlowchart.svg: svg by Booyabazookaoriginal png by Wapcaplet derivative work: Huhsunqu (talk) Archivo:AlgoritmoRaiz.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:AlgoritmoRaiz.png  Licencia: Creative Commons Attribution-Sharealike 2.5  Contribuyentes: Kn Archivo:EsquemáticaAlgoritmo1.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:EsquemáticaAlgoritmo1.svg  Licencia: Creative Commons Attribution-Share Alike  Contribuyentes: Kn Archivo:Wikibooks-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikibooks-logo.svg  Licencia: logo  Contribuyentes: User:Bastique, User:Ramac et al. Archivo:Wiktionary-logo-es.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wiktionary-logo-es.png  Licencia: logo  Contribuyentes: es:Usuario:Pybalo Archivo:Esquema aprendizaje.jpg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Esquema_aprendizaje.jpg  Licencia: Creative Commons Attribution-Sharealike 3.0  Contribuyentes: User:Debora.riu Archivo:RedNeuronalArtificial.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:RedNeuronalArtificial.png  Licencia: GNU Free Documentation License  Contribuyentes: Original uploader was Gengiskanhg at es.wikipedia Archivo:Computer.Science.AI.Neuron.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Computer.Science.AI.Neuron.svg  Licencia: Creative Commons Attribution-ShareAlike 3.0 Unported  Contribuyentes: User:Yearofthedragon Archivo:Commons-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Commons-logo.svg  Licencia: logo  Contribuyentes: SVG version was created by User:Grunt and cleaned up by 3247, based on the earlier PNG version, created by Reidab.
  • 21. Licencia 19 Licencia Creative Commons Attribution-Share Alike 3.0 //creativecommons.org/licenses/by-sa/3.0/