Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Integrantes:
Hacerlo implica usar información de señales de tráfico, inductores de bucle, cámaras de CCTV y
ecosistema completo de sensores, recolectores de datos, analizadores y activadores, sistemas a
bordo para predecir la congestión o usar datos de medidores inteligentes para acoplar
estrechamente la oferta y la demanda en la generación de electricidad.
Uno de los ingredientes clave de todo más inteligente es una economía de intercambio en el
que una pluralidad de jugadores interactúa, colaboran y comparten un recurso en particular.
Los ejemplos incluyen aplicaciones para compartir viajes como Uber, alojamiento compartido a
través de Airbnb y comercio electrónico P2P habilitado por Etsy como Etsy.
El conjunto de datos de alimentación de la estación es una transmisión JSON en vivo del estado
de cada estación de bicicletas en la ciudad de Nueva York. Este estado incluye información sobre
si la estación es funcional y el número de bicicletas gratuitas.
UNIVERSIDAD UTE
ReceiverInputDStream
InputStream
Un InputDStream estándar expone los métodos start () y stop () y hereda un método compute
() de DStream. El método compute () se encarga de devolver nuevos RDD en cada lote. El servicio
/ hilo para este método se ejecuta en el nodo del controlador.
Sockets
Los sockets son un mecanismo que nos permite establecer un enlace entre dos programas que
se ejecutan independientes el uno del otro. Java por medio de la librería java.net nos provee dos
clases: Socket para implementar la conexión desde el lado del cliente y ServerSocket que nos
permitirá manipular la conexión desde el lado del servidor.
Ejemplo
Socket Cliente
UNIVERSIDAD UTE
Socket Servidor
UNIVERSIDAD UTE
MQTT
Soporta todo el espectro de opciones de garantía de mensajes: como máximo una vez, al menos
una vez y exactamente una vez.
Una amplia gama de los intermediarios de mensajes, incluidos ActiveMQ, IBM Websphere MQ,
RabbitMQ y Mosquitto, admiten MQTT.
MQTT es realmente útil para casos de uso que implican diversidad y pluralidad en consumidores
y temas.
Por ejemplo los datos de IoT que deben ser particionados en temas basados en el tipo de sensor
y deben ser consumidos por varios sistemas de flujo descendente, como una aplicación de
procesamiento en tiempo real y un almacén de datos para el almacenamiento a largo plazo.
Una clase diferente de aplicaciones requiere el envío de grandes franjas de datos de registro de
una ubicación a otra.
Sistema MQTT como tal es una exageración. Estas aplicaciones están mejor atendidas por los
sistemas de agregación de registros, como Flume, cual es el sistema de destino.
Flume
Una implementación de Flume consta de uno o más agentes configurados con una topología.
Flume Agent es un proceso JVM que aloja los bloques de construcción básicos de una topología
de Flume, que son la fuente, el canal y el sumidero. Los clientes de Flume envían eventos al
UNIVERSIDAD UTE
origen, que los coloca en lotes en un búfer temporal llamado canal, y desde allí los datos fluyen
a un sumidero que se conecta al destino final de los datos. Un sumidero también puede ser una
fuente de datos de seguimiento para otros agentes de Flume. Los agentes pueden estar
encadenados y tener cada uno múltiples fuentes, canales y sumideros.
Flume es un sistema distribuido que se puede usar para recopilar, agregar y transferir eventos
de transmisión a Hadoop. Viene con muchas fuentes, canales y receptores integrados, por
ejemplo, el canal Kafka y el receptor Avro. Flume se basa en la configuración y tiene
interceptores para realizar transformaciones simples en los datos en vuelo.
Es fácil perder datos usando Flume si no tienes cuidado. Por ejemplo, elegir el canal de memoria
para un alto rendimiento tiene el inconveniente de que los datos se perderán cuando el nodo
del agente se desactive. Un canal de archivos proporcionará durabilidad al precio de una mayor
latencia. Incluso entonces, dado que los datos no se replican en otros nodos, el canal de archivos
solo es tan confiable como los discos subyacentes. Flume ofrece escalabilidad a través de flujos
de abanico de entradas múltiples y abanicos. Para alta disponibilidad (HA), los agentes pueden
escalarse horizontalmente.
Kafka
Kafka es un bus de mensajes distribuido de alto rendimiento que desacopla a los productores
de datos de los consumidores. Los mensajes se organizan en temas, los temas se dividen en
particiones y las particiones se replican en los nodos, denominados intermediarios, en el clúster.
En comparación con Flume, Kafka ofrece una mejor escalabilidad y durabilidad de los mensajes.
Kafka ahora viene en dos versiones: el modelo “clásico” de productor / consumidor, y el nuevo
Kafka-Connect, que proporciona conectores configurables (fuentes / sumideros) para almacenes
de datos externos.
Debido a que los mensajes se conservan en el disco y se replican dentro del clúster, los
escenarios de pérdida de datos son menos comunes que con Flume. Dicho esto, la codificación
personalizada a menudo es necesaria para los productores / fuentes y los consumidores /
receptores, ya sea utilizando clientes Kafka o mediante la API de Connect. Al igual que con
Flume, hay limitaciones en el tamaño del mensaje. Finalmente, para poder comunicarse, tanto
UNIVERSIDAD UTE
los productores como los consumidores de Kafka tienen que ponerse de acuerdo sobre el
protocolo, el formato y el esquema, lo que puede ser problemático en algunos casos.
Twitter se ha convertido en una de las redes sociales más grande del mundo, tiene más de 300
millones de usuarios activos mensuales que envían 500 millones de tweets por día. Twitter se
ha convertido en un gran depósito de información de interés comercial. Twitter tiene una API
pública que permite a los usuarios obtener acceso a la filtración de información. Twitter4J es
utilizado por el conector Spark Streaming.
Para acceder a la API de twitter, primero se debe proporcionar las credenciales. Las credenciales
pasan por un createStream que va junto a una matriz, esta contiene las palabras clave que sirven
de filtro para que puedan coincidir los tweets.
Block Interval
Custom Receiver
El receptor personalizado que se conecta por medio de InputDStream a una fuente de datos
externa debe implementar la interfas de receptor. Este receptor reside en los nodos de trabajo
y está a cargo de ingerir datos externos y escribirlos en el almacen de bloques.
necesita enviar confirmaciones al remitente de datos, lo que hace que el diseño de un receptor
confiable sea más complicado.
HttpInputDStream
Spark Streaming fuera de la caja no tiene conexión para HTTP. Se mplementa una API receptora
Spark MLlib
Clasificación y regresión
Clusterización
K-means
LDA
GMM
Filtrado colaborativo
ALS
Ejemplo de clusterización
En primer lugar se han leído los datos del fichero, se han limpiado y se ha
transformado a DataFrame:
import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.ml.feature.VectorAssembler
case class AcousticData(date: String, ld: Double, le: Double, ln: Double, lAeq:
Double)
.map({
line =>
AcousticData(
row(0),
row(1).replace(",",".").toDouble,
row(2).replace(",",".").toDouble,
row(3).replace(",",".").toDouble,
UNIVERSIDAD UTE
row(4).replace(",",".").toDouble
}).toDF()
acousticDF.createOrReplaceTempView("ACOUSTIC_DATA")
.setOutputCol("features")
val vd = assemblerKmeans.transform(acousticDF)
predictions.createOrReplaceTempView("ACOUSTIC_DATA_KMEANS")
.setNumClasses(10)&nbsp
.run(training)
(prediction, label)}
println("Accuracy = $accuracy")
model.save(sc, "target/tmp/scalaLogisticRegressionWithLBFGSModel")
"target/tmp/scalaLogisticRegressionWithLBFGSModel")
Capitulo 7
Spark SQL
La facilidad de uso es una de las razones por las que Spark se hizo popular. Proporciona un
modelo de programación más simple que Hadoop MapReduce para procesar grandes datos. Sin
embargo, la cantidad de personas que dominan los idiomas admitidos por la API principal de
Spark es mucho menor que la cantidad de personas que conocen SQL. SQL es un lenguaje
estándar ANSI / ISO para trabajar con datos. Especifica una interfaz no solo para almacenar,
modificar y recuperar datos, sino también para analizar datos. SQL es un lenguaje declarativo.
Es mucho más fácil de aprender y usar en comparación con los lenguajes de programación de
uso general, como Scala, Java y Python. Sin embargo, es un lenguaje poderoso para trabajar con
datos. Como resultado, SQL se ha convertido en el caballo de batalla para el análisis de datos.
HiveQL es un lenguaje similar al SQL ampliamente utilizado en el mundo Hadoop. Es una de las
interfaces preferidas para Hadoop MapReduce. En lugar de escribir programas Java que utilizan
la API de Hadoop MapReduce de bajo nivel, las personas prefieren usar HiveQL para procesar
datos.
Spark SQL es una librería de Spark que se ejecuta sobre Spark. Este provee un nivel más alto de
abstracción que el núcleo de la API de Spark para procesar datos estructurados. Los datos
estructurados incluyen datos almacenados en una base de datos, un almacén de datos NoSQL,
Parquet, ORC, Avro, JSON, CSV o cualquier otro formato estructurado.
Spark SQL es más que solo proporcionar una interfaz SQL a Spark. Fue diseñado con los objetivos
más amplios de hacer que Spark sea más fácil de usar, aumentar la productividad de los
desarrolladores y hacer que las aplicaciones de Spark se ejecuten más rápido. Spark SQL es más
que solo proporcionar una interfaz SQL a Spark. Fue diseñado con los objetivos más amplios de
hacer que Spark sea más fácil de usar, aumentar la productividad de los desarrolladores y hacer
que las aplicaciones de Spark se ejecuten más rápido.
Spark SQL se puede usar como una biblioteca para desarrollar aplicaciones de procesamiento
de datos en Scala, Java, Python o R. Admite múltiples lenguajes de consulta, incluidos SQL,
HiveQL y consultas integradas de lenguaje. Además, se puede usar para analítica interactiva solo
con SQL / HiveQL. En ambos casos, utiliza internamente la API central de Spark para ejecutar
consultas en un clúster de Spark.
UNIVERSIDAD UTE
Spark SQL se puede integrar con otras librerias como Spark Streaming, Spark ML y GraphX.
Puede usarse no solo para el procesamiento interactivo y por lotes de datos históricos, sino
también para el procesamiento de flujos de datos en vivo junto con Spark Streaming. Del mismo
modo, se puede utilizar en aplicaciones de aprendizaje automático con MLlib y Spark ML. Por
ejemplo, Spark SQL se puede utilizar para la ingeniería de características en una aplicación de
aprendizaje automático.
Usabilidad
Spark SQL hace que Spark sea más fácil de usar que la API básica de Spark. Proporciona una API
de nivel superior y una abstracción para procesar datos estructurados. Por ejemplo, la API Spark
SQL proporciona funciones para seleccionar columnas, filtrar filas, agregar columnas, unir
conjuntos de datos y otras tareas analíticas y de procesamiento de datos comunes.
Fuentes de Datos
Spark SQL soporta una variedad de fuentes de datos. Puede utilizarse para procesar datos
almacenados en un archivo, un almacén de datos NoSQL o una base de datos. Un archivo puede
estar en HDFS, S3 o sistema de archivos local. Los formatos de archivo compatibles con Spark
SQL incluyen CSV, JSON, Parquet, ORC y Avro.
Spark SQL expone tres interfaces de procesamiento de datos: SQL, HiveQL y consultas integradas
de lenguaje. Traduce las consultas escritas usando cualquiera de estas interfaces en llamadas a
la API del núcleo de Spark.
Interoperabilidad de la Colmena
Spark SQL es compatible con Hive. No solo es compatible con HiveQL, sino que también puede
acceder a metástasis de Hive, SerDes y UDF. Por lo tanto, si tiene una implementación de Hive
existente, puede usar Spark SQL junto con Hive. No es necesario que mueva datos o realice
cambios en su almacén de datos de Hive existente.
Rendimiento
Spark SQL hace que las aplicaciones de procesamiento de datos se ejecuten más rápido
utilizando una combinación de técnicas, que incluyen una E / S de disco reducida,
almacenamiento en caché de columnas en memoria, optimización de consultas y generación de
código.
UNIVERSIDAD UTE
Reducción de E / S de disco
La E / S del disco es lenta. Puede ser un contribuyente importante para consultar el tiempo de
ejecución. Por lo tanto, Spark SQL reduce la E / S del disco siempre que sea posible. Por ejemplo,
dependiendo de la fuente de datos, puede omitir particiones, filas o columnas no necesarias
mientras lee datos.
Particionamiento
Leer un conjunto de datos completo para analizar solo una parte de los datos es ineficiente. Por
ejemplo, una consulta puede tener una cláusula de filtrado que elimina una parte significativa
de los datos antes del procesamiento posterior. Por lo tanto, una gran cantidad de E / S se
desperdicia en datos que nunca son utilizados por una aplicación. Se puede evitar mediante la
partición de un conjunto de datos.
Almacenamiento Columnar
Spark SQL permite que una aplicación almacene datos en caché en un formato de columnas en
memoria desde cualquier fuente de datos. Por ejemplo, puede usar Spark SQL para almacenar
en caché un archivo CSV o Avro en la memoria en un formato de columnas.
Saltar Filas
Si un origen de datos mantiene información estadística sobre un conjunto de datos, Spark SQL
lo aprovecha. Por ejemplo, como se explicó en el Capítulo 1, los formatos de serialización como
Parquet y ORC almacenan los valores mínimos y máximos de cada columna en un grupo de filas
o un trozo de filas. Utilizando esta información, Spark SQL puede omitir la lectura de trozos de
filas.
Predicado Pushdown
Spark SQL también reduce la E / S del disco utilizando empujes de predicados si un origen de
datos lo admite. Por ejemplo, si lee datos de una base de datos relacional utilizando Spark SQL
y luego le aplica alguna operación de filtrado, Spark SQL enviará la operación de filtrado a la base
UNIVERSIDAD UTE
de datos. En lugar de leer una tabla completa y luego ejecutar una operación de filtrado, Spark
SQL le pedirá a la base de datos que ejecute de forma nativa la operación de filtrado. Como las
bases de datos generalmente indexan datos, el filtrado nativo es mucho más rápido que el
filtrado en la capa de aplicación.
Optimización de Consultas
Al igual que en los sistemas de bases de datos, Spark SQL optimiza una consulta antes de
ejecutarla. Genera un plan de consulta física optimizado cuando se le da una consulta para su
ejecución. Viene con un optimizador de consultas llamado Catalyst, que admite optimizaciones
basadas tanto en reglas como en costos. Incluso puede optimizar a través de funciones.
La fase de análisis comienza con un plan lógico no resuelto y genera un plan lógico. Un plan
lógico sin resolver contiene atributos sin resolver. Un atributo no resuelto, por ejemplo, podría
ser una columna cuyo tipo de datos o tabla de origen aún no se conoce. Spark SQL usa reglas y
un catálogo para resolver atributos no vinculados en una expresión de consulta. El objeto de
catálogo Spark SQL rastrea las columnas y tablas en todas las fuentes de datos.
En la fase de optimización lógica, Spark SQL aplica optimizaciones basadas en reglas al plan
lógico generado por la fase de análisis. Las optimizaciones basadas en reglas incluyen el plegado
constante, el empuje del predicado, la poda de proyección, la propagación nula, la simplificación
de expresiones booleanas y otras optimizaciones.
La siguiente fase es la fase de planificación física. En esta fase, Spark SQL selecciona un plan físico
óptimo utilizando un modelo de costo. Toma como entrada el plan lógico optimizado generado
por la fase de optimización lógica. Usando reglas, genera uno o más planes físicos que pueden
ser ejecutados por el motor de ejecución Spark. A continuación, calcula sus costos y selecciona
un plan óptimo para la ejecución. Además, realiza optimizaciones físicas basadas en reglas, como
la canalización de proyecciones o filtros en una operación Spark. También empuja las
operaciones del plan lógico a las fuentes de datos que admiten el empuje de predicado o
proyección. Spark SQL genera planes físicos optimizados incluso para planes lógicos ineficientes.
La última fase es la fase de generación de código, donde Spark SQL compila partes de una
consulta directamente al código de bytes de Java. Utiliza una función de lenguaje Scala especial
para transformar un árbol que representa una expresión SQL en un AST (árbol de sintaxis
abstracta) de Scala, que se alimenta al compilador de Scala en tiempo de ejecución para generar
el bytecode. Por lo tanto, evita el uso del analizador Scala en tiempo de ejecución. Esto acelera
la ejecución de consultas. El código generado generalmente funciona tan rápido o más rápido
que el programa Scala o Java sintonizado a mano.
Aplicaciones
Con su interfaz unificada fácil de usar, su motor de ejecución de alto rendimiento y el soporte
para una variedad de fuentes de datos, Spark SQL puede usarse para una variedad de tareas de
análisis y procesamiento de datos. El análisis interactivo de datos es solo una aplicación de Spark
SQL. En esta sección se analizan algunas de las otras aplicaciones comunes de Spark SQL.
ETL es el proceso de leer datos de una o más fuentes, aplicar alguna transformación en los datos
y escribirlos en otra fuente de datos. Conceptualmente, consta de tres pasos: extraer,
transformar y cargar. Estos pasos no necesitan ser secuenciales; una aplicación no tiene que
extraer todos los datos antes de moverla al paso de transformación. Una vez que ha extraído
una parte de los datos, puede ejecutar los tres pasos en paralelo. El paso de extracción implica
la lectura de datos de uno o más sistemas operativos. La fuente de datos podría ser una base de
datos, API o un archivo. La base de datos de origen puede ser una base de datos relacional o un
almacén de datos NoSQL. Un archivo puede estar en CSV, JSON, XML, Parquet, ORC, Avro,
Protocol Buffers o algún otro formato. El paso de transformación consiste en limpiar y modificar
los datos de origen utilizando algunas reglas. Por ejemplo, las filas con datos no válidos pueden
eliminarse o las columnas con valores nulos pueden completarse con algún valor. Las
transformaciones pueden incluir, concatenar dos columnas, dividir una columna en múltiples
columnas, codificar una columna, traducir una columna de una codificación a una codificación
diferente, o aplicar alguna otra transformación para preparar los datos para el sistema de
destino. El paso de carga escribe los datos en un origen de datos de destino. El destino puede
ser una base de datos o un archivo. En general, ETL se utiliza para el almacenamiento de datos.
Los datos se recopilan de varios sistemas operativos diferentes, se limpian, se transforman y se
almacenan en un almacén de datos. Sin embargo, ETL no es exclusivo del almacenamiento de
datos. Por ejemplo, se puede usar para permitir el intercambio de datos entre dos sistemas
dispares. Se puede utilizar para convertir datos de un formato a otro. Del mismo modo, la
migración de datos de un sistema heredado a un nuevo sistema es un proceso ETL.
Virtualización de datos
Spark SQL proporciona una abstracción unificada para procesar datos de una variedad de
fuentes de datos. Se puede usar para procesar o analizar datos de cualquier fuente de datos
compatible utilizando SQL, HiveQL o consultas integradas de lenguaje escritas en Scala, Java,
Python o R.
Como se mencionó anteriormente, Spark SQL se puede utilizar de dos maneras. En primer lugar,
puede ser utilizado como una biblioteca. En este modo, las tareas de procesamiento de datos se
pueden expresar como consultas integradas de SQL, HiveQL o lenguaje dentro de una aplicación
Scala, Java, Python o R. En segundo lugar, Spark SQL se puede utilizar como un motor de consulta
de SQL distribuido. Viene preempaquetado con un servidor Thrift / JDBC / ODBC. Una aplicación
cliente puede conectarse a este servidor y enviar consultas de SQL / HiveQL utilizando la interfaz
de Thrift, JDBC u ODBC.
Almacenamiento de datos
Un almacén de datos convencional es esencialmente una base de datos que se utiliza para
almacenar y analizar grandes cantidades de datos. Consta de tres componentes estrechamente
integrados: tablas de datos, tablas del sistema y un motor de consulta SQL. Las tablas de datos,
como su nombre lo indica, almacenan los datos del usuario. Las tablas del sistema almacenan
metadatos sobre los datos en las tablas de datos. Tanto los datos como las tablas del sistema se
UNIVERSIDAD UTE
almacenan como archivos utilizando el sistema de archivos del sistema operativo subyacente. El
motor de consulta SQL proporciona una interfaz SQL para almacenar y analizar los datos en las
tablas de datos. Los tres componentes generalmente se empaquetan juntos como un software
o dispositivo propietario.
La biblioteca Spark SQL proporciona una interfaz de programación de aplicaciones (API) en varios
idiomas. Al momento de escribir este libro, admite Scala, Java, Python y R. También le permite
incrustar SQL / HiveQL dentro de su aplicación. Incluso puede ir y venir entre SQL / HiveQL y la
API del idioma nativo.
Abstracciones clave
La API Spark SQL consta de tres abstracciones clave: SQLContext, HiveContext y DataFrame. Una
aplicación Spark SQL procesa datos usando estas abstracciones.
SQLContext
SQLContext es el punto de entrada principal en la biblioteca Spark SQL. Es una clase definida en
la biblioteca Spark SQL. Una aplicación Spark SQL debe crear una instancia de la clase SQLContext
o HiveContext. Se requiere SQLContext para crear instancias de las otras clases proporcionadas
por la biblioteca Spark SQL. También es necesario para ejecutar consultas SQL.
import org.apache.spark._
import org.apache.spark.sql._
HiveContext
<?xml version="1.0"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/path/to/hive/warehouse</value>
UNIVERSIDAD UTE
<description>
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=/path/to/hive/metastore_db;create=true</value>
<description>
</description>
</property>
</configuration>
Marco de datos
Fila
Fila es una abstracción de Spark SQL para representar una fila de datos. Conceptualmente, es
equivalente a una tupla o fila relacional en una tabla. Spark SQL proporciona métodos de fábrica
para crear objetos de fila. A continuación, se muestra un ejemplo.
import org.apache.spark.sql._
Un DataFrame se puede crear de dos maneras. En primer lugar, se puede crear a partir de una
fuente de datos. Spark SQL proporciona métodos de creación para crear un DataFrame a partir
de una variedad de fuentes de datos. Algunas de las fuentes de datos tienen soporte
incorporado y otras requieren bibliotecas externas. En segundo lugar, se puede crear un
DataFrame desde un RDD.
UNIVERSIDAD UTE
Spark SQL proporciona una interfaz unificada para crear un DataFrame a partir de una variedad
de fuentes de datos. Por ejemplo, la misma API se puede usar para crear un DataFrame desde
una tabla MySQL, PostgreSQL, Oracle o Cassandra. De manera similar, la misma API se puede
utilizar para crear un DataFrame desde un archivo Parquet, JSON, ORC o CSV en el sistema de
archivos local, HDFS o S3.
JSON
La clase DataFrameReader proporciona un método llamado json para leer un conjunto de datos
JSON. Toma una ruta como argumento y devuelve un DataFrame. La ruta puede ser el nombre
de un archivo JSON o de un directorio que contenga varios archivos JSON.
import org.apache.spark.sql.types._
.schema(userSchema)
.json("path/to/user.json")
Parquet
val parquetS3DF =
sqlContext.read.parquet("s3a://BUCKET_NAME/FOLDER_NAME/data.parquet")
ORC
UNIVERSIDAD UTE
La clase DataFrameReader proporciona un método llamado orc para leer un conjunto de datos
almacenado en formato de archivo ORC. Toma una ruta como argumento y devuelve un
DataFrame.
Hive
Puede crear un DataFrame a partir de una tabla Hive de dos maneras. Primero, puede usar el
método de tabla definido en la clase DataFrameReader. Toma el nombre de una tabla en un
metastore de Hive y devuelve un DataFrame.
El método jdbc definido en la clase DataFrameReader crea un DataFrame desde cualquier base
de datos compatible con JDBC, incluidos MySQL, PostgresSQL, H2, Oracle, SQL Server, SAP Hana
y DB2. La clase DataFrameReader proporciona varias variantes sobrecargadas del método jdbc.
La más simple toma tres argumentos: la URL de JDBC de una base de datos, el nombre de la
tabla y las propiedades de conexión. Las propiedades de conexión especifican argumentos de
conexión como el nombre de usuario y la contraseña.
connectionProperties.setProperty("user","database-user-name")
connectionProperties.setProperty("password"," database-user-password")
tiene una implementación de Hive existente, puede crear una tabla temporal utilizando el
método registerTempTable proporcionado por la clase DataFrame. Discutiré este método con
más detalle en la siguiente sección.
import org.apache.spark.sql.types._
.schema(userSchema)
.json("path/to/user.json")
userDF.registerTempTable("user")
"SELECT gender, count(1) as cnt FROM user GROUP BY gender ORDER BY cnt")
La sección anterior trató el método sql en las clases SQLContext y HiveContext para procesar un
conjunto de datos utilizando sentencias de SQL o HiveQL incrustadas. La API DataFrame
proporciona una forma alternativa de procesar un conjunto de datos.
$ cd SPARK_HOME
case class Customer(cId: Long, name: String, age: Int, gender: String)
case class Product(pId: Long, name: String, price: Double, cost: Double)
Operaciones básicas
Esta sección describe las operaciones básicas comúnmente utilizadas proporcionadas por la
clase DataFrame.
Cache
customerDF.cache()
UNIVERSIDAD UTE
sqlContext.setConf("spark.sql.inMemoryColumnarStorage.compressed", "true")
sqlContext.setConf("spark.sql.inMemoryColumnarStorage.batchSize", "10000")
Columnas
El método de las columnas devuelve los nombres de todas las columnas en el DataFrame de
origen como una matriz de String.
Dtypes
El método dtypes devuelve los tipos de datos de todas las columnas en el DataFrame de origen
como una matriz de tuplas. El primer elemento en una tupla es el nombre de una columna y el
segundo elemento es el tipo de datos de esa columna.
(age,IntegerType), (gender,StringType))
Explain
customerDF.explain()
== Physical Plan ==
Persistencia
customerDF.persist
PrintSchema
customerDF.printSchema()
root
RegisterTempTable
El método registerTempTable crea una tabla temporal en el metastore de Hive. Toma un nombre
de tabla como argumento. Se puede consultar una tabla temporal utilizando el método sql en
SQLContext o HiveContext. Está disponible solo durante la vida útil de la aplicación que lo crea.
customerDF.registerTempTable("customer")
Esta sección describe los métodos de consulta integrados en el lenguaje que se utilizan
comúnmente en la clase DataFrame.
Agg
count(name): bigint]
Aplicación
Cubo
El método del cubo toma los nombres de una o más columnas como argumentos y devuelve un
cubo para el análisis multidimensional. Es útil para generar informes de tablas cruzadas.
salesCubeDF.withColumnRenamed("sum(revenue)", "total").show(30)
Distinto
El método distinto devuelve un nuevo DataFrame que contiene solo las filas únicas en el
DataFrame de origen.
Explotar
El método de explosión genera cero o más filas de una columna usando una función
proporcionada por el usuario. Se necesitan tres argumentos. El primer argumento es la columna
de entrada, el segundo argumento es la columna de salida y el tercer argumento es una función
proporcionada por el usuario que genera uno o más valores para la columna de salida para cada
valor en la columna de entrada.
case class Email(sender: String, recepient: String, subject: String, body: String)
val emails = List(Email("James", "Mary", "back", "just got back from vacation"),
UNIVERSIDAD UTE
wordDF.show
Filtro
El método de filtro filtra filas en el DataFrame de origen utilizando una expresión SQL que se le
proporciona como argumento. Devuelve un nuevo DataFrame que contiene solo las filas
filtradas. La expresión SQL se puede pasar como un argumento de cadena.
filteredDF: org.apache.spark.sql.DataFrame = [cId: bigint, name: string, age: int, gender: string]
Groupby
El método groupBy agrupa las filas en el DataFrame de origen usando las columnas
proporcionadas como argumentos. La agregación se puede realizar en los datos agrupados
devueltos por este método.
countByGender.show
revenueByProductDF.show
UNIVERSIDAD UTE
Intersect
commonCustomersDF.show
Join
El método de unión realiza una unión SQL del DataFrame de origen con otro DataFrame. Toma
tres argumentos, un DataFrame, una expresión de unión y un tipo de combinación.
case class Transaction(tId: Long, custId: Long, prodId: Long, date: String, city: String)
innerDF.show
limit
El método de límite devuelve un DataFrame que contiene el número especificado de filas del
DataFrame de origen.
orderBy
El método orderBy devuelve un DataFrame ordenado por las columnas dadas. Toma los
nombres de una o más columnas como argumentos.
sortedDF.show
sortedByAgeNameDF.show
UNIVERSIDAD UTE
randomSplit
dfArray(0).count
dfArray(1).count
dfArray(2).count
rollup
El método de resumen toma los nombres de una o más columnas como argumentos y
devuelve un resumen multidimensional. Es útil para la subagregación a lo largo de una
dimensión jerárquica como la geografía o el tiempo. Supongamos que tiene un conjunto de
datos que rastrea las ventas anuales por ciudad, estado y país. El método de acumulación se
puede usar para calcular el total general y los subtotales por ciudad, estado y país.
rollup.show
sample
El método de muestra devuelve un DataFrame que contiene la fracción especificada de las filas
en el DataFrame de origen. Se necesitan dos argumentos. El primer argumento es un valor
booleano que indica si el muestreo debe realizarse con reemplazo. El segundo argumento
especifica la fracción de las filas que deben devolverse.
select
El método de selección devuelve un DataFrame que contiene solo las columnas especificadas
del DataFrame de origen.
namesAgeDF.show
UNIVERSIDAD UTE
Una variante del método de selección permite una o más expresiones de columna como
argumentos.
newAgeDF.show
selectExpr
El método selectExpr acepta una o más expresiones SQL como argumentos y devuelve un
DataFrame generado al ejecutar las expresiones SQL especificadas.
newCustomerDF.show
withColumn
El método withColumn agrega una nueva columna o reemplaza una columna existente en el
DataFrame de origen y devuelve un nuevo DataFrame. Se necesitan dos argumentos. El primer
argumento es el nombre de la nueva columna y el segundo argumento es una expresión para
generar los valores de la nueva columna.
newProductDF.show
UNIVERSIDAD UTE
RDD Operaciones
La clase DataFrame admite operaciones RDD de uso común como map, flatMap, foreach,
foreachPartition, mapPartition, coalesce y repartition. Estos métodos funcionan de manera
similar a sus operaciones homónimas en la clase RDD. Además, si necesita acceder a otros
métodos RDD que no están presentes en la clase DataFrame, puede obtener un RDD desde un
DataFrame. Esta sección analiza las técnicas utilizadas comúnmente para generar un RDD a
partir de un DataFrame.
rdd
age: Int = 21
Los campos en una fila también se pueden extraer utilizando la coincidencia de patrones de
Scala.
case Row(cId: Long, name: String, age: Int, gender: String) => (name, age)
nameAndAge.collect
toJSON
El método toJSON genera un RDD de cadenas JSON desde el DataFrame de origen. Cada
elemento en el RDD devuelto es un objeto JSON.
jsonRDD.collect
Actions
Al igual que las acciones RDD, los métodos de acción en la clase DataFrame devuelven los
resultados al programa Driver. Esta sección cubre los métodos de acción comúnmente
utilizados en la clase DataFrame.
collect
El método de recopilación devuelve los datos en un marco de datos como una matriz de filas.
count
count: Long = 6
describe
summaryStatsDF.show
first
Show
El método show muestra las filas en el DataFrame de origen en la consola del controlador en
un formato tabular. Opcionalmente toma un entero N como argumento y muestra las N filas
superiores. Si no se proporciona ningún argumento, muestra las 20 filas superiores.
customerDF.show(2)
take
El método de toma toma un entero N como argumento y devuelve las primeras N filas del
DataFrame de origen como una matriz de Filas.
UNIVERSIDAD UTE
Write
Guardar un DataFrame
Spark SQL proporciona una interfaz unificada para guardar un DataFrame en una variedad de
fuentes de datos. La misma interfaz se puede utilizar para escribir datos en bases de datos
relacionales, almacenes de datos NoSQL y una variedad de formatos de archivo. La clase
DataFrameWriter define la interfaz para escribir datos en un origen de datos. A través de sus
métodos de construcción, le permite especificar diferentes opciones para guardar datos. Por
ejemplo, puede especificar el formato, la partición y el manejo de los datos existentes. Los
siguientes ejemplos muestran cómo guardar un DataFrame en diferentes sistemas de
almacenamiento.
customerDF.write
.format ("org.apache.spark.sql.json")
homeDF.write
.format ("org.apache.spark.sql.parquet")
.partitionBy ("ciudad")
homeDF.write
UNIVERSIDAD UTE
.format ("orc")
.partitionBy ("ciudad")
df.write
.format ("org.apache.spark.sql.jdbc")
.options (Map ("url" -> "jdbc: postgresql: // host: port / database? user = <USER> & password =
<PASS>",
.salvar()
df.write.saveAsTable ("hive-table-name")
Puede guardar un DataFrame en formato Parquet, JSON, ORC o CSV en cualquier sistema de
almacenamiento compatible con Hadoop, incluido el sistema de archivos local, HDFS o Amazon
S3. Si un origen de datos admite el diseño particionado, la clase DataFrameWriter lo admite a
través del método partitionBy. Dividirá las filas por la columna especificada y creará un
subdirectorio separado para cada valor único en la columna especificada.
homeDF.write .format("parquet")
.partitionBy("city")
.save("homes")
El código anterior divide las filas por la columna de la ciudad. Se creará un subdirectorio para
cada valor único de ciudad. Por ejemplo, los subdirectorios llamados city = Berkeley, city =
Fremont, city = Oakland, etc., se crearán en el directorio de casas.
newHomesDF.registerTempTable("homes")
Al guardar un DataFrame, si la ruta o tabla de destino ya existe, Spark SQL lanzará una
excepción de manera predeterminada. Puede cambiar este comportamiento llamando al
método de modo en la clase DataFrameWriter. Toma un argumento, que especifica el
UNIVERSIDAD UTE
sobrescribir: sobrescribe los datos existentes si existe una ruta / tabla de destino.
customerDF.write .format("parquet")
.mode("overwrite")
.save("path/to/output-directory")
customerDF.write .mode("append")
.saveAsTable("hive-table-name")
Además de los métodos que se muestran aquí para escribir datos en un origen de datos, la
clase DataFrameWriter proporciona métodos especiales para escribir datos en los orígenes de
datos para los cuales tiene soporte incorporado. Estas fuentes de datos incluyen bases de
datos compatibles con Parquet, ORC, JSON, Hive y JDBC.
JSON
customerDF.write.json("path/to/directory")
Parquet
customerDF.write.parquet("path/to/directory")
ORC
El método orc guarda un DataFrame en formato de archivo ORC. Similar a los métodos JSON y
Parquet, toma un camino como argumento.
Hive
El método saveAsTable guarda el contenido de un DataFrame como una tabla de Hive. Guarda
un DataFrame en un archivo y registra los metadatos como una tabla en el metastore de Hive.
customerDF.write.saveAsTable ("hive-table-name")
UNIVERSIDAD UTE
JDBC-Compliant Database
El método jdbc guarda un DataFrame en una base de datos utilizando la interfaz JDBC. Toma
tres argumentos: la URL de JDBC de una base de datos, el nombre de la tabla y las propiedades
de conexión. Las propiedades de conexión especifican argumentos de conexión como el
nombre de usuario y la contraseña.
Built-in Functions
Spark SQL viene con una lista completa de funciones integradas, que están optimizadas para
una ejecución rápida. Implementa estas funciones con técnicas de generación de código. Las
funciones integradas se pueden usar tanto desde la API DataFrame como desde la interfaz SQL.
Para usar las funciones integradas de Spark desde la API DataFrame, debe agregar la siguiente
declaración de importación a su código fuente.
importar org.apache.spark.sql.functions._
Aggregate
Las funciones agregadas se pueden utilizar para realizar agregaciones en una columna. Las
funciones agregadas incorporadas incluyen approxCountDistinct, avg, count, countDistinct,
first, last, max, mean, min, sum y sumDistinct.
Colección (Collection)
Las funciones de colección operan en columnas que contienen una colección de elementos.
Las funciones de colección integradas incluyen array_contains, explode, size y sort_array.
Las funciones de fecha / hora facilitan el procesamiento de columnas que contienen valores de
fecha / hora. Estas funciones pueden subdividirse en las siguientes categorías: conversión,
extracción, aritmética y funciones varias.
Conversión (Conversion)
Las funciones de conversión convierten los valores de fecha / hora de un formato a otro. Por
ejemplo, puede convertir una cadena de marca de tiempo en formato aaaa-MM-dd HH: mm:
ss a un valor de época Unix usando la función unix_timestamp. A la inversa, la función
from_unixtime convierte un valor de época de Unix en una representación de cadena. Spark
SQL también proporciona funciones para convertir marcas de tiempo de una zona horaria a
otra. Las funciones de conversión integradas incluyen unix_timestamp, from_unixtime,
to_date, quarter, day, dayofyear, weekofyear, from_utc_timestamp y to_utc_timestamp.
Las funciones de extracción de campo le permiten extraer año, mes, día, hora, minuto y
segundo de un valor de Fecha / Hora. Las funciones de extracción de campo incorporadas
incluyen año, trimestre, mes, semana de año, día de año, día de mes, hora, minuto y segundo.
Miscellaneous
Además de las funciones mencionadas anteriormente, Spark SQL proporciona algunas otras
funciones útiles relacionadas con la fecha y la hora, como current_date, current_timestamp,
trunc, date_format.
Math
Las funciones matemáticas operan en columnas que contienen valores numéricos. Spark SQL
viene con una larga lista de funciones matemáticas integradas. Los ejemplos incluyen abs, ceil,
cos, exp, factorial, floor, hex, hypot, log, log10, pow, round, shiftLeft, sin, sqrt, tan y otras
funciones matemáticas de uso común.
String
Spark SQL proporciona una variedad de funciones incorporadas para procesar columnas que
contienen valores de cadena. Por ejemplo, puede dividir, recortar o cambiar el caso de una
cadena. Las funciones de cadena incorporadas incluyen ascii, base64, concat, concat_ws,
decodificar, codificar, format_number, format_string, get_json_object, initcap, instr, length,
levenshtein, localizar, bajar, lpad, ltrim, printf, regexp_extract, regexp_replace, repetir, invertir
UNIVERSIDAD UTE
, rpad, rtrim, soundex, space, split, subcadena, substring_index, translate, trim, unbase64,
upper y otras funciones de cadena de uso común.
Window
Spark SQL soporta funciones de ventana para análisis. Una función de ventana realiza un
cálculo a través de un conjunto de filas que están relacionadas con la fila actual. Las funciones
de ventana integradas que proporciona Spark SQL incluyen cumeDist, denseRank, lag, lead,
ntile, percentRank, rank y rowNumber.
Spark SQL permite funciones definidas por el usuario (UDF) y funciones de agregación
definidas por el usuario (UDAF). Tanto las UDF como las UDAF realizan cálculos personalizados
en un conjunto de datos. Un UDF realiza un cálculo personalizado fila por fila y devuelve un
valor para cada fila.
Spark SQL puede usarse como una herramienta de análisis de datos interactiva. Las secciones
anteriores usaron ejemplos de juguetes para que fueran fáciles de entender. Esta sección
muestra cómo se puede utilizar Spark SQL para el análisis interactivo de datos en un conjunto
de datos del mundo real. Puede utilizar consultas integradas en el idioma o SQL / HiveQL para
el análisis de datos.
Para las declaraciones de código de varias líneas, puede usar el modo de pegado del shell
Spark (: paste). Alternativamente, ingrese una declaración completa en una sola línea.
Ejemplo.
biz.filter ("...")
.seleccionar("...")
.espectáculo()
En el shell de Spark, escríbalo sin los saltos de línea, como se muestra a continuación.
UNIVERSIDAD UTE
Ejemplo.
GRUPO POR X
.show (50)
Escriba el código anterior en el shell de Spark sin saltos de línea, como se muestra a
continuación.
sqlContext.sql ("SELECCIONE x, cuenta (y) como total DE t GRUPO POR x ORDEN POR total")
.show (50)
Vamos a empezar ahora. Dado que utilizará algunas clases y funciones de la biblioteca Spark
SQL, necesitará la siguiente declaración de importación.
importar org.apache.spark.sql._
Vamos a crear un DataFrame a partir del conjunto de datos de las empresas de Yelp.
Hay que asegurarse de especificar la ruta de archivo correcta. Reemplace "ruta / a" con el
nombre del directorio donde desempaquetó el conjunto de datos de Yelp. Spark SQL lanzará
una excepción si no puede encontrar el archivo en la ruta especificada. Spark SQL lee todo el
conjunto de datos una vez para inferir el esquema de un archivo JSON. Revisemos el esquema
inferido por Spark SQL.
biz.printSchema()
utilice la interfaz SQL / HiveQL, debe registrar el DataFrame biz como una tabla temporal.
UNIVERSIDAD UTE
biz.registerTempTable ("biz")
Ahora se puede analizar el conjunto de datos de las empresas de Yelp utilizando la API
DataFrame o SQL / HiveQL. Mostraré el código para ambos, pero mostraré el resultado solo
para las consultas SQL / HiveQL. Vamos a almacenar en caché los datos en la memoria, ya que
los consultarás más de uno una vez.
biz.cache ()
SQL
sqlContext.cacheTable ("biz")
También puede almacenar en caché una tabla utilizando la instrucción CACHE TABLE, como se
muestra a continuación.
Tener en cuenta que, a diferencia del almacenamiento en caché RDD, Spark SQL almacena
inmediatamente una tabla en caché cuando utiliza la instrucción CACHE TABLE.
SQL
SQL
resultDF.orderBy($"count".desc).show(5)
resultDF = biz.groupBy("state").count
resultDF.orderBy(resultDF("count").desc).show(5)
puede usar cualquiera de las dos sintaxis. A continuación, encontremos cinco negocios con una
calificación de cinco estrellas.
SQL
SQL
sqlContext.sql("SELECT name, stars, review_count, city, state FROM biz WHERE state = 'NV'
AND stars = 5.0").show(3)
biz.groupBy("state").sum("review_count").show()
SQL
biz.groupBy("stars").count.show()
SQL
SQL
SQL
SQL
sqlContext.sql("SELECT name, stars, review_count FROM biz WHERE city = 'Las Vegas' ORDER
BY stars DESC, review_count DESC LIMIT 5 ").show
Puede leer los archivos de parquet creados en el paso anterior, como se muestra a
continuación.
Esta sección muestra cómo puede explorar el conjunto de datos de Yelp utilizando solo SQL /
HiveQL. Scala no se utiliza en absoluto. Para este análisis, utilizará el servidor Spark SQL Thrift /
JDBC / ODBC y el cliente Beeline. Ambos vienen preempacados con Spark. El primer paso es
iniciar el servidor Spark SQL Thrift / JDBC / ODBC desde un terminal. El directorio sbin de Spark
contiene una secuencia de comandos para iniciarlo.
El segundo paso es iniciar Beeline, que es un cliente CLI (interfaz de línea de comandos) para el
servidor Spark SQL Thrift / JDBC. Conceptualmente, es similar al cliente mysql para MySQL o el
cliente psql para PostgreSQL. Le permite escribir una consulta HiveQL, envía la consulta escrita
a un servidor Spark SQL Thrift / JDBC para su ejecución y muestra los resultados en la consola.
El directorio bin de Spark contiene una secuencia de comandos para iniciar Beeline. Vamos a
abrir otra terminal y lanzar Beeline.
path/to/spark/bin/beeline
Ahora debería estar dentro del shell de Beeline y ver el indicador de Beeline, como se muestra
a continuación.
El tercer paso es conectarse al servidor Spark SQL Thrift / JDBC desde el shell de Beeline.
El comando de conexión requiere una URL de JDBC. El puerto JDBC predeterminado para el
servidor Spark SQL Thrift / JDBC es 10000. Beeline le pedirá un nombre de usuario y una
contraseña. Ingrese el nombre de usuario que usa para iniciar sesión en su sistema y una
contraseña en blanco.
Connecting to jdbc:hive2://localhost:10000
En este punto, tiene una conexión activa entre el cliente Beeline y el servidor Spark SQL. Sin
embargo, el servidor Spark SQL aún no conoce el conjunto de datos de Yelp. Vamos a crear una
tabla temporal que apunta al conjunto de datos de Yelp.
Asegúrese de reemplazar "ruta / a" con la ruta del directorio donde desempaquetó el conjunto
de datos de Yelp en su máquina. Spark SQL lanzará una excepción si no puede encontrar el
archivo en la ruta especificada. El comando CREAR TABLA TEMPORAL crea una tabla temporal
externa en el metastore de Hive. Solo existe una tabla temporal mientras se ejecuta el servidor
JDBC de Spark SQL.
0: jdbc:hive2://localhost:10000> SELECT name, review_count, stars, city, state from biz WHERE
stars = 5.0 ORDER BY review_count DESC LIMIT 5;
Capítulo 8
El interés por Machine Learning crece a pasos agigantados. Ha ganado mucho impulso en los
últimos Años por algunas razones. La primera razón son las mejoras de rendimiento en hardware
y algoritmos. Machine Learning es un cómputo-intensivo Con proliferación de máquinas multi-
CPU y multi-core que poseen algoritmos eficientes, se ha hecho factible hacer cálculos de
aprendizaje automático en un tiempo razonable.
La tercera razón es que los MOOCs (cursos en línea abiertos masivos) han creado una tremenda
conciencia sobre el aprendizaje automático. Estos cursos Se han democratizado los
conocimientos requeridos para utilizar el aprendizaje automático. Las habilidades de
aprendizaje automático no son ya está limitado a unas pocas personas con Ph.D. en estadística.
Cualquiera puede aprender y aplicar el aprendizaje automático.
¿Qué es?
Características
Características categóricas
Una característica categórica o variable es una característica descriptiva. Puede tomar uno de
un número fijo de discreto valores. Representa un valor cualitativo, que es un nombre o una
etiqueta. Los valores de una característica categórica no tienen orden.
Características numéricas
Una característica o variable numérica es una variable cuantitativa que puede tomar cualquier
valor numérico. Describe una cantidad medible como un número. Los valores en una
característica numérica tienen ordenamiento matemático. Un numero discreto es aquel que
solo puede tomar ciertos valores. Una característica numérica continua puede tomar cualquier
valor dentro de un intervalo finito o infinito.
Etiquetas
Una etiqueta es una variable que un sistema de aprendizaje automático aprende a predecir. Es
la variable dependiente en un conjunto de datos, Las etiquetas se pueden clasificar en dos
categorías amplias: categóricas y numéricas. Una etiqueta categórica representa una clase o
categoría. Una etiqueta numérica es una variable dependiente numérica.
Modelos
Datos de Entrenamiento
Los datos utilizados por un algoritmo de aprendizaje automático para entrenar un modelo se
denominan datos de entrenamiento o conjunto de entrenamiento. Son Datos históricos o
UNIVERSIDAD UTE
conocidos, Los datos de entrenamiento se pueden clasificar en dos categorías: etiquetados y sin
etiquetar.
Etiquetados
Este conjunto de datos tiene una etiqueta para cada observación. Una de las columnas en el
conjunto de datos contiene las etiquetas.
Sin Etiquetar
Un conjunto de datos sin etiqueta no tiene una columna que se pueda usar como etiqueta.
Datos de prueba
Los datos utilizados para evaluar el rendimiento predictivo de un modelo se denominan datos
de prueba o conjunto de pruebas. Después de que el modelo ha sido entrenado, sus capacidades
predictivas deben probarse en un conjunto de datos conocido antes de usarse en nuevos datos.
Los datos de la prueba deben reservarse antes de entrenar un modelo. No debe utilizarse en
absoluto durante el entrenamiento. Debe probarse con datos que no se usaron para entrenarlo.
En general, una pequeña proporción de un conjunto de datos se retiene para probar antes de
entrenar un modelo. El porcentaje depende de una serie de factores, como el tamaño de un
conjunto de datos y el número de datos independientes. variables Una regla general es usar el
80% de los datos para entrenar un modelo y reservar un 20% como datos de prueba.
Clasificación
Regresión
agrupamiento
Detección de anomalías
Recomendación
Reducción de dimensionalidad
Clasificación
El objetivo al resolver un problema de clasificación es predecir una clase o categoría para una
observación. Una clase Está representada por una etiqueta. Las etiquetas para las observaciones
en el conjunto de datos de entrenamiento son conocidas, y el objetivo es entrenar un modelo
que predice la etiqueta para una nueva observación sin etiqueta. Matemáticamente, en una
clasificación. un modelo predice el valor de una variable categórica. La clasificación es una tarea
común en muchos campos, El aprendizaje automático se puede utilizar para la clasificación tanto
binaria como multi clase. En la clasificación binaria, las observaciones en un conjunto de datos
pueden Ser agrupados en dos clases mutuamente excluyentes. Cada observación o muestra es
positiva o negativa.
Regresión
El objetivo al resolver un problema de regresión es predecir una etiqueta numérica para una
observación sin etiquetar. Las etiquetas numéricas son conocidas por las observaciones en el
conjunto de datos de entrenamiento y se entrena un modelo para predecir La etiqueta para una
nueva observación.
Agrupamiento
UNIVERSIDAD UTE
Detección de anomalías
Recomendación
Reducción de dimensionalidad
La reducción de la dimensionalidad es una técnica útil para reducir el costo y el tiempo que toma
entrenar una máquina sistema de aprendizaje, El aprendizaje automático es una tarea de
computo intensiva. La complejidad del cálculo y los aumentos de costes. con el número de
características o dimensiones en un conjunto de datos. El objetivo en la reducción de la
dimensionalidad es reducir el Número de características en un conjunto de datos sin afectar
significativamente el rendimiento predictivo de un modelo. Un conjunto de datos puede tener
tantas dimensiones que es prohibitivamente caro usarlo para el aprendizaje automático, La idea
básica detrás de la reducción de dimensionalidad es que un conjunto de datos puede tener
varias características que tienen poca o cero poder predictivo. Un algoritmo de reducción de
dimensionalidad elimina automáticamente estas características de un conjunto de datos. Solo
las características con mayor poder predictivo se utilizan para el aprendizaje automático. Así, la
dimensionalidad. Las técnicas de reducción reducen la complejidad computacional y el costo del
aprendizaje automático.
UNIVERSIDAD UTE
Los algoritmos de aprendizaje automático utilizan datos para entrenar un modelo. El proceso de
entrenamiento de un modelo también se conoce como Ajustando un modelo con datos. En otras
palabras, un algoritmo de aprendizaje automático se ajusta a un modelo en un conjunto de datos
de entrenamiento. Dependiendo del tipo de datos de entrenamiento, los algoritmos de
aprendizaje automático se agrupan en dos Categorías, Aprendizaje automático supervisado y no
supervisado.
Algoritmos de regresión
Un algoritmo de regresión entrena un modelo con un conjunto de datos que tiene una etiqueta
numérica. El modelo entrenado puede entonces Predecir etiquetas numéricas para nuevas
observaciones sin etiquetar. Según la cantidad de predictor y las variables de respuesta, las
tareas de regresión se pueden agrupar en tres Categorías: Regresión simple, múltiple y
multivariable. La regresión simple implica una respuesta y una variable predictor La regresión
múltiple implica una respuesta y múltiples variables predictoras. Multivariable La regresión
implica varias respuestas y varias variables predictoras.
Regresión lineal
Los algoritmos de regresión lineal se ajustan a un modelo lineal con coeficientes utilizando datos
de entrenamiento. Un modelo lineal es un Combinación lineal de un conjunto de coeficientes y
variables explicativas. El algoritmo estima lo desconocido. Coeficientes, también conocidos
como parámetros del modelo, a partir de datos de entrenamiento. Los coeficientes ajustados
minimizan la suma. de los cuadrados de la diferencia entre las etiquetas observadas
pronosticadas y reales en el conjunto de datos de entrenamiento. Un ejemplo simple de un
modelo lineal se muestra aquí.
UNIVERSIDAD UTE
Regresión isotónica
Árboles de decisión
Conjuntos
Aunque el algoritmo del árbol de decisión tiene muchas ventajas, también tiene una gran
desventaja. Los árboles no tienen el mismo nivel de precisión predictiva que los modelos
UNIVERSIDAD UTE
entrenados con algoritmos que son más sofisticado. Este problema se resuelve utilizando una
colección de árboles de decisión en lugar de solo uno árbol de decisión.
Los algoritmos de aprendizaje automático que combinan múltiples modelos para generar un
modelo más poderoso. Se llaman algoritmos de aprendizaje conjunto. Un modelo entrenado por
un algoritmo de aprendizaje conjunto combina las predicciones de varios modelos base para
mejorar la generalización y la precisión predictiva en un solo modelo. Los algoritmos de
aprendizaje en conjunto se encuentran entre los de mejor desempeño en tareas de clasificación
y regresión.
• Bosques aleatorios. El algoritmo de bosque aleatorio entrena cada árbol de decisión en una
Ensamble de forma independiente utilizando una muestra aleatoria de datos. El árbol se entrena
usando un subconjunto de las características. El número de árboles en un conjunto es de El
orden de los cientos. Random Forest crea un modelo de conjunto que tiene un mejor
rendimiento predictivo que el de un modelo de árbol de decisión único. Para una tarea de
regresión, un modelo de bosque aleatorio toma un vector de entidad de entrada y obtiene una
predicción de cada árbol de decisión en el conjunto. Promedia en Las etiquetas numéricas
devuelven todos los árboles y devuelven el promedio según su predicción.
• Árboles impulsados por gradiente. El algoritmo de árboles impulsados por gradiente (GBT)
también entrena Un conjunto de árboles de decisión. Sin embargo, entrena secuencialmente
cada árbol de decisión. Optimiza cada nuevo árbol utilizando información de árboles
previamente entrenados. Así, El modelo se vuelve mejor con cada nuevo árbol. GBT puede
tardar más en entrenar un modelo, ya que entrena un árbol a la vez. Adicionalmente, es
propenso a sobre ajustar si se utiliza una gran cantidad de árboles en un conjunto. Sin embargo,
cada árbol en un conjunto GBT puede ser poco profundo, que es más rápido para entrenar
Algoritmos de clasificación
Los algoritmos de clasificación entrenan modelos que predicen valores categóricos. La variable
dependiente o de respuesta en El conjunto de datos de entrenamiento es una variable
categórica. En otras palabras, la etiqueta es una variable categórica. El modelo entrenado por
un algoritmo de clasificación puede ser un clasificador binario, de clases múltiples o de etiquetas
múltiples. Un clasificador binario clasifica las observaciones en dos categorías: positivo o
negativo. La etiqueta predicha tiene solo dos clases. Un clasificador de clases múltiples predice
una etiqueta que puede tener más de dos clases. Por ejemplo, una multi-clase El clasificador se
puede utilizar para clasificar imágenes de animales. La etiqueta en este ejemplo puede ser cat,
dog, hamster, lion, o algún otro animal. Un clasificador de etiquetas múltiples puede generar
más de una etiqueta para la misma observación. Por ejemplo, un El clasificador que clasifica los
artículos de noticias puede generar más de una etiqueta para un artículo relacionado con ambos.
deportes y negocios Los algoritmos de aprendizaje automático supervisado que se utilizan
comúnmente para tareas de clasificación incluyen los siguientes algoritmos.
Regresión logística
El algoritmo de regresión logística entrena un modelo lineal que puede usarse para tareas de
clasificación. Específicamente, El modelo generado puede usarse para predecir la probabilidad
de ocurrencia de un evento.
UNIVERSIDAD UTE
Naïve Bayes
El algoritmo Naïve Bayes usa el teorema de Bayes para entrenar a un clasificador. El modelo
entrenado por los ingenuos bayes. El algoritmo es un clasificador probabilístico. Para una
observación dada, calcula una distribución de probabilidad sobre un conjunto de clases.
Árboles de decisión
El algoritmo del árbol de decisión se cubrió en la sección que cubre los algoritmos de regresión.
Como se mencionó Anteriormente, los árboles de decisión se pueden utilizar para las tareas de
regresión y clasificación. El algoritmo trabaja el de la misma manera en ambos casos, excepto
por una cosa: los valores almacenados en los nodos terminales (hoja). Para las tareas de
regresión, cada nodo terminal almacena un valor numérico; Mientras que para las tareas de
clasificación, cada El nodo terminal almacena una etiqueta de clase. Múltiples hojas pueden
tener la misma etiqueta de clase. Para predecir una etiqueta para una En la observación, un
modelo de árbol de decisión comienza en el nodo raíz de un árbol de decisión y prueba las
características en comparación con Nodos internos hasta que llega a un nodo hoja. El valor en
el nodo hoja es la etiqueta predicha
Conjuntos
Los algoritmos de Conjunto como Random Forests y Gradient-Boosted Trees también se pueden
usar para tareas de clasificación. La lógica para predecir una etiqueta de clase utilizando Random
Forests es diferente para las tareas de clasificación. Cualquiera El modelo de bosques recopila
las predicciones de su conjunto de árboles de decisión y genera la etiqueta de clase predicho
por el número máximo de árboles según su predicción.
UNIVERSIDAD UTE
Red neuronal
Los algoritmos de redes neuronales están inspirados en redes neuronales biológicas. Intentan
imitar el cerebro. Un comúnmente El algoritmo de red neuronal utilizado para las tareas de
clasificación es la red neuronal de avance. Un clasificador entrenado por El algoritmo de red
neuronal feedforward también se conoce como un clasificador de perceptrón multicapa.
La métrica RMSE se usa generalmente para evaluar modelos generados por algoritmos de
regresión. Un relacionado La métrica es el error cuadrático medio (MSE). Un error en el contexto
de un algoritmo de regresión es la diferencia. entre la etiqueta numérica real y predicha de una
observación. Como su nombre lo indica, MSE es la media. Del cuadrado de los errores. Se calcula
matemáticamente al cuadrar el error para cada observación y calculando la media del cuadrado
de los errores. RMSE se calcula matemáticamente tomando una raíz cuadrada de MSE. RMSE y
MSE representan error de entrenamiento. Indican qué tan bien un modelo se ajusta a un
conjunto de entrenamiento. Ellos capturan la discrepancia entre las etiquetas observadas y las
etiquetas predichas por un modelo. Un modelo con un MSE o RMSE más bajo representa un
mejor modelo de ajuste que uno con un MSE o RMSE más alto.
MLlib se integra con otras bibliotecas Spark como Spark Streaming y Spark SQL. Puede ser
utilizado tanto con datos por lotes como de transmisión.
Utilidades estadísticas
MLlib proporciona clases y funciones para el análisis estadístico común. Es compatible con
estadísticas de resumen, correlaciones, muestreo estratificado, pruebas de hipótesis,
generación de datos aleatorios y estimación de la densidad del núcleo.
MLlib se puede utilizar para tareas comunes de aprendizaje automático, como regresión,
clasificación, agrupación, Detección de anomalías, reducción de dimensionalidad y
recomendación. La lista de algoritmos que vienen. Liado con MLlib está en constante
crecimiento. Esta sección enumera los algoritmos enviados con MLlib en el momento de
escribiendo este libro.
Regresión y Clasificación
Regresión lineal
Regresión logística
Máquinas de vectores soporte
Naïve Bayes
Árbol de decisión
Bosque aleatorio
Árboles de gradiente
Regresión isotónica
Agrupación
K-significa
Streaming k-means
Mezcla gaussiana
Agrupación de iteración de energía (PIC)
Asignación de Dirichlet latente (LDA)
Reducción de dimensionalidad
TF-IDF
Word2Vec
Escalador estándar
Normalizador
Selección de características de Chi-cuadrado
Producto elementwise
FP-growth
UNIVERSIDAD UTE
Association rules
PrefixSpan
Recommendation
La API de MLlib
La biblioteca MLlib se puede usar con aplicaciones desarrolladas en Scala, Java, Python o R. Esta
sección cubre la versión de Scala de la API de MLlib. Las clases y los objetos singleton
proporcionados por MLlib están disponibles en el paquete org.apache.spark.mllib
Puede probar los ejemplos de código que se muestran en esta sección en el Spark REPL. Vamos
a lanzar el shell Spark desde una terminal.
Tipos de datos
Las abstracciones de datos primarios de MLlib son Vector, LabeledPoint y Rating. Los algoritmos
de aprendizaje automático y las utilidades estadísticas en MLlib operan sobre datos
representados por estas abstracciones.
Vector
El tipo Vector representa una colección indexada de valores de tipo Doble con índice de tipo
cero basado en cero. Generalmente se usa para representar las características de una
observación en un conjunto de datos. Conceptualmente, un vector de longitud n representa una
observación con n características. En otras palabras, representa un elemento en una espacio n-
dimensional.
El tipo de Vector proporcionado por MLlib no debe confundirse con el tipo de Vector en la
colección Scala biblioteca. Ellos son diferentes. El tipo MLlib Vector implementa el concepto de
vector numérico de lineal álgebra. Una aplicación debe importar
org.apache.spark.mllib.linalg.Vector para usar el rasgo vectorial proporcionado por MLlib.
La biblioteca MLlib admite dos tipos de vectores: densos y dispersos. Se define el tipo de vector
MLlib como un rasgo, por lo que una aplicación no puede crear directamente una instancia de
Vector. En su lugar, debe utilizar la fábrica. Métodos proporcionados por MLlib para crear una
instancia de la clase DenseVector o SparseVector. Estas dos clases implementan el rasgo
vectorial. Los métodos de fábrica para crear una instancia de DenseVector o ña clase
SparseVector se define en el objeto de vectores.
DenseVector
Una instancia de la clase DenseVector almacena un valor de tipo doble en cada posición del
índice. Está respaldado por una formación. Generalmente se usa un vector denso si un conjunto
de datos no tiene demasiados valores de cero. Se puede crear, como se muestra aquí.
El método denso crea una instancia de la clase DenseVector a partir de los valores
proporcionados como argumentos Una variante del método denso toma un tipo Array of Double
como argumento y devuelve una instancia de la clase DenseVector.
UNIVERSIDAD UTE
SparseVector
La clase SparseVector representa un vector disperso, que almacena solo valores distintos de
cero. Es un dato eficiente.
Escriba para almacenar un conjunto de datos grande con muchos valores cero. Una instancia de
la clase SparseVector está respaldada por dos matrices; uno almacena los índices para valores
distintos de cero y el otro almacena los valores distintos de cero.
El método disperso devuelve una instancia de la clase SparseVector. El primer argumento a los
escasos método es la longitud de un vector disperso. El segundo argumento es una matriz que
especifica los índices para valores distintos de cero entradas. El tercer argumento es una matriz
que especifica los valores. Los índices y la matriz de valores deben tener la mismo largo.
LabeledPoint
Para la clasificación de múltiples clases, una etiqueta almacena un índice de clase basado en
cero de una observación. Los puntos etiquetados se pueden crear, como se muestra aquí.
importar org.apache.spark.mllib.linalg.Vectors
importar org.apache.spark.mllib.regression.LabeledPoint
val negativo = LabeledPoint (0.0, Vectors.sparse (3, Array (0, 2), Array (200.0, 300.0)))
Este código crea dos LabeledPoints. El primer LabeledPoint representa una observación positiva
con
UNIVERSIDAD UTE
tres caracteristicas El segundo LabeledPoint representa una observación negativa con tres
características.
Clasificación
La calificación se define como una clase de caso que consta de tres campos. El primer campo se
denomina usuario, que es de tipo En t. Representa un identificador de usuario. El segundo
campo se denomina producto, que también es de tipo Int. Representa un identificador de
producto o artículo. El tercer campo se denomina calificación, que de tipo doble.
importar org.apache.spark.mllib.recommendation._
Este código crea una instancia de la clase de calificación. Esta instancia representa una
calificación de 3.0 dada por un usuario con identificador 100 a un producto con identificador 10.
Algoritmos y Modelos
Esta sección describe brevemente las abstracciones de MLlib para representar algoritmos de
aprendizaje automático y modelos
Un modelo en MLlib está representado por una clase. MLlib ofrece diferentes clases para
representar modelos. Formado con diferentes algoritmos de aprendizaje automático.
Del mismo modo, un algoritmo de máquina está representado por una clase. MLlib también
proporciona generalmente un compañero. Objeto singleton con el mismo nombre para cada
clase de algoritmo de aprendizaje automático. Es más conveniente para entrenar un modelo
utilizando un objeto singleton que representa un algoritmo de aprendizaje automático.
Entrenar y usar un modelo generalmente involucra dos métodos clave: entrenar y predecir. El
metodo de tren es proporcionado por los objetos singleton que representan algoritmos de
aprendizaje automático. Se entrena un modelo con un determinado conjunto de datos y
devuelve una instancia de una clase de modelo específica de algoritmo. El método de predicción
es proporcionado por las clases representativas de modelos. Devuelve una etiqueta para un
conjunto dado de características.
Spark viene preempaquetado con conjuntos de datos de muestra que pueden usarse para
experimentar con la API de MLlib. Por la simplicidad, los ejemplos utilizan esos conjuntos de
datos de muestra.
Algunos de los archivos de datos están en formato LIBSVM. Cada línea almacena una
observación. La primera columna es una etiqueta. Le siguen las características, que se
representan como offset: valor, donde offset es el índice en el vector de entidad, y valor es el
valor de una entidad.
UNIVERSIDAD UTE
La biblioteca MLlib proporciona funciones de ayuda que crean RDD [LabeledPoint] a partir de
archivos que contienen datos etiquetados en el formato LIBSVM. Estos métodos los proporciona
el objeto MLUtils, que está disponible en
el paquete org.apache.spark.mllib.util
Algoritmos de regresión
Entrenar
El método del tren también toma unos pocos parámetros adicionales específicos del algoritmo
como argumentos. por ejemplo, el método del tren en el objeto RidgeRegressionWithSGD toma
como argumentos el número de iteraciones de pendiente de gradiente a ejecutar, tamaño de
paso para cada iteración de pendiente de gradiente, parámetro de regularización, fracción de
datos a utilizar en cada iteración y conjunto inicial de ponderaciones. Del mismo modo, el
método del tren en el objeto GradientBoostedTrees toma una estrategia de impulso como un
argumento.
trenRegresor
El siguiente ejemplo muestra cómo entrenar un modelo con RandomForest. Usaremos lo mismo
conjunto de datos que utilizamos anteriormente para entrenar un modelo con
LinearRegressionWithSGD
Modelos de regresión
Las instancias de estas clases son devueltas por los métodos trainRegressor del train o train de
los objetos mencionados en la sección anterior.Los métodos comúnmente utilizados en estas
clases se describen brevemente a continuación.
Predecir
Salvar
El método de guardar persiste un modelo entrenado a disco. Toma un SparkContext y una ruta
como argumentos y guarda el modelo de origen a la ruta dada. El modelo guardado se puede
leer más tarde con el método de carga.
Carga
El método de carga se define en los objetos del modelo complementario. Genera una instancia
de un modelo desde un Modelo previamente guardado. Toma como argumentos un
SparkContext y la ruta a un modelo guardado y devuelve una instancia de una clase modelo.
Algoritmos de clasificación
Esta sección describe brevemente los métodos proporcionados por los objetos singleton que
representan la clasificación algoritmos para entrenar un modelo.
Modelos de clasificación
Predecir
El método de predicción devuelve una clase o etiqueta categórica para un conjunto dado de
características. Toma un vector como un argumento y devuelve un valor de tipo doble.
Algoritmos de agrupamiento
La lista de clases MLlib que representan diferentes algoritmos de agrupamiento incluye KMeans,
StreamingKMeans, GaussianMixture, LDA, y PowerIterationClustering. MLlib también
proporciona objetos singleton complementarios con los mismos nombres.
Correr
El método de ejecución es proporcionado por las clases relacionadas con la agrupación. Similar
al método del tren, toma un RDD de Vector como argumento y devuelve un modelo específico
de algoritmo. Para el ejemplo, el método de ejecución en la clase PowerIterationClustering
devuelve una instancia de la clase PowerIterationClusteringModel.
El siguiente código de ejemplo utiliza una instancia de la clase KMeans para entrenar un
KMeansModel.
Modelos de clustering
Predecir
El método de predicción devuelve un índice de agrupación para una observación dada. Toma un
vector como argumento y devuelve un valor de tipo int. El siguiente código de ejemplo
determina los índices de cluster para un par de observaciones usando El KMeansModel entrenó
antes.
Algoritmos de recomendación
MLlib admite el filtrado colaborativo, que aprende los factores latentes que describen a los
usuarios y productos de un conjunto de datos que contiene solo identificadores de usuario,
identificadores de producto y calificaciones. Basado en el filtrado colaborativo se puede
UNIVERSIDAD UTE
MLlib proporciona una clase denominada ALS, que implementa la factorización de matriz de
mínimos cuadrados alternos. También proporciona un objeto singleton compañero con el
mismo nombre.
MLlib admite tanto valoraciones como comentarios implícitos. Una calificación está disponible
cuando un usuario califica explícitamente un producto. Por ejemplo, los usuarios califican
películas y programas en Netflix. Del mismo modo, los usuarios califican canciones en iTunes,
Spotify, Pandora, y otros servicios de música. Sin embargo, a veces una calificación explícita no
está disponible, pero una implícita la preferencia puede ser determinada a partir de las
actividades del usuario.
Modelos de recomendación
Un modelo de recomendación está representado por una instancia de la clase
MatrixFactorizationModel. MLLib también proporciona un objeto compañero con el mismo
nombre. Los métodos comúnmente utilizados se describen brevemente a continuación.
Método predecir.
El método de predicción en la clase MatrixFactorizationModel devuelve una calificación para un
usuario y producto dados. Este método va a tomar una identificación de usuario y una
identificación de producto, que son de tipo Int, como argumentos y devuelve una calificación,
que es de tipo “Double”. Una variante del método de predicción acepta un RDD de pares de ID
de usuario e ID de producto y devuelve un RDD de Clasificación. Por lo tanto, se puede usar para
predecir tanto la calificación para un solo par de producto-usuario o una lista de pares de
producto-usuario.
Método RecommendProducts.
Este método recomienda el número especificado de productos para un usuario determinado. Lo
que hace es tomar un ID de usuario y número de productos para recomendar como argumentos
y devuelve una matriz de clasificación. Cada calificación del objeto incluye la identificación de
usuario, la identificación del producto y una puntuación de calificación pronosticada. La matriz
devuelta está ordenada por puntuación en orden descendente y nos indica que una puntuación
alta tiene una recomendación fuerte.
Método recommendProductsForUsers.
Este método recomienda el número especificado de productos principales para todos los
usuarios, lo que hace es tomar la cantidad de productos para recomendar como argumento y
devuelve un RDD de usuarios con los mejores productos recomendados correspondientes.
Método recommendUsers.
Este método recomienda el número especificado de usuarios para un producto determinado. Lo
que nos devuelve este método es una lista de los usuarios que tienen más probabilidades de
estar interesados en un producto determinado. Se necesita un número de identificación del
UNIVERSIDAD UTE
producto de los usuarios para recomendar como argumentos y devuelve una matriz de
calificación.
Método recommendUsersForProducts.
Este método recomienda el número especificado de usuarios para todos los productos. Lo que
hace es tomar la cantidad de usuarios para recomendar como argumento y devuelve un RDD de
productos y los mejores usuarios recomendados correspondientes.
Método Save.
Este método toma un SparkContext y una ruta como argumentos y guarda el modelo de origen
a la ruta dada. El modelo guardado puede leerse posteriormente con la carga.
Método Load.
El método Load se puede utilizar para leer previamente el modelo guardado de un archivo. Este
modelo también toma un SparkContext y la ruta a un modelo guardado y devuelve una instancia
de la clase MatrixFactorizationModel.
Métricas de regresión.
Tenemos la clase RegressionMetrics la cual se puede usar para evaluar modelos generados por
algoritmos de regresión. Esto lo que va a hacer es proporcionarnos métodos para calcular el
error cuadrático medio, error cuadrático medio, error absoluto medio, R2, y otras métricas.
Métricas de Recomendación.
La clase RankingMetrics se puede utilizar para evaluar modelos de recomendación, esto no
proporciona métodos para calcular la efectividad predictiva de un modelo de recomendación.
UNIVERSIDAD UTE
Las métricas soportadas por la clase de RankingMetrics incluyen la media de precisión promedio,
normalizada, ganancia acumulada descontada, y precisión en k.
Spark ML.
Spark ML es otra biblioteca de aprendizaje automático que se ejecuta sobre Spark.
Spark ML proporciona una abstracción de mayor nivel que MLlib para crear flujos de trabajo de
aprendizaje automático o tuberías y les permite a los usuarios ensamblar y ajustar rápidamente
las líneas de aprendizaje automático. Hace que sea fácil crear una canalización para entrenar,
ajustar un modelo mediante la evaluación de un modelo con diferentes métricas. También
proporciona muchas clases y objetos “singleton” proporcionados por la biblioteca MLlib.
Generalmente, una tarea de aprendizaje automático consiste en los siguientes pasos:
1) Leer los datos.
2) Pre proceso o preparación de datos para su procesamiento.
3) Extraer características.
4) Dividir datos para entrenamiento, validación y pruebas.
5) Entrena un modelo con un conjunto de datos de entrenamiento.
6) Afine un modelo utilizando técnicas de validación cruzada.
7) Evaluar un modelo sobre un conjunto de datos de prueba.
8) Implementar un modelo.
Cada paso representa una etapa en una línea de aprendizaje automático. Spark ML proporciona
abstracciones para estas etapas en comparación con MLlib.
Las abstracciones clave introducidas por Spark ML incluyen Transformer, Estimator, Pipeline,
Parameter Grid, CrossValidator, y Evaluador.
Transformador.
Un transformador genera un nuevo DataFrame a partir de un DataFrame existente. Lo hace
implementando un método llamado transform, que toma un DataFrame como entrada y
devuelve un nuevo DataFrame añadiendo una o más columnas nuevas a la entrada DataFrame.
Spark ML ofrece dos tipos de transformadores: transformador de características y modelo de
aprendizaje automático, y el transformador de funciones.
Modelo.
Un modelo representa un modelo de aprendizaje automático. Esta toma un DataFrame como
entrada y genera un nuevo DataFrame que contiene etiquetas predichas para cada entidad de
entrada Vector. El conjunto de datos de entrada debe tener una columna que contenga la
característica.
Estimador.
Un estimador entrena o ajusta un modelo de aprendizaje automático en un conjunto de datos
de entrenamiento. Representa una máquina de aprendizaje de algoritmo y lo que hace es
implementar un método llamado fit, que toma un DataFrame como argumento y devuelve un
modelo de aprendizaje automático.
UNIVERSIDAD UTE
Pipeline.
Pipeline o tubería conecta múltiples transformadores y estimadores en una secuencia específica
para formar una máquina o flujo de trabajo de aprendizaje.
Un Pipeline consiste en una secuencia de etapas, donde cada etapa es un transformador o un
estimador. Luego se ejecutan estas etapas en el orden en que se especifican. Se implementa un
método de ajuste, que toma un DataFrame como argumento y lo pasa por las etapas del
oleoducto, este DataFrame de entrada es transformado por cada etapa.
PipelineModel.
Representa una tubería ajustada. Se genera mediante el método de ajuste de un Pipeline. Tiene
las mismas etapas como el Oleoducto que lo generó, a excepción de los Estimadores, que son
reemplazados por modelos entrenados por esos estimadores. En otras palabras, todos los
estimadores son reemplazados por transformadores.
A diferencia de un Pipeline, que es un estimador, un PipelineModel es un transformador. Se
puede aplicar a un conjunto de datos.
Evaluador.
Evalúa el rendimiento predictivo o la efectividad de un modelo y roporciona un método llamado
eval, que toma un DataFrame como entrada y devuelve una métrica escalar.
CrossValidator.
Un CrossValidator encuentra la mejor combinación de valores de híper parámetro para entrenar
el modelo óptimo para una tarea de aprendizaje automático.
Un CrossValidator utiliza la validación cruzada de k-fold y la búsqueda de cuadrícula para el híper
parámetro y el ajuste del modelo. La operación que realizar es dividir un conjunto de datos de
entrenamiento en K-pliegues, donde k es un número especificado por un usuario.