Translate
domingo, 29 de julio de 2018
Eclipse Foundation libero Eclipse Photon IDE
La Fundación Eclipse ha lanzado la última versión de Eclipse IDE. Eclipse Photon ofrece soporte para Java 10 y Java EE 8, mejoras para herramientas de desarrollo de PHP, mejoras de UI y más.
Java 10 es totalmente compatible con Eclipse Java Development Tools (JDT) y permite a los desarrolladores utilizar la inferencia de tipos variables (JEP 286).
Eclipse Photon también ha agregado una función para convertir un proyecto de Java no modular a un módulo creando un module.info.java. Los desarrolladores también pueden crear un módulo pegando un fragmento de código que represente module-info.java directamente en una carpeta de origen para crear un archivo module-info.java.
El editor de Java se ha mejorado en Eclipse Photon de varias maneras. La coloración de sintaxis de Java se ha mejorado al usar el tema oscuro al reducir el uso de estilo en negrita y cambiar algunos colores que estaban demasiado cerca el uno del otro. Además, ahora es posible escapar de caracteres que no sean ASCII cuando se pegue en un literal de cadena.
Las herramientas de desarrollo de PHP han recibido una serie de mejoras, como soporte de validación para variables no utilizadas / no asignadas, validación para escalares en break / continue, validación para operaciones estáticas para PHP 7 o superior. Además, PHP Explorer ha sido reemplazado por el Explorador de proyectos. Una lista completa de características de PHP está disponible en la sección de PHP en la página Eclipse Photon New y Noteworthy.
Según la Fundación Eclipse, este lanzamiento incluye 85 proyectos con más de 73 millones de líneas de código, con la contribución de 620 desarrolladores, 246 de los cuales son Eclipse committers.
Sin más dejo link:
https://www.eclipse.org/org/press-release/20180627_new-photon-release-of-eclipse-ide-ships-with-full-rust-support.php
Ha descargar!!
5 cursos de Java Gratuitos
Si queremos aprender una tecnología nueva lo mejor es empezar por un libro o un curso y luego ir a tutoriales de internet. Saltar de tutorial en tutorial, nos da el conocimiento pero nos falta el orden. Con un curso o un libro aprendemos ordenadamente, como debe ser.
Por lo tanto dejo 5 cursos gratuitos para todos los que quieran empezar con Java :
5 cursos gratuitos de Git
Si queremos aprender una tecnología nueva lo mejor es empezar por un libro o un curso y luego ir a tutoriales de internet. Saltar de tutorial en tutorial, nos da el conocimiento pero nos falta el orden. Con un curso o un libro aprendemos ordenadamente, como debe ser.
Por lo tanto dejo 5 cursos gratuitos para todos los que quieran empezar con GIT :
- Git Started with GitHub
- The Ultimate GIT 5-day Challenge
- Getting Started With Git: Key Concepts for Beginners
- Command Line Essentials: Git Bash for Windows
- Short and Sweet: Get Started with Git and GitHub Right Now
La imagen es solo para entendidos ;)
martes, 24 de julio de 2018
¿Qué hay de nuevo en MongoDB 4.0?
MongoDB 4.0 es un hito importante en la evolución de MongoDB. Esta versión es rápida, flexible y presenta una gran escalabilidad de su diseño de sistemas distribuidos; y a la vez, da la libertad de correr en cualquier lugar, MongoDB 4.0 le permite estandarizar sus aplicaciones en una única y moderna plataforma de datos.
Cortandola con la venta de mongodb podemos nombrar las siguientes mejoras :
- Transacciones ACID multi-documento
- Gráficos MongoDB para una visualización de datos rápida y fácil
- Arrastrar y soltar la construcción de tuberías de agregación
- Integración de Kubernetes y Red Hat OpenShift
- El nuevo MongoDB Mobile
Para discutir estos temas me invitaron a un webinar:
Register Now |
Ojo, Este webinar es mañana 25!
Dejo links:
lunes, 23 de julio de 2018
¡Oracle Database 18c ahora está disponible para descargar!
Hoy, Oracle lanzó oficialmente Oracle Database 18c para Linux x86-64.
Como recordarán, originalmente lanzamos 18c en Oracle Public Cloud y Oracle Engineered Systems en febrero.
18c es la primera versión de la base de datos que sigue el nuevo modelo de publicación anual. En realidad Oracle Database 18c es "Oracle Database 12c Release 2 12.2.0.2", el nombre simplemente ha sido cambiado para reflejar el año en que se lanzó el producto.
Sin más dejo el link de descarga:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
y el de la documentación :
https://docs.oracle.com/en/database/oracle/oracle-database/18/index.html
jueves, 19 de julio de 2018
Apache NiFi For Dummies
Hortonworks nos regala el libro Apache NiFi for Dummies!!
Y como somos Dummies, nos viene bien :P
Empecemos desde el principio, que es Apache NiFi?
Apache NiFi es una plataforma de procesamiento de eventos y logística de datos integrada. Proporciona una plataforma integral que puede recopilar, seleccionar, analizar y actuar sobre los datos en tiempo real, en nuestros propios servers o en la nube.
En este libro aprenderemos sobre:
Dejo link: https://hortonworks.com/ebook/ni-fi-dummies/
Y como somos Dummies, nos viene bien :P
Empecemos desde el principio, que es Apache NiFi?
Apache NiFi es una plataforma de procesamiento de eventos y logística de datos integrada. Proporciona una plataforma integral que puede recopilar, seleccionar, analizar y actuar sobre los datos en tiempo real, en nuestros propios servers o en la nube.
En este libro aprenderemos sobre:
- Fundamentos de NiFi
- Casos de uso NiFi
- y cómo comenzar, depurar y administrar sus propios flujos de datos.
Dejo link: https://hortonworks.com/ebook/ni-fi-dummies/
miércoles, 18 de julio de 2018
Oracle vs NoSql vs NewSql
Me llego este mail y lo quiero compartir con ustedes:
|
¿Por qué Python es tan lento?
Python está en auge en popularidad. Se usa en DevOps, Data Science, Desarrollo web y Seguridad.
Sin embargo, no gana ninguna medalla por velocidad.
En comparación con otros lenguajes como Java, C #, Go, JavaScript, C ++, Python es uno de los más lentos. Esto incluye compiladores JIT (C #, Java) y AOT (C, C ++), así como lenguajes interpretados como JavaScript.
Ojo! Cuando decimos "Python", estamos hablando de la implementación de referencia del lenguaje.
Podemos nombrar las siguientes teorías de porque python no es tan rapido:
- Es el GIL (Global Interpreter Lock)
- Es porque se interpreta y no se compila
- Es porque es un lenguaje de tipado dinámico
Estan son las razones más escuchadas pero ¿Cuál es la que tiene mayor impacto?
Es el GIL (Global Interpreter Lock)
Las computadoras modernas vienen con CPU que tienen múltiples núcleos y, a veces, múltiples procesadores. Para utilizar toda esta potencia de procesamiento adicional, el sistema operativo define una estructura de bajo nivel llamada subproceso, donde un proceso (por ejemplo, el navegador Chrome) puede engendrar varios subprocesos y tener instrucciones para el sistema interno. De esta forma, si un proceso requiere una gran cantidad de CPU, esa carga se puede compartir entre los núcleos y esto hace que la mayoría de las aplicaciones.
Un concepto muy importante en este mundo es el de bloqueos. A diferencia de un proceso de subproceso único, debe asegurarse de que al cambiar variables en la memoria, varios subprocesos no intenten acceder o cambiar la misma dirección de memoria al mismo tiempo.
Cuando CPython crea variables, asigna la memoria y luego cuenta cuántas referencias existen a esa variable, este es un concepto conocido como recuento de referencias. Si el número de referencias es 0, entonces libera esa porción de memoria del sistema. Esta es la razón por la cual la creación de una variable "temporal" dentro de, digamos, el alcance de un bucle for, no explota el consumo de memoria de su aplicación.
El desafío se convierte entonces cuando las variables se comparten en varios hilos, cómo CPython bloquea el recuento de referencias. Hay un "bloqueo de intérprete global" que controla cuidadosamente la ejecución de la secuencia. El intérprete solo puede ejecutar una operación a la vez, independientemente de la cantidad de subprocesos que tenga.
Si tiene una única aplicación de intérprete de subproceso único. No hará ninguna diferencia a la velocidad. Eliminar el GIL no tendría ningún impacto en el rendimiento de tu código.
Si desea implementar la concurrencia dentro de un único intérprete (proceso de Python) mediante el uso de subprocesos, y sus subprocesos son intensivos en IO (por ejemplo, IO de red o IO de disco), verá las consecuencias de la contención de GIL.
Si tiene una aplicación web (por ejemplo, Django) y está utilizando WSGI, entonces cada solicitud a su aplicación web es un intérprete independiente de Python, por lo que solo hay 1 bloqueo por solicitud. Debido a que el intérprete de Python tarda en iniciarse, algunas implementaciones de WSGI tienen un "Modo Daemon" que mantiene los procesos de Python sobre la marcha.
Es porque se interpreta y no se compila
Si decidis ejecutar un script en python, CPython iniciaría una larga secuencia de lecturas, análisis, compilación, interpretación y ejecución de ese código.
Un punto importante en ese proceso es la creación de un archivo .pyc, en la etapa de compilación, la secuencia de bytecode se escribe en un archivo dentro de __pycache __ / en Python 3 o en el mismo directorio en Python 2. Esto no solo se aplica al script, todo el código importado, incluidos los módulos de terceros.
Entonces, la mayoría de las veces (a menos que escriba código que solo ejecuta una vez), Python está interpretando bytecode y ejecutándolo localmente. Compare eso con Java o .NET :
Java se compila en un "lenguaje intermedio" y la máquina virtual de Java lee el bytecode y lo compila en código de máquina. .NET CIL es el mismo, el .NET Common-Language-Runtime, CLR, utiliza compilación justo a tiempo para el código de la máquina.
Entonces, ¿por qué Python es mucho más lento que Java y C # en los benchmarks si todos usan una máquina virtual y algún tipo de Bytecode? En primer lugar, .NET y Java son JIT-Compiled.
La compilación JIT o Just-in-time requiere un lenguaje intermedio para permitir que el código se divida en fragmentos (o marcos). Los compiladores de anticipación (AOT) están diseñados para garantizar que la CPU pueda entender cada línea del código antes de que tenga lugar cualquier interacción.
El JIT en sí mismo no hace que la ejecución sea más rápida, porque todavía está ejecutando las mismas secuencias de código de bytes. Sin embargo, JIT permite realizar optimizaciones en tiempo de ejecución. Un buen optimizador de JIT verá qué partes de la aplicación se están ejecutando mucho, llame a estos "puntos calientes". Luego hará optimizaciones para esos bits de código, reemplazándolos con versiones más eficientes.
Dejo links:
https://pypy.org/
http://cython.org/
https://www.python.org/
Si tiene una aplicación web (por ejemplo, Django) y está utilizando WSGI, entonces cada solicitud a su aplicación web es un intérprete independiente de Python, por lo que solo hay 1 bloqueo por solicitud. Debido a que el intérprete de Python tarda en iniciarse, algunas implementaciones de WSGI tienen un "Modo Daemon" que mantiene los procesos de Python sobre la marcha.
Es porque se interpreta y no se compila
Si decidis ejecutar un script en python, CPython iniciaría una larga secuencia de lecturas, análisis, compilación, interpretación y ejecución de ese código.
Un punto importante en ese proceso es la creación de un archivo .pyc, en la etapa de compilación, la secuencia de bytecode se escribe en un archivo dentro de __pycache __ / en Python 3 o en el mismo directorio en Python 2. Esto no solo se aplica al script, todo el código importado, incluidos los módulos de terceros.
Entonces, la mayoría de las veces (a menos que escriba código que solo ejecuta una vez), Python está interpretando bytecode y ejecutándolo localmente. Compare eso con Java o .NET :
Java se compila en un "lenguaje intermedio" y la máquina virtual de Java lee el bytecode y lo compila en código de máquina. .NET CIL es el mismo, el .NET Common-Language-Runtime, CLR, utiliza compilación justo a tiempo para el código de la máquina.
Entonces, ¿por qué Python es mucho más lento que Java y C # en los benchmarks si todos usan una máquina virtual y algún tipo de Bytecode? En primer lugar, .NET y Java son JIT-Compiled.
La compilación JIT o Just-in-time requiere un lenguaje intermedio para permitir que el código se divida en fragmentos (o marcos). Los compiladores de anticipación (AOT) están diseñados para garantizar que la CPU pueda entender cada línea del código antes de que tenga lugar cualquier interacción.
El JIT en sí mismo no hace que la ejecución sea más rápida, porque todavía está ejecutando las mismas secuencias de código de bytes. Sin embargo, JIT permite realizar optimizaciones en tiempo de ejecución. Un buen optimizador de JIT verá qué partes de la aplicación se están ejecutando mucho, llame a estos "puntos calientes". Luego hará optimizaciones para esos bits de código, reemplazándolos con versiones más eficientes.
Esto significa que cuando la aplicación hace lo mismo una y otra vez, puede ser significativamente más rápido. Además, tenga en cuenta que Java y C# son lenguajes fuertemente tipados, por lo que el optimizador puede hacer muchas más suposiciones sobre el código.
Hay desventajas para los JIT, uno de ellos es el tiempo de inicio. PyPy es 2-3 veces más lento que CPython. La máquina virtual de Java es notoriamente lenta para arrancar. El .NET CLR soluciona esto comenzando en el arranque del sistema operativo, pero los desarrolladores del CLR también desarrollan el sistema operativo en el que se ejecuta el CLR.
Si tiene un único proceso de Python en ejecución durante mucho tiempo, con un código que puede optimizarse porque contiene "puntos calientes", entonces un JIT tiene mucho sentido.
Sin embargo, CPython es una implementación de propósito general. Entonces, si estuviera desarrollando aplicaciones de línea de comandos usando Python, tener que esperar que se inicie un JIT cada vez que se llamaba a la CLI sería terriblemente lento.
CPython tiene que tratar de servir tantos casos de uso como sea posible. Hubo la posibilidad de conectar un JIT en CPython, pero este proyecto se ha estancado en gran medida.
Es porque es un lenguaje de tipado dinámico
En un lenguaje "Estáticamente tipado", debe especificar el tipo de una variable cuando se declara. Esos incluirían C, C ++, Java, C #, Go.
En un lenguaje de tipado dinámico, todavía existe el concepto de tipos, pero el tipo de variable es dinámico. Por ejemplo:
a = 1
a = "foo"
En este ejemplo, Python crea una segunda variable a de tipo de string y desasigna la memoria creada para la primera instancia.
No tener que declarar el tipo no es lo que hace que Python sea lento, el diseño del lenguaje Python le permite hacer casi cualquier cosa dinámica. Puede reemplazar los métodos en objetos en tiempo de ejecución, puede aplicar parche a las llamadas de bajo nivel del sistema operativo a un valor declarado en tiempo de ejecución. Casi todo es posible.
Es este diseño lo que hace que sea increíblemente difícil optimizar Python. Entonces, ¿la escritura dinámica de Python lo hace lento?
Comparar y convertir tipos es costoso, cada vez que se lee una variable, se escribe o se hace referencia a ella, se comprueba el tipo. Es difícil optimizar un lenguaje que es tan dinámico. La razón por la que muchas alternativas a Python son mucho más rápidas es que hacen concesiones a la flexibilidad en nombre del rendimiento. Observar a Cython, que combina C-Static Types y Python para optimizar el código donde se conocen los tipos, puede proporcionar una mejora de rendimiento.
Conclusión
Python es principalmente lento debido a su naturaleza dinámica y versatilidad. Se puede utilizar como una herramienta para todo tipo de problemas, donde las alternativas más optimizadas y más rápidas están probablemente disponibles.
Sin embargo, hay formas de optimizar sus aplicaciones de Python aprovechando la sincronización, entendiendo las herramientas de creación de perfiles y considerando el uso de múltiples intérpretes.
https://pypy.org/
http://cython.org/
https://www.python.org/
martes, 17 de julio de 2018
Apache lanzo Groovy 2.5 y el preview de Groovy 3.0
La Apache Foundation lanzó recientemente la versión 2.5 de Groovy, con nuevas características que incluyen:
A pesar des crecimiento de otros lenguajes de JVM como Kotlin, Groovy todavía está experimentando un gran crecimiento. Los números de descarga de Groovy aún lo convierten en el segundo lenguaje más popular en JVM después de Java y los números siguen aumentando. Para el primer trimestre de este año, hubo 90 millones de descargas, el doble de descargas que el primer trimestre del año pasado. Como puede ver, todavía hay mucho interés en Groovy.
Groovy también ha ganado 30 nuevos committers en los últimos 12 meses.
Como se muestra en el siguiente diagrama, se mejoraron algunas de las transformaciones AST existentes para lograr consistencia entre las transformaciones y se agregaron 11 nuevas transformaciones para la versión 2.5. Se agregó una transformación adicional para Groovy 3.0, pero podrían aparecer más antes de la versión GA.
La metaprogramación en tiempo de compilación en Groovy permite la generación de código en tiempo de compilación. Esas transformaciones se denominan transformaciones AST. Las transformaciones de AST le permiten enganchar en el proceso de compilación, modificar el AST y continuar el proceso de compilación para generar bytecode regular. En comparación con la metaprogramación de tiempo de ejecución, esto tiene la ventaja de hacer que los cambios sean visibles en el archivo de clase mismo (es decir, en el bytecode). Hacerlo visible en bytecode es importante, por ejemplo, si desea que las transformaciones formen parte del contrato de clase (implementando interfaces, ampliando clases abstractas, ...) o incluso si necesita que su clase sea invocable desde Java (u otros lenguajes JVM) ) Por ejemplo, una transformación AST puede agregar métodos a una clase. Si lo haces con metaprogramación en tiempo de ejecución, el nuevo método solo sería visible desde Groovy. Si haces lo mismo con la metaprogramación en tiempo de compilación, el método también sería visible desde Java. Por último, pero no menos importante, el rendimiento probablemente sería mejor con la metaprogramación en tiempo de compilación (porque no se requiere una fase de inicialización).
Groovy 3.0.0-alpha-3 ha estado disponible desde finales de junio con versiones beta programadas para finales de este año y release candidates previstos para principios de 2019.
Dejo links:
https://objectcomputing.com/resources/events/webinars/groovy-update-webinar/recording
- Mejoras en las transformaciones de AST
- Nuevo soporte de macros
- Otras mejoras...
A pesar des crecimiento de otros lenguajes de JVM como Kotlin, Groovy todavía está experimentando un gran crecimiento. Los números de descarga de Groovy aún lo convierten en el segundo lenguaje más popular en JVM después de Java y los números siguen aumentando. Para el primer trimestre de este año, hubo 90 millones de descargas, el doble de descargas que el primer trimestre del año pasado. Como puede ver, todavía hay mucho interés en Groovy.
Groovy también ha ganado 30 nuevos committers en los últimos 12 meses.
Como se muestra en el siguiente diagrama, se mejoraron algunas de las transformaciones AST existentes para lograr consistencia entre las transformaciones y se agregaron 11 nuevas transformaciones para la versión 2.5. Se agregó una transformación adicional para Groovy 3.0, pero podrían aparecer más antes de la versión GA.
La metaprogramación en tiempo de compilación en Groovy permite la generación de código en tiempo de compilación. Esas transformaciones se denominan transformaciones AST. Las transformaciones de AST le permiten enganchar en el proceso de compilación, modificar el AST y continuar el proceso de compilación para generar bytecode regular. En comparación con la metaprogramación de tiempo de ejecución, esto tiene la ventaja de hacer que los cambios sean visibles en el archivo de clase mismo (es decir, en el bytecode). Hacerlo visible en bytecode es importante, por ejemplo, si desea que las transformaciones formen parte del contrato de clase (implementando interfaces, ampliando clases abstractas, ...) o incluso si necesita que su clase sea invocable desde Java (u otros lenguajes JVM) ) Por ejemplo, una transformación AST puede agregar métodos a una clase. Si lo haces con metaprogramación en tiempo de ejecución, el nuevo método solo sería visible desde Groovy. Si haces lo mismo con la metaprogramación en tiempo de compilación, el método también sería visible desde Java. Por último, pero no menos importante, el rendimiento probablemente sería mejor con la metaprogramación en tiempo de compilación (porque no se requiere una fase de inicialización).
Groovy 3.0.0-alpha-3 ha estado disponible desde finales de junio con versiones beta programadas para finales de este año y release candidates previstos para principios de 2019.
Dejo links:
https://objectcomputing.com/resources/events/webinars/groovy-update-webinar/recording
miércoles, 11 de julio de 2018
Apache Spark MLlib parte 4
Continuamos!!!
Vamos a ver un ejemplo utilizando el algoritmo Kmeans que es uno de los algoritmos más fáciles de clasificación.
K-means es un método de agrupamiento, que tiene como objetivo la partición de un conjunto de n observaciones en k grupos en el que cada observación pertenece al grupo cuyo valor medio es más cercano.
Si bien se puede indicar que es una técnica utilizada por minería de datos más que para Maching learning, vamos a empezar de a poco.
Empecemos viendo los datos, los cuales supongamos ya hemos limpiado :
0 1:0.0 2:0.0 3:0.0
1 1:0.1 2:0.1 3:0.1
2 1:0.2 2:0.2 3:0.2
3 1:9.0 2:9.0 3:9.0
4 1:9.1 2:9.1 3:9.1
5 1:9.2 2:9.2 3:9.2
Como se puede ver son 4 columnas, de la cuales la primera es un id (identificador) y las demás están compuestas por un indice y un dato, por ejemplo 1:0.0 (el indice es 1 y el dato 0.0 el cual es continuo)
Esto se encuentra en el archivo sample_kmeans_data.txt
Empecemos tomando los datos y llevándolos a un RDD :
//creamos la aplicación de spark si utilizamos spark-shell esto no es necesario.
val spark = SparkSession.builder.appName("KMeansExample") .getOrCreate()
//Leemos el archivo con el formato libsvm
val dataset = spark.read.format("libsvm").load("path/sample_kmeans_data.txt")
//Probamos que se leyeron los datos, si estamos en spark-shell
dataset.show()
+-----+--------------------+
|label| features|
+-----+--------------------+
| 0.0| (3,[],[])|
| 1.0|(3,[0,1,2],[0.1,0...|
| 2.0|(3,[0,1,2],[0.2,0...|
| 3.0|(3,[0,1,2],[9.0,9...|
| 4.0|(3,[0,1,2],[9.1,9...|
| 5.0|(3,[0,1,2],[9.2,9...|
+-----+--------------------+
val model = kmeans.fit(dataset)
// Evaluamos la agrupación mediante el cómputo dentro de la suma establecida de errores cuadrados.
val WSSSE = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $WSSSE")
// Mostramos el resultado
println("Cluster Centers: ")
model.clusterCenters.foreach(println)
[0.1,0.1,0.1]
[9.1,9.1,9.1]
Si hablamos en criollo el algoritmo trata de hacer grupos y calcular su centro, y va moviendo el centro según los datos hasta que estos centros no cambian y ahí finaliza.
Vamos a ver un ejemplo utilizando el algoritmo Kmeans que es uno de los algoritmos más fáciles de clasificación.
K-means es un método de agrupamiento, que tiene como objetivo la partición de un conjunto de n observaciones en k grupos en el que cada observación pertenece al grupo cuyo valor medio es más cercano.
Si bien se puede indicar que es una técnica utilizada por minería de datos más que para Maching learning, vamos a empezar de a poco.
Empecemos viendo los datos, los cuales supongamos ya hemos limpiado :
0 1:0.0 2:0.0 3:0.0
1 1:0.1 2:0.1 3:0.1
2 1:0.2 2:0.2 3:0.2
3 1:9.0 2:9.0 3:9.0
4 1:9.1 2:9.1 3:9.1
5 1:9.2 2:9.2 3:9.2
Como se puede ver son 4 columnas, de la cuales la primera es un id (identificador) y las demás están compuestas por un indice y un dato, por ejemplo 1:0.0 (el indice es 1 y el dato 0.0 el cual es continuo)
Esto se encuentra en el archivo sample_kmeans_data.txt
Empecemos tomando los datos y llevándolos a un RDD :
//creamos la aplicación de spark si utilizamos spark-shell esto no es necesario.
val spark = SparkSession.builder.appName("KMeansExample") .getOrCreate()
//Leemos el archivo con el formato libsvm
val dataset = spark.read.format("libsvm").load("path/sample_kmeans_data.txt")
//Probamos que se leyeron los datos, si estamos en spark-shell
dataset.show()
+-----+--------------------+
|label| features|
+-----+--------------------+
| 0.0| (3,[],[])|
| 1.0|(3,[0,1,2],[0.1,0...|
| 2.0|(3,[0,1,2],[0.2,0...|
| 3.0|(3,[0,1,2],[9.0,9...|
| 4.0|(3,[0,1,2],[9.1,9...|
| 5.0|(3,[0,1,2],[9.2,9...|
+-----+--------------------+
// Entrenamos nuestro modelo
import org.apache.spark.ml.clustering.KMeans
val kmeans = new KMeans().setK(2).setSeed(1L)val model = kmeans.fit(dataset)
// Evaluamos la agrupación mediante el cómputo dentro de la suma establecida de errores cuadrados.
val WSSSE = model.computeCost(dataset)
println(s"Within Set Sum of Squared Errors = $WSSSE")
// Mostramos el resultado
println("Cluster Centers: ")
model.clusterCenters.foreach(println)
[0.1,0.1,0.1]
[9.1,9.1,9.1]
Para los que como yo no entendieron que paso el ultimo momento... Reiteramos!
Dado un conjunto de observaciones (x1, x2, …, xn), donde cada observación es un vector real de d dimensiones, k-means construye una partición de las observaciones en k conjuntos (k ≤ n) a fin de minimizar la suma de los cuadrados dentro de cada grupo (WCSS): S = {S1, S2, …, Sk}
Si vemos la Wikipedia :
- Paso de asignación: Asigna cada observación al grupo con la media más cercana (es decir, la partición de las observaciones de acuerdo con el diagrama de Voronoi generado por los centroides).
- Donde cada va exactamente dentro de un , incluso aunque pudiera ir en dos de ellos.
- Paso de actualización: Calcular los nuevos centroides como el centroide de las observaciones en el grupo.
El algoritmo se considera que ha convergido cuando las asignaciones ya no cambian.
Grafícado :
- 2) k grupos son generados asociándole el punto con la media más cercana. La partición aquí representa el diagrama de Voronoi generado por los centroides.
- 3) EL centroide de cada uno de los k grupos se recalcula.
lunes, 9 de julio de 2018
Apache Spark MLlib parte 3
Continuamos...
La detección de fraude es otro caso de uso importante del aprendizaje automático. Aborda un problema crítico en la industria financiera de forma rápida y precisa.
Las organizaciones de servicios financieros solo tienen unos cientos de milisegundos para determinar si una transacción en línea en particular es legítima o es un fraude.
Las técnicas de redes neuronales se utilizan para la detección de fraudes en puntos de venta (POS). Las organizaciones como PayPal utilizan diferentes tipos de algoritmos de aprendizaje automático para la gestión de riesgos, como la red lineal, neuronal y el aprendizaje profundo.
La biblioteca Spark MLlib proporciona varios algoritmos para resolver este caso de uso, incluidos SVM lineales, regresión logística, árboles de decisión y Bayes sencillos. Los modelos de conjunto (que combinan las predicciones de un conjunto de modelos) como los bosques aleatorios o los árboles que aumentan el gradiente también están disponibles …
MLlib es la biblioteca de aprendizaje automático de Spark. Su objetivo es hacer que el aprendizaje automático práctico sea escalable y fácil. Consiste en algoritmos y utilidades de aprendizaje comunes, que incluyen clasificación, regresión, clustering, filtrado colaborativo, reducción de dimensionalidad y primitivas de optimización de nivel inferior y API de canalizaciones de nivel superior.
Como aprendimos anteriormente, hay dos formas de utilizar la API de Aprendizaje Automático de Spark: Spark MLlib y spark.ml.
La API Spark MLlib está disponible en los lenguajes de programación Scala, Java y Python.
Continuara...
Apache Spark MLlib parte 2
Continuamos!!
Cuando se trabaja en
proyectos de aprendizaje automático la preparación de datos, la
limpieza y el análisis, también son tareas importantes más allá
de los modelos de aprendizaje reales y los algoritmos utilizados para
resolver los problemas de negocios.
Los siguientes son
los pasos que se realizan en un programa típico de aprendizaje
automático:
Caracterización
(featurization) del modelo.
entrenar el modelo.
evaluación modelo.
Es importante saber
que se debe limpiar y preparar los datos antes de ejecutar un
algoritmo de aprendizaje automático, de lo contrario el patrón
resultante no será preciso ni útil, y puede pasar por alto algunas
anomalías.
La calidad de los
datos de entrenamiento que proporcionamos a los programas de
aprendizaje automático también juega un papel fundamental en los
resultados de predicción. Si los datos de entrenamiento no son lo
suficientemente aleatorios, los patrones resultantes no serán
precisos. Y si el conjunto de datos es demasiado pequeño, el
programa de aprendizaje automático puede dar predicciones inexactas.
Los casos de uso
comerciales para aprendizaje automático abarcan diferentes dominios
y escenarios, incluidos motores de recomendación (como este motor de
recomendación de alimentos), análisis predictivo (por ejemplo,
predicción de precios de acciones o retrasos en los vuelos),
publicidad dirigida, detección de fraude, reconocimiento de imágenes
y videos -conducir automóviles y otras formas de inteligencia
artificial.
Veamos dos
aplicaciones populares, un motor de recomendación y detección de
fraude, en más detalle.
Los motores de
recomendación utilizan los atributos de un elemento o un usuario o
el comportamiento de un usuario o sus compañeros para hacer
predicciones. Diferentes factores impulsan un motor de recomendación
eficaz. Algunos de estos factores incluyen:
- análisis por pares.
- comportamiento del cliente.
- ofertas u ofertas corporativas.
- agrupamiento de elementos.
- factores de mercado / tienda.
Podemos construir un
motor de recomendación mediante la participación de dos algoritmos:
filtrado basado en contenido y filtrado colaborativo.
El filtrado basado
en contenido se basa en cuán similares son el uso y las
calificaciones de un artículo en particular a otros artículos. El
modelo usa los atributos de contenido de los elementos (como
categorías, etiquetas, descripciones y otros datos) para generar una
matriz que relacione cada elemento con otros elementos y calcule la
similitud en función de las clasificaciones proporcionadas. Luego,
los elementos más similares se enumeran junto con un puntaje de
similitud. Los artículos con el puntaje más alto son los más
similares.
La recomendación de
la película es un buen ejemplo de este modelo. Puede aconsejar que a
los usuarios a los que les haya gustado una película en particular
también les hayan gustado estas otras películas.
El filtrado basado
en contenido no tiene en cuenta el comportamiento general de otros
usuarios, por lo que sus modelos no ofrecen recomendaciones
personalizadas, como el filtrado colaborativo y otros modelos.
Por otro lado, los
modelos de filtrado colaborativo predicen y recomiendan elementos
específicos o usuarios en función de la similitud con otros
elementos o usuarios.
El filtro aplica
ponderaciones basadas en las preferencias del "usuario par".
La suposición es que los usuarios con perfiles o comportamientos
similares también tendrán preferencias de elementos similares.
Un ejemplo de este
modelo son las recomendaciones sobre sitios web de comercio
electrónico como Amazon. Cuando buscamos un artículo en el sitio
web, vemos una lista llamada "Los clientes que vieron este
artículo también compraron".
Los elementos con el
puntaje de recomendación más alto son los más relevantes para el
usuario en contexto.
Las soluciones de
filtrado colaborativo funcionan mejor que otros modelos. Spark MLlib
implementa un algoritmo de filtrado colaborativo llamado Alternating
least squares (ALS). Hay dos variaciones de las entradas en el
filtrado colaborativo, llamadas realimentación explícita e
implícita.
La retroalimentación
explícita se basa en las preferencias directas otorgadas por el
usuario al elemento (como una película). La retroalimentación
explícita es agradable, pero muchas veces es sesgada porque los
usuarios a quienes les gusta o no les gusta mucho un producto tienden
a opinar con más frecuencia que los que les es indiferente. Por lo
tanto podemos no obtener la opinión de muchas personas en el centro
de la curva.
La retroalimentación
implícita incluye las vistas del usuario, los clics, los "me
gusta", etc. La retroalimentación implícita a menudo se
utiliza para el análisis predictivo debido a lo fácil que es
recopilar este tipo de datos.
También hay métodos
basados en modelos para motores de recomendación. A menudo
incorporan métodos de filtrado colaborativo y basado en contenido.
Un enfoque basado en modelos obtiene lo mejor de ambos mundos: el
poder y el rendimiento del filtrado colaborativo y la flexibilidad y
adaptabilidad del filtrado basado en el contenido. Las técnicas de
aprendizaje profundo o deep learning son buenos ejemplos de este
modelo.
También puede
integrar otros algoritmos como k-means clustering en el motor de
recomendación para refinar aún más las predicciones. El algoritmo
k-means funciona al dividir N observaciones en k clústeres en los
que cada observación pertenece al clúster con la media más
cercana. Usando la técnica de k-means, podemos encontrar elementos
similares o usuarios en función de sus atributos.
continuará...
domingo, 8 de julio de 2018
Apache Spark MLlib
Apache Spark Mllib incluye diferentes algoritmos de Machine Learning. Estas librerías se encuentran en 2 paquetes : spark.mllib y spark.ml
spark.mllib contiene la API original de spark construida sobre RDDs. Estos algoritmos incluyen correlación, clasificación y regresión, filtrado colaborativo, clustering y reducción de dimensionalidad.
spark.ml contiene la API construida sobre Dataframes, el cual es el core de Spark SQL. Esto puede ser utilizado para hacer una tubería de maching learning, es decir combinar técnicas o limpiar los datos y luego procesarlos. Este paquete provee: selectores, transformadores, extractores y técnicas de maching learning como clasificación, regresión y clustering.
La ciencia de datos o Data science es la disciplina que extraer el conocimiento de grandes conjuntos de datos (estructurados o no estructurados) para proporcionar información a los equipos de negocios e influir en las estrategias comerciales. El papel del científico de datos es resolver problemas que no son fáciles de resolver utilizando los métodos numéricos tradicionales. Normalmente estos cientificos de datos utilizan modelos de aprendizaje automático.
Existen diferentes tipos de modelos de aprendizaje automático:
spark.mllib contiene la API original de spark construida sobre RDDs. Estos algoritmos incluyen correlación, clasificación y regresión, filtrado colaborativo, clustering y reducción de dimensionalidad.
spark.ml contiene la API construida sobre Dataframes, el cual es el core de Spark SQL. Esto puede ser utilizado para hacer una tubería de maching learning, es decir combinar técnicas o limpiar los datos y luego procesarlos. Este paquete provee: selectores, transformadores, extractores y técnicas de maching learning como clasificación, regresión y clustering.
La ciencia de datos o Data science es la disciplina que extraer el conocimiento de grandes conjuntos de datos (estructurados o no estructurados) para proporcionar información a los equipos de negocios e influir en las estrategias comerciales. El papel del científico de datos es resolver problemas que no son fáciles de resolver utilizando los métodos numéricos tradicionales. Normalmente estos cientificos de datos utilizan modelos de aprendizaje automático.
Existen diferentes tipos de modelos de aprendizaje automático:
- aprendizaje supervisado,
- aprendizaje sin supervisión,
- aprendizaje semi-supervisado
- aprendizaje reforzado.
- Naive Bayes es un algoritmo de aprendizaje supervisado utilizado para la clasificación. Se basa en la aplicación del teorema de Bayes y un conjunto de suposiciones de independencia condicional.
- El algoritmo k-means o k-means clustering crea k grupos a partir de un conjunto de objetos para que los miembros de cada grupo sean más similares entre sí.
- Una máquina de vectores de soporte (SVM) es un algoritmo de aprendizaje supervisado que se utiliza para encontrar el límite que separa las clases por un margen tan amplio como sea posible. Dado un conjunto de ejemplos de entrenamiento, cada uno marcado como perteneciente a una de dos categorías, un algoritmo de entrenamiento SVM construye un modelo que asigna nuevos ejemplos en una categoría u otra. Las aplicaciones de SVM incluyen bioinformática, análisis de texto y reconocimiento de imágenes.
- Los árboles de decisión se utilizan en muchos tipos de problemas de aprendizaje automático, incluida la clasificación multiclase. Spark MLlib es compatible tanto con un algoritmo de árbol de decisión básico como con conjuntos de árboles. Hay dos algoritmos de conjunto disponibles: árboles con gradiente mejorado y bosques aleatorios.
Como una primer vistazo, esta bien hasta aquí, pero debemos seguir en próximos posts, es decir :
continuará...
sábado, 7 de julio de 2018
Por qué Wikipedia se "apagó"?
Wikipedia se "apagó" para sumarse a las protestas contra una reforma que atentaba contra la libre difusión de la información en internet.
Casi muero por este apagón!!
Todos debemos apoyar estas medidas de forma que internet sea el hermoso lugar que es.
Casi muero por este apagón!!
Todos debemos apoyar estas medidas de forma que internet sea el hermoso lugar que es.
jueves, 5 de julio de 2018
Machine Learning Yearning
Sigo publicando Machine Learning Yearning:
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
martes, 3 de julio de 2018
DATASTAX ACADEMY
Quiero recomendar los cursos gratuitos de Datastax que es la pata comercial de Apache Cassandra.
Como podrán imaginar los cursos son sobre Cassandra y Big data. Hay curso iniciales, de modelado, de arquitectura, etc. a la vez existe un curso de integración con Apache Spark.
Los cursos son gratuitos, lo único malo es que en los cursos te quieren vender sus productos comerciales, pero bueno de algo tienen que vivir pobre gente.
Sin más dejo link: https://academy.datastax.com/
domingo, 1 de julio de 2018
Verificando nuestro entorno Cassandra con cqlsh
Como vimos anteriormente Cassandra tiene un aplicativo llamado cqlsh para ejecutar cql.
Esta herramienta nos permite conocer también características del entorno, por ejemplo si queremos obtener información de nuestro cluster podemos escribir:
cqlsh> DESCRIBE CLUSTER;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner
De la misma forma podemos verificar información del keyspace:
cqlsh> DESCRIBE KEYSPACES;
hexacta system_schema system_auth system system_distributed system_traces
cqlsh> SHOW VERSION;
[cqlsh 5.0.1 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
y si necesitamos ayuda:
cqlsh> help
Documented shell commands:
===========================
CAPTURE CLS COPY DESCRIBE EXPAND LOGIN SERIAL SOURCE UNICODE
CLEAR CONSISTENCY DESC EXIT HELP PAGING SHOW TRACING
CQL help topics:
================
AGGREGATES CREATE_KEYSPACE DROP_TRIGGER TEXT
ALTER_KEYSPACE CREATE_MATERIALIZED_VIEW DROP_TYPE TIME
ALTER_MATERIALIZED_VIEW CREATE_ROLE DROP_USER TIMESTAMP
ALTER_TABLE CREATE_TABLE FUNCTIONS TRUNCATE
ALTER_TYPE CREATE_TRIGGER GRANT TYPES
ALTER_USER CREATE_TYPE INSERT UPDATE
APPLY CREATE_USER INSERT_JSON USE
ASCII DATE INT UUID
BATCH DELETE JSON
BEGIN DROP_AGGREGATE KEYWORDS
BLOB DROP_COLUMNFAMILY LIST_PERMISSIONS
BOOLEAN DROP_FUNCTION LIST_ROLES
COUNTER DROP_INDEX LIST_USERS
CREATE_AGGREGATE DROP_KEYSPACE PERMISSIONS
CREATE_COLUMNFAMILY DROP_MATERIALIZED_VIEW REVOKE
CREATE_FUNCTION DROP_ROLE SELECT
CREATE_INDEX DROP_TABLE SELECT_JSON
Suscribirse a:
Entradas (Atom)