You are on page 1of 23

TECNOLÓGICO DE ESTUDIOS

SUPERIORES DE ECATEPEC

CARRERA:
INGENIERÍA INFORMÁTICA
ALUMNOS:
MELENDEZ FLORES CESAR IVAN
CRUZ LOPEZ RICARDO ALBERTO
CASTILLO CRUZ AMAURY
ASIGNATURA:
TECNOLOGÍAS INNOVADORAS
PRÁCTICA 2:
“Práctica 3_Deep Learning (DL): Caso de estudio
en la expectativa de vida”
PROFESOR:
DERLIS HERNÁNDEZ LARA
GRUPO: 15801
TURNO: Matutino
OBJETIVO:
Este objetivo y caso de estudio sobre Deep Learning en la expectativa de vida
demuestra cómo esta tecnología puede ser aplicada en el campo de la salud y
proporcionar información valiosa para la toma de decisiones y la mejora de la
calidad de vida de las personas..
MATERIALES Y EQUIPO:
HARDWARE: SOFTWARE:

Python Pc
Librerías de Python Google collaboratory
S.O
Procesador de textos

MARCO TEÓRICO:
El perceptrón.
El perceptrón es un algoritmo de aprendizaje automático desarrollado por el
psicólogo y científico de la computación Frank Rosenblatt en 1957. Se considera
uno de los primeros modelos de redes neuronales artificiales y sentó las bases
para el desarrollo de la inteligencia artificial moderna.
El perceptrón se basa en el funcionamiento de una neurona biológica y se utiliza
principalmente para problemas de clasificación binaria, donde se intenta separar
dos clases de datos distintas. Puede verse como un clasificador lineal que toma un
conjunto de entradas, realiza una combinación lineal ponderada y aplica una
función de activación para producir una salida. La función de activación
generalmente se representa como una función escalón o una función signo.
El proceso de entrenamiento del perceptrón implica ajustar los pesos y los sesgos
de manera iterativa para minimizar el error de clasificación. Inicialmente, los pesos
se inicializan aleatoriamente y, a medida que se presentan los datos de
entrenamiento, se calcula la salida del perceptrón. Si la salida es incorrecta, los
pesos se actualizan en dirección opuesta a la clase incorrecta para corregir el
error. Este proceso se repite hasta que se alcanza un estado de convergencia en
el que el perceptrón clasifica correctamente los datos de entrenamiento.
El perceptrón tiene algunas limitaciones importantes. Una de ellas es que solo
puede resolver problemas de clasificación linealmente separables. Si los datos no
se pueden separar mediante una línea recta o un hiperplano, el perceptrón no
podrá encontrar una solución correcta. Además, el perceptrón es sensible a los
datos de entrada y puede converger a diferentes soluciones dependiendo del
orden de presentación de los datos ( ALFA OMEGA, 2008).
A pesar de sus limitaciones, el perceptrón sentó las bases para el desarrollo de
redes neuronales más complejas y poderosas. Investigaciones posteriores han
demostrado que combinando múltiples perceptrones en capas y utilizando
funciones de activación no lineales, como la función sigmoide o la función de
activación ReLU, se pueden resolver problemas de clasificación no lineales. Estas
redes neuronales más profundas y complejas se conocen como redes neuronales
multicapa o perceptrones multicapa.

Redes Neuronales Artificiales (RNA).


El concepto de redes neuronales artificiales se remonta a la década de 1940,
cuando Warren McCulloch y Walter Pitts propusieron un modelo matemático de
una neurona artificial. Sin embargo, fue en la década de 1950 cuando Frank
Rosenblatt desarrolló el perceptrón, una de las primeras formas de RNA, capaz de
realizar tareas de clasificación lineal.
A lo largo de las décadas siguientes, los investigadores continuaron desarrollando
diferentes arquitecturas y algoritmos de aprendizaje para las RNA, como las redes
de retroalimentación (feedback) y las redes neuronales recurrentes (RNN). En la
década de 1980, se produjo un gran avance con el descubrimiento del algoritmo
de retropropagación del error, que permitió entrenar redes más profundas y
resolver problemas más complejos.
Arquitectura y funcionamiento: Las RNA están compuestas por capas de
neuronas artificiales interconectadas. La arquitectura básica consta de una capa
de entrada, una o varias capas ocultas y una capa de salida. Cada neurona en
una capa se conecta con las neuronas de la capa siguiente mediante conexiones
ponderadas. Estas conexiones y los valores asociados se denominan "pesos".
Cada neurona realiza una operación matemática en la entrada recibida, aplica una
función de activación y pasa el resultado a las neuronas de la capa siguiente.
Durante el proceso de entrenamiento, los pesos de las conexiones se ajustan
iterativamente mediante algoritmos de aprendizaje, como la retropropagación del
error, con el objetivo de minimizar la diferencia entre la salida predicha y la salida
esperada (Bejerot, 2018-2021).
Aplicaciones: Las RNA tienen una amplia gama de aplicaciones en diversos
campos, entre ellos:
 Reconocimiento de patrones y clasificación de imágenes.
 Procesamiento de lenguaje natural y traducción automática.
 Reconocimiento de voz y sistemas de diálogo.
 Pronóstico y análisis financiero.
 Control y optimización de sistemas en tiempo real.
 Medicina, incluyendo diagnóstico médico y análisis de imágenes médicas.
Ventajas y desafíos: Las RNA presentan varias ventajas, como la capacidad de
aprender y adaptarse a partir de ejemplos, la capacidad de procesar información
compleja y no lineal, y la habilidad para trabajar con datos incompletos o ruidosos.
Sin embargo, también enfrentan algunos desafíos, como la necesidad de grandes
conjuntos de datos de entrenamiento, la complejidad del ajuste de los
hiperparámetros y la interpretabilidad de los resultados.

Algoritmo de Gradiente Descendente.


El algoritmo de Gradiente Descendente es una técnica de optimización
ampliamente utilizada en el campo del aprendizaje automático y la inteligencia
artificial. Se utiliza para encontrar el mínimo de una función de pérdida o costo con
respecto a un conjunto de parámetros ajustables. En esencia, el algoritmo de
Gradiente Descendente se basa en la idea de iterativamente ajustar los
parámetros en la dirección opuesta del gradiente de la función de costo, de
manera que la función de costo se minimice gradualmente.
El proceso de optimización del algoritmo de Gradiente Descendente comienza con
la inicialización de los parámetros del modelo. Luego, se calcula el gradiente de la
función de costo con respecto a los parámetros actuales. El gradiente indica la
dirección y magnitud del cambio más pronunciado en la función de costo. A
continuación, los parámetros se actualizan multiplicando el gradiente por un factor
de aprendizaje (también conocido como tasa de aprendizaje) y restando el
resultado de los parámetros actuales. Este proceso se repite iterativamente hasta
que se alcance un criterio de parada, como un número máximo de iteraciones o
una convergencia satisfactoria.
El algoritmo de Gradiente Descendente puede ser utilizado tanto para problemas
de regresión como de clasificación. En el caso de la regresión, la función de costo
suele ser el error cuadrático medio, que mide la diferencia entre las predicciones
del modelo y los valores reales. En la clasificación, se utilizan diferentes funciones
de costo, como la entropía cruzada, que mide la discrepancia entre las
probabilidades predichas por el modelo y las clases reales (MARTÍN MARTÍN,
2016).
Existen varias variantes del algoritmo de Gradiente Descendente que han sido
propuestas para mejorar su rendimiento y eficiencia. Algunas de estas variantes
incluyen:
1. Gradiente Descendente Estocástico (SGD): En lugar de calcular el
gradiente utilizando todo el conjunto de datos de entrenamiento, el SGD
calcula el gradiente utilizando una sola muestra o un pequeño lote de
muestras al mismo tiempo. Esto puede acelerar el proceso de
entrenamiento y permitir el ajuste en tiempo real.
2. Mini-batch Gradiente Descendente: Es una variante intermedia entre el
Gradiente Descendente Estocástico y el Gradiente Descendente en lote. En
lugar de utilizar una sola muestra o todo el conjunto de datos, se utilizan
lotes pequeños de muestras para calcular el gradiente y actualizar los
parámetros.
3. Gradiente Descendente con Momento: Esta variante utiliza un término de
momento que acumula una fracción de los gradientes anteriores para
determinar la dirección y magnitud de la actualización de los parámetros.
Esto ayuda a acelerar el proceso de entrenamiento y a evitar que el
algoritmo se atasque en mínimos locales.
4. Gradiente Descendente con Adagrad: Adagrad adapta automáticamente la
tasa de aprendizaje para cada parámetro según su frecuencia de
actualización. Esto permite que los parámetros con gradientes más
frecuentes tengan una tasa de aprendizaje más baja y viceversa.
5. Adam (Adaptive Moment Estimation): Es un algoritmo de optimización que
combina las ideas de Gradiente Descendente con Momento y Adagrad. Util

Modelo matemático del algoritmo de gradiente descendente y su explicación


intuitiva.
El algoritmo de gradiente descendente es una técnica de optimización utilizada en
aprendizaje automático y optimización matemática. Es ampliamente utilizado para
encontrar el mínimo de una función diferenciable mediante la iteración en la
dirección opuesta al gradiente de la función en cada punto. A continuación,
realizaré una investigación sobre el modelo matemático del algoritmo de gradiente
descendente, así como una explicación intuitiva (Ujaldón Martínez, Manuel ;,
2016).
Modelo matemático del algoritmo de gradiente descendente:
Supongamos que tenemos una función de costo o pérdida, denotada como J(θ),
donde θ es el vector de parámetros que queremos encontrar para minimizar la
función. El objetivo del algoritmo de gradiente descendente es encontrar los
valores de θ que minimizan J(θ).
El algoritmo de gradiente descendente se basa en la idea de que, si se mueve en
pequeños pasos proporcionales al gradiente negativo de la función de costo, se
puede alcanzar un mínimo local o global de la función. La fórmula general para
actualizar los parámetros en cada iteración del algoritmo de gradiente
descendente se puede expresar de la siguiente manera:
θ_new = θ_old - α * ∇J(θ_old)
Donde:
 θ_old representa el vector de parámetros en la iteración anterior.
 α (alfa) se conoce como la tasa de aprendizaje o tamaño del paso, y
controla el tamaño de los pasos que se dan en cada iteración.
 ∇J(θ_old) denota el gradiente de la función de costo evaluado en θ_old. El
gradiente es un vector que apunta en la dirección de mayor crecimiento de
la función de costo.
En cada iteración, el algoritmo de gradiente descendente actualiza los parámetros
moviéndose en la dirección opuesta al gradiente y ajustando el tamaño del paso
según la tasa de aprendizaje.
Explicación intuitiva:
Imaginemos una montaña con diferentes alturas en cada punto. Queremos llegar
al punto más bajo de la montaña, que representa el mínimo de la función de costo.
El algoritmo de gradiente descendente se puede comparar con una persona ciega
que está tratando de descender la montaña sin tener un mapa, solo puede percibir
la inclinación del terreno en su posición actual.
La persona ciega comienza en un punto aleatorio de la montaña y se mueve en
pequeños pasos proporcionales a la pendiente negativa en ese punto. La
pendiente negativa indica la dirección en la que el terreno desciende más
pronunciadamente. Al moverse en esta dirección, la persona eventualmente
llegará a un punto más bajo en la montaña.
El tamaño del paso que la persona da en cada movimiento se controla mediante la
tasa de aprendizaje. Una tasa de aprendizaje alta significa que la persona da
pasos más grandes, lo que puede hacer que se salte el mínimo. Por otro lado, una
tasa de aprendizaje baja implica pasos más pequeños, lo que hace que el
descenso sea más lento, pero también más preciso.

El perceptrón como clasificador.


El perceptrón es un modelo matemático inspirado en el funcionamiento del cerebro
humano. Está compuesto por una o más neuronas artificiales llamadas unidades
de perceptrón. Cada unidad de perceptrón toma un conjunto de entradas, las
pondera y aplica una función de activación para generar una salida.
El proceso de entrenamiento del perceptrón implica ajustar los pesos y el umbral
de la unidad de perceptrón para que pueda clasificar correctamente los ejemplos
de entrenamiento. Los ejemplos de entrenamiento son pares de vectores de
características y etiquetas de clase asociadas.
El algoritmo de entrenamiento del perceptrón se basa en el concepto de
"aprendizaje basado en el error". Inicialmente, los pesos y el umbral se inicializan
de manera aleatoria. Luego, se presenta cada ejemplo de entrenamiento al
perceptrón y se calcula la salida. Si la salida coincide con la etiqueta de clase
esperada, no se realizan ajustes. Sin embargo, si la salida difiere de la etiqueta
esperada, se ajustan los pesos y el umbral para reducir el error (Ujaldón Martínez,
Manuel ;, 2016).
El ajuste de los pesos y el umbral se realiza utilizando reglas de actualización,
como la regla del perceptrón original propuesta por Rosenblatt. Esta regla modifica
los pesos y el umbral de la unidad de perceptrón proporcionalmente a la diferencia
entre la salida esperada y la salida calculada. El proceso de entrenamiento se
repite varias veces hasta que el perceptrón alcance un estado en el que pueda
clasificar correctamente la mayoría de los ejemplos de entrenamiento.
Es importante destacar que el perceptrón es un clasificador lineal, lo que significa
que solo puede separar conjuntos de datos linealmente separables. Si los datos
no son linealmente separables, el perceptrón no podrá converger hacia una
solución que clasifique correctamente todos los ejemplos de entrenamiento.
A pesar de sus limitaciones, el perceptrón sentó las bases para el desarrollo de
modelos de aprendizaje profundo más complejos, como las redes neuronales
multicapa. Además, el perceptrón ha sido utilizado con éxito en problemas de
clasificación linealmente separables, como reconocimiento de caracteres y
clasificación de imágenes.
En resumen, el perceptrón es un algoritmo de aprendizaje automático supervisado
utilizado para la clasificación binaria. A través de un proceso de entrenamiento
iterativo, el perceptrón ajusta los pesos y el umbral de una unidad de perceptrón
para clasificar correctamente los ejemplos de entrenamiento. Aunque es un
clasificador lineal y tiene limitaciones en la separabilidad de los datos, el
perceptrón ha sido fundamental para el desarrollo de redes neuronales más
complejas y ha demostrado ser eficaz en problemas específicos de clasificación.

Modelo matemático de una neurona artificial y funciones de activación.


Las neuronas artificiales son unidades fundamentales en las redes neuronales
artificiales (ANN, por sus siglas en inglés), que son modelos computacionales
inspirados en el funcionamiento del cerebro humano. Estas neuronas artificiales se
utilizan para procesar y transmitir la información en las redes neuronales, y están
basadas en las características de las neuronas biológicas reales (IBM, 2017).
Modelo matemático de una neurona artificial: Una neurona artificial se representa
matemáticamente como una función que toma entradas ponderadas, las suma y
luego aplica una función de activación para producir una salida. El modelo
matemático básico de una neurona artificial se puede describir de la siguiente
manera:
 Entradas ponderadas: Cada entrada a la neurona artificial está asociada
con un peso sináptico que indica su importancia relativa. Estos pesos
ponderan las entradas para determinar su contribución a la salida de la
neurona.
 Suma ponderada: Las entradas ponderadas se suman para calcular la
entrada total a la neurona. La suma ponderada se puede expresar
matemáticamente como la combinación lineal de las entradas y sus pesos:
suma_ponderada = Σ (entrada_i * peso_i)
Donde entrada_i es el valor de la i-ésima entrada y peso_i es el peso
asociado.
 Función de activación: Después de calcular la suma ponderada, se aplica
una función de activación a este valor para producir la salida de la neurona.
La función de activación introduce la no linealidad en el modelo,
permitiendo que las redes neuronales aprendan y representen relaciones
complejas en los datos.
Funciones de activación:
Existen diferentes tipos de funciones de activación utilizadas en las redes
neuronales. Algunas de las funciones de activación más comunes son:
 Función escalón (Step function): La función escalón produce una salida
binaria basada en un umbral. Si la suma ponderada es mayor o igual al
umbral, la salida es 1; de lo contrario, es 0. Es una función discontinua y se
utiliza principalmente en redes neuronales simples.
 Función sigmoide (Sigmoid function): La función sigmoide mapea la entrada
a un rango entre 0 y 1. Es una función suave y diferenciable, lo que la hace
útil en el entrenamiento de redes neuronales mediante algoritmos de
retropropagación.
 Función ReLU (Rectified Linear Unit): La función ReLU es una función no
lineal que produce una salida igual a cero si la suma ponderada es menor
que cero, y produce la entrada directamente si es mayor o igual a cero. Es
ampliamente utilizada en redes neuronales profundas debido a su eficiencia
computacional y capacidad para mitigar el problema del desvanecimiento
del gradiente.
 Función tanh (Tangente hiperbólica): La función tanh es similar a la función
sigmoide, pero mapea la entrada a un rango entre -1 y 1. Al igual que la
función sigmoide, es suave y diferenciable.
Estas son solo algunas de las funciones de activación más comunes, pero
existen otras, como la función softmax utilizada para la clasificación
multiclase.
Desarrollo.
Gradiente Descendente
Este código implementa un perceptrón que se entrena el algoritmo de gradiente
descendente busca encontrar los valores de los parámetros que minimizan la
función de costo, lo que permite que el modelo se ajuste a los datos de
entrenamiento y realice predicciones más precisas. A medida que se actualizan
los parámetros en cada iteración, el modelo se acerca a un óptimo local en el
espacio de los parámetros.
Esto permite que el modelo pueda generalizar y realizar predicciones precisas en
datos no vistos.
El código se encarga de seleccionar la columna 'BMI' y almacenarla como una
matriz en la variable 'x', mientras que la columna 'LifeExpectancy' se almacena
como un vector en la variable 'y'. Estas estructuras de datos se utilizan
comúnmente como entrada y valores deseados en algoritmos de aprendizaje
automático y modelado estadístico.

El pre-procesamiento
Estas tareas de pre-procesamiento son fundamentales para garantizar que los
datos estén limpios, preparados y en el formato adecuado antes de entrenar un
modelo de Machine Learning. Cada una de estas tareas tiene como objetivo
mejorar la capacidad de los algoritmos para converger hacia una solución óptima y
lograr un rendimiento óptimo en el entrenamiento y la posterior aplicación del
modelo.

El bias en el perceptrón proporciona un ajuste adicional para controlar el punto de


partida del perceptrón y determinar su sensibilidad hacia la activación. El bias se
suma ponderadamente a las entradas y afecta la salida del perceptrón después de
aplicar la función de activación. Al ajustar el valor del bias, se puede modificar el
umbral de activación del perceptrón y afectar su capacidad para discriminar entre
diferentes clases o patrones en los datos.
Función sigmoide
La función sigmoide tiene algunas ventajas, también tiene limitaciones. Puede
sufrir del problema de desvanecimiento de gradientes, especialmente en redes
neuronales profundas, y puede producir salidas cercanas a 0 o 1, lo que puede
dificultar el aprendizaje y la estabilidad del modelo. Por esta razón, en algunas
situaciones, se prefieren otras funciones de activación, como ReLU (Rectified
Linear Unit), que son más populares en arquitecturas modernas de redes
neuronales.
La tasa de aprendizaje determina qué tan rápido se ajustan los pesos del
perceptrón durante el entrenamiento. Un valor alto de tasa de aprendizaje puede
hacer que el modelo aprenda rápidamente, pero corre el riesgo de saltar sobre el
óptimo global. Un valor bajo de tasa de aprendizaje puede hacer que el modelo
aprenda más lentamente, pero tiene más probabilidades de converger a un óptimo
global.

El número de iteraciones especifica cuántas veces se pasan los datos completos a


través del perceptrón durante el entrenamiento. Cada iteración consta de una
pasada hacia adelante (forward pass) y una pasada hacia atrás (backward pass)
para ajustar los pesos. Aumentar el número de iteraciones permite que el modelo
se ajuste más a los datos, pero también aumenta el tiempo de entrenamiento.
Grafica de Error

La gráfica resultante muestra cómo el error del modelo varía a lo largo del tiempo,
es decir, cómo disminuye en cada época de entrenamiento. Al observar la gráfica,
se puede analizar la tendencia del error y determinar si el modelo está
convergiendo hacia una solución óptima. Si el error disminuye de manera
constante y se estabiliza a medida que avanzan las épocas, es un indicio de que
el modelo está aprendiendo y mejorando su capacidad de hacer predicciones
precisas. Sin embargo, si el error se mantiene alto o fluctúa sin una tendencia
clara, puede ser necesario ajustar los hiperparámetros o explorar otros enfoques
para mejorar el rendimiento del modelo.

Análisis
El código toma un ejemplo de entrada específico, realiza la alimentación hacia
adelante (forward pass) a través del perceptrón entrenado, aplica la función de
activación sigmoide y produce la esperanza de vida predicha por el modelo.
Luego, compara esta predicción con el valor deseado y muestra ambos valores en
la consola. Esto permite evaluar el rendimiento del modelo en la predicción de la
esperanza de vida para el ejemplo seleccionado.
bmi_ejemplo = x_input[77]: Se selecciona el ejemplo de entrada número 77 del
conjunto de datos de entrenamiento. Este ejemplo corresponde a un registro
específico que se utilizará para realizar la predicción de la expectativa de vida.
y_deseado = y[77]*y_max: Se obtiene el valor deseado de la expectativa de vida
correspondiente al ejemplo de entrada número 77. El valor de y[77] se multiplica
por y_max para obtener el valor real de la expectativa de vida, ya que previamente
se había dividido por y_max durante el preprocesamiento de los datos.
h = np.dot(w, bmi_ejemplo): Se realiza una combinación lineal entre los pesos
del perceptrón (w) y el ejemplo de entrada (bmi_ejemplo), utilizando el producto
punto (np.dot). Esto calcula el campo local (weighted sum) del perceptrón antes de
aplicar la función de activación.
y_real = sigmoide(h): Se aplica la función de activación sigmoide al campo local
(h) obtenido en el paso anterior. Esto produce la salida real del perceptrón, que
representa la expectativa de vida predicha por el modelo para el ejemplo de
entrada dado.
expectativa_de_vida = y_real*y_max: Se multiplica la salida real del perceptrón
(y_real) por y_max para obtener la expectativa de vida en su escala original, sin la
normalización aplicada durante el preprocesamiento.
print('El valor deseado es: ', y_deseado): Se muestra en la consola el valor
deseado de la expectativa de vida correspondiente al ejemplo de entrada.
print('El valor que predijo el perceptrón es: ', expectativa_de_vida): Se
muestra en la consola el valor de la expectativa de vida predicha por el perceptrón
para el ejemplo de entrada.
Para analizar

En esta pagina se hace el cálculo correspondiente donde el resultado será previa


mente cargado a nuestro perceptrón.
Pagina web : https://www.nhlbi.nih.gov/health/educational/lose_wt/BMI/bmicalc.htm
El código traza una gráfica de dispersión que muestra la relación entre el índice de
masa corporal y la expectativa de vida predicha por el modelo de perceptrón, así
como la relación entre el índice de masa corporal y la expectativa de vida real del
conjunto de datos. Esto permite visualizar cómo se comparan las predicciones del
modelo con los valores reales y proporciona una idea de la calidad de las
predicciones realizadas por el modelo.
Link del video de la Practica.
Conclusión.

Al realizar la practica 3 y al implementar un perceptrón El Deep Learning es una


técnica poderosa que ha demostrado su utilidad en diversos campos, incluido el
análisis de datos de salud y la predicción de la expectativa de vida. Mediante el
uso de modelos de redes neuronales profundas, como el perceptrón multicapa, es
posible aprender patrones complejos y no lineales en los datos de entrada para
realizar predicciones precisas.
En el caso específico de la expectativa de vida, el DL puede ayudar a identificar y
capturar relaciones sutiles entre variables de entrada, como el índice de masa
corporal (BMI), y la variable objetivo, en este caso, la expectativa de vida. Al
entrenar un modelo de DL con datos históricos, el modelo puede aprender a
generalizar y hacer predicciones sobre la expectativa de vida de nuevos individuos
basándose en características como el BMI.
Es importante destacar que el éxito de la aplicación del DL en la predicción de la
expectativa de vida depende en gran medida de la disponibilidad y calidad de los
datos utilizados para el entrenamiento del modelo. Cuantos más datos relevantes
y representativos se tengan, mejor será la capacidad del modelo para hacer
predicciones precisas.
Referencias.

ALFA OMEGA. (9 de NOVIEMBRE de 2008). Obtenido de


BLOGS.INFORMATICOS:
http://josegregorio1104.blogspot.com/2012/03/que-son-los-
puertosinterfaces-y.html
Corona, M. A. (s.f.). La globalizacion Mundial. En M. A. Corona, La globalizacion
Mundial (pág. 18). Me Graw Hill .
García, L. S. (5 de enero de 2021). Obtenido de Mejores prácticas para el
establecimiento y aseguramiento de la calidad de software:
http://www.w3.org/TR/2010/PR-mwabp-20101021/
GOMEZ, D. L. (2017). Adicción a los videojuegos. 28009 Madrid, España: MENTE
A MENTE, S.L.P.
IBM. (8 de febrero de 2017). Obtenido de serial communication:
https://www.ibm.com/docs/es/aix/7.2?topic=communications-serial-
communication
Ligaturesof. (7 de Mayo de 2016). Obtenido de LigatureSoft - Recursos
informáticos y de hardware:
https://web.archive.org/web/20090416110459/http://www.ligaturesoft.com/
data_communications/data-transmission.html
MARTÍN MARTÍN, P. J. (5 de FEBRERO de 2016). Tecnologías e Interfaces de
computadoras. Obtenido de http://books.google.com.mx/books?
id=g7SoQDLyXrYC&pg=PA1055&dq=puertoS+ESTANDAR+LIBROS&hl=es
&sa=X&ei=IfgQVPuREI6ayASJuYLYDQ&ved=0CBwQ6AEwAA#v=onepage
&q=puertoS%20ESTANDAR%20LIBROS&f=false
Martínez, M. U. (7 de MARZO de 2009). Obtenido de PCI Express 3.0 Bandwidth:
8.0 Gigatransfers/s: https://www.extremetech.com/extreme/75996-pci-
express-30-bandwidth-80-gigatransferss
Massimo , B. (3 de febrero de 2014). The Open Source Electronics Prototyping
Platform. Obtenido de https://books.google.com.ar/books?
id=Xd3SBQAAQBAJ&printsejjsjwc=frontcover&hl=es&source=gbs_atb#v=o
nepage&q&f=false
McCarthy, A. D. (2019). Cuando los videojuegos causan problemas de salud: lo
que los padres pueden hacer para prevenirlos. American Academy of
Pediatrics: MD, FAAP.
Narvaez, L. J. (4 de febbrero de 2011). Obtenido de Implantación de buenas
prácticas a un proceso de Desarrollo de Software: http://jci.uniautonoma/
Peter I. Cowling, A. D. (2018). Informe sobre las consecuencias de la ausencia de
sueño. Mexico City: Exploring the Relationship between video game.
Prieto, C. R. (7 de febrero de 2021). Obtenido de Mejores prácticas para el
establecimiento y aseguramiento de la calidad de software :
https://www.w3.org/TR/mwabp/
Ujaldón Martínez, Manuel ;. (6 de MARZO de 2016). Arquitectura del PC. Obtenido
de http://books.google.com.mx/books?
id=piWqr_ZhqpwC&pg=PA179&dq=puertoS+ESTANDAR+LIBROS&hl=es&
sa=X&ei=IfgQVPuREI6ayASJuYLYDQ&ved=0CCIQ6AEwAQ#v=onepage&
q=puertoS%20ESTANDAR%20LIBROS&f=false

You might also like