0% encontró este documento útil (0 votos)
180 vistas

Data Analysis From Scratch With Python - Beginner Guide Using Python, Pandas, NumPy, Scikit-Learn, IPython, TensorFlow and Matplotlib (PDFDrive)

El libro es una guía practica para aprender a usar las librerías de Python usadas para ciencias de datos.

Cargado por

Angel Zapata
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
180 vistas

Data Analysis From Scratch With Python - Beginner Guide Using Python, Pandas, NumPy, Scikit-Learn, IPython, TensorFlow and Matplotlib (PDFDrive)

El libro es una guía practica para aprender a usar las librerías de Python usadas para ciencias de datos.

Cargado por

Angel Zapata
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 104

Machine Translated by Google

Machine Translated by Google

ANÁLISIS DE DATOS DESDE CERO CON PYTHON


Guía paso por paso

Peters Morgan
Machine Translated by Google

Cómo contactarnos

Si encuentra algún daño, problemas de edición o cualquier otro problema en este libro, notifique
inmediatamente a nuestro servicio de atención al cliente por correo
electrónico a: [email protected]

Nuestro objetivo es proporcionar libros de alta calidad para su aprendizaje


técnico en materias de informática.
Muchas gracias por comprar este libro.
Machine Translated by Google

Prefacio
“La humanidad está al borde de la esclavitud digital a manos de la IA y las tecnologías biométricas. Una forma de
prevenir eso es desarrollar módulos incorporados de profundos sentimientos de amor y compasión en los algoritmos
de aprendizaje”.

― Amit Ray, Superinteligencia Artificial Compasiva AI 5.0 ­ AI con Blockchain, BMI, Drone, IOT y Tecnologías
Biométricas

Si está buscando una guía completa del lenguaje Python y su biblioteca que lo ayude a convertirse
en un analista de datos efectivo, este libro es para usted.

Este libro contiene la programación de Python que necesita para el análisis de datos.

¿Por qué los libros de ciencias de la IA son diferentes?

Los libros de ciencias de la IA exploran todos los aspectos de la inteligencia artificial y la ciencia de
datos utilizando lenguajes de programación de ciencias de la computación como Python y R.
Nuestros libros pueden ser los mejores para principiantes; es una guía paso a paso para cualquier
persona que quiera empezar a aprender Inteligencia Artificial y Ciencia de Datos desde cero. Te
ayudará a preparar una base sólida y aprender cualquier otro curso de alto nivel será fácil para ti.

Guía paso a paso e ilustraciones visuales y ejemplos

El libro brinda instrucciones completas para manipular, procesar, limpiar, modelar y procesar
conjuntos de datos en Python. Esta es una guía práctica con estudios de casos prácticos de
problemas de análisis de datos de manera efectiva. Aprenderá pandas, NumPy, IPython y Júpiter en
el proceso.

¿Quién debería leer esto?

Este libro es una introducción práctica a las herramientas de ciencia de datos en Python. Es ideal
para analistas principiantes en Python y para programadores de Python nuevos en ciencia de datos
e informática. En lugar de fórmulas matemáticas difíciles, este libro contiene varios gráficos e
imágenes.
Machine Translated by Google

© Copyright 2016 por AI Sciences LLC Todos los


derechos reservados.
Primera impresión, 2016
Machine Translated by Google

Editado por Davies Company


Libro electrónico convertido y portada por Pixels Studio Publicado por AI Sciences LLC

ISBN­13: 978­1721942817
ISBN­10: 1721942815

El contenido de este libro no puede ser reproducido, duplicado o transmitido sin el permiso directo por escrito del autor.

Bajo ninguna circunstancia se tendrá ninguna responsabilidad legal o culpa en contra del editor por cualquier reparación,
daño o pérdida monetaria debido a la información aquí contenida, ya sea directa o indirectamente.
Machine Translated by Google

Aviso Legal:

No puede modificar, distribuir, vender, usar, citar o parafrasear ninguna parte o el contenido de este libro sin el
consentimiento del autor.

Aviso de exención de responsabilidad:

Tenga en cuenta que la información contenida en este documento es solo para fines educativos y de entretenimiento.
No se expresa ni implica ninguna garantía de ningún tipo. Los lectores reconocen que el autor no se involucra en la
prestación de asesoramiento legal, financiero, médico o profesional. Consulte a un profesional con licencia antes de
intentar cualquiera de las técnicas descritas en este libro.

Al leer este documento, el lector acepta que bajo ninguna circunstancia el autor es responsable de ninguna pérdida,
directa o indirecta, en la que se incurra como resultado del uso de la información contenida en este documento,
incluidos, entre otros, errores, omisiones , o inexactitudes.

De AI Sciences Publisher
Machine Translated by Google
Machine Translated by Google

A mi esposa Melania

y mis hijos Tanner y Daniel


sin quien este libro hubiera

sido completado
Machine Translated by Google

Biografía del autor


Peters Morgan es un usuario y desarrollador de Python desde hace mucho tiempo. Es uno de los
principales desarrolladores de algunas bibliotecas de ciencia de datos en Python. Actualmente, Peter
trabaja como científico de aprendizaje automático en Google.
Machine Translated by Google

Tabla de contenido
Prefacio
¿Por qué los libros de ciencias de la IA son diferentes?

Guía paso a paso e ilustraciones visuales y ejemplos

¿Quién debería leer esto?

De AI Sciences Publisher
Biografía del autor
Tabla de contenido
Introducción

2. Por qué elegir Python para ciencia de datos y aprendizaje automático

pitón contra r

Uso generalizado de Python en el análisis de datos

Claridad

3. Requisitos previos y recordatorios

Python y conocimientos de programación

Instalación y configuración

¿Es necesaria la experiencia matemática?

4. Revisión rápida de Python

Consejos para un aprendizaje más rápido

5. Resumen y objetivos

Análisis de datos frente a ciencia de datos frente a aprendizaje automático

posibilidades

Limitaciones del análisis de datos y el aprendizaje automático

Precisión y rendimiento

6. Un ejemplo rápido

Conjunto de datos de iris

Potencial e implicaciones

7. Obtención y procesamiento de datos

Archivos CSV

Selección de características

Fuentes de datos en línea

Fuente de datos interna


Machine Translated by Google

8. Visualización de datos

Objetivo de visualización

Importación y uso de Matplotlib

9. Aprendizaje supervisado y no supervisado

¿Qué es el aprendizaje supervisado?

¿Qué es el aprendizaje no supervisado?

Cómo abordar un problema

10. Regresión

Regresión lineal simple

Regresión lineal múltiple

Árbol de decisión

Bosque aleatorio

11. Clasificación

Regresión logística

K­vecinos más cercanos

Clasificación del árbol de decisión

Clasificación aleatoria de bosques

12. Objetivos de la

agrupación en clústeres y usos de la agrupación en clústeres

Agrupación de K­Means

Detección de anomalías

13. Explicación del aprendizaje de la

regla de asociación

A priori

14. Aprendizaje por refuerzo

¿Qué es el aprendizaje por refuerzo?

Comparación con el aprendizaje supervisado y no supervisado

Aplicación del aprendizaje por refuerzo

15. Redes neuronales artificiales

Una idea de cómo funciona el cerebro

Potencial y Restricciones

Aquí hay un ejemplo

16. Procesamiento del lenguaje natural

Analizar palabras y sentimientos

Uso de NLTK
Machine Translated by Google

Gracias !
Fuentes y referencias
Software, bibliotecas y lenguaje de programación

conjuntos de datos

Libros en línea, tutoriales y otras referencias

Gracias !
Machine Translated by Google

Introducción

¿Por qué seguir leyendo? Primero, aprenderá a usar Python en el análisis de datos (que es un
poco mejor y un poco más avanzado que usar Microsoft Excel). En segundo lugar, también
aprenderá a adquirir la mentalidad de un analista de datos real (pensamiento computacional).

Más importante aún, aprenderá cómo Python y el aprendizaje automático se aplican a los
problemas del mundo real (negocios, ciencia, investigación de mercado, tecnología, fabricación,
comercio minorista, finanzas). Proporcionaremos varios ejemplos sobre cómo los métodos
modernos de análisis de datos encajan con el enfoque y la resolución de problemas modernos.

Esto es importante porque la afluencia masiva de datos nos brinda más oportunidades para
obtener información y tener un impacto en casi cualquier campo. Este fenómeno reciente también
presenta nuevos desafíos que requieren nuevas tecnologías y enfoques. Además, esto también
requiere nuevas habilidades y mentalidades para navegar con éxito a través de los desafíos y
aprovechar con éxito el máximo potencial de las oportunidades que se nos presentan.

Por ahora, olvídate de conseguir el “trabajo más sexy del siglo XXI” (científico de datos, ingeniero
de aprendizaje automático, etc.). Olvídese de los temores de que la inteligencia artificial erradique
puestos de trabajo y toda la raza humana. Se trata de aprender (en el verdadero sentido de la
palabra) y resolver problemas del mundo real.

Estamos aquí para crear soluciones y aprovechar las nuevas tecnologías para tomar mejores
decisiones y, con suerte, hacernos la vida más fácil. Y esto comienza con la construcción de una
base sólida para que podamos enfrentar mejor los desafíos y dominar conceptos avanzados.
Machine Translated by Google

2. Por qué elegir Python para ciencia de datos y aprendizaje automático

Se dice que Python es un lenguaje de programación simple, claro e intuitivo. Es por eso
que muchos ingenieros y científicos eligen Python para muchas aplicaciones científicas y
numéricas. Tal vez prefieran entrar rápidamente en la tarea principal (por ejemplo,
averiguar el efecto o la correlación de una variable con un resultado) en lugar de pasar
cientos de horas aprendiendo los matices de un lenguaje de programación "complejo".

Esto permite a los científicos, ingenieros, investigadores y analistas entrar en el proyecto


más rápidamente, obteniendo así información valiosa en la menor cantidad de tiempo y
recursos. Sin embargo, no significa que Python sea perfecto y el lenguaje de programación
ideal sobre dónde realizar análisis de datos y aprendizaje automático.
Otros lenguajes como R pueden tener ventajas y características que Python no tiene.
Pero aún así, Python es un buen punto de partida y puede obtener una mejor comprensión
del análisis de datos si lo usa para su estudio y proyectos futuros.

pitón contra r

Es posible que ya haya encontrado esto en Stack Overflow, Reddit, Quora y otros foros y
sitios web. Es posible que también hayas buscado otros lenguajes de programación
porque, después de todo, aprender Python o R (o cualquier otro lenguaje de programación)
requiere varias semanas y meses. Es una gran inversión de tiempo y no querrás cometer
un error.

Para quitar esto del camino, simplemente comience con Python porque las habilidades y
conceptos generales son fácilmente transferibles a otros idiomas. Bueno, en algunos
casos puede que tengas que adoptar una forma de pensar completamente nueva. Pero,
en general, saber cómo usar Python en el análisis de datos te ayudará a resolver muchos
problemas interesantes.

Muchos dicen que R está diseñado específicamente para estadísticos (especialmente


cuando se trata de capacidades de visualización de datos fáciles y sólidas). También es
relativamente fácil de aprender, especialmente si lo utilizará principalmente para el
análisis de datos. Por otro lado, Python es algo flexible porque va más allá del análisis de
datos. Muchos científicos de datos y profesionales del aprendizaje automático pueden
haber elegido Python porque el código que escribieron se puede integrar en una aplicación
web dinámica y en vivo.

Aunque todo es discutible, Python sigue siendo una opción popular, especialmente entre
Machine Translated by Google

principiantes o cualquier persona que quiera mojarse los pies rápidamente con el análisis de datos y
el aprendizaje automático. Es relativamente fácil de aprender y puede sumergirse en la programación
a tiempo completo más adelante si decide que esto le conviene más.

Uso generalizado de Python en el análisis de datos

Ahora hay muchos paquetes y herramientas que facilitan mucho el uso de Python en el análisis de
datos y el aprendizaje automático. TensorFlow (de Google), Theano, scikit­learn, numpy y pandas
son solo algunas de las cosas que hacen que la ciencia de datos sea más rápida y sencilla.

Además, los graduados universitarios pueden ingresar rápidamente a la ciencia de datos porque
muchas universidades ahora enseñan ciencias de la computación introductorias utilizando Python
como el lenguaje de programación principal. El cambio de la programación de computadoras y el
desarrollo de software puede ocurrir rápidamente porque muchas personas ya tienen las bases
adecuadas para comenzar a aprender y aplicar la programación a los desafíos de datos del mundo
real.

Otra razón para el uso generalizado de Python es que existen innumerables recursos que le dirán
cómo hacer casi cualquier cosa. Si tienes alguna duda, es muy probable que alguien más ya te la
haya preguntado y otro te la haya resuelto (Google y Stack Overflow son tus amigos). Esto hace que
Python sea aún más popular debido a la disponibilidad de recursos en línea.

Claridad

Debido a la facilidad de aprendizaje y uso de Python (en parte debido a la claridad de su sintaxis),
los profesionales pueden concentrarse en los aspectos más importantes de sus proyectos y
problemas. Por ejemplo, podrían usar numpy, scikit­learn y TensorFlow para obtener información
rápidamente en lugar de crear todo desde cero.

Esto proporciona otro nivel de claridad porque los profesionales pueden concentrarse más en la
naturaleza del problema y sus implicaciones. También podrían encontrar formas más eficientes de
lidiar con el problema en lugar de quedar enterrados con la tonelada de información que presenta un
determinado lenguaje de programación.

El enfoque siempre debe estar en el problema y las oportunidades que podría presentar. Solo se
necesita un gran avance para cambiar toda nuestra forma de pensar sobre un determinado desafío y
Python podría ayudar a lograrlo debido a su claridad y facilidad.
Machine Translated by Google

3. Requisitos previos y recordatorios

Python y conocimientos de programación

A estas alturas, debería comprender la sintaxis de Python, incluidas las variables, los operadores
de comparación, los operadores booleanos, las funciones, los bucles y las listas.
No tienes que ser un experto, pero realmente ayuda tener el conocimiento esencial para que el
resto sea más fluido.

No tiene que complicarlo porque la programación se trata solo de decirle a la computadora lo que
debe hacer. La computadora debería ser capaz de comprender y ejecutar con éxito sus
instrucciones. Es posible que solo necesite escribir algunas líneas de código (o modificar un poco
las existentes) para adaptarse a su aplicación.

Además, muchas de las cosas que hará en Python para el análisis de datos ya son rutinarias o
están prediseñadas para usted. En muchos casos, es posible que solo tenga que copiar y ejecutar
el código (con algunas modificaciones). Pero no te vuelvas perezoso porque entender Python y la
programación sigue siendo esencial. De esta manera, puede detectar y solucionar problemas en
caso de que aparezca un mensaje de error. Esto también te dará confianza porque sabes cómo
funciona algo.

Instalación y configuración

Si desea seguir nuestro código y ejecución, debe descargar e instalar Anaconda en su computadora.
Es gratis y está disponible para Windows, macOS y Linux. Para descargar e instalar, vaya a https://
www.anaconda.com/download/ y siga las siguientes instrucciones desde allí.

La herramienta que usaremos principalmente es Jupyter Notebook (ya viene con la instalación de
Anaconda). Es literalmente un cuaderno en el que puede escribir y ejecutar su código, así como
agregar texto y notas (razón por la cual muchos instructores en línea lo usan).

Si instaló Anaconda correctamente, debería poder iniciar Anaconda Prompt y escribir jupyter
notebook en el guión bajo parpadeante. Esto luego iniciará Jupyter Notebook usando su navegador
predeterminado. Luego puede crear un nuevo cuaderno (o editarlo más tarde) y ejecutar el código
para resultados y visualizaciones (gráficos, histogramas, etc.).

Estas son herramientas convenientes que puede usar para facilitar el estudio y el análisis.
Machine Translated by Google

y más rápido Esto también hace que sea más fácil saber qué salió mal y cómo solucionarlo
(hay mensajes de error fáciles de entender en caso de que te equivoques).

¿Es necesaria la experiencia matemática?

El análisis de datos a menudo significa trabajar con números y extraer información valiosa
de ellos. Pero, ¿de verdad hay que ser un experto en números y matemáticas?

El análisis de datos exitoso con Python a menudo requiere tener habilidades y conocimientos
decentes en matemáticas, programación y el dominio en el que está trabajando. Esto
significa que no tiene que ser un experto en ninguno de ellos (a menos que esté planeando
presentar un artículo en conferencias científicas internacionales).

No deje que muchos "expertos" lo engañen porque muchos de ellos son falsos o
simplemente sin experiencia. Lo que necesita saber es qué es lo siguiente que debe hacer
para que pueda terminar con éxito sus proyectos. No serás un experto en nada después de
leer todos los capítulos aquí. Pero esto es suficiente para brindarle una mejor comprensión
sobre Python y el análisis de datos.

Volvamos a la pericia matemática. Es muy probable que ya esté familiarizado con la media,
la desviación estándar y otros términos comunes en estadística. Al profundizar en el análisis
de datos, es posible que encuentre cálculo y álgebra lineal. Si tiene el tiempo y el interés
para estudiarlos, siempre puede hacerlo en cualquier momento o más tarde.
Esto puede o no darle una ventaja sobre el proyecto de análisis de datos en particular en el
que está trabajando.

Una vez más, se trata de resolver problemas. El enfoque debe estar en cómo aceptar un
desafío y superarlo con éxito. Esto se aplica a todos los campos, especialmente en los
negocios y la ciencia. No dejes que las exageraciones o los mitos te distraigan. Concéntrese
en los conceptos básicos y lo hará bien.
Machine Translated by Google

4. Revisión rápida de Python

Aquí hay una revisión rápida de Python que puede usar como referencia. Si está atascado
o necesita ayuda con algo, siempre puede usar Google o Stack Overflow.

Para tener Python (y otras herramientas y paquetes de análisis de datos) en su


computadora, descargue e instale Anaconda.

Los tipos de datos de Python son cadenas ("Eres increíble"), números enteros (­3, 0, 1) y
flotantes (3.0, 12.5, 7.77).

Puedes hacer operaciones matemáticas en Python como: 3 + 3

imprimir(3+3) 7 ­1

5*2

20 / 5

9 % 2 #operación módulo, devuelve el resto de la división 2 ** 3 #exponenciación, 2 a la 3ra potencia Asignación de valores a las variables:
miNombre = “Thor”

print(myName) #salida es "Thor"

x=5

años= 6

imprimir (x + y) #resultado es 11

imprimir (x * 3) #resultado es 15

Trabajando en cadenas y variables: myName = “Thor”

edad = 25

pasatiempo = "programación"

print('Hola, mi nombre es ' ' y mi edad


nombre
es 'es
+ str(edad)
Thon + '. De todos modos, mi hobby es ' + hobby + + myname + '.') El resultado es Hola, mi
y mi edad Tiene 25 años. De todos modos, mi hobby es la programación.

Comentarios # Todo lo que sigue al hashtag en esta línea es un comentario.

# Esto es para mantener la cordura.

# Hágalo comprensible para usted, los estudiantes y otros programadores.

Operadores de comparación >>>8 == 8

Verdadero >>>8 > 4


Machine Translated by Google

Verdadero

>>>8 < 4
Falso
>>>8 != 4

Verdadero
>>>8 != 8 Falso
>>>8 >= 2

Verdadero >>>8 <= 2


Falso
>>>'hola' == 'hola'

Verdadero >>>'gato' !=
'perro' Verdadero

Operadores booleanos (y, o, no) >>>8 > 3 y 8 > 4

Verdadero >>>8 > 3 y 8 > 9


Falso
>>>8 > 9 y 8 > 10

Falso
>>>8 > 3 o 8 > 800

Verdadero >>>'hola' == 'hola' o 'gato' == 'perro'


Verdadero

Declaraciones If, Elif y Else (para control de flujo) print(“¿Cuál es su correo electrónico?”) myEmail
= input() print(“Escriba
su contraseña.”) typedPassword =
input() if typedPassword
== contraseña guardada:
print(“ ¡Felicitaciones! Ha iniciado sesión.") else:

print("Su contraseña es incorrecta. Vuelva a intentarlo.")

Mientras bucle bandeja de entrada


= 0 while bandeja de entrada

< 10: print ("Tiene un mensaje") bandeja de


entrada = bandeja de entrada + 1

El resultado es este: Tienes un mensaje.


Tienes un mensaje.
Machine Translated by Google

Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.
Tienes un mensaje.

El bucle no sale hasta que escribes 'Casanova'


nombre =
''
while nombre != 'Casanova':
print('Escriba su nombre.') nombre
= input()
print('¡Felicitaciones!')

For bucle para i en el rango (10):


imprimir (i ** 2)

Aquí está la salida: 0 1

4
9
dieciséis

25
36
49
64
81

#Sumar números del 0 al 100

total = 0
para num en rango (101):
total = total + num
print (total)

Cuando ejecute esto, la suma será 5050.

#Otro ejemplo. Reseñas positivas y negativas.

all_reviews = [5, 5, 4, 4, 5, 3, 2, 5, 3, 2, 5, 4, 3, 1, 1, 2, 3, 5, 5]
positive_reviews = []
para i en all_reviews:
si i > 3:
print('Aprobado')
Machine Translated by Google

opiniones_positivas.agregar(i)
más:
imprimir('Fallo')

print(revisiones_positivas)
print(len(revisiones_positivas))
ratio_positivo = len(revisiones_positivas) / len(todas_revisiones)
print('Porcentaje de revisiones positivas: ')
print(ratio_positivas * 100)

Cuando ejecute esto, debería ver: Pasar


Aprobar

Aprobar

Aprobar

Aprobar

Fallar
Fallar
Aprobar

Fallar
Fallar
Aprobar

Aprobar

Fallar
Fallar
Fallar
Fallar
Fallar
Aprobar

Aprobado [5, 5, 4, 4, 5, 5, 5, 4, 5,
5]

10 Porcentaje de opiniones positivas:


52,63157894736842

Funciones def hola(): print('¡Hola


mundo!') hola()

Defina la función, diga lo que debe hacer y luego utilícela o llámela más tarde.

def sumar_números(a,b):
Machine Translated by Google

imprimir (a + b)

sumar_números(5,10)
sumar_números(35,55)

#Comprueba si un número es par o impar.

def even_check(num): if
num % 2 == 0: print('El
número es par.') else:

print('Hmm, es impar.')

par_cheque(50)
par_cheque(51)

Listas mi_lista = ['huevos', 'jamón', 'tocino'] #lista con cadenas colores =


['rojo', 'verde', 'azul']
primo_edades = [33, 35, 42] #lista con enteros lista_mixta = [3.14, 'círculo', 'huevos', 500] #lista con enteros y cadenas #Trabajando
con listas colores = ['rojo', 'azul', ' verde']

colores[0] #indexación comienza en 0, por lo que devuelve el primer elemento de la lista que es 'rojo'

colores[1] #devuelve el segundo elemento, que es 'verde'

#Cortando la lista mi_lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


print(my_list[0:2]) #devuelve [0, 1]
print(my_list[1:] ) #devuelve [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(my_list[3:6]) #devuelve [3, 4, 5]

#Longitud de la lista mi_lista = [0,1,2,3,4,5,6,7,8,9]

print(len(mi_lista)) #devuelve 10

#Asignación de nuevos valores a los elementos de la lista colores = ['rojo', 'verde',


'azul'] colores[0] = 'amarillo'
print(colores) #el resultado debe ser ['amarillo', 'verde', 'azul' ]

#Concatenación y adición de colores = ['rojo', 'verde', 'azul'] colores.append('rosa')


print(colores)

El resultado será:
['rojo', 'verde', 'azul', 'rosa']

fave_series = ['GOT', 'TWD', 'WW'] fave_movies


= ['HP', 'LOTR', 'SW'] fave_all = fave_series +
fave_movies print(fave_all)

Esto imprime ['GOT', 'TWD', 'WW', 'HP', 'LOTR', 'SW']


Machine Translated by Google

Esos son solo los conceptos básicos. Es posible que aún deba consultar esto cada vez que
esté haciendo algo relacionado con Python. También puede consultar la documentación de
Python 3 para información más extensa. Se recomienda que marque eso para futuras
referencias. Para una revisión rápida, también puede consultar Learn python3 in Y Minutes.

Consejos para un aprendizaje más rápido

Si quieres aprender más rápido, solo tienes que dedicar más horas cada día a aprender
Python. Tenga en cuenta que programar y aprender a pensar como un programador lleva
tiempo.

También hay varias hojas de trucos en línea que siempre puedes usar. Incluso los
programadores experimentados no lo saben todo. Además, en realidad no tienes que aprender
todo si recién estás comenzando. Siempre puede profundizar en cualquier momento si algo le
interesa o si desea destacarse en las solicitudes de empleo o en la financiación de empresas
emergentes.
Machine Translated by Google

5. Resumen y objetivos

Establezcamos algunas expectativas aquí para que sepas a dónde vas. Esto también es para presentar las
limitaciones de Python, el análisis de datos, la ciencia de datos y el aprendizaje automático (y también las
diferencias clave). Empecemos.

Análisis de datos frente a ciencia de datos frente a aprendizaje automático

El análisis de datos y la ciencia de datos son casi lo mismo porque comparten el mismo objetivo, que es
obtener información de los datos y utilizarlos para una mejor toma de decisiones.

A menudo, el análisis de datos se asocia con el uso de Microsoft Excel y otras herramientas para resumir
datos y encontrar patrones. Por otro lado, la ciencia de datos a menudo se asocia con el uso de programación
para manejar conjuntos de datos masivos. De hecho, la ciencia de datos se hizo popular como resultado de
la generación de gigabytes de datos provenientes de fuentes y actividades en línea (motores de búsqueda,
redes sociales).

Ser un científico de datos suena mucho mejor que ser un analista de datos. Aunque las funciones del trabajo
pueden ser similares y superpuestas, todo se trata de descubrir patrones y generar información a partir de los
datos. También se trata de hacer preguntas inteligentes sobre la naturaleza de los datos (p. ej., ¿los puntos
de datos forman grupos orgánicos?
¿Existe realmente una conexión entre la edad y el cáncer?).

¿Qué pasa con el aprendizaje automático? A menudo, los términos ciencia de datos y aprendizaje automático
se usan indistintamente. Eso es porque este último se trata de "aprender de los datos". Al aplicar algoritmos
de aprendizaje automático, la computadora detecta patrones y usa "lo que aprendió" en nuevos datos.

Por ejemplo, queremos saber si una persona pagará sus deudas. Afortunadamente, tenemos un conjunto de
datos considerable sobre diferentes personas que pagaron su deuda o no. También hemos recopilado otros
datos (creación de perfiles de clientes) como edad, rango de ingresos, ubicación y ocupación. Cuando
aplicamos el algoritmo de aprendizaje automático apropiado, la computadora aprenderá de los datos. Luego
podemos ingresar nuevos datos (nueva información de un nuevo solicitante) y lo que la computadora aprendió
se aplicará a esos nuevos datos.

Luego, podríamos crear un programa simple que evalúe de inmediato si una persona pagará sus deudas o
no en función de su información (edad, rango de ingresos, ubicación y ocupación). Este es un ejemplo del
uso de datos para predecir la
Machine Translated by Google

comportamiento probable.

posibilidades

Aprender de los datos abre muchas posibilidades, especialmente en predicciones y optimizaciones.


Esto se ha convertido en una realidad gracias a la disponibilidad de conjuntos de datos masivos y un
poder de procesamiento informático superior. Ahora podemos procesar datos en gigabytes en un día
usando computadoras o capacidades en la nube.

Aunque los algoritmos de ciencia de datos y aprendizaje automático aún están lejos de ser perfectos,
ya son útiles en muchas aplicaciones, como reconocimiento de imágenes, recomendaciones de
productos, clasificaciones de motores de búsqueda y diagnóstico médico. Y hasta este momento, los
científicos e ingenieros de todo el mundo continúan mejorando la precisión y el rendimiento de sus
herramientas, modelos y análisis.

Limitaciones del análisis de datos y el aprendizaje automático

Es posible que haya leído en noticias y artículos en línea que el aprendizaje automático y el análisis
avanzado de datos pueden cambiar el tejido de la sociedad (automatización, pérdida de empleos,
renta básica universal, adquisición de inteligencia artificial).

De hecho, la sociedad está cambiando en este momento. El aprendizaje automático detrás de escena
y el análisis continuo de datos están en funcionamiento, especialmente en los motores de búsqueda,
las redes sociales y el comercio electrónico. El aprendizaje automático ahora hace que sea más fácil
y rápido hacer lo siguiente:

• ¿Hay rostros humanos en la imagen? • ¿Un


usuario hará clic en un anuncio? (¿Es personalizado y atractivo para él/ella?) • ¿Cómo
crear subtítulos precisos en los videos de YouTube? (reconocer el habla
y traducir a texto) • ¿Fallará
un motor o componente? (mantenimiento preventivo en la fabricación) • ¿Es una
transacción
fraudulenta? • ¿Es un correo
electrónico spam o no?

Estos son posibles gracias a la disponibilidad de conjuntos de datos masivos y una gran potencia de
procesamiento. Sin embargo, el análisis de datos avanzado con Python (y el aprendizaje automático)
no es mágico. No es la solución a todos los problemas. Esto se debe a que la precisión y el rendimiento
de nuestras herramientas y modelos dependen en gran medida de la integridad de los datos y de
nuestra propia habilidad y juicio.
Machine Translated by Google

Sí, las computadoras y los algoritmos son excelentes para proporcionar respuestas. Pero también se
trata de hacer las preguntas correctas. Esas preguntas inteligentes vendrán de nosotros los humanos.
También depende de nosotros si usaremos las respuestas que nos dan nuestras computadoras.

Precisión y rendimiento

El uso más común del análisis de datos es en predicciones exitosas (pronóstico) y optimización.
¿Aumentará la demanda de nuestro producto en los próximos cinco años? ¿Cuáles son las rutas
óptimas para las entregas que conducen a los costos operativos más bajos?

Es por eso que una mejora en la precisión de incluso solo el 1 % puede traducirse en millones de dólares
de ingresos adicionales. Por ejemplo, las grandes tiendas pueden almacenar ciertos productos por
adelantado si los resultados del análisis predicen una demanda creciente.
El envío y la logística también pueden planificar mejor las rutas y los horarios para reducir el uso de
combustible y realizar entregas más rápidas.

Además de mejorar la precisión, otra prioridad es garantizar un rendimiento fiable. ¿Cómo puede
funcionar nuestro análisis en nuevos conjuntos de datos? ¿Deberíamos considerar otros factores al
analizar los datos y hacer predicciones? Nuestro trabajo siempre debe producir resultados
consistentemente precisos. De lo contrario, no es científico en absoluto porque los resultados no son
reproducibles. También podríamos disparar en la oscuridad en lugar de agotarnos en un sofisticado
análisis de datos.

Además de una previsión y optimización exitosas, el análisis de datos adecuado también puede
ayudarnos a descubrir oportunidades. Más tarde podemos darnos cuenta de que lo que hicimos también
es aplicable a otros proyectos y campos. También podemos detectar valores atípicos y patrones
interesantes si profundizamos lo suficiente. Por ejemplo, tal vez los clientes se agrupan en grupos que
son lo suficientemente grandes como para que podamos explorarlos y aprovecharlos. Tal vez haya
concentraciones inusualmente más altas de clientes que caen dentro de un cierto rango de ingresos o
nivel de gasto.

Esos son solo ejemplos típicos de las aplicaciones del análisis de datos adecuado. En el próximo
capítulo, analicemos uno de los ejemplos más utilizados para ilustrar el prometedor potencial del análisis
de datos y el aprendizaje automático. También discutiremos sus implicaciones y las oportunidades que
presenta.
Machine Translated by Google

6. Un ejemplo rápido

Conjunto de datos de iris

Veamos rápidamente cómo funcionan el análisis de datos y el aprendizaje automático en conjuntos


de datos del mundo real. El objetivo aquí es ilustrar rápidamente el potencial de Python y el
aprendizaje automático en algunos problemas interesantes.

En este ejemplo en particular, el objetivo es predecir la especie de una flor de iris en función de la
longitud y el ancho de sus sépalos y pétalos. Primero, tenemos que crear un modelo basado en
un conjunto de datos con las medidas de las flores y sus especies correspondientes. Según
nuestro código, nuestra computadora "aprenderá de los datos" y extraerá patrones de ellos. Luego
aplicará lo que aprendió a un nuevo conjunto de datos. Veamos el código.

#importación de las bibliotecas necesarias de sklearn.datasets import load_iris from sklearn import tree
from sklearn.metrics import
precision_score import numpy as np

#cargando el conjunto de datos


del iris iris = load_iris()

x = iris.data #matriz de datos = iris.target


#matriz de etiquetas (es decir, respuestas) de cada entrada de datos y

#obtención de los nombres de las etiquetas, es decir, las tres


especies de flores y_names = iris.target_names

#tomar índices aleatorios para dividir el conjunto de datos en entrenar y probar test_ids
= np.random.permutation(len(x))

#dividir datos y etiquetas en entrenar y probar #mantener las


últimas 10 entradas para probar, descansar para entrenar

tren_x = x[id_de_prueba[:­10]]
prueba_x = x[id_de_prueba[­10:]]

y_train = y[test_ids[:­10]] y_test =


y[test_ids[­10:]]

#clasificar usando el árbol de decisión clf =


tree.DecisionTreeClassifier()

#entrenando (ajustando) el clasificador con el conjunto de entrenamiento


clf.fit(x_train, y_train)
Machine Translated by Google

#predicciones en el conjunto de datos


de prueba pred = clf.predict(x_test)

print(pred) #etiquetas previstas, es decir, especies de flores


print(y_test) #etiquetas reales
print((accuracy_score(pred, y_test)))*100 #precisión de la predicción #Referencia: http://docs.python guide.org/en/latest /
escenarios/ml/

Si ejecutamos el código, obtendremos algo como esto: [0 1 1 1 0 2 0 2 2 2] [0 1 1 1 0 2


0 2 2 2] 100.0

La primera línea contiene las predicciones (0 es Iris setosa, 1 es Iris versicolor, 2 es Iris virginica). La
segunda línea contiene las especies de flores reales como se indica en el conjunto de datos. Observe
que la precisión de la predicción es del 100 %, lo que significa que predijimos correctamente la especie
de cada flor.

Todo esto puede parecer confuso al principio. Lo que debe comprender es que el objetivo aquí es crear
un modelo que prediga la especie de una flor. Para hacer eso, dividimos los datos en conjuntos de
entrenamiento y prueba. Ejecutamos el algoritmo en el conjunto de entrenamiento y lo usamos contra
el conjunto de prueba para conocer la precisión. El resultado es que podemos predecir la especie de la
flor en el conjunto de prueba en función de lo que la computadora aprendió del conjunto de entrenamiento.

Potencial e implicaciones

Es un ejemplo rápido y sencillo. Pero su potencial e implicaciones pueden ser enormes. Con solo unas
pocas modificaciones, puede aplicar el flujo de trabajo a una amplia variedad de tareas y problemas.

Por ejemplo, podríamos aplicar la misma metodología en otras especies de flores, plantas y animales.
También podemos aplicar esto en otros problemas de clasificación (más sobre esto más adelante),
como determinar si un cáncer es benigno o maligno, si una persona es un cliente muy probable o si hay
un rostro humano en la foto.

El desafío aquí es obtener suficientes datos de calidad para que nuestra computadora pueda obtener
un "buen entrenamiento" de manera adecuada. Es una metodología común aprender primero del
conjunto de entrenamiento y luego aplicar el aprendizaje en el conjunto de prueba y posiblemente
nuevos datos en el futuro (esta es la esencia del aprendizaje automático).

Ahora es obvio por qué muchas personas están entusiasmadas con el verdadero potencial del análisis
de datos y el aprendizaje automático. Con suficientes datos, podemos crear
Machine Translated by Google

sistemas de predicción de eventos y clasificación de objetos. Con suficientes imágenes de rayos X


con etiquetas correctas (con cáncer de pulmón o no), nuestras computadoras pueden aprender de
los datos y hacer una clasificación instantánea de una nueva imagen de rayos X sin etiquetar.
También podemos aplicar un enfoque similar a otros diagnósticos médicos y campos relacionados.

En aquel entonces, el análisis de datos se usaba mucho para estudiar el pasado y preparar informes.
Pero ahora, se puede usar instantáneamente para predecir resultados en tiempo real.
Este es el verdadero poder de los datos, en el que podemos usarlos para tomar decisiones rápidas e
inteligentes.

Muchos expertos están de acuerdo en que todavía estamos arañando la superficie del poder de
realizar análisis de datos utilizando conjuntos de datos significativamente grandes. En los próximos
años, podremos encontrar aplicaciones nunca antes pensadas. Muchas herramientas y enfoques
también quedarán obsoletos como resultado de estos cambios.

Pero muchas cosas seguirán igual y los principios siempre estarán ahí.
Por eso, en los capítulos siguientes, nos centraremos más en entrar en la mentalidad de un analista
de datos experto. Exploraremos algunos enfoques para hacer las cosas, pero estos solo se utilizarán
para ilustrar puntos importantes y atemporales.

Por ejemplo, el flujo de trabajo y el proceso generales en el análisis de datos involucran lo siguiente:
• Identificar el problema (hacer las preguntas correctas) • Obtener y procesar datos • Visualizar datos
• Elegir un enfoque y algoritmo • Evaluar el resultado • Probar otros enfoques y comparar los
resultados • Saber si los resultados son lo suficientemente buenos (saber cuándo parar) Es bueno
determinar primero el objetivo del proyecto para que podamos establecer expectativas y límites
claros en nuestro proyecto. En segundo lugar, recopilemos datos (o obtengamos acceso a ellos) para
que podamos comenzar el análisis adecuado. Hagámoslo en el próximo capítulo.
Machine Translated by Google

7. Obtención y procesamiento de datos

Basura dentro basura fuera. Esto es cierto especialmente en el análisis de datos. Después de
todo, la precisión de nuestro análisis depende en gran medida de la calidad de nuestros datos. Si
metemos basura, esperemos que salga basura.

Es por eso que los analistas de datos y los ingenieros de aprendizaje automático dedican más
tiempo a obtener y procesar datos de calidad. Para lograr esto, los datos deben estar en el formato
adecuado para que puedan utilizarse para el análisis y otros fines. A continuación, los datos deben
procesarse correctamente para que podamos aplicarles algoritmos y asegurarnos de que estamos
haciendo un análisis adecuado.

Archivos CSV

Los archivos CSV son quizás el formato de datos más común que encontrará en la ciencia de
datos y el aprendizaje automático (especialmente cuando usa Python). CSV significa valores
separados por comas. Los valores en diferentes columnas están separados por comas. He aquí
un ejemplo: Producto, Precio

repollo, 6.8

lechuga, 7.2

tomate, 4.2

Es un ejemplo simple de 2 columnas. En muchos proyectos modernos de análisis de datos, puede


tener este aspecto: Número de fila, Id. de cliente, Apellido, Puntuación
algo como crediticia, Geografía, Sexo,

Edad, Tenencia….
1,15634602,Hargrave,619,Francia,Femenino,42,2,0,1,1,1,101348.88,1
2,15647311,Hill,608,España,Femenino,41,1,83807.86,1,0,1 ,112542.58,0
3,15619304,Onio,502,Francia,Mujer,42,8,159660.8,3,1,0,113931.57,1
4,15701354,Boni,699,Francia,Mujer,39,1,0,2 ,0,0,93826.63,0
5,15737888,Mitchell,850,España,Mujer,43,2,125510.82,1,1,1,79084.1,0
6,15574012,Chu,645,España,Hombre,44,8 ,113755.78,2,1,0,149756.71,1
7,15592531,Bartlett,822,Francia,Hombre,50,7,0,2,1,1,10062.8,0
8,15656148,Obinna,376,Alemania,Mujer ,29,4,115046.74,4,1,0,119346.88,1
9,15792365,He,501,Francia,Masculino,44,4,142051.07,2,0,1,74940.5,0
10,15592389,H?, 684,Francia,Hombre,27,2,134603.88,1,1,1,71725.73,0
11,15767821,Bearce,528,Francia,Hombre,31,6,102016.72,2,0,0,80181.12,0
12, 15737173,Andrews,497,España,Hombre,24,3,0,2,1,0,76390.01,0
13,15632264,Kay,476,Francia,Mujer,34,10,0,2,1,0,26260.98 ,0
14,15691483,Barbilla,549,Francia,Mujer,25,5,0,2,0,0,190857.79,0
15,15600882,Scott,635,España,Mujer,35,7,0,2,1 ,1,65951.65,0
16,15643966,Goforth,616,Alemania,Hombre,45,3,143129.41,2,0,1,64327.26,0
17,15737452,Romeo,653,Alemania,Hombre,58,1,132602.88 ,1,1,0,5097.67,1
18,15788218,Henderson,549,España,Femenino,24,9,0,2,1,1,14406.41,0
19,15661507,Muldrow,587,España,Hombre,45 ,6,0,1,0,0,158684.81,0
20,15568982,Hao,726,Francia,Mujer,24,6,0,2,1,1,54724.03,0
21,15577657,McDonald,732,Francia ,Hombre,41,8,0,2,1,1,170886.17,0
22,15597945,Dellucci,636,España,Mujer,32,8,0,2,1,0,138555.46,0
Machine Translated by Google

23,15699309,Gerasimov,510,España,Mujer,38,4,0,1,1,0,118913.53,1
24,15725737,Mosman,669,Francia,Hombre,46,3,0,2,0,1
,8487.75,0 25,15625047,Yen,846,Francia,Mujer,38,5,0,1,1,1,187616.16,0
26,15738191,Maclean,577,Francia,Hombre,25,3,0,2 ,0,1,124508.29,0
27,15736816,Joven,756,Alemania,Hombre,36,2,136815.64,1,1,1,170041.95,0
28,15700772,Nebechi,571,Francia,Hombre,44,9 ,0,2,0,0,38433.35,0
29,15728693,McWilliams,574,Alemania,Mujer,43,3,141349.43,1,1,1,100187.43,0
30,15656300,Lucciano,411,Francia,Hombre ,29,0,59697.17,2,1,1,53483.21,0
31,15589475,Azikiwe,591,España,Mujer,39,3,0,3,1,0,140469.38,1

….

Los datos del mundo real (especialmente en comercio electrónico, redes sociales y anuncios en
línea) pueden contener millones de filas y miles de columnas.

Los archivos CSV son convenientes para trabajar y puede encontrar fácilmente muchos de ellos
en diferentes fuentes en línea. Está estructurado y Python también permite procesarlo fácilmente
escribiendo unas pocas líneas de código: import pandas as pd

conjunto de datos = pd.read_csv('Data.csv')

Este paso suele ser necesario antes de que Python y su computadora puedan trabajar con los
datos. Entonces, siempre que esté trabajando en un archivo CSV y esté usando Python, es
bueno tener inmediatamente esas dos líneas de código en la parte superior de su proyecto.

Luego, establecemos los valores de entrada (X) y los valores de salida (y). A menudo, los
valores de y son nuestros resultados objetivo. Por ejemplo, el objetivo común es aprender cómo
ciertos valores de X afectan los valores de y correspondientes. Más tarde, ese aprendizaje se
puede aplicar en nuevos valores de X y ver si ese aprendizaje es útil para predecir valores de y
(desconocido al principio).

Una vez que los datos se vuelven legibles y utilizables, a menudo el siguiente paso es asegurarse
de que los valores no varíen mucho en escala y magnitud. Eso se debe a que los valores en
ciertas columnas pueden estar en una liga diferente a las demás. Por ejemplo, las edades de
los clientes pueden oscilar entre 18 y 70 años. Pero el rango de ingresos está en el rango de
100000 a 9000000. La brecha en los rangos de las dos columnas tendría un gran efecto en
nuestro modelo. Quizás el rango de ingresos contribuya en gran medida a las predicciones
resultantes en lugar de tratar por igual tanto las edades como el rango de ingresos.

Para escalar características (escalar valores en la misma magnitud), una forma de hacerlo es
usando las siguientes líneas de código: from sklearn.preprocessing import StandardScaler sc_X
= StandardScaler()

tren_X = sc_X.fit_transform(tren_X)
Machine Translated by Google

X_test = sc_X.transform(X_test) # sc_y =


StandardScaler() # y_train =
sc_y.fit_transform(y_train) El objetivo aquí es escalar los valores en la misma magnitud para que todos
los valores de diferentes columnas o características contribuyan a las predicciones y salidas.

En el análisis de datos y el aprendizaje automático, a menudo es un requisito general dividir el conjunto


de datos en Conjunto de entrenamiento y Conjunto de prueba. Después de todo, necesitamos crear un
modelo y probar su rendimiento y precisión. Usamos el conjunto de entrenamiento para que nuestra
computadora pueda aprender de los datos. Luego, usamos ese aprendizaje contra el Test Set y vemos
si su rendimiento es lo suficientemente bueno.

Una forma común de lograr esto es a través del siguiente código: from sklearn.model_selection import
train_test_split X_train, X_test, y_train, y_test = train_test_split(X,
y, test_size = 0.2, random_state = 0) Aquí, importamos algo de scikit­learn (biblioteca de aprendizaje
automático de software gratuito para el lenguaje de programación Python) y realice una división en el
conjunto de datos. La división suele ser 80 % conjunto de entrenamiento y 20 % conjunto de prueba
(test_size = 0,2). El estado aleatorio puede tener cualquier valor, siempre y cuando mantengas la
coherencia en las partes siguientes de tu proyecto.

En realidad, puede usar diferentes proporciones al dividir su conjunto de datos. Algunos usan una
proporción de 70­30 o incluso 60­40. Solo tenga en cuenta que el conjunto de entrenamiento debería
ser suficiente para que cualquier persona significativa aprenda. Es similar a obtener diferentes
experiencias de vida para que podamos obtener una representación más precisa de la realidad (por
ejemplo, el uso de varios modelos mentales popularizados por Charlie Munger, socio comercial de
Warren Buffett durante mucho tiempo).

Por eso se recomienda recopilar más datos para que el “aprendizaje” sea más preciso. Con datos
escasos, nuestro sistema podría no reconocer patrones. Nuestro algoritmo podría incluso generalizar
en exceso con datos limitados, lo que hace que el algoritmo no funcione con datos nuevos. En otras
palabras, muestra excelentes resultados cuando usamos nuestros datos existentes, pero falla
espectacularmente cuando se usan nuevos datos.

También hay casos en los que ya tenemos suficiente cantidad de datos para que se produzca un
aprendizaje significativo. A menudo, no necesitaremos recopilar más datos porque el efecto podría ser
insignificante (por ejemplo, una mejora de la precisión del 0,0000001 %) o se requerirían grandes
inversiones en tiempo, esfuerzo y dinero. En estos casos, puede ser mejor trabajar en lo que ya tenemos
que buscar algo nuevo.
Machine Translated by Google

Selección de características

Podríamos tener muchos datos. Pero, ¿son todos ellos útiles y relevantes? ¿Qué columnas y
características es probable que contribuyan al resultado?

A menudo, algunos de nuestros datos son simplemente irrelevantes para nuestro análisis. Por ejemplo,
¿el nombre de la startup afecta su éxito de financiación? ¿Existe alguna relación entre el color favorito
de una persona y su inteligencia?

Seleccionar las características más relevantes también es una tarea crucial en el procesamiento de
datos. ¿Por qué desperdiciar tiempo y recursos informáticos valiosos al incluir características/columnas
irrelevantes en nuestro análisis? Peor aún, ¿las características irrelevantes sesgarían nuestro análisis?

La respuesta es sí. Como se mencionó al principio del capítulo, basura que entra basura que sale.
Si incluimos características irrelevantes en nuestro análisis, también podemos obtener resultados
inexactos e irrelevantes. Nuestra computadora y algoritmo estarían "aprendiendo de malos ejemplos",
lo que resulta en resultados erróneos.

Para eliminar la basura y mejorar la precisión y la relevancia de nuestro análisis, a menudo se realiza
una selección de características. Como implica el término, seleccionamos las "características" que
tienen la mayor contribución y relevancia inmediata con el resultado. Esto hace que nuestro modelo
predictivo sea más simple y fácil de entender.

Por ejemplo, podríamos tener más de 20 características que describen a los clientes. Estas
características incluyen la edad, el rango de ingresos, la ubicación, el sexo, si tienen hijos o no, el nivel
de gasto, las compras recientes, el nivel educativo más alto, si tienen una casa o no, y más de una
docena de atributos más. Sin embargo, no todos estos pueden tener alguna relevancia con nuestro
análisis o modelo predictivo. Aunque es posible que todas estas funciones tengan algún efecto, el
análisis puede ser demasiado complejo para que sea útil.

La selección de características es una forma de simplificar el análisis centrándose en la relevancia.


Pero, ¿cómo sabemos si una determinada característica es relevante? Aquí es donde entra en juego
el conocimiento y la experiencia del dominio. Por ejemplo, el analista de datos o el equipo deben tener
conocimiento sobre el comercio minorista (en nuestro ejemplo anterior). De esta forma, el equipo
puede seleccionar correctamente las características que tienen el mayor impacto en el modelo o
análisis predictivo.

Diferentes campos a menudo tienen diferentes características relevantes. Por ejemplo, analizar datos
minoristas puede ser totalmente diferente a estudiar datos de calidad del vino. En el comercio minorista
Machine Translated by Google

centrarse en las características que influyen en las compras de las personas (y en qué cantidad).
Por otro lado, el análisis de los datos de calidad del vino puede requerir el estudio de los
componentes químicos del vino y sus efectos en las preferencias de las personas.

Además, requiere cierto conocimiento del dominio para saber qué características son
interdependientes entre sí. En nuestro ejemplo anterior sobre la calidad del vino, las sustancias en
el vino pueden reaccionar entre sí y, por lo tanto, afectar las cantidades de dichas sustancias.
Cuando aumenta la cantidad de una sustancia, puede aumentar o disminuir la cantidad de otra.

También es el caso con el análisis de datos comerciales. Más clientes también significa más
ventas. Las personas de grupos de ingresos más altos también pueden tener niveles de gasto más altos.
Estas características son interdependientes y excluir algunas de ellas podría simplificar nuestro
análisis.

Seleccionar las funciones más apropiadas también puede llevar más tiempo, especialmente cuando
se trata de un conjunto de datos enorme (con cientos o incluso miles de columnas). Los
profesionales a menudo prueban diferentes combinaciones y ven cuál produce los mejores
resultados (o buscan algo que tenga más sentido).

En general, la experiencia en el dominio podría ser más importante que la habilidad de análisis de
datos en sí. Después de todo, deberíamos empezar por hacer las preguntas correctas en lugar de
centrarnos en aplicar el algoritmo más elaborado a los datos. Para resolver las preguntas correctas
(y las más importantes), usted o alguien de su equipo debe tener experiencia en el tema.

Fuentes de datos en línea

Hemos discutido cómo procesar datos y seleccionar las características más relevantes. Pero, ¿de
dónde obtenemos los datos en primer lugar? ¿Cómo aseguramos su credibilidad? Y para los
principiantes, ¿dónde obtener datos para que puedan practicar el análisis de datos?

Puede comenzar con el repositorio de aprendizaje automático de UCI (https://archive.ics.uci.edu/


ml/datasets.html) en el que puede acceder a conjuntos de datos sobre negocios, ingeniería,
ciencias de la vida, ciencias sociales y ciencias físicas.
Puede encontrar datos sobre El Niño, redes sociales, caracteres escritos a mano, diagnóstico de
unidades sin sensor, marketing bancario y más. Es más que suficiente para ocupar su tiempo
durante meses y años si se toma en serio el análisis de datos a gran escala.

Tú también puedes encontrar más interesante conjuntos de datos


en Kaggle
Machine Translated by Google

(https://www.kaggle.com/datasets) como datos sobre Titanic Survival, compras de comestibles,


diagnósticos médicos, calidad histórica del aire, reseñas de Amazon, estadísticas de delitos y
precios de viviendas.

Solo comienza con esos dos y estarás bien. Es bueno navegar a través de los conjuntos de
datos hoy mismo para obtener ideas e inspiración sobre qué hacer con los datos. Tenga en
cuenta que el análisis de datos se trata de explorar y resolver problemas, por lo que siempre
es bueno explorar para estar más cerca de las situaciones y los desafíos.

Fuente de datos interna

Si planea trabajar en una empresa, universidad o institución de investigación, es muy probable


que trabaje con datos internos. Por ejemplo, si está trabajando en una gran empresa de
comercio electrónico, espere trabajar en los datos que su empresa recopila y genera.

Las grandes empresas suelen generar megabytes de datos cada segundo. Estos están siendo
almacenados y/o procesados en una base de datos. Entonces, su trabajo es dar sentido a esos
flujos interminables de datos y utilizar los conocimientos derivados para mejorar la eficiencia o
la rentabilidad.

Primero, los datos que se recopilan deben ser relevantes para las operaciones del negocio.
Quizás el momento de la compra, la categoría en la que se encuentra el producto y si se ofrece
con descuento son todos relevantes. Luego, esta información debe almacenarse en la base de
datos (con copias de seguridad) para que su equipo pueda analizarla más tarde.

Los datos se pueden almacenar en diferentes formatos y tipos de archivos, como CSV, SQLite,
JSON y BigQuery. El tipo de archivo que su empresa eligió podría haber dependido de la
conveniencia y la infraestructura existente. Es importante saber cómo trabajar con estos tipos
de archivos (a menudo se mencionan en las descripciones de trabajo) para que pueda realizar
un análisis significativo.
Machine Translated by Google

8. Visualización de datos

La visualización de datos hace que sea más fácil y rápido realizar un análisis significativo de los datos.
En muchos casos es uno de los primeros pasos a la hora de realizar un análisis de datos.
Usted accede y procesa los datos y luego comienza a visualizarlos para obtener información rápida
(por ejemplo, buscando patrones obvios, valores atípicos, etc.)

Objetivo de visualización

Explorar y comunicar datos es el objetivo principal de la visualización de datos. Cuando se visualizan


los datos (en un gráfico de barras, histograma u otras formas), los patrones se vuelven inmediatamente
obvios. Sabrá rápidamente si hay una tendencia al alza (gráfico de líneas) o la magnitud relativa de
algo en relación con otros factores (por ejemplo, utilizando un gráfico circular). En lugar de decirle a la
gente la larga lista de números, ¿por qué no mostrárselos para una mayor claridad?

Por ejemplo, veamos la tendencia de búsqueda mundial de la palabra 'bitcoin':

https://trends.google.com/trends/explore?q=bitcoin

Inmediatamente notará que hay un aumento masivo temporal en el interés por 'bitcoin' pero, en
general, disminuye constantemente con el tiempo después de ese pico. Quizás durante el apogeo
haya una exageración masiva sobre el impacto tecnológico y social de bitcoin. Y luego, la exageración
se calmó naturalmente porque la gente ya estaba familiarizada con ella o simplemente es algo natural
sobre las exageraciones.

Cualquiera que sea el caso, la visualización de datos nos permitió ver rápidamente los patrones de
una manera mucho más clara. Recuerde el objetivo de la visualización de datos, que es explorar y
comunicar datos. En este ejemplo, podemos ver rápidamente el
Machine Translated by Google

patrones y los datos que se nos comunican.

Esto también es importante cuando se presenta al panel o al público. Otras personas pueden
preferir una descripción general rápida de los datos sin entrar demasiado en los detalles. No
querrás molestarlos con textos y números aburridos. Lo que tiene un mayor impacto es cómo
presentas los datos para que las personas sepan inmediatamente su importancia. Aquí es donde
puede tener lugar la visualización de datos en la que permite que las personas exploren
rápidamente los datos y comuniquen de manera efectiva lo que está tratando de decir.

Hay varias formas de visualizar los datos. Puede crear inmediatamente diagramas y gráficos con
Microsoft Excel. También puede usar D3, seaborn, Bokeh y matplotlib. En este capítulo y en los
siguientes, nos centraremos en el uso de matplotlib.

Importación y uso de Matplotlib

Según su página de inicio (https://matplotlib.org/2.0.2/index.html): “Matplotlib es una biblioteca de


gráficos 2D de Python que produce cifras de calidad de publicación en una variedad de formatos
impresos y entornos interactivos en todas las plataformas. Matplotlib se puede utilizar en
secuencias de comandos de Python, el shell de Python e IPython, el cuaderno jupyter, servidores
de aplicaciones web y cuatro kits de herramientas de interfaz gráfica de usuario”.

En otras palabras, puede generar fácilmente diagramas, histogramas, gráficos de barras,


diagramas de dispersión y mucho más usando Python y unas pocas líneas de código. En lugar
de dedicar tanto tiempo a resolver las cosas, puede concentrarse en generar gráficos para un
análisis y una exploración de datos más rápidos.

Eso suena un bocado. Pero recuerde siempre que todavía se trata de explorar y
comunicar datos. Veamos un ejemplo para aclarar esto. Primero, aquí hay un
horizontal bar
gráfico simple (https://matplotlib.org/2.0.2/examples/lines_bars_and_markers/
barh_demo.html):
Machine Translated by Google

Para crear eso, solo necesita este bloque de código: import matplotlib.pyplot as plt plt.rcdefaults()

import numpy as
np import matplotlib.pyplot
as plt

plt.rcdefaults()
higo, hacha = plt.subparcelas()

# Datos de ejemplo
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') y_pos =
np.arange(len(people)) performance =
3 + 10 * np.random.rand(len (personas)) error =
np.random.rand(len(personas))

ax.barh(y_pos, performance, xerr=error, align='center', color='green',


ecolor='black') ax.set_yticks(y_pos)
ax.set_yticklabels(personas)
ax.invert_yaxis() # etiquetas
leídas de arriba a abajo ax.set_xlabel('Rendimiento')
ax.set_title('¿Qué tan rápido quieres
ir hoy?')

plt.show() Parece complejo al principio. Pero lo que hizo fue importar lo necesario
Machine Translated by Google

bibliotecas, establezca los datos y describa cómo deben mostrarse. Escribirlo todo desde
cero puede ser difícil. La buena noticia es que podemos copiar los ejemplos de código y
modificarlos de acuerdo con nuestros propósitos y nuevos datos.

Además de los gráficos de barras horizontales, matplotlib también es útil para crear y mostrar
diagramas de dispersión, diagramas de caja y otras representaciones visuales de datos:

"""
Demostración simple de un diagrama de dispersión.
"""
importar numpy como
np importar matplotlib.pyplot como plt

N = 50
x = np.random.rand(N)
= np.random.rand(N)
y colores = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N) )**2 # 0 a 15 puntos de radio

plt.scatter(x, y, s=área, c=colores, alfa=0.5)


Machine Translated by Google

plt.mostrar()

importar matplotlib.pyplot como plt desde


numpy.random import rand

fig, ax = plt.subplots() for


color in ['red', 'green', 'blue']: n = 750 =
rand(2,
n) x, y scale =
200.0 * rand(n) ax.scatter (x,
y, c=color, s=escala, etiqueta=color, alfa=0.3,
edgecolors='ninguno')

ax.leyenda()
ax.grid(Verdadero)
Machine Translated by Google

plt.mostrar()

Fuente de imágenes y código: https://matplotlib.org/2.0.2/gallery.html

Estos son solo para mostrarle la utilidad y las posibilidades de usar matplotlib.
Tenga en cuenta que puede realizar visualizaciones de datos con calidad de publicación. También
tenga en cuenta que puede modificar los códigos de ejemplo para su propósito. No hay necesidad de
Machine Translated by Google

reinventar la rueda. Puede copiar las secciones correspondientes y adaptarlas a sus


datos.

Quizás en el futuro habrá formas más rápidas y fáciles de crear visualizaciones de


datos, especialmente cuando se trabaja con grandes conjuntos de datos. Incluso puede
crear presentaciones animadas que pueden cambiar con el tiempo. Cualquiera que
sea el caso, el objetivo de la visualización de datos es explorar y comunicar datos.
Puede elegir otros métodos, pero el objetivo siempre es el mismo.

En este capítulo y en los anteriores hemos discutido aspectos generales sobre el


análisis de datos. En los capítulos siguientes, comencemos a discutir temas avanzados
que son específicos del aprendizaje automático y el análisis de datos avanzado. El
objetivo inicial es familiarizarlo con los conceptos y términos más comunes utilizados
en los círculos de ciencia de datos. Empecemos definiendo qué significa Aprendizaje
Supervisado y Aprendizaje No Supervisado.
Machine Translated by Google

9. Aprendizaje supervisado y no supervisado

En muchos cursos y libros introductorios sobre aprendizaje automático y ciencia de datos, es


probable que encuentre lo que significa el aprendizaje supervisado y no supervisado y cuáles son
sus diferencias. Esto se debe a que estas son las dos categorías generales de aprendizaje
automático y tareas de ciencia de datos que realizan muchos profesionales.

¿Qué es el aprendizaje supervisado?

En primer lugar, el aprendizaje supervisado es muy similar al aprendizaje a partir de ejemplos.


Por ejemplo, tenemos una gran colección de imágenes etiquetadas correctamente como perros
o gatos. Nuestra computadora entonces aprenderá de esos ejemplos dados y las etiquetas correctas.
Quizás nuestra computadora encuentre patrones y similitudes entre esas imágenes.
Y finalmente, cuando introducimos nuevas imágenes, nuestra computadora y modelo identificarán
con éxito una imagen, ya sea que haya un perro o un gato en ella.

Es muy parecido a aprender con supervisión. Hay respuestas correctas (p. ej., gatos o perros) y
el trabajo de nuestro modelo es alinearse para que, con nuevos datos, aún pueda producir
respuestas correctas (en un nivel de rendimiento aceptable porque es difícil alcanzar el 100%).

Por ejemplo, la regresión lineal se considera en el aprendizaje supervisado.


Recuerda que en la regresión lineal estamos tratando de predecir el valor de y para una x dada.
Pero primero, tenemos que encontrar patrones y "ajustar" una línea que describa mejor la relación
entre x e y (y predecir valores de y para nuevas entradas de x).

imprimir (__doc__)
Machine Translated by Google

# Código fuente: Jaques Grobler


# Licencia: cláusula BSD 3

importar matplotlib.pyplot como plt


importar numpy como np
de sklearn importar conjuntos de datos, linear_model de
sklearn.metrics importar mean_squared_error, r2_score

# Cargue el conjunto de datos de diabetes

diabetes = conjuntos de datos.load_diabetes()

# Usar solo una función


diabetes_X = diabetes.data[:, np.newaxis, 2]

# Divida los datos en conjuntos de entrenamiento/


prueba diabetes_X_train = diabetes_X[:­20]
diabetes_X_test = diabetes_X[­20:]

# Dividir los objetivos en conjuntos de entrenamiento/


prueba diabetes_y_train = diabetes.target[:­20]
diabetes_y_test = diabetes.target[­20:]

# Crear objeto de regresión lineal regr =


linear_model.LinearRegression()

# Entrena al modelo usando los conjuntos de


entrenamiento regir.fit(diabetes_X_train, diabetes_y_train)

# Hacer predicciones utilizando el conjunto de


pruebas diabetes_y_pred = regr.predict(diabetes_X_test)

# Los coeficientes
print('Coeficientes: \n', regr.coef_)
# El error cuadrático medio
print("Error cuadrático medio: %.2f" %
mean_squared_error(diabetes_y_test, diabetes_y_pred))
# Puntuación de varianza explicada: 1 es predicción perfecta
print('Puntuación de varianza: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))

# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)

plt.xticks(())
plt.yticks(())
Machine Translated by Google

plt.show () Fuente: http://scikit­learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx­glr­


autoejemplos­linear­model­plot­ols­py

Parece un ejemplo sencillo. Sin embargo, esa línea fue el resultado de minimizar iterativamente
la suma residual de cuadrados entre los valores verdaderos y las predicciones. En otras palabras,
el objetivo era producir la predicción correcta utilizando lo que el modelo aprendió de los ejemplos
anteriores.

Otra tarea que se incluye en el aprendizaje supervisado es la clasificación. Aquí, el objetivo es


clasificar correctamente los nuevos datos en cualquiera de las dos categorías. Por ejemplo,
queremos saber si un correo electrónico entrante es spam o no. Nuevamente, nuestro modelo
aprenderá de los ejemplos (correos electrónicos correctamente etiquetados como spam o no).
Con esa "supervisión", podemos crear un modelo que predecirá correctamente si un nuevo
correo electrónico es spam o no.

¿Qué es el aprendizaje no supervisado?

Por el contrario, el aprendizaje no supervisado significa que no hay supervisión ni orientación.


A menudo se piensa que no tiene respuestas correctas, solo respuestas aceptables.

Por ejemplo, en Agrupación (esto se incluye en Aprendizaje no supervisado) estamos tratando


de descubrir dónde se agregan los puntos de datos (por ejemplo, ¿hay agrupaciones naturales?).
Cada punto de datos no está etiquetado, por lo que nuestro modelo y computadora no
aprenderán de los ejemplos. En cambio, nuestra computadora está aprendiendo a identificar
patrones sin ninguna guía externa.

Esta parece ser la esencia de la verdadera Inteligencia Artificial en la que la computadora puede
aprender sin intervención humana. Se trata de aprender de los datos en sí mismos y tratar de
encontrar la relación entre las diferentes entradas (observe que aquí no hay resultados esperados
en contraste con Regresión y Clasificación discutidos anteriormente). La atención se centra en
las entradas y trata de encontrar los patrones y las relaciones entre ellas. Tal vez haya
agrupaciones naturales o asociaciones claras entre las entradas. También es posible que no
haya una relación útil en absoluto.

Cómo abordar un problema

Muchos científicos de datos abordan un problema de forma binaria. ¿La tarea se incluye en el
aprendizaje supervisado o no supervisado?

La forma más rápida de averiguarlo es determinando el resultado esperado. ¿Estamos tratando


de predecir los valores de y en función de los nuevos valores de x (aprendizaje supervisado,
regresión)? ¿Es un nuevo insumo bajo la categoría A o la categoría B basado en el anterior?
Machine Translated by Google

datos etiquetados (aprendizaje supervisado, clasificación)? ¿Estamos tratando de


descubrir y revelar cómo se agregan los puntos de datos y si hay grupos naturales
(aprendizaje no supervisado, agrupamiento)? ¿Tienen las entradas una relación
interesante entre sí (tienen una alta probabilidad de co­ocurrencia)?

Muchos problemas de análisis de datos avanzados caen bajo esas preguntas


generales. Después de todo, el objetivo siempre es predecir algo (basado en ejemplos
anteriores) o explorar los datos (averiguar si hay patrones).
Machine Translated by Google

10. Regresión

En el capítulo anterior, hemos hablado sobre el aprendizaje supervisado y no supervisado,


incluido un poco sobre la regresión lineal. En este capítulo, concentrémonos en la
regresión (predecir una salida en función de una nueva entrada y el aprendizaje previo).

Básicamente, el Análisis de Regresión nos permite descubrir si existe una relación entre
una variable o variables independientes y una variable dependiente (el objetivo). Por
ejemplo, en una regresión lineal simple queremos saber si existe una relación entre x e
y. Esto es muy útil en el pronóstico (por ejemplo, hacia dónde va la tendencia) y el
modelado de series de tiempo (por ejemplo, los niveles de temperatura por año y si el
calentamiento global es cierto).

Regresión lineal simple

Aquí trataremos con una variable independiente y una dependiente. Más adelante,
trataremos con múltiples variables y mostraremos cómo se pueden usar para predecir el
objetivo (similar a lo que hablamos sobre predecir algo en función de varias características/
atributos).

Por ahora, veamos un ejemplo de una regresión lineal simple en la que analizamos los
datos de salario (Salary_Data.csv). Aquí está el conjunto de datos (los valores separados
por comas y las columnas son años, experiencia y salario): YearsExperience,Salary
1.1,39343.00
1.3,46205.00
1.5,37731.00
2.0,43525.00
2.2,39891.00
2.9,56642.00
3.0,60150.0 0
3.2,54445.00
3.2,64445.00
3.7,57189.00
3.9,63218.00
4.0,55794.00
4.0,56957.00
4.1,57081.00
4.5,61111.00
4.9,67938.00
Machine Translated by Google

5.1,66029.00
5.3,83088.00
5.9,81363.00
6.0,93940.00
6.8,91738.00
7.1,98273.00
7.9,101302.00
8.2,113812.00
8.7,109431.00 9
0,105582,00
9,5,116969,00
9,6,112635,00
10,3,122391,00
10,5,121872,00

Aquí está el código de Python para ajustar la regresión lineal simple al conjunto de entrenamiento: #
Importación de las bibliotecas
import matplotlib.pyplot as plt import pandas
as pd

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Salary_Data.csv')
X = conjunto de datos.iloc[:, :­1].valores
y = conjunto de datos.iloc[:, 1].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el conjunto de


prueba de sklearn.model_selection import train_test_split X_train, X_test,
y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)

# Ajuste de la regresión lineal simple al conjunto de entrenamiento de


sklearn.linear_model import LinearRegression regressor = LinearRegression()
regressor.fit(X_train, y_train)

# Predecir los resultados del conjunto de


pruebas y_pred = regressor.predict(X_test)
Machine Translated by Google

# Visualización de los resultados del


conjunto de entrenamiento plt.scatter(X_train,
y_train, color = 'red') plt.plot(X_train, regressor.predict(X_train), color =
'blue') plt.title('Salario vs Experiencia (Conjunto de
entrenamiento )') plt.xlabel('Años de
experiencia')
plt.ylabel('Salario') plt.show()

# Visualización de los resultados del


conjunto de prueba plt.scatter(X_test, y_test,
color = 'red') plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.title('Salario vs Experiencia (Conjunto de
prueba )') plt.xlabel('Años de
experiencia')
plt.ylabel('Salario') plt.show() El objetivo general aquí es crear un modelo que prediga el
salario en función de los años de experiencia. Primero, creamos un modelo usando el
Conjunto de Entrenamiento (70% del conjunto de datos). Luego se ajustará a una línea lo
más cercana posible a la mayoría de los puntos de datos.

Después de crear la línea, aplicamos esa misma línea al conjunto de prueba (el 30 %
restante o 1/3 del conjunto de datos).
Machine Translated by Google

Observe que la línea funcionó bien tanto en el conjunto de entrenamiento como en el conjunto de prueba.
Como resultado, existe una buena posibilidad de que la línea o nuestro modelo también funcionen bien
con nuevos datos.

Hagamos un resumen de lo que pasó. Primero, importamos las bibliotecas necesarias (pandas para
procesar datos, matplotlib para visualización de datos). A continuación, importamos el conjunto de datos
y asignamos X (la variable independiente) a Años de experiencia e y (el objetivo) a Salario. Luego
dividimos el conjunto de datos en Conjunto de entrenamiento (⅔) y Conjunto de prueba (⅓).

Luego, aplicamos el modelo de regresión lineal y ajustamos una línea (con la ayuda de scikit­learn, que
es una biblioteca de aprendizaje automático de software gratuito para el lenguaje de programación
Python). Esto se logra a través de las siguientes líneas de código: from sklearn.linear_model import
LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train)
Después de aprender del conjunto de
entrenamiento (X_train y y_train), luego aplicamos ese regresor al conjunto de prueba (X_test) y compare
los resultados usando visualización de datos (matplotlib).

Es un enfoque sencillo. Nuestro modelo aprende del conjunto de entrenamiento y luego lo aplica al
conjunto de prueba (y ve si el modelo es lo suficientemente bueno). Este es el principio esencial de la
regresión lineal simple.

Regresión lineal múltiple

Eso también se aplica de manera similar a la regresión lineal múltiple. El objetivo sigue siendo ajustar una
recta que muestre mejor la relación entre una variable independiente y la
Machine Translated by Google

objetivo. La diferencia es que en la Regresión Lineal Múltiple, tenemos que tratar con al
menos 2 características o variables independientes.

Por ejemplo, observemos un conjunto de datos sobre 50 nuevas empresas ((50_Startups.csv):


Gasto en I+D, Administración, Gasto en marketing, Estado,
Beneficio 165349,2, 136897,8, 471784,1, Nueva York,
192261,83 162597,7, 151377,59, 443898,53, California,
191792.06 153441.51, 101145.55,407934.54,Florida,191050.39
144372.41,118671.85,383199.62,Nueva York,182901.99
142107.34,91391.77,366168.42,Florida,166187.94 131
876.9,99814.71,362861.36,Nueva York,156991.12
134615.46,147198.87,127716.82,California,156122.51
130298.13,145530.06,323876.68 ,Florida,155752.6
120542.52,148718.95,311613.29,Nueva York,152211.77
123334.88,108679.17,304981.62,California,149759.96
101913.08,110594.11, 229160.95,Florida,146121.95
100671.96,91790.61,249744.55,California,144259.4
93863.75,127320.38,249839.44,Florida,141585.52
91992.39,135495.07,252664.93,California,134307.35
119943.24,156547.42,256512.92,Florida,132602.65
114523.61,122616.84,261776.23,Nueva York,1 29917.04
78013.11,121597.55,264346.06,California,126992.93
94657.16,145077.58,282574.31,Nueva York,125370.37
91749.16,114175.79 ,294919.57,Florida,124266.9
86419.7,153514.11,0,Nueva York,122776.86
76253.86,113867.3,298664.47,California,118474.03
78389.47,153773.43,299 737.29, Nueva York, 111313.02
73994.56, 122782.75, 303319.26, Florida, 110352.25
67532.53, 105751.03, 304768.73, Florida,108733.99
77044.01,99281.34,140574.81,Nueva York,108552.04
64664.71,139553.16,137962.62,California,107404.34
75328.87,144135.98,134050 .07,Florida,105733.54
72107.6,127864.55,353183.81,Nueva York,105008.31
66051.52,182645.56,118148.2,Florida,103282.38
65605.48,153032.06,107138.38, Nueva York, 101004.64
61994.48,115641.28,91131.24, Florida, 99937.59
61136.38,152701.92,88218.23, Nueva York, 97483.56
Machine Translated by Google

63408.86,129219.61,46085.25,California,97427.84
55493.95,103057.49,214634.81,Florida,96778.92
46426.07,157693.92,210797.67,California,9671 2.8
46014.02,85047.44,205517.64,Nueva York,96479.51
28663.76,127056.21,201126.82,Florida,90708.19
44069.95,51283.14, 197029.42,California,89949.14
20229.59,65947.93,185265.1,Nueva York,81229.06
38558.51,82982.09,174999.3,California,81005.76
28754.33,118546.0 5,172795.67,California,78239.91
27892.92,84710.77,164470.71,Florida,77798.83
23640.93,96189.63,148001.11,California, 71498.49
15505.73,127382.3,35534.17,Nueva York,69758.98
22177.74,154806.14,28334.72,California,65200.33
1000.23,124153.04,1903.93,Nueva York,64 926.08
1315.46,115816.21,297114.46,Florida,49490.75
0,135426.92,0,California,42559.73 542.05,
51743.15,0,Nueva York,35673.41
0,116983.8,45173.06,California,14681.4

Tenga en cuenta que hay múltiples características o variables independientes (gasto en I+D,
administración, gasto en marketing, estado). Nuevamente, el objetivo aquí es revelar o descubrir
una relación entre las variables independientes y el objetivo (beneficio).

También observe que debajo de la columna 'Estado', los datos están en texto (no en números).
Verá Nueva York, California y Florida en lugar de números. ¿Cómo lidias con este tipo de
datos?

Una forma conveniente de hacerlo es transformando datos categóricos (Nueva York, California,
Florida) en datos numéricos. Podemos lograr esto si usamos las siguientes líneas de código:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder = LabelEncoder()

X[:, 3] = labelencoder.fit_transform(X[:, 3]) #Observe este


onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray() Fíjense en X[:, 3] = labelencoder.fit_transform(X[:,
3]) Lo que hicimos allí fue transformar los datos en la cuarta columna (Estado). Es el número 3
porque la indexación de Python comienza en cero (0). El objetivo era transformar datos de
variables categóricas en algo que podamos
Machine Translated by Google

trabajar en. Para ello, crearemos “variables ficticias” que toman los valores 0 o 1. En otras
palabras, indican la presencia o ausencia de algo.

Por ejemplo, tenemos los siguientes datos con variables categóricas: 3.5, Nueva York 2.0,
California 6.7, Florida Si usamos variables ficticias, los datos anteriores se transformarán en
esto: 3.5, 1, 0, 0

2.0, 0, 1, 0

6.7, 0, 0, 1

Observe que la columna de Estado se volvió equivalente a 3 columnas:

Nueva York California Florida

3.5 1 0 0

2.0 0 1 0

6.7 0 0 1

Como se mencionó anteriormente, las variables ficticias indican la presencia o ausencia de


algo. Se usan comúnmente como "variables sustitutas" para que podamos hacer un análisis
cuantitativo de los datos cualitativos. De la nueva tabla de arriba podemos ver rápidamente
que 3.5 es para Nueva York (1 Nueva York, 0 California y 0 Florida).
Es una forma conveniente de representar categorías en valores numéricos.

Sin embargo, existe esta llamada "trampa de variable ficticia" en la que hay una variable
adicional que podría haberse eliminado porque se puede predecir a partir de las demás. En
nuestro ejemplo anterior, observe que cuando las columnas de Nueva York y California son
cero (0), automáticamente sabrá que es Florida. Ya puedes saber de qué Estado se trata
incluso con solo las 2 variables.

Continuando con nuestro trabajo en 50_Startups.csv, podemos evitar la trampa de la variable


ficticia al incluir esto en nuestro código: X = X[:, 1:]

Repasemos nuestro trabajo hasta ahora: import numpy as


np import matplotlib.pyplot as plt
import pandas as pd
Machine Translated by Google

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :­1].values =
dataset.iloc[:, 4].values Veamos los datos: dataset.head() y

Luego, transformamos las variables categóricas en numéricas (variables ficticias): # Codificación


de datos categóricos de
sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder =
LabelEncoder()
X[:, 3] = labelencoder.fit_transform(X[:, 3]) onehotencoder
= OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray() # Evitar la trampa de variable ficticia X = X[:, 1:]

Después de esos pasos de preprocesamiento de datos, los datos de alguna manera se verían así:

Observe que no hay variables categóricas (Nueva York, California, Florida) y hemos eliminado la
"variable redundante" para evitar la trampa de la variable ficticia.
Machine Translated by Google

Ahora estamos listos para dividir el conjunto de datos en Conjunto de entrenamiento y Conjunto
de prueba. Podemos hacer esto con las siguientes líneas de código: from sklearn.model_selection
import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) 80%
Conjunto de entrenamiento, 20% Conjunto de prueba. El siguiente paso es que podemos crear
un regresor y "ajustar la línea" (y usar esa línea en el conjunto de prueba): from sklearn.linear_model
import LinearRegression regresor = LinearRegression()
regresor.fit(X_train, y_train)

# Predicción de los resultados del


conjunto de prueba y_pred = regressor.predict(X_test) y_pred (valores de beneficio pronosticados en el

X_test) será así:

Sin embargo, ¿eso es todo lo que hay? ¿Son todas las variables (gasto en I+D, administración,
gasto en marketing, estado) responsables del objetivo (beneficio). Muchos analistas de datos
realizan pasos adicionales para crear mejores modelos y predictores. Podrían estar haciendo
Eliminación hacia atrás (por ejemplo, eliminando variables una por una hasta que queden una o
dos) para que sepamos cuál de las variables está haciendo la mayor contribución a nuestros
resultados (y por lo tanto predicciones más precisas).

Hay otras formas de hacer que el modelo produzca predicciones más precisas. Depende de sus
objetivos (quizás quiera usar todas las variables de datos) y recursos (no solo dinero y poder de
cómputo, sino también limitaciones de tiempo).

Árbol de decisión

El método de regresión discutido hasta ahora es muy bueno si existe una relación lineal entre las
variables independientes y el objetivo. Pero, ¿qué pasa si no hay linealidad (pero las variables
dependientes aún se pueden usar para predecir el objetivo)?

Aquí es donde entran en juego otros métodos, como la regresión del árbol de decisión. Tenga en
cuenta que suena diferente de la regresión lineal simple y la regresión lineal múltiple. No hay
linealidad y funciona de manera diferente. La regresión del árbol de decisión funciona desglosando
el conjunto de datos en subconjuntos cada vez más pequeños. eso Aquí está:
un ilustración mejor explica
Machine Translated by Google

http://chem­eng.utoronto.ca/~datamining/dmc/decision_tree_reg.htm

En lugar de trazar y ajustar una línea, hay nodos de decisión y nodos hoja.
Veamos rápidamente un ejemplo para ver cómo funciona (usando
Position_Salaries.csv): El conjunto de datos: Posición, Nivel,
Salario Business Analyst,
1,45000 Junior Consultant,
2,50000 Senior Consultant,
3,60000 Manager,
4,80000 Country Gerente,
5,110000 Gerente Regional,
6,150000 Socio,
7,200000 Socio Principal,
8,300000 Nivel
C, 9,500000 Director Ejecutivo, 10,1000000
# Regresión del árbol de decisión

# Importación de las bibliotecas


import numpy as np import
matplotlib.pyplot as plt import pandas as pd

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Position_Salaries.csv')
X = conjunto de datos.iloc[:, 1:2].valores
y = conjunto de datos.iloc[:, 2].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el conjunto de


prueba """ de sklearn.cross_validation import train_test_split X_train, X_test,
y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)"""

# Ajuste de la regresión del árbol de decisión al conjunto de datos de


sklearn.tree import DecisionTreeRegressor
Machine Translated by Google

regresor = DecisionTreeRegressor(random_state = 0) regresor.fit(X, y)

# Predicción de un nuevo
resultado y_pred = regresor.predict(6.5)

# Visualización de los resultados de la regresión del árbol de decisión (resolución más alta)
X_grid = np.arange(min(X), max(X), 0.01)
X_grid = X_grid.reshape((len(X_grid), 1)) plt.scatter(X,
y, color = 'red') plt.plot(X_grid,
regressor.predict(X_grid), color = 'blue') plt. title('Truth or Bluff (Decision
Tree Regression)') plt.xlabel('Position level') plt.ylabel('Salary')
plt.show() Cuando ejecute el
código anterior, debería
ver lo siguiente en el Jupyter Computadora portátil:

Tenga en cuenta que no existe una relación lineal entre el nivel de posición y el salario. En
cambio, es algo un resultado paso a paso. Todavía podemos ver la relación entre el nivel del
puesto y el salario, pero se expresa en términos diferentes (enfoque aparentemente no sencillo).

Bosque aleatorio

Como se discutió anteriormente, la regresión del árbol de decisión puede ser útil cuando no hay
mucha linealidad entre una variable independiente y un objetivo. Sin embargo, este enfoque
utiliza el conjunto de datos una vez para obtener resultados. Esto se debe a que, en muchos
casos, siempre es bueno obtener diferentes resultados de diferentes enfoques (por ejemplo,
muchos árboles de decisión) y luego promediar esos resultados.

Para resolver esto, muchos científicos de datos usan Random Forest Regression. Esto es
simplemente una colección o conjunto de diferentes árboles de decisión en los que se utilizan
diferentes subconjuntos aleatorios y luego se promedian los resultados. Es como crear árboles de decisión.
Machine Translated by Google

una y otra vez y luego obtener los resultados de cada uno.

En el código, esto se parecería mucho a esto: # Random Forest Regression

# Importación de las bibliotecas


import numpy as np import
matplotlib.pyplot as plt import pandas as
pd %matplotlib inline

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Position_Salaries.csv')
X = conjunto de datos.iloc[:, 1:2].valores
y = conjunto de datos.iloc[:, 2].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el conjunto


de prueba """ de sklearn.cross_validation import train_test_split X_train,
X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)"""

# Escalado de funciones
"""de sklearn.preprocessing import StandardScaler sc_X = StandardScaler()

tren_X = sc_X.fit_transform(tren_X)
X_test = sc_X.transform(X_test) sc_y =
StandardScaler() y_train =
sc_y.fit_transform(y_train)"""

# Ajuste de Random Forest Regression al conjunto de datos de


sklearn.ensemble import RandomForestRegressor regresor =
RandomForestRegressor(n_estimators = 300, random_state = 0) regresor.fit(X, y)

# Predicción de un nuevo
resultado y_pred = regresor.predict(6.5)

# Visualización de los resultados de Random Forest Regression (resolución más alta)


Machine Translated by Google

X_grid = np.arange(min(X), max(X), 0.01)


X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X, y, color = 'red')
plt.plot(X_grid, regressor.predict(X_grid), color = 'blue') plt.
title('Verdad o farol (Regresión forestal aleatoria)') plt.xlabel('Nivel
del puesto') plt.ylabel('Salario')

plt.mostrar()

Tenga en cuenta que es muy similar a la regresión del árbol de decisión anterior. Después
de todo, Random Forest (del término en sí) es una colección de "árboles". Si no hay mucha
desviación en nuestro conjunto de datos, el resultado debería verse casi igual. Vamos a
ellos para la visualización: compararfácil
Machine Translated by Google

Muchos científicos de datos prefieren Random Forest porque promedia los resultados
que pueden reducir los errores de manera efectiva. Mirando el código parece directo y
simple. Pero detrás de escena hay algoritmos complejos en juego. Es una especie de
caja negra en la que hay una entrada, hay una caja negra y está el resultado. No tenemos
mucha idea de lo que sucede dentro de la caja negra (aunque aún podemos averiguarlo
si profundizamos en las matemáticas). Nos encontraremos con esto una y otra vez a
medida que discutamos más sobre el análisis de datos y el aprendizaje automático.
Machine Translated by Google

11. Clasificación

¿Spam o no spam? Este es uno de los usos y ejemplos más populares de Clasificación. Al
igual que la regresión, la clasificación también se encuentra bajo el aprendizaje supervisado.
Nuestro modelo aprende de los datos etiquetados ("con supervisión"). Luego, nuestro sistema
aplica ese aprendizaje a un nuevo conjunto de datos.

Por ejemplo, tenemos un conjunto de datos con diferentes mensajes de correo electrónico y cada
uno fue etiquetado como Spam o No Spam. Nuestro modelo podría entonces encontrar patrones o
puntos en común entre los mensajes de correo electrónico marcados como Spam. Al realizar una
predicción, nuestro modelo podría intentar encontrar esos patrones y puntos en común en los nuevos
mensajes de correo electrónico.

Hay diferentes enfoques para hacer una clasificación exitosa. Analicemos algunos de ellos:

Regresión logística

En muchas tareas de Clasificación, el objetivo es determinar si es 0 o 1 usando dos variables


independientes. Por ejemplo, dado que la edad y el salario estimado determinan un resultado
como cuándo la persona compró o no, ¿cómo podemos crear con éxito un modelo que
muestre sus relaciones y usarlo para la predicción?

Esto suena confuso, por lo que siempre es mejor mirar un ejemplo:

Aquí nuestras dos variables son Edad y Salario Estimado. Luego, cada punto de datos se
clasifica como 0 (no comprado) o 1 (comprado). Hay una línea que separa los dos (con
leyendas de colores para facilitar la visualización). Este enfoque (Logística
Machine Translated by Google

Regresión) se basa en la probabilidad (por ejemplo, la probabilidad de un punto de datos si es un 0


o un 1).

Al igual que con Regresión en el capítulo anterior en el que existe esta llamada caja negra, el detrás
de escena de Regresión logística para clasificación puede parecer complejo. La buena noticia es
que su implementación es sencilla, especialmente cuando usamos Python y scikit­learn: aquí hay un
vistazo del conjunto de datos primero

('Social_Network_Ads.csv'):

# Regresión logística

# Importación de las bibliotecas


import numpy as np import
matplotlib.pyplot as plt import pandas as
pd %matplotlib inline

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Social_Network_Ads.csv')
X = conjunto de datos.iloc[:, [2, 3]].valores
y = conjunto de datos.iloc[:, 4].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el


conjunto de prueba de sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Escalado de
características de sklearn.preprocessing import StandardScaler sc
= StandardScaler()
tren_X = sc.fit_transform(tren_X)
X_test = sc.transform(X_test)
Machine Translated by Google

# Ajuste de la regresión logística al conjunto de entrenamiento


de sklearn.linear_model import LogisticRegression classifier =
LogisticRegression(random_state = 0) classifier.fit(X_train,
y_train)

# Predecir los resultados del conjunto


de pruebas y_pred = classifier.predict(X_test)

# Hacer la matriz de confusión desde


sklearn.metrics import confusion_matrix cm =
confusion_matrix(y_test, y_pred)

# Visualización de los resultados del conjunto


de entrenamiento de matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train X1, X2
= np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01), np.arange(inicio = X_set[:,
1].min()
­ 1, parada = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),
X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('rojo', 'verde'))) plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max()) para i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0],
X_set[y_set == j, 1], c =
ListedColormap(('rojo', 'verde')) (i), label = j)
plt.title('Regresión logística (Conjunto de entrenamiento)')
plt.xlabel('Edad') plt.ylabel('Salario estimado') plt.legend()
plt.show()

# Visualización de los resultados del


conjunto de prueba de matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test X1,
X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01), np.arange(inicio =
X_set[:,
1].min() ­ 1, parada = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2,
classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('rojo',
'verde'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) para
i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0],
X_set[y_set == j, 1], c = ListedColormap(('rojo',
'verde')) (i), label = j) plt.title('Regresión logística (conjunto de
pruebas)') plt.xlabel('Edad') plt.ylabel('Salario estimado')
plt.legend() plt.show() Cuando ejecute esto, verá
las siguientes
visualizaciones en su Jupyter Notebook:
Machine Translated by Google

Es un paso común aprender primero del conjunto de entrenamiento y luego aplicar ese aprendizaje
al conjunto de prueba (y ver si el modelo es lo suficientemente bueno para predecir el resultado
de nuevos puntos de datos). Después de todo, esta es la esencia del aprendizaje supervisado.
En primer lugar, está la formación y la supervisión. A continuación, la lección se aplicará a nuevas
situaciones.

Como observa en la visualización del conjunto de prueba, la mayoría de los puntos verdes se
encuentran en la región verde (aunque con algunos puntos rojos porque es difícil lograr una
precisión del 100 % en la regresión logística). Esto significa que nuestro modelo podría ser lo
suficientemente bueno para predecir si una persona con cierta edad y salario estimado compraría
o no.

También preste especial atención a los siguientes bloques de código: # Feature Scaling
from sklearn.preprocessing import StandardScaler sc =
StandardScaler()
Machine Translated by Google

tren_X = sc.fit_transform(tren_X)
X_test = sc.transform(X_test) Primero transformamos los datos en el mismo rango o escala
para evitar sesgos o una gran dependencia de una determinada variable. En nuestro conjunto
de datos, el salario estimado se expresa en miles, mientras que la edad se expresa en una
escala más pequeña. Tenemos que hacerlos en el mismo rango para que podamos obtener
un modelo más razonable.

Bueno, aparte de la regresión logística, hay otras formas de realizar tareas de clasificación.
Vamos a discutirlos a continuación.

K­vecinos más cercanos

Observe que la regresión logística parece tener un límite lineal entre 0 y 1. Como resultado,
pierde algunos de los puntos de datos que deberían haber estado en el otro lado.

Afortunadamente, existen modelos no lineales que pueden capturar más puntos de datos de
una manera más precisa. Uno de ellos es mediante el uso de K­Nearest Neighbors.
Funciona al tener un "nuevo punto de datos" y luego contar cuántos vecinos pertenecen a
cada categoría. Si más vecinos pertenecen a la categoría A que a la categoría B, entonces el
nuevo punto debería pertenecer a la categoría A.

Por lo tanto, la clasificación de un determinado punto se basa en la mayoría de sus vecinos


más cercanos (de ahí el nombre). A menudo, esto se puede lograr con el siguiente código:
from sklearn.neighbors import KNeighborsClassifier classifier =
KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) classifier.fit(X_train, y_train)

Nuevamente, en lugar de comenzar desde cero, estamos importando "código preconstruido"


que hace que nuestra tarea sea más rápida y fácil. El detrás de escena se puede aprender y
estudiar. Pero para muchos propósitos, los preconstruidos son lo suficientemente buenos para
hacer modelos razonablemente útiles.

Veamos un ejemplo de cómo implementar esto usando nuevamente el conjunto de datos


'Social_Network_Ads.csv': # K­Nearest Neighbors (K­NN)

# Importación de las bibliotecas


import numpy as np
import matplotlib.pyplot as plt import
pandas as pd %matplotlib
inline
Machine Translated by Google

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Social_Network_Ads.csv')
X = conjunto de datos.iloc[:, [2, 3]].valores
y = conjunto de datos.iloc[:, 4].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el


conjunto de prueba de sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Escalado de
características de sklearn.preprocessing import StandardScaler sc
= StandardScaler()
tren_X = sc.fit_transform(tren_X)
X_test = sc.transform(X_test)

# Ajuste de K­NN al conjunto de entrenamiento


de sklearn.neighbors import KNeighborsClassifier classifier =
KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) classifier.fit(X_train, y_train)

# Predecir los resultados del conjunto de


pruebas y_pred = classifier.predict(X_test)

# Hacer la matriz de confusión desde


sklearn.metrics import confusion_matrix cm =
confusion_matrix(y_test, y_pred)

# Visualización de los resultados del conjunto


de entrenamiento de matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train X1, X2 =
np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01),
np.arange(inicio = X_set[:,
1].min() ­ 1, parada = X_set[:, 1].max() + 1, paso = 0.01))
Machine Translated by Google

plt.contourf(X1, X2, clasificador.predecir(np.array([X1.ravel(),


X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('rojo', 'verde')))
plt.xlim(X1 .min(), X1.max())
plt.ylim(X2.min(), X2.max())
para i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set = = j, 0], X_set[y_set == j, 1], c
= ListedColormap(('rojo', 'verde'))(i), label = j)
plt.title('K­NN (Conjunto de
entrenamiento) ')
plt.xlabel('Edad') plt.ylabel('Salario
estimado')
plt.legend() plt.show()

# Visualización de los resultados


del conjunto de prueba de matplotlib.colors import
ListedColormap X_set, y_set
= X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop
= X_set[ :, 0].max() + 1,
paso = 0.01), np.arange(inicio = X_set[:, 1].min() ­ 1, parada = X_set[:, 1].max() +
1,
step = 0.01)) plt.contourf(X1, clasificador.predecir(np.array([X1.ravel(),
X2, X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('rojo', 'verde')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
para i, j en enumerar(np.unique(y_set)):
plt.scatter (X_set[y_set == j, 0], X_set[y_set == j, 1], c
= ListedColormap(('rojo', 'verde'))(i), etiqueta = j)
plt.title('K­ NN (Conjunto de
prueba)')
plt.xlabel('Edad') plt.ylabel('Salario
estimado')
plt.legend() plt.show() Cuando ejecutamos esto en Jupyter Notebook, deberíamos ver lo siguien
Machine Translated by Google

visualizaciones:

Observe que el límite no es lineal. Este es el caso debido al enfoque diferente de K­Nearest
Neighbors (K­NN). Observe también que todavía hay fallas (por ejemplo, algunos puntos
rojos todavía están en la región verde). Capturarlos a todos puede requerir el uso de un
conjunto de datos más grande u otro método (o tal vez no haya forma de capturarlos todos
porque nuestros datos y modelo nunca serán perfectos).

Clasificación del árbol de decisión

Al igual que con la regresión, muchos científicos de datos también implementan árboles de
decisión en la clasificación. Como se mencionó en el capítulo anterior, crear un árbol de
decisión consiste en dividir un conjunto de datos en subconjuntos cada vez más pequeños
mientras se ramifican (creando un árbol de decisión asociado).

Aquí tienes un ejemplo sencillo para que puedas entenderlo mejor:


Machine Translated by Google

Observe que las ramas y las hojas son el resultado de dividir el conjunto de datos en subconjuntos
más pequeños. En Clasificación, podemos aplicar esto de manera similar a través del siguiente
código (nuevamente usando Social_Network_Ads.csv): # Clasificación del árbol de decisión

# Importación de las bibliotecas


import numpy as np import
matplotlib.pyplot as plt import pandas as
pd %matplotlib inline

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Social_Network_Ads.csv')
X = conjunto de datos.iloc[:, [2, 3]].valores
y = conjunto de datos.iloc[:, 4].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el


conjunto de prueba de sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Escalado de
características de sklearn.preprocessing import StandardScaler sc
= StandardScaler()
tren_X = sc.fit_transform(tren_X)
X_test = sc.transform(X_test)
Machine Translated by Google

# Ajuste de la clasificación del árbol de decisión al conjunto de


entrenamiento de sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterio = 'entropy', random_state = 0) classifier.fit(X_train,
y_train)

# Predecir los resultados del conjunto


de pruebas y_pred = classifier.predict(X_test)

# Hacer la matriz de confusión desde


sklearn.metrics import confusion_matrix cm =
confusion_matrix(y_test, y_pred)

# Visualización de los resultados del conjunto


de entrenamiento de matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train X1, X2
= np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01),
np.arange(inicio = X_set[:,
1].min() ­ 1, parada = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2,

X2.ravel()]).T).reshape(X1.shape), clasificador.predecir(np.array([X1.ravel(),
alpha = 0.75, cmap = ListedColormap(('rojo',
'verde'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) para
i, j en enumerar(np.unique(y_set)):
plt.scatter (X_set[y_set == j, 0],
X_set[y_set == j, 1], c = ListedColormap(('rojo',
'verde'))(i), label = j) plt.title('Árbol de decisión Clasificación
(Conjunto de entrenamiento)') plt.xlabel('Edad') plt.ylabel('Salario
estimado') plt.legend() plt.show()

# Visualización de los resultados del


conjunto de prueba de matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test X1,
X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :,
Machine Translated by Google

0].max() + 1, paso = 0.01),


np.arange(inicio = X_set[:, 1].min() ­ 1, parada = X_set[:, 1].max() + 1, paso =
0.01))
plt.contourf(X1, X2, clasificador.predecir(np.array([X1.ravel(),
X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('rojo', 'verde'))) plt.
xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
para i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set [y_set == j, 0], X_set[y_set == j, 1], c
= ListedColormap(('rojo', 'verde'))(i), label = j)
plt.title('Clasificación del árbol de decisión ( Test
set)')
plt.xlabel('Edad') plt.ylabel('Salario
estimado')
plt.legend() plt.show() La diferencia más importante está en este bloque de código:
from sklearn.tree import Clasificador
DecisionTreeClassifier = DecisionTreeClassifier(criterio = 'entropía',
random_state = 0) classifier.fit(X_train, y_train) Cuando ejecutamos el código completo (incluid

visualización), veremos esto:


Machine Translated by Google

Observe la gran diferencia en comparación con la regresión logística y los vecinos más
cercanos (K­NN). En estos dos últimos, solo hay dos límites. Pero aquí, en nuestra clasificación
del árbol de decisión, hay puntos fuera de la región roja principal que caen dentro de las "mini
regiones rojas". Como resultado, nuestro modelo pudo capturar puntos de datos que de otro
modo serían imposibles (por ejemplo, cuando se usa la regresión logística).

Clasificación aleatoria de bosques

Recuerde del capítulo anterior sobre Regresión que un Random Forest es una colección o
conjunto de muchos árboles de decisión. Esto también se aplica a la clasificación en la que se
utilizan muchos árboles de decisión y se promedian los resultados.
# Clasificación aleatoria de bosques

# Importación de las bibliotecas


import numpy as np import
matplotlib.pyplot as plt import pandas as pd
%matplotlib inline

# Importación del conjunto de


datos conjunto de datos = pd.read_csv('Social_Network_Ads.csv')
X = conjunto de datos.iloc[:, [2, 3]].valores
y = conjunto de datos.iloc[:, 4].valores

# Dividir el conjunto de datos en el conjunto de entrenamiento y el conjunto


de prueba de sklearn.model_selection import train_test_split X_train,
X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Escalado de
características de sklearn.preprocessing import StandardScaler
Machine Translated by Google

sc = escalador estándar()
tren_X = sc.fit_transform(tren_X)
X_test = sc.transform(X_test)

# Ajuste de la clasificación aleatoria de bosques al conjunto de


entrenamiento de sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 10, criterio = 'entropy', random_state = 0) classifier.fit(X_train, y_train)

# Predecir los resultados del conjunto


de pruebas y_pred = classifier.predict(X_test)

# Hacer la matriz de confusión desde


sklearn.metrics import confusion_matrix cm =
confusion_matrix(y_test, y_pred)

# Visualización de los resultados del conjunto


de entrenamiento de matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train X1, X2
= np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01), np.arange(inicio = X_set[:,
1].min()
­ 1, parada = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),
X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('rojo', 'verde'))) plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max()) para i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0],
X_set[y_set == j, 1], c =
ListedColormap(('rojo', 'verde')) (i), label = j)
plt.title('Clasificación forestal aleatoria (Conjunto de entrenamiento)')
plt.xlabel('Edad') plt.ylabel('Salario estimado') plt.legend()
plt.show()

# Visualización de los resultados del


conjunto de prueba de matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test X1,
X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() ­ 1, stop = X_set[ :, 0].max() + 1, paso = 0.01), np.arange(inicio =
X_set[:,
1].min() ­ 1, parada = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2,
classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('rojo',
'verde'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) para
i, j en enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0],
X_set[y_set == j, 1], c = ListedColormap(('rojo',
'verde')) (i), etiqueta = j) plt.title('Clasificación aleatoria de bosques
(conjunto de prueba)') plt.xlabel('Edad')
Machine Translated by Google

plt.ylabel('Salario estimado')
plt.legend()
plt.show() Cuando ejecutemos el código, veremos lo siguiente:

Observe las similitudes entre el árbol de decisión y el bosque aleatorio. Después de


todo, adoptan un enfoque similar al dividir un conjunto de datos en subconjuntos más
pequeños. La diferencia es que Random Forest utiliza la aleatoriedad y promedia
diferentes árboles de decisión para generar un modelo más preciso.
Machine Translated by Google

12. Agrupación

En los capítulos anteriores, hemos discutido el aprendizaje supervisado (regresión y clasificación).


Hemos aprendido a aprender a partir de datos "etiquetados". Ya había respuestas correctas y nuestro
trabajo en ese entonces era aprender cómo llegar a esas respuestas y aplicar el aprendizaje a nuevos
datos.

Pero en este capítulo será diferente. Esto se debe a que comenzaremos con el aprendizaje no
supervisado en el que no se dieron respuestas correctas ni etiquetas. En otras palabras, solo hay
datos de entrada pero no hay salida. No hay supervisión cuando se aprende de los datos.

De hecho, se dice que el aprendizaje no supervisado encarna la esencia de la inteligencia artificial.


Eso es porque no hay mucha supervisión o intervención humana.
Como resultado, los algoritmos se quedan solos para descubrir cosas a partir de los datos.
Este es especialmente el caso de la agrupación en clústeres, donde el objetivo es revelar agregados
orgánicos o "agrupaciones" en los datos.

Objetivos y usos de la agrupación

Esta es una forma de aprendizaje no supervisado donde no hay etiquetas o, en muchos casos, no hay
respuestas realmente correctas. Eso es porque no había respuestas correctas en primer lugar. Solo
tenemos un conjunto de datos y nuestro objetivo es ver las agrupaciones que se han formado
orgánicamente.

No estamos tratando de predecir un resultado aquí. El objetivo es buscar estructuras en los datos. En
otras palabras, estamos "dividiendo" el conjunto de datos en grupos en los que los miembros tienen
algunas similitudes o proximidades. Por ejemplo, cada cliente de comercio electrónico puede pertenecer
a un grupo en particular (por ejemplo, dado su nivel de ingresos y gastos). Si hemos recopilado
suficientes puntos de datos, es probable que haya agregados.

Al principio, los puntos de datos parecerán dispersos (sin ningún patrón). Pero una vez que aplicamos
un algoritmo de agrupamiento, los datos de alguna manera tendrán sentido porque podremos visualizar
fácilmente los grupos o conglomerados. Además de descubrir las agrupaciones naturales, los
algoritmos de agrupamiento también pueden revelar valores atípicos para la detección de anomalías
(también hablaremos de esto más adelante).

La agrupación se aplica regularmente en los campos de marketing, biología, estudios de terremotos,


fabricación, resultados de sensores, categorización de productos y
Machine Translated by Google

otras áreas científicas y empresariales. Sin embargo, no hay reglas escritas en piedra cuando se
trata de determinar la cantidad de clústeres y qué punto de datos debe pertenecer a un
determinado clúster. Depende de nuestro objetivo (o si los resultados son lo suficientemente
útiles). Aquí es también donde entra en juego nuestra experiencia en un dominio particular.

Al igual que con otros algoritmos y herramientas de análisis de datos y aprendizaje automático,
todavía se trata de nuestro conocimiento del dominio. De esta manera podemos ver y analizar
los datos en el contexto adecuado. Incluso con las herramientas y técnicas más avanzadas, el
contexto y el objetivo siguen siendo cruciales para dar sentido a los datos.

Agrupación de K­Means

Una forma de dar sentido a los datos a través de la agrupación es mediante K­Means. Es uno de
los algoritmos de agrupamiento más populares debido a su simplicidad. Funciona mediante la
partición de objetos en k clústeres (número de clústeres que especificamos) en función de la
similitud de características.

Tenga en cuenta que el número de grupos es arbitrario. Podemos ponerlo en cualquier número
que queramos. Sin embargo, es bueno hacer que el número de clústeres sea suficiente para que
nuestro trabajo sea significativo y útil. Analicemos un ejemplo para ilustrar esto.

Aquí tenemos datos sobre los clientes del centro comercial ('Mall_Customers.csv') donde se
indica información sobre su sexo, edad, ingresos anuales y puntuación de gastos. Cuanto mayor
sea el puntaje de gasto (de 100), más gastarán en el centro comercial.

Para comenzar, importamos las bibliotecas necesarias: import numpy as np


import matplotlib.pyplot as plt import
pandas as pd %matplotlib
inline Luego importamos los datos y echamos un vistazo: dataset =
pd.read_csv('Mall_Customers.csv') dataset. cabeza(10)
Machine Translated by Google

En este ejemplo, estamos más interesados en agrupar a los Clientes de acuerdo con su
Puntuación anual de ingresos y gastos.
X = dataset.iloc[:, [3, 4]].values Nuestro objetivo aquí es revelar los clústeres y ayudar al departamento de
marketing a formular sus estrategias. Por ejemplo, podríamos subdividir a los Clientes en 5 grupos distintos:

1. Ingreso anual medio, puntaje de gasto medio 2. Ingreso


anual alto, puntaje de gasto bajo 3. Ingreso anual
bajo, puntaje de gasto bajo 4. Ingreso anual bajo,
puntaje de gasto alto 5. Ingreso anual alto, puntaje
de gasto alto
Vale la pena prestar atención al grupo n.° 2 (ingreso anual alto, puntaje de gasto bajo). Si
hay una cantidad considerable de clientes que pertenecen a este grupo, podría significar
una gran oportunidad para el centro comercial. Estos clientes tienen un ingreso anual alto
y, sin embargo, están gastando o usando la mayor parte de su dinero en otros lugares (no
en el centro comercial). Si pudiéramos saber que son suficientes, el departamento de
marketing podría formular estrategias específicas para atraer al grupo n.º 2 para que
compre más en el centro comercial.

Aunque el número de conglomerados suele ser arbitrario, hay formas de encontrar ese
número óptimo. Una de estas formas es a través del método Elbow y WCSS (sumas de
cuadrados dentro de un grupo). Aquí está el código para lograr esto: from sklearn.cluster
import KMeans wcss = [] for i in
range(1,
11): kmeans =
KMeans(n_clusters = i, init = 'k­means++', random_state = 42) kmeans.fit (X)
Machine Translated by Google

wcss.append(kmeans.inertia_)
plt.plot(rango(1, 11), wcss)
plt.title('El método del codo')
plt.xlabel('Número de grupos')
plt.ylabel('WCSS')

plt.mostrar()

Observe que el "codo" apunta a 5 (número de grupos). Coincidentemente, este número


también era el número "deseado" de grupos que subdividirán el conjunto de datos de
acuerdo con su puntaje anual de ingresos y gastos.

Después de determinar la cantidad óptima de clústeres, podemos proceder a aplicar K­


Means al conjunto de datos y luego realizar la visualización de datos: kmeans =
KMeans(n_clusters = 5, init = 'k­means++', random_state = 42) y_kmeans =
kmeans. fit_predict(X) plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c =
'red', label = 'Cluster 1') plt.scatter(X [y_kmeans == 1, 0], X[y_kmeans
== 1, 1], s = 100, c = 'azul', etiqueta = 'Cluster 2') plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans
== 2, 1], s = 100, c =
'verde', etiqueta = 'Cluster 3') plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1] , s = 100,
c = 'cian', etiqueta =
'Cluster 4') plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 100, c = 'magenta ',
etiqueta = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c =
'amarillo', label = 'Centroids') plt.title
('Conglomerados de clientes') plt.xlabel('Ingreso anual (k$)')
Machine Translated by Google

plt.ylabel('Puntuación de gastos (1­100)')


plt.legend()

plt.mostrar()

Ahí lo tenemos. Tenemos 5 grupos y el Grupo n.° 2 (puntos azules, ingreso anual alto y puntaje de
gasto bajo) es lo suficientemente significativo. Podría valer la pena que el departamento de marketing
se centre en ese grupo.

Observe también los centroides (los puntos amarillos). Esta es una parte de cómo funciona el
agrupamiento de K­Means. Es un enfoque iterativo donde los puntos aleatorios se colocan
inicialmente hasta que convergen a un mínimo (por ejemplo, se minimiza la suma de las distancias).

Como se mencionó anteriormente, todo puede ser arbitrario y puede depender en gran medida de
nuestro juicio y posible aplicación. Podemos establecer n_clusters en cualquier cosa que no sea 5.
Solo usamos el método Elbow para que podamos tener una base más sólida y consistente para la
cantidad de grupos. Pero aún depende de nuestro juicio qué debemos usar y si los resultados son
lo suficientemente buenos para nuestra aplicación.

Detección de anomalías

Aparte de revelar los grupos naturales, también es un caso común ver si hay puntos obvios que no
pertenecen a esos grupos. Este es el corazón de la detección de anomalías o valores atípicos en
los datos.

Esta es una tarea crucial porque cualquier gran desviación de lo normal puede causar una catástrofe.
¿Es fraudulenta una transacción con tarjeta de crédito? ¿Es sospechosa una actividad de inicio de
sesión (es posible que esté iniciando sesión desde una ubicación o dispositivo totalmente diferente)?
¿Se mantienen constantemente los niveles de temperatura y presión en un tanque (cualquier valor
atípico podría causar explosiones y detener las operaciones)? ¿Es un determinado punto de datos
causado por una entrada o medición incorrecta (por ejemplo, quizás se usaron pulgadas en lugar de
Machine Translated by Google

centímetros)?

Con una visualización de datos sencilla, podemos ver inmediatamente los valores atípicos.
Luego podemos evaluar si estos valores atípicos presentan una amenaza importante. También
podemos ver y evaluar esos valores atípicos al referirnos a la media y la desviación estándar.
Si un punto de datos se desvía por una desviación estándar de la media, podría ser una anomalía.

Aquí también es donde entra en juego nuestra experiencia en el campo. Si hay una anomalía,
¿qué tan serias son las consecuencias? Por ejemplo, puede haber miles de transacciones de
compra en una tienda en línea todos los días. Si somos demasiado estrictos con nuestra
detección de anomalías, muchas de esas transacciones serán rechazadas (lo que resulta en
pérdida de ventas y ganancias). Por otro lado, si permitimos mucha libertad en nuestra detección
de anomalías, nuestro sistema aprobaría más transacciones.
Sin embargo, esto podría generar quejas más adelante y posiblemente la pérdida de clientes a
largo plazo.

Tenga en cuenta aquí que no se trata solo de algoritmos, especialmente cuando se trata de
casos comerciales. Cada campo puede requerir un nivel de sensibilidad diferente. Siempre hay
una compensación y cualquiera de las opciones podría ser costosa. Es cuestión de probar y
saber si nuestro sistema de detección de anomalías es suficiente para nuestra aplicación.
Machine Translated by Google

13. Aprendizaje de reglas de asociación

Esta es una continuación del aprendizaje no supervisado. En el capítulo anterior, descubrimos


patrones naturales y agregados en Mall_Customers.csv. No hubo mucha supervisión y orientación
sobre cómo deberían ser las "respuestas correctas". Hemos permitido que los algoritmos descubran
y estudien los datos. Como resultado, podemos obtener información de los datos que podemos usar.

En este capítulo nos centraremos en el aprendizaje de reglas de asociación. El objetivo aquí es


descubrir cómo los elementos están "relacionados" o asociados entre sí. Esto puede ser muy útil
para determinar qué productos deben colocarse juntos en las tiendas de comestibles. Por ejemplo,
es posible que muchos clientes siempre estén comprando pan y leche juntos. Luego podemos
reorganizar algunos estantes y productos para que el pan y la leche estén cerca uno del otro.

Esta también puede ser una buena manera de recomendar productos relacionados a los clientes.
Por ejemplo, muchos clientes pueden comprar pañales en línea y luego comprar libros sobre la
crianza de los hijos. Estos dos productos tienen fuertes asociaciones porque marcan la transición de
la vida del cliente (tener un bebé). Además, si notamos un aumento en la demanda de pañales,
también podríamos prepararnos con libros para padres.
Esta es una buena manera de pronosticar y prepararse de alguna manera para las demandas futuras
comprando suministros por adelantado.

En las compras de comestibles o cualquier negocio involucrado en transacciones minoristas y


mayoristas, el aprendizaje de reglas de asociación puede ser muy útil en la optimización (animar a
los clientes a comprar más productos) y hacer coincidir la oferta con la demanda (por ejemplo, la
mejora de las ventas en un producto también indica lo mismo para otro producto relacionado).
producto).

Explicación

Entonces, ¿cómo determinamos el "nivel de relación" de los elementos entre sí y creamos grupos
útiles a partir de él? Un enfoque directo consiste en contar las transacciones que involucran un
conjunto particular. Por ejemplo, tenemos las siguientes transacciones:

Transacción compras

1 Huevo, jamón, perrito caliente


Machine Translated by Google

2 huevo, jamon, leche

3 huevo, manzana, cebolla

4 Cerveza, leche, jugo

Nuestro conjunto objetivo es {Huevo, jamón}. Observe que esta combinación de compras ocurrió en 2
transacciones (Transacciones 1 y 2). En otras palabras, esta combinación ocurrió el 50% de las veces.
Es un ejemplo simple, pero si estamos estudiando 10 000 transacciones y el 50 % sigue siendo el caso,
por supuesto que existe una fuerte asociación entre el huevo y el jamón.

Entonces podríamos darnos cuenta de que vale la pena juntar huevos y jamones (u ofrecerlos en un
paquete) para facilitar la vida de nuestros clientes (mientras también hacemos más ventas). Cuanto
mayor sea el porcentaje de nuestro objetivo establecido en el total de transacciones, mejor. O bien, si el
porcentaje aún cae por debajo de nuestro umbral arbitrario (por ejemplo, 30 %, 20 %), aún podríamos
prestar atención a un conjunto en particular y hacer ajustes a nuestros productos y ofertas.

Además de calcular el porcentaje real, otra forma de saber qué tan "popular" es un conjunto de elementos
es trabajar con probabilidades. Por ejemplo, ¿cuál es la probabilidad de que el producto X aparezca con
el producto Y? Si hay una alta probabilidad, de alguna manera podemos decir que los dos productos
están estrechamente relacionados.

Esas son formas de estimar la "relación" o el nivel de asociación entre dos productos. Uno o una
combinación de enfoques podría ser suficiente para ciertas aplicaciones. Quizá trabajar con probabilidades
produzca mejores resultados. O bien, priorizar un conjunto de elementos muy popular (alto porcentaje de
ocurrencia) da como resultado más transacciones.

Al final, podría tratarse de probar diferentes enfoques (y combinaciones de productos) y luego ver cuál
produce los resultados óptimos. Incluso podría darse el caso de que una combinación de dos productos
con una relación muy baja permita que se realicen más compras.

A priori

Cualquiera que sea el caso, exploremos cómo se aplica todo al mundo real. Llamemos al problema
"Optimización de la canasta de mercado". Nuestro objetivo aquí es generar una lista de
Machine Translated by Google

conjuntos (conjuntos de productos) y su correspondiente nivel de relación o apoyo entre


sí. Aquí hay un vistazo del conjunto de datos para darle una mejor idea: camarones,
almendras, aguacate, mezcla de verduras, uvas verdes, harina integral, ñame, requesón,
bebida energética, jugo de tomate, yogur bajo en grasa, té verde, miel, ensalada ,agua
mineral,salmón,jugo antioxidante,licuado helado,espinacas,aceite de oliva
hamburguesas,albóndigas,huevos
chutney de pavo,agua
mineral
de
aguacate,leche,barra energética,arroz integral,té verde yogur bajo
en grasa pasta
integral,papas fritas sopa, crema
ligera, chalotes vegetales
congelados, espaguetis, té verde papas
fritas Se enumeran de acuerdo con las transacciones donde aparecen.
Por ejemplo, en la primera transacción el cliente compró diferentes cosas (desde
camarones hasta aceite de oliva). En la segunda transacción, el cliente compró
hamburguesas, albóndigas y huevos.

Como antes, importemos la biblioteca/bibliotecas necesarias para que podamos trabajar


con los datos: import pandas
as pd dataset = pd.read_csv('Market_Basket_Optimisation.csv', header = None)
A continuación, agregamos los elementos en una lista para que podamos trabajar en
ellos mucho más fácilmente. Podemos lograr esto inicializando una lista vacía y luego
ejecutando un bucle for (¿todavía recuerdas cómo
hacer todo esto?):
transacciones = [] for i in range(0, 7501): transacciones.append([str(dataset.values [i,j])
for j in range(0, 20)]) Después de hacer eso, deberíamos generar una lista de "productos
relacionados" con su correspondiente nivel de soporte o relación. Una forma de lograr
esto es mediante la implementación del algoritmo Apriori (para el aprendizaje de reglas de asociación)
Afortunadamente, no tenemos que escribir nada desde cero.

Podemos usar Apyori, que es una implementación simple del algoritmo Apriori. encuentra
poder aquí referencia: Tú lo https://pypi.org/project/apyori/#description
para su

Está preconstruido para nosotros y casi listo para nuestro propio uso. Es similar a cómo
usamos scikit­learn, pandas y numpy. En lugar de empezar de cero, ya
Machine Translated by Google

tenemos bloques de código que simplemente podemos implementar. Tenga en cuenta que
codificar todo desde cero requiere mucho tiempo y es un desafío técnico.

Para implementar Apyori, podemos importarlo de manera similar a como importamos otras
bibliotecas: from apyori import apriori A continuación, configuramos las reglas (los niveles de
relación mínima) para que de alguna manera podamos generar una lista útil de elementos relacionados.
Esto se debe a que casi dos elementos cualesquiera pueden tener algún nivel de relación. El
objetivo aquí es incluir solo la lista que podría sernos útil.

rules = apriori(transactions, min_support = 0.003, min_confidence = 0.2, min_lift = 3, min_length


= 2) Bueno, esa es la implementación de Apriori usando Apyori. El siguiente paso es generar y
ver los resultados. Podemos lograr esto usando el siguiente bloque de código: resultados =
lista(reglas) lista_resultados = [] for i in range(0, len(resultados)):

lista_resultados.append('REGLA:\t'
+ str(resultados[i ][0]) + '\nSUPPORT:\t' + str(results[i][1])) print (results_list) Cuando ejecute
todo el código en
Jupyter Notebook, verá algo como esto:

Es desordenado y casi incomprensible. Pero si lo ejecuta en Spyder (otro paquete útil de ciencia
de datos incluido en la instalación de Anaconda), el resultado será
Machine Translated by Google

mira un poco más ordenado:

Fíjate que hay diferentes conjuntos de elementos con su correspondiente “Soporte”. Cuanto mayor
sea el Soporte, de alguna manera podemos decir que mayor será la relación. Por ejemplo, la
crema ligera y el pollo a menudo van juntos porque las personas podrían estar usando los dos
para cocinar algo. Otro ejemplo está en el itemset con un índice de 5 (salsa de tomate y carne
molida). Es posible que estos dos artículos siempre vayan juntos en la bolsa de la compra porque
también se usan para preparar una comida o una receta.

Esta es solo una introducción al aprendizaje de reglas de asociación. El objetivo aquí era explorar
las posibles aplicaciones en escenarios del mundo real, como la optimización de la cesta de la
compra. Hay otras formas más sofisticadas de hacer esto. Pero, en general, se trata de determinar
el nivel de relación entre los elementos y luego evaluar si es útil o lo suficientemente bueno.
Machine Translated by Google

14. Aprendizaje por refuerzo

Tenga en cuenta que en los capítulos anteriores, la atención se centra en trabajar con información
pasada y luego extraer conocimientos de ella. En otras palabras, estamos mucho más centrados en el
pasado que en el presente y el futuro.

Pero para que la ciencia de datos y el aprendizaje automático sean verdaderamente útiles, los
algoritmos y sistemas deberían funcionar en situaciones en tiempo real. Por ejemplo, necesitamos
sistemas que aprendan en tiempo real y se ajusten en consecuencia para maximizar las recompensas.

¿Qué es el aprendizaje por refuerzo?

Aquí es donde entra en juego el aprendizaje por refuerzo (RL). En pocas palabras, RL se trata de
reforzar los comportamientos correctos o deseados a medida que pasa el tiempo. Una recompensa
por cada comportamiento correcto y un castigo en caso contrario.

Recientemente se implementó RL para vencer a los campeones mundiales en el juego de Go y jugar


con éxito a varios videojuegos de Atari (aunque el aprendizaje por refuerzo era más sofisticado e
incorporaba un aprendizaje profundo). A medida que el sistema aprende del refuerzo, pudo lograr un
objetivo o maximizar la recompensa.

Un ejemplo simple es la optimización de las tasas de clics (CTR) de los anuncios en línea. Tal vez
tenga 10 anuncios que esencialmente digan lo mismo (tal vez las palabras y los diseños sean
ligeramente diferentes entre sí). Al principio, desea saber qué anuncio funciona mejor y produce el
CTR más alto. Después de todo, más clics podrían significar más prospectos y clientes para su negocio.

Pero si desea maximizar el CTR, ¿por qué no realizar los ajustes a medida que se ejecutan los
anuncios? En otras palabras, no espere a que se agote todo su presupuesto publicitario para saber
cuál funcionó mejor. En su lugar, averigüe qué anuncios funcionan mejor mientras se ejecutan. Realice
ajustes desde el principio para que luego solo se muestren a los prospectos los anuncios de mayor
rendimiento.

Es muy similar a un famoso problema en la teoría de la probabilidad sobre el problema del bandido
con múltiples brazos. Supongamos que tiene un recurso limitado (por ejemplo, un presupuesto
publicitario) y algunas opciones (10 variantes de anuncios). ¿Cómo asignará su recurso entre esas
opciones para que pueda maximizar su ganancia (por ejemplo, CTR óptimo)?

Primero, tienes que “explorar” y probar los anuncios uno por uno. Por supuesto, si observa que el
Anuncio 1 funciona excepcionalmente bien, lo "explotará" y lo publicará durante el resto de la campaña.
No necesita gastar su dinero en rendimiento inferior
Machine Translated by Google

anuncios Apéguese al ganador y explote continuamente su desempeño.

Sin embargo, hay una trampa. Al principio, el anuncio 1 podría estar funcionando bien, por lo que
estamos tentados a usarlo una y otra vez. Pero, ¿qué pasa si el Anuncio 2 se pone al día y
dejamos que las cosas se desarrollen? ¿El Anuncio 2 producirá mayores ganancias? Nunca lo
sabremos porque el rendimiento del Anuncio 1 ya fue explotado.

Siempre habrá compensaciones en muchos proyectos de análisis de datos y aprendizaje


automático. Es por eso que siempre se recomienda establecer objetivos de rendimiento de
antemano en lugar de preguntarse qué pasaría después. Incluso en las técnicas y algoritmos más
sofisticados, siempre existen compensaciones y restricciones.

Comparación con el aprendizaje supervisado y no supervisado

Tenga en cuenta que la definición de aprendizaje por refuerzo no encaja exactamente en el


aprendizaje supervisado o no supervisado. Recuerde que el aprendizaje supervisado se trata de
aprender a través de la supervisión y la formación. Por otro lado, el aprendizaje no supervisado en
realidad está revelando o descubriendo información a partir de datos no estructurados (sin
supervisión, sin etiquetas).

Una diferencia clave en comparación con RL es maximizar la recompensa establecida, aprender


de la interacción del usuario y la capacidad de actualizarse en tiempo real. Recuerde que RL se
trata primero de explorar y explotar. Por el contrario, tanto el aprendizaje supervisado como el no
supervisado pueden tener más que ver con el aprendizaje pasivo a partir de datos históricos (no
en tiempo real).

Hay un límite fino entre los 3 porque todos ellos todavía están preocupados por la optimización de
una forma u otra. Cualquiera que sea el caso, los 3 tienen aplicaciones útiles tanto en entornos
científicos como comerciales.

Aplicación del aprendizaje por refuerzo

RL es particularmente útil en muchos escenarios comerciales, como la optimización de las tasas


de clics. ¿Cómo podemos maximizar el número de clics para un título? Tenga en cuenta que las
noticias a menudo tienen una vida útil limitada en términos de relevancia y popularidad. Dado ese
recurso limitado (tiempo), ¿cómo podemos mostrar inmediatamente el titular con mejor rendimiento?

Este también es el caso de maximizar el CTR de los anuncios en línea. Tenemos un presupuesto
publicitario limitado y queremos sacarle el máximo partido. Exploremos un ejemplo (usando el
Machine Translated by Google

data from Ads_CTR_Optimisation.csv) para ilustrar mejor la idea: como de costumbre,


primero importamos las bibliotecas necesarias para poder trabajar con nuestros datos
(y también para la visualización de datos) import
matplotlib.pyplot as plt
import pandas as pd %matplotlib inline #so las gráficas se pueden mostrar en nuestro
Jupyter Notebook. Luego, tomamos el conjunto
a de datos y =
echamos un vistazo .

En cada ronda, se muestran los anuncios y se indica en cuál/es se hizo clic (0 si no


se hizo clic, 1 si se hizo clic). Como se discutió anteriormente, el objetivo es explorar
primero, elegir el ganador y luego explotarlo.

Una forma popular de lograr esto es por Thompson Sampling. Simplemente, aborda
el dilema de exploración­explotación (tratar de lograr un equilibrio) muestreando o
probando las acciones prometedoras e ignorando o descartando las acciones que
probablemente tendrán un rendimiento inferior. El algoritmo funciona con probabilidades
y esto se puede expresar en código a través de lo siguiente:
import
random
N = 10000 d = 10
ads_selected = [] number_of_rewards_1
= [0] * d number_of_rewards_0 = [0]
* d total_reward =
0 for n in range( 0, N):

anuncio = 0 max_random = 0
Machine Translated by Google

for i in range(0, d):


random_beta = random.betavariate(numbers_of_rewards_1[i] + 1, number_of_rewards_0[i] +
1) if random_beta > max_random:
max_random = random_beta ad = i
ads_selected.append(ad) recompensa
=
conjunto de datos .valores[n,
anuncio] si recompensa == 1:

números_de_recompensas_1[anuncio] = números_de_recompensas_1[anuncio]
+1
más: números_de_recompensas_0[anuncio] =
números_de_recompensas_0[anuncio] + 1 recompensa_total = recompensa_total + recompensa
Cuando ejecutamos y visualizamos
el código : plt.hist(anuncios_seleccionados)
plt.title('Histograma
de selecciones de anuncios') plt.xlabel('Anuncios') plt.ylabel('Número de veces que se seleccionó cada anunci

plt.mostrar()

Tenga en cuenta que la implementación del muestreo de Thompson puede ser muy compleja.
Es un algoritmo interesante que es muy popular en la optimización de anuncios en línea,
recomendación de artículos de noticias, surtido de productos y otras aplicaciones comerciales.

Hay otros algoritmos y heurísticas interesantes como Upper Confidence Bound. El objetivo es
ganar mientras se aprende. En lugar de un análisis posterior, nuestro algoritmo puede realizar
y ajustar en tiempo real. Esperamos maximizar la recompensa tratando de equilibrar la
compensación entre exploración y explotación (maximizar el rendimiento inmediato o "aprender
más" para mejorar el futuro).
Machine Translated by Google

actuación). Es un tema interesante en sí mismo y si desea profundizar más,


puede leer el siguiente tutorial de muestreo de Thompson de Stanford:
https://web.stanford.edu/~bvr/pubs/TS_Tutorial.pdf
Machine Translated by Google

15. Redes neuronales artificiales

Para nosotros los humanos es muy fácil para nosotros reconocer objetos y dígitos. También es
fácil para nosotros conocer el significado de una oración o fragmento de texto. Sin embargo, es
un caso completamente diferente con las computadoras. Lo que es automático y trivial para
nosotros podría ser una tarea enorme para las computadoras y los algoritmos.

Por el contrario, las computadoras pueden realizar cálculos matemáticos largos y complejos,
mientras que los humanos somos terribles en eso. Es interesante que las capacidades de los
humanos y las computadoras sean opuestas o complementarias.

Pero el siguiente paso natural es imitar o incluso superar las capacidades humanas. Es como si
el objetivo fuera reemplazar a los humanos en lo que mejor saben hacer. En un futuro cercano,
es posible que no podamos notar la diferencia si con quién estamos hablando es humano o no.

Una idea de cómo funciona el cerebro

Para lograr esto, una de las formas más populares y prometedoras es mediante el uso de redes
neuronales artificiales. Estos están vagamente inspirados en cómo funcionan nuestras neuronas
y cerebros. El modelo predominante sobre cómo funciona nuestro cerebro es que las neuronas
reciben, procesan y envían señales (pueden conectarse con otras neuronas, recibir información
de los sentidos o dar una salida). Aunque no es una comprensión 100% precisa sobre el cerebro
y las neuronas, este modelo es lo suficientemente útil para muchas aplicaciones.

Este es el caso de las redes neuronales artificiales en las que hay neuronas (colocadas en una o
pocas capas por lo general) que reciben y envían señales. Aquí hay una ilustración básica de
Playground: de TensorFlow
Machine Translated by Google

Observe que comenzó con las funciones (las entradas) y luego se conectan con 2 "capas
ocultas" de neuronas. Finalmente, hay una salida en la que los datos ya se procesaron de forma
iterativa para crear un modelo útil o una generalización.

En muchos casos, la forma en que se utilizan las redes neuronales artificiales (ANN) es muy
similar a cómo funciona el aprendizaje supervisado. En ANN, a menudo tomamos una gran
cantidad de ejemplos de capacitación y luego desarrollamos un sistema que permite aprender
de dichos ejemplos. Durante el aprendizaje, nuestra ANN infiere automáticamente reglas para
reconocer una imagen, texto, audio o cualquier otro tipo de datos.

Como ya se habrá dado cuenta, la precisión del reconocimiento depende en gran medida de la
calidad y cantidad de nuestros datos. Después de todo, es basura que entra basura que sale.
Las redes neuronales artificiales aprenden de lo que se alimenta. Todavía podríamos mejorar la
precisión y el rendimiento a través de otros medios además de mejorar la calidad y la cantidad
de datos (como la selección de características, el cambio de la tasa de aprendizaje y la
regularización).

Potencial y Restricciones

La idea detrás de las redes neuronales artificiales es en realidad antigua. Pero recientemente
ha experimentado un resurgimiento masivo que muchas personas (lo entiendan o no) hablan de
ello.

¿Por qué volvió a ser popular? Es debido a la disponibilidad de datos y los desarrollos
tecnológicos (especialmente el aumento masivo en computación
Machine Translated by Google

fuerza). En ese entonces, crear e implementar una ANN podría ser poco práctico en términos
de tiempo y otros recursos.

Pero todo cambió debido a más datos y mayor poder computacional. Es muy probable que
pueda implementar una red neuronal artificial directamente en su computadora de escritorio
o portátil. Y también, detrás de escena, las ANN ya están trabajando para brindarle los
resultados de búsqueda más relevantes, los productos más probables que comprará o los
anuncios más probables en los que hará clic. Las ANN también se utilizan para reconocer
el contenido de audio, imagen y video.

Muchos expertos dicen que solo estamos arañando la superficie y que las redes neuronales
artificiales todavía tienen mucho potencial. Es como cuando se realizó un experimento sobre
la electricidad (realizado por Michael Faraday) y nadie tenía idea de qué uso se obtendría
de ella. Según cuenta la historia, Faraday dijo que el primer ministro del Reino Unido pronto
podría gravarlo. Hoy en día, casi todos los aspectos de nuestras vidas dependen directa o
indirectamente de la electricidad.

Este también podría ser el caso de las redes neuronales artificiales y el apasionante campo
del aprendizaje profundo (un subcampo del aprendizaje automático que se centra más en
las RNA).

Aquí hay un ejemplo

Con TensorFlow Playground podemos tener una idea rápida de cómo funciona todo. Vaya a
su sitio web (https://playground.tensorflow.org/) y tome nota de las diferentes palabras allí,
como Tasa de aprendizaje, Activación, Regularización, Funciones y Capas ocultas. Al
principio se verá así (no hiciste clic en nada

todavía):

Haga clic en el botón "Reproducir" (esquina superior izquierda) y vea la genial animación
(preste mucha atención a la Salida en el extremo derecho. Después de un tiempo, se verá así:
Machine Translated by Google

Las conexiones se hicieron más claras entre las funciones, las capas ocultas y la salida.
También observe que la salida tiene una región azul clara (mientras que el resto cae en
naranja). Esta podría ser una tarea de Clasificación en la que los puntos azules pertenecen a
la Clase A mientras que los naranjas pertenecen a la Clase B.

A medida que se ejecuta la ANN, observe que la división entre Clases A y Clase B se vuelve
más clara. Eso es porque el sistema está aprendiendo continuamente de los ejemplos de
entrenamiento. A medida que el aprendizaje se vuelve más sólido (o que las reglas se infieren
con mayor precisión), la clasificación también se vuelve más precisa.

Explorar TensorFlow Playground es una forma rápida de hacerse una idea de cómo funcionan
las redes neuronales. Es una visualización rápida (aunque no una representación 100 %
precisa) para que podamos ver las características, las capas ocultas y la salida. Incluso
podemos hacer algunos ajustes, como cambiar la tasa de aprendizaje, la proporción de
entrenamiento para probar los datos y la cantidad de capas ocultas.

Por ejemplo, podemos establecer el número de capas ocultas en 3 y cambiar la tasa de


aprendizaje a 1 (en lugar de 0,03 antes). Deberíamos ver algo como esto:

Cuando hacemos clic en el botón Reproducir y dejamos que se ejecute durante un tiempo, de alguna manera la imagen
Machine Translated by Google

quedará así:

Preste atención a la salida. Nótese que la Clasificación parece peor. En lugar de incluir la
mayoría de los puntos amarillos en la región amarilla, hay muchos fallos (muchos puntos
amarillos caen en la región azul). Esto ocurrió debido al cambio en los parámetros que hemos
hecho.

Por ejemplo, la tasa de aprendizaje tiene un gran efecto en la precisión y en lograr la


convergencia correcta. Si hacemos que la tasa de aprendizaje sea demasiado baja, la
convergencia puede llevar mucho tiempo. Y si la Tasa de aprendizaje es demasiado alta (como
en nuestro ejemplo anterior), es posible que no alcancemos la convergencia en absoluto porque
la superamos y fallamos.

Hay varias formas de lograr la convergencia en un tiempo razonable (por ejemplo,


La tasa de aprendizaje es correcta, más capas ocultas, probablemente menos o más
características para incluir, aplicando Regularización). Pero "optimizar demasiado" para todo
podría no tener sentido económico. Es bueno establecer un objetivo claro al principio y ceñirse
a él. Si surgen otras oportunidades interesantes o prometedoras, es posible que desee ajustar
aún más los parámetros y mejorar el rendimiento del modelo.

De todos modos, si quiere tener una idea de cómo se vería una ANN en Python, aquí hay un
código de muestra: X = np.array([ [0,0,1],[0,1,1],[1,0 ,1],[1,1,1] ]) =
np.array([[0,1,1,0]]).T y syn0
= 2*np.random.random((3,4)) ­ 1 syn1 =
2*np.random.random((4,1)) ­ 1 para j en
xrange(60000): l1 = 1/
(1+np.exp(­(np.dot(X,syn0))) ) l2 = 1/
(1+np.exp(­(np.dot(l1,syn1)))) l2_delta = (y ­
l2)*(l2*(1­l2)) l1_delta =
l2_delta.dot(syn1. T) * (l1 * (1­l1))
Machine Translated by Google

syn1 += l1.T.dot(l2_delta)
syn0 += XTdot(l1_delta) De https://iamtrask.github.io/2015/07/12/basic python­network/

Es un ejemplo muy simple. En el mundo real, las redes neuronales artificiales se


verían largas y complejas si se escribieran desde cero. Afortunadamente, la forma de
trabajar con ellos se está volviendo más "democratizada", lo que significa que incluso
las personas con conocimientos técnicos limitados podrían aprovecharlos.
Machine Translated by Google

16. Procesamiento del lenguaje natural

¿Podemos hacer que las computadoras entiendan palabras y oraciones? Como se mencionó
en el capítulo anterior, uno de los objetivos es igualar o superar importantes capacidades
humanas. Una de esas capacidades es el lenguaje (comunicación, saber el significado de algo,
llegar a conclusiones basadas en las palabras y oraciones).

Aquí es donde entra en juego el Procesamiento del Lenguaje Natural o PNL. Es una rama de la
inteligencia artificial en la que la atención se centra en comprender e interpretar el lenguaje
humano. Puede cubrir la comprensión e interpretación tanto del texto como del habla.

¿Alguna vez has hecho una búsqueda por voz en Google? ¿Está familiarizado con los chatbots
(responden automáticamente en función de sus consultas y palabras)? ¿Qué pasa con el
Traductor de Google? ¿Alguna vez ha hablado con un sistema de servicio al cliente de IA?

Es procesamiento de lenguaje natural (NLP) en el trabajo. De hecho, dentro de unos pocos o


varios años, el mercado de la PNL podría convertirse en una industria multimillonaria. Esto se
debe a que podría usarse ampliamente en servicio al cliente, creación de asistentes virtuales
(similares a JARVIS de Iron Man), documentación de atención médica y otros campos.

El procesamiento del lenguaje natural incluso se utiliza para comprender el contenido y evaluar
los sentimientos que se encuentran en las publicaciones de las redes sociales, comentarios de
blogs, reseñas de productos, noticias y otras fuentes en línea. La PNL es muy útil en estas
áreas debido a la disponibilidad masiva de datos de actividades en línea. Recuerde que
podemos mejorar enormemente nuestro modelo de análisis de datos y aprendizaje automático
si tenemos suficientes cantidades de datos de calidad para trabajar.

Analizar palabras y sentimientos

Uno de los usos más comunes de la PNL es comprender el sentimiento en un texto (por ejemplo,
¿es una reseña de producto positiva o negativa? ¿Qué dice el tweet en general?). Si solo
tenemos una docena de comentarios y reseñas para leer, no necesitamos ninguna tecnología
para hacer la tarea. Pero, ¿y si tenemos que lidiar con cientos o miles de oraciones para leer?

La tecnología es muy útil en esta tarea a gran escala. Implementar la PNL puede hacernos la
vida un poco más fácil e incluso hacer que los resultados sean un poco más consistentes y
reproducibles.
Machine Translated by Google

Para comenzar, estudiemos Restaurant_Reviews.tsv (echemos un vistazo):


Guau... Me encantó este
lugar. 1 La corteza no
es buena. 0 No sabroso y la textura era
desagradable. 0 Me detuve durante el feriado bancario de finales de mayo por recomendación de Rick
Steve y me encantó. 1 La selección en el menú fue excelente, al igual
que los precios. 1 Ahora me estoy enojando y quiero mi
maldito pho. 0 Honestamente, no sabía TAN
fresco). 0 Las papas estaban como de goma y se notaba que habían sido preparadas con anticipación y mantenidas
debajo de un
calentador. 0 Las patatas fritas también eran geniales. 1

La primera parte es la declaración en la que una persona comparte su impresión o experiencia


sobre el restaurante. La segunda parte es si esa afirmación es negativa o no (0 si es negativa, 1 si
es positiva o Me gustó). Tenga en cuenta que esto es muy similar con el aprendizaje supervisado
en el que hay etiquetas desde el principio.

Sin embargo, la PNL es diferente porque tratamos principalmente con texto e idioma en lugar de
datos numéricos. Además, comprender un texto (p. ej., encontrar patrones e inferir reglas) puede
ser un gran desafío. Eso es porque el lenguaje a menudo es inconsistente y no tiene reglas
explícitas. Por ejemplo, el significado de la oración puede cambiar dramáticamente reorganizando,
omitiendo o agregando algunas palabras.
También está la cosa sobre el contexto en el que la forma en que se usan las palabras afecta en
gran medida el significado. También tenemos que lidiar con palabras de "relleno" que solo están
ahí para completar la oración pero no son importantes cuando se trata de significado.

Comprender declaraciones, obtener el significado y determinar el estado emocional del escritor


puede ser un gran desafío. Es por eso que es realmente difícil, incluso para los programadores
experimentados, encontrar una solución sobre cómo manejar las palabras y el lenguaje.

Uso de NLTK

Afortunadamente, ahora hay conjuntos de bibliotecas y programas que hacen que el procesamiento
del lenguaje natural esté al alcance incluso de programadores principiantes y profesionales. Una
de las suites más populares es Natural Language Toolkit (NLTK).

Con NLTK (desarrollado por Steven Bird y Edward Loper en el Departamento de Informática y
Ciencias de la Información de la Universidad de Pensilvania), el procesamiento de texto se vuelve
un poco más sencillo porque implementará un código preconstruido en lugar de escribir todo desde
cero. De hecho, muchos países
Machine Translated by Google

y las universidades incorporan NLTK en sus cursos.


Machine Translated by Google

Gracias !
¡Gracias por comprar este libro! Su objetivo es ayudarlo a comprender el análisis
de datos con Python. Si disfrutó de este libro y sintió que agregó valor a su vida,
le pedimos que se tome el tiempo para revisarlo.
Su retroalimentación honesta sería muy apreciada. Eso realmente marca la
diferencia.

Somos una editorial muy pequeña y nuestra supervivencia depende de sus reseñas.
Por favor, tómese un minuto para escribirnos una reseña honesta.
Machine Translated by Google

Fuentes y referencias

Software, bibliotecas y lenguaje de programación

• Python (https://www.python.org/) • Anaconda (https://anaconda.org/) • Virtualenv


(https://virtualenv.pypa.io/en/stable/) • Numpy (http://www.numpy.org/)
• Pandas (https://pandas.pydata.org/) • Matplotlib (https://matplotlib.org/) •
Keras (https://keras.io/) • Pytorch (https://pytorch.org/) • Intercambio de
redes neuronales abiertas (https://onnx.ai/) • TensorFlow (https://
www.tensorflow.org/)
conjuntos de datos

• Kaggle (https://www.kaggle.com/datasets) • Conjuntos de datos de


Keras (https://keras.io/datasets/) • Conjuntos de datos de
Pytorch Vision (https://pytorch.org/docs/stable/torchvision/datasets.html) •
Wikipedia de la base de datos MNIST (https://en.wikipedia.org/wiki/
MNIST_database) • MNIST (http://yann.lecun.com/exdb/mnist/) •
CIFAR­10 (https://www.cs.toronto.edu/~kriz/cifar.html) • Conjunto de datos
de Reuters (https://archive.ics.uci.edu/ml/datasets/
reuters 21578+text+categorization+collection) • Análisis de opinión de IMDB
(http://ai.stanford.edu/~amaas/data/sentiment /) Libros en línea, tutoriales
y otras referencias • Especialización
en aprendizaje profundo de Coursera (https://
www.coursera.org/specializations/deep­learning) • fast.ai: aprendizaje profundo
para codificadores (http://course.fast.ai/) • Ejemplos de Keras (https://github.com/
keras­team/keras/tree/master/examples) • Ejemplos de Pytorch (https://github.com/
pytorch/examples) • Ejemplo de Pytorch MNIST (https://gist.github.com/xmfbit/

b27cdbff68870418bdb8cefa86a2d558) • Sobreajuste (https://en.wikipedia.org/wiki/


Overfitting) • Un programa de red neuronal (https://playground.tensorflow.org/)
• Ejemplos de TensorFlow (https://github.com/aymericdamien/TensorFlow­
Examples) • Curso intensivo de aprendizaje automático de Google (https://
playground.tensorflow.org/)
Machine Translated by Google

Gracias !
¡Gracias por comprar este libro! Su objetivo es ayudarlo a comprender el análisis
de datos con Python. Si disfrutó de este libro y sintió que agregó valor a su vida,
le pedimos que se tome el tiempo para revisarlo.
Su retroalimentación honesta sería muy apreciada. Eso realmente marca la
diferencia.

Somos una editorial muy pequeña y nuestra supervivencia depende de sus reseñas.
Por favor, tómese un minuto para escribirnos una reseña honesta.
Machine Translated by Google

También podría gustarte