Logo Studenta

Unidad III

¡Este material tiene más páginas!

Vista previa del material en texto

Nombre del alumno: Antony Arturo García Pérez
Matrícula: 2020690020
Carrera: Licenciatura en Ciencia de Datos
Nombre de la materia: Desarrollo de aplicaciones para análisis de datos
Nombre del docente: Jesús Álvarez
Unidad III. Aprendizaje automático.
Sabinas, Coahuila							02/11/2021
Unidad III. Aprendizaje automático.
Definición.
El aprendizaje autónomo (ML) es el subconjunto de inteligencia artificial (IA) que se centra en desarrollar sistemas que aprenden, o mejoran el rendimiento, en función de los datos que consumen. Es un enfoque para crear inteligencia artificial en el que proporcionamos entradas y resultados esperados al modelo de aprendizaje supervisado y el modelo tiene la tarea de detectar patrones y relaciones subyacentes. Esto ayuda a que el modelo funcione bien en datos que nunca antes había visto y predice los resultados de salida. 
Inteligencia artificial es un término amplio que se refiere a sistemas o máquinas que imitan la inteligencia humana. Se suele mencionar al aprendizaje autónomo y a la IA en las mismas conversaciones, y los términos a veces se usan indistintamente, pero no significan lo mismo. Un aspecto importante para destacar es que aunque todo aprendizaje autónomo es IA, no toda IA es aprendizaje autónomo.
Hoy en día, el aprendizaje autónomo funciona en todo nuestro alrededor. Cuando interactuamos con bancos, compramos en línea o usamos redes sociales, los algoritmos de aprendizaje autónomo entran en juego para hacer que nuestra experiencia sea eficiente, fluida y segura. El aprendizaje autónomo y la tecnología a su alrededor se desarrollan rápidamente, y apenas estamos empezando a conocer la superficie de sus capacidades.
3.1 Aprendizaje supervisado con scikit-learn.
DEFINICION.
En este modelo, un científico de datos actúa como guía y enseña al algoritmo las conclusiones que debe hacer. El algoritmo se capacita mediante un conjunto de datos que ya está etiquetado y tiene un resultado predefinido.
Los ejemplos de aprendizaje autónomo supervisado incluyen algoritmos tales como regresión lineal y logística, clasificación multiclase y máquinas de vectores de soporte.
Scikit-learn es la biblioteca más robusta y útil para el aprendizaje automático en Python. Nos proporciona una variedad de herramientas eficientes para el modelado estadístico y el aprendizaje automático. Está escrito en gran parte en Python y construido sobre otras bibliotecas de Python como NumPy, Matplotlib y SciPy.
3.1.1 Clasificación. 
Los algoritmos de clasificación son una especia de algoritmos de aprendizaje en los que tienen que clasificar los nuevos datos en diferentes clases. A diferencia de la regresión, no tiene una salida de valor continuo. Se utiliza cuando necesitamos una salida binaria o multiclase.
3.1.2 Regresión. 
Es una especie de algoritmo de aprendizaje supervisado en el que los algoritmos aprenden de conjuntos de datos etiquetados y es capaz de predecir una salida de valor continuo para nuevos datos alimentados al algoritmo. Los principales algoritmos de regresión son: Regresión lineal y regresión logística.
IMÁGENES.
EJEMPLOS.
Red neuronal.
import pandas as pd
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
datos=pd.read_csv("bateria.csv")
x=datos["Tiempo"]
y=datos["Carga"]
x = mean_datos = np.array(x)
X=x[:,np.newaxis]
while True:
	from sklearn.model_selection import train_test_split
	X_train, X_test, y_train, y_test = train_test_split(X,y)
	mlr=MLPRegressor(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(3,3),random_state=1)
	mlr.fit(X_train, y_train)
	print(mlr.score(X_train,y_train))
	if mlr.score(X_train,y_train) > 0.95:
		break
print("Predicción en T=20 minutos ",mlr.predict(np.array(20).reshape(1,1)))
PALABRAS CLAVE.
· Clasificación Binaria: Es un tipo de clasificación en el que tan solo se pueden asignar dos clases diferentes (0 o 1). El ejemplo típico es la detección de email spam, en la que cada email es: spam → en cuyo caso será etiquetado con un 1; o no lo es → etiquetado con un 0.
· Clasificación Multi-clase: Se pueden asignar múltiples categorías a las observaciones. Como el reconocimiento de caracteres de escritura manual de números (en el que las clases van de 0 a 9).
· Regresión lineal: La regresión lineal es un algoritmo de aprendizaje supervisado que se utiliza en Machine Learning y en estadística que nos indicará la tendencia de un conjunto de datos continuos. Es una aproximación para modelar la relación entre una variable escalar dependiente “y” y una o mas variables explicativas nombradas con “X”.
· Regresión logística: El método de regresión logística es un método estadístico que se usa para resolver problemas de clasificación binaria, donde el resultado solo puede ser de naturaleza dicotómica, o sea, solo puede tomar dos valores posibles.
LINKS/PÁGINAS WEB.
Documentación de Scikit-learn.
https://scikit-learn.org/stable/
¿Cómo funciona el algoritmo de regresión lineal en Machine Learning?
https://www.aprendemachinelearning.com/regresion-lineal-en-espanol-con-python/#more-5722
3.2 Aprendizaje no supervisado scikit-learn
DEFINICION.
El aprendizaje autónomo no supervisado utiliza un enfoque más independiente, en el que una computadora aprende a identificar procesos y patrones complejos sin que un ser humano proporcione una guía cercana y constante. El aprendizaje autónomo no supervisado implica la capacitación basada en datos que no tiene etiquetas o un resultado específico definido. Cuando un ordenador realiza un aprendizaje no supervisado, intenta reconocer de forma autónoma los patrones y estructuras que comparten dichos valores.
Los ejemplos de algoritmos de aprendizaje autónomo no supervisados incluyen el agrupamiento de k-means, el análisis de componentes principales e independientes y las leyes de asociación.
3.2.1 Análisis de grupos.
Es una de las técnicas que se emplean, en este caso, los algoritmos se encargan de formar grupos de manera autónoma para, finalmente, asignarlos a los datos.
Por ejemplo, si los datos son fotos de perros y gatos, en el aprendizaje no supervisado, el programa ordena todas las fotos de perros en una categoría y las de gatos, en otra. Sin embargo, esta clasificación no viene dada de antemano, a diferencia del aprendizaje supervisado. En el aprendizaje no supervisado los algoritmos toman estas decisiones de manera independiente, en función de las similitudes y diferencias entre las fotos.
Los algoritmos de agrupación se pueden clasificar como se detalla a continuación:
Agrupamiento exclusivo: los datos se agrupan de manera exclusiva, de modo que si un cierto punto de datos pertenece a un grupo definido, entonces podría no ser incluido en otro clúster.
Superposición de clústeres: usa conjuntos difusos para agrupar datos, de modo que cada punto puede pertenecer a dos o más clústeres con diferentes grados de membresía. En este caso, los datos se asociarán con un valor de membresía apropiado.
Agrupamiento jerárquico: se basa en la unión entre los dos clústeres más cercanos. La condición de inicio se realiza estableciendo cada punto de datos como un clúster, después de algunas iteraciones alcanza los clústeres finales deseados.
Agrupación probabilística: utiliza un enfoque probabilístico.
IMÁGENES.
 
EJEMPLOS.
Algoritmo k-means
import sklearn
from matplotlib import pyplot as plt
from sklearn import datasets
random_state = 100
n_samples = 100
centers = [[-4, -4], [0, 0], [4, 4]]
X_kmeans, y_kmeans = datasets.make_blobs(n_samples=n_samples, centers=centers, cluster_std=0.7, random_state=random_state)
plt.scatter(X_kmeans[:, 0], X_kmeans[:, 1])
plt.title("Dataset generado para k-means")
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=random_state)
y_pred_kmeans = kmeans.fit_predict(X_kmeans)
plt.figure()
plt.scatter(X_kmeans[:, 0], X_kmeans[:, 1], c=y_pred_kmeans)
plt.title("Número correcto de clústeres")
X_moon, y_moon = datasets.make_moons(n_samples=n_samples, random_state=random_state)
kmeans_moon = KMeans(n_clusters=2,random_state=random_state)
y_pred_moon_kmeans = kmeans_moon.fit_predict(X_moon)
plt.figure()
plt.scatter(X_moon[:, 0], X_moon[:, 1], c=y_pred_moon_kmeans)
plt.title("k-means con forma de luna mal clusterizados")
PALABRAS CLAVE.
CLÚSTERS: Un cúmulo, granja o cluster de computadoras, lo podemos definir como un sistema de procesamiento paralelo o distribuido. Consta de un conjunto de computadoras independientes, interconectadas entre sí, de tal manera que funcionan como un solo recurso computacional. 
LINK/PÁGINAS WEB.
Explicación paso a paso del algoritmo.
https://aprendeconejemplos.org/python/aprendizaje-automatico-con-scikit-learn-parte-iii-clusterizacion
3.3 Procesamiento distribuido con Apache Spark
DEFINICION.
Apache Spark es un framework de programación para procesamiento de datos distribuidos diseñado para ser rápido y de propósito general
¿Cómo funciona?
Apache Spark es un motor de procesamiento distribuido responsable de orquestar, distribuir y monitorizar aplicaciones que constan de múltiples tareas de procesamiento de datos sobre varias máquinas de trabajo, que forman un cluster.
Como ya hemos mencionado, es posible leer los datos desde diferentes soluciones de almacenamiento persistente como Amazon S3 o Google Storage,  sistemas de almacenamiento distribuido como HDFS, sistemas key-value como Apache Cassandra, o buses de mensajes como Kafka.
A pesar de ello, Spark no almacena datos en sí mismo, sino que tiene el foco puesto en el procesamiento.
¿Cuáles son sus funciones?
Respecto a su propósito general, la virtud de Spark es estar diseñado para cubrir una amplia gama de cargas de trabajo que previamente requerían sistemas distribuidos diferentes.
Éstos sistemas incluyen procesamiento batch, algoritmos iterativos, queries interactivas, procesamiento streaming… a menudo empleados todos ellos en un pipeline típico de análisis de datos.
Por último, hemos dicho que Spark es flexible en su utilización, y es que ofrece una serie de APIs que permiten a usuarios con diferentes backgrounds poder utilizarlo. Incluye APIs de Python, Java, Scala, SQL y R, con funciones integradas y en general una performance razonablemente buena en todas ellas.
Permite trabajar con datos más o menos estructurados (RDDs, dataframes, datasets) dependiendo de las necesidades y preferencias del usuario
3.3.1 Datos distribuidos resilientes.
Es una estructura de datos paralela tolerante a fallas que puede mostrar la ubicación del almacenamiento de datos especificado (disco, memoria [memoria en el montón, memoria fuera del montón]), puede controlar particiones y proporcionar operaciones de procesamiento de datos enriquecidos.
3.3.2 Transformaciones de datos distribuidos resilientes
Una manera fácil de comprender Apache Spark es comprender cómo se manipulan los datos desde un Repositorio y se entregan de una manera más purificada o filtrada. La mejor manera de entender esto es visualizando que tiene datos en un lado. Supongamos que está en el lado izquierdo y desea modificar los datos en la forma deseada que se mostrará en el lado derecho. Entonces la pregunta aquí es qué debo hacer para modificar los datos para poder obtener el formulario en el lado derecho. La respuesta es simple y son operaciones. Estas son las operaciones de Apache Spark en las que tendrá que confiar para poder modificar los datos, entregar la cantidad correcta de datos y diseñar la estructura correcta de datos. Estos dos tipos de operaciones Spark de Apache son Transformaciones y acciones.
Las operaciones de transformación permitirán dar la forma y cantidad correctas de sus datos. 
Hay dos tipos de transformaciones que se consideran funciones diferidas porque no se aplican hasta que se llaman a las acciones en Apache Spark.
Las transformaciones estrechas y amplias son operaciones que utilizará para clasificar una gran cantidad de datos. Ambas Transformaciones usan RDD (conjunto de datos distribuidos resilientes) que son de naturaleza inmutable y una vez que reciba un RDD para ordenar los datos, representará uno o más RDD nuevos después de aplicar cualquier tipo de transformación
Las transformaciones se caracterizan por tener todos los elementos en una sola partición provenientes del mismo RDD monoparental. Las funciones más comunes que se consideran transformaciones estrechas son map, filter, flatmap, Sample, Union y MapPartition.
Las amplias transformaciones se caracterizan por saltar todos los elementos en una sola partición de múltiples padres RDD. Este tipo de transformaciones son sección, diferenciada, reducida por clave, unión, cartesiana, grupo por clave. Una vez que tenga la estructura deseada de sus datos, podrá realizar diferentes acciones para que llame a las operaciones de acción en Apache Spark.
Las operaciones de acción representan estructuras que no son RDD y proporcionan un valor específico obtenido de los datos con los que está trabajando. Se utilizan con ejecutores en diferentes clústeres para que pueda realizar tareas en dos nodos diferentes de los clústeres. Los operadores de acción trabajan principalmente con ejecutores para enviar datos al controlador en la estructura del clúster.
Las operaciones de función son contar, plegar, recolectar, agregar, tomar, foreach y top.
3.3.3 Uso de SparkSQL y SparkMLlib
Spark SQL es un módulo de procesamiento de datos estructurado de Spark que proporciona una abstracción del modelo de programación DataFrame y puede considerarse como un motor de consulta SQL distribuido. Spark SQL está compuesto principalmente por la optimización de Catalyst, el kernel de Spark SQL y el soporte de Hive.
Catalyst optimiza todo el proceso de procesamiento de sentencias de consulta, incluido el análisis, el enlace, la optimización y la planificación física, y se compone principalmente de álgebra relacional, expresiones y optimización de consultas.
El kernel Spark SQL maneja la entrada y salida de datos, obtiene datos de diferentes fuentes de datos (archivos parquet estructurados y archivos JSON, tablas Hive, bases de datos externas, creación de RDD), ejecuta consultas y genera los resultados en un DataFrame.
El soporte de Hive es el procesamiento de los datos de Hive por valor, incluidos principalmente HiveSQL, MetaStore, SerDes, UDFS, etc.
Arquitectura Spark SQL
Spark SQL procesa las declaraciones SQL de manera similar al procesamiento SQL de la base de datos relacional. Analiza la declaración SQL en un árbol, y luego utiliza la coincidencia de patrones de reglas para vincular y optimizar el árbol, y luego obtiene los resultados de la consulta.
TreeNode realiza la operación específica de Tree; Rule es una clase abstracta, que se completa con RuleExecutor. La aplicación y Spark SQL Analyzer, Optimizer, Spark Planner y otros componentes pueden realizar de forma sencilla y modular operaciones de transformación en Tree.
Durante la ejecución de toda la declaración SQL, se basa principalmente en el marco de optimización Catalyst, que analiza, enlaza y optimiza las declaraciones SQL, y finalmente optimiza el plan lógico y lo convierte en un plan de ejecución físico, que finalmente se convierte en el modelo DataFrame
Spark SQL tiene las siguientes características:
1. Compatible con múltiples formatos de datos, como archivos de parquet, tablas HIve, archivos JSON, etc. mencionados anteriormente.
2. Fácil de expandir, su optimizador y analizador se pueden redefinir.
3. Optimización del rendimiento: uso de almacenamiento en columna de memoria, generación dinámica de código de bytes y otras tecnologías, y datos de memoria caché.
4. Admite operaciones en varios idiomas, incluidos JAVA, SCALA, PYTHON, lenguaje R, etc.
IMÁGENES.
EJEMPLOS.
Antes de escribir la lógica de nuestra aplicación, debemos inicializar una sesión de Spark. Este será el punto de partida. Se puede realizar fácilmente usando el builder de SparkSession:
	1
2
3
4
5
6
	import org.apache.spark.sql.SparkSession
 
val spark = SparkSession
  .builder()
  .appName("Hello World con Spark")
  .getOrCreate()
También, es muy común importar la conversión implícita paraconvertir RDDs a DataFrames o para usar la notación con el símbolo $:
	1
	import spark.implicits._
El siguiente ejemplo está escrito en Scala. Es una aplicación spark básica de tipo wordcount. Lee un fichero de texto, lo divide por palabras y cuenta las ocurrencias de cada palabra.
	1
2
3
4
5
	val textFile = sc.textFile("/tables/internet_archive_scifi_v3.txt")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("/tables/wordcountresult")
El ejemplo a continuación realiza el cálculo de la estimación de pi de forma paralela. Es una aplicación intensiva en cómputo.
	1
2
3
4
5
6
	var NUM_SAMPLES = 900000000
val count = sc.parallelize(1 to NUM_SAMPLES).filter { _ =>
  val x = math.random
  val y = math.random
  x*x + y*y < 1 }.count()
println(s"Pi is roughly ${4.0 * count / NUM_SAMPLES}")
	
	
Una vez que hemos inicializado nuestra sesión de Spark, podemos usar consultas SQL sobre un DataFrame (DataSet de Rows) de manera sencilla:
	1
2
3
4
5
6
	// Registramos el DataFrame como una vista temporal de SQL
df.createOrReplaceTempView("edades")
 
// Ahora podemos realizar consultas SQL usando ese nombre
val resultados = spark.sql("SELECT * FROM edades")
resultados.show()
PALABRAS CLAVE.
LINKS/PÁGINAS WEB.
Tutorial: Guía de inicio y práctica de Apache SparkSQL
https://programmerclick.com/article/5113168321/
Curso intensivo de 4 horas en el que aprenderás a usar Spark 2 de forma práctica para desarrollar aplicaciones y ejecutarlas.
https://click.linksynergy.com/link?id=Fji97aVD8nI&offerid=507388.2057961&type=2&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fapache-spark-y-scala-curso-intensivo-apache-spark%2F
Este curso se centra en Spark con Python para aprender a implementar aplicaciones con las APIs de RDD y Spark SQL.
https://click.linksynergy.com/link?id=Fji97aVD8nI&offerid=507388.1182378&type=2&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fprogramacion-con-apache-spark%2F
Este curso es algo más avanzado e incluye conceptos de la nube con AWS y machine learning con MLlib.
https://click.linksynergy.com/link?id=Fji97aVD8nI&offerid=507388.2526440&type=2&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fbig-data-con-python-y-spark%2F

Continuar navegando

Materiales relacionados

5 pag.
Examen Unidad 3

IPN

User badge image

Antony A García Pérez