Importancia De La Probabilidad En El Aprendizaje Automático

Entre muchos campos y ramas de las matemáticas, las probabilidades juegan un papel muy importante tanto en la inteligencia artificial como en la ciencia de datos. Hoy, cubriremos los conceptos básicos de lo que realmente son las probabilidades y los teoremas y ejemplos del mundo real donde se usan estas herramientas y cómo.

Lea el artículo anterior Estadísticas para inteligencia artificial y ciencia de datos  para comprender la base de las estadísticas que utilizan los ingenieros de aprendizaje automático y los científicos de datos. 

probabilidades

La probabilidad se puede definir como la probabilidad de que algo ocurra o suceda. Cada vez que necesitamos explicar cuál es el cambio de algún resultado o de que ocurra un evento, hablamos en términos de Probabilidad.

¿Cuál es la probabilidad de que salga cara o cruz cuando lanzamos una moneda? Esto es probabilidad.


¿Cuál es la probabilidad de que salga 2 cuando tiramos los dados? Esto se puede explicar por probabilidad.

La forma de calcular la probabilidad de ocurrencia de un evento es la siguiente:

Probabilidad del evento = número de formas en que puede suceder / número total de resultados

Para una moneda que tiene dos caras, la probabilidad de que salga cara sería,

Probabilidad de cabeza = número de formas en que puede suceder / número total de resultados

Hay dos resultados posibles, cara (H) y cruz (T), que es una de las dos formas en que puede suceder.

Por lo tanto,

Ejemplo usando moneda,

Probabilidad de cabeza, es decir. P(A)= 1 / 2

Probabilidad de cola, es decir. P(T)= 1 / 2

Ejemplo usando Dados,

De manera similar, para un Dado que tiene 6 lados, cada lado tiene 1, 2, 3, 4, 5 o 6.

Probabilidad de ocurrencia de 2 es decir. P(2) = 1/6 

Probabilidad de ocurrencia de 1. es decir. P (1 móvil) = 1/6 = 16,7 %

comprensión de la probabilidad

En estadística, Verosimilitud no es Probabilidad, aunque puede usarse como sinónimo en el habla corriente. Pero para cualquier estadístico, esto sería nada menos que incorrecto. Como la probabilidad explica la medida del cambio de cualquier evento o resultado específico que ocurra, la Probabilidad se utiliza para aumentar las posibilidades de que ocurra un resultado específico. Uno necesita elegir la distribución dada de una mejor manera para aumentar la posibilidad de que ocurra el resultado.

Probabilidades en la vida real

Básicamente, existen diferentes formas de calcular la probabilidad para el mismo problema.

Probabilidad teórica

La probabilidad teórica se calcula sobre la base del razonamiento. Esta es la descripción más precisa de cualquier resultado posible. Este es el valor esperado que es más intuitivo.

Probabilidad Experimental

La probabilidad experimental se calcula repitiendo los experimentos varias veces y observando los resultados. Este es un enfoque diferente a la Probabilidad Teórica. Cualquiera puede realizar el experimento y calcular la probabilidad.

Ley de los Grandes Números

En Ley de los grandes números, discutimos cómo cuando experimentamos varias veces para un evento en particular, tendemos a acercarnos al valor esperado. El promedio de los resultados cuando se obtiene de una gran cantidad de experimentos, estará más cerca del valor esperado con el aumento en la cantidad de experimentos realizados. Cuanto mayor sea el número de experimentos, más cercano o más preciso será el valor de probabilidad obtenido.

La probabilidad condicional

La probabilidad condicional se puede explicar como la probabilidad de que ocurra un evento con respecto a uno o varios otros eventos.

P.ej. Supongamos, Evento A: leerá este artículo hoy.

Evento B: beberás una bebida hoy.

La probabilidad condicional sería observar estos dos eventos diferentes, el Evento A y el Evento B en relación entre sí, y calcular que ambos Eventos A y B sucedan de tal manera que estaría tomando una bebida mientras lee este artículo hoy.

Para otro ejemplo, supongamos, Evento A - Lloverá hoy

Evento B: tienes que salir hoy

La probabilidad condicional sería, la probabilidad de que ocurran tanto el Evento A como el B, es decir. Tendrías que salir mientras llueve hoy. Esto podría predecir cuál es la probabilidad de que necesites llevar un paraguas hoy.

Para comprender el impacto de la probabilidad en el aprendizaje automático y la ciencia de datos, no dude en ver el siguiente video de  AI 42 .

Evento Independiente

Un evento independiente es un evento que no tiene ninguna relación con la ocurrencia de cualquier otro evento. Es decir. Su ocurrencia no afecta la probabilidad de que suceda cualquier otro evento.

P.ej. Cuando lanzas un dado 5, es un evento independiente. El dado arroja 5 o 6 o cualquier otro valor, la aparición previa de 5 no tiene nada que ver con el lanzamiento posterior de los dados.

Evento dependiente

Los Eventos Dependientes son un conjunto de eventos que dependen de la ocurrencia de cualquiera de los Otros. La probabilidad de ocurrencia de un evento depende de la ocurrencia del otro evento. Por lo tanto, lo llamamos dependiente.

P.ej. Hay 100 M&M's en un frasco que es una mezcla de 8 colores. Cuando saca un M&M de color rojo, esto afectaría la probabilidad de que ocurra cualquier color de M&M del frasco. El siguiente resultado depende del anterior.

Distribuciones

La distribución de probabilidad se puede definir como una función que explica cada valor posible y la posibilidad de que una variable pueda generar dentro de un rango determinado para cualquier experimento en particular.

Distribución Continua

La Distribución Continua explica las probabilidades de ocurrencia de todos los valores dentro de un rango dado en un experimento particular. Solo que el rango de valores tiene una probabilidad distinta de cero. En la distribución continua, la probabilidad de que una variable aleatoria continua iguale algún valor siempre es 0. A menudo se representa con la región bajo la curva.

Distribución discreta

La distribución discreta explica la probabilidad de ocurrencia de cada valor de una variable arbitraria discreta. En una distribución de probabilidad discreta, cada valor posible de la variable aleatoria discreta tiene una probabilidad distinta de cero. De ahora en adelante, una distribución de probabilidad discreta se representa principalmente en forma tabular.

Teorema de Bayes

El teorema de Bayes explica un método para encontrar la probabilidad condicional. Este teorema lleva el nombre del matemático británico del siglo XVIII Thomas Bayes, quien descubrió este teorema. Sabemos que la probabilidad condicional se puede explicar como la probabilidad de que ocurra un evento con respecto a uno o varios otros eventos. Esta fórmula matemática se ha utilizado ampliamente en el aprendizaje automático para el modelado de hipótesis, clasificación y optimización.

Para dos eventos, el teorema de Bayes A y B establece:

P(A/B) = P(A) P(B/A)/ P(B)

Por ejemplo: Tengamos un algoritmo que esté mirando imágenes, verifiquemos si el paciente tiene cáncer. Sea 0,04 la probabilidad de que mirando la imagen haya cáncer y 0,96 la probabilidad de que no sea cáncer. Sea 0.8 el valor Verdadero Positivo para el 0.04 y 0.2 el Negativo para el mismo caso de cáncer.

Sea 0,05 positivo y 0,95 negativo para la probabilidad de 0,96 de que no haya casos de cáncer. Entonces, usando el Teorema de Bayes, tenemos,

P (Cáncer/ Positivo) = Verdadero positivo/ (Verdaderos positivos + Falsos negativos)

= 0,04*0,8/(0,04*0,8)+(0,96*0,05)

= 0,87

Ejemplos del Teorema de Bayes utilizados en la práctica en aprendizaje automático y ciencia de datos,

  • Árboles de decisión para la mejor opción posible
  • Matriz de confusión
  • Construir algoritmos de aprendizaje automático y evaluarlos

¿Por qué necesitamos estas matemáticas para ML y Data Science?

El aprendizaje automático es un subconjunto de la inteligencia artificial (IA). Aunque la IA y la ciencia de datos son dos campos diferentes, hay muchas cosas que se superponen entre los dos. Necesitamos comprender las matemáticas que se esconden detrás de los modelos que usamos para la IA y la ciencia de datos. Las matemáticas, que hemos aprendido, Estadísticas y Probabilidades se usan ampliamente en la ciencia de datos. Del mismo modo, el álgebra lineal, el cálculo y las probabilidades se utilizan mucho en la inteligencia artificial para descubrir la regresión lineal. El álgebra básica actúa como la columna vertebral de todas estas diferentes áreas de las matemáticas que luego son utilizadas por la inteligencia artificial y la ciencia de datos.

¿Cuánta estadística es necesario saber en el día a día?

Las probabilidades nos ayudan a darnos cuenta si este problema se puede resolver con las herramientas, los recursos y los datos que tenemos. Los ingenieros toman decisiones con la información que tienen y, por lo tanto, las estadísticas y las probabilidades son importantes. Por lo tanto, las estadísticas y las probabilidades se utilizan ampliamente desde el inicio de un proyecto para, en primer lugar, descubrir las formas de resolver el problema y hasta el final para encontrar la solución.

Conclusión

Hoy aprendimos sobre las probabilidades. Aprendimos qué son las probabilidades, cómo se usan en la vida real y entendimos los diferentes tipos de probabilidades condicionales. También descubrimos la manera de usar el teorema de Bayes y entendimos su significado. Una de las cosas clave a tener en cuenta es la diferencia entre Probabilidad y Verosimilitud. Muchos ingenieros confunden la probabilidad con la probabilidad misma y, por lo tanto, cada persona que trabaja en el campo debe aprender estas herramientas fundamentales para ayudar a crear las soluciones de manera más eficiente.

Lea el siguiente artículo para obtener información sobre  T-SQL para ciencia de datos 

Fuente: https://www.c-sharpcorner.com/article/importance-of-probability-in-machine-learning-and-data-science/ 

#machine-learning #data-science 

What is GEEK

Buddha Community

Importancia De La Probabilidad En El Aprendizaje Automático

joe biden

1617257581

Software de restauración de Exchange para restaurar sin problemas PST en Exchange Server

¿Quiere restaurar los buzones de correo de PST a Exchange Server? Entonces, estás en la página correcta. Aquí, lo guiaremos sobre cómo puede restaurar fácilmente mensajes y otros elementos de PST a MS Exchange Server.

Muchas veces, los usuarios necesitan restaurar los elementos de datos de PST en Exchange Server, pero debido a la falta de disponibilidad de una solución confiable, los usuarios no pueden obtener la solución. Háganos saber primero sobre el archivo PST y MS Exchange Server.

Conozca PST y Exchange Server

PST es un formato de archivo utilizado por MS Outlook, un cliente de correo electrónico de Windows y muy popular entre los usuarios domésticos y comerciales.

Por otro lado, Exchange Server es un poderoso servidor de correo electrónico donde todos los datos se almacenan en un archivo EDB. Los usuarios generalmente guardan la copia de seguridad de los buzones de correo de Exchange en el archivo PST, pero muchas veces, los usuarios deben restaurar los datos del archivo PST en Exchange. Para resolver este problema, estamos aquí con una solución profesional que discutiremos en la siguiente sección de esta publicación.

Un método profesional para restaurar PST a Exchange Server

No le recomendamos que elija una solución al azar para restaurar los datos de PST en Exchange Server. Por lo tanto, al realizar varias investigaciones, estamos aquí con una solución inteligente y conveniente, es decir, Exchange Restore Software. Es demasiado fácil de manejar por todos los usuarios y restaurar cómodamente todos los datos del archivo PST a Exchange Server.

Funciones principales ofrecidas por Exchange Restore Software

El software es demasiado simple de usar y se puede instalar fácilmente en todas las versiones de Windows. Con unos pocos clics, la herramienta puede restaurar los elementos del buzón de Exchange.

No es necesario que MS Outlook restaure los datos PST en Exchange. Todos los correos electrónicos, contactos, notas, calendarios, etc. se restauran desde el archivo PST a Exchange Server.

Todas las versiones de Outlook son compatibles con la herramienta, como Outlook 2019, 2016, 2013, 2010, 2007, etc. La herramienta proporciona varios filtros mediante los cuales se pueden restaurar los datos deseados desde un archivo PST a Exchange Server. El programa se puede instalar en todas las versiones de Windows como Windows 10, 8.1, 8, 7, XP, Vista, etc.

Descargue la versión de demostración del software de restauración de Exchange y analice el funcionamiento del software restaurando los primeros 50 elementos por carpeta.

Líneas finales

No existe una solución manual para restaurar los buzones de correo de Exchange desde el archivo PST. Por lo tanto, hemos explicado una solución fácil e inteligente para restaurar datos de archivos PST en Exchange Server. Simplemente puede usar este software y restaurar todos los datos de PST a Exchange Server.

Más información:- https://www.datavare.com/software/exchange-restore.html

#intercambio de software de restauración #intercambio de restauración #buzón del servidor de intercambio #herramienta de restauración de intercambio

Importancia De La Probabilidad En El Aprendizaje Automático

Entre muchos campos y ramas de las matemáticas, las probabilidades juegan un papel muy importante tanto en la inteligencia artificial como en la ciencia de datos. Hoy, cubriremos los conceptos básicos de lo que realmente son las probabilidades y los teoremas y ejemplos del mundo real donde se usan estas herramientas y cómo.

Lea el artículo anterior Estadísticas para inteligencia artificial y ciencia de datos  para comprender la base de las estadísticas que utilizan los ingenieros de aprendizaje automático y los científicos de datos. 

probabilidades

La probabilidad se puede definir como la probabilidad de que algo ocurra o suceda. Cada vez que necesitamos explicar cuál es el cambio de algún resultado o de que ocurra un evento, hablamos en términos de Probabilidad.

¿Cuál es la probabilidad de que salga cara o cruz cuando lanzamos una moneda? Esto es probabilidad.


¿Cuál es la probabilidad de que salga 2 cuando tiramos los dados? Esto se puede explicar por probabilidad.

La forma de calcular la probabilidad de ocurrencia de un evento es la siguiente:

Probabilidad del evento = número de formas en que puede suceder / número total de resultados

Para una moneda que tiene dos caras, la probabilidad de que salga cara sería,

Probabilidad de cabeza = número de formas en que puede suceder / número total de resultados

Hay dos resultados posibles, cara (H) y cruz (T), que es una de las dos formas en que puede suceder.

Por lo tanto,

Ejemplo usando moneda,

Probabilidad de cabeza, es decir. P(A)= 1 / 2

Probabilidad de cola, es decir. P(T)= 1 / 2

Ejemplo usando Dados,

De manera similar, para un Dado que tiene 6 lados, cada lado tiene 1, 2, 3, 4, 5 o 6.

Probabilidad de ocurrencia de 2 es decir. P(2) = 1/6 

Probabilidad de ocurrencia de 1. es decir. P (1 móvil) = 1/6 = 16,7 %

comprensión de la probabilidad

En estadística, Verosimilitud no es Probabilidad, aunque puede usarse como sinónimo en el habla corriente. Pero para cualquier estadístico, esto sería nada menos que incorrecto. Como la probabilidad explica la medida del cambio de cualquier evento o resultado específico que ocurra, la Probabilidad se utiliza para aumentar las posibilidades de que ocurra un resultado específico. Uno necesita elegir la distribución dada de una mejor manera para aumentar la posibilidad de que ocurra el resultado.

Probabilidades en la vida real

Básicamente, existen diferentes formas de calcular la probabilidad para el mismo problema.

Probabilidad teórica

La probabilidad teórica se calcula sobre la base del razonamiento. Esta es la descripción más precisa de cualquier resultado posible. Este es el valor esperado que es más intuitivo.

Probabilidad Experimental

La probabilidad experimental se calcula repitiendo los experimentos varias veces y observando los resultados. Este es un enfoque diferente a la Probabilidad Teórica. Cualquiera puede realizar el experimento y calcular la probabilidad.

Ley de los Grandes Números

En Ley de los grandes números, discutimos cómo cuando experimentamos varias veces para un evento en particular, tendemos a acercarnos al valor esperado. El promedio de los resultados cuando se obtiene de una gran cantidad de experimentos, estará más cerca del valor esperado con el aumento en la cantidad de experimentos realizados. Cuanto mayor sea el número de experimentos, más cercano o más preciso será el valor de probabilidad obtenido.

La probabilidad condicional

La probabilidad condicional se puede explicar como la probabilidad de que ocurra un evento con respecto a uno o varios otros eventos.

P.ej. Supongamos, Evento A: leerá este artículo hoy.

Evento B: beberás una bebida hoy.

La probabilidad condicional sería observar estos dos eventos diferentes, el Evento A y el Evento B en relación entre sí, y calcular que ambos Eventos A y B sucedan de tal manera que estaría tomando una bebida mientras lee este artículo hoy.

Para otro ejemplo, supongamos, Evento A - Lloverá hoy

Evento B: tienes que salir hoy

La probabilidad condicional sería, la probabilidad de que ocurran tanto el Evento A como el B, es decir. Tendrías que salir mientras llueve hoy. Esto podría predecir cuál es la probabilidad de que necesites llevar un paraguas hoy.

Para comprender el impacto de la probabilidad en el aprendizaje automático y la ciencia de datos, no dude en ver el siguiente video de  AI 42 .

Evento Independiente

Un evento independiente es un evento que no tiene ninguna relación con la ocurrencia de cualquier otro evento. Es decir. Su ocurrencia no afecta la probabilidad de que suceda cualquier otro evento.

P.ej. Cuando lanzas un dado 5, es un evento independiente. El dado arroja 5 o 6 o cualquier otro valor, la aparición previa de 5 no tiene nada que ver con el lanzamiento posterior de los dados.

Evento dependiente

Los Eventos Dependientes son un conjunto de eventos que dependen de la ocurrencia de cualquiera de los Otros. La probabilidad de ocurrencia de un evento depende de la ocurrencia del otro evento. Por lo tanto, lo llamamos dependiente.

P.ej. Hay 100 M&M's en un frasco que es una mezcla de 8 colores. Cuando saca un M&M de color rojo, esto afectaría la probabilidad de que ocurra cualquier color de M&M del frasco. El siguiente resultado depende del anterior.

Distribuciones

La distribución de probabilidad se puede definir como una función que explica cada valor posible y la posibilidad de que una variable pueda generar dentro de un rango determinado para cualquier experimento en particular.

Distribución Continua

La Distribución Continua explica las probabilidades de ocurrencia de todos los valores dentro de un rango dado en un experimento particular. Solo que el rango de valores tiene una probabilidad distinta de cero. En la distribución continua, la probabilidad de que una variable aleatoria continua iguale algún valor siempre es 0. A menudo se representa con la región bajo la curva.

Distribución discreta

La distribución discreta explica la probabilidad de ocurrencia de cada valor de una variable arbitraria discreta. En una distribución de probabilidad discreta, cada valor posible de la variable aleatoria discreta tiene una probabilidad distinta de cero. De ahora en adelante, una distribución de probabilidad discreta se representa principalmente en forma tabular.

Teorema de Bayes

El teorema de Bayes explica un método para encontrar la probabilidad condicional. Este teorema lleva el nombre del matemático británico del siglo XVIII Thomas Bayes, quien descubrió este teorema. Sabemos que la probabilidad condicional se puede explicar como la probabilidad de que ocurra un evento con respecto a uno o varios otros eventos. Esta fórmula matemática se ha utilizado ampliamente en el aprendizaje automático para el modelado de hipótesis, clasificación y optimización.

Para dos eventos, el teorema de Bayes A y B establece:

P(A/B) = P(A) P(B/A)/ P(B)

Por ejemplo: Tengamos un algoritmo que esté mirando imágenes, verifiquemos si el paciente tiene cáncer. Sea 0,04 la probabilidad de que mirando la imagen haya cáncer y 0,96 la probabilidad de que no sea cáncer. Sea 0.8 el valor Verdadero Positivo para el 0.04 y 0.2 el Negativo para el mismo caso de cáncer.

Sea 0,05 positivo y 0,95 negativo para la probabilidad de 0,96 de que no haya casos de cáncer. Entonces, usando el Teorema de Bayes, tenemos,

P (Cáncer/ Positivo) = Verdadero positivo/ (Verdaderos positivos + Falsos negativos)

= 0,04*0,8/(0,04*0,8)+(0,96*0,05)

= 0,87

Ejemplos del Teorema de Bayes utilizados en la práctica en aprendizaje automático y ciencia de datos,

  • Árboles de decisión para la mejor opción posible
  • Matriz de confusión
  • Construir algoritmos de aprendizaje automático y evaluarlos

¿Por qué necesitamos estas matemáticas para ML y Data Science?

El aprendizaje automático es un subconjunto de la inteligencia artificial (IA). Aunque la IA y la ciencia de datos son dos campos diferentes, hay muchas cosas que se superponen entre los dos. Necesitamos comprender las matemáticas que se esconden detrás de los modelos que usamos para la IA y la ciencia de datos. Las matemáticas, que hemos aprendido, Estadísticas y Probabilidades se usan ampliamente en la ciencia de datos. Del mismo modo, el álgebra lineal, el cálculo y las probabilidades se utilizan mucho en la inteligencia artificial para descubrir la regresión lineal. El álgebra básica actúa como la columna vertebral de todas estas diferentes áreas de las matemáticas que luego son utilizadas por la inteligencia artificial y la ciencia de datos.

¿Cuánta estadística es necesario saber en el día a día?

Las probabilidades nos ayudan a darnos cuenta si este problema se puede resolver con las herramientas, los recursos y los datos que tenemos. Los ingenieros toman decisiones con la información que tienen y, por lo tanto, las estadísticas y las probabilidades son importantes. Por lo tanto, las estadísticas y las probabilidades se utilizan ampliamente desde el inicio de un proyecto para, en primer lugar, descubrir las formas de resolver el problema y hasta el final para encontrar la solución.

Conclusión

Hoy aprendimos sobre las probabilidades. Aprendimos qué son las probabilidades, cómo se usan en la vida real y entendimos los diferentes tipos de probabilidades condicionales. También descubrimos la manera de usar el teorema de Bayes y entendimos su significado. Una de las cosas clave a tener en cuenta es la diferencia entre Probabilidad y Verosimilitud. Muchos ingenieros confunden la probabilidad con la probabilidad misma y, por lo tanto, cada persona que trabaja en el campo debe aprender estas herramientas fundamentales para ayudar a crear las soluciones de manera más eficiente.

Lea el siguiente artículo para obtener información sobre  T-SQL para ciencia de datos 

Fuente: https://www.c-sharpcorner.com/article/importance-of-probability-in-machine-learning-and-data-science/ 

#machine-learning #data-science 

joe biden

1617255938

¿Cómo migrar los buzones de correo de Exchange a la nube de Office 365?

Si tiene problemas para migrar los buzones de correo de Exchange a Office 365, debe leer este artículo para saber cómo migrar los buzones de correo de Exchange EDB a Office 365. Al migrar a Office 365, los usuarios pueden acceder a sus buzones de correo desde cualquier lugar y desde cualquier dispositivo.

En esta publicación, explicaremos las razones detrás de esta migración y una solución profesional para migrar de Exchange a Office 365.

Razones para migrar Exchange Server a la nube de Office 365

Office 365 apareció por primera vez en 2011 y, dado que se considera la mejor plataforma para aquellas organizaciones que desean administrar todo su sistema de correo electrónico en la nube. Estas son las características clave de Office 365:

  1. Permite trabajar desde cualquier lugar y desde cualquier lugar.
  2. No se preocupe por el spam y el malware.
  3. La seguridad proporcionada por Office 365 es altamente confiable.
  4. Controla el costo total y brinda flexibilidad financiera.
  5. Todas las actualizaciones y mejoras son administradas por Microsoft.

¿Cómo migrar los buzones de correo de Exchange a Office 365?

Hay varias formas manuales de migrar los buzones de correo de Exchange EDB a Office 365, pero para evitar estos complicados y prolongados procedimientos, presentamos una solución de terceros, es decir, la herramienta de migración de Exchange, que es automatizada y directa para la migración de Exchange a Office 365. La herramienta funciona rápidamente y migra todos los elementos del buzón de Exchange Server a Office 365.

La herramienta de migración de Datavare Exchange es demasiado fácil de usar y ofrece pasos sencillos para migrar EDB a Office 365:

  1. Descargue e instale el software en su sistema.
  2. Agregue el archivo EDB de Exchange con el botón Examinar.
  3. Seleccione exportar a buzones de correo de Office 365.
  4. Proporcione los detalles de inicio de sesión de la cuenta de Office 365.
  5. Seleccione la carpeta y presione el botón Finalizar.

Por lo tanto, todos sus buzones de correo de Exchange EDB ahora se migran a Office 365.
Nota: puede usar filtros para migrar los elementos de datos deseados de la cuenta de Exchange a la de Office 365

Líneas finales

Este blog le indica una solución profesional para la migración de buzones de correo de Exchange a la cuenta de Office 365. Dado que las soluciones manuales son complicadas, sugerimos la herramienta de migración de Exchange, que es demasiado simple de usar. Los usuarios no se enfrentan a problemas al operar el programa. La mejor parte de este software es que no necesita habilidades técnicas para realizar la migración. Se puede comprender el funcionamiento del software descargando la versión de demostración que permite la migración de los primeros 50 elementos por carpeta.

Más información:- https://www.datavare.com/software/edb-migration.html

#herramienta de migración de intercambio #migración de intercambio #migrar buzones de correo de exchange

Lenguaje de programación Julia: el futuro de la ciencia de datos y el aprendizaje automático

Aprenda Julia para principiantes: explicación del futuro lenguaje de programación de la ciencia de datos y el aprendizaje automático

Julia es un lenguaje de programación dinámico de alto nivel, diseñado para brindar a los usuarios la velocidad de C / C ++ sin dejar de ser tan fácil de usar como Python. Esto significa que los desarrolladores pueden resolver problemas de forma más rápida y eficaz.

Julia es excelente para problemas computacionales complejos. Muchos de los primeros en adoptar Julia se concentraron en dominios científicos como la química, la biología y el aprendizaje automático.

Dicho esto, Julia es un lenguaje de propósito general y se puede usar para tareas como desarrollo web, desarrollo de juegos y más. Muchos ven a Julia como el lenguaje de próxima generación para el aprendizaje automático y la ciencia de datos, incluido el CEO de Shopify (entre muchos otros).

Cómo descargar el lenguaje de programación Julia ⤵️

Hay dos formas principales de ejecutar Julia: a través de un .jlarchivo en un IDE como VS Code o comando por comando en Julia REPL (Read Evaluate Print Loop). En esta guía, utilizaremos principalmente Julia REPL.

o simplemente dirígete a: https://julialang.org/downloads/

Una vez que haya instalado Julia, debería poder ejecutarlo y ver:

Julia 1.7 REPL después de la instalación

Conceptos básicos del lenguaje de programación Julia para principiantes

Antes de que podamos usar Julia para todas las cosas interesantes para las que se creó, como el aprendizaje automático o la ciencia de datos, primero debemos familiarizarnos con los conceptos básicos del lenguaje.

Comenzaremos repasando variables, tipos y condicionales. Luego, hablaremos de bucles, funciones y paquetes. Por último, tocaremos conceptos más avanzados como estructuras y hablaremos sobre recursos de aprendizaje adicionales.

Esta será una gira relámpago, ¡así que abróchate el cinturón y prepárate! También vale la pena señalar que este tutorial asume que tiene cierta familiaridad básica con la programación.

Introducción a las variables y tipos de Julia ⌨️

En Julia, las variables se escriben dinámicamente, lo que significa que no es necesario especificar el tipo de variable cuando la crea.

julia> a = 10 # Create the variable "a" and assign it the number 10
10

julia> a + 10 # Do a basic math operation using "a"
20

(Tenga en cuenta que en los fragmentos de código, cuando lo ve julia>, significa que el código se está ejecutando en el REPL)

Al igual que definimos una variable arriba y le asignamos un entero (número entero), también podemos hacer algo similar para cadenas y otros tipos de variables:

julia> my_string = "Hello freeCodeCamp" # Define a string variable
"Hello freeCodeCamp"

julia> balance = 238.19 # Define a float variable 
238.19

Al crear variables en Julia, el nombre de la variable siempre irá en el lado izquierdo y el valor siempre irá en el lado derecho después del signo igual. También podemos crear nuevas variables basadas en los valores de otras variables:

julia> new_balance = balance + a
248.19

Aquí podemos ver que new_balanceahora es la suma (total) de 238.19 y 10. Tenga en cuenta además que el tipo de new_balancees un flotante (número con precisión de lugar decimal) porque cuando agregamos un flotante e int juntos, automáticamente obtenemos el tipo con mayor precisión, que en este caso es un flotador. Podemos confirmar esto haciendo:

julia> typeof(new_balance)
Float64

Debido a la naturaleza de la escritura dinámica, las variables en Julia también pueden cambiar de tipo. Esto significa que en un punto, holder_balancepodría ser un flotante, y luego podría ser una cadena:

julia> holder_balance = 100.34
100.34

julia> holder_balance = "The Type has changed"
"The Type has changed"

julia> typeof(holder_balance)
String

También puede estar emocionado de saber que los nombres de variables en Julia son muy flexibles, de hecho, puede hacer algo como:

julia> 😀 = 10
10

julia> 🥲 = -10
-10

julia> 😀 + 🥲
0

Además de los nombres de las variables emoji, también puede usar cualquier otro nombre de variable Unicode que es muy útil cuando intenta representar ideas matemáticas. Puede acceder a estas variables Unicode haciendo un \y luego escribiendo el nombre, seguido de presionar tabulador:

julia> \sigma # press tab and it will render the symbol

julia> σ = 10 # set sigma equal to 10

En general, el sistema de variables en Julia es flexible y proporciona un gran conjunto de características que facilitan la escritura del código de Julia sin dejar de ser expresivo. Si desea obtener más información sobre las variables en Julia, consulte la documentación de Julia: https://docs.julialang.org/en/v1/manual/variables/

Cómo escribir declaraciones condicionales en Julia 🔀

En programación, a menudo es necesario verificar ciertas condiciones para asegurarse de que se ejecuten líneas específicas de código. Por ejemplo, si escribe un programa bancario, es posible que solo desee permitir que alguien retire dinero si la cantidad que está tratando de retirar es menor que la cantidad que tiene presente en su cuenta.

Veamos un ejemplo básico de una declaración condicional en Julia:

julia> bank_balance = 4583.11
4583.11

julia> withdraw_amount = 250
250

julia> if withdraw_amount <= bank_balance
           bank_balance -= withdraw_amount
           print("Withdrew ", withdraw_amount, " from your account")
       end
Withdrew 250 from your account

Echemos un vistazo más de cerca aquí a algunas partes de la declaración if que podrían diferir de otro código que haya visto: Primero, usamos no :para denotar el final de la línea y tampoco estamos obligados a usar ()alrededor de la declaración (aunque es animado). A continuación, no usamos {}o similares para denotar el final del condicional, en su lugar, usamos la endpalabra clave.

Al igual que usamos la instrucción if, podemos encadenarla con una elseo una elseif:

julia> withdraw_amount = 4600
4600

julia> if withdraw_amount <= bank_balance
           bank_balance -= withdraw_amount
           print("Withdrew ", withdraw_amount, " from your account")
       else
           print("Insufficent balance")
       end
Insufficent balance

Puede leer más sobre el flujo de control y las expresiones condicionales en la documentación de Julia: https://docs.julialang.org/en/v1/manual/control-flow/#man-conditional-evaluation

Cómo usar Loops en Julia 🔂

Hay dos tipos principales de bucles en Julia: un bucle for y un bucle while. Al igual que con otros lenguajes, la mayor diferencia es que en un ciclo for, estás pasando por un número predefinido de elementos mientras que, en un ciclo while, estás iterando hasta que se cambia alguna condición.

Sintácticamente, los bucles en Julia tienen una estructura muy similar a los condicionales if que acabamos de ver:

julia> greeting = ["Hello", "world", "and", "welcome", "to", "freeCodeCamp"] # define greeting, an array of strings
6-element Vector{String}:
 "Hello"
 "world"
 "and"
 "welcome"
 "to"
 "freeCodeCamp"

julia> for word in greeting
           print(word, " ")
       end
Hello world and welcome to freeCodeCamp 

En este ejemplo, primero definimos un nuevo tipo: un vector (también llamado matriz). Esta matriz contiene un montón de cadenas que definimos. El comportamiento es muy similar al de las matrices en otros lenguajes, pero vale la pena señalar que las matrices son mutables (lo que significa que puede cambiar la cantidad de elementos en la matriz después de crearla).

Nuevamente, cuando miramos la estructura del ciclo for, puede ver que estamos iterando a través de la greetingvariable. Cada vez, obtenemos una nueva palabra (en este caso) de la matriz y la asignamos a una variable temporal wordque luego imprimimos. Notará que la estructura de este ciclo es similar a la instrucción if y nuevamente usa la endpalabra clave.

Ahora que exploramos los bucles for, cambiemos de marcha y echemos un vistazo a un bucle while en Julia:

julia> while user_input != "End"
           print("Enter some input, or End to quit: ")
           user_input = readline() # Prompt the user for input
       end
Enter some input, or End to quit: hi
Enter some input, or End to quit: test
Enter some input, or End to quit: no
Enter some input, or End to quit: End

Para este ciclo while, lo configuramos para que se ejecute indefinidamente hasta que el usuario escriba la palabra "Fin". Como ya lo ha visto algunas veces, la estructura del bucle debería empezar a resultarle familiar.

Si desea ver más ejemplos de bucles en Julia, puede consultar la sección de la documentación de Julia sobre bucles: https://docs.julialang.org/en/v1/manual/control-flow/#man-loops

Cómo usar funciones en Julia

Las funciones se utilizan para crear varias líneas de código, encadenadas y accesibles cuando se hace referencia a un nombre de función. Primero, veamos un ejemplo de una función básica:

julia> function greet()
           print("Hello new Julia user!")
       end
greet (generic function with 1 method)

julia> greet()
Hello new Julia user!

Las funciones también pueden tomar argumentos, al igual que en otros lenguajes:

julia> function greetuser(user_name)
           print("Hello ", user_name, ", welcome to the Julia Community")
       end
greetuser (generic function with 1 method)

julia> greetuser("Logan")
Hello Logan, welcome to the Julia Community

En este ejemplo, tomamos un argumento y luego agregamos su valor a la impresión. Pero, ¿y si no obtenemos una cuerda?

julia> greetuser(true)
Hello true, welcome to the Julia Community

En este caso, dado que solo estamos imprimiendo, la función continúa funcionando a pesar de que ya no toma una cadena y en lugar de tomar un valor booleano (verdadero o falso). Para evitar que esto ocurra, podemos escribir explícitamente los argumentos de entrada de la siguiente manera:

julia> function greetuser(user_name::String)
           print("Hello ", user_name, ", welcome to the Julia Community")
       end
greetuser (generic function with 2 methods)

julia> greetuser("Logan")
Hello Logan, welcome to the Julia Community

Entonces ahora la función está definida para tomar solo una cadena. Probemos esto para asegurarnos de que solo podamos llamar a la función con un valor de cadena:

julia> greetuser(true)
Hello true, welcome to the Julia Community

Espera un segundo, ¿por qué sucede esto? Redefinimos la greetuserfunción, no debería tardar truemás.

Lo que estamos experimentando aquí es una de las características subyacentes más poderosas de Julia: Multiple Dispatch. Julia nos permite definir funciones con el mismo nombre y número de argumentos pero que aceptan diferentes tipos. Esto significa que podemos construir versiones de funciones genéricas o de tipo específico, lo que ayuda enormemente con la legibilidad del código, ya que no es necesario manejar todos los escenarios en una función.

Deberíamos confirmar rápidamente que realmente definimos ambas funciones:

julia> methods(greetuser)
# 2 methods for generic function "greetuser":
[1] greetuser(user_name::String) in Main at REPL[34]:1
[2] greetuser(user_name) in Main at REPL[30]:1

La methodsfunción incorporada es perfecta para esto y nos dice que tenemos dos funciones definidas, con la única diferencia de que una toma cualquier tipo y la otra solo una cadena.

Vale la pena señalar que, dado que definimos una versión especializada que acepta solo una cadena, siempre que llamemos a la función con una cadena, llamará a la versión especializada. La función más genérica no se llamará cuando se pase una cadena.

A continuación, hablemos de devolver valores de una función. En Julia, tiene dos opciones, puede usar la returnpalabra clave explícita , o puede optar por hacerlo implícitamente haciendo que la última expresión en la función sirva como valor de retorno así:

julia> function sayhi()
           "This is a test"
           "hi"
       end
sayhi (generic function with 1 method)

julia> sayhi()
"hi"

En el ejemplo anterior, la función devuelve el valor de cadena "hi", ya que es la última expresión y no hay una declaración de retorno explícita. También puede definir la función como:

julia> function sayhi()
           "This is a test"
          return "hi"
       end
sayhi (generic function with 1 method)

julia> sayhi()
"hi"

En general, desde el punto de vista de la legibilidad, tiene sentido usar la declaración de retorno explícita en caso de que alguien que lea su código no sepa sobre el comportamiento de retorno implícito en las funciones de Julia.

Otra característica útil de las funciones es la capacidad de proporcionar argumentos opcionales:


julia> function sayhello(response="hello")
          return response
       end
sayhello (generic function with 2 methods)

julia> sayhello()
"hello"

julia> sayhello("hi")
"hi"

En este ejemplo, lo definimos responsecomo un argumento opcional para que podamos permitirle usar el comportamiento predeterminado que definimos o podemos anularlo manualmente cuando sea necesario. Estos ejemplos solo muestran la superficie de lo que es posible con las funciones en Julia. Si desea leer más sobre todas las cosas interesantes que puede hacer, consulte: https://docs.julialang.org/en/v1/manual/functions/

Cómo usar paquetes en Julia 📦

El administrador de paquetes de Julia y el ecosistema de paquetes son algunas de las características más importantes del lenguaje. De hecho, escribí un artículo completo sobre por qué es una de las características más subestimadas del idioma .

Dicho esto, hay dos formas de interactuar con los paquetes en Julia: a través de REPL o usando el paquete Pkg. Nos centraremos principalmente en el REPL en esta publicación, ya que es mucho más fácil de usar en mi experiencia.

Una vez que haya instalado Julia, puede ingresar al administrador de paquetes desde REPL escribiendo ].

Modo paquete en Julia REPL

Ahora que estamos en el administrador de paquetes, hay algunas cosas que comúnmente queremos hacer:

  • Agregar un paquete
  • Quitar un paquete
  • Comprueba lo que ya está instalado

Si desea ver todos los comandos posibles en el REPL, simplemente ingrese al modo Pkg escribiendo ]y luego escriba ?  seguido de la tecla enter / return.

Cómo agregar paquetes de Julia ➕

Vamos a añadir nuestro primer paquete, Example.jl. Para hacerlo, podemos ejecutar:

(@v1.7) pkg> add Example

que debería proporcionar una salida que se parezca a:

(@v1.7) pkg> add Example
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Updating registry at `~/.julia/registries/JuliaPOMDP`
Updating git-repo `https://github.com/JuliaPOMDP/Registry`
Resolving package versions...
Installed Example ─ v0.5.3
Updating `~/.julia/environments/v1.7/Project.toml`
[7876af07] + Example v0.5.3
Updating `~/.julia/environments/v1.7/Manifest.toml`
[7876af07] + Example v0.5.3
Precompiling project...
1 dependency successfully precompiled in 1 seconds (69 already precompiled)
(@v1.7) pkg>

Por razones de espacio, omitiré más salidas bajo el supuesto de que usted me está siguiendo.

Cómo verificar el estado del paquete en Julia 🔍

Ahora que creemos que tenemos un paquete instalado, verifiquemos dos veces si realmente está allí escribiendo status(o stpara abreviar) en el administrador de paquetes:

(@v1.7) pkg> st
Status `~/.julia/environments/v1.7/Project.toml`
[7876af07] Example v0.5.3
[587475ba] Flux v0.12.8

Aquí podemos ver que tengo dos paquetes instalados, Flux y Example. También me da la ruta al archivo que administra mi entorno actual (en este caso, Julia global v1.7) junto con las versiones del paquete que he instalado.

Cómo quitar un paquete de Julia 📛

Si quisiera eliminar un paquete de mi entorno activo, como Flux, simplemente puedo escribir remove Flux(o rmcomo abreviatura):

(@v1.7) pkg> rm Flux
Updating `~/.julia/environments/v1.7/Project.toml`
[587475ba] - Flux v0.12.8

Un rápido statusdespués muestra que esto fue exitoso:

(@v1.7) pkg> st
Status `~/.julia/environments/v1.7/Project.toml`
[7876af07] Example v0.5.3

Ahora conocemos los conceptos básicos del trabajo con paquetes. Pero hemos cometido un delito de programación importante al utilizar nuestro entorno de paquete global.

Cómo usar los paquetes de Julia 📦

Ahora que hemos repasado cómo administrar los paquetes, exploremos cómo usarlos. En pocas palabras, solo necesita escribir using packageNamepara usar un paquete específico que desee. Una de mis nuevas funciones favoritas en Julia 1.7 (destacada en esta publicación de blog ) se muestra a continuación:

Imagen capturada por el autor

Si recuerdas, eliminamos el paquete Flux y, por supuesto, lo olvidé, así que fui a usarlo y cargarlo escribiendo using Flux. El REPL me pide automáticamente que lo instale mediante un simple mensaje "y / n". Esta es una característica pequeña pero ahorra una gran cantidad de tiempo y una posible confusión.

Vale la pena señalar que hay dos formas de acceder a las funciones exportadas de un paquete: a través de la usingpalabra clave y la importpalabra clave. La gran diferencia es que usingtrae automáticamente todas las funciones al espacio de nombres actual (para lo cual puede pensar en una gran lista de funciones en las que Julia conoce las definiciones) mientras que importle da acceso a todas las funciones pero tiene que prefijar la función con el nombre del paquete como: Flux.gradient()donde Fluxes el nombre del paquete y gradient()es el nombre de una función.


¿Cómo usar Structs en Julia?

Julia no tiene paradigmas de programación orientada a objetos (OOP) integrados en el lenguaje como clases. Sin embargo, las estructuras en Julia se pueden usar de manera similar a las clases para crear objetos y tipos personalizados. A continuación, mostraremos un ejemplo básico:

julia> mutable struct dog
           breed::String
           paws::Int
           name::String
           weight::Float64
       end

julia> my_dog = dog("Australian Shepard", 4, "Indy", 34.0)
dog("Australian Shepard", 4, "Indy", 34.0)

julia> my_dog.name
"Indy"

En este ejemplo, definimos una estructura para representar a un perro. En la estructura, definimos cuatro atributos que componen el objeto perro. En las líneas siguientes, mostramos el código para crear realmente un objeto perro y luego acceder a algunos de sus atributos. Tenga en cuenta que no necesita especificar los tipos de atributos, podría dejarlo más abierto. Para este ejemplo, definimos tipos explícitos para resaltar esa característica.

Notarás que de manera similar a las clases en Python (y otros lenguajes), no definimos un constructor explícito para crear el objeto perro. Sin embargo, podemos definir uno si sería útil usarlo:

julia> mutable struct dog
           breed::String
           paws::Int
           name::String
           weight::Float64
           
           function dog(breed, name, weight, paws=4)
               new(breed, paws, name, weight)
           end
       end

julia> new_dog = dog("German Shepard", "Champ", 46)
dog("German Shepard", 4, "Champ", 46.0)

Aquí definimos un constructor y usamos la palabra clave especial newpara crear el objeto al final de la función. También puede crear captadores y definidores específicamente para el objeto perro haciendo lo siguiente:

julia> function get_name(dog_obj::dog)
           print("The dogs's name is: ", dog_obj.name)
       end
get_name (generic function with 1 method)

julia> get_name(new_dog)
The dogs's name is: Champ

En este ejemplo, la get_namefunción solo toma un objeto de tipo dog. Si intenta pasar algo más, saldrá un error:

julia> get_name("test")
ERROR: MethodError: no method matching get_name(::String)
Closest candidates are:
  get_name(::dog) at REPL[61]:1
Stacktrace:
 [1] top-level scope
   @ REPL[63]:1

Vale la pena señalar que también definimos la estructura como mutable inicialmente para poder cambiar los valores de campo después de crear el objeto. Omite la palabra clave mutablesi desea que el estado inicial de los objetos persista.

Las estructuras en Julia no solo nos permiten crear objetos, también estamos definiendo un tipo personalizado en el proceso:

julia> typeof(new_dog)
dog

En general, las estructuras se utilizan mucho en todo el ecosistema de Julia y puede obtener más información sobre ellas en los documentos: https://docs.julialang.org/en/v1/base/base/#struct

Recursos adicionales de aprendizaje de programación de Julia 📚

Espero que este tutorial te haya ayudado a ponerte al día con muchas de las ideas centrales del lenguaje Julia. Dicho esto, sé que todavía hay lagunas, ya que esta es una guía extendida pero no completa. Para obtener más información sobre Julia, puede consultar la pestaña de aprendizaje en el sitio web de Julia: https://julialang.org/learning/, que tiene cursos guiados, videos de YouTube y problemas de práctica con mentores.

Si tiene otras preguntas o necesita ayuda para comenzar con Julia, no dude en ponerse en contacto conmigo: https://twitter.com/OfficialLoganK

Fuente: https://www.freecodecamp.org

#julia 

Julia: el futuro de la ciencia de datos y el aprendizaje automático

Aprenda Julia para principiantes: explicación del futuro lenguaje de programación de la ciencia de datos y el aprendizaje automático

El lenguaje de programación Julia como el lenguaje de próxima generación para el aprendizaje automático y la ciencia de datos, el desarrollo web, el desarrollo de juegos y más.

Julia es un lenguaje de programación dinámico de alto nivel, diseñado para brindar a los usuarios la velocidad de C/C++ sin dejar de ser tan fácil de usar como Python. Esto significa que los desarrolladores pueden resolver problemas de forma más rápida y eficaz.

Julia es excelente para problemas computacionales complejos. Muchos de los primeros usuarios de Julia se concentraron en dominios científicos como la química, la biología y el aprendizaje automático.

Dicho esto, Julia es un lenguaje de propósito general y puede usarse para tareas como desarrollo web, desarrollo de juegos y más. Muchos ven a Julia como el lenguaje de próxima generación para el aprendizaje automático y la ciencia de datos, incluido el director ejecutivo de Shopify (entre muchos otros).

Cómo descargar el lenguaje de programación Julia ⤵️

Hay dos formas principales de ejecutar Julia: a través de un .jlarchivo en un IDE como VS Code o comando por comando en Julia REPL (Read Evaluate Print Loop). En esta guía, utilizaremos principalmente Julia REPL.

o simplemente diríjase a: https://julialang.org/downloads/

Una vez que haya instalado Julia, debería poder iniciarlo y ver:

Julia 1.7 REPL después de la instalación

Conceptos básicos del lenguaje de programación Julia para principiantes

Antes de que podamos usar Julia para todas las cosas emocionantes para las que se creó, como el aprendizaje automático o la ciencia de datos, primero debemos familiarizarnos con los conceptos básicos del lenguaje.

Comenzaremos repasando variables, tipos y condicionales. Luego, hablaremos sobre bucles, funciones y paquetes. Por último, tocaremos conceptos más avanzados como estructuras y hablaremos sobre recursos de aprendizaje adicionales.

Esta va a ser una gira vertiginosa, ¡así que ponte el cinturón y prepárate! También vale la pena señalar que este tutorial asume que tiene cierta familiaridad básica con la programación.

Una introducción a las variables y tipos de Julia ⌨️

En Julia, las variables se escriben dinámicamente, lo que significa que no necesita especificar el tipo de variable cuando la crea.

julia> a = 10 # Create the variable "a" and assign it the number 10
10

julia> a + 10 # Do a basic math operation using "a"
20

(Tenga en cuenta que en los fragmentos de código, cuando lo ve julia>, significa que el código se está ejecutando en REPL)

Al igual que definimos una variable arriba y le asignamos un entero (número entero), también podemos hacer algo similar para cadenas y otros tipos de variables:

julia> my_string = "Hello freeCodeCamp" # Define a string variable
"Hello freeCodeCamp"

julia> balance = 238.19 # Define a float variable 
238.19

Al crear variables en Julia, el nombre de la variable siempre irá en el lado izquierdo y el valor siempre irá en el lado derecho después del signo igual. También podemos crear nuevas variables basadas en los valores de otras variables:

julia> new_balance = balance + a
248.19

Aquí podemos ver que new_balanceahora es la suma (total) de 238.19 y 10. Tenga en cuenta además que el tipo de new_balancees un flotante (número con precisión decimal) porque cuando sumamos un flotante y un int juntos, automáticamente obtenemos el tipo con mayor precisión, que en este caso es un flotador. Podemos confirmar esto haciendo:

julia> typeof(new_balance)
Float64

Debido a la naturaleza de la tipificación dinámica, las variables en Julia también pueden cambiar de tipo. Esto significa que en un momento holder_balancepodría ser un flotador y luego podría ser una cadena:

julia> holder_balance = 100.34
100.34

julia> holder_balance = "The Type has changed"
"The Type has changed"

julia> typeof(holder_balance)
String

También puede estar emocionado de saber que los nombres de variables en Julia son muy flexibles, de hecho, puede hacer algo como:

julia> 😀 = 10
10

julia> 🥲 = -10
-10

julia> 😀 + 🥲
0

Además de los nombres de variables emoji, también puede usar cualquier otro nombre de variable Unicode, que es muy útil cuando intenta representar ideas matemáticas. Puede acceder a estas variables Unicode haciendo \y luego escribiendo el nombre, seguido de presionar tab:

julia> \sigma # press tab and it will render the symbol

julia> σ = 10 # set sigma equal to 10

En general, el sistema de variables en Julia es flexible y proporciona un gran conjunto de características que facilitan la escritura del código de Julia sin dejar de ser expresivo. Si desea obtener más información sobre las variables en Julia, consulte la documentación de Julia: https://docs.julialang.org/en/v1/manual/variables/

Cómo escribir declaraciones condicionales en Julia 🔀

En la programación, a menudo necesita verificar ciertas condiciones para asegurarse de que se ejecuten líneas específicas de código. Por ejemplo, si escribe un programa bancario, es posible que solo desee permitir que alguien retire dinero si la cantidad que está tratando de retirar es menor que la cantidad que tiene presente en su cuenta.

Veamos un ejemplo básico de una declaración condicional en Julia:

julia> bank_balance = 4583.11
4583.11

julia> withdraw_amount = 250
250

julia> if withdraw_amount <= bank_balance
           bank_balance -= withdraw_amount
           print("Withdrew ", withdraw_amount, " from your account")
       end
Withdrew 250 from your account

Echemos un vistazo más de cerca a algunas partes de la declaración if que pueden diferir de otro código que haya visto: Primero, usamos no :para indicar el final de la línea y tampoco estamos obligados a usar ()alrededor de la declaración (aunque es animado). A continuación, no usamos {}o similares para denotar el final del condicional, sino que usamos la endpalabra clave.

Al igual que usamos la instrucción if, podemos encadenarla con un elseo un elseif:

julia> withdraw_amount = 4600
4600

julia> if withdraw_amount <= bank_balance
           bank_balance -= withdraw_amount
           print("Withdrew ", withdraw_amount, " from your account")
       else
           print("Insufficent balance")
       end
Insufficent balance

Puede leer más sobre el flujo de control y las expresiones condicionales en la documentación de Julia: https://docs.julialang.org/en/v1/manual/control-flow/#man-conditional-e Evaluation

Cómo usar Loops en Julia 🔂

Hay dos tipos principales de bucles en Julia: un bucle for y un bucle while. Al igual que con otros lenguajes, la mayor diferencia es que en un ciclo for, está pasando por una cantidad predefinida de elementos, mientras que en un ciclo while, está iterando hasta que se cambia alguna condición.

Sintácticamente, los bucles en Julia tienen una estructura muy similar a los condicionales if que acabamos de ver:

julia> greeting = ["Hello", "world", "and", "welcome", "to", "freeCodeCamp"] # define greeting, an array of strings
6-element Vector{String}:
 "Hello"
 "world"
 "and"
 "welcome"
 "to"
 "freeCodeCamp"

julia> for word in greeting
           print(word, " ")
       end
Hello world and welcome to freeCodeCamp 

En este ejemplo, primero definimos un nuevo tipo: un vector (también llamado matriz). Esta matriz contiene un montón de cadenas que definimos. El comportamiento es muy similar al de las matrices en otros idiomas, pero vale la pena señalar que las matrices son mutables (lo que significa que puede cambiar la cantidad de elementos en la matriz después de crearla).

Nuevamente, cuando observamos la estructura del ciclo for, puede ver que estamos iterando a través de la greetingvariable. Cada vez, obtenemos una nueva palabra (en este caso) de la matriz y la asignamos a una variable temporal wordque luego imprimimos. Notará que la estructura de este bucle se parece a la declaración if y nuevamente usa la endpalabra clave.

Ahora que exploramos los bucles, cambiemos de marcha y echemos un vistazo a un bucle while en Julia:

julia> while user_input != "End"
           print("Enter some input, or End to quit: ")
           user_input = readline() # Prompt the user for input
       end
Enter some input, or End to quit: hi
Enter some input, or End to quit: test
Enter some input, or End to quit: no
Enter some input, or End to quit: End

Para este ciclo while, lo configuramos para que se ejecute indefinidamente hasta que el usuario escriba la palabra "Fin". Como ya lo ha visto varias veces, la estructura del ciclo debería comenzar a parecerle familiar.

Si desea ver más ejemplos de bucles en Julia, puede consultar la sección de documentación de Julia sobre bucles: https://docs.julialang.org/en/v1/manual/control-flow/#man-loops

Cómo usar funciones en Julia

Las funciones se utilizan para crear varias líneas de código, encadenadas y accesibles cuando se hace referencia a un nombre de función. Primero, veamos un ejemplo de una función básica:

julia> function greet()
           print("Hello new Julia user!")
       end
greet (generic function with 1 method)

julia> greet()
Hello new Julia user!

Las funciones también pueden tomar argumentos, al igual que en otros lenguajes:

julia> function greetuser(user_name)
           print("Hello ", user_name, ", welcome to the Julia Community")
       end
greetuser (generic function with 1 method)

julia> greetuser("Logan")
Hello Logan, welcome to the Julia Community

En este ejemplo, tomamos un argumento y luego agregamos su valor a la impresión. Pero, ¿y si no conseguimos una cuerda?

julia> greetuser(true)
Hello true, welcome to the Julia Community

En este caso, dado que solo estamos imprimiendo, la función continúa funcionando a pesar de no tomar más una cadena y en lugar de tomar un valor booleano (verdadero o falso). Para evitar que esto ocurra, podemos escribir explícitamente los argumentos de entrada de la siguiente manera:

julia> function greetuser(user_name::String)
           print("Hello ", user_name, ", welcome to the Julia Community")
       end
greetuser (generic function with 2 methods)

julia> greetuser("Logan")
Hello Logan, welcome to the Julia Community

Entonces ahora la función está definida para tomar solo una cadena. Probemos esto para asegurarnos de que solo podemos llamar a la función con un valor de cadena:

julia> greetuser(true)
Hello true, welcome to the Julia Community

Espera un segundo, ¿por qué sucede esto? Redefinimos la greetuserfunción, no debería tardar truemás.

Lo que estamos experimentando aquí es una de las características subyacentes más poderosas de Julia: Multiple Dispatch. Julia nos permite definir funciones con el mismo nombre y número de argumentos pero que aceptan tipos diferentes. Esto significa que podemos crear versiones de funciones genéricas o de tipo específico, lo que ayuda enormemente con la legibilidad del código, ya que no es necesario manejar todos los escenarios en una sola función.

Deberíamos confirmar rápidamente que en realidad definimos ambas funciones:

julia> methods(greetuser)
# 2 methods for generic function "greetuser":
[1] greetuser(user_name::String) in Main at REPL[34]:1
[2] greetuser(user_name) in Main at REPL[30]:1

La methodsfunción incorporada es perfecta para esto y nos dice que tenemos dos funciones definidas, con la única diferencia de que una acepta cualquier tipo y la otra solo una cadena.

Vale la pena señalar que dado que definimos una versión especializada que acepta solo una cadena, cada vez que llamamos a la función con una cadena, llamará a la versión especializada. La función más genérica no se llamará cuando se pase una cadena.

A continuación, hablemos sobre la devolución de valores de una función. En Julia, tiene dos opciones, puede usar la returnpalabra clave explícita, o puede optar por hacerlo implícitamente haciendo que la última expresión en la función sirva como valor de retorno así:

julia> function sayhi()
           "This is a test"
           "hi"
       end
sayhi (generic function with 1 method)

julia> sayhi()
"hi"

En el ejemplo anterior, el valor de cadena "hola" se devuelve desde la función, ya que es la última expresión y no hay una declaración de devolución explícita. También podría definir la función como:

julia> function sayhi()
           "This is a test"
          return "hi"
       end
sayhi (generic function with 1 method)

julia> sayhi()
"hi"

En general, desde el punto de vista de la legibilidad, tiene sentido usar la declaración de devolución explícita en caso de que alguien que lea su código no conozca el comportamiento de devolución implícita en las funciones de Julia.

Otra característica útil de las funciones es la capacidad de proporcionar argumentos opcionales:


julia> function sayhello(response="hello")
          return response
       end
sayhello (generic function with 2 methods)

julia> sayhello()
"hello"

julia> sayhello("hi")
"hi"

En este ejemplo, lo definimos responsecomo un argumento opcional para que podamos permitirle usar el comportamiento predeterminado que definimos o podemos anularlo manualmente cuando sea necesario. Estos ejemplos solo rascan la superficie de lo que es posible con funciones en Julia. Si desea leer más sobre todas las cosas geniales que puede hacer, consulte: https://docs.julialang.org/en/v1/manual/functions/

Cómo usar Paquetes en Julia 📦

El administrador de paquetes de Julia y el ecosistema de paquetes son algunas de las características más importantes del lenguaje. De hecho, escribí un artículo completo sobre por qué es una de las características más subestimadas del lenguaje .

Dicho esto, hay dos formas de interactuar con los paquetes en Julia: a través de REPL o usando el paquete Pkg. Nos centraremos principalmente en REPL en esta publicación, ya que es mucho más fácil de usar en mi experiencia.

Una vez que haya instalado Julia, puede ingresar al administrador de paquetes desde REPL escribiendo ].

Modo paquete en Julia REPL

Ahora que estamos en el administrador de paquetes, hay algunas cosas que comúnmente queremos hacer:

  • agregar un paquete
  • quitar un paquete
  • Comprobar lo que ya está instalado

Si desea ver todos los comandos posibles en el REPL, simplemente ingrese al modo Pkg escribiendo ]y luego escriba ?  seguido de la tecla enter/return.

Cómo agregar paquetes de Julia ➕

Agreguemos nuestro primer paquete, Example.jl. Para ello, podemos ejecutar:

(@v1.7) pkg> add Example

que debería proporcionar una salida que se parece a:

(@v1.7) pkg> add Example
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Updating registry at `~/.julia/registries/JuliaPOMDP`
Updating git-repo `https://github.com/JuliaPOMDP/Registry`
Resolving package versions...
Installed Example ─ v0.5.3
Updating `~/.julia/environments/v1.7/Project.toml`
[7876af07] + Example v0.5.3
Updating `~/.julia/environments/v1.7/Manifest.toml`
[7876af07] + Example v0.5.3
Precompiling project...
1 dependency successfully precompiled in 1 seconds (69 already precompiled)
(@v1.7) pkg>

Por razones de espacio, omitiré más salidas bajo el supuesto de que me sigues.

Cómo verificar el estado del paquete en Julia 🔍

Ahora que creemos que tenemos un paquete instalado, verifiquemos dos veces si realmente está allí escribiendo status(o stde forma abreviada) en el administrador de paquetes:

(@v1.7) pkg> st
Status `~/.julia/environments/v1.7/Project.toml`
[7876af07] Example v0.5.3
[587475ba] Flux v0.12.8

Aquí podemos ver que tengo dos paquetes instalados, Flux y Example. También me da la ruta al archivo que administra mi entorno actual (en este caso, Julia v1.7 global) junto con las versiones de paquetes que tengo instaladas.

Cómo quitar un paquete de Julia 📛

Si quisiera eliminar un paquete de mi entorno activo, como Flux, simplemente puedo escribir remove Flux(o rmcomo abreviatura):

(@v1.7) pkg> rm Flux
Updating `~/.julia/environments/v1.7/Project.toml`
[587475ba] - Flux v0.12.8

Un rápido statusdespués muestra que esto fue exitoso:

(@v1.7) pkg> st
Status `~/.julia/environments/v1.7/Project.toml`
[7876af07] Example v0.5.3

Ahora conocemos los conceptos básicos de trabajar con paquetes. Pero hemos cometido un gran crimen de programación al utilizar nuestro entorno de paquete global.

Cómo usar los paquetes de Julia 📦

Ahora que hemos repasado cómo administrar paquetes, exploremos cómo usarlos. Sencillamente, solo necesita escribir using packageNamepara usar un paquete específico que desee. Una de mis nuevas características favoritas en Julia 1.7 (destacada en esta publicación de blog ) se muestra a continuación:

Imagen capturada por el autor

Si recuerda, eliminamos el paquete Flux y, por supuesto, lo olvidé, así que fui a usarlo y lo cargué escribiendo using Flux. El REPL me solicita automáticamente que lo instale a través de un simple indicador "s/n". Esta es una característica pequeña pero ahorra una gran cantidad de tiempo y una posible confusión.

Vale la pena señalar que hay dos formas de acceder a las funciones exportadas de un paquete: a través de la usingpalabra clave y la importpalabra clave. La gran diferencia es que usingtrae automáticamente todas las funciones al espacio de nombres actual (para lo cual puede pensar en una gran lista de funciones cuyas definiciones conoce Julia), mientras que importle da acceso a todas las funciones pero tiene que prefijar la función con el nombre del paquete como: Flux.gradient()donde Fluxes el nombre del paquete y gradient()es el nombre de una función.


¿Cómo usar Structs en Julia?

Julia no tiene paradigmas de programación orientada a objetos (POO) integrados en el lenguaje como clases. Sin embargo, las estructuras en Julia se pueden usar de manera similar a las clases para crear objetos y tipos personalizados. A continuación, mostraremos un ejemplo básico:

julia> mutable struct dog
           breed::String
           paws::Int
           name::String
           weight::Float64
       end

julia> my_dog = dog("Australian Shepard", 4, "Indy", 34.0)
dog("Australian Shepard", 4, "Indy", 34.0)

julia> my_dog.name
"Indy"

En este ejemplo, definimos una estructura para representar un perro. En la estructura, definimos cuatro atributos que componen el objeto perro. En las líneas siguientes, mostramos el código para crear realmente un objeto de perro y luego acceder a algunos de sus atributos. Tenga en cuenta que no necesita especificar los tipos de los atributos, puede dejarlo más abierto. Para este ejemplo, definimos tipos explícitos para resaltar esa característica.

Notarás que, de forma similar a las clases en Python (y otros lenguajes), no definimos un constructor explícito para crear el objeto perro. Sin embargo, podemos definir uno si fuera útil usarlo:

julia> mutable struct dog
           breed::String
           paws::Int
           name::String
           weight::Float64
           
           function dog(breed, name, weight, paws=4)
               new(breed, paws, name, weight)
           end
       end

julia> new_dog = dog("German Shepard", "Champ", 46)
dog("German Shepard", 4, "Champ", 46.0)

Aquí definimos un constructor y usamos la palabra clave especial newpara crear el objeto al final de la función. También puede crear getters y setters específicamente para el objeto perro haciendo lo siguiente:

julia> function get_name(dog_obj::dog)
           print("The dogs's name is: ", dog_obj.name)
       end
get_name (generic function with 1 method)

julia> get_name(new_dog)
The dogs's name is: Champ

En este ejemplo, la get_namefunción solo toma un objeto de tipo dog. Si intenta pasar algo más, se producirá un error:

julia> get_name("test")
ERROR: MethodError: no method matching get_name(::String)
Closest candidates are:
  get_name(::dog) at REPL[61]:1
Stacktrace:
 [1] top-level scope
   @ REPL[63]:1

Vale la pena señalar que también definimos la estructura para que sea mutable inicialmente para que podamos cambiar los valores de campo después de crear el objeto. Omite la palabra clave mutablesi desea que el estado inicial de los objetos persista.

Las estructuras en Julia no solo nos permiten crear objetos, también estamos definiendo un tipo personalizado en el proceso:

julia> typeof(new_dog)
dog

En general, las estructuras se usan mucho en el ecosistema de Julia y puede obtener más información sobre ellas en los documentos: https://docs.julialang.org/en/v1/base/base/#struct

Recursos adicionales de aprendizaje de programación de Julia 📚

Espero que este tutorial te haya ayudado a ponerte al día con muchas de las ideas centrales del lenguaje Julia. Dicho esto, sé que todavía hay lagunas, ya que esta es una guía extensa pero no completa. Para obtener más información sobre Julia, puede consultar la pestaña de aprendizaje en el sitio web de Julia: https://julialang.org/learning/ que tiene cursos guiados, videos de YouTube y problemas de práctica guiados.

Si tiene otras preguntas o necesita ayuda para comenzar con Julia, no dude en ponerse en contacto conmigo: https://twitter.com/OfficialLoganK

Fuente del artículo original en https://www.freecodecamp.org

#julia #datascience #machinelearning